%global appLoc serverName; %let compiled_apploc=/30.SASApps/3030.Projects/303001.DataController/build2/DataController; %let serverName=SASApp; %let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); %let sasjs_clickmeservice=clickme; %let syscc=0; options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax; /* user supplied build vars */ /* user supplied build vars end */ /* system macro dependencies for build process */ %macro mf_getattrn( libds ,attr )/*/STORE SOURCE*/; %local dsid rc; %let dsid=%sysfunc(open(&libds,is)); %if &dsid = 0 %then %do; %put %str(WARN)ING: Cannot open %trim(&libds), system message below; %put %sysfunc(sysmsg()); -1 %end; %else %do; %sysfunc(attrn(&dsid,&attr)) %let rc=%sysfunc(close(&dsid)); %end; %mend mf_getattrn; %macro mf_nobs(libds )/*/STORE SOURCE*/; %mf_getattrn(&libds,NLOBS) %mend mf_nobs; %macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1) )/des='ungraceful abort' /*STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mf_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %abort; %mend mf_abort; /** @endcond */ %macro mf_verifymacvars( verifyVars /* list of macro variable NAMES */ ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ ,mAbort=SOFT )/*/STORE SOURCE*/; %local verifyIterator verifyVar abortmsg; %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); %if not %symexist(&verifyvar) %then %do; %let abortmsg= Variable &verifyVar is MISSING; %goto exit_err; %end; %if %length(%trim(&&&verifyVar))=0 %then %do; %let abortmsg= Variable &verifyVar is EMPTY; %goto exit_err; %end; %if &makeupcase=YES %then %do; %let &verifyVar=%upcase(&&&verifyvar); %end; %end; %goto exit_success; %exit_err: %put &abortmsg; %mf_abort(iftrue=(&mabort ne SOFT), mac=mf_verifymacvars, msg=%str(&abortmsg) ) 0 %return; %exit_success: 1 %mend mf_verifymacvars; %macro mm_getDirectories( path= ,outds=work.mm_getDirectories ,mDebug=0 )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_getDirectories.sas; %&mD.put _local_; data &outds (keep=directoryuri name directoryname directorydesc ); length directoryuri name directoryname directorydesc $256; call missing(of _all_); __i+1; %if %length(&path)=0 %then %do; do while (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); %end; %else %do; do while( metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) >0 ); %end; __rc1=metadata_getattr(directoryuri, "Name", name); __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); &mD.putlog (_all_) (=); drop __:; __i+1; if sum(of __rc1-__rc3)=0 then output; end; run; %mend mm_getDirectories; %macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767); %local rc fname; %if &prefix=0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %end; %else %do; %local x len; %let len=%eval(8-%length(&prefix)); %let x=0; %do x=0 %to &maxtries; %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); %if %sysfunc(fileref(&fname)) > 0 %then %do; %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); %if &rc %then %put %sysfunc(sysmsg()); &fname %return; %end; %end; %put unable to find available fileref after &maxtries attempts; %end; %mend mf_getuniquefileref; %macro mm_updatestpsourcecode(stp= ,stpcode= ,minify=NO ,mdebug=0 ); /* first, check if STP exists */ %local tsuri; %let tsuri=stopifempty ; data _null_; format type uri tsuri value $200.; call missing (of _all_); path="&stp.(StoredProcess)"; /* first, find the STP ID */ if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; /* get sourcecode */ cnt=1; do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); rc=metadata_getattr(tsuri,"Name",value); %if &mdebug=1 %then %do; put tsuri= value=; %end; if value="SourceCode" then do; /* found it! */ rc=metadata_getattr(tsuri,"Id",value); call symputx('tsuri',value,'l'); stop; end; cnt+1; end; end; else put (_all_)(=); run; %if &tsuri=stopifempty %then %do; %put %str(WARN)ING: &stp.(StoredProcess) not found!; %return; %end; %if %length(&stpcode)<2 %then %do; %put %str(WARN)ING: No SAS code supplied!!; %return; %end; %local frefin frefout; %let frefin=%mf_getuniquefileref(); %let frefout=%mf_getuniquefileref(); /* write header XML */ data _null_; file &frefin; put "$METAREPOSITORY ','>'); outstr=tranwrd(outstr,"'",'''); outstr=tranwrd(outstr,'"','"'); outstr=tranwrd(outstr,'0A'x,' '); outstr=tranwrd(outstr,'0D'x,' '); outstr=tranwrd(outstr,'$','$'); %if &minify=YES %then %do; outstr=cats(outstr); if outstr ne ''; if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); %end; outstr=trim(outstr); put outstr ' '; run; %end; data _null_; file &frefin mod; put "'>SAS268435456 "; run; proc metadata in= &frefin out=&frefout; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=32767; input; put _infile_; run; %end; %else %do; filename &frefin clear; filename &frefout clear; %end; %mend mm_updatestpsourcecode; %macro mm_getrepos( outds=work.mm_getrepos )/*/STORE SOURCE*/; * use a temporary fileref to hold the response; filename response temp; /* get list of libraries */ proc metadata in= "1" out=response; run; /* write the response to the log for debugging */ /* data _null_; infile response lrecl=1048576; input; put _infile_; run; */ /* create an XML map to read the response */ filename sxlemap temp; data _null_; file sxlemap; put ''; put "/GetRepositories/Repositories/Repository"; put ""; put ''; put "/GetRepositories/Repositories/Repository/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Name"; put ""; put "characterstring200"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Desc"; put ""; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@DefaultNS"; put "characterstring200"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryType"; put "characterstring20"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; put "characterstring10"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@Access"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@CurrentAccess"; put "characterstring16"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@PauseState"; put "characterstring16"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Path"; put ""; put "characterstring256"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Engine"; put ""; put "characterstring8"; put ''; put ''; put "/GetRepositories/Repositories/Repository/@Options"; put ""; put "characterstring32"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataCreated"; put "characterstring24"; put ''; put ''; put ""; put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; put "characterstring24"; put ''; put '
'; run; libname _XML_ xml xmlfileref=response xmlmap=sxlemap; proc sort data= _XML_.SASRepos out=&outds; by name; run; /* clear references */ filename sxlemap clear; filename response clear; libname _XML_ clear; %mend mm_getrepos; %macro mm_getservercontexts( outds=work.mm_getrepos )/*/STORE SOURCE*/; %local repo repocnt x; %let repo=%sysfunc(getoption(metarepository)); /* first get list of available repos */ %mm_getrepos(outds=work.repos) %let repocnt=0; data _null_; set repos; where repositorytype in('CUSTOM','FOUNDATION'); keep id name ; call symputx(cats('repo',_n_),name,'l'); call symputx('repocnt',_n_,'l'); run; filename __mc1 temp; filename __mc2 temp; data &outds; length serveruri servername $200; call missing (of _all_); stop; run; %do x=1 %to &repocnt; options metarepository=&&repo&x; proc metadata in= "$METAREPOSITORY ServerContextSAS 0" out=__mc1; run; /* data _null_; infile __mc1 lrecl=1048576; input; put _infile_; run; */ data _null_; file __mc2; put ''; put "/GetMetadataObjects/Objects/ServerContext"; put ""; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Id"; put ""; put "characterstring200"; put ''; put ''; put "/GetMetadataObjects/Objects/ServerContext/@Name"; put ""; put "characterstring200"; put ''; put '
'; run; libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; proc append base=&outds data=__mc3.SASContexts;run; libname __mc3 clear; %end; options metarepository=&repo; filename __mc1 clear; filename __mc2 clear; %mend mm_getservercontexts; %macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1) , errds=work.mp_abort_errds , mode=REGULAR )/*/STORE SOURCE*/; %global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode; %local fref fid i; %if not(%eval(%unquote(&iftrue))) %then %return; %put NOTE: /// mp_abort macro executing //; %if %length(&mac)>0 %then %put NOTE- called by &mac; %put NOTE - &msg; %if %symexist(_SYSINCLUDEFILEDEVICE) /* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ and %superq(SYSPROCESSNAME) ne %str(Compute Server) %then %do; %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; data &errds; iftrue='1=1'; length mac $100 msg $5000; mac=symget('mac'); msg=symget('msg'); run; data _null_; abort cancel FILE; run; %return; %end; %end; /* Web App Context */ %if %symexist(_PROGRAM) or %superq(SYSPROCESSNAME) = %str(Compute Server) or &mode=INCLUDE %then %do; options obs=max replace mprint; %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do; options nosyntaxcheck; %end; %if &mode=INCLUDE %then %do; %if %sysfunc(exist(&errds))=1 %then %do; data _null_; set &errds; call symputx('iftrue',iftrue,'l'); call symputx('mac',mac,'l'); call symputx('msg',msg,'l'); putlog (_all_)(=); run; %if (&iftrue)=0 %then %return; %end; %else %do; %put &sysmacroname: No include errors found; %return; %end; %end; /* extract log errs / warns, if exist */ %local logloc logline; %global logmsg; /* capture global messages */ %if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG; %else %let logloc=%qsysfunc(getoption(LOG)); proc printto log=log;run; %let logline=0; %if %length(&logloc)>0 %then %do; data _null_; infile &logloc lrecl=5000; input; putlog _infile_; i=1; retain logonce 0; if ( _infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR" ) and logonce=0 then do; call symputx('logline',_n_); logonce+1; end; run; /* capture log including lines BEFORE the err */ %if &logline>0 %then %do; data _null_; infile &logloc lrecl=5000; input; i=1; stoploop=0; if _n_ ge &logline-15 and stoploop=0 then do until (i>22); call symputx('logmsg',catx('\n',symget('logmsg'),_infile_)); input; i+1; stoploop=1; end; if stoploop=1 then stop; run; %end; %end; %if %symexist(SYS_JES_JOB_URI) %then %do; /* setup webout for Viya */ options nobomfile; %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; filename _webout temp lrecl=999999 mod; %end; %else %do; filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json" lrecl=999999 mod; %end; %end; %else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do; options nobomfile; /* set up http header for SASjs Server */ %let fid=%sysfunc(fopen(&fref,A)); %if &fid=0 %then %do; %put %str(ERR)OR: %sysfunc(sysmsg()); %return; %end; %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json))); %let rc=%sysfunc(fwrite(&fid)); %let rc=%sysfunc(fclose(&fid)); %let rc=%sysfunc(filename(&fref)); %end; /* send response in SASjs JSON format */ data _null_; file _webout mod lrecl=32000 encoding='utf-8'; length msg syswarningtext syserrortext $32767 mode $10 ; sasdatetime=datetime(); msg=symget('msg'); %if &logline>0 %then %do; msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg')); %end; /* escape the escapes */ msg=tranwrd(msg,'\','\\'); /* escape the quotes */ msg=tranwrd(msg,'"','\"'); /* ditch the CRLFs as chrome complains */ msg=compress(msg,,'kw'); /* quote without quoting the quotes (which are escaped instead) */ msg=cats('"',msg,'"'); if symexist('_debug') then debug=quote(trim(symget('_debug'))); else debug='""'; if symget('sasjsprocessmode')='Stored Program' then mode='SASJS'; if mode ne 'SASJS' then put '>>weboutBEGIN<<'; put '{"SYSDATE" : "' "&SYSDATE" '"'; put ',"SYSTIME" : "' "&SYSTIME" '"'; put ',"sasjsAbort" : [{'; put ' "MSG":' msg ; put ' ,"MAC": "' "&mac" '"}]'; put ",""SYSUSERID"" : ""&sysuserid"" "; put ',"_DEBUG":' debug ; if symexist('_metauser') then do; _METAUSER=quote(trim(symget('_METAUSER'))); put ",""_METAUSER"": " _METAUSER; _METAPERSON=quote(trim(symget('_METAPERSON'))); put ',"_METAPERSON": ' _METAPERSON; end; if symexist('SYS_JES_JOB_URI') then do; SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI'))); put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI; end; _PROGRAM=quote(trim(resolve(symget('_PROGRAM')))); put ',"_PROGRAM" : ' _PROGRAM ; put ",""SYSCC"" : ""&syscc"" "; syserrortext=cats(symget('syserrortext')); if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do; syserrortext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syserrortext) )))))))))))))!!'"'; end; else syserrortext=cats('"',syserrortext,'"'); put ',"SYSERRORTEXT" : ' syserrortext; put ",""SYSHOSTNAME"" : ""&syshostname"" "; put ",""SYSJOBID"" : ""&sysjobid"" "; put ",""SYSSCPL"" : ""&sysscpl"" "; put ",""SYSSITE"" : ""&syssite"" "; sysvlong=quote(trim(symget('sysvlong'))); put ',"SYSVLONG" : ' sysvlong; syswarningtext=cats(symget('syswarningtext')); if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do; syswarningtext='"'!!trim( prxchange('s/"/\\"/',-1, /* double quote */ prxchange('s/\x0A/\n/',-1, /* new line */ prxchange('s/\x0D/\r/',-1, /* carriage return */ prxchange('s/\x09/\\t/',-1, /* tab */ prxchange('s/\x00/\\u0000/',-1, /* NUL */ prxchange('s/\x0E/\\u000E/',-1, /* SS */ prxchange('s/\x0F/\\u000F/',-1, /* SF */ prxchange('s/\x01/\\u0001/',-1, /* SOH */ prxchange('s/\x02/\\u0002/',-1, /* STX */ prxchange('s/\x10/\\u0010/',-1, /* DLE */ prxchange('s/\x11/\\u0011/',-1, /* DC1 */ prxchange('s/\x1A/\\u001A/',-1, /* SUB */ prxchange('s/\\/\\\\/',-1,syswarningtext) )))))))))))))!!'"'; end; else syswarningtext=cats('"',syswarningtext,'"'); put ",""SYSWARNINGTEXT"" : " syswarningtext; put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" '; put "}" ; if mode ne 'SASJS' then put '>>weboutEND<<'; run; %put _all_; %if "&sysprocessmode " = "SAS Stored Process Server " %then %do; data _null_; putlog 'stpsrvset program err and syscc'; rc=stpsrvset('program error', 0); call symputx("syscc",0,"g"); run; %if &sysscp=WIN and 1=0 /* deprecating this logic until we figure out a consistent abort */ and "%substr(%str(&sysvlong ),1,8)"="9.04.01M" and "%substr(%str(&sysvlong ),9,1)">"5" %then %do; /* skip approach (below) does not work in windows m6+ envs */ endsas; %end; %else %do; /** * endsas kills 9.4m3 deployments by orphaning multibridges. * Abort variants are ungraceful (non zero return code) * This approach lets SAS run silently until the end :-) * Caution - fails when called within a %include within a macro * Use mp_include() to handle this. */ filename skip temp; data _null_; file skip; put '%macro skip();'; comment '%mend skip; -> fix lint '; put '%macro skippy();'; comment '%mend skippy; -> fix lint '; run; %inc skip; %end; %end; %else %if "&sysprocessmode " = "SAS Compute Server " %then %do; /* endsas kills the session making it harder to fetch results */ data _null_; syswarningtext=symget('syswarningtext'); syserrortext=symget('syserrortext'); abort_msg=symget('msg'); syscc=symget('syscc'); sysuserid=symget('sysuserid'); iftrue=symget('iftrue'); put (_all_)(/=); call symputx('syscc',0); abort cancel nolist; run; %end; %else %do; %abort cancel; %end; %end; %else %do; %put _all_; %abort cancel; %end; %mend mp_abort; /** @endcond */ %macro mf_isblank(param )/*/STORE SOURCE*/; %sysevalf(%superq(param)=,boolean) %mend mf_isblank; %macro mp_dropmembers( list /* space separated list of datasets / views */ ,libref=WORK /* can only drop from a single library at a time */ ,iftrue=%str(1=1) )/*/STORE SOURCE*/; %if not(%eval(%unquote(&iftrue))) %then %return; %if %mf_isblank(&list) %then %do; %put NOTE: nothing to drop!; %return; %end; proc datasets lib=&libref nolist; delete &list; delete &list /mtype=view; run; %mend mp_dropmembers; %macro mm_createstp( stpname=SASjs Default STP ,stpdesc=This stp was created automatically by the mm_createstp macro ,filename=mm_createstp.sas ,directory=SASEnvironment/SASCode ,tree=/User Folders/sasdemo ,package=false ,streaming=true ,outds=work.mm_createstp ,mDebug=0 ,server=SASApp ,stptype=1 ,minify=NO ,frefin=mm_in ,frefout=mm_out ,LogicalServerType=Sps )/*/STORE SOURCE*/; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_CreateSTP.sas; %&mD.put _local_; %mp_abort( iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) ,mac=&sysmacroname ,msg=%str(Empty inputs: stpname filename directory tree) ) %mp_dropmembers(%scan(&outds,2,.)) /* check LogicalServerType validity */ %mp_abort( iftrue=( &LogicalServerType ne Sps and &LogicalServerType ne Wks and &LogicalServerType ne Any ) ,mac=&sysmacroname ,msg=%str(Invalid value for LogicalServerType (&LogicalServerType)) ) /** * check tree exists */ data _null_; length type uri $256; rc=metadata_pathobj("","&tree","Folder",type,uri); call symputx('foldertype',type,'l'); call symputx('treeuri',uri,'l'); run; %if &foldertype ne Tree %then %do; %put %str(WARN)ING: Tree &tree does not exist!; %return; %end; /** * Check STP does not exist already */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype = ClassifierMap %then %do; %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; %return; %end; /** * Check that the physical file exists */ %if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; %return; %end; %if &stptype=1 %then %do; /* type 1 STP - where code is stored on filesystem */ %if %sysevalf(&sysver lt 9.2) %then %do; %put %str(WARN)ING: Version 9.2 or later required; %return; %end; /* check directory object (where 9.2 source code reference is stored) */ data _null_; length id $20 dirtype $256; rc=metadata_resolve("&directory",dirtype,id); call symputx('checkdirtype',dirtype,'l'); run; %if &checkdirtype ne Directory %then %do; %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; %put %str(WARN)ING: The directory object does not exist for &directory; %return; %end; %end; %else %do; data &outds; directoryuri="&directory"; run; %end; data &outds (keep=stpuri prompturi fileuri texturi); length stpuri prompturi fileuri texturi serveruri $256 ; if _n_=1 then call missing (of _all_); set &outds; /* final checks on uris */ length id $20 type $256; __rc=metadata_resolve("&treeuri",type,id); if type ne 'Tree' then do; putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; stopme=1; end; __rc=metadata_resolve(directoryuri,type,id); if type ne 'Directory' then do; putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; stopme=1; end; /* get server info */ __rc=metadata_resolve("&server",type,serveruri); if type ne 'LogicalServer' then do; __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); if serveruri='' then do; putlog "%str(WARN)ING: Invalid server: &server"; stopme=1; end; end; if stopme=1 then do; putlog (_all_)(=); stop; end; /* create empty prompt */ rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); GroupInfo= ""; rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); if sum(of rc1-rc6) ne 0 then do; putlog "%str(WARN)ING: Issue creating prompt."; if prompturi ne . then do; putlog ' Removing orphan: ' prompturi; rc = METADATA_DELOBJ(prompturi); put rc=; end; stop; end; /* create a file uri */ rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); if sum(of rc7-rc10) ne 0 then do; putlog "%str(WARN)ING: Issue creating file."; if fileuri ne . then do; putlog ' Removing orphans:' prompturi fileuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); put (_all_)(=); end; stop; end; /* create a TextStore object */ rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); rc13= METADATA_SETATTR(texturi, 'TextType','XML'); storedtext='' !!"" !!""; rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); if sum(of rc11-rc14) ne 0 then do; putlog "%str(WARN)ING: Issue creating TextStore."; if texturi ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); put (_all_)(=); end; stop; end; /* create meta obj */ rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); /* tidy up if err */ if sum(of rc15-rc24) ne 0 then do; putlog "%str(WARN)ING: Issue creating STP."; if stpuri ne . then do; putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; rc = METADATA_DELOBJ(prompturi); rc = METADATA_DELOBJ(fileuri); rc = METADATA_DELOBJ(texturi); rc = METADATA_DELOBJ(stpuri); put (_all_)(=); end; end; else do; fullpath=cats('_program=',treepath,"/&stpname"); putlog "NOTE: Stored Process Created!"; putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; putlog "NOTE- "; putlog "NOTE-"; end; output; stop; run; %end; %else %if &stptype=2 %then %do; /* type 2 stp - code is stored in metadata */ %if %sysevalf(&sysver lt 9.3) %then %do; %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; %return; %end; /* check we have the correct ServerContext */ %mm_getservercontexts(outds=contexts) %local serveruri; %let serveruri=NOTFOUND; data _null_; set contexts; where upcase(servername)="%upcase(&server)"; call symputx('serveruri',serveruri); run; %if &serveruri=NOTFOUND %then %do; %put %str(WARN)ING: ServerContext *&server* not found!; %return; %end; /** * First, create a Hello World type 2 stored process */ filename &frefin temp; data _null_; file &frefin; treeuri=quote(symget('treeuri')); serveruri=quote(symget('serveruri')); stpdesc=quote(symget('stpdesc')); stpname=quote(symget('stpname')); put "$METAREPOSITORY "/ ''/ " "/ " "/ " "/ " "/ ' '/ ' ' / " "/ " "/ ' '/ " "/ ""/ "SAS"/ "268435456"; run; filename &frefout temp; proc metadata in= &frefin out=&frefout ; run; %if &mdebug=1 %then %do; /* write the response to the log for debugging */ data _null_; infile &frefout lrecl=1048576; input; put _infile_; run; %end; /** * Next, add the source code */ %mm_updatestpsourcecode(stp=&tree/&stpname ,stpcode="&directory/&filename" ,mdebug=&mdebug ,minify=&minify) %end; %else %do; %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; %end; %mend mm_createstp; %macro mf_getuser( )/*/STORE SOURCE*/; %local user; %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; %let user=&SYS_COMPUTE_SESSION_OWNER; %end; %else %if %symexist(_metaperson) %then %do; %if %length(&_metaperson)=0 %then %let user=&sysuserid; /* sometimes SAS will add @domain extension - remove for consistency */ /* but be sure to quote in case of usernames with commas */ %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); %end; %else %let user=&sysuserid; %quote(&user) %mend mf_getuser; %macro mm_createfolder(path=,mDebug=0); %put &sysmacroname: execution started for &path; %local dbg errorcheck; %if &mDebug=0 %then %let dbg=*; %local parentFolderObjId child errorcheck paths; %let paths=0; %let errorcheck=1; %if &syscc ge 4 %then %do; %put SYSCC=&syscc - this macro requires a clean session; %return; %end; data _null_; length objId parentId objType parent child $200 folderPath $1000; call missing (of _all_); folderPath = "%trim(&path)"; * remove any trailing slash ; if ( substr(folderPath,length(folderPath),1) = '/' ) then folderPath=substr(folderPath,1,length(folderPath)-1); * name must not be blank; if ( folderPath = '' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank"; end; * must have a starting slash ; if ( substr(folderPath,1,1) ne '/' ) then do; put 'ERR' +(-1) "OR: &sysmacroname PATH param value must have starting slash"; stop; end; * check if folder already exists ; rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); if rc ge 1 then do; put "NOTE: Folder " folderPath " already exists!"; stop; end; * do not create a root (one level) folder ; if countc(folderPath,'/')=1 then do; put 'ERR' +(-1) "OR: &sysmacroname will not create a new ROOT folder"; stop; end; * check that root folder exists ; root=cats('/',scan(folderpath,1,'/'),"(Folder)"); if metadata_pathobj('',root,"",objType,parentId)<1 then do; put 'ERR' +(-1) "OR: " root " does not exist!"; stop; end; * check that parent folder exists ; child=scan(folderPath,-1,'/'); parent=substr(folderpath,1,length(folderpath)-length(child)-1); rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); if rc<1 then do; putlog 'The following folders will be created:'; /* folder does not exist - so start from top and work down */ length newpath $1000; paths=0; do x=2 to countw(folderpath,'/'); newpath=''; do i=1 to x; newpath=cats(newpath,'/',scan(folderpath,i,'/')); end; rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); if rc<1 then do; paths+1; call symputx(cats('path',paths),newpath); putlog newpath; end; call symputx('paths',paths); end; end; else putlog "parent " parent " exists"; call symputx('parentFolderObjId',parentId,'l'); call symputx('child',child,'l'); call symputx('errorcheck',0,'l'); &dbg put (_all_)(=); run; %if &errorcheck=1 or &syscc ge 4 %then %return; %if &paths>0 %then %do x=1 %to &paths; %put executing recursive call for &&path&x; %mm_createfolder(path=&&path&x) %end; %else %do; filename __newdir temp; options noquotelenmax; %local inmeta; %put creating: &path; %let inmeta=$METAREPOSITORY SAS268435456 ; proc metadata in="&inmeta" out=__newdir verbose; run ; /* check it was successful */ data _null_; length objId parentId objType parent child $200 ; call missing (of _all_); rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); if rc ge 1 then do; putlog "SUCCCESS! &path created."; end; else do; putlog 'ERR' +(-1) "OR: unsuccessful attempt to create &path"; call symputx('syscc',8); end; run; /* write the response to the log for debugging */ %if &mDebug ne 0 %then %do; data _null_; infile __newdir lrecl=32767; input; put _infile_; run; %end; filename __newdir clear; %end; %put &sysmacroname: execution finished for &path; %mend mm_createfolder; %macro mm_deletestp( target= )/*/STORE SOURCE*/; /** * Check STP does exist */ %local cmtype; data _null_; length type uri $256; rc=metadata_pathobj("","&target",'StoredProcess',type,uri); call symputx('cmtype',type,'l'); call symputx('stpuri',uri,'l'); run; %if &cmtype ne ClassifierMap %then %do; %put NOTE: No Stored Process found at ⌖ %return; %end; filename __in temp lrecl=10000; filename __out temp lrecl=10000; data _null_ ; file __in ; put ""; put "SAS268436480"; put ""; run ; proc metadata in=__in out=__out verbose;run; /* list the result */ data _null_;infile __out; input; list; run; filename __in clear; filename __out clear; /** * Check deletion */ %local isgone; data _null_; length type uri $256; call missing (of _all_); rc=metadata_pathobj("","&target",'Note',type,uri); call symputx('isgone',type,'l'); run; %if &isgone = ClassifierMap %then %do; %put %str(ERR)OR: STP not deleted from ⌖ %let syscc=4; %return; %end; %mend mm_deletestp; /* system macro dependencies for build process end*/ /* system macros for build process */ %macro mm_createwebservice(path= ,name=initService ,precode= ,code=ft15f001 ,desc=This stp was created automagically by the mm_createwebservice macro ,mDebug=0 ,server=SASApp ,replace=YES ,adapter=sasjs )/*/STORE SOURCE*/; %if &syscc ge 4 %then %do; %put &=syscc - &sysmacroname will not execute in this state; %return; %end; %local mD; %if &mDebug=1 %then %let mD=; %else %let mD=%str(*); %&mD.put Executing mm_createwebservice.sas; %&mD.put _local_; * remove any trailing slash ; %if "%substr(&path,%length(&path),1)" = "/" %then %let path=%substr(&path,1,%length(&path)-1); /** * Add webout macro * These put statements are auto generated - to change the macro, change the * source (mm_webout) and run `build.py` */ filename sasjs temp; data _null_; file sasjs lrecl=3000 ; put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; /* WEBOUT BEGIN */ put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y '; put ' ,engine=DATASTEP '; put ' ,missing=NULL '; put ' ,showmeta=N '; put ' ,maxobs=MAX '; put ')/*/STORE SOURCE*/; '; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval '; put ' tmpds1 tmpds2 tmpds3 tmpds4; '; put '%let numcols=0; '; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); '; put ' '; put '%if &action=OPEN %then %do; '; put ' options nobomfile; '; put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; '; put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; '; put ' run; '; put '%end; '; put '%else %if (&action=ARR or &action=OBJ) %then %do; '; put ' /* force variable names to always be uppercase in the JSON */ '; put ' options validvarname=upcase; '; put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation '; put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ '; put ' filename _sjs1 temp lrecl=200 ; '; put ' data _null_; file _sjs1 encoding=''utf-8''; '; put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjs1 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs1 clear; '; put ' '; put ' /* grab col defs */ '; put ' proc contents noprint data=&ds '; put ' out=_data_(keep=name type length format formatl formatd varnum label); '; put ' run; '; put ' %let colinfo=%scan(&syslast,2,.); '; put ' proc sort data=&colinfo; '; put ' by varnum; '; put ' run; '; put ' /* move meta to mac vars */ '; put ' data &colinfo; '; put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); '; put ' set &colinfo end=last nobs=nobs; '; put ' name=upcase(name); '; put ' /* fix formats */ '; put ' if type=2 or type=6 then do; '; put ' typelong=''char''; '; put ' length fmt $49.; '; put ' if format='''' then fmt=cats(''$'',length,''.''); '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else fmt=cats(format,formatl,''.''); '; put ' end; '; put ' else do; '; put ' typelong=''num''; '; put ' if format='''' then fmt=''best.''; '; put ' else if formatl=0 then fmt=cats(format,''.''); '; put ' else if formatd=0 then fmt=cats(format,formatl,''.''); '; put ' else fmt=cats(format,formatl,''.'',formatd); '; put ' end; '; put ' /* 32 char unique name */ '; put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); '; put ' '; put ' call symputx(cats(''name'',_n_),name,''l''); '; put ' call symputx(cats(''newname'',_n_),newname,''l''); '; put ' call symputx(cats(''length'',_n_),length,''l''); '; put ' call symputx(cats(''fmt'',_n_),fmt,''l''); '; put ' call symputx(cats(''type'',_n_),type,''l''); '; put ' call symputx(cats(''typelong'',_n_),typelong,''l''); '; put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); '; put ' /* overwritten when fmt=Y and a custom format exists in catalog */ '; put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); '; put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); '; put ' run; '; put ' '; put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql; '; put ' select count(*) into: lastobs from &ds; '; put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); '; put ' '; put ' %if &engine=PROCJSON %then %do; '; put ' %if &missing=STRING %then %do; '; put ' %put &sysmacroname: Special Missings not supported in proc json.; '; put ' %put &sysmacroname: Switching to DATASTEP engine; '; put ' %goto datastep; '; put ' %end; '; put ' data &tempds; '; put ' set &ds; '; put ' &stmt_obs; '; put ' %if &fmt=N %then format _numeric_ best32.;; '; put ' /* PRETTY is necessary to avoid line truncation in large files */ '; put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; '; put ' proc json out=_sjs2 pretty '; put ' %if &action=ARR %then nokeys ; '; put ' ;export &tempds / nosastags fmtnumeric; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs2 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs2 clear; '; put ' %end; '; put ' %else %if &engine=DATASTEP %then %do; '; put ' %datastep: '; put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 '; put ' %then %do; '; put ' %put &sysmacroname: &ds NOT FOUND!!!; '; put ' %return; '; put ' %end; '; put ' '; put ' %if &fmt=Y %then %do; '; put ' /** '; put ' * Extract format definitions '; put ' * First, by getting library locations from dictionary.formats '; put ' * Then, by exporting the width using proc format '; put ' * Cannot use maxw from sashelp.vformat as not always populated '; put ' * Cannot use fmtinfo() as not supported in all flavours '; put ' */ '; put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; put ' proc sql noprint; '; put ' create table &tmpds1 as '; put ' select cats(libname,''.'',memname) as FMTCAT, '; put ' FMTNAME '; put ' from dictionary.formats '; put ' where fmttype=''F'' and libname is not null '; put ' and fmtname in (select format from &colinfo where format is not null) '; put ' order by 1; '; put ' create table &tmpds2( '; put ' FMTNAME char(32), '; put ' LENGTH num '; put ' ); '; put ' %local catlist cat fmtlist i; '; put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; '; put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); '; put ' %let cat=%scan(&catlist,&i,%str( )); '; put ' proc sql; '; put ' select distinct fmtname into: fmtlist separated by '' '' '; put ' from &tmpds1 where fmtcat="&cat"; '; put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); '; put ' select &fmtlist; '; put ' run; '; put ' proc sql; '; put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; '; put ' %end; '; put ' '; put ' proc sql; '; put ' create table &tmpds4 as '; put ' select a.*, b.length as MAXW '; put ' from &colinfo a '; put ' left join &tmpds2 b '; put ' on cats(a.format)=cats(upcase(b.fmtname)) '; put ' order by a.varnum; '; put ' data _null_; '; put ' set &tmpds4; '; put ' if not missing(maxw); '; put ' call symputx( '; put ' cats(''fmtlen'',_n_), '; put ' /* vars need extra padding due to JSON escaping of special chars */ '; put ' min(32767,ceil((max(length,maxw)+10)*1.5)) '; put ' ,''l'' '; put ' ); '; put ' run; '; put ' '; put ' /* configure varlenchk - as we are explicitly shortening the variables */ '; put ' %let optval=%sysfunc(getoption(varlenchk)); '; put ' options varlenchk=NOWARN; '; put ' data _data_(compress=char); '; put ' /* shorten the new vars */ '; put ' length '; put ' %do i=1 %to &numcols; '; put ' &&name&i $&&fmtlen&i '; put ' %end; '; put ' ; '; put ' /* rename on entry */ '; put ' set &ds(rename=( '; put ' %do i=1 %to &numcols; '; put ' &&name&i=&&newname&i '; put ' %end; '; put ' )); '; put ' &stmt_obs; '; put ' '; put ' drop '; put ' %do i=1 %to &numcols; '; put ' &&newname&i '; put ' %end; '; put ' ; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=num %then %do; '; put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); '; put ' %end; '; put ' %else %do; '; put ' &&name&i=put(&&newname&i,&&fmt&i); '; put ' %end; '; put ' %end; '; put ' if _error_ then do; '; put ' call symputx(''syscc'',1012); '; put ' stop; '; put ' end; '; put ' run; '; put ' %let fmtds=&syslast; '; put ' options varlenchk=&optval; '; put ' %end; '; put ' '; put ' proc format; /* credit yabwon for special null removal */ '; put ' value bart (default=40) '; put ' %if &missing=NULL %then %do; '; put ' ._ - .z = null '; put ' %end; '; put ' %else %do; '; put ' ._ = [quote()] '; put ' . = null '; put ' .a - .z = [quote()] '; put ' %end; '; put ' other = [best.]; '; put ' '; put ' data &tempds; '; put ' attrib _all_ label=''''; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' length &&name&i $&&fmtlen&i...; '; put ' format &&name&i $&&fmtlen&i...; '; put ' %end; '; put ' %end; '; put ' %if &fmt=Y %then %do; '; put ' set &fmtds; '; put ' %end; '; put ' %else %do; '; put ' set &ds; '; put ' %end; '; put ' &stmt_obs; '; put ' format _numeric_ bart.; '; put ' %do i=1 %to &numcols; '; put ' %if &&typelong&i=char or &fmt=Y %then %do; '; put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' &&name&i=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else &&name&i=quote(cats(&&name&i)); '; put ' %end; '; put ' %end; '; put ' run; '; put ' '; put ' filename _sjs3 temp lrecl=131068 ; '; put ' data _null_; '; put ' file _sjs3 encoding=''utf-8''; '; put ' if _n_=1 then put "["; '; put ' set &tempds; '; put ' if _n_>1 then put "," @; put '; put ' %if &action=ARR %then "[" ; %else "{" ; '; put ' %do i=1 %to &numcols; '; put ' %if &i>1 %then "," ; '; put ' %if &action=OBJ %then """&&name&i"":" ; '; put ' "&&name&i"n /* name literal for reserved variable names */ '; put ' %end; '; put ' %if &action=ARR %then "]" ; %else "}" ; ; '; put ' '; put ' /* close out the table */ '; put ' data _null_; '; put ' file _sjs3 mod encoding=''utf-8''; '; put ' put '']''; '; put ' run; '; put ' data _null_; '; put ' infile _sjs3 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs3 clear; '; put ' %end; '; put ' '; put ' proc sql; '; put ' drop table &colinfo, &tempds; '; put ' '; put ' %if %substr(&showmeta,1,1)=Y %then %do; '; put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; '; put ' data _null_; '; put ' file _sjs4; '; put ' length label $350; '; put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; '; put ' do i=1 to &numcols; '; put ' name=quote(trim(symget(cats(''name'',i)))); '; put ' format=quote(trim(symget(cats(''fmt'',i)))); '; put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); '; put ' length=quote(trim(symget(cats(''length'',i)))); '; put ' type=quote(trim(symget(cats(''typelong'',i)))); '; put ' if i>1 then put "," @@; '; put ' put name '':{"format":'' format '',"label":'' label '; put ' '',"length":'' length '',"type":'' type ''}''; '; put ' end; '; put ' put ''}}''; '; put ' run; '; put ' /* send back to webout */ '; put ' data _null_; '; put ' infile _sjs4 lrecl=1 recfm=n; '; put ' file &jref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjs4 clear; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=CLOSE %then %do; '; put ' data _null_; file &jref encoding=''utf-8'' mod ; '; put ' put "}"; '; put ' run; '; put '%end; '; put '%mend mp_jsonout; '; put ' '; put '%macro mf_getuser( '; put ')/*/STORE SOURCE*/; '; put ' %local user; '; put ' '; put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; '; put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; '; put ' %let user=&SYS_COMPUTE_SESSION_OWNER; '; put ' %end; '; put ' %else %if %symexist(_metaperson) %then %do; '; put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; '; put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; put ' /* but be sure to quote in case of usernames with commas */ '; put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); '; put ' %end; '; put ' %else %let user=&sysuserid; '; put ' '; put ' %quote(&user) '; put ' '; put '%mend mf_getuser; '; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL '; put ' ,showmeta=N,maxobs=MAX,workobs=0 '; put '); '; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug '; put ' sasjs_tables; '; put '%local i tempds jsonengine; '; put ' '; put '/* see https://github.com/sasjs/core/issues/41 */ '; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; '; put '%else %let jsonengine=DATASTEP; '; put ' '; put ' '; put '%if &action=FETCH %then %do; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' options mprint notes mprintnest; '; put ' %end; '; put ' %let _webin_file_count=%eval(&_webin_file_count+0); '; put ' /* now read in the data */ '; put ' %do i=1 %to &_webin_file_count; '; put ' %if &_webin_file_count=1 %then %do; '; put ' %let _webin_fileref1=&_webin_fileref; '; put ' %let _webin_name1=&_webin_name; '; put ' %end; '; put ' data _null_; '; put ' infile &&_webin_fileref&i termstr=crlf; '; put ' input; '; put ' call symputx(''input_statement'',_infile_); '; put ' putlog "&&_webin_name&i input statement: " _infile_; '; put ' stop; '; put ' data &&_webin_name&i; '; put ' infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8''; '; put ' input &input_statement; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' if _n_<20 then putlog _infile_; '; put ' %end; '; put ' run; '; put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; '; put ' %end; '; put '%end; '; put ' '; put '%else %if &action=OPEN %then %do; '; put ' /* fix encoding */ '; put ' OPTIONS NOBOMFILE; '; put ' '; put ' /** '; put ' * check xengine type to avoid the below err message: '; put ' * > Function is only valid for filerefs using the CACHE access method. '; put ' */ '; put ' data _null_; '; put ' set sashelp.vextfl(where=(fileref="_WEBOUT")); '; put ' if xengine=''STREAM'' then do; '; put ' rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8"); '; put ' end; '; put ' run; '; put ' '; put ' /* setup json */ '; put ' data _null_;file &fref encoding=''utf-8''; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutBEGIN<<''; '; put ' %end; '; put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; '; put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; '; put ' run; '; put ' '; put '%end; '; put ' '; put '%else %if &action=ARR or &action=OBJ %then %do; '; put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref '; put ' ,engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs '; put ' ) '; put '%end; '; put '%else %if &action=CLOSE %then %do; '; put ' /* To avoid issues with _webout on EBI we use a temporary file */ '; put ' filename _sjsref temp lrecl=131068; '; put ' %if %str(&workobs) > 0 %then %do; '; put ' /* if debug mode, send back first XX records of each work table also */ '; put ' data;run;%let tempds=%scan(&syslast,2,.); '; put ' ods output Members=&tempds; '; put ' proc datasets library=WORK memtype=data; '; put ' %local wtcnt;%let wtcnt=0; '; put ' data _null_; '; put ' set &tempds; '; put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ '; put ' i+1; '; put ' call symputx(cats(''wt'',i),name,''l''); '; put ' call symputx(''wtcnt'',i,''l''); '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put ",""WORK"":{"; '; put ' %do i=1 %to &wtcnt; '; put ' %let wt=&&wt&i; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' dsid=open("WORK.&wt",''is''); '; put ' nlobs=attrn(dsid,''NLOBS''); '; put ' nvars=attrn(dsid,''NVARS''); '; put ' rc=close(dsid); '; put ' if &i>1 then put '',''@; '; put ' put " ""&wt"" : {"; '; put ' put ''"nlobs":'' nlobs; '; put ' put '',"nvars":'' nvars; '; put ' %mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y '; put ' ,maxobs=&workobs '; put ' ) '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' %end; '; put ' data _null_; file _sjsref mod encoding=''utf-8''; '; put ' put "}"; '; put ' run; '; put ' %end; '; put ' /* close off json */ '; put ' data _null_;file _sjsref mod encoding=''utf-8''; '; put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; '; put ' put ",""_DEBUG"" : ""&_debug"" "; '; put ' _METAUSER=quote(trim(symget(''_METAUSER''))); '; put ' put ",""_METAUSER"": " _METAUSER; '; put ' _METAPERSON=quote(trim(symget(''_METAPERSON''))); '; put ' put '',"_METAPERSON": '' _METAPERSON; '; put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); '; put ' put '',"_PROGRAM" : '' _PROGRAM ; '; put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); '; put ' put '',"AUTOEXEC" : '' autoexec; '; put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; '; put ' put ",""SYSCC"" : ""&syscc"" "; '; put ' put ",""SYSENCODING"" : ""&sysencoding"" "; '; put ' syserrortext=cats(symget(''syserrortext'')); '; put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syserrortext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syserrortext=cats(''"'',syserrortext,''"''); '; put ' put '',"SYSERRORTEXT" : '' syserrortext; '; put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; '; put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; '; put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); '; put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; '; put ' put ",""SYSJOBID"" : ""&sysjobid"" "; '; put ' put ",""SYSSCPL"" : ""&sysscpl"" "; '; put ' put ",""SYSSITE"" : ""&syssite"" "; '; put ' put ",""SYSUSERID"" : ""&sysuserid"" "; '; put ' sysvlong=quote(trim(symget(''sysvlong''))); '; put ' put '',"SYSVLONG" : '' sysvlong; '; put ' syswarningtext=cats(symget(''syswarningtext'')); '; put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; '; put ' syswarningtext=''"''!!trim( '; put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ '; put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) '; put ' )))))))))))))!!''"''; '; put ' end; '; put ' else syswarningtext=cats(''"'',syswarningtext,''"''); '; put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; '; put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; '; put ' length memsize $32; '; put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; '; put ' memsize=quote(cats(memsize)); '; put ' put '',"MEMSIZE" : '' memsize; '; put ' put "}" @; '; put ' %if %str(&_debug) ge 131 %then %do; '; put ' put ''>>weboutEND<<''; '; put ' %end; '; put ' run; '; put ' /* now write to _webout 1 char at a time */ '; put ' data _null_; '; put ' infile _sjsref lrecl=1 recfm=n; '; put ' file &fref mod lrecl=1 recfm=n; '; put ' input sourcechar $char1. @@; '; put ' format sourcechar hex2.; '; put ' put sourcechar char1. @@; '; put ' run; '; put ' filename _sjsref clear; '; put ' '; put '%end; '; put ' '; put '%mend mm_webout; '; /* WEBOUT END */ put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO'; put ' ,maxobs=MAX'; put ');'; put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; put ' ,showmeta=&showmeta,maxobs=&maxobs'; put ' )'; put '%mend;'; run; /* add precode and code */ %local work tmpfile; %let work=%sysfunc(pathname(work)); %let tmpfile=__mm_createwebservice.temp; %local x fref freflist mod; %let freflist= &adapter &precode &code ; %do x=1 %to %sysfunc(countw(&freflist)); %if &x>1 %then %let mod=mod; %let fref=%scan(&freflist,&x); %&mD.put &sysmacroname: adding &fref; data _null_; file "&work/&tmpfile" lrecl=3000 &mod; infile &fref; input; put _infile_; run; %end; /* create the metadata folder if not already there */ %mm_createfolder(path=&path) %if &syscc ge 4 %then %return; %if %upcase(&replace)=YES %then %do; %mm_deletestp(target=&path/&name) %end; /* create the web service */ %mm_createstp(stpname=&name ,filename=&tmpfile ,directory=&work ,tree=&path ,stpdesc=&desc ,mDebug=&mdebug ,server=&server ,stptype=2) /* find the web app url */ %local url; %let url=localhost/SASStoredProcess; data _null_; length url $128; rc=METADATA_GETURI("Stored Process Web App",url); if rc=0 then call symputx('url',url,'l'); run; %put &sysmacroname: STP &name successfully created in &path; %put Check it out here:; %put ;%put ;%put ; %put &url?_PROGRAM=&path/&name; %put ;%put ;%put ; %mend mm_createwebservice; /* system macros for build process end */ * BuildInit start; /** @file @brief Initialise build program for SAS 9 DC

SAS Macros

**/ options nomprint; %global _metaperson _url dcpath; /* set webout if not running in STP mode */ data _null_; if "&sysprocessmode" ne "SAS Stored Process Server" then do; call execute('filename _webout temp;'); end; run; * BuildInit end; %let path=services; %let service=clickme; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put '''';'; put 'put '' '';'; put 'put '' Data Controller'';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '' '';'; put 'put '''';'; put 'run;'; put '%sasjsout(HTML)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/admin; %let service=configurator; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief provides the web service to create the control tables'; put '@details'; put '

SAS Macros

'; put '@li dc_getusergroups.sas'; put '@li mf_getuser.sas'; put '@li mf_getapploc.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%let root=%mf_getapploc();'; put '/* create web page */'; put 'data _null_;'; put 'file _webout;'; put 'infile datalines ;'; put 'input;'; put 'put _infile_;'; put 'datalines4;'; put ''; put ''; put ''; put ''; put 'Data Controller'; put ''; put ''; put ''; put ''; put ''; put '
'; put '
'; put ''; put 'Data Controller'; put '
'; put '
'; put '
'; put '
'; put '
'; put '
'; put ''; put '
'; put '
'; put 'Terms and Conditions'; put '
'; put '
'; put '
'; put '

Due to the way the Demo version is compiled (in an easy-to-deploy but'; put 'inefficient-to-run format), it should not be deployed to production servers.'; put 'Before proceeding with configuration, please confirm that you have read,'; put 'understood, and agreed to the'; put 'Data Controller for SAS© Evaluation Agreement.'; put '

'; put '
'; put '
'; put '>'; put ''; put '
'; put '
'; put '
'; put ''; put ''; put '
'; put '
'; put '
'; put ''; put ''; put ';;;;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=exportconfig; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads zip file of DC customer configurations'; put '@details Zip contains several excel files, containing the customer specific'; put '(non-DC) configurations. Useful when migrating to a new instance of'; put 'Data Controller.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let work=%sysfunc(pathname(work));'; put '/* excel does not work in all envs */'; put '%let mime=application/vnd.ms-excel;'; put '%let dbms=EXCEL;'; put '%let mime=application/csv;'; put '%let dbms=CSV;'; put '%let ext=csv;'; put '%macro conditional_export(ds);'; put '%if %mf_nobs(&ds)>0 %then %do;'; put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"'; put 'DBMS=&dbms REPLACE;'; put 'RUN;'; put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(syscc=&syscc after &ds prep)'; put ')'; put '%mend conditional_export;'; put 'ods package(ProdOutput) open nopf;'; put 'data MPE_ALERTS;'; put 'set &mpelib..MPE_ALERTS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ALERTS)'; put 'data MPE_COLUMN_LEVEL_SECURITY;'; put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'where also CLS_LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)'; put 'data MPE_CONFIG;'; put 'set &mpelib..MPE_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_CONFIG)'; put 'data MPE_DATADICTIONARY;'; put 'set &mpelib..MPE_DATADICTIONARY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'if DD_SOURCE=:"&mpelib" then do;'; put '/* nothing */'; put 'end;'; put 'else output;'; put 'run;'; put '%conditional_export(MPE_DATADICTIONARY)'; put 'data MPE_EMAILS;'; put 'set &mpelib..MPE_EMAILS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EMAILS)'; put 'data MPE_EXCEL_CONFIG;'; put 'set &mpelib..MPE_EXCEL_CONFIG;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_EXCEL_CONFIG)'; put 'data MPE_GROUPS;'; put 'set &mpelib..MPE_GROUPS;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_GROUPS)'; put 'data MPE_ROW_LEVEL_SECURITY;'; put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;'; put 'where &dc_dttmtfmt. le tx_to;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_ROW_LEVEL_SECURITY)'; put 'data MPE_SECURITY;'; put 'set &mpelib..MPE_SECURITY;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_SECURITY)'; put 'data MPE_SELECTBOX;'; put 'set &mpelib..MPE_SELECTBOX;'; put 'where &dc_dttmtfmt. le ver_to_dttm;'; put 'where also select_lib ne "&mpelib";'; put 'drop ver_: selectbox_rk;'; put 'run;'; put '%conditional_export(MPE_SELECTBOX)'; put 'data MPE_TABLES;'; put 'set &mpelib..MPE_TABLES;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also LIBREF ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_TABLES)'; put 'data MPE_VALIDATIONS;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'where also BASE_LIB ne "&mpelib";'; put 'drop tx_: ;'; put 'run;'; put '%conditional_export(MPE_VALIDATIONS)'; put '/* finish up zip file */'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name="DCBACKUP.zip" archive_path="&work");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc after zip prep)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&work/DCBACKUP.zip)'; put ',outname=DCBACKUP.zip'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=exportdb; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WAR)NING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '%if &outref=0 %then %do;'; put '%put %str(WAR)NING: Please provide a fileref;'; put '%return;'; put '%end;'; put '%if %mf_existfileref(&outref)=0 %then %do;'; put 'filename &outref temp lrecl=66000;'; put '%end;'; put '%if &schema=0 %then %let schema=;'; put '%else %let schema=&schema..;'; put '%if &outds=0 %then %let outds=%scan(&ds,2,.);'; put '%local nobs;'; put 'proc sql noprint;'; put 'select count(*) into: nobs TRIMMED from &ds;'; put '%if &nobs=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No rows found in &ds */";'; put 'run;'; put '%end;'; put '%local vars;'; put '%let vars=%mf_getvarcount(&ds);'; put '%if &vars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'put "/* No columns found in &schema.&ds */";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &vars>1600 and &flavour=PGSQL %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &schema.&ds contains &vars vars */";'; put 'put "/* Postgres cannot handle tables with over 1600 vars */";'; put 'put "/* No inserts will be generated for this table */";'; put 'run;'; put '%return;'; put '%end;'; put '%local varlist varlistcomma;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);'; put '/* next, export data */'; put 'data _null_;'; put 'file &outref mod ;'; put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";'; put 'set &ds;'; put '%if &maxobs ne max %then %do;'; put 'if _n_>&maxobs then stop;'; put '%end;'; put 'length _____str $32767;'; put 'call missing(_____str);'; put 'format _numeric_ best.;'; put 'format _character_ ;'; put '%local i comma var vtype vfmt;'; put '%do i=1 %to %sysfunc(countw(&varlist));'; put '%let var=%scan(&varlist,&i);'; put '%let vtype=%mf_getvartype(&ds,&var);'; put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));'; put '%if &i=1 %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put "insert into &schema.&outds set ";'; put 'put " &var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '_____str=cats('; put '"INSERT INTO &schema.&outds ("'; put ',symget(''varlistcomma'')'; put ',") VALUES ("'; put ');'; put 'put _____str;'; put 'put " "@;'; put '%end;'; put '%end;'; put '%else %do;'; put '%if &flavour=SAS %then %do;'; put 'put " ,&var="@;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put " ,"@;'; put '%end;'; put '%end;'; put '%if &vtype=N %then %do;'; put '%if &flavour=SAS %then %do;'; put 'put &var;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'if missing(&var) then put ''NULL'';'; put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"'; put '%then %do;'; put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";'; put '%end;'; put '%else %do;'; put 'else put &var;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";'; put 'put _____str;'; put '%end;'; put '%end;'; put '%if &flavour=SAS %then %do;'; put 'put '';'';'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'put '');'';'; put '%end;'; put 'if _n_=&nobs then put /;'; put 'run;'; put '%mend mp_ds2inserts;'; put '%macro mp_lib2inserts(lib'; put ',flavour=SAS'; put ',outref=0'; put ',schema=0'; put ',maxobs=max'; put ',applydttm=YES'; put ')/*/STORE SOURCE*/;'; put '/* Find the tables */'; put '%local x ds memlist;'; put 'proc sql noprint;'; put 'select distinct lowcase(memname)'; put 'into: memlist'; put 'separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put 'and memtype=''DATA''; /* exclude views */'; put '%let flavour=%upcase(&flavour);'; put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;'; put '%put %str(WAR)NING: &flavour is not supported;'; put '%return;'; put '%end;'; put '/* create the inserts */'; put '%do x=1 %to %sysfunc(countw(&memlist));'; put '%let ds=%scan(&memlist,&x);'; put '%mp_ds2inserts(&lib..&ds'; put ',outref=&outref'; put ',schema=&schema'; put ',outds=&ds'; put ',flavour=&flavour'; put ',maxobs=&maxobs'; put ',applydttm=&applydttm'; put ')'; put '%end;'; put '%mend mp_lib2inserts;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Exports the data controller library in DB specific DDL'; put '@details If user is in the administrator group, they can call this'; put 'service directly adding the following URL params:'; put '@li &flavour= (only PGSQL supported at this time)'; put '@li &schema= (optional, if target schema is needed)'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_lib2inserts.sas'; put '@li mp_streamfile.sas'; put '@li mpe_getgroups.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global flavour schema;'; put '/* if no flavour is specified, default to SAS */'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '/* if no schema var provided, DC Libref is used */'; put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));'; put '/* check user is in admin group */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'data work.admins;'; put 'set work.usergroups;'; put 'put (_all_)(=);'; put 'run;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into:cnt'; put 'from usergroups'; put 'where groupname="&mpeadmins";'; put '%put &=cnt;'; put '%mp_abort(iftrue= (&cnt=0)'; put ',mac=&_program'; put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)'; put ')'; put '%mp_getddl(&DC_LIBREF'; put ',flavour=&flavour'; put ',schema=&schema'; put ',applydttm=YES'; put ',fref=tmpref'; put ')'; put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)'; put '%mp_streamfile(contenttype=TEXT'; put ',inref=tmpref'; put ',outname=&dc_libref..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_increment(macro_name,incr=1);'; put '/* iterate the value */'; put '%let ¯o_name=%eval(&&¯o_name+&incr);'; put '/* return the value */'; put '&&¯o_name'; put '%mend mf_increment;'; put '%macro mpe_makedata(lib=,mpeadmins=,path=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &lib..mpe_alerts set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',alert_event=''*ALL*'''; put ',alert_lib=''*ALL*'''; put ',alert_ds=''*ALL*'''; put ',alert_user="&sysuserid";'; put 'insert into &lib..mpe_column_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',CLS_SCOPE=''EDIT'''; put ',CLS_GROUP=''AllUsers'''; put ',CLS_LIBREF="&lib"'; put ',CLS_TABLE=''MPE_LOCKANYTABLE'''; put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD'''; put ',CLS_ACTIVE=1'; put ',CLS_HIDE=0;'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_EMAIL_ALERTS"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc=''YES or NO to enable email alerts. Note - this requires email '''; put '!!''options to be preconfigured! They can be configured in the '''; put '!!''settings stp if needed.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_VIEWLIB_CHECK"'; put ',var_value=''NO'''; put ',var_active=1'; put ',var_desc='; put '''Set to YES to enable library validity checking in viewLibs service.'''; put '!!'' Note: this can make the service very slow if there are lots of '''; put '!!''external libraries. If enabled, this removes empty libraries from '''; put '!!''the viewer library dropdown. To switch off, set to NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MACROS"'; put ',var_value=cats(symget(''path''),"/dc_macros")'; put ',var_active=1'; put ',var_desc=''Location of underlying macros - EUC feature.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_MAXOBS_WEBEDIT"'; put ',var_value="100"'; put ',var_active=1'; put ',var_desc=''This sets the maximum number of observations that can be loaded'''; put '!!'' into the browser for editing in the EDIT screen. A higher number'''; put '!!'' will require a decent browser (ie, not IE) and more memory on the'''; put '!!'' client side.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_VIEWER"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to'''; put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_RESTRICT_EDITRECORD"'; put ',var_value="NO"'; put ',var_active=1'; put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the'''; put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu'''; put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_CATALOG"'; put ',var_name="DC_IGNORELIBS"'; put ',var_value="|MAPSSAS|MAPS|"'; put ',var_active=1'; put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when'''; put '!!'' running the Data Catalog refresh process. This can enable a clean'''; put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LOCALE"'; put ',var_value="SYSTEM"'; put ',var_active=1'; put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system'''; put '!!'' value (which can be driven from the browser settings). This is '''; put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs '''; put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BULKLOAD"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_BUCKET"'; put ',var_value="''your-aws-bucket/Exchange''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS bucket to'''; put '!!'' use for s3 uploads in redshift'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_AWS_CREDENTIALS_FILE"'; put ',var_value="''/path/to/your/aws/s3/.credentials''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) value of the AWS creds file'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_REGION"'; put ',var_value="''eu-west-1''"'; put ',var_active=0'; put ',var_desc=''Set to the (quoted) AWS region in use'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_COMPRESS"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DCBL_REDSH"'; put ',var_name="BL_USE_SSL"'; put ',var_value="YES"'; put ',var_active=0'; put ',var_desc=''Set to YES to use SSL encryption'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC_REVIEW"'; put ',var_name="HISTORY_ROWS"'; put ',var_value=''100'''; put ',var_active=1'; put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY '''; put '!!''page'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_LICENCE_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Licence Key'';'; put 'insert into &lib..mpe_config set'; put 'tx_from=0'; put ',tx_to=''31DEC9999:23:59:59''dt'; put ',var_scope="DC"'; put ',var_name="DC_ACTIVATION_KEY"'; put ',var_value='' '''; put ',var_active=1'; put ',var_desc=''Activation Key'';'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''LIBRARY'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Data Controller Control Tables"'; put ',DD_LONGDESC="# The Data Controller Library"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib..MPE_TABLES"'; put ',DD_SHORTDESC="Configuration of new tables for Data Controller"'; put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_TABLES.DSN"'; put ',DD_SHORTDESC="Dataset Name to be edited"'; put ',DD_LONGDESC="_DSN_ - must be UPCASE"'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''DIRECTORY'''; put ',DD_SOURCE="/some/directory"'; put ',DD_SHORTDESC="Directory for some purpose"'; put ',DD_LONGDESC="This directory is great. It''s great directory.'; put 'It trumps all other directories."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''TABLE'''; put ',DD_SOURCE="&lib"'; put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"'; put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "'; put '!!"registered as a user in this table."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_datadictionary set'; put 'tx_from=0'; put ',DD_TYPE=''COLUMN'''; put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"'; put ',DD_SHORTDESC="Set to 1 to make an option active"'; put ',DD_LONGDESC="This value is used as a filter by data controller whenever "'; put '!!"querying for option settings."'; put ',DD_OWNER="&sysuserid"'; put ',DD_RESPONSIBLE="&sysuserid"'; put ',DD_SENSITIVITY="Low"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* mpe_xlmap_info'; put '*/'; put 'insert into &lib..mpe_xlmap_info set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_description=''Basel 3 Key Metrics report'''; put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";'; put '/**'; put '* mpe_xlmap_rules'; put '*/'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/b'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/c'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/d'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/e'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:1a/f'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE D10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/b'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''ABSOLUTE E10'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/c'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[6]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/d'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[8]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/e'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[9]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2/f'''; put ',xlmap_sheet=''/3'''; put ',xlmap_start=''RELATIVE R[10]C[10]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:2a'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''ABSOLUTE H11'''; put ',xlmap_finish=''RELATIVE R[0]C[1]'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-KM1'''; put ',xlmap_range_id=''KM1:3'''; put ',xlmap_sheet=''KM1'''; put ',xlmap_start=''RELATIVE R[12]C[4]'''; put ',xlmap_finish=''ABSOLUTE I13'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec1'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D8'''; put ',xlmap_finish=''BLANKROW'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''BASEL-CR2'''; put ',xlmap_range_id=''CR2-sec2'''; put ',xlmap_sheet=''CR2'''; put ',xlmap_start=''ABSOLUTE D18'''; put ',xlmap_finish=''LASTDOWN'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''header'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B3'''; put ',xlmap_finish=''ABSOLUTE B8'';'; put 'insert into &lib..mpe_xlmap_rules set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',xlmap_id=''SAMPLE'''; put ',xlmap_range_id=''data'''; put ',xlmap_sheet=''/1'''; put ',xlmap_start=''ABSOLUTE B13'''; put ',xlmap_finish=''ABSOLUTE E16'';'; put '/**'; put '* MPE_GROUPS'; put '*/'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="allbow"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="dctestuser1"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="dc-admin"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="mihmed"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_groups set'; put 'tx_from=0'; put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"'; put ',group_desc="Custom Group for Data Controller Purposes"'; put ',user_name="DCTest"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_ROW_LEVEL_SECURITY'; put '*/'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=1'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib."'; put ',RLS_TABLE="MPE_GROUPS"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''GROUP_NAME'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''-1''"'; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=2'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''RLS_RK'''; put ',RLS_OPERATOR_NM=''>'''; put ',RLS_RAW_VALUE=''0'''; put ',RLS_ACTIVE=1;'; put 'insert into &lib..mpe_row_level_security set'; put 'tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',RLS_RK=3'; put ',RLS_SCOPE=''ALL'''; put ',RLS_GROUP=''DC Demo Group'''; put ',RLS_LIBREF="&lib"'; put ',RLS_TABLE="MPE_SECURITY"'; put ',RLS_GROUP_LOGIC=''AND'''; put ',RLS_SUBGROUP_LOGIC=''OR'''; put ',RLS_SUBGROUP_ID=0'; put ',RLS_VARIABLE_NM=''ACCESS_LEVEL'''; put ',RLS_OPERATOR_NM=''NE'''; put ',RLS_RAW_VALUE="''N/A''"'; put ',RLS_ACTIVE=1;'; put '/**'; put '* MPE_SECURITY'; put '*/'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="EDIT"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_security set'; put 'tx_from=0'; put ',libref="*ALL*"'; put ',dsn="*ALL*"'; put ',access_level="APPROVE"'; put ',sas_group="dc-admin"'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/* mpe_selectbox */'; put '%let rk=1;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=&rk'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''LOCKED'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_LOCKANYTABLE"'; put ',base_column="LOCK_STATUS_CD"'; put ',selectbox_value=''UNLOCKED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''EDIT'''; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''APPROVE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''VIEW'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''SIGNOFF'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''UPDATE'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''REPLACE'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''TXTEMPORAL'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''BITEMPORAL'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_TABLES"'; put ',base_column="LOADTYPE"'; put ',selectbox_value=''FORMAT_CAT'''; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''SUBMITTED'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''APPROVED'''; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ALERTS"'; put ',base_column="ALERT_EVENT"'; put ',selectbox_value=''REJECTED'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 1'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 2'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value=''Option 3'''; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_X_TEST"'; put ',base_column="SOME_DROPDOWN"'; put ',selectbox_value="This is a long option. This option is very long. "'; put '!!"It is optional, though."'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="CASE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MINVAL"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="MAXVAL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT"'; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT"'; put ',selectbox_order=5'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="NOTNULL"'; put ',selectbox_order=6'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="SOME_DATASET"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="DSN"'; put ',selectbox_value="EXAMPLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="COLUMN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="TABLE"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="LIBRARY"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="CATALOG"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_DATADICTIONARY"'; put ',base_column="DD_TYPE"'; put ',selectbox_value="FORMAT"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="LIBREF"'; put ',selectbox_value=''*ALL*'''; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_SECURITY"'; put ',base_column="ACCESS_LEVEL"'; put ',selectbox_value=''AUDIT'''; put ',selectbox_order=4'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="HARDSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_VALIDATIONS"'; put ',base_column="RULE_TYPE"'; put ',selectbox_value="SOFTSELECT_HOOK"'; put ',selectbox_order=7'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_GROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="AND"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_SUBGROUP_LOGIC"'; put ',selectbox_value="OR"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="="'; put ',selectbox_order=0'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="<="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value=">="'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="BETWEEN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NOT IN"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="NE"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_OPERATOR_NM"'; put ',selectbox_value="CONTAINS"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_EXCEL_CONFIG"'; put ',base_column="XL_RULE"'; put ',selectbox_value="FORMULA"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_column="RLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="1"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_ACTIVE"'; put ',selectbox_value="0"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="EDIT"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="VIEW"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_SCOPE"'; put ',selectbox_value="ALL"'; put ',selectbox_order=3'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="0"'; put ',selectbox_order=1'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..mpe_selectbox set'; put 'selectbox_rk=%mf_increment(rk)'; put ',ver_from_dttm=0'; put ',select_lib="&lib"'; put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_column="CLS_HIDE"'; put ',selectbox_value="1"'; put ',selectbox_order=2'; put ',ver_to_dttm=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_TABLES'; put '*/'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_COLUMN_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM'''; put ',notes=''Docs: https://docs.datacontroller.io/column-level-security'''; put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_INFO'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_RULES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',buskey=''XLMAP_ID XLMAP_RANGE_ID'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_XLMAP_DATA'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO'''; put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_LOCKANYTABLE'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''LOCK_LIB LOCK_DS'''; put ',notes=''This table may be edited when a process failed and left a lock'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_TABLES'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''This entry allows the MP Editor to edit itself!'''; put ',post_edit_hook=''services/hooks/mpe_tables_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',notes=''Determines which groups can view/edit/approve which tables'''; put ',post_edit_hook=''services/hooks/mpe_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_SELECTBOX'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''SELECTBOX_RK'''; put ',var_txfrom=''VER_FROM_DTTM'''; put ',var_txto=''VER_TO_DTTM'''; put ',notes=''Can configure dropdowns for the front end'''; put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_TEST'''; put ',num_of_approvals_required=1'; put ',loadtype=''UPDATE'''; put ',buskey=''PRIMARY_KEY_FIELD'''; put ',notes=''Test table for controller'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EMAILS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''USER_NAME'''; put ',notes=''Primary Emails Table (backup is metadata)'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''VAR_SCOPE VAR_NAME'''; put ',notes=''Configuration variables for Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ALERTS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER'''; put ',notes=''Configuration for alert email events'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_GROUPS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''GROUP_NAME USER_NAME'''; put ',notes=''Configuration for additional groups within Data Controller'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_VALIDATIONS'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE'''; put ',notes=''Configuration of data quality rules in Editor component'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',post_edit_hook=''services/hooks/mpe_validations_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_DATADICTIONARY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''DD_TYPE DD_SOURCE'''; put ',notes=''Configuration of data dictionary'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_EXCEL_CONFIG'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN'''; put ',notes=''Configuration of the excel import rules'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_ROW_LEVEL_SECURITY'''; put ',num_of_approvals_required=1'; put ',loadtype=''TXTEMPORAL'''; put ',buskey=''RLS_RK'''; put ',notes=''Configuration of Row Level Security'''; put ',var_txfrom=''TX_FROM'''; put ',var_txto=''TX_TO'''; put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC '''; put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM '''; put '!!''RLS_RAW_VALUE '''; put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit'''; put ';'; put 'insert into &lib..mpe_tables'; put 'set tx_from=0'; put ',tx_to=''31DEC5999:23:59:59''dt'; put ',libref="&lib"'; put ',dsn=''MPE_X_CATALOG-FC'''; put ',num_of_approvals_required=1'; put ',loadtype=''FORMAT_CAT'''; put ',buskey=''TYPE FMTNAME FMTROW'''; put ',notes=''Sample Format Catalog'''; put ';'; put '/* mpe_validations */'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_SCOPE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_HIDE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"'; put ',base_col="CLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ALERTS"'; put ',base_col="ALERT_LIB"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_alerts.alert_lib"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_RULES"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''NOTNULL'''; put ',rule_value='' '''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="NUM_OF_APPROVALS_REQUIRED"'; put ',rule_type=''MINVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="BUSKEY"'; put ',rule_type=''NOTNULL'''; put ',rule_value=" "'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''CASE'''; put ',rule_value=''UPCASE'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="LIBREF"'; put ',rule_type=''HARDSELECT'''; put ',rule_value="&lib..MPE_TABLES.LIBREF"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''CASE'''; put ',rule_value="UPCASE"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_TABLES.DSN"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SECURITY"'; put ',base_col="SAS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="BASE_COL"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value="0"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_VALIDATIONS"'; put ',base_col="RULE_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value="1"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="DSN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/mpe_tables.dsn"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_TXTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSFROM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_BUSTO"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_TABLES"'; put ',base_col="VAR_PROCESSED"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_LIB"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="SELECT_DS"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_editable"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_SELECTBOX"'; put ',base_col="BASE_COLUMN"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_GROUP"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/sas_groups"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_LIBREF"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/libraries_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_TABLE"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/tables_all"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_SUBGROUP_ID"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_ROW_LEVEL_SECURITY"'; put ',base_col="RLS_VARIABLE_NM"'; put ',rule_type=''SOFTSELECT_HOOK'''; put ',rule_value="services/validations/columns_in_libds"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_X_TEST"'; put ',base_col="SOME_NUM"'; put ',rule_type=''HARDSELECT_HOOK'''; put ',rule_value="services/validations/mpe_x_test.some_num"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MINVAL'''; put ',rule_value=''0'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_EXCEL_CONFIG"'; put ',base_col="XL_ACTIVE"'; put ',rule_type=''MAXVAL'''; put ',rule_value=''1'''; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put 'insert into &lib..MPE_VALIDATIONS set'; put 'tx_from=0'; put ',base_lib="&lib"'; put ',base_ds="MPE_XLMAP_INFO"'; put ',base_col="XLMAP_ID"'; put ',rule_type=''SOFTSELECT'''; put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"'; put ',rule_active=1'; put ',tx_to=''31DEC5999:23:59:59''dt;'; put '/**'; put '* MPE_X_TEST'; put '*/'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=0'; put ',some_char=''this is dummy data'''; put ',some_dropdown=''Option 1'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=42'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=1'; put ',some_char=''more dummy data'''; put ',some_dropdown=''Option 2'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=422'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=2'; put ',some_char=''even more dummy data'''; put ',some_dropdown=''Option 3'''; put ',some_num=42'; put ',some_date=42'; put ',some_datetime=42'; put ',some_time=142'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=3'; put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing'''; put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And'''; put '!!'' this, is the tale he told: '',3)'; put ',some_dropdown=''Option 2'''; put ',some_num=1613.001'; put ',some_date=423'; put ',some_datetime=423'; put ',some_time=44'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=4'; put ',some_char=''if you can fill the unforgiving minute'''; put ',some_dropdown=''Option 1'''; put ',some_num=1613.001123456'; put ',some_date=4231'; put ',some_datetime=423123123'; put ',some_time=412'; put ',some_shortnum=3'; put ',some_bestnum=44;'; put '%do x=10 %to 500;'; put 'insert into &lib..mpe_x_test'; put 'set primary_key_field=10&x'; put ',some_char="&x bottles of beer on the wall"'; put ',some_dropdown=''Option 1'''; put ',some_num=ranuni(0)'; put ',some_date=round(ranuni(0)*1000,1)'; put ',some_datetime=round(ranuni(0)*50000,1)'; put ',some_time=round(ranuni(0)*100,1)'; put ',some_shortnum=round(ranuni(0)*100,1)'; put ',some_bestnum=round(ranuni(0)*100,1);'; put '%end;'; put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */'; put 'proc format library=&lib..mpe_x_catalog;'; put 'value otdate'; put '.Z = ''Some Zs'''; put '.N = ''Some 9s'''; put 'other = [date9.]'; put ';'; put 'invalue disc'; put '''ABC'' = 0.20'; put '''DEF'' = 0.25'; put '''XYZ'' = 0.00'; put 'other = 0.00'; put ';'; put 'invalue indate'; put '''00000000'' = .Z'; put '''99999999'' = .N'; put 'other = [yymmdd8.]'; put ';'; put 'value age(multilabel)'; put '20 - 29 = ''20 - 29'''; put '30 - 39 = ''30 - 39'''; put '40 - 49 = ''40 - 49'''; put '50 - 59 = ''50 - 59'''; put '60 - high = ''60 +++'''; put '20 - 35 = ''20 - 35'''; put '36 - 55 = ''36 - 55'''; put '55 - high = ''55 +++'''; put ';'; put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */'; put 'VALUE $GENDERLABEL'; put '"M" = "Male"'; put '"F" = "Female"'; put ';'; put 'VALUE LIKERT_SEVEN'; put '1 = "Strongly Disagree"'; put '2 = "Disagree"'; put '3 = "Slightly Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5 = "Slightly Agree"'; put '6 = "Agree"'; put '7 = "Strongly Agree"'; put ';'; put 'VALUE LIKERT7_ELEVEN'; put '1,2,3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5,6,7 = "Agree"'; put ';'; put 'VALUE LIKERT7_SISTERS'; put '1-3 = "Disagree"'; put '4 = "Neither Agree nor Disagree"'; put '5-7 = "Agree"'; put ';'; put 'VALUE INCOME'; put 'LOW -< 20000 = "Low"'; put '20000 -< 60000 = "Middle"'; put '60000 - HIGH = "High"'; put ';'; put 'VALUE RACE'; put '1 = "White"'; put '2 = "Black"'; put 'OTHER = "Other"'; put ';'; put 'VALUE GENDERCODE'; put '0 = ''Male'''; put '1 = ''Female'';'; put 'VALUE ATHLETECODE'; put '0 = ''Non-athlete'''; put '1 = ''Athlete'';'; put 'VALUE SMOKINGCODE'; put '0 = ''Nonsmoker'''; put '1 = ''Past smoker'''; put '2 = ''Current smoker'';'; put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */'; put 'value $state'; put '''Delaware''=''DE'''; put '''Florida''=''FL'''; put '''Ohio''=''OH'';'; put 'value MYfmt'; put '/* Format dates prior to 31DEC2011 using only a year. */'; put 'low-''31DEC2011''d=[year4.]'; put '/* Format 2012 dates using the month and year. */'; put '''01jan2012''d-''31DEC12''d=[monyy7.]'; put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */'; put '''01JAN2013''d-high=[date9.]'; put '/* Catch missing values. */'; put 'other=''n/a'';'; put 'value newfmt .=''N/A'' other=[12.1];'; put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */'; put 'value $genderml (multilabel)'; put '''1''=''Male'''; put '''2''=''Female'''; put '''1'',''2'','' ''=''Total people'';'; put 'value agemla (multilabel)'; put '1-4=''Preschool'''; put '1-18=''Children'''; put '19-120=''Adults'';'; put 'value agemlb (multilabel)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put 'value agemlc (multilabel notsorted)'; put '19-120=''Adults'''; put '1-18=''Children'''; put '1-4=''Preschool'';'; put '%mend mpe_makedata;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mpe_makedatamodel(lib=);'; put '%if &syscc ne 0 %then %do;'; put '%put syscc=&syscc exiting &sysmacroname;'; put '%return;'; put '%end;'; put '%local notnull;'; put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;'; put '%put &=notnull;'; put 'proc sql;'; put 'create table &lib..mpe_alerts('; put 'tx_from num format=datetime19.3,'; put 'alert_event char(20),'; put 'alert_lib char(8),'; put 'alert_ds char(32),'; put 'alert_user char(100) ,'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_alerts;'; put 'index create'; put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_audit('; put 'load_ref char(36) label=''unique load reference'','; put 'libref char(8) label=''Library Reference (8 chars)'','; put 'dsn char(32) label=''Dataset Name (32 chars)'','; put 'key_hash char(32) label='; put '''MD5 Hash of primary key values (pipe seperated)'','; put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'','; put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'','; put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'','; put 'is_pk num label=''Is Primary Key Field? (1/0)'','; put 'is_diff num label='; put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'','; put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'','; put 'oldval_num num format=best32. label=''Old (numeric) value'','; put 'newval_num num format=best32. label=''New (numeric) value'','; put 'oldval_char char(32765) label=''Old (character) value'','; put 'newval_char char(32765) label=''New (character) value'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_audit;'; put 'index create'; put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_column_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'CLS_SCOPE char(4) ¬null,'; put 'CLS_GROUP char(64) ¬null,'; put 'CLS_LIBREF char(8) ¬null,'; put 'CLS_TABLE char(32) ¬null,'; put 'CLS_VARIABLE_NM char(32) ¬null,'; put 'CLS_ACTIVE num ¬null,'; put 'CLS_HIDE num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_column_level_security;'; put 'index create'; put 'pk_mpe_column_level_security='; put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_config('; put 'tx_from num ¬null format=datetime19.3'; put ',tx_to num ¬null format=datetime19.3'; put ',var_scope varchar(10) ¬null'; put ',var_name varchar(32) ¬null'; put ',var_value varchar(5000)'; put ',var_active num'; put ',var_desc varchar(300)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_config;'; put 'index create'; put 'pk_mpe_config=(tx_to var_scope var_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Ref'','; put 'engine char(32) label=''Library Engine'','; put 'libname char(256) format=$256. label=''Library Name'','; put 'paths char(8192) label=''Library Paths'','; put 'perms char(500) label=''Library Permissions (if BASE)'','; put 'owners char(500) label=''Library Owners (if BASE)'','; put 'schemas char(500) label=''Library Schemas (if DB)'','; put 'libid char(17) label=''LibraryId'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_libs;'; put 'index create'; put 'pk_mpe_datacatalog_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_TABS('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'memtype char(8) label=''Member Type'','; put 'dbms_memtype char(32) label=''DBMS Member Type'','; put 'memlabel char(512) label=''Data Set Label'','; put 'typemem char(8) label=''Data Set Type'','; put 'nvar num label=''Number of Variables'','; put 'compress char(8) label=''Compression Routine'','; put 'pk_fields char(512)'; put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_TABS;'; put 'index create'; put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datacatalog_vars('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Table Name'','; put 'name char(64) label=''Column Name'','; put 'memtype char(8) label=''Member Type'','; put 'type char(16) label=''Column Type'','; put 'length num label=''Column Length'','; put 'varnum num label=''Column Number in Table'','; put 'label char(512) label=''Column Label'','; put 'format char(49) label=''Column Format'','; put 'idxusage char(9) label=''Column Index Type'','; put 'notnull char(3) label=''Not NULL?'','; put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datacatalog_vars;'; put 'index create'; put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_libs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'libsize num format=SIZEKMG. label=''Size of library'','; put 'table_cnt num label=''Number of Tables'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_libs;'; put 'index create'; put 'pk_mpe_datastatus_libs=(libref tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datastatus_tabs('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'libref char(8) label=''Library Name'','; put 'dsn char(64) label=''Member Name'','; put 'filesize num format=SIZEKMG. label=''Size of file'','; put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'','; put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'','; put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datastatus_tabs;'; put 'index create'; put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_datadictionary'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'TX_TO num ¬null format=datetime19.3,'; put 'DD_TYPE char(16),'; put 'DD_SOURCE char(1024),'; put 'DD_SHORTDESC char(256),'; put 'DD_LONGDESC char(32767),'; put 'DD_OWNER char(128),'; put 'DD_RESPONSIBLE char(128),'; put 'DD_SENSITIVITY char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_datadictionary;'; put 'index create'; put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_dataloads('; put 'libref varchar(8) ¬null,'; put 'dsn varchar(32) ¬null,'; put 'etlsource varchar(100) ¬null,'; put 'loadtype varchar(20) ¬null,'; put 'changed_records int,'; put 'new_records int,'; put 'deleted_records int,'; put 'duration num,'; put 'user_nm varchar(50) ¬null,'; put 'processed_dttm num format=datetime19.3,'; put 'mac_ver varchar(5)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_dataloads;'; put 'index create'; put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_emails('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'user_name char(50) ¬null,'; put 'user_displayname char(100),'; put 'user_email char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_emails;'; put 'index create'; put 'pk_mpe_emails=(tx_to user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_excel_config('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'xl_libref char(8),'; put 'xl_table char(32),'; put 'xl_column char(32),'; put 'xl_rule char(32),'; put 'xl_active num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_excel_config;'; put 'index create'; put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_XLMAP_DATA('; put 'LOAD_REF char(32) ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'ROW_NO num ¬null,'; put 'COL_NO num ¬null,'; put 'VALUE_TXT char(4000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify MPE_XLMAP_DATA;'; put 'index create'; put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_info('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_DESCRIPTION char(1000) ¬null,'; put 'XLMAP_TARGETLIBDS char(41) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_info;'; put 'index create'; put 'pk_mpe_xlmap_info=(tx_to xlmap_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_xlmap_rules('; put 'tx_from num ¬null,'; put 'tx_to num ¬null,'; put 'XLMAP_ID char(32) ¬null,'; put 'XLMAP_RANGE_ID char(32) ¬null,'; put 'XLMAP_SHEET char(32) ¬null,'; put 'XLMAP_START char(1000) ¬null,'; put 'XLMAP_FINISH char(1000)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_xlmap_rules;'; put 'index create'; put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filteranytable('; put 'filter_rk num ¬null,'; put 'filter_hash char(32) ¬null,'; put 'filter_table char(41) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filteranytable;'; put 'index create filter_rk /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_filtersource('; put 'filter_hash char(32) ¬null,'; put 'filter_line num ¬null,'; put 'group_logic char(3) ¬null,'; put 'subgroup_logic char(3) ¬null,'; put 'subgroup_id num ¬null,'; put 'variable_nm varchar(32) ¬null,'; put 'operator_nm varchar(12) ¬null,'; put 'raw_value varchar(4000) ¬null,'; put 'processed_dttm num ¬null format=datetime19.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_filtersource;'; put 'index create'; put 'pk_mpe_filtersource=(filter_hash filter_line)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_groups('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'group_name char(100) ¬null,'; put 'user_name char(50) ¬null,'; put 'group_desc char(256)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_groups;'; put 'index create'; put 'pk_mpe_groups=(tx_to group_name user_name)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lineage_cols'; put '('; put 'col_id char(32),'; put 'direction char(1),'; put 'sourcecoluri char(256),'; put 'map_type char(256),'; put 'map_transform char(256),'; put 'jobname char(256),'; put 'sourcetablename char(256),'; put 'sourcecolname char(256),'; put 'targettablename char(256),'; put 'targetcolname char(256),'; put 'targetcoluri char(256),'; put 'Derived_Rule char(500),'; put 'level int,'; put 'modified_dttm num format=datetime19.3,'; put 'modified_by char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_cols;'; put 'index create'; put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_LINEAGE_TABS'; put '('; put 'tx_from num ¬null format=datetime19.3,'; put 'jobid char(17),'; put 'srctableid char(17),'; put 'tgttableid char(17),'; put 'jobname char(128),'; put 'srctabletype char(16),'; put 'srctablename char(64),'; put 'srclibref char(8),'; put 'tgttabletype char(16),'; put 'tgttablename char(64),'; put 'tgtlibref char(8),'; put 'tx_to num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lineage_tabs;'; put 'index create'; put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_loads('; put 'csv_dir char(255),'; put 'user_nm char(50) ,'; put 'status char(15) ,'; put 'duration num ,'; put 'processed_dttm num format=datetime19.3,'; put 'reason_txt char(2048) ,'; put 'approvals char(64)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_loads;'; put 'index create csv_dir /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_lockanytable('; put 'lock_lib varchar(8) ¬null ,'; put 'lock_ds varchar(32) ¬null,'; put 'lock_status_cd varchar(10) ¬null,'; put 'lock_user_nm varchar(100) ¬null ,'; put 'lock_ref varchar(200),'; put 'lock_pid varchar(10),'; put 'lock_start_dttm num format=E8601DT26.6,'; put 'lock_end_dttm num format=E8601DT26.6'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_lockanytable;'; put 'index create'; put 'pk_mpe_lockanytable=(lock_lib lock_ds)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_maxkeyvalues('; put 'keytable varchar(41) label=''Base table in libref.dataset format'','; put 'keycolumn char(32) format=$32.'; put 'label=''The Surrogate / Retained key field containing the key values.'','; put 'max_key num label='; put '''Integer value representing current max RK or SK value in the KEYTABLE'','; put 'processed_dttm num format=E8601DT26.6'; put 'label=''Datetime this value was last updated'''; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_maxkeyvalues;'; put 'index create keytable /nomiss unique;'; put 'quit;'; put '/* no PK defined as it is a transaction table */'; put 'proc sql;'; put 'create table &lib..mpe_requests('; put 'request_dttm num ¬null format=datetime19.,'; put 'request_user char(64) ¬null,'; put 'request_service char(64) ¬null,'; put 'request_params char(128)'; put ');'; put 'proc sql;'; put 'create table &lib..mpe_review('; put 'table_id varchar(32) ¬null,'; put 'reviewed_by_nm varchar(100) ¬null,'; put 'base_table varchar(41) ¬null,'; put 'review_status_id varchar(10) ¬null,'; put 'reviewed_on_dttm num ¬null format=datetime19.3,'; put 'review_reason_txt varchar(400)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_review;'; put 'index create'; put 'pk_mpe_review=(table_id reviewed_by_nm)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_row_level_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'RLS_RK num ¬null,'; put 'RLS_SCOPE char(8) ¬null,'; put 'RLS_GROUP char(128) ¬null,'; put 'RLS_LIBREF char(8) ¬null,'; put 'RLS_TABLE char(32) ¬null,'; put 'RLS_GROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_LOGIC char(3) ¬null,'; put 'RLS_SUBGROUP_ID num ¬null,'; put 'RLS_VARIABLE_NM varchar(32) ¬null,'; put 'RLS_OPERATOR_NM varchar(12) ¬null,'; put 'RLS_RAW_VALUE varchar(4000) ¬null,'; put 'RLS_ACTIVE num ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_row_level_security;'; put 'index create'; put 'pk_mpe_row_level_security=(tx_to RLS_RK)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_security('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'access_level char(10) ¬null,'; put 'sas_group char(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_security;'; put 'index create'; put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_selectbox('; put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/'; put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */'; put 'selectbox_rk num ¬null, /* surrogate key */'; put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/'; put 'select_ds varchar(32) ¬null,'; put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */'; put 'selectbox_value varchar(500) ¬null, /* selectbox value */'; put 'selectbox_order num , /* optional ordering (1 comes before 2) */'; put 'selectbox_type varchar(32) /* column type (blank for default, else'; put 'sas or js to indicate relevant system functions)*/'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_selectbox;'; put 'index create'; put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_signoffs('; put 'tech_from_dttm num ¬null format=datetime19.3,'; put 'tech_to_dttm num ¬null format=datetime19.3,'; put 'signoff_table varchar(50) ¬null,'; put 'signoff_section_rk num ¬null,'; put 'signoff_version_rk num ¬null,'; put 'signoff_name varchar(100) ¬null'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_signoffs;'; put 'index create'; put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)'; put '/nomiss unique;'; put 'quit;'; put '/* mpe_submit */'; put 'proc sql;'; put 'create table &lib..mpe_submit('; put 'table_id varchar(32) ¬null,'; put 'submit_status_cd varchar(10) ¬null,'; put 'base_lib char(8) ¬null,'; put 'base_ds char(32) ¬null,'; put 'submitted_by_nm varchar(100) ¬null,'; put 'submitted_on_dttm num ¬null format=datetime19.3,'; put 'submitted_reason_txt varchar(400),'; put 'input_obs num,'; put 'input_vars num,'; put 'num_of_approvals_required num ¬null ,'; put 'num_of_approvals_remaining num ¬null ,'; put 'reviewed_by_nm char(100),'; put 'reviewed_on_dttm num'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_submit;'; put 'index create table_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_tables('; put 'tx_from num ¬null format=datetime19.3,'; put 'tx_to num ¬null format=datetime19.3,'; put 'libref char(8) ¬null,'; put 'dsn char(32) ¬null,'; put 'num_of_approvals_required int,'; put 'loadtype char(12) ,'; put 'buskey char(1000) ,'; put 'var_txfrom char(32) ,'; put 'var_txto char(32) ,'; put 'var_busfrom char(32) ,'; put 'var_busto char(32) ,'; put 'var_processed char(32) ,'; put 'close_vars varchar(500),'; put 'pre_edit_hook char(200),'; put 'post_edit_hook char(200),'; put 'pre_approve_hook char(200) ,'; put 'post_approve_hook char(200) ,'; put 'signoff_cols varchar(500),'; put 'signoff_hook varchar(200),'; put 'notes char(1000) ,'; put 'rk_underlying char(1000) ,'; put 'audit_libds char(41)'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_tables;'; put 'index create'; put 'pk_mpe_tables=(tx_to libref dsn)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_users('; put 'user_id char(50) ¬null,'; put 'last_seen_dt num ¬null format=date9.,'; put 'registered_dt num ¬null format=date9.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_users;'; put 'index create user_id /nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..MPE_VALIDATIONS'; put '('; put 'TX_FROM num ¬null format=datetime19.3,'; put 'BASE_LIB varchar(8),'; put 'BASE_DS varchar(32),'; put 'BASE_COL varchar(32),'; put 'RULE_TYPE varchar(32),'; put 'RULE_VALUE varchar(128),'; put 'RULE_ACTIVE num ,'; put 'TX_TO num ¬null format=datetime19.3'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_validations;'; put 'index create'; put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)'; put '/nomiss unique;'; put 'quit;'; put 'proc sql;'; put 'create table &lib..mpe_x_test('; put 'primary_key_field num ¬null,'; put 'some_char char(32767) ,'; put 'some_dropdown char(128),'; put 'some_num num ,'; put 'some_date num format=date9.,'; put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,'; put 'some_time num format=time8.,'; put 'some_shortnum num length=4,'; put 'some_bestnum num format=best.'; put ');quit;'; put 'proc datasets lib=&lib noprint;'; put 'modify mpe_x_test;'; put 'index create primary_key_field /nomiss unique;'; put 'quit;'; put '%mend mpe_makedatamodel;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mm_getstpinfo(pgm'; put ',outds=work.mm_getstpinfo'; put ',mDebug=0'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length type stp_uri tsuri servercontext value $200'; put 'StoredProcessConfiguration $1000 sourcecode_first32k $32767;'; put 'keep path stp_uri sourcecode_first32k StoredProcessConfiguration'; put 'servercontext;'; put 'call missing (of _all_);'; put 'path="&pgm(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,stp_uri)>0 then do;'; put '/* get attributes */'; put 'cnt=1;'; put 'do while (metadata_getnasn(stp_uri,"Notes",cnt,tsuri)>0);'; put 'rc1=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put 'rc2=metadata_getattr(tsuri,"StoredText",sourcecode_first32k);'; put 'end;'; put 'else if value="Stored Process" then do;'; put 'rc3=metadata_getattr(tsuri,"StoredText",StoredProcessConfiguration);'; put 'end;'; put 'cnt+1;'; put 'end;'; put '/* get context (should only be one) */'; put 'rc4=metadata_getnasn(stp_uri,"ComputeLocations",1,tsuri);'; put 'rc5=metadata_getattr(tsuri,"Name",servercontext);'; put 'end;'; put 'else do;'; put 'put ''ERR'' +(-1) "OR: could not find " path;'; put 'put (_all_)(=);'; put 'end;'; put '&md.put (_all_)(=);'; put 'run;'; put '%mend mm_getstpinfo ;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief service for creating the configuration tables in DEMO mode.'; put '@details'; put 'STP for creating the configuration tables in DEMO mode.'; put 'It also adds the STAGING directory as subdirectory to the BASE'; put 'library location.'; put 'Note - the CURLIB var is added during the build process.'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mf_getapploc.sas'; put '@li mf_getuser.sas'; put '@li mf_mkdir.sas'; put '@li mm_createdocument.sas'; put '@li mm_createlibrary.sas'; put '@li mm_createstp.sas'; put '@li mm_deletedocument.sas'; put '@li mm_deletestp.sas'; put '@li mm_getstpcode.sas'; put '@li mm_getstpinfo.sas'; put '@li mp_abort.sas'; put '@li mp_init.sas'; put '@li mpe_makedata.sas'; put '@li mpe_makedatamodel.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mp_init()'; put '%global admin repo path; /* URL params from configurator */'; put '%let repo=%sysfunc(coalescec(&repo,Foundation));'; put '%let admin=%sysfunc(coalescec(&admin,dc-admin));'; put '%let dcpath=%sysfunc(coalescec(&path,NOTFOUND));'; put '%mp_abort(iftrue= ("&dcpath" = "NOTFOUND")'; put ',mac=&_program'; put ',msg=%str(PATH variable was not provided)'; put ')'; put '%let root=%mf_getapploc();'; put '%let work=%sysfunc(pathname(work));'; put '%let dc_libref=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let DC_LIBNAME=Data Controller(&dc_libref);'; put '%let dcpath=&dcpath/&dc_libref;'; put '%put _all_;'; put '%mf_mkdir(&dcpath/dc_staging)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Unable to create &dcpath using &sysuserid)'; put ')'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&root/services/admin,name=permTest)'; put '%mm_deletedocument(target=&root/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &_metaperson does not have WriteMetadata on metadata folder:'; put '&root )'; put ')'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'putlog "dcpath=&dcpath/permTest.txt";'; put 'putlog "sysuserid=&sysuserid";'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '/* get the server context from the current STP */'; put '%mm_getstpinfo(&_program,outds=work.stpinfo)'; put 'data _null_;'; put 'set work.stpinfo;'; put 'call symputx(''serverContext'',serverContext);'; put 'run;'; put '/* create the library */'; put '%mm_createlibrary('; put 'libname=&DC_LIBNAME'; put ',libref=&dc_libref'; put ',libdesc=Data Controller for SAS configuration tables'; put ',engine=BASE'; put ',tree=&root/data'; put ',servercontext=&serverContext'; put ',directory=&dcpath'; put ',mDebug=1'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to create &dc_libref library)'; put ')'; put '/* assign the library */'; put 'libname &dc_libref "&dcpath";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=buildtermsas9'; put ',msg=%str(Unable to assign the &dc_libref library)'; put ')'; put '/* make the tables */'; put '/* SASAdministrators */'; put '%mpe_makedatamodel(lib=&dc_libref)'; put '%mpe_makedata(lib=&DC_LIBREF,mpeadmins=&admin,path=%str(&dcpath))'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem creating tables in &DC_LIBREF library\n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT)'; put ')'; put '/* register tables in metadata */'; put 'proc metalib;'; put 'omr (library="&DC_LIBNAME");'; put 'folder="&root/data";'; put 'update_rule=(delete);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem registering metadata for tables in &DC_LIBREF library \n'; put 'os user=&sysuserid \n'; put 'metaperson=%mf_getuser() \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put '/* finally, update the app component. The user will need WM perms for this. */'; put 'data _null_;'; put 'file "&work/settings.sas" mod ;'; put 'put '' '';'; put 'put ''%global DC_LIBREF DC_LIBNAME DC_LIBLOC DC_STAGING_AREA DC_ADMIN_GROUP'';'; put 'put '' DC_REPO_USERS DC_DTTMTFMT DC_MACROS;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&DC_LIBREF;";'; put 'put ''%let DC_LIBNAME='' "&DC_LIBNAME;";'; put 'put ''%let DC_LIBLOC='' "&dcpath;";'; put 'put '' '';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'put ''/* This metadata group has unrestricted access to Data Controller */'';'; put 'put ''%let dc_admin_group='' "&admin;";'; put 'put '' '';'; put 'put ''/* This repository is used to query for users and groups */'';'; put 'put ''%let dc_repo_users='' "&repo;";'; put 'put '' '';'; put 'put ''/* This physical location is used for staging data and audit history */'';'; put 'put ''%let dc_staging_area=&dc_libloc/dc_staging;'';'; put 'put '' '';'; put 'put ''data _null_;'';'; put 'put '' set &DC_LIBREF..mpe_config(where=('';'; put 'put '' var_scope="DC" '';'; put 'put '' and &dc_dttmtfmt. lt tx_to'';'; put 'put '' and var_active=1'';'; put 'put " ));";'; put 'put " call symputx(var_name,var_value,''G'');";'; put 'put '' putlog var_name "=" var_value;'';'; put 'put "run;";'; put 'put '' '';'; put 'put ''/* to override any DC macros with client versions, place them below */'';'; put 'put ''options insert=(sasautos=("&dc_macros"));'';'; put 'run;'; put '/*'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put '*/'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=syscc=&syscc when preparing data_controller_settings)'; put ')'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=settings.sas'; put ',directory=&work'; put ',tree=&root/services/public'; put ',Server=&serverContext'; put ',stptype=2'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str('; put 'Problem updating the dc_staging area in'; put '&root/services/public/DataController Settings \n'; put 'SYSERRORTEXT=&SYSERRORTEXT \n'; put 'SYSWARNINGTEXT=&SYSWARNINGTEXT'; put ')'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Data Controller Config

'';'; put 'put ''

The following items have been successfully configured:

'';'; put 'put "";'; put 'put "

Next Steps:

";'; put 'put "
  1. Populate ";'; put 'put "Table Lineage
  2. ";'; put 'put "
  3. Populate";'; put 'put "Data Catalog
  4. ";'; put 'put "
  5. Now, ";'; put 'put "hereLaunch!
";'; put 'run;'; put '/* We ran successfully, now remove configurator and makedata STPs */'; put '%mm_deletestp(target=&root/services/admin/configurator)'; put '%mm_deletestp(target=&_program)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=makelib; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mm_createfolder(path=,mDebug=0);'; put '%put &sysmacroname: execution started for &path;'; put '%local dbg errorcheck;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%local parentFolderObjId child errorcheck paths;'; put '%let paths=0;'; put '%let errorcheck=1;'; put '%if &syscc ge 4 %then %do;'; put '%put SYSCC=&syscc - this macro requires a clean session;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'length objId parentId objType parent child $200'; put 'folderPath $1000;'; put 'call missing (of _all_);'; put 'folderPath = "%trim(&path)";'; put '* remove any trailing slash ;'; put 'if ( substr(folderPath,length(folderPath),1) = ''/'' ) then'; put 'folderPath=substr(folderPath,1,length(folderPath)-1);'; put '* name must not be blank;'; put 'if ( folderPath = '''' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH parameter value must be non-blank";'; put 'end;'; put '* must have a starting slash ;'; put 'if ( substr(folderPath,1,1) ne ''/'' ) then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname PATH param value must have starting slash";'; put 'stop;'; put 'end;'; put '* check if folder already exists ;'; put 'rc=metadata_pathobj('''',cats(folderPath,"(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'put "NOTE: Folder " folderPath " already exists!";'; put 'stop;'; put 'end;'; put '* do not create a root (one level) folder ;'; put 'if countc(folderPath,''/'')=1 then do;'; put 'put ''ERR'' +(-1) "OR: &sysmacroname will not create a new ROOT folder";'; put 'stop;'; put 'end;'; put '* check that root folder exists ;'; put 'root=cats(''/'',scan(folderpath,1,''/''),"(Folder)");'; put 'if metadata_pathobj('''',root,"",objType,parentId)<1 then do;'; put 'put ''ERR'' +(-1) "OR: " root " does not exist!";'; put 'stop;'; put 'end;'; put '* check that parent folder exists ;'; put 'child=scan(folderPath,-1,''/'');'; put 'parent=substr(folderpath,1,length(folderpath)-length(child)-1);'; put 'rc=metadata_pathobj('''',cats(parent,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'putlog ''The following folders will be created:'';'; put '/* folder does not exist - so start from top and work down */'; put 'length newpath $1000;'; put 'paths=0;'; put 'do x=2 to countw(folderpath,''/'');'; put 'newpath='''';'; put 'do i=1 to x;'; put 'newpath=cats(newpath,''/'',scan(folderpath,i,''/''));'; put 'end;'; put 'rc=metadata_pathobj('''',cats(newpath,"(Folder)"),"",objType,parentId);'; put 'if rc<1 then do;'; put 'paths+1;'; put 'call symputx(cats(''path'',paths),newpath);'; put 'putlog newpath;'; put 'end;'; put 'call symputx(''paths'',paths);'; put 'end;'; put 'end;'; put 'else putlog "parent " parent " exists";'; put 'call symputx(''parentFolderObjId'',parentId,''l'');'; put 'call symputx(''child'',child,''l'');'; put 'call symputx(''errorcheck'',0,''l'');'; put '&dbg put (_all_)(=);'; put 'run;'; put '%if &errorcheck=1 or &syscc ge 4 %then %return;'; put '%if &paths>0 %then %do x=1 %to &paths;'; put '%put executing recursive call for &&path&x;'; put '%mm_createfolder(path=&&path&x)'; put '%end;'; put '%else %do;'; put 'filename __newdir temp;'; put 'options noquotelenmax;'; put '%local inmeta;'; put '%put creating: &path;'; put '%let inmeta=$METAREPOSITORY'; put ''; put 'SAS268435456'; put ';'; put 'proc metadata in="&inmeta" out=__newdir verbose;'; put 'run ;'; put '/* check it was successful */'; put 'data _null_;'; put 'length objId parentId objType parent child $200 ;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj('''',cats("&path","(Folder)"),"",objType,objId);'; put 'if rc ge 1 then do;'; put 'putlog "SUCCCESS! &path created.";'; put 'end;'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unsuccessful attempt to create &path";'; put 'call symputx(''syscc'',8);'; put 'end;'; put 'run;'; put '/* write the response to the log for debugging */'; put '%if &mDebug ne 0 %then %do;'; put 'data _null_;'; put 'infile __newdir lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'filename __newdir clear;'; put '%end;'; put '%put &sysmacroname: execution finished for &path;'; put '%mend mm_createfolder;'; put '%macro mm_createlibrary('; put 'libname=My New Library'; put ',libref=mynewlib'; put ',libdesc=Created automatically using the mm_createlibrary macro'; put ',engine=BASE'; put ',tree=/User Folders/sasdemo'; put ',servercontext=SASApp'; put ',directory=/tmp/somelib'; put ',IsPreassigned=0'; put ',mDebug=0'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%let libref=%upcase(&libref);'; put '/**'; put '* Check Library does not exist already with this libname'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Name=''&libname''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libname (&libname);'; put '%return;'; put '%end;'; put '/**'; put '* Check Library does not exist already with this libref'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:SASLibrary?@Libref=''&libref''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype = SASLibrary %then %do;'; put '%put %str(WARN)ING: Library (&liburi) already exists with libref (&libref) ;'; put '%return;'; put '%end;'; put '/**'; put '* Attempt to create tree'; put '*/'; put '%mm_createfolder(path=&tree)'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Create filerefs for proc metadata call'; put '*/'; put 'filename &frefin temp;'; put 'filename &frefout temp;'; put '%mp_abort(iftrue= ('; put '&engine=BASE & %mf_verifymacvars(libname libref engine servercontext tree)=0'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: libname libref engine servercontext tree)'; put ')'; put '%if &engine=BASE %then %do;'; put '/**'; put '* Check that the ServerContext exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:ServerContext?@Name=''&ServerContext''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''serveruri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne ServerContext %then %do;'; put '%put %str(ERR)OR: ServerContext (&ServerContext) does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Get prototype info'; put '*/'; put 'data _null_;'; put 'length type uri str $256;'; put 'str="omsobj:Prototype?@Name=''Library.SAS.Prototype.Name.xmlKey.txt''";'; put 'rc=metadata_resolve(str,type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''prototypeuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Prototype %then %do;'; put '%put %str(ERR)OR: Prototype Library.SAS.Prototype.Name.xmlKey.txt not found;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Physical location exists'; put '*/'; put '%if %sysfunc(fileexist(&directory))=0 %then %do;'; put '%put %str(ERR)OR: Physical directory (&directory) does not appear to exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that Directory Object exists in metadata'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &checktype ne Directory %then %do;'; put '%put NOTE: Directory object does not exist for (&directory) location;'; put '%put NOTE: It will now be created;'; put 'data _null_;'; put 'file &frefin;'; put 'directory=quote(symget(''directory''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input; put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure directory (&directory) object was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_resolve("omsobj:Directory?@DirectoryRole=''LibraryPath''"'; put '!!" and @DirectoryName=''&directory''",type,uri);'; put 'call symputx(''checktype2'',type,''l'');'; put 'call symputx(''directoryuri'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &checktype2 ne Directory %then %do;'; put '%put %str(ERR)OR: Directory (&directory) object was NOT created!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Directory (&directoryuri) successfully created!;'; put '%end;'; put '/**'; put '* check SAS version'; put '*/'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: Version 9.3 or later required;'; put '%return;'; put '%end;'; put '/**'; put '* Prepare the XML and create the library'; put '*/'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'directoryuri=quote(symget(''directoryuri''));'; put 'libname=quote(symget(''libname''));'; put 'libref=quote(symget(''libref''));'; put 'IsPreassigned=quote(symget(''IsPreassigned''));'; put 'prototypeuri=quote(symget(''prototypeuri''));'; put '/* escape description so it can be stored as XML */'; put 'libdesc=tranwrd(symget(''libdesc''),''&'',''&'');'; put 'libdesc=tranwrd(libdesc,''<'',''<'');'; put 'libdesc=tranwrd(libdesc,''>'',''>'');'; put 'libdesc=tranwrd(libdesc,"''",''''');'; put 'libdesc=tranwrd(libdesc,''"'',''"'');'; put 'libdesc=tranwrd(libdesc,''0A''x,'' '');'; put 'libdesc=tranwrd(libdesc,''0D''x,'' '');'; put 'libdesc=tranwrd(libdesc,''$'',''$'');'; put 'libdesc=quote(trim(libdesc));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put ''' ''/'; put ''' "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '" "/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put ''' ''/'; put '''SAS''/'; put '''268435456'';'; put 'run;'; put 'proc metadata in= &frefin out=&frefout %if &mdebug=1 %then verbose ;;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: Checking to ensure library (&libname) was created;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&libname","Library",type,uri);'; put 'call symputx(''libtype'',type,''l'');'; put 'call symputx(''liburi'',uri,''l'');'; put '%if &mdebug=1 %then putlog (_all_)(=);;'; put 'run;'; put '%if &libtype ne SASLibrary %then %do;'; put '%put %str(ERR)OR: Could not find (&libname) at (&tree)!!;'; put '%return;'; put '%end;'; put '%else %put NOTE: Library (&libname) successfully created in (&tree)!;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Other library engine types are not yet supported!!;'; put '%end;'; put '/**'; put '* Wrap up'; put '*/'; put '%if &mdebug ne 1 %then %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_createlibrary;'; put '%macro mm_createdocument('; put 'tree=/User Folders/sasdemo'; put ',name=myNote'; put ',desc=Created by &sysmacroname'; put ',textrole='; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',mDebug=1'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%mp_abort(iftrue= (%mf_verifymacvars(tree name)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: tree name)'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%mp_abort('; put 'iftrue= (&type ne Tree)'; put ',mac=mm_createdocument.sas'; put ',msg=Tree &tree does not exist!'; put ')'; put '/**'; put '* Check object does not exist already'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&name","Note",type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''docuri'',uri,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if &type = Document %then %do;'; put '%put Document &name already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Now we can create the document'; put '*/'; put 'filename &frefin temp;'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'name=quote("&name");'; put 'desc=quote("&desc");'; put 'textrole=quote("&textrole");'; put 'treeuri=quote("&treeuri");'; put 'put "$METAREPOSITORY"/'; put '''"/'; put '" "/'; put ''' '' /'; put '''''/'; put '/*URI="Document for public note" */'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout verbose;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%mend mm_createdocument;'; put '%macro mm_deletedocument('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check document exist'; put '*/'; put '%local type;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''type'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &type ne Document %then %do;'; put '%put %str(WARN)ING: No Document found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = Document %then %do;'; put '%put %str(ERR)OR: Document not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletedocument;'; put '%macro mm_deletestp('; put 'target='; put ')/*/STORE SOURCE*/;'; put '/**'; put '* Check STP does exist'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&target",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype ne ClassifierMap %then %do;'; put '%put NOTE: No Stored Process found at ⌖'; put '%return;'; put '%end;'; put 'filename __in temp lrecl=10000;'; put 'filename __out temp lrecl=10000;'; put 'data _null_ ;'; put 'file __in ;'; put 'put "";'; put 'put "SAS268436480";'; put 'put "";'; put 'run ;'; put 'proc metadata in=__in out=__out verbose;run;'; put '/* list the result */'; put 'data _null_;infile __out; input; list; run;'; put 'filename __in clear;'; put 'filename __out clear;'; put '/**'; put '* Check deletion'; put '*/'; put '%local isgone;'; put 'data _null_;'; put 'length type uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_pathobj("","&target",''Note'',type,uri);'; put 'call symputx(''isgone'',type,''l'');'; put 'run;'; put '%if &isgone = ClassifierMap %then %do;'; put '%put %str(ERR)OR: STP not deleted from ⌖'; put '%let syscc=4;'; put '%return;'; put '%end;'; put '%mend mm_deletestp;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mm_getDirectories('; put 'path='; put ',outds=work.mm_getDirectories'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getDirectories.sas;'; put '%&mD.put _local_;'; put 'data &outds (keep=directoryuri name directoryname directorydesc );'; put 'length directoryuri name directoryname directorydesc $256;'; put 'call missing(of _all_);'; put '__i+1;'; put '%if %length(&path)=0 %then %do;'; put 'do while'; put '(metadata_getnobj("omsobj:Directory?@Id contains ''.''",__i,directoryuri)>0);'; put '%end; %else %do;'; put 'do while('; put 'metadata_getnobj("omsobj:Directory?@DirectoryName=''&path''",__i,directoryuri)'; put '>0'; put ');'; put '%end;'; put '__rc1=metadata_getattr(directoryuri, "Name", name);'; put '__rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname);'; put '__rc3=metadata_getattr(directoryuri, "Desc", directorydesc);'; put '&mD.putlog (_all_) (=);'; put 'drop __:;'; put '__i+1;'; put 'if sum(of __rc1-__rc3)=0 then output;'; put 'end;'; put 'run;'; put '%mend mm_getDirectories;'; put '%macro mm_updatestpsourcecode(stp='; put ',stpcode='; put ',minify=NO'; put ',mdebug=0'; put ');'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&stp.(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '%if &mdebug=1 %then %do;'; put 'put tsuri= value=;'; put '%end;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%if &tsuri=stopifempty %then %do;'; put '%put %str(WARN)ING: &stp.(StoredProcess) not found!;'; put '%return;'; put '%end;'; put '%if %length(&stpcode)<2 %then %do;'; put '%put %str(WARN)ING: No SAS code supplied!!;'; put '%return;'; put '%end;'; put '%local frefin frefout;'; put '%let frefin=%mf_getuniquefileref();'; put '%let frefout=%mf_getuniquefileref();'; put '/* write header XML */'; put 'data _null_;'; put 'file &frefin;'; put 'put "$METAREPOSITORY'; put '2 %then %do;'; put 'data _null_;'; put 'file &frefin lrecl=32767 mod;'; put 'infile &stpcode lrecl=32767;'; put 'length outstr $32767;'; put 'input outstr ;'; put '/* escape code so it can be stored as XML */'; put 'outstr=tranwrd(_infile_,''&'',''&'');'; put 'outstr=tranwrd(outstr,''<'',''<'');'; put 'outstr=tranwrd(outstr,''>'',''>'');'; put 'outstr=tranwrd(outstr,"''",''''');'; put 'outstr=tranwrd(outstr,''"'',''"'');'; put 'outstr=tranwrd(outstr,''0A''x,'' '');'; put 'outstr=tranwrd(outstr,''0D''x,'' '');'; put 'outstr=tranwrd(outstr,''$'',''$'');'; put '%if &minify=YES %then %do;'; put 'outstr=cats(outstr);'; put 'if outstr ne '''';'; put 'if not (outstr=:''/*'' and subpad(left(reverse(outstr)),1,2)=''/*'');'; put '%end;'; put 'outstr=trim(outstr);'; put 'put outstr '' '';'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &frefin mod;'; put 'put "''>SAS268435456'; put '";'; put 'run;'; put 'proc metadata in= &frefin out=&frefout;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename &frefin clear;'; put 'filename &frefout clear;'; put '%end;'; put '%mend mm_updatestpsourcecode;'; put '%macro mm_getservercontexts('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* first get list of available repos */'; put '%mm_getrepos(outds=work.repos)'; put '%let repocnt=0;'; put 'data _null_;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put 'filename __mc1 temp;'; put 'filename __mc2 temp;'; put 'data &outds;'; put 'length serveruri servername $200;'; put 'call missing (of _all_);'; put 'stop;'; put 'run;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'ServerContextSAS'; put '0"'; put 'out=__mc1;'; put 'run;'; put '/*'; put 'data _null_;'; put 'infile __mc1 lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put 'data _null_;'; put 'file __mc2;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/ServerContext/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2;'; put 'proc append base=&outds data=__mc3.SASContexts;run;'; put 'libname __mc3 clear;'; put '%end;'; put 'options metarepository=&repo;'; put 'filename __mc1 clear;'; put 'filename __mc2 clear;'; put '%mend mm_getservercontexts;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mm_createstp('; put 'stpname=SASjs Default STP'; put ',stpdesc=This stp was created automatically by the mm_createstp macro'; put ',filename=mm_createstp.sas'; put ',directory=SASEnvironment/SASCode'; put ',tree=/User Folders/sasdemo'; put ',package=false'; put ',streaming=true'; put ',outds=work.mm_createstp'; put ',mDebug=0'; put ',server=SASApp'; put ',stptype=1'; put ',minify=NO'; put ',frefin=mm_in'; put ',frefout=mm_out'; put ',LogicalServerType=Sps'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_CreateSTP.sas;'; put '%&mD.put _local_;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(stpname filename directory tree)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Empty inputs: stpname filename directory tree)'; put ')'; put '%mp_dropmembers(%scan(&outds,2,.))'; put '/* check LogicalServerType validity */'; put '%mp_abort('; put 'iftrue=('; put '&LogicalServerType ne Sps'; put 'and &LogicalServerType ne Wks'; put 'and &LogicalServerType ne Any'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid value for LogicalServerType (&LogicalServerType))'; put ')'; put '/**'; put '* check tree exists'; put '*/'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree","Folder",type,uri);'; put 'call symputx(''foldertype'',type,''l'');'; put 'call symputx(''treeuri'',uri,''l'');'; put 'run;'; put '%if &foldertype ne Tree %then %do;'; put '%put %str(WARN)ING: Tree &tree does not exist!;'; put '%return;'; put '%end;'; put '/**'; put '* Check STP does not exist already'; put '*/'; put '%local cmtype;'; put 'data _null_;'; put 'length type uri $256;'; put 'rc=metadata_pathobj("","&tree/&stpname",''StoredProcess'',type,uri);'; put 'call symputx(''cmtype'',type,''l'');'; put 'call symputx(''stpuri'',uri,''l'');'; put 'run;'; put '%if &cmtype = ClassifierMap %then %do;'; put '%put %str(WARN)ING: Stored Process &stpname already exists in &tree!;'; put '%return;'; put '%end;'; put '/**'; put '* Check that the physical file exists'; put '*/'; put '%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do;'; put '%put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!;'; put '%return;'; put '%end;'; put '%if &stptype=1 %then %do;'; put '/* type 1 STP - where code is stored on filesystem */'; put '%if %sysevalf(&sysver lt 9.2) %then %do;'; put '%put %str(WARN)ING: Version 9.2 or later required;'; put '%return;'; put '%end;'; put '/* check directory object (where 9.2 source code reference is stored) */'; put 'data _null_;'; put 'length id $20 dirtype $256;'; put 'rc=metadata_resolve("&directory",dirtype,id);'; put 'call symputx(''checkdirtype'',dirtype,''l'');'; put 'run;'; put '%if &checkdirtype ne Directory %then %do;'; put '%mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug)'; put '%if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do;'; put '%put %str(WARN)ING: The directory object does not exist for &directory;'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'directoryuri="&directory";'; put 'run;'; put '%end;'; put 'data &outds (keep=stpuri prompturi fileuri texturi);'; put 'length stpuri prompturi fileuri texturi serveruri $256 ;'; put 'if _n_=1 then call missing (of _all_);'; put 'set &outds;'; put '/* final checks on uris */'; put 'length id $20 type $256;'; put '__rc=metadata_resolve("&treeuri",type,id);'; put 'if type ne ''Tree'' then do;'; put 'putlog "%str(WARN)ING: Invalid tree URI: &treeuri";'; put 'stopme=1;'; put 'end;'; put '__rc=metadata_resolve(directoryuri,type,id);'; put 'if type ne ''Directory'' then do;'; put 'putlog "%str(WARN)ING: Invalid directory URI: " directoryuri;'; put 'stopme=1;'; put 'end;'; put '/* get server info */'; put '__rc=metadata_resolve("&server",type,serveruri);'; put 'if type ne ''LogicalServer'' then do;'; put '__rc=metadata_getnobj("omsobj:LogicalServer?@Name=''&server''",1,serveruri);'; put 'if serveruri='''' then do;'; put 'putlog "%str(WARN)ING: Invalid server: &server";'; put 'stopme=1;'; put 'end;'; put 'end;'; put 'if stopme=1 then do;'; put 'putlog (_all_)(=);'; put 'stop;'; put 'end;'; put '/* create empty prompt */'; put 'rc1=METADATA_NEWOBJ(''PromptGroup'',prompturi,''Parameters'');'; put 'rc2=METADATA_SETATTR(prompturi, ''UsageVersion'', ''1000000'');'; put 'rc3=METADATA_SETATTR(prompturi, ''GroupType'',''2'');'; put 'rc4=METADATA_SETATTR(prompturi, ''Name'',''Parameters'');'; put 'rc5=METADATA_SETATTR(prompturi, ''PublicType'',''Embedded:PromptGroup'');'; put 'GroupInfo='; put '"";'; put 'rc6 = METADATA_SETATTR(prompturi, ''GroupInfo'',groupinfo);'; put 'if sum(of rc1-rc6) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating prompt.";'; put 'if prompturi ne . then do;'; put 'putlog '' Removing orphan: '' prompturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'put rc=;'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a file uri */'; put 'rc7=METADATA_NEWOBJ(''File'',fileuri,''SP Source File'');'; put 'rc8=METADATA_SETATTR(fileuri, ''FileName'',"&filename");'; put 'rc9=METADATA_SETATTR(fileuri, ''IsARelativeName'',''1'');'; put 'rc10=METADATA_SETASSN(fileuri, ''Directories'',''MODIFY'',directoryuri);'; put 'if sum(of rc7-rc10) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating file.";'; put 'if fileuri ne . then do;'; put 'putlog '' Removing orphans:'' prompturi fileuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create a TextStore object */'; put 'rc11= METADATA_NEWOBJ(''TextStore'',texturi,''Stored Process'');'; put 'rc12= METADATA_SETATTR(texturi, ''TextRole'',''StoredProcessConfiguration'');'; put 'rc13= METADATA_SETATTR(texturi, ''TextType'',''XML'');'; put 'storedtext='''''; put '!!""'; put '!!"";'; put 'rc14= METADATA_SETATTR(texturi, ''StoredText'',storedtext);'; put 'if sum(of rc11-rc14) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating TextStore.";'; put 'if texturi ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'put (_all_)(=);'; put 'end;'; put 'stop;'; put 'end;'; put '/* create meta obj */'; put 'rc15= METADATA_NEWOBJ(''ClassifierMap'',stpuri,"&stpname");'; put 'rc16= METADATA_SETASSN(stpuri, ''Trees'',''MODIFY'',treeuri);'; put 'rc17= METADATA_SETASSN(stpuri, ''ComputeLocations'',''MODIFY'',serveruri);'; put 'rc18= METADATA_SETASSN(stpuri, ''SourceCode'',''MODIFY'',fileuri);'; put 'rc19= METADATA_SETASSN(stpuri, ''Prompts'',''MODIFY'',prompturi);'; put 'rc20= METADATA_SETASSN(stpuri, ''Notes'',''MODIFY'',texturi);'; put 'rc21= METADATA_SETATTR(stpuri, ''PublicType'', ''StoredProcess'');'; put 'rc22= METADATA_SETATTR(stpuri, ''TransformRole'', ''StoredProcess'');'; put 'rc23= METADATA_SETATTR(stpuri, ''UsageVersion'', ''1000000'');'; put 'rc24= METADATA_SETATTR(stpuri, ''Desc'', "&stpdesc");'; put '/* tidy up if err */'; put 'if sum(of rc15-rc24) ne 0 then do;'; put 'putlog "%str(WARN)ING: Issue creating STP.";'; put 'if stpuri ne . then do;'; put 'putlog '' Removing orphans: '' prompturi fileuri texturi stpuri;'; put 'rc = METADATA_DELOBJ(prompturi);'; put 'rc = METADATA_DELOBJ(fileuri);'; put 'rc = METADATA_DELOBJ(texturi);'; put 'rc = METADATA_DELOBJ(stpuri);'; put 'put (_all_)(=);'; put 'end;'; put 'end;'; put 'else do;'; put 'fullpath=cats(''_program='',treepath,"/&stpname");'; put 'putlog "NOTE: Stored Process Created!";'; put 'putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath;'; put 'putlog "NOTE- "; putlog "NOTE-";'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%else %if &stptype=2 %then %do;'; put '/* type 2 stp - code is stored in metadata */'; put '%if %sysevalf(&sysver lt 9.3) %then %do;'; put '%put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs;'; put '%return;'; put '%end;'; put '/* check we have the correct ServerContext */'; put '%mm_getservercontexts(outds=contexts)'; put '%local serveruri; %let serveruri=NOTFOUND;'; put 'data _null_;'; put 'set contexts;'; put 'where upcase(servername)="%upcase(&server)";'; put 'call symputx(''serveruri'',serveruri);'; put 'run;'; put '%if &serveruri=NOTFOUND %then %do;'; put '%put %str(WARN)ING: ServerContext *&server* not found!;'; put '%return;'; put '%end;'; put '/**'; put '* First, create a Hello World type 2 stored process'; put '*/'; put 'filename &frefin temp;'; put 'data _null_;'; put 'file &frefin;'; put 'treeuri=quote(symget(''treeuri''));'; put 'serveruri=quote(symget(''serveruri''));'; put 'stpdesc=quote(symget(''stpdesc''));'; put 'stpname=quote(symget(''stpname''));'; put 'put "$METAREPOSITORY "/'; put '''''/'; put '" "/'; put '" "/'; put '" "/'; put '" "/'; put ''' ''/'; put ''' '' /'; put '" "/'; put '" "/'; put ''' ''/'; put '" "/'; put '""/'; put '"SAS"/'; put '"268435456";'; put 'run;'; put 'filename &frefout temp;'; put 'proc metadata in= &frefin out=&frefout ;'; put 'run;'; put '%if &mdebug=1 %then %do;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile &frefout lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '/**'; put '* Next, add the source code'; put '*/'; put '%mm_updatestpsourcecode(stp=&tree/&stpname'; put ',stpcode="&directory/&filename"'; put ',mdebug=&mdebug'; put ',minify=&minify)'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: STPTYPE=*&stptype* not recognised!;'; put '%end;'; put '%mend mm_createstp;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Create a demo (base engine) library'; put '@details'; put 'Creates the library'; put '@warning This STP self destructs! It will delete itself after a successful run'; put 'to avoid being executed twice (and overwriting actual data)'; put '

SAS Macros

'; put '@li mm_createlibrary.sas'; put '@li mm_createdocument.sas'; put '@li mm_deletedocument.sas'; put '@li mp_abort.sas'; put '@li dc_assignlib.sas'; put '@li mm_deletestp.sas'; put '@li mm_createstp.sas'; put '@li mf_mkdir.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global dcpath;'; put '%let dclib=%upcase(DC%substr(%sysevalf(%sysfunc(datetime())/60),3,6));'; put '%let dclibname=Data Controller(&dclib);'; put '%let work=%sysfunc(pathname(work));'; put '%let dcpath=&dcpath/&dclib;'; put '%mf_mkdir(&dcpath)'; put '%mf_mkdir(&work)'; put '%put &=dcpath;'; put '/* check we have physical permissions to the DCLIB folder */'; put 'data _null_;'; put 'file "&dcpath/permTest.txt";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid does not have WRITE permissions on physical'; put 'directory: &dcpath )'; put ')'; put 'filename delfile "&dcpath/permTest.txt";'; put 'data _null_;'; put 'rc=fdelete(''delfile'');'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &sysuserid could create (but not delete) &dcpath/permTest.txt )'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to write to &dcpath)'; put ')'; put 'data _null_;'; put 'pgm="&_program";'; put 'rootlen=length(trim(pgm))-length("/services/admin/makelib");'; put 'root=substr(pgm,1,rootlen);'; put 'putlog root=;'; put 'call symputx(''deploy_dir'',root);'; put 'run;'; put 'options noquotelenmax ps=max;'; put '/* check we have the admin rights to update the items in the Admin folder */'; put '%mm_createdocument(tree=&deploy_dir/services/admin,name=permTest)'; put '%mm_deletedocument(target=&deploy_dir/services/admin/permTest)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &_metaperson does not have WriteMetadata on SAS folder:'; put '&deploy_dir )'; put ')'; put '/**'; put '* Create library and load data'; put '*/'; put '%let mpelibname=Data Controller (&dclib);'; put '%mm_createlibrary('; put 'libname=&mpelibname'; put ',libref=&dclib'; put ',libdesc=Configuration tables for the MacroPeople Data Controller application'; put ',engine=BASE'; put ',tree=&deploy_dir/data'; put ',servercontext=SASApp'; put ',directory=&dcpath'; put ',mDebug=1)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to create &dclib library)'; put ')'; put '/* get direct libref */'; put '%dc_assignlib(READ,&dclib)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &dclib library)'; put ')'; put '/* create an initial settings service (this will be overwritten in the'; put 'data update step)'; put '*/'; put '%let temploc=&work/temp.txt;'; put 'data _null_;'; put 'file "&temploc" ;'; put 'put ''/* Data Controller Precode */'' / / ;'; put 'put '' '';'; put 'put ''options noquotelenmax ps=max;'';'; put 'put ''%global DC_LIBREF DC_LIBNAME;'';'; put 'put '' '';'; put 'put ''/* This metadata library (libref) contains control datasets for DC */'';'; put 'put ''/* If a different libref must be used, configure it below */'';'; put 'put ''%let DC_LIBREF='' "&dclib;";'; put 'put ''%let DC_LIBNAME='' "&mpelibname;";'; put 'put '' '';'; put 'put ''/* get physical path for direct libname - needed to track requests */'';'; put 'put ''data _null_;'';'; put 'put '' length lib_uri up_uri path $256;'';'; put 'put '' call missing (of _all_);'';'; put 'put '' rc=metadata_getnobj("omsobj:SASLibrary?@Libref=''''&dc_libref''''",1,lib_uri);'';'; put 'put '' rc=metadata_getnasn(lib_uri,"UsingPackages",1,up_uri);'';'; put 'put '' rc=metadata_getattr(up_uri,"DirectoryName",path);'';'; put 'put '' call symputx("dc_libloc",path);'';'; put 'put ''run;'';'; put 'put ''libname &DC_LIBREF "&dc_libloc";'';'; put 'put '' '';'; put 'run;'; put '%mm_deletestp(target=&deploy_dir/services/public/Data_Controller_Settings)'; put '%mm_createstp(stpname=Data_Controller_Settings'; put ',filename=temp.txt'; put ',directory=&work'; put ',tree=&deploy_dir/services/public'; put ',Server=SASApp'; put ',stptype=2'; put ',mdebug=1'; put ',stpdesc=Data Controller Configuration'; put ',minify=NO)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue creating settings stp)'; put ')'; put 'data _null_;'; put 'file _webout;'; put 'put "

Library &dclib successfully assigned

";'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshcatalog; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table statuslibs as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshcatalog.sas'; put '@brief Refreshes the library data catalog'; put '@details A library may be passed in a LIBREF url param.'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li dc_refreshcatalog.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref;'; put '%mpeinit()'; put '%dc_refreshcatalog(&libref)'; put 'data _null_;'; put 'file _webout;'; put 'put ''

Catalog Refresh Complete

'';'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshlibs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibs.sas'; put '@brief Refreshes the library data catalog'; put '@details'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li mpe_refreshlibs.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_refreshlibs()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshtablelineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshtablelineage.sas'; put '@brief updates the table level lineage'; put '@details extracts all sources/targets from every job'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getuniquefileref.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* get list of libraries */'; put '%let fileref1=%mf_getuniquefileref();'; put 'filename &fileref1 temp;'; put 'proc metadata in='; put '"$METAREPOSITORY'; put 'JobSAS'; put ''; put '8452'; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put ''; put '"'; put 'out=&fileref1'; put ';'; put 'run;'; put '/* create an XML map and extract dependencies from response */'; put '%macro getTables(type=);'; put '%local x;'; put '%do x=1 %to 2;'; put '%local dir;'; put '%if &x=1 %then %let dir=Source;'; put '%else %let dir=Target;'; put '%local y;'; put '%do y=1 %to 3;'; put '%local maptype;'; put '%if &y=1 %then %let maptype=ClassifierMap;'; put '%else %if &y=2 %then %let maptype=Select;'; put '%else %if &y=3 %then %let maptype=Join;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "";'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities/TransformationActivi"@;'; put 'put "ty/Steps/TransformationStep/Transformations/&maptype/Classifier"@;'; put 'put "&dir.s/&type";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/@Name";'; put 'put "characterstring128";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations"@;'; put 'put "/&maptype/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put "";'; put 'put "/GetMetadataObjects/Objects/Job/JobActivities"@;'; put 'put "/TransformationActivity/Steps/TransformationStep/Transformations/"@;'; put 'put "&maptype/Classifier&dir.s/&type/@Id";'; put 'put "characterstring17";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=&fileref1 xmlmap=sxlemap;'; put 'data work.&dir.&type/view=work.&dir.&type;'; put 'set _xml_.&dir.&type;'; put 'length tabletype maptype $16 tabledirection $1;'; put 'jobname=upcase(jobname);'; put 'tabletype="&type";'; put 'maptype="&maptype";'; put 'if "&dir"="Source" then tabledirection="R";'; put 'else tabledirection=''F'';'; put 'run;'; put 'proc append base=work.alldata data=work.&dir.&type;'; put 'run;'; put 'libname _XML_ clear;'; put '%end;'; put '%end;'; put '%mend getTables;'; put '/* list of types:'; put 'https://support.sas.com/documentation/cdl/en/omamodref/63903/HTML/default/viewer.htm#classifiermap.htm'; put '*/'; put '%getTables(type=PhysicalTable)'; put '%getTables(type=ExternalTable)'; put '%getTables(type=QueryTable)'; put '%getTables(type=RelationalTable)'; put '%getTables(type=Report)'; put '%getTables(type=Cube)'; put '%getTables(type=DataTable)'; put '/* remove dups and get tables */'; put 'proc sort data=work.alldata(keep=jobid jobname tableid tabletype tabledirection)'; put 'out=work.sorted nodupkey;'; put 'by _all_;'; put 'run;'; put 'proc sort data=work.sorted(keep=tableid) out=work.tables nodupkey;'; put 'by tableid;'; put 'run;'; put '/* this bit is slow due to lookups but given the different table types'; put 'it was the easiest approach */'; put 'data work.tables2;'; put 'length tablename liburi puri $64 libref schemaname $8 ;'; put 'if _n_=1 then call missing(tablename, liburi, puri, libref, schemaname);'; put 'set work.tables;'; put 'drop rc liburi;'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc= metadata_getattr(liburi, "SchemaName", SchemaName);'; put 'if ^missing(SchemaName) then do;'; put 'if metadata_getnasn(liburi,"UsedByPackages",1,puri)>0 then do;'; put 'rc=metadata_getattr(puri,"Libref",libref);'; put 'end;'; put 'end;'; put 'else rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'tablename=upcase(tablename);'; put 'run;'; put 'proc sql;'; put 'create table work.augmented as'; put 'select a.*'; put ',b.tablename'; put ',b.libref'; put 'from work.sorted a'; put 'left join work.tables2 b'; put 'on a.tableid=b.tableid;'; put 'create table work.mpe_lineage_tabs as'; put 'select distinct'; put 'coalesce(a.jobid,b.jobid) as jobid,'; put 'coalesce(a.jobname,b.jobname) as jobname,'; put 'coalesce(a.tableid,"N/A") as srctableid,'; put 'a.tabletype as srctabletype,'; put 'a.tablename as srctablename,'; put 'coalesce(a.libref,''nolib'') as srclibref,'; put 'coalesce(b.tableid,"N/A") as tgttableid,'; put 'b.tabletype as tgttabletype,'; put 'b.tablename as tgttablename,'; put 'coalesce(b.libref,''nolib'') as tgtlibref'; put 'from work.augmented(where=(tabledirection=''R'')) a'; put 'full join work.augmented(where=(tabledirection=''F'')) b'; put 'on a.jobid=b.jobid'; put ';'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=MPE_LINEAGE_TABS'; put ',append_dsn=MPE_LINEAGE_TABS'; put ',PK=jobid srctableid tgttableid'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%mp_binarycopy(inref=&fileref1, outref=_webout)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registerkey; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Register a new licence key'; put '@details'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@li bitemporal_dataloader.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '@test'; put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json'; put 'sasjs request admin/registerkey -d in.json'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%global admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from groups where groupname="&mpeadmins";'; put '%mp_abort(iftrue= (&admin_check = 0)'; put ',mac=%str(&_program)'; put ',msg=%str(Only members of &mpeadmins may register a key)'; put ')'; put '%global licencekey activation_key;'; put 'data _null_;'; put 'set work.keyupload;'; put 'call symputx(''activation_key'',activation_key);'; put 'call symputx(''licencekey'',licence_key);'; put 'call symputx(''activlen'',length(activation_key));'; put 'call symputx(''liclen'',length(licence_key));'; put 'run;'; put '%mp_abort(iftrue= (&activlen< 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid activation_key)'; put ')'; put '%mp_abort(iftrue= (&liclen < 10)'; put ',mac=%str(&_program)'; put ',msg=%str(Invalid licencekey)'; put ')'; put 'data work.loadme;'; put 'if 0 then set &mpelib..mpe_config;'; put 'VAR_SCOPE=''DC'';'; put 'VAR_NAME=''DC_ACTIVATION_KEY'';'; put 'VAR_VALUE=symget(''activation_key'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'VAR_NAME=''DC_LICENCE_KEY'';'; put 'VAR_VALUE=symget(''licencekey'');'; put 'VAR_ACTIVE=1;'; put 'output;'; put 'keep VAR_: ;'; put 'run;'; put '%bitemporal_dataloader('; put 'tech_from=tx_from'; put ',tech_to = tx_to'; put ',base_lib=&mpelib'; put ',base_dsn=mpe_config'; put ',append_lib=WORK'; put ',append_dsn=loadme'; put ',PK= VAR_SCOPE VAR_NAME'; put ',ETLSOURCE=%str(&_program STP)'; put ',LOADTYPE=TXTEMPORAL'; put ',dclib=&mpelib'; put ')'; put 'data work.return;'; put 'msg=''SUCCESS'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,return)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/approvers; %let service=getapprovals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getapprovals.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* determine users group membership */'; put '%let user=%mf_getuser();'; put '%mpe_getgroups(user=&user,outds=work.groups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',submit_status_cd as REVIEW_STATUS_ID'; put ',SUBMITTED_BY_NM'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1'; put ',submitted_on_dttm as SUBMITTED_ON_DTTM2'; put ',submitted_reason_txt'; put ',num_of_approvals_required'; put ',num_of_approvals_remaining'; put ',base_lib as libref'; put ',base_ds as dsn'; put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))'; put '/* filter out any submits for which approval is already made */'; put 'where table_id not in ('; put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"'; put ');'; put '%macro getapprovals();'; put '%local admin_check;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in ('; put 'select sas_group from &mpelib..mpe_security'; put 'where libref=''*ALL*'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and access_level in (''APPROVE'')'; put ');'; put '%if &admin_check >0 %then %do;'; put 'create table fromSAS as'; put 'select distinct * from out1'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%else %do;'; put 'create table fromSAS as'; put 'select distinct a.*'; put 'from out1 a'; put 'inner join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL =''APPROVE'''; put 'and b.SAS_GROUP in (select groupname from work.groups)'; put 'order by SUBMITTED_ON_DTTM2 desc;'; put '%end;'; put '%mend getapprovals;'; put '%getapprovals()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=gethistory; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Returns the list of previously approved / rejected items.'; put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and'; put 'filtered according to the groups in MPE_SECURITY (unless the user is in the'; put 'DC admin group).'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '

Service Inputs

'; put '
BROWSERPARAMS
'; put 'The following variables MAY be provided from frontend (HIST can also be set'; put 'in MPE_CONFIG):'; put '@li HIST - number of records to return'; put '@li STARTROW - the starting row (default is 1)'; put '

Service Outputs

'; put '
FROMSAS
'; put 'This table is returned, starting from &STARTROW for &HIST rows (ordered'; put 'descending on SUBMITTED datetime)'; put '@li TABLE_ID'; put '@li BASE_TABLE'; put '@li SUBMITTED'; put '@li SUBMITTED_REASON_TXT'; put '@li SUBMITTER'; put '@li REVIEWED'; put '@li STATUS'; put '@li REVIEWED_ON_DTTM'; put '@li APPROVER'; put '
HISTPARAMS
'; put '@li HIST - rows returned'; put '@li STARTROW - starting row used'; put '@li NOBS - Number of observations (rows) available'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* hard coded HIST value */'; put '%let hist=40;'; put '%let startrow=1;'; put '/* load parameters from frontend (HIST and STARTROW) */'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC_REVIEW"'; put 'and var_name=''HISTORY_ROWS'''; put 'and &dc_dttmtfmt. lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(''hist'',var_value,''G'');'; put 'putlog ''mpe_config: '' var_name "=" var_value;'; put 'run;'; put '/* load parameters (override HIST again if provided) */'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put '/* determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* check to see if the user is an admin, or has *ALL* access rights */'; put '%let authcheck=0;'; put 'proc sql noprint;'; put 'create table work.authcheck'; put 'as select *'; put 'from usergroups'; put 'where upcase(groupname)="%upcase(&mpeadmins)"'; put 'or upcase(groupname) in ('; put 'select upcase(sas_group) from &mpelib..mpe_security'; put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to'; put ');'; put 'select count(*) into: authcheck from &syslast;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after auth check)'; put ')'; put '/* now get the previous &hist records from mpe_submit */'; put 'proc sql;'; put 'create view work.submits as'; put 'select distinct a.TABLE_ID'; put ',cats(a.base_lib,''.'',a.base_ds) as base_table'; put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted'; put ',a.submitted_reason_txt'; put ',a.submitted_by_nm as submitter'; put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED'; put ',a.submit_status_cd as status'; put ',a.reviewed_on_dttm'; put ',a.reviewed_by_nm as approver'; put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a'; put '%macro gethistory();'; put '%if &authcheck=0 %then %do;'; put '/* filter for allowed items */'; put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.base_lib=b.libref'; put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')'; put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)'; put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')'; put '%end;'; put '%mend gethistory;'; put '%gethistory()'; put 'order by a.submitted_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after fetching submits)'; put ')'; put 'data work.fromsas;'; put 'set work.submits;'; put 'if _n_ ge &startrow;'; put 'n+1;'; put 'if n>&hist then stop;'; put 'drop n;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.submits;'; put 'data work.histparams;'; put 'hist=&hist;'; put 'startrow=&startrow;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(OBJ,histparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=rejection; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Removes a staged data package from approval screen'; put '@details'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_getvars.sas'; put '@li removecolsfromwork.sas'; put '

Service Outputs

'; put '
fromsas
'; put '@li TABLE_ID'; put '@li SUBMITTED_REASON_TXT'; put '@li RESPONSE'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global STP_ACTION TABLE STP_REASON;'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams)'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '/* get current status and base table */'; put 'data _null_;'; put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));'; put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));'; put 'call symputx(''submit_status_cd'',submit_status_cd);'; put 'run;'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: base_table)'; put ')'; put '%mp_abort('; put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))'; put ',mac=&_program'; put ',msg=%str(&table is already rejected!)'; put ')'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=&_program'; put ',msg=%str(Issue on setup)'; put ')'; put '/**'; put '* determine if user is authorised to reject table'; put '*/'; put '%let user=%mf_getuser();'; put '%global authcheck; %let authcheck=0;'; put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%mp_abort(iftrue= (&authcheck=0)'; put ',mac=&_program..sas'; put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not'; put 'in the &mpeadmins group)'; put ')'; put '/* update the control table to show table as rejected (and why) */'; put '%let now=%sysfunc(datetime());'; put 'data work.reject;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&table";'; put 'BASE_TABLE="&base_table";'; put 'REVIEW_STATUS_ID="REJECTED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&now;'; put 'REVIEW_REASON_TXT=symget(''STP_REASON'');'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.reject;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''REJECTED'','; put 'num_of_approvals_remaining=0,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&now'; put 'where table_id="&table";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc AFTER update...)'; put ')'; put '%mpe_alerts(alert_event=REJECTED'; put ', alert_lib=%scan(&BASE_TABLE,1,.)'; put ', alert_ds=%scan(&BASE_TABLE,2,.)'; put ', dsid=&TABLE'; put ')'; put 'data fromSAS;'; put 'RESPONSE=''SUCCESS!'';'; put 'set REJECT;'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/auditors; %let service=getauditfile; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getauditfile.sas'; put '@brief Downloads a zip file containing audit info.'; put '@details The staging location from the &mpelocapprovals location'; put 'is zipped and returned as a file download. A user can only request the'; put 'audit pack if they have EDIT or APPROVE rights on the target table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_verifymacvars.sas'; put '@li mpe_accesscheck.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mf_getattrn.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'options mprint;'; put '/* security checks */'; put '%let user=%mf_getuser();'; put 'proc sql noprint;'; put 'select cats(base_lib,''.'',base_ds) into: libds'; put 'from &mpelib..mpe_submit'; put 'where table_id="&table";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds table)'; put ')'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=mpestp_audit'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%let table=%unquote(&table);'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);'; put 'data _null_;'; put 'set dirs;'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%nrstr(syscc=&syscc)'; put ')'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdiffs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdiffs.sas'; put '@brief Retrieves the diff file for viewing'; put '@details'; put '

SAS Macros

'; put '@li mpe_getvars.sas'; put '@li mpe_accesscheck.sas'; put '@li mf_getattrn.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(BrowserParams, BrowserParams);'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%macro mpestp_diffs();'; put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put '%then %do;'; put '%mp_abort(msg=%str('; put '&user not authorised to download diffs data for &stp_table)'; put ',mac=mpestp_diffs.sas);'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* stream diffs csv to client */'; put '%mp_streamfile(contenttype=EXCEL'; put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)'; put ',outname=&STP_DIFFS_CSV'; put ')'; put '%mend mpestp_diffs;'; put '%mpestp_diffs()'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getstagetable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getstagetable.sas'; put '@brief Retrieves the actual table that is being sent for update'; put '@details'; put '

SAS Macros

'; put '@li mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table_id=%mf_getvalue(work.iwant,table_id);'; put 'libname loc "&mpelocapprovals/&table_id";'; put 'data stagetable;'; put 'set loc.&table_id;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,stagetable,missing=STRING)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=postdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_loadformat(libcat,libds'; put ',loadtarget=NO'; put ',auditlibds=0'; put ',locklibds=0'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=0'; put ',outds_del=0'; put ',outds_mod=0'; put ',mdebug=0'; put ');'; put '/* set up local macro variables and temporary tables (with a prefix) */'; put '%local err msg prefix dslist i var fmtlist ibufsize;'; put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;'; put '%if &outds_add=0 %then %let dslist=&dslist outds_add;'; put '%if &outds_del=0 %then %let dslist=&dslist outds_del;'; put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;'; put '%let prefix=%substr(%mf_getuniquename(),1,21);'; put '%do i=1 %to %sysfunc(countw(&dslist));'; put '%let var=%scan(&dslist,&i);'; put '%local &var;'; put '%let &var=%upcase(&prefix._&var);'; put '%end;'; put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */'; put '%let libcat=%scan(&libcat,1,-);'; put '/* perform input validations */'; put '%mp_abort('; put 'iftrue=(%mf_existds(&libds)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&libds could not be found)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)'; put ',mac=&sysmacroname'; put ',msg=%str(FMTROW not found in &libds)'; put ')'; put '%let err=0;'; put '%let msg=0;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'value=upcase(value);'; put 'if &mdebug=0 then put name ''='' value;'; put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;'; put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'else if name=''LIBCAT'' then do;'; put 'if exist(value,''CATALOG'') le 0 then do;'; put 'call symputx(''msg'',"Unable to open catalog: "!!value);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'end;'; put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))'; put 'and missing(value) then do;'; put 'call symputx(''msg'',"missing value in var: "!!name);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put 'data _null_;'; put 'set &libds;'; put 'if missing(fmtrow) then do;'; put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);'; put 'call symputx(''err'',1);'; put 'stop;'; put 'end;'; put 'run;'; put '%mp_abort('; put 'iftrue=(&err ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(&msg)'; put ')'; put '%local cnt;'; put 'proc sql noprint;'; put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;'; put '%mp_abort('; put 'iftrue=(&cnt ne %mf_nobs(&libds))'; put ',mac=&sysmacroname'; put ',msg=%str(Non-unique primary key on &libds)'; put ')'; put '/**'; put '* First, extract only relevant formats from the catalog'; put '*/'; put 'proc sql noprint;'; put 'select distinct'; put 'case'; put 'when type=''N'' then upcase(fmtname)'; put 'when type=''C'' then cats(''$'',upcase(fmtname))'; put 'when type=''I'' then cats(''@'',upcase(fmtname))'; put 'when type=''J'' then cats(''@$'',upcase(fmtname))'; put 'else "&sysmacroname:UNHANDLED"'; put 'end'; put 'into: fmtlist separated by '' '''; put 'from &libds;'; put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)'; put '/* get a hash of the row */'; put '%local cvars nvars;'; put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP'; put 'DIG3SEP DATATYPE LANGUAGE;'; put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;'; put 'data &base_fmts/note2err;'; put 'set &base_fmts;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Ensure input table and base_formats have consistent lengths and types'; put '*/'; put 'data &inlibds/nonote2err;'; put 'length &delete_col $3 FMTROW 8 start end label $32767;'; put 'if 0 then set &base_fmts;'; put 'set &libds;'; put 'by type fmtname notsorted;'; put 'if &delete_col='''' then &delete_col=''No'';'; put 'fmtname=upcase(fmtname);'; put 'type=upcase(type);'; put 'if missing(type) then do;'; put 'if substr(fmtname,1,1)=''@'' then do;'; put 'if substr(fmtname,2,1)=''$'' then type=''J'';'; put 'else type=''I'';'; put 'end;'; put 'else do;'; put 'if substr(fmtname,1,1)=''$'' then type=''C'';'; put 'else type=''N'';'; put 'end;'; put 'end;'; put 'if type in (''N'',''I'') then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);'; put 'run;'; put '/**'; put '* Identify new records'; put '*/'; put 'proc sql;'; put 'create table &outds_add(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'left join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtname is null'; put 'and upcase(a.&delete_col) ne "YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify modified records'; put '*/'; put 'create table &outds_mod (drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col) ne "YES"'; put 'and a.fmthash ne b.fmthash'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify deleted records'; put '*/'; put 'create table &outds_del(drop=&delete_col) as'; put 'select a.*'; put 'from &inlibds a'; put 'inner join &base_fmts b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where upcase(a.&delete_col)="YES"'; put 'order by type, fmtname, fmtrow;'; put '/**'; put '* Identify fully deleted formats (where every record is removed)'; put '* These require to be explicitly deleted in proc format'; put '* del1 - identify _partial_ deletes'; put '* del2 - exclude these, and also formats that come with _additions_'; put '*/'; put 'create table &del1 as'; put 'select a.*'; put 'from &base_fmts a'; put 'left join &outds_del b'; put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow'; put 'where b.fmtrow is null;'; put 'create table &del2 as'; put 'select * from &outds_del'; put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)'; put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to load prep)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '/* new records plus base records that are not deleted or modified */'; put 'data &ds1;'; put 'merge &base_fmts(in=base)'; put '&outds_mod(in=mod)'; put '&outds_add(in=add)'; put '&outds_del(in=del);'; put 'if not del and not mod;'; put 'by type fmtname fmtrow;'; put 'run;'; put '/* add back the modified records */'; put 'data &stagedata;'; put 'set &ds1 &outds_mod;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put '%end;'; put '/* mp abort needs to run outside of conditional blocks */'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc prior to actual load)'; put ')'; put '%if &loadtarget=YES %then %do;'; put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;'; put '%put There are no changes to load in &libcat!;'; put '%return;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* prevent parallel updates */'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT commencing format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* do the actual load */'; put 'proc format lib=&libcat cntlin=&stagedata;'; put 'run;'; put '/* apply any full deletes */'; put '%if %mf_nobs(&del2)>0 %then %do;'; put '%local delfmtlist;'; put 'proc sql noprint;'; put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')'; put 'when type=''C'' then cats(fmtname,''.FORMATC'')'; put 'when type=''J'' then cats(fmtname,''.INFMTC'')'; put 'when type=''I'' then cats(fmtname,''.INFMT'')'; put 'else cats(fmtname,''.BADENTRY!!!'') end'; put 'into: delfmtlist'; put 'separated by '' '''; put 'from &del2;'; put 'proc catalog catalog=&libcat;'; put 'delete &delfmtlist;'; put 'quit;'; put '%end;'; put '%if &locklibds ne 0 %then %do;'; put '/* unlock the table */'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&libcat,1,.)'; put ',ds=%scan(&libcat,2,.)-FC'; put ',ref=MP_LOADFORMAT completed format load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '/* track the changes */'; put '%if &auditlibds ne 0 %then %do;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%mp_storediffs(&libcat-FC'; put ',&base_fmts'; put ',TYPE FMTNAME FMTROW'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=&storediffs'; put ',mdebug=&mdebug'; put ')'; put 'proc append base=&auditlibds data=&storediffs;'; put 'run;'; put '%if &locklibds ne 0 %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&auditlibds,1,.)'; put ',ds=%scan(&auditlibds,2,.)'; put ',ref=MP_LOADFORMAT commencing audit table load'; put ',ctl_ds=&locklibds'; put ')'; put '%end;'; put '%end;'; put '%end;'; put '%mp_abort('; put 'iftrue=(&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(SYSCC=&syscc after load)'; put ')'; put '%if &mdebug=0 %then %do;'; put 'proc datasets lib=work;'; put 'delete &prefix:;'; put 'run;'; put '%put &sysmacroname exit vars:;'; put '%put _local_;'; put '%end;'; put '%mend mp_loadformat;'; put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */'; put ',now= %sysfunc(datetime()) /* static processed timestamp */'; put ',etlsource= /* process from whence the data came */'; put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should'; put 'be appended into the target. */'; put ',LOADTARGET=NO /* set to yes to actually load the target */'; put ',CLOSE_VARS= /* provide close vars to override defaults */'; put ',dclib=NOTPROVIDED'; put ',mdebug=0'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%local lib ds nobs;'; put '/**'; put '* if a format catalog (suffix "-FC") we assume the catalog has already been'; put '* created by the calling program with a libds of work.fmtextract'; put '*/'; put '%let orig_lib=%upcase(%scan(&libds,1,.));'; put '%let orig_ds=%upcase(%scan(&libds,2,.));'; put '%let orig_libds=&libds;'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%let lib=WORK;'; put '%let ds=FMTEXTRACT;'; put '%let libds=&lib..&ds;'; put '%end;'; put '%else %do;'; put '%let lib=&orig_lib;'; put '%let ds=&orig_ds;'; put '%end;'; put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)'; put ',mac=&sysmacroname'; put ',msg=%str(dclib=NOTPROVIDED)'; put ')'; put '/* get table attributes */'; put '%let nobs=0;'; put 'data work.sumo_config;'; put 'set &mpelib..mpe_tables;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&orig_lib"'; put 'and dsn="&orig_ds";'; put 'call symputx(''LOADTYPE'',loadtype,''l'');'; put 'call symputx(''BUSKEY'',buskey,''l'');'; put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');'; put 'call symputx(''VAR_TXTO'',var_txto,''l'');'; put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');'; put 'call symputx(''VAR_BUSTO'',var_busto,''l'');'; put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');'; put '%if %length(&CLOSE_VARS)=0 %then %do;'; put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');'; put '%end;'; put 'call symputx(''nobs'',_n_,''l'');'; put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";'; put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');'; put 'put (_all_)(=);'; put 'run;'; put '/* check if table is actually configured to load */'; put '%if &nobs ne 1 %then %do;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="%mf_getuser()"'; put ',STATUS=''FAILED (BAD DS)'''; put ',CSV_DIR=symget(''ETLSOURCE'')'; put ',PROCESSED_DTTM=&now;'; put '%end;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Table not registered in &mpelib..mpe_tables)'; put ')'; put '%mp_abort(iftrue= (&nobs>1)'; put ',mac=&sysmacroname'; put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)'; put ')'; put '%if &LOADTYPE=TXTEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=&ETLSOURCE'; put ',LOADTYPE=&loadtype'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=REPLACE %then %do;'; put '%if &LOADTARGET=YES %then %do;'; put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put 'data WORK.&STAGING_DS;'; put 'set WORK.&STAGING_DS;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put '&VAR_PROCESSED = &now;'; put '%end;'; put 'drop _____DELETE__THIS__RECORD_____;'; put 'run;'; put 'proc sql; delete * from &libds;'; put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;'; put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)'; put '%end;'; put '%else %do;'; put '/* is full replace so treat all staged records as new in diff screen */'; put 'data work.outds_mod work.outds_add ;'; put 'set work.&staging_ds;'; put 'output work.outds_add;'; put 'run;'; put '/* previous table will be considered fully deleted */'; put 'data work.outds_del;'; put 'set &lib..&ds;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '%bitemporal_dataloader(bus_from=,bus_to='; put ',tech_from= ,tech_to = /* explicitly empty*/'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=UPDATE'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %if &loadtype=FORMAT_CAT %then %do;'; put '/**'; put '* run mp_formatload'; put '* inputs:'; put '* - LOADTARGET'; put '* - CATALOG'; put '* - STAGEDATA'; put '* - LOADAUDIT'; put '* outputs:'; put '* work.outds_add'; put '* work.outds_del'; put '* work.outds_mod'; put '*/'; put '%mp_loadformat(&orig_libds'; put ',&staging_ds'; put ',loadtarget=&LOADTARGET'; put ',auditlibds=&AUDIT_LIBDS'; put ',locklibds=&dclib..mpe_lockanytable'; put ',delete_col=_____DELETE__THIS__RECORD_____'; put ',outds_add=outds_add'; put ',outds_del=outds_del'; put ',outds_mod=outds_mod'; put ',mdebug=&mdebug'; put ')'; put '%end;'; put '%else %if &loadtype=BITEMPORAL %then %do;'; put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO'; put ',tech_from=&VAR_TXFROM'; put ',tech_to = &VAR_TXTO'; put ',base_lib=&lib'; put ',base_dsn=&ds'; put ',append_lib=WORK'; put ',append_dsn=&STAGING_DS'; put ',high_date=''31DEC9999:23:59:59''dt'; put ',PK= &buskey'; put ',ETLSOURCE=%superq(etlsource)'; put ',LOADTYPE=BITEMPORAL'; put ',RK_UNDERLYING=&RK_UNDERLYING'; put ',LOADTARGET=&LOADTARGET'; put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET'; put ',CLOSE_VARS=&CLOSE_VARS'; put ',processed=&VAR_PROCESSED'; put ',dclib=&dclib'; put ',outds_audit=&AUDIT_LIBDS'; put ')'; put '%end;'; put '%else %do;'; put '%put WARNING: LOADTYPE &LOADTYPE not supported;'; put '%let syscc=4;'; put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)'; put ')'; put '%mend mpe_targetloader;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);'; put '%local x;'; put '%if ( %length(&prefix) gt 7 ) %then %do;'; put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;'; put '0'; put '%return;'; put '%end;'; put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;'; put '%put %str(ERR)OR: Invalid prefix (&prefix);'; put '0'; put '%return;'; put '%end;'; put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */'; put '%let maxtries=%eval(10**(8-%length(&prefix))-1);'; put '%do x = 0 %to &maxtries;'; put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;'; put '&prefix&x'; put '%return;'; put '%end;'; put '%let x = %eval(&x + 1);'; put '%end;'; put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;'; put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;'; put '0'; put '%mend mf_getuniquelibref;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file postdata.sas'; put '@brief Either returns the file diffs or actually loads the data to target'; put '@details Before loading the target, a check is made against the time the'; put 'target was last updated (backend) and the time the DIFF was generated'; put '(frontend). If the target was updated whilst the DIFF was on the screen,'; put 'then the provided diff may have been incorrect and so a new DIFF should be'; put 'generated and approved before load.'; put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|'; put '|---|---|---|'; put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|'; put '

SAS Macros

'; put '@li bitemporal_dataloader.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getengine.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuniquelibref.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_lockanytable.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_alerts.sas'; put '@li mpe_runhook.sas'; put '@li mpe_targetloader.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '/* this could be a config setting if required */'; put '%let maxdiff=100;'; put '%mpeinit()'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''ACTION'',ACTION);'; put 'call symputx(''LOAD_REF'',TABLE);'; put '/* DIFFTIME is when the DIFF was generated on the frontend */'; put 'call symputx(''DIFFTIME'',DIFFTIME);'; put 'run;'; put '%global action is_err err_msg msg;'; put '%let is_err=0;'; put '%let user=%mf_getuser();'; put '%let sastime=%sysfunc(datetime());'; put 'data sastime;'; put 'dt_sastime=&sastime;'; put 'run;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */'; put '/* so we share much of the logic from the actual load process */'; put '%let isfmtcat=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit;'; put 'where TABLE_ID="&LOAD_REF";'; put '/* fetch mpe_submit data */'; put 'libds=cats(base_lib,''.'',base_ds);'; put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);'; put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);'; put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);'; put '/* other stuff that''s useful to do in data step */'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''libds'',libds);'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''isfmtcat'',1);'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* convert provided string DIFFTIME back to a numeric SAS datetime */'; put 'if "&action" ne "SHOW_DIFFS" then do;'; put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));'; put 'end;'; put 'length difftime $32;'; put 'DIFFTIME=put(&sastime,datetime19.2);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&isfmtcat=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: difftime orig_libds libds load_ref)'; put ')'; put '/* security checks */'; put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)'; put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc Before entering postdata macro)'; put ')'; put '%mp_abort('; put 'iftrue=('; put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0'; put ')'; put ',mac=&_program'; put ',msg=%str(&user not authorised to view approval screen for &orig_libds)'; put ')'; put '%macro quickmacro(inds,outds);'; put 'data &outds ;'; put '%if %length(&VAR_BUSFROM)>0 %then %do;'; put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;'; put '%end;'; put 'if 0 then set &emptybasetable;'; put 'set &inds;'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;'; put 'drop _____DELETE__THIS__RECORD_____;'; put '%end;'; put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put '%mend quickmacro;'; put '%macro postdata();'; put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)'; put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then'; put '%do;'; put 'data params; set approve1; run;'; put '%webout(OPEN)'; put '%webout(OBJ,PARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if &action=APPROVE_TABLE %then %do;'; put '/* check user is authorised to approve table */'; put '/* user could be an editor but not an approver */'; put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)'; put ',mac=&_program'; put ',msg=%str(&user may not APPROVE changes)'; put ')'; put '/* see if this user has already submitted an approval */'; put '%let prev_upload_check=1;'; put 'proc sql;'; put 'select count(*) into: prev_upload_check from &mpelib..mpe_review'; put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"'; put 'and REVIEW_STATUS_ID ne "SUBMITTED";'; put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);'; put '%if &authcheck=0 or &prev_upload_check=1 %then %do;'; put '%put WARNING: authcheck=&authcheck prev_upload_check=&prev_upload_check;'; put 'data apPARAMS;'; put 'AUTHORISED=&authcheck;'; put 'PREV_UPLOAD_CHECK=&prev_upload_check;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '/* now check if table has been updated since DIFF screen shown */'; put '%local fmt_tm usernm last_load etlsource;'; put '%let last_load=0;'; put 'proc sql noprint;'; put 'select max(processed_dttm) format=16.2 into: last_load'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";'; put 'select processed_dttm format=datetime19., user_nm, etlsource'; put 'into: fmt_tm, :usernm, :etlsource'; put 'from &mpelib..mpe_dataloads'; put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"'; put 'and processed_dttm=&last_load;'; put '%put TIMECHECK: &last_load>&difftime;'; put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;'; put '%let is_err=1;'; put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource'; put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;'; put '%return;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc before logchange;'; put '%return;'; put '%end;'; put '/* upload about to commence so ensure logs */'; put 'options notes mprint source2;'; put '%local oldloc;'; put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;'; put '%else %let oldloc=%qsysfunc(getoption(LOG));'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put 'data _null_;'; put 'if _n_=1 then do;'; put 'length oldloc $1000;'; put 'oldloc=symget(''oldloc'');'; put 'putlog "****** redirected:" oldloc " *****";'; put 'end;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc printto'; put 'log="&mpelocapprovals/&LOAD_REF/approval.log";'; put 'run;'; put '%end;'; put '%if &syscc ne 0 %then %do;'; put '%let is_err=1;'; put '%let err_msg=syscc=&syscc after logchange;'; put '%return;'; put '%end;'; put '%end;'; put '/**'; put '* upload the actual table'; put '*/'; put '%local libref ds;'; put '%let libref=%scan(&orig_libds,1,.);'; put '%let ds=%scan(&orig_libds,2,.);'; put 'proc sql noprint;'; put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto'; put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO'; put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)'; put ',VAR_PROCESSED'; put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto'; put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO'; put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT'; put ',:VAR_PROCESSED'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="&libref"'; put 'and dsn="&ds";'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals orig_libds)'; put ')'; put '/* get dataset from approvals location (has same name as load_ref) */'; put '%let tmplib=%mf_getuniquelibref();'; put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";'; put 'data STAGING_DS;'; put 'set &tmplib..&LOAD_REF;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc before preapprove)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */'; put '%mpe_runhook(PRE_APPROVE_HOOK)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after preapprove)'; put ')'; put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'data apReqd;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apReqd);'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering TARGETLOADER)'; put ')'; put '%mpe_targetloader(libds=&orig_libds'; put ',now= &sastime'; put ',etlsource=&LOAD_REF'; put ',STAGING_DS=STAGING_DS'; put ',dclib=&mpelib'; put '%if &action=APPROVE_TABLE %then %do;'; put ',LOADTARGET=YES'; put '%end;'; put '%else %do;'; put ',LOADTARGET=NO'; put '%end;'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;'; put '/* empty dataset! */'; put 'data out;'; put 'set STAGING_DS;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc entering SHOWDIFFS)'; put ')'; put '%if &action=SHOW_DIFFS %then %do;'; put '/**'; put '* Now prepare the SHOW DIFFS (approve) screen'; put '*/'; put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first'; put 'need to find out what version TIME to query it for.. */'; put 'proc sql noprint;'; put 'select max(processed_dttm)-1 format=datetime19. into: tstamp'; put 'from &mpelib..mpe_dataloads'; put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";'; put 'quit;'; put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);'; put '/**'; put '* now create the DIFFS dataset'; put '* If using a database, then utilise pass through!'; put '* Create a temporary table inside the database for joins..'; put '*/'; put 'options mprint;'; put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));'; put '%put &libds engine type = &engine_type;'; put '%local inner_table ;'; put '%if &engine_type=OLEDB %then %do;'; put '/* generate a unique ID for the temporary table */'; put 'data _null_;'; put 'call symputx(''UNIQUE_REF'''; put ',cats(round(datetime(),1)'; put ',''_'''; put ',round(ranuni(0)*100000,1)'; put ')'; put ',''l'''; put ');'; put 'run;'; put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;'; put 'proc sql;'; put 'create table &inner_table as'; put 'select * from work.outds_mod;'; put '%end;'; put '%else %let inner_table=work.outds_mod;'; put 'proc sql;'; put 'create view work.originals2 as'; put 'select b.*'; put 'from &inner_table a'; put 'inner join &libds'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '(where=("&tstamp"dt < &VAR_TXTO))'; put '%end;'; put 'b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&buskey));'; put '%let idx_val=%scan(&buskey,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'create view bitemp5c_updates2 as'; put 'select * from work.outds_mod'; put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)'; put ';'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'options varlenchk=nowarn; /* for small numerics (<8) */'; put '%quickmacro(work.outds_del,deleted)'; put '%quickmacro(work.outds_add,new)'; put '%quickmacro(bitemp5c_updates2,updates)'; put '%quickmacro(originals2,originals)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc in quickmacro)'; put ')'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=work.updates'; put 'out=cols (keep=name type length varnum format);'; put 'run;'; put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;'; put 'data cols; set cols; name=upcase(name);run;'; put '%let tempDIFFS_CSV=tempDiffs_%trim('; put '%sysfunc(datetime(),flatdate.)).csv;'; put '/**'; put '* Store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '*/'; put 'data TEMPDIFFS (compress=no) /* for realistic file size */;'; put 'length _____status $10;'; put 'set work.deleted (in=_____del)'; put 'work.new(in=_____new)'; put 'work.updates (in=_____upd)'; put 'work.originals2 (in=_____orig);'; put 'if _____del then _____status=''DELETED '';'; put 'else if _____new then _____status=''NEW'';'; put 'else if _____upd then _____status=''UPDATED'';'; put 'else if _____orig then _____status=''ORIGINAL'';'; put 'run;'; put 'proc export data=TEMPDIFFS dbms=csv replace'; put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;'; put 'run;'; put 'proc sql noprint;'; put 'select filesize format=sizekmg10.1, filesize as filesize_raw'; put 'into: filesize,:filesize_raw'; put 'from dictionary.tables'; put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';'; put 'data params;'; put 'set approve1;'; put 'DIFFS_CSV="&tempDIFFS_CSV";'; put 'FILESIZE="&filesize";'; put 'FILESIZE_RAW=&filesize_raw;'; put 'if %mf_nobs(work.originals)>&maxdiff'; put 'or %mf_nobs(work.new)>&maxdiff'; put 'or %mf_nobs(work.deleted)>&maxdiff'; put 'or %mf_nobs(work.updates)>&maxdiff'; put 'then TRUNCATED="YES";'; put 'else TRUNCATED="NO";'; put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);'; put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);'; put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);'; put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);'; put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;'; put 'ISAPPROVER=''YES'';'; put '%end;'; put '%else %do;'; put 'ISAPPROVER=''NO'';'; put '%end;'; put 'run;'; put '/*'; put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.'; put '* To ensure consistency in the DIFF screen, we should apply the same formats'; put '* to the base table. Limit rows at the same time.'; put '*/'; put 'data work.originals;'; put 'if 0 then set deleted new updates;'; put 'set work.originals;'; put 'if _n_>&maxdiff then stop;'; put 'run;'; put '/* get additional submits against the same base table */'; put 'proc sort data=&mpelib..mpe_submit(where=('; put 'submit_status_cd=''SUBMITTED'''; put 'and cats(base_lib,''.'',base_ds)="&orig_libds"'; put 'and table_id ne "&LOAD_REF"'; put ')) out=submits;'; put 'by descending submitted_on_dttm;'; put 'run;'; put '/* filter last 10 */'; put 'data submits;'; put 'set submits;'; put 'if _n_>10 then stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,params)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,submits)'; put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)'; put '/* need same for formatted view */'; put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)'; put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)'; put '%webout(CLOSE)'; put '%if &engine_type=OLEDB %then %do;'; put 'proc sql; /* needs to be dropped AFTER view execution */'; put 'drop table &inner_table;'; put '%end;'; put '%return;'; put '%end;'; put '%if &action=APPROVE_TABLE %then %do;'; put '%approve:'; put '/**'; put '* store temp tables so we have a record of diffs'; put '* do not change this libname or table name as it is used in some'; put '* post approve hooks'; put '* for REPLACE loads, temp tables not made, so make them'; put '*/'; put '%if &LOADTYPE=REPLACE %then %do;'; put 'data work.outds_add; run;'; put 'data work.outds_mod; run;'; put 'data work.outds_del; run;'; put '%end;'; put 'libname approve "&mpelocapprovals/&LOAD_REF";'; put 'data; set &libds;stop;run;'; put '%let emptybasetable=&syslast;'; put 'data approve.ActualDiffs;'; put 'length _____STATUS_____ $10;'; put 'if 0 then set &emptybasetable;'; put 'set work.outds_del (in=_____del)'; put 'work.outds_add (in=_____new)'; put 'work.outds_mod (in=_____upd);'; put 'if _____del then _____STATUS_____=''DELETED'';'; put 'else if _____new then _____STATUS_____=''NEW'';'; put 'else if _____upd then _____STATUS_____=''UPDATED'';'; put '%if %mf_existvar(&libds,&var_txfrom) %then %do;'; put 'drop &var_txfrom &var_txto;'; put '%end;'; put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;'; put 'drop &VAR_PROCESSED;'; put '%end;'; put 'run;'; put 'proc export data=approve.ActualDiffs'; put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control table to show table as approved */'; put '/* append to mpe_review table */'; put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);'; put 'data work.append_review;'; put 'if 0 then set &mpelib..mpe_review;'; put 'TABLE_ID="&LOAD_REF";'; put 'BASE_TABLE="&orig_libds";'; put 'REVIEW_STATUS_ID="APPROVED";'; put 'REVIEWED_BY_NM="&user";'; put 'REVIEWED_ON_DTTM=&sastime;'; put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base=&mpelib..mpe_review data=work.append_review;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_review,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* update mpe_submit table */'; put '%mp_lockanytable(LOCK,'; put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc sql;'; put 'update &mpelib..mpe_submit'; put 'set submit_status_cd=''APPROVED'','; put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,'; put 'reviewed_by_nm="&user",'; put 'reviewed_on_dttm=&sastime'; put 'where table_id="&LOAD_REF";'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* run post-approve hook */'; put '%mpe_runhook(POST_APPROVE_HOOK)'; put 'data apPARAMS;'; put 'AUTHORISED=1;'; put 'ALREADY_UPDATED=0;'; put 'ALREADY_UPDATED_DTTM=.;'; put 'DIFFTIME="&difftime";'; put 'if &syscc=0 then RESPONSE=''SUCCESS!'';'; put 'else response="SYSCC=&syscc.";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program 582'; put ',msg=%superq(msg)'; put ')'; put '%mpe_alerts(alert_event=APPROVED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&LOAD_REF'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,apPARAMS)'; put '%webout(CLOSE)'; put '%return;'; put '%end;'; put '%mend postdata;'; put '%postdata()'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort(iftrue= (&is_err=1)'; put ',mac=&_program'; put ',msg=%superq(err_msg)'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/editors; %let service=getdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mpe_getlabels(type,source,outds=mpe_getlabels);'; put '%local tmpds;'; put '%if &type=COLUMNS %then %do;'; put '%let tmpds=%mf_getuniquename();'; put 'proc contents noprint data=&source'; put 'out=&tmpds(keep=name memlabel label);'; put 'run;'; put 'proc sql ;'; put 'create table &outds as'; put 'select upcase(a.name) as name'; put ',a.memlabel'; put ',coalesce(b.dd_shortdesc,a.label) as desc'; put ',b.dd_longdesc as longdesc'; put 'from &tmpds a'; put 'left join &mpelib..mpe_datadictionary'; put '(where=(&dc_dttmtfmt. < tx_to'; put 'and dd_source ? %upcase("&source")'; put 'and dd_type=''COLUMN'')) b'; put 'on scan(b.dd_source,-1,''.'')=upcase(a.name);'; put '%end;'; put '%mend mpe_getlabels;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getgroupmembers('; put 'group /* metadata group for which to bring back members */'; put ',outds=work.mm_getgroupmembers /* output dataset to contain the results */'; put ',emails=NO /* set to yes to bring back emails also */'; put ',id=NO /* set to yes if passing an ID rather than group name */'; put ')/*/STORE SOURCE*/;'; put 'data &outds ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'euri email length=$64'; put 'GroupDesc length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp uriMem rcGrp rcMem rc i j arc ;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put '%if &id=NO %then %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Name=''&group''",i,uriGrp);'; put '%end;'; put '%else %do;'; put 'rcGrp=metadata_getnobj("omsobj:IdentityGroup?@Id=''&group''",i,uriGrp);'; put '%end;'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName, MemberType, email);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'if membertype=''User'' and "&emails"=''YES'' then do;'; put 'if metadata_getnasn(uriMem,"EmailAddresses",1,euri)>0 then do;'; put 'arc=metadata_getattr(euri,"Address",email);'; put 'end;'; put 'end;'; put 'output;'; put 'j+1;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_getgroupmembers;'; put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);'; put '%mm_getgroupmembers(&group,outds=&outds)'; put '%mend dc_getgroupmembers;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_length(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_length)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_length(var);'; put 'if var=. then len=0;'; put 'else if missing(var) or trunc(var,3)=var then len=3;'; put 'else if trunc(var,4)=var then len=4;'; put 'else if trunc(var,5)=var then len=5;'; put 'else if trunc(var,6)=var then len=6;'; put 'else if trunc(var,7)=var then len=7;'; put 'else len=8;'; put 'return(len);'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_length;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mp_getmaxvarlengths('; put 'libds'; put ',num2char=NO'; put ',outds=work.mp_getmaxvarlengths'; put ')/*/STORE SOURCE*/;'; put '%local vars prefix x var fmt srcds;'; put '%let vars=%mf_getvarlist(libds=&libds);'; put '%let prefix=%substr(%mf_getuniquename(),1,25);'; put '%let num2char=%upcase(&num2char);'; put '%if &num2char=NO %then %do;'; put '/* compile length function for numeric fields */'; put '%mcf_length(wrap=YES, insert_cmplib=YES)'; put '%end;'; put '%if &num2char=NO'; put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")'; put 'and %mf_getvarcount(&libds,typefilter=N) gt 0'; put '%then %do;'; put '/* custom functions not supported in summary operations */'; put '%let srcds=%mf_getuniquename();'; put 'data &srcds/view=&srcds;'; put 'set &libds;'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if %mf_getvartype(&libds,&var)=N %then %do;'; put '&prefix.&x=mcf_length(&var);'; put '%end;'; put '%end;'; put 'run;'; put '%end;'; put '%else %let srcds=&libds;'; put 'proc sql;'; put 'create table &outds (rename=('; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '&prefix.&x=%scan(&vars,&x)'; put '%end;'; put '))'; put 'as select'; put '%do x=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let var=%scan(&vars,&x);'; put '%if &x>1 %then ,;'; put '%if %mf_getvartype(&libds,&var)=C %then %do;'; put 'max(lengthn(&var)) as &prefix.&x'; put '%end;'; put '%else %if &num2char=YES %then %do;'; put '%let fmt=%mf_getvarformat(&libds,&var);'; put '%put fmt=&fmt;'; put '%if %str(&fmt)=%str() %then %do;'; put 'max(lengthn(cats(&var))) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(lengthn(put(&var,&fmt))) as &prefix.&x'; put '%end;'; put '%end;'; put '%else %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;'; put 'max(&prefix.&x) as &prefix.&x'; put '%end;'; put '%else %do;'; put 'max(mcf_length(&var)) as &prefix.&x'; put '%end;'; put '%end;'; put '%end;'; put 'from &srcds;'; put 'proc transpose data=&outds'; put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));'; put 'run;'; put '%mend mp_getmaxvarlengths;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdata.sas'; put '@brief Returns a dataset to the editor front end'; put '@details'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|'; put '|---|---|'; put '|DC258467.MPE_X_TEST|-1|'; put '

Service Outputs

'; put '
sasdata
'; put '
sasparams
'; put 'Contains info on the request. One row is returned.'; put '@li CLS_FLG - set to 0 if there are no CLS rules (everything should be editable)'; put 'else set to 1 (CLS rules exist)'; put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0'; put '
approvers
'; put '
dqrules
'; put '
dqdata
'; put '
cols
'; put 'Contains column level attributes.'; put '@li NAME - column name'; put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html'; put '@li CLS_RULE - values include:'; put '- EDIT - the column is editable'; put '- READ - the column should be readonly'; put '- HIDE - the column should be hidden'; put '@li memlabel'; put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label'; put '@li longdesc - from MPE_DATADICTIONARY'; put '
maxvarlengths
'; put '
xl_rules
'; put '
query
'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getgroupmembers.sas'; put '@li mf_existvar.sas'; put '@li mf_getattrn.sas'; put '@li mf_getvarlist.sas'; put '@li mf_existds.sas'; put '@li mf_getquotedstr.sas'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_dsmeta.sas'; put '@li mp_getcols.sas'; put '@li mp_getmaxvarlengths.sas'; put '@li mp_validatecol.sas'; put '@li mpe_accesscheck.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_getlabels.sas'; put '@li mpe_filtermaster.sas'; put '@li mpe_runhook.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length filter_rk 8;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put 'call symputx(''orig_libds'',upcase(libds));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: libds filter_rk)'; put ')'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further calls will return col metadata and actual data'; put '*/'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '/**'; put '* First check user has access permission to edit the table'; put '*/'; put '%put checking access;'; put '%let user=%mf_getuser();'; put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)'; put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)'; put ',mac=mpestp_getdata.sas'; put ',msg=&user is not authorised to edit &orig_libds %trim('; put ')in the &mpelib..MPE_SECURITY table'; put ')'; put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)'; put ',mac=mpestp_getdata.sas'; put ',msg=dataset &libds does not exist!!'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at line 60 )'; put ')'; put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype'; put 'sortpk;'; put '%put getting table attributes;'; put 'proc sql noprint;'; put 'select upcase(loadtype)'; put ',var_txfrom,var_txto'; put ',var_busfrom,var_busto'; put ',var_processed,rk_underlying,buskey'; put ',coalesce(rk_underlying,buskey)'; put ',pre_edit_hook'; put ',case when missing(rk_underlying) then buskey else rk_underlying end'; put 'into: loadtype,:var_txfrom,:var_txto'; put ',:var_busfrom ,:var_busto'; put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt TX_TO'; put 'and upcase(dsn)="%scan(&orig_libds,2,.)"'; put 'and upcase(libref)="%scan(&orig_libds,1,.)";'; put '%put preparing filter query:;'; put '%mpe_filtermaster(EDIT,&orig_libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%macro mpestp_getdata();'; put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;'; put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;'; put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;'; put '%put NOTE-;%put NOTE-;'; put '%global DC_MAXOBS_WEBEDIT;'; put '%let DC_MAXOBS_WEBEDIT=500;'; put '%end;'; put '/* for tables which use RKs/SKs then we just expose the business key to'; put 'users - this lets uploads be sent to multiple environments (with'; put 'potentially different RK/SK values for the same business key).'; put 'Note that the config table has the RK column in the buskey field in'; put 'this scenario. */'; put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;'; put '%else %let drop_rk=;'; put '/* always remove the PROCESSED_DTTM column, if it exists */'; put '%if %length(&var_processed)=0 %then %do;'; put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then'; put '%let var_processed=PROCESSED_DTTM;'; put '%end;'; put '/**'; put '* Now get the slice of the actual table'; put '*/'; put 'options obs=10000;'; put '%if &loadtype=BITEMPORAL %then %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'proc sort data=out;'; put 'by &pk &var_busfrom;'; put 'run;'; put 'data out;'; put 'set out;'; put 'by &pk &var_busfrom;'; put 'if last.%scan(&pk,-1);'; put 'run;'; put '%end;'; put '%else %do;'; put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);'; put '_____DELETE__THIS__RECORD_____="No";'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%end;'; put 'options obs=max;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue with filtering (line 165) )'; put ')'; put 'options obs=&DC_MAXOBS_WEBEDIT;'; put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));'; put 'proc sort data=work.out; by &sortPK; run;'; put 'options obs=max;'; put '%mpe_runhook(PRE_EDIT_HOOK)'; put '%let obscnt=%mf_getattrn(work.out,NLOBS);'; put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)'; put ',mac=&_program'; put ',msg=Table is too big (&obscnt rows) - please filter and try again!'; put ')'; put '/* order delete var and pk fields at start of table */'; put '%let sourcevars=%mf_wordsInStr1ButNotStr2('; put 'Str1=%mf_getvarlist(work.out)'; put ',Str2= _____DELETE__THIS__RECORD_____ &pk'; put ');'; put '%put sourcevars=&sourcevars;'; put 'data outdata;'; put '/* delete & pk fields come first */'; put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';'; put '/* keep remaining variable order */'; put '%if %length(&sourcevars)>0 %then %do;'; put 'attrib &sourcevars label='''';'; put '%end;'; put '_____DELETE__THIS__RECORD_____="No ";'; put '%if %mf_nobs(work.out)=0 %then %do;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put '%end;'; put 'set work.out ;'; put 'run;'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=outdata'; put 'out=vars(keep=name type length varnum format: label);'; put 'run;'; put 'proc sort;'; put 'by varnum;'; put 'run;'; put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");'; put 'if type2=2 or type2=6 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''num'';'; put 'end;'; put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))'; put 'then PK=''YES'';'; put 'length ctrlOptions $500;'; put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';'; put 'else ctrlOptions='''';'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n'; put '%superq(syserrortext)'; put ')'; put ')'; put '%global jsdttmvars jsdtvars jstmvars;'; put 'data _null_;'; put 'set vars3 end=last;'; put 'if _n_>1 then comma='','';'; put 'length coltype $500.;'; put 'format=upcase(format);'; put 'coltype=cats(comma,''{"data":"'',name,''"'');'; put 'if ctrlOptions ne '''' then'; put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");'; put 'else if type=''num'' then do;'; put 'if format=:''DATETIME'' or format=:''E8601DT'' then do;'; put 'colType=cats(coltype'; put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat datetimes in javascript format */'; put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'''; put 'then do;'; put '/* see bottom of file for more date formats!! */'; put '/* also when updating, update stagedata.sas and mp_getcols.sas'; put 'and mpe_loader.sas */'; put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"'''; put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/'; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript dates */'; put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);'; put 'end;'; put 'else if format=:''TIME'' or format=:''HHMM'' then do;'; put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"'''; put ','',"correctFormat":"true"}'');'; put '/* build var list to reformat as javascript times */'; put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);'; put 'end;'; put 'else do;'; put '/* is standard numeric but need to ascertain precision */'; put 'retain base ''000000000000000000'';'; put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));'; put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');'; put 'end;'; put 'end;'; put 'else colType=cats(coltype,''}'');'; put 'length concatcoltype $32767;'; put 'retain concatcoltype;'; put 'concatcoltype=cats(concatcoltype,coltype);'; put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s'''; put '(datatype=datetime);'; put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);'; put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);'; put 'RUN;'; put '/* before we send the data, need to rebuild all date & datetime vars as char*/'; put '%let finalvars=%mf_getvarlist(work.outdata);'; put 'data sasdata;'; put '/* set formats & col order ahead of rename+import */'; put 'informat &finalvars ;'; put '/* read dataset and rename date / datetime vars as necessary */'; put 'set outdata'; put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;'; put '(rename=('; put '%local dtvarnum dtvar tmvar;'; put '/* temp datetime vars end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);'; put '&dtvar=_____&dtvarnum._____'; put '%end;'; put '/* temp date vars do not end in _____ */'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan( &jsdtvars,&dtvarnum);'; put '&dtvar=_____&dtvarnum'; put '%end;'; put '/* temp time vars end in ___tm */'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan( &jstmvars,&tmvarnum);'; put '&tmvar=_____&tmvarnum.___tm'; put '%end;'; put '))'; put '%end;'; put ';'; put '%if %length(&jsdttmvars)>0 %then %do ;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));'; put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum._____;'; put '%end;'; put '%end;'; put '%if %length(&jsdtvars)>0 %then %do;'; put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));'; put '%let dtvar=%scan(&jsdtvars,&dtvarnum);'; put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));'; put 'if &dtvar="ERROR" then call missing(&dtvar);'; put 'drop _____&dtvarnum;'; put '%end;'; put '%end;'; put '%if %length(&jstmvars)>0 %then %do;'; put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));'; put '%let tmvar=%scan(&jstmvars,&tmvarnum);'; put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));'; put 'if &tmvar="ERROR" then call missing(&tmvar);'; put 'drop _____&tmvarnum.___tm;'; put '%end;'; put '%end;'; put 'output;'; put 'run;'; put '/* get the relevant approvers for the drop down */'; put '%put getting approvers;'; put '%local sas_groups sas_i sas_group;'; put 'proc sql noprint;'; put 'select distinct sas_Group into: sas_groups separated by "|"'; put 'from &mpelib..mpe_security'; put 'where libref="%scan(&orig_libds,1,.)"'; put 'and dsn="%scan(&orig_libds,2,.)"'; put 'and access_level=''APPROVE'''; put 'and &dc_dttmtfmt. lt TX_TO;'; put '%if %length(&sas_groups)=0 %then %do;'; put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)'; put '%end;'; put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));'; put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));'; put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)'; put 'proc append base=work.access1 data=work.temp&sas_i;run;'; put '%end;'; put '%mend mpestp_getdata;'; put '%mpestp_getdata()'; put '%mp_abort(mode=INCLUDE)'; put '/* extract column level security rules */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata'; put ',mode=EDIT'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.sasdata1'; put ',outmeta=work.cls_rules'; put ')'; put '/* get labels */'; put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc extracting spec info)'; put ')'; put '/* extract col info */'; put '%mp_getcols(&libds, outds=cols1)'; put '/* join with cls rules */'; put 'proc sql;'; put 'create table work.cols as'; put 'select a.NAME'; put ',a.VARNUM'; put ',a.LABEL'; put ',a.FMTNAME'; put ',a.DDTYPE'; put ',case b.cls_hide'; put 'when 1 then ''HIDE'''; put 'when 0 then ''EDIT'''; put 'else ''READ'' end as CLS_RULE'; put ',c.memlabel'; put ',c.desc'; put ',c.longdesc'; put 'from work.cols1 a'; put 'left join work.cls_rules b'; put 'on a.NAME=b.CLS_VARIABLE_NM'; put 'left join work.spec c'; put 'on a.NAME=c.NAME;'; put 'proc sql;'; put 'create table approvers as select distinct membername as personname'; put ',membername as email, membername as userid'; put 'from work.access1;'; put '/*'; put 'create table access3 as select b.userid,b.email'; put 'from access2 a'; put ',support.users b'; put 'where a.personname=b.userid'; put 'and a.personname ne "%mf_getuser()"'; put 'and %sysfunc(datetime()) lt b.tx_to_dttm'; put 'order by 1;'; put '*/'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%put params;'; put '%let ismap=0;'; put 'proc sql noprint;'; put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;'; put 'data sasparams;'; put 'length colHeaders $20000 filter_text $32767;'; put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));'; put 'pkCnt=countw("&pk");'; put 'pk="&pk";'; put 'dtvars=compbl("&jsdtvars");'; put 'dttmvars=compbl("&jsdttmvars");'; put 'tmvars=compbl("&jstmvars");'; put 'length coltype $32000;'; put 'coltype=symget(''coltype'');'; put 'loadtype=symget(''loadtype'');'; put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;'; put 'else rk_flag=0;'; put 'filter_text=symget(''filter_text'');'; put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;'; put 'else cls_flag=1;'; put 'put (_all_)(=);'; put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;'; put 'else ismap=0;'; put 'run;'; put '/* Extract validation DQ Rules */'; put 'proc sort data=&mpelib..mpe_validations'; put '(where=(&dc_dttmtfmt. le TX_TO'; put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"'; put 'and rule_active=1))'; put 'out=dqrules (keep=base_col rule_type rule_value);'; put 'by base_col rule_type rule_value;'; put 'run;'; put '/* merge with NOTNULL constraints in the physical table */'; put 'proc sql;'; put 'create table _data_ as'; put 'select * from dqrules'; put 'union'; put 'select upcase(name) as base_col'; put ',''NOTNULL'' as rule_type'; put ','''' as rule_value'; put 'from dictionary.columns'; put 'where upcase(libname)="%scan(&orig_libds,1,.)"'; put 'and upcase(memname)="%scan(&orig_libds,2,.)"'; put 'and upcase(name) in (select name from vars3)'; put 'and notnull=''yes'''; put 'order by 1,2,3;'; put 'data dqrules;'; put 'set &syslast;'; put 'by base_col rule_type rule_value;'; put 'if last.rule_type;'; put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then'; put 'do;'; put 'retain x 0; x+1;'; put 'call symputx(cats(''source'',x),rule_value);'; put '%let sourcecnt=0;'; put 'call symputx(''sourcecnt'',x);'; put 'call symputx(cats(''base_col'',x),base_col);'; put 'end;'; put 'run;'; put 'proc sql;'; put 'create table dqdata as'; put 'select distinct base_column as base_col length=32'; put ',upcase(base_column) as rule_value length=74 /* deprecated */'; put ',selectbox_value as rule_data length=1000'; put ',selectbox_order'; put 'from &mpelib..mpe_selectbox'; put 'where &dc_dttmtfmt. lt ver_to_dttm'; put 'and select_lib="%scan(&orig_libds,1,.)"'; put 'and select_ds="%scan(&orig_libds,2,.)";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during DQ rule validation)'; put ')'; put '/* extract selectbox data */'; put '%macro dq_selects();'; put '%local x source lib ds col;'; put '%do x=1 %to &sourcecnt;'; put '%let source=&&source&x;'; put '%let lib=%scan(&source,1,.);'; put '%let ds=%scan(&source,2,.);'; put '%let col=%scan(&source,3,.);'; put '%put &=source;'; put '%put &=lib;'; put '%dc_assignlib(READ,&lib)'; put 'proc sql;'; put 'create table dqdata&x as'; put 'select distinct "&&base_col&x" as base_col length=32'; put ',"&source" as rule_value length=74'; put ',cats(&col) as rule_data length=1000'; put ',0 as selectbox_order'; put 'from &lib..&ds'; put 'order by 1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)'; put ')'; put 'proc append base=dqdata data=dqdata&x;run;'; put 'proc sql; drop table dqdata&x;'; put '%end;'; put '%mend dq_selects;'; put '%dq_selects()'; put 'proc sort data=dqdata;'; put '/* order by selectbox_order then the value */'; put 'by base_col selectbox_order rule_data;'; put 'run;'; put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)'; put 'data maxvarlengths;'; put 'set maxvarlengths;'; put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;'; put 'run;'; put 'data xl_rules;'; put 'set &mpelib..mpe_excel_config;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";'; put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";'; put 'where also xl_active=1;'; put 'keep xl_column xl_rule;'; put 'run;'; put '%mp_dsmeta(&libds, outds=dsmeta)'; put '/* send to the client */'; put '%webout(OPEN)'; put '%webout(OBJ,approvers)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dqdata)'; put '%webout(OBJ,dqrules)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,maxvarlengths)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,xl_rules)'; put '%webout(CLOSE)'; put '/*'; put '$N8601Bw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'DATEw'; put 'DATEAMPMw'; put 'DATETIMEw'; put 'DAYw'; put 'DDMMYYw'; put 'DDMMYYxw'; put 'DOWNAMEw'; put 'DTDATEw'; put 'DTMONYYw'; put 'DTWKDATXw'; put 'DTYEARw'; put 'DTYYQCw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put 'HHMMw'; put 'HOURw'; put 'JULDAYw'; put 'JULIANw'; put 'MMDDYYw'; put 'MMDDYYxw'; put 'MMSSw'; put 'MMYYw'; put 'MMYYxw'; put 'MONNAMEw'; put 'MONTHw'; put 'MONYYw'; put 'PDJULGw'; put 'PDJULIw'; put 'QTRw'; put 'QTRRw'; put 'TIMEw'; put 'TIMEAMPMw'; put 'TODw'; put 'WEEKDATEw'; put 'WEEKDATXw'; put 'WEEKDAYw'; put 'WEEKUw'; put 'WEEKVw'; put 'WEEKWw'; put 'WORDDATEw'; put 'WORDDATXw'; put 'YEARw'; put 'YYMMw'; put 'YYMMxw'; put 'YYMMDDw'; put 'YYMMDDxw'; put 'YYMONw'; put 'YYQw'; put 'YYQxw'; put 'YYQRw'; put 'YYQRxw'; put '$N8601BAw'; put '$N8601Ew'; put '$N8601EAw'; put '$N8601EHw'; put '$N8601EXw'; put '$N8601Hw'; put '$N8601Xw'; put 'B8601DAw'; put 'B8601DNw'; put 'B8601DTw'; put 'B8601DZw'; put 'B8601LZw'; put 'B8601TMw'; put 'B8601TZw'; put 'E8601DAw'; put 'E8601DNw'; put 'E8601DTw'; put 'E8601DZw'; put 'E8601LZw'; put 'E8601TMw'; put 'E8601TZw'; put '*/'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getdynamiccolvals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getdynamiccolvals.sas'; put '@brief Provide dynamic list of values according to a SAS program or service'; put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown'; put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.'; put 'Results are sent in ARRAY format for efficiency.'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|VARIABLE_NM:$32.|'; put '|---|---|'; put '|DC258467.MPE_SECURITY|SAS_GROUP|'; put '
SOURCE_ROW
'; put 'This contains the raw values from the source table.'; put '

Service Outputs

'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_getservicecode.sas'; put '@li mf_nobs.sas'; put '@li mp_abort.sas'; put '@li mp_include.sas'; put '@li mp_validatecol.sas'; put '@li mf_getapploc.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* Validate inputs'; put '*/'; put '%let err_msg=;'; put 'data work.intest;'; put 'set work.SASCONTROLTABLE;'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put '/* validate varname */'; put 'is_name=nvalid(variable_nm,''v7'');'; put 'putlog (_all_)(=);'; put 'if is_libds ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else if is_name ne 1 then do;'; put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;'; put 'call symputx(''err_msg'',msg);'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''variable_nm'',variable_nm);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc after reading work.sascontroltable)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(&err_msg)'; put ')'; put '%dc_assignlib(READ,%scan(&libds,1,.))'; put '/* ensure that work.dynamic_extended_values exists */'; put 'data work.dynamic_extended_values;'; put 'run;'; put '/**'; put '* Get the code to execute'; put '*/'; put 'data work.codetest;'; put 'set &mpelib..MPE_VALIDATIONS;'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and base_lib="%scan(&libds,1,.)"'; put 'and base_ds="%scan(&libds,2,.)"'; put 'and base_col="&variable_nm"'; put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')'; put 'and RULE_ACTIVE=1;'; put 'putlog (_all_)(=);'; put 'if length(rule_value)>1 then do;'; put 'call symputx(''pgmloc'',rule_value);'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'output;'; put 'stop;'; put 'end;'; put 'else stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)'; put ',mac=&_program'; put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)'; put ')'; put '%macro getdynamiccolvals();'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '%mend getdynamiccolvals;'; put '%getdynamiccolvals()'; put '/* execute the dynamic code */'; put '%mp_include(sascode)'; put '%mp_abort(mode=INCLUDE)'; put '/* ensure that the DISPLAY_INDEX variable exists */'; put 'data work.dynamic_values;'; put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_values;'; put 'display_index=coalesce(display_index,_n_);'; put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;'; put 'run;'; put '/* ensure that work.dynamic_extended_values exists with correct types */'; put 'data work.dynamic_extended_values;'; put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1'; put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.dynamic_extended_values;'; put 'run;'; put '%webout(OPEN)'; put '%webout(ARR,dynamic_values,fmt=N)'; put '%webout(ARR,dynamic_extended_values,fmt=N)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getlog; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getlog.sas'; put '@brief Downloads the submission, useful if there is an error'; put '@details'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mp_dirlist.sas'; put '@li mp_binarycopy.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '/* security checks */'; put '%let user=%mf_getuser();'; put '%let check_access=0;'; put 'proc sql noprint;'; put 'select count(*) into: check_access from &mpelib..mpe_loads'; put 'where csv_dir="&table" and user_nm="&user";'; put '%mp_abort(iftrue= (&check_access=0 )'; put ',msg=%str(&user not authorised to download audit data for &table)'; put ',mac=mpestp_getlog.sas'; put ')'; put 'ods package(ProdOutput) open nopf;'; put 'options notes source2 mprint;'; put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)'; put 'data _null_;'; put 'set dirs;'; put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');'; put 'retain str1'; put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";'; put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";'; put 'call execute(cats(str1,filename,str2));'; put 'run;'; put '%let archive_path=%sysfunc(pathname(work));'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'ods package(ProdOutput) publish archive properties'; put '(archive_name= "&table..zip" archive_path="&archive_path");'; put 'ods package(ProdOutput) close;'; put '/* now serve zip file to client */'; put '%mp_streamfile(contenttype=ZIP'; put ',inloc=%str(&archive_path/&table..zip)'; put ',outname=&table..zip'; put ')'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getsubmits; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getsubmits.sas'; put '@brief Returns a list of staged data items that need to be approved'; put '@details'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put 'proc sql noprint;'; put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as'; put 'select table_id'; put ',cats(base_lib,''.'',base_ds) as base_table'; put ',input_vars'; put ',input_obs'; put ',submitted_by_nm'; put ',submitted_reason_txt'; put ',''DEPRECATED'' as approve_group'; put ',submit_status_cd as review_status_id'; put ',reviewed_by_nm'; put ',reviewed_on_dttm'; put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON'; put 'from &mpelib..mpe_submit'; put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED'''; put 'order by submitted_on_dttm desc;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getxlmaps; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getxlmaps.sas'; put '@brief Returns a list of rules and other info for a specific xlmap_id'; put '

Service Inputs

'; put '
getxlmaps_in
'; put '|XLMAP_ID|'; put '|---|'; put '|Sample|'; put '

Service Outputs

'; put '
xlmaprules
'; put 'Filtered output of the dc.MPE_XLMAP_RULES table'; put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|'; put '|---|---|---|---|---|'; put '|Sample|Range1|Sheet1|ABSOLUTE A1| |'; put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|'; put '
xlmapinfo
'; put 'Extra info for a map id'; put '|TARGET_DS|'; put '|---|'; put '|DCXXX.MPE_XLMAP_DATA|'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data _null_;'; put 'set work.getxlmaps_in;'; put 'putlog (_all_)(=);'; put 'call symputx(''xlmap_id'',xlmap_id);'; put 'run;'; put 'proc sql noprint;'; put 'create table work.xlmaprules as'; put 'select xlmap_id'; put ',XLMAP_RANGE_ID'; put ',XLMAP_SHEET'; put ',XLMAP_START'; put ',XLMAP_FINISH'; put 'from &mpelib..MPE_XLMAP_RULES'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"'; put 'order by xlmap_sheet, xlmap_range_id;'; put '%global target_ds;'; put 'select XLMAP_TARGETLIBDS into: target_ds'; put 'from &mpelib..MPE_XLMAP_INFO'; put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'data work.xlmapinfo;'; put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");'; put 'output;'; put 'stop;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,xlmaprules)'; put '%webout(OBJ,xlmapinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=loadfile; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now;'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put '/*'; put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;'; put '*date or datetime format so use original ;'; put 'dsid=open("&libref..&ds");'; put 'vnum=varnum(dsid,name);'; put 'format=varfmt(dsid,vnum);'; put 'dsid=close(dsid);'; put 'end;'; put '*/'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* make sure that the variables we are importing, actually'; put 'exist on the target table */'; put '/** edit - extra variables are now simply ignored'; put '%local very_bad_vars;'; put 'select name into: very_bad_vars separated by '' '''; put 'from vars_csv1'; put 'where name not in (select name from vars)'; put 'and name ne "_____DELETE__THIS__RECORD_____";'; put '%if %length(&very_bad_vars) > 0 %then %do;'; put '%let msg=%str(WARNING: The following vars are not defined in %trim('; put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '**/'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warning */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);'; put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;'; put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;'; put '%return;'; put '%end;'; put '/* presence of a period(.) indicates a physical location */'; put '%if %index(&in,.) %then %let in="&in";'; put '%if %index(&out,.) %then %let out="&out";'; put '/**'; put '* convert all cr and crlf within quotes to lf'; put '* convert all other cr or lf to crlf'; put '*/'; put 'data _null_;'; put 'infile &in recfm=n ;'; put 'file &out recfm=n;'; put 'retain isq iscrlf 0 qchar &qchar;'; put 'input inchar $char1. ;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'if isq then do;'; put '/* inside a quote change cr and crlf to lf */'; put 'if inchar=''0D''x then do;'; put 'put ''0A''x;'; put 'input inchar $char1.;'; put 'if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else put inchar $char1.;'; put 'end;'; put 'else do;'; put '/* outside a quote, change cr and lf to crlf */'; put 'if inchar=''0D''x then do;'; put 'crblank:'; put 'put ''0D0A''x;'; put 'input inchar $char1.;'; put 'if inchar=''0D''x then do;'; put '/* multiple CR indicates CR formatted file with blank lines */'; put 'goto crblank;'; put 'end;'; put 'else if inchar ne ''0A''x then do;'; put 'put inchar $char1.;'; put 'if inchar=qchar then isq = mod(isq+1,2);'; put 'end;'; put 'end;'; put 'else if inchar=''0A''x then put ''0D0A''x;'; put 'else put inchar $char1.;'; put 'end;'; put 'run;'; put '%mend mp_cleancsv;'; put '/** @endcond */'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file loadfile.sas'; put '@brief Loads a file'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li mp_abort.sas'; put '@li mf_getplatform.sas'; put '@li mf_getuser.sas'; put '@li mf_getvarlist.sas'; put '@li mf_mkdir.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mpe_getgroups.sas'; put '@li mp_lockfilecheck.sas'; put '@li mpe_loader.sas'; put '@li mp_cleancsv.sas'; put '@li mp_binarycopy.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table dlm;'; put '%mpeinit(fetch=NO)'; put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2'; put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;'; put '%macro load();'; put '%if %mf_getplatform()=SASVIYA %then %do;'; put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;'; put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; put '%if "&_webin_fileuri1" ne "" %then %do;'; put '%put &=_webin_fileuri1;'; put 'filename sjfref1 filesrvc "&_webin_fileuri1";'; put '%let _WEBIN_FILEREF1=sjfref1;'; put '%end;'; put '%if "&_webin_fileuri2" ne "" %then %do;'; put '%put &=_webin_fileuri2;'; put 'filename sjfref2 filesrvc "&_webin_fileuri2";'; put '%let _WEBIN_FILEREF2=sjfref2;'; put '%end;'; put '%end;'; put '%mend load;'; put '%load()'; put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));'; put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));'; put '%let abort=0;'; put '/* we do not know if the excel file will be first or second fileref */'; put 'data _null_;'; put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));'; put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));'; put 'if ext1=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME1'');'; put 'csvref=symget(''_WEBIN_FILEREF1'');'; put 'xlsname=symget(''_WEBIN_FILENAME2'');'; put 'xlsref=symget(''_WEBIN_FILEREF2'');'; put 'end;'; put 'else if ext2=''CSV'' then do;'; put 'csvname=symget(''_WEBIN_FILENAME2'');'; put 'csvref=symget(''_WEBIN_FILEREF2'');'; put 'xlsname=symget(''_WEBIN_FILENAME1'');'; put 'xlsref=symget(''_WEBIN_FILEREF1'');'; put 'end;'; put 'else call symputx(''abort'',1);'; put 'call symputx(''csvname'',csvname);'; put 'call symputx(''csvref'',csvref);'; put 'call symputx(''xlsname'',xlsname);'; put 'call symputx(''xlsref'',coalescec(xlsref,''0''));'; put 'run;'; put '%mp_abort(iftrue= (&abort=1)'; put ',mac=&_program'; put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!'; put '(Comma separated with .csv extension))'; put ')'; put '%let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(table)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: table)'; put ')'; put '%let table=%upcase(%trim(&table));'; put '/* load parameters */'; put 'data _null_;'; put 'libds=upcase(symget(''table''));'; put 'call symputx(''orig_libds'',libds);'; put 'call symputx(''orig_lib'',scan(libds,1,''.''));'; put 'call symputx(''orig_ds'',scan(libds,2,''.''));'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '/* check that the user has the requisite access */'; put '%mpe_getgroups(user=&user,outds=groups)'; put 'proc sql;'; put 'create table accesscheck as'; put 'select * from groups'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select sas_group from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="EDIT"'; put 'and ('; put '(libref="&orig_lib" and dsn="&orig_ds")'; put 'or (libref="&orig_lib" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="*ALL*")'; put 'or (libref="*ALL*" and dsn="&orig_ds")'; put '));'; put '%let nobs=;'; put 'select count(*) into: nobs from &syslast;'; put '%mp_abort(iftrue= (&nobs=0)'; put ',mac=&sysmacroname'; put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)'; put ')'; put '%dc_assignlib(WRITE,&orig_lib)'; put '%mp_abort(iftrue= (&syscc ge 4)'; put ',mac=loadfile'; put ',msg=%str(Issue assigning library &orig_lib)'; put ')'; put '%global txfrom txto processed rk;'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where libref="&orig_lib" and dsn="&orig_ds";'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'call symputx(''processed'',var_processed);'; put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);'; put 'run;'; put '%mp_lockfilecheck(libds=&orig_libds)'; put 'data compare;'; put 'set &libds(drop=&txfrom &txto &processed &rk);'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 80)'; put ')'; put '/* get line terminator, assume it''s the first cr, lf, or crlf */'; put 'data _null_;'; put 'length text $32767 term $4;'; put 'call missing (of _all_);'; put 'fid=fopen("&csvref",''I'',32767,''b'');'; put 'rc=fread(fid);'; put 'rc2=fget(fid,text,32767);'; put 'cr=find(text,''0D''x );'; put 'lf=find(text,''0A''x );'; put 'crlf=find(text,''0D0A''x);'; put 'rc=fclose(fid);'; put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';'; put 'else term=''CR'';'; put 'call symputx(''termstr'',term);'; put 'run;'; put 'data _null_;'; put 'infile &csvref lrecl=32000 dsd termstr=&termstr;'; put 'input;'; put 'length incols_unsorted $32000 dlm $1;'; put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');'; put '/* dlm has length 1 so will be the first non alpha / digit char */'; put '/* expectation is that there will not be any crazy characters in first col! */'; put 'dlm=compress(incols_unsorted,''_ '',''ad'');'; put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');'; put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');'; put 'call symputx(''incols_unsorted'',incols_unsorted);'; put 'call symputx(''dlm'',dlm);'; put 'putlog incols_unsorted=;'; put 'putlog dlm=;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc line 99)'; put ')'; put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));'; put '%let missing_cols=%trim('; put '%mf_wordsInStr1ButNotStr2('; put 'Str1=&basecols'; put ',Str2=&incols_unsorted'; put '));'; put '%let msg='; put 'Expected cols: &basecols'; put '
Received cols: &incols_unsorted'; put '
Missing cols: &missing_cols'; put ';'; put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%superq(msg)'; put ')'; put '%let msg=0;'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* Create package folder and redirect the log */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* clean embedded line breaks and force CRLF line endings */'; put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue in mp_cleancsv)'; put ')'; put '%put; %put; %put log is being redirected;'; put '%let url=_program=%substr(&_program'; put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%put &url;'; put '%put;'; put '/* proc printto log="&dir/weblog.txt";run; */'; put 'libname approve "&dir";'; put 'options mprint;'; put '%put &=mperef;'; put '%put &=termstr;'; put '%put &=dlm;'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%quote(File upload: %superq(csvname))'; put ',dlm=%superq(dlm)'; put ',url=%superq(url)'; put ',termstr=CRLF'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)'; put ',mac=&_program'; put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mpestp_loadfile.sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename outref "&dir/BKP_&xlsname";'; put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc when backing up source file &xlsname)'; put ')'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=stagedata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mpe_accesscheck('; put 'base_table'; put ',outds=med_accesscheck /* WORK table to contain access details */'; put ',user= /* metadata user to check for */'; put ',access_level=APPROVE'; put ',cntl_lib_var=MPELIB'; put ');'; put '%if &user= %then %let user=%mf_getuser();'; put '%mp_abort('; put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)'; put ',mac=mpe_accesscheck'; put ',msg=%str(outds should be a WORK table)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)'; put ',mac=mpe_accesscheck'; put ',msg=%str(Missing base_table/user access_level variables)'; put ')'; put '/* make unique temp table vars */'; put '%local tempds1 tempds2;'; put '%let tempds1=%mf_getuniquename(prefix=usergroups);'; put '%let tempds2=%mf_getuniquename(prefix=tablegroups);'; put '/* get list of user groups */'; put '%mpe_getgroups(user=&user,outds=&tempds1)'; put '/* get list of groups with access for that table */'; put 'proc sql;'; put 'create table &tempds2 as'; put 'select distinct sas_group'; put 'from &&&cntl_lib_var...mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and access_level="&access_level"'; put 'and ('; put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")'; put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")'; put 'or (libref="*ALL*")'; put ');'; put '%if &_debug ge 131 %then %do;'; put 'data _null_;'; put 'set &tempds1;'; put 'putlog (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set &tempds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put 'proc sql;'; put 'create table &outds as'; put 'select * from &tempds1'; put 'where groupname="&mpeadmins"'; put 'or groupname in (select * from &tempds2);'; put '%put &sysmacroname: base_table=&base_table;'; put '%put &sysmacroname: access_level=&access_level;'; put '%mend mpe_accesscheck;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mpe_alerts(alert_event='; put ', alert_lib='; put ', alert_ds='; put ', dsid='; put ');'; put '/* exit if not configured */'; put '%global DC_EMAIL_ALERTS;'; put '%if &DC_EMAIL_ALERTS ne YES %then %do;'; put '%put DCNOTE: Email alerts are not configured;'; put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);'; put '%return;'; put '%end;'; put '%let alert_event=%upcase(&alert_event);'; put '%let alert_lib=%upcase(&alert_lib);'; put '%let alert_ds=%upcase(&alert_ds);'; put '%let from_user=%mf_getuser();'; put '/* get users TO which the email should be sent */'; put 'proc sql noprint;'; put 'create table work.users as select distinct a.alert_user,'; put 'b.user_displayname,'; put 'b.user_email'; put 'from &mpelib..mpe_alerts'; put '(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_emails'; put '(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))'; put 'where a.alert_event in ("&alert_event","*ALL*")'; put 'and a.alert_lib in ("&alert_lib","*ALL*")'; put 'and a.alert_ds in ("&alert_ds","*ALL*");'; put '/* ensure the submitter is included on the email */'; put '%local isThere userdisp user_eml;'; put '%let isThere=0;'; put 'select count(*) into: isThere from &syslast where alert_user="&from_user";'; put '%if &isThere=0 %then %do;'; put 'select user_displayname, user_email'; put 'into: userdisp trimmed, :user_eml trimmed'; put 'from &mpelib..mpe_emails'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and user_name="&from_user";'; put 'insert into work.users'; put 'set alert_user="&from_user"'; put ',user_displayname="&userdisp"'; put ',user_email="&user_eml";'; put '%end;'; put '/* if no email / displayname is provided, then extract from metadata */'; put 'data work.emails;'; put 'set work.users;'; put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;'; put '/* get displayname */'; put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");'; put 'if metadata_getnobj(text,1,uri)<=0 then do;'; put 'putlog "DCWARN: &from_user not found";'; put 'return;'; put 'end;'; put 'else if user_displayname = '''' then do;'; put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;'; put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';'; put 'end;'; put 'end;'; put 'if index(user_email,''@'') then return;'; put '/* get email from metadata if not in input table */'; put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;'; put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";'; put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;'; put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';'; put 'end;'; put 'end;'; put '/* only keep valid emails */'; put 'if index(user_email,''@'') ;'; put '/* dump contents for debugging */'; put 'if _n_<21 then putlog (_all_)(=);'; put 'run;'; put '%local emails;'; put 'proc sql noprint;'; put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;'; put '/* exit if nobody to email */'; put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;'; put '%put NOTE: No alerts configured (mpe_alerts.sas);'; put '%return;'; put '%end;'; put '/* display email options */'; put 'data _null_;'; put 'set sashelp.voption(where=(group=''EMAIL''));'; put 'put optname ''='' setting;'; put 'run;'; put 'filename __out email (&emails)'; put 'subject="Table &alert_lib..&alert_ds has been &alert_event";'; put '%local SUBMITTED_TXT;'; put '%if &alert_event=SUBMITTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_submit;'; put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';'; put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been proposed by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''SUBMITTED_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=APPROVED %then %do;'; put '/* there is no approval message */'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been approved by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put '%else %if &alert_event=REJECTED %then %do;'; put 'data _null_;'; put 'set &mpelib..mpe_review;'; put 'where table_id="&dsid" and review_status_id=''REJECTED'';'; put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');'; put 'run;'; put 'data _null_;'; put 'File __out lrecl=32000;'; put 'put ''Dear user,'';'; put 'put '' '';'; put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "'; put '"been rejected by &from_user on the ''&syshostname'' SAS server.";'; put 'put " ";'; put 'length txt $2048;'; put 'txt=symget(''REVIEW_REASON_TXT'');'; put 'put "Reason provided: " txt;'; put 'put " ";'; put 'put "This is an automated email by Data Controller for SAS. For "'; put '"documentation, please visit https://docs.datacontroller.io";'; put 'run;'; put '%end;'; put 'filename __out clear;'; put '%mend mpe_alerts ;'; put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);'; put '%local ismap;'; put 'proc sql noprint;'; put 'select count(*) into: ismap'; put 'from &dclib..mpe_xlmap_info'; put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;'; put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;'; put 'data &inds;'; put 'set &inds;'; put 'LOAD_REF="&mperef";'; put 'run;'; put '%end;'; put '%mend mpe_xlmapvalidate;'; put '%macro mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=%sysfunc(datetime())'; put ',approvals='; put ',mperef='; put ',reason_txt='; put ',mac=mpe_loadfail.sas'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads'; put 'set STATUS=symget(''status'')'; put ', duration=&dur'; put ', processed_dttm=&dc_dttmtfmt.'; put ', approvals = symget(''approvals'')'; put ', reason_txt= symget(''reason_txt'')'; put 'where CSV_DIR="&mperef";'; put '%let syscc=666;'; put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)'; put '%mend mpe_loadfail;'; put '%macro dc_getservicecode(loc=,outref=);'; put '%mm_getstpcode(tree=&loc'; put ',outref=&outref'; put ')'; put '%mend dc_getservicecode;'; put '%macro mp_include(fileref'; put ',prefix=_'; put ',opts=SOURCE2'; put ',errds=work.mp_abort_errds'; put ')/*/STORE SOURCE*/;'; put '/* prepare precode */'; put '%local tempref;'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &tempref;'; put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));'; put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';'; put 'name=scan(xpath,-1,''/\'');'; put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';'; put 'path=subpad(xpath,1,length(xpath)-length(name)-1);'; put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';'; put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";'; put 'run;'; put '/* prepare the errds */'; put 'data &errds;'; put 'length msg mac $1000;'; put 'call missing(msg,mac);'; put 'iftrue=''1=0'';'; put 'run;'; put '/* include the include */'; put '%inc &tempref &fileref/&opts;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)'; put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)'; put ')'; put 'filename &tempref clear;'; put '%mend mp_include;'; put '%macro mpe_runhook(hookvar);'; put '%local pgmloc pgmtype;'; put '%let pgmtype=0;'; put '%put &sysmacroname: &=hookvar;'; put '%if %length(&&&hookvar)>0 %then %do;'; put '%put &sysmacroname: Executing &&&hookvar;'; put 'data _null_;'; put 'rule_value=symget("&hookvar");'; put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;'; put 'call symputx(''pgmtype'',''PGM'');'; put 'call symputx(''pgmloc'',rule_value);'; put 'end;'; put 'else do;'; put 'apploc="%mf_getapploc()";'; put 'if substr(rule_value,1,1) ne ''/'''; put 'then rule_value=cats(apploc,''/'',rule_value);'; put 'call symputx(''pgmloc'',rule_value);'; put 'call symputx(''pgmtype'',''JOB'');'; put 'end;'; put 'run;'; put '%if &pgmtype=PGM %then %do;'; put 'filename sascode "&pgmloc";'; put '%end;'; put '%else %do;'; put '%dc_getservicecode(loc=&pgmloc'; put ',outref=sascode'; put ')'; put '%end;'; put '/* the below script will need to modify work.STAGING_DS */'; put '%local x; %let x=; /* legacy feature */'; put '%mp_include(sascode)'; put '%end;'; put '%mend mpe_runhook;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; put ', fref=0'; put ', outds=work.mp_dirlist'; put ', getattrs=NO'; put ', showparent=NO'; put ', maxdepth=0'; put ', level=0 /* The level of recursion to perform. For internal use only. */'; put ')/*/STORE SOURCE*/;'; put '%let getattrs=%upcase(&getattrs)XX;'; put '/* temp table */'; put '%local out_ds;'; put 'data;run;'; put '%let out_ds=%str(&syslast);'; put '/* drop main (top) table if it exists */'; put '%if &level=0 %then %do;'; put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; put '%end;'; put 'data &out_ds(compress=no'; put 'keep=file_or_folder filepath filename ext msg directory level'; put ');'; put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80'; put 'ext $20 msg $200 foption $16;'; put 'if _n_=1 then call missing(of _all_);'; put 'retain level &level;'; put '%if &fref=0 %then %do;'; put 'rc = filename(fref, "&path");'; put '%end;'; put '%else %do;'; put 'fref="&fref";'; put 'rc=0;'; put '%end;'; put 'if rc = 0 then do;'; put 'did = dopen(fref);'; put 'if did=0 then do;'; put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; put 'msg=sysmsg();'; put 'put (_all_)(=);'; put 'stop;'; put 'end;'; put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; put 'numopts=doptnum(did);'; put 'do i=1 to numopts;'; put 'foption=doptname(did,i);'; put 'if foption=:''Directory'' then i=numopts;'; put 'end;'; put 'directory=dinfo(did,foption);'; put 'rc = filename(fref);'; put 'end;'; put 'else do;'; put 'msg=sysmsg();'; put 'put _all_;'; put 'stop;'; put 'end;'; put 'dnum = dnum(did);'; put 'do i = 1 to dnum;'; put 'filename = dread(did, i);'; put 'filepath=cats(directory,''/'',filename);'; put 'rc = filename(fref2,filepath);'; put 'midd=dopen(fref2);'; put 'dmsg=sysmsg();'; put 'if did > 0 then file_or_folder=''folder'';'; put 'rc=dclose(midd);'; put 'midf=fopen(fref2);'; put 'fmsg=sysmsg();'; put 'if midf > 0 then file_or_folder=''file'';'; put 'rc=fclose(midf);'; put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; put 'then file_or_folder=''file'';'; put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; put 'else if file_or_folder='''' then file_or_folder=''locked'';'; put 'if file_or_folder=''file'' then do;'; put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; put 'if filename = ext then ext = '' '';'; put 'end;'; put 'else do;'; put 'ext='''';'; put 'file_or_folder=''folder'';'; put 'end;'; put 'output;'; put 'end;'; put 'rc = dclose(did);'; put '%if &showparent=YES and &level=0 %then %do;'; put 'filepath=directory;'; put 'file_or_folder=''folder'';'; put 'ext='''';'; put 'filename=scan(directory,-1,''/\'');'; put 'msg='''';'; put 'level=&level;'; put 'output;'; put '%end;'; put 'stop;'; put 'run;'; put '%if %substr(&getattrs,1,1)=Y %then %do;'; put 'data &out_ds;'; put 'set &out_ds;'; put 'length infoname infoval $60 fref $8;'; put 'if _n_=1 then call missing(fref);'; put 'rc=filename(fref,filepath);'; put 'drop rc infoname fid i close fref;'; put 'if file_or_folder=''file'' then do;'; put 'fid=fopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open file:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to foptnum(fid);'; put 'infoname=foptname(fid,i);'; put 'infoval=finfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=fclose(fid);'; put 'end;'; put 'else do;'; put 'fid=dopen(fref);'; put 'if fid le 0 then do;'; put 'msg=sysmsg();'; put 'putlog "Could not open folder:" filepath fid= ;'; put 'sasname=''_MCNOTVALID_'';'; put 'output;'; put 'end;'; put 'else do i=1 to doptnum(fid);'; put 'infoname=doptname(fid,i);'; put 'infoval=dinfo(fid,infoname);'; put 'sasname=compress(infoname, ''_'', ''adik'');'; put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; put 'if upcase(sasname) ne ''FILENAME'' then output;'; put 'end;'; put 'close=dclose(fid);'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by filepath sasname;'; put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; put 'id sasname;'; put 'var infoval;'; put 'by filepath file_or_folder filename ext ;'; put 'run;'; put '%end;'; put 'data &out_ds;'; put 'set &out_ds(where=(filepath ne ''''));'; put 'run;'; put '/**'; put '* The above transpose can mean that some updates create additional columns.'; put '* This necessitates the occasional use of datastep over proc append.'; put '*/'; put '%if %mf_existds(&outds) %then %do;'; put '%local basevars appvars newvars;'; put '%let basevars=%mf_getvarlist(&outds);'; put '%let appvars=%mf_getvarlist(&out_ds);'; put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; put '%if &newvars>0 %then %do;'; put 'data &outds;'; put 'set &outds &out_ds;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds force nowarn;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'proc append base=&outds data=&out_ds;'; put 'run;'; put '%end;'; put '/* recursive call */'; put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; put 'data _null_;'; put 'set &out_ds;'; put 'where file_or_folder=''folder'';'; put '%if &showparent=YES and &level=0 %then %do;'; put 'if filepath ne directory;'; put '%end;'; put 'length code $10000;'; put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; put 'put code=;'; put 'call execute(code);'; put 'run;'; put '%end;'; put '/* tidy up */'; put 'proc sql;'; put 'drop table &out_ds;'; put '%mend mp_dirlist;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mpe_loader('; put 'mperef= /* name of subfolder containing the staged data */'; put ',mDebug=0 /* set to 1 for development or debugging */'; put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/'; put ',approver= /* allows a userid to be provided for direct approval email */'; put ',url= /* optional - url for debugging */'; put ',dlm=%str(,)'; put ',termstr=crlf'; put ',dc_dttmtfmt=E8601DT26.6'; put ');'; put '%put entered mpe_loader from &=_program;'; put '%put &=url;'; put '%put &=termstr;'; put '%put &=dlm;'; put '/* determine full path to CSV directory */'; put '%local now;'; put '%let now=&dc_dttmtfmt;'; put '%put &=now;'; put '/**'; put '* get full path to package (only subdirectory passed through)'; put '*/'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing: mperef mpelocapprovals)'; put ')'; put '%let csv_dir=%trim(&mpelocapprovals/&mperef);'; put '/* exit if package has already been uploaded */'; put '%local check;'; put 'proc sql noprint;'; put 'select count(*) into: check'; put 'from &mpelib..mpe_loads'; put 'where csv_dir="&mperef";'; put '%if &check %then %do;'; put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads'; put ',mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* get CSV directory contents */'; put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)'; put 'data WORK.csvs;'; put 'set WORK.getfiles;'; put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;'; put 'lib=upcase(scan(filename,1,''.''));'; put 'ds=upcase(scan(filename,2,''.''));'; put 'output;'; put 'end;'; put 'run;'; put '/* get table attributes */'; put 'proc sql noprint;'; put 'create table WORK.sumo_tables as'; put 'select a.filename, b.*'; put 'from WORK.csvs a'; put 'left join &mpelib..mpe_tables b'; put 'on a.lib=b.libref'; put 'and a.ds=b.dsn'; put 'where b.tx_from le &now'; put 'and &now lt b.tx_to;'; put '/* define user as meta user if available */'; put '%local user;'; put '%let user=%mf_getuser();'; put '/* check if there is actually a table to load */'; put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;'; put '%let msg=Table not registered in &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=&msg'; put ',now=&now'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put 'proc sql;'; put 'insert into &mpelib..mpe_loads'; put 'set USER_NM="&user"'; put ',STATUS=''IN PROGRESS'''; put ',CSV_dir="&mperef"'; put ',PROCESSED_DTTM=&now;'; put '/* import CSV */'; put '%let droplist=;'; put '%let attrib=;'; put '%let droplist=;'; put '%let libref=;'; put '%let DS=;'; put '/* get table info */'; put 'data _null_;'; put 'set sumo_tables;'; put 'libds=upcase(cats(libref,''.'',dsn));'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''libds'',libds);'; put 'call symputx(''FNAME'',filename);'; put 'call symputx(''LIBREF'',libref);'; put 'call symputx(''DS'',dsn);'; put 'call symputx(''LOADTYPE'',loadtype);'; put 'call symputx(''BUSKEY'',buskey);'; put 'call symputx(''VAR_TXFROM'',var_txfrom);'; put 'call symputx(''VAR_TXTO'',var_txto);'; put 'call symputx(''VAR_BUSFROM'',var_busfrom);'; put 'call symputx(''VAR_BUSTO'',var_busto);'; put 'call symputx(''VAR_PROCESSED'',var_processed);'; put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);'; put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);'; put 'call symputx(''NOTES'',NOTES);'; put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));'; put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');'; put 'put (_all_)(=);'; put 'stop;'; put 'run;'; put '%if %length(&ds)=0 %then %do;'; put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '/* export format catalog */'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* user must have EDIT access to load a table */'; put '%mpe_accesscheck(&orig_libds'; put ',outds=work.sumo_access'; put ',user=&user'; put ',access_level=EDIT )'; put '%put exiting accesscheck;'; put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;'; put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;'; put '%mpe_loadfail('; put 'status=UNAUTHORISED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%mp_abort(msg=&msg,mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%put now importing: "&csv_dir/&fname" termstr=&termstr;'; put '/* get the variables from the CSV */'; put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);'; put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';'; put 'input;'; put 'length infile $32767;'; put 'infile=compress(_infile_,''"'',);'; put 'infile=compress(infile,"''",);'; put 'format name $32.;'; put 'putlog ''received vars: '' infile;'; put 'call symputx(''received_vars'',infile,''l'');'; put 'do varnum=1 to countw(infile,"&dlm");'; put '/* keep writeable chars */'; put 'name=compress(upcase(scan(infile,varnum)),,''kw'');'; put 'if name ne "_____DELETE__THIS__RECORD_____" then output;'; put 'end;'; put 'stop;'; put 'run;'; put '%put received_vars = &received_vars;'; put '%dc_assignlib(WRITE,&libref)'; put '/* get list of variables and their formats */'; put 'proc contents noprint data=&libds'; put 'out=vars(keep=name type length varnum format:);'; put 'run;'; put 'data vars(keep=name type length varnum format);'; put 'set vars(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'format2=upcase(format2);'; put '/* not interested in transaction or processing dates'; put '(append table must be supplied without them) */'; put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"'; put ',"_____DELETE__THIS__RECORD_____");'; put 'if type2 in (2,6) then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else format=cats(format2,max(formatl,length),''.'');'; put 'type=''char'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;'; put 'format=''DATETIME19.'';'; put 'end;'; put 'else if format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'''; put 'or format2=:''E8601DA'' or format2=:''B8601DA'''; put 'then do;'; put 'format=''DATE9.'';'; put 'end;'; put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');'; put '/*'; put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY'''; put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;'; put '*date or datetime format so use original ;'; put 'dsid=open("&libref..&ds");'; put 'vnum=varnum(dsid,name);'; put 'format=varfmt(dsid,vnum);'; put 'dsid=close(dsid);'; put 'end;'; put '*/'; put 'else do;'; put 'if formatl=0 then formatl=length;'; put 'format=cats(format2,formatl,''.'',formatd);'; put 'end;'; put 'type=''num'';'; put 'end;'; put 'put (_all_)(=);'; put 'run;'; put '/* build attrib statement */'; put 'data vars_attrib;'; put 'length attrib_statement $32767 type2 $20;'; put 'set vars end=lastobs;'; put 'retain attrib_statement;'; put 'if type=''char'' then type2=''$'';'; put 'str1=catx('' '',name,''length='',cats(type2,length));'; put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);'; put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');'; put 'run;'; put '/* build input statement - first get vars in right order'; put 'and join with target formats*/'; put 'proc sql noprint;'; put 'create table vars_csv2 as'; put 'select b.*'; put 'from vars_csv1 a'; put 'left join vars_attrib b'; put 'on a.name=b.name'; put 'order by a.varnum;'; put '/* make sure that the variables we are importing, actually'; put 'exist on the target table */'; put '/** edit - extra variables are now simply ignored'; put '%local very_bad_vars;'; put 'select name into: very_bad_vars separated by '' '''; put 'from vars_csv1'; put 'where name not in (select name from vars)'; put 'and name ne "_____DELETE__THIS__RECORD_____";'; put '%if %length(&very_bad_vars) > 0 %then %do;'; put '%let msg=%str(WARNING: The following vars are not defined in %trim('; put ')&libref..&ds, yet they exist in &csv_dir/&ds..csv: &very_bad_vars);'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '**/'; put '/* now build input statement */'; put 'data final_check;'; put 'set vars_csv2 end=lastobs;'; put 'length input_statement $32767 type2 $20 droplist $32767;'; put 'retain input_statement droplist;'; put '/* Build input statement - CATCH EXCEPTIONS HERE!*/'; put 'if name in (''QUOTE_DTTM'') then do;'; put 'name=cats(name,''2'');'; put 'droplist=catx('' '',trim(droplist),name);'; put 'type2=''$20.'';/* converted below */'; put 'end;'; put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');'; put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';'; put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';'; put 'else if format=:''TIME'' then type2=''ANYDTTME.'';'; put 'else if name='''' then do;/* additional vars in input data */'; put 'name=''_____DELETE__THIS__VARIABLE_____'';'; put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');'; put 'type2=''$1.'';'; put 'end;'; put 'else type2=''best32.'';'; put '* else type2=cats(length,''.'');'; put 'input_statement=catx('' '',input_statement,name,'':'',type2);'; put 'if lastobs then do;'; put 'call symputx(''INPUT'', input_statement,''L'');'; put 'if trim(droplist) ne '''' then'; put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');'; put 'end;'; put 'run;'; put '%let mpeloadstop=0;'; put 'data work.STAGING_DS;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767'; put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';'; put 'attrib &attrib ;'; put 'if _n_=1 then call missing (of _all_);'; put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;'; put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/'; put '/* SPECIAL LOGIC FOR SPECIAL VARS */'; put '%end;'; put 'if _error_ ne 0 then do;'; put 'putlog _infile_;'; put 'call symputx(''mpeloadstop'',_n_);'; put 'stop;'; put 'end;'; put '/* remove all blank rows */'; put 'if compress(cats(of _all_),''.'')='' '' then delete;'; put 'run;'; put '%if &mpeloadstop>0 %then %do;'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put '%put redirecting log output to capture return message;'; put '%put currentloc=&logloc;'; put 'filename tmp temp;'; put 'proc printto log=tmp;run;'; put 'data _null_;'; put '&droplist;'; put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2'; put 'missover termstr=&termstr;'; put 'attrib &attrib ;'; put 'input'; put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____'; put '%then %do;'; put '_____DELETE__THIS__RECORD_____: $3.'; put '%end;'; put '&input;'; put 'if _error_ then stop;'; put 'run;'; put '/* get log back */'; put 'proc printto log=&logloc;run;'; put 'data _null_; infile tmp; input; putlog _infile_;run;'; put '/* scan log for invalid data warning */'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;'; put 'if index(_infile_,''NOTE: Invalid data for'') then do;'; put 'msg1=_infile_;'; put 'input;'; put 'msg2=_infile_;'; put 'input;'; put 'msg3=_infile_;'; put 'input;'; put 'msg4=_infile_;'; put 'input;'; put 'msg5=_infile_;'; put 'url=symget(''url'');'; put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);'; put 'call symputx(''msg'',msg);'; put 'stop;'; put 'end;'; put 'run;'; put '%mpe_loadfail('; put 'status=FAILED'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* check that the table is unique on PK */'; put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;'; put '%local duplist;'; put 'data _null_;'; put 'set work.mpe_dups;'; put '%do i=1 %to %sysfunc(countw(&pk));'; put '%let iWord=%scan(&pk,&i);'; put 'call symputx(''duplist'',symget(''duplist'')!!'; put '" &iWord="!!cats(&iWord));'; put '%end;'; put 'run;'; put '%let msg=This upload contains duplicates on the Primary Key columns %trim('; put ')(&pk) \n Please remove the duplicates and try again. %trim('; put ')\n &duplist \n ;'; put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);'; put '%return;'; put '%end;'; put '%if &syscc gt 4 %then %do;'; put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%superq(msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/* If a Complex Excel Upload, needs to have the load ref added to the table */'; put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)'; put '/* Run the Post Edit Hook prior to creation of staging folder */'; put '%mpe_runhook(POST_EDIT_HOOK)'; put '/* stop if err */'; put '%if &syscc gt 4 %then %do;'; put '%let msg=ERR in post edit hook (&post_edit_hook);'; put '%mpe_loadfail('; put 'status=FAILED - &syscc'; put ',now=&now'; put ',mperef=&mperef'; put ',reason_txt=%quote(&msg)'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '/**'; put '* send to approve process'; put '*/'; put '/* create a dataset key (datetime plus 3 digit random number plus PID) */'; put '/* send dataset to approvals subfolder with same name as subfolder */'; put 'libname approval "&mpelocapprovals/&mperef";'; put 'data approval.&mperef;'; put 'set work.staging_ds;'; put 'run;'; put 'proc export data=approval.&mperef'; put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"'; put 'dbms=csv'; put 'replace;'; put 'run;'; put '/* update the control dataset with relevant info */'; put 'data append_app;'; put 'if 0 then set &mpelib..mpe_submit;/* get formats */'; put 'call missing (of _all_);'; put 'TABLE_ID="&mperef";'; put 'submit_status_cd=''SUBMITTED'';'; put 'submitted_by_nm="%mf_getuser()";'; put 'base_lib="&libref";'; put 'base_ds="&ds";'; put 'submitted_on_dttm=&now;'; put 'submitted_reason_txt=symget(''submitted_reason_txt'');'; put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);'; put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);'; put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;'; put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;'; put 'reviewed_by_nm='''';'; put 'reviewed_on_dttm=.;'; put 'run;'; put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,'; put 'ref=%str(&mperef update in &_program),'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'proc append base= &mpelib..mpe_submit data=append_app;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=&mpelib,ds=mpe_submit,'; put 'ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put '/* send email to REVIEW members */'; put '%put sending mpe_alerts;'; put '%mpe_alerts(alert_event=SUBMITTED'; put ', alert_lib=&libref'; put ', alert_ds=&ds'; put ', dsid=&mperef'; put ')'; put '/* DISABLE EMAIL FOR NOW'; put '%let b2=REASON: %quote(&submitted_reason_txt);'; put '%local URLNOTES;'; put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));'; put '%let b3=%str(Click to review / approve: )%trim('; put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim('; put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;'; put '%let b4=%str(Reference ID: &mperef);'; put '*/'; put '%put mpe_loader finishing up with syscc=&syscc;'; put '%if &syscc le 4 %then %do;'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'putlog ''Updating mpe_loads with the following query:'';'; put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";'; put 'putlog " , duration=" dur;'; put 'putlog " , processed_dttm=" now;'; put 'putlog " , approvals = ''&libref..&ds''";'; put 'putlog " where CSV_DIR=''&mperef'';";'; put 'run;'; put 'proc sql;'; put 'update &mpelib..mpe_loads set STATUS=''SUCCESS'''; put ', duration=&dur'; put ', processed_dttm=&now'; put ', approvals = "&libref..&ds"'; put 'where CSV_DIR="&mperef";'; put '%end;'; put '%else %do;'; put '%mpe_loadfail('; put 'status="FAILED - &syscc"'; put ',now=&now'; put ',approvals=&libref..&ds'; put ',mperef=&mperef'; put ',dc_dttmtfmt=&dc_dttmtfmt.'; put ')'; put '%return;'; put '%end;'; put '%mend mpe_loader;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mcf_init(func'; put ')/*/STORE SOURCE*/;'; put '%if not (%symexist(SASJS_PREFIX)) %then %do;'; put '%global SASJS_PREFIX;'; put '%let SASJS_PREFIX=SASJS;'; put '%end;'; put '%let func=%upcase(&func);'; put '/* the / character is just a seperator */'; put '%global &sasjs_prefix._FUNCTIONS;'; put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;'; put '1'; put '%return;'; put '%end;'; put '%else %do;'; put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;'; put '0'; put '%end;'; put '%mend mcf_init;'; put '%macro mcf_getfmttype(wrap=NO'; put ',insert_cmplib=DEPRECATED'; put ',lib=WORK'; put ',cat=SASJS'; put ',pkg=UTILS'; put ')/*/STORE SOURCE*/;'; put '%local i var cmpval found;'; put '%if %mcf_init(mcf_getfmttype)=1 %then %return;'; put '%if &wrap=YES %then %do;'; put 'proc fcmp outlib=&lib..&cat..&pkg;'; put '%end;'; put 'function mcf_getfmttype(fmtnm $) $8;'; put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');'; put 'else do;'; put '/* extract NAME */'; put 'length fmt $32;'; put 'fmt=scan(fmtnm,1,''.'');'; put 'do while ('; put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')'; put ');'; put 'if length(fmt)=1 then fmt=''W'';'; put 'else fmt=substr(fmt,1,length(fmt)-1);'; put 'end;'; put '/* apply lookups */'; put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT'''; put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR'''; put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'')'; put 'then return(''DATETIME'');'; put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY'''; put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx'''; put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB'''; put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY'''; put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH'''; put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY'''; put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC'''; put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS'''; put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD'''; put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx'''; put ',''YYQS'',''YYQx'',''YYQZ'') then return(''DATE'');'; put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ'''; put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ'''; put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');'; put 'else return(''NUM'');'; put 'end;'; put 'endsub;'; put '%if &wrap=YES %then %do;'; put 'quit;'; put '%end;'; put '/* insert the CMPLIB if not already there */'; put '%let cmpval=%sysfunc(getoption(cmplib));'; put '%let found=0;'; put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));'; put '%let var=%scan(&cmpval,&i,%str( %(%)));'; put '%if &var=&lib..&cat %then %let found=1;'; put '%end;'; put '%if &found=0 %then %do;'; put 'options insert=(CMPLIB=(&lib..&cat));'; put '%end;'; put '%mend mcf_getfmttype;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_ds2csv(ds'; put ',dlm=COMMA'; put ',outref=0'; put ',outfile='; put ',outencoding=0'; put ',headerformat=LABEL'; put ',termstr=CRLF'; put ')/*/STORE SOURCE*/;'; put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;'; put '%if not %sysfunc(exist(&ds)) %then %do;'; put '%put %str(WARN)ING: &ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;'; put '%if &outencoding=0 %then %let outencoding=;'; put '%else %let outencoding=encoding=&outencoding;'; put '%if &outref=0 %then %let outloc=&outfile;'; put '%else %let outloc=&outref;'; put '%if &headerformat=SASJS %then %do;'; put '%let delim=",";'; put '%let termstr=CRLF;'; put '%mcf_getfmttype(wrap=YES)'; put '%end;'; put '%else %if &dlm=COMMA %then %let delim=",";'; put '%else %let delim=";";'; put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */'; put '/* first get headers */'; put 'data _null_;'; put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;'; put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;'; put 'call missing(of _all_);'; put 'dsid=open("&ds.","i");'; put 'num=attrn(dsid,"nvars");'; put 'dlm=&delim;'; put 'do i=1 to num;'; put 'varnm=upcase(varname(dsid,i));'; put 'if i=num then dlm='''';'; put '%if &headerformat=NAME %then %do;'; put 'header=cats(varnm,dlm);'; put '%end;'; put '%else %if &headerformat=LABEL %then %do;'; put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);'; put '%end;'; put '%else %if &headerformat=SASJS %then %do;'; put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',varlen(dsid,i),''.'');'; put 'else do;'; put 'vfmt=coalescec(varfmt(dsid,i),''0'');'; put 'fmttype=mcf_getfmttype(vfmt);'; put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');'; put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');'; put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');'; put 'else header=cats(varnm,'':best.'');'; put 'end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Invalid headerformat value (&headerformat);'; put '%return;'; put '%end;'; put 'put header @;'; put 'end;'; put 'rc=close(dsid);'; put 'run;'; put '%let varlist=%mf_getvarlist(&ds);'; put '%let vcnt=%sysfunc(countw(&varlist));'; put '/**'; put '* The $quote modifier (without a width) will take the length from the variable'; put '* and increase by two. However this will lead to truncation where the value'; put '* contains double quotes (which are doubled up). To get around this, scan the'; put '* data to see the max number of double quotes, so that the appropriate width'; put '* can be applied in the subsequent step.'; put '*/'; put 'data _null_;'; put 'set &ds end=last;'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if %mf_getvartype(&ds,&var)=C %then %do;'; put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);'; put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);'; put 'retain &dsv1 0;'; put '&dsv2=length(&var)+countc(&var,''"'');'; put 'if &dsv2>&dsv1 then &dsv1=&dsv2;'; put 'if last then call symputx('; put '"vlen&i"'; put '/* should be no shorter than varlen, and no longer than 32767 */'; put ',cats(''$quote'',min(&dsv1+2,32767),''.'')'; put ',''l'''; put ');'; put '%end;'; put '%end;'; put '%let vat=@;'; put '%let vcom=&delim;'; put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);'; put '/* next, export data */'; put 'data _null_;'; put 'set &ds.;'; put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;'; put 'if _n_=1 then &vmiss='' '';'; put '%do i=1 %to &vcnt;'; put '%let var=%scan(&varlist,&i);'; put '%if &i=&vcnt %then %do;'; put '%let vat=;'; put '%let vcom=;'; put '%end;'; put '%if %mf_getvartype(&ds,&var)=N %then %do;'; put '%if &headerformat = SASJS %then %do;'; put '%let vcom=&delim;'; put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));'; put '%if &fmttype=DATE %then %let vfmt=DATE9.;'; put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;'; put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;'; put '%else %do;'; put '%let vfmt=;'; put '%let vcom=;'; put '%end;'; put '%end;'; put '%else %let vcom=;'; put '/* must use period - in order to work in both 9.4 and Viya 3.5 */'; put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;'; put '&vmiss=cats(''.'',&var);'; put 'put &vmiss &vat;'; put 'end;'; put 'else put &var &vfmt &vcom &vat;'; put '%end;'; put '%else %do;'; put '%if &i ne &vcnt %then %let vcom=&delim;'; put 'put &var &&vlen&i &vcom &vat;'; put '%end;'; put '%end;'; put 'run;'; put '%mend mp_ds2csv;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sends a changeset to staging area'; put '@details This is the service that is called when submitting a new edit.'; put '

Service Inputs

'; put '
jsdata
'; put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column'; put '
SASControlTable
'; put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|'; put '|---|---|---|'; put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mf_nobs.sas'; put '@li dc_assignlib.sas'; put '@li mf_verifymacvars.sas'; put '@li mf_mkdir.sas'; put '@li mf_getuniquefileref.sas'; put '@li mpe_loader.sas'; put '@li mpe_filtermaster.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_ds2csv.sas'; put '@li mf_getplatform.sas'; put '@li removecolsfromwork.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global approver; %let approver=;'; put '%global libref; %let libref=;'; put '%global dsn; %let dsn=;'; put '%global user; %let user=;'; put '%let user=%mf_getuser();'; put '/* load parameters */'; put 'data _null_;'; put 'set work.sascontroltable;'; put 'call symputx(''action'',action);'; put 'call symputx(''message'',message);'; put 'libds=upcase(libds);'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'libds=''work.fmtextract'';'; put 'call symputx(''libds'',libds);'; put 'is_fmt=1;'; put 'end;'; put 'else call symputx(''libds'',libds);'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/* stream back meta info, further jquery calls will return col metadata and'; put 'actual data */'; put '%let libref=%upcase(%scan(&libds,1,.));'; put '%let dsn=%upcase(%scan(&libds,2,.));'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc - unable to assign library &libref)'; put ')'; put '%mp_abort('; put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)'; put ',mac=&_program'; put ',msg=%str(Missing: mpelocapprovals libds)'; put ')'; put '%put Verify that the upload does not violate Row Level Security checks:;'; put '%mpe_filtermaster(ULOAD,&libds,'; put 'dclib=&mpelib,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc during filtering process)'; put ')'; put '/* prepare inverse query */'; put '%let tempref=%mf_getuniquefileref();'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'file &tempref;'; put 'if _n_=1 then put ''where not('';'; put 'input;'; put 'put _infile_;'; put 'if eof then put '')'';'; put 'run;'; put '/* apply the query */'; put 'data work.badrecords;'; put 'set work.jsdata;'; put '%inc &tempref/source2;;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)'; put ',mac=&_program'; put ',msg=%str('; put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted'; put ')'; put ')'; put 'PROC FORMAT;'; put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);'; put 'RUN;'; put '/**'; put '* Create package folder and redirect the log'; put '*/'; put '/* create a dataset key (datetime plus 6 digit random number plus PID) */'; put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr('; put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);'; put '/* get web url */'; put '%global url;'; put '%let url=localhost/SASStoredProcess;'; put '%let platform=%mf_getplatform();'; put '%put &=platform;'; put 'data _null_;'; put 'length url $128;'; put '%macro stagedata();'; put '%if &platform=SASVIYA %then %do;'; put 'if symexist(''_baseurl'') then do;'; put 'url=symget(''_baseurl'');'; put 'if subpad(url,length(url)-9,9)=''SASStudio'''; put 'then url=substr(url,1,length(url)-11);'; put 'else url="&systcpiphostname/SASJobExecution";'; put 'end;'; put 'else url="&systcpiphostname/SASJobExecution";'; put '%end;'; put '%else %if &platform=SASMETA %then %do;'; put 'rc=METADATA_GETURI("Stored Process Web App",url);'; put '%end;'; put '%mend stagedata;'; put '%stagedata()'; put 'call symputx(''url'',url);'; put 'putlog url=;'; put 'run;'; put '/* Create package folder */'; put '%let dir=&mpelocapprovals/&mperef;'; put '%mf_mkdir(&dir)'; put '/* redirect the log */'; put '%put; %put; %put log is being redirected;'; put '%put to retrieve, visit this url:; %put;%put;'; put '%let url=&url?_program=%substr(&_program'; put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;'; put '%put &url;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to log redirection)'; put ')'; put 'proc printto log="&dir/weblog.txt";run;'; put 'options notes mprint;'; put 'libname approve "&dir";'; put '/* take copy of webin file */'; put 'data _null_;'; put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');'; put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */'; put 'else ref=''indata1'';'; put 'call symputx(''ref'',ref);'; put 'putlog ref=;'; put 'run;'; put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)'; put '/* take copy of macvars */'; put 'data _null_;'; put 'file "&dir/macvars.sas";'; put 'set sashelp.vmacro;'; put 'where scope=''GLOBAL'';'; put 'put ''%let '' name ''='' value '';'';'; put 'run;'; put 'data approve.jsdset;'; put 'length _____DELETE__THIS__RECORD_____ $3;'; put 'set jsdata;'; put 'run;'; put '/**'; put '* mf_getvarXXX functions will fail if the target is locked - so take a copy'; put '* and reference that (this will also explicitly throw the lock situation)'; put '*/'; put '%let dscopy=work.dscopy;'; put 'data &dscopy;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Issue getting lock on &libds)'; put ')'; put '%mp_ds2csv(approve.jsdset'; put ',dlm=COMMA'; put ',outfile="&dir/&orig_libds..csv"'; put ',outencoding="UTF-8"'; put ',headerformat=NAME'; put ',termstr=CRLF'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc when writing the CSV)'; put ')'; put '%mpe_loader(mperef=&mperef'; put ',submitted_reason_txt=%superq(message)'; put ',approver=%quote(%trim(&approver))'; put ',url=%superq(url)'; put ',dc_dttmtfmt=&dc_dttmtfmt'; put ')'; put '%mp_abort(mode=INCLUDE)'; put '%mp_abort('; put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)'; put ',mac=&_program..sas'; put ',msg=%str(mf_abort.error=1)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/* send relevant SUCCESS values */'; put 'data sasparams;'; put 'STATUS=''SUCCESS'';'; put 'DSID="&mperef";'; put 'url="&url";'; put 'run;'; put '%removecolsfromwork(___TMP___MD5)'; put '%webout(OPEN)'; put '%webout(OBJ,sasparams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/hooks; %let service=mpe_column_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming column_level_security settings to ensure'; put 'each individual filter is valid'; put '**/'; put '/* check scope values and ensure uppercasing */'; put '%let errflag=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'cls_scope=upcase(cls_scope);'; put 'CLS_LIBREF=upcase(CLS_LIBREF);'; put 'cls_table=upcase(CLS_TABLE);'; put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);'; put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;'; put 'call symputx(''errflag'',1);'; put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);'; put 'stop;'; put 'end;'; put 'if cls_hide<1 then cls_hide=0;'; put 'else cls_hide=1;'; put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;'; put 'else CLS_ACTIVE=1;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_column_level_security_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_row_level_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming row_level_security settings to ensure'; put 'each individual filter is'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mp_filtercheck.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/* ignore scope and group for validation */'; put 'proc sql;'; put 'create table work.batches as'; put 'select distinct upcase(rls_libref) as rls_libref,'; put 'upcase(rls_table) as rls_table,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from work.staging_ds'; put 'where rls_active=1'; put 'order by rls_libref, rls_table;'; put '%let cnt=0;'; put 'data _null_;'; put 'set work.batches;'; put 'by rls_libref rls_table;'; put 'putlog (_all_)(=);'; put 'if last.rls_table then do;'; put 'x+1;'; put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));'; put 'call symputx(''cnt'',x);'; put 'end;'; put 'run;'; put '%macro quickloop();'; put '%do i=1 %to &cnt;'; put 'data work.inds&i;'; put 'set work.batches;'; put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";'; put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm'; put 'raw_value;'; put 'run;'; put '%dc_assignlib(READ,%scan(&&libds&i,1,.))'; put '%mp_filtercheck(work.inds&i'; put ',targetds=&&libds&i'; put ',outds=work.badrecords'; put ',abort=YES'; put ')'; put '%end;'; put '%mend quickloop;'; put '%quickloop()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_security_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_SECURITY table'; put '@details Post edit hooks provide additional backend validation against'; put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this'; put 'file is included from the mpe_loader.sas macro.'; put 'Available (at runtime) macro variables:'; put '@li DC_LIBREF - The DC control library for your site'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put '/* ensure upcase and check access level values*/'; put '%let errval=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);'; put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;'; put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;'; put 'call symputx(''errval'',1);'; put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errval=1)'; put ',mac=mpe_security_postedit.sas'; put ',msg=%str(&errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_tables_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_TABLES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks MPE_TABLES to ensure modified / added records are'; put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check'; put 'to ensure that this table already exists.'; put '**/'; put '%let errmsg=;'; put '%let errflag=0;'; put '/* ensure uppercasing */'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'LIBREF=upcase(LIBREF);'; put 'DSN=upcase(DSN);'; put 'loadtype=upcase(loadtype);'; put 'buskey=upcase(buskey);'; put 'var_txfrom=upcase(var_txfrom);'; put 'var_txto=upcase(var_txto);'; put 'var_busfrom=upcase(var_busfrom);'; put 'var_busto=upcase(var_busto);'; put 'var_processed=upcase(var_processed);'; put 'close_vars=upcase(close_vars);'; put 'audit_libds=upcase(audit_libds);'; put 'rk_underlying=upcase(rk_underlying);'; put '/* check for valid loadtype */'; put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')'; put 'then do;'; put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);'; put 'call symputx(''errflag'',1);'; put 'end;'; put '/* force correct BUSKEY and DSN when loading format catalogs */'; put 'if LOADTYPE=''FORMAT_CAT'' then do;'; put 'BUSKEY=''TYPE FMTNAME FMTROW'';'; put 'DSN=scan(dsn,1,''-'')!!''-FC'';'; put 'end;'; put '/* convert tabs into spaces */'; put 'buskey=translate(buskey," ","09"x);'; put 'rk_underlying=translate(rk_underlying," ","09"x);'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '/* get distinct list of audit libs */'; put 'proc sql;'; put 'create table work.liblist as'; put 'select distinct audit_libds'; put 'from work.staging_ds'; put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put '/* assign the libs */'; put 'data _null_;'; put 'set work.liblist;'; put 'call symputx(cats(''lib'',_n_),audit_libds);'; put 'libref=scan(audit_libds,1,''.'');'; put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');'; put 'run;'; put '/* check the audit tables exist */'; put 'data _null_;'; put 'set work.liblist;'; put 'if exist(audit_libds,"DATA")=0 then do;'; put 'call symputx(''errmsg'','; put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."'; put ');'; put 'call symputx(''errflag'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&errflag=1)'; put ',mac=mpe_tables_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_validations_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_VALIDATIONS table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put 'This validation checks the incoming mpe_validations settings to ensure'; put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.'; put '

SAS Macros

'; put '@li mf_nobs.sas'; put '

Related Macros

'; put '@li mpe_loader.sas'; put '**/'; put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */'; put '/* need to merge with base table in the case of a single row being added */'; put '%global src_list1 src_list2;'; put '%let src_list1='''';'; put 'proc sql noprint;'; put 'create table work.check1 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from work.staging_ds'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";'; put 'select distinct cats(source) into: src_list1 separated by '','''; put 'from work.check1;'; put 'create table work.check2 as'; put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source'; put ',rule_type'; put 'from &DC_LIBREF..MPE_VALIDATIONS'; put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')'; put 'and &dc_dttmtfmt. lt tx_to'; put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);'; put 'create table work.check3 as'; put 'select * from work.check1'; put 'union'; put 'select * from work.check2;'; put 'create table work.validation_checker as'; put 'select source'; put ',count(*) as cnt'; put 'from work.check3'; put 'group by 1'; put 'having cnt>1;'; put 'select distinct source into: src_list2 from work.validation_checker;'; put 'data _null_;'; put 'set work.validation_checker;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)'; put ',mac=mpe_validations_postedit'; put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_info_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvarlist.sas'; put '@li mf_wordsinstr1butnotstr2.sas'; put '@li dc_assignlib.sas'; put '@li mp_validatecol.sas'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* apply the first excel map to all cells */'; put 'length tgtds $41;'; put 'retain tgtds;'; put 'drop tgtds is_libds;'; put 'if _n_=1 then do;'; put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";'; put 'else tgtds=upcase(XLMAP_TARGETLIBDS);'; put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)'; put 'call symputx(''tgtds'',tgtds);'; put 'call symputx(''is_libds'',is_libds);'; put 'end;'; put 'XLMAP_TARGETLIBDS=tgtds;'; put 'run;'; put '%mp_abort(iftrue=(&is_libds ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Invalid target dataset (&tgtds)'; put ')'; put '/**'; put '* make sure that the supplied target dataset exists and'; put '* has the necessary columns'; put '*/'; put '%dc_assignlib(READ,%scan(&tgtds,1,.))'; put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=Target dataset (&tgtds) could not be opened'; put ')'; put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));'; put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));'; put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);'; put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);'; put '%mp_abort(iftrue=(%length(&badvars1.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)'; put ')'; put '%mp_abort(iftrue=(%length(&badvars2.X)>1)'; put ',mac=mpe_xlmap_info_postedit'; put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_xlmap_rules_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table'; put '@details Post edit hooks provide additional backend validation for user'; put 'provided data. The incoming dataset is named `work.staging_ds` and is'; put 'provided in mpe_loader.sas.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The dataset being edited'; put '**/'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put '/* ensure uppercasing */'; put 'XLMAP_ID=upcase(XLMAP_ID);'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postapprove; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li LOAD_REF - The Load Reference (unique upload id)'; put '@li ORIG_LIBDS - The target library.dataset that was just loaded'; put '**/'; put 'data _null_;'; put 'set work.staging_ds;'; put 'putlog ''load ref is in the staged data: '' load_ref;'; put 'stop;'; put 'run;'; put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sample_xlmap_data_postedit; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Sample XLMAP Data hook program'; put '@details This hook script should NOT be modified in place, as the changes'; put 'would be lost in your next Data Controller deployment.'; put 'Instead, create a copy of this hook script and place it OUTSIDE the'; put 'Data Controller metadata folder.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBREF - The library of the dataset being edited (is assigned)'; put '@li DS - The target dataset being loaded'; put '**/'; put '%let abort=0;'; put '%let errmsg=;'; put 'data work.staging_ds;'; put 'set work.staging_ds;'; put 'length errmsg $1000;'; put 'drop err:;'; put '/* KM1 validations */'; put 'if XLMAP_ID=''BASEL-KM1'' then do;'; put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;'; put 'errmsg=''Should be greater than 100'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* CR2 Validations */'; put 'if XLMAP_ID=''BASEL-CR2'' then do;'; put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;'; put 'errmsg=''Should be negative'';'; put 'err=1;'; put 'end;'; put 'end;'; put '/* publish error message */'; put 'if err=1 then do;'; put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);'; put 'call symputx(''errmsg'',errmsg);'; put 'call symputx(''abort'',1);'; put 'end;'; put 'run;'; put '%mp_abort(iftrue=(&abort ne 0)'; put ',mac=xlmap_data_postedit'; put ',msg=%superq(errmsg)'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/lineage; %let service=fetchcollineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro meta_mapper('; put 'baseds=work.allmap /* base table to contain metamapping (two level) */'; put ', stageds=col_meta /* temp table to append to base*/'; put ', metaid=OMSOBJ:Column\A5HOSDWY.BF00LWQT'; put ', direction=REVERSE /* either REVERSE or FORWARDS */'; put ', level=0 /* system var - show level of nesting */'; put ', job= /* system var - avoid looping same source */'; put ', levelcheck=50 /* system var - avoid going too deep down the rabbit hole */'; put ', append=NO /* system var - when YES means appending within nested loop */'; put ');'; put '%if &level>&levelcheck %then %return;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%if &direction=REVERSE %then %do;'; put '%let start=Target;'; put '%let finish=Source;'; put '%end;'; put '%else %do;'; put '%let start=Source;'; put '%let finish=Target;'; put '%end;'; put '%if &append=NO %then %do;'; put 'proc datasets lib=work;'; put 'delete %scan(&baseds,2,.);'; put 'quit;'; put '%let index_statement=(index=(HASH/unique));'; put '%end;'; put '%else %let index_statement=;'; put 'data &stageds &index_statement ;'; put 'length HASH $32'; put 'jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform targettablename targetcolname targetcoluri'; put 'uri targettableuri tfmuri sourcetableuri scuri tpuri tmpuri mturi $256'; put 'Derived_Rule $500 Marker_ID Name_ID N_Name LibRef engine sourcePublicType'; put 'targetPublicType $64;'; put 'keep HASH jobname sourcetablename sourcecolname sourcecoluri'; put 'map_type map_transform'; put 'targettablename targetcolname targetcoluri Derived_Rule level;'; put '/* proc transpose logic only */'; put 'length sourceshorttablename sourcemembertype sourcelocation'; put 'assoc assocuri name sturi foundrefuri foundfinishuri'; put 'targetshorttablename targetlocation targetmembertype trafoName $256'; put 'sourceshorttableuri sourceshortcoluri checkrdm targetshorttableuri'; put 'targetshortcoluri selected_direction $17'; put 'lturi _location $200;'; put 'call missing (of _all_);'; put '&start.coluri="&METAID";'; put 'level=&level;'; put '/* first get table associated with the column */'; put 'if metadata_getnasn(&start.coluri,''Table'',1,&start.tableuri)=0 then do;'; put 'putlog "ERR" "OR: Table not found";'; put 'stop;'; put 'end;'; put 'rc=metadata_getattr(&start.tableuri,"Name",&start.tablename);'; put 'rc=metadata_getattr(&start.coluri,"Name",&start.colname);'; put 'rc=metadata_getattr(&start.tableuri,''PublicType'',&start.PublicType);'; put 'if (metadata_getnasn(&start.tableuri, "TablePackage",1, tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&start.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&start.tablename'; put ');'; put 'end;'; put 'else if (&start.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&start.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&start.tablename);'; put 'end;'; put 'else &start.tablename = ''work. ''||trim(lowcase(&start.tablename));'; put '/* now loop the Source / TargetFeatureMaps */'; put 'tfm=1;'; put 'do while(metadata_getnasn(&start.coluri,"&start.FeatureMaps",tfm,tfmuri)>0);'; put 'call missing(derived_rule);'; put 'rc=metadata_getattr(tfmuri,''TransformRole'',map_type);'; put '/* get job and step name */'; put 'if (metadata_getnasn(tfmuri,''AssociatedClassifierMap'',1,tmpuri)<1) then'; put 'do;'; put 'rc=metadata_getnasn(tfmuri,"&finish.Transformations",1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''AssociatedClassifierMap'',1,tmpuri);'; put 'end ;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',map_transform);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'if Map_Type = ''DERIVED'' then do;'; put 'if(metadata_getnasn(tfmuri,"SourceCode",1, scuri)>0) then do;'; put '/* standard */'; put 'mturi=tfmuri;'; put 'end;'; put 'else do;'; put '/* some SQL joins store transform rules elsewhere */'; put 'rc=metadata_getnasn(tfmuri,"Feature&start.s",1, tmpuri);'; put 'if (metadata_getnasn(tmpuri,"Variables",1, tmpuri)>0)'; put 'then rc=metadata_getnasn(tmpuri,"OwningTransformation",1, mturi);'; put 'else rc=metadata_getnasn(tfmuri,"Transformation&start.s",1, mturi);'; put 'rc=metadata_getnasn(mturi,"SourceCode",1, scuri);'; put 'end;'; put 'rc=metadata_getattr(scuri,"StoredText",Derived_Rule);'; put 'Derived_Rule = compress(Derived_Rule,''0A''x);'; put '/* loop to generate derived rule (swap ref numbers for col descs) */'; put 'sv=1;'; put 'do while(metadata_getnasn(mturi,"SubstitutionVariables",sv,tmpuri)>0);'; put 'rc=metadata_getattr(tmpuri,"Marker",Marker_ID);'; put 'rc=metadata_getattr(tmpuri,"Name",Name_ID);'; put 'N_Name = compress(scan(Name_ID,2,''-''));'; put 'Derived_Rule=tranwrd('; put 'Derived_Rule,compress(Marker_ID),compress(N_Name)'; put ');'; put 'sv+1;'; put 'end;'; put 'end;'; put '/* get source col attributes */'; put 'fs=1;'; put 'do while(metadata_getnasn(tfmuri,"Feature&finish.s",fs,&finish.coluri)>0);'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put 'rc=metadata_getattr(&finish.tableuri,''PublicType'',&finish.PublicType);'; put 'if (metadata_getnasn(&finish.tableuri,"TablePackage",1,tpuri)>0) then'; put 'do;'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put 'else if (&finish.PublicType="ExternalFile") then do;'; put 'rc=metadata_getnasn(&finish.tableuri, "OwningFile",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefs",1, tmpuri);'; put 'rc=metadata_getnasn(tmpuri, "FileRefLocations",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,''FileName'',&finish.tablename);'; put 'end;'; put 'else &finish.tablename=compress(''work.''||lowcase(&finish.tablename));'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'fs+1;'; put 'end;'; put 'tfm+1;'; put 'end;'; put '/* No finish URI found - so proceed to see if this is due to transpose */'; put 'if missing(&finish.coluri)'; put 'and (metadata_getnasn(&start.tableuri,"&start.ClassifierMaps",1,tmpuri)>0)'; put 'then do;'; put 'length trafoname $256;'; put 'call missing(trafoName);'; put 'rc=metadata_getattr(tmpuri,''Name'',trafoName);'; put '/* get &finsh.tablename and jobname */'; put 'rc=metadata_getnasn(tmpuri,"Classifier&finish.s",1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'rc=metadata_getnasn(tmpuri,''Steps'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Activities'',1,tmpuri);'; put 'rc=metadata_getnasn(tmpuri,''Jobs'',1,tmpuri);'; put 'rc=metadata_getattr(tmpuri,''Name'',jobname);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put 'rc1=metadata_getnasl(&finish.tableuri,n1,assoc);'; put 'if (assoc="Columns") then do;'; put 'rc2=1;n2=1;'; put 'do while(rc2>0 and missing(foundfinishuri));'; put '/* Walk through all column associations: SpecSourceTransformations*/'; put 'rc2=metadata_getnasn(&finish.tableuri,trim(assoc),n2,assocuri);'; put '/* REVERSE */'; put '%if ("&direction." = "REVERSE") %then %do;'; put 'if metadata_getnasn(assocuri,"SpecSourceTransformations",1,sturi)>0'; put 'then do;'; put 'rc=metadata_getattr(sturi,"Name",name);'; put '/* SAS Transpose: varColumns */'; put 'if (name ="varColumns") then do;'; put 'foundfinishuri = "true"; /* do a while exit */'; put 'put "scource colname name=" name;'; put 'put "scource colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOONE";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get SAS Folder location of the table */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose vertical";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end; /* (name = "_VALUE_COLUMN") */'; put 'end; /* (metadata_getnasn(assocuri2,"Spec&finish.xxx",1,sturi)>0) */'; put '%end; /* &direction = "REVERSE" */'; put '/* FORWARDS: if TargetFeatureMaps not available: -> target! */'; put '%if ("&direction." = "FORWARDS") %then %do;'; put 'if (metadata_getnasn(assocuri,"TargetFeatureMaps",1,sfuri)<0)'; put 'then do;'; put 'rc=metadata_getattr(assocuri,"Name",name);'; put 'if not missing(assocuri) then do;'; put 'put "target colname name=" name;'; put 'put "target colname uri=" assocuri;'; put '&finish.coluri=assocuri;'; put '&finish.shortcoluri=substr('; put '&finish.coluri,find(&finish.coluri, ''\'')+1'; put ');'; put 'rc=metadata_getattr(&finish.coluri,''Name'',&finish.colname);'; put 'rc=metadata_getnasn(&finish.coluri,''Table'',1,&finish.tableuri);'; put 'rc=metadata_getattr(&finish.tableuri,''Name'',&finish.tablename);'; put '&finish.shorttablename=&finish.tablename;'; put 'map_type = "ONETOMANY";'; put '/* get MemberType */'; put 'rc=metadata_getattr('; put '&finish.tableuri,"MemberType",&finish.membertype'; put ');'; put '&finish.shorttableuri = substr('; put '&finish.tableuri,find(&finish.tableuri, ''\'')+1'; put ');'; put 'rc=metadata_getattr('; put '&finish.shorttableuri,"PublicType",&finish.publictype'; put ');'; put 'if metadata_getnasn('; put '&finish.shorttableuri,"TablePackage",1,tpuri'; put ')>0'; put 'then do;'; put '/* init LibRef to overwrite previous for &start!!! */'; put 'call missing (LibRef);'; put 'rc=metadata_getattr(tpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tpuri,"Engine",engine);'; put 'if missing(libref) then do;'; put 'rc=metadata_getnasn(tpuri, "UsedByPackages",1, tmpuri);'; put 'rc=metadata_getattr(tmpuri,"Libref",LibRef);'; put 'rc=metadata_getattr(tmpuri,"Engine",engine);'; put 'end;'; put '&finish.shorttablename=&finish.tablename;'; put '&finish.tablename=cats('; put 'upcase(LibRef),''-'',upcase(engine),''.'',&finish.tablename'; put ');'; put 'end;'; put '/* get table''s SAS Folder location */'; put 'if &finish.publictype eq "Table" then do;'; put 'lturi=&finish.shorttableuri;'; put 'rc=metadata_getnasn(lturi,"Trees",1,lturi);'; put 'rc=metadata_getattr(lturi,"Name",&finish.location);'; put 'tree=1;'; put 'do while (tree>0);'; put 'tree=metadata_getnasn(lturi,"ParentTree",1,lturi);'; put 'if tree > 0 then do;'; put 'rc=metadata_getattr(lturi,"Name",_location);'; put '&finish.location=catx(''/'',_location,&finish.location);'; put 'end;'; put 'end;'; put '&finish.location = ''/''||&finish.location;'; put 'end;'; put 'map_transform = trafoName;'; put 'derived_rule = "Transpose horizontal";'; put '/* do a lookup to see if this record has been loaded before,'; put 'IF base table exists */'; put 'hash=put(md5('; put 'cats(jobname,sourcecoluri,map_type,map_transform,targetcoluri)'; put '),$hex32.);'; put '%if %sysfunc(exist(&baseds)) %then %do;'; put 'set &baseds(keep=hash) key=hash/unique;'; put 'if _iorc_ ne 0 then do;'; put '/* hash did not exist, hence this is a new record */'; put 'output;'; put '_error_=0;'; put 'end;'; put '%end;'; put '%else %do;'; put 'output;'; put '%end;'; put 'end;'; put 'end;'; put '%end; /* (&direction = "FORWARDS" */'; put 'call missing(assocuri);'; put 'n2+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* (assoc="Columns") */'; put 'call missing(assoc);'; put 'n1+1;'; put 'end; /* while(rc1>0) */'; put 'end; /* missing(&finish.coluri) */'; put '/* ################# end mapping for Transpose flat ################# */'; put 'stop;'; put 'run;'; put 'proc append base=&baseds data=&stageds;'; put 'run;'; put 'data _null_;'; put 'set &stageds;'; put 'call execute(''%meta_mapper(metaid=''!!&finish.coluri'; put '!!",baseds=&baseds"'; put '!!",direction=&direction"'; put '!!",level=%eval(&level+1)"'; put '!!",levelcheck=&levelcheck"'; put '!!",job="!!jobname'; put '!!",append=YES)");'; put 'run;'; put '%mend meta_mapper;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch the metadata and server as dotlang'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li bitemporal_dataloader.sas'; put '@li meta_mapper.sas'; put '@version 9.4'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global column_id direction refresh;'; put '/* enable col id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%let max_depth=50;'; put '%put &=inds;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''column_id'',coluri);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''refresh'',refresh);'; put 'if input(max_depth,8.)>0 then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth &=refresh;'; put 'data info;'; put 'length coluri colname taburi tabname liburi libref $256;'; put 'call missing(of _all_);'; put 'if metadata_getattr("&column_id","Name",colname)<0 then do;'; put 'putlog "Col &column_id not found";'; put 'call symputx(''syscc'',''1234'');'; put 'stop;'; put 'end;'; put 'rc=metadata_getnasn("&column_id","Table",1,taburi);'; put 'rc=metadata_getattr(taburi,"Name",tabname);'; put 'rc=metadata_getnasn(taburi,"TablePackage",1,liburi);'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'call symputx(''lib'',libref);'; put 'call symputx(''tab'',tabname);'; put 'call symputx(''col'',colname);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro launcher();'; put '/* check whether a lineage run already taken place */'; put 'proc sql noprint;'; put 'create table existing_data as'; put 'select * from &mpelib..mpe_lineage_cols'; put 'where col_id="&column_id"'; put 'and direction="%substr(&direction,1,1)";'; put '/* no data, so make some, and append it */'; put '%if &sqlobs=0 or &refresh=1 %then %do;'; put '%meta_mapper(metaid=&column_id'; put ', direction=&direction /* either REVERSE or FORWARDS */'; put ', baseds=work.allmap'; put ', levelcheck=%eval(&max_depth-1)'; put ')'; put 'data append;'; put 'length col_id $32 direction $1 modified_by $64;'; put 'retain col_id "&column_id";'; put 'retain direction "%substr(&direction,1,1)";'; put '%global modified_by modified_dttm;'; put '%let modified_dttm=%sysfunc(datetime());'; put 'retain modified_dttm &modified_dttm;'; put 'retain modified_by "%mf_getuser()";'; put '%let modified_by=%mf_getuser();'; put 'set allmap;'; put 'drop hash;'; put 'run;'; put 'proc sort data=append out=appendme nodupkey;'; put 'by col_id direction sourcecoluri targetcoluri map_type map_transform;'; put 'run;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_lineage_cols'; put ',append_dsn=appendme'; put ',PK=col_id direction sourcecoluri targetcoluri map_type map_transform'; put ',etlsource=&_program'; put ',loadtype=UPDATE'; put ',close_vars=col_id direction'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%else %do;'; put '/* data exists, so use it */'; put 'data work.allmap(drop=modified_by modified_dttm);'; put 'set existing_data(drop=col_id direction );'; put 'if _n_=1 then do;'; put 'call symputx(''modified_by'',modified_by,''g'');'; put 'call symputx(''modified_dttm'',modified_dttm,''g'');'; put 'end;'; put 'where level < &max_depth;'; put 'run;'; put '%end;'; put '%mend launcher;'; put '%launcher()'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put 'options noquotelenmax;'; put '%macro fcmpconditional();'; put '%if &sysver=9.3 and &sysscp=WIN %then %do;'; put '/* nothing - as the FCMP function causes an exception err in this case */'; put '%end;'; put '%else %do;'; put '/* prepare quick func to enable word wrapping of transformations */'; put 'options cmplib=work.funcs;'; put 'proc fcmp outlib=work.funcs.macrocore;'; put 'function wordwrap(str $,cols,splitchar $) $;'; put 'length outstr $32767 curstr $5000;'; put 'base=0;'; put 'put str=;'; put 'do i=1 to countw(str,'' '','' '');'; put 'curstr=scan(str,i,'' '');'; put 'outstr=trim(outstr)!!'' ''!!curstr;'; put 'base=base+length(curstr)+1;'; put 'if base>cols then do;'; put 'outstr=cats(outstr,splitchar);'; put 'base=0;'; put 'end;'; put 'end;'; put 'return (outstr);'; put 'endsub;'; put 'run;'; put '%end;'; put '%mend fcmpconditional;'; put '%fcmpconditional()'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table jobs as select distinct jobname as job from work.allmap ;'; put 'create table cols as select distinct upcase(scan(cat,1,''.-'')) as tmplib'; put ',cats(calculated tmplib,''.'',upcase(scan(cat,2,''.''))) as tmptab'; put ',cats(calculated tmptab,''.'',upcase(col)) as col'; put 'from (select sourcetablename as cat, sourcecolname as col from work.allmap'; put 'union select targettablename as cat, targetcolname as col from work.allmap )'; put 'having findc(tmplib,''/\'')=0 and tmplib ne ''WORK'';'; put 'create table files as select distinct file'; put 'from (select sourcetablename as file from work.allmap'; put 'where findc(sourcetablename,''/\'')>0'; put 'union select targettablename as file from work.allmap'; put 'where findc(targettablename,''/\'')>0'; put ') ;'; put 'create table libs as select distinct tmplib as lib from cols;'; put 'create table tabs as select distinct tmptab as tab from cols;'; put 'data _null_;'; put 'file tmp;'; put 'put ''digraph G {'; put 'concentrate=true;'; put 'node [style=filled,shape=plain];'; put 'labelloc = "t";'; put ''';'; put 'label= "label=<'; put ''; put ''; put ''; put ''; put ''; put ''; put '
&direction Lineage for &col
Library:
&libGenerated by:&modified_by
Table:&tabGenerated on:'; put '%sysfunc(round(&modified_dttm,2),datetime19.)
>";'; put 'put label;'; put 'if "FORWARD"="&direction" then call symputx(''dirdesc'',''Impacted'');'; put 'else call symputx(''dirdesc'',''Source'');'; put '/* close out if there is no lineage */'; put 'if nobs=0 then put ''x [label="No lineage found" shape=Mdiamond]}'';'; put 'set work.allmap nobs=nobs;'; put 'stop;'; put 'run;'; put 'data graphviz1;'; put 'file tmp mod;'; put 'length line arrow $1000 stab ttab slib tlib $100 sbox tbox tooltip $500;'; put 'if _n_=1 then call missing(line, sbox, tbox, tooltip);'; put 'set work.allmap ;'; put 'sourceid=sourcecoluri;'; put 'targetid=targetcoluri;'; put 'if index(sourcetablename,'':'') then do;'; put 'slib='''';'; put 'stab=sourcetablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'stab=scan(sourcetablename,-1,''/\'');'; put 'slib=subpad(sourcetablename,1,length(sourcetablename)-length(stab));'; put 'end;'; put 'else do;'; put 'slib=scan(sourcetablename,1,''.'');'; put 'stab=scan(sourcetablename,2,''.'');'; put 'end;'; put 'if index(targettablename,'':'') then do;'; put 'tlib='''';'; put 'ttab=targettablename;'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'ttab=scan(targettablename,-1,''/\'');'; put 'tlib=subpad(targettablename,1,length(targettablename)-length(ttab));'; put 'end;'; put 'else do;'; put 'tlib=scan(targettablename,1,''.'');'; put 'ttab=scan(targettablename,2,''.'');'; put 'end;'; put 'if trim(derived_rule) ne '''' then do;'; put 'derived_rule=tranwrd(derived_rule,''"'',''\"'');'; put '%macro quick();'; put '%if "&sysver"="9.3" and "&sysscp"="WIN" %then %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',derived_rule,''"]'');'; put '%end;'; put '%else %do;'; put 'arrow=cats(''[color=Red, fontcolor=Red, penwidth="3", arrowsize="2",'''; put ',''label=">>'',map_transform,''<<\n'',wordwrap(derived_rule,24,''\n''),''"]'');'; put '%end;'; put '%mend quick; %quick()'; put 'end;'; put 'else arrow=cats(''[ label="'',map_transform,''"]'');'; put 'source=quote(strip(sourceid));'; put 'target=quote(strip(targetid));'; put 'put '' '' source '' -> '' target arrow;'; put 'run;'; put 'data graphviz2 (keep=id tab lib col tooltip map_transform);'; put 'set graphviz1 (rename=(source=id stab=tab slib=lib sourcecolname=col ))'; put 'graphviz1 (rename=(target=id ttab=tab tlib=lib targetcolname=col ));'; put 'if upcase(lib)=:''WORK'' then tooltip=cats('',tooltip="Job:'',jobname,''"'');'; put 'else tooltip='''';'; put 'run;'; put 'proc sort data=graphviz2 out=graphviz3 noduprec; by _all_; run;'; put 'data _null_;'; put 'length shape $100 ;'; put 'set graphviz3 end=last;'; put 'file tmp mod;'; put 'tab=tranwrd(tab,''\'',''\\'');'; put 'tab=tranwrd(tab,''&'',''&'');'; put 'lib=tranwrd(lib,''&'',''&'');'; put 'if upcase(lib)=:''WORK'' then do;'; put 'lib=''WORK'';'; put 'put id ''[label=<
Table'' tab'; put '''
Column'' col'; put '''
> ,fillcolor=lightgrey, shape=" " '' tooltip '']'';'; put 'end;'; put 'else if map_transform=''File Reader'' then do;'; put 'put id ''[label="Location: '' lib ''\nFile:'' tab ''\nColumn: '' col'; put '''",shape=parallelogram, fillcolor="#00b300"'' tooltip '']'';'; put 'end;'; put 'else do;'; put 'engine=scan(lib,2,''-'');'; put 'lib=scan(lib,1,''-'');'; put 'if engine=''BASE'' then fillcolour=''lightyellow '';'; put 'else fillcolour=''lightblue'';'; put 'shape='' shape=cylinder, fillcolor= ''!!fillcolour;'; put 'put id ''[label=<
Library'' lib'; put '''
Table'' tab'; put '''
Column'' col'; put '''
> ,'' shape tooltip '']'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file tmp mod;'; put '/* close out if records exist */'; put 'set work.allmap;'; put 'put ''}'';'; put 'stop;'; put 'run;'; put 'data flatdata;'; put 'length type $8 item $256;'; put 'keep type item;'; put 'set cols(in=cols) tabs(in=tabs) files(in=files) libs(in=libs) jobs(in=jobs);'; put 'if cols then do;'; put 'type=''Column'';'; put 'item=col;'; put 'end;'; put 'else if tabs then do;'; put 'type=''Table'';'; put 'item=tab;'; put 'end;'; put 'else if files then do;'; put 'type=''File'';'; put 'item=file;'; put 'end;'; put 'else if libs then do;'; put 'type=''Library'';'; put 'item=lib;'; put 'end;'; put 'else if jobs then do;'; put 'type=''Job'';'; put 'item=job;'; put 'end;'; put 'run;'; put 'data fromSAS;'; put 'infile tmp end=last;'; put 'file tmp;'; put 'input ;'; put 'string=_infile_;'; put 'put string;'; put 'run;'; put 'filename tmp clear;'; put '/* get list of IDs so frontend can make a clickable list */'; put 'proc sql;'; put 'create table ids as select distinct id from graphviz3;'; put '%webout(OPEN)'; put '%webout(OBJ,fromSAS)'; put '%webout(OBJ,ids,dslabel=clickableIDS)'; put '%webout(OBJ,info)'; put '%webout(OBJ,flatdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=fetchtablelineage; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch Table Lineage for SAS 9'; put 'Some nice ideas for formatting are available here:'; put 'https://renenyffenegger.ch/notes/tools/Graphviz/examples/index'; put '

SAS Macros

'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global table_id direction graphOrientation;'; put '/* enable table id and direction to be passed as url params */'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put '%let max_depth=50;'; put 'data _null_;'; put 'length max_depth $ 8;'; put 'set &inds;'; put 'call symputx(''table_id'',table_id);'; put 'call symputx(''direction'',direction);'; put 'call symputx(''graphOrientation'',''LR'');'; put 'if max_depth>''0'' then call symputx(''max_depth'',max_depth);'; put 'putlog (_all_)(=);'; put 'run;'; put '%put &=max_depth;'; put '%mp_abort(iftrue= (&table_id=undefined)'; put ',mac=&_program'; put ',msg=%str(Table_id UNDEFINED provided from frontend)'; put ')'; put 'data work.info;'; put 'length tableid tablename liburi $64 libref $8;'; put 'drop rc;'; put 'tableid="&table_id";'; put 'call missing(liburi);'; put 'rc=metadata_getattr(tableid,"Name",tablename);'; put 'if metadata_getnasn(tableid,"TablePackage",1,liburi)>0 then do;'; put 'rc=metadata_getattr(liburi,"Libref",libref);'; put 'libref=upcase(libref);'; put 'end;'; put 'tablename=upcase(tablename);'; put 'if missing(libref) then libref=''nolib'';'; put 'call symputx(''libds'',cats(libref,''.'',tablename));'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%let src=%sysfunc(ifc(&direction=REVERSE,src,tgt));'; put '%let tgt=%sysfunc(ifc(&direction=REVERSE,tgt,src));'; put 'data work.sourcetable/view=work.sourcetable;'; put 'set &mpelib..MPE_LINEAGE_TABS;'; put 'where &dc_dttmtfmt. lt tx_to ;'; put 'drop tx_from tx_to;'; put 'run;'; put '%macro recursivejoin(iter=0'; put ',maxiter=&max_depth /* avoid infinite loop */'; put ');'; put '%if &iter=0 %then %do;'; put 'data work.baseds ;'; put 'retain level 0;'; put 'set work.sourcetable;'; put 'where &tgt.tableid="&table_id";'; put 'run;'; put '%let iter=1;'; put 'proc sql;'; put '%end;'; put '%else %if &iter>&maxiter %then %return;'; put 'create table work.appendds as'; put 'select distinct &iter as level'; put ',b.*'; put 'from work.baseds a'; put 'left join work.sourcetable b'; put 'on a.&src.tableid=b.&tgt.tableid'; put 'where a.level=%eval(&iter.-1)'; put 'and b.&src.tableid is not null'; put 'and a.&src.tableid is not null'; put 'and a.&src.tableid ne ''N/A'';'; put '%let obs=&sqlobs;'; put 'insert into work.baseds select * from work.appendds;'; put '%if &obs %then %do;'; put '%recursivejoin(iter=%eval(&iter.+1) )'; put '%end;'; put '%mend recursivejoin;'; put '%recursivejoin()'; put 'proc sql;'; put 'create table work.final as'; put 'select distinct *'; put 'from work.baseds(drop=level)'; put 'where jobid is not null;'; put '/* generate graphviz */'; put 'filename tmp "%sysfunc(pathname(work))\GraphViz%sysfunc(datetime()).txt"'; put 'lrecl=10000 encoding=''utf-8'';'; put '/* prepare label with metadata */'; put 'proc sql;'; put 'create table work.jobs as'; put 'select distinct jobid'; put ', jobname'; put ',quote(cats(jobid))||'' [label=''||quote(cats(jobname))||''];'' as line'; put 'from work.final;'; put 'create table work.tables as'; put 'select distinct &src.tableid as tableid'; put ',&src.tablename as tablename'; put ',&src.libref as libref'; put 'from work.final'; put 'where &src.tableid ne ''N/A'''; put 'union select'; put '&tgt.tableid as tableid'; put ',&tgt.tablename as tablename'; put ',&tgt.libref as libref'; put 'from work.final'; put 'where &tgt.tableid ne ''N/A'''; put 'order by libref, tablename;'; put 'create table idlookup as'; put 'select tableid as metaid'; put ',''TABLE'' as metatype'; put ',cats(libref,''.'',tablename) as metaname'; put 'from work.tables'; put 'union'; put 'select jobid as metaid'; put ',''JOB'' as metatype'; put ',jobname as metaname'; put 'from work.jobs'; put 'order by metaid;'; put 'data CRAYONS;'; put 'length attribute value $8;'; put 'infile datalines4 dsd;'; put 'input attribute value;'; put 'call symput(cats(''col'',_n_),quote(trim(value)));'; put 'datalines;'; put 'red,#e6194b'; put 'green,#3cb44b'; put 'blue,#4363d8'; put 'orange,#f58231'; put 'purple,#911eb4'; put 'cyan,#46f0f0'; put 'magenta,#f032e6'; put 'lime,#bcf60c'; put 'pink,#fabebe'; put 'teal,#008080'; put 'lavender,#e6beff'; put 'brown,#9a6324'; put 'beige,#fffac8'; put 'maroon,#800000'; put 'mint,#aaffc3'; put 'olive,#808000'; put 'apricot,#ffd8b1'; put 'navy,#000075'; put 'gray,#808080'; put 'black,#00000'; put 'yellow,#ffe119'; put 'white,#ffffff'; put ';;;;'; put 'run;'; put 'proc sort data=work.tables out=work.libs nodupkey;'; put 'by libref;'; put 'run;'; put 'data work.alllibs;'; put 'set work.libs end=last;'; put 'length line $1000. ;'; put 'crayon=symget(cats(''col'',_n_));'; put 'call symputx(libref,crayon);'; put 'if _n_=1 then do;'; put 'line=''subgraph cluster_libs { label="Libraries";'';output;'; put 'end;'; put 'line=cats(libref)!!'' [label=''||quote(cats(libref))||''; style="filled"; color='''; put '||cats(crayon)||'', shape = Mrecord, fontcolor=white]'';output;'; put 'if last then do;'; put 'line=''}'';output;'; put 'end;'; put 'run;'; put 'data alltables;'; put 'length line $1000. ;'; put 'set work.tables;'; put 'crayon=symget(libref);'; put 'line=quote(cats(tableid))||'' [label="''||cats(tablename)'; put '!!''", color=''!!cats(crayon)'; put '!!'', shape=cylinder,style=filled,fontcolor=white];'';'; put 'output;'; put 'run;'; put 'proc sort'; put 'data=final(keep=&src.tableid jobid &src.libref) out=&src.relations nodupkey;'; put 'by &src.tableid jobid;'; put 'proc sort'; put 'data=final(keep=&tgt.tableid jobid &tgt.libref) out=&tgt.relations nodupkey;'; put 'by jobid &tgt.tableid;'; put 'run;'; put 'data srcrelations;'; put 'set srcrelations;'; put 'length line $1000;'; put 'where srctableid ne ''N/A'';'; put 'line=cats('; put '''"'',cats(srctableid),''" -> "'',jobid,''" [color='',symget(srclibref),''];'''; put ');'; put 'data tgtrelations;'; put 'set tgtrelations;'; put 'where tgttableid ne ''N/A'';'; put 'length line $1000;'; put 'line=cats('; put '''"'',cats(jobid),''" -> "'',tgttableid,''" [color='',symget(tgtlibref),''];'''; put ');'; put 'run;'; put 'data finalfinal;'; put 'set work.alllibs(keep=line) work.alltables (keep=line) work.jobs(keep=line)'; put 'work.&src.relations(keep=line) work.&tgt.relations(keep=line) end=last;'; put 'if _N_ = 1 then do;'; put 'firstline=line;'; put 'line=''strict digraph "''!!"&libds"!!''" {''; output;'; put 'line="rankdir=&graphOrientation; nodesep=0.5; node [shape = octagon];";output;'; put 'line=firstline;'; put 'end;'; put 'output;'; put 'if last then do;'; put 'line=''}'';'; put 'output;'; put 'end;'; put 'drop firstline;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,finalfinal)'; put '%webout(OBJ,info)'; put '%webout(OBJ,final,dslabel=flatdata)'; put '%webout(OBJ,idlookup)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetacols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetacols.sas'; put '@brief List the cols as defined in metadata'; put '@details Provide a table uri and get list of columns'; put '

SAS Macros

'; put '@li mm_getcols.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global tableuri;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''tableuri'',scan(tableuri,-1,''\''));'; put 'run;'; put '%put &=tableuri;'; put '/* load parameters */'; put '%mm_getcols(tableuri=&tableuri,outds=metacols)'; put 'data out;'; put 'set metacols;'; put 'keep col:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,out,dslabel=metacols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getmetatables; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getmetatables.sas'; put '@brief List the tables as defined in metadata'; put '@details Provide a library uri and get list of tables'; put '

SAS Macros

'; put '@li mm_gettables.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global liburi;'; put '%let exist=%sysfunc(exist(work.SASControlTable));'; put '%let inds=%sysfunc(ifc(&exist=1,SASControlTable,_null_));'; put '%put &=inds;'; put 'data _null_;'; put 'set &inds;'; put 'call symputx(''liburi'',liburi);'; put 'run;'; put '/* load parameters */'; put '%mm_gettables(uri=&liburi,outds=metatables,getauth=NO)'; put 'data out;'; put 'set metatables;'; put 'keep table:;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,metatables)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/metanav; %let service=metadetails; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getdetails(uri'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ')/*/STORE SOURCE*/;'; put 'data &outassocs;'; put 'keep assoc assocuri name;'; put 'length assoc assocuri name $256;'; put 'call missing(of _all_);'; put 'rc1=1;n1=1;'; put 'do while(rc1>0);'; put '/* Walk through all possible associations of this object. */'; put 'rc1=metadata_getnasl("&uri",n1,assoc);'; put 'rc2=1;n2=1;'; put 'do while(rc2>0);'; put '/* Walk through all the associations on this machine object. */'; put 'rc2=metadata_getnasn("&uri",trim(assoc),n2,assocuri);'; put 'if (rc2>0) then do;'; put 'rc3=metadata_getattr(assocuri,"Name",name);'; put 'output;'; put 'end;'; put 'call missing(name,assocuri);'; put 'n2+1;'; put 'end;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by assoc name;'; put 'run;'; put 'data &outattrs;'; put 'keep type name value;'; put 'length type $4 name $256 value $32767;'; put 'rc1=1;n1=1;type=''Prop'';name='''';value='''';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnprp("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'rc1=1;n1=1;type=''Attr'';'; put 'do while(rc1>0);'; put 'rc1=metadata_getnatr("&uri",n1,name,value);'; put 'if rc1>0 then output;'; put 'n1+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by type name;'; put 'run;'; put '%mend mm_getdetails;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metadetails.sas'; put '@brief Retrieves metadata attributes and associations for a particular object'; put '@details'; put '

SAS Macros

'; put '@li mm_getdetails.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put '%mm_getdetails(&objecturi'; put ',outattrs=work.attributes'; put ',outassocs=work.associations'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,attributes)'; put '%webout(OBJ,associations)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metaobjects; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_getobjects('; put 'type=SASLibrary'; put ',outds=work.mm_getobjects'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"$METAREPOSITORY'; put '&typeSAS'; put '0"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Id";'; put 'put "characterstring200";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/&type/@Name";'; put 'put "characterstring200";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getobjects;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metaobjects.sas'; put '@brief Retrieves list of objects for a particular metadata type'; put '@details'; put '

SAS Macros

'; put '@li mm_getobjects.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put 'options metarepository=&repo;'; put '%mm_getobjects('; put 'type=&metatype'; put ',outds=work.objects'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,objects)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metarepos; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metarepos.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_getrepos.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mm_getrepos(outds=work.repos)'; put 'data outrepos;'; put 'set repos;'; put 'if repositorytype in (''CUSTOM'',''FOUNDATION'');'; put 'keep id name description;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,outrepos)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=metatypes; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_gettypes('; put 'outds=work.mm_gettypes'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put ''; put 'SAS'; put ''; put '2048'; put ''; put ''; put '$METAREPOSITORY'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put ''//GetTypes/Types/Type'';'; put 'put ''64'';'; put 'put ''//GetTypes/Types/Type/@Id'';'; put 'put ''256'';'; put 'put ''//GetTypes/Types/Type/@Desc'';'; put 'put '''';'; put 'put ''//GetTypes/Types/Type/@HasSubtypes'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.sastypes out=&outds;'; put 'by id;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_gettypes;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file metatypes.sas'; put '@brief Retrieves list of metadata types'; put '@details'; put '

SAS Macros

'; put '@li mm_gettypes.sas'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mm_gettypes(outds=work.types)'; put '%webout(OPEN)'; put '%webout(OBJ,types)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/public; %let service=getchangeinfo; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getchangeinfo.sas'; put '@brief Returns the details for an approval diff'; put '@details'; put '

SAS Macros

'; put '@li mf_getengine.sas'; put '@li dc_assignlib.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let table=;'; put 'data _null_;'; put 'set SASControlTable;'; put 'call symputx(''table'',table);'; put 'run;'; put '%dc_assignlib(WRITE,%scan(&table,1,.))'; put '%let max_ver_dttm=0;'; put 'data APPROVE1;'; put 'set &mpelib..mpe_submit'; put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));'; put 'where TABLE_ID="&TABLE";'; put 'TABLE_NM=cats(base_lib,''.'',base_ds);'; put 'BASE_TABLE=table_nm;'; put 'call symputx(''base_lib'',base_lib);'; put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);'; put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);'; put 'run;'; put 'data jsParams;'; put 'set approve1;'; put 'LIB_ENGINE="%mf_getEngine(&base_lib)";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,jsParams)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getcols; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getcols.sas'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getvalue.sas'; put '@li mp_abort.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%mf_getvalue(work.iwant,libds);'; put '%dc_assignlib(READ,%scan(&ds,1,.))'; put 'proc contents noprint data=&ds'; put 'out=droplist1 (keep=name type length label varnum format:);'; put 'run;'; put 'data cols(keep=name type length varnum format label);'; put 'set droplist1(rename=(format=format2 type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if format2='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else format=cats(format2,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if format2='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(format2,''.'');'; put 'else if formatd=0 then format=cats(format2,formatl,''.'');'; put 'else format=cats(format2,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,cols)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getcolvals; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_getVarFormat(libds /* two level ds name */'; put ', var /* variable name from which to return the format */'; put ', force=0'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vformat rc vlen vtype;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable format */'; put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let rc = %sysfunc(close(&dsid));'; put '%return;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* supply a default if no format available */'; put '%if %length(&vformat)<2 & &force=1 %then %do;'; put '%let vlen = %sysfunc(varlen(&dsid, &vnum));'; put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%if &vtype=C %then %let vformat=$&vlen..;'; put '%else %let vformat=best.;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable format */'; put '&vformat'; put '%mend mf_getVarFormat;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Retrieves column info to enable population of dropdowns'; put '@details An optional filterquery may be provided, if so then it is validated'; put 'and then used to filter the subsequent results.'; put '

Service Inputs

'; put '
IWANT
'; put 'The STARTROW and ROWS variables are used to fetch additional values beyond'; put 'the initial default (4000).'; put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
VALS
'; put 'The type of this column actually depends on the underlying column type, so it can change'; put '|FORMATTED|UNFORMATTED|'; put '|---|---|'; put '|$44.00|44|'; put '
META
'; put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|'; put '|---|---|---|---|'; put '|COL_NAME|DOLLAR8.2|4001|1000'; put '

SAS Macros

'; put '@li mf_existds.sas'; put '@li mf_getvalue.sas'; put '@li mf_verifymacvars.sas'; put '@li dc_assignlib.sas'; put '@li mf_getvarformat.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_filtercheck.sas'; put '@li mp_filtergenerate.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd.'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* input table may or may not exist */'; put 'data work.initvars;'; put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $32767;'; put 'call missing(of _all_);'; put 'stop;'; put 'data work.filterquery;'; put 'set %sysfunc(ifc('; put '%mf_existds(work.filterquery)=1'; put ',work.filterquery'; put ',work.initvars'; put '));'; put 'run;'; put '/* print data for debugging */'; put 'data _null_;'; put 'set work.iwant;'; put 'put (_all_)(=);'; put 'run;'; put 'data _null_;'; put 'set work.filterquery;'; put 'put (_all_)(=);'; put 'run;'; put '%let libds=%mf_getvalue(work.iwant,libds);'; put '%let col2=%mf_getvalue(work.iwant,col);'; put '%let is_fmt=0;'; put '%let startrow=1;'; put '%let rows=4000;'; put '%put &=libds;'; put '%put &=col2;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )'; put ')'; put '%dc_assignlib(WRITE,%scan(&libds,1,.))'; put 'data _null_;'; put 'call missing(startrow,rows);'; put 'set work.iwant;'; put '/* check if the request is for a format catalog */'; put 'call symputx(''orig_libds'',libds);'; put 'is_fmt=0;'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'is_fmt=1;'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'call symputx(''startrow'',coalesce(startrow,&startrow));'; put 'call symputx(''rows'',coalesce(rows,&rows));'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&orig_libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '/**'; put '* Validate the filter query'; put '*/'; put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)'; put '/**'; put '* Prepare the query'; put '*/'; put '%mp_filtergenerate(work.filterquery,outref=myfilter)'; put '/* cannot %inc in a sql where clause, only data step, so - use a view */'; put 'data work.vw_vals/view=work.vw_vals;'; put 'set &libds;'; put 'where %inc myfilter;;'; put 'run;'; put 'proc sql;'; put 'create view work.vw_vals_sorted as'; put 'select distinct'; put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,'; put '&col2 as unformatted'; put 'from work.vw_vals;'; put '/* restrict num of output values */'; put 'data work.vals;'; put 'set work.vw_vals_sorted;'; put 'if _n_ ge &startrow;'; put 'x+1;'; put 'if x>&rows then stop;'; put 'drop x;'; put 'run;'; put 'data vals;'; put '/* ensure empty value if table is empty, for dropdowns */'; put 'if nobs=0 then output;'; put 'set vals nobs=nobs;'; put 'format unformatted ;'; put 'output;'; put 'run;'; put 'proc sql noprint;'; put 'select count(*) into: nobs from work.vw_vals_sorted;'; put 'data meta;'; put 'column="&col2";'; put 'sasformat="%mf_getVarFormat(&libds,&col2)";'; put 'startrow=&startrow;'; put 'rows=&rows;'; put 'nobs=&nobs;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,vals,missing=STRING,showmeta=YES)'; put '%webout(OBJ,meta)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getddl; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_existfileref(fref'; put ')/*/STORE SOURCE*/;'; put '%local rc;'; put '%let rc=%sysfunc(fileref(&fref));'; put '%if &rc=0 %then %do;'; put '1'; put '%end;'; put '%else %if &rc<0 %then %do;'; put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;'; put '1'; put '%end;'; put '%else %do;'; put '0'; put '%end;'; put '%mend mf_existfileref;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema='; put ',applydttm=NO'; put ')/*/STORE SOURCE*/;'; put '/* check fileref is assigned */'; put '%if %mf_existfileref(&fref)=0 %then %do;'; put 'filename &fref temp ;'; put '%end;'; put '%if %length(&libref)=0 %then %let libref=WORK;'; put '%let flavour=%upcase(&flavour);'; put 'proc sql noprint;'; put 'create table _data_ as'; put 'select * from dictionary.tables'; put 'where upcase(libname)="%upcase(&libref)"'; put 'and memtype=''DATA'' /* views not currently supported */'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local tabinfo; %let tabinfo=&syslast;'; put 'create table _data_ as'; put 'select * from dictionary.columns'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put ';'; put '%local colinfo; %let colinfo=&syslast;'; put '%local dsnlist;'; put 'select distinct upcase(memname) into: dsnlist'; put 'separated by '' '''; put 'from &syslast'; put ';'; put 'create table _data_ as'; put 'select * from dictionary.indexes'; put 'where upcase(libname)="%upcase(&libref)"'; put '%if %length(&ds)>0 %then %do;'; put 'and upcase(memname)="%upcase(&ds)"'; put '%end;'; put 'order by idxusage, indxname, indxpos'; put ';'; put '%local idxinfo; %let idxinfo=&syslast;'; put '/* Extract all Primary Key and Unique data constraints */'; put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)'; put '%local colconst; %let colconst=&syslast;'; put '%macro addConst();'; put '%global constraints_used;'; put 'data _null_;'; put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;'; put 'set &colconst('; put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))'; put ') end=last;'; put 'file &fref mod;'; put 'by constraint_type constraint_name;'; put 'retain constraints_used;'; put 'constraint_name_orig=constraint_name;'; put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';'; put 'else ctype=strip(constraint_type);'; put '%if &flavour=TSQL %then %do;'; put 'column_name=catt(''['',column_name,'']'');'; put 'constraint_name=catt(''['',constraint_name,'']'');'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put 'column_name=catt(''"'',column_name,''"'');'; put 'constraint_name=catt(''"'',constraint_name,''"'');'; put '%end;'; put 'if first.constraint_name then do;'; put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);'; put 'put " ,CONSTRAINT " constraint_name ctype "(" ;'; put 'put '' '' column_name;'; put 'end;'; put 'else put '' ,'' column_name;'; put 'if last.constraint_name then do;'; put 'put " )";'; put 'call symput(''constraints_used'',strip(constraints_used));'; put 'end;'; put 'run;'; put '%put &=constraints_used;'; put '%mend addConst;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";'; put 'run;'; put '%local x curds;'; put '%if &flavour=SAS %then %do;'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";'; put 'put "proc sql;";'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'length lab $1024 typ $20;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table &libref..&curds(";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view &libref..&curds(";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'if length(format)>1 then fmt=" format="!!cats(format);'; put 'if length(label)>1 then'; put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");'; put 'if notnull=''yes'' then notnul='' not null'';'; put 'if type=''char'' then typ=cats(''char('',length,'')'');'; put 'else if length ne 8 then typ=''num length=''!!cats(length);'; put 'else typ=''num'';'; put 'put name typ fmt notnul lab;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '/* ds=cats(libname,''.'',memname); */'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;'; put 'put '' '' name ;'; put 'end;'; put 'else put '' ,'' name ;'; put '*else put '' ,'' name ;'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '/*'; put 'ods output IntegrityConstraints=ic;'; put 'proc contents data=testali out2=info;'; put 'run;'; put '*/'; put '%end;'; put '%end;'; put '%else %if &flavour=TSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''SQLSVR'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* TSQL Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "create table [&schema].[&curds](";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "create view [&schema].[&curds](";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';'; put '%end;'; put 'else if type=''num'' then fmt=''[decimal](18,2)'';'; put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';'; put 'else fmt=cats(''[varchar](max)'');'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put 'put "[" name +(-1) "]" fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put '*ds=cats(libname,''.'',memname);'; put 'if first.indxname then do;'; put '/* add nonclustered in case of multiple unique indexes */'; put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';'; put 'put '' ['' name +(-1) '']'';'; put 'end;'; put 'else put '' ,['' name +(-1) '']'';'; put 'if last.indxname then do;'; put 'put '' )'';'; put 'end;'; put 'run;'; put 'data _null_;'; put 'file &fref mod;'; put 'put '')'';'; put 'put ''GO'';'; put 'run;'; put '/* add extended properties for labels */'; put 'data _null_;'; put 'file &fref mod;'; put 'length nm $64 lab $1024;'; put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;'; put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");'; put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");'; put 'put '' '';'; put 'put "EXEC sys.sp_addextendedproperty ";'; put 'put " @name=N''MS_Description'',@value=" lab ;'; put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";'; put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";'; put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;'; put 'if last then put ''GO'';'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &flavour=PGSQL %then %do;'; put '/* if schema does not exist, set to be same as libref */'; put '%local schemaactual;'; put 'proc sql noprint;'; put 'select sysvalue into: schemaactual'; put 'from dictionary.libnames'; put 'where upcase(libname)="&libref" and engine=''POSTGRES'';'; put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));'; put 'data _null_;'; put 'file &fref mod;'; put 'put "CREATE SCHEMA &schema;";'; put '%do x=1 %to %sysfunc(countw(&dsnlist));'; put '%let curds=%scan(&dsnlist,&x);'; put '%local curdsvarcount;'; put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);'; put '%if &curdsvarcount>1600 %then %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* &libref..&curds contains &curdsvarcount vars */";'; put 'put "/* Postgres cannot create tables with over 1600 vars */";'; put 'put "/* No DDL will be generated for this table";'; put 'run;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'file &fref mod;'; put 'put "/* Postgres Flavour DDL for &schema..&curds */";'; put 'data _null_;'; put 'file &fref mod;'; put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;'; put 'length fmt $32;'; put 'if _n_=1 then do;'; put 'if memtype=''DATA'' then do;'; put 'put "CREATE TABLE &schema..&curds (";'; put 'end;'; put 'else do;'; put '/* just a placeholder - we filter out views at the top */'; put 'put "CREATE VIEW &schema..&curds (";'; put 'end;'; put 'put " "@@;'; put 'end;'; put 'else put " ,"@@;'; put 'format=upcase(format);'; put 'if 1=0 then; /* dummy if */'; put '%if &applydttm=YES %then %do;'; put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';'; put '%end;'; put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';'; put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';'; put 'if notnull=''yes'' then notnul='' NOT NULL'';'; put '/* quote column names in case they represent reserved words */'; put 'name2=quote(trim(name));'; put 'put name2 fmt notnul;'; put 'run;'; put '/* Extra step for data constraints */'; put '%addConst()'; put 'data _null_;'; put 'file &fref mod;'; put 'put '');'';'; put 'run;'; put '/* Create Unique Indexes, but only if they were not already defined within'; put 'the Constraints section. */'; put 'data _null_;'; put '*length ds $128;'; put 'set &idxinfo('; put 'where=('; put 'memname="&curds"'; put 'and unique=''yes'''; put 'and indxname not in ('; put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))'; put ')'; put ')'; put ');'; put 'file &fref mod;'; put 'by idxusage indxname;'; put 'if first.indxname then do;'; put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";'; put 'put '' "'' name +(-1) ''"'' ;'; put 'end;'; put 'else put '' ,"'' name +(-1) ''"'';'; put 'if last.indxname then do;'; put 'put '');'';'; put 'end;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%if %upcase(&showlog)=YES %then %do;'; put 'options ps=max;'; put 'data _null_;'; put 'infile &fref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%end;'; put '%mend mp_getddl;'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Download DDL for a table or entire library in a particular flavour.'; put '@details'; put '

SAS Macros

'; put '@li mddl_sas_cntlout.sas'; put '@li dc_assignlib.sas'; put '@li mf_existds.sas'; put '@li mp_abort.sas'; put '@li mp_getddl.sas'; put '@li mp_streamfile.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global libref ds flavour;'; put '%let flavour=%sysfunc(coalescec(&flavour,SAS));'; put '%mpeinit()'; put '%dc_assignlib(READ,&libref)'; put 'data _null_;'; put '/* check if the request is for a format catalog */'; put 'ds=symget(''ds'');'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'libds=cats(symget(''libref''),''.'',ds);'; put 'putlog "Format Catalog Captured";'; put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');'; put 'call symputx(''libref'',''work'');'; put 'call symputx(''ds'',''fmtextract'');'; put 'end;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)'; put ',mac=&_program'; put ',msg=%str(Dataset &libref..&ds was not found)'; put ')'; put '%let tmploc=%sysfunc(pathname(work))/temp.txt;'; put 'filename tmp "&tmploc";'; put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)'; put '%mp_streamfile(contenttype=TEXT'; put ',inloc=%str(&tmploc)'; put ',outname=&libref._&ds..ddl'; put ')'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getgroups; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file getgroups.sas'; put '@brief List all SAS Groups'; put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it'; put 'can be available to the sasjs/server configurator'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '

Data Outputs

'; put '
groups
'; put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|'; put '|---|---|---|'; put '|`SomeGroup `|`A group `|`1`|'; put '|`Another Group`|`this is a different group`|`2`|'; put '|`admin`|`Administrators `|`3`|'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%dc_getgroups(outds=groups)'; put '%webout(OPEN)'; put '%webout(OBJ,groups)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=getrawdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_ds2cards(base_ds, tgt_ds='; put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"'; put ',maxobs=max'; put ',random_sample=NO'; put ',showlog=YES'; put ',outencoding='; put ',append=NO'; put ')/*/STORE SOURCE*/;'; put '%local i setds nvars;'; put '%if not %sysfunc(exist(&base_ds)) %then %do;'; put '%put %str(WARN)ING: &base_ds does not exist;'; put '%return;'; put '%end;'; put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;'; put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;'; put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);'; put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";'; put '%if ("&append" = "" or "&append" = "NO") %then %let append=;'; put '%else %let append=mod;'; put '/* get varcount */'; put '%let nvars=0;'; put 'proc sql noprint;'; put 'select count(*) into: nvars from dictionary.columns'; put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";'; put '%if &nvars=0 %then %do;'; put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;'; put '%return;'; put '%end;'; put '/* get indexes */'; put 'proc sort'; put 'data=sashelp.vindex('; put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"'; put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")'; put ')'; put 'out=_data_;'; put 'by indxname indxpos;'; put 'run;'; put '%local indexes;'; put 'data _null_;'; put 'set &syslast end=last;'; put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');'; put 'by indxname indxpos;'; put 'length vars $32767 nom uni $8;'; put 'retain vars;'; put 'if first.indxname then do;'; put 'idxcnt+1;'; put 'nom='''';'; put 'uni='''';'; put 'vars=name;'; put 'end;'; put 'else vars=catx('' '',vars,name);'; put 'if last.indxname then do;'; put 'if nomiss=''yes'' then nom=''/nomiss'';'; put 'if unique=''yes'' then uni=''/unique'';'; put 'call symputx(''indexes'''; put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)'; put ',''l'');'; put 'end;'; put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');'; put 'run;'; put 'data;run;'; put '%let setds=&syslast;'; put 'proc sql'; put '%if %datatyp(&maxobs)=NUMERIC %then %do;'; put 'outobs=&maxobs;'; put '%end;'; put ';'; put 'create table &setds as select * from &base_ds'; put '%if &random_sample=YES %then %do;'; put 'order by ranuni(42)'; put '%end;'; put ';'; put 'reset outobs=max;'; put 'create table datalines1 as'; put 'select name,type,length,varnum,format,label from dictionary.columns'; put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"'; put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";'; put '/**'; put 'Due to long decimals cannot use best. format'; put 'So - use bestd. format and then use character functions to strip trailing'; put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets'; put 'note2err when there are missings.'; put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0'; put ',put(VARIABLE,best32.)'; put ',substrn(put(VARIABLE,bestd32.),1'; put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));'; put '**/'; put 'data datalines_2;'; put 'format dataline $32000.;'; put 'set datalines1 (where=(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));'; put 'if type=''num'' then dataline='; put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0'; put ',put('',name,'',best32.-l)'; put ',substrn(put('',name,'',bestd32.-l),1'; put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');'; put '/**'; put '* binary data must be converted, to store in text format. It is identified'; put '* by the presence of the $HEX keyword in the format.'; put '*/'; put 'else if upcase(format)=:''$HEX'' then'; put 'dataline=cats(''put(trim('',name,''),'',format,'')'');'; put '/**'; put '* There is no easy way to store line breaks in a cards file.'; put '* To discuss this, use: https://github.com/sasjs/core/issues/80'; put '* Removing all nonprintables with kw (keep writeable)'; put '*/'; put 'else dataline=cats(''compress('',name,'', ,"kw")'');'; put 'run;'; put 'proc sql noprint;'; put 'select dataline into: datalines separated by '','' from datalines_2;'; put '%local'; put 'process_dttm_flg'; put 'valid_from_dttm_flg'; put 'valid_to_dttm_flg'; put ';'; put '%let process_dttm_flg = N;'; put '%let valid_from_dttm_flg = N;'; put '%let valid_to_dttm_flg = N;'; put 'data _null_;'; put 'set datalines1 ;'; put '/* build attrib statement */'; put 'if type=''char'' then type2=''$'';'; put 'if strip(format) ne '''' then format2=cats(''format='',format);'; put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));'; put 'str1=catx('' '',(put(name,$33.)||''length='')'; put ',put(cats(type2,length),$7.)||format2,label2);'; put '/* Build input statement */'; put 'if upcase(format)=:''$HEX'' then type3='':''!!format;'; put 'else if type=''char'' then type3='':$char.'';'; put 'str2=put(name,$33.)||type3;'; put 'if(upcase(name) = "PROCESSED_DTTM") then'; put 'call symputx("process_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_FROM_DTTM") then'; put 'call symputx("valid_from_dttm_flg", "Y", "L");'; put 'if(upcase(name) = "VALID_TO_DTTM") then'; put 'call symputx("valid_to_dttm_flg", "Y", "L");'; put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");'; put 'call symputx(cats("input_stmt_", put(_N_, 8.))'; put ', ifc(upcase(name) not in'; put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");'; put 'run;'; put 'data _null_;'; put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;'; put 'length __attrib $32767;'; put 'if _n_=1 then do;'; put 'put ''/**'';'; put 'put '' @file'';'; put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";'; put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";'; put 'put " Source: https://github.com/sasjs/core";'; put 'put '' @cond '';'; put 'put ''**/'';'; put 'put "data &tgt_ds &indexes;";'; put 'put "attrib ";'; put '%do i = 1 %to &nvars;'; put '__attrib=symget("attrib_stmt_&i");'; put 'put __attrib;'; put '%end;'; put 'put ";";'; put '%if &process_dttm_flg. eq Y %then %do;'; put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';'; put '%end;'; put '%if &valid_from_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_FROM_DTTM &low_date;'';'; put '%end;'; put '%if &valid_to_dttm_flg. eq Y %then %do;'; put 'put ''retain VALID_TO_DTTM &high_date;'';'; put '%end;'; put 'if __nobs=0 then do;'; put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';'; put 'put ''stop;'';'; put 'put ''run;'';'; put 'end;'; put 'else do;'; put 'put "infile cards dsd;";'; put 'put "input ";'; put '%do i = 1 %to &nvars.;'; put '%if(%length(&&input_stmt_&i..)) %then'; put 'put " &&input_stmt_&i..";'; put ';'; put '%end;'; put 'put ";";'; put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';'; put 'put "datalines4;";'; put 'end;'; put 'end;'; put 'set &setds end=__lastobs nobs=__nobs;'; put '/* remove all formats for write purposes - some have long underlying decimals */'; put 'format _numeric_ best30.29;'; put 'length __dataline $32767;'; put '__dataline=catq(''cqtmb'',&datalines);'; put 'put __dataline;'; put 'if __lastobs then do;'; put 'put '';;;;'';'; put 'put ''run;'';'; put 'put ''/** @endcond **/'';'; put 'stop;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &setds;'; put 'quit;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &cards_file lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '%end;'; put '%put NOTE: CARDS FILE SAVED IN:;'; put '%put NOTE-;%put NOTE-;'; put '%put NOTE- %sysfunc(dequote(&cards_file.));'; put '%put NOTE-;%put NOTE-;'; put '%mend mp_ds2cards;'; put '/** @endcond **/'; put '%macro mp_binarycopy('; put 'inloc= /* full path and filename of the object to be copied */'; put ',outloc= /* full path and filename of object to be created */'; put ',inref=____in /* override default to use own filerefs */'; put ',outref=____out /* override default to use own filerefs */'; put ',mode=CREATE'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local mod;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if &mode=APPEND %then %let mod=mod;'; put '/* these IN and OUT filerefs can point to anything */'; put '%if &inref = ____in %then %do;'; put 'filename &inref &inloc lrecl=1048576 ;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref &outloc lrecl=1048576 &mod;'; put '%end;'; put '/* copy the file byte-for-byte */'; put 'data _null_;'; put 'infile &inref lrecl=1 recfm=n;'; put 'file &outref &mod recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%if &inref = ____in %then %do;'; put 'filename &inref clear;'; put '%end;'; put '%if &outref=____out %then %do;'; put 'filename &outref clear;'; put '%end;'; put '%mend mp_binarycopy;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mfs_httpheader(header_name'; put ',header_value'; put ')/*/STORE SOURCE*/;'; put '%global sasjs_stpsrv_header_loc;'; put '%local fref fid i;'; put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;'; put '%put &=fref &=sasjs_stpsrv_header_loc;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%mend mfs_httpheader;'; put '%macro mp_streamfile('; put 'contenttype=TEXT'; put ',inloc='; put ',inref=0'; put ',iftrue=%str(1=1)'; put ',outname='; put ',outref=_webout'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let contentype=%upcase(&contenttype);'; put '%let outref=%upcase(&outref);'; put '%local platform; %let platform=%mf_getplatform();'; put '/**'; put '* check engine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put '%local streamweb;'; put '%let streamweb=0;'; put 'data _null_;'; put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));'; put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');'; put 'run;'; put '%if &contentype=CSV %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/csv'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/csv'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/csv)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=EXCEL %then %do;'; put '/* suitable for XLS format */'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype=''application/vnd.ms-excel'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="image/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"'; put 'contenttype="text/%lowcase(&contenttype)"'; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=TEXT %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/text'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt'''; put 'contenttype=''application/text'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/text)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'contenttype="font/%lowcase(&contenttype)";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))'; put '%end;'; put '%end;'; put '%else %if &contentype=XLSX %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'','; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls'''; put 'contenttype='; put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type'; put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'; put ')'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %if &contentype=ZIP %then %do;'; put '%if (&platform=SASMETA and &streamweb=1) %then %do;'; put 'data _null_;'; put 'rc=stpsrv_header(''Content-Type'',''application/zip'');'; put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");'; put 'run;'; put '%end;'; put '%else %if &platform=SASVIYA %then %do;'; put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip'''; put 'contenttype=''application/zip'''; put 'contentdisp="attachment; filename=&outname";'; put '%end;'; put '%else %if &platform=SASJS %then %do;'; put '%mfs_httpheader(Content-Type,application/zip)'; put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))'; put '%end;'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;'; put '%end;'; put '%if &inref ne 0 %then %do;'; put '%mp_binarycopy(inref=&inref,outref=&outref)'; put '%end;'; put '%else %do;'; put '%mp_binarycopy(inloc="&inloc",outref=&outref)'; put '%end;'; put '%mend mp_streamfile;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Downloads data in a variety of formats'; put '@details To enable direct download, this service runs in a dedicated stream'; put 'as a GET request using URL parameters as inputs.'; put 'The inputs are:'; put '@li table - the libds of the table to be downloaded'; put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB'; put '@li filter - the filter RK if used'; put '

SAS Macros

'; put '@li mf_verifymacvars.sas'; put '@li mf_getuser.sas'; put '@li mf_existfeature.sas'; put '@li dc_assignlib.sas'; put '@li mp_ds2cards.sas'; put '@li mp_abort.sas'; put '@li mp_binarycopy.sas'; put '@li mp_cntlout.sas'; put '@li mp_streamfile.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%global table type filter ds format is_fmt txfrom txto;'; put '%mpeinit()'; put '%let user=%mf_getuser();'; put '%let is_fmt=0;'; put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Invalid inputs: type table)'; put ')'; put '%let libds=%upcase(&table); /* actual source */'; put '%let table=%upcase(&table); /* used as label for fmt catalogs */'; put '%let lib=%scan(&table,1,.);'; put '%let ds=%scan(&table,2,.);'; put '%dc_assignlib(READ,&lib)'; put 'data _null_;'; put 'set &mpelib..MPE_TABLES;'; put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";'; put '/* if a TXTEMPORAL table then filter as such */'; put 'call symputx(''txfrom'',var_txfrom);'; put 'call symputx(''txto'',var_txto);'; put 'ds=symget(''ds'');'; put 'is_fmt=0;'; put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;'; put 'ds=scan(ds,1,''-'');'; put 'table=cats("&lib..",ds);'; put 'putlog "Format Catalog Captured";'; put 'is_fmt=1;'; put 'call symputx(''libds'',''work.fmtextract'');'; put 'call symputx(''table'',table);'; put 'end;'; put 'call symputx(''is_fmt'',is_fmt);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_cntlout('; put 'iftrue=(&is_fmt=1)'; put ',libcat=&table'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%put preparing query;'; put '%mpe_filtermaster(DLOAD,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put 'options obs=200000;/* stop limit */'; put 'data staged(drop=&txfrom &txto);'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put 'options obs=max;'; put 'options validvarname=upcase;'; put '%macro mpestp_getrawdata();'; put '%local outfile;'; put '%if &type=SAS %then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..sas;'; put '%mp_ds2cards(base_ds=staged'; put ', tgt_ds=&table'; put ', cards_file= "&outfile"'; put ', maxobs=100000)'; put '%let ext=sas;'; put '%let mimetype=text;'; put '%end;'; put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)'; put '/* cannot proc export excel if PC Files is not licensed */'; put '%then %do;'; put '%let outfile=%sysfunc(pathname(work))/&table..csv;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '%let ext=csv;'; put '%let mimetype=csv;'; put '%end;'; put '%else %if &type=EXCEL %then %do;'; put '%let ext=xlsx;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= "&outfile"'; put 'DBMS=xlsx ;'; put 'RUN;'; put '%let mimetype=XLSX;'; put '%end;'; put '%else %if &type=MARKDOWN %then %do;'; put '%let ext=md;'; put '%let outfile=%sysfunc(pathname(work))/&table..&ext;'; put 'filename mdref "&outfile" lrecl=32767;'; put '%mp_ds2md(staged,outref=mdref,showlog=NO)'; put '%let mimetype=MARKDOWN;'; put '%end;'; put '%else %if &type=WEBCSV %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=csv REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %if &type=WEBTAB %then %do;'; put 'PROC EXPORT DATA= staged'; put 'OUTFILE= _webout'; put 'DBMS=tab REPLACE;'; put 'RUN;'; put '/* don''t set headers */'; put '%return;'; put '%end;'; put '%else %do;'; put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_streamfile(contenttype=&mimetype'; put ',inloc=%str(&outfile)'; put ',outname=&table..&ext'; put ')'; put '%mend mpestp_getrawdata;'; put '%mpestp_getrawdata()'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=refreshlibinfo; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro bitemporal_closeouts('; put 'tech_from=tx_from_dttm'; put ',tech_to = tx_to_dttm /* Technical TO datetime variable.'; put 'Req''d on BASE table only. */'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE /* Name of STAGING table. */'; put ',PK= name sex /* Business key, space separated. */'; put '/* Should INCLUDE BUS_FROM field if relevant. */'; put ',NOW=DEFINE'; put ',FILTER= /* supply a filter to limit the update */'; put ',outdest= /* supply an unquoted filepath/filename.ext to get'; put 'a text file containing the update statements */'; put ',loadtype='; put ',loadtarget=YES /* if <> YES will return without changing anything */'; put ');'; put '%put ENTERING &sysmacroname;'; put '%local x var start;'; put '%let start=%sysfunc(datetime());'; put '%dc_assignlib(WRITE,&base_lib)'; put '%dc_assignlib(WRITE,&append_lib)'; put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;'; put '%put &=now;'; put '/**'; put '* perform basic checks'; put '*/'; put '/* do tables exist? */'; put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;'; put '%mp_abort(msg=&base_lib..&base_dsn does not exist)'; put '%end;'; put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0'; put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;'; put '%mp_abort(msg=&append_lib..&append_dsn does not exist)'; put '%end;'; put '/* do TX columns exist? */'; put '%if &loadtype ne UPDATE %then %do;'; put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;'; put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;'; put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%end;'; put '/* do PK columns exist? */'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)'; put '%end;'; put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;'; put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)'; put '%end;'; put '%end;'; put '/* check uniqueness */'; put 'proc sort data=&append_lib..&append_dsn'; put 'out=___closeout1 noduprecs dupout=___closeout1a;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then'; put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);'; put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */'; put '%local gap;'; put '%let gap=0;'; put 'data _null_;'; put 'now=&now;'; put 'gap=intck(''HOURS'',now,datetime());'; put 'call symputx(''gap'',gap,''l'');'; put 'run;'; put '%mf_abort('; put 'iftrue=(&gap > 24),'; put 'msg=NOW variable (&now) is not within a 24hr tolerance'; put ')'; put '/* have any warnings / errs occurred thus far? If so, abort */'; put '%mf_abort('; put 'iftrue=(&syscc>0),'; put 'msg=Aborted due to SYSCC=&SYSCC status'; put ')'; put '/**'; put '* Create closeout statements. These are sent as individual SQL statements'; put '* to ensure pass-through utilisation. The update_cnt variable monitors'; put '* how many records were actually updated on the target table.'; put '*/'; put '%local update_cnt;'; put '%let update_cnt=0;'; put 'filename tmp temp;'; put 'data _null_;'; put 'set ___closeout1;'; put 'file tmp;'; put 'if _n_=1 then put ''proc sql noprint;'' ;'; put 'length string $32767.;'; put '%if &loadtype=UPDATE %then %do;'; put 'put "delete from &base_lib..&base_dsn where 1";'; put '%end;'; put '%else %do;'; put 'now=symget(''now'');'; put 'put "update &base_lib..&base_dsn set &tech_to= " now @;'; put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;'; put 'put " ,PROCESSED_DTTM=" now @;'; put '%end;'; put 'put " where " now " lt &tech_to ";'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&PK));'; put '%let var=%scan(&pk,&x,%str( ));'; put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;'; put '/* use single quotes to avoid ampersand resolution in data */'; put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";'; put '%end;'; put '%else %do;'; put 'string=cats(" & &var=",&var);'; put '%end;'; put 'put string;'; put '%end;'; put 'put "&filter ;";'; put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';'; put 'run;'; put 'data _null_;'; put 'infile tmp;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &loadtarget ne YES %then %return;'; put '/* ensure we have a lock */'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn'; put ',ref=bitemporal_closeouts'; put ',ctl_ds=&mpelib..mpe_lockanytable'; put ')'; put 'options source2;'; put '%inc tmp;'; put 'filename tmp clear;'; put '/**'; put '* Update audit tracker'; put '*/'; put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);'; put '%local user; %let user=%mf_getuser();'; put 'proc sql;'; put 'insert into &mpelib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"'; put ',LOADTYPE="CLOSEOUT"'; put ',DELETED_RECORDS=&update_cnt'; put ',NEW_RECORDS=0'; put ',DURATION=%sysfunc(datetime())-&start'; put ',USER_NM="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%mend bitemporal_closeouts;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mf_wordsInStr1ButNotStr2('; put 'Str1= /* string containing words to extract */'; put ',Str2= /* used to compare with the extract string */'; put ')/*/STORE SOURCE*/;'; put '%local count_base count_extr i i2 extr_word base_word match outvar;'; put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; put '%put base string (str1)= &str1;'; put '%put compare string (str2) = &str2;'; put '%return;'; put '%end;'; put '%let count_base=%sysfunc(countw(&Str2));'; put '%let count_extr=%sysfunc(countw(&Str1));'; put '%do i=1 %to &count_extr;'; put '%let extr_word=%scan(&Str1,&i,%str( ));'; put '%let match=0;'; put '%do i2=1 %to &count_base;'; put '%let base_word=%scan(&Str2,&i2,%str( ));'; put '%if &extr_word=&base_word %then %let match=1;'; put '%end;'; put '%if &match=0 %then %let outvar=&outvar &extr_word;'; put '%end;'; put '&outvar'; put '%mend mf_wordsInStr1ButNotStr2;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '/** @cond */'; put '%macro mp_storediffs(libds'; put ',origds'; put ',key'; put ',delds=0'; put ',appds=0'; put ',modds=0'; put ',outds=work.mp_storediffs'; put ',loadref=0'; put ',processed_dttm=0'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put '/* set up unique and temporary vars */'; put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;'; put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));'; put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));'; put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));'; put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));'; put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));'; put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));'; put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));'; put '%let dslist=&origds;'; put '%if &delds ne 0 %then %do;'; put '%let delds=%upcase(&delds);'; put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;'; put '%let dslist=&dslist &delds;'; put '%end;'; put '%if &appds ne 0 %then %do;'; put '%let appds=%upcase(&appds);'; put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;'; put '%let dslist=&dslist &appds;'; put '%end;'; put '%if &modds ne 0 %then %do;'; put '%let modds=%upcase(&modds);'; put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;'; put '%let dslist=&dslist &modds;'; put '%end;'; put '%let origds=%upcase(&origds);'; put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;'; put '%let key=%upcase(&key);'; put '/* hash the key and append all the tables (marking the source) */'; put 'data &ds1;'; put 'set &dslist indsname=&inds_auto;'; put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);'; put '&inds_keep=upcase(&inds_auto);'; put 'proc sort;'; put 'by &inds_keep &hashkey;'; put 'run;'; put '/* transpose numeric & char vars */'; put 'proc transpose data=&ds1'; put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));'; put 'by &inds_keep &hashkey;'; put 'var _numeric_;'; put 'run;'; put 'proc transpose data=&ds1'; put 'out=&ds3('; put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)'; put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))'; put ');'; put 'by &inds_keep &hashkey;'; put 'var _character_;'; put 'run;'; put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;'; put '/* this is a format catalog - cannot query cols directly */'; put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"'; put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"'; put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";'; put '%end;'; put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);'; put 'data &ds4;'; put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;'; put 'if _n_=1 then call missing(_label_);'; put 'drop _label_;'; put 'set &ds2 &ds3 indsname=&inds_auto;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%upcase(&vlist));'; put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';'; put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;'; put 'call symputx(''syscc'',98);'; put 'end;'; put 'if &inds_keep="&appds" then move_type=''A'';'; put 'else if &inds_keep="&delds" then move_type=''D'';'; put 'else if &inds_keep="&modds" then move_type=''M'';'; put 'else if &inds_keep="&origds" then move_type=''O'';'; put 'else do;'; put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;'; put 'call symputx(''syscc'',99);'; put 'end;'; put 'tgtvar_nm=upcase(tgtvar_nm);'; put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;'; put 'else is_pk=0;'; put 'drop &inds_keep;'; put 'run;'; put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());'; put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime());'; put '%let libds=%upcase(&libds);'; put '/* join orig vals for modified & deleted */'; put 'proc sql;'; put 'create table &outds as'; put 'select "&loadref" as load_ref length=36'; put ',&processed_dttm as processed_dttm format=E8601DT26.6'; put ',"%scan(&libds,1,.)" as libref length=8'; put ',"%scan(&libds,2,.)" as dsn length=32'; put ',b.key_hash length=32'; put ',b.move_type length=1'; put ',b.tgtvar_nm length=32'; put ',b.is_pk'; put ',case when b.move_type ne ''M'' then -1'; put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0'; put 'else 1'; put 'end as is_diff'; put ',b.tgtvar_type length=1'; put ',case when b.move_type=''D'' then b.newval_num'; put 'else a.newval_num'; put 'end as oldval_num format=best32.'; put ',case when b.move_type=''D'' then .'; put 'else b.newval_num'; put 'end as newval_num format=best32.'; put ',case when b.move_type=''D'' then b.newval_char'; put 'else a.newval_char'; put 'end as oldval_char length=32765'; put ',case when b.move_type=''D'' then '''''; put 'else b.newval_char'; put 'end as newval_char length=32765'; put 'from &ds4(where=(move_type=''O'')) as a'; put 'right join &ds4(where=(move_type ne ''O'')) as b'; put 'on a.tgtvar_nm=b.tgtvar_nm'; put 'and a.key_hash=b.key_hash'; put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;'; put '%if &mdebug=0 %then %do;'; put 'proc sql;'; put 'drop table &ds1, &ds2, &ds3, &ds4;'; put '%end;'; put '%mend mp_storediffs;'; put '/** @endcond */'; put '%macro bitemporal_dataloader('; put 'bus_from= /* Business FROM datetime variable. Req''d on'; put 'STAGING & BASE tables.*/'; put ',bus_to = /* Business TO datetime variable. Req''d on'; put 'STAGING & BASE tables. */'; put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/'; put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */'; put ',tech_from= /* Technical FROM datetime variable. Req''d on'; put 'BASE table only. */'; put ',tech_to = /* Technical TO datetime variable. Req''d on BASE'; put 'table only. */'; put ',processed= 0'; put ',base_lib=WORK /* Libref of the BASE table. */'; put ',base_dsn=BASETABLE /* Name of BASE table. */'; put ',append_lib=WORK /* Libref of the STAGING table. */'; put ',append_dsn=APPENDTABLE'; put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */'; put ',PK= name sex'; put ',RK_UNDERLYING='; put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */'; put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular'; put 'SCD2 loader then set this switch to YES to'; put 'ensure the MAXKEYTABLE is updated with the'; put 'current maximum RK value for the target table'; put '*/'; put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is'; put 'unique on its business key */'; put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in'; put '&dclib..DATALOADS */'; put ',LOADTYPE=BITEMPORAL'; put ',RK_MAXKEYTABLE= mpe_maxkeyvalues'; put ',LOG=1 /* Switch to 0 to prevent records being added to'; put '&mpelib..mpe_DATALOADS (ie when testing)*/'; put ',DELETE_COL= _____DELETE__THIS__RECORD_____'; put '/* If this variable is found in the append dataset'; put 'then records are closed out (or deleted) in the'; put 'append table where that variable= "Yes" */'; put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off'; put 'target table load and generate temp tables only */'; put ',CLOSE_VARS='; put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is'; put 'no facility to close out removed records (all records are'; put 'assumed new or changed). But how does one determine which'; put 'records are removed? Short of loading the entire table'; put 'each time? This parameter allows a set of variables'; put '(this should be a subset of the PK) to be declared, and'; put 'the macro will determine which records in the base table'; put 'need to be closed out ahead of the load.'; put 'For instance, given the following:'; put 'Base Table Staging Table'; put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT'; put 'JAN ACME4 66 JAN ACME4 66'; put 'FEB ACME4 99 FEB ACME4 99'; put 'FEB ACME1 22'; put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,'; put 'the "FEB PAG 22" record would get closed out.'; put '*/'; put ',config_table=&dclib..MPE_CONFIG'; put ',dclib=&dc_libref'; put ',outds_del=work.outds_del'; put ',outds_add=work.outds_add'; put ',outds_mod=work.outds_mod'; put ',outds_audit=0'; put ');'; put '/* when changing this macro, update the version num here */'; put '%local ver;'; put '%let ver=32;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */'; put '/* return straight away if nothing to load */'; put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);'; put '%if &nobs=-1 %then %do;'; put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;'; put '%end;'; put '%if &nobs=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/* hard exit if err condition exists */'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)'; put ')'; put '%local engine_type;'; put '%let engine_type=%mf_getengine(&base_lib);'; put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0'; put '%then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%return;'; put '%end;'; put '/**'; put '* The metadata functions (eg mf_existvar) will fail if the base table has a'; put '* SAS lock. So, make a snapshot of the base table for further use.'; put '* Also, make output tables (regardless).'; put '*/'; put '%local basecopy;'; put '%let basecopy=%mf_getuniquename(prefix=basecopy);'; put 'data &basecopy &outds_mod &outds_add &outds_del;'; put 'set &base_lib..&base_dsn;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (&syscc > 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)'; put ')'; put '%local cols idx_pk md5_col ;'; put '%let md5_col=___TMP___md5;'; put '%let check_uniqueness=%upcase(&check_uniqueness);'; put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);'; put '%let high_date=%unquote(&high_date);'; put '%let loadtype=%upcase(&loadtype);'; put '/* ensure irrelevant variables are cleared */'; put '%if &loadtype=BUSTEMPORAL %then %do;'; put '%let tech_from=;'; put '%let tech_to=;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put '%let bus_from=;'; put '%let bus_to=;'; put '%end;'; put '/* ensure relevant variables are supplied */'; put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing BUS_FROM / BUS_TO)'; put ')'; put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Missing TECH_FROM / TECH_TO)'; put ')'; put '/**'; put '* drop any tables (may be defined as views or vice versa preventing overwrite)'; put '*/'; put '%mp_dropmembers(append bitemp0_append bitemp_cols)'; put '/* SQL Server requires its own time values */'; put '/* 9.2 will only give picture format down to seconds. 9.3 allows'; put 'milliseconds by using lower S and defining the decimal in the format name..*/'; put 'PROC FORMAT;'; put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);'; put 'RUN;'; put '%local dbnow;'; put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'data _null_;'; put '/* convert space separated macvar to comma separated for SQL processing */'; put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');'; put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');'; put 'now=&dbnow;'; put 'call symputx(''NOW'',now,''L'');'; put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');'; put 'length etlsource $100;'; put 'etlsource=subpad(symget(''etlsource''),1,100);'; put 'call symputx(''etlsource'',etlsource,''l'');'; put 'run;'; put '/**'; put '* Even if no PROCESSED var provided, assume that any variable named'; put '* PROCESSED_DTTM should be updated'; put '*/'; put '%if &processed=0 %then %do;'; put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)'; put '%then %let processed=PROCESSED_DTTM;'; put '%else %let processed=;'; put '%end;'; put '/* extract colnames for md5 creation / change tracking */'; put 'proc contents noprint data=&base_lib..&base_dsn'; put 'out=work.bitemp_cols (keep=name type length varnum format:);'; put 'run;'; put 'proc sql noprint;'; put 'select name into: cols separated by '','''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put 'else cats(''put(md5(trim(put(ifn(missing('''; put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end'; put 'into: stripcols separated by ''||'''; put 'from work.bitemp_cols'; put 'where upcase(name) not in'; put '(%upcase("&bus_from","&bus_to"'; put ',"&tech_from","&tech_to"'; put ',"&processed","&delete_col")) ;'; put '/* set default formats*/'; put '%let bus_from_fmt = datetime19.;'; put '%let bus_to_fmt = datetime19.;'; put '%let processed_fmt = datetime19.;'; put '%let tech_from_fmt = format=datetime19.;'; put '%let tech_to_fmt = format=datetime19.;'; put '%put &=stripcols;'; put '%put &=pk;'; put 'data _null_;'; put 'set work.bitemp_cols;'; put 'if type=2 or type=6 then do;'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'if format='''' then fmt=cats(length,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put 'if upcase(name)="%upcase(&bus_from)" then'; put 'call symputx(''bus_from_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&bus_to)" then'; put 'call symputx(''bus_to_fmt'',fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_from)" then'; put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&tech_to)" then'; put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');'; put 'else if upcase(name)="%upcase(&processed)" then'; put 'call symputx(''processed_fmt'',fmt,''L'');'; put 'run;'; put '%if %index(%quote(&cols),___TMP___) %then %do;'; put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim('; put ') This may conflict with temp variable generation!!);'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);'; put '%let syscc=5;'; put '%return;'; put '%end;'; put '/* if transaction dates appear on the APPEND table, need to remove them */'; put '%local drop_tx_dates /* used in append table */'; put 'drop_tx_dates_noobs /* used to take the base table structure */;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)'; put '%then %let drop_tx_dates=&tech_from;'; put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)'; put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;'; put '%if %length(%trim(&drop_tx_dates))>0'; put '%then %let drop_tx_dates=(drop=&drop_tx_dates);'; put '%if %mf_existvar(&basecopy, &tech_from)'; put '%then %let drop_tx_dates_noobs=&tech_from;'; put '%if %mf_existvar(&basecopy, &tech_to)'; put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;'; put '%if %length(%trim(&drop_tx_dates_noobs))>0'; put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);'; put '%else %let drop_tx_dates_noobs=(obs=0);'; put '/**'; put '* Lock the table. This is necessary as we are doing a two part update (first'; put '* closing records then appending new records). It is theoretically possible'; put '* that an upload may occur whilst preparing the staging tables. And the'; put '* staging tables are about to be prepared..'; put '*/'; put '%if &LOADTARGET = YES %then %do;'; put '%put locking &base_lib..&base_dsn;'; put '%mp_lockanytable(LOCK,'; put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%put locking &outds_audit;'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put '/* not an actual load, so avoid updating the max key table in next step. */'; put '%let rk_update_maxkeytable=NO;'; put '%end;'; put '%if %length(&RK_UNDERLYING)>0 %then %do;'; put '%mp_retainedkey('; put 'base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=&append_lib'; put ',append_dsn=&append_dsn'; put ',retained_key=&pk'; put ',business_key=&rk_underlying'; put ',check_uniqueness=&CHECK_UNIQUENESS'; put ',outds=work.append'; put '%if &rk_update_maxkeytable=NO %then %do;'; put ',maxkeytable=0'; put '%end;'; put '%else %do;'; put ',maxkeytable=&dclib..&RK_MAXKEYTABLE'; put '%end;'; put ',locktable=&dclib..mpe_lockanytable'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',filter_str=%str( (where=( &now < &tech_to)) )'; put '%end;'; put ')'; put '%end;'; put '%else %do;'; put 'proc sql;'; put 'create view work.append as select * from &append_lib..&append_dsn;'; put '%end;'; put '/**'; put '* generate md5 for append table'; put '*/'; put '/* it is possible the source dataset has additional (unwanted) columns.'; put 'Drop if specified; */'; put '%if %length(&keepvars)>0 %then %do;'; put '/* remove tech dates from keepvars as they are generated later */'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));'; put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));'; put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);'; put '%end;'; put '/* CAS varchar types cause append issues here, so perform autoconvert'; put 'by creating empty local table first */'; put 'data;'; put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;'; put 'run;'; put '%local emptybasetable; %let emptybasetable=&syslast;'; put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put '/* apply formats for bitemporal vars but not tx dates which are added later */'; put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;'; put 'format &bus_from &bus_from_fmt;'; put 'format &bus_to &bus_to_fmt;'; put '%end;'; put 'set &emptybasetable /* base table reqd in case append has fewer cols */'; put 'work.append &drop_tx_dates;'; put '%if %length(%str(&bus_from_override))>0 %then %do;'; put '&bus_from= %unquote(&bus_from_override) ;'; put '%end;'; put '%if %length(%str(&bus_to_override))>0 %then %do;'; put '&bus_to= %unquote(&bus_to_override) ;'; put '%end;'; put 'length &md5_col $32;'; put '&md5_col=put(md5(&stripcols),hex32.);'; put '%if %length(&processed)>0 %then %do;'; put 'format &processed &processed_fmt;'; put '&processed=&now;'; put '%end;'; put '/**'; put '* If a delete column exists then create the delete dataset'; put '*/'; put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;'; put 'drop &delete_col;'; put 'if upcase(&delete_col) = "YES" then output &outds_del ;'; put 'else output work.bitemp0_append ;'; put 'run;'; put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=%scan(&outds_del,-1,.)'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '%else %do;'; put 'output work.bitemp0_append;'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc gt 0 at line 494)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%if %length(&close_vars)>0 %then %do;'; put '/**'; put '* need to close out records that are not provided'; put '*/'; put 'proc sql;'; put 'create table bitemp1_closevars1 as'; put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)'; put 'from &base_lib..&base_dsn a'; put 'inner join work.bitemp0_append b'; put 'on 1=1'; put '/* join on closevars key */'; put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));'; put '%let idx_val=%scan(&close_vars,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* filter base on tech dates if necessary */'; put '%if &loadtype=TXTEMPORAL %then %do;'; put 'where a.&tech_from <=&now and &now < a.&tech_to'; put '%end;'; put ';'; put 'create table bitemp1_closevars2 as'; put 'select distinct a.*'; put 'from bitemp1_closevars1 a'; put 'left join work.bitemp0_append b'; put 'on 1=1'; put '/* join on primary key */'; put '%do idx_pk=1 %to %sysfunc(countw(&pk));'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '/* identify removed records by null value in a field in PK but not close_vars'; put '*/'; put 'where b.%scan('; put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )'; put ') IS NULL'; put ';'; put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;'; put '%bitemporal_closeouts('; put 'tech_from=&tech_from'; put ',tech_to = &tech_to'; put ',base_lib=&base_lib'; put ',base_dsn=&base_dsn'; put ',append_lib=work'; put ',append_dsn=bitemp1_closevars2'; put ',PK=&bus_from &pk'; put ',NOW=&dbnow'; put ',loadtarget=&loadtarget'; put ',loadtype=&loadtype'; put ')'; put '%end;'; put '%end;'; put '/* return if nothing to load (was just deletes) */'; put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;'; put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;'; put '%put NOTE- No updates - just deletes!;'; put '%put NOTE-;%put NOTE-;%put NOTE-;'; put '%end;'; put '/**'; put '* If applying manual overrides to business dates, then the input table MUST'; put '* be unique on the PK. Check, and if not - abort.'; put '*/'; put '%local msg;'; put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES'; put '%then %do;'; put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;'; put 'by &pk;'; put 'run;'; put '%if %mf_getattrn(work.bitemp0_check,NLOBS)'; put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)'; put '%then %do;'; put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);'; put '%end;'; put '%end;'; put '/**'; put '* extract from BASE table. Only want matching records, as could be very BIG.'; put '* New records are subsequently identified via left join and test for nulls.'; put '*/'; put '%local temp_table temp_table2 base_table baselib_schema;'; put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;'; put '%if &engine_type=OLEDB %then %do;'; put '%let temp_table=##BITEMP_&base_dsn;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from [dbo].&base_dsn'; put 'where convert(datetime,&SQLNOW) < &tech_to );'; put '%else %let base_table=[dbo].&base_dsn;'; put 'proc sql;'; put 'create table &base_lib.."&temp_table"n as'; put 'select * from work.bitemp0_append;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '/* grab schema */'; put '%let baselib_schema=%mf_getschema(&base_lib);'; put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;'; put '/* grab redshift config */'; put '%local redcnt; %let redcnt=0;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'data _null_;'; put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));'; put 'x+1;'; put 'call symputx(cats(''rednm'',x),var_value,''l'');'; put 'call symputx(cats(''redval'',x),var_value,''l'');'; put 'call symputx(''redcnt'',x,''l'');'; put 'run;'; put '%end;'; put '/* cannot persist temp tables so must create a temporary permanent table */'; put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=(select * from &baselib_schema.&base_dsn'; put 'where timestamp &sqlnow < &tech_to );'; put '%else %let base_table=&baselib_schema.&base_dsn;'; put '/* make empty table first - must clone & drop extra cols as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &temp_table alter sortkey none) by myAlias;'; put '%end;'; put '%local dropcols;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(&pk)'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;'; put '%end;'; put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp0/view=work.vw_bitemp0;'; put 'set work.bitemp0_append(keep=&pk &md5_col);'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&temp_table'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=work.vw_bitemp0 force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'create table work.bitemp0_base as select * from connection to myAlias('; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);'; put 'data &temp_table;'; put 'set work.bitemp0_append;'; put 'run;'; put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);'; put 'proc fedsql sessref=dcsession;'; put 'create table &bitemp0base{options replace=true} as'; put '%end;'; put '%else %do;'; put '%let temp_table=work.bitemp0_append;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then'; put '%let base_table=&base_lib..&base_dsn'; put '(where=(&tech_from <=&now and &now < &tech_to));'; put '%else %let base_table=&base_lib..&base_dsn;'; put 'proc sql;'; put 'create table work.bitemp0_base as'; put '%end;'; put 'select a.&md5_col /* this identifies NEW records */'; put ', b.*'; put '/* assume first PK field cannot be null (if defined in a PK constraint then'; put 'it definitely cannot be null) */'; put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG'; put 'from &baselib_schema.&temp_table a'; put 'left join &base_table b'; put 'on 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put '); proc sql; drop table &base_lib.."&temp_table"n;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put ';'; put 'quit;'; put 'data work.bitemp0_base;'; put 'set &bitemp0base;'; put 'run;'; put 'proc sql;'; put 'drop table &temp_table;'; put 'drop table &bitemp0base;'; put '%end;'; put '%else %do;'; put ';'; put '%end;'; put '/**'; put '* matching & changed records are those without NULL key values'; put '* &idx_val resolves to rightmost PK value (loop above)'; put '*/'; put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;'; put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)'; put ')'; put '%put hashcols2=&stripcols;'; put 'proc sql;'; put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as'; put 'select *'; put ', put(md5(&stripcols),$hex32.) as &md5_col'; put 'from work.bitemp0_base (drop=&md5_col)'; put 'where ___TMP___NEW_FLG=0;'; put '/**'; put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base'; put '*/'; put 'proc sql;'; put 'create table &outds_add'; put '(drop=&md5_col'; put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;'; put '&delete_col'; put '%end;'; put ')'; put 'as select a.*'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put ',&now as &tech_from &tech_from_fmt'; put ',&high_date as &tech_to &tech_to_fmt'; put '%end;'; put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */'; put ', work.bitemp0_base b /* BASE records (contains null values for new) */'; put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */'; put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */'; put '/**'; put '* identify INSERTS. These are records with the same business key but'; put '* the bus_from and bus_to value are higher / lower (respectively)'; put '* such that the existing record needs to be SPLIT to surround the new'; put '* record.'; put '* eg: OLD RECORD from=1 to=10'; put '* NEW RECORD from=5 to=7'; put '*'; put '* APPENDED RECORDS:'; put '* - from=1 to=5'; put '* - from=5 to=7'; put '* - from=7 to=10'; put '*/'; put '/* inserts cannot happen with TXTEMPORAL */'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* IDENTIFY */'; put 'create table work.bitemp3_inserts as'; put 'select b.*'; put ',a.&bus_from as ___TMP___from'; put ',a.&bus_to as ___TMP___to'; put 'from work.bitemp0_append a'; put ',work.bitemp1_current b'; put 'where a.&bus_from > b.&bus_from'; put 'and a.&bus_to < b.&bus_to'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields may'; put 'not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '/* SPLIT */'; put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;'; put 'set work.bitemp3_inserts;'; put 'by &pk &bus_from &bus_to &processed;'; put 'if first.&idx_val then do;'; put '___TMP___retain=&bus_to;'; put '&bus_to=___TMP___from;'; put 'output;'; put '&bus_to=___TMP___retain;'; put 'end;'; put 'if last.&idx_val then do;'; put '&bus_from=___TMP___to;'; put 'output;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* TX temporal load */'; put 'data work.bitemp3a_inserts;'; put 'set work.bitemp1_current;'; put 'stop;'; put 'run;'; put '%end;'; put '/* APPEND */'; put 'proc sql;'; put 'create view work.bitemp3a_view as'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put 'data bitemp3b_newbase;'; put 'set work.bitemp3a_inserts work.bitemp3a_view;'; put 'run;'; put '/** do not use! this converts short numerics into 8 bytes'; put 'proc sql;'; put 'create table work.bitemp3b_newbase as'; put 'select * from work.bitemp3a_inserts'; put 'union corr'; put 'select * from work.bitemp1_current'; put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);'; put '*/'; put '/**'; put '* identify CHANGED records from staging.'; put '* Same business key with different temporal dates or md5 value'; put '* This table must be overlayed onto / into existing business history'; put '*/'; put 'proc sql;'; put 'create table work.bitemp4_updated as select distinct a.*'; put 'from work.bitemp0_append a'; put ',work.bitemp3b_newbase b'; put 'where 1=1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'and ( a.&md5_col ne b.&md5_col'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)'; put '%end;'; put ')'; put ';'; put '/**'; put '* This section would have been one simple step with union all'; put '* but that converts short numerics into 8 bytes!'; put '* so, convoluted alternative to retain the same functionality.'; put '*/'; put '/* base records */'; put 'create view work.bitemp4_prep1 as'; put 'select ''BASE'' as ___TMP___'; put ',b.*'; put 'from work.bitemp4_updated a'; put ',work.bitemp3b_newbase b'; put 'where 1'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put ';'; put '/* updated records */'; put 'create view work.bitemp4_prep2 as'; put 'select ''STAG'' as ___TMP___ ,*'; put 'from work.bitemp4_updated;'; put '/* ensure we only keep columns that appear in both */'; put '%local bp1 bp2 bp3 bp4;'; put '%let bp1=%mf_getvarlist(bitemp4_prep1);'; put '%let bp2=%mf_getvarlist(bitemp4_prep2);'; put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);'; put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);'; put 'data work.bitemp4_prep3/view=bitemp4_prep3;'; put 'set bitemp4_prep1 bitemp4_prep2;'; put '%if %length(XX&bp3&bp4)>2 %then %do;'; put 'drop &bp3 &bp4 ;'; put '%end;'; put 'run;'; put '/* remove duplicates */'; put 'proc sql;'; put 'create table work.bitemp4a_allrecs as'; put 'select distinct *'; put 'from work.bitemp4_prep3'; put 'order by'; put '/* compress blanks and then insert commas (as the datetime fields'; put 'may not be in use) */'; put '%sysfunc(tranwrd(%sysfunc(compbl('; put '&pk &bus_from &bus_to &processed'; put ')),%str( ), %str(,)))'; put ';'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* this section aligns the business dates'; put '(eg for inserts or overlaps in the range) */'; put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );'; put 'set work.bitemp4a_allrecs;'; put 'by &pk &bus_from &bus_to &processed;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '___TMP___md5lag=lag(&md5_col);'; put '/* reset retained variables */'; put 'if first.&idx_val then do;'; put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/'; put 'if &md5_col=___TMP___md5lag then do;'; put '&bus_from=___TMP___from;'; put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;'; put 'end;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 1'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 1'' then do;'; put '/* else ensure bus_from starts from prior record bus_to */'; put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to'; put 'then &bus_from= ___TMP___to;'; put '/* new record may replace old record entirely */'; put 'if &bus_to <= &bus_from then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put 'run;'; put '%end;'; put '%else %do;'; put '/* keep staged records only */'; put 'data work.bitemp4b_firstpass;'; put 'set work.bitemp4a_allrecs;'; put 'if ___TMP___=''STAG'';'; put 'run;'; put '%end;'; put '/* next phase is to pass through in reverse - so set up the sort statement */'; put '%local byvar;'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let byvar=&byvar descending %scan(&pk,&idx_pk);'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL'; put '%then %let byvar=&byvar descending &bus_from descending &bus_to;'; put '/* if matching bus dates supplied, need to ensure we also have a sort'; put 'between BASE and STAGING tables */'; put '%let byvar=&byvar descending ___TMP___;'; put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;'; put 'by &byvar;'; put 'run;'; put '/**'; put '* Now (in reverse) pass back business start dates'; put '*/'; put 'data work.bitemp4d_secondpass;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put '&tech_from=&now;'; put '&tech_to=&high_date;'; put '%end;'; put 'set work.bitemp4c_sort ;'; put 'by &byvar;'; put 'retain ___TMP___cond ''Name of Condition'';'; put 'retain ___TMP___from ___TMP___to 0;'; put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;'; put '/* put / _all_ /;*/'; put '___TMP___md5lag=lag(&md5_col);'; put 'if first.&idx_val then do;'; put '/* reset retained variables */'; put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);'; put 'end;'; put 'else do;'; put '/* if record is identical, carry back bus_to */'; put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;'; put 'end;'; put 'if ___TMP___=''STAG'' then do;'; put '/* need to carry forward the closing record */'; put '___TMP___cond=''Condition 2'';'; put 'end;'; put 'else if ___TMP___cond=''Condition 2'' then do;'; put '/* else ensure bus_to stops at subsequent record bus_from */'; put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from'; put 'then &bus_to= ___TMP___from;'; put '/* new record may replace old record entirely */'; put 'if &bus_from >= &bus_to then delete;'; put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;'; put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);'; put 'end;'; put '___TMP___from=&bus_from;'; put '___TMP___to=&bus_to;'; put '%end;'; put 'run;'; put '%put syscc (line600)=&syscc;'; put '/**'; put 'There may still be some records (eg old business history) which have not'; put 'changed.'; put 'Need to identify these and remove from the append so they are not updated'; put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the'; put 'business key) and any matching / identical records are split out (from those'; put 'that need to be updated).'; put '*/'; put '%if &loadtype=BITEMPORAL %then %do;'; put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);'; put 'data bitemp5a_lkp (keep=&md5_col);'; put 'set bitemp0_base;'; put '/* for BITEMPORAL we need to compare business dates also */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);'; put 'run;'; put 'data bitemp5b_updates;'; put 'set bitemp4d_secondpass;'; put 'if _n_=1 then do;'; put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');'; put 'md5_lkp.definekey("&md5_col");'; put 'md5_lkp.definedone();'; put 'end;'; put '/* drop old md5 col as will rebuild with new business dates */'; put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;'; put 'if md5_lkp.check()=0 then delete;'; put 'run;'; put 'proc sql;'; put '/* get min bus from as will update (close out) all records from this point'; put '(for that PK)*/'; put 'create table work.bitemp5d_subquery as'; put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to'; put 'from work.bitemp5b_updates'; put 'group by &pk_comma;'; put '/* index has a huge efficiency impact on upcoming nested subquery */'; put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);'; put '%let lastds=work.bitemp5b_updates;'; put '%end;'; put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;'; put 'proc sql;'; put 'create table work.bitemp5d_subquery as'; put 'select distinct &pk_comma'; put 'from bitemp4d_secondpass;'; put '%let lastds=work.bitemp4d_secondpass;'; put '%end;'; put '%else %let lastds=work.bitemp4d_secondpass;'; put '/* create single append table (an overlapped pre-sert may be classed as'; put 'both an update AND a new record). Also create temp views that may be'; put 'used for pre-load analysis. */'; put 'data &outds_mod;'; put 'set &lastds(drop=___TMP___: &md5_col);'; put 'run;'; put 'data bitemp6_allrecs / view=bitemp6_allrecs;'; put 'set &outds_mod /* UPDATED records */'; put '&outds_add /* NEW records */;'; put 'run;'; put 'proc sort data=work.bitemp6_allrecs'; put 'out=work.bitemp6_unique'; put 'noduprec'; put 'dupout=work.xx_BADBADBAD;'; put 'by _all_;'; put 'run;'; put '/* we have all our temp tables now so exit if this is all that is needed */'; put '%if &LOADTARGET ne YES %then %return;'; put '/* also exit if an err condition exists */'; put '%if &syscc>0 %then %do;'; put '%put syscc=&syscc;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%if "&outds_audit" ne "0" %then %do;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)'; put ')'; put '/* final check - abort if a lock has appeared on the target or audit table */'; put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)'; put '%if %mf_existds(&outds_audit) %then %do;'; put '%mp_lockfilecheck(libds=&outds_audit)'; put '%end;'; put '/**'; put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!'; put '*/'; put '/**'; put '* First, CLOSE OUT changed records (if not a REPLACE)'; put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.'; put '* However - this can be worked around using a nested subquery..'; put '*/'; put 'data _null_;'; put 'putlog "&sysmacroname: CLOSEOUTS commencing";'; put 'run;'; put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: No closeouts needed";'; put 'run;'; put '%end;'; put '%else %if &engine_type=CAS %then %do;'; put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)'; put ',mac=&sysmacroname in &_program'; put ',msg=%str(&loadtype not yet supported in CAS engine)'; put ')'; put '/* create temp table for deletions */'; put '%local delds;%let delds=%mf_getuniquename(prefix=DC);'; put 'data casuser.&delds;'; put 'set work.bitemp5d_subquery;'; put 'run;'; put '/* delete the records */'; put 'proc cas ;'; put 'table.deleteRows / table={'; put 'caslib="&base_lib",'; put 'name="&base_dsn",'; put 'where="1=1",'; put 'whereTable={caslib=''CASUSER'',name="&delds"}'; put '};'; put 'quit;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&delds;'; put '%end;'; put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)'; put '%then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";'; put 'run;'; put '%local flexinow;'; put 'proc sql;'; put '/* if OLEDB then create a temp table for efficiency */'; put '%local innertable;'; put '%if &engine_type=OLEDB %then %do;'; put '%let innertable=[##BITEMP_&base_dsn];'; put '%let top_table=[dbo].&base_dsn;'; put '%let flexinow=&SQLNOW;'; put 'create table &base_lib.."##BITEMP_&base_dsn"n as'; put 'select * from work.bitemp5d_subquery;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);'; put '%let top_table=&baselib_schema.&base_dsn;'; put '%let flexinow=timestamp &SQLNOW;'; put '/* make empty table first - must clone & drop extra cols'; put 'as autoload is bad */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;'; put '%if &engine_type=REDSHIFT %then %do;'; put 'exec (alter table &innertable alter sortkey none) by myAlias;'; put '%end;'; put '%let dropcols=%mf_wordsinstr1butnotstr2('; put 'str1=%upcase(%mf_getvarlist(&basecopy))'; put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))'; put ');'; put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));'; put '%put &=dropcols;'; put '%let idx_val=%scan(&dropcols,&idx_pk);'; put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;'; put '%end;'; put '/* create view to strip formats and avoid warns in log */'; put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;'; put 'set work.bitemp5d_subquery;'; put 'format _all_;'; put 'run;'; put 'proc append base=&base_lib..&innertable ('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put 'data=work.vw_bitemp5d force nowarn;'; put 'run;'; put '/* open up a connection for pass through SQL */'; put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)'; put 'execute('; put '%end;'; put '%else %do;'; put '%let innertable=bitemp5d_subquery;'; put '%let top_table=&base_lib..&base_dsn;'; put '%let flexinow=&now;'; put '%end;'; put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;'; put 'update &top_table set &tech_to=&flexinow'; put '%if %length(&processed)>0 %then %do;'; put ',&processed=&flexinow'; put '%end;'; put 'where &tech_from <= &flexinow and &flexinow < &tech_to and'; put '%end;'; put '%else %if &loadtype=UPDATE %then %do;'; put '/* changed records are deleted then re-appended when doing UPDATEs */'; put 'delete from &top_table where'; put '%end;'; put '%else %do;'; put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;'; put '%let syscc=5;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%goto end_of_macro;'; put '%end;'; put '/* perform join inside query as per'; put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */'; put 'exists( select 1 from &baselib_schema.&innertable where'; put '/* loop PK join */'; put '%do idx_pk=1 %to &pk_cnt;'; put '%let idx_val=%scan(&pk,&idx_pk);'; put '&base_dsn..&idx_val=&innertable..&idx_val and'; put '%end;'; put '%if &loadtype=BITEMPORAL %then %do;'; put '&base_dsn..&bus_from >= &innertable..&bus_from'; put 'and &base_dsn..&bus_to <= &innertable..&bus_to and'; put '%end;'; put '/* close the statement */'; put '1=1);'; put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES'; put '%then %do;'; put ') by myAlias;'; put 'execute (drop table &baselib_schema.&innertable) by myAlias;'; put '%end;'; put '%end;'; put 'quit;'; put 'data _null_;'; put 'putlog "&sysmacroname: Closeout complete";'; put 'run;'; put '/**'; put '* Append the new / updated records'; put '*/'; put '%if &engine_type=CAS %then %do;'; put '/* get varchar variables ready for casting */'; put '%local vcfmt vcrename vcassign vcdrop;'; put 'data _null_;'; put 'set work.bitemp_cols(where=(type=6)) end=last;'; put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;'; put 'retain vcrename vcassign vcdrop vcfmt;'; put 'if _n_=1 then vcrename=''(rename=('';'; put 'rancol=resolve(''%mf_getuniquename()'');'; put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';'; put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);'; put 'vcassign=cats(vcassign,name,''='',rancol,'';'');'; put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');'; put 'if last then do;'; put 'vcrename=cats(vcrename,''))'');'; put 'call symputx(''vcfmt'',vcfmt);'; put 'call symputx(''vcrename'',vcrename);'; put 'call symputx(''vcassign'',vcassign);'; put 'call symputx(''vcdrop'',vcdrop);'; put 'end;'; put 'run;'; put '/* prepare a temp cas table with varchars casted */'; put '%let tmp=%mf_getuniquename();'; put 'data casuser.&tmp ;'; put '&vcfmt'; put 'set work.bitemp6_unique &vcrename;'; put '&vcassign'; put '&vcdrop'; put 'run;'; put '/* load the table with varchars applied*/'; put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;'; put 'set casuser.&tmp;'; put 'run;'; put '/* drop temp table */'; put 'proc sql;'; put 'drop table CASUSER.&tmp;'; put '/* this code will not work as regular tables do not have varchars */'; put '/*'; put 'proc casutil;'; put 'load data=work.bitemp6_unique'; put 'outcaslib="&base_lib" casout="&base_dsn" append ;'; put 'quit;'; put '*/'; put '%end;'; put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;'; put 'proc append base=&base_lib..&base_dsn'; put '%if &engine_type=REDSHIFT %then %do;'; put '('; put '%do idx_pk=1 %to &redcnt;'; put '&&rednm&idx_pk = &&redval&idxpk'; put '%end;'; put ')'; put '%end;'; put 'data=bitemp6_unique force nowarn;'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;'; put '%end;'; put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,'; put 'ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '/* final check on syscc */'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=&_program'; put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)'; put ')'; put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;'; put 'data work.vw_outds_orig /view=work.vw_outds_orig;'; put 'set work.bitemp0_base (drop=&md5_col);'; put 'where ___TMP___NEW_FLG=0;'; put 'drop ___TMP___NEW_FLG;'; put 'run;'; put '/* update the AUDIT table */'; put '%if %mf_existds(&outds_audit) %then %do;'; put 'options mprint;'; put '%mp_storediffs(&base_lib..&base_dsn'; put ',work.vw_outds_orig'; put ',&pk &bus_from'; put ',delds=&outds_del'; put ',modds=&outds_mod'; put ',appds=&outds_add'; put ',outds=work.mp_storediffs'; put ',processed_dttm=&now'; put ',loadref=%superq(etlsource)'; put ')'; put '/* exclude unchanged values in modified rows */'; put 'data work.mp_storediffs;'; put 'set work.mp_storediffs;'; put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;'; put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;'; put 'run;'; put 'proc append base=&outds_audit data=work.mp_storediffs;'; put 'run;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&outds_audit,1,.)'; put ',ds=%scan(&outds_audit,2,.)'; put ',ref=&ETLSOURCE'; put ',ctl_ds=&dclib..mpe_lockanytable'; put ')'; put '%end;'; put '%end;'; put '%mp_abort(iftrue= (&syscc >4)'; put ',mac=bitemporal_dataloader'; put ',msg=%str(Problem in audit stage (&outds_audit))'; put ')'; put '%let user=%mf_getUser();'; put '/**'; put 'Notify as appropriate EMAILS DISABLED'; put '%sumo_alerts(ALERT_EVENT=UPDATE'; put ', ALERT_TARGET=&base_lib..&base_dsn'; put ', from_user= &user);'; put '*/'; put '/* monitor BiTemporal usage */'; put '%if &log=1 %then %do;'; put '%put syscc=&syscc;'; put '/* do not perform duration calc in pass through */'; put '%local dur;'; put 'data _null_;'; put 'now=symget(''now'');'; put 'dur=%sysfunc(datetime())-&now;'; put 'call symputx(''dur'',dur,''l'');'; put 'run;'; put 'proc sql;'; put 'insert into &dclib..mpe_dataloads'; put 'set libref=%upcase("&base_lib")'; put ',DSN=%upcase("&base_dsn")'; put ',ETLSOURCE="&ETLSOURCE"'; put ',LOADTYPE="&loadtype"'; put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)'; put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)'; put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)'; put ',DURATION=&dur'; put ',MAC_VER="v&ver"'; put ',user_nm="&user"'; put ',PROCESSED_DTTM=&now;'; put 'quit;'; put '%put syscc=&syscc;'; put '%end;'; put '%end_of_macro:'; put '%mend bitemporal_dataloader;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mpe_refreshlibs(lib=0);'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data libs0;'; put 'set mm_getlibs;'; put 'by libraryref;'; put '%if &lib ne 0 %then %do;'; put 'where upcase(libraryref)="%upcase(&lib)";'; put '%end;'; put 'if "%mf_getplatform()"="SASMETA" then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sql;'; put 'create table libs1 as'; put 'select distinct libname'; put ',engine'; put ',path'; put ',level'; put ',sysname'; put ',sysvalue'; put 'from dictionary.libnames'; put 'order by libname, level,engine,path;'; put 'data libs2;'; put 'set libs1;'; put 'length tran $1024;'; put 'if missing(sysname) then sysname=''Missing'';'; put 'select(sysname);'; put 'when(''Access Permission'') tran=''Permissions'';'; put 'when(''Owner Name'') tran=''Owner'';'; put 'when(''Schema/Owner'') tran=''schema'';'; put 'otherwise tran=sysname;'; put 'end;'; put 'run;'; put 'proc transpose data=libs2 out=libs3;'; put 'by libname level engine path;'; put 'var sysvalue;'; put 'id tran;'; put 'run;'; put 'data libs4(rename=(libname=libref));'; put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;'; put 'if _n_=1 then call missing (of _all_);'; put 'set libs3;'; put 'by libname;'; put 'if engine=''V9'' then engine=''BASE'';'; put 'if first.libname then do;'; put 'retain paths perms owners schemas;'; put 'paths=''(''!!quote(trim(path));'; put 'perms=permissions;'; put 'owners=owner;'; put 'schemas=schema;'; put 'end;'; put 'else do;'; put 'paths=trim(paths)!!'' ''!!quote(trim(path));'; put 'perms=trim(perms)!!'',''!!trim(permissions);'; put 'owners=trim(owners)!!'',''!!trim(owner);'; put 'schemas=trim(schemas)!!'' ''!!trim(schema);'; put 'end;'; put 'if last.libname then do;'; put 'paths=trim(paths)!!'')'';'; put 'schemas=cats(schemas);'; put 'output;'; put 'end;'; put 'keep libname engine paths perms owners schemas;'; put 'run;'; put 'proc sql;'; put 'create table libs5 as'; put 'select a.libref'; put ',coalescec(b.engine,a.engine) as engine length=32'; put ',b.libraryname as libname'; put ',a.paths'; put ',a.perms'; put ',a.owners'; put ',a.schemas'; put ',b.libraryid as libid'; put 'from libs4 a'; put 'left join libs0 b'; put 'on upcase(a.libref)=upcase(b.libraryref)'; put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP'''; put ',''MAPSGFK'');'; put '%bitemporal_dataloader(base_lib=&dc_libref'; put ',base_dsn=MPE_DATACATALOG_LIBS'; put ',append_dsn=libs5'; put ',PK=LIBREF'; put ',etlsource=&_program'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&dc_libref'; put ')'; put '%mend mpe_refreshlibs;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mpe_refreshtables(lib,ds=#all);'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%local engine; %let engine=%mf_getengine(&lib);'; put '%local schema; %let schema=%mf_getschema(&lib);'; put '%put running &sysmacroname &lib(&engine &schema) for &ds;'; put 'proc sql;'; put 'create table cols as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib cols extraction)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc afer &lib indexes extraction)'; put ')'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.indexes as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table finalcols as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.indexes b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%local dsn;'; put '%if &ds = #ALL %then %let dsn=;'; put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table work.pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.constraints'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table work.sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table work.pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from work.sum a'; put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table work.pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data work.finalpks;'; put 'set pkdefault pk4sure pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table finalcols as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.cols a'; put 'left join work.finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* load columns */'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_vars'; put ',append_dsn=finalcols'; put ',PK=LIBREF DSN NAME'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF DSN'; put '%end;'; put ',dclib=&mpelib'; put ')'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.tabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data tabs2;'; put 'set finalcols;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table work.finaltabs as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.tabs a'; put 'left join work.tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datacatalog_tabs'; put ',append_dsn=finaltabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '/* prepare table frequently changing attributes */'; put 'proc sql;'; put '%if &engine=SQLSVR %then %do;'; put 'connect using &lib;'; put 'create table work.attrs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date'; put 'FROM sys.tables ;'; put ');'; put 'create table work.nobs as select * from connection to &lib('; put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema'''; put ',A.Name, AVG(B.rows) AS ''RowCount'''; put 'FROM sys.objects A'; put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id'; put 'WHERE A.type = ''U'''; put 'GROUP BY A.schema_id, A.Name'; put ');'; put 'disconnect from &lib;'; put 'create table statustabs as select'; put 'a.libref'; put ',a.dsn'; put ',b.create_date as crdate'; put ',b.modify_date as modate'; put ',. as filesize'; put ',c.RowCount as nobs'; put 'from work.tabs a'; put 'left join work.attrs(where=(schema="&schema")) b'; put 'on upcase(a.dsn)=upcase(b.name)'; put 'left join work.nobs(where=(schema="&schema")) c'; put 'on upcase(a.dsn)=upcase(c.name);'; put '%end;'; put '%else %do;'; put 'create table statustabs as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',crdate'; put ',modate'; put ',filesize'; put ',nobs'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne #ALL %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%end;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_tabs'; put ',append_dsn=statustabs'; put ',PK=LIBREF DSN'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put '%if &ds ne #ALL %then %do;'; put ',close_vars=LIBREF'; put '%end;'; put ')'; put '%if &ds = #ALL %then %do;'; put 'proc sql;'; put 'create table statuslibs as select'; put 'libref'; put ',sum(filesize) as libsize'; put ',count(*) as table_cnt'; put 'from statustabs'; put 'group by 1;'; put '%bitemporal_dataloader(base_lib=&mpelib'; put ',base_dsn=mpe_datastatus_libs'; put ',append_dsn=statuslibs'; put ',PK=LIBREF'; put ',etlsource=&sysmacroname'; put ',loadtype=TXTEMPORAL'; put ',tech_from=TX_FROM'; put ',tech_to=TX_TO'; put ',dclib=&mpelib'; put ')'; put '%end;'; put '%mend mpe_refreshtables;'; put '%macro dc_refreshcatalog(libref);'; put '/* take current repository */'; put '%local repo repocnt xx;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'put (_all_)(=);'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'');'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put &sysmacroname #&libref#;'; put '%if #&libref# ne ## %then %do;'; put '%put &sysmacroname: assigning specific libref, &libref;'; put '%dc_assignlib(WRITE,&libref) /* write just in order to assign direct lib */'; put '%mpe_refreshlibs(lib=&libref)'; put '%mpe_refreshtables(&libref)'; put '%end;'; put '%else %do xx=1 %to &repocnt;'; put 'options metarepository=&&repo&xx;'; put '%mpe_refreshlibs()'; put '/* get libs to be ignored */'; put '%local ignorelist;'; put 'proc sql noprint;'; put 'select var_value into: ignorelist'; put 'from &mpelib..MPE_CONFIG'; put 'where var_scope=''DC_CATALOG'''; put 'and var_name="DC_IGNORELIBS"'; put 'and &dc_dttmtfmt. < TX_TO'; put 'and var_active=1;'; put '/* get all libs */'; put '%let libcnt=0;'; put 'data libraries;'; put 'set &mpelib..mpe_datacatalog_libs;'; put 'where &dc_dttmtfmt. le TX_TO;'; put 'if index("&ignorelist",''|''!!upcase(trim(libref))!!''|'')=0;'; put 'i+1;'; put 'call symputx(cats(''lib'',i),libref);'; put 'call symputx(''libcnt'',i);'; put 'run;'; put '%local i;'; put '%do i=1 %to &libcnt;'; put '%dc_assignlib(WRITE,&&lib&i)'; put '%mpe_refreshtables(&&lib&i)'; put '%end;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_refreshcatalog;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file refreshlibinfo.sas'; put '@brief Refresh the Data Catalog for a particular library'; put '@details When showing library info in the VIEW menu, the data is taken from'; put 'the Data Catalog tables. These may be empty or outdated, and so this service'; put 'allows end users to run a refresh of the data.'; put '

Service Inputs

'; put '
lib2refresh
'; put 'Should contain the libref to be refreshed.'; put '|libref:$8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
libinfo
'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_refreshcatalog.sas'; put '@li mp_abort.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%webout(FETCH)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem on startup)'; put ')'; put '%let libref=;'; put 'data _null_;'; put 'set work.lib2refresh;'; put 'call symputx(''libref'',libref);'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)'; put ')'; put '%dc_assignlib(WRITE,&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc after lib assignment)'; put ')'; put '%dc_refreshcatalog(&libref)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)'; put ')'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'b.libsize,'; put 'b.table_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&libref";'; put '%webout(OPEN)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=registeruser; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file registeruser.sas'; put '@brief Registers a new user in Data Controller'; put '@details New users are logged after accepting EULA terms.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let userid=%mf_getuser();'; put '/* confirm the user is not registered */'; put '%let isRegistered=0;'; put 'proc sql noprint;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%mp_abort(iftrue= (&isregistered > 0)'; put ',mac=&_program..sas'; put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)'; put ')'; put 'data work.append;'; put 'if 0 then set &mpelib..mpe_users;'; put 'user_id=symget(''userid'');'; put 'registered_dt=today();'; put 'last_seen_dt=today();'; put 'run;'; put 'proc append base=&mpelib..mpe_users data=work.append;'; put '%let isRegistered=0;'; put 'proc sql noprint;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)'; put ',mac=&_program..sas'; put ',msg=%str(Problem appending to &mpelib..mpe_users table)'; put ')'; put 'data work.return;'; put 'msg=''SUCCESS'';'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,return)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=startupservice; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file startupservice.sas'; put '@brief List the libraries and tables the mp-editor user can access'; put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)'; put 'then they have access to all libraries / tables. Otherwise a join is made'; put 'to the &mpelib..mpe_security table.'; put '

SAS Macros

'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue on startup in startupService)'; put ')'; put '%let userid=%mf_getuser();'; put '%put userid is &userid;'; put '%mpe_getgroups(user=&userid,outds=groups)'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)'; put ')'; put '/* check if user is an admin */'; put '%let admin_check=0;'; put 'proc sql noprint;'; put 'select count(*) into: admin_check'; put 'from groups'; put 'where groupname="&mpeadmins";'; put '/* check if user is registered or not */'; put '%let isRegistered=0;'; put 'select count(*) into: isregistered'; put 'from &mpelib..mpe_users'; put 'where user_id="&userid";'; put '/* get number of registered users */'; put '%let registerCount=0;'; put 'select count(*) into: registercount'; put 'from &mpelib..mpe_users'; put 'where last_seen_dt>%sysfunc(today())-365;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem accessing &mpelib..mpe_users table)'; put ')'; put '%global dc_restrict_editrecord;'; put 'data work.globvars;'; put 'dclib="&mpelib";'; put 'sas9lineage_enabled=1;'; put 'isadmin=&admin_check;'; put 'isregistered=&isregistered;'; put 'registercount=®isterCount;'; put 'dc_admin_group="&mpeadmins";'; put '/* fetched from mpe_config in dc_getsettings */'; put 'licence_key="&dc_licence_key";'; put 'activation_key="&dc_activation_key";'; put 'dc_restrict_editrecord="&dc_restrict_editrecord";'; put 'run;'; put '%macro mstp_mpeditorstartup();'; put 'data _null_;'; put 'putlog "entering &sysmacroname";'; put 'run;'; put 'proc sql noprint;'; put '/* update last seen, if seen */'; put '%if &isregistered>0 %then %do;'; put 'update &mpelib..mpe_users'; put 'set last_seen_dt=%sysfunc(today())'; put 'where user_id="&userid";'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem updating &mpelib..mpe_users table)'; put ')'; put '%local all_cnt;'; put 'select count(*) into: all_cnt'; put 'from &mpelib..mpe_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and ACCESS_LEVEL in (''EDIT'')'; put 'and libref=''*ALL*'''; put 'and SAS_GROUP in (select groupname from groups);'; put '%if &admin_check >0 or &all_cnt>0 %then %do;'; put 'create table sasDatasets as'; put 'select distinct libref, dsn'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. lt tx_to'; put 'order by 1;'; put '%end;'; put '%else %do;'; put 'create table sasDatasets as'; put 'select distinct a.libref,a.dsn'; put 'from &mpelib..mpe_tables a'; put 'left join &mpelib..mpe_security b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn'; put 'where &dc_dttmtfmt. lt a.tx_to'; put 'and &dc_dttmtfmt. lt b.tx_to'; put 'and b.ACCESS_LEVEL in (''EDIT'')'; put 'and b.SAS_GROUP in (select groupname from groups)'; put 'order by 1;'; put '%end;'; put '%mend mstp_mpeditorstartup;'; put '%mstp_mpeditorstartup()'; put 'create table saslibs as'; put 'select distinct libref'; put 'from &syslast;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(issue with security validation)'; put ')'; put 'proc sql;'; put 'create table work.xlmaps as'; put 'select distinct a.XLMAP_ID'; put ',b.XLMAP_DESCRIPTION'; put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")'; put 'as XLMAP_TARGETLIBDS'; put 'from &mpelib..MPE_XLMAP_RULES a'; put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.XLMAP_ID=b.XLMAP_ID'; put 'where &dc_dttmtfmt. lt a.tx_to;'; put '/* we don''t want the XLMAP target datasets to be directly editable */'; put 'delete from sasdatasets'; put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);'; put '%webout(OPEN)'; put '%webout(OBJ,sasDatasets)'; put '%webout(OBJ,saslibs)'; put '%webout(OBJ,globvars)'; put '%webout(ARR,xlmaps)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=validatefilter; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro removecolsfromwork(col);'; put '/* only an issue if debug mode enabled */'; put '%global _debug;'; put '%if &_debug ge 131 %then %do;'; put '%let col=%upcase(&col);'; put '%local memlist;'; put 'proc sql noprint;'; put 'select distinct memname into: memlist'; put 'separated by '' '''; put 'from dictionary.columns'; put 'where libname=''WORK'' and upcase(name)="&col";'; put '%if %mf_isblank(&memlist) %then %return;'; put '%mp_dropmembers(list=&memlist)'; put '%end;'; put '%mend removecolsfromwork;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_getvalue(libds,variable,filter=1'; put ')/*/STORE SOURCE*/;'; put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;'; put '%local dsid rc &variable;'; put '%let dsid=%sysfunc(open(&libds(where=(&filter))));'; put '%syscall set(dsid);'; put '%let rc = %sysfunc(fetch(&dsid));'; put '%let rc = %sysfunc(close(&dsid));'; put '%trim(&&&variable)'; put '%end;'; put '%mend mf_getvalue;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_islibds(libds'; put ')/*/STORE SOURCE*/;'; put '%local regex;'; put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));'; put '%sysfunc(prxmatch(®ex,&libds))'; put '%mend mf_islibds;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);'; put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)'; put ')'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put 'data _null_;'; put 'file &fref1;'; put 'infile &inref end=eof;'; put 'if _n_=1 then do;'; put 'put "proc sql;";'; put 'put "validate select * from &targetds";'; put 'put "where " ;'; put 'end;'; put 'input;'; put 'put _infile_;'; put 'putlog _infile_;'; put 'if eof then put ";quit;";'; put 'run;'; put '%inc &fref1;'; put 'data &outds;'; put 'if &sqlrc or &syscc or &syserr then do;'; put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!'; put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));'; put 'output;'; put 'end;'; put 'else stop;'; put 'run;'; put 'filename &fref1 clear;'; put '%if %mf_nobs(&outds)>0 %then %do;'; put '%if &abort=YES %then %do;'; put 'data _null_;'; put 'set &outds;'; put 'call symputx(''REASON_CD'',reason_cd,''l'');'; put 'stop;'; put 'run;'; put '%mp_abort('; put 'mac=&sysmacroname,'; put 'msg=%str(Filter validation issues.)'; put ')'; put '%end;'; put '%let syscc=1008;'; put '%end;'; put '%mend mp_filtervalidate;'; put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put '/* Validate input column */'; put '%local vtype;'; put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);'; put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),'; put 'mac=&sysmacroname,'; put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)'; put ')'; put '%if &vtype ne C %then %do;'; put '%put &sysmacroname: RAW_VALUE must be character;'; put '%let syscc=42;'; put '%return;'; put '%end;'; put '/**'; put '* Sanitise the values based on valid value lists, then strip out'; put '* quotes, commas, periods and spaces.'; put '*/'; put '%local reason_cd nobs;'; put '%let nobs=0;'; put 'data &outds;'; put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32'; put 'OPERATOR_NM $10 RAW_VALUE $4000;*/'; put 'set &inds end=last;'; put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;'; put 'drop tmp;'; put '/* quick check to ensure column exists */'; put 'if upcase(VARIABLE_NM) not in'; put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))'; put 'then do;'; put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";'; put 'putlog REASON_CD= VARIABLE_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'return;'; put 'end;'; put '/* need to open the dataset to get the column type */'; put 'retain dsid;'; put 'if _n_=1 then dsid=open("&targetds","i");'; put 'if dsid>0 then do;'; put 'vnum=varnum(dsid,VARIABLE_NM);'; put 'if vnum<1 then do;'; put '/* should not happen as was also tested for above */'; put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put '/* now we can get the type */'; put 'else vtype=vartype(dsid,vnum);'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Could not open &targetds");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'stop;'; put 'end;'; put '/* closed list checks */'; put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);'; put 'putlog REASON_CD= GROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;'; put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);'; put 'putlog REASON_CD= SUBGROUP_LOGIC=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if mod(SUBGROUP_ID,1) ne 0 then do;'; put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);'; put 'putlog REASON_CD= SUBGROUP_ID=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'if OPERATOR_NM not in'; put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')'; put 'then do;'; put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);'; put 'putlog REASON_CD= OPERATOR_NM=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put '/* special missing logic */'; put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;'; put 'if cats(upcase(raw_value)) in ('; put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N'''; put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._'''; put ')'; put 'then do;'; put '/* valid numeric - exit data step loop */'; put 'return;'; put 'end;'; put 'else if subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'end;'; put '/* special logic */'; put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;'; put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');'; put 'else do;'; put 'if substr(raw_value,1,1) ne ''('''; put 'or substr(cats(reverse(raw_value)),1,1) ne '')'''; put 'then do;'; put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));'; put 'end;'; put '/* we now have a comma seperated list of values */'; put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;'; put 'tmp=scan(raw_value1,i,'','');'; put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;'; put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put '/* is not valid syntax for IN or NOT IN */'; put 'vnum=varnum(dsid,subpad(tmp,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'REASON_CD=''Non Numeric value provided'';'; put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'return;'; put 'end;'; put 'end;'; put 'else raw_value1=raw_value;'; put '/* remove nested literals eg '''' */'; put 'raw_value1=tranwrd(raw_value1,"''''",'''');'; put '/* now match string literals (always single quotes) */'; put 'raw_value2=raw_value1;'; put 'regex = prxparse("s/(\'').*?(\'')//");'; put 'call prxchange(regex,-1,raw_value2);'; put '/* remove commas and periods*/'; put 'raw_value3=compress(raw_value2,'',.'');'; put '/* output records that contain values other than digits and spaces */'; put 'if notdigit(compress(raw_value3,'' ''))>0 then do;'; put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in ('; put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N'''; put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_'''; put ')'; put 'then do;'; put '/* check if the raw_value contains a valid variable NAME */'; put 'vnum=varnum(dsid,subpad(raw_value,1,32));'; put 'if vnum>0 then do;'; put '/* now we can get the type */'; put 'vtype2=vartype(dsid,vnum);'; put '/* check type matches */'; put 'if vtype2=vtype then do;'; put '/* valid target var - exit loop */'; put 'return;'; put 'end;'; put 'else do;'; put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");'; put 'putlog REASON_CD= dsid=;'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'goto endstep;'; put 'end;'; put 'end;'; put 'end;'; put 'putlog raw_value3= $hex32.;'; put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);'; put 'putlog (_all_)(=);'; put 'call symputx(''reason_cd'',reason_cd,''l'');'; put 'call symputx(''nobs'',_n_,''l'');'; put 'output;'; put 'end;'; put 'endstep:'; put 'if last then rc=close(dsid);'; put 'run;'; put 'data _null_;'; put 'set &outds end=last;'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue=(&abort=YES and &nobs>0),'; put 'mac=&sysmacroname,'; put 'msg=%str(Data issue: %superq(reason_cd))'; put ')'; put '%if &nobs>0 %then %do;'; put '%let syscc=1008;'; put '%return;'; put '%end;'; put '/**'; put '* syntax checking passed but it does not mean the filter is valid'; put '* for that we can run a proc sql validate query'; put '*/'; put '%local fref1;'; put '%let fref1=%mf_getuniquefileref();'; put '%mp_filtergenerate(&inds,outref=&fref1)'; put '/* this macro will also set syscc to 1008 if any issues found */'; put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)'; put '%mend mp_filtercheck;'; put '%macro mp_md5(cvars=,nvars=);'; put '%local i var sep;'; put 'put(md5('; put '%do i=1 %to %sysfunc(countw(&cvars));'; put '%let var=%scan(&cvars,&i,%str( ));'; put '&sep put(md5(trim(&var)),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '%do i=1 %to %sysfunc(countw(&nvars));'; put '%let var=%scan(&nvars,&i,%str( ));'; put '/* multiply by 1 to strip precision errors (eg 0 != 0) */'; put '/* but ONLY if not missing, else will lose any special missing values */'; put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)'; put '%let sep=!!;'; put '%end;'; put '),$hex32.)'; put '%mend mp_md5;'; put '%macro mp_hashdataset('; put 'libds,'; put 'outds=work._data_,'; put 'salt=,'; put 'iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local keyvar /* roll up the md5 */'; put 'prevkeyvar /* retain prev record md5 */'; put 'lastvar /* last var in input ds */'; put 'cvars nvars;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '/* avoid naming conflict for hash key vars */'; put '%let keyvar=%mf_getuniquename();'; put '%let prevkeyvar=%mf_getuniquename();'; put '%let lastvar=%mf_getuniquename();'; put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;'; put 'data &outds;'; put 'length hashkey $32;'; put 'hashkey=put(md5("&salt"),$hex32.);'; put 'output;'; put 'stop;'; put 'run;'; put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;'; put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;'; put '%end;'; put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;'; put '%put %str(ERR)OR: Dataset &libds is not a dataset;'; put '%end;'; put '%else %do;'; put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put '/nonote2err'; put '%end;'; put ';'; put 'length &prevkeyvar &keyvar $32;'; put 'retain &prevkeyvar;'; put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);'; put 'set &libds end=&lastvar;'; put '/* hash should include previous row */'; put '&keyvar=%mp_md5('; put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,'; put 'nvars=%mf_getvarlist(&libds,typefilter=N)'; put ');'; put '&prevkeyvar=&keyvar;'; put 'if &lastvar then output;'; put 'run;'; put '%end;'; put '%mend mp_hashdataset;'; put '/** @cond */'; put '%macro mf_existvar(libds /* 2 part dataset name */'; put ', var /* variable name */'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid=0 %then %do;'; put '%put %sysfunc(sysmsg());'; put '0'; put '%end;'; put '%else %if %length(&var)=0 %then %do;'; put '0'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%sysfunc(varnum(&dsid,&var))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_existvar;'; put '/** @endcond */'; put '%macro mf_getquotedstr(IN_STR'; put ',DLM=%str(,)'; put ',QUOTE=S'; put ',indlm=%str( )'; put ')/*/STORE SOURCE*/;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if "e=S %then %let quote=%qsysfunc(byte(39));'; put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));'; put '%else %if "e=N %then %let quote=;'; put '%local i item buffer;'; put '%let i=1;'; put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;'; put '%let item=%qscan(&IN_STR,&i,%str(&indlm));'; put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;'; put '%else %let item=%qtrim(&item);'; put '%if (&i = 1) %then %let buffer =%qtrim(&item);'; put '%else %let buffer =&buffer&DLM%qtrim(&item);'; put '%let i = %eval(&i+1);'; put '%end;'; put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));'; put '&buffer'; put '%mend mf_getquotedstr;'; put '%macro mf_getattrc('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrc(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrc;'; put '%macro mp_lockfilecheck('; put 'libds'; put ')/*/STORE SOURCE*/;'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=checklock.sas'; put ',msg=Aborting with syscc=&syscc on entry.'; put ')'; put '%mp_abort(iftrue= ("&libds"="0")'; put ',mac=&sysmacroname'; put ',msg=%str(libds not provided)'; put ')'; put '%local msg lib ds;'; put '%let lib=%upcase(%scan(&libds,1,.));'; put '%let ds=%upcase(%scan(&libds,2,.));'; put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */'; put '%if %scan(&libds,2,-)=FC %then %do;'; put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=checklock.sas'; put ',msg=%superq(msg)'; put ')'; put 'data _null_;'; put 'putlog "Checking engine & member type";'; put 'run;'; put '%local engine memtype;'; put '%let memtype=%mf_getattrc(&libds,MTYPE);'; put '%let engine=%mf_getattrc(&libds,ENGINE);'; put '%if &engine ne V9 and &engine ne BASE %then %do;'; put 'data _null_;'; put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";'; put 'putlog "SAS lock check will not be performed";'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &memtype ne DATA %then %do;'; put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'putlog "Engine = &engine, memtype=&memtype";'; put 'putlog "Attempting lock statement";'; put 'run;'; put 'lock &libds;'; put '%local abortme;'; put '%let abortme=0;'; put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;'; put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);'; put '%put %str(ERR)OR: &sysmacroname: &msg;'; put '%let abortme=1;'; put '%end;'; put 'lock &libds clear;'; put '%mp_abort(iftrue= (&abortme=1)'; put ',mac=&sysmacroname'; put ',msg=%superq(msg)'; put ')'; put '%mend mp_lockfilecheck;'; put '%macro mp_lockanytable('; put 'action'; put ',lib= WORK'; put ',ds=0'; put ',ref='; put ',ctl_ds=0'; put ',loops=25'; put ',loop_secs=1'; put ');'; put 'data _null_;'; put 'if _n_=1 then putlog "&sysmacroname entry vars:";'; put 'set sashelp.vmacro;'; put 'where scope="&sysmacroname";'; put 'put name ''='' value;'; put 'run;'; put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(dataset was not provided)'; put ')'; put '%mp_abort(iftrue= (&ctl_ds=0)'; put ',mac=&sysmacroname'; put ',msg=%str(Control dataset was not provided)'; put ')'; put '/* set up lib & mac vars */'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let action=%upcase(&action);'; put '%local user x trans msg abortme;'; put '%let user=%mf_getuser();'; put '%let abortme=0;'; put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid action (&action) provided)'; put ')'; put '/* if an err condition exists, exit before we even begin */'; put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)'; put ',mac=&sysmacroname'; put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)'; put ')'; put '/* do not bother locking work tables (else may affect all WORK libraries) */'; put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;'; put '%put NOTE: WORK libraries will not be registered in the locking system.;'; put '%return;'; put '%end;'; put '/* do not proceed if no observations can be processed */'; put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)'; put ',mac=&sysmacroname'; put ',msg=%str(cannot continue when options obs = 0)'; put ')'; put '%if &ACTION=LOCK %then %do;'; put '/* abort if a SAS lock is already in place, or cannot be applied */'; put '%mp_lockfilecheck(&lib..&ds)'; put '/* next, check there is a record for this table */'; put '%local record_exists_check;'; put 'proc sql noprint;'; put 'select count(*) into: record_exists_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &record_exists_check=0 %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: adding record to lock table..";'; put 'run;'; put 'data ;'; put 'if 0 then set &ctl_ds;'; put 'LOCK_LIB ="&lib";'; put 'LOCK_DS="&ds";'; put 'LOCK_STATUS_CD=''LOCKED'';'; put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put 'LOCK_USER_NM="&user";'; put 'LOCK_PID="&sysjobid";'; put 'LOCK_REF="&ref";'; put 'output;stop;'; put 'run;'; put '%let trans=&syslast;'; put 'proc append base=&ctl_ds data=&trans;'; put 'run;'; put '%end;'; put '/* if record does exist, perform lock attempts */'; put '%else %do x=1 %to &loops;'; put 'data _null_;'; put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;'; put 'putlog "at %sysfunc(datetime(),datetime19.) ..";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''LOCKED'''; put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '/**'; put '* NOTE - occasionally SQL server will return an err code (deadlocked'; put '* transaction). If so, ignore it, keep calm, and carry on..'; put '*/'; put '%if &syscc>0 %then %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Update failed. "@;'; put 'putlog "Resetting err conditions and re-attempting.";'; put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%let syscc=0;'; put '%let sqlrc=0;'; put '%end;'; put '/* now check if the record was successfully updated */'; put '%local success_check;'; put 'proc sql noprint;'; put 'select count(*) into: success_check from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"'; put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';'; put 'quit;'; put '%if &success_check=0 %then %do;'; put '%if &x < &loops %then %do;'; put '/* pause before next check */'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;'; put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";'; put 'putlog "NOTE- (iteration &x of &loops)";'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%end;'; put '%else %do;'; put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n'; put 'Please ask your administrator to investigate!;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data _null_;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;'; put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;'; put 'putlog ''NOTE-'' / ''NOTE-'';'; put 'run;'; put '%if &syscc>0 %then %do;'; put '%put setting syscc(&syscc) back to 0;'; put '%let syscc=0;'; put '%end;'; put '%let x=&loops; /* no more iterations needed */'; put '%end;'; put '%end;'; put '%end;'; put '%else %if &ACTION=UNLOCK %then %do;'; put '%local status cnt;'; put '%let cnt=0;'; put 'proc sql noprint;'; put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";'; put '%if &cnt=0 %then %do;'; put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;'; put '%end;'; put '%else %do;'; put 'select LOCK_STATUS_CD into: status from &ctl_ds'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;'; put '%if &status=LOCKED %then %do;'; put 'data _null_;'; put 'putlog "&sysmacroname: unlocking &lib..&ds:";'; put 'run;'; put 'proc sql;'; put 'update &ctl_ds'; put 'set LOCK_STATUS_CD=''UNLOCKED'''; put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put ', LOCK_USER_NM="&user"'; put ', LOCK_PID="&sysjobid"'; put ', LOCK_REF="&ref"'; put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";'; put 'quit;'; put '%end;'; put '%else %if &status=UNLOCKED %then %do;'; put '%put %str(WAR)NING: &lib..&ds is already unlocked!;'; put '%end;'; put '%else %do;'; put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;'; put '%let abortme=1;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '%let msg=lock_anytable given unsupported action (&action);'; put '%let abortme=1;'; put '%end;'; put '/* catch errs - mp_abort must be called outside of a logic block */'; put '%mp_abort(iftrue=(&abortme=1),'; put 'msg=%superq(msg),'; put 'mac=&sysmacroname'; put ')'; put '%exit_macro:'; put 'data _null_;'; put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";'; put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";'; put 'run;'; put '%mend mp_lockanytable;'; put '%macro mp_retainedkey('; put 'base_lib=WORK'; put ',base_dsn=BASETABLE'; put ',append_lib=WORK'; put ',append_dsn=APPENDTABLE'; put ',retained_key=DEFAULT_RK'; put ',business_key= PK1 PK2'; put ',check_uniqueness=NO'; put ',maxkeytable=0'; put ',locktable=0'; put ',outds=WORK.APPEND'; put ',filter_str='; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr'; put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;'; put '%let base_libds=%upcase(&base_lib..&base_dsn);'; put '%let app_libds=%upcase(&append_lib..&append_dsn);'; put '%let tempds1=%mf_getuniquename();'; put '%let tempds2=%mf_getuniquename();'; put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);'; put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));'; put '/* validation checks */'; put '%let iserr=0;'; put '%if &syscc>0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(SYSCC=&syscc on macro entry);'; put '%end;'; put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);'; put '%end;'; put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);'; put '%end;'; put '%else %if %length(&business_key)=0 %then %do;'; put '%let iserr=1;'; put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);'; put '%end;'; put '%do x=1 %to %sysfunc(countw(&business_key));'; put '/* check business key values exist */'; put '%let key_field=%scan(&business_key,&x,%str( ));'; put '%if not %mf_existvar(&app_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &app_libds!;'; put '%goto err;'; put '%end;'; put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;'; put '%let iserr=1;'; put '%let msg=Business key (&key_field) not found on &base_libds!;'; put '%goto err;'; put '%end;'; put '%end;'; put '%err:'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put 'proc sql noprint;'; put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;'; put '/**'; put '* get base table RK and bus field values for lookup'; put '*/'; put 'proc sql noprint;'; put 'create table &tempds1 as'; put 'select distinct &comma_pk,&retained_key'; put 'from &base_libds &filter_str'; put 'order by &comma_pk,&retained_key;'; put '%if &check_uniqueness=YES %then %do;'; put 'select count(*) into:checknobs'; put 'from (select distinct &comma_pk from &app_libds);'; put 'select count(*) into: appnobs from &app_libds; /* might be view */'; put '%if &checknobs ne &appnobs %then %do;'; put '%let msg=Source table &app_libds is not unique on (&business_key);'; put '%let iserr=1;'; put '%end;'; put '%end;'; put '%if &iserr=1 %then %do;'; put '/* err case so first perform an unlock of the base table before exiting */'; put '%mp_lockanytable('; put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable'; put ')'; put '%end;'; put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))'; put '%if %mf_existvar(&app_libds,&retained_key)'; put '%then %let dropvar=(drop=&retained_key);'; put '/* prepare interim table with retained key populated for matching keys */'; put 'proc sql noprint;'; put 'create table &tempds2 as'; put 'select b.&retained_key, a.*'; put 'from &app_libds &dropvar a'; put 'left join &tempds1 b'; put 'on 1'; put '%do idx_pk=1 %to %sysfunc(countw(&business_key));'; put '%let idx_val=%scan(&business_key,&idx_pk);'; put 'and a.&idx_val=b.&idx_val'; put '%end;'; put 'order by &retained_key;'; put '/* identify the number of entries without retained keys (new records) */'; put 'select count(*) into: newkey_cnt'; put 'from &tempds2'; put 'where missing(&retained_key);'; put 'quit;'; put '/**'; put '* Update maxkey table if link provided'; put '*/'; put '%if &maxkeytable ne 0 %then %do;'; put 'proc sql noprint;'; put 'select count(*) into: check from &maxkeytable'; put 'where upcase(keytable)="&base_libds";'; put '%mp_lockanytable(LOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with mp_retainedkey'; put ',ctl_ds=&locktable'; put ')'; put 'proc sql;'; put '%if &check=0 %then %do;'; put 'insert into &maxkeytable'; put 'set keytable="&base_libds"'; put ',keycolumn="&retained_key"'; put ',max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;'; put '%end;'; put '%else %do;'; put 'update &maxkeytable'; put 'set max_key=%eval(&maxkey+&newkey_cnt)'; put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt'; put 'where keytable="&base_libds";'; put '%end;'; put '%mp_lockanytable(UNLOCK'; put ',lib=%scan(&maxkeytable,1,.)'; put ',ds=%scan(&maxkeytable,2,.)'; put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)'; put ',ctl_ds=&locktable'; put ')'; put '%end;'; put '/* fill in the missing retained key values */'; put '%let tempvar=%mf_getuniquename();'; put 'data &outds(drop=&tempvar);'; put 'retain &tempvar %eval(&maxkey+1);'; put 'set &tempds2;'; put 'if &retained_key =. then &retained_key=&tempvar;'; put '&tempvar=&tempvar+1;'; put 'run;'; put '%mend mp_retainedkey;'; put '%macro mp_filterstore(libds=,'; put 'queryds=work.filterquery,'; put 'filter_summary=PERM.FILTER_SUMMARY,'; put 'filter_detail=PERM.FILTER_DETAIL,'; put 'lock_table=PERM.LOCK_TABLE,'; put 'maxkeytable=PERM.MAXKEYTABLE,'; put 'outresult=work.result,'; put 'outquery=work.query,'; put 'mdebug=1'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;'; put '%let libds=%upcase(&libds);'; put '%let orig_libds=&libds;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro entry)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_summary value: &filter_summary)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid filter_detail value: &filter_detail)'; put ')'; put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)'; put ',mac=mp_filterstore'; put ',msg=%str(Invalid lock_table value: &lock_table)'; put ')'; put '/**'; put '* validate query'; put '* use format catalog export, if a format'; put '*/'; put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;'; put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */'; put '%let ds0=%mf_getuniquename(prefix=fmtds_);'; put '%let libds=&ds0;'; put '/*'; put 'There is no need to export the entire format catalog here - the validations'; put 'are done against the data model, not the data values. So we can simply'; put 'hardcode the structure based on the cntlout dataset.'; put '*/'; put '%mddl_sas_cntlout(libds=&ds0)'; put '%end;'; put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)'; put '/* hash the result */'; put '%let ds1=%mf_getuniquename(prefix=hashds);'; put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)'; put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));'; put '%if &mdebug=1 %then %do;'; put 'data _null_;'; put 'putlog "filter_hash=&filter_hash";'; put 'set &ds1;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '/* check if data already exists for this hash */'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc after hash check)'; put ')'; put '%mp_abort(iftrue= ("&filter_hash "=" ")'; put ',mac=mp_filterstore'; put ',msg=%str(problem with filter_hash generation)'; put ')'; put '%if %mf_nobs(&outresult)=0 %then %do;'; put '/* first update summary table */'; put '%let ds3=%mf_getuniquename(prefix=filtersum);'; put 'data work.&ds3;'; put 'if 0 then set &filter_summary;'; put 'filter_table="&orig_libds";'; put 'filter_hash="&filter_hash";'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%let ds4=%mf_getuniquename(prefix=filtersumappend);'; put '%mp_retainedkey('; put 'base_lib=%scan(&filter_summary,1,.)'; put ',base_dsn=%scan(&filter_summary,2,.)'; put ',append_lib=work'; put ',append_dsn=&ds3'; put ',retained_key=filter_rk'; put ',business_key=filter_hash'; put ',maxkeytable=&maxkeytable'; put ',locktable=&lock_table'; put ',outds=work.&ds4'; put ')'; put 'proc append base=&filter_summary data=&ds4;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_summary,1,.)'; put ',ds=%scan(&filter_summary,2,.)'; put ',ref=MP_FILTERSTORE summary update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds4;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put 'data &outresult;'; put 'set &filter_summary;'; put 'where filter_hash="&filter_hash";'; put 'run;'; put '/* Next, update detail table */'; put '%let ds2=%mf_getuniquename(prefix=filterdetail);'; put 'data &ds2;'; put 'if 0 then set &filter_detail;'; put 'set &queryds;'; put 'format filter_hash $hex32. filter_line 8.;'; put 'filter_hash="&filter_hash";'; put 'filter_line=_n_;'; put 'PROCESSED_DTTM=%sysfunc(datetime());'; put 'run;'; put '%mp_lockanytable(LOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE update - &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put 'proc append base=&filter_detail data=&ds2;'; put 'run;'; put '%mp_lockanytable(UNLOCK,'; put 'lib=%scan(&filter_detail,1,.)'; put ',ds=%scan(&filter_detail,2,.)'; put ',ref=MP_FILTERSTORE detail update &filter_hash'; put ',ctl_ds=&lock_table'; put ')'; put '%if &syscc ne 0 %then %do;'; put 'data _null_;'; put 'set &ds2;'; put 'putlog (_all_)(=);'; put 'run;'; put '%goto err;'; put '%end;'; put '%end;'; put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;'; put 'by filter_line;'; put 'run;'; put '%err:'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=mp_filterstore'; put ',msg=%str(syscc=&syscc on macro exit)'; put ')'; put '%mend mp_filterstore;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Validates a filter clause before it gets hashified, returns the RK'; put '@details Used to generate a FILTER_RK from an input query dataset.'; put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored'; put 'in dc.mpe_filteranytable'; put '

Service Inputs

'; put '
IWANT
'; put '|FILTER_TABLE:$41.|'; put '|---|'; put '|DC258467.MPE_X_TEST|'; put '
FILTERQUERY
'; put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|'; put '|---|---|---|---|---|---|'; put '|AND|AND|1|SOME_BESTNUM|>|1|'; put '|AND|AND|1|SOME_TIME|=|77333|'; put '

Service Outputs

'; put '
result
'; put '@li FILTER_HASH'; put '@li FILTER_RK'; put '@li FILTER_TABLE'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getvalue.sas'; put '@li mp_filterstore.sas'; put '@li removecolsfromwork.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));'; put '%dc_assignlib(WRITE,%scan(&ds,1,.))'; put '%mp_filterstore('; put 'libds=&ds,'; put 'queryds=work.filterquery,'; put 'filter_summary=&dc_libref..mpe_filteranytable,'; put 'filter_detail=&dc_libref..mpe_filtersource,'; put 'lock_table=&dc_libref..mpe_lockanytable,'; put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,'; put 'outresult=work.result,'; put 'outquery=work.query, /* not used */'; put 'mdebug=1'; put ')'; put '%removecolsfromwork(___TMP___MD5)'; put 'proc sql;'; put 'alter table work.result drop PROCESSED_DTTM;'; put '%webout(OPEN)'; put '%webout(OBJ,result)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewdata; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds'; put ',mode=VIEW'; put ',groupds=work.groups'; put ',clsds=work.clsview'; put ',outds=CLSVIEW'; put ',outmeta=work.cls_rules'; put ');'; put '%local col_list is_admin;'; put '/* filter for the appropriate rules */'; put 'proc sql;'; put 'create table &outmeta as'; put 'select CLS_VARIABLE_NM,'; put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE'; put 'from &clsds'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and CLS_SCOPE in ("&mode",''ALL'')'; put 'and CLS_ACTIVE=1'; put '%if &mode=VIEW %then %do;'; put 'and CLS_HIDE ne 1'; put '%end;'; put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)'; put 'and CLS_LIBREF="%upcase(&tgtlib)"'; put 'and CLS_TABLE="%upcase(&tgtds)"'; put 'group by CLS_VARIABLE_NM;'; put '%let is_admin=0;'; put 'proc sql;'; put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";'; put '%put &sysmacroname: &=is_admin;'; put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;'; put '%put &sysmacroname: no CLS rules to apply;'; put '%put &=is_admin;'; put '/* copy using append for speed */'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '/* ensure CLS_RULES is empty in case of admin */'; put 'data &outmeta;'; put 'set &outmeta;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%else %if &mode=VIEW %then %do;'; put '/* just send back the relevant columns */'; put '%let col_list=0;'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=0;'; put '%if &col_list=0 %then %do;'; put '/*'; put 'We have columns that are set to CLS_HIDE=1 but we do not have any to'; put 'explicitly show. Therefore we assume all columns are to be shown except'; put 'those that are explicitly hidden.'; put '*/'; put 'proc sql noprint;'; put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta'; put 'where CLS_HIDE=1;'; put 'data &outds;'; put 'set &inds;'; put 'drop &col_list;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds;'; put 'set &inds;'; put 'keep &col_list;'; put 'run;'; put '%end;'; put '%end;'; put '%else %if &mode=EDIT %then %do;'; put '/*'; put 'In this case we pass all columns and the frontend will filter out the'; put 'ones that are not allowed to be edited.'; put '*/'; put 'data &outds;'; put 'set &inds;'; put 'stop;'; put 'run;'; put 'proc append base=&outds data=&inds;'; put 'run;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: invalid mode - &mode!;'; put '%abort;'; put '%end;'; put '%mend mpe_columnlevelsecurity;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mf_getattrn('; put 'libds'; put ',attr'; put ')/*/STORE SOURCE*/;'; put '%local dsid rc;'; put '%let dsid=%sysfunc(open(&libds,is));'; put '%if &dsid = 0 %then %do;'; put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;'; put '%put %sysfunc(sysmsg());'; put '-1'; put '%end;'; put '%else %do;'; put '%sysfunc(attrn(&dsid,&attr))'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%mend mf_getattrn;'; put '%macro mf_nobs(libds'; put ')/*/STORE SOURCE*/;'; put '%mf_getattrn(&libds,NLOBS)'; put '%mend mf_nobs;'; put '%macro mp_filtergenerate(inds,outref=filter);'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc - on macro entry)'; put ')'; put 'filename &outref temp;'; put '%if %mf_nobs(&inds)=0 %then %do;'; put '/* ensure we have a default filter */'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%else %do;'; put 'proc sort data=&inds;'; put 'by SUBGROUP_ID;'; put 'run;'; put 'data _null_;'; put 'file &outref lrecl=32800;'; put 'set &inds end=last;'; put 'by SUBGROUP_ID;'; put 'if _n_=1 then put ''(('';'; put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';'; put 'else put +2 SUBGROUP_LOGIC;'; put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;'; put 'if last.SUBGROUP_ID then put '')''@;'; put 'if last then put '')'';'; put 'run;'; put '%end;'; put '%mend mp_filtergenerate;'; put '%macro mpe_filtermaster(mode,libds,'; put 'dclib=,'; put 'filter_rk=-1,'; put 'outref=0,'; put 'outds=work.query'; put ');'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%let mode=%upcase(&mode);'; put '%let libds=%upcase(&libds);'; put '%mp_abort(iftrue= ('; put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD'; put ')'; put ',mac=&sysmacroname'; put ',msg=%str(Invalid MODE: &mode)'; put ')'; put '%mp_abort(iftrue= (&outref = 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Please provide a fileref!)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc)'; put ')'; put 'filename &outref temp;'; put '/* ensure outputs exist */'; put 'data _null_;'; put 'file &outref;'; put 'put '' '';'; put 'run;'; put 'data &outds;'; put 'set &dclib..mpe_filtersource;'; put 'stop;'; put 'run;'; put '/**'; put '* Deal with FILTER_RK first'; put '*/'; put '%if &filter_rk gt 0 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''( ''@@;'; put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));'; put 'call symputx(''filter_hash'',filter_hash,''l'');'; put 'run;'; put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))'; put 'out=&outds(drop=filter_hash filter_line processed_dttm);'; put 'by filter_line;'; put 'run;'; put '%mp_filtergenerate(&outds,outref=&outref)'; put '%end;'; put '/* Now filter for current records if the MODE is EDIT or DLOAD */'; put '%local varfrom varto;'; put '%let varfrom=0;'; put 'proc sql;'; put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto'; put 'from &dclib..MPE_TABLES'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";'; put '%put &=varfrom;'; put '%put &=varto;'; put '/**'; put '* Check if the date variables were mentioned in the query'; put '* This is a trigger for serving a historical view instead of current'; put '* we skip this part when checking an ULOAD as there are no date vars'; put '*/'; put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;'; put '%local validityvars;'; put 'proc sql;'; put 'select count(*) into: validityvars'; put 'from &outds'; put 'where variable_nm in ("&varfrom","&varto");'; put '%if &validityvars=0 %then %do;'; put 'data _null_;'; put 'file &outref mod;'; put 'length filter_text $32767;'; put 'varfrom=symget(''varfrom'');'; put 'varto=symget(''varto'');'; put 'filter_text=catx('' '','; put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')'''; put ');'; put 'if &filter_rk > 0 then put ''AND '' filter_text;'; put 'else put filter_text;'; put 'run;'; put '%end;'; put '%end;'; put '/**'; put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table'; put '*/'; put '/* first determine users group membership */'; put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)'; put '%local admin_check;'; put 'proc sql;'; put 'select count(*) into: admin_check'; put 'from work.groups'; put 'where groupname="&mpeadmins";'; put '%put &sysmacroname: &=admin_check &=mpeadmins;'; put '%if &admin_check=0 %then %do;'; put '%local scopeval;'; put '%if &mode=DLOAD %then %let scopeval=VIEW;'; put '%if &mode=ULOAD %then %let scopeval=EDIT;'; put '%else %let scopeval=&mode;'; put '/* extract relevant rows */'; put '%local rlsds;'; put '%let rlsds=%mf_getuniquename();'; put 'proc sql;'; put 'create table work.&rlsds as'; put 'select rls_group,'; put 'rls_group_logic as group_logic,'; put 'rls_subgroup_logic as subgroup_logic,'; put 'rls_subgroup_id as subgroup_id,'; put 'rls_variable_nm as variable_nm,'; put 'rls_operator_nm as operator_nm,'; put 'rls_raw_value as raw_value'; put 'from &mpelib..mpe_row_level_security'; put 'where &dc_dttmtfmt. lt tx_to'; put 'and rls_scope in ("&scopeval",''ALL'')'; put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)'; put 'and rls_libref="%scan(&libds,1,.)"'; put 'and rls_table="%scan(&libds,2,.)"'; put 'and rls_active=1'; put 'order by rls_group,rls_subgroup_id;'; put '%if &sqlobs>0 %then %do;'; put '/* check if we currently have filter or not */'; put 'data ;'; put 'infile &outref end=eof;'; put 'input;'; put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;'; put 'output;'; put 'stop;'; put 'run;'; put 'data _null_;'; put 'set &syslast;'; put 'file &outref mod;'; put 'if newfilter=1 then put ''('';'; put 'else put ''AND ('';'; put 'run;'; put '/* loop through and apply filters for each group membership */'; put '%local fref ds;'; put '%let fref=%mf_getuniquefileref();'; put '%let ds=%mf_getuniquename();'; put 'proc sql noprint;'; put 'select distinct rls_group into : group1 -'; put 'from work.&rlsds;'; put '%do i=1 %to &sqlobs;'; put 'data work.&ds;'; put 'set work.&rlsds;'; put 'where rls_group="&&group&i";'; put 'drop rls_group;'; put 'run;'; put '%mp_filtergenerate(&ds,outref=&fref)'; put 'data _null_;'; put 'infile &fref;'; put 'file &outref mod;'; put 'input;'; put 'if &i>1 and _n_=1 then put '' OR '';'; put 'put _infile_;'; put 'run;'; put '%end;'; put 'data _null_;'; put 'file &outref mod;'; put 'put '')'';'; put 'run;'; put '%end; /* &sqlobs>0 */'; put '%else %do;'; put '%put &sysmacroname: no matching groups;'; put 'data _null_;'; put 'set work.groups;'; put 'putlog (_all_)(=);'; put 'run;'; put '%end;'; put '%mp_abort(iftrue= (&syscc>0)'; put ',mac=&sysmacroname'; put ',msg=%str(Row Level Security Generation Error)'; put ')'; put '%end; /* &admin_check=0 */'; put '%put leaving &sysmacroname with the following query:;'; put '%local empty;'; put '%let empty=0;'; put 'data _null_;'; put 'infile &outref end=eof;'; put 'input;'; put 'putlog _infile_;'; put 'if _n_=1 and eof and cats(_infile_)='''' then do;'; put 'put ''1=1'';'; put 'call symputx(''empty'',1,''l'');'; put 'end;'; put 'run;'; put '%if &empty=1 %then %do;'; put 'data _null_;'; put 'file &outref;'; put 'put ''1=1'';'; put 'run;'; put '%end;'; put '%mend mpe_filtermaster;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_gettables('; put 'uri='; put ',outds=work.mm_gettables'; put ',getauth=YES'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'length uri serveruri conn_uri domainuri libname ServerContext AuthDomain'; put 'path_schema usingpkguri type tableuri $256 id $17'; put 'libdesc $200 libref engine $8 IsDBMSLibname IsPreassigned $1'; put 'tablename $50 /* metadata table names can be longer than $32 */'; put ';'; put 'keep libname libdesc libref engine ServerContext path_schema AuthDomain'; put 'tableuri tablename IsPreassigned IsDBMSLibname id;'; put 'call missing (of _all_);'; put 'uri=symget(''uri'');'; put 'rc= metadata_getattr(uri, "Name", libname);'; put 'if rc <0 then do;'; put 'put ''The library is not defined in this metadata repository.'';'; put 'stop;'; put 'end;'; put 'rc= metadata_getattr(uri, "Desc", libdesc);'; put 'rc= metadata_getattr(uri, "Libref", libref);'; put 'rc= metadata_getattr(uri, "Engine", engine);'; put 'rc= metadata_getattr(uri, "IsDBMSLibname", IsDBMSLibname);'; put 'rc= metadata_getattr(uri, "IsPreassigned", IsPreassigned);'; put 'rc= metadata_getattr(uri, "Id", Id);'; put '/*** Get associated ServerContext ***/'; put 'rc= metadata_getnasn(uri, "DeployedComponents", 1, serveruri);'; put 'if rc > 0 then rc2= metadata_getattr(serveruri, "Name", ServerContext);'; put 'else ServerContext='''';'; put '/*** If the library is a DBMS library, get the Authentication Domain'; put 'associated with the DBMS connection credentials ***/'; put 'if IsDBMSLibname="1" and "&getauth"=''YES'' then do;'; put 'rc= metadata_getnasn(uri, "LibraryConnection", 1, conn_uri);'; put 'if rc>0 then do;'; put 'rc2= metadata_getnasn(conn_uri, "Domain", 1, domainuri);'; put 'if rc2>0 then rc3= metadata_getattr(domainuri, "Name", AuthDomain);'; put 'end;'; put 'end;'; put '/*** Get the path/database schema for this library ***/'; put 'rc=metadata_getnasn(uri, "UsingPackages", 1, usingpkguri);'; put 'if rc>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put 'if type=''Directory'' then'; put 'rc=metadata_getattr(usingpkguri, "DirectoryName", path_schema);'; put 'else if type=''DatabaseSchema'' then'; put 'rc=metadata_getattr(usingpkguri, "Name", path_schema);'; put 'else path_schema="unknown";'; put 'end;'; put '/*** Get the tables associated with this library ***/'; put '/*** If DBMS, tables are associated with DatabaseSchema ***/'; put 'if type=''DatabaseSchema'' then do;'; put 't=1;'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(usingpkguri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'else if type in (''Directory'',''SASLibrary'') then do;'; put 't=1;'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'if ntab>0 then do t=1 to ntab;'; put 'tableuri='''';'; put 'tablename='''';'; put 'ntab=metadata_getnasn(uri, "Tables", t, tableuri);'; put 'tabrc= metadata_getattr(tableuri, "Name", tablename);'; put 'output;'; put 'end;'; put 'else put ''Library '' libname '' has no tables registered'';'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by tablename tableuri;'; put 'run;'; put '%mend mm_gettables;'; put '%macro mm_getcols('; put 'tableuri='; put ',outds=work.mm_getcols'; put ')/*/STORE SOURCE*/;'; put 'data &outds;'; put 'keep col: SAS:;'; put 'length assoc uri coluri colname coldesc SASColumnType SASFormat SASInformat'; put 'SASPrecision SASColumnLength $256;'; put 'call missing (of _all_);'; put 'uri=symget(''tableuri'');'; put 'n=1;'; put 'do while (metadata_getnasn(uri,''Columns'',n,coluri)>0);'; put 'rc3=metadata_getattr(coluri,"Name",colname);'; put 'rc3=metadata_getattr(coluri,"Desc",coldesc);'; put 'rc4=metadata_getattr(coluri,"SASColumnType",SASColumnType);'; put 'rc5=metadata_getattr(coluri,"SASFormat",SASFormat);'; put 'rc6=metadata_getattr(coluri,"SASInformat",SASInformat);'; put 'rc7=metadata_getattr(coluri,"SASPrecision",SASPrecision);'; put 'rc8=metadata_getattr(coluri,"SASColumnLength",SASColumnLength);'; put 'output;'; put 'call missing(colname,coldesc,SASColumnType,SASFormat,SASInformat'; put ',SASPrecision,SASColumnLength);'; put 'n+1;'; put 'end;'; put 'run;'; put 'proc sort;'; put 'by colname;'; put 'run;'; put '%mend mm_getcols;'; put '%macro mm_createdataset(libds=,tableuri=,outds=work.mm_createdataset,mDebug=0);'; put '%local dbg errorcheck tempds1 tempds2 tempds3;'; put '%if &mDebug=0 %then %let dbg=*;'; put '%let errorcheck=1;'; put '%if %index(&libds,.)>0 %then %do;'; put '/* get lib uri */'; put 'data;run;%let tempds1=&syslast;'; put '%mm_getlibs(outds=&tempds1)'; put 'data _null_;'; put 'set &tempds1;'; put 'if upcase(libraryref)="%upcase(%scan(&libds,1,.))";'; put 'call symputx(''liburi'',LibraryId,''l'');'; put 'run;'; put '/* get ds uri */'; put 'data;run;%let tempds2=&syslast;'; put '%mm_gettables(uri=&liburi,outds=&tempds2)'; put 'data _null_;'; put 'set &tempds2;'; put 'where upcase(tablename)="%upcase(%scan(&libds,2,.))";'; put '&dbg putlog tableuri=;'; put 'call symputx(''tableuri'',tableuri);'; put 'run;'; put '%end;'; put 'data;run;'; put '%let tempds3=&syslast;'; put '%mm_getcols(tableuri=&tableuri,outds=&tempds3)'; put '%if %mf_nobs(&tempds3)=0 %then %do;'; put '%put &libds (&tableuri) has no columns defined!!;'; put 'data &outds;'; put 'run;'; put '%return;'; put '%end;'; put 'data _null_;'; put 'set &tempds3 end=last;'; put 'if _n_=1 then call execute(''data &outds;'');'; put 'length attrib $32767;'; put 'if SAScolumntype=''C'' then type=''$'';'; put 'attrib=''attrib ''!!cats(colname)!!'' length=''!!cats(type,SASColumnLength,''.'');'; put 'if not missing(sasformat) then fmt='' format=''!!cats(sasformat);'; put 'if not missing(sasinformat) then infmt='' informat=''!!cats(sasinformat);'; put 'if not missing(coldesc) then desc='' label=''!!quote(cats(coldesc));'; put 'attrib=trim(attrib)!!fmt!!infmt!!desc!!'';'';'; put 'call execute(attrib);'; put 'if last then call execute(''call missing(of _all_);stop;run;'');'; put 'run;'; put '%mend mm_createdataset;'; put '%macro dc_createdataset(libds=mm_getlibs,outds=viewdata);'; put '%mm_createdataset(libds=&libds,outds=viewdata)'; put '%mend dc_createdataset;'; put '%macro mm_gettableid('; put 'libref='; put ',ds='; put ',outds=work.mm_gettableid'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put 'data &outds;'; put 'length uri usingpkguri id type tableuri tablename tmpuri $256;'; put 'call missing(of _all_);'; put 'keep tableuri tablename;'; put 'n=1;'; put 'rc=0;'; put 'if metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",n,uri)<1 then do;'; put 'put "Library &libref not found";'; put 'stop;'; put 'end;'; put '&mD.putlog "uri is " uri;'; put 'if metadata_getnasn(uri, "UsingPackages", 1, usingpkguri)>0 then do;'; put 'rc=metadata_resolve(usingpkguri,type,id);'; put '&mD.putlog "Type is " type;'; put 'end;'; put 'if type=''DatabaseSchema'' then tmpuri=usingpkguri;'; put 'else tmpuri=uri;'; put 't=1;'; put 'do while(metadata_getnasn(tmpuri, "Tables", t, tableuri)>0);'; put 't+1;'; put 'rc= metadata_getattr(tableuri, "Name", tablename);'; put '&mD.putlog "Table is " tablename;'; put 'if upcase(tablename)="%upcase(&ds)" then do;'; put 'output;'; put 'end;'; put 'end;'; put 'run;'; put '%mend mm_gettableid;'; put '%macro dc_gettableid(libref='; put ',ds='; put ',outds=);'; put '%mm_gettableid(libref=&libref,ds=&ds,outds=&outds)'; put '%if %mf_nobs(&outds)=0 %then %do;'; put 'data &outds;'; put 'tableuri='''';'; put 'tablename="&ds";'; put 'run;'; put '%end;'; put '%mend dc_gettableid;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '%macro mf_getvarcount(libds,typefilter=A'; put ')/*/STORE SOURCE*/;'; put '%local dsid nvars rc outcnt x;'; put '%let dsid=%sysfunc(open(&libds));'; put '%let nvars=.;'; put '%let outcnt=0;'; put '%let typefilter=%upcase(&typefilter);'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &typefilter=A %then %let outcnt=&nvars;'; put '%else %if &nvars>0 %then %do x=1 %to &nvars;'; put '/* increment based on variable type */'; put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;'; put '%let outcnt=%eval(&outcnt+1);'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put unable to open &libds (rc=&dsid);'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '&outcnt'; put '%mend mf_getvarcount;'; put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)'; put ')/des=''ungraceful abort'' /*STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mf_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%abort;'; put '%mend mf_abort;'; put '/** @endcond */'; put '%macro mf_verifymacvars('; put 'verifyVars /* list of macro variable NAMES */'; put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */'; put ',mAbort=SOFT'; put ')/*/STORE SOURCE*/;'; put '%local verifyIterator verifyVar abortmsg;'; put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));'; put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));'; put '%if not %symexist(&verifyvar) %then %do;'; put '%let abortmsg= Variable &verifyVar is MISSING;'; put '%goto exit_err;'; put '%end;'; put '%if %length(%trim(&&&verifyVar))=0 %then %do;'; put '%let abortmsg= Variable &verifyVar is EMPTY;'; put '%goto exit_err;'; put '%end;'; put '%if &makeupcase=YES %then %do;'; put '%let &verifyVar=%upcase(&&&verifyvar);'; put '%end;'; put '%end;'; put '%goto exit_success;'; put '%exit_err:'; put '%put &abortmsg;'; put '%mf_abort(iftrue=(&mabort ne SOFT),'; put 'mac=mf_verifymacvars,'; put 'msg=%str(&abortmsg)'; put ')'; put '0'; put '%return;'; put '%exit_success:'; put '1'; put '%mend mf_verifymacvars;'; put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);'; put 'proc sql;'; put 'create table &libds('; put 'TYPE char(1) label='; put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)'''; put ',FMTNAME char(32) label=''Format name'''; put ',FMTROW num label='; put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)'''; put ',START char(32767) label=''Starting value for format'''; put '/*'; put 'Keep lengths of START and END the same to avoid this err:'; put '"Start is greater than end: -<."'; put 'Similar usage note: https://support.sas.com/kb/69/330.html'; put '*/'; put ',END char(32767) label=''Ending value for format'''; put ',LABEL char(32767) label=''Format value label'''; put ',MIN num length=3 label=''Minimum length'''; put ',MAX num length=3 label=''Maximum length'''; put ',DEFAULT num length=3 label=''Default length'''; put ',LENGTH num length=3 label=''Format length'''; put ',FUZZ num label=''Fuzz value'''; put ',PREFIX char(2) label=''Prefix characters'''; put ',MULT num label=''Multiplier'''; put ',FILL char(1) label=''Fill character'''; put ',NOEDIT num length=3 label=''Is picture string noedit?'''; put ',SEXCL char(1) label=''Start exclusion'''; put ',EEXCL char(1) label=''End exclusion'''; put ',HLO char(13) label='; put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html'''; put ',DECSEP char(1) label=''Decimal separator'''; put ',DIG3SEP char(1) label=''Three-digit separator'''; put ',DATATYPE char(8) label=''Date/time/datetime?'''; put ',LANGUAGE char(8) label=''Language for date strings'''; put ');'; put '%local lib;'; put '%let libds=%upcase(&libds);'; put '%if %index(&libds,.)=0 %then %let lib=WORK;'; put '%else %let lib=%scan(&libds,1,.);'; put 'proc datasets lib=&lib noprint;'; put 'modify %scan(&libds,-1,.);'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%mend mddl_sas_cntlout;'; put '%macro mp_aligndecimal(var,width=8);'; put '%local tmpvar;'; put '%let tmpvar=%mf_getuniquename(prefix=aligndp);'; put 'length &tmpvar $&width;'; put 'if index(&var,''.'') then do;'; put '&tmpvar=cats(scan(&var,1,''.''));'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));'; put 'end;'; put 'else do;'; put '&tmpvar=cats(&var);'; put '&tmpvar=right(&tmpvar);'; put '&var=&tmpvar;'; put 'end;'; put 'drop &tmpvar;'; put '%mend mp_aligndecimal;'; put '%macro mp_cntlout('; put 'iftrue=(1=1)'; put ',libcat='; put ',cntlout=work.fmtextract'; put ',fmtlist=0'; put ')/*/STORE SOURCE*/;'; put '%local ddlds cntlds i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%let ddlds=%mf_getuniquename();'; put '%let cntlds=%mf_getuniquename();'; put '%mddl_sas_cntlout(libds=&ddlds)'; put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;'; put '%let libcat=%scan(&libcat,1,-);'; put '%end;'; put 'proc format lib=&libcat cntlout=&cntlds;'; put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;'; put 'select'; put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));'; put '%scan(&fmtlist,&i,%str( ))'; put '%end;'; put ';'; put '%end;'; put 'run;'; put 'data &cntlout/nonote2err;'; put 'if 0 then set &ddlds;'; put 'set &cntlds;'; put 'by type fmtname notsorted;'; put '/* align the numeric values to avoid overlapping ranges */'; put 'if type in ("I","N") then do;'; put '%mp_aligndecimal(start,width=16)'; put '%mp_aligndecimal(end,width=16)'; put 'end;'; put '/* create row marker. Data cannot be sorted without it! */'; put 'if first.fmtname then fmtrow=1;'; put 'else fmtrow+1;'; put 'run;'; put 'proc sort;'; put 'by type fmtname fmtrow;'; put 'run;'; put 'proc sql;'; put 'drop table &ddlds,&cntlds;'; put '%mend mp_cntlout;'; put '/** @endcond */'; put '%macro mp_dsmeta(libds,outds=work.dsmeta);'; put '%local ds1 ds2;'; put 'data;run; %let ds1=&syslast;'; put 'data;run; %let ds2=&syslast;'; put '/* setup the ODS capture */'; put 'ods output attributes=&ds1 enginehost=&ds2;'; put '/* export the metadata */'; put 'proc contents data=&libds;'; put 'run;'; put '/* load it into a single table */'; put 'data &outds (keep=ods_table name value);'; put 'length ods_table $10 name label2 label1 label $100'; put 'value cvalue cvalue1 cvalue2 $1000'; put 'nvalue nvalue1 nvalue2 8;'; put 'if _n_=1 then call missing (of _all_);'; put '* putlog (_all_)(=);'; put 'set &ds1 (in=atrs) &ds2 (in=eng);'; put 'if atrs then do;'; put 'ods_table=''ATTRIBUTES'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'if label2 ne '''' then do;'; put 'name=label2;'; put 'value=coalescec(cvalue2,put(nvalue2,best.));'; put 'output;'; put 'end;'; put 'end;'; put 'else if eng then do;'; put 'ods_table=''ENGINEHOST'';'; put 'name=coalescec(label1,label);'; put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));'; put 'output;'; put 'end;'; put 'run;'; put 'proc sql;'; put 'drop table &ds1, &ds2;'; put '%mend mp_dsmeta;'; put '%macro mp_getcols(ds, outds=work.cols);'; put '%local dropds;'; put 'proc contents noprint data=&ds'; put 'out=_data_ (keep=name type length label varnum format:);'; put 'run;'; put '%let dropds=&syslast;'; put 'data &outds(keep=name type length varnum format label ddtype fmtname);'; put 'set &dropds(rename=(format=fmtname type=type2));'; put 'name=upcase(name);'; put 'if type2=2 then do;'; put 'length format $49.;'; put 'if fmtname='''' then format=cats(''$'',length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else format=cats(fmtname,formatl,''.'');'; put 'type=''C'';'; put 'ddtype=''CHARACTER'';'; put 'end;'; put 'else do;'; put 'if fmtname='''' then format=cats(length,''.'');'; put 'else if formatl=0 then format=cats(fmtname,''.'');'; put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');'; put 'else format=cats(fmtname,formatl,''.'',formatd);'; put 'type=''N'';'; put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';'; put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY'''; put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA'''; put 'or format=:''MONYY'''; put 'then ddtype=''DATE'';'; put 'else if format=:''TIME'' then ddtype=''TIME'';'; put 'else ddtype=''NUMERIC'';'; put 'end;'; put 'if label='''' then label=name;'; put 'run;'; put 'proc sql;'; put 'drop table &dropds;'; put '%mend mp_getcols;'; put '/** @cond */'; put '%macro mf_existfeature(feature'; put ')/*/STORE SOURCE*/;'; put '%let feature=%upcase(&feature);'; put '%local platform;'; put '%let platform=%mf_getplatform();'; put '%if &feature= %then %do;'; put '%put No feature was requested for detection;'; put '%end;'; put '%else %if &feature=COLCONSTRAINTS %then %do;'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=PROCLUA %then %do;'; put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */'; put '%if &platform=SASVIYA %then 1;'; put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;'; put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=DBMS_MEMTYPE %then %do;'; put '/* does dbms_memtype exist in dictionary.tables? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;'; put '%else 1;'; put '%end;'; put '%else %if &feature=EXPORTXLS %then %do;'; put '/* is it possible to PROC EXPORT an excel file? */'; put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;'; put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;'; put '%else 0;'; put '%end;'; put '%else %do;'; put '-1'; put '%put &sysmacroname: &feature not found;'; put '%end;'; put '%mend mf_existfeature;'; put '/** @endcond */'; put '%macro mf_getschema(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum rc schema;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=('; put 'libname="%upcase(&libref)" and sysname=''Schema/Owner'''; put ')),i));'; put '%if (&dsid ^= 0) %then %do;'; put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let schema=%sysfunc(getvarc(&dsid,&vnum));'; put '%put &libref. schema is &schema.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '&schema'; put '%mend mf_getschema;'; put '/** @endcond */'; put '%macro mf_isblank(param'; put ')/*/STORE SOURCE*/;'; put '%sysevalf(%superq(param)=,boolean)'; put '%mend mf_isblank;'; put '%macro mp_dropmembers('; put 'list /* space separated list of datasets / views */'; put ',libref=WORK /* can only drop from a single library at a time */'; put ',iftrue=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%if %mf_isblank(&list) %then %do;'; put '%put NOTE: nothing to drop!;'; put '%return;'; put '%end;'; put 'proc datasets lib=&libref nolist;'; put 'delete &list;'; put 'delete &list /mtype=view;'; put 'run;'; put '%mend mp_dropmembers;'; put '%macro mp_getconstraints(lib=WORK'; put ',ds='; put ',outds=mp_getconstraints'; put ',mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '/**'; put '* Cater for environments where sashelp.vcncolu is not available'; put '*/'; put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;'; put 'proc sql;'; put 'create table &outds('; put 'libref char(8)'; put ',TABLE_NAME char(32)'; put ',constraint_type char(8) label=''Constraint Type'''; put ',constraint_name char(32) label=''Constraint Name'''; put ',column_name char(32) label=''Column'''; put ',constraint_order num'; put ');'; put '%return;'; put '%end;'; put '/**'; put '* Neither dictionary tables nor sashelp provides a constraint order column,'; put '* however they DO arrive in the correct order. So, create the col.'; put '**/'; put '%local vw;'; put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);'; put 'data &vw /view=&vw;'; put 'set sashelp.vcncolu;'; put 'where table_catalog="&lib";'; put '/* use retain approach to reset the constraint order with each constraint */'; put 'length tmp $1000;'; put 'retain tmp;'; put 'drop tmp;'; put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;'; put 'constraint_order=1;'; put 'end;'; put 'else constraint_order+1;'; put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);'; put 'run;'; put '/* must use SQL as proc datasets does not support length changes */'; put 'proc sql noprint;'; put 'create table &outds as'; put 'select upcase(a.TABLE_CATALOG) as libref'; put ',upcase(a.TABLE_NAME) as TABLE_NAME'; put ',a.constraint_type'; put ',a.constraint_name'; put ',b.column_name'; put ',b.constraint_order'; put 'from dictionary.TABLE_CONSTRAINTS a'; put 'left join &vw b'; put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)'; put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)'; put 'and a.constraint_name=b.constraint_name'; put '/**'; put '* We cannot apply this clause to the underlying dictionary table. See:'; put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867'; put '* cannot use`where calculated libref="&lib"` either as it will STILL execute'; put '* all the underlying constraint queries, causing exception errors in some'; put '* cases: https://github.com/sasjs/core/issues/283'; put '*/'; put 'where a.TABLE_CATALOG="&lib"'; put '%if "&ds" ne "" %then %do;'; put 'and upcase(a.TABLE_NAME)="&ds"'; put 'and upcase(b.TABLE_NAME)="&ds"'; put '%end;'; put 'order by libref, table_name, constraint_name, constraint_order'; put ';'; put '/* tidy up */'; put '%mp_dropmembers('; put '&vw,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getconstraints;'; put '%macro mp_getpk('; put 'lib,'; put 'ds=0,'; put 'outds=work.mp_getpk,'; put 'mdebug=0'; put ')/*/STORE SOURCE*/;'; put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks'; put 'pkfromindex;'; put '%let lib=%upcase(&lib);'; put '%let ds=%upcase(&ds);'; put '%let engine=%mf_getengine(&lib);'; put '%let schema=%mf_getschema(&lib);'; put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);'; put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);'; put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);'; put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);'; put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);'; put '%let sum=%mf_getuniquename(prefix=getpk_sum);'; put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);'; put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);'; put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);'; put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);'; put '%local dbg;'; put '%if &mdebug=1 %then %do;'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '%end;'; put '%else %let dbg=*;'; put 'proc sql;'; put 'create table &ds1 as'; put 'select libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put ',upcase(name) as name'; put ',type'; put ',length'; put ',varnum'; put ',label'; put ',format'; put ',idxusage'; put ',notnull'; put 'from dictionary.columns'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put '%if &engine=SQLSVR %then %do;'; put 'proc sql;'; put 'connect using &lib;'; put 'create table work.&ds2 as'; put 'select * from connection to &lib('; put 'select'; put 's.name as SchemaName,'; put 't.name as memname,'; put 'tc.name as name,'; put 'ic.key_ordinal as KeyOrderNr'; put 'from'; put 'sys.schemas s'; put 'inner join sys.tables t on s.schema_id=t.schema_id'; put 'inner join sys.indexes i on t.object_id=i.object_id'; put 'inner join sys.index_columns ic on i.object_id=ic.object_id'; put 'and i.index_id=ic.index_id'; put 'inner join sys.columns tc on ic.object_id=tc.object_id'; put 'and ic.column_id=tc.column_id'; put 'where i.is_primary_key=1'; put 'and s.name=%str(%'')&schema%str(%'')'; put 'order by t.name, ic.key_ordinal ;'; put ');disconnect from &lib;'; put 'create table &ds3 as'; put 'select a.*'; put ',case when b.name is not null then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&ds2 b'; put 'on a.dsn=b.memname'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn;'; put '%end;'; put '%else %do;'; put '%if &ds = 0 %then %let dsn=;'; put '/* get all constraints, in constraint order*/'; put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)'; put '/* extract cols that are clearly primary keys */'; put 'proc sql;'; put 'create table &pk4sure as'; put 'select libref'; put ',table_name'; put ',constraint_name'; put ',constraint_order'; put ',column_name as name'; put 'from work.&ds2'; put 'where constraint_type=''PRIMARY'''; put 'order by 1,2,3,4;'; put '/* extract unique constraints where every col is also NOT NULL */'; put 'proc sql;'; put 'create table &sum as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',count(a.column_name) as unq_cnt'; put ',count(b.column_name) as nul_cnt'; put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a'; put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.column_name=b.column_name'; put 'group by 1,2,3'; put 'having unq_cnt=nul_cnt;'; put '/* extract cols from the relevant unique constraints */'; put 'create table &pkdefault as'; put 'select a.libref'; put ',a.table_name'; put ',a.constraint_name'; put ',b.constraint_order'; put ',b.column_name as name'; put 'from &sum a'; put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b'; put 'on a.libref=b.libref'; put 'and a.table_name=b.table_name'; put 'and a.constraint_name=b.constraint_name'; put 'order by 1,2,3,4;'; put '/* extract cols from the relevant unique INDEXES */'; put 'create table &pkfromindex as'; put 'select libname as libref'; put ',memname as table_name'; put ',indxname as constraint_name'; put ',indxpos as constraint_order'; put ',name'; put 'from dictionary.indexes'; put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put 'order by 1,2,3,4;'; put '/* create one table */'; put 'data &finalpks;'; put 'set &pkdefault &pk4sure &pkfromindex;'; put 'pk_ind=1;'; put '/* if there are multiple unique constraints, take the first */'; put 'by libref table_name constraint_name;'; put 'retain keepme;'; put 'if first.table_name then keepme=1;'; put 'if first.constraint_name and not first.table_name then keepme=0;'; put 'if keepme=1;'; put 'run;'; put '/* join back to starting table */'; put 'proc sql;'; put 'create table &ds3 as'; put 'select a.*'; put ',b.constraint_order'; put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind'; put 'from work.&ds1 a'; put 'left join work.&finalpks b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.table_name'; put 'and upcase(a.name)=upcase(b.name)'; put 'order by libref,dsn,constraint_order;'; put '%end;'; put '/* prepare tables */'; put 'proc sql;'; put 'create table work.&tabs1 as select'; put 'libname as libref'; put ',upcase(memname) as dsn'; put ',memtype'; put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;'; put ',dbms_memtype'; put '%end;'; put '%else %do;'; put ',''n/a'' as dbms_memtype format=$32.'; put '%end;'; put ',typemem'; put ',memlabel'; put ',nvar'; put ',compress'; put 'from dictionary.tables'; put 'where upcase(libname)="&lib"'; put '%if &ds ne 0 %then %do;'; put 'and upcase(memname)="&ds"'; put '%end;'; put ';'; put 'data &tabs2;'; put 'set &ds3;'; put 'length pk_fields $512;'; put 'retain pk_fields;'; put 'by libref dsn constraint_order;'; put 'if first.dsn then pk_fields='''';'; put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);'; put 'if last.dsn then output;'; put 'run;'; put 'proc sql;'; put 'create table &outds as'; put 'select a.libref'; put ',a.dsn'; put ',a.memtype'; put ',a.dbms_memtype'; put ',a.typemem'; put ',a.memlabel'; put ',a.nvar'; put ',a.compress'; put ',b.pk_fields'; put 'from work.&tabs1 a'; put 'left join work.&tabs2 b'; put 'on a.libref=b.libref'; put 'and a.dsn=b.dsn;'; put '/* tidy up */'; put '%mp_dropmembers('; put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,'; put 'iftrue=(&mdebug=0)'; put ')'; put '%mend mp_getpk;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mf_getvarlist(libds'; put ',dlm=%str( )'; put ',quote=no'; put ',typefilter=A'; put ')/*/STORE SOURCE*/;'; put '/* declare local vars */'; put '%local outvar dsid nvars x rc dlm q var vtype;'; put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; put '/* open dataset in macro */'; put '%let dsid=%sysfunc(open(&libds));'; put '%if &dsid %then %do;'; put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; put '%if &nvars>0 %then %do;'; put '/* add variables with supplied delimeter */'; put '%do x=1 %to &nvars;'; put '/* get variable type */'; put '%let vtype=%sysfunc(vartype(&dsid,&x));'; put '%if &vtype=&typefilter or &typefilter=A %then %do;'; put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; put '%if &var=&q&q %then %do;'; put '%put &sysmacroname: Empty column found in &libds!;'; put '%let var=&q. &q.;'; put '%end;'; put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; put '%else %let outvar=&outvar.&dlm.&var.;'; put '%end;'; put '%end;'; put '%end;'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; put '%let rc=%sysfunc(close(&dsid));'; put '%end;'; put '%do;%unquote(&outvar)%end;'; put '%mend mf_getvarlist;'; put '%macro mf_getvartype(libds /* two level name */'; put ', var /* variable name from which to return the type */'; put ')/*/STORE SOURCE*/;'; put '%local dsid vnum vtype rc;'; put '/* Open dataset */'; put '%let dsid = %sysfunc(open(&libds));'; put '%if &dsid. > 0 %then %do;'; put '/* Get variable number */'; put '%let vnum = %sysfunc(varnum(&dsid, &var));'; put '/* Get variable type (C/N) */'; put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));'; put '%else %do;'; put '%put NOTE: Variable &var does not exist in &libds;'; put '%let vtype = %str( );'; put '%end;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);'; put '%put &sysmacroname: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '/* Close dataset */'; put '%let rc = %sysfunc(close(&dsid));'; put '/* Return variable type */'; put '&vtype'; put '%mend mf_getvartype;'; put '%macro mf_mkdir(dir'; put ')/*/STORE SOURCE*/;'; put '%local lastchar child parent;'; put '%let lastchar = %substr(&dir, %length(&dir));'; put '%if (%bquote(&lastchar) eq %str(:)) %then %do;'; put '/* Cannot create drive mappings */'; put '%return;'; put '%end;'; put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;'; put '/* last char is a slash */'; put '%if (%length(&dir) eq 1) %then %do;'; put '/* one single slash - root location is assumed to exist */'; put '%return;'; put '%end;'; put '%else %do;'; put '/* strip last slash */'; put '%let dir = %substr(&dir, 1, %length(&dir)-1);'; put '%end;'; put '%end;'; put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;'; put '/* directory does not exist so prepare to create */'; put '/* first get the childmost directory */'; put '%let child = %scan(&dir, -1, %str(/\:));'; put '/*'; put 'If child name = path name then there are no parents to create. Else'; put 'they must be recursively scanned.'; put '*/'; put '%if (%length(&dir) gt %length(&child)) %then %do;'; put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));'; put '%mf_mkdir(&parent)'; put '%end;'; put '/*'; put 'Now create the directory. Complain loudly of any errs.'; put '*/'; put '%let dname = %sysfunc(dcreate(&child, &parent));'; put '%if (%bquote(&dname) eq ) %then %do;'; put '%put %str(ERR)OR: could not create &parent + &child;'; put '%abort cancel;'; put '%end;'; put '%else %do;'; put '%put Directory created: &dir;'; put '%end;'; put '%end;'; put '/* exit quietly if directory did exist.*/'; put '%mend mf_mkdir;'; put '%macro mp_searchdata(lib='; put ',ds='; put ',string= /* the query will use a contains (?) operator */'; put ',numval= /* numeric must match exactly */'; put ',outloc=0'; put ',outlib=MPSEARCH'; put ',outobs=-1'; put ',filter_text=%str(1=1)'; put ')/*/STORE SOURCE*/;'; put '%local table_list table table_num table colnum col start_tm check_tm vars type'; put 'coltype;'; put '%put process began at %sysfunc(datetime(),datetime19.);'; put '%if &syscc ge 4 %then %do;'; put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;'; put '%return;'; put '%end;'; put '%if &string = %then %let type=N;'; put '%else %let type=C;'; put '%if "&outloc"="0" %then %do;'; put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();'; put '%end;'; put '%mf_mkdir(&outloc)'; put 'libname &outlib "&outloc";'; put '/* get the list of tables in the library */'; put 'proc sql noprint;'; put 'select distinct memname into: table_list separated by '' '''; put 'from dictionary.tables'; put 'where upcase(libname)="%upcase(&lib)"'; put '%if &ds ne %then %do;'; put 'and upcase(memname)=%upcase("&ds")'; put '%end;'; put ';'; put '/* check that we have something to check */'; put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;'; put '/* loop through each table */'; put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));'; put '%let table=%scan(&table_list,&table_num,%str( ));'; put '%let vars=%mf_getvarlist(&lib..&table);'; put '%if %length(&vars)=0 %then %do;'; put '%put NO COLUMNS IN &lib..&table! This will be skipped.;'; put '%end;'; put '%else %do;'; put '%let check_tm=%sysfunc(datetime());'; put '/* prep input */'; put 'data &outlib..&table;'; put 'set &lib..&table;'; put 'where %unquote(&filter_text) and ( 0'; put '/* loop through columns */'; put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));'; put '%let col=%scan(&vars,&colnum,%str( ));'; put '%let coltype=%mf_getvartype(&lib..&table,&col);'; put '%if &type=C and &coltype=C %then %do;'; put '/* if a char column, see if it contains the string */'; put 'or ("&col"n ? "&string")'; put '%end;'; put '%else %if &type=N and &coltype=N %then %do;'; put '/* if numeric match exactly */'; put 'or ("&col"n = &numval)'; put '%end;'; put '%end;'; put ');'; put '%if &outobs>-1 %then %do;'; put 'if _n_ > &outobs then stop;'; put '%end;'; put 'run;'; put '%put Search query for &table took'; put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;'; put '%if &syscc ne 0 %then %do;'; put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;'; put '%return;'; put '%end;'; put '%if %mf_nobs(&outlib..&table)=0 %then %do;'; put 'proc sql;'; put 'drop table &outlib..&table;'; put '%end;'; put '%end;'; put '%end;'; put '%put process finished at %sysfunc(datetime(),datetime19.);'; put '%mend mp_searchdata;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewdata.sas'; put '@brief Provide the raw view of the data'; put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.'; put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered'; put 'for current records and don''t include the SCD2 etc cols).'; put '

Service Inputs

'; put '
SASCONTROLTABLE
'; put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000'; put '|---|---|---|---'; put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|'; put '

Service Outputs

'; put '
cols
'; put '@li DDTYPE'; put '@li FORMAT'; put '@li LABEL'; put '@li LENGTH'; put '@li NAME'; put '@li TYPE'; put '@li VARNUM'; put '
sasparams
'; put '@li FILTER_TEXT'; put '@li NOBS'; put '@li PK_FIELDS - string seperated list of primary key fields, if they exist'; put '@li TABLENAME'; put '@li TABLEURI'; put '@li VARS'; put '
viewdata
'; put 'The raw data from the target table.'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li dc_createdataset.sas'; put '@li dc_gettableid.sas'; put '@li mf_existds.sas'; put '@li mf_getvarcount.sas'; put '@li mf_nobs.sas'; put '@li mf_verifymacvars.sas'; put '@li mp_abort.sas'; put '@li mp_cntlout.sas'; put '@li mp_dsmeta.sas'; put '@li mp_getcols.sas'; put '@li mp_getpk.sas'; put '@li mp_jsonout.sas'; put '@li mp_searchdata.sas'; put '@li mp_validatecol.sas'; put '@li mpe_columnlevelsecurity.sas'; put '@li mpe_filtermaster.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/* configure macvars */'; put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;'; put '%let maxrows=250;'; put '/* avoid code injection */'; put '%let FMT_IND=0;'; put '%let SEARCHTYPE=;'; put '%let SEARCHVAL=;'; put '%let FILTER_RK=;'; put '%let LIBDS=;'; put '/**'; put '* Validate inputs'; put '*/'; put 'data work.intest;'; put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;'; put 'set work.SASCONTROLTABLE;'; put '/* validate filter_rk */'; put 'if filter_rk le 0 then filter_rk=-1;'; put '/* check if the request is for a format catalog */'; put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;'; put 'libds=scan(libds,1,''-'');'; put 'putlog "Format Catalog Captured";'; put 'call symputx(''fmt_ind'',1);'; put 'end;'; put 'putlog (_all_)(=);'; put '/* validate libds */'; put '%mp_validatecol(LIBDS,LIBDS,is_libds)'; put 'if searchtype in (''CHAR'',''NUM'') then do;'; put 'searchval=tranwrd(searchval,''%'','''');'; put 'searchval=tranwrd(searchval,''&'','''');'; put 'searchval=tranwrd(searchval,'';'','''');'; put 'searchval=tranwrd(searchval,''"'','''');'; put 'call symputx(''searchtype'',searchtype);'; put 'call symputx(''searchval'',searchval);'; put 'end;'; put 'else if searchtype not in ('''',''NONE'') then do;'; put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;'; put 'stop;'; put 'end;'; put 'if is_libds=0 then do;'; put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;'; put 'stop;'; put 'end;'; put 'else do;'; put 'call symputx(''filter_rk'',filter_rk);'; put 'call symputx(''libds'',libds);'; put 'end;'; put 'output;'; put 'stop;'; put 'run;'; put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem with macro inputs)'; put ')'; put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)'; put ',mac=&_program'; put ',msg=%str(Some err with service inputs)'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '/**'; put '* assign the Library'; put '*/'; put '%dc_assignlib(READ,%scan(&LIBDS,1,.))'; put '/* abort if looking for a format and the catalog doesn''t exist */'; put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)'; put ',mac=&_program..sas'; put ',msg=%str(Catalog &libds does not exist!)'; put ')'; put '/**'; put 'check if dataset can actually be opened - as library may exist but it may not'; put 'be possible to assign, and even if it can, the physical table may not exist'; put '**/'; put 'data _null_;'; put 'if &fmt_ind=0 then do;'; put 'dsid=open("&libds");'; put 'rc=close(dsid);'; put 'end;'; put 'else dsid=42;'; put 'call symputx(''existds'',dsid,''l'');'; put 'putlog ''dataset exists check:'' dsid;'; put 'run;'; put '/**'; put '* get the data'; put '*/'; put '%global dsobs;'; put '%let dsobs=0;'; put '%macro x();'; put '%if &existds>0 %then %do;'; put '%if &fmt_ind=1 %then %do;'; put '/* export format and point the libds to the output table from here on */'; put '%mp_cntlout('; put 'libcat=&libds'; put ',fmtlist=0'; put ',cntlout=work.fmtextract'; put ')'; put '%let libds=WORK.FMTEXTRACT;'; put 'proc datasets lib=work noprint;'; put 'modify FMTEXTRACT;'; put 'index create'; put 'pk_cntlout=(type fmtname fmtrow)'; put '/nomiss unique;'; put 'quit;'; put '%end;'; put 'proc sql noprint;'; put 'select count(*) into: dsobs from &libds;'; put '%put preparing query;'; put '%mpe_filtermaster(VIEW,&libds,'; put 'dclib=&mpelib,'; put 'filter_rk=&filter_rk,'; put 'outref=filtref,'; put 'outds=work.query'; put ')'; put '%put printing generated filterquery:;'; put 'data _null_;'; put 'infile filtref;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;'; put '/* get row count */'; put 'filename rows temp;'; put 'data _null_;'; put 'file rows;'; put 'infile filtref end=eof;'; put 'input;'; put 'if _n_=1 then do;'; put 'put ''proc sql;'';'; put 'put "select count(*) into: dsobs from &libds where";'; put 'end;'; put 'put _infile_;'; put 'if eof then put '';'';'; put 'run;'; put 'data _null_;'; put 'infile rows;'; put 'input;'; put 'putlog _infile_;'; put 'run;'; put '%inc rows;'; put '/* send actual data, filtered and row-capped */'; put 'data work.viewdata;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'if _n_>&maxrows then stop;'; put 'run;'; put '%if %mf_nobs(work.viewdata)=0 %then %do;'; put 'data work.viewdata;'; put '/* send empty row if empty table to help with hot rendering */'; put 'output;'; put 'set work.viewdata;'; put 'run;'; put '%end;'; put '%end;'; put '%else %do;'; put 'data work.vwsearch/view=work.vwsearch;'; put 'set &libds;'; put 'where %inc filtref;;'; put 'run;'; put '%if %upcase(&searchtype)=CHAR %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',string=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%else %if %upcase(&searchtype)=NUM %then %do;'; put '%mp_searchdata(lib=work'; put ',ds=vwsearch'; put ',numval=%superq(searchval)'; put ',outobs=&maxrows'; put ')'; put '%end;'; put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;'; put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);'; put 'data viewdata;'; put 'set MPSEARCH.vwsearch;'; put 'if _n_<&maxrows;'; put 'run;'; put '%end;'; put '%else %do;'; put '%let dsobs=0;'; put 'data viewdata;'; put 'set &libds;'; put 'stop;'; put 'run;'; put '%end;'; put '%end;'; put '%end;'; put '%else %do;'; put '/* physical table is not accessible so create from metatadata definition */'; put '%dc_createdataset(libds=&libds,outds=viewdata)'; put 'data viewData;'; put 'output;'; put 'set viewdata;'; put 'run;'; put '/* make filtref / work.query / work.groups to avoid downstream issues */'; put 'filename filtref temp;'; put 'data work.query;'; put 'file filtref;'; put 'x=0;'; put 'put x;'; put 'run;'; put 'data work.groups;'; put 'length groupuri groupname $32 groupdesc $128 ;'; put 'call missing (of _all_);'; put 'output;'; put 'stop;'; put 'run;'; put '%end;'; put '%mend x; %x()'; put '/* apply column level security */'; put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata'; put ',mode=VIEW'; put ',clsds=&mpelib..mpe_column_level_security'; put ',groupds=work.groups /* was created in mpe_filtermaster */'; put ',outds=work.viewdata2'; put ',outmeta=work.cls_rules'; put ')'; put '/* get table uri (if sas 9) to enable linking direct to lineage */'; put '%dc_gettableid(libref=%scan(&libds,1,.)'; put ',ds=%scan(&libds,2,.)'; put ',outds=work.parambase'; put ')'; put 'data _null_;'; put 'infile filtref end=eof;'; put 'input;'; put 'length filter_text $32767;'; put 'retain filter_text;'; put 'filter_text=catx('' '',filter_text,_infile_);'; put 'if eof then do;'; put 'if cats(filter_text)=''1=1'' then filter_text='''';'; put 'call symputx(''filter_text'',filter_text);'; put 'end;'; put 'run;'; put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)'; put '%let pk_fields=;'; put 'data _null_;'; put 'set work.pk_fields;'; put 'call symputx(''pk_fields'',pk_fields);'; put 'run;'; put 'data work.sasparams;'; put 'set work.parambase;'; put 'format FILTER_TEXT $32767.;'; put 'FILTER_TEXT=symget(''FILTER_TEXT'');'; put 'length PK_FIELDS $512;'; put 'PK_FIELDS=symget(''PK_FIELDS'');'; put 'nobs=&dsobs;'; put 'vars=%mf_getvarcount(viewdata);'; put 'maxrows=&maxrows;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mp_getcols(&libds, outds=cols)'; put '%mp_dsmeta(&libds, outds=dsmeta)'; put '%webout(OPEN)'; put '%webout(OBJ,cls_rules)'; put '%webout(OBJ,cols)'; put '%webout(OBJ,dsmeta)'; put '%webout(OBJ,query)'; put '%webout(OBJ,sasparams)'; put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibarray; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro mf_existds(libds'; put ')/*/STORE SOURCE*/;'; put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; put '%else 1;'; put '%mend mf_existds;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibarray.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mm_webout.sas'; put '@li mf_existds.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%let keepvars=libraryref libraryname;'; put 'data _null_;'; put 'length keepvars $32;'; put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));'; put 'call symputx(''keepvars'',keepvars);'; put 'run;'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs (keep=&keepvars);'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR, mm_getLibs)'; put '%mm_webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewlibs; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewlibs.sas'; put '@brief List the libraries for view access'; put '@details'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '@li mp_abort.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';'; put '%put securitygroupscount=&securitygroupscount;'; put '%put ALL_CNT=&ALL_CNT;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewlibs();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %do;'; put '%put user in admin group (scenario1=&scenario1);'; put '%return;'; put '%end;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put '%return;'; put '%end;'; put '/* scenario 3 - an *ALL* libref is listed */'; put '%if &all_cnt>0 %then %do;'; put '%put all_cnt=&all_cnt;'; put '%return;'; put '%end;'; put '/* scenario 4 - specific librefs listed */'; put '%if &securitygroupscount>0 %then %do;'; put '%put scenario 4;'; put '%put securitygroupscount=&securitygroupscount;'; put 'proc sql;'; put 'delete from mm_getLibs'; put 'where upcase(libraryref) not in (select upcase(libref) from matches);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;'; put '%put securitygroupscount=&securitygroupscount;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic err!)'; put ')'; put '%mend mpestp_viewlibs;'; put '%mpestp_viewlibs()'; put '%global dc_viewlib_check;'; put '/**'; put '* deal with invalid and duplicate library definitions'; put '*/'; put 'proc sort data=mm_getlibs;'; put 'by libraryref libraryname;'; put 'run;'; put 'data mm_getlibs;'; put 'set mm_getlibs;'; put 'by libraryref;'; put 'if symget(''dc_viewlib_check'')=''YES'' then do;'; put '/* note - invalid libraries can result in exception errors. If this happens,'; put 'configure the dc_viewlib_check variable to NO in Data Controller Settings'; put '*/'; put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));'; put 'drop rc;'; put 'if rc ne 0 then do;'; put 'putlog "NOTE: Library " libraryname " does not exist!!";'; put 'putlog (_all_) (=);'; put 'delete;'; put 'end;'; put 'end;'; put 'if not first.libraryref then delete;'; put 'run;'; put 'proc sort data=mm_getlibs out=saslibs;'; put 'by libraryname;'; put 'run;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%webout(OPEN)'; put '%webout(OBJ,saslibs)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=viewtables; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro dc_getusergroups(user=,outds=mm_getgroups);'; put '%global dc_repo_users;'; put '%if &dc_repo_users= %then %let dc_repo_users=foundation;'; put '%mm_getgroups(user=&user,outds=&outds,repo=&dc_repo_users)'; put '%mend dc_getusergroups;'; put '%macro mpe_getgroups(user=,outds=);'; put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;'; put '%dc_getusergroups(user=&user,outds=&outds)'; put 'data;'; put 'length groupname groupdesc $256;'; put 'set &dc_libref..mpe_groups;'; put 'where &dc_dttmtfmt. lt tx_to;'; put 'where also upcase(user_name)="%upcase(&user)";'; put 'groupname=group_name;'; put 'groupdesc=group_desc;'; put 'keep groupname groupdesc;'; put 'run;'; put 'data &outds;'; put 'set &syslast &outds(keep=groupname groupdesc);'; put 'run;'; put '%mend mpe_getgroups;'; put '%macro mpe_getvars(injs,outds);'; put '/* load parameters */'; put 'data _null_;'; put '__dummychar='''';__dummynum=0;'; put 'set &outds;'; put 'array __charvals _character_;'; put 'do over __charvals;'; put 'call symputx(vname(__charvals),__charvals,''g'');'; put 'end;'; put 'array __numvals _numeric_;'; put 'do over __numvals;'; put 'call symputx(vname(__numvals),__numvals,''g'');'; put 'end;'; put 'run;'; put '%mend mpe_getvars;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file viewtables.sas'; put '@brief List the tables and format catalogs the user can view'; put '@details Provide a library and get list of tables and catalogs. Also return'; put 'the libinfo details.'; put '

Service Inputs

'; put '
SASControlTable
'; put 'Just one input - MPLIB (the libref to get tables and info for)'; put '|MPLIB:$char8.|'; put '|---|'; put '|SOMELIB|'; put '

Service Outputs

'; put '
work.mptables
'; put '|MEMNAME:$char32.|'; put '|---|'; put '|DS1|'; put '|DS2|'; put '|DS3|'; put 'etc'; put '
work.libinfo
'; put 'If attributes are empty, they don''t need to be shown on screen.'; put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |'; put '|---|---|---|---|---|---|---|---|---|'; put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuser.sas'; put '@li mpe_getgroups.sas'; put '@li mpe_getvars.sas'; put '@li mpeinit.sas'; put '@version 9.2'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%global MPLIB;'; put '/* load parameters */'; put '%mpe_getvars(SASControlTable, SASControlTable)'; put '/**'; put '* assign the Library'; put '*/'; put '%put &=MPLIB;'; put '%dc_assignlib(READ,&MPLIB)'; put '%mp_abort(iftrue= (&syscc ne 0 )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to assign &mplib library)'; put ')'; put '/**'; put '* get the tables'; put '*/'; put 'data members; /* empty table */'; put 'name='''';'; put 'memtype='''';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&mplib ;'; put 'quit;'; put '/* cannot avoid the proc datasets warn!ng for an empty lib */'; put '/* nolist means no output and nowarn has no effect */'; put '%put &=syscc;'; put 'data _null_;'; put 'if "&syscc" ne "0" then do;'; put 'putlog "Library &mplib is empty, setting syscc to zero";'; put 'call symputx(''syscc'',0);'; put 'end;'; put 'run;'; put '%put &=syscc;'; put 'proc sql;'; put 'create table work.mptables as'; put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')'; put 'else name end as memname'; put 'from members;'; put '/* get security groups */'; put '%mpe_getgroups(user=%mf_getuser(),outds=groups)'; put '/* get security settings */'; put 'data sec;'; put 'set &mpelib..mpe_security;'; put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';'; put 'where also libref in (''*ALL*'',"%upcase(&mplib)");'; put 'run;'; put '/* check for any matching groups */'; put 'proc sql noprint;'; put 'create table matches as'; put 'select * from sec'; put 'where upcase(sas_group) in (select upcase(groupname) from groups);'; put 'select count(*) into: securitygroupscount from matches;'; put 'select count(*) into: ALL_CNT from matches'; put 'where libref=''*ALL*'''; put 'or (libref="&mplib" and dsn=''*ALL*'');'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(syscc=&syscc)'; put ')'; put '%macro mpestp_viewtables();'; put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;'; put '/* scenario 1 - user is in admin group, hence can view all libraries */'; put 'proc sql noprint;'; put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";'; put '%if &scenario1>0 %then %return;'; put '/* scenario 2 - viewer unrestricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;'; put '/* scenario 3 - an *ALL* libref or DSN is listed */'; put '%if &all_cnt>0 %then %return;'; put '/* scenario 4 - specific tables listed */'; put '%if &securitygroupscount>0 %then %do;'; put 'proc sql;'; put 'delete from mptables'; put 'where upcase(memname) not in (select upcase(dsn) from sec);'; put '%return;'; put '%end;'; put '/* viewer restricted and no groups listed */'; put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;'; put 'data mptables;'; put 'set mptables;'; put 'stop;'; put 'run;'; put '%return;'; put '%end;'; put '%mp_abort(iftrue= (1=1)'; put ',mac=&_program..sas'; put ',msg=%str(unhandled security logic error!)'; put ')'; put '%mend mpestp_viewtables;'; put '%mpestp_viewtables()'; put '/* get libinfo */'; put 'proc sql;'; put 'create table work.libinfo as'; put 'select a.engine,'; put 'a.libname,'; put 'a.paths,'; put 'a.perms,'; put 'a.owners,'; put 'a.schemas,'; put 'a.libid,'; put 'coalesce(b.libsize,0) as libsize,'; put 'coalesce(b.table_cnt,0) as table_cnt'; put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a'; put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b'; put 'on a.libref=b.libref'; put 'where a.libref="&MPLIB";'; put '%webout(OPEN)'; put '%webout(OBJ,mptables)'; put '%webout(OBJ,libinfo)'; put '%webout(CLOSE)'; put '%mpeterm()'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/usernav; %let service=usergroupsbymember; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usergroupsbymember.sas'; put '@brief List the groups a member is in'; put '@details Runs without \%mpeinit() - this enables the dropdown to be populated'; put 'during configuration, when the settings service does not yet exist.'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mm_getusers.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%macro x();'; put '%if %sysfunc(exist(work.iwant)) ne 1 %then %do;'; put '/* macro called by configurator - grab the URI of calling user */'; put '%mm_getusers(user=&_metaperson, outds=work.iwant)'; put '%end;'; put '%mend x;'; put '%x()'; put 'data groups'; put 'roles(rename=(groupuri=roleuri groupname=rolename groupdesc=roledesc)) ;'; put 'length uri groupuri groupname groupdesc publictype str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "WARNING: No groups found for ";'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri, "PublicType", PublicType);'; put 'a+1;'; put 'if PublicType = ''Role'' then output roles;'; put 'else output groups;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'keep groupuri groupname groupdesc;'; put 'if _n_=1 then delete; /* no content so don''t send empty row */'; put 'run;'; put 'data emails;'; put 'keep email type;'; put 'length emailuri email type uri str $256;'; put 'call missing(of _all_);'; put 'set iwant;'; put '/* credit'; put 'https://seleritysas.com/data-step-view-of-email-addresses-in-sas-metadata'; put '*/'; put 'emailrc=1;email_count=1;'; put 'do while(emailrc>0);'; put '/* Get Email from Person */'; put 'emailrc=metadata_getnasn(uri,"EmailAddresses",email_count,emailuri);'; put 'arc=1;'; put 'if (emailrc>0) then do;'; put 'arc=metadata_getattr(emailuri,"Address",email);'; put 'arc=metadata_getattr(emailuri,"EmailType",type);'; put 'end;'; put 'if (arc=0) then output emails;'; put 'email_count=email_count+1;'; put 'end;'; put 'run;'; put 'data logins;'; put 'length domain userid loginuri domainuri uri $256;'; put 'keep domain userid;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'login_count=1;'; put 'do while(metadata_getnasn(uri,"Logins",login_count,loginuri)>0);'; put 'rc=metadata_getattr(loginuri,"UserID",userid);'; put 'rc=metadata_getnasn(loginuri,"Domain",1,domainuri);'; put 'rc=metadata_getattr(domainuri,"Name",domain);'; put 'output;'; put 'login_count+1;'; put 'end;'; put 'run;'; put 'data info;'; put 'length uri name displayname metadatacreated metadataupdated $256;'; put 'keep name displayname metadatacreated metadataupdated;'; put 'call missing(of _all_);'; put 'set iwant;'; put 'rc=metadata_getattr(uri,"Name",name);'; put 'rc=metadata_getattr(uri,"DisplayName",displayname);'; put 'rc=metadata_getattr(uri,"MetadataCreated",MetadataCreated);'; put 'rc=metadata_getattr(uri,"MetadataUpdated",MetadataUpdated);'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,emails)'; put '%webout(OBJ,groups)'; put '%webout(OBJ,roles)'; put '%webout(OBJ,logins)'; put '%webout(OBJ,info)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembers; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getusers('; put 'outds=work.mm_getusers,'; put 'user=0'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put '%if %superq(user)=0 %then %do;'; put 'proc metadata in= '''; put '$METAREPOSITORY'; put 'Person'; put 'SAS'; put '0'; put ''; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put '%end;'; put '%else %do;'; put 'filename inref temp;'; put 'data _null_;'; put 'file inref;'; put 'put "";'; put 'put "$METAREPOSITORY";'; put 'put "Person";'; put 'put "SAS";'; put 'put "";'; put 'put "128";'; put 'put "";'; put 'put "";'; put 'put '''';'; put 'put "";'; put 'length string $10000;'; put 'string=cats('''');'; put 'put string;'; put 'put "";'; put 'put "";'; put 'run;'; put 'proc metadata in=inref out=response;'; put 'run;'; put '%end;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Id";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/Person/@Name";'; put 'put "characterstring256";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASObjects out=&outds;'; put 'by name;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getusers;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getusers(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getusers(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getusers(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getusers;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembers.sas'; put '@brief List all SAS users'; put '@details Gets a list of all SAS users'; put '

SAS Macros

'; put '@li dc_getusers.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%dc_getusers(outds=users)'; put '%webout(OPEN)'; put '%webout(OBJ,users)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbygroup; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbygroup.sas'; put '@brief List the members of a group'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@version 9.3'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers ;'; put 'attrib uriGrp uriMem GroupId GroupName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'GroupDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'drop uriGrp rcGrp rcMem rc i j;'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(groupid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,GroupId,GroupName,Group_or_Role'; put ',MemberName,MemberType);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",GroupId);'; put 'rc = metadata_getattr(uriGrp,"Name",GroupName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",GroupDesc);'; put 'j=1;'; put 'do while (metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'output;'; put 'j+1;'; put 'call missing(email,emailuri);'; put 'end;'; put 'end;'; put 'if _n_=1 then delete;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=usermembersbyrole; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file usermembersbyrole.sas'; put '@brief List the members of a role'; put '

SAS Macros

'; put '@li mp_abort.sas'; put '@li mpeinit.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put 'data sasMembers sasgroups;'; put 'attrib uriGrp uriMem roleId roleName Group_or_Role MemberName MemberType'; put 'MemberUpdated membercreated emailuri length=$64'; put 'roleDesc email length=$256'; put 'rcGrp rcMem rc i j length=3;'; put 'call missing (of _all_);'; put 'set iwant;'; put 'i=1;'; put '* Grab the URI for the first Group ;'; put 'rcGrp=metadata_getnobj(roleid,i,uriGrp);'; put '* If Group found, enter do loop ;'; put 'if rcGrp>0 then do;'; put 'call missing (rcMem,uriMem,roleId,roleName,Group_or_Role'; put ',MemberName,MemberType,roleDesc);'; put '* get group info ;'; put 'rc = metadata_getattr(uriGrp,"Id",roleId);'; put 'rc = metadata_getattr(uriGrp,"Name",roleName);'; put 'rc = metadata_getattr(uriGrp,"PublicType",Group_or_Role);'; put 'rc = metadata_getattr(uriGrp,"Desc",roleDesc);'; put 'j=1;'; put 'if Group_or_Role=''Role'' then do while'; put '(metadata_getnasn(uriGrp,"MemberIdentities",j,uriMem) > 0);'; put 'call missing (MemberName,MemberType);'; put 'call missing(email,emailuri);'; put 'rc = metadata_getattr(uriMem,"Name",MemberName);'; put 'rc = metadata_getattr(uriMem,"PublicType",MemberType);'; put 'rc=metadata_getattr(uriMem, "MetadataCreated", MemberCreated);'; put 'rc=metadata_getattr(uriMem, "MetadataUpdated", MemberUpdated);'; put 'emailrc=metadata_getnasn(uriMem,"EmailAddresses",1,emailuri);'; put 'if (emailrc>0) then rc=metadata_getattr(emailuri,"Address",email);'; put 'if membertype=''UserGroup'' then output sasgroups;'; put 'else output sasmembers;'; put 'j+1;'; put 'end;'; put 'end;'; put 'if _n_=1 then delete; /* no roles so don''t send empty row */'; put 'keep uriMem membertype membername MemberCreated MemberUpdated email;'; put 'run;'; put '%webout(OPEN)'; put '%webout(OBJ,sasGroups)'; put '%webout(OBJ,sasMembers)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=userroles; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getroles('; put 'outds=work.mm_getroles'; put ')/*/STORE SOURCE*/;'; put 'filename response temp;'; put 'options noquotelenmax;'; put 'proc metadata in= ''$METAREPOSITORY'; put 'IdentityGroupSAS388'; put ''; put ''; put ''; put ''; put ''''; put 'out=response;'; put 'run;'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup";'; put 'put "";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Id";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Name";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put "/GetMetadataObjects/Objects/IdentityGroup/@Desc";'; put 'put "";'; put 'put "characterstring500";'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.roles out=&outds;'; put 'by rolename;'; put 'run;'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getroles;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getroles(outds=mm_getroles);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getroles(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getroles(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getroles;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file userroles.sas'; put '@brief List all SAS Roles'; put '@details Gets a list of all SAS Roles'; put '

SAS Macros

'; put '@li dc_getroles.sas'; put '@li mpeinit.sas'; put '@author 4GL Apps Ltd'; put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller'; put 'and may not be re-distributed or re-sold without the express permission of'; put '4GL Apps Ltd.'; put '**/'; put '%mpeinit()'; put '%dc_getroles(outds=roles)'; put '%webout(OPEN)'; put '%webout(OBJ,roles)'; put '%webout(CLOSE)'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/validations; %let service=columns_in_libds; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '%macro mf_getuniquename(prefix=MC);'; put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))'; put '%mend mf_getuniquename;'; put '%macro mp_validatecol(incol,rule,outcol);'; put '/* tempcol is given a unique name with every invocation */'; put '%local tempcol;'; put '%let tempcol=%mf_getuniquename();'; put '%if &rule=ISINT %then %do;'; put '&outcol=0;'; put 'if not missing(&incol) then do;'; put '&tempcol=input(&incol,?? best32.);'; put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;'; put 'end;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=ISNUM %then %do;'; put '/*'; put 'credit SOREN LASSEN'; put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html'; put '*/'; put '&tempcol=input(&incol,?? best32.);'; put 'if missing(&tempcol) then &outcol=0;'; put 'else &outcol=1;'; put 'drop &tempcol;'; put '%end;'; put '%else %if &rule=LIBDS %then %do;'; put '/* match libref.dataset */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%else %if &rule=FORMAT %then %do;'; put '/* match valid format - regex could probably be improved */'; put 'if _n_=1 then do;'; put 'retain &tempcol;'; put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');'; put 'if missing(&tempcol) then do;'; put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";'; put 'stop;'; put 'end;'; put 'drop &tempcol;'; put 'end;'; put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;'; put 'else &outcol=0;'; put '%end;'; put '%mend mp_validatecol;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for table columns'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.sourcerow
'; put 'Has source table structure.'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '@li mf_getuniquename.sas'; put '@li mp_abort.sas'; put '@li mp_validatecol.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlibds=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlibds=%mf_getuniquename();'; put '%let var_is_libds=%mf_getuniquename();'; put 'data _null_;'; put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8'; put 'xl_table base_ds select_ds rls_table cls_table dsn $32;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=symget(''libds'');'; put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"'; put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);'; put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"'; put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);'; put 'else if &varlibds="&mpelib..MPE_SELECTBOX"'; put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);'; put 'else if &varlibds="&mpelib..MPE_TABLES"'; put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);'; put '/* validate libds */'; put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)'; put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlibds" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)'; put ')'; put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))'; put 'proc contents noprint data=&tgtlibds'; put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );'; put 'run;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.DYNAMIC_VALUES;'; put 'raw_value=upcase(display_value);'; put 'format raw_value;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=libraries_all; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/**'; put '* get full list of libraries'; put '*/'; put '%dc_getlibs(outds=work.mm_getLibs)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libraryname as display_value,'; put 'upcase(libraryref) as raw_value'; put 'from work.mm_getLibs'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=libraries_editable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct libref as display_value,'; put 'upcase(libref) as raw_value'; put 'from &mpelib..mpe_tables'; put 'where &dc_dttmtfmt. < tx_to'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_alerts.alert_lib; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for alert_lib'; put '@details Fetches libraries from mpe_tables, creates extended values for'; put 'alert_ds, and marks "*ALL*" as the forced (default) value.'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )'; put ',mac=&_program'; put ',msg=%str('; put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)'; put ')'; put ')'; put 'proc sql;'; put 'create table work.source as'; put 'select libref,dsn'; put 'from &DC_LIBREF..MPE_TABLES'; put 'where tx_to > &dc_dttmtfmt.'; put 'order by 1,2;'; put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);'; put 'set work.source end=last;'; put 'by libref;'; put 'if last.libref then do;'; put 'display_index+1;'; put 'raw_value=libref;'; put 'display_value=libref;'; put 'output;'; put 'end;'; put 'if last then do;'; put 'display_index+1;'; put 'raw_value=''*ALL*'';'; put 'display_value=''*ALL*'';'; put 'output;'; put 'end;'; put 'run;'; put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type'; put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);'; put 'set work.source end=last;'; put 'by libref dsn;'; put 'retain extra_col_name ''ALERT_DS'';'; put 'retain display_type ''C'';'; put 'retain raw_value_num .;'; put 'raw_value_char=dsn;'; put 'display_value=dsn;'; put 'forced_value=0;'; put 'if first.libref then display_index+1;'; put 'if last.libref then do;'; put 'display_value=''*ALL*'';'; put 'raw_value_char=''*ALL*'';'; put 'forced_value=1;'; put 'output;'; put 'end;'; put 'else output;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_tables.dsn; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief fetch extended values for DSN'; put '@details Fetches datasets in a library, and ALSO fetches a list of numeric'; put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,'; put 'TX_TO etc).'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put 'The FORCED_VALUE column can be used to force an extended value to be selected'; put 'by default when a particular value is chosen.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|'; put '|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|1|DISCOUNT_RT|"40%"|N|0.4||0|'; put '|1|DISCOUNT_RT|"30%"|N|0.3||1|'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||.|'; put '|2|DISCOUNT_RT|"40%"|N|0.4||1|'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8;'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else putlog "something unexpected happened";'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'proc sql;'; put 'create table work.source as'; put 'select upcase(memname) as memname'; put ',upcase(name) as name'; put ',type'; put 'from dictionary.columns'; put 'where libname="&TGTLIB"'; put 'and memtype=''DATA'';'; put 'create table work.members as'; put 'select distinct memname as display_value'; put 'from work.source;'; put 'data work.DYNAMIC_VALUES;'; put 'set work.members;'; put 'raw_value=display_value;'; put 'display_index=_n_;'; put 'run;'; put 'proc sql;'; put 'create table work.dynamic_extended_values as'; put 'select a.display_index'; put ',b.name as display_value'; put ',"C" as display_type'; put ',b.name as RAW_VALUE_CHAR'; put ',. as RAW_VALUE_NUM'; put 'from work.dynamic_values a'; put 'left join work.source b'; put 'on a.display_value=b.memname'; put 'where b.type=''num'';'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'extra_col_name=''VAR_PROCESSED'';output;'; put 'extra_col_name=''VAR_TXFROM'';output;'; put 'extra_col_name=''VAR_TXTO'';output;'; put 'extra_col_name=''VAR_BUSFROM'';output;'; put 'extra_col_name=''VAR_BUSTO'';output;'; put 'run;'; put '/* set some force flags */'; put 'data work.dynamic_extended_values;'; put 'set work.DYNAMIC_EXTENDED_VALUES;'; put 'forced_value=0;'; put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;'; put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;'; put 'run;'; put 'proc sort;'; put 'by extra_col_name display_index;'; put 'run;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=mpe_x_test.some_num; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getlibs('; put 'outds=work.mm_getLibs'; put ')/*/STORE SOURCE*/;'; put '/*'; put 'flags:'; put 'OMI_SUCCINCT (2048) Do not return attributes with null values.'; put 'OMI_GET_METADATA (256) Executes a GetMetadata call for each object that'; put 'is returned by the GetMetadataObjects method.'; put 'OMI_ALL_SIMPLE (8) Gets all of the attributes of the requested object.'; put '*/'; put 'data _null_;'; put 'flags=2048+256+8;'; put 'call symputx(''flags'',flags,''l'');'; put 'run;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put ''''; put '$METAREPOSITORY'; put 'SASLibrary'; put ''; put 'SAS'; put '&flags'; put ''; put ''''; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put 'data _null_;'; put 'infile response lrecl=32767;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put '''';'; put 'put ''//Objects/SASLibrary'';'; put 'put ''>17'';'; put 'put ''//Objects/SASLibrary/@Id'';'; put 'put ''256>'';'; put 'put ''//Objects/SASLibrary/@Name'';'; put 'put ''8'';'; put 'put ''//Objects/SASLibrary/@Libref'';'; put 'put ''>12'';'; put 'put ''//Objects/SASLibrary/@Engine'';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put '/* sort the response by library name */'; put 'proc sort data=_XML_.saslibrary out=&outds;'; put 'by libraryname;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getlibs;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getlibs(outds=mm_getlibs);'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(''repo''!!cats(_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getlibs(outds=&outds)'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put '%mm_getlibs(outds=&outds.a)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_getlibs;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li DC_LIBREF - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'Output should be a single table called "work.dynamic_values" in the format'; put 'below. display_value should always be character, raw_value is unformatted'; put 'character/numeric.'; put '|DISPLAY_VALUE:$|RAW_VALUE:??|'; put '|---|---|'; put '|$44.00|44|'; put '

SAS Macros

'; put '@li dc_getlibs.sas'; put '**/'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct cats(some_num) as display_value,'; put 'some_num as raw_value'; put 'from &libds'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=sas_groups; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_getGroups('; put 'user='; put ',outds=work.mm_getGroups'; put ',repo=foundation'; put ',mDebug=0'; put ')/*/STORE SOURCE*/;'; put '%local mD oldrepo;'; put '%let oldrepo=%sysfunc(getoption(metarepository));'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_getGroups.sas;'; put '%&mD.put _local_;'; put '/* on some sites, user / group info is in a different metadata repo to the'; put 'default */'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&repo;'; put '%end;'; put '%if %length(&user)=0 %then %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'i+1;'; put 'do while'; put '(metadata_getnobj("omsobj:IdentityGroup?@Id contains ''.''",i,groupuri)>0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'i+1;'; put 'end;'; put 'run;'; put '%end;'; put '%else %do;'; put 'data &outds (keep=groupuri groupname groupdesc);'; put 'length uri groupuri groupname groupdesc group_or_role $256;'; put 'call missing(of _all_);'; put 'rc=metadata_getnobj("omsobj:Person?@Name=''&user''",1,uri);'; put 'if rc<=0 then do;'; put 'putlog "%str(WARN)ING: rc=" rc "&user not found "'; put '", or there was an issue reading the repository.";'; put 'stop;'; put 'end;'; put 'a=1;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'if grpassn in (-3,-4) then do;'; put 'putlog "%str(WARN)ING: No metadata groups found for &user";'; put 'output;'; put 'end;'; put 'else do while (grpassn > 0);'; put 'rc=metadata_getattr(groupuri, "Name", groupname);'; put 'rc=metadata_getattr(groupuri, "Desc", groupdesc);'; put 'a+1;'; put 'rc=metadata_getattr(groupuri,"PublicType",group_or_role);'; put 'if Group_or_Role = ''UserGroup'' then output;'; put 'grpassn=metadata_getnasn(uri,"IdentityGroups",a,groupuri);'; put 'end;'; put 'run;'; put '%end;'; put '%if &oldrepo ne &repo %then %do;'; put 'options metarepository=&oldrepo;'; put '%end;'; put '%mend mm_getGroups;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_getgroups(outds=mm_getlibs);'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '%put _local_;'; put '%mm_getgroups(outds=&outds,repo=foundation)'; put '%do x=1 %to &repocnt;'; put '%mm_getgroups(outds=&outds.a, repo=&&repo&x)'; put 'proc append base=&outds data=&outds.a;'; put 'run;'; put '%end;'; put 'proc sort data=&outds noduprec;'; put 'by groupname;'; put 'run;'; put '%mend dc_getgroups;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief validating the mpe_security.sas_group column'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_getgroups.sas'; put '**/'; put '%dc_getgroups(outds=groups)'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct groupname as display_value,'; put 'groupname as raw_value'; put 'from work.groups'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=tables_all; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '%macro mm_assignlib('; put 'libref'; put ',mAbort=HARD'; put ')/*/STORE SOURCE*/;'; put '%local mp_abort msg;'; put '%let mp_abort=0;'; put '%if %sysfunc(libref(&libref)) %then %do;'; put 'data _null_;'; put 'length liburi LibName msg $200;'; put 'call missing(of _all_);'; put 'nobj=metadata_getnobj("omsobj:SASLibrary?@Libref=''&libref''",1,liburi);'; put 'if nobj=1 then do;'; put 'rc=metadata_getattr(liburi,"Name",LibName);'; put '/* now try and assign it */'; put 'if libname("&libref",,''meta'',cats(''liburi="'',liburi,''";'')) ne 0 then do;'; put 'putlog "&libref could not be assigned";'; put 'putlog liburi=;'; put '/**'; put '* Fetch the system message for display in the abort modal. This is'; put '* not always helpful though. One example, previously received:'; put '* NOTE: Libref XX refers to the same library metadata as libref XX.'; put '*/'; put 'msg=sysmsg();'; put 'if msg=:''ERROR: Libref SAVE is not assigned.'' then do;'; put 'msg=catx(" ",'; put '"Could not assign %upcase(&libref).",'; put '"Please check metadata permissions! Libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'else if msg="ERROR: User does not have appropriate authorization "!!'; put '"level for library SAVE."'; put 'then do;'; put 'msg=catx(" ",'; put '"ERROR: User does not have appropriate authorization level",'; put '"for library %upcase(&libref), libname:",libname,'; put '"Liburi:",liburi'; put ');'; put 'end;'; put 'call symputx(''msg'',msg,''l'');'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1,''l'');'; put 'end;'; put 'else do;'; put 'put (_all_)(=);'; put 'call symputx(''libname'',libname,''L'');'; put 'call symputx(''liburi'',liburi,''L'');'; put 'end;'; put 'end;'; put 'else if nobj>1 then do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"More than one library with libref=&libref");'; put 'end;'; put 'else do;'; put 'if "&mabort"=''HARD'' then call symputx(''mp_abort'',1);'; put 'call symputx(''msg'',"Library &libref not found in metadata");'; put 'end;'; put 'run;'; put '%put NOTE: &msg;'; put '%end;'; put '%else %do;'; put '%put NOTE: Library &libref is already assigned;'; put '%end;'; put '%mp_abort(iftrue= (&mp_abort=1)'; put ',mac=mm_assignlib.sas'; put ',msg=%superq(msg)'; put ')'; put '%mend mm_assignlib;'; put '/** @cond */'; put '%macro mf_getengine(libref'; put ')/*/STORE SOURCE*/;'; put '%local dsid engnum rc engine;'; put '/* in case the parameter is a libref.tablename, pull off just the libref */'; put '%let libref = %upcase(%scan(&libref, 1, %str(.)));'; put '%let dsid=%sysfunc('; put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)'; put ');'; put '%if (&dsid ^= 0) %then %do;'; put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));'; put '%let rc=%sysfunc(fetch(&dsid));'; put '%let engine=%sysfunc(getvarc(&dsid,&engnum));'; put '%put &libref. ENGINE is &engine.;'; put '%let rc= %sysfunc(close(&dsid));'; put '%end;'; put '%upcase(&engine)'; put '%mend mf_getengine;'; put '/** @endcond */'; put '%macro mm_assigndirectlib('; put 'libref'; put ',open_passthrough='; put ',sql_options='; put ',mDebug=0'; put ',mAbort=0'; put ')/*/STORE SOURCE*/;'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing mm_assigndirectlib.sas;'; put '%&mD.put _local_;'; put '%if &mAbort=1 %then %let mAbort=;'; put '%else %let mAbort=%str(*);'; put '%&mD.put NOTE: Creating direct (non META) connection to &libref library;'; put '%local cur_engine;'; put '%let cur_engine=%mf_getengine(&libref);'; put '%if &cur_engine ne META and &cur_engine ne %then %do;'; put '%put NOTE: &libref already has a direct (&cur_engine) libname connection;'; put '%return;'; put '%end;'; put '%else %if %upcase(&libref)=WORK %then %do;'; put '%put NOTE: We already have a direct connection to WORK :-) ;'; put '%return;'; put '%end;'; put '/* need to determine the library ENGINE first */'; put '%local engine;'; put 'data _null_;'; put 'length lib_uri engine $256;'; put 'call missing (of _all_);'; put '/* get URI for the particular library */'; put 'rc1=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put '/* get the Engine attribute of the previous object */'; put 'rc2=metadata_getattr(lib_uri,''Engine'',engine);'; put 'putlog "mm_assigndirectlib for &libref:" rc1= lib_uri= rc2= engine=;'; put 'call symputx("liburi",lib_uri,''l'');'; put 'call symputx("engine",engine,''l'');'; put 'run;'; put '/* now obtain engine specific connection details */'; put '%if &engine=BASE %then %do;'; put '%&mD.put NOTE: Retrieving BASE library path;'; put 'data _null_;'; put 'length up_uri $256 path cat_path $1024;'; put 'retain cat_path;'; put 'call missing (of _all_);'; put '/* get all the filepaths of the UsingPackages association */'; put 'i=1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'do while (rc3>0);'; put '/* get the DirectoryName attribute of the previous object */'; put 'rc4=metadata_getattr(up_uri,''DirectoryName'',path);'; put 'if i=1 then path = ''("''!!trim(path)!!''" '';'; put 'else path ='' "''!!trim(path)!!''" '';'; put 'cat_path = trim(cat_path) !! " " !! trim(path) ;'; put 'i+1;'; put 'rc3=metadata_getnasn("&liburi",''UsingPackages'',i,up_uri);'; put 'end;'; put 'cat_path = trim(cat_path) !! ")";'; put '&mD.putlog "NOTE: Getting physical path for &libref library";'; put '&mD.putlog rc3= up_uri= rc4= cat_path= path=;'; put '&mD.putlog "NOTE: Libname cmd will be:";'; put '&mD.putlog "libname &libref" cat_path;'; put 'call symputx("filepath",cat_path,''l'');'; put 'run;'; put '%if %sysevalf(&sysver<9.4) %then %do;'; put 'libname &libref &filepath;'; put '%end;'; put '%else %do;'; put '/* apply the new filelocks option to cater for temporary locks */'; put 'libname &libref &filepath filelockwait=5;'; put '%end;'; put '%end;'; put '%else %if &engine=REMOTE %then %do;'; put 'data x;'; put 'length rcCon rcProp rc k 3 uriCon uriProp PropertyValue PropertyName'; put 'Delimiter $256 properties $2048;'; put 'retain properties;'; put 'rcCon = metadata_getnasn("&liburi", "LibraryConnection", 1, uriCon);'; put 'rcProp = metadata_getnasn(uriCon, "Properties", 1, uriProp);'; put 'k = 1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'do while (rcProp > 0);'; put 'rc = metadata_getattr(uriProp , "DefaultValue",PropertyValue);'; put 'rc = metadata_getattr(uriProp , "PropertyName",PropertyName);'; put 'rc = metadata_getattr(uriProp , "Delimiter",Delimiter);'; put 'properties = trim(properties) !! " " !! trim(PropertyName)'; put '!! trim(Delimiter) !! trim(PropertyValue);'; put 'output;'; put 'k+1;'; put 'rcProp = metadata_getnasn(uriCon, "Properties", k, uriProp);'; put 'end;'; put '%&mD.put NOTE: Getting properties for REMOTE SHARE &libref library;'; put '&mD.put _all_;'; put '%&mD.put NOTE: Libname cmd will be:;'; put '%&mD.put libname &libref &engine &properties slibref=&libref;'; put 'call symputx ("properties",trim(properties),''l'');'; put 'run;'; put 'libname &libref &engine &properties slibref=&libref;'; put '%end;'; put '%else %if &engine=OLEDB %then %do;'; put '%&mD.put NOTE: Retrieving OLEDB connection details;'; put 'data _null_;'; put 'length domain datasource provider properties schema'; put 'connx_uri domain_uri conprop_uri lib_uri schema_uri value $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection domain */'; put 'rc1=metadata_getnasn(connx_uri,''Domain'',1,domain_uri);'; put 'rc2=metadata_getattr(domain_uri,''Name'',domain);'; put '&mD.putlog / ''NOTE: '' // ''NOTE- connection id: '' connx_uri ;'; put '&mD.putlog ''NOTE- domain: '' domain;'; put '/* get DSN and PROVIDER from connection properties */'; put 'i=0;'; put 'do until (rc<0);'; put 'i+1;'; put 'rc=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc2=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.OLE.Property.DATASOURCE.Name.xmlKey.txt'' then do;'; put 'rc3=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROVIDER.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',provider);'; put 'end;'; put 'else if value=''Connection.OLE.Property.PROPERTIES.Name.xmlKey.txt'' then'; put 'do;'; put 'rc5=metadata_getattr(conprop_uri,''DefaultValue'',properties);'; put 'end;'; put 'end;'; put '&mD.putlog ''NOTE- dsn/provider/properties: '' /'; put 'datasource provider properties;'; put '&mD.putlog ''NOTE- schema: '' schema // ''NOTE-'';'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,lib_uri);'; put 'rc7=metadata_getattr(lib_uri,''SchemaName'',schema);'; put 'call symputx(''SQL_domain'',domain,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'call symputx(''SQL_provider'',provider,''l'');'; put 'call symputx(''SQL_properties'',properties,''l'');'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to OLEDB as &open_passthrough(INSERT_SQL=YES'; put '/* need additional properties to make this work */'; put 'properties=(''Integrated Security''=SSPI'; put '''Persist Security Info''=True'; put '%sysfunc(compress(%str(&SQL_properties),%str(())))'; put ')'; put 'DATASOURCE=&sql_dsn PROMPT=NO'; put 'PROVIDER=&sql_provider SCHEMA=&sql_schema CONNECTION = GLOBAL);'; put '%end;'; put '%else %do;'; put 'LIBNAME &libref OLEDB PROPERTIES=&sql_properties'; put 'DATASOURCE=&sql_dsn PROVIDER=&sql_provider SCHEMA=&sql_schema'; put '%if %length(&sql_domain)>0 %then %do;'; put 'authdomain="&sql_domain"'; put '%end;'; put 'connection=shared;'; put '%end;'; put '%end;'; put '%else %if &engine=ODBC %then %do;'; put '%&mD.put NOTE: Retrieving ODBC connection details;'; put 'data _null_;'; put 'length connx_uri conprop_uri value datasource up_uri schema domprop_uri authdomain $256.;'; put 'call missing (of _all_);'; put '/* get source connection ID */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,connx_uri);'; put '/* get connection properties */'; put 'i=0;'; put 'do until (rc2<0);'; put 'i+1;'; put 'rc2=metadata_getnasn(connx_uri,''Properties'',i,conprop_uri);'; put 'rc3=metadata_getattr(conprop_uri,''Name'',value);'; put 'if value=''Connection.ODBC.Property.DATASRC.Name.xmlKey.txt'' then do;'; put 'rc4=metadata_getattr(conprop_uri,''DefaultValue'',datasource);'; put 'rc2=-1;'; put 'end;'; put 'end;'; put '/* get auth domain */'; put 'autrc=metadata_getnasn(connx_uri,"Domain",1,domprop_uri);'; put 'arc=metadata_getattr(domprop_uri,"Name",authdomain);'; put 'if not missing(authdomain) then authdomain=cats(''AUTHDOMAIN='',authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get SCHEMA */'; put 'rc6=metadata_getnasn("&liburi",''UsingPackages'',1,up_uri);'; put 'rc7=metadata_getattr(up_uri,''SchemaName'',schema);'; put '&mD.put rc= connx_uri= rc2= conprop_uri= rc3= value= rc4= datasource='; put 'rc6= up_uri= rc7= schema=;'; put 'call symputx(''SQL_schema'',schema,''l'');'; put 'call symputx(''SQL_dsn'',datasource,''l'');'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put 'proc sql &sql_options;'; put 'connect to ODBC as &open_passthrough'; put '(INSERT_SQL=YES DATASRC=&sql_dsn. CONNECTION=global);'; put '%end;'; put '%else %do;'; put 'libname &libref ODBC DATASRC=&sql_dsn SCHEMA=&sql_schema &authdomain;'; put '%end;'; put '%end;'; put '%else %if &engine=POSTGRES %then %do;'; put '%put NOTE: Obtaining POSTGRES library details;'; put 'data _null_;'; put 'length database ignore_read_only_columns direct_exe preserve_col_names'; put 'preserve_tab_names server schema authdomain user password'; put 'prop name value uri urisrc $256.;'; put 'call missing (of _all_);'; put '/* get database value */'; put 'prop=''Connection.DBMS.Property.DB.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,database,"");'; put 'if database^='''' then database=''database=''!!quote(trim(database));'; put 'call symputx(''database'',database,''l'');'; put '/* get IGNORE_READ_ONLY_COLUMNS value */'; put 'prop=''Library.DBMS.Property.DBIROC.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,ignore_read_only_columns,"");'; put 'if ignore_read_only_columns^='''' then ignore_read_only_columns='; put '''ignore_read_only_columns=''!!ignore_read_only_columns;'; put 'call symputx(''ignore_read_only_columns'',ignore_read_only_columns,''l'');'; put '/* get DIRECT_EXE value */'; put 'prop=''Library.DBMS.Property.DirectExe.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,direct_exe,"");'; put 'if direct_exe^='''' then direct_exe=''direct_exe=''!!direct_exe;'; put 'call symputx(''direct_exe'',direct_exe,''l'');'; put '/* get PRESERVE_COL_NAMES value */'; put 'prop=''Library.DBMS.Property.PreserveColNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_col_names,"");'; put 'if preserve_col_names^='''' then preserve_col_names='; put '''preserve_col_names=''!!preserve_col_names;'; put 'call symputx(''preserve_col_names'',preserve_col_names,''l'');'; put '/* get PRESERVE_TAB_NAMES value */'; put '/* be careful with PRESERVE_TAB_NAMES=YES - it will mean your table will'; put 'become case sensitive!! */'; put 'prop=''Library.DBMS.Property.PreserveTabNames.Name.xmlKey.txt'';'; put 'rc=metadata_getprop("&liburi",prop,preserve_tab_names,"");'; put 'if preserve_tab_names^='''' then preserve_tab_names='; put '''preserve_tab_names=''!!preserve_tab_names;'; put 'call symputx(''preserve_tab_names'',preserve_tab_names,''l'');'; put '/* get SERVER value */'; put 'if metadata_getnasn("&liburi","LibraryConnection",1,uri)>0 then do;'; put 'prop=''Connection.DBMS.Property.SERVER.Name.xmlKey.txt'';'; put 'rc=metadata_getprop(uri,prop,server,"");'; put 'end;'; put 'if server^='''' then server=''server=''!!quote(cats(server));'; put 'call symputx(''server'',server,''l'');'; put '/* get SCHEMA value */'; put 'if metadata_getnasn("&liburi","UsingPackages",1,uri)>0 then do;'; put 'rc=metadata_getattr(uri,"SchemaName",schema);'; put 'end;'; put 'if schema^='''' then schema=''schema=''!!schema;'; put 'call symputx(''schema'',schema,''l'');'; put '/* get AUTHDOMAIN value */'; put '/* this is only useful if the user account contains that auth domain'; put 'if metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then do;'; put 'rc=metadata_getnasn(uri,"Domain",1,urisrc);'; put 'rc=metadata_getattr(urisrc,"Name",authdomain);'; put 'end;'; put 'if authdomain^='''' then authdomain=''authdomain=''!!quote(trim(authdomain));'; put '*/'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* get user & pass */'; put 'if authdomain='''' & metadata_getnasn("&liburi","DefaultLogin",1,uri)>0 then'; put 'do;'; put 'rc=metadata_getattr(uri,"UserID",user);'; put 'rc=metadata_getattr(uri,"Password",password);'; put 'end;'; put 'if user^='''' then do;'; put 'user=''user=''!!quote(trim(user));'; put 'password=''password=''!!quote(trim(password));'; put 'end;'; put 'call symputx(''user'',user,''l'');'; put 'call symputx(''password'',password,''l'');'; put '&md.put _all_;'; put 'run;'; put '%if %length(&open_passthrough)>0 %then %do;'; put '%put %str(WARN)ING: Passthrough option for postgres not yet supported;'; put '%return;'; put '%end;'; put '%else %do;'; put '%if &mdebug=1 %then %do;'; put '%put NOTE: Executing the following:/;'; put '%put NOTE- libname &libref POSTGRES &database &ignore_read_only_columns;'; put '%put NOTE- &direct_exe &preserve_col_names &preserve_tab_names;'; put '%put NOTE- &server &schema &authdomain &user &password //;'; put '%end;'; put 'libname &libref POSTGRES &database &ignore_read_only_columns &direct_exe'; put '&preserve_col_names &preserve_tab_names &server &schema &authdomain'; put '&user &password;'; put '%end;'; put '%end;'; put '%else %if &engine=ORACLE %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null_;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/* path */'; put 'rc=metadata_getprop(assocuri1,'; put '''Connection.Oracle.Property.PATH.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref ORACLE path=&path schema=&schema;'; put '%put NOTE- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref ORACLE path=&path schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine=SQLSVR %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.SQL.Property.Datasrc.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref SQLSVR datasrc=&path schema=&schema ;'; put '%put NOTE- user="&user" pass="XXX";'; put '%put NOTE-;'; put 'libname &libref SQLSVR datasrc=&path schema=&schema user="&user" pass="&pass";'; put '%end;'; put '%else %if &engine=TERADATA %then %do;'; put '%put NOTE: Obtaining &engine library details;'; put 'data _null;'; put 'length assocuri1 assocuri2 assocuri3 authdomain path schema userid'; put 'passwd $256;'; put 'call missing (of _all_);'; put '/* get auth domain */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri1);'; put 'rc=metadata_getnasn(assocuri1,''Domain'',1,assocuri2);'; put 'rc=metadata_getattr(assocuri2,"Name",authdomain);'; put 'call symputx(''authdomain'',authdomain,''l'');'; put '/*'; put 'rc=metadata_getnasn("&liburi",''DefaultLogin'',1,assocuri1);'; put 'rc=metadata_getattr(assocuri1,"UserID",userid);'; put 'rc=metadata_getattr(assocuri1,"Password",passwd);'; put 'call symputx(''user'',userid,''l'');'; put 'call symputx(''pass'',passwd,''l'');'; put '*/'; put '/* path */'; put 'rc=metadata_getnasn("&liburi",''LibraryConnection'',1,assocuri2);'; put 'rc=metadata_getprop(assocuri2,'; put '''Connection.Teradata.Property.SERVER.Name.xmlKey.txt'',path);'; put 'call symputx(''path'',path,''l'');'; put '/* schema */'; put 'rc=metadata_getnasn("&liburi",''UsingPackages'',1,assocuri3);'; put 'rc=metadata_getattr(assocuri3,''SchemaName'',schema);'; put 'call symputx(''schema'',schema,''l'');'; put 'run;'; put '%put NOTE: Executing the following:/; %put NOTE-;'; put '%put NOTE- libname &libref TERADATA server="&path" schema=&schema ;'; put '%put NOTe- authdomain=&authdomain;'; put '%put NOTE-;'; put 'libname &libref TERADATA server="&path" schema=&schema authdomain=&authdomain;'; put '%end;'; put '%else %if &engine= %then %do;'; put '%put NOTE: Libref &libref is not registered in metadata;'; put '%&mAbort.mp_abort('; put 'msg=%str(ERR)OR: Libref &libref is not registered in metadata'; put ',mac=mm_assigndirectlib.sas);'; put '%return;'; put '%end;'; put '%else %do;'; put '%put %str(WARN)ING: Engine &engine is currently unsupported;'; put '%put %str(WARN)ING- Please contact your support team.;'; put '%return;'; put '%end;'; put '%mend mm_assigndirectlib;'; put '%macro mm_getrepos('; put 'outds=work.mm_getrepos'; put ')/*/STORE SOURCE*/;'; put '* use a temporary fileref to hold the response;'; put 'filename response temp;'; put '/* get list of libraries */'; put 'proc metadata in='; put '"1"'; put 'out=response;'; put 'run;'; put '/* write the response to the log for debugging */'; put '/*'; put 'data _null_;'; put 'infile response lrecl=1048576;'; put 'input;'; put 'put _infile_;'; put 'run;'; put '*/'; put '/* create an XML map to read the response */'; put 'filename sxlemap temp;'; put 'data _null_;'; put 'file sxlemap;'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository";'; put 'put "";'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Id";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Name";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Desc";'; put 'put "";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@DefaultNS";'; put 'put "characterstring200";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryType";'; put 'put "characterstring20";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@RepositoryFormat";'; put 'put "characterstring10";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@Access";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@CurrentAccess";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@PauseState";'; put 'put "characterstring16";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Path";'; put 'put "";'; put 'put "characterstring256";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Engine";'; put 'put "";'; put 'put "characterstring8";'; put 'put '''';'; put 'put '''';'; put 'put "/GetRepositories/Repositories/Repository/@Options";'; put 'put "";'; put 'put "characterstring32";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataCreated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put '''';'; put 'put "";'; put 'put "/GetRepositories/Repositories/Repository/@MetadataUpdated";'; put 'put "characterstring24";'; put 'put '''';'; put 'put ''
'';'; put 'run;'; put 'libname _XML_ xml xmlfileref=response xmlmap=sxlemap;'; put 'proc sort data= _XML_.SASRepos out=&outds;'; put 'by name;'; put 'run;'; put '/* clear references */'; put 'filename sxlemap clear;'; put 'filename response clear;'; put 'libname _XML_ clear;'; put '%mend mm_getrepos;'; put '%macro dc_assignlib(type,libref,passthru=);'; put '%put &sysmacroname entry vars:;'; put '%put _local_;'; put '/* take current repository */'; put '%local repo repocnt x;'; put '%let repo=%sysfunc(getoption(metarepository));'; put '/* get list of repositories and filter */'; put '%mm_getrepos(outds=repos)'; put '%let repocnt=0;'; put 'data repos;'; put 'set repos;'; put 'where repositorytype in(''CUSTOM'',''FOUNDATION'')'; put '& upcase(name) ne "%upcase(&repo)";'; put 'keep id name ;'; put 'call symputx(cats(''repo'',_n_),name,''l'');'; put 'call symputx(''repocnt'',_n_,''l'');'; put 'run;'; put '/* find out which of these repositories has the libref we are searching for */'; put '%local lib_uri;'; put '%let lib_uri=NOTFOUND;'; put 'data _null_; /* check default repo first */'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri=NOTFOUND %then %do;'; put '%do x=1 %to &repocnt;'; put 'options metarepository=&&repo&x;'; put 'data _null_;'; put 'length lib_uri $256;'; put 'call missing (of _all_);'; put 'rc=metadata_getnobj("omsobj:SASLibrary?@Libref =''&libref''",1,lib_uri);'; put 'call symputx(''lib_uri'',coalescec(lib_uri,''NOTFOUND''),''l'');'; put 'run;'; put '%if &lib_uri ne NOTFOUND %then %let x=%eval(&repocnt+1);'; put '%end;'; put '%end;'; put '%if &type=READ %then %do;'; put '%mm_assignlib(&libref)'; put '%end;'; put '%else %if &type=WRITE %then %do;'; put '%mm_assigndirectlib(&libref,open_passthrough=&passthru)'; put '%end;'; put 'options metarepository=&repo;'; put '%mend dc_assignlib;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for tables in a library'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5||'; put '|1|DISCOUNT_RT|"40%"|N|0.4||'; put '|1|DISCOUNT_RT|"30%"|N|0.3||'; put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5||'; put '|2|DISCOUNT_RT|"40%"|N|0.4||'; put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|'; put '

SAS Macros

'; put '@li dc_assignlib.sas'; put '**/'; put '/* send back the raw and formatted values */'; put '%let tgtlib=0;'; put '%let varlibds=%mf_getuniquename();'; put '%let vartgtlib=%mf_getuniquename();'; put '%let var_is_lib=%mf_getuniquename();'; put 'data _null_;'; put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;'; put 'if _n_=1 then call missing(of _all_);'; put 'set work.source_row;'; put '&varlibds=upcase(symget(''libds''));'; put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;'; put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"'; put 'then &vartgtlib=RLS_LIBREF;'; put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"'; put 'then &vartgtlib=CLS_LIBREF;'; put '/* validate name */'; put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);'; put 'call symputx(''vartgtlib'',&vartgtlib);'; put 'putlog (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= ("&tgtlib" ="0" )'; put ',mac=&_program..sas'; put ',msg=%str(Invalid library - %superq(vartgtlib))'; put ',errds=work.dc_error_response'; put ')'; put '%dc_assignlib(READ,&tgtlib)'; put 'data members; /* empty table */'; put 'name='' '';'; put 'run;'; put 'ods output Members=Members;'; put 'proc datasets library=&tgtlib ;'; put 'run;'; put '/* send back the raw and formatted values */'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct name as display_value,'; put 'upcase(name) as raw_value'; put 'from work.members'; put 'where MemType=''DATA'''; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=tables_editable; filename sascode temp lrecl=32767; data _null_; file sascode; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '/**'; put '@file mp_jsonout.sas'; put '@brief Writes JSON in SASjs format to a fileref'; put '@details This macro can be used to OPEN a JSON stream and send one or more'; put 'tables as arrays of rows, where each row can be an object or a nested array.'; put 'There are two engines available - DATASTEP or PROCJSON.'; put 'PROC JSON is fast but will produce errs like the ones below if'; put 'special chars are encountered.'; put '> (ERR)OR: Some code points did not transcode.'; put '> An object or array close is not valid at this point in the JSON text.'; put '> Date value out of range'; put 'If this happens, try running with ENGINE=DATASTEP.'; put 'The DATASTEP engine is used to handle special SAS missing numerics, and'; put 'can also convert entire datasets to formatted values. Output JSON is always'; put 'in UTF-8.'; put 'Usage:'; put 'filename tmp temp;'; put 'data class; set sashelp.class;run;'; put '%mp_jsonout(OPEN,jref=tmp)'; put '%mp_jsonout(OBJ,class,jref=tmp)'; put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)'; put '%mp_jsonout(CLOSE,jref=tmp)'; put 'data _null_;'; put 'infile tmp;'; put 'input;putlog _infile_;'; put 'run;'; put 'If you are building web apps with SAS then you are strongly encouraged to use'; put 'the mX_createwebservice macros in combination with the'; put '[sasjs adapter](https://github.com/sasjs/adapter).'; put 'For more information see https://sasjs.io'; put '@param [in] action Valid values:'; put '@li OPEN - opens the JSON'; put '@li OBJ - sends a table with each row as an object'; put '@li ARR - sends a table with each row in an array'; put '@li CLOSE - closes the JSON'; put '@param [in] ds The dataset to send. Must be a work table.'; put '@param [out] jref= (_webout) The fileref to which to send the JSON'; put '@param [out] dslabel= The name to give the table in the exported JSON'; put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table'; put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:'; put '@li PROCJSON (default)'; put '@li DATASTEP (more reliable when data has non standard characters)'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to JSON'; put '

Related Files

'; put '@li mp_ds2fmtds.sas'; put '@version 9.2'; put '@author Allan Bowe'; put '@source https://github.com/sasjs/core'; put '**/'; put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; put ',engine=DATASTEP'; put ',missing=NULL'; put ',showmeta=N'; put ',maxobs=MAX'; put ')/*/STORE SOURCE*/;'; put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval'; put 'tmpds1 tmpds2 tmpds3 tmpds4;'; put '%let numcols=0;'; put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);'; put '%if &action=OPEN %then %do;'; put 'options nobomfile;'; put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; put 'run;'; put '%end;'; put '%else %if (&action=ARR or &action=OBJ) %then %do;'; put '/* force variable names to always be uppercase in the JSON */'; put 'options validvarname=upcase;'; put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; put 'filename _sjs1 temp lrecl=200 ;'; put 'data _null_; file _sjs1 encoding=''utf-8'';'; put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjs1 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs1 clear;'; put '/* grab col defs */'; put 'proc contents noprint data=&ds'; put 'out=_data_(keep=name type length format formatl formatd varnum label);'; put 'run;'; put '%let colinfo=%scan(&syslast,2,.);'; put 'proc sort data=&colinfo;'; put 'by varnum;'; put 'run;'; put '/* move meta to mac vars */'; put 'data &colinfo;'; put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; put 'set &colinfo end=last nobs=nobs;'; put 'name=upcase(name);'; put '/* fix formats */'; put 'if type=2 or type=6 then do;'; put 'typelong=''char'';'; put 'length fmt $49.;'; put 'if format='''' then fmt=cats(''$'',length,''.'');'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else fmt=cats(format,formatl,''.'');'; put 'end;'; put 'else do;'; put 'typelong=''num'';'; put 'if format='''' then fmt=''best.'';'; put 'else if formatl=0 then fmt=cats(format,''.'');'; put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; put 'else fmt=cats(format,formatl,''.'',formatd);'; put 'end;'; put '/* 32 char unique name */'; put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; put 'call symputx(cats(''name'',_n_),name,''l'');'; put 'call symputx(cats(''newname'',_n_),newname,''l'');'; put 'call symputx(cats(''length'',_n_),length,''l'');'; put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; put 'call symputx(cats(''type'',_n_),type,''l'');'; put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; put '/* overwritten when fmt=Y and a custom format exists in catalog */'; put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');'; put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');'; put 'run;'; put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql;'; put 'select count(*) into: lastobs from &ds;'; put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));'; put '%if &engine=PROCJSON %then %do;'; put '%if &missing=STRING %then %do;'; put '%put &sysmacroname: Special Missings not supported in proc json.;'; put '%put &sysmacroname: Switching to DATASTEP engine;'; put '%goto datastep;'; put '%end;'; put 'data &tempds;'; put 'set &ds;'; put '&stmt_obs;'; put '%if &fmt=N %then format _numeric_ best32.;;'; put '/* PRETTY is necessary to avoid line truncation in large files */'; put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; put 'proc json out=_sjs2 pretty'; put '%if &action=ARR %then nokeys ;'; put ';export &tempds / nosastags fmtnumeric;'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs2 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs2 clear;'; put '%end;'; put '%else %if &engine=DATASTEP %then %do;'; put '%datastep:'; put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; put '%then %do;'; put '%put &sysmacroname: &ds NOT FOUND!!!;'; put '%return;'; put '%end;'; put '%if &fmt=Y %then %do;'; put '/**'; put '* Extract format definitions'; put '* First, by getting library locations from dictionary.formats'; put '* Then, by exporting the width using proc format'; put '* Cannot use maxw from sashelp.vformat as not always populated'; put '* Cannot use fmtinfo() as not supported in all flavours'; put '*/'; put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; put 'proc sql noprint;'; put 'create table &tmpds1 as'; put 'select cats(libname,''.'',memname) as FMTCAT,'; put 'FMTNAME'; put 'from dictionary.formats'; put 'where fmttype=''F'' and libname is not null'; put 'and fmtname in (select format from &colinfo where format is not null)'; put 'order by 1;'; put 'create table &tmpds2('; put 'FMTNAME char(32),'; put 'LENGTH num'; put ');'; put '%local catlist cat fmtlist i;'; put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;'; put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));'; put '%let cat=%scan(&catlist,&i,%str( ));'; put 'proc sql;'; put 'select distinct fmtname into: fmtlist separated by '' '''; put 'from &tmpds1 where fmtcat="&cat";'; put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);'; put 'select &fmtlist;'; put 'run;'; put 'proc sql;'; put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;'; put '%end;'; put 'proc sql;'; put 'create table &tmpds4 as'; put 'select a.*, b.length as MAXW'; put 'from &colinfo a'; put 'left join &tmpds2 b'; put 'on cats(a.format)=cats(upcase(b.fmtname))'; put 'order by a.varnum;'; put 'data _null_;'; put 'set &tmpds4;'; put 'if not missing(maxw);'; put 'call symputx('; put 'cats(''fmtlen'',_n_),'; put '/* vars need extra padding due to JSON escaping of special chars */'; put 'min(32767,ceil((max(length,maxw)+10)*1.5))'; put ',''l'''; put ');'; put 'run;'; put '/* configure varlenchk - as we are explicitly shortening the variables */'; put '%let optval=%sysfunc(getoption(varlenchk));'; put 'options varlenchk=NOWARN;'; put 'data _data_(compress=char);'; put '/* shorten the new vars */'; put 'length'; put '%do i=1 %to &numcols;'; put '&&name&i $&&fmtlen&i'; put '%end;'; put ';'; put '/* rename on entry */'; put 'set &ds(rename=('; put '%do i=1 %to &numcols;'; put '&&name&i=&&newname&i'; put '%end;'; put '));'; put '&stmt_obs;'; put 'drop'; put '%do i=1 %to &numcols;'; put '&&newname&i'; put '%end;'; put ';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=num %then %do;'; put '&&name&i=cats(put(&&newname&i,&&fmt&i));'; put '%end;'; put '%else %do;'; put '&&name&i=put(&&newname&i,&&fmt&i);'; put '%end;'; put '%end;'; put 'if _error_ then do;'; put 'call symputx(''syscc'',1012);'; put 'stop;'; put 'end;'; put 'run;'; put '%let fmtds=&syslast;'; put 'options varlenchk=&optval;'; put '%end;'; put 'proc format; /* credit yabwon for special null removal */'; put 'value bart (default=40)'; put '%if &missing=NULL %then %do;'; put '._ - .z = null'; put '%end;'; put '%else %do;'; put '._ = [quote()]'; put '. = null'; put '.a - .z = [quote()]'; put '%end;'; put 'other = [best.];'; put 'data &tempds;'; put 'attrib _all_ label='''';'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'length &&name&i $&&fmtlen&i...;'; put 'format &&name&i $&&fmtlen&i...;'; put '%end;'; put '%end;'; put '%if &fmt=Y %then %do;'; put 'set &fmtds;'; put '%end;'; put '%else %do;'; put 'set &ds;'; put '%end;'; put '&stmt_obs;'; put 'format _numeric_ bart.;'; put '%do i=1 %to &numcols;'; put '%if &&typelong&i=char or &fmt=Y %then %do;'; put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put '&&name&i=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else &&name&i=quote(cats(&&name&i));'; put '%end;'; put '%end;'; put 'run;'; put 'filename _sjs3 temp lrecl=131068 ;'; put 'data _null_;'; put 'file _sjs3 encoding=''utf-8'';'; put 'if _n_=1 then put "[";'; put 'set &tempds;'; put 'if _n_>1 then put "," @; put'; put '%if &action=ARR %then "[" ; %else "{" ;'; put '%do i=1 %to &numcols;'; put '%if &i>1 %then "," ;'; put '%if &action=OBJ %then """&&name&i"":" ;'; put '"&&name&i"n /* name literal for reserved variable names */'; put '%end;'; put '%if &action=ARR %then "]" ; %else "}" ; ;'; put '/* close out the table */'; put 'data _null_;'; put 'file _sjs3 mod encoding=''utf-8'';'; put 'put '']'';'; put 'run;'; put 'data _null_;'; put 'infile _sjs3 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs3 clear;'; put '%end;'; put 'proc sql;'; put 'drop table &colinfo, &tempds;'; put '%if %substr(&showmeta,1,1)=Y %then %do;'; put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; put 'data _null_;'; put 'file _sjs4;'; put 'length label $350;'; put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; put 'do i=1 to &numcols;'; put 'name=quote(trim(symget(cats(''name'',i))));'; put 'format=quote(trim(symget(cats(''fmt'',i))));'; put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; put 'length=quote(trim(symget(cats(''length'',i))));'; put 'type=quote(trim(symget(cats(''typelong'',i))));'; put 'if i>1 then put "," @@;'; put 'put name '':{"format":'' format '',"label":'' label'; put ''',"length":'' length '',"type":'' type ''}'';'; put 'end;'; put 'put ''}}'';'; put 'run;'; put '/* send back to webout */'; put 'data _null_;'; put 'infile _sjs4 lrecl=1 recfm=n;'; put 'file &jref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjs4 clear;'; put '%end;'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put 'data _null_; file &jref encoding=''utf-8'' mod ;'; put 'put "}";'; put 'run;'; put '%end;'; put '%mend mp_jsonout;'; put '/**'; put '@file mm_webout.sas'; put '@brief Send data to/from SAS Stored Processes'; put '@details This macro should be added to the start of each Stored Process,'; put '**immediately** followed by a call to:'; put '%mm_webout(FETCH)'; put 'This will read all the input data and create same-named SAS datasets in the'; put 'WORK library. You can then insert your code, and send data back using the'; put 'following syntax:'; put 'data some datasets; * make some data ;'; put 'retain some columns;'; put 'run;'; put '%mm_webout(OPEN)'; put '%mm_webout(ARR,some) * Array format, fast, suitable for large tables ;'; put '%mm_webout(OBJ,datasets) * Object format, easier to work with ;'; put 'Finally, wrap everything up send some helpful system variables too'; put '%mm_webout(CLOSE)'; put '@param [in] action Either FETCH, OPEN, ARR, OBJ or CLOSE'; put '@param [in] ds The dataset to send back to the frontend'; put '@param [out] dslabel= Value to use instead of table name for sending to JSON'; put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values'; put '@param [out] fref= (_webout) The fileref to which to write the JSON'; put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL'; put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)'; put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,'; put 'such as the column formats and types. The metadata is contained inside an'; put 'object with the same name as the table but prefixed with a dollar sign - ie,'; put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`'; put '@param [in] workobs= (0) When set to a positive integer, will create a new'; put 'output object (WORK) which contains this number of observations from all'; put 'tables in the WORK library.'; put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows'; put 'that should be converted to output JSON'; put '

SAS Macros

'; put '@li mp_jsonout.sas'; put '

Related Macros

'; put '@li ms_webout.sas'; put '@li mv_webout.sas'; put '@version 9.3'; put '@author Allan Bowe'; put '**/'; put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL'; put ',showmeta=N,maxobs=MAX,workobs=0'; put ');'; put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; put 'sasjs_tables;'; put '%local i tempds jsonengine;'; put '/* see https://github.com/sasjs/core/issues/41 */'; put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; put '%else %let jsonengine=DATASTEP;'; put '%if &action=FETCH %then %do;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'options mprint notes mprintnest;'; put '%end;'; put '%let _webin_file_count=%eval(&_webin_file_count+0);'; put '/* now read in the data */'; put '%do i=1 %to &_webin_file_count;'; put '%if &_webin_file_count=1 %then %do;'; put '%let _webin_fileref1=&_webin_fileref;'; put '%let _webin_name1=&_webin_name;'; put '%end;'; put 'data _null_;'; put 'infile &&_webin_fileref&i termstr=crlf;'; put 'input;'; put 'call symputx(''input_statement'',_infile_);'; put 'putlog "&&_webin_name&i input statement: " _infile_;'; put 'stop;'; put 'data &&_webin_name&i;'; put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; put 'input &input_statement;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'if _n_<20 then putlog _infile_;'; put '%end;'; put 'run;'; put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; put '%end;'; put '%end;'; put '%else %if &action=OPEN %then %do;'; put '/* fix encoding */'; put 'OPTIONS NOBOMFILE;'; put '/**'; put '* check xengine type to avoid the below err message:'; put '* > Function is only valid for filerefs using the CACHE access method.'; put '*/'; put 'data _null_;'; put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; put 'if xengine=''STREAM'' then do;'; put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; put 'end;'; put 'run;'; put '/* setup json */'; put 'data _null_;file &fref encoding=''utf-8'';'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutBEGIN<<'';'; put '%end;'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'run;'; put '%end;'; put '%else %if &action=ARR or &action=OBJ %then %do;'; put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs'; put ')'; put '%end;'; put '%else %if &action=CLOSE %then %do;'; put '/* To avoid issues with _webout on EBI we use a temporary file */'; put 'filename _sjsref temp lrecl=131068;'; put '%if %str(&workobs) > 0 %then %do;'; put '/* if debug mode, send back first XX records of each work table also */'; put 'data;run;%let tempds=%scan(&syslast,2,.);'; put 'ods output Members=&tempds;'; put 'proc datasets library=WORK memtype=data;'; put '%local wtcnt;%let wtcnt=0;'; put 'data _null_;'; put 'set &tempds;'; put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; put 'i+1;'; put 'call symputx(cats(''wt'',i),name,''l'');'; put 'call symputx(''wtcnt'',i,''l'');'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put ",""WORK"":{";'; put '%do i=1 %to &wtcnt;'; put '%let wt=&&wt&i;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'dsid=open("WORK.&wt",''is'');'; put 'nlobs=attrn(dsid,''NLOBS'');'; put 'nvars=attrn(dsid,''NVARS'');'; put 'rc=close(dsid);'; put 'if &i>1 then put '',''@;'; put 'put " ""&wt"" : {";'; put 'put ''"nlobs":'' nlobs;'; put 'put '',"nvars":'' nvars;'; put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y'; put ',maxobs=&workobs'; put ')'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put '%end;'; put 'data _null_; file _sjsref mod encoding=''utf-8'';'; put 'put "}";'; put 'run;'; put '%end;'; put '/* close off json */'; put 'data _null_;file _sjsref mod encoding=''utf-8'';'; put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;'; put 'put ",""_DEBUG"" : ""&_debug"" ";'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));'; put 'put '',"AUTOEXEC" : '' autoexec;'; put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";'; put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";'; put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));'; put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'length memsize $32;'; put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; put 'memsize=quote(cats(memsize));'; put 'put '',"MEMSIZE" : '' memsize;'; put 'put "}" @;'; put '%if %str(&_debug) ge 131 %then %do;'; put 'put ''>>weboutEND<<'';'; put '%end;'; put 'run;'; put '/* now write to _webout 1 char at a time */'; put 'data _null_;'; put 'infile _sjsref lrecl=1 recfm=n;'; put 'file &fref mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put 'filename _sjsref clear;'; put '%end;'; put '%mend mm_webout;'; put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);'; put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; put ',missing=&missing'; put ',showmeta=&showmeta'; put ',maxobs=&maxobs'; put ') %mend;'; put '/* provide additional debug info */'; put '%global _program;'; put '%put &=syscc;'; put '%put user=%mf_getuser();'; put '%put pgm=&_program;'; put '%put timestamp=%sysfunc(datetime(),datetime19.);'; put '* Service Variables start;'; put '* Service Variables end;'; put '* SAS Macros start;'; put '%macro mf_getapploc(pgm);'; put '%if "&pgm"="" %then %do;'; put '%if %symexist(_program) %then %let pgm=&_program;'; put '%else %do;'; put '%put &sysmacroname: No value provided and no _program variable available;'; put '%return;'; put '%end;'; put '%end;'; put '%local root;'; put '/**'; put '* First check we are not in the tests/macros folder (which has no subfolders)'; put '* or specifically in the testsetup or testteardown services'; put '*/'; put '%if %index(&pgm,/tests/macros/)'; put 'or %index(&pgm,/tests/testsetup)'; put 'or %index(&pgm,/tests/testteardown)'; put '%then %do;'; put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);'; put '&root'; put '%return;'; put '%end;'; put '/**'; put '* Next, move up two levels to avoid matches on subfolder or service name'; put '*/'; put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);'; put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);'; put '%if %index(&root,/tests/) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/tests/)-1);'; put '%end;'; put '%else %if %index(&root,/services) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/services)-1);'; put '%end;'; put '%else %if %index(&root,/jobs) %then %do;'; put '%let root=%substr(&root,1,%index(&root,/jobs)-1);'; put '%end;'; put '%else %put &sysmacroname: Could not find an app location from &pgm;'; put '&root'; put '%mend mf_getapploc ;'; put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; put '%local rc fname;'; put '%if &prefix=0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%end;'; put '%else %do;'; put '%local x len;'; put '%let len=%eval(8-%length(&prefix));'; put '%let x=0;'; put '%do x=0 %to &maxtries;'; put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; put '%if &rc %then %put %sysfunc(sysmsg());'; put '&fname'; put '%return;'; put '%end;'; put '%end;'; put '%put unable to find available fileref after &maxtries attempts;'; put '%end;'; put '%mend mf_getuniquefileref;'; put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; put ', errds=work.mp_abort_errds'; put ', mode=REGULAR'; put ')/*/STORE SOURCE*/;'; put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; put '%local fref fid i;'; put '%if not(%eval(%unquote(&iftrue))) %then %return;'; put '%put NOTE: /// mp_abort macro executing //;'; put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; put '%put NOTE - &msg;'; put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; put '%then %do;'; put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; put 'data &errds;'; put 'iftrue=''1=1'';'; put 'length mac $100 msg $5000;'; put 'mac=symget(''mac'');'; put 'msg=symget(''msg'');'; put 'run;'; put 'data _null_;'; put 'abort cancel FILE;'; put 'run;'; put '%return;'; put '%end;'; put '%end;'; put '/* Web App Context */'; put '%if %symexist(_PROGRAM)'; put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; put 'or &mode=INCLUDE'; put '%then %do;'; put 'options obs=max replace mprint;'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; put '%then %do;'; put 'options nosyntaxcheck;'; put '%end;'; put '%if &mode=INCLUDE %then %do;'; put '%if %sysfunc(exist(&errds))=1 %then %do;'; put 'data _null_;'; put 'set &errds;'; put 'call symputx(''iftrue'',iftrue,''l'');'; put 'call symputx(''mac'',mac,''l'');'; put 'call symputx(''msg'',msg,''l'');'; put 'putlog (_all_)(=);'; put 'run;'; put '%if (&iftrue)=0 %then %return;'; put '%end;'; put '%else %do;'; put '%put &sysmacroname: No include errors found;'; put '%return;'; put '%end;'; put '%end;'; put '/* extract log errs / warns, if exist */'; put '%local logloc logline;'; put '%global logmsg; /* capture global messages */'; put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; put '%else %let logloc=%qsysfunc(getoption(LOG));'; put 'proc printto log=log;run;'; put '%let logline=0;'; put '%if %length(&logloc)>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input; putlog _infile_;'; put 'i=1;'; put 'retain logonce 0;'; put 'if ('; put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; put ') and logonce=0 then'; put 'do;'; put 'call symputx(''logline'',_n_);'; put 'logonce+1;'; put 'end;'; put 'run;'; put '/* capture log including lines BEFORE the err */'; put '%if &logline>0 %then %do;'; put 'data _null_;'; put 'infile &logloc lrecl=5000;'; put 'input;'; put 'i=1;'; put 'stoploop=0;'; put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; put 'input;'; put 'i+1;'; put 'stoploop=1;'; put 'end;'; put 'if stoploop=1 then stop;'; put 'run;'; put '%end;'; put '%end;'; put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; put '/* setup webout for Viya */'; put 'options nobomfile;'; put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; put 'filename _webout temp lrecl=999999 mod;'; put '%end;'; put '%else %do;'; put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; put 'name="_webout.json" lrecl=999999 mod;'; put '%end;'; put '%end;'; put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; put 'options nobomfile;'; put '/* set up http header for SASjs Server */'; put '%let fid=%sysfunc(fopen(&fref,A));'; put '%if &fid=0 %then %do;'; put '%put %str(ERR)OR: %sysfunc(sysmsg());'; put '%return;'; put '%end;'; put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; put '%let rc=%sysfunc(fwrite(&fid));'; put '%let rc=%sysfunc(fclose(&fid));'; put '%let rc=%sysfunc(filename(&fref));'; put '%end;'; put '/* send response in SASjs JSON format */'; put 'data _null_;'; put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; put 'sasdatetime=datetime();'; put 'msg=symget(''msg'');'; put '%if &logline>0 %then %do;'; put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; put '%end;'; put '/* escape the escapes */'; put 'msg=tranwrd(msg,''\'',''\\'');'; put '/* escape the quotes */'; put 'msg=tranwrd(msg,''"'',''\"'');'; put '/* ditch the CRLFs as chrome complains */'; put 'msg=compress(msg,,''kw'');'; put '/* quote without quoting the quotes (which are escaped instead) */'; put 'msg=cats(''"'',msg,''"'');'; put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; put 'else debug=''""'';'; put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; put 'put '',"sasjsAbort" : [{'';'; put 'put '' "MSG":'' msg ;'; put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; put 'put '',"_DEBUG":'' debug ;'; put 'if symexist(''_metauser'') then do;'; put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; put 'put ",""_METAUSER"": " _METAUSER;'; put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; put 'put '',"_METAPERSON": '' _METAPERSON;'; put 'end;'; put 'if symexist(''SYS_JES_JOB_URI'') then do;'; put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; put 'end;'; put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; put 'put '',"_PROGRAM" : '' _PROGRAM ;'; put 'put ",""SYSCC"" : ""&syscc"" ";'; put 'syserrortext=cats(symget(''syserrortext''));'; put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syserrortext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syserrortext=cats(''"'',syserrortext,''"'');'; put 'put '',"SYSERRORTEXT" : '' syserrortext;'; put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; put 'put ",""SYSSITE"" : ""&syssite"" ";'; put 'sysvlong=quote(trim(symget(''sysvlong'')));'; put 'put '',"SYSVLONG" : '' sysvlong;'; put 'syswarningtext=cats(symget(''syswarningtext''));'; put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;'; put 'syswarningtext=''"''!!trim('; put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */'; put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)'; put ')))))))))))))!!''"'';'; put 'end;'; put 'else syswarningtext=cats(''"'',syswarningtext,''"'');'; put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; put 'put "}" ;'; put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; put 'run;'; put '%put _all_;'; put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; put 'data _null_;'; put 'putlog ''stpsrvset program err and syscc'';'; put 'rc=stpsrvset(''program error'', 0);'; put 'call symputx("syscc",0,"g");'; put 'run;'; put '%if &sysscp=WIN'; put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */'; put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; put '/* skip approach (below) does not work in windows m6+ envs */'; put 'endsas;'; put '%end;'; put '%else %do;'; put '/**'; put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; put '* Abort variants are ungraceful (non zero return code)'; put '* This approach lets SAS run silently until the end :-)'; put '* Caution - fails when called within a %include within a macro'; put '* Use mp_include() to handle this.'; put '*/'; put 'filename skip temp;'; put 'data _null_;'; put 'file skip;'; put 'put ''%macro skip();'';'; put 'comment ''%mend skip; -> fix lint '';'; put 'put ''%macro skippy();'';'; put 'comment ''%mend skippy; -> fix lint '';'; put 'run;'; put '%inc skip;'; put '%end;'; put '%end;'; put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; put '/* endsas kills the session making it harder to fetch results */'; put 'data _null_;'; put 'syswarningtext=symget(''syswarningtext'');'; put 'syserrortext=symget(''syserrortext'');'; put 'abort_msg=symget(''msg'');'; put 'syscc=symget(''syscc'');'; put 'sysuserid=symget(''sysuserid'');'; put 'iftrue=symget(''iftrue'');'; put 'put (_all_)(/=);'; put 'call symputx(''syscc'',0);'; put 'abort cancel nolist;'; put 'run;'; put '%end;'; put '%else %do;'; put '%abort cancel;'; put '%end;'; put '%end;'; put '%else %do;'; put '%put _all_;'; put '%abort cancel;'; put '%end;'; put '%mend mp_abort;'; put '/** @endcond */'; put '%macro mm_getstpcode('; put 'tree=/User Folders/sasdemo/somestp'; put ',name='; put ',outloc=0'; put ',outref=0'; put ',mDebug=1'; put ',showlog=NO'; put ');'; put '%local mD;'; put '%if &mDebug=1 %then %let mD=;'; put '%else %let mD=%str(*);'; put '%&mD.put Executing &sysmacroname..sas;'; put '%&mD.put _local_;'; put '%if %length(&name)>0 %then %let name=/&name;'; put '/* first, check if STP exists */'; put '%local tsuri;'; put '%let tsuri=stopifempty ;'; put 'data _null_;'; put 'format type uri tsuri value $200.;'; put 'call missing (of _all_);'; put 'path="&tree&name(StoredProcess)";'; put '/* first, find the STP ID */'; put 'if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do;'; put '/* get sourcecode */'; put 'cnt=1;'; put 'do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0);'; put 'rc=metadata_getattr(tsuri,"Name",value);'; put '&mD.put tsuri= value=;'; put 'if value="SourceCode" then do;'; put '/* found it! */'; put 'rc=metadata_getattr(tsuri,"Id",value);'; put 'call symputx(''tsuri'',value,''l'');'; put 'stop;'; put 'end;'; put 'cnt+1;'; put 'end;'; put 'end;'; put 'else put (_all_)(=);'; put 'run;'; put '%mp_abort(iftrue= (&tsuri=stopifempty)'; put ',mac=mm_getstpcode'; put ',msg=%str(&tree&name.(StoredProcess) not found!)'; put ')'; put '/**'; put '* Now we can extract the textstore'; put '*/'; put 'filename __getdoc temp lrecl=10000000;'; put 'proc metadata'; put 'in="$METAREPOSITORY'; put ''; put 'SAS1"'; put 'out=__getdoc ;'; put 'run;'; put '/* find the beginning of the text */'; put '%local start;'; put 'data _null_;'; put 'infile __getdoc lrecl=10000;'; put 'input;'; put 'start=index(_infile_,''StoredText="'');'; put 'if start then do;'; put 'call symputx("start",start+11);'; put '*putlog ''"'' _infile_ ''"'';'; put 'end;'; put 'stop;'; put '%local outeng;'; put '%if "&outloc"="0" %then %let outeng=TEMP;'; put '%else %let outeng="&outloc";'; put '%local fref;'; put '%if &outref=0 %then %let fref=%mf_getuniquefileref();'; put '%else %let fref=&outref;'; put '/* read the content, byte by byte, resolving escaped chars */'; put 'filename &fref &outeng lrecl=100000;'; put 'data _null_;'; put 'length filein 8 fileid 8;'; put 'filein = fopen("__getdoc","I",1,"B");'; put 'fileid = fopen("&fref","O",1,"B");'; put 'rec = "20"x;'; put 'length entity $6;'; put 'do while(fread(filein)=0);'; put 'x+1;'; put 'if x>&start then do;'; put 'rc = fget(filein,rec,1);'; put 'if rec=''"'' then leave;'; put 'else if rec="&" then do;'; put 'entity=rec;'; put 'do until (rec=";");'; put 'if fread(filein) ne 0 then goto getout;'; put 'rc = fget(filein,rec,1);'; put 'entity=cats(entity,rec);'; put 'end;'; put 'select (entity);'; put 'when (''&'' ) rec=''&'' ;'; put 'when (''<'' ) rec=''<'' ;'; put 'when (''>'' ) rec=''>'' ;'; put 'when (''''') rec="''" ;'; put 'when (''"'') rec=''"'' ;'; put 'when ('' '') rec=''0A''x;'; put 'when ('' '') rec=''0D''x;'; put 'when (''$'' ) rec=''$'' ;'; put 'when ('' '') rec=''09''x;'; put 'otherwise putlog "%str(WARN)ING: missing value for " entity=;'; put 'end;'; put 'rc =fput(fileid, substr(rec,1,1));'; put 'rc =fwrite(fileid);'; put 'end;'; put 'else do;'; put 'rc =fput(fileid,rec);'; put 'rc =fwrite(fileid);'; put 'end;'; put 'end;'; put 'end;'; put 'getout:'; put 'rc=fclose(filein);'; put 'rc=fclose(fileid);'; put 'run;'; put '%if &showlog=YES %then %do;'; put 'data _null_;'; put 'infile &fref lrecl=32767 end=last;'; put 'input;'; put 'if _n_=1 then putlog ''>>stpcodeBEGIN<<'';'; put 'putlog _infile_;'; put 'if last then putlog ''>>stpcodeEND<<'';'; put 'run;'; put '%end;'; put 'filename __getdoc clear;'; put '%if &outref=0 %then %do;'; put 'filename &fref clear;'; put '%end;'; put '%mend mm_getstpcode;'; put '%macro dc_getsettings();'; put '%global _program;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(syscc=&syscc on entry (&syswarningtext &syserrortext))'; put ')'; put '%if %length(&_PROGRAM)>1 %then %let root=&_program;'; put '%else %do;'; put '%global _metauser;'; put '%let _metauser=&sysuserid;'; put '/* to mimic a "real" _program we need to give a dummy role and stp name */'; put '%let root=/dummyRole/dummyName;'; put '%end;'; put '/* the DC precode is stored in the Admin folder in the root of'; put 'the project. Lets find that root. */'; put '%put &=root;'; put '%let root=%mf_getapploc();'; put '%put &=root;'; put '/* Now we know the root location we can retrieve the params */'; put '%let temploc=%sysfunc(pathname(work))/settings.txt;'; put '%mm_getstpcode(tree=&root/services/public'; put ',name=Data_Controller_Settings'; put ',outloc=&temploc'; put ')'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Unable to run getstpcode)'; put ')'; put 'filename _getsets "&temploc" lrecl=2000;'; put '/*'; put 'Do not use mp_include here - this puts a copy in every service, which creates'; put 'compilation problems when calling services from mp_include'; put '*/'; put '%inc _getsets/source2;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&sysmacroname'; put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))'; put ')'; put '%mend dc_getsettings;'; put '%macro mf_fmtdttm('; put ')/*/STORE SOURCE*/;'; put '%if "&sysver"="9.2" or "&sysver"="9.3"'; put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")'; put 'or "%substr(&sysver,1,1)"="4"'; put 'or "%substr(&sysver,1,1)"="5"'; put '%then %do;DATETIME19.3%end;'; put '%else %do;E8601DT26.6%end;'; put '%mend mf_fmtdttm;'; put '%macro mf_getuser('; put ')/*/STORE SOURCE*/;'; put '%local user;'; put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; put '%end;'; put '%else %if %symexist(_metaperson) %then %do;'; put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; put '/* sometimes SAS will add @domain extension - remove for consistency */'; put '/* but be sure to quote in case of usernames with commas */'; put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; put '%end;'; put '%else %let user=&sysuserid;'; put '%quote(&user)'; put '%mend mf_getuser;'; put '%macro mp_init(prefix=SASJS'; put ')/*/STORE SOURCE*/;'; put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */'; put '%global'; put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */'; put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */'; put '&prefix._INIT_NUM /* initialisation time as numeric */'; put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */'; put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */'; put ';'; put '%let sasjs_prefix=&prefix;'; put 'data _null_;'; put 'dttm=datetime();'; put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');'; put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');'; put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');'; put 'run;'; put 'options'; put 'compress=CHAR /* default is none so ensure we have something! */'; put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */'; put 'errorcheck=STRICT /* catch errs in libname/filename statements */'; put 'fmterr /* ensure err when a format cannot be found */'; put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */'; put 'missing=. /* changing this can cause hard to detect errs */'; put 'noquotelenmax /* avoid warnings for long strings */'; put 'noreplace /* avoid overwriting permanent datasets */'; put 'ps=max /* reduce log size slightly */'; put 'ls=max /* reduce log even more and avoid word truncation */'; put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */'; put 'validvarname=V7 /* avoid special characters etc in variable names */'; put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */'; put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */'; put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;'; put 'noautocorrect /* disallow misspelled procedure names */'; put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */'; put '%end;'; put ';'; put '%mend mp_init;'; put '%macro mpeinit(fetch=YES);'; put '%global mpeinit'; put 'mpeadmins /* group with unrestricted Meditor access */'; put 'mpelocapprovals /* location for landing and staging files */'; put 'mpelib /* location of configuration tables for DC */'; put 'dc_repo_users /* location of user / group metadata */'; put 'dc_licence_key /* extracted in dc_getsettings */'; put 'dc_activation_key /* extracted in dc_getsettings */'; put 'dc_locale /* extracted in dc_getsettings */'; put 'dc_dttmtfmt /* can be overridden in dc_getsettings */'; put '_debug'; put ';'; put '%if &mpeinit=1 %then %return;'; put '%else %let mpeinit=1;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))'; put ')'; put '%mp_init()'; put '%if &fetch=YES %then %do;'; put '%webout(FETCH)'; put '%end;'; put '%global _CLIENTNAME;'; put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)'; put ',mac=&_program..sas'; put ',msg=%str(Data Controller is a web app and should not be executed from EG)'; put ')'; put 'options urlencoding=utf8 nobomfile lrecl=32767;'; put '%let perf=%sysfunc(datetime());'; put '%put perfdiff: 0;'; put '%let dc_locale=SYSTEM; /* default if not set */'; put '/**'; put '* E8601DT26.6 has widest database support - but not all SAS flavours can'; put '* handle it. Override in the settings STP if needed.'; put '*/'; put 'data _null_;'; put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';'; put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);'; put 'put dc_dttmtfmt=;'; put 'run;'; put '%put &=dc_dttmtfmt;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc prior to dc_getsettings)'; put ')'; put '%dc_getsettings()'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program'; put ',msg=%str(syscc=&syscc after dc_getsettings)'; put ')'; put 'data _null_;'; put 'set &DC_LIBREF..mpe_config(where=('; put 'var_scope="DC"'; put 'and &dc_dttmtfmt lt tx_to'; put 'and var_active=1'; put '));'; put 'call symputx(var_name,var_value,''G'');'; put 'putlog var_name "=" var_value;'; put 'run;'; put '%let mpelib=&dc_libref;'; put '%let mpeadmins=&dc_admin_group;'; put '%let mpelocapprovals=&dc_staging_area;'; put '%let dc_repo_users=&dc_repo_users;'; put '%if &dc_locale ne SYSTEM %then %do;'; put 'options locale=&dc_locale;'; put '%end;'; put '%mp_abort(iftrue= (&syscc ne 0)'; put ',mac=&_program..sas'; put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))'; put ')'; put '%mend mpeinit;'; put '%macro mf_mval(var);'; put '%if %symexist(&var) %then %do;'; put '%superq(&var)'; put '%end;'; put '%mend mf_mval;'; put '%macro mf_trimstr(basestr,trimstr);'; put '%local baselen trimlen trimval;'; put '/* return if basestr is shorter than trimstr (or 0) */'; put '%let baselen=%length(%superq(basestr));'; put '%let trimlen=%length(%superq(trimstr));'; put '%if &baselen < &trimlen or &baselen=0 %then %return;'; put '/* obtain the characters from the end of basestr */'; put '%let trimval=%qsubstr(%superq(basestr)'; put ',%length(%superq(basestr))-&trimlen+1'; put ',&trimlen);'; put '/* compare and if matching, chop it off! */'; put '%if %superq(basestr)=%superq(trimstr) %then %do;'; put '%return;'; put '%end;'; put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; put '%end;'; put '%else %do;'; put '&basestr'; put '%end;'; put '%mend mf_trimstr;'; put '%macro mf_getplatform(switch'; put ')/*/STORE SOURCE*/;'; put '%local a b c;'; put '%if &switch.NONE=NONE %then %do;'; put '%if %symexist(sasjsprocessmode) %then %do;'; put '%if &sasjsprocessmode=Stored Program %then %do;'; put 'SASJS'; put '%return;'; put '%end;'; put '%end;'; put '%if %symexist(sysprocessmode) %then %do;'; put '%if "&sysprocessmode"="SAS Object Server"'; put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; put 'SASVIYA'; put '%end;'; put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; put 'or "&sysprocessmode"="SAS Workspace Server"'; put '%then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; put 'SASMETA'; put '%return;'; put '%end;'; put '%else %do;'; put 'BASESAS'; put '%return;'; put '%end;'; put '%end;'; put '%else %if &switch=SASSTUDIO %then %do;'; put '/* return the version of SAS Studio else 0 */'; put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; put '%let a=%mf_mval(_CLIENTVERSION);'; put '%let b=%scan(&a,1,.);'; put '%if %eval(&b >2) %then %do;'; put '&b'; put '%end;'; put '%else 0;'; put '%end;'; put '%else 0;'; put '%end;'; put '%else %if &switch=VIYARESTAPI %then %do;'; put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; put '%end;'; put '%mend mf_getplatform;'; put '%macro mpeterm();'; put '%local oldloc;'; put 'data _null_;'; put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');'; put 'else oldloc=getoption(''LOG'');'; put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));'; put 'call symputx(''oldloc'',oldloc,''l'');'; put 'run;'; put '%if %length(&oldloc)>0 %then %do;'; put 'proc printto log=log;'; put 'run;'; put 'data _null_;'; put 'infile &oldloc;'; put 'input; putlog _infile_;'; put 'run;'; put '%end;'; put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA'; put '%then %do;'; put 'data ;'; put 'if 0 then set &dc_libref..mpe_requests;'; put 'request_dttm=%sysfunc(datetime());'; put 'request_user="%mf_getuser()";'; put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";'; put 'request_params='''';'; put 'output;stop;'; put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;'; put 'run;'; put '%end;'; put '%mend mpeterm;'; put '* SAS Macros end;'; put '* SAS Includes start;'; put '* SAS Includes end;'; put '* Binary Files start;'; put '* Binary Files end;'; put '* ServiceInit start;'; put 'options noquotelenmax ps=max;'; put '/* create dummy macros to prevent stpbegin / stpend from corrupting sessions */'; put '%macro stpbegin();'; put '%put NOTE: the STPBEGIN macro should not be used for web apps!;'; put '%mend stpbegin;'; put '%macro stpend();'; put '%put NOTE: the STPEND macro should not be used for web apps!;'; put '%mend stpend;'; put '* ServiceInit end;'; put '* Service start;'; put '/**'; put '@file'; put '@brief Generic validator for editable libraries'; put '@details The input table is simply one row from the target table in table'; put 'called "work.source_row".'; put 'Available macro variables:'; put '@li MPELIB - The DC control library'; put '@li LIBDS - The library.dataset being filtered'; put '@li VARIABLE_NM - The column being filtered'; put '

Service Inputs

'; put '
work.source_row
'; put '|libref:$8|'; put '|somelib|'; put '

Service Outputs

'; put 'The values provided below are generic samples - we encourage you to replace'; put 'these with realistic values in your own deployments.'; put '
DYNAMIC_VALUES
'; put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not'; put 'provided, it is added automatically.'; put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|'; put '|---|---|---|'; put '|1|$77.43|77.43|'; put '|2|$88.43|88.43|'; put '
DYNAMIC_EXTENDED_VALUES
'; put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the'; put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to'; put 'populate dropdowns for _other_ cells in the _same_ row.'; put 'Should be used sparingly! The use of large tables here can slow down the'; put 'browser.'; put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|'; put '|---|---|---|---|---|---|'; put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|'; put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|'; put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|'; put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|'; put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|'; put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|'; put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|'; put '**/'; put '/* send back the raw and formatted values */'; put 'data _null_;'; put 'var=symget(''variable_nm'');'; put 'libds=symget(''libds'');'; put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;'; put 'call symputx(''srccol'',''XL_LIBREF'');'; put 'end;'; put 'else call symputx(''srccol'',''libref'');'; put 'run;'; put 'proc sql;'; put 'create table work.DYNAMIC_VALUES as'; put 'select distinct dsn as display_value,'; put 'upcase(dsn) as raw_value'; put 'from &mpelib..mpe_tables'; put '(where=(&dc_dttmtfmt. < tx_to))'; put 'where libref in (select &srccol from work.source_row)'; put 'order by 1;'; put '* Service end;'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9; %let service=index-html; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk''@;'; put 'put ''ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy''@;'; put 'put ''ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v''@;'; put 'put ''ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n''@;'; put 'put ''OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu''@;'; put 'put ''YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy''@;'; put 'put ''ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjU5ZGMxMTk0N2I4MzE0M2MuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0''@;'; put 'put ''aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv''@;'; put 'put ''Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh''@;'; put 'put ''Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4''@;'; put 'put ''dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1''@;'; put 'put ''ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv''@;'; put 'put ''biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmMzMTZhYzUxZDU5NjY3MTMuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxscy44N2RiYmQzZmFhYmVkNTEz''@;'; put 'put ''LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLjg5YTg5NDdhMDI2NmM0N2EuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLmYwNzk2N2E4YzViYWM0YjIuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PC9ib2R5Pgo8L2h0bWw+Cg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.f07967a8c5bac4b2-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1sxNzldLHs3NDA5MjpmdW5jdGlvbihhdCl7YXQuZXhwb3J0cz1mdW5jdGlvbihJZSl7dmFyIEY9e307ZnVuY3Rpb24gYWUoeCl7aWYoRlt4XSlyZXR1cm4g''@;'; put 'put ''Rlt4XS5leHBvcnRzO3ZhciBtPUZbeF09e2k6eCxsOiExLGV4cG9ydHM6e319O3JldHVybiBJZVt4XS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxhZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gYWUubT1JZSxhZS5jPUYsYWUuZD1mdW5jdGlvbih4LG0sbGUpe2FlLm8oeCxtKXx8T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHgsbSx7ZW51bWVyYWJsZTohMCxnZXQ6bGV9KX0sYWUucj1mdW5jdGlvbih4KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHgsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxhZS50PWZ1bmN0aW9uKHgsbSl7aWYoMSZtJiYoeD1hZSh4KSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgeCYmeCYmeC5fX2VzTW9kdWxlKXJldHVybiB4O3ZhciBsZT1PYmplY3QuY3JlYXRlKG51''@;'; put 'put ''bGwpO2lmKGFlLnIobGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eH0pLDImbSYmInN0cmluZyIhPXR5cGVvZiB4KWZvcih2YXIgTSBpbiB4KWFlLmQobGUsTSxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0uYmluZChudWxsLE0pKTty''@;'; put 'put ''ZXR1cm4gbGV9LGFlLm49ZnVuY3Rpb24oeCl7dmFyIG09eCYmeC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHguZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4geH07cmV0dXJuIGFlLmQobSwiYSIsbSksbX0sYWUubz1mdW5jdGlvbih4LG0pe3JldHVybiBPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoeCxtKX0sYWUucD0iIixhZShhZS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5k''@;'; put 'put ''ICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHg9YWUoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2pl''@;'; put 'put ''Y3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLG09e30sbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKCl7fXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTS5zaW5nbGVJbnN0YW5jZXx8''@;'; put 'put ''KE0uc2luZ2xlSW5zdGFuY2U9bmV3IE0pLE0uc2luZ2xlSW5zdGFuY2V9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksTS5wcm90b3R5cGUudmFsaWRhdGVOYW1lPWZ1bmN0aW9uKE8pe2lmKDA9PT1PLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMg''@;'; put 'put ''bXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7aWYoL1xzLy50ZXN0KE8pKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IG5vdCBjb250YWluIGFueSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMhIik7cmV0dXJuITB9LE0ucHJvdG90eXBlLm5vcm1hbGl6ZVNoYXBl''@;'; put 'put ''TmFtZT1mdW5jdGlvbihPKXtyZXR1cm4gTy50b0xvd2VyQ2FzZSgpfSxNLnByb3RvdHlwZS5zZXRJY29uVGVtcGxhdGU9ZnVuY3Rpb24oTyxSKXt2YXIgej1SLnRyaW0oKTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmKE89dGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoTyksbVtPXSYmZGVsZXRlIG1b''@;'; put 'put ''T10sbVtPXT16LHguU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLmVtaXRDaGFuZ2VzKE8seikpfSxNLnByb3RvdHlwZS5zZXRJY29uQWxpYXNlcz1mdW5jdGlvbihPLFIseil7Zm9yKHZhciBLPTAsST16O0s8SS5sZW5ndGg7SysrKXt2YXIgaz1JW0tdO3RoaXMudmFsaWRhdGVOYW1l''@;'; put 'put ''KGspJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoTyxrLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT1tSXX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihPKXtpZigib2JqZWN0IiE9dHlwZW9mIE8pdGhyb3cgbmV3IEVycm9yKCdUaGUg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiAic2hhcGUtdGVtcGxhdGUiIH0nKTtmb3IodmFyIFIgaW4gTylPLmhhc093blByb3BlcnR5KFIpJiZ0aGlzLnNl''@;'; put 'put ''dEljb25UZW1wbGF0ZShSLE9bUl0pfSxNLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oTyl7cmV0dXJuISFtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKE8pe2lmKCFPKXJldHVybiBtO2lmKCJzdHJpbmciIT10eXBlb2YgTyl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJPbmx5IHN0cmluZyBhcmd1bWVudCBpcyBhbGxvd2VkIGluIHRoaXMgbWV0aG9kLiIpO3JldHVybiBtW3RoaXMubm9ybWFsaXplU2hhcGVOYW1lKE8pXX0sTS5wcm90b3R5cGUuYWxpYXM9ZnVuY3Rpb24oTyl7aWYoIm9iamVjdCIhPXR5cGVvZiBPKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogWyJhbGlhcy1uYW1lIiwgLi4uXSB9Jyk7Zm9yKHZhciBSIGluIE8paWYoTy5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShSKSl7aWYoIW0uaGFzT3duUHJvcGVydHkoUikpdGhyb3cgbmV3IEVycm9yKCdBbiBpY29uICInK1IrIlwiIHlvdSBhcmUgdHJ5aW5nIHRvIHNldCBhbGlhc2VzIHRvIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIENsYXJpdHkgSWNvbnMgc2V0cyEiKTt0aGlzLnNldEljb25BbGlhc2VzKG0sUixP''@;'; put 'put ''W1JdKX19LE19KCk7Ri5DbGFyaXR5SWNvbnNBcGk9bGV9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2pl''@;'; put 'put ''Y3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09YWUoCi8q''@;'; put 'put ''ISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLGxlPTAsTT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7TS5jbGFzc05hbWU9ImlzLW9mZi1zY3JlZW4iO3ZhciBP''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIEhUTUxFbGVtZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZnVuY3Rpb24gUigpe3ZhciB6PU8uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB6LmNsckljb25VbmlxSWQ9Il9jbHJfaWNvbl8iK2xlLGxlKyssen0ib2JqZWN0Ij09dHlwZW9mIFJlZmxl''@;'; put 'put ''Y3QmJihPPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLEYuQ2xhcml0eUljb25FbGVtZW50PVIsUi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChSLnByb3RvdHlw''@;'; put 'put ''ZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpSfX0pKS5jb25zdHJ1Y3Rvcj1SLFIucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciB6PU0uY2xvbmVOb2Rl''@;'; put 'put ''KCExKTt6LmlkPXRoaXMuY2xySWNvblVuaXFJZCx6LnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKHopfSxSLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oeil7IU51bWJlcih6KXx8TnVtYmVyKHopPDA/KHRoaXMuc3R5bGUud2lk''@;'; put 'put ''dGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD16KyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9eisicHgiKX0sUi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKHope3JldHVybiB6LnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LFIu''@;'; put 'put ''cHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgi''@;'; put 'put ''c2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09SyYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPUssdGhpcy5fc2V0SWNvblNpemUoSykpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hh''@;'; put 'put ''cGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKGope3ouX2luamVjdFRlbXBsYXRlKGopfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIXguQ2xhcml0eUljb25z''@;'; put 'put ''QXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgaz14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihrPT09dGhpcy5jdXJyZW50''@;'; put 'put ''U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1rfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgRT10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1FJiYodGhpcy5jdXJyZW50VGl0bGVB''@;'; put 'put ''dHRyVmFsPUUpLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbih6LEssSSl7dmFyIGs9dGhpcztpZigic2l6ZSI9PT16JiZ0aGlzLl9zZXRJY29uU2l6ZShJ''@;'; put 'put ''KSwic2hhcGUiPT09eil7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oRSl7ay5faW5qZWN0VGVtcGxhdGUoRSl9KSksIXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwp''@;'; put 'put ''KXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT16JiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUks''@;'; put 'put ''IXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LFIucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxS''@;'; put 'put ''LnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO3o/eiYmei5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseisiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxSLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeil7eiYmeiE9PXRoaXMuY3VycmVudFNo''@;'; put 'put ''YXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXopLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0s''@;'; put 'put ''Ui5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXguQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRz''@;'; put 'put ''IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8q''@;'; put 'put ''ISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1hZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksbGU9YWUoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9p''@;'; put 'put ''Y29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksTT14LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZTtGLkNsYXJpdHlJY29ucz1NLE0uYWRkKGxlLkNvcmVTaGFwZXMpLHR5cGVvZiB3aW5kb3c8InUiJiYod2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKXx8KHdpbmRv''@;'; put 'put ''dy5DbGFyaXR5SWNvbnM9TSksY3VzdG9tRWxlbWVudHMuZ2V0KCJjbHItaWNvbiIpfHxjdXN0b21FbGVtZW50cy5kZWZpbmUoImNsci1pY29uIixtLkNsYXJpdHlJY29uRWxlbWVudCkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db3JlU2hhcGVzPUYuQ2xyU2hhcGVBcnJvdz1GLkNs''@;'; put 'put ''clNoYXBlU3RlcEZvcndhcmQyPUYuQ2xyU2hhcGVFeWVIaWRlPUYuQ2xyU2hhcGVFeWU9Ri5DbHJTaGFwZUV2ZW50PUYuQ2xyU2hhcGVDYWxlbmRhcj1GLkNsclNoYXBlQW5nbGVEb3VibGU9Ri5DbHJTaGFwZVZpZXdDb2x1bW5zPUYuQ2xyU2hhcGVTZWFyY2g9Ri5DbHJTaGFwZVZtQnVnPUYu''@;'; put 'put ''Q2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPUYuQ2xyU2hhcGVGaWx0ZXJHcmlkPUYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPUYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Ri5DbHJTaGFwZUNsb3VkPUYuQ2xyU2hhcGVJbWFnZT1GLkNsclNoYXBlQmVsbD1GLkNsclNoYXBlRm9sZGVy''@;'; put 'put ''T3Blbj1GLkNsclNoYXBlRm9sZGVyPUYuQ2xyU2hhcGVBbmdsZT1GLkNsclNoYXBlVXNlcj1GLkNsclNoYXBlQmFycz1GLkNsclNoYXBlSGVscEluZm89Ri5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1GLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1GLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPUYu''@;'; put 'put ''Q2xyU2hhcGVJbmZvU3RhbmRhcmQ9Ri5DbHJTaGFwZUluZm9DaXJjbGU9Ri5DbHJTaGFwZUNoZWNrQ2lyY2xlPUYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1GLkNsclNoYXBlVGltZXM9Ri5DbHJTaGFwZUNoZWNrPUYuQ2xyU2hhcGVD''@;'; put 'put ''b2c9Ri5DbHJTaGFwZUhvbWU9Ri5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2''@;'; put 'put ''Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVVbmtub3duU3RhdHVzPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4''@;'; put 'put ''PSIxNy41OCIgY3k9IjI2LjIzIiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0LjcsMTNhNS4xOCw1LjE4LDAsMCwwLTIuMTYtMy41Niw3LjI2LDcuMjYsMCwwLDAtNS43MS0xLjA5QTExLjM0''@;'; put 'put ''LDExLjM0LDAsMCwwLDEyLDEwLjQ0LDEsMSwwLDEsMCwxMy4yNiwxMmE5LjMyLDkuMzIsMCwwLDEsMy45NC0xLjcyLDUuMjksNS4yOSwwLDAsMSw0LjE2Ljc0LDMuMjEsMy4yMSwwLDAsMSwxLjM1LDIuMTljLjMzLDIuNjktMy4xOSwzLjc1LTUuMzIsNC4xNGwtLjgyLjE1djQuMzZhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYxOS4xN0MyNC42MSwxNy43OSwyNC44OCwxNC40MSwyNC43LDEzWiIvPicpLEYuQ2xyU2hhcGVIb21lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNzEsMTcuMjlsLTE1LTE1YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQxLDBsLTE1LDE1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTgsNC40MSwzMi4yOSwxOC43MWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMzJoLTVWMjJIMTNW''@;'; put 'put ''MzJIOFYxOEw2LDIwVjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NmwtMi0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywxOWExLDEsMCwwLDEtLjcxLS4yOUwxOCw0''@;'; put 'put ''LjQxLDMuNzEsMTguNzFhMSwxLDAsMCwxLTEuNDEtMS40MWwxNS0xNWExLDEsMCwwLDEsMS40MSwwbDE1LDE1QTEsMSwwLDAsMSwzMywxOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTgsNy43OSw2LDE5Ljgz''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJoN1YyNGg2VjM0aDdhMiwyLDAsMCwwLDItMlYxOS43NloiLz4nKSxGLkNsclNoYXBlQ29nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMSwxMWMtMy45LDAtNywzLjEtNyw3''@;'; put 'put ''czMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdTMjIsMTEsMTguMSwxMXogTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMi44LDAsNSwyLjIsNSw1UzIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjYtMS41bDEuNC0yLjZjMC4zLTAuNiwwLjItMS40LTAuMy0xLjlsLTIuNC0yLjRjLTAuNS0wLjUtMS4zLTAuNi0xLjktMC4zbC0yLjYsMS40bC0xLjUtMC42bC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRj''@;'; put 'put ''LTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwx''@;'; put 'put ''NS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4x''@;'; put 'put ''aDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwx''@;'; put 'put ''NS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6IE0zMiwxOS40bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0x''@;'; put 'put ''LjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmww''@;'; put 'put ''LjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjQsMC41LDIuMSwwLjlsMC41LDAuM2wzLjMtMS44bDIsMmwtMS44LDMuM2wwLjMsMC41YzAuNCwwLjcsMC43''@;'; put 'put ''LDEuNCwwLjksMi4xbDAuMSwwLjVsMy42LDEuMVYxOS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjEsMThjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN3Mt''@;'; put 'put ''My4xLTctNy03QzE0LjIsMTEsMTEuMSwxNC4xLDExLjEsMTh6IE0yMy4xLDE4YzAsMi44LTIuMiw1LTUsNWMtMi44LDAtNS0yLjItNS01czIuMi01LDUtNUMyMC45LDEzLDIzLjEsMTUuMiwyMy4xLDE4eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjgsMTQuN0wzMCwxMy44bC0wLjEtMC4zYy0wLjgsMC0xLjYtMC4yLTIuNC0wLjRjMC4zLDAuNiwwLjYsMS4zLDAuOCwxLjlsMC4xLDAuNWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwx''@;'; put 'put ''LjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEu''@;'; put 'put ''OC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAu''@;'; put 'put ''MkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS4zLDAuNSwxLjksMC44Yy0wLjMtMC44LTAuNC0xLjYtMC40LTIuNWwtMC40LTAuMmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z''@;'; put 'put ''LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs''@;'; put 'put ''MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy''@;'; put 'put ''LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy43LDE1LjRoLTUuM3YwLjFsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt''@;'; put 'put ''MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu''@;'; put 'put ''Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy40bDEuNC0yLjNsLTAuNi0yQzIxLDIuNCwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUt''@;'; put 'put ''MS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRj''@;'; put 'put ''MCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMt''@;'; put 'put ''MC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNiwzMy45LDE1LjcsMzMu''@;'; put 'put ''NywxNS40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMwLjIsMCwwLjUsMCwwLjcsMC4xYy0wLjItMC42LTAu''@;'; put 'put ''My0xLjMtMC4yLTJoLTAuNWMtMy45LDAtNywzLjEtNyw3YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdjMC0wLjktMC4yLTEuOC0wLjUtMi42aC0yLjJjMC41LDAuOCwwLjcsMS42LDAuNywyLjVDMjMuMSwyMC44LDIwLjksMjMsMTguMSwyM3oiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAu''@;'; put 'put ''NSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNTcs''@;'; put 'put ''MTUuNzJsLTMuMzUtMWExMS42NSwxMS42NSwwLDAsMC0uOTUtMi4zM2wxLjY0LTMuMDdhLjYxLjYxLDAsMCwwLS4xMS0uNzJMMjcuNDEsNi4yYS42MS42MSwwLDAsMC0uNzItLjExTDIzLjY0LDcuNzJhMTEuNjIsMTEuNjIsMCwwLDAtMi4zNi0xbC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5''@;'; put 'put ''LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEs''@;'; put 'put ''MCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0''@;'; put 'put ''bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYz''@;'; put 'put ''LDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTIuMTIsMTIuMTIsMCwwLDAtLjQ3LTEuMzIsNy40OSw3LjQ5LDAsMCwxLTYuMTQtNi4xNiwxMS44MiwxMS44MiwwLDAsMC0xLjMzLS40OGwtMS0zLjMxQS42''@;'; put 'put ''MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3''@;'; put 'put ''bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDEx''@;'; put 'put ''LjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcy''@;'; put 'put ''bC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMi41NywxNS43MiwzMS41LDE1LjRIMjIuODVBNS41LDUuNSwwLDEsMSwxOCwxMi41YTUuNTMsNS41MywwLDAsMSwuNjUsMEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwyLjA5LTMuNjItLjg2LTIuODNBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFh''@;'; put 'put ''LjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQz''@;'; put 'put ''LjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2Eu''@;'; put 'put ''NjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAs''@;'; put 'put ''MCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy''@;'; put 'put ''dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEzLjcyLDI3LjY5LDMuMjksMTcuMjdhMSwxLDAsMCwxLDEuNDEtMS40MWw5LDlMMzEuMjksNy4yOWExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicpLEYuQ2xyU2hhcGVUaW1lcz0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjQxLDE4bDguMjktOC4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDkuNzEsOC4yOUExLDEsMCwwLDAsOC4yOSw5LjcxTDE2LjU5LDE4LDguMjksMjYuMjlhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxOCwxOS40MWw4LjI5LDguMjlhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxLjMyYTEu''@;'; put 'put ''MywxLjMsMCwwLDAsMS4zLTEuM1YxNGExLjMsMS4zLDAsMSwwLTIuNiwwdjZBMS4zLDEuMywwLDAsMCwxOCwyMS4zMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0i''@;'; put 'put ''MS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0''@;'; put 'put ''LTQuNDNabS0xLjc4LDEuOTRhMSwxLDAsMCwxLS44Ni40OUg4LjIxYTEsMSwwLDAsMS0uODgtMS40OEwxNy4wNyw4LjU1YTEsMSwwLDAsMSwxLjc2LDBsOS43NCwxNy45NEExLDEsMCwwLDEsMjguNTUsMjcuNDhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1pNMTYuNDYsMTIuNzRhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40''@;'; put 'put ''OSwwLDEsMS0zLDBaTTE4LDI2LjI1YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI2LjI1WiIvPicpLEYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZBMS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTcuOTUi''@;'; put 'put ''IGN5PSIyMy4wMiIgcj0iMS41Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTEuNDksNmExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40''@;'; put 'put ''OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjUuNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNS41WiIvPicpLEYuQ2xyU2hhcGVDaGVja0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE2LjM0LDIzLjc0bC01LTVhMSwxLDAsMCwxLDEuNDEtMS40MWwzLjU5LDMuNTksNi43OC02Ljc4YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDE4QTEyLDEyLDAsMSwx''@;'; put 'put ''LDE4LDYsMTIsMTIsMCwwLDEsMzAsMThabS00Ljc3LTIuMTZhMS40LDEuNCwwLDAsMC0yLTJsLTYuNzcsNi43N0wxMywxNy4xNmExLjQsMS40LDAsMCwwLTIsMmw1LjQ1LDUuNDVaIi8+JyksRi5DbHJTaGFwZUluZm9DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgIGN4PSIxNy45MyIgY3k9IjExLjkiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAgZD0iTTIxLDIzSDE5VjE1SDE2YTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''MXY2SDE1YTEsMSwwLDEsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCww''@;'; put 'put ''LDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwy''@;'; put 'put ''LDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPicpLEYuQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3Ljk3IiBjeT0iMTAuNDUiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjEsMjVIMTlWMTQuMUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDFWMjVIMTVhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwx''@;'; put 'put ''NCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEt''@;'; put 'put ''MiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwxLDAsMi44WiIvPicpLEYuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9KDAsbS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEsMCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUuNzgsNS43OEwyNi40NywxMC42NWEx''@;'; put 'put ''LjQsMS40LDAsMSwxLDIsMloiLz4nKSxGLkNsclNoYXBlRXJyb3JTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCwyLjFhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWk0xNi42LDguOGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI4LjZhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjguNloiLz4n''@;'; put 'put ''KSxGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''ZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0''@;'; put 'put ''LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMxLjc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIu''@;'; put 'put ''ODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYgTDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2''@;'; put 'put ''NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAz''@;'; put 'put ''Mi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQx''@;'; put 'put ''OSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2''@;'; put 'put ''MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+JyksRi5DbHJTaGFwZUhlbHBJbmZvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4zOSwyNS40NWExLDEsMCwwLDAtMS4zOC4yOWMtMS40''@;'; put 'put ''MSwyLjE2LTQsNC44MS02LjMxLDUuN3MtNC4xMi41Ny00Ljg0LDBjLS4zMS0uMjctMS4xMi0xLS40My0zLjQ5LjQ2LTEuNjYsMy4zMi05LjQ4LDQtMTEuMzhsLTIuMTguMjhjLS42OSwxLjg2LTMuMjksOC44NC0zLjc2LDEwLjU4LS42OCwyLjQ5LS4zNCw0LjMsMS4wOSw1LjU2QTUuNTksNS41''@;'; put 'put ''OSwwLDAsMCwxNSwzNGE5LjUzLDkuNTMsMCwwLDAsMy40NS0uN2MyLjc5LTEuMDksNS43Mi00LjEyLDcuMjYtNi40N0ExLDEsMCwwLDAsMjUuMzksMjUuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4z''@;'; put 'put ''LDExYTQuNSw0LjUsMCwxLDAtNC41LTQuNUE0LjUsNC41LDAsMCwwLDE5LjMsMTFabTAtN2EyLjUsMi41LDAsMSwxLTIuNSwyLjVBMi41LDIuNSwwLDAsMSwxOS4zLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMS44MSwxNWMuMDYsMCw2LjI3LS44Miw3LjczLTEsLjY1LS4xLDEuMTQsMCwxLjMuMTVzLjIxLjgtLjA3LDEuNjhjLS42MSwxLjg2LTMuNjksMTEtNC41OSwxMy43MWE4LDgsMCwwLDAsMS4yOS0uMzgsNy4zMiw3LjMyLDAsMCwwLDEuMTUtLjZDMTkuODUsMjUsMjIuMTUsMTguMSwyMi42''@;'; put 'put ''NywxNi41MnMuMzktMi43OC0uMy0zLjZhMy4xNiwzLjE2LDAsMCwwLTMuMDgtLjgzYy0xLjQzLjE1LTcuNDcuOTQtNy43MywxYTEsMSwwLDAsMCwuMjYsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjAu''@;'; put 'put ''NzUiIGN5PSI2IiByPSI0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljg0LDI2LjIzYTEsMSwwLDAsMC0xLjQuMjksMTYuNiwxNi42LDAsMCwxLTMuNTEsMy43N2MtLjMzLjI1LTEuNTYsMS4yLTIuMDgsMS0uMzYt''@;'; put 'put ''LjExLS4xNS0uODItLjA4LTEuMTJsLjUzLTEuNTdjLjIyLS42NCw0LjA1LTEyLDQuNDctMTMuMy42Mi0xLjkuMzUtMy43Ny0yLjQ4LTMuMzItLjc3LjA4LTguNTgsMS4wOS04LjcyLDEuMWExLDEsMCwwLDAsLjEzLDJzMy0uMzksMy4zMy0uNDJhLjg4Ljg4LDAsMCwxLC44NS40NCwyLjQ3LDIu''@;'; put 'put ''NDcsMCwwLDEtLjA3LDEuNzFjLS4yNiwxLTQuMzcsMTIuNTgtNC41LDEzLjI1YTIuNzgsMi43OCwwLDAsMCwxLjE4LDMsNSw1LDAsMCwwLDMuMDguODNoMGE4LjUzLDguNTMsMCwwLDAsMy4wOS0uNjJjMi40OS0xLDUuMDktMy42Niw2LjQ2LTUuNzVBMSwxLDAsMCwwLDI0Ljg0LDI2LjIzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDI5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEs''@;'; put 'put ''MCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zMiw5SDRBMSwxLDAsMCwxLDQsN0gzMmExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVVc2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwxLDAtNy03QTcsNywwLDAsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEt''@;'; put 'put ''NSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3''@;'; put 'put ''YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMjAsMTQuNmE1LDUsMCwxLDEsMS4yNC04LjQybDEtMS43NkE3LDcsMCwxLDAsMTgs''@;'; put 'put ''MTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs''@;'; put 'put ''MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4x''@;'; put 'put ''NiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYx''@;'; put 'put ''LDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTAiIHI9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEs''@;'; put 'put ''MjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNC40NS0xLjZoLS4yMkEzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLjE2LTUuNDdBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4x''@;'; put 'put ''NFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41''@;'; put 'put ''LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs''@;'; put 'put ''NywwLDAsMCw2Ljg1LTUuNTYsNy40LDcuNCwwLDAsMS0yLjI0LTYuNjlBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS41MiwyMi41''@;'; put 'put ''MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPicpLEYuQ2xyU2hhcGVGb2xkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIu''@;'; put 'put ''NjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTFhNy41LDcuNSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMCwxNS40VjI5SDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVpNNiwxMVY3aDYuNDlsMi43Miw0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks''@;'; put 'put ''NUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjMuMTMsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMu''@;'; put 'put ''MjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''JyksRi5DbHJTaGFwZUZvbGRlck9wZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41Miwx''@;'; put 'put ''LDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCww''@;'; put 'put ''LDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFpNMjkuNTUsMjlINi45''@;'; put 'put ''bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRIMzMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRoLS4zTDI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0aDkuNDJBMy42NywzLjY3LDAsMCwx''@;'; put 'put ''LDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40Mkwx''@;'; put 'put ''NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIu''@;'; put 'put ''NTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1''@;'; put 'put ''LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40''@;'; put 'put ''SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwx''@;'; put 'put ''OSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCww''@;'; put 'put ''LDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcx''@;'; put 'put ''LDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4zMS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy''@;'; put 'put ''LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmVsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjUxLDI3Ljgz''@;'; put 'put ''QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYz''@;'; put 'put ''LDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaTTUuMTMsMjguOTRhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0''@;'; put 'put ''LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNWE4Ljc0LDguNzQsMCwxLDEsMTcuNDcsMHY0Ljk0YTE0LjI0LDE0LjI0LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5LDcuNDQsNy40NCwwLDAsMS0yLjI0LS44NCw4Ljg5LDguODksMCwwLDEsLjQsMi42NHY0Ljk0YTE0LjI0LDE0LjI0''@;'; put 'put ''LDAsMCwwLDEuNjUsNS44NSwxNi4xNywxNi4xNywwLDAsMCwyLjQ0LDNINS4xM2ExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1QTguOCw4LjgsMCwwLDEsMTgsNi4zMWE4LjYxLDguNjEsMCwwLDEsNC43NiwxLjQ0QTcuNDksNy40OSww''@;'; put 'put ''LDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTgsMTAuNTgsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwx''@;'; put 'put ''LTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWEx''@;'; put 'put ''Mi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40''@;'; put 'put ''LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTUuMzIsMzJhMi42NSwyLjY1LDAsMCwwLDUuMjUsMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1YTEwLjkyLDEwLjkyLDAsMCwwLS4xNi0xLjc5QTcuNSw3LjUsMCwwLDEs''@;'; put 'put ''MjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU3LDEwLjU3LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3''@;'; put 'put ''LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVJbWFnZT0oMCxt''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUt''@;'; put 'put ''OC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCww''@;'; put 'put ''LDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgz''@;'; put 'put ''MmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwx''@;'; put 'put ''LjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''LjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSww''@;'; put 'put ''TDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzM0gxMC42MkM1LjY3LDMzLDEsMjguMTksMSwyMy4xYTEwLDEwLDAsMCwxLDgtOS43NSwxMC4x''@;'; put 'put ''OSwxMC4xOSwwLDAsMSwyMC4zMywxLjA2QTEwLjA3LDEwLjA3LDAsMCwxLDI5LDE2LjY2YTguMjksOC4yOSwwLDAsMSw2LDhDMzUsMjkuMSwzMS4zMywzMywyNy4xNCwzM1pNMTkuMDksNi4yM2E4LjI0LDguMjQsMCwwLDAtOC4xOSw4bDAsLjg3LS44Ni4xQTcuOTQsNy45NCwwLDAsMCwzLDIz''@;'; put 'put ''LjFjMCw0LDMuNzcsNy45LDcuNjIsNy45SDI3LjE0QzMwLjIxLDMxLDMzLDI4LDMzLDI0LjY1YTYuMzEsNi4zMSwwLDAsMC01LjM3LTYuMjZsLTEuMTgtLjE4LjM5LTEuMTNBOC4xOCw4LjE4LDAsMCwwLDE5LjA5LDYuMjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDUsNy40NSwwLDAsMS0yLjEtLjU0LDgsOCwwLDAsMS0uMyw0LjE2bC0uMzksMS4xMywxLjE4LjE4YTYu''@;'; put 'put ''MzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdhOC4yNCw4LjI0LDAsMCwxLDguMTktOEE4LjEzLDguMTMsMCwwLDEsMjIuNTgs''@;'; put 'put ''N2E3LjUzLDcuNTMsMCwwLDEtLjA4LTEsNy41MSw3LjUxLDAsMCwxLC4wOS0xLjEyQTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2''@;'; put 'put ''LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNCwxMC4xNCwwLDAsMCwuMi0xLjNoLTJhOC4yOCw4LjI4LDAsMCwxLS4zNywxLjcybC0uMzksMS4xMywxLjE4LjE4''@;'; put 'put ''YTYuMzEsNi4zMSwwLDAsMSw1LjM3LDYuMjZDMzIuOTUsMjgsMzAuMTYsMzEsMjcuMDksMzFIMTAuNTdjLTMuODQsMC03LjYyLTMuOTEtNy42Mi03LjlhNy45NCw3Ljk0LDAsMCwxLDctNy44OWwuODYtLjEsMC0uODdBOC4xNiw4LjE2LDAsMCwxLDIxLDYuNDdsMS0xLjhBMTAuMTksMTAuMTks''@;'; put 'put ''MCwwLDAsOC45MSwxMy4zNmExMCwxMCwwLDAsMC04LDkuNzVjMCw1LjA5LDQuNjcsOS45LDkuNjIsOS45SDI3LjA5YzQuMTksMCw3Ljg2LTMuOSw3Ljg2LTguMzVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1''@;'; put 'put ''LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjgu''@;'; put 'put ''MTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5''@;'; put 'put ''LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ0LDcuNDQsMCwwLDEtNi42LTguNThBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMs''@;'; put 'put ''MTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNi42NmExMC4xNSwxMC4xNSwwLDAsMCwuMi0xLjI2aC03QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5''@;'; put 'put ''bDMtNS4yMUExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCww''@;'; put 'put ''LDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjha''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSww''@;'; put 'put ''LDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLEYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCww''@;'; put 'put ''LTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCww''@;'; put 'put ''LDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0''@;'; put 'put ''LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVs''@;'; put 'put ''My45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlVm1CdWc9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiByeD0iMyIg''@;'; put 'put ''ZmlsbD0iI2ZmZmZmZiIgb3BhY2l0eT0iMC4xNSIgc3R5bGU9Imlzb2xhdGlvbjppc29sYXRlIi8+PHBhdGggZD0iTTMuNzksMTQuODNhMS4wOSwxLjA5LDAsMCwwLTEuNDctLjU2LDEuMDksMS4wOSwwLDAsMC0uNTQsMS40OWwyLjQ3LDUuNGMuMzkuODUuOCwxLjI5LDEuNTcsMS4yOVM3LDIy''@;'; put 'put ''LDcuMzksMjEuMTZsMi4xNy00Ljc3YS4zMy4zMywwLDAsMSwuMzEtLjIuMzUuMzUsMCwwLDEsLjM1LjM1djQuNjFhMS4xNSwxLjE1LDAsMCwwLDEuMTQsMS4zLDEuMTcsMS4xNywwLDAsMCwxLjE3LTEuM1YxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEu''@;'; put 'put ''MTgsMS4ydjMuNzdhMS4xNywxLjE3LDAsMSwwLDIuMzIsMFYxNy4zOGExLjE1LDEuMTUsMCwwLDEsMS4yMi0xLjIsMS4xMywxLjEzLDAsMCwxLDEuMTgsMS4ydjMuNzdhMS4xNiwxLjE2LDAsMSwwLDIuMzEsMFYxNi44NmEyLjY5LDIuNjksMCwwLDAtMi43OC0yLjY5LDMuNTcsMy41NywwLDAs''@;'; put 'put ''MC0yLjQ3LDEuMDUsMi43NSwyLjc1LDAsMCwwLTIuMzgtMS4wNUEzLjkzLDMuOTMsMCwwLDAsMTIsMTUuMjJhMi44MiwyLjgyLDAsMCwwLTIuMDgtMS4wNUEyLjU1LDIuNTUsMCwwLDAsNy40LDE1Ljg5TDUuODIsMTkuNjNsLTItNC44IiBmaWxsPSIjZmZmZmZmIi8+PHBhdGggZD0iTTMzLDE0''@;'; put 'put ''LjE4QTEuMTQsMS4xNCwwLDAsMCwzMS45LDE1bC0xLjE5LDMuNzNMMjkuNSwxNS4wNWExLjE4LDEuMTgsMCwwLDAtMS4xNS0uODdoLS4xYTEuMiwxLjIsMCwwLDAtMS4xNS44N2wtMS4xOSwzLjcxLTEuMTgtMy43MWExLjE1LDEuMTUsMCwwLDAtMS4xMS0uODcsMS4wOCwxLjA4LDAsMCwwLTEu''@;'; put 'put ''MTIsMS4wNywxLjY4LDEuNjgsMCwwLDAsLjEuNTRsMiw1LjdhMS4yNywxLjI3LDAsMCwwLDEuMjcsMSwxLjI0LDEuMjQsMCwwLDAsMS4yLS45M2wxLjItMy42NCwxLjIsMy42NGExLjI1LDEuMjUsMCwwLDAsMS4yNi45M0ExLjI3LDEuMjcsMCwwLDAsMzIsMjEuNUwzNCwxNS43M2ExLjc3LDEu''@;'; put 'put ''NzcsMCwwLDAsLjA4LS40OEExLjA3LDEuMDcsMCwwLDAsMzMsMTQuMThaIiBmaWxsPSIjZmZmZmZmIi8+JyksRi5DbHJTaGFwZVNlYXJjaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjMzLDUuMDVBMTAu''@;'; put 'put ''OTUsMTAuOTUsMCwxLDEsNS4zOSwxNiwxMSwxMSwwLDAsMSwxNi4zMyw1LjA1bTAtMi4wNWExMywxMywwLDEsMCwxMywxMywxMywxMywwLDAsMC0xMy0xM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTM1''@;'; put 'put ''LDMzLjI5bC03LjM3LTcuNDItMS40MiwxLjQxLDcuMzcsNy40MkExLDEsMCwxLDAsMzUsMzMuMjlaIi8+JyksRi5DbHJTaGFwZVZpZXdDb2x1bW5zPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsNUg1QTIs''@;'; put 'put ''MiwwLDAsMCwzLDdWMjlhMiwyLDAsMCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nKSxGLkNsclNoYXBlQW5nbGVEb3VibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOSwxOS40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCw4LjgzLDcuNzEsMTkuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCw2LDI5LjcxLDE3LjcxQTEsMSwwLDAsMSwyOSwxOS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+JyksRi5DbHJTaGFwZUNhbGVuZGFyPSgw''@;'; put 'put ''LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjIwIiB5''@;'; put 'put ''PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC05IiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIHg9IjIwIiB5''@;'; put 'put ''PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiBk''@;'; put 'put ''PSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgy''@;'; put 'put ''OC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI4IiB5PSIxNCIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1i''@;'; put 'put ''YWRnZWQiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTki''@;'; put 'put ''IHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEyLS1iYWRnZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iMTQi''@;'; put 'put ''IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgeD0iMjYiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xMC0tYWxlcnRlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9seWdvbiBw''@;'; put 'put ''b2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z''@;'; put 'put ''Mi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2''@;'; put 'put ''VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41''@;'; put 'put ''LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTEwLDI2''@;'; put 'put ''SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0wLTVIMjZWMTloMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLEYuQ2xyU2hhcGVFdmVudD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywy''@;'; put 'put ''M2w4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5''@;'; put 'put ''QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xMCwxMGEx''@;'; put 'put ''LDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs''@;'; put 'put ''MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEs''@;'; put 'put ''MzIsMTMuMjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0i''@;'; put 'put ''TTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu''@;'; put 'put ''NEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjI1LDZoLTRWOWEy''@;'; put 'put ''LjIsMi4yLDAsMCwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZa''@;'; put 'put ''TTI1Ljk0LDE2LjU4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDI2LjNhMS4zNCwxLjM0LDAsMCwxLS4zNiwxLjE4bC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4LDctN2gtMUEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo''@;'; put 'put ''LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4''@;'; put 'put ''LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wm0tNC4wNiwzLjA4LTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUV5ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y''@;'; put 'put ''My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44''@;'; put 'put ''LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4''@;'; put 'put ''LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwxLDE4LjA5LDIyLjg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42Miwx''@;'; put 'put ''Ny41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjks''@;'; put 'put ''OC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0i''@;'; put 'put ''Ni44NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVFeWVIaWRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43''@;'; put 'put ''OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwuNzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40Miwx''@;'; put 'put ''LjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAsMCwxLDE0LjYy''@;'; put 'put ''LDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4''@;'; put 'put ''LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5''@;'; put 'put ''LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSww''@;'; put 'put ''LDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTcuMDgsNi41MmExLjY4LDEuNjgsMCwwLDAsMCwyLjRMMTYuNTEsMTgsNy4xMiwyNy4wOGExLjcsMS43LDAsMCwwLDIuMzYsMi40NGgwTDIxLjQsMTgsOS40OCw2LjQ3QTEuNjksMS42OSwwLDAsMCw3LjA4LDYuNTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz48cGF0aCBkPSJNMjYuNDksNWExLjcsMS43LDAsMCwwLTEuNywxLjdWMjkuM2ExLjcsMS43LDAsMCwwLDMuNCwwVjYuN0ExLjcsMS43LDAsMCwwLDI2LjQ5LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQXJyb3c9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LjY2LDE1LjYxLDE4LDYsOC4zNCwxNS42MUExLDEsMCwxLDAsOS43NSwxN0wxNyw5LjgxVjI4Ljk0YTEsMSwwLDEsMCwyLDBWOS44MUwyNi4yNSwxN2ExLDEsMCwwLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz4nKSxGLkNvcmVTaGFwZXM9eyJ1bmtub3duLXN0YXR1cyI6Ri5DbHJTaGFwZVVua25vd25TdGF0dXMsaG9tZTpGLkNsclNoYXBlSG9tZSxjb2c6Ri5DbHJTaGFwZUNvZyxjaGVjazpGLkNsclNoYXBlQ2hlY2ssdGltZXM6Ri5DbHJTaGFwZVRpbWVzLCJleGNsYW1hdGlv''@;'; put 'put ''bi10cmlhbmdsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGUsImV4Y2xhbWF0aW9uLWNpcmNsZSI6Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlLCJjaGVjay1jaXJjbGUiOkYuQ2xyU2hhcGVDaGVja0NpcmNsZSwiaW5mby1jaXJjbGUiOkYuQ2xyU2hhcGVJbmZvQ2lyY2xlLCJp''@;'; put 'put ''bmZvLXN0YW5kYXJkIjpGLkNsclNoYXBlSW5mb1N0YW5kYXJkLCJzdWNjZXNzLXN0YW5kYXJkIjpGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkLCJlcnJvci1zdGFuZGFyZCI6Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQsIndhcm5pbmctc3RhbmRhcmQiOkYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRh''@;'; put 'put ''cmQsImhlbHAtaW5mbyI6Ri5DbHJTaGFwZUhlbHBJbmZvLGJhcnM6Ri5DbHJTaGFwZUJhcnMsdXNlcjpGLkNsclNoYXBlVXNlcixhbmdsZTpGLkNsclNoYXBlQW5nbGUsZm9sZGVyOkYuQ2xyU2hhcGVGb2xkZXIsImZvbGRlci1vcGVuIjpGLkNsclNoYXBlRm9sZGVyT3BlbixiZWxsOkYuQ2xy''@;'; put 'put ''U2hhcGVCZWxsLGltYWdlOkYuQ2xyU2hhcGVJbWFnZSxjbG91ZDpGLkNsclNoYXBlQ2xvdWQsImVsbGlwc2lzLWhvcml6b250YWwiOkYuQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWwsImVsbGlwc2lzLXZlcnRpY2FsIjpGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbCwiZmlsdGVyLWdyaWQi''@;'; put 'put ''OkYuQ2xyU2hhcGVGaWx0ZXJHcmlkLCJmaWx0ZXItZ3JpZC1jaXJjbGUiOkYuQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlLCJ2bS1idWciOkYuQ2xyU2hhcGVWbUJ1ZyxzZWFyY2g6Ri5DbHJTaGFwZVNlYXJjaCwidmlldy1jb2x1bW5zIjpGLkNsclNoYXBlVmlld0NvbHVtbnMsImFuZ2xlLWRv''@;'; put 'put ''dWJsZSI6Ri5DbHJTaGFwZUFuZ2xlRG91YmxlLGNhbGVuZGFyOkYuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpGLkNsclNoYXBlRXZlbnQsZXllOkYuQ2xyU2hhcGVFeWUsImV5ZS1oaWRlIjpGLkNsclNoYXBlRXllSGlkZSwic3RlcC1mb3J3YXJkLTIiOkYuQ2xyU2hhcGVTdGVwRm9yd2FyZDIs''@;'; put 'put ''YXJyb3c6Ri5DbHJTaGFwZUFycm93fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJob3VzZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuaG9tZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsInNldHRpbmdzIiwoMCx4LmRlc2Ny''@;'; put 'put ''aXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jb2cpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzdWNjZXNzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5jaGVjaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNsb3NlIiwo''@;'; put 'put ''MCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy50aW1lcykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIndhcm5pbmciLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi10cmlhbmdsZSJdKSksT2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KEYuQ29yZVNoYXBlcywiZXJyb3IiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJleGNsYW1hdGlvbi1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImluZm8iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVz''@;'; put 'put ''WyJpbmZvLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibWVudSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmFycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImF2YXRhciIsKDAseC5kZXNjcmlwdG9yQ29u''@;'; put 'put ''ZmlnKShGLkNvcmVTaGFwZXMudXNlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNhcmV0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5hbmdsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImRpcmVjdG9yeSIsKDAseC5k''@;'; put 'put ''ZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuZm9sZGVyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBlcywibm90aWZpY2F0aW9uIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlcy5iZWxsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ29yZVNoYXBl''@;'; put 'put ''cywiY29sbGFwc2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzWyJhbmdsZS1kb3VibGUiXSkpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''Ki8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlv''@;'; put 'put ''biB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPUYuY2hh''@;'; put 'put ''bmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsRi5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbSgpe3RoaXMuY2FsbGJhY2tzPUYuY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImluc3RhbmNl''@;'; put 'put ''Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uc2luZ2xlSW5zdGFuY2V8fChtLnNpbmdsZUluc3RhbmNlPW5ldyBtKSxtLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG0ucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRo''@;'; put 'put ''aXM7cmV0dXJuIHRoaXMuY2FsbGJhY2tzW2xlXT8tMT09PXRoaXMuY2FsbGJhY2tzW2xlXS5pbmRleE9mKE0pJiZ0aGlzLmNhbGxiYWNrc1tsZV0ucHVzaChNKTp0aGlzLmNhbGxiYWNrc1tsZV09W01dLGZ1bmN0aW9uKCl7dmFyIFI9Ty5jYWxsYmFja3NbbGVdLmluZGV4T2YoTSk7Ty5jYWxs''@;'; put 'put ''YmFja3NbbGVdLnNwbGljZShSLDEpLDA9PT1PLmNhbGxiYWNrc1tsZV0ubGVuZ3RoJiZkZWxldGUgTy5jYWxsYmFja3NbbGVdfX0sbS5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24obGUsTSl7dGhpcy5jYWxsYmFja3NbbGVdJiZ0aGlzLmNhbGxiYWNrc1tsZV0ubWFwKGZ1bmN0aW9u''@;'; put 'put ''KE8pe08oTSl9KX0sbX0oKTtGLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj14fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAg''@;'; put 'put ''ICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmNsckljb25TVkc9dm9pZCAwO0YuY2xySWNvblNWRz1mdW5jdGlvbiBNKE8pe3ZhciBSPSIiO3JldHVybiBPLmluZGV4T2YoIi0t''@;'; put 'put ''YmFkZ2VkIik+LTEmJihSKz0iY2FuLWJhZGdlICIpLE8uaW5kZXhPZigiLS1hbGVydGVkIik+LTEmJihSKz0iY2FuLWFsZXJ0ICIpLE8uaW5kZXhPZigiY2xyLWktc29saWQiKT4tMSYmKFIrPSJoYXMtc29saWQgIiksKFI/JzxzdmcgdmVyc2lvbj0iMS4xIiBjbGFzcz0iJytSKyciIHZpZXdC''@;'; put 'put ''b3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6''@;'; put 'put ''JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNh''@;'; put 'put ''YmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStPKyI8L3N2Zz4ifX19KX0sMzQyMDk6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUpe3ZhciBGPXt9O2Z1bmN0aW9uIGFlKHgpe2lmKEZbeF0pcmV0dXJuIEZbeF0uZXhwb3J0czt2YXIgbT1GW3hdPXtpOngsbDohMSxleHBvcnRz''@;'; put 'put ''Ont9fTtyZXR1cm4gSWVbeF0uY2FsbChtLmV4cG9ydHMsbSxtLmV4cG9ydHMsYWUpLG0ubD0hMCxtLmV4cG9ydHN9cmV0dXJuIGFlLm09SWUsYWUuYz1GLGFlLmQ9ZnVuY3Rpb24oeCxtLGxlKXthZS5vKHgsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LG0se2VudW1lcmFibGU6ITAsZ2V0''@;'; put 'put ''OmxlfSl9LGFlLnI9ZnVuY3Rpb24oeCl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHgsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh4LCJfX2VzTW9kdWxlIix7dmFs''@;'; put 'put ''dWU6ITB9KX0sYWUudD1mdW5jdGlvbih4LG0pe2lmKDEmbSYmKHg9YWUoeCkpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIHgmJngmJnguX19lc01vZHVsZSlyZXR1cm4geDt2YXIgbGU9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhZS5yKGxlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUs''@;'; put 'put ''ImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOnh9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgeClmb3IodmFyIE0gaW4geClhZS5kKGxlLE0sZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119LmJpbmQobnVsbCxNKSk7cmV0dXJuIGxlfSxhZS5uPWZ1bmN0aW9uKHgpe3ZhciBtPXgmJnguX19l''@;'; put 'put ''c01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB4LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHh9O3JldHVybiBhZS5kKG0sImEiLG0pLG19LGFlLm89ZnVuY3Rpb24oeCxtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsbSl9LGFlLnA9IiIsYWUoYWUu''@;'; put 'put ''cz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAg''@;'; put 'put ''ICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJ''@;'; put 'put ''ZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQWxsU2hhcGVzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz''@;'; put 'put ''IiksbT1hZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxNPWFlKAov''@;'; put 'put ''KiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLE89YWUoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLFI9YWUoCi8qISAuL3Nv''@;'; put 'put ''Y2lhbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIiksej1hZSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLEs9YWUoCi8qISAuL3RleHQt''@;'; put 'put ''ZWRpdC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksST1hZSgKLyohIC4vdHJhdmVsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiKSxrPVtsZS5Db3JlU2hhcGVzLG0uQ29t''@;'; put 'put ''bWVyY2VTaGFwZXMsTS5Fc3NlbnRpYWxTaGFwZXMsTy5NZWRpYVNoYXBlcyxSLlNvY2lhbFNoYXBlcyx6LlRlY2hub2xvZ3lTaGFwZXMsSS5UcmF2ZWxTaGFwZXMseC5DaGFydFNoYXBlcyxLLlRleHRFZGl0U2hhcGVzXSxFPXt9O0YuQWxsU2hhcGVzPUU7Zm9yKHZhciBqPTAsVj1rO2o8Vi5s''@;'; put 'put ''ZW5ndGg7aisrKXt2YXIgQj1WW2pdO2Zvcih2YXIgWSBpbiBCKUIuaGFzT3duUHJvcGVydHkoWSkmJihFW1ldPUJbWV0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChFKX0sIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoq''@;'; put 'put ''KiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNoYXJ0U2hhcGVzPUYuQ2xyU2hhcGVCZWxsQ3VydmU9Ri5DbHJTaGFwZVRpY2tDaGFydD1GLkNsclNoYXBlU2NhdHRlclBsb3Q9Ri5DbHJTaGFwZVBpZUNoYXJ0PUYuQ2xyU2hhcGVMaW5lQ2hhcnQ9Ri5DbHJTaGFwZUhlYXRNYXA9Ri5DbHJTaGFwZUdy''@;'; put 'put ''aWRDaGFydD1GLkNsclNoYXBlQ3VydmVDaGFydD1GLkNsclNoYXBlQ2xvdWRDaGFydD1GLkNsclNoYXBlQnViYmxlQ2hhcnQ9Ri5DbHJTaGFwZUJveFBsb3Q9Ri5DbHJTaGFwZUJhckNoYXJ0PUYuQ2xyU2hhcGVBeGlzQ2hhcnQ9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hh''@;'; put 'put ''cGVBeGlzQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMz''@;'; put 'put ''LjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3''@;'; put 'put ''LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1''@;'; put 'put ''IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0''@;'; put 'put ''LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4y''@;'; put 'put ''MiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBM''@;'; put 'put ''IDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAw''@;'; put 'put ''NyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkg''@;'; put 'put ''MTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1''@;'; put 'put ''IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjgu''@;'; put 'put ''MyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMx''@;'; put 'put ''IDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg''@;'; put 'put ''TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2''@;'; put 'put ''IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43''@;'; put 'put ''OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4''@;'; put 'put ''LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwg''@;'; put 'put ''MzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLEYu''@;'; put 'put ''Q2xyU2hhcGVCYXJDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpN''@;'; put 'put ''NCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8''@;'; put 'put ''cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2''@;'; put 'put ''IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcg''@;'; put 'put ''MTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYg''@;'; put 'put ''MjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUg''@;'; put 'put ''MjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3''@;'; put 'put ''IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2''@;'; put 'put ''IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBM''@;'; put 'put ''IDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAy''@;'; put 'put ''NiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAy''@;'; put 'put ''MyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy''@;'; put 'put ''Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu''@;'; put 'put ''ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3''@;'; put 'put ''LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYg''@;'; put 'put ''TCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIu''@;'; put 'put ''OTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQg''@;'; put 'put ''TCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxGLkNsclNoYXBlQm94UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40''@;'; put 'put ''IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5''@;'; put 'put ''IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIwLjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMw''@;'; put 'put ''LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0''@;'; put 'put ''IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEgMTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIg''@;'; put 'put ''MjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYg''@;'; put 'put ''TCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEz''@;'; put 'put ''LjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5c''@;'; put 'put ''biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYz''@;'; put 'put ''MyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBDIDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAx''@;'; put 'put ''MiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEg''@;'; put 'put ''MTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwg''@;'; put 'put ''NCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQg''@;'; put 'put ''MTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMg''@;'; put 'put ''MTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy''@;'; put 'put ''MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0''@;'; put 'put ''LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBD''@;'; put 'put ''IDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAx''@;'; put 'put ''NCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwgMjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAz''@;'; put 'put ''NS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1''@;'; put 'put ''IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4z''@;'; put 'put ''NDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3''@;'; put 'put ''LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBD''@;'; put 'put ''IDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAx''@;'; put 'put ''My40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUg''@;'; put 'put ''MjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMg''@;'; put 'put ''MTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0''@;'; put 'put ''IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2''@;'; put 'put ''LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAy''@;'; put 'put ''OSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAy''@;'; put 'put ''Mi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2''@;'; put 'put ''LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBa''@;'; put 'put ''IE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1''@;'; put 'put ''NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAy''@;'; put 'put ''MS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMw''@;'; put 'put ''LjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEu''@;'; put 'put ''NzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3''@;'; put 'put ''IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAx''@;'; put 'put ''OCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBM''@;'; put 'put ''IDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4z''@;'; put 'put ''NDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAx''@;'; put 'put ''MSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDEx''@;'; put 'put ''LjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIz''@;'; put 'put ''IEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5''@;'; put 'put ''LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4''@;'; put 'put ''NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy''@;'; put 'put ''MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAx''@;'; put 'put ''OS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMg''@;'; put 'put ''MTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1''@;'; put 'put ''NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAy''@;'; put 'put ''Mi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjku''@;'; put 'put ''MDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAx''@;'; put 'put ''NS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1''@;'; put 'put ''OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjgg''@;'; put 'put ''MjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEw''@;'; put 'put ''NSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEu''@;'; put 'put ''ODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1''@;'; put 'put ''IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41''@;'; put 'put ''NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQg''@;'; put 'put ''MzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMx''@;'; put 'put ''NCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAy''@;'; put 'put ''NC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1''@;'; put 'put ''IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iNyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+''@;'; put 'put ''XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu''@;'; put 'put ''ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIz''@;'; put 'put ''Ljk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAy''@;'; put 'put ''MiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44''@;'; put 'put ''OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1''@;'; put 'put ''LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42''@;'; put 'put ''MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3''@;'; put 'put ''LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUg''@;'; put 'put ''MjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40''@;'; put 'put ''IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQg''@;'; put 'put ''MTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQg''@;'; put 'put ''WiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAy''@;'; put 'put ''Ljg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkg''@;'; put 'put ''QyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42''@;'; put 'put ''NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45Mjgg''@;'; put 'put ''MjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5''@;'; put 'put ''LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1''@;'; put 'put ''IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w''@;'; put 'put ''YXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2''@;'; put 'put ''LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1''@;'; put 'put ''LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAx''@;'; put 'put ''NC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw''@;'; put 'put ''NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAu''@;'; put 'put ''OTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45''@;'; put 'put ''NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAy''@;'; put 'put ''Mi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAg''@;'; put 'put ''PHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcu''@;'; put 'put ''ODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1''@;'; put 'put ''LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDEx''@;'; put 'put ''LjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5''@;'; put 'put ''NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0Ljgx''@;'; put 'put ''NyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0''@;'; put 'put ''IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2''@;'; put 'put ''IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2''@;'; put 'put ''IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4y''@;'; put 'put ''IDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAy''@;'; put 'put ''OS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4y''@;'; put 'put ''MDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUg''@;'; put 'put ''MjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0''@;'; put 'put ''OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAy''@;'; put 'put ''IDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5''@;'; put 'put ''NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTku''@;'; put 'put ''ODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0''@;'; put 'put ''NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUuMzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMz''@;'; put 'put ''LjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4n''@;'; put 'put ''KSxGLkNsclNoYXBlR3JpZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwx''@;'; put 'put ''NSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoi''@;'; put 'put ''Lz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4g''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUg''@;'; put 'put ''QyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD''@;'; put 'put ''IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwg''@;'; put 'put ''MTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAxOS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1''@;'; put 'put ''LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIg''@;'; put 'put ''ZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4w''@;'; put 'put ''MzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUg''@;'; put 'put ''MTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4z''@;'; put 'put ''NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3''@;'; put 'put ''IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkg''@;'; put 'put ''MjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw''@;'; put 'put ''NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIy''@;'; put 'put ''LjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8''@;'; put 'put ''Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg''@;'; put 'put ''ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2''@;'; put 'put ''LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAxMy40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1''@;'; put 'put ''IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz''@;'; put 'put ''MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2''@;'; put 'put ''IiByPSI1Ii8+JyksRi5DbHJTaGFwZUhlYXRNYXA9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMx''@;'; put 'put ''IDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYg''@;'; put 'put ''MjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAy''@;'; put 'put ''NiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4z''@;'; put 'put ''MzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAy''@;'; put 'put ''NiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAx''@;'; put 'put ''Ny4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa''@;'; put 'put ''Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBMIDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcg''@;'; put 'put ''TCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIw''@;'; put 'put ''LjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2''@;'; put 'put ''OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQg''@;'; put 'put ''NyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAy''@;'; put 'put ''NiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwg''@;'; put 'put ''MjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkg''@;'; put 'put ''TCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAx''@;'; put 'put ''NCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAg''@;'; put 'put ''TCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3''@;'; put 'put ''IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3''@;'; put 'put ''IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx''@;'; put 'put ''MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx''@;'; put 'put ''LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBa''@;'; put 'put ''IE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMw''@;'; put 'put ''LjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIg''@;'; put 'put ''NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTku''@;'; put 'put ''MDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy''@;'; put 'put ''IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx''@;'; put 'put ''IEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAy''@;'; put 'put ''MS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAu''@;'; put 'put ''MzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIz''@;'; put 'put ''MyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9w''@;'; put 'put ''YXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMy''@;'; put 'put ''IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwg''@;'; put 'put ''MjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5''@;'; put 'put ''IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUg''@;'; put 'put ''MTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUu''@;'; put 'put ''NDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4yOCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu''@;'; put 'put ''OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksRi5DbHJTaGFwZVBpZUNoYXJ0PSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''J1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQg''@;'; put 'put ''NyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMu''@;'; put 'put ''NDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIz''@;'; put 'put ''LjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42''@;'; put 'put ''IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBD''@;'; put 'put ''IDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBM''@;'; put 'put ''IDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMy''@;'; put 'put ''IDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBM''@;'; put 'put ''IDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQg''@;'; put 'put ''MjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4x''@;'; put 'put ''OTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMg''@;'; put 'put ''MzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAz''@;'; put 'put ''Mi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4''@;'; put 'put ''IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAy''@;'; put 'put ''OSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBN''@;'; put 'put ''IDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAx''@;'; put 'put ''IDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYuOTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2''@;'; put 'put ''IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAy''@;'; put 'put ''IDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBM''@;'; put 'put ''IDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2''@;'; put 'put ''OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLEYuQ2xyU2hhcGVTY2F0dGVy''@;'; put 'put ''UGxvdD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMx''@;'; put 'put ''IDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjEx''@;'; put 'put ''MSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5''@;'; put 'put ''MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBD''@;'; put 'put ''IDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg''@;'; put 'put ''MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD''@;'; put 'put ''IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAy''@;'; put 'put ''Ny41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41''@;'; put 'put ''ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45''@;'; put 'put ''MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMx''@;'; put 'put ''IDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45''@;'; put 'put ''NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAu''@;'; put 'put ''OTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAx''@;'; put 'put ''NC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44''@;'; put 'put ''MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4''@;'; put 'put ''LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg''@;'; put 'put ''MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42Mzcg''@;'; put 'put ''MjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4z''@;'; put 'put ''NzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAy''@;'; put 'put ''Mi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu''@;'; put 'put ''NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z''@;'; put 'put ''NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1''@;'; put 'put ''LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYg''@;'; put 'put ''MTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEz''@;'; put 'put ''OSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3''@;'; put 'put ''NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAy''@;'; put 'put ''NC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIg''@;'; put 'put ''MjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUg''@;'; put 'put ''MjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUu''@;'; put 'put ''NDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4''@;'; put 'put ''MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy''@;'; put 'put ''Ljg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42''@;'; put 'put ''MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw''@;'; put 'put ''Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w''@;'; put 'put ''ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg''@;'; put 'put ''MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu''@;'; put 'put ''NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5''@;'; put 'put ''MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBj''@;'; put 'put ''eT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg''@;'; put 'put ''NS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0g''@;'; put 'put ''OS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42''@;'; put 'put ''NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4w''@;'; put 'put ''NjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAx''@;'; put 'put ''OS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYz''@;'; put 'put ''NiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQu''@;'; put 'put ''ODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQu''@;'; put 'put ''MDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAy''@;'; put 'put ''Ny45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41''@;'; put 'put ''OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMu''@;'; put 'put ''MDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAx''@;'; put 'put ''Ny42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUu''@;'; put 'put ''OCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAx''@;'; put 'put ''My45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5''@;'; put 'put ''IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42''@;'; put 'put ''MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIw''@;'; put 'put ''Ljc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4w''@;'; put 'put ''ODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIg''@;'; put 'put ''MjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUu''@;'; put 'put ''NTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5''@;'; put 'put ''MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44''@;'; put 'put ''NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1''@;'; put 'put ''IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlVGlja0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIg''@;'; put 'put ''MzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAy''@;'; put 'put ''NSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40''@;'; put 'put ''NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz''@;'; put 'put ''MSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMg''@;'; put 'put ''MjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg''@;'; put 'put ''MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg''@;'; put 'put ''WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIw''@;'; put 'put ''IDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0''@;'; put 'put ''IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDgg''@;'; put 'put ''QyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAy''@;'; put 'put ''MyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBM''@;'; put 'put ''IDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBM''@;'; put 'put ''IDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQg''@;'; put 'put ''MTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUg''@;'; put 'put ''TCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMg''@;'; put 'put ''MjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEw''@;'; put 'put ''IDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQg''@;'; put 'put ''MTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4w''@;'; put 'put ''MDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxGLkNsclNoYXBlQmVsbEN1cnZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAs''@;'; put 'put ''MSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxG''@;'; put 'put ''LkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6Ri5DbHJTaGFwZUF4aXNDaGFydCwiYmFyLWNoYXJ0IjpGLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6Ri5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6Ri5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpG''@;'; put 'put ''LkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6Ri5DbHJTaGFwZUdyaWRDaGFydCwibGluZS1jaGFydCI6Ri5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpGLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOkYuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6''@;'; put 'put ''Ri5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6Ri5DbHJTaGFwZUJveFBsb3QsImhlYXQtbWFwIjpGLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6Ri5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAs''@;'; put 'put ''eC5kZXNjcmlwdG9yQ29uZmlnKShGLkNoYXJ0U2hhcGVzWyJsaW5lLWNoYXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAq''@;'; put 'put ''KiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi''@;'; put 'put ''X19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Db21tZXJjZVNoYXBlcz1GLkNsclNoYXBlRmFjdG9yeT1GLkNsclNoYXBlRW1wbG95ZWU9Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Ri5DbHJTaGFwZVJ1YmxlPUYuQ2xyU2hhcGVQZXNvPUYuQ2xyU2hhcGVDb2luQmFnPUYuQ2xyU2hhcGVCaXRj''@;'; put 'put ''b2luPUYuQ2xyU2hhcGVZZW49Ri5DbHJTaGFwZVdvbj1GLkNsclNoYXBlUnVwZWU9Ri5DbHJTaGFwZVBvdW5kPUYuQ2xyU2hhcGVFQ2hlY2s9Ri5DbHJTaGFwZURvbGxhckJpbGw9Ri5DbHJTaGFwZUJhbms9Ri5DbHJTaGFwZUNyZWRpdENhcmQ9Ri5DbHJTaGFwZURvbGxhcj1GLkNsclNoYXBl''@;'; put 'put ''RXVybz1GLkNsclNoYXBlU3RvcmU9Ri5DbHJTaGFwZVdhbGxldD1GLkNsclNoYXBlU2hvcHBpbmdDYXJ0PUYuQ2xyU2hhcGVQaWdneUJhbms9Ri5DbHJTaGFwZVNob3BwaW5nQmFnPUYuQ2xyU2hhcGVDYWxjdWxhdG9yPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3It''@;'; put 'put ''Y29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlQ2Fs''@;'; put 'put ''Y3VsYXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk04LDMyVjRIMjhWMzJa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEyLDhIMjUuNjdWNkgxMWExLDEsMCwwLDAtMSwxdjQuNjdoMloiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiBwb2ludHM9IjEyIDE2IDEwIDE2IDEwIDE4IDE0IDE4IDE0IDE0IDEyIDE0IDEyIDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNCAxNiAyMiAxNiAyMiAxOCAyNiAxOCAyNiAx''@;'; put 'put ''NCAyNCAxNCAyNCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHBvaW50cz0iMTggMTYgMTYgMTYgMTYgMTggMjAgMTggMjAgMTQgMTggMTQgMTggMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBwb2ludHM9IjEyIDIyIDEwIDIyIDEwIDI0IDE0IDI0IDE0IDIwIDEyIDIwIDEyIDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgcG9pbnRzPSIyNCAy''@;'; put 'put ''MiAyMiAyMiAyMiAyNCAyNiAyNCAyNiAyMCAyNCAyMCAyNCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHBvaW50cz0iMTggMjIgMTYgMjIgMTYgMjQgMjAgMjQgMjAgMjAgMTggMjAgMTggMjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiBwb2ludHM9IjEyIDI4IDEwIDI4IDEwIDMwIDE0IDMwIDE0IDI2IDEyIDI2IDEyIDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMTAiIHBvaW50cz0iMjQgMjggMjIgMjggMjIgMzAgMjYgMzAgMjYgMjYgMjQgMjYgMjQgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgcG9pbnRzPSIxOCAyOCAxNiAyOCAxNiAzMCAyMCAzMCAy''@;'; put 'put ''MCAyNiAxOCAyNiAxOCAyOCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMiwyOEgxMFYy''@;'; put 'put ''NmgyWm0wLTZIMTBWMjBoMlptMC02SDEwVjE0aDJabTcsMTJIMTdWMjZoMlptMC02SDE3VjIwaDJabTAtNkgxN1YxNGgyWm03LDEySDI0VjI2aDJabTAtNkgyNFYyMGgyWm0wLTZIMjRWMTRoMlptMC03SDEwVjVIMjZaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQmFnPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUsMTJWOS4wNWE3LDcsMCwxLDAtMTQsMHY3YTEsMSwwLDAsMCwyLDBWMTRoOFYxMkgxM1Y5LjA1YTUsNSwwLDEsMSwxMCwwVjE2YTEsMSwwLDEsMCwyLDBWMTRoNVYzMkg2VjE0SDlWMTJI''@;'; put 'put ''NFYzMi4wOUExLjkxLDEuOTEsMCwwLDAsNS45MSwzNEgzMC4wOUExLjkxLDEuOTEsMCwwLDAsMzIsMzIuMDlWMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTMsOS4yMmE1LDUsMCwxLDEsMTAsMFYxMmgyVjkuMjJh''@;'; put 'put ''Nyw3LDAsMSwwLTE0LDBWMTJoMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNSwxMnYzLjFhMSwxLDAsMSwxLTIsMFYxMkgxM3YzLjFhMSwxLDAsMCwxLTIsMFYxMkg0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxMloiLz4nKSxGLkNsclNoYXBlUGlnZ3lCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNzIsMTAuNDdhMTEuNjUsMTEuNjUsMCwwLDAtNi4zMS41MkEuOC44LDAsMSwwLDE0LDEyLjQ4''@;'; put 'put ''LDEwLjExLDEwLjExLDAsMCwxLDE5LjQ0LDEyYS44LjgsMCwxLDAsLjI4LTEuNTdaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjUuMzgiIGN5PSIxNi43MSIgcj0iMS4zNiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNS41MSwxOC42M2ExLDEsMCwwLDAtLjg0LS40NCwzLjQyLDMuNDIsMCwwLDEtMi4wOS0xLjEyLDE3LjM1LDE3LjM1LDAsMCwxLTIuNjMtMy43OGwyLjg4LTQuNUExLjg5LDEuODksMCwwLDAsMzMsN2Ex''@;'; put 'put ''Ljc3LDEuNzcsMCwwLDAtMS4zMy0xLDEwLjEyLDEwLjEyLDAsMCwwLTUuMzkuNzUsMTIuNzIsMTIuNzIsMCwwLDAtMi43MiwxLjYzLDE2Ljk0LDE2Ljk0LDAsMCwwLTUuMTYtMS4zOUMxMS4zMSw2LjMsNC44MywxMC45LDQsMTdINGEyLjU2LDIuNTYsMCwwLDEtMS4zOC0xLjUzLDEuODEsMS44''@;'; put 'put ''MSwwLDAsMSwuMTQtMS40LDEuMTksMS4xOSwwLDAsMSwuNDMtLjQzLDEuMDgsMS4wOCwwLDAsMC0xLjEyLTEuODVBMy4zMSwzLjMxLDAsMCwwLC45MSwxM2E0LDQsMCwwLDAtLjMzLDMuMDhBNC43Niw0Ljc2LDAsMCwwLDMsMTguOTVsLjkyLjQ2YTE3LjU4LDE3LjU4LDAsMCwwLDEuODIsN2wu''@;'; put 'put ''MTcuMzhBMjMsMjMsMCwwLDAsOS4yLDMxLjg4YTEsMSwwLDAsMCwuNzUuMzRoNC41MmExLDEsMCwwLDAsLjkyLTEuMzhMMTUsMjkuOTRsMS4xOC4xM2EyMC4zMywyMC4zMywwLDAsMCw0LDBjLjM3LjYuNzcsMS4yLDEuMjEsMS43OWExLDEsMCwwLDAsLjguNDFoNC4zNGExLDEsMCwwLDAsLjky''@;'; put 'put ''LTEuMzljLS4xNy0uNC0uMzQtLjgzLS40Ny0xLjItLjE4LS41My0uMzItMS0uNDMtMS40NUExMy4xOCwxMy4xOCwwLDAsMCwyOS41NiwyNmExMi41LDEyLjUsMCwwLDAsMywwLDEsMSwwLDAsMCwuNzgtLjYybDIuMjYtNS44MUExLDEsMCwwLDAsMzUuNTEsMTguNjNabS0zLjc4LDUuNDRhMTEu''@;'; put 'put ''MzcsMTEuMzcsMCwwLDEtMi4zNS0uMTFoMGE4LjIsOC4yLDAsMCwxLTIuNTMtLjg3LDEsMSwwLDAsMC0uOTMsMS43NywxMS43MiwxMS43MiwwLDAsMCwxLjI5LjU4LDgsOCwwLDAsMS0xLjgsMS4xNmwtMS4wNi40OHMuNDksMi4xOS44MiwzLjE2SDIyLjc5Yy0uMjQtLjM0LTEuNDUtMi4zNi0x''@;'; put 'put ''LjQ1LTIuMzZsLS42Ny4wOWExOC41MywxOC41MywwLDAsMS00LjI1LjEyYy0uNjYtLjA2LTEuNzYtLjItMi42Mi0uMzVsLTEuNTUtLjI3cy42MywyLjQzLjc1LDIuNzR2MEgxMC40MkEyMC41NywyMC41NywwLDAsMSw3Ljc2LDI2bC0uMTgtLjM5QTE0LjYyLDE0LjYyLDAsMCwxLDYsMTcuNDhj''@;'; put 'put ''LjU0LTUuMTksNi4xMi05LjExLDEyLjE5LTguNTRhMTUuNDcsMTUuNDcsMCwwLDEsNS4wOCwxLjQ4bC42Mi4yOS41LS40N0ExMC4yOSwxMC4yOSwwLDAsMSwyNyw4LjU0YTguMjUsOC4yNSwwLDAsMSw0LS42NWwtMy4zOCw1LjI5LjI1LjVoMGEyMS4xNiwyMS4xNiwwLDAsMCwzLjMxLDQuODQs''@;'; put 'put ''Ni40OSw2LjQ5LDAsMCwwLDIuMTQsMS4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNSwxOC44N0E1LjgzLDUuODMsMCwwLDEsMzMsMTcuNjFhMjEuNjMsMjEuNjMsMCwwLDEtMy4yOS00Ljg0bDMuMzktNS4yOWEu''@;'; put 'put ''OS45LDAsMCwwLS41NC0xLjM4LDkuNjcsOS42NywwLDAsMC01LjEzLjcyLDEyLDEyLDAsMCwwLTMuMTMsMkExNy4zNywxNy4zNywwLDAsMCwxOC42LDcuMTVDMTEuOCw2LjUyLDUuMjcsMTAuOSw0LjU0LDE3bC0uMTQtLjA3QTIuNzYsMi43NiwwLDAsMSwyLjksMTUuMjlhMiwyLDAsMCwxLC4x''@;'; put 'put ''NS0xLjU1LDEuMzIsMS4zMiwwLDAsMSwuNDctLjQ4LDEuMDgsMS4wOCwwLDEsMC0xLjEyLTEuODUsMy40NSwzLjQ1LDAsMCwwLTEuMjMsMS4yNUE0LjE2LDQuMTYsMCwwLDAsLjg0LDE1LjlhNSw1LDAsMCwwLDIuNTcsM2wxLC41NGExOC42MiwxOC42MiwwLDAsMCwyLDcuMywyMywyMywwLDAs''@;'; put 'put ''MCwzLDQuNzksMSwxLDAsMCwwLC44LjM4aDMuNjFhLjUyLjUyLDAsMCwwLC40LS43NUwxNCwzMC4zOGExMSwxMSwwLDAsMS0uMzMtMS4xOGMuOTEuMTYsMi4wOC4zMSwyLjg3LjM4YTIwLjA3LDIwLjA3LDAsMCwwLDMuMTIsMGMuMzkuNy43OSwxLjMzLDEuMTUsMS44NWEuOTMuOTMsMCwwLDAs''@;'; put 'put ''Ljc3LjQxaDMuMTFhLjY1LjY1LDAsMCwwLC42MS0uODVjLS4yMy0uNzQtLjUzLTEuNzUtLjcxLTIuMzdhMTUuOSwxNS45LDAsMCwwLDMuNzUtMS43NmMuMTYtLjExLjMyLS4yNi40OC0uMzlhMTMuNzcsMTMuNzcsMCwwLDEtMi40Mi0xLC44LjgsMCwwLDEsLjc0LTEuNDIsMTEuNjQsMTEuNjQs''@;'; put 'put ''MCwwLDAsMy4xOCwxLjEsMTMuMzEsMTMuMzEsMCwwLDAsMi42OC4xMiwxLDEsMCwwLDAsLjktLjY2bDEuNzMtNC40NEExLDEsMCwwLDAsMzUsMTguODdaTTEzLjc5LDExLjU5YS44Ni44NiwwLDAsMS0uMy4wNS44NS44NSwwLDAsMS0uMy0xLjY0LDEyLjQxLDEyLjQxLDAsMCwxLDYuNjktLjU1''@;'; put 'put ''Ljg1Ljg1LDAsMSwxLS4zLDEuNjdBMTAuNzUsMTAuNzUsMCwwLDAsMTMuNzksMTEuNTlabTEyLjUyLDYuMTJhMS40NCwxLjQ0LDAsMSwxLDEuNDQtMS40NEExLjQ0LDEuNDQsMCwwLDEsMjYuMzIsMTcuNzJaIi8+JyksRi5DbHJTaGFwZVNob3BwaW5nQ2FydD0oMCxtLmNsckljb25TVkcpKCc8''@;'; put 'put ''Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjA4LDUuMzdBMSwxLDAsMCwwLDMyLjMxLDVIMTEuNDlsLjY1LDJIMzFMMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVM''@;'; put 'put ''OS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDMuMTctMTRBMSwxLDAsMCwwLDMzLjA4LDUu''@;'; put 'put ''MzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwLjcxIDcgMjEuODcgNSAxMS40''@;'; put 'put ''OSA1IDEyLjE0IDcgMjAuNzEgNyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMTUsMTUuNCwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42''@;'; put 'put ''MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEs''@;'; put 'put ''MCwwLDAsMS0uNzhsMS4wOS00LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''My4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTcsN2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDExLjQ5bC42NSwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVsLS40MiwwTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2''@;'; put 'put ''LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjU3LTYuOTFBNy41MSw3LjUxLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xLDYuMzlBMSwxLDAsMCwwLDMyLjMxLDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNB''@;'; put 'put ''Mi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMy4yLTEzQTEsMSwwLDAsMCwzMy4xLDYuMzlaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUi''@;'; put 'put ''IGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDkuMjFMOC43Niw0LjU3YTEsMSww''@;'; put 'put ''LDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYt''@;'; put 'put ''MWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuMTktNC44NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDku''@;'; put 'put ''OTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjcxLTdBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVXYWxsZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgzMVY5YTEsMSwwLDAsMC0xLTFINmExLDEsMCwwLDEtMS0uODJWNi44MkExLDEsMCwwLDEsNiw2SDI5''@;'; put 'put ''LjU4YTEsMSwwLDAsMCwwLTJINkEzLDMsMCwwLDAsMyw3YTMuMDgsMy4wOCwwLDAsMCwwLC4zNlYyNy45M0E0LjEsNC4xLDAsMCwwLDcuMTMsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNWgxYTEsMSwwLDAsMCwxLTFWMTZBMSwxLDAsMCwwLDMyLDE1Wk0yOSwzMEg3LjEzQTIuMTEsMi4xMSwwLDAs''@;'; put 'put ''MSw1LDI3LjkzVjkuODhBMy4xMSwzLjExLDAsMCwwLDYsMTBIMjl2NUgyMmE1LDUsMCwwLDAsMCwxMGg3Wm0yLTdIMjJhMywzLDAsMCwxLDAtNkgzMVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMy4wMSIg''@;'; put 'put ''Y3k9IjIwIiByPSIxLjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi45NCwxNEgzMVY5YTEsMSwwLDAsMC0xLTFINkExLDEsMCwwLDEsNSw3SDVWN0ExLDEsMCwwLDEsNiw2SDI5LjZhMSwxLDAsMSwwLDAtMkg2QTIu''@;'; put 'put ''OTQsMi45NCwwLDAsMCwzLDYuODh2MjFBNC4xMyw0LjEzLDAsMCwwLDcuMTUsMzJIMzBhMSwxLDAsMCwwLDEtMVYyNmgxLjk0YS45My45MywwLDAsMCwxLS45MXYtMTBBMS4wOCwxLjA4LDAsMCwwLDMyLjk0LDE0Wk0zMiwyNGwtOC41OCwwYTMuODcsMy44NywwLDAsMS0zLjczLTQsMy44Nywz''@;'; put 'put ''Ljg3LDAsMCwxLDMuNzMtNEwzMiwxNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjI0LjA0IiBjeT0iMTkuOTIiIHI9IjEuNSIvPicpLEYuQ2xyU2hhcGVTdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwuNDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCww''@;'; put 'put ''LDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdBMiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0zMCwxOC4xM0EyLjY4LDIuNjgsMCww''@;'; put 'put ''LDEsMjcuODIsMTdMMjcsMTUuODgsMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OCwyMC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDE1LDE1Ljg4LDE0LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OCw4LjE4LDE3QTIuNjgsMi42OCwwLDAs''@;'; put 'put ''MSw2LDE4LjEzYTIuNjQsMi42NCwwLDAsMS0yLS44OFYxNC4xN0w4LjA4LDZIMjcuOTJMMzIsMTQuMTZ2LjY3bDAsMi4zOUEyLjY3LDIuNjcsMCwwLDEsMzAsMTguMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjgs''@;'; put 'put ''MzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIs''@;'; put 'put ''NEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs''@;'; put 'put ''NC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMTUsMTQuNHYxLjUyTDE0LjE4LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMOSwxNS44OFYxNC40TDExLjU5LDZIMTZabTEy''@;'; put 'put ''LDEuNDhMMjYuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwyMSwxNS44OGwwLDBWMTQuNEwyMCw2aDQuNDVMMjcsMTQuNFoiLz4nKSxGLkNsclNoYXBlRXVybz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMxLjQ4LDI4LjQ5YTEsMSwwLDAsMC0xLjM4LS4zMkExMiwxMiwwLDAsMSwxMi40NSwyMkgyNC4xNmExLDEsMCwwLDAsMC0ySDExLjkzYTExLjE2LDExLjE2LDAsMCwxLDAtNEgyNC4xNmExLDEsMCwwLDAsMC0ySDEyLjQ1QTEyLDEyLDAsMCwxLDMwLjA2LDcuOGExLDEsMCwwLDAsMS4wNi0x''@;'; put 'put ''LjdBMTQsMTQsMCwwLDAsMTAuMzQsMTRIMy41NGExLDEsMCwxLDAsMCwySDkuOTFhMTQsMTQsMCwwLDAtLjE2LDIsMTQsMTQsMCwwLDAsLjE2LDJIMy41NGExLDEsMCwxLDAsMCwyaDYuOGExNCwxNCwwLDAsMCwyMC44Myw3Ljg3QTEsMSwwLDAsMCwzMS40OCwyOC40OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNDIsMjUuMTZBMTAuODgsMTAuODgsMCwwLDEsOS4yMywyMUg1Ljg0YTEsMSwwLDAsMSwwLTJoM2MwLS4zNS0uMDUtLjcx''@;'; put 'put ''LS4wNS0xLjA3czAtLjYzLDAtLjkzaC0zYTEsMSwwLDAsMSwwLTJIOS4xOUExMC44NiwxMC44NiwwLDAsMSwyNS4zOCw4LjY5YTEuMjUsMS4yNSwwLDAsMS0xLjMyLDIuMTJBOC4zNiw4LjM2LDAsMCwwLDExLjgyLDE1aDkuMzZhMSwxLDAsMCwxLDAsMkgxMS4zM2E3LjcyLDcuNzIsMCwwLDAs''@;'; put 'put ''MCwyaDkuODJhMSwxLDAsMCwxLDAsMkgxMS44N2E4LjM2LDguMzYsMCwwLDAsMTIuMjIsNCwxLjI1LDEuMjUsMCwxLDEsMS4zMywyLjEyWiIvPicpLEYuQ2xyU2hhcGVEb2xsYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNiwyMS4xNWE2LjkxLDYuOTEsMCwwLDAtNC4zOC0zLjMyQTI2LDI2LDAsMCwwLDE5LDE3LjE5VjguMTJBMTAuMDUsMTAuMDUsMCwwLDEsMjMuODYsMTBhMSwxLDAsMCwwLDEuMzMtMS41QTExLjc1LDExLjc1LDAsMCwwLDE5LDYuMVYzYTEsMSwwLDAsMC0yLDBWNmMtNC40LjEt''@;'; put 'put ''Ni44MywyLjI5LTcuNTcsNC4xOEE1LjU2LDUuNTYsMCwwLDAsMTEuNjYsMTcsMTMuMiwxMy4yLDAsMCwwLDE3LDE4Ljg0VjI4YTEyLjMsMTIuMywwLDAsMS03LjE0LTIuNzRBMSwxLDAsMSwwLDguNDksMjYuNywxNC4wOSwxNC4wOSwwLDAsMCwxNywzMHYzYTEsMSwwLDAsMCwyLDBWMzBjMi44''@;'; put 'put ''Mi0uMTksNi4wNy0xLjA5LDcuMy00Ljc2QTUuMzMsNS4zMywwLDAsMCwyNiwyMS4xNVpNMTIuNzksMTUuMzJhMy41NywzLjU3LDAsMCwxLTEuNDktNC4zOUMxMS40MSwxMC42MywxMi41Myw4LjEyLDE3LDh2OC44QTEwLjcsMTAuNywwLDAsMSwxMi43OSwxNS4zMlpNMjQuNCwyNC41NmMtLjcy''@;'; put 'put ''LDIuMTQtMi4zMiwzLjE3LTUuNCwzLjRWMTkuMjNjLjY0LjE0LDEuMy4zLDIsLjUxYTUsNSwwLDAsMSwzLjE5LDIuMzJBMy4zNCwzLjM0LDAsMCwxLDI0LjQsMjQuNTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuNjUsMjEuNTljLTEsMy0zLjYxLDMuODQtNS45LDR2MmExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjcuNTlBMTEuNDcsMTEuNDcsMCwwLDEsMTEsMjVhMS4yNSwxLjI1LDAsMSwxLDEuNzEtMS44''@;'; put 'put ''Myw5LjExLDkuMTEsMCwwLDAsNC41NSwxLjk0VjE4LjgzYTkuNjMsOS42MywwLDAsMS0zLjczLTEuNDEsNC44LDQuOCwwLDAsMS0xLjkxLTUuODRjLjU5LTEuNTEsMi40Mi0zLjIzLDUuNjQtMy41MVY2LjI1YTEuMjUsMS4yNSwwLDAsMSwyLjUsMFY4LjExYTkuNjcsOS42NywwLDAsMSw0Ljks''@;'; put 'put ''MkExLjI1LDEuMjUsMCwwLDEsMjMsMTEuOTVhNy4xNCw3LjE0LDAsMCwwLTMuMjQtMS4zMXY2LjEzYy42LjEzLDEuMjQuMjcsMS45MS40OGE1Ljg1LDUuODUsMCwwLDEsMy42OSwyLjgyQTQuNjQsNC42NCwwLDAsMSwyNS42NSwyMy41OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC45MiwxOS42NGMtLjQtLjEyLS43OS0uMjItMS4xNy0uM3Y1Ljc2YzItLjIsMy4wNy0uOSwzLjUzLTIuM2EyLjE1LDIuMTUsMCwwLDAtLjE1LTEuNThBMy40OSwzLjQ5LDAsMCwwLDIwLjkyLDE5LjY0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTEzLjk0LDEyLjQ4YTIuMzEsMi4zMSwwLDAsMCwxLDIuODcsNi41Myw2LjUzLDAsMCwwLDIuMzIuOTJWMTAuNTVDMTUuMTYsMTAuOCwxNC4xOSwxMS44NCwxMy45NCwxMi40OFoiLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlQ3JlZGl0Q2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMiwwLDEySDRMNCw4Wk00LDI4VjI0SDMydjRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjMiIHdpZHRoPSIyMiIgaGVpZ2h0PSIzMCIgcng9IjAuOTYiIHJ5PSIwLjk2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzNikgcm90YXRlKDkwKSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBz''@;'; put 'put ''dHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZabTAsMThINFYyMEgzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJhbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMuNSwxMy41NiwxOCw1LjIzbDE0LjUsOC4zM2ExLDEsMCwwLDAsMS0xLjczTDE4LDIu''@;'; put 'put ''OTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1''@;'; put 'put ''SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM''@;'; put 'put ''MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42''@;'; put 'put ''M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjIuNzcsOEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMsMjlIM2ExLDEsMCwwLDAsMCwySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVBMy41MSwzLjUx''@;'; put 'put ''LDAsMCwxLDIwLDE0SDV2MkgzMVYxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDYsOS43NGwuNjgtMS4xNy0xLjQ5LS44NWEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44''@;'; put 'put ''NmgzLjIxbDMuOS0yLjI0LDEuMS42M0MxOS4zOSw5Ljg5LDE5LjQyLDkuODEsMTkuNDYsOS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMDUsNS4yNSwxOCwyLjkyLDIu''@;'; put 'put ''NSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDE4LDUuMjMsMjEuMDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMuNSwxMy41Niw1LDEyLjY4VjE2SDMxVjEyLjcxbDEuNDguODVhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWk0xNy44NSw3LjExYS44LjgsMCwwLDEsLjgsMEwyNS4zNywxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFI''@;'; put 'put ''MTEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEu''@;'; put 'put ''MTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3''@;'; put 'put ''SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAs''@;'; put 'put ''MCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzksMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0bDYuNzItMy44''@;'; put 'put ''NmEuOC44LDAsMCwxLC44LDBsNSwyLjg3QTcuNDUsNy40NSwwLDAsMSwyMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0w1LDEyLjY4VjE2SDMxVjEzLjQyQTcuNTMsNy41MywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwxMy4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwy''@;'; put 'put ''N0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNWEzLjUxLDMuNTEsMCwwLDEtMy01LjI2bC4xNC0uMjQtMS4zNS0uNzhMMTQuMzUsMTFIMTEuMTRsNi43Mi0z''@;'; put 'put ''Ljg2YS44LjgsMCwwLDEsLjgsMGwxLjc1LDEsMS42NS0yLjg2TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlRG9sbGFyQmlsbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCw2YTQuMjUsNC4yNSwwLDAsMS0zLjktNEgzMlptMCwxLjYydjQuODNBNS44Nyw1Ljg3LDAsMCwwLDI2LjQ5LDI2aC0xN0E1Ljg3LDUuODcsMCwwLDAsNCwyMC40NFYxNS42QTUuODcsNS44NywwLDAsMCw5LjUxLDEwaDE3QTUuODcs''@;'; put 'put ''NS44NywwLDAsMCwzMiwxNS42Wk03LjksMTBBNC4yNSw0LjI1LDAsMCwxLDQsMTRWMTBaTTQsMjIuMDZBNC4yNSw0LjI1LDAsMCwxLDcuOSwyNkg0Wk0yOC4xLDI2QTQuMjUsNC4yNSwwLDAsMSwzMiwyMi4wNlYyNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTAuODVjLTMuNDcsMC02LjMsMy4yMS02LjMsNy4xNXMyLjgzLDcuMTUsNi4zLDcuMTUsNi4zLTMuMjEsNi4zLTcuMTVTMjEuNDcsMTAuODUsMTgsMTAuODVabTAsMTIuNjljLTIuNTksMC00LjctMi40OS00LjctNS41NXMyLjExLTUuNTUs''@;'; put 'put ''NC43LTUuNTUsNC43LDIuNDksNC43LDUuNTVTMjAuNTksMjMuNTUsMTgsMjMuNTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk00LDI2VjIxLjE1QTUuMTgsNS4xOCwwLDAsMSw4Ljc5LDI2Wk00LDE0Ljg1VjEwSDguNzlBNS4xOCw1LjE4LDAsMCwxLDQsMTQuODVaTTE4LDI1LjE1Yy0zLjQ3LDAtNi4zLTMuMjEtNi4zLTcuMTVzMi44My03LjE1LDYuMy03LjE1LDYuMywzLjIxLDYu''@;'; put 'put ''Myw3LjE1UzIxLjQ3LDI1LjE1LDE4LDI1LjE1Wk0zMiwyNkgyNy4yNUE1LjE4LDUuMTgsMCwwLDEsMzIsMjEuMTVabTAtMTEuMTVBNS4xOCw1LjE4LDAsMCwxLDI3LjI1LDEwSDMyWiIvPlxuICAgICAgICAgICAgPGVsbGlwc2UgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MiIgY3g9IjE4IiBjeT0iMTgiIHJ4PSI0IiByeT0iNC43MiIvPicpLEYuQ2xyU2hhcGVFQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjE2IiB5PSIxNiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMCIgeT0iMjEiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM0''@;'; put 'put ''LDhIMTIuOTNhOC4zNSw4LjM1LDAsMCwxLC43OSwySDMzVjI2SDNWMTkuOWE3LjgzLDcuODMsMCwwLDEtMi0xLjM0VjI3YTEsMSwwLDAsMCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik02LjU3LDE4LjY4YTYuMTcsNi4xNywwLDAsMCw0LjMyLTEuNTksMS4yLDEuMiwwLDAsMCwuMzYtLjg0LDEuMDgsMS4wOCwwLDAsMC0xLjA5LTEuMTEsMSwxLDAsMCwwLS43MS4yNSw0LjMyLDQuMzIsMCwwLDEtMi44NCwxLDMuMzUsMy4zNSwwLDAsMS0z''@;'; put 'put ''LjQ2LTNoNy41M0ExLjI5LDEuMjksMCwwLDAsMTIsMTIuMDYsNS42OCw1LjY4LDAsMCwwLDYuMjcsNi4xNCw2LDYsMCwwLDAsLjQsMTIuNHYwQTYsNiwwLDAsMCw2LjU3LDE4LjY4Wk02LjI1LDguMzljMS44MiwwLDIuODcsMS4zOSwzLDMuMTZIMy4xM0MzLjM4LDkuNjksNC41Niw4LjM5LDYu''@;'; put 'put ''MjUsOC4zOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCw4SDEyLjkxYTguNjEsOC42MSwwLDAsMSwxLjIsNC4zOSw4LDgsMCwwLDEtNy43OCw4LjI3QTcuNTEsNy41MSwwLDAsMSwxLDE4LjQxVjI3YTEsMSwwLDAs''@;'; put 'put ''MCwxLDFIMzRhMSwxLDAsMCwwLDEtMVY5QTEsMSwwLDAsMCwzNCw4Wk0zMSwyM0gyMFYyMUgzMVptMC01SDE2VjE2SDMxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYuNTcsMTguNjhBNiw2LDAsMCwxLC40LDEyLjQ0''@;'; put 'put ''djBBNiw2LDAsMCwxLDYuMjcsNi4xNCw1LjY4LDUuNjgsMCwwLDEsMTIsMTIuMDZhMS4yOSwxLjI5LDAsMCwxLTEuMywxLjMySDMuMTVhMy4zNSwzLjM1LDAsMCwwLDMuNDYsMyw0LjMyLDQuMzIsMCwwLDAsMi44NC0xLDEsMSwwLDAsMSwuNzEtLjI1LDEuMDgsMS4wOCwwLDAsMSwxLjA5LDEu''@;'; put 'put ''MTEsMS4yLDEuMiwwLDAsMS0uMzYuODRBNi4xNyw2LjE3LDAsMCwxLDYuNTcsMTguNjhaTTkuMywxMS41NWMtLjE4LTEuNzctMS4yMy0zLjE2LTMtMy4xNnMtMi44NywxLjMtMy4xMiwzLjE2WiIvPicpLEYuQ2xyU2hhcGVQb3VuZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjksMzBIMTMuNEE4LjQ1LDguNDUsMCwwLDAsMTUsMjQuNjVWMjFoNC4zMWExLDEsMCwwLDAsMC0ySDE1VjExLjMxQTUuMjQsNS4yNCwwLDAsMSwyMC4yMSw2LDUuMTksNS4xOSwwLDAsMSwyNCw3LjczYTEsMSwwLDAsMCwx''@;'; put 'put ''LjQ4LTEuMzVBNy4xOSw3LjE5LDAsMCwwLDEzLDExLjMxVjE5SDguNzJhMSwxLDAsMSwwLDAsMkgxM3YzLjY1QzEzLDI5LjM4LDEwLjEyLDMwLDEwLDMwYTEsMSwwLDAsMCwuMTcsMkgyNy45YTEsMSwwLDEsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LjUsMjUuOTJIMTEuNzRhMS4yNSwxLjI1LDAsMCwxLS4yMi0yLjQ4Yy4xNSwwLDEuNzItLjQ5LDEuNzItMy41NFYxOWgtMi41YTEsMSwwLDAsMSwwLTJoMi41VjExLjg4YTUu''@;'; put 'put ''ODUsNS44NSwwLDAsMSw1LjcyLTYsNS42Myw1LjYzLDAsMCwxLDQuMjEsMS45NEExLjI1LDEuMjUsMCwxLDEsMjEuMyw5LjUxLDMuMDgsMy4wOCwwLDAsMCwxOSw4LjQyYTMuMzUsMy4zNSwwLDAsMC0zLjIyLDMuNDZWMTdoM2ExLDEsMCwwLDEsMCwyaC0zdjIuOUE3LjY1LDcuNjUsMCwwLDEs''@;'; put 'put ''MTUsMjUuNDJIMjQuNWExLjI1LDEuMjUsMCwwLDEsMCwyLjVaIi8+JyksRi5DbHJTaGFwZVJ1cGVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsOEgyNC4xNEE3LjUyLDcuNTIsMCwwLDAsMjIuNiw2SDI4''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJIMTBhMSwxLDAsMCwwLDAsMmg3LjU1YTUuNDIsNS40MiwwLDAsMSw0LjIsMkgxMGExLDEsMCwwLDAsMCwySDIyLjc5QTUuNTQsNS41NCwwLDAsMSwyMywxMS41MSw1LjQ4LDUuNDgsMCwwLDEsMTcuNTUsMTdIMTEuMTRhMSwxLDAsMCwwLS43NSwxLjY2TDIyLjA2LDMy''@;'; put 'put ''YTEsMSwwLDEsMCwxLjUtMS4zMkwxMy4zNSwxOWg0LjIxYTcuNTEsNy41MSwwLDAsMCw3LjMtOUgyOGExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDAsMTgsMlptNS44OCw5SDI2YTEsMSwwLDAsMSwwLDJIMjQuMjZjMCwuMDYsMCwuMTIsMCwuMTlhNi4wOSw2LjA5LDAsMCwxLTYsNi4yaC0ybDYuODIsOC4wNmExLjI1LDEuMjUsMCwwLDEtMS45MSwxLjYyTDEyLjYzLDE4Ljk0YTEuMjUsMS4yNSwwLDAsMSwxLTIuMDZoNC43MWEz''@;'; put 'put ''LjU5LDMuNTksMCwwLDAsMy40OC0zLjY5YzAtLjA3LDAtLjEzLDAtLjJoLTlhMSwxLDAsMCwxLDAtMmg4LjMyYTMuNDEsMy40MSwwLDAsMC0yLjc4LTEuNUgxMi43NWExLjI1LDEuMjUsMCwwLDEsMC0yLjVIMjZhMSwxLDAsMCwxLDAsMkgyMi42OEE2LjIzLDYuMjMsMCwwLDEsMjMuODgsMTFa''@;'; put 'put ''Ii8+JyksRi5DbHJTaGFwZVdvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE4SDI4Ljc1bC41LTJIMzNhMSwxLDAsMCwwLDAtMkgyOS43NGwyLjE3LTguNzZBMSwxLDAsMCwwLDMwLDQuNzZMMjcuNjgs''@;'; put 'put ''MTRIMjEuMzFMMTksNC43NmExLDEsMCwwLDAtMS45NCwwTDE0Ljc5LDE0SDguNDJMNi4xMyw0Ljc2YTEsMSwwLDAsMC0xLjk0LjQ4TDYuMzYsMTRIM2ExLDEsMCwwLDAsMCwySDYuODVsLjUsMkgzYTEsMSwwLDAsMCwwLDJINy44NGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMTUuMzYs''@;'; put 'put ''MjBoNS4zOGwyLjc5LDExLjI0YTEsMSwwLDAsMCwxLjk0LDBMMjguMjUsMjBIMzNhMSwxLDAsMCwwLDAtMlptLTUuODItMi0uNSwySDIyLjNsLS41LTJaTTE4LDkuMTYsMTkuMjUsMTRoLTIuNFpNOC45MSwxNmg1LjM4bC0uNSwySDkuNDFaTTExLjYsMjYuODQsOS45MSwyMEgxMy4zWk0xNS44''@;'; put 'put ''NSwxOGwuNS0yaDMuMzlsLjUsMlptOC42NCw4Ljg0TDIyLjgsMjBoMy4zOVoiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHBvaW50cz0iMTcuNzQgMTYgMTcuMjIgMTggMTguODUgMTggMTguMzIgMTYgMTcuNzQgMTYiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHBvaW50cz0iMTEuOTQgMTggMTQuNjMgMTggMTUuMTYgMTYgMTEuNDEgMTYgMTEuOTQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiIHBvaW50cz0iMTMuMjkgMjMuMSAxNC4xIDIwIDEyLjQ3IDIwIDEzLjI5IDIzLjEiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHBvaW50cz0iMjEuNDQgMTggMjQuMTMgMTggMjQuNjYgMTYgMjAuOTEg''@;'; put 'put ''MTYgMjEuNDQgMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIHBvaW50cz0iMjIuNzggMjMuMSAyMy42IDIwIDIxLjk3IDIwIDIyLjc4IDIzLjEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTYiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LDIwSDI2LjE5TDI0LDI4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMMTkuMzgsMjBIMTYuNjlsLTIuMTksOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDkuODgsMjBI''@;'; put 'put ''N2ExLDEsMCwwLDEsMC0ySDkuMzVsLS41My0ySDdhMSwxLDAsMCwxLDAtMkg4LjNsLTEtMy42OGExLjI1LDEuMjUsMCwwLDEsMi40Mi0uNjRMMTAuODgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40MiwwTDIwLjM4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwx''@;'; put 'put ''LDIuNDIuNjRsLTEsMy42OEgyOWExLDEsMCwwLDEsMCwySDI3LjI0bC0uNTMsMkgyOWExLDEsMCwwLDEsMCwyWiIvPicpLEYuQ2xyU2hhcGVZZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4zNCw0LjU1''@;'; put 'put ''YTEsMSwwLDEsMC0xLjY3LTEuMUwxOCwxOC4yMyw4LjMzLDMuNDVhMSwxLDAsMCwwLTEuNjcsMS4xTDE3LDIwLjM1VjIyLjJIMTJhLjguOCwwLDAsMCwwLDEuNmg1djIuNEgxMmEuOC44LDAsMCwwLDAsMS42aDVWMzJhMSwxLDAsMCwwLDIsMFYyNy44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYy''@;'; put 'put ''My44aDVhLjguOCwwLDAsMCwwLTEuNkgxOVYyMC4zNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMDcsNy45MUwxOS43NCwyMEgyMmExLDEs''@;'; put 'put ''MCwwLDEsMCwySDE5LjI1djJIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYyLjc1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNkgxNGExLDEsMCwxLDEsMC0yaDIuNzVWMjJIMTRhMSwxLDAsMSwxLDAtMmgyLjI2TDkuOTMsOS45MWExLjI1LDEuMjUsMCwxLDEsMi4xMi0xLjMzTDE4LDE4LjA4bDUu''@;'; put 'put ''OTUtOS40OWExLjI1LDEuMjUsMCwxLDEsMi4xMiwxLjMzWiIvPicpLEYuQ2xyU2hhcGVCaXRjb2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4xMSwxNi44OEE1LjQ5LDUuNDksMCwwLDAsMjEsN1Y0YTEsMSwwLDAsMC0yLDBWN0gxNlY0YTEsMSwwLDAsMC0yLDBWN0gxMWExLDEs''@;'; put 'put ''MCwwLDAtMSwxVjI4YTEsMSwwLDAsMCwxLDFoM3YzYTEsMSwwLDAsMCwyLDBWMjloM3YzYTEsMSwwLDAsMCwyLDBWMjloLjA4QTYuMDcsNi4wNywwLDAsMCwyNywyMi44MXYtLjYyQTYuMjUsNi4yNSwwLDAsMCwyNC4xMSwxNi44OFpNMTIsOWg4LjY5YTMuNTksMy41OSwwLDAsMSwzLjQzLDIu''@;'; put 'put ''MzZBMy41MSwzLjUxLDAsMCwxLDIwLjc5LDE2SDEyWk0yNSwyMi44MUE0LjA4LDQuMDgsMCwwLDEsMjEuMDYsMjdIMTJWMThoOS4wNkE0LjA4LDQuMDgsMCwwLDEsMjUsMjIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMS4xOCwxOC40N0gxNC41djZoNi42OGEyLjcsMi43LDAsMCwwLDIuNjMtMi43N3YtLjQ4QTIuNzEsMi43MSwwLDAsMCwyMS4xOCwxOC40N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMTMuNzVh''@;'; put 'put ''Mi4yNCwyLjI0LDAsMCwwLTIuMjMtMi4yNUgxNC41VjE2aDYuM0EyLjIyLDIuMjIsMCwwLDAsMjMsMTMuNzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs''@;'; put 'put ''MTgsMlptOC4zMSwxOS43M0E1LjIyLDUuMjIsMCwwLDEsMjEuMTgsMjdIMjF2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTd2MS45YTEsMSwwLDAsMS0yLDBWMjdIMTMuMjVBMS4yNSwxLjI1LDAsMCwxLDEyLDI1Ljc1VjE3LjIzaDB2LTdBMS4yNSwxLjI1LDAsMCwxLDEzLjI1LDlIMTVWNy4wN2Ex''@;'; put 'put ''LDEsMCwwLDEsMiwwVjloMlY3LjA3YTEsMSwwLDAsMSwyLDBWOWE0LjcyLDQuNzIsMCwwLDEsMy4yLDgsNS4zMSw1LjMxLDAsMCwxLDIuMTEsNC4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUNvaW5CYWc9KDAsbS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTIxLjYsMjlhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjIuNTQsMjRoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAs''@;'; put 'put ''MCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIsMzJIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNywz''@;'; put 'put ''MmgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMy43LDI4aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjc0LDI2YTI4LDI4LDAsMCwwLTIuODItMTAuMTJBMjAuMjQsMjAuMjQsMCwwLDAsMjQuNiw4LjcxTDI3LDMuNDJhMSwxLDAsMCwwLS4wNy0xQTEsMSwwLDAsMCwyNi4xMywySDkuOGExLDEsMCwwLDAtLjkxLDEuNDJsMi40NSw1LjMxYTIwLjMz''@;'; put 'put ''LDIwLjMzLDAsMCwwLTYuMjgsNy4xNWMtMi4xNSw0LTIuODIsOC44OS0zLDEyLjI4YTMuNiwzLjYsMCwwLDAsMSwyLjcxQTMuNzksMy43OSwwLDAsMCw1LjgsMzEuOTRIMTJWMzBINS43MmExLjY4LDEuNjgsMCwwLDEtMS4yMS0uNTIsMS42MiwxLjYyLDAsMCwxLS40NS0xLjIzYy4xNC0yLjYx''@;'; put 'put ''LjY5LTcuNTgsMi43Ni0xMS40NUExOCwxOCwwLDAsMSwxMy4wOCwxMGgxYTMwLjgxLDMwLjgxLDAsMCwwLTEuODcsMi45MiwyMi43OCwyMi43OCwwLDAsMC0xLjQ3LDMuMzRsMS4zNy45MmEyNCwyNCwwLDAsMSwxLjQ5LTMuNDdBMjkuMSwyOS4xLDAsMCwxLDE2LjA1LDEwaDFhMjEuNDUsMjEu''@;'; put 'put ''NDUsMCwwLDEsMS40MSw1LDIyLjU0LDIyLjU0LDAsMCwxLC4zMiwzLjg2bDEuNTgtMS4xMWEyNC4xNSwyNC4xNSwwLDAsMC0uMzItM0EyNC44MiwyNC44MiwwLDAsMCwxOC43NiwxMGguNzhsLjkxLTJIMTMuMjFMMTEuMzYsNEgyNC41N2wtMi41LDUuNDdhOS45Myw5LjkzLDAsMCwxLDEuMjMu''@;'; put 'put ''NzgsMTguNjMsMTguNjMsMCwwLDEsNS44Niw2LjU3QTI2LjU5LDI2LjU5LDAsMCwxLDMxLjczLDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgPHBhdGggZD0iTTI0Ljg5LDI2aDcuODZjLS42Ni04LjcxLTQuNDEtMTQuMTItOS4yMi0xNy4z''@;'; put 'put ''MkwyNS43MiwzLjlhMSwxLDAsMCwwLS45MS0xLjRIMTEuMWExLDEsMCwwLDAtLjkxLDEuNGwxLjIsMi42SDIxLjUxbC0uOSwySDE4Ljc2QTI0LjksMjQuOSwwLDAsMSwyMCwxMy4xOWEyNC40OSwyNC40OSwwLDAsMSwuMzIsM2wtMS41OCwxLjExYTIyLjU0LDIyLjU0LDAsMCwwLS4zMi0zLjg2''@;'; put 'put ''QTIxLjc0LDIxLjc0LDAsMCwwLDE3LDguNWgtMWEyOC4yMiwyOC4yMiwwLDAsMC0yLjQ4LDMuNywyMy45MSwyMy45MSwwLDAsMC0xLjQ5LDMuNDZsLTEuMzctLjkxYTIyLjc4LDIyLjc4LDAsMCwxLDEuNDctMy4zNEEzMC44MSwzMC44MSwwLDAsMSwxNC4wNSw4LjVIMTIuM2wuMDguMTdDNy4w''@;'; put 'put ''OCwxMi4yLDMuMDUsMTguNCwzLjA1LDI4Ljc1QTEuNjUsMS42NSwwLDAsMCw0LjYxLDMwLjVoOEEyLjY3LDIuNjcsMCwwLDEsMTQuMjEsMjZhMi42NywyLjY3LDAsMCwxLS4zNy0xLjM0LDIuNywyLjcsMCwwLDEsMi43LTIuN2g2YTIuNywyLjcsMCwwLDEsMi43LDIuN0EyLjYzLDIuNjMsMCww''@;'; put 'put ''LDEsMjQuODksMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS42LDI4LjVhMSwxLDAsMCwwLTEtMWgtNmExLDEsMCwwLDAsMCwyaDZBMSwxLDAsMCwwLDIxLjYsMjguNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIC8+PHBhdGggZD0iTTIyLjU0LDIzLjVoLTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwzMS41SDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuNywzMS41aC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNywyNy41aC03YTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''N2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlUGVzbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTMuMkgyNy44OUE2LjgxLDYuODEsMCwwLDAsMjgsMTJhNy44NSw3Ljg1LDAsMCwwLS4xLTEuMTlo''@;'; put 'put ''Mi45M2EuOC44LDAsMCwwLDAtMS42SDI3LjQ2QTguNDQsOC40NCwwLDAsMCwxOS41Nyw0SDExYTEsMSwwLDAsMC0xLDFWOS4ySDdhLjguOCwwLDAsMCwwLDEuNmgzdjIuNEg3YS44LjgsMCwwLDAsMCwxLjZoM1YzMWExLDEsMCwwLDAsMiwwVjIwaDcuNTdhOC40NSw4LjQ1LDAsMCwwLDcuODkt''@;'; put 'put ''NS4ySDMxYS44LjgsMCwwLDAsMC0xLjZaTTEyLDZoNy41N2E2LjUxLDYuNTEsMCwwLDEsNS42OCwzLjJIMTJabTAsNC44SDI1Ljg3YTUuNiw1LjYsMCwwLDEsMCwyLjRIMTJaTTE5LjU3LDE4SDEyVjE0LjhIMjUuMjVBNi41MSw2LjUxLDAsMCwxLDE5LjU3LDE4WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4LDEzLjhWMTZoOS40NWE1LjI2LDUuMjYsMCwwLDAsLjA4LS44OSw0LjcyLDQuNzIsMCwwLDAtLjItMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE0LjE4''@;'; put 'put ''LDE5LjdoNS4xOWE0LjI4LDQuMjgsMCwwLDAsMy41LTEuOUgxNC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LjM3LDEwLjUxSDE0LjE4VjEyaDguMzdBNC4yMSw0LjIxLDAsMCwwLDE5LjM3LDEwLjUxWiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNjcsMmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxNy42NywyWm0xMC41LDE1LjhIMjUuN2E2Ljg3LDYuODcsMCwwLDEtNi4zMyw0LjRIMTQuMTh2Ni41NGExLjI1LDEuMjUsMCwxLDEtMi41LDBWMTcuOEg4Ljc2''@;'; put 'put ''YS45LjksMCwxLDEsMC0xLjhoMi45MlYxMy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjkuMjZBMS4yNSwxLjI1LDAsMCwxLDEyLjkzLDhoNi40NGE2Ljg0LDYuODQsMCwwLDEsNi4xNSw0aDIuNjVhLjkuOSwwLDAsMSwwLDEuOEgyNi4wOWE2LjkxLDYuOTEsMCwwLDEsLjEyLDEuMyw2''@;'; put 'put ''LjgsNi44LDAsMCwxLS4wNi45aDJhLjkuOSwwLDAsMSwwLDEuOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVJ1YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC41NywyMEE4LjIzLDguMjMsMCwwLDAsMjksMTJhOC4yMyw4''@;'; put 'put ''LjIzLDAsMCwwLTguNDMtOEgxMmExLDEsMCwwLDAtMSwxVjE4SDlhMSwxLDAsMCwwLDAsMmgydjJIOWExLDEsMCwwLDAsMCwyaDJ2N2ExLDEsMCwwLDAsMiwwVjI0aDlhMSwxLDAsMCwwLDAtMkgxM1YyMFpNMTMsNmg3LjU3QTYuMjQsNi4yNCwwLDAsMSwyNywxMmE2LjIzLDYuMjMsMCwwLDEt''@;'; put 'put ''Ni40Myw2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIwLjc1LDkuMjVIMTV2OC44MWg1Ljc5YTQuNjYsNC42NiwwLDAsMCw0Ljg2LTQuNEE0LjY1LDQuNjUsMCwwLDAsMjAuNzUsOS4yNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMi43NSwxOC41NkgxNVYyMmg4LjI5YTEsMSwwLDAsMSwwLDJIMTV2NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjRIMTEuMjVhMSwxLDAsMCwxLDAtMmgxLjIxVjIw''@;'; put 'put ''LjU2SDExLjI1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNWgxLjIxVjhhMS4yNSwxLjI1LDAsMCwxLDEuMjUtMS4yNWg3YTcuMTQsNy4xNCwwLDAsMSw3LjM2LDYuOUE3LjE1LDcuMTUsMCwwLDEsMjAuNzUsMjAuNTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0LDMuNzQsMCwwLDAsMTgu''@;'; put 'put ''NDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MiwxNi4zMWE1LjcsNS43LDAsMSwxLDUuNzYtNS43QTUuNzQsNS43NCwwLDAsMSwxOC40MiwxNi4zMVptMC05LjRhMy43LDMuNywwLDEsMCwzLjc2LDMuN0EzLjc0''@;'; put 'put ''LDMuNzQsMCwwLDAsMTguNDIsNi45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS45MSwxNy42NWEyMC42LDIwLjYsMCwwLDAtMTMsMkExLjc3LDEuNzcsMCwwLDAsOCwyMS4yNXYzLjU2YTEsMSwwLDAsMCwyLDBWMjEuMzhh''@;'; put 'put ''MTguOTIsMTguOTIsMCwwLDEsMTItMS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMywyMkgyNi4zVjIwLjUyYTEsMSwwLDAsMC0yLDBWMjJIMTdhMSwxLDAsMCwwLTEsMVYzM2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAs''@;'; put 'put ''MCwxLTFWMjNBMSwxLDAsMCwwLDMzLDIyWk0zMiwzMkgxOFYyNGg2LjN2LjQxYTEsMSwwLDAsMCwyLDBWMjRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cmVjdCB4PSIyMS44MSIgeT0iMjcuNDIiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEwLjg0LDEyLjI0YTE4LDE4LDAsMCwwLTcuOTUsMkExLjY3LDEuNjcsMCwwLDAsMiwxNS43MXYzLjFhMSwxLDAsMCwwLDIsMHYtMi45YTE2LDE2LDAsMCwxLDcuNTgtMS42N0E3LjI4''@;'; put 'put ''LDcuMjgsMCwwLDEsMTAuODQsMTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzMuMTEsMTQuMjNhMTcuOCwxNy44LDAsMCwwLTcuMTItMiw3LjQ2LDcuNDYsMCwwLDEtLjczLDJBMTUuODksMTUuODksMCwwLDEsMzIsMTUu''@;'; put 'put ''OTF2Mi45YTEsMSwwLDEsMCwyLDB2LTMuMUExLjY3LDEuNjcsMCwwLDAsMzMuMTEsMTQuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cGF0aCBkPSJNMTAuNjYsMTAuNjFjMC0uMjMsMC0uNDUsMC0uNjdhMy4wNywzLjA3LDAsMCwxLC41NC02''@;'; put 'put ''LjExLDMuMTUsMy4xNSwwLDAsMSwyLjIuODksOC4xNiw4LjE2LDAsMCwxLDEuNy0xLjA4LDUuMTMsNS4xMywwLDAsMC05LDMuMjcsNS4xLDUuMSwwLDAsMCw0LjcsNUE3LjQyLDcuNDIsMCwwLDEsMTAuNjYsMTAuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''OCIvPlxuICA8cGF0aCBkPSJNMjQuNzcsMS44M2E1LjE3LDUuMTcsMCwwLDAtMy42OSwxLjU1LDcuODcsNy44NywwLDAsMSwxLjksMSwzLjE0LDMuMTQsMCwwLDEsNC45MywyLjUyLDMuMDksMy4wOSwwLDAsMS0xLjc5LDIuNzcsNy4xNCw3LjE0LDAsMCwxLC4wNi45Myw3Ljg4LDcuODgsMCww''@;'; put 'put ''LDEtLjEsMS4yLDUuMSw1LjEsMCwwLDAsMy44My00LjlBNS4xMiw1LjEyLDAsMCwwLDI0Ljc3LDEuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICBcbiAgPGVsbGlwc2UgY3g9IjE4IiBjeT0iMTEuMjgiIHJ4PSI0Ljc2IiByeT0iNC43IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxMS43NWMuMTYsMCwuMzIsMCwuNDgsMCwwLS4xNSwwLS4yOCwwLS40M2E2LjcsNi43LDAsMCwxLDMuNzUtNiw0LjYyLDQuNjIsMCwxLDAtNC4yMSw2LjQ2WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjQuNzYsMTEuMjhjMCwuMTUsMCwuMjgsMCwuNDMuMTYsMCwuMzIsMCwuNDgsMEE0LjU4LDQuNTgsMCwxLDAsMjEsNS4yOSw2LjcsNi43LDAsMCwxLDI0Ljc2LDExLjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjIuMjksMTYuNDVhMjEuNDUsMjEuNDUsMCwwLDEsNS43MSwyLDIuNzEsMi43MSwwLDAsMSwuNjguNTNIMzRWMTUuNTZhLjcyLjcyLDAsMCwwLS4zOC0uNjQsMTgsMTgsMCwwLDAtOC40LTIuMDVsLS42NiwwQTYuNjYsNi42NiwwLDAsMSwyMi4yOSwx''@;'; put 'put ''Ni40NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTYuNTMsMjAuOTJBMi43NiwyLjc2LDAsMCwxLDgsMTguNDdhMjEuNDUsMjEuNDUsMCwwLDEsNS43MS0yLDYuNjYsNi42NiwwLDAsMS0yLjI3LTMuNTVsLS42NiwwYTE4LDE4LDAsMCww''@;'; put 'put ''LTguNCwyLjA1LjcyLjcyLDAsMCwwLS4zOC42NFYyMkg2LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIyMS40NiIgeT0iMjYuNjkiIHdpZHRoPSI1Ljk2IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMzIuODEsMjEuMjZIMjUuOTR2LTFhMSwxLDAsMCwwLTIsMHYxSDIyVjE4LjQzQTIwLjE3LDIwLjE3LDAsMCwwLDE4LDE4YTE5LjI3LDE5LjI3LDAsMCwwLTkuMDYsMi4yMi43Ni43NiwwLDAsMC0uNDEuNjh2NS42MWg3LjExdjYuMDlhMSwxLDAsMCww''@;'; put 'put ''LDEsMUgzMi44MWExLDEsMCwwLDAsMS0xVjIyLjI2QTEsMSwwLDAsMCwzMi44MSwyMS4yNlptLTEsMTAuMzZIMTcuNjRWMjMuMjZoNi4zdi45MWExLDEsMCwwLDAsMiwwdi0uOTFoNS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTciLz4nKSxGLkNsclNoYXBlRW1w''@;'; put 'put ''bG95ZWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LjQzLDE2LjY5YTcsNywwLDEsMSw3LTdBNyw3LDAsMCwxLDE2LjQzLDE2LjY5Wm0wLTExLjkyYTUsNSwwLDEsMCw1LDVBNSw1LDAsMCwwLDE2LjQzLDQuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICA8cGF0aCBkPSJNMjIsMTcuOUEyNS40MSwyNS40MSwwLDAsMCw1Ljg4LDE5LjU3YTQuMDYsNC4wNiwwLDAsMC0yLjMxLDMuNjhWMjkuMmExLDEsMCwxLDAsMiwwVjIzLjI1YTIsMiwwLDAsMSwxLjE2LTEuODYsMjIuOTEsMjIuOTEsMCwwLDEsOS43LTIuMTEsMjMuNTgsMjMu''@;'; put 'put ''NTgsMCwwLDEsNS41Ny42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIyLjE0IiB5PSIyNy40MSIgd2lkdGg9IjYuMTQiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzMuMTcsMjEuNDdIMjh2Mmg0LjE3djguMzdIMThWMjMuNDdoNi4zdi40MmExLDEsMCwwLDAsMiwwVjIwYTEsMSwwLDAsMC0yLDB2MS40N0gxN2ExLDEsMCwwLDAtMSwxVjMyLjg0YTEsMSwwLDAsMCwxLDFIMzMuMTdhMSwxLDAsMCwwLDEtMVYyMi40N0ExLDEsMCwwLDAs''@;'; put 'put ''MzMuMTcsMjEuNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICBcbiAgPGNpcmNsZSBjeD0iMTYuODYiIGN5PSI5LjczIiByPSI2LjQ2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIxIiB5PSIy''@;'; put 'put ''OCIgd2lkdGg9IjciIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xNSwzMHYzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM2ExLDEsMCwwLDAtMS0xSDI2VjIwLjUzYTEsMSwwLDAsMC0yLDBWMjJIMjJW''@;'; put 'put ''MTguNDJBMzIuMTIsMzIuMTIsMCwwLDAsMTYuODYsMThhMjYsMjYsMCwwLDAtMTEsMi4zOSwzLjI4LDMuMjgsMCwwLDAtMS44OCwzVjMwWm0xNywySDE3VjI0aDd2LjQyYTEsMSwwLDAsMCwyLDBWMjRoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNs''@;'; put 'put ''clNoYXBlRmFjdG9yeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDcsNy4zN2ExLDEsMCwwLDAtMSwuMDZMMjMsMTMuNzdWOC4yNmExLDEsMCwwLDAtMS42NC0uNzdMMTMuNDgsMTRIMTBWNC42MmExLDEsMCwwLDAtLjc4LTFsLTQtLjlhMSwxLDAsMCwwLS44NS4yQTEsMSwwLDAs''@;'; put 'put ''MCw0LDMuNzNWMTRIM2ExLDEsMCwwLDAtMSwxVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY4LjI2QTEsMSwwLDAsMCwzMy40Nyw3LjM3Wk02LDVsMiwuNDRWMTRINlpNMzIsMzBINFYxNmg5LjgzYTEsMSwwLDAsMCwuNjQtLjIzTDIxLDEwLjM3djUuMjhhMSwxLDAsMCwwLDEu''@;'; put 'put ''NTYuODNMMzIsMTAuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSI2IiB5PSIxNy45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0i''@;'; put 'put ''NiIgeT0iMjEuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjI1Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjI0Ljk5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zMi40NSw4LjQ0LDIyLDE1LjNWOS41MWExLDEsMCwwLDAtMS42My0uNzhMMTQuMDcsMTRIMTBWNC4wNkw0LDIuNzFWMTRIMlYzMWExLDEsMCwwLDAs''@;'; put 'put ''MSwxSDMzYTEsMSwwLDAsMCwxLTFWOS4yN0ExLDEsMCwwLDAsMzIuNDUsOC40NFpNMTQsMjlINlYyN2g4Wm0wLTRINlYyM2g4Wm0wLTRINlYxOWg4Wm04LDhIMjBWMjZoMlptMC02SDIwVjIwaDJabTQsNkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptNCw2SDI4VjI2aDJabTAtNkgyOFYyMGgyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuQ29tbWVyY2VTaGFwZXM9e2NhbGN1bGF0b3I6Ri5DbHJTaGFwZUNhbGN1bGF0b3IsInBpZ2d5LWJhbmsiOkYuQ2xyU2hhcGVQaWdneUJhbmssInNob3BwaW5nLWJhZyI6Ri5DbHJTaGFwZVNob3BwaW5nQmFnLCJz''@;'; put 'put ''aG9wcGluZy1jYXJ0IjpGLkNsclNoYXBlU2hvcHBpbmdDYXJ0LHdhbGxldDpGLkNsclNoYXBlV2FsbGV0LHN0b3JlOkYuQ2xyU2hhcGVTdG9yZSxldXJvOkYuQ2xyU2hhcGVFdXJvLGRvbGxhcjpGLkNsclNoYXBlRG9sbGFyLHBlc286Ri5DbHJTaGFwZVBlc28sImNyZWRpdC1jYXJkIjpGLkNs''@;'; put 'put ''clNoYXBlQ3JlZGl0Q2FyZCxiYW5rOkYuQ2xyU2hhcGVCYW5rLCJkb2xsYXItYmlsbCI6Ri5DbHJTaGFwZURvbGxhckJpbGwsImUtY2hlY2siOkYuQ2xyU2hhcGVFQ2hlY2sscG91bmQ6Ri5DbHJTaGFwZVBvdW5kLHJ1cGVlOkYuQ2xyU2hhcGVSdXBlZSx3b246Ri5DbHJTaGFwZVdvbix5ZW46''@;'; put 'put ''Ri5DbHJTaGFwZVllbixiaXRjb2luOkYuQ2xyU2hhcGVCaXRjb2luLHJ1YmxlOkYuQ2xyU2hhcGVSdWJsZSwiY29pbi1iYWciOkYuQ2xyU2hhcGVDb2luQmFnLCJlbXBsb3llZS1ncm91cCI6Ri5DbHJTaGFwZUVtcGxveWVlR3JvdXAsZW1wbG95ZWU6Ri5DbHJTaGFwZUVtcGxveWVlLGZhY3Rv''@;'; put 'put ''cnk6Ri5DbHJTaGFwZUZhY3Rvcnl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvbW1lcmNlU2hhcGVzLCJzYXZpbmdzIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29tbWVyY2VTaGFwZXNbInBpZ2d5LWJhbmsiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLkNvbW1lcmNlU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpc''@;'; put 'put ''CiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMg''@;'; put 'put ''Zm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuQ29yZVNoYXBlcz1GLkNsclNoYXBlQXJyb3c9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1GLkNsclNoYXBlRXllSGlkZT1GLkNsclNo''@;'; put 'put ''YXBlRXllPUYuQ2xyU2hhcGVFdmVudD1GLkNsclNoYXBlQ2FsZW5kYXI9Ri5DbHJTaGFwZUFuZ2xlRG91YmxlPUYuQ2xyU2hhcGVWaWV3Q29sdW1ucz1GLkNsclNoYXBlU2VhcmNoPUYuQ2xyU2hhcGVWbUJ1Zz1GLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1GLkNsclNoYXBlRmlsdGVyR3Jp''@;'; put 'put ''ZD1GLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1GLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPUYuQ2xyU2hhcGVDbG91ZD1GLkNsclNoYXBlSW1hZ2U9Ri5DbHJTaGFwZUJlbGw9Ri5DbHJTaGFwZUZvbGRlck9wZW49Ri5DbHJTaGFwZUZvbGRlcj1GLkNsclNoYXBlQW5nbGU9Ri5DbHJT''@;'; put 'put ''aGFwZVVzZXI9Ri5DbHJTaGFwZUJhcnM9Ri5DbHJTaGFwZUhlbHBJbmZvPUYuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ri5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1GLkNsclNoYXBlSW5mb1N0YW5kYXJkPUYuQ2xyU2hhcGVJbmZvQ2lyY2xlPUYu''@;'; put 'put ''Q2xyU2hhcGVDaGVja0NpcmNsZT1GLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ri5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ri5DbHJTaGFwZVRpbWVzPUYuQ2xyU2hhcGVDaGVjaz1GLkNsclNoYXBlQ29nPUYuQ2xyU2hhcGVIb21lPUYuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZv''@;'; put 'put ''aWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp''@;'; put 'put ''bHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4z''@;'; put 'put ''Miw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywx''@;'; put 'put ''M1oiLz4nKSxGLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEs''@;'; put 'put ''MzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTkuNzZaIi8+JyksRi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0x''@;'; put 'put ''OC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEu''@;'; put 'put ''NWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4z''@;'; put 'put ''LTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFs''@;'; put 'put ''MC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwy''@;'; put 'put ''LjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwy''@;'; put 'put ''OC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41''@;'; put 'put ''LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwx''@;'; put 'put ''LjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwx''@;'; put 'put ''OGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44''@;'; put 'put ''LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0w''@;'; put 'put ''LjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4x''@;'; put 'put ''LTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUs''@;'; put 'put ''MS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3''@;'; put 'put ''LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIu''@;'; put 'put ''NCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0w''@;'; put 'put ''LjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4x''@;'; put 'put ''bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0w''@;'; put 'put ''LjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMu''@;'; put 'put ''MiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUu''@;'; put 'put ''MkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIu''@;'; put 'put ''NmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMs''@;'; put 'put ''MS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEs''@;'; put 'put ''Nyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAu''@;'; put 'put ''NC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42''@;'; put 'put ''NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDEx''@;'; put 'put ''LjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywx''@;'; put 'put ''YTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAs''@;'; put 'put ''MCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40''@;'; put 'put ''My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i''@;'; put 'put ''YWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQz''@;'; put 'put ''bC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCww''@;'; put 'put ''LDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNo''@;'; put 'put ''My4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0x''@;'; put 'put ''YS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40''@;'; put 'put ''SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCww''@;'; put 'put ''LTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDEx''@;'; put 'put ''LjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQz''@;'; put 'put ''bDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYu''@;'; put 'put ''MzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxGLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEu''@;'; put 'put ''NDFaIi8+JyksRi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2''@;'; put 'put ''QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEs''@;'; put 'put ''MCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3''@;'; put 'put ''LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0x''@;'; put 'put ''LjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxGLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAs''@;'; put 'put ''MCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEu''@;'; put 'put ''MywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEu''@;'; put 'put ''NzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxGLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCww''@;'; put 'put ''LDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwz''@;'; put 'put ''LjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQs''@;'; put 'put ''MCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLEYuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMi''@;'; put 'put ''IGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEs''@;'; put 'put ''MSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxGLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIg''@;'; put 'put ''Y3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEu''@;'; put 'put ''NCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxGLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksRi5DbHJTaGFwZUVycm9yU3RhbmRh''@;'; put 'put ''cmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQs''@;'; put 'put ''MTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs''@;'; put 'put ''MCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksRi5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwx''@;'; put 'put ''LDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2''@;'; put 'put ''MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1''@;'; put 'put ''LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEu''@;'; put 'put ''MjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3''@;'; put 'put ''NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBD''@;'; put 'put ''MzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwy''@;'; put 'put ''LjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEs''@;'; put 'put ''My42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwx''@;'; put 'put ''LDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLEYuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEt''@;'; put 'put ''LjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0x''@;'; put 'put ''LjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4z''@;'; put 'put ''LDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0''@;'; put 'put ''LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4''@;'; put 'put ''LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0x''@;'; put 'put ''Miw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4y''@;'; put 'put ''NWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0''@;'; put 'put ''LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxGLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pN''@;'; put 'put ''MjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0''@;'; put 'put ''VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUy''@;'; put 'put ''YTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAs''@;'; put 'put ''MCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt''@;'; put 'put ''NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcs''@;'; put 'put ''NywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2''@;'; put 'put ''TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxGLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiww''@;'; put 'put ''LDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEt''@;'; put 'put ''MS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBk''@;'; put 'put ''PSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgx''@;'; put 'put ''Ni40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs''@;'; put 'put ''MCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs''@;'; put 'put ''MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBk''@;'; put 'put ''PSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcy''@;'; put 'put ''LDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCww''@;'; put 'put ''LDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMu''@;'; put 'put ''NzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43''@;'; put 'put ''MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDks''@;'; put 'put ''NUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW''@;'; put 'put ''MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYu''@;'; put 'put ''NDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQs''@;'; put 'put ''MS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAs''@;'; put 'put ''MCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEy''@;'; put 'put ''LjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0y''@;'; put 'put ''LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs''@;'; put 'put ''NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksRi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0x''@;'; put 'put ''LjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45Mywx''@;'; put 'put ''LDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAs''@;'; put 'put ''MSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs''@;'; put 'put ''MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgs''@;'; put 'put ''MzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYz''@;'; put 'put ''LDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUu''@;'; put 'put ''MTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAs''@;'; put 'put ''MCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwx''@;'; put 'put ''LDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgx''@;'; put 'put ''LDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0z''@;'; put 'put ''LjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2''@;'; put 'put ''VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCww''@;'; put 'put ''LDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSww''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywz''@;'; put 'put ''LDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEs''@;'; put 'put ''MS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksRi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwy''@;'; put 'put ''OSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywy''@;'; put 'put ''OCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3''@;'; put 'put ''LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDkt''@;'; put 'put ''MS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMx''@;'; put 'put ''LDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0''@;'; put 'put ''LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwz''@;'; put 'put ''NSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42''@;'; put 'put ''NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4y''@;'; put 'put ''OSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCww''@;'; put 'put ''LDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRWxsaXBz''@;'; put 'put ''aXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIx''@;'; put 'put ''OCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEi''@;'; put 'put ''IHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+''@;'; put 'put ''JyksRi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAs''@;'; put 'put ''MC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4x''@;'; put 'put ''Mi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxGLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5''@;'; put 'put ''LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCww''@;'; put 'put ''LDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksRi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRp''@;'; put 'put ''b246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1''@;'; put 'put ''LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4x''@;'; put 'put ''NSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45Mywz''@;'; put 'put ''LjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUs''@;'; put 'put ''MTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4y''@;'; put 'put ''NywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIg''@;'; put 'put ''ZmlsbD0iI2ZmZmZmZiIvPicpLEYuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4w''@;'; put 'put ''NW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAs''@;'; put 'put ''MSwwLDM1LDMzLjI5WiIvPicpLEYuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksRi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43''@;'; put 'put ''MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWEx''@;'; put 'put ''LDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLEYuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1''@;'; put 'put ''LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIy''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEw''@;'; put 'put ''YTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwx''@;'; put 'put ''LDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1''@;'; put 'put ''LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIx''@;'; put 'put ''OSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwy''@;'; put 'put ''LDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9Ijgi''@;'; put 'put ''IHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4y''@;'; put 'put ''LDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVI''@;'; put 'put ''OFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwx''@;'; put 'put ''LDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDks''@;'; put 'put ''M1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgt''@;'; put 'put ''NEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRo''@;'; put 'put ''MlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJa''@;'; put 'put ''bTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxGLkNsclNoYXBlRXZlbnQ9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAs''@;'; put 'put ''MCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEs''@;'; put 'put ''MjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJW''@;'; put 'put ''MzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEs''@;'; put 'put ''MSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAs''@;'; put 'put ''LjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYg''@;'; put 'put ''MTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW''@;'; put 'put ''MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcu''@;'; put 'put ''OCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiww''@;'; put 'put ''LDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0x''@;'; put 'put ''VjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwt''@;'; put 'put ''OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAs''@;'; put 'put ''MCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMs''@;'; put 'put ''MTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41''@;'; put 'put ''QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMu''@;'; put 'put ''NVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4''@;'; put 'put ''bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQy''@;'; put 'put ''LDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0''@;'; put 'put ''Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywy''@;'; put 'put ''LDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjgu''@;'; put 'put ''NTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0''@;'; put 'put ''LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2''@;'; put 'put ''LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCww''@;'; put 'put ''LDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1''@;'; put 'put ''bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgu''@;'; put 'put ''MzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5''@;'; put 'put ''LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTku''@;'; put 'put ''OTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIz''@;'; put 'put ''LDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2Ex''@;'; put 'put ''Ny4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxGLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcu''@;'; put 'put ''MTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43''@;'; put 'put ''VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDgu''@;'; put 'put ''MzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksRi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0''@;'; put 'put ''dXMiOkYuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ri5DbHJTaGFwZUhvbWUsY29nOkYuQ2xyU2hhcGVDb2csY2hlY2s6Ri5DbHJTaGFwZUNoZWNrLHRpbWVzOkYuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJl''@;'; put 'put ''eGNsYW1hdGlvbi1jaXJjbGUiOkYuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpGLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpGLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Ri5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vz''@;'; put 'put ''cy1zdGFuZGFyZCI6Ri5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOkYuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpGLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOkYuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOkYuQ2xy''@;'; put 'put ''U2hhcGVCYXJzLHVzZXI6Ri5DbHJTaGFwZVVzZXIsYW5nbGU6Ri5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpGLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ri5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpGLkNsclNoYXBlQmVsbCxpbWFnZTpGLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ri5DbHJT''@;'; put 'put ''aGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpGLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ri5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpGLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpG''@;'; put 'put ''LkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpGLkNsclNoYXBlVm1CdWcsc2VhcmNoOkYuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ri5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOkYuQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpGLkNsclNo''@;'; put 'put ''YXBlQ2FsZW5kYXIsZXZlbnQ6Ri5DbHJTaGFwZUV2ZW50LGV5ZTpGLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ri5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpGLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OkYuQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KEYuQ29yZVNoYXBlcywiaG91c2UiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KEYuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMudGltZXMpKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImVycm9yIiwoMCx4LmRlc2NyaXB0b3JD''@;'; put 'put ''b25maWcpKEYuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJpbmZvIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNv''@;'; put 'put ''cmVTaGFwZXMsIm1lbnUiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoRi5Db3JlU2hhcGVzLCJjYXJldCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuQ29yZVNo''@;'; put 'put ''YXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEll''@;'; put 'put ''LEYsYWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5DbHJTaGFwZUxvZ291dD1GLkNsclNoYXBlTG9naW49Ri5DbHJTaGFwZUhlbHA9Ri5DbHJTaGFwZUNvcHk9Ri5DbHJTaGFwZUNoaWxkQXJyb3c9Ri5DbHJTaGFwZUNp''@;'; put 'put ''cmNsZUFycm93PUYuQ2xyU2hhcGVBbGFybUNsb2NrPUYuQ2xyU2hhcGVDbG9jaz1GLkNsclNoYXBlSGlzdG9yeT1GLkNsclNoYXBlVGFncz1GLkNsclNoYXBlVGFnPUYuQ2xyU2hhcGVUcmFzaD1GLkNsclNoYXBlVGltZXNDaXJjbGU9Ri5DbHJTaGFwZUJhbj1GLkNsclNoYXBlUGx1c0NpcmNs''@;'; put 'put ''ZT1GLkNsclNoYXBlTWludXNDaXJjbGU9Ri5DbHJTaGFwZU1pbnVzPUYuQ2xyU2hhcGVQbHVzPUYuQ2xyU2hhcGVGaWxlPUYuQ2xyU2hhcGVQaW49Ri5DbHJTaGFwZUZpbHRlcj1GLkNsclNoYXBlUG9wT3V0PUYuQ2xyU2hhcGVVc2Vycz1GLkNsclNoYXBlVW5sb2NrPUYuQ2xyU2hhcGVMb2Nr''@;'; put 'put ''PUYuQ2xyU2hhcGVVcGxvYWQ9Ri5DbHJTaGFwZURvd25sb2FkPUYuQ2xyU2hhcGVMaWdodGJ1bGI9Ri5DbHJTaGFwZVZpZXdDYXJkcz1GLkNsclNoYXBlVmlld0xpc3Q9Ri5DbHJTaGFwZVN5bmM9Ri5DbHJTaGFwZVJlZnJlc2g9Ri5DbHJTaGFwZU5vdGU9Ri5DbHJTaGFwZVBlbmNpbD1GLkNs''@;'; put 'put ''clNoYXBlVGhlcm1vbWV0ZXI9Ri5DbHJTaGFwZUJ1Zz1GLkNsclNoYXBlU2Npc3NvcnM9Ri5DbHJTaGFwZUFzdGVyaXNrPUYuQ2xyU2hhcGVCb29rPUYuQ2xyU2hhcGVPYmplY3RzPUYuQ2xyU2hhcGVSZXNpemU9Ri5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz1GLkNsclNoYXBlQ3Vyc29ySGFu''@;'; put 'put ''ZD1GLkNsclNoYXBlQ3Vyc29yQXJyb3c9Ri5DbHJTaGFwZUdyaWRWaWV3PUYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj1GLkNsclNoYXBlTmV3PUYuQ2xyU2hhcGVBbGFybU9mZj1GLkNsclNoYXBlUGluYm9hcmQ9Ri5DbHJTaGFwZUFkZFRleHQ9dm9pZCAwLEYuQ2xyU2hhcGVDbG9uZT1G''@;'; put 'put ''LkNsclNoYXBlQ3Vyc29yTW92ZT1GLkNsclNoYXBlV2FuZD1GLkNsclNoYXBlU3VuPUYuQ2xyU2hhcGVNb29uPUYuQ2xyU2hhcGVGaWx0ZXIyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlPUYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQ9Ri5DbHJTaGFwZUNvbG9yUGlja2VyPUYuQ2xyU2hhcGVCcmll''@;'; put 'put ''ZmNhc2U9Ri5DbHJTaGFwZUV4cGFuZENhcmQ9Ri5DbHJTaGFwZUNvbGxhcHNlQ2FyZD1GLkNsclNoYXBlU29ydEJ5PUYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Mj1GLkNsclNoYXBlQWNjZXNzaWJpbGl0eTE9Ri5DbHJTaGFwZVNocmluaz1GLkNsclNoYXBlUGFwZXJjbGlwPUYuQ2xyU2hhcGVG''@;'; put 'put ''aWxlR3JvdXA9Ri5DbHJTaGFwZVJlcGVhdD1GLkNsclNoYXBlSWRCYWRnZT1GLkNsclNoYXBlQmFsYW5jZT1GLkNsclNoYXBlT3JnYW5pemF0aW9uPUYuQ2xyU2hhcGVOb0FjY2Vzcz1GLkNsclNoYXBlSG91cmdsYXNzPUYuQ2xyU2hhcGVGbGFtZT1GLkNsclNoYXBlVGFyZ2V0PUYuQ2xyU2hh''@;'; put 'put ''cGVCdWxsc2V5ZT1GLkNsclNoYXBlV3JlbmNoPUYuQ2xyU2hhcGVCb2x0PUYuQ2xyU2hhcGVMaWJyYXJ5PUYuQ2xyU2hhcGVLZXk9Ri5DbHJTaGFwZVpvb21PdXQ9Ri5DbHJTaGFwZVpvb21Jbj1GLkNsclNoYXBlV2luZG93UmVzdG9yZT1GLkNsclNoYXBlV2luZG93TWluPUYuQ2xyU2hhcGVX''@;'; put 'put ''aW5kb3dNYXg9Ri5DbHJTaGFwZVdpbmRvd0Nsb3NlPUYuQ2xyU2hhcGVUb29scz1GLkNsclNoYXBlU3dpdGNoPUYuQ2xyU2hhcGVUd29XYXlBcnJvd3M9Ri5DbHJTaGFwZUZpbGVTZXR0aW5ncz1GLkNsclNoYXBlU2Nyb2xsPUYuQ2xyU2hhcGVVbmRvPUYuQ2xyU2hhcGVSZWRvPUYuQ2xyU2hh''@;'; put 'put ''cGVMaXN0PUYuQ2xyU2hhcGVGaXJld2FsbD1GLkNsclNoYXBlQ2xpcGJvYXJkPUYuQ2xyU2hhcGVTbGlkZXI9Ri5DbHJTaGFwZVdvcmxkPUYuQ2xyU2hhcGVQcmludGVyPXZvaWQgMCxGLkVzc2VudGlhbFNoYXBlcz1GLkNsclNoYXBlQ29sb3JQYWxldHRlPUYuQ2xyU2hhcGVGaXJzdEFpZD1G''@;'; put 'put ''LkNsclNoYXBlQmV0YT1GLkNsclNoYXBlRG90Q2lyY2xlPUYuQ2xyU2hhcGVDaXJjbGU9Ri5DbHJTaGFwZUNyb3NzaGFpcnM9Ri5DbHJTaGFwZVZvbHVtZT1GLkNsclNoYXBlVGFibGU9Ri5DbHJTaGFwZVNub3dmbGFrZT1GLkNsclNoYXBlRnVlbD1GLkNsclNoYXBlRm9ybT1GLkNsclNoYXBl''@;'; put 'put ''RmlzaD1GLkNsclNoYXBlVHJlZT1GLkNsclNoYXBlUmVjeWNsZT1GLkNsclNoYXBlRmlsdGVyT2ZmPUYuQ2xyU2hhcGVGaWxlWmlwPUYuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj1GLkNsclNoYXBlQ3Vyc29ySGFuZEdyYWI9Ri5DbHJTaGFwZVRyZWVWaWV3PUYuQ2xyU2hhcGVQb3J0cmFpdD1G''@;'; put 'put ''LkNsclNoYXBlUGFzdGU9Ri5DbHJTaGFwZUxhbmRzY2FwZT1GLkNsclNoYXBlRXJhc2VyPUYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPUYuQ2xyU2hhcGVEZXRhaWxzPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsZT1hZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO0YuQ2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYz''@;'; put 'put ''LjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxGLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMz''@;'; put 'put ''LjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUx''@;'; put 'put ''LDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjlj''@;'; put 'put ''Ljc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAs''@;'; put 'put ''MCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTIt''@;'; put 'put ''Ljg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLEYuQ2xyU2hh''@;'; put 'put ''cGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40''@;'; put 'put ''NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIu''@;'; put 'put ''NzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0''@;'; put 'put ''LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEu''@;'; put 'put ''NDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1''@;'; put 'put ''LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wx''@;'; put 'put ''NywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43''@;'; put 'put ''Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQu''@;'; put 'put ''MTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLEYuQ2xyU2hhcGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkz''@;'; put 'put ''LDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIu''@;'; put 'put ''ODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41''@;'; put 'put ''MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41''@;'; put 'put ''IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41''@;'; put 'put ''MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMu''@;'; put 'put ''MzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEu''@;'; put 'put ''MzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLEYuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44Miww''@;'; put 'put ''LTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4z''@;'; put 'put ''NC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz''@;'; put 'put ''LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEs''@;'; put 'put ''MSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLEYuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAs''@;'; put 'put ''MCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIs''@;'; put 'put ''MCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIi''@;'; put 'put ''IGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JBcnJvdz0o''@;'; put 'put ''MCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcs''@;'; put 'put ''OC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2''@;'; put 'put ''YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwy''@;'; put 'put ''LjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLEYuQ2xyU2hhcGVDdXJzb3JIYW5k''@;'; put 'put ''PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMu''@;'; put 'put ''NCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3''@;'; put 'put ''LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQu''@;'; put 'put ''MTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1''@;'; put 'put ''LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1''@;'; put 'put ''VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0u''@;'; put 'put ''NDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkz''@;'; put 'put ''LDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksRi5DbHJTaGFwZUN1''@;'; put 'put ''cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTEx''@;'; put 'put ''LjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywx''@;'; put 'put ''LjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYs''@;'; put 'put ''MTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUu''@;'; put 'put ''MkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4z''@;'; put 'put ''LTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYz''@;'; put 'put ''bDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksRi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''IiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksRi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0w''@;'; put 'put ''LDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEs''@;'; put 'put ''MSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwx''@;'; put 'put ''djRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxGLkNs''@;'; put 'put ''clNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5''@;'; put 'put ''Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjks''@;'; put 'put ''OFoiLz4nKSxGLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00''@;'; put 'put ''LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMs''@;'; put 'put ''MCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcy''@;'; put 'put ''TDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwy''@;'; put 'put ''MC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQs''@;'; put 'put ''MS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksRi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwx''@;'; put 'put ''Ljc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2''@;'; put 'put ''LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYs''@;'; put 'put ''MCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0z''@;'; put 'put ''LjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksRi5DbHJTaGFwZUJ1Zz0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIy''@;'; put 'put ''LjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40''@;'; put 'put ''Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJh''@;'; put 'put ''MSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMu''@;'; put 'put ''NjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4x''@;'; put 'put ''Ny0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMs''@;'; put 'put ''My4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAs''@;'; put 'put ''Mkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0''@;'; put 'put ''bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgs''@;'; put 'put ''MS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwx''@;'; put 'put ''LjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDku''@;'; put 'put ''MDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLEYuQ2xyU2hhcGVU''@;'; put 'put ''aGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4z''@;'; put 'put ''Ni00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxGLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwy''@;'; put 'put ''OCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wx''@;'; put 'put ''Ljc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUs''@;'; put 'put ''Mi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcy''@;'; put 'put ''LDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLEYuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAs''@;'; put 'put ''MCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2''@;'; put 'put ''LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVSZWZyZXNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAs''@;'; put 'put ''MSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLEYuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAs''@;'; put 'put ''MiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45''@;'; put 'put ''NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwx''@;'; put 'put ''LDAsMCwwLDMwLjA2LDFaIi8+JyksRi5DbHJTaGFwZVZpZXdMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIx''@;'; put 'put ''NCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLEYuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwx''@;'; put 'put ''N0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRh''@;'; put 'put ''MiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIs''@;'; put 'put ''MiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLEYuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgs''@;'; put 'put ''MTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEt''@;'; put 'put ''MS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4x''@;'; put 'put ''OSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSww''@;'; put 'put ''LDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEz''@;'; put 'put ''LTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwx''@;'; put 'put ''LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1''@;'; put 'put ''LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44Ljgs''@;'; put 'put ''MCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAs''@;'; put 'put ''MCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSww''@;'; put 'put ''LDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywz''@;'; put 'put ''LjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEz''@;'; put 'put ''bC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44Ljgs''@;'; put 'put ''MCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJI''@;'; put 'put ''MzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDgu''@;'; put 'put ''ODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2''@;'; put 'put ''YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJTaGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44''@;'; put 'put ''MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEz''@;'; put 'put ''LjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9''@;'; put 'put ''Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEs''@;'; put 'put ''MjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwx''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLEYuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIs''@;'; put 'put ''MCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksRi5DbHJTaGFwZVVubG9jaz0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIs''@;'; put 'put ''MCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgy''@;'; put 'put ''MFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxGLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcu''@;'; put 'put ''M3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVo''@;'; put 'put ''MnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIu''@;'; put 'put ''MiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4y''@;'; put 'put ''LDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4''@;'; put 'put ''aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMw''@;'; put 'put ''LTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0x''@;'; put 'put ''LjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44''@;'; put 'put ''LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0w''@;'; put 'put ''LjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4w''@;'; put 'put ''OSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''MywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2''@;'; put 'put ''Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUu''@;'; put 'put ''Mjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAs''@;'; put 'put ''MSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMu''@;'; put 'put ''NjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEs''@;'; put 'put ''NC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42''@;'; put 'put ''NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcs''@;'; put 'put ''Mi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4y''@;'; put 'put ''OHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwx''@;'; put 'put ''LDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCww''@;'; put 'put ''LDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42''@;'; put 'put ''Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAu''@;'; put 'put ''M0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2''@;'; put 'put ''LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCww''@;'; put 'put ''LDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcs''@;'; put 'put ''OWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4y''@;'; put 'put ''MywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2''@;'; put 'put ''LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjgu''@;'; put 'put ''NTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4w''@;'; put 'put ''OSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wy''@;'; put 'put ''NS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSww''@;'; put 'put ''LDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNI''@;'; put 'put ''NWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjku''@;'; put 'put ''NTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxGLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEs''@;'; put 'put ''MSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSww''@;'; put 'put ''LDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAs''@;'; put 'put ''MCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTku''@;'; put 'put ''MTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5''@;'; put 'put ''QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4y''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwx''@;'; put 'put ''LjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksRi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUu''@;'; put 'put ''OTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUu''@;'; put 'put ''NFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEu''@;'; put 'put ''ODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1''@;'; put 'put ''LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJo''@;'; put 'put ''MTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLEYuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41''@;'; put 'put ''LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdI''@;'; put 'put ''OS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCww''@;'; put 'put ''LDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTgu''@;'; put 'put ''NDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1''@;'; put 'put ''LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLEYuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4w''@;'; put 'put ''OCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLEYuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEz''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAu''@;'; put 'put ''NzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxGLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCww''@;'; put 'put ''LDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIi''@;'; put 'put ''IHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEs''@;'; put 'put ''MS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTku''@;'; put 'put ''OUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwy''@;'; put 'put ''LDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0''@;'; put 'put ''LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwx''@;'; put 'put ''NC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEEx''@;'; put 'put ''LjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5''@;'; put 'put ''LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMx''@;'; put 'put ''LjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRI''@;'; put 'put ''MjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5''@;'; put 'put ''LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMs''@;'; put 'put ''MS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMu''@;'; put 'put ''NjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEw''@;'; put 'put ''LDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4''@;'; put 'put ''LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42Nywx''@;'; put 'put ''MS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2Ex''@;'; put 'put ''LjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjcz''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEy''@;'; put 'put ''LjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEs''@;'; put 'put ''MSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksRi5DbHJTaGFwZUhpc3Rvcnk9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksRi5DbHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCww''@;'; put 'put ''LDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCww''@;'; put 'put ''LDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEy''@;'; put 'put ''LjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4x''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwz''@;'; put 'put ''LjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxGLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2''@;'; put 'put ''LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwy''@;'; put 'put ''OS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwy''@;'; put 'put ''NC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwx''@;'; put 'put ''Ni4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEu''@;'; put 'put ''NjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTls''@;'; put 'put ''MS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4''@;'; put 'put ''LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTks''@;'; put 'put ''MTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAs''@;'; put 'put ''MCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjks''@;'; put 'put ''MTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEs''@;'; put 'put ''MSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4''@;'; put 'put ''LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3''@;'; put 'put ''LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2''@;'; put 'put ''YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1''@;'; put 'put ''LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMy''@;'; put 'put ''LDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUu''@;'; put 'put ''MjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIs''@;'; put 'put ''MEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFw''@;'; put 'put ''ZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEs''@;'; put 'put ''MSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYy''@;'; put 'put ''NEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41''@;'; put 'put ''QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYs''@;'; put 'put ''MCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0i''@;'; put 'put ''MjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMw''@;'; put 'put ''QTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45''@;'; put 'put ''MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjlo''@;'; put 'put ''LjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgi''@;'; put 'put ''IGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4z''@;'; put 'put ''Mi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAs''@;'; put 'put ''MCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9''@;'; put 'put ''IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40''@;'; put 'put ''NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEu''@;'; put 'put ''NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x''@;'; put 'put ''LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs''@;'; put 'put ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwx''@;'; put 'put ''LDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0x''@;'; put 'put ''LjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwx''@;'; put 'put ''OS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4''@;'; put 'put ''LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQx''@;'; put 'put ''LTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0y''@;'; put 'put ''LTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIy''@;'; put 'put ''SDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAs''@;'; put 'put ''MCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4''@;'; put 'put ''LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAt''@;'; put 'put ''MlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQg''@;'; put 'put ''MzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4x''@;'; put 'put ''My0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Mi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjci''@;'; put 'put ''IHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1Yx''@;'; put 'put ''M0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIy''@;'; put 'put ''LjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW''@;'; put 'put ''MTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwx''@;'; put 'put ''OS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0x''@;'; put 'put ''SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRo''@;'; put 'put ''My42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEu''@;'; put 'put ''ODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4z''@;'; put 'put ''N0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcu''@;'; put 'put ''OSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5''@;'; put 'put ''LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFh''@;'; put 'put ''Ny40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQu''@;'; put 'put ''NzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAs''@;'; put 'put ''MCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTku''@;'; put 'put ''MzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4z''@;'; put 'put ''NmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1''@;'; put 'put ''VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVj''@;'; put 'put ''LS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIs''@;'; put 'put ''MCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRj''@;'; put 'put ''LjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4''@;'; put 'put ''LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2''@;'; put 'put ''LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYs''@;'; put 'put ''MjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjku''@;'; put 'put ''NTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjky''@;'; put 'put ''LDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4''@;'; put 'put ''YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44''@;'; put 'put ''Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcu''@;'; put 'put ''NDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43''@;'; put 'put ''OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCww''@;'; put 'put ''LDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIs''@;'; put 'put ''MCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMu''@;'; put 'put ''MjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMx''@;'; put 'put ''QTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIu''@;'; put 'put ''MzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEx''@;'; put 'put ''IiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIy''@;'; put 'put ''NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCww''@;'; put 'put ''VjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNyww''@;'; put 'put ''LDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5''@;'; put 'put ''VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEu''@;'; put 'put ''MzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4z''@;'; put 'put ''MVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCww''@;'; put 'put ''LDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMy''@;'; put 'put ''djYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEy''@;'; put 'put ''LDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhI''@;'; put 'put ''MjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45''@;'; put 'put ''VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwy''@;'; put 'put ''LDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhI''@;'; put 'put ''MTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRI''@;'; put 'put ''NFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdW''@;'; put 'put ''MTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9''@;'; put 'put ''IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwz''@;'; put 'put ''MEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0i''@;'; put 'put ''OSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx''@;'; put 'put ''MSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5''@;'; put 'put ''LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0x''@;'; put 'put ''MywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZI''@;'; put 'put ''MTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40''@;'; put 'put ''Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVTY3JvbGw9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''NC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYt''@;'; put 'put ''Mi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww''@;'; put 'put ''djQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAs''@;'; put 'put ''Ni41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4''@;'; put 'put ''YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2''@;'; put 'put ''LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMu''@;'; put 'put ''MTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwx''@;'; put 'put ''NS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41''@;'; put 'put ''LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMu''@;'; put 'put ''NUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEu''@;'; put 'put ''MTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGEx''@;'; put 'put ''LjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0''@;'; put 'put ''LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiww''@;'; put 'put ''LDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQy''@;'; put 'put ''LTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIx''@;'; put 'put ''LDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMu''@;'; put 'put ''MDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTIt''@;'; put 'put ''MSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQu''@;'; put 'put ''MDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZW''@;'; put 'put ''NUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCww''@;'; put 'put ''LS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCww''@;'; put 'put ''LS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44Mywx''@;'; put 'put ''LjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEt''@;'; put 'put ''MS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4y''@;'; put 'put ''Myw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5''@;'; put 'put ''LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4''@;'; put 'put ''LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2''@;'; put 'put ''LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4x''@;'; put 'put ''NSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3''@;'; put 'put ''LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCww''@;'; put 'put ''LDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0x''@;'; put 'put ''LjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2''@;'; put 'put ''LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4''@;'; put 'put ''bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEs''@;'; put 'put ''MSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAs''@;'; put 'put ''NC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgy''@;'; put 'put ''NnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCww''@;'; put 'put ''LDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0u''@;'; put 'put ''MjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJh''@;'; put 'put ''LjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVW''@;'; put 'put ''MjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3''@;'; put 'put ''LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCww''@;'; put 'put ''LC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2''@;'; put 'put ''bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwz''@;'; put 'put ''My41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1''@;'; put 'put ''LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJh''@;'; put 'put ''LjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3''@;'; put 'put ''LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu''@;'; put 'put ''MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNyww''@;'; put 'put ''LDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksRi5DbHJTaGFwZVR3b1dheUFycm93''@;'; put 'put ''cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMu''@;'; put 'put ''MjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5''@;'; put 'put ''LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4y''@;'; put 'put ''MSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYy''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgx''@;'; put 'put ''NmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4Ljky''@;'; put 'put ''LDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCww''@;'; put 'put ''LDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4''@;'; put 'put ''LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4n''@;'; put 'put ''KSxGLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiIC8+JyksRi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv''@;'; put 'put ''PicpLEYuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMi''@;'; put 'put ''IHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcu''@;'; put 'put ''NDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4''@;'; put 'put ''LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykg''@;'; put 'put ''cm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwy''@;'; put 'put ''OC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03''@;'; put 'put ''LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEg''@;'; put 'put ''MTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4w''@;'; put 'put ''NywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywz''@;'; put 'put ''LDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUs''@;'; put 'put ''NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUu''@;'; put 'put ''NjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjgu''@;'; put 'put ''MjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAs''@;'; put 'put ''MC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCww''@;'; put 'put ''LDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwz''@;'; put 'put ''LjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFM''@;'; put 'put ''MTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBh''@;'; put 'put ''MSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJT''@;'; put 'put ''aGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGEx''@;'; put 'put ''LDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1''@;'; put 'put ''aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCww''@;'; put 'put ''LDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4''@;'; put 'put ''LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJv''@;'; put 'put ''dGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSww''@;'; put 'put ''LDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUJ1bGxzZXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwy''@;'; put 'put ''LjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42''@;'; put 'put ''LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjks''@;'; put 'put ''NC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQu''@;'; put 'put ''MDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlVGFy''@;'; put 'put ''Z2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcs''@;'; put 'put ''MCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVGbGFtZT0o''@;'; put 'put ''MCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMs''@;'; put 'put ''MjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4y''@;'; put 'put ''MSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0''@;'; put 'put ''LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44''@;'; put 'put ''Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgy''@;'; put 'put ''Mi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43Nyww''@;'; put 'put ''LS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAs''@;'; put 'put ''MjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJI''@;'; put 'put ''N2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u''@;'; put 'put ''NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5''@;'; put 'put ''LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4z''@;'; put 'put ''Niw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAs''@;'; put 'put ''MCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEs''@;'; put 'put ''MCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMTho''@;'; put 'put ''MGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEu''@;'; put 'put ''MjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0''@;'; put 'put ''LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42''@;'; put 'put ''Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBh''@;'; put 'put ''Ni4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwx''@;'; put 'put ''LDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4w''@;'; put 'put ''NywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1''@;'; put 'put ''TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2''@;'; put 'put ''LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQu''@;'; put 'put ''NTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''YWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcs''@;'; put 'put ''NEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkx''@;'; put 'put ''LTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwx''@;'; put 'put ''MS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0''@;'; put 'put ''LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3''@;'; put 'put ''LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4y''@;'; put 'put ''NSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYu''@;'; put 'put ''ODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZU9yZ2Fu''@;'; put 'put ''aXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4''@;'; put 'put ''LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIx''@;'; put 'put ''Ljg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0''@;'; put 'put ''IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEu''@;'; put 'put ''Ni44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCww''@;'; put 'put ''LDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTgu''@;'; put 'put ''MTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLEYuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAs''@;'; put 'put ''MCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiww''@;'; put 'put ''LDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAs''@;'; put 'put ''MCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y''@;'; put 'put ''Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4''@;'; put 'put ''LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2Ex''@;'; put 'put ''LjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJW''@;'; put 'put ''MzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEw''@;'; put 'put ''LjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4y''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAs''@;'; put 'put ''MCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi''@;'; put 'put ''IGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwx''@;'; put 'put ''MC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41''@;'; put 'put ''QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4y''@;'; put 'put ''OCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02''@;'; put 'put ''LjFsLTIsMi4xMloiLz4nKSxGLkNsclNoYXBlRmlsZUdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFW''@;'; put 'put ''MzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4Vjdh''@;'; put 'put ''MSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLEYuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMyww''@;'; put 'put ''LDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYs''@;'; put 'put ''MzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUt''@;'; put 'put ''LjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEs''@;'; put 'put ''MjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLEYuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z''@;'; put 'put ''MiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEs''@;'; put 'put ''MCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksRi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43''@;'; put 'put ''LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4x''@;'; put 'put ''Miw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42''@;'; put 'put ''MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgs''@;'; put 'put ''MS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4y''@;'; put 'put ''OSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwx''@;'; put 'put ''MS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43''@;'; put 'put ''Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWEx''@;'; put 'put ''LDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcu''@;'; put 'put ''OTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCww''@;'; put 'put ''LC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVNvcnRCeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAt''@;'; put 'put ''Mmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEs''@;'; put 'put ''MSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAt''@;'; put 'put ''MS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAs''@;'; put 'put ''MC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9''@;'; put 'put ''IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4z''@;'; put 'put ''N2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjds''@;'; put 'put ''NC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEs''@;'; put 'put ''MSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcu''@;'; put 'put ''NzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcu''@;'; put 'put ''MzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43''@;'; put 'put ''OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQnJpZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQs''@;'; put 'put ''Ni43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYx''@;'; put 'put ''OEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43''@;'; put 'put ''YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEs''@;'; put 'put ''LjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1''@;'; put 'put ''LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4w''@;'; put 'put ''NywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBh''@;'; put 'put ''dGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42''@;'; put 'put ''LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwx''@;'; put 'put ''Ni43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQu''@;'; put 'put ''MDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcu''@;'; put 'put ''MzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0''@;'; put 'put ''aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43''@;'; put 'put ''MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgy''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUg''@;'; put 'put ''Y3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9''@;'; put 'put ''IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2Ex''@;'; put 'put ''LDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQu''@;'; put 'put ''OTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwx''@;'; put 'put ''LDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIu''@;'; put 'put ''MDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+Jyks''@;'; put 'put ''Ri5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwx''@;'; put 'put ''LDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQx''@;'; put 'put ''YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAs''@;'; put 'put ''MC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAu''@;'; put 'put ''MDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45''@;'; put 'put ''MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2''@;'; put 'put ''LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYu''@;'; put 'put ''NDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwy''@;'; put 'put ''Ni4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTks''@;'; put 'put ''OC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLEYuQ2xyU2hhcGVXYW5kPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwy''@;'; put 'put ''LjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMt''@;'; put 'put ''NS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywx''@;'; put 'put ''LjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41''@;'; put 'put ''MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAs''@;'; put 'put ''MCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wx''@;'; put 'put ''LjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksRi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUu''@;'; put 'put ''ODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFM''@;'; put 'put ''MTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxGLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIx''@;'; put 'put ''IDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwz''@;'; put 'put ''MCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCww''@;'; put 'put ''LDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwx''@;'; put 'put ''LDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBj''@;'; put 'put ''eD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVFcmFzZXI9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0''@;'; put 'put ''bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBs''@;'; put 'put ''Ny4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCww''@;'; put 'put ''LDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgs''@;'; put 'put ''MTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wt''@;'; put 'put ''MS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0x''@;'; put 'put ''LjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0u''@;'; put 'put ''MzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0i''@;'; put 'put ''MiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgt''@;'; put 'put ''MS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1''@;'; put 'put ''LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAs''@;'; put 'put ''MS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2Ex''@;'; put 'put ''LDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJI''@;'; put 'put ''NFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi''@;'; put 'put ''IC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEs''@;'; put 'put ''MCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAs''@;'; put 'put ''MC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2''@;'; put 'put ''LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01''@;'; put 'put ''LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwx''@;'; put 'put ''LDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJj''@;'; put 'put ''LjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4y''@;'; put 'put ''OC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMu''@;'; put 'put ''MTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwu''@;'; put 'put ''NDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZh''@;'; put 'put ''MS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVGaWxlWmlw''@;'; put 'put ''PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMw''@;'; put 'put ''LDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0x''@;'; put 'put ''My40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5''@;'; put 'put ''YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQs''@;'; put 'put ''MSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45''@;'; put 'put ''LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAu''@;'; put 'put ''NCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2''@;'; put 'put ''MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJI''@;'; put 'put ''MzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIu''@;'; put 'put ''MSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAu''@;'; put 'put ''NS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42''@;'; put 'put ''LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0''@;'; put 'put ''XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43''@;'; put 'put ''LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAu''@;'; put 'put ''My0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAs''@;'; put 'put ''MC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4x''@;'; put 'put ''Yy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4y''@;'; put 'put ''LDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEu''@;'; put 'put ''OCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEt''@;'; put 'put ''MC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45''@;'; put 'put ''LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwt''@;'; put 'put ''Ni4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRj''@;'; put 'put ''LTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIy''@;'; put 'put ''LjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0x''@;'; put 'put ''MywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40''@;'; put 'put ''LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQu''@;'; put 'put ''OSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcu''@;'; put 'put ''NywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wz''@;'; put 'put ''LjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBk''@;'; put 'put ''PSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xl''@;'; put 'put ''IGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43''@;'; put 'put ''NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZj''@;'; put 'put ''LTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBh''@;'; put 'put ''MjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkEx''@;'; put 'put ''LDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwx''@;'; put 'put ''LDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCww''@;'; put 'put ''LDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFh''@;'; put 'put ''MSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMz''@;'; put 'put ''LjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCww''@;'; put 'put ''LDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlRnVl''@;'; put 'put ''bD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcu''@;'; put 'put ''ODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUs''@;'; put 'put ''My41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCww''@;'; put 'put ''LDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEs''@;'; put 'put ''MSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSww''@;'; put 'put ''LDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAu''@;'; put 'put ''ODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEs''@;'; put 'put ''MSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwy''@;'; put 'put ''LjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQu''@;'; put 'put ''OCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAs''@;'; put 'put ''MCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4y''@;'; put 'put ''NiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxGLkNsclNo''@;'; put 'put ''YXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAs''@;'; put 'put ''MCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45''@;'; put 'put ''NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCww''@;'; put 'put ''LDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxGLkNsclNoYXBlQ3Jv''@;'; put 'put ''c3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwx''@;'; put 'put ''LDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs''@;'; put 'put ''MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksRi5DbHJT''@;'; put 'put ''aGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCww''@;'; put 'put ''LDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYx''@;'; put 'put ''LDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1''@;'; put 'put ''Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4z''@;'; put 'put ''OC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcu''@;'; put 'put ''MDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgx''@;'; put 'put ''OVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwx''@;'; put 'put ''Ny41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0w''@;'; put 'put ''LjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40''@;'; put 'put ''LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjkt''@;'; put 'put ''MC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4y''@;'; put 'put ''aC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC00Ii8+XG4nKSxGLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgx''@;'; put 'put ''Ni43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCww''@;'; put 'put ''LDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQu''@;'; put 'put ''NWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41''@;'; put 'put ''aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxGLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSww''@;'; put 'put ''LDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEu''@;'; put 'put ''MUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAt''@;'; put 'put ''NC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgt''@;'; put 'put ''LjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYs''@;'; put 'put ''NCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4z''@;'; put 'put ''OS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAs''@;'; put 'put ''MCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYs''@;'; put 'put ''MS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwx''@;'; put 'put ''NS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgs''@;'; put 'put ''MSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43''@;'; put 'put ''OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwx''@;'; put 'put ''LC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwx''@;'; put 'put ''LjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEs''@;'; put 'put ''MCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAs''@;'; put 'put ''MCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQu''@;'; put 'put ''MUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIz''@;'; put 'put ''LDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwy''@;'; put 'put ''LjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4''@;'; put 'put ''LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEt''@;'; put 'put ''Mi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIs''@;'; put 'put ''My4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLEYuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOkYuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYi''@;'; put 'put ''OkYuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpGLkNsclNoYXBlUGluYm9hcmQsbmV3OkYuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ri5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOkYuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpGLkNs''@;'; put 'put ''clNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpGLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOkYuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOkYuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ri5D''@;'; put 'put ''bHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Ri5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ri5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpGLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ri5DbHJTaGFwZU9iamVjdHMsYm9vazpGLkNsclNoYXBlQm9vayxhc3Rlcmlz''@;'; put 'put ''azpGLkNsclNoYXBlQXN0ZXJpc2ssYnVnOkYuQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Ri5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOkYuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ri5DbHJTaGFwZVBlbmNpbCxub3RlOkYuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ri5DbHJTaGFwZVJl''@;'; put 'put ''ZnJlc2gsc3luYzpGLkNsclNoYXBlU3luYywidmlldy1saXN0IjpGLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOkYuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ri5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpGLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOkYuQ2xy''@;'; put 'put ''U2hhcGVEb3dubG9hZCx1cGxvYWQ6Ri5DbHJTaGFwZVVwbG9hZCxsb2NrOkYuQ2xyU2hhcGVMb2NrLHVubG9jazpGLkNsclNoYXBlVW5sb2NrLHVzZXJzOkYuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ri5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ri5DbHJTaGFwZUZpbHRlcixwaW46Ri5DbHJT''@;'; put 'put ''aGFwZVBpbixmaWxlOkYuQ2xyU2hhcGVGaWxlLHBsdXM6Ri5DbHJTaGFwZVBsdXMsbWludXM6Ri5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOkYuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOkYuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpGLkNsclNoYXBlQmFuLCJ0aW1l''@;'; put 'put ''cy1jaXJjbGUiOkYuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpGLkNsclNoYXBlVHJhc2gsY2lyY2xlOkYuQ2xyU2hhcGVDaXJjbGUsdGFnOkYuQ2xyU2hhcGVUYWcsdGFnczpGLkNsclNoYXBlVGFncyxoaXN0b3J5OkYuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOkYuQ2xyU2hhcGVDbG9jaywi''@;'; put 'put ''YWxhcm0tY2xvY2siOkYuQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OmxlLkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6Ri5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6Ri5DbHJTaGFwZUNoaWxkQXJyb3csY29weTpGLkNsclNoYXBlQ29weSxoZWxwOkYuQ2xyU2hhcGVI''@;'; put 'put ''ZWxwLGxvZ2luOkYuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6Ri5DbHJTaGFwZUxvZ291dCxwcmludGVyOkYuQ2xyU2hhcGVQcmludGVyLHdvcmxkOkYuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6Ri5DbHJTaGFwZVNsaWRlcixjbGlwYm9hcmQ6Ri5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpGLkNs''@;'; put 'put ''clNoYXBlRmlyZXdhbGwsbGlzdDpGLkNsclNoYXBlTGlzdCxyZWRvOkYuQ2xyU2hhcGVSZWRvLHVuZG86Ri5DbHJTaGFwZVVuZG8sc2Nyb2xsOkYuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOkYuQ2xyU2hhcGVGaWxlU2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpGLkNsclNoYXBl''@;'; put 'put ''VHdvV2F5QXJyb3dzLHN3aXRjaDpGLkNsclNoYXBlU3dpdGNoLHRvb2xzOkYuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpGLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOkYuQ2xyU2hhcGVXaW5kb3dNYXgsIndpbmRvdy1taW4iOkYuQ2xyU2hhcGVXaW5kb3dNaW4sIndp''@;'; put 'put ''bmRvdy1yZXN0b3JlIjpGLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6Ri5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOkYuQ2xyU2hhcGVab29tT3V0LGtleTpGLkNsclNoYXBlS2V5LGxpYnJhcnk6Ri5DbHJTaGFwZUxpYnJhcnksYm9sdDpGLkNsclNoYXBlQm9sdCx3cmVuY2g6''@;'; put 'put ''Ri5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpGLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OkYuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6Ri5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpGLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nlc3MiOkYuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246''@;'; put 'put ''Ri5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOkYuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6Ri5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OkYuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOkYuQ2xyU2hhcGVGaWxlR3JvdXAscGFwZXJjbGlwOkYuQ2xyU2hhcGVQYXBlcmNsaXAs''@;'; put 'put ''c2hyaW5rOkYuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6Ri5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOkYuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6Ri5DbHJTaGFwZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6Ri5DbHJTaGFwZUNv''@;'; put 'put ''bGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOkYuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpGLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOkYuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9hcmQiOkYuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRl''@;'; put 'put ''ci0yIjpGLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOkYuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246Ri5DbHJTaGFwZU1vb24sc3VuOkYuQ2xyU2hhcGVTdW4sd2FuZDpGLkNsclNoYXBlV2FuZCxjbG9uZTpGLkNsclNoYXBlQ2xvbmUsZGV0YWlsczpGLkNsclNoYXBlRGV0YWlscywi''@;'; put 'put ''ZHJhZy1oYW5kbGUtY29ybmVyIjpGLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6Ri5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6Ri5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpGLkNsclNoYXBlUGFzdGUscG9ydHJhaXQ6Ri5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6Ri5D''@;'; put 'put ''bHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOkYuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpGLkNsclNoYXBlUmVjeWNsZSx0cmVlOkYuQ2xyU2hhcGVUcmVlLGZpc2g6Ri5DbHJTaGFwZUZpc2gsZm9ybTpGLkNsclNoYXBlRm9ybSxmdWVsOkYuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpG''@;'; put 'put ''LkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOkYuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6Ri5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6Ri5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOkYuQ2xyU2hhcGVDcm9zc2hhaXJzLGJldGE6Ri5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUi''@;'; put 'put ''OkYuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsIm5v''@;'; put 'put ''dGUtZWRpdCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYWRkIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAs''@;'; put 'put ''eC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywibGlnaHRuaW5nIiwoMCx4LmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KEYuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50''@;'; put 'put ''aWFsU2hhcGVzLCJhbGVydCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInBpbm5lZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlh''@;'; put 'put ''bFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMs''@;'; put 'put ''ImF0dGFjaG1lbnQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5zaHJp''@;'; put 'put ''bmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYm''@;'; put 'put ''d2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAg''@;'; put 'put ''ICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlv''@;'; put 'put ''bihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuTWVkaWFTaGFwZXM9Ri5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPUYuQ2xyU2hhcGVNaWNyb3Bob25lPUYuQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Ri5DbHJTaGFw''@;'; put 'put ''ZVJlcGxheU9uZT1GLkNsclNoYXBlUmVwbGF5QWxsPUYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Ri5DbHJTaGFwZU11c2ljTm90ZT1GLkNsclNoYXBlRmlsbVN0cmlwPUYuQ2xyU2hhcGVIZWFkcGhvbmVzPUYuQ2xyU2hhcGVWb2x1bWVNdXRlPUYuQ2xyU2hhcGVWb2x1bWVVcD1GLkNsclNoYXBl''@;'; put 'put ''Vm9sdW1lRG93bj1GLkNsclNoYXBlU2h1ZmZsZT1GLkNsclNoYXBlVmlkZW9DYW1lcmE9Ri5DbHJTaGFwZUNhbWVyYT1GLkNsclNoYXBlRmFzdEZvcndhcmQ9Ri5DbHJTaGFwZVJld2luZD1GLkNsclNoYXBlUG93ZXI9Ri5DbHJTaGFwZVN0b3A9Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkPUYuQ2xy''@;'; put 'put ''U2hhcGVQYXVzZT1GLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtGLkNsclNoYXBlUGxheT0oMCx4LmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguMDcsMzEuNkEyLjA3LDIuMDcsMCwwLDEsNiwyOS41M1Y2LjMyQTIuMDcsMi4wNywwLDAsMSw5LDQuNDdMMzIuMjEsMTYuMDhhMi4wNywyLjA3LDAsMCwxLDAsMy43TDksMzEuMzhBMi4wNiwyLjA2LDAs''@;'; put 'put ''MCwxLDguMDcsMzEuNlptMC0yNS4zNEw4LDYuMzJWMjkuNTNsLjEuMDZMMzEuMzEsMThhLjA2LjA2LDAsMCwwLDAtLjA2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxNi4wOCw4Ljk0LDQuNDdBMi4w''@;'; put 'put ''NywyLjA3LDAsMCwwLDYsNi4zMlYyOS41M2EyLjA2LDIuMDYsMCwwLDAsMywxLjg1TDMyLjE2LDE5Ljc3YTIuMDcsMi4wNywwLDAsMCwwLTMuN1oiLz4nKSxGLkNsclNoYXBlUGF1c2U9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xMi45MywzMkg2LjA3QTIuMDcsMi4wNywwLDAsMSw0LDI5LjkzVjYuMDdBMi4wNywyLjA3LDAsMCwxLDYuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwxNSw2LjA3VjI5LjkzQTIuMDcsMi4wNywwLDAsMSwxMi45MywzMlpNMTMsNkg2VjMwaDdaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOS45MywzMkgyMy4wN0EyLjA3LDIuMDcsMCwwLDEsMjEsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsMjMuMDcsNGg2Ljg3QTIuMDcsMi4wNywwLDAsMSwzMiw2LjA3VjI5LjkzQTIu''@;'; put 'put ''MDcsMi4wNywwLDAsMSwyOS45MywzMlpNMzAsNkgyM1YzMGg3WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAuOTUiIHk9IjQiIHdpZHRoPSIxMSIgaGVpZ2h0PSIyOCIgcng9IjIuMDciIHJ5PSIyLjA3Ii8+JyksRi5DbHJTaGFwZVN0ZXBGb3J3YXJkPSgwLHguY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNSwzMi4yM2EyLDIsMCwwLDEtMi0yVjUuNzdBMiwyLDAsMCwxLDYuMTcsNC4xNEwyMy4yMywxNi4zOGEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xNywzMS44NkEyLDIsMCwwLDEsNSwzMi4yM1pNNSw1Ljc3''@;'; put 'put ''VjMwLjIzTDIyLjA3LDE4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzEsMzJIMjhhMiwyLDAsMCwxLTItMlY2YTIsMiwwLDAsMSwyLTJoM2EyLDIsMCwwLDEsMiwyVjMwQTIsMiwwLDAsMSwzMSwzMlpN''@;'; put 'put ''MjgsNlYzMGgzVjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTUsMzEuOWEyLDIsMCwwLDEtMi0yVjUuNDRBMiwyLDAsMCwxLDYuMTIsMy44MUwyMy4xOCwxNmEyLDIsMCwwLDEsMCwzLjI1aDBMNi4xMiwzMS41''@;'; put 'put ''MkEyLDIsMCwwLDEsNSwzMS45WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIHg9IjI1Ljk1IiB5PSIzLjY3IiB3aWR0aD0iNyIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksRi5DbHJTaGFwZVN0b3A9KDAseC5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMkg2YTIsMiwwLDAsMS0yLTJWNkEyLDIsMCwwLDEsNiw0SDMwYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMwLDMyWk02LDZWMzBIMzBWNloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIzLjk2IiB5PSI0IiB3aWR0aD0iMjcuOTkiIGhlaWdodD0iMjgiIHJ4PSIyIiByeT0iMiIvPicpLEYuQ2xyU2hhcGVQb3dlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4''@;'; put 'put ''LDM0LjE1YTE1LDE1LDAsMCwxLTcuNTItMjgsMSwxLDAsMCwxLDEsMS43MywxMywxMywwLDEsMCwxMywwLDEsMSwwLDEsMSwxLTEuNzMsMTUsMTUsMCwwLDEtNy41MiwyOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMCwxLTFWNGExLDEsMCwwLDAtMiwwVjIwQTEsMSwwLDAsMCwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgZD0iTTMyLjUxLDE1LjRIMzAuNDRhMTMsMTMsMCwxLDEtMTktNy41LDEsMSwwLDAsMC0xLTEuNzNBMTUsMTUsMCwxLDAsMzMsMTkuMTUsMTQuOSwxNC45LDAsMCwwLDMyLjUxLDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwyMWExLDEsMCwwLDEtMS0xVjRhMSwxLDAsMCwxLDIsMFYyMEExLDEsMCwwLDEsMTgsMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWwtLjMxLDBBMTMsMTMsMCwxLDEsMTEuNDgsNy45YTEsMSwwLDAsMC0xLTEuNzMsMTUsMTUsMCwxLDAsMjEuMzEsNy4xQTcuNDksNy40OSwwLDAsMSwzMCwxMy41''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLjA2LDE3LjY4YTEuMjgsMS4yOCwwLDAsMS0xLjI5LTEuMjhWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwVjE4LjRBMS4yOCwxLjI4LDAsMCwxLDE4LjA2LDE5LjY4Wk0x''@;'; put 'put ''OCwyNy43OUE5Ljg4LDkuODgsMCwwLDEsMTIuMTcsOS44NWExLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjQsMS40LDAs''@;'; put 'put ''MCwxLDEuOTQtLjI5QTkuODgsOS44OCwwLDAsMSwxOCwyNy43OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtNkE5LjcsOS43LDAsMCwxLDI4LDE3Ljg5YTEw''@;'; put 'put ''LDEwLDAsMSwxLTE1LjgzLTgsMS40LDEuNCwwLDAsMSwxLjk0LjMxLDEuMzcsMS4zNywwLDAsMS0uMzEsMS45Miw3LjE4LDcuMTgsMCwxLDAsMTEuNDMsNS44LDcuMDgsNy4wOCwwLDAsMC0uNDUtMi40OUgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTR2NC40YTEuMjksMS4yOSwwLDAs''@;'; put 'put ''MS0yLjU4LDBWOC42NWExLjI5LDEuMjksMCwwLDEsMi41OCwwdi43MWwzLjc2LTYuNTFBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMy41Ny0uOUE5LjgzLDkuODMsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywx''@;'; put 'put ''LjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wNyw3LjA3LDAsMCwwLTMtNS43NkExLjM3LDEuMzcsMCwwLDEsMjIsMTAuMmExLjM4LDEuMzgsMCwwLDEsMS41Mi0uNDksNy40NSw3LjQ1LDAsMCwxLS4zLTYuODMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5''@;'; put 'put ''LjkzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi43Nyw4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNGExLjI5LDEuMjksMCwwLDEtMi41OCwwWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlUmV3aW5kPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuMDksMzEuNThsLTE1LjMyLTEyYTIsMiwwLDAs''@;'; put 'put ''MSwwLTMuMTVsMTUuMzItMTJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTEuNzcsMS43NywwLDAsMSwyMCw2djYuN0wzMC44Myw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzQsNlYzMGEyLDIsMCwwLDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4y''@;'; put 'put ''MkwyMCwyMy4zMVYzMGExLjc3LDEuNzcsMCwwLDEtLjg1LDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWk0zMiwzMGwuMDYtMjRMMTgsMTYuOFY2TDMsMTgsMTgsMzBWMTkuMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNi45MiwzMS41OCwxLjYsMTkuNTdhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMkExLjkzLDEuOTMsMCwwLDEsMTksNC4yLDEuODksMS44OSwwLDAsMSwyMCw2djYuN0wzMC42Niw0LjQyYTEuOTMsMS45MywwLDAsMSwyLjA2LS4yMkEyLDIsMCwwLDEsMzMuODMsNlYzMGEyLDIsMCww''@;'; put 'put ''LDEtMS4xMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMkwyMCwyMy4zMVYzMGExLjg5LDEuODksMCwwLDEtMSwxLjc5LDEuOTQsMS45NCwwLDAsMS0yLjA2LS4yMloiLz4nKSxGLkNsclNoYXBlRmFzdEZvcndhcmQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy43NywzMS45MmEyLDIsMCwwLDEtLjg2LS4yQTEuODEsMS44MSwwLDAsMSwxNiwyOS45M3YtNi43TDUuMjQsMzEuNWExLjk0LDEuOTQsMCwwLDEtMi4wNi4yMiwyLDIsMCwwLDEtMS4xMS0xLjc5di0yNEEyLDIsMCwwLDEsMy4xOCw0''@;'; put 'put ''LjEyYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjYxVjUuOTFhMS44MSwxLjgxLDAsMCwxLC45MS0xLjc5QTEuOTMsMS45MywwLDAsMSwxOSw0LjM0bDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVMMTksMzEuNUEyLDIsMCwwLDEsMTcuNzcsMzEuOTJabTAtMTIuOFYyOS45M2wxNS4y''@;'; put 'put ''Ni0xMi0xNS4zMi0xMiwuMDYsMTAuODFMNCw1LjkxdjI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE3LjcxLDMyYTIsMiwwLDAsMS0uODYtLjJBMS43NywxLjc3LDAsMCwxLDE2LDMwdi02LjdMNS4xNywzMS41OGEx''@;'; put 'put ''Ljk0LDEuOTQsMCwwLDEtMi4wNi4yMkEyLDIsMCwwLDEsMiwzMFY2QTIsMiwwLDAsMSwzLjExLDQuMmExLjkzLDEuOTMsMCwwLDEsMi4wNi4yMkwxNiwxMi42OVY2YTEuNzcsMS43NywwLDAsMSwuODUtMS43OSwxLjkzLDEuOTMsMCwwLDEsMi4wNi4yMmwxNS4zMiwxMmEyLDIsMCwwLDEsMCwz''@;'; put 'put ''LjE1bC0xNS4zMiwxMkEyLDIsMCwwLDEsMTcuNzEsMzJaIi8+JyksRi5DbHJTaGFwZUNhbWVyYT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwyLDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwyMkg0VjEwaDguNjdsMS41NS00aDcuNTZsMS41NSw0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik05LDE5YTksOSwwLDEsMCw5LTlBOSw5LDAsMCwwLDksMTlabTE2LjQsMEE3LjQsNy40LDAsMSwxLDE4LDExLjYsNy40MSw3LjQxLDAsMCwxLDI1LjQsMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuMzcs''@;'; put 'put ''MTIuODNhLjguOCwwLDAsMC0uOC0uOEg2LjE3YS44LjgsMCwwLDAsMCwxLjZoMi40QS44LjgsMCwwLDAsOS4zNywxMi44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMzQsMTlhNS41Nyw1LjU3LDAsMCww''@;'; put 'put ''LDMuMjQsNWwuODUtMS4zN2E0LDQsMCwxLDEsNC4xMS02LjYxbC44Ni0xLjM4QTUuNTYsNS41NiwwLDAsMCwxMi4zNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsOEgyNC43TDIzLjY0LDUuMjhBMiwy''@;'; put 'put ''LDAsMCwwLDIxLjc4LDRIMTQuMjJhMiwyLDAsMCwwLTEuODcsMS4yOEwxMS4zLDhINGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNi4xNywxMy42M2EuOC44LDAsMCwxLDAtMS42aDIuNGEuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''Wk0xOCwyOGE5LDksMCwxLDEsOS05QTksOSwwLDAsMSwxOCwyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4xMSwxOS4wNmE3LjA3LDcuMDcsMCwwLDAsNC4xMSw2LjQxbDEuMDktMS43NGE1LDUsMCwxLDEsNS4y''@;'; put 'put ''Mi04LjM5bDEuMDktMS43NmE3LjA2LDcuMDYsMCwwLDAtMTEuNTEsNS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxGLkNsclNoYXBlVmlkZW9DYW1lcmE9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zNCwxMC4zNGEyLjExLDIuMTEsMCwwLDAtMS4xNi0xLjksMiwyLDAsMCwwLTIuMTMuMTVMMjYsMTEuNlY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjRhMiwyLDAsMCwwLDItMlYyNC40bDQuNjQsM2EyLjA3LDIuMDcs''@;'; put 'put ''MCwwLDAsMi4yLjJBMi4xMSwyLjExLDAsMCwwLDM0LDI1LjY2Wk0zMS45MywyNS43N2MtLjA2LDAtLjExLDAtLjE5LS4wNkwyNCwyMC43N1YyOEg2YTIsMiwwLDAsMS0yLTJWMTBBMiwyLDAsMCwxLDYsOEgyNHY3LjIzbDcuOC01YS4xMS4xMSwwLDAsMSwuMTMsMCwuMTEuMTEsMCwwLDEsLjA3''@;'; put 'put ''LjExVjI1LjY2QS4xMS4xMSwwLDAsMSwzMS45MywyNS43N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zLDkuMzUsMjYsMTIuOVY4YTIsMiwwLDAsMC0yLTJINmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0''@;'; put 'put ''LDRIMjRhMiwyLDAsMCwwLDItMlYyMy4wOGw2LjMsMy41NUExLjEsMS4xLDAsMCwwLDM0LDI1Ljc3VjEwLjJBMS4xLDEuMSwwLDAsMCwzMi4zLDkuMzVaIi8+JyksRi5DbHJTaGFwZVNodWZmbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0yMS42MSwxMWg4LjYybC0zLjMsMy4zYTEsMSwwLDEsMCwxLjQxLDEuNDJMMzQsMTAuMDhsLS43MS0uNzFoMEwyOC4zNCw0LjQzYTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTEsOUgyMWExLDEsMCwwLDAtLjg2LjVMMTcuNSwxNC4wOWwxLjE2LDJaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTExLjA3LDI1LjA3SDNhMSwxLDAsMCwwLDAsMmg4LjY1YTEsMSwwLDAsMCwuODYtLjVMMTUuMTgsMjIsMTQsMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI4LjM0LDIwLjE3YTEsMSwwLDAsMC0xLjQxLDEuNDJsMy41LDMuNUgyMS42MUwxMi41MSw5LjUzYTEsMSwwLDAsMC0uODYtLjVIM2ExLDEsMCwxLDAsMCwyaDguMDdsOS4xLDE1LjU1YTEsMSwwLDAsMCwuODYuNUgyOS45bC0zLDNhMSwx''@;'; put 'put ''LDAsMCwwLDEuNDEsMS40Mmw0Ljk1LTQuOTRoMGwuNzEtLjcxWiIvPicpLEYuQ2xyU2hhcGVWb2x1bWVEb3duPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1''@;'; put 'put ''LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwz''@;'; put 'put ''MmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy40MUEyLDIsMCwwLDEsMjAsNlYzMGEyLDIsMCwwLDEtMS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4yOEwxOCwz''@;'; put 'put ''MFY2bC03LjY1LDcuNjhhMSwxLDAsMCwxLS43MS4zWk0xOCw2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjExYTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSww''@;'; put 'put ''LDEsMSwxLTEuNzNBOC4yMSw4LjIxLDAsMCwxLDIzLjk0LDI1LDEsMSwwLDAsMSwyMy40MSwyNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOC4zNCwzLjg3LDksMTJIM2ExLDEsMCwwLDAtMSwxVjIzYTEsMSww''@;'; put 'put ''LDAsMCwxLDFIOC44M2w5LjUxLDguM0ExLDEsMCwwLDAsMjAsMzEuNTVWNC42MkExLDEsMCwwLDAsMTguMzQsMy44N1oiLz4nKSxGLkNsclNoYXBlVm9sdW1lVXA9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''My40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwzMi4wNmEyLDIsMCwwLDEtMS40Mi0uNTlMOS4xNCwyNEg0YTIsMiwwLDAsMS0yLTJWMTRhMiwyLDAsMCwxLDItMkg5LjIybDcuMzMtNy4zOUEyLDIsMCwwLDEsMjAsNnYyNGEyLDIsMCwwLDEt''@;'; put 'put ''MS4yNCwxLjg1QTIsMiwwLDAsMSwxOCwzMi4wNlpNNCwxNHY4SDkuNTZhMSwxLDAsMCwxLC43MS4zTDE4LDMwLjA2VjZMMTAuMzUsMTMuN2ExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBk''@;'; put 'put ''PSJNMjMuNDEsMjUuMjVhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43Myw4LjIxLDguMjEsMCwwLDEsLjI0LDE0LjA2QTEsMSwwLDAsMSwyMy40MSwyNS4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNS42MiwzMS4xOGExLDEsMCwwLDEtLjQ1LTEuODlBMTIuNDQsMTIuNDQsMCwwLDAsMjUsNi44OWExLDEsMCwxLDEsLjg3LTEuOCwxNC40NCwxNC40NCwwLDAsMSwuMjQsMjZBMSwxLDAsMCwxLDI1LjYyLDMxLjE4WiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LjMzLDQsOS4wNywxMmgtNmExLDEsMCwwLDAtMSwxdjkuOTJhMSwxLDAsMCwwLDEsMUg4Ljg4bDkuNDYsOC4yNEExLDEsMCwwLDAsMjAsMzEuNDNWNC43MkExLDEsMCwwLDAsMTguMzMsNFoiLz4nKSxG''@;'; put 'put ''LkNsclNoYXBlVm9sdW1lTXV0ZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMuNjEsNi40MSw5LjE5LDEySDRhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJIOS4xNGw3LjQxLDcuNDdBMiwyLDAsMCww''@;'; put 'put ''LDE4LDMyYTIsMiwwLDAsMCwuNzYtLjE1QTIsMiwwLDAsMCwyMCwzMFYyMi43N2w1Ljg5LDUuODljLS4yNS4xNS0uNDkuMjktLjc1LjQyYTEsMSwwLDAsMCwuOSwxLjc5LDE0LjQsMTQuNCwwLDAsMCwxLjMxLS43NWwyLjI4LDIuMjhMMzEsMzEsNSw1Wk0xOCwzMGwtNy43My03Ljc3QTEsMSww''@;'; put 'put ''LDAsMCw5LjU2LDIySDRWMTRIOS42NGExLDEsMCwwLDAsLjcxLS4zbC4yNi0uMjZMMTgsMjAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI0Ljg5LDYuNjlBMTIuNDIsMTIuNDIsMCwwLDEsMjksMjYuMWwx''@;'; put 'put ''LjQyLDEuNDJBMTQuNDIsMTQuNDIsMCwwLDAsMjUuNzYsNC44OGExLDEsMCwxLDAtLjg3LDEuOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4x''@;'; put 'put ''Nyw2LjE3LDAsMCwxLTEuMjQsMy43MUwyNiwyMy4xM0E4LjE1LDguMTUsMCwwLDAsMjcuOCwxOGE4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBk''@;'; put 'put ''PSJNMTgsNnY5LjE1bDIsMlY2YTIsMiwwLDAsMC0zLjQyLTEuNDFMMTIsOS4xN2wxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjQuODcsNi42OUExMi40MiwxMi40MiwwLDAsMSwyOC43NSwyNi4zbDEu''@;'; put 'put ''NDIsMS40MkExNC40MywxNC40MywwLDAsMCwyNS43NCw0Ljg4YTEsMSwwLDAsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI3LjMsMjcuNjdoMGwtMy44NC0zLjg0LS41Ny0uNTdoMEw0LjYzLDUsMy4y''@;'; put 'put ''MSw2LjQxLDguOCwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVYyMy4ybDUuNTksNS41OWMtLjE3LjEtLjM0LjItLjUxLjI5YTEsMSwwLDAsMCwuOSwxLjc5Yy4zNy0uMTkuNzItLjQsMS4wOC0uNjJsMi4xNCwyLjE0''@;'; put 'put ''TDMwLjYxLDMxbC0zLjI1LTMuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjIuNjksMTIuNjJBNi4yNyw2LjI3LDAsMCwxLDI1LjgsMThhNi4xNyw2LjE3LDAsMCwxLTEuNDIsMy45MmwxLjQyLDEuNDJhOC4xNiw4''@;'; put 'put ''LjE2LDAsMCwwLDItNS4zNCw4LjI4LDguMjgsMCwwLDAtNC4xLTcuMTEsMSwxLDAsMSwwLTEsMS43M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yMCw0LjYyYTEsMSwwLDAsMC0xLjY2LS43NWwtNi40Miw1LjZMMjAs''@;'; put 'put ''MTcuNTRaIi8+JyksRi5DbHJTaGFwZUhlYWRwaG9uZXM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg5LjJBMi43NCwyLjc0LDAsMCwwLDEyLDI4LjMz''@;'; put 'put ''VjIxLjY3QTIuNzQsMi43NCwwLDAsMCw5LjIsMTlINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYxOUgyNi44QTIuNzQsMi43NCwwLDAsMCwyNCwyMS42N3Y2LjY3QTIuNzQsMi43NCwwLDAsMCwyNi44LDMxSDMyVjE3LjVBMTQuMjcsMTQu''@;'; put 'put ''MjcsMCwwLDAsMTgsM1pNOS4yLDIxYS43NS43NSwwLDAsMSwuOC42N3Y2LjY3YS43NS43NSwwLDAsMS0uOC42N0g2VjIxWk0yNiwyOC4zM1YyMS42N2EuNzUuNzUsMCwwLDEsLjgtLjY3SDMwdjhIMjYuOEEuNzUuNzUsMCwwLDEsMjYsMjguMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsM0ExNC4yNywxNC4yNywwLDAsMCw0LDE3LjVWMzFIOC4yQTEuNzQsMS43NCwwLDAsMCwxMCwyOS4zM1YyMi42N0ExLjc0LDEuNzQsMCwwLDAsOC4yLDIxSDZWMTcuNUExMi4yNywxMi4yNywwLDAsMSwxOCw1LDEyLjI3''@;'; put 'put ''LDEyLjI3LDAsMCwxLDMwLDE3LjVWMjFIMjcuOEExLjc0LDEuNzQsMCwwLDAsMjYsMjIuNjd2Ni42N0ExLjc0LDEuNzQsMCwwLDAsMjcuOCwzMUgzMlYxNy41QTE0LjI3LDE0LjI3LDAsMCwwLDE4LDNaIi8+JyksRi5DbHJTaGFwZUZpbG1TdHJpcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wm0wLDI2SDZWNkgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTQuNiwyMy4wN2ExLjI5LDEuMjksMCwwLDAsMS4yNC4wOWw4LjczLTRhMS4zLDEuMywwLDAsMCwwLTIuMzdoMGwtOC43My00QTEuMywxLjMsMCwwLDAsMTQsMTR2OEExLjI5LDEuMjksMCwwLDAsMTQuNiwyMy4wN1ptMS04LjZM''@;'; put 'put ''MjMuMzEsMTgsMTUuNiwyMS41MVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI4IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgeD0iMTQiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyMCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjI2IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iOCIgeT0iMjYiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIxNCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC05IiB4PSIyMCIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIwLDdoMnYzSDIwWk0xNCw3aDJ2M0gxNFpNMTAsMjlIOFYyNmgyWm0wLTE5''@;'; put 'put ''SDhWN2gyWm02LDE5SDE0VjI2aDJabTYsMEgyMFYyNmgyWm0zLjE2LTEwLjE2TDE1LjM5LDIzLjJBMSwxLDAsMCwxLDE0LDIyLjI4VjEzLjU3YTEsMSwwLDAsMSwxLjQxLS45MUwyNS4xNiwxN0ExLDEsMCwwLDEsMjUuMTYsMTguODRaTTI4LDI5SDI2VjI2aDJabTAtMTlIMjZWN2gyWiIvPicp''@;'; put 'put ''LEYuQ2xyU2hhcGVNdXNpY05vdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMzRhNS44OSw1''@;'; put 'put ''Ljg5LDAsMCwwLS44Mi0uNTYsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxQzcuNTcsMjIuNyw0LjkyLDI2LjUsNS43OCwyOS44NGE1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41N2MzLjY3LTEuMTgsNi4xNy00''@;'; put 'put ''LjMzLDYuMDYtNy4zNlY5LjM0YTI5LjE0LDI5LjE0LDAsMCwxLDYuNTUsMS40MywxLDEsMCwxLDAsLjcyLTEuODdBMzEuMzcsMzEuMzcsMCwwLDAsMjEsNy4zM1Y0LjE3YzMuMzMuMzYsOCwxLjM4LDguOTIsMywyLDMuNDEtMi4zMyw3LjM2LTIuMzcsNy40YTEsMSwwLDAsMCwxLjMzLDEuNDlD''@;'; put 'put ''MjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2Wk0xNC4zNSwzMS42N2E2LjQzLDYuNDMsMCwwLDEtNS0uMjYsMy4zMSwzLjMxLDAsMCwxLTEuNjktMi4wN2MtLjYtMi4zMywxLjQ1LTUuMDUsNC41OC02LjA2YTcuNTIsNy41MiwwLDAsMSwyLjMtLjM3LDUuNTIsNS41MiwwLDAsMSwyLjY1''@;'; put 'put ''LjYyLDMuMzEsMy4zMSwwLDAsMSwxLjY5LDIuMDdDMTkuNTQsMjcuOTQsMTcuNDksMzAuNjYsMTQuMzUsMzEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIlxuICAgICAgICAgICAgICAgIGQ9Ik0zMS42OCw2LjE2Yy0xLjky''@;'; put 'put ''LTMuMy0xMC42LTQtMTEuNTgtNC4wOUwxOSwyVjIyLjI5YTUuODgsNS44OCwwLDAsMC0uODEtLjU1LDguMzMsOC4zMywwLDAsMC02LjUzLS40MWMtNC4xMiwxLjMzLTYuNzcsNS4xMy01LjkxLDguNDdhNS4zMyw1LjMzLDAsMCwwLDIuNjYsMy4zMiw3LjQ4LDcuNDgsMCwwLDAsMy42MS44OEE5''@;'; put 'put ''LjU0LDkuNTQsMCwwLDAsMTUsMzMuNTJjMy43LTEuMTksNi4yLTQuMzcsNi4wNi03LjQyLDAsMCwwLDAsMCwwVjguNDljMSwuMTIsMi4zNy4zMywzLjgyLjY0YTExLjE3LDExLjE3LDAsMCwxLDQuMDYsMS40NmMxLC42Ni4zOCwxLjkuMzMsMmExMS44LDExLjgsMCwwLDEtMS42NiwyLDEsMSww''@;'; put 'put ''LDAsMCwxLjMzLDEuNDlDMjkuMTUsMTUuODUsMzQuNSwxMSwzMS42OCw2LjE2WiIvPicpLEYuQ2xyU2hhcGVJbWFnZUdhbGxlcnk9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMu''@;'; put 'put ''ODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNMzIsMzBINFYxMkgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik04LjU2LDE5LjQ1YTMsMywwLDEsMC0zLTNB''@;'; put 'put ''MywzLDAsMCwwLDguNTYsMTkuNDVabTAtNC42QTEuNiwxLjYsMCwxLDEsNywxNi40NSwxLjYsMS42LDAsMCwxLDguNTYsMTQuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy45LDI4bDYtNiwzLjE4LDMuMThMMTQuMjYsMjhoMmw3''@;'; put 'put ''LjQ2LTcuNDZMMzAsMjYuNzd2LTJMMjQuMiwxOWEuNzEuNzEsMCwwLDAtMSwwbC01LjE2LDUuMTZMMTQuMzcsMjAuNWEuNzEuNzEsMCwwLDAtMSwwTDUuOTIsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSww''@;'; put 'put ''LDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwx''@;'; put 'put ''LDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwz''@;'; put 'put ''MC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTguNTYsMTMuNDVhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC41NiwxMy40NVpNMzAsMjhoLTI0bDcuNDYtNy40N2EuNzEuNzEsMCwwLDEsMSwwbDMuNjgsMy42OEwyMy4yMSwxOWEuNzEuNzEsMCwwLDEsMSwwTDMwLDI0Ljc5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlUmVwbGF5QWxsPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy40NiwyNi4yMmExLjQsMS40LDAsMCwwLDEtLjQybDUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAsLjQyLTEsMS40Niwx''@;'; put 'put ''LjQ2LDAsMCwwLS40Mi0xbC01LjU5LTUuNTZhMS40MywxLjQzLDAsMCwwLTIuNDQsMVYyNC43OWExLjQxLDEuNDEsMCwwLDAsLjg4LDEuMzJBMS41NCwxLjU0LDAsMCwwLDE3LjQ2LDI2LjIyWm0uMTYtMTIuMTYsNS4xOSw1LjE2LTUuMTksNS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEuNDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEu''@;'; put 'put ''NzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVJlcGxheU9uZT0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTks''@;'; put 'put ''MjcuMjdhMSwxLDAsMCwwLDEtMVYxNGExLDEsMCwwLDAtMS0xSDE5YTMuOCwzLjgsMCwwLDAtMS4xLjIzbC0yLC42MmEuOTIuOTIsMCwwLDAtLjcyLjg2Ljg4Ljg4LDAsMCwwLC44OC44NiwxLjQ2LDEuNDYsMCwwLDAsLjQzLS4wOEwxOCwxNS4wN3YxMS4yQTEsMSwwLDAsMCwxOSwyNy4yN1oi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiw1aC02LjdsMi45Mi0yLjY0QTEsMSwwLDAsMCwxMi45NC44OEw3LjMyLDYsMTIuOTQsMTFhMSwxLDAsMCwwLC42Ny4yNiwxLDEsMCwwLDAsLjc0LS4zMywxLDEsMCwwLDAtLjA3LTEu''@;'; put 'put ''NDJMMTEuNDYsN2g2LjZBMTEuNzgsMTEuNzgsMCwxLDEsNy43MSwyNC40MSwxLDEsMCwwLDAsNiwyNS4zNiwxMy43OCwxMy43OCwwLDEsMCwxOC4wNiw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVZpZGVvR2FsbGVyeT0oMCx4''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEy''@;'; put 'put ''SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuODIsMjYuNzlhMS43NCwxLjc0LDAsMCwwLC45My4yOCwxLjY4LDEuNjgsMCwwLDAsLjY5LS4x''@;'; put 'put ''NWw5Ljc3LTQuMzZhMS42OSwxLjY5LDAsMCwwLDAtMy4xTDE0LjQ0LDE1LjFhMS43LDEuNywwLDAsMC0yLjM5LDEuNTV2OC43MkExLjcsMS43LDAsMCwwLDEyLjgyLDI2Ljc5Wm0uNjMtMTAuMTRhLjI5LjI5LDAsMCwxLC4xNC0uMjUuMy4zLDAsMCwxLC4xNiwwLC4yNy4yNywwLDAsMSwuMTIs''@;'; put 'put ''MGw5Ljc3LDQuMzVhLjI5LjI5LDAsMCwxLC4xOC4yOC4yOC4yOCwwLDAsMS0uMTguMjdsLTkuNzcsNC4zNmEuMjguMjgsMCwwLDEtLjI4LDAsLjMxLjMxLDAsMCwxLS4xNC0uMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIs''@;'; put 'put ''MTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0yNC4xOCwyMS44M2wtOS43Nyw0LjM2QTEsMSwwLDAsMSwxMywyNS4y''@;'; put 'put ''OFYxNi41NmExLDEsMCwwLDEsMS40MS0uOTFMMjQuMTgsMjBBMSwxLDAsMCwxLDI0LjE4LDIxLjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlTWljcm9waG9uZT0o''@;'; put 'put ''MCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IE0xMyw5YzAtMi44LDIuMi01LDUtNXM1LDIuMiw1LDV2OFxuXHRcdGMwLDIuOC0yLjIsNS01LDVzLTUtMi4y''@;'; put 'put ''LTUtNVY5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsNS41LTQuNSwxMC0xMCwxMFM4LDIyLjUsOCwxN0g2YzAsNi4zLDQuOCwxMS40LDExLDExLjlWMzJoLTNjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoOGMw''@;'; put 'put ''LjYsMCwxLTAuNCwxLTFcblx0XHRzLTAuNC0xLTEtMWgtM3YtMy4xQzI1LjIsMjguNCwzMCwyMy4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDI0YzMuOSwwLDctMy4xLDctN1Y5YzAtMy45LTMuMS03LTctN3MtNywz''@;'; put 'put ''LjEtNyw3djhDMTEsMjAuOSwxNC4xLDI0LDE4LDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSww''@;'; put 'put ''LjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT0oMCx4LmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsNGMyLjgsMCw1LDIuMiw1LDV2OGMwLDAu''@;'; put 'put ''NC0wLjEsMC44LTAuMiwxLjJsMS42LDEuNmMwLjQtMC45LDAuNi0xLjgsMC42LTIuOFY5YzAtMy45LTMuMi03LTcuMS02Ljlcblx0XHRjLTIuOSwwLTUuNiwxLjktNi41LDQuN0wxMyw4LjNDMTMuNSw1LjksMTUuNiw0LjIsMTgsNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40LDAuMi05LjgtNC4xLTEw''@;'; put 'put ''LTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnogTTEzLjgsMTkuN0MxMy4z''@;'; put 'put ''LDE4LjksMTMsMTgsMTMsMTd2LTIuNmw3LjEsNy4xQzE3LjksMjIuNSwxNS4yLDIxLjgsMTMuOCwxOS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLDE3aC0yYzAsMS44LTAuNSwzLjUtMS40LDVsMS41LDEuNUMyOS4zLDIxLjUs''@;'; put 'put ''MjkuOSwxOS4zLDMwLDE3eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUsMTdWOWMwLTMuOS0zLjItNy03LjEtNi45Yy0yLjksMC01LjYsMS45LTYuNSw0LjdsMTMsMTNDMjQuOCwxOC45LDI1LDE3LjksMjUsMTd6IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNS4yLDI2LjZsNi45LDYuOWwxLjQtMS40TDQsMi42TDIuNiw0bDguNCw4LjRWMTdjMCwzLjksMy4xLDcsNyw3YzEuMywwLDIuNS0wLjMsMy42LTFsMi4yLDIuMkMyMi4xLDI2LjQsMjAuMSwyNywxOCwyN1xuXHRcdGMtNS40''@;'; put 'put ''LDAuMi05LjgtNC4xLTEwLTkuNGMwLTAuMiwwLTAuNCwwLTAuNkg2YzAuMSw2LjIsNC44LDExLjQsMTEsMTJ2M2gtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zQzIxLjIsMjguOCwyMy40LDI4LDI1LjIsMjYuNnoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksRi5NZWRpYVNoYXBlcz17cGxheTpGLkNsclNoYXBlUGxheSxwYXVzZTpGLkNsclNoYXBlUGF1c2UsInN0ZXAtZm9yd2FyZCI6Ri5DbHJTaGFwZVN0ZXBGb3J3YXJkLHN0b3A6Ri5DbHJTaGFwZVN0b3AscG93ZXI6''@;'; put 'put ''Ri5DbHJTaGFwZVBvd2VyLHJld2luZDpGLkNsclNoYXBlUmV3aW5kLCJmYXN0LWZvcndhcmQiOkYuQ2xyU2hhcGVGYXN0Rm9yd2FyZCxjYW1lcmE6Ri5DbHJTaGFwZUNhbWVyYSwidmlkZW8tY2FtZXJhIjpGLkNsclNoYXBlVmlkZW9DYW1lcmEsc2h1ZmZsZTpGLkNsclNoYXBlU2h1ZmZsZSwi''@;'; put 'put ''dm9sdW1lLXVwIjpGLkNsclNoYXBlVm9sdW1lVXAsInZvbHVtZS1kb3duIjpGLkNsclNoYXBlVm9sdW1lRG93biwidm9sdW1lLW11dGUiOkYuQ2xyU2hhcGVWb2x1bWVNdXRlLGhlYWRwaG9uZXM6Ri5DbHJTaGFwZUhlYWRwaG9uZXMsImZpbG0tc3RyaXAiOkYuQ2xyU2hhcGVGaWxtU3RyaXAs''@;'; put 'put ''Im11c2ljLW5vdGUiOkYuQ2xyU2hhcGVNdXNpY05vdGUsImltYWdlLWdhbGxlcnkiOkYuQ2xyU2hhcGVJbWFnZUdhbGxlcnksInJlcGxheS1hbGwiOkYuQ2xyU2hhcGVSZXBsYXlBbGwsInJlcGxheS1vbmUiOkYuQ2xyU2hhcGVSZXBsYXlPbmUsInZpZGVvLWdhbGxlcnkiOkYuQ2xyU2hhcGVW''@;'; put 'put ''aWRlb0dhbGxlcnksbWljcm9waG9uZTpGLkNsclNoYXBlTWljcm9waG9uZSwibWljcm9waG9uZS1tdXRlIjpGLkNsclNoYXBlTWljcm9waG9uZU11dGV9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25z''@;'; put 'put ''LmFkZChGLk1lZGlhU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3NoYXBlcy9zb2NpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoRiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksRi5Tb2NpYWxTaGFwZXM9Ri5DbHJTaGFwZUhhc2h0YWc9Ri5DbHJTaGFwZUNyb3duPUYuQ2xyU2hhcGVUaHVtYnNEb3duPUYuQ2xyU2hhcGVUaHVtYnNVcD1GLkNsclNoYXBlU2FkRmFjZT1GLkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2U9Ri5DbHJTaGFwZUhhcHB5RmFjZT1GLkNsclNoYXBlUGljdHVyZT1GLkNsclNoYXBlQ2hhdEJ1YmJsZT1GLkNsclNoYXBlVGFsa0J1YmJsZXM9Ri5DbHJTaGFwZUhlYXJ0QnJva2VuPUYuQ2xyU2hhcGVIZWFydD1GLkNsclNoYXBlSW5ib3g9Ri5DbHJTaGFwZUZs''@;'; put 'put ''YWc9Ri5DbHJTaGFwZVRhc2tzPUYuQ2xyU2hhcGVFbnZlbG9wZT1GLkNsclNoYXBlQm9va21hcms9Ri5DbHJTaGFwZUhhbGZTdGFyPUYuQ2xyU2hhcGVTdGFyPUYuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbGU9YWUoCi8qISAuL2NvcmUtc2hhcGVzICovCiIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKTtGLkNsclNoYXBlU2hhcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQs''@;'; put 'put ''MTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1LDAsMSwwLDUtNVptMC0yMGEzLDMsMCwxLDEtMywzQTMs''@;'; put 'put ''MywwLDAsMSwyNy41Myw0Wk03LDIxYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDcsMjFaTTI3LjUzLDMyYTMsMywwLDEsMSwzLTNBMywzLDAsMCwxLDI3LjUzLDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0y''@;'; put 'put ''Ny41MywyNGE1LDUsMCwwLDAtMy42LDEuNTVMMTEuNzQsMTkuNDVhNC40Nyw0LjQ3LDAsMCwwLDAtMi44bDEyLjIxLTYuMjFhNS4xMiw1LjEyLDAsMSwwLTEuMDctMS43TDEwLjc5LDE0Ljg5YTUsNSwwLDEsMCwwLDYuMzNsMTIuMDYsNi4wN0E0LjkzLDQuOTMsMCwwLDAsMjIuNTQsMjlhNSw1''@;'; put 'put ''LDAsMSwwLDUtNVoiLz4nKSxGLkNsclNoYXBlU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE5LDM0YTIuMjIsMi4yMiwwLDAsMS0xLjI0LS4zOGwtNy40Ni01YS4yMi4yMiwwLDAsMC0uMjUsMGwt''@;'; put 'put ''Ny40Niw1QTIuMjIsMi4yMiwwLDAsMSw3LjQsMzEuMjFsMi40NS04LjY0YS4yMy4yMywwLDAsMC0uMDgtLjI0TDIuNzEsMTYuNzhhMi4yMiwyLjIyLDAsMCwxLDEuMjktNGw5LS4zNGEuMjMuMjMsMCwwLDAsLjItLjE1bDMuMS04LjQzYTIuMjIsMi4yMiwwLDAsMSw0LjE3LDBsMy4xLDguNDNh''@;'; put 'put ''LjIzLjIzLDAsMCwwLC4yLjE1bDksLjM0YTIuMjIsMi4yMiwwLDAsMSwxLjI5LDRMMjcsMjIuMzNhLjIyLjIyLDAsMCwwLS4wOC4yNGwyLjQ1LDguNjRBMi4yMywyLjIzLDAsMCwxLDI3LjE5LDM0Wm0tOC44Mi03LjQyQTIuMjEsMi4yMSwwLDAsMSwxOS42LDI3bDcuNDYsNWEuMjIuMjIsMCww''@;'; put 'put ''LDAsLjM0LS4yNWwtMi40NS04LjY0YTIuMjEsMi4yMSwwLDAsMSwuNzctMi4zNWw3LjA2LTUuNTVhLjIyLjIyLDAsMCwwLS4xMy0uNGwtOS0uMzRhMi4yMiwyLjIyLDAsMCwxLTItMS40NmwtMy4xLTguNDNhLjIyLjIyLDAsMCwwLS40MiwwTDE1LjA2LDEzYTIuMjIsMi4yMiwwLDAsMS0yLDEu''@;'; put 'put ''NDZsLTksLjM0YS4yMi4yMiwwLDAsMC0uMTMuNEwxMSwyMC43NmEyLjIyLDIuMjIsMCwwLDEsLjc3LDIuMzVMOS4zMywzMS43NWEuMjEuMjEsMCwwLDAsLjA4LjI0LjIuMiwwLDAsMCwuMjYsMGw3LjQ2LTVBMi4yMiwyLjIyLDAsMCwxLDE4LjM2LDI2LjYyWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt''@;'; put 'put ''LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs''@;'; put 'put ''MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0WiIvPicpLEYuQ2xyU2hhcGVIYWxmU3Rhcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAs''@;'; put 'put ''MC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIyLjIyLDAsMCwxLC4wOC4yNEw3LjM1LDMx''@;'; put 'put ''LjIxQTIuMjMsMi4yMywwLDAsMCw5LjQ5LDM0YTIuMjIsMi4yMiwwLDAsMCwxLjI0LS4zOGw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIyLDIuMjIsMCwwLDAsMy4zOC0yLjQ1bC0yLjQ1LTguNjRhLjIzLjIzLDAsMCwxLC4wOC0uMjRaTTE4LjMzLDI2LjYyaDBhMi4yMSwy''@;'; put 'put ''LjIxLDAsMCwwLTEuMjQuMzhMOS42MiwzMmEuMjIuMjIsMCwwLDEtLjM0LS4yNWwyLjQ1LTguNjRBMi4yMSwyLjIxLDAsMCwwLDExLDIwLjc2TDMuOSwxNS4yMWEuMjIuMjIsMCwwLDEsLjEzLS40bDktLjM0QTIuMjIsMi4yMiwwLDAsMCwxNSwxM2wzLjEtOC40M2EuMi4yLDAsMCwxLC4yMS0u''@;'; put 'put ''MTVoMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcs''@;'; put 'put ''MGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIs''@;'; put 'put ''Mi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEsLjA4LS4yNFpNMjQuOSwyMy4xMWwyLjQ1LDguNjRBLjIyLjIyLDAsMCwxLDI3LDMybC03LjQ2LTVhMi4yMSwyLjIxLDAsMCwwLTEuMjQtLjM4aDBWNC40NGgwYS4yLjIsMCwwLDEs''@;'; put 'put ''LjIxLjE1TDIxLjYyLDEzYTIuMjIsMi4yMiwwLDAsMCwyLDEuNDZsOSwuMzRhLjIyLjIyLDAsMCwxLC4xMy40bC03LjA2LDUuNTVBMi4yMSwyLjIxLDAsMCwwLDI0LjksMjMuMTFaIi8+JyksRi5DbHJTaGFwZUJvb2ttYXJrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMzRhMiwyLDAsMCwxLTEuNDEtLjU4TDE4LDI2LjgybC02LjU0LDYuNTJBMiwyLDAsMCwxLDgsMzEuOTNWNGEyLDIsMCwwLDEsMi0ySDI2YTIsMiwwLDAsMSwyLDJWMzJhMiwyLDAsMCwxLTIsMlptMC0yaDBWNEgxMFYzMS45M0wx''@;'; put 'put ''OCwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMkgxMEEyLDIsMCwwLDAsOCw0VjMxLjkzYTIsMiwwLDAsMCwzLjQyLDEuNDFsNi41NC02LjUyLDYuNjMsNi42QTIsMiwwLDAsMCwyOCwzMlY0QTIsMiww''@;'; put 'put ''LDAsMCwyNiwyWiIvPicpLEYuQ2xyU2hhcGVFbnZlbG9wZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIs''@;'; put 'put ''MiwwLDAsMCwzMiw2Wk0zMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBMMzIsOS4yMXYxNy41bC03LjM2LTcuMzYtMS40MSwxLjQxWk01LjMxLDhIMzAuMzhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMDhWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEy''@;'; put 'put ''LDIsMCwwLDAsMi44MiwwbDguODMtOC43OGE3LjQ0LDcuNDQsMCwwLDEtMi0uODVsLTguMjYsOC4yMUw1LjMxLDhIMjIuODFhNy40OSw3LjQ5LDAsMCwxLS4zMS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMkE3LjQ1LDcuNDUsMCwwLDEs''@;'; put 'put ''MzIsMTMuMDhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuODYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjI2SDMyVjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCww''@;'; put 'put ''LDIuODIsMGw2LjY2LTYuNjNIMjMuMDhsLTUuMjQsNS4yMUw1LjMxLDhIMjAuMDZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxWiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4zMyw2YTIsMiwwLDAsMC0uNDEsMGgtMjhhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODEsNy4zOSwxOS4yNSwyMS44OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzMuODEsNy4zOVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4y''@;'; put 'put ''Ny03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNiwxMi4zNEE3LjQ5LDcu''@;'; put 'put ''NDksMCwwLDEsMjIuNSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI5''@;'; put 'put ''bC04LjcxLDguNjhhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjEyLjM5QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMw''@;'; put 'put ''LjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjUuNzdsLTYuNTIsNi40OWEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTUuMzhaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yMi45NCwxNS40aC0uN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDMuOTJhMiwyLDAsMCwwLS41My4wOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksRi5DbHJT''@;'; put 'put ''aGFwZVRhc2tzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMjksMzRINi43MUExLjcsMS43LDAsMCwxLDUsMzIuMzFWNi42OUExLjc1LDEuNzUsMCwwLDEsNyw1SDlWN0g3VjMySDI5VjdIMjdWNWgyLjI1''@;'; put 'put ''QTEuNywxLjcsMCwwLDEsMzEsNi42OVYzMi4zMUExLjcsMS43LDAsMCwxLDI5LjI5LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuNjYsMjUuNzYsMTEuMywyMC40QTEsMSwwLDAsMSwxMi43Miwx''@;'; put 'put ''OWwzLjk0LDMuOTQsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNiwxMUgxMFY3LjMzQTIuMzQsMi4zNCwwLDAsMSwxMi4zMyw1aDEuNzlhNCw0LDAs''@;'; put 'put ''MCwxLDcuNzUsMGgxLjc5QTIuMzQsMi4zNCwwLDAsMSwyNiw3LjMzWk0xMiw5SDI0VjcuMzNBLjMzLjMzLDAsMCwwLDIzLjY3LDdIMjBWNmEyLDIsMCwwLDAtNCwwVjdIMTIuMzNhLjMzLjMzLDAsMCwwLS4zMy4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LDkuODksMTkuNTYsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aC43MWwxLjE2LTJhNCw0LDAsMCwwLTcuNzQsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAs''@;'; put 'put ''MTAsNy4zM1YxMWg4LjY0QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjQuMTksMTUuNGwtNy41Myw3LjUzTDEyLjcyLDE5QTEs''@;'; put 'put ''MSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMCwuMi0uMzFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0yOSwxNS40VjMySDdWN0g5''@;'; put 'put ''VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43MWExLDEsMCwwLDAtMS40MS0xLjQxbC04LjY0LDguNjRaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIs''@;'; put 'put ''Ny41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIzLjEzLDlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAs''@;'; put 'put ''MCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjkuMjksNC45NWgtNy4yYTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWNi42NEEx''@;'; put 'put ''LjcsMS43LDAsMCwwLDI5LjI5LDQuOTVabS0xOCwzYTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gzLjQ0YTEsMSwwLDAsMSwxLDFWOS44SDExLjI1Wm0xNC41Miw5LjIzLTkuMTIsOS4xMi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwz''@;'; put 'put ''LjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjUuODgsMTUuNGExLjM4LDEuMzgsMCwwLDEtLjExLDEuODFsLTkuMTIsOS4x''@;'; put 'put ''Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDctN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwwLS4wOUgxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2guNDJMMjIsNC43NmE0LjMsNC4zLDAsMCwwLTgu''@;'; put 'put ''MDkuMTlIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02LjQ2LTMuN0gxMS4yNVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMyYTIuMzEsMi4zMSwwLDAsMSw0LjYzLDBWN2gyLjI2YTcuNTMs''@;'; put 'put ''Ny41MywwLDAsMS0uMDctMSw3LjUzLDcuNTMsMCwwLDEsLjA4LTEuMDVoLS41YTQuMzEsNC4zMSwwLDAsMC04LjE3LDBIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY0VjMyLjI2YTEuNywxLjcsMCwwLDAsMS43MSwxLjY5SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMjZWMTMuNDNBNy41Miw3''@;'; put 'put ''LjUyLDAsMCwxLDMwLDEzLjVabS00LjIzLDMuNzEtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlRmxhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYzQTEsMSwwLDAsMSw3LDNWMzNBMSwxLDAsMCwxLDYsMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC41NSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4x''@;'; put 'put ''MSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVY1LjA4QTguOCw4LjgsMCwwLDEsMTMuMjUsNGExMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjZBMTguNzUsMTguNzUs''@;'; put 'put ''MCwwLDAsMjksNi4xMlYxOC45NWExNi4xNiwxNi4xNiwwLDAsMS01LjU4LjkzLDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwxNy43OVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiww''@;'; put 'put ''LDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0xLjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjU1LDMuODJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgZD0iTTUuOTIsMmExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsNS45MiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMC41LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OUExMi43OCwxMi43OCwwLDAsMCwxMy4yLDIsMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNSwzLjgyWiIvPicpLEYuQ2xyU2hhcGVJbmJveD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwx''@;'; put 'put ''OCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41LDVIMjJWN2g3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjYu''@;'; put 'put ''NUExLjUsMS41LDAsMCwwLDI5LjUsNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQx''@;'; put 'put ''TDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YyMUgyMy42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAs''@;'; put 'put ''Ni41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjksMzFIN1YyM2gzLjkxYTcuNDIsNy40MiwwLDAsMCwxNC40NCwwSDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIZWFydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MTgsMzIuNDNhMSwxLDAsMCwxLS42MS0uMjFDMTEuODMsMjcuOSw4LDI0LjE4LDUuMzIsMjAuNTEsMS45LDE1LjgyLDEuMTIsMTEuNDksMyw3LjY0YzEuMzQtMi43NSw1LjE5LTUsOS42OS0zLjY5QTkuODcsOS44NywwLDAsMSwxOCw3LjcyYTkuODcsOS44NywwLDAsMSw1LjMxLTMuNzdjNC40''@;'; put 'put ''OS0xLjI5LDguMzUuOTQsOS42OSwzLjY5LDEuODgsMy44NSwxLjEsOC4xOC0yLjMyLDEyLjg3QzI4LDI0LjE4LDI0LjE3LDI3LjksMTguNjEsMzIuMjJBMSwxLDAsMCwxLDE4LDMyLjQzWk0xMC4xMyw1LjU4QTUuOSw1LjksMCwwLDAsNC44LDguNTFjLTEuNTUsMy4xOC0uODUsNi43MiwyLjE0''@;'; put 'put ''LDEwLjgxQTU3LjEzLDU3LjEzLDAsMCwwLDE4LDMwLjE2LDU3LjEzLDU3LjEzLDAsMCwwLDI5LjA2LDE5LjMzYzMtNC4xLDMuNjktNy42NCwyLjE0LTEwLjgxLTEtMi00LTMuNTktNy4zNC0yLjY1YTgsOCwwLDAsMC00Ljk0LDQuMiwxLDEsMCwwLDEtMS44NSwwLDcuOTMsNy45MywwLDAsMC00''@;'; put 'put ''Ljk0LTQuMkE3LjMxLDcuMzEsMCwwLDAsMTAuMTMsNS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDAsMTgsNy43MmE5''@;'; put 'put ''Ljg3LDkuODcsMCwwLDAtNS4zMS0zLjc3QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEs''@;'; put 'put ''MTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlSGVhcnRCcm9rZW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjA5LTUtOS42OS0zLjY5YTkuODcsOS44''@;'; put 'put ''NywwLDAsMC02LDQuODQsMTguOSwxOC45LDAsMCwwLTIuMjMsNS4zM2w1LjI4LDIuMzQtNC42LDQuMzcsMy40OSw0LjEsMS41Mi0xLjNMMTguNTQsMjFsNS40LTUuMTNMMTcuNTgsMTNBMTYuMjMsMTYuMjMsMCwwLDEsMTkuNzUsOC45YTcuNjgsNy42OCwwLDAsMSw0LjExLTNjMy4zNC0uODks''@;'; put 'put ''Ni4zNC42LDcuMzQsMi42NSwxLjU1LDMuMTguODUsNi43Mi0yLjE0LDEwLjgxQTU3LjE2LDU3LjE2LDAsMCwxLDE4LDMwLjE2LDU3LjE2LDU3LjE2LDAsMCwxLDYuOTQsMTkuMzNjLTMtNC4xLTMuNjktNy42NC0yLjE0LTEwLjgxYTUuOSw1LjksMCwwLDEsNS4zMy0yLjkzLDcuMzEsNy4zMSww''@;'; put 'put ''LDAsMSwyLC4yOSw3LjcsNy43LDAsMCwxLDMuMzgsMmwuMTUtLjNhMTAuNjYsMTAuNjYsMCwwLDEsMS0xLjQxLDkuNjQsOS42NCwwLDAsMC0zLjk0LTIuMjJDOC4yLDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45''@;'; put 'put ''LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcu''@;'; put 'put ''NjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBMTEuNTUsMTEuNTUsMCwwLDAsMTguMTksNy41YTE2Ljg5LDE2Ljg5LDAsMCwwLTIuNDgsNC41NkwyMi4yNywxNSwxNi43LDIwLjI2LDE5LDIzbC0xLjU3LDEuMzQtMy42LTQuMjIsNC43NC00LjUxLTUuNDQtMi40MWExOS40OSwxOS40OSww''@;'; put 'put ''LDAsMSwyLjMtNS41LDE0Ljc3LDE0Ljc3LDAsMCwxLDEuMDYtMS41NGwuMDYsMGE5LjY2LDkuNjYsMCwwLDAtMy44OS0yLjE4QzguMTksMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwx''@;'; put 'put ''LDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlVGFsa0J1YmJsZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEz''@;'; put 'put ''VjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlW''@;'; put 'put ''N0EzLDMsMCwwLDAsMzEsNFpNMzIsMjIuOTQsMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgzMUExLjEsMS4xLDAsMCwxLDMyLDcuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTIzLDI2YTEsMSwwLDAsMS0xLDFIOGMtLjIyLDAtLjQzLjItLjYxLjMzTDQsMzBWMTRhMSwxLDAsMCwxLDEtMUg4Ljg2VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3''@;'; put 'put ''LDAsMCwwLDI1LDI2LjEzVjI1SDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2OS43MkwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0x''@;'; put 'put ''LTFWN2ExLDEsMCwwLDEsMS0xSDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYs''@;'; put 'put ''MCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVs''@;'; put 'put ''NC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0i''@;'; put 'put ''NiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxGLkNsclNoYXBlQ2hhdEJ1YmJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0''@;'; put 'put ''LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI4LjI5LDI0LjYxYTEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAt''@;'; put 'put ''LjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMDgsMTEuMDgsMCwwLDEsMjguMjksMjQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNSwxNS41SDExYTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjc1LDIwLjVoLTcuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEs''@;'; put 'put ''MCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuMjgsMTIuNUgyNC43MmExLDEsMCwwLDAsMC0ySDExLjI4YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4zOCwxMi42OWE3LjQzLDcuNDMsMCwwLDEtMS44OS42NkExMC4zNSwxMC4zNSwwLDAsMSwzMiwxNi41YTExLjA4LDExLjA4LDAsMCwxLTMuNzEsOC4xMSwxLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwx''@;'; put 'put ''LDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMmExNiwxNiwwLDAsMSw0LjU1LjY2QTcuNDQsNy40NCwwLDAsMSwyMywzLjIyYTE4LDE4LDAsMCwwLTUtLjcyYy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2''@;'; put 'put ''LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0ExMi4zMiwxMi4zMiwwLDAsMCwzMy4zOCwxMi42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMSwxNS41YTEsMSwwLDAsMCwwLDJIMjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC4yNSwy''@;'; put 'put ''MC41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjgsMTEuNWExLDEsMCwwLDAsMSwxSDI0LjcyYTEsMSwwLDAsMCwu''@;'; put 'put ''ODMtLjQ3QTcuNTMsNy41MywwLDAsMSwyNCwxMC41SDExLjI4QTEsMSwwLDAsMCwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUz''@;'; put 'put ''LDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wm04LDE0YTEsMSwwLDAsMS0xLDFIMTFhMSwxLDAsMCwxLDAtMkgyNUExLDEsMCwwLDEsMjYsMTYuNVptLTMuMjUsNWExLDEsMCwwLDEtMSwxaC03LjVhMSwx''@;'; put 'put ''LDAsMCwxLDAtMmg3LjVBMSwxLDAsMCwxLDIyLjc1LDIxLjVabS0xMi40Ny0xMGExLDEsMCwwLDEsMS0xSDI0LjcyYTEsMSwwLDAsMSwwLDJIMTEuMjhBMSwxLDAsMCwxLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMwLDEzLjI1YTcuNDYsNy40NiwwLDAsMS00LjM1LTEuNCwxLDEsMCwwLDEtLjkzLjY1SDExLjI4YTEsMSwwLDAsMSwwLTJIMjQuMkE3LjQ2LDcuNDYsMCwwLDEsMjMsMy4yYTE4LDE4LDAsMCwwLTUtLjdjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgs''@;'; put 'put ''MTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3LDEyLjM0LDEyLjM0LDAsMCwwLS42OC00QTcuNDYsNy40NiwwLDAsMSwzMCwxMy4yNVpNMjEuNzUsMjIuNWgtNy41YTEsMSwwLDAsMSwwLTJoNy41YTEsMSwwLDAs''@;'; put 'put ''MSwwLDJabTMuMjUtNUgxMWExLDEsMCwwLDEsMC0ySDI1YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNS43NSIgcj0iNSIgIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLEYuQ2xyU2hhcGVQaWN0dXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEy''@;'; put 'put ''LDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywx''@;'; put 'put ''MSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2''@;'; put 'put ''LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAt''@;'; put 'put ''MywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4z''@;'; put 'put ''OCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwz''@;'; put 'put ''MiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45''@;'; put 'put ''bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYu''@;'; put 'put ''MDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLEYuQ2xyU2hhcGVIYXBweUZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC44OSIgY3k9IjEzLjg5IiByPSIyIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMDUiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xMywy''@;'; put 'put ''OC4yMWE4LjY3LDguNjcsMCwwLDAsOC4yNi02SDkuODdBOC42Nyw4LjY3LDAsMCwwLDE4LjEzLDI4LjIxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTguODksMTMuODlhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsOC44OSwxMy44OVptOS4yNCwxNC4zMmE4LjY3LDguNjcsMCwwLDEtOC4yNi02SDI2LjM4QTguNjcsOC42NywwLDAsMSwxOC4xMywyOC4yMVptNi45My0xMi4zMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyNS4wNSwx''@;'; put 'put ''NS44OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxGLkNsclNoYXBlTmV1dHJhbEZhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjA1LDIyLjA2aC0xMmExLDEsMCwwLDAsMCwyaDEyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjA1LDIxLjA2YTEsMSwwLDAsMS0xLDFoLTEyYTEsMSwwLDAsMSwwLTJoMTJBMSwxLDAsMCwxLDI1''@;'; put 'put ''LjA1LDIzLjA2Wk0yNywxNC4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjgsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjE2LDE2LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv''@;'; put 'put ''PicpLEYuQ2xyU2hhcGVTYWRGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuNDEiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjE2LDIwYTksOSwwLDAsMC03LjMzLDMuNzgsMSwxLDAsMSwwLDEuNjMsMS4xNiw3LDcsMCwwLDEsMTEuMzEtLjEzLDEsMSwwLDAsMCwxLjYtMS4yQTksOSwwLDAsMCwxOC4x''@;'; put 'put ''NiwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm05LDEyLjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0''@;'; put 'put ''LjI4Wm0tMTUuNTUsMS44YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDExLjQxLDE2LjA4Wm0xNCw3LjUzYTEsMSwwLDAsMS0xLjYsMS4yLDcsNywwLDAsMC0xMS4zMS4xMywxLDEsMCwxLDEtMS42My0xLjE2LDksOSwwLDAsMSwxNC41NC0uMTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksRi5DbHJTaGFwZVRodW1ic1VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwyNmMtMi45MiwxLjgyLTcuMyw0LTkuMzcsNGgtNmExNi42OCwxNi42OCwwLDAsMS0zLjMxLTYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsNCwxNmg5VjZh''@;'; put 'put ''Mi4wNSwyLjA1LDAsMCwxLDEuMjYtMS42OWMuNzcsMiwyLjYyLDYuNTcsNC4yMyw4LjcyQTExLjM5LDExLjM5LDAsMCwwLDI0LDE2LjkxVjE0Ljc4YTkuMTMsOS4xMywwLDAsMS0zLjkxLTNjLTEuODgtMi41MS00LjI5LTkuMTEtNC4zMS05LjE3QTEsMSwwLDAsMCwxNC41OSwyQzEzLjI1LDIu''@;'; put 'put ''MzgsMTEsMy42LDExLDZ2OEgzYTEsMSwwLDAsMC0xLDEsMjksMjksMCwwLDAsMS40LDkuNjJjMS44OSw1LjQsNC4xLDcuMTQsNC4yLDcuMjJhMSwxLDAsMCwwLC42MS4yMWg2LjQyYzIuNDMsMCw2LjU1LTIsOS4zNy0zLjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMzFIMjdhMSwxLDAsMCwxLTEtMVYxNGExLDEsMCwwLDEsMS0xaDdabS02LTJoNFYxNUgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYz''@;'; put 'put ''LDEyLjEyQzE3LjUxLDkuMjgsMTQuODgsMiwxNC44OCwyUzEyLDIuODMsMTIsNS4yNVYxNUgyLjIzYTI5LjQ2LDI5LjQ2LDAsMCwwLDEuNDQsOS43NEM1LjYxLDMwLjI3LDcuOCwzMiw3LjgsMzJoNi44NkMxNi45LDMyLDIxLDMwLjA2LDI0LDI4LjMxVjE1LjUxQTEwLjg0LDEwLjg0LDAsMCwx''@;'; put 'put ''LDE5LjYzLDEyLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNywxM2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwxLDFoN1YxM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''JyksRi5DbHJTaGFwZVRodW1ic0Rvd249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEwYzIuOTItMS44Miw3LjMtNCw5LjM3LTRoNmExNi42OCwxNi42OCwwLDAsMSwzLjMxLDYuMDhBMjYuNzEsMjYuNzEsMCwwLDEsMzIsMjBIMjNWMzBhMi4wNSwyLjA1LDAsMCwxLTEuMjYsMS42''@;'; put 'put ''OWMtLjc3LTItMi42Mi02LjU3LTQuMjMtOC43MkExMS4zOSwxMS4zOSwwLDAsMCwxMiwxOS4wOXYyLjEzYTkuMTMsOS4xMywwLDAsMSwzLjkxLDNjMS44OCwyLjUxLDQuMjksOS4xMSw0LjMxLDkuMTdhMSwxLDAsMCwwLDEuMTkuNjNDMjIuNzUsMzMuNjIsMjUsMzIuNCwyNSwzMFYyMmg4YTEs''@;'; put 'put ''MSwwLDAsMCwxLTEsMjksMjksMCwwLDAtMS40LTkuNjJjLTEuODktNS40LTQuMS03LjE0LTQuMi03LjIyQTEsMSwwLDAsMCwyNy43OSw0SDIxLjM3QzE4Ljk0LDQsMTQuODMsNiwxMiw3LjYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMiw1SDlhMSwxLDAsMCwxLDEsMVYyMmExLDEsMCwwLDEtMSwxSDJaTTgsN0g0VjIxSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi4zNywyMy44NGMyLjEyLDIuODQsNC43Niwx''@;'; put 'put ''MC4wNyw0Ljc2LDEwLjA3UzI0LDMzLjEzLDI0LDMwLjcxVjIxaDkuNzdhMjkuNDYsMjkuNDYsMCwwLDAtMS40NC05Ljc0QzMwLjM5LDUuNjgsMjguMiw0LDI4LjIsNEgyMS4zNUMxOS4xLDQsMTUsNS45LDEyLDcuNjV2MTIuOEExMC44NCwxMC44NCwwLDAsMSwxNi4zNywyMy44NFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOSwyM2ExLDEsMCwwLDAsMS0xVjZBMSwxLDAsMCwwLDksNUgyVjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQ3Jvd249KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik00LDEzLjMzQTEuMzksMS4zOSwwLDEsMCwyLjYsMTQuNzIsMS4zOSwxLjM5LDAsMCwwLDQsMTMuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuODEsMTUuODRhMjAuMzUs''@;'; put 'put ''MjAuMzUsMCwwLDAtNC41OCwxLjQzLDIyLjcsMjIuNywwLDAsMC0zLjQ4LDIuMUExNy42OSwxNy42OSwwLDAsMSwyMiwxNi41N2E0Ny42NSw0Ny42NSwwLDAsMS0yLjgtNy42OSwxLDEsMCwwLDAtMS0uNzQsMSwxLDAsMCwwLTEsLjc0LDQ2LjcxLDQ2LjcxLDAsMCwxLTIuOCw3LjY5LDE3LDE3''@;'; put 'put ''LDAsMCwxLTEuNzYsMi44LDIyLjcsMjIuNywwLDAsMC0zLjQ4LTIuMSwyMC42NiwyMC42NiwwLDAsMC00LjU4LTEuNDMsMSwxLDAsMCwwLTEsLjM5LDEsMSwwLDAsMC0uMDksMS4wNUE1MC4xMyw1MC4xMywwLDAsMSw3LjgyLDMxLjE3YTEsMSwwLDAsMCwxLC44M0gyNy42MmExLDEsMCwwLDAs''@;'; put 'put ''MS0uODMsNTAuMTUsNTAuMTUsMCwwLDEsNC4yNi0xMy44OSwxLDEsMCwwLDAtLjA5LTEuMDVBMSwxLDAsMCwwLDMxLjgxLDE1Ljg0Wk0yNi43OSwzMEg5LjY0YTU1LjY2LDU1LjY2LDAsMCwwLTMuNC0xMS43MSwxNS43NSwxNS43NSwwLDAsMSwyLjA5Ljc4LDIwLDIwLDAsMCwxLDMuODUsMi40''@;'; put 'put ''NSwxLDEsMCwwLDAsMS4zOS0uMDksMTkuMjgsMTkuMjgsMCwwLDAsMi42Ny00LDQzLjQ2LDQzLjQ2LDAsMCwwLDItNC44OSw0MS43NCw0MS43NCwwLDAsMCwyLDQuODksMTkuOTIsMTkuOTIsMCwwLDAsMi42Niw0LDEsMSwwLDAsMCwxLjQuMDksMTkuMjEsMTkuMjEsMCwwLDEsMy44NS0yLjQ1''@;'; put 'put ''LDE0Ljc3LDE0Ljc3LDAsMCwxLDIuMDktLjc4QTU1LjA3LDU1LjA3LDAsMCwwLDI2Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTguMjMsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxOC4yMywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMi41OCwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUEx''@;'; put 'put ''LjEsMS4xLDAsMCwwLDEyLjU4LDI2LjM0WiIvPjxwYXRoIGQ9Ik0yMy44OSwyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDIzLjg5LDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cblxuICA8cGF0aCBkPSJNMi42''@;'; put 'put ''LDExLjkzQTEuNCwxLjQsMCwxLDAsNCwxMy4zMywxLjQsMS40LDAsMCwwLDIuNiwxMS45M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPGVsbGlwc2UgY3g9IjMzLjgzIiBjeT0iMTMuMzMiIHJ4PSIxLjM5IiByeT0iMS4zOSIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjYzLDE2''@;'; put 'put ''LjFBMTguNjEsMTguNjEsMCwwLDAsMjgsMTcuMzRhMjEuNTcsMjEuNTcsMCwwLDAtNCwyLjQ5LDE5LjIsMTkuMiwwLDAsMS0yLjI2LTMuNDksNDguOTIsNDguOTIsMCwwLDEtMi41Mi02LjU4LDEsMSwwLDAsMC0xLS43MWgwYTEsMSwwLDAsMC0xLC43MSw0OC40Miw0OC40MiwwLDAsMS0yLjUy''@;'; put 'put ''LDYuNTgsMTguNjksMTguNjksMCwwLDEtMi4yNiwzLjQ4LDIyLjgxLDIyLjgxLDAsMCwwLTQtMi40OEExOC44MywxOC44MywwLDAsMCw0LjksMTYuMWExLDEsMCwwLDAtMSwuMzMsMSwxLDAsMCwwLS4xMywxLjA3LDU1LjksNTUuOSwwLDAsMSw0LDEzLjUsMSwxLDAsMCwwLDEsLjgzaDE5YTEs''@;'; put 'put ''MSwwLDAsMCwxLS44Myw1NS45LDU1LjksMCwwLDEsNC0xMy41LDEsMSwwLDAsMC0uMTMtMS4wN0ExLDEsMCwwLDAsMzEuNjMsMTYuMVpNMTEuMDgsMjguNTVhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwxMS4wOCwyOC41NVptNy4xNSwwYTEuMTEsMS4xMSwwLDAs''@;'; put 'put ''MSwwLTIuMjEsMS4xMSwxLjExLDAsMCwxLDAsMi4yMVptNy4xNiwwYTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMjUuMzksMjguNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gICcpLEYuQ2xyU2hhcGVIYXNodGFnPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsMTJIMjUuMzRsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwyMy4zLDEySDE1LjExbDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMTMuMDcsMTJINmExLDEsMCwwLDAsMCwyaDYuNjdsLTEuNiw4SDRhMSwxLDAsMCwwLDAsMmg2LjY2TDku''@;'; put 'put ''MTEsMzEuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjY4LjY4LDAsMCwwLC4yLDAsMSwxLDAsMCwwLDEtLjhMMTIuNywyNGg4LjE5bC0xLjU1LDcuNzRhMSwxLDAsMCwwLC43OSwxLjE3LjYyLjYyLDAsMCwwLC4xOSwwLDEsMSwwLDAsMCwxLS44TDIyLjkzLDI0SDMwYTEsMSwwLDAsMCwwLTJIMjMu''@;'; put 'put ''MzNsMS42MS04SDMyYTEsMSwwLDAsMCwwLTJaTTIxLjI5LDIySDEzLjFsMS42MS04SDIyLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMS44NywxMEgyNi4zMmwxLTQuODNBMSwxLDAsMCwwLDI2LjM1LDRoLTJhMSwxLDAs''@;'; put 'put ''MCwwLTEsLjc4TDIyLjMzLDEwaC01LjRsMS00LjgzQTEsMSwwLDAsMCwxNyw0SDE1YTEsMSwwLDAsMC0xLC43OEwxMywxMEg3YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJoNS41NUwxMC41LDIyaC02YTEsMSwwLDAsMC0xLC44bC0uNDEsMmExLDEsMCwwLDAsMSwxLjJI''@;'; put 'put ''OS42OGwtMSw0LjgzYTEsMSwwLDAsMCwxLDEuMTdoMmExLDEsMCwwLDAsLjk1LS43OEwxMy42NywyNmg1LjRsLTEsNC44M0ExLDEsMCwwLDAsMTksMzJoMmExLDEsMCwwLDAsMS0uNzhMMjMuMDUsMjZoNmExLDEsMCwwLDAsMS0uOGwuNC0yYTEsMSwwLDAsMC0xLTEuMkgyMy44N2wxLjYzLTho''@;'; put 'put ''NmExLDEsMCwwLDAsMS0uOGwuNDEtMkExLDEsMCwwLDAsMzEuODcsMTBabS0xMiwxMmgtNS40bDEuNjQtOGg1LjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLEYuU29jaWFsU2hhcGVzPXtjcm93bjpGLkNsclNoYXBlQ3Jvd24sc2hhcmU6Ri5DbHJT''@;'; put 'put ''aGFwZVNoYXJlLHN0YXI6Ri5DbHJTaGFwZVN0YXIsImhhbGYtc3RhciI6Ri5DbHJTaGFwZUhhbGZTdGFyLGJvb2ttYXJrOkYuQ2xyU2hhcGVCb29rbWFyayxlbnZlbG9wZTpGLkNsclNoYXBlRW52ZWxvcGUsY2FsZW5kYXI6bGUuQ2xyU2hhcGVDYWxlbmRhcixldmVudDpsZS5DbHJTaGFwZUV2''@;'; put 'put ''ZW50LHRhc2tzOkYuQ2xyU2hhcGVUYXNrcyxmbGFnOkYuQ2xyU2hhcGVGbGFnLGluYm94OkYuQ2xyU2hhcGVJbmJveCxoYXNodGFnOkYuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OkYuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpGLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxl''@;'; put 'put ''cyI6Ri5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Ri5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpGLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Ri5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpGLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNl''@;'; put 'put ''IjpGLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpGLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpGLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lh''@;'; put 'put ''bFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAseC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnKShGLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChGLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMv''@;'; put 'put ''dGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxGLkNsclNoYXBlVk1XQXBwPUYuQ2xyU2hhcGVWTT1GLkNsclNoYXBlUm91dGVyPUYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPUYuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3M9Ri5DbHJTaGFwZU5ldHdvcmtHbG9iZT1GLkNsclNoYXBlVGFibGV0PUYuQ2xyU2hh''@;'; put 'put ''cGVNb2JpbGU9Ri5DbHJTaGFwZUJhdHRlcnk9Ri5DbHJTaGFwZUFwcGxpY2F0aW9uPUYuQ2xyU2hhcGVDb2RlPUYuQ2xyU2hhcGVUZXJtaW5hbD1GLkNsclNoYXBlRGlzcGxheT1GLkNsclNoYXBlQ29tcHV0ZXI9Ri5DbHJTaGFwZUZsb3BweT1GLkNsclNoYXBlUGx1Z2luPUYuQ2xyU2hhcGVE''@;'; put 'put ''b3dubG9hZENsb3VkPUYuQ2xyU2hhcGVVcGxvYWRDbG91ZD1GLkNsclNoYXBlRXhwb3J0PUYuQ2xyU2hhcGVJbXBvcnQ9Ri5DbHJTaGFwZVNoaWVsZFg9Ri5DbHJTaGFwZVNoaWVsZD1GLkNsclNoYXBlU2hpZWxkQ2hlY2s9Ri5DbHJTaGFwZVJlc291cmNlUG9vbD1GLkNsclNoYXBlRGF0YUNs''@;'; put 'put ''dXN0ZXI9Ri5DbHJTaGFwZU1lbW9yeT1GLkNsclNoYXBlQ1BVPUYuQ2xyU2hhcGVCdWlsZGluZz1GLkNsclNoYXBlQXBwbGljYXRpb25zPUYuQ2xyU2hhcGVDbHVzdGVyPUYuQ2xyU2hhcGVTdG9yYWdlPUYuQ2xyU2hhcGVIb3N0PUYuQ2xyU2hhcGVEYXNoYm9hcmQ9Ri5DbHJTaGFwZU1vdXNl''@;'; put 'put ''PUYuQ2xyU2hhcGVLZXlib2FyZD1GLkNsclNoYXBlRGV2aWNlcz1GLkNsclNoYXBlQmFja3VwPUYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlPUYuQ2xyU2hhcGVIYXJkRGlzaz1GLkNsclNoYXBlUmFja1NlcnZlcj1GLkNsclNoYXBlV2lmaT1GLkNsclNoYXBlQnVuZGxlPUYuQ2xyU2hhcGVCbG9j''@;'; put 'put ''a3NHcm91cD1GLkNsclNoYXBlQmxvY2s9Ri5DbHJTaGFwZUxheWVycz1GLkNsclNoYXBlVW5pbnN0YWxsPUYuQ2xyU2hhcGVJbnN0YWxsPUYuQ2xyU2hhcGVOb1dpZmk9Ri5DbHJTaGFwZVBob25lSGFuZHNldD1GLkNsclNoYXBlUnVsZXJQZW5jaWw9dm9pZCAwLEYuVGVjaG5vbG9neVNoYXBl''@;'; put 'put ''cz1GLkNsclNoYXBlRmlsZVNoYXJlMj1GLkNsclNoYXBlQ2lDZD1GLkNsclNoYXBlQW5pbWF0aW9uPUYuQ2xyU2hhcGVUYXBlRHJpdmU9Ri5DbHJTaGFwZU1lZGlhQ2hhbmdlcj1GLkNsckNvbnRyb2xMdW49Ri5DbHJTaGFwZVBvZD1GLkNsclNoYXBlTm9kZT1GLkNsclNoYXBlTmFtZXNwYWNl''@;'; put 'put ''PUYuQ2xyU2hhcGVOb2Rlcz1GLkNsclNoYXBlTm9kZUdyb3VwPUYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj1GLkNsclNoYXBlSG9zdEdyb3VwPUYuQ2xyU2hhcGVTcXVpZD1GLkNsclNoYXBlQ2FwYWNpdG9yPUYuQ2xyU2hhcGVSZXNpc3Rvcj1GLkNsclNoYXBlSW5kdWN0b3I9Ri5DbHJTaGFw''@;'; put 'put ''ZVJhZGFyPUYuQ2xyU2hhcGVVc2I9Ri5DbHJTaGFwZVFyQ29kZT1GLkNsclNoYXBlRmlsZVNoYXJlPUYuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9Ri5DbHJTaGFwZUNvbnRhaW5lcj1GLkNsclNoYXBlQ2REdmQ9Ri5DbHJTaGFwZUJhckNvZGU9Ri5DbHJTaGFwZUF0b209Ri5DbHJTaGFwZUFz''@;'; put 'put ''c2lnblVzZXI9Ri5DbHJTaGFwZVByb2Nlc3NPblZNPUYuQ2xyU2hhcGVCbHVldG9vdGhPZmY9Ri5DbHJTaGFwZUJsdWV0b290aD1GLkNsclNoYXBlU1NEPUYuQ2xyU2hhcGVOVk1lPUYuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz1GLkNsclNoYXBlSGFyZERyaXZlPUYuQ2xyU2hhcGVBZG1pbmlz''@;'; put 'put ''dHJhdG9yPUYuQ2xyU2hhcGVGbGFzaz1GLkNsclNoYXBlSGVsaXg9Ri5DbHJTaGFwZURlcGxveT1GLkNsclNoYXBlQ2xvdWRUcmFmZmljPUYuQ2xyU2hhcGVDbG91ZFNjYWxlPUYuQ2xyU2hhcGVDbG91ZE5ldHdvcms9Ri5DbHJTaGFwZVVubGluaz1GLkNsclNoYXBlTGluaz1GLkNsclNoYXBl''@;'; put 'put ''RGlzY29ubmVjdD1GLkNsclNoYXBlQ29ubmVjdD1GLkNsclNoYXBlVW5hcmNoaXZlPUYuQ2xyU2hhcGVBcmNoaXZlPUYuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT12b2lkIDA7dmFyIHg9YWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp''@;'; put 'put ''bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWFlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ri5DbHJTaGFwZVJ1bGVyUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29u''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBwb2ludHM9IjkgMTcuNDEgOSAyNyAxOC41OSAyNyAxNi41OSAyNSAxMSAyNSAxMSAxOS40MSA5IDE3LjQxIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgZD0iTTM0Ljg3LDMyLjI5LDMyLDI5LjM4VjMySDRWMjcuODVINnYtMS42SDRWMTkuNkg2VjE4SDRWMTEuNkg2VjEwSDRWNC40MUwxOS45NCwyMC4yNlYxNy40NEwzLjcxLDEuMjlBMSwxLDAsMCwwLDIsMlYzM2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjQsMzBoNGEyLDIsMCwwLDAsMi0yVjguN0wyNy43LDQuNDdhMiwyLDAsMCwwLTEuNzYtMWgwYTIsMiwwLDAsMC0xLjc2LDEuMDhMMjIsOC43MlYyOEEyLDIsMCwwLDAs''@;'; put 'put ''MjQsMzBaTTI0LDkuMmwxLjk0LTMuNzdMMjgsOS4yMVYyNEgyNFptMCwxNi40M2g0djIuNDRIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQuODcsMzIuMjEsMzAsMjcuMzdWOC43NUwyNy43LDQuNTJhMiwyLDAs''@;'; put 'put ''MCwwLTMuNTQsMEwyMiw4Ljc2VjE5LjQxTDMuNzEsMS4yMUExLDEsMCwwLDAsMiwxLjkyVjEwSDQuMTd2MS42SDJWMThINC4xN3YxLjZIMnY2LjY1SDQuMTd2MS42SDJ2NS4wN2ExLDEsMCwwLDAsMSwxSDM0LjE2YTEsMSwwLDAsMCwuNzEtMS43MVpNMTAsMjZWMTYuOTRMMTkuMDcsMjZabTE4''@;'; put 'put ''LDIuMTFIMjRWMjUuNjhoNFptMC00SDI0VjkuMjVsMS45NC0zLjc3TDI4LDkuMjZaIi8+XG4nKSxGLkNsclNoYXBlUGhvbmVIYW5kc2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNzMsMzUuNDRhNC43''@;'; put 'put ''Miw0LjcyLDAsMCwxLTEtLjExLDMzLjkxLDMzLjkxLDAsMCwxLTE2LjYyLTguNzUsMzIuNzEsMzIuNzEsMCwwLDEtOS0xNi4yNUE0LjU4LDQuNTgsMCwwLDEsMi40Niw2LjA1bDQtMy44NUEyLDIsMCwwLDEsOCwxLjY2YTIsMiwwLDAsMSwxLjQ1Ljg3bDUsNy4zOWExLjYsMS42LDAsMCwxLS4x''@;'; put 'put ''MSwxLjlsLTIuNTEsM2ExOC45NCwxOC45NCwwLDAsMCw0LjE3LDUuODloMGExOS4yNiwxOS4yNiwwLDAsMCw2LjA3LDQuMDlsMy4xMS0yLjQ3YTEuNjQsMS42NCwwLDAsMSwxLjg2LS4xMmw3LjU1LDQuODhBMiwyLDAsMCwxLDM1LDMwLjJsLTMuOSwzLjg2QTQuNzQsNC43NCwwLDAsMSwyNy43''@;'; put 'put ''MywzNS40NFpNNy44NCwzLjY0bC00LDMuODVhMi41NCwyLjU0LDAsMCwwLS43NSwyLjQsMzAuNywzMC43LDAsMCwwLDguNDEsMTUuMjYsMzEuOSwzMS45LDAsMCwwLDE1LjY0LDguMjMsMi43NSwyLjc1LDAsMCwwLDIuNS0uNzRsMy45LTMuODYtNy4yOS00LjcxLTMuMzQsMi42NmExLDEsMCww''@;'; put 'put ''LDEtLjkyLjE3LDIwLjA2LDIwLjA2LDAsMCwxLTcuMzYtNC43NWgwYTE5LjQ5LDE5LjQ5LDAsMCwxLTQuODctNy4yQTEsMSwwLDAsMSwxMCwxNGwyLjctMy4yM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4yMiwy''@;'; put 'put ''MC42NGEyMC4zNywyMC4zNywwLDAsMCw3LjQsNC43OWwzLjc3LTNhLjY3LjY3LDAsMCwxLC43NiwwbDcsNC41MWEyLDIsMCwwLDEsLjMzLDMuMThsLTMuMjgsMy4yNGE0LDQsMCwwLDEtMy42MywxLjA3LDM1LjA5LDM1LjA5LDAsMCwxLTE3LjE1LTlBMzMuNzksMzMuNzksMCwwLDEsMS4xNSw4''@;'; put 'put ''LjZhMy43OCwzLjc4LDAsMCwxLDEuMS0zLjU1bDMuNC0zLjI4YTIsMiwwLDAsMSwzLjEyLjMyTDEzLjQzLDlhLjYzLjYzLDAsMCwxLDAsLjc1bC0zLjA3LDMuNjlBMTkuNzUsMTkuNzUsMCwwLDAsMTUuMjIsMjAuNjRaIi8+XG4nKSxGLkNsclNoYXBlTm9XaWZpPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuNDJhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMjQuNDJabTAsNmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwxOCwzMC40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuMjEsMjEuODVhMSwxLDAsMCwwLS4yMy0xLjQsMTMuNTYsMTMuNTYsMCwwLDAtNS0yLjIzbDMuODcsMy44N0ExLDEsMCwwLDAsMjYuMjEsMjEuODVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LjA1LDEwLjcyYTIwLjg4LDIwLjg4LDAsMCwwLTQuMTYuNDNsMS43NCwxLjc0YTE5LDE5LDAsMCwxLDIuNDItLjE3QTE4Ljc2LDE4Ljc2LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAs''@;'; put 'put ''MTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMzLjU1LDguMkEyOC4xMSwyOC4xMSwwLDAsMCw4LjExLDUuMzZMOS42OSw2LjkzQTI2LDI2LDAsMCwxLDMyLjQ1LDkuODdhMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xLjg0LDQuNzUsNC4yNyw3LjE4Yy0uNjIuMzQtMS4yMy43LTEuODMsMS4xQTEsMSwwLDEsMCwzLjU2LDkuOTRDNC4yNiw5LjQ3LDUsOSw1Ljc0LDguNjVs''@;'; put 'put ''My44NywzLjg3QTIwLjU5LDIwLjU5LDAsMCwwLDYuMjMsMTQuNCwxLDEsMCwwLDAsNy4zNiwxNmExOC44MiwxOC44MiwwLDAsMSwzLjc3LTJsNC4xNiw0LjE2QTEzLjUxLDEzLjUxLDAsMCwwLDEwLDIwLjU1YTEsMSwwLDAsMCwxLjE4LDEuNjFBMTEuNTIsMTEuNTIsMCwwLDEsMTcsMjBsMTAu''@;'; put 'put ''OCwxMC44LDEuNDEtMS40MS0yNi0yNloiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjkuNTQiIHI9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiIGQ9Ik0yOS4xOCwxNy43MWwuMTEtLjE3YTEuNTEsMS41MSwwLDAsMC0uNDctMi4xQTIwLjU3LDIwLjU3LDAsMCwwLDE4LDEyLjM3Yy0uNTYsMC0xLjExLDAtMS42NS4wN2wzLjIxLDMuMjFhMTcuNDEsMTcuNDEsMCwwLDEsNy42LDIuNTJBMS40OSwxLjQ5LDAsMCwwLDI5LjE4LDE3''@;'; put 'put ''LjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTMyLjc2LDkuMzhBMjcuOSwyNy45LDAsMCwwLDEwLjE4LDYuMjdMMTIuODEsOC45QTI0LjY4LDI0LjY4LDAsMCwxLDMxLjEsMTIuMTJhMS40OSwxLjQ5LDAsMCwwLDIt''@;'; put 'put ''LjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMyw0Ljc1bDMuMSwzLjFBMjcuMjgsMjcuMjgsMCwwLDAsMy4xOCw5LjQyYTEuNTEsMS41MSwwLDAsMC0u''@;'; put 'put ''NDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY5LDI0LjY5LDAsMCwxLDMuNjctMS45bDMuMTQsMy4xNGEyMC42MywyMC42MywwLDAsMC00LjUzLDIuMDksMS41MSwxLjUxLDAsMCwwLS40NiwyLjFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NkExNy40NiwxNy40''@;'; put 'put ''NiwwLDAsMSwxNC4yNSwxNmwzLjYsMy42YTEzLjM5LDEzLjM5LDAsMCwwLTYuNzksMS45MywxLjUsMS41LDAsMCwwLS40NiwyLjA5bC4xLjE2YTEuNTIsMS41MiwwLDAsMCwyLjA2LjQ0LDEwLjIsMTAuMiwwLDAsMSw5LS43TDI5LDMwLjc1bDEuNDEtMS40MS0yNi0yNloiLz5cbicpLEYuQ2xy''@;'; put 'put ''U2hhcGVJbnN0YWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBh''@;'; put 'put ''MiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCwwLDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEwLjMsMTguODdsNyw2Ljg5YTEsMSwwLDAsMCwxLjQsMGw3''@;'; put 'put ''LTYuODlhMSwxLDAsMCwwLTEuNC0xLjQzTDE5LDIyLjY1VjRhMSwxLDAsMCwwLTIsMFYyMi42NWwtNS4zLTUuMjFhMSwxLDAsMCwwLTEuNCwxLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+PHBhdGggZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAs''@;'; put 'put ''MCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYWxlcnRlZCIgZD0iTTMxLDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiLz5cbicpLEYuQ2xyU2hhcGVVbmluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43''@;'; put 'put ''LDI1LjNsLTUuMjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuOTIsOEgyNi41NWExLDEsMCwwLDAsMCwySDMxVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTBBMiwyLDAsMCww''@;'; put 'put ''LDMwLjkyLDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUu''@;'; put 'put ''MjgtNS4yMSw1LjI4LTUuMjFhMSwxLDAsMCwwLTEuNDEtMS40MkwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLDEzLjQzVjMwSDVWMTBIOS4zOGExLDEsMCwwLDAsMC0ySDUuMDhBMiwyLDAsMCwwLDMsMTBWMzBhMiwyLDAsMCwwLDIuMDgsMkgzMC45MkEyLDIsMCwwLDAsMzMsMzBWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEz''@;'; put 'put ''LjQzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTEuMjksMjYuNzJhMSwxLDAsMCwwLDEuNDEsMEwxOCwyMS40OWw1LjMsNS4yM0ExLDEsMCwwLDAsMjQuNywyNS4zbC01LjI4LTUuMjEsNC43NS00LjY5SDIyLjIzYTMuNjUsMy42NSwwLDAsMS0uODEtLjFMMTgsMTgu''@;'; put 'put ''NjhsLTUuMy01LjIzYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS4yOCw1LjIxTDExLjMsMjUuM0ExLDEsMCwwLDAsMTEuMjksMjYuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMx''@;'; put 'put ''LDE1LjRWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbicpLEYuQ2xyU2hh''@;'; put 'put ''cGVMYXllcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWEx''@;'; put 'put ''LDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVpNNS4zNCwxMi4xNmwxMi42Niw2LDEyLjY2LTZMMTgsNi4xOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjYuMTZhMSwxLDAs''@;'; put 'put ''MCwxLS40My0uMUwyLjU3LDE5YTEsMSwwLDEsMSwuODUtMS44MUwxOCwyNC4wNmwxNC41Ny02Ljg5QTEsMSwwLDEsMSwzMy40MywxOWwtMTUsNy4wOUExLDEsMCwwLDEsMTgsMjYuMTZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyMC4yNWExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwwLTEuODFsMTUtNy4wOWExLDEsMCwwLDEsLjg1LDBsMTUsNy4wOWExLDEsMCwwLDEsMCwxLjgxbC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyMC4yNVoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSww''@;'; put 'put ''LDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xOCwzMi4wN2ExLDEsMCwwLDEtLjQzLS4xbC0xNS03LjA5YTEsMSwwLDAsMSwuODUtMS44MUwxOCwzMGwxNC41Ny02Ljg5YTEsMSwwLDEsMSwuODUs''@;'; put 'put ''MS44MUwxOC40MywzMkExLDEsMCwwLDEsMTgsMzIuMDdaIi8+XG4nKSxGLkNsclNoYXBlQmxvY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQyLDkuMDlsLTEzLTZhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx''@;'; put 'put ''LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTBBMSwxLDAsMCwwLDMxLjQyLDkuMDlaTTE4LDUuMSwyOC42MSwxMCwxOCwxNC45LDcuMzksMTBaTTYsMTEuNTZsMTEsNS4wOHYxNC44TDYsMjYuMzZaTTE5LDMxLjQ0VjE2LjY0bDExLTUuMDh2MTQuOFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjUzVjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDIuNTctMS4xOWEzLjY3LDMuNjcsMCwwLDEtMi4xMS0xLjIyTDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsMy4wOCwxLjQyLDEtMS43NEwx''@;'; put 'put ''OC40MiwzLjA5YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjE1LjUzWk0xNywzMS40NCw2LDI2LjM2VjExLjU2bDExLDUuMDhaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxLjI2bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkySDMzLjdhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkyTDI5LjA4LDEuMjZBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg3LDEuMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3''@;'; put 'put ''LDcuNTcsMCwwLDEtMi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmEx''@;'; put 'put ''LDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMt''@;'; put 'put ''NmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsMTQuOSw3LjM5LDEwLDE4LDUuMSwyOC42MSwxMFpNMzAsMjYu''@;'; put 'put ''MzYsMTksMzEuNDRWMTYuNjRsMTEtNS4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuMzh2MTFMMTksMzEuNDRWMTYuNjRsMi43OS0xLjI5YTMuNjgsMy42OCwwLDAsMS0yLjI1LTEuMTZMMTgsMTQuOSw3''@;'; put 'put ''LjM5LDEwLDE4LDUuMWwzLDEuMzksMS0xLjc1TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTIsMjEuMTMsMTFhMS4yNywxLjI3LDAsMCwwLDEuMSwxLjkxSDMzLjY4QTEuMjcsMS4yNywwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjEyQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjI2LjM2TDE5LDMxLjQ0VjE2LjY0bDguMDgtMy43M2E3LjU3LDcuNTcsMCwwLDEt''@;'; put 'put ''Mi0xLjI3TDE4LDE0LjksNy4zOSwxMCwxOCw1LjFsNC42MSwyLjEzQTcuMTIsNy4xMiwwLDAsMSwyMi41LDZhOCw4LDAsMCwxLC4wNy0xTDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0''@;'; put 'put ''LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTMuMjJBNy4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksRi5DbHJTaGFwZUJsb2Nrc0dyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0z''@;'; put 'put ''LjQ1YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBs''@;'; put 'put ''Ny41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yLjgxLjkxTDI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1Wk0xOC4xLDQuMDhsNS4xMSwyLjM1TDE4LjEsOC43OCwxMyw2LjQzWk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIy''@;'; put 'put ''LDUuNDksMTkuNjdabTYuNSwxMS40OS02LjUsMy02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhaTTExLjYsMTUuNTdoMFY4bDYuMDgsMi44YTEsMSwwLDAsMCwuODQsMEwyNC42LDh2Ny41OGgwbC02LjUsM1pNMzIuMTEsMjguODFsLTYuNSwzLTYuNTEtM1Yy''@;'; put 'put ''MS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRsNi4wOC0yLjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3aC0ydjBsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCww''@;'; put 'put ''bC4yNC0uMTFhNC4xNyw0LjE3LDAsMCwxLC4yOS0uNjVsMS4zMy0yLjMxLTIuMjgsMUwxMyw2LjQzbDUuMS0yLjM1LDMuNDcsMS42LDEtMS43M0wxOC41LDIuMDhhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTgu''@;'; put 'put ''OTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEw''@;'; put 'put ''LjYsMjIsNS40OSwxOS42N1ptMCwxNC40OS02LjUtM1YyMS4yM0wxMC4xOCwyNEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTE1LTE0LjQ4LDUuMTEsMi4zNUwyNS42MSwyMiwyMC41LDE5LjY3Wm0wLDE0LjQ5LTYuNTEtM1YyMS4yMkwyNS4xOSwyNEExLDEsMCwwLDAsMjYsMjRs''@;'; put 'put ''Ni4wOC0yLjgsMCw3LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4x''@;'; put 'put ''LTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWMTIuN2E3LjU4''@;'; put 'put ''LDcuNTgsMCwwLDEtMi0xLjUxdjQuMzlsLTYuNSwzLTYuNS0zVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDIzLDguNzJhNy4wNSw3LjA1LDAsMCwxLS40Ny0ybC00LjQ3LDJMMTMsNi40M2w1LjEtMi4zNSw0LjQ0LDJzMC0uMDYsMC0uMDlhNy41NSw3LjU1LDAsMCwxLC4yNy0ybC00LjMt''@;'; put 'put ''MmExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0z''@;'; put 'put ''LjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4x''@;'; put 'put ''MSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4''@;'; put 'put ''PSIzMC4wMyIgY3k9IjYuMDMiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjYuNDNBMSwxLDAsMCwwLDI2LDUuNTNsLTcuNS0zLjQ1''@;'; put 'put ''YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0TDIuNjgsMTguNzZhMSwxLDAsMCwwLS41OC45MXY5Ljc4aDBhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41''@;'; put 'put ''LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFoMFYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZaTTI1LjYxLDIyLDIwLjUsMTkuNjdsNS4xMS0yLjM1LDUuMTEsMi4zNVptLTEtNi40NC02LjQ0LDNWMTAuODdhMSwxLDAsMCwwLC4zNS0uMDhMMjQuNiw4djcuNThaTTE4LjEsNC4wOGw1LjExLDIu''@;'; put 'put ''MzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzaDBWMjQuMTFoMEExLDEsMCwwLDAsMTEsMjRsNi4wOC0yLjhabTE1LDAtNi40NiwzVjI0LjExQTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N3YwaC0ydjBsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOGwuMTQtLjA2QTMuMjMsMy4yMywwLDAsMSwxOSwxMGwxLjI4LTIuMjItMi4xNCwxTDEz''@;'; put 'put ''LDYuNDNsNS4xLTIuMzUsMy4zOSwxLjU2LDEtMS43My00LTEuODNhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRsLTYuOSwzLjE4YTEsMSwwLDAsMC0uNTguOTF2OS43OGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4''@;'; put 'put ''LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MVYxOS42N0ExLDEsMCwwLDAsMzMuNTMsMTguNzZabS0yOCwuOTEsNS4xMS0yLjM2LDUuMTEsMi4zNUwxMC42LDIyWk0xMC42LDMxLjhWMjQuMTFBMS4wOCwxLjA4LDAsMCwwLDExLDI0bDYu''@;'; put 'put ''MDgtMi44LDAsNy42Wm05LjktMTIuMTMsNS4xMS0yLjM1LDUuMTEsMi4zNUwyNS42MSwyMlpNMjUuNjQsMzEuOFYyNC4xMUEuODkuODksMCwwLDAsMjYsMjRsNi4wOC0yLjgsMCw3LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuPHBhdGggZD0iTTI2Ljg5LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjcsMTNIMzMuNzJhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjEsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODksMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi42OWE3LjY2LDcuNjYsMCwwLDEtMi0xLjQ3djQuMzRsLTYuNDMsM1YxMC44N2ExLjA1LDEuMDUsMCwwLDAsLjM1LS4wOEwyMyw4LjczYTcuNjUsNy42NSwwLDAs''@;'; put 'put ''MS0uNDgtMmwtNC40MiwyTDEzLDYuNDNsNS4xLTIuMzUsNC4zOCwyVjZhNy41NSw3LjU1LDAsMCwxLC4yNy0yTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwu''@;'; put 'put ''NTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYs''@;'; put 'put ''MzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuPGNpcmNsZSBjeD0iMjkuOTgiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxGLkNsclNoYXBlQnVuZGxlPSgwLG0uY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEsMSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwu''@;'; put 'put ''ODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEyLjkxWk01LDEyLjEzLDE2LDE3LjRWMzEuNDZMNSwyNi4y''@;'; put 'put ''Wk0xOCwzMS40NVYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuNDMsOC4zNWwtMTMtNi4yMWExLDEsMCwwLDAtLjg3LDBsLTE1LDcuMjRhMSwxLDAsMCwwLS41Ny45VjI2LjgzYTEs''@;'; put 'put ''MSwwLDAsMCwuNi45MmwxMyw2LjE5YTEsMSwwLDAsMCwuODcsMGwxNS03LjI0YTEsMSwwLDAsMCwuNTctLjlWOS4yNUExLDEsMCwwLDAsMzIuNDMsOC4zNVpNMTksNC4xNSwyOS45Myw5LjM3bC01LjA1LDIuNDRMMTQuMjEsNi40NlpNMTcsMTUuNjQsNiwxMC40MWw1LjktMi44NUwyMi42LDEy''@;'; put 'put ''LjkxWm0xLDE1LjhWMTcuMzZsMTMtNi4yOXYxNC4xWiIvPlxuJyksRi5DbHJTaGFwZVdpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy41NSw4LjJhMjguMSwyOC4xLDAsMCwwLTMxLjExLjA4QTEsMSww''@;'; put 'put ''LDEsMCwzLjU2LDkuOTRhMjYuMTEsMjYuMTEsMCwwLDEsMjguODktLjA3LDEsMSwwLDAsMCwxLjEtMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTguMDUsMTAuNzJBMjAuNzQsMjAuNzQsMCwwLDAsNi4y''@;'; put 'put ''MywxNC40LDEsMSwwLDAsMCw3LjM2LDE2LDE4Ljg1LDE4Ljg1LDAsMCwxLDI4LjY0LDE2YTEsMSwwLDAsMCwxLjEyLTEuNjVBMjAuNzUsMjAuNzUsMCwwLDAsMTguMDUsMTAuNzJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MyIgZD0iTTE4LjA1LDE3LjlhMTMuNTEsMTMuNTEsMCwwLDAtOCwyLjY0LDEsMSwwLDAsMCwxLjE4LDEuNjEsMTEuNTYsMTEuNTYsMCwwLDEsMTMuNjItLjA4QTEsMSwwLDEsMCwyNiwyMC40NiwxMy41MiwxMy41MiwwLDAsMCwxOC4wNSwxNy45WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLjc2LDkuMzhhMjcuODcsMjcuODcsMCwwLDAtMjkuNTcsMCwxLjUxLDEuNTEsMCwwLDAt''@;'; put 'put ''LjQ4LDIuMTFsLjExLjE3YTEuNDksMS40OSwwLDAsMCwyLC40NiwyNC42OCwyNC42OCwwLDAsMSwyNi4yNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3QTEuNTEsMS41MSwwLDAsMCwzMi43Niw5LjM4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI4LjgyLDE1LjQ0YTIwLjU5LDIwLjU5LDAsMCwwLTIxLjcsMCwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDE3LjQsMTcuNCwwLDAsMSwxOC4zNiwwLDEuNDksMS40OSwwLDAsMCwyLS40NmwuMTEtLjE3''@;'; put 'put ''QTEuNTEsMS41MSwwLDAsMCwyOC44MiwxNS40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC44OCwyMS40OWExMy40MSwxMy40MSwwLDAsMC0xMy44MiwwLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41''@;'; put 'put ''MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMjcsMTAuMjcsMCwwLDEsMTAuNDIsMCwxLjUyLDEuNTIsMCwwLDAsMi4wNi0uNDVsLjEtLjE2QTEuNDksMS40OSwwLDAsMCwyNC44OCwyMS40OVoiLz5cbicpLEYuQ2xyU2hhcGVSYWNrU2VydmVyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjY0LDExQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTB2MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgzMlYyMUg0VjE1SDIwLjU4QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41Nkg0VjdIMjAuNzFsMS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEy''@;'; put 'put ''LDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0iMTAiIHk9IjE3IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIx''@;'; put 'put ''NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0xMCwxMUgyNHYtLjUxQTcuNDgsNy40OCwwLDAsMSwyMy4xMyw5SDEwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi42OC0uNUg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjZINFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTAiIHk9IjkiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iNiIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDdIMzJ2Nkg0Wm0wLDhIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNiIgeD0iNiIgeT0iMjUiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxMCIgeT0iMjUiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEwVjdIMjAuNzFsMS43My0zSDRBMiwyLDAsMCwwLDIsNnY2SDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5Wk04LDlINlY3SDhaIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMnY4SDM0VjE1LjM4Wk04LDE5SDZWMTdIOFptMTYsMEgxMFYxN0gyNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMiwxNHY4SDM0VjE0Wm02LDVINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMjMuMTMsOUgxMFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2djZIMjUuNTFBNy41Miw3LjUyLDAsMCwxLDIzLjEzLDlaTTgs''@;'; put 'put ''OUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDIySDM0VjE0SDJabTgtNUgyNHYySDEwWk02LDE3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2djZIMzRWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFpNOCw5SDZWN0g4Wk0yNCw5SDEwVjdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMiwzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRIMlptOC0zSDI0djJIMTBaTTYsMjdIOHYySDZaIi8+XG4n''@;'; put 'put ''KSxGLkNsclNoYXBlSGFyZERpc2s9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0zNCwyMS4wOGwtMS40LTUuNjhIMzAuNTFsMS40OSw2VjI5SDRWMjEuNDRMNy4wNiw5aDEyLjVsMS4xNS0ySDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFB''@;'; put 'put ''MSwxLDAsMCwwLDM0LDIxLjA4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjAiIHdp''@;'; put 'put ''ZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzQsMjEuMDgsMzIsMTMuMjFhNy40OSw3LjQ5LDAsMCwxLTIsLjI5bDIsNy45NFYyOUg0VjIxLjQ0TDcuMDYsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4wNkEyLDIsMCwwLDAsNS4x''@;'; put 'put ''Myw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwyMS4wOCwzMC44Niw4LjQzQTIsMiwwLDAsMCwyOC45NCw3SDcuMDZBMiwyLDAsMCwwLDUu''@;'; put 'put ''MTMsOC40N0wyLDIxLjA4YTEsMSwwLDAsMCwwLC4yNFYyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjEuMzFBMSwxLDAsMCwwLDM0LDIxLjA4Wk00LDI5VjIxLjQ0TDcuMDYsOUgyOC45M0wzMiwyMS40NFYyOVoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIxQTcuNDcsNy40NywwLDAsMSwyMi41Nyw3SDcuMDZBMiwyLDAsMCwwLDUuMTMsOC40N0wyLjI5LDIwSDMzLjcxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLjg2''@;'; put 'put ''LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMiwyMnY3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyMlptMjgsNUgyNlYyNWg0WiIvPlxuJyksRi5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEuNzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMxLjU4LDE1LjRIMjkuNDZjMSwyLjg1LDIuMzEsNi4zNywyLjU0LDcuMDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjks''@;'; put 'put ''MS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xMiwzNCwyMiwzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVh''@;'; put 'put ''MSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2Mmg3Ljk1QzMwLDE2Ljk0LDMxLjcyLDIxLjY1LDMyLDIyLjQ4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIMTVWMTJINy4wN2ExLjkyLDEuOTIs''@;'; put 'put ''MCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMSwzNCwyMiwzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsNCwzLjk1QTEsMSwwLDEsMCwyNC4zOCw4LjVMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLjg0LDEzLjM3''@;'; put 'put ''QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDEuNDcsMS40NiwxLTEu''@;'; put 'put ''NzlMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyMi4yM0EzLjYyLDMuNjIsMCwwLDEsMjEsMTUuMTZW''@;'; put 'put ''MThhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43OSwyMS40OSwzMy4yOCwyMC4wNywzMS41OCwxNS40WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsNCwzLjk1YTEsMSwwLDAsMCwuNzEuMjlsLjExLDBhNy40Niw3LjQ2LDAsMCwxLTEuMjUtMy41MkwxOCwyLjE2LDExLjYxLDguNUExLDEs''@;'; put 'put ''MCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzAuODcsMTMuNDVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNUE3LjQ2LDcuNDYsMCwwLDEsMjUuNTEsMTJIMjF2NmEzLDMs''@;'; put 'put ''MCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc3LDIxLjQzLDMzLjE1LDE5LjcsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy''@;'; put 'put ''NFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45''@;'; put 'put ''LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTQsMTkuNjksMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSww''@;'; put 'put ''LDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbicpLEYuQ2xyU2hhcGVCYWNrdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdo''@;'; put 'put ''dD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOCwxOS44NGw0LjQ3LTQuNDRoLS4yM2EzLjY3LDMuNjcsMCwwLDEtMi0uNjFMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIy''@;'; put 'put ''LjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1''@;'; put 'put ''LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uMjQsMS4zaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBI''@;'; put 'put ''NFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAsMS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3''@;'; put 'put ''LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIGQ9Ik0zMC44NCwxMy4zN0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS4xNCwyaDIuNTRDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEg5LjU4YTMsMywwLDAs''@;'; put 'put ''MS0uMTQtMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg0LDEzLjM3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw0SDI2VjI2aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNS0uNTEtLjY1LTEuOTMtMi4zNS02LjZIMjUuM2wtNS44OSw1Ljg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''NC0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjQsMy42NCwwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42''@;'; put 'put ''OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTguNjYsMjJIMzMuOTNjLS4xNy0uNTctLjc5LTIuMy0zLjA2LTguNTVhNy41NSw3LjU1LDAsMCwxLS44Ny4wNSw3LjQ2LDcuNDYsMCwwLDEtMy4z''@;'; put 'put ''NS0uOCwzLDMsMCwwLDEtLjg2LDIuMjFsLTYuMzgsNi4zNVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwxOS44NGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDEyLjA4TDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTkuNDEsMjEuMjZsLS43NC43NEgzMy45M2MtLjE3LS41Ny0uNzktMi4zMS0zLjA5LTguNjNBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDI2LjU1YTMsMywwLDAsMS0uNzYsMi45MloiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbicpLEYuQ2xyU2hhcGVEZXZpY2VzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyNkgyNFYxNVpNMjQsMzBWMjcuNmg4VjMwWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMCwyMkg0VjZIMjh2NWgyVjZhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMkgyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAsMjZIOWExLDEsMCwwLDAsMCwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDEzSDI0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTVBMiwyLDAsMCwwLDMyLDEzWm0wLDJWMjhIMjRWMTVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjgsNEg0QTIsMiwwLDAsMCwyLDZWMjJhMiwyLDAsMCwwLDIsMmg4djJIOS4zMkExLjIsMS4yLDAsMCww''@;'; put 'put ''LDgsMjdhMS4yLDEuMiwwLDAsMCwxLjMyLDFIMTkuOTJ2LS4zN0gyMFYyMkg0VjZIMjh2NWgyVjZBMiwyLDAsMCwwLDI4LDRaIi8+XG4nKSxGLkNsclNoYXBlS2V5Ym9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsMThINFYxMEgzMloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI3IiB5''@;'; put 'put ''PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjExIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE1IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjE5IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjI3IiB5''@;'; put 'put ''PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMTEiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIHg9IjE1IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiB4PSIxOSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjMi''@;'; put 'put ''IHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI3IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiB4PSIyNyIgeT0iMjIiIHdpZHRoPSIxLjk0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgeD0iNyIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTEuMTMiIHk9IjIyIiB3aWR0aD0iMTMuNzUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNMTksMTNoMnYySDE5Wm0wLDRoMnYySDE5Wm0tNC00aDJ2MkgxNVptMCw0aDJ2MkgxNVptLTQtNGgydjJIMTFaTTksMjRIN1YyMkg5Wm0wLTVIN1Yx''@;'; put 'put ''N0g5Wm0wLTRIN1YxM0g5Wm0yLDJoMnYySDExWm0xMy44OCw3SDExLjEzVjIySDI0Ljg4Wk0yNSwxOUgyM1YxN2gyWm0wLTRIMjNWMTNoMlptMy45NCw5SDI3VjIyaDEuOTRaTTI5LDE5SDI3VjE3aDJabTAtNEgyN1YxM2gyWiIvPlxuJyksRi5DbHJTaGFwZU1vdXNlPSgwLG0uY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMzRBMTAsMTAsMCwwLDEsOCwyNFYxMmExMCwxMCwwLDAsMSwyMCwwVjI0QTEwLDEwLDAsMCwxLDE4LDM0Wk0xOCw0YTgsOCwwLDAsMC04LDhWMjRhOCw4LDAsMCwwLDE2LDBWMTJBOCw4''@;'; put 'put ''LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDE1YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDIsMHY0QTEsMSwwLDAsMSwxOCwxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTEwLDEwLDAsMCwwLDgsMTJWMjRhMTAsMTAsMCwwLDAsMjAsMFYxMkExMCwxMCwwLDAsMCwxOCwyWm0xLjMsMTEuNDRhMS4zLDEuMywwLDAsMS0yLjYsMFYxMGExLjMsMS4zLDAsMCwxLDIuNiwwWiIvPlxuJyksRi5D''@;'; put 'put ''bHJTaGFwZURhc2hib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LjE4LDEyLjMybC01LjkxLDUuODFhMywzLDAsMSwwLDEuNDEsMS40Mmw1LjkyLTUuODFaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTExLjM0LDI1LjVINi42NmExNC40MywxNC40MywwLDAsMS0z''@;'; put 'put ''LjExLTcuODRIN3YtMkgzLjU1QTE0LjQxLDE0LjQxLDAsMCwxLDcsMTEuMjlsMi40NSwyLjQ1LDEuNDEtMS40MUw4LjQzLDkuODdBMTQuNDEsMTQuNDEsMCwwLDEsMTcsNi4yOXYzLjVoMlY2LjNhMTQuNDcsMTQuNDcsMCwwLDEsMTMuNCwxMy42MUgyOC45MnYyaDMuNTNBMTQuNDMsMTQuNDMs''@;'; put 'put ''MCwwLDEsMjkuMzQsMjkuNzVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUuODUsMTguNjlhMywzLDAsMSwwLDQuODMuODVsNS45Mi01LjgxLTEuNDEtMS40MS01LjkxLDUu''@;'; put 'put ''ODFBMywzLDAsMCwwLDE1Ljg1LDE4LjY5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjU4LDEzYTcuNDUsNy40NSwwLDAsMS0yLjA2LjQ0LDE0LjQsMTQuNCwwLDAsMSwx''@;'; put 'put ''LjkzLDYuNDNIMjguOTJ2MmgzLjUzYTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEsNy44NEg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAs''@;'; put 'put ''MSwxNyw2LjI5djMuNWgyVjYuM0ExNC40MSwxNC40MSwwLDAsMSwyMi41OCw3YTcuNTIsNy41MiwwLDAsMS0uMDgtMSw3LjUyLDcuNTIsMCwwLDEsLjA5LTEuMDlBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw0LjI1QTE2LjQ5LDE2LjQ5LDAsMCwwLDUuNCwzMS40bC4zLjM1SDMwLjNsLjMtLjM1QTE2LjQ5LDE2LjQ5LDAsMCwwLDE4LDQuMjVabTguNiw5LjQ4LTUuOTIsNS44MWEzLDMsMCwxLDEtMS40MS0xLjQybDUuOTEtNS44MVptLTIzLDYuMTdIN3Yy''@;'; put 'put ''SDMuNTZjMC0uMzktLjA1LS43Ny0uMDUtMS4xN1MzLjUzLDIwLjE4LDMuNTUsMTkuOVptNC44OC0xMCwyLjQ2LDIuNDZMOS40NywxMy43NCw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N1pNMTksOS43OUgxN1Y2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1Wk0zMi40''@;'; put 'put ''OSwyMC43NGMwLC4zOSwwLC43OS0uMDUsMS4xN0gyOC45MnYtMmgzLjUzQzMyLjQ3LDIwLjE4LDMyLjQ5LDIwLjQ2LDMyLjQ5LDIwLjc0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MzIuNTgsMTNhNy40Niw3LjQ2LDAsMCwxLTEwLTguMTJBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVhMTYuNDUsMTYuNDUsMCwwLDAsMi0xOC4zNlpNMTcsNi4yOWMuMzIsMCwuNjMsMCwxLDBzLjcsMCwxLC4wNXYzLjVIMTdaTTcsMjEuOTFIMy41NmMwLS4z''@;'; put 'put ''OS0uMDUtLjc3LS4wNS0xLjE3czAtLjU2LDAtLjgzSDdabTIuNTEtOC4xNkw3LDExLjI5QTE0LjU3LDE0LjU3LDAsMCwxLDguNDMsOS44N2wyLjQ2LDIuNDZabTEwLjYyLDkuMTlhMywzLDAsMSwxLS44Mi00LjgxbDUuOTEtNS44MSwxLjQxLDEuNDEtNS45Miw1LjgxQTMsMywwLDAsMSwyMC4w''@;'; put 'put ''OSwyMi45M1ptMTIuMzUtMUgyOC45MnYtMmgzLjUzYzAsLjI4LDAsLjU1LDAsLjgzUzMyLjQ3LDIxLjUyLDMyLjQ0LDIxLjkxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVIb3N0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjQuM2EyLjQ4LDIuNDgsMCwxLDAsMi40OCwyLjQ3QTIuNDgsMi40OCwwLDAs''@;'; put 'put ''MCwxOCwyNC4zWm0wLDMuNmExLjEzLDEuMTMsMCwxLDEsMS4xMy0xLjEyQTEuMTMsMS4xMywwLDAsMSwxOCwyNy45WiIvPjxyZWN0IHg9IjEzLjUiIHk9IjIwLjciIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjY1LDMuNkgxMC4zNUExLjM1LDEuMzUsMCwwLDAsOSw0Ljk1VjMyLjRIMjdWNC45NUExLjM1LDEuMzUsMCwwLDAsMjUuNjUsMy42Wm0tLjQ1LDI3SDEwLjhWNS40SDI1LjJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjEyLjYiIHk9IjcuMiIgd2lkdGg9IjEwLjgiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi42IiB5PSIxMC44IiB3aWR0''@;'; put 'put ''aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41''@;'; put 'put ''LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IiBwb2ludHM9IjIxLjMsNiAxMiw2IDEyLDcuNiAyMC40LDcuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTIsMTEuNmg2LjZjMC0wLjYsMC4yLTEuMSwwLjQtMS42aC03''@;'; put 'put ''VjExLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yNiwxNS40VjMySDEwVjRoMTIuNWwxLjEtMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTUuNEgyNnoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4yLDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4y''@;'; put 'put ''aDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS4yLDI3LjhjMCwxLjUsMS4yLDIuOCwyLjgsMi44czIuOC0xLjIsMi44LTIuOFMxOS41LDI1LDE4LDI1UzE1LjIsMjYuMiwxNS4yLDI3Ljh6IE0xOS4yLDI3LjhjMCwwLjctMC42LDEuMi0xLjIsMS4ycy0xLjItMC42LTEuMi0xLjJz''@;'; put 'put ''MC42LTEuMiwxLjItMS4yUzE5LjIsMjcuMSwxOS4yLDI3Ljh6Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIxMyIgeT0iMjEiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yNCwxMC41Yy0wLjEtMC4yLTAuMi0wLjMtMC4zLTAuNUgxMnYxLjZoMTJWMTAuNXoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xMiw2djEuNmgxMC43Yy0wLjEtMC41LTAuMi0xLjEtMC4yLTEuNkgxMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01LS1iYWRnZWQiIGQ9Ik0yNiwxMi4zVjMySDEwVjRoMTIuOGMwLjItMC43LDAuNS0xLjQsMC45LTJIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjJDMjcuMywxMywyNi42LDEyLjcsMjYsMTIuM3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi41LDJoLTE3QzguNywy''@;'; put 'put ''LDgsMi43LDgsMy41VjM0aDIwVjMuNUMyOCwyLjcsMjcuMywyLDI2LjUsMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnogTTI0LDExLjZIMTJWMTBo''@;'; put 'put ''MTJWMTEuNnogTTI0LDcuNkgxMlY2aDEyVjcuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjNjLTIsMC0zLjctMS42LTMuNy0zLjdIMTJWMTBoNi45YzAtMC4xLDAuMS0wLjIsMC4xLTAuMmwxLjItMi4ySDEyVjZoOS4ybDIuMy00aC0xNEM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS4zSDIy''@;'; put 'put ''LjJ6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6IE0yMywyMi42SDEzVjIxaDEwVjIyLjZ6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxbC01Ljcs''@;'; put 'put ''OS45Yy0wLjMsMC42LTAuMSwxLjQsMC41LDEuN2MwLjIsMC4xLDAuNCwwLjIsMC42LDAuMmgxMS40YzAuNywwLDEuMy0wLjYsMS4zLTEuM2MwLTAuMi0wLjEtMC40LTAuMi0wLjZMMjkuMSwxYy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuNywyNywwLjgsMjYuOSwxeiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjQsMTAuM3YxLjJIMTJWMTBoMTEuOGMtMC41LTAuNy0wLjgtMS41LTEtMi40SDEyVjZoMTAuNWMwLDAsMC0wLjEsMC0wLjFjMC0xLjQsMC40LTIuNywx''@;'; put 'put ''LjEtMy45SDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxMy4xQzI2LjQsMTIuNiwyNSwxMS43LDI0LDEwLjN6IE0xOCwzMC41Yy0xLjUsMC0yLjgtMS4yLTIuOC0yLjhTMTYuNSwyNSwxOCwyNXMyLjgsMS4yLDIuOCwyLjhTMTkuNSwzMC41LDE4LDMwLjV6TTIzLDIyLjZIMTNWMjFoMTBW''@;'; put 'put ''MjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIyNy44IiByPSIxLjIiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1LjkiIHI9IjUiLz5cbicpLEYuQ2xyU2hhcGVTdG9yYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMs''@;'; put 'put ''Ni42OWgwYy0uMTgtMy40MS05LjQ3LTQuMzMtMTUtNC4zM1MzLDMuMjksMyw2Ljc4VjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1Y2Ljc4czAsMCwwLDBTMzMsNi43LDMzLDYuNjlabS0yLDcuNTZjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwz''@;'; put 'put ''Ny40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzIsNDMuMzIsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMiw0My4zMiwwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40''@;'; put 'put ''OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjNy43NywwLDEyLjQ2LDEuNTMsMTMsMi4zNy0uNTIuODctNS4yMSwyLjM5LTEzLDIuMzlBMzcuNiwzNy42LDAsMCwxLDcsNy43NlY5Ljg1YTQzLjUz''@;'; put 'put ''LDQzLjUzLDAsMCwwLDExLDEuMjdjNCwwLDkuOTMtLjQ4LDEzLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xOS41MSw5LjA5LDE4LDkuMTFBMzcuNiwzNy42LDAsMCwx''@;'; put 'put ''LDcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjdoLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjguODMs''@;'; put 'put ''MTUuNEEzOC4zNywzOC4zNywwLDAsMSwxOCwxNi43LDM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMyw0My4zMywwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1''@;'; put 'put ''YTQzLjMzLDQzLjMzLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmMxLjUsMCwyLjg5LjA2LDQuMTUuMTZsMS4xLTEuOWMtMS44Ni0uMTgtMy43LS4y''@;'; put 'put ''Ni01LjI1LS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzdi0xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTcsNy43NlY5Ljg1YTQzLjUzLDQzLjUzLDAsMCwwLDExLDEuMjcsNTQuODIsNTQuODIsMCwwLDAsNi4yLS4zNiw3LjUsNy41LDAsMCwxLTEuMTMtMS44OGMtMS41LjE1LTMuMi4yNC01''@;'; put 'put ''LjA3LjI0QTM3LjYsMzcuNiwwLDAsMSw3LDcuNzZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDN2LjgyYy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUs''@;'; put 'put ''MzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0u''@;'; put 'put ''NDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNywwLDMuMjUuMDgsNC42NC4yYTcuNDQsNy40NCwwLDAsMSwuNjctMS45NGMtMS44OC0uMTgtMy43NS0uMjYtNS4zMS0uMjYtNS41NywwLTE1''@;'; put 'put ''LC45My0xNSw0LjQzVjI5LjM3YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NFY4LjU5Yy0uNDMs''@;'; put 'put ''Mi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFDMjYsMTAuNTMsMzIuNTIsOC43OSwzMyw2LjYxaDBDMzIuOCwzLjIsMjMuNTIsMi4yOCwxOCwyLjI4UzMsMy4yMSwzLDYuNzFWMjkuMjljMCwzLjQ5LDkuNDMs''@;'; put 'put ''NC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4wOVYxNi4zNGMtLjQzLDIuMi03LDMuOTQt''@;'; put 'put ''MTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE3LjkxLDIw''@;'; put 'put ''LjI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yYTM5LjQsMzkuNCwwLDAsMCwxMS42NiwxLjUxYzYuOSwwLDEyLjctMS4yNywxNC41MS0zSDIyLjIzYTMuNjcsMy42NywwLDAsMS0zLjU1LTIuNzVoLS43N0EzOS40LDM5LjQsMCwwLDEsNi4yNSwxMVY5YTM5LjQsMzkuNCwwLDAsMCwx''@;'; put 'put ''MS42NiwxLjUxaC44MkEzLjY0LDMuNjQsMCwwLDEsMTksOS43NWw0LjE3LTcuMjJjLTEuODUtLjE4LTMuNjgtLjI1LTUuMjEtLjI1LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYs''@;'; put 'put ''MjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0QzMyLjU3LDE4LjUzLDI2LDIwLjI4LDE3LjkxLDIwLjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxbC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTcuOTEsMTguMjhjOC4wOCwwLDE0LjY2LTEuNzQsMTUuMDktMy45NHYtMS42YTcuNDcsNy40NywwLDAsMS03LjM4LS44''@;'; put 'put ''LDQ4LjMsNDguMywwLDAsMS03LjcxLjU5QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTEsNTEsNTEsMCwwLDAsNi0uMzQsNy40Niw3LjQ2LDAsMCwxLS41OS03LjY1Yy0xLjg3LS4xOC0zLjczLS4yNi01LjI4LS4yNi01LjU3LDAtMTUsLjkzLTE1''@;'; put 'put ''LDQuNDNWMjkuMjljMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjI0LjA5QzMyLjU3LDI2LjI4LDI2LDI4LDE3LjkxLDI4QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDI2LjUydi0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwyNkMyNiwyNiwzMi41NywyNC4yOCwzMywyMi4w''@;'; put 'put ''OVYxNi4zNGMtLjQzLDIuMi03LDMuOTQtMTUuMDksMy45NEEzOS40LDM5LjQsMCwwLDEsNi4yNSwxOC43N3YtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMTguMjhaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuJyksRi5DbHJTaGFwZUNsdXN0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjM2LDhIMjcuNXYySDMxVjMwSDI3LjV2MkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+PGVs''@;'; put 'put ''bGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMjQsMzBIMTJWNkgyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxMEg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdWMzJIOC41VjMwSDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPjxl''@;'; put 'put ''bGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5bC4zOS0uNjhIMTMuNXYxLjZoNS4xN0Ez''@;'; put 'put ''LjY1LDMuNjUsMCwwLDEsMTksOS44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMzBIMTJWNmg5LjI5bDEuMTUtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYz''@;'; put 'put ''MkgyNlYxNS40SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAzMCAyNy41IDMwIDI3LjUgMzIgMzMgMzIgMzMgMTUuNCAzMSAxNS40IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMs''@;'; put 'put ''OS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPjxlbGxpcHNlIGN4PSIxOC4wMSIgY3k9IjI1Ljk5IiByeD0iMS44IiByeT0iMS43OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMy41IiB5PSI5LjIxIiB3aWR0aD0iOSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI0LDEwLjQ5VjMwSDEyVjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzBIMjcuNXYySDMzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zNiw4SDI3LjVWMzJIMzNWOS42N0ExLjY1LDEuNjUsMCwwLDAs''@;'; put 'put ''MzEuMzYsOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI0LjMyLDRIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWNS42OEExLjY4LDEuNjgsMCwwLDAsMjQuMzIsNFpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgy''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDkuNjdWMzJIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuNSIgeT0iMTUuNCIgd2lkdGg9IjUuNSIgaGVpZ2h0PSIxNi42IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMTMuNTZhMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLS4zMS0zSDEzVjloNi41NmwyLjg5LTVIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaTTE4LDI3Ljc5QTEuNzksMS43OSwwLDEsMSwxOS44MSwyNiwxLjgsMS44LDAsMCwxLDE4LDI3Ljc5''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAs''@;'; put 'put ''MCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTEuNjhBMS42OCwxLjY4LDAsMCwwLDEwLDUuNjhWMzJIMjZWMTIuMzRBNy40''@;'; put 'put ''OSw3LjQ5LDAsMCwxLDIyLjUsNlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaTTIzLDEwLjZIMTNWOUgyM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi41LS40NFYzMkgzM1YxMi44N0E3LjQ3LDcuNDcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQg''@;'; put 'put ''MTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDQgMzAgOCAyNiA4IDI2IDEwIDMyIDEwIDMyIDQgMzAgNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0''@;'; put 'put ''IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUgMzAgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkg''@;'; put 'put ''MzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgOCAxNSA4''@;'; put 'put ''IDE1IDEwIDIxIDEwIDIxIDQgMTkgNCAxOSA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMTkgMTUgMTkgMTUgMjEgMjEgMjEgMjEgMTUgMTkgMTUgMTkgMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDMwIDE1IDMwIDE1''@;'; put 'put ''IDMyIDIxIDMyIDIxIDI2IDE5IDI2IDE5IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''YmFkZ2UiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCA4IDQgOCA0IDEwIDEwIDEwIDEwIDQgOCA0IDggOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0i''@;'; put 'put ''OCAxOSA0IDE5IDQgMjEgMTAgMjEgMTAgMTUgOCAxNSA4IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAx''@;'; put 'put ''NSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMTUgMzAgMTkgMjYgMTkgMjYgMjEgMzIgMjEgMzIgMTUgMzAgMTUiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMzAgNCAzMCA0IDMyIDEwIDMyIDEwIDI2IDggMjYgOCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs''@;'; put 'put ''ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMwIDMwIDI2IDMwIDI2IDMyIDMyIDMyIDMyIDI2IDMwIDI2IDMwIDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDhIMTV2Mmg0TDE5LDkuODksMjEsNi41''@;'; put 'put ''VjRIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43''@;'; put 'put ''OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWln''@;'; put 'put ''aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0''@;'; put 'put ''IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9''@;'; put 'put ''IjQiIHk9IjQiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJl''@;'; put 'put ''Y3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMTBoNEwxOSw5Ljg5LDIxLDYuNVY0SDE1WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIxNSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC04LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC05LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUJ1aWxkaW5nPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS44''@;'; put 'put ''OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0gyMlY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxOS44OCwzWk0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzVjMxSDIz''@;'; put 'put ''djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9''@;'; put 'put ''IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjI3IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCww''@;'; put 'put ''LDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJWOC4yNGwyLTMuNDFBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjE1LjM4YTMuNjgsMy42OCwwLDAsMS0yLS43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xNy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMxIDIzIDMxIDIzIDMzIDMzIDMzIDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE4''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTktLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw4SDIyVjMzSDMzVjEwQTIsMiwwLDAsMCwzMSw4Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBI''@;'; put 'put ''MjhWMjNoMlptMC01SDI4VjE4aDJabTAtNUgyOFYxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWNS4xMkEyLjEyLDIuMTIs''@;'; put 'put ''MCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVWOGgy''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDlWMzBoNnYzaDVWMTQuNjRhMy42NywzLjY3LDAsMCwxLTEtNC43NmwxLTEuNjVWNS4xMkEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTcuODgsM1pNOSwyNUg3VjIzSDlabTAtNUg3VjE4SDlabTAtNUg3VjEzSDlabTAtNUg3VjhIOVptNCwxNUgxMVYyM2gyWm0wLTVIMTFWMThoMlptMC01SDExVjEzaDJabTAtNUgxMVY4aDJabTQsMTVIMTVWMjNoMlptMC01SDE1VjE4aDJabTAtNUgxNVYxM2gyWm0wLTVIMTVW''@;'; put 'put ''OGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRsLS4yMywwVjMzSDMzVjE1LjRaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm00LDVIMjhWMjNoMlptMC01SDI4''@;'; put 'put ''VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0''@;'; put 'put ''LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0w''@;'; put 'put ''LTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTVIMjhWMTMuMjJBNy41LDcuNSwwLDAsMSwyMi43OCw4SDIyVjMz''@;'; put 'put ''SDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41Wk0yNiwyNUgyNFYyM2gyWm0wLTVIMjRWMThoMlptMC01SDI0VjEzaDJabTQsMTBIMjhWMjNoMlptMC01SDI4VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjN2Mmg4VjMxSDIzdjJIMzNWMTBBMiwyLDAsMCww''@;'; put 'put ''LDMxLDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2''@;'; put 'put ''VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9''@;'; put 'put ''IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTkiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIwIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDUFU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjA4LDIzLjA3aC0xMXYxLjVIMjMuODNhLjc1Ljc1LDAsMCwwLC43''@;'; put 'put ''NS0uNzVWMTEuMzNoLTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwxOC4xNWEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWOC4xQTIuMSwyLjEsMCwwLDAs''@;'; put 'put ''MjcuOSw2SDI2LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAs''@;'; put 'put ''MS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMw''@;'; put 'put ''LDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNFpNMjgsMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjcuOWEuMS4xLDAsMCwxLC4xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjA2LDI0LjU3SDIzLjgzYS43NS43NSwwLDAsMCwuNzUtLjc1VjExLjMzaC0xLjVWMjMuMDdoLTExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjEzLjVhNy40OSw3LjQ5LDAsMCwxLTItLjI4VjI3LjlhLjEuMSwwLDAsMS0uMS4xSDguMWEuMS4xLDAsMCwxLS4xLS4xVjguMUEuMS4xLDAsMCwxLDguMSw4SDIyLjc4YTcuNDksNy40OSww''@;'; put 'put ''LDAsMS0uMjgtMkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSww''@;'; put 'put ''LDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwx''@;'; put 'put ''LDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhoMTJsMS4x''@;'; put 'put ''NS0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZI''@;'; put 'put ''NlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEu''@;'; put 'put ''NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTUuNGgtMS41djcuNjdoLTExWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYx''@;'; put 'put ''NS40SDI1djguNDFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjE1LjRoLS43N0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4x''@;'; put 'put ''VjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMw''@;'; put 'put ''aDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ2LDcuNDYsMCwwLDEtNS0xLjkyVjIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgxLjQyQTcu''@;'; put 'put ''NDYsNy40NiwwLDAsMSwyMi41LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhh''@;'; put 'put ''LjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIu''@;'; put 'put ''MmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40''@;'; put 'put ''VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu''@;'; put 'put ''MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40''@;'; put 'put ''Wk0yNSwyMy44MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTFoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZU1lbW9yeT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSI4IiB5PSIxMiIgd2lkdGg9IjQi''@;'; put 'put ''IGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjI0IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw3SDRBMiwyLDAsMCwwLDIsOXY0SDRWOUgzMnY0aDJWOUEyLDIsMCwwLDAsMzIsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTksMTMuNTZBMy42NiwzLjY2LDAsMCwxLDE4LjU3LDEySDE2djhoNFYxNC42NEEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMjQiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjQuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMTkuNTZsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOXY0''@;'; put 'put ''SDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0''@;'; put 'put ''PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMiIgd2lkdGg9IjQiIGhlaWdodD0iOCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMyLDE3VjI3SDE5djJIMzJhMiwyLDAsMCwwLDItMlYxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyQTcuNDYsNy40NiwwLDAsMSwyNS41MSwx''@;'; put 'put ''MkgyNHY4aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDlIMjMuMTNhNy40NSw3LjQ1LDAsMCwxLS41NS0ySDRBMiwyLDAsMCwwLDIsOXY0SDRaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMzQsMTNWOWEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN0gzMlYxM1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFptOCwwSDI0VjEyaDRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTUuMDdIMjhWMjBIMjRWMTUuMDdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjMxVjIwSDE2VjEyaDIuNjFBMy42OCwzLjY4LDAsMCwxLDE5LDkuNTVMMjAu''@;'; put 'put ''NTIsN0g0QTIsMiwwLDAsMCwyLDl2NEg0djRIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1SDE5VjI5SDMyYTIsMiwwLDAsMCwyLTJWMTdaTTEyLDIwSDhWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NS44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNi44QTEuMjgsMS4yOCwwLDAsMCwyNi44NS44WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE3VjEzLjIyYTcuMzMsNy4zMywwLDAsMS00LDBWMjBIMjRWMTJoMS41MWE3LjQ4LDcuNDgsMCwwLDEtMi45NC01SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0Wm04LDBIMTZWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcu''@;'; put 'put ''OTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMzIsNy4yNywzMiw3LjkxVjE4LjI0YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQu''@;'; put 'put ''MDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUy''@;'; put 'put ''LTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''OCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDks''@;'; put 'put ''MTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2''@;'; put 'put ''LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDE4LjI0VjcuOTFjMC0uNjUsMi4wOS0xLjg0LDUuNS0xLjg0UzE1LDcuMjcsMTUsNy45MVY5LjdhMTguNzUsMTguNzUsMCwwLDEsMi0uMlY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0''@;'; put 'put ''Ljc3LDIxLjY3LDcuOSwyMlYyMEM1LjQ2LDE5LjY4LDQsMTguNzgsNCwxOC4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuNjUsMTguNTJjLS44NSwxLTMuNDIsMi02LjY1''@;'; put 'put ''LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEy''@;'; put 'put ''Ljc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOGwuNzUsMGEzLjY5LDMuNjksMCwwLDEtLjA4LTJsLS42NiwwYy00LjkzLDAtOC42NSwxLjg4LTgu''@;'; put 'put ''NjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuNGgtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0x''@;'; put 'put ''Ljc1LjYzLTMsMS42OC0zLDMuMTJWOS41bC4yNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjIuODRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJj''@;'; put 'put ''My4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNI''@;'; put 'put ''MzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUu''@;'; put 'put ''NDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIs''@;'; put 'put ''NC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVptNi42NSw3LjY3Yy0uODUsMS0zLjQyLDItNi42NSwyQTE0LjQ5LDE0LjQ5LDAsMCwxLDE0LDIwdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYs''@;'; put 'put ''MTIuNzYsMCwwLDAsNi42NS0xLjU2djMuMTJjLS44NSwxLTMuNDIsMi02LjY1LDJhMTQuNDksMTQuNDksMCwwLDEtNC0uNTN2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2Mi4yOWMwLC45NS0yLjY1LDIuMzgtNi42NSwyLjM4cy02LjY1''@;'; put 'put ''LTEuNDMtNi42NS0yLjM4VjE1LjIzYzAtLjk1LDIuNjUtMi4zOCw2LjY1LTIuMzhzNi42NSwxLjQzLDYuNjUsMi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDcuOTFjMC0u''@;'; put 'put ''MzMuNTUtLjgsMS41NC0xLjE4LDAtLjI0LDAtLjQ4LDAtLjczYTcuNTIsNy41MiwwLDAsMSwuMTQtMS40MUMyMC41NSw1LjE5LDE5LDYuMywxOSw3LjkxVjkuNWExOC43NSwxOC43NSwwLDAsMSwyLC4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2NWMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1di01LjlBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2LjUsNC4wOEMyMi43Nyw0LjA4LDE5LDUuNCwxOSw3LjkxVjkuNDhjNS4zLjI2LDksMi42LDksNS43NnY2LjdsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWNy45MUMzNCw1LjQsMzAuMjMsNC4wOCwyNi41LDQuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAs''@;'; put 'put ''MCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEu''@;'; put 'put ''MTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQt''@;'; put 'put ''Ny41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjM5LTIuN2wtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43''@;'; put 'put ''NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1''@;'; put 'put ''LTEuMTEsOC42My0zLjExVjE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDQuOGMtMS43NS42My0zLDEuNjgtMywzLjEy''@;'; put 'put ''VjkuNDhsLjI3LDBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOHY2LjUzbC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDkuNDhWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIs''@;'; put 'put ''Ny45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJMOCwyMS45M3YtNi43QzgsMTIuMDgsMTEuNyw5Ljc0LDE3LDkuNDhaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1''@;'; put 'put ''Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4y''@;'; put 'put ''MSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwx''@;'; put 'put ''MC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTQtMS40QzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS40OGExNS4zMywxNS4zMywwLDAs''@;'; put 'put ''MSw1LDFBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI3LjM1LDEzYTQsNCwwLDAsMSwuNywyLjIzdjYu''@;'; put 'put ''N2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVYxMi4zM0E3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNDlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljk5IiBy''@;'; put 'put ''PSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUmVzb3VyY2VQb29sPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxLjczYTE0LDE0LDAsMCwx''@;'; put 'put ''LC4yMiwxLjZIMTcuNDlMOC4zLDI4LjA3QTE0LDE0LDAsMCwxLDIyLjA5LDQuNjJsMS0xLjc2QTE2LDE2LDAsMSwwLDM0LDE4YTE2LDE2LDAsMCwwLS4yMy0yLjYxWk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAs''@;'; put 'put ''MCwwLDE4LDJaTTQsMThhMTQsMTQsMCwwLDEsMjcuOTUtMUgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsNCwxOFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yLDEzLjRhMTMuOTEsMTMuOTEsMCwwLDEsLjc1LDMuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuNjEsNC44YTcuNDMsNy40MywwLDAsMSwuNTgtMS45MiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDku''@;'; put 'put ''OTNBNy40Myw3LjQzLDAsMCwxLDMxLjIsMTMuNFpNMTgsMzJhMTMuOTEsMTMuOTEsMCwwLDEtOC4xNi0yLjY1TDE4LjQzLDE5SDMxLjk1QTE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguNTcsMzAuOUExNiwxNiwwLDAsMCwzMy45NSwxOUgx''@;'; put 'put ''OC40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN0ExNiwxNiwwLDEsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45NSwxN2ExNS45MSwxNS45MSwwLDAsMC0uODQtNC4xOCw3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEtOS45Mi05Ljk0QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE2LDE2LDAsMCwwLS4xOC0xLjYxSDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDQuMDYtN0ExNiwxNiwwLDAsMCw3LDI5LjZMMTcuNDksMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGRDaGVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYu''@;'; put 'put ''NjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUu''@;'; put 'put ''MDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQs''@;'; put 'put ''NDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuODgsMTYuODdhMSwxLDAsMCwwLTEuNDEsMS40MWw2LDZMMjYuNCwxMy43N0ExLDEsMCwwLDAsMjUsMTIuMzNsLTkuNDcsOS4x''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz''@;'; put 'put ''LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVptLTQuNTcsNi42NUwxNS41MSwyNC45LDkuMTksMTguNTdhMS40LDEuNCww''@;'; put 'put ''LDAsMSwyLTJMMTUuNTQsMjEsMjQuNzMsMTJhMS40LDEuNCwwLDEsMSwyLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVTaGllbGQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43''@;'; put 'put ''OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQs''@;'; put 'put ''MCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44''@;'; put 'put ''MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMwLDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjR2LjUzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3''@;'; put 'put ''LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTNjMSwuNjQsMi4yLDEuMjcsMy40MywxLjg5bDEtMS43NGE0MS4xLDQxLjEsMCwwLDEtMy44OS0yLjE4TDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0''@;'; put 'put ''Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41djIuNDNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4''@;'; put 'put ''LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0Ni4xOSw0Ni4xOSwwLDAsMCw0LjUxLDIuNDJjMC0uMSwwLS4xOSwwLS4yOWE3LjQ5LDcuNDksMCwwLDEsLjIzLTEuODMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0''@;'; put 'put ''My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMu''@;'; put 'put ''NjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40Myw0''@;'; put 'put ''YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs''@;'; put 'put ''MTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40Nyww''@;'; put 'put ''LDAsMS03LjI3LTkuMzMsNDEuNjEsNDEuNjEsMCwwLDEtNC4xOS0yLjMzTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMu''@;'; put 'put ''MTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZVNoaWVsZFg9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjI1LDcuNGE0My43OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUs''@;'; put 'put ''MCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4xMmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1''@;'; put 'put ''VjcuNTlaTTMwLDE1LjkzYzAsMTEtMTAsMTUuNjEtMTIsMTYuNDMtMi0uODItMTItNS40NC0xMi0xNi40M1Y5LjE0YTQ3LjU0LDQ3LjU0LDAsMCwwLDYuMTgtMi4yNSw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLTMsNDguMjMsNDguMjMsMCwwLDAsNS44MiwzQTQ3LjU0LDQ3LjU0LDAsMCwwLDMw''@;'; put 'put ''LDkuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjgxLDEwLjc5LDE4LDE1LjYxbC00LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxN2wtNC44MSw0LjgxYTEsMSwwLDEsMCwxLjQxLDEu''@;'; put 'put ''NDFMMTgsMTguNDNsNC44MSw0LjgxYTEsMSwwLDAsMCwxLjQxLTEuNDFMMTkuNDEsMTdsNC44MS00LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjI1LDcuNGE0My43''@;'; put 'put ''OSw0My43OSwwLDAsMS02LjYyLTIuMzUsNDUsNDUsMCwwLDEtNi4wOC0zLjIxTDE4LDEuNWwtLjU0LjM1YTQ1LDQ1LDAsMCwxLTYuMDgsMy4yMUE0My43OSw0My43OSwwLDAsMSw0Ljc1LDcuNEw0LDcuNTl2OC4zNGMwLDEzLjM5LDEzLjUzLDE4LjQsMTMuNjYsMTguNDVsLjM0LjEyLjM0LS4x''@;'; put 'put ''MmMuMTQsMCwxMy42Ni01LjA1LDEzLjY2LTE4LjQ1VjcuNTlaTTI0LjUxLDIxLjU1YTEuNCwxLjQsMCwwLDEtMiwyTDE4LDE5bC00LjUzLDQuNTNhMS40MywxLjQzLDAsMCwxLTIsMCwxLjQsMS40LDAsMCwxLDAtMkwxNiwxN2wtNC41My00LjUzYTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE1bDQu''@;'; put 'put ''NTMtNC41M2ExLjQsMS40LDAsMCwxLDIsMkwyMCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUltcG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsNEgxNC44N0w4LDEwLjg2VjE1aDJWMTMuNjFoNy42''@;'; put 'put ''MVY2SDI4VjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaTTE2LDEySDEwdi0uMzJMMTUuNyw2SDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y''@;'; put 'put ''OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQs''@;'; put 'put ''MjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI4LDE1LjRWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42''@;'; put 'put ''MVY2aDMuNjhsMS4xNS0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFs''@;'; put 'put ''ZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTQsMjYuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwxOSwyMmwtNS42OC01LjY4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTUuMiwyMUgzYTEsMSwwLDEsMCwwLDJIMTUuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjE1aDJabTAtMS45MkwxNS43LDZIMTZ2NkgxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42''@;'; put 'put ''OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxNC44''@;'; put 'put ''N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhhMSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLDIxYTEsMSwwLDEsMCwwLDJIOFYyMVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxNC44N0w4LDEwLjg2VjIxSDE1LjJsLTMuMjUtMy4yNWExLDEsMCwwLDEsMS40MS0xLjQxTDE5LDIybC01LjY4LDUuNjhh''@;'; put 'put ''MSwxLDAsMCwxLTEuNDEtMS40MUwxNS4yMywyM0g4djdhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZaTTE2LDEySDEwdi0uMzJMMTUuNjksNkgxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVFeHBvcnQ9KDAsbS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDI0djguMzhoMlY2YTIsMiwwLDAsMC0yLTJIMTAuODdMNCwxMC44N1YzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJINlptMC0xLjkyTDExLjY5LDZIMTJ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNmg3LjY4bDEuMTUtMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w''@;'; put 'put ''NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQx''@;'; put 'put ''TDMwLjE2LDIxSDE4YTEsMSwwLDAsMCwwLDJIMzAuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM0LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMTIuMzRh''@;'; put 'put ''Ny41Myw3LjUzLDAsMCwxLTItMS44NXYzLjg5aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDEzLjYxaDcuNjFWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMC44N0w0''@;'; put 'put ''LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIg''@;'; put 'put ''cj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEu''@;'; put 'put ''NDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4zMiwxNi4zNWExLDEsMCwwLDAtMS40MSwxLjQxTDMxLjE2LDIx''@;'; put 'put ''SDI2djJoNS4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzUsMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjE1LjRIMjIuMjNB''@;'; put 'put ''My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgxMC44N0w0LDEwLjg2VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMlYyM0gxOEExLDEsMCwwLDEsMTcsMjJaTTEyLDEySDZ2LS4zMkwxMS42OSw2SDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMjJhMSwxLDAsMCwxLDEtMWg4VjEyLjM0QTcuNDYsNy40NiwwLDAsMSwyMi43OCw0SDEwLjg3TDQsMTAuODZWMzBh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVXBsb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEs''@;'; put 'put ''MC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMs''@;'; put 'put ''OC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4y''@;'; put 'put ''OCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUu''@;'; put 'put ''NCw4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4''@;'; put 'put ''LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDIxdjJoNS4zOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUt''@;'; put 'put ''NSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4YTgsOCwwLDAsMCw0LjU0LTE0LjU2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy42LDE4LjM4QTcuNzEsNy43MSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwx''@;'; put 'put ''MC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42Niw3LjY2LDAsMCwxLDMuNiwxOC4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyks''@;'; put 'put ''Ri5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjMxLDEzYzAtLjEsMC0uMjEsMC0uMzJhMTAuMjYsMTAuMjYsMCwwLDAtMTAuNDUtMTAsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5LjY1LDkuNjUsMCwwLDAsMTAuODksMjhhMywzLDAsMCwx''@;'; put 'put ''LDAtMkE3LjY1LDcuNjUsMCwwLDEsMTEsMTAuNzRsLjY3LDAsLjIzLS42M2E4LjQzLDguNDMsMCwwLDEsOC01LjQsOC4yNiw4LjI2LDAsMCwxLDguNDUsOCw3Ljc1LDcuNzUsMCwwLDEsMCwuOGwtLjA4LjcyLjY1LjNBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSwwLDJoMS4y''@;'; put 'put ''OGE4LDgsMCwwLDAsMy45My0xNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdB''@;'; put 'put ''MSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSww''@;'; put 'put ''LDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljg3''@;'; put 'put ''LDQuNjlhOC44MSw4LjgxLDAsMCwxLDIsLjI1bDEtMS44YTEwLjgsMTAuOCwwLDAsMC0zLjA3LS40NSwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTgu''@;'; put 'put ''NDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi45LDE1LjRIMzAuMjFBNiw2LDAsMCwxLDI2LjM4LDI2SDI1LjA5YTMsMywwLDAsMSww''@;'; put 'put ''LDJoMS4yOEE4LDgsMCwwLDAsMzIuOSwxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjIuMjgsMjYuMDdhMSwxLDAsMCwwLS43MS4yOUwxOSwyOC45NFYxNi42OGExLDEsMCwxLDAtMiwwVjI4Ljk0bC0yLjU3LTIuNTdBMSwxLDAsMCwwLDEzLDI3Ljc4bDUsNSw1LTVhMSwxLDAsMCwwLS43MS0xLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4Ljc5LDguNzksMCwwLDEsMi42OC40Miw3LjQ1LDcuNDUsMCwwLDEsLjUtMS45NCwxMC43OSwxMC43OSwwLDAsMC0zLjE4LS40OCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; put 'put ''LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzQTguNDMsOC40MywwLDAsMSwxOS44Nyw0LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAuOTIsMTMuNDRhNy4xMyw3LjEzLDAsMCwxLTIuNjMtLjE0YzAsLjA4LDAsLjE1LDAsLjIzbC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCw0LjU0LTE0LjYxWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg''@;'; put 'put ''ICAgICAnKSxGLkNsclNoYXBlUGx1Z2luPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAs''@;'; put 'put ''MCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2Wm0yLjQxLDdBMywzLDAsMCwxLDMwLDI0SDI3djcuODNINFYy''@;'; put 'put ''NUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoOFYxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEs''@;'; put 'put ''MzIuMjIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyN1YxOGgyLjgxQTMuMTMsMy4xMywwLDAsMSwzMywyMC42OSwzLDMsMCwwLDEsMzIuMjIsMjMsMywzLDAsMCwxLDMwLDI0''@;'; put 'put ''SDI3djcuODNINFYyNUg1YTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDQuODEsMTVINFY4LjgzaDlWN2EzLDMsMCwwLDEsMS0yLjIyQTMsMywwLDAsMSwxNi4zMSw0LDMuMTMsMy4xMywwLDAsMSwxOSw3LjE5VjguODNoLjY2TDIxLDYuNTlBNS4xMiw1LjEyLDAsMCwwLDE2LjUx''@;'; put 'put ''LDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4x''@;'; put 'put ''NSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4''@;'; put 'put ''LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEs''@;'; put 'put ''MTZIMjlWMTMuNDNhNy40NSw3LjQ1LDAsMCwxLTItLjU1VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNo''@;'; put 'put ''OVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g0LjA2YTcuNDQsNy40NCwwLDAsMS0uNTEtMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEz''@;'; put 'put ''LjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWOC44M2EyLDIsMCwwLDAtMi0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1''@;'; put 'put ''LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgy''@;'; put 'put ''OXYtLjZIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwy''@;'; put 'put ''M0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjlWMTMuNDNhNy41LDcuNSwwLDAsMS02LjQ1LTYuNTlIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4x''@;'; put 'put ''MywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksRi5DbHJTaGFw''@;'; put 'put ''ZUZsb3BweT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuMzYsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjguNzhaTTI1LDMwSDExVjIySDI1Wm01LDBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2''@;'; put 'put ''NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJIMTJWNkgyNi41MUwzMCw5LjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0xLjY4bC0uNDMtLjNIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwz''@;'; put 'put ''MCwxMy41Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDI3VjIyYTIsMiwwLDAsMC0yLTJIMTFhMiwyLDAsMCwwLTIsMnY4SDZWNmg0djZhMiwyLDAsMCwwLDIsMmg3LjM1YTMuNTQsMy41NCwwLDAsMS0uNzctMkgxMlY2aDku''@;'; put 'put ''MjlsMS4xNS0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjUsMzBIMTFWMjJIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSww''@;'; put 'put ''LDAsMSwyNiwyMS41Wk0yNCwxNEgxMmEyLDIsMCwwLDEtMi0yVjZoMnY2SDI2QTIsMiwwLDAsMSwyNCwxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDYsNy40NiwwLDAsMS00LTEuMThBMiwyLDAs''@;'; put 'put ''MCwxLDI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjUuNTRhNy40NSw3LjQ1LDAsMCwxLTIuNzYtOEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZoNi41OEEzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMi40NSw0SDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNMjYsMzBIMTBWMjEuNUExLjUsMS41LDAsMCwxLDExLjUsMjBoMTNBMS41LDEuNSwwLDAsMSwyNiwyMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ29tcHV0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjYgMjIuODggOS42IDEwLjYgMjQuNCAxMC42IDI1Ljk4IDkgOCA5IDgg''@;'; put 'put ''MjIuODggOS42IDIyLjg4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsN0gzMFYyM2gyVjYuNUExLjUsMS41LDAsMCwwLDMwLjUsNUg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4zNGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2''@;'; put 'put ''LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xLDI1djMuNEEyLjYsMi42LDAsMCwwLDMuNiwzMUgzMi4z''@;'; put 'put ''NGEyLjYsMi42LDAsMCwwLDIuNi0yLjZWMjVabTMyLDMuNGEuNi42LDAsMCwxLS42LjZIMy41NmEuNi42LDAsMCwxLS42LS42VjI2LjUzaDkuOTVhMS42NCwxLjY0LDAsMCwwLDEuNSwxaDcuMTNhMS42NCwxLjY0LDAsMCwwLDEuNS0xSDMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LjYsMjIuODhWMTAuNmg5LjE0QTMuNjQsMy42NCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIOFYyMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDIwLjcxbDEuMTUtMkg1LjVBMS41LDEuNSwwLDAsMCw0LDYuNVYyM0g2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjMwIiB5PSIxNS40IiB3aWR0aD0iMiIgaGVpZ2h0PSI3LjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0''@;'; put 'put ''LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4wNy0xSDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZW''@;'; put 'put ''N0gyMi41N0E3LjUyLDcuNTIsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYyM2gyVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUg4VjIyLjg4SDkuNlYxMC42SDI0LjA4QTcuNDksNy40OSwwLDAsMSwyMy4xMyw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjlWMjRoM1Y3LjU3QTEuNTQsMS41NCwwLDAsMCwzMC41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yMy44MSwyNmMtLjM1LjktLjk0LDEuNS0xLjYxLDEuNUgxMy43NGMtLjY4LDAtMS4yNi0uNi0xLjYxLTEuNUgxdjEuNzVBMi40NSwyLjQ1LDAsMCwwLDMuNiwzMEgzMi40QTIuNDUsMi40NSwwLDAsMCwzNSwyNy43NVYyNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI5IiB5PSIxNS40IiB3aWR0aD0iMyIgaGVpZ2h0PSI4LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik03LDEwSDE5TDE5LDkuODksMjEuMjksNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LDEwSDIzLjY2QTcuNDYsNy40NiwwLDAsMSwyMi41LDZINS41QTEuNTQsMS41NCwwLDAsMCw0LDcuNTdWMjRIN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJhNy4xNCw3LjE0LDAsMCwxLTMsLjJWMjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEaXNwbGF5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwx''@;'; put 'put ''LjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzIsMjVINFY1SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iNy43IDguNzYgMjguMTMgOC43NiAyOS45NCA3LjE2IDYuMSA3LjE2IDYuMSAyMyA3LjcgMjMgNy43IDguNzYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwz''@;'; put 'put ''LjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCww''@;'; put 'put ''LDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4x''@;'; put 'put ''NywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyNUg0VjVIMjEuODdMMjMsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTUu''@;'; put 'put ''MzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgMjMgNy43IDguNzYgMTkuNyA4Ljc2IDIwLjYyIDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUy''@;'; put 'put ''VjI4LjEzSDIxLjI0VjI5LjVBNC4yLDQuMiwwLDAsMCwyMi4xNywzMkgxMy44M2E0LjIsNC4yLDAsMCwwLC45My0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwy''@;'; put 'put ''NiwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuMSwyM0g3LjdWOC43NkgyM2E3LjQ0LDcuNDQsMCwwLDEtLjQzLTEuNkg2LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyNUg0VjVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCww''@;'; put 'put ''LDAsMzQsMjUuNVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwx''@;'; put 'put ''LDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41LDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwz''@;'; put 'put ''LjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjQuNUExLjUsMS41LDAsMCwwLDMyLjUsM1pNMzEsMjEuODNINVY3SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAs''@;'; put 'put ''MS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMXY2LjQzSDVWN0gyMC43MUwyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx''@;'; put 'put ''My40M3Y4LjQxSDVWN0gyMi41N2E3LjI5LDcuMjksMCwwLDEsLjU1LTRIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDQsNy40NCwwLDAsMSwzMSwxMy40M1oiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYu''@;'; put 'put ''Q2xyU2hhcGVUZXJtaW5hbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMlY5LjJINFpNNCwyOVYxMC44SDMyVjI5WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDE1''@;'; put 'put ''LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3IDI0LjExIDE2LjYgMTkuNyAxNi42IDE3Ljg5IDcgMTMuNDggNyAxNS42OCAxMy43OSAxOC44IDcgMjEuOTEgNyAy''@;'; put 'put ''NC4xMSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOUg0VjEwLjhIMTguNjhBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwx''@;'; put 'put ''LjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEu''@;'; put 'put ''MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjIzIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQu''@;'; put 'put ''MTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMjlI''@;'; put 'put ''NFYxMC44SDI0LjI0YTcuNTEsNy41MSwwLDAsMS0xLTEuNkg0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwx''@;'; put 'put ''My4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNi44LDE1LjgxVjEzLjE3bDEwLDQuNTl2Mi4wOGwtMTAsNC41OVYyMS43OGw2LjUx''@;'; put 'put ''LTNaTTIzLjQsMjUuNEgxN1YyM2g2LjRaTTQsOS4yVjdIMzJWOS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bC40LS42OUg0VjdIMjAuNzFs''@;'; put 'put ''MS4xNS0ySDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE2LjgsMTkuODNsLTEwLDQuNTlWMjEuNzhsNi41MS0zLTYuNTEtM1YxMy4xN2wxMCw0LjU5Wm02LjYsNS41N0gxN1YyM2g2LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi43OC00LjNINFY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0u''@;'; put 'put ''MDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYu''@;'; put 'put ''Niw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0x''@;'; put 'put ''LjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwz''@;'; put 'put ''LjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsOS44M2EuOS45LDAsMCwwLTEuMDkuNjZMMTUu''@;'; put 'put ''NDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhsMy40NC0xMy44MUEuOS45LDAsMCwwLDE5Ljk0LDkuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwx''@;'; put 'put ''Mi41OWExLDEsMCwwLDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTYsMTEuNjIsMTUuNDEsMjQuMjlhLjkuOSwwLDAsMCwuNjYsMS4wOWwuMjIsMGEuOS45LDAsMCwwLC44Ny0uNjhMMTkuNzMsMTQuNGEzLjU5LDMuNTksMCwwLDEtMS4xNi0yLjc5WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTItMS4zOEgyNC42NGwzLjI0LDIuMjEtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy43MSwxMi41OWExLDEsMCww''@;'; put 'put ''LDAtMS4zOS0uMjZMNS43OSwxNi43OGExLDEsMCwwLDAsMCwxLjY1bDYuNTMsNC40NWExLDEsMCwxLDAsMS4xMy0xLjY1TDguMTMsMTcuNjEsMTMuNDUsMTRBMSwxLDAsMCwwLDEzLjcxLDEyLjU5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjIxLDE2Ljc4bC02LjUzLTQuNDVBMSwxLDAsMSwwLDIyLjU1LDE0bDUuMzIsMy42My01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45''@;'; put 'put ''LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUFwcGxpY2F0aW9uPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMyIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsNkgzMnY0LjJINFpNNCwzMFYxMS44SDMyVjMw''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRabTAsNi4ySDRWNkgzMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOSIgeT0iNyIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAn''@;'; put 'put ''KSxGLkNsclNoYXBlQmF0dGVyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4xMiw0SDIzVjMuNThBMS41OCwxLjU4LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44''@;'; put 'put ''OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWNS44OEExLjg4LDEuODgsMCwwLDAsMjUuMTIsNFpNMjUsMzJIMTFWNmg0VjRoNlY2aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRWMzJIMTFWNmg0VjRoNlY2aC4yOGwxLjY0LTIuODVBMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMu''@;'; put 'put ''NThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0x''@;'; put 'put ''LjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDEx''@;'; put 'put ''LjU4VjMySDExVjZoNFY0aDZWNkgyMi41QTcuNDcsNy40NywwLDAsMSwyMywzLjM4LDEuNTcsMS41NywwLDAsMCwyMS40MiwySDE0LjU4QTEuNTgsMS41OCwwLDAsMCwxMywzLjU4VjRIMTAuODhBMS44OCwxLjg4LDAsMCwwLDksNS44OFYzMi4xMkExLjg4LDEuODgsMCwwLDAsMTAuODgsMzRI''@;'; put 'put ''MjUuMTJBMS44OCwxLjg4LDAsMCwwLDI3LDMyLjEyVjEyLjg3QTcuNSw3LjUsMCwwLDEsMjUsMTEuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNFYyLjYyQS42LjYsMCww''@;'; put 'put ''LDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NHYtMjhBMS4wOSwxLjA5LDAsMCwwLDI2LDRaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEy''@;'; put 'put ''LjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42NiwzLjY2LDAsMCwxLDIwLjU1LDE1bDIuNzYsNC43OUwxNi45LDE4LjdsMy4zNiw2LjczYTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmwuMDkuMTVBMy42NiwzLjY2''@;'; put 'put ''LDAsMCwxLDE5LDkuODlMMjIuNDUsNEgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTIyLjUsNmE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjJWMi42MkEuNi42LDAsMCwwLDIxLjQyLDJIMTQuNThhLjYuNiwwLDAsMC0uNTguNjJWNEgxMEExLjA5LDEuMDksMCwwLDAsOSw1LjA3djI4QTEsMSwwLDAsMCwxMCwzNEgyNmExLDEsMCwwLDAsMS0uOTRWMTIuODdB''@;'; put 'put ''Ny41LDcuNSwwLDAsMSwyMi41LDZaTTIwLjI2LDI1LjQ0YTEuMiwxLjIsMCwwLDEtMi4xNSwxLjA3TDEyLjY1LDE1LjU2bDYsMS0yLjI5LTRhMS4yLDEuMiwwLDEsMSwyLjA4LTEuMmw0LjgzLDguMzdMMTYuOSwxOC43WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVNb2JpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTEsNkgyNVYyNEgxMVpt''@;'; put 'put ''MCwyNFYyNkgyNXY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI1LDRIMTFBMiwyLDAsMCwwLDksNlYzMGEyLDIsMCwwLDAsMiwySDI1YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjUsNFpNMTksMzBIMTdWMjhoMlptLTgtNFY2SDI1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgJyksRi5DbHJTaGFwZVRhYmxldD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNyIgeT0iMjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEy''@;'; put 'put ''LDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWm0wLDJWMjYuMzhINlY0Wk02LDMyVjI4SDMwdjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''MCwySDZBMiwyLDAsMCwwLDQsNFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMzAsMlpNMTksMzJIMTdWMzBoMlpNNiwyOFY0SDMwVjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFw''@;'; put 'put ''ZU5ldHdvcmtHbG9iZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJh''@;'; put 'put ''MTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWm0wLDJhMTIsMTIsMCwwLDEsOC40NCwzLjQ4YzAsLjMzLDAsLjY2LDAsMUExOC41MSwxOC41MSwwLDAsMCwxNCw4LjUzYTIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBj''@;'; put 'put ''LS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS45MiwxMS45MiwwLDAsMSwxNy43NSw0Wm0tMyw1Ljg3QTE3LDE3LDAsMCwxLDI1LjkyLDEwYTE2LjksMTYuOSwwLDAsMS0zLjExLDcsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42''@;'; put 'put ''M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3Wm0tNC0zLjZjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2''@;'; put 'put ''LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4y''@;'; put 'put ''Ny44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQz''@;'; put 'put ''LDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4Wm02LjUxLTguOWEyLjMzLDIuMzMsMCwwLDAtLjMzLTEuMTksMTguNCwxOC40LDAsMCwwLDMuMzktNy4zN3EuNzUuMzUsMS40''@;'; put 'put ''OC43OGExMiwxMiwwLDAsMSwuNDIsOC4yQTE2LDE2LDAsMCwxLDI0LjI3LDE5LjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRoLTJjMCwuMiwwLC40LDAsLjYxYTEyLDEyLDAsMCwxLS41MywzLjUyLDE2LDE2LDAsMCwxLTUtLjQxLDIuMzMsMi4z''@;'; put 'put ''MywwLDAsMC0uMzMtMS4xOSwxOC44NywxOC44NywwLDAsMCwxLjYyLTIuNTJIMjMuODNhMTcuMjksMTcuMjksMCwwLDEtMSwxLjU0LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43''@;'; put 'put ''N0ExNy4wOCwxNy4wOCwwLDAsMSwxOS41Niw5bC44Ny0xLjUxYTE4LjU5LDE4LjU5LDAsMCwwLTYuMzksMSwyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuODgsMTEuODgsMCwwLDEsMjIsNC43OUwy''@;'; put 'put ''MywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFptLTIxLTkuMTNjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCww''@;'; put 'put ''LTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODks''@;'; put 'put ''Mi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45''@;'; put 'put ''MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCww''@;'; put 'put ''LDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTVsLS41MSwwYTExLjkxLDExLjkxLDAsMCwxLS4yNSw2LDE2LDE2LDAs''@;'; put 'put ''MCwxLTUtLjQxLDIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC41OSwxOC41OSwwLDAsMCwyLjc4LTUuMTgsNy40OSw3LjQ5LDAsMCwxLTEuMzEtLjgyLDE3LDE3LDAsMCwxLTIuNjEsNSwyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQu''@;'; put 'put ''OTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzcsMTcsMTcsMCwwLDEsOC41My0uNjIsNy40Myw3LjQzLDAsMCwxLS41Ni0xLjU5QTE4LjU2LDE4LjU2LDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0u''@;'; put 'put ''MTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDIyLjU3LDVhNy40NSw3LjQ1LDAsMCwxLC41My0yQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00Wk0xMC43Niw2LjI3YzAsLjIxLjA2LjQzLjEuNjQuMDkuNDQu''@;'; put 'put ''MjEuODcuMzMsMS4zYTIuMjgsMi4yOCwwLDAsMC0xLjEsMi4yNUExOC4zMiwxOC4zMiwwLDAsMCw1LjksMTQuMjIsMTIsMTIsMCwwLDEsMTAuNzYsNi4yN1ptMCwxNS43MUEyLjM0LDIuMzQsMCwwLDAsOS4yLDIzLjc0bC0uNjQsMEExMS45NCwxMS45NCwwLDAsMSw1LjgsMTYuOTJsLjExLS4x''@;'; put 'put ''OWExNi45LDE2LjksMCwwLDEsNC44MS00Ljg5LDIuMzEsMi4zMSwwLDAsMCwyLjI4LjYzLDE3LjUzLDE3LjUzLDAsMCwwLDUuMzUsNS42NWMuNDEuMjcuODMuNTIsMS4yNS43NkEyLjMyLDIuMzIsMCwwLDAsMTkuNzgsMjBhMTYuOTQsMTYuOTQsMCwwLDEtNi4yLDMuMTFBMi4zNCwyLjM0LDAs''@;'; put 'put ''MCwwLDEwLjc2LDIyWm03LDZhMTEuOTIsMTEuOTIsMCwwLDEtNS44MS0xLjUxbC4yOC0uMDZhMi4zNCwyLjM0LDAsMCwwLDEuNTctMS43OSwxOC40MywxOC40MywwLDAsMCw3LTMuNSwyLjI5LDIuMjksMCwwLDAsMy0uNjIsMTcuNDEsMTcuNDEsMCwwLDAsNC4zMi41NmwuNTMsMEExMiwxMiww''@;'; put 'put ''LDAsMSwxNy43NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNi45LDE2LjksMCwwLDAsMy4xMS03QTE3LDE3LDAsMCwwLDE0LjcyLDkuODdaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3Ljc1LDJhMTQsMTQsMCwwLDAtMTQsMTRjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDEsMCwxNy43NSwyWk0yOC4xLDIxLjA5YTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjks''@;'; put 'put ''Mi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMzLDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIs''@;'; put 'put ''Mi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43''@;'; put 'put ''NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCww''@;'; put 'put ''LDEsMTQsOC41M2ExOC41MSwxOC41MSwwLDAsMSwxMi4xMS0uMDdjMC0uMzIsMC0uNjUsMC0xaDBhMTIsMTIsMCwwLDEsMi42MiwzLjg1aDBxLS43My0uNDMtMS40OC0uNzhhMTguNCwxOC40LDAsMCwxLTMuMzksNy4zNywyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwu''@;'; put 'put ''NDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjczLDE1LjRIMjUuNTZhMTguODcsMTguODcsMCwwLDEtMS42MiwyLjUyLDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAs''@;'; put 'put ''MS0uNjEsMS41M0gyOC4xYTE3LjQxLDE3LjQxLDAsMCwxLTQuMzItLjU2LDIuMjksMi4yOSwwLDAsMS0zLC42MiwxOC40MywxOC40MywwLDAsMS03LDMuNSwyLjM0LDIuMzQsMCwwLDEtMS41NywxLjc5bC0uMjkuMDZhMTEuOTMsMTEuOTMsMCwwLDEtMy4zOS0yLjhsLjY2LDBhMi4zMywyLjMz''@;'; put 'put ''LDAsMCwxLDQuMzctLjU4QTE2Ljk0LDE2Ljk0LDAsMCwwLDE5Ljc4LDIwYTIuMzIsMi4zMiwwLDAsMS0uMTgtMS4xN2MtLjQyLS4yNC0uODQtLjQ5LTEuMjUtLjc2QTE3LjUzLDE3LjUzLDAsMCwxLDEzLDEyLjQ3YTIuMzEsMi4zMSwwLDAsMS0yLjI4LS42MywyNy4zMSwyNy4zMSwwLDAsMC01''@;'; put 'put ''LDQuNzRjMC0uMiwwLS4zOSwwLS41N2ExMiwxMiwwLDAsMSwuMTQtMS43MywxOC43NSwxOC43NSwwLDAsMSw0LjItMy44LDIuMjgsMi4yOCwwLDAsMSwxLjEtMi4yNWMtLjEyLS40My0uMjQtLjg2LS4zMy0xLjMsMC0uMTQsMC0uMjktLjExLS42NGExMiwxMiwwLDAsMSwxLjM3LS44N2MuMS41''@;'; put 'put ''OS4xNC45LjIxLDEuMjFzLjIuODUuMzIsMS4yN2wuMjUsMEEyLjMzLDIuMzMsMCwwLDEsMTQsOC41M2ExOC41OSwxOC41OSwwLDAsMSw2LjM5LTFMMjMsM0ExNCwxNCwwLDAsMCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBBMTQsMTQsMCwwLDAsMzEuNzYsMTZDMzEuNzYsMTUu''@;'; put 'put ''OCwzMS43NCwxNS42LDMxLjczLDE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI2LDExLjY0YTE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4y''@;'; put 'put ''OCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE3LjI5LDE3LjI5LDAsMCwwLDEtMS41NGgtMS42QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlhMTcuMDgsMTcuMDgsMCwwLDAtNC44NC44OCwyLjI1LDIuMjUsMCwwLDEtLjQ3LDEuNzdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNSwxMy4zNWE3LjU0LDcuNTQsMCwwLDEtMS41LjE1LDcuNDYsNy40NiwwLDAsMS0zLjI4LS43NiwxOC41OSwxOC41OSwwLDAsMS0yLjc4LDUuMTgsMi4zMywyLjMzLDAsMCwx''@;'; put 'put ''LC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4w''@;'; put 'put ''NmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdh''@;'; put 'put ''Mi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMyww''@;'; put 'put ''LS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU2LDE4LjU2LDAsMCwxLDguNjUtLjg3LDcuNDUsNy40NSwwLDAsMSwuNDEtNC41OUExNCwxNCwwLDAs''@;'; put 'put ''MCwzLjc1LDE2YzAsLjQ1LDAsLjg5LjA3LDEuMzNsMCwwaDBhMTQsMTQsMCwxLDAsMjcuNjgtNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzIsOS44N2EyLjI1LDIuMjUsMCwwLDEt''@;'; put 'put ''LjQ3LDEuNzcsMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcsMTcsMCwwLDAsMi42MS01LDcuNTIsNy41MiwwLDAsMS0yLjE2LTIuNjdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLEYuQ2xy''@;'; put 'put ''U2hhcGVOZXR3b3JrU2V0dGluZ3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjhjLjU0LS4xNCwxLjA2LS4zMiwxLjU5LS41MXYtMS4yYTIuNzcsMi43NywwLDAsMSwuMDYtLjUxLDE3LjQ0LDE3LjQ0LDAsMCwxLTEuODIu''@;'; put 'put ''NjIsMi4yOCwyLjI4LDAsMCwwLTQuMjguNjNsLS40NSwwaDBhMTEuOTMsMTEuOTMsMCwwLDEtMi44OC03LjI3LDE3Ljc5LDE3Ljc5LDAsMCwxLDUtNC43MiwyLjIzLDIuMjMsMCwwLDAsMi4yOS41NiwxOC41MiwxOC41MiwwLDAsMCw0LjQ3LDUsMi43NCwyLjc0LDAsMCwxLC4yMS0uMjRsLjk1''@;'; put 'put ''LS45MWExNi45LDE2LjksMCwwLDEtNC4zNS00Ljc5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNGwuMTksMGgxLjU2YTE5LDE5LDAsMCwwLC45MS0yLjcyYy40My4xOS44''@;'; put 'put ''NC40MSwxLjI2LjY0YTExLjk0LDExLjk0LDAsMCwxLDEsNC4wOWwwLDBBMi43NywyLjc3LDAsMCwxLDMwLDE2YTIuNzMsMi43MywwLDAsMSwuNjguMUExNCwxNCwwLDEsMCwxNi4wOCwzMWEyLjcyLDIuNzIsMCwwLDEsMC0yQTExLjkzLDExLjkzLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1''@;'; put 'put ''YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCwwLDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAs''@;'; put 'put ''MCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwxOS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI1LDIxLjE5QTMuODQsMy44NCwwLDEsMCwyOC44OCwyNSwzLjg3LDMuODcsMCwwLDAsMjUsMjEuMTlabTAsNi4wOEEyLjI0LDIuMjQsMCwxLDEsMjcuMjgsMjUsMi4yNiwyLjI2LDAsMCwxLDI1LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMTcsMjQuMTRhMS4xNCwxLjE0LDAsMCwwLS43LTEuMWwtMS41Ni0uNDZxLS4xMS0uMzItLjI2LS42M2wuNzItMS4zM2ExLjE0LDEuMTQsMCwwLDAtLjIxLTEuMzRsLTEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAtMS4zNC0uMmwtMS4zNC43''@;'; put 'put ''MWE3LjI4LDcuMjgsMCwwLDAtLjY3LS4yOEwyNywxNi43MWExLjE0LDEuMTQsMCwwLDAtMS4wOC0uNzZIMjRhMS4xNCwxLjE0LDAsMCwwLTEuMDguOGwtLjQ0LDEuNDNhNy4zMiw3LjMyLDAsMCwwLS42OC4yOGwtMS4zMi0uN2ExLjE0LDEuMTQsMCwwLDAtMS4zMy4xOWwtMS4zNywxLjMxYTEu''@;'; put 'put ''MTQsMS4xNCwwLDAsMC0uMjEsMS4zNWwuNywxLjI4cS0uMTYuMzItLjI4LjY1TDE2LjU4LDIzYTEuMTMsMS4xMywwLDAsMC0uODEsMS4wOXYxLjg3QTEuMTQsMS4xNCwwLDAsMCwxNi41OSwyN2wxLjQ3LjQ0cS4xMi4zMi4yOC42NGwtLjcyLDEuMzVhMS4xNCwxLjE0LDAsMCwwLC4yLDEuMzVs''@;'; put 'put ''MS4zNCwxLjMyYTEuMTQsMS4xNCwwLDAsMCwxLjM0LjJsMS4zNy0uNzJxLjMxLjE0LjYzLjI2bC40NCwxLjQ3YTEuMTQsMS4xNCwwLDAsMCwxLjA5LjhoMS45QTEuMTQsMS4xNCwwLDAsMCwyNywzMy4zMWwuNDQtMS40N2MuMjEtLjA3LjQyLS4xNi42Mi0uMjVsMS4zOC43M2ExLjE0LDEuMTQs''@;'; put 'put ''MCwwLDAsMS4zMy0uMmwxLjM0LTEuMzJhMS4xNCwxLjE0LDAsMCwwLC4yMS0xLjM1bC0uNzMtMS4zNHEuMTQtLjMuMjUtLjZsMS41LS40NEExLjEzLDEuMTMsMCwwLDAsMzQuMTcsMjZabS0xLjYsMS41LTIsLjU4LS4xMi40MkE1LjU1LDUuNTUsMCwwLDEsMzAsMjcuNzNsLS4yMS4zOCwxLDEu''@;'; put 'put ''NzktLjg2Ljg0LTEuODItMS0uMzcuMmE1Ljc4LDUuNzgsMCwwLDEtMS4xMi40NmwtLjQyLjEyLS41OSwySDI0LjM4bC0uNTktMS45NS0uNDItLjEyQTUuODYsNS44NiwwLDAsMSwyMi4yNCwzMGwtLjM3LS4yLTEuODEsMS0uODYtLjg1LDEtMS44Mi0uMjItLjM4YTUuNiw1LjYsMCwwLDEtLjQ5''@;'; put 'put ''LTEuMTNsLS4xMy0uNDEtMS45NS0uNThWMjQuNDJsMS45NC0uNTguMTItLjQxYTUuNTMsNS41MywwLDAsMSwuNDktMS4xNGwuMjItLjM5LTEtMS43My44Ny0uODQsMS43Ny45NC4zOC0uMjFhNS44LDUuOCwwLDAsMSwxLjE3LS40OWwuNDEtLjEyLjU5LTEuOTFoMS4yM2wuNTgsMS45LjQxLjEy''@;'; put 'put ''YTUuNzksNS43OSwwLDAsMSwxLjE2LjQ4bC4zOC4yMSwxLjgtLjk1Ljg2Ljg1LTEsMS43Ny4yMS4zOGE1LjUzLDUuNTMsMCwwLDEsLjQ3LDEuMTNsLjEyLjQyLDEuOTMuNTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0zNCwyMy42MywzMiwyM2E3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjksMTcuODZhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMWE3LDcsMCwwLDAtMS40My0uNjFsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4z''@;'; put 'put ''Ny4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxTDIwLDE3LjhhLjM3LjM3LDAsMCwwLS40NC4wN0wxOCwxOS4zMWEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LDcsMCwwLDAsMTguMzUsMjNsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCww''@;'; put 'put ''LDAsLjI2LjM1bDIsLjYxQTcsNywwLDAsMCwxOSwyOC4zN2wtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NGwxLjQ1LDEuNDVhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwu''@;'; put 'put ''MzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhBNyw3LDAsMCwwLDMxLjk1LDI3bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjI0QS4zNy4zNywwLDAsMCwzNCwy''@;'; put 'put ''My42M1ptLTguODMsNC43MkEzLjMzLDMuMzMsMCwxLDEsMjguNTMsMjUsMy4zMywzLjMzLDAsMCwxLDI1LjE5LDI4LjM0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44NSwyNy40NGEyLjI5LDIuMjksMCwwLDAs''@;'; put 'put ''MS43NC0xLjY4LDE5LjcxLDE5LjcxLDAsMCwwLDEuODktLjZWMjMuOTVhMiwyLDAsMCwxLC4wOS0uNTUsMTcuNDIsMTcuNDIsMCwwLDEtMi4xNy43OCwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEs''@;'; put 'put ''NS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNjUsNS4wOSwxLjkzLDEuOTMsMCwwLDEsLjIzLS4zMmwuODktLjg3YTE2Ljg5LDE2Ljg5LDAsMCwxLTQuNDktNC44OSwyLjI3LDIuMjcsMCwwLDAsLjM1LTEuMmMwLS4wNywwLS4xNCwwLS4yMkExNy42''@;'; put 'put ''OSwxNy42OSwwLDAsMSwyNSwxMWExNy40OSwxNy40OSwwLDAsMS0xLjE1LDMuMzUsMS45NCwxLjk0LDAsMCwxLC4zMS0uMDVoMS40NWExOS4wNiwxOS4wNiwwLDAsMCwuOS0yLjdjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTMsMTEuOTMsMCwwLDEsMSw0LjYzbDEtLjUxYTIsMiwwLDAsMSwu''@;'; put 'put ''OTItLjIzaC4wOEExNCwxNCwwLDEsMCwxNi40NCwzMWExLjk0LDEuOTQsMCwwLDEsLjEyLTEuNDZsLjI4LS41M2gtLjA3QTExLjkxLDExLjkxLDAsMCwxLDEwLjg1LDI3LjQ0Wk0xNi43Niw1YTEyLDEyLDAsMCwxLDguNjEsMy42NmMwLC4yNSwwLC41MS0uMDguNzZhMTkuMjEsMTkuMjEsMCww''@;'; put 'put ''LDAtMTIuMzUuMTFBMi4yOCwyLjI4LDAsMCwwLDExLjc0LDlhMTcsMTcsMCwwLDEtLjYxLTIuNTNBMTEuOTIsMTEuOTIsMCwwLDEsMTYuNzYsNVpNOS42Niw3LjM2YTE4LjcyLDE4LjcyLDAsMCwwLC40OSwxLjkyLDIuMjgsMi4yOCwwLDAsMC0xLjA3LDEuOTNzMCwuMSwwLC4xNUExOS40NSwx''@;'; put 'put ''OS40NSwwLDAsMCw1LDE0Ljc5LDEyLDEyLDAsMCwxLDkuNjYsNy4zNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVOZXR3b3JrU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMC43''@;'; put 'put ''OCw4LjQxQTIsMiwwLDAsMCwyOC44Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1pNMzIsMjdINFYxOS4wNkw3LjEzLDlIMjgu''@;'; put 'put ''ODdMMzIsMTkuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTcuMTEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9''@;'; put 'put ''IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjYuMjMiIHk9IjE4IiB3aWR0aD0iMjMuNjkiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40NywzMywxNS40SDMwLjg2TDMyLDE5LjA2''@;'; put 'put ''VjI3SDRWMTkuMDZMNy4xMyw5SDE5LjU2bDEuMTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjcuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyLjEyIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjIuMSIgeT0iMjIi''@;'; put 'put ''IHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjcuMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MSwxOC40N2wtMS42NS01LjMyYTcuNDksNy40OSwwLDAsMS0yLC4zM0wzMiwxOS4wNlYyN0g0VjE5LjA2TDcuMTMsOWgxNmE3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCww''@;'; put 'put ''LS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs''@;'; put 'put ''NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMC43MSw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu''@;'; put 'put ''MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMi4yNiwxMy4xNUE3LjQ5LDcuNDksMCwwLDEsMjIuNTcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNmEyLDIsMCwwLDAtLjA5LS41OVpNOC45MiwyNUg3''@;'; put 'put ''LjEyVjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMEgyMi4xVjIyaDEuOFptNSwwSDI3LjFWMjJoMS44Wk0zMSwxOS40SDVWMThIMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlUm91dGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwx''@;'; put 'put ''NC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4zOCwxNS40SDI4LjU0TDMwLjE1LDE3SDIyLjQ2YTEsMSwwLDEsMCwwLDJoNy42OWwtMi43MSwyLjY5YTEsMSwwLDAsMCwxLjQxLDEuNDJMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2wxLjE1LTEuMTYtLjEtLjE1QTMuNjgsMy42OCwwLDAsMSwxOSwxMFYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40''@;'; put 'put ''MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTQuODdsNS4xMS01LjE0''@;'; put 'put ''YTEsMSwwLDEsMC0xLjQyLTEuNDFMMTksMTFWMy4zM2ExLDEsMCwwLDAtMiwwVjExTDE0LjMxLDguMzJhMSwxLDAsMSwwLTEuNDIsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQxLDEuNDJMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01Ljg1LDE5aDcuNjlhMSwxLDAsMCwwLDAtMkg1Ljg1bDIuNzEtMi42OWExLDEsMCwxLDAtMS40MS0xLjQyTDIsMThsNS4xNCw1LjExYTEsMSwwLDEsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMTgsMS42N2ExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwxLjY3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1''@;'; put 'put ''LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEw''@;'; put 'put ''LjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44''@;'; put 'put ''LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44''@;'; put 'put ''MiwxNS4zOUgyOC42OEwzMSwxNy42N2wtNC4xOSw0LjA5YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMS41LTEuNDdIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTMtMS41MUwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDEsMSwxNSw5''@;'; put 'put ''LjkybDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2NC40OUEzLjY1LDMuNjUsMCwwLDEsMTksOS44OWw0LjIyLTcuMzFBMTYsMTYsMCwxLDAsMzQsMTcuNjcsMTYsMTYsMCwwLDAsMzMuODIsMTUuMzlabS0yMy41LDYuMzVhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQu''@;'; put 'put ''MDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUs''@;'; put 'put ''MjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy''@;'; put 'put ''MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4yMiwxMi43NkE3LjQ5LDcuNDksMCwwLDEsMjMuMzIsMi42YTE2LDE2LDAsMSwwLDkuOSwxMC4xN1pNMTMuODYsOS45MmEuOC44LDAsMCwxLDEuMTMsMGwyLjIxLDIuMTlWNS45M2EuOC44LDAsMCwxLDEuNiwwdjYuMThMMjEs''@;'; put 'put ''OS45MmEuOC44LDAsMSwxLDEuMTMsMS4xNEwxOCwxNS4xNWwtNC4xNC00LjFBLjguOCwwLDAsMSwxMy44Niw5LjkyWk0xMC4zMiwyMS43NGEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAs''@;'; put 'put ''MS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAs''@;'; put 'put ''MCwxLDIyLjE0LDI1LjQxWm00LjY3LTMuNjZhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0yLjItMi4xNGEuOC44LDAsMSwxLDEuMTItMS4xNEwzMSwxNy42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVWTT0oMCxtLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMTEsNUgyNVY4aDJWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTBIMTd2Mmg4djZoMlYxMmgz''@;'; put 'put ''VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjEuODdMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djYuODVoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjE1LjQiIHdpZHRoPSIxLjk5IiBoZWlnaHQ9IjIuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNFYyNkgy''@;'; put 'put ''MlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjE1LjRaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsMTB2MmgxLjU3QTMuNjcsMy42NywwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDVIMjIuNTdhNy40NSw3LjQ1LDAsMCwxLC41NS0ySDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVoMFYyNkgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjhoOGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwzMCwxMy41Wk02LDMxVjE3SDIwdjlIMTZWMjBIMTR2NmEyLDIsMCwwLDAsMiwyaDR2M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMmg4djZoMlYxMi44N0E3''@;'; put 'put ''LjUyLDcuNTIsMCwwLDEsMjMuNjYsMTBIMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDI3VjVhMiwyLDAsMCwwLTItMkgxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxNy4xOWEyLDIsMCwwLDAtMiwydjEuNEgyMEEzLjYsMy42LDAsMCwxLDIzLjYsMTd2OEgyMlYxN2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyQTIsMiwwLDAsMCwzMCwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42aDIuNzJMMjMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4xOSwxMGEyLDIs''@;'; put 'put ''MCwwLDAtMiwydjEuNEgxOUEzLjY4LDMuNjgsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjIxLDE1LjRBMy41NSwzLjU1LDAsMCwxLDIzLjYsMTd2OEgyMlYx''@;'; put 'put ''N2EyLDIsMCwwLDAtMi0ySDZhMiwyLDAsMCwwLTIsMlYzMWEyLDIsMCwwLDAsMiwySDIwYTIsMiwwLDAsMCwyLTJWMjkuNkgxNy4xOWEzLjYsMy42LDAsMCwxLTMuNi0zLjZWMjBoMS42djZhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNTksMTJhMy42LDMuNiwwLDAsMSwzLjYtMy42SDIyLjlBNy40NSw3LjQ1LDAsMCwxLDIz''@;'; put 'put ''LjEzLDNIMTFBMiwyLDAsMCwwLDksNXY4LjRoNC41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OSw3LjQ5LDAsMCwxLDIzLjY2LDEwSDE3LjE5YTIsMiwwLDAsMC0y''@;'; put 'put ''LDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVk1XQXBwPSgwLG0uY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIg''@;'; put 'put ''MjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMCA0IDIwIDggMjIgOCAyMiA2IDMwIDYgMzAgMTQgMjggMTQgMjggMTYgMzIgMTYgMzIgNCAyMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIx''@;'; put 'put ''MSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjI4IDIyIDMwIDIyIDMwIDMwIDIyIDMwIDIyIDI4IDIwIDI4IDIwIDMyIDMyIDMyIDMyIDIwIDI4IDIwIDI4IDIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmwwLS4xVjE3aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRl''@;'; put 'put ''ZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjIuNDUgNCAyMCA0IDIwIDggMjAuMTQgOCAyMi40NSA0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx''@;'; put 'put ''NS40IiB3aWR0aD0iNCIgaGVpZ2h0PSIwLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50''@;'; put 'put ''cz0iMTQgMzAgNiAzMCA2IDIyIDggMjIgOCAyMCA0IDIwIDQgMzIgMTYgMzIgMTYgMjggMTQgMjggMTQgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0''@;'; put 'put ''IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDZoLjVhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLC4yOC0ySDIwVjhoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjE0SDI4djJoNFYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNSwxMS41OGE3LjUzLDcuNTMsMCwwLDEtLjU4LS41OEgxOXY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQ2VydGlmaWNh''@;'; put 'put ''dGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhINFY4SDMybDAsOC41NmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxVjhBMiwyLDAsMCwwLDMyLDZaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2''@;'; put 'put ''IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQt''@;'; put 'put ''MTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0i''@;'; put 'put ''MS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjIzIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYs''@;'; put 'put ''Ni4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIN3YxLjZIMTkuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMydjEuMTZhOC40MSw4''@;'; put 'put ''LjQxLDAsMCwxLDIsMS44MXYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTls''@;'; put 'put ''LjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9Ijci''@;'; put 'put ''IHk9IjEyIiB3aWR0aD0iMTciIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIxNiIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAu''@;'; put 'put ''NjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJ2My4zNGE4LjQxLDgu''@;'; put 'put ''NDEsMCwwLDEsMiwxLjgxdi02QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI4VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0y''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0TDIwLjQxLDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1''@;'; put 'put ''IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDMwSDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMzJhMiwyLDAsMCwxLDIsMlYxOC4zN2E4LjM0''@;'; put 'put ''LDguMzQsMCwwLDAtMTMuNDksOS43OWwtLjkzLDEuMTRaTTcsMTJ2MS42SDI0VjEyWm0wLDUuNkgxOFYxNkg3Wm0wLDdIMTdWMjNIN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNTlhNi4zNyw2LjM3''@;'; put 'put ''LDAsMSwwLTEwLjc3LDQuNTlsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdBNi4zNCw2LjM0LDAsMCwwLDMzLjgzLDIzLjU5Wm0tMTAuNzQsMGE0LjM3LDQuMzcsMCwxLDEsNC4zNyw0LjMxQTQuMzUs''@;'; put 'put ''NC4zNSwwLDAsMSwyMy4xLDIzLjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjkuMjVhOC4zNiw4LjM2LDAsMCwxLDQuNzUsM3YtM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTkuMDcsMTMuNkg3VjEySDE4LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRBOC4zNCw4LjM0LDAsMCwxLDI1LjY2LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAs''@;'; put 'put ''MCwxLDE5LjA3LDEzLjZaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjcuNDYsMTcuMjNhNi4zNiw2LjM2LDAsMCwwLTQuNCwxMWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN2E2LjM2LDYuMzYsMCwwLDAtNC40LTExWm0wLDEwLjY4YTQuMzEsNC4z''@;'; put 'put ''MSwwLDEsMSw0LjM3LTQuMzFBNC4zNSw0LjM1LDAsMCwxLDI3LjQ2LDI3LjkxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkg0QTIsMiww''@;'; put 'put ''LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMzQsMTguMzd2LTZBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE3LDI0LjZIN1YyM0gxN1ptMS03SDdWMTZIMThabTYtNEg3VjEySDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksRi5DbHJT''@;'; put 'put ''aGFwZUFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x''@;'; put 'put ''NCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwxOEg2VjE0aDRhMywzLDAsMCwxLS42OC0xLjg3czAtLjA5LDAt''@;'; put 'put ''LjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNBMywzLDAsMCwxLDI2LDE0aDR2NEgyMmwtMiwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00''@;'; put 'put ''LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQxLDIwLjYsMTgsMjJsLTEuNDEtMS40TDE2LDIwSDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjIwSDIwWk0yMiwyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjYuNjZzMCwuMDksMCwuMTNhMywzLDAsMCwx''@;'; put 'put ''LS44OCwyLjEyTDIyLDE4SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yLDE0LjI1YTMsMywwLDAsMS0uODgtMi4xMnMwLS4wOSwwLS4xM0g1LjVBMS41LDEu''@;'; put 'put ''NSwwLDAsMCw0LDEzLjVWMThIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE5LjE4bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTEuNDFsLTQsMy45NVYzYTEsMSwwLDEsMC0yLDB2MTIuNGwtNC0zLjk1YTEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlVW5hcmNoaXZlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkg3VjIySDVWMzJhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIySDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQsMjRhMSwxLDAsMCwwLDEsMWg2YTEsMSwwLDAsMCwwLTJIMTVBMSwxLDAsMCwwLDE0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMThINlYxNGg5VjEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYyMEgxNS43OEEzLDMsMCwwLDEsMTUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0zMC41LDEySDIxdjJoOXY0SDIxYTMsMywwLDAsMS0uNzgsMkgzMlYxMy41QTEuNSwxLjUsMCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDkuNTUsMTcsNS42''@;'; put 'put ''VjE4YTEsMSwwLDEsMCwyLDBWNS42bDQsMy45NWExLDEsMCwxLDAsMS40MS0xLjQyTDE4LDEuNzgsMTEuNjEsOC4xM0ExLDEsMCwwLDAsMTMsOS41NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxYTMs''@;'; put 'put ''MywwLDAsMS0yLjIyLTFINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjAuMjFBMywzLDAsMCwxLDE4LDIxWm00LDNhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwwLDEsMC0yaDZBMSwxLDAsMCwxLDIyLDI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMkg1LjVBMS41LDEuNSwwLDAsMCw0LDEzLjVWMThIMTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2NkgzMlYxMy41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsMzAuNSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEs''@;'; put 'put ''MSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNvbm5lY3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDI4LjIzQTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxNC4xNWE2LjI1LDYu''@;'; put 'put ''MjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLDVIMjJhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFpNMTcuMDgsMjJIMTQuMTVhNC4xNyw0LjE3LDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00aDIuOTRaTTIyLDIySDE5VjE0aDNhNC4xNyw0''@;'; put 'put ''LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjIsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMkgxNC4xNWE2LjI1LDYuMjUsMCwwLDAtNi4yMSw1SDJ2Mkg3LjkzYTYuMjIsNi4yMiww''@;'; put 'put ''LDAsMCw2LjIyLDVIMTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjIzLDE3QTYuMjUsNi4yNSwwLDAsMCwyMiwxMkgxOVYyNGgzYTYuMjIsNi4yMiwwLDAsMCw2LjIyLTVIMzRWMTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRGlzY29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTcsNkE2LjIxLDYuMjEsMCwwLDAsNiwxMUgyLjEzdjJINmE2LjIzLDYuMjMsMCwwLDAsNi4yMSw1SDE3VjZaTTE1LjEsMTZI''@;'; put 'put ''MTIuMTdhNC4yLDQuMiwwLDAsMS00LjMxLTQsNC4xNyw0LjE3LDAsMCwxLDQuMzEtNEgxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTIsMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgx''@;'; put 'put ''OXYySDE0YTEsMSwwLDEsMCwwLDJoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAsNi4yMi01aDMuNzZabS0xMCw1SDIxVjIwaDIuOTRhNC4xNyw0LjE3LDAsMCwxLDQuMzEsNEE0LjE3LDQuMTcsMCwwLDEsMjMuOTQsMjhaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMiw2YTYuMjEsNi4yMSwwLDAsMC02LjIxLDVIMnYySDUuODNBNi4yMyw2LjIzLDAsMCwwLDEyLDE4SDE3VjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc5LDIzSDMwLjE0YTYuMjUsNi4yNSwwLDAsMC02LjIxLTVIMTl2MkgxNGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoNXY0SDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djJoNC45NGE2LjIzLDYuMjMsMCwwLDAs''@;'; put 'put ''Ni4yMi01aDMuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTcuNiwyNC4zMmwtMi40NiwyLjQ0YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwx''@;'; put 'put ''LDAtNS41NWw0LjY5LTQuNjVhNCw0LDAsMCwxLDUuNjIsMCwzLjg2LDMuODYsMCwwLDEsMSwxLjcxQTIsMiwwLDAsMCwyMS4xLDE4bDEuMjktMS4yOGE1Ljg5LDUuODksMCwwLDAtMS4xNS0xLjYyLDYsNiwwLDAsMC04LjQ0LDBMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2''@;'; put 'put ''LDAsMCwwLDguNDQsMGwzLjY1LTMuNjJjLS4xNywwLS4zMywwLS41LDBBOCw4LDAsMCwxLDE3LjYsMjQuMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42MSw3LjgyYTYsNiwwLDAsMC04LjQ0LDBsLTMu''@;'; put 'put ''NjUsMy42MmMuMTcsMCwuMzMsMCwuNDksMGgwYTgsOCwwLDAsMSwyLjEuMjhsMi40Ni0yLjQ0YTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC42OSw0LjY1YTQsNCwwLDAsMS01LjYyLDAsMy44NiwzLjg2LDAsMCwxLTEtMS43MSwyLDIsMCwwLDAtLjI4LjIzbC0x''@;'; put 'put ''LjI5LDEuMjhhNS44OSw1Ljg5LDAsMCwwLDEuMTUsMS42Miw2LDYsMCwwLDAsOC40NCwwbDQuNjktNC42NWE1LjkyLDUuOTIsMCwwLDAsMC04LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVVbmxpbms9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsNSwzLjU5LDYuNDFsOSw5TDguMSwxOS43OWE1LjkxLDUuOTEsMCwwLDAsMCw4LjM5LDYsNiwwLDAsMCw4LjQ0LDBMMjEsMjMuNzhsOC42Myw4LjYzTDMxLDMxWk0xNS4xMywyNi43NmE0LDQsMCwwLDEtNS42MiwwLDMuOTIsMy45MiwwLDAsMSww''@;'; put 'put ''LTUuNTVMMTQsMTYuNzlsNS41OCw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNTMsOS4yMmE0LDQsMCwwLDEsNS42MiwwLDMuOTIsMy45MiwwLDAsMSwwLDUuNTVsLTQuNzksNC43NkwyMy43OCwy''@;'; put 'put ''MWw0Ljc5LTQuNzZhNS45Miw1LjkyLDAsMCwwLDAtOC4zOSw2LDYsMCwwLDAtOC40NCwwbC00Ljc2LDQuNzRMMTYuNzgsMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksRi5DbHJTaGFwZUNsb3VkTmV0d29yaz0oMCxtLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzAuNzEsMTUuMTh2LTFBMTEuMjgsMTEuMjgsMCwwLDAsMTkuNTYsMi44M2gtLjExYTExLjI4LDExLjI4LDAsMCwwLTExLDguOTMsNy40Nyw3LjQ3LDAsMCwwLDAsMTQuOTRIMjkuMTNhNS44Niw1Ljg2LDAsMCwwLDEuNTgtMTEuNTJaTTI5LjEzLDI0LjdIOC40''@;'; put 'put ''NmE1LjQ3LDUuNDcsMCwxLDEsMC0xMC45NGgxLjY5bC4xMS0uODdhOS4yNyw5LjI3LDAsMCwxLDE4LjQ1LDEuM3YxLjI4YzAsLjA5LDAsLjE4LDAsLjI3bC0uMDcsMS4xNS45NC4xMWEzLjg2LDMuODYsMCwwLDEtLjQzLDcuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS41OCwzMS4xOEgxOC44NXYtMi40aC0ydjIuNEg2LjA4YTEsMSwwLDAsMCwwLDJoMjMuNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICcpLEYu''@;'; put 'put ''Q2xyU2hhcGVDbG91ZFNjYWxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjMyLDExLjExSDcuODRMOCwxMC4yNEE3LjE5LDcuMTksMCwwLDEsMTUuMDcsNGguMDdhNy4xNSw3LjE1LDAsMCwxLDQuNzEsMS44MywxMS4xLDExLjEsMCwwLDEsMy4wOS42NEE5LjE4LDkuMTgsMCwwLDAs''@;'; put 'put ''MTUuMTYsMmgtLjA5QTkuMiw5LjIsMCwwLDAsNi4xMyw5LjExLDYuMTUsNi4xNSwwLDAsMCwyLjMzLDE5Ljk1LDguMDksOC4wOSwwLDAsMSwzLDE3LjcxYTQuMTIsNC4xMiwwLDAsMS0uODEtMi40NEE0LjE2LDQuMTYsMCwwLDEsNi4zMiwxMS4xMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjQsMTYuOTFoMS41MkwxMiwxNmE3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjE3LDcuMTcsMCwwLDEsNS43LDIuOTIsMTEuMDUsMTEuMDUsMCwwLDEsMi43Mi43Nyw5LjIsOS4yLDAsMCwwLTgu''@;'; put 'put ''NC01LjY5aC0uMDlhOS4yLDkuMiwwLDAsMC04Ljk0LDcuMTIsNi4xNSw2LjE1LDAsMCwwLTMuNjQsMTEsOC4xMSw4LjExLDAsMCwxLC43OS0yLDQuMTQsNC4xNCwwLDAsMSwzLTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMi40MiwyNC40N3YtLjYyYTkuMTgsOS4xOCwwLDAsMC0xOC4xMy0yLjE2QTYuMTYsNi4xNiwwLDAsMCwxNC40OCwzNEgzMWE0Ljg4LDQuODgsMCwwLDAsMS40Ni05LjUzWk0zMSwzMkgxNC40OGE0LjE2LDQuMTYsMCwxLDEsMC04LjMySDE2bC4xMS0uODdhNy4xOSw3LjE5LDAs''@;'; put 'put ''MCwxLDcuMTItNi4yNWguMDdhNy4yMSw3LjIxLDAsMCwxLDcuMTIsNy4yNXYxYzAsLjA3LDAsLjEzLDAsLjJsLS4wNywxLjExLjk0LjExQTIuODgsMi44OCwwLDAsMSwzMSwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAnKSxGLkNs''@;'; put 'put ''clNoYXBlQ2xvdWRUcmFmZmljPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41NCwyMC44MmEuODguODgsMCwwLDAtLjg4LS44OEgyMC43NWwxLjEtMS4xQS44OC44OCwwLDAsMCwyMC42LDE3LjZsLTMuMjEsMy4yMkwyMC42LDI0YS44OC44OCwwLDEsMCwxLjI1LTEuMjRMMjAuNzYs''@;'; put 'put ''MjEuN2g0LjlBLjg4Ljg4LDAsMCwwLDI2LjU0LDIwLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjcsMjEuN2EuODguODgsMCwxLDAsMC0xLjc2aC0uNThhLjg4Ljg4LDAsMSwwLDAsMS43NloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIxLDIwaC0uMDZhLjg1Ljg1LDAsMCwwLS44NS44OC45MS45MSwwLDAsMCwuOTEuODguODguODgsMCwxLDAsMC0xLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuNTksMTFhLjg4Ljg4LDAsMCwwLTEuMjUsMS4yNGwxLjEsMS4xSDI3LjUzYS44OC44OCwwLDEsMCwwLDEuNzZoNC45bC0xLjA5LDEuMDlhLjg4Ljg4LDAsMCwwLDEuMjUsMS4yNGwzLjIxLTMuMjJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC41LDE1LjA3YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuOSwxNC4yN2EuODUuODUsMCwwLDAtLjg1LS44OEgyMWEuODguODgsMCwxLDAsMCwxLjc2QS45MS45MSwwLDAsMCwyMS45LDE0LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAuMzYsMjMuNjVjMCwuMTMsMCwuMjYsMCwuMzlhMy43NywzLjc3LDAsMCwxLTMuNjIsMy44OUg3LjI4YTUuMzIsNS4zMiwwLDAsMS01LjEzLTUuNDhBNS4zMiw1LjMyLDAsMCwxLDcuMjgsMTdIOC45MUw5LDE2LjEyYTguOTIsOC45MiwwLDAsMSw4LjYyLThoLjA4YTgu''@;'; put 'put ''NDksOC40OSwwLDAsMSw2LjU2LDMuMjloMi4zN2ExMC41NSwxMC41NSwwLDAsMC04LjkxLTUuMjVoLS4xMUExMC44MiwxMC44MiwwLDAsMCw3LjIyLDE1YTcuMjgsNy4yOCwwLDAsMC03LDcuNDMsNy4yNyw3LjI3LDAsMCwwLDcuMDgsNy40M0gyNi43N0E1LjcyLDUuNzIsMCwwLDAsMzIuMzUs''@;'; put 'put ''MjRhMy43NywzLjc3LDAsMCwwLDAtLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVEZXBsb3k9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAsMCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgZD0iTTExLjU0LDEwLjczbC05LDUuMTdhMSwxLDAsMCwwLS41Ljg3djExYTEsMSwwLDAsMCwuNS44N2w5LDUuMTVhMSwxLDAsMCwwLDEsMGw5LTUuMTVhMSwxLDAsMCwwLC41LS44N3YtMTFhMSwxLDAsMCwwLS41LS44N2wtOS01LjE3QTEsMSwwLDAsMCwxMS41NCwxMC43M1pN''@;'; put 'put ''MTEsMzEuMDhsLTctNFYxOC40NGw3LDRaTTEyLDIxLDQuODEsMTYuODcsMTIsMTIuNzhsNy4yMSw0LjEyWm04LDYuMDktNyw0VjIyLjQ0bDctNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMywySDIyLjFhMSwxLDAs''@;'; put 'put ''MCwwLDAsMmg4LjUzbC04LjgyLDlhMSwxLDAsMSwwLDEuNDMsMS40TDMyLDUuNDZWMTMuOWExLDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDMzLDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTIuNDYsMTAuNzNhMSwx''@;'; put 'put ''LDAsMCwwLTEsMGwtOC42OCw1TDEyLDIxbDkuMTktNS4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDI3LjczYTEsMSwwLDAsMCwuNS44N0wxMSwzMy40NnYtMTFMMiwxNy4yOFoiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xMywzMy40Nmw4LjUtNC44NmExLDEsMCwwLDAsLjUtLjg3VjE3LjI5bC05LDUuMTVaIi8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIZWxpeD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODgsMTMuMDdhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDEsMSwxLDEuNTJMOS4zNywxMi45MkEuOS45LDAsMCwxLDguODgsMTMuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTEzLjI1LDE1LjExYS45LjksMCwwLDEtLjQ5LTEuNjZMMTgsMTAuMDhhLjkuOSwwLDEsMSwxLDEuNTJMMTMuNzQsMTVBLjkuOSwwLDAsMSwxMy4yNSwxNS4xMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTkuNzIsMzAuMjNhLjkuOSwwLDAsMS0uNDktMS42Nmw4LjkzLTUuNzNhLjkuOSwwLDAsMSwxLDEuNTJMMjAuMiwzMC4wOUEuOS45LDAsMCwxLDE5LjcyLDMwLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOC45MiwyNS45NGEuOS45LDAsMCwxLS40OS0xLjY2bDUuMjUtMy4zN2EuOS45LDAsMSwxLDEsMS41MUwxOS40LDI1LjhBLjg5Ljg5LDAsMCwxLDE4LjkyLDI1Ljk0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMS41Niw1LjY5YTMuNTksMy41OSwwLDAsMSwuMTUsMy41M0wxOC44MywxNWgyLjI1bDIuNDMtNC44N2E1LjYxLDUuNjEsMCwwLDAtNS04LjE0SDEzLjI2bC0xLDJoNi4yMkEzLjYxLDMuNjEsMCwwLDEsMjEuNTYsNS42OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuOTEsMjAuNzhBNS41Myw1LjUzLDAsMCwwLDI3LjY2LDE3SDkuMzFhMy41NCwzLjU0LDAsMCwxLTMuNTYtMy42NywzLjYxLDMuNjEsMCwwLDEsLjQyLTEuNTRsNC4yNi04LjQ5YTEsMSww''@;'; put 'put ''LDEsMC0xLjc5LS45TDQuNCwxMC44NEE1LjY3LDUuNjcsMCwwLDAsNCwxNS4yMiw1LjUzLDUuNTMsMCwwLDAsOS4yOCwxOWg3LjZsLTMuNDQsNi44N2E1LjY0LDUuNjQsMCwwLDAsMS41LDYuOTJBNS4zOCw1LjM4LDAsMCwwLDE4LjQxLDM0aDUuMjVsMS0ySDE4LjQzYTMuNTgsMy41OCwwLDAs''@;'; put 'put ''MS0zLjIyLTUuMjFMMTkuMTEsMTloOC41NGEzLjQyLDMuNDIsMCwwLDEsMi4xNS43MSwzLjU3LDMuNTcsMCwwLDEsMSw0LjQzbC00LjEyLDguMjJhMSwxLDAsMSwwLDEuNzkuOWw0LjA2LTguMUE1LjY3LDUuNjcsMCwwLDAsMzIuOTEsMjAuNzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMTYsMTkuNjNBNS41NSw1LjU1LDAsMCwwLDI3LjQyLDE3SDEwLjA2YTQuMzYsNC4zNiwwLDAsMS0zLjY3LTIsNC4wNyw0LjA3LDAsMCwxLS4xOS00LjEzbDMuNjItNywxLjQyLDEuNjMtMi43NCw1LjMsOC44NC01LjY2''@;'; put 'put ''YS45MS45MSwwLDAsMSwxLDEuNTNMNy44NCwxMy4zOGEyLjEzLDIuMTMsMCwwLDAsLjI0LjUyLDIuMjgsMi4yOCwwLDAsMCwxLjY1LDFMMTguMTEsOS41YS45MS45MSwwLDAsMSwxLDEuNTJMMTMsMTQuOTRIMjAuOGwyLjQxLTQuODJhNS42LDUuNiwwLDAsMC01LTguMTJIOWExLDEsMCwwLDAt''@;'; put 'put ''LjkuNTZMMy44OCwxMC44OWE1LjYsNS42LDAsMCwwLDUsOC4xMmg3LjY1bC0zLjQzLDYuODdhNS42LDUuNiwwLDAsMCw1LDguMTJoOS4yOGExLDEsMCwwLDAsLjkzLS42NWw0LjE0LTguMjRBNS41OCw1LjU4LDAsMCwwLDMyLjE2LDE5LjYzWk0xNy43NSwyNS41N0EuOTEuOTEsMCwwLDEsMTgs''@;'; put 'put ''MjQuMzFsNi0zLjg4QS45MS45MSwwLDEsMSwyNSwyMmwtNiwzLjg4YS45MS45MSwwLDAsMS0xLjI2LS4yN1pNMjksMjQuMzRsLTksNS43OGEuOTEuOTEsMCwxLDEtMS0xLjUzbDktNS43OGEuOTEuOTEsMCwxLDEsMSwxLjUzWiIvPlxuICAgICAgICAnKSxGLkNsclNoYXBlRmxhc2s9KDAsbS5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQzLDI3LjI4LDIzLDE0Ljg0VjRoMWExLDEsMCwwLDAsMC0ySDEyYTEsMSwwLDAsMCwwLDJoMVYxNC44NEw0LjUxLDI3LjM2QTQuMjksNC4yOSwwLDAsMCw1LDMyLjgsNC4zOCw0LjM4LDAsMCwwLDguMTUsMzRIMjhhNC4yNCw0LjI0LDAsMCwwLDMu''@;'; put 'put ''NDItNi43MlpNMjkuODUsMzFhMi42MiwyLjYyLDAsMCwxLTIsMUg4YTIuMiwyLjIsMCwwLDEtMi4wNi0xLjQxLDIuNjgsMi42OCwwLDAsMSwuMjktMi4xN2wzLTQuNDQsMTQsMC0xLjMxLTJIMTAuNTdMMTUsMTUuNDZWNGg2VjE1LjQ2bDguODQsMTMuMDVBMi4yMywyLjIzLDAsMCwxLDI5Ljg1''@;'; put 'put ''LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNDksMjcuNCwyMywxNC45NFY0aDFhMSwxLDAsMCwwLDAtMkgxMi4wOGExLDEsMCwwLDAsMCwySDEzVjE0Ljk0TDQuNTgsMjcuMzFhNC4zMSw0LjMxLDAs''@;'; put 'put ''MCwwLS43OCwzQTQuMjMsNC4yMywwLDAsMCw4LDM0SDI3Ljg2QTQuMzYsNC4zNiwwLDAsMCwzMSwzMi44LDQuMjMsNC4yMywwLDAsMCwzMS40OSwyNy40Wk0xNSwxNS40OVY0aDZWMTUuNDlMMjYuMTUsMjNIOS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLEYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42OCwxNC44MWE2Ljc2LDYuNzYsMCwxLDEsNi43Ni02Ljc1QTYuNzcsNi43NywwLDAsMSwxNC42OCwxNC44MVptMC0xMS41MWE0Ljc2LDQuNzYsMCwxLDAsNC43Niw0Ljc2''@;'; put 'put ''QTQuNzYsNC43NiwwLDAsMCwxNC42OCwzLjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40MiwzMS42OEEyLjE0LDIuMTQsMCwwLDEsMTUuOCwzMEg0VjI0LjIyYTE0LjgxLDE0LjgxLDAsMCwxLDExLjA5''@;'; put 'put ''LTQuNjhsLjcyLDBhMi4yLDIuMiwwLDAsMSwuNjItMS44NWwuMTItLjExYy0uNDcsMC0xLS4wNi0xLjQ2LS4wNkExNi40NywxNi40NywwLDAsMCwyLjIsMjMuMjZhMSwxLDAsMCwwLS4yLjZWMzBhMiwyLDAsMCwwLDIsMkgxNi43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODcsMTYuMjlhLjM3LjM3LDAsMCwxLC4xNSwwLC40Mi40MiwwLDAsMC0uMTUsMFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwy''@;'; put 'put ''My4zMmwtMi0uNjFhNy4yMSw3LjIxLDAsMCwwLS41OC0xLjQxbDEtMS44NkEuMzguMzgsMCwwLDAsMzIsMTlsLTEuNDUtMS40NWEuMzYuMzYsMCwwLDAtLjQ0LS4wN2wtMS44NCwxYTcuMTUsNy4xNSwwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM2LjM2LDAsMCwwLS4zNi0uMjRIMjMuODJhLjM2''@;'; put 'put ''LjM2LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNmwtMS44Mi0xYS4zNS4zNSwwLDAsMC0uNDMuMDdMMTcuNjksMTlhLjM4LjM4LDAsMCwwLS4wNi40NGwxLDEuODJBNi43Nyw2Ljc3LDAsMCwwLDE4LDIyLjY5bC0yLC42YS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNUEuMzUu''@;'; put 'put ''MzUsMCwwLDAsMTYsMjZsMiwuNjFhNyw3LDAsMCwwLC42LDEuNDFsLTEsMS45MWEuMzYuMzYsMCwwLDAsLjA2LjQzbDEuNDUsMS40NWEuMzguMzgsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA5LDcuMDksMCwwLDAsMS40LjU3bC42LDJhLjM4LjM4LDAsMCwwLC4zNS4yNmgyLjA1YS4zNy4zNyww''@;'; put 'put ''LDAsMCwuMzUtLjI2bC42MS0yLjA1YTYuOTIsNi45MiwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM2LjM2LDAsMCwwLC40My0uMDdMMzIsMzAuNEEuMzUuMzUsMCwwLDAsMzIsMzBsLTEtMS44OGE3LDcsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM2LjM2LDAsMCwwLC4yNi0uMzVWMjMuNjdBLjM2''@;'; put 'put ''LjM2LDAsMCwwLDMzLjY4LDIzLjMyWk0yNC44NSwyOGEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjMzQTMuMzQsMy4zNCwwLDAsMSwyNC44NSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTQuNjciIGN5''@;'; put 'put ''PSI4LjMiIHI9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuNDQsMzEuODJhMi4xNSwyLjE1LDAsMCwxLS4zOC0yLjU1bC41My0xLTEuMDktLjMzQTIuMTQsMi4xNCwwLDAsMSwxNCwyNS44NFYyMy43OWEyLjE2''@;'; put 'put ''LDIuMTYsMCwwLDEsMS41My0yLjA3bDEuMDktLjMzLS41Mi0xYTIuMTcsMi4xNywwLDAsMSwuMzUtMi41MiwxOC45MiwxOC45MiwwLDAsMC0yLjMyLS4xNkExNS41OCwxNS41OCwwLDAsMCwyLDIzLjA3djcuNzVhMSwxLDAsMCwwLDEsMUgxNi40NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNywyMy40NmwtMi0uNmE2LjczLDYuNzMsMCwwLDAtLjU4LTEuNDJsMS0xLjg2YS4zNS4zNSwwLDAsMC0uMDctLjQzbC0xLjQ1LTEuNDZhLjM4LjM4LDAsMCwwLS40My0uMDdsLTEuODUsMWE3Ljc0LDcuNzQsMCww''@;'; put 'put ''LDAtMS40My0uNmwtLjYxLTJhLjM4LjM4LDAsMCwwLS4zNi0uMjVIMjMuODRhLjM4LjM4LDAsMCwwLS4zNS4yNmwtLjYsMmE2Ljg1LDYuODUsMCwwLDAtMS40NS42MWwtMS44MS0xYS4zOC4zOCwwLDAsMC0uNDQuMDZsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MkE3LjI0''@;'; put 'put ''LDcuMjQsMCwwLDAsMTgsMjIuODNsLTIsLjYxYS4zNi4zNiwwLDAsMC0uMjYuMzV2Mi4wNWEuMzYuMzYsMCwwLDAsLjI2LjM1bDIsLjYxYTcuMjksNy4yOSwwLDAsMCwuNiwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LjE2LDMyYS4zOC4zOCwwLDAsMCwuNDQuMDZsMS44Ny0x''@;'; put 'put ''YTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMi4wNWEuMzguMzgsMCwwLDAsLjM2LjI2aDIuMDVhLjM4LjM4LDAsMCwwLC4zNS0uMjZsLjYtMi4wNWE2LjY4LDYuNjgsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zOC4zOCwwLDAsMCwuNDQtLjA2TDMyLDMwLjU1YS4zOC4zOCwwLDAsMCwuMDYt''@;'; put 'put ''LjQ0bC0xLTEuODhhNi45Miw2LjkyLDAsMCwwLC41Ny0xLjM4bDItLjYxYS4zOS4zOSwwLDAsMCwuMjctLjM1VjIzLjgyQS40LjQsMCwwLDAsMzMuNywyMy40NlptLTguODMsNC43MmEzLjM0LDMuMzQsMCwxLDEsMy4zMy0zLjM0QTMuMzQsMy4zNCwwLDAsMSwyNC44NywyOC4xOFoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICcpLEYuQ2xyU2hhcGVIYXJkRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDhhMiwyLDAsMCwwLTItMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''Wk0zMiwyOEg0VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjYuMjEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyOS44MSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS44OCwxOC4wOGEzLjU5''@;'; put 'put ''LDMuNTksMCwxLDAsMy41OS0zLjU5LDMuODQsMy44NCwwLDAsMC0uOTEuMTNMMTUsMTYuMTZhMi4wOCwyLjA4LDAsMCwxLC41LS4wNywyLDIsMCwxLDEtMiwyLDEuNjQsMS42NCwwLDAsMSwuMDgtLjVMMTIsMTcuMTZBMy41MywzLjUzLDAsMCwwLDExLjg4LDE4LjA4WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNDcsMjUuNzNhNy42Niw3LjY2LDAsMCwxLTcuNjUtNy42NSw3LjU1LDcuNTUsMCwwLDEsLjI3LTJMNi41NCwxNS43YTkuMjQsOS4yNCwwLDAsMCwxNy44LDQuOTVIMjIuNjZBNy42NCw3''@;'; put 'put ''LjY0LDAsMCwxLDE1LjQ3LDI1LjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjIsMTcuODNhLjguOCwwLDAsMC0uOC0uOEgyNC42NmE5LjI2LDkuMjYsMCwwLDAtOS4xOS04LjIsOS4zNiw5LjM2LDAs''@;'; put 'put ''MCwwLTIuMzguMzJsLjQyLDEuNTRhNy44Niw3Ljg2LDAsMCwxLDItLjI2QTcuNjYsNy42NiwwLDAsMSwyMywxN0gyMC45MmEuOC44LDAsMCwwLDAsMS42aDYuNUEuOC44LDAsMCwwLDI4LjIyLDE3LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEyLDE3LjE2bDEuNTQuNDJhMS42NCwxLjY0LDAsMCwwLS4wOC41LDIsMiwwLDEsMCwyLTIsMi4wOCwyLjA4LDAsMCwwLS41''@;'; put 'put ''LjA3bC0uNDEtMS41NGEzLjg0LDMuODQsMCwwLDEsLjkxLS4xMywzLjU5LDMuNTksMCwxLDEtMy41OSwzLjU5QTMuNTMsMy41MywwLDAsMSwxMiwxNy4xNlpNNS4zMSw4QTEuMjUsMS4yNSwwLDEsMSw0LjA2LDkuMjUsMS4yNSwxLjI1LDAsMCwxLDUuMzEsOFptMCwyMC4wNmExLjI1LDEuMjUs''@;'; put 'put ''MCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSw1LjMxLDI4LjA2Wm0xMC4xNi0uNzNBOS4yMiw5LjIyLDAsMCwxLDYuNTQsMTUuN2wxLjU1LjQxYTcuNTUsNy41NSwwLDAsMC0uMjcsMiw3LjY0LDcuNjQsMCwwLDAsMTQuODQsMi41N2gxLjY4QTkuMjUsOS4yNSwwLDAsMSwxNS40Nywy''@;'; put 'put ''Ny4zM1ptMTItOC43aC02LjVhLjguOCwwLDAsMSwwLTEuNkgyM2E3LjY2LDcuNjYsMCwwLDAtNy41Ny02LjYsNy44Niw3Ljg2LDAsMCwwLTIsLjI2bC0uNDItMS41NGE5LjM2LDkuMzYsMCwwLDEsMi4zOC0uMzJBOS4yNiw5LjI2LDAsMCwxLDI0LjY2LDE3aDIuNzZhLjguOCwwLDAsMSwwLDEu''@;'; put 'put ''NlptMy4zOSw5LjQzYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDI4LjA2Wm0wLTE3LjU2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjgxLDEwLjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlSGFyZERyaXZlRGlza3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDUuNzRBMS43NCwxLjc0LDAsMCwwLDI0LjI2LDRIMy43NEExLjc0LDEuNzQsMCwwLDAsMiw1Ljc0VjIwLjI2QTEuNzQsMS43NCwwLDAsMCwzLjc0LDIySDRW''@;'; put 'put ''NkgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2''@;'; put 'put ''SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yNiwxMkgxMS43NEExLjc0LDEuNzQsMCwwLDAsMTAsMTMuNzRWMjguMjZBMS43NCwxLjc0LDAsMCwwLDExLjc0LDMwSDMyLjI2QTEuNzQsMS43''@;'; put 'put ''NCwwLDAsMCwzNCwyOC4yNlYxMy43NEExLjc0LDEuNzQsMCwwLDAsMzIuMjYsMTJaTTMyLDI4SDEyVjE0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuOTQsMjMuNjhhMi42NCwyLjY0LDAsMSwwLTIu''@;'; put 'put ''Ny0yLjYzQTIuNjcsMi42NywwLDAsMCwxOS45NCwyMy42OFptMC0zLjg3YTEuMjQsMS4yNCwwLDEsMS0xLjI5LDEuMjRBMS4yNywxLjI3LDAsMCwxLDE5Ljk0LDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTkuOTQsMTYuMjJhNC45Myw0LjkzLDAsMCwxLDQuOTUsNC4zNUgyMy43MVYyMmg0LjQxYS43LjcsMCwwLDAsMC0xLjRIMjYuMzFhNi4zMyw2LjMzLDAsMCwwLTYuMzctNS43NSw2LjU4LDYuNTgsMCwwLDAtMS40OC4xN2wuMzUsMS4zN0E0LjczLDQuNzMsMCwwLDEsMTkuOTQsMTYuMjJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyNy4yN2E2LjQyLDYuNDIsMCwwLDAsNS42Ny0zLjM1SDIzLjkzYTUsNSwwLDAsMS00LDEuOTUsNC45MSw0LjkxLDAsMCwxLTUtNC44Miw1LjE2LDUuMTYs''@;'; put 'put ''MCwwLDEsLjA4LS43OUwxMy42MywyMGE3LDcsMCwwLDAtLjA5LDFBNi4zMiw2LjMyLDAsMCwwLDE5Ljk0LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQu''@;'; put 'put ''MjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCw5Ljc0QTEuNzQsMS43NCwwLDAsMCwyOC4y''@;'; put 'put ''Niw4SDcuNzRBMS43NCwxLjc0LDAsMCwwLDYsOS43NFYyNC4yNkExLjc0LDEuNzQsMCwwLDAsNy43NCwyNkg4VjEwSDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MiwyMi42QTEuNTUsMS41NSwwLDEsMCwx''@;'; put 'put ''OCwyMS4wNSwxLjYsMS42LDAsMCwwLDE5LjYyLDIyLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEu''@;'; put 'put ''NzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMTkuNjIsMTcuNzRhMy4zMSwzLjMxLDAsMSwxLTMuMzgsMy4zMUEzLjM1LDMuMzUsMCwwLDEsMTkuNjIsMTcuNzRabTAsMTEuMTNhNy45NCw3Ljk0LDAsMCwxLTgtNy44''@;'; put 'put ''Miw3LjgzLDcuODMsMCwwLDEsLjExLTEuMjlsMS43NS4zYTUuMzYsNS4zNiwwLDAsMC0uMTEsMSw2LjE4LDYuMTgsMCwwLDAsNi4yOCw2LjA2LDYuMzUsNi4zNSwwLDAsMCw1LTIuNDZoMi4xQTguMDYsOC4wNiwwLDAsMSwxOS42MiwyOC44N1pNMjkuODksMjIuMkgyNC4zNlYyMC40NGgxLjQ4''@;'; put 'put ''QTYuMTksNi4xOSwwLDAsMCwxOS42MiwxNWE2LjQ4LDYuNDgsMCwwLDAtMS40MS4xNmwtLjQ1LTEuN2E4LjE2LDguMTYsMCwwLDEsMS44Ni0uMjIsOCw4LDAsMCwxLDgsNy4yMWgyLjI2YS44OC44OCwwLDAsMSwwLDEuNzZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlTlZNZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjJWMTRhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkgyNUEyLDIsMCwwLDAsMjcsMjJaTTExLDE0SDI1djhIMTFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI1LjAxIiB5PSI2''@;'; put 'put ''IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LjgsOEgxNi44N1Y2aC0xMUw3Ljc4LDQuMDhhMSwxLDAsMCwwLDAtMS40MiwxLDEsMCwwLDAtMS40MSwwTDIsNyw2LjM3''@;'; put 'put ''LDExLjRhMSwxLDAsMCwwLDEuNDEsMCwxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNjEsMjQuNjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQyTDMwLjEsMjhI''@;'; put 'put ''MTl2MkgzMC4ybC0yLDJhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsLjcuMjksMSwxLDAsMCwwLC43MS0uMjlMMzQsMjkuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSIyOCIgd2lkdGg9IjQi''@;'; put 'put ''IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSIyOCIgd2lkdGg9IjEuOTciIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLEYuQ2xyU2hhcGVTU0Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDE4LjYyYzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJzLS41MywxLjA5LTEuNTUsMS4wOWE0LDQsMCwwLDEt''@;'; put 'put ''Mi43MS0xLjExbC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MnMtMS4xNS0yLjA1LTIuODctMi40NGMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDEwLDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMUE0LjU4''@;'; put 'put ''LDQuNTgsMCwwLDAsMTAsMTMuNjljLTEuNzQsMC0zLDEuMDUtMywyLjQ5UzguMjYsMTguMjIsMTAsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44MywyMC45M2E0LDQsMCwwLDEtMi43MS0xLjEx''@;'; put 'put ''bC0uODYsMS4wNmE1LDUsMCwwLDAsMy41MiwxLjM0YzIsMCwzLjEtMSwzLjEtMi41MlMxOS43MywxNy42NSwxOCwxNy4yNmMtMS4zMS0uMy0xLjkyLS41NC0xLjkyLTEuMjFBMS4yNSwxLjI1LDAsMCwxLDE3LjQ4LDE1YTMuNjgsMy42OCwwLDAsMSwyLjM3LDFsLjgxLTEuMWE0LjU2LDQuNTYs''@;'; put 'put ''MCwwLDAtMy4xMi0xLjE1Yy0xLjczLDAtMywxLjA1LTMsMi40OXMxLjE5LDIsMi44OSwyLjQ0YzEuMzIuMzEsMS45MS41NCwxLjkxLDEuMjJTMTguODUsMjAuOTMsMTcuODMsMjAuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yOS45LDE4YzAtMi40MS0xLjkyLTQuMTItNC42NC00LjEyaC0yLjl2OC4yNGgyLjlDMjgsMjIuMDgsMjkuOSwyMC4zNywyOS45LDE4Wm0tNi0yLjc2aDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC04IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk01LjIxLDhBMS4yNSwxLjI1LDAsMSwxLDQsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4yMSw4Wm0w''@;'; put 'put ''LDIwYTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMjEsMjhabTUuMDYtNS43OGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIu''@;'; put 'put ''ODktLjg5LTIuODktMi40NHMxLjIyLTIuNDksMy0yLjQ5YTQuNTgsNC41OCwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFBMy42OCwzLjY4LDAsMCwwLDEwLDE1YTEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRT''@;'; put 'put ''MTIuMjQsMjIuMjIsMTAuMjcsMjIuMjJabTcuNTEsMGE1LDUsMCwwLDEtMy41Mi0xLjM0bC44Ni0xLjA2YTQsNCwwLDAsMCwyLjcxLDEuMTFjMSwwLDEuNTUtLjUsMS41NS0xLjA5cy0uNTktLjkxLTEuOTEtMS4yMmMtMS43LS40LTIuODktLjg5LTIuODktMi40NHMxLjIzLTIuNDksMy0yLjQ5''@;'; put 'put ''YTQuNTYsNC41NiwwLDAsMSwzLjEyLDEuMTVsLS44MSwxLjFhMy42OCwzLjY4LDAsMCwwLTIuMzctMSwxLjI1LDEuMjUsMCwwLDAtMS4zOSwxLjA4YzAsLjY3LjYxLjkxLDEuOTIsMS4yMSwxLjcyLjM5LDIuODcuOTQsMi44NywyLjQ0UzE5Ljc1LDIyLjIyLDE3Ljc4LDIyLjIyWm00LjU4LS4x''@;'; put 'put ''NFYxMy44NGgyLjljMi43MiwwLDQuNjQsMS43MSw0LjY0LDQuMTJTMjgsMjIuMDgsMjUuMjYsMjIuMDhaTTMwLjY5LDI4YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDMwLjY5LDI4Wm0wLTE3LjVhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs''@;'; put 'put ''MCwwLDEsMzAuNjksMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMTUuMmgxLjU2YTIuNzcsMi43NywwLDEsMSwwLDUuNTNIMjMuODZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAnKSxGLkNsclNoYXBlQmx1ZXRvb3RoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi42NCwyNS4yNywxOSwxNy41MywxOSwzLDI1LjIxLDkuNGwtNS42NSw1Ljc5TDIxLDE2LjYybDUuNjgtNS44MmEyLDIsMCwwLDAsMC0yLjc4TDIwLjQ4LDEuN0EyLjA4''@;'; put 'put ''LDIuMDgsMCwwLDAsMTguODUsMSwyLDIsMCwwLDAsMTcsM1YxNS4zOEwxMC4wNSw4LjI3QTEsMSwwLDAsMCw4LjYyLDkuNjZMMTYuNzksMTgsOS4wNiwyNmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzM2EyLjA3LDIuMDcsMCww''@;'; put 'put ''LDAsLjcxLDEuNjJBMiwyLDAsMCwwLDE5LDM1YTEuOTQsMS45NCwwLDAsMCwxLjQyLS42bDYuMjMtNi4zOEEyLDIsMCwwLDAsMjYuNjQsMjUuMjdaTTE5LDMzLjA1VjIwLjI5bDYuMjEsNi4zNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMjYuNTIsMjQuNTJsLTUuNjUtNS44My0xLjQ2LTEuNXYtMTJMMjMuNzksOS43bC0zLjYsMy43MSwyLjI0LDIuMjksNC4wOS00LjIyYTIuNTQsMi41NCwwLDAsMCwwLTMuNTZMMjAuNTcsMS43OEEyLjU0LDIuNTQsMCwwLDAsMTYuMiwzLjU1VjEzLjg2bC01LjUzLTUuN2ExLjYsMS42''@;'; put 'put ''LDAsMSwwLTIuMywyLjIzTDE1Ljc1LDE4bC03LDcuMTlhMS42LDEuNiwwLDAsMCwwLDIuMjYsMS42MywxLjYzLDAsMCwwLDEuMTIuNDUsMS41OCwxLjU4LDAsMCwwLDEuMTUtLjQ5bDUuMTEtNS4yN1YzMi40NWEyLjUzLDIuNTMsMCwwLDAsMS41OSwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUu''@;'; put 'put ''MTksMi41NiwyLjU2LDAsMCwwLDEuODMtLjc3bDUuOTUtNi4xNUEyLjU0LDIuNTQsMCwwLDAsMjYuNTIsMjQuNTJaTTE5LjQsMzAuODNWMjEuNzdsNC4zOSw0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPSgw''@;'; put 'put ''LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwzLDI1LjIyLDkuNGwtNS42Niw1LjhMMjEsMTYuNjNsNS42OC01LjgzYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIsMiwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzdjExLjRsMiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuNzcsNSwzLjM2LDYuNDIsMTUuODksMTksOS4wNiwyNmExLDEsMCwwLDAsLjcxLDEuNywxLDEsMCwwLDAsLjcyLS4zMUwxNywyMC42OFYzMi45NGEyLjA4LDIuMDgsMCwwLDAsLjcxLDEuNjNBMiwyLDAsMCwwLDE5LDM1YTIsMiwwLDAs''@;'; put 'put ''MCwxLjQyLS42bDUuNDEtNS41NCwzLjU0LDMuNTNMMzAuNzcsMzFaTTE5LDMzLjA1di0xMWw1LjQxLDUuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzEsNS4xNywyMy43LDkuN2wtMy41OSwzLjcxLDIuMjQsMi4yOSw0LjA5''@;'; put 'put ''LTQuMjJhMi41NiwyLjU2LDAsMCwwLDAtMy41NmwtNi02LjE0YTIuNTEsMi41MSwwLDAsMC0yLjc3LS41OSwyLjU0LDIuNTQsMCwwLDAtMS42LDIuMzZ2MTBsMy4yMSwzLjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC41LDUsMy4wOSw2''@;'; put 'put ''LjQyLDE1LjE3LDE4LjUxLDguNywyNS4xOUExLjYsMS42LDAsMCwwLDkuODUsMjcuOSwxLjU3LDEuNTcsMCwwLDAsMTEsMjcuNDFsNS4xMS01LjI3VjMyLjQ1YTIuNTQsMi41NCwwLDAsMCwxLjYsMi4zNiwyLjQ0LDIuNDQsMCwwLDAsLjk1LjE5LDIuNTUsMi41NSwwLDAsMCwxLjgyLS43N2w1''@;'; put 'put ''LjEyLTUuMjksMy40OSwzLjQ4TDMwLjUsMzFaTTE5LjgxLDMwLjgzVjIyLjY1bDQsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVByb2Nlc3NPblZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40OSwyNi4yOGExLDEsMCww''@;'; put 'put ''LDAtMS4yLS43bC0yLjQ5LjY3YTE0LjIzLDE0LjIzLDAsMCwwLDIuNC02Ljc1QTE0LjQ4LDE0LjQ4LDAsMCwwLDI3LjM3LDcuMzUsMSwxLDAsMCwwLDI2LDcuNDRhMSwxLDAsMCwwLC4wOSwxLjQxLDEyLjQ1LDEyLjQ1LDAsMCwxLDQuMTYsMTAuNDYsMTIuMTksMTIuMTksMCwwLDEtMiw1Ljc0''@;'; put 'put ''TDI4LDIyLjU0YTEsMSwwLDEsMC0xLjk1LjE2bC41LDYuNDQsNi4yNS0xLjY2QTEsMSwwLDAsMCwzMy40OSwyNi4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjMxLDE3LjA4YTEuMDYsMS4wNiwwLDAsMCwuNDQuMTYsMSwxLDAs''@;'; put 'put ''MCwwLDEuMTItLjg1QTEyLjIxLDEyLjIxLDAsMCwxLDE4LjY5LDUuODRMMTYuNDUsNy4zN2ExLDEsMCwwLDAsLjQ3LDEuNzlBMSwxLDAsMCwwLDE3LjU2LDlsNS4zMy0zLjY2TDE4LjMzLjc2YTEsMSwwLDEsMC0xLjM5LDEuMzhsMS43LDEuN0ExNC4yLDE0LjIsMCwwLDAsMy44OSwxNi4xMiwx''@;'; put 'put ''LDEsMCwwLDAsNC4zMSwxNy4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43MywyOS45M2ExMiwxMiwwLDAsMS00Ljg0LjUxLDEyLjMsMTIuMywwLDAsMS05LjU3LTYuM2wyLjQ5LjkzYTEsMSwwLDAsMCwuNjktMS44NGwtNC41''@;'; put 'put ''OS0xLjdoMEw0LjQ0LDIxLDMuMzMsMjcuMzVhMSwxLDAsMCwwLC43OSwxLjEzbC4xNywwYTEsMSwwLDAsMCwxLS44MWwuNDItMi40YTE0LjMsMTQuMywwLDAsMCwxMSw3LjE0LDEzLjkxLDEzLjkxLDAsMCwwLDUuNjMtLjYsMSwxLDAsMCwwLS42LTEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxM0gxNGExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTRBMSwxLDAsMCwwLDIyLDEzWm0tMSw4SDE1VjE1aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NCIgLz4nKSxGLkNsclNoYXBlQXNzaWduVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNy40Niw3LjQ2LDAsMSwwLTcuNDUtNy40NkE3LjQ2LDcuNDYsMCwwLDAsMTgsMTdaTTE4LDQuMDdhNS40Niw1LjQ2LDAsMSwxLTUuNDUsNS40NUE1LjQ2LDUuNDYsMCwwLDEsMTgs''@;'; put 'put ''NC4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxLjg5VjI1Ljc3YTE2LjEzLDE2LjEzLDAsMCwxLDEyLTUsMTYuNjEsMTYuNjEsMCwwLDEsOC43MSwyLjMzbDEuMzUtMS41MUExOC41MywxOC41MywwLDAsMCwxOCwxOC43NCwx''@;'; put 'put ''Ny43LDE3LjcsMCwwLDAsNC4yMSwyNC44YTEsMSwwLDAsMC0uMjEuNnY2LjQ5QTIuMDYsMi4wNiwwLDAsMCw2LDM0SDE4LjM5bC0xLjktMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMS44OSwzMCwzMkgyNi44NWwtMS44LDJI''@;'; put 'put ''MzBhMi4wNiwyLjA2LDAsMCwwLDItMi4wN1YyNi4ybC0yLDIuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzQuNzYsMTguNjJhMSwxLDAsMCwwLTEuNDEuMDhsLTExLjYyLDEzLTUuMi01LjU5QTEsMSwwLDAsMCwxNS4xMiwyNmEx''@;'; put 'put ''LDEsMCwwLDAtLjA2LDEuNDJsNi42OSw3LjJMMzQuODQsMjBBMSwxLDAsMCwwLDM0Ljc2LDE4LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxMC4zNiIgcj0iNi44MSIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTIsMjYuNjVhMi44LDIuOCwwLDAsMSw0Ljg1LTEuOEwyMC43MSwyOWw2Ljg0LTcuNjNBMTYuODEsMTYuODEsMCwwLDAsMTgsMTguNTUsMTYuMTMsMTYuMTMsMCwwLDAsNS41LDI0YTEsMSwwLDAsMC0uMi42MVYzMGEyLDIsMCwwLDAsMS45''@;'; put 'put ''NCwyaDguNTdsLTMuMDctMy4zQTIuODEsMi44MSwwLDAsMSwxMiwyNi42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI4Ljc2LDMyYTIsMiwwLDAsMCwxLjk0LTJWMjYuMjRMMjUuNTcsMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy43NywxOC42MmExLDEsMCwwLDAtMS40Mi4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE0LjEyLDI2YTEsMSwwLDAsMCwwLDEuNDJsNi42OCw3LjJMMzMuODQsMjBBMSwxLDAsMCwwLDMzLjc3LDE4LjYyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQXRvbT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTQuMDVhNCw0LDAsMSwwLDQsNEE0LDQsMCwwLDAsMTgsMTQuMDVabTAsNi40NGEyLjQyLDIuNDIsMCwxLDEsMi40Mi0yLjQyQTIuNDIsMi40MiwwLDAs''@;'; put 'put ''MSwxOCwyMC40OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNC4yMywxMS43MWEzOS4xNCwzOS4xNCwwLDAsMC00LjU3LTMuOTIsMjIuODYsMjIuODYsMCwwLDEsMy40OC0xLjcyYy4zMi0uMTIuNjItLjIxLjkyLS4zYTIuMjgsMi4y''@;'; put 'put ''OCwwLDAsMCwzLjgxLS40NiwzLjMxLDMuMzEsMCwwLDEsMS45Mi44NGMxLjE5LDEuMTksMS4yMiwzLjU5LjEsNi41OC40OS42NS45NCwxLjMxLDEuMzUsMiwuMTctLjQuMzUtLjc5LjQ5LTEuMTgsMS40Ny0zLjg1LDEuMjgtNy0uNTMtOC43OGE1LjI5LDUuMjksMCwwLDAtMy4zMy0xLjQ0LDIu''@;'; put 'put ''MjksMi4yOSwwLDAsMC00LjMxLjU0Yy0uMzcuMTEtLjc0LjIyLTEuMTMuMzdhMjUuNzksMjUuNzksMCwwLDAtNC41NywyLjM1QTI2LjIxLDI2LjIxLDAsMCwwLDEzLjI4LDQuMmMtMy44NS0xLjQ2LTctMS4yOC04Ljc3LjUzQzIuODUsNi40LDIuNTgsOS4xNywzLjY4LDEyLjU5YTIuMjgsMi4y''@;'; put 'put ''OCwwLDAsMCwxLjU5LDMuNjdjLjMyLjYxLjY3LDEuMjIsMS4wNiwxLjgyQTI1LjU0LDI1LjU0LDAsMCwwLDQsMjIuNjZjLTEuNDcsMy44NC0xLjI4LDcsLjUzLDguNzdhNS42Myw1LjYzLDAsMCwwLDQuMTIsMS41MSwxMy4zNCwxMy4zNCwwLDAsMCw0LjY1LTEsMjYuMjEsMjYuMjEsMCwwLDAs''@;'; put 'put ''NC41OC0yLjM1QTI1Ljc5LDI1Ljc5LDAsMCwwLDIyLjQzLDMyYTE0LjE2LDE0LjE2LDAsMCwwLDMuNjUuOUEyLjMsMi4zLDAsMCwwLDMwLjQ2LDMyYTQuNTUsNC41NSwwLDAsMCwuNzQtLjU3YzEuODEtMS44MSwyLTQuOTMuNTMtOC43N0EzMi42OCwzMi42OCwwLDAsMCwyNC4yMywxMS43MVpN''@;'; put 'put ''MTIuNTcsMzAuMDljLTMsMS4xNS01LjQ1LDEuMTMtNi42NS0uMDhzLTEuMjMtMy42Mi0uMDctNi42NGEyMi43NywyMi43NywwLDAsMSwxLjcxLTMuNDgsNDAuMTksNDAuMTksMCwwLDAsMy45Miw0LjU2Yy40My40My44Ny44NSwxLjMxLDEuMjVxLjktLjQ2LDEuODMtMS4wNWMtLjU4LS41Mi0x''@;'; put 'put ''LjE2LTEtMS43Mi0xLjYxYTM0LDM0LDAsMCwxLTUuNzQtNy40N0EyLjI5LDIuMjksMCwwLDAsNS41LDExLjY5aDBjLS43NS0yLjUtLjYyLTQuNDkuNDMtNS41NGEzLjcyLDMuNzIsMCwwLDEsMi43Mi0uOTIsMTEuNCwxMS40LDAsMCwxLDMuOTMuODQsMjIuODYsMjIuODYsMCwwLDEsMy40OCwx''@;'; put 'put ''LjcyLDM5LjE0LDM5LjE0LDAsMCwwLTQuNTcsMy45MmMtLjQ0LjQ0LS44Ny45LTEuMjksMS4zNmEyMC4yNywyMC4yNywwLDAsMCwxLDEuODVjLjU0LS42MSwxLjA5LTEuMjEsMS42OC0xLjhhMzYuMzMsMzYuMzMsMCwwLDEsNS00LjE3LDM2Ljg4LDM2Ljg4LDAsMCwxLDQuOTUsNC4xNywzNi4y''@;'; put 'put ''NiwzNi4yNiwwLDAsMSw0LjE3LDUsMzcsMzcsMCwwLDEtNC4xNyw1QTMwLjY4LDMwLjY4LDAsMCwxLDEyLjU3LDMwLjA5Wk0yOS43OSwzMGwtLjE2LjEzYTIuMjcsMi4yNywwLDAsMC0zLjUuNzIsMTIuNTcsMTIuNTcsMCwwLDEtMy0uNzcsMjIsMjIsMCwwLDEtMy40OC0xLjcyLDM5LjE0LDM5''@;'; put 'put ''LjE0LDAsMCwwLDQuNTctMy45MiwzOC4yNiwzOC4yNiwwLDAsMCwzLjkyLTQuNTYsMjIuODgsMjIuODgsMCwwLDEsMS43MiwzLjQ4QzMxLDI2LjM5LDMxLDI4LjgxLDI5Ljc5LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LjIz''@;'; put 'put ''LDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1''@;'; put 'put ''Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVB''@;'; put 'put ''MjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40''@;'; put 'put ''NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCww''@;'; put 'put ''LDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAs''@;'; put 'put ''MCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIu''@;'; put 'put ''NS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCww''@;'; put 'put ''LDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5''@;'; put 'put ''Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMu''@;'; put 'put ''NDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE3Ljk5IiBjeT0iMTguMDciIHI9IjMuMyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIuNjYgMy4xMSkgcm90YXRlKC05LjIyKSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlQmFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw3QTEsMSwwLDAsMCw0LDhWMzBhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSw3QTEsMSwwLDAsMCw4LDhWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCw5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMTMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxNyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDIxLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyOSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTMzLDdhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDMzLDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz4nKSxGLkNsclNoYXBlQ2REdmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi4zMywxOGE0LjQ2LDQuNDYs''@;'; put 'put ''MCwxLDAtNC40NSw0LjQ2QTQuNDYsNC40NiwwLDAsMCwyMi4zMywxOFpNMTcuODgsMjAuOUEyLjg2LDIuODYsMCwxLDEsMjAuNzMsMTgsMi44NiwyLjg2LDAsMCwxLDE3Ljg4LDIwLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTcu''@;'; put 'put ''ODgsNy40M0gxOFY1Ljg0aC0uMTJBMTIuMjEsMTIuMjEsMCwwLDAsNS42OCwxNy43NWgxLjZBMTAuNjEsMTAuNjEsMCwwLDEsMTcuODgsNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4wOCwxOEgyOC40OXYwQTEwLjYxLDEw''@;'; put 'put ''LjYxLDAsMCwxLDE4LjI1LDI4LjYzdjEuNkExMi4yMiwxMi4yMiwwLDAsMCwzMC4wOSwxOFMzMC4wOCwxOCwzMC4wOCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxMVY5LjQ0aC0uMTJhOC42Miw4LjYyLDAsMCwwLTguNiw4''@;'; put 'put ''LjMyaDEuNmE3LDcsMCwwLDEsNy02LjcyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE4LjI1LDI1djEuNkE4LjYxLDguNjEsMCwwLDAsMjYuNDgsMTh2MGgtMS42djBBNyw3LDAsMCwxLDE4LjI1LDI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE4LjE3LDEuOTJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTguMTcsMS45MlpNMjYuMjMsMThoMS41NGE5LjYxLDkuNjEsMCwwLDEtOS42LDkuNTNIMThWMjZoLjE3QTguMDcsOC4wNywwLDAsMCwyNi4yMywx''@;'; put 'put ''OFpNNi4wNSwxOEg0LjQ1di0uMDhBMTMuNzIsMTMuNzIsMCwwLDEsMTgsNC4yMXYxLjZBMTIuMTMsMTIuMTMsMCwwLDAsNi4wNSwxNy45MlptNC4wNSwwSDguNTZ2LS4wOEE5LjYxLDkuNjEsMCwwLDEsMTgsOC4zMlY5Ljg2YTguMDcsOC4wNywwLDAsMC03LjksOC4wNlptNC4zMi0uMDhhMy43''@;'; put 'put ''NSwzLjc1LDAsMSwxLDMuNzUsMy43NUEzLjc1LDMuNzUsMCwwLDEsMTQuNDIsMTcuOTJabTMuNzUsMTMuNzFIMThWMzBoLjE3QTEyLjEzLDEyLjEzLDAsMCwwLDMwLjI4LDE4aDEuNkExMy43MywxMy43MywwLDAsMSwxOC4xNywzMS42M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksRi5DbHJTaGFwZUNvbnRhaW5lcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjI4QTIsMiwwLDAsMSwzMiwzMFpNNCw4VjI4SDMyVjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSw5LDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJN''@;'; put 'put ''MTQuOTIsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMTQuOTIsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMSwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44Ljgs''@;'; put 'put ''MCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwyMSwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI3LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDI3LDI1LjNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTkuNjMsMjQuMjNhLjc5Ljc5LDAsMCwxLS44MS43N0EuNzkuNzksMCww''@;'; put 'put ''LDEsOCwyNC4yM1YxMS43N0EuNzkuNzksMCwwLDEsOC44MiwxMWEuNzkuNzksMCwwLDEsLjgxLjc3Wm02LDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4yMSwwYS43OS43OSww''@;'; put 'put ''LDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdabTYuMTIsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDE3LjU4YTMyLjM1LDMyLjM1LDAsMCwwLDYuMy45Miw0LjEzLDQuMTMsMCwwLDEsLjkyLTEuMzcs''@;'; put 'put ''MzAuOTQsMzAuOTQsMCwwLDEtNy4yMi0xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjhWOC4xOWMuMzQtLjc2LDQuMzEtMi4xMSwxMS0yLjExczEwLjY3LDEuMzUsMTEsMnYuM2MtLjgyLjc5LTQuNTgsMi4wNS0xMS4xMSwyLjA1''@;'; put 'put ''QTMzLjQ4LDMzLjQ4LDAsMCwxLDgsOS40NHYxLjQ0YTM1LjYsMzUuNiwwLDAsMCw4Ljg5LDFjNC4yOSwwLDguOC0uNTgsMTEuMTEtMS44MnY1LjA3YTUuMyw1LjMsMCwwLDEtMS44MS44OEgzMFY4LjEyYzAtMy4xOS04LjE3LTQtMTMtNHMtMTMsLjg1LTEzLDRWMjhDNCwzMC42Myw5LjM5LDMx''@;'; put 'put ''LjY4LDE0LDMyVjMwQzkuMTMsMjkuNjYsNi4yOCwyOC42Miw2LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTgsMjQuMjhhMzEuMywzMS4zLDAsMCwwLDYsLjg5di0xLjRhMjguOTMsMjguOTMsMCwwLDEtNi0uOTNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwzMlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yMSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwwLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDIxLDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjUsMjEu''@;'; put 'put ''ODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAtLjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40''@;'; put 'put ''LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzIsMThIMThhMiwyLDAsMCwwLTIsMlYzMmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjBBMiwyLDAsMCwwLDMyLDE4Wk0xOCwz''@;'; put 'put ''MlYyMEgzMlYzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LDIxLjgyYS43LjcsMCwwLDAtLjcuN1YzMGEuNy43LDAsMSwwLDEuNCwwVjIyLjUyQS43LjcsMCwwLDAsMjUsMjEuODJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOSwyMS43YS43LjcsMCwwLDAt''@;'; put 'put ''LjcuN3Y3LjQ5YS43LjcsMCwxLDAsMS40LDBWMjIuNEEuNy43LDAsMCwwLDI5LDIxLjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0xOCwxNkgyOFY4LjEyYzAtMS42OC01LjM4LTMtMTItM1M0LDYuNDQsNCw4LjEyVjI4YzAsMS41LDQuMzMs''@;'; put 'put ''Mi43NSwxMCwzVjI1LjIyYTI5LjE3LDI5LjE3LDAsMCwxLTgtMS4yOVYyMi40NGwuMjQuMUEyNi42MywyNi42MywwLDAsMCwxNCwyMy44MlYyMGE0LDQsMCwwLDEsLjI5LTEuNDdBMjkuMTksMjkuMTksMCwwLDEsNiwxNy4yM1YxNS43NWwuMjQuMDlhMjksMjksMCwwLDAsOSwxLjMyaDBBNCw0''@;'; put 'put ''LDAsMCwxLDE4LDE2Wk02LDEwLjU0VjkuMDVsLjI0LjA5QTMwLjEyLDMwLjEyLDAsMCwwLDE2LDEwLjQ3LDI4LjMzLDI4LjMzLDAsMCwwLDI2LDkuMDV2MS41YTMyLjUzLDMyLjUzLDAsMCwxLTEwLDEuMzJBMzIuNDQsMzIuNDQsMCwwLDEsNiwxMC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTUiIC8+JyksRi5DbHJTaGFwZUZpbGVTaGFyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOTEsMjIuNDhhMi4wNiwyLjA2LDAs''@;'; put 'put ''MCwwLTEuNDQuNjJsLTUuNzItMi42NlYyMGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0LDIuMTIsMi4xMiwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVsLjA4LS4wOCw1LjY3LDIuNjZ2LjNhMi4wOSwyLjA5LDAsMSwwLDIu''@;'; put 'put ''MDgtMi4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAs''@;'; put 'put ''MCwzMCw5Wk02LDdoNi40OWwyLjcyLDRINlpNMjEuOTQsMjYuNjRhMi4wOSwyLjA5LDAsMCwxLTIuMTEtMi4wNmwwLS4zLTUuNjctMi42Ni0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMDgsMi4wOCwwLDEsMSwuNTgsMS40NkwxNC43NSwyMHYuNDds''@;'; put 'put ''NS43MiwyLjY2YTIuMDcsMi4wNywwLDEsMSwxLjQ3LDMuNTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVRckNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUuNiw0QTEuNiwxLjYsMCwwLDAsNCw1LjZWMTJoOFY0Wk0xMCwx''@;'; put 'put ''MEg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDMwLjRBMS42LDEuNiwwLDAsMCw1LjYsMzJIMTJWMjRINFpNNiwyNmg0djRINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yNCwzMmg2LjRBMS42LDEuNiwwLDAsMCwzMiwzMC40VjI0SDI0Wm0yLTZoNHY0SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQsNEgyNHY4aDhWNS42QTEuNiwxLjYsMCwwLDAsMzAuNCw0Wk0zMCwxMEgyNlY2aDRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwIDEwIDIwIDggMTYgOCAxNiAxMiAxOCAxMiAxOCAxMCAyMCAxMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTIiIHk9''@;'; put 'put ''IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgNiAyMCA4IDIyIDggMjIgNCAxNCA0IDE0IDggMTYgOCAxNiA2IDIwIDYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxyZWN0IHg9IjQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSI0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtOSIgLz48cG9seWdvbiBwb2ludHM9IjEyIDE2IDEyIDE4IDEwIDE4IDEwIDE0IDggMTQgOCAxOCA2IDE4IDYgMjAgNCAyMCA0IDIyIDggMjIgOCAyMCAxMCAyMCAxMCAyMiAxMiAyMiAxMiAyMCAxNCAyMCAxNCAxNiAxMiAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEwIiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTYgMjIgMTYgMjIgMTggMjQgMTggMjQgMTYgMjYgMTYgMjYgMTQgMjIgMTQgMjIgMTAgMjAgMTAgMjAgMTIgMTggMTIgMTggMTQgMjAgMTQgMjAgMTYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xMSIgLz48cG9seWdvbiBwb2ludHM9IjE4IDMwIDE0IDMwIDE0IDMyIDIyIDMyIDIyIDMwIDIwIDMwIDIwIDI4IDE4IDI4IDE4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMiAyMCAyMiAxOCAyMCAx''@;'; put 'put ''OCAyMCAxNiAxOCAxNiAxOCAxOCAxNiAxOCAxNiAyMCAxOCAyMCAxOCAyMiAyMCAyMiAyMCAyMCAyMiAyMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiAvPjxyZWN0IHg9IjMwIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE0IiAvPjxyZWN0IHg9IjIyIiB5PSIyMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiAvPjxwb2x5Z29uIHBvaW50cz0iMzAgMTQgMjggMTQgMjggMTYgMjYgMTYgMjYgMTgg''@;'; put 'put ''MjggMTggMjggMjAgMzAgMjAgMzAgMTggMzIgMTggMzIgMTYgMzAgMTYgMzAgMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgLz48cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xNyIgLz48cG9seWdvbiBwb2ludHM9IjE0IDI4IDE2IDI4IDE2IDI2IDE4IDI2IDE4IDI0IDE2IDI0IDE2IDIwIDE0IDIwIDE0IDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTgiIC8+JyksRi5DbHJTaGFwZVVzYj0oMCxtLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNMTQuMjksMTEuNGExLjQ5LDEuNDksMCwwLDEsMS4yOC0uNzJoMWEyLjg5LDIuODksMCwwLDAsMi43NSwyLjA5LDMsMywwLDAsMCwwLTUuOTEsMi45LDIuOSwwLDAsMC0yLjY3LDEuODJIMTUuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42NmwtMyw0LjgzaDIuMzZabTUt''@;'; put 'put ''Mi45NEExLjM2LDEuMzYsMCwxLDEsMTgsOS44MSwxLjMyLDEuMzIsMCwwLDEsMTkuMzMsOC40NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zNC4zLDE3LjM3bC02LjExLTMuNjZhLjcuNywwLDAsMC0uNywwLC43MS43MSwwLDAsMC0u''@;'; put 'put ''MzYuNjFWMTdINi45MmEyLjMzLDIuMzMsMCwwLDEsLjMyLDEuMTcsMi40NywyLjQ3LDAsMSwxLTIuNDctMi40NiwyLjM3LDIuMzcsMCwwLDEsMS4xNS4zbC45My0xLjc2QTQuNDQsNC40NCwwLDEsMCw5LjE1LDE5aDMuNThsNC4xNyw2LjY1YTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMS42NnYx''@;'; put 'put ''LjI4YS43OS43OSwwLDAsMCwuOC43OWg0LjQ5YS43OS43OSwwLDAsMCwuOC0uNzl2LTQuNGEuNzkuNzksMCwwLDAtLjgtLjhIMjIuMzRhLjguOCwwLDAsMC0uOC44djEuMTJIMTkuODhhMS41MSwxLjUxLDAsMCwxLTEuMjgtLjcyTDE1LjA5LDE5aDEydjIuNjZhLjY5LjY5LDAsMCwwLC4zNi42''@;'; put 'put ''MS42Ny42NywwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDYuMTEtMy42NmEuNjkuNjksMCwwLDAsLjM0LS42QS43MS43MSwwLDAsMCwzNC4zLDE3LjM3Wk0yMy4xNCwyNUgyNnYyLjhIMjMuMTRabTUuMzktNC41NlYxNS41NWw0LDIuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQuNzIsMTcuMzdsLTUuNTEtMy4zMWEuNzEuNzEsMCwwLDAtMS4wNy42VjE3SDExLjc3bDMuNTItNS42YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxLjY0YTIuNDEsMi40MSwwLDAsMCwyLjI1LDEuNjEsMi40OCwyLjQ4LDAsMCww''@;'; put 'put ''LDAtNC45NSwyLjM4LDIuMzgsMCwwLDAtMi4xMywxLjM0SDE2LjU3YTMuNDksMy40OSwwLDAsMC0zLDEuNjZMOS40MSwxN0g4YTMuNDYsMy40NiwwLDEsMCwuMDgsMmg1LjY0bDQuMTUsNi42MmEzLjQ5LDMuNDksMCwwLDAsMywxLjY2aDIuNTl2LjkyaDQuNFYyMy44aC00LjR2MS40OEgyMC44''@;'; put 'put ''OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTYuMTEsMTloMTJ2Mi4yOGEuNy43LDAsMCwwLC4zNi42MS43Mi43MiwwLDAsMCwuMzQuMDkuNjUuNjUsMCwwLDAsLjM2LS4xbDUuNTItMy4zMWEuNy43LDAsMCwwLDAtMS4yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz4nKSxGLkNsclNoYXBlUmFkYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDE4YzAsNy43LTYuMywxNC0xNCwxNGMtNy43LDAtMTQtNi4zLTE0LTE0QzQsMTAuNiw5LjcsNC41LDE3LjEsNHYzLjdjLTUuNywwLjUtOS45LDUuNS05LjQsMTEuMnM1LjUsOS45LDExLjIsOS40''@;'; put 'put ''XG5cdGM1LjMtMC41LDkuNC00LjksOS40LTEwLjNoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zcy04LjMtMy43LTguMy04LjNjMC00LjIsMy4xLTcuOCw3LjMtOC4zdjQuNGMtMS44LDAuNC0zLjEsMi0zLjEsMy45XG5cdGMwLDIuMiwxLjgsNCw0LDRzNC0xLjgsNC00YzAtMS44LTEuMy0zLjQt''@;'; put 'put ''My0zLjhWMi4xQzE4LjYsMiwxOC4zLDIsMTgsMkM5LjIsMiwyLDkuMiwyLDE4czcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZIMzJ6IE0yMCwxOFxuXHRjMCwxLjEtMC45LDItMiwycy0yLTAuOS0yLTJzMC45LTIsMi0yUzIwLDE2LjksMjAsMTh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIsMThjMCw3LjctNi4yLDE0LTE0LDE0UzQsMjUuOCw0LDE4YzAtNy40LDUuNy0xMy41LDEzLjEtMTR2My43Yy01LjcsMC41LTkuOCw1LjUtOS4zLDExLjJzNS41LDkuOCwxMS4yLDkuM1xuXHRcdGM1LjMtMC41LDkuMy00LjksOS4zLTEw''@;'; put 'put ''LjJoLTJjMCw0LjYtMy43LDguMy04LjMsOC4zUzkuNywyMi42LDkuNywxOGMwLTQuMiwzLjItNy44LDcuMy04LjJ2NC40Yy0yLjEsMC42LTMuNCwyLjctMi45LDQuOVxuXHRcdGMwLjYsMi4xLDIuNywzLjQsNC45LDIuOWMyLjEtMC42LDMuNC0yLjcsMi45LTQuOWMtMC40LTEuNC0xLjUtMi41''@;'; put 'put ''LTIuOS0yLjlWMmMtMC40LDAtMC43LDAtMS4xLDBjLTguOCwwLTE2LDcuMi0xNiwxNlxuXHRcdGMwLDguOCw3LjIsMTYsMTYsMTZzMTYtNy4yLDE2LTE2YzAsMCwwLDAsMCwwSDMyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlSW5kdWN0''@;'; put 'put ''b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjMxLDI1LjgxYy0xLjc1LDAtMy0yLjQ5LTMtNmExMi43OSwxMi43OSwwLDAsMSwxLjcyLTYuNywyLjU3LDIuNTcsMCwwLDAtMy43OSwwQTEyLjc5LDEyLjc5LDAsMCwxLDIxLDE5Ljc2YzAsMy41Ni0xLjIzLDYtMyw2cy0zLTIuNDkt''@;'; put 'put ''My02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDAsMTIuNzksMTIuNzksMCwwLDEsMS43Miw2LjdjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuODgsMTIuODgsMCwwLDEsMS43MS02LjcsMi43LDIuNywwLDAsMC0xLjg5LS44N0M3LjEs''@;'; put 'put ''MTIuMTksNS42OSwxMy43LDUsMTZsLS4yMy43SDJhMSwxLDAsMCwxLDAtMkgzLjI5YzEuMS0yLjgzLDMuMDYtNC41NSw1LjI0LTQuNTVhNC42Nyw0LjY3LDAsMCwxLDMuMTYsMS4zMiw0LjYyLDQuNjIsMCwwLDEsMy4xNS0xLjMyQTQuNjUsNC42NSwwLDAsMSwxOCwxMS41MWE0LjQzLDQuNDMs''@;'; put 'put ''MCwwLDEsNi4zMSwwLDQuNjcsNC42NywwLDAsMSwzLjE2LTEuMzJjMi4xOCwwLDQuMTQsMS43Miw1LjI0LDQuNTVIMzRhMSwxLDAsMCwxLDAsMkgzMS4yOGwtLjIzLS43Yy0uNzQtMi4zNC0yLjE1LTMuODUtMy41OC0zLjg1YTIuNywyLjcsMCwwLDAtMS44OS44NywxMi44OCwxMi44OCwwLDAs''@;'; put 'put ''MSwxLjcxLDYuN0MyNy4yOSwyMy4zMiwyNi4wNywyNS44MSwyNC4zMSwyNS44MVpNMTgsMTQuOTNhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEuNzEsMCwwLDAsMTgsMTQuOTNabTYuMzEsMGExMS43MSwxMS43''@;'; put 'put ''MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwyNC4zMSwxNC45M1ptLTEyLjYyLDBhMTEuNzEsMTEuNzEsMCwwLDAtMSw0LjgzYzAsMi41NC42NiwzLjc1LDEsNCwuMzItLjI3LDEtMS40OCwxLTRBMTEuNzEsMTEu''@;'; put 'put ''NzEsMCwwLDAsMTEuNjksMTQuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlUmVzaXN0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjQzLDI2LjM0aDBBMS40NywxLjQ3LDAsMCwxLDI4LDI1LjIyTDI0Ljg2LDEz''@;'; put 'put ''LjE1LDIxLjc0LDI1LjIyYTEuNDksMS40OSwwLDAsMS0xLjQ1LDEuMTJoMGExLjQ5LDEuNDksMCwwLDEtMS40Ni0xLjEyTDE1LjcxLDEzLjE1LDEyLjYsMjUuMjJhMS41MSwxLjUxLDAsMCwxLTIuOTEsMEw2LjU3LDEzLjE1LDUuMjIsMTguMzdIMmExLDEsMCwwLDEsMC0ySDMuNjdsMS40NS01''@;'; put 'put ''LjU5QTEuNDgsMS40OCwwLDAsMSw2LjU3LDkuNjZoMEExLjQ3LDEuNDcsMCwwLDEsOCwxMC43OGwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS40OSwxLjQ5LDAsMCwxLDEuNDUtMS4xMmgwYTEuNDksMS40OSwwLDAsMSwxLjQ2LDEuMTJsMy4xMiwxMi4wNywzLjEyLTEyLjA3YTEuNSwxLjUsMCww''@;'; put 'put ''LDEsMi45LDBsMy4xMiwxMi4wNywxLjM1LTUuMjJIMzRhMSwxLDAsMCwxLDAsMkgzMi4zM2wtMS40NSw1LjU5QTEuNDgsMS40OCwwLDAsMSwyOS40MywyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVDYXBhY2l0b3I9KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwxNSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwzNC4wNmExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMuMTVhMSwxLDAsMSwxLDIsMFYzMy4wNkExLDEsMCwwLDEsMjEsMzQuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuNDYsMTlIM2ExLDEsMCwwLDEsMC0ySDE0LjQ2YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMTlIMjEuNTRhMSwxLDAsMCwxLDAtMkgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZVNxdWlkPSgwLG0uY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xOCw3YTEsMSwwLDAsMS0xLTFWMy4xOWExLDEsMCwwLDEsMiwwVjZBMSwxLDAsMCwxLDE4LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRhMSwxLDAsMCwxLTEtMVYzMGExLDEsMCwwLDEsMiww''@;'; put 'put ''djNBMSwxLDAsMCwxLDE4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTcuNDEsMThsMS43OC0xLjc3YTEsMSwwLDEsMC0xLjQyLTEuNDJMNiwxNi41OSw0LjIzLDE0LjgxYTEsMSwwLDEsMC0xLjQyLDEuNDJMNC41OSwxOCwyLjgx''@;'; put 'put ''LDE5Ljc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUw2LDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBk''@;'; put 'put ''PSJNNiwxMy43NmwuMzYtLjM2YTMsMywwLDAsMSwyLjExLS44OCwxMSwxMSwwLDAsMSwxOSwwLDMsMywwLDAsMSwyLjEyLjg4bC4zNi4zNi4yLS4yYTEzLDEzLDAsMCwwLTI0LjQsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMCwy''@;'; put 'put ''Mi4yNGwtLjM2LjM2YTMsMywwLDAsMS0yLjEyLjg4LDExLDExLDAsMCwxLTE5LDAsMywzLDAsMCwxLTIuMTItLjg4TDYsMjIuMjRsLS4yLjJhMTMsMTMsMCwwLDAsMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQxLDE4''@;'; put 'put ''bDEuNzgtMS43N2ExLDEsMCwwLDAtMS40Mi0xLjQyTDMwLDE2LjU5bC0xLjc3LTEuNzhhMSwxLDAsMSwwLTEuNDIsMS40MkwyOC41OSwxOGwtMS43OCwxLjc3YTEsMSwwLDAsMCwwLDEuNDIsMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMCwxOS40MWwxLjc3LDEuNzhhMSwx''@;'; put 'put ''LDAsMCwwLDEuNDIsMCwxLDEsMCwwLDAsMC0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUhvc3RHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuMDgsMzRoLTE0QTEuMDgsMS4wOCwwLDAsMSw2LDMzVjEy''@;'; put 'put ''YTEuMDgsMS4wOCwwLDAsMSwxLjA4LTEuMDhoMTRBMS4wOCwxLjA4LDAsMCwxLDIyLjE2LDEyVjMzQTEuMDgsMS4wOCwwLDAsMSwyMS4wOCwzNFpNOC4xNiwzMS44OEgyMFYxM0g4LjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cmVjdCB4PSIx''@;'; put 'put ''MC4wOCIgeT0iMTQuOTYiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yNi4xLDI3LjgxaC0yVjloLTEyVjdoMTNhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLjA4LDIzaC0yVjVoLTExVjNoMTJhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjEzLjA4IiB5PSIyNy44OCIgd2lkdGg9IjIiIGhlaWdodD0iMi4xNiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNS4wOCwzMSBMMS4wOCwzMSBDMC41MTM0MjcxOTcsMzEuMDAxNTU2NCAwLjA0MTk2NjM3NjUsMzAuNTY1MDE4NiAwLDMwIEww''@;'; put 'put ''LDkgQzAsOC40MDM1MzI0NyAwLjQ4MzUzMjQ3LDcuOTIgMS4wOCw3LjkyIEwxNS4wOCw3LjkyIEMxNS42NzY0Njc1LDcuOTIgMTYuMTYsOC40MDM1MzI0NyAxNi4xNiw5IEwxNi4xNiwzMCBDMTYuMTE4MDMzNiwzMC41NjUwMTg2IDE1LjY0NjU3MjgsMzEuMDAxNTU2NCAxNS4wOCwzMSBaIE00''@;'; put 'put ''LjA4LDExLjk2IEw0LjA4LDEzLjk2IEwxMi4wOCwxMy45NiBMMTIuMDgsMTEuOTYgTDQuMDgsMTEuOTYgWiBNNy4wOCwyNC44OCBMNy4wOCwyNy4wNCBMOS4wOCwyNy4wNCBMOS4wOCwyNC44OCBMNy4wOCwyNC44OCBaIiAvPlxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgZD0iTTIwLjEsMjQuODEgTDE4LjEsMjQuODEgTDE4LjEsNiBMNi4xLDYgTDYuMSw0IEwxOS4xLDQgQzE5LjY1MjI4NDcsNCAyMC4xLDQuNDQ3NzE1MjUgMjAuMSw1IEwyMC4xLDI0LjgxIFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiBkPSJNMjQuMDgsMjAgTDIyLjA4LDIwIEwyMi4wOCwyIEwxMS4wOCwyIEwxMS4wOCwwIEwyMy4wOCwwIEMyMy42MzIyODQ3LDAgMjQuMDgsMC40NDc3MTUyNSAyNC4wOCwxIEwyNC4wOCwyMCBaIiAvPicpLEYuQ2xyU2hhcGVTdG9yYWdlQWRhcHRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNNi4wNiwzMGExLDEsMCwwLDEtMS0xVjhoLTJhMSwxLDAsMCwxLDAtMmg0VjI5QTEsMSwwLDAsMSw2LjA2LDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMwLjA2LDI3aC0yNVY5aDI1YTMsMywwLDAsMSwzLDNWMjRB''@;'; put 'put ''MywzLDAsMCwxLDMwLjA2LDI3Wm0tMjMtMmgyM2ExLDEsMCwwLDAsMS0xVjEyYTEsMSwwLDAsMC0xLTFoLTIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjIuMDYiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMTQiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOS4wNiwyMmgtOFYyMGg3VjE0aDJ2''@;'; put 'put ''N0ExLDEsMCwwLDEsMTkuMDYsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVOb2RlR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDIxLjU4bC00Ljk0LTIuODNWMTMuMDlhMSwxLDAsMCwwLS41MS0uODdM''@;'; put 'put ''MjIuNjQsOS4xYTEsMSwwLDAsMC0xLDBMMTYuMiwxMi4yMmExLDEsMCwwLDAtLjUxLjg3djUuNjZsLTQuOTQsMi44M2ExLDEsMCwwLDAtLjUuODd2Ni4yNGExLDEsMCwwLDAsLjUuODZsNS40NSwzLjEyYTEsMSwwLDAsMCwxLDBsNC45NS0yLjgzLDQuOTUsMi44M2ExLDEsMCwwLDAsLjUuMTQs''@;'; put 'put ''MSwxLDAsMCwwLC40OS0uMTRsNS40NS0zLjEyYTEsMSwwLDAsMCwuNS0uODZWMjIuNDVBMSwxLDAsMCwwLDMzLjUzLDIxLjU4Wk0yMi4xNCwxMS4xMmw0LjQ1LDIuNTVWMTlsLTQuNDYsMi41Ni00LjQ0LTIuNlYxMy42N1pNMTYuNjksMzAuNjVsLTQuNDQtMi41NFYyM2w0LjY4LTIuNjgsNC40''@;'; put 'put ''LDIuNTdWMjhaTTMyLDI4LjExbC00LjQ0LDIuNTRMMjIuOTMsMjhWMjIuOTNsNC40Ni0yLjU3TDMyLDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcsMjcuNDNhMSwxLDAsMCwxLTEtMVYxOS45QTEsMSwwLDAsMSw2LjUsMTls''@;'; put 'put ''NC45NS0yLjgzVjEwLjU0YTEsMSwwLDAsMSwuNS0uODdsNS4yMS0zYTEsMSwwLDAsMSwxLjM3LjM3LDEsMSwwLDAsMS0uMzgsMS4zN2wtNC43LDIuNjh2NS42NmExLDEsMCwwLDEtLjUxLjg3TDgsMjAuNDh2NS45NUExLDEsMCwwLDEsNywyNy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zLDI1LjA1YTEsMSwwLDAsMS0xLTFWMTcuNTNhMSwxLDAsMCwxLC41LS44Nmw1LTIuODRWOC4xN0ExLDEsMCwwLDEsOCw3LjMxbDUuMjUtM2ExLDEsMCwwLDEsMSwxLjc0TDkuNDUsOC43NXY1LjY2YTEsMSwwLDAsMS0uNTEuODdM''@;'; put 'put ''NCwxOC4xMXY1Ljk0QTEsMSwwLDAsMSwzLDI1LjA1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUsMzQuMjksMiwyOS4zOVYxOS41OGw4LjUtNC45LDguNSw0Ljl2''@;'; put 'put ''OS44MVpNNCwyOC4yMywxMC41LDMyLDE3LDI4LjIzVjIwLjc0TDEwLjUsMTcsNCwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yNS41LDM0LjI5LDE3LDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk0xOSwy''@;'; put 'put ''OC4yMywyNS41LDMyLDMyLDI4LjIzVjIwLjc0TDI1LjUsMTcsMTksMjAuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTgsMjEuMzJsLTguNS00LjlWNi42MUwxOCwxLjcxbDguNSw0Ljl2OS44MVptLTYuNS02LjA2TDE4LDE5''@;'; put 'put ''bDYuNS0zLjc1VjcuNzdMMTgsNCwxMS41LDcuNzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLEYuQ2xyU2hhcGVOYW1lc3BhY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDQuMThhMSwxLDAsMSwwLTEsMS43M2w2LDMuNDdWMjYuNjJs''@;'; put 'put ''LTYsMy40N2ExLDEsMCwwLDAtLjM3LDEuMzYsMSwxLDAsMCwwLDEuMzcuMzdsNy00LjA1VjguMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNOS42OCwyOS45LDQsMjYuNjJWOS4zOEw5LjY4LDYuMWExLDEsMCwxLDAtMS0xLjcz''@;'; put 'put ''TDIsOC4yM1YyNy43N2w2LjY4LDMuODZhMSwxLDAsMCwwLDEuMzctLjM3QTEsMSwwLDAsMCw5LjY4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTAsMTJWMjRhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjEy''@;'; put 'put ''YTIsMiwwLDAsMC0yLTJIMTJBMiwyLDAsMCwwLDEwLDEyWm03LDB2NUgxMlYxMlptLTUsN2g1djVIMTJabTcsNVYxOWg1djVabTUtN0gxOVYxMmg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxGLkNsclNoYXBlTm9kZT0oMCxtLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMzAuNjYsNywyNC4zM1YxMS42N0wxOCw1LjM0bDExLDYuMzNWMjQuMzNaTTksMjMuMThsOSw1LjE3LDktNS4xN1YxMi44MkwxOCw3LjY1LDksMTIuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLEYuQ2xyU2hhcGVQb2Q9''@;'; put 'put ''KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDMySDEwYTYsNiwwLDAsMS02LTZWMTBhNiw2LDAsMCwxLDYtNkgyNmE2LDYsMCwwLDEsNiw2VjI2QTYsNiwwLDAsMSwyNiwzMlpNMTAsNmE0LDQsMCwwLDAtNCw0VjI2YTQsNCwwLDAsMCw0LDRIMjZhNCw0LDAsMCwwLDQtNFYxMGE0LDQs''@;'; put 'put ''MCwwLDAtNC00WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI2LjU2LDE1SDE1LjQ0QTEuNDMsMS40MywwLDAsMCwxNCwxNi40NHY4LjEyQTEuNDMsMS40MywwLDAsMCwxNS40NCwyNkgyNi41NkExLjQzLDEuNDMsMCwwLDAsMjgs''@;'; put 'put ''MjQuNTZWMTYuNDRBMS40MywxLjQzLDAsMCwwLDI2LjU2LDE1Wk0yNiwyNEgxNlYxN0gyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMi40LDE5SDEwVjEySDIwdjEuNGgydi0yQTEuNDMsMS40MywwLDAsMCwyMC41NiwxMEg5''@;'; put 'put ''LjQ0QTEuNDMsMS40MywwLDAsMCw4LDExLjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDkuNDQsMjFoM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksRi5DbHJDb250cm9sTHVuPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNOCwyNC41OWEy''@;'; put 'put ''NS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4czkuMS0uNDUs''@;'; put 'put ''MTItMS44OHY1LjExYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlY4aDBzMCwwLDAtLjA3YzAtMy4zNS04LjgtNC4yNS0xNC00LjI1UzQsNC41''@;'; put 'put ''OCw0LDcuOTN2MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWk0xOCw1LjY4YzcuMTUsMCwxMS41MywxLjQ0LDEyLDIuMjUtLjQ2LjgxLTQuODQsMi4yNS0xMiwyLjI1UzYuMzEsOC42OSw2LDhDNi4zMSw3LjE4LDEwLjcx''@;'; put 'put ''LDUuNjgsMTgsNS42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRs''@;'; put 'put ''LTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0xOCwxNy41NEEzNC44''@;'; put 'put ''MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjEzLjIyYTcuMzIsNy4zMiwwLDAsMS0yLC4yOHYxLjkxQzI5LjA5LDE2LjIzLDI1LDE3LjU0LDE4LDE3LjU0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhhNDcuNjYsNDcuNjYsMCwwLDAsNy4wOS0uNTIsNy40NSw3LjQ1LDAsMCwxLTEuNTEtMS44LDQ3LjQsNDcuNCwwLDAsMS01''@;'; put 'put ''LjU4LjMyQzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjY2LDAsMy4xNi4wOCw0LjUxLjIxYTcuNTYsNy41NiwwLDAsMSwuMjktMmMtMS43LS4xNy0zLjM4LS4yNC00LjgtLjI0LTUuMiwwLTE0LC45LTE0LDQuMjV2MTkuNmMwLDIsMy4xNywzLjE0''@;'; put 'put ''LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTgsMjQuNTlhMjUuNSwyNS41LDAsMCwwLDIuNzUuNTlsMS4yMS0xLjQxYTI0LjEzLDI0LjEzLDAsMCwxLTQtLjgzWiIvPjxwYXRoIGQ9Ik0zMi4wOSwyMkgxNS40NmwtNS40''@;'; put 'put ''MSw2LjMxTDE1LjQ5LDM0aDE2LjZhMiwyLDAsMCwwLDItMlYyMy45M0EyLDIsMCwwLDAsMzIuMDksMjJabTAsMTBIMTYuMzRsLTMuNTktMy43N0wxNi4zOCwyNEgzMi4wOXY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgs''@;'; put 'put ''MTIsMS44OGguNTlhMy41OSwzLjU5LDAsMCwxLC4zMi0ySDE4QzEwLjcxLDEwLjE4LDYuMzEsOC42OSw2LDhjLjMyLS44LDQuNzItMi4zLDEyLTIuMywxLjIyLDAsMi4zNS4wNSwzLjQxLjEybDEuMS0xLjkxYy0xLjYtLjE1LTMuMTctLjIxLTQuNTEtLjIxLTUuMiwwLTE0LC45LTE0LDQuMjV2''@;'; put 'put ''MTkuNmMwLDIsMy4xNywzLjE0LDYuODMsMy43Mkw4LjM4LDI4LjY4QzcsMjguMjgsNi4xMywyNy44NCw2LDI3LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTgsMTYuMzNWMThhNDAuODYsNDAu''@;'; put 'put ''ODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTUuNEgzMGMtLjkxLjgyLTUsMi4xMy0xMiwyLjEzQTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl''@;'; put 'put ''ZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzIuMDks''@;'; put 'put ''MjFIMzJWMTcuMzJjLTEuOSwyLjkzLTEwLjQ2LDMuMy0xNCwzLjNBNDIuNDMsNDIuNDMsMCwwLDEsOCwxOS41NlYxNy44OEE0MC41OSw0MC41OSwwLDAsMCwxOCwxOWM1LDAsMTMuMi0uODIsMTQtMy44MlYxMC43MmMtMi4yMSwzLjM2LTEwLjQ5LDMuNDYtMTQsMy40NkE0Mi4xMiw0Mi4xMiww''@;'; put 'put ''LDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRjNSwwLDEzLjI4LS44MywxNC0zLjg4VjcuODNoMGMtLjE5LTMuMjctOC44NC00LjE1LTE0LTQuMTVTNC4yMSw0LjU2LDQsNy44M0g0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3''@;'; put 'put ''YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45''@;'; put 'put ''MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgydi0yYTcuMzQsNy4z''@;'; put 'put ''NCwwLDAsMS00LjEyLDAsMzkuNDcsMzkuNDcsMCwwLDEtOS44OCwxQTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNCw0Ny43Niw0Ny43NiwwLDAsMCw3LjA5LS41MkE3LjQ1LDcuNDUsMCwwLDEsMjIuOCwzLjkyYy0xLjctLjE3LTMuMzgtLjI0''@;'; put 'put ''LTQuOC0uMjQtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4y''@;'; put 'put ''NCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4''@;'; put 'put ''LDE5YzQuODUsMCwxMi44LS43OSwxMy45MS0zLjYySDIyLjIzYTMuNjgsMy42OCwwLDAsMS0yLjczLTEuMjNIMThBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0aC41OWEzLjYxLDMuNjEsMCwwLDEsLjQ2LTIuMjlsMy40Ni02Yy0xLjYtLjE1''@;'; put 'put ''LTMuMTctLjIxLTQuNTEtLjIxLTUuMTQsMC0xMy43OS44OC0xNCw0LjE1SDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwz''@;'; put 'put ''LjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlTWVkaWFDaGFuZ2VyPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAs''@;'; put 'put ''MCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMCw0Wk02LDMwVjZIMzBWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz48cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMjcuMjIsMTBIMjB2NGEuOC44LDAsMSwwLDEuNTksMFYxMS42aDUuNjNh''@;'; put 'put ''LjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVj''@;'; put 'put ''dCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC04Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMCwxNGEuOC44LDAsMSwwLDEuNTksMFYxMS42SDI1QTcuNzQsNy43NCwwLDAsMSwyMy42NiwxMEgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTMwLDEzLjVoMFYzMEg2VjZIMjIuNVY2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3''@;'; put 'put ''LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''Mi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHJlY3QgeD0iMjAiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjQiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhl''@;'; put 'put ''aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTQiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC02LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE4IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9Ijgu''@;'; put 'put ''MTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjYiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC05LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxNS40VjMwSDZWNkgyMS4yN2wxLjE4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFM''@;'; put 'put ''MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4Ljgx''@;'; put 'put ''VjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWm0wLTZIMjBWMTBoNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNC0xLjE2VjE0''@;'; put 'put ''SDIwVjEwaDMuNjZBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmE3LjM3LDcuMzcsMCwwLDEsLjI4LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB''@;'; put 'put ''Ny4zNyw3LjM3LDAsMCwxLDMwLDEzLjVaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0yMi4yMywxNS40YTMuNjgsMy42OCwwLDAsMS0zLjE4LTUuNTFMMjIuNDUsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0xNywyOEg4''@;'; put 'put ''LjgxVjI2SDE3Wm0wLTRIOC44MVYyMkgxN1ptMC00SDguODFWMThIMTdabTAtNEg4LjgxVjE0SDE3Wm0wLTRIOC44MVYxMEgxN1pNMjIsMjRIMjBWMjJoMlptMC00SDIwVjE4aDJabTQsNEgyNFYyMmgyWm0wLTRIMjRWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLEYuQ2xyU2hhcGVUYXBlRHJpdmU9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEzLjMzLDEzLjM1YTQuNTIsNC41MiwwLDEsMCw0LjUzLDQuNTJBNC41Myw0LjUzLDAsMCwwLDEzLjMzLDEzLjM1''@;'; put 'put ''Wm0wLDcuNDRhMi45MiwyLjkyLDAsMSwxLDIuOTMtMi45MkEyLjkyLDIuOTIsMCwwLDEsMTMuMzMsMjAuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNjIsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTIsNC41MkE0LjUz''@;'; put 'put ''LDQuNTMsMCwwLDAsMjMuNjIsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45Mi0yLjkyQTIuOTIsMi45MiwwLDAsMSwyMy42MiwyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik02LDExVjIzLjU1SDhWMTJIMjku''@;'; put 'put ''MzRWMTBIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG5cbiAgPHBhdGggZD0iTTguODEsMTcuODdhNC41Myw0LjUzLDAsMSwwLDQuNTItNC41MkE0LjUzLDQuNTMsMCwwLDAsOC44MSwxNy44N1ptNy40NSwwQTIuOTMsMi45''@;'; put 'put ''MywwLDEsMSwxMy4zMywxNSwyLjkzLDIuOTMsMCwwLDEsMTYuMjYsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE5LjEsMTcuODdhNC41Miw0LjUyLDAsMSwwLDQuNTItNC41MkE0LjUzLDQu''@;'; put 'put ''NTMsMCwwLDAsMTkuMSwxNy44N1ptNy40NCwwQTIuOTIsMi45MiwwLDEsMSwyMy42MiwxNSwyLjkyLDIuOTIsMCwwLDEsMjYuNTQsMTcuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLDEzLjIy''@;'; put 'put ''VjI4SDRWOEgyMi43OGE3LjM3LDcuMzcsMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjY1LDcuNjUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyNS41MWE3LjY2LDcuNjYsMCwwLDEtMS44NS0ySDdBMSwxLDAsMCwwLDYsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx''@;'; put 'put ''LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik03LDEwYTEsMSwwLDAsMC0xLDFW''@;'; put 'put ''MjMuNTVIOFYxMkgxOC41N0EzLjcsMy43LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMjhINFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhW''@;'; put 'put ''MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTIyLjA5LDE1LjM5YTMuNjUsMy42NSwwLDAsMS0xLjgtLjU1LDQuNTEsNC41MSww''@;'; put 'put ''LDEsMCw3LjExLjU2SDI1LjE3YTIuOTIsMi45MiwwLDEsMS0zLjA4LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywx''@;'; put 'put ''M0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMy''@;'; put 'put ''LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0zMCwyNEg2VjEySDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1''@;'; put 'put ''LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIzLjc5LDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDIzLjc5LDIzWm0wLTdhMiwyLDAs''@;'; put 'put ''MSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cbiAgPHBhdGggZD0iTTEyLjIxLDIzYTUsNSwwLDEsMC01LTVBNSw1LDAsMCwwLDEyLjIxLDIzWm0wLTdhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTIuMjEsMTZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0zMCwxMy41VjI0SDZWMTJIMjUuNTFhNy40OSw3LjQ5LDAsMCwxLTMtNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik03LjIsMThhNSw1LDAsMSwwLDUtNUE1LDUsMCwwLDAsNy4yLDE4Wm03LDBhMiwyLDAsMSwxLTItMkEyLDIsMCwwLDEsMTQuMjIsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4g''@;'; put 'put ''IDxwYXRoIGQ9Ik0xOC43OCwxOGE1LDUsMCwxLDAsOS4yNy0yLjZIMjIuMjNhMy43MSwzLjcxLDAsMCwxLTIuMTctLjcxQTUsNSwwLDAsMCwxOC43OCwxOFptNS0yYTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMFYyNEg2VjEySDE4LjU3YTMuNjUsMy42NSwwLDAsMSwuNDgtMi4xMUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAnKSxGLkNsclNoYXBlQW5pbWF0aW9uPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC4xNiwzMS43MWE0LjQsNC40LDAsMCwx''@;'; put 'put ''LTQuNjQtMUE0LjM0LDQuMzQsMCwwLDEsNC4yMywyNy42YTQuNDEsNC40MSwwLDAsMSwuMTgtMS4yLDExLjYxLDExLjYxLDAsMCwxLTEtMi41Niw2LjQsNi40LDAsMCwwLDkuMzMsOC42M0ExMS41NSwxMS41NSwwLDAsMSwxMC4xNiwzMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xOC40MSwyNy42OGE3LjYxLDcuNjEsMCwwLDEtOS4wOC0xLjI2LDcuNTgsNy41OCwwLDAsMS0xLjI3LTkuMDYsMTQuMjYsMTQuMjYsMCwwLDEtLjM3LTIuODUsOS41OCw5LjU4LDAsMCwwLC4yMiwxMy4zMyw5LjYzLDkuNjMsMCwwLDAs''@;'; put 'put ''MTMuMzUuMjJBMTQuNDYsMTQuNDYsMCwwLDEsMTguNDEsMjcuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNjYsMjYuMjFhMTIuMSwxMi4xLDAsMSwxLDguNTctMy41NGgwQTEyLjExLDEyLjExLDAsMCwxLDIxLjY2LDI2''@;'; put 'put ''LjIxWk0yMS42Niw0QTEwLjExLDEwLjExLDAsMCwwLDExLjU0LDE0LjExYTEwLDEwLDAsMCwwLDMsNy4xNCwxMC4xMiwxMC4xMiwwLDAsMCwxNC4zMSwwQTEwLjExLDEwLjExLDAsMCwwLDIxLjY2LDRabTcuODYsMThoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zIi8+XG4gIFxuICA8cGF0aCBkPSJNMy41LDIzLjc3YTYuNDEsNi40MSwwLDAsMCw5LjMzLDguNjdBMTEuNjUsMTEuNjUsMCwwLDEsMy41LDIzLjc3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy42OCwxNC41M2E5LjYsOS42LDAs''@;'; put 'put ''MCwwLDEzLjQsMTMuN0ExNC4xMSwxNC4xMSwwLDAsMSw3LjY4LDE0LjUzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuNzgsMkExMi4xMiwxMi4xMiwwLDEsMSw5LjY2LDE0LjE1LDEyLjEyLDEyLjEyLDAsMCwxLDIxLjc4LDIiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgJyksRi5DbHJTaGFwZUNpQ2Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjUzLDE5LjgxYTcuNDUsNy40NSwwLDAsMS0xLjY1LS4xOCwxMC40OCwxMC40OCwwLDAsMSwuNzIsMi4xM2MuMywwLC42MSwwLC45''@;'; put 'put ''MywwYTkuNTIsOS41MiwwLDAsMCwzLS40OWwtLjkzLTEuODFBNy42Nyw3LjY3LDAsMCwxLDIzLjUzLDE5LjgxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjM2LDE3Ljg3LDE4LDE3LjQ5YTcuNCw3LjQsMCwwLDEtMi4yLTUu''@;'; put 'put ''OTIsNy4zMSw3LjMxLDAsMCwxLDEuNTQtNEwxNy4yNiw5QTEsMSwwLDAsMCwxOC4xNywxMGguMDlhMSwxLDAsMCwwLDEtLjkxTDE5LjYsNWExLDEsMCwwLDAtLjI5LS43OUExLDEsMCwwLDAsMTguNTIsNGwtNC4wOS4zNWExLDEsMCwwLDAsLjE3LDJsMS4yOS0uMTFhOS40NSw5LjQ1LDAsMCww''@;'; put 'put ''LTIuMDUsNS4zMiw5LjI4LDkuMjgsMCwwLDAsMi42Nyw3LjI2bC4zMS4zN2E3LjMzLDcuMzMsMCwwLDEsMi4wNiw0LjkxLDcuMzksNy4zOSwwLDAsMS0uMjYsMi40N2wxLjguOTFhOC43Niw4Ljc2LDAsMCwwLC40NS0zLjUxQTkuMjgsOS4yOCwwLDAsMCwxOC4zNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMi40LDE3LjkxLDMxLjE5LDE4QTkuNjUsOS42NSwwLDAsMCwyMy41MywyLjQ1YTkuMzMsOS4zMywwLDAsMC0zLC40OWwuOTEsMS44YTcuNjcsNy42NywwLDAsMSw5Ljc2LDcuMzksNy41OCw3LjU4LDAs''@;'; put 'put ''MCwxLTEuNjUsNC43MmwuMS0xLjU0YTEsMSwwLDEsMC0yLS4xM2wtLjI4LDQuMDhhMSwxLDAsMCwwLC4zMS43OC45NC45NCwwLDAsMCwuNjkuMjhoLjFsNC4wOC0uNDJhMSwxLDAsMCwwLC45LTEuMUExLDEsMCwwLDAsMzIuNCwxNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik00LjA3LDIwLjQ0aC4wOGw0LjA5LS4zNWExLDEsMCwxLDAtLjE3LTJsLTEuMzkuMTJhNy42Myw3LjYzLDAsMCwxLDQuNTItMS40OSw3LjksNy45LDAsMCwxLDEuNjMuMTgsMTAuMjMsMTAuMjMsMCwwLDEtLjcxLTIuMTNjLS4zLDAtLjYxLDAt''@;'; put 'put ''LjkyLDBhOS42Niw5LjY2LDAsMCwwLTUuOSwybC4xMi0xLjMxYTEsMSwwLDAsMC0uOTItMS4wOCwxLDEsMCwwLDAtMS4wOC45MWwtLjM1LDQuMDhhMSwxLDAsMCwwLDEsMS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC40''@;'; put 'put ''MiwyOC4yM2wtNC4wOS4yN2ExLDEsMCwwLDAsLjEzLDJMMTYsMzAuMzlhNy43MSw3LjcxLDAsMCwxLTEyLjU0LTYsNy42LDcuNiwwLDAsMSwuMjktMkwyLDIxLjQ2YTkuNTksOS41OSwwLDAsMC0uNDcsMi45NUE5LjcsOS43LDAsMCwwLDE3LjE5LDMybC0uMTIsMS4xOGExLDEsMCwwLDAsLjg5''@;'; put 'put ''LDEuMWguMTFhMSwxLDAsMCwwLDEtLjlsLjQyLTQuMDZhMSwxLDAsMCwwLTEuMDYtMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxGLkNsclNoYXBlRmlsZVNoYXJlMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEg3LjgzQTEuODks''@;'; put 'put ''MS44OSwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OSwxLjg5LDAsMCwwLDcuODMsMzJIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjA5VjlaTTI0LDUuNzgsMjguMiwxMEgyNFpNOCwzMFY2SDIydjZoNlYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0yMiwyMS44MWEyLjExLDIuMTEsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2di0uNDRsNS42Ni0yLjY1YTIuMDgsMi4wOCwwLDEsMCwuMDYtMi45NGgwYTIuMTQsMi4xNCwwLDAsMC0uNjQsMS40OHYuMjNsLTUuNjQsMi42NmEyLjA4LDIuMDgsMCwxLDAtLjA4LDIuOTVs''@;'; put 'put ''LjA4LS4wOCw1LjY3LDIuNjZ2LjNBMi4wOSwyLjA5LDAsMSwwLDIyLDIxLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0yNSw0LjA2SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNlYzMC4xNWExLjg5LDEuODksMCwwLDAs''@;'; put 'put ''MS44MywxLjkxSDI4LjE3QTEuODcsMS44NywwLDAsMCwzMCwzMC4xNVY5Wk0yMiwyNmEyLjA5LDIuMDksMCwwLDEtMi4xLTIuMDh2LS4zTDE0LjI3LDIxbC0uMDguMDhhMi4wOCwyLjA4LDAsMSwxLC4wOC0yLjk1bDUuNjQtMi42NnYtLjIzYTIuMTQsMi4xNCwwLDAsMSwuNjQtMS40OGgwYTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMS0uMDYsMi45NGwtNS42NiwyLjY1di40NGw1LjcyLDIuNjZBMi4xMSwyLjExLDAsMCwxLDIyLDIxLjgxbDAsMEEyLjA5LDIuMDksMCwwLDEsMjIsMjZabTItMTZWNS44NGw0LjIsNC4yMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxG''@;'; put 'put ''LlRlY2hub2xvZ3lTaGFwZXM9eyJydWxlci1wZW5jaWwiOkYuQ2xyU2hhcGVSdWxlclBlbmNpbCwicGhvbmUtaGFuZHNldCI6Ri5DbHJTaGFwZVBob25lSGFuZHNldCwibm8td2lmaSI6Ri5DbHJTaGFwZU5vV2lmaSxpbnN0YWxsOkYuQ2xyU2hhcGVJbnN0YWxsLHVuaW5zdGFsbDpGLkNsclNo''@;'; put 'put ''YXBlVW5pbnN0YWxsLGxheWVyczpGLkNsclNoYXBlTGF5ZXJzLGJsb2NrOkYuQ2xyU2hhcGVCbG9jaywiYmxvY2tzLWdyb3VwIjpGLkNsclNoYXBlQmxvY2tzR3JvdXAsYnVuZGxlOkYuQ2xyU2hhcGVCdW5kbGUsd2lmaTpGLkNsclNoYXBlV2lmaSwicmFjay1zZXJ2ZXIiOkYuQ2xyU2hhcGVS''@;'; put 'put ''YWNrU2VydmVyLCJoYXJkLWRpc2siOkYuQ2xyU2hhcGVIYXJkRGlzaywiYmFja3VwLXJlc3RvcmUiOkYuQ2xyU2hhcGVCYWNrdXBSZXN0b3JlLGJhY2t1cDpGLkNsclNoYXBlQmFja3VwLGRldmljZXM6Ri5DbHJTaGFwZURldmljZXMsa2V5Ym9hcmQ6Ri5DbHJTaGFwZUtleWJvYXJkLG1vdXNl''@;'; put 'put ''OkYuQ2xyU2hhcGVNb3VzZSxkYXNoYm9hcmQ6Ri5DbHJTaGFwZURhc2hib2FyZCxob3N0OkYuQ2xyU2hhcGVIb3N0LHN0b3JhZ2U6Ri5DbHJTaGFwZVN0b3JhZ2UsY2x1c3RlcjpGLkNsclNoYXBlQ2x1c3RlcixhcHBsaWNhdGlvbnM6Ri5DbHJTaGFwZUFwcGxpY2F0aW9ucyxidWlsZGluZzpG''@;'; put 'put ''LkNsclNoYXBlQnVpbGRpbmcsY3B1OkYuQ2xyU2hhcGVDUFUsbWVtb3J5OkYuQ2xyU2hhcGVNZW1vcnksImRhdGEtY2x1c3RlciI6Ri5DbHJTaGFwZURhdGFDbHVzdGVyLCJyZXNvdXJjZS1wb29sIjpGLkNsclNoYXBlUmVzb3VyY2VQb29sLHNoaWVsZDpGLkNsclNoYXBlU2hpZWxkLCJzaGll''@;'; put 'put ''bGQtY2hlY2siOkYuQ2xyU2hhcGVTaGllbGRDaGVjaywic2hpZWxkLXgiOkYuQ2xyU2hhcGVTaGllbGRYLGltcG9ydDpGLkNsclNoYXBlSW1wb3J0LGV4cG9ydDpGLkNsclNoYXBlRXhwb3J0LCJ1cGxvYWQtY2xvdWQiOkYuQ2xyU2hhcGVVcGxvYWRDbG91ZCwiZG93bmxvYWQtY2xvdWQiOkYu''@;'; put 'put ''Q2xyU2hhcGVEb3dubG9hZENsb3VkLHBsdWdpbjpGLkNsclNoYXBlUGx1Z2luLGZsb3BweTpGLkNsclNoYXBlRmxvcHB5LGNvbXB1dGVyOkYuQ2xyU2hhcGVDb21wdXRlcixkaXNwbGF5OkYuQ2xyU2hhcGVEaXNwbGF5LHRlcm1pbmFsOkYuQ2xyU2hhcGVUZXJtaW5hbCxjb2RlOkYuQ2xyU2hh''@;'; put 'put ''cGVDb2RlLGFwcGxpY2F0aW9uOkYuQ2xyU2hhcGVBcHBsaWNhdGlvbixiYXR0ZXJ5OkYuQ2xyU2hhcGVCYXR0ZXJ5LG1vYmlsZTpGLkNsclNoYXBlTW9iaWxlLHRhYmxldDpGLkNsclNoYXBlVGFibGV0LCJuZXR3b3JrLWdsb2JlIjpGLkNsclNoYXBlTmV0d29ya0dsb2JlLCJuZXR3b3JrLXNl''@;'; put 'put ''dHRpbmdzIjpGLkNsclNoYXBlTmV0d29ya1NldHRpbmdzLCJuZXR3b3JrLXN3aXRjaCI6Ri5DbHJTaGFwZU5ldHdvcmtTd2l0Y2gscm91dGVyOkYuQ2xyU2hhcGVSb3V0ZXIsdm06Ri5DbHJTaGFwZVZNLCJ2bXctYXBwIjpGLkNsclNoYXBlVk1XQXBwLGNlcnRpZmljYXRlOkYuQ2xyU2hhcGVD''@;'; put 'put ''ZXJ0aWZpY2F0ZSxhcmNoaXZlOkYuQ2xyU2hhcGVBcmNoaXZlLHVuYXJjaGl2ZTpGLkNsclNoYXBlVW5hcmNoaXZlLGNvbm5lY3Q6Ri5DbHJTaGFwZUNvbm5lY3QsZGlzY29ubmVjdDpGLkNsclNoYXBlRGlzY29ubmVjdCxsaW5rOkYuQ2xyU2hhcGVMaW5rLHVubGluazpGLkNsclNoYXBlVW5s''@;'; put 'put ''aW5rLCJjbG91ZC1uZXR3b3JrIjpGLkNsclNoYXBlQ2xvdWROZXR3b3JrLCJjbG91ZC1zY2FsZSI6Ri5DbHJTaGFwZUNsb3VkU2NhbGUsImNsb3VkLXRyYWZmaWMiOkYuQ2xyU2hhcGVDbG91ZFRyYWZmaWMsImNvbnRyb2wtbHVuIjpGLkNsckNvbnRyb2xMdW4sZGVwbG95OkYuQ2xyU2hhcGVE''@;'; put 'put ''ZXBsb3ksaGVsaXg6Ri5DbHJTaGFwZUhlbGl4LGZsYXNrOkYuQ2xyU2hhcGVGbGFzayxhZG1pbmlzdHJhdG9yOkYuQ2xyU2hhcGVBZG1pbmlzdHJhdG9yLCJoYXJkLWRyaXZlIjpGLkNsclNoYXBlSGFyZERyaXZlLCJoYXJkLWRyaXZlLWRpc2tzIjpGLkNsclNoYXBlSGFyZERyaXZlRGlza3Ms''@;'; put 'put ''bnZtZTpGLkNsclNoYXBlTlZNZSxzc2Q6Ri5DbHJTaGFwZVNTRCxibHVldG9vdGg6Ri5DbHJTaGFwZUJsdWV0b290aCwiYmx1ZXRvb3RoLW9mZiI6Ri5DbHJTaGFwZUJsdWV0b290aE9mZiwicHJvY2Vzcy1vbi12bSI6Ri5DbHJTaGFwZVByb2Nlc3NPblZNLCJhc3NpZ24tdXNlciI6Ri5DbHJT''@;'; put 'put ''aGFwZUFzc2lnblVzZXIsYXRvbTpGLkNsclNoYXBlQXRvbSwiYmFyLWNvZGUiOkYuQ2xyU2hhcGVCYXJDb2RlLCJjZC1kdmQiOkYuQ2xyU2hhcGVDZER2ZCxjb250YWluZXI6Ri5DbHJTaGFwZUNvbnRhaW5lciwiY29udGFpbmVyLXZvbHVtZSI6Ri5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZSwi''@;'; put 'put ''ZmlsZS1zaGFyZSI6Ri5DbHJTaGFwZUZpbGVTaGFyZSwicXItY29kZSI6Ri5DbHJTaGFwZVFyQ29kZSx1c2I6Ri5DbHJTaGFwZVVzYixyYWRhcjpGLkNsclNoYXBlUmFkYXIsY2FwYWNpdG9yOkYuQ2xyU2hhcGVDYXBhY2l0b3Isc3F1aWQ6Ri5DbHJTaGFwZVNxdWlkLGluZHVjdG9yOkYuQ2xy''@;'; put 'put ''U2hhcGVJbmR1Y3RvcixyZXNpc3RvcjpGLkNsclNoYXBlUmVzaXN0b3IsImhvc3QtZ3JvdXAiOkYuQ2xyU2hhcGVIb3N0R3JvdXAsInN0b3JhZ2UtYWRhcHRlciI6Ri5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyLCJub2RlLWdyb3VwIjpGLkNsclNoYXBlTm9kZUdyb3VwLG5vZGVzOkYuQ2xyU2hh''@;'; put 'put ''cGVOb2RlcyxuYW1lc3BhY2U6Ri5DbHJTaGFwZU5hbWVzcGFjZSxub2RlOkYuQ2xyU2hhcGVOb2RlLHBvZDpGLkNsclNoYXBlUG9kLCJtZWRpYS1jaGFuZ2VyIjpGLkNsclNoYXBlTWVkaWFDaGFuZ2VyLCJ0YXBlLWRyaXZlIjpGLkNsclNoYXBlVGFwZURyaXZlLGFuaW1hdGlvbjpGLkNsclNo''@;'; put 'put ''YXBlQW5pbWF0aW9uLCJjaS1jZCI6Ri5DbHJTaGFwZUNpQ2QsImZpbGUtc2hhcmUtMiI6Ri5DbHJTaGFwZUZpbGVTaGFyZTJ9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInNlcnZlciIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXMu''@;'; put 'put ''aG9zdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImNvbW1hbmQiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLnRlcm1pbmFsKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywibW9iaWxlLXBob25l''@;'; put 'put ''IiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5tb2JpbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJsaWNlbnNlIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlcy5jZXJ0aWZpY2F0ZSkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsImRpc2Nvbm5lY3RlZCIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRlY2hub2xvZ3lTaGFwZXNbIm5vLXdpZmkiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRlY2hub2xvZ3lTaGFwZXMsInJlY2VpdmVyIiwoMCx4LmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicGhvbmUtaGFuZHNldCJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZGVzaWduIiwoMCx4LmRlc2NyaXB0b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1sicnVsZXItcGVuY2lsIl0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoRi5UZWNobm9sb2d5U2hhcGVzLCJkbmEiLCgwLHguZGVzY3JpcHRvckNvbmZpZykoRi5UZWNobm9sb2d5U2hhcGVzLmhlbGl4KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVGVjaG5vbG9neVNoYXBlcywiZm9sZGVyLXNoYXJlIiwoMCx4LmRlc2NyaXB0''@;'; put 'put ''b3JDb25maWcpKEYuVGVjaG5vbG9neVNoYXBlc1siZmlsZS1zaGFyZSJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGVjaG5vbG9neVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25z''@;'; put 'put ''L3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGV4dC1lZGl0LXNoYXBlcy50''@;'; put 'put ''cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuVGV4dEVkaXRTaGFwZXM9Ri5DbHJTaGFwZVN1cGVyc2NyaXB0PUYuQ2xyU2hhcGVTdWJzY3JpcHQ9Ri5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Ri5DbHJTaGFwZUluZGVudD1GLkNsclNoYXBlT3V0ZGVudD1GLkNsclNoYXBlSGlnaGxpZ2h0''@;'; put 'put ''ZXI9Ri5DbHJTaGFwZVRleHRDb2xvcj1GLkNsclNoYXBlTGFuZ3VhZ2U9Ri5DbHJTaGFwZUFsaWduVG9wPUYuQ2xyU2hhcGVBbGlnbk1pZGRsZT1GLkNsclNoYXBlQWxpZ25Cb3R0b209Ri5DbHJTaGFwZVVuZGVybGluZT1GLkNsclNoYXBlVGV4dD1GLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9''@;'; put 'put ''Ri5DbHJTaGFwZUJsb2NrUXVvdGU9Ri5DbHJTaGFwZVBhaW50Um9sbGVyPUYuQ2xyU2hhcGVOdW1iZXJMaXN0PUYuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PUYuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1GLkNsclNoYXBlSXRhbGljPUYuQ2xyU2hhcGVBbGlnblJpZ2h0PUYuQ2xyU2hhcGVBbGlnbkxl''@;'; put 'put ''ZnQ9Ri5DbHJTaGFwZUFsaWduQ2VudGVyPUYuQ2xyU2hhcGVGb250U2l6ZT1GLkNsclNoYXBlQ2hlY2tib3hMaXN0PUYuQ2xyU2hhcGVDZW50ZXJUZXh0PUYuQ2xyU2hhcGVCdWxsZXRMaXN0PUYuQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeD1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2Vu''@;'; put 'put ''ZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVCb2xkPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi40MywxNy41NGE0LjY3LDQuNjcsMCwwLDAsMi44LTQuMzd2LS4wNmE0LjQzLDQuNDMsMCwwLDAtMS4z''@;'; put 'put ''MS0zLjI1LDcuMDksNy4wOSwwLDAsMC01LjEzLTEuNzNoLTdBMS43MSwxLjcxLDAsMCwwLDEwLDkuODZWMjZhMS43MiwxLjcyLDAsMCwwLDEuNzQsMS43NGg3LjMzYzQuMzcsMCw3LjI1LTEuODgsNy4yNS01LjM4VjIyLjNDMjYuMzIsMTkuNjQsMjQuNzMsMTguMzIsMjIuNDMsMTcuNTRaTTEz''@;'; put 'put ''LjY4LDExLjRoNC41NGMyLDAsMy4xNS44OSwzLjE1LDIuMzN2LjA2YzAsMS42OC0xLjM2LDIuNDktMy4zOCwyLjQ5SDEzLjY4Wk0yMi4zNywyMmMwLDEuNTktMS4zMSwyLjQzLTMuNDYsMi40M0gxMy42OFYxOS42Mmg1YzIuNDksMCwzLjY5Ljg4LDMuNjksMi4zN1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVCdWxsZXRMaXN0PSgwLHguY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjUuMjEiIGN5PSI5LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSI1''@;'; put 'put ''LjIxIiBjeT0iMTcuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIyNS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjQyLDlh''@;'; put 'put ''MSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxGLkNsclNoYXBlQ2VudGVyVGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuODgs''@;'; put 'put ''OEg1LjEyYTEuMSwxLjEsMCwwLDAsMCwyLjJIMzAuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNS41LDE2LjJhMS4xLDEuMSwwLDEsMCwwLTIuMmgtMTVhMS4xLDEuMSwwLDEsMCwwLDIuMloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMC4yNSwyMEg1Ljc1YTEuMSwxLjEsMCwwLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh''@;'; put 'put ''dGggZD0iTTI0Ljg4LDI2SDExLjEyYTEuMSwxLjEsMCwxLDAsMCwyLjJIMjQuODhhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVDaGVja2JveExpc3Q9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjQzLDE2SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS40MywyNEgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNMTUuNDUsMTBoMTZhMSwxLDAsMCwwLDAtMmgtMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTcuNSwzLjQyYTEuMDksMS4wOSwwLDAsMC0xLjU1LDBMNy44OSwxMS40OCw0LjUxLDcuODRBMS4x''@;'; put 'put ''LDEuMSwwLDEsMCwyLjksOS4zNGw0Ljk0LDUuM0wxNy41LDVBMS4xLDEuMSwwLDAsMCwxNy41LDMuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlRm9udFNpemU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIxLDkuMDhB''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLDE5Ljg2LDhINC42MmExLjEsMS4xLDAsMSwwLDAsMi4xOUgxMVYyN2ExLjA5LDEuMDksMCwwLDAsMi4xNywwVjEwLjE5aDYuNjlBMS4xNCwxLjE0LDAsMCwwLDIxLDkuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMzAuNjcsMTVIMjEuMTVhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMjVWMjYuNWExLjA5LDEuMDksMCwwLDAsMi4xNywwVjE3LjIzaDMuNTRhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBl''@;'; put 'put ''QWxpZ25DZW50ZXI9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDIwSDE5VjE2aDZhMSwxLDAsMCwwLDEtMVY3YTEsMSwwLDAsMC0xLTFIMTlWMmExLDEsMCwwLDAtMiwwVjZIMTFhMSwxLDAsMCwwLTEsMXY4YTEsMSwwLDAsMCwxLDFoNnY0SDVhMSwxLDAsMCwwLTEsMXY4YTEsMSww''@;'; put 'put ''LDAsMCwxLDFIMTd2NGExLDEsMCwwLDAsMiwwVjMwSDMxYTEsMSwwLDAsMCwxLTFWMjFBMSwxLDAsMCwwLDMxLDIwWk0xMiwxNFY4SDI0djZaTTMwLDI4SDZWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxGLkNsclNoYXBlQWxpZ25MZWZ0''@;'; put 'put ''PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDFBMSwxLDAsMCwwLDQsMlYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDUsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwyMEg4VjMwSDMxYTEsMSwwLDAsMCwxLTFW''@;'; put 'put ''MjFBMSwxLDAsMCwwLDMxLDIwWm0tMSw4SDEwVjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDE1VjdhMSwxLDAsMCwwLTEtMUg4VjE2SDIzQTEsMSwwLDAsMCwyNCwxNVptLTItMUgxMFY4SDIyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUFsaWduUmlnaHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDFhMSwxLDAsMCwwLTEsMVYzNGExLDEsMCwwLDAsMiwwVjJBMSwxLDAsMCwwLDMxLDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNCwyMXY4YTEsMSwwLDAsMCwxLDFIMjhWMjBINUExLDEsMCwwLDAsNCwyMVptMiwxSDI2djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMiw3djhhMSwxLDAsMCwwLDEsMUgy''@;'; put 'put ''OFY2SDEzQTEsMSwwLDAsMCwxMiw3Wm0yLDFIMjZ2NkgxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLEYuQ2xyU2hhcGVJdGFsaWM9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjQyLDhIMTcuMWExLjEsMS4xLDAsMSwwLDAsMi4xOWgy''@;'; put 'put ''LjEzTDEzLjExLDI1LjU1SDEwLjQ3YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDE3LjhhMS4xLDEuMSwwLDEsMCwwLTIuMTlIMTUuNTFsNi4xMy0xNS4zNmgyLjc4YTEuMSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksRi5D''@;'; put 'put ''bHJTaGFwZUp1c3RpZnlUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDEwLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMkg2YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEuNzUs''@;'; put 'put ''MTRINmExLjEsMS4xLDAsMSwwLDAsMi4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzEuMTIsMjBINi42MmExLjEsMS4xLDAsMSwwLDAsMi4yaDI0LjVhMS4xLDEuMSwwLDEsMCwwLTIu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC40NSwyNS44M0g2LjZhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC40NWExLjEsMS4xLDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi''@;'; put 'put ''IC8+JyksRi5DbHJTaGFwZUFsaWduTGVmdFRleHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjI1LDI2SDZ2Mi4ySDIwLjI1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMjBINnYy''@;'; put 'put ''LjJIMjhBMS4xLDEuMSwwLDAsMCwyOCwyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi42LDE1LjFBMS4xLDEuMSwwLDAsMCwyMS41LDE0SDZ2Mi4ySDIxLjVBMS4xLDEuMSwwLDAsMCwyMi42LDE1LjFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjkuMjUsOEg2djIuMkgyOS4yNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksRi5DbHJTaGFwZU51bWJlckxpc3Q9KDAseC5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI1LjQ2IDcuNDEgNS40NiAxMS41NiA2LjY1IDExLjU2IDYuNjUgNi4wNSA1LjcgNi4wNSA0LjA1IDcuMTYgNC41MiA4IDUuNDYgNy40MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuNTcsMTQu''@;'; put 'put ''ODJhLjc2Ljc2LDAsMCwxLC44My43M2MwLC4zOC0uMjEuNzQtLjg3LDEuMjdsLTIsMS41N3YxSDcuNjdWMTguMjhINS4zM2wxLS43N2MxLS43LDEuMjgtMS4yNywxLjI4LTJhMS44MywxLjgzLDAsMCwwLTItMS43NiwyLjYzLDIuNjMsMCwwLDAtMi4xNCwxLjA4bC43Ni43M0ExLjc1LDEuNzUs''@;'; put 'put ''MCwwLDEsNS41NywxNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik02LjU2LDI0LjY0YTEuMzIsMS4zMiwwLDAsMCwxLTEuMjdjMC0uODctLjc4LTEuNTEtMi0xLjUxYTIuNjEsMi42MSwwLDAsMC0yLjEsMWwuNjkuNzJhMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwxLDEuMy0uNjRjLjU0LDAsLjkyLjI2LjkyLjY2cy0uMzYuNjItMSwuNjJINC43OXYxaC42NGMuNzQsMCwxLjA3LjIxLDEuMDcuNjNzLS4zNS42OC0xLC42OGEyLDIsMCwwLDEtMS40Ni0uNjVsLS43Ljc4YTIuODUsMi44NSwwLDAsMCwyLjIxLjkzYzEuMjksMCwyLjEzLS42OSwy''@;'; put 'put ''LjEzLTEuNjRBMS4zMywxLjMzLDAsMCwwLDYuNTYsMjQuNjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLEYuQ2xyU2hhcGVQYWludFJvbGxlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMTBWNGEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNHY2YTIsMiwwLDAsMCwyLDJIMjlBMiwyLDAsMCwwLDMx''@;'; put 'put ''LDEwWk02LDRIMjl2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yOUwxOC43LDE2LjU0YTEsMSwwLDAsMC0uNywxVjE5SDE2VjMzYTIsMiwwLDAsMCwyLDJoMmEyLDIsMCwwLDAsMi0yVjE5SDIwdi0uNzNMMzMu''@;'; put 'put ''MywxNGExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMCwzM0gxOFYyMWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHJlY3QgeD0iNCIgeT0iMiIgd2lkdGg9IjI3IiBoZWlnaHQ9IjEwIiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDZIMzJ2Ni4yNEwxOC43MSwxNi40NWExLDEsMCwwLDAtLjcxLDFWMTlIMTZWMzRhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTlIMjB2LS44MkwzMy4yOSwxNEExLDEsMCwwLDAsMzQsMTNWN0ExLDEsMCww''@;'; put 'put ''LDAsMzMsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUJsb2NrUXVvdGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTExLjg2LDE2LjU1YTQuMzEsNC4zMSwwLDAsMC0yLjExLjU2LDE0LjQ0LDE0LjQ0LDAsMCwxLDQuMzYtNiwx''@;'; put 'put ''LjEsMS4xLDAsMCwwLTEuNC0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NEE1LjA4LDUuMDgsMCwwLDAsMTAsMjQuNThhNC40LDQuNCwwLDAsMCwxLjg4LjQ0LDQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMjMsMTYuNTVhNC4yOSw0LjI5LDAsMCwwLTIuMTEuNTYsMTQuNSwxNC41LDAsMCwxLDQuMzUtNiwxLjEsMS4xLDAsMSwwLTEuMzktMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRhNS4wOCw1LjA4LDAsMCwwLDMsNC42MUE0LjM3LDQuMzcsMCwwLDAsMjMsMjVh''@;'; put 'put ''NC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNjUsMjcuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMjZI''@;'; put 'put ''MTUuNzVBMS4xLDEuMSwwLDAsMCwxNC42NSwyNy4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuOSwyMS4xQTEuMSwxLjEsMCwwLDAsOCwyMi4ySDMwVjIwSDhBMS4xLDEuMSwwLDAsMCw2LjksMjEuMVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMy40LDE1LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjE0SDE0LjVBMS4xLDEuMSwwLDAsMCwxMy40LDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJN''@;'; put 'put ''Ni43NSw4YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzBWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLEYuQ2xyU2hhcGVUZXh0PSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xOSw4Ljg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMWgtLjEyYTEu''@;'; put 'put ''NDYsMS40NiwwLDAsMC0xLjQyLDFMMS4xNCwyNi41NmExLjI5LDEuMjksMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMiwxLjEyLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4w''@;'; put 'put ''OCwxLjY0LDEuNjQsMCwwLDAtLjE0LS41N1pNNi4wOCwyMC43MWw0LjU5LTEwLjIyLDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yNCwxNC43OEE2LjM1LDYuMzUsMCwwLDAsMjcuNiwxMy4yYTExLjM2LDExLjM2''@;'; put 'put ''LDAsMCwwLTQuNywxLDEsMSwwLDAsMC0uNTguODksMSwxLDAsMCwwLC45NC45MiwxLjIzLDEuMjMsMCwwLDAsLjM5LS4wOCw4Ljg3LDguODcsMCwwLDEsMy43Mi0uODFjMi43LDAsNC4yOCwxLjMzLDQuMjgsMy45MnYuNWExNS4yOSwxNS4yOSwwLDAsMC00LjQyLS42MWMtMy42NCwwLTYuMTQs''@;'; put 'put ''MS42MS02LjE0LDQuNjR2LjA1YzAsMi45NSwyLjcsNC40OCw1LjM3LDQuNDhhNi4yOSw2LjI5LDAsMCwwLDUuMTktMi40OFYyNi45YTEsMSwwLDAsMCwxLDEsMSwxLDAsMCwwLDEtMS4wNlYxOUE1LjcxLDUuNzEsMCwwLDAsMzIuMjQsMTQuNzhabS0uNTYsNy43YzAsMi4yOC0yLjE3LDMuODkt''@;'; put 'put ''NC44MSwzLjg5LTEuOTQsMC0zLjYxLTEuMDYtMy42MS0yLjg2di0uMDZjMC0xLjgsMS41LTMsNC4yLTNhMTUuMiwxNS4yLDAsMCwxLDQuMjIuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxGLkNsclNoYXBlVW5kZXJsaW5lPSgwLHguY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xOCwyOC4xN2M1LjA4LDAsOC40OC0zLjA4LDguNDgtOVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44YzAsNC40NC0yLjM4LDYuNzEtNi4xMyw2Ljcxcy02LjIxLTIuNDctNi4yMS02Ljg1VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhDOS41''@;'; put 'put ''MywyNS4wOSwxMywyOC4xNywxOCwyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMSwzMEg1YTEuMTEsMS4xMSwwLDAsMCwwLDIuMjFIMzFBMS4xMSwxLjExLDAsMCwwLDMxLDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZUFsaWduQm90dG9tPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwzMEgyYTEsMSwwLDAsMCwwLDJIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xNiw1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjI4SDE2Wk0xNCwyNkg4VjZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwxM2ExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDFWMjhIMzBaTTI4LDI2''@;'; put 'put ''SDIyVjE0aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlQWxpZ25NaWRkbGU9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDE3SDMwVjExYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMXY2SDE2VjVhMSwxLDAs''@;'; put 'put ''MCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMTdIMmExLDEsMCwwLDAsMCwySDZWMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNHY2YTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDRhMSwxLDAsMCwwLDAtMlpNMTQsMzBIOFY2aDZabTE0LTZIMjJWMTJoNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLEYuQ2xyU2hhcGVBbGlnblRvcD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsNEgyQTEsMSwwLDAsMCwyLDZIMzRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhINlpNOCwxMGg2VjMwSDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMjNhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWOEgyMFptMi0xM2g2VjIySDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksRi5DbHJTaGFwZUxhbmd1YWdlPSgwLHguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzSDE0djVoMlY1aDE0YzAuNiwwLDEsMC40LDEsMXYxMWMwLDAuNi0wLjQs''@;'; put 'put ''MS0xLDFIMTd2N2gtNS4zTDgsMjcuOVYyNUg1Yy0wLjYsMC0xLTAuNC0xLTFWMTNjMC0wLjYsMC40LTEsMS0xaDEzdi0ySDVcblx0XHRjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMUgxOXYtN2gxMWMxLjcsMCwzLTEuMywzLTNWNkMzMyw0LjMsMzEu''@;'; put 'put ''NywzLDMwLDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi4yLDIyLjloMi40bDAuNi0xLjZoMy4xbDAuNiwxLjZoMi40TDExLjksMTRIOS41TDYuMiwyMi45eiBNMTAuNywxNi41bDEsMy4xaC0yTDEwLjcsMTYuNXoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwxN2MxLjEsMCwyLjYtMC4zLDQtMWMxLjQsMC43LDMsMSw0LDF2LTJjMCwwLTEsMC0yLjEtMC40YzEuMi0xLjIsMi4xLTMsMi4xLTUuNlY4aC0zVjZoLTJ2MmgtM3YyaDUuOVxuXHRcdGMtMC4yLDEuOC0x''@;'; put 'put ''LDIuOS0xLjksMy42Yy0wLjYtMC41LTEuMi0xLjItMS42LTIuMWgtMi4xYzAuNCwxLjMsMSwyLjMsMS44LDMuMUMyMS4xLDE1LDIwLjIsMTUsMjAsMTVWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cG9seWdvbiBwb2ludHM9IjExLDE2LjUgMTAs''@;'; put 'put ''MTkuNiAxMiwxOS42IDExLDE2LjUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjMsM2gtMTZ2NWg0djJoLTEzYy0xLjcsMC0zLDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFoNi43di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2XG5cdFx0QzMzLjMsNC4zLDMyLDMsMzAuMywzeiBNMTMuMSwyMi45bC0wLjUtMS42SDkuNWwtMC42LDEuNkg2LjVMOS44LDE0aDIuNGwzLjMsOC45TDEzLjEsMjIuOXogTTI4LjMsMTV2MmMtMS4zLDAtMi43LTAuNC0zLjktMVxuXHRcdGMtMS4yLDAuNi0yLjYsMC45LTQsMWwt''@;'; put 'put ''MC4xLTJjMC43LDAsMS40LTAuMSwyLjEtMC4zYy0wLjktMC45LTEuNS0yLTEuOC0zLjJoMi4xYzAuMywwLjksMC45LDEuNiwxLjYsMi4yYzEuMS0wLjksMS44LTIuMiwxLjktMy43XG5cdFx0aC02VjhoM1Y2aDJ2MmgzLjNsMC4xLDFjMC4xLDIuMS0wLjcsNC4yLTIuMiw1LjdDMjcuMSwxNC45''@;'; put 'put ''LDI3LjcsMTUsMjguMywxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksRi5DbHJTaGFwZVRleHRDb2xvcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTkuNDcsMy44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFIMThhMS40NSwxLjQ1LDAsMCwwLTEu''@;'; put 'put ''NDIsMUw4LjQyLDIxLjU2YTEuMzUsMS4zNSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjExLDEuMTEsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNTksMS41OSwwLDAs''@;'; put 'put ''MC0uMTQtLjU3Wk0xMy4zNiwxNS43MSwxOCw1LjQ5bDQuNiwxMC4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjQuMDYiIHk9IjI1IiB3aWR0aD0iMjgiIGhlaWdodD0iOCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVIaWdobGlnaHRlcj0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuODIsMjYuMDZhMSwxLDAsMCwxLS43MS0uMjlMOC42NywxOS4zM2ExLDEsMCwwLDEtLjI5LS43MSwxLDEsMCwwLDEsLjI5LS43MUwyMywzLjU0''@;'; put 'put ''YTUuNTUsNS41NSwwLDEsMSw3Ljg1LDcuODZMMTYuNTMsMjUuNzdBMSwxLDAsMCwxLDE1LjgyLDI2LjA2Wm0tNS03LjQ0LDUsNUwyOS40OCwxMGEzLjU0LDMuNTQsMCwwLDAsMC01LDMuNjMsMy42MywwLDAsMC01LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIvPlxuICA8cGF0aCBkPSJNMTAuMzgsMjguMjhBMSwxLDAsMCwxLDkuNjcsMjhMNi40NSwyNC43N2ExLDEsMCwwLDEtLjIyLTEuMDlsMi4yMi01LjQ0YTEsMSwwLDAsMSwxLjYzLS4zM2w2LjQ1LDYuNDRBMSwxLDAsMCwxLDE2LjIsMjZsLTUuNDQsMi4yMkExLjMzLDEuMzMsMCwwLDEsMTAu''@;'; put 'put ''MzgsMjguMjhaTTguMzMsMjMuODJsMi4yOSwyLjI4LDMuNDMtMS40TDkuNzQsMjAuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNOC45NCwzMGgtNWExLDEsMCwwLDEtLjg0LTEuNTVsMy4yMi00Ljk0YTEsMSwwLDAsMSwxLjU1''@;'; put 'put ''LS4xNmwzLjIxLDMuMjJhMSwxLDAsMCwxLC4wNiwxLjM1TDkuNywyOS42NEExLDEsMCwwLDEsOC45NCwzMFpNNS43OCwyOEg4LjQ3TDksMjcuMzRsLTEuNy0xLjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIzLjA2IiB5PSIzMSIg''@;'; put 'put ''d2lkdGg9IjMwIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+JyksRi5DbHJTaGFwZU91dGRlbnQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5''@;'; put 'put ''aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTkuNTYsMjIuNTRhMSwxLDAsMCwxLS43LS4z''@;'; put 'put ''TDQuNjEsMThsNC4yNS00LjI0YTEsMSwwLDAsMSwxLjQxLDEuNDFMNy40NCwxOGwyLjgzLDIuODNhMSwxLDAsMCwxLS43MSwxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxGLkNsclNoYXBlSW5kZW50PSgwLHguY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI0aC0xN2Ex''@;'; put 'put ''LDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik01LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0xLjcxTDcuNjgsMTgsNC44NiwxNS4xN2ExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBMMTAuNTEsMTgsNi4yNywyMi4yNEExLDEsMCwwLDEsNS41NiwyMi41NFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksRi5DbHJTaGFwZVN0cmlrZXRocm91Z2g9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjg4LDE5LjkyaC0zMGExLDEsMCwxLDEsMC0yaDMwYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNy4yNywxNS44NmExMi45LDEyLjksMCwwLDEsMS4yOS0uNTJBNS42OSw1LjY5LDAsMCwxLDEwLjM5LDE1YTMuMTgsMy4xOCwwLDAsMSwyLjc1LDEuMTFBNC40NCw0LjQ0LDAsMCwxLDE0LDE4Ljg1di40OWExMy44MywxMy44MywwLDAsMC00''@;'; put 'put ''LjI5LS43NCw2LjE5LDYuMTksMCwwLDAtMi41OS41NEE1LDUsMCwwLDAsNS44MSwyMEgxNS44OFYxOC44NWE1LjY3LDUuNjcsMCwwLDAtMS4zNy00LDUuMTYsNS4xNiwwLDAsMC00LTEuNDksMTAsMTAsMCwwLDAtMy45MS44OC44Ny44NywwLDAsMC0uNDQsMS4xOEEuODQuODQsMCwwLDAsNy4y''@;'; put 'put ''NywxNS44NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMSwyMGE1Ljk0LDUuOTQsMCwwLDEsLjU0LTIuMzEsNC4zNSw0LjM1LDAsMCwxLDEuNTgtMS44Myw0LjI3LDQuMjcsMCwwLDEsNC41OSwwLDQuNDcsNC40NywwLDAsMSwx''@;'; put 'put ''LjU3LDEuODNBNi4xMiw2LjEyLDAsMCwxLDI5Ljg1LDIwaDJhNy43Myw3LjczLDAsMCwwLS43OC0zLjE5LDYsNiwwLDAsMC0yLjE4LTIuNDUsNS43NCw1Ljc0LDAsMCwwLTMuMS0uODgsNS4zOSw1LjM5LDAsMCwwLTIuOC43Myw1LjU1LDUuNTUsMCwwLDAtMiwyLjA1VjEwYS44Ny44NywwLDAs''@;'; put 'put ''MC0uODYtLjg2SDIwYS44Ny44NywwLDAsMC0uODYuODZWMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjkuNjcsMjJhNS42MSw1LjYxLDAsMCwxLS4zNiwxLjA3LDQuNDcsNC40NywwLDAsMS0xLjU3LDEuODUsNC4zMiw0LjMy''@;'; put 'put ''LDAsMCwxLTQuNTksMCw0LjM1LDQuMzUsMCwwLDEtMS41OC0xLjg1QTUuNjQsNS42NCwwLDAsMSwyMS4yLDIySDE5LjA5djQuMTNBLjg3Ljg3LDAsMCwwLDIwLDI3aC4yYS44Ny44NywwLDAsMCwuODYtLjg2VjI0LjUxYTUuNTgsNS41OCwwLDAsMCwyLDIuMDYsNS40OCw1LjQ4LDAsMCwwLDIu''@;'; put 'put ''OC43Miw1LjY2LDUuNjYsMCwwLDAsMy4xLS44OEE1Ljg4LDUuODgsMCwwLDAsMzEuMDksMjQsNy4wOSw3LjA5LDAsMCwwLDMxLjczLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE0LDIydi43NmEzLjM0LDMuMzQsMCwwLDEt''@;'; put 'put ''MS42MiwyLDUuMzQsNS4zNCwwLDAsMS0yLjY5LjcyLDMuNzgsMy43OCwwLDAsMS0yLjM2LS43LDIuMjQsMi4yNCwwLDAsMS0uOTQtMS45LDIuMjksMi4yOSwwLDAsMSwuMi0uOTFINC42MmE0LDQsMCwwLDAtLjEzLDEsMy44MywzLjgzLDAsMCwwLDEuMzUsMy4wNkE1LjE1LDUuMTUsMCwwLDAs''@;'; put 'put ''OS4zMSwyNy4yLDYsNiwwLDAsMCwxMiwyNi41N2E0LjYyLDQuNjIsMCwwLDAsMi0xLjc0VjI2YS44Ni44NiwwLDAsMCwuODYuODZIMTVhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLEYuQ2xyU2hhcGVTdWJz''@;'; put 'put ''Y3JpcHQ9KDAseC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjU1LDE4bDYuOCw4LjZhMS4xNywxLjE3LDAsMCwxLS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NEwxMywxOS45MSw2LjYsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45''@;'; put 'put ''TDExLjU1LDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4xNywxLjE3LDAsMCwxLDYuNjMsOGw2LjQ0LDguMTNMMTkuNSw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjMsMzEuOCwyNy40OSwyOGE5LjksOS45LDAsMCwwLDEuODgtMi4wNUEzLjQ0LDMuNDQsMCwwLDAsMzAsMjRhMi4zNSwyLjM1LDAsMCwwLS4zNS0xLjI3LDIuNDQsMi40NCwwLDAsMC0xLS44NCwyLjksMi45LDAsMCwwLTEuMjYtLjI4LDMu''@;'; put 'put ''MzYsMy4zNiwwLDAsMC0xLjgzLjUsNS42NCw1LjY0LDAsMCwwLTEuNDgsMS40MmwtMS0uODFhNS4xMSw1LjExLDAsMCwxLDQuMzYtMi4zNyw0LjM1LDQuMzUsMCwwLDEsMiwuNDUsMy40MywzLjQzLDAsMCwxLDIsMy4xOCw0LjQ1LDQuNDUsMCwwLDEtLjY4LDIuMzUsMTAuOSwxMC45LDAsMCwx''@;'; put 'put ''LTIuMjQsMi40NmwtMy4yNCwyLjgxSDMxLjVWMzNIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLEYuQ2xyU2hhcGVTdXBlcnNjcmlwdD0oMCx4LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNDMsMThsNi43OSw4LjZhMS4xNywxLjE3LDAsMCwx''@;'; put 'put ''LS45MiwxLjloMGExLjE3LDEuMTcsMCwwLDEtLjkyLS40NGwtNi40NC04LjEzTDYuNDcsMjhhMS4xNywxLjE3LDAsMCwxLS45Mi40NGgwYTEuMTcsMS4xNywwLDAsMS0uOTItMS45TDExLjQzLDE4bC02LjgtOC42YTEuMTcsMS4xNywwLDAsMSwuOTItMS45aDBBMS4yLDEuMiwwLDAsMSw2LjUx''@;'; put 'put ''LDhsNi40Myw4LjEzTDE5LjM4LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMi44NSwxNC40N2w0LjUxLTMuODVhOS4zNyw5LjM3LDAs''@;'; put 'put ''MCwwLDEuODgtMiwzLjQzLDMuNDMsMCwwLDAsLjU5LTEuODYsMi4yNywyLjI3LDAsMCwwLS4zNi0xLjI3LDIuMzgsMi4zOCwwLDAsMC0uOTUtLjgzLDIuNzcsMi43NywwLDAsMC0xLjI2LS4yOSwzLjM5LDMuMzksMCwwLDAtMS44My41LDUuODMsNS44MywwLDAsMC0xLjQ5LDEuNDJsLTEtLjgx''@;'; put 'put ''YTUuMTIsNS4xMiwwLDAsMSw0LjM2LTIuMzcsNC4zNiw0LjM2LDAsMCwxLDIsLjQ1LDMuNDcsMy40NywwLDAsMSwyLDMuMThBNC40NCw0LjQ0LDAsMCwxLDMwLjU4LDlhMTEuMTQsMTEuMTQsMCwwLDEtMi4yNCwyLjQ2TDI1LjEsMTQuMzFoNi4yOHYxLjMzSDIyLjg1WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxGLlRleHRFZGl0U2hhcGVzPXtib2xkOkYuQ2xyU2hhcGVCb2xkLCJidWxsZXQtbGlzdCI6Ri5DbHJTaGFwZUJ1bGxldExpc3QsImNoZWNrYm94LWxpc3QiOkYuQ2xyU2hhcGVDaGVja2JveExpc3QsIm51bWJlci1saXN0IjpGLkNs''@;'; put 'put ''clNoYXBlTnVtYmVyTGlzdCwiZm9udC1zaXplIjpGLkNsclNoYXBlRm9udFNpemUsaXRhbGljOkYuQ2xyU2hhcGVJdGFsaWMsImp1c3RpZnktdGV4dCI6Ri5DbHJTaGFwZUp1c3RpZnlUZXh0LCJjZW50ZXItdGV4dCI6Ri5DbHJTaGFwZUNlbnRlclRleHQsImFsaWduLWxlZnQtdGV4dCI6Ri5D''@;'; put 'put ''bHJTaGFwZUFsaWduTGVmdFRleHQsImFsaWduLXJpZ2h0LXRleHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dCwicGFpbnQtcm9sbGVyIjpGLkNsclNoYXBlUGFpbnRSb2xsZXIsImJsb2NrLXF1b3RlIjpGLkNsclNoYXBlQmxvY2tRdW90ZSx0ZXh0OkYuQ2xyU2hhcGVUZXh0LHVuZGVybGlu''@;'; put 'put ''ZTpGLkNsclNoYXBlVW5kZXJsaW5lLCJhbGlnbi1jZW50ZXIiOkYuQ2xyU2hhcGVBbGlnbkNlbnRlciwiYWxpZ24tbGVmdCI6Ri5DbHJTaGFwZUFsaWduTGVmdCwiYWxpZ24tcmlnaHQiOkYuQ2xyU2hhcGVBbGlnblJpZ2h0LCJhbGlnbi1ib3R0b20iOkYuQ2xyU2hhcGVBbGlnbkJvdHRvbSwi''@;'; put 'put ''YWxpZ24tbWlkZGxlIjpGLkNsclNoYXBlQWxpZ25NaWRkbGUsImFsaWduLXRvcCI6Ri5DbHJTaGFwZUFsaWduVG9wLGxhbmd1YWdlOkYuQ2xyU2hhcGVMYW5ndWFnZSwidGV4dC1jb2xvciI6Ri5DbHJTaGFwZVRleHRDb2xvcixoaWdobGlnaHRlcjpGLkNsclNoYXBlSGlnaGxpZ2h0ZXIsaW5k''@;'; put 'put ''ZW50OkYuQ2xyU2hhcGVJbmRlbnQsb3V0ZGVudDpGLkNsclNoYXBlT3V0ZGVudCxzdHJpa2V0aHJvdWdoOkYuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoLHN1YnNjcmlwdDpGLkNsclNoYXBlU3Vic2NyaXB0LHN1cGVyc2NyaXB0OkYuQ2xyU2hhcGVTdXBlcnNjcmlwdH0sdHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKEYuVGV4dEVkaXRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RyYXZlbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLlRyYXZlbFNoYXBlcz1GLkNsclNoYXBlT25Ib2xpZGF5PUYuQ2xyU2hhcGVU''@;'; put 'put ''cmFpbGVyPUYuQ2xyU2hhcGVGZXJyeT1GLkNsclNoYXBlQ2FyYXZhbj1GLkNsclNoYXBlQ2FtcGVydmFuPUYuQ2xyU2hhcGVCb2F0PUYuQ2xyU2hhcGVCaWN5Y2xlPUYuQ2xyU2hhcGVNYXBNYXJrZXI9Ri5DbHJTaGFwZUNvbXBhc3M9Ri5DbHJTaGFwZU1hcD1GLkNsclNoYXBlQ2FyPUYuQ2xy''@;'; put 'put ''U2hhcGVBaXJwbGFuZT1GLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB4PWFlKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksbT1hZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJh''@;'; put 'put ''dG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO0YuQ2xyU2hhcGVUcnVjaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCww''@;'; put 'put ''LTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgyOHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSww''@;'; put 'put ''LDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcs''@;'; put 'put ''MGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwx''@;'; put 'put ''LDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQuNDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4z''@;'; put 'put ''OCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxGLkNsclNoYXBlQWlycGxhbmU9KDAsbS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCwwLDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEu''@;'; put 'put ''NDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4zOS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45''@;'; put 'put ''NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTguNSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0z''@;'; put 'put ''LjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAsMCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEuNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNhLjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDEx''@;'; put 'put ''LjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIsNi4zNloiLz4nKSxGLkNsclNoYXBlQ2FyPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEs''@;'; put 'put ''MjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAsMCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwz''@;'; put 'put ''MiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUtMUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEs''@;'; put 'put ''NS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0''@;'; put 'put ''LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVh''@;'; put 'put ''Ljg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUu''@;'; put 'put ''NzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAt''@;'; put 'put ''LjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZWMTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4x''@;'; put 'put ''NSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksRi5DbHJTaGFwZU1hcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0i''@;'; put 'put ''TTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJMMTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBs''@;'; put 'put ''MTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4''@;'; put 'put ''LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIx''@;'; put 'put ''LjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMwLjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYy''@;'; put 'put ''OGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAtNkgyM1YxNmgyWiIvPicpLEYuQ2xyU2hhcGVDb21wYXNzPSgwLG0uY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdWMTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwx''@;'; put 'put ''LDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0''@;'; put 'put ''LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwuMDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2''@;'; put 'put ''TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMzLjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsbS5j''@;'; put 'put ''bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43''@;'; put 'put ''MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYx''@;'; put 'put ''LDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45''@;'; put 'put ''LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEuNCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4x''@;'; put 'put ''N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDksMCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5''@;'; put 'put ''LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUs''@;'; put 'put ''MTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43''@;'; put 'put ''OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5''@;'; put 'put ''OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40''@;'; put 'put ''OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwu''@;'; put 'put ''NzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjYiIHI9IjUiLz4nKSxGLkNsclNoYXBlQmljeWNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUtNi4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwy''@;'; put 'put ''OS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEs''@;'; put 'put ''MTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEt''@;'; put 'put ''Ljg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjExIiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwxLTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEs''@;'; put 'put ''MSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlIMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUs''@;'; put 'put ''MTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xuXHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4y''@;'; put 'put ''LTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYtMC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45''@;'; put 'put ''aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAu''@;'; put 'put ''MiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLEYuQ2xyU2hhcGVCb2F0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEu''@;'; put 'put ''MSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywy''@;'; put 'put ''LjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwx''@;'; put 'put ''LjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMzMS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNy0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIw''@;'; put 'put ''aC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjksMTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDEx''@;'; put 'put ''LjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMw''@;'; put 'put ''LjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQsMTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEuMWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMt''@;'; put 'put ''MC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMuNSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEu''@;'; put 'put ''MWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJjMS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjct''@;'; put 'put ''MC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJj''@;'; put 'put ''MC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDIt''@;'; put 'put ''MmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxGLkNsclNoYXBlQ2FtcGVydmFuPSgwLG0u''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4''@;'; put 'put ''LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41''@;'; put 'put ''LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEuNXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMs''@;'; put 'put ''MS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwx''@;'; put 'put ''aC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYy''@;'; put 'put ''MHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUsMzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAu''@;'; put 'put ''MUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41''@;'; put 'put ''LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xuXHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40''@;'; put 'put ''LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAx''@;'; put 'put ''Ni45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksRi5DbHJTaGFwZUNhcmF2YW49KDAs''@;'; put 'put ''bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwx''@;'; put 'put ''LjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywy''@;'; put 'put ''LDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRc''@;'; put 'put ''dGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEt''@;'; put 'put ''MS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSww''@;'; put 'put ''LjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxGLkNsclNoYXBlRmVycnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAsMCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0x''@;'; put 'put ''LjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcsMiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwy''@;'; put 'put ''Nyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIs''@;'; put 'put ''MC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNo''@;'; put 'put ''MC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAtMywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2''@;'; put 'put ''NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgxOHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMs''@;'; put 'put ''MC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYsNC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4z''@;'; put 'put ''LDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAuMmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRc''@;'; put 'put ''blx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4yeiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJW''@;'; put 'put ''MTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVUcmFpbGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5''@;'; put 'put ''LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0''@;'; put 'put ''IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAs''@;'; put 'put ''MS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgyMlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjEx''@;'; put 'put ''aDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4y''@;'; put 'put ''LDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLEYuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgs''@;'; put 'put ''MTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMy''@;'; put 'put ''LjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwxMS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAsMC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43''@;'; put 'put ''OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYs''@;'; put 'put ''Ni41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4z''@;'; put 'put ''OWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwzMCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwx''@;'; put 'put ''OCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEuNDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4''@;'; put 'put ''bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNsMi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksRi5UcmF2ZWxTaGFwZXM9e3RydWNrOkYuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpGLkNsclNoYXBlQWlycGxhbmUsY2FyOkYuQ2xyU2hhcGVDYXIsbWFwOkYuQ2xyU2hhcGVNYXAsY29tcGFzczpGLkNsclNoYXBlQ29tcGFzcywibWFwLW1h''@;'; put 'put ''cmtlciI6Ri5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOkYuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6Ri5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOkYuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpGLkNsclNoYXBlQ2FyYXZhbixmZXJyeTpGLkNsclNoYXBlRmVycnksdHJhaWxlcjpGLkNsclNo''@;'; put 'put ''YXBlVHJhaWxlciwib24taG9saWRheSI6Ri5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEYuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLlRy''@;'; put 'put ''YXZlbFNoYXBlcywiYXV0byIsKDAseC5kZXNjcmlwdG9yQ29uZmlnKShGLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoRi5UcmF2ZWxTaGFwZXMpfSwiLi9w''@;'; put 'put ''cm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3Jp''@;'; put 'put ''cHRvci1jb25maWcudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShGLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxGLmRlc2NyaXB0b3JDb25maWc9dm9pZCAwLEYuZGVzY3JpcHRvckNvbmZpZz1mdW5jdGlvbiB4KG0pe3JldHVybntlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTptfX19LCIuL3By''@;'; put 'put ''b2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFn''@;'; put 'put ''LWdlbmVyYXRvci50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KEYsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEYuY2xySWNvblNWRz12b2lkIDA7Ri5jbHJJY29uU1ZHPWZ1bmN0aW9uIE0oTyl7dmFyIFI9IiI7cmV0dXJuIE8uaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKFIrPSJjYW4tYmFkZ2UgIiksTy5pbmRleE9mKCItLWFsZXJ0''@;'; put 'put ''ZWQiKT4tMSYmKFIrPSJjYW4tYWxlcnQgIiksTy5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoUis9Imhhcy1zb2xpZCAiKSwoUj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK1IrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0''@;'; put 'put ''IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVB''@;'; put 'put ''c3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK08rIjwvc3ZnPiJ9fX0pfSw4MjAyNToo''@;'; put 'put ''YXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPXt9O0YucihhZSksRi5kKGFlLHthcnJheUF2ZzooKT0+UkVlLGFycmF5RWFjaDooKT0+RG4sYXJyYXlGaWx0ZXI6KCk9Pl8xLGFycmF5RmxhdHRlbjooKT0+WGVlLGFycmF5TWFwOigpPT5jcyxhcnJheU1heDooKT0+SUVlLGFycmF5TWlu''@;'; put 'put ''OigpPT5MRWUsYXJyYXlSZWR1Y2U6KCk9PkFsLGFycmF5U3VtOigpPT5LZWUsYXJyYXlVbmlxdWU6KCk9PnJOLGV4dGVuZEFycmF5OigpPT5uTixnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PmlOLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5PRWUsZ2V0VW5pb25PZkFycmF5czooKT0+''@;'; put 'put ''UEVlLHBpdm90OigpPT5LYixzdHJpbmdUb0FycmF5OigpPT5vTix0bzJkQXJyYXk6KCk9PnFlZX0pO3ZhciB4PXt9O0Yucih4KSxGLmQoeCx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5ydGUsaXNEZWZpbmVkOigpPT5LaSxpc0VtcHR5OigpPT5wYyxpc1JlZ0V4cDooKT0+SmVlLGlzVW5kZWZp''@;'; put 'put ''bmVkOigpPT5MYSxzdHJpbmdpZnk6KCk9Pl9sfSk7dmFyIG09e307Ri5yKG0pLEYuZChtLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5WRWUsaXNQZXJjZW50VmFsdWU6KCk9PmxOLHJhbmRvbVN0cmluZzooKT0+YU4sc2FuaXRpemU6KCk9PnJrLHN0cmlwVGFnczooKT0+dU4sc3Vic3RpdHV0ZToo''@;'; put 'put ''KT0+Y04sdG9VcHBlckNhc2VGaXJzdDooKT0+YnV9KTt2YXIgbGU9e307Ri5yKGxlKSxGLmQobGUse0hUTUxfQ0hBUkFDVEVSUzooKT0+bHRlLGFkZENsYXNzOigpPT5waSxhZGRFdmVudDooKT0+ekVlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+Zk4sY2xvc2VzdDooKT0+TnAsY2xvc2VzdERv''@;'; put 'put ''d246KCk9PnR5LGVtcHR5OigpPT5nMixmYXN0SW5uZXJIVE1MOigpPT5nZyxmYXN0SW5uZXJUZXh0OigpPT5qcCxnZXRDYXJldFBvc2l0aW9uOigpPT5oTixnZXRDb21wdXRlZFN0eWxlOigpPT56cCxnZXRDc3NUcmFuc2Zvcm06KCk9PllFZSxnZXRGcmFtZUVsZW1lbnQ6KCk9Pm90ZSxnZXRQ''@;'; put 'put ''YXJlbnQ6KCk9Pml0ZSxnZXRQYXJlbnRXaW5kb3c6KCk9PmV5LGdldFNjcm9sbExlZnQ6KCk9PmlrLGdldFNjcm9sbFRvcDooKT0+bnksZ2V0U2Nyb2xsYWJsZUVsZW1lbnQ6KCk9PnJ5LGdldFNjcm9sbGJhcldpZHRoOigpPT5JYyxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+Y3RlLGdl''@;'; put 'put ''dFNlbGVjdGlvblRleHQ6KCk9PnV0ZSxnZXRTdHlsZTooKT0+bjcsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnZnLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9Pm1nLGdldFdpbmRvd1Njcm9sbFRvcDooKT0+dDcsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PkJFZSxoYXNDbGFzczooKT0+''@;'; put 'put ''Qm8saGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+aHRlLGhhc1ZlcnRpY2FsU2Nyb2xsYmFyOigpPT5kdGUsaW5kZXg6KCk9PnN0ZSxpbm5lckhlaWdodDooKT0+amYsaW5uZXJXaWR0aDooKT0+aXksaXNDaGlsZE9mOigpPT5WcCxpc0RldGFjaGVkOigpPT5nTixpc0lucHV0OigpPT5heSxp''@;'; put 'put ''c091dHNpZGVJbnB1dDooKT0+c2ssaXNWaXNpYmxlOigpPT5lNyxtYXRjaGVzQ1NTUnVsZXM6KCk9PmpFZSxvYnNlcnZlVmlzaWJpbGl0eUNoYW5nZU9uY2U6KCk9PnB0ZSxvZmZzZXQ6KCk9PnFsLG91dGVySGVpZ2h0OigpPT5hbCxvdXRlcldpZHRoOigpPT53YSxvdmVybGF5Q29udGFpbnNF''@;'; put 'put ''bGVtZW50OigpPT5CcCxyZW1vdmVDbGFzczooKT0+V28scmVtb3ZlRXZlbnQ6KCk9PlVFZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmROLHJlc2V0Q3NzVHJhbnNmb3JtOigpPT5zeSxzZWxlY3RFbGVtZW50SWZBbGxvd2VkOigpPT5mdGUsc2V0Q2FyZXRQb3NpdGlvbjooKT0+b3ksc2V0T3Zlcmxh''@;'; put 'put ''eVBvc2l0aW9uOigpPT5va30pO3ZhciBNPXt9O0YucihNKSxGLmQoTSx7Y3Vycnk6KCk9Pm10ZSxjdXJyeVJpZ2h0OigpPT4kRWUsZGVib3VuY2U6KCk9Pm1OLGZhc3RDYWxsOigpPT5hayxpc0Z1bmN0aW9uOigpPT5SYSxwYXJ0aWFsOigpPT52TixwaXBlOigpPT5HRWUsdGhyb3R0bGU6KCk9''@;'; put 'put ''Pmd0ZSx0aHJvdHRsZUFmdGVySGl0czooKT0+V0VlfSk7dmFyIE89e307Ri5yKE8pLEYuZChPLHtjbG9uZTooKT0+V3UsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5fZyxkZWVwQ2xvbmU6KCk9Pnl1LGRlZXBFeHRlbmQ6KCk9Pmx5LGRlZXBPYmplY3RTaXplOigpPT51ayxkZWZpbmVH''@;'; put 'put ''ZXR0ZXI6KCk9PmZoLGR1Y2tTY2hlbWE6KCk9PnI3LGV4dGVuZDooKT0+S2wsZ2V0UHJvcGVydHk6KCk9PnZ0ZSxoYXNPd25Qcm9wZXJ0eTooKT0+YmwsaW5oZXJpdDooKT0+emYsaXNPYmplY3Q6KCk9PnVzLGlzT2JqZWN0RXF1YWw6KCk9PmxrLG1peGluOigpPT5UYSxvYmplY3RFYWNoOigp''@;'; put 'put ''PT5kcyxzZXRQcm9wZXJ0eTooKT0+Y2t9KTt2YXIgUj17fTtGLnIoUiksRi5kKFIse2lzQ2hyb21lOigpPT5fTixpc0Nocm9tZVdlYktpdDooKT0+eXRlLGlzRWRnZTooKT0+Q3RlLGlzRWRnZVdlYktpdDooKT0+S0VlLGlzRmlyZWZveDooKT0+ZGssaXNGaXJlZm94V2ViS2l0OigpPT53dGUs''@;'; put 'put ''aXNJT1M6KCk9PmJOLGlzSXBhZE9TOigpPT55Tixpc0xpbnV4T1M6KCk9PlhFZSxpc01hY09TOigpPT5oayxpc01vYmlsZUJyb3dzZXI6KCk9Pm0yLGlzU2FmYXJpOigpPT5xRWUsaXNXaW5kb3dzT1M6KCk9PndOLHNldEJyb3dzZXJNZXRhOigpPT5fdGUsc2V0UGxhdGZvcm1NZXRhOigpPT5i''@;'; put 'put ''dGV9KTt2YXIgej17fTtGLnIoeiksRi5kKHose0tFWV9DT0RFUzooKT0+Y28saXNDdHJsS2V5OigpPT5RRWUsaXNDdHJsTWV0YUtleTooKT0+TXRlLGlzRnVuY3Rpb25LZXk6KCk9PkNOLGlzS2V5OigpPT5vNyxpc1ByaW50YWJsZUNoYXI6KCk9PlN0ZX0pO3ZhciBLPXt9O0YucihLKSxGLmQo''@;'; put 'put ''Syx7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9PmJnLGlzTGVmdENsaWNrOigpPT5mayxpc1JpZ2h0Q2xpY2s6KCk9PlVwLHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjooKT0+djJ9KTt2YXIgST17fTtGLnIoSSksRi5kKEkse19kYXRhVG9IVE1MOigpPT5ETixodG1sVG9Hcmlk''@;'; put 'put ''U2V0dGluZ3M6KCk9Pkl0ZSxpbnN0YW5jZVRvSFRNTDooKT0+VE59KTt2YXIgaz17fTtGLnIoayksRi5kKGsse2lzTnVtZXJpYzooKT0+R3UsaXNOdW1lcmljTGlrZTooKT0+THRlLHJhbmdlRWFjaDooKT0+dm8scmFuZ2VFYWNoUmV2ZXJzZTooKT0+dmssdmFsdWVBY2NvcmRpbmdQZXJjZW50''@;'; put 'put ''OigpPT5JTn0pO3ZhciBFPXt9O0YucihFKSxGLmQoRSx7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PmR5LGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+TnRlLGlzVG91Y2hTdXBwb3J0ZWQ6KCk9PkhOLHJlcXVlc3RBbmltYXRpb25GcmFtZTooKT0+eWt9KTt2YXIgaj17fTtGLnIoaiksRi5k''@;'; put 'put ''KGose2NvdW50Rmlyc3RSb3dLZXlzOigpPT5sVixjcmVhdGVFbXB0eVNwcmVhZHNoZWV0RGF0YTooKT0+bVRlLGNyZWF0ZVNwcmVhZHNoZWV0RGF0YTooKT0+cFRlLGNyZWF0ZVNwcmVhZHNoZWV0T2JqZWN0RGF0YTooKT0+Z1RlLGRhdGFSb3dUb0NoYW5nZXNBcnJheTooKT0+YVYsaXNBcnJh''@;'; put 'put ''eU9mQXJyYXlzOigpPT5wbmUsaXNBcnJheU9mT2JqZWN0czooKT0+Z25lLHNwcmVhZHNoZWV0Q29sdW1uSW5kZXg6KCk9PmZUZSxzcHJlYWRzaGVldENvbHVtbkxhYmVsOigpPT5Na30pO3ZhciBWPXt9O0YucihWKSxGLmQoVix7Q09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9Pk5W''@;'; put 'put ''LENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+elYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+cVYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+WlYsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9PldWLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5VVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT4kVixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PllWLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PkdWLENPTlRF''@;'; put 'put ''WFRNRU5VX0lURU1TX0JPUkRFUlM6KCk9PktWLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5RVixDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9PmVCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkpWLENPTlRFWFRNRU5VX0lURU1TX0JP''@;'; put 'put ''UkRFUlNfVE9QOigpPT5YVixDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkFWLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlRWLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+TFYsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NP''@;'; put 'put ''TFVNTl9HUk9VUF9IRUFERVJTOigpPT5JVixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PkRWLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+UlYsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5WVixDT05URVhUTUVOVV9JVEVNU19GUkVF''@;'; put 'put ''WkVfQ09MVU1OOigpPT5PVixDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+aUIsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PnNCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT53VixDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkNWLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5GVixDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PnJCLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9''@;'; put 'put ''Pl9WLENPTlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+a1YsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmpWLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PkVWLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT50QixDT05URVhUTUVOVV9J''@;'; put 'put ''VEVNU19SRU1PVkVfQ09MVU1OOigpPT5NVixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+QlYsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+U1YsQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5iVixDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6''@;'; put 'put ''KCk9PnlWLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+YUIsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+eFYsQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5QVixDT05URVhUTUVOVV9JVEVN''@;'; put 'put ''U19VTk1FUkdFX0NFTExTOigpPT5IVixDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5FbmUsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+UkIsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT5JQixGSUxURVJTX0JVVFRPTlNfT0s6KCk9PkxCLEZJTFRFUlNfQlVUVE9OU19QTEFD''@;'; put 'put ''RUhPTERFUl9TRUFSQ0g6KCk9Pk9CLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PkZCLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+UEIsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PkRCLEZJTFRFUlNfQ09ORElUSU9OU19B''@;'; put 'put ''RlRFUjooKT0+Q0IsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+U0IsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5oQixGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+eUIsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5qVGUsRklMVEVSU19DT05E''@;'; put 'put ''SVRJT05TX0NPTlRBSU5TOigpPT5wQixGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PmxCLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PmZCLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+dUIsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+bUIsRklM''@;'; put 'put ''VEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+dkIsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+X0IsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+YkIsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+eWwsRklM''@;'; put 'put ''VEVSU19DT05ESVRJT05TX05PTkU6KCk9PkxrLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+d0IsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5nQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5jQixGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VR''@;'; put 'put ''VUFMOigpPT5kQixGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9Pk1CLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+eEIsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+RUIsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PmtCLEZJTFRFUlNfRElW''@;'; put 'put ''U19GSUxURVJfQllfVkFMVUU6KCk9PkFCLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5UQixGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+UmssRklMVEVSU19OQU1FU1BBQ0U6KCk9PiR1LEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5Pa30pO3ZhciBCPXt9O2Z1''@;'; put 'put ''bmN0aW9uIFkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gWChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90''@;'; put 'put ''b3R5cGUuY29uc3RydWN0b3I9YSxhfUYucihCKSxGLmQoQix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PmRyZX0pO2NvbnN0IFU9WChjPT5mdW5jdGlvbihhKXtjKHRoaXMpLHRoaXMubWVzc2FnZT1hP2Ake2EubGVuZ3RofSBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxu''@;'; put 'put ''JHthLm1hcCgoZCxoKT0+YCR7aCsxfSkgJHtkLnRvU3RyaW5nKCl9YCkuam9pbigiXG4gICIpfWA6IiIsdGhpcy5uYW1lPSJVbnN1YnNjcmlwdGlvbkVycm9yIix0aGlzLmVycm9ycz1hfSk7ZnVuY3Rpb24gcShjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNl''@;'; put 'put ''KGEsMSl9fWNsYXNzIGVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtj''@;'; put 'put ''b25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihZKGQpKXRyeXtk''@;'; put 'put ''KCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgVT9mLmVycm9yczpbZl19Y29uc3R7X2ZpbmFsaXplcnM6aH09dGhpcztpZihoKXt0aGlzLl9maW5hbGl6ZXJzPW51bGw7Zm9yKGNvbnN0IGYgb2YgaCl0cnl7c2UoZil9Y2F0Y2goXyl7bD1sPz9bXSxfIGluc3RhbmNlb2YgVT9sPVsuLi5sLC4u''@;'; put 'put ''Ll8uZXJyb3JzXTpsLnB1c2goXyl9fWlmKGwpdGhyb3cgbmV3IFUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClzZShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBlZSl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1cm47bC5fYWRkUGFy''@;'; put 'put ''ZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkmJmEuaW5jbHVkZXMo''@;'; put 'put ''bCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5fcGFyZW50YWdlPW51''@;'; put 'put ''bGw6QXJyYXkuaXNBcnJheShhKSYmcShhLGwpfXJlbW92ZShsKXtjb25zdHtfZmluYWxpemVyczphfT10aGlzO2EmJnEoYSxsKSxsIGluc3RhbmNlb2YgZWUmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19ZWUuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgZWU7cmV0dXJuIGMuY2xvc2VkPSEwLGN9''@;'; put 'put ''KSgpO2NvbnN0IHRlPWVlLkVNUFRZO2Z1bmN0aW9uIG9lKGMpe3JldHVybiBjIGluc3RhbmNlb2YgZWV8fGMmJiJjbG9zZWQiaW4gYyYmWShjLnJlbW92ZSkmJlkoYy5hZGQpJiZZKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHNlKGMpe1koYyk/YygpOmMudW5zdWJzY3JpYmUoKX1jb25zdCBo''@;'; put 'put ''ZT17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSx1ZT17c2V0VGltZW91dChjLGwsLi4uYSl7Y29u''@;'; put 'put ''c3R7ZGVsZWdhdGU6ZH09dWU7cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXVlO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNsZWFyVGltZW91dCkoYyl9LGRl''@;'; put 'put ''bGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gY2UoYyl7dWUuc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09aGU7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gRygpe31jb25zdCBiPU4oIkMiLHZvaWQgMCx2b2lkIDApO2Z1bmN0aW9uIE4oYyxsLGEpe3JldHVy''@;'; put 'put ''bntraW5kOmMsdmFsdWU6bCxlcnJvcjphfX1sZXQgZz1udWxsO2Z1bmN0aW9uIEMoYyl7aWYoaGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hZztpZihsJiYoZz17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRo''@;'; put 'put ''cm93bjphLGVycm9yOmR9PWc7aWYoZz1udWxsLGEpdGhyb3cgZH19ZWxzZSBjKCl9Y2xhc3MgdiBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLG9lKGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlv''@;'; put 'put ''bj1MZX1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IG5lKGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3hlKGZ1bmN0aW9uIEgoYyl7cmV0dXJuIE4oIk4iLGMsdm9pZCAwKX0obCksdGhpcyk6dGhpcy5fbmV4dChsKX1lcnJvcihsKXt0aGlzLmlzU3RvcHBlZD94ZShmdW5j''@;'; put 'put ''dGlvbiBEKGMpe3JldHVybiBOKCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD94ZShiLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9jb21wbGV0ZSgpKX11bnN1YnNjcmliZSgp''@;'; put 'put ''e3RoaXMuY2xvc2VkfHwodGhpcy5pc1N0b3BwZWQ9ITAsc3VwZXIudW5zdWJzY3JpYmUoKSx0aGlzLmRlc3RpbmF0aW9uPW51bGwpfV9uZXh0KGwpe3RoaXMuZGVzdGluYXRpb24ubmV4dChsKX1fZXJyb3IobCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uZXJyb3IobCl9ZmluYWxseXt0aGlzLnVu''@;'; put 'put ''c3Vic2NyaWJlKCl9fV9jb21wbGV0ZSgpe3RyeXt0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBwPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIHcoYyxsKXtyZXR1cm4gcC5jYWxsKGMsbCl9Y2xhc3MgSntjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7ZGUoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5''@;'; put 'put ''e2EuZXJyb3IobCl9Y2F0Y2goZCl7ZGUoZCl9ZWxzZSBkZShsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXtkZShhKX19fWNsYXNzIG5lIGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCl7''@;'; put 'put ''bGV0IGg7aWYoc3VwZXIoKSxZKGwpfHwhbCloPXtuZXh0Omw/P3ZvaWQgMCxlcnJvcjphPz92b2lkIDAsY29tcGxldGU6ZD8/dm9pZCAwfTtlbHNle2xldCBmO3RoaXMmJmhlLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dD8oZj1PYmplY3QuY3JlYXRlKGwpLGYudW5zdWJzY3JpYmU9KCk9PnRo''@;'; put 'put ''aXMudW5zdWJzY3JpYmUoKSxoPXtuZXh0OmwubmV4dCYmdyhsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmdyhsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJncobC5jb21wbGV0ZSxmKX0pOmg9bH10aGlzLmRlc3RpbmF0aW9uPW5ldyBKKGgpfX1mdW5jdGlvbiBkZShjKXtoZS51c2VE''@;'; put 'put ''ZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFMoYyl7aGUudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmZyYmKGcuZXJyb3JUaHJvd249ITAsZy5lcnJvcj1jKX0oYyk6Y2UoYyl9ZnVuY3Rpb24geGUoYyxsKXtjb25zdHtvblN0b3BwZWRO''@;'; put 'put ''b3RpZmljYXRpb246YX09aGU7YSYmdWUuc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBMZT17Y2xvc2VkOiEwLG5leHQ6RyxlcnJvcjpmdW5jdGlvbiBmZShjKXt0aHJvdyBjfSxjb21wbGV0ZTpHfSxGZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8''@;'; put 'put ''IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gT2UoYyl7cmV0dXJuIGN9ZnVuY3Rpb24gV2UoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9PZToxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBLZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBsdChjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHZ8fGZ1bmN0aW9u''@;'; put 'put ''IEplKGMpe3JldHVybiBjJiZZKGMubmV4dCkmJlkoYy5lcnJvcikmJlkoYy5jb21wbGV0ZSl9KGMpJiZvZShjKX0oYSk/YTpuZXcgbmUoYSxkLGgpO3JldHVybiBDKCgpPT57Y29uc3R7b3BlcmF0b3I6Xyxzb3VyY2U6VH09dGhpcztmLmFkZChfP18uY2FsbChmLFQpOlQ/dGhpcy5fc3Vic2Ny''@;'; put 'put ''aWJlKGYpOnRoaXMuX3RyeVN1YnNjcmliZShmKSl9KSxmfV90cnlTdWJzY3JpYmUoYSl7dHJ5e3JldHVybiB0aGlzLl9zdWJzY3JpYmUoYSl9Y2F0Y2goZCl7YS5lcnJvcihkKX19Zm9yRWFjaChhLGQpe3JldHVybiBuZXcoZD1ZZShkKSkoKGgsZik9Pntjb25zdCBfPW5ldyBuZSh7bmV4dDpU''@;'; put 'put ''PT57dHJ5e2EoVCl9Y2F0Y2goVyl7ZihXKSxfLnVuc3Vic2NyaWJlKCl9fSxlcnJvcjpmLGNvbXBsZXRlOmh9KTt0aGlzLnN1YnNjcmliZShfKX0pfV9zdWJzY3JpYmUoYSl7dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuc3Vic2NyaWJl''@;'; put 'put ''KGEpfVtGZV0oKXtyZXR1cm4gdGhpc31waXBlKC4uLmEpe3JldHVybiBXZShhKSh0aGlzKX10b1Byb21pc2UoYSl7cmV0dXJuIG5ldyhhPVllKGEpKSgoZCxoKT0+e2xldCBmO3RoaXMuc3Vic2NyaWJlKF89PmY9XyxfPT5oKF8pLCgpPT5kKGYpKX0pfX1yZXR1cm4gYy5jcmVhdGU9bD0+bmV3''@;'; put 'put ''IGMobCksY30pKCk7ZnVuY3Rpb24gWWUoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1jPz9oZS5Qcm9taXNlKSYmdm9pZCAwIT09bD9sOlByb21pc2V9Y29uc3QgUGU9WChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNz''@;'; put 'put ''YWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBiZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgS2V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMu''@;'; put 'put ''aGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgQWUodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgUGV9bmV4dChhKXtDKCgpPT57aWYodGhpcy5fdGhyb3dJ''@;'; put 'put ''ZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe0MoKCk9''@;'; put 'put ''PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmhhc0Vycm9yPXRoaXMuaXNTdG9wcGVkPSEwLHRoaXMudGhyb3duRXJyb3I9YTtjb25zdHtvYnNlcnZlcnM6ZH09dGhpcztmb3IoO2QubGVuZ3RoOylkLnNoaWZ0KCkuZXJyb3IoYSl9fSl9Y29tcGxldGUo''@;'; put 'put ''KXtDKCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlz''@;'; put 'put ''LmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0''@;'; put 'put ''e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/dGU6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgZWUoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCxxKGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVz''@;'; put 'put ''ZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3QgYT1uZXcgS2U7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcg''@;'; put 'put ''QWUobCxhKSxjfSkoKTtjbGFzcyBBZSBleHRlbmRzIGJle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6''@;'; put 'put ''YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9''@;'; put 'put ''PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lk''@;'; put 'put ''IDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6dGV9fWNsYXNzIFRlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3Jp''@;'; put 'put ''YmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYobCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQo''@;'; put 'put ''dGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIHFlKGMpe3JldHVybiBZKGM/LmxpZnQpfWZ1bmN0aW9uIFhlKGMpe3JldHVybiBsPT57aWYocWUobCkpcmV0dXJuIGwubGlmdChmdW5jdGlvbihhKXt0cnl7cmV0dXJuIGMoYSx0aGlzKX1jYXRjaChkKXt0aGlzLmVycm9yKGQpfX0pO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlIil9fWZ1bmN0aW9uIFVlKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBodChjLGwsYSxkLGgpfWNsYXNzIGh0IGV4dGVuZHMgdntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIobCksdGhpcy5vbkZp''@;'; put 'put ''bmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT1fLHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChXKXtsLmVycm9yKFcpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihUKXt0cnl7aChUKX1jYXRjaChXKXtsLmVycm9yKFcpfWZpbmFsbHl7''@;'; put 'put ''dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5z''@;'; put 'put ''aG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBNZShjLGwpe3Jl''@;'; put 'put ''dHVybiBYZSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoVWUoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1mdW5jdGlvbiBNdChjLGwsYSxkKXt2YXIgXyxoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBUPWMubGVuZ3RoLTE7VD49MDtULS0pKF89Y1tUXSkmJihmPShoPDM/XyhmKTpo''@;'; put 'put ''PjM/XyhsLGEsZik6XyhsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIF90KGMpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgX3Q/KHRoaXMudj1jLHRoaXMpOm5ldyBfdChjKX1mdW5jdGlvbiBydChjKXtpZighU3ltYm9sLmFz''@;'; put 'put ''eW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gZnQoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsr''@;'; put 'put ''XSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgibmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKF8pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihULFcpeyFmdW5jdGlvbiBoKGYsXyxULFcpe1Byb21pc2UucmVzb2x2ZShXKS50aGVuKGZ1bmN0aW9uKGllKXtmKHt2YWx1ZTppZSxk''@;'; put 'put ''b25lOlR9KX0sXyl9KFQsVywoXz1jW2ZdKF8pKS5kb25lLF8udmFsdWUpfSl9fX0iZnVuY3Rpb24iPT10eXBlb2YgU3VwcHJlc3NlZEVycm9yJiZTdXBwcmVzc2VkRXJyb3I7Y29uc3QgUm49Yz0+YyYmIm51bWJlciI9PXR5cGVvZiBjLmxlbmd0aCYmImZ1bmN0aW9uIiE9dHlwZW9mIGM7ZnVu''@;'; put 'put ''Y3Rpb24gJHQoYyl7cmV0dXJuIFkoYz8udGhlbil9ZnVuY3Rpb24gUG4oYyl7cmV0dXJuIFkoY1tGZV0pfWZ1bmN0aW9uIG5pKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmWShjPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKX1mdW5jdGlvbiBsbihjKXtyZXR1cm4gbmV3IFR5cGVF''@;'; put 'put ''cnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwg''@;'; put 'put ''QXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0IHFyPWZ1bmN0aW9uIGpuKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gZ2koYyl7cmV0dXJuIFko''@;'; put 'put ''Yz8uW3FyXSl9ZnVuY3Rpb24geHIoYyl7cmV0dXJuIGZ1bmN0aW9uIE50KGMsbCxhKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107''@;'; put 'put ''cmV0dXJuIGg9e30sXygibmV4dCIpLF8oInRocm93IiksXygicmV0dXJuIiksaFtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30saDtmdW5jdGlvbiBfKEVlKXtkW0VlXSYmKGhbRWVdPWZ1bmN0aW9uKFplKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o''@;'; put 'put ''b3QsZXQpe2YucHVzaChbRWUsWmUsb3QsZXRdKT4xfHxUKEVlLFplKX0pfSl9ZnVuY3Rpb24gVChFZSxaZSl7dHJ5eyFmdW5jdGlvbiBXKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIF90P1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKGllLGdlKTp3ZShmWzBdWzJdLEVlKX0oZFtF''@;'; put 'put ''ZV0oWmUpKX1jYXRjaChvdCl7d2UoZlswXVszXSxvdCl9fWZ1bmN0aW9uIGllKEVlKXtUKCJuZXh0IixFZSl9ZnVuY3Rpb24gZ2UoRWUpe1QoInRocm93IixFZSl9ZnVuY3Rpb24gd2UoRWUsWmUpe0VlKFplKSxmLnNoaWZ0KCksZi5sZW5ndGgmJlQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzLGZ1bmN0aW9uKigpe2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgX3QoYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIF90KHZvaWQgMCk7eWllbGQgeWllbGQgX3QoZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9j''@;'; put 'put ''aygpfX0pfWZ1bmN0aW9uIFVpKGMpe3JldHVybiBZKGM/LmdldFJlYWRlcil9ZnVuY3Rpb24gS3IoYyl7aWYoYyBpbnN0YW5jZW9mIEtlKXJldHVybiBjO2lmKG51bGwhPWMpe2lmKFBuKGMpKXJldHVybiBmdW5jdGlvbiBubyhjKXtyZXR1cm4gbmV3IEtlKGw9Pntjb25zdCBhPWNbRmVdKCk7''@;'; put 'put ''aWYoWShhLnN1YnNjcmliZSkpcmV0dXJuIGEuc3Vic2NyaWJlKGwpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlIil9KX0oYyk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIEhyKGMpe3Jl''@;'; put 'put ''dHVybiBuZXcgS2UobD0+e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gcWkoYyl7cmV0dXJuIG5ldyBLZShsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChh''@;'; put 'put ''KSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsY2UpfSl9KGMpO2lmKG5pKGMpKXJldHVybiBhbyhjKTtpZihnaShjKSlyZXR1cm4gZnVuY3Rpb24gSmkoYyl7cmV0dXJuIG5ldyBLZShsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0''@;'; put 'put ''dXJuO2wuY29tcGxldGUoKX0pfShjKTtpZihVaShjKSlyZXR1cm4gZnVuY3Rpb24gcm8oYyl7cmV0dXJuIGFvKHhyKGMpKX0oYyl9dGhyb3cgbG4oYyl9ZnVuY3Rpb24gYW8oYyl7cmV0dXJuIG5ldyBLZShsPT57KGZ1bmN0aW9uIGlvKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IFduKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsXyl7ZnVuY3Rpb24gVChnZSl7dHJ5e2llKGQubmV4dChnZSkpfWNhdGNoKHdlKXtfKHdlKX19ZnVuY3Rpb24gVyhnZSl7dHJ5e2llKGQudGhyb3coZ2UpKX1jYXRjaCh3ZSl7Xyh3ZSl9fWZ1bmN0aW9u''@;'; put 'put ''IGllKGdlKXtnZS5kb25lP2YoZ2UudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBhP2Y6bmV3IGEoZnVuY3Rpb24oXyl7XyhmKX0pfShnZS52YWx1ZSkudGhlbihULFcpfWllKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1ydChjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2goXyl7aD17ZXJyb3I6X319ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEp''@;'; put 'put ''KX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9PmwuZXJyb3IoYSkpfSl9ZnVuY3Rpb24gR2koYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxk''@;'; put 'put ''KSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiB5cihjLGwsYT0xLzApe3JldHVybiBZKGwpP3lyKChkLGgpPT5NZSgoZixfKT0+bChkLGYsaCxfKSkoS3IoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksWGUoKGQs''@;'; put 'put ''aCk9PmZ1bmN0aW9uIGhvKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1bXTtsZXQgaWU9MCxnZT0wLHdlPSExO2NvbnN0IEVlPSgpPT57d2UmJiFXLmxlbmd0aCYmIWllJiZsLmNvbXBsZXRlKCl9LFplPWV0PT5pZTxkP290KGV0KTpXLnB1c2goZXQpLG90PWV0PT57ZiYmbC5uZXh0KGV0KSxp''@;'; put 'put ''ZSsrO2xldCB5dD0hMTtLcihhKGV0LGdlKyspKS5zdWJzY3JpYmUoVWUobCxrdD0+e2g/LihrdCksZj9aZShrdCk6bC5uZXh0KGt0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihpZS0tO1cubGVuZ3RoJiZpZTxkOyl7Y29uc3Qga3Q9Vy5zaGlmdCgpO18/R2kobCxf''@;'; put 'put ''LCgpPT5vdChrdCkpOm90KGt0KX1FZSgpfWNhdGNoKGt0KXtsLmVycm9yKGt0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShVZShsLFplLCgpPT57d2U9ITAsRWUoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiBQaShjPTEvMCl7cmV0dXJuIHlyKE9lLGMpfWNvbnN0IExv''@;'; put 'put ''PW5ldyBLZShjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIExjKGMpe3JldHVybiBjJiZZKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIHVsKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIFJjKGMpe3JldHVybiBZKHVsKGMpKT9jLnBvcCgpOnZvaWQgMH1mdW5jdGlvbiBOMChjKXtyZXR1''@;'; put 'put ''cm4gTGModWwoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGsyKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PnthLnN1YnNjcmliZShVZShkLGg9PkdpKGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5HaShkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5HaShkLGMsKCk9PmQuZXJyb3IoaCks''@;'; put 'put ''bCkpKX0pfWZ1bmN0aW9uIGUwKGMsbD0wKXtyZXR1cm4gWGUoKGEsZCk9PntkLmFkZChjLnNjaGVkdWxlKCgpPT5hLnN1YnNjcmliZShkKSxsKSl9KX1mdW5jdGlvbiBBMihjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTtyZXR1cm4gbmV3IEtl''@;'; put 'put ''KGE9PntHaShhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7R2koYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIGVhKGMsbCl7cmV0dXJuIGw/ZnVuY3Rpb24g''@;'; put 'put ''UGgoYyxsKXtpZihudWxsIT1jKXtpZihQbihjKSlyZXR1cm4gZnVuY3Rpb24geHUoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYoUm4oYykpcmV0dXJuIGZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVs''@;'; put 'put ''ZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZigkdChjKSlyZXR1cm4gZnVuY3Rpb24gZnMoYyxsKXtyZXR1cm4gS3IoYykucGlwZShlMChsKSxrMihsKSl9KGMsbCk7aWYo''@;'; put 'put ''bmkoYykpcmV0dXJuIEEyKGMsbCk7aWYoZ2koYykpcmV0dXJuIGZ1bmN0aW9uIFNyKGMsbCl7cmV0dXJuIG5ldyBLZShhPT57bGV0IGQ7cmV0dXJuIEdpKGEsbCwoKT0+e2Q9Y1txcl0oKSxHaShhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2go''@;'; put 'put ''Xyl7cmV0dXJuIHZvaWQgYS5lcnJvcihfKX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PlkoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKFVpKGMpKXJldHVybiBmdW5jdGlvbiBhMyhjLGwpe3JldHVybiBBMih4cihjKSxsKX0oYyxsKX10aHJvdyBsbihj''@;'; put 'put ''KX0oYyxsKTpLcihjKX1mdW5jdGlvbiBpcyguLi5jKXtjb25zdCBsPU4wKGMpLGE9ZnVuY3Rpb24gczMoYyxsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHVsKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP0tyKGRbMF0pOlBpKGEpKGVhKGQs''@;'; put 'put ''bCkpOkxvfWZ1bmN0aW9uIFdpKC4uLmMpe3JldHVybiBlYShjLE4wKGMpKX1mdW5jdGlvbiAkYShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBiZSkscmVzZXRPbkVycm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVy''@;'; put 'put ''biBmPT57bGV0IF8sVCxXLGllPTAsZ2U9ITEsd2U9ITE7Y29uc3QgRWU9KCk9PntUPy51bnN1YnNjcmliZSgpLFQ9dm9pZCAwfSxaZT0oKT0+e0VlKCksXz1XPXZvaWQgMCxnZT13ZT0hMX0sb3Q9KCk9Pntjb25zdCBldD1fO1plKCksZXQ/LnVuc3Vic2NyaWJlKCl9O3JldHVybiBYZSgoZXQs''@;'; put 'put ''eXQpPT57aWUrKywhd2UmJiFnZSYmRWUoKTtjb25zdCBrdD1XPVc/P2woKTt5dC5hZGQoKCk9PntpZS0tLDA9PT1pZSYmIXdlJiYhZ2UmJihUPXQwKG90LGgpKX0pLGt0LnN1YnNjcmliZSh5dCksIV8mJmllPjAmJihfPW5ldyBuZSh7bmV4dDpTdD0+a3QubmV4dChTdCksZXJyb3I6U3Q9Pnt3''@;'; put 'put ''ZT0hMCxFZSgpLFQ9dDAoWmUsYSxTdCksa3QuZXJyb3IoU3QpfSxjb21wbGV0ZTooKT0+e2dlPSEwLEVlKCksVD10MChaZSxkKSxrdC5jb21wbGV0ZSgpfX0pLEtyKGV0KS5zdWJzY3JpYmUoXykpfSkoZil9fWZ1bmN0aW9uIHQwKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZvaWQgYygp''@;'; put 'put ''O2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgbmUoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBLcihsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gU2EoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD1udWxsLGY9MCxfPSExO2NvbnN0IFQ9KCk9''@;'; put 'put ''Pl8mJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVWUoZCxXPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgaWU9MDtjb25zdCBnZT1mKys7S3IoYyhXLGdlKSkuc3Vic2NyaWJlKGg9VWUoZCx3ZT0+ZC5uZXh0KGw/bChXLHdlLGdlLGllKyspOndlKSwoKT0+e2g9bnVsbCxUKCl9KSl9LCgp''@;'; put 'put ''PT57Xz0hMCxUKCl9KSl9KX1mdW5jdGlvbiBFdShjLGwpe3JldHVybiBjPT09bH1mdW5jdGlvbiBBcyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09QXMpcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJlbmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1m''@;'; put 'put ''dW5jdGlvbiBuMChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIHFhKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitj''@;'; put 'put ''Lm1hcChxYSkuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBsPWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7''@;'; put 'put ''Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiB2YyhjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/YzpjKyIgIitsfWNvbnN0IEhoPUFzKHtfX2ZvcndhcmRfcmVmX186''@;'; put 'put ''QXN9KTtmdW5jdGlvbiBJcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189SXMsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBxYSh0aGlzKCkpfSxjfWZ1bmN0aW9uIGJvKGMpe3JldHVybiByMChjKT9jKCk6Y31mdW5jdGlvbiByMChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''YyYmYy5oYXNPd25Qcm9wZXJ0eShIaCkmJmMuX19mb3J3YXJkX3JlZl9fPT09SXN9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgbDM9Imh0dHBzOi8vZy5jby9uZy9zZWN1cml0eSN4c3MiO2NsYXNzIEFyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0''@;'; put 'put ''b3IobCxhKXtzdXBlcihmdW5jdGlvbiBfYyhjLGwpe3JldHVybmBORzAke01hdGguYWJzKGMpfSR7bD8iOiAiK2w6IiJ9YH0obCxhKSksdGhpcy5jb2RlPWx9fWZ1bmN0aW9uIGtvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0aW9uIFFp''@;'; put 'put ''KGMsbCl7dGhyb3cgbmV3IEFyKC0yMDEsITEpfWZ1bmN0aW9uIGZyKGMsbCl7bnVsbD09YyYmZnVuY3Rpb24gSG8oYyxsLGEsZCl7dGhyb3cgbmV3IEVycm9yKGBBU1NFUlRJT04gRVJST1I6ICR7Y31gKyhudWxsPT1kPyIiOmAgW0V4cGVjdGVkPT4gJHthfSAke2R9ICR7bH0gPD1BY3R1YWxd''@;'; put 'put ''YCkpfShsLGMsbnVsbCwiIT0iKX1mdW5jdGlvbiBocihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9fWZ1bmN0aW9uIG1pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtd''@;'; put 'put ''LGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24geGQoYyl7cmV0dXJuIEIwKGMsYzMpfHxCMChjLE5zKX1mdW5jdGlvbiBCMChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVsbH1mdW5jdGlvbiBubShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoamgp''@;'; put 'put ''fHxjLmhhc093blByb3BlcnR5KEs3KSk/Y1tqaF06bnVsbH1jb25zdCBjMz1Bcyh7XHUwMjc1cHJvdjpBc30pLGpoPUFzKHtcdTAyNzVpbmo6QXN9KSxOcz1Bcyh7bmdJbmplY3RhYmxlRGVmOkFzfSksSzc9QXMoe25nSW5qZWN0b3JEZWY6QXN9KTt2YXIgbnM9ZnVuY3Rpb24oYyl7cmV0dXJu''@;'; put 'put ''IGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KG5zfHx7fSk7bGV0IGg0O2Z1bmN0aW9uIGRpKGMpe2NvbnN0IGw9aDQ7cmV0''@;'; put 'put ''dXJuIGg0PWMsbH1mdW5jdGlvbiBXcyhjLGwsYSl7Y29uc3QgZD14ZChjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6YSZucy5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIFFpKHFhKGMp''@;'; put 'put ''KX1jb25zdCBPaT0oKCk9PnR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpc3x8dHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbHx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvd3x8dHlwZW9mIHNlbGY8InUiJiZ0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNl''@;'; put 'put ''b2YgV29ya2VyR2xvYmFsU2NvcGUmJnNlbGYpKCksczA9e30sazE9Il9fTkdfRElfRkxBR19fIixrdT0ibmdUZW1wVG9rZW5QYXRoIixuYz0vXG4vZ20sb209Il9fc291cmNlIjtsZXQga2Q7ZnVuY3Rpb24gQTEoYyl7Y29uc3QgbD1rZDtyZXR1cm4ga2Q9YyxsfWZ1bmN0aW9uIFg3KGMsbD1u''@;'; put 'put ''cy5EZWZhdWx0KXtpZih2b2lkIDA9PT1rZCl0aHJvdyBuZXcgQXIoLTIwMywhMSk7cmV0dXJuIG51bGw9PT1rZD9XcyhjLHZvaWQgMCxsKTprZC5nZXQoYyxsJm5zLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGFyKGMsbD1ucy5EZWZhdWx0KXtyZXR1cm4oZnVuY3Rpb24gc3Mo''@;'; put 'put ''KXtyZXR1cm4gaDR9KCl8fFg3KShibyhjKSxsKX1mdW5jdGlvbiBGaShjLGw9bnMuRGVmYXVsdCl7cmV0dXJuIGFyKGMsYTAobCkpfWZ1bmN0aW9uIGEwKGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOjB8KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChj''@;'; put 'put ''LnNlbGYmJjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBLYyhjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWJvKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgQXIoOTAwLCExKTtsZXQgaCxmPW5z''@;'; put 'put ''LkRlZmF1bHQ7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZFtfXSxXPXNtKFQpOyJudW1iZXIiPT10eXBlb2YgVz8tMT09PVc/aD1ULnRva2VuOmZ8PVc6aD1UfWwucHVzaChhcihoLGYpKX1lbHNlIGwucHVzaChhcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gemgoYyxsKXty''@;'; put 'put ''ZXR1cm4gY1trMV09bCxjLnByb3RvdHlwZVtrMV09bCxjfWZ1bmN0aW9uIHNtKGMpe3JldHVybiBjW2sxXX1mdW5jdGlvbiBkdShjKXtyZXR1cm57dG9TdHJpbmc6Y30udG9TdHJpbmcoKX12YXIgVDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5PblB1c2g9MF09Ik9uUHVzaCIsY1tjLkRlZmF1''@;'; put 'put ''bHQ9MV09IkRlZmF1bHQiLGN9KFQxfHx7fSksT2M9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FbXVsYXRlZD0wXT0iRW11bGF0ZWQiLGNbYy5Ob25lPTJdPSJOb25lIixjW2MuU2hhZG93RG9tPTNdPSJTaGFkb3dEb20iLGN9KE9jfHx7fSk7Y29uc3QgWGM9e30sU3M9W10sVGQ9QXMoe1x1MDI3''@;'; put 'put ''NWNtcDpBc30pLFVoPUFzKHtcdTAyNzVkaXI6QXN9KSxKYz1Bcyh7XHUwMjc1cGlwZTpBc30pLEQxPUFzKHtcdTAyNzVtb2Q6QXN9KSxsMD1Bcyh7XHUwMjc1ZmFjOkFzfSksWmg9QXMoe19fTkdfRUxFTUVOVF9JRF9fOkFzfSksbWE9QXMoe19fTkdfRU5WX0lEX186QXN9KTtmdW5jdGlvbiBQ''@;'; put 'put ''YyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4g''@;'; put 'put ''aH1hPWgrMX19ZnVuY3Rpb24gRGQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLF89YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsXyxULGYp''@;'; put 'put ''fWVsc2V7Y29uc3QgZj1oLF89YVsrK2RdO2Y0KGYpP2Muc2V0UHJvcGVydHkobCxmLF8pOmMuc2V0QXR0cmlidXRlKGwsZixfKSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIFIyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGY0KGMpe3JldHVybiA2ND09PWMuY2hhckNv''@;'; put 'put ''ZGVBdCgwKX1mdW5jdGlvbiBZaChjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9''@;'; put 'put ''aDowPT09YXx8cDQoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gcDQoYyxsLGEsZCxoKXtsZXQgZj0wLF89Yy5sZW5ndGg7aWYoLTE9PT1sKV89LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFQpe2lmKFQ9PT1sKXtfPS0xO2JyZWFrfWlmKFQ+bCl7Xz1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisx''@;'; put 'put ''XT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PV8mJihjLnNwbGljZShfLDAsbCksZj1fKzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5z''@;'; put 'put ''cGxpY2UoZisrLDAsaCl9Y29uc3QgZzQ9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBKNyhjLGwsYSl7bGV0IGQ9MCxoPSEwO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZCsrXTtpZigic3RyaW5nIj09dHlwZW9mIGYmJmgpe2NvbnN0IF89Y1tkKytdO2lmKGEmJiJjbGFzcyI9PT1mJiYtMSE9''@;'; put 'put ''PVBjKF8udG9Mb3dlckNhc2UoKSxsLDApKXJldHVybiEwfWVsc2V7aWYoMT09PWYpe2Zvcig7ZDxjLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZihmPWNbZCsrXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWwpcmV0dXJuITA7cmV0dXJuITF9Im51bWJlciI9PXR5cGVvZiBmJiYoaD0hMSl9fXJl''@;'; put 'put ''dHVybiExfWZ1bmN0aW9uIHUzKGMpe3JldHVybiA0PT09Yy50eXBlJiZjLnZhbHVlIT09ZzR9ZnVuY3Rpb24gTWEoYyxsLGEpe3JldHVybiBsPT09KDQhPT1jLnR5cGV8fGE/Yy52YWx1ZTpnNCl9ZnVuY3Rpb24gYzAoYyxsLGEpe2xldCBkPTQ7Y29uc3QgaD1jLmF0dHJzfHxbXSxmPWZ1bmN0''@;'; put 'put ''aW9uIFE3KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKFIyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk7bGV0IF89ITE7Zm9yKGxldCBUPTA7VDxsLmxlbmd0aDtUKyspe2NvbnN0IFc9bFtUXTtpZigibnVtYmVyIiE9dHlwZW9mIFcpe2lmKCFfKWlmKDQmZCl7''@;'; put 'put ''aWYoZD0yfDEmZCwiIiE9PVcmJiFNYShjLFcsYSl8fCIiPT09VyYmMT09PWwubGVuZ3RoKXtpZihGYyhkKSlyZXR1cm4hMTtfPSEwfX1lbHNle2NvbnN0IGllPTgmZD9XOmxbKytUXTtpZig4JmQmJm51bGwhPT1jLmF0dHJzKXtpZighSjcoYy5hdHRycyxpZSxhKSl7aWYoRmMoZCkpcmV0dXJu''@;'; put 'put ''ITE7Xz0hMH1jb250aW51ZX1jb25zdCB3ZT1kMyg4JmQ/ImNsYXNzIjpXLGgsdTMoYyksYSk7aWYoLTE9PT13ZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMDtjb250aW51ZX1pZigiIiE9PWllKXtsZXQgRWU7RWU9d2U+Zj8iIjpoW3dlKzFdLnRvTG93ZXJDYXNlKCk7Y29uc3QgWmU9OCZkP0Vl''@;'; put 'put ''Om51bGw7aWYoWmUmJi0xIT09UGMoWmUsaWUsMCl8fDImZCYmaWUhPT1FZSl7aWYoRmMoZCkpcmV0dXJuITE7Xz0hMH19fX1lbHNle2lmKCFfJiYhRmMoZCkmJiFGYyhXKSlyZXR1cm4hMTtpZihfJiZGYyhXKSljb250aW51ZTtfPSExLGQ9V3wxJmR9fXJldHVybiBGYyhkKXx8X31mdW5jdGlv''@;'; put 'put ''biBGYyhjKXtyZXR1cm4gMD09KDEmYyl9ZnVuY3Rpb24gZDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3QgXz1sW2hdO2lmKF89PT1jKXJldHVybiBoO2lmKDM9PT1ffHw2PT09XylmPSEwO2Vs''@;'; put 'put ''c2V7aWYoMT09PV98fDI9PT1fKXtsZXQgVD1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIFQ7KVQ9bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT1fKWJyZWFrO2lmKDA9PT1fKXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rpb24gZTkoYyxsKXtsZXQgYT1j''@;'; put 'put ''LmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBtNChjLGwsYT0hMSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0''@;'; put 'put ''aDtkKyspaWYoYzAoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHY0KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7aCsrKWlmKGNbaF0hPT1kW2hd''@;'; put 'put ''KWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIGRsKGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBhbShjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCBfPWNbYV07aWYoInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBfKWlmKDImZCl7Y29uc3QgVD1jWysrYV07aCs9IlsiK18rKFQubGVuZ3RoPjA/Jz0iJytUKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIitfOjQmZCYmKGgrPSIgIitfKTtlbHNlIiIhPT1oJiYhRmMoXykmJihsKz1kbChmLGgpLGg9IiIpLGQ9XyxmPWZ8fCFGYyhkKTthKyt9''@;'; put 'put ''cmV0dXJuIiIhPT1oJiYobCs9ZGwoZixoKSksbH1mdW5jdGlvbiB3cihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVsbCxuZ0NvbnRlbnRTZWxlY3Rv''@;'; put 'put ''cnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09VDEuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0YW5kYWxvbmVJbmplY3Rvcjpu''@;'; put 'put ''dWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fE9jLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8U3MsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGwsaWQ6IiJ9O2NtKGEpO2NvbnN0''@;'; put 'put ''IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mMyhkLCExKSxhLnBpcGVEZWZzPWYzKGQsITApLGEuaWQ9ZnVuY3Rpb24gcjkoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RWYXJzLGMuaG9zdEF0dHJzLGMu''@;'; put 'put ''Y29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYy50eXBlLnByb3RvdHlw''@;'; put 'put ''ZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKTw8MDtyZXR1cm4gbCs9MjE0NzQ4MzY0OCwiYyIrbH0oYSksYX0pfWZ1bmN0aW9uIHk0KGMpe3JldHVybiBRbyhjKXx8''@;'; put 'put ''S2EoYyl9ZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGwhPT1jfWZ1bmN0aW9uIHZpKGMpe3JldHVybiBkdSgoKT0+KHt0eXBlOmMudHlwZSxib290c3RyYXA6Yy5ib290c3RyYXB8fFNzLGRlY2xhcmF0aW9uczpjLmRlY2xhcmF0aW9uc3x8U3MsaW1wb3J0czpjLmltcG9ydHN8fFNzLGV4cG9y''@;'; put 'put ''dHM6Yy5leHBvcnRzfHxTcyx0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLGlkOmMuaWR8fG51bGx9KSl9ZnVuY3Rpb24gaDMoYyxsKXtpZihudWxsPT1jKXJldHVybiBYYztjb25zdCBhPXt9O2Zvcihjb25zdCBkIGluIGMpaWYoYy5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eShkKSl7bGV0IGg9Y1tkXSxmPWg7QXJyYXkuaXNBcnJheShoKSYmKGY9aFsxXSxoPWhbMF0pLGFbaF09ZCxsJiYobFtoXT1mKX1yZXR1cm4gYX1mdW5jdGlvbiBDcihjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPUM0KGMpO3JldHVybiBjbShsKSxsfSl9ZnVuY3Rpb24gTmEoYyl7''@;'; put 'put ''cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFFvKGMpe3JldHVybiBjW1RkXXx8''@;'; put 'put ''bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tVaF18fG51bGx9ZnVuY3Rpb24gUmwoYyl7cmV0dXJuIGNbSmNdfHxudWxsfWZ1bmN0aW9uIEhjKGMsbCl7Y29uc3QgYT1jW0QxXXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke3FhKGMpfSBkb2VzIG5vdCBo''@;'; put 'put ''YXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEM0KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhv''@;'; put 'put ''c3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fFhjLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGws''@;'; put 'put ''c3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8U3Msdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURl''@;'; put 'put ''ZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czpoMyhjLmlucHV0cyxsKSxvdXRwdXRzOmgzKGMub3V0cHV0cyl9fWZ1bmN0aW9uIGNtKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZjMoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/Umw6''@;'; put 'put ''eTQ7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihsbSl9Y29uc3QgSGk9MCxCaT0xLERvPTIsdWE9MyxYYT00LEkxPTUsem89NixUdT03LFZhPTgsTGQ9OSxMMT0xMCxWbz0xMSxHaD0xMixTND0xMyxPbD0xNCxKYT0xNSxPMj0xNixQ''@;'; put 'put ''Mj0xNyxodT0xOCwkaD0xOSxSMT0yMCxPMT0yMSx1MD0yMixwMz0yMyxnMz0yNCxwcz0yNSxNND0xLHVtPTIsZDA9NyxIMj05LHJjPTExO2Z1bmN0aW9uIENjKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbTTRdfWZ1bmN0aW9uIGljKGMpe3JldHVybiBB''@;'; put 'put ''cnJheS5pc0FycmF5KGMpJiYhMD09PWNbTTRdfWZ1bmN0aW9uIE9kKGMpe3JldHVybiAwIT0oNCZjLmZsYWdzKX1mdW5jdGlvbiBQMShjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gcWgoYyl7cmV0dXJuIDE9PSgxJmMuZmxhZ3MpfWZ1bmN0aW9uIFFjKGMpe3JldHVy''@;'; put 'put ''biEhYy50ZW1wbGF0ZX1mdW5jdGlvbiB4NChjKXtyZXR1cm4gMCE9KDUxMiZjW0RvXSl9ZnVuY3Rpb24gSDEoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShsMCk/Y1tsMF06bnVsbH1sZXQgSGQ9T2kuV2Vha1JlZj8/Y2xhc3MgajB7Y29uc3RydWN0b3IobCl7dGhpcy5yZWY9bH1kZXJl''@;'; put 'put ''Zigpe3JldHVybiB0aGlzLnJlZn19LG1tPTAsRHU9bnVsbCxtMz0hMTtmdW5jdGlvbiBmbChjKXtjb25zdCBsPUR1O3JldHVybiBEdT1jLGx9Y2xhc3MgdjN7Y29uc3RydWN0b3IoKXt0aGlzLmlkPW1tKyssdGhpcy5yZWY9ZnVuY3Rpb24gTjIoYyl7cmV0dXJuIG5ldyBIZChjKX0odGhpcyks''@;'; put 'put ''dGhpcy5wcm9kdWNlcnM9bmV3IE1hcCx0aGlzLmNvbnN1bWVycz1uZXcgTWFwLHRoaXMudHJhY2tpbmdWZXJzaW9uPTAsdGhpcy52YWx1ZVZlcnNpb249MH1jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKXtmb3IoY29uc3RbbCxhXW9mIHRoaXMucHJvZHVjZXJzKXtjb25zdCBkPWEu''@;'; put 'put ''cHJvZHVjZXJOb2RlLmRlcmVmKCk7aWYobnVsbCE9ZCYmYS5hdFRyYWNraW5nVmVyc2lvbj09PXRoaXMudHJhY2tpbmdWZXJzaW9uKXtpZihkLnByb2R1Y2VyUG9sbFN0YXR1cyhhLnNlZW5WYWx1ZVZlcnNpb24pKXJldHVybiEwfWVsc2UgdGhpcy5wcm9kdWNlcnMuZGVsZXRlKGwpLGQ/LmNv''@;'; put 'put ''bnN1bWVycy5kZWxldGUodGhpcy5pZCl9cmV0dXJuITF9cHJvZHVjZXJNYXlIYXZlQ2hhbmdlZCgpe2NvbnN0IGw9bTM7bTM9ITA7dHJ5e2Zvcihjb25zdFthLGRdb2YgdGhpcy5jb25zdW1lcnMpe2NvbnN0IGg9ZC5jb25zdW1lck5vZGUuZGVyZWYoKTtudWxsIT1oJiZoLnRyYWNraW5nVmVy''@;'; put 'put ''c2lvbj09PWQuYXRUcmFja2luZ1ZlcnNpb24/aC5vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCk6KHRoaXMuY29uc3VtZXJzLmRlbGV0ZShhKSxoPy5wcm9kdWNlcnMuZGVsZXRlKHRoaXMuaWQpKX19ZmluYWxseXttMz1sfX1wcm9kdWNlckFjY2Vzc2VkKCl7aWYobTMpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCIiKTtpZihudWxsPT09RHUpcmV0dXJuO2xldCBsPUR1LnByb2R1Y2Vycy5nZXQodGhpcy5pZCk7dm9pZCAwPT09bD8obD17Y29uc3VtZXJOb2RlOkR1LnJlZixwcm9kdWNlck5vZGU6dGhpcy5yZWYsc2VlblZhbHVlVmVyc2lvbjp0aGlzLnZhbHVlVmVyc2lvbixhdFRy''@;'; put 'put ''YWNraW5nVmVyc2lvbjpEdS50cmFja2luZ1ZlcnNpb259LER1LnByb2R1Y2Vycy5zZXQodGhpcy5pZCxsKSx0aGlzLmNvbnN1bWVycy5zZXQoRHUuaWQsbCkpOihsLnNlZW5WYWx1ZVZlcnNpb249dGhpcy52YWx1ZVZlcnNpb24sbC5hdFRyYWNraW5nVmVyc2lvbj1EdS50cmFja2luZ1ZlcnNp''@;'; put 'put ''b24pfWdldCBoYXNQcm9kdWNlcnMoKXtyZXR1cm4gdGhpcy5wcm9kdWNlcnMuc2l6ZT4wfWdldCBwcm9kdWNlclVwZGF0ZXNBbGxvd2VkKCl7cmV0dXJuITEhPT1EdT8uY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlc31wcm9kdWNlclBvbGxTdGF0dXMobCl7cmV0dXJuIHRoaXMudmFsdWVWZXJz''@;'; put 'put ''aW9uIT09bHx8KHRoaXMub25Qcm9kdWNlclVwZGF0ZVZhbHVlVmVyc2lvbigpLHRoaXMudmFsdWVWZXJzaW9uIT09bCl9fWxldCBMdT1udWxsO2Z1bmN0aW9uIEtoKGMpe2NvbnN0IGw9ZmwobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtmbChsKX19Y29uc3QgVTA9KCk9Pnt9O2NsYXNz''@;'; put 'put ''IF9tIGV4dGVuZHMgdjN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy53YXRjaD1sLHRoaXMuc2NoZWR1bGU9YSx0aGlzLmRpcnR5PSExLHRoaXMuY2xlYW51cEZuPVUwLHRoaXMucmVnaXN0ZXJPbkNsZWFudXA9aD0+e3RoaXMuY2xlYW51cEZuPWh9LHRoaXMuY29uc3VtZXJBbGxv''@;'; put 'put ''d1NpZ25hbFdyaXRlcz1kfW5vdGlmeSgpe3RoaXMuZGlydHl8fHRoaXMuc2NoZWR1bGUodGhpcyksdGhpcy5kaXJ0eT0hMH1vbkNvbnN1bWVyRGVwZW5kZW5jeU1heUhhdmVDaGFuZ2VkKCl7dGhpcy5ub3RpZnkoKX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fXJ1bigpe2lmKHRo''@;'; put 'put ''aXMuZGlydHk9ITEsMCE9PXRoaXMudHJhY2tpbmdWZXJzaW9uJiYhdGhpcy5jb25zdW1lclBvbGxQcm9kdWNlcnNGb3JDaGFuZ2UoKSlyZXR1cm47Y29uc3QgbD1mbCh0aGlzKTt0aGlzLnRyYWNraW5nVmVyc2lvbisrO3RyeXt0aGlzLmNsZWFudXBGbigpLHRoaXMuY2xlYW51cEZuPVUwLHRo''@;'; put 'put ''aXMud2F0Y2godGhpcy5yZWdpc3Rlck9uQ2xlYW51cCl9ZmluYWxseXtmbChsKX19Y2xlYW51cCgpe3RoaXMuY2xlYW51cEZuKCl9fWNsYXNzIG05e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1p''@;'; put 'put ''c0ZpcnN0Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIHZhKCl7cmV0dXJuIFQ0fWZ1bmN0aW9uIFQ0KGMpe3JldHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1fOSksdjl9ZnVuY3Rpb24gdjkoKXtjb25zdCBjPWJtKHRoaXMp''@;'; put 'put ''LGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PVhjKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBsKWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiBfOShjLGwsYSxkKXtjb25zdCBoPXRoaXMuZGVj''@;'; put 'put ''bGFyZWRJbnB1dHNbYV0sZj1ibShjKXx8ZnVuY3Rpb24gWjAoYyxsKXtyZXR1cm4gY1tGbF09bH0oYyx7cHJldmlvdXM6WGMsY3VycmVudDpudWxsfSksXz1mLmN1cnJlbnR8fChmLmN1cnJlbnQ9e30pLFQ9Zi5wcmV2aW91cyxXPVRbaF07X1toXT1uZXcgbTkoVyYmVy5jdXJyZW50VmFsdWUs''@;'; put 'put ''bCxUPT09WGMpLGNbZF09bH12YS5uZ0luaGVyaXQ9ITA7Y29uc3QgRmw9Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIGJtKGMpe3JldHVybiBjW0ZsXXx8bnVsbH1jb25zdCBoMD1mdW5jdGlvbihjLGwsYSl7fTtmdW5jdGlvbiBfYShjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9''@;'; put 'put ''Y1tIaV07cmV0dXJuIGN9ZnVuY3Rpb24gWTAoYyxsKXtyZXR1cm4gX2EobFtjXSl9ZnVuY3Rpb24gSGwoYyxsKXtyZXR1cm4gX2EobFtjLmluZGV4XSl9ZnVuY3Rpb24ga2UoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uICRlKGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gbXQoYyxs''@;'; put 'put ''KXtjb25zdCBhPWxbY107cmV0dXJuIENjKGEpP2E6YVtIaV19ZnVuY3Rpb24gSXIoYyxsKXtyZXR1cm4gbnVsbD09bD9udWxsOmNbbF19ZnVuY3Rpb24geW8oYyl7Y1tQMl09MH1mdW5jdGlvbiBlcyhjKXsxMDI0JmNbRG9dfHwoY1tEb118PTEwMjQsb2MoYywxKSl9ZnVuY3Rpb24genMoYyl7''@;'; put 'put ''MTAyNCZjW0RvXSYmKGNbRG9dJj0tMTAyNSxvYyhjLC0xKSl9ZnVuY3Rpb24gb2MoYyxsKXtsZXQgYT1jW3VhXTtpZihudWxsPT09YSlyZXR1cm47YVtJMV0rPWw7bGV0IGQ9YTtmb3IoYT1hW3VhXTtudWxsIT09YSYmKDE9PT1sJiYxPT09ZFtJMV18fC0xPT09bCYmMD09PWRbSTFdKTspYVtJ''@;'; put 'put ''MV0rPWwsZD1hLGE9YVt1YV19Y29uc3QgUG89e2xGcmFtZTpadyhudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5jdGlvbiBQdygpe3JldHVybiBQby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gdzMoKXtyZXR1cm4gbnVsbCE9PVBvLnNr''@;'; put 'put ''aXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gWHIoKXtyZXR1cm4gUG8ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIFRzKCl7cmV0dXJuIFBvLmxGcmFtZS50Vmlld31mdW5jdGlvbiBCdChjKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbVmFdfWZ1bmN0aW9uIGp0KGMpe3Jl''@;'; put 'put ''dHVybiBQby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBTYygpe2xldCBjPUZ3KCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJlbnQ7cmV0dXJuIGN9ZnVuY3Rpb24gRncoKXtyZXR1cm4gUG8ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBOMShj''@;'; put 'put ''LGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGI5KCl7cmV0dXJuIFBvLmxGcmFtZS5pc1BhcmVudH1mdW5jdGlvbiBDbSgpe1BvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBOYygpe2NvbnN0IGM9UG8ubEZyYW1lO2xldCBs''@;'; put 'put ''PWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIE5kKCl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gQzMoKXtyZXR1cm4gUG8ubEZyYW1lLmJpbmRp''@;'; put 'put ''bmdJbmRleCsrfWZ1bmN0aW9uIFYxKGMpe2NvbnN0IGw9UG8ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4K2MsYX1mdW5jdGlvbiBLVChjLGwpe2NvbnN0IGE9UG8ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJ''@;'; put 'put ''bmRleD1jLFNtKGwpfWZ1bmN0aW9uIFNtKGMpe1BvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiB3OShjKXtjb25zdCBsPVBvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBCdygpe3JldHVybiBQby5s''@;'; put 'put ''RnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gQzkoYyl7UG8ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gancoYyl7Y29uc3QgbD1jW0JpXTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2Nbem9dOm51bGx9ZnVuY3Rpb24gencoYyxs''@;'; put 'put ''LGEpe2lmKGEmbnMuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJm5zLkhvc3R8fChoPWp3KGYpLG51bGw9PT1ofHwoZj1mW09sXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9UG8ubEZyYW1lPVV3''@;'; put 'put ''KCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIFM5KGMpe2NvbnN0IGw9VXcoKSxhPWNbQmldO1BvLmxGcmFtZT1sLGwuY3VycmVudFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5k''@;'; put 'put ''ZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiBVdygpe2NvbnN0IGM9UG8ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVybiBudWxsPT09bD9adyhjKTpsfWZ1bmN0aW9uIFp3KGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50''@;'; put 'put ''OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFjZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxj''@;'; put 'put ''dXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gWXcoKXtjb25zdCBjPVBvLmxGcmFtZTtyZXR1cm4gUG8ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmll''@;'; put 'put ''dz1udWxsLGN9Y29uc3QgV3c9WXc7ZnVuY3Rpb24gTW0oKXtjb25zdCBjPVl3KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMuY29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMu''@;'; put 'put ''Y3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gZXUoKXtyZXR1cm4gUG8ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gWGgoYyl7UG8ubEZyYW1lLnNlbGVjdGVkSW5k''@;'; put 'put ''ZXg9Y31mdW5jdGlvbiBRYSgpe2NvbnN0IGM9UG8ubEZyYW1lO3JldHVybiBrZShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0ICR3PSEwO2Z1bmN0aW9uIHhtKCl7cmV0dXJuICR3fWZ1bmN0aW9uIFZkKGMpeyR3PWN9ZnVuY3Rpb24gRW0oYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVT''@;'; put 'put ''dGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6XyxuZ0FmdGVyQ29udGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6VyxuZ0FmdGVyVmlld0NoZWNrZWQ6aWUsbmdPbkRlc3Ryb3k6Z2V9''@;'; put 'put ''PWY7XyYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsXyksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLFQpKSxXJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxXKSxpZSYmKChjLnZpZXdIb29rcz8/''@;'; put 'put ''PVtdKS5wdXNoKGEsaWUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxpZSkpLG51bGwhPWdlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLGdlKX19ZnVuY3Rpb24ga20oYyxsLGEpe3F3KGMsbCwzLGEpfWZ1bmN0aW9uIEFtKGMsbCxhLGQpeygzJmNbRG9dKT09PWEmJnF3''@;'; put 'put ''KGMsbCxhLGQpfWZ1bmN0aW9uIE05KGMsbCl7bGV0IGE9Y1tEb107KDMmYSk9PT1sJiYoYSY9ODE5MSxhKz0xLGNbRG9dPWEpfWZ1bmN0aW9uIHF3KGMsbCxhLGQpe2NvbnN0IGY9ZD8/LTEsXz1sLmxlbmd0aC0xO2xldCBUPTA7Zm9yKGxldCBXPXZvaWQgMCE9PWQ/NjU1MzUmY1tQMl06MDtX''@;'; put 'put ''PF87VysrKWlmKCJudW1iZXIiPT10eXBlb2YgbFtXKzFdKXtpZihUPWxbV10sbnVsbCE9ZCYmVD49ZClicmVha31lbHNlIGxbV108MCYmKGNbUDJdKz02NTUzNiksKFQ8Znx8LTE9PWYpJiYoaUQoYyxhLGwsVyksY1tQMl09KDQyOTQ5MDE3NjAmY1tQMl0pK1crMiksVysrfWZ1bmN0aW9uIEt3''@;'; put 'put ''KGMsbCl7aDAoNCxjLGwpO2NvbnN0IGE9ZmwobnVsbCk7dHJ5e2wuY2FsbChjKX1maW5hbGx5e2ZsKGEpLGgwKDUsYyxsKX19ZnVuY3Rpb24gaUQoYyxsLGEsZCl7Y29uc3QgaD1hW2RdPDAsZj1hW2QrMV0sVD1jW2g/LWFbZF06YVtkXV07aD9jW0RvXT4+MTM8Y1tQMl0+PjE2JiYoMyZjW0Rv''@;'; put 'put ''XSk9PT1sJiYoY1tEb10rPTgxOTIsS3coVCxmKSk6S3coVCxmKX1jb25zdCBTMz0tMTtjbGFzcyBSNHtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9u''@;'; put 'put ''IFh3KGMpe3JldHVybiBjIT09UzN9ZnVuY3Rpb24gQjIoYyl7cmV0dXJuIDMyNzY3JmN9ZnVuY3Rpb24gTTMoYyxsKXtsZXQgYT1mdW5jdGlvbiBFOShjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW09sXSxhLS07cmV0dXJuIGR9bGV0IE80PSEwO2Z1bmN0aW9uIEIxKGMp''@;'; put 'put ''e2NvbnN0IGw9TzQ7cmV0dXJuIE80PWMsbH1jb25zdCBUbT0yNTUsSnc9NTtsZXQgRG09MDtjb25zdCBqMT17fTtmdW5jdGlvbiBJbShjLGwpe2NvbnN0IGE9UXcoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0JpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRl''@;'; put 'put ''eD1sLmxlbmd0aCxKaChkLmRhdGEsYyksSmgobCxudWxsKSxKaChkLmJsdWVwcmludCxudWxsKSk7Y29uc3QgaD1BOShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKFh3KGgpKXtjb25zdCBfPUIyKGgpLFQ9TTMoaCxsKSxXPVRbQmldLmRhdGE7Zm9yKGxldCBpZT0wO2llPDg7aWUrKylsW2Yr''@;'; put 'put ''aWVdPVRbXytpZV18V1tfK2llXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBKaChjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gUXcoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmlu''@;'; put 'put ''amVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmluamVjdG9ySW5kZXh9ZnVuY3Rpb24gQTkoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9''@;'; put 'put ''bDtmb3IoO251bGwhPT1oOyl7aWYoZD1zQyhoKSxudWxsPT09ZClyZXR1cm4gUzM7aWYoYSsrLGg9aFtPbF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gUzN9ZnVuY3Rpb24gVDkoYyxsLGEpeyFmdW5jdGlvbiBrOShjLGwsYSl7bGV0''@;'; put 'put ''IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFzT3duUHJvcGVydHkoWmgpJiYoZD1hW1poXSksbnVsbD09ZCYmKGQ9YVtaaF09RG0rKyk7Y29uc3QgaD1kJlRtO2wuZGF0YVtjKyhoPj5KdyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gZUMoYyxsLGEpe2lm''@;'; put 'put ''KGEmbnMuT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7UWkoKX1mdW5jdGlvbiB0QyhjLGwsYSxkKXtpZihhJm5zLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKG5zLlNlbGZ8bnMuSG9zdCkpKXtjb25zdCBoPWNbTGRdLGY9ZGkodm9pZCAwKTt0cnl7cmV0dXJuIGg/''@;'; put 'put ''aC5nZXQobCxkLGEmbnMuT3B0aW9uYWwpOldzKGwsZCxhJm5zLk9wdGlvbmFsKX1maW5hbGx5e2RpKGYpfX1yZXR1cm4gZUMoZCwwLGEpfWZ1bmN0aW9uIG5DKGMsbCxhLGQ9bnMuRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW0RvXSYmIShkJm5zLlNlbGYpKXtjb25zdCBfPWZ1''@;'; put 'put ''bmN0aW9uIGREKGMsbCxhLGQsaCl7bGV0IGY9YyxfPWw7Zm9yKDtudWxsIT09ZiYmbnVsbCE9PV8mJjIwNDgmX1tEb10mJiEoNTEyJl9bRG9dKTspe2NvbnN0IFQ9ckMoZixfLGEsZHxucy5TZWxmLGoxKTtpZihUIT09ajEpcmV0dXJuIFQ7bGV0IFc9Zi5wYXJlbnQ7aWYoIVcpe2NvbnN0IGll''@;'; put 'put ''PV9bUjFdO2lmKGllKXtjb25zdCBnZT1pZS5nZXQoYSxqMSxkKTtpZihnZSE9PWoxKXJldHVybiBnZX1XPXNDKF8pLF89X1tPbF19Zj1XfXJldHVybiBofShjLGwsYSxkLGoxKTtpZihfIT09ajEpcmV0dXJuIF99Y29uc3QgZj1yQyhjLGwsYSxkLGoxKTtpZihmIT09ajEpcmV0dXJuIGZ9cmV0''@;'; put 'put ''dXJuIHRDKGwsYSxkLGgpfWZ1bmN0aW9uIHJDKGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjRChjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoWmgpP2NbWmhdOnZvaWQgMDtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIGw/bD49MD9sJlRtOnVEOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKXtpZighencobCxjLGQpKXJldHVybiBkJm5zLkhvc3Q/ZUMoaCwwLGQpOnRDKGwsYSxkLGgpO3RyeXtjb25zdCBfPWYoZCk7aWYobnVsbCE9X3x8ZCZucy5PcHRpb25hbClyZXR1cm4gXztRaSgp''@;'; put 'put ''fWZpbmFsbHl7V3coKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCBfPW51bGwsVD1RdyhjLGwpLFc9UzMsaWU9ZCZucy5Ib3N0P2xbSmFdW3pvXTpudWxsO2ZvcigoLTE9PT1UfHxkJm5zLlNraXBTZWxmKSYmKFc9LTE9PT1UP0E5KGMsbCk6bFtUKzhdLFchPT1TMyYmb0MoZCwh''@;'; put 'put ''MSk/KF89bFtCaV0sVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTEpOy0xIT09VDspe2NvbnN0IGdlPWxbQmldO2lmKGlDKGYsVCxnZS5kYXRhKSl7Y29uc3Qgd2U9bEQoVCxsLGEsXyxkLGllKTtpZih3ZSE9PWoxKXJldHVybiB3ZX1XPWxbVCs4XSxXIT09UzMmJm9DKGQsbFtCaV0uZGF0YVtUKzhd''@;'; put 'put ''PT09aWUpJiZpQyhmLFQsbCk/KF89Z2UsVD1CMihXKSxsPU0zKFcsbCkpOlQ9LTF9fXJldHVybiBofWZ1bmN0aW9uIGxEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWxbQmldLFQ9Xy5kYXRhW2MrOF0sZ2U9TG0oVCxfLGEsbnVsbD09ZD9QMShUKSYmTzQ6ZCE9XyYmMCE9KDMmVC50eXBlKSxoJm5z''@;'; put 'put ''Lkhvc3QmJmY9PT1UKTtyZXR1cm4gbnVsbCE9PWdlP1FoKGwsXyxnZSxUKTpqMX1mdW5jdGlvbiBMbShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5wcm92aWRlckluZGV4ZXMsXz1sLmRhdGEsVD0xMDQ4NTc1JmYsVz1jLmRpcmVjdGl2ZVN0YXJ0LGdlPWY+PjIwLEVlPWg/VCtnZTpjLmRpcmVjdGl2''@;'; put 'put ''ZUVuZDtmb3IobGV0IFplPWQ/VDpUK2dlO1plPEVlO1plKyspe2NvbnN0IG90PV9bWmVdO2lmKFplPFcmJmE9PT1vdHx8WmU+PVcmJm90LnR5cGU9PT1hKXJldHVybiBaZX1pZihoKXtjb25zdCBaZT1fW1ddO2lmKFplJiZRYyhaZSkmJlplLnR5cGU9PT1hKXJldHVybiBXfXJldHVybiBudWxs''@;'; put 'put ''fWZ1bmN0aW9uIFFoKGMsbCxhLGQpe2xldCBoPWNbYV07Y29uc3QgZj1sLmRhdGE7aWYoZnVuY3Rpb24gb0QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBSNH0oaCkpe2NvbnN0IF89aDtfLnJlc29sdmluZyYmZnVuY3Rpb24gbzAoYyxsKXtjb25zdCBhPWw/YC4gRGVwZW5kZW5jeSBwYXRoOiAk''@;'; put 'put ''e2wuam9pbigiID4gIil9ID4gJHtjfWA6IiI7dGhyb3cgbmV3IEFyKC0yMDAsYENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWQgZm9yICR7Y30ke2F9YCl9KGZ1bmN0aW9uIENzKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFtZXx8Yy50b1N0cmluZygpOiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6a28oYyl9KGZbYV0pKTtjb25zdCBUPUIxKF8uY2FuU2VlVmlld1Byb3ZpZGVycyk7Xy5yZXNvbHZpbmc9ITA7Y29uc3QgVz1fLmluamVjdEltcGw/''@;'; put 'put ''ZGkoXy5pbmplY3RJbXBsKTpudWxsO3p3KGMsZCxucy5EZWZhdWx0KTt0cnl7aD1jW2FdPV8uZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiByRChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpo''@;'; put 'put ''LG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IF89VDQobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsXyksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyxfKX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigo''@;'; put 'put ''YS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVcmJmRpKFcpLEIxKFQpLF8ucmVzb2x2aW5nPSExLFd3KCl9fXJldHVybiBofWZ1bmN0aW9uIGlDKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4hIShhW2wrKGM+Pkp3KV0mMTw8Yyl9ZnVuY3Rpb24gb0MoYyxsKXtyZXR1cm4hKGMmbnMuU2VsZnx8YyZucy5Ib3N0JiZsKX1jbGFzcyB4M3tjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVybiBuQyh0aGlzLl90Tm9kZSx0aGlz''@;'; put 'put ''Ll9sVmlldyxsLGEwKGQpLGEpfX1mdW5jdGlvbiB1RCgpe3JldHVybiBuZXcgeDMoU2MoKSxYcigpKX1mdW5jdGlvbiB4YShjKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtsMF18fEcwKGwpLGQ9T2JqZWN0LnByb3RvdHlwZTtsZXQgaD1PYmpl''@;'; put 'put ''Y3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbbDBdfHxHMChoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9KX1mdW5jdGlvbiBHMChjKXtyZXR1''@;'; put 'put ''cm4gcjAoYyk/KCk9Pntjb25zdCBsPUcwKGJvKGMpKTtyZXR1cm4gbCYmbCgpfTpIMShjKX1mdW5jdGlvbiBzQyhjKXtjb25zdCBsPWNbQmldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3pvXTpudWxsfWZ1bmN0aW9uIFA0KGMpe3JldHVybiBmdW5jdGlvbiBE''@;'; put 'put ''OShjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYoUjIoZikpYnJlYWs7aWYoMD09PWYp''@;'; put 'put ''aCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0oU2MoKSxjKX1jb25zdCBrMz0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIFQz''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gZHUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIFJtKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hdPWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaCly''@;'; put 'put ''ZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3QgXz1uZXcgaCguLi5mKTtyZXR1cm4gVC5hbm5vdGF0aW9uPV8sVDtmdW5jdGlvbiBUKFcsaWUsZ2Upe2NvbnN0IHdlPVcuaGFzT3duUHJvcGVydHkoazMpP1dbazNdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLGszLHt2YWx1ZTpbXX0p''@;'; put 'put ''W2szXTtmb3IoO3dlLmxlbmd0aDw9Z2U7KXdlLnB1c2gobnVsbCk7cmV0dXJuKHdlW2dlXT13ZVtnZV18fFtdKS5wdXNoKF8pLFd9fXJldHVybiBhJiYoaC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0''@;'; put 'put ''aW9uQ2xzPWgsaH0pfWNvbnN0IE9tPUZ1bmN0aW9uO2Z1bmN0aW9uIEY0KGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/RjQoYSxsKTpsKGEpKX1mdW5jdGlvbiAkMChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBQbShjLGwp''@;'; put 'put ''e3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBCZChjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxjO2QrKylhLnB1c2gobCk7cmV0dXJuIGF9ZnVuY3Rpb24gTWMoYyxsLGEpe2xldCBkPWpkKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRd''@;'; put 'put ''PWE6KGQ9fmQsZnVuY3Rpb24gbUQoYyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1ts''@;'; put 'put ''KzFdPWR9fShjLGQsbCxhKSksZH1mdW5jdGlvbiB0ZihjLGwpe2NvbnN0IGE9amQoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gamQoYyxsKXtyZXR1cm4gZnVuY3Rpb24gdkQoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyho''@;'; put 'put ''LWQ+PjEpLF89Y1tmPDxhXTtpZihsPT09XylyZXR1cm4gZjw8YTtfPmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCB6Mj16aChUMygiT3B0aW9uYWwiKSw4KSxnMD16aChUMygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBZbShjKXtyZXR1cm4gMTI4PT0oMTI4JmMuZmxh''@;'; put 'put ''Z3MpfXZhciBZMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShZMnx8e30pO2NvbnN0IGtEPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csQUQ9Lyg8fD4pLyxXbT0iXHUyMDBiJDFcdTIwMGIi''@;'; put 'put ''O2NvbnN0IEg5PW5ldyBNYXA7bGV0IE45PTA7Y29uc3QgQjk9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIFZjKGMsbCl7Q2MobCk/KGNbQjldPWxbJGhdLGZ1bmN0aW9uIGo0KGMpe0g5LnNldChjWyRoXSxjKX0obCkpOmNbQjldPWx9bGV0IGo5O2Z1bmN0aW9uIHo5KGMsbCl7cmV0dXJuIGo5''@;'; put 'put ''KGMsbCl9ZnVuY3Rpb24gWjQoYyl7Y29uc3QgbD1jW3VhXTtyZXR1cm4gaWMobCk/bFt1YV06bH1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gR20oY1tHaF0pfWZ1bmN0aW9uIFNDKGMpe3JldHVybiBHbShjW1hhXSl9ZnVuY3Rpb24gR20oYyl7Zm9yKDtudWxsIT09YyYmIWljKGMpOyljPWNbWGFd''@;'; put 'put ''O3JldHVybiBjfWZ1bmN0aW9uIHJmKGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsXz0hMTtpYyhkKT9mPWQ6Q2MoZCkmJihfPSEwLGQ9ZFtIaV0pO2NvbnN0IFQ9X2EoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/RzIobCxhLFQpOlkxKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZu''@;'; put 'put ''dWxsIT09YT9ZMShsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiB0NihjLGwsYSl7Y29uc3QgZD1IMyhjLGwpO2QmJmZ1bmN0aW9uIE91KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULF8pOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYm''@;'; put 'put ''JmZ1bmN0aW9uIExDKGMsbCxhLGQsaCl7Y29uc3QgZj1hW2QwXTtmIT09X2EoYSkmJnJmKGwsYyxkLGYsaCk7Zm9yKGxldCBUPXJjO1Q8YS5sZW5ndGg7VCsrKXtjb25zdCBXPWFbVF07RzQoV1tCaV0sVyxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFU5KGMsbCl7cmV0dXJuIGMu''@;'; put 'put ''Y3JlYXRlQ29tbWVudChmdW5jdGlvbiBCNChjKXtyZXR1cm4gYy5yZXBsYWNlKGtELGw9PmwucmVwbGFjZShBRCxXbSkpfShsKSl9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiB4QyhjLGwpe2NvbnN0IGE9Y1tIMl0sZD1hLmluZGV4T2Yo''@;'; put 'put ''bCk7enMobCksYS5zcGxpY2UoZCwxKX1mdW5jdGlvbiBzZihjLGwpe2lmKGMubGVuZ3RoPD1yYylyZXR1cm47Y29uc3QgYT1yYytsLGQ9Y1thXTtpZihkKXtjb25zdCBoPWRbTzJdO251bGwhPT1oJiZoIT09YyYmeEMoaCxkKSxsPjAmJihjW2EtMV1bWGFdPWRbWGFdKTtjb25zdCBmPVBtKGMs''@;'; put 'put ''cmMrbCk7IWZ1bmN0aW9uIEJEKGMsbCl7RzQoYyxsLGxbVm9dLDIsbnVsbCxudWxsKSxsW0hpXT1udWxsLGxbem9dPW51bGx9KGRbQmldLGQpO2NvbnN0IF89ZltodV07bnVsbCE9PV8mJl8uZGV0YWNoVmlldyhmW0JpXSksZFt1YV09bnVsbCxkW1hhXT1udWxsLGRbRG9dJj0tMTI5fXJldHVy''@;'; put 'put ''biBkfWZ1bmN0aW9uIEttKGMsbCl7aWYoISgyNTYmbFtEb10pKXtjb25zdCBhPWxbVm9dO2xbcDNdPy5kZXN0cm95KCksbFtnM10/LmRlc3Ryb3koKSxhLmRlc3Ryb3lOb2RlJiZHNChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gVUQoYyl7bGV0IGw9Y1tHaF07aWYoIWwpcmV0dXJuIFht''@;'; put 'put ''KGNbQmldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoQ2MobCkpYT1sW0doXTtlbHNle2NvbnN0IGQ9bFtyY107ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbWGFdJiZsIT09YzspQ2MobCkmJlhtKGxbQmldLGwpLGw9bFt1YV07bnVsbD09PWwmJihsPWMpLENjKGwpJiZYbShsW0JpXSxs''@;'; put 'put ''KSxhPWwmJmxbWGFdfWw9YX19KGwpfX1mdW5jdGlvbiBYbShjLGwpe2lmKCEoMjU2JmxbRG9dKSl7bFtEb10mPS0xMjksbFtEb118PTI1NixmdW5jdGlvbiBrQyhjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2Qr''@;'; put 'put ''PTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBSNCkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKz0yKXtjb25zdCBUPWhbZltfXV0sVz1mW18rMV07aDAoNCxULFcpO3RyeXtXLmNhbGwoVCl9ZmluYWxseXto''@;'; put 'put ''MCg1LFQsVyl9fWVsc2V7aDAoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtoMCg1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIEVDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW1R1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGFbZl0pe2NvbnN0IF89YVtmKzNdO18+PTA/ZFtfXSgpOmRbLV9dLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFtUdV09bnVsbCk7Y29uc3QgaD1sW08xXTtpZihudWxsIT09aCl7bFtPMV09bnVsbDtmb3IobGV0IGY9MDtm''@;'; put 'put ''PGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtCaV0udHlwZSYmbFtWb10uZGVzdHJveSgpO2NvbnN0IGE9bFtPMl07aWYobnVsbCE9PWEmJmljKGxbdWFdKSl7YSE9PWxbdWFdJiZ4QyhhLGwpO2NvbnN0IGQ9bFtodV07bnVsbCE9PWQmJmQuZGV0YWNoVmlldyhjKX0hZnVu''@;'; put 'put ''Y3Rpb24gVEQoYyl7SDkuZGVsZXRlKGNbJGhdKX0obCl9fWZ1bmN0aW9uIEYzKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWTQoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVtIaV07e2NvbnN0e2NvbXBv''@;'; put 'put ''bmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRpb246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PU9jLk5vbmV8fGY9PT1PYy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gSGwoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWTEoYyxs''@;'; put 'put ''LGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBHMihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIEptKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WTEoYyxsLGEsZCxoKTpHMihjLGwsYSl9ZnVuY3Rpb24gSDMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwp''@;'; put 'put ''fWZ1bmN0aW9uIFcxKGMsbCxhKXtyZXR1cm4gVEMoYyxsLGEpfWxldCBRbSwkNCxHOSxuNixUQz1mdW5jdGlvbiBBQyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9IbChjLGEpOm51bGx9O2Z1bmN0aW9uIGU2KGMsbCxhLGQpe2NvbnN0IGg9RjMoYyxkLGwpLGY9bFtWb10sVD1XMShkLnBhcmVu''@;'; put 'put ''dHx8bFt6b10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCBXPTA7VzxhLmxlbmd0aDtXKyspSm0oZixoLGFbV10sVCwhMSk7ZWxzZSBKbShmLGgsYSxULCExKTt2b2lkIDAhPT1RbSYmUW0oZixkLGwsYSxoKX1mdW5jdGlvbiBXNChjLGwpe2lmKG51bGwhPT1s''@;'; put 'put ''KXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIEhsKGwsYyk7aWYoNCZhKXJldHVybiBZOSgtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gVzQoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBpYyhoKT9ZOSgtMSxoKTpf''@;'; put 'put ''YShoKX19aWYoMzImYSlyZXR1cm4gejkobCxjKSgpfHxfYShjW2wuaW5kZXhdKTt7Y29uc3QgZD1EQyhjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06VzQoWjQoY1tKYV0pLGQpOlc0KGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gREMoYyxsKXtyZXR1''@;'; put 'put ''cm4gbnVsbCE9PWw/Y1tKYV1bem9dLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxsfWZ1bmN0aW9uIFk5KGMsbCl7Y29uc3QgYT1yYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtCaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gVzQoZCxoKX1yZXR1cm4g''@;'; put 'put ''bFtkMF19ZnVuY3Rpb24gVzkoYyxsLGEsZCxoLGYsXyl7Zm9yKDtudWxsIT1hOyl7Y29uc3QgVD1kW2EuaW5kZXhdLFc9YS50eXBlO2lmKF8mJjA9PT1sJiYoVCYmVmMoX2EoVCksZCksYS5mbGFnc3w9MiksMzIhPSgzMiZhLmZsYWdzKSlpZig4JlcpVzkoYyxsLGEuY2hpbGQsZCxoLGYsITEp''@;'; put 'put ''LHJmKGwsYyxoLFQsZik7ZWxzZSBpZigzMiZXKXtjb25zdCBpZT16OShhLGQpO2xldCBnZTtmb3IoO2dlPWllKCk7KXJmKGwsYyxoLGdlLGYpO3JmKGwsYyxoLFQsZil9ZWxzZSAxNiZXP1dEKGMsbCxkLGEsaCxmKTpyZihsLGMsaCxULGYpO2E9Xz9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19''@;'; put 'put ''ZnVuY3Rpb24gRzQoYyxsLGEsZCxoLGYpe1c5KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1bmN0aW9uIFdEKGMsbCxhLGQsaCxmKXtjb25zdCBfPWFbSmFdLFc9X1t6b10ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoVykpZm9yKGxldCBpZT0wO2llPFcu''@;'; put 'put ''bGVuZ3RoO2llKyspcmYobCxjLGgsV1tpZV0sZik7ZWxzZXtsZXQgaWU9Vztjb25zdCBnZT1fW3VhXTtZbShkKSYmKGllLmZsYWdzfD0xMjgpLFc5KGMsbCxpZSxnZSxoLGYsITApfX1mdW5jdGlvbiBSQyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRB''@;'; put 'put ''dHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIE9DKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmRGQoYyxsLGQpLG51bGwhPT1oJiZSQyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIEdEKGMsbCxhKXtjLnNldEF0dHJpYnV0''@;'; put 'put ''ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1mdW5jdGlvbiBOMyhjKXtyZXR1cm4gZnVuY3Rpb24gcTQoKXtpZih2b2lkIDA9PT0kNCYmKCQ0PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7JDQ9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj''@;'; put 'put ''cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gJDR9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSzQoKXtpZih2b2lkIDAhPT1HOSlyZXR1cm4gRzk7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3''@;'; put 'put ''IEFyKDIxMCwhMSl9ZnVuY3Rpb24gJDkoKXtpZih2b2lkIDA9PT1uNiYmKG42PW51bGwsT2kudHJ1c3RlZFR5cGVzKSl0cnl7bjY9T2kudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNy''@;'; put 'put ''ZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBuNn1mdW5jdGlvbiBIQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBWQyhjKXtyZXR1cm4gJDkoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIEJDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hh''@;'; put 'put ''bmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bDN9KWB9fWZ1bmN0aW9uICQy''@;'; put 'put ''KGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkM/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gWDQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIHRJKGMpe3JldHVybiBjIGluc3RhbmNlb2YgQkMmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVs''@;'; put 'put ''bCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bDN9KWApfXJldHVybiBhPT09bH1jbGFzcyBxOXtjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0''@;'; put 'put ''RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKE4zKGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlz''@;'; put 'put ''LmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xhc3MgSzl7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVm''@;'; put 'put ''YXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TjMobCks''@;'; put 'put ''YX19Y29uc3Qgbkk9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gWDkoYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaChuSSk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBHMShjKXtjb25zdCBsPXt9O2Zvcihjb25z''@;'; put 'put ''dCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIEJhKC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBaZD1HMSgiYXJlYSxicixjb2ws''@;'; put 'put ''aHIsaW1nLHdiciIpLEo5PUcxKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksUTk9RzEoInJwLHJ0IiksZXY9QmEoWmQsQmEoSjksRzEoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRp''@;'; put 'put ''YWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLEJhKFE5LEcxKCJhLGFiYnIsYWNyb255bSxhdWRpbyxi''@;'; put 'put ''LGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8i''@;'; put 'put ''KSksQmEoUTksSjkpKSx0dj1HMSgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksekM9QmEodHYsRzEoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNl''@;'; put 'put ''bGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtp''@;'; put 'put ''bmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5''@;'; put 'put ''LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLEcxKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50''@;'; put 'put ''LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1n''@;'; put 'put ''cmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1v''@;'; put 'put ''cmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dz''@;'; put 'put ''cGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSxpST1HMSgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3Mgb0l7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0''@;'; put 'put ''aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwO2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RF''@;'; put 'put ''P3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZClhPWEuZmlyc3RDaGlsZDtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBoPXRoaXMuY2hlY2tD''@;'; put 'put ''bG9iYmVyZWRFbGVtZW50KGEsYS5uZXh0U2libGluZyk7aWYoaCl7YT1oO2JyZWFrfWE9dGhpcy5jaGVja0Nsb2JiZXJlZEVsZW1lbnQoYSxhLnBhcmVudE5vZGUpfXJldHVybiB0aGlzLmJ1Zi5qb2luKCIiKX1zdGFydEVsZW1lbnQobCl7Y29uc3QgYT1sLm5vZGVOYW1lLnRvTG93ZXJDYXNl''@;'; put 'put ''KCk7aWYoIWV2Lmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhaUkuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDto''@;'; put 'put ''Kyspe2NvbnN0IGY9ZC5pdGVtKGgpLF89Zi5uYW1lLFQ9Xy50b0xvd2VyQ2FzZSgpO2lmKCF6Qy5oYXNPd25Qcm9wZXJ0eShUKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IFc9Zi52YWx1ZTt0dltUXSYmKFc9WDkoVykpLHRoaXMuYnVmLnB1c2goIiAiLF8sJz0i''@;'; put 'put ''JyxVQyhXKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtldi5oYXNPd25Qcm9wZXJ0eShhKSYmIVpkLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5w''@;'; put 'put ''dXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChVQyhsKSl9Y2hlY2tDbG9iYmVyZWRFbGVtZW50KGwsYSl7aWYoYSYmKGwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpPT09Tm9kZS5E''@;'; put 'put ''T0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzIGNsb2JiZXJlZDogJHtsLm91dGVySFRNTH1gKTtyZXR1cm4gYX19Y29uc3Qgc0k9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAt''@;'; put 'put ''XHVERkZGXS9nLGFJPS8oW15cIy1+IHwhXSkvZztmdW5jdGlvbiBVQyhjKXtyZXR1cm4gYy5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZShzSSxmdW5jdGlvbihsKXtyZXR1cm4iJiMiKygxMDI0KihsLmNoYXJDb2RlQXQoMCktNTUyOTYpKyhsLmNoYXJDb2RlQXQoMSktNTYzMjApKzY1''@;'; put 'put ''NTM2KSsiOyJ9KS5yZXBsYWNlKGFJLGZ1bmN0aW9uKGwpe3JldHVybiImIyIrbC5jaGFyQ29kZUF0KDApKyI7In0pLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpfWxldCByNjtmdW5jdGlvbiBudihjKXtyZXR1cm4iY29udGVudCJpbiBjJiZmdW5jdGlvbiBjSShj''@;'; put 'put ''KXtyZXR1cm4gYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiYiVEVNUExBVEUiPT09Yy5ub2RlTmFtZX0oYyk/Yy5jb250ZW50Om51bGx9dmFyIFYzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkhUTUw9MV09IkhUTUwiLGNbYy5TVFlMRT0yXT0iU1RZ''@;'; put 'put ''TEUiLGNbYy5TQ1JJUFQ9M109IlNDUklQVCIsY1tjLlVSTD00XT0iVVJMIixjW2MuUkVTT1VSQ0VfVVJMPTVdPSJSRVNPVVJDRV9VUkwiLGN9KFYzfHx7fSk7ZnVuY3Rpb24gcTIoYyl7Y29uc3QgbD1KNCgpO3JldHVybiBsP0hDKGwuc2FuaXRpemUoVjMuSFRNTCxjKXx8IiIpOlg0KGMsIkhU''@;'; put 'put ''TUwiKT9IQygkMihjKSk6ZnVuY3Rpb24gbEkoYyxsKXtsZXQgYT1udWxsO3RyeXtyNj1yNnx8ZnVuY3Rpb24gYWYoYyl7Y29uc3QgbD1uZXcgSzkoYyk7cmV0dXJuIGZ1bmN0aW9uIGpDKCl7dHJ5e3JldHVybiEhKG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoTjMoIiIp''@;'; put 'put ''LCJ0ZXh0L2h0bWwiKX1jYXRjaHtyZXR1cm4hMX19KCk/bmV3IHE5KGwpOmx9KGMpO2xldCBkPWw/U3RyaW5nKGwpOiIiO2E9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKTtsZXQgaD01LGY9ZDtkb3tpZigwPT09aCl0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJl''@;'; put 'put ''Y2F1c2UgdGhlIGlucHV0IGlzIHVuc3RhYmxlIik7aC0tLGQ9ZixmPWEuaW5uZXJIVE1MLGE9cjYuZ2V0SW5lcnRCb2R5RWxlbWVudChkKX13aGlsZShkIT09Zik7cmV0dXJuIE4zKChuZXcgb0kpLnNhbml0aXplQ2hpbGRyZW4obnYoYSl8fGEpKX1maW5hbGx5e2lmKGEpe2NvbnN0IGQ9bnYo''@;'; put 'put ''YSl8fGE7Zm9yKDtkLmZpcnN0Q2hpbGQ7KWQucmVtb3ZlQ2hpbGQoZC5maXJzdENoaWxkKX19fShLNCgpLGtvKGMpKX1mdW5jdGlvbiBydihjKXtjb25zdCBsPUo0KCk7cmV0dXJuIGw/bC5zYW5pdGl6ZShWMy5VUkwsYyl8fCIiOlg0KGMsIlVSTCIpPyQyKGMpOlg5KGtvKGMpKX1mdW5jdGlv''@;'; put 'put ''biBaQyhjKXtjb25zdCBsPUo0KCk7aWYobClyZXR1cm4gVkMobC5zYW5pdGl6ZShWMy5SRVNPVVJDRV9VUkwsYyl8fCIiKTtpZihYNChjLCJSZXNvdXJjZVVSTCIpKXJldHVybiBWQygkMihjKSk7dGhyb3cgbmV3IEFyKDkwNCwhMSl9ZnVuY3Rpb24gSjQoKXtjb25zdCBjPVhyKCk7cmV0dXJu''@;'; put 'put ''IGMmJmNbTDFdLnNhbml0aXplcn1jbGFzcyBNaXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1hOnZv''@;'; put 'put ''aWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9aHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rlc2N9''@;'; put 'put ''YH19Y29uc3QgUTQ9bmV3IE1pKCJFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiIpLFdDPW5ldyBNaSgiSU5KRUNUT1IiLC0xKSxHQz1uZXcgTWkoIklOSkVDVE9SX0RFRl9UWVBFUyIpO2NsYXNzICRDe2dldChsLGE9czApe2lmKGE9PT1zMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3Rv''@;'; put 'put ''ckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtxYShsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19ZnVuY3Rpb24gZ0koLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpxQygwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gcUMo''@;'; put 'put ''YywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtyZXR1cm4gRjQobCxmPT57Y29uc3QgXz1mO292KF8sYSxbXSxkKSYmKGh8fD1bXSxoLnB1c2goXykpfSksdm9pZCAwIT09aCYmS0MoaCxhKSxhfWZ1bmN0aW9uIEtDKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2Nv''@;'; put 'put ''bnN0e3Byb3ZpZGVyczpofT1jW2FdO3N2KGgsZj0+e2wucHVzaChmKX0pfX1mdW5jdGlvbiBvdihjLGwsYSxkKXtpZighKGM9Ym8oYykpKXJldHVybiExO2xldCBoPW51bGwsZj1ubShjKTtjb25zdCBfPSFmJiZRbyhjKTtpZihmfHxfKXtpZihfJiYhXy5zdGFuZGFsb25lKXJldHVybiExO2g9''@;'; put 'put ''Y31lbHNle2NvbnN0IFc9Yy5uZ01vZHVsZTtpZihmPW5tKFcpLCFmKXJldHVybiExO2g9V31jb25zdCBUPWQuaGFzKGgpO2lmKF8pe2lmKFQpcmV0dXJuITE7aWYoZC5hZGQoaCksXy5kZXBlbmRlbmNpZXMpe2NvbnN0IFc9ImZ1bmN0aW9uIj09dHlwZW9mIF8uZGVwZW5kZW5jaWVzP18uZGVw''@;'; put 'put ''ZW5kZW5jaWVzKCk6Xy5kZXBlbmRlbmNpZXM7Zm9yKGNvbnN0IGllIG9mIFcpb3YoaWUsbCxhLGQpfX1lbHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFUKXtsZXQgaWU7ZC5hZGQoaCk7dHJ5e0Y0KGYuaW1wb3J0cyxnZT0+e292KGdlLGwsYSxkKSYmKGllfHw9W10s''@;'; put 'put ''aWUucHVzaChnZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09aWUmJktDKGllLGwpfWlmKCFUKXtjb25zdCBpZT1IMShoKXx8KCgpPT5uZXcgaCk7bC5wdXNoKHtwcm92aWRlOmgsdXNlRmFjdG9yeTppZSxkZXBzOlNzfSx7cHJvdmlkZTpHQyx1c2VWYWx1ZTpoLG11bHRpOiEwfSx7cHJvdmlkZTpR''@;'; put 'put ''NCx1c2VWYWx1ZTooKT0+YXIoaCksbXVsdGk6ITB9KX1jb25zdCBXPWYucHJvdmlkZXJzO251bGw9PVd8fFR8fHN2KFcsZ2U9PntsLnB1c2goZ2UpfSl9fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gc3YoYyxsKXtmb3IobGV0IGEgb2YgYylUMihhKSYmKGE9''@;'; put 'put ''YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/c3YoYSxsKTpsKGEpfWNvbnN0IG1JPUFzKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpBc30pO2Z1bmN0aW9uIGF2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZtSSBpbiBjfWZ1bmN0aW9uIGxmKGMp''@;'; put 'put ''e3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IHQ1PW5ldyBNaSgiU2V0IEluamVjdG9yIHNjb3BlLiIpLG82PXt9LHZJPXt9O2xldCBsdjtmdW5jdGlvbiBzNigpe3JldHVybiB2b2lkIDA9PT1sdiYmKGx2PW5ldyAkQyksbHZ9Y2xhc3MgcTB7fWNsYXNzIGN2IGV4dGVuZHMgcTB7''@;'; put 'put ''Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1hcCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhp''@;'; put 'put ''cy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLGR2KGwsXz0+dGhpcy5wcm9jZXNzUHJvdmlkZXIoXykpLHRoaXMucmVjb3Jkcy5zZXQoV0MsQjModm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQiKSYmdGhpcy5yZWNvcmRzLnNldChxMCxCMyh2b2lkIDAsdGhp''@;'; put 'put ''cykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldCh0NSk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5nZXQoR0MubXVsdGksU3MsbnMuU2VsZikpfWRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDt0cnl7Zm9yKGNvbnN0IGEgb2YgdGhpcy5fbmdPbkRlc3Ryb3lIb29rcylhLm5nT25EZXN0cm95KCk7Y29uc3QgbD10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3Qg''@;'; put 'put ''YSBvZiBsKWEoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmluamVjdG9yRGVmVHlwZXMuY2xlYXIoKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhv''@;'; put 'put ''b2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0IGE9QTEodGhpcyksZD1kaSh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7QTEoYSksZGkoZCl9fWdldChsLGE9czAsZD1ucy5E''@;'; put 'put ''ZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkobWEpKXJldHVybiBsW21hXSh0aGlzKTtkPWEwKGQpO2NvbnN0IGg9QTEodGhpcyksZj1kaSh2b2lkIDApO3RyeXtpZighKGQmbnMuU2tpcFNlbGYpKXtsZXQgVD10aGlzLnJlY29yZHMuZ2V0KGwp''@;'; put 'put ''O2lmKHZvaWQgMD09PVQpe2NvbnN0IFc9ZnVuY3Rpb24gQ0koYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIE1pfShsKSYmeGQobCk7VD1XJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFcpP0IzKHV2KGwpLG82KTpudWxs''@;'; put 'put ''LHRoaXMucmVjb3Jkcy5zZXQobCxUKX1pZihudWxsIT1UKXJldHVybiB0aGlzLmh5ZHJhdGUobCxUKX1yZXR1cm4oZCZucy5TZWxmP3M2KCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZucy5PcHRpb25hbCYmYT09PXMwP251bGw6YSl9Y2F0Y2goXyl7aWYoIk51bGxJbmplY3RvckVycm9yIj09''@;'; put 'put ''PV8ubmFtZSl7aWYoKF9ba3VdPV9ba3VdfHxbXSkudW5zaGlmdChxYShsKSksaCl0aHJvdyBfO3JldHVybiBmdW5jdGlvbiBBdShjLGwsYSxkKXtjb25zdCBoPWNba3VdO3Rocm93IGxbb21dJiZoLnVuc2hpZnQobFtvbV0pLGMubWVzc2FnZT1mdW5jdGlvbiBBZChjLGwsYSxkPW51bGwpe2M9''@;'; put 'put ''YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPXFhKGwpO2lmKEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChxYSkuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IF8gaW4g''@;'; put 'put ''bClpZihsLmhhc093blByb3BlcnR5KF8pKXtsZXQgVD1sW19dO2YucHVzaChfKyI6IisoInN0cmluZyI9PXR5cGVvZiBUP0pTT04uc3RyaW5naWZ5KFQpOnFhKFQpKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNl''@;'; put 'put ''KG5jLCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW2t1XT1udWxsLGN9KF8sbCwiUjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgX31maW5hbGx5e2RpKGYpLEExKGgpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25z''@;'; put 'put ''dCBsPUExKHRoaXMpLGE9ZGkodm9pZCAwKTt0cnl7Y29uc3QgZD10aGlzLmdldChRNC5tdWx0aSxTcyxucy5TZWxmKTtmb3IoY29uc3QgaCBvZiBkKWgoKX1maW5hbGx5e0ExKGwpLGRpKGEpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5r''@;'; put 'put ''ZXlzKCkpbC5wdXNoKHFhKGQpKTtyZXR1cm5gUjNJbmplY3Rvclske2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPWxmKGw9Ym8obCkpP2w6Ym8obCYmbC5w''@;'; put 'put ''cm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIGJJKGMpe3JldHVybiBhdihjKT9CMyh2b2lkIDAsYy51c2VWYWx1ZSk6QjMoUUMoYyksbzYpfShsKTtpZihsZihsKXx8ITAhPT1sLm11bHRpKXRoaXMucmVjb3Jkcy5nZXQoYSk7ZWxzZXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUIz''@;'; put 'put ''KHZvaWQgMCxvNiwhMCksaC5mYWN0b3J5PSgpPT5LYyhoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtyZXR1cm4gYS52YWx1ZT09PW82JiYoYS52YWx1ZT12SSxhLnZhbHVlPWEuZmFj''@;'; put 'put ''dG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHdJKGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRk''@;'; put 'put ''KGEudmFsdWUpLGEudmFsdWV9aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwucHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPWJvKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZU''@;'; put 'put ''eXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiB1dihjKXtjb25zdCBsPXhkKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Okgx''@;'; put 'put ''KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBNaSl0aHJvdyBuZXcgQXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIF9JKGMpe2NvbnN0IGw9Yy5sZW5ndGg7aWYobD4wKXRocm93IEJkKGwsIj8iKSxuZXcgQXIoMjA0LCEx''@;'; put 'put ''KTtjb25zdCBhPWZ1bmN0aW9uIEhzKGMpe3JldHVybiBjJiYoY1tjM118fGNbTnNdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShjKTt0aHJvdyBuZXcgQXIoMjA0LCExKX1mdW5jdGlvbiBRQyhjLGwsYSl7bGV0IGQ7aWYobGYoYykpe2Nv''@;'; put 'put ''bnN0IGg9Ym8oYyk7cmV0dXJuIEgxKGgpfHx1dihoKX1pZihhdihjKSlkPSgpPT5ibyhjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIEpDKGMpe3JldHVybiEoIWN8fCFjLnVzZUZhY3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uS2MoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVu''@;'; put 'put ''Y3Rpb24gWEMoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5hcihibyhjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPWJvKGMmJihjLnVzZUNsYXNzfHxjLnByb3ZpZGUpKTtpZighZnVuY3Rpb24geUkoYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBIMSho''@;'; put 'put ''KXx8dXYoaCk7ZD0oKT0+bmV3IGgoLi4uS2MoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24gQjMoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZvaWQgMH19ZnVuY3Rpb24gZHYoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/ZHYo''@;'; put 'put ''YSxsKTphJiZUMihhKT9kdihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWNvbnN0IGE2PW5ldyBNaSgiQXBwSWQiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5TSX0pLFNJPSJuZyIsZVM9bmV3IE1pKCJQbGF0Zm9ybSBJbml0aWFsaXplciIpLEdzPW5ldyBNaSgiUGxhdGZvcm0g''@;'; put 'put ''SUQiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksdFM9bmV3IE1pKCJBbmltYXRpb25Nb2R1bGVUeXBlIiksbDY9bmV3IE1pKCJDU1Agbm9uY2UiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5LNCgpLmJvZHk/LnF1ZXJ5U2VsZWN0b3IoIltu''@;'; put 'put ''Z0NzcE5vbmNlXSIpPy5nZXRBdHRyaWJ1dGUoIm5nQ3NwTm9uY2UiKXx8bnVsbH0pO2xldCByUz0oYyxsKT0+bnVsbDtmdW5jdGlvbiBvUyhjLGwpe3JldHVybiByUyhjLGwpfWNsYXNzIGxTe31jbGFzcyBjU3t9Y2xhc3MgWjN7cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7dGhyb3cgZnVu''@;'; put 'put ''Y3Rpb24geXYoYyl7Y29uc3QgbD1FcnJvcihgTm8gY29tcG9uZW50IGZhY3RvcnkgZm91bmQgZm9yICR7cWEoYyl9LmApO3JldHVybiBsLm5nQ29tcG9uZW50PWMsbH0obCl9fWxldCBLMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5OVUxMPW5ldyBaMyxjfSkoKTtmdW5jdGlvbiB3digpe3Jl''@;'; put 'put ''dHVybiBZZChTYygpLFhyKCkpfWZ1bmN0aW9uIFlkKGMsbCl7cmV0dXJuIG5ldyBOaShIbChjLGwpKX1sZXQgTmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5hdGl2ZUVsZW1lbnQ9YX19cmV0dXJuIGMuX19OR19FTEVNRU5UX0lEX189d3YsY30pKCk7ZnVuY3Rpb24gZGYo''@;'; put 'put ''Yyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jbGFzcyBZM3t9bGV0IEZvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPSgpPT5mdW5jdGlvbiBndSgpe2NvbnN0IGM9''@;'; put 'put ''WHIoKSxhPW10KFNjKCkuaW5kZXgsYyk7cmV0dXJuKENjKGEpP2E6YylbVm9dfSgpLGN9KSgpLHA2PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pLGN9KSgpO2NsYXNzIHM1e2NvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3RoaXMuZnVsbD1sLHRoaXMubWFqb3I9bC5zcGxpdCgiLiIpWzBdLHRoaXMubWlub3I9bC5zcGxpdCgiLiIpWzFdLHRoaXMucGF0Y2g9bC5zcGxpdCgiLiIpLnNsaWNlKDIpLmpvaW4oIi4iKX19Y29uc3QgQUk9bmV3IHM1KCIxNi4xLjciKSxDdj17fTtmdW5jdGlvbiBhNShjKXtm''@;'; put 'put ''b3IoO2M7KXtjW0RvXXw9NjQ7Y29uc3QgbD1aNChjKTtpZih4NChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJldHVybiBudWxsfWZ1bmN0aW9uIFN2KGMpe3JldHVybiBjLm5nT3JpZ2luYWxFcnJvcn1jbGFzcyBoZntjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnNvbGU9Y29uc29sZX1oYW5kbGVFcnJv''@;'; put 'put ''cihsKXtjb25zdCBhPXRoaXMuX2ZpbmRPcmlnaW5hbEVycm9yKGwpO3RoaXMuX2NvbnNvbGUuZXJyb3IoIkVSUk9SIixsKSxhJiZ0aGlzLl9jb25zb2xlLmVycm9yKCJPUklHSU5BTCBFUlJPUiIsYSl9X2ZpbmRPcmlnaW5hbEVycm9yKGwpe2xldCBhPWwmJlN2KGwpO2Zvcig7YSYmU3YoYSk7''@;'; put 'put ''KWE9U3YoYSk7cmV0dXJuIGF8fG51bGx9fWNvbnN0IHh2PW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5jdGlvbiBtNihjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uIGZmKGMpe3JldHVybiBjLm93bmVyRG9jdW1l''@;'; put 'put ''bnR9ZnVuY3Rpb24gRXYoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudC5ib2R5fWZ1bmN0aW9uIFdkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/YygpOmN9Y2xhc3MgdjYgZXh0ZW5kcyB2M3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5jb25zdW1lckFs''@;'; put 'put ''bG93U2lnbmFsV3JpdGVzPSExLHRoaXMuX2xWaWV3PW51bGx9c2V0IGxWaWV3KGwpe3RoaXMuX2xWaWV3PWx9b25Db25zdW1lckRlcGVuZGVuY3lNYXlIYXZlQ2hhbmdlZCgpe2E1KHRoaXMuX2xWaWV3KX1vblByb2R1Y2VyVXBkYXRlVmFsdWVWZXJzaW9uKCl7fWdldCBoYXNSZWFkQVNpZ25h''@;'; put 'put ''bCgpe3JldHVybiB0aGlzLmhhc1Byb2R1Y2Vyc31ydW5JbkNvbnRleHQobCxhLGQpe2NvbnN0IGg9ZmwodGhpcyk7dGhpcy50cmFja2luZ1ZlcnNpb24rKzt0cnl7bChhLGQpfWZpbmFsbHl7ZmwoaCl9fWRlc3Ryb3koKXt0aGlzLnRyYWNraW5nVmVyc2lvbisrfX1sZXQgXzY9bnVsbDtmdW5j''@;'; put 'put ''dGlvbiBtUygpe3JldHVybiBfNj8/PW5ldyB2NixfNn1mdW5jdGlvbiB2UyhjLGwpe3JldHVybiBjW2xdPz9tUygpfWZ1bmN0aW9uIF9TKGMsbCl7Y29uc3QgYT1tUygpO2EuaGFzUmVhZEFTaWduYWwmJihjW2xdPV82LGEubFZpZXc9YyxfNj1uZXcgdjYpfWNvbnN0IFpvPXt9O2Z1bmN0aW9u''@;'; put 'put ''IENlKGMpe2t2KFRzKCksWHIoKSxldSgpK2MsITEpfWZ1bmN0aW9uIGt2KGMsbCxhLGQpe2lmKCFkKWlmKDM9PSgzJmxbRG9dKSl7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYma20obCxmLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJkFt''@;'; put 'put ''KGwsZiwwLGEpfVhoKGEpfWZ1bmN0aW9uIEF2KGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPVR2KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gVHYoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxTcyxn''@;'; put 'put ''SShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6cWEoYykpLG5ldyBjdihmLGx8fHM2KCksZHx8bnVsbCxoKX1sZXQgRWE9KCgpPT57Y2xhc3MgY3tzdGF0aWMgY3JlYXRlKGEsZCl7aWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4gQXYoe25hbWU6IiJ9LGQsYSwi''@;'; put 'put ''Iik7e2NvbnN0IGg9YS5uYW1lPz8iIjtyZXR1cm4gQXYoe25hbWU6aH0sYS5wYXJlbnQsYS5wcm92aWRlcnMsaCl9fX1yZXR1cm4gYy5USFJPV19JRl9OT1RfRk9VTkQ9czAsYy5OVUxMPW5ldyAkQyxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoiYW55IixmYWN0b3J5Oigp''@;'; put 'put ''PT5hcihXQyl9KSxjLl9fTkdfRUxFTUVOVF9JRF9fPS0xLGN9KSgpO2Z1bmN0aW9uIHR0KGMsbD1ucy5EZWZhdWx0KXtjb25zdCBhPVhyKCk7cmV0dXJuIG51bGw9PT1hP2FyKGMsbCk6bkMoU2MoKSxhLGJvKGMpLGwpfWZ1bmN0aW9uIGI2KGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25z''@;'; put 'put ''dCB3ZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiB3ZVtIaV09aCx3ZVtEb109MTQwfGQsKG51bGwhPT1pZXx8YyYmMjA0OCZjW0RvXSkmJih3ZVtEb118PTIwNDgpLHlvKHdlKSx3ZVt1YV09d2VbT2xdPWMsd2VbVmFdPWEsd2VbTDFdPV98fGMmJmNbTDFdLHdlW1ZvXT1UfHxjJiZjW1Zv''@;'; put 'put ''XSx3ZVtMZF09V3x8YyYmY1tMZF18fG51bGwsd2Vbem9dPWYsd2VbJGhdPWZ1bmN0aW9uIFcyKCl7cmV0dXJuIE45Kyt9KCksd2VbdTBdPWdlLHdlW1IxXT1pZSx3ZVtKYV09Mj09bC50eXBlP2NbSmFdOndlLHdlfWZ1bmN0aW9uIEczKGMsbCxhLGQsaCl7bGV0IGY9Yy5kYXRhW2xdO2lmKG51''@;'; put 'put ''bGw9PT1mKWY9ZnVuY3Rpb24gRHYoYyxsLGEsZCxoKXtjb25zdCBmPUZ3KCksXz1iOSgpLFc9Yy5kYXRhW2xdPWZ1bmN0aW9uIHc2KGMsbCxhLGQsaCxmKXtsZXQgXz1sP2wuaW5qZWN0b3JJbmRleDotMSxUPTA7cmV0dXJuIHczKCkmJihUfD0xMjgpLHt0eXBlOmEsaW5kZXg6ZCxpbnNlcnRC''@;'; put 'put ''ZWZvcmVJbmRleDpudWxsLGluamVjdG9ySW5kZXg6XyxkaXJlY3RpdmVTdGFydDotMSxkaXJlY3RpdmVFbmQ6LTEsZGlyZWN0aXZlU3R5bGluZ0xhc3Q6LTEsY29tcG9uZW50T2Zmc2V0Oi0xLHByb3BlcnR5QmluZGluZ3M6bnVsbCxmbGFnczpULHByb3ZpZGVySW5kZXhlczowLHZhbHVlOmgs''@;'; put 'put ''YXR0cnM6ZixtZXJnZWRBdHRyczpudWxsLGxvY2FsTmFtZXM6bnVsbCxpbml0aWFsSW5wdXRzOnZvaWQgMCxpbnB1dHM6bnVsbCxvdXRwdXRzOm51bGwsdFZpZXc6bnVsbCxuZXh0Om51bGwscHJldjpudWxsLHByb2plY3Rpb25OZXh0Om51bGwsY2hpbGQ6bnVsbCxwYXJlbnQ6bCxwcm9qZWN0''@;'; put 'put ''aW9uOm51bGwsc3R5bGVzOm51bGwsc3R5bGVzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbFN0eWxlczp2b2lkIDAsY2xhc3NlczpudWxsLGNsYXNzZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsQ2xhc3Nlczp2b2lkIDAsY2xhc3NCaW5kaW5nczowLHN0eWxlQmluZGluZ3M6MH19KDAsXz9m''@;'; put 'put ''OmYmJmYucGFyZW50LGEsbCxkLGgpO3JldHVybiBudWxsPT09Yy5maXJzdENoaWxkJiYoYy5maXJzdENoaWxkPVcpLG51bGwhPT1mJiYoXz9udWxsPT1mLmNoaWxkJiZudWxsIT09Vy5wYXJlbnQmJihmLmNoaWxkPVcpOm51bGw9PT1mLm5leHQmJihmLm5leHQ9VyxXLnByZXY9ZikpLFd9KGMs''@;'; put 'put ''bCxhLGQsaCksZnVuY3Rpb24gcVQoKXtyZXR1cm4gUG8ubEZyYW1lLmluSTE4bn0oKSYmKGYuZmxhZ3N8PTMyKTtlbHNlIGlmKDY0JmYudHlwZSl7Zi50eXBlPWEsZi52YWx1ZT1kLGYuYXR0cnM9aDtjb25zdCBfPWZ1bmN0aW9uIEw0KCl7Y29uc3QgYz1Qby5sRnJhbWUsbD1jLmN1cnJlbnRU''@;'; put 'put ''Tm9kZTtyZXR1cm4gYy5pc1BhcmVudD9sOmwucGFyZW50fSgpO2YuaW5qZWN0b3JJbmRleD1udWxsPT09Xz8tMTpfLmluamVjdG9ySW5kZXh9cmV0dXJuIE4xKGYsITApLGZ9ZnVuY3Rpb24gbDUoYyxsLGEsZCl7aWYoMD09PWEpcmV0dXJuLTE7Y29uc3QgaD1sLmxlbmd0aDtmb3IobGV0IGY9''@;'; put 'put ''MDtmPGE7ZisrKWwucHVzaChkKSxjLmJsdWVwcmludC5wdXNoKGQpLGMuZGF0YS5wdXNoKG51bGwpO3JldHVybiBofWZ1bmN0aW9uIEVTKGMsbCxhLGQsaCl7Y29uc3QgZj12UyhsLHAzKSxfPWV1KCksVD0yJmQ7dHJ5e2lmKFhoKC0xKSxUJiZsLmxlbmd0aD5wcyYma3YoYyxsLHBzLCExKSxo''@;'; put 'put ''MChUPzI6MCxoKSxUKWYucnVuSW5Db250ZXh0KGEsZCxoKTtlbHNle2NvbnN0IGllPWZsKG51bGwpO3RyeXthKGQsaCl9ZmluYWxseXtmbChpZSl9fX1maW5hbGx5e1QmJm51bGw9PT1sW3AzXSYmX1MobCxwMyksWGgoXyksaDAoVD8zOjEsaCl9fWZ1bmN0aW9uIEl2KGMsbCxhKXtpZihPZChs''@;'; put 'put ''KSl7Y29uc3QgZD1mbChudWxsKTt0cnl7Y29uc3QgZj1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IF89bC5kaXJlY3RpdmVTdGFydDtfPGY7XysrKXtjb25zdCBUPWMuZGF0YVtfXTtULmNvbnRlbnRRdWVyaWVzJiZULmNvbnRlbnRRdWVyaWVzKDEsYVtfXSxfKX19ZmluYWxseXtmbChkKX19fWZ1''@;'; put 'put ''bmN0aW9uIEx2KGMsbCxhKXtQdygpJiYoZnVuY3Rpb24gWUkoYyxsLGEsZCl7Y29uc3QgaD1hLmRpcmVjdGl2ZVN0YXJ0LGY9YS5kaXJlY3RpdmVFbmQ7UDEoYSkmJmZ1bmN0aW9uIEpJKGMsbCxhKXtjb25zdCBkPUhsKGwsYyksaD1rUyhhKTtsZXQgXz0xNjthLnNpZ25hbHM/Xz00MDk2OmEu''@;'; put 'put ''b25QdXNoJiYoXz02NCk7Y29uc3QgVD1TNihjLGI2KGMsaCxudWxsLF8sZCxsLG51bGwsY1tMMV0ucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGQsYSksbnVsbCxudWxsLG51bGwpKTtjW2wuaW5kZXhdPVR9KGwsYSxjLmRhdGFbaCthLmNvbXBvbmVudE9mZnNldF0pLGMuZmlyc3RD''@;'; put 'put ''cmVhdGVQYXNzfHxJbShhLGwpLFZjKGQsbCk7Y29uc3QgXz1hLmluaXRpYWxJbnB1dHM7Zm9yKGxldCBUPWg7VDxmO1QrKyl7Y29uc3QgVz1jLmRhdGFbVF0saWU9UWgobCxjLFQsYSk7VmMoaWUsbCksbnVsbCE9PV8mJlFJKDAsVC1oLGllLFcsMCxfKSxRYyhXKSYmKG10KGEuaW5kZXgsbClb''@;'; put 'put ''VmFdPVFoKGwsYyxULGEpKX19KGMsbCxhLEhsKGEsbCkpLDY0PT0oNjQmYS5mbGFncykmJlJTKGMsbCxhKSl9ZnVuY3Rpb24geTYoYyxsLGE9SGwpe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtj''@;'; put 'put ''b25zdCBfPWRbZisxXSxUPS0xPT09Xz9hKGwsYyk6Y1tfXTtjW2grK109VH19fWZ1bmN0aW9uIGtTKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PSQzKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGly''@;'; put 'put ''ZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0cyxjLmlkKTpsfWZ1bmN0aW9uICQzKGMsbCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25zdCB3ZT1wcytkLEVlPXdlK2gsWmU9ZnVuY3Rpb24gQVMoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8''@;'; put 'put ''bDtkKyspYS5wdXNoKGQ8Yz9udWxsOlpvKTtyZXR1cm4gYX0od2UsRWUpLG90PSJmdW5jdGlvbiI9PXR5cGVvZiBpZT9pZSgpOmllO3JldHVybiBaZVtCaV09e3R5cGU6YyxibHVlcHJpbnQ6WmUsdGVtcGxhdGU6YSxxdWVyaWVzOm51bGwsdmlld1F1ZXJ5OlQsZGVjbFROb2RlOmwsZGF0YTpa''@;'; put 'put ''ZS5zbGljZSgpLmZpbGwobnVsbCx3ZSksYmluZGluZ1N0YXJ0SW5kZXg6d2UsZXhwYW5kb1N0YXJ0SW5kZXg6RWUsaG9zdEJpbmRpbmdPcENvZGVzOm51bGwsZmlyc3RDcmVhdGVQYXNzOiEwLGZpcnN0VXBkYXRlUGFzczohMCxzdGF0aWNWaWV3UXVlcmllczohMSxzdGF0aWNDb250ZW50UXVl''@;'; put 'put ''cmllczohMSxwcmVPcmRlckhvb2tzOm51bGwscHJlT3JkZXJDaGVja0hvb2tzOm51bGwsY29udGVudEhvb2tzOm51bGwsY29udGVudENoZWNrSG9va3M6bnVsbCx2aWV3SG9va3M6bnVsbCx2aWV3Q2hlY2tIb29rczpudWxsLGRlc3Ryb3lIb29rczpudWxsLGNsZWFudXA6bnVsbCxjb250ZW50''@;'; put 'put ''UXVlcmllczpudWxsLGNvbXBvbmVudHM6bnVsbCxkaXJlY3RpdmVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2YgZj9mKCk6ZixwaXBlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIF8/XygpOl8sZmlyc3RDaGlsZDpudWxsLHNjaGVtYXM6Vyxjb25zdHM6b3QsaW5jb21wbGV0ZUZpcnN0''@;'; put 'put ''UGFzczohMSxzc3JJZDpnZX19bGV0IFJ2PWM9Pm51bGw7ZnVuY3Rpb24gcGYoYyxsLGEsZCl7Zm9yKGxldCBoIGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eShoKSl7YT1udWxsPT09YT97fTphO2NvbnN0IGY9Y1toXTtudWxsPT09ZD9DNihhLGwsaCxmKTpkLmhhc093blByb3BlcnR5KGgpJiZD''@;'; put 'put ''NihhLGwsZFtoXSxmKX1yZXR1cm4gYX1mdW5jdGlvbiBDNihjLGwsYSxkKXtjLmhhc093blByb3BlcnR5KGEpP2NbYV0ucHVzaChsLGQpOmNbYV09W2wsZF19ZnVuY3Rpb24gUHUoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBXPUhsKGwsYSk7bGV0IGdlLGllPWwuaW5wdXRzOyFUJiZudWxsIT1p''@;'; put 'put ''ZSYmKGdlPWllW2RdKT8oTnYoYyxhLGdlLGQsaCksUDEobCkmJmZ1bmN0aW9uIGpJKGMsbCl7Y29uc3QgYT1tdChsLGMpOzE2JmFbRG9dfHwoYVtEb118PTY0KX0oYSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIExTKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJm''@;'; put 'put ''b3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJyZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPV8/XyhoLGwudmFsdWV8fCIiLGQpOmgs''@;'; put 'put ''Zi5zZXRQcm9wZXJ0eShXLGQsaCkpfWZ1bmN0aW9uIE92KGMsbCxhLGQpe2lmKFB3KCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24gR0koYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtm''@;'; put 'put ''PGEubGVuZ3RoO2YrKyl7Y29uc3QgXz1hW2ZdO2lmKG00KGwsXy5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxRYyhfKSlpZihudWxsIT09Xy5maW5kSG9zdERpcmVjdGl2ZURlZnMpe2NvbnN0IFQ9W107aD1ofHxuZXcgTWFwLF8uZmluZEhvc3REaXJlY3RpdmVEZWZzKF8sVCxoKSxkLnVu''@;'; put 'put ''c2hpZnQoLi4uVCxfKSxQdihjLGwsVC5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KF8pLFB2KGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCxfLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8uKF8sZCxoKSxkLnB1c2goXyl9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IF8sVDtudWxs''@;'; put 'put ''PT09Zj9fPVQ9bnVsbDpbXyxUXT1mLG51bGwhPT1fJiZjNShjLGwsYSxfLGgsVCksaCYmZnVuY3Rpb24gJEkoYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5hbWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBu''@;'; put 'put ''ZXcgQXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9WWgoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiBjNShjLGwsYSxkLGgsZil7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspVDkoSW0oYSxsKSxjLGRbaWVdLnR5cGUpOyFmdW5j''@;'; put 'put ''dGlvbiBLSShjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJbmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBpZT0wO2llPGQubGVuZ3RoO2llKyspe2NvbnN0IGdlPWRbaWVdO2dlLnByb3Zp''@;'; put 'put ''ZGVyc1Jlc29sdmVyJiZnZS5wcm92aWRlcnNSZXNvbHZlcihnZSl9bGV0IF89ITEsVD0hMSxXPWw1KGMsbCxkLmxlbmd0aCxudWxsKTtmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrKyl7Y29uc3QgZ2U9ZFtpZV07YS5tZXJnZWRBdHRycz1ZaChhLm1lcmdlZEF0dHJzLGdlLmhvc3RBdHRy''@;'; put 'put ''cyksWEkoYyxhLGwsVyxnZSkscUkoVyxnZSxoKSxudWxsIT09Z2UuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PWdlLmhvc3RCaW5kaW5nc3x8bnVsbCE9PWdlLmhvc3RBdHRyc3x8MCE9PWdlLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCB3ZT1nZS50eXBlLnBy''@;'; put 'put ''b3RvdHlwZTshXyYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ09uSW5pdHx8d2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxfPSEwKSwhVCYmKHdlLm5nT25DaGFuZ2VzfHx3ZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10p''@;'; put 'put ''LnB1c2goYS5pbmRleCksVD0hMCksVysrfSFmdW5jdGlvbiBCSShjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSxfPWwuYXR0cnMsVD1bXTtsZXQgVz1udWxsLGllPW51bGw7Zm9yKGxldCBnZT1sLmRpcmVjdGl2ZVN0YXJ0O2dlPGg7Z2UrKyl7Y29uc3Qgd2U9ZltnZV0s''@;'; put 'put ''RWU9YT9hLmdldCh3ZSk6bnVsbCxvdD1FZT9FZS5vdXRwdXRzOm51bGw7Vz1wZih3ZS5pbnB1dHMsZ2UsVyxFZT9FZS5pbnB1dHM6bnVsbCksaWU9cGYod2Uub3V0cHV0cyxnZSxpZSxvdCk7Y29uc3QgZXQ9bnVsbD09PVd8fG51bGw9PT1ffHx1MyhsKT9udWxsOmVMKFcsZ2UsXyk7VC5wdXNo''@;'; put 'put ''KGV0KX1udWxsIT09VyYmKFcuaGFzT3duUHJvcGVydHkoImNsYXNzIikmJihsLmZsYWdzfD04KSxXLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1XLGwub3V0cHV0cz1pZX0oYyxhLGYpfWZ1bmN0aW9uIFJTKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsXz1mdW5jdGlvbiBWdygpe3JldHVybiBQby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtYaChmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBXPWMuZGF0YVtUXSxpZT1s''@;'; put 'put ''W1RdO1NtKFQpLChudWxsIT09Vy5ob3N0QmluZGluZ3N8fDAhPT1XLmhvc3RWYXJzfHxudWxsIT09Vy5ob3N0QXR0cnMpJiZXSShXLGllKX19ZmluYWxseXtYaCgtMSksU20oXyl9fWZ1bmN0aW9uIFdJKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1''@;'; put 'put ''bmN0aW9uIFB2KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNvbXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBxSShjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7''@;'; put 'put ''UWMobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gWEkoYyxsLGEsZCxoKXtjLmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1IMShoLnR5cGUpKSxfPW5ldyBSNChmLFFjKGgpLHR0KTtjLmJsdWVwcmludFtkXT1fLGFbZF09XyxmdW5jdGlvbiBVSShjLGwsYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IF89Yy5ob3N0QmluZGluZ09wQ29kZXM7bnVsbD09PV8mJihfPWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiBaSShjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxd''@;'; put 'put ''O2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVybiAwfSkoXykhPVQmJl8ucHVzaChUKSxfLnB1c2goYSxkLGYpfX0oYyxsLGQsbDUoYyxhLGguaG9zdFZhcnMsWm8pLGgpfWZ1bmN0aW9uICQxKGMsbCxhLGQsaCxmKXtjb25zdCBfPUhsKGMsbCk7IWZ1bmN0aW9uIEZ2''@;'; put 'put ''KGMsbCxhLGQsaCxmLF8pe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT1fP2tvKGYpOl8oZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbVm9dLF8sZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBRSShjLGwsYSxkLGgs''@;'; put 'put ''Zil7Y29uc3QgXz1mW2xdO2lmKG51bGwhPT1fKWZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7KU9TKGQsYSxfW1QrK10sX1tUKytdLF9bVCsrXSl9ZnVuY3Rpb24gT1MoYyxsLGEsZCxoKXtjb25zdCBmPWZsKG51bGwpO3RyeXtjb25zdCBfPWMuaW5wdXRUcmFuc2Zvcm1zO251bGwhPT1fJiZfLmhh''@;'; put 'put ''c093blByb3BlcnR5KGQpJiYoaD1fW2RdLmNhbGwobCxoKSksbnVsbCE9PWMuc2V0SW5wdXQ/Yy5zZXRJbnB1dChsLGgsYSxkKTpsW2RdPWh9ZmluYWxseXtmbChmKX19ZnVuY3Rpb24gZUwoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigw''@;'; put 'put ''IT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3QgXz1jW2ZdO2ZvcihsZXQgVD0wO1Q8Xy5sZW5ndGg7VCs9MilpZihfW1RdPT09bCl7ZC5wdXNoKGYsX1tUKzFdLGFbaCsxXSk7YnJl''@;'; put 'put ''YWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBQUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwhMSxsLG51bGwsMCxkLGEsbnVsbCxudWxsLG51bGxdfWZ1bmN0aW9uIEZTKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKWZvcihsZXQg''@;'; put 'put ''ZD0wO2Q8YS5sZW5ndGg7ZCs9Mil7Y29uc3QgZj1hW2QrMV07aWYoLTEhPT1mKXtjb25zdCBfPWMuZGF0YVtmXTtDOShhW2RdKSxfLmNvbnRlbnRRdWVyaWVzKDIsbFtmXSxmKX19fWZ1bmN0aW9uIFM2KGMsbCl7cmV0dXJuIGNbR2hdP2NbUzRdW1hhXT1sOmNbR2hdPWwsY1tTNF09bCxsfWZ1''@;'; put 'put ''bmN0aW9uIEh2KGMsbCxhKXtDOSgwKTtjb25zdCBkPWZsKG51bGwpO3RyeXtsKGMsYSl9ZmluYWxseXtmbChkKX19ZnVuY3Rpb24gSFMoYyl7cmV0dXJuIGNbVHVdfHwoY1tUdV09W10pfWZ1bmN0aW9uIE5TKGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFZT''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fFFjKGMpKSYmKGE9ZnVuY3Rpb24gSTQoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW000XSlyZXR1cm4gYztjPWNbSGldfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtWb119ZnVuY3Rpb24gQlMoYyxs''@;'; put 'put ''KXtjb25zdCBhPWNbTGRdLGQ9YT9hLmdldChoZixudWxsKTpudWxsO2QmJmQuaGFuZGxlRXJyb3IobCl9ZnVuY3Rpb24gTnYoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3QgXz1hW2YrK10sVD1hW2YrK107T1MoYy5kYXRhW19dLGxbX10sZCxULGgpfX1mdW5jdGlv''@;'; put 'put ''biBHZChjLGwsYSl7Y29uc3QgZD1ZMChsLGMpOyFmdW5jdGlvbiBNQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW1ZvXSxkLGEpfWZ1bmN0aW9uIHRMKGMsbCl7Y29uc3QgYT1tdChsLGMpLGQ9YVtCaV07IWZ1bmN0aW9uIG5MKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVlcHJp''@;'; put 'put ''bnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtIaV07bnVsbCE9PWgmJm51bGw9PT1hW3UwXSYmKGFbdTBdPW9TKGgsYVtMZF0pKSxWdihkLGEsYVtWYV0pfWZ1bmN0aW9uIFZ2KGMsbCxhKXtTOShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVyeTtu''@;'; put 'put ''dWxsIT09ZCYmSHYoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmRVMoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZGUyhjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJkh2KDIsYy52''@;'; put 'put ''aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7bnVsbCE9PWYmJmZ1bmN0aW9uIGpTKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdEwoYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxj''@;'; put 'put ''LmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xbRG9dJj0tNSxNbSgpfX1sZXQgelM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxsPW5ldyBTZXQsdGhpcy5xdWV1ZT1uZXcgTWFwfWNyZWF0ZShhLGQsaCl7Y29uc3QgZj10eXBlb2YgWm9uZT4idSI/bnVsbDpab25l''@;'; put 'put ''LmN1cnJlbnQsXz1uZXcgX20oYSxpZT0+e3RoaXMuYWxsLmhhcyhpZSkmJnRoaXMucXVldWUuc2V0KGllLGYpfSxoKTtsZXQgVDt0aGlzLmFsbC5hZGQoXyksXy5ub3RpZnkoKTtjb25zdCBXPSgpPT57Xy5jbGVhbnVwKCksVD8uKCksdGhpcy5hbGwuZGVsZXRlKF8pLHRoaXMucXVldWUuZGVs''@;'; put 'put ''ZXRlKF8pfTtyZXR1cm4gVD1kPy5vbkRlc3Ryb3koVykse2Rlc3Ryb3k6V319Zmx1c2goKXtpZigwIT09dGhpcy5xdWV1ZS5zaXplKWZvcihjb25zdFthLGRdb2YgdGhpcy5xdWV1ZSl0aGlzLnF1ZXVlLmRlbGV0ZShhKSxkP2QucnVuKCgpPT5hLnJ1bigpKTphLnJ1bigpfWdldCBpc1F1ZXVl''@;'; put 'put ''RW1wdHkoKXtyZXR1cm4gMD09PXRoaXMucXVldWUuc2l6ZX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pLGN9KSgpO2Z1bmN0aW9uIE02KGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3Nl''@;'; put 'put ''czpudWxsLGY9MDtpZihudWxsIT09bClmb3IobGV0IF89MDtfPGwubGVuZ3RoO18rKyl7Y29uc3QgVD1sW19dOyJudW1iZXIiPT10eXBlb2YgVD9mPVQ6MT09Zj9oPXZjKGgsVCk6Mj09ZiYmKGQ9dmMoZCxUKyI6ICIrbFsrK19dKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRI''@;'; put 'put ''b3N0PWQsYT9jLmNsYXNzZXM9aDpjLmNsYXNzZXNXaXRob3V0SG9zdD1ofWZ1bmN0aW9uIHU1KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtpZihudWxsIT09ZiYmZC5wdXNoKF9hKGYpKSxpYyhmKSl7Zm9yKGxldCBUPXJjO1Q8Zi5sZW5ndGg7VCsr''@;'; put 'put ''KXtjb25zdCBXPWZbVF0saWU9V1tCaV0uZmlyc3RDaGlsZDtudWxsIT09aWUmJnU1KFdbQmldLFcsaWUsZCl9ZltkMF0hPT1mW0hpXSYmZC5wdXNoKGZbZDBdKX1jb25zdCBfPWEudHlwZTtpZig4Jl8pdTUoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZfKXtjb25zdCBUPXo5KGEsbCk7bGV0''@;'; put 'put ''IFc7Zm9yKDtXPVQoKTspZC5wdXNoKFcpfWVsc2UgaWYoMTYmXyl7Y29uc3QgVD1EQyhsLGEpO2lmKEFycmF5LmlzQXJyYXkoVCkpZC5wdXNoKC4uLlQpO2Vsc2V7Y29uc3QgVz1aNChsW0phXSk7dTUoV1tCaV0sVyxULGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJu''@;'; put 'put ''IGR9ZnVuY3Rpb24geDYoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0wxXS5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbiYmaC5iZWdpbigpO3RyeXtVUyhjLGwsYy50ZW1wbGF0ZSxhKX1jYXRjaChfKXt0aHJvdyBkJiZCUyhsLF8pLF99ZmluYWxseXtoLmVuZCYmaC5lbmQoKSxsW0wxXS5lZmZlY3RN''@;'; put 'put ''YW5hZ2VyPy5mbHVzaCgpfX1mdW5jdGlvbiBVUyhjLGwsYSxkKXtjb25zdCBoPWxbRG9dO2lmKDI1NiE9KDI1NiZoKSl7bFtMMV0uZWZmZWN0TWFuYWdlcj8uZmx1c2goKSxTOShsKTt0cnl7eW8obCksZnVuY3Rpb24gTncoYyl7cmV0dXJuIFBvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i''@;'; put 'put ''aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJkVTKGMsbCxhLDIsZCk7Y29uc3QgXz0zPT0oMyZoKTtpZihfKXtjb25zdCBpZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUsbnVsbCl9ZWxzZXtjb25zdCBpZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWllJiZBbShs''@;'; put 'put ''LGllLDAsbnVsbCksTTkobCwwKX1pZihmdW5jdGlvbiBhTChjKXtmb3IobGV0IGw9Q0MoYyk7bnVsbCE9PWw7bD1TQyhsKSl7aWYoIWxbdW1dKWNvbnRpbnVlO2NvbnN0IGE9bFtIMl07Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2VzKGFbZF0pfX19KGwpLFpTKGwsMiksbnVsbCE9PWMu''@;'; put 'put ''Y29udGVudFF1ZXJpZXMmJkZTKGMsbCksXyl7Y29uc3QgaWU9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy5jb250ZW50SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDEpLE05KGwsMSl9IWZ1bmN0aW9uIHhTKGMsbCl7Y29uc3QgYT1jLmhv''@;'; put 'put ''c3RCaW5kaW5nT3BDb2RlcztpZihudWxsPT09YSlyZXR1cm47Y29uc3QgZD12UyhsLGczKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZihmPDApWGgofmYpO2Vsc2V7Y29uc3QgXz1mLFQ9YVsrK2hdLFc9YVsrK2hdO0tUKFQsXyksZC5ydW5JbkNvbnRl''@;'; put 'put ''eHQoVywyLGxbX10pfX19ZmluYWxseXtudWxsPT09bFtnM10mJl9TKGwsZzMpLFhoKC0xKX19KGMsbCk7Y29uc3QgVD1jLmNvbXBvbmVudHM7bnVsbCE9PVQmJldTKGwsVCwwKTtjb25zdCBXPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1XJiZIdigyLFcsZCksXyl7Y29uc3QgaWU9Yy52aWV3Q2hl''@;'; put 'put ''Y2tIb29rcztudWxsIT09aWUmJmttKGwsaWUpfWVsc2V7Y29uc3QgaWU9Yy52aWV3SG9va3M7bnVsbCE9PWllJiZBbShsLGllLDIpLE05KGwsMil9ITA9PT1jLmZpcnN0VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW0RvXSY9LTczLHpzKGwpfWZpbmFsbHl7TW0oKX19fWZ1''@;'; put 'put ''bmN0aW9uIFpTKGMsbCl7Zm9yKGxldCBhPUNDKGMpO251bGwhPT1hO2E9U0MoYSkpZm9yKGxldCBkPXJjO2Q8YS5sZW5ndGg7ZCsrKVlTKGFbZF0sbCl9ZnVuY3Rpb24gbEwoYyxsLGEpe1lTKG10KGwsYyksYSl9ZnVuY3Rpb24gWVMoYyxsKXtpZighZnVuY3Rpb24gR3QoYyl7cmV0dXJuIDEy''@;'; put 'put ''OD09KDEyOCZjW0RvXSl9KGMpKXJldHVybjtjb25zdCBhPWNbQmldO2lmKDgwJmNbRG9dJiYwPT09bHx8MTAyNCZjW0RvXXx8Mj09PWwpVVMoYSxjLGEudGVtcGxhdGUsY1tWYV0pO2Vsc2UgaWYoY1tJMV0+MCl7WlMoYywxKTtjb25zdCBoPWNbQmldLmNvbXBvbmVudHM7bnVsbCE9PWgmJldT''@;'; put 'put ''KGMsaCwxKX19ZnVuY3Rpb24gV1MoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWxMKGMsbFtkXSxhKX1jbGFzcyBkNXtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbQmldO3JldHVybiB1NShhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEpe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbVmFdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W1ZhXT1s''@;'; put 'put ''fWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gMjU2PT0oMjU2JnRoaXMuX2xWaWV3W0RvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3''@;'; put 'put ''W3VhXTtpZihpYyhsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKHNmKGwsZCksUG0oYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9S20odGhpcy5fbFZpZXdbQmldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7IWZ1bmN0aW9uIGYw''@;'; put 'put ''KGMsbCl7aWYoMjU2PT0oMjU2JmNbRG9dKSl0aHJvdyBuZXcgQXIoOTExLCExKTtudWxsPT09Y1tPMV0mJihjW08xXT1bXSksY1tPMV0ucHVzaChsKX0odGhpcy5fbFZpZXcsbCl9bWFya0ZvckNoZWNrKCl7YTUodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNo''@;'; put 'put ''KCl7dGhpcy5fbFZpZXdbRG9dJj0tMTI5fXJlYXR0YWNoKCl7dGhpcy5fbFZpZXdbRG9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3g2KHRoaXMuX2xWaWV3W0JpXSx0aGlzLl9sVmlldyx0aGlzLmNvbnRleHQpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lm''@;'; put 'put ''KHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgQXIoOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRhY2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZnVuY3Rpb24gekQoYyxsKXtHNChjLGwsbFtWb10sMixudWxsLG51bGwpfSh0aGlzLl9sVmlld1tCaV0s''@;'; put 'put ''dGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBBcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sfX1jbGFzcyBjTCBleHRlbmRzIGQ1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuX3ZpZXc9bH1kZXRlY3RD''@;'; put 'put ''aGFuZ2VzKCl7Y29uc3QgbD10aGlzLl92aWV3O3g2KGxbQmldLGwsbFtWYV0sITEpfWNoZWNrTm9DaGFuZ2VzKCl7fWdldCBjb250ZXh0KCl7cmV0dXJuIG51bGx9fWNsYXNzIEdTIGV4dGVuZHMgSzB7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBv''@;'; put 'put ''bmVudEZhY3RvcnkobCl7Y29uc3QgYT1RbyhsKTtyZXR1cm4gbmV3IGg1KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uICRTKGMpe2NvbnN0IGw9W107Zm9yKGxldCBhIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShhKSYmbC5wdXNoKHtwcm9wTmFtZTpjW2FdLHRlbXBsYXRlTmFtZTphfSk7cmV0''@;'; put 'put ''dXJuIGx9Y2xhc3MgZEx7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1hMChkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsQ3YsZCk7cmV0dXJuIGghPT1Ddnx8YT09PUN2P2g6dGhpcy5wYXJlbnRJbmplY3Rv''@;'; put 'put ''ci5nZXQobCxhLGQpfX1jbGFzcyBoNSBleHRlbmRzIGNTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD0kUyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUp''@;'; put 'put ''JiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gJFModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50''@;'; put 'put ''VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiB0OShjKXtyZXR1cm4gYy5tYXAoYW0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRv''@;'; put 'put ''TW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7bGV0IGY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIHEwP2g6aD8uaW5qZWN0b3I7ZiYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKGY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9u''@;'; put 'put ''ZUluamVjdG9yKGYpfHxmKTtjb25zdCBfPWY/bmV3IGRMKGwsZik6bCxUPV8uZ2V0KFkzLG51bGwpO2lmKG51bGw9PT1UKXRocm93IG5ldyBBcig0MDcsITEpO2NvbnN0IGdlPXtyZW5kZXJlckZhY3Rvcnk6VCxzYW5pdGl6ZXI6Xy5nZXQocDYsbnVsbCksZWZmZWN0TWFuYWdlcjpfLmdldCh6''@;'; put 'put ''UyxudWxsKX0sd2U9VC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxFZT10aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLFplPWQ/ZnVuY3Rpb24gVFMoYyxsLGEsZCl7Y29uc3QgZj1kLmdldCh4diwhMSl8fGE9PT1PYy5TaGFkb3dEb20sXz1j''@;'; put 'put ''LnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIE5JKGMpe1J2KGMpfShfKSxffSh3ZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sXyk6cW0od2UsRWUsZnVuY3Rpb24gdUwoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJz''@;'; put 'put ''dmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEVlKSkseXQ9dGhpcy5jb21wb25lbnREZWYuc2lnbmFscz80NjA4OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaD81NzY6NTI4LGt0PSQzKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksU3Q9YjYobnVsbCxr''@;'; put 'put ''dCxudWxsLHl0LG51bGwsbnVsbCxnZSx3ZSxfLG51bGwsbnVsbCk7bGV0IFF0LHJuO1M5KFN0KTt0cnl7Y29uc3Qgdm49dGhpcy5jb21wb25lbnREZWY7bGV0IE5uLGNyPW51bGw7dm4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyhObj1bXSxjcj1uZXcgTWFwLHZuLmZpbmRIb3N0RGlyZWN0aXZl''@;'; put 'put ''RGVmcyh2bixObixjciksTm4ucHVzaCh2bikpOk5uPVt2bl07Y29uc3QgRHI9ZnVuY3Rpb24gcVMoYyxsKXtjb25zdCBhPWNbQmldLGQ9cHM7cmV0dXJuIGNbZF09bCxHMyhhLGQsMiwiI2hvc3QiLG51bGwpfShTdCxaZSksX2k9ZnVuY3Rpb24gZkwoYyxsLGEsZCxoLGYsXyl7Y29uc3QgVD1o''@;'; put 'put ''W0JpXTshZnVuY3Rpb24gcEwoYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPVloKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYoTTYobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmT0MoZCxhLGwpKX0oZCxjLGwsXyk7''@;'; put 'put ''bGV0IFc9bnVsbDtudWxsIT09bCYmKFc9b1MobCxoW0xkXSkpO2NvbnN0IGllPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IGdlPTE2O2Euc2lnbmFscz9nZT00MDk2OmEub25QdXNoJiYoZ2U9NjQpO2NvbnN0IHdlPWI2KGgsa1MoYSksbnVsbCxnZSxoW2MuaW5k''@;'; put 'put ''ZXhdLGMsZixpZSxudWxsLG51bGwsVyk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZQdihULGMsZC5sZW5ndGgtMSksUzYoaCx3ZSksaFtjLmluZGV4XT13ZX0oRHIsWmUsdm4sTm4sU3QsZ2Usd2UpO3JuPWtlKGt0LHBzKSxaZSYmZnVuY3Rpb24gbUwoYyxsLGEsZCl7aWYoZClEZChjLGEs''@;'; put 'put ''WyJuZy12ZXJzaW9uIixBSS5mdWxsXSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gXzQoYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5w''@;'; put 'put ''dXNoKGYsY1srK2RdKTo4PT09aCYmYS5wdXNoKGYpO2Vsc2V7aWYoIUZjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJkRkKGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZSQyhjLGEsZi5qb2luKCIgIikpfX0od2Usdm4sWmUsZCks''@;'; put 'put ''dm9pZCAwIT09YSYmZnVuY3Rpb24gdkwoYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KHJuLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLFF0''@;'; put 'put ''PWZ1bmN0aW9uIGdMKGMsbCxhLGQsaCxmKXtjb25zdCBfPVNjKCksVD1oW0JpXSxXPUhsKF8saCk7YzUoVCxoLF8sYSxudWxsLGQpO2ZvcihsZXQgZ2U9MDtnZTxhLmxlbmd0aDtnZSsrKVZjKFFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K2dlLF8pLGgpO1JTKFQsaCxfKSxXJiZWYyhXLGgpO2Nv''@;'; put 'put ''bnN0IGllPVFoKGgsVCxfLmRpcmVjdGl2ZVN0YXJ0K18uY29tcG9uZW50T2Zmc2V0LF8pO2lmKGNbVmFdPWhbVmFdPWllLG51bGwhPT1mKWZvcihjb25zdCBnZSBvZiBmKWdlKGllLGwpO3JldHVybiBJdihULF8sYyksaWV9KF9pLHZuLE5uLGNyLFN0LFtfTF0pLFZ2KGt0LFN0LG51bGwpfWZp''@;'; put 'put ''bmFsbHl7TW0oKX1yZXR1cm4gbmV3IGhMKHRoaXMuY29tcG9uZW50VHlwZSxRdCxZZChybixTdCksU3Qscm4pfX1jbGFzcyBoTCBleHRlbmRzIGxTe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhpcy5fdE5vZGU9Zix0''@;'; put 'put ''aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyBjTChoKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51''@;'; put 'put ''bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7''@;'; put 'put ''TnYoZltCaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLGE1KG10KHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyB4Myh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl''@;'; put 'put ''c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIF9MKCl7Y29uc3QgYz1TYygpO0VtKFhyKClbQmldLGMpfWZ1bmN0aW9uIGVvKGMpe2xldCBsPWZ1bmN0aW9uIEtTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5''@;'; put 'put ''cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoUWMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0aHJvdyBuZXcgQXIoOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVz''@;'; put 'put ''aChoKTtjb25zdCBfPWM7Xy5pbnB1dHM9RTYoYy5pbnB1dHMpLF8uaW5wdXRUcmFuc2Zvcm1zPUU2KGMuaW5wdXRUcmFuc2Zvcm1zKSxfLmRlY2xhcmVkSW5wdXRzPUU2KGMuZGVjbGFyZWRJbnB1dHMpLF8ub3V0cHV0cz1FNihjLm91dHB1dHMpO2NvbnN0IFQ9aC5ob3N0QmluZGluZ3M7VCYm''@;'; put 'put ''d0woYyxUKTtjb25zdCBXPWgudmlld1F1ZXJ5LGllPWguY29udGVudFF1ZXJpZXM7aWYoVyYmYkwoYyxXKSxpZSYmeUwoYyxpZSksbjAoYy5pbnB1dHMsaC5pbnB1dHMpLG4wKGMuZGVjbGFyZWRJbnB1dHMsaC5kZWNsYXJlZElucHV0cyksbjAoYy5vdXRwdXRzLGgub3V0cHV0cyksbnVsbCE9''@;'; put 'put ''PWguaW5wdXRUcmFuc2Zvcm1zJiYobnVsbD09PV8uaW5wdXRUcmFuc2Zvcm1zJiYoXy5pbnB1dFRyYW5zZm9ybXM9e30pLG4wKF8uaW5wdXRUcmFuc2Zvcm1zLGguaW5wdXRUcmFuc2Zvcm1zKSksUWMoaCkmJmguZGF0YS5hbmltYXRpb24pe2NvbnN0IGdlPWMuZGF0YTtnZS5hbmltYXRpb249''@;'; put 'put ''KGdlLmFuaW1hdGlvbnx8W10pLmNvbmNhdChoLmRhdGEuYW5pbWF0aW9uKX19Y29uc3QgZj1oLmZlYXR1cmVzO2lmKGYpZm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXTtUJiZULm5nSW5oZXJpdCYmVChjKSxUPT09ZW8mJihhPSExKX19bD1PYmplY3QuZ2V0UHJvdG90''@;'; put 'put ''eXBlT2YobCl9IWZ1bmN0aW9uIEJ2KGMpe2xldCBsPTAsYT1udWxsO2ZvcihsZXQgZD1jLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWNbZF07aC5ob3N0VmFycz1sKz1oLmhvc3RWYXJzLGguaG9zdEF0dHJzPVloKGguaG9zdEF0dHJzLGE9WWgoYSxoLmhvc3RBdHRycykpfX0oZCl9ZnVu''@;'; put 'put ''Y3Rpb24gRTYoYyl7cmV0dXJuIGM9PT1YYz97fTpjPT09U3M/W106Y31mdW5jdGlvbiBiTChjLGwpe2NvbnN0IGE9Yy52aWV3UXVlcnk7Yy52aWV3UXVlcnk9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24geUwoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7Yy5jb250''@;'; put 'put ''ZW50UXVlcmllcz1hPyhkLGgsZik9PntsKGQsaCxmKSxhKGQsaCxmKX06bH1mdW5jdGlvbiB3TChjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ3M7Yy5ob3N0QmluZGluZ3M9YT8oZCxoKT0+e2woZCxoKSxhKGQsaCl9Omx9ZnVuY3Rpb24gZU0oYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9''@;'; put 'put ''e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFsyXSYmKGFbZF09aFsyXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1mdW5jdGlvbiBrNihjKXtyZXR1cm4hIUE2KGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShj''@;'; put 'put ''IGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEE2KGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIEJjKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIGdmKGMsbCxhLGQpe2NvbnN0IGg9QmMoYyxsLGEpO3JldHVybiBCYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBUNihjLGwsYSxkLGgpe2NvbnN0IGY9Z2YoYyxsLGEsZCk7cmV0dXJuIEJjKGMsbCsyLGgpfHxm''@;'; put 'put ''fWZ1bmN0aW9uIG0wKGMsbCxhLGQsaCxmKXtjb25zdCBfPWdmKGMsbCxhLGQpO3JldHVybiBnZihjLGwrMixoLGYpfHxffWZ1bmN0aW9uIFRyKGMsbCxhLGQpe2NvbnN0IGg9WHIoKTtyZXR1cm4gQmMoaCxDMygpLGwpJiYoVHMoKSwkMShRYSgpLGgsYyxsLGEsZCkpLFRyfWZ1bmN0aW9uIEsz''@;'; put 'put ''KGMsbCxhLGQpe3JldHVybiBCYyhjLEMzKCksYSk/bCtrbyhhKStkOlpvfWZ1bmN0aW9uIFFlKGMsbCxhLGQsaCxmLF8sVCl7Y29uc3QgVz1YcigpLGllPVRzKCksZ2U9Yytwcyx3ZT1pZS5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gV0woYyxsLGEsZCxoLGYsXyxULFcpe2NvbnN0IGllPWwu''@;'; put 'put ''Y29uc3RzLGdlPUczKGwsYyw0LF98fG51bGwsSXIoaWUsVCkpO092KGwsYSxnZSxJcihpZSxXKSksRW0obCxnZSk7Y29uc3Qgd2U9Z2UudFZpZXc9JDMoMixnZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLGllLG51bGwpO3JldHVybiBu''@;'; put 'put ''dWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwsZ2UpLHdlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcoZ2UpKSxnZX0oZ2UsaWUsVyxsLGEsZCxoLGYsXyk6aWUuZGF0YVtnZV07TjEod2UsITEpO2NvbnN0IEVlPUt2KGllLFcsd2UsYyk7eG0oKSYmZTYoaWUs''@;'; put 'put ''VyxFZSx3ZSksVmMoRWUsVyksUzYoVyxXW2dlXT1QUyhFZSxXLEVlLHdlKSkscWgod2UpJiZMdihpZSxXLHdlKSxudWxsIT1fJiZ5NihXLHdlLFQpfWxldCBLdj1mdW5jdGlvbiBYdihjLGwsYSxkKXtyZXR1cm4gVmQoITApLGxbVm9dLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiAkaShj''@;'; put 'put ''KXtyZXR1cm4gJGUoZnVuY3Rpb24gJFQoKXtyZXR1cm4gUG8ubEZyYW1lLmNvbnRleHRMVmlld30oKSxwcytjKX1mdW5jdGlvbiBSZShjLGwsYSl7Y29uc3QgZD1YcigpO3JldHVybiBCYyhkLEMzKCksbCkmJlB1KFRzKCksUWEoKSxkLGMsbCxkW1ZvXSxhLCExKSxSZX1mdW5jdGlvbiBKdihj''@;'; put 'put ''LGwsYSxkLGgpe2NvbnN0IF89aD8iY2xhc3MiOiJzdHlsZSI7TnYoYyxhLGwuaW5wdXRzW19dLF8sZCl9ZnVuY3Rpb24gbWUoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPXBzK2MsVD1oW1ZvXSxXPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIHVNKGMsbCxhLGQsaCxmKXtjb25z''@;'; put 'put ''dCBfPWwuY29uc3RzLFc9RzMobCxjLDIsZCxJcihfLGgpKTtyZXR1cm4gT3YobCxhLFcsSXIoXyxmKSksbnVsbCE9PVcuYXR0cnMmJk02KFcsVy5hdHRycywhMSksbnVsbCE9PVcubWVyZ2VkQXR0cnMmJk02KFcsVy5tZXJnZWRBdHRycywhMCksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVz''@;'; put 'put ''LmVsZW1lbnRTdGFydChsLFcpLFd9KF8sZixoLGwsYSxkKTpmLmRhdGFbX10saWU9ZE0oZixoLFcsVCxsLGMpO2hbX109aWU7Y29uc3QgZ2U9cWgoVyk7cmV0dXJuIE4xKFcsITApLE9DKFQsaWUsVyksMzIhPSgzMiZXLmZsYWdzKSYmeG0oKSYmZTYoZixoLGllLFcpLDA9PT1mdW5jdGlvbiBC''@;'; put 'put ''VCgpe3JldHVybiBQby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnR9KCkmJlZjKGllLGgpLGZ1bmN0aW9uIGpUKCl7UG8ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksZ2UmJihMdihmLGgsVyksSXYoZixXLGgpKSxudWxsIT09ZCYmeTYoaCxXKSxtZX1mdW5jdGlvbiB5ZSgpe2xldCBj''@;'; put 'put ''PVNjKCk7YjkoKT9DbSgpOihjPWMucGFyZW50LE4xKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIFVUKGMpe3JldHVybiBQby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBHVCgpe1BvLnNraXBIeWRyYXRpb25Sb290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiB6''@;'; put 'put ''VCgpe1BvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9VHMoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFbShhLGMpLE9kKGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIHNEKGMpe3JldHVy''@;'; put 'put ''biAwIT0oOCZjLmZsYWdzKX0obCkmJkp2KGEsbCxYcigpLGwuY2xhc3Nlc1dpdGhvdXRIb3N0LCEwKSxudWxsIT1sLnN0eWxlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBhRChjKXtyZXR1cm4gMCE9KDE2JmMuZmxhZ3MpfShsKSYmSnYoYSxsLFhyKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSks''@;'; put 'put ''eWV9ZnVuY3Rpb24gcXQoYyxsLGEsZCl7cmV0dXJuIG1lKGMsbCxhLGQpLHllKCkscXR9bGV0IGRNPShjLGwsYSxkLGgsZik9PihWZCghMCkscW0oZCxoLGZ1bmN0aW9uIEd3KCl7cmV0dXJuIFBvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gQnIoYyxsLGEpe2NvbnN0''@;'; put 'put ''IGQ9WHIoKSxoPVRzKCksZj1jK3BzLF89aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gUXYoYyxsLGEsZCxoKXtjb25zdCBmPWwuY29uc3RzLF89SXIoZixkKSxUPUczKGwsYyw4LCJuZy1jb250YWluZXIiLF8pO3JldHVybiBudWxsIT09XyYmTTYoVCxfLCEwKSxPdihsLGEsVCxJcihmLGgp''@;'; put 'put ''KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsVCksVH0oZixoLGQsbCxhKTpoLmRhdGFbZl07TjEoXywhMCk7Y29uc3QgVD1mTShoLGQsXyxjKTtyZXR1cm4gZFtmXT1ULHhtKCkmJmU2KGgsZCxULF8pLFZjKFQsZCkscWgoXykmJihMdihoLGQsXyksSXYoaCxf''@;'; put 'put ''LGQpKSxudWxsIT1hJiZ5NihkLF8pLEJyfWZ1bmN0aW9uIFVyKCl7bGV0IGM9U2MoKTtjb25zdCBsPVRzKCk7cmV0dXJuIGI5KCk/Q20oKTooYz1jLnBhcmVudCxOMShjLCExKSksbC5maXJzdENyZWF0ZVBhc3MmJihFbShsLGMpLE9kKGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksVXJ9''@;'; put 'put ''ZnVuY3Rpb24gamEoYyxsLGEpe3JldHVybiBCcihjLGwsYSksVXIoKSxqYX1sZXQgZk09KGMsbCxhLGQpPT4oVmQoITApLFU5KGxbVm9dLCIiKSk7ZnVuY3Rpb24gVm4oKXtyZXR1cm4gWHIoKX1mdW5jdGlvbiB2NShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVu''@;'; put 'put ''Y3Rpb24gcE0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9ZnVuY3Rpb24geHQoYyxsLGEsZCl7Y29uc3QgaD1YcigpLGY9VHMoKSxfPVNjKCk7cmV0dXJuIGdNKGYsaCxoW1ZvXSxfLGMsbCxkKSx4dH1mdW5jdGlvbiBlXyhjLGwpe2NvbnN0IGE9U2MoKSxk''@;'; put 'put ''PVhyKCksaD1UcygpO3JldHVybiBnTShoLGQsVlModzkoaC5kYXRhKSxhLGQpLGEsYyxsKSxlX31mdW5jdGlvbiBnTShjLGwsYSxkLGgsZixfKXtjb25zdCBUPXFoKGQpLGllPWMuZmlyc3RDcmVhdGVQYXNzJiZOUyhjKSxnZT1sW1ZhXSx3ZT1IUyhsKTtsZXQgRWU9ITA7aWYoMyZkLnR5cGV8''@;'; put 'put ''fF8pe2NvbnN0IGV0PUhsKGQsbCkseXQ9Xz9fKGV0KTpldCxrdD13ZS5sZW5ndGgsU3Q9Xz9ybj0+XyhfYShybltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IFF0PW51bGw7aWYoIV8mJlQmJihRdD1mdW5jdGlvbiBYTChjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihs''@;'; put 'put ''ZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCBfPWhbZl07aWYoXz09PWEmJmhbZisxXT09PWQpe2NvbnN0IFQ9bFtUdV0sVz1oW2YrMl07cmV0dXJuIFQubGVuZ3RoPlc/VFtXXTpudWxsfSJzdHJpbmciPT10eXBlb2YgXyYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4''@;'; put 'put ''KSksbnVsbCE9PVF0KShRdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8UXQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsUXQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixFZT0hMTtlbHNle2Y9dk0oZCxsLGdlLGYsITEpO2NvbnN0IHJuPWEubGlzdGVuKHl0LGgsZik7d2UucHVzaChmLHJuKSxpZSYm''@;'; put 'put ''aWUucHVzaChoLFN0LGt0LGt0KzEpfX1lbHNlIGY9dk0oZCxsLGdlLGYsITEpO2NvbnN0IFplPWQub3V0cHV0cztsZXQgb3Q7aWYoRWUmJm51bGwhPT1aZSYmKG90PVplW2hdKSl7Y29uc3QgZXQ9b3QubGVuZ3RoO2lmKGV0KWZvcihsZXQgeXQ9MDt5dDxldDt5dCs9Mil7Y29uc3Qgdm49bFtv''@;'; put 'put ''dFt5dF1dW290W3l0KzFdXS5zdWJzY3JpYmUoZiksTm49d2UubGVuZ3RoO3dlLnB1c2goZix2biksaWUmJmllLnB1c2goaCxkLmluZGV4LE5uLC0oTm4rMSkpfX19ZnVuY3Rpb24gbU0oYyxsLGEsZCl7dHJ5e3JldHVybiBoMCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGgpe3JldHVybiBCUyhj''@;'; put 'put ''LGgpLCExfWZpbmFsbHl7aDAoNyxsLGEpfX1mdW5jdGlvbiB2TShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKF8pe2lmKF89PT1GdW5jdGlvbilyZXR1cm4gZDthNShjLmNvbXBvbmVudE9mZnNldD4tMT9tdChjLmluZGV4LGwpOmwpO2xldCBXPW1NKGwsYSxkLF8pLGllPWYuX19uZ05l''@;'; put 'put ''eHRMaXN0ZW5lckZuX187Zm9yKDtpZTspVz1tTShsLGEsaWUsXykmJlcsaWU9aWUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09VyYmXy5wcmV2ZW50RGVmYXVsdCgpLFd9fWZ1bmN0aW9uIFZlKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIFhUKGMpe3JldHVybihQby5sRnJhbWUu''@;'; put 'put ''Y29udGV4dExWaWV3PWZ1bmN0aW9uIEpUKGMsbCl7Zm9yKDtjPjA7KWw9bFtPbF0sYy0tO3JldHVybiBsfShjLFBvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtWYV19KGMpfWZ1bmN0aW9uIEpMKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIFdoKGMpe2NvbnN0IGw9Yy5hdHRycztp''@;'; put 'put ''ZihudWxsIT1sKXtjb25zdCBhPWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9tNChjLGYsITApOnY0KGQsZikpcmV0dXJuIGh9''@;'; put 'put ''ZWxzZSBhPWh9cmV0dXJuIGF9ZnVuY3Rpb24gVGkoYyl7Y29uc3QgbD1YcigpW0phXVt6b107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249QmQoYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IF89''@;'; put 'put ''Yz9KTChmLGMpOjA7bnVsbCE9PV8mJihoW19dP2hbX10ucHJvamVjdGlvbk5leHQ9ZjpkW19dPWYsaFtfXT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIGtyKGMsbD0wLGEpe2NvbnN0IGQ9WHIoKSxoPVRzKCksZj1HMyhoLHBzK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9u''@;'; put 'put ''JiYoZi5wcm9qZWN0aW9uPWwpLENtKCksKCFkW3UwXXx8dzMoKSkmJjMyIT0oMzImZi5mbGFncykmJmZ1bmN0aW9uIFlEKGMsbCxhKXtXRChsW1ZvXSwwLGwsYSxGMyhjLGEsbCksVzEoYS5wYXJlbnR8fGxbem9dLGEsbCkpfShoLGQsZil9ZnVuY3Rpb24geGMoYyxsLGEpe3JldHVybiBYMihj''@;'; put 'put ''LCIiLGwsIiIsYSkseGN9ZnVuY3Rpb24gWDIoYyxsLGEsZCxoKXtjb25zdCBmPVhyKCksXz1LMyhmLGwsYSxkKTtyZXR1cm4gXyE9PVpvJiZQdShUcygpLFFhKCksZixjLF8sZltWb10saCwhMSksWDJ9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gYzw8MTd8bDw8Mn1mdW5jdGlvbiBYMChjKXty''@;'; put 'put ''ZXR1cm4gYz4+MTcmMzI3Njd9ZnVuY3Rpb24gdF8oYyl7cmV0dXJuIDJ8Y31mdW5jdGlvbiBKMChjKXtyZXR1cm4oMTMxMDY4JmMpPj4yfWZ1bmN0aW9uIG5fKGMsbCl7cmV0dXJuLTEzMTA2OSZjfGw8PDJ9ZnVuY3Rpb24gcl8oYyl7cmV0dXJuIDF8Y31mdW5jdGlvbiBNTShjLGwsYSxkLGgp''@;'; put 'put ''e2NvbnN0IGY9Y1thKzFdLF89bnVsbD09PWw7bGV0IFQ9ZD9YMChmKTpKMChmKSxXPSExO2Zvcig7MCE9PVQmJighMT09PVd8fF8pOyl7Y29uc3QgZ2U9Y1tUKzFdO25SKGNbVF0sbCkmJihXPSEwLGNbVCsxXT1kP3JfKGdlKTp0XyhnZSkpLFQ9ZD9YMChnZSk6SjAoZ2UpfVcmJihjW2ErMV09''@;'; put 'put ''ZD90XyhmKTpyXyhmKSl9ZnVuY3Rpb24gblIoYyxsKXtyZXR1cm4gbnVsbD09PWN8fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZqZChjLGwpPj0wfWNvbnN0IFZsPXt0ZXh0RW5kOjAsa2V5''@;'; put 'put ''OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB4TShjKXtyZXR1cm4gYy5zdWJzdHJpbmcoVmwua2V5LFZsLmtleUVuZCl9ZnVuY3Rpb24gRU0oYyxsKXtjb25zdCBhPVZsLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPVZsLmtleUVuZD1mdW5jdGlvbiBzUihjLGws''@;'; put 'put ''YSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShjLFZsLmtleT1sLGEpLHZmKGMsbCxhKSl9ZnVuY3Rpb24gdmYoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24gSHUoYyxsLGEpe3JldHVybiB2MChj''@;'; put 'put ''LGwsYSwhMSksSHV9ZnVuY3Rpb24gZHIoYyxsKXtyZXR1cm4gdjAoYyxsLG51bGwsITApLGRyfWZ1bmN0aW9uIEsxKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGlSKGMpe3JldHVybiBmdW5jdGlvbiBGdShjKXtWbC5rZXk9MCxWbC5rZXlFbmQ9MCxWbC52YWx1ZT0wLFZsLnZhbHVlRW5kPTAs''@;'; put 'put ''VmwudGV4dEVuZD1jLmxlbmd0aH0oYyksRU0oYyx2ZihjLDAsVmwudGV4dEVuZCkpfShsKTthPj0wO2E9RU0obCxhKSlNYyhjLHhNKGwpLCEwKX1mdW5jdGlvbiB2MChjLGwsYSxkKXtjb25zdCBoPVhyKCksZj1UcygpLF89VjEoMik7Zi5maXJzdFVwZGF0ZVBhc3MmJlgxKGYsYyxfLGQpLGwh''@;'; put 'put ''PT1abyYmQmMoaCxfLGwpJiZjXyhmLGYuZGF0YVtldSgpXSxoLGhbVm9dLGMsaFtfKzFdPWZ1bmN0aW9uIExNKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Y3x8KCJzdHJpbmciPT10eXBlb2YgbD9jKz1sOiJvYmplY3QiPT10eXBlb2YgYyYmKGM9cWEoJDIoYykpKSksY30obCxhKSxkLF8p''@;'; put 'put ''fWZ1bmN0aW9uIERNKGMsbCl7cmV0dXJuIGw+PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gWDEoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW2V1KCldLF89RE0oYyxhKTt1XyhmLGQpJiZudWxsPT09bCYmIV8mJihsPSExKSxsPWZ1bmN0''@;'; put 'put ''aW9uIGxSKGMsbCxhLGQpe2NvbnN0IGg9dzkoYyk7bGV0IGY9ZD9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9eTUoYT1sXyhudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1u''@;'; put 'put ''dWxsKTtlbHNle2NvbnN0IF89bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigtMT09PV98fGNbX10hPT1oKWlmKGE9bF8oaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IFc9ZnVuY3Rpb24gY1IoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzO2lmKDAhPT1K''@;'; put 'put ''MChkKSlyZXR1cm4gY1tYMChkKV19KGMsbCxkKTt2b2lkIDAhPT1XJiZBcnJheS5pc0FycmF5KFcpJiYoVz1sXyhudWxsLGMsbCxXWzFdLGQpLFc9eTUoVyxsLmF0dHJzLGQpLGZ1bmN0aW9uIHVSKGMsbCxhLGQpe2NbWDAoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0o''@;'; put 'put ''YyxsLGQsVykpfWVsc2UgZj1mdW5jdGlvbiBkUihjLGwsYSl7bGV0IGQ7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD15NShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiB5NShkLGwuYXR0cnMsYSl9KGMsbCxkKX1y''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9ZjpsLnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIGVSKGMsbCxhLGQsaCxmKXtsZXQgXz1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsVD1YMChfKSxXPUowKF8pO2NbZF09YTtsZXQg''@;'; put 'put ''Z2UsaWU9ITE7aWYoQXJyYXkuaXNBcnJheShhKT8oZ2U9YVsxXSwobnVsbD09PWdlfHxqZChhLGdlKT4wKSYmKGllPSEwKSk6Z2U9YSxoKWlmKDAhPT1XKXtjb25zdCBFZT1YMChjW1QrMV0pO2NbZCsxXT1iNShFZSxUKSwwIT09RWUmJihjW0VlKzFdPW5fKGNbRWUrMV0sZCkpLGNbVCsxXT1m''@;'; put 'put ''dW5jdGlvbiBTaShjLGwpe3JldHVybiAxMzEwNzEmY3xsPDwxN30oY1tUKzFdLGQpfWVsc2UgY1tkKzFdPWI1KFQsMCksMCE9PVQmJihjW1QrMV09bl8oY1tUKzFdLGQpKSxUPWQ7ZWxzZSBjW2QrMV09YjUoVywwKSwwPT09VD9UPWQ6Y1tXKzFdPW5fKGNbVysxXSxkKSxXPWQ7aWUmJihjW2Qr''@;'; put 'put ''MV09dF8oY1tkKzFdKSksTU0oYyxnZSxkLCEwKSxNTShjLGdlLGQsITEpLGZ1bmN0aW9uIHRSKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZqZChmLGwpPj0wJiYoYVtkKzFdPXJfKGFb''@;'; put 'put ''ZCsxXSkpfShsLGdlLGMsZCxmKSxfPWI1KFQsVyksZj9sLmNsYXNzQmluZGluZ3M9XzpsLnN0eWxlQmluZGluZ3M9X30oaCxmLGwsYSxfLGQpfX1mdW5jdGlvbiBsXyhjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3QgXz1hLmRpcmVjdGl2ZUVuZDtsZXQgVD1hLmRpcmVjdGl2ZVN0eWxpbmdM''@;'; put 'put ''YXN0O2ZvcigtMT09PVQ/VD1hLmRpcmVjdGl2ZVN0YXJ0OlQrKztUPF8mJihmPWxbVF0sZD15NShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspVCsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9VCksZH1mdW5jdGlvbiB5NShjLGwsYSl7Y29uc3QgZD1hPzE6Mjts''@;'; put 'put ''ZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3QgXz1sW2ZdOyJudW1iZXIiPT10eXBlb2YgXz9oPV86aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSksTWMoYyxfLCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZv''@;'; put 'put ''aWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIGNfKGMsbCxhLGQsaCxmLF8sVCl7aWYoISgzJmwudHlwZSkpcmV0dXJuO2NvbnN0IFc9Yy5kYXRhLGllPVdbVCsxXSxnZT1mdW5jdGlvbiBRTChjKXtyZXR1cm4gMT09KDEmYyl9KGllKT9lbChXLGwsYSxoLEowKGllKSxfKTp2b2lkIDA7SjEoZ2Up''@;'; put 'put ''fHwoSjEoZil8fGZ1bmN0aW9uIFNNKGMpe3JldHVybiAyPT0oMiZjKX0oaWUpJiYoZj1lbChXLG51bGwsYSxoLFQsXykpLGZ1bmN0aW9uIElaKGMsbCxhLGQsaCl7aWYobCloP2MuYWRkQ2xhc3MoYSxkKTpjLnJlbW92ZUNsYXNzKGEsZCk7ZWxzZXtsZXQgZj0tMT09PWQuaW5kZXhPZigiLSIp''@;'; put 'put ''P3ZvaWQgMDpZMi5EYXNoQ2FzZTtudWxsPT1oP2MucmVtb3ZlU3R5bGUoYSxkLGYpOigic3RyaW5nIj09dHlwZW9mIGgmJmguZW5kc1dpdGgoIiFpbXBvcnRhbnQiKSYmKGg9aC5zbGljZSgwLC0xMCksZnw9WTIuSW1wb3J0YW50KSxjLnNldFN0eWxlKGEsZCxoLGYpKX19KGQsXyxZMChldSgp''@;'; put 'put ''LGEpLGgsZikpfWZ1bmN0aW9uIGVsKGMsbCxhLGQsaCxmKXtjb25zdCBfPW51bGw9PT1sO2xldCBUO2Zvcig7aD4wOyl7Y29uc3QgVz1jW2hdLGllPUFycmF5LmlzQXJyYXkoVyksZ2U9aWU/V1sxXTpXLHdlPW51bGw9PT1nZTtsZXQgRWU9YVtoKzFdO0VlPT09Wm8mJihFZT13ZT9Tczp2b2lk''@;'; put 'put ''IDApO2xldCBaZT13ZT90ZihFZSxkKTpnZT09PWQ/RWU6dm9pZCAwO2lmKGllJiYhSjEoWmUpJiYoWmU9dGYoVyxkKSksSjEoWmUpJiYoVD1aZSxfKSlyZXR1cm4gVDtjb25zdCBvdD1jW2grMV07aD1fP1gwKG90KTpKMChvdCl9aWYobnVsbCE9PWwpe2xldCBXPWY/bC5yZXNpZHVhbENsYXNz''@;'; put 'put ''ZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1XJiYoVD10ZihXLGQpKX1yZXR1cm4gVH1mdW5jdGlvbiBKMShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiB1XyhjLGwpe3JldHVybiAwIT0oYy5mbGFncyYobD84OjE2KSl9ZnVuY3Rpb24gTmUoYyxsPSIiKXtjb25zdCBhPVhyKCksZD1U''@;'; put 'put ''cygpLGg9YytwcyxmPWQuZmlyc3RDcmVhdGVQYXNzP0czKGQsaCwxLGwsbnVsbCk6ZC5kYXRhW2hdLF89ZF8oZCxhLGYsbCxjKTthW2hdPV8seG0oKSYmZTYoZCxhLF8sZiksTjEoZiwhMSl9bGV0IGRfPShjLGwsYSxkLGgpPT4oVmQoITApLGZ1bmN0aW9uICRtKGMsbCl7cmV0dXJuIGMuY3Jl''@;'; put 'put ''YXRlVGV4dChsKX0obFtWb10sZCkpO2Z1bmN0aW9uIG9yKGMpe3JldHVybiBncigiIixjLCIiKSxvcn1mdW5jdGlvbiBncihjLGwsYSl7Y29uc3QgZD1YcigpLGg9SzMoZCxjLGwsYSk7cmV0dXJuIGghPT1abyYmR2QoZCxldSgpLGgpLGdyfWZ1bmN0aW9uIGpjKGMsbCxhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj1YcigpLF89ZnVuY3Rpb24gWDMoYyxsLGEsZCxoLGYpe2NvbnN0IFQ9Z2YoYyxOZCgpLGEsaCk7cmV0dXJuIFYxKDIpLFQ/bCtrbyhhKStkK2tvKGgpK2Y6Wm99KGYsYyxsLGEsZCxoKTtyZXR1cm4gXyE9PVpvJiZHZChmLGV1KCksXyksamN9ZnVuY3Rpb24gYjAoYyxsLGEsZCxoLGYsXyl7''@;'; put 'put ''Y29uc3QgVD1YcigpLFc9ZnVuY3Rpb24gSjMoYyxsLGEsZCxoLGYsXyxUKXtjb25zdCBpZT1UNihjLE5kKCksYSxoLF8pO3JldHVybiBWMSgzKSxpZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUOlpvfShULGMsbCxhLGQsaCxmLF8pO3JldHVybiBXIT09Wm8mJkdkKFQsZXUoKSxXKSxiMH1m''@;'; put 'put ''dW5jdGlvbiB3NShjLGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9WHIoKSxnZT1mdW5jdGlvbiBRMyhjLGwsYSxkLGgsZixfLFQsVyxpZSl7Y29uc3Qgd2U9bTAoYyxOZCgpLGEsaCxfLFcpO3JldHVybiBWMSg0KSx3ZT9sK2tvKGEpK2Qra28oaCkrZitrbyhfKStUK2tvKFcpK2llOlpvfShp''@;'; put 'put ''ZSxjLGwsYSxkLGgsZixfLFQsVyk7cmV0dXJuIGdlIT09Wm8mJkdkKGllLGV1KCksZ2UpLHc1fWZ1bmN0aW9uIEZNKGMsbCxhKXshZnVuY3Rpb24gXzAoYyxsLGEsZCl7Y29uc3QgaD1UcygpLGY9VjEoMik7aC5maXJzdFVwZGF0ZVBhc3MmJlgxKGgsbnVsbCxmLGQpO2NvbnN0IF89WHIoKTtp''@;'; put 'put ''ZihhIT09Wm8mJkJjKF8sZixhKSl7Y29uc3QgVD1oLmRhdGFbZXUoKV07aWYodV8oVCxkKSYmIURNKGgsZikpe2xldCBXPWQ/VC5jbGFzc2VzV2l0aG91dEhvc3Q6VC5zdHlsZXNXaXRob3V0SG9zdDtudWxsIT09VyYmKGE9dmMoVyxhfHwiIikpLEp2KGgsVCxfLGEsZCl9ZWxzZSFmdW5jdGlv''@;'; put 'put ''biBzYyhjLGwsYSxkLGgsZixfLFQpe2g9PT1abyYmKGg9U3MpO2xldCBXPTAsaWU9MCxnZT0wPGgubGVuZ3RoP2hbMF06bnVsbCx3ZT0wPGYubGVuZ3RoP2ZbMF06bnVsbDtmb3IoO251bGwhPT1nZXx8bnVsbCE9PXdlOyl7Y29uc3QgRWU9VzxoLmxlbmd0aD9oW1crMV06dm9pZCAwLFplPWll''@;'; put 'put ''PGYubGVuZ3RoP2ZbaWUrMV06dm9pZCAwO2xldCBldCxvdD1udWxsO2dlPT09d2U/KFcrPTIsaWUrPTIsRWUhPT1aZSYmKG90PXdlLGV0PVplKSk6bnVsbD09PXdlfHxudWxsIT09Z2UmJmdlPHdlPyhXKz0yLG90PWdlKTooaWUrPTIsb3Q9d2UsZXQ9WmUpLG51bGwhPT1vdCYmY18oYyxsLGEs''@;'; put 'put ''ZCxvdCxldCxfLFQpLGdlPVc8aC5sZW5ndGg/aFtXXTpudWxsLHdlPWllPGYubGVuZ3RoP2ZbaWVdOm51bGx9fShoLFQsXyxfW1ZvXSxfW2YrMV0sX1tmKzFdPWZ1bmN0aW9uIGhSKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIFNzO2NvbnN0IGQ9W10saD0kMihhKTtpZihBcnJh''@;'; put 'put ''eS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1''@;'; put 'put ''cm4gZH0oYyxsLGEpLGQsZil9fShNYyxLMSxLMyhYcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gdDEoYyxsLGEpe2NvbnN0IGQ9WHIoKTtyZXR1cm4gQmMoZCxDMygpLGwpJiZQdShUcygpLFFhKCksZCxjLGwsZFtWb10sYSwhMCksdDF9ZnVuY3Rpb24gUzUoYyxsLGEpe2NvbnN0IGQ9WHIoKTtp''@;'; put 'put ''ZihCYyhkLEMzKCksbCkpe2NvbnN0IGY9VHMoKSxfPVFhKCk7UHUoZixfLGQsYyxsLFZTKHc5KGYuZGF0YSksXyxkKSxhLCEwKX1yZXR1cm4gUzV9Y29uc3QgYmY9dm9pZCAwO3ZhciBINj1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLGJmXSxbWyJBTSIsIlBNIl0sYmYsYmZdLFtbIlMi''@;'; put 'put ''LCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwi''@;'; put 'put ''VGgiLCJGciIsIlNhIl1dLGJmLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnki''@;'; put 'put ''LCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdXSxiZixbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2Qv''@;'; put 'put ''eXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDptbTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLGJmLCJ7MX0gJ2F0JyB7MH0iLGJmXSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJc''@;'; put 'put ''eGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwiI0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIHpNKGMpe2NvbnN0IGE9TWF0aC5mbG9vcihNYXRoLmFicyhjKSksZD1jLnRvU3Ry''@;'; put 'put ''aW5nKCkucmVwbGFjZSgvXlteLl0qXC4/LywiIikubGVuZ3RoO3JldHVybiAxPT09YSYmMD09PWQ/MTo1fV07bGV0ICRkPXt9O2Z1bmN0aW9uIEJsKGMpe2NvbnN0IGw9ZnVuY3Rpb24gRVIoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9X18o''@;'; put 'put ''bCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPV9fKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIEg2O3Rocm93IG5ldyBBcig3MDEsITEpfWZ1bmN0aW9uIF9fKGMpe3JldHVybiBjIGluICRkfHwoJGRbY109T2kubmcmJk9pLm5nLmNvbW1vbiYm''@;'; put 'put ''T2kubmcuY29tbW9uLmxvY2FsZXMmJk9pLm5nLmNvbW1vbi5sb2NhbGVzW2NdKSwkZFtjXX12YXIgcW89ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0''@;'; put 'put ''YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIsY1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0i''@;'; put 'put ''TW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3REYXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRp''@;'; put 'put ''bWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9scz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tj''@;'; put 'put ''LkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5jeU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0i''@;'; put 'put ''UGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30ocW98fHt9KTtjb25zdCBpcD0iZW4tVVMiO2xldCByZT1pcDtmdW5jdGlvbiB6cihjLGwsYSxkLGgpe2lmKGM9Ym8oYyksQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGY9MDtmPGMubGVuZ3RoO2YrKyl6cihjW2Zd''@;'; put 'put ''LGwsYSxkLGgpO2Vsc2V7Y29uc3QgZj1UcygpLF89WHIoKTtsZXQgVD1sZihjKT9jOmJvKGMucHJvdmlkZSksVz1RQyhjKTtjb25zdCBpZT1TYygpLGdlPTEwNDg1NzUmaWUucHJvdmlkZXJJbmRleGVzLHdlPWllLmRpcmVjdGl2ZVN0YXJ0LEVlPWllLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYo''@;'; put 'put ''bGYoYyl8fCFjLm11bHRpKXtjb25zdCBaZT1uZXcgUjQoVyxoLHR0KSxvdD1jaShULGwsaD9nZTpnZStFZSx3ZSk7LTE9PT1vdD8oVDkoSW0oaWUsXyksZixUKSxMcihmLGMsbC5sZW5ndGgpLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5w''@;'; put 'put ''cm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChaZSksXy5wdXNoKFplKSk6KGFbb3RdPVplLF9bb3RdPVplKX1lbHNle2NvbnN0IFplPWNpKFQsbCxnZStFZSx3ZSksb3Q9Y2koVCxsLGdlLGdlK0VlKSx5dD1vdD49MCYmYVtvdF07aWYoaCYmIXl0fHwhaCYmIShaZT49MCYmYVtaZV0p''@;'; put 'put ''KXtUOShJbShpZSxfKSxmLFQpO2NvbnN0IGt0PWZ1bmN0aW9uIFVvKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUjQoYyxhLHR0KTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCx4aShmLGgsZCYmIWEpLGZ9KGg/cG86Q28sYS5sZW5ndGgsaCxkLFcp''@;'; put 'put ''OyFoJiZ5dCYmKGFbb3RdLnByb3ZpZGVyRmFjdG9yeT1rdCksTHIoZixjLGwubGVuZ3RoLDApLGwucHVzaChUKSxpZS5kaXJlY3RpdmVTdGFydCsrLGllLmRpcmVjdGl2ZUVuZCsrLGgmJihpZS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChrdCksXy5wdXNoKGt0KX1lbHNlIExy''@;'; put 'put ''KGYsYyxaZT4tMT9aZTpvdCx4aShhW2g/b3Q6WmVdLFcsIWgmJmQpKTshaCYmZCYmeXQmJmFbb3RdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gTHIoYyxsLGEsZCl7Y29uc3QgaD1sZihsKSxmPWZ1bmN0aW9uIGU1KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7''@;'; put 'put ''Y29uc3QgVz0oZj9ibyhsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7aWYoVyl7Y29uc3QgaWU9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IGdlPWllLmluZGV4T2YoYSk7LTE9PT1nZT9pZS5wdXNoKGEsW2QsV10p''@;'; put 'put ''OmllW2dlKzFdLnB1c2goZCxXKX1lbHNlIGllLnB1c2goYSxXKX19fWZ1bmN0aW9uIHhpKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBjaShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJl''@;'; put 'put ''dHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIENvKGMsbCxhLGQpe3JldHVybiBWaSh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBwbyhjLGwsYSxkKXtjb25zdCBoPXRoaXMubXVsdGk7bGV0IGY7aWYodGhpcy5wcm92aWRlckZhY3Rvcnkpe2NvbnN0IF89dGhpcy5wcm92aWRlckZhY3RvcnkuY29t''@;'; put 'put ''cG9uZW50UHJvdmlkZXJzLFQ9UWgoYSxhW0JpXSx0aGlzLnByb3ZpZGVyRmFjdG9yeS5pbmRleCxkKTtmPVQuc2xpY2UoMCxfKSxWaShoLGYpO2ZvcihsZXQgVz1fO1c8VC5sZW5ndGg7VysrKWYucHVzaChUW1ddKX1lbHNlIGY9W10sVmkoaCxmKTtyZXR1cm4gZn1mdW5jdGlvbiBWaShjLGwp''@;'; put 'put ''e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKWwucHVzaCgoMCxjW2FdKSgpKTtyZXR1cm4gbH1mdW5jdGlvbiB0aShjLGw9W10pe3JldHVybiBhPT57YS5wcm92aWRlcnNSZXNvbHZlcj0oZCxoKT0+ZnVuY3Rpb24gYnIoYyxsLGEpe2NvbnN0IGQ9VHMoKTtpZihkLmZpcnN0Q3JlYXRlUGFz''@;'; put 'put ''cyl7Y29uc3QgaD1RYyhjKTt6cihhLGQuZGF0YSxkLmJsdWVwcmludCxoLCEwKSx6cihsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWNsYXNzIHpse31jbGFzcyBsY3t9Y2xhc3Mgd2YgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlz''@;'; put 'put ''Ll9wYXJlbnQ9YSx0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVtdLHRoaXMuZGVzdHJveUNicz1bXSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgR1ModGhpcyk7Y29uc3QgaD1IYyhsKTt0aGlzLl9ib290c3RyYXBDb21wb25lbnRzPVdkKGguYm9vdHN0cmFwKSx0aGlzLl9y''@;'; put 'put ''M0luamVjdG9yPVR2KGwsYSxbe3Byb3ZpZGU6emwsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6SzAsdXNlVmFsdWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9LC4uLmRdLHFhKGwpLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSksdGhpcy5fcjNJbmplY3Rvci5yZXNvbHZlSW5qZWN0''@;'; put 'put ''b3JJbml0aWFsaXplcnMoKSx0aGlzLmluc3RhbmNlPXRoaXMuX3IzSW5qZWN0b3IuZ2V0KGwpfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9yM0luamVjdG9yfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3IzSW5qZWN0b3I7IWwuZGVzdHJveWVkJiZsLmRlc3Ryb3koKSx0aGlzLmRlc3Ry''@;'; put 'put ''b3lDYnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuZGVzdHJveUNicz1udWxsfW9uRGVzdHJveShsKXt0aGlzLmRlc3Ryb3lDYnMucHVzaChsKX19Y2xhc3MgcWQgZXh0ZW5kcyBsY3tjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMubW9kdWxlVHlwZT1sfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHdm''@;'; put 'put ''KHRoaXMubW9kdWxlVHlwZSxsLFtdKX19Y2xhc3MgUTEgZXh0ZW5kcyB6bHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBHUyh0aGlzKSx0aGlzLmluc3RhbmNlPW51bGw7Y29uc3QgYT1uZXcgY3YoWy4uLmwucHJvdmlkZXJzLHtwcm92''@;'; put 'put ''aWRlOnpsLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOkswLHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfV0sbC5wYXJlbnR8fHM2KCksbC5kZWJ1Z05hbWUsbmV3IFNldChbImVudmlyb25tZW50Il0pKTt0aGlzLmluamVjdG9yPWEsbC5ydW5FbnZpcm9ubWVudEluaXRp''@;'; put 'put ''YWxpemVycyYmYS5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKX1kZXN0cm95KCl7dGhpcy5pbmplY3Rvci5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaW5qZWN0b3Iub25EZXN0cm95KGwpfX1mdW5jdGlvbiBBUihjLGwsYT1udWxsKXtyZXR1cm4gbmV3IFExKHtwcm92aWRlcnM6''@;'; put 'put ''YyxwYXJlbnQ6bCxkZWJ1Z05hbWU6YSxydW5FbnZpcm9ubWVudEluaXRpYWxpemVyczohMH0pLmluamVjdG9yfWxldCB4bGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs''@;'; put 'put ''b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPXFDKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/QVIoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51''@;'; put 'put ''bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz''@;'; put 'put ''LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX19cmV0dXJuIGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3IGMoYXIocTApKX0pLGN9KSgpO2Z1bmN0aW9uIHBZKGMpe2MuZ2V0U3RhbmRhbG9uZUluamVjdG9yPWw9PmwuZ2V0''@;'; put 'put ''KHhsZSkuZ2V0T3JDcmVhdGVTdGFuZGFsb25lSW5qZWN0b3IoYyl9ZnVuY3Rpb24gJHMoYyxsLGEpe2NvbnN0IGQ9TmMoKStjLGg9WHIoKTtyZXR1cm4gaFtkXT09PVpvP3ExKGgsZCxhP2wuY2FsbChhKTpsKCkpOmZ1bmN0aW9uIGY1KGMsbCl7cmV0dXJuIGNbbF19KGgsZCl9ZnVuY3Rpb24g''@;'; put 'put ''SjIoYyxsLGEsZCl7cmV0dXJuIHdZKFhyKCksTmMoKSxjLGwsYSxkKX1mdW5jdGlvbiBRMihjLGwsYSxkLGgpe3JldHVybiBDWShYcigpLE5jKCksYyxsLGEsZCxoKX1mdW5jdGlvbiB5XyhjLGwsYSxkLGgsZil7cmV0dXJuIFNZKFhyKCksTmMoKSxjLGwsYSxkLGgsZil9ZnVuY3Rpb24gV00o''@;'; put 'put ''YyxsLGEsZCxoLGYsXyl7cmV0dXJuIGZ1bmN0aW9uIE1ZKGMsbCxhLGQsaCxmLF8sVCxXKXtjb25zdCBpZT1sK2E7cmV0dXJuIG0wKGMsaWUsaCxmLF8sVCk/cTEoYyxpZSs0LFc/ZC5jYWxsKFcsaCxmLF8sVCk6ZChoLGYsXyxUKSk6d18oYyxpZSs0KX0oWHIoKSxOYygpLGMsbCxhLGQsaCxm''@;'; put 'put ''LF8pfWZ1bmN0aW9uIHdfKGMsbCl7Y29uc3QgYT1jW2xdO3JldHVybiBhPT09Wm8/dm9pZCAwOmF9ZnVuY3Rpb24gd1koYyxsLGEsZCxoLGYpe2NvbnN0IF89bCthO3JldHVybiBCYyhjLF8saCk/cTEoYyxfKzEsZj9kLmNhbGwoZixoKTpkKGgpKTp3XyhjLF8rMSl9ZnVuY3Rpb24gQ1koYyxs''@;'; put 'put ''LGEsZCxoLGYsXyl7Y29uc3QgVD1sK2E7cmV0dXJuIGdmKGMsVCxoLGYpP3ExKGMsVCsyLF8/ZC5jYWxsKF8saCxmKTpkKGgsZikpOndfKGMsVCsyKX1mdW5jdGlvbiBTWShjLGwsYSxkLGgsZixfLFQpe2NvbnN0IFc9bCthO3JldHVybiBUNihjLFcsaCxmLF8pP3ExKGMsVyszLFQ/ZC5jYWxs''@;'; put 'put ''KFQsaCxmLF8pOmQoaCxmLF8pKTp3XyhjLFcrMyl9ZnVuY3Rpb24gYmEoYyxsKXtjb25zdCBhPVRzKCk7bGV0IGQ7Y29uc3QgaD1jK3BzO2EuZmlyc3RDcmVhdGVQYXNzPyhkPWZ1bmN0aW9uIFZsZShjLGwpe2lmKGwpZm9yKGxldCBhPWwubGVuZ3RoLTE7YT49MDthLS0pe2NvbnN0IGQ9bFth''@;'; put 'put ''XTtpZihjPT09ZC5uYW1lKXJldHVybiBkfX0obCxhLnBpcGVSZWdpc3RyeSksYS5kYXRhW2hdPWQsZC5vbkRlc3Ryb3kmJihhLmRlc3Ryb3lIb29rcz8/PVtdKS5wdXNoKGgsZC5vbkRlc3Ryb3kpKTpkPWEuZGF0YVtoXTtjb25zdCBmPWQuZmFjdG9yeXx8KGQuZmFjdG9yeT1IMShkLnR5cGUp''@;'; put 'put ''KSxfPWRpKHR0KTt0cnl7Y29uc3QgVD1CMSghMSksVz1mKCk7cmV0dXJuIEIxKFQpLGZ1bmN0aW9uIEdMKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9KGEsWHIoKSxoLFcpLFd9ZmluYWxseXtkaShfKX19ZnVu''@;'; put 'put ''Y3Rpb24gVWwoYyxsLGEpe2NvbnN0IGQ9YytwcyxoPVhyKCksZj0kZShoLGQpO3JldHVybiBDXyhoLGQpP3dZKGgsTmMoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gTTUoYyxsLGEsZCl7Y29uc3QgaD1jK3BzLGY9WHIoKSxfPSRlKGYsaCk7cmV0dXJuIENf''@;'; put 'put ''KGYsaCk/Q1koZixOYygpLGwsXy50cmFuc2Zvcm0sYSxkLF8pOl8udHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gRFIoYyxsLGEsZCxoKXtjb25zdCBmPWMrcHMsXz1YcigpLFQ9JGUoXyxmKTtyZXR1cm4gQ18oXyxmKT9TWShfLE5jKCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9y''@;'; put 'put ''bShhLGQsaCl9ZnVuY3Rpb24gQ18oYyxsKXtyZXR1cm4gY1tCaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIElSKGMpe3JldHVybiBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgRXI9Y2xhc3MgemxlIGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLl9f''@;'; put 'put ''aXNBc3luYz1sfWVtaXQobCl7c3VwZXIubmV4dChsKX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLF89ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IFc9bDtoPVcubmV4dD8uYmluZChXKSxmPVcuZXJyb3I/LmJpbmQoVyksXz1XLmNvbXBsZXRlPy5i''@;'; put 'put ''aW5kKFcpfXRoaXMuX19pc0FzeW5jJiYoZj1JUihmKSxoJiYoaD1JUihoKSksXyYmKF89SVIoXykpKTtjb25zdCBUPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6X30pO3JldHVybiBsIGluc3RhbmNlb2YgZWUmJmwuYWRkKFQpLFR9fTtmdW5jdGlvbiBVbGUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgZWh7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlc3x8KHRoaXMuX2NoYW5nZXM9bmV3IEVyKX1jb25zdHJ1Y3RvcihsPSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGly''@;'; put 'put ''dHk9ITAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5sYXN0PXZvaWQgMDtjb25zdCBhPWVoLnByb3RvdHlwZTthW1N5bWJvbC5pdGVyYXRvcl18fChhW1N5bWJv''@;'; put 'put ''bC5pdGVyYXRvcl09VWxlKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1''@;'; put 'put ''Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7Y29uc3QgZD10aGlzO2QuZGlydHk9ITE7Y29uc3QgaD1mdW5jdGlvbiBwMChjKXtyZXR1cm4gYy5mbGF0KE51bWJlci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9u''@;'; put 'put ''IHoxKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShmKSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KGQuX3Jlc3VsdHMsaCxhKSkmJihkLl9yZXN1bHRz''@;'; put 'put ''PWgsZC5sZW5ndGg9aC5sZW5ndGgsZC5sYXN0PWhbdGhpcy5sZW5ndGgtMV0sZC5maXJzdD1oWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt0aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVt''@;'; put 'put ''aXQodGhpcyl9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwfWRlc3Ryb3koKXt0aGlzLmNoYW5nZXMuY29tcGxldGUoKSx0aGlzLmNoYW5nZXMudW5zdWJzY3JpYmUoKX19bGV0IHphPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLl9fTkdfRUxFTUVOVF9JRF9fPVdsZSxjfSkoKTtjb25zdCBabGU9''@;'; put 'put ''emEsWWxlPWNsYXNzIGV4dGVuZHMgWmxle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29u''@;'; put 'put ''dGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxudWxsKX1jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSxkKXtjb25zdCBfPXRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmll''@;'; put 'put ''dyxUPWI2KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsXyxsLDQwOTYmdGhpcy5fZGVjbGFyYXRpb25MVmlld1tEb10/NDA5NjoxNixudWxsLF8uZGVjbFROb2RlLG51bGwsbnVsbCxudWxsLGF8fG51bGwsZHx8bnVsbCk7VFtPMl09dGhpcy5fZGVjbGFyYXRpb25MVmlld1t0aGlzLl9kZWNsYXJh''@;'; put 'put ''dGlvblRDb250YWluZXIuaW5kZXhdO2NvbnN0IGllPXRoaXMuX2RlY2xhcmF0aW9uTFZpZXdbaHVdO3JldHVybiBudWxsIT09aWUmJihUW2h1XT1pZS5jcmVhdGVFbWJlZGRlZFZpZXcoXykpLFZ2KF8sVCxsKSxuZXcgZDUoVCl9fTtmdW5jdGlvbiBXbGUoKXtyZXR1cm4gR00oU2MoKSxYcigp''@;'; put 'put ''KX1mdW5jdGlvbiBHTShjLGwpe3JldHVybiA0JmMudHlwZT9uZXcgWWxlKGwsYyxZZChjLGwpKTpudWxsfWxldCBhcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5fX05HX0VMRU1FTlRfSURfXz1RbGUsY30pKCk7ZnVuY3Rpb24gUWxlKCl7cmV0dXJuIElZKFNjKCksWHIoKSl9Y29uc3QgZWNl''@;'; put 'put ''PWFzLFRZPWNsYXNzIGV4dGVuZHMgZWNle2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBZZCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1n''@;'; put 'put ''ZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IHgzKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9QTkodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoWHcobCkpe2NvbnN0IGE9TTMobCx0aGlzLl9ob3N0TFZpZXcp''@;'; put 'put ''LGQ9QjIobCk7cmV0dXJuIG5ldyB4MyhhW0JpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyB4MyhudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPURZKHRoaXMuX2xDb250YWlu''@;'; put 'put ''ZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLXJjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVj''@;'; put 'put ''dG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoVCxoLGZhbHNlKSxUfWNyZWF0ZUNvbXBvbmVudChsLGEsZCxoLGYpe2NvbnN0IF89bCYmIWZ1bmN0aW9uIGVmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjfShsKTtsZXQgVDtpZihfKVQ9YTtlbHNle2NvbnN0IGV0PWF8fHt9O1Q9ZXQuaW5kZXgsZD1ldC5pbmplY3RvcixoPWV0LnByb2plY3RhYmxlTm9kZXMsZj1ldC5lbnZpcm9ubWVudEluamVjdG9yfHxldC5uZ01vZHVsZVJlZn1jb25zdCBXPV8/bDpuZXcgaDUoUW8obCkpLGllPWR8fHRo''@;'; put 'put ''aXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PVcubmdNb2R1bGUpe2NvbnN0IHl0PShfP2llOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChxMCxudWxsKTt5dCYmKGY9eXQpfVFvKFcuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IFplPVcuY3JlYXRlKGllLGgsbnVsbCxmKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbnNlcnRJbXBsKFplLmhvc3RWaWV3LFQsZmFsc2UpLFplfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydEltcGwobCxhLCExKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3LGY9aFtCaV07aWYoZnVuY3Rpb24gVW4oYyl7cmV0dXJuIGljKGNbdWFdKX0oaCkp''@;'; put 'put ''e2NvbnN0IFc9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09Vyl0aGlzLmRldGFjaChXKTtlbHNle2NvbnN0IGllPWhbdWFdLGdlPW5ldyBUWShpZSxpZVt6b10saWVbdWFdKTtnZS5kZXRhY2goZ2UuaW5kZXhPZihsKSl9fWNvbnN0IF89dGhpcy5fYWRqdXN0SW5kZXgoYSksVD10aGlzLl9sQ29u''@;'; put 'put ''dGFpbmVyO2lmKGZ1bmN0aW9uIGRhKGMsbCxhLGQpe2NvbnN0IGg9cmMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0xXVtYYV09bCksZDxmLXJjPyhsW1hhXT1hW2hdLCQwKGEscmMrZCxsKSk6KGEucHVzaChsKSxsW1hhXT1udWxsKSxsW3VhXT1hO2NvbnN0IF89bFtPMl07bnVsbCE9PV8mJmEh''@;'; put 'put ''PT1fJiZmdW5jdGlvbiBEWihjLGwpe2NvbnN0IGE9Y1tIMl07bFtKYV0hPT1sW3VhXVt1YV1bSmFdJiYoY1t1bV09ITApLG51bGw9PT1hP2NbSDJdPVtsXTphLnB1c2gobCl9KF8sbCk7Y29uc3QgVD1sW2h1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMpLGxbRG9dfD0xMjh9KGYsaCxULF8p''@;'; put 'put ''LCFkKXtjb25zdCBXPVk5KF8sVCksaWU9aFtWb10sZ2U9SDMoaWUsVFtkMF0pO251bGwhPT1nZSYmZnVuY3Rpb24gakQoYyxsLGEsZCxoLGYpe2RbSGldPWgsZFt6b109bCxHNChjLGQsYSwxLGgsZil9KGYsVFt6b10saWUsaCxnZSxXKX1yZXR1cm4gbC5hdHRhY2hUb1ZpZXdDb250YWluZXJS''@;'; put 'put ''ZWYoKSwkMChSUihUKSxfLGwpLGx9bW92ZShsLGEpe3JldHVybiB0aGlzLmluc2VydChsLGEpfWluZGV4T2YobCl7Y29uc3QgYT1EWSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWE/YS5pbmRleE9mKGwpOi0xfXJlbW92ZShsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGws''@;'; put 'put ''LTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtkJiYoUG0oUlIodGhpcy5fbENvbnRhaW5lciksYSksS20oZFtCaV0sZCkpfWRldGFjaChsKXtjb25zdCBhPXRoaXMuX2FkanVzdEluZGV4KGwsLTEpLGQ9c2YodGhpcy5fbENvbnRhaW5lcixhKTtyZXR1cm4gZCYmbnVsbCE9UG0oUlIodGhp''@;'; put 'put ''cy5fbENvbnRhaW5lciksYSk/bmV3IGQ1KGQpOm51bGx9X2FkanVzdEluZGV4KGwsYT0wKXtyZXR1cm4gbD8/dGhpcy5sZW5ndGgrYX19O2Z1bmN0aW9uIERZKGMpe3JldHVybiBjWzhdfWZ1bmN0aW9uIFJSKGMpe3JldHVybiBjWzhdfHwoY1s4XT1bXSl9ZnVuY3Rpb24gSVkoYyxsKXtsZXQg''@;'; put 'put ''YTtjb25zdCBkPWxbYy5pbmRleF07cmV0dXJuIGljKGQpP2E9ZDooYT1QUyhkLGwsbnVsbCxjKSxsW2MuaW5kZXhdPWEsUzYobCxhKSksTFkoYSxsLGMsZCksbmV3IFRZKGEsYyxsKX1sZXQgTFk9ZnVuY3Rpb24gUlkoYyxsLGEsZCl7aWYoY1tkMF0pcmV0dXJuO2xldCBoO2g9OCZhLnR5cGU/''@;'; put 'put ''X2EoZCk6ZnVuY3Rpb24gdGNlKGMsbCl7Y29uc3QgYT1jW1ZvXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1IbChsLGMpO3JldHVybiBZMShhLEgzKGEsaCksZCxmdW5jdGlvbiBaRChjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbZDBdPWh9O2NsYXNz''@;'; put 'put ''IE9Se2NvbnN0cnVjdG9yKGwpe3RoaXMucXVlcnlMaXN0PWwsdGhpcy5tYXRjaGVzPW51bGx9Y2xvbmUoKXtyZXR1cm4gbmV3IE9SKHRoaXMucXVlcnlMaXN0KX1zZXREaXJ0eSgpe3RoaXMucXVlcnlMaXN0LnNldERpcnR5KCl9fWNsYXNzIFBSe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVl''@;'; put 'put ''cmllcz1sfWNyZWF0ZUVtYmVkZGVkVmlldyhsKXtjb25zdCBhPWwucXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1udWxsIT09bC5jb250ZW50UXVlcmllcz9sLmNvbnRlbnRRdWVyaWVzWzBdOmEubGVuZ3RoLGg9W107Zm9yKGxldCBmPTA7ZjxkO2YrKyl7Y29uc3QgXz1hLmdldEJ5SW5k''@;'; put 'put ''ZXgoZik7aC5wdXNoKHRoaXMucXVlcmllc1tfLmluZGV4SW5EZWNsYXJhdGlvblZpZXddLmNsb25lKCkpfXJldHVybiBuZXcgUFIoaCl9cmV0dXJuIG51bGx9aW5zZXJ0VmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRldGFjaFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJp''@;'; put 'put ''ZXNXaXRoTWF0Y2hlcyhsKX1kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKW51bGwhPT1OWShsLGEpLm1hdGNoZXMmJnRoaXMucXVlcmllc1thXS5zZXREaXJ0eSgpfX1jbGFzcyBPWXtjb25zdHJ1Y3RvcihsLGEsZD1udWxs''@;'; put 'put ''KXt0aGlzLnByZWRpY2F0ZT1sLHRoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZH19Y2xhc3MgRlJ7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9ZWxlbWVudFN0YXJ0KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0uZWxlbWVu''@;'; put 'put ''dFN0YXJ0KGwsYSl9ZWxlbWVudEVuZChsKXtmb3IobGV0IGE9MDthPHRoaXMucXVlcmllcy5sZW5ndGg7YSsrKXRoaXMucXVlcmllc1thXS5lbGVtZW50RW5kKGwpfWVtYmVkZGVkVFZpZXcobCl7bGV0IGE9bnVsbDtmb3IobGV0IGQ9MDtkPHRoaXMubGVuZ3RoO2QrKyl7Y29uc3QgaD1udWxs''@;'; put 'put ''IT09YT9hLmxlbmd0aDowLGY9dGhpcy5nZXRCeUluZGV4KGQpLmVtYmVkZGVkVFZpZXcobCxoKTtmJiYoZi5pbmRleEluRGVjbGFyYXRpb25WaWV3PWQsbnVsbCE9PWE/YS5wdXNoKGYpOmE9W2ZdKX1yZXR1cm4gbnVsbCE9PWE/bmV3IEZSKGEpOm51bGx9dGVtcGxhdGUobCxhKXtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS50ZW1wbGF0ZShsLGEpfWdldEJ5SW5kZXgobCl7cmV0dXJuIHRoaXMucXVlcmllc1tsXX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMucXVlcmllcy5sZW5ndGh9dHJhY2sobCl7dGhpcy5xdWVyaWVzLnB1c2go''@;'; put 'put ''bCl9fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYT0tMSl7dGhpcy5tZXRhZGF0YT1sLHRoaXMubWF0Y2hlcz1udWxsLHRoaXMuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz0tMSx0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSExLHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSEwLHRoaXMuX2RlY2xhcmF0''@;'; put 'put ''aW9uTm9kZUluZGV4PWF9ZWxlbWVudFN0YXJ0KGwsYSl7dGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGEpJiZ0aGlzLm1hdGNoVE5vZGUobCxhKX1lbGVtZW50RW5kKGwpe3RoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4PT09bC5pbmRleCYmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlPSExKX10ZW1w''@;'; put 'put ''bGF0ZShsLGEpe3RoaXMuZWxlbWVudFN0YXJ0KGwsYSl9ZW1iZWRkZWRUVmlldyhsLGEpe3JldHVybiB0aGlzLmlzQXBwbHlpbmdUb05vZGUobCk/KHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITAsdGhpcy5hZGRNYXRjaCgtbC5pbmRleCxhKSxuZXcgSFIodGhpcy5tZXRhZGF0YSkpOm51bGx9''@;'; put 'put ''aXNBcHBseWluZ1RvTm9kZShsKXtpZih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZSYmMSE9KDEmdGhpcy5tZXRhZGF0YS5mbGFncykpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylk''@;'; put 'put ''PWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7''@;'; put 'put ''aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGljZShhLGYpKSx0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGYsITEsITEpKX1lbHNlIGQ9PT16YT80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24o''@;'; put 'put ''bCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTG0oYSxsLGQsITEsITEpKX1tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Tml8fGg9PT1hc3x8aD09''@;'; put 'put ''PXphJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1MbShhLGwsaCwhMSwhMSk7bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRj''@;'; put 'put ''aGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBpY2UoYyxsKXtjb25zdCBhPWMubG9jYWxOYW1lcztpZihudWxsIT09YSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpaWYoYVtkXT09PWwpcmV0dXJuIGFbZCsxXTtyZXR1cm4gbnVsbH1m''@;'; put 'put ''dW5jdGlvbiBzY2UoYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIG9jZShjLGwpe3JldHVybiAxMSZjLnR5cGU/WWQoYyxsKTo0JmMudHlwZT9HTShjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIGFjZShjLGwsYSl7cmV0dXJuIGE9PT1OaT9ZZChsLGMpOmE9PT16YT9HTShs''@;'; put 'put ''LGMpOmE9PT1hcz9JWShsLGMpOnZvaWQgMH0oYyxsLGQpOlFoKGMsY1tCaV0sYSxsKX1mdW5jdGlvbiBQWShjLGwsYSxkKXtjb25zdCBoPWxbaHVdLnF1ZXJpZXNbZF07aWYobnVsbD09PWgubWF0Y2hlcyl7Y29uc3QgZj1jLmRhdGEsXz1hLm1hdGNoZXMsVD1bXTtmb3IobGV0IFc9MDtXPF8u''@;'; put 'put ''bGVuZ3RoO1crPTIpe2NvbnN0IGllPV9bV107VC5wdXNoKGllPDA/bnVsbDpzY2UobCxmW2llXSxfW1crMV0sYS5tZXRhZGF0YS5yZWFkKSl9aC5tYXRjaGVzPVR9cmV0dXJuIGgubWF0Y2hlc31mdW5jdGlvbiBOUihjLGwsYSxkKXtjb25zdCBoPWMucXVlcmllcy5nZXRCeUluZGV4KGEpLGY9''@;'; put 'put ''aC5tYXRjaGVzO2lmKG51bGwhPT1mKXtjb25zdCBfPVBZKGMsbCxoLGEpO2ZvcihsZXQgVD0wO1Q8Zi5sZW5ndGg7VCs9Mil7Y29uc3QgVz1mW1RdO2lmKFc+MClkLnB1c2goX1tULzJdKTtlbHNle2NvbnN0IGllPWZbVCsxXSxnZT1sWy1XXTtmb3IobGV0IHdlPXJjO3dlPGdlLmxlbmd0aDt3''@;'; put 'put ''ZSsrKXtjb25zdCBFZT1nZVt3ZV07RWVbTzJdPT09RWVbdWFdJiZOUihFZVtCaV0sRWUsaWUsZCl9aWYobnVsbCE9PWdlW0gyXSl7Y29uc3Qgd2U9Z2VbSDJdO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdO05SKFplW0JpXSxaZSxpZSxkKX19fX19cmV0''@;'; put 'put ''dXJuIGR9ZnVuY3Rpb24gc2koYyl7Y29uc3QgbD1YcigpLGE9VHMoKSxkPUJ3KCk7QzkoZCsxKTtjb25zdCBoPU5ZKGEsZCk7aWYoYy5kaXJ0eSYmZnVuY3Rpb24gTHQoYyl7cmV0dXJuIDQ9PSg0JmNbRG9dKX0obCk9PT0oMj09KDImaC5tZXRhZGF0YS5mbGFncykpKXtpZihudWxsPT09aC5t''@;'; put 'put ''YXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1oLmNyb3NzZXNOZ1RlbXBsYXRlP05SKGEsbCxkLFtdKTpQWShhLGwsaCxkKTtjLnJlc2V0KGYsZGYpLGMubm90aWZ5T25DaGFuZ2VzKCl9cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUm8oYyxsLGEpe2NvbnN0IGQ9VHMoKTtkLmZp''@;'; put 'put ''cnN0Q3JlYXRlUGFzcyYmKEhZKGQsbmV3IE9ZKGMsbCxhKSwtMSksMj09KDImbCkmJihkLnN0YXRpY1ZpZXdRdWVyaWVzPSEwKSksRlkoZCxYcigpLGwpfWZ1bmN0aW9uIElvKGMsbCxhLGQpe2NvbnN0IGg9VHMoKTtpZihoLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgZj1TYygpO0hZKGgsbmV3''@;'; put 'put ''IE9ZKGwsYSxkKSxmLmluZGV4KSxmdW5jdGlvbiBjY2UoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRRdWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLDI9PSgyJmEpJiYo''@;'; put 'put ''aC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9RlkoaCxYcigpLGEpfWZ1bmN0aW9uIGFpKCl7cmV0dXJuIGZ1bmN0aW9uIGxjZShjLGwpe3JldHVybiBjW2h1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oWHIoKSxCdygpKX1mdW5jdGlvbiBGWShjLGwsYSl7Y29uc3QgZD1uZXcgZWgoND09KDQm''@;'; put 'put ''YSkpOyhmdW5jdGlvbiBWSShjLGwsYSxkKXtjb25zdCBoPUhTKGwpO2gucHVzaChhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmTlMoYykucHVzaChkLGgubGVuZ3RoLTEpfSkoYyxsLGQsZC5kZXN0cm95KSxudWxsPT09bFtodV0mJihsW2h1XT1uZXcgUFIpLGxbaHVdLnF1ZXJpZXMucHVzaChuZXcg''@;'; put 'put ''T1IoZCkpfWZ1bmN0aW9uIEhZKGMsbCxhKXtudWxsPT09Yy5xdWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBGUiksYy5xdWVyaWVzLnRyYWNrKG5ldyBIUihsLGEpKX1mdW5jdGlvbiBOWShjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiBFYyhjLGwpe3JldHVybiBH''@;'; put 'put ''TShjLGwpfWNvbnN0IFpSPW5ldyBNaSgiQXBwbGljYXRpb24gSW5pdGlhbGl6ZXIiKTtsZXQgWVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29s''@;'; put 'put ''dmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1GaShaUix7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZih2NShm''@;'; put 'put ''KSlhLnB1c2goZik7ZWxzZSBpZihwTShmKSl7Y29uc3QgXz1uZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOld9KX0pO2EucHVzaChfKX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigo''@;'; put 'put ''KT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3''@;'; put 'put ''NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLHRXPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCk7Y29uc3QgS2Q9bmV3IE1pKCJMb2NhbGVJZCIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PkZpKEtkLG5zLk9wdGlvbmFsfG5zLlNraXBTZWxmKXx8ZnVuY3Rpb24gRGNlKCl7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxpcH0oKX0pO2xldCBxTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy50YXNrSWQ9MCx0aGlzLnBlbmRpbmdUYXNrcz1uZXcgU2V0LHRoaXMuaGFzUGVuZGluZ1Rhc2tzPW5ldyBUZSghMSl9YWRkKCl7dGhp''@;'; put 'put ''cy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLmhhc1BlbmRpbmdU''@;'; put 'put ''YXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJjZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IG5XPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJu''@;'; put 'put ''IG5ldyBxZChhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9V2QoSGMoYSku''@;'; put 'put ''ZGVjbGFyYXRpb25zKS5yZWR1Y2UoKF8sVCk9Pntjb25zdCBXPVFvKFQpO3JldHVybiBXJiZfLnB1c2gobmV3IGg1KFcpKSxffSxbXSk7cmV0dXJuIG5ldyBSY2UoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5j''@;'; put 'put ''b21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBvVyguLi5jKXt9Y2xhc3MgTm97Y29uc3RydWN0b3Ioe2VuYWJsZUxvbmdTdGFja1RyYWNlOmw9ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjphPSExLHNob3VsZENvYWxlc2NlUnVu''@;'; put 'put ''Q2hhbmdlRGV0ZWN0aW9uOmQ9ITF9KXtpZih0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5pc1N0YWJsZT0hMCx0aGlzLm9uVW5zdGFibGU9bmV3IEVyKCExKSx0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyKCExKSx0aGlz''@;'; put 'put ''Lm9uU3RhYmxlPW5ldyBFcighMSksdGhpcy5vbkVycm9yPW5ldyBFcighMSksdHlwZW9mIFpvbmU+InUiKXRocm93IG5ldyBBcig5MDgsITEpO1pvbmUuYXNzZXJ0Wm9uZVBhdGNoZWQoKTtjb25zdCBoPXRoaXM7aC5fbmVzdGluZz0wLGguX291dGVyPWguX2lubmVyPVpvbmUuY3VycmVudCxa''@;'; put 'put ''b25lLlRhc2tUcmFja2luZ1pvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhuZXcgWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYykpLGwmJlpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsoWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVj''@;'; put 'put ''KSksaC5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uPSFkJiZhLGguc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb249ZCxoLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZD0tMSxoLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZT1mdW5jdGlvbiBGY2UoKXtjb25z''@;'; put 'put ''dCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBPaS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9T2lbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9T2lbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwm''@;'; put 'put ''JmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2Vs''@;'; put 'put ''QW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIFZjZShjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIE5jZShjKXtjLmlzQ2hlY2tTdGFibGVSdW5uaW5nfHwtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkfHwoYy5sYXN0UmVx''@;'; put 'put ''dWVzdEFuaW1hdGlvbkZyYW1lSWQ9Yy5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWUuY2FsbChPaSwoKT0+e2MuZmFrZVRvcEV2ZW50VGFza3x8KGMuZmFrZVRvcEV2ZW50VGFzaz1ab25lLnJvb3Quc2NoZWR1bGVFdmVudFRhc2soImZha2VUb3BFdmVudFRhc2siLCgpPT57Yy5sYXN0UmVx''@;'; put 'put ''dWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsR1IoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMCxXUihjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSExfSx2b2lkIDAsKCk9Pnt9LCgpPT57fSkpLGMuZmFrZVRvcEV2ZW50VGFzay5pbnZva2UoKX0pLEdSKGMpKX0oYyl9O2MuX2lubmVyPWMu''@;'; put 'put ''X2lubmVyLmZvcmsoe25hbWU6ImFuZ3VsYXIiLHByb3BlcnRpZXM6e2lzQW5ndWxhclpvbmU6ITB9LG9uSW52b2tlVGFzazooYSxkLGgsZixfLFQpPT57dHJ5e3JldHVybiBzVyhjKSxhLmludm9rZVRhc2soaCxmLF8sVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0''@;'; put 'put ''ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSxhVyhjKX19LG9uSW52b2tlOihhLGQsaCxmLF8sVCxXKT0+e3RyeXtyZXR1cm4gc1coYyksYS5pbnZva2UoaCxmLF8sVCxXKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVz''@;'; put 'put ''Y2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxhVyhjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssR1IoYyksV1IoYykpOiJtYWNyb1Rhc2siPT1m''@;'; put 'put ''LmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJa''@;'; put 'put ''b25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighTm8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IEFyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5n''@;'; put 'put ''dWxhclpvbmUoKXtpZihOby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgQXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcixfPWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2''@;'; put 'put ''ZW50OiAiK2gsbCxIY2Usb1csb1cpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKF8sYSxkKX1maW5hbGx5e2YuY2FuY2VsVGFzayhfKX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9v''@;'; put 'put ''dXRlci5ydW4obCl9fWNvbnN0IEhjZT17fTtmdW5jdGlvbiBXUihjKXtpZigwPT1jLl9uZXN0aW5nJiYhYy5oYXNQZW5kaW5nTWljcm90YXNrcyYmIWMuaXNTdGFibGUpdHJ5e2MuX25lc3RpbmcrKyxjLm9uTWljcm90YXNrRW1wdHkuZW1pdChudWxsKX1maW5hbGx5e2lmKGMuX25lc3Rpbmct''@;'; put 'put ''LSwhYy5oYXNQZW5kaW5nTWljcm90YXNrcyl0cnl7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vblN0YWJsZS5lbWl0KG51bGwpKX1maW5hbGx5e2MuaXNTdGFibGU9ITB9fX1mdW5jdGlvbiBHUihjKXtjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSEhKGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tz''@;'; put 'put ''fHwoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9ufHxjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uKSYmLTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCl9ZnVuY3Rpb24gc1coYyl7Yy5fbmVzdGluZysrLGMuaXNTdGFibGUmJihjLmlzU3RhYmxl''@;'; put 'put ''PSExLGMub25VbnN0YWJsZS5lbWl0KG51bGwpKX1mdW5jdGlvbiBhVyhjKXtjLl9uZXN0aW5nLS0sV1IoYyl9Y2xhc3MgQmNle2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhp''@;'; put 'put ''cy5vblVuc3RhYmxlPW5ldyBFcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IEVyLHRoaXMub25TdGFibGU9bmV3IEVyLHRoaXMub25FcnJvcj1uZXcgRXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0''@;'; put 'put ''c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fWNvbnN0IGxXPW5ldyBNaSgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpjV30pO2Z1bmN0aW9uIGNXKCl7Y29uc3QgYz1GaShObyk7bGV0IGw9ITA7cmV0dXJuIGlzKG5l''@;'; put 'put ''dyBLZShoPT57bD1jLmlzU3RhYmxlJiYhYy5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIWMuaGFzUGVuZGluZ01pY3JvdGFza3MsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dChsKSxoLmNvbXBsZXRlKCl9KX0pLG5ldyBLZShoPT57bGV0IGY7Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+''@;'; put 'put ''e2Y9Yy5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PnshbCYmIWMuaGFzUGVuZGluZ01hY3JvdGFza3MmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYobD0hMCxoLm5leHQoITApKX0pfSl9KTtjb25zdCBfPWMu''@;'; put 'put ''b25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntOby5hc3NlcnRJbkFuZ3VsYXJab25lKCksbCYmKGw9ITEsYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2gubmV4dCghMSl9KSl9KTtyZXR1cm4oKT0+e2YudW5zdWJzY3JpYmUoKSxfLnVuc3Vic2NyaWJlKCl9fSkucGlwZSgkYSgpKSl9Y29uc3Qg''@;'; put 'put ''dVc9bmV3IE1pKCIiKSxLTT1uZXcgTWkoIiIpO2xldCBLUiwkUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2RpZFdvcms9ITEsdGhp''@;'; put 'put ''cy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLEtSfHwoZnVuY3Rpb24gamNlKGMpe0tSPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1''@;'; put 'put ''Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pv''@;'; put 'put ''bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57Tm8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHko''@;'; put 'put ''KX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9kaWRXb3JrPSEwLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5f''@;'; put 'put ''cGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10''@;'; put 'put ''aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtpZih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2Fs''@;'; put 'put ''bGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IodGhpcy5fZGlkV29yayl9dGhpcy5fZGlkV29yaz0hMX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRh''@;'; put 'put ''dGVDYnx8IWQudXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSksdGhpcy5fZGlkV29yaz0hMH19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMudGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3Vy''@;'; put 'put ''Y2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYmKGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKF89Pl8u''@;'; put 'put ''dGltZW91dElkIT09ZiksYSh0aGlzLl9kaWRXb3JrLHRoaXMuZ2V0UGVuZGluZ1Rhc2tzKCkpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZihoJiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8nKTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0''@;'; put 'put ''aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o''@;'; put 'put ''YSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSxhcihxUiksYXIoS00pKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxxUj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24o''@;'; put 'put ''YSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lzdGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygp''@;'; put 'put ''e3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIEtSPy5maW5kVGVzdGFi''@;'; put 'put ''aWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSksY30pKCksc3A9bnVsbDtjb25z''@;'; put 'put ''dCBkVz1uZXcgTWkoIkFsbG93TXVsdGlwbGVUb2tlbiIpLFhSPW5ldyBNaSgiUGxhdGZvcm1EZXN0cm95TGlzdGVuZXJzIiksSlI9bmV3IE1pKCJhcHBCb290c3RyYXBMaXN0ZW5lciIpO2NsYXNzIGZXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uYW1lPWwsdGhpcy50b2tlbj1hfX1mdW5jdGlv''@;'; put 'put ''biBnVyhjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IE1pKGQpO3JldHVybihmPVtdKT0+e2xldCBfPVFSKCk7aWYoIV98fF8uaW5qZWN0b3IuZ2V0KGRXLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rp''@;'; put 'put ''b24gWmNlKGMpe2lmKHNwJiYhc3AuZ2V0KGRXLCExKSl0aHJvdyBuZXcgQXIoNDAwLCExKTsoZnVuY3Rpb24gaFcoKXshZnVuY3Rpb24gZjkoYyl7THU9Y30oKCk9Pnt0aHJvdyBuZXcgQXIoNjAwLCExKX0pfSkoKSxzcD1jO2NvbnN0IGw9Yy5nZXQodlcpOyhmdW5jdGlvbiBwVyhjKXtjLmdl''@;'; put 'put ''dChlUyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9KGZ1bmN0aW9uIG1XKGM9W10sbCl7cmV0dXJuIEVhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6dDUsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6WFIsdXNlVmFsdWU6bmV3IFNldChbKCk9PnNwPW51bGxd''@;'; put 'put ''KX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9uIFdjZShjKXtjb25zdCBsPVFSKCk7aWYoIWwpdGhyb3cgbmV3IEFyKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIFFSKCl7cmV0dXJuIHNwPy5nZXQodlcpPz9udWxsfWxldCB2Vz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBHY2UoYz0iem9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9u''@;'; put 'put ''ZXcgQmNlOiJ6b25lLmpzIj09PWM/bmV3IE5vKGwpOmN9KGQ/Lm5nWm9uZSxmdW5jdGlvbiBfVyhjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENvYWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVu''@;'; put 'put ''Q2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigoKT0+e2NvbnN0IGY9ZnVuY3Rpb24gYl8oYyxsLGEp''@;'; put 'put ''e3JldHVybiBuZXcgd2YoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBTVyhjKXtyZXR1cm5be3Byb3ZpZGU6Tm8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpRNCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShxY2Use29wdGlvbmFsOiEwfSk7''@;'; put 'put ''cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6Q1csdXNlRmFjdG9yeTokY2V9LHtwcm92aWRlOmxXLHVzZUZhY3Rvcnk6Y1d9XX0oKCk9PmgpKSxfPWYuaW5qZWN0b3IuZ2V0KGhmLG51bGwpO3JldHVybiBoLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgVD1oLm9uRXJy''@;'; put 'put ''b3Iuc3Vic2NyaWJlKHtuZXh0Olc9PntfLmhhbmRsZUVycm9yKFcpfX0pO2Yub25EZXN0cm95KCgpPT57WE0odGhpcy5fbW9kdWxlcyxmKSxULnVuc3Vic2NyaWJlKCl9KX0pLGZ1bmN0aW9uIGJXKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIHY1KGQpP2QuY2F0Y2goaD0+e3Rocm93''@;'; put 'put ''IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fShfLGgsKCk9Pntjb25zdCBUPWYuaW5qZWN0b3IuZ2V0KFlSKTtyZXR1cm4gVC5ydW5Jbml0aWFs''@;'; put 'put ''aXplcnMoKSxULmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBwZShjKXtmcihjLCJFeHBlY3RlZCBsb2NhbGVJZCB0byBiZSBkZWZpbmVkIiksInN0cmluZyI9PXR5cGVvZiBjJiYocmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoS2Qs''@;'; put 'put ''aXApfHxpcCksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPXlXKHt9LGQpO3JldHVybiBmdW5jdGlvbiB6Y2UoYyxsLGEpe2NvbnN0IGQ9bmV3IHFkKGEpO3JldHVybiBQcm9taXNlLnJlc29sdmUoZCl9KDAsMCxhKS50''@;'; put 'put ''aGVuKGY9PnRoaXMuYm9vdHN0cmFwTW9kdWxlRmFjdG9yeShmLGgpKX1fbW9kdWxlRG9Cb290c3RyYXAoYSl7Y29uc3QgZD1hLmluamVjdG9yLmdldCh4NSk7aWYoYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5sZW5ndGg+MClhLl9ib290c3RyYXBDb21wb25lbnRzLmZvckVhY2goaD0+ZC5ib290''@;'; put 'put ''c3RyYXAoaCkpO2Vsc2V7aWYoIWEuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcCl0aHJvdyBuZXcgQXIoLTQwMywhMSk7YS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKGQpfXRoaXMuX21vZHVsZXMucHVzaChhKX1vbkRlc3Ryb3koYSl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpfWdldCBp''@;'; put 'put ''bmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyBBcig0MDQsITEpO3RoaXMuX21vZHVsZXMuc2xpY2UoKS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goZD0+ZCgp''@;'; put 'put ''KTtjb25zdCBhPXRoaXMuX2luamVjdG9yLmdldChYUixudWxsKTthJiYoYS5mb3JFYWNoKGQ9PmQoKSksYS5jbGVhcigpKSx0aGlzLl9kZXN0cm95ZWQ9ITB9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pLGN9KSgpO2Z1bmN0aW9uIHlXKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoeVcsYyk6ey4uLmMsLi4ubH19''@;'; put 'put ''bGV0IHg1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmluZ1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFu''@;'; put 'put ''ZGxlcj1GaShDVyksdGhpcy56b25lSXNTdGFibGU9RmkobFcpLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9RmkocU0pLmhhc1BlbmRpbmdUYXNrcy5waXBlKFNhKGE9PmE/V2koITEpOnRoaXMuem9uZUlzU3RhYmxlKSxmdW5jdGlvbiBG''@;'; put 'put ''aChjLGw9T2Upe3JldHVybiBjPWM/P0V1LFhlKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShVZShkLF89Pntjb25zdCBUPWwoXyk7KGZ8fCFjKGgsVCkpJiYoZj0hMSxoPVQsZC5uZXh0KF8pKX0pKX0pfSgpLCRhKCkpLHRoaXMuX2luamVjdG9yPUZpKHEwKX1nZXQgZGVzdHJveWVk''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgY1M7aWYoIXRoaXMuX2luamVjdG9yLmdldChZUikuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBJZChjKXtjb25zdCBs''@;'; put 'put ''PVFvKGMpfHxLYShjKXx8UmwoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBBcig0MDUsITEpO2xldCBfO189aD9hOnRoaXMuX2luamVjdG9yLmdldChLMCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKF8uY29tcG9u''@;'; put 'put ''ZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBVY2UoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfShfKT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KHpsKSxpZT1fLmNyZWF0ZShFYS5OVUxMLFtdLGR8fF8uc2VsZWN0b3IsVCksZ2U9aWUubG9jYXRpb24ubmF0aXZlRWxlbWVudCx3ZT1p''@;'; put 'put ''ZS5pbmplY3Rvci5nZXQodVcsbnVsbCk7cmV0dXJuIHdlPy5yZWdpc3RlckFwcGxpY2F0aW9uKGdlKSxpZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoaWUuaG9zdFZpZXcpLFhNKHRoaXMuY29tcG9uZW50cyxpZSksd2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihnZSl9KSx0aGlz''@;'; put 'put ''Ll9sb2FkQ29tcG9uZW50KGllKSxpZX10aWNrKCl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IEFyKDEwMSwhMSk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwO2ZvcihsZXQgYSBvZiB0aGlzLl92aWV3cylhLmRldGVjdENoYW5nZXMoKX1jYXRjaChhKXt0aGlzLmludGVybmFsRXJy''@;'; put 'put ''b3JIYW5kbGVyKGEpfWZpbmFsbHl7dGhpcy5fcnVubmluZ1RpY2s9ITF9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2NvbnN0IGQ9YTtYTSh0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21B''@;'; put 'put ''cHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoSlIsW10pO2QucHVzaCguLi50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMpLGQuZm9y''@;'; put 'put ''RWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhp''@;'; put 'put ''cy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5YTSh0aGlzLl9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0''@;'; put 'put ''aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IEFyKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBYTShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNl''@;'; put 'put ''KGEsMSl9Y29uc3QgQ1c9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5GaShoZikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7ZnVuY3Rpb24gJGNlKCl7Y29uc3QgYz1GaShObyksbD1GaShoZik7cmV0dXJuIGE9PmMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pmwu''@;'; put 'put ''aGFuZGxlRXJyb3IoYSkpfWxldCBxY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuem9uZT1GaShObyksdGhpcy5hcHBsaWNhdGlvblJlZj1GaSh4NSl9aW5pdGlhbGl6ZSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb258fCh0aGlzLl9vbk1pY3JvdGFza0Vt''@;'; put 'put ''cHR5U3Vic2NyaXB0aW9uPXRoaXMuem9uZS5vbk1pY3JvdGFza0VtcHR5LnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLmFwcGxpY2F0aW9uUmVmLnRpY2soKX0pfX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb24/''@;'; put 'put ''LnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2xldCBVYT0oKCk9PntjbGFzcyBje31yZXR1cm4g''@;'; put 'put ''Yy5fX05HX0VMRU1FTlRfSURfXz1YY2UsY30pKCk7ZnVuY3Rpb24gWGNlKGMpe3JldHVybiBmdW5jdGlvbiBKY2UoYyxsLGEpe2lmKFAxKGMpJiYhYSl7Y29uc3QgZD1tdChjLmluZGV4LGwpO3JldHVybiBuZXcgZDUoZCxkKX1yZXR1cm4gNDcmYy50eXBlP25ldyBkNShsW0phXSxsKTpudWxs''@;'; put 'put ''fShTYygpLFhyKCksMTY9PSgxNiZjKSl9Y2xhc3Mga1d7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIGs2KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IGl1ZShsKX19Y29uc3QgcnVlPShjLGwpPT5sO2NsYXNzIGl1ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''X2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5f''@;'; put 'put ''bW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8''@;'; put 'put ''cnVlfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IF89IWR8fGEm''@;'; put 'put ''JmEuY3VycmVudEluZGV4PFRXKGQsaCxmKT9hOmQsVD1UVyhfLGgsZiksVz1fLmN1cnJlbnRJbmRleDtpZihfPT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT1fLnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IGllPVQtaCxnZT1X''@;'; put 'put ''LWg7aWYoaWUhPWdlKXtmb3IobGV0IEVlPTA7RWU8aWU7RWUrKyl7Y29uc3QgWmU9RWU8Zi5sZW5ndGg/ZltFZV06ZltFZV09MCxvdD1aZStFZTtnZTw9b3QmJm90PGllJiYoZltFZV09WmUrMSl9ZltfLnByZXZpb3VzSW5kZXhdPWdlLWllfX1UIT09VyYmbChfLFQsVyl9fWZvckVhY2hQcmV2''@;'; put 'put ''aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNo''@;'; put 'put ''TW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVu''@;'; put 'put ''dGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIWs2KGwpKXRocm93IG5ldyBBcig5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwp''@;'; put 'put ''P3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLF8sYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sXz10aGlzLl90''@;'; put 'put ''cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLF8pPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsXyxUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLF8s''@;'; put 'put ''VCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIEFMKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTsp''@;'; put 'put ''bChkLnZhbHVlKX19KGwsVD0+e189dGhpcy5fdHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCxfKT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULF8saCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEs''@;'; put 'put ''VCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCxfLGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9u''@;'; put 'put ''c0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251''@;'; put 'put ''bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWls''@;'; put 'put ''PW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5f''@;'; put 'put ''aWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5r''@;'; put 'put ''ZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRz''@;'; put 'put ''P251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgb3VlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlv''@;'; put 'put ''bihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50''@;'; put 'put ''SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJl''@;'; put 'put ''Y29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMu''@;'; put 'put ''X2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5n''@;'; put 'put ''ZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVh''@;'; put 'put ''ZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9p''@;'; put 'put ''bnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMu''@;'; put 'put ''X2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9p''@;'; put 'put ''dEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBBVyksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5f''@;'; put 'put ''dW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwhPT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRU''@;'; put 'put ''YWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3Zh''@;'; put 'put ''bHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IEFXKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNU''@;'; put 'put ''YWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVu''@;'; put 'put ''dGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9''@;'; put 'put ''bCxsfX1jbGFzcyBvdWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0''@;'; put 'put ''aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3Mgc3Vl''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10''@;'; put 'put ''aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0''@;'; put 'put ''dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgQVd7Y29uc3RydWN0''@;'; put 'put ''b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgc3VlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEp''@;'; put 'put ''Om51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24g''@;'; put 'put ''VFcoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIERXe2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxBNihs''@;'; put 'put ''KX1jcmVhdGUoKXtyZXR1cm4gbmV3IGF1ZX19Y2xhc3MgYXVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGws''@;'; put 'put ''dGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNI''@;'; put 'put ''ZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3By''@;'; put 'put ''ZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlz''@;'; put 'put ''Ll9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8''@;'; put 'put ''fEE2KGwpKSl0aHJvdyBuZXcgQXIoOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2Zv''@;'; put 'put ''ckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBl''@;'; put 'put ''bmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShk''@;'; put 'put ''LmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1u''@;'; put 'put ''dWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQm''@;'; put 'put ''JihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9''@;'; put 'put ''YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsXz1oLl9uZXh0''@;'; put 'put ''O3JldHVybiBmJiYoZi5fbmV4dD1fKSxfJiYoXy5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgbHVlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQo''@;'; put 'put ''KXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7''@;'; put 'put ''bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1u''@;'; put 'put ''dWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJy''@;'; put 'put ''ZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRk''@;'; put 'put ''aXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wg''@;'; put 'put ''aW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgbHVle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlv''@;'; put 'put ''dXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gSVcoKXtyZXR1cm4gbmV3IHo2KFtuZXcga1ddKX1sZXQgejY9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rv''@;'; put 'put ''cnk6ZD0+Yy5jcmVhdGUoYSxkfHxJVygpKSxkZXBzOltbYyxuZXcgZzAsbmV3IHoyXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IEFyKDkwMSwhMSl9fXJldHVybiBjLlx1MDI3NXBy''@;'; put 'put ''b3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpJV30pLGN9KSgpO2Z1bmN0aW9uIExXKCl7cmV0dXJuIG5ldyBNXyhbbmV3IERXXSl9bGV0IE1fPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5mYWN0b3JpZXM9YX1zdGF0aWMgY3JlYXRlKGEsZCl7aWYo''@;'; put 'put ''ZCl7Y29uc3QgaD1kLmZhY3Rvcmllcy5zbGljZSgpO2E9YS5jb25jYXQoaCl9cmV0dXJuIG5ldyBjKGEpfXN0YXRpYyBleHRlbmQoYSl7cmV0dXJue3Byb3ZpZGU6Yyx1c2VGYWN0b3J5OmQ9PmMuY3JlYXRlKGEsZHx8TFcoKSksZGVwczpbW2MsbmV3IGcwLG5ldyB6Ml1dfX1maW5kKGEpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBBcig5MDEsITEpfX1yZXR1cm4gYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6TFd9KSxjfSkoKTtjb25zdCBkdWU9Z1cobnVs''@;'; put 'put ''bCwiY29yZSIsW10pO2xldCBodWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKHg1KSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7ZnVuY3Rp''@;'; put 'put ''b24gVTYoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYz9jOm51bGwhPWMmJiJmYWxzZSIhPT1jfWxldCBzTz1udWxsO2Z1bmN0aW9uIGFwKCl7cmV0dXJuIHNPfWNsYXNzIE11ZXt9Y29uc3QgTHM9bmV3IE1pKCJEb2N1bWVudFRva2VuIik7bGV0IGFPPSgoKT0+e2NsYXNzIGN7aGlzdG9y''@;'; put 'put ''eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShFdWUpfSxwcm92aWRlZEluOiJw''@;'; put 'put ''bGF0Zm9ybSJ9KSxjfSkoKTtjb25zdCB4dWU9bmV3IE1pKCJMb2NhdGlvbiBJbml0aWFsaXplZCIpO2xldCBFdWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGFPe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9RmkoTHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlz''@;'; put 'put ''Ll9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBhcCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJo''@;'; put 'put ''YXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxo''@;'; put 'put ''KX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBjfSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KSxjfSkoKTtmdW5jdGlvbiBsTyhjLGwpe2lmKDA9PWMubGVuZ3RoKXJldHVybiBsO2lmKDA9PWwubGVuZ3Ro''@;'; put 'put ''KXJldHVybiBjO2xldCBhPTA7cmV0dXJuIGMuZW5kc1dpdGgoIi8iKSYmYSsrLGwuc3RhcnRzV2l0aCgiLyIpJiZhKyssMj09YT9jK2wuc3Vic3RyaW5nKDEpOjE9PWE/YytsOmMrIi8iK2x9ZnVuY3Rpb24gVlcoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMu''@;'; put 'put ''bGVuZ3RoO3JldHVybiBjLnNsaWNlKDAsYS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gQ2YoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgazU9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50''@;'; put 'put ''ZWQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIEZpKGpXKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBCVz1uZXcgTWkoImFwcEJhc2VI''@;'; put 'put ''cmVmIik7bGV0IGpXPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhy''@;'; put 'put ''ZWZGcm9tRE9NKCk/P0ZpKExzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVz''@;'; put 'put ''aCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gbE8odGhpcy5fYmFzZUhyZWYsYSl9''@;'; put 'put ''cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUrQ2YodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qg''@;'; put 'put ''Xz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsXyl9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IF89dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtDZihmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBs''@;'; put 'put ''YWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3Ro''@;'; put 'put ''aXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSksY30pKCksa3VlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBrNXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09u''@;'; put 'put ''RGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5f''@;'; put 'put ''cGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7bGV0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBudWxsPT1kJiYoZD0iIyIpLGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6''@;'; put 'put ''ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1sTyh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZv''@;'; put 'put ''cm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLF8pfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgXz10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK0NmKGYpKTswPT1fLmxlbmd0aCYmKF89dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRo''@;'; put 'put ''bmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLF8pfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2Nh''@;'; put 'put ''dGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGFPKSxhcihCVyw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9zdWJqZWN0PW5ldyBFcix0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fbG9jYXRpb25TdHJhdGVneT1hO2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRCYXNlSHJlZigpO3RoaXMuX2Jhc2VQYXRoPWZ1bmN0aW9uIER1ZShjKXtpZihuZXcgUmVnRXhwKCJeKGh0dHBzPzopPy8vIikudGVzdChjKSl7Y29uc3RbLGFdPWMuc3BsaXQoL1wvXC9bXlwvXSsvKTtyZXR1cm4gYX1yZXR1cm4gY30o''@;'; put 'put ''VlcoelcoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9u''@;'; put 'put ''Py51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1''@;'; put 'put ''cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVybiB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYStDZihkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBUdWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25z''@;'; put 'put ''dCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgselcoYSkpKX1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7cmV0dXJuIGEmJiIvIiE9PWFbMF0mJihhPSIvIithKSx0aGlzLl9sb2Nh''@;'; put 'put ''dGlvblN0cmF0ZWd5LnByZXBhcmVFeHRlcm5hbFVybChhKX1nbyhhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnB1c2hTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfXJl''@;'; put 'put ''cGxhY2VTdGF0ZShhLGQ9IiIsaD1udWxsKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnJlcGxhY2VTdGF0ZShoLCIiLGEsZCksdGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKHRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGErQ2YoZCkpLGgpfWZvcndhcmQoKXt0aGlzLl9sb2NhdGlvblN0''@;'; put 'put ''cmF0ZWd5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5oaXN0b3J5R28/LihhKX1vblVybENoYW5nZShhKXtyZXR1cm4gdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnB1c2goYSksdGhp''@;'; put 'put ''cy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9ufHwodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPXRoaXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRl''@;'; put 'put ''eE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3Rp''@;'; put 'put ''ZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9fXJldHVybiBjLm5vcm1h''@;'; put 'put ''bGl6ZVF1ZXJ5UGFyYW1zPUNmLGMuam9pbldpdGhTbGFzaD1sTyxjLnN0cmlwVHJhaWxpbmdTbGFzaD1WVyxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGs1KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1bmN0aW9uKCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uIEF1ZSgpe3JldHVybiBuZXcgSmQoYXIoazUpKX0oKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiB6VyhjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIGtjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQi''@;'; put 'put ''LGNbYy5TdGFuZGFsb25lPTFdPSJTdGFuZGFsb25lIixjfShrY3x8e30pLG5hPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShu''@;'; put 'put ''YXx8e30pLHkwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oeTB8fHt9KTtmdW5jdGlvbiBjTyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3Fv''@;'; put 'put ''LkRheXNGb3JtYXRdLGRbcW8uRGF5c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdGQoZixhKX1mdW5jdGlvbiB1TyhjLGwsYSl7Y29uc3QgZD1CbChjKSxmPXRkKFtkW3FvLk1vbnRoc0Zvcm1hdF0sZFtxby5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHRkKGYsYSl9ZnVuY3Rpb24gdGQo''@;'; put 'put ''YyxsKXtmb3IobGV0IGE9bDthPi0xO2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFhXKGMsbCl7bD1lbmNvZGVVUklDb21wb25lbnQobCk7Zm9yKGNvbnN0''@;'; put 'put ''IGEgb2YgYy5zcGxpdCgiOyIpKXtjb25zdCBkPWEuaW5kZXhPZigiPSIpLFtoLGZdPS0xPT1kP1thLCIiXTpbYS5zbGljZSgwLGQpLGEuc2xpY2UoZCsxKV07aWYoaC50cmltKCk9PT1sKXJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZil9cmV0dXJuIG51bGx9Y29uc3QgeU89L1xzKy8sSlc9''@;'; put 'put ''W107bGV0IHVjPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5faXRlcmFibGVEaWZmZXJzPWEsdGhpcy5fa2V5VmFsdWVEaWZmZXJzPWQsdGhpcy5fbmdFbD1oLHRoaXMuX3JlbmRlcmVyPWYsdGhpcy5pbml0aWFsQ2xhc3Nlcz1KVyx0aGlzLnN0YXRlTWFwPW5ldyBN''@;'; put 'put ''YXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRyaW0oKS5zcGxpdCh5Tyk6Sld9c2V0IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoeU8pOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhp''@;'; put 'put ''cy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJyYXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29u''@;'; put 'put ''c3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURpZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5l''@;'; put 'put ''bmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90''@;'; put 'put ''b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3RvZ2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYm''@;'; put 'put ''YS5zcGxpdCh5TykuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKHR0KHo2KSx0dChNXyksdHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZToh''@;'; put 'put ''MH0pLGN9KSgpO2NsYXNzIGcwZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10''@;'; put 'put ''aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnko''@;'; put 'put ''YSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdG''@;'; put 'put ''b3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZl''@;'; put 'put ''ciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdl''@;'; put 'put ''cyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsXyk9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGcwZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09''@;'; put 'put ''PV8/dm9pZCAwOl8pO2Vsc2UgaWYobnVsbD09XylkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCxfKSxlRyhULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5j''@;'; put 'put ''b250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e2VHKGQuZ2V0KGguY3VycmVudEluZGV4KSxoKX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dCh6YSksdHQoejYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdGb3IiLCIiLCJuZ0Zvck9mIiwiIl1dLGlucHV0czp7bmdGb3JPZjoibmdGb3JPZiIsbmdGb3JUcmFja0J5OiJu''@;'; put 'put ''Z0ZvclRyYWNrQnkiLG5nRm9yVGVtcGxhdGU6Im5nRm9yVGVtcGxhdGUifSxzdGFuZGFsb25lOiEwfSksY30pKCk7ZnVuY3Rpb24gZUcoYyxsKXtjLmNvbnRleHQuJGltcGxpY2l0PWwuaXRlbX1sZXQgWmk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3ZpZXdDb250YWlu''@;'; put 'put ''ZXI9YSx0aGlzLl9jb250ZXh0PW5ldyBtMGUsdGhpcy5fdGhlblRlbXBsYXRlUmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmPW51bGwsdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1kfXNldCBuZ0lmKGEpe3Ro''@;'; put 'put ''aXMuX2NvbnRleHQuJGltcGxpY2l0PXRoaXMuX2NvbnRleHQubmdJZj1hLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZlRoZW4oYSl7dEcoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQg''@;'; put 'put ''bmdJZkVsc2UoYSl7dEcoIm5nSWZFbHNlIixhKSx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0Nv''@;'; put 'put ''bnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5f''@;'; put 'put ''ZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVS''@;'; put 'put ''ZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoemEpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''IiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpO2NsYXNzIG0wZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51bGx9fWZ1bmN0aW9u''@;'; put 'put ''IHRHKGMsbCl7aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtxYShsKX0nLmApfWNsYXNzIHdPe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMu''@;'; put 'put ''X3RlbXBsYXRlUmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVy''@;'; put 'put ''UmVmLmNsZWFyKCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgbmQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0''@;'; put 'put ''VXNlZD0hMSx0aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2Fk''@;'; put 'put ''ZENhc2UoKXtyZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PXRoaXMuX25nU3dpdGNoO3JldHVybiB0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPXRoaXMuX2xhc3RDYXNlc01hdGNo''@;'; put 'put ''ZWR8fGQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0''@;'; put 'put ''Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZhdWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRl''@;'; put 'put ''KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHRoPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgd08oYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KHphKSx0dChuZCw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25nU3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5f''@;'; put 'put ''bmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2Vz''@;'; put 'put ''KGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSxfPS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOlkyLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsXyk6dGhp''@;'; put 'put ''cy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsXyl9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNoQWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5''@;'; put 'put ''LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KE1fKSx0dChGbykpfSxjLlx1MDI3NWRpcj1D''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl92aWV3UmVmPW51bGws''@;'; put 'put ''dGhpcy5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldD1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPW51bGx9bmdPbkNoYW5nZXMoYSl7aWYoYS5uZ1RlbXBsYXRlT3V0bGV0fHxhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcil7Y29u''@;'; put 'put ''c3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksdGhpcy5uZ1RlbXBsYXRlT3V0bGV0KXtjb25zdHtuZ1RlbXBsYXRlT3V0bGV0OmgsbmdUZW1wbGF0ZU91dGxldENvbnRleHQ6ZixuZ1RlbXBsYXRl''@;'; put 'put ''T3V0bGV0SW5qZWN0b3I6X309dGhpczt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KGgsZixfP3tpbmplY3RvcjpffTp2b2lkIDApfWVsc2UgdGhpcy5fdmlld1JlZj1udWxsfWVsc2UgdGhpcy5fdmlld1JlZiYmYS5uZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCYmdGhpcy5uZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0Q29udGV4dCYmKHRoaXMuX3ZpZXdSZWYuY29udGV4dD10aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0''@;'; put 'put ''SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBiMGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIEtoKCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe0toKCgpPT5sLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCkpfX1jbGFzcyB5MGV7Y3JlYXRlU3Vic2NyaXB0aW9uKGwsYSl7cmV0dXJuIGwudGhlbihhLGQ9Pnt0aHJvdyBkfSl9ZGlzcG9zZShsKXt9fWNvbnN0IHcwZT1uZXcgeTBlLEMwZT1uZXcgYjBlO2xldCB1eD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xhdGVzdFZh''@;'; put 'put ''bHVlPW51bGwsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fb2JqP2EhPT10aGlzLl9vYmo/KHRoaXMuX2Rpc3Bvc2UoKSx0aGlzLnRyYW5zZm9ybShhKSk6dGhpcy5fbGF0ZXN0VmFsdWU6KGEmJnRoaXMuX3N1YnNjcmliZShhKSx0aGlzLl9sYXRlc3RWYWx1ZSl9X3N1YnNjcmliZShhKXt0aGlzLl9vYmo9YSx0aGlzLl9zdHJhdGVneT10aGlz''@;'; put 'put ''Ll9zZWxlY3RTdHJhdGVneShhKSx0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5fc3RyYXRlZ3kuY3JlYXRlU3Vic2NyaXB0aW9uKGEsZD0+dGhpcy5fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKSl9X3NlbGVjdFN0cmF0ZWd5KGEpe2lmKHY1KGEpKXJldHVybiB3MGU7aWYocE0oYSkpcmV0dXJuIEMw''@;'; put 'put ''ZTt0aHJvdyBmdW5jdGlvbiBlMihjLGwpe3JldHVybiBuZXcgQXIoMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiksdGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVs''@;'; put 'put ''bH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLl9yZWYubWFya0ZvckNoZWNrKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSwxNikpfSxjLlx1MDI3NXBpcGU9TmEo''@;'; put 'put ''e25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCksaUc9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0oYSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGEsbnVsbCwyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cGlwZT1OYSh7bmFtZToianNvbiIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pLGN9KSgpLGR4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49b0d9dHJhbnNmb3JtKGEsZD1vRyl7''@;'; put 'put ''aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKTtjb25zdCBoPXRoaXMuZGlmZmVyLmRpZmYoYSksZj1kIT09dGhpcy5jb21wYXJlRm47''@;'; put 'put ''cmV0dXJuIGgmJih0aGlzLmtleVZhbHVlcz1bXSxoLmZvckVhY2hJdGVtKF89Pnt0aGlzLmtleVZhbHVlcy5wdXNoKGZ1bmN0aW9uIE8wZShjLGwpe3JldHVybntrZXk6Yyx2YWx1ZTpsfX0oXy5rZXksXy5jdXJyZW50VmFsdWUpKX0pKSwoaHx8ZikmJih0aGlzLmtleVZhbHVlcy5zb3J0KGQp''@;'; put 'put ''LHRoaXMuY29tcGFyZUZuPWQpLHRoaXMua2V5VmFsdWVzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChNXywxNikpfSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSksY30pKCk7''@;'; put 'put ''ZnVuY3Rpb24gb0coYyxsKXtjb25zdCBhPWMua2V5LGQ9bC5rZXk7aWYoYT09PWQpcmV0dXJuIDA7aWYodm9pZCAwPT09YSlyZXR1cm4gMTtpZih2b2lkIDA9PT1kKXJldHVybi0xO2lmKG51bGw9PT1hKXJldHVybiAxO2lmKG51bGw9PT1kKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''YSYmInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtpZigibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZClyZXR1cm4gYS1kO2lmKCJib29sZWFuIj09dHlwZW9mIGEmJiJib29sZWFuIj09dHlwZW9mIGQpcmV0dXJuIGE8ZD8tMToxO2NvbnN0IGg9U3RyaW5n''@;'; put 'put ''KGEpLGY9U3RyaW5nKGQpO3JldHVybiBoPT1mPzA6aDxmPy0xOjF9bGV0IG9vPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0''@;'; put 'put ''IHNHPSJicm93c2VyIjtmdW5jdGlvbiBScyhjKXtyZXR1cm4gYz09PXNHfWZ1bmN0aW9uIGFHKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgajBlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3''@;'; put 'put ''IHowZShhcihMcyksd2luZG93KX0pLGN9KSgpO2NsYXNzIHowZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9s''@;'; put 'put ''bFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKT9bdGhpcy53aW5kb3cucGFnZVhPZmZzZXQsdGhpcy53aW5kb3cucGFnZVlPZmZzZXRdOlswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy5zdXBwb3J0c1Njcm9sbGluZygpJiZ0aGlzLndpbmRvdy5zY3JvbGxU''@;'; put 'put ''byhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2lmKCF0aGlzLnN1cHBvcnRzU2Nyb2xsaW5nKCkpcmV0dXJuO2NvbnN0IGE9ZnVuY3Rpb24gVTBlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2Rl''@;'; put 'put ''O2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IF89Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYoXylyZXR1cm4gX31oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRo''@;'; put 'put ''aXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe2lmKHRoaXMuc3VwcG9ydFNjcm9sbFJlc3RvcmF0aW9uKCkpe2NvbnN0IGE9dGhpcy53aW5kb3cuaGlzdG9yeTthJiZhLnNjcm9sbFJlc3RvcmF0aW9uJiYoYS5zY3JvbGxSZXN0''@;'; put 'put ''b3JhdGlvbj1sKX19c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlzLndpbmRvdy5zY3JvbGxU''@;'; put 'put ''byhkLWZbMF0saC1mWzFdKX1zdXBwb3J0U2Nyb2xsUmVzdG9yYXRpb24oKXt0cnl7aWYoIXRoaXMuc3VwcG9ydHNTY3JvbGxpbmcoKSlyZXR1cm4hMTtjb25zdCBsPWxHKHRoaXMud2luZG93Lmhpc3RvcnkpfHxsRyhPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy53aW5kb3cuaGlzdG9yeSkp''@;'; put 'put ''O3JldHVybiEoIWx8fCFsLndyaXRhYmxlJiYhbC5zZXQpfWNhdGNoe3JldHVybiExfX1zdXBwb3J0c1Njcm9sbGluZygpe3RyeXtyZXR1cm4hIXRoaXMud2luZG93JiYhIXRoaXMud2luZG93LnNjcm9sbFRvJiYicGFnZVhPZmZzZXQiaW4gdGhpcy53aW5kb3d9Y2F0Y2h7cmV0dXJuITF9fX1m''@;'; put 'put ''dW5jdGlvbiBsRyhjKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjLCJzY3JvbGxSZXN0b3JhdGlvbiIpfWNsYXNzIGNHe31jbGFzcyBoMWUgZXh0ZW5kcyBNdWV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9''@;'; put 'put ''ITB9fWNsYXNzIEVPIGV4dGVuZHMgaDFle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBTdWUoYyl7c098fChzTz1jKX0obmV3IEVPKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9''@;'; put 'put ''fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwp''@;'; put 'put ''fWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5F''@;'; put 'put ''TEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VI''@;'; put 'put ''cmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZjFlKCl7cmV0dXJuIFRfPVRffHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksVF8/VF8uZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIHAxZShjKXtweD1weHx8ZG9jdW1lbnQuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgiYSIpLHB4LnNldEF0dHJpYnV0ZSgiaHJlZiIsYyk7Y29uc3QgbD1weC5wYXRobmFtZTtyZXR1cm4iLyI9PT1sLmNoYXJBdCgwKT9sOmAvJHtsfWB9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtUXz1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9y''@;'; put 'put ''LnVzZXJBZ2VudH1nZXRDb29raWUobCl7cmV0dXJuIFhXKGRvY3VtZW50LmNvb2tpZSxsKX19bGV0IHB4LFRfPW51bGwsbTFlPSgoKT0+e2NsYXNzIGN7YnVpbGQoKXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBrTz1uZXcgTWkoIkV2ZW50TWFuYWdlclBsdWdpbnMiKTtsZXQgcEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVU''@;'; put 'put ''b1BsdWdpbj1uZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9u''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBBcig1MTAxLCExKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa08pLGFyKE5vKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZ0d7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IEFPPSJuZy1hcHAtaWQiO2xldCBtRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGY9e30pe3RoaXMuZG9jPWEsdGhpcy5hcHBJZD1kLHRoaXMubm9uY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnN0eWxlUmVmPW5ldyBN''@;'; put 'put ''YXAsdGhpcy5ob3N0Tm9kZXM9bmV3IFNldCx0aGlzLnN0eWxlTm9kZXNJbkRPTT10aGlzLmNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0eWxlcygpLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1hRyhmKSx0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09''@;'; put 'put ''PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJlbW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''c3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRk''@;'; put 'put ''KGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlzLnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9y''@;'; put 'put ''KGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1vdmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRl''@;'; put 'put ''cmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske0FPfT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFjaChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50''@;'; put 'put ''ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdlfXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltd''@;'; put 'put ''fSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShBTyksZjt7Y29uc3QgXz10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJz''@;'; put 'put ''dHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZfLnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLF8udGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJl8uc2V0QXR0cmlidXRlKEFPLHRoaXMuYXBwSWQpLF99fWFkZFN0eWxlVG9Ib3N0KGEsZCl7Y29uc3QgaD10aGlz''@;'; put 'put ''LmdldFN0eWxlRWxlbWVudChhLGQpO2EuYXBwZW5kQ2hpbGQoaCk7Y29uc3QgZj10aGlzLnN0eWxlUmVmLF89Zi5nZXQoZCk/LmVsZW1lbnRzO18/Xy5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVz''@;'; put 'put ''O2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMpLGFyKGE2KSxhcihsNiw4KSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp''@;'; put 'put ''O2NvbnN0IFRPPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu''@;'; put 'put ''czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LERPPS8lQ09NUCUvZyx5MWU9bmV3IE1pKCJSZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtmdW5j''@;'; put 'put ''dGlvbiBfRyhjLGwpe3JldHVybiBsLm1hcChhPT5hLnJlcGxhY2UoRE8sYykpfWxldCBJTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWU9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhpcy5y''@;'; put 'put ''ZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9Xyx0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLm5nWm9uZT1XLHRoaXMubm9uY2U9aWUsdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWFHKFQpLHRoaXMuZGVmYXVsdFJlbmRlcmVyPW5l''@;'; put 'put ''dyBMTyhhLF8sVyx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PU9jLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBzdWxh''@;'; put 'put ''dGlvbjpPYy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB5Rz9oLmFwcGx5VG9Ib3N0KGEpOmggaW5zdGFuY2VvZiBSTyYmaC5hcHBseVN0eWxlcygpLGh9Z2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpe2NvbnN0IGg9''@;'; put 'put ''dGhpcy5yZW5kZXJlckJ5Q29tcElkO2xldCBmPWguZ2V0KGQuaWQpO2lmKCFmKXtjb25zdCBfPXRoaXMuZG9jLFQ9dGhpcy5uZ1pvbmUsVz10aGlzLmV2ZW50TWFuYWdlcixpZT10aGlzLnNoYXJlZFN0eWxlc0hvc3QsZ2U9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LHdlPXRoaXMu''@;'; put 'put ''cGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlIE9jLkVtdWxhdGVkOmY9bmV3IHlHKFcsaWUsZCx0aGlzLmFwcElkLGdlLF8sVCx3ZSk7YnJlYWs7Y2FzZSBPYy5TaGFkb3dEb206cmV0dXJuIG5ldyBNMWUoVyxpZSxhLGQsXyxULHRoaXMubm9uY2Usd2UpO2Rl''@;'; put 'put ''ZmF1bHQ6Zj1uZXcgUk8oVyxpZSxkLGdlLF8sVCx3ZSl9aC5zZXQoZC5pZCxmKX1yZXR1cm4gZn1uZ09uRGVzdHJveSgpe3RoaXMucmVuZGVyZXJCeUNvbXBJZC5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihwRyksYXIobUcpLGFy''@;'; put 'put ''KGE2KSxhcih5MWUpLGFyKExzKSxhcihHcyksYXIoTm8pLGFyKGw2KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgTE97Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmda''@;'; put 'put ''b25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3koKXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhUT1thXXx8YSxsKTp0aGlzLmRv''@;'; put 'put ''Yy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoYkcobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxk''@;'; put 'put ''KGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKGJHKGwpP2wuY29udGVudDpsKS5pbnNlcnRCZWZvcmUoYSxkKX1yZW1vdmVDaGlsZChsLGEpe2wmJmwucmVtb3ZlQ2hpbGQoYSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtsZXQgZD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5kb2MucXVlcnlT''@;'; put 'put ''ZWxlY3RvcihsKTpsO2lmKCFkKXRocm93IG5ldyBBcigtNTEwNCwhMSk7cmV0dXJuIGF8fChkLnRleHRDb250ZW50PSIiKSxkfXBhcmVudE5vZGUobCl7cmV0dXJuIGwucGFyZW50Tm9kZX1uZXh0U2libGluZyhsKXtyZXR1cm4gbC5uZXh0U2libGluZ31zZXRBdHRyaWJ1dGUobCxhLGQsaCl7''@;'; put 'put ''aWYoaCl7YT1oKyI6IithO2NvbnN0IGY9VE9baF07Zj9sLnNldEF0dHJpYnV0ZU5TKGYsYSxkKTpsLnNldEF0dHJpYnV0ZShhLGQpfWVsc2UgbC5zZXRBdHRyaWJ1dGUoYSxkKX1yZW1vdmVBdHRyaWJ1dGUobCxhLGQpe2lmKGQpe2NvbnN0IGg9VE9bZF07aD9sLnJlbW92ZUF0dHJpYnV0ZU5T''@;'; put 'put ''KGgsYSk6bC5yZW1vdmVBdHRyaWJ1dGUoYCR7ZH06JHthfWApfWVsc2UgbC5yZW1vdmVBdHRyaWJ1dGUoYSl9YWRkQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5hZGQoYSl9cmVtb3ZlQ2xhc3MobCxhKXtsLmNsYXNzTGlzdC5yZW1vdmUoYSl9c2V0U3R5bGUobCxhLGQsaCl7aCYoWTIuRGFzaENh''@;'; put 'put ''c2V8WTIuSW1wb3J0YW50KT9sLnN0eWxlLnNldFByb3BlcnR5KGEsZCxoJlkyLkltcG9ydGFudD8iaW1wb3J0YW50IjoiIik6bC5zdHlsZVthXT1kfXJlbW92ZVN0eWxlKGwsYSxkKXtkJlkyLkRhc2hDYXNlP2wuc3R5bGUucmVtb3ZlUHJvcGVydHkoYSk6bC5zdHlsZVthXT0iIn1zZXRQcm9w''@;'; put 'put ''ZXJ0eShsLGEsZCl7bFthXT1kfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPWFwKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFy''@;'; put 'put ''Z2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJl''@;'; put 'put ''dHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gYkcoYyl7cmV0dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNz''@;'; put 'put ''IE0xZSBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7c3VwZXIobCxmLF8sVyksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0''@;'; put 'put ''LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCBpZT1fRyhoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgZ2Ugb2YgaWUpe2NvbnN0IHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7VCYmd2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksd2UudGV4dENvbnRlbnQ9Z2UsdGhp''@;'; put 'put ''cy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHdlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNl''@;'; put 'put ''cnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyBSTyBleHRlbmRzIExPe2NvbnN0cnVjdG9yKGwsYSxkLGgs''@;'; put 'put ''ZixfLFQsVyl7c3VwZXIobCxmLF8sVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9Vz9fRyhXLGQuc3R5bGVzKTpkLnN0eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXMo''@;'; put 'put ''dGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyB5RyBleHRlbmRzIFJPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfLFQsVyl7Y29uc3QgaWU9aCsi''@;'; put 'put ''LSIrZC5pZDtzdXBlcihsLGEsZCxmLF8sVCxXLGllKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHcxZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoRE8sYyl9KGllKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIEMxZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJl''@;'; put 'put ''cGxhY2UoRE8sYyl9KGllKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0''@;'; put 'put ''ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCB4MWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGdHe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwo''@;'; put 'put ''KT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKExzKSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgd0c9WyJhbHQiLCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sRTFlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNj''@;'; put 'put ''OiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1VwIixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSxrMWU9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtl''@;'; put 'put ''eSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgQTFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBnR3tjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxo''@;'; put 'put ''KXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksXz1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpvbmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmFwKCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50''@;'; put 'put ''TmFtZSxfKSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBv''@;'; put 'put ''cCgpKTtsZXQgXz0iIixUPWQuaW5kZXhPZigiY29kZSIpO2lmKFQ+LTEmJihkLnNwbGljZShULDEpLF89ImNvZGUuIiksd0cuZm9yRWFjaChpZT0+e2NvbnN0IGdlPWQuaW5kZXhPZihpZSk7Z2U+LTEmJihkLnNwbGljZShnZSwxKSxfKz1pZSsiLiIpfSksXys9ZiwwIT1kLmxlbmd0aHx8MD09''@;'; put 'put ''PWYubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IFc9e307cmV0dXJuIFcuZG9tRXZlbnROYW1lPWgsVy5mdWxsS2V5PV8sV31zdGF0aWMgbWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGEsZCl7bGV0IGg9RTFlW2Eua2V5XXx8YS5rZXksZj0iIjtyZXR1cm4gZC5pbmRleE9mKCJjb2RlLiIpPi0xJiYo''@;'; put 'put ''aD1hLmNvZGUsZj0iY29kZS4iKSwhKG51bGw9PWh8fCFoKSYmKGg9aC50b0xvd2VyQ2FzZSgpLCIgIj09PWg/aD0ic3BhY2UiOiIuIj09PWgmJihoPSJkb3QiKSx3Ry5mb3JFYWNoKF89PntfIT09aCYmKDAsazFlW19dKShhKSYmKGYrPV8rIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVu''@;'; put 'put ''dENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkmJmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFNHPVt7cHJvdmlkZTpHcyx1c2VWYWx1ZTpzR30se3Byb3ZpZGU6ZVMsdXNlVmFsdWU6ZnVuY3Rpb24gVDFlKCl7RU8ubWFrZUN1cnJlbnQo''@;'; put 'put ''KX0sbXVsdGk6ITB9LHtwcm92aWRlOkxzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSTFlKCl7cmV0dXJuIGZ1bmN0aW9uIEZDKGMpe0c5PWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLEwxZT1nVyhkdWUsImJyb3dzZXIiLFNHKSxSMWU9bmV3IE1pKCIiKSxNRz1be3Byb3ZpZGU6S00s''@;'; put 'put ''dXNlQ2xhc3M6Y2xhc3MgZzFle2FkZFRvV2luZG93KGwpe09pLmdldEFuZ3VsYXJUZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBBcig1MTAzLCExKTtyZXR1cm4gZn0sT2kuZ2V0QWxsQW5ndWxh''@;'; put 'put ''clRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLE9pLmdldEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksT2kuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChPaS5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksT2kuZnJhbWV3b3Jr''@;'; put 'put ''U3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1PaS5nZXRBbGxBbmd1bGFyVGVzdGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoLF89ITE7Y29uc3QgVD1mdW5jdGlvbihXKXtfPV98fFcsZi0tLDA9PWYmJmQoXyl9O2guZm9yRWFjaChXPT57Vy53aGVuU3RhYmxlKFQpfSl9KX1maW5kVGVz''@;'; put 'put ''dGFiaWxpdHlJblRyZWUobCxhLGQpe3JldHVybiBudWxsPT1hP251bGw6bC5nZXRUZXN0YWJpbGl0eShhKT8/KGQ/YXAoKS5pc1NoYWRvd1Jvb3QoYSk/dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLmhvc3QsITApOnRoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5wYXJlbnRF''@;'; put 'put ''bGVtZW50LCEwKTpudWxsKX19LGRlcHM6W119LHtwcm92aWRlOnVXLHVzZUNsYXNzOiRSLGRlcHM6W05vLHFSLEtNXX0se3Byb3ZpZGU6JFIsdXNlQ2xhc3M6JFIsZGVwczpbTm8scVIsS01dfV0seEc9W3twcm92aWRlOnQ1LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6aGYsdXNlRmFjdG9y''@;'; put 'put ''eTpmdW5jdGlvbiBEMWUoKXtyZXR1cm4gbmV3IGhmfSxkZXBzOltdfSx7cHJvdmlkZTprTyx1c2VDbGFzczp4MWUsbXVsdGk6ITAsZGVwczpbTHMsTm8sR3NdfSx7cHJvdmlkZTprTyx1c2VDbGFzczpBMWUsbXVsdGk6ITAsZGVwczpbTHNdfSxJTyxtRyxwRyx7cHJvdmlkZTpZMyx1c2VFeGlz''@;'; put 'put ''dGluZzpJT30se3Byb3ZpZGU6Y0csdXNlQ2xhc3M6bTFlLGRlcHM6W119LFtdXTtsZXQgRUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIHdpdGhTZXJ2ZXJUcmFuc2l0aW9uKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6YTYsdXNlVmFsdWU6''@;'; put 'put ''YS5hcHBJZH1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoUjFlLDEyKSl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOlsuLi54RywuLi5NR10saW1wb3J0czpbb28saHVlXX0pLGN9KSgpLGtH''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jPWF9Z2V0VGl0bGUoKXtyZXR1cm4gdGhpcy5fZG9jLnRpdGxlfXNldFRpdGxlKGEpe3RoaXMuX2RvYy50aXRsZT1hfHwiIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTHMp''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hP25ldyBhOmZ1bmN0aW9uIFAxZSgpe3JldHVybiBuZXcga0coYXIoTHMpKX0oKSxkfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3R5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3c7Rig3NDA5MiksRigzNDIwOSk7Y29uc3QgUE89e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEduPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3Rh''@;'; put 'put ''cnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19''@;'; put 'put ''LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixs''@;'; put 'put ''aWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJy''@;'; put 'put ''ZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAs''@;'; put 'put ''c2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJj''@;'; put 'put ''aDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4i''@;'; put 'put ''LCJOT1QgSU4iLCJORSJdfX07dmFyIEtvPUYoMTY2NzYpLElHPUYubihLbyk7ZnVuY3Rpb24gTEcoYyxsLGEsZCxoLGYsXyl7dHJ5e3ZhciBUPWNbZl0oXyksVz1ULnZhbHVlfWNhdGNoKGllKXtyZXR1cm4gdm9pZCBhKGllKX1ULmRvbmU/bChXKTpQcm9taXNlLnJlc29sdmUoVykudGhlbihk''@;'; put 'put ''LGgpfWZ1bmN0aW9uIGZpKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIF8oVyl7TEcoZixkLGgsXyxULCJuZXh0IixXKX1mdW5jdGlvbiBUKFcpe0xH''@;'; put 'put ''KGYsZCxoLF8sVCwidGhyb3ciLFcpfV8odm9pZCAwKX0pfX1mdW5jdGlvbiBGTyhjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgS2V8fFkoYy5saWZ0KSYmWShjLnN1YnNjcmliZSkpfWNvbnN0e2lzQXJyYXk6QjFlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6ajFlLHByb3RvdHlwZTp6MWUs''@;'; put 'put ''a2V5czpVMWV9PU9iamVjdDtmdW5jdGlvbiBSRyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihCMWUobCkpcmV0dXJue2FyZ3M6bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIFoxZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZqMWUoYyk9PT16MWV9KGwpKXtj''@;'; put 'put ''b25zdCBhPVUxZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNBcnJheTpZMWV9PUFycmF5O2Z1bmN0aW9uIEhPKGMpe3JldHVybiBNZShsPT5mdW5jdGlvbiBXMWUoYyxsKXtyZXR1cm4gWTFlKGwpP2MoLi4u''@;'; put 'put ''bCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gT0coYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gWTYoLi4uYyl7Y29uc3QgbD1OMChjKSxhPVJjKGMpLHthcmdzOmQsa2V5czpofT1SRyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIGVhKFtd''@;'; put 'put ''LGwpO2NvbnN0IGY9bmV3IEtlKGZ1bmN0aW9uIEcxZShjLGwsYT1PZSl7cmV0dXJuIGQ9PntQRyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IF89aCxUPWg7Zm9yKGxldCBXPTA7VzxoO1crKylQRyhsLCgpPT57Y29uc3QgaWU9ZWEoY1tXXSxsKTtsZXQgZ2U9''@;'; put 'put ''ITE7aWUuc3Vic2NyaWJlKFVlKGQsd2U9PntmW1ddPXdlLGdlfHwoZ2U9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLV98fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/Xz0+T0coaCxfKTpPZSkpO3JldHVybiBhP2YucGlwZShITyhhKSk6Zn1mdW5jdGlv''@;'; put 'put ''biBQRyhjLGwsYSl7Yz9HaShhLGMsbCk6bCgpfWNvbnN0IGd4PVgoYz0+ZnVuY3Rpb24oKXtjKHRoaXMpLHRoaXMubmFtZT0iRW1wdHlFcnJvciIsdGhpcy5tZXNzYWdlPSJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSJ9KTtmdW5jdGlvbiBteCguLi5jKXtyZXR1cm4gZnVuY3Rpb24gJDFlKCl7''@;'; put 'put ''cmV0dXJuIFBpKDEpfSgpKGVhKGMsTjAoYykpKX1mdW5jdGlvbiBGRyhjKXtyZXR1cm4gbmV3IEtlKGw9PntLcihjKCkpLnN1YnNjcmliZShsKX0pfWZ1bmN0aW9uIERfKGMsbCl7Y29uc3QgYT1ZKGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEoKSk7cmV0dXJuIG5ldyBLZShsP2g9Pmwuc2No''@;'; put 'put ''ZWR1bGUoZCwwLGgpOmQpfWZ1bmN0aW9uIE5PKCl7cmV0dXJuIFhlKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9VWUobCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9''@;'; put 'put ''bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxkLmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgSEcgZXh0ZW5kcyBLZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''LGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxsLHFlKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJq''@;'; put 'put ''ZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVjdEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0''@;'; put 'put ''e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlvbjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBlZTtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgp''@;'; put 'put ''O2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZShVZShhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9yKGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVs''@;'; put 'put ''bCxsPWVlLkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBOTygpKHRoaXMpfX1mdW5jdGlvbiBpZChjKXtyZXR1cm4gYzw9MD8oKT0+TG86WGUoKGwsYSk9PntsZXQgZD0wO2wuc3Vic2NyaWJlKFVlKGEsaD0+eysrZDw9YyYmKGEubmV4dChoKSxjPD1kJiZhLmNvbXBsZXRlKCkp''@;'; put 'put ''fSkpfSl9ZnVuY3Rpb24gY3AoLi4uYyl7Y29uc3QgbD1OMChjKTtyZXR1cm4gWGUoKGEsZCk9PnsobD9teChjLGEsbCk6bXgoYyxhKSkuc3Vic2NyaWJlKGQpfSl9ZnVuY3Rpb24gSWEoYyxsKXtyZXR1cm4gWGUoKGEsZCk9PntsZXQgaD0wO2Euc3Vic2NyaWJlKFVlKGQsZj0+Yy5jYWxsKGws''@;'; put 'put ''ZixoKyspJiZkLm5leHQoZikpKX0pfWZ1bmN0aW9uIHZ4KGMpe3JldHVybiBYZSgobCxhKT0+e2xldCBkPSExO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2Q9ITAsYS5uZXh0KGgpfSwoKT0+e2R8fGEubmV4dChjKSxhLmNvbXBsZXRlKCl9KSl9KX1mdW5jdGlvbiBORyhjPXExZSl7cmV0dXJuIFhl''@;'; put 'put ''KChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoVWUoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIHExZSgpe3JldHVybiBuZXcgZ3h9ZnVuY3Rpb24gdXAoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7''@;'; put 'put ''cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsaWQoMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gWShsKT95cihjLGwsMSk6eXIoYywxKX1mdW5jdGlvbiB6YyhjLGwsYSl7Y29uc3QgZD1ZKGMpfHxsfHxhP3tuZXh0OmMs''@;'; put 'put ''ZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1hlKChoLGYpPT57dmFyIF87bnVsbD09PShfPWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09X3x8Xy5jYWxsKGQpO2xldCBUPSEwO2guc3Vic2NyaWJlKFVlKGYsVz0+e3ZhciBpZTtudWxsPT09KGllPWQubmV4dCl8fHZvaWQgMD09PWllfHxp''@;'; put 'put ''ZS5jYWxsKGQsVyksZi5uZXh0KFcpfSwoKT0+e3ZhciBXO1Q9ITEsbnVsbD09PShXPWQuY29tcGxldGUpfHx2b2lkIDA9PT1XfHxXLmNhbGwoZCksZi5jb21wbGV0ZSgpfSxXPT57dmFyIGllO1Q9ITEsbnVsbD09PShpZT1kLmVycm9yKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCxXKSxmLmVy''@;'; put 'put ''cm9yKFcpfSwoKT0+e3ZhciBXLGllO1QmJihudWxsPT09KFc9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PVd8fFcuY2FsbChkKSksbnVsbD09PShpZT1kLmZpbmFsaXplKXx8dm9pZCAwPT09aWV8fGllLmNhbGwoZCl9KSl9KTpPZX1mdW5jdGlvbiBBNShjKXtyZXR1cm4gWGUoKGwsYSk9Pnts''@;'; put 'put ''ZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKFVlKGEsdm9pZCAwLHZvaWQgMCxfPT57Zj1LcihjKF8sQTUoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpoPSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEp''@;'; put 'put ''KX0pfWZ1bmN0aW9uIFZPKGMpe3JldHVybiBjPD0wPygpPT5MbzpYZSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKFVlKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAs''@;'; put 'put ''KCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiBJXyhjKXtyZXR1cm4gWGUoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1jb25zdCBscz0icHJpbWFyeSIsTF89U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgUTFle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFy''@;'; put 'put ''YW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9''@;'; put 'put ''Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJldHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gRzYoYyl7cmV0dXJuIG5ldyBRMWUoYyl9''@;'; put 'put ''ZnVuY3Rpb24gZWRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBhdGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7Zjxk''@;'; put 'put ''Lmxlbmd0aDtmKyspe2NvbnN0IF89ZFtmXSxUPWNbZl07aWYoXy5zdGFydHNXaXRoKCI6IikpaFtfLnN1YnN0cmluZygxKV09VDtlbHNlIGlmKF8hPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIHJo''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1jP09iamVjdC5rZXlzKGMpOnZvaWQgMCxkPWw/T2JqZWN0LmtleXMobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhQkcoY1toXSxsW2hdKSlyZXR1''@;'; put 'put ''cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBCRyhjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykmJkFycmF5LmlzQXJyYXkobCkpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Y29uc3QgYT1bLi4uY10uc29ydCgpLGQ9Wy4uLmxdLnNvcnQoKTtyZXR1cm4gYS5ldmVyeSgoaCxmKT0+ZFtm''@;'; put 'put ''XT09PWgpfXJldHVybiBjPT09bH1mdW5jdGlvbiBqRyhjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gZHAoYyl7cmV0dXJuIEZPKGMpP2M6djUoYyk/ZWEoUHJvbWlzZS5yZXNvbHZlKGMpKTpXaShjKX1jb25zdCBuZGU9e2V4YWN0OmZ1bmN0aW9uIFpH''@;'; put 'put ''KGMsbCxhKXtpZighVDUoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IV94KGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFa''@;'; put 'put ''RyhjLmNoaWxkcmVuW2RdLGwuY2hpbGRyZW5bZF0sYSkpcmV0dXJuITE7cmV0dXJuITB9LHN1YnNldDpZR30sekc9e2V4YWN0OmZ1bmN0aW9uIHJkZShjLGwpe3JldHVybiByaChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gaWRlKGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2Jq''@;'; put 'put ''ZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5CRyhjW2FdLGxbYV0pKX0saWdub3JlZDooKT0+ITB9O2Z1bmN0aW9uIFVHKGMsbCxhKXtyZXR1cm4gbmRlW2EucGF0aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZ6R1thLnF1ZXJ5UGFyYW1zXShj''@;'; put 'put ''LnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gWUcoYyxsLGEpe3JldHVybiBXRyhjLGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBXRyhjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0''@;'; put 'put ''aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIVQ1KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IV94KGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7aWYoIVQ1KGMuc2VnbWVudHMsYSl8fCFfeChjLnNlZ21lbnRz''@;'; put 'put ''LGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IVlHKGMuY2hpbGRyZW5baF0sbC5jaGlsZHJlbltoXSxkKSlyZXR1cm4hMTtyZXR1cm4hMH17Y29uc3QgaD1hLnNsaWNlKDAsYy5zZWdtZW50cy5sZW5ndGgpLGY9YS5zbGljZShjLnNl''@;'; put 'put ''Z21lbnRzLmxlbmd0aCk7cmV0dXJuISEoVDUoYy5zZWdtZW50cyxoKSYmX3goYy5zZWdtZW50cyxoLGQpJiZjLmNoaWxkcmVuW2xzXSkmJldHKGMuY2hpbGRyZW5bbHNdLGwsZixkKX19ZnVuY3Rpb24gX3goYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT56R1thXShjW2hdLnBhcmFtZXRl''@;'; put 'put ''cnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgJDZ7Y29uc3RydWN0b3IobD1uZXcgeWEoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0''@;'; put 'put ''aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGFkZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIHlhe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMuY2hpbGRyZW49YSx0aGlzLnBh''@;'; put 'put ''cmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKS5sZW5ndGh9dG9T''@;'; put 'put ''dHJpbmcoKXtyZXR1cm4gYngodGhpcyl9fWNsYXNzIFJfe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXB8fCh0aGlzLl9wYXJhbWV0ZXJNYXA9RzYodGhpcy5wYXJhbWV0ZXJz''@;'; put 'put ''KSksdGhpcy5fcGFyYW1ldGVyTWFwfXRvU3RyaW5nKCl7cmV0dXJuIHFHKHRoaXMpfX1mdW5jdGlvbiBUNShjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCBPXz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEJPfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIEJPe3BhcnNlKGwpe2NvbnN0IGE9bmV3IF9kZShsKTtyZXR1cm4g''@;'; put 'put ''bmV3ICQ2KGEucGFyc2VSb290U2VnbWVudCgpLGEucGFyc2VRdWVyeVBhcmFtcygpLGEucGFyc2VGcmFnbWVudCgpKX1zZXJpYWxpemUobCl7Y29uc3QgYT1gLyR7UF8obC5yb290LCEwKX1gLGQ9ZnVuY3Rpb24gdWRlKGMpe2NvbnN0IGw9T2JqZWN0LmtleXMoYykubWFwKGE9Pntjb25zdCBk''@;'; put 'put ''PWNbYV07cmV0dXJuIEFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoaD0+YCR7eXgoYSl9PSR7eXgoaCl9YCkuam9pbigiJiIpOmAke3l4KGEpfT0ke3l4KGQpfWB9KS5maWx0ZXIoYT0+ISFhKTtyZXR1cm4gbC5sZW5ndGg/YD8ke2wuam9pbigiJiIpfWA6IiJ9KGwucXVlcnlQYXJhbXMpO3JldHVy''@;'; put 'put ''bmAke2F9JHtkfSR7InN0cmluZyI9PXR5cGVvZiBsLmZyYWdtZW50P2AjJHtmdW5jdGlvbiBsZGUoYyl7cmV0dXJuIGVuY29kZVVSSShjKX0obC5mcmFnbWVudCl9YDoiIn1gfX1jb25zdCBhZGU9bmV3IEJPO2Z1bmN0aW9uIGJ4KGMpe3JldHVybiBjLnNlZ21lbnRzLm1hcChsPT5xRyhsKSku''@;'; put 'put ''am9pbigiLyIpfWZ1bmN0aW9uIFBfKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gYngoYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuW2xzXT9QXyhjLmNoaWxkcmVuW2xzXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs''@;'; put 'put ''Zl0pPT57aCE9PWxzJiZkLnB1c2goYCR7aH06JHtQXyhmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBzZGUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0p''@;'; put 'put ''PT57ZD09PWxzJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT1scyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09bHM/W1BfKGMuY2hpbGRyZW5bbHNdLCExKV06W2Ake2h9OiR7UF8o''@;'; put 'put ''ZCwhMSl9YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuW2xzXT9gJHtieChjKX0vJHthWzBdfWA6YCR7YngoYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gR0coYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChj''@;'; put 'put ''KS5yZXBsYWNlKC8lNDAvZywiQCIpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIil9ZnVuY3Rpb24geXgoYyl7cmV0dXJuIEdHKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uIGpPKGMpe3JldHVybiBHRyhjKS5yZXBs''@;'; put 'put ''YWNlKC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiB3eChjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uICRHKGMpe3JldHVybiB3eChjLnJlcGxhY2UoL1wrL2csIiUyMCIpKX1mdW5jdGlvbiBxRyhj''@;'; put 'put ''KXtyZXR1cm5gJHtqTyhjLnBhdGgpfSR7ZnVuY3Rpb24gY2RlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5tYXAobD0+YDske2pPKGwpfT0ke2pPKGNbbF0pfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3QgZGRlPS9eW15cLygpPzsjXSsvO2Z1bmN0aW9uIHpPKGMpe2NvbnN0''@;'; put 'put ''IGw9Yy5tYXRjaChkZGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgaGRlPS9eW15cLygpPzs9I10rLyxwZGU9L15bXj0/JiNdKy8sbWRlPS9eW14mI10rLztjbGFzcyBfZGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmluZz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgeWEoW10se30pOm5ldyB5YShbXSx0aGlzLnBhcnNlQ2hpbGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygp''@;'; put 'put ''e2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJz''@;'; put 'put ''ZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgpKTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNX''@;'; put 'put ''aXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmplY3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW2xz''@;'; put 'put ''XT1uZXcgeWEobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPXpPKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgQXIoNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShsKSxuZXcgUl8od3gobCksdGhpcy5wYXJzZU1h''@;'; put 'put ''dHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIGZkZShjKXtjb25zdCBsPWMubWF0Y2goaGRlKTty''@;'; put 'put ''ZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPXpPKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRoaXMuY2FwdHVyZShkKSl9bFt3eChhKV09d3go''@;'; put 'put ''ZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gZ2RlKGMpe2NvbnN0IGw9Yy5tYXRjaChwZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9''@;'; put 'put ''Iikpe2NvbnN0IF89ZnVuY3Rpb24gdmRlKGMpe2NvbnN0IGw9Yy5tYXRjaChtZGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtfJiYoZD1fLHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD0kRyhhKSxmPSRHKGQpO2lmKGwuaGFzT3duUHJvcGVydHkoaCkpe2xldCBfPWxbaF07''@;'; put 'put ''QXJyYXkuaXNBcnJheShfKXx8KF89W19dLGxbaF09XyksXy5wdXNoKGYpfWVsc2UgbFtoXT1mfXBhcnNlUGFyZW5zKGwpe2NvbnN0IGE9e307Zm9yKHRoaXMuY2FwdHVyZSgiKCIpOyF0aGlzLmNvbnN1bWVPcHRpb25hbCgiKSIpJiZ0aGlzLnJlbWFpbmluZy5sZW5ndGg+MDspe2NvbnN0IGQ9''@;'; put 'put ''ek8odGhpcy5yZW1haW5pbmcpLGg9dGhpcy5yZW1haW5pbmdbZC5sZW5ndGhdO2lmKCIvIiE9PWgmJiIpIiE9PWgmJiI7IiE9PWgpdGhyb3cgbmV3IEFyKDQwMTAsITEpO2xldCBmO2QuaW5kZXhPZigiOiIpPi0xPyhmPWQuc2xpY2UoMCxkLmluZGV4T2YoIjoiKSksdGhpcy5jYXB0dXJlKGYp''@;'; put 'put ''LHRoaXMuY2FwdHVyZSgiOiIpKTpsJiYoZj1scyk7Y29uc3QgXz10aGlzLnBhcnNlQ2hpbGRyZW4oKTthW2ZdPTE9PT1PYmplY3Qua2V5cyhfKS5sZW5ndGg/X1tsc106bmV3IHlhKFtdLF8pLHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvLyIpfXJldHVybiBhfXBlZWtTdGFydHNXaXRoKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnJlbWFpbmluZy5zdGFydHNXaXRoKGwpfWNvbnN1bWVPcHRpb25hbChsKXtyZXR1cm4hIXRoaXMucGVla1N0YXJ0c1dpdGgobCkmJih0aGlzLnJlbWFpbmluZz10aGlzLnJlbWFpbmluZy5zdWJzdHJpbmcobC5sZW5ndGgpLCEwKX1jYXB0dXJlKGwpe2lmKCF0aGlzLmNvbnN1''@;'; put 'put ''bWVPcHRpb25hbChsKSl0aHJvdyBuZXcgQXIoNDAxMSwhMSl9fWZ1bmN0aW9uIEtHKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyB5YShbXSx7W2xzXTpjfSk6Y31mdW5jdGlvbiBYRyhjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBkIG9mIE9iamVjdC5rZXlzKGMuY2hpbGRyZW4p''@;'; put 'put ''KXtjb25zdCBmPVhHKGMuY2hpbGRyZW5bZF0pO2lmKGQ9PT1scyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W18sVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW19dPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxk''@;'; put 'put ''cmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gYmRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bbHNdKXtjb25zdCBsPWMuY2hpbGRyZW5bbHNdO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0''@;'; put 'put ''dXJuIGN9KG5ldyB5YShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBENShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mICQ2fWZ1bmN0aW9uIEpHKGMpe2xldCBsO2NvbnN0IGg9S0coZnVuY3Rpb24gYShmKXtjb25zdCBfPXt9O2Zvcihjb25zdCBXIG9mIGYuY2hpbGRyZW4pe2NvbnN0IGllPWEoVyk7''@;'; put 'put ''X1tXLm91dGxldF09aWV9Y29uc3QgVD1uZXcgeWEoZi51cmwsXyk7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBRRyhjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiBVTyho''@;'; put 'put ''LGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gd2RlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3RoJiYiLyI9PT1jWzBdKXJldHVybiBuZXcgdCQoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLF8pPT57aWYoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW1csaWVdKT0+e1RbV109InN0cmluZyI9PXR5cGVvZiBpZT9pZS5zcGxpdCgiLyIpOmllfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVu''@;'; put 'put ''dFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT1fPyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxXKT0+ezA9PVcmJiIuIj09PVR8fCgwPT1XJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChU''@;'; put 'put ''KSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgdCQoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBVTyhoLGgsbmV3IHlhKFtdLHt9KSxhLGQpO2NvbnN0IF89ZnVuY3Rpb24gQ2RlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBTeChsLCEwLDApO2lmKCFh''@;'; put 'put ''KXJldHVybiBuZXcgU3gobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IFN4KGEsITAsMCk7Y29uc3QgZD1DeChjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIFNkZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFy''@;'; put 'put ''ZW50LCFkKXRocm93IG5ldyBBcig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgU3goZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPV8ucHJvY2Vzc0NoaWxkcmVuP0hfKF8uc2VnbWVudEdyb3Vw''@;'; put 'put ''LF8uaW5kZXgsZi5jb21tYW5kcyk6biQoXy5zZWdtZW50R3JvdXAsXy5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gVU8oaCxfLnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24gQ3goYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50''@;'; put 'put ''UGF0aH1mdW5jdGlvbiBGXyhjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBVTyhjLGwsYSxkLGgpe2xldCBfLGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1csaWVdKT0+e2ZbV109QXJyYXkuaXNBcnJheShpZSk/aWUu''@;'; put 'put ''bWFwKGdlPT5gJHtnZX1gKTpgJHtpZX1gfSksXz1jPT09bD9hOmUkKGMsbCxhKTtjb25zdCBUPUtHKFhHKF8pKTtyZXR1cm4gbmV3ICQ2KFQsZixoKX1mdW5jdGlvbiBlJChjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0p''@;'; put 'put ''PT57ZFtoXT1mPT09bD9hOmUkKGYsbCxhKX0pLG5ldyB5YShjLnNlZ21lbnRzLGQpfWNsYXNzIHQke2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZDeChkWzBdKSl0''@;'; put 'put ''aHJvdyBuZXcgQXIoNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoRl8pO2lmKGgmJmghPT1qRyhkKSl0aHJvdyBuZXcgQXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNz''@;'; put 'put ''IFN4e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiBuJChjLGwsYSl7aWYoY3x8KGM9bmV3IHlhKFtdLHt9KSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0''@;'; put 'put ''dXJuIEhfKGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIHhkZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IF89Yy5zZWdt''@;'; put 'put ''ZW50c1toXSxUPWFbZF07aWYoRl8oVCkpYnJlYWs7Y29uc3QgVz1gJHtUfWAsaWU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09VylicmVhaztpZihXJiZpZSYmIm9iamVjdCI9PXR5cGVvZiBpZSYmdm9pZCAwPT09aWUub3V0bGV0cyl7aWYoIWkkKFcsaWUsXykp''@;'; put 'put ''cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFpJChXLHt9LF8pKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5s''@;'; put 'put ''ZW5ndGgpe2NvbnN0IGY9bmV3IHlhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVuW2xzXT1uZXcgeWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksSF8oZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5n''@;'; put 'put ''dGg/bmV3IHlhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/Wk8oYyxsLGEpOmQubWF0Y2g/SF8oYywwLGgpOlpPKGMsbCxhKX1mdW5jdGlvbiBIXyhjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgeWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVu''@;'; put 'put ''Y3Rpb24gTWRlKGMpe3JldHVybiBGXyhjWzBdKT9jWzBdLm91dGxldHM6e1tsc106Y319KGEpLGg9e307aWYoIWRbbHNdJiZjLmNoaWxkcmVuW2xzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bbHNdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1IXyhjLmNoaWxk''@;'; put 'put ''cmVuW2xzXSxsLGEpO3JldHVybiBuZXcgeWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1yZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57InN0cmluZyI9PXR5cGVvZiBfJiYoXz1bX10pLG51bGwhPT1fJiYoaFtmXT1uJChjLmNoaWxkcmVuW2ZdLGwsXykpfSksT2Jq''@;'; put 'put ''ZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2YsX10pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09Xyl9KSxuZXcgeWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7''@;'; put 'put ''Y29uc3QgZj1hW2hdO2lmKEZfKGYpKXtjb25zdCBXPUVkZShmLm91dGxldHMpO3JldHVybiBuZXcgeWEoZCxXKX1pZigwPT09aCYmQ3goYVswXSkpe2QucHVzaChuZXcgUl8oYy5zZWdtZW50c1tsXS5wYXRoLHIkKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IF89Rl8oZik/Zi5vdXRsZXRz''@;'; put 'put ''W2xzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7XyYmVCYmQ3goVCk/KGQucHVzaChuZXcgUl8oXyxyJChUKSkpLGgrPTIpOihkLnB1c2gobmV3IFJfKF8se30pKSxoKyspfXJldHVybiBuZXcgeWEoZCx7fSl9ZnVuY3Rpb24gRWRlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9i''@;'; put 'put ''amVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2YgZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09Wk8obmV3IHlhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gciQoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgo''@;'; put 'put ''W2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBpJChjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmcmgobCxhLnBhcmFtZXRlcnMpfWNvbnN0IE5fPSJpbXBlcmF0aXZlIjtjbGFzcyBpaHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLnVybD1hfX1jbGFzcyBZTyBleHRlbmRz''@;'; put 'put ''IGloe2NvbnN0cnVjdG9yKGwsYSxkPSJpbXBlcmF0aXZlIixoPW51bGwpe3N1cGVyKGwsYSksdGhpcy50eXBlPTAsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJs''@;'; put 'put ''OiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGhwIGV4dGVuZHMgaWh7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT0xfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhp''@;'; put 'put ''cy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX1jbGFzcyBNeCBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9Mn10b1N0cmluZygpe3JldHVy''@;'; put 'put ''bmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgVl8gZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPTE2fX1jbGFzcyBXTyBleHRlbmRz''@;'; put 'put ''IGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPTN9dG9TdHJpbmcoKXtyZXR1cm5gTmF2aWdhdGlvbkVycm9yKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIGVycm9yOiAke3RoaXMuZXJyb3J9''@;'; put 'put ''KWB9fWNsYXNzIGtkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9NH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6ICck''@;'; put 'put ''e3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIEFkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRo''@;'; put 'put ''aXMuc3RhdGU9aCx0aGlzLnR5cGU9N310b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9''@;'; put 'put ''fWNsYXNzIFRkZSBleHRlbmRzIGloe2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9OH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDog''@;'; put 'put ''JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgRGRlIGV4dGVuZHMgaWh7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT01fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0''@;'; put 'put ''czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBJZGUgZXh0ZW5kcyBpaHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPTZ9dG9TdHJp''@;'; put 'put ''bmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBMZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0''@;'; put 'put ''ZT1sLHRoaXMudHlwZT05fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBSZGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT0xMH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xv''@;'; put 'put ''YWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIE9kZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTExfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRo''@;'; put 'put ''aXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBQZGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT0xMn10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYm''@;'; put 'put ''dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEZkZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPTEzfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0''@;'; put 'put ''aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgSGRle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9MTR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlz''@;'; put 'put ''LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgbyR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9MTV9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhp''@;'; put 'put ''cy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhpcy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBOZGV7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldD1udWxsLHRoaXMucm91dGU9bnVsbCx0aGlzLmluamVjdG9yPW51''@;'; put 'put ''bGwsdGhpcy5jaGlsZHJlbj1uZXcgQl8sdGhpcy5hdHRhY2hSZWY9bnVsbH19bGV0IEJfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHRzPW5ldyBNYXB9b25DaGlsZE91dGxldENyZWF0ZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVDb250ZXh0KGEpO2gu''@;'; put 'put ''b3V0bGV0PWQsdGhpcy5jb250ZXh0cy5zZXQoYSxoKX1vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGEpe2NvbnN0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO2QmJihkLm91dGxldD1udWxsLGQuYXR0YWNoUmVmPW51bGwpfW9uT3V0bGV0RGVhY3RpdmF0ZWQoKXtjb25zdCBhPXRoaXMuY29udGV4dHM7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udGV4dHM9bmV3IE1hcCxhfW9uT3V0bGV0UmVBdHRhY2hlZChhKXt0aGlzLmNvbnRleHRzPWF9Z2V0T3JDcmVhdGVDb250ZXh0KGEpe2xldCBkPXRoaXMuZ2V0Q29udGV4dChhKTtyZXR1cm4gZHx8KGQ9bmV3IE5kZSx0aGlzLmNvbnRleHRzLnNldChhLGQpKSxkfWdl''@;'; put 'put ''dENvbnRleHQoYSl7cmV0dXJuIHRoaXMuY29udGV4dHMuZ2V0KGEpfHxudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSko''@;'; put 'put ''KTtjbGFzcyBzJHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9yb290PWx9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm9vdC52YWx1ZX1wYXJlbnQobCl7Y29uc3QgYT10aGlzLnBhdGhGcm9tUm9vdChsKTtyZXR1cm4gYS5sZW5ndGg+MT9hW2EubGVuZ3RoLTJdOm51bGx9Y2hpbGRyZW4obCl7Y29u''@;'; put 'put ''c3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhP2EuY2hpbGRyZW4ubWFwKGQ9PmQudmFsdWUpOltdfWZpcnN0Q2hpbGQobCl7Y29uc3QgYT1HTyhsLHRoaXMuX3Jvb3QpO3JldHVybiBhJiZhLmNoaWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF0udmFsdWU6bnVsbH1zaWJsaW5ncyhs''@;'; put 'put ''KXtjb25zdCBhPSRPKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEubGVuZ3RoPDI/W106YVthLmxlbmd0aC0yXS5jaGlsZHJlbi5tYXAoaD0+aC52YWx1ZSkuZmlsdGVyKGg9PmghPT1sKX1wYXRoRnJvbVJvb3QobCl7cmV0dXJuICRPKGwsdGhpcy5fcm9vdCkubWFwKGE9PmEudmFsdWUpfX1mdW5j''@;'; put 'put ''dGlvbiBHTyhjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybiBsO2Zvcihjb25zdCBhIG9mIGwuY2hpbGRyZW4pe2NvbnN0IGQ9R08oYyxhKTtpZihkKXJldHVybiBkfXJldHVybiBudWxsfWZ1bmN0aW9uICRPKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuW2xdO2Zvcihjb25zdCBhIG9mIGwu''@;'; put 'put ''Y2hpbGRyZW4pe2NvbnN0IGQ9JE8oYyxhKTtpZihkLmxlbmd0aClyZXR1cm4gZC51bnNoaWZ0KGwpLGR9cmV0dXJuW119Y2xhc3MgeGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnZhbHVlPWwsdGhpcy5jaGlsZHJlbj1hfXRvU3RyaW5nKCl7cmV0dXJuYFRyZWVOb2RlKCR7dGhpcy52YWx1ZX0p''@;'; put 'put ''YH19ZnVuY3Rpb24gcTYoYyl7Y29uc3QgbD17fTtyZXR1cm4gYyYmYy5jaGlsZHJlbi5mb3JFYWNoKGE9PmxbYS52YWx1ZS5vdXRsZXRdPWEpLGx9Y2xhc3MgYSQgZXh0ZW5kcyBzJHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxxTyh0aGlzLGwpfXRvU3RyaW5n''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gbCQoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIFZkZShjLGwpe2NvbnN0IF89bmV3IHh4KFtdLHt9LHt9LCIiLHt9LGxzLGwsbnVsbCx7fSk7cmV0dXJuIG5ldyB1JCgiIixuZXcgeGYoXyxbXSkpfSgwLGwpLGQ9bmV3''@;'; put 'put ''IFRlKFtuZXcgUl8oIiIse30pXSksaD1uZXcgVGUoe30pLGY9bmV3IFRlKHt9KSxfPW5ldyBUZSh7fSksVD1uZXcgVGUoIiIpLFc9bmV3IFdsKGQsaCxfLFQsZixscyxsLGEucm9vdCk7cmV0dXJuIFcuc25hcHNob3Q9YS5yb290LG5ldyBhJChuZXcgeGYoVyxbXSksYSl9Y2xhc3MgV2x7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLF8sVCxXKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PV8sdGhpcy5jb21wb25lbnQ9VCx0''@;'; put 'put ''aGlzLl9mdXR1cmVTbmFwc2hvdD1XLHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShNZShpZT0+aWVbTF9dKSk/P1dpKHZvaWQgMCksdGhpcy51cmw9bCx0aGlzLnBhcmFtcz1hLHRoaXMucXVlcnlQYXJhbXM9ZCx0aGlzLmZyYWdtZW50PWgsdGhpcy5kYXRhPWZ9Z2V0IHJvdXRl''@;'; put 'put ''Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2Z1dHVyZVNuYXBzaG90LnJvdXRlQ29uZmlnfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwfHwodGhpcy5fcGFyYW1NYXA9dGhpcy5wYXJhbXMucGlwZShNZShsPT5HNihsKSkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwfHwodGhpcy5fcXVlcnlQYXJhbU1hcD10aGlzLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLnBpcGUoTWUobD0+RzYobCkpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGMkKGMsbD0iZW1wdHlP''@;'; put 'put ''bmx5Iil7Y29uc3QgYT1jLnBhdGhGcm9tUm9vdDtsZXQgZD0wO2lmKCJhbHdheXMiIT09bClmb3IoZD1hLmxlbmd0aC0xO2Q+PTE7KXtjb25zdCBoPWFbZF0sZj1hW2QtMV07aWYoaC5yb3V0ZUNvbmZpZyYmIiI9PT1oLnJvdXRlQ29uZmlnLnBhdGgpZC0tO2Vsc2V7aWYoZi5jb21wb25lbnQp''@;'; put 'put ''YnJlYWs7ZC0tfX1yZXR1cm4gZnVuY3Rpb24gQmRlKGMpe3JldHVybiBjLnJlZHVjZSgobCxhKT0+KHtwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmEucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYS5kYXRhfSxyZXNvbHZlOnsuLi5hLmRhdGEsLi4ubC5yZXNvbHZlLC4uLmEucm91dGVDb25m''@;'; put 'put ''aWc/LmRhdGEsLi4uYS5fcmVzb2x2ZWREYXRhfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KGEuc2xpY2UoZCkpfWNsYXNzIHh4e2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/LltMX119Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnVybD1sLHRo''@;'; put 'put ''aXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRhdGE9Zix0aGlzLm91dGxldD1fLHRoaXMuY29tcG9uZW50PVQsdGhpcy5yb3V0ZUNvbmZpZz1XLHRoaXMuX3Jlc29sdmU9aWV9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9v''@;'; put 'put ''dH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQgZmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlz''@;'; put 'put ''KX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9vdCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXB8fCh0aGlzLl9wYXJhbU1hcD1HNih0aGlzLnBhcmFtcykpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFt''@;'; put 'put ''TWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPUc2KHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIv''@;'; put 'put ''Iil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIHUkIGV4dGVuZHMgcyR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLHFPKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gZCQodGhpcy5fcm9vdCl9fWZ1''@;'; put 'put ''bmN0aW9uIHFPKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+cU8oYyxhKSl9ZnVuY3Rpb24gZCQoYyl7Y29uc3QgbD1jLmNoaWxkcmVuLmxlbmd0aD4wP2AgeyAke2MuY2hpbGRyZW4ubWFwKGQkKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7''@;'; put 'put ''Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBLTyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNuYXBzaG90PWEscmgobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFy''@;'; put 'put ''YW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxyaChsLnBhcmFtcyxhLnBhcmFtcyl8fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiB0ZGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVy''@;'; put 'put ''biExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFyaChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJsU3ViamVjdC5uZXh0KGEudXJsKSxyaChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBz''@;'; put 'put ''aG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBYTyhjLGwpe2NvbnN0IGE9cmgoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBvZGUoYyxsKXtyZXR1cm4gVDUoYyxsKSYmYy5ldmVyeSgoYSxkKT0+cmgo''@;'; put 'put ''YS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFyZW50fHxYTyhjLnBhcmVudCxsLnBhcmVudCkpfWxldCBmcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9''@;'; put 'put ''bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT1scyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBFcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IEVyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBFcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgRXIsdGhpcy5wYXJlbnRDb250''@;'; put 'put ''ZXh0cz1GaShCXyksdGhpcy5sb2NhdGlvbj1GaShhcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1GaShVYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPUZpKHEwKSx0aGlzLmlucHV0QmluZGVyPUZpKEV4LHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1''@;'; put 'put ''dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRl''@;'; put 'put ''eHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0''@;'; put 'put ''aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250''@;'; put 'put ''ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRl''@;'; put 'put ''ZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2''@;'; put 'put ''YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBu''@;'; put 'put ''ZXcgQXIoNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhy''@;'; put 'put ''b3cgbmV3IEFyKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxk''@;'; put 'put ''KXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3Rh''@;'; put 'put ''bmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0''@;'; put 'put ''aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgQXIoNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sXz1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0''@;'; put 'put ''KHRoaXMubmFtZSkuY2hpbGRyZW4sVz1uZXcgamRlKGEsVCxoLmluamVjdG9yKTt0aGlzLmFjdGl2YXRlZD1oLmNyZWF0ZUNvbXBvbmVudChfLHtpbmRleDpoLmxlbmd0aCxpbmplY3RvcjpXLGVudmlyb25tZW50SW5qZWN0b3I6ZD8/dGhpcy5lbnZpcm9ubWVudEluamVjdG9yfSksdGhpcy5j''@;'; put 'put ''aGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmFjdGl2YXRlRXZlbnRzLmVtaXQodGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0''@;'; put 'put ''dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdmFdfSksY30pKCk7Y2xhc3MgamRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhp''@;'; put 'put ''cy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PVdsP3RoaXMucm91dGU6bD09PUJfP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgRXg9bmV3IE1pKCIiKTtsZXQgaCQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1''@;'; put 'put ''YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFT''@;'; put 'put ''dWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTYoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlw''@;'; put 'put ''ZShTYSgoW2YsXyxUXSxXKT0+KFQ9ey4uLmYsLi4uXywuLi5UfSwwPT09Vz9XaShUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29t''@;'; put 'put ''cG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IF89ZnVuY3Rpb24gQ3VlKGMpe2NvbnN0IGw9UW8oYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgaDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9y''@;'; put 'put ''fSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRh''@;'; put 'put ''bG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKF8pZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIF8uaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0''@;'; put 'put ''aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pLGN9KSgpO2Z1bmN0aW9uIGpfKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBVZGUoYyxsLGEpe3JldHVybiBsLmNoaWxk''@;'; put 'put ''cmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBzaG90KSlyZXR1cm4gal8oYyxkLGgpO3JldHVybiBqXyhjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IHhmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNo''@;'; put 'put ''KGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IF89Zi5yb3V0ZTtyZXR1cm4gXy52YWx1ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSxfLmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKFQ9PmpfKGMsVCkpLF99fWNvbnN0IGQ9ZnVuY3Rpb24g''@;'; put 'put ''WmRlKGMpe3JldHVybiBuZXcgV2wobmV3IFRlKGMudXJsKSxuZXcgVGUoYy5wYXJhbXMpLG5ldyBUZShjLnF1ZXJ5UGFyYW1zKSxuZXcgVGUoYy5mcmFnbWVudCksbmV3IFRlKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+al8o''@;'; put 'put ''YyxmKSk7cmV0dXJuIG5ldyB4ZihkLGgpfX1jb25zdCBKTz0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIGYkKGMsbCl7Y29uc3R7cmVkaXJlY3RUbzphLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6ZH09RDUobCk/e3JlZGlyZWN0VG86bCxuYXZpZ2F0aW9uQmVoYXZp''@;'; put 'put ''b3JPcHRpb25zOnZvaWQgMH06bCxoPXAkKCExLDAsbCk7cmV0dXJuIGgudXJsPWEsaC5uYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPWQsaH1mdW5jdGlvbiBwJChjLGwsYSl7Y29uc3QgZD1uZXcgRXJyb3IoIk5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogIisoY3x8IiIpKTtyZXR1cm4gZFtK''@;'; put 'put ''T109ITAsZC5jYW5jZWxsYXRpb25Db2RlPWwsYSYmKGQudXJsPWEpLGR9ZnVuY3Rpb24gZyQoYyl7cmV0dXJuIG0kKGMpJiZENShjLnVybCl9ZnVuY3Rpb24gbSQoYyl7cmV0dXJuIGMmJmNbSk9dfWxldCB2JD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3BZXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxk''@;'; put 'put ''ZXBlbmRlbmNpZXM6W2ZwXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtmdW5jdGlvbiBRTyhjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFPKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4uLmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8''@;'; put 'put ''fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09bHMmJihhLmNvbXBvbmVudD12JCksYX1mdW5jdGlvbiB0MihjKXtyZXR1cm4gYy5vdXRsZXR8fGxzfWZ1bmN0aW9uIHpfKGMpe2lmKCFjKXJldHVybiBudWxsO2lmKGMucm91dGVDb25maWc/Ll9pbmplY3RvcilyZXR1cm4g''@;'; put 'put ''Yy5yb3V0ZUNvbmZpZy5faW5qZWN0b3I7Zm9yKGxldCBsPWMucGFyZW50O2w7bD1sLnBhcmVudCl7Y29uc3QgYT1sLnJvdXRlQ29uZmlnO2lmKGE/Ll9sb2FkZWRJbmplY3RvcilyZXR1cm4gYS5fbG9hZGVkSW5qZWN0b3I7aWYoYT8uX2luamVjdG9yKXJldHVybiBhLl9pbmplY3Rvcn1yZXR1''@;'; put 'put ''cm4gbnVsbH1jbGFzcyBYZGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1sLHRoaXMuZnV0dXJlU3RhdGU9YSx0aGlzLmN1cnJTdGF0ZT1kLHRoaXMuZm9yd2FyZEV2ZW50PWgsdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPWZ9YWN0aXZhdGUobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLmZ1dHVyZVN0YXRlLl9yb290LGQ9dGhpcy5jdXJyU3RhdGU/dGhpcy5jdXJyU3RhdGUuX3Jvb3Q6bnVsbDt0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCksS08odGhpcy5mdXR1cmVTdGF0ZS5yb290KSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpfWRl''@;'; put 'put ''YWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCl7Y29uc3QgaD1xNihhKTtsLmNoaWxkcmVuLmZvckVhY2goZj0+e2NvbnN0IF89Zi52YWx1ZS5vdXRsZXQ7dGhpcy5kZWFjdGl2YXRlUm91dGVzKGYsaFtfXSxkKSxkZWxldGUgaFtfXX0pLE9iamVjdC52YWx1ZXMoaCkuZm9yRWFjaChmPT57dGhp''@;'; put 'put ''cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmLGQpfSl9ZGVhY3RpdmF0ZVJvdXRlcyhsLGEsZCl7Y29uc3QgaD1sLnZhbHVlLGY9YT9hLnZhbHVlOm51bGw7aWYoaD09PWYpaWYoaC5jb21wb25lbnQpe2NvbnN0IF89ZC5nZXRDb250ZXh0KGgub3V0bGV0KTtfJiZ0aGlzLmRlYWN0''@;'; put 'put ''aXZhdGVDaGlsZFJvdXRlcyhsLGEsXy5jaGlsZHJlbil9ZWxzZSB0aGlzLmRlYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBmJiZ0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGEsZCl9ZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4obCxhKXtsLnZhbHVlLmNv''@;'; put 'put ''bXBvbmVudCYmdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkRGV0YWNoKGwudmFsdWUuc25hcHNob3QpP3RoaXMuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKTp0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpfWRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGws''@;'; put 'put ''YSl7Y29uc3QgZD1hLmdldENvbnRleHQobC52YWx1ZS5vdXRsZXQpLGg9ZCYmbC52YWx1ZS5jb21wb25lbnQ/ZC5jaGlsZHJlbjphLGY9cTYobCk7Zm9yKGNvbnN0IF8gb2YgT2JqZWN0LmtleXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihmW19dLGgpO2lmKGQmJmQu''@;'; put 'put ''b3V0bGV0KXtjb25zdCBfPWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOl8scm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVS''@;'; put 'put ''b3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXE2KGwpO2Zvcihjb25zdCBfIG9mIE9iamVjdC5rZXlzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4o''@;'; put 'put ''ZltfXSxoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5yb3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXE2KGEpO2wuY2hpbGRyZW4uZm9y''@;'; put 'put ''RWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBIZGUoZi52YWx1ZS5zbmFwc2hvdCkpfSksbC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBQZGUobC52YWx1ZS5zbmFwc2hvdCkpfWFj''@;'; put 'put ''dGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihLTyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxfLmNoaWxkcmVuKX1l''@;'; put 'put ''bHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3QgXz1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBUPXRoaXMucm91''@;'; put 'put ''dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksXy5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoVC5jb250ZXh0cyksXy5hdHRhY2hSZWY9VC5jb21wb25lbnRSZWYsXy5yb3V0ZT1ULnJv''@;'; put 'put ''dXRlLnZhbHVlLF8ub3V0bGV0JiZfLm91dGxldC5hdHRhY2goVC5jb21wb25lbnRSZWYsVC5yb3V0ZS52YWx1ZSksS08oVC5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxfLmNoaWxkcmVuKX1lbHNle2NvbnN0IFQ9el8oaC5zbmFwc2hvdCk7Xy5hdHRhY2hS''@;'; put 'put ''ZWY9bnVsbCxfLnJvdXRlPWgsXy5pbmplY3Rvcj1ULF8ub3V0bGV0JiZfLm91dGxldC5hY3RpdmF0ZVdpdGgoaCxfLmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLF8uY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNs''@;'; put 'put ''YXNzIF8ke2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIGt4e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIEpkZShjLGwsYSl7Y29uc3QgZD1jLl9y''@;'; put 'put ''b290O3JldHVybiBVXyhkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBLNihjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBlb2YgY3x8ZnVuY3Rpb24gcTcoYyl7cmV0dXJuIG51bGwhPT14ZChjKX0oYyk/''@;'; put 'put ''bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIFVfKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cTYobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFjaChfPT57KGZ1bmN0aW9uIGUyZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVD''@;'; put 'put ''aGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsXz1sP2wudmFsdWU6bnVsbCxUPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKF8mJmYucm91dGVDb25maWc9PT1fLnJvdXRlQ29uZmlnKXtjb25zdCBXPWZ1bmN0aW9uIHQyZShjLGws''@;'; put 'put ''YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hVDUoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFUNShjLnVybCxsLnVybCl8fCFyaChjLnF1''@;'; put 'put ''ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYTyhjLGwpfHwhcmgoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYTyhjLGwpfX0oXyxmLGYucm91dGVD''@;'; put 'put ''b25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtXP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgXyQoZCkpOihmLmRhdGE9Xy5kYXRhLGYuX3Jlc29sdmVkRGF0YT1fLl9yZXNvbHZlZERhdGEpLFVfKGMsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCksVyYmVCYm''@;'; put 'put ''VC5vdXRsZXQmJlQub3V0bGV0LmlzQWN0aXZhdGVkJiZoLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3goVC5vdXRsZXQuY29tcG9uZW50LF8pKX1lbHNlIF8mJlpfKGwsVCxoKSxoLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IF8kKGQpKSxVXyhjLG51bGwsZi5jb21wb25lbnQ/''@;'; put 'put ''VD9ULmNoaWxkcmVuOm51bGw6YSxkLGgpfSkoXyxmW18udmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFtfLnZhbHVlXSksaCksZGVsZXRlIGZbXy52YWx1ZS5vdXRsZXRdfSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW18sVF0pPT5aXyhULGEuZ2V0Q29udGV4dChfKSxoKSksaH1mdW5j''@;'; put 'put ''dGlvbiBaXyhjLGwsYSl7Y29uc3QgZD1xNihjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2YsX10pPT57Wl8oXyxoLmNvbXBvbmVudD9sP2wuY2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcga3go''@;'; put 'put ''aC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gWV8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gYiQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBneHx8IkVtcHR5RXJy''@;'; put 'put ''b3IiPT09Yz8ubmFtZX1jb25zdCBBeD1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBYNigpe3JldHVybiBTYShjPT5ZNihjLm1hcChsPT5sLnBpcGUoaWQoMSksY3AoQXgpKSkpLnBpcGUoTWUobD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09QXgpcmV0dXJu''@;'; put 'put ''IEF4O2lmKCExPT09YXx8YSBpbnN0YW5jZW9mICQ2KXJldHVybiBhfXJldHVybiEwfSksSWEobD0+bCE9PUF4KSxpZCgxKSkpfWZ1bmN0aW9uIHkkKGMpe3JldHVybiBmdW5jdGlvbiBqZSguLi5jKXtyZXR1cm4gV2UoYyl9KHpjKGw9PntpZihENShsKSl0aHJvdyBmJCgwLGwpfSksTWUobD0+''@;'; put 'put ''ITA9PT1sKSl9Y2xhc3MgVHh7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgdyR7Y29uc3RydWN0b3IobCl7dGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIEo2KGMpe3JldHVybiBEXyhuZXcgVHgoYykpfWZ1bmN0aW9uIEMkKGMpe3JldHVybiBEXyhuZXcg''@;'; put 'put ''dyQoYykpfWNsYXNzIHcyZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfW5vTWF0Y2hFcnJvcihsKXtyZXR1cm4gbmV3IEFyKDQwMDIsITEpfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1k''@;'; put 'put ''LmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBXaShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bbHNdKXJldHVybiBEXyhuZXcgQXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuW2xzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGws''@;'; put 'put ''YSxkKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRlVXJsVHJlZShhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhKSxsLGQpfWFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1''@;'; put 'put ''cm4gbmV3ICQ2KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQYXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9Pntp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBUPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtUXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2VnbWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTts''@;'; put 'put ''ZXQgXz17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW1QsV10pPT57X1tUXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLFcsZCxoKX0pLG5ldyB5YShmLF8pfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRz''@;'; put 'put ''V2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vic3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgQXIoNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7''@;'; put 'put ''bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBlUD17bWF0Y2hlZDohMSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25h''@;'; put 'put ''bFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIEMyZShjLGwsYSxkLGgpe2NvbnN0IGY9dFAoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gWWRlKGMsbCl7cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1BUihjLnByb3ZpZGVycyxsLGBS''@;'; put 'put ''b3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIF8yZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxlbmd0aD9XaShoLm1hcChfPT57Y29uc3QgVD1LNihfLGMpO3JldHVybiBkcChmdW5jdGlvbiBhMmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJllfKGMuY2FuTWF0Y2gpfShUKT9ULmNhbk1hdGNoKGwsYSk6Yy5ydW5JbkNvbnRleHQoKCk9PlQobCxhKSkpfSkpLnBpcGUoWDYoKSx5JCgpKTpXaSghMCl9KGQsbCxhKS5waXBlKE1lKF89PiEwPT09Xz9mOnsuLi5lUH0pKSk6V2koZil9ZnVuY3Rpb24gdFAoYyxsLGEpe2lmKCIiPT09''@;'; put 'put ''bC5wYXRoKXJldHVybiJmdWxsIj09PWwucGF0aE1hdGNoJiYoYy5oYXNDaGlsZHJlbigpfHxhLmxlbmd0aD4wKT97Li4uZVB9OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6YSxwYXJhbWV0ZXJzOnt9LHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9''@;'; put 'put ''fTtjb25zdCBoPShsLm1hdGNoZXJ8fGVkZSkoYSxjLGwpO2lmKCFoKXJldHVybnsuLi5lUH07Y29uc3QgZj17fTtPYmplY3QuZW50cmllcyhoLnBvc1BhcmFtcz8/e30pLmZvckVhY2goKFtULFddKT0+e2ZbVF09Vy5wYXRofSk7Y29uc3QgXz1oLmNvbnN1bWVkLmxlbmd0aD4wP3suLi5mLC4u''@;'; put 'put ''LmguY29uc3VtZWRbaC5jb25zdW1lZC5sZW5ndGgtMV0ucGFyYW1ldGVyc306ZjtyZXR1cm57bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOmguY29uc3VtZWQscmVtYWluaW5nU2VnbWVudHM6YS5zbGljZShoLmNvbnN1bWVkLmxlbmd0aCkscGFyYW1ldGVyczpfLHBvc2l0aW9uYWxQYXJh''@;'; put 'put ''bVNlZ21lbnRzOmgucG9zUGFyYW1zPz97fX19ZnVuY3Rpb24gUyQoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIHgyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkmJnQyKGQpIT09bHMpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEobCxNMmUoZCxu''@;'; put 'put ''ZXcgeWEoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIEUyZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5EeChjLGwsZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxTMmUoYywwLGEsZCxjLmNoaWxkcmVu''@;'; put 'put ''KSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgeWEoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBTMmUoYyxsLGEsZCxoKXtjb25zdCBmPXt9O2Zvcihjb25zdCBfIG9mIGQpaWYoRHgoYyxhLF8pJiYhaFt0MihfKV0pe2NvbnN0''@;'; put 'put ''IFQ9bmV3IHlhKFtdLHt9KTtmW3QyKF8pXT1UfXJldHVybnsuLi5oLC4uLmZ9fWZ1bmN0aW9uIE0yZShjLGwpe2NvbnN0IGE9e307YVtsc109bDtmb3IoY29uc3QgZCBvZiBjKWlmKCIiPT09ZC5wYXRoJiZ0MihkKSE9PWxzKXtjb25zdCBoPW5ldyB5YShbXSx7fSk7YVt0MihkKV09aH1yZXR1''@;'; put 'put ''cm4gYX1mdW5jdGlvbiBEeChjLGwsYSl7cmV0dXJuKCEoYy5oYXNDaGlsZHJlbigpfHxsLmxlbmd0aD4wKXx8ImZ1bGwiIT09YS5wYXRoTWF0Y2gpJiYiIj09PWEucGF0aH1jbGFzcyBEMmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8sVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9h''@;'; put 'put ''ZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PV8sdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLmFwcGx5UmVkaXJlY3RzPW5ldyB3MmUo''@;'; put 'put ''dGhpcy51cmxTZXJpYWxpemVyLHRoaXMudXJsVHJlZSl9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgQXIoNDAwMiwhMSl9cmVjb2duaXplKCl7Y29uc3QgbD1TJCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLnByb2Nlc3NT''@;'; put 'put ''ZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLGxzKS5waXBlKEE1KGE9PntpZihhIGluc3RhbmNlb2YgdyQpcmV0dXJuIHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEsdGhpcy51cmxUcmVlPWEudXJsVHJlZSx0aGlzLm1hdGNoKGEudXJsVHJlZSk7dGhyb3cgYSBpbnN0YW5j''@;'; put 'put ''ZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGEpOmF9KSxNZShhPT57Y29uc3QgZD1uZXcgeHgoW10sT2JqZWN0LmZyZWV6ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LGxzLHRoaXMucm9vdENvbXBvbmVu''@;'; put 'put ''dFR5cGUsbnVsbCx7fSksaD1uZXcgeGYoZCxhKSxmPW5ldyB1JCgiIixoKSxfPWZ1bmN0aW9uIHlkZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIFFHKEpHKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gXy5x''@;'; put 'put ''dWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfKSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QpLHtzdGF0ZTpmLHRyZWU6X319KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRH''@;'; put 'put ''cm91cCh0aGlzLmluamVjdG9yLHRoaXMuY29uZmlnLGwucm9vdCxscykucGlwZShBNShkPT57dGhyb3cgZCBpbnN0YW5jZW9mIFR4P3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCl7Y29uc3QgYT1sLnZhbHVlLGQ9YyQoYSx0aGlzLnBhcmFtc0luaGVy''@;'; put 'put ''aXRhbmNlU3RyYXRlZ3kpO2EucGFyYW1zPU9iamVjdC5mcmVlemUoZC5wYXJhbXMpLGEuZGF0YT1PYmplY3QuZnJlZXplKGQuZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGg9PnRoaXMuaW5oZXJpdFBhcmFtc0FuZERhdGEoaCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJu''@;'; put 'put ''IDA9PT1kLnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVj''@;'; put 'put ''dC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gZWEoaCkucGlwZShXNihmPT57Y29uc3QgXz1kLmNoaWxkcmVuW2ZdLFQ9ZnVuY3Rpb24gcWRlKGMsbCl7Y29uc3QgYT1jLmZpbHRlcihkPT50MihkKT09PWwpO3JldHVybiBhLnB1''@;'; put 'put ''c2goLi4uYy5maWx0ZXIoZD0+dDIoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsVCxfLGYpfSksZnVuY3Rpb24gWDFlKGMsbCl7cmV0dXJuIFhlKGZ1bmN0aW9uIEsxZShjLGwsYSxkLGgpe3JldHVybihmLF8pPT57bGV0IFQ9YSxXPWwsaWU9MDtm''@;'; put 'put ''LnN1YnNjcmliZShVZShfLGdlPT57Y29uc3Qgd2U9aWUrKztXPVQ/YyhXLGdlLHdlKTooVD0hMCxnZSksZCYmXy5uZXh0KFcpfSxoJiYoKCk9PntUJiZfLm5leHQoVyksXy5jb21wbGV0ZSgpfSkpKX19KGMsbCxhcmd1bWVudHMubGVuZ3RoPj0yLCEwKSl9KChmLF8pPT4oZi5wdXNoKC4uLl8p''@;'; put 'put ''LGYpKSx2eChudWxsKSxmdW5jdGlvbiBKMWUoYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0lhKChoLGYpPT5jKGgsZixkKSk6T2UsVk8oMSksYT92eChsKTpORygoKT0+bmV3IGd4KSl9KCkseXIoZj0+e2lmKG51bGw9PT1mKXJldHVybiBKNihk''@;'; put 'put ''KTtjb25zdCBfPU0kKGYpO3JldHVybiBmdW5jdGlvbiBJMmUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PWxzPy0xOmEudmFsdWUub3V0bGV0PT09bHM/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUub3V0bGV0KSl9KF8pLFdpKF8pfSkpfXByb2Nlc3NT''@;'; put 'put ''ZWdtZW50KGwsYSxkLGgsZixfKXtyZXR1cm4gZWEoYSkucGlwZShXNihUPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKFQuX2luamVjdG9yPz9sLGEsVCxkLGgsZixfKS5waXBlKEE1KFc9PntpZihXIGluc3RhbmNlb2YgVHgpcmV0dXJuIFdpKG51bGwpO3Rocm93IFd9KSkpLHVw''@;'; put 'put ''KFQ9PiEhVCksQTUoVD0+e2lmKGIkKFQpKXJldHVybiBmdW5jdGlvbiBBMmUoYyxsLGEpe3JldHVybiAwPT09bC5sZW5ndGgmJiFjLmNoaWxkcmVuW2FdfShkLGgsZik/V2koW10pOko2KGQpO3Rocm93IFR9KSl9cHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLF8sVCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIGsyZShjLGwsYSxkKXtyZXR1cm4hISh0MihjKT09PWR8fGQhPT1scyYmRHgobCxhLGMpKSYmKCIqKiI9PT1jLnBhdGh8fHRQKGwsYyxhKS5tYXRjaGVkKX0oZCxoLGYsXyk/dm9pZCAwPT09ZC5yZWRpcmVjdFRvP3RoaXMubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGws''@;'; put 'put ''aCxkLGYsXyxUKTpUJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLF8pOko2KGgpOko2KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZixfKXtyZXR1cm4iKioi''@;'; put 'put ''PT09aC5wYXRoP3RoaXMuZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGQsaCxfKTp0aGlzLmV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl9ZXhwYW5kV2lsZENhcmRXaXRoUGFyYW1zQWdh''@;'; put 'put ''aW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoKXtjb25zdCBmPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKFtdLGQucmVkaXJlY3RUbyx7fSk7cmV0dXJuIGQucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQoZik6dGhpcy5hcHBseVJlZGlyZWN0cy5s''@;'; put 'put ''aW5lcmFsaXplU2VnbWVudHMoZCxmKS5waXBlKHlyKF89Pntjb25zdCBUPW5ldyB5YShfLHt9KTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudChsLGEsVCxfLGgsITEpfSkpfWV4cGFuZFJlZ3VsYXJTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGEsZCxoLGYsXyl7Y29uc3R7''@;'; put 'put ''bWF0Y2hlZDpULGNvbnN1bWVkU2VnbWVudHM6VyxyZW1haW5pbmdTZWdtZW50czppZSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpnZX09dFAoYSxoLGYpO2lmKCFUKXJldHVybiBKNihhKTtjb25zdCB3ZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhXLGgucmVk''@;'; put 'put ''aXJlY3RUbyxnZSk7cmV0dXJuIGgucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIik/QyQod2UpOnRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsd2UpLnBpcGUoeXIoRWU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsRWUuY29uY2F0KGllKSxfLCExKSkpfW1hdGNo''@;'; put 'put ''U2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYsXyl7bGV0IFQ7aWYoIioqIj09PWQucGF0aCl7Y29uc3QgVz1oLmxlbmd0aD4wP2pHKGgpLnBhcmFtZXRlcnM6e307VD1XaSh7c25hcHNob3Q6bmV3IHh4KGgsVyxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9''@;'; put 'put ''KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQseCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdfSksYS5jaGlsZHJlbj17fX1lbHNlIFQ9QzJlKGEsZCxoLGwpLnBpcGUo''@;'; put 'put ''TWUoKHttYXRjaGVkOlcsY29uc3VtZWRTZWdtZW50czppZSxyZW1haW5pbmdTZWdtZW50czpnZSxwYXJhbWV0ZXJzOndlfSk9Plc/e3NuYXBzaG90Om5ldyB4eChpZSx3ZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQs''@;'; put 'put ''eCQoZCksdDIoZCksZC5jb21wb25lbnQ/P2QuX2xvYWRlZENvbXBvbmVudD8/bnVsbCxkLEUkKGQpKSxjb25zdW1lZFNlZ21lbnRzOmllLHJlbWFpbmluZ1NlZ21lbnRzOmdlfTpudWxsKSk7cmV0dXJuIFQucGlwZShTYShXPT5udWxsPT09Vz9KNihhKTp0aGlzLmdldENoaWxkQ29uZmlnKGw9''@;'; put 'put ''ZC5faW5qZWN0b3I/P2wsZCxoKS5waXBlKFNhKCh7cm91dGVzOmllfSk9Pntjb25zdCBnZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7c25hcHNob3Q6d2UsY29uc3VtZWRTZWdtZW50czpFZSxyZW1haW5pbmdTZWdtZW50czpaZX09Vyx7c2VnbWVudEdyb3VwOm90LHNsaWNlZFNlZ21lbnRzOmV0''@;'; put 'put ''fT1TJChhLEVlLFplLGllKTtpZigwPT09ZXQubGVuZ3RoJiZvdC5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihnZSxpZSxvdCkucGlwZShNZShrdD0+bnVsbD09PWt0P251bGw6W25ldyB4Zih3ZSxrdCldKSk7aWYoMD09PWllLmxlbmd0aCYmMD09PWV0Lmxlbmd0''@;'; put 'put ''aClyZXR1cm4gV2koW25ldyB4Zih3ZSxbXSldKTtjb25zdCB5dD10MihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoZ2UsaWUsb3QsZXQseXQ/bHM6ZiwhMCkucGlwZShNZShrdD0+W25ldyB4Zih3ZSxrdCldKSl9KSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEu''@;'; put 'put ''Y2hpbGRyZW4/V2koe3JvdXRlczphLmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/V2koe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiB2MmUoYyxsLGEsZCl7Y29u''@;'; put 'put ''c3QgaD1sLmNhbkxvYWQ7cmV0dXJuIHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9XaSghMCk6V2koaC5tYXAoXz0+e2NvbnN0IFQ9SzYoXyxjKTtyZXR1cm4gZHAoZnVuY3Rpb24gcjJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkxvYWQpfShUKT9ULmNhbkxvYWQobCxhKTpjLnJ1bkluQ29udGV4''@;'; put 'put ''dCgoKT0+VChsLGEpKSl9KSkucGlwZShYNigpLHkkKCkpfShsLGEsZCkucGlwZSh5cihoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoemMoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0''@;'; put 'put ''aW9uIHkyZShjKXtyZXR1cm4gRF8ocCQoITEsMykpfSgpKSk6V2koe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIEwyZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIE0kKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0''@;'; put 'put ''O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFMMmUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNoKC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTps''@;'; put 'put ''LnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD1NJChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IHhmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHgkKGMpe3JldHVybiBjLmRhdGF8fHt9fWZ1bmN0aW9uIEUkKGMpe3JldHVybiBjLnJl''@;'; put 'put ''c29sdmV8fHt9fWZ1bmN0aW9uIE8yZShjLGwpe3JldHVybiB5cihhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gV2koYSk7bGV0IGY9MDtyZXR1cm4gZWEoaCkucGlwZShXNihfPT5mdW5jdGlvbiBQ''@;'; put 'put ''MmUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFrJChoKSYmKGZbTF9dPWgudGl0bGUpLGZ1bmN0aW9uIEYyZShjLGwsYSxkKXtjb25zdCBoPWZ1bmN0aW9uIEgyZShjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMo''@;'; put 'put ''YyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19KGMpO2lmKDA9PT1oLmxlbmd0aClyZXR1cm4gV2koe30pO2NvbnN0IGY9e307cmV0dXJuIGVhKGgpLnBpcGUoeXIoXz0+ZnVuY3Rpb24gTjJlKGMsbCxhLGQpe2NvbnN0IGg9el8obCk/P2QsZj1LNihjLGgpO3JldHVybiBk''@;'; put 'put ''cChmLnJlc29sdmU/Zi5yZXNvbHZlKGwsYSk6aC5ydW5JbkNvbnRleHQoKCk9PmYobCxhKSkpfShjW19dLGwsYSxkKS5waXBlKHVwKCksemMoVD0+e2ZbX109VH0pKSksVk8oMSksZnVuY3Rpb24gVkcoYyl7cmV0dXJuIE1lKCgpPT5jKX0oZiksQTUoXz0+YiQoXyk/TG86RF8oXykpKX0oZixj''@;'; put 'put ''LGwsZCkucGlwZShNZShfPT4oYy5fcmVzb2x2ZWREYXRhPV8sYy5kYXRhPWMkKGMsYSkucmVzb2x2ZSxoJiZrJChoKSYmKGMuZGF0YVtMX109aC50aXRsZSksbnVsbCkpKX0oXy5yb3V0ZSxkLGMsbCkpLHpjKCgpPT5mKyspLFZPKDEpLHlyKF89PmY9PT1oLmxlbmd0aD9XaShhKTpMbykpfSl9''@;'; put 'put ''ZnVuY3Rpb24gayQoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjLnRpdGxlfHxudWxsPT09Yy50aXRsZX1mdW5jdGlvbiBuUChjKXtyZXR1cm4gU2EobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9lYShhKS5waXBlKE1lKCgpPT5sKSk6V2kobCl9KX1jb25zdCBRNj1uZXcgTWkoIlJPVVRF''@;'; put 'put ''UyIpO2xldCByUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9RmkoblcpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2Fk''@;'; put 'put ''ZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25lbnQpcmV0dXJuIFdpKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1kcChh''@;'; put 'put ''LmxvYWRDb21wb25lbnQoKSkucGlwZShNZShBJCksemMoZj0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoYSksYS5fbG9hZGVkQ29tcG9uZW50PWZ9KSxJXygoKT0+e3RoaXMuY29tcG9uZW50TG9hZGVycy5kZWxldGUoYSl9KSksaD1uZXcgSEcoZCwo''@;'; put 'put ''KT0+bmV3IGJlKS5waXBlKE5PKCkpO3JldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuc2V0KGEsaCksaH1sb2FkQ2hpbGRyZW4oYSxkKXtpZih0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCkpcmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKTtpZihkLl9sb2FkZWRSb3V0ZXMp''@;'; put 'put ''cmV0dXJuIFdpKHtyb3V0ZXM6ZC5fbG9hZGVkUm91dGVzLGluamVjdG9yOmQuX2xvYWRlZEluamVjdG9yfSk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoZCk7Y29uc3QgZj10aGlzLmxvYWRNb2R1bGVGYWN0b3J5T3JSb3V0ZXMoZC5sb2FkQ2hp''@;'; put 'put ''bGRyZW4pLnBpcGUoTWUoVD0+e3RoaXMub25Mb2FkRW5kTGlzdGVuZXImJnRoaXMub25Mb2FkRW5kTGlzdGVuZXIoZCk7bGV0IFcsaWU7cmV0dXJuIEFycmF5LmlzQXJyYXkoVCk/aWU9VDooVz1ULmNyZWF0ZShhKS5pbmplY3RvcixpZT1XLmdldChRNixbXSxucy5TZWxmfG5zLk9wdGlvbmFs''@;'; put 'put ''KS5mbGF0KCkpLHtyb3V0ZXM6aWUubWFwKFFPKSxpbmplY3RvcjpXfX0pLElfKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLF89bmV3IEhHKGYsKCk9Pm5ldyBiZSkucGlwZShOTygpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsXyksX31sb2FkTW9k''@;'; put 'put ''dWxlRmFjdG9yeU9yUm91dGVzKGEpe3JldHVybiBkcChhKCkpLnBpcGUoTWUoQSQpLHlyKGQ9PmQgaW5zdGFuY2VvZiBsY3x8QXJyYXkuaXNBcnJheShkKT9XaShkKTplYSh0aGlzLmNvbXBpbGVyLmNvbXBpbGVNb2R1bGVBc3luYyhkKSkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gQSQoYyl7cmV0dXJuIGZ1bmN0aW9uIFYyZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVm''@;'; put 'put ''YXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgSXg9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1''@;'; put 'put ''bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgYmUsdGhpcy5jb25maWdMb2FkZXI9RmkoclApLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1GaShxMCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLnJvb3RDb250ZXh0cz1GaShCXyksdGhpcy5pbnB1dEJpbmRpbmdFbmFi''@;'; put 'put ''bGVkPW51bGwhPT1GaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT5XaSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2''@;'; put 'put ''ZW50cy5uZXh0KG5ldyBSZGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgTGRlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3Qg''@;'; put 'put ''ZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlvbnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgVGUoe2lkOjAsY3VycmVudFVybFRyZWU6YS5jdXJyZW50''@;'; put 'put ''VXJsVHJlZSxjdXJyZW50UmF3VXJsOmEuY3VycmVudFVybFRyZWUsZXh0cmFjdGVkVXJsOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUpLHVybEFmdGVyUmVkaXJlY3RzOmEudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGEuY3VycmVudFVybFRyZWUp''@;'; put 'put ''LHJhd1VybDphLmN1cnJlbnRVcmxUcmVlLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpOXyxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90OmEucm91dGVyU3RhdGUuc25hcHNob3QsdGFyZ2V0U25h''@;'; put 'put ''cHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6YS5yb3V0ZXJTdGF0ZSx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoSWEo''@;'; put 'put ''ZD0+MCE9PWQuaWQpLE1lKGQ9Pih7Li4uZCxleHRyYWN0ZWRVcmw6YS51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZC5yYXdVcmwpfSkpLFNhKGQ9PntsZXQgaD0hMSxmPSExO3JldHVybiBXaShkKS5waXBlKHpjKF89Pnt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpfLmlkLGluaXRp''@;'; put 'put ''YWxVcmw6Xy5yYXdVcmwsZXh0cmFjdGVkVXJsOl8uZXh0cmFjdGVkVXJsLHRyaWdnZXI6Xy5zb3VyY2UsZXh0cmFzOl8uZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlv''@;'; put 'put ''dXNOYXZpZ2F0aW9uOm51bGx9Om51bGx9fSksU2EoXz0+e2NvbnN0IFQ9YS5icm93c2VyVXJsVHJlZS50b1N0cmluZygpLFc9IWEubmF2aWdhdGVkfHxfLmV4dHJhY3RlZFVybC50b1N0cmluZygpIT09VHx8VCE9PWEuY3VycmVudFVybFRyZWUudG9TdHJpbmcoKTtpZighVyYmInJlbG9hZCIh''@;'; put 'put ''PT0oXy5leHRyYXMub25TYW1lVXJsTmF2aWdhdGlvbj8/YS5vblNhbWVVcmxOYXZpZ2F0aW9uKSl7Y29uc3QgZ2U9IiI7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFZfKF8uaWQsYS5zZXJpYWxpemVVcmwoZC5yYXdVcmwpLGdlLDApKSxhLnJhd1VybFRyZWU9Xy5yYXdVcmwsXy5yZXNv''@;'; put 'put ''bHZlKG51bGwpLExvfWlmKGEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKF8ucmF3VXJsKSlyZXR1cm4gVCQoXy5zb3VyY2UpJiYoYS5icm93c2VyVXJsVHJlZT1fLmV4dHJhY3RlZFVybCksV2koXykucGlwZShTYShnZT0+e2NvbnN0IHdlPXRoaXMudHJhbnNpdGlvbnM/''@;'; put 'put ''LmdldFZhbHVlKCk7cmV0dXJuIHRoaXMuZXZlbnRzLm5leHQobmV3IFlPKGdlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZ2UuZXh0cmFjdGVkVXJsKSxnZS5zb3VyY2UsZ2UucmVzdG9yZWRTdGF0ZSkpLHdlIT09dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKT9MbzpQcm9t''@;'; put 'put ''aXNlLnJlc29sdmUoZ2UpfSksZnVuY3Rpb24gUjJlKGMsbCxhLGQsaCxmKXtyZXR1cm4geXIoXz0+ZnVuY3Rpb24gVDJlKGMsbCxhLGQsaCxmLF89ImVtcHR5T25seSIpe3JldHVybiBuZXcgRDJlKGMsbCxhLGQsaCxfLGYpLnJlY29nbml6ZSgpfShjLGwsYSxkLF8uZXh0cmFjdGVkVXJsLGgs''@;'; put 'put ''ZikucGlwZShNZSgoe3N0YXRlOlQsdHJlZTpXfSk9Pih7Li4uXyx0YXJnZXRTbmFwc2hvdDpULHVybEFmdGVyUmVkaXJlY3RzOld9KSkpKX0odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLHRoaXMuY29uZmlnTG9hZGVyLHRoaXMucm9vdENvbXBvbmVudFR5cGUsYS5jb25maWcsdGhpcy51cmxT''@;'; put 'put ''ZXJpYWxpemVyLGEucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSksemMoZ2U9PntpZihkLnRhcmdldFNuYXBzaG90PWdlLnRhcmdldFNuYXBzaG90LGQudXJsQWZ0ZXJSZWRpcmVjdHM9Z2UudXJsQWZ0ZXJSZWRpcmVjdHMsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17Li4udGhpcy5jdXJyZW50''@;'; put 'put ''TmF2aWdhdGlvbixmaW5hbFVybDpnZS51cmxBZnRlclJlZGlyZWN0c30sImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3kpe2lmKCFnZS5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBFZT1hLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZ2UudXJsQWZ0ZXJSZWRpcmVjdHMs''@;'; put 'put ''Z2UucmF3VXJsKTthLnNldEJyb3dzZXJVcmwoRWUsZ2UpfWEuYnJvd3NlclVybFRyZWU9Z2UudXJsQWZ0ZXJSZWRpcmVjdHN9Y29uc3Qgd2U9bmV3IGtkZShnZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGdlLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlh''@;'; put 'put ''bGl6ZShnZS51cmxBZnRlclJlZGlyZWN0cyksZ2UudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQod2UpfSkpO2lmKFcmJmEudXJsSGFuZGxpbmdTdHJhdGVneS5zaG91bGRQcm9jZXNzVXJsKGEucmF3VXJsVHJlZSkpe2NvbnN0e2lkOmdlLGV4dHJhY3RlZFVybDp3ZSxzb3VyY2U6''@;'; put 'put ''RWUscmVzdG9yZWRTdGF0ZTpaZSxleHRyYXM6b3R9PV8sZXQ9bmV3IFlPKGdlLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUod2UpLEVlLFplKTt0aGlzLmV2ZW50cy5uZXh0KGV0KTtjb25zdCB5dD1sJCgwLHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiBXaShk''@;'; put 'put ''PXsuLi5fLHRhcmdldFNuYXBzaG90Onl0LHVybEFmdGVyUmVkaXJlY3RzOndlLGV4dHJhczp7Li4ub3Qsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9fSl9e2NvbnN0IGdlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBWXyhfLmlkLGEuc2VyaWFsaXplVXJsKGQu''@;'; put 'put ''ZXh0cmFjdGVkVXJsKSxnZSwxKSksYS5yYXdVcmxUcmVlPV8ucmF3VXJsLF8ucmVzb2x2ZShudWxsKSxMb319KSx6YyhfPT57Y29uc3QgVD1uZXcgQWRlKF8uaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6''@;'; put 'put ''ZShfLnVybEFmdGVyUmVkaXJlY3RzKSxfLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KFQpfSksTWUoXz0+ZD17Li4uXyxndWFyZHM6SmRlKF8udGFyZ2V0U25hcHNob3QsXy5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMpfSksZnVuY3Rpb24gYzJlKGMsbCl7cmV0''@;'; put 'put ''dXJuIHlyKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOl99fT1hO3JldHVybiAwPT09Xy5sZW5ndGgmJjA9PT1mLmxlbmd0aD9XaSh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9''@;'; put 'put ''KTpmdW5jdGlvbiB1MmUoYyxsLGEsZCl7cmV0dXJuIGVhKGMpLnBpcGUoeXIoaD0+ZnVuY3Rpb24gbTJlKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBmJiYwIT09Zi5sZW5ndGg/V2koZi5tYXAoVD0+''@;'; put 'put ''e2NvbnN0IFc9el8obCk/P2gsaWU9SzYoVCxXKTtyZXR1cm4gZHAoZnVuY3Rpb24gczJlKGMpe3JldHVybiBjJiZZXyhjLmNhbkRlYWN0aXZhdGUpfShpZSk/aWUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpXLnJ1bkluQ29udGV4dCgoKT0+aWUoYyxsLGEsZCkpKS5waXBlKHVwKCkpfSkpLnBp''@;'; put 'put ''cGUoWDYoKSk6V2koITApfShoLmNvbXBvbmVudCxoLnJvdXRlLGEsbCxkKSksdXAoaD0+ITAhPT1oLCEwKSl9KF8sZCxoLGMpLnBpcGUoeXIoVD0+VCYmZnVuY3Rpb24gbjJlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KFQpP2Z1bmN0aW9uIGQyZShjLGwsYSxkKXtyZXR1cm4gZWEo''@;'; put 'put ''bCkucGlwZShXNihoPT5teChmdW5jdGlvbiBmMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IE9kZShjKSksV2koITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiBoMmUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IEZkZShjKSksV2koITApfShoLnJvdXRlLGQp''@;'; put 'put ''LGZ1bmN0aW9uIGcyZShjLGwsYSl7Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAoXz0+ZnVuY3Rpb24gUWRlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4g''@;'; put 'put ''bCYmMCE9PWwubGVuZ3RoP3tub2RlOmMsZ3VhcmRzOmx9Om51bGx9KF8pKS5maWx0ZXIoXz0+bnVsbCE9PV8pLm1hcChfPT5GRygoKT0+V2koXy5ndWFyZHMubWFwKFc9Pntjb25zdCBpZT16XyhfLm5vZGUpPz9hLGdlPUs2KFcsaWUpO3JldHVybiBkcChmdW5jdGlvbiBvMmUoYyl7cmV0dXJu''@;'; put 'put ''IGMmJllfKGMuY2FuQWN0aXZhdGVDaGlsZCl9KGdlKT9nZS5jYW5BY3RpdmF0ZUNoaWxkKGQsYyk6aWUucnVuSW5Db250ZXh0KCgpPT5nZShkLGMpKSkucGlwZSh1cCgpKX0pKS5waXBlKFg2KCkpKSk7cmV0dXJuIFdpKGYpLnBpcGUoWDYoKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIHAyZShj''@;'; put 'put ''LGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBXaSghMCk7Y29uc3QgaD1kLm1hcChmPT5GRygoKT0+e2NvbnN0IF89el8obCk/P2EsVD1LNihmLF8pO3JldHVybiBkcChmdW5jdGlvbiBp''@;'; put 'put ''MmUoYyl7cmV0dXJuIGMmJllfKGMuY2FuQWN0aXZhdGUpfShUKT9ULmNhbkFjdGl2YXRlKGwsYyk6Xy5ydW5JbkNvbnRleHQoKCk9PlQobCxjKSkpLnBpcGUodXAoKSl9KSk7cmV0dXJuIFdpKGgpLnBpcGUoWDYoKSl9KGMsaC5yb3V0ZSxhKSkpLHVwKGg9PiEwIT09aCwhMCkpfShkLGYsYyxs''@;'; put 'put ''KTpXaShUKSksTWUoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXz0+dGhpcy5ldmVudHMubmV4dChfKSksemMoXz0+e2lmKGQuZ3VhcmRzUmVzdWx0PV8uZ3VhcmRzUmVzdWx0LEQ1KF8uZ3VhcmRzUmVzdWx0KSl0aHJvdyBmJCgwLF8u''@;'; put 'put ''Z3VhcmRzUmVzdWx0KTtjb25zdCBUPW5ldyBUZGUoXy5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8uZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKF8udXJsQWZ0ZXJSZWRpcmVjdHMpLF8udGFyZ2V0U25hcHNob3QsISFfLmd1YXJkc1Jlc3VsdCk7''@;'; put 'put ''dGhpcy5ldmVudHMubmV4dChUKX0pLElhKF89PiEhXy5ndWFyZHNSZXN1bHR8fChhLnJlc3RvcmVIaXN0b3J5KF8pLHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oXywiIiwzKSwhMSkpLG5QKF89PntpZihfLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIFdp''@;'; put 'put ''KF8pLnBpcGUoemMoVD0+e2NvbnN0IFc9bmV3IERkZShULmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoVC51cmxBZnRlclJlZGlyZWN0cyksVC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4''@;'; put 'put ''dChXKX0pLFNhKFQ9PntsZXQgVz0hMTtyZXR1cm4gV2koVCkucGlwZShPMmUoYS5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksemMoe25leHQ6KCk9Plc9ITAsY29tcGxldGU6KCk9PntXfHwoYS5yZXN0b3JlSGlzdG9yeShUKSx0aGlzLmNhbmNl''@;'; put 'put ''bE5hdmlnYXRpb25UcmFuc2l0aW9uKFQsIiIsMikpfX0pKX0pLHpjKFQ9Pntjb25zdCBXPW5ldyBJZGUoVC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFQudXJsQWZ0ZXJSZWRpcmVjdHMpLFQudGFy''@;'; put 'put ''Z2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoVyl9KSl9KSxuUChfPT57Y29uc3QgVD1XPT57Y29uc3QgaWU9W107Vy5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCYmIVcucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmaWUucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t''@;'; put 'put ''cG9uZW50KFcucm91dGVDb25maWcpLnBpcGUoemMoZ2U9PntXLmNvbXBvbmVudD1nZX0pLE1lKCgpPT57fSkpKTtmb3IoY29uc3QgZ2Ugb2YgVy5jaGlsZHJlbilpZS5wdXNoKC4uLlQoZ2UpKTtyZXR1cm4gaWV9O3JldHVybiBZNihUKF8udGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUodngo''@;'; put 'put ''KSxpZCgxKSl9KSxuUCgoKT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksTWUoXz0+e2NvbnN0IFQ9ZnVuY3Rpb24gemRlKGMsbCxhKXtjb25zdCBkPWpfKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IGEkKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LF8udGFy''@;'; put 'put ''Z2V0U25hcHNob3QsXy5jdXJyZW50Um91dGVyU3RhdGUpO3JldHVybiBkPXsuLi5fLHRhcmdldFJvdXRlclN0YXRlOlR9fSksemMoXz0+e2EuY3VycmVudFVybFRyZWU9Xy51cmxBZnRlclJlZGlyZWN0cyxhLnJhd1VybFRyZWU9YS51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKF8udXJsQWZ0''@;'; put 'put ''ZXJSZWRpcmVjdHMsXy5yYXdVcmwpLGEucm91dGVyU3RhdGU9Xy50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09YS51cmxVcGRhdGVTdHJhdGVneSYmKF8uZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8YS5zZXRCcm93c2VyVXJsKGEucmF3VXJsVHJlZSxfKSxhLmJyb3dzZXJVcmxU''@;'; put 'put ''cmVlPV8udXJsQWZ0ZXJSZWRpcmVjdHMpfSksKChjLGwsYSxkKT0+TWUoaD0+KG5ldyBYZGUobCxoLnRhcmdldFJvdXRlclN0YXRlLGguY3VycmVudFJvdXRlclN0YXRlLGEsZCkuYWN0aXZhdGUoYyksaCkpKSh0aGlzLnJvb3RDb250ZXh0cyxhLnJvdXRlUmV1c2VTdHJhdGVneSxfPT50aGlz''@;'; put 'put ''LmV2ZW50cy5uZXh0KF8pLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZCksaWQoMSksemMoe25leHQ6Xz0+e2g9ITAsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249dGhpcy5jdXJyZW50TmF2aWdhdGlvbixhLm5hdmlnYXRlZD0hMCx0aGlzLmV2ZW50cy5uZXh0KG5ldyBocChfLmlkLHRo''@;'; put 'put ''aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoXy5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYS5jdXJyZW50VXJsVHJlZSkpKSxhLnRpdGxlU3RyYXRlZ3k/LnVwZGF0ZVRpdGxlKF8udGFyZ2V0Um91dGVyU3RhdGUuc25hcHNob3QpLF8ucmVzb2x2ZSghMCl9''@;'; put 'put ''LGNvbXBsZXRlOigpPT57aD0hMH19KSxJXygoKT0+e2h8fGZ8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZCwiIiwxKSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPy5pZD09PWQuaWQmJih0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwpfSksQTUoXz0+e2lmKGY9ITAsbSQoXykp''@;'; put 'put ''e2ckKF8pfHwoYS5uYXZpZ2F0ZWQ9ITAsYS5yZXN0b3JlSGlzdG9yeShkLCEwKSk7Y29uc3QgVD1uZXcgTXgoZC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGQuZXh0cmFjdGVkVXJsKSxfLm1lc3NhZ2UsXy5jYW5jZWxsYXRpb25Db2RlKTtpZih0aGlzLmV2ZW50cy5uZXh0KFQp''@;'; put 'put ''LGckKF8pKXtjb25zdCBXPWEudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShfLnVybCxhLnJhd1VybFRyZWUpLGllPXtza2lwTG9jYXRpb25DaGFuZ2U6ZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PWEudXJsVXBkYXRlU3RyYXRlZ3l8fFQkKGQuc291''@;'; put 'put ''cmNlKX07YS5zY2hlZHVsZU5hdmlnYXRpb24oVyxOXyxudWxsLGllLHtyZXNvbHZlOmQucmVzb2x2ZSxyZWplY3Q6ZC5yZWplY3QscHJvbWlzZTpkLnByb21pc2V9KX1lbHNlIGQucmVzb2x2ZSghMSl9ZWxzZXthLnJlc3RvcmVIaXN0b3J5KGQsITApO2NvbnN0IFQ9bmV3IFdPKGQuaWQsdGhp''@;'; put 'put ''cy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShkLmV4dHJhY3RlZFVybCksXyxkLnRhcmdldFNuYXBzaG90Pz92b2lkIDApO3RoaXMuZXZlbnRzLm5leHQoVCk7dHJ5e2QucmVzb2x2ZShhLmVycm9ySGFuZGxlcihfKSl9Y2F0Y2goVyl7ZC5yZWplY3QoVyl9fXJldHVybiBMb30pKX0pKX1jYW5j''@;'; put 'put ''ZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgTXgoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gVCQoYyl7cmV0dXJuIGMhPT1OX31sZXQgRCQ9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y''@;'; put 'put ''b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PWxzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtMX119fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpmdW5jdGlvbigpe3JldHVybiBGaShCMmUpfSxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLEIyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRCR7Y29uc3RydWN0b3IoYSl7''@;'; put 'put ''c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa0cpKX0sYy5cdTAyNzVw''@;'; put 'put ''cm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxqMmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIEZpKFUyZSl9LHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y2xhc3MgejJle3Nob3VsZERldGFjaChsKXtyZXR1cm4hMX1zdG9yZShsLGEpe31zaG91bGRBdHRhY2gobCl7cmV0dXJuITF9cmV0cmlldmUobCl7cmV0dXJuIG51bGx9c2hvdWxkUmV1c2VSb3V0ZShs''@;'; put 'put ''LGEpe3JldHVybiBsLnJvdXRlQ29uZmlnPT09YS5yb3V0ZUNvbmZpZ319bGV0IFUyZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgejJle31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMu''@;'; put 'put ''XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgTHg9bmV3IE1pKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4oe30pfSk7bGV0IFoyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6ZnVuY3Rpb24oKXtyZXR1cm4gRmkoWTJlKX0scHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxZMmU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEw''@;'; put 'put ''fWV4dHJhY3QoYSl7cmV0dXJuIGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFy''@;'; put 'put ''IFdfPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KFdffHx7fSk7ZnVuY3Rpb24gSSQoYyxsKXtjLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2Vv''@;'; put 'put ''ZiBocHx8YSBpbnN0YW5jZW9mIE14fHxhIGluc3RhbmNlb2YgV098fGEgaW5zdGFuY2VvZiBWXyksTWUoYT0+YSBpbnN0YW5jZW9mIGhwfHxhIGluc3RhbmNlb2YgVl8/V18uQ09NUExFVEU6YSBpbnN0YW5jZW9mIE14JiYoMD09PWEuY29kZXx8MT09PWEuY29kZSk/V18uUkVESVJFQ1RJTkc6''@;'; put 'put ''V18uRkFJTEVEKSxJYShhPT5hIT09V18uUkVESVJFQ1RJTkcpLGlkKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBXMmUoYyl7dGhyb3cgY31mdW5jdGlvbiBHMmUoYyxsLGEpe3JldHVybiBsLnBhcnNlKCIvIil9Y29uc3QgJDJlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJp''@;'; put 'put ''Z25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHEyZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBEcz0oKCk9PntjbGFzcyBje2dldCBuYXZp''@;'; put 'put ''Z2F0aW9uSWQoKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubmF2aWdhdGlvbklkfWdldCBicm93c2VyUGFnZUlkKCl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbilyZXR1cm4gdGhpcy5sb2NhdGlvbi5nZXRTdGF0ZSgpPy5cdTAy''@;'; put 'put ''NzVyb3V0ZXJQYWdlSWR9Z2V0IGV2ZW50cygpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5ldmVudHN9Y29uc3RydWN0b3IoKXt0aGlzLmRpc3Bvc2VkPSExLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMuY29uc29sZT1GaSh0VyksdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEs''@;'; put 'put ''dGhpcy5vcHRpb25zPUZpKEx4LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRpbmdUYXNrcz1GaShxTSksdGhpcy5lcnJvckhhbmRsZXI9dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8VzJlLHRoaXMubWFsZm9ybWVkVXJpRXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5tYWxmb3JtZWRV''@;'; put 'put ''cmlFcnJvckhhbmRsZXJ8fEcyZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9LTEsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PUZpKFoyZSksdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9RmkoajJlKSx0aGlzLnRpdGxlU3RyYXRlZ3k9RmkoRCQpLHRoaXMub25TYW1l''@;'; put 'put ''VXJsTmF2aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRo''@;'; put 'put ''aXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVneXx8ImRlZmVycmVkIix0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLmNvbmZpZz1GaShRNix7b3B0aW9uYWw6ITB9KT8uZmxh''@;'; put 'put ''dCgpPz9bXSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1GaShJeCksdGhpcy51cmxTZXJpYWxpemVyPUZpKE9fKSx0aGlzLmxvY2F0aW9uPUZpKEpkKSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFGaShFeCx7b3B0aW9uYWw6ITB9KSx0aGlzLmlzTmdab25lRW5hYmxl''@;'; put 'put ''ZD1GaShObylpbnN0YW5jZW9mIE5vJiZOby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJlc2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLmN1cnJlbnRVcmxUcmVlPW5ldyAkNix0aGlzLnJhd1VybFRyZWU9dGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLmJyb3dzZXJVcmxUcmVlPXRoaXMuY3Vy''@;'; put 'put ''cmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZT1sJCgwLG51bGwpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcykuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RTdWNjZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFn''@;'; put 'put ''ZUlkPz8wfSxhPT57dGhpcy5jb25zb2xlLndhcm4oYFVuaGFuZGxlZCBOYXZpZ2F0aW9uIEVycm9yOiAke2F9YCl9KX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9u''@;'; put 'put ''ZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7aWYodGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKSwhdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbil7Y29uc3QgYT10aGlzLmxvY2F0aW9uLmdldFN0YXRlKCk7dGhpcy5uYXZpZ2F0''@;'; put 'put ''ZVRvU3luY1dpdGhCcm93c2VyKHRoaXMubG9jYXRpb24ucGF0aCghMCksTl8sYSl9fXNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpe3RoaXMubG9jYXRpb25TdWJzY3JpcHRpb258fCh0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uPXRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGE9Pntjb25z''@;'; put 'put ''dCBkPSJwb3BzdGF0ZSI9PT1hLnR5cGU/InBvcHN0YXRlIjoiaGFzaGNoYW5nZSI7InBvcHN0YXRlIj09PWQmJnNldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYS51cmwsZCxhLnN0YXRlKX0sMCl9KSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs''@;'; put 'put ''aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sXz1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IFc9ey4uLmh9O2RlbGV0ZSBXLm5hdmlnYXRpb25JZCxkZWxldGUgVy5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKFcpLmxlbmd0aCYmKGYuc3RhdGU9Vyl9Y29u''@;'; put 'put ''c3QgVD10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKFQsZCxfLGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv''@;'; put 'put ''bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAoUU8pLHRoaXMubmF2aWdhdGVkPSEx''@;'; put 'put ''LHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubG9jYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLmxvY2F0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCksdGhpcy5sb2NhdGlvblN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITB9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdtZW50Ol8scXVlcnlQYXJhbXNIYW5kbGluZzpULHByZXNlcnZlRnJhZ21lbnQ6V309''@;'; put 'put ''ZCxpZT1XP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6XztsZXQgd2UsZ2U9bnVsbDtzd2l0Y2goVCl7Y2FzZSJtZXJnZSI6Z2U9ey4uLnRoaXMuY3VycmVudFVybFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6Z2U9dGhpcy5jdXJyZW50VXJsVHJlZS5x''@;'; put 'put ''dWVyeVBhcmFtczticmVhaztkZWZhdWx0OmdlPWZ8fG51bGx9bnVsbCE9PWdlJiYoZ2U9dGhpcy5yZW1vdmVFbXB0eVByb3BzKGdlKSk7dHJ5e3dlPUpHKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFh''@;'; put 'put ''WzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSx3ZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIFFHKHdlLGEsZ2UsaWU/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtjb25zdCBoPUQ1KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRo''@;'; put 'put ''aXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsTl8sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBLMmUoYyl7Zm9yKGxldCBsPTA7''@;'; put 'put ''bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgQXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwo''@;'; put 'put ''YSl7bGV0IGQ7dHJ5e2Q9dGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoKGgpe2Q9dGhpcy5tYWxmb3JtZWRVcmlFcnJvckhhbmRsZXIoaCx0aGlzLnVybFNlcmlhbGl6ZXIsYSl9cmV0dXJuIGR9aXNBY3RpdmUoYSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4uJDJlfTohMT09PWQ/''@;'; put 'put ''ey4uLnEyZX06ZCxENShhKSlyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gVUcodGhpcy5jdXJyZW50VXJsVHJlZSxmLGgpfXJlbW92ZUVtcHR5UHJvcHMoYSl7cmV0dXJuIE9iamVjdC5rZXlzKGEpLnJlZHVjZSgoZCxo''@;'; put 'put ''KT0+e2NvbnN0IGY9YVtoXTtyZXR1cm4gbnVsbCE9ZiYmKGRbaF09ZiksZH0se30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLF8pe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsVyxpZTtfPyhUPV8ucmVzb2x2ZSxXPV8ucmVqZWN0LGllPV8u''@;'; put 'put ''cHJvbWlzZSk6aWU9bmV3IFByb21pc2UoKHdlLEVlKT0+e1Q9d2UsVz1FZX0pO2NvbnN0IGdlPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBJJCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShnZSkpfSksdGhpcy5uYXZpZ2F0aW9u''@;'; put 'put ''VHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0''@;'; put 'put ''OlcscHJvbWlzZTppZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLGllLmNhdGNoKHdlPT5Qcm9taXNlLnJlamVjdCh3ZSkpfXNldEJyb3dzZXJVcmwoYSxkKXtjb25zdCBoPXRoaXMudXJsU2Vy''@;'; put 'put ''aWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3QgXz17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQp''@;'; put 'put ''fTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLF8pfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCwodGhpcy5icm93c2VyUGFnZUlkPz8wKSsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3Jl''@;'; put 'put ''SGlzdG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLSh0aGlzLmJyb3dzZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZCk7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28o''@;'; put 'put ''Zik6dGhpcy5jdXJyZW50VXJsVHJlZT09PXRoaXMuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMuYnJvd3NlclVybFRyZWU9YS5jdXJyZW50VXJsVHJlZSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl''@;'; put 'put ''InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT1hLmN1cnJlbnRSb3V0ZXJTdGF0ZSx0aGlzLmN1cnJl''@;'; put 'put ''bnRVcmxUcmVlPWEuY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEucmF3VXJsKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVy''@;'; put 'put ''bFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNh''@;'; put 'put ''bmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxCdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxUKXt0aGlzLnJvdXRlcj1hLHRoaXMucm91dGU9ZCx0aGlzLnRhYkluZGV4QXR0cmlidXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9Xyx0aGlzLmxv''@;'; put 'put ''Y2F0aW9uU3RyYXRlZ3k9VCx0aGlzLmhyZWY9bnVsbCx0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5vbkNoYW5nZXM9bmV3IGJlLHRoaXMucHJlc2VydmVGcmFnbWVudD0hMSx0aGlzLnNraXBMb2NhdGlvbkNoYW5nZT0hMSx0aGlzLnJlcGxhY2VVcmw9ITE7Y29uc3QgVz1fLm5hdGl2ZUVsZW1l''@;'; put 'put ''bnQudGFnTmFtZT8udG9Mb3dlckNhc2UoKTt0aGlzLmlzQW5jaG9yRWxlbWVudD0iYSI9PT1XfHwiYXJlYSI9PT1XLHRoaXMuaXNBbmNob3JFbGVtZW50P3RoaXMuc3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShpZT0+e2llIGluc3RhbmNlb2YgaHAmJnRoaXMudXBkYXRlSHJlZigp''@;'; put 'put ''fSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRoaXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09u''@;'; put 'put ''Q2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1zZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25O''@;'; put 'put ''YXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xpY2soYSxkLGgsZixfKXtyZXR1cm4hIShudWxsPT09dGhpcy51cmxUcmVlfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHxffHwi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnVybFRyZWUse3NraXBMb2NhdGlvbkNoYW5nZTp0aGlzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOnRoaXMucmVwbGFjZVVybCxz''@;'; put 'put ''dGF0ZTp0aGlzLnN0YXRlfSksIXRoaXMuaXNBbmNob3JFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZUhyZWYoKXt0aGlzLmhyZWY9bnVsbCE9PXRoaXMudXJsVHJlZSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRp''@;'; put 'put ''b25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh0aGlzLnVybFRyZWUpKTpudWxsO2NvbnN0IGE9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFlDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gcEkoYyxsKXtyZXR1cm4ic3JjIj09PWwm''@;'; put 'put ''JigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9aQzpydn0obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRv''@;'; put 'put ''TG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGEpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRl''@;'; put 'put ''LHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChEcyksdHQoV2wpLFA0KCJ0YWJpbmRleCIpLHR0KEZvKSx0dChOaSksdHQoazUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaWNrKGYuYnV0dG9uLGYuY3RybEtleSxmLnNoaWZ0S2V5LGYuYWx0S2V5LGYubWV0YUtleSl9KSwyJmEmJlRyKCJ0YXJnZXQiLGQudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6''@;'; put 'put ''InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmciLHN0YXRlOiJzdGF0ZSIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdt''@;'; put 'put ''ZW50IixVNl0sc2tpcExvY2F0aW9uQ2hhbmdlOlsic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixVNl0scmVwbGFjZVVybDpbInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixVNl0scm91dGVyTGluazoicm91dGVyTGluayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6''@;'; put 'put ''W2VNLHZhXX0pLGN9KSgpLEdfPSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9Xyx0aGlz''@;'; put 'put ''LmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IEVyLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhw''@;'; put 'put ''JiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7V2kodGhpcy5saW5rcy5jaGFuZ2VzLFdpKG51bGwpKS5waXBlKFBpKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUoKSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExp''@;'; put 'put ''bmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5maWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1''@;'; put 'put ''YnNjcmlwdGlvbj1lYShhKS5waXBlKFBpKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNw''@;'; put 'put ''bGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1''@;'; put 'put ''YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3RoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNr''@;'; put 'put ''KCksdGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3Vy''@;'; put 'put ''cmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBYMmUoYyl7cmV0dXJuISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtB''@;'; put 'put ''Y3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT4hIWgudXJsVHJlZSYmYS5pc0FjdGl2ZShoLnVybFRyZWUsZCl9aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KE5pKSx0dChGbyksdHQoVWEpLHR0KEJ1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Iiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLEJ1LDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGlua3M9Zil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0''@;'; put 'put ''aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNoYW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFu''@;'; put 'put ''ZGFsb25lOiEwLGZlYXR1cmVzOlt2YV19KSxjfSkoKTtjbGFzcyBMJHt9bGV0IEoyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yb3V0ZXI9YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj1ffXNldFVwUHJl''@;'; put 'put ''bG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKElhKGE9PmEgaW5zdGFuY2VvZiBocCksVzYoKCk9PnRoaXMucHJlbG9hZCgpKSkuc3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rv''@;'; put 'put ''cix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRlcyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYu''@;'; put 'put ''X2luamVjdG9yPUFSKGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3QgXz1mLl9pbmplY3Rvcj8/YSxUPWYuX2xvYWRlZEluamVjdG9yPz9fOyhmLmxvYWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQm''@;'; put 'put ''JiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKF8sZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5wcm9jZXNzUm91dGVzKFQsZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIGVhKGgpLnBpcGUoUGko''@;'; put 'put ''KSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6V2kobnVsbCk7Y29uc3QgZj1oLnBpcGUo''@;'; put 'put ''eXIoXz0+bnVsbD09PV8/V2kodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPV8ucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPV8uaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVzKF8uaW5qZWN0b3I/P2EsXy5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21w''@;'; put 'put ''b25lbnQ/ZWEoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoUGkoKSk6Zn0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihEcyksYXIoblcpLGFyKHEwKSxhcihMJCksYXIoclApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtjb25zdCBpUD1uZXcgTWkoIiIpO2xldCBSJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXz17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmll''@;'; put 'put ''d3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz1fLHRoaXMubGFzdElkPTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LF8uc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbj1fLnNjcm9sbFBvc2l0aW9uUmVz''@;'; put 'put ''dG9yYXRpb258fCJkaXNhYmxlZCIsXy5hbmNob3JTY3JvbGxpbmc9Xy5hbmNob3JTY3JvbGxpbmd8fCJkaXNhYmxlZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3Jv''@;'; put 'put ''bGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVTY3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgWU8/KHRoaXMuc3RvcmVbdGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVz''@;'; put 'put ''dG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNlb2YgaHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZy''@;'; put 'put ''YWdtZW50KSk6YSBpbnN0YW5jZW9mIFZfJiYwPT09YS5jb2RlJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xs''@;'; put 'put ''RXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIG8kJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0''@;'; put 'put ''aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/''@;'; put 'put ''dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2''@;'; put 'put ''ZW50KGEsZCl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuem9uZS5ydW4oKCk9Pnt0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5uZXh0KG5ldyBvJChhLCJwb3BzdGF0ZSI9PT10aGlzLmxhc3RTb3VyY2U/dGhpcy5zdG9yZVt0aGlzLnJlc3Rv''@;'; put 'put ''cmVkSWRdOm51bGwsZCkpfSl9LDApfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpeyFmdW5j''@;'; put 'put ''dGlvbiBNUygpe3Rocm93IG5ldyBFcnJvcigiaW52YWxpZCIpfSgpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEVmKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gUCQoKXtj''@;'; put 'put ''b25zdCBjPUZpKEVhKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQoeDUpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoRHMpLGg9Yy5nZXQoRiQpOzE9PT1jLmdldChvUCkmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChIJCxudWxsLG5zLk9wdGlvbmFs''@;'; put 'put ''KT8uc2V0VXBQcmVsb2FkaW5nKCksYy5nZXQoaVAsbnVsbCxucy5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgRiQ9bmV3''@;'; put 'put ''IE1pKCIiLHtmYWN0b3J5OigpPT5uZXcgYmV9KSxvUD1uZXcgTWkoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxIJD1uZXcgTWkoIiIpO2Z1bmN0aW9uIG5oZShjKXtyZXR1cm4gRWYoMCxbe3Byb3ZpZGU6SCQsdXNlRXhpc3Rpbmc6SjJlfSx7cHJvdmlkZTpMJCx1c2VF''@;'; put 'put ''eGlzdGluZzpjfV0pfWNvbnN0IE4kPW5ldyBNaSgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxpaGU9W0pkLHtwcm92aWRlOk9fLHVzZUNsYXNzOkJPfSxEcyxCXyx7cHJvdmlkZTpXbCx1c2VGYWN0b3J5OmZ1bmN0aW9uIE8kKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W0Rz''@;'; put 'put ''XX0sclAsW11dO2Z1bmN0aW9uIG9oZSgpe3JldHVybiBuZXcgZlcoIlJvdXRlciIsRHMpfWxldCBkYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbaWhlLFtdLHtwcm92aWRlOlE2LG11bHRpOiEw''@;'; put 'put ''LHVzZVZhbHVlOmF9LHtwcm92aWRlOk4kLHVzZUZhY3Rvcnk6Y2hlLGRlcHM6W1tEcyxuZXcgejIsbmV3IGcwXV19LHtwcm92aWRlOkx4LHVzZVZhbHVlOmR8fHt9fSxkPy51c2VIYXNoP3twcm92aWRlOms1LHVzZUNsYXNzOmt1ZX06e3Byb3ZpZGU6azUsdXNlQ2xhc3M6ald9LHtwcm92aWRl''@;'; put 'put ''OmlQLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPUZpKGowZSksbD1GaShObyksYT1GaShMeCksZD1GaShJeCksaD1GaShPXyk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IFIkKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/''@;'; put 'put ''bmhlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10se3Byb3ZpZGU6ZlcsbXVsdGk6ITAsdXNlRmFjdG9yeTpvaGV9LGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3VoZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/RWYoOCxbaCQse3Byb3ZpZGU6RXgsdXNlRXhp''@;'; put 'put ''c3Rpbmc6aCR9XSkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpWJCx1c2VGYWN0b3J5OlAkfSx7cHJvdmlkZTpKUixtdWx0aTohMCx1c2VFeGlzdGluZzpWJH1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6UTYsbXVsdGk6''@;'; put 'put ''ITAsdXNlVmFsdWU6YX1dfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTiQsOCkpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2Z1bmN0aW9uIGNoZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rp''@;'; put 'put ''b24gdWhlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigzLFt7cHJvdmlkZTpaUixtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1GaShEcyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOm9Q''@;'; put 'put ''LHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmciPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9FZigyLFt7cHJvdmlkZTpvUCx1c2VWYWx1ZTowfSx7cHJvdmlkZTpaUixtdWx0aTohMCxkZXBzOltFYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldCh4''@;'; put 'put ''dWUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9taXNlKGQ9Pntjb25zdCBoPWwuZ2V0KERzKSxmPWwuZ2V0KEYkKTtJJChoLCgpPT57ZCghMCl9KSxsLmdldChJeCkuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/V2kodm9pZCAw''@;'; put 'put ''KTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgViQ9bmV3IE1pKCIiKTt2YXIgQiQ9RigzNjA3MiksaGhlPUYoNjYzMDQpO2NvbnN0IHNQPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19h''@;'; put 'put ''bGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDoh''@;'; put 'put ''MCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG4xPWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9y''@;'; put 'put ''b3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0''@;'; put 'put ''YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQi''@;'; put 'put ''LGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09ImFkZFJlY29yZCIsY30objF8fHt9KSxyMT1GKDU2MzIxKSxqJD1GLm4ocjEpLFVjPUYoNzY3NzEpO2xldCBlOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdz''@;'; put 'put ''KGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5ncygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxhUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy51c2VyQ2hhbmdlPW5ldyBiZX1zZXQgdXNlcihhKXt0aGlzLl91c2VyPWEsdGhpcy51c2VyQ2hhbmdlLm5leHQoYSl9Z2V0IHVzZXIoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dXNlcn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksbFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBiZX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdmw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFsZXJ0c1NlcnZpY2U9YSx0aGlzLm9uU2lkZWJhclRv''@;'; put 'put ''Z2dsZT1uZXcgRXIsdGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkPW5ldyBFcix0aGlzLm9uU2hvd0Fib3J0TW9kYWw9bmV3IEVyLHRoaXMub25SZXF1ZXN0c01vZGFsT3Blbj1uZXcgRXIsdGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdz1uZXcgRXIsdGhpcy52aWV3TGFzdFVybD1udWxsLHRoaXMu''@;'; put 'put ''c2lkZWJhckNsb3NlTGltaXQ9MTI4MH1zaG93RGVtb0xpbWl0TW9kYWwoYSl7dGhpcy5vbkRlbW9MaW1pdE1vZGFsU2hvdy5lbWl0KGEpfXNob3dJbmZvTW9kYWwoYT0iSW5mbyIsZCl7dGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQoe21vZGFsVGl0bGU6YSxtZXNzYWdlOmQsc2FzU2Vydmlj''@;'; put 'put ''ZToiIixkZXRhaWxzOm51bGx9KX1zaG93QWJvcnRNb2RhbChhLGQsaCxmPXZvaWQgMCl7aHx8KGg9bnVsbCk7bGV0IF89e3Nhc1NlcnZpY2U6YSxtZXNzYWdlOmQsZGV0YWlsczpofTtmJiYoXy5tb2RhbFRpdGxlPWYpLHRoaXMub25TaG93QWJvcnRNb2RhbC5lbWl0KF8pfW9wZW5SZXF1ZXN0''@;'; put 'put ''c01vZGFsKCl7dGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuLmVtaXQoITApfWNhdGNoUmVzcG9uc2VFcnJvcihhLGQpe2xldCBoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIjtpZihkLmVycm9yKXtsZXQgZjtoPWQuZXJyb3IubWVzc2FnZSxkLmVycm9yLmRldGFpbHMmJmQuZXJyb3IuZGV0''@;'; put 'put ''YWlscy5sb2cmJihmPWQuZXJyb3IuZGV0YWlscy5sb2cpLCghaHx8aC50cmltKCkubGVuZ3RoPDEpJiYoaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLHRoaXMuc2hvd0Fib3J0TW9kYWwoYSxoLHtMT0c6Zn0sIlJlcXVlc3QgZXJyb3IiKX1lbHNlIHRoaXMuc2hvd0Fib3J0TW9kYWwo''@;'; put 'put ''YSxoKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCgpfWNsb3NlU2lkZWJhcigpe3dpbmRvdy5pbm5lcldpZHRoPHRoaXMuc2lkZWJhckNsb3NlTGltaXQmJnRoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITF9KX1vcGVuU2lkZWJhcigpe3RoaXMub25T''@;'; put 'put ''aWRlYmFyVG9nZ2xlLmVtaXQoe29wZW46ITB9KX1zdGFydHVwRGF0YUxvYWRlZCgpe3RoaXMub25TdGFydHVwRGF0YUxvYWRlZC5lbWl0KCl9ZGlzcGF0Y2hFdmVudChhKXtsZXQgZDsiZnVuY3Rpb24iPT10eXBlb2YgRXZlbnQ/ZD1uZXcgRXZlbnQoYSk6KGQ9ZG9jdW1lbnQuY3JlYXRlRXZl''@;'; put 'put ''bnQoIkV2ZW50IiksZC5pbml0RXZlbnQoYSwhMCwhMCkpLHdpbmRvdy5kaXNwYXRjaEV2ZW50KGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihsUCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92''@;'; put 'put ''aWRlZEluOiJyb290In0pLGN9KSgpO2NsYXNzIFJ4e31jbGFzcyBPeHt9Y2xhc3Mgb2h7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlVcGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFk''@;'; put 'put ''ZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNlKCksXz1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRo''@;'; put 'put ''aXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKF8pOnRoaXMuaGVhZGVycy5zZXQoZixbX10pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2VvZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhl''@;'; put 'put ''YWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlz''@;'; put 'put ''LmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3JldHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5''@;'; put 'put ''LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxsfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQo''@;'; put 'put ''bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMu''@;'; put 'put ''bm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIG9oP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxh''@;'; put 'put ''enlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJzLmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRo''@;'; put 'put ''aXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyBvaDtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJbml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2Ygb2g/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVw''@;'; put 'put ''ZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEiOmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQu''@;'; put 'put ''bGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTtoLnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZh''@;'; put 'put ''bHVlO2lmKGYpe2xldCBfPXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIV8pcmV0dXJuO189Xy5maWx0ZXIoVD0+LTE9PT1mLmluZGV4T2YoVCkpLDA9PT1fLmxlbmd0aD8odGhpcy5oZWFkZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5z''@;'; put 'put ''ZXQoYSxfKX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXkuaXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhp''@;'; put 'put ''cy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1lcy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFk''@;'; put 'put ''ZXJzLmdldChhKSkpfX1jbGFzcyBmaGV7ZW5jb2RlS2V5KGwpe3JldHVybiB6JChsKX1lbmNvZGVWYWx1ZShsKXtyZXR1cm4geiQobCl9ZGVjb2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19''@;'; put 'put ''Y29uc3QgZ2hlPS8lKFxkW2EtZjAtOV0pL2dpLG1oZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24geiQoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKGdoZSwobCxhKT0+''@;'; put 'put ''bWhlW2FdPz9sKX1mdW5jdGlvbiBQeChjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgcHB7Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgZmhlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2Jq''@;'; put 'put ''ZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIHBoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZv''@;'; put 'put ''ckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW18sVF09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZhbHVlKGguc2xpY2UoZisxKSldLFc9YS5nZXQoXyl8fFtdO1cucHVzaChUKSxhLnNldChfLFcpfSksYX0obC5m''@;'; put 'put ''cm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25zdCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoUHgpOltQeChkKV07dGhpcy5t''@;'; put 'put ''YXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhp''@;'; put 'put ''cy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVj''@;'; put 'put ''dC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTphLnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIu''@;'; put 'put ''ZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIiIT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IHBwKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0p''@;'; put 'put ''O3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5tYXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5p''@;'; put 'put ''bml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNoKGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAu''@;'; put 'put ''Z2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChQeChsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVlKXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8''@;'; put 'put ''W107Y29uc3QgaD1kLmluZGV4T2YoUHgobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRlbGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyB2aGV7''@;'; put 'put ''Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gVSQoYyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcn1mdW5jdGlv''@;'; put 'put ''biBaJChjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBZJChjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0YW5jZW9mIEZvcm1EYXRhfWNsYXNzICRfe2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEs''@;'; put 'put ''dGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIF9oZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpj''@;'; put 'put ''YXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlz''@;'; put 'put ''LndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYmKHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFy''@;'; put 'put ''YW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpKSx0aGlzLmhlYWRlcnN8fCh0aGlzLmhlYWRlcnM9bmV3IG9oKSx0aGlzLmNvbnRleHR8fCh0aGlzLmNvbnRleHQ9bmV3IHZoZSksdGhpcy5wYXJhbXMpe2NvbnN0IF89dGhpcy5wYXJhbXMudG9TdHJpbmcoKTtpZigwPT09Xy5sZW5ndGgpdGhp''@;'; put 'put ''cy51cmxXaXRoUGFyYW1zPWE7ZWxzZXtjb25zdCBUPWEuaW5kZXhPZigiPyIpO3RoaXMudXJsV2l0aFBhcmFtcz1hKygtMT09PVQ/Ij8iOlQ8YS5sZW5ndGgtMT8iJiI6IiIpK199fWVsc2UgdGhpcy5wYXJhbXM9bmV3IHBwLHRoaXMudXJsV2l0aFBhcmFtcz1hfXNlcmlhbGl6ZUJvZHkoKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09PXRoaXMuYm9keT9udWxsOlUkKHRoaXMuYm9keSl8fFokKHRoaXMuYm9keSl8fFkkKHRoaXMuYm9keSl8fGZ1bmN0aW9uIGJoZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSl8''@;'; put 'put ''fCJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5P3RoaXMuYm9keTp0aGlzLmJvZHkgaW5zdGFuY2VvZiBwcD90aGlzLmJvZHkudG9TdHJpbmcoKToib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5fHxBcnJheS5pc0FycmF5KHRoaXMuYm9keSk/''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkodGhpcy5ib2R5KTp0aGlzLmJvZHkudG9TdHJpbmcoKX1kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpe3JldHVybiBudWxsPT09dGhpcy5ib2R5fHxZJCh0aGlzLmJvZHkpP251bGw6WiQodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpVJCh0aGlzLmJvZHkp''@;'; put 'put ''P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHk/InRleHQvcGxhaW4iOnRoaXMuYm9keSBpbnN0YW5jZW9mIHBwPyJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCI6Im9iamVjdCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''dGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHk/ImFwcGxpY2F0aW9uL2pzb24iOm51bGx9Y2xvbmUobD17fSl7Y29uc3QgYT1sLm1ldGhvZHx8dGhpcy5tZXRob2QsZD1sLnVybHx8dGhpcy51cmwsaD1sLnJlc3BvbnNlVHlwZXx8dGhpcy5yZXNwb25zZVR5cGUsZj12b2lk''@;'; put 'put ''IDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxfPXZvaWQgMCE9PWwud2l0aENyZWRlbnRpYWxzP2wud2l0aENyZWRlbnRpYWxzOnRoaXMud2l0aENyZWRlbnRpYWxzLFQ9dm9pZCAwIT09bC5yZXBvcnRQcm9ncmVzcz9sLnJlcG9ydFByb2dyZXNzOnRoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0''@;'; put 'put ''IFc9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsaWU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IGdlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAhPT1sLnNldEhlYWRlcnMmJihXPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKCh3ZSxFZSk9PndlLnNl''@;'; put 'put ''dChFZSxsLnNldEhlYWRlcnNbRWVdKSxXKSksbC5zZXRQYXJhbXMmJihpZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKCh3ZSxFZSk9PndlLnNldChFZSxsLnNldFBhcmFtc1tFZV0pLGllKSksbmV3ICRfKGEsZCxmLHtwYXJhbXM6aWUsaGVhZGVyczpXLGNvbnRleHQ6Z2UscmVw''@;'; put 'put ''b3J0UHJvZ3Jlc3M6VCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6X30pfX12YXIgdDg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jlc3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNl''@;'; put 'put ''SGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KHQ4fHx7fSk7Y2xhc3MgY1B7Y29uc3RydWN0b3IobCxhPTIwMCxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRl''@;'; put 'put ''cnN8fG5ldyBvaCx0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIHVQIGV4dGVuZHMg''@;'; put 'put ''Y1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcgdVAoe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0''@;'; put 'put ''YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG44IGV4dGVuZHMgY1B7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPXQ4LlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/''@;'; put 'put ''bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBuOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0''@;'; put 'put ''Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBXJCBleHRlbmRzIGNQe2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEs''@;'; put 'put ''dGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wu''@;'; put 'put ''c3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19ZnVuY3Rpb24gZFAoYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRlcnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVz''@;'; put 'put ''czpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHN9fWxldCBoUD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5z''@;'; put 'put ''dGFuY2VvZiAkXylmPWE7ZWxzZXtsZXQgVyxpZTtXPWguaGVhZGVycyBpbnN0YW5jZW9mIG9oP2guaGVhZGVyczpuZXcgb2goaC5oZWFkZXJzKSxoLnBhcmFtcyYmKGllPWgucGFyYW1zIGluc3RhbmNlb2YgcHA/aC5wYXJhbXM6bmV3IHBwKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3''@;'; put 'put ''ICRfKGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6Vyxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6aWUscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRo''@;'; put 'put ''Q3JlZGVudGlhbHN9KX1jb25zdCBfPVdpKGYpLnBpcGUoVzYoVz0+dGhpcy5oYW5kbGVyLmhhbmRsZShXKSkpO2lmKGEgaW5zdGFuY2VvZiAkX3x8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIF87Y29uc3QgVD1fLnBpcGUoSWEoVz0+VyBpbnN0YW5jZW9mIG44KSk7c3dpdGNoKGgub2Jz''@;'; put 'put ''ZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRjaChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIFQucGlwZShNZShXPT57aWYobnVsbCE9PVcuYm9keSYmIShXLmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBp''@;'; put 'put ''cyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJuIFcuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBULnBpcGUoTWUoVz0+e2lmKG51bGwhPT1XLmJvZHkmJiEoVy5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVy''@;'; put 'put ''biBXLmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4gVC5waXBlKE1lKFc9PntpZihudWxsIT09Vy5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIFcuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gVy5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIFQu''@;'; put 'put ''cGlwZShNZShXPT5XLmJvZHkpKX1jYXNlInJlc3BvbnNlIjpyZXR1cm4gVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUi''@;'; put 'put ''LGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IHBwKS5hcHBlbmQoZCwiSlNP''@;'; put 'put ''TlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5IixyZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLGRQKGgsZCkpfXBvc3QoYSxk''@;'; put 'put ''LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBPU1QiLGEsZFAoaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsZFAoaCxkKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJ4KSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gcSQoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiB3aGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFNoZT1uZXcgTWkoIiIpLHFfPW5ldyBN''@;'; put 'put ''aSgiIiksSyQ9bmV3IE1pKCIiKTtmdW5jdGlvbiBNaGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShGaShTaGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodCh3aGUscSQpKTtjb25zdCBkPUZpKHFNKSxoPWQuYWRkKCk7cmV0dXJuIGMobCxhKS5waXBl''@;'; put 'put ''KElfKCgpPT5kLnJlbW92ZShoKSkpfX1sZXQgWCQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPUZpKHFNKX1oYW5kbGUoYSl7aWYo''@;'; put 'put ''bnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChxXyksLi4udGhpcy5pbmplY3Rvci5nZXQoSyQsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgoZixfKT0+ZnVuY3Rpb24gQ2hlKGMsbCxhKXtyZXR1cm4oZCxo''@;'; put 'put ''KT0+YS5ydW5JbkNvbnRleHQoKCk9PmwoZCxmPT5jKGYsaCkpKX0oZixfLHRoaXMuaW5qZWN0b3IpLHEkKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShJXygoKT0+dGhpcy5wZW5kaW5n''@;'; put 'put ''VGFza3MucmVtb3ZlKGQpKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE94KSxhcihxMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEFoZT0vXlwpXF1cfScsP1xuLztsZXQg''@;'; put 'put ''USQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBBcigtMjgwMCwhMSk7Y29uc3QgZD10aGlzLnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/ZWEoZC5cdTAyNzVs''@;'; put 'put ''b2FkSW1wbCgpKTpXaShudWxsKSkucGlwZShTYSgoKT0+bmV3IEtlKGY9Pntjb25zdCBfPWQuYnVpbGQoKTtpZihfLm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYmKF8ud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgoZXQseXQp''@;'; put 'put ''PT5fLnNldFJlcXVlc3RIZWFkZXIoZXQseXQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fF8uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25z''@;'; put 'put ''dCBldD1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PWV0JiZfLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsZXQpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBldD1hLnJlc3BvbnNlVHlwZS50b0xvd2VyQ2FzZSgpO18ucmVzcG9uc2VUeXBlPSJqc29uIiE9PWV0''@;'; put 'put ''P2V0OiJ0ZXh0In1jb25zdCBUPWEuc2VyaWFsaXplQm9keSgpO2xldCBXPW51bGw7Y29uc3QgaWU9KCk9PntpZihudWxsIT09VylyZXR1cm4gVztjb25zdCBldD1fLnN0YXR1c1RleHR8fCJPSyIseXQ9bmV3IG9oKF8uZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGt0PWZ1bmN0aW9uIFRoZShj''@;'; put 'put ''KXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfShfKXx8YS51cmw7cmV0dXJu''@;'; put 'put ''IFc9bmV3IHVQKHtoZWFkZXJzOnl0LHN0YXR1czpfLnN0YXR1cyxzdGF0dXNUZXh0OmV0LHVybDprdH0pLFd9LGdlPSgpPT57bGV0e2hlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fT1pZSgpLFF0PW51bGw7MjA0IT09eXQmJihRdD10eXBlb2YgXy5yZXNwb25zZT4i''@;'; put 'put ''dSI/Xy5yZXNwb25zZVRleHQ6Xy5yZXNwb25zZSksMD09PXl0JiYoeXQ9UXQ/MjAwOjApO2xldCBybj15dD49MjAwJiZ5dDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJpbmciPT10eXBlb2YgUXQpe2NvbnN0IHZuPVF0O1F0PVF0LnJlcGxhY2UoQWhlLCIiKTt0cnl7UXQ9''@;'; put 'put ''IiIhPT1RdD9KU09OLnBhcnNlKFF0KTpudWxsfWNhdGNoKE5uKXtRdD12bixybiYmKHJuPSExLFF0PXtlcnJvcjpObix0ZXh0OlF0fSl9fXJuPyhmLm5leHQobmV3IG44KHtib2R5OlF0LGhlYWRlcnM6ZXQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6a3QsdXJsOlN0fHx2b2lkIDB9KSksZi5jb21w''@;'; put 'put ''bGV0ZSgpKTpmLmVycm9yKG5ldyBXJCh7ZXJyb3I6UXQsaGVhZGVyczpldCxzdGF0dXM6eXQsc3RhdHVzVGV4dDprdCx1cmw6U3R8fHZvaWQgMH0pKX0sd2U9ZXQ9Pntjb25zdHt1cmw6eXR9PWllKCksa3Q9bmV3IFckKHtlcnJvcjpldCxzdGF0dXM6Xy5zdGF0dXN8fDAsc3RhdHVzVGV4dDpf''@;'; put 'put ''LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6eXR8fHZvaWQgMH0pO2YuZXJyb3Ioa3QpfTtsZXQgRWU9ITE7Y29uc3QgWmU9ZXQ9PntFZXx8KGYubmV4dChpZSgpKSxFZT0hMCk7bGV0IHl0PXt0eXBlOnQ4LkRvd25sb2FkUHJvZ3Jlc3MsbG9hZGVkOmV0LmxvYWRlZH07ZXQubGVu''@;'; put 'put ''Z3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSwidGV4dCI9PT1hLnJlc3BvbnNlVHlwZSYmXy5yZXNwb25zZVRleHQmJih5dC5wYXJ0aWFsVGV4dD1fLnJlc3BvbnNlVGV4dCksZi5uZXh0KHl0KX0sb3Q9ZXQ9PntsZXQgeXQ9e3R5cGU6dDguVXBsb2FkUHJvZ3Jlc3MsbG9hZGVk''@;'; put 'put ''OmV0LmxvYWRlZH07ZXQubGVuZ3RoQ29tcHV0YWJsZSYmKHl0LnRvdGFsPWV0LnRvdGFsKSxmLm5leHQoeXQpfTtyZXR1cm4gXy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixnZSksXy5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsd2UpLF8uYWRkRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2Up''@;'; put 'put ''LF8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHdlKSxhLnJlcG9ydFByb2dyZXNzJiYoXy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUpLG51bGwhPT1UJiZfLnVwbG9hZCYmXy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLG90KSksXy5zZW5kKFQpLGYubmV4dCh7''@;'; put 'put ''dHlwZTp0OC5TZW50fSksKCk9PntfLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix3ZSksXy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsd2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsZ2UpLF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGltZW91dCIsd2UpLGEucmVwb3J0''@;'; put 'put ''UHJvZ3Jlc3MmJihfLnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZSksbnVsbCE9PVQmJl8udXBsb2FkJiZfLnVwbG9hZC5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsb3QpKSxfLnJlYWR5U3RhdGUhPT1fLkRPTkUmJl8uYWJvcnQoKX19KSkpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihjRykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IGZQPW5ldyBNaSgiWFNSRl9FTkFCTEVEIiksZXE9bmV3IE1pKCJYU1JGX0NPT0tJRV9OQU1FIix7cHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlhTUkYtVE9LRU4ifSksdHE9bmV3IE1pKCJYU1JGX0hFQURFUl9OQU1FIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+IlgtWFNSRi1UT0tFTiJ9KTtjbGFzcyBucXt9bGV0IExoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''KXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25z''@;'; put 'put ''dCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj1YVyhhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2llU3RyaW5nPWEpLHRoaXMubGFzdFRva2VufX1yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoR3MpLGFyKGVxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gUmhlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFG''@;'; put 'put ''aShmUCl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9RmkobnEpLmdldFRva2VuKCksaD1GaSh0cSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRl''@;'; put 'put ''cnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMi''@;'; put 'put ''LGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09''@;'; put 'put ''IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oZ3B8fHt9KTtmdW5jdGlvbiBJNShjLGwpe3JldHVybntcdTAyNzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIE9oZSguLi5jKXtjb25zdCBsPVtoUCxRJCxYJCx7cHJvdmlkZTpSeCx1c2VF''@;'; put 'put ''eGlzdGluZzpYJH0se3Byb3ZpZGU6T3gsdXNlRXhpc3Rpbmc6USR9LHtwcm92aWRlOnFfLHVzZVZhbHVlOlJoZSxtdWx0aTohMH0se3Byb3ZpZGU6ZlAsdXNlVmFsdWU6ITB9LHtwcm92aWRlOm5xLHVzZUNsYXNzOkxoZX1dO2Zvcihjb25zdCBhIG9mIGMpbC5wdXNoKC4uLmEuXHUwMjc1cHJv''@;'; put 'put ''dmlkZXJzKTtyZXR1cm4gZnVuY3Rpb24gaXYoYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpjfX0obCl9Y29uc3QgcnE9bmV3IE1pKCJMRUdBQ1lfSU5URVJDRVBUT1JfRk4iKTtsZXQgRmhlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe3Byb3ZpZGVyczpbT2hlKEk1KGdwLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6cnEsdXNlRmFjdG9yeTpNaGV9LHtwcm92aWRlOnFfLHVzZUV4aXN0aW5nOnJxLG11bHRpOiEwfV0pKV19KSxjfSko''@;'; put 'put ''KSxpcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3Rv''@;'; put 'put ''cmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FTanNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1n''@;'; put 'put ''ZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19maWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJs''@;'; put 'put ''fS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUoKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4g''@;'; put 'put ''bmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25zdCBUPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChUKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2Yg''@;'; put 'put ''YS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoaFApLGFyKGU4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj''@;'; put 'put ''LHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb2E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2Vy''@;'; put 'put ''dmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBFcix0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IEVyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSx0aGlzLmFwcExv''@;'; put 'put ''Y0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBUZSghMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IFRlKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygp''@;'; put 'put ''LHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhqJCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgVWMuRC5TYXNWaXlhOnRo''@;'; put 'put ''aXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBVYy5ELlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIFVjLkQuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGly''@;'; put 'put ''ZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJv''@;'; put 'put ''bWlzZSgoXyxUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihXPT57aWYoITE9PT1XLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmVy5N''@;'; put 'put ''Rl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpXLk1GX0dFVFVTRVJ9KSxXLlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoVy5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNp''@;'; put 'put ''dGVJZCgpLmluY2x1ZGVzKFcuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFcuU1lTU0lURSkpKSw0MDQ9PT1XLnN0YXR1cyYmVCh7TUVTU0FHRTpXLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFcuc2FzanNBYm9ydDwidSIpe2Nv''@;'; put 'put ''bnN0IGllPVcsZ2U9aWUuc2FzanNBYm9ydFswXS5NU0csd2U9aWUuc2FzanNBYm9ydFswXS5NQUM7aWYoZ2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2Fk''@;'; put 'put ''ZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpnZX0pO2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiksZ2Use1NZU1dBUk5JTkdU''@;'; put 'put ''RVhUOmllLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDppZS5TWVNFUlJPUlRFWFQsTUFDOndlfSksVCh7ZXJyb3I6Z2V9KX1fKFcpfSxXPT57aWYoY29uc29sZS5lcnJvcihXKSxXLmVycm9yKXtsZXQgZ2UsaWU9Vy5lcnJvci5tZXNzYWdlO1cuZXJyb3IuZGV0YWlscyYmVy5lcnJvci5k''@;'; put 'put ''ZXRhaWxzLmxvZyYmKGdlPVcuZXJyb3IuZGV0YWlscy5sb2cpLCghaWV8fGllLnRyaW0oKS5sZW5ndGg8MSkmJihpZT0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLGllLHtM''@;'; put 'put ''T0c6Z2V9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6aWV9KX1UKFcpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0''@;'; put 'put ''U2VydmVyVHlwZSgpPT09VWMuRC5TYXNqcz8iY2xpZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKF89PihfLmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOl8udXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5n''@;'; put 'put ''JiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIV8uaXNMb2dnZWRJbiksXy5pc0xvZ2dlZEluKSxfPT4oY29uc29sZS5lcnJvcihfKSxoLnNob3VsZExvZ2luLm5l''@;'; put 'put ''eHQoITApLCExKSkuY2F0Y2goXz0+KDQwMz09PV8mJmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVf''@;'; put 'put ''aWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpbYV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJD''@;'; put 'put ''b250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUoZj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRl''@;'; put 'put ''ci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKF89PnshMT09''@;'; put 'put ''PV8mJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJyb3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVw''@;'; put 'put ''RGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZmkoZnVuY3Rpb24qKGgsZil7''@;'; put 'put ''YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFsKGZpKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbihfPT57XyYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKF8pKX0pLmNhdGNoKF89PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJ''@;'; put 'put ''bnRlcnZhbCksZihfKX0pfSksMWUzKX0pO3JldHVybiBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2Uo''@;'; put 'put ''KGQsaCk9Pntjb25zdCBfPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShfKS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITAp''@;'; put 'put ''fSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxk''@;'; put 'put ''IGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBMb2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1maShm''@;'; put 'put ''dW5jdGlvbiooZixfKXtsZXQgVyxUPSExO3RyeXtXPXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChpZSl7IkxvZ2luUmVxdWlyZWRFcnJvciI9PT1pZS5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpUPSEw''@;'; put 'put ''fWlmKFQpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGYsXyl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBfPSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRo''@;'; put 'put ''PSR7YX1gKS50aGVuKFQ9Pig0MDQ9PT1ULnN0YXR1cyYmKF89ITApLFQudGV4dCgpKSkudGhlbihUPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoVCkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKF8pcmV0dXJuIGNvbnNvbGUu''@;'; put 'put ''d2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBXPW51bGw7dHJ5e1c9SlNPTi5w''@;'; put 'put ''YXJzZShUKX1jYXRjaHt9aWYoVyYmVy5odHRwU3RhdHVzQ29kZSYmNDA0PT09Vy5odHRwU3RhdHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERh''@;'; put 'put ''dGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7ZCghMCl9fSkuY2F0Y2goVD0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhp''@;'; put 'put ''cy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1''@;'; put 'put ''ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0''@;'; put 'put ''dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBhdGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBVYy5ELlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2Fz''@;'; put 'put ''ZSBVYy5ELlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBVYy5ELlNhc2pzOnJldHVybiBhLnBhdGhTQVNKU319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGU4KSxhcihhUCksYXIodmwpLGFyKGlxKSxhcih3MCksYXIoRHMpKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSx3MD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5k''@;'; put 'put ''ZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2Yg''@;'; put 'put ''T2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KG9hKTt0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnPWEuZ2V0U2FzanNDb25maWcoKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVhKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3Qgb3E9ZnVu''@;'; put 'put ''Y3Rpb24gWmhlKGMsbCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxIeD1mdW5jdGlvbiBZaGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihvcShjW2FdWzBdLGwpKXJldHVybiBhO3JldHVybi0xfTt2YXIgR2hlPUFycmF5LnByb3RvdHlwZS5zcGxpY2U7ZnVuY3Rpb24gcjgo''@;'; put 'put ''Yyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19cjgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHpoZSgpe3RoaXMuX19kYXRhX189W10sdGhpcy5zaXplPTB9LHI4LnByb3RvdHlw''@;'; put 'put ''ZS5kZWxldGU9ZnVuY3Rpb24gJGhlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiEoYTwwfHwoYT09bC5sZW5ndGgtMT9sLnBvcCgpOkdoZS5jYWxsKGwsYSwxKSwtLXRoaXMuc2l6ZSwwKSl9LHI4LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gS2hlKGMpe3ZhciBsPXRo''@;'; put 'put ''aXMuX19kYXRhX18sYT1IeChsLGMpO3JldHVybiBhPDA/dm9pZCAwOmxbYV1bMV19LHI4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSmhlKGMpe3JldHVybiBIeCh0aGlzLl9fZGF0YV9fLGMpPi0xfSxyOC5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIGVmZShjLGwpe3ZhciBhPXRoaXMuX19kYXRh''@;'; put 'put ''X18sZD1IeChhLGMpO3JldHVybiBkPDA/KCsrdGhpcy5zaXplLGEucHVzaChbYyxsXSkpOmFbZF1bMV09bCx0aGlzfTtjb25zdCBOeD1yOCxzcT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIGRmZT0ib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHNoPXNxfHxkZmV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksbXA9c2guU3ltYm9sO3ZhciBhcT1PYmplY3QucHJvdG90eXBlLHBmZT1hcS5oYXNPd25Qcm9wZXJ0eSxnZmU9YXEudG9TdHJpbmcs''@;'; put 'put ''S189bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO3ZhciBiZmU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgbHE9bXA/bXAudG9TdHJpbmdUYWc6dm9pZCAwO2NvbnN0IGk4PWZ1bmN0aW9uIE1mZShjKXtyZXR1cm4gbnVsbD09Yz92b2lkIDA9PT1jPyJbb2JqZWN0IFVuZGVmaW5lZF0i''@;'; put 'put ''OiJbb2JqZWN0IE51bGxdIjpscSYmbHEgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIG1mZShjKXt2YXIgbD1wZmUuY2FsbChjLEtfKSxhPWNbS19dO3RyeXtjW0tfXT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPWdmZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW0tfXT1hOmRlbGV0ZSBjW0tf''@;'; put 'put ''XSksaH0oYyk6ZnVuY3Rpb24geWZlKGMpe3JldHVybiBiZmUuY2FsbChjKX0oYyl9LFhfPWZ1bmN0aW9uIHhmZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sY3E9ZnVuY3Rpb24gRGZlKGMpe2lmKCFYXyhjKSlyZXR1cm4h''@;'; put 'put ''MTt2YXIgbD1pOChjKTtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IFByb3h5XSI9PWx9O3ZhciBjLElmZT1zaFsiX19jb3JlLWpzX3NoYXJlZF9fIl0sdXE9''@;'; put 'put ''KGM9L1teLl0rJC8uZXhlYyhJZmUmJklmZS5rZXlzJiZJZmUua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK2M6IiI7dmFyIFBmZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgTDU9ZnVuY3Rpb24gRmZlKGMpe2lmKG51bGwhPWMpe3RyeXtyZXR1cm4gUGZl''@;'; put 'put ''LmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgTmZlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFVmZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IFlmZT1mdW5jdGlvbiBaZmUoYyl7cmV0dXJuISghWF8oYyl8fGZ1''@;'; put 'put ''bmN0aW9uIExmZShjKXtyZXR1cm4hIXVxJiZ1cSBpbiBjfShjKSkmJihjcShjKT9VZmU6TmZlKS50ZXN0KEw1KGMpKX0sUjU9ZnVuY3Rpb24gJGZlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gV2ZlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gWWZlKGEpP2E6dm9pZCAwfSxKXz1SNShz''@;'; put 'put ''aCwiTWFwIiksUV89UjUoT2JqZWN0LCJjcmVhdGUiKTt2YXIgcjNlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGEzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIG84KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlz''@;'; put 'put ''LmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fW84LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBYZmUoKXt0aGlzLl9fZGF0YV9fPVFfP1FfKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxvOC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFFmZShjKXt2YXIg''@;'; put 'put ''bD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sbzgucHJvdG90eXBlLmdldD1mdW5jdGlvbiBpM2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihRXyl7dmFyIGE9bFtjXTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmlu''@;'; put 'put ''ZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiByM2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxvOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGwzZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBRXz92b2lkIDAhPT1sW2NdOmEzZS5jYWxsKGwsYyl9LG84LnByb3RvdHlwZS5zZXQ9ZnVu''@;'; put 'put ''Y3Rpb24gZDNlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1RXyYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBkcT1vOCxWeD1mdW5jdGlvbiB2M2UoYyxsKXt2YXIgYT1j''@;'; put 'put ''Ll9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBnM2UoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuInN0cmluZyI9PWx8fCJudW1iZXIiPT1sfHwic3ltYm9sIj09bHx8ImJvb2xlYW4iPT1sPyJfX3Byb3RvX18iIT09YzpudWxsPT09Y30obCk/YVsic3RyaW5nIj09dHlwZW9mIGw/InN0cmluZyI6''@;'; put 'put ''Imhhc2giXTphLm1hcH07ZnVuY3Rpb24gczgoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhpcy5zZXQoZFswXSxkWzFdKX19czgucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGYzZSgpe3RoaXMuc2l6ZT0wLHRo''@;'; put 'put ''aXMuX19kYXRhX189e2hhc2g6bmV3IGRxLG1hcDpuZXcoSl98fE54KSxzdHJpbmc6bmV3IGRxfX0sczgucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfM2UoYyl7dmFyIGw9VngodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0sczgucHJvdG90eXBlLmdldD1m''@;'; put 'put ''dW5jdGlvbiB5M2UoYyl7cmV0dXJuIFZ4KHRoaXMsYykuZ2V0KGMpfSxzOC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIEMzZShjKXtyZXR1cm4gVngodGhpcyxjKS5oYXMoYyl9LHM4LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gTTNlKGMsbCl7dmFyIGE9VngodGhpcyxjKSxkPWEuc2l6ZTtyZXR1''@;'; put 'put ''cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgZ1A9czg7ZnVuY3Rpb24gYTgoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgTngoYyk7dGhpcy5zaXplPWwuc2l6ZX1hOC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbmZlKCl7dGhpcy5fX2RhdGFf''@;'; put 'put ''Xz1uZXcgTngsdGhpcy5zaXplPTB9LGE4LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gaWZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxhOC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIHNmZShjKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''X2RhdGFfXy5nZXQoYyl9LGE4LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gbGZlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sYTgucHJvdG90eXBlLnNldD1mdW5jdGlvbiBrM2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5zdGFuY2VvZiBOeCl7dmFyIGQ9YS5fX2Rh''@;'; put 'put ''dGFfXztpZighSl98fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGdQKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29uc3QgVDNlPWE4O3ZhciBMM2U9ZnVuY3Rp''@;'; put 'put ''b24oKXt0cnl7dmFyIGM9UjUoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgaHE9TDNlLGZxPWZ1bmN0aW9uIFIzZShjLGwsYSl7Il9fcHJvdG9fXyI9PWwmJmhxP2hxKGMsbCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6''@;'; put 'put ''ITAsdmFsdWU6YSx3cml0YWJsZTohMH0pOmNbbF09YX07dmFyIFAzZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHBxPWZ1bmN0aW9uIEYzZShjLGwsYSl7dmFyIGQ9Y1tsXTsoIVAzZS5jYWxsKGMsbCl8fCFvcShkLGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZm''@;'; put 'put ''cShjLGwsYSl9LEJ4PWZ1bmN0aW9uIEgzZShjLGwsYSxkKXt2YXIgaD0hYTthfHwoYT17fSk7Zm9yKHZhciBmPS0xLF89bC5sZW5ndGg7KytmPF87KXt2YXIgVD1sW2ZdLFc9ZD9kKGFbVF0sY1tUXSxULGEsYyk6dm9pZCAwO3ZvaWQgMD09PVcmJihXPWNbVF0pLGg/ZnEoYSxULFcpOnBxKGEs''@;'; put 'put ''VCxXKX1yZXR1cm4gYX0sbDg9ZnVuY3Rpb24gQjNlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LGdxPWZ1bmN0aW9uIHozZShjKXtyZXR1cm4gbDgoYykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT1pOChjKX07dmFyIG1xPU9iamVjdC5wcm90b3R5cGUsVTNlPW1xLmhh''@;'; put 'put ''c093blByb3BlcnR5LFozZT1tcS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxZM2U9Z3EoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT9ncTpmdW5jdGlvbihjKXtyZXR1cm4gbDgoYykmJlUzZS5jYWxsKGMsImNhbGxlZSIpJiYhWjNlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0IFczZT1Z''@;'; put 'put ''M2UsYzg9QXJyYXkuaXNBcnJheTt2YXIgdnE9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxfcT12cSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLGJxPV9xJiZfcS5l''@;'; put 'put ''eHBvcnRzPT09dnE/c2guQnVmZmVyOnZvaWQgMDtjb25zdCB5cT0oYnE/YnEuaXNCdWZmZXI6dm9pZCAwKXx8ZnVuY3Rpb24gJDNlKCl7cmV0dXJuITF9O3ZhciBlcGU9L14oPzowfFsxLTldXGQqKSQvO2NvbnN0IG5wZT1mdW5jdGlvbiB0cGUoYyxsKXt2YXIgYT10eXBlb2YgYztyZXR1cm4h''@;'; put 'put ''IShsPWw/PzkwMDcxOTkyNTQ3NDA5OTEpJiYoIm51bWJlciI9PWF8fCJzeW1ib2wiIT1hJiZlcGUudGVzdChjKSkmJmM+LTEmJmMlMT09MCYmYzxsfSx3cT1mdW5jdGlvbiBpcGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9''@;'; put 'put ''O3ZhciBubD17fTtubFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09bmxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPW5sWyJbb2JqZWN0IEludDhBcnJheV0iXT1ubFsiW29iamVjdCBJbnQxNkFycmF5XSJdPW5sWyJbb2JqZWN0IEludDMyQXJyYXldIl09bmxbIltvYmplY3QgVWludDhBcnJh''@;'; put 'put ''eV0iXT1ubFsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MTZBcnJheV0iXT1ubFsiW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxubFsiW29iamVjdCBBcmd1bWVudHNdIl09bmxbIltvYmplY3QgQXJyYXldIl09bmxbIltvYmplY3QgQXJyYXlCdWZmZXJd''@;'; put 'put ''Il09bmxbIltvYmplY3QgQm9vbGVhbl0iXT1ubFsiW29iamVjdCBEYXRhVmlld10iXT1ubFsiW29iamVjdCBEYXRlXSJdPW5sWyJbb2JqZWN0IEVycm9yXSJdPW5sWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPW5sWyJbb2JqZWN0IE1hcF0iXT1ubFsiW29iamVjdCBOdW1iZXJdIl09bmxbIltvYmpl''@;'; put 'put ''Y3QgT2JqZWN0XSJdPW5sWyJbb2JqZWN0IFJlZ0V4cF0iXT1ubFsiW29iamVjdCBTZXRdIl09bmxbIltvYmplY3QgU3RyaW5nXSJdPW5sWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgbVA9ZnVuY3Rpb24gSXBlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciBD''@;'; put 'put ''cT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGViPUNxJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsdlA9ZWImJmViLmV4cG9ydHM9PT1DcSYmc3EucHJvY2Vzcztj''@;'; put 'put ''b25zdCB1OD1mdW5jdGlvbigpe3RyeXtyZXR1cm4gZWImJmViLnJlcXVpcmUmJmViLnJlcXVpcmUoInV0aWwiKS50eXBlc3x8dlAmJnZQLmJpbmRpbmcmJnZQLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpO3ZhciBTcT11OCYmdTguaXNUeXBlZEFycmF5O2NvbnN0IFBwZT1TcT9tUChTcSk6''@;'; put 'put ''ZnVuY3Rpb24gVHBlKGMpe3JldHVybiBsOChjKSYmd3EoYy5sZW5ndGgpJiYhIW5sW2k4KGMpXX07dmFyIEhwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IE1xPWZ1bmN0aW9uIE5wZShjLGwpe3ZhciBhPWM4KGMpLGQ9IWEmJlczZShjKSxoPSFhJiYhZCYmeXEoYyks''@;'; put 'put ''Zj0hYSYmIWQmJiFoJiZQcGUoYyksXz1hfHxkfHxofHxmLFQ9Xz9mdW5jdGlvbiBOM2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBkfShjLmxlbmd0aCxTdHJpbmcpOltdLFc9VC5sZW5ndGg7Zm9yKHZhciBpZSBpbiBjKShsfHxIcGUuY2Fs''@;'; put 'put ''bChjLGllKSkmJighX3x8ISgibGVuZ3RoIj09aWV8fGgmJigib2Zmc2V0Ij09aWV8fCJwYXJlbnQiPT1pZSl8fGYmJigiYnVmZmVyIj09aWV8fCJieXRlTGVuZ3RoIj09aWV8fCJieXRlT2Zmc2V0Ij09aWUpfHxucGUoaWUsVykpKSYmVC5wdXNoKGllKTtyZXR1cm4gVH07dmFyIFZwZT1PYmpl''@;'; put 'put ''Y3QucHJvdG90eXBlO2NvbnN0IF9QPWZ1bmN0aW9uIEJwZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBsJiZsLnByb3RvdHlwZXx8VnBlKX0seHE9ZnVuY3Rpb24ganBlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwo''@;'; put 'put ''YSkpfX0sVXBlPXhxKE9iamVjdC5rZXlzLE9iamVjdCk7dmFyIFlwZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IEVxPWZ1bmN0aW9uICRwZShjKXtyZXR1cm4gbnVsbCE9YyYmd3EoYy5sZW5ndGgpJiYhY3EoYyl9LGJQPWZ1bmN0aW9uIHFwZShjKXtyZXR1cm4gRXEo''@;'; put 'put ''Yyk/TXEoYyk6ZnVuY3Rpb24gV3BlKGMpe2lmKCFfUChjKSlyZXR1cm4gVXBlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpWXBlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9yIiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHQ0ZT1PYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5O2NvbnN0IHI0ZT1mdW5jdGlvbiBuNGUoYyl7aWYoIVhfKGMpKXJldHVybiBmdW5jdGlvbiBKcGUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2JqZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9X1AoYyksYT1bXTtmb3IodmFyIGQg''@;'; put 'put ''aW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXQ0ZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LHlQPWZ1bmN0aW9uIGk0ZShjKXtyZXR1cm4gRXEoYyk/TXEoYywhMCk6cjRlKGMpfTt2YXIga3E9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5u''@;'; put 'put ''b2RlVHlwZSYmZXhwb3J0cyxBcT1rcSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFRxPUFxJiZBcS5leHBvcnRzPT09a3E/c2guQnVmZmVyOnZvaWQgMCxEcT1UcT9UcS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgSXE9ZnVuY3Rp''@;'; put 'put ''b24gcDRlKCl7cmV0dXJuW119O3ZhciBtNGU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxMcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHY0ZT1McT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gaDRlKGMsbCl7''@;'; put 'put ''Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIF89Y1thXTtsKF8sYSxjKSYmKGZbaCsrXT1fKX1yZXR1cm4gZn0oTHEoYyksZnVuY3Rpb24obCl7cmV0dXJuIG00ZS5jYWxsKGMsbCl9KSl9OklxO2NvbnN0IHdQPXY0ZSxScT1mdW5jdGlvbiB5''@;'; put 'put ''NGUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30sT3E9eHEoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIFM0ZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIg''@;'; put 'put ''bD1bXTtjOylScShsLHdQKGMpKSxjPU9xKGMpO3JldHVybiBsfTpJcTtjb25zdCBQcT1TNGUsRnE9ZnVuY3Rpb24gRTRlKGMsbCxhKXt2YXIgZD1sKGMpO3JldHVybiBjOChjKT9kOlJxKGQsYShjKSl9LEE0ZT1mdW5jdGlvbiBrNGUoYyl7cmV0dXJuIEZxKGMsYlAsd1ApfSxENGU9ZnVuY3Rp''@;'; put 'put ''b24gVDRlKGMpe3JldHVybiBGcShjLHlQLFBxKX0sQ1A9UjUoc2gsIkRhdGFWaWV3IiksU1A9UjUoc2gsIlByb21pc2UiKSxNUD1SNShzaCwiU2V0IikseFA9UjUoc2gsIldlYWtNYXAiKTt2YXIgSHE9IltvYmplY3QgTWFwXSIsTnE9IltvYmplY3QgUHJvbWlzZV0iLFZxPSJbb2JqZWN0IFNl''@;'; put 'put ''dF0iLEJxPSJbb2JqZWN0IFdlYWtNYXBdIixqcT0iW29iamVjdCBEYXRhVmlld10iLEY0ZT1MNShDUCksSDRlPUw1KEpfKSxONGU9TDUoU1ApLFY0ZT1MNShNUCksQjRlPUw1KHhQKSxPNT1pODsoQ1AmJk81KG5ldyBDUChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9anF8fEpfJiZPNShuZXcgSl8p''@;'; put 'put ''IT1IcXx8U1AmJk81KFNQLnJlc29sdmUoKSkhPU5xfHxNUCYmTzUobmV3IE1QKSE9VnF8fHhQJiZPNShuZXcgeFApIT1CcSkmJihPNT1mdW5jdGlvbihjKXt2YXIgbD1pOChjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9MNShhKToiIjtpZihkKXN3''@;'; put 'put ''aXRjaChkKXtjYXNlIEY0ZTpyZXR1cm4ganE7Y2FzZSBINGU6cmV0dXJuIEhxO2Nhc2UgTjRlOnJldHVybiBOcTtjYXNlIFY0ZTpyZXR1cm4gVnE7Y2FzZSBCNGU6cmV0dXJuIEJxfXJldHVybiBsfSk7Y29uc3QgRVA9TzU7dmFyIHo0ZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''O2NvbnN0IHpxPXNoLlVpbnQ4QXJyYXksa1A9ZnVuY3Rpb24gVzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyB6cShsKS5zZXQobmV3IHpxKGMpKSxsfTt2YXIgcTRlPS9cdyokLzt2YXIgVXE9bXA/bXAucHJvdG90eXBlOnZvaWQgMCxacT1V''@;'; put 'put ''cT9VcS52YWx1ZU9mOnZvaWQgMDtjb25zdCBDNWU9ZnVuY3Rpb24gdzVlKGMsbCxhKXt2YXIgZD1jLmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4ga1AoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJl''@;'; put 'put ''dHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEc0ZShjLGwpe3ZhciBhPWw/a1AoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVj''@;'; put 'put ''dCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50''@;'; put 'put ''OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBlNWUoYyxsKXt2YXIgYT1sP2tQKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQs''@;'; put 'put ''Yy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''SzRlKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLHE0ZS5leGVjKGMpKTtyZXR1cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBKNGUoYyl7cmV0dXJuIFpxP09iamVjdChacS5jYWxsKGMpKTp7''@;'; put 'put ''fX0oYyl9fTt2YXIgWXE9T2JqZWN0LmNyZWF0ZSxTNWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjKCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighWF8obCkpcmV0dXJue307aWYoWXEpcmV0dXJuIFlxKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQg''@;'; put 'put ''MCxhfX0oKTtjb25zdCBNNWU9UzVlO3ZhciBXcT11OCYmdTguaXNNYXA7Y29uc3QgSTVlPVdxP21QKFdxKTpmdW5jdGlvbiBBNWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBNYXBdIj09RVAoYyl9O3ZhciBHcT11OCYmdTguaXNTZXQ7Y29uc3QgRjVlPUdxP21QKEdxKTpmdW5jdGlvbiBS''@;'; put 'put ''NWUoYyl7cmV0dXJuIGw4KGMpJiYiW29iamVjdCBTZXRdIj09RVAoYyl9O3ZhciAkcT0iW29iamVjdCBBcmd1bWVudHNdIixxcT0iW29iamVjdCBGdW5jdGlvbl0iLEtxPSJbb2JqZWN0IE9iamVjdF0iLFlhPXt9O1lhWyRxXT1ZYVsiW29iamVjdCBBcnJheV0iXT1ZYVsiW29iamVjdCBBcnJh''@;'; put 'put ''eUJ1ZmZlcl0iXT1ZYVsiW29iamVjdCBEYXRhVmlld10iXT1ZYVsiW29iamVjdCBCb29sZWFuXSJdPVlhWyJbb2JqZWN0IERhdGVdIl09WWFbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQ4QXJyYXldIl09WWFbIltv''@;'; put 'put ''YmplY3QgSW50MTZBcnJheV0iXT1ZYVsiW29iamVjdCBJbnQzMkFycmF5XSJdPVlhWyJbb2JqZWN0IE1hcF0iXT1ZYVsiW29iamVjdCBOdW1iZXJdIl09WWFbS3FdPVlhWyJbb2JqZWN0IFJlZ0V4cF0iXT1ZYVsiW29iamVjdCBTZXRdIl09WWFbIltvYmplY3QgU3RyaW5nXSJdPVlhWyJbb2Jq''@;'; put 'put ''ZWN0IFN5bWJvbF0iXT1ZYVsiW29iamVjdCBVaW50OEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPVlhWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLFlhWyJbb2JqZWN0IEVycm9yXSJdPVlhW3FxXT1ZYVsiW29i''@;'; put 'put ''amVjdCBXZWFrTWFwXSJdPSExO2NvbnN0IGNnZT1mdW5jdGlvbiBqeChjLGwsYSxkLGgsZil7dmFyIF8sVD0xJmwsVz0yJmwsaWU9NCZsO2lmKGEmJihfPWg/YShjLGQsaCxmKTphKGMpKSx2b2lkIDAhPT1fKXJldHVybiBfO2lmKCFYXyhjKSlyZXR1cm4gYzt2YXIgZ2U9YzgoYyk7aWYoZ2Up''@;'; put 'put ''e2lmKF89ZnVuY3Rpb24gVTRlKGMpe3ZhciBsPWMubGVuZ3RoLGE9bmV3IGMuY29uc3RydWN0b3IobCk7cmV0dXJuIGwmJiJzdHJpbmciPT10eXBlb2YgY1swXSYmejRlLmNhbGwoYywiaW5kZXgiKSYmKGEuaW5kZXg9Yy5pbmRleCxhLmlucHV0PWMuaW5wdXQpLGF9KGMpLCFUKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiB1NGUoYyxsKXt2YXIgYT0tMSxkPWMubGVuZ3RoO2ZvcihsfHwobD1BcnJheShkKSk7KythPGQ7KWxbYV09Y1thXTtyZXR1cm4gbH0oYyxfKX1lbHNle3ZhciB3ZT1FUChjKSxFZT13ZT09cXF8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PXdlO2lmKHlxKGMpKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbiBsNGUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNlKCk7dmFyIGE9Yy5sZW5ndGgsZD1EcT9EcShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsVCk7aWYod2U9PUtxfHx3ZT09JHF8fEVlJiYhaCl7aWYoXz1XfHxFZT97fTpmdW5jdGlvbiB4''@;'; put 'put ''NWUoYyl7cmV0dXJuImZ1bmN0aW9uIiE9dHlwZW9mIGMuY29uc3RydWN0b3J8fF9QKGMpP3t9Ok01ZShPcShjKSl9KGMpLCFUKXJldHVybiBXP2Z1bmN0aW9uIE00ZShjLGwpe3JldHVybiBCeChjLFBxKGMpLGwpfShjLGZ1bmN0aW9uIG80ZShjLGwpe3JldHVybiBjJiZCeChsLHlQKGwpLGMp''@;'; put 'put ''fShfLGMpKTpmdW5jdGlvbiBfNGUoYyxsKXtyZXR1cm4gQngoYyx3UChjKSxsKX0oYyxmdW5jdGlvbiBLcGUoYyxsKXtyZXR1cm4gYyYmQngobCxiUChsKSxjKX0oXyxjKSl9ZWxzZXtpZighWWFbd2VdKXJldHVybiBoP2M6e307Xz1DNWUoYyx3ZSxUKX19Znx8KGY9bmV3IFQzZSk7dmFyIFpl''@;'; put 'put ''PWYuZ2V0KGMpO2lmKFplKXJldHVybiBaZTtmLnNldChjLF8pLEY1ZShjKT9jLmZvckVhY2goZnVuY3Rpb24oeXQpe18uYWRkKGp4KHl0LGwsYSx5dCxjLGYpKX0pOkk1ZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKHl0LGt0KXtfLnNldChrdCxqeCh5dCxsLGEsa3QsYyxmKSl9KTt2YXIgZXQ9''@;'; put 'put ''Z2U/dm9pZCAwOihpZT9XP0Q0ZTpBNGU6Vz95UDpiUCkoYyk7cmV0dXJuIGZ1bmN0aW9uIEQzZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30oZXR8fGMsZnVuY3Rpb24oeXQsa3Qpe2V0JiYoeXQ9Y1trdD15dF0pLHBx''@;'; put 'put ''KF8sa3QsangoeXQsbCxhLGt0LGMsZikpfSksX30seng9ZnVuY3Rpb24gaGdlKGMpe3JldHVybiBjZ2UoYyw1KX07dmFyIGZnZT1GKDkyODczKTtsZXQgQWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRo''@;'; put 'put ''aXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29mdD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/''@;'; put 'put ''YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRDKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IFc9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2Ui''@;'; put 'put ''ZGF5cyI6e2xldCBpZT1XLzg2NGU1O3JldHVybiBpZT1NYXRoLmFicyhpZSksaWU9TWF0aC5mbG9vcihpZSksaWV9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gVy8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBh''@;'; put 'put ''cnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBUPTFlMyphLTMxNTYxOTJlNTtyZXR1cm4gVCs9NjAqbmV3IERhdGUoVCkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoVCl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXts''@;'; put 'put ''ZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixmPWQuc3BsaXQoIi4iKVswXSxfPWQuc3BsaXQoIi4iKVsxXSxUPWYrIkFsbCI7YVtmXSYmKGFbVF18fChhW1RdPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbVF0pLGgubGVuZ3RoPjAmJihh''@;'; put 'put ''W2ZdPWFbZl0uZmlsdGVyKF8/Vz0+V1tfXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6Vz0+Vy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57Zlto''@;'; put 'put ''XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3Bs''@;'; put 'put ''YXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMrPXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2gr''@;'; put 'put ''KylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9y''@;'; put 'put ''RWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRl''@;'; put 'put ''IGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29u''@;'; put 'put ''dmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihhPXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0''@;'; put 'put ''aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITApe2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgXyBvZiBkKWRlbGV0ZSBmW19dO3JldHVybiBmZ2UoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0''@;'; put 'put ''IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9u''@;'; put 'put ''ZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2Fz''@;'; put 'put ''ZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwiKX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiB6eChhKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksQzA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5sb2dn''@;'; put 'put ''ZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT1fLHRoaXMucm91dGVyPVQsdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlz''@;'; put 'put ''Ll9saWNlbmNlU3RhdGU9c1AsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVzX2lu''@;'; put 'put ''X2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tleTp0''@;'; put 'put ''aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6S28oKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNpdGVf''@;'; put 'put ''aWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgVGUobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgVGUoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgVGUoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBUZSghMSksdGhpcy5s''@;'; put 'put ''aWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgVGUobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBUZSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgVGUobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IFRlKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IFRlKHRoaXMuX2xp''@;'; put 'put ''Y2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKFc9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgaWU9YC9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3Nt''@;'; put 'put ''YXRjaCZtaXNzbWF0Y2hJZD0ke1d9JmZvcmNlPXRydWVgO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChpZSksdGhpcy5kZWFjdGl2YXRlQXBwKGllKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj''@;'; put 'put ''ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz''@;'; put 'put ''KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3QgXz0nRXJyb3IgZ2V0dGluZyAi''@;'; put 'put ''R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcihfKSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShf''@;'; put 'put ''KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu''@;'; put 'put ''dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF''@;'; put 'put ''WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXt5''@;'; put 'put ''aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihULGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oVCl7cmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciBfPWZpKGZ1bmN0aW9uKihUKXtjb25zdCBXPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk''@;'; put 'put ''e1R9YDtjb25zb2xlLmVycm9yKFcpO2NvbnN0IGllPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFcpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQoaWUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoaWUpLHNldFRpbWVvdXQoKCk9PmguYXBw''@;'; put 'put ''bGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQp''@;'; put 'put ''fSkoKX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCBfPXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5''@;'; put 'put ''OnRoaXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO198fChfPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQoXyksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJz''@;'; put 'put ''QWxsb3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpXfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJ''@;'; put 'put ''bj1XLHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChXKSxXPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxk''@;'; put 'put ''JiZ0aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1''@;'; put 'put ''cm47cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZh''@;'; put 'put ''bHVlKGRbbjEudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnN0YWdlX3Jvd3NfYWxsb3dl''@;'; put 'put ''ZF0pLGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0''@;'; put 'put ''OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW24xLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtuMS5saW5l''@;'; put 'put ''YWdlX2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW24xLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtuMS5lZGl0UmVj''@;'; put 'put ''b3JkXSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbjEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50''@;'; put 'put ''KGEpfXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1maShmdW5jdGlvbiooXyxUKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlw''@;'; put 'put ''dG8uc3VidGxlKXRyeXtsZXQgRWU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO18oSlNPTi5wYXJzZShFZSkpfWNhdGNoKEVlKXtUKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitFZSl9bGV0IGllLFc9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVm''@;'; put 'put ''ZmVyKGEpLmNhdGNoKEVlPT57VChFZSl9KTtjb25zdCBnZT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoZCkuY2F0Y2goRWU9PntUKEVlKX0pO2lmKCFnZSlyZXR1cm4gdm9pZCBUKCJNaXNzaW5nIGFjdGl2YXRpb24ga2V5Iik7bGV0IHdlO2llPWdlO3RyeXt3ZT15aWVsZCB3aW5kb3cu''@;'; put 'put ''Y3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBrY3M4IixpZSx7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goRWUpe1QoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrRWUpfWlmKHdlKWlmKFcpdHJ5e3dpbmRvdy5jcnlwdG8u''@;'; put 'put ''c3VidGxlLmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LHdlLFcpLnRoZW4oRWU9PntsZXQgWmU9KG5ldyBoaGUuVGV4dERlY29kZXIpLmRlY29kZShFZSk7dHJ5e18oSlNPTi5wYXJzZShaZSkpfWNhdGNoKG90KXtUKCJFcnJvciBwYXJzaW5nIGxpY2Vu''@;'; put 'put ''c2Uga2V5IGRhdGEuICIrb3QpfX0sRWU9PntUKEVlKX0pfWNhdGNoKEVlKXtUKEVlKX1lbHNlIFQoIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIFQoIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbihfLFQpe3JldHVybiBmLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1zUCx0aGlz''@;'; put 'put ''LmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPUtvKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksXz1wYXJzZUludChkLnNwbGl0KCIs''@;'; put 'put ''IilbMV0pO3JldHVybiBLbyhmKS5pc1NhbWUoS28oKSwiZGF5Iik/Xz49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLF8rMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGlu''@;'; put 'put ''ZWFnZVJlbmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9uKihoLGYpe2goQiQuSihhKSl9KTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoQiQuYyhhKSl9KX1zZXRTaXRlSWQoYSl7YS5zaXRlX2lkX211bHRpcGxlP3RoaXMuc2FzU2VydmljZS5zZXRM''@;'; put 'put ''aWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZF9tdWx0aXBsZSk6YS5zaXRlX2lkJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWQpfWhhbmRsZVNpdGVJZE1pc3NtYXRjaChhLGQsaCxmKXtsZXQgXz0hMSxUPSExO2lmKCghYS5zaXRlX2lkfHxhLnNpdGVfaWQhPT1oKSYm''@;'; put 'put ''KF89ITApLCghYS5zaXRlX2lkX211bHRpcGxlfHwhYS5zaXRlX2lkX211bHRpcGxlLmluY2x1ZGVzKGgpKSYmKFQ9ITApLF8mJlQpcmV0dXJuIGNvbnNvbGUuZXJyb3IoIlRoZSBrZXkgcHJvdmlkZWQgaXMgZm9yIGRpZmZlcmVudCBvcmdhbml6YXRpb24uIiksdm9pZCBzZXRUaW1lb3V0KCgp''@;'; put 'put ''PT57Y29uc3QgVz0iL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc21hdGNoJmZvcmNlPXRydWUiO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dChXKSx0aGlzLl9saWNlbmNlU3RhdGU9c1AsdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCks''@;'; put 'put ''Znx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChXKX0pfWNhbGN1bGF0ZUV4cGlyeShhKXtsZXQgZD1LbyhhLnZhbGlkX3VudGlsLCJZWVlZLU1NLUREIikuc3RhcnRPZigiZGF5IiksaD1LbygpLnN0YXJ0T2YoImRheSIpLGY9ZC5kaWZmKGgsImRheXMiKTtyZXR1cm57ZXhwaXJ5X2RhdGU6''@;'; put 'put ''ZCxkYXlzVG9FeHBpcnk6Zn19aGFuZGxlRXhwaXJ5KGEsZCxoLGYpe3NldFRpbWVvdXQoKCk9Pntjb25zdCBfPWAvbGljZW5zaW5nL2tleT9mb3JjZT10cnVlJmVycm9yPWV4cGlyZWQmZGV0YWlscz0ke2J0b2EoIkV4cGlyeSBkYXRlOiAiK2EuZm9ybWF0KCJERC9NTS9ZWVlZIikpfWA7dGhp''@;'; put 'put ''cy5saWNlbmNlUHJvYmxlbS5uZXh0KF8pLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXyl9KX1oYW5kbGVVc2Vyc0FsbG93ZWQoYSl7YS5kZW1vJiZ2b2lkIDAhPT10aGlzLl9s''@;'; put 'put ''aWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCYmKGEudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWQ+MD9hLnVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQpLHRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZH1oYW5k''@;'; put 'put ''bGVVc2VyUmVnaXN0cmF0aW9uKGEsZCxoKXtpZih0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJihkLlJFR0lTVEVSQ09VTlQ+YS51c2Vyc19hbGxvd2VkPyhjb25zb2xlLndhcm4oIkFwcCBoYXMgbW9yZSB1c2VycyByZWdpc3RlcmVkIHRoZW4gbGljZW5zZWQuIiksdGhpcy5pc0FwcE92ZXJD''@;'; put 'put ''YXBhY2l0eS5uZXh0KCEwKSk6ZC5SRUdJU1RFUkNPVU5UPT09YS51c2Vyc19hbGxvd2VkJiZjb25zb2xlLndhcm4oIkFwcCBoYXMgaGl0IGxpbWl0IG9mIHVzZXJzIHJlZ2lzdGVyZWQuIikpLDEhPT1kLklTUkVHSVNURVJFRClyZXR1cm4gZC5SRUdJU1RFUkNPVU5UPGEudXNlcnNfYWxsb3dl''@;'; put 'put ''ZHx8IXRoaXMudXNlckNvdW50TGltaXRhdGlvbj8oY29uc29sZS5sb2coIlVzZXIgY2FuIHJlZ2lzdGVyIiksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITApLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIv''@;'; put 'put ''bGljZW5zaW5nL3JlZ2lzdGVyIikpKToodGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyLm5leHQoITEpLHRoaXMuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZChofHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2xpbWl0IikpKTt0aGlzLmlzQXBwQWN0aXZhdGVk''@;'; put 'put ''Lm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcih3MCksYXIoZTgpLGFyKHZsKSxhcihvYSksYXIoQWMpLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSksY30pKCksVXg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zeXNzaXRlPW5ldyBUZShu''@;'; put 'put ''dWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGhwJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pfXNhc1NlcnZp''@;'; put 'put ''Y2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0''@;'; put 'put ''dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEp''@;'; put 'put ''LHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVu''@;'; put 'put ''Y3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLlNZU1NJVEVdKTtsZXQgXz1bXTtpZigoIWYuZ2xvYnZhcnN8fGYuZ2xvYnZhcnMmJiFmLmdsb2J2YXJzWzBdKSYmXy5wdXNoKCJHbG9idmFycyIpLGYuc2FzZGF0YXNldHN8fF8ucHVzaCgiU2FzZGF0YXNldHMiKSxmLnNhc2xpYnN8fF8ucHVz''@;'; put 'put ''aCgiU2FzbGlicyIpLGYueGxtYXBzfHxfLnB1c2goIlhMTWFwcyIpLF8ubGVuZ3RoPjApcmV0dXJuIGQ9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLGAke18uam9pbigiLCAiKX0gYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZWApLHZvaWQgYS5s''@;'; put 'put ''aWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLlNZU1NJVEUsU1lTU0NQTDpmLlNZU1NDUEwsU1lTVENQSVBIT1NUTkFNRTpmLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5TWVNWTE9ORyxNRU1TSVpFOmYuTUVNU0la''@;'; put 'put ''RSxTWVNQUk9DRVNTTU9ERTpmLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuU1lTSE9TVE5BTUUsU1lTSE9TVElORk9MT05HOmYuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuU1lTRU5DT0RJTkcsQVVUT0VYRUM6Zi5BVVRPRVhFQyxJU0FETUlOOmYuZ2xvYnZhcnNbMF0uSVNB''@;'; put 'put ''RE1JTixEQ19BRE1JTl9HUk9VUDpmLmdsb2J2YXJzWzBdLkRDX0FETUlOX0dST1VQfTtsZXQgaWUsZ2UsVD1mLnNhc2RhdGFzZXRzLFc9e307Zm9yKGxldCBvdCBvZiBUKVdbb3QuTElCUkVGXXx8KFdbb3QuTElCUkVGXT1bXSksV1tvdC5MSUJSRUZdLnB1c2gob3QuRFNOKTtsZXQgd2U9SlNP''@;'; put 'put ''Ti5wYXJzZShKU09OLnN0cmluZ2lmeShXKSksRWU9W107Zm9yKGxldCBvdCBvZiBPYmplY3Qua2V5cyh3ZSkpRWUucHVzaCh7TElCUkFSWVJFRjpvdCx0YWJsZXM6d2Vbb3RdfSk7bGV0IFplPUVlO2llPVcsZ2U9T2JqZWN0LmtleXMoVyksdm9pZCAwIT09aWUmJihHbi5lZGl0b3IubGlic0Fu''@;'; put 'put ''ZFRhYmxlcz1pZSksR24ueGxtYXBzPWYueGxtYXBzLm1hcChvdD0+KHtpZDpvdFswXSxkZXNjcmlwdGlvbjpvdFsxXSx0YXJnZXREUzpvdFsyXX0pKSxHbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9WmUsR24uZWRpdG9yLmxpYnJhcmllcz1nZSxHbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxH''@;'; put 'put ''bi5kY0xpYj1mLmdsb2J2YXJzWzBdLkRDTElCLHlpZWxkIGEubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbihmKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFs''@;'; put 'put ''KCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygiQWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRl''@;'; put 'put ''ZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51''@;'; put 'put ''cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVlIikpfSkoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8YykoYXIoQzApLGFyKHZsKSxhcihvYSksYXIodzApLGFyKERzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgcGdle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5mbj1sLHRoaXMuc3Vic2NyaXB0aW9ucz1hfXVu''@;'; put 'put ''c3Vic2NyaWJlKCl7Y29uc3QgbD10aGlzLnN1YnNjcmlwdGlvbnMuaW5kZXhPZih0aGlzKTstMSE9PWwmJnRoaXMuc3Vic2NyaXB0aW9ucy5zcGxpY2UobCwxKX19ZnVuY3Rpb24gdnAoYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwv''@;'; put 'put ''cGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBrZihjKXtyZXR1cm4gZnVuY3Rpb24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHZwKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGQ4KGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHZwKGEpP2w6a2YoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHZwKGEpJiZ2cChkKT9sOnZwKGEpP2tmKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp2cChkKT9rZihmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19Y29uc3QgWng9ZDgoZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBZeChjLGwpe3Jl''@;'; put 'put ''dHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCxjKX12YXIgWHE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBKcT1mdW5jdGlvbigpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVy''@;'; put 'put ''biJbb2JqZWN0IEFyZ3VtZW50c10iPT09WHEuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIFl4KCJjYWxsZWUiLGwpfX0oKSxfZ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBRcShjKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX12YXIgd2dlPWtmKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFz''@;'; put 'put ''eS1sYW5kL2VtcHR5Il0/bFsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0/bC5jb25zdHJ1Y3RvclsiZmFudGFzeS1sYW5kL2VtcHR5Il0oKTpu''@;'; put 'put ''dWxsIT1sJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5lbXB0eT9sLmVtcHR5KCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3IuZW1wdHk/bC5jb25zdHJ1Y3Rvci5lbXB0eSgpOl9nZShsKT9bXTpRcShsKT8iIjpmdW5jdGlvbiBi''@;'; put 'put ''Z2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OkpxKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiB5Z2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp''@;'; put 'put ''O3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFy''@;'; put 'put ''cmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNv''@;'; put 'put ''bnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IENnZT13Z2U7ZnVuY3Rpb24gZUsoYyl7Zm9yKHZhciBhLGw9W107IShhPWMubmV4dCgpKS5kb25lOylsLnB1c2goYS52YWx1ZSk7cmV0dXJuIGx9ZnVuY3Rpb24gdEsoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7''@;'; put 'put ''aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0dXJuITF9Y29uc3QgVFA9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gTWdlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgeGdlPSF7dG9TdHJpbmc6bnVs''@;'; put 'put ''bH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3RyaW5nIiksbks9WyJjb25zdHJ1Y3RvciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxySz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoImxlbmd0aCIpfSgpLEVnZT1mdW5jdGlvbihsLGEpe2Zvcih2YXIgZD0wO2Q8bC5sZW5ndGg7KXtpZihsW2RdPT09YSlyZXR1cm4hMDtkKz0xfXJldHVybiExfTtjb25zdCBpSz1rZigiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0''@;'; put 'put ''LmtleXN8fHJLP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107dmFyIGEsZCxoPVtdLGY9cksmJkpxKGwpO2ZvcihhIGluIGwpWXgoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoeGdlKWZvcihkPW5LLmxlbmd0aC0xO2Q+PTA7KVl4KGE9''@;'; put 'put ''bktbZF0sbCkmJiFFZ2UoaCxhKSYmKGhbaC5sZW5ndGhdPWEpLGQtPTE7cmV0dXJuIGh9OmZ1bmN0aW9uKGwpe3JldHVybiBPYmplY3QobCkhPT1sP1tdOk9iamVjdC5rZXlzKGwpfSksb0s9a2YoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmlu''@;'; put 'put ''ZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIHNLKGMsbCxhLGQpe3ZhciBoPWVLKGMpO2Z1bmN0aW9uIF8oVCxXKXtyZXR1cm4gRFAoVCxXLGEuc2xpY2UoKSxkLnNsaWNlKCkpfXJldHVybiF0SyhmdW5jdGlvbihULFcpe3JldHVy''@;'; put 'put ''biF0SyhfLFcsVCl9LGVLKGwpLGgpfWZ1bmN0aW9uIERQKGMsbCxhLGQpe2lmKFRQKGMsbCkpcmV0dXJuITA7dmFyIGg9b0soYyk7aWYoaCE9PW9LKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBs''@;'; put 'put ''WyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQv''@;'; put 'put ''ZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0''@;'; put 'put ''Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gU2dlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9''@;'; put 'put ''PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFUUChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjpp''@;'; put 'put ''ZighVFAoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5p''@;'; put 'put ''Z25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0x''@;'; put 'put ''fXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy5lbnRyaWVzKCksbC5lbnRyaWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIlNldCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmc0soYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29u''@;'; put 'put ''Y2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWlu''@;'; put 'put ''dDhBcnJheSI6Y2FzZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDpyZXR1cm4hMX12YXIgXz1pSyhjKTtpZihfLmxlbmd0aCE9PWlLKGwpLmxlbmd0aClyZXR1cm4hMTt2YXIgVD1hLmNvbmNhdChbY10pLFc9ZC5jb25jYXQoW2xdKTtmb3IoZj1fLmxlbmd0aC0xO2Y+PTA7KXt2YXIgaWU9X1tmXTtpZighWXgoaWUsbCl8fCFEUChsW2llXSxjW2ll''@;'; put 'put ''XSxULFcpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3QgRGdlPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIERQKGwsYSxbXSxbXSl9KSxhSz1rZihmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmRGdlKGwsQ2dlKGwpKX0pO2Z1bmN0aW9uIHRiKGMpe3JldHVybiBudWxsPT1jfWZ1bmN0''@;'; put 'put ''aW9uIF9wKGMpe3JldHVybiB0YihjKXx8YUsoYyl9ZnVuY3Rpb24gSVAoYyl7cmV0dXJuIFp4KFN0cmluZyxjKX1mdW5jdGlvbiBXeChjKXtyZXR1cm4gWngoT2JqZWN0LGMpfWZ1bmN0aW9uIGNLKGMpe3JldHVybiBaeChNYXAsYyl9ZnVuY3Rpb24gdUsoYyxsKXtyZXR1cm4gYyE9PWx9ZnVu''@;'; put 'put ''Y3Rpb24gZEsoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBoSyhjKXtjb25zdCBsPW5ldyBNYXA7Zm9yKGNvbnN0W2EsZF1vZiBjKWNLKGQpP2wuc2V0KGEsaEsoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gSGdlKGMp''@;'; put 'put ''e3N3aXRjaCghMCl7Y2FzZSBjSyhjKTpyZXR1cm4gaEsoYyk7Y2FzZSBXeChjKSYmIUFycmF5LmlzQXJyYXkoYyk6cmV0dXJuIFA1KHt9LGMpO2RlZmF1bHQ6cmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYykpfX1mdW5jdGlvbiBQNSguLi5jKXtjb25zdCBsPXt9O3JldHVybiBj''@;'; put 'put ''Lm1hcChhPT5XeChhKT97Li4uYX06e30pLmZvckVhY2goYT0+e09iamVjdC5rZXlzKGEpLmZvckVhY2goZD0+e2NvbnN0IGg9YVtkXTtsW2RdPUFycmF5LmlzQXJyYXkoaCk/QXJyYXkuZnJvbShoKTpXeChoKT9QNShsW2RdfHx7fSxoKTpofSl9KSxsfWZ1bmN0aW9uIHBLKGM9d2luZG93KXty''@;'; put 'put ''ZXR1cm4hdGIoYyl9bGV0IEd4LGdLLExQLFJQO2Z1bmN0aW9uIG1LKGM9ITApe2lmKCFjfHwhR3gpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO0d4PWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJu''@;'; put 'put ''IEd4fWZ1bmN0aW9uIHpnZShjPSEwKXtyZXR1cm4gYyYmR3h8fChnSz13aW5kb3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGdLfWZ1bmN0aW9uIHZLKGM9ITApe3JldHVybiBjJiZMUHx8KExQPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv''@;'; put 'put ''bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksTFB9ZnVuY3Rpb24gX0soYz0hMCl7aWYoIWN8fCFSUCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7''@;'; put 'put ''Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9fKXthPWxbZF07YnJlYWt9UlA9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIFJQfWZ1bmN0aW9uIEY1KGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gd0soYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCBxZ2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1q''@;'; put 'put ''cyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9RjUoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIpKS50cmltKCk7ZG9jdW1lbnQuYm9keS5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07ZnVuY3Rpb24gTUsoYyxsKXtzd2l0Y2goYyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA0OnJldHVybiBmdW5jdGlvbihhLGQsaCxmKXty''@;'; put 'put ''ZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNjpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07''@;'; put 'put ''Y2FzZSA3OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLF8sVCxXKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgODpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGEsZCxoLGYsXyxULFcsaWUsZ2Upe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRmlyc3Qg''@;'; put 'put ''YXJndW1lbnQgdG8gX2FyaXR5IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlciBubyBncmVhdGVyIHRoYW4gdGVuIil9fWZ1bmN0aW9uIHhLKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9YyxfPTA7XzxsLmxlbmd0aHx8aDxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''Oyl7dmFyIFQ7XzxsLmxlbmd0aCYmKCF2cChsW19dKXx8aD49YXJndW1lbnRzLmxlbmd0aCk/VD1sW19dOihUPWFyZ3VtZW50c1toXSxoKz0xKSxkW19dPVQsdnAoVCl8fChmLT0xKSxfKz0xfXJldHVybiBmPD0wP2EuYXBwbHkodGhpcyxkKTpNSyhmLHhLKGMsZCxhKSl9fWNvbnN0IEVLPWQ4''@;'; put 'put ''KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP2tmKGEpOk1LKGwseEsobCxbXSxhKSl9KSxYZ2U9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuIGw8PDA9PT1sfSxRZ2U9ZDgoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBRcShhKT9hLmNo''@;'; put 'put ''YXJBdChkKTphW2RdfSksdG1lPWQ4KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgXyxoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPVhnZShfPWRbZl0pP1FnZShfLGgpOmhbX10sZis9MX1yZXR1cm4gaH0pfSkscm1lPWQ4KGZ1''@;'; put 'put ''bmN0aW9uKGwsYSl7cmV0dXJuIHRtZShbbF0sYSlbMF19KSxvbWU9RUsoMiwoYyxsKT0+dm9pZCAwIT09cm1lKGMsbCkpLGtLPW9tZSh7IkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciI6ITB9LHdpbmRvdyk7Y2xhc3MgSDV7c3RhdGljIGxvZyguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLmxv''@;'; put 'put ''ZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXtGUCgpJiZQUCgpJiZjb25zb2xlLndhcm4oLi4ubCl9c3RhdGljIGVycm9yKC4uLmwpe0ZQKCkmJlBQKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIFBQKCl7cmV0dXJuIWtLKFsiamFzbWluZSJdKX1mdW5jdGlvbiBGUCgpe3JldHVy''@;'; put 'put ''biF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gQUsoKXtwSygpJiYod2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOnFnZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRl''@;'; put 'put ''Ontmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVtZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpUSyxsb2dEZXRhaWxzOmFtZX0s''@;'; put 'put ''ZnVuY3Rpb24oKXtjb25zdCBjPSI2LjQuNiI7d2luZG93LkNEUy5fdmVyc2lvbi5pbmRleE9mKGMpPDAmJih3aW5kb3cuQ0RTLl92ZXJzaW9uLnB1c2goYyksZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpPy5zZXRBdHRyaWJ1dGUoImNkcy12ZXJzaW9uIix3aW5kb3cuQ0RTLl92ZXJz''@;'; put 'put ''aW9uLmpvaW4oIiAiKSkpLHdpbmRvdy5DRFMuX3ZlcnNpb24ubGVuZ3RoPjEmJkg1Lndhcm4oIlJ1bm5pbmcgbW9yZSB0aGFuIG9uZSB2ZXJzaW9uIG9mIENsYXJpdHkgY2FuIGNhdXNlIHVuZXhwZWN0ZWQgaXNzdWVzLiBQbGVhc2UgZW5zdXJlIG9ubHkgb25lIHZlcnNpb24gaXMgbG9hZGVk''@;'; put 'put ''LiIpfSgpLHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkfHwod2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWQ9ITAsd2luZG93LkNEUy5fc3RhdGU9bmV3IFByb3h5KHdpbmRvdy5DRFMuX3N0YXRlLHtzZXQ6KGMsbCxhKT0+e2NvbnN0IGQ9e2tleTpsLHByZXY6d2luZG93LkNEUy5fc3RhdGVb''@;'; put 'put ''bF0sY3VycmVudDphfTtyZXR1cm4gY1tsXT1hLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJDRFNfU1RBVEVfVVBEQVRFIix7ZGV0YWlsOmR9KSksITB9fSkpKX1mdW5jdGlvbiBUSygpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25t''@;'; put 'put ''ZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdlbnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246bUsoITEpLGFuZ3VsYXJKU1ZlcnNpb246emdlKCExKSxyZWFjdFZlcnNpb246dksoITEpLHZ1ZVZlcnNpb246''@;'; put 'put ''X0soITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVn''@;'; put 'put ''aXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMubWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGFtZSgpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShUSygpLG51bGwsMikpfWNvbnN0IEhQPW5ldyBjbGFzcyBnZ2V7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IHBnZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz''@;'; put 'put ''ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07SFAubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+SFAuZW1pdChjLmRldGFpbCkpO2NsYXNzIEdse3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gQUsoKSx3aW5kb3cuQ0RTLl9zdGF0ZX1zdGF0''@;'; put 'put ''aWMgZ2V0VmFsdWUobCl7cmV0dXJuIEdsLnN0YXRlW2xdfXN0YXRpYyBzZXRWYWx1ZShsLGEpe0dsLnN0YXRlW2xdPWF9c3RhdGljIGxvZygpe0g1LmxvZyhKU09OLnN0cmluZ2lmeShHbC5zdGF0ZSxudWxsLDIpKX19R2wuc3RhdGVVcGRhdGVzPUhQLnRvRXZlbnRPYnNlcnZhYmxlKCk7Y29u''@;'; put 'put ''c3QgbG1lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBWc3tzdGF0aWMgZ2V0IHJlZ2lzdHJ5KCl7cmV0dXJue3Vua25vd246bG1lWzFdLC4uLkdsLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe0dsLnN0YXRlLmljb25S''@;'; put 'put ''ZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IVZzLnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PlZzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChb''@;'; put 'put ''ZCxoXSk9PmgubWFwKGY9PltmLFZzLnJlZ2lzdHJ5W2RdXSkpO0dsLnN0YXRlLmljb25SZWdpc3RyeT17Li4uR2wuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX1jb25zdCBoOD1b''@;'; put 'put ''ImFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+J31dLG8xPVsiZXhjbGFtYXRpb24tY2lyY2xlIix7b3V0bGlu''@;'; put 'put ''ZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkEx''@;'; put 'put ''LjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPjxjaXJjbGUgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40''@;'; put 'put ''OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nfV0sczE9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEw''@;'; put 'put ''LDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPjxwYXRoIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwx''@;'; put 'put ''OCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPid9XSxESz1bImVsbGlwc2lzLWhvcml6b250YWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIzMS4xIiBjeT0i''@;'; put 'put ''MTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+''@;'; put 'put ''PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XSxuYj1bIndpbmRvdy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgs''@;'; put 'put ''OS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxjbWU9WyJldmVudCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42''@;'; put 'put ''NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+PHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDMyLjI1LDZaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz48cmVjdCB4PSIx''@;'; put 'put ''MyIgeT0iNiIgd2lkdGg9IjEwIiBoZWlnaHQ9IjIiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSww''@;'; put 'put ''LDAsMCwuMjMtLjQxSDIzLjhMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCww''@;'; put 'put ''LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4x''@;'; put 'put ''NywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYz''@;'; put 'put ''MC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJN''@;'; put 'put ''MTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQs''@;'; put 'put ''MFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42''@;'; put 'put ''Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAs''@;'; put 'put ''MTBaIi8+PHBhdGggZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIs''@;'; put 'put ''MCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCww''@;'; put 'put ''LDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs''@;'; put 'put ''MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPid9XSx1bWU9WyJjYWxlbmRh''@;'; put 'put ''ciIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2''@;'; put 'put ''WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9IjEzIiB5PSI2IiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1''@;'; put 'put ''LjM4WiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cG9s''@;'; put 'put ''eWdvbiBwb2ludHM9IjIxLjI5IDYgMTMgNiAxMyA4IDIwLjE0IDggMjEuMjkgNiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx''@;'; put 'put ''Ljc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cmVjdCB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE5IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMjQiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAs''@;'; put 'put ''MCwxLDIyLjUsNloiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJa''@;'; put 'put ''bTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCww''@;'; put 'put ''LDAsMjYsMTBaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwz''@;'; put 'put ''Ljc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01''@;'; put 'put ''SDI2VjE5aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0''@;'; put 'put ''aCBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1''@;'; put 'put ''LDAsMCwxLDMwLDEzLjVaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVI''@;'; put 'put ''MjZWMTRoMloiLz4nfV0sZG1lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0''@;'; put 'put ''LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiLz48cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0u''@;'; put 'put ''NDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiLz48cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwx''@;'; put 'put ''OGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAs''@;'; put 'put ''MSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiLz4nLHNvbGlkOic8cGF0aCBkPSJN''@;'; put 'put ''MTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCww''@;'; put 'put ''LDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhs''@;'; put 'put ''NC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm04LjMsOC4zYTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42''@;'; put 'put ''LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPid9XSxobWU9WyJleWUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEw''@;'; put 'put ''UzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIs''@;'; put 'put ''MzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiLz48cGF0aCBkPSJNMTguMDksMTEuMTdBNi44Niw2Ljg2LDAsMSwwLDI1LDE4LDYuODYsNi44NiwwLDAsMCwxOC4wOSwxMS4xN1ptMCwxMS43MkE0Ljg2LDQuODYsMCwxLDEsMjMsMTgsNC44Nyw0Ljg3LDAsMCwx''@;'; put 'put ''LDE4LjA5LDIyLjg5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0x''@;'; put 'put ''Ny44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiLz4nfV0s''@;'; put 'put ''Zm1lPVsiZWxsaXBzaXMtdmVydGljYWwiLHtvdXRsaW5lOic8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiLz4nLG91dGxpbmVCYWRnZWQ6JzxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPid9XSxwbWU9WyJ2aWV3LWNvbHVtbnMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzEsNUg1QTIsMiwwLDAsMCwzLDdWMjlhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMWEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMxLDVaTTEzLDI5SDVWN2g4Wm0xMCwwSDE1VjdoOFoiLz4nfV0sZ21lPVsiYXJyb3ciLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjgu''@;'; put 'put ''OTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIi8+J31dLElLPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDku''@;'; put 'put ''NzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxtbWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2''@;'; put 'put ''LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx''@;'; put 'put ''LjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sTEs9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTI5LDMwLjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDE5LjgzLDcuNzEsMzAuMTJhMSwxLDAsMCwxLTEuNDEtMS40MUwxOCwxNywyOS43MSwyOC43MUExLDEsMCwwLDEsMjksMzAuNDFaIi8+J31dLHZtZT1bImZpbHRlci1ncmlkLWNpcmNsZSIse291dGxpbmU6JzxwYXRo''@;'; put 'put ''IGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFh''@;'; put 'put ''MS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40''@;'; put 'put ''MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+J31dLF9tZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+Jyxzb2xpZDon''@;'; put 'put ''PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAs''@;'; put 'put ''MCwuMTUtLjM1VjExWiIvPid9XSxSSz1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+''@;'; put 'put ''PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIs''@;'; put 'put ''MiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0WiIvPid9XSxibWU9WyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+PGNpcmNsZSBjeD0iMTcuOTUiIGN5PSIyNC4yNyIgcj0iMS41Ii8+PHBhdGggZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCww''@;'; put 'put ''LDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAs''@;'; put 'put ''MSwyOC41NSwyNy40OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYu''@;'; put 'put ''ODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+J31dLHltZT1bImNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwz''@;'; put 'put ''NFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiLz4nfV0sd21lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCwxMWE3LDcsMCwx''@;'; put 'put ''LDEtNyw3LDcsNywwLDAsMSw3LTciLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nfV0sT0s9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9''@;'; put 'put ''IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0''@;'; put 'put ''LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44''@;'; put 'put ''LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxDbWU9WyJzdWNjZXNzLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwx''@;'; put 'put ''OCwzMloiLz48cGF0aCBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+J31dO2NsYXNzIE1tZSBleHRlbmRzIGVle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShs''@;'; put 'put ''LGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0ICR4PXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09JHg7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtk''@;'; put 'put ''ZWxlZ2F0ZTpsfT0keDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgTlAgZXh0ZW5kcyBNbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5n''@;'; put 'put ''PSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9''@;'; put 'put ''ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gJHguc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9''@;'; put 'put ''cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJiR4LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBh''@;'; put 'put ''IGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51''@;'; put 'put ''bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZigh''@;'; put 'put ''dGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxxKGQsdGhpcyksbnVsbCE9bCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZChhLGws''@;'; put 'put ''bnVsbCkpLHRoaXMuZGVsYXk9bnVsbCxzdXBlci51bnN1YnNjcmliZSgpfX19Y29uc3QgVlA9e25vdzooKT0+KFZQLmRlbGVnYXRlfHxEYXRlKS5ub3coKSxkZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIHJie2NvbnN0cnVjdG9yKGwsYT1yYi5ub3cpe3RoaXMuc2NoZWR1bGVyQWN0aW9uQ3Rvcj1s''@;'; put 'put ''LHRoaXMubm93PWF9c2NoZWR1bGUobCxhPTAsZCl7cmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcyxsKS5zY2hlZHVsZShkLGEpfX1yYi5ub3c9VlAubm93O2NsYXNzIEJQIGV4dGVuZHMgcmJ7Y29uc3RydWN0b3IobCxhPXJiLm5vdyl7c3VwZXIobCxhKSx0aGlzLmFj''@;'; put 'put ''dGlvbnM9W10sdGhpcy5fYWN0aXZlPSExfWZsdXNoKGwpe2NvbnN0e2FjdGlvbnM6YX09dGhpcztpZih0aGlzLl9hY3RpdmUpcmV0dXJuIHZvaWQgYS5wdXNoKGwpO2xldCBkO3RoaXMuX2FjdGl2ZT0hMDtkb3tpZihkPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKGw9''@;'; put 'put ''YS5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsZCl7Zm9yKDtsPWEuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGR9fX1jb25zdCBpYj1uZXcgQlAoTlApLHhtZT1pYjtmdW5jdGlvbiBmOChjLGw9aWIpe3JldHVybiBYZSgoYSxkKT0+e2xldCBoPW51bGwsZj1udWxsLF89bnVs''@;'; put 'put ''bDtjb25zdCBUPSgpPT57aWYoaCl7aC51bnN1YnNjcmliZSgpLGg9bnVsbDtjb25zdCBpZT1mO2Y9bnVsbCxkLm5leHQoaWUpfX07ZnVuY3Rpb24gVygpe2NvbnN0IGllPV8rYyxnZT1sLm5vdygpO2lmKGdlPGllKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLGllLWdlKSx2b2lkIGQu''@;'; put 'put ''YWRkKGgpO1QoKX1hLnN1YnNjcmliZShVZShkLGllPT57Zj1pZSxfPWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShXLGMpLGQuYWRkKGgpKX0sKCk9PntUKCksZC5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWZ1bmN0aW9uIGFoKGMpe3JldHVybiBYZSgobCxhKT0+e0ty''@;'; put 'put ''KGMpLnN1YnNjcmliZShVZShhLCgpPT5hLmNvbXBsZXRlKCksRykpLCFhLmNsb3NlZCYmbC5zdWJzY3JpYmUoYSl9KX1mdW5jdGlvbiBqUChjPTAsbCxhPXhtZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihMYyhsKT9hPWw6ZD1sKSxuZXcgS2UoaD0+e2xldCBmPWZ1bmN0aW9uIGttZShj''@;'; put 'put ''KXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJiFpc05hTihjKX0oYyk/K2MtYS5ub3coKTpjO2Y8MCYmKGY9MCk7bGV0IF89MDtyZXR1cm4gYS5zY2hlZHVsZShmdW5jdGlvbigpe2guY2xvc2VkfHwoaC5uZXh0KF8rKyksMDw9ZD90aGlzLnNjaGVkdWxlKHZvaWQgMCxkKTpoLmNvbXBsZXRl''@;'; put 'put ''KCkpfSxmKX0pfWNvbnN0IFRtZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxEbWU9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLEltZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24gbjIoYyxsLGEsZCl7aWYoWShhKSYmKGQ9YSxhPXZvaWQgMCksZCly''@;'; put 'put ''ZXR1cm4gbjIoYyxsLGEpLnBpcGUoSE8oZCkpO2NvbnN0W2gsZl09ZnVuY3Rpb24gT21lKGMpe3JldHVybiBZKGMuYWRkRXZlbnRMaXN0ZW5lcikmJlkoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/RG1lLm1hcChfPT5UPT5jW19dKGwsVCxhKSk6ZnVuY3Rpb24gTG1lKGMpe3JldHVybiBZ''@;'; put 'put ''KGMuYWRkTGlzdGVuZXIpJiZZKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9UbWUubWFwKEZLKGMsbCkpOmZ1bmN0aW9uIFJtZShjKXtyZXR1cm4gWShjLm9uKSYmWShjLm9mZil9KGMpP0ltZS5tYXAoRksoYyxsKSk6W107aWYoIWgmJlJuKGMpKXJldHVybiB5cihfPT5uMihfLGwsYSkpKEtyKGMp''@;'; put 'put ''KTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgS2UoXz0+e2NvbnN0IFQ9KC4uLlcpPT5fLm5leHQoMTxXLmxlbmd0aD9XOldbMF0pO3JldHVybiBoKFQpLCgpPT5mKFQpfSl9ZnVuY3Rpb24gRksoYyxsKXtyZXR1cm4gYT0+ZD0+''@;'; put 'put ''Y1thXShsLGQpfWNsYXNzIHF4IGV4dGVuZHMgYmV7Y29uc3RydWN0b3IobD0xLzAsYT0xLzAsZD1WUCl7c3VwZXIoKSx0aGlzLl9idWZmZXJTaXplPWwsdGhpcy5fd2luZG93VGltZT1hLHRoaXMuX3RpbWVzdGFtcFByb3ZpZGVyPWQsdGhpcy5fYnVmZmVyPVtdLHRoaXMuX2luZmluaXRlVGlt''@;'; put 'put ''ZVdpbmRvdz0hMCx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9YT09PTEvMCx0aGlzLl9idWZmZXJTaXplPU1hdGgubWF4KDEsbCksdGhpcy5fd2luZG93VGltZT1NYXRoLm1heCgxLGEpfW5leHQobCl7Y29uc3R7aXNTdG9wcGVkOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aCxf''@;'; put 'put ''dGltZXN0YW1wUHJvdmlkZXI6Zixfd2luZG93VGltZTpffT10aGlzO2F8fChkLnB1c2gobCksIWgmJmQucHVzaChmLm5vdygpK18pKSx0aGlzLl90cmltQnVmZmVyKCksc3VwZXIubmV4dChsKX1fc3Vic2NyaWJlKGwpe3RoaXMuX3Rocm93SWZDbG9zZWQoKSx0aGlzLl90cmltQnVmZmVyKCk7''@;'; put 'put ''Y29uc3QgYT10aGlzLl9pbm5lclN1YnNjcmliZShsKSx7X2luZmluaXRlVGltZVdpbmRvdzpkLF9idWZmZXI6aH09dGhpcyxmPWguc2xpY2UoKTtmb3IobGV0IF89MDtfPGYubGVuZ3RoJiYhbC5jbG9zZWQ7Xys9ZD8xOjIpbC5uZXh0KGZbX10pO3JldHVybiB0aGlzLl9jaGVja0ZpbmFsaXpl''@;'; put 'put ''ZFN0YXR1c2VzKGwpLGF9X3RyaW1CdWZmZXIoKXtjb25zdHtfYnVmZmVyU2l6ZTpsLF90aW1lc3RhbXBQcm92aWRlcjphLF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93Omh9PXRoaXMsZj0oaD8xOjIpKmw7aWYobDwxLzAmJmY8ZC5sZW5ndGgmJmQuc3BsaWNlKDAsZC5sZW5ndGgtZiks''@;'; put 'put ''IWgpe2NvbnN0IF89YS5ub3coKTtsZXQgVD0wO2ZvcihsZXQgVz0xO1c8ZC5sZW5ndGgmJmRbV108PV87Vys9MilUPVc7VCYmZC5zcGxpY2UoMCxUKzEpfX19Y2xhc3MgSEt7fWNsYXNzIFBtZXt9Y29uc3QgQWY9IioiO2Z1bmN0aW9uIGExKGMsbCl7cmV0dXJue3R5cGU6NyxuYW1lOmMsZGVm''@;'; put 'put ''aW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBydShjLGw9bnVsbCl7cmV0dXJue3R5cGU6NCxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIE5LKGMsbD1udWxsKXtyZXR1cm57dHlwZToyLHN0ZXBzOmMsb3B0aW9uczpsfX1mdW5jdGlvbiBfcyhjKXtyZXR1cm57dHlwZTo2LHN0''@;'; put 'put ''eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlvbiBLeChjLGwsYSl7cmV0dXJue3R5cGU6MCxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiBGbWUoYyl7cmV0dXJue3R5cGU6NSxzdGVwczpjfX1mdW5jdGlvbiBoYyhjLGwsYT1udWxsKXtyZXR1cm57dHlwZToxLGV4cHI6Yyxh''@;'; put 'put ''bmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIG9ie2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnM9''@;'; put 'put ''W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRo''@;'; put 'put ''aXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlz''@;'; put 'put ''Ll9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3JvdGFz''@;'; put 'put ''aygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9Zmlu''@;'; put 'put ''aXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVz''@;'; put 'put ''dHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3NpdGlv''@;'; put 'put ''bj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5f''@;'; put 'put ''b25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIFZLe2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29u''@;'; put 'put ''RGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxkPTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXll''@;'; put 'put ''cnMuZm9yRWFjaChfPT57Xy5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSxfLm9uRGVzdHJveSgoKT0+eysrZD09ZiYmdGhpcy5fb25EZXN0cm95KCl9KSxfLm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5w''@;'; put 'put ''bGF5ZXJzLnJlZHVjZSgoXyxUKT0+TWF0aC5tYXgoXyxULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVy''@;'; put 'put ''cy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRv''@;'; put 'put ''bmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBs''@;'; put 'put ''YXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChs''@;'; put 'put ''PT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMu''@;'; put 'put ''Zm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlz''@;'; put 'put ''LnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRpbWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50''@;'; put 'put ''b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3koKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25z''@;'; put 'put ''dCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19bGV0IEJLPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdl''@;'; put 'put ''PWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShh''@;'; put 'put ''KXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjfSksY30pKCks''@;'; put 'put ''TjU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEJLe31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oKXtsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPXhhKGMpKSkoZHx8Yyl9fSgpLGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsZmVhdHVyZXM6W2VvXX0pLGN9KSgpO2NvbnN0''@;'; put 'put ''IGxoPW5ldyBNaSgiTmdWYWx1ZUFjY2Vzc29yIiksTm1lPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5TMCksbXVsdGk6ITB9O2xldCBTMD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIixhKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5w''@;'; put 'put ''dXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25DaGFuZ2UoZi50YXJnZXQu''@;'; put 'put ''Y2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW05tZV0pLGVvXX0pLGN9KSgpO2NvbnN0IFZtZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+V2EpLG11bHRpOiEwfSxqbWU9bmV3IE1pKCJDb21wb3NpdGlvbkV2''@;'; put 'put ''ZW50TW9kZSIpO2xldCBXYT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkt7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCksdGhpcy5fY29tcG9zaXRpb25Nb2RlPWgsdGhpcy5fY29tcG9zaW5nPSExLG51bGw9PXRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmKHRoaXMuX2NvbXBvc2l0aW9uTW9k''@;'; put 'put ''ZT0hZnVuY3Rpb24gQm1lKCl7Y29uc3QgYz1hcCgpP2FwKCkuZ2V0VXNlckFnZW50KCk6IiI7cmV0dXJuL2FuZHJvaWQgKFxkKykvLnRlc3QoYy50b0xvd2VyQ2FzZSgpKX0oKSl9d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfV9oYW5kbGVJbnB1dChhKXso''@;'; put 'put ''IXRoaXMuX2NvbXBvc2l0aW9uTW9kZXx8dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYhdGhpcy5fY29tcG9zaW5nKSYmdGhpcy5vbkNoYW5nZShhKX1fY29tcG9zaXRpb25TdGFydCgpe3RoaXMuX2NvbXBvc2luZz0hMH1fY29tcG9zaXRpb25FbmQoYSl7dGhpcy5fY29tcG9zaW5nPSExLHRoaXMu''@;'; put 'put ''X2NvbXBvc2l0aW9uTW9kZSYmdGhpcy5vbkNoYW5nZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRm8pLHR0KE5pKSx0dChqbWUsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsImZvcm1Db250cm9s''@;'; put 'put ''TmFtZSIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsIm5nTW9kZWwiLCIiLDMs''@;'; put 'put ''InR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJuZ01vZGVsIiwiIl0sWyIiLCJuZ0RlZmF1bHRDb250cm9sIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5faGFuZGxlSW5wdXQoZi50YXJnZXQudmFsdWUp''@;'; put 'put ''fSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ub3VjaGVkKCl9KSgiY29tcG9zaXRpb25zdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5fY29tcG9zaXRpb25TdGFydCgpfSkoImNvbXBvc2l0aW9uZW5kIixmdW5jdGlvbihmKXtyZXR1cm4gZC5fY29tcG9zaXRpb25FbmQoZi50YXJn''@;'; put 'put ''ZXQudmFsdWUpfSl9LGZlYXR1cmVzOlt0aShbVm1lXSksZW9dfSksY30pKCk7Y29uc3QgaXU9bmV3IE1pKCJOZ1ZhbGlkYXRvcnMiKSx5cD1uZXcgTWkoIk5nQXN5bmNWYWxpZGF0b3JzIik7ZnVuY3Rpb24gS0soYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gWEsoYyl7cmV0dXJuIHY1KGMp''@;'; put 'put ''P2VhKGMpOmN9ZnVuY3Rpb24gSksoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBRSyhjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBlWChj''@;'; put 'put ''KXtyZXR1cm4gYy5tYXAobD0+ZnVuY3Rpb24gVW1lKGMpe3JldHVybiFjLnZhbGlkYXRlfShsKT9sOmE9PmwudmFsaWRhdGUoYSkpfWZ1bmN0aW9uIFVQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIHRYKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVy''@;'; put 'put ''biAwPT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBKSyhRSyhhLGwpKX19KGVYKGMpKTpudWxsfWZ1bmN0aW9uIFpQKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIG5YKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoS0spO3JldHVybiAwPT1sLmxlbmd0''@;'; put 'put ''aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBIbWUoLi4uYyl7Y29uc3QgbD1SYyhjKSx7YXJnczphLGtleXM6ZH09UkcoYyksaD1uZXcgS2UoZj0+e2NvbnN0e2xlbmd0aDpffT1hO2lmKCFfKXJldHVybiB2b2lkIGYuY29tcGxldGUoKTtjb25zdCBUPW5ldyBBcnJheShfKTts''@;'; put 'put ''ZXQgVz1fLGllPV87Zm9yKGxldCBnZT0wO2dlPF87Z2UrKyl7bGV0IHdlPSExO0tyKGFbZ2VdKS5zdWJzY3JpYmUoVWUoZixFZT0+e3dlfHwod2U9ITAsaWUtLSksVFtnZV09RWV9LCgpPT5XLS0sdm9pZCAwLCgpPT57KCFXfHwhd2UpJiYoaWV8fGYubmV4dChkP09HKGQsVCk6VCksZi5jb21w''@;'; put 'put ''bGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoSE8obCkpOmh9KFFLKGEsbCkubWFwKFhLKSkucGlwZShNZShKSykpfX0oZVgoYykpOm51bGx9ZnVuY3Rpb24gclgoYyxsKXtyZXR1cm4gbnVsbD09PWM/W2xdOkFycmF5LmlzQXJyYXkoYyk/Wy4uLmMsbF06W2MsbF19ZnVuY3Rpb24gWVAo''@;'; put 'put ''Yyl7cmV0dXJuIGM/QXJyYXkuaXNBcnJheShjKT9jOltjXTpbXX1mdW5jdGlvbiBKeChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2MuaW5jbHVkZXMobCk6Yz09PWx9ZnVuY3Rpb24gc1goYyxsKXtjb25zdCBhPVlQKGwpO3JldHVybiBZUChjKS5mb3JFYWNoKGg9PntKeChhLGgpfHxh''@;'; put 'put ''LnB1c2goaCl9KSxhfWZ1bmN0aW9uIGFYKGMsbCl7cmV0dXJuIFlQKGwpLmZpbHRlcihhPT4hSngoYyxhKSl9Y2xhc3MgbFh7Y29uc3RydWN0b3IoKXt0aGlzLl9yYXdWYWxpZGF0b3JzPVtdLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1bXSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119''@;'; put 'put ''Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWU6bnVsbH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWxpZDpudWxsfWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuaW52YWxp''@;'; put 'put ''ZDpudWxsfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucGVuZGluZzpudWxsfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpc2FibGVkOm51bGx9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro''@;'; put 'put ''aXMuY29udHJvbC5lbmFibGVkOm51bGx9Z2V0IGVycm9ycygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVycm9yczpudWxsfWdldCBwcmlzdGluZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnByaXN0aW5lOm51bGx9Z2V0IGRpcnR5KCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlydHk6bnVsbH1nZXQgdG91Y2hlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzOm51bGx9Z2V0IHVudG91Y2hl''@;'; put 'put ''ZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnVudG91Y2hlZDpudWxsfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuc3RhdHVzQ2hhbmdlczpudWxsfWdldCB2YWx1ZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro''@;'; put 'put ''aXMuY29udHJvbC52YWx1ZUNoYW5nZXM6bnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfV9zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1VUCh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fc2V0QXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''KGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49WlAodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm58fG51bGx9Z2V0IGFzeW5jVmFsaWRh''@;'; put 'put ''dG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbnx8bnVsbH1fcmVnaXN0ZXJPbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzLnB1c2gobCl9X2ludm9rZU9uRGVzdHJveUNhbGxiYWNrcygpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5mb3JFYWNo''@;'; put 'put ''KGw9PmwoKSksdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfXJlc2V0KGw9dm9pZCAwKXt0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5yZXNldChsKX1oYXNFcnJvcihsLGEpe3JldHVybiEhdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuaGFzRXJyb3IobCxhKX1nZXRFcnJvcihsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmdldEVycm9yKGwsYSk6bnVsbH19Y2xhc3MganUgZXh0ZW5kcyBsWHtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIHp1IGV4dGVuZHMgbFh7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBjWHtjb25zdHJ1Y3RvcihsKXt0aGlzLl9jZD1sfWdldCBpc1RvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy50b3VjaGVkfWdl''@;'; put 'put ''dCBpc1VudG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnVudG91Y2hlZH1nZXQgaXNQcmlzdGluZSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnByaXN0aW5lfWdldCBpc0RpcnR5KCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uZGlydHl9Z2V0IGlzVmFsaWQo''@;'; put 'put ''KXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy52YWxpZH1nZXQgaXNJbnZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8uaW52YWxpZH1nZXQgaXNQZW5kaW5nKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucGVuZGluZ31nZXQgaXNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuX2NkPy5zdWJtaXR0ZWR9fWxldCBCcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgY1h7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHp1LDIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNoZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlz''@;'; put 'put ''VG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRpbmcpfSxmZWF0dXJlczpbZW9dfSksY30pKCksd3A9KCgpPT57''@;'; put 'put ''Y2xhc3MgYyBleHRlbmRzIGNYe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChqdSwxMCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIi''@;'; put 'put ''LCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJuZy11bnRvdWNo''@;'; put 'put ''ZWQiLGQuaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixkLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixkLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsZC5pc0RpcnR5KSgibmctdmFsaWQiLGQuaXNWYWxpZCkoIm5nLWludmFsaWQiLGQuaXNJbnZhbGlkKSgibmctcGVuZGluZyIsZC5pc1BlbmRp''@;'; put 'put ''bmcpKCJuZy1zdWJtaXR0ZWQiLGQuaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y29uc3Qgc2I9IlZBTElEIixlRT0iSU5WQUxJRCIscDg9IlBFTkRJTkciLGFiPSJESVNBQkxFRCI7ZnVuY3Rpb24gJFAoYyl7cmV0dXJuKHRFKGMpP2MudmFsaWRhdG9yczpjKXx8bnVsbH1m''@;'; put 'put ''dW5jdGlvbiBxUChjLGwpe3JldHVybih0RShsKT9sLmFzeW5jVmFsaWRhdG9yczpjKXx8bnVsbH1mdW5jdGlvbiB0RShjKXtyZXR1cm4gbnVsbCE9YyYmIUFycmF5LmlzQXJyYXkoYykmJiJvYmplY3QiPT10eXBlb2YgY31jbGFzcyBmWHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3BlbmRpbmdE''@;'; put 'put ''aXJ0eT0hMSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPSgpPT57fSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLnByaXN0aW5lPSEwLHRoaXMudG91Y2hlZD0hMSx0aGlzLl9vbkRpc2Fi''@;'; put 'put ''bGVkQ2hhbmdlPVtdLHRoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCksdGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGEpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbn1zZXQgdmFsaWRhdG9yKGwpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9dGhpcy5fY29t''@;'; put 'put ''cG9zZWRWYWxpZGF0b3JGbj1sfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm59c2V0IGFzeW5jVmFsaWRhdG9yKGwpe3RoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49bH1nZXQgcGFy''@;'; put 'put ''ZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgdmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1zYn1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWVFfWdldCBwZW5kaW5nKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT1wOH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dGF0dXM9PT1hYn1nZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cyE9PWFifWdldCBkaXJ0eSgpe3JldHVybiF0aGlzLnByaXN0aW5lfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4hdGhpcy50b3VjaGVkfWdldCB1cGRhdGVPbigpe3JldHVybiB0aGlzLl91cGRhdGVPbj90aGlzLl91cGRh''@;'; put 'put ''dGVPbjp0aGlzLnBhcmVudD90aGlzLnBhcmVudC51cGRhdGVPbjoiY2hhbmdlIn1zZXRWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnblZhbGlkYXRvcnMobCl9c2V0QXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKX1hZGRWYWxpZGF0b3JzKGwpe3RoaXMu''@;'; put 'put ''c2V0VmFsaWRhdG9ycyhzWChsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoc1gobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1vdmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyhhWChsLHRo''@;'; put 'put ''aXMuX3Jhd1ZhbGlkYXRvcnMpKX1yZW1vdmVBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMoYVgobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0''@;'; put 'put ''b3IobCl7cmV0dXJuIEp4KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEw''@;'; put 'put ''LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRv''@;'; put 'put ''dWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQo''@;'; put 'put ''bCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0FzUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFj''@;'; put 'put ''aENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPXA4LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3Rh''@;'; put 'put ''dHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30pe2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9YWIsdGhpcy5l''@;'; put 'put ''cnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0''@;'; put 'put ''aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlz''@;'; put 'put ''LnN0YXR1cz1zYix0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJp''@;'; put 'put ''c3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0''@;'; put 'put ''aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlh''@;'; put 'put ''bFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9ydW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT1z''@;'; put 'put ''Ynx8dGhpcy5zdGF0dXM9PT1wOCkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVtaXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQm''@;'; put 'put ''JiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2ZvckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0''@;'; put 'put ''eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/YWI6c2J9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpu''@;'; put 'put ''dWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1wOCx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITA7Y29uc3QgYT1YSyh0aGlzLmFzeW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJz''@;'; put 'put ''Y3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRo''@;'; put 'put ''aXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlzLl91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQo''@;'; put 'put ''bCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdldEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJu''@;'; put 'put ''IGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1''@;'; put 'put ''cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9pbml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgRXIsdGhp''@;'; put 'put ''cy5zdGF0dXNDaGFuZ2VzPW5ldyBFcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9hYjp0aGlzLmVycm9ycz9lRTp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhwOCk/cDg6''@;'; put 'put ''dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKGVFKT9lRTpzYn1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0RpcnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9h''@;'; put 'put ''bnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk''@;'; put 'put ''YXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7''@;'; put 'put ''dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe3RFKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQu''@;'; put 'put ''ZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rp''@;'; put 'put ''b24gR21lKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1VQKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRB''@;'; put 'put ''c3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uICRtZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9aUChjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBuRSBleHRlbmRzIGZYe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigkUChhKSxxUChkLGEpKSx0aGlzLmNv''@;'; put 'put ''bnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVy''@;'; put 'put ''Q29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxh''@;'; put 'put ''LGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVDb250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9s''@;'; put 'put ''c1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30p''@;'; put 'put ''e3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpk''@;'; put 'put ''LmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gaFgoYyxsLGEpe2MuX2ZvckVhY2hD''@;'; put 'put ''aGlsZCgoZCxoKT0+e2lmKHZvaWQgMD09PWFbaF0pdGhyb3cgbmV3IEFyKDEwMDIsIiIpfSl9KSh0aGlzLDAsbCksT2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT57KGZ1bmN0aW9uIGRYKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0''@;'; put 'put ''aHJvdyBuZXcgQXIoMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgQXIoMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9''@;'; put 'put ''cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVlKGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlk''@;'; put 'put ''aXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobFtoXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFs''@;'; put 'put ''dWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3lu''@;'; put 'put ''Y1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChk''@;'; put 'put ''LGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVl''@;'; put 'put ''KCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+''@;'; put 'put ''KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBP''@;'; put 'put ''YmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5''@;'; put 'put ''KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgVjU9bmV3IE1pKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxifSksbGI9ImFsd2F5cyI7ZnVuY3Rpb24gY2IoYyxsLGE9bGIpe0tQKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRl''@;'; put 'put ''VmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gWG1lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMu''@;'; put 'put ''X3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmcFgoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIFFtZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQp''@;'; put 'put ''fTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBKbWUoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1''@;'; put 'put ''ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZwWChjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBLbWUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1''@;'; put 'put ''ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gb0UoYyxsKXtjLmZvckVhY2goYT0+e2EucmVn''@;'; put 'put ''aXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIGlYKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHJYKGEs''@;'; put 'put ''bC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5zZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBvWChjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhyWChkLGwu''@;'; put 'put ''YXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtvRShsLl9yYXdWYWxpZGF0b3JzLGgpLG9FKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBw''@;'; put 'put ''WChjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgpLGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBpNmU9e3By''@;'; put 'put ''b3ZpZGU6anUsdXNlRXhpc3Rpbmc6SXMoKCk9PnIyKX0sdWI9KCgpPT5Qcm9taXNlLnJlc29sdmUoKSkoKTtsZXQgcjI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGp1e2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0h''@;'; put 'put ''MSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgRXIsdGhpcy5mb3JtPW5ldyBuRSh7fSxVUChhKSxaUChkKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250''@;'; put 'put ''cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29udHJvbChhKXt1Yi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0''@;'; put 'put ''ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGNiKGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXt1Yi50''@;'; put 'put ''aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgbkUoe30pOyhmdW5jdGlvbiBnWChjLGwpe0tQKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVt''@;'; put 'put ''b3ZlRm9ybUdyb3VwKGEpe3ViLnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7dWIudGhlbigo''@;'; put 'put ''KT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9ITAsZnVuY3Rpb24gbVgoYyxsKXtjLl9zeW5jUGVuZGluZ0NvbnRyb2xzKCksbC5mb3JFYWNo''@;'; put 'put ''KGE9Pntjb25zdCBkPWEuY29udHJvbDsic3VibWl0Ij09PWQudXBkYXRlT24mJmQuX3BlbmRpbmdDaGFuZ2UmJihhLnZpZXdUb01vZGVsVXBkYXRlKGQuX3BlbmRpbmdWYWx1ZSksZC5fcGVuZGluZ0NoYW5nZT0hMSl9KX0odGhpcy5mb3JtLHRoaXMuX2RpcmVjdGl2ZXMpLHRoaXMubmdTdWJt''@;'; put 'put ''aXQuZW1pdChhKSwiZGlhbG9nIj09PWE/LnRhcmdldD8ubWV0aG9kfW9uUmVzZXQoKXt0aGlzLnJlc2V0Rm9ybSgpfXJlc2V0Rm9ybShhPXZvaWQgMCl7dGhpcy5mb3JtLnJlc2V0KGEpLHRoaXMuc3VibWl0dGVkPSExfV9zZXRVcGRhdGVTdHJhdGVneSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9''@;'; put 'put ''dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5mb3JtLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9maW5kQ29udGFpbmVyKGEpe3JldHVybiBhLnBvcCgpLGEubGVuZ3RoP3RoaXMuZm9ybS5nZXQoYSk6dGhpcy5mb3JtfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKSh0dChpdSwxMCksdHQoeXAsMTApLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsImZvcm1Hcm91cCIsIiJdLFsibmctZm9ybSJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RCaW5k''@;'; put 'put ''aW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoInN1Ym1pdCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TdWJtaXQoZil9KSgicmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25SZXNldCgpfSl9LGlucHV0czp7b3B0aW9uczpbIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6''@;'; put 'put ''e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3RpKFtpNmVdKSxlb119KSxjfSkoKTtmdW5jdGlvbiB2WChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gX1goYyl7cmV0dXJuIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBjJiZudWxsIT09YyYmMj09PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmInZhbHVlImluIGMmJiJkaXNhYmxlZCJpbiBjfWNvbnN0IGVGPWNsYXNzIGV4dGVuZHMgZlh7Y29uc3RydWN0b3IobD1udWxsLGEsZCl7c3VwZXIoJFAoYSkscVAoZCxhKSksdGhpcy5kZWZhdWx0VmFsdWU9bnVs''@;'; put 'put ''bCx0aGlzLl9vbkNoYW5nZT1bXSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExLHRoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2''@;'; put 'put ''ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pLHRFKGEpJiYoYS5ub25OdWxsYWJsZXx8YS5pbml0aWFsVmFsdWVJc0RlZmF1bHQpJiYodGhpcy5kZWZhdWx0VmFsdWU9X1gobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhp''@;'; put 'put ''cy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9vbkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxh''@;'; put 'put ''PXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5k''@;'; put 'put ''aW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXt2''@;'; put 'put ''WCh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwpfV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt2WCh0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLGwpfV9mb3JFYWNoQ2hpbGQobCl7fV9zeW5jUGVu''@;'; put 'put ''ZGluZ0NvbnRyb2xzKCl7cmV0dXJuISgic3VibWl0IiE9PXRoaXMudXBkYXRlT258fCh0aGlzLl9wZW5kaW5nRGlydHkmJnRoaXMubWFya0FzRGlydHkoKSx0aGlzLl9wZW5kaW5nVG91Y2hlZCYmdGhpcy5tYXJrQXNUb3VjaGVkKCksIXRoaXMuX3BlbmRpbmdDaGFuZ2UpfHwodGhpcy5zZXRW''@;'; put 'put ''YWx1ZSh0aGlzLl9wZW5kaW5nVmFsdWUse29ubHlTZWxmOiEwLGVtaXRNb2RlbFRvVmlld0NoYW5nZTohMX0pLDApKX1fYXBwbHlGb3JtU3RhdGUobCl7X1gobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxm''@;'; put 'put ''OiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LGE2ZT17cHJvdmlkZTp6dSx1c2VFeGlzdGluZzpJcygoKT0+T3MpfSx5WD0oKCk9PlByb21pc2UucmVzb2x2ZSgpKSgpO2xl''@;'; put 'put ''dCBPcz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgenV7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9Xyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBlRix0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFt''@;'; put 'put ''ZT0iIix0aGlzLnVwZGF0ZT1uZXcgRXIsdGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIFFQKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJh''@;'; put 'put ''eS5pc0FycmF5KGwpLGwuZm9yRWFjaChmPT57Zi5jb25zdHJ1Y3Rvcj09PVdhP2E9ZjpmdW5jdGlvbiBuNmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PU41fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtp''@;'; put 'put ''Zih0aGlzLl9jaGVja0ZvckVycm9ycygpLCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUu''@;'; put 'put ''cmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBhdGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIEpQKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgYT1jLm1vZGVsO3JldHVybiEhYS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3Rp''@;'; put 'put ''dmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGly''@;'; put 'put ''ZWN0aXZlLmFkZENvbnRyb2wodGhpcyksdGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFs''@;'; put 'put ''b25lKCl7cmV0dXJuIXRoaXMuX3BhcmVudHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtjYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRW''@;'; put 'put ''YWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25z''@;'; put 'put ''Lm5hbWUmJih0aGlzLm5hbWU9dGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXt5WC50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5t''@;'; put 'put ''YXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmVTYoZCk7eVgudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRp''@;'; put 'put ''c2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiByRShjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGp1LDkpLHR0KGl1LDEwKSx0dCh5cCwxMCksdHQobGgsMTApLHR0KFVhLDgpLHR0KFY1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNv''@;'; put 'put ''bnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6WyJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbIm5nTW9kZWwiLCJtb2RlbCJdLG9wdGlvbnM6WyJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7''@;'; put 'put ''dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0sZmVhdHVyZXM6W3RpKFthNmVdKSxlbyx2YV19KSxjfSkoKSxDcD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSksY30pKCk7Y29uc3QgbDZlPXtwcm92aWRlOmxoLHVzZUV4aXN0aW5nOklzKCgpPT5hRSksbXVsdGk6ITB9O2xldCBhRT0o''@;'; put 'put ''KCk9PntjbGFzcyBjIGV4dGVuZHMgTjV7d3JpdGVWYWx1ZShhKXt0aGlzLnNldFByb3BlcnR5KCJ2YWx1ZSIsYT8/IiIpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57YSgiIj09ZD9udWxsOnBhcnNlRmxvYXQoZCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIs''@;'; put 'put ''ImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImlucHV0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNoYW5nZShmLnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbdGkoW2w2ZV0pLGVvXX0pLGN9KSgpO2NvbnN0IGM2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+bEUpLG11bHRpOiEwfTtsZXQgd1g9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksdTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShh''@;'; put 'put ''KXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNjZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1l''@;'; put 'put ''R3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5fcGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOndYfSksY30pKCksbEU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVn''@;'; put 'put ''aXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9RmkoVjUse29wdGlvbmFsOiEwfSk/P2xifW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rv''@;'; put 'put ''ci5nZXQoenUpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0''@;'; put 'put ''eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgpPT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVk''@;'; put 'put ''fHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tO''@;'; put 'put ''YW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KHU2ZSksdHQoRWEpKX0sYy5cdTAyNzVkaXI9''@;'; put 'put ''Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2''@;'; put 'put ''YWx1ZSJ9LGZlYXR1cmVzOlt0aShbYzZlXSksZW9dfSksY30pKCk7Y29uc3QgbkY9bmV3IE1pKCJOZ01vZGVsV2l0aEZvcm1Db250cm9sV2FybmluZyIpLHY2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJcygoKT0+TTApLG11bHRpOiEwfTtmdW5jdGlvbiBFWChjLGwpe3JldHVybiBudWxs''@;'; put 'put ''PT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgTTA9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0''@;'; put 'put ''aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlzLnZhbHVlPWE7Y29uc3QgaD1FWCh0aGlzLl9nZXRPcHRpb25JZChhKSxhKTt0aGlzLnNldFByb3BlcnR5KCJ2''@;'; put 'put ''YWx1ZSIsaCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pnt0aGlzLnZhbHVlPXRoaXMuX2dldE9wdGlvblZhbHVlKGQpLGEodGhpcy52YWx1ZSl9fV9yZWdpc3Rlck9wdGlvbigpe3JldHVybih0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKX1fZ2V0T3B0aW9uSWQo''@;'; put 'put ''YSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLGEpKXJldHVybiBkO3JldHVybiBudWxsfV9nZXRPcHRpb25WYWx1ZShhKXtjb25zdCBkPWZ1bmN0aW9uIF82ZShjKXtyZXR1cm4gYy5zcGxp''@;'; put 'put ''dCgiOiIpWzBdfShhKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLmhhcyhkKT90aGlzLl9vcHRpb25NYXAuZ2V0KGQpOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVk''@;'; put 'put ''aXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRyb2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVh''@;'; put 'put ''dHVyZXM6W3RpKFt2NmVdKSxlb119KSxjfSkoKSxsMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24o''@;'; put 'put ''KSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKEVYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2''@;'; put 'put ''YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50''@;'; put 'put ''LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHR0KE5pKSx0dChGbyksdHQoTTAsOSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pLGN9KSgpO2NvbnN0IGI2ZT17cHJvdmlkZTpsaCx1c2VFeGlzdGluZzpJ''@;'; put 'put ''cygoKT0+ZGIpLG11bHRpOiEwfTtmdW5jdGlvbiBrWChjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgZGI9KCgp''@;'; put 'put ''PT57Y2xhc3MgYyBleHRlbmRzIE41e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9''@;'; put 'put ''d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1hLm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZixfKT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZihfLnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5f''@;'; put 'put ''c2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCBfPWY7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKysp''@;'; put 'put ''e2NvbnN0IGllPXRoaXMuX2dldE9wdGlvblZhbHVlKF9bVF0udmFsdWUpO2gucHVzaChpZSl9fWVsc2V7Y29uc3QgXz1kLm9wdGlvbnM7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2NvbnN0IFc9X1tUXTtpZihXLnNlbGVjdGVkKXtjb25zdCBpZT10aGlzLl9nZXRPcHRpb25WYWx1ZShX''@;'; put 'put ''LnZhbHVlKTtoLnB1c2goaWUpfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdpc3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRo''@;'; put 'put ''aXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24geTZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEp''@;'; put 'put ''O3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCkuX3ZhbHVlOmF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVkaXI9Q3Io''@;'; put 'put ''e3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJnh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2hhbmdlKGYudGFyZ2V0KX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3RpKFtiNmVdKSxl''@;'; put 'put ''b119KSxjfSkoKSxjMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVl''@;'; put 'put ''KGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhp''@;'; put 'put ''cy5fc2V0RWxlbWVudFZhbHVlKGtYKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQu''@;'; put 'put ''bmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRl''@;'; put 'put ''bGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChkYiw5KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIm9wdGlvbiJdXSxpbnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSksY30pKCksSFg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWlu''@;'; put 'put ''aj1taSh7aW1wb3J0czpbd1hdfSksY30pKCksJGw9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKSxENmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92''@;'; put 'put ''aWRlOm5GLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOlY1LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2xifV19fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltIWF19KSxjfSkoKTtmdW5jdGlvbiBJNmUoYyxsKXt0aGlzLnY9Yyx0aGlzLms9bH1mdW5jdGlvbiBkRShjKXt2YXIgbCxhO2Z1bmN0aW9uIGQoZixfKXt0cnl7dmFyIFQ9Y1tmXShfKSxXPVQudmFsdWUsaWU9VyBp''@;'; put 'put ''bnN0YW5jZW9mIEk2ZTtQcm9taXNlLnJlc29sdmUoaWU/Vy52OlcpLnRoZW4oZnVuY3Rpb24oZ2Upe2lmKGllKXt2YXIgd2U9InJldHVybiI9PT1mPyJyZXR1cm4iOiJuZXh0IjtpZighVy5rfHxnZS5kb25lKXJldHVybiBkKHdlLGdlKTtnZT1jW3dlXShnZSkudmFsdWV9aChULmRvbmU/InJl''@;'; put 'put ''dHVybiI6Im5vcm1hbCIsZ2UpfSxmdW5jdGlvbihnZSl7ZCgidGhyb3ciLGdlKX0pfWNhdGNoKGdlKXtoKCJ0aHJvdyIsZ2UpfX1mdW5jdGlvbiBoKGYsXyl7c3dpdGNoKGYpe2Nhc2UicmV0dXJuIjpsLnJlc29sdmUoe3ZhbHVlOl8sZG9uZTohMH0pO2JyZWFrO2Nhc2UidGhyb3ciOmwucmVq''@;'; put 'put ''ZWN0KF8pO2JyZWFrO2RlZmF1bHQ6bC5yZXNvbHZlKHt2YWx1ZTpfLGRvbmU6ITF9KX0obD1sLm5leHQpP2QobC5rZXksbC5hcmcpOmE9bnVsbH10aGlzLl9pbnZva2U9ZnVuY3Rpb24oZixfKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVCxXKXt2YXIgaWU9e2tleTpmLGFyZzpfLHJl''@;'; put 'put ''c29sdmU6VCxyZWplY3Q6VyxuZXh0Om51bGx9O2E/YT1hLm5leHQ9aWU6KGw9YT1pZSxkKGYsXykpfSl9LCJmdW5jdGlvbiIhPXR5cGVvZiBjLnJldHVybiYmKHRoaXMucmV0dXJuPXZvaWQgMCl9ZEUucHJvdG90eXBlWyJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5hc3luY0l0''@;'; put 'put ''ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZEUucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgibmV4dCIsYyl9LGRFLnByb3RvdHlwZS50aHJvdz1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5faW52b2tlKCJ0''@;'; put 'put ''aHJvdyIsYyl9LGRFLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX2ludm9rZSgicmV0dXJuIixjKX07Y2xhc3MgaEV7c3RhdGljIGdldFRyYXBFbGVtZW50cygpe3JldHVyblsuLi5HbC5zdGF0ZS5mb2N1c1RyYXBJdGVtc119c3RhdGljIHNldFRyYXBFbGVtZW50''@;'; put 'put ''cyhsKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImh0bWwiKTtudWxsIT09YSYmZnVuY3Rpb24gc0YoYywuLi5sKXtjJiZsLmZvckVhY2goKFthLGRdKT0+eyExPT09ZHx8bnVsbD09PWQ/Yy5yZW1vdmVBdHRyaWJ1dGUoYSk6Yy5zZXRBdHRyaWJ1dGUoYSxkKyIiKX0pfShhLFsi''@;'; put 'put ''Y2RzLWZvY3VzLXRyYXAiLCEhbC5sZW5ndGgmJiIiXSksR2wuc3RhdGUuZm9jdXNUcmFwSXRlbXM9Wy4uLmxdfXN0YXRpYyByZW1vdmVUcmFwRWxlbWVudChsKXt0aGlzLmdldFRyYXBFbGVtZW50cygpLmxlbmd0aDwxfHx0aGlzLnNldFRyYXBFbGVtZW50cyhbLi4udGhpcy5nZXRUcmFwRWxl''@;'; put 'put ''bWVudHMoKS5maWx0ZXIoYT0+YS5mb2N1c1RyYXBJZCE9PWwuZm9jdXNUcmFwSWQpXSl9c3RhdGljIHNldEN1cnJlbnQobCl7bD8uZm9jdXNUcmFwSWQmJnRoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpLmZpbHRlcihhPT5hLmZvY3VzVHJhcElkIT09bC5m''@;'; put 'put ''b2N1c1RyYXBJZCksbF0pfXN0YXRpYyBhY3RpdmF0ZVByZXZpb3VzQ3VycmVudCgpe3RoaXMuc2V0VHJhcEVsZW1lbnRzKFsuLi50aGlzLmdldFRyYXBFbGVtZW50cygpXS5zbGljZSgwLC0xKSl9c3RhdGljIGdldEN1cnJlbnQoKXtyZXR1cm4gZnVuY3Rpb24gTDZlKGMpe3JldHVybiBjLmxl''@;'; put 'put ''bmd0aD9jW2MubGVuZ3RoLTFdOnZvaWQgMH0odGhpcy5nZXRUcmFwRWxlbWVudHMoKSl8fG51bGx9fWNvbnN0IFU2ZT1FSygzLChjLGwsYSk9PnshZnVuY3Rpb24gc21lKGMsbCl7cmV0dXJuIGx8fChsPXdpbmRvdyYmd2luZG93LmN1c3RvbUVsZW1lbnRzKSwhbHx8ISFsLmdldChjKX0oYyl8''@;'; put 'put ''fGZ1bmN0aW9uIFVnZSgpe3JldHVybiB3aW5kb3c/LmxvY2F0aW9uPy5ocmVmPy5pbmNsdWRlcygibG9jYWxob3N0OjYwMDYiKX0oKT8oYS5kZWZpbmUoYyxsKSxBSygpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSkuc29tZShkPT5kPT09''@;'; put 'put ''YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6SDUud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBWWChjLGwpe3BLKCkmJmtLKFsiY3VzdG9t''@;'; put 'put ''RWxlbWVudHMiXSkmJlU2ZShjLGwsd2luZG93LmN1c3RvbUVsZW1lbnRzKX1sZXQgQlg9ITE7ZnVuY3Rpb24gWjZlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighQlgpe0JYPSEw''@;'; put 'put ''O2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVPZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WjZlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''fSl9bGV0IGpYPSExLHpYPSExO2Z1bmN0aW9uIFVYKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0s''@;'; put 'put ''c2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3RoaXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9alh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChVWChFbGVtZW50LnByb3RvdHlwZSwicm9sZSIsInJvbGUiKSxqWD0hMCks''@;'; put 'put ''elh8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KHpYPSEwLFsiQWN0aXZlRGVzY2VuZGFudCIsIkF0b21pYyIsIkF1dG9Db21wbGV0ZSIsIkJ1c3kiLCJDaGVja2VkIiwiQ29sQ291bnQiLCJDb2xJbmRleCIsIkNvbFNwYW4iLCJDb250cm9scyIsIkN1''@;'; put 'put ''cnJlbnQiLCJEZXNjcmliZWRCeSIsIkRldGFpbHMiLCJEaXNhYmxlZCIsIkVycm9yTWVzc2FnZSIsIkV4cGFuZGVkIiwiRmxvd1RvIiwiSGFzUG9wdXAiLCJIaWRkZW4iLCJJbnZhbGlkIiwiS2V5U2hvcnRjdXRzIiwiTGFiZWwiLCJMYWJlbGxlZEJ5IiwiTGV2ZWwiLCJMaXZlIiwiTW9kYWwi''@;'; put 'put ''LCJNdWx0aUxpbmUiLCJNdWx0aVNlbGVjdGFibGUiLCJPcmllbnRhdGlvbiIsIk93bnMiLCJQbGFjZWhvbGRlciIsIlBvc0luU2V0IiwiUHJlc3NlZCIsIlJlYWRPbmx5IiwiUmVsZXZhbnQiLCJSZXF1aXJlZCIsIlJvbGVEZXNjcmlwdGlvbiIsIlJvd0NvdW50IiwiUm93SW5kZXgiLCJSb3dT''@;'; put 'put ''cGFuIiwiU2VsZWN0ZWQiLCJTZXRTaXplIiwiU29ydCIsIlZhbHVlTWF4IiwiVmFsdWVNaW4iLCJWYWx1ZU5vdyIsIlZhbHVlVGV4dCJdLmZvckVhY2goYz0+VVgoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgZkU9d2luZG93LGFG''@;'; put 'put ''PWZFLlNoYWRvd1Jvb3QmJih2b2lkIDA9PT1mRS5TaGFkeUNTU3x8ZkUuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLGxGPVN5bWJvbCgpLFpYPW5ldyBX''@;'; put 'put ''ZWFrTWFwO2NsYXNzIFlYe2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLl8kY3NzUmVzdWx0JD0hMCxkIT09bEYpdGhyb3cgRXJyb3IoIkNTU1Jlc3VsdCBpcyBub3QgY29uc3RydWN0YWJsZS4gVXNlIGB1bnNhZmVDU1NgIG9yIGBjc3NgIGluc3RlYWQuIik7dGhpcy5jc3NUZXh0PWwsdGhp''@;'; put 'put ''cy50PWF9Z2V0IHN0eWxlU2hlZXQoKXtsZXQgbD10aGlzLm87Y29uc3QgYT10aGlzLnQ7aWYoYUYmJnZvaWQgMD09PWwpe2NvbnN0IGQ9dm9pZCAwIT09YSYmMT09PWEubGVuZ3RoO2QmJihsPVpYLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVw''@;'; put 'put ''bGFjZVN5bmModGhpcy5jc3NUZXh0KSxkJiZaWC5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBjRj0oYywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsoXz0+e2lmKCEwPT09Xy5fJGNz''@;'; put 'put ''c1Jlc3VsdCQpcmV0dXJuIF8uY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIF87dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3NzJyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK18rIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mg''@;'; put 'put ''bm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcgWVgoYSxjLGxGKX0sV1g9YUY/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25z''@;'; put 'put ''dCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVybihjPT5uZXcgWVgoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsbEYpKShhKX0pKGMpOmM7dmFyIHVGO2NvbnN0IHBFPXdpbmRvdyxHWD1wRS50cnVzdGVkVHlwZXMsRzZlPUdYP0dYLmVtcHR5U2NyaXB0OiIiLCRY''@;'; put 'put ''PXBFLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxkRj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9HNmU6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9t''@;'; put 'put ''QXR0cmlidXRlKGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1y''@;'; put 'put ''ZXR1cm4gYX19LHFYPShjLGwpPT5sIT09YyYmKGw9PWx8fGM9PWMpLGhGPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOmRGLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpxWH0sZkY9ImZpbmFsaXplZCI7Y2xhc3MgZzggZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1udWxsLHRoaXMudSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lk''@;'; put 'put ''IDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2NvbnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09''@;'; put 'put ''aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPWhGKXtpZihhLnN0YXRlJiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlz''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhpcy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1z''@;'; put 'put ''dGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBmPXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0''@;'; put 'put ''UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8aEZ9c3RhdGljIGZpbmFsaXplKCl7aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShmRikpcmV0dXJuITE7dGhpc1tmRl09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYo''@;'; put 'put ''bC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwuZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnBy''@;'; put 'put ''b3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhhKV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXpl''@;'; put 'put ''U3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChXWChoKSl9ZWxzZSB2b2lkIDAh''@;'; put 'put ''PT1sJiZhLnB1c2goV1gobCkpO3JldHVybiBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfXUoKXt2YXIgbDt0aGlzLl8k''@;'; put 'put ''RV89bmV3IFByb21pc2UoYT0+dGhpcy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRy''@;'; put 'put ''b2xsZXIobCl7dmFyIGEsZDsobnVsbCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2Fs''@;'; put 'put ''bChsKSl9cmVtb3ZlQ29udHJvbGxlcihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlz''@;'; put 'put ''Lmhhc093blByb3BlcnR5KGEpJiYodGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25z''@;'; put 'put ''dHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7cmV0dXJuKChjLGwpPT57YUY/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz''@;'; put 'put ''dHlsZSIpLGg9ZkUubGl0Tm9uY2U7dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs''@;'; put 'put ''O3ZvaWQgMD09PXRoaXMucmVuZGVyUm9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1h''@;'; put 'put ''Lmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShk''@;'; put 'put ''PWEuaG9zdERpc2Nvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1oRil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAh''@;'; put 'put ''PT1mJiYhMD09PWQucmVmbGVjdCl7Y29uc3QgXz0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOmRGKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09Xz90aGlzLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZShmKTp0aGlzLnNldEF0dHJpYnV0ZShmLF8pLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCBfPWguZ2V0UHJvcGVydHlPcHRp''@;'; put 'put ''b25zKGYpLFQ9ImZ1bmN0aW9uIj09dHlwZW9mIF8uY29udmVydGVyP3tmcm9tQXR0cmlidXRlOl8uY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPV8uY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT9fLmNvbnZlcnRlcjpkRjt0aGlzLl8kRWw9Zix0''@;'; put 'put ''aGlzW2ZdPVQuZnJvbUF0dHJpYnV0ZShhLF8udHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fHFYKSh0aGlzW2xdLGEp''@;'; put 'put ''Pyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYo''@;'; put 'put ''dGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bC5pc1VwZGF0ZVBlbmRpbmc9ITA7dHJ5e3lpZWxkIGwuXyRFX31jYXRjaChkKXtQcm9taXNlLnJlamVjdChkKX1jb25zdCBhPWwuc2NoZWR1bGVVcGRhdGUoKTtyZXR1cm4gbnVs''@;'; put 'put ''bCE9YSYmKHlpZWxkIGEpLCFsLmlzVXBkYXRlUGVuZGluZ30pKCl9c2NoZWR1bGVVcGRhdGUoKXtyZXR1cm4gdGhpcy5wZXJmb3JtVXBkYXRlKCl9cGVyZm9ybVVwZGF0ZSgpe3ZhciBsO2lmKCF0aGlzLmlzVXBkYXRlUGVuZGluZylyZXR1cm47dGhpcy5fJEVpJiYodGhpcy5fJEVpLmZvckVh''@;'; put 'put ''Y2goKGgsZik9PnRoaXNbZl09aCksdGhpcy5fJEVpPXZvaWQgMCk7bGV0IGE9ITE7Y29uc3QgZD10aGlzLl8kQUw7dHJ5e2E9dGhpcy5zaG91bGRVcGRhdGUoZCksYT8odGhpcy53aWxsVXBkYXRlKGQpLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goaD0+e3Zh''@;'; put 'put ''ciBmO3JldHVybiBudWxsPT09KGY9aC5ob3N0VXBkYXRlKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5jYWxsKGgpfSksdGhpcy51cGRhdGUoZCkpOnRoaXMuXyRFaygpfWNhdGNoKGgpe3Rocm93IGE9ITEsdGhpcy5fJEVrKCksaH1hJiZ0aGlzLl8kQUUoZCl9d2lsbFVwZGF0ZShsKXt9XyRBRShs''@;'; put 'put ''KXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5mb3JFYWNoKGQ9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPWQuaG9zdFVwZGF0ZWQpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmNhbGwoZCl9KSx0aGlzLmhhc1VwZGF0ZWR8fCh0aGlzLmhhc1VwZGF0ZWQ9ITAsdGhp''@;'; put 'put ''cy5maXJzdFVwZGF0ZWQobCkpLHRoaXMudXBkYXRlZChsKX1fJEVrKCl7dGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITF9Z2V0IHVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuZ2V0VXBkYXRlQ29tcGxldGUoKX1nZXRVcGRhdGVDb21wbGV0ZSgpe3JldHVybiB0''@;'; put 'put ''aGlzLl8kRV99c2hvdWxkVXBkYXRlKGwpe3JldHVybiEwfXVwZGF0ZShsKXt2b2lkIDAhPT10aGlzLl8kRUMmJih0aGlzLl8kRUMuZm9yRWFjaCgoYSxkKT0+dGhpcy5fJEVPKGQsdGhpc1tkXSxhKSksdGhpcy5fJEVDPXZvaWQgMCksdGhpcy5fJEVrKCl9dXBkYXRlZChsKXt9Zmlyc3RVcGRh''@;'; put 'put ''dGVkKGwpe319dmFyIHBGO2c4W2ZGXT0hMCxnOC5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwLGc4LmVsZW1lbnRTdHlsZXM9W10sZzguc2hhZG93Um9vdE9wdGlvbnM9e21vZGU6Im9wZW4ifSwkWD8uKHtSZWFjdGl2ZUVsZW1lbnQ6Zzh9KSwobnVsbCE9PSh1Rj1wRS5yZWFjdGl2ZUVsZW1l''@;'; put 'put ''bnRWZXJzaW9ucykmJnZvaWQgMCE9PXVGP3VGOnBFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMiIpO2NvbnN0IGdFPXdpbmRvdyxtOD1nRS50cnVzdGVkVHlwZXMsS1g9bTg/bTguY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQg''@;'; put 'put ''MCxtRT0iJGxpdCQiLFRmPWBsaXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsZ0Y9Ij8iK1RmLCQ2ZT1gPCR7Z0Z9PmAsajU9ZG9jdW1lbnQsaGI9KCk9Pmo1LmNyZWF0ZUNvbW1lbnQoIiIpLGZiPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBjLFhYPUFycmF5LmlzQXJyYXksbUY9IlsgXHRcblxmXHJdIixwYj0vPCg/OighLS18XC9bXmEtekEtWl0pfChcLz9bYS16QS1aXVtePlxzXSopfChcLz8kKSkvZyxRWD0vLS0+L2csZUo9Lz4vZyx6NT1SZWdFeHAoYD58JHttRn0oPzooW15cXHMiJz49L10rKSgke21GfSo9JHtt''@;'; put 'put ''Rn0qKD86W14gXHRcblxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx0Sj0vJy9nLG5KPS8iL2cscko9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLGlKPWM9PihsLC4uLmEpPT4oe18kbGl0VHlwZSQ6YyxzdHJpbmdzOmwsdmFsdWVzOmF9KSx2Rj1pSigxKSxxNmU9''@;'; put 'put ''aUooMiksdjg9U3ltYm9sLmZvcigibGl0LW5vQ2hhbmdlIiksVGM9U3ltYm9sLmZvcigibGl0LW5vdGhpbmciKSxvSj1uZXcgV2Vha01hcCxVNT1qNS5jcmVhdGVUcmVlV2Fsa2VyKGo1LDEyOSxudWxsLCExKTtmdW5jdGlvbiBzSihjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1LWD9LWC5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgZ2J7Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9LGQpe2xldCBoO3RoaXMucGFy''@;'; put 'put ''dHM9W107bGV0IGY9MCxfPTA7Y29uc3QgVD1sLmxlbmd0aC0xLFc9dGhpcy5wYXJ0cyxbaWUsZ2VdPSgoYyxsKT0+e2NvbnN0IGE9Yy5sZW5ndGgtMSxkPVtdO2xldCBoLGY9Mj09PWw/Ijxzdmc+IjoiIixfPXBiO2ZvcihsZXQgVD0wO1Q8YTtUKyspe2NvbnN0IFc9Y1tUXTtsZXQgaWUsZ2Us''@;'; put 'put ''d2U9LTEsRWU9MDtmb3IoO0VlPFcubGVuZ3RoJiYoXy5sYXN0SW5kZXg9RWUsZ2U9Xy5leGVjKFcpLG51bGwhPT1nZSk7KUVlPV8ubGFzdEluZGV4LF89PT1wYj8iIS0tIj09PWdlWzFdP189UVg6dm9pZCAwIT09Z2VbMV0/Xz1lSjp2b2lkIDAhPT1nZVsyXT8ockoudGVzdChnZVsyXSkmJiho''@;'; put 'put ''PVJlZ0V4cCgiPC8iK2dlWzJdLCJnIikpLF89ejUpOnZvaWQgMCE9PWdlWzNdJiYoXz16NSk6Xz09PXo1PyI+Ij09PWdlWzBdPyhfPWg/P3BiLHdlPS0xKTp2b2lkIDA9PT1nZVsxXT93ZT0tMjood2U9Xy5sYXN0SW5kZXgtZ2VbMl0ubGVuZ3RoLGllPWdlWzFdLF89dm9pZCAwPT09Z2VbM10/''@;'; put 'put ''ejU6JyInPT09Z2VbM10/bko6dEopOl89PT1uSnx8Xz09PXRKP189ejU6Xz09PVFYfHxfPT09ZUo/Xz1wYjooXz16NSxoPXZvaWQgMCk7Y29uc3QgWmU9Xz09PXo1JiZjW1QrMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9Xz09PXBiP1crJDZlOndlPj0wPyhkLnB1c2goaWUpLFcuc2xp''@;'; put 'put ''Y2UoMCx3ZSkrbUUrVy5zbGljZSh3ZSkrVGYrWmUpOlcrVGYrKC0yPT09d2U/KGQucHVzaCh2b2lkIDApLFQpOlplKX1yZXR1cm5bc0ooYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9Z2IuY3JlYXRlRWxlbWVudChpZSxkKSxVNS5j''@;'; put 'put ''dXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IHdlPXRoaXMuZWwuY29udGVudCxFZT13ZS5maXJzdENoaWxkO0VlLnJlbW92ZSgpLHdlLmFwcGVuZCguLi5FZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD1VNS5uZXh0Tm9kZSgpKSYmVy5sZW5ndGg8VDspe2lmKDE9''@;'; put 'put ''PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3Qgd2U9W107Zm9yKGNvbnN0IEVlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihFZS5lbmRzV2l0aChtRSl8fEVlLnN0YXJ0c1dpdGgoVGYpKXtjb25zdCBaZT1nZVtfKytdO2lmKHdlLnB1c2goRWUpLHZvaWQgMCE9''@;'; put 'put ''PVplKXtjb25zdCBvdD1oLmdldEF0dHJpYnV0ZShaZS50b0xvd2VyQ2FzZSgpK21FKS5zcGxpdChUZiksZXQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhaZSk7Vy5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOmV0WzJdLHN0cmluZ3M6b3QsY3RvcjoiLiI9PT1ldFsxXT9jSjoiPyI9PT1ldFsxXT91''@;'; put 'put ''SjoiQCI9PT1ldFsxXT9kSjptYn0pfWVsc2UgVy5wdXNoKHt0eXBlOjYsaW5kZXg6Zn0pfWZvcihjb25zdCBFZSBvZiB3ZSloLnJlbW92ZUF0dHJpYnV0ZShFZSl9aWYockoudGVzdChoLnRhZ05hbWUpKXtjb25zdCB3ZT1oLnRleHRDb250ZW50LnNwbGl0KFRmKSxFZT13ZS5sZW5ndGgtMTtp''@;'; put 'put ''ZihFZT4wKXtoLnRleHRDb250ZW50PW04P204LmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgWmU9MDtaZTxFZTtaZSsrKWguYXBwZW5kKHdlW1plXSxoYigpKSxVNS5uZXh0Tm9kZSgpLFcucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5kKHdlW0VlXSxoYigpKX19fWVsc2UgaWYoOD09''@;'; put 'put ''PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09Z0YpVy5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IHdlPS0xO2Zvcig7LTEhPT0od2U9aC5kYXRhLmluZGV4T2YoVGYsd2UrMSkpOylXLnB1c2goe3R5cGU6NyxpbmRleDpmfSksd2UrPVRmLmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0''@;'; put 'put ''ZUVsZW1lbnQobCxhKXtjb25zdCBkPWo1LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gWjUoYyxsLGE9YyxkKXt2YXIgaCxmLF8sVDtpZihsPT09djgpcmV0dXJuIGw7bGV0IFc9dm9pZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8''@;'; put 'put ''dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgaWU9ZmIobCk/dm9pZCAwOmwuXyRsaXREaXJlY3RpdmUkO3JldHVybiBXPy5jb25zdHJ1Y3RvciE9PWllJiYobnVsbD09PShmPVc/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoVywhMSksdm9pZCAwPT09aWU/Vz12b2lkIDA6''@;'; put 'put ''KFc9bmV3IGllKGMpLFcuXyRBVChjLGEsZCkpLHZvaWQgMCE9PWQ/KG51bGwhPT0oXz0oVD1hKS5fJENvKSYmdm9pZCAwIT09Xz9fOlQuXyRDbz1bXSlbZF09VzphLl8kQ2w9Vyksdm9pZCAwIT09VyYmKGw9WjUoYyxXLl8kQVMoYyxsLnZhbHVlcyksVyxkKSksbH1jbGFzcyBsSntjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfXUobCl7dmFyIGE7Y29uc3R7ZWw6e2Nv''@;'; put 'put ''bnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOmo1KS5pbXBvcnROb2RlKGQsITApO1U1LmN1cnJlbnROb2RlPWY7bGV0IF89VTUubmV4dE5vZGUoKSxUPTAsVz0wLGllPWhbMF07Zm9yKDt2b2lkIDAhPT1pZTsp''@;'; put 'put ''e2lmKFQ9PT1pZS5pbmRleCl7bGV0IGdlOzI9PT1pZS50eXBlP2dlPW5ldyBfOChfLF8ubmV4dFNpYmxpbmcsdGhpcyxsKToxPT09aWUudHlwZT9nZT1uZXcgaWUuY3RvcihfLGllLm5hbWUsaWUuc3RyaW5ncyx0aGlzLGwpOjY9PT1pZS50eXBlJiYoZ2U9bmV3IGhKKF8sdGhpcyxsKSksdGhp''@;'; put 'put ''cy5fJEFWLnB1c2goZ2UpLGllPWhbKytXXX1UIT09aWU/LmluZGV4JiYoXz1VNS5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIFU1LmN1cnJlbnROb2RlPWo1LGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8k''@;'; put 'put ''QUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxbYV0pKSxhKyt9fWNsYXNzIF84e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1k''@;'; put 'put ''LHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXNDb25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6''@;'; put 'put ''dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFBLnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQg''@;'; put 'put ''ZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7bD1aNSh0aGlzLGwsYSksZmIobCk/bD09PVRjfHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PVRjJiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9VGMpOmwhPT10aGlzLl8kQUgmJmwhPT12OCYmdGhpcy5fKGwpOnZv''@;'; put 'put ''aWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5ub2RlVHlwZT90aGlzLiQobCk6KGM9PlhYKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5v''@;'; put 'put ''ZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PVRjJiZmYih0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhpcy4kKGo1LmNyZWF0ZVRl''@;'; put 'put ''eHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPWdiLmNyZWF0ZUVsZW1lbnQoc0ooaC5oLGguaFswXSksdGhpcy5vcHRpb25z''@;'; put 'put ''KSksaCk7aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IF89bmV3IGxKKGYsdGhpcyksVD1fLnUodGhpcy5vcHRpb25zKTtfLnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD1ffX1fJEFDKGwpe2xl''@;'; put 'put ''dCBhPW9KLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZvSi5zZXQobC5zdHJpbmdzLGE9bmV3IGdiKGwpKSxhfVQobCl7WFgodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwp''@;'; put 'put ''aD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBfOCh0aGlzLmsoaGIoKSksdGhpcy5rKGhiKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRo''@;'; put 'put ''aXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVsbD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIg''@;'; put 'put ''YTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxudWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1UYyx0aGlzLl8kQU49dm9pZCAwLHRoaXMu''@;'; put 'put ''ZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRoaXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPVRjfWdldCB0YWdO''@;'; put 'put ''YW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgXz0hMTtpZih2b2lkIDA9PT1mKWw9WjUodGhpcyxsLGEsMCksXz0hZmIobCl8fGwhPT10aGlz''@;'; put 'put ''Ll8kQUgmJmwhPT12OCxfJiYodGhpcy5fJEFIPWwpO2Vsc2V7Y29uc3QgVD1sO2xldCBXLGllO2ZvcihsPWZbMF0sVz0wO1c8Zi5sZW5ndGgtMTtXKyspaWU9WjUodGhpcyxUW2QrV10sYSxXKSxpZT09PXY4JiYoaWU9dGhpcy5fJEFIW1ddKSxffHwoXz0hZmIoaWUpfHxpZSE9PXRoaXMuXyRB''@;'; put 'put ''SFtXXSksaWU9PT1UYz9sPVRjOmwhPT1UYyYmKGwrPShpZT8/IiIpK2ZbVysxXSksdGhpcy5fJEFIW1ddPWllfV8mJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09VGM/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5u''@;'; put 'put ''YW1lLGw/PyIiKX19Y2xhc3MgY0ogZXh0ZW5kcyBtYntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09VGM/dm9pZCAwOmx9fWNvbnN0IEs2ZT1tOD9tOC5lbXB0eVNjcmlwdDoiIjtjbGFzcyB1SiBl''@;'; put 'put ''eHRlbmRzIG1ie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1UYz90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxLNmUpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgZEogZXh0''@;'; put 'put ''ZW5kcyBtYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPVo1KHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOlRjKT09PXY4KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9''@;'; put 'put ''PT1UYyYmaCE9PVRjfHxsLmNhcHR1cmUhPT1oLmNhcHR1cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLF89bCE9PVRjJiYoaD09PVRjfHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSxfJiZ0aGlzLmVsZW1l''@;'; put 'put ''bnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3Zv''@;'; put 'put ''aWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5lbGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgaEp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFNPWEsdGhpcy5vcHRpb25z''@;'; put 'put ''PWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXtaNSh0aGlzLGwpfX1jb25zdCBmSj1nRS5saXRIdG1sUG9seWZpbGxTdXBwb3J0O2ZKPy4oZ2IsXzgpLChudWxsIT09KHBGPWdFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PXBGP3BGOmdFLmxpdEh0bWxWZXJz''@;'; put 'put ''aW9ucz1bXSkucHVzaCgiMi43LjUiKTtjb25zdCBwSj0oYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1kP2Q6bDtsZXQgXz1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09Xyl7Y29uc3QgVD1udWxsIT09KGg9YT8ucmVuZGVyQmVm''@;'; put 'put ''b3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPV89bmV3IF84KGwuaW5zZXJ0QmVmb3JlKGhiKCksVCksVCx2b2lkIDAsYT8/e30pfXJldHVybiBfLl8kQUkoYyksX307dmFyIF9GLGJGO2NsYXNzIGI4IGV4dGVuZHMgZzh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVu''@;'; put 'put ''dHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUp''@;'; put 'put ''JiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNVcGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlz''@;'; put 'put ''Ll8kRG89cEooYSx0aGlzLnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRD''@;'; put 'put ''YWxsYmFjaygpe3ZhciBsO3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gdjh9fWI4LmZpbmFsaXplZD0hMCxiOC5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oX0Y9''@;'; put 'put ''Z2xvYmFsVGhpcy5saXRFbGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT1fRnx8X0YuY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50OmI4fSk7Y29uc3QgZ0o9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O2dKPy4oe0xpdEVsZW1lbnQ6Yjh9KSwobnVsbCE9PShi''@;'; put 'put ''Rj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PWJGP2JGOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMiIpO2NvbnN0IG1KPWNGYEBjaGFyc2V0ICJVVEYtOCI7Omhvc3QsOnJvb3R7LS3OtDI6dmFyKC0tY2RzLWdsb2JhbC1sYXlv''@;'; put 'put ''dXQtc3BhY2UteHhzLCBjYWxjKDQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Mzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14cywgY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1sYXlvdXQtc3BhY2Utc20sIGNhbGMoMTIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1tZCwgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ2OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnLCBjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDc6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGwsIGNhbGMoMzIgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKX1bY2RzLWxh''@;'; put 'put ''eW91dH49IndyYXA6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZsZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0''@;'; put 'put ''cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxh''@;'; put 'put ''eW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXth''@;'; put 'put ''bGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0''@;'; put 'put ''OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ246cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PWdyaWRde2Rpc3BsYXk6Z3JpZDthbGlnbi1pdGVtczpzdGFydDthbGlnbi1j''@;'; put 'put ''b250ZW50OnN0YXJ0O2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQodmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzLDEyKSwxZnIpO3dpZHRoOjEwMCV9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPXJvd3Nde2dyaWQtdGVtcGxhdGUtcm93czpyZXBlYXQoMTIsYXV0''@;'; put 'put ''byl9W2Nkcy1sYXlvdXR+PWdyaWRdPltjZHMtbGF5b3V0Kj1yb3dde2FsaWduLXNlbGY6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdo''@;'; put 'put ''dCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpz''@;'; put 'put ''dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRj''@;'; put 'put ''aH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1p''@;'; put 'put ''dGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVy''@;'; put 'put ''fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmlu''@;'; put 'put ''c2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImdhcDp4eHMiXXtnYXA6dmFyKC0tzrQyKX1bY2RzLWxheW91dCo9ImdhcDp4cyJde2dhcDp2YXIoLS3OtDMpfVtjZHMtbGF5b3V0Kj0iZ2FwOnNtIl17Z2FwOnZhcigtLc60NCl9W2Nkcy1sYXlvdXQqPSJnYXA6bWQiXXtnYXA6dmFyKC0tzrQ1KX1bY2RzLWxheW91dCo9ImdhcDpsZyJde2dh''@;'; put 'put ''cDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHhzIl17cGFkZGluZzp2YXIoLS3OtDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHMiXXtwYWRkaW5nOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icDpzbSJde3BhZGRpbmc6dmFyKC0tzrQ0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFk''@;'; put 'put ''ZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTp4cyJde3BhZGRpbmctdG9wOnZhcigtLc60MykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60MykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLc60Nikh''@;'; put 'put ''aW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRp''@;'; put 'put ''bmctbGVmdDp2YXIoLS3OtDUpIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bGciXXtnYXA6dmFyKC0tzrQ2KX1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBt''@;'; put 'put ''ZDp4bCJde21hcmdpbjp2YXIoLS3OtDcpIWltcG9ydGFudH19W2Nkcy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzpib3JkZXItYm94fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpv''@;'; put 'put ''bnRhbC1zdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCope2ZsZXgt''@;'; put 'put ''Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4t''@;'; put 'put ''Ym90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe21hcmdpbi10b3A6''@;'; put 'put ''YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKSxbY2RzLWxheW91''@;'; put 'put ''dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7bWFyZ2luLWJvdHRv''@;'; put 'put ''bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6''@;'; put 'put ''cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRp''@;'; put 'put ''YSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXttYXJn''@;'; put 'put ''aW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1j''@;'; put 'put ''ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9''@;'; put 'put ''ImFsaWduQG1kOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0''@;'; put 'put ''ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZl''@;'; put 'put ''cnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFs''@;'; put 'put ''XSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Ym90dG9tIl0pe2FsaWduLXNl''@;'; put 'put ''bGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p''@;'; put 'put ''e21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe2FsaWduLXNlbGY6''@;'; put 'put ''ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0p''@;'; put 'put ''e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmJv''@;'; put 'put ''dHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBtZDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDox''@;'; put 'put ''MjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNl''@;'; put 'put ''bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDph''@;'; put 'put ''dXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChb''@;'; put 'put ''Y2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRl''@;'; put 'put ''ciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIi''@;'; put 'put ''XSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9y''@;'; put 'put ''dGFudH19W2Nkcy10ZXh0XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMtdGV4dF1bY2RzLWxheW91dH49''@;'; put 'put ''Z3JpZF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49Z3JpZF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1zZWN0aW9uXSxbY2RzLXRleHQqPXN1YnNlY3Rpb25dLFtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtZmFtaWx5OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkw''@;'; put 'put ''MCwjMjEzMzNiKSl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQqPW1lc3NhZ2VdLFtjZHMtdGV4dCo9c2Vjb25kYXJ5XXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2ssIzAwMCkpfVtjZHMtdGV4dCo9aW5s''@;'; put 'put ''aW5lXXt3aWR0aDphdXRvIWltcG9ydGFudDtkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9W2Nkcy10ZXh0Kj1kaXNwbGF5XXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplLGNhbGMoNDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPWRpc3BsYXldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzNlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmJlZm9yZXtjb250ZW50OiIiO2Rp''@;'; put 'put ''c3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQsMS4xNjY2N2Vt''@;'; put 'put ''KSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x''@;'; put 'put ''NDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwx''@;'; put 'put ''LjE2NjY3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdo''@;'; put 'put ''dCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0''@;'; put 'put ''aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS4yNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7''@;'; put 'put ''ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEu''@;'; put 'put ''MjVlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAt''@;'; put 'put ''aGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u''@;'; put 'put ''LWxpbmUtaGVpZ2h0LDEuMjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWZvbnQtc2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pfVtjZHMtdGV4dCo9Ym9keV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWln''@;'; put 'put ''aHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDow''@;'; put 'put ''O21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgt''@;'; put 'put ''aGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuMjVlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjI1ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnld''@;'; put 'put ''OjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwj''@;'; put 'put ''MDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29s''@;'; put 'put ''b3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xv''@;'; put 'put ''ci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1m''@;'; put 'put ''YW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRl''@;'; put 'put ''bjtib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLXRleHR+PWxlZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzou''@;'; put 'put ''MDVweCAwfVtjZHMtdGV4dH49bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtj''@;'; put 'put ''ZHMtdGV4dCo9aDJdLFtjZHMtdGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJv''@;'; put 'put ''dHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp''@;'; put 'put ''ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jl''@;'; put 'put ''e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10''@;'; put 'put ''ZXh0Kj1oM106OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkt''@;'; put 'put ''YXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJp''@;'; put 'put ''dDtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpu''@;'; put 'put ''b25lIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNw''@;'; put 'put ''bGF5OmNvbnRlbnRzIWltcG9ydGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItY29uc3RydWN0aW9uLTYwMCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1''@;'; put 'put ''cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1l''@;'; put 'put ''dmVudHM6bm9uZX06aG9zdChbaGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6''@;'; put 'put ''OnNsb3R0ZWQoKil7ZGlzcGxheTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2li''@;'; put 'put ''bGUhaW1wb3J0YW50fTpob3N0KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9j''@;'; put 'put ''dXN7b3V0bGluZTpIaWdobGlnaHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIHlGKGMpe3JldHVy''@;'; put 'put ''bmBjYWxjKCgke2N9IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgdDhlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXks''@;'; put 'put ''Yyl9fTp7a2luZDoiZmllbGQiLGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMp''@;'; put 'put ''KX0sZmluaXNoZXIoYSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LG44ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiB2SihjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9uOGUoYyxsLGEpOnQ4ZShjLGwpfWZ1bmN0aW9uIF9KKGMs''@;'; put 'put ''bCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNlIE51bWJl''@;'; put 'put ''cjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6RjUoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpGNShjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIHo2ZShjKXtyZXR1cm4g''@;'; put 'put ''bnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiBrbChjKXtyZXR1cm4obCxhKT0+KGM/LnJl''@;'; put 'put ''cXVpcmVkJiZmdW5jdGlvbiByOGUoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmX3AodGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKF89Indhcm5pbmciLFQsVyl7Y29u''@;'; put 'put ''c3QgaWU9Vy50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke3dLKF8pfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtpZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhtSygpP2BBbmd1bGFyOiA8JHtpZX0gWyR7VH1dPSIuLi4i''@;'; put 'put ''PjwvJHtpZX0+XG5gOiIiKSsoX0soKT9gVnVlOiA8JHtpZX0gOiR7VH09Ii4uLiI+PC8ke2llfT5cbmA6IiIpKyh2SygpP2BSZWFjdDogPCR7ZnVuY3Rpb24gWWdlKGMpe3JldHVybiB3SyhmdW5jdGlvbiBaZ2UoYyl7cmV0dXJuIGMuc3BsaXQoIi0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQo''@;'; put 'put ''MCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oaWUpfSAke2dlPVQsZ2Uuc3RhcnRzV2l0aCgiYXJpYSIpP0Y1KGdlKTpnZX09ey4uLn0gLz5cbmA6IiIpK2BIVE1MOiA8JHtpZX0gJHtGNShUKX09Ii4uLiI+PC8ke2llfT5cbkphdmFT''@;'; put 'put ''Y3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7aWV9JykuJHtUfSA9ICcuLi4nO1xuXG5gO3ZhciBnZX0oYS5yZXF1aXJlZCxsLHRoaXMudGFnTmFtZSk7aWYoImVycm9yIj09PWEucmVxdWlyZWQpdGhyb3cgRXJyb3IoZik7SDUud2FybihmLHRoaXMpfWQmJmQuY2FsbCh0aGlzLGgp''@;'; put 'put ''fX0obCxhLGMpLHZKKF9KKGEsYykpKGwsYSkpfWZ1bmN0aW9uIGJKKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1fSihhLGMpO3JldHVybiBkJiYoZC5yZWZsZWN0PSEhYz8ucmVmbGVjdCYmYy5yZWZsZWN0LGQucmVmbGVjdCYmIWM/LmF0dHJpYnV0ZSYmKGQuYXR0cmlidXRlPSJfIitGNShh''@;'; put 'put ''KSkpLHZKKGQpKGwsYSl9fXZhciBjaCxzOGU9Y0ZgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcs''@;'; put 'put ''Y2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYg''@;'; put 'put ''KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3Ip''@;'; put 'put ''O2NvbG9yOnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13''@;'; put 'put ''aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNl''@;'; put 'put ''LDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAy''@;'; put 'put ''MjAwKSl9Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYx''@;'; put 'put ''NjkpKX06aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4''@;'; put 'put ''MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9''@;'; put 'put ''Omhvc3QoW2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDAp''@;'; put 'put ''KSl9Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04''@;'; put 'put ''MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5''@;'; put 'put ''YWQpKX06aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2Ut''@;'; put 'put ''Y29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1i''@;'; put 'put ''YWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmct''@;'; put 'put ''ZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5B''@;'; put 'put ''bmRPdXQgMS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1p''@;'; put 'put ''bnRlcm5hbC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIHU4ZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBhOGUoYyl7c3dpdGNoKCEwKXtjYXNlIF9wKGMpOnJldHVybiBjaC5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiB5Sihj''@;'; put 'put ''KXtyZXR1cm5bInh4cyIsInhzIiwic20iLCJtZCIsImxnIiwieGwiLCJ4eGwiXS5pbmRleE9mKGMpPi0xfShjKTpyZXR1cm4gY2guVmFsaWRTaXplU3RyaW5nO2Nhc2UgZnVuY3Rpb24gbEsoYyl7cmV0dXJuIElQKGMpJiYhYUsoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiBjaC5WYWxp''@;'; put 'put ''ZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gY2guQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gbDhlKGMpe3JldHVybiBfcChjKT8iIjpmdW5jdGlvbiBXZ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09''@;'; put 'put ''bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGNoLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT15RihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBRNmUoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09''@;'; put 'put ''ZH0pfShjLC4uLmZ1bmN0aW9uIGM4ZShjLGwpe3JldHVybiF0YihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13''@;'; put 'put ''aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgY2guVmFsaWRTaXplU3RyaW5nOmNhc2UgY2guTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIGU4ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1p''@;'; put 'put ''bi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gd0YoYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12''@;'; put 'put ''YWx1ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifShjaHx8KGNoPXt9KSk7Y2xhc3MgbzIgZXh0ZW5kcyBiOHtjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW21KLHM4ZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBPZ2UoYyxs''@;'; put 'put ''KXtyZXR1cm4hX3AoYykmJnVLKGMsbCl9KGwsdGhpcy5fc2hhcGUpKXtjb25zdCBhPXRoaXMuX3NoYXBlO3RoaXMuX3NoYXBlPWwsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIsYSl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUobCl7aWYoZnVuY3Rpb24gUmdlKGMs''@;'; put 'put ''bCl7cmV0dXJuIGZ1bmN0aW9uIExnZShjKXtyZXR1cm4gWngoU3RyaW5nLGMpfHx0YihjKX0oYykmJnVLKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsdThlKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs''@;'; put 'put ''KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPXlGKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7eUYoMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+''@;'; put 'put ''eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJlZzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gSVAoVnMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP3ZGYDxzcGFuIC5pbm5lckhUTUw9IiR7VnMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpxNmVgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u''@;'; put 'put ''IGg4ZShjKXtjb25zdCBsPVZzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9Wcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiF3RihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl''@;'; put 'put ''ZD8/YSksd0YoYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gZDhlKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZ3RihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw''@;'; put 'put ''MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94''@;'; put 'put ''PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fU10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsInNp''@;'; put 'put ''emUiLG51bGwpLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sbzIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxvMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sbzIucHJvdG90eXBlLCJzb2xpZCIsdm9p''@;'; put 'put ''ZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLE10KFtrbCh7dHlwZTpCb29sZWFufSldLG8yLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLG8yLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks''@;'; put 'put ''TXQoW2JKKHt0eXBlOk51bWJlcn0pXSxvMi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLE10KFtmdW5jdGlvbiBvOGUoYyxsKXtyZXR1cm4oKHtmaW5pc2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEu''@;'; put 'put ''b3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksXz1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlwdG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJihfLmZpbmlzaGVyPWZ1bmN0aW9uKFQpe2MoVCxm''@;'; put 'put ''KX0pLF99e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlwdG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9v''@;'; put 'put ''dCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYs''@;'; put 'put ''XztyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PShfPW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1fP186bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sbzIu''@;'; put 'put ''cHJvdG90eXBlLCJzdmciLHZvaWQgMCksVlgoImNkcy1pY29uIixvMik7Y2xhc3MgcDhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt2YXIgbD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt5aWVsZCBs''@;'; put 'put ''Lmhvc3QudXBkYXRlQ29tcGxldGUsbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsYT0+bC5lbXVsYXRlQWN0aXZlKGEpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigia2V5''@;'; put 'put ''dXAiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSl9KSgpfWVtdWxhdGVBY3RpdmUobCl7''@;'; put 'put ''dGhpcy5ob3N0LmRpc2FibGVkfHx0aGlzLmhvc3Q/LnNldEF0dHJpYnV0ZSgiY2RzLWFjdGl2ZSIsIiIpLCJTcGFjZSI9PT1sLmNvZGUmJmwudGFyZ2V0PT09dGhpcy5ob3N0JiZsLnByZXZlbnREZWZhdWx0KCl9ZW11bGF0ZUluYWN0aXZlKCl7dGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgi''@;'; put 'put ''Y2RzLWFjdGl2ZSIpfX1jbGFzcyBtOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpeyh0aGlzLmhvc3QuaGFzQXR0cmlidXRlKCJhcmlhLWNvbnRyb2xzIil8fHRoaXMuaG9zdC5hcmlhQ29udHJvbHMpJiYo''@;'; put 'put ''dGhpcy5ob3N0LmFyaWFIYXNQb3B1cD0idHJ1ZSIsdGhpcy5ob3N0LmFyaWFFeHBhbmRlZD0iZmFsc2UiKX19Y2xhc3MgXzhle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9PXRoaXMuaG9zdC5kaXNh''@;'; put 'put ''YmxlZCYmKHRoaXMuaG9zdC5hcmlhRGlzYWJsZWQ9dGhpcy5ob3N0LmRpc2FibGVkKSx0aGlzLmhvc3QucmVhZG9ubHkmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPW51bGwpfX1jbGFzcyB5OGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhp''@;'; put 'put ''cyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QucHJlc3NlZCYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD10aGlzLmhvc3QucHJlc3NlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFQcmVzc2VkPW51bGwpfX1jbGFzcyBDOGV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3RoaXMuaG9zdC50YWJJbmRleD0wfWhvc3RVcGRhdGVkKCl7dGhpcy5ob3N0LnJvbGU9dGhpcy5ob3N0LnJlYWRvbmx5P251bGw6ImJ1dHRvbiIsdGhpcy5ob3N0LnRhYklu''@;'; put 'put ''ZGV4PXRoaXMuaG9zdC5kaXNhYmxlZD8tMTowLHRoaXMuaG9zdC5yZWFkb25seSYmdGhpcy5ob3N0LnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX19Y2xhc3MgTThle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWdldCBjdXJyZW50''@;'; put 'put ''QW5jaG9yKCl7cmV0dXJuIkEiPT09dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU/dGhpcy5ob3N0LnBhcmVudEVsZW1lbnQ6bnVsbH1ob3N0Q29ubmVjdGVkKCl7dGhpcy5zZXRBbmNob3IoKX1ob3N0VXBkYXRlZCgpe3RoaXMuc2V0QW5jaG9yKCl9c2V0QW5jaG9yKCl7dGhpcy5j''@;'; put 'put ''dXJyZW50QW5jaG9yJiZ0aGlzLmN1cnJlbnRBbmNob3IhPT10aGlzLnByZXZpb3VzQW5jaG9yJiYodGhpcy5wcmV2aW91c0FuY2hvcj10aGlzLmN1cnJlbnRBbmNob3IsdGhpcy5ob3N0LnJlYWRvbmx5PSEwLHRoaXMuY3VycmVudEFuY2hvci5zdHlsZS5saW5lSGVpZ2h0PSIwIix0aGlzLmN1''@;'; put 'put ''cnJlbnRBbmNob3Iuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiKX19Y29uc3QgQ0Y9Yz0+Yz8/VGM7ZnVuY3Rpb24gd0ooYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCl9Y29uc3QgU0Y9bmV3IE1hcChbWyJhcnJvdy1sZWZ0IiwiQXJyb3dMZWZ0Il0sWyJhcnJv''@;'; put 'put ''dy1yaWdodCIsIkFycm93UmlnaHQiXSxbImFycm93LXVwIiwiQXJyb3dVcCJdLFsiYXJyb3ctZG93biIsIkFycm93RG93biJdLFsidGFiIiwiVGFiIl0sWyJlbnRlciIsIkVudGVyIl0sWyJlc2NhcGUiLCJFc2NhcGUiXSxbInNwYWNlIiwiICJdLFsiaG9tZSIsIkhvbWUiXSxbImVuZCIsIkVu''@;'; put 'put ''ZCJdXSk7Y2xhc3MgRThle3N0YXRpYyBnZXQga2V5Y29kZXMoKXtyZXR1cm4gSGdlKFNGKX1zdGF0aWMgYWRkKGwsYSl7U0Yuc2V0KGwsYSl9c3RhdGljIGhhcyhsKXtyZXR1cm4gU0YuaGFzKGwpfXN0YXRpYyBnZXRDb2RlKGwsYT10aGlzLmtleWNvZGVzKXtyZXR1cm4gZnVuY3Rpb24gazhl''@;'; put 'put ''KGMsbCl7cmV0dXJuIGwuZ2V0KGMpfHwiIn0obCxhKX19ZnVuY3Rpb24gTUYoYyxsKXtyZXR1cm4gRThlLmdldENvZGUobCk9PT1jLmtleX12YXIgdWg7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVm''@;'; put 'put ''dCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhvbWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0odWh8fCh1aD17fSkpO2NsYXNzIE84ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVC''@;'; put 'put ''dXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRD''@;'; put 'put ''b250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25UeXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJt''@;'; put 'put ''aXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJlYWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVt''@;'; put 'put ''b3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExp''@;'; put 'put ''c3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIEE4ZShjLGwsYSl7Yy5maWx0ZXIoZD0+TUYobCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s''@;'; put 'put ''bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksd0oobCl9KX10cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCl7aWYodGhpcy5ob3N0LmRpc2FibGVkKXdKKGwpO2Vsc2UgaWYoIWwu''@;'; put 'put ''ZGVmYXVsdFByZXZlbnRlZCl7Y29uc3QgYT1mdW5jdGlvbiBMOGUoYyxsLGEpe2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5hcHBlbmRDaGlsZChkKSxwSihjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVybiBk''@;'; put 'put ''LnJlbW92ZSgpLGh9KHZGYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke0NGKHRoaXMuaG9zdC52''@;'; put 'put ''YWx1ZSl9IiBuYW1lPSIke0NGKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7Q0YodGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6ITB9''@;'; put 'put ''KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBGOGV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBhbmRl''@;'; put 'put ''ZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHMyPWNsYXNzIGV4dGVuZHMgYjh7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07TXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDApLE10''@;'; put 'put ''KFtrbCh7dHlwZTpCb29sZWFufSldLHMyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSxNdChb''@;'; put 'put ''a2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSxNdChba2woe3R5cGU6U3RyaW5nfSldLHMyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksTXQoW2tsKHt0eXBlOkJvb2xlYW59KV0sczIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksTXQoW2tsKHt0eXBl''@;'; put 'put ''OlN0cmluZ30pXSxzMi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHMyPU10KFtmdW5jdGlvbiBmOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgcDhlKGwpKX0oKSxmdW5jdGlvbiB3OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgQzhlKGwpKX0o''@;'; put 'put ''KSxmdW5jdGlvbiBiOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgeThlKGwpKX0oKSxmdW5jdGlvbiBQOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgRjhlKGwpKX0oKSxmdW5jdGlvbiB2OGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihs''@;'; put 'put ''PT5uZXcgXzhlKGwpKX0oKSxmdW5jdGlvbiBnOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgbThlKGwpKX0oKSxmdW5jdGlvbiBSOGUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgTzhlKGwpKX0oKSxmdW5jdGlvbiBTOGUoKXtyZXR1cm4gYz0+Yy5h''@;'; put 'put ''ZGRJbml0aWFsaXplcihsPT5uZXcgTThlKGwpKX0oKV0sczIpO2NvbnN0IHZFPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3Nl''@;'; put 'put ''Iixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUgZmls''@;'; put 'put ''ZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZpZ2F0''@;'; put 'put ''aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9LG92''@;'; put 'put ''ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVwIixj''@;'; put 'put ''b250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJvZ3Jl''@;'; put 'put ''c3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJvd0Rl''@;'; put 'put ''dGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFnaW5h''@;'; put 'put ''dGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19fTtj''@;'; put 'put ''bGFzcyBZNXtzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYoR2wuc3RhdGUuaTE4blJlZ2lzdHJ5PVA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSkpLFA1KHZFLEdsLnN0YXRlLmkxOG5SZWdpc3RyeSl9c3Rh''@;'; put 'put ''dGljIGZpbmRLZXkobCl7Y29uc3QgYT1ZNS5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmRLKGFbZF0sbCkpfXN0YXRpYyBnZXQobCl7cmV0dXJuIGwmJlk1LmtleXNbbF18fHt9fXN0YXRpYyByZXNldCgpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh7fSx2RSl9c3RhdGlj''@;'; put 'put ''IGh5ZHJhdGUobCxhKXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiAkZ2UoYyxsLGEpe3JldHVybiBjLnJlcGxhY2UoL1wkXHsuKz9cfS9nLGQ9PmZ1bmN0aW9uIEZnZShjLGwsYT1gXCR7JHtjfX1gKXtyZXR1cm4gYy5zcGxpdCgiLiIpLnJlZHVjZSgoZCxoKT0+e3RyeXtjb25zdCBmPWRb''@;'; put 'put ''aF07c3dpdGNoKCEwKXtjYXNlIG51bGw9PT1mOmNhc2UhMT09PWY6Y2FzZSIiPT09ZjpjYXNlIDA9PT1mOnJldHVybiBmO2RlZmF1bHQ6cmV0dXJuIGZ8fGF9fWNhdGNoe3JldHVybiBhfX0sbCl9KGQuc3Vic3RyKDIsZC5sZW5ndGgtMykudHJpbSgpLGwsYSkpfShKU09OLnN0cmluZ2lmeShs''@;'; put 'put ''KSxhKSl9c3RhdGljIGxvY2FsaXplKGwpe0dsLnN0YXRlLmkxOG5SZWdpc3RyeT1QNSh2RSxHbC5zdGF0ZS5pMThuUmVnaXN0cnksbCl9fXZhciBCOGU9Y0ZgOmhvc3R7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS13aWR0aDp2YXIoLS1pY29uLXdpZHRoKTstLWhlaWdodDp2YXIoLS1pY29uLXdpZHRoKTstLWN1cnNvcjpw''@;'; put 'put ''b2ludGVyOy0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwLCAjMmQ0MDQ4KSk7LS1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zLCBjYWxjKDEz''@;'; put 'put ''ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS1iYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy0tcGFkZGluZzowOy0tb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUsIEhpZ2hsaWdodCBzb2xpZCAycHgpOy0tb3V0bGluZS1vZmZz''@;'; put 'put ''ZXQ6Y2FsYyh2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LCAxcHgpICogLTEpO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dKXtwb2ludGVyLWV2ZW50''@;'; put 'put ''czppbml0aWFsO2N1cnNvcjp2YXIoLS1jdXJzb3IpIWltcG9ydGFudH06aG9zdChbc3RhdHVzPWFjdGl2ZV0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9OjpzbG90dGVkKFtzaGFwZT1jbG9z''@;'; put 'put ''ZV0pLDo6c2xvdHRlZChbc2hhcGU9aW5mby1jaXJjbGVdKSw6OnNsb3R0ZWQoW3NoYXBlPXRpbWVzXSksOmhvc3QoW3NoYXBlPWNsb3NlXSksOmhvc3QoW3NoYXBlPWluZm8tY2lyY2xlXSl7LS1pY29uLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0taWNvbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04LCBjYWxjKDE4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9Omhvc3QoOmhvdmVyKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItaG92ZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDAsICMxYjJiMzIpKX06aG9zdCg6YWN0aXZlKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSkgLnByaXZhdGUtaG9zdHt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpLyAyKSl9Omhvc3Qo''@;'; put 'put ''W2Rpc2FibGVkXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAsICNhZWI4YmMpKX0ucHJpdmF0ZS1ob3N0ey0taWNvbi1jb2xvcjp2YXIoLS1jb2xvcik7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1iYWNrZ3JvdW5kKTtwYWRkaW5nOnZhcigtLXBhZGRpbmcpO2NvbG9yOnZhcigtLWNvbG9yKTtmb250LXNpemU6dmFyKC0tZm9udC1zaXplKTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWluLXdpZHRoOnZhcigt''@;'; put 'put ''LXdpZHRoKTttaW4taGVpZ2h0OnZhcigtLWhlaWdodCl9OjpzbG90dGVkKGNkcy1pY29uKSxjZHMtaWNvbnt3aWR0aDp2YXIoLS1pY29uLXdpZHRoKTtoZWlnaHQ6dmFyKC0taWNvbi1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmV9OjpzbG90dGVkKGNkcy1pY29uOm5vdChbc3RhdHVzXSkp''@;'; put 'put ''LGNkcy1pY29uey0tY29sb3I6dmFyKC0taWNvbi1jb2xvcil9Omhvc3QoW2Rpc2FibGVkXTphY3RpdmUpe3BvaW50ZXItZXZlbnRzOm5vbmUhaW1wb3J0YW50fS5wcml2YXRlLWhvc3Q6OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDpjYWxjKC0xKnZhcigtLXdpZHRo''@;'; put 'put ''KSAtIDEpO3RvcDpjYWxjKC0xKnZhcigtLWhlaWdodCkgLSAxKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXRvdWNoLXRhcmdldCxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW2Rpc2FibGVkXSkgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZTowIWltcG9ydGFudH06aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVy''@;'; put 'put ''e291dGxpbmU6dmFyKC0tb3V0bGluZSk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tb3V0bGluZS1vZmZzZXQpfUBtZWRpYSAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApezpob3N0KDpmb2N1cykgLnByaXZhdGUtaG9zdDo6YWZ0ZXJ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3Vz''@;'; put 'put ''LXJpbmctY29sb3J9fWA7Y2xhc3MgVzUgZXh0ZW5kcyBzMntjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pMThuPVk1LmtleXMuYWN0aW9ucyx0aGlzLmNkc0J1dHRvbkFjdGlvbj0hMH1yZW5kZXIoKXtyZXR1cm4gdkZgPGRpdiBjbGFzcz0icHJpdmF0ZS1ob3N0Ij48''@;'; put 'put ''c2xvdD48Y2RzLWljb24gLnNoYXBlPSIke3RoaXMuc2hhcGU/dGhpcy5zaGFwZToiZWxsaXBzaXMtdmVydGljYWwifSIgLnNpemU9IiR7dGhpcy5pY29uU2l6ZX0iID9zb2xpZD0iJHt0aGlzLnByZXNzZWR8fHRoaXMuZXhwYW5kZWR9IiBpbm5lci1vZmZzZXQ9IiR7MX0iPjwvY2RzLWljb24+''@;'; put 'put ''PC9zbG90PjwvZGl2PmB9dXBkYXRlZChsKXtzdXBlci51cGRhdGVkKGwpLHRoaXMuYXJpYUxhYmVsfHx0aGlzLnJlYWRvbmx5fHxINS53YXJuKCJBIGFyaWEtbGFiZWwgaXMgcmVxdWlyZWQgZm9yIGludGVyYWN0aXZlIGNkcy1idXR0b24tYWN0aW9uIHR5cGUiLHRoaXMpLGwuaGFzKCJyZWFk''@;'; put 'put ''b25seSIpJiYodGhpcy5hcmlhSGlkZGVuPXRoaXMucmVhZG9ubHkmJiF0aGlzLmhhc0F0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpPyJ0cnVlIjpudWxsKX19VzUuc3R5bGVzPVttSixCOGVdLE10KFtrbCh7dHlwZTpTdHJpbmd9KV0sVzUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxNdChba2wo''@;'; put 'put ''e3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sVzUucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksTXQoW2tsKHt0eXBlOlN0cmluZ30pXSxXNS5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLE10KFtmdW5jdGlvbiBIOGUoKXtyZXR1cm4oYyxsKT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRD''@;'; put 'put ''YWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPUdsLnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVzdFVwZGF0ZShsKX0pLGEmJmEuYXBwbHko''@;'; put 'put ''dGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9UDUoWTUua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5fX2kxOG58fHt9KTtyZXR1cm4gWTUuaHlk''@;'; put 'put ''cmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3QgXz1mdW5jdGlvbiBOOGUoYyxsKXtpZihfcChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoX3AoZCkpYT17fTtlbHNlIHRyeXthPUpTT04u''@;'; put 'put ''cGFyc2UoZCl9Y2F0Y2h7SDUud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBWOGUoYyxsLGEsZCl7cmV0dXJuIF9wKGMpP2RLKGEsZCk/e3VwZGF0ZTohMX06e3Vw''@;'; put 'put ''ZGF0ZTohMCx2YWx1ZXM6YX06Yz09PWw/e3VwZGF0ZTohMSx2YWx1ZXM6e319Ont1cGRhdGU6ITAsa2V5OmMsdmFsdWVzOnt9fX0oWTUuZmluZEtleShfKXx8IiIsdGhpcy5fX2kxOG5LZXksXyx0aGlzLl9faTE4bik7dm9pZCAwIT09VC5rZXkmJih0aGlzLl9faTE4bktleT1ULmtleSsiIiks''@;'; put 'put ''dm9pZCAwIT09VC52YWx1ZXMmJih0aGlzLl9faTE4bj17Li4uVC52YWx1ZXN9KSwhMD09PVQudXBkYXRlJiZ0aGlzLnJlcXVlc3RVcGRhdGUoKSx0aGlzLnJlcXVlc3RVcGRhdGUobCl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfTtyZXR1cm4gdm9pZCAwIT09bD9mdW5jdGlvbihm''@;'; put 'put ''LF8sVCl7Y29uc3QgVz1PYmplY3QuZGVmaW5lUHJvcGVydHkoXyxULGYpO3JldHVybiBrbCh7dHlwZTpPYmplY3QsYXR0cmlidXRlOiJjZHMtaTE4biJ9KShXLFQpfShoLGMsbCk6ZnVuY3Rpb24oZixfKXtjb25zdCBUPXtraW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6''@;'; put 'put ''Xy5rZXksZGVzY3JpcHRvcjpmfTtyZXR1cm4ga2woe3R5cGU6T2JqZWN0fSkoVCl9KGgsYyl9fSgpXSxXNS5wcm90b3R5cGUsImkxOG4iLHZvaWQgMCksTXQoW2JKKHt0eXBlOkJvb2xlYW4scmVmbGVjdDohMCxhdHRyaWJ1dGU6ImNkcy1idXR0b24tYWN0aW9uIn0pXSxXNS5wcm90b3R5cGUs''@;'; put 'put ''ImNkc0J1dHRvbkFjdGlvbiIsdm9pZCAwKTtjbGFzcyBTSiBleHRlbmRzIFc1e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMu''@;'; put 'put ''YXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19TXQoW2tsKHt0eXBlOlN0cmluZ30pXSxTSi5wcm90b3R5cGUsInNoYXBlIix2b2lkIDApLFZYKCJjZHMtaW50ZXJuYWwtY2xvc2UtYnV0dG9uIixTSiksVnMuYWRkSWNvbnMoSUspLFZzLmFkZEFsaWFzZXMoWyJ0aW1l''@;'; put 'put ''cyIsWyJjbG9zZSJdXSk7Y29uc3QgRW89WyIqIl07ZnVuY3Rpb24gejhlKGMsbCl7aWYoMSZjJiYoQnIoMCksTmUoMSksVXIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFU4ZShjLGwpe2lmKDEmYyYmKG1lKDAs''@;'; put 'put ''ImRpdiIsMTQpLFFlKDEsejhlLDIsMSwibmctY29udGFpbmVyIiwwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWQuQWNjb3JkaW9uU3RhdHVzLkVycm9yKX19ZnVuY3Rpb24gWjhlKGMsbCl7aWYoMSZjJiYoQnIo''@;'; put 'put ''MCksTmUoMSksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIFk4ZShjLGwpe2lmKDEmYyYmKEJyKDApLE5lKDEpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5''@;'; put 'put ''cy5zdWNjZXNzKX19ZnVuY3Rpb24gVzhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkseHQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRv''@;'; put 'put ''bmUoaCkpfSksbWUoMSwiZGl2IiwxNiksa3IoMiwyKSx5ZSgpKCl9MiZjJiZSZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBHOGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxRZSgxLFU4ZSwyLDEsImRpdiIsMSksbWUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImJ1dHRv''@;'; put 'put ''biIsNCw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlUGFuZWwoKSl9KSxiYSg2LCJhc3luYyIpLG1lKDcsInNwYW4iLDYpLFFlKDgsWjhlLDIsMSwibmctY29udGFpbmVyIiwwKSxRZSg5LFk4ZSwyLDEsIm5nLWNvbnRhaW5lciIsMCkseWUoKSxt''@;'; put 'put ''ZSgxMCwic3BhbiIsNykscXQoMTEsImNkcy1pY29uIiw4KSgxMiwic3BhbiIsOSkoMTMsImNkcy1pY29uIiwxMCkoMTQsImNkcy1pY29uIiwxMSkseWUoKSxrcigxNSksa3IoMTYsMSkseWUoKSgpLG1lKDE3LCJkaXYiLDEyKSxRZSgxOCxXOGUsMywxLCJkaXYiLDEzKSx5ZSgpKCksVXIoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2xldCBoO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cyE9PWQuQWNjb3JkaW9uU3RhdHVzLkluYWN0aXZlKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKSksQ2UoMiksZHIoImNsci1hY2NvcmRpb24t''@;'; put 'put ''aGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShoPVVsKDYsMTYsZC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDpoLmxlbmd0aCl8fGQuYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxSZSgiaWQiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlk''@;'; put 'put ''KSkoImRpc2FibGVkIixkLmlzQWNjb3JkaW9uJiZhLmRpc2FibGVkKSxUcigiYXJpYS1kaXNhYmxlZCIsIWQuaXNBY2NvcmRpb24mJmEuZGlzYWJsZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldEFjY29yZGlvbkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsYS5vcGVu''@;'; put 'put ''KSxDZSg0KSxSZSgibmdJZiIsYS5zdGF0dXM9PT1kLkFjY29yZGlvblN0YXR1cy5FcnJvciksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09ZC5BY2NvcmRpb25TdGF0dXMuQ29tcGxldGUpLENlKDgpLFJlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixkLmdldEFjY29yZGlv''@;'; put 'put ''bkNvbnRlbnRJZChhLnRlbXBsYXRlSWQpKSxUcigiYXJpYS1oaWRkZW4iLCFhLm9wZW4pKCJhcmlhLWxhYmVsbGVkYnkiLGQuZ2V0QWNjb3JkaW9uSGVhZGVySWQoYS50ZW1wbGF0ZUlkKSksQ2UoMSksUmUoIm5nSWYiLGEub3Blbil9fWNvbnN0IE1KPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxl''@;'; put 'put ''Il0sWyJjbHItc3RlcC10aXRsZSJdXSxbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLHhKPVsiY2xyLWFjY29yZGlvbi10aXRsZSwgY2xyLXN0ZXAtdGl0bGUiLCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLCBjbHItc3RlcC1k''@;'; put 'put ''ZXNjcmlwdGlvbiIsIioiXSxnN2U9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gbTdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLHF0KDEsInNwYW4iLDIpLHllKCkpLDImYyYmKENlKDEpLFJlKCJAc3Bpbm5lciIsdm9pZCAwKSl9ZnVuY3Rpb24gdjdlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVZuKCk7bWUoMCwic3BhbiIpKDEsInNwYW4iLDMpLHh0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiQHZh''@;'; put 'put ''bGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gXzdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLGtyKDEpLHllKCkpLDImYyYmUmUoIkBkZWZhdWx0QnV0dG9uIix2b2lkIDApfWZ1bmN0aW9uIGI3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1jb25zdCB5N2U9W1tbIiIsImNsckNoZWNrYm94''@;'; put 'put ''IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sW1sibGFiZWwiXV1dLHc3ZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIEM3ZShjLGwpezEmYyYmcXQoMCwibGFiZWwiKX1mdW5jdGlvbiBTN2UoYyxsKXsxJmMmJmtyKDAsMixbIipuZ0lmIiwic2hvd0hl''@;'; put 'put ''bHBlciJdKX1mdW5jdGlvbiBNN2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiB4N2UoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBFN2UoYyxsKXsxJmMmJmtyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gazdlKGMsbCl7''@;'; put 'put ''MSZjJiZrcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBBN2U9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1j''@;'; put 'put ''b250cm9sLXN1Y2Nlc3MiXV1dLFQ3ZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sRDdlPVsiY2xyS2V5Rm9jdXMiLCIiXTtmdW5j''@;'; put 'put ''dGlvbiBQN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gRjdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gSDdlKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gTjdlKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxw''@;'; put 'put ''ZXIiXSl9ZnVuY3Rpb24gVjdlKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEI3ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgajdlPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJJbnB1dCIsIiJdXSxbWyJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sejdlPVsibGFiZWwiLCJbY2xySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rp''@;'; put 'put ''b24gVTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGgiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtUcigiYXJpYS1sYWJlbCIsYS5kYXkpLENlKDEpLGdyKCIgIixhLm5hcnJvdywiICIpfX1mdW5jdGlvbiBaN2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsNykscXQo''@;'; put 'put ''MSwiY2xyLWRheSIsOCkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gWTdlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDUpLFFlKDEsWjdlLDIsMSwidGQiLDYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtD''@;'; put 'put ''ZSgxKSxSZSgibmdGb3JPZiIsYSl9fWZ1bmN0aW9uIFc3ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuY2hhbmdlTW9udGgoZikpfSksTmUoMSkseWUoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoKTtkcigiaXMtc2VsZWN0ZWQiLGQ9PT1oLmNhbGVuZGFyTW9udGhJbmRleCksVHIoInRhYmluZGV4IixoLmdldFRhYkluZGV4KGQpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBHN2UoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jaGFuZ2VZZWFyKGYpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtkcigiaXMtc2Vs''@;'; put 'put ''ZWN0ZWQiLGE9PT1kLmNhbGVuZGFyWWVhciksVHIoInRhYmluZGV4IixkLmdldFRhYkluZGV4KGEpKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiAkN2UoYyxsKXsxJmMmJnF0KDAsImNsci1tb250aHBpY2tlciIpfWZ1bmN0aW9uIHE3ZShjLGwpezEmYyYmcXQoMCwiY2xyLXllYXJw''@;'; put 'put ''aWNrZXIiKX1mdW5jdGlvbiBLN2UoYyxsKXsxJmMmJnF0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBYN2U9WyJhY3Rpb25CdXR0b24iXTtmdW5jdGlvbiBKN2UoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gUTdlKGMsbCl7MSZjJiYobWUoMCwiYnV0dG9uIiw4LDkpLHF0KDIs''@;'; put 'put ''ImNkcy1pY29uIiwxMCkseWUoKSksMiZjJiZSZSgiZGlzYWJsZWQiLFZlKCkuaXNJbnB1dERhdGVEaXNhYmxlZCl9ZnVuY3Rpb24gZTllKGMsbCl7MSZjJiZxdCgwLCJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiLDExKX1mdW5jdGlvbiB0OWUoYyxsKXsxJmMmJnF0KDAsImNkcy1pY29u''@;'; put 'put ''IiwxMil9ZnVuY3Rpb24gbjllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTMpfWZ1bmN0aW9uIHI5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGk5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlv''@;'; put 'put ''biBvOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHM5ZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyRGF0ZSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0s''@;'; put 'put ''YTllPVsibGFiZWwiLCJbY2xyRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBsOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9Y29uc3QgYzllPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJl''@;'; put 'put ''bCJdXV0sdTllPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gZDllKGMsbCl7MSZjJiZxdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGg5ZShjLGwpezEmYyYma3IoMCwyLFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIGY5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDUp''@;'; put 'put ''fWZ1bmN0aW9uIHA5ZShjLGwpezEmYyYmcXQoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGc5ZShjLGwpezEmYyYma3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBtOWUoYyxsKXsxJmMmJmtyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IHY5ZT1bW1si''@;'; put 'put ''bGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLF85ZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJvbC1oZWxwZXIiLCJj''@;'; put 'put ''bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBiOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24geTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gdzllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu''@;'; put 'put ''Y3Rpb24gQzllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gUzllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIE05ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg''@;'; put 'put ''eDllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJTZWxlY3QiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEU5ZT1bImxhYmVsIiwiW2NsclNlbGVjdF0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJj''@;'; put 'put ''bHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBrOWUoYyxsKXsxJmMmJnF0KDAsImxhYmVsIil9ZnVuY3Rpb24gQTllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gVDllKGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsNil9ZnVu''@;'; put 'put ''Y3Rpb24gRDllKGMsbCl7MSZjJiZrcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSTllKGMsbCl7MSZjJiZrcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIEw5ZShjLGwpezEmYyYma3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qg''@;'; put 'put ''UjllPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sTzllPVsibGFiZWwiLCJbY2xyVGV4dGFyZWFdIiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl0sUDllPVsiYW5jaG9yIl07ZnVuY3Rpb24gRjllKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIsImJ1dHRvbiIsNikscXQoMywiY2RzLWljb24iLDcpLHllKCkoKSxrcig0KSx5ZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9VmUoKTtSZSgiaWQiLGEucG9wb3ZlcklkKSxUcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLENlKDMpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBIOWU9WyJp''@;'; put 'put ''bnB1dF9sb3ciXSxOOWU9WyJpbnB1dCJdLFY5ZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIEI5ZShjLGwpezEmYyYma3IoMCl9Y29uc3QgajllPVsicmVzaXplVHJhY2tlciJdLHo5ZT1bImNvbHVtbkhhbmRsZSJdO2Z1bmN0aW9uIFU5ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gWjll''@;'; put 'put ''KGMsbCl7MSZjJiZxdCgwLCJjZHMtaWNvbiIsMTApLDImYyYmVHIoImRpcmVjdGlvbiIsVmUoMikuc29ydERpcmVjdGlvbil9ZnVuY3Rpb24gWTllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0''@;'; put 'put ''KFZlKCkuc29ydCgpKX0pLFFlKDEsVTllLDEsMCwibmctY29udGFpbmVyIiw4KSxRZSgyLFo5ZSwxLDEsImNkcy1pY29uIiw5KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9JGkoNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLENlKDEpLFJlKCJuZ0lmIixhLnNvcnREaXJl''@;'; put 'put ''Y3Rpb24pfX1mdW5jdGlvbiBXOWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsYS5maWx0ZXJTdHJpbmdQbGFjZWhvbGRlcikoImNsckRnU3RyaW5nRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEc5ZShjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1WbigpO21lKDAsImNsci1kZy1udW1lcmljLWZpbHRlciIsMTIpLHh0KCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmlsdGVyVmFsdWU9aCl9KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO1JlKCJjbHJGaWx0ZXJNYXhQbGFj''@;'; put 'put ''ZWhvbGRlciIsYS5maWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1''@;'; put 'put ''bmN0aW9uICQ5ZShjLGwpezEmYyYma3IoMCwxKX1mdW5jdGlvbiBxOWUoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIEs5ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxRZSgxLHE5ZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkseWUoKSksMiZjKXtWZSgpO2NvbnN0IGE9JGkoNik7Q2Uo''@;'; put 'put ''MSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBYOWUoYyxsKXsxJmMmJnF0KDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9Y29uc3QgSjllPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1d''@;'; put 'put ''LCIqIl0sUTllPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBldmUoYyxsKXsxJmMmJnF0KDAsImRpdiIsNCl9ZnVuY3Rpb24gdHZlKGMsbCl7MSZjJiZrcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdy''@;'; put 'put ''aWQiXSl9ZnVuY3Rpb24gbnZlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiYnV0dG9uIiwxKSxxdCgyLCJjZHMtaWNvbiIsMikseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxUcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBydmU9WyJjZWxs''@;'; put 'put ''UG9ydGFsIl07ZnVuY3Rpb24gaXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBvdmU9WyJyb3dQb3J0YWwiXTtmdW5jdGlvbiBzdmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGF2ZT1bImRldGFpbEJ1dHRvbiJdLGx2ZT1bInN0aWNreUNlbGxzIl0sY3ZlPVsic2Nyb2xsYWJsZUNlbGxzIl0sdXZl''@;'; put 'put ''PVsiY2FsY3VsYXRlZENlbGxzIl07ZnVuY3Rpb24gZHZlKGMsbCl7fWZ1bmN0aW9uIGh2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxkdmUsMCwwLCJuZy10ZW1wbGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLGQ9JGkoNik7''@;'; put 'put ''UmUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksQ2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiBmdmUoYyxsKXt9ZnVuY3Rpb24gcHZlKGMsbCl7MSZjJiZRZSgwLGZ2ZSwwLDAsIm5nLXRlbXBsYXRlIiw4KSwyJmMmJihWZSgyKSxS''@;'; put 'put ''ZSgibmdUZW1wbGF0ZU91dGxldCIsJGkoNikpKX1mdW5jdGlvbiBndmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24o''@;'; put 'put ''aCl7QnQoYSk7Y29uc3QgZj1WZSgpO3JldHVybiBqdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxRZSgxLGh2ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsMSksUWUoMixwdmUsMSwxLG51bGwsMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gbXZlKGMsbCl7fWZ1bmN0aW9uIHZ2ZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNyksUWUoMSxtdmUsMCwwLCJuZy10ZW1w''@;'; put 'put ''bGF0ZSIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCksZD0kaSg2KTtSZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIF92ZShjLGwpe31mdW5jdGlvbiBidmUoYyxsKXsxJmMmJlFl''@;'; put 'put ''KDAsX3ZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKCksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLCRpKDYpKSl9ZnVuY3Rpb24geXZlKGMsbCl7MSZjJiZrcigwKX1jb25zdCBFSj1mdW5jdGlvbihjKXtyZXR1cm57ImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiOmN9fTtmdW5jdGlv''@;'; put 'put ''biB3dmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE5KSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS50b2dnbGUoaCkpfSkseWUoKSxtZSgzLCJs''@;'; put 'put ''YWJlbCIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLG1lKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoNyxFSiwhYS5jbHJEZ1NlbGVjdGFi''@;'; put 'put ''bGUpKSxDZSgyKSxSZSgibmdNb2RlbCIsYS5zZWxlY3RlZCkoImlkIixhLmNoZWNrYm94SWQpKCJkaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxUcigiYXJpYS1kaXNhYmxlZCIsIWEuY2xyRGdTZWxlY3RhYmxlfHxudWxsKSxDZSgxKSxSZSgiZm9yIixhLmNoZWNrYm94SWQp''@;'; put 'put ''LENlKDIpLG9yKGEuY2xyRGdSb3dBcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIEN2ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTkpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDIzKSx4dCgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWgpfSkseWUoKSxtZSgzLCJsYWJlbCIsMjQpKDQsInNwYW4iLDIyKSxOZSg1KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgibmdDbGFzcyIsSjIoMTAsRUos''@;'; put 'put ''IWEuY2xyRGdTZWxlY3RhYmxlKSksQ2UoMiksUmUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlKSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmds''@;'; put 'put ''ZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLFRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLENlKDEpLFJlKCJmb3IiLGEucmFkaW9JZCksQ2UoMiksb3IoYS5jbHJEZ1Jvd0FyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdz''@;'; put 'put ''LmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gU3ZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwyNSksa3IoMSwyKSx5ZSgpKX1mdW5jdGlvbiBNdmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl''@;'; put 'put ''KDQpLnRvZ2dsZUV4cGFuZCgpKX0pLHF0KDEsImNkcy1pY29uIiwzMCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoNCk7VHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJpYS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5j''@;'; put 'put ''bHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSxDZSgxKSxUcigiZGlyZWN0aW9uIixhLmV4cGFuZC5leHBhbmRlZD8iZG93biI6InJpZ2h0IikoInRpdGxlIixhLmV4cGFuZC5leHBhbmRlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5jb2xsYXBzZTph''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5leHBhbmQpfX1mdW5jdGlvbiB4dmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItc3Bpbm5lciIsMzEpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gRXZlKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoQnIoMCksUWUoMSxNdmUsMiw1LCJidXR0b24iLDI3KSxRZSgyLHh2ZSwyLDEsImNsci1zcGlubmVyIiwyOCksVXIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5leHBhbmQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGEuZXhwYW5kLmxvYWRp''@;'; put 'put ''bmcpfX1mdW5jdGlvbiBrdmUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDI2KSxRZSgxLEV2ZSwzLDIsIm5nLWNvbnRhaW5lciIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gQXZlKGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMikoMSwiYnV0dG9uIiwzMywzNCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoMiksZj1WZSgyKTtyZXR1cm4ganQoZi5kZXRhaWxTZXJ2aWNlLnRvZ2dsZShmLml0ZW0saCkpfSkscXQoMywiY2RzLWljb24iLDM1KSx5''@;'; put 'put ''ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGRyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFRyKCJhcmlhLWxhYmVsIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0Rl''@;'; put 'put ''dGFpbE9wZW5MYWJlbCkoImFyaWEtZXhwYW5kZWQiLGEuZGV0YWlsU2VydmljZS5pc09wZW4pKCJhcmlhLWNvbnRyb2xzIixhLmRldGFpbFNlcnZpY2UuaWQpLENlKDIpLFRyKCJkaXJlY3Rpb24iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT8ibGVmdCI6InJpZ2h0IikoInRp''@;'; put 'put ''dGxlIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/YS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2U6YS5jb21tb25TdHJpbmdzLmtleXMub3Blbil9fWZ1bmN0aW9uIFR2ZShjLGwpe31mdW5jdGlvbiBEdmUoYyxsKXsxJmMmJlFlKDAsVHZlLDAsMCwibmctdGVtcGxhdGUiLDgp''@;'; put 'put ''LDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWZ1bmN0aW9uIEl2ZShjLGwpe31mdW5jdGlvbiBMdmUoYyxsKXsxJmMmJlFlKDAsSXZlLDAsMCwibmctdGVtcGxhdGUiLDgpLDImYyYmKFZlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IiwkaSg0KSkpfWNvbnN0IFJ2''@;'; put 'put ''ZT1mdW5jdGlvbihjKXtyZXR1cm57ImlzLXJlcGxhY2VkIjpjfX07ZnVuY3Rpb24gT3ZlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSgxLCJkaXYiLDEwKSxCcigyLG51bGwsMTEpLFFlKDQsd3ZlLDYsOSwiZGl2IiwxMiksUWUoNSxDdmUsNiwxMiwiZGl2IiwxMiksUWUoNixTdmUsMiww''@;'; put 'put ''LCJkaXYiLDEzKSxRZSg3LGt2ZSwyLDEsImRpdiIsMTQpLFFlKDgsQXZlLDQsNywiZGl2IiwxNSksVXIoKSx5ZSgpLG1lKDksImRpdiIsMTYpKDEwLCJkaXYiLDE3KSxrcigxMSwxKSxqYSgxMixudWxsLDE4KSx5ZSgpLFFlKDE0LER2ZSwxLDEsbnVsbCwyKSxRZSgxNSxMdmUsMSwxLG51bGws''@;'; put 'put ''MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLFJlKCJpZCIsYS5pZCksQ2UoNCksUmUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9U''@;'; put 'put ''WVBFLk11bHRpKSxDZSgxKSxSZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxDZSgxKSxSZSgibmdJZiIsYS5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLENlKDEpLFJlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFi''@;'; put 'put ''bGUuaGFzRXhwYW5kYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSxDZSgxKSxSZSgibmdDbGFzcyIsSjIoMTEsUnZlLGEucmVwbGFjZWQmJmEuZXhwYW5kZWQpKSxDZSg1KSxSZSgibmdJZiIsYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLENl''@;'; put 'put ''KDEpLFJlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBQdmU9W1tbImNsci1kZy1yb3ctZGV0YWlsIl1dLFtbImNsci1kZy1jZWxsIl1dLFtbImNsci1kZy1hY3Rpb24tb3ZlcmZsb3ciXV1dLEZ2ZT1bImNsci1kZy1yb3ctZGV0YWlsIiwiY2xyLWRnLWNl''@;'; put 'put ''bGwiLCJjbHItZGctYWN0aW9uLW92ZXJmbG93Il0sSHZlPVsiZGF0YWdyaWRUYWJsZSJdLE52ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sVnZlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxCdmU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxqdmU9WyJkaXNwbGF5ZWRSb3dz''@;'; put 'put ''Il0senZlPVsiY2FsY3VsYXRpb25Sb3dzIl07ZnVuY3Rpb24gVXZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkseHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3Rl''@;'; put 'put ''ZCxqdChoLnByZXZlbnREZWZhdWx0KCkpfSksbWUoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWxsU2VsZWN0ZWQ9aCl9KSx5ZSgpLG1lKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjgpLE5lKDUp''@;'; put 'put ''LHllKCkoKSgpLHF0KDYsImRpdiIsMjkpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoImlkIixhLnNlbGVjdEFsbElkKSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksQ2UoMSksUmUoImZv''@;'; put 'put ''ciIsYS5zZWxlY3RBbGxJZCksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKX19ZnVuY3Rpb24gWnZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZVNlbGVjdGlv''@;'; put 'put ''bkFyaWFMYWJlbCl9ZnVuY3Rpb24gWXZlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMSkscXQoMSwiZGl2IiwyOSkseWUoKSksMiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfWZ1bmN0aW9uIFd2ZShjLGwpezEmYyYmKG1lKDAsImRpdiIs''@;'; put 'put ''MzIpLHF0KDEsImRpdiIsMjkpLHllKCkpLDImYyYmVHIoImFyaWEtbGFiZWwiLFZlKCkuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9ZnVuY3Rpb24gR3ZlKGMsbCl7MSZjJiZxdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiAkdmUoYyxsKXsxJmMmJihtZSgwLCJkaXYi''@;'; put 'put ''LDMzKSgxLCJjbHItc3Bpbm5lciIsMzQpLE5lKDIsIkxvYWRpbmciKSx5ZSgpKCkpfWNvbnN0IHF2ZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRhaWwiLCIiXSxbImNsci1kZy1kZXRh''@;'; put 'put ''aWwiXV1dLEt2ZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdLEp2ZT1bImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gUXZlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwiaDIiKSxO''@;'; put 'put ''ZSgyKSx5ZSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1ucyl9fWZ1bmN0aW9uIGVfZShjLGwpe31mdW5jdGlvbiB0X2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13''@;'; put 'put ''cmFwcGVyIikoMiwiaW5wdXQiLDE0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnRvZ2dsZUNvbHVtblN0YXRlKF8sIWgpKX0pLHllKCksbWUoMywibGFiZWwiKSxRZSg0LGVfZSwwLDAsIm5nLXRlbXBsYXRl''@;'; put 'put ''IiwxNSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMik7Q2UoMiksUmUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNpYmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLENlKDIpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxl''@;'; put 'put ''VGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBuX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDE2KSx4dCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmFsbENvbHVtbnNTZWxlY3RlZCgp''@;'; put 'put ''KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGdyKCIgIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKX19ZnVuY3Rpb24gcl9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyKSgxLCJkaXYiLDMpKDIsImRpdiIsNCw1KSxOZSg0KSx5ZSgpLFFl''@;'; put 'put ''KDUsUXZlLDMsMSwibmctY29udGFpbmVyIiw2KSxrcig2KSxtZSg3LCJidXR0b24iLDcpLHF0KDgsImNkcy1pY29uIiw4KSxtZSg5LCJzcGFuIiw5KSxOZSgxMCkseWUoKSgpKCksbWUoMTEsInVsIiwxMCksUWUoMTIsdF9lLDUsMywibGkiLDExKSx5ZSgpLG1lKDEzLCJkaXYiLDEyKSxrcigx''@;'; put 'put ''NCwxKSxRZSgxNSxuX2UsMiwxLCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJpZCIsYS5wb3BvdmVySWQpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiks''@;'; put 'put ''Q2UoNCksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuY3VzdG9tVG9nZ2xlVGl0bGUpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksQ2UoMSksVHIoInRpdGxlIixhLmNvbW1vblN0''@;'; put 'put ''cmluZ3Mua2V5cy5jbG9zZSksQ2UoMiksb3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmhpZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbiksQ2UoMyksUmUoIm5nSWYiLCFhLmN1c3RvbVRvZ2dsZUJ1dHRvbil9''@;'; put 'put ''fWNvbnN0IGlfZT1bW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sW1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dXSxvX2U9WyJjbHItZGctY29sdW1uLXRvZ2dsZS10aXRsZSIsImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdO2Z1bmN0aW9uIGxfZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKEJyKDApLG1lKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLHF0KDMsImlucHV0IiwzKSxtZSg0LCJsYWJlbCIpLE5lKDUpLHllKCksbWUoNiwic3BhbiIsNCksTmUoNykseWUoKSgpKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNSksb3IoYS5zZWxl''@;'; put 'put ''Y3Rpb24uY3VycmVudC5sZW5ndGgpLENlKDIpLG9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGNfZShjLGwpezEmYyYmcXQoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiB1X2UoYyxsKXtpZigxJmMmJihCcigwKSxrcigxLDEpLFFlKDIs''@;'; put 'put ''Y19lLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLG1lKDMsImRpdiIsNSksa3IoNCwyKSx5ZSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyYmIWEudG9nZ2xlKX19Y29uc3QgZF9lPVtbWyJjbHItZGctcGFnaW5hdGlv''@;'; put 'put ''biJdXSxbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSwiKiJdLGhfZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLCIqIl07ZnVuY3Rpb24gZl9lKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQ7UmUoIm5nVmFsdWUiLGEpLENlKDEpLG9yKGEpfX1jb25zdCBwX2U9WyJjdXJyZW50UGFnZUlucHV0Il07ZnVuY3Rpb24gZ19lKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw0KSxrcigxLDEpLHllKCkpfWZ1bmN0aW9uIG1fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImlu''@;'; put 'put ''cHV0IiwxNywxOCkseHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnVwZGF0ZUN1cnJlbnRQYWdlKGgpKX0pLHllKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPVZlKDMpO1JlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksVHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gdl9lKGMsbCl7aWYoMSZjJiYobWUoMCwi''@;'; put 'put ''c3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxvcihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIF9fZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNSkoMSwiYnV0dG9uIiw2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEp''@;'; put 'put ''LGp0KFZlKDIpLnBhZ2UuY3VycmVudD0xKX0pLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkscXQoNCwiY2RzLWljb24iLDgpLHllKCksbWUoNSwiYnV0dG9uIiw5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5w''@;'; put 'put ''YWdlLmN1cnJlbnQtMSl9KSxtZSg2LCJzcGFuIiw3KSxOZSg3KSx5ZSgpLHF0KDgsImNkcy1pY29uIiwxMCkseWUoKSxRZSg5LG1fZSwyLDMsImlucHV0IiwxMSksUWUoMTAsdl9lLDIsMSwibmctdGVtcGxhdGUiLG51bGwsMTIsRWMpLE5lKDEyLCIgXHhhMC9ceGEwIiksbWUoMTMsInNwYW4i''@;'; put 'put ''KSxOZSgxNCkseWUoKSxtZSgxNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksbWUoMTYsInNwYW4iLDcpLE5lKDE3KSx5ZSgpLHF0KDE4LCJjZHMtaWNvbiIs''@;'; put 'put ''MTQpLHllKCksbWUoMTksImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxtZSgyMCwic3BhbiIsNyksTmUoMjEpLHllKCkscXQoMjIsImNkcy1pY29uIiwxNikseWUoKSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT0kaSgxMSksZD1WZSgyKTtDZSgxKSxSZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZmlyc3RQYWdlKSxDZSgyKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLENlKDIp''@;'; put 'put ''LFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksQ2UoMiksUmUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFn''@;'; put 'put ''ZUlucHV0KSgibmdJZkVsc2UiLGEpLENlKDQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxDZSgxKSxvcihkLnBhZ2UubGFzdCksQ2UoMSksUmUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLFRyKCJhcmlhLWxhYmVsIixk''@;'; put 'put ''LmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksQ2UoMiksb3IoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLENlKDIpLFJlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2Up''@;'; put 'put ''LENlKDIpLG9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYl9lKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxnX2UsMiwwLCJkaXYiLDEpLG1lKDIsImRpdiIsMiksa3IoMykseWUoKSxRZSg0LF9fZSwyMywxNiwiZGl2IiwzKSxVcigpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLENlKDMpLFJlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geV9lKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2IiwxOSksTmUoMikseWUoKSxtZSgzLCJkaXYiLDUpKDQsImJ1''@;'; put 'put ''dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxtZSg1LCJzcGFuIiw3KSxOZSg2KSx5ZSgpLHF0KDcsImNkcy1pY29uIiwxMCkseWUoKSxtZSg4LCJzcGFuIiksTmUoOSks''@;'; put 'put ''eWUoKSxtZSgxMCwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxtZSgxMSwic3BhbiIsNyksTmUoMTIpLHllKCkscXQoMTMsImNkcy1pY29uIiwxNCkseWUoKSgp''@;'; put 'put ''LFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksYjAoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxDZSgyKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxUcigiYXJpYS1sYWJlbCIs''@;'; put 'put ''YS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLENlKDMpLG9yKGEucGFnZS5jdXJyZW50KSxDZSgxKSxSZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksVHIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxDZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IHdfZT1bIioiLFtbImNsci1kZy1wYWdlLXNpemUiXV1dLENfZT1bIioiLCJjbHItZGctcGFnZS1zaXplIl07ZnVuY3Rpb24gU19lKGMsbCl7MSZj''@;'; put 'put ''JiZxdCgwLCJjZHMtaWNvbiIsNyksMiZjJiZUcigiZGlyZWN0aW9uIixWZSgpLmNhcmV0RGlyZWN0aW9uKX1mdW5jdGlvbiBNX2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5z''@;'; put 'put ''dGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24geF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5KSxrcigxLDIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0h1KCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLFRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFi''@;'; put 'put ''ZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBFX2U9W1tbImNsci1zdGFjay1sYWJlbCJdXSwiKiIsW1siY2xyLXN0YWNrLWJsb2NrIl1dXSxrX2U9WyJjbHItc3RhY2stbGFiZWwiLCIqIiwiY2xyLXN0YWNrLWJsb2NrIl0sQV9lPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIqIl0s''@;'; put 'put ''VF9lPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBIX2UoYyxsKXsxJmMmJmphKDApfWZ1bmN0aW9uIE5fZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsSF9lLDEsMCwibmctY29udGFpbmVyIiwyKSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgyKTtDZSgx''@;'; put 'put ''KSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnRlbXBsYXRlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGQuZ2V0Q29udGV4dChhKSl9fWZ1bmN0aW9uIFZfZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsTl9lLDIsMiwibmctY29udGFpbmVy''@;'; put 'put ''IiwxKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3QgQl9lPVsiY29udGVudENvbnRhaW5lciJdO2Z1bmN0aW9uIGpfZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsImJ1dHRvbiIsOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4cGFuZFNlcnZpY2UudG9nZ2xlKCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxxdCgxLCJjZHMtaWNv''@;'; put 'put ''biIsMTApLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksVHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gel9lKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMSkscXQoMSwic3BhbiIsMTIpLHllKCkpfWZ1bmN0aW9u''@;'; put 'put ''IFVfZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCkseHQoImNoYW5nZSIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSko''@;'; put 'put ''ImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSx5ZSgpLHF0KDIsImxhYmVsIiwxNSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxYMigiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxSZSgiY2hlY2tlZCIsYS5fbW9kZWwu''@;'; put 'put ''c2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuSU5ERVRFUk1JTkFURSksQ2UoMSksWDIoImZvciIsIiIsYS5ub2RlSWQsIi1jaGVjayIpfX1mdW5jdGlvbiBaX2UoYyxsKXsxJmMmJiht''@;'; put 'put ''ZSgwLCJzcGFuIiksTmUoMSwiIHNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gWV9lKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIiB1bnNlbGVjdGVkIikseWUoKSl9ZnVuY3Rpb24gV19lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNiksUWUoMSxaX2UsMiwwLCJzcGFuIiwxNyks''@;'; put 'put ''UWUoMixZX2UsMiwwLCJzcGFuIiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSxDZSgxKSxSZSgibmdJZiIsIWEuYXJpYVNlbGVjdGVkKX19Y29uc3QgR19lPVsiKiIsW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFu''@;'; put 'put ''ZGVkIiwiIl1dXSwkX2U9WyIqIiwiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSJdO2Z1bmN0aW9uIHFfZShjLGwpezEmYyYmcXQoMCwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMSksMiZjJiZSZSgiY2hpbGRyZW4iLFZlKCkuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi5yb290''@;'; put 'put ''KX1mdW5jdGlvbiBLX2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2UoKSl9KSxxdCgxLCJjZHMtaWNvbiIsNSkseWUoKX0yJmMmJlRyKCJhcmlhLWxhYmVsIixWZSgyKS5j''@;'; put 'put ''bHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCl9ZnVuY3Rpb24gWF9lKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGtyKDIpLHllKCksUWUoMyxLX2UsMiwxLCJidXR0b24iLDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO2RyKCJhbGVydC1oaWRkZW4iLGEuaGlkZGVuKSgi''@;'; put 'put ''YWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWFwcC1sZXZlbCIsYS5pc0FwcExldmVsKSxSZSgibmdDbGFzcyIsYS5hbGVydENsYXNzKSxDZSgzKSxSZSgibmdJZiIsYS5jbG9zYWJsZSl9fWZ1bmN0aW9uIEpfZShjLGwpezEmYyYmcXQoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMSksMiZjJiZS''@;'; put 'put ''ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLFZlKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFFfZT1bW1siY2xyLWFsZXJ0Il1dXSxlYmU9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiByYmUoYyxsKXsxJmMmJmtyKDApfWNvbnN0IGliZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5j''@;'; put 'put ''dGlvbiBvYmUoYyxsKXtpZigxJmMmJihtZSgwLCJzZWN0aW9uIiwxKSxrcigxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiYWN0aXZlIixhLmFjdGl2ZSksUmUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxUcigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFM''@;'; put 'put ''YWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IHNiZT1bInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIl07ZnVuY3Rpb24gYWJlKGMsbCl7aWYoMSZjJiYoQnIoMCksbWUoMSwibGkiLDQpLGphKDIsNSkseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGlj''@;'; put 'put ''aXQ7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5jdGlvbiBsYmUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLGFiZSwzLDEsIm5nLWNvbnRhaW5lciIsMiksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUo''@;'; put 'put ''KTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmIWEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIGNiZShjLGwpezEmYyYmamEoMCw1KSwyJmMmJlJlKCJuZ1RlbXBsYXRlT3V0bGV0IixWZSgpLiRpbXBsaWNpdC50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9ZnVuY3Rp''@;'; put 'put ''b24gdWJlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxjYmUsMSwxLCJuZy1jb250YWluZXIiLDEzKSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gZGJlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMikseHQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLGZmKSgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEp''@;'; put 'put ''LFZlKCk7Y29uc3QgZj0kaSg0KTtyZXR1cm4ganQoVmUoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxmZikoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLFFlKDEsdWJlLDIsMSwibmctY29udGFpbmVyIiwx''@;'; put 'put ''KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1bmN0aW9uIGhiZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImRpdiIsNikoMiwibGkiLDcpKDMsImJ1dHRvbiIsOCw5KSx4dCgibW91c2Vk''@;'; put 'put ''b3duIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xl''@;'; put 'put ''T3ZlcmZsb3dPbkNsaWNrKCkpfSkscXQoNSwiY2RzLWljb24iLDEwKSx5ZSgpKCksUWUoNixkYmUsMiwxLCJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiLDExKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksZHIoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxDZSgy''@;'; put 'put ''KSxkcigiYWN0aXZlIixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cpKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3BlbiksVHIoInRhYmluZGV4IixhLmFjdGl2ZVRhYkluT3ZlcmZsb3cmJiFhLnRvZ2dsZVNlcnZpY2Uub3Blbj8wOi0xKSgidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vcmUp''@;'; put 'put ''LENlKDIpLFRyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksQ2UoMSksUmUoIm5nSWYiLGEudG9nZ2xlU2VydmljZS5vcGVuKX19ZnVuY3Rpb24gZmJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEJ0KGEpLGp0KFZlKCkudG9nZ2xlQnlCdXR0b24oKSl9KSxxdCgxLCJjZHMtaWNvbiIsNCkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtkcigib24tY29sbGFwc2UiLGEuY29sbGFwc2VkKSxUcigiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLmNv''@;'; put 'put ''bW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksQ2UoMSksVHIoImRpcmVjdGlvbiIsYS5jb2xsYXBzZWQ/InJpZ2h0IjoibGVmdCIpKCJ0aXRsZSIsYS5jb2xsYXBzZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kOmEuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlKX19''@;'; put 'put ''ZnVuY3Rpb24gcGJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29sbGFwc2VkPSExKX0pLHllKCl9MiZjJiZUcigiYXJpYS1sYWJlbCIsVmUoKS5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''dmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IHZiZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLF9iZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0sYmJlPVsiW2NsclZlcnRpY2FsTmF2SWNvbl0iLCIqIl07ZnVuY3Rpb24geWJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu''@;'; put 'put ''KCk7bWUoMCwiYnV0dG9uIiwxMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5jbG9zZSgpKX0pLHF0KDEsImNkcy1pY29uIiwxMikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7VHIoImFyaWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gd2JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLHh0KCJAZmFkZURvd24uZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZmFkZURvbmUoaCkpfSksbWUoMiwi''@;'; put 'put ''ZGl2IiwzKSxOZSgzKSx5ZSgpLG1lKDQsImRpdiIsNCksa3IoNSksbWUoNiwiZGl2Iiw1KSg3LCJkaXYiLDYpKDgsImRpdiIsNyksa3IoOSwxKSx5ZSgpLFFlKDEwLHliZSwyLDEsImJ1dHRvbiIsOCkseWUoKSxtZSgxMSwiZGl2Iiw5KSxrcigxMiwyKSx5ZSgpLGtyKDEzLDMpLHllKCkoKSxt''@;'; put 'put ''ZSgxNCwiZGl2IiwzKSxOZSgxNSkseWUoKSgpLG1lKDE2LCJkaXYiLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpO3JldHVybiBqdChoLnN0YXRpY0JhY2tkcm9wfHxoLmNsb3NlKCkpfSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGRyKCJt''@;'; put 'put ''b2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFJlKCJAZmFkZURvd24iLGEuc2tpcEFuaW1hdGlvbiksVHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSxD''@;'; put 'put ''ZSgyKSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoNSkseGMoImlkIixhLm1vZGFsSWQpLENlKDIpLFJlKCJuZ0lmIixhLmNsb3NhYmxlKSxDZSg1KSxvcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLENlKDEpLFJlKCJAZmFkZSIs''@;'; put 'put ''dm9pZCAwKX19Y29uc3QgQ2JlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sU2JlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1vZGFs''@;'; put 'put ''LWZvb3RlciJdO2xldCBrYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWljb24iXV19KSxjfSkoKSxxcz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RzLWljb24iXV19KSxjfSkoKSxzYT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIHZie312YXIgVXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNV''@;'; put 'put ''Q0NFU1MiLGNbYy5FUlJPUj0zXT0iRVJST1IiLGN9KFV1fHx7fSk7bGV0IFp1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VdS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRl''@;'; put 'put ''fXNldCBsb2FkaW5nU3RhdGUoYSl7ITA9PT1hP2E9VXUuTE9BRElORzphfHwoYT1VdS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0''@;'; put 'put ''cm95KCl7dGhpcy5sb2FkaW5nU3RhdGU9VXUuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmIsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGlu''@;'; put 'put ''Z1N0YXRlOlsiY2xyTG9hZGluZyIsImxvYWRpbmdTdGF0ZSJdfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGFibGU9MCx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgYmV9Z2V0IGxvYWRp''@;'; put 'put ''bmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0''@;'; put 'put ''aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7''@;'; put 'put ''dGhpcy5sb2FkaW5nPWE9PT1VdS5MT0FESU5HfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHYmU9MDtmdW5jdGlvbiBEYygpe3JldHVybiJjbHItaWQt''@;'; put 'put ''IitHYmUrK31sZXQga0o9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iXSxbImNsci1zdGVwLWRlc2NyaXB0aW9u''@;'; put 'put ''Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j''@;'; put 'put ''YXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCk7dmFyIERmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShEZnx8e30pO2NvbnN0IGEyPSIwLjJzIGVhc2UtaW4tb3V0Iiwk''@;'; put 'put ''YmU9W2ExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hjKCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSldKV0seEY9KGExKCJza2lwSW5pdGlhbFJlbmRlciIsW2hj''@;'; put 'put ''KCI6ZW50ZXIiLFtdKV0pLGExKCJ0b2dnbGUiLFtoYygidm9pZCA9PiAqIixbX3Moe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHJ1KGEyLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoIiogPT4gdm9pZCIsW19zKHtkaXNwbGF5OiJibG9jayJ9KSxydShhMixfcyh7aGVpZ2h0OjAsZGlzcGxh''@;'; put 'put ''eToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFwc2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQ''@;'; put 'put ''cmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1''@;'; put 'put ''bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQYWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJD''@;'; put 'put ''dXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1zIixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVu''@;'; put 'put ''dEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9z''@;'; put 'put ''dENsb3NlOiJTaWducG9zdCBDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIsZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVy''@;'; put 'put ''IixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9uYWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoiVG9nZ2xlIHtDT0xVTU59IGZpbHRlciIsZGF0YWdyaWRG''@;'; put 'put ''aWx0ZXJEaWFsb2dBcmlhTGFiZWw6IkZpbHRlciBkaWFsb2ciLGNvbHVtblNlcGFyYXRvckFyaWFMYWJlbDoiQ29sdW1uIHJlc2l6ZSBoYW5kbGUiLGNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uOiJVc2UgbGVmdCBvciByaWdodCBrZXkgdG8gcmVzaXplIHRoZSBjb2x1bW4iLGFsZXJ0Q2xv''@;'; put 'put ''c2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIGFsZXJ0IixhbGVydE5leHRBbGVydEFyaWFMYWJlbDoiTmV4dCBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yge0NPVU5UfSIsYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsOiJQcmV2aW91cyBhbGVydCBtZXNzYWdlLCB7Q1VSUkVOVH0gb2Yg''@;'; put 'put ''e0NPVU5UfSIsZGF0ZXBpY2tlckRpYWxvZ0xhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZToiVG9nZ2xlIGRhdGVwaWNrZXIiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFu''@;'; put 'put ''Z2UgZGF0ZSwge1NFTEVDVEVEX0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToi''@;'; put 'put ''UHJldmlvdXMgZGVjYWRlIixkYXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJf''@;'; put 'put ''TU9OVEh9IixkYXRlcGlja2VyU2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQu''@;'; put 'put ''IixyZXNwb25zaXZlTmF2VG9nZ2xlT3BlbjoiTmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6Ik5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dDbG9z''@;'; put 'put ''ZToiTmF2aWdhdGlvbiBvdmVyZmxvdyBtZW51Iix2ZXJ0aWNhbE5hdkdyb3VwVG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiBncm91cCIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3Rh''@;'; put 'put ''cnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2VzczoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9w''@;'; put 'put ''dGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJTlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3Blbjoi''@;'; put 'put ''U2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5nIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVS''@;'; put 'put ''b3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdvcmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhp''@;'; put 'put ''cyBidXR0b24iLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IlN0ZXAgbmF2aWdhdGlvbiIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQiLHNl''@;'; put 'put ''bGVjdGVkUm93czoiU2VsZWN0ZWQgcm93cyJ9KTtsZXQgRXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0cmluZ3M9eEZ9Z2V0IGtleXMoKXtyZXR1cm4gdGhpcy5fc3RyaW5nc31sb2NhbGl6ZShhKXt0aGlzLl9zdHJpbmdzPXsuLi50aGlzLl9zdHJpbmdzLC4uLmF9fXBh''@;'; put 'put ''cnNlKGEsZD17fSl7Y29uc3QgaD1PYmplY3Qua2V5cyhkKTtsZXQgZj1hO3JldHVybiBoLmxlbmd0aCYmaC5mb3JFYWNoKF89PntmPWYucmVwbGFjZShgeyR7X319YCxkW19dKX0pLGZ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBy''@;'; put 'put ''b3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO3ZhciBfYj1mdW5jdGlvbihjKXtyZXR1cm4gYy5EZWZhdWx0PSJkZWZhdWx0IixjLk11bHRpPSJtdWx0aSIsY30oX2J8fHt9KTtsZXQgS2JlPTA7Y2xhc3MgWGJle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSl7dGhpcy5pZD1sLHRoaXMuYWNjb3JkaW9uSWQ9YSx0aGlzLnN0YXR1cz1EZi5JbmFjdGl2ZSx0aGlzLmluZGV4PW51bGwsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLm9wZW49ITEsdGhpcy50ZW1wbGF0ZUlkPWAke3RoaXMuaWR9LSR7dGhpcy5hY2NvcmRpb25JZH1gfX1jbGFzcyBBSntj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9X2IuRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PUtiZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7''@;'; put 'put ''dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9wYW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFhiZShsLHRoaXMuYWNjb3JkaW9uQ291bnQp''@;'; put 'put ''LHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PV9iLkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2Fi''@;'; put 'put ''bGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhpcy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQo''@;'; put 'put ''ZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgYmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBBSix0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBUZSh0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBh''@;'; put 'put ''bmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE1lKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCks''@;'; put 'put ''dGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRl''@;'; put 'put ''ZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksX0U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5hY2NvcmRp''@;'; put 'put ''b25TZXJ2aWNlPWQsdGhpcy5pZkV4cGFuZFNlcnZpY2U9aCx0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMucGFuZWxPcGVuQ2hhbmdlPW5ldyBFcix0aGlzLkFjY29yZGlvblN0YXR1cz1EZix0aGlzLmlzQWNjb3JkaW9uPSEwLHRoaXMuX2lkPURjKCl9Z2V0IGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoemMoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2Uu''@;'; put 'put ''YWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0''@;'; put 'put ''aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2Fi''@;'; put 'put ''bGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dn''@;'; put 'put ''bGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8i''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdl''@;'; put 'put ''KGEpe2Eub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChFcyksdHQoYmIpLHR0KFl1KSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxrSiw0KSwyJmEpe2xldCBmO3NpKGY9YWko''@;'; put 'put ''KSkmJihkLmFjY29yZGlvbkRlc2NyaXB0aW9uPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uLXBhbmVsIiwhMCl9LGlucHV0czp7ZGlzYWJsZWQ6WyJjbHJBY2NvcmRpb25QYW5lbERpc2FibGVkIiwiZGlzYWJsZWQiXSxw''@;'; put 'put ''YW5lbE9wZW46WyJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbdGkoW1l1XSksdmFdLG5nQ29udGVudFNlbGVjdG9yczp4SixkZWNsczoyLHZhcnM6Myxj''@;'; put 'put ''b25zdHM6W1s0LCJuZ0lmIl0sWyJhcmlhLWxpdmUiLCJhc3NlcnRpdmUiLCJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIs''@;'; put 'put ''MywiaWQiLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJoZWFkZXJCdXR0b24iLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2xyLWFjY29yZGlvbi1zdGF0dXMiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCIsMSwiY2xyLWFjY29yZGlvbi1hbmdsZSJdLFsxLCJjbHItYWNj''@;'; put 'put ''b3JkaW9uLW51bWJlciJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNsci1hY2NvcmRpb24tZXJyb3ItaWNvbiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWNvbXBsZXRlLWlj''@;'; put 'put ''b24iXSxbInJvbGUiLCJyZWdpb24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsiYXJpYS1saXZlIiwiYXNzZXJ0aXZlIiwxLCJjbHItc3Itb25seSJdLFsxLCJjbHItYWNjb3JkaW9u''@;'; put 'put ''LWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoTUopLFFlKDAsRzhlLDE5LDE4LCJuZy1jb250YWluZXIiLDApLGJhKDEsImFzeW5jIikpLDImYSYmUmUoIm5nSWYiLFVsKDEsMSxkLnBhbmVsKSl9LGRl''@;'; put 'put ''cGVuZGVuY2llczpbWmksdWMscXMsdXhdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246JGJlfSxjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFRKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVy''@;'; put 'put ''Vmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2''@;'; put 'put ''aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9fYi5NdWx0aTpfYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShjcCh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRl''@;'; put 'put ''UGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmIpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpm''@;'; put 'put ''dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLF9FLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbImNsckFj''@;'; put 'put ''Y29yZGlvbk11bHRpUGFuZWwiLCJtdWx0aVBhbmVsIl19LGZlYXR1cmVzOlt0aShbYmJdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rp''@;'; put 'put ''b246MH0pLGN9KSgpLERKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLElKPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1hY2NvcmRpb24tdGl0bGUi''@;'; put 'put ''LCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRp''@;'; put 'put ''c2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IGJlfWdldCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUu''@;'; put 'put ''bmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLHc4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9''@;'; put 'put ''Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoeTgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLEVGPSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltlb119KSxjfSko''@;'; put 'put ''KSxMSj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdl''@;'; put 'put ''dCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFVhKSx0dChFRiw4KSx0dChZdSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBh''@;'; put 'put ''bmVsIl1dLGZlYXR1cmVzOltlb119KSxjfSkoKSxSSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoaDgsbzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpLG55ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsUkpdLFJK''@;'; put 'put ''XX0pLGN9KSgpO3ZhciB3bz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi''@;'; put 'put ''LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfSh3b3x8e30pLEc1PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJv''@;'; put 'put ''d1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShHNXx8e30pO2Z1bmN0aW9uIGwyKGMpe3JldHVybiBjPT09d28uQXJyb3dVcHx8Yz09PUc1LkFycm93VXA/d28uQXJyb3dVcDpjPT09d28uQXJyb3dEb3dufHxjPT09''@;'; put 'put ''RzUuQXJyb3dEb3duP3dvLkFycm93RG93bjpjPT09d28uQXJyb3dSaWdodHx8Yz09PUc1LkFycm93UmlnaHQ/d28uQXJyb3dSaWdodDpjPT09d28uQXJyb3dMZWZ0fHxjPT09RzUuQXJyb3dMZWZ0P3dvLkFycm93TGVmdDpjPT09d28uU3BhY2V8fGM9PT1HNS5TcGFjZT93by5TcGFjZTpjPT09''@;'; put 'put ''d28uRXNjYXBlfHxjPT09RzUuRXNjYXBlP3dvLkVzY2FwZTpjfWZ1bmN0aW9uIFRGKGMpe2NvbnN0IGw9bDIoYy5rZXkpOyhsPT09d28uQXJyb3dVcHx8bD09PXdvLkFycm93RG93bnx8bD09PXdvLkFycm93TGVmdHx8bD09PXdvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0''@;'; put 'put ''IEtzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IGJlLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgYmUsdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IGJlfWdldCBvcGVuQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5DaGFu''@;'; put 'put ''Z2UuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3Ro''@;'; put 'put ''aXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1hLHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUo''@;'; put 'put ''KX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe1RGKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlckFsaWduZWRFbWl0KGEpe3RoaXMuX3BvcG92ZXJBbGln''@;'; put 'put ''bmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9''@;'; put 'put ''YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e2Y/''@;'; put 'put ''KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMuaWdub3JlZEV2ZW50PWZ9KSl9''@;'; put 'put ''bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRTY3JvbGxlcj1uMih0aGlzLmRv''@;'; put 'put ''Y3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoSWEodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMuc21hcnRPcGVuU2VydmljZS5v''@;'; put 'put ''cGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9YWRkQ2xpY2tMaXN0ZW5lcigp''@;'; put 'put ''e3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6KHRoaXMuc21hcnRPcGVuU2Vy''@;'; put 'put ''dmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIoKSxk''@;'; put 'put ''ZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhp''@;'; put 'put ''cy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRvblJlZi5uYXRpdmVFbGVtZW50''@;'; put 'put ''LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHkiIT09ZC5wYXJlbnRFbGVtZW50''@;'; put 'put ''LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVyKCksdGhpcy5yZW1vdmVDbGlj''@;'; put 'put ''a0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoS3MpLGFyKExzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCks''@;'; put 'put ''d2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KElmKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3Bv''@;'; put 'put ''dmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEZKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl''@;'; put 'put ''PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgRXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKElhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9''@;'; put 'put ''KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl''@;'; put 'put ''bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSks''@;'; put 'put ''dHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD''@;'; put 'put ''bGljayhmKX0pLDImYSYmZHIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgdnU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ''@;'; put 'put ''Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfSh2dXx8e30pLFBzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFBzfHx7fSksQ2I9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09''@;'; put 'put ''IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oQ2J8fHt9KTtjb25zdCBTcD1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxMZj0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8''@;'; put 'put ''YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gQzgoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdTEoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9SEooYyxsLGEpLGgtPWEuaGVpZ2h0O2JyZWFrO2Nh''@;'; put 'put ''c2UgMTpkKz1ISihjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9TkooYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPU5KKGMsbCxhKX1yZXR1cm57eE9mZnNldDpkLHlPZmZzZXQ6aH19ZnVuY3Rpb24gSEooYyxsLGEpe2xldCBkPTA7c3dpdGNo''@;'; put 'put ''KGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIFBzLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgUHMuU1RBUlQ6YnJlYWs7Y2FzZSBQcy5DRU5URVI6ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2Ug''@;'; put 'put ''UHMuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gTkooYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFBzLlNUQVJUOmJyZWFrO2Nhc2UgUHMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBQcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVu''@;'; put 'put ''dCl7Y2FzZSBQcy5TVEFSVDpicmVhaztjYXNlIFBzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgUHMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBTOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnBsYXRmb3JtSWQ9''@;'; put 'put ''ZCx0aGlzLl9zaG91bGRSZWFsaWduPW5ldyBiZSx0aGlzLnNob3VsZFJlYWxpZ249dGhpcy5fc2hvdWxkUmVhbGlnbi5hc09ic2VydmFibGUoKX1yZWFsaWduKCl7dGhpcy5fc2hvdWxkUmVhbGlnbi5uZXh0KCl9YWxpZ25Db250ZW50KGEpe2lmKCFScyh0aGlzLnBsYXRmb3JtSWQpKXJldHVy''@;'; put 'put ''bnt4T2Zmc2V0OjAseU9mZnNldDowfTt0aGlzLmN1cnJlbnRBbmNob3JDb29yZHM9dGhpcy5ldmVudFNlcnZpY2UuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcz1hLmdldEJvdW5kaW5nQ2xpZW50''@;'; put 'put ''UmVjdCgpLHRoaXMuY29udGVudE9mZnNldHM9dTEodGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7Y29uc3QgZD1mdW5jdGlvbiBpeWUoYyxsKXtjb25zdCBhPVtdLGRfYm90dG9tPWMueU9mZnNldCtsLmhlaWdodCxkX2xl''@;'; put 'put ''ZnQ9Yy54T2Zmc2V0LGRfcmlnaHQ9Yy54T2Zmc2V0K2wud2lkdGg7cmV0dXJuIGMueU9mZnNldD49MHx8YS5wdXNoKENiLlRPUCksZF9sZWZ0Pj0wfHxhLnB1c2goQ2IuTEVGVCksZF9ib3R0b208PSh3aW5kb3cuaW5uZXJIZWlnaHR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRI''@;'; put 'put ''ZWlnaHQpfHxhLnB1c2goQ2IuQk9UVE9NKSxkX3JpZ2h0PD0od2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCl8fGEucHVzaChDYi5SSUdIVCksYX0odGhpcy5jb250ZW50T2Zmc2V0cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSxoPWQu''@;'; put 'put ''cmVkdWNlKChmLF8pPT5mK18sMCk7cmV0dXJuIDE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09dnUuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oaCk6MT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5IT1JJWk9OVEFMP3Ro''@;'; put 'put ''aXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc1R3b1Zpb2xhdGlvbnMoaCk6Mj09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT12dS5I''@;'; put 'put ''T1JJWk9OVEFMJiZ0aGlzLmhhbmRsZUhvcml6b250YWxBeGlzVHdvVmlvbGF0aW9ucyhoKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKFNwKHRoaXMucG9z''@;'; put 'put ''aXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz11MSh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlz''@;'; put 'put ''LmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29y''@;'; put 'put ''ZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9QzgoU3AsTGYsITApO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENv''@;'; put 'put ''b3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUM4KFNwLExmLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXUxKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2Ug''@;'; put 'put ''Mjp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9m''@;'; put 'put ''ZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRz''@;'; put 'put ''PXUxKFNwKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz11MShMZih0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJy''@;'; put 'put ''ZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dTEoTGYodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dp''@;'; put 'put ''dGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9QzgoU3AsTGYsITEpO3RoaXMuY29udGVudE9mZnNldHM9dTEoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOmNhc2UgMTp7Y29uc3QgZD1DOChTcCxMZiwhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz11MShkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShhcihJZiksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRo''@;'; put 'put ''aXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT1fLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPVcsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhp''@;'; put 'put ''cy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IEVyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2Uo''@;'; put 'put ''YSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0''@;'; put 'put ''aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgp''@;'; put 'put ''OnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRl''@;'; put 'put ''bnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sIm9wYWNpdHkiLCIxIil9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh''@;'; put 'put ''PT5hLnVuc3Vic2NyaWJlKCkpfWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVu''@;'; put 'put ''ZGVyZXIuYWRkQ2xhc3MoYSwiY2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVt''@;'; put 'put ''b3ZlQ2xpY2tMaXN0ZW5lckZuPXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9k''@;'; put 'put ''eSxkKX0pLHRoaXMuc2hvdWxkUmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9k''@;'; put 'put ''ZXMuZm9yRWFjaChhPT50aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3KX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVybjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlv''@;'; put 'put ''blNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxl''@;'; put 'put ''ZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KExzKSx0dChhcyksdHQoemEpLHR0KEZvKSx0''@;'; put 'put ''dChTOCksdHQoSWYpLHR0KEtzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNvbnRlbnRBdDpbImNsclBvcG92ZXJDb250ZW50QXQiLCJjb250''@;'; put 'put ''ZW50QXQiXSxvdXRzaWRlQ2xpY2tDbG9zZTpbImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxNYj0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBFcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGQ9Pnt0aGlzLm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChLcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZkcigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSx4Yj0oKCk9PntjbGFzcyBje31y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbXV19KSxjfSkoKTt2YXIgZDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVG''@;'; put 'put ''VD0ibGVmdCIsYy5SSUdIVD0icmlnaHQiLGN9KGQxfHx7fSk7bGV0IEViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChhKXt0aGlzLl9jdXJy''@;'; put 'put ''ZW50PWF9bGlzdGVuVG9BcnJvd0tleXMoYSl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoZDEuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEs''@;'; put 'put ''ImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShkMS5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoZDEuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2go''@;'; put 'put ''dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShkMS5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihhLGQ9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsZCksdGhpcy5saXN0ZW5Ub0Fycm93S2V5cyhh''@;'; put 'put ''KSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZW50ZXIiLCgpPT4h''@;'; put 'put ''dGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhhKXt2b2lkIDAhPT1hJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGEuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWEpfW1vdmUoYSl7bGV0IGQ9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBoPXRoaXMuY3VycmVudFth''@;'; put 'put ''XTtoJiYoRk8oaCk/aDpXaShoKSkuc3Vic2NyaWJlKF89PntfJiYodGhpcy5tb3ZlVG8oXyksZD0hMCl9KX1yZXR1cm4gZH1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUoKSwwKSl9''@;'; put 'put ''ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9PmEoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7''@;'; put 'put ''Y29uc3Qgako9e3Byb3ZpZGU6RWIsdXNlRmFjdG9yeTpmdW5jdGlvbiBveWUoYyxsKXtyZXR1cm4gY3x8bmV3IEViKGwpfSxkZXBzOltbbmV3IHoyLG5ldyBnMCxFYl0sRm9dfTt2YXIgb2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i''@;'; put 'put ''QUZURVIiLGN9KG9kfHx7fSk7Y2xhc3MgeDB7fXgwWyJ0b3AtcmlnaHQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx4MFsidG9wLWxlZnQiXT17YXhpczp2dS5WRVJUSUNBTCxzaWRlOm9kLkJFRk9SRSxhbmNob3I6UHMu''@;'; put 'put ''U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbImJvdHRvbS1yaWdodCJdPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQUZURVIsYW5jaG9yOlBzLkVORCxjb250ZW50OlBzLkVORH0seDBbImJvdHRvbS1sZWZ0Il09e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMu''@;'; put 'put ''U1RBUlQsY29udGVudDpQcy5TVEFSVH0seDBbInJpZ2h0LXRvcCJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5BRlRFUixhbmNob3I6UHMuQ0VOVEVSLGNvbnRlbnQ6UHMuRU5EfSx4MFsicmlnaHQtYm90dG9tIl09e2F4aXM6dnUuSE9SSVpPTlRBTCxzaWRlOm9kLkFGVEVSLGFuY2hv''@;'; put 'put ''cjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx4MFsibGVmdC10b3AiXT17YXhpczp2dS5IT1JJWk9OVEFMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5DRU5URVIsY29udGVudDpQcy5FTkR9LHgwWyJsZWZ0LWJvdHRvbSJdPXtheGlzOnZ1LkhPUklaT05UQUwsc2lkZTpvZC5CRUZPUkUs''@;'; put 'put ''YW5jaG9yOlBzLlNUQVJULGNvbnRlbnQ6UHMuU1RBUlR9O2NsYXNzIElGe3N0YXRpYyBsaW5rUGFyZW50KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgt''@;'; put 'put ''MSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxsW2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBoMT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7YS5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXpl''@;'; put 'put ''cm8iKTtjb25zdCBkPXRoaXMuY2xpZW50UmVjdChhKS53aWR0aDtyZXR1cm4gYS5jbGFzc0xpc3QucmVtb3ZlKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkfXNjcm9sbEJhcldpZHRoKGEpe3JldHVybiBhLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGh9c2Nyb2xsV2lkdGgoYSl7cmV0''@;'; put 'put ''dXJuIGEuc2Nyb2xsV2lkdGh8fDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IiksMTApfWNsaWVudFJlY3QoYSl7Y29uc3QgZD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6''@;'; put 'put ''cGFyc2VJbnQoZC50b3AsMTApLGJvdHRvbTpwYXJzZUludChkLmJvdHRvbSwxMCksbGVmdDpwYXJzZUludChkLmxlZnQsMTApLHJpZ2h0OnBhcnNlSW50KGQucmlnaHQsMTApLHdpZHRoOnBhcnNlSW50KGQud2lkdGgsMTApLGhlaWdodDpwYXJzZUludChkLmhlaWdodCwxMCl9fW1pbldpZHRo''@;'; put 'put ''KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoIm1pbi13aWR0aCIpLDEwKX1mb2N1cyhhKXthLmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigpe3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFu''@;'; put 'put ''ZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uRG9uZSgpe3RoaXMudXBkYXRlU3RhcnRIZWlnaHQoKX11cGRhdGVTdGFydEhlaWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxl''@;'; put 'put ''bWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KGgxKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiJdXSxob3N0VmFyczoxLGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmZV8oIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hbmltYXRpb25Eb25lKCl9KSwyJmEmJlM1KCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dl''@;'; put 'put ''cjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1cmVzOlt0aShbaDFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9jaztvdmVy''@;'; put 'put ''ZmxvdzpoaWRkZW59Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZXhwYW5kQW5pbWF0aW9uIixbaGMoInRydWUgPD0+IGZhbHNlIixbX3Moe2hlaWdodDoie3tzdGFydEhlaWdodH19cHgifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtoZWlnaHQ6IioifSkpXSldKV19fSksY30pKCksTEY9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxzeWU9MDtjb25zdCB4OD1uZXcgTWkoIklGX0FDVElWRV9JRCIp''@;'; put 'put ''LGx5ZT17cHJvdmlkZTp4OCx1c2VGYWN0b3J5OmZ1bmN0aW9uIGF5ZSgpe3JldHVybisrc3llfX07bGV0ICQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBiZX1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdl''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250''@;'; put 'put ''YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgRXIoITEpLHRoaXMud2FzQWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudENoYW5nZS5zdWJzY3JpYmUoXz0+e3RoaXMuY2hl''@;'; put 'put ''Y2tBbmRVcGRhdGVWaWV3KF8pfSl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1zZXQgYWN0aXZlKGEpe2EmJih0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PXRoaXMuaWQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp''@;'; put 'put ''b24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9Y2hlY2tBbmRVcGRhdGVWaWV3KGEpe2NvbnN0IGQ9YT09PXRoaXMuaWQ7ZCE9PXRoaXMud2FzQWN0aXZl''@;'; put 'put ''JiYodGhpcy51cGRhdGVWaWV3KGQpLHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoZCksdGhpcy53YXNBY3RpdmU9ZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dCh4OCksdHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsImNscklmQWN0aXZlIiwiIl1dLGlucHV0czp7YWN0aXZlOlsiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFjdGl2ZUNoYW5nZSJ9fSksY30pKCksYzI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9Pnt0aGlzLnVwZGF0ZVZpZXcoZiksdGhp''@;'; put 'put ''cy5vcGVuQ2hhbmdlLmVtaXQoZil9KX1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1zZXQgb3BlbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX11cGRhdGVWaWV3KGEpe2E/''@;'; put 'put ''dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpOnRoaXMuY29udGFpbmVyLmNsZWFyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEtzKSx0dCh6YSksdHQoYXMpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6''@;'; put 'put ''YyxzZWxlY3RvcnM6W1siIiwiY2xySWZPcGVuIiwiIl1dLGlucHV0czp7b3BlbjpbImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSx6Sj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy50ZW1w''@;'; put 'put ''bGF0ZT1hLHRoaXMuY29udGFpbmVyPWQsdGhpcy5lbD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmV4cGFuZD1fLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IEVyKCEwKSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChfLmV4''@;'; put 'put ''cGFuZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnVwZGF0ZVZpZXcoKSx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmQuZXhwYW5kZWQpfSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2Yg''@;'; put 'put ''YSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNo''@;'; put 'put ''KGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRlKXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRl''@;'; put 'put ''bXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykodHQoemEsOCksdHQoYXMpLHR0KE5pKSx0dChGbyksdHQoWXUpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOlsiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19''@;'; put 'put ''LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxjfSkoKSxzZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtp''@;'; put 'put ''bXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIFJme2NvbnN0cnVjdG9yKGwpe3RoaXMuZHJhZ1Bvc2l0aW9uPWwuZHJhZ1Bvc2l0aW9uLHRoaXMuZ3JvdXA9bC5ncm91cCx0aGlzLmRyYWdEYXRhVHJhbnNmZXI9bC5kcmFnRGF0YVRyYW5zZmVyLHRoaXMuZHJvcFBvaW50UG9zaXRpb249bC5k''@;'; put 'put ''cm9wUG9pbnRQb3NpdGlvbn19dmFyIEUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRFJBR19TVEFSVD0wXT0iRFJBR19TVEFSVCIsY1tjLkRSQUdfTU9WRT0xXT0iRFJBR19NT1ZFIixjW2MuRFJBR19FTkQ9Ml09IkRSQUdfRU5EIixjW2MuRFJBR19FTlRFUj0zXT0iRFJBR19FTlRFUiIsY1tj''@;'; put 'put ''LkRSQUdfTEVBVkU9NF09IkRSQUdfTEVBVkUiLGNbYy5EUk9QPTVdPSJEUk9QIixjfShFMHx8e30pO2xldCBVSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kcmFnU3RhcnQ9bmV3IGJlLHRoaXMuZHJhZ01vdmU9bmV3IGJlLHRoaXMuZHJhZ0VuZD1uZXcgYmUsdGhpcy5kcm9w''@;'; put 'put ''PW5ldyBiZX1nZXQgZHJhZ1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5kcmFnU3RhcnQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdNb3ZlZCgpe3JldHVybiB0aGlzLmRyYWdNb3ZlLmFzT2JzZXJ2YWJsZSgpfWdldCBkcmFnRW5kZWQoKXtyZXR1cm4gdGhpcy5kcmFnRW5kLmFzT2JzZXJ2YWJsZSgp''@;'; put 'put ''fWdldCBkcm9wcGVkKCl7cmV0dXJuIHRoaXMuZHJvcC5hc09ic2VydmFibGUoKX1icm9hZGNhc3QoYSl7c3dpdGNoKGEudHlwZSl7Y2FzZSBFMC5EUkFHX1NUQVJUOnRoaXMuZHJhZ1N0YXJ0Lm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUkFHX01PVkU6dGhpcy5kcmFnTW92ZS5uZXh0KGEpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgRTAuRFJBR19FTkQ6dGhpcy5kcmFnRW5kLm5leHQoYSk7YnJlYWs7Y2FzZSBFMC5EUk9QOnRoaXMuZHJvcC5uZXh0KGEpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksa2I9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5ldmVudEJ1cz1oLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLmhhc0RyYWdTdGFydGVkPSExLHRo''@;'; put 'put ''aXMuZHJhZ1N0YXJ0PW5ldyBiZSx0aGlzLmRyYWdNb3ZlPW5ldyBiZSx0aGlzLmRyYWdFbmQ9bmV3IGJlLHRoaXMubGlzdGVuZXJzPVtdfWdldCBkcmFnU3RhcnRlZCgpe3JldHVybiB0aGlzLmRyYWdTdGFydC5hc09ic2VydmFibGUoKX1nZXQgZHJhZ01vdmVkKCl7cmV0dXJuIHRoaXMuZHJh''@;'; put 'put ''Z01vdmUuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdFbmRlZCgpe3JldHVybiB0aGlzLmRyYWdFbmQuYXNPYnNlcnZhYmxlKCl9Z2V0IGRyYWdTdGFydFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdGlhbFBvc2l0aW9ufWF0dGFjaERyYWdMaXN0ZW5lcnMoYSl7dGhpcy5kcmFnZ2FibGVFbD1h''@;'; put 'put ''LHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5jdXN0b21EcmFnRXZlbnQodGhpcy5kcmFnZ2FibGVFbCwibW91c2Vkb3duIiwibW91c2Vtb3ZlIiwibW91c2V1cCIpKSx0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMuY3VzdG9tRHJhZ0V2ZW50KHRoaXMuZHJhZ2dhYmxlRWwsInRvdWNoc3RhcnQi''@;'; put 'put ''LCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpKX1kZXRhY2hEcmFnTGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnMmJnRoaXMubGlzdGVuZXJzLm1hcChhPT5hKCkpLHRoaXMubmVzdGVkTGlzdGVuZXJzJiZ0aGlzLm5lc3RlZExpc3RlbmVycy5tYXAoYT0+YSgpKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0''@;'; put 'put ''Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKX1nZXROYXRpdmVFdmVudE9iamVjdChhKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsImNoYW5nZWRUb3VjaGVzIik/YS5jaGFuZ2VkVG91Y2hlc1swXTph''@;'; put 'put ''fWN1c3RvbURyYWdFdmVudChhLGQsaCxmKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5saXN0ZW4oYSxkLF89Pnt0aGlzLmluaXRpYWxQb3NpdGlvbj17cGFnZVg6dGhpcy5nZXROYXRpdmVFdmVudE9iamVjdChfKS5wYWdlWCxwYWdlWTp0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KF8pLnBhZ2VZ''@;'; put 'put ''fSx0aGlzLm5lc3RlZExpc3RlbmVycz1bXSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmVzdGVkTGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwic2VsZWN0c3RhcnQiLFQ9PntULnByZXZlbnREZWZhdWx0KCksVC5zdG9wSW1t''@;'; put 'put ''ZWRpYXRlUHJvcGFnYXRpb24oKX0pKSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnkoaCksdGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0''@;'; put 'put ''ZW5lcigpLHRoaXMuaGFzRHJhZ1N0YXJ0ZWQ9ITAsdGhpcy5icm9hZGNhc3QoXyxFMC5EUkFHX1NUQVJUKSx0aGlzLm5lc3RlZExpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsaCxUPT57VC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLmhhc0Ry''@;'; put 'put ''YWdTdGFydGVkJiZ0aGlzLmJyb2FkY2FzdChULEUwLkRSQUdfTU9WRSl9KSl9LHRoaXMuZHJhZ1N0YXJ0RGVsYXkpfSksdGhpcy5uZXN0ZWRMaXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGYsVD0+e3RoaXMuaGFzRHJhZ1N0YXJ0ZWQmJih0aGlzLmhhc0Ry''@;'; put 'put ''YWdTdGFydGVkPSExLHRoaXMuYnJvYWRjYXN0KFQsRTAuRFJBR19FTkQpKSxjbGVhclRpbWVvdXQodGhpcy5kcmFnU3RhcnREZWxheVRpbWVvdXQpLHRoaXMubmVzdGVkTGlzdGVuZXJzLm1hcChXPT5XKCkpLHRoaXMuY2hlY2tEcmFnU3RhcnRCb3VuZGFyeUxpc3RlbmVyJiZ0aGlzLmNoZWNr''@;'; put 'put ''RHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcigpfSkpfSl9Y2hlY2tEcmFnU3RhcnRCb3VuZGFyeShhKXt0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3RlbigiZG9jdW1lbnQiLGEsZD0+e2NvbnN0IGg9TWF0aC5hYnModGhpcy5nZXROYXRpdmVF''@;'; put 'put ''dmVudE9iamVjdChkKS5wYWdlWC10aGlzLmluaXRpYWxQb3NpdGlvbi5wYWdlWCksZj1NYXRoLmFicyh0aGlzLmdldE5hdGl2ZUV2ZW50T2JqZWN0KGQpLnBhZ2VZLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VZKTsoaD4xfHxmPjEpJiYoY2xlYXJUaW1lb3V0KHRoaXMuZHJhZ1N0YXJ0RGVs''@;'; put 'put ''YXlUaW1lb3V0KSx0aGlzLmNoZWNrRHJhZ1N0YXJ0Qm91bmRhcnlMaXN0ZW5lciYmdGhpcy5jaGVja0RyYWdTdGFydEJvdW5kYXJ5TGlzdGVuZXIoKSl9KX1icm9hZGNhc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2VuZXJhdGVEcmFnRXZlbnQoYSxkKTtzd2l0Y2goaC50eXBlKXtjYXNlIEUwLkRS''@;'; put 'put ''QUdfU1RBUlQ6dGhpcy5kcmFnU3RhcnQubmV4dChoKTticmVhaztjYXNlIEUwLkRSQUdfTU9WRTp0aGlzLmRyYWdNb3ZlLm5leHQoaCk7YnJlYWs7Y2FzZSBFMC5EUkFHX0VORDp0aGlzLmRyYWdFbmQubmV4dChoKX1oLmdob3N0RWxlbWVudD10aGlzLmdob3N0RWxlbWVudCxoLmRyb3BQb2lu''@;'; put 'put ''dFBvc2l0aW9uPXRoaXMuZHJvcFBvaW50UG9zaXRpb24sdGhpcy5ldmVudEJ1cy5icm9hZGNhc3QoaCl9Z2VuZXJhdGVEcmFnRXZlbnQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0TmF0aXZlRXZlbnRPYmplY3QoYSk7cmV0dXJue3R5cGU6ZCxkcmFnUG9zaXRpb246e3BhZ2VYOmgucGFnZVgscGFn''@;'; put 'put ''ZVk6aC5wYWdlWSxtb3ZlWDpoLnBhZ2VYLXRoaXMuaW5pdGlhbFBvc2l0aW9uLnBhZ2VYLG1vdmVZOmgucGFnZVktdGhpcy5pbml0aWFsUG9zaXRpb24ucGFnZVl9LGdyb3VwOnRoaXMuZ3JvdXAsZHJhZ0RhdGFUcmFuc2Zlcjp0aGlzLmRyYWdEYXRhVHJhbnNmZXIsZ2hvc3RFbGVtZW50OnRo''@;'; put 'put ''aXMuZ2hvc3RFbGVtZW50fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKEZvKSxhcihVSikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFJGPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5kb21BZGFwdGVyPWF9Z2V0IGhhc0RyYWdnYWJsZVN0YXRlKCl7cmV0dXJuISF0aGlzLnNuYXBzaG90RHJhZ0V2ZW50JiYhIXRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdldCBjbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuZHJhZ2dhYmxlRWxDbGllbnRSZWN0fWdl''@;'; put 'put ''dCBkcmFnRXZlbnQoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdERyYWdFdmVudH1jYXB0dXJlKGEsZCl7dGhpcy5kcmFnZ2FibGVFbENsaWVudFJlY3Q9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QoYSksdGhpcy5zbmFwc2hvdERyYWdFdmVudD1kfWRpc2NhcmQoKXtkZWxldGUgdGhpcy5kcmFn''@;'; put 'put ''Z2FibGVFbENsaWVudFJlY3QsZGVsZXRlIHRoaXMuc25hcHNob3REcmFnRXZlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGgxKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWko9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe2lmKHRoaXMuZWw9YSx0aGlzLmRyYWdFdmVudExpc3RlbmVyPWQsdGhpcy5kcmFnZ2FibGVTbmFwc2hvdD1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLm5nWm9uZT1fLHRoaXMubGVhdmVBbmltQ29uZmlnPXt2YWx1ZTowLHBhcmFtczp7''@;'; put 'put ''dG9wOiIwcHgiLGxlZnQ6IjBweCJ9fSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmRyYWdnYWJsZVNuYXBzaG90KXRocm93IG5ldyBFcnJvcigiVGhlIGNsci1kcmFnZ2FibGUtZ2hvc3QgY29tcG9uZW50IGNhbiBvbmx5IGJlIHVzZWQgaW5z''@;'; put 'put ''aWRlIG9mIGEgY2xyRHJhZ2dhYmxlIGRpcmVjdGl2ZS4iKTt0aGlzLmRyYWdnYWJsZUdob3N0RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5kcmFnZ2FibGVHaG9zdEVsLCJkcmFnZ2FibGUtZ2hvc3QiKSx0aGlzLmRyYWdFdmVudExpc3RlbmVy''@;'; put 'put ''Lmdob3N0RWxlbWVudD10aGlzLmRyYWdnYWJsZUdob3N0RWwsdGhpcy5zZXREZWZhdWx0R2hvc3RTaXplKHRoaXMuZHJhZ2dhYmxlR2hvc3RFbCk7Y29uc3QgVD17dG9wOnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFn''@;'; put 'put ''RXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VZLXRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC50b3A6MCxsZWZ0OnRoaXMuZHJhZ2dhYmxlU25hcHNob3QuaGFzRHJhZ2dhYmxlU3RhdGU/dGhpcy5kcmFnZ2FibGVTbmFwc2hvdC5kcmFnRXZlbnQuZHJhZ1Bvc2l0aW9uLnBhZ2VYLXRo''@;'; put 'put ''aXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC5sZWZ0OjB9O2xldCBXPSExO3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShpZT0+e1d8fCh0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRl''@;'; put 'put ''P3RoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QudG9wfXB4YCxgJHt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJlY3QubGVmdH1weGApOnRoaXMuYW5pbWF0ZVRvT25MZWF2ZShgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRy''@;'; put 'put ''YWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCxgJHt0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydFBvc2l0aW9uLnBhZ2VZfXB4YCksVz0hMCk7Y29uc3QgZ2U9dGhpcy5maW5kVG9wTGVmdFBvc2l0aW9uKGllLmRyYWdQb3NpdGlvbixUKTt0aGlzLnNldFBvc2l0aW9uU3R5bGUodGhp''@;'; put 'put ''cy5kcmFnZ2FibGVHaG9zdEVsLGdlLnBhZ2VYLGdlLnBhZ2VZKSx0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyb3BQb2ludFBvc2l0aW9uPXRoaXMuZmluZERyb3BQb2ludFBvc2l0aW9uKGdlKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJz''@;'; put 'put ''Y3JpYmUoKSl9c2V0RGVmYXVsdEdob3N0U2l6ZShhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlJiZ0aGlzLnNldFNpemVTdHlsZShhLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aCx0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNsaWVudFJl''@;'; put 'put ''Y3QuaGVpZ2h0KX1hbmltYXRlVG9PbkxlYXZlKGEsZCl7dGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5sZWF2ZUFuaW1Db25maWc9e3ZhbHVlOjAscGFyYW1zOnt0b3A6YSxsZWZ0OmR9fX0pfWZpbmRUb3BMZWZ0UG9zaXRpb24oYSxkKXtyZXR1cm57cGFnZVg6YS5wYWdlWC1kLmxlZnQscGFn''@;'; put 'put ''ZVk6YS5wYWdlWS1kLnRvcH19ZmluZERyb3BQb2ludFBvc2l0aW9uKGEpe3JldHVybiB0aGlzLmRyYWdnYWJsZVNuYXBzaG90Lmhhc0RyYWdnYWJsZVN0YXRlP3twYWdlWDphLnBhZ2VYK3RoaXMuZHJhZ2dhYmxlU25hcHNob3QuY2xpZW50UmVjdC53aWR0aC8yLHBhZ2VZOmEucGFnZVkrdGhp''@;'; put 'put ''cy5kcmFnZ2FibGVTbmFwc2hvdC5jbGllbnRSZWN0LmhlaWdodC8yfTphfXNldFNpemVTdHlsZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ3aWR0aCIsYCR7ZH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwiaGVpZ2h0IixgJHtofXB4YCl9c2V0UG9zaXRpb25TdHls''@;'; put 'put ''ZShhLGQsaCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IixgJHtkfXB4YCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3AiLGAke2h9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsInZpc2liaWxpdHkiLCJ2aXNpYmxlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChrYiw4KSx0dChSRiw4KSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyYWdnYWJsZS1naG9zdCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm''@;'; put 'put ''YSYmUzUoIkBsZWF2ZUFuaW1hdGlvbiIsZC5sZWF2ZUFuaW1Db25maWcpfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImxlYXZl''@;'; put 'put ''QW5pbWF0aW9uIixbaGMoIjpsZWF2ZSIsW19zKHtsZWZ0OiIqIix0b3A6IioifSkscnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHt0b3A6Int7dG9wfX0iLGxlZnQ6Int7bGVmdH19In0pKV0pXSldfX0pLGN9KSgpLFlKPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe2lmKHRoaXMu''@;'; put 'put ''dGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXI9aCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sIXRoaXMuZHJhZ0V2ZW50TGlzdGVuZXJ8fCF0aGlzLmNvbnRhaW5lcil0aHJvdyBuZXcgRXJyb3IoIlRoZSAqY2xySWZEcmFnZ2VkIGRpcmVjdGl2ZSBjYW4g''@;'; put 'put ''b25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsckRyYWdnYWJsZSBkaXJlY3RpdmUuIik7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50''@;'; put 'put ''ZW1wbGF0ZSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRW5kZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5jb250YWluZXIuY2xlYXIoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3Jp''@;'; put 'put ''YmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHphKSx0dChhcywxMiksdHQoa2IsOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkRyYWdnZWQiLCIiXV19KSxjfSkoKSxPRj0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lcj1hLHRoaXMucmVuZGVyZXI9ZH1nZXQgZGVmYXVsdEhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRIYW5kbGVFbH1zZXQgZGVmYXVsdEhhbmRsZUVsKGEpe3RoaXMuX2RlZmF1bHRIYW5kbGVFbD1hLHRoaXMuX2N1''@;'; put 'put ''c3RvbUhhbmRsZUVsfHx0aGlzLm1ha2VFbGVtZW50SGFuZGxlKHRoaXMuX2RlZmF1bHRIYW5kbGVFbCl9Z2V0IGN1c3RvbUhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuX2N1c3RvbUhhbmRsZUVsfXJlZ2lzdGVyQ3VzdG9tSGFuZGxlKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJh''@;'; put 'put ''Z0xpc3RlbmVycygpLHRoaXMuX2N1c3RvbUhhbmRsZUVsPWEsdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9jdXN0b21IYW5kbGVFbCl9dW5yZWdpc3RlckN1c3RvbUhhbmRsZSgpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''cmVtb3ZlQ2xhc3ModGhpcy5fY3VzdG9tSGFuZGxlRWwsImRyYWctaGFuZGxlIiksZGVsZXRlIHRoaXMuX2N1c3RvbUhhbmRsZUVsLHRoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5tYWtlRWxlbWVudEhhbmRsZSh0aGlzLl9kZWZhdWx0SGFuZGxlRWwpfW1ha2VFbGVtZW50SGFuZGxlKGEp''@;'; put 'put ''e3RoaXMuX2RlZmF1bHRIYW5kbGVFbCYmdGhpcy5fZGVmYXVsdEhhbmRsZUVsIT09YSYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kZWZhdWx0SGFuZGxlRWwsImRyYWctaGFuZGxlIiksdGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5hdHRhY2hEcmFnTGlzdGVuZXJzKGEpLHRoaXMu''@;'; put 'put ''cmVuZGVyZXIuYWRkQ2xhc3MoYSwiZHJhZy1oYW5kbGUiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoa2IpLGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksV0o9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnJlbmRlcmVyPWF9ZW50ZXIoKXt0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksImluLWRyYWciKX1leGl0KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCJpbi1kcmFnIil9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZvKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksR0o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLmVsPWEsdGhpcy5kcmFnRXZl''@;'; put 'put ''bnRMaXN0ZW5lcj1kLHRoaXMuZHJhZ0hhbmRsZVJlZ2lzdHJhcj1oLHRoaXMudmlld0NvbnRhaW5lclJlZj1mLHRoaXMuY2ZyPV8sdGhpcy5pbmplY3Rvcj1ULHRoaXMuZHJhZ2dhYmxlU25hcHNob3Q9Vyx0aGlzLmdsb2JhbERyYWdNb2RlPWllLHRoaXMuZHJhZ1N0YXJ0RW1pdHRlcj1uZXcg''@;'; put 'put ''RXIsdGhpcy5kcmFnTW92ZUVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ0VuZEVtaXR0ZXI9bmV3IEVyLHRoaXMuZHJhZ09uPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRyYWdnYWJsZUVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLmNvbXBvbmVudEZhY3Rvcnk9dGhpcy5jZnIu''@;'; put 'put ''cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWkopfXNldCBkYXRhVHJhbnNmZXIoYSl7dGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnRGF0YVRyYW5zZmVyPWF9c2V0IGdyb3VwKGEpe3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZ3JvdXA9YX1zZXQgZHJhZ1N0YXJ0RGVsYXkoYSl7Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBhP3RoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ1N0YXJ0RGVsYXk9YToic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLmRyYWdFdmVudExpc3RlbmVyLmRyYWdTdGFydERlbGF5PXBhcnNlSW50KGEsMTApfHwwKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmRyYWdIYW5kbGVS''@;'; put 'put ''ZWdpc3RyYXIuZGVmYXVsdEhhbmRsZUVsPXRoaXMuZHJhZ2dhYmxlRWwsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kcmFnRXZlbnRMaXN0ZW5lci5kcmFnU3RhcnRlZC5zdWJzY3JpYmUoYT0+e3RoaXMuZ2xvYmFsRHJhZ01vZGUuZW50ZXIoKSx0aGlzLmRyYWdPbj0hMCx0aGlzLmN1''@;'; put 'put ''c3RvbUdob3N0fHx0aGlzLmNyZWF0ZURlZmF1bHRHaG9zdChhKSx0aGlzLmRyYWdTdGFydEVtaXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ01vdmVkLnN1YnNjcmliZShhPT57dGhpcy5kcmFnTW92ZUVt''@;'; put 'put ''aXR0ZXIuZW1pdChuZXcgUmYoYSkpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZHJhZ0VuZGVkLnN1YnNjcmliZShhPT57dGhpcy5nbG9iYWxEcmFnTW9kZS5leGl0KCksdGhpcy5kcmFnT249ITEsdGhpcy5jdXN0b21HaG9zdHx8dGhpcy5kZXN0''@;'; put 'put ''cm95RGVmYXVsdEdob3N0KCksdGhpcy5kcmFnRW5kRW1pdHRlci5lbWl0KG5ldyBSZihhKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuZHJhZ0V2ZW50TGlzdGVuZXIuZGV0YWNoRHJhZ0xpc3RlbmVycygpfWNy''@;'; put 'put ''ZWF0ZURlZmF1bHRHaG9zdChhKXt0aGlzLmRyYWdnYWJsZVNuYXBzaG90LmNhcHR1cmUodGhpcy5kcmFnZ2FibGVFbCxhKSx0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KHRoaXMuY29tcG9uZW50RmFjdG9yeSwwLHRoaXMuaW5qZWN0b3IsW1t0aGlzLmRyYWdnYWJsZUVs''@;'; put 'put ''LmNsb25lTm9kZSghMCldXSl9ZGVzdHJveURlZmF1bHRHaG9zdCgpe3RoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpLHRoaXMuZHJhZ2dhYmxlU25hcHNob3QuZGlzY2FyZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoa2Ip''@;'; put 'put ''LHR0KE9GKSx0dChhcyksdHQoSzApLHR0KEVhKSx0dChSRiksdHQoV0opKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJhZ2dhYmxlIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWUosNSksMiZhKXtsZXQgZjtz''@;'; put 'put ''aShmPWFpKCkpJiYoZC5jdXN0b21HaG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZHJhZ2dhYmxlIiwhMCkoImJlaW5nLWRyYWdnZWQiLGQuZHJhZ09uKX0saW5wdXRzOntkYXRhVHJhbnNmZXI6WyJjbHJEcmFnZ2FibGUiLCJk''@;'; put 'put ''YXRhVHJhbnNmZXIiXSxncm91cDpbImNsckdyb3VwIiwiZ3JvdXAiXSxkcmFnU3RhcnREZWxheTpbImNsckRyYWdTdGFydERlbGF5IiwiZHJhZ1N0YXJ0RGVsYXkiXX0sb3V0cHV0czp7ZHJhZ1N0YXJ0RW1pdHRlcjoiY2xyRHJhZ1N0YXJ0IixkcmFnTW92ZUVtaXR0ZXI6ImNsckRyYWdNb3Zl''@;'; put 'put ''IixkcmFnRW5kRW1pdHRlcjoiY2xyRHJhZ0VuZCJ9LGZlYXR1cmVzOlt0aShba2IsT0YsUkYsV0osaDFdKV19KSxjfSkoKSwkSj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NvbnN0IHFKPW5ldyBNaSgiRk9DVVNfT05fVklFV19JTklUIiksdXllPXtwcm92aWRlOnFKLHVzZVZhbHVlOiEwfTtsZXQgUEY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5lbD1hLHRoaXMu''@;'; put 'put ''cGxhdGZvcm1JZD1kLHRoaXMuZm9jdXNPblZpZXdJbml0PWgsdGhpcy5yZW5kZXJlcj1fLHRoaXMuZGlyZWN0Rm9jdXM9ITAsdGhpcy5kZXN0cm95JD1uZXcgYmUsdGhpcy5faXNFbmFibGVkPXRoaXMuZm9jdXNPblZpZXdJbml0LHRoaXMuZG9jdW1lbnQ9ZixULnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT5uMihhLm5hdGl2ZUVsZW1lbnQsImZvY3Vzb3V0IikucGlwZShhaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5kaXJlY3RGb2N1c3x8KHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSx0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwib3V0bGluZSIsbnVsbCkpfSkpfXNldCBpc0VuYWJsZWQoYSl7dGhpcy5mb2N1c09uVmlld0luaXQmJiJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLl9pc0VuYWJsZWQ9YSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5mb2N1''@;'; put 'put ''cygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLl9pc0VuYWJsZWQmJnRoaXMuZG9jdW1lbnQmJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZWwubmF0''@;'; put 'put ''aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudCYmKHRoaXMuZGlyZWN0Rm9jdXM9ITEsdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5y''@;'; put 'put ''ZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIm91dGxpbmUiLCJub25lIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEdzKSx0dChxSiksdHQoTHMp''@;'; put 'put ''LHR0KEZvKSx0dChObykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb2N1c09uVmlld0luaXQiLCIiXV0saW5wdXRzOntpc0VuYWJsZWQ6WyJjbHJGb2N1c09uVmlld0luaXQiLCJpc0VuYWJsZWQiXX19KSxjfSkoKSxxNT0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W3V5ZV0saW1wb3J0czpbW29vXV19KSxjfSkoKSxkeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3By''@;'; put 'put ''ZXZpb3VzRm9jdXNUcmFwcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9YX1nZXQgbmJGb2N1c1RyYXBwZXJzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X3ByZXZpb3VzRm9jdXNUcmFwcy5sZW5ndGh9YWN0aXZhdGVQcmV2aW91c1RyYXBwZXIoKXt0aGlzLl9jdXJyZW50PXRoaXMuX3ByZXZpb3VzRm9jdXNUcmFwcy5wb3AoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksTXA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuZWw9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5mb2N1c1RyYXBzVHJhY2tlcj1oLHRoaXMucmVuZGVyZXI9Zix0aGlz''@;'; put 'put ''LnBsYXRmb3JtSWQ9Xyx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkPSExLHRoaXMuX2NvbmZpZz17c3RyaWN0OiEwfSx0aGlzLmRvY3VtZW50PXRoaXMuaW5qZWN0b3IuZ2V0KExzKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmN1cnJlbnQ9dGhpc31zZXQgY29uZmlnKGEpe3RoaXMuX2NvbmZpZz1P''@;'; put 'put ''YmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywiIj09PWE/e306YSl9Z2V0IHBvdGVudGlhbGx5Rm9jdXNhYmxlRWxzKCl7cmV0dXJuWy4uLnRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaHJlZl06bm90KFt0YWJpbmRleD0iLTEiXSksIGJ1dHRvbjpub3QoW2Rpc2Fi''@;'; put 'put ''bGVkXSk6bm90KFt0YWJpbmRleD0iLTEiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PSItMSJdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbdGFiaW5kZXg9Ii0xIl0pLCBb''@;'; put 'put ''Y29udGVudGVkaXRhYmxlPSJ0cnVlIl06bm90KFt0YWJpbmRleD0iLTEiXSksIFt0YWJpbmRleF06bm90KFt0YWJpbmRleD0iLTEiXSkgJyldfW5nT25Jbml0KCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''dGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQ9dGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMucGFyZW50RWxlbWVudD10aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCksdGhpcy5hZGRSZWJvdW5kRWxzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZVJlYm91bmRFbHMoKSx0aGlzLnNldFByZXZpb3VzRm9jdXMoKSx0aGlzLmZvY3VzVHJhcHNUcmFja2VyLmFjdGl2YXRlUHJldmlvdXNUcmFwcGVyKCl9''@;'; put 'put ''b25Gb2N1c0luKGEpe2NvbnN0IGQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMuZm9jdXNUcmFwc1RyYWNrZXIuY3VycmVudCE9PXRoaXN8fCFScyh0aGlzLnBsYXRmb3JtSWQpfHx0aGlzLmxvY2FsRm9jdXNFc2NhcGVkfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8KGEudGFyZ2V0PT09dGhp''@;'; put 'put ''cy50b3BSZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhpcy5mb2N1c0xhc3RGb2N1c2FibGUoKSx0aGlzLmZvY3VzVHJhcEVsSWZPdXRzaWRlKCkpOmEudGFyZ2V0PT09dGhpcy5ib3R0b21SZWJvdW5kRWwmJmQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KT8odGhp''@;'; put 'put ''cy5mb2N1c0ZpcnN0Rm9jdXNhYmxlKCksdGhpcy5mb2N1c1RyYXBFbElmT3V0c2lkZSgpKTp0aGlzLl9jb25maWcuc3RyaWN0P3RoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMubG9jYWxGb2N1c0VzY2FwZWQ9ITApfXNldFByZXZpb3VzRm9jdXMoKXt0aGlzLnByZXZpb3VzQWN0''@;'; put 'put ''aXZlRWxlbWVudCYmdGhpcy5wcmV2aW91c0FjdGl2ZUVsZW1lbnQuZm9jdXMmJnRoaXMucHJldmlvdXNBY3RpdmVFbGVtZW50LmZvY3VzKCl9Y3JlYXRlRm9jdXNhYmxlT2ZmU2NyZWVuRWwoKXtjb25zdCBhPXRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO3JldHVybiB0aGlz''@;'; put 'put ''LnJlbmRlcmVyLnNldEF0dHJpYnV0ZShhLCJ0YWJpbmRleCIsIjAiKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGEsIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxhfWFkZFJlYm91bmRFbHMoKXtpZihScyh0aGlzLnBsYXRmb3JtSWQpKXt0aGlzLnRvcFJlYm91bmRFbD10aGlzLmNyZWF0''@;'; put 'put ''ZUZvY3VzYWJsZU9mZlNjcmVlbkVsKCksdGhpcy5ib3R0b21SZWJvdW5kRWw9dGhpcy5jcmVhdGVGb2N1c2FibGVPZmZTY3JlZW5FbCgpO2NvbnN0IGE9dGhpcy5lbC5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50RWxlbWVudCx0aGlzLnRvcFJlYm91''@;'; put 'put ''bmRFbCxhKSxhLm5leHRTaWJsaW5nP3RoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCxhLm5leHRTaWJsaW5nKTp0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGEucGFyZW50Tm9kZSx0aGlzLmJvdHRvbVJlYm91bmRFbCl9fXJlbW92''@;'; put 'put ''ZVJlYm91bmRFbHMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRvcFJlYm91bmRFbCYmdGhpcy5ib3R0b21SZWJvdW5kRWwmJih0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy50b3BSZWJvdW5kRWwpLHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmJv''@;'; put 'put ''dHRvbVJlYm91bmRFbCksZGVsZXRlIHRoaXMudG9wUmVib3VuZEVsLGRlbGV0ZSB0aGlzLmJvdHRvbVJlYm91bmRFbCl9Zm9jdXNGaXJzdEZvY3VzYWJsZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVscy5sZW5ndGgmJih0aGlzLmZpcnN0Rm9jdXNhYmxlRWw9''@;'; put 'put ''dGhpcy5mb2N1c0VsZW1lbnQodGhpcy5wb3RlbnRpYWxseUZvY3VzYWJsZUVsc1thXSksIXRoaXMuZmlyc3RGb2N1c2FibGVFbCk7YSsrKTt9Zm9jdXNMYXN0Rm9jdXNhYmxlKCl7Zm9yKGxldCBhPXRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHMubGVuZ3RoLTE7YT49MCYmKHRoaXMubGFz''@;'; put 'put ''dEZvY3VzYWJsZUVsPXRoaXMuZm9jdXNFbGVtZW50KHRoaXMucG90ZW50aWFsbHlGb2N1c2FibGVFbHNbYV0pLCF0aGlzLmxhc3RGb2N1c2FibGVFbCk7YS0tKTt9Zm9jdXNUcmFwRWxJZk91dHNpZGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxl''@;'; put 'put ''bWVudCl8fHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpfWZvY3VzRWxlbWVudChhKXtyZXR1cm4gYSYmYS5mb2N1cyYmKGEuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50PT09YSk/YTpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KSh0dChOaSksdHQoRWEpLHR0KGR5ZSksdHQoRm8pLHR0KEdzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckZvY3VzVHJhcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJmb2N1c2luIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v''@;'; put 'put ''bkZvY3VzSW4oZil9LDAsZmYpfSxpbnB1dHM6e2NvbmZpZzpbImNsckZvY3VzVHJhcCIsImNvbmZpZyJdfX0pLGN9KSgpLHlFPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5c''@;'; put 'put ''dTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvb11dfSksY30pKCksZnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90ZXh0Q29udGVudENoYW5nZT1uZXcgYmV9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50fXNldCB0ZXh0Q29udGVudChhKXt0aGlz''@;'; put 'put ''Ll90ZXh0Q29udGVudD1hLHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLm5leHQoYSl9Z2V0IHRleHRDb250ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RleHRDb250ZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxweWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7''@;'; put 'put ''aW1wb3J0czpbW29vXV19KSxjfSkoKSxteWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHhiXV19KSxjfSkoKSxkaD0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVV1LHRoaXMuc3RhdGU9VXUuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMu''@;'; put 'put ''c3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVdS5ERUZBVUxUOnRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0''@;'; put 'put ''aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVdS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVXUuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNl''@;'; put 'put ''IFV1LkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFV1LkRFRkFVTFQpfXRoaXMuY2xyTG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGll''@;'; put 'put ''bnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkaXNhYmxl''@;'; put 'put ''ZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTp2Yix1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpnN2UsbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmKFRpKCksQnIoMCwwKSxRZSgxLG03ZSwyLDEsInNwYW4iLDEpLFFlKDIsdjdlLDIsMSwic3BhbiIsMSksUWUoMyxfN2UsMiwxLCJzcGFuIiwxKSxVcigpKSwyJmEmJihSZSgibmdTd2l0Y2giLGQuc3RhdGUpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUu''@;'; put 'put ''TE9BRElORyksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0sZGVwZW5kZW5jaWVzOltuZCx0aF0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbYTEoImRl''@;'; put 'put ''ZmF1bHRCdXR0b24iLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjB9KV0pXSksYTEoInNwaW5uZXIiLFtoYygiOmVudGVyIixbX3Moe29wYWNpdHk6MH0pLHJ1''@;'; put 'put ''KCIyMDBtcyAxMDBtcyBlYXNlLWluIixfcyh7b3BhY2l0eToxfSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pLGExKCJ2YWxpZGF0ZWQiLFtoYygiOmVudGVyIixbcnUoIjYwMG1zIixGbWUoW19zKHt0cmFu''@;'; put 'put ''c2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSksX3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksX3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxfcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEp''@;'; put 'put ''IixvZmZzZXQ6MX0pXSkpXSksaGMoIjpsZWF2ZSIsW19zKHtvcGFjaXR5OjF9KSxydSgiMTAwbXMgZWFzZS1vdXQiLF9zKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxfeWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXV19KSxjfSkoKSxieWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbX3llLG15ZV19KSxjfSkoKSx5eWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbIm5nLWNvbXBvbmVudCJdXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe30sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksd0U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZp''@;'; put 'put ''KHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCksd3llPTAsYWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPSJjbHItZm9ybS1jb250cm9sLSIrICsrd3llLHRoaXMuX2lkQ2hhbmdlPW5ldyBUZSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lk''@;'; put 'put ''fXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDeWU9MCxLNT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRhaW5lci0iKyArK0N5ZSx0aGlzLl9pZENoYW5nZT1uZXcgVGUodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9p''@;'; put 'put ''ZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9pZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7bGV0IEZGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJhYnN0cmFjdCJ9Z2V0IGlkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29udGFpbmVySWRTZXJ2aWNlP2Ake3RoaXMuY29udGFpbmVySWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6dGhpcy5jb250cm9sSWRTZXJ2aWNlP2Ake3RoaXMuY29udHJvbElkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRyb2xJZFN1ZmZpeH1gOm51''@;'; put 'put ''bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLFN5ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMu''@;'; put 'put ''Y29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImVycm9yIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1lcnJvciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJpZCIsZC5pZCksZHIoImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbZW9dLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6''@;'; put 'put ''MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIRj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgRkZ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImhlbHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFkLDgpLHR0KEs1LDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtaGVscGVyIl1d''@;'; put 'put ''LGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGko''@;'; put 'put ''KSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgYmUsdGhpcy5faGVscGVycz1uZXcgYmV9Z2V0IGNvbnRyb2xDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NvbnRyb2xDaGFuZ2VzLmFz''@;'; put 'put ''T2JzZXJ2YWJsZSgpfWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJvbChhKXt0aGlzLl9jb250cm9sQ2hhbmdlcy5uZXh0KGEpfXNldEhlbHBlcnMoYSl7dGhpcy5faGVscGVycy5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgQTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuTk9ORT0iTk9ORSIsYy5WQUxJRD0iVkFMSUQiLGMuSU5WQUxJRD0iSU5WQUxJRCIsY30o''@;'; put 'put ''QTB8fHt9KTtsZXQgbGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3RhdHVzQ2hhbmdlcz1uZXcgVGUoQTAuTk9ORSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xT''@;'; put 'put ''ZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShkPT57ZCYmKHRoaXMuY29udHJvbD1kLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZSgpfSkpKX0pKX1nZXQgc3RhdHVz''@;'; put 'put ''Q2hhbmdlcygpe3JldHVybiB0aGlzLl9zdGF0dXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10cmlnZ2VyU3RhdHVzQ2hhbmdlKCl7aWYodGhpcy5jb250cm9sKXtjb25zdCBhPUEwW3Ro''@;'; put 'put ''aXMuY29udHJvbC5zdGF0dXNdO3RoaXMuX3N0YXR1c0NoYW5nZXMubmV4dChbIlZBTElEIiwiSU5WQUxJRCJdLmluY2x1ZGVzKGEpP2E6QTAuTk9ORSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihrMCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rv''@;'; put 'put ''a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBYNT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5DT01QQUNUPSJjb21wYWN0IixjfShYNXx8e30pO2xldCBPZj0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5taW5MYWJlbFNpemU9MSx0aGlzLm1heExhYmVsU2l6ZT0xMix0aGlzLmxheW91dD1YNS5IT1JJWk9OVEFMLHRoaXMubGF5b3V0VmFsdWVzPU9iamVjdC5rZXlzKFg1KS5tYXAoYT0+WDVbYV0pLHRoaXMuX2xhYmVsU2l6ZT0yfWdldCBsYWJlbFNpemUoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fbGFiZWxTaXplfXNldCBsYWJlbFNpemUoYSl7dGhpcy5sYWJlbFNpemVJc1ZhbGlkKGEpJiYodGhpcy5fbGFiZWxTaXplPWEpfWdldCBsYXlvdXRDbGFzcygpe3JldHVybmBjbHItZm9ybS0ke3RoaXMubGF5b3V0fWB9aXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1''@;'; put 'put ''LlZFUlRJQ0FMfWlzSG9yaXpvbnRhbCgpe3JldHVybiB0aGlzLmxheW91dD09PVg1LkhPUklaT05UQUx9aXNDb21wYWN0KCl7cmV0dXJuIHRoaXMubGF5b3V0PT09WDUuQ09NUEFDVH1pc1ZhbGlkKGEpe3JldHVybiB0aGlzLmxheW91dFZhbHVlcy5pbmRleE9mKGEpPi0xfWxhYmVsU2l6ZUlz''@;'; put 'put ''VmFsaWQoYSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYSkmJmE+PXRoaXMubWluTGFiZWxTaXplJiZhPD10aGlzLm1heExhYmVsU2l6ZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCksVXM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPV8sdGhpcy5lbmFibGVH''@;'; put 'put ''cmlkPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgbGFiZWxUZXh0KCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50fW5nT25Jbml0KCl7KHRoaXMuY29udHJvbElkU2VydmljZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNl''@;'; put 'put ''KSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGBjbHItY29s''@;'; put 'put ''LW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuZm9yQXR0cj1hKSl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWRpc2FibGVHcmlkKCl7dGhpcy5lbmFibGVHcmlkPSExfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhZCw4KSx0dChPZiw4KSx0dChrMCw4''@;'; put 'put ''KSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJmb3IiLGQuZm9yQXR0cil9LGlucHV0czp7Zm9yQXR0cjpbImZvciIsImZvckF0dHIiXX19KSxj''@;'; put 'put ''fSkoKSxNeWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEZGe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYWQsOCksdHQoSzUsOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxk''@;'; put 'put ''cigiY2xyLXN1YnRleHQiLCEwKSl9LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0''@;'; put 'put ''b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9QTAuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIEEwLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNlIEEw''@;'; put 'put ''LklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91dFNl''@;'; put 'put ''cnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRoKCJj''@;'; put 'put ''bHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoT2YsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEE4PSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZShfPT57dGhpcy5zdGF0ZT1fLHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hh''@;'; put 'put ''bmdlcy5zdWJzY3JpYmUoXz0+e3RoaXMuY29udHJvbD1ffSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnQmJighIXRoaXMuY29udHJvbEhlbHBlckNvbXBvbmVudCYmKCF0aGlzLnRvdWNoZWR8fHRoaXMuc3RhdGU9PT1BMC5OT05FKXx8IXRo''@;'; put 'put ''aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50JiZ0aGlzLnN0YXRlPT09QTAuSU5WQUxJRCl9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRCYm''@;'; put 'put ''ISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BMC5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hl''@;'; put 'put ''ZH1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3Mo''@;'; put 'put ''IXRoaXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BMC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BMC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVy''@;'; put 'put ''dGljYWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQs''@;'; put 'put ''c2hvd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGxkKSx0dChPZiw4KSx0dChjZCksdHQoazApKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxjb250ZW50''@;'; put 'put ''UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYoSW8oaCxVcyw1KSxJbyhoLE15ZSw1KSxJbyhoLFN5ZSw1KSxJbyhoLEhGLDUpKSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmly''@;'; put 'put ''c3QpLHNpKGY9YWkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBDRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3Is''@;'; put 'put ''IXRoaXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoSzApLGY9dGhpcy5pbmplY3Rvci5nZXQoTmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoeXllKSk7Y29uc3QgXz1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5''@;'; put 'put ''KGwpLFQ9W107VFtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBXPWEuY3JlYXRlQ29tcG9uZW50KF8sdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxXLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9Vy5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0''@;'; put 'put ''b3IuZ2V0KGwsYSl9fWxldCBORj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgYmV9Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFQ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMudmNyPWEsdGhpcy53cmFwcGVy''@;'; put 'put ''VHlwZT1kLHRoaXMubmdDb250cm9sPWYsdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbmRlcmVyPV8sdGhpcy5lbD1UO3RyeXt0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQoazApLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGxkKSx0aGlzLmNv''@;'; put 'put ''bnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQoY2QpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KE5GKX1jYXRjaHt9dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyhfLFQubmF0aXZlRWxlbWVudCksdGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5tYXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoVz0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KFcpfSkpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNl''@;'; put 'put ''cnZpY2UuaWQ9YSl9bmdPbkluaXQoKXt0aGlzLl9jb250YWluZXJJbmplY3Rvcj1uZXcgQ0UodGhpcy53cmFwcGVyVHlwZSx0aGlzLnZjcix0aGlzLmluZGV4KSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGFkKTt0cnl7dGhpcy5jb250YWluZXJJ''@;'; put 'put ''ZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KEs1KX1jYXRjaHt9dGhpcy5faWQ/dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPXRoaXMuX2lkOnRoaXMuX2lkPXRoaXMuY29udHJvbElkU2VydmljZS5pZCx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2Vy''@;'; put 'put ''dmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZp''@;'; put 'put ''Y2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNo''@;'; put 'put ''ZWQoKSx0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRB''@;'; put 'put ''dHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiKX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtsZXQgZD0iaGVscGVyIjty''@;'; put 'put ''ZXR1cm4gYS5zaG93SW52YWxpZD9kPSJlcnJvciI6YS5zaG93VmFsaWQmJihkPSJzdWNjZXNzIiksdGhpcy5jb250YWluZXJJZFNlcnZpY2U/dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWQuY29uY2F0KCItIixkKTp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/dGhpcy5jb250cm9sSWRTZXJ2aWNl''@;'; put 'put ''LmlkLmNvbmNhdCgiLSIsZCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KE9tKSx0dChFYSksdHQoenUpLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiZ4dCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ0MSgiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksWEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChPZiksdHQoTkYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpm''@;'; put 'put ''dW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwy''@;'; put 'put ''JmEmJmRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxpbnB1dHM6e2xhYmVsU2l6ZTpbImNsckxhYmVsU2l6ZSIsImxhYmVs''@;'; put 'put ''U2l6ZSJdfSxmZWF0dXJlczpbdGkoW09mLE5GXSldfSksY30pKCksWmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxj''@;'; put 'put ''Llx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhXV19KSxjfSkoKTtjb25zdCBWRj1uZXcgTWkoIklTX1RPR0dMRSIpLEF5ZT17cHJvdmlkZTpWRix1c2VGYWN0b3J5OmZ1bmN0aW9uIGt5ZSgpe3JldHVybiBuZXcgVGUoITEpfX07bGV0IFQwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''YSl7dGhpcy5fZHluYW1pYz0hMSx0aGlzLnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gt''@;'; put 'put ''d3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsVXMsNyksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MiZhJiZkcigiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCFkLnRvZ2dsZSkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbdGkoW2FkLEF5ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dzdlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSh5N2UpLGtyKDApLGtyKDEsMSksUWUoMixiN2UsMSwwLCJsYWJlbCIsMCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEMD0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgVDh7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3N1cGVyKGEsVDAsZCxoLGYsXyksdGhpcy50b2dnbGU9VH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihWRixudWxsKTthJiZudWxsIT09dGhpcy50b2dnbGUm''@;'; put 'put ''JmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSksUDQoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyQ2hlY2ti''@;'; put 'put ''b3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbZW9dfSksY30pKCksRDg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRo''@;'; put 'put ''aXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9''@;'; put 'put ''bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5jaGVja2JveGVzLmxlbmd0aD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNk''@;'; put 'put ''KSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LWNvbnRhaW5lciJdLFsiY2xyLXRvZ2dsZS1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxEMCw1KSwyJmEpe2xldCBm''@;'; put 'put ''O3NpKGY9YWkoKSkmJihkLmNoZWNrYm94ZXM9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9u''@;'; put 'put ''dWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbdGkoW2xkLGswLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpUN2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5n''@;'; put 'put ''SWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJh''@;'; put 'put ''cmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoQTdl''@;'; put 'put ''KSxrcigwKSxRZSgxLEM3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LFM3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsTTdlLDEsMCwiY2RzLWljb24iLDMpLFFlKDcseDdlLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsRTdlLDEsMCwi''@;'; put 'put ''bmctY29udGVudCIsMCksUWUoOSxrN2UsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xh''@;'; put 'put ''c3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRl''@;'; put 'put ''bmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxUeWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBl''@;'; put 'put ''OmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLFpjLHdFXSxaY119KSxjfSkoKTtmdW5jdGlvbiB1ZChjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IHUyPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEwfWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9dWQoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMu''@;'; put 'put ''X2ludmVyc2U9dWQoYSl9Z2V0IHNtYWxsQ2xhc3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPXVkKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVt''@;'; put 'put ''PXVkKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtYnVz''@;'; put 'put ''eSIsITApLGRyKCJzcGlubmVyIixkLnNwaW5uZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRz''@;'; put 'put ''OntjbHJJbmxpbmU6ImNscklubGluZSIsY2xySW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3Io''@;'; put 'put ''MCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxBYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO3ZhciB4''@;'; put 'put ''cD1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh4cHx8e30pO2xldCBKSj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5wbGF0Zm9ybUlk''@;'; put 'put ''PWR9Z2V0IG5hdGl2ZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Zm9jdXMoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKSh0dChOaSksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXNJdGVtIiwiIl1dfSksY30pKCksSTg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLmRpcmVjdGlvbj14cC5W''@;'; put 'put ''RVJUSUNBTCx0aGlzLmZvY3VzT25Mb2FkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmZvY3VzQ2hhbmdlPW5ldyBFcix0aGlzLl9jdXJyZW50PTB9Z2V0IGZvY3VzYWJsZUl0ZW1zKCl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuX2ZvY3VzYWJsZUl0ZW1zOnRoaXMu''@;'; put 'put ''Y2xyS2V5Rm9jdXNJdGVtcz90aGlzLmNscktleUZvY3VzSXRlbXMudG9BcnJheSgpOltdfXNldCBmb2N1c2FibGVJdGVtcyhhKXtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCYmKHRoaXMuX2ZvY3VzYWJsZUl0ZW1zPWEsdGhpcy5pbml0aWFsaXplRm9jdXMoKSl9Z2V0IG5hdGl2ZUVsZW1l''@;'; put 'put ''bnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRJdGVtKCl7cmV0dXJuIHRoaXMuZm9jdXNh''@;'; put 'put ''YmxlSXRlbXNbdGhpcy5fY3VycmVudF19Z2V0IGN1cnJlbnRJdGVtRWxlbWVudCgpe3JldHVybiB0aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ/dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50OnRoaXMuY3VycmVudEl0ZW19bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JJdGVtVXBkYXRlcygpKSx0aGlzLmluaXRpYWxpemVGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVLZXlib2FyZEV2ZW50KGEpe2lmKHRoaXMuY3VycmVu''@;'; put 'put ''dEl0ZW1FbGVtZW50IT09YS50YXJnZXQpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO3RoaXMucG9zaXRpb25JblJhbmdlKGQpJiYodGhpcy5jdXJyZW50PWQpfXRoaXMucHJldktleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKT90''@;'; put 'put ''aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQtMSk6dGhpcy5uZXh0S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50KzEpOmEuY29kZT09PXdvLkhvbWU/dGhpcy5tb3ZlVG8oMCk6YS5jb2RlPT09d28uRW5kJiZ0aGlz''@;'; put 'put ''Lm1vdmVUbyh0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSxURihhKX1zZXRDbGlja2VkSXRlbUN1cnJlbnQoYSl7Y29uc3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7ZD4tMSYmdGhpcy5tb3ZlVG8oZCl9Zm9jdXNDdXJyZW50KCl7dGhpcy5jdXJyZW50SXRlbS5mb2N1''@;'; put 'put ''cygpLHRoaXMuZm9jdXNDaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1tb3ZlVG8oYSl7dGhpcy5wb3NpdGlvbkluUmFuZ2UoYSkmJih0aGlzLmN1cnJlbnQ9YSx0aGlzLmZvY3VzQ3VycmVudCgpKX1wb3NpdGlvbkluUmFuZ2UoYSl7cmV0dXJuIGE+PTAmJmE8dGhpcy5mb2N1c2FibGVJdGVt''@;'; put 'put ''cy5sZW5ndGh9Y3VycmVudEZvY3VzSXNOb3RGaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudC0xPj0wfWN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5fY3VycmVudCsxPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWluaXRpYWxpemVGb2N1cygpe3RoaXMu''@;'; put 'put ''Zm9jdXNhYmxlSXRlbXMmJnRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD49dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoLTEpLHRoaXMuZm9jdXNPbkxvYWQmJih0aGlzLmN1cnJlbnRJ''@;'; put 'put ''dGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KCkpKX1uZXh0S2V5UHJlc3NlZChhKXtjb25zdCBkPWwyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2UgeHAuVkVSVElDQUw6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd247Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBk''@;'; put 'put ''PT09d28uQXJyb3dSaWdodDtjYXNlIHhwLkJPVEg6cmV0dXJuIGQ9PT13by5BcnJvd0Rvd258fGQ9PT13by5BcnJvd1JpZ2h0O2RlZmF1bHQ6cmV0dXJuITF9fXByZXZLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSB4cC5WRVJUSUNB''@;'; put 'put ''TDpyZXR1cm4gZD09PXdvLkFycm93VXA7Y2FzZSB4cC5IT1JJWk9OVEFMOnJldHVybiBkPT09d28uQXJyb3dMZWZ0O2Nhc2UgeHAuQk9USDpyZXR1cm4gZD09PXdvLkFycm93VXB8fGQ9PT13by5BcnJvd0xlZnQ7ZGVmYXVsdDpyZXR1cm4hMX19Z2V0SXRlbVBvc2l0aW9uKGEpe3JldHVybiB0''@;'; put 'put ''aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLmZvY3VzYWJsZUl0ZW1zLmluZGV4T2YoYSk6dGhpcy5mb2N1c2FibGVJdGVtcy5tYXAoZD0+ZC5uYXRpdmVFbGVtZW50KS5pbmRleE9mKGEpfWxpc3RlbkZvckl0ZW1VcGRhdGVzKCl7cmV0dXJuIHRoaXMuY2xyS2V5Rm9jdXNJdGVtcy5jaGFuZ2Vz''@;'; put 'put ''LnN1YnNjcmliZSgoKT0+e3RoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyS2V5Rm9jdXMiLCIiXV0sY29udGVudFF1''@;'; put 'put ''ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxKSiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXli''@;'; put 'put ''b2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246WyJjbHJEaXJlY3Rpb24iLCJkaXJlY3Rpb24iXSxmb2N1c09uTG9hZDpbImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxm''@;'; put 'put ''b2N1c2FibGVJdGVtczpbImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6RDdlLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRp''@;'; put 'put ''KCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxCRj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp''@;'; put 'put ''O2NvbnN0IEw4PW5ldyBNaSgiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2NsYXNzIER5ZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwp''@;'; put 'put ''fWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0''@;'; put 'put ''cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hb''@;'; put 'put ''bF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10''@;'; put 'put ''aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBJeWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVu''@;'; put 'put ''c2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlz''@;'; put 'put ''Lm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBTRXt9ZnVuY3Rpb24gUUooYyl7cmV0dXJuW2Mse3Byb3ZpZGU6U0UsdXNlRXhpc3Rpbmc6Y31dfWNsYXNzIEx5ZSBleHRlbmRzIEl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50''@;'; put 'put ''cyksdGhpcy5fZm9jdXNDaGFuZ2VkPW5ldyBUZShudWxsKX1nZXQgZm9jdXNDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlZC5hc09ic2VydmFibGUoKX1zZWxlY3QobCl7dGhpcy5tb2RlbCE9PWwmJih0aGlzLm1vZGVsPWwsdGhpcy5fZm9jdXNDaGFuZ2VkLm5leHQobCkpfX1s''@;'; put 'put ''ZXQgUnllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRpbmc9ITEsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgVGUoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IHF4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0''@;'; put 'put ''Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1''@;'; put 'put ''dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgRHllfXNl''@;'; put 'put ''bGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVj''@;'; put 'put ''dGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMu''@;'; put 'put ''c2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNl''@;'; put 'put ''bGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO1FKKCgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5zZWxlY3Rpb25TZXJ2aWNlPWgsdGhpcy5wbGF0''@;'; put 'put ''Zm9ybUlkPWYsdGhpcy5wc2V1ZG9Gb2N1cz1uZXcgTHllLHRoaXMub3B0aW9uRGF0YT1bXSx0aGlzLmhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCksdGhpcy5yZW5kZXJlcj1hLmNyZWF0ZVJlbmRlcmVyKG51bGwsbnVsbCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQg''@;'; put 'put ''dHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCBsaXN0Ym94KCl7cmV0dXJuIHRoaXMuX2xpc3Rib3h9c2V0IGxpc3Rib3goYSl7dGhpcy5fbGlzdGJveD1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgdGV4dElu''@;'; put 'put ''cHV0KCl7cmV0dXJuIHRoaXMuX3RleHRJbnB1dH1zZXQgdGV4dElucHV0KGEpe3RoaXMuX3RleHRJbnB1dD1hLHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24iLGQ9PiF0aGlzLmhhbmRsZVRleHRJbnB1dChkKSksdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWZvY3VzSW5w''@;'; put 'put ''dXQoKXt0aGlzLnRleHRJbnB1dCYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50ZXh0SW5wdXQuZm9jdXMoKX1mb2N1c0ZpcnN0QWN0aXZlKCl7aWYodGhpcy5vcHRpb25EYXRhLmxlbmd0aD4wKWlmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5pc0VtcHR5KCkpdGhp''@;'; put 'put ''cy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhWzBdKTtlbHNle2xldCBhO2E9dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWxbMF06dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVj''@;'; put 'put ''dGlvbk1vZGVsLm1vZGVsO2NvbnN0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmQoaD0+aC52YWx1ZT09PWEpO3RoaXMucHNldWRvRm9jdXMuc2VsZWN0KGR8fHRoaXMub3B0aW9uRGF0YVswXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgiYXV0byIpfX1hZGRPcHRpb25WYWx1ZXMoYSl7''@;'; put 'put ''dGhpcy5vcHRpb25EYXRhPWF9aGFuZGxlRm9jdXNTdWJzY3JpcHRpb24oKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2F8fCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsPW51bGwpfSl9bW92ZUZvY3VzVG8oYSl7bGV0IGQ9dGhpcy5vcHRpb25EYXRhLmZpbmRJ''@;'; put 'put ''bmRleChoPT5oLmVxdWFscyh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsKSk7YT09PWQxLlVQPy0xPT09ZHx8MD09PWQ/ZD10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE6ZC0tOmE9PT1kMS5ET1dOJiYoLTE9PT1kfHxkPT09dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xP2Q9MDpkKyspLHRoaXMucHNl''@;'; put 'put ''dWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVtkXSksdGhpcy5zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbCgpfW9wZW5BbmRNb3ZlVG8oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4/dGhpcy5tb3ZlRm9jdXNUbyhhKToodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2UucGlwZShp''@;'; put 'put ''ZCgxKSkuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLm1vdmVGb2N1c1RvKGEpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWhhbmRsZVRleHRJbnB1dChhKXtsZXQgZD0hMTtjb25zdCBoPWwyKGEua2V5KTtpZihhKXN3aXRjaChoKXtjYXNlIHdvLkVudGVyOnRoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZS5vcGVuJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZT90aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlKHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3QodGhpcy5w''@;'; put 'put ''c2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSksZD0hMCk7YnJlYWs7Y2FzZSB3by5TcGFjZTp0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbnx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwLGQ9ITApO2JyZWFrO2Nhc2Ugd28uQXJyb3dVcDp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKSx0''@;'; put 'put ''aGlzLm9wZW5BbmRNb3ZlVG8oZDEuVVApLGQ9ITA7YnJlYWs7Y2FzZSB3by5BcnJvd0Rvd246dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKGQxLkRPV04pLGQ9ITA7YnJlYWs7ZGVmYXVsdDphLmtleSE9PXdvLlRhYiYmKCF0aGlzLnNlbGVjdGlv''@;'; put 'put ''blNlcnZpY2UubXVsdGlzZWxlY3RhYmxlfHxhLmtleSE9PXdvLkJhY2tzcGFjZSkmJmEua2V5IT09d28uRXNjYXBlJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9cmV0dXJuIGR9c2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoYT0ic21vb3Ro''@;'; put 'put ''Iil7dGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbCYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC5lbC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6YSxibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSl9cHJldmVudFZpZXdwb3J0U2Nyb2xsaW5n''@;'; put 'put ''KGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl7UnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuZm9jdXNPdXRPZkNvbXBvbmVudChkKSYmKHRo''@;'; put 'put ''aXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMuY29tcG9uZW50Q2RSZWYmJnRoaXMuY29tcG9uZW50Q2RSZWYuZGV0ZWN0Q2hhbmdlcygpKX0pfWZvY3VzT3V0T2ZDb21wb25lbnQoYSl7Y29uc3QgZD1hLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuISh0''@;'; put 'put ''aGlzLnRleHRJbnB1dC5jb250YWlucyhkKXx8dGhpcy50cmlnZ2VyLmNvbnRhaW5zKGQpfHx0aGlzLmxpc3Rib3guY29udGFpbnMoZCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoS3MpLGFyKFJ5ZSksYXIoR3MpKX0sYy5cdTAy''@;'; put 'put ''NzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSk7bGV0IE95ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsbmIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sJGwsc2EsQkYsWmMsc2QseGIsQWJdLFpjLHNkXX0pLGN9KSgpLGpGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBOHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaW5wdXQtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJj''@;'; put 'put ''bHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOlt0aShbbGQsazAsYWQsY2RdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOno3ZSxkZWNsczoxMCx2YXJzOjcsY29u''@;'; put 'put ''c3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlk''@;'; put 'put ''ZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJk''@;'; put 'put ''YW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoVGkoajdlKSxrcigwKSxRZSgxLFA3ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksa3IoNCwxKSxRZSg1LEY3ZSwxLDAsImNkcy1pY29uIiwzKSxRZSg2LEg3ZSwxLDAsImNkcy1pY29uIiw0KSx5ZSgpLFFlKDcsTjdlLDEsMCwibmctY29udGVudCIsMCksUWUo''@;'; put 'put ''OCxWN2UsMSwwLCJuZy1jb250ZW50IiwwKSxRZSg5LEI3ZSwxLDAsIm5nLWNvbnRlbnQiLDApLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLFJlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxDZSgzKSxSZSgibmdJZiIsZC5zaG93''@;'; put 'put ''SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbWmksVXMsdWMscXNdLGVuY2Fwc3Vs''@;'; put 'put ''YXRpb246Mn0pLGN9KSgpLGYxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEsakYsZCxoLGYsXyksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0''@;'; put 'put ''KHp1LDEwKSx0dChGbyksdHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySW5wdXQiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLGVR''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNd''@;'; put 'put ''fSksY30pKCksekY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IFRlKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFB5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sZVEsc2FdXX0pLGN9KSgpO2NvbnN0IEh5ZT0vZCsuK20rLit5Ky9pLE55ZT0vbSsuK2QrLit5Ky9pLFZ5ZT0vZCt8bSt8eSsvaSxCeWU9L1xk''@;'; put 'put ''Ky9nLGp5ZT0vTW9iaS9pLHp5ZT0vXHUyMDBmL2csVUY9IllZWVkiLE1FPXtuYW1lOiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixVRl19LFdGPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixVRl19LFV5ZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0''@;'; put 'put ''OltVRiwiTU0iLCJERCJdfTtmdW5jdGlvbiBuUShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgJHlle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSxfPSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhj''@;'; put 'put ''bHVkZWQ9ZCx0aGlzLmlzRGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPV99Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgcDF7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlz''@;'; put 'put ''LmRhdGU9ZH1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2Nv''@;'; put 'put ''bnN0IGE9bmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgcDEoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IHAxKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21w''@;'; put 'put ''YXJpc29uU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6''@;'; put 'put ''YCR7bH1gfX1jbGFzcyBxeWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuY2FsZW5kYXI9bCx0aGlzLnNlbGVjdGVkRGF5PWEsdGhpcy5mb2N1c2FibGVEYXk9ZCx0aGlzLnRvZGF5PWgsdGhpcy5maXJzdERheU9mV2Vlaz1mLHRoaXMuZXhjbHVkZWREYXRlcz1fLHRoaXMuY3Vyck1v''@;'; put 'put ''bnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5zZXRG''@;'; put 'put ''b2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmll''@;'; put 'put ''dyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSxfPVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlzLnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9u''@;'; put 'put ''dGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKF89dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9jYWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFy''@;'; put 'put ''VmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsXyksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29t''@;'; put 'put ''cGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSxfPWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuIShfPj1oJiZfPD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+bmV3ICR5ZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRl''@;'; put 'put ''ZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gWXllKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxlbmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFy''@;'; put 'put ''LmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCBfPTA7Xzw2O18rKylmW19dPWguc2xpY2UoNypfLDcqKF8rMSkpO3JldHVybiBmfWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2Vs''@;'; put 'put ''ZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbdGhpcy5zZWxlY3RlZERheS5kYXRlLTFdLmlzU2VsZWN0ZWQ9ITApfWluaXRpYWxpemVGb2N1c2FibGVEYXkoKXt0aGlzLmZvY3VzYWJsZURheSYmdGhp''@;'; put 'put ''cy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuZm9jdXNhYmxlRGF5KT90aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApOnRoaXMuc2VsZWN0ZWREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRGF5KT8odGhpcy5zZXRGb2N1c2FibGVG''@;'; put 'put ''bGFnKHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhp''@;'; put 'put ''cy50b2RheS5jbG9uZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IHAxKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vy''@;'; put 'put ''ck1vbnRoRGF5Vmlld3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfX1sZXQgVGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRoc1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhp''@;'; put 'put ''cy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygp''@;'; put 'put ''fWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKSxoPWNPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IF89''@;'; put 'put ''MDtfPDc7XysrKWEucHVzaCh7ZGF5OmRbX10sbmFycm93OmhbX119KTtpZihmPjApe2NvbnN0IF89YS5zcGxpY2UoMCxmKTthLnB1c2goLi4uXyl9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlh''@;'; put 'put ''dGVkPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuQWJicmV2aWF0ZWQpLnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPXVPKHRoaXMubG9jYWxlLGtjLlN0YW5kYWxvbmUsbmEuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXpl''@;'; put 'put ''Rmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIEJsKGMpW3FvLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiB4Xyhj''@;'; put 'put ''LGwpe3JldHVybiB0ZChCbChjKVtxby5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2NhbGUseTAuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihLZCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpO2NsYXNzIGQye2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhpcy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVu''@;'; put 'put ''ZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBkMih0aGlzLnllYXItMSwxMSk6bmV3IGQyKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3Jl''@;'; put 'put ''dHVybiAxMT09PXRoaXMubW9udGg/bmV3IGQyKHRoaXMueWVhcisxLDApOm5ldyBkMih0aGlzLnllYXIsdGhpcy5tb250aCsxKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPW5RKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5t''@;'; put 'put ''YXAoKGEsZCk9Pm5ldyBwMSh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IFBmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgYmUsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJD''@;'; put 'put ''aGFuZ2U9bmV3IGJlLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgYmUsdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgYmV9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1n''@;'; put 'put ''ZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2Fs''@;'; put 'put ''ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMu''@;'; put 'put ''c2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBkMih0''@;'; put 'put ''aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGQyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEp''@;'; put 'put ''KX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGQyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1t''@;'; put 'put ''b3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlz''@;'; put 'put ''LnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShh''@;'; put 'put ''KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBkMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZv''@;'; put 'put ''Y3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hh''@;'; put 'put ''bmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgcDEodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1''@;'; put 'put ''bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLE84PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pv''@;'; put 'put ''bmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRl''@;'; put 'put ''eD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gUnModGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodXAoKSxJYSgoKT0+UnModGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoR3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0''@;'; put 'put ''aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IHAxKDAsMCwxKSxtYXhEYXRlOm5ldyBwMSg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PU1FLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5j''@;'; put 'put ''bGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0''@;'; put 'put ''dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcChfPT5wYXJzZUludChfLDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKGQsaC0x''@;'; put 'put ''LGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IHAxKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKF89PnBhcnNlSW50KF8sMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoZCxoLTEsZil9ZWxz''@;'; put 'put ''ZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgcDEoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0''@;'; put 'put ''cmluZygpOiIwIitkLF89aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/Zit0aGlzLmRlbGltaXRlcnNbMF0rXyt0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PVdGP18r''@;'; put 'put ''dGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK18rdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWEpcmV0dXJu''@;'; put 'put ''IG51bGw7Y29uc3QgZD1hLm1hdGNoKEJ5ZSk7aWYoIWR8fDMhPT1kLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdFtoLGYsX109ZDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TUU/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoXyxmLGgpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1h''@;'; put 'put ''dD09PVdGP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKF8saCxmKTp0aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZShoLGYsXyl9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2Fs''@;'; put 'put ''ZURpc3BsYXlGb3JtYXQ9SHllLnRlc3QoYSk/TUU6TnllLnRlc3QoYSk/V0Y6VXllLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2FsZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNl''@;'; put 'put ''KHp5ZSwiIikuc3BsaXQoVnllKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQuIERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+''@;'; put 'put ''LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PW5RKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLF89K2QtMSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aChfKXx8IXRoaXMuaXNWYWxpZERhdGUoZixfLFQpKXJldHVybiBudWxsO2Nv''@;'; put 'put ''bnN0IFc9ZnVuY3Rpb24gV3llKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDAp''@;'; put 'put ''LGR9KGYpO3JldHVybi0xIT09Vz9uZXcgRGF0ZShXLF8sVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoVGIpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxEYj0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgYmUsdGhpcy5fZGlydHlDaGFuZ2U9bmV3IGJlfWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp''@;'; put 'put ''cnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdG9nZ2xlU2VydmljZT1k''@;'; put 'put ''LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4gdGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9b25E''@;'; put 'put ''YXlWaWV3Rm9jdXMoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWx9c2VsZWN0RGF5KCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRheVZpZXcuZGF5TW9kZWwpLHRo''@;'; put 'put ''aXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5tYXJrQXNEaXJ0eSgpLHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoUGYpLHR0KEtzKSx0dChEYiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6WyJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdG''@;'; put 'put ''b2N1cygpfSksTmUoMSkseWUoKSksMiZhJiYoZHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1Nl''@;'; put 'put ''bGVjdGVkKSxUcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLENlKDEp''@;'; put 'put ''LGdyKCIgIixkLmRheVZpZXcuZGF5TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksaVE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPV8sdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9''@;'; put 'put ''Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZv''@;'; put 'put ''Y3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChsMihhLmtleSkpe2Nhc2Ugd28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIHdvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OmEu''@;'; put 'put ''cHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Ugd28uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0''@;'; put 'put ''aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2''@;'; put 'put ''aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNj''@;'; put 'put ''cmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmlldygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IHF5ZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5''@;'; put 'put ''LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChUYiksdHQoUGYpLHR0KE84KSx0dChQOCks''@;'; put 'put ''dHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6''@;'; put 'put ''W1sxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLCJyb2xlIiwiaGVhZGluZyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImNhbGVuZGFyLXJvdyIsNCwibmdGb3IiLCJuZ0Zvck9m''@;'; put 'put ''Il0sWyJyb2xlIiwiaGVhZGluZyIsMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJihtZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLFFlKDIsVTdlLDIsMiwidGgiLDIpLHllKCksUWUoMyxZN2UsMiwxLCJ0ciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2FsZW5kYXJW''@;'; put 'put ''aWV3TW9kZWwuY2FsZW5kYXJWaWV3KSl9LGRlcGVuZGVuY2llczpbclEseHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHhFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRo''@;'; put 'put ''aXMuX2lzVXNlckFnZW50TW9iaWxlPWp5ZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5uZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRo''@;'; put 'put ''PDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEY4PSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLnBvc2l0aW9uPXgwWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3Vy''@;'; put 'put ''cmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNo''@;'; put 'put ''YW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksb1E9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9ZCx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9aCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWYsdGhpcy5fZWxSZWY9Xyx0aGlzLl9mb2N1c2Vk''@;'; put 'put ''TW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlz''@;'; put 'put ''cGxheWVkQ2FsZW5kYXIubW9udGh9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPWwyKGEua2V5KTtkPT09d28uQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5k''@;'; put 'put ''ZXg+MD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dEb3duJiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8Nj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250''@;'; put 'put ''aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4KzYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09d28uQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD41JiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRN''@;'; put 'put ''b250aEluZGV4PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4LTYsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19Y2hhbmdlTW9udGgoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZU1vbnRoKGEpLHRoaXMuX3ZpZXdNYW5hZ2Vy''@;'; put 'put ''U2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gYT09PXRoaXMuX2ZvY3VzZWRNb250aEluZGV4PzA6LTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEY4KSx0dChUYiksdHQoUGYpLHR0KE84KSx0dChOaSkp''@;'; put 'put ''fSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9udGhwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSwyJmEmJmRyKCJtb250aHBp''@;'; put 'put ''Y2tlciIsITApfSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo''@;'; put 'put ''IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxXN2UsMiw0LCJidXR0b24iLDApLDImYSYmUmUoIm5nRm9yT2YiLGQubW9udGhOYW1lcyl9LGRlcGVuZGVuY2llczpbeHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIElie2NvbnN0cnVjdG9yKGwp''@;'; put 'put ''e3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlzLnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55''@;'; put 'put ''ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgSWIodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBJYigobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZ''@;'; put 'put ''ZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGFRPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9YSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnllYXJSYW5nZU1v''@;'; put 'put ''ZGVsPW5ldyBJYih0aGlzLmNhbGVuZGFyWWVhciksdGhpcy5fZm9jdXNlZFllYXI9dGhpcy5jYWxlbmRhclllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlz''@;'; put 'put ''Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9bDIoYS5rZXkpO2Q9PT13by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpOmQ9PT13by5BcnJvd0Rv''@;'; put 'put ''d24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDEpKTpkPT09d28uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoNSkpOmQ9PT13by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5p''@;'; put 'put ''bmNyZW1lbnRGb2N1c1llYXJCeSgtNSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1wcmV2aW91c0RlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhp''@;'; put 'put ''cy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpfWN1cnJlbnREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5LnllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLmN1cnJl''@;'; put 'put ''bnREZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW5leHREZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwubmV4dERlY2FkZSgpfWdldFRhYkluZGV4KGEpe3JldHVybiB0aGlzLnllYXJSYW5n''@;'; put 'put ''ZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy5fZm9jdXNlZFllYXI9dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuY2FsZW5kYXJZZWFyKT90aGlzLmNhbGVuZGFyWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMuX2ZvY3VzZWRZ''@;'; put 'put ''ZWFyPT09YT8wOi0xfWluY3JlbWVudEZvY3VzWWVhckJ5KGEpe3RoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuX2ZvY3VzZWRZZWFyK2EsdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9YT4wP3RoaXMueWVhclJhbmdlTW9k''@;'; put 'put ''ZWwubmV4dERlY2FkZSgpOnRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKSksdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQZiksdHQo''@;'; put 'put ''RjgpLHR0KE84KSx0dChOaSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXllYXJwaWNrZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURv''@;'; put 'put ''d24oZil9KSwyJmEmJmRyKCJ5ZWFycGlja2VyIiwhMCl9LGRlY2xzOjksdmFyczo3LGNvbnN0czpbWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJs''@;'; put 'put ''ZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXIiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJidXR0b24iLDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSkscXQoMiwi''@;'; put 'put ''Y2RzLWljb24iLDIpLHllKCksbWUoMywiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSkscXQoNCwiY2RzLWljb24iLDMpLHllKCksbWUoNSwiYnV0dG9uIiwxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2Fk''@;'; put 'put ''ZSgpfSkscXQoNiwiY2RzLWljb24iLDQpLHllKCkoKSxtZSg3LCJkaXYiLDUpLFFlKDgsRzdlLDIsNCwiYnV0dG9uIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzRGVjYWRlKSxDZSgxKSxUcigidGl0''@;'; put 'put ''bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNr''@;'; put 'put ''ZXJDdXJyZW50RGVjYWRlKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDEpLFRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLENlKDIpLFJlKCJuZ0Zvck9mIixkLnll''@;'; put 'put ''YXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3FzLHhzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxsUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1k''@;'; put 'put ''LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9N''@;'; put 'put ''T05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0''@;'; put 'put ''cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5n''@;'; put 'put ''ZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGOCksdHQoUGYpLHR0KFRiKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2Vy''@;'; put 'put ''Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJi''@;'; put 'put ''dXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUo''@;'; put 'put ''MCwiZGl2IiwwKSxOZSgxKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksTmUoNSkseWUoKSxtZSg2LCJidXR0b24iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxOZSg3KSx5ZSgpKCksbWUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxxdCgxMCwiY2RzLWljb24iLDcpLHllKCksbWUoMTEsImJ1dHRvbiIsNikseHQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSkscXQoMTIsImNkcy1pY29uIiw4KSx5ZSgpLG1lKDEzLCJidXR0b24iLDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLHF0KDE0LCJjZHMtaWNvbiIsOSkseWUoKSgpKCkscXQo''@;'; put 'put ''MTUsImNsci1jYWxlbmRhciIpLG1lKDE2LCJkaXYiLDApLE5lKDE3KSx5ZSgpKSwyJmEmJihDZSgxKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksQ2UoMyksVHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3Ry''@;'; put 'put ''aW5nKSxDZSgxKSxncigiICIsZC5jYWxlbmRhck1vbnRoLCIgIiksQ2UoMSksVHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksQ2UoMSksZ3IoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksQ2UoMiksVHIoImFyaWEtbGFiZWwiLGQuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRN''@;'; put 'put ''b250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxDZSgxKSxUcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxDZSgzKSxvcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOltpUSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksY1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncz1hLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWR9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlzRGF5''@;'; put 'put ''Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChGOCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12''@;'; put 'put ''aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxk''@;'; put 'put ''cigiZGF0ZXBpY2tlciIsITApKX0sZmVhdHVyZXM6W3RpKFtPOF0pXSxkZWNsczozLHZhcnM6Myxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoUWUoMCwkN2UsMSwwLCJjbHItbW9udGhwaWNrZXIiLDApLFFlKDEscTdlLDEsMCwiY2xyLXllYXJwaWNr''@;'; put 'put ''ZXIiLDApLFFlKDIsSzdlLDEsMCwiY2xyLWRheXBpY2tlciIsMCkpLDImYSYmKFJlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc1llYXJWaWV3KSxDZSgxKSxSZSgibmdJZiIsZC5pc0RheVZpZXcpKX0sZGVwZW5kZW5jaWVzOltvUSxhUSxsUSxaaV0sZW5jYXBz''@;'; put 'put ''dWxhdGlvbjoyfSksY30pKCksTGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2UsRWUsWmUsb3Qpe3N1cGVyKG90LEVlLHdlLFplKSx0aGlzLnJlbmRlcmVyPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2U9aCx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1fLHRoaXMuZGF0ZUlPU2VydmljZT1ULHRoaXMuY29tbW9uU3RyaW5ncz1XLHRoaXMuZm9jdXNTZXJ2aWNlPWllLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWdlLHRo''@;'; put 'put ''aXMuY29udHJvbENsYXNzU2VydmljZT13ZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPVplLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPW90LHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb2N1c1NlcnZpY2UuZm9jdXND''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKGV0PT57dGhpcy5mb2N1cz1ldH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfSkpfXNldCBjbHJQb3Np''@;'; put 'put ''dGlvbihhKXthJiZ4MFthXSYmKHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9uPXgwW2FdKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQg''@;'; put 'put ''b3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNh''@;'; put 'put ''YmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMu''@;'; put 'put ''aW5pdGlhbGl6ZUNhbGVuZGFyKCk6dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGF0ZUNoYW5nZXMoKSl9Z2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJ''@;'; put 'put ''T1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEudG9EYXRlKCkpO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbCx7U0VMRUNURURfREFURTpkfSl8fHRoaXMuY29t''@;'; put 'put ''bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGV9bGlzdGVuRm9yRGF0ZUNoYW5nZXMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShjcCh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSkpLnN1YnNjcmliZShhPT57aWYodGhpcy5pc0VuYWJsZWQpe2NvbnN0IGQ9dGhpcy5nZXRUb2dnbGVCdXR0b25MYWJlbChh''@;'; put 'put ''KSxoPXRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQ7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwiYXJpYS1sYWJlbCIsZCksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoaCwidGl0bGUiLGQpfX0pfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmluaXRpYWxpemVDYWxlbmRhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoS3MpLHR0KFBmKSx0dCh4RSksdHQoRGIpLHR0KFA4KSx0dChFcyksdHQoekYpLHR0KEY4KSx0dChjZCksdHQoT2YsOCksdHQoazApLHR0''@;'; put 'put ''KGxkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKFg3ZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJz''@;'; put 'put ''OjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1''@;'; put 'put ''dHM6e2NsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiJ9LGZlYXR1cmVzOlt0aShbYWQsS3MsSWYsUzgsVGIsY2QsekYsazAsUDgsUGYseEUsRGIsRjgsbGRdKSxlb10sbmdDb250ZW50U2VsZWN0b3JzOmE5ZSxkZWNsczoxMyx2YXJzOjE0LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy''@;'; put 'put ''b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHItaW5wdXQtZ3Jv''@;'; put 'put ''dXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjbHJGb2N1c1RyYXAiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xs''@;'; put 'put ''VG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJj''@;'; put 'put ''bGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsiYWN0aW9uQnV0dG9uIiwi''@;'; put 'put ''Il0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2xyRm9jdXNUcmFwIiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hl''@;'; put 'put ''Y2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaShzOWUpLGtyKDApLFFlKDEsSjdlLDEsMCwibGFiZWwiLDApLG1lKDIsImRpdiIsMSkoMywiZGl2Iiwy''@;'; put 'put ''KSg0LCJkaXYiLDMpLGtyKDUsMSksUWUoNixRN2UsMywxLCJidXR0b24iLDQpLFFlKDcsZTllLDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw1KSx5ZSgpLFFlKDgsdDllLDEsMCwiY2RzLWljb24iLDYpLFFlKDksbjllLDEsMCwiY2RzLWljb24iLDcpLHllKCksUWUoMTAscjll''@;'; put 'put ''LDEsMCwibmctY29udGVudCIsMCksUWUoMTEsaTllLDEsMCwibmctY29udGVudCIsMCksUWUoMTIsbzllLDEsMCwibmctY29udGVudCIsMCkseWUoKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNz''@;'; put 'put ''KCkpLENlKDIpLGRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLENlKDIpLFJlKCJuZ0lmIixkLmlzRW5hYmxlZCksQ2UoMSksUmUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lk''@;'; put 'put ''ZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93SGVscGVyKSxDZSgxKSxSZSgibmdJZiIsZC5z''@;'; put 'put ''aG93SW52YWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbY1EsWmksVXMsdWMsd2IsTWIscXMsU2IsTXBdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCRGPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUOHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGll''@;'; put 'put ''LGdlLHdlLEVlLFplLG90KXtzdXBlcihhLExiLGQsXyxmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPV8sdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9Vyx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1pZSx0aGlzLmRhdGVwaWNrZXJFbmFi''@;'; put 'put ''bGVkU2VydmljZT1nZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9d2UsdGhpcy5wbGF0Zm9ybUlkPUVlLHRoaXMuZm9jdXNTZXJ2aWNlPVplLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1vdCx0aGlzLmRhdGVDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUo''@;'; put 'put ''YSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5k''@;'; put 'put ''YXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSl9c2V0IG1heChhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWF4RGF0ZShhKX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZDpudWxsfXNl''@;'; put 'put ''dCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZCh1ZChhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMucGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9T''@;'; put 'put ''ZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFJzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhpcy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNv''@;'; put 'put ''bnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0''@;'; put 'put ''eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9u''@;'; put 'put ''KCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlzLnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBp''@;'; put 'put ''Zih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsX109YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCtfKSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5m''@;'; put 'put ''b2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoUDgpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG''@;'; put 'put ''cm9tQ29udGFpbmVyKFBmKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih4RSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKERiKSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMo''@;'; put 'put ''KXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRhdGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11''@;'; put 'put ''cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7ZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UmJih0aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheT1oP25ldyBwMShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpKTpudWxsKSx0aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmlu''@;'; put 'put ''ZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNr''@;'; put 'put ''ZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5''@;'; put 'put ''KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1Nl''@;'; put 'put ''cnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIEd5ZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYm''@;'; put 'put ''Yy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYo''@;'; put 'put ''dGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJuISF0aGlzLmNvbnRyb2x9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiBXaSh0aGlzLmRhdGVwaWNrZXJIYXNG''@;'; put 'put ''b3JtQ29udHJvbCgpKS5waXBlKElhKGE9PmEpLFNhKCgpPT50aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzKSxJYSgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVE''@;'; put 'put ''YXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBkYXRl''@;'; put 'put ''RGF0ZShhLnRvRGF0ZSgpLCEwKSl9bGlzdGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoSWEoKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJv''@;'; put 'put ''bC5jb250cm9sLm1hcmtBc1RvdWNoZWQoKSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKElhKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv''@;'; put 'put ''bnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShJYShhPT4hIWEpKS5zdWJzY3JpYmUoKCk9PnRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5m''@;'; put 'put ''b2N1c0lucHV0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChhcyksdHQoRWEpLHR0KE5pKSx0dChGbyksdHQoenUsMTApLHR0KExiLDgpLHR0KFA4LDgpLHR0KFBmLDgpLHR0KHhFLDgpLHR0KERiLDgp''@;'; put 'put ''LHR0KEdzKSx0dCh6Riw4KSx0dChPOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2V0Rm9jdXNTdGF0''@;'; put 'put ''ZXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSgiY2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblZhbHVlQ2hhbmdlKGYudGFyZ2V0KX0pLDImYSYmKHQxKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCksVHIoInBsYWNlaG9sZGVyIixkLnBs''@;'; put 'put ''YWNlaG9sZGVyVGV4dCkoInR5cGUiLGQuaW5wdXRUeXBlKSxkcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGF0ZTpbImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4IixkaXNhYmxlZDoiZGlzYWJsZWQifSxvdXRwdXRzOntk''@;'; put 'put ''YXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3RpKFtPOF0pLGVvXX0pLGN9KSgpLHFGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlP''@;'; put 'put ''U2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8dGhpcy5kYXRl''@;'; put 'put ''SU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSlyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0Rh''@;'; put 'put ''dGUoKSlyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChQOCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTppdSx1c2VFeGlzdGluZzpjLG11bHRpOiEwfV0pXX0pLGN9KSgpLFh5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMobzEsczEsaDgsY21lLHVtZSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyx3RSxzZCx4YixzYSx5RSxaY11dfSksY30pKCk7bmV3IE1pKHZvaWQgMCk7bGV0IGV3ZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoZG1lLGhtZSxvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCks''@;'; put 'put ''S0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFVzLDcpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh''@;'; put 'put ''LGQpezImYSYmZHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOlt0aShbYWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOnU5ZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoYzllKSxrcigwKSxrcigxLDEp''@;'; put 'put ''LFFlKDIsbDllLDEsMCwibGFiZWwiLDApKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltaaSxVc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWEY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxL''@;'; put 'put ''RixkLGgsZixfKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYXMpLHR0KEVhKSx0dCh6dSwxMCksdHQoRm8pLHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltl''@;'; put 'put ''b119KSxjfSkoKSx0d2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEE4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3Rh''@;'; put 'put ''dGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMo''@;'; put 'put ''KX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoT2YsOCksdHQoY2QpLHR0KGswKSx0dChsZCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsWEYsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYm''@;'; put 'put ''KFRyKCJyb2xlIixkLnJvbGUpLGRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxp''@;'; put 'put ''bmUifSxmZWF0dXJlczpbdGkoW2swLGxkLGNkLEs1XSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpfOWUsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNs''@;'; put 'put ''YXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwi''@;'; put 'put ''c3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs''@;'; put 'put ''InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkodjllKSxrcigwKSxRZSgxLGQ5ZSwxLDAsImxhYmVsIiwwKSxtZSgyLCJkaXYiLDEpLGtyKDMsMSksbWUoNCwiZGl2IiwyKSxRZSg1LGg5''@;'; put 'put ''ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDYsZjllLDEsMCwiY2RzLWljb24iLDMpLFFlKDcscDllLDEsMCwiY2RzLWljb24iLDQpLFFlKDgsZzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxtOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwh''@;'; put 'put ''ZC5sYWJlbCYmZC5hZGRHcmlkKCkpLENlKDEpLGRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJl''@;'; put 'put ''KCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxud2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHdFLHNhXSxaY119KSxjfSkoKSxyd2U9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLFpjLHdFLHNhXSxaY119KSxjfSkoKSxIOD0oKCk9''@;'; put 'put ''PntjbGFzcyBjIGV4dGVuZHMgQTh7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLm11''@;'; put 'put ''bHRpPSExfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZShhPT57YSYmKHRoaXMubXVsdGk9YS52YWx1ZUFjY2Vzc29yIGluc3RhbmNlb2YgZGIsdGhpcy5jb250cm9sPWEpfSkpfXdyYXBwZXJD''@;'; put 'put ''bGFzcygpe3JldHVybiB0aGlzLm11bHRpPyJjbHItbXVsdGlzZWxlY3Qtd3JhcHBlciI6ImNsci1zZWxlY3Qtd3JhcHBlciJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE9mLDgpLHR0KGNkKSx0dChrMCksdHQobGQpKX0sYy5cdTAyNzVjbXA9''@;'; put 'put ''d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNlbGVjdC1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxkYiw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLm11bHRpcGxlPWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3RpKFtsZCxrMCxhZCxj''@;'; put 'put ''ZF0pLGVvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RTllLGRlY2xzOjEwLHZhcnM6OCxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxb''@;'; put 'put ''InNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFs''@;'; put 'put ''aWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKHg5ZSksa3IoMCksUWUoMSxiOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSx5OWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNix3OWUsMSwwLCJjZHMtaWNvbiIs''@;'; put 'put ''NCkseWUoKSxRZSg3LEM5ZSwxLDAsIm5nLWNvbnRlbnQiLDApLFFlKDgsUzllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxNOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIs''@;'; put 'put ''ZC5jb250cm9sQ2xhc3MoKSksQ2UoMSksUmUoIm5nQ2xhc3MiLGQud3JhcHBlckNsYXNzKCkpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dIZWxwZXIpLENlKDEpLFJlKCJuZ0lmIixkLnNo''@;'; put 'put ''b3dJbnZhbGlkKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltaaSxVcyx1Yyxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTjg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSxIOCxkLGgsZixfKSx0''@;'; put 'put ''aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6''@;'; put 'put ''Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltlb119KSxjfSkoKSxpd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKG8xLHMxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLCRsLHNhLFpjXSxaY119KSxjfSkoKSx1UT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQTh7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbigpe2xldCBsO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4obHx8KGw9eGEoYykpKShkfHxjKX19KCksYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRleHRhcmVhLWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci1mb3JtLWNvbnRyb2wi''@;'; put 'put ''LCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbdGkoW2xkLGswLGFkLGNkXSksZW9dLG5nQ29udGVudFNlbGVjdG9yczpPOWUsZGVjbHM6MTAsdmFy''@;'; put 'put ''czo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci10ZXh0YXJlYS13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIi''@;'; put 'put ''LCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwi''@;'; put 'put ''c3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKFRpKFI5ZSksa3IoMCksUWUoMSxrOWUsMSwwLCJsYWJlbCIsMCksbWUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLGtyKDQsMSksUWUoNSxBOWUsMSwwLCJjZHMtaWNvbiIsMyksUWUoNixUOWUsMSwwLCJjZHMtaWNvbiIsNCkseWUoKSxRZSg3LEQ5ZSwxLDAsIm5nLWNvbnRl''@;'; put 'put ''bnQiLDApLFFlKDgsSTllLDEsMCwibmctY29udGVudCIsMCksUWUoOSxMOWUsMSwwLCJuZy1jb250ZW50IiwwKSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxDZSgxKSxSZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksQ2UoMyksUmUoIm5n''@;'; put 'put ''SWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0hlbHBlciksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFVzLHVjLHFz''@;'; put 'put ''XSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvd2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFQ4e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSx1USxkLGgsZixfKSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFz''@;'; put 'put ''KSx0dChFYSksdHQoenUsMTApLHR0KEZvKSx0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl''@;'; put 'put ''czpbZW9dfSksY30pKCksc3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhvMSxzMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6''@;'; put 'put ''W1tvbywkbCxzYSxaY10sWmNdfSksY30pKCksZFE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxaYyxUeWUsT3llLFh5ZSxl''@;'; put 'put ''USxld2UsbndlLGl3ZSxzd2UscndlLFB5ZV19KSxjfSkoKSxoUT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgp''@;'; put 'put ''LGF3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpO2NsYXNzIEVFe31sZXQgUmI9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBiZX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo''@;'; put 'put ''aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl''@;'; put 'put ''Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IGJlfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8''@;'; put 'put ''KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8''@;'; put 'put ''MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp''@;'; put 'put ''bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj''@;'; put 'put ''dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u''@;'; put 'put ''ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy''@;'; put 'put ''biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu''@;'; put 'put ''Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2Vu''@;'; put 'put ''OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs''@;'; put 'put ''KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBrRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1''@;'; put 'put ''YnNjcmliZSgpO2NvbnN0IF89dGhpcy5fYWxsLmZpbmRJbmRleChUPT5ULmZpbHRlcj09PWEpO18+PTAmJnRoaXMuX2FsbC5zcGxpY2UoXywxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm''@;'; put 'put ''KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF''@;'; put 'put ''bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoYXIoRXApLGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3Mga0V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgQUU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m''@;'; put 'put ''IGtFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Y30pLGN9KSgpLE9iPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBBRXtjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRU''@;'; put 'put ''b2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPV8sdGhpcy5vcGVuQ2hhbmdlPW5ldyBFcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9RGMoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6dnUuVkVSVElDQUwsc2lkZTpvZC5B''@;'; put 'put ''RlRFUixhbmNob3I6UHMuRU5ELGNvbnRlbnQ6UHMuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29w''@;'; put 'put ''ZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmUnModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9''@;'; put 'put ''c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09u''@;'; put 'put ''RGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8''@;'; put 'put ''fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChFcyksdHQoS3MpLHR0KEdzKSx0dChOaSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh''@;'; put 'put ''LGQpe2lmKDEmYSYmUm8oUDllLDUsTmkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOlsiY2xyRGdGaWx0ZXJPcGVuIiwib3BlbiJdLGN1c3RvbUZpbHRlcjpbImNsckRnRmlsdGVyIiwiY3VzdG9tRmlsdGVyIl19LG91dHB1dHM6e29w''@;'; put 'put ''ZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6RUUsdXNlRXhpc3Rpbmc6Y31dKSxlbyx2YV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii''@;'; put 'put ''LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJhbmNob3IiLCIiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQ''@;'; put 'put ''b3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsckZvY3VzVHJhcCIsIiIsInJvbGUiLCJkaWFsb2ciLDEsImRhdGFncmlkLWZpbHRlciIs''@;'; put 'put ''MywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwi''@;'; put 'put ''YnV0dG9uIiwwLDEpLHF0KDIsImNkcy1pY29uIiwyKSx5ZSgpLFFlKDMsRjllLDUsMywiZGl2IiwzKSksMiZhJiYoZHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLFRyKCJhcmlhLWxhYmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFM''@;'; put 'put ''YWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLENlKDIpLFRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJjbGUiOiJmaWx0ZXItZ3JpZCIpLENlKDEp''@;'; put 'put ''LFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''Olt3YixNYixxcyxTYixNcCxGSl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkZ7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7''@;'; put 'put ''bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgVEV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9''@;'; put 'put ''bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBlb2YgaHx8aDxhKXx8bnVsbCE9PWQmJigi''@;'; put 'put ''bnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBKNXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgYmUsdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxl''@;'; put 'put ''KCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93''@;'; put 'put ''LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiB0aGlzLl9oaWdofXNldCBoaWdoKGwp''@;'; put 'put ''e2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3cs''@;'; put 'put ''aGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5j''@;'; put 'put ''ZW9mIEo1JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIFRFP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBURSYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDpsPT09dGhpcyl9fWxldCBmUT0oKCk9Pntj''@;'; put 'put ''bGFzcyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihhKSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9Xyx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBFcix0aGlz''@;'; put 'put ''Lm9wZW49ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF19c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiZBcnJheS5pc0FycmF5KGEpP2EmJihhWzBdIT09dGhpcy5maWx0ZXIubG93fHxhWzFdIT09dGhp''@;'; put 'put ''cy5maWx0ZXIuaGlnaCkmJih0aGlzLmZpbHRlci5sb3c9Im51bWJlciI9PXR5cGVvZiBhWzBdP2FbMF06bnVsbCx0aGlzLmZpbHRlci5oaWdoPSJudW1iZXIiPT10eXBlb2YgYVsxXT9hWzFdOm51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1''@;'; put 'put ''ZXM9YX1zZXQgY3VzdG9tTnVtZXJpY0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2Yga0U/YTpuZXcgSjUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlcyYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWVzLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZXMpfWdl''@;'; put 'put ''dCBtYXhQbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWF4UGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1heFZhbHVlfWdldCBtaW5QbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMubWluUGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm1p''@;'; put 'put ''blZhbHVlfWdldCBsb3coKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmxvdyYmaXNGaW5pdGUodGhpcy5maWx0ZXIubG93KT90aGlzLmZpbHRlci5sb3c6bnVsbH1zZXQgbG93KGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRoaXMuZmlsdGVyLmxvdz8odGhpcy5maWx0''@;'; put 'put ''ZXIubG93PWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5sb3c9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlz''@;'; put 'put ''LmZpbHRlci5oaWdoXSkpfWdldCBoaWdoKCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5oaWdoJiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5oaWdoKT90aGlzLmZpbHRlci5oaWdoOm51bGx9c2V0IGhpZ2goYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIu''@;'; put 'put ''aGlnaD8odGhpcy5maWx0ZXIuaGlnaD1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIuaGlnaD1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhp''@;'; put 'put ''cy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2Ny''@;'; put 'put ''aWJlKCl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRmYpLHR0KGgxKSx0dChFcyksdHQoS3MpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhIOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOnttaW5QbGFjZWhvbGRlcjpbImNsckZpbHRlck1pblBs''@;'; put 'put ''YWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOlsiY2xyRGdOdW1lcmljRmlsdGVyIiwi''@;'; put 'put ''Y3VzdG9tTnVtZXJpY0ZpbHRlciJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjYsdmFyczo4LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xy''@;'; put 'put ''RGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''XSxbImlucHV0X2xvdyIsIiJdLFsxLCJkYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2VyIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImhpZ2giLDEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIi''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIl0sWyJpbnB1dF9oaWdoIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLWRnLWZpbHRlciIsMCkseHQoImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3Blbj1mfSksbWUoMSwiaW5wdXQiLDEsMiks''@;'; put 'put ''eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvdz1mfSkseWUoKSxxdCgzLCJzcGFuIiwzKSxtZSg0LCJpbnB1dCIsNCw1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGlnaD1mfSkseWUoKSgpKSwyJmEmJihSZSgiY2xyRGdGaWx0ZXIi''@;'; put 'put ''LGQucmVnaXN0ZXJlZCkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5sb3cpKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxDZSgzKSxSZSgibmdNb2RlbCIsZC5o''@;'; put 'put ''aWdoKSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSksVHIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W09iLGFFLFdhLEJzLE9zXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBERXtjb25zdHJ1Y3RvcihsLGE9ITEp''@;'; put 'put ''e3RoaXMucHJvcD1sLHRoaXMuZXhhY3Q9YSx0aGlzLm5lc3RlZFByb3A9bmV3IEpGKGwpfWFjY2VwdHMobCxhKXtjb25zdCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh0eXBlb2YgZD4idSIpJiYodGhpcy5leGFjdD8oIiIrZCkudG9Mb3dlckNhc2UoKT09PWE6''@;'; put 'put ''KCIiK2QpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihhKT49MCl9fWNsYXNzIFE1e2NvbnN0cnVjdG9yKGwpe3RoaXMuZmlsdGVyRm49bCx0aGlzLl9jaGFuZ2VzPW5ldyBiZSx0aGlzLl9sb3dlckNhc2VWYWx1ZT0iIix0aGlzLl9yYXdWYWx1ZT0iIn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBsb3dlckNhc2VWYWx1ZSgpe3JldHVybiB0aGlzLl9sb3dlckNhc2VWYWx1ZX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIERFP3twcm9wZXJ0eTp0aGlzLmZpbHRlckZuLnByb3AsdmFsdWU6dGhpcy52YWx1''@;'; put 'put ''ZX06dGhpc31nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5fcmF3VmFsdWV9c2V0IHZhbHVlKGwpe2x8fChsPSIiKSxsIT09dGhpcy5fcmF3VmFsdWUmJih0aGlzLl9yYXdWYWx1ZT1sLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPWwudG9Mb3dlckNhc2UoKS50cmltKCksdGhpcy5fY2hhbmdlcy5uZXh0''@;'; put 'put ''KGwpKX1pc0FjdGl2ZSgpe3JldHVybiEhdGhpcy52YWx1ZX1hY2NlcHRzKGwpe3JldHVybiB0aGlzLmZpbHRlckZuLmFjY2VwdHMobCx0aGlzLmxvd2VyQ2FzZVZhbHVlKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBRNSYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiBERT90aGlzLmZp''@;'; put 'put ''bHRlckZuIGluc3RhbmNlb2YgREUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC52YWx1ZT09PXRoaXMudmFsdWU6bD09PXRoaXMpfX1sZXQgUUY9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEFFe2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoYSksdGhpcy5kb21B''@;'; put 'put ''ZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT1fLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IEVyLHRoaXMub3Blbj0hMSx0aGlzLnN1YnM9W119c2V0IGN1c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRl''@;'; put 'put ''cihhIGluc3RhbmNlb2Yga0U/YTpuZXcgUTUoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7''@;'; put 'put ''dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pv''@;'; put 'put ''bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEu''@;'; put 'put ''dW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEZmKSx0dChoMSksdHQoRXMpLHR0KEtzKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctc3RyaW5nLWZpbHRlciJdXSx2aWV3''@;'; put 'put ''UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhOOWUsNSksUm8oT2IsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXQ9aC5maXJzdCksc2koaD1haSgpKSYmKGQuZmlsdGVyQ29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntwbGFjZWhvbGRlcjpbImNsckZpbHRlclBs''@;'; put 'put ''YWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21TdHJpbmdGaWx0ZXI6WyJjbHJEZ1N0cmluZ0ZpbHRlciIsImN1c3RvbVN0cmluZ0ZpbHRlciJdLHZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVD''@;'; put 'put ''aGFuZ2UifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOkVFLHVzZUV4aXN0aW5nOmN9XSksZW9dLGRlY2xzOjMsdmFyczo1LGNvbnN0czpbWzMsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIiwiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0''@;'; put 'put ''ZSIsIm9mZiIsIm5hbWUiLCJzZWFyY2giLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsInBsYWNlaG9sZGVyIiwibmdNb2RlbENoYW5nZSJdLFsiaW5wdXQiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJjbHItZGctZmlsdGVyIiwwKSx4dCgiY2xyRGdGaWx0ZXJP''@;'; put 'put ''cGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vcGVuPWZ9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pLHllKCkoKSksMiZhJiYoUmUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpKCJjbHJEZ0ZpbHRl''@;'; put 'put ''ck9wZW4iLGQub3BlbiksQ2UoMSksUmUoIm5nTW9kZWwiLGQudmFsdWUpKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclZhbHVlKSxUcigiYXJpYS1sYWJlbCIsZC5wbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbT2IsV2EsQnMsT3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgp''@;'; put 'put ''LGtwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi''@;'; put 'put ''XV0sZmVhdHVyZXM6W2VvXX0pLGN9KSgpLFY4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudCsr''@;'; put 'put ''fXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxCOD0oKCk9PntjbGFzcyBjIGV4dGVuZHMg''@;'; put 'put ''dzh7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJvd0FjdGlv''@;'; put 'put ''bnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KFY4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0''@;'; put 'put ''dXJlczpbZW9dfSksY30pKCksaDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgVGUodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5h''@;'; put 'put ''YmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9Y2xvc2UoKXt0aGlzLnRvZ2ds''@;'; put 'put ''ZVN0YXRlPSExLHRoaXMuX3N0YXRlLm5leHQodGhpcy50b2dnbGVTdGF0ZSksdGhpcy5idXR0b24mJih0aGlzLmJ1dHRvbi5mb2N1cygpLHRoaXMuYnV0dG9uPW51bGwpfW9wZW4oYSxkKXt0aGlzLmNhY2hlPWEsdGhpcy5idXR0b249ZCx0aGlzLnRvZ2dsZVN0YXRlPSEwLHRoaXMuX3N0YXRl''@;'; put 'put ''Lm5leHQodGhpcy50b2dnbGVTdGF0ZSl9dG9nZ2xlKGEsZCl7dGhpcy5pc1Jvd09wZW4oYSl8fCFhP3RoaXMuY2xvc2UoKTp0aGlzLm9wZW4oYSxkKX1pc1Jvd09wZW4oYSl7cmV0dXJuISghdGhpcy50b2dnbGVTdGF0ZXx8dGhpcy5jYWNoZSE9PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGV0YWlsU2VydmljZT1hLHRoaXMuZXhwYW5kYWJsZUNvdW50PTB9Z2V0IGhhc0V4''@;'; put 'put ''cGFuZGFibGVSb3coKXtyZXR1cm4hdGhpcy5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQmJnRoaXMuZXhwYW5kYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmV4cGFuZGFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihoMikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB3OHtjb25zdHJ1Y3RvcihhLGQsaCl7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItZGct''@;'; put 'put ''cm93IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRhdGFncmlkIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZGFibGVDb3VudD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlQ291bnQuaGFzRXhwYW5kYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEpLHR0KGtwLDgpLHR0KGo4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7Y2xhc3MgSUV7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''dGhpcy5wcm9wPWwsdGhpcy5uZXN0ZWRQcm9wPW5ldyBKRihsKX1jb21wYXJlKGwsYSl7bGV0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKSxoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUoYSk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBkJiYoZD1kLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpLCJzdHJpbmciPT10eXBlb2YgaCYmKGg9aC50b0xvd2VyQ2FzZSgpKSx0eXBlb2YgZD4idSJ8fG51bGw9PT1kP3R5cGVvZiBoPiJ1Inx8bnVsbD09PWg/MDoxOnR5cGVvZiBoPiJ1Inx8bnVsbD09PWh8fGQ8aD8tMTpkPmg/MTowfX12YXIgSTA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5V''@;'; put 'put ''TlNPUlRFRD0wXT0iVU5TT1JURUQiLGNbYy5BU0M9MV09IkFTQyIsY1tjLkRFU0M9LTFdPSJERVNDIixjfShJMHx8e30pO2xldCBlSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1w''@;'; put 'put ''bGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3Jh''@;'; put 'put ''cHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhWOWUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFs''@;'; put 'put ''IiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLEI5ZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsRWMpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5f''@;'; put 'put ''cmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IGJlfWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlz''@;'; put 'put ''LnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZlcnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNl''@;'; put 'put ''ci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEsZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlz''@;'; put 'put ''Ll9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlz''@;'; put 'put ''LnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5leHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKFJiKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIGYyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0wXT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FM''@;'; put 'put ''Q1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9XSURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oZjJ8fHt9KTtsZXQgZWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0''@;'; put 'put ''ZXA9bmV3IGJlLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAuYXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKElhKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5f''@;'; put 'put ''cmVuZGVyU3RlcC5uZXh0KGYyLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0''@;'; put 'put ''KGYyLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChmMi5DQUxDVUxBVEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rv''@;'; put 'put ''cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0SD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQg''@;'; put 'put ''bWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNp''@;'; put 'put ''emUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9yZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6''@;'; put 'put ''ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKGgxKSxhcihlZykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pLGN9KSgpLG5IPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtScyh0aGlzLnBs''@;'; put 'put ''YXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0''@;'; put 'put ''fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3Ro''@;'; put 'put ''aXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9Zix0aGlzLmNvbW1vblN0cmluZz1fLHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPURjKCksdGhpcy5yZXNpemVTdGFydGVkT25L''@;'; put 'put ''ZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRvcklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50''@;'; put 'put ''fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMu''@;'; put 'put ''Y29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tlck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAi''@;'; put 'put ''LGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZp''@;'; put 'put ''Y2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIsYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5j''@;'; put 'put ''b2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIu''@;'; put 'put ''c2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tl''@;'; put 'put ''ckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1RyYWNr''@;'; put 'put ''ZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNz''@;'; put 'put ''KHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/dGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6''@;'; put 'put ''ZWRCeS0xMik6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMil9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRL''@;'; put 'put ''ZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0''@;'; put 'put ''aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1u''@;'; put 'put ''UmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRy''@;'; put 'put ''YWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIGwyKGEua2V5KT09PXdvLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gbDIoYS5rZXkpPT09d28uQXJyb3dSaWdodH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8YykodHQodEgpLHR0KEZvKSx0dChObyksdHQobkgpLHR0KEVzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihSbyhq''@;'; put 'put ''OWUsNSksUm8oejllLDUpKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCksc2koaD1haSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo1LGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJhZ2dhYmxlIiwiIiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjbHJHcm91cCIsImNsckRyYWdTdGFydCIsImNsckRyYWdNb3ZlIiwiY2xyRHJhZ0VuZCJd''@;'; put 'put ''LFsiY29sdW1uSGFuZGxlIiwiIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdLFsicmVzaXplVHJhY2tlciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImJ1dHRvbiIsMCwxKSx4dCgiY2xyRHJhZ1N0YXJ0Iixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBkLnNob3dUcmFja2VyKCl9KSgiY2xyRHJhZ01vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm1vdmVUcmFja2VyKGYuZHJhZ1Bvc2l0aW9uLm1vdmVYKX0pKCJjbHJEcmFnRW5kIixmdW5jdGlvbigpe3JldHVybiBkLmhpZGVUcmFja2VyKCl9KSx5ZSgpLG1lKDIs''@;'; put 'put ''InNwYW4iLDIpLE5lKDMpLHllKCkscXQoNCwiZGl2IiwzLDQpKSwyJmEmJihSZSgiY2xyR3JvdXAiLGQuY29sdW1uU2VwYXJhdG9ySWQpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVz''@;'; put 'put ''Y3JpcHRpb25JZCksQ2UoMiksVHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W0dKXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx0Zz0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgQUV7Y29uc3RydWN0b3IoYSxkLGgsZixfKXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFpbFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPV8sdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IEVyLHRoaXMuZmlsdGVyVmFsdWVDaGFu''@;'; put 'put ''Z2U9bmV3IEVyLHRoaXMuc29ydGVkQ2hhbmdlPW5ldyBFcix0aGlzLnNob3dTZXBhcmF0b3I9ITAsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9STAuVU5TT1JURUQsdGhpcy5fc29ydGVkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1b''@;'; put 'put ''XSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKSl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShh''@;'; put 'put ''KXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgSUUoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3Nv''@;'; put 'put ''cnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IElFKGEpOmE/dGhpcy5fc29ydEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IElFKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEpc3dpdGNoKGEpe2RlZmF1bHQ6Y2FzZSBJMC5VTlNPUlRFRDp0aGlzLl9zb3J0LmNsZWFyKCk7YnJlYWs7Y2FzZSBJMC5BU0M6dGhpcy5zb3J0KCExKTticmVhaztj''@;'; put 'put ''YXNlIEkwLkRFU0M6dGhpcy5zb3J0KCEwKX19Z2V0IHNvcnRlZCgpe3JldHVybiB0aGlzLl9zb3J0ZWR9c2V0IHNvcnRlZChhKXshYSYmdGhpcy5zb3J0ZWQ/KHRoaXMuX3NvcnRlZD0hMSx0aGlzLl9zb3J0LmNsZWFyKCkpOmEmJiF0aGlzLnNvcnRlZCYmdGhpcy5zb3J0KCl9c2V0IHVwZGF0''@;'; put 'put ''ZUZpbHRlclZhbHVlKGEpe3RoaXMuZmlsdGVyP3RoaXMuZmlsdGVyIGluc3RhbmNlb2YgUTU/KCghYXx8InN0cmluZyIhPXR5cGVvZiBhKSYmKGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1JiYoKCFh''@;'; put 'put ''fHwhKGEgaW5zdGFuY2VvZiBBcnJheSkpJiYoYT1bbnVsbCxudWxsXSksMj09PWEubGVuZ3RoJiYoYVswXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzBdfHxhWzFdIT09dGhpcy5maWx0ZXIudmFsdWVbMV0pJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9c2V0''@;'; put 'put ''IHByb2plY3RlZEZpbHRlcihhKXthJiYodGhpcy5kZWxldGVGaWx0ZXIoKSx0aGlzLmN1c3RvbUZpbHRlcj0hMCl9Z2V0IHNvcnRhYmxlKCl7cmV0dXJuISF0aGlzLl9zb3J0Qnl9Z2V0IGFyaWFTb3J0KCl7c3dpdGNoKHRoaXMuX3NvcnRPcmRlcil7ZGVmYXVsdDpjYXNlIEkwLlVOU09SVEVE''@;'; put 'put ''OnJldHVybiJub25lIjtjYXNlIEkwLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEkwLkRFU0M6cmV0dXJuImRlc2NlbmRpbmcifX1nZXQgc29ydERpcmVjdGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0''@;'; put 'put ''YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRlciBpbnN0YW5jZW9mIFE1fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIEo1KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlz''@;'; put 'put ''LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGVILHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IENFKGVILHRoaXMudmNyKX1u''@;'; put 'put ''Z09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5z''@;'; put 'put ''ZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBE''@;'; put 'put ''ZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlz''@;'; put 'put ''Ll9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9JMC5ERVNDOkkwLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3NvcnRPcmRlcj09PUkwLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0SWNvbj10aGlzLl9zb3J0T3JkZXI9PT1JMC5ERVNDPyJhcnJv''@;'; put 'put ''dyBkb3duIjoiYXJyb3ciLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0ZWQ9ITAsdGhpcy5zb3J0ZWRDaGFuZ2UuZW1pdCghMCkpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNo''@;'; put 'put ''YW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpfSl9bGlzdGVuRm9yU29ydGluZ0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fc29ydC5jaGFuZ2Uuc3Vic2Ny''@;'; put 'put ''aWJlKGE9Pnt0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuc29ydE9yZGVyIT09STAuVU5TT1JURUQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRPcmRlcj1JMC5VTlNPUlRFRCx0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMu''@;'; put 'put ''X3NvcnRPcmRlciksdGhpcy5zb3J0SWNvbj1udWxsLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCksdGhpcy5zb3J0ZWQmJmEuY29tcGFyYXRvciE9PXRoaXMuX3NvcnRCeSYmKHRoaXMuX3NvcnRlZD0hMSx0aGlzLnNvcnRlZENoYW5nZS5lbWl0KCExKSl9KX1zZXR1cERlZmF1bHRGaWx0ZXIo''@;'; put 'put ''YSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IEo1KG5ldyBURShhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IFE1KG5ldyBERShhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9dGhpcy5p''@;'; put 'put ''bml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTEUpLHR0KEZmKSx0dChhcyksdHQoaDIpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImNsci1kZy1jb2x1bW4iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxFRSw1KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnByb2plY3RlZEZpbHRlcj1mLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSxob3N0VmFyczoz''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLXNvcnQiLGQuYXJpYVNvcnQpLGRyKCJkYXRhZ3JpZC1jb2x1bW4iLCEwKSl9LGlucHV0czp7ZmlsdGVyU3RyaW5nUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1Bs''@;'; put 'put ''YWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6WyJjbHJGaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciIsImZp''@;'; put 'put ''bHRlck51bWJlck1pblBsYWNlaG9sZGVyIl0sY29sVHlwZTpbImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbImNsckRnU29ydEJ5Iiwic29ydEJ5Il0sc29ydE9yZGVyOlsiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSxz''@;'; put 'put ''b3J0ZWQ6WyJjbHJEZ1NvcnRlZCIsInNvcnRlZCJdLHVwZGF0ZUZpbHRlclZhbHVlOlsiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVy''@;'; put 'put ''VmFsdWVDaGFuZ2UiLHNvcnRlZENoYW5nZToiY2xyRGdTb3J0ZWRDaGFuZ2UifSxmZWF0dXJlczpbdGkoW1M4LElmLEtzXSksZW8sdmFdLG5nQ29udGVudFNlbGVjdG9yczpROWUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbMSwiZGF0YWdyaWQtY29sdW1uLWZsZXgiXSxbImNsYXNzIiwiZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uLXRpdGxlIiwidHlwZSIsImJ1dHRvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRmlsdGVy''@;'; put 'put ''TWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIiwiY2xyRmlsdGVyVmFsdWVDaGFuZ2UiLDQsIm5nSWYiXSxbImNvbHVtblRpdGxlIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIs''@;'; put 'put ''NCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJd''@;'; put 'put ''LFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9s''@;'; put 'put ''ZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEo5ZSksbWUoMCwi''@;'; put 'put ''ZGl2IiwwKSxRZSgxLFk5ZSwzLDIsImJ1dHRvbiIsMSksa3IoMiksUWUoMyxXOWUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMiksUWUoNCxHOWUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDMpLFFlKDUsJDllLDEsMCwibmctdGVtcGxhdGUiLG51bGwsNCxFYyksUWUoNyxLOWUs''@;'; put 'put ''MiwxLCJzcGFuIiw1KSxRZSg4LFg5ZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSx5ZSgpKSwyJmEmJihDZSgxKSxSZSgibmdJZiIsZC5zb3J0YWJsZSksQ2UoMiksUmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksQ2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmIm51bWJlciI9PWQuY29sVHlwZSksQ2UoMyksUmUoIm5nSWYiLCFkLnNvcnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbUUYsZlEsZ1EsWmkscmQscXNdLGVuY2Fwc3VsYXRp''@;'; put 'put ''b246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLEFwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5f''@;'; put 'put ''Y2hhbmdlPW5ldyBiZSx0aGlzLl9hbGxDaGFuZ2VzPW5ldyBiZSx0aGlzLml0ZXJhdG9yVHJhY2tCeT0oZixfKT0+X31nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFu''@;'; put 'put ''Z2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRlbXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdl''@;'; put 'put ''dCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYm''@;'; put 'put ''dGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMuX3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRl''@;'; put 'put ''bXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlz''@;'; put 'put ''Ll9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNtYXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWNhblRyYWNrQnkoKXtyZXR1cm4hIXRoaXMuZGF0YWdyaWRUcmFja0J5fHxBcnJheS5pc0FycmF5KHRoaXMuYWxsKX10cmFja0J5KGEsZCl7aWYodGhpcy5kYXRhZ3JpZFRyYWNrQnkpcmV0''@;'; put 'put ''dXJuIHRoaXMuZGF0YWdyaWRUcmFja0J5KGEpO2lmKEFycmF5LmlzQXJyYXkodGhpcy5hbGwpKXJldHVybiBkPWQ/P3RoaXMuYWxsLmluZGV4T2YoYSksdGhpcy5pdGVyYXRvclRyYWNrQnkoZCxhKTt0aHJvdyBuZXcgRXJyb3IoImltcHJvcGVyIGNhbGwgdG8gSXRlbXMjdHJhY2tCeSIpfWVt''@;'; put 'put ''aXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVkPXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmls''@;'; put 'put ''dGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29ydEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVk''@;'; put 'put ''fHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5fcGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9w''@;'; put 'put ''YWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFuZ2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEZmKSxhcihMRSksYXIoRXApKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxVOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRp''@;'; put 'put ''ZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy52Y3I9Zix0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgeHModGhpcy52Y3IsdGhpcy50ZW1wbGF0ZSx0aGlzLmRpZmZlcnMpLHRoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZShfPT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9Xyx0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMuaXRlcmF0b3JU''@;'; put 'put ''cmFja0J5PWEsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRl''@;'; put 'put ''KHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh6YSksdHQoejYpLHR0KEFwKSx0dChhcykpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEZ0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlu''@;'; put 'put ''cHV0czp7cmF3SXRlbXM6WyJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxySD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEo''@;'; put 'put ''dGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbInJvbGUiLCJy''@;'; put 'put ''b3ciLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRl''@;'; put 'put ''ci1pbWFnZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxRZSgxLGV2ZSwxLDAsImRpdiIsMSksbWUoMiwic3BhbiIsMiksUWUoMyx0dmUsMSwwLCJuZy1jb250ZW50IiwzKSx5ZSgpKCkpLDImYSYmKGRyKCJkYXRhZ3JpZC1lbXB0eSIsZC5lbXB0''@;'; put 'put ''eURhdGFncmlkKSxDZSgxKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSxDZSgyKSxSZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbWmldLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGlIPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmln''@;'; put 'put ''Z2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko''@;'; put 'put ''KSxvSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMuZWw9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNpZ25wb3N0SWRT''@;'; put 'put ''ZXJ2aWNlPWYsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj1fLHRoaXMucGxhdGZvcm1JZD1XLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmRvY3VtZW50PVR9bmdPbkluaXQoKXt0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyLnRyaWdnZXJFbD10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmFyaWFFeHBhbmRlZD1hO2NvbnN0IGQ9dGhpcy5pc09wZW47dGhpcy5pc09wZW49YSwhdGhpcy5pc09wZW4mJmQmJnRoaXMuZm9jdXNPbkNsb3NlKCl9KSx0aGlzLnNp''@;'; put 'put ''Z25wb3N0SWRTZXJ2aWNlLmlkLnN1YnNjcmliZShhPT50aGlzLmFyaWFDb250cm9sPWEpKSx0aGlzLmFkZERlZmF1bHRBcmlhTGFiZWwodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9b25T''@;'; put 'put ''aWducG9zdFRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfWFkZERlZmF1bHRBcmlhTGFiZWwoYSl7YS5oYXNBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8YS5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHRoaXMuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LnNpZ25wb3N0VG9nZ2xlKX1mb2N1c09uQ2xvc2UoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KE5pKSx0dChFcyksdHQob0gpLHR0KGlIKSx0dChMcyksdHQoR3MpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRy''@;'; put 'put ''czpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5k''@;'; put 'put ''ZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxkcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLHNIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEp''@;'; put 'put ''e3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQs''@;'; put 'put ''aCl7aWYoMSZhJiZJbyhoLFJFLDUpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigic2lnbnBvc3QiLCEwKX0sZmVhdHVyZXM6W3RpKFtLcyxpSCx7cHJvdmlkZTpM''@;'; put 'put ''OCx1c2VFeGlzdGluZzpOaX0sb0hdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbWFsbCIsImJ0bi1s''@;'; put 'put ''aW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLG52ZSwzLDEsIm5nLWNvbnRhaW5lciIsMCksa3IoMSkpLDImYSYmUmUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W1ppLFJFLHFzXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5j''@;'; put 'put ''ZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhydmUsNSks''@;'; put 'put ''MiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxpdmUsMSwwLCJuZy10''@;'; put 'put ''ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFRwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGFILHRoaXMudmNyKS5jZWxsVmlld31uZ09uSW5pdCgp''@;'; put 'put ''e3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBDRShhSCx0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGFzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dLGNvbnRlbnRRdWVyaWVz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsc0gsNCksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiZGF0YWdyaWQtY2Vs''@;'; put 'put ''bCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG1RPTAs''@;'; put 'put ''UGI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFl1e2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBUZSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgYmUsbVErKyx0aGlzLmV4cGFuZGFibGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIr''@;'; put 'put ''bVF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5uZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09VXUuTE9BRElORyYmdGhpcy5fYW5pbWF0ZS5u''@;'; put 'put ''ZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBaOD1mdW5jdGlvbihjKXty''@;'; put 'put ''ZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30oWjh8fHt9KSxhYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11bHRpPTJdPSJNdWx0aSIsY30oYWF8fHt9''@;'; put 'put ''KTtsZXQgbEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8ob3ZlLDUpLDImYSl7bGV0IGg7c2koaD1haSgp''@;'; put 'put ''KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksUWUoMCxzdmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGN3ZT0wLFk4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0h''@;'; put 'put ''MSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBiZSx0aGlzLl9zZWxlY3Rpb25UeXBlPWFhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVj''@;'; put 'put ''dGlvbiIrY3dlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0''@;'; put 'put ''aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIGFhLk5vbmU6YnJlYWs7Y2FzZSBhYS5TaW5nbGU6e2xldCBfLFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYhdGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9u''@;'; put 'put ''UmVmJiZ0aGlzLl9pdGVtcy5jYW5UcmFja0J5KCkmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeSh0aGlzLmN1cnJlbnRTaW5nbGUpKSxoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKTt0aGlzLnByZXZT''@;'; put 'put ''aW5nbGVTZWxlY3Rpb25SZWY9PT1nZSYmKF89VyxUPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihnZSk+LTEmJmYucHVzaChnZSl9KSx0aGlzLl9pdGVtcy5zbWFydCYmIV8mJihUPSEwKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudFNpbmdsZT1fKX0sMCk7YnJlYWt9Y2Fz''@;'; put 'put ''ZSBhYS5NdWx0aTp7bGV0IF89dGhpcy5jdXJyZW50LnNsaWNlKCksVD0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpJiYodGhpcy5wcmV2U2VsZWN0aW9u''@;'; put 'put ''UmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChXPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoVykpfSkpLGguZm9yRWFjaCgoVyxpZSk9Pntjb25zdCBnZT10aGlzLl9pdGVtcy50cmFja0J5KFcsaWUpO3RoaXMubG9ja2VkUmVmcy5pbmRleE9m''@;'; put 'put ''KGdlKT4tMSYmZi5wdXNoKGdlKX0pLF8ubGVuZ3RoPjAmJihoLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9dGhpcy5faXRlbXMudHJhY2tCeShXLGllKSx3ZT10aGlzLnByZXZTZWxlY3Rpb25SZWZzLmluZGV4T2YoZ2UpO3dlPi0xJiYoX1t3ZV09VyxUPSEwKX0pLHRoaXMuX2l0ZW1zLnNt''@;'; put 'put ''YXJ0JiYoXz1fLmZpbHRlcihXPT5oLmluZGV4T2YoVyk+LTEpLHRoaXMuY3VycmVudC5sZW5ndGghPT1fLmxlbmd0aCYmKFQ9ITApKSxzZXRUaW1lb3V0KCgpPT57VCYmKHRoaXMuY3VycmVudD1fKX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoZjgoMCkpLnN1YnNjcmliZSgoKT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0''@;'; put 'put ''aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PWFhLk5vbmU/ZGVsZXRlIHRoaXMuY3VycmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVu''@;'; put 'put ''dFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLHRoaXMuX2l0ZW1zLmNhblRyYWNrQnkoKSYmYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10''@;'; put 'put ''aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlw''@;'; put 'put ''ZT09PWFhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMu''@;'; put 'put ''c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlz''@;'; put 'put ''LmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''VHlwZSl7Y2FzZSBhYS5Ob25lOmNhc2UgYWEuU2luZ2xlOmJyZWFrO2Nhc2UgYWEuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTXVsdGl8fCF0''@;'; put 'put ''aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEu''@;'; put 'put ''bGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tl''@;'; put 'put ''ZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuTm9uZXx8dGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''VHlwZT09PWFhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9p''@;'; put 'put ''dGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLl9pdGVtcy5jYW5U''@;'; put 'put ''cmFja0J5KCkmJnRoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaCh0aGlzLl9pdGVtcy50cmFja0J5KGEpKX1kZXNlbGVjdEl0ZW0oYSl7aWYodGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5zbGljZSgwLGEpLmNvbmNhdCh0aGlzLmN1cnJlbnQuc2xpY2UoYSsxKSksYTx0aGlzLnByZXZTZWxl''@;'; put 'put ''Y3Rpb25SZWZzLmxlbmd0aCl7Y29uc3QgZD10aGlzLnByZXZTZWxlY3Rpb25SZWZzLnNwbGljZShhLDEpO3RoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGg9PmghPT1kWzBdKX19Y2FuSXRCZUxvY2tlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlIT09YWEuTm9u''@;'; put 'put ''ZSYmdGhpcy5faXRlbXMuY2FuVHJhY2tCeSgpfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09YWEuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9uVHlwZT09PWFhLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlz''@;'; put 'put ''LmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihBcCksYXIoRmYpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu''@;'; put 'put ''X3ZpZXc9bmV3IFRlKFo4LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3ZpZXcubmV4dChaOC5DQUxDVUxBVEUpKSksdGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhmMi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFo4LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhpcy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3Ro''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGVnKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdUg9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYiSU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVl''@;'; put 'put ''cnlTZWxlY3RvcigiaW5wdXQiKS5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSxPRT0wLG5nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSxaZSl7dGhpcy5zZWxlY3Rpb249YSx0aGlz''@;'; put 'put ''LnJvd0FjdGlvblNlcnZpY2U9ZCx0aGlzLmdsb2JhbEV4cGFuZGFibGU9aCx0aGlzLmV4cGFuZD1mLHRoaXMuZGV0YWlsU2VydmljZT1fLHRoaXMuZGlzcGxheU1vZGU9VCx0aGlzLnZjcj1XLHRoaXMucmVuZGVyZXI9aWUsdGhpcy5lbD1nZSx0aGlzLmNvbW1vblN0cmluZ3M9d2UsdGhpcy5p''@;'; put 'put ''dGVtcz1FZSx0aGlzLmRvY3VtZW50PVplLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWFhLHRo''@;'; put 'put ''aXMuaXRlbUNoYW5nZXM9bmV3IHF4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPSIiLHRoaXMuX3Jvd0FyaWFMYWJlbD0iIix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2VsZWN0YWJsZT0hMCxPRSsrLHRo''@;'; put 'put ''aXMuaWQ9ImNsci1kZy1yb3ciK09FLHRoaXMucmFkaW9JZD0iY2xyLWRnLXJvdy1yZCIrT0UsdGhpcy5jaGVja2JveElkPSJjbHItZGctcm93LWNiIitPRSx0aGlzLmV4cGFuZGFibGVJZD1mLmV4cGFuZGFibGVJZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChZNih0aGlzLmV4cGFuZC5yZXBs''@;'; put 'put ''YWNlLHRoaXMuZXhwYW5kLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbb3QsZXRdKT0+e290JiZldD8odGhpcy5yZXBsYWNlZD0hMCx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSEx''@;'; put 'put ''LHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKSl9KSl9Z2V0IGl0ZW0oKXtyZXR1cm4gdGhpcy5faXRlbX1zZXQgaXRlbShhKXt0aGlzLl9pdGVtPWEsdGhpcy5pdGVtQ2hhbmdlcy5uZXh0KGEpLHRoaXMuY2xy''@;'; put 'put ''RGdTZWxlY3RhYmxlPXRoaXMuX3NlbGVjdGFibGV9Z2V0IGNsckRnU2VsZWN0YWJsZSgpe3JldHVybiF0aGlzLnNlbGVjdGlvbi5pc0xvY2tlZCh0aGlzLml0ZW0pfXNldCBjbHJEZ1NlbGVjdGFibGUoYSl7dGhpcy5pdGVtJiZ0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sImZh''@;'; put 'put ''bHNlIj09PWF8fCExPT09YSksdGhpcy5fc2VsZWN0YWJsZT1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YWEuTm9uZT90aGlzLl9zZWxlY3RlZDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHRoaXMuaXRlbSl9c2V0IHNlbGVjdGVkKGEp''@;'; put 'put ''e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5Ob25lP3RoaXMuX3NlbGVjdGVkPWE6KGEmJnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aT90aGlzLnJhbmdlU2VsZWN0KCk6dGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD1udWxsLHRoaXMuc2VsZWN0aW9u''@;'; put 'put ''LnNldFNlbGVjdGVkKHRoaXMuaXRlbSxhKSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfXNldCBleHBhbmRlZChhKXt0aGlzLmV4cGFuZC5leHBhbmRlZD1hfWdldCBjbHJEZ0RldGFpbE9wZW5MYWJlbCgpe3JldHVybiB0aGlzLl9kZXRhaWxPcGVuTGFiZWw/''@;'; put 'put ''dGhpcy5fZGV0YWlsT3BlbkxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW59c2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKGEpe3RoaXMuX2RldGFpbE9wZW5MYWJlbD1hfWdldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD90aGlz''@;'; put 'put ''Ll9kZXRhaWxDbG9zZUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlfXNldCBjbHJEZ0RldGFpbENsb3NlTGFiZWwoYSl7dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbD1hfWdldCBjbHJEZ1Jvd0FyaWFMYWJlbCgpe3JldHVybiB0aGlzLl9yb3dBcmlhTGFiZWw/dGhpcy5fcm93QXJp''@;'; put 'put ''YUxhYmVsOnRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdH1zZXQgY2xyRGdSb3dBcmlhTGFiZWwoYSl7dGhpcy5fcm93QXJpYUxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChsSCx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMu''@;'; put 'put ''d3JhcHBlZEluamVjdG9yPW5ldyBDRShsSCx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxs''@;'; put 'put ''cy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRo''@;'; put 'put ''aXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PVo4LkNBTENVTEFURT8odGhp''@;'; put 'put ''cy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3BsYXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95''@;'; put 'put ''ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz''@;'; put 'put ''Y3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJs''@;'; put 'put ''ZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVj''@;'; put 'put ''dGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkpfXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50''@;'; put 'put ''YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9nZ2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7''@;'; put 'put ''aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5jbHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNo''@;'; put 'put ''aWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhp''@;'; put 'put ''cy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFk4KSx0dChWOCksdHQoajgpLHR0KFBiKSx0dChoMiksdHQoY0gpLHR0''@;'; put 'put ''KGFzKSx0dChGbyksdHQoTmkpLHR0KEVzKSx0dChBcCksdHQoTHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLFRwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYm''@;'; put 'put ''KGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKGJFLDUpLFJvKGF2ZSw1KSxSbyhsdmUsNSxhcyksUm8oY3ZlLDUsYXMpLFJvKHV2ZSw1LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCksc2koaD1h''@;'; put 'put ''aSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJy''@;'; put 'put ''b2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKFRyKCJhcmlhLW93bnMiLGQuaWQpLGRyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntpdGVtOlsiY2xyRGdJdGVtIiwi''@;'; put 'put ''aXRlbSJdLGNsckRnU2VsZWN0YWJsZToiY2xyRGdTZWxlY3RhYmxlIixzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJE''@;'; put 'put ''Z0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dBcmlhTGFiZWw6ImNsckRnUm93QXJpYUxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9''@;'; put 'put ''LGZlYXR1cmVzOlt0aShbUGIse3Byb3ZpZGU6WXUsdXNlRXhpc3Rpbmc6UGJ9LHtwcm92aWRlOnZiLHVzZUV4aXN0aW5nOlBifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RnZlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNl''@;'; put 'put ''ZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwi''@;'; put 'put ''Y2xpY2siXSxbMywiY2xyRXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInN0aWNreUNlbGxzIiwiIl0s''@;'; put 'put ''WyJjbGFzcyIsImRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsMywibmdDbGFzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQt''@;'; put 'put ''Y2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJl''@;'; put 'put ''dCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSIsMywibmdDbGFzcyJdLFsxLCJkYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsicm9sZSIsImdyaWRjZWxsIiwx''@;'; put 'put ''LCJkYXRhZ3JpZC1zZWxlY3QiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIiwzLCJuZ0NsYXNzIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIl0sWzEsImNsci1jb250''@;'; put 'put ''cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxsIiwzLCJmb3IiLCJjbGljayJdLFsxLCJjbHItc3Itb25seSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLDMsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwi''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZXhwYW5k''@;'; put 'put ''YWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInR5cGUi''@;'; put 'put ''LCJidXR0b24iLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLCJkYXRhZ3JpZC1m''@;'; put 'put ''aXhlZC1jb2x1bW4iLCJkYXRhZ3JpZC1jZWxsIl0sWyJ0eXBlIiwiYnV0dG9uIiwiYXJpYS1oYXNwb3B1cCIsImRpYWxvZyIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoUHZlKSxRZSgwLGd2ZSwzLDIsImRpdiIsMCksUWUoMSx2dmUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEpLFFlKDIsYnZlLDEsMSxudWxsLDIpLFFlKDMseXZlLDEsMCwi''@;'; put 'put ''bmctdGVtcGxhdGUiLG51bGwsMyxFYyksUWUoNSxPdmUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDQsRWMpLGphKDcsbnVsbCw1KSksMiZhJiYoUmUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLENlKDEpLFJlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9u''@;'; put 'put ''TW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksQ2UoMSksUmUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W2JFLFQwLEtGLHUyLFppLHJkLHVILHVjLFMwLEQwLEJzLE9zLFVzLGxFLFdhLFhGLHFzXSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgTDA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY30oTDB8fHt9KTtjb25zdCB2UT1PYmplY3Qua2V5cyhMMCkubWFwKGM9PkwwW2NdKS5maWx0ZXIoYz0+Yz09PXBhcnNlSW50''@;'; put 'put ''KGMsMTApKTtsZXQgSGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0aGlz''@;'; put 'put ''LmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Y2FjaGUoKXt0aGlzLl9jYWNoZT10aGlzLmNvbHVtbnMubWFwKGE9Pntjb25zdCBkPXsuLi5hLnZhbHVlfTtyZXR1cm4gZGVsZXRlIGQuY2hhbmdlcyxkfSl9aGFzQ2FjaGUoKXtyZXR1cm4hIXRoaXMuX2NhY2hl''@;'; put 'put ''Lmxlbmd0aH1yZXNldFRvTGFzdENhY2hlKCl7dGhpcy5fY2FjaGUuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1tkXS5uZXh0KHsuLi5hLGNoYW5nZXM6dlF9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0''@;'; put 'put ''ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjfSksY30pKCksX1E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmZpbHRlcnM9YSx0aGlzLnNvcnQ9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRlYm91bmNlcj1mLHRoaXMuY2hhbmdlPXRoaXMuZGVib3VuY2VyLmNoYW5nZS5waXBlKE1lKCgpPT50aGlzLnN0YXRlKSl9''@;'; put 'put ''Z2V0IHN0YXRlKCl7Y29uc3QgYT17fTt0aGlzLnBhZ2Uuc2l6ZT4wJiYoYS5wYWdlPXtmcm9tOnRoaXMucGFnZS5maXJzdEl0ZW0sdG86dGhpcy5wYWdlLmxhc3RJdGVtLHNpemU6dGhpcy5wYWdlLnNpemUsY3VycmVudDp0aGlzLnBhZ2UuY3VycmVudH0pLHRoaXMuc29ydC5jb21wYXJhdG9y''@;'; put 'put ''JiYoYS5zb3J0PXRoaXMuc29ydC5jb21wYXJhdG9yIGluc3RhbmNlb2YgSUU/e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLnByb3AscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX06e2J5OnRoaXMuc29ydC5jb21wYXJhdG9yLHJldmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9KTtjb25zdCBkPXRo''@;'; put 'put ''aXMuZmlsdGVycy5nZXRBY3RpdmVGaWx0ZXJzKCk7aWYoZC5sZW5ndGg+MCl7YS5maWx0ZXJzPVtdO2Zvcihjb25zdCBoIG9mIGQpYS5maWx0ZXJzLnB1c2goaC5zdGF0ZT9oLnN0YXRlOmgpfXJldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShhcihGZiksYXIoTEUpLGFyKEVwKSxhcihSYikpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGJRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy56b25lPWEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kk''@;'; put 'put ''PW5ldyBiZSx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6Iltyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcikiLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50''@;'; put 'put ''KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRdIn19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5r''@;'; put 'put ''ZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntuMih0aGlzLmdyaWQsIm1vdXNlZG93''@;'; put 'put ''biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJnZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29u''@;'; put 'put ''ZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQpfX0pLG4yKHRoaXMuZ3JpZCwia2V5ZG93biIpLnBpcGUoYWgodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoKCFhLnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRyYWctaGFuZGxlIil8fCJB''@;'; put 'put ''cnJvd0xlZnQiIT09YS5jb2RlJiYiQXJyb3dSaWdodCIhPT1hLmNvZGUpJiYoIkFycm93VXAiPT09YS5jb2RlfHwiQXJyb3dEb3duIj09PWEuY29kZXx8IkFycm93TGVmdCI9PT1hLmNvZGV8fCJBcnJvd1JpZ2h0Ij09PWEuY29kZXx8IkVuZCI9PT1hLmNvZGV8fCJIb21lIj09PWEuY29kZXx8''@;'; put 'put ''IlBhZ2VVcCI9PT1hLmNvZGV8fCJQYWdlRG93biI9PT1hLmNvZGUpKXtjb25zdHt4OmQseTpofT10aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhKSxmPXRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93c1toXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykp''@;'; put 'put ''W2RdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhpcy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdy''@;'; put 'put ''aWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9c2V0QWN0aXZlQ2VsbChhKXtjb25zdCBkPXRoaXMuY2VsbHM/QXJyYXku''@;'; put 'put ''ZnJvbSh0aGlzLmNlbGxzKS5maW5kKF89PiIwIj09PV8uZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsO2QmJmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksYS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpO2NvbnN0IGg9ZnVuY3Rpb24gdXdlKGMpe2NvbnN0IGw9WyJh''@;'; put 'put ''W2hyZWZdIiwiYXJlYVtocmVmXSIsImlucHV0Om5vdChbZGlzYWJsZWRdKSIsImJ1dHRvbjpub3QoW2Rpc2FibGVkXSkiLCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pIiwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pIiwiaWZyYW1lIiwib2JqZWN0IiwiZW1iZWQiLCIqW3RhYmluZGV4XSIsIipb''@;'; put 'put ''Y29udGVudGVkaXRhYmxlPXRydWVdIiwiW3JvbGU9YnV0dG9uXTpub3QoW2Rpc2FibGVkXSkiXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKX0oYSk7KCJjb2x1bW5oZWFkZXIiIT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmaFswXT9oWzBdOmEp''@;'; put 'put ''LmZvY3VzKCl9Z2V0TmV4dEl0ZW1Db29yZGluYXRlKGEpe2xldCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKFplPT4iMCI9PT1aZS5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7IlRhYiI9PT1hLmNvZGUmJihkPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQp''@;'; put 'put ''O2NvbnN0IGg9dGhpcy5yb3dzJiZkP0FycmF5LmZyb20odGhpcy5yb3dzKS5maW5kKFplPT5aZS5jb250YWlucyhkKSk6bnVsbCxmPXRoaXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxfPXRoaXMuY2VsbHM/dGhpcy5jZWxscy5sZW5ndGgvdGhpcy5yb3dzLmxlbmd0aC0xOjA7bGV0IFQ9''@;'; put 'put ''aCYmZD9BcnJheS5mcm9tKGgucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGQpOjAsVz1oJiZkJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoaCk6MDtjb25zdCBpZT10aGlzLmhvc3QuZGlyLGdlPSJydGwiPT09aWU/''@;'; put 'put ''IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiLHdlPSJydGwiPT09aWU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiLEVlPU1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MDtyZXR1''@;'; put 'put ''cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1XP1ctPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlc8Zj9XKz0xOmEuY29kZT09PWdlJiYwIT09VD9ULT0xOmEuY29kZT09PXdlJiZUPF8/VCs9MToiRW5kIj09PWEuY29kZT8oVD1fLGEuY3RybEtleSYmKFc9ZikpOiJIb21lIj09PWEuY29kZT8o''@;'; put 'put ''VD0wLGEuY3RybEtleSYmKFc9MCkpOiJQYWdlVXAiPT09YS5jb2RlP1c9Vy1FZT4wP1ctRWU6MDoiUGFnZURvd24iPT09YS5jb2RlJiYoVz1XK0VlPGY/VytFZTpmKSx7eDpULHk6V319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKE5vKSl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVzg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlLEVlLFplLG90LGV0LHl0LGt0KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFi''@;'; put 'put ''bGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9Xyx0aGlzLnN0YXRlUHJvdmlkZXI9VCx0aGlzLmRpc3BsYXlNb2RlPVcsdGhpcy5yZW5kZXJlcj1pZSx0aGlzLmRldGFpbFNlcnZpY2U9Z2UsdGhpcy5kb2N1bWVudD13ZSx0aGlzLmVsPUVlLHRoaXMucGFn''@;'; put 'put ''ZT1aZSx0aGlzLmNvbW1vblN0cmluZ3M9b3QsdGhpcy5jb2x1bW5zU2VydmljZT1ldCx0aGlzLmtleU5hdmlnYXRpb249eXQsdGhpcy56b25lPWt0LHRoaXMuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxh''@;'; put 'put ''YmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVB''@;'; put 'put ''cmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IEVyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMucmVmcmVzaD1uZXcgRXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9YWEsdGhpcy5fc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXTtjb25zdCBTdD1EYygpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrU3QsdGhpcy5kZXRhaWxTZXJ2aWNlLmlkPVN0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRp''@;'; put 'put ''bmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hP2FhLk11bHRpOmFhLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1hYS5TaW5nbGUs''@;'; put 'put ''YT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1z''@;'; put 'put ''ZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy5kYXRhZ3JpZFRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxT''@;'; put 'put ''ZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtjb25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoU2EoZD0+aXMoV2koZC5t''@;'; put 'put ''YXAoaD0+aC5pdGVtKSksWTYoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUoZjgoMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJl''@;'; put 'put ''KCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShkKTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93''@;'; put 'put ''cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5pc09wZW4pe2NvbnN0IGQ9dGhpcy5pdGVtcy5jYW5UcmFja0J5KCk/dGhpcy5yb3dzLmZpbmQoaD0+dGhpcy5pdGVtcy50cmFja0J5KGguaXRlbSk9PT10aGlzLml0ZW1zLnRy''@;'; put 'put ''YWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk6dm9pZCAwO2Q/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oZC5pdGVtLGQuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfX0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmtleU5hdmln''@;'; put 'put ''YXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJl''@;'; put 'put ''c2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24uY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWFhLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hYS5NdWx0aSYm''@;'; put 'put ''dGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChhKX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygp''@;'; put 'put ''fSksWTYodGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zKS5zdWJzY3JpYmUoKCk9PnRoaXMua2V5TmF2aWdhdGlvbj8ucmVzZXRLZXlHcmlkKCkpLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5n''@;'; put 'put ''dGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhp''@;'; put 'put ''cy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1aOC5ESVNQTEFZPyh0aGlzLnJlbmRl''@;'; put 'put ''cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMu''@;'; put 'put ''X2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5z''@;'; put 'put ''Lmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChuMih0aGlzLmRvY3VtZW50LmJvZHks''@;'; put 'put ''ImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSxuMih0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNz''@;'; put 'put ''ZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1yZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1kYXRhQ2hhbmdlZCgpe3RoaXMuaXRlbXMucmVmcmVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChlZyksdHQoQXApLHR0KGo4KSx0dChZOCksdHQoVjgpLHR0KF9RKSx0dChjSCksdHQoRm8pLHR0KGgyKSx0dChMcyksdHQoTmkpLHR0KEVwKSx0dChFcyksdHQoSGYpLHR0KGJRKSx0dChObykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgsVTgsNSksSW8oaCxySCw1KSxJbyhoLHRnLDQpLElvKGgsbmcsNCkpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksc2koZj1haSgp''@;'; put 'put ''KSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuY29sdW1ucz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oSHZlLDUsTmkpLFJvKE52ZSw1LGFzKSxSbyhWdmUsNSxhcyksUm8oQnZlLDUsYXMpLFJv''@;'; put 'put ''KGp2ZSw1LGFzKSxSbyh6dmUsNSxhcykpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCks''@;'; put 'put ''c2koaD1haSgpKSYmKGQuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJmRyKCJkYXRhZ3JpZC1ob3N0IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xl''@;'; put 'put ''QWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGlu''@;'; put 'put ''ZzpbImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLHNpbmdsZVNlbGVjdGVkOlsiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVj''@;'; put 'put ''dGlvbiIscm93U2VsZWN0aW9uTW9kZTpbImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6WyJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixzaW5nbGVTZWxlY3Rl''@;'; put 'put ''ZENoYW5nZWQ6ImNsckRnU2luZ2xlU2VsZWN0ZWRDaGFuZ2UiLHJlZnJlc2g6ImNsckRnUmVmcmVzaCJ9LGZlYXR1cmVzOlt0aShbWTgsTEUsRmYsRXAsQXAsZWcsVjgsajgsUmIsaDIsX1EsbkgsSGYsY0gsYlFdKV0sbmdDb250ZW50U2VsZWN0b3JzOkt2ZSxkZWNsczozMix2YXJzOjcsY29u''@;'; put 'put ''c3RzOltbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWyJkYXRhZ3JpZCIsIiJdLFsxLCJkYXRhZ3JpZC10YWJsZS13cmFwcGVyIl0sWyJyb2xlIiwiZ3JpZCIsInRhYmluZGV4IiwiLTEiLDEsImRhdGFncmlk''@;'; put 'put ''LXRhYmxlIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJyb2xlIiwicm93Z3JvdXAiLDEsImRhdGFncmlkLWhlYWRlciJdLFsicm9sZSIsInJvdyIsMSwiZGF0YWdyaWQtcm93Il0sWzEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCJdLFsxLCJkYXRhZ3JpZC1yb3ct''@;'; put 'put ''c3RpY2t5Il0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uIGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1yb3ctYWN0aW9ucyBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbInJvbGUi''@;'; put 'put ''LCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSJdLFsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiLCIiXSxbImRp''@;'; put 'put ''c3BsYXllZFJvd3MiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwi''@;'; put 'put ''Il0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsidHlwZSIs''@;'; put 'put ''ImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywiaWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbInJvbGUi''@;'; put 'put ''LCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1''@;'; put 'put ''bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYoVGkocXZlKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsImRpdiIsMSkoMywiZGl2IiwyLDMpKDUsImRpdiIsNCkoNiwiZGl2Iiw1LDYpKDgsImRpdiIsNykoOSwiZGl2Iiw4KSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksUWUoMTIsVXZlLDcsNSwiZGl2IiwxMSksUWUoMTMsWnZlLDIs''@;'; put 'put ''MSwiZGl2IiwxMiksUWUoMTQsWXZlLDIsMSwiZGl2IiwxMyksUWUoMTUsV3ZlLDIsMSwiZGl2IiwxNCkseWUoKSxtZSgxNiwiZGl2IiwxNSksamEoMTcsbnVsbCwxNikseWUoKSgpKCkoKSxqYSgxOSxudWxsLDE3KSxrcigyMSwxKSxRZSgyMixHdmUsMSwwLCJjbHItZGctcGxhY2Vob2xkZXIi''@;'; put 'put ''LDE4KSx5ZSgpKCkoKSxrcigyMywyKSxRZSgyNCwkdmUsMywwLCJkaXYiLDE5KSx5ZSgpLGtyKDI1LDMpLHllKCksbWUoMjYsImRpdiIsMjApKDI3LCJkaXYiLDIxKSxqYSgyOCxudWxsLDIyKSx5ZSgpLGphKDMwLG51bGwsMjMpLHllKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWhpZGRlbiIs''@;'; put 'put ''ISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSxDZSg5KSxSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLENlKDEpLFJlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5n''@;'; put 'put ''bGUpLENlKDEpLFJlKCJuZ0lmIixkLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksQ2UoMSksUmUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLENlKDcpLFJlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks''@;'; put 'put ''Q2UoMiksUmUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3JILHUyLFppLHVILFMwLEJzLE9zLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLmFsbFNlbGVjdGVkPW5l''@;'; put 'put ''dyBFcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1nZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RB''@;'; put 'put ''bGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W0wwLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoSGYpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dn''@;'; put 'put ''bGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJk''@;'; put 'put ''aXNhYmxlZCIsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxtZSgwLCJidXR0b24iLDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLGtyKDEpLHllKCkpLDImYSYmUmUoImRpc2FibGVkIixkLmFsbEhpZGVhYmxlc1Zpc2li''@;'; put 'put ''bGUpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx5UT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtdGl0bGUiXV0sbmdD''@;'; put 'put ''b250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHdRPWM9PmM7bGV0IGhIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5faXRlbXM9YX1z''@;'; put 'put ''ZXQgdHJhY2tCeShhKXthIT09d1EmJnRoaXMuX2l0ZW1zJiYodGhpcy5faXRlbXMuaXRlcmF0b3JUcmFja0J5PWEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBcCw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs''@;'; put 'put ''Im5nRm9yVHJhY2tCeSIsIiJdXSxpbnB1dHM6e3RyYWNrQnk6WyJuZ0ZvclRyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksZkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3Zlcklk''@;'; put 'put ''PURjKCksdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOnZ1LlZFUlRJQ0FMLHNpZGU6b2QuQkVGT1JFLGFuY2hvcjpQcy5TVEFSVCxjb250ZW50OlBzLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj13USx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0''@;'; put 'put ''YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2Vydmlj''@;'; put 'put ''ZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9''@;'; put 'put ''PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0''@;'; put 'put ''ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W0wwLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9wZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0''@;'; put 'put ''aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVzKSx0dChIZiksdHQoS3MpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVt''@;'; put 'put ''bi10b2dnbGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKElvKGgseVEsNSksSW8oaCxkSCw1KSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVUaXRsZT1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC5jdXN0b21Ub2dnbGVCdXR0b249Zi5m''@;'; put 'put ''aXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKEp2ZSw1LE5pKSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY29sdW1uLXN3''@;'; put 'put ''aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbdGkoW0lmLFM4LEtzXSldLG5nQ29udGVudFNlbGVjdG9yczpvX2UsZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIs''@;'; put 'put ''IiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMywiaWQiLDQsImNsclBvcG92ZXJDb250ZW50Iiwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNsckZvY3VzVHJhcCIsIiIsMSwiY29sdW1uLXN3aXRjaCIsMywiaWQiXSxbMSwic3dpdGNo''@;'; put 'put ''LWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImFsbFNlbGVjdGVkIiwiIl0sWzQsIm5nSWYiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9z''@;'; put 'put ''ZS1idXR0b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3Rl''@;'; put 'put ''ciJdLFszLCJjbHJBbGxTZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImRpc2FibGVkIiwibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFszLCJjbHJBbGxTZWxlY3RlZCJdXSx0ZW1wbGF0ZTpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmKFRpKGlfZSksbWUoMCwiYnV0dG9uIiwwKSxOZSgxKSx5ZSgpLFFlKDIscl9lLDE2LDEwLCJkaXYiLDEpKSwyJmEmJihUcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLW93bnMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVu''@;'; put 'put ''U3RhdGUpLENlKDEpLGdyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5waWNrQ29sdW1ucywiICIpLENlKDEpLFJlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVD''@;'; put 'put ''bGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1QwLGRILHdiLE1iLFNiLE1wLFppLEZKLHFzLHhzLGhILFMwLEQwLEJzLE9zLFVzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxTUT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3Vu''@;'; put 'put ''dC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGo4LDgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLFBFPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1hYX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1Nl''@;'; put 'put ''cnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChZOCksdHQoaDIpLHR0KEhmKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGNvbnRlbnRR''@;'; put 'put ''dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZkgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC50b2dnbGU9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRhdGFncmlkLWZvb3RlciIsITApfSxuZ0NvbnRlbnRT''@;'; put 'put ''ZWxlY3RvcnM6aF9lLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCJdLFsxLCJkYXRhZ3JpZC1mb290ZXItc2VsZWN0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsImNoZWNrZWQiLCJjaGVja2VkIiwi''@;'; put 'put ''ZGlzYWJsZWQiLCIiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoZF9lKSxRZSgwLGxfZSw4LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx1X2UsNSwxLCJuZy1jb250YWluZXIiLDAp''@;'; put 'put ''LGtyKDIpKSwyJmEmJihSZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkmJmQuc2VsZWN0aW9uLmN1cnJlbnQubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W1Qw''@;'; put 'put ''LGZILFppLEQwLFVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBwSD1uZXcgTWkoIkNPTFVNTl9TVEFURSIpLHZ3ZT17cHJvdmlkZTpwSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIG13ZSgpe3JldHVybiBuZXcgVGUoe2NoYW5nZXM6W119KX19O2xldCBnSD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMucGFnZT1hLHRoaXMucGFnZVNpemVPcHRpb25zSWQ9RGMoKX1uZ09uSW5pdCgpeyghdGhpcy5wYWdlU2l6ZU9wdGlvbnN8fDA9PT10aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGgpJiYodGhpcy5wYWdlU2l6ZU9wdGlvbnM9W3RoaXMucGFnZS5zaXplXSl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdlLXNpemUiXV0saW5wdXRzOntwYWdlU2l6ZU9wdGlvbnM6WyJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6''@;'; put 'put ''ZU9wdGlvbnMiXSxwYWdlU2l6ZU9wdGlvbnNJZDpbImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJpZCIsIm5nTW9kZWwiLCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSxtZSgxLCJkaXYiLDApKDIsInNlbGVjdCIsMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3Jl''@;'; put 'put ''dHVybiBkLnBhZ2Uuc2l6ZT1mfSksUWUoMyxmX2UsMiwyLCJvcHRpb24iLDIpLHllKCkoKSksMiZhJiYoQ2UoMiksZHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUmUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLENlKDEpLFJlKCJuZ0Zvck9m''@;'; put 'put ''IixkLnBhZ2VTaXplT3B0aW9ucykpfSxkZXBlbmRlbmNpZXM6W00wLEJzLE9zLHhzLGwxLGMxXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLnBhZ2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmRldGFpbFNlcnZp''@;'; put 'put ''Y2U9aCx0aGlzLmN1cnJlbnRDaGFuZ2VkPW5ldyBFcighMSksdGhpcy5wYWdlLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1z''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMucGFnZS50b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBh''@;'; put 'put ''JiYodGhpcy5wYWdlLmxhc3Q9YSl9Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0''@;'; put 'put ''ZW19Z2V0IGxhc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2Uu''@;'; put 'put ''Y3VycmVudDx0aGlzLnBhZ2UubGFzdCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVu''@;'; put 'put ''dENoYW5nZWQuZW1pdChhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMu''@;'; put 'put ''cGFnZS5uZXh0KCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5u''@;'; put 'put ''YXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFcCksdHQoRXMpLHR0KGgyKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wYWdpbmF0aW9uIl1d''@;'; put 'put ''LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsZ0gsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5fcGFnZVNpemVDb21wb25lbnQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHBfZSw1KSwyJmEpe2xldCBoO3NpKGg9''@;'; put 'put ''YWkoKSkmJihkLmN1cnJlbnRQYWdlSW5wdXRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInBhZ2luYXRpb24iLCEwKX0saW5wdXRzOntkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dDpbImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJk''@;'; put 'put ''aXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOlsiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbImNsckRnVG90YWxJdGVtcyIsInRvdGFsSXRlbXMiXSxsYXN0UGFnZTpbImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOlsiY2xyRGdQ''@;'; put 'put ''YWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpDX2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFn''@;'; put 'put ''aW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsx''@;'; put 'put ''LCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0''@;'; put 'put ''eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsicmVhZE9ubHkiLCIiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIs''@;'; put 'put ''MywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsi''@;'; put 'put ''dHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVlIiwia2V5ZG93bi5lbnRlciIsImJsdXIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoVGkod19lKSxRZSgwLGJfZSw1LDIsIm5nLWNvbnRhaW5lciIsMCksUWUoMSx5X2UsMTQsMTAsIm5nLWNvbnRhaW5lciIsMCkpLDImYSYmKFJlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksQ2UoMSksUmUoIm5nSWYiLGQuZGV0YWlsU2VydmljZS5pc09w''@;'; put 'put ''ZW4pKX0sZGVwZW5kZW5jaWVzOltaaSxxc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgRzg9ImRhdGFncmlkLWZpeGVkLXdpZHRoIixIRT0iZGF0YWdyaWQtaGlkZGVuLWNvbHVtbiI7bGV0IHJnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlz''@;'; put 'put ''LnJlbmRlcmVyPWQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGguZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSl9c2V0IGNvbHVtblN0YXRlKGEpe3RoaXMuc3RhdGVTdWJzY3Jp''@;'; put 'put ''cHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJ1bkFsbENoYW5nZXM9dlEsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFj''@;'; put 'put ''aChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5B''@;'; put 'put ''bGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJl''@;'; put 'put ''bmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRp''@;'; put 'put ''dmVFbGVtZW50LEc4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRl''@;'; put 'put ''cmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxIRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoRm8pLHR0KGVnKSl9LGMu''@;'; put 'put ''XHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCksaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhp''@;'; put 'put ''cy5jb2x1bW5SZXNpemVyU2VydmljZT1fLHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRlPVcsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBFcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25z''@;'; put 'put ''LnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHMoZjIuQ0xFQVJfV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVy5zdWJzY3JpYmUoaWU9PnRoaXMuc3RhdGVDaGFuZ2VzKGllKSkpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0''@;'; put 'put ''YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hhbmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSBMMC5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UgTDAuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRoU2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCks''@;'; put 'put ''dGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVy''@;'; put 'put ''UmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQp''@;'; put 'put ''KSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw''@;'; put 'put ''eCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEc4KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHOCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSEUpOnRoaXMucmVuZGVyZXIucmVt''@;'; put 'put ''b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEhFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KEZvKSx0dChlZyksdHQoaDEpLHR0KHRIKSx0dChIZiksdHQocEgpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3Rv''@;'; put 'put ''cnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOlt0aShbdEgsdndlXSldfSksY30pKCksd3dlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXty''@;'; put 'put ''ZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG9nPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0''@;'; put 'put ''aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u''@;'; put 'put ''cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEu''@;'; put 'put ''Y29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChIZikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93''@;'; put 'put ''LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLHJnLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IEN3ZT1jPT5ScyhjKT9uZXcgaDE6bmV3IHd3ZTtsZXQgJDg9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPV8sdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1XLHRoaXMudGFibGVTaXplU2VydmljZT1pZSx0''@;'; put 'put ''aGlzLmNvbHVtbnNTZXJ2aWNlPWdlLHRoaXMubmdab25lPXdlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''b3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKGYyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl''@;'; put 'put ''aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShFZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKEVlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''aXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlz''@;'; put 'put ''LnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1ucygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXpl''@;'; put 'put ''Q29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5z''@;'; put 'put ''dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxo''@;'; put 'put ''KT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOltMMC5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChh''@;'; put 'put ''LGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRT''@;'; put 'put ''ZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWlnaHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRT''@;'; put 'put ''ZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IF89e2NoYW5nZXM6W0wwLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07Xy5zdHJpY3RXaWR0aHx8''@;'; put 'put ''KGQ9ITEpLGE9PT1mKzEmJmQmJihfLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZixfKX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0''@;'; put 'put ''ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZWcpLHR0KEFwKSx0dChFcCksdHQoaDEpLHR0KE5pKSx0dChG''@;'; put 'put ''byksdHQoaDIpLHR0KG5IKSx0dChIZiksdHQoTm8pKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLGlnLDQpLElvKGgsb2csNSkpLDImYSl7bGV0IGY7c2koZj1h''@;'; put 'put ''aSgpKSYmKGQuaGVhZGVycz1mKSxzaShmPWFpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpoMSx1c2VGYWN0b3J5OkN3ZSxkZXBzOltHc119XSldfSksY30pKCksU3dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhmbWUscG1lLG5iLGdt''@;'; put 'put ''ZSxJSyxtbWUsTEssdm1lLF9tZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxkUSwkbCxMRixzZCxhd2UsaFEsJEosQWIseGIsQkYseUUscTVd''@;'; put 'put ''XX0pLGN9KSgpLE1RPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stY29udGVudCJdXX0pLGN9KSgpLG1IPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLl9nZW5lcmF0ZWRJZD1udWxsLHRoaXMuX2lkPW51bGx9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD0ic3RyaW5nIj09dHlwZW9mIGEmJiIiIT09YT9hOnRoaXMuX2dlbmVyYXRlZElkKyIifW5nT25Jbml0KCl7dGhpcy5fZ2VuZXJhdGVk''@;'; put 'put ''SWQ9ImNsci1zdGFjay1sYWJlbC0iK0RjKCksdGhpcy5pZHx8KHRoaXMuX2lkPXRoaXMuX2dlbmVyYXRlZElkKyIiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1s''@;'; put 'put ''YWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5j''@;'; put 'put ''YXBzdWxhdGlvbjoyfSksY30pKCkseFE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgRXIoITEpLHRoaXMuZm9j''@;'; put 'put ''dXNlZD0hMSx0aGlzLnVuaXF1ZUlkPURjKCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhp''@;'; put 'put ''cy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMucGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhw''@;'; put 'put ''YW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMuZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5h''@;'; put 'put ''cmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4''@;'; put 'put ''cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3Rh''@;'; put 'put ''Y2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYywxMiksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1dLGNvbnRlbnRR''@;'; put 'put ''dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJklvKGgsbUgsNSksMiZhKXtsZXQgZjtzaShmPWFpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsImhlYWRpbmciKSgiYXJp''@;'; put 'put ''YS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLGRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZhbHVlKSgib24t''@;'; put 'put ''Zm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbImNsclNiRXhwYW5kZWQiLCJleHBhbmRlZCJdLGV4cGFuZGFibGU6WyJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOlsiY2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxh''@;'; put 'put ''cmlhU2V0c2l6ZTpbImNsclN0YWNrVmlld1NldHNpemUiLCJhcmlhU2V0c2l6ZSJdLGFyaWFQb3NpbnNldDpbImNsclN0YWNrVmlld1Bvc2luc2V0IiwiYXJpYVBvc2luc2V0Il0sc2V0Q2hhbmdlZFZhbHVlOlsiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0''@;'; put 'put ''czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6a19lLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJpZCIsImNsaWNrIiwia2V5dXAuZW50ZXIiLCJrZXl1cC5zcGFjZSIsImtleWRvd24uc3Bh''@;'; put 'put ''Y2UiLCJmb2N1cyIsImJsdXIiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2st''@;'; put 'put ''Y2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihUaShFX2UpLG1lKDAsImRpdiIsMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLnRvZ2dsZUV4cGFuZCgpfSkoImtleXVwLnNwYWNlIixmdW5jdGlvbigpe3JldHVybiBk''@;'; put 'put ''LnRvZ2dsZUV4cGFuZCgpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBmLnByZXZlbnREZWZhdWx0KCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMH0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITF9KSxRZSgxLFNfZSwx''@;'; put 'put ''LDEsImNkcy1pY29uIiwxKSxRZSgyLE1fZSwyLDEsInNwYW4iLDIpLG1lKDMsImRpdiIsMyksa3IoNCkseWUoKSxtZSg1LCJkaXYiLDQpLGtyKDYsMSkseWUoKSgpLG1lKDcsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNSksUWUoOCx4X2UsMiw0LCJkaXYiLDYpLHllKCkpLDImYSYmKFJl''@;'; put 'put ''KCJpZCIsZC51bmlxdWVJZCksVHIoInJvbGUiLGQucm9sZSkoInRhYmluZGV4IixkLnRhYkluZGV4KSgiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmdldFN0YWNrQ2hpbGRyZW5JZCgpKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRhYmxlKSxDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLENlKDUpLFJlKCJjbHJFeHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5leHBhbmRlZCkpfSxkZXBlbmRlbmNpZXM6W2JFLFppLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9''@;'; put 'put ''Il19KSxjfSkoKSxxOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zYXZlPW5ldyBFcighMSksdGhpcy5lZGl0YWJsZT0hMSx0aGlzLmVkaXRpbmdDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLl9lZGl0TW9kZT0hMX1nZXQgZWRpdGluZygpe3JldHVybiB0aGlzLmVkaXRhYmxlJiZ0''@;'; put 'put ''aGlzLl9lZGl0TW9kZX1zZXQgZWRpdGluZyhhKXt0aGlzLmVkaXRhYmxlJiYodGhpcy5fZWRpdE1vZGU9YSx0aGlzLmVkaXRpbmdDaGFuZ2UuZW1pdChhKSxhfHx0aGlzLnNhdmUuZW1pdChudWxsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxvdXRwdXRzOntzYXZlOiJjbHJTdGFja1NhdmUifSxuZ0NvbnRlbnRTZWxlY3RvcnM6VF9lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''YSxkKXsxJmEmJihUaShBX2UpLGtyKDApLG1lKDEsImRpdiIsMCksa3IoMiwxKSx5ZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksRXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCl9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbywkbCxzYSxoUV1dfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlz''@;'; put 'put ''LmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5ldyBiZX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qga1E9e3Byb3ZpZGU6c2csdXNl''@;'; put 'put ''RmFjdG9yeTpmdW5jdGlvbiBrd2UoYyl7cmV0dXJuIGN8fG5ldyBzZ30sZGVwczpbW25ldyB6MixuZXcgZzAsc2ddXX07bGV0IEFRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZXhwYW5kU2VydmljZT1kLGQmJih0aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbj10aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZShoPT57IWgmJnRoaXMucGFyZW50JiYhdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXImJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkpfXNo''@;'; put 'put ''b3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5t''@;'; put 'put ''b2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQoWXUsOCkpfSxjLlx1MDI3NWNtcD13cih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsImdyb3VwIil9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFy''@;'; put 'put ''czoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmUWUoMCxWX2UsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmUmUoIm5n''@;'; put 'put ''SWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W1ppLHhzLHJkXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgZmM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRF''@;'; put 'put ''Uk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oZmN8fHt9KTtjbGFzcyBUUXtjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZyQ9bmV3IFRlKCExKSx0aGlzLnNlbGVjdGVkPW5ldyBUZShmYy5VTlNFTEVDVEVEKSx0aGlzLl9sb2FkaW5nPSExfWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2xvYWRpbmd9c2V0IGxvYWRpbmcobCl7dGhpcy5fbG9hZGluZz1sLHRoaXMubG9hZGluZyQubmV4dChsKX1kZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxk''@;'; put 'put ''JiZsIT09ZmMuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9Pmguc2V0U2VsZWN0ZWQobCwhMSwhMCkpLGEmJnRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfXRvZ2dsZVNlbGVjdGlvbihs''@;'; put 'put ''KXt0aGlzLnNldFNlbGVjdGVkKHRoaXMuc2VsZWN0ZWQudmFsdWU9PT1mYy5TRUxFQ1RFRD9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVELCEwLGwpfV91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKXtjb25zdCBsPXRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCk7''@;'; put 'put ''bCE9PXRoaXMuc2VsZWN0ZWQudmFsdWUmJih0aGlzLnNlbGVjdGVkLm5leHQobCksdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9Y29tcHV0ZVNlbGVjdGlvblN0YXRlRnJvbUNoaWxkcmVuKCl7bGV0IGw9ITEsYT0hMTtmb3IoY29uc3Qg''@;'; put 'put ''ZCBvZiB0aGlzLmNoaWxkcmVuKXN3aXRjaChkLnNlbGVjdGVkLnZhbHVlKXtjYXNlIGZjLklOREVURVJNSU5BVEU6cmV0dXJuIGZjLklOREVURVJNSU5BVEU7Y2FzZSBmYy5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuIGZjLklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwp''@;'; put 'put ''cmV0dXJuIGZjLklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT9mYy5VTlNFTEVDVEVEOmZjLlNFTEVDVEVEOmZjLlVOU0VMRUNURUR9fWNsYXNzIE5FIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9''@;'; put 'put ''aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENoaWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVz''@;'; put 'put ''dHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4uZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5G''@;'; put 'put ''ZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBBd2UoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP0ZPKGwpPyh0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9jaGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9''@;'; put 'put ''Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRoaXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3Jl''@;'; put 'put ''dHVybiBsLm1hcChhPT5uZXcgTkUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IERRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNo''@;'; put 'put ''YW5nZXMoKXtsZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IE5FKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyBORSh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1''@;'; put 'put ''cmVzU2VydmljZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShmOCgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygp''@;'; put 'put ''fSkpLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KHNnKSx0dChVYSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOlsi''@;'; put 'put ''Y2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOlsiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbdmFdfSksY30pKCksdkg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgYmUs''@;'; put 'put ''dGhpcy5fZm9jdXNDaGFuZ2U9bmV3IGJlfWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5f''@;'; put 'put ''Zm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVu''@;'; put 'put ''dCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5yb290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVB''@;'; put 'put ''Ym92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3Rh''@;'; put 'put ''cnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMucm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2Nv''@;'; put 'put ''bnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4g''@;'; put 'put ''aDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpudWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2Rl''@;'; put 'put ''TW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9ZmluZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVu''@;'; put 'put ''dDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJuIGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5v''@;'; put 'put ''ZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBkLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNX''@;'; put 'put ''aXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IF89aC5pbmRleE9mKGQpKzE7XzxoLmxlbmd0aDtfKyspe2NvbnN0IFc9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW19dKTtpZihXKXJldHVybiBXfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dp''@;'; put 'put ''dGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1oKWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQp''@;'; put 'put ''e3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRzV2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVT''@;'; put 'put ''dGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChhLGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgVHdlIGV4dGVuZHMgVFF7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxk''@;'; put 'put ''KHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVzdHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJl''@;'; put 'put ''bi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBEcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFj''@;'; put 'put ''dGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSkpfSxjLlx1MDI3NWRpcj1Dcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZvclR5cGVBaGVhZFByb3ZpZGVyPWgsdGhpcy5mZWF0dXJlc1NlcnZp''@;'; put 'put ''Y2U9Zix0aGlzLmV4cGFuZFNlcnZpY2U9Xyx0aGlzLmNvbW1vblN0cmluZ3M9VCx0aGlzLmZvY3VzTWFuYWdlcj1XLHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBFcix0aGlzLlNUQVRFUz1mYyx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRo''@;'; put 'put ''aXMubm9kZUlkPURjKCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBiZSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9dGhp''@;'; put 'put ''cy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uP2llLnZpZXc/aWUudmlldy5jb250ZXh0LmNsck1vZGVsOmllLl9sVmlld1s4XS5jbHJNb2RlbDpuZXcgVHdlKGQ/ZC5fbW9kZWw6bnVsbCksdGhpcy5fbW9kZWwubm9kZUlkPXRoaXMubm9kZUlkfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPWZjLlVOU0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/ZmMuU0VMRUNURUQ6ZmMuVU5TRUxF''@;'; put 'put ''Q1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFu''@;'; put 'put ''ZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWZjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k''@;'; put 'put ''ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVMaW5rKCl7cmV0dXJuIHRoaXMudHJlZU5vZGVMaW5rTGlzdCYmdGhpcy50cmVlTm9kZUxpbmtMaXN0LmZpcnN0fWdldCBpc1BhcmVudCgpe3JldHVybiB0aGlzLl9tb2RlbC5jaGlsZHJlbiYmdGhpcy5fbW9kZWwuY2hpbGRyZW4ubGVu''@;'; put 'put ''Z3RoPjB9bmdPbkluaXQoKXt0aGlzLl9tb2RlbC5leHBhbmRlZD10aGlzLmV4cGFuZGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoSWEoKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''LmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMu''@;'; put 'put ''Zm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0pKSx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGY4KDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb3JUeXBlQWhlYWRQcm92aWRlciYmKHRoaXMuX21vZGVsLnRleHRDb250ZW50PXRoaXMuZm9yVHlwZUFo''@;'; put 'put ''ZWFkUHJvdmlkZXIudGV4dENvbnRlbnQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5waXBlKGY4KDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVh''@;'; put 'put ''ZEtleUJ1ZmZlcj0iIn0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9tb2RlbC5kZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1pc0V4cGFuZGFibGUoKXtyZXR1cm4gdHlwZW9mIHRoaXMuZXhwYW5kYWJsZTwidSI/dGhpcy5leHBhbmRhYmxl''@;'; put 'put ''OiEhdGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGFibGV8fHRoaXMuaXNQYXJlbnR9aXNTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV9Zm9jdXNUcmVlTm9kZSgpe2NvbnN0IGE9dGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7UnMo''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PWEmJih0aGlzLnNldFRhYkluZGV4KDApLGEuZm9jdXMoKSxhLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFyZXN0In0pKX1icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCl7dGhpcy5m''@;'; put 'put ''b2N1c01hbmFnZXIuYnJvYWRjYXN0Rm9jdXNlZE5vZGUodGhpcy5ub2RlSWQpfW9uS2V5RG93bihhKXtzd2l0Y2goVEYoYSksbDIoYS5rZXkpKXtjYXNlIHdvLkFycm93VXA6dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQWJvdmUodGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Ugd28uQXJyb3dE''@;'; put 'put ''b3duOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTticmVhaztjYXNlIHdvLkFycm93UmlnaHQ6dGhpcy5leHBhbmRPckZvY3VzRmlyc3RDaGlsZCgpO2JyZWFrO2Nhc2Ugd28uQXJyb3dMZWZ0OnRoaXMuY29sbGFwc2VPckZvY3VzUGFyZW50KCk7YnJlYWs7''@;'; put 'put ''Y2FzZSB3by5Ib21lOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdvLkVuZDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNMYXN0VmlzaWJsZU5vZGUoKTticmVhaztjYXNlIHdv''@;'; put 'put ''LkVudGVyOnRoaXMudG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2Nhc2Ugd28uU3BhY2U6Y2FzZSB3by5TcGFjZWJhcjphLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7ZGVmYXVsdDppZih0aGlzLl9tb2RlbC50''@;'; put 'put ''ZXh0Q29udGVudCYmZnVuY3Rpb24gcnllKGMpe2NvbnN0IGw9Yy5rZXk7cmV0dXJuIGwudG9Mb3dlckNhc2UoKSE9PWwudG9VcHBlckNhc2UoKXx8bD49IjAiJiZsPD0iOSJ9KGEpKXJldHVybiB0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcis9YS5rZXksdm9pZCB0aGlzLnR5cGVBaGVhZEtleUV2''@;'; put 'put ''ZW50Lm5leHQodGhpcy50eXBlQWhlYWRLZXlCdWZmZXIpfXRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIifXNldFRhYkluZGV4KGEpe3RoaXMuY29udGVudENvbnRhaW5lclRhYmluZGV4PWEsdGhpcy5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRl''@;'; put 'put ''eCIsYSl9Y2hlY2tUYWJJbmRleChhKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmlzRXhwYW5kYWJs''@;'; put 'put ''ZSgpJiYhdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ6dGhpcy50cmlnZ2VyRGVmYXVsdEFjdGlvbigpfWV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCl7dGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFu''@;'; put 'put ''YWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9Y29sbGFwc2VPckZvY3VzUGFyZW50KCl7dGhpcy5leHBhbmRlZD90aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITE6dGhpcy5mb2N1''@;'; put 'put ''c01hbmFnZXIuZm9jdXNQYXJlbnQodGhpcy5fbW9kZWwpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJl''@;'; put 'put ''c1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChHcyksdHQoYywxMiksdHQoZnllLDEwKSx0dChzZyksdHQoWXUpLHR0KEVzKSx0dCh2SCksdHQoRWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLERwLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudHJlZU5vZGVMaW5rTGlzdD1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oQl9lLDcsTmkpLDImYSl7''@;'; put 'put ''bGV0IGg7c2koaD1haSgpKSYmKGQuY29udGVudENvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiY2xyLXRyZWUtbm9kZSIsITApfSxpbnB1dHM6e2V4cGFuZGFibGU6WyJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJd''@;'; put 'put ''LHNlbGVjdGVkOlsiY2xyU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOlsiY2xyRXhwYW5kZWQiLCJleHBhbmRlZCJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZToiY2xyU2VsZWN0ZWRDaGFuZ2UiLGV4cGFuZGVkQ2hhbmdlOiJjbHJFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOlt0''@;'; put 'put ''aShba1EsWXUse3Byb3ZpZGU6dmIsdXNlRXhpc3Rpbmc6WXV9XSldLG5nQ29udGVudFNlbGVjdG9yczokX2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlk''@;'; put 'put ''b3duIiwiZm9jdXMiXSxbImNvbnRlbnRDb250YWluZXIiLCIiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXRy''@;'; put 'put ''ZWVub2RlLXNwaW5uZXItY29udGFpbmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIGNsci10cmVlbm9kZS1jaGVja2JveCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY29udGVudCIsMywibW91c2Vkb3duIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiXSxbInNoYXBlIiwiYW5nbGUiLDEs''@;'; put 'put ''ImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVu''@;'; put 'put ''IiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEsImNsci1jaGVja2JveCIsMywiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImNoYW5nZSIsImZvY3VzIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwi''@;'; put 'put ''bmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKEdfZSksbWUoMCwiZGl2IiwwLDEpLHh0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbktleURvd24oZil9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigp''@;'; put 'put ''fSksUWUoMixqX2UsMiwxLCJidXR0b24iLDIpLFFlKDMsel9lLDIsMCwiZGl2IiwzKSxRZSg0LFVfZSwzLDQsImRpdiIsNCksbWUoNSwiZGl2Iiw1KSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzVHJlZU5vZGUoKX0pLGtyKDYpLFFlKDcsV19lLDMsMiwiZGl2Iiw2''@;'; put 'put ''KSx5ZSgpKCksbWUoOCwiZGl2Iiw3KSxrcig5LDEpLGtyKDEwLDIpLHF0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSx5ZSgpKSwyJmEmJihUcigiYXJpYS1leHBhbmRlZCIsZC5pc0V4cGFuZGFibGUoKT9kLmV4cGFuZGVkOm51bGwpKCJhcmlhLXNlbGVjdGVkIixkLmFyaWFTZWxl''@;'; put 'put ''Y3RlZCksQ2UoMiksUmUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmlzTW9kZWxMb2FkaW5nJiYhZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLENlKDMpLFJlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfHxkLmFyaWFTZWxlY3RlZCksQ2UoMSksUmUoIkB0b2dnbGVDaGlsZHJlbkFuaW0iLGQuZXhwYW5kU2VydmljZS5leHBhbmRlZD8iZXhwYW5kZWQiOiJjb2xsYXBzZWQi''@;'; put 'put ''KSxUcigicm9sZSIsZC5pc0V4cGFuZGFibGUoKSYmIWQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj8iZ3JvdXAiOm51bGwpLENlKDMpLFJlKCJwYXJlbnQiLGQuX21vZGVsKSl9LGRlcGVuZGVuY2llczpbQVEsWmkscXNdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W2ExKCJ0''@;'; put 'put ''b2dnbGVDaGlsZHJlbkFuaW0iLFtoYygiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbX3Moe2hlaWdodDowfSkscnUoMjAwLF9zKHtoZWlnaHQ6IioifSkpXSksaGMoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW19zKHtoZWlnaHQ6IioifSkscnUoMjAwLF9zKHtoZWlnaHQ6MH0pKV0pLEt4KCJl''@;'; put 'put ''eHBhbmRlZCIsX3Moe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxLeCgiY29sbGFwc2VkIixfcyh7aGVpZ2h0OjB9KSldKV19fSksY30pKCksZGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQse25hdGl2ZUVsZW1lbnQ6aH0sZixfKXt0aGlzLmZlYXR1cmVzU2Vy''@;'; put 'put ''dmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMuc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBUPV8ucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKGgsImZvY3VzaW4iKS5zdWJzY3JpYmUoVz0+e1cudGFyZ2V0PT09aCYmKHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5mb2N1c0Zp''@;'; put 'put ''cnN0VmlzaWJsZU5vZGUoKSxmLnJlbW92ZUF0dHJpYnV0ZShoLCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChUKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5mZWF0dXJl''@;'; put 'put ''c1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjB9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Um9vdE5vZGVz''@;'; put 'put ''KCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4h''@;'; put 'put ''YS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChzZyksdHQodkgpLHR0KE5pKSx0dChGbyksdHQoTm8pKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rp''@;'; put 'put ''b24oYSxkLGgpe2lmKDEmYSYmSW8oaCxnMSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigicm9sZSIsInRyZWUiKSgiYXJpYS1t''@;'; put 'put ''dWx0aXNlbGVjdGFibGUiLGQuaXNNdWx0aVNlbGVjdGFibGUpfSxpbnB1dHM6e2xhenk6WyJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbdGkoW2tRLHZIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsz''@;'; put 'put ''LCJjaGlsZHJlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCksUWUoMSxxX2UsMSwxLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwwKSksMiZhJiYoQ2UoMSksUmUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W0FR''@;'; put 'put ''LFppXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxMd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKGg4KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1t''@;'; put 'put ''aSh7aW1wb3J0czpbW29vLHNhLExGXV19KSxjfSkoKSxSd2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbU3dlLEV3ZSxMd2VdfSks''@;'; put 'put ''Y30pKCk7ZnVuY3Rpb24gSVEoYyxsLGEpe3JldHVybiBLZS5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBfSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5yZW5k''@;'; put 'put ''ZXJlcj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9Xyx0aGlzLmlkPURjKCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXI9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0''@;'; put 'put ''aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksdGhpcy5wYXJlbnR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5w''@;'; put 'put ''dXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2Uu''@;'; put 'put ''bGlzdGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShkMS5MRUZUKSxkLnN0b3BQcm9wYWdhdGlv''@;'; put 'put ''bigpfSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxp''@;'; put 'put ''c3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShpZCgxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaChfPT5fLmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJlJz''@;'; put 'put ''KHRoaXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0''@;'; put 'put ''aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJzdEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2VydmljZS5tb3ZlKHRoaXMucGFyZW50P2QxLlJJR0hUOmQxLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlciYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcj1kfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo''@;'; put 'put ''KCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuYmx1cigpfWFjdGl2YXRlKCl7UnModGhp''@;'; put 'put ''cy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IHF4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE1lKGE9PmFbMF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFu''@;'; put 'put ''ZEdldENoaWxkcmVuKCkucGlwZShNZShhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTWUoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtJRi5saW5rVmVydGljYWwoYSksdGhpcy5wYXJlbnQmJklGLmxpbmtQYXJlbnQoYSx0aGlzLmNs''@;'; put 'put ''b3NlQW5kR2V0VGhpcygpLGQxLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gSVEodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBJUShXaSh0aGlzKSwoKT0+''@;'; put 'put ''dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihGbyksYXIoYywxMiksYXIoS3MpLGFyKEViKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9''@;'; put 'put ''KSgpO2NvbnN0IE93ZT1RSihfSCk7bGV0IEZiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBiZX1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVudXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBGd2U9e3Byb3ZpZGU6RmIsdXNlRmFjdG9yeTpmdW5jdGlvbiBQd2UoYyl7cmV0dXJuIGN8fG5ldyBG''@;'; put 'put ''Yn0sZGVwczpbW25ldyB6MixuZXcgZzAsRmJdXX07bGV0IE5mPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmNkcj1oLHRoaXMuaXNNZW51Q2xvc2FibGU9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo''@;'; put 'put ''aXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuY2hhbmdlcy5zdWJzY3JpYmUoXz0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49XykpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKSl9bmdPbkRlc3Ryb3koKXt0''@;'; put 'put ''aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChjLDEyKSx0dChLcyksdHQoVWEpLHR0KEZiKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiwiaXNNZW51Q2xv''@;'; put 'put ''c2FibGUiXX0sZmVhdHVyZXM6W3RpKFtGd2Use3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LGpKLEtzLE93ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks''@;'; put 'put ''Y30pKCk7Y29uc3QgSHdlPVt7cHJvdmlkZTpTRSx1c2VDbGFzczooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMucGxhdGZvcm1JZD1oLHRoaXMuaWQ9RGMoKSx0aGlzLmRpc2FibGVkPSExLGQuc2V0QXR0cmlidXRlKGEubmF0''@;'; put 'put ''aXZlRWxlbWVudCwiaWQiLHRoaXMuaWQpLGQuc2V0QXR0cmlidXRlKGEubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpfWZvY3VzKCl7UnModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCIw''@;'; put 'put ''IiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjoic21vb3RoIixibG9jazoiY2VudGVyIixpbmxpbmU6Im5lYXJlc3QifSkpfWJsdXIoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIiksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmJsdXIoKSl9YWN0aXZhdGUoKXtScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTmkpLGFyKEZvKSxhcihHcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpfV07bGV0IEs4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZHJvcGRvd249YSx0''@;'; put 'put ''aGlzLl9kcm9wZG93blNlcnZpY2U9ZCx0aGlzLmZvY3VzYWJsZUl0ZW09aCx0aGlzLnNldEJ5RGVwcmVjYXRlZERpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNh''@;'; put 'put ''YmxlZD0hIWF8fCIiPT09YX1nZXQgZGlzYWJsZWREZXByZWNhdGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWREZXByZWNhdGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YSx0aGlzLnNldEJ5RGVwcmVjYXRlZERp''@;'; put 'put ''c2FibGVkPSEwfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVD''@;'; put 'put ''bG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFn''@;'; put 'put ''YXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykodHQoTmYpLHR0KEZiKSx0dChTRSkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93bkl0ZW0iLCIiXV0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5v''@;'; put 'put ''bkRyb3Bkb3duSXRlbUNsaWNrKCl9KSgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TcGFjZUtleWRvd24oZil9KSgia2V5ZG93bi5lbnRlciIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25FbnRlcktleWRvd24oZil9KSwyJmEmJihUcigicm9sZSIsIm1lbnVpdGVtIiko''@;'; put 'put ''ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCYmZC5zZXRCeURlcHJlY2F0ZWREaXNhYmxlZD8iIjpudWxsKSgiaWQiLGQuZHJvcGRvd25JdGVtSWQpLGRyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7''@;'; put 'put ''ZGlzYWJsZWQ6WyJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZGlzYWJsZWREZXByZWNhdGVkOlsiZGlzYWJsZWQiLCJkaXNhYmxlZERlcHJlY2F0ZWQiXSxkcm9wZG93bkl0ZW1JZDpbImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W3RpKFtId2VdKV19KSxjfSkoKTt2YXIgR3I9''@;'; put 'put ''ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9QX1JJR0hUPTRd''@;'; put 'put ''PSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NFTlRFUj05XT0i''@;'; put 'put ''TEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oR3J8fHt9KTtjb25zdCBMUT0iYWJzb2x1dGUiO2NsYXNzIEJ3ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxM''@;'; put 'put ''aXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249TFEsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9y''@;'; put 'put ''KGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6Xz0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksXyYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJl''@;'; put 'put ''Y3QoKSxXPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgaWU9VC5sZWZ0LVcubGVmdCtoLGdlPVQudG9wLVcudG9wK2Y7c3dpdGNoKGEpe2Nhc2UgR3IuTEVGVF9UT1A6Y2FzZSBHci5UT1BfTEVGVDpicmVhaztjYXNlIEdyLlRPUF9DRU5URVI6aWUrPVQud2lkdGgv''@;'; put 'put ''MjticmVhaztjYXNlIEdyLlRPUF9SSUdIVDpjYXNlIEdyLlJJR0hUX1RPUDppZSs9VC53aWR0aDticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Z2UrPVQuaGVpZ2h0O2JyZWFrO2Nhc2UgR3IuQk9UVE9NX0NFTlRFUjpnZSs9VC5oZWlnaHQsaWUrPVQud2lk''@;'; put 'put ''dGgvMjticmVhaztjYXNlIEdyLkJPVFRPTV9SSUdIVDpjYXNlIEdyLlJJR0hUX0JPVFRPTTpnZSs9VC5oZWlnaHQsaWUrPVQud2lkdGg7YnJlYWs7Y2FzZSBHci5MRUZUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIEdyLlJJR0hUX0NFTlRFUjpnZSs9VC5oZWlnaHQvMixpZSs9''@;'; put 'put ''VC53aWR0aH1zd2l0Y2goZCl7Y2FzZSBHci5MRUZUX1RPUDpjYXNlIEdyLlRPUF9MRUZUOmJyZWFrO2Nhc2UgR3IuVE9QX0NFTlRFUjppZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuVE9QX1JJR0hUOmNhc2UgR3IuUklHSFRfVE9QOmllLT1XLndpZHRoO2JyZWFrO2Nhc2UgR3IuTEVGVF9C''@;'; put 'put ''T1RUT006Y2FzZSBHci5CT1RUT01fTEVGVDpnZS09Vy5oZWlnaHQ7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0aC8yO2JyZWFrO2Nhc2UgR3IuQk9UVE9NX1JJR0hUOmNhc2UgR3IuUklHSFRfQk9UVE9NOmdlLT1XLmhlaWdodCxpZS09Vy53aWR0''@;'; put 'put ''aDticmVhaztjYXNlIEdyLkxFRlRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yO2JyZWFrO2Nhc2UgR3IuUklHSFRfQ0VOVEVSOmdlLT1XLmhlaWdodC8yLGllLT1XLndpZHRofWNvbnN0IHdlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxFZT1wYXJzZUludCh3ZS5tYXJnaW5MZWZ0LDEw''@;'; put 'put ''KSxaZT1wYXJzZUludCh3ZS5tYXJnaW5SaWdodCwxMCksb3Q9cGFyc2VJbnQod2UubWFyZ2luVG9wLDEwKSxldD1wYXJzZUludCh3ZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEdyLkxFRlRfVE9QOmNhc2UgR3IuVE9QX0xFRlQ6Y2FzZSBHci5UT1BfUklHSFQ6Y2FzZSBHci5S''@;'; put 'put ''SUdIVF9UT1A6KGQ9PT1Hci5CT1RUT01fUklHSFR8fGQ9PT1Hci5SSUdIVF9CT1RUT00pJiYoZ2UtPWV0LGllLT1aZSksKGQ9PT1Hci5CT1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1vdCxpZSs9RWUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihn''@;'; put 'put ''ZSs9b3QsaWUrPUVlKSwoZD09PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLkxFRlRfQk9UVE9NOmNhc2UgR3IuQk9UVE9NX0xFRlQ6Y2FzZSBHci5CT1RUT01fUklHSFQ6Y2FzZSBHci5SSUdIVF9CT1RUT006KGQ9PT1Hci5C''@;'; put 'put ''T1RUT01fTEVGVHx8ZD09PUdyLkxFRlRfQk9UVE9NKSYmKGdlLT1ldCxpZSs9RWUpLChkPT09R3IuQk9UVE9NX1JJR0hUfHxkPT09R3IuUklHSFRfQk9UVE9NKSYmKGdlLT1ldCxpZS09WmUpLChkPT09R3IuVE9QX0xFRlR8fGQ9PT1Hci5MRUZUX1RPUCkmJihnZSs9b3QsaWUrPUVlKSwoZD09''@;'; put 'put ''PUdyLlRPUF9SSUdIVHx8ZD09PUdyLlJJR0hUX1RPUCkmJihnZSs9b3QsaWUtPVplKTticmVhaztjYXNlIEdyLlRPUF9DRU5URVI6Z2UtPWV0LGllKz1FZSxpZS09WmU7YnJlYWs7Y2FzZSBHci5CT1RUT01fQ0VOVEVSOmdlKz1vdCxpZSs9RWUsaWUtPVplO2JyZWFrO2Nhc2UgR3IuTEVGVF9D''@;'; put 'put ''RU5URVI6Z2UrPW90LGdlLT1ldCxpZS09WmU7YnJlYWs7Y2FzZSBHci5SSUdIVF9DRU5URVI6Z2UrPW90LGdlLT1ldCxpZSs9RWV9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKGllKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91''@;'; put 'put ''bmQoZ2UpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0''@;'; put 'put ''aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHxhPT09TFF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBiZTtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1''@;'; put 'put ''bWVudCYmKHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92''@;'; put 'put ''ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3Jv''@;'; put 'put ''bGwmJih0aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8''@;'; put 'put ''ImF1dG8iPT09YS5vdmVyZmxvd1l9fWxldCBiSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnRIb3N0PWQsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSExLHRoaXMucG9wb3Zlck9wdGlvbnM9e30sdGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5kb2N1bWVudEVT''@;'; put 'put ''Q0xpc3RlbmVyPW51bGwsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2s9aD0+e3RoaXMuYW5jaG9yRWxlbS5jb250YWlucyhoLnRhcmdldCl8fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LHRoaXMuZWw9YS5nZXQoTmkpLHRoaXMudG9nZ2xlU2VydmljZT1hLmdldChLcyks''@;'; put 'put ''dGhpcy5yZW5kZXJlcj1hLmdldChGbyksdGhpcy5uZ1pvbmU9YS5nZXQoTm8pLHRoaXMucmVmPWEuZ2V0KFVhKSx0aGlzLmFuY2hvckVsZW09ZC5uYXRpdmVFbGVtZW50LHRoaXMucG9wb3Zlckluc3RhbmNlPW5ldyBCd2UodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKToodGhpcy5yZWxlYXNlKCksdGhpcy5kZXRhY2hFU0NMaXN0ZW5lcigpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5h''@;'; put 'put ''bmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfWdldCBpc09mZlNjcmVlbigpe3JldHVybiF0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNl''@;'; put 'put ''LmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zl''@;'; put 'put ''ckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlvbnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVu''@;'; put 'put ''KCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmbDIoYS5rZXkpPT09d28uRXNjYXBlJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9j''@;'; put 'put ''dW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50''@;'; put 'put ''JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYm''@;'; put 'put ''ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KE5p''@;'; put 'put ''LDQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImlzLW9mZi1zY3JlZW4iLGQuaXNPZmZTY3JlZW4pfX0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmKXtp''@;'; put 'put ''ZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUdyLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUCk6KHRo''@;'; put 'put ''aXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRz''@;'; put 'put ''aWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUdyLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5h''@;'; put 'put ''bmNob3JQb2ludD1Hci5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxl''@;'; put 'put ''ZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1Hci5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1Hci5SSUdIVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuTEVGVF9UT1A7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9UT1AsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2Jy''@;'; put 'put ''ZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9R3IuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWluZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMu''@;'; put 'put ''aXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVz''@;'; put 'put ''ZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoYywxMiksdHQoX0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJp''@;'; put 'put ''ZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmSW8oaCxTRSw0KSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihUcigicm9sZSIsIm1lbnUiKSxkcigiZHJvcGRvd24tbWVudSIsITApKX0saW5w''@;'; put 'put ''dXRzOntwb3NpdGlvbjpbImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W2VvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLGtyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbGc9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSEwLGEucGFyZW50JiYodGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMSksZi50cmlnZ2VyPWgubmF0aXZlRWxlbWVudH1nZXQgYWN0aXZlKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9nZ2xlU2VydmljZS5vcGVufW9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmYpLHR0KEtzKSx0dChOaSksdHQoX0gpKX0s''@;'; put 'put ''Yy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyIiLCJjbHJEcm9wZG93blRvZ2dsZSIsIiJdXSxob3N0VmFyczoxMCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu''@;'; put 'put ''IGQub25Ecm9wZG93blRyaWdnZXJDbGljayhmKX0pLDImYSYmKFRyKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpKCJhcmlhLWV4cGFuZGVkIixkLmFjdGl2ZSksZHIoImRyb3Bkb3duLXRvZ2dsZSIsZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImRyb3Bkb3duLWl0ZW0iLCFkLmlzUm9vdExldmVsVG9n''@;'; put 'put ''Z2xlKSgiZXhwYW5kYWJsZSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJhY3RpdmUiLGQuYWN0aXZlKSl9fSksY30pKCkseUg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1''@;'; put 'put ''MDI3NWluaj1taSh7aW1wb3J0czpbW29vXSxzZCxzYV19KSxjfSkoKTtjb25zdCBqd2U9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiXTtsZXQgd0g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hh''@;'; put 'put ''cGU9ImluZm8tY2lyY2xlIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9hbGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7andlLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFs''@;'; put 'put ''ZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0''@;'; put 'put ''aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1nZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFz''@;'; put 'put ''czoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0iZXhjbGFtYXRpb24tdHJpYW5nbGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0i''@;'; put 'put ''ZXhjbGFtYXRpb24tY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0iY2hlY2stY2lyY2xlIixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEVzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgYmV9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVydHMoKXtyZXR1cm4gdGhpcy5h''@;'; put 'put ''bGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhpcy5jdXJyZW50PXRoaXMuYWN0''@;'; put 'put ''aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYWxsQWxlcnRzPWEs''@;'; put 'put ''dGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuY3VycmVudD49dGhp''@;'; put 'put ''cy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJyZW50KzEsdGhpcy5fY2hhbmdl''@;'; put 'put ''Lm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl''@;'; put 'put ''bnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKGEmJih0aGlzLl9j''@;'; put 'put ''dXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxIYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlz''@;'; put 'put ''LmNvbW1vblN0cmluZ3M9Zix0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5n''@;'; put 'put ''ZWQ9bmV3IEVyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfXNldCBhbGVydEljb25TaGFw''@;'; put 'put ''ZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJv''@;'; put 'put ''bVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVydFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlz''@;'; put 'put ''Lm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xvc2UoKXtpZighdGhp''@;'; put 'put ''cy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1p''@;'; put 'put ''dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KHdIKSx0dChVYSksdHQoVkUsOCksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7aXNTbWFsbDpbImNsckFsZXJ0U2l6''@;'; put 'put ''ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOlsiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixhbGVydFR5cGU6''@;'; put 'put ''WyJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOlsiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVh''@;'; put 'put ''dHVyZXM6W3RpKFt3SF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1oaWRkZW4iLCJhbGVydC1zbSIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFz''@;'; put 'put ''cyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh''@;'; put 'put ''JiYoVGkoKSxRZSgwLFhfZSw0LDgsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1ppLHVjLHFzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxQUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp''@;'; put 'put ''e3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQod0gpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250''@;'; put 'put ''ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJjZHMtaWNvbiIsMSkseWUo''@;'; put 'put ''KSxrcigyKSksMiZhJiYoQ2UoMSksVHIoInNoYXBlIixkLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsZC5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxOYj0oKCk9PntjbGFzcyBj''@;'; put 'put ''e31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksRlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0''@;'; put 'put ''IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2Vy''@;'; put 'put ''dmljZS5jdXJyZW50PWF9Z2V0IHByZXZpb3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VS''@;'; put 'put ''UkVOVDooMT09PWE/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl''@;'; put 'put ''dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZp''@;'; put 'put ''Y2UuY291bnQudG9TdHJpbmcoKX0pfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hh''@;'; put 'put ''bmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5t''@;'; put 'put ''dWx0aUFsZXJ0U2VydmljZS5wcmV2aW91cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChWRSksdHQoRXMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4OlsiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRl''@;'; put 'put ''eCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwi''@;'; put 'put ''YWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFu''@;'; put 'put ''Z2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLHF0KDMsImNkcy1pY29uIiwzKSx5ZSgpKCks''@;'; put 'put ''bWUoNCwiZGl2Iiw0KSxOZSg1KSx5ZSgpLG1lKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxxdCg4LCJjZHMtaWNvbiIsNikseWUoKSgpKCkpLDImYSYmKENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxl''@;'; put 'put ''cnRBcmlhTGFiZWwpLENlKDMpLGpjKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLENlKDIpLFRyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxjfSkoKSxIUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgRXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IEVyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9''@;'; put 'put ''W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3Vy''@;'; put 'put ''cmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2''@;'; put 'put ''aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJy''@;'; put 'put ''ZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11''@;'; put 'put ''bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVkUpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7''@;'; put 'put ''aWYoMSZhJiZJbyhoLEhiLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZkcigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSko''@;'; put 'put ''ImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nlc3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4Olsi''@;'; put 'put ''Y2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5wdXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6WyJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh''@;'; put 'put ''bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbVkVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmViZSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1szLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKFFfZSksUWUoMCxKX2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwwKSxrcigxKSksMiZhJiZSZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKX0sZGVwZW5kZW5jaWVzOltGUSxaaV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNP''@;'; put 'put ''TVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksTlE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKHMxLFJLLG8xLGJtZSxuYil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSks''@;'; put 'put ''Yy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksendlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W05R''@;'; put 'put ''XX0pLGN9KSgpLFhzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLk5BVl9MRVZFTF8xPTEsYy5OQVZfTEVWRUxfMj0yLGMuTkFWX0NMT1NFX0FMTD0iTkFWX0NMT1NFX0FMTCIsYy5OQVZfT1BFTj0iTkFWX09QRU4iLGMuTkFWX0NMT1NFPSJOQVZfQ0xPU0UiLGMuTkFWX1RPR0dMRT0iTkFWX1RP''@;'; put 'put ''R0dMRSIsYy5OQVZfQ0xBU1NfSEFNQlVSR0VSX01FTlU9Im9wZW4taGFtYnVyZ2VyLW1lbnUiLGMuTkFWX0NMQVNTX09WRVJGTE9XX01FTlU9Im9wZW4tb3ZlcmZsb3ctbWVudSIsYy5OQVZfQ0xBU1NfVFJJR0dFUl8xPSJoZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIiLGMuTkFWX0NMQVNTX1RS''@;'; put 'put ''SUdHRVJfMj0iaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIiLGMuTkFWX0NMQVNTX0xFVkVMXzE9ImNsci1uYXYtbGV2ZWwtMSIsYy5OQVZfQ0xBU1NfTEVWRUxfMj0iY2xyLW5hdi1sZXZlbC0yIixjfSkoKTtjbGFzcyBWUXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2NvbnRyb2xDb2RlPWwsdGhp''@;'; put 'put ''cy5fbmF2TGV2ZWw9YX1nZXQgY29udHJvbENvZGUoKXtyZXR1cm4gdGhpcy5fY29udHJvbENvZGV9Z2V0IG5hdkxldmVsKCl7cmV0dXJuIHRoaXMuX25hdkxldmVsfX1sZXQgQkU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMucmVzcG9uc2l2ZU5hdkxpc3Q9W10sdGhpcy5yZWdp''@;'; put 'put ''c3Rlck5hdlN1YmplY3Q9bmV3IHF4LHRoaXMuY29udHJvbE5hdlN1YmplY3Q9bmV3IGJlLHRoaXMuY2xvc2VBbGxOYXZzKCl9Z2V0IHJlZ2lzdGVyZWROYXZzKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpfWdldCBuYXZDb250cm9sKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY29udHJvbE5hdlN1YmplY3QuYXNPYnNlcnZhYmxlKCl9cmVnaXN0ZXJOYXYoYSl7IWF8fHRoaXMuaXNOYXZSZWdpc3RlcmVkKGEpfHwodGhpcy5yZXNwb25zaXZlTmF2TGlzdC5wdXNoKGEpLHRoaXMucmVnaXN0ZXJOYXZTdWJqZWN0Lm5leHQodGhpcy5yZXNwb25zaXZlTmF2TGlzdCkp''@;'; put 'put ''fWlzTmF2UmVnaXN0ZXJlZChhKXtyZXR1cm4gdGhpcy5yZXNwb25zaXZlTmF2TGlzdC5pbmRleE9mKGEpPi0xJiYoY29uc29sZS5lcnJvcigiTXVsdGlwbGUgY2xyLW5hdi1sZXZlbCAiK2ErIiBhdHRyaWJ1dGVzIGZvdW5kLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQgb25seSBvbmUgZXhpc3Rz''@;'; put 'put ''IiksITApfXVucmVnaXN0ZXJOYXYoYSl7Y29uc3QgZD10aGlzLnJlc3BvbnNpdmVOYXZMaXN0LmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMucmVzcG9uc2l2ZU5hdkxpc3Quc3BsaWNlKGQsMSksdGhpcy5yZWdpc3Rlck5hdlN1YmplY3QubmV4dCh0aGlzLnJlc3BvbnNpdmVOYXZMaXN0KSl9c2Vu''@;'; put 'put ''ZENvbnRyb2xNZXNzYWdlKGEsZCl7Y29uc3QgaD1uZXcgVlEoYSxkKTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoaCl9Y2xvc2VBbGxOYXZzKCl7Y29uc3QgYT1uZXcgVlEoWHMuTkFWX0NMT1NFX0FMTCwtOTk5KTt0aGlzLmNvbnRyb2xOYXZTdWJqZWN0Lm5leHQoYSl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFV3ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2FdXX0pLGN9KSgpO2Z1bmN0aW9uIGpRKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7cmV0dXJuIGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAi''@;'; put 'put ''KSxsLmNsYXNzTGlzdC5hZGQoIm9mZnNjcmVlbi1mb2N1cy1yZWJvdW5kZXIiKSxsfWNsYXNzIFh3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5hY3RpdmU9ITEsUnMoZCkmJih0aGlzLl9kb2N1bWVudD1hLmdldChMcykpLGguZm9jdXNUcmFwSWR8fChoLmZv''@;'; put 'put ''Y3VzVHJhcElkPWZ1bmN0aW9uIFBnZShjPSJfIil7cmV0dXJuYCR7Y30ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLDkpfWB9KCkpLHRoaXMuZm9jdXNUcmFwRWxlbWVudD1ofWVuYWJsZUZvY3VzVHJhcCgpe2NvbnN0IGw9dGhpcy5mb2N1c1RyYXBFbGVtZW50LGE9bC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCJbY2RzLWZpcnN0LWZvY3VzXSIpLGQ9dGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtpZihoRS5nZXRDdXJyZW50KCk9PT1sKXRocm93IG5ldyBFcnJvcigiRm9jdXMgdHJhcCBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5zdGFuY2UuIik7dGhpcy5maXJz''@;'; put 'put ''dEZvY3VzRWxlbWVudD1hfHx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsZnVuY3Rpb24gcXdlKGMsbCl7aWYobCYmIWwudG9wUmVib3VuZEVsZW1lbnQmJiFsLmJvdHRvbVJlYm91bmRFbGVtZW50KXtsLnRvcFJlYm91bmRFbGVtZW50PWpRKGMpLGwuYm90dG9tUmVib3VuZEVsZW1lbnQ9alEoYyk7''@;'; put 'put ''Y29uc3QgYT1sLnBhcmVudEVsZW1lbnQsZD1sLm5leHRTaWJsaW5nO2EmJihhLmluc2VydEJlZm9yZShsLnRvcFJlYm91bmRFbGVtZW50LGwpLGQ/YS5pbnNlcnRCZWZvcmUobC5ib3R0b21SZWJvdW5kRWxlbWVudCxkKTphLmFwcGVuZENoaWxkKGwuYm90dG9tUmVib3VuZEVsZW1lbnQpKX19''@;'; put 'put ''KHRoaXMuX2RvY3VtZW50LGwpLGZ1bmN0aW9uIEY2ZShjKXtzd2l0Y2goYy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaW5wdXQiOnJldHVybiJoaWRkZW4iIT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpJiYhYy5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''InJlYWRvbmx5Iik7Y2FzZSJidXR0b24iOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hYy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIik7Y2FzZSJpZnJhbWUiOmNhc2UiZW1iZWQiOmNhc2Uib2JqZWN0IjpyZXR1cm4hMDtjYXNlImEiOmNhc2UiYXJlYSI6cmV0dXJuIGMuaGFz''@;'; put 'put ''QXR0cmlidXRlKCJocmVmIik7Y2FzZSJhdWRpbyI6Y2FzZSJ2aWRlbyI6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJjb250cm9scyIpO2RlZmF1bHQ6cmV0dXJuIGMuaGFzQXR0cmlidXRlKCJ0YWJpbmRleCIpfHwidHJ1ZSI9PT1jLmdldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIil8fCJi''@;'; put 'put ''dXR0b24iPT09Yy5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmIWMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfX0obCl8fGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksZCYmZnVuY3Rpb24gVjZlKGMpe3JldHVybiEhYyYmYyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50fShkKSYmKHRoaXMu''@;'; put 'put ''cHJldmlvdXNGb2N1cz1kKSxoRS5zZXRDdXJyZW50KGwpO2NvbnN0IGg9c2V0VGltZW91dCgoKT0+e3RoaXMuZmlyc3RGb2N1c0VsZW1lbnQuZm9jdXMoKSxjbGVhclRpbWVvdXQoaCl9LDEwKTt0aGlzLm9uRm9jdXNJbkV2ZW50PXRoaXMub25Gb2N1c0luLmJpbmQodGhpcyksdGhpcy51bmxp''@;'; put 'put ''c3Rlbj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLl9kb2N1bWVudCwiZm9jdXNpbiIsdGhpcy5vbkZvY3VzSW5FdmVudCksdGhpcy5hY3RpdmU9ITB9cmVtb3ZlRm9jdXNUcmFwKCl7dGhpcy51bmxpc3RlbiYmdGhpcy51bmxpc3RlbigpLGZ1bmN0aW9uIEt3ZShjKXtpZihjKXtjb25zdCBs''@;'; put 'put ''PWMucGFyZW50RWxlbWVudDtpZihsKXtjb25zdCBhPWMudG9wUmVib3VuZEVsZW1lbnQsZD1jLmJvdHRvbVJlYm91bmRFbGVtZW50O2EmJmwucmVtb3ZlQ2hpbGQoYSksZCYmbC5yZW1vdmVDaGlsZChkKX1kZWxldGUgYy50b3BSZWJvdW5kRWxlbWVudCxkZWxldGUgYy5ib3R0b21SZWJvdW5k''@;'; put 'put ''RWxlbWVudH19KHRoaXMuZm9jdXNUcmFwRWxlbWVudCksdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5mb2N1c1RyYXBFbGVtZW50LCJ0YWJpbmRleCIpLGhFLmFjdGl2YXRlUHJldmlvdXNDdXJyZW50KCksdGhpcy5hY3RpdmU9ITEsdGhpcy5wcmV2aW91c0ZvY3VzJiZ0aGlz''@;'; put 'put ''LnByZXZpb3VzRm9jdXMuZm9jdXMoKX1vbkZvY3VzSW4obCl7IWZ1bmN0aW9uIEd3ZShjLGwsYSl7Y29uc3QgZD1oRS5nZXRDdXJyZW50KCk9PT1sLGg9ZnVuY3Rpb24gJHdlKGMsbCl7cmV0dXJuIGM9PT1sLnRvcFJlYm91bmRFbGVtZW50fHxjPT09bC5ib3R0b21SZWJvdW5kRWxlbWVudHx8''@;'; put 'put ''IShsLmNvbnRhaW5zKGMpfHxudWxsIT09bCYmbC5jb250YWlucyhjKSl9KGMsbCk7ZCYmaD8oYT1hfHxsKS5mb2N1cygpOmMuZm9jdXMoKX0obC5jb21wb3NlZFBhdGgoKVswXSx0aGlzLmZvY3VzVHJhcEVsZW1lbnQsdGhpcy5maXJzdEZvY3VzRWxlbWVudCl9fWxldCB6UT0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgWHdle2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7c3VwZXIoZixfLGEsaC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc3BvbnNpdmVOYXZTZXJ2aWNlPWQsdGhpcy5lbGVtZW50UmVmPWgsdGhpcy5faXNPcGVuPSExLFJzKGEpJiYodGhpcy5fZG9jdW1lbnQ9Xy5nZXQoTHMpKSx0''@;'; put 'put ''aGlzLl9zdWJzY3JpcHRpb249ZC5uYXZDb250cm9sLnBpcGUoSWEoVD0+VC5uYXZMZXZlbD09PXRoaXMubGV2ZWwpLElhKCh7Y29udHJvbENvZGU6VH0pPT5UPT09WHMuTkFWX09QRU4mJiF0aGlzLmlzT3Blbnx8VD09PVhzLk5BVl9DTE9TRSYmdGhpcy5pc09wZW4pKS5zdWJzY3JpYmUoKHtj''@;'; put 'put ''b250cm9sQ29kZTpUfSk9PntUIT09WHMuTkFWX09QRU4/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSksdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChkLm5hdkNvbnRyb2wucGlwZShJYSgoe2NvbnRyb2xDb2RlOlR9KT0+VD09PVhzLk5BVl9DTE9TRV9BTEwpKS5zdWJzY3JpYmUoKCk9PnRoaXMu''@;'; put 'put ''Y2xvc2UoKSkpfWdldCBsZXZlbCgpe3JldHVybiB0aGlzLl9sZXZlbH1nZXQgcmVzcG9uc2l2ZU5hdkNvZGVzKCl7cmV0dXJuIFhzfWdldCBpc09wZW4oKXtyZXR1cm4gdGhpcy5faXNPcGVufW5nT25Jbml0KCl7dGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8KHRoaXMuY2xvc2VCdXR0b25B''@;'; put 'put ''cmlhTGFiZWw9dGhpcy5fbGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMT94Ri5yZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6eEYucmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2UpLHRoaXMubGV2ZWw9PT1Ycy5OQVZfTEVWRUxfMXx8dGhpcy5sZXZlbD09PVhzLk5BVl9MRVZFTF8yPyh0aGlzLnJlc3Bv''@;'; put 'put ''bnNpdmVOYXZTZXJ2aWNlLnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuYWRkTmF2Q2xhc3ModGhpcy5sZXZlbCkpOmNvbnNvbGUuZXJyb3IoIk5hdiBMZXZlbCBjYW4gb25seSBiZSAxIG9yIDIiKX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPSgoYyxsKT0+e2NvbnN0IGE9dGhpcy5f''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2RzLWludGVybmFsLWNsb3NlLWJ1dHRvbiIpO3JldHVybiBhLnNldEF0dHJpYnV0ZSgiaWNvbi1zaXplIiwiMzIiKSxhLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsbCksYS5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGEuc2V0''@;'; put 'put ''QXR0cmlidXRlKCJ0eXBlIiwiYnV0dG9uIiksYS5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsInRydWUiKSxhLmNsYXNzTmFtZT0iY2xyLW5hdi1jbG9zZSIsYX0pKDAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbCk7dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLHRoaXMuY2xvc2UuYmlu''@;'; put 'put ''ZCh0aGlzKSksdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5maXJzdENoaWxkKSx0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoPDk5MiYmdGhpcy5jbG9zZSgpfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS51bnJlZ2lzdGVyTmF2KHRoaXMubGV2ZWwpLHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uUmVzaXplKGEpe2EudGFyZ2V0LmlubmVyV2lkdGg8OTkyJiZ0aGlzLmlzT3Blbj90aGlzLmNsb3NlKCk6dGhpcy5zaG93''@;'; put 'put ''TmF2aWdhdGlvbigpfW9uTW91c2VDbGljayhhKXtsZXQgZD1hO2NvbnN0IGg9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7Zm9yKDtkOyl7aWYoZD09PWgpcmV0dXJuO2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJuYXYtbGluayIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsaWVudFdp''@;'; put 'put ''ZHRoPDk5MilyZXR1cm4gdm9pZCB0aGlzLmNsb3NlKCk7ZD1kLnBhcmVudE5vZGV9fWFkZE5hdkNsYXNzKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O2E9PT1Ycy5OQVZfTEVWRUxfMT9kLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMSk6YT09PVhz''@;'; put 'put ''Lk5BVl9MRVZFTF8yJiZkLmFkZChYcy5OQVZfQ0xBU1NfTEVWRUxfMil9b3Blbigpe3RoaXMuX2lzT3Blbj0hMCx0aGlzLnNob3dOYXZpZ2F0aW9uKCksdGhpcy5lbmFibGVGb2N1c1RyYXAoKSx0aGlzLnNob3dDbG9zZUJ1dHRvbigpLHRoaXMucmVzcG9uc2l2ZU5hdlNlcnZpY2Uuc2VuZENv''@;'; put 'put ''bnRyb2xNZXNzYWdlKFhzLk5BVl9PUEVOLHRoaXMubGV2ZWwpfWNsb3NlKCl7dGhpcy5faXNPcGVuPSExLHRoaXMuaGlkZU5hdmlnYXRpb24oKSx0aGlzLnJlbW92ZUZvY3VzVHJhcCgpLHRoaXMuaGlkZUNsb3NlQnV0dG9uKCksdGhpcy5yZXNwb25zaXZlTmF2U2VydmljZS5zZW5kQ29udHJv''@;'; put 'put ''bE1lc3NhZ2UoWHMuTkFWX0NMT1NFLHRoaXMubGV2ZWwpfWhpZGVOYXZpZ2F0aW9uKCl7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxl''@;'; put 'put ''bWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iLCJ0cnVlIil9c2hvd05hdmlnYXRpb24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRl''@;'; put 'put ''KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJoaWRkZW4iKX1oaWRlQ2xvc2VCdXR0b24oKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwiYXJpYS1oaWRkZW4iLCJ0cnVlIiksdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmNsci1uYXYtY2xvc2UiKSwiaGlkZGVuIiwidHJ1ZSIpfXNob3dDbG9zZUJ1dHRvbigpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0''@;'; put 'put ''b3IoIi5jbHItbmF2LWNsb3NlIiksImFyaWEtaGlkZGVuIiwiZmFsc2UiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuY2xyLW5hdi1jbG9zZSIpLCJoaWRkZW4iKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoR3MpLHR0KEJFKSx0dChOaSksdHQoRm8pLHR0KEVhKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsci1uYXYtbGV2ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgicmVz''@;'; put 'put ''aXplIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblJlc2l6ZShmKX0sMCxtNikoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk1vdXNlQ2xpY2soZi50YXJnZXQpfSl9LGlucHV0czp7X2xldmVsOlsiY2xyLW5hdi1sZXZlbCIsIl9sZXZlbCJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOlsi''@;'; put 'put ''Y2xvc2VBcmlhTGFiZWwiLCJjbG9zZUJ1dHRvbkFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZW9dfSksY30pKCksUXdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5SF1dfSksY30pKCksVVE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKHphLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6RW8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihUaSgpLFFlKDAscmJlLDEsMCwibmct''@;'; put 'put ''dGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGVDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9''@;'; put 'put ''KSgpLElwPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5OHt9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKCl7bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD14YShjKSkpKGR8fGMpfX0oKSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJd''@;'; put 'put ''XSxmZWF0dXJlczpbZW9dfSksY30pKCksY2c9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHc4e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRh''@;'; put 'put ''YnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChVYSksdHQoSXAsOCksdHQoeDgp''@;'; put 'put ''LHR0KCQ1KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbZW9dfSksY30pKCk7dmFyIHVnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVS''@;'; put 'put ''VElDQUw9InZlcnRpY2FsIixjfSh1Z3x8e30pO2xldCBWYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9dWcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVy''@;'; put 'put ''biB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT11Zy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJl''@;'; put 'put ''bi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46Yyxm''@;'; put 'put ''YWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdENlPTAsTHA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10''@;'; put 'put ''YWItY29udGVudC0iK3RDZSsrKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRh''@;'; put 'put ''Ykxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVSZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3''@;'; put 'put ''Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVmKTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1''@;'; put 'put ''MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZSbyhpYmUsNyksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOlsi''@;'; put 'put ''aWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVkUmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKFRpKCksUWUoMCxvYmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLEVjKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG5DZT0wO2NvbnN0IENIPW5ldyBNaSgiVEFCU19JRCIpLGlDZT17cHJvdmlkZTpDSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHJDZSgpe3JldHVybiJj''@;'; put 'put ''bHItdGFicy0iK25DZSsrfX07bGV0IG9DZT0wLFJwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMuY2ZyPWYsdGhpcy52aWV3Q29udGFpbmVyUmVmPV8sdGhpcy50YWJzU2Vydmlj''@;'; put 'put ''ZT1ULHRoaXMudGFic0lkPVcsdGhpcy50YWJMaW5rSWR8fCh0aGlzLnRhYkxpbmtJZD0iY2xyLXRhYi1saW5rLSIrb0NlKyspO2NvbnN0IGllPXRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFVRKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJl''@;'; put 'put ''Zi5jcmVhdGVDb21wb25lbnQoaWUsdm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PXVnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93''@;'; put 'put ''KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250''@;'; put 'put ''ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoJDUpLHR0KHg4KSx0dChOaSksdHQoSzApLHR0KGFzKSx0dChWYiksdHQoQ0gpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFi''@;'; put 'put ''IiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJih0MSgiaWQiLGQudGFiTGlua0lkKSxUcigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJv''@;'; put 'put ''bHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxkcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOlsi''@;'; put 'put ''aWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93OlsiY2xyVGFiTGlua0luT3ZlcmZsb3ciLCJpbk92ZXJmbG93Il19fSksY30pKCksT3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLGgu''@;'; put 'put ''cmVnaXN0ZXIodGhpcyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1uZ09uRGVzdHJveSgpe3RoaXMudGFic1NlcnZpY2UudW5yZWdpc3Rlcih0aGlzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykodHQoJDUpLHR0KHg4KSx0dChWYikpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihJbyhoLFJwLDcpLElvKGgsTHAsNykpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQu''@;'; put 'put ''dGFiTGluaz1mLmZpcnN0KSxzaShmPWFpKCkpJiYoZC50YWJDb250ZW50PWYuZmlyc3QpfX0sZmVhdHVyZXM6W3RpKFtseWVdKV0sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigwKSl9LGVuY2Fwc3VsYXRp''@;'; put 'put ''b246Mn0pLGN9KSgpLFNIPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxkZz0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9Xyx0aGlzLnRhYkxpbmtFbGVtZW50cz1bXSx0aGlzLl9tb3VzZWRvd249ITEs''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyh1ZykubWFwKGQ9PnVnW2RdKS5pbmRleE9mKGEpPj0wJiYodGhpcy50YWJzU2Vy''@;'; put 'put ''dmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhpcy50YWJzU2VydmljZS5hY3RpdmVU''@;'; put 'put ''YWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhpcy5vdmVyZmxvd1Bvc2l0aW9ufWdl''@;'; put 'put ''dCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09dWcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5Rm9jdXMuZm9jdXNDdXJyZW50KCl9''@;'; put 'put ''Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1hfW5nQWZ0''@;'; put 'put ''ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdHlwZW9mIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBd''@;'; put 'put ''LmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2Vydmlj''@;'; put 'put ''ZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlv''@;'; put 'put ''biYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlv''@;'; put 'put ''bi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3duJiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25G''@;'; put 'put ''b2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmIXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFi''@;'; put 'put ''UG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9uRXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxk''@;'; put 'put ''KXthLnRhcmdldD09PWR8fGQuY29udGFpbnMoYS50YXJnZXQpfHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWxpc3RlbkZvclRhYkxp''@;'; put 'put ''bmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoY3AodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXM9dGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspLHRoaXMudGFiTGlua0VsZW1lbnRzPXRo''@;'; put 'put ''aXMuX3RhYkxpbmtEaXJlY3RpdmVzLm1hcChhPT5hLmVsLm5hdGl2ZUVsZW1lbnQpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KCQ1KSx0dChLcyksdHQoVmIpLHR0KENIKSx0dChFcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVj''@;'; put 'put ''dG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZJbyhoLE9wLDQpLDImYSl7bGV0IGY7c2koZj1haSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKEk4LDcpLFJvKFNILDUsTmkpLFJvKHNi''@;'; put 'put ''ZSw3LGFzKSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLHNpKGg9YWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbdGkoWyQ1LEtzLFZiLGlDZV0pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sicm9sZSIsInRhYmxpc3QiLCJj''@;'; put 'put ''bHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNscktleUZvY3VzIiwiY2xyRm9jdXNDaGFuZ2UiLCJmb2N1c291dCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsidGFiQ29udGVudFZpZXdDb250YWluZXIiLCIiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5h''@;'; put 'put ''di1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwibmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs''@;'; put 'put ''ImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIiwic3RhdHVzIiwidG9nZ2xlU2VydmljZS5vcGVuID8g''@;'; put 'put ''J2luZm8nIDogbnVsbCJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihtZSgwLCJ1bCIsMCkseHQoImNsckZvY3VzQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVPdmVyZmxvd09uUG9zaXRpb24oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUoZil9KSxRZSgxLGxiZSwyLDEs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMSksUWUoMixoYmUsNywxMCwibmctY29udGFpbmVyIiwyKSx5ZSgpLGphKDMsbnVsbCwzKSksMiZhJiYoUmUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksQ2UoMSksUmUoIm5nRm9yT2YiLGQudGFiTGlua0RpcmVjdGl2ZXMpLENlKDEpLFJlKCJuZ0lm''@;'; put 'put ''IixkLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0k4LFNILHhzLFppLHJkLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxzQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25zKERLKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNkLHNhLGVDZSxCRl0sc2RdfSksY30pKCksTUg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJl''@;'; put 'put ''Z2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCkseEg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEVIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IGJlLHRoaXMu''@;'; put 'put ''X2NvbGxhcHNlZENoYW5nZWQ9bmV3IGJlLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2''@;'; put 'put ''aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNp''@;'; put 'put ''YmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2Vydmlj''@;'; put 'put ''ZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IEVyKCEwKSx0aGlzLl9zdWI9dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWRDaGFuZ2VkLnN1YnNjcmliZShfPT57dGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5lbWl0KF8pfSl9Z2V0IGNvbGxhcHNpYmxl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGV9c2V0IGNvbGxhcHNpYmxlKGEpe3RoaXMuX25hdlNlcnZpY2UuY29sbGFwc2libGU9YX1nZXQgY29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7dGhpcy5fbmF2''@;'; put 'put ''U2VydmljZS5jb2xsYXBzZWQ9YX1nZXQgaGFzTmF2R3JvdXBzKCl7cmV0dXJuIHRoaXMuX25hdkdyb3VwUmVnaXN0cmF0aW9uU2VydmljZS5uYXZHcm91cENvdW50PjB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX25hdkljb25TZXJ2aWNlLmhhc0ljb25zfWdldCBhcmlhRXhwYW5kZWQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jb2xsYXBzaWJsZT90aGlzLmNvbGxhcHNlZD8iZmFsc2UiOiJ0cnVlIjpudWxsfW5nT25EZXN0cm95KCl7dGhpcy5fc3ViLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQnlCdXR0b24oKXt0aGlzLmNvbGxhcHNlZD0hdGhpcy5jb2xsYXBzZWR9fXJldHVybiBjLlx1MDI3NWZh''@;'; put 'put ''Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEVIKSx0dCh4SCksdHQoTUgpLHR0KEVzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci12ZXJ0aWNhbC1uYXYiXV0saG9zdEF0dHJzOlsxLCJjbHItdmVydGljYWwtbmF2Il0saG9zdFZhcnM6Nixob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJpcy1jb2xsYXBzZWQiLGQuY29sbGFwc2VkKSgiaGFzLW5hdi1ncm91cHMiLGQuaGFzTmF2R3JvdXBzKSgiaGFzLWljb25zIixkLmhhc0ljb25zKX0saW5wdXRzOntjb2xsYXBzaWJsZTpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi''@;'; put 'put ''LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRDaGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOlt0aShbRUgseEgsTUhdKV0sbmdDb250ZW50U2Vs''@;'; put 'put ''ZWN0b3JzOkVvLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2UiLCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCJdLFsiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwi''@;'; put 'put ''dGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEs''@;'; put 'put ''Im5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLGZiZSwyLDYsImJ1dHRvbiIsMCksbWUoMSwiZGl2IiwxKSxrcigyKSxRZSgzLHBiZSwxLDEsImJ1dHRvbiIsMikseWUoKSksMiZhJiYoUmUoIm5nSWYiLGQuY29sbGFwc2libGUpLENl''@;'; put 'put ''KDMpLFJlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLHFzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBiZX1nZXQgZXhwYW5kQ2hhbmdlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1''@;'; put 'put ''MDI3NWZhY30pLGN9KSgpLFlRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IGJlLGgmJm4yKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKGFoKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFya0ZvckNo''@;'; put 'put ''ZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChOaSksdHQoVWEpLHR0KGtILDgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmVydGlj''@;'; put 'put ''YWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczp2YmUsbmdDb250ZW50U2VsZWN0b3JzOmJiZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKF9iZSksa3IoMCksbWUoMSwic3Bh''@;'; put 'put ''biIsMCksa3IoMiwxKSx5ZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdUNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhoOCxMSyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlw''@;'; put 'put ''ZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSxzZCxxNV0sc2Qsc2EscTVdfSksY30pKCksZENlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVp''@;'; put 'put ''bmo9bWkoe2ltcG9ydHM6W1V3ZSxRd2Usc0NlLHVDZV19KSxjfSkoKSxXUT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Ny''@;'; put 'put ''b2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KShhcihMcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbElkPURjKCksdGhp''@;'; put 'put ''cy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlZD1uZXcgRXIoITEpLHRoaXMuY2xvc2FibGU9ITAsdGhpcy5jbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSx0aGlzLnN0YXRpY0JhY2tkcm9wPSEwLHRoaXMuc2tpcEFuaW1hdGlvbj0iZmFsc2UiLHRo''@;'; put 'put ''aXMuYnlwYXNzU2Nyb2xsU2VydmljZT0hMSx0aGlzLnN0b3BDbG9zZT0hMSx0aGlzLmFsdENsb3NlPW5ldyBFcighMSksdGhpcy5sYWJlbGxlZEJ5PXRoaXMubW9kYWxJZH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlP3RoaXMuX3Njcm9sbGluZ1NlcnZpY2Uuc3RvcFNjcm9sbGluZygpOnRoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCkpfW5nT25EZXN0cm95KCl7dGhpcy5fc2Nyb2xsaW5nU2Vydmlj''@;'; put 'put ''ZS5yZXN1bWVTY3JvbGxpbmcoKX1vcGVuKCl7dGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITAsdGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMCkpfWNsb3NlKCl7dGhpcy5zdG9wQ2xvc2U/dGhpcy5hbHRDbG9zZS5lbWl0KCExKTohdGhpcy5jbG9zYWJsZXx8IXRoaXMuX29wZW58fCh0aGlzLl9v''@;'; put 'put ''cGVuPSExLHRoaXMuZm9jdXNUcmFwLnNldFByZXZpb3VzRm9jdXMoKSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiZ0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoV1EpLHR0KEVzKSl9''@;'; put 'put ''LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb2RhbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKE1wLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZm9jdXNUcmFwPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJnh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0sMCxFdiksMiZhJiZkcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46WyJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxlOlsiY2xyTW9kYWxDbG9zYWJsZSIsImNs''@;'; put 'put ''b3NhYmxlIl0sY2xvc2VCdXR0b25BcmlhTGFiZWw6WyJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOlsiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0YXRpY0JhY2tkcm9wOlsiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsInN0YXRpY0Jh''@;'; put 'put ''Y2tkcm9wIl0sc2tpcEFuaW1hdGlvbjpbImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxieXBhc3NTY3JvbGxTZXJ2aWNlOlsiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl0sc3RvcENsb3NlOlsiY2xyTW9kYWxQcmV2''@;'; put 'put ''ZW50Q2xvc2UiLCJzdG9wQ2xvc2UiXSxsYWJlbGxlZEJ5OlsiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOlt0aShb''@;'; put 'put ''XSxbV1FdKSx2YV0sbmdDb250ZW50U2VsZWN0b3JzOlNiZSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xyRm9jdXNUcmFwIiwiIiwiY2xhc3MiLCJtb2RhbCIsNCwibmdJZiJdLFsiY2xyRm9jdXNUcmFwIiwiIiwxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtbW9kYWwiLCJ0''@;'; put 'put ''cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIl0sWyJjbHJGb2N1c09uVmlld0luaXQiLCIiLDEsIm1vZGFsLXRpdGxlLXdyYXBw''@;'; put 'put ''ZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xv''@;'; put 'put ''c2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKENiZSksUWUoMCx3YmUsMTcsMTQsImRpdiIsMCkpLDImYSYmUmUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W1ppLE1wLFBGLHFzXSxzdHlsZXM6WyJb''@;'; put 'put ''X25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOlthMSgiZmFkZURvd24iLFtoYygiKiA9PiBmYWxzZSIsW19zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSks''@;'; put 'put ''cnUoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLGhjKCJmYWxzZSA9PiAqIixbcnUoIjAuMnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxhMSgiZmFkZSIsW2hjKCJ2b2lkID0+ICoiLFtfcyh7b3BhY2l0eTowfSkscnUoIjAu''@;'; put 'put ''MnMgZWFzZS1pbi1vdXQiLF9zKHtvcGFjaXR5Oi44NX0pKV0pLGhjKCIqID0+IHZvaWQiLFtydSgiMC4ycyBlYXNlLWluLW91dCIsX3Moe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLHN1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhv''@;'; put 'put ''c3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3Qu''@;'; put 'put ''bmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9''@;'; put 'put ''YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRh''@;'; put 'put ''YmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChGbyksdHQoTmkpLHR0KE5vKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLEdRPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtWcy5hZGRJY29ucyhu''@;'; put 'put ''Yil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W1tvbyxzYSx5RSxxNV0sc2EscTVdfSksY30pKCk7Y29uc3QgaENlPXsidG9wLWxlZnQiOnthbmNob3JQb2lu''@;'; put 'put ''dDpHci5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5CT1RUT01fUklHSFQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9wLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkJPVFRPTV9DRU5URVIsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwidG9w''@;'; put 'put ''LXJpZ2h0Ijp7YW5jaG9yUG9pbnQ6R3IuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuQk9UVE9NX0xFRlQsb2Zmc2V0WTotMTAsb2Zmc2V0WDowfSwicmlnaHQtdG9wIjp7YW5jaG9yUG9pbnQ6R3IuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5MRUZUX0JPVFRPTSxvZmZzZXRZOjIs''@;'; put 'put ''b2Zmc2V0WDoxNH0sInJpZ2h0LW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuTEVGVF9DRU5URVIsb2Zmc2V0WTo2LG9mZnNldFg6MTR9LCJyaWdodC1ib3R0b20iOnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Okdy''@;'; put 'put ''LkxFRlRfVE9QLG9mZnNldFk6LTEsb2Zmc2V0WDoxNH0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9MRUZULG9mZnNldFk6OSxvZmZzZXRYOi0xfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9D''@;'; put 'put ''RU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9DRU5URVIsb2Zmc2V0WTo5LG9mZnNldFg6MTJ9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkdyLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkdyLlRPUF9SSUdIVCxvZmZzZXRZOjksb2Zmc2V0WDowfSwibGVmdC1ib3R0b20iOnthbmNo''@;'; put 'put ''b3JQb2ludDpHci5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6R3IuUklHSFRfVE9QLG9mZnNldFk6MCxvZmZzZXRYOi0xNH0sImxlZnQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6R3IuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLlJJR0hUX0NFTlRFUixvZmZzZXRZOjQsb2Zmc2V0WDotMTR9''@;'; put 'put ''LCJsZWZ0LXRvcCI6e2FuY2hvclBvaW50OkdyLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpHci5SSUdIVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNldFg6LTE0fSxkZWZhdWx0OnthbmNob3JQb2ludDpHci5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkdyLkxFRlRfQ0VOVEVSLG9mZnNldFk6''@;'; put 'put ''NixvZmZzZXRYOjE0fX0sZkNlPVsidG9wLWxlZnQiLCJ0b3AtbWlkZGxlIiwidG9wLXJpZ2h0IiwicmlnaHQtdG9wIiwicmlnaHQtbWlkZGxlIiwicmlnaHQtYm90dG9tIiwiYm90dG9tLXJpZ2h0IiwiYm90dG9tLW1pZGRsZSIsImJvdHRvbS1sZWZ0IiwibGVmdC1ib3R0b20iLCJsZWZ0LW1p''@;'; put 'put ''ZGRsZSIsImxlZnQtdG9wIl07bGV0ICRRPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiSHtjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPV8s''@;'; put 'put ''dGhpcy5wbGF0Zm9ybUlkPVQsdGhpcy5zaWducG9zdENvbnRlbnRJZD1EYygpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRo''@;'; put 'put ''aXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9V31nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVt''@;'; put 'put ''b3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJmZDZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3Qg''@;'; put 'put ''ZD1oQ2VbdGhpcy5wb3NpdGlvbl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9z''@;'; put 'put ''ZSgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxScyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3Vz''@;'; put 'put ''TWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRWEpLHR0KEw4LDgpLHR0KEVzKSx0dChvSCksdHQoaUgpLHR0KEdzKSx0dChMcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIt''@;'; put 'put ''c2lnbnBvc3QtY29udGVudCJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHQxKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksZHIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19''@;'; put 'put ''LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjcsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rp''@;'; put 'put ''b24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWzEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksbWUoMCwiZGl2IiwwKSxxdCgxLCJkaXYiLDEpLG1lKDIsImRpdiIsMikoMywiYnV0dG9uIiwz''@;'; put 'put ''KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLHF0KDQsImNkcy1pY29uIiw0KSx5ZSgpKCksbWUoNSwiZGl2Iiw1KSxrcig2KSx5ZSgpKCkpLDImYSYmKENlKDMpLFRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdENsb3NlKSgiYXJp''@;'; put 'put ''YS1jb250cm9scyIsZC5zaWducG9zdENvbnRlbnRJZCksQ2UoMSksVHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W3FzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwQ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe1ZzLmFkZEljb25z''@;'; put 'put ''KG5iLFJLKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbW29vLHNhLHE1XSxzZF19KSxjfSkoKSxBSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp''@;'; put 'put ''cy5faWQ9bmV3IGJlfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWN9KSxjfSkoKSxUSD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dl''@;'; put 'put ''cigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQo''@;'; put 'put ''KX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko''@;'; put 'put ''YXIoS3MpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqYj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOlt0aShbS3Mse3Byb3ZpZGU6TDgsdXNlRXhpc3Rpbmc6Tml9LEFILFRIXSldLG5nQ29udGVudFNlbGVjdG9yczpFbyxkZWNsczoxLHZhcnM6''@;'; put 'put ''MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKFRpKCksa3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBtQ2U9WyJib3R0b20tbGVmdCIsImJvdHRvbS1yaWdodCIsInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwicmlnaHQiLCJsZWZ0Il0sdkNlPVsieHMiLCJzbSIsIm1k''@;'; put 'put ''IiwibGciXTtsZXQgemI9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJIe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKHN1cGVyKGEsZCksdGhpcy50b29sdGlwSWRTZXJ2aWNlPWgsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWYsIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItdG9vbHRpcC1jb250ZW50''@;'; put 'put ''IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRvb2x0aXAiKTt0aGlzLmlkPURjKCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXtjb25zdCBkPWF8fCIiO3RoaXMuX2lkPWQsdGhpcy50b29sdGlwSWRTZXJ2aWNlLnVwZGF0ZUlkKGQpfWdldCBwb3NpdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7Y29uc3QgZD10aGlzLl9wb3NpdGlvbixoPW1DZS5pbmNsdWRlcyhhKT9hOiJyaWdodCI7c3dpdGNoKHRoaXMuX3Bvc2l0aW9uPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3''@;'; put 'put ''Q2xhc3M6YHRvb2x0aXAtJHtofWB9KSxoKXtjYXNlInRvcC1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1Hci5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UidG9wLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuVE9QX0NFTlRFUix0aGlzLnBv''@;'; put 'put ''cG92ZXJQb2ludD1Hci5SSUdIVF9CT1RUT007YnJlYWs7Y2FzZSJib3R0b20tcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5MRUZUX1RPUDticmVhaztjYXNlImJvdHRvbS1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUdyLkJPVFRP''@;'; put 'put ''TV9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9R3IuUklHSFRfVE9QO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9R3IuUklHSFRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUdyLkxFRlRfVE9QO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5hbmNob3JQb2ludD1Hci5MRUZUX0NF''@;'; put 'put ''TlRFUix0aGlzLnBvcG92ZXJQb2ludD1Hci5SSUdIVF9UT1A7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gZ0NlKGMpe3Rocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIHZhbHVlOiAke2N9YCl9KGgpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGEpe2NvbnN0IGQ9dGhp''@;'; put 'put ''cy5fc2l6ZSxoPXZDZS5pbmNsdWRlcyhhKT9hOiJzbSI7dGhpcy5fc2l6ZT1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSl9bmdPbkluaXQoKXt0aGlzLnNpemU9dGhpcy5zaXplfHwic20iLHRoaXMucG9zaXRp''@;'; put 'put ''b249dGhpcy5wb3NpdGlvbnx8InJpZ2h0In1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUVudGVyQ29udGVudCgpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVDb250ZW50KCl9dXBkYXRlQ3NzQ2xhc3Mo''@;'; put 'put ''e29sZENsYXNzOmEsbmV3Q2xhc3M6ZH0pe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKSh0dChFYSksdHQoTDgsOCksdHQoQUgpLHR0KFRIKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10b29sdGlwLWNvbnRlbnQiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZWVudGVyIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJih0MSgiaWQiLGQuaWQpLFRyKCJyb2xlIiwidG9vbHRpcCIpLEh1KCJvcGFjaXR5IiwxKSxkcigidG9vbHRpcC1jb250ZW50IiwhMCkpfSxp''@;'; put 'put ''bnB1dHM6e2lkOiJpZCIscG9zaXRpb246WyJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltlb10sbmdDb250ZW50U2VsZWN0b3JzOkVvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxrcigw''@;'; put 'put ''KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFViPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0''@;'; put 'put ''aGlzLnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRp''@;'; put 'put ''cCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoS3MpLHR0KEFIKSx0dChUSCkpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmeHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVy''@;'; put 'put ''KCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKFRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxkcigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLF9DZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dLHNkLHNhXX0pLGN9KSgpLGJDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOlt5SCxwQ2UsX0NlXX0pLGN9KSgpLHlDZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb29dXX0pLGN9KSgpLENDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoeW1lLHdtZSxPSyxDbWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu''@;'; put 'put ''IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sc2EsQWJdLHNhLEFiXX0pLGN9KSgpLGtDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7VnMuYWRkSWNvbnMoT0spfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltbb28sR1EsTlFdXX0pLGN9KSgpLF91PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3''@;'; put 'put ''NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W3p3ZSxSd2Usc2EsR1EsTEYsc2QseUUscTUscHllLGJ5ZSxkUSxkQ2UsYkNlLGtDZSwkSixueWUsQWIseUNlLHhiLENDZV19KSxjfSkoKTtmdW5jdGlvbiBBQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMCksTmUo''@;'; put 'put ''MSwibG9hZGluZyIpLHllKCkpfWZ1bmN0aW9uIFRDZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDExKSxOZSgxLCJsb2FkZWQiKSx5ZSgpKX1mdW5jdGlvbiBEQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiwxMiksTmUoMSwiZmFpbGVkIikseWUoKSl9ZnVuY3Rpb24gSUNlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYobWUoMCwicCIpKDEsImNvZGUiKSxOZSgyKSx5ZSgpLE5lKDMsIiBceGEwICIpLFFlKDQsQUNlLDIsMCwic3BhbiIsNyksUWUoNSxUQ2UsMiwwLCJzcGFuIiw4KSxRZSg2LERDZSwyLDAsInNwYW4iLDkpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLnByb2dy''@;'; put 'put ''YW0pLENlKDIpLFJlKCJuZ0lmIixhLnJ1bm5pbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLENlKDEpLFJlKCJuZ0lmIiwhYS5ydW5uaW5nJiYhYS5zdWNjZXNzZnVsKX19ZnVuY3Rpb24gTENlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXNpZ25wb3N0LWNv''@;'; put 'put ''bnRlbnQiLDUpLFFlKDEsSUNlLDcsNCwicCIsNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7UmUoImNsclBvc2l0aW9uIiwiYm90dG9tLW1pZGRsZSIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IFJDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2Fk''@;'; put 'put ''aW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJzcGlubmVyLWludmVyc2Ui''@;'; put 'put ''XSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNsclBvc2l0aW9uIiw0LCJjbHJJZk9wZW4i''@;'; put 'put ''XSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxbMSwic3VjY2VzcyJdLFsxLCJmYWlsIl1d''@;'; put 'put ''LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxxdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLFFlKDUsTENlLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRlbnQiLDQpLHllKCkoKSksMiZhJiYoQ2Uo''@;'; put 'put ''MiksSHUoImRpc3BsYXkiLGQubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLENlKDEpLEh1KCJkaXNwbGF5IiwhZC5sb2FkaW5nJiZkLnJlcXVlc3RzLmxlbmd0aD4wJiZkLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxDZSgxKSxIdSgiZGlzcGxh''@;'; put 'put ''eSIsIWQubG9hZGluZyYmZC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWQucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxjMixzSCwkUSxSRV0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2Fk''@;'; put 'put ''aW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2ln''@;'; put 'put ''bnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBv''@;'; put 'put ''c3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5uaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv''@;'; put 'put ''cjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9h''@;'; put 'put ''ZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjOTIxMDB9Il19KSxjfSkoKSxPQ2U9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuX3N1YnNjcmlwdGlvbj1uZXcgZWUsdGhpcy5sb2FkaW5nPSExLHRoaXMuYWxlcnRDbG9zZWQ9ITAsdGhpcy5kYXRhPXt1c2VyOm51bGwscGFzczpudWxsfX1uZ09uSW5p''@;'; put 'put ''dCgpeyJSZWRpcmVjdGVkIiE9PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiYodGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5zdWJzY3JpYmUoZD0+e3RoaXMuaXNBY3RpdmU9ZDtsZXQgaD1kb2N1bWVudC5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCJib2R5Iik7aCYmKGQ/aC5jbGFzc0xpc3QuYWRkKCJzaG91bGQtbG9naW4iKTpoLmNsYXNzTGlzdC5yZW1vdmUoInNob3VsZC1sb2dpbiIpKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXN1Ym1pdCgpe3RoaXMubG9hZGluZ3x8''@;'; put 'put ''KHRoaXMubG9hZGluZz0hMCx0aGlzLmRhdGEudXNlciYmdGhpcy5kYXRhLnBhc3MmJnRoaXMuc2FzU2VydmljZS5sb2dpbih0aGlzLmRhdGEudXNlcix0aGlzLmRhdGEucGFzcykudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLGF8fCh0aGlzLmVycm9yTXNnPSJVc2VybmFtZSBvciBwYXNzd29y''@;'; put 'put ''ZCBpbnZhbGlkIix0aGlzLmFsZXJ0Q2xvc2VkPSExKX0sYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYSksdGhpcy5sb2FkaW5nPSExLHRoaXMuZXJyb3JNc2c9YSx0aGlzLmFsZXJ0Q2xvc2VkPSExfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj''@;'; put 'put ''KSh0dChvYSksdHQodzApKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvZ2luIl1dLGRlY2xzOjIwLHZhcnM6OSxjb25zdHM6W1sxLCJsb2dpbi1zaWRlYmFyLXdyYXBwZXIiXSxbMSwibG9naW4tc2lkZWJhciIsInNpZGVCYXJQcm9wcyJdLFsic3JjIiwiL1NB''@;'; put 'put ''U1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9kYXRhY29udHJvbGxlci1zdmciLCJhbHQiLCIiLDEsImxvZ2luLWxvZ28iXSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGlu''@;'; put 'put ''dCJdLFsxLCJsb2dpbi1ncm91cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIsMSwidXNlcm5hbWUiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlw''@;'; put 'put ''ZSIsInBhc3N3b3JkIiwicGxhY2Vob2xkZXIiLCJQYXNzd29yZCIsMSwicGFzc3dvcmQiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0Q2xvc2VkIiwiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJh''@;'; put 'put ''bGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwi''@;'; put 'put ''ZGl2IiwxKSxxdCgyLCJpbWciLDIpLG1lKDMsImZvcm0iLDMpLHh0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXQoKX0pLG1lKDQsImxhYmVsIiw0KSg1LCJoMyIsNSksTmUoNiwiV2VsY29tZSB0byIpLHllKCksTmUoNywiIERhdGEgQ29udHJvbGxlciAiKSxtZSg4LCJo''@;'; put 'put ''NSIsNiksTmUoOSwiQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIpLHllKCkoKSxtZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kYXRhLnVzZXI9Zn0pLHllKCksbWUoMTIsImlucHV0Iiw5KSx4dCgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGF0YS5wYXNzPWZ9KSx5ZSgpLG1lKDEzLCJjbHItYWxlcnQiLDEwKSx4dCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFsZXJ0Q2xvc2VkPWZ9KSxtZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxO''@;'; put 'put ''ZSgxNikseWUoKSgpKCksbWUoMTcsImJ1dHRvbiIsMTMpLE5lKDE4LCIgTG9nIGluICIpLHllKCkoKSgpKCkscXQoMTksImRpdiIsMTQpLHllKCkpLDImYSYmKGRyKCJhY3RpdmUiLGQuaXNBY3RpdmUpLENlKDExKSxSZSgibmdNb2RlbCIsZC5kYXRhLnVzZXIpLENlKDEpLFJlKCJuZ01vZGVs''@;'; put 'put ''IixkLmRhdGEucGFzcyksQ2UoMSksUmUoImNsckFsZXJ0VHlwZSIsImFsZXJ0LWRhbmdlciIpKCJjbHJBbGVydENsb3NlZCIsZC5hbGVydENsb3NlZCksQ2UoMyksb3IoZC5lcnJvck1zZyksQ2UoMSksUmUoImNsckxvYWRpbmciLGQubG9hZGluZykoImRpc2FibGVkIixkLmxvYWRpbmcpKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltDcCxXYSxCcyx3cCxPcyxyMixIYixOYixadSxkaCxVcyxmMV0sc3R5bGVzOlsiLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtib3JkZXItY29sb3I6d2hlYXQhaW1wb3J0YW50fS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdo''@;'; put 'put ''dDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDB9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gPiAqW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphdXRvfS5sb2dpbi1zaWRl''@;'; put 'put ''YmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3Bh''@;'; put 'put ''ZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBm''@;'; put 'put ''b3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lk''@;'; put 'put ''ZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV0gICAud2VsY29tZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozNnB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH0ubG9n''@;'; put 'put ''aW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde21h''@;'; put 'put ''cmdpbjo2cHggMCAxOHB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAxfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZl''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0''@;'; put 'put ''b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOnJnYmEoMzMsMzMsMzMsLjUpO3otaW5kZXg6MTAwfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5s''@;'; put 'put ''b2dpbi1ncm91cCAudXNlcm5hbWUsICAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnBhc3N3b3Jke3dpZHRoOjEwMCV9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9ICAubG9naW4tc2lk''@;'; put 'put ''ZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCBidXR0b257bWF4LXdpZHRoOm5vbmV9LmxvZ2luLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoyMDBweH0iXX0pLGN9KSgpO2Z1bmN0aW9uIFBDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxxdCgxLCJpbWciLDE5KSx5ZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSx4Yygic3JjIixhLmdldFBpY3R1cmVVcmwoKSxydil9fWZ1bmN0aW9uIEZDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0''@;'; put 'put ''aCksQ2UoMSksb3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIEhDZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDIxKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtkcigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxDZSgxKSxvcihhLmRlYnVnTG9ncy5s''@;'; put 'put ''ZW5ndGgpfX1mdW5jdGlvbiBOQ2UoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyMil9ZnVuY3Rpb24gVkNlKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwiYSIsMzMpKDIsInNwYW4iLDM0KSxOZSgzLCJEb2N1bWVudGF0aW9uIikseWUoKSgpLFVyKCkpfWZ1bmN0aW9uIEJDZShjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51IiwyMykoMSwiZGl2IiwyNCwyNSkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDI2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9JGkoMik7cmV0dXJuIGp0KFZlKCkub25EZWJ1Z1Jvd0NsaWNrKGgs''@;'; put 'put ''ZikpfSksbWUoNCwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNSwiaW5wdXQiLDI3KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2FzanNDb25maWcuZGVidWc9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQo''@;'; put 'put ''VmUoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0pLHllKCksbWUoNiwibGFiZWwiKSxOZSg3LCJEZWJ1ZyBNb2RlIikseWUoKSgpKCkoKSxtZSg4LCJhIiwyOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksbWUoOSwic3Bh''@;'; put 'put ''biIpLE5lKDEwLCJTQVMgUmVxdWVzdHMiKSx5ZSgpKCksUWUoMTEsVkNlLDQsMCwibmctY29udGFpbmVyIiwyKSxxdCgxMiwiZGl2IiwxNSksbWUoMTMsImEiLDI5KSgxNCwic3BhbiIpLE5lKDE1LCJTeXN0ZW0iKSx5ZSgpKCksbWUoMTYsImEiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgp''@;'; put 'put ''e3JldHVybiBCdChhKSxqdChWZSgpLmxvZ291dChoKSl9KSxtZSgxNywic3BhbiIpLE5lKDE4LCJMb2cgT3V0IikseWUoKSxxdCgxOSwiY2xyLWljb24iLDMxKSx5ZSgpLG1lKDIwLCJkaXYiLDMyKSgyMSwic3BhbiIpLE5lKDIyKSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSg1''@;'; put 'put ''KSxSZSgibmdNb2RlbCIsYS5zYXNqc0NvbmZpZy5kZWJ1ZyksQ2UoNiksUmUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksQ2UoMTEpLGdyKCJ2IixhLmNvbW1pdFZlciwiIil9fWNvbnN0IGpDZT1mdW5jdGlvbigpe3JldHVybntzdGFuZGFsb25lOiEwfX07bGV0IHpDZT0oKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudXNlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5yZXFTdWI9bmV3IGVlLHRoaXMudXNlclN1Yj1uZXcgZWUsdGhp''@;'; put 'put ''cy5hcHBMb2dzPVtdLHRoaXMuZGVidWdMb2dzPVtdLHRoaXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnJlcXVlc3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIn1uZ09uSW5p''@;'; put 'put ''dCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2aWNlLnVzZXJDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJOYW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcu''@;'; put 'put ''c2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0aGlzLmNvbW1pdFZlcj0idjYuNS4yIi5yZXBsYWNlKCJ2IiwiIikrIi5nNjA1MTBhNCJ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlcVN1Yi51bnN1YnNjcmliZSgpLHRoaXMudXNlclN1Yi51bnN1YnNjcmliZSgpfW9wZW5SZXF1ZXN0c01vZGFs''@;'; put 'put ''KCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1vbkRlYnVnTW9kZUNoYW5nZShhKXt0aGlzLnNhc2pzQ29uZmlnJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0RGVidWdTdGF0ZSh0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKX1vbkRlYnVnUm93Q2xpY2soYSxkKXthLnN0b3BQcm9w''@;'; put 'put ''YWdhdGlvbigpLHNldFRpbWVvdXQoKCk9PntkLmNsaWNrKCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29u''@;'; put 'put ''ZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8ke3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHR0KGFQKSx0dChvYSksdHQodmwpLHR0KERzKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyLW5hdi1kcm9wZG93biJdXSxkZWNsczozMix2YXJzOjEwLGNvbnN0czpbWzEsImFwcC1uYXYtZHJvcGRvd24iLCJkLW1kLWJsb2NrIl0sWyJj''@;'; put 'put ''bHJEcm9wZG93blRvZ2dsZSIsIiIsMSwibmF2LXRleHQiLCJjb2xvci13aGl0ZSJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdlLWRhbmdlciIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImJhZGdlIGJhZGdlLWluZm8iLDMsImhpZGRlbiIsNCwibmdJZiJdLFsic2hh''@;'; put 'put ''cGUiLCJjYXJldCBkb3duIiw0LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWzEsImNvbnRlbnQtY29udGFpbmVyIiwiaC1hdXRvIl0sWzEsInNpZGVuYXYiLCJkLWJsb2NrIiwiZC1tZC1ub25lIiwzLCJjbHItbmF2LWxldmVsIl0sWzEsInNp''@;'; put 'put ''ZGVuYXYtY29udGVudCJdLFsiaHJlZiIsIi4uLiIsMSwibmF2LWxpbmsiLCJhY3RpdmUiXSxbMSwidG9nZ2xlLXN3aXRjaCJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUyIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJuZ01vZGVsQ2hhbmdlIl0sWyJmb3Ii''@;'; put 'put ''LCJkZWJ1Zy10b2dnbGUyIiwxLCJkZWJ1Zy10b2dnbGUtbGFiZWwiLCJjb2xvci1kYXJrLWdyYXkiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8iLDEsIm5hdi1saW5rIiwiZC1ibG9jayJdLFsxLCJzZXBhcmF0b3IiXSxbInJvdXRl''@;'; put 'put ''ckxpbmsiLCIvc3lzdGVtIiwxLCJuYXYtbGluayIsImQtYmxvY2siXSxbInNoYXBlIiwibG9nb3V0Il0sWyJocmVmIiwiLi4uIiwxLCJuYXYtbGluayIsImQtYmxvY2siLDMsImNsaWNrIl0sWyJhbHQiLCIiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdl''@;'; put 'put ''ciJdLFsxLCJiYWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsInRvZ2dsZS1z''@;'; put 'put ''d2l0Y2giLDMsImNsaWNrIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTEiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGluayIsIi9z''@;'; put 'put ''eXN0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3Mu''@;'; put 'put ''ZGF0YWNvbnRyb2xsZXIuaW8iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24tdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1kcm9wZG93biIsMCkoMSwiYnV0dG9uIiwxKSgyLCJzcGFuIiksTmUoMykseWUoKSxRZSg0LFBDZSwyLDEsInNw''@;'; put 'put ''YW4iLDIpLFFlKDUsRkNlLDIsMywic3BhbiIsMyksUWUoNixIQ2UsMiwzLCJzcGFuIiw0KSxRZSg3LE5DZSwxLDAsImNsci1pY29uIiw1KSx5ZSgpLFFlKDgsQkNlLDIzLDMsImNsci1kcm9wZG93bi1tZW51Iiw2KSx5ZSgpLG1lKDksImRpdiIsNykoMTAsIm5hdiIsOCkoMTEsInNlY3Rpb24i''@;'; put 'put ''LDkpKDEyLCJhIiwxMCksTmUoMTMpLHllKCksbWUoMTQsImRpdiIpKDE1LCJmb3JtIikoMTYsImRpdiIsMTEpKDE3LCJpbnB1dCIsMTIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zYXNqc0NvbmZpZy5kZWJ1Zz1mfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGQub25EZWJ1Z01vZGVDaGFuZ2UoKX0pLHllKCksbWUoMTgsImxhYmVsIiwxMyksTmUoMTksIkRlYnVnIE1vZGUiKSx5ZSgpKCkoKSgpLG1lKDIwLCJhIiwxNCkoMjEsInNwYW4iKSxOZSgyMiwiRG9jdW1lbnRhdGlvbiIpLHllKCkoKSxxdCgyMywiZGl2IiwxNSksbWUoMjQs''@;'; put 'put ''ImEiLDE2KSgyNSwic3BhbiIpLE5lKDI2LCJTeXN0ZW0iKSx5ZSgpLHF0KDI3LCJjbHItaWNvbiIsMTcpLHllKCksbWUoMjgsImEiLDE4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLmxvZ291dChmKX0pLG1lKDI5LCJzcGFuIiksTmUoMzAsIkxvZyBPdXQiKSx5ZSgpLHF0KDMx''@;'; put 'put ''LCJjbHItaWNvbiIsMTcpLHllKCkoKSgpKCkpLDImYSYmKENlKDMpLG9yKGQudXNlck5hbWUpLENlKDEpLFJlKCJuZ0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1kLnVzZXJOYW1lJiZkLmlzVml5YSksQ2UoMSksUmUoIm5nSWYiLCFkLnNhc2pzQ29uZmlnLmRlYnVnKSxDZSgxKSxSZSgibmdJZiIs''@;'; put 'put ''ZC5zYXNqc0NvbmZpZy5kZWJ1ZyksQ2UoMSksUmUoIm5nSWYiLCFkLmlzVml5YSksQ2UoMyksUmUoImNsci1uYXYtbGV2ZWwiLDIpLENlKDMpLGdyKCIgIixkLnVzZXJOYW1lLCIgIiksQ2UoNCksUmUoIm5nTW9kZWwiLGQuc2FzanNDb25maWcuZGVidWcpKCJuZ01vZGVsT3B0aW9ucyIsJHMo''@;'; put 'put ''OSxqQ2UpKSl9LGRlcGVuZGVuY2llczpbWmksQ3AsUzAsQnMsd3AsT3MscjIsQnUsa2EsYzIsVXMsRDAsRDgsVDAselEsTmYsYWcsbGcsSzhdLHN0eWxlczpbJy5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0uY29weVJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdo''@;'; put 'put ''dDoxNXB4O2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0OjNyZW19LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLW5hdi1kcm9wZG93''@;'; put 'put ''bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi4xNTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDo0MHB4''@;'; put 'put ''O3RvcDoxMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlLmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59LmFwcC1uYXYtZHJvcGRvd25bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTY7cGFkZGluZy1ib3R0b206MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''c2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXl9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0NXB4O2xpbmUtaGVpZ2h0OjQwcHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bk''@;'; put 'put ''b3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5kcm9wZG93bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNTY1NjU2fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9w''@;'; put 'put ''ZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5iYWRnZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MjZweDttYXJnaW4tcmlnaHQ6MH0uYXBwLW5hdi1kcm9wZG93bltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbS5kZWJ1Zy1zd2l0Y2gtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1k''@;'; put 'put ''cm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmFwcC1u''@;'; put 'put ''YXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1sb2dvdXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIw''@;'; put 'put ''cHg7dG9wOjE1cHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVp''@;'; put 'put ''Z2h0OjEwMCV9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItdG9nZ2xlLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXJnaW46MDto''@;'; put 'put ''ZWlnaHQ6MTAwJTtwYWRkaW5nOjEwcHggMjBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0e2luc2V0OjA7d2lkdGg6''@;'; put 'put ''MTAwJTtoZWlnaHQ6MTAwJTtjdXJzb3I6cG9pbnRlcn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdG9nZ2xlLXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH0uZGVidWctdG9nZ2xlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6NDJweH1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey5zaWRlbmF2LWNvbnRlbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgYS5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzU2NTY1Nn19Lm5hdi1saW5rLmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5iYWRnZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17cG9zaXRpb246YWJzb2x1dGV9LmF2YXRhci1pbWdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjUwcHh9J119KSxjfSkoKTtmdW5jdGlvbiBVQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtt''@;'; put 'put ''ZSgwLCJjbHItYWxlcnQiLDIpLHh0KCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5jbG9zZWQ9aCl9KSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uQWxlcnRDbG9zZSgp''@;'; put 'put ''KX0pLG1lKDEsImRpdiIsMykoMiwic3BhbiIsNCksTmUoMykseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xvc2VkKSxDZSgzKSxncigiICIsYS5t''@;'; put 'put ''ZXNzYWdlLCIgIil9fWZ1bmN0aW9uIFpDZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1hbGVydHMiKSxRZSgxLFVDZSw0LDQsImNsci1hbGVydCIsMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nRm9yT2YiLGEuYWxlcnRzKX19bGV0IFlDZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMuX2FsZXJ0c1NlcnZpY2U9YSx0aGlzLmFsZXJ0cz1bXSx0aGlzLmhhc09wZW5BbGVydD0hMSx0aGlzLmFsZXJ0c1N1Yj1uZXcgZWV9bmdPbkluaXQoKXt0aGlzLmFsZXJ0c1N1Yj10aGlzLl9hbGVydHNTZXJ2aWNlLmFsZXJ0cy5zdWJzY3JpYmUoYT0+e3RoaXMu''@;'; put 'put ''YWxlcnRzLnB1c2goYSksdGhpcy5oYXNPcGVuQWxlcnQ9ITAsYS5lcnImJmNvbnNvbGUuZXJyb3IoYS5lcnIpfSl9b25BbGVydENsb3NlKCl7dGhpcy5oYXNPcGVuQWxlcnQ9dGhpcy5hbGVydHMuc29tZShhPT4hYS5jbG9zZWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0''@;'; put 'put ''dXJuIG5ldyhhfHxjKSh0dChsUCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRBcHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIiwiY2xy''@;'; put 'put ''QWxlcnRDbG9zZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiLCJjbHJBbGVydENsb3NlZENoYW5nZSJdLFsxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oYSxkKXsxJmEmJlFlKDAsWkNlLDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZhJiZSZSgibmdJZiIsZC5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEhiLEhRLE5iXSxzdHlsZXM6WyJjbHItYWxlcnRzW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSks''@;'; put 'put ''Y30pKCksakU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNvbnRhY3QtbGluayJd''@;'; put 'put ''XSxpbnB1dHM6e2NsYXNzZXM6ImNsYXNzZXMifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaHJlZiIsIm1haWx0bzpzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvP3N1YmplY3Q9TGljZW5jZSIsMywibmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImEiLDAp''@;'; put 'put ''LE5lKDEsInN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx5ZSgpKSwyJmEmJihkcigidW5zZXQiLCIiIT09ZC5jbGFzc2VzKSxSZSgibmdDbGFzcyIsZC5jbGFzc2VzKSl9LGRlcGVuZGVuY2llczpbdWNdLHN0eWxlczpbIi51bnNldFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dW5zZXR9''@;'; put 'put ''Il19KSxjfSkoKSxZYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBFcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgRXJ9b25EcmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0''@;'; put 'put ''aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEp''@;'; put 'put ''e2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVkLmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5k''@;'; put 'put ''YXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZHJhZ292ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJhZ092ZXIoZil9KSgiZHJhZ2xlYXZlIixmdW5jdGlv''@;'; put 'put ''bihmKXtyZXR1cm4gZC5vbkRyYWdMZWF2ZShmKX0pKCJkcm9wIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbmRyb3AoZil9KSwyJmEmJmRyKCJmaWxlb3ZlciIsZC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dl''@;'; put 'put ''ZE92ZXIifX0pLGN9KSgpO2Z1bmN0aW9uIFdDZShjLGwpezEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSx5ZSgpKX1mdW5jdGlvbiBHQ2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIikscXQoMSwiY2xyLWljb24iLDEzKSx5ZSgpKX1mdW5jdGlvbiAkQ2UoYyxsKXsx''@;'; put 'put ''JmMmJihtZSgwLCJzcGFuIikscXQoMSwiY2xyLWljb24iLDE0KSx5ZSgpKX1mdW5jdGlvbiBxQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89VmUoMykuaW5k''@;'; put 'put ''ZXg7cmV0dXJuIGp0KFZlKDIpLmdvVG9Mb2dMaW5lKGYsInJlcXVlc3RfIitfLCJlcnJvciIpKX0pLG1lKDEsImJ1dHRvbiIsMjIpLE5lKDIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksZ3IoIiAiLGEsIiAiKX19Y29uc3QgdWVlPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''W119O2Z1bmN0aW9uIEtDZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlLW5vZGUiLDE4KSxxdCgxLCJjbHItaWNvbiIsMTkpLE5lKDIpLFFlKDMscUNlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjApLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksZ3IoIiBFcnJv''@;'; put 'put ''cnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ0Vycm9yc3x8JHMoMix1ZWUpKX19ZnVuY3Rpb24gWENlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBmPUJ0KGEpLiRpbXBsaWNpdCxfPVZlKDMpLmluZGV4O3JldHVybiBqdChWZSgyKS5nb1RvTG9nTGluZShmLCJyZXF1ZXN0XyIrXywid2FybmluZyIpKX0pLG1lKDEsImJ1dHRvbiIsMjIpLE5lKDIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksZ3IoIiAiLGEs''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24gSkNlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLHF0KDEsImNsci1pY29uIiwyMyksTmUoMiksUWUoMyxYQ2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdDtDZSgyKSxncigiIFdh''@;'; put 'put ''cm5pbmdzICgiLGEubG9nV2FybmluZ3MubGVuZ3RoLCIpICIpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHwkcygyLHVlZSkpfX1mdW5jdGlvbiBRQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQo''@;'; put 'put ''YSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLmRvd25sb2FkTG9nKGgubG9nRmlsZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIGVTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksUWUoMixL''@;'; put 'put ''Q2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksUWUoMyxKQ2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSkseWUoKSxxdCg0LCJkaXYiLDE2KSxRZSg1LFFDZSwyLDAsImJ1dHRvbiIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdJZiIsYS5sb2dFcnJv''@;'; put 'put ''cnMpLENlKDEpLFJlKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxDZSgxKSxSZSgiaW5uZXJIVE1MIixhLmxvZ0ZpbGUscTIpLENlKDEpLFJlKCJuZ0lmIiwobnVsbD09YS5sb2dGaWxlP251bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHRTZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1W''@;'; put 'put ''bigpO21lKDAsImJ1dHRvbiIsMjQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuZG93bmxvYWRTb3VyY2VDb2RlKGguc291cmNlQ29kZSkpfSksTmUoMSwiIERvd25sb2FkICIpLHllKCl9fWZ1bmN0aW9uIG5TZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKG1lKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLE5lKDIpLHllKCksUWUoMyx0U2UsMiwwLCJidXR0b24iLDE3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksb3IoYS5zb3VyY2VDb2RlKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9''@;'; put 'put ''PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiByU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDI0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZl''@;'; put 'put ''KDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLE5lKDEsIiBEb3dubG9hZCAiKSx5ZSgpfX1mdW5jdGlvbiBpU2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI1KSxOZSgyKSx5ZSgpLFFlKDMsclNlLDIsMCwiYnV0dG9u''@;'; put 'put ''IiwxNykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDIpLGdyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWEuZ2VuZXJhdGVkQ29kZT9udWxsOmEuZ2VuZXJhdGVkQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBvU2UoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPWYua2V5KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0O2RyKCJzZWxlY3RlZCIsVmUoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFibGU9PT1hLmtleSksQ2UoMSksZ3IoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIHNTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kcm9wZG93bi1tZW51IiksUWUoMSxvU2UsMiwzLCJkaXYiLDMwKSxiYSgyLCJr''@;'; put 'put ''ZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nRm9yT2YiLFVsKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gYVNlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMzUpKDEsInN0cm9uZyIpLE5lKDIpLHllKCkoKSksMiZjKXtjb25zdCBhPVZl''@;'; put 'put ''KDMpLiRpbXBsaWNpdDtDZSgyKSxncigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uIGxTZShjLGwpe2lmKDEmYyYmKG1lKDAsInRoIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLmtleSwiICIpfX1m''@;'; put 'put ''dW5jdGlvbiBjU2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCkuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixkW2Eua2V5XSwiICIpfX1mdW5jdGlvbiB1U2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpLFFlKDEsY1Nl''@;'; put 'put ''LDIsMSwidGQiLDM3KSxiYSgyLCJrZXl2YWx1ZSIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KS4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nRm9yT2YiLFVsKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpfX1mdW5jdGlvbiBkU2UoYyxsKXtpZigxJmMmJiht''@;'; put 'put ''ZSgwLCJ0YWJsZSIsMzYpKDEsInRoZWFkIikoMiwidHIiKSxRZSgzLGxTZSwyLDEsInRoIiwzNyksYmEoNCwia2V5dmFsdWUiKSx5ZSgpKCksbWUoNSwidGJvZHkiKSxRZSg2LHVTZSwzLDMsInRyIiwzNykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMykuJGltcGxpY2l0O0NlKDMpLFJlKCJu''@;'; put 'put ''Z0Zvck9mIixVbCg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxDZSgzKSxSZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5jdGlvbiBoU2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiLWNvbnRl''@;'; put 'put ''bnQiKSxRZSgxLGFTZSwzLDEsInAiLDMyKSxtZSgyLCJkaXYiLDMzKSxRZSgzLGRTZSw3LDQsInRhYmxlIiwzNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFibGUpLENlKDIpLFJlKCJuZ0lmIixhLnNlbGVjdGVkVGFi''@;'; put 'put ''bGUpfX1mdW5jdGlvbiBmU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdGFiIikoMSwiY2xyLWRyb3Bkb3duIiwyNikoMiwiYnV0dG9uIiwyNyksTmUoMywiIFNBUyBXb3JrIFRhYmxlcyAiKSxxdCg0LCJjbHItaWNvbiIsMjgpLHllKCksUWUoNSxzU2UsMywzLCJjbHIt''@;'; put 'put ''ZHJvcGRvd24tbWVudSIsMjkpLHllKCksUWUoNixoU2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHh0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLnRhYmxlc0FjdGl2ZT1oKX0pLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJl''@;'; put 'put ''KCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLENlKDUpLFJlKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNBY3RpdmUpfX1mdW5jdGlvbiBwU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLE5lKDIpLG1l''@;'; put 'put ''KDMsInNwYW4iLDkpLFFlKDQsR0NlLDIsMCwic3BhbiIsNSksUWUoNSwkQ2UsMiwwLCJzcGFuIiw1KSx5ZSgpKCksbWUoNiwiY2xyLXN0YWNrLWNvbnRlbnQiKSxOZSg3KSx5ZSgpLG1lKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJz''@;'; put 'put ''IikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiwxMSksTmUoMTMsIlNBUyBMb2ciKSx5ZSgpLFFlKDE0LGVTZSw2LDQsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc2FzTG9nQWN0aXZlPWgpfSkseWUo''@;'; put 'put ''KSxtZSgxNSwiY2xyLXRhYiIpKDE2LCJidXR0b24iLDExKSxOZSgxNywiU0FTIFNvdXJjZSBDb2RlIikseWUoKSxRZSgxOCxuU2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHh0KCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnNhc1NvdXJjZUNv''@;'; put 'put ''ZGVBY3RpdmU9aCl9KSx5ZSgpLG1lKDE5LCJjbHItdGFiIikoMjAsImJ1dHRvbiIsMTEpLE5lKDIxLCJTQVMgR2VuZXJhdGVkIENvZGUiKSx5ZSgpLFFlKDIyLGlTZSw0LDIsIm5nLXRlbXBsYXRlIiwxMikseHQoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoVmUoMikuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKX0pLHllKCksUWUoMjMsZlNlLDcsMiwiY2xyLXRhYiIsNSkseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9VmUoMik7UmUoImlkIiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZl''@;'; put 'put ''bCIsMSkoImNsclN0YWNrVmlld1NldHNpemUiLDMpKCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsMyksQ2UoMiksZ3IoIiAiLGEuc2VydmljZUxpbmssIiAiKSxDZSgyKSxSZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksQ2UoMSksUmUo''@;'; put 'put ''Im5nSWYiLChudWxsPT1hLmxvZ0Vycm9ycz9udWxsOmEubG9nRXJyb3JzLmxlbmd0aCk+MCksQ2UoMiksb3IoYS5wYXJzZWRUaW1lc3RhbXApLENlKDcpLFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNMb2dBY3RpdmUpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsaC5zYXNTb3VyY2VDb2RlQWN0aXZl''@;'; put 'put ''KSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGguc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSksQ2UoMSksUmUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIGdTZShjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1zdGFjay12aWV3IiksUWUoMSxwU2UsMjQsMTIsImNsci1zdGFjay1ibG9jayIsNyks''@;'; put 'put ''eWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBtU2U9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQo''@;'; put 'put ''KSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgRXIs''@;'; put 'put ''dGhpcy5zYXNMb2dBY3RpdmU9ITAsdGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1''@;'; put 'put ''ZXN0cz1bXX1uZ09uSW5pdCgpe31wYXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIp''@;'; put 'put ''fWZvcm1hdFRpbWVzdGFtcChhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/S28oYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gS28oYSkuZm9ybWF0KCk/YCAoJHtLbyhhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxP''@;'; put 'put ''cGVuQ2hhbmdlKGEpe3RoaXMub3BlbmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlz''@;'; put 'put ''LnBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7bGV0IGY9ZG9jdW1lbnQucXVlcnlT''@;'; put 'put ''ZWxlY3RvckFsbChgIyR7ZH0gLmxvZy13cmFwcGVyLnNhc2xvZyBmb250YCksXz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7Zm9yKGxldCBUIG9mIGYpVC50ZXh0Q29udGVudC5pbmNsdWRlcyhhKSYmKF8uc2Nyb2xsVG9wPVQub2Zmc2V0VG9w''@;'; put 'put ''LV8ub2Zmc2V0VG9wLFQuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjNjFhMjIwMmIiLHNldFRpbWVvdXQoKCk9PntULnN0eWxlPSIifSwzZTMpKX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGEubG9nRmlsZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sXz1hLmxvZ0ZpbGUuc3BsaXQoIlxuIik7Zm9yKGxldCBUPTA7VDxfLmxlbmd0aDtUKyspe2lmKC88Lio+RVJST1IvZ20udGVzdChf''@;'; put 'put ''W1RdKSl7bGV0IFc9X1tUXS5zdWJzdHJpbmcoX1tUXS5pbmRleE9mKCJFIiksX1tUXS5sZW5ndGgtMSk7aC5wdXNoKFcpfWVsc2UvXkVSUk9SL2dtLnRlc3QoX1tUXSkmJihoLnB1c2goX1tUXSksX1tUXT0iPGZvbnQ+IitfW1RdKyI8L2ZvbnQ+Iik7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3Qo''@;'; put 'put ''X1tUXSkpe2xldCBXPV9bVF0uc3Vic3RyaW5nKF9bVF0uaW5kZXhPZigiVyIpLF9bVF0ubGVuZ3RoLTEpO2YucHVzaChXKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QoX1tUXSkmJihmLnB1c2goX1tUXSksX1tUXT0iPGZvbnQ+IitfW1RdKyI8L2ZvbnQ+Iil9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhm''@;'; put 'put ''KSxhLmxvZ0ZpbGU9Xy5qb2luKCJcbiIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2Fk''@;'; put 'put ''U291cmNlQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQodzApLHR0KEFjKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1''@;'; put 'put ''ZXN0cy1tb2RhbCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2Rh''@;'; put 'put ''bE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZl''@;'; put 'put ''bCIsImNsclN0YWNrVmlld1NldHNpemUiLCJjbHJTdGFja1ZpZXdQb3NpbnNldCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiLCJjbHJTdGFja1ZpZXdTZXRzaXplIiwiY2xyU3RhY2tWaWV3UG9zaW5zZXQiXSxbMSwibWwtMTAiXSxbMSwiY29udGVu''@;'; put 'put ''dCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZSIsImNscklmQWN0aXZlQ2hhbmdlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIsImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVk''@;'; put 'put ''Il0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNs''@;'; put 'put ''YW1hdGlvbi10cmlhbmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3du''@;'; put 'put ''Il0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNz''@;'; put 'put ''IiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1t''@;'; put 'put ''b2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQubW9kYWxPcGVuQ2hhbmdlKGYpfSksbWUoMSwiaDMiLDEpLE5lKDIsIiBSZXF1ZXN0IEhpc3RvcnkgIiksbWUoMywicCIsMiksTmUoNCkseWUoKSgpLG1lKDUsImRpdiIsMyksUWUoNixXQ2UsMiww''@;'; put 'put ''LCJwIiw0KSxRZSg3LGdTZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSx5ZSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbmVkKSxDZSg0KSxncigiQXBwIExvY2F0aW9uOiAiLGQuc2FzanNDb25maWcuYXBwTG9jLCIiKSxDZSgyKSxSZSgibmdJZiIsKG51bGw9PWQuc2FzanNS''@;'; put 'put ''ZXF1ZXN0cz9udWxsOmQuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLENlKDEpLFJlKCJuZ0lmIixkLm9wZW5lZCYmKG51bGw9PWQuc2FzanNSZXF1ZXN0cz9udWxsOmQuc2FzanNSZXF1ZXN0cy5sZW5ndGgpPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxxOCx4USxtSCxNUSxkZCxnMSxEcCxr''@;'; put 'put ''YSxvdSxzdSxFOCxjMixMcCxPcCxkZyxScCxJcCxjZyxOZixhZyxsZyxLOCxkeF0sc3R5bGVzOlsiLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1oZWFkZXIgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fSAgLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRp''@;'; put 'put ''bmc6MjBweCAxMHB4IDVweH0gIC53b3JrLXRhYmxlcy1kcm9wZG93biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9ICAuc3RhY2stdmlld3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFzay1pbWFnZTpub25lIWltcG9ydGFudDstd2Vi''@;'; put 'put ''a2l0LW1hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnR9ICAuY29udGVudCBjbHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0gIC5jb250ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3Jk''@;'; put 'put ''ZXI6MH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbHt3aWR0aDoxMDAlO3BhZGRpbmctbGVmdDouNnJlbSFpbXBvcnRhbnR9ICAuY29udGVudCAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9ICAuZXJyLWxpbmtzIC5jbHItdHJl''@;'; put 'put ''ZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99LmRyb3Bkb3duLWl0ZW0uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOX0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjEw''@;'; put 'put ''cHg7bWFyZ2luLXRvcDoxMHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2UyZTJlMjtiYWNrZ3JvdW5kLWNvbG9yOiNmYmZiZmI7aGVpZ2h0OjQ4dmg7b3ZlcmZsb3c6YXV0b30ubm8tcmVxc1tfbmdjb250ZW50LSVDT01QJV17Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfSJdfSksY30pKCk7Y2xhc3MgdlNle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNTZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcg''@;'; put 'put ''ZGVlfX1jbGFzcyBkZWV7fWZ1bmN0aW9uIF9TZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDgpLE5lKDEsIiBTQVMgU2VydmljZTogIiksbWUoMiwic3Ryb25nIiksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIGJT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLE5lKDMsIlNZU1dBUk5JTkdURVhUOiIpLHllKCksTmUoNCkseWUoKSxtZSg1LCJwIikoNiwic3Ryb25nIiksTmUoNywiU1lTRVJST1JURVhUOiIpLHllKCksTmUoOCkseWUoKSxtZSg5LCJwIikoMTAsInN0''@;'; put 'put ''cm9uZyIpLE5lKDExLCJNQUM6IikseWUoKSxOZSgxMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxncigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLENlKDQpLGdyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLENlKDQpLGdyKCIgIixh''@;'; put 'put ''LmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiB5U2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLE5lKDEsIiBPcGVuIGNvbmZpZ3Vy''@;'; put 'put ''YXRvciAiKSx5ZSgpfX1mdW5jdGlvbiB3U2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxOZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAi''@;'; put 'put ''KSx5ZSgpfX1mdW5jdGlvbiBDU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZG93bmxvYWRMb2coKSl9KSxOZSgxLCIgRG93bmxvYWQgbG9nICIpLHllKCl9fWZ1bmN0aW9uIFNT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxOZSgxLCIgQ2xvc2UgIikseWUoKX19ZnVuY3Rpb24gTVNlKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVZuKCk7bWUoMCwiYnV0dG9uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJlbG9hZCgpKX0pLE5lKDEsIiBSZWxvYWQgIikseWUoKX19bGV0IHhTZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1h''@;'; put 'put ''LHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IEVyLHRoaXMuZGF0YT1uZXcgdlNlLHRoaXMuZm9yY2VSZWxvYWQ9ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9k''@;'; put 'put ''YWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgZGVlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBk''@;'; put 'put ''PXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09VWMuRC5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMub25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigp''@;'; put 'put ''e3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2Fz''@;'; put 'put ''U2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgpfXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChBYyksdHQodmwpLHR0KG9hKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1tb2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91''@;'; put 'put ''dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIs''@;'; put 'put ''ImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlubmVySFRNTCJdLFsiY2xhc3MiLCJzeXN0ZXh0Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJd''@;'; put 'put ''LFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJzYXNTZXJ2aWNlIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihh''@;'; put 'put ''LGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQubW9kYWxFbmFibGVkPWZ9KSxtZSgxLCJoMyIsMSksTmUoMiksUWUoMyxfU2UsNCwxLCJwIiwyKSx5ZSgpLG1lKDQsImRpdiIsMykscXQoNSwiZGl2Iiw0KSxR''@;'; put 'put ''ZSg2LGJTZSwxMywzLCJkaXYiLDUpLHllKCksbWUoNywiZGl2Iiw2KSxRZSg4LHlTZSwyLDAsImJ1dHRvbiIsNyksUWUoOSx3U2UsMiwwLCJidXR0b24iLDcpLFFlKDEwLENTZSwyLDAsImJ1dHRvbiIsNyksUWUoMTEsU1NlLDIsMCwiYnV0dG9uIiw3KSxRZSgxMixNU2UsMiwwLCJidXR0b24i''@;'; put 'put ''LDcpLHllKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC5tb2RhbEVuYWJsZWQpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhZC5mb3JjZVJlbG9hZCksQ2UoMiksZ3IoIiAiLGQuZGF0YS5tb2RhbFRpdGxlLCIgIiksQ2UoMSksUmUoIm5nSWYiLGQuZGF0''@;'; put 'put ''YS5zYXNTZXJ2aWNlJiZkLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCksQ2UoMiksUmUoImlubmVySFRNTCIsZC5kYXRhLm1lc3NhZ2UscTIpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09ZC5kYXRhLmRldGFpbHMpLENlKDIpLFJlKCJuZ0lmIixkLnNob3dDb25maWd1cmF0b3JCdXR0b24oZC5k''@;'; put 'put ''YXRhLnNhc1NlcnZpY2UpKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWQuZGF0YS5kZXRhaWxzKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWQuZGF0YS5kZXRhaWxzP251bGw6ZC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWQuZGF0YS5kZXRhaWxzfHxudWxsPT1kLmRhdGEuZGV0YWlscy5M''@;'; put 'put ''T0c/bnVsbDpkLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCksQ2UoMSksUmUoIm5nSWYiLCFkLmZvcmNlUmVsb2FkKSxDZSgxKSxSZSgibmdJZiIsZC5mb3JjZVJlbG9hZCkpfSxkZXBlbmRlbmNpZXM6W1ppLG91LHN1LFliXSxzdHlsZXM6WyIuY2xyLWFib3J0LW1vZGFsW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lkdGg6MTAwJX0uY2xyLWFib3J0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFse3otaW5kZXg6MjA1MH0ubW9kYWwtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5z''@;'; put 'put ''YXNTZXJ2aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4O21hcmdpbjowfS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci10b3A6MXB4IHNvbGlkICNkY2RjZGN9LnN5c3RleHRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87bWFyZ2luLXRvcDoyMHB4O3BhZGRpbmc6MTBweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkICNkY2RjZGN9LnN5c3RleHRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO3dvcmQtd3JhcDpi''@;'; put 'put ''cmVhay13b3JkfSJdfSksY30pKCk7ZnVuY3Rpb24gRVNlKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikg''@;'; put 'put ''LSB0byB1cGdyYWRlIGNvbnRhY3QgIikscXQoNywiY29udGFjdC1saW5rIiwyNSkseWUoKSgpKCksbWUoOCwiYSIsMjYpLE5lKDksIlVwZGF0ZSBMaWNlbmNlIEtleSIpLHllKCksVXIoKSl9ZnVuY3Rpb24ga1NlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2Iiwy''@;'; put 'put ''MCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSx5ZSgpKCkoKSxtZSg3LCJhIiwyNykseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMyk7cmV0dXJuIGp0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0pLE5lKDgsIk1vcmUgZGV0YWlscyIpLHllKCksVXIoKX19ZnVuY3Rpb24gQVNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxOSksUWUo''@;'; put 'put ''MSxFU2UsMTAsMCwibmctY29udGFpbmVyIiwxKSxRZSgyLGtTZSw5LDAsIm5nLWNvbnRhaW5lciIsMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixudWxsPT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpY2VuY2VQ''@;'; put 'put ''cm9ibGVtLnZhbHVlKX19ZnVuY3Rpb24gVFNlKGMsbCl7MSZjJiYobWUoMCwiYSIsMjYpLE5lKDEsIlVwZGF0ZSBMaWNlbmNlIEtleSIpLHllKCkpfWZ1bmN0aW9uIERTZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjgpKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpLHF0''@;'; put 'put ''KDQsImNsci1pY29uIiwyMykseWUoKSxtZSg1LCJkaXYiLDI0KSxOZSg2KSxxdCg3LCJjb250YWN0LWxpbmsiLDI1KSxOZSg4KSx5ZSgpKCkoKSxRZSg5LFRTZSwyLDAsImEiLDI5KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNiksamMoIiBUaGlzIGxpY2Vuc2Uga2V5IHdpbGwgZXhw''@;'; put 'put ''aXJlIGluICIsYS5saWNlbnNlRXhwaXJpbmdEYXlzLCIgIiwxPT09YS5saWNlbnNlRXhwaXJpbmdEYXlzPyJkYXkiOiJkYXlzIiwiLiBQbGVhc2UgY29udGFjdCAiKSxDZSgyKSxncigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQg''@;'; put 'put ''IixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxDZSgxKSxSZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBJU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwyNiksTmUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IikseWUoKSl9ZnVuY3Rpb24gTFNlKGMsbCl7aWYoMSZjJiYobWUo''@;'; put 'put ''MCwiZGl2IiwyOCkoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikscXQoNCwiY2xyLWljb24iLDIzKSx5ZSgpLG1lKDUsImRpdiIsMjQpLE5lKDYsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxp''@;'; put 'put ''Y2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLHF0KDcsImNvbnRhY3QtbGluayIsMjUpLE5lKDgpLHllKCkoKSgpLFFlKDksSVNlLDIsMCwiYSIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSg4KSxncigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2Vu''@;'; put 'put ''Y2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxDZSgxKSxSZSgibmdJZiIsIWEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBSU2UoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLEFTZSwzLDIsImRpdiIsMTcpLFFlKDIs''@;'; put 'put ''RFNlLDEwLDQsImRpdiIsMTgpLFFlKDMsTFNlLDEwLDIsImRpdiIsMTgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmZyZWVUaWVyQmFubmVyJiYoIWEubGljZW5zZUV4cGlyaW5nRGF5c3x8YS5saWNlbnNlRXhwaXJpbmdEYXlzPDApKSxDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksQ2UoMSksUmUoIm5nSWYiLGEuYXBwT3ZlckNhcGFjaXR5KX19ZnVuY3Rpb24gT1NlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBC''@;'; put 'put ''dChhKSxqdChWZSgpLnRvZ2dsZVNpZGViYXIoKSl9KSxxdCgxLCJjbHItaWNvbiIsMzEpLHllKCl9fWNvbnN0IFBTZT1mdW5jdGlvbigpe3JldHVyblsiLyJdfTtmdW5jdGlvbiBGU2UoYyxsKXsxJmMmJihtZSgwLCJhIiwzMikscXQoMSwiaW1nIiwzMykoMiwiaW1nIiwzNCkseWUoKSksMiZj''@;'; put 'put ''JiZSZSgicm91dGVyTGluayIsJHMoMSxQU2UpKX1mdW5jdGlvbiBIU2UoYyxsKXsxJmMmJihtZSgwLCJhIikscXQoMSwic3BhbiIsMzUpLHllKCkpfWNvbnN0IGhlZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXciXX0sZmVlPWZ1bmN0aW9uKCl7cmV0dXJuWyIvaG9tZSJdfSxJSD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVyblsiL3Jldmlldy9zdWJtaXR0ZWQiXX07ZnVuY3Rpb24gTlNlKGMsbCl7MSZjJiYobWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDQzKSgxLCJhIiw0NCksTmUoMiwiVklFVyIpLHllKCksbWUoMywiYSIsNDQpLE5lKDQsIkxPQUQiKSx5ZSgpLG1lKDUsImEiLDQ0KSxOZSg2LCJS''@;'; put 'put ''RVZJRVciKSx5ZSgpKCkpLDImYyYmKENlKDEpLFJlKCJyb3V0ZXJMaW5rIiwkcygzLGhlZSkpLENlKDIpLFJlKCJyb3V0ZXJMaW5rIiwkcyg0LGZlZSkpLENlKDIpLFJlKCJyb3V0ZXJMaW5rIiwkcyg1LElIKSkpfWZ1bmN0aW9uIFZTZShjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsImRpdiIs''@;'; put 'put ''MzYpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRvbiIsMzcpLE5lKDQsIiBNZW51ICIpLHllKCksUWUoNSxOU2UsNyw2LCJjbHItZHJvcGRvd24tbWVudSIsMzgpLHllKCkoKSxtZSg2LCJkaXYiLDM5KSg3LCJhIiw0MCksTmUoOCwiVklFVyIpLHllKCksbWUoOSwiYSIsNDEpLE5lKDEwLCJM''@;'; put 'put ''T0FEIikseWUoKSxtZSgxMSwiYSIsNDIpLE5lKDEyLCJSRVZJRVciKSx5ZSgpKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoNyksUmUoInJvdXRlckxpbmsiLCRzKDcsaGVlKSksQ2UoMiksZHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0b3IiKXx8YS5yb3V0ZXIu''@;'; put 'put ''dXJsLmluY2x1ZGVzKCJlZGl0LXJlY29yZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhvbWUiKSksUmUoInJvdXRlckxpbmsiLCRzKDgsZmVlKSksQ2UoMiksZHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJh''@;'; put 'put ''cHByb3ZlIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxSZSgicm91dGVyTGluayIsJHMoOSxJSCkpfX1jb25zdCBCU2U9ZnVuY3Rpb24oKXtyZXR1cm5bIi9yZXZpZXcvYXBwcm92ZSJdfSxqU2U9ZnVuY3Rpb24oKXtyZXR1cm5bIi9yZXZpZXcvaGlzdG9yeSJdfTtmdW5j''@;'; put 'put ''dGlvbiB6U2UoYyxsKXtpZigxJmMmJihtZSgwLCJuYXYiLDQ1KSgxLCJ1bCIsNDYpKDIsImxpIiw0NykoMywiYSIsNDApLE5lKDQsIlNVQk1JVCIpLHllKCkoKSxtZSg1LCJsaSIsNDcpKDYsImEiLDQwKSxOZSg3LCJBUFBST1ZFIikseWUoKSgpLG1lKDgsImxpIiw0NykoOSwiYSIsNDApLE5l''@;'; put 'put ''KDEwLCJISVNUT1JZIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoInJvdXRlckxpbmsiLCRzKDUsSUgpKSxDZSgzKSxkcigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKSksUmUoInJvdXRlckxpbmsiLCRzKDYsQlNlKSksQ2UoMyksUmUo''@;'; put 'put ''InJvdXRlckxpbmsiLCRzKDcsalNlKSl9fWZ1bmN0aW9uIFVTZShjLGwpezEmYyYmcXQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIFpTZShjLGwpezEmYyYmcXQoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIFlTZShjLGwpezEmYyYmcXQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIFdT''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1pbmZvLW1vZGFsIiw0OCkseHQoIm9uQ29uZmlybU1vZGFsQ2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuY2xvc2VBYm9ydE1vZGFsKGYuaWQpKX0pLHllKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtSZSgiZGF0YSIsYSkoImZvcmNlUmVsb2FkIiwhZC5zdGFydHVwRGF0YUxvYWRlZCYmMT09PWQuc2FzanNBYm9ydHMubGVuZ3RoKX19ZnVuY3Rpb24gR1NlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw1MikscXQoMSwiZGl2Iiw1MykoMiwiZGl2''@;'; put 'put ''Iiw1NCkoMywiZGl2Iiw1NSkseWUoKSl9ZnVuY3Rpb24gJFNlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0OSkscXQoMSwiaW1nIiw1MCksUWUoMixHU2UsNCwwLCJkaXYiLDUxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsbnVsbD09PWEuYXBwQWN0aXZlKX19''@;'; put 'put ''bGV0IHFTZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Upe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLmxvY2F0aW9uPV8sdGhpcy5ldmVudFNlcnZpY2U9VCx0aGlzLmFw''@;'; put 'put ''cFN0b3JlU2VydmljZT1XLHRoaXMuY2RyPWllLHRoaXMuZWxlbWVudFJlZj1nZSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRzPVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZyZWVUaWVyQmFubmVyPXRoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhpcy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3RzTW9kYWw9ITEsdGhpcy5zaG93''@;'; put 'put ''UmVnaXN0cmF0aW9uPSEwLHRoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZSx0aGlzLnBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKSx3aW5kb3cuYXBwaW5mbz0oKT0+e2NvbnNvbGUudGFibGUoeyJBZGFwdGVyIHZlcnNpb24iOiI0LjEwLjEiLCJBcHAgdmVyc2lvbiI6InY2LjUuMiIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOktvKHBh''@;'; put 'put ''cnNlSW50KCIxNzA3MjQ1NzIzNTE4IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ni41LjIiLnJlcGxhY2UoInYiLCIiKSsiLmc2MDUxMGE0IixoLmV2ZW50cy5zdWJz''@;'; put 'put ''Y3JpYmUod2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBFZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1FZT8odGhpcy5lcnJUb3A9ITAsdGhpcy5l''@;'; put 'put ''ZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1FZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEduLnJvb3RQYXJhbT1FZX10''@;'; put 'put ''eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJzY3JpYmVU''@;'; put 'put ''b1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVudCYmKHdp''@;'; put 'put ''bmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRy''@;'; put 'put ''aWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJz''@;'; put 'put ''Y3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGltZW91dCgo''@;'; put 'put ''KT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBkPWY9PmEu''@;'; put 'put ''Z2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgiYWRtaW5H''@;'; put 'put ''cm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNlbmNlS2V5''@;'; put 'put ''OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5yb3V0ZXIu''@;'; put 'put ''bmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1pdE1vZGFs''@;'; put 'put ''U2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5lcj1hfSks''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3ZlckNhcGFj''@;'; put 'put ''aXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9kYWwuc3Vi''@;'; put 'put ''c2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xldCBkPXRo''@;'; put 'put ''aXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhh''@;'; put 'put ''KX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KFV4KSx0dChDMCksdHQoRHMpLHR0KFdsKSx0dChKZCksdHQodmwpLHR0KGU4''@;'; put 'put ''KSx0dChVYSksdHQoTmkpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI5LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJj''@;'; put 'put ''dXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIj''@;'; put 'put ''IiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJuYXYtdGV4dCJdLFsxLCJkcm9wZG93biJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkIiwib3BlbmVkQ2hhbmdlIl0sWzMsImRhdGEiLCJm''@;'; put 'put ''b3JjZVJlbG9hZCIsIm9uQ29uZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsT3BlbkNoYW5n''@;'; put 'put ''ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVy''@;'; put 'put ''Iiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCIsImFsZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwibXQtMiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2Vz''@;'; put 'put ''IiwiY29sb3Itd2hpdGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCIsImFsZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dS''@;'; put 'put ''QU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RjLWxvZ28tc3ZnIiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2Vz''@;'; put 'put ''L2RhdGFjb250cm9sbGVyLXN2ZyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5hdiIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1s''@;'; put 'put ''YWJlbCIsInRvZ2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJoZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0''@;'; put 'put ''aXZlIiwxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRv''@;'; put 'put ''bS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTU3Rv''@;'; put 'put ''cmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsMSwibG9hZGluZy1sb2dvIl0sWyJjbGFzcyIsInNsaWRlciIsNCwibmdJZiJdLFsxLCJzbGlkZXIiXSxbMSwibGluZSJdLFsxLCJzdWJsaW5lIiwiaW5j''@;'; put 'put ''Il0sWzEsInN1YmxpbmUiLCJkZWMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLFFlKDEsUlNlLDQsMywibmctY29udGFpbmVyIiwxKSxtZSgyLCJoZWFkZXIiLDIpLFFlKDMsT1NlLDIsMCwiZGl2IiwzKSxtZSg0LCJkaXYiLDQpLFFlKDUsRlNlLDMsMiwi''@;'; put 'put ''YSIsNSksUWUoNixIU2UsMiwwLCJhIiwxKSx5ZSgpLFFlKDcsVlNlLDEzLDEwLCJuZy1jb250YWluZXIiLDEpLG1lKDgsImRpdiIsNikoOSwiZGl2Iiw3KSxxdCgxMCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIikseWUoKSxtZSgxMSwiZGl2Iiw4KSxxdCgxMiwiYXBwLXVzZXItbmF2LWRyb3Bk''@;'; put 'put ''b3duIikseWUoKSgpKCksUWUoMTMselNlLDExLDgsIm5hdiIsOSksUWUoMTQsVVNlLDEsMCwiYXBwLWFsZXJ0cyIsMSksbWUoMTUsImFwcC1yZXF1ZXN0cy1tb2RhbCIsMTApLHh0KCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnJlcXVlc3RzTW9kYWw9Zn0pLHllKCksUWUo''@;'; put 'put ''MTYsWlNlLDEsMCwicm91dGVyLW91dGxldCIsMSkscXQoMTcsImFwcC1sb2dpbiIpLFFlKDE4LFlTZSwxLDAsImFwcC1hbGVydHMiLDEpLFFlKDE5LFdTZSwxLDIsImFwcC1pbmZvLW1vZGFsIiwxMSksbWUoMjAsImNsci1tb2RhbCIsMTIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGYpe3JldHVybiBkLmRlbW9MaW1pdE5vdGljZS5vcGVuPWZ9KSxtZSgyMSwiaDMiLDEzKSxOZSgyMikscXQoMjMsImNsci1pY29uIiwxNCkseWUoKSxtZSgyNCwiZGl2IiwxNSksTmUoMjUsIiBDb250YWN0ICIpLHF0KDI2LCJjb250YWN0LWxpbmsiKSxOZSgyNykseWUoKSgpKCksUWUo''@;'; put 'put ''MjgsJFNlLDMsMSwiZGl2IiwxNikpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksQ2UoMiksUmUoIm5nSWYiLGQuaXNNYWluUm91dGUoInZpZXciKXx8ZC5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhZC5yb3V0ZXIudXJsLmluY2x1ZGVz''@;'; put 'put ''KCJsaWNlbnNpbmciKSksQ2UoMiksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSxDZSgxKSxSZSgibmdJZiIsZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksQ2UoMSksUmUoIm5nSWYiLCFkLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYh''@;'; put 'put ''ZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksQ2UoNiksUmUoIm5nSWYiLGQucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGQucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxkLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksQ2UoMSksUmUo''@;'; put 'put ''Im5nSWYiLCFkLmVyclRvcCksQ2UoMSksUmUoIm9wZW5lZCIsZC5yZXF1ZXN0c01vZGFsKSxDZSgxKSxSZSgibmdJZiIsZC5zdGFydHVwRGF0YUxvYWRlZCksQ2UoMiksUmUoIm5nSWYiLGQuZXJyVG9wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC5zYXNqc0Fib3J0cyksQ2UoMSksUmUoImNsck1v''@;'; put 'put ''ZGFsT3BlbiIsZC5kZW1vTGltaXROb3RpY2Uub3BlbikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxDZSgyKSxncigiIExvY2tlZCBGZWF0dXJlICgiLGQuZGVtb0xpbWl0Tm90aWNlLmZlYXR1cmVOYW1lLCIpICIpLENlKDUpLGdyKCIgd2l0aCB5b3VyIHNp''@;'; put 'put ''dGUgaWQgKCIsZC5zeXNzaXRlLnZhbHVlLCIpIHRvIGFjdGl2YXRlISAiKSxDZSgxKSxSZSgibmdJZiIsIWQuc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxmcCxCdSxHXyxSQ2UsT0NlLHpDZSxZQ2UsakUsTmIsa2Esb3Usc3UsYzIsTmYsYWcsbGcsSzgsWWIsbVNl''@;'; put 'put ''LHhTZV0sc3R5bGVzOlsiYXBwLXJlcXVlc3RzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMDAwfWhlYWRlci5hcHAtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmxvZ29bX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgaW1nLndpdGhvdXQtdGV4dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweH0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0aC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMTBweH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bv''@;'; put 'put ''c2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTtiYWNrZ3JvdW5kOnJnYmEoMzMsMzMsMzMsLjUpfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLWRl''@;'; put 'put ''dGFpbHNbX25nY29udGVudC0lQ09NUCVde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzozMHB4O3otaW5kZXg6MTEwO2JhY2tncm91bmQ6IzMxNDM1MX0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRh''@;'; put 'put ''aWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMDtmb250LXNpemU6MTZweH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAubWFpbHRvW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojOGRjNTNlfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAudXBkYXRlLWtleVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojZmZmO3BhZGRpbmc6MCAxMHB4O2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMTQ5MDE5NjA3OCl9LmFsZXJ0LWljb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubmF2LXRleHRbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde21hcmdpbi1yaWdodDoyMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH0uc2lkZWJhci10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXItYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnVuc2V0''@;'; put 'put ''fWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi45O2xpbmUtaGVpZ2h0OjEuNDVyZW19aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3gtc2hhZG93Omluc2V0IDAgLTNweCAwIHRyYW5zcGFyZW50O3RyYW5zaXRpb246Ym94LXNoYWRvdyAuMnMgZWFzZS1pbn1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2NvbG9yOiNmYWZhZmE7b3BhY2l0eToxfWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2Jh''@;'; put 'put ''Y2tncm91bmQ6IzYxNzE3RDtvcGFjaXR5OjE7Ym94LXNoYWRvdzppbnNldCAwIC0zcHggdHJhbnNwYXJlbnR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MXJlbX0u''@;'; put 'put ''bm90Zltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9LmJ0bi5idG4tc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWNvbG9yOiM2MmE0MjA7YmFja2dyb3VuZC1jb2xvcjojMTZhNTdhIWltcG9ydGFudDtj''@;'; put 'put ''b2xvcjojZmZmfS5idG4uYnRuLXN1Y2Nlc3NbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzJhZGQzOTtjb2xvcjojZmZmfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpj''@;'; put 'put ''aGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzYxNzE3ZDtiYWNrZ3JvdW5kLWNvbG9yOiM2MTcxN2Q7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0ubWFp''@;'; put 'put ''bi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwdmghaW1wb3J0YW50fS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17cGFkZGluZzowcmVtIDFyZW0gMXJlbX0uY29udGVudC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MCFpbXBvcnRhbnR9Lm5hdkJhclJlc3BbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6IzQ5''@;'; put 'put ''NUE2Nztjb2xvcjojZmZmfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6IzQ5NUE2Nztjb2xvcjojZmZmfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjVyZW0gMCAxcmVtO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czouMTI1cmVtIDAgMCAuMTI1''@;'; put 'put ''cmVtO2NvbG9yOiM5NWM4NGJ9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRh''@;'; put 'put ''aW5lcltfbmdjb250ZW50LWMwXVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW19fSAgLmh0SW52YWxpZHtiYWNrZ3JvdW5kOmJsYWNrIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4''@;'; put 'put ''LXdpZHRoOiA0ODBweCl7ICBoMntmb250LXNpemU6LjdyZW0haW1wb3J0YW50fSAgaDN7Zm9udC1zaXplOi43cmVtfX0gIC5uYXYtbGlua3twYWRkaW5nOjByZW0gMXJlbX0gIC5idG4tcHJpbWFyeSAuYnRuLCAgIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojMzE0MzUxO2NvbG9yOiNmZmZ9ICAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgt''@;'; put 'put ''d2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFj''@;'; put 'put ''aW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW07Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfSAgLmJ0bi5idG4tb3V0bGluZXtib3JkZXItY29s''@;'; put 'put ''b3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuYnRuLmJ0bi1vdXRsaW5lOmhvdmVye2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzQ5NWE2Nztjb2xvcjojZmZmfSAgLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhv''@;'; put 'put ''dmVye2JhY2tncm91bmQtY29sb3I6IzVlYTcxZjtjb2xvcjojZmZmN2Y3O2JvcmRlci1jb2xvcjojOWE5Njk2fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5pbnB1dHMgdGV4dGFyZWF7Zm9udC1zaXplOjEzcHQ7Ym9yZGVyOjJweCBzb2xpZCAjNDg1OTY3O2JvcmRlci1yYWRpdXM6NHB4''@;'; put 'put ''Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JveC1zaGFkb3c6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIDAgMCAxNHB4O3BhZGRpbmc6N3B0O3dpZHRoOjI5MHB4fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5wb3NpdGlvbkNvbnRyb2xze3dpZHRoOjMzM3B4O3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3JpZ2h0OjVwdDt0b3A6NTBweDtib3R0b206MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0gIC5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7d2lkdGg6MzUwcHh9ICAuaGFuZHNvbnRhYmxle2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjNweH0gIC5oYW5kc29udGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhfSAgLmh0X2Nsb25lX2xlZnQgdGh7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfSAgLmh0X2Ns''@;'; put 'put ''b25lX3RvcCB0aHtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciB0aHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9ICAuaHRfbWFzdGVy''@;'; put 'put ''IHRyOm50aC1vZi10eXBlKG9kZCk+dGR7YmFja2dyb3VuZC1jb2xvcjojZjNmM2YzO2JvcmRlcjoxcHggc29saWQgcmdiKDE5NywxOTcsMTk3KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2IoMjM2LDIzNSwyMzUpfSAgLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZSgybik+dGR7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgcmdiKDE5NywxOTcsMTk3KTtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2IoMjM2LDIzNSwyMzUpfSAgLnd0Qm9yZGVye2JhY2tncm91bmQtY29sb3I6IzQ5NWE2NyFpbXBvcnRhbnR9ICAuaGFuZHNvbnRhYmxlIC5oYW5kc29udGFi''@;'; put 'put ''bGUuaHRfY2xvbmVfdG9wIC53dEhpZGVye3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjA7Ym9yZGVyLWJvdHRvbTozcHggc29saWQgI2Q2ZDNkM30gIC5jb250ZW50LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNGNUY2RkZ9ICAuY2FyZHtib3gtc2hhZG93OjAgLjEyNXJlbSAjZDdkN2Q3O2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6MHJlbTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZHtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOi4xMjVyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM1NjU2NTY7bWFyZ2luOjA7bWFyZ2luLXRvcDoxcmVtO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCU7cGFkZGluZzoxNXB4IDE1cHggNTBweH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290LCAg''@;'; put 'put ''IC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290e2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6MS41cmVtO3BhZGRpbmc6MCAuNXJlbTtsaW5lLWhlaWdodDpjYWxjKDEuNXJlbSAtIDNweCk7Zm9udC1zaXplOi40NTgzM3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjB9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZC1mb290ZXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTVweDt0b3A6MnB4fSAgLmRhdGFncmlkLWNv''@;'; put 'put ''bXBhY3QgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkLCAgIC5kYXRhZ3JpZC1oaXN0b3J5IC5kYXRhZ3JpZCAuZGF0YWdyaWQtaGVhZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30gIC5kcm9wZG93bi1tZW51e3Bvc2l0aW9uOmFic29sdXRlO3Rv''@;'; put 'put ''cDoxMDAlO2xlZnQ6MDttYXJnaW4tdG9wOi4wODMzMzNyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtiYWNrZ3JvdW5kOiNmNWY2ZmY7cGFkZGluZzouNXJlbSAwO2JvcmRlcjoxcHggc29saWQgI2NjYztib3gtc2hhZG93OjAgMXB4IC4xMjVyZW0gIzczNzM3MzQwO21p''@;'; put 'put ''bi13aWR0aDo1cmVtO21heC13aWR0aDoxNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDAwfSAgLnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiNmZmY7Y29sb3I6IzU2NTY1NjttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0gIC50YWJsZSB0aHtmb250LXNpemU6LjQ1ODMzcmVtO2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiNmZmY7dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSAgLm1vZGFsLWhlYWRlcntib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6MCAwIC41cmVtO21hcmdpbi1ib3R0b206''@;'; put 'put ''MXJlbX0gIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9LmFwcC1sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkaW5nLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo0MDBweDt3aWR0aDox''@;'; put 'put ''MDAlfSJdfSksY30pKCk7ZnVuY3Rpb24gcGVlKGMpe3JldHVybiBuZXcgQXIoM2UzLCExKX1mdW5jdGlvbiBGcChjKXtzd2l0Y2goYy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IG9iO2Nhc2UgMTpyZXR1cm4gY1swXTtkZWZhdWx0OnJldHVybiBuZXcgVksoYyl9fWZ1bmN0aW9uIGdlZShj''@;'; put 'put ''LGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCBfPS0xLFQ9bnVsbDtpZihsLmZvckVhY2goVz0+e2NvbnN0IGllPVcuZ2V0KCJvZmZzZXQiKSxnZT1pZT09Xyx3ZT1nZSYmVHx8bmV3IE1hcDtXLmZvckVhY2goKEVlLFplKT0+e2xldCBvdD1aZSxldD1FZTtpZigi''@;'; put 'put ''b2Zmc2V0IiE9PVplKXN3aXRjaChvdD1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShvdCxoKSxldCl7Y2FzZSIhIjpldD1hLmdldChaZSk7YnJlYWs7Y2FzZSBBZjpldD1kLmdldChaZSk7YnJlYWs7ZGVmYXVsdDpldD1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUoWmUsb3QsZXQsaCl9d2Uuc2V0KG90''@;'; put 'put ''LGV0KX0pLGdlfHxmLnB1c2god2UpLFQ9d2UsXz1pZX0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIF9NZShjKXtyZXR1cm4gbmV3IEFyKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0aW9uIExIKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmUkgo''@;'; put 'put ''YSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZSSChhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQoYSYmUkgoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gUkgoYyxsLGEpe2NvbnN0IGY9T0goYy5lbGVt''@;'; put 'put ''ZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLF89Yy5fZGF0YTtyZXR1cm4gbnVsbCE9XyYmKGYuX2RhdGE9XyksZn1mdW5jdGlvbiBPSChjLGwsYSxkLGg9IiIsZj0wLF8p''@;'; put 'put ''e3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISFffX1mdW5jdGlvbiBtMShjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIG1lZShj''@;'; put 'put ''KXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgRE1lPSgoKT0+dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkoKTtmdW5jdGlvbiBQSChjKXtjb25zdCBsPWMucGFyZW50Tm9k''@;'; put 'put ''ZXx8Yy5ob3N0fHxudWxsO3JldHVybiBsPT09RE1lP251bGw6bH1sZXQgaGc9bnVsbCx2ZWU9ITE7ZnVuY3Rpb24gX2VlKGMsbCl7Zm9yKDtsOyl7aWYobD09PWMpcmV0dXJuITA7bD1QSChsKX1yZXR1cm4hMX1mdW5jdGlvbiBiZWUoYyxsLGEpe2lmKGEpcmV0dXJuIEFycmF5LmZyb20oYy5x''@;'; put 'put ''dWVyeVNlbGVjdG9yQWxsKGwpKTtjb25zdCBkPWMucXVlcnlTZWxlY3RvcihsKTtyZXR1cm4gZD9bZF06W119bGV0IHllZT0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gTE1lKGMpe2hnfHwoaGc9ZnVuY3Rpb24gUk1lKCl7cmV0dXJuIHR5''@;'; put 'put ''cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSx2ZWU9ISFoZy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gaGcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBoZy5zdHlsZSYmIWZ1bmN0aW9uIElNZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYp''@;'; put 'put ''fShjKSYmKGw9YyBpbiBoZy5zdHlsZSwhbCYmdmVlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBoZy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIF9lZShhLGQp''@;'; put 'put ''fWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIFBIKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gYmVlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsXyxUPVtdLFcpe3JldHVybiBuZXcgb2IoaCxmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRkg9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuTk9PUD1uZXcgeWVlLGN9KSgpO2NvbnN0IE9NZT0xZTMsSEg9Im5nLWVudGVyIix6RT0ibmctbGVh''@;'; put 'put ''dmUiLFVFPSJuZy10cmlnZ2VyIixaRT0iLm5nLXRyaWdnZXIiLENlZT0ibmctYW5pbWF0aW5nIixOSD0iLm5nLWFuaW1hdGluZyI7ZnVuY3Rpb24gQmYoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4h''@;'; put 'put ''bHx8bC5sZW5ndGg8Mj8wOlZIKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24gVkgoYyxsKXtyZXR1cm4icyI9PT1sP2MqT01lOmN9ZnVuY3Rpb24gWUUoYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gRk1lKGMsbCxhKXtsZXQgaCxm''@;'; put 'put ''PTAsXz0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IFQ9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PVQpcmV0dXJuIGwucHVzaChwZWUoKSkse2R1cmF0aW9u''@;'; put 'put ''OjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9VkgocGFyc2VGbG9hdChUWzFdKSxUWzJdKTtjb25zdCBXPVRbM107bnVsbCE9VyYmKGY9VkgocGFyc2VGbG9hdChXKSxUWzRdKSk7Y29uc3QgaWU9VFs1XTtpZSYmKF89aWUpfWVsc2UgaD1jO2lmKCFhKXtsZXQgVD0hMSxXPWwubGVuZ3RoO2g8MCYm''@;'; put 'put ''KGwucHVzaChmdW5jdGlvbiBLU2UoKXtyZXR1cm4gbmV3IEFyKDMxMDAsITEpfSgpKSxUPSEwKSxmPDAmJihsLnB1c2goZnVuY3Rpb24gWFNlKCl7cmV0dXJuIG5ldyBBcigzMTAxLCExKX0oKSksVD0hMCksVCYmbC5zcGxpY2UoVywwLHBlZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpm''@;'; put 'put ''LGVhc2luZzpffX0oYyxsLGEpfWZ1bmN0aW9uIFdiKGMsbD17fSl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLmZvckVhY2goYT0+e2xbYV09Y1thXX0pLGx9ZnVuY3Rpb24gU2VlKGMpe2NvbnN0IGw9bmV3IE1hcDtyZXR1cm4gT2JqZWN0LmtleXMoYykuZm9yRWFjaChhPT57bC5zZXQoYSxjW2Fd''@;'; put 'put ''KX0pLGx9ZnVuY3Rpb24gSHAoYyxsPW5ldyBNYXAsYSl7aWYoYSlmb3IobGV0W2QsaF1vZiBhKWwuc2V0KGQsaCk7Zm9yKGxldFtkLGhdb2YgYylsLnNldChkLGgpO3JldHVybiBsfWZ1bmN0aW9uIGhoKGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPWpIKGgpO2EmJiFhLmhhcyho''@;'; put 'put ''KSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiBmZyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9akgoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIEdiKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVuZ3RoP2NbMF06TksoYyk6''@;'; put 'put ''Y31jb25zdCBCSD1uZXcgUmVnRXhwKCJ7e1xccyooLis/KVxccyp9fSIsImciKTtmdW5jdGlvbiB4ZWUoYyl7bGV0IGw9W107aWYoInN0cmluZyI9PXR5cGVvZiBjKXtsZXQgYTtmb3IoO2E9QkguZXhlYyhjKTspbC5wdXNoKGFbMV0pO0JILmxhc3RJbmRleD0wfXJldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''ICRiKGMsbCxhKXtjb25zdCBkPWMudG9TdHJpbmcoKSxoPWQucmVwbGFjZShCSCwoZixfKT0+e2xldCBUPWxbX107cmV0dXJuIG51bGw9PVQmJihhLnB1c2goZnVuY3Rpb24gUVNlKGMpe3JldHVybiBuZXcgQXIoMzAwMywhMSl9KCkpLFQ9IiIpLFQudG9TdHJpbmcoKX0pO3JldHVybiBoPT1k''@;'; put 'put ''P2M6aH1mdW5jdGlvbiBXRShjKXtjb25zdCBsPVtdO2xldCBhPWMubmV4dCgpO2Zvcig7IWEuZG9uZTspbC5wdXNoKGEudmFsdWUpLGE9Yy5uZXh0KCk7cmV0dXJuIGx9Y29uc3QgVk1lPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBqSChjKXtyZXR1cm4gYy5yZXBsYWNlKFZNZSwoLi4ubCk9''@;'; put 'put ''PmxbMV0udG9VcHBlckNhc2UoKSl9ZnVuY3Rpb24gdjEoYyxsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgNzpyZXR1cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIDA6cmV0dXJuIGMudmlzaXRTdGF0ZShsLGEpO2Nhc2UgMTpyZXR1cm4gYy52aXNpdFRyYW5zaXRpb24obCxhKTtjYXNlIDI6''@;'; put 'put ''cmV0dXJuIGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgMzpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSA0OnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2UgNTpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgNjpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2Fz''@;'; put 'put ''ZSA4OnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSA5OnJldHVybiBjLnZpc2l0QW5pbWF0ZUNoaWxkKGwsYSk7Y2FzZSAxMDpyZXR1cm4gYy52aXNpdEFuaW1hdGVSZWYobCxhKTtjYXNlIDExOnJldHVybiBjLnZpc2l0UXVlcnkobCxhKTtjYXNlIDEyOnJldHVybiBjLnZpc2l0''@;'; put 'put ''U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhyb3cgZnVuY3Rpb24gZU1lKGMpe3JldHVybiBuZXcgQXIoMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIEVlZShjLGwpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKVtsXX1jb25zdCBHRT0iKiI7ZnVuY3Rpb24gek1lKGMsbCl7Y29uc3QgYT1b''@;'; put 'put ''XTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gVU1lKGMsbCxhKXtpZigiOiI9PWNbMF0pe2NvbnN0IFc9ZnVuY3Rpb24gWk1lKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjps''@;'; put 'put ''ZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5wYXJzZUZsb2F0KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVu''@;'; put 'put ''Y3Rpb24gcE1lKGMpe3JldHVybiBuZXcgQXIoMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVylyZXR1cm4gdm9pZCBsLnB1c2goVyk7Yz1XfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7''@;'; put 'put ''aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIGZNZShjKXtyZXR1cm4gbmV3IEFyKDMwMTUsITEpfSgpKSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sXz1kWzNdO2wucHVzaChrZWUoaCxfKSk7IjwiPT1mWzBdJiYhKGg9PUdFJiZfPT1HRSkmJmwucHVzaChrZWUo''@;'; put 'put ''XyxoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9Y29uc3QgJEU9bmV3IFNldChbInRydWUiLCIxIl0pLHFFPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24ga2VlKGMsbCl7Y29uc3QgYT0kRS5oYXMoYyl8fHFFLmhhcyhjKSxkPSRFLmhhcyhsKXx8cUUuaGFzKGwpO3JldHVybihoLGYp''@;'; put 'put ''PT57bGV0IF89Yz09R0V8fGM9PWgsVD1sPT1HRXx8bD09ZjtyZXR1cm4hXyYmYSYmImJvb2xlYW4iPT10eXBlb2YgaCYmKF89aD8kRS5oYXMoYyk6cUUuaGFzKGMpKSwhVCYmZCYmImJvb2xlYW4iPT10eXBlb2YgZiYmKFQ9Zj8kRS5oYXMobCk6cUUuaGFzKGwpKSxfJiZUfX1jb25zdCBZTWU9''@;'; put 'put ''bmV3IFJlZ0V4cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gekgoYyxsLGEsZCl7cmV0dXJuIG5ldyBXTWUoYykuYnVpbGQobCxhLGQpfWNsYXNzIFdNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kcml2ZXI9bH1idWlsZChsLGEsZCl7Y29uc3QgaD1uZXcgcU1lKGEpO3JldHVybiB0aGlz''@;'; put 'put ''Ll9yZXNldENvbnRleHRTdHlsZVRpbWluZ1N0YXRlKGgpLHYxKHRoaXMsR2IobCksaCl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobCl7bC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIixsLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLGwuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcg''@;'; put 'put ''TWFwKSxsLmN1cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKGwsYSl7bGV0IGQ9YS5xdWVyeUNvdW50PTAsaD1hLmRlcENvdW50PTA7Y29uc3QgZj1bXSxfPVtdO3JldHVybiJAIj09bC5uYW1lLmNoYXJBdCgwKSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBuTWUoKXtyZXR1cm4gbmV3IEFyKDMw''@;'; put 'put ''MDYsITEpfSgpKSxsLmRlZmluaXRpb25zLmZvckVhY2goVD0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoYSksMD09VC50eXBlKXtjb25zdCBXPVQsaWU9Vy5uYW1lO2llLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGdlPT57Vy5uYW1lPWdlLGYu''@;'; put 'put ''cHVzaCh0aGlzLnZpc2l0U3RhdGUoVyxhKSl9KSxXLm5hbWU9aWV9ZWxzZSBpZigxPT1ULnR5cGUpe2NvbnN0IFc9dGhpcy52aXNpdFRyYW5zaXRpb24oVCxhKTtkKz1XLnF1ZXJ5Q291bnQsaCs9Vy5kZXBDb3VudCxfLnB1c2goVyl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIHJNZSgp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzAwNywhMSl9KCkpfSkse3R5cGU6NyxuYW1lOmwubmFtZSxzdGF0ZXM6Zix0cmFuc2l0aW9uczpfLHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9''@;'; put 'put ''bC5vcHRpb25zJiZsLm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVzKXtjb25zdCBmPW5ldyBTZXQsXz1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKFQ9PntUIGluc3RhbmNlb2YgTWFwJiZULmZvckVhY2goVz0+e3hlZShXKS5mb3JFYWNoKGllPT57Xy5oYXNP''@;'; put 'put ''d25Qcm9wZXJ0eShpZSl8fGYuYWRkKGllKX0pfSl9KSxmLnNpemUmJihXRShmLnZhbHVlcygpKSxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGlNZShjLGwpe3JldHVybiBuZXcgQXIoMzAwOCwhMSl9KCkpKX1yZXR1cm57dHlwZTowLG5hbWU6bC5uYW1lLHN0eWxlOmQsb3B0aW9uczpoP3twYXJh''@;'; put 'put ''bXM6aH06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGwsYSl7YS5xdWVyeUNvdW50PTAsYS5kZXBDb3VudD0wO2NvbnN0IGQ9djEodGhpcyxHYihsLmFuaW1hdGlvbiksYSk7cmV0dXJue3R5cGU6MSxtYXRjaGVyczp6TWUobC5leHByLGEuZXJyb3JzKSxhbmltYXRpb246ZCxxdWVyeUNvdW50OmEu''@;'; put 'put ''cXVlcnlDb3VudCxkZXBDb3VudDphLmRlcENvdW50LG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShsLGEpe3JldHVybnt0eXBlOjIsc3RlcHM6bC5zdGVwcy5tYXAoZD0+djEodGhpcyxkLGEpKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9fXZpc2l0R3JvdXAobCxhKXtjb25z''@;'; put 'put ''dCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKF89PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgVD12MSh0aGlzLF8sYSk7cmV0dXJuIGg9TWF0aC5tYXgoaCxhLmN1cnJlbnRUaW1lKSxUfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9aCx7dHlwZTozLHN0ZXBzOmYs''@;'; put 'put ''b3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIFhNZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBVSChZRShjLGwpLmR1cmF0aW9uLDAsIiIpO2Nv''@;'; put 'put ''bnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPVVIKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxmLnN0clZhbHVlPWEsZn1jb25zdCBoPVlFKGEsbCk7cmV0dXJuIFVIKGguZHVyYXRpb24saC5k''@;'; put 'put ''ZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOl9zKHt9KTtpZig1PT1mLnR5cGUpaD10aGlzLnZpc2l0S2V5ZnJhbWVzKGYsYSk7ZWxzZXtsZXQgXz1sLnN0eWxlcyxUPSExO2lmKCFf''@;'; put 'put ''KXtUPSEwO2NvbnN0IGllPXt9O2QuZWFzaW5nJiYoaWUuZWFzaW5nPWQuZWFzaW5nKSxfPV9zKGllKX1hLmN1cnJlbnRUaW1lKz1kLmR1cmF0aW9uK2QuZGVsYXk7Y29uc3QgVz10aGlzLnZpc2l0U3R5bGUoXyxhKTtXLmlzRW1wdHlTdGVwPVQsaD1XfXJldHVybiBhLmN1cnJlbnRBbmltYXRl''@;'; put 'put ''VGltaW5ncz1udWxsLHt0eXBlOjQsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD10aGlzLl9tYWtlU3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9''@;'; put 'put ''W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgVCBvZiBoKSJzdHJpbmciPT10eXBlb2YgVD9UPT09QWY/ZC5wdXNoKFQpOmEuZXJyb3JzLnB1c2gobmV3IEFyKDMwMDIsITEpKTpkLnB1c2goU2VlKFQpKTtsZXQgZj0hMSxfPW51bGw7cmV0''@;'; put 'put ''dXJuIGQuZm9yRWFjaChUPT57aWYoVCBpbnN0YW5jZW9mIE1hcCYmKFQuaGFzKCJlYXNpbmciKSYmKF89VC5nZXQoImVhc2luZyIpLFQuZGVsZXRlKCJlYXNpbmciKSksIWYpKWZvcihsZXQgVyBvZiBULnZhbHVlcygpKWlmKFcudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtmPSEwO2Jy''@;'; put 'put ''ZWFrfX0pLHt0eXBlOjYsc3R5bGVzOmQsZWFzaW5nOl8sb2Zmc2V0Omwub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlkYXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1h''@;'; put 'put ''LmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5kZWxheSksbC5zdHlsZXMuZm9yRWFjaChfPT57InN0cmluZyIhPXR5cGVvZiBfJiZfLmZvckVhY2goKFQsVyk9Pntjb25zdCBpZT1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksZ2U9aWUu''@;'; put 'put ''Z2V0KFcpO2xldCB3ZT0hMDtnZSYmKGYhPWgmJmY+PWdlLnN0YXJ0VGltZSYmaDw9Z2UuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gc01lKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBBcigzMDEwLCExKX0oKSksd2U9ITEpLGY9Z2Uuc3RhcnRUaW1lKSx3ZSYmaWUuc2V0KFcse3N0''@;'; put 'put ''YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24gTk1lKGMsbCxhKXtjb25zdCBkPWwucGFyYW1zfHx7fSxoPXhlZShjKTtoLmxlbmd0aCYmaC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gSlNlKGMpe3JldHVybiBuZXcgQXIo''@;'; put 'put ''MzAwMSwhMSl9KCkpfSl9KFQsYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOjUsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWEuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGFNZSgp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzAxMSwhMSl9KCkpLGQ7bGV0IGY9MDtjb25zdCBfPVtdO2xldCBUPSExLFc9ITEsaWU9MDtjb25zdCBnZT1sLnN0ZXBzLm1hcChrdD0+e2NvbnN0IFN0PXRoaXMuX21ha2VTdHlsZUFzdChrdCxhKTtsZXQgUXQ9bnVsbCE9U3Qub2Zmc2V0P1N0Lm9mZnNldDpmdW5j''@;'; put 'put ''dGlvbiBLTWUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBsPW51bGw7aWYoQXJyYXkuaXNBcnJheShjKSljLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0''@;'; put 'put ''IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAmJmMuaGFzKCJvZmZzZXQiKSl7Y29uc3QgYT1jO2w9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gbH0oU3Quc3R5bGVzKSxybj0wO3JldHVybiBudWxs''@;'; put 'put ''IT1RdCYmKGYrKyxybj1TdC5vZmZzZXQ9UXQpLFc9V3x8cm48MHx8cm4+MSxUPVR8fHJuPGllLGllPXJuLF8ucHVzaChybiksU3R9KTtXJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGxNZSgpe3JldHVybiBuZXcgQXIoMzAxMiwhMSl9KCkpLFQmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gY01l''@;'; put 'put ''KCl7cmV0dXJuIG5ldyBBcigzMjAwLCExKX0oKSk7Y29uc3Qgd2U9bC5zdGVwcy5sZW5ndGg7bGV0IEVlPTA7Zj4wJiZmPHdlP2EuZXJyb3JzLnB1c2goZnVuY3Rpb24gdU1lKCl7cmV0dXJuIG5ldyBBcigzMjAyLCExKX0oKSk6MD09ZiYmKEVlPTEvKHdlLTEpKTtjb25zdCBaZT13ZS0xLG90''@;'; put 'put ''PWEuY3VycmVudFRpbWUsZXQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MseXQ9ZXQuZHVyYXRpb247cmV0dXJuIGdlLmZvckVhY2goKGt0LFN0KT0+e2NvbnN0IFF0PUVlPjA/U3Q9PVplPzE6RWUqU3Q6X1tTdF0scm49UXQqeXQ7YS5jdXJyZW50VGltZT1vdCtldC5kZWxheStybixldC5kdXJh''@;'; put 'put ''dGlvbj1ybix0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGt0LGEpLGt0Lm9mZnNldD1RdCxkLnN0eWxlcy5wdXNoKGt0KX0pLGR9dmlzaXRSZWZlcmVuY2UobCxhKXtyZXR1cm57dHlwZTo4LGFuaW1hdGlvbjp2MSh0aGlzLEdiKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOnBnKGwub3B0aW9ucyl9''@;'; put 'put ''fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQrKyx7dHlwZTo5LG9wdGlvbnM6cGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6MTAsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sYSksb3B0aW9uczpw''@;'; put 'put ''ZyhsLm9wdGlvbnMpfX12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGg9bC5vcHRpb25zfHx7fTthLnF1ZXJ5Q291bnQrKyxhLmN1cnJlbnRRdWVyeT1sO2NvbnN0W2YsX109ZnVuY3Rpb24gR01lKGMpe2NvbnN0IGw9ISFjLnNwbGl0KC9ccyosXHMqLyku''@;'; put 'put ''ZmluZChhPT4iOnNlbGYiPT1hKTtyZXR1cm4gbCYmKGM9Yy5yZXBsYWNlKFlNZSwiIikpLGM9Yy5yZXBsYWNlKC9AXCovZyxaRSkucmVwbGFjZSgvQFx3Ky9nLGE9PlpFKyItIithLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csTkgpLFtjLGxdfShsLnNlbGVjdG9yKTthLmN1cnJl''@;'; put 'put ''bnRRdWVyeVNlbGVjdG9yPWQubGVuZ3RoP2QrIiAiK2Y6ZixtMShhLmNvbGxlY3RlZFN0eWxlcyxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2NvbnN0IFQ9djEodGhpcyxHYihsLmFuaW1hdGlvbiksYSk7cmV0dXJuIGEuY3VycmVudFF1ZXJ5PW51bGwsYS5jdXJyZW50UXVlcnlT''@;'; put 'put ''ZWxlY3Rvcj1kLHt0eXBlOjExLHNlbGVjdG9yOmYsbGltaXQ6aC5saW1pdHx8MCxvcHRpb25hbDohIWgub3B0aW9uYWwsaW5jbHVkZVNlbGY6XyxhbmltYXRpb246VCxvcmlnaW5hbFNlbGVjdG9yOmwuc2VsZWN0b3Isb3B0aW9uczpwZyhsLm9wdGlvbnMpfX12aXNpdFN0YWdnZXIobCxhKXth''@;'; put 'put ''LmN1cnJlbnRRdWVyeXx8YS5lcnJvcnMucHVzaChmdW5jdGlvbiBkTWUoKXtyZXR1cm4gbmV3IEFyKDMwMTMsITEpfSgpKTtjb25zdCBkPSJmdWxsIj09PWwudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OllFKGwudGltaW5ncyxhLmVycm9ycywhMCk7cmV0dXJu''@;'; put 'put ''e3R5cGU6MTIsYW5pbWF0aW9uOnYxKHRoaXMsR2IobC5hbmltYXRpb24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyBxTWV7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlv''@;'; put 'put ''bj1udWxsLHRoaXMuY3VycmVudFF1ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51''@;'; put 'put ''bnN1cHBvcnRlZENTU1Byb3BlcnRpZXNGb3VuZD1uZXcgU2V0fX1mdW5jdGlvbiBwZyhjKXtyZXR1cm4gYz8oYz1XYihjKSkucGFyYW1zJiYoYy5wYXJhbXM9ZnVuY3Rpb24gJE1lKGMpe3JldHVybiBjP1diKGMpOm51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1bmN0aW9uIFVIKGMsbCxhKXty''@;'; put 'put ''ZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2luZzphfX1mdW5jdGlvbiBaSChjLGwsYSxkLGgsZixfPW51bGwsVD0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRpb246aCxkZWxheTpmLHRvdGFs''@;'; put 'put ''VGltZTpoK2YsZWFzaW5nOl8sc3ViVGltZWxpbmU6VH19Y2xhc3MgS0V7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8dGhpcy5fbWFwLnNldChsLGQ9''@;'; put 'put ''W10pLGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJuIHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgZXhlPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxueGU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIFlIKGMsbCxhLGQsaCxmPW5l''@;'; put 'put ''dyBNYXAsXz1uZXcgTWFwLFQsVyxpZT1bXSl7cmV0dXJuKG5ldyByeGUpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLF8sVCxXLGllKX1jbGFzcyByeGV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLF8sVCxXLGllLGdlPVtdKXtpZT1pZXx8bmV3IEtFO2NvbnN0IHdlPW5ldyBXSChsLGEs''@;'; put 'put ''aWUsaCxmLGdlLFtdKTt3ZS5vcHRpb25zPVc7Y29uc3QgRWU9Vy5kZWxheT9CZihXLmRlbGF5KTowO3dlLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKEVlKSx3ZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFtfXSxudWxsLHdlLmVycm9ycyxXKSx2MSh0aGlzLGQsd2UpO2NvbnN0''@;'; put 'put ''IFplPXdlLnRpbWVsaW5lcy5maWx0ZXIob3Q9Pm90LmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKFplLmxlbmd0aCYmVC5zaXplKXtsZXQgb3Q7Zm9yKGxldCBldD1aZS5sZW5ndGgtMTtldD49MDtldC0tKXtjb25zdCB5dD1aZVtldF07aWYoeXQuZWxlbWVudD09PWEpe290PXl0O2JyZWFrfX1v''@;'; put 'put ''dCYmIW90LmFsbG93T25seVRpbWVsaW5lU3R5bGVzKCkmJm90LnNldFN0eWxlcyhbVF0sbnVsbCx3ZS5lcnJvcnMsVyl9cmV0dXJuIFplLmxlbmd0aD9aZS5tYXAob3Q9Pm90LmJ1aWxkS2V5ZnJhbWVzKCkpOltaSChhLFtdLFtdLFtdLDAsRWUsIiIsITEpXX12aXNpdFRyaWdnZXIobCxhKXt9''@;'; put 'put ''dmlzaXRTdGF0ZShsLGEpe312aXNpdFRyYW5zaXRpb24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1cnJlbnRUaW1lbGlu''@;'; put 'put ''ZS5jdXJyZW50VGltZSxfPXRoaXMuX3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPV8mJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKF8pfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRp''@;'; put 'put ''b25zKTtkLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGQu''@;'; put 'put ''Y3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxhLnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCBfPSJudW1iZXIiPT10eXBlb2YgZj9mOkJmKCRiKGYsaD8ucGFyYW1z''@;'; put 'put ''Pz97fSxhLmVycm9ycykpO2QuZGVsYXlOZXh0U3RlcChfKX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgXz1udWxsIT1kLmR1cmF0aW9uP0JmKGQuZHVyYXRpb24pOm51bGwsVD1udWxsIT1kLmRlbGF5P0Jm''@;'; put 'put ''KGQuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT1fJiZsLmZvckVhY2goVz0+e2NvbnN0IGllPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKFcsXyxUKTtmPU1hdGgubWF4KGYsaWUuZHVyYXRpb24raWUuZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRlT3B0aW9ucyhs''@;'; put 'put ''Lm9wdGlvbnMsITApLHYxKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEuY3JlYXRlU3Vi''@;'; put 'put ''Q29udGV4dChmKSxoLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXs2PT1oLnByZXZpb3VzTm9kZS50eXBlJiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9WEUpO2NvbnN0IF89QmYoZi5kZWxheSk7aC5k''@;'; put 'put ''ZWxheU5leHRTdGVwKF8pfWwuc3RlcHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKF89PnYxKHRoaXMsXyxoKSksaC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2''@;'; put 'put ''aW91c05vZGU9bH12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P0JmKGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2goXz0+e2NvbnN0IFQ9YS5jcmVh''@;'; put 'put ''dGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZiYmVC5kZWxheU5leHRTdGVwKGYpLHYxKHRoaXMsXyxUKSxoPU1hdGgubWF4KGgsVC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChULmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2goXz0+YS5jdXJyZW50VGltZWxpbmUubWVy''@;'; put 'put ''Z2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhfKSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gWUUoYS5wYXJhbXM/JGIoZCxhLnBhcmFtcyxhLmVy''@;'; put 'put ''cm9ycyk6ZCxhLmVycm9ycyl9cmV0dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJy''@;'; put 'put ''ZW50VGltZWxpbmU7ZC5kZWxheSYmKGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwuc3R5bGU7NT09Zi50eXBlP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRUaW1lKGQuZHVyYXRpb24pLHRoaXMudmlzaXRT''@;'; put 'put ''dHlsZShmLGEpLGguYXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFoJiZkLmhhc0N1cnJl''@;'; put 'put ''bnRTdHlsZVByb3BlcnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9wdGlvbnMpLGEucHJldmlvdXNOb2RlPWx9dmlz''@;'; put 'put ''aXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLFQ9YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO1QuZWFzaW5nPWQuZWFzaW5nLGwuc3R5bGVzLmZvckVhY2go''@;'; put 'put ''Vz0+e1QuZm9yd2FyZFRpbWUoKFcub2Zmc2V0fHwwKSpmKSxULnNldFN0eWxlcyhXLnN0eWxlcyxXLmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLFQuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKFQpLGEu''@;'; put 'put ''dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P0JmKGguZGVsYXkpOjA7ZiYmKDY9PT1hLnByZXZpb3VzTm9kZS50''@;'; put 'put ''eXBlfHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9WEUpO2xldCBfPWQ7Y29uc3QgVD1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5v''@;'; put 'put ''cmlnaW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3VycmVudFF1ZXJ5VG90YWw9VC5sZW5ndGg7bGV0IFc9bnVsbDtULmZvckVhY2goKGllLGdlKT0+e2EuY3VycmVudFF1ZXJ5SW5kZXg9Z2U7Y29uc3Qgd2U9YS5jcmVhdGVTdWJD''@;'; put 'put ''b250ZXh0KGwub3B0aW9ucyxpZSk7ZiYmd2UuZGVsYXlOZXh0U3RlcChmKSxpZT09PWEuZWxlbWVudCYmKFc9d2UuY3VycmVudFRpbWVsaW5lKSx2MSh0aGlzLGwuYW5pbWF0aW9uLHdlKSx3ZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksXz1NYXRoLm1heChfLHdl''@;'; put 'put ''LmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKF8pLFcmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKFcpLGEuY3Vy''@;'; put 'put ''cmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3MsXz1NYXRoLmFicyhmLmR1cmF0aW9uKSxUPV8qKGEuY3VycmVu''@;'; put 'put ''dFF1ZXJ5VG90YWwtMSk7bGV0IFc9XyphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOlc9VC1XO2JyZWFrO2Nhc2UiZnVsbCI6Vz1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBnZT1hLmN1cnJlbnRUaW1l''@;'; put 'put ''bGluZTtXJiZnZS5kZWxheU5leHRTdGVwKFcpO2NvbnN0IHdlPWdlLmN1cnJlbnRUaW1lO3YxKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLXdlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFy''@;'; put 'put ''dFRpbWUpfX1jb25zdCBYRT17fTtjbGFzcyBXSHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyxULFcpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1mLHRoaXMuZXJy''@;'; put 'put ''b3JzPV8sdGhpcy50aW1lbGluZXM9VCx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPVhFLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0''@;'; put 'put ''aGlzLmN1cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1XfHxuZXcgSkUodGhpcy5fZHJpdmVyLGEsMCksVC5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJh''@;'; put 'put ''bXN9dXBkYXRlT3B0aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPUJmKGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1CZihkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztp''@;'; put 'put ''ZihmKXtsZXQgXz1oLnBhcmFtcztffHwoXz10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKFQ9PnsoIWF8fCFfLmhhc093blByb3BlcnR5KFQpKSYmKF9bVF09JGIoZltUXSxfLHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtp''@;'; put 'put ''Zih0aGlzLm9wdGlvbnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5l''@;'; put 'put ''bGVtZW50LGY9bmV3IFdIKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYu''@;'; put 'put ''cHJldmlvdXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1''@;'; put 'put ''ZXJ5SW5kZXgsZi5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPVhFLHRoaXMuY3VycmVu''@;'; put 'put ''dFRpbWVsaW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRp''@;'; put 'put ''b246YT8/bC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IGl4ZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5z''@;'; put 'put ''dHJldGNoU3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlz''@;'; put 'put ''LmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZixfKXtsZXQgVD1bXTtpZihoJiZULnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShleGUsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShueGUs''@;'; put 'put ''Ii4iK3RoaXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgaWU9dGhpcy5fZHJpdmVyLnF1ZXJ5KHRoaXMuZWxlbWVudCxsLDEhPWQpOzAhPT1kJiYoaWU9ZDwwP2llLnNsaWNlKGllLmxlbmd0aCtkLGllLmxlbmd0aCk6aWUuc2xpY2UoMCxkKSksVC5wdXNoKC4uLmllKX1yZXR1cm4hZiYmMD09VC5s''@;'; put 'put ''ZW5ndGgmJl8ucHVzaChmdW5jdGlvbiBoTWUoYyl7cmV0dXJuIG5ldyBBcigzMDE0LCExKX0oKSksVH19Y2xhc3MgSkV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdGFydFRpbWU9ZCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNM''@;'; put 'put ''b29rdXA9aCx0aGlzLmR1cmF0aW9uPTAsdGhpcy5lYXNpbmc9bnVsbCx0aGlzLl9wcmV2aW91c0tleWZyYW1lPW5ldyBNYXAsdGhpcy5fY3VycmVudEtleWZyYW1lPW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzPW5ldyBNYXAsdGhpcy5fc3R5bGVTdW1tYXJ5PW5ldyBNYXAsdGhpcy5fbG9jYWxU''@;'; put 'put ''aW1lbGluZVN0eWxlcz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdTdHlsZXM9bmV3IE1hcCx0aGlzLl9iYWNrRmlsbD1uZXcgTWFwLHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT1udWxsLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cHx8KHRoaXMuX2VsZW1lbnRUaW1lbGlu''@;'; put 'put ''ZVN0eWxlc0xvb2t1cD1uZXcgTWFwKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuZ2V0KGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzfHwodGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fbG9jYWxUaW1lbGlu''@;'; put 'put ''ZVN0eWxlcyx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXAuc2V0KGEsdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcykpLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWNvbnRhaW5zQW5pbWF0aW9uKCl7c3dpdGNoKHRoaXMuX2tleWZyYW1lcy5zaXplKXtjYXNlIDA6cmV0dXJuITE7Y2Fz''@;'; put 'put ''ZSAxOnJldHVybiB0aGlzLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKTtkZWZhdWx0OnJldHVybiEwfX1oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zaXplPjB9Z2V0IGN1cnJlbnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1l''@;'; put 'put ''K3RoaXMuZHVyYXRpb259ZGVsYXlOZXh0U3RlcChsKXtjb25zdCBhPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmdGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplO3RoaXMuZHVyYXRpb258fGE/KHRoaXMuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50VGltZStsKSxhJiZ0aGlzLnNuYXBzaG90Q3Vy''@;'; put 'put ''cmVudFN0eWxlcygpKTp0aGlzLnN0YXJ0VGltZSs9bH1mb3JrKGwsYSl7cmV0dXJuIHRoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksbmV3IEpFKHRoaXMuX2RyaXZlcixsLGF8fHRoaXMuY3VycmVudFRpbWUsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwKX1fbG9hZEtleWZy''@;'; put 'put ''YW1lKCl7dGhpcy5fY3VycmVudEtleWZyYW1lJiYodGhpcy5fcHJldmlvdXNLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWUpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT10aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pLHRoaXMuX2N1cnJlbnRLZXlmcmFtZXx8KHRoaXMuX2N1''@;'; put 'put ''cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcy5zZXQodGhpcy5kdXJhdGlvbix0aGlzLl9jdXJyZW50S2V5ZnJhbWUpKX1mb3J3YXJkRnJhbWUoKXt0aGlzLmR1cmF0aW9uKz0xLHRoaXMuX2xvYWRLZXlmcmFtZSgpfWZvcndhcmRUaW1lKGwpe3RoaXMuYXBwbHlTdHlsZXNU''@;'; put 'put ''b0tleWZyYW1lKCksdGhpcy5kdXJhdGlvbj1sLHRoaXMuX2xvYWRLZXlmcmFtZSgpfV91cGRhdGVTdHlsZShsLGEpe3RoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuc2V0KGwsYSksdGhpcy5fc3R5bGVTdW1tYXJ5LnNldChsLHt0''@;'; put 'put ''aW1lOnRoaXMuY3VycmVudFRpbWUsdmFsdWU6YX0pfWFsbG93T25seVRpbWVsaW5lU3R5bGVzKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZSE9PXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1hcHBseUVtcHR5U3RlcChsKXtsJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNl''@;'; put 'put ''dCgiZWFzaW5nIixsKTtmb3IobGV0W2EsZF1vZiB0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9iYWNrRmlsbC5zZXQoYSxkfHxBZiksdGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLEFmKTt0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZy''@;'; put 'put ''YW1lfXNldFN0eWxlcyhsLGEsZCxoKXthJiZ0aGlzLl9wcmV2aW91c0tleWZyYW1lLnNldCgiZWFzaW5nIixhKTtjb25zdCBmPWgmJmgucGFyYW1zfHx7fSxfPWZ1bmN0aW9uIG94ZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtsZXQgZDtyZXR1cm4gYy5mb3JFYWNoKGg9PntpZigiKiI9PT1oKXtk''@;'; put 'put ''PWR8fGwua2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsQWYpfWVsc2UgSHAoaCxhKX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbVCxXXW9mIF8pe2NvbnN0IGllPSRiKFcsZixkKTt0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChULGllKSx0aGlzLl9sb2Nh''@;'; put 'put ''bFRpbWVsaW5lU3R5bGVzLmhhcyhUKXx8dGhpcy5fYmFja0ZpbGwuc2V0KFQsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KFQpPz9BZiksdGhpcy5fdXBkYXRlU3R5bGUoVCxpZSl9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYmKHRo''@;'; put 'put ''aXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFzKGEp''@;'; put 'put ''fHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsYSl9Z2V0RmluYWxLZXlm''@;'; put 'put ''cmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwpe2wu''@;'; put 'put ''X3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7Y29u''@;'; put 'put ''c3QgbD1uZXcgU2V0LGE9bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKFQsVyk9Pntjb25zdCBpZT1IcChULG5ldyBNYXAsdGhpcy5fYmFja0ZpbGwpO2llLmZvckVhY2goKGdlLHdl''@;'; put 'put ''KT0+eyIhIj09PWdlP2wuYWRkKHdlKTpnZT09PUFmJiZhLmFkZCh3ZSl9KSxkfHxpZS5zZXQoIm9mZnNldCIsVy90aGlzLmR1cmF0aW9uKSxoLnB1c2goaWUpfSk7Y29uc3QgZj1sLnNpemU/V0UobC52YWx1ZXMoKSk6W10sXz1hLnNpemU/V0UoYS52YWx1ZXMoKSk6W107aWYoZCl7Y29uc3Qg''@;'; put 'put ''VD1oWzBdLFc9bmV3IE1hcChUKTtULnNldCgib2Zmc2V0IiwwKSxXLnNldCgib2Zmc2V0IiwxKSxoPVtULFddfXJldHVybiBaSCh0aGlzLmVsZW1lbnQsaCxmLF8sdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlzLmVhc2luZywhMSl9fWNsYXNzIGl4ZSBleHRlbmRzIEpFe2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSxkLGgsZixfLFQ9ITEpe3N1cGVyKGwsYSxfLmRlbGF5KSx0aGlzLmtleWZyYW1lcz1kLHRoaXMucHJlU3R5bGVQcm9wcz1oLHRoaXMucG9zdFN0eWxlUHJvcHM9Zix0aGlzLl9zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT1ULHRoaXMudGltaW5ncz17ZHVyYXRpb246Xy5kdXJh''@;'; put 'put ''dGlvbixkZWxheTpfLmRlbGF5LGVhc2luZzpfLmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgbD10aGlzLmtleWZyYW1lcyx7ZGVsYXk6YSxkdXJhdGlvbjpkLGVhc2luZzpofT10aGlzLnRpbWlu''@;'; put 'put ''Z3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmEpe2NvbnN0IGY9W10sXz1kK2EsVD1hL18sVz1IcChsWzBdKTtXLnNldCgib2Zmc2V0IiwwKSxmLnB1c2goVyk7Y29uc3QgaWU9SHAobFswXSk7aWUuc2V0KCJvZmZzZXQiLERlZShUKSksZi5wdXNoKGllKTtjb25zdCBnZT1s''@;'; put 'put ''Lmxlbmd0aC0xO2ZvcihsZXQgd2U9MTt3ZTw9Z2U7d2UrKyl7bGV0IEVlPUhwKGxbd2VdKTtjb25zdCBaZT1FZS5nZXQoIm9mZnNldCIpO0VlLnNldCgib2Zmc2V0IixEZWUoKGErWmUqZCkvXykpLGYucHVzaChFZSl9ZD1fLGE9MCxoPSIiLGw9Zn1yZXR1cm4gWkgodGhpcy5lbGVtZW50LGws''@;'; put 'put ''dGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsZCxhLGgsITApfX1mdW5jdGlvbiBEZWUoYyxsPTMpe2NvbnN0IGE9TWF0aC5wb3coMTAsbC0xKTtyZXR1cm4gTWF0aC5yb3VuZChjKmEpL2F9Y2xhc3MgR0h7fWNvbnN0IHN4ZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQi''@;'; put 'put ''LCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRsaW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBh''@;'; put 'put ''ZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lk''@;'; put 'put ''dGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUiXSk7Y2xhc3MgYXhlIGV4dGVuZHMgR0h7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIGpIKGwpfW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3QgXz1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKHN4''@;'; put 'put ''ZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJudW1iZXIiPT10eXBlb2YgZClmPSJweCI7ZWxzZXtjb25zdCBUPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Etel0qKSQvKTtUJiYwPT1UWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIHRNZShjLGwpe3JldHVybiBuZXcgQXIoMzAwNSwh''@;'; put 'put ''MSl9KCkpfXJldHVybiBfK2Z9fWZ1bmN0aW9uIEllZShjLGwsYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxl''@;'; put 'put ''czpfLHRpbWVsaW5lczpULHF1ZXJpZWRFbGVtZW50czpXLHByZVN0eWxlUHJvcHM6aWUscG9zdFN0eWxlUHJvcHM6Z2UsdG90YWxUaW1lOndlLGVycm9yczpFZX19Y29uc3QgJEg9e307Y2xhc3MgTGVle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEs''@;'; put 'put ''dGhpcy5fc3RhdGVTdHlsZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rpb24gbHhlKGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hlcnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVz''@;'; put 'put ''LmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxhLGQsaCxmLF8sVCxXLGllLGdlKXtjb25zdCB3ZT1bXSxFZT10aGlzLmFzdC5vcHRpb25zJiZ0''@;'; put 'put ''aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8JEgsb3Q9dGhpcy5idWlsZFN0eWxlcyhkLFQmJlQucGFyYW1zfHwkSCx3ZSksZXQ9VyYmVy5wYXJhbXN8fCRILHl0PXRoaXMuYnVpbGRTdHlsZXMoaCxldCx3ZSksa3Q9bmV3IFNldCxTdD1uZXcgTWFwLFF0PW5ldyBNYXAscm49InZvaWQiPT09aCx2''@;'; put 'put ''bj17cGFyYW1zOmN4ZShldCxFZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LE5uPWdlP1tdOllIKGwsYSx0aGlzLmFzdC5hbmltYXRpb24sZixfLG90LHl0LHZuLGllLHdlKTtsZXQgY3I9MDtpZihObi5mb3JFYWNoKF9pPT57Y3I9TWF0aC5tYXgoX2kuZHVyYXRpb24rX2kuZGVs''@;'; put 'put ''YXksY3IpfSksd2UubGVuZ3RoKXJldHVybiBJZWUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgscm4sb3QseXQsW10sW10sU3QsUXQsY3Isd2UpO05uLmZvckVhY2goX2k9Pntjb25zdCBsaT1faS5lbGVtZW50LG1yPW0xKFN0LGxpLG5ldyBTZXQpO19pLnByZVN0eWxlUHJvcHMuZm9yRWFjaCha''@;'; put 'put ''cj0+bXIuYWRkKFpyKSk7Y29uc3QgRWk9bTEoUXQsbGksbmV3IFNldCk7X2kucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChacj0+RWkuYWRkKFpyKSksbGkhPT1hJiZrdC5hZGQobGkpfSk7Y29uc3QgRHI9V0Uoa3QudmFsdWVzKCkpO3JldHVybiBJZWUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgs''@;'; put 'put ''cm4sb3QseXQsTm4sRHIsU3QsUXQsY3IpfX1mdW5jdGlvbiBjeGUoYyxsKXtjb25zdCBhPVdiKGwpO2Zvcihjb25zdCBkIGluIGMpYy5oYXNPd25Qcm9wZXJ0eShkKSYmbnVsbCE9Y1tkXSYmKGFbZF09Y1tkXSk7cmV0dXJuIGF9Y2xhc3MgdXhle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0''@;'; put 'put ''eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVzKGwsYSl7Y29uc3QgZD1uZXcgTWFwLGg9V2IodGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gT2JqZWN0LmtleXMobCkuZm9yRWFjaChmPT57Y29uc3QgXz1sW2ZdO251bGwhPT1fJiYoaFtm''@;'; put 'put ''XT1fKX0pLHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGY9Pnsic3RyaW5nIiE9dHlwZW9mIGYmJmYuZm9yRWFjaCgoXyxUKT0+e18mJihfPSRiKF8saCxhKSk7Y29uc3QgVz10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKFQsYSk7Xz10aGlzLm5vcm1hbGl6ZXIubm9y''@;'; put 'put ''bWFsaXplU3R5bGVWYWx1ZShULFcsXyxhKSxkLnNldChULF8pfSl9KSxkfX1jbGFzcyBoeGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGEu''@;'; put 'put ''c3RhdGVzLmZvckVhY2goaD0+e3RoaXMuc3RhdGVzLnNldChoLm5hbWUsbmV3IHV4ZShoLnN0eWxlLGgub3B0aW9ucyYmaC5vcHRpb25zLnBhcmFtc3x8e30sZCkpfSksUmVlKHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLFJlZSh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksYS50cmFuc2l0aW9u''@;'; put 'put ''cy5mb3JFYWNoKGg9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgTGVlKGwsaCx0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVuY3Rpb24gZnhlKGMsbCxhKXtyZXR1cm4gbmV3IExlZShjLHt0eXBlOjEsYW5pbWF0aW9uOnt0eXBlOjIsc3RlcHM6''@;'; put 'put ''W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKF8sVCk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNRdWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxh''@;'; put 'put ''LGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKF89Pl8ubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1cm4gdGhpcy5mYWxsYmFja1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBSZWUoYyxsLGEpe2MuaGFz''@;'; put 'put ''KGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgcHhlPW5ldyBLRTtjbGFzcyBneGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5p''@;'; put 'put ''bWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPXpIKHRoaXMuX2RyaXZlcixhLGQsW10pO2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIGJNZShjKXtyZXR1cm4gbmV3IEFyKDM1MDMsITEp''@;'; put 'put ''fSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPWdlZSh0aGlzLl9ub3JtYWxpemVyLGwua2V5ZnJhbWVzLGEsZCk7cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNp''@;'; put 'put ''bmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCBfO2NvbnN0IFQ9bmV3IE1hcDtpZihmPyhfPVlIKHRoaXMuX2RyaXZlcixhLGYsSEgsekUsbmV3IE1hcCxuZXcgTWFwLGQscHhlLGgpLF8uZm9yRWFjaChnZT0+e2NvbnN0''@;'; put 'put ''IHdlPW0xKFQsZ2UuZWxlbWVudCxuZXcgTWFwKTtnZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKEVlPT53ZS5zZXQoRWUsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rpb24geU1lKCl7cmV0dXJuIG5ldyBBcigzMzAwLCExKX0oKSksXz1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gd01lKGMp''@;'; put 'put ''e3JldHVybiBuZXcgQXIoMzUwNCwhMSl9KCk7VC5mb3JFYWNoKChnZSx3ZSk9PntnZS5mb3JFYWNoKChFZSxaZSk9PntnZS5zZXQoWmUsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZSh3ZSxaZSxBZikpfSl9KTtjb25zdCBpZT1GcChfLm1hcChnZT0+e2NvbnN0IHdlPVQuZ2V0KGdlLmVsZW1l''@;'; put 'put ''bnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihnZSxuZXcgTWFwLHdlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KGwsaWUpLGllLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChpZSksaWV9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''X2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtp''@;'; put 'put ''ZighYSl0aHJvdyBmdW5jdGlvbiBDTWUoYyl7cmV0dXJuIG5ldyBBcigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1PSChhLCIiLCIiLCIiKTtyZXR1cm4gTEgodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigi''@;'; put 'put ''cmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nh''@;'; put 'put ''c2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0''@;'; put 'put ''UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBPZWU9Im5nLWFuaW1hdGUtcXVldWVkIixxSD0ibmctYW5pbWF0ZS1kaXNhYmxlZCIseXhlPVtdLFBlZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxz''@;'; put 'put ''ZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sd3hlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxwMj0iX19uZ19yZW1vdmVkIjtj''@;'; put 'put ''bGFzcyBLSHtnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24geHhlKGMpe3JldHVybiBjPz9u''@;'; put 'put ''dWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3QgZj1XYihsKTtkZWxldGUgZi52YWx1ZSx0aGlzLm9wdGlvbnM9Zn1lbHNlIHRoaXMub3B0aW9ucz17fTt0aGlzLm9wdGlvbnMucGFyYW1zfHwodGhpcy5vcHRpb25zLnBhcmFtcz17fSl9YWJzb3JiT3B0aW9ucyhsKXtjb25zdCBhPWwucGFyYW1z''@;'; put 'put ''O2lmKGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLnBhcmFtcztPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntudWxsPT1kW2hdJiYoZFtoXT1hW2hdKX0pfX19Y29uc3QgcWI9InZvaWQiLFhIPW5ldyBLSChxYik7Y2xhc3MgQ3hle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmlkPWwsdGhpcy5o''@;'; put 'put ''b3N0RWxlbWVudD1hLHRoaXMuX2VuZ2luZT1kLHRoaXMucGxheWVycz1bXSx0aGlzLl90cmlnZ2Vycz1uZXcgTWFwLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9ob3N0Q2xhc3NOYW1lPSJuZy10bnMtIitsLGhkKGEsdGhpcy5faG9zdENsYXNz''@;'; put 'put ''TmFtZSl9bGlzdGVuKGwsYSxkLGgpe2lmKCF0aGlzLl90cmlnZ2Vycy5oYXMoYSkpdGhyb3cgZnVuY3Rpb24gU01lKGMsbCl7cmV0dXJuIG5ldyBBcigzMzAyLCExKX0oKTtpZihudWxsPT1kfHwwPT1kLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBNTWUoYyl7cmV0dXJuIG5ldyBBcigzMzAzLCEx''@;'; put 'put ''KX0oKTtpZighZnVuY3Rpb24gRXhlKGMpe3JldHVybiJzdGFydCI9PWN8fCJkb25lIj09Y30oZCkpdGhyb3cgZnVuY3Rpb24geE1lKGMsbCl7cmV0dXJuIG5ldyBBcigzNDAwLCExKX0oKTtjb25zdCBmPW0xKHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMsbCxbXSksXz17bmFtZTphLHBoYXNlOmQs''@;'; put 'put ''Y2FsbGJhY2s6aH07Zi5wdXNoKF8pO2NvbnN0IFQ9bTEodGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudCxsLG5ldyBNYXApO3JldHVybiBULmhhcyhhKXx8KGhkKGwsVUUpLGhkKGwsVUUrIi0iK2EpLFQuc2V0KGEsWEgpKSwoKT0+e3RoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57Y29u''@;'; put 'put ''c3QgVz1mLmluZGV4T2YoXyk7Vz49MCYmZi5zcGxpY2UoVywxKSx0aGlzLl90cmlnZ2Vycy5oYXMoYSl8fFQuZGVsZXRlKGEpfSl9fXJlZ2lzdGVyKGwsYSl7cmV0dXJuIXRoaXMuX3RyaWdnZXJzLmhhcyhsKSYmKHRoaXMuX3RyaWdnZXJzLnNldChsLGEpLCEwKX1fZ2V0VHJpZ2dlcihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuX3RyaWdnZXJzLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBFTWUoYyl7cmV0dXJuIG5ldyBBcigzNDAxLCExKX0oKTtyZXR1cm4gYX10cmlnZ2VyKGwsYSxkLGg9ITApe2NvbnN0IGY9dGhpcy5fZ2V0VHJpZ2dlcihhKSxfPW5ldyBKSCh0aGlzLmlkLGEsbCk7bGV0''@;'; put 'put ''IFQ9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7VHx8KGhkKGwsVUUpLGhkKGwsVUUrIi0iK2EpLHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuc2V0KGwsVD1uZXcgTWFwKSk7bGV0IFc9VC5nZXQoYSk7Y29uc3QgaWU9bmV3IEtIKGQsdGhpcy5pZCk7aWYoIShkJiZk''@;'; put 'put ''Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmVyYmaWUuYWJzb3JiT3B0aW9ucyhXLm9wdGlvbnMpLFQuc2V0KGEsaWUpLFd8fChXPVhIKSxpZS52YWx1ZSE9PXFiJiZXLnZhbHVlPT09aWUudmFsdWUpe2lmKCFmdW5jdGlvbiBUeGUoYyxsKXtjb25zdCBhPU9iamVjdC5rZXlzKGMpLGQ9T2Jq''@;'; put 'put ''ZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShXLnBhcmFtcyxpZS5wYXJhbXMpKXtjb25z''@;'; put 'put ''dCBldD1bXSx5dD1mLm1hdGNoU3R5bGVzKFcudmFsdWUsVy5wYXJhbXMsZXQpLGt0PWYubWF0Y2hTdHlsZXMoaWUudmFsdWUsaWUucGFyYW1zLGV0KTtldC5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKGV0KTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2ZnKGwseXQpLGho''@;'; put 'put ''KGwsa3QpfSl9cmV0dXJufWNvbnN0IEVlPW0xKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO0VlLmZvckVhY2goZXQ9PntldC5uYW1lc3BhY2VJZD09dGhpcy5pZCYmZXQudHJpZ2dlck5hbWU9PWEmJmV0LnF1ZXVlZCYmZXQuZGVzdHJveSgpfSk7bGV0IFplPWYubWF0Y2hU''@;'; put 'put ''cmFuc2l0aW9uKFcudmFsdWUsaWUudmFsdWUsbCxpZS5wYXJhbXMpLG90PSExO2lmKCFaZSl7aWYoIWgpcmV0dXJuO1plPWYuZmFsbGJhY2tUcmFuc2l0aW9uLG90PSEwfXJldHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDps''@;'; put 'put ''LHRyaWdnZXJOYW1lOmEsdHJhbnNpdGlvbjpaZSxmcm9tU3RhdGU6Vyx0b1N0YXRlOmllLHBsYXllcjpfLGlzRmFsbGJhY2tUcmFuc2l0aW9uOm90fSksb3R8fChoZChsLE9lZSksXy5vblN0YXJ0KCgpPT57UTgobCxPZWUpfSkpLF8ub25Eb25lKCgpPT57bGV0IGV0PXRoaXMucGxheWVycy5p''@;'; put 'put ''bmRleE9mKF8pO2V0Pj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGV0LDEpO2NvbnN0IHl0PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZih5dCl7bGV0IGt0PXl0LmluZGV4T2YoXyk7a3Q+PTAmJnl0LnNwbGljZShrdCwxKX19KSx0aGlzLnBsYXllcnMucHVzaChfKSxF''@;'; put 'put ''ZS5wdXNoKF8pLF99ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVtZW50TGlzdGVuZXJz''@;'; put 'put ''LnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5n''@;'; put 'put ''ZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCxaRSwhMCk7ZC5mb3JFYWNo''@;'; put 'put ''KGg9PntpZihoW3AyXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2goXz0+Xy50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0pLHRoaXMuX2VuZ2lu''@;'; put 'put ''ZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksXz1uZXcgTWFwO2lmKGYpe2Nv''@;'; put 'put ''bnN0IFQ9W107aWYoZi5mb3JFYWNoKChXLGllKT0+e2lmKF8uc2V0KGllLFcudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhpZSkpe2NvbnN0IGdlPXRoaXMudHJpZ2dlcihsLGllLHFiLGgpO2dlJiZULnB1c2goZ2UpfX0pLFQubGVuZ3RoKXJldHVybiB0aGlzLl9lbmdpbmUubWFya0VsZW1l''@;'; put 'put ''bnRBc1JlbW92ZWQodGhpcy5pZCxsLCEwLGEsXyksZCYmRnAoVCkub25Eb25lKCgpPT50aGlzLl9lbmdpbmUucHJvY2Vzc0xlYXZlTm9kZShsKSksITB9cmV0dXJuITF9cHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQo''@;'; put 'put ''bCksZD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtpZihhJiZkKXtjb25zdCBoPW5ldyBTZXQ7YS5mb3JFYWNoKGY9Pntjb25zdCBfPWYubmFtZTtpZihoLmhhcyhfKSlyZXR1cm47aC5hZGQoXyk7Y29uc3QgVz10aGlzLl90cmlnZ2Vycy5nZXQoXykuZmFsbGJhY2tUcmFu''@;'; put 'put ''c2l0aW9uLGllPWQuZ2V0KF8pfHxYSCxnZT1uZXcgS0gocWIpLHdlPW5ldyBKSCh0aGlzLmlkLF8sbCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTpfLHRyYW5zaXRpb246Vyxmcm9tU3RhdGU6aWUsdG9T''@;'; put 'put ''dGF0ZTpnZSxwbGF5ZXI6d2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdnZXJMZWF2''@;'; put 'put ''ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgXz1sO2Zvcig7Xz1fLnBhcmVu''@;'; put 'put ''dE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldChfKSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbcDJdOyghZnx8Zj09PVBlZSkm''@;'; put 'put ''JihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe2hkKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFuc2l0aW9u''@;'; put 'put ''cyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCxfPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO18mJl8uZm9yRWFjaChUPT57aWYoVC5uYW1lPT1k''@;'; put 'put ''LnRyaWdnZXJOYW1lKXtjb25zdCBXPU9IKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO1cuX2RhdGE9bCxMSChkLnBsYXllcixULnBoYXNlLFcsVC5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRlckZsdXNo''@;'; put 'put ''KCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsXz1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT1fP2YtXzp0aGlzLl9lbmdpbmUuZHJpdmVy''@;'; put 'put ''LmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3MgU3hle19vblJl''@;'; put 'put ''bW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMu''@;'; put 'put ''cGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9''@;'; put 'put ''MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNv''@;'; put 'put ''bGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBsPVtdO3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGQ9PntkLnF1ZXVlZCYmbC5wdXNo''@;'; put 'put ''KGQpfSl9KSxsfWNyZWF0ZU5hbWVzcGFjZShsLGEpe2NvbnN0IGQ9bmV3IEN4ZShsLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsYSk6KHRoaXMubmV3''@;'; put 'put ''SG9zdEVsZW1lbnRzLnNldChhLGQpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdPWR9X2JhbGFuY2VOYW1lc3BhY2VMaXN0KGwsYSl7Y29uc3QgZD10aGlzLl9uYW1lc3BhY2VMaXN0LGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtp''@;'; put 'put ''ZihkLmxlbmd0aC0xPj0wKXtsZXQgXz0hMSxUPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtUOyl7Y29uc3QgVz1oLmdldChUKTtpZihXKXtjb25zdCBpZT1kLmluZGV4T2YoVyk7ZC5zcGxpY2UoaWUrMSwwLGwpLF89ITA7YnJlYWt9VD10aGlzLmRyaXZlci5nZXRQYXJl''@;'; put 'put ''bnRFbGVtZW50KFQpfV98fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dl''@;'; put 'put ''cihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7bCYmKHRoaXMuYWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3Qg''@;'; put 'put ''ZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVzcGFjZUxpc3QuaW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShh''@;'; put 'put ''KSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFtZXNwYWNlc0J5RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYo''@;'; put 'put ''ZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRkKGYpfXJldHVybiBhfXRyaWdnZXIobCxhLGQsaCl7aWYoUUUoYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2Uo''@;'; put 'put ''bCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCFRRShhKSlyZXR1cm47Y29uc3QgZj1hW3AyXTtpZihmJiZmLnNldEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3QgXz10aGlz''@;'; put 'put ''LmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTtfPj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKF8sMSl9aWYobCl7Y29uc3QgXz10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtfJiZfLmluc2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1l''@;'; put 'put ''bnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3RoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKGwpLGhkKGwscUgpKTp0aGlzLmRp''@;'; put 'put ''c2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxROChsLHFIKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoUUUoYSkpe2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFjZShsKTpudWxsO2g/aC5yZW1vdmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFz''@;'; put 'put ''UmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21wbGV0ZShhLGQpfW1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5j''@;'; put 'put ''b2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtwMl09e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJpZ2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGwsYSxkLGgsZil7cmV0dXJuIFFFKGEpP3Ro''@;'; put 'put ''aXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxlbWVudCxsLmZyb21TdGF0ZS52YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJv''@;'; put 'put ''bVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsWkUsITApO2EuZm9yRWFjaChkPT50aGlzLmRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5''@;'; put 'put ''ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLE5ILCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50''@;'; put 'put ''LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIEZwKHRoaXMucGxheWVycykub25Eb25lKCgpPT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUo''@;'; put 'put ''bCl7Y29uc3QgYT1sW3AyXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbcDJdPVBlZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShhLm5hbWVzcGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hl''@;'; put 'put ''KGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMocUgpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZlci5xdWVyeShsLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+''@;'; put 'put ''e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2goKGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3''@;'; put 'put ''SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aDtkKyspaGQodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2Rd''@;'; put 'put ''LCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2NvbnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxs''@;'; put 'put ''eXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUodGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVl''@;'; put 'put ''dWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkpLHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2Nv''@;'; put 'put ''bnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9GcChhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBvcnRFcnJvcihsKXt0aHJvdyBmdW5jdGlvbiBrTWUoYyl7cmV0dXJuIG5ldyBBcigz''@;'; put 'put ''NDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgS0UsaD1bXSxmPW5ldyBNYXAsXz1bXSxUPW5ldyBNYXAsVz1uZXcgTWFwLGllPW5ldyBNYXAsZ2U9bmV3IFNldDt0aGlzLmRpc2FibGVkTm9kZXMuZm9yRWFjaChRbj0+e2dlLmFkZChRbik7Y29uc3QgTXI9dGhp''@;'; put 'put ''cy5kcml2ZXIucXVlcnkoUW4sIi5uZy1hbmltYXRlLXF1ZXVlZCIsITApO2ZvcihsZXQgX3I9MDtfcjxNci5sZW5ndGg7X3IrKylnZS5hZGQoTXJbX3JdKX0pO2NvbnN0IHdlPXRoaXMuYm9keU5vZGUsRWU9QXJyYXkuZnJvbSh0aGlzLnN0YXRlc0J5RWxlbWVudC5rZXlzKCkpLFplPU5lZShF''@;'; put 'put ''ZSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMpLG90PW5ldyBNYXA7bGV0IGV0PTA7WmUuZm9yRWFjaCgoUW4sTXIpPT57Y29uc3QgX3I9SEgrZXQrKztvdC5zZXQoTXIsX3IpLFFuLmZvckVhY2godnQ9PmhkKHZ0LF9yKSl9KTtjb25zdCB5dD1bXSxrdD1uZXcgU2V0LFN0PW5ldyBTZXQ7''@;'; put 'put ''Zm9yKGxldCBRbj0wO1FuPHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7UW4rKyl7Y29uc3QgTXI9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW1FuXSxfcj1NcltwMl07X3ImJl9yLnNldEZvclJlbW92YWwmJih5dC5wdXNoKE1yKSxrdC5hZGQoTXIpLF9yLmhhc0FuaW1h''@;'; put 'put ''dGlvbj90aGlzLmRyaXZlci5xdWVyeShNciwiLm5nLXN0YXItaW5zZXJ0ZWQiLCEwKS5mb3JFYWNoKHZ0PT5rdC5hZGQodnQpKTpTdC5hZGQoTXIpKX1jb25zdCBRdD1uZXcgTWFwLHJuPU5lZShFZSxBcnJheS5mcm9tKGt0KSk7cm4uZm9yRWFjaCgoUW4sTXIpPT57Y29uc3QgX3I9ekUrZXQr''@;'; put 'put ''KztRdC5zZXQoTXIsX3IpLFFuLmZvckVhY2godnQ9PmhkKHZ0LF9yKSl9KSxsLnB1c2goKCk9PntaZS5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1vdC5nZXQoTXIpO1FuLmZvckVhY2godnQ9PlE4KHZ0LF9yKSl9KSxybi5mb3JFYWNoKChRbixNcik9Pntjb25zdCBfcj1RdC5nZXQoTXIp''@;'; put 'put ''O1FuLmZvckVhY2godnQ9PlE4KHZ0LF9yKSl9KSx5dC5mb3JFYWNoKFFuPT57dGhpcy5wcm9jZXNzTGVhdmVOb2RlKFFuKX0pfSk7Y29uc3Qgdm49W10sTm49W107Zm9yKGxldCBRbj10aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aC0xO1FuPj0wO1FuLS0pdGhpcy5fbmFtZXNwYWNlTGlzdFtR''@;'; put 'put ''bl0uZHJhaW5RdWV1ZWRUcmFuc2l0aW9ucyhhKS5mb3JFYWNoKF9yPT57Y29uc3QgdnQ9X3IucGxheWVyLE90PV9yLmVsZW1lbnQ7aWYodm4ucHVzaCh2dCksdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aCl7Y29uc3QgJHI9T3RbcDJdO2lmKCRyJiYkci5zZXRGb3JNb3ZlKXtp''@;'; put 'put ''Zigkci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzJiYkci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmhhcyhfci50cmlnZ2VyTmFtZSkpe2NvbnN0IFlyPSRyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuZ2V0KF9yLnRyaWdnZXJOYW1lKSxOcj10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQoX3IuZWxl''@;'; put 'put ''bWVudCk7aWYoTnImJk5yLmhhcyhfci50cmlnZ2VyTmFtZSkpe2NvbnN0IFJpPU5yLmdldChfci50cmlnZ2VyTmFtZSk7UmkudmFsdWU9WXIsTnIuc2V0KF9yLnRyaWdnZXJOYW1lLFJpKX19cmV0dXJuIHZvaWQgdnQuZGVzdHJveSgpfX1jb25zdCBjbj0hd2V8fCF0aGlzLmRyaXZlci5jb250''@;'; put 'put ''YWluc0VsZW1lbnQod2UsT3QpLEVuPVF0LmdldChPdCksT249b3QuZ2V0KE90KSxKbj10aGlzLl9idWlsZEluc3RydWN0aW9uKF9yLGQsT24sRW4sY24pO2lmKEpuLmVycm9ycyYmSm4uZXJyb3JzLmxlbmd0aClyZXR1cm4gdm9pZCBObi5wdXNoKEpuKTtpZihjbilyZXR1cm4gdnQub25TdGFy''@;'; put 'put ''dCgoKT0+ZmcoT3QsSm4uZnJvbVN0eWxlcykpLHZ0Lm9uRGVzdHJveSgoKT0+aGgoT3QsSm4udG9TdHlsZXMpKSx2b2lkIGgucHVzaCh2dCk7aWYoX3IuaXNGYWxsYmFja1RyYW5zaXRpb24pcmV0dXJuIHZ0Lm9uU3RhcnQoKCk9PmZnKE90LEpuLmZyb21TdHlsZXMpKSx2dC5vbkRlc3Ryb3ko''@;'; put 'put ''KCk9PmhoKE90LEpuLnRvU3R5bGVzKSksdm9pZCBoLnB1c2godnQpO2NvbnN0IFByPVtdO0puLnRpbWVsaW5lcy5mb3JFYWNoKCRyPT57JHIuc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9ITAsdGhpcy5kaXNhYmxlZE5vZGVzLmhhcygkci5lbGVtZW50KXx8UHIucHVzaCgkcil9KSxKbi50aW1l''@;'; put 'put ''bGluZXM9UHIsZC5hcHBlbmQoT3QsSm4udGltZWxpbmVzKSxfLnB1c2goe2luc3RydWN0aW9uOkpuLHBsYXllcjp2dCxlbGVtZW50Ok90fSksSm4ucXVlcmllZEVsZW1lbnRzLmZvckVhY2goJHI9Pm0xKFQsJHIsW10pLnB1c2godnQpKSxKbi5wcmVTdHlsZVByb3BzLmZvckVhY2goKCRyLFly''@;'; put 'put ''KT0+e2lmKCRyLnNpemUpe2xldCBOcj1XLmdldChZcik7TnJ8fFcuc2V0KFlyLE5yPW5ldyBTZXQpLCRyLmZvckVhY2goKFJpLFhvKT0+TnIuYWRkKFhvKSl9fSksSm4ucG9zdFN0eWxlUHJvcHMuZm9yRWFjaCgoJHIsWXIpPT57bGV0IE5yPWllLmdldChZcik7TnJ8fGllLnNldChZcixOcj1u''@;'; put 'put ''ZXcgU2V0KSwkci5mb3JFYWNoKChSaSxYbyk9Pk5yLmFkZChYbykpfSl9KTtpZihObi5sZW5ndGgpe2NvbnN0IFFuPVtdO05uLmZvckVhY2goTXI9PntRbi5wdXNoKGZ1bmN0aW9uIEFNZShjLGwpe3JldHVybiBuZXcgQXIoMzUwNSwhMSl9KCkpfSksdm4uZm9yRWFjaChNcj0+TXIuZGVzdHJv''@;'; put 'put ''eSgpKSx0aGlzLnJlcG9ydEVycm9yKFFuKX1jb25zdCBjcj1uZXcgTWFwLERyPW5ldyBNYXA7Xy5mb3JFYWNoKFFuPT57Y29uc3QgTXI9UW4uZWxlbWVudDtkLmhhcyhNcikmJihEci5zZXQoTXIsTXIpLHRoaXMuX2JlZm9yZUFuaW1hdGlvbkJ1aWxkKFFuLnBsYXllci5uYW1lc3BhY2VJZCxR''@;'; put 'put ''bi5pbnN0cnVjdGlvbixjcikpfSksaC5mb3JFYWNoKFFuPT57Y29uc3QgTXI9UW4uZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoTXIsITEsUW4ubmFtZXNwYWNlSWQsUW4udHJpZ2dlck5hbWUsbnVsbCkuZm9yRWFjaCh2dD0+e20xKGNyLE1yLFtdKS5wdXNoKHZ0KSx2dC5kZXN0''@;'; put 'put ''cm95KCl9KX0pO2NvbnN0IF9pPXl0LmZpbHRlcihRbj0+QmVlKFFuLFcsaWUpKSxsaT1uZXcgTWFwO0hlZShsaSx0aGlzLmRyaXZlcixTdCxpZSxBZikuZm9yRWFjaChRbj0+e0JlZShRbixXLGllKSYmX2kucHVzaChRbil9KTtjb25zdCBFaT1uZXcgTWFwO1plLmZvckVhY2goKFFuLE1yKT0+''@;'; put 'put ''e0hlZShFaSx0aGlzLmRyaXZlcixuZXcgU2V0KFFuKSxXLCIhIil9KSxfaS5mb3JFYWNoKFFuPT57Y29uc3QgTXI9bGkuZ2V0KFFuKSxfcj1FaS5nZXQoUW4pO2xpLnNldChRbixuZXcgTWFwKFsuLi5Ncj8uZW50cmllcygpPz9bXSwuLi5fcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IFpy''@;'; put 'put ''PVtdLEZuPVtdLEZyPXt9O18uZm9yRWFjaChRbj0+e2NvbnN0e2VsZW1lbnQ6TXIscGxheWVyOl9yLGluc3RydWN0aW9uOnZ0fT1RbjtpZihkLmhhcyhNcikpe2lmKGdlLmhhcyhNcikpcmV0dXJuIF9yLm9uRGVzdHJveSgoKT0+aGgoTXIsdnQudG9TdHlsZXMpKSxfci5kaXNhYmxlZD0hMCxf''@;'; put 'put ''ci5vdmVycmlkZVRvdGFsVGltZSh2dC50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKF9yKTtsZXQgT3Q9RnI7aWYoRHIuc2l6ZT4xKXtsZXQgRW49TXI7Y29uc3QgT249W107Zm9yKDtFbj1Fbi5wYXJlbnROb2RlOyl7Y29uc3QgSm49RHIuZ2V0KEVuKTtpZihKbil7T3Q9Sm47YnJlYWt9T24ucHVz''@;'; put 'put ''aChFbil9T24uZm9yRWFjaChKbj0+RHIuc2V0KEpuLE90KSl9Y29uc3QgY249dGhpcy5fYnVpbGRBbmltYXRpb24oX3IubmFtZXNwYWNlSWQsdnQsY3IsZixFaSxsaSk7aWYoX3Iuc2V0UmVhbFBsYXllcihjbiksT3Q9PT1Gcilaci5wdXNoKF9yKTtlbHNle2NvbnN0IEVuPXRoaXMucGxheWVy''@;'; put 'put ''c0J5RWxlbWVudC5nZXQoT3QpO0VuJiZFbi5sZW5ndGgmJihfci5wYXJlbnRQbGF5ZXI9RnAoRW4pKSxoLnB1c2goX3IpfX1lbHNlIGZnKE1yLHZ0LmZyb21TdHlsZXMpLF9yLm9uRGVzdHJveSgoKT0+aGgoTXIsdnQudG9TdHlsZXMpKSxGbi5wdXNoKF9yKSxnZS5oYXMoTXIpJiZoLnB1c2go''@;'; put 'put ''X3IpfSksRm4uZm9yRWFjaChRbj0+e2NvbnN0IE1yPWYuZ2V0KFFuLmVsZW1lbnQpO2lmKE1yJiZNci5sZW5ndGgpe2NvbnN0IF9yPUZwKE1yKTtRbi5zZXRSZWFsUGxheWVyKF9yKX19KSxoLmZvckVhY2goUW49PntRbi5wYXJlbnRQbGF5ZXI/UW4uc3luY1BsYXllckV2ZW50cyhRbi5wYXJl''@;'; put 'put ''bnRQbGF5ZXIpOlFuLmRlc3Ryb3koKX0pO2ZvcihsZXQgUW49MDtRbjx5dC5sZW5ndGg7UW4rKyl7Y29uc3QgTXI9eXRbUW5dLF9yPU1yW3AyXTtpZihROChNcix6RSksX3ImJl9yLmhhc0FuaW1hdGlvbiljb250aW51ZTtsZXQgdnQ9W107aWYoVC5zaXplKXtsZXQgY249VC5nZXQoTXIpO2Nu''@;'; put 'put ''JiZjbi5sZW5ndGgmJnZ0LnB1c2goLi4uY24pO2xldCBFbj10aGlzLmRyaXZlci5xdWVyeShNcixOSCwhMCk7Zm9yKGxldCBPbj0wO09uPEVuLmxlbmd0aDtPbisrKXtsZXQgSm49VC5nZXQoRW5bT25dKTtKbiYmSm4ubGVuZ3RoJiZ2dC5wdXNoKC4uLkpuKX19Y29uc3QgT3Q9dnQuZmlsdGVy''@;'; put 'put ''KGNuPT4hY24uZGVzdHJveWVkKTtPdC5sZW5ndGg/a3hlKHRoaXMsTXIsT3QpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShNcil9cmV0dXJuIHl0Lmxlbmd0aD0wLFpyLmZvckVhY2goUW49Pnt0aGlzLnBsYXllcnMucHVzaChRbiksUW4ub25Eb25lKCgpPT57UW4uZGVzdHJveSgpO2NvbnN0IE1y''@;'; put 'put ''PXRoaXMucGxheWVycy5pbmRleE9mKFFuKTt0aGlzLnBsYXllcnMuc3BsaWNlKE1yLDEpfSksUW4ucGxheSgpfSksWnJ9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0''@;'; put 'put ''UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IF89W107aWYoYSl7Y29uc3QgVD10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtUJiYoXz1UKX1lbHNle2NvbnN0IFQ9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihUKXtjb25zdCBXPSFmfHxmPT1xYjtULmZv''@;'; put 'put ''ckVhY2goaWU9PntpZS5xdWV1ZWR8fCFXJiZpZS50cmlnZ2VyTmFtZSE9aHx8Xy5wdXNoKGllKX0pfX1yZXR1cm4oZHx8aCkmJihfPV8uZmlsdGVyKFQ9PiEoZCYmZCE9VC5uYW1lc3BhY2VJZHx8aCYmaCE9VC50cmlnZ2VyTmFtZSkpKSxffV9iZWZvcmVBbmltYXRpb25CdWlsZChsLGEsZCl7''@;'; put 'put ''Y29uc3QgZj1hLmVsZW1lbnQsXz1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmwsVD1hLmlzUmVtb3ZhbFRyYW5zaXRpb24/dm9pZCAwOmEudHJpZ2dlck5hbWU7Zm9yKGNvbnN0IFcgb2YgYS50aW1lbGluZXMpe2NvbnN0IGllPVcuZWxlbWVudCxnZT1pZSE9PWYsd2U9bTEoZCxpZSxb''@;'; put 'put ''XSk7dGhpcy5fZ2V0UHJldmlvdXNQbGF5ZXJzKGllLGdlLF8sVCxhLnRvU3RhdGUpLmZvckVhY2goWmU9Pntjb25zdCBvdD1aZS5nZXRSZWFsUGxheWVyKCk7b3QuYmVmb3JlRGVzdHJveSYmb3QuYmVmb3JlRGVzdHJveSgpLFplLmRlc3Ryb3koKSx3ZS5wdXNoKFplKX0pfWZnKGYsYS5mcm9t''@;'; put 'put ''U3R5bGVzKX1fYnVpbGRBbmltYXRpb24obCxhLGQsaCxmLF8pe2NvbnN0IFQ9YS50cmlnZ2VyTmFtZSxXPWEuZWxlbWVudCxpZT1bXSxnZT1uZXcgU2V0LHdlPW5ldyBTZXQsRWU9YS50aW1lbGluZXMubWFwKG90PT57Y29uc3QgZXQ9b3QuZWxlbWVudDtnZS5hZGQoZXQpO2NvbnN0IHl0PWV0''@;'; put 'put ''W3AyXTtpZih5dCYmeXQucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyBvYihvdC5kdXJhdGlvbixvdC5kZWxheSk7Y29uc3Qga3Q9ZXQhPT1XLFN0PWZ1bmN0aW9uIEF4ZShjKXtjb25zdCBsPVtdO3JldHVybiBWZWUoYyxsKSxsfSgoZC5nZXQoZXQpfHx5eGUpLm1hcChjcj0+Y3Iu''@;'; put 'put ''Z2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKGNyPT4hIWNyLmVsZW1lbnQmJmNyLmVsZW1lbnQ9PT1ldCksUXQ9Zi5nZXQoZXQpLHJuPV8uZ2V0KGV0KSx2bj1nZWUodGhpcy5fbm9ybWFsaXplcixvdC5rZXlmcmFtZXMsUXQscm4pLE5uPXRoaXMuX2J1aWxkUGxheWVyKG90LHZuLFN0KTtpZihv''@;'; put 'put ''dC5zdWJUaW1lbGluZSYmaCYmd2UuYWRkKGV0KSxrdCl7Y29uc3QgY3I9bmV3IEpIKGwsVCxldCk7Y3Iuc2V0UmVhbFBsYXllcihObiksaWUucHVzaChjcil9cmV0dXJuIE5ufSk7aWUuZm9yRWFjaChvdD0+e20xKHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsb3QuZWxlbWVudCxbXSku''@;'; put 'put ''cHVzaChvdCksb3Qub25Eb25lKCgpPT5mdW5jdGlvbiBNeGUoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO2lmKGQpe2lmKGQubGVuZ3RoKXtjb25zdCBoPWQuaW5kZXhPZihhKTtkLnNwbGljZShoLDEpfTA9PWQubGVuZ3RoJiZjLmRlbGV0ZShsKX1yZXR1cm4gZH0odGhpcy5wbGF5ZXJzQnlRdWVy''@;'; put 'put ''aWVkRWxlbWVudCxvdC5lbGVtZW50LG90KSl9KSxnZS5mb3JFYWNoKG90PT5oZChvdCxDZWUpKTtjb25zdCBaZT1GcChFZSk7cmV0dXJuIFplLm9uRGVzdHJveSgoKT0+e2dlLmZvckVhY2gob3Q9PlE4KG90LENlZSkpLGhoKFcsYS50b1N0eWxlcyl9KSx3ZS5mb3JFYWNoKG90PT57bTEoaCxv''@;'; put 'put ''dCxbXSkucHVzaChaZSl9KSxaZX1fYnVpbGRQbGF5ZXIobCxhLGQpe3JldHVybiBhLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUobC5lbGVtZW50LGEsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLGQpOm5ldyBvYihsLmR1cmF0aW9uLGwuZGVsYXkpfX1jbGFzcyBKSHtjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEsZCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMudHJpZ2dlck5hbWU9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLl9wbGF5ZXI9bmV3IG9iLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlz''@;'; put 'put ''LnBhcmVudFBsYXllcj1udWxsLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMudG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcihsKXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9bCx0aGlzLl9xdWV1ZWRD''@;'; put 'put ''YWxsYmFja3MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaChoPT5MSChsLGQsdm9pZCAwLGgpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5jbGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKGwudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0h''@;'; put 'put ''MSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUobCl7dGhpcy50b3RhbFRpbWU9bH1zeW5jUGxheWVyRXZlbnRzKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZsLm9uU3RhcnQoKCk9PmEudHJpZ2dlckNhbGxi''@;'; put 'put ''YWNrKCJzdGFydCIpKSxsLm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksbC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVFdmVudChsLGEpe20xKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyxsLFtdKS5wdXNoKGEpfW9uRG9uZShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVF''@;'; put 'put ''dmVudCgiZG9uZSIsbCksdGhpcy5fcGxheWVyLm9uRG9uZShsKX1vblN0YXJ0KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJzdGFydCIsbCksdGhpcy5fcGxheWVyLm9uU3RhcnQobCl9b25EZXN0cm95KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95''@;'; put 'put ''IixsKSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KGwpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgp''@;'; put 'put ''eyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQoKX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9''@;'; put 'put ''cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKGwpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5ZXIuc2V0UG9zaXRpb24obCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmln''@;'; put 'put ''Z2VyQ2FsbGJhY2sobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmEudHJpZ2dlckNhbGxiYWNrKGwpfX1mdW5jdGlvbiBRRShjKXtyZXR1cm4gYyYmMT09PWMubm9kZVR5cGV9ZnVuY3Rpb24gRmVlKGMsbCl7Y29uc3QgYT1jLnN0eWxlLmRpc3BsYXk7cmV0dXJu''@;'; put 'put ''IGMuc3R5bGUuZGlzcGxheT1sPz8ibm9uZSIsYX1mdW5jdGlvbiBIZWUoYyxsLGEsZCxoKXtjb25zdCBmPVtdO2EuZm9yRWFjaChXPT5mLnB1c2goRmVlKFcpKSk7Y29uc3QgXz1bXTtkLmZvckVhY2goKFcsaWUpPT57Y29uc3QgZ2U9bmV3IE1hcDtXLmZvckVhY2god2U9Pntjb25zdCBFZT1s''@;'; put 'put ''LmNvbXB1dGVTdHlsZShpZSx3ZSxoKTtnZS5zZXQod2UsRWUpLCghRWV8fDA9PUVlLmxlbmd0aCkmJihpZVtwMl09d3hlLF8ucHVzaChpZSkpfSksYy5zZXQoaWUsZ2UpfSk7bGV0IFQ9MDtyZXR1cm4gYS5mb3JFYWNoKFc9PkZlZShXLGZbVCsrXSkpLF99ZnVuY3Rpb24gTmVlKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1uZXcgTWFwO2lmKGMuZm9yRWFjaChUPT5hLnNldChULFtdKSksMD09bC5sZW5ndGgpcmV0dXJuIGE7Y29uc3QgaD1uZXcgU2V0KGwpLGY9bmV3IE1hcDtmdW5jdGlvbiBfKFQpe2lmKCFUKXJldHVybiAxO2xldCBXPWYuZ2V0KFQpO2lmKFcpcmV0dXJuIFc7Y29uc3QgaWU9VC5wYXJl''@;'; put 'put ''bnROb2RlO3JldHVybiBXPWEuaGFzKGllKT9pZTpoLmhhcyhpZSk/MTpfKGllKSxmLnNldChULFcpLFd9cmV0dXJuIGwuZm9yRWFjaChUPT57Y29uc3QgVz1fKFQpOzEhPT1XJiZhLmdldChXKS5wdXNoKFQpfSksYX1mdW5jdGlvbiBoZChjLGwpe2MuY2xhc3NMaXN0Py5hZGQobCl9ZnVuY3Rp''@;'; put 'put ''b24gUTgoYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIGt4ZShjLGwsYSl7RnAoYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIFZlZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV07ZCBpbnN0YW5jZW9m''@;'; put 'put ''IFZLP1ZlZShkLnBsYXllcnMsbCk6bC5wdXNoKGQpfX1mdW5jdGlvbiBCZWUoYyxsLGEpe2NvbnN0IGQ9YS5nZXQoYyk7aWYoIWQpcmV0dXJuITE7bGV0IGg9bC5nZXQoYyk7cmV0dXJuIGg/ZC5mb3JFYWNoKGY9PmguYWRkKGYpKTpsLnNldChjLGQpLGEuZGVsZXRlKGMpLCEwfWNsYXNzIGVr''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJDYWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBTeGUobCxhLGQpLHRo''@;'; put 'put ''aXMuX3RpbWVsaW5lRW5naW5lPW5ldyBneGUobCxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxldGU9KGgsZik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoaCxmKX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtjb25zdCBfPWwrIi0iK2g7bGV0IFQ9dGhpcy5f''@;'; put 'put ''dHJpZ2dlckNhY2hlW19dO2lmKCFUKXtjb25zdCBXPVtdLGdlPXpIKHRoaXMuX2RyaXZlcixmLFcsW10pO2lmKFcubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHZNZShjLGwpe3JldHVybiBuZXcgQXIoMzQwNCwhMSl9KCk7VD1mdW5jdGlvbiBkeGUoYyxsLGEpe3JldHVybiBuZXcgaHhlKGMsbCxh''@;'; put 'put ''KX0oaCxnZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbX109VH10aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihhLGgsVCl9cmVnaXN0ZXIobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMu''@;'; put 'put ''X3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuaW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9u''@;'; put 'put ''cyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxoKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLF9dPW1lZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGYsYSxfLGgpfWVsc2UgdGhpcy5fdHJh''@;'; put 'put ''bnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W18sVF09bWVlKGQpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4oXyxhLFQsZil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlz''@;'; put 'put ''dGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygpe3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKX19bGV0IEl4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fc3RhcnRTdHlsZXM9ZCx0aGlzLl9lbmRTdHlsZXM9aCx0aGlzLl9zdGF0ZT0wO2xldCBmPWMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQoYSk7Znx8Yy5pbml0aWFsU3R5bGVzQnlFbGVtZW50LnNldChhLGY9bmV3IE1hcCksdGhpcy5f''@;'; put 'put ''aW5pdGlhbFN0eWxlcz1mfXN0YXJ0KCl7dGhpcy5fc3RhdGU8MSYmKHRoaXMuX3N0YXJ0U3R5bGVzJiZoaCh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzLHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTEpfWZpbmlzaCgpe3RoaXMuc3RhcnQoKSx0aGlzLl9zdGF0ZTwy''@;'; put 'put ''JiYoaGgodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXMmJihoaCh0aGlzLl9lbGVtZW50LHRoaXMuX2VuZFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX3N0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmZpbmlzaCgpLHRoaXMuX3N0YXRl''@;'; put 'put ''PDMmJihjLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoZmcodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKGZnKHRoaXMuX2VsZW1lbnQs''@;'; put 'put ''dGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksaGgodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19cmV0dXJuIGMuaW5pdGlhbFN0eWxlc0J5RWxlbWVudD1uZXcgV2Vha01hcCxjfSkoKTtmdW5jdGlvbiBRSChjKXtsZXQgbD1u''@;'; put 'put ''dWxsO3JldHVybiBjLmZvckVhY2goKGEsZCk9PnsoZnVuY3Rpb24gTHhlKGMpe3JldHVybiJkaXNwbGF5Ij09PWN8fCJwb3NpdGlvbiI9PT1jfSkoZCkmJihsPWx8fG5ldyBNYXAsbC5zZXQoZCxhKSl9KSxsfWNsYXNzIGplZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmVsZW1lbnQ9bCx0''@;'; put 'put ''aGlzLmtleWZyYW1lcz1hLHRoaXMub3B0aW9ucz1kLHRoaXMuX3NwZWNpYWxTdHlsZXM9aCx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRl''@;'; put 'put ''ZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1kLmR1cmF0''@;'; put 'put ''aW9uLHRoaXMuX2RlbGF5PWQuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWlu''@;'; put 'put ''aXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlzLl9pbml0aWFsaXplZD0hMDtjb25zdCBsPXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMu''@;'; put 'put ''X3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGwsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPWwubGVuZ3RoP2xbbC5sZW5ndGgtMV06bmV3IE1hcCx0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLCgpPT50aGlzLl9vbkZpbmlzaCgpKX1f''@;'; put 'put ''cHJlcGFyZVBsYXllckJlZm9yZVN0YXJ0KCl7dGhpcy5fZGVsYXk/dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpOnRoaXMuZG9tUGxheWVyLnBhdXNlKCl9X2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChsKXtjb25zdCBhPVtdO3JldHVybiBsLmZvckVhY2goZD0+e2EucHVzaChPYmplY3Qu''@;'; put 'put ''ZnJvbUVudHJpZXMoZCkpfSksYX1fdHJpZ2dlcldlYkFuaW1hdGlvbihsLGEsZCl7cmV0dXJuIGwuYW5pbWF0ZSh0aGlzLl9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QoYSksZCl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1''@;'; put 'put ''c2gobCl9b25Eb25lKGwpe3RoaXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfXBsYXkoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5f''@;'; put 'put ''b25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSEwLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuc3RhcnQoKSksdGhpcy5kb21QbGF5ZXIucGxheSgpfXBhdXNlKCl7dGhpcy5pbml0KCksdGhpcy5kb21Q''@;'; put 'put ''bGF5ZXIucGF1c2UoKX1maW5pc2goKXt0aGlzLmluaXQoKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmZpbmlzaCgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5kb21QbGF5ZXIuZmluaXNoKCl9cmVzZXQoKXt0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhp''@;'; put 'put ''cy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfV9yZXNldERvbVBsYXllclN0YXRlKCl7dGhpcy5kb21Q''@;'; put 'put ''bGF5ZXImJnRoaXMuZG9tUGxheWVyLmNhbmNlbCgpfXJlc3RhcnQoKXt0aGlzLnJlc2V0KCksdGhpcy5wbGF5KCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fcmVzZXREb21QbGF5''@;'; put 'put ''ZXJTdGF0ZSgpLHRoaXMuX29uRmluaXNoKCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5kZXN0cm95KCksdGhpcy5fb25EZXN0cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXNldFBvc2l0aW9uKGwpe3ZvaWQgMD09PXRoaXMu''@;'; put 'put ''ZG9tUGxheWVyJiZ0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT1sKnRoaXMudGltZX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJh''@;'; put 'put ''dGlvbn1iZWZvcmVEZXN0cm95KCl7Y29uc3QgbD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGQsaCk9Pnsib2Zmc2V0IiE9PWgmJmwuc2V0KGgsdGhpcy5fZmluaXNoZWQ/ZDpFZWUodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVu''@;'; put 'put ''dFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgUnhle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0''@;'; put 'put ''ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJuIF9lZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIFBIKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gYmVlKGwsYSxk''@;'; put 'put ''KX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShsKVthXX1hbmltYXRlKGwsYSxkLGgsZixfPVtdKXtjb25zdCBXPXtkdXJhdGlvbjpkLGRlbGF5OmgsZmlsbDowPT1oPyJib3RoIjoiZm9yd2FyZHMifTtmJiYoVy5lYXNpbmc9Zik7Y29uc3QgaWU9''@;'; put 'put ''bmV3IE1hcCxnZT1fLmZpbHRlcihaZT0+WmUgaW5zdGFuY2VvZiBqZWUpOyhmdW5jdGlvbiBCTWUoYyxsKXtyZXR1cm4gMD09PWN8fDA9PT1sfSkoZCxoKSYmZ2UuZm9yRWFjaChaZT0+e1plLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChvdCxldCk9PmllLnNldChldCxvdCkpfSk7bGV0IHdl''@;'; put 'put ''PWZ1bmN0aW9uIEhNZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+U2VlKGwpKTpbXX0oYSkubWFwKFplPT5IcChaZSkpO3dlPWZ1bmN0aW9uIGpNZShjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9yRWFj''@;'; put 'put ''aCgoZixfKT0+e2QuaGFzKF8pfHxoLnB1c2goXyksZC5zZXQoXyxmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgXz1sW2ZdO2guZm9yRWFjaChUPT5fLnNldChULEVlZShjLFQpKSl9fXJldHVybiBsfShsLHdlLGllKTtjb25zdCBFZT1mdW5jdGlvbiBEeGUo''@;'; put 'put ''YyxsKXtsZXQgYT1udWxsLGQ9bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg/KGE9UUgobFswXSksbC5sZW5ndGg+MSYmKGQ9UUgobFtsLmxlbmd0aC0xXSkpKTpsIGluc3RhbmNlb2YgTWFwJiYoYT1RSChsKSksYXx8ZD9uZXcgSXhlKGMsYSxkKTpudWxsfShsLHdlKTty''@;'; put 'put ''ZXR1cm4gbmV3IGplZShsLHdlLFcsRWUpfX1sZXQgT3hlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBIS3tjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fbmV4dEFuaW1hdGlvbklkPTAsdGhpcy5fcmVuZGVyZXI9YS5jcmVhdGVSZW5kZXJlcihkLmJvZHkse2lkOiIwIixlbmNhcHN1bGF0''@;'; put 'put ''aW9uOk9jLk5vbmUsc3R5bGVzOltdLGRhdGE6e2FuaW1hdGlvbjpbXX19KX1idWlsZChhKXtjb25zdCBkPXRoaXMuX25leHRBbmltYXRpb25JZC50b1N0cmluZygpO3RoaXMuX25leHRBbmltYXRpb25JZCsrO2NvbnN0IGg9QXJyYXkuaXNBcnJheShhKT9OSyhhKTphO3JldHVybiB6ZWUodGhp''@;'; put 'put ''cy5fcmVuZGVyZXIsbnVsbCxkLCJyZWdpc3RlciIsW2hdKSxuZXcgUHhlKGQsdGhpcy5fcmVuZGVyZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihZMyksYXIoTHMpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWN9KSxjfSkoKTtjbGFzcyBQeGUgZXh0ZW5kcyBQbWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuX2lkPWwsdGhpcy5fcmVuZGVyZXI9YX1jcmVhdGUobCxhKXtyZXR1cm4gbmV3IEZ4ZSh0aGlzLl9pZCxsLGF8fHt9LHRoaXMuX3JlbmRlcmVyKX19Y2xhc3MgRnhle2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSxkLGgpe3RoaXMuaWQ9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLl9yZW5kZXJlcj1oLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLnRvdGFsVGltZT0wLHRoaXMuX2NvbW1hbmQoImNyZWF0ZSIsZCl9X2xpc3RlbihsLGEpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LGBAQCR7dGhpcy5pZH06JHtsfWAsYSl9X2NvbW1hbmQobCwuLi5hKXtyZXR1cm4gemVlKHRoaXMuX3JlbmRlcmVyLHRoaXMuZWxlbWVudCx0aGlzLmlkLGwsYSl9b25Eb25lKGwpe3RoaXMuX2xpc3RlbigiZG9uZSIsbCl9b25TdGFydChs''@;'; put 'put ''KXt0aGlzLl9saXN0ZW4oInN0YXJ0IixsKX1vbkRlc3Ryb3kobCl7dGhpcy5fbGlzdGVuKCJkZXN0cm95IixsKX1pbml0KCl7dGhpcy5fY29tbWFuZCgiaW5pdCIpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5fY29tbWFuZCgicGxheSIpLHRoaXMuX3N0''@;'; put 'put ''YXJ0ZWQ9ITB9cGF1c2UoKXt0aGlzLl9jb21tYW5kKCJwYXVzZSIpfXJlc3RhcnQoKXt0aGlzLl9jb21tYW5kKCJyZXN0YXJ0Iil9ZmluaXNoKCl7dGhpcy5fY29tbWFuZCgiZmluaXNoIil9ZGVzdHJveSgpe3RoaXMuX2NvbW1hbmQoImRlc3Ryb3kiKX1yZXNldCgpe3RoaXMuX2NvbW1hbmQo''@;'; put 'put ''InJlc2V0IiksdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXt0aGlzLl9jb21tYW5kKCJzZXRQb3NpdGlvbiIsbCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyZXIuZW5naW5lLnBsYXllcnNbK3RoaXMuaWRdPy5nZXRQb3NpdGlvbigpPz8wfX1mdW5jdGlvbiB6ZWUo''@;'; put 'put ''YyxsLGEsZCxoKXtyZXR1cm4gYy5zZXRQcm9wZXJ0eShsLGBAQCR7YX06JHtkfWAsaCl9Y29uc3QgVWVlPSJALmRpc2FibGVkIjtsZXQgSHhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX3pvbmU9aCx0aGlzLl9j''@;'; put 'put ''dXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsZC5vblJlbW92YWxDb21wbGV0ZT0oZixfKT0+e2NvbnN0IFQ9Xz8ucGFyZW50Tm9kZShm''@;'; put 'put ''KTtUJiZfLnJlbW92ZUNoaWxkKFQsZil9fWNyZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgZj10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGEsZCk7aWYoIShhJiZkJiZkLmRhdGEmJmQuZGF0YS5hbmltYXRpb24pKXtsZXQgZ2U9dGhpcy5fcmVuZGVyZXJDYWNoZS5nZXQoZik7cmV0dXJu''@;'; put 'put ''IGdlfHwoZ2U9bmV3IFplZSgiIixmLHRoaXMuZW5naW5lLCgpPT50aGlzLl9yZW5kZXJlckNhY2hlLmRlbGV0ZShmKSksdGhpcy5fcmVuZGVyZXJDYWNoZS5zZXQoZixnZSkpLGdlfWNvbnN0IF89ZC5pZCxUPWQuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlz''@;'; put 'put ''LmVuZ2luZS5yZWdpc3RlcihULGEpO2NvbnN0IFc9Z2U9PntBcnJheS5pc0FycmF5KGdlKT9nZS5mb3JFYWNoKFcpOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihfLFQsYSxnZS5uYW1lLGdlKX07cmV0dXJuIGQuZGF0YS5hbmltYXRpb24uZm9yRWFjaChXKSxuZXcgTnhlKHRoaXMsVCxm''@;'; put 'put ''LHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVy''@;'; put 'put ''Q2FsbGJhY2soYSxkLGgpe2E+PTAmJmE8dGhpcy5fbWljcm90YXNrSWQ/dGhpcy5fem9uZS5ydW4oKCk9PmQoaCkpOigwPT10aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIubGVuZ3RoJiZxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57dGhpcy5fYW5pbWF0aW9u''@;'; put 'put ''Q2FsbGJhY2tzQnVmZmVyLmZvckVhY2goZj0+e2NvbnN0W18sVF09ZjtfKFQpfSksdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdfSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXIucHVzaChbZCxoXSkpfWVuZCgpe3RoaXMuX2NkUmVjdXJEZXB0aC0tLDA9PXRoaXMu''@;'; put 'put ''X2NkUmVjdXJEZXB0aCYmdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3NjaGVkdWxlQ291bnRUYXNrKCksdGhpcy5lbmdpbmUuZmx1c2godGhpcy5fbWljcm90YXNrSWQpfSksdGhpcy5kZWxlZ2F0ZS5lbmQmJnRoaXMuZGVsZWdhdGUuZW5kKCl9d2hlblJlbmRlcmlu''@;'; put 'put ''Z0RvbmUoKXtyZXR1cm4gdGhpcy5lbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoWTMpLGFyKGVrKSxhcihObykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p''@;'; put 'put ''LGN9KSgpO2NsYXNzIFplZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fb25EZXN0cm95PWh9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5kYXRhfWRlc3Ryb3lOb2RlKGwpe3RoaXMuZGVs''@;'; put 'put ''ZWdhdGUuZGVzdHJveU5vZGU/LihsKX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5kZWxlZ2F0ZS5kZXN0''@;'; put 'put ''cm95KCl9KX0pLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobCxhKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGwpfWFwcGVuZENoaWxkKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChsLGEpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLCExKX1pbnNlcnRCZWZvcmUobCxhLGQsaD0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNl''@;'; put 'put ''cnRCZWZvcmUobCxhLGQpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLGgpfXJlbW92ZUNoaWxkKGwsYSxkKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGEsdGhpcy5kZWxlZ2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudChsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShsKX1uZXh0U2libGluZyhsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2libGluZyhsKX1zZXRBdHRyaWJ1dGUobCxhLGQsaCl7dGhpcy5k''@;'; put 'put ''ZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUobCxhLGQsaCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShsLGEsZCl9YWRkQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGwsYSl9cmVtb3ZlQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLnJl''@;'; put 'put ''bW92ZUNsYXNzKGwsYSl9c2V0U3R5bGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShsLGEsZCxoKX1yZW1vdmVTdHlsZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShsLGEsZCl9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5jaGFyQXQoMCkmJmE9PVVlZT90aGlz''@;'; put 'put ''LmRpc2FibGVBbmltYXRpb25zKGwsISFkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1zZXRWYWx1ZShsLGEpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUobCxhKX1saXN0ZW4obCxhLGQpe3JldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9ZGlzYWJsZUFuaW1hdGlv''@;'; put 'put ''bnMobCxhKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyhsLGEpfX1jbGFzcyBOeGUgZXh0ZW5kcyBaZWV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihhLGQsaCxmKSx0aGlzLmZhY3Rvcnk9bCx0aGlzLm5hbWVzcGFjZUlkPWF9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5j''@;'; put 'put ''aGFyQXQoMCk/Ii4iPT1hLmNoYXJBdCgxKSYmYT09VWVlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCxkPXZvaWQgMD09PWR8fCEhZCk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGwsYS5zbGljZSgxKSxkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1s''@;'; put 'put ''aXN0ZW4obCxhLGQpe2lmKCJAIj09YS5jaGFyQXQoMCkpe2NvbnN0IGg9ZnVuY3Rpb24gVnhlKGMpe3N3aXRjaChjKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVudDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0''@;'; put 'put ''OnJldHVybiBjfX0obCk7bGV0IGY9YS5zbGljZSgxKSxfPSIiO3JldHVybiJAIiE9Zi5jaGFyQXQoMCkmJihbZixfXT1mdW5jdGlvbiBCeGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIi4iKTtyZXR1cm5bYy5zdWJzdHJpbmcoMCxsKSxjLnNsaWNlKGwrMSldfShmKSksdGhpcy5lbmdpbmUubGlz''@;'; put 'put ''dGVuKHRoaXMubmFtZXNwYWNlSWQsaCxmLF8sVD0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soVC5fZGF0YXx8LTEsZCxUKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9fWxldCBqeGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGVre2NvbnN0cnVj''@;'; put 'put ''dG9yKGEsZCxoLGYpe3N1cGVyKGEuYm9keSxkLGgpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoRkgpLGFyKEdIKSxhcih4NSkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFj''@;'; put 'put ''dG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IFllZT1be3Byb3ZpZGU6SEssdXNlQ2xhc3M6T3hlfSx7cHJvdmlkZTpHSCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHp4ZSgpe3JldHVybiBuZXcgYXhlfX0se3Byb3ZpZGU6ZWssdXNlQ2xhc3M6anhlfSx7cHJvdmlkZTpZMyx1c2VGYWN0b3J5''@;'; put 'put ''OmZ1bmN0aW9uIFV4ZShjLGwsYSl7cmV0dXJuIG5ldyBIeGUoYyxsLGEpfSxkZXBzOltJTyxlayxOb119XSxlTj1be3Byb3ZpZGU6RkgsdXNlRmFjdG9yeTooKT0+bmV3IFJ4ZX0se3Byb3ZpZGU6dFMsdXNlVmFsdWU6IkJyb3dzZXJBbmltYXRpb25zIn0sLi4uWWVlXSxXZWU9W3twcm92aWRl''@;'; put 'put ''OkZILHVzZUNsYXNzOnllZX0se3Byb3ZpZGU6dFMsdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uWWVlXTtsZXQgWnhlPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOmEuZGlzYWJsZUFuaW1hdGlvbnM/V2VlOmVOfX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOmVOLGltcG9ydHM6W0VHXX0pLGN9KSgpLFl4ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0''@;'; put 'put ''KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW5vdC1mb3VuZCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjAsY29uc3RzOltb''@;'; put 'put ''MSwiY29udGVudC1hcmVhIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJwIiksTmUoMiwiNDA0IC0gTm90IEZvdW5kIikseWUoKSgpKX19KSxjfSkoKSxHZWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4''@;'; put 'put ''dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlwZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCBfPWRvY3VtZW50LmNyZWF0''@;'; put 'put ''ZUVsZW1lbnQoImEiKTtfLmhyZWY9ImRhdGE6dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChhKSxfLmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXyksXy5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoXyl9fXJlYWRGaWxlKGEp''@;'; put 'put ''e3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9uIFd4ZShjLGwpezEmYyYmKEJyKDApLG1lKDEsInNwYW4iLDE5''@;'; put 'put ''KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsInAiKSxOZSg0LCJEZXBsb3lpbmcuLi4iKSx5ZSgpLFVyKCkpfWZ1bmN0aW9uIEd4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiAkeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24g''@;'; put 'put ''cXhlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIEt4ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBYeGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIyKSxRZSgxLHF4ZSwxLDAsImNsci1pY29uIiwyMyksUWUoMixLeGUsMSwwLCJjbHIt''@;'; put 'put ''aWNvbiIsMjQpLG1lKDMsInAiKSxOZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSxDZSgxKSxSZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFr''@;'; put 'put ''ZURhdGEpfX1mdW5jdGlvbiBKeGUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gUXhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwicCIsMjApLE5lKDIsIkRvbmUiKSx5ZSgpLHF0KDMsImhyIiwyMSksbWUoNCwiZGl2IiwyMiksUWUoNSxHeGUs''@;'; put 'put ''MSwwLCJjbHItaWNvbiIsMjMpLFFlKDYsJHhlLDEsMCwiY2xyLWljb24iLDI0KSxtZSg3LCJwIiksTmUoOCwiRGVwbG95IFNBUyBKb2JzIikseWUoKSgpLFFlKDksWHhlLDUsMiwiZGl2IiwyNSkscXQoMTAsImhyIiwyMSksbWUoMTEsImRpdiIsMjYpKDEyLCJidXR0b24iLDI3KSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksUWUoMTMsSnhlLDEsMCwiY2xyLWljb24iLDI0KSxOZSgxNCwiIExBVU5DSCAvIENPTkZJR1VSRSAiKSx5ZSgpLG1lKDE1LCJidXR0b24iLDI4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQo''@;'; put 'put ''YSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTmUoMTYsIiBEb3dubG9hZCBsb2cgIikseWUoKSgpLHF0KDE3LCJociIsMjEpLG1lKDE4LCJkaXYiLDI2KSgxOSwiYnV0dG9u''@;'; put 'put ''IiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguYXV0b2RlcGxveWluZz0hMSxqdChoLmF1dG9kZXBsb3lEb25lPSExKX0pLE5lKDIwLCIgQ2xvc2UgIikseWUoKSxtZSgyMSwiYnV0dG9uIiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBCdChhKSxqdChWZSgyKS5vcGVuU2FzUmVxdWVzdHNNb2RhbCgpKX0pLE5lKDIyLCIgU0FTIFJlcXVlc3RzICIpLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1KSxSZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxDZSgxKSxS''@;'; put 'put ''ZSgibmdJZiIsIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksQ2UoMyksUmUoIm5nSWYiLG51bGwhPT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLENlKDQpLFJlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9''@;'; put 'put ''PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBlRWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE2KSgxLCJkaXYiLDE3KSxRZSgyLFd4ZSw1LDAsIm5nLWNvbnRhaW5lciIsMTgpLFFlKDMsUXhlLDIzLDQsIm5nLWNvbnRhaW5lciIsMTgpLHllKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLCFhLmF1dG9kZXBsb3lEb25lKSxDZSgxKSxSZSgibmdJZiIsYS5hdXRvZGVwbG95RG9uZSl9fWxldCB0RWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuZGVwbG95U2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIs''@;'; put 'put ''dGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmF1dG9kZXBsb3lpbmc9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9''@;'; put 'put ''ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxsfX1uZ09uSW5pdCgpe31leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJu''@;'; put 'put ''IGZpKGZ1bmN0aW9uKigpe2EuYXV0b2RlcGxveWluZz0hMCxhLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2Msdm9pZCAwLHZvaWQgMCwhMCksYS5hdXRvRGVwbG95U3Rh''@;'; put 'put ''dHVzLmRlcGxveVNlcnZpY2VQYWNrPSEwLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBoPSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2UsYS5hdXRvRGVwbG95U3RhdHVz''@;'; put 'put ''LmRlcGxveVNlcnZpY2VQYWNrPSExLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApLGEuYXV0b2RlcGxveWluZz0hMSx2b2lkKGEuYXV0b2RlcGxveURvbmU9ITEpfWEuaXNTdWJtaXR0aW5nSnNvbj0hMSxh''@;'; put 'put ''LnJlY3JlYXRlRGF0YWJhc2U/YS5jcmVhdGVEYXRhYmFzZSgpOmEuYXV0b2RlcGxveURvbmU9ITB9KSgpfWNyZWF0ZURhdGFiYXNlKCl7dGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21qczpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERD''@;'; put 'put ''UEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oaD0+e3RoaXMuYXV0b2RlcGxveURvbmU9ITA7''@;'; put 'put ''dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShoKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9aH10aGlzLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGE9ISEoaC5yZXN1bHQmJmgucmVzdWx0Lmxlbmd0aD4wKX0pLmNhdGNoKGg9Pnt0aGlzLmF1dG9EZXBs''@;'; put 'put ''b3lTdGF0dXMucnVuTWFrZURhdGE9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofX0pfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2''@;'; put 'put ''aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9cmVjcmVhdGVEYXRhYmFz''@;'; put 'put ''ZUNsaWNrZWQoYSl7ITA9PT1hLnRhcmdldC5jaGVja2VkJiYodGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITApfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b3BlblNhc1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2Vydmlj''@;'; put 'put ''ZS5vcGVuUmVxdWVzdHNNb2RhbCgpfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVtaXQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmwpLHR0KEdlZSksdHQob2EpLHR0KHcwKSl9LGMuXHUwMjc1Y21wPXdyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hdXRvbWF0aWMtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyIsYXBwTG9jOiJhcHBMb2MiLGRjUGF0aDoiZGNQYXRoIixzZWxl''@;'; put 'put ''Y3RlZEFkbWluR3JvdXA6InNlbGVjdGVkQWRtaW5Hcm91cCJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0Nix2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUi''@;'; put 'put ''XSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIs''@;'; put 'put ''IiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjbGljayJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5''@;'; put 'put ''IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjbGljayIsImNoYW5nZSJdLFsidXBsb2FkSnNvbkF1dG8iLCIiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJd''@;'; put 'put ''LFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsImF1dG8tZGVwbG95Il0sWzEsInNwaW5uZXItYm94Il0sWzQsIm5nSWYiXSxbMSwi''@;'; put 'put ''c3Bpbm5lciIsInNwaW5uZXItbWQiXSxbMSwibS0wIiwiYWxpZ24tc2VsZi1zdGFydCJdLFsxLCJ3LTEwMCJdLFsxLCJkZXBsb3ktc3RhdHVzLXJvdyJdLFsiY2xhc3MiLCJkZXBsb3ktc3VjY2VzcyIsInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkZXBs''@;'; put 'put ''b3ktZXJyb3IiLCJzaGFwZSIsInRpbWVzLWNpcmNsZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkZXBsb3ktc3RhdHVzLXJvdyIsNCwibmdJZiJdLFsxLCJidXR0b25zIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTUiLCJtci0wIiwiYWxpZ24tc2VsZi1lbmQiLDMsImNsaWNrIl0sWyJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDEsImRlcGxveS1zdWNjZXNzIl0sWyJzaGFw''@;'; put 'put ''ZSIsInRpbWVzLWNpcmNsZSIsMSwiZGVwbG95LWVycm9yIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7UWUoMCxlRWUsNCwyLCJkaXYiLDApLG1lKDEsImg0IiwxKSxOZSgyLCJWaXlhIERlcGxveSIpLHllKCkscXQoMywiaHIiKSxtZSg0LCJsYWJlbCIs''@;'; put 'put ''MiksTmUoNSwiQXBwIExvYyIpLHllKCksbWUoNiwiZGl2IiwzKSg3LCJkaXYiLDQpKDgsInAiLDUpLE5lKDkpLHllKCkoKSgpLG1lKDEwLCJsYWJlbCIsMiksTmUoMTEsIkRDIExvYyIpLHllKCksbWUoMTIsImRpdiIsMykoMTMsImRpdiIsNCkoMTQsInAiLDUpLE5lKDE1KSx5ZSgpKCkoKSxt''@;'; put 'put ''ZSgxNiwibGFiZWwiLDIpLE5lKDE3LCJTQVMgQWRtaW4gZ3JvdXAiKSx5ZSgpLG1lKDE4LCJkaXYiLDMpKDE5LCJkaXYiLDQpKDIwLCJwIiw1KSxOZSgyMSkseWUoKSgpKCksbWUoMjIsImNsci1jaGVja2JveC13cmFwcGVyIikoMjMsImlucHV0Iiw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oXyl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZT1ffSkoImNsaWNrIixmdW5jdGlvbihfKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChfKX0pLHllKCksbWUoMjQsImxhYmVsIiksTmUoMjUsIlJlY3JlYXRlIGRhdGFiYXNlIikseWUoKSgpLHF0KDI2LCJociIpLG1l''@;'; put 'put ''KDI3LCJidXR0b24iLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5leGVjdXRlSnNvbigpfSksTmUoMjgpLHllKCksbWUoMjksImJ1dHRvbiIsOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChoKSxqdCgkaSgzMikuY2xpY2soKSl9KSxOZSgzMCwiIFVwbG9hZCBk''@;'; put 'put ''aWZmZXJlbnQgZmlsZSB0byBkZXBsb3lcbiIpLHllKCksbWUoMzEsImlucHV0Iiw5LDEwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKF8pe3JldHVybiBkLmNsZWFyVXBsb2FkSW5wdXQoXyl9KSgiY2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5vbkpzb25GaWxlQ2hhbmdlKF8pfSkseWUoKSxt''@;'; put 'put ''ZSgzMywiY2xyLW1vZGFsIiwxMSkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsPV99KSxtZSgzNCwiaDMiLDEyKSxOZSgzNSwiV2FybmluZyIpLHllKCksbWUoMzYsImRpdiIsMTMpLE5lKDM3LCIgVGhpcyBhY3Rpb24g''@;'; put 'put ''d2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZvciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksbWUoMzgsInN0''@;'; put 'put ''cm9uZyIpLE5lKDM5KSx5ZSgpLE5lKDQwLCIuICIpLHllKCksbWUoNDEsImRpdiIsMTQpKDQyLCJidXR0b24iLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLGQucmVjcmVhdGVEYXRhYmFzZT0hMX0pLE5lKDQzLCIgQ2FuY2VsICIp''@;'; put 'put ''LHllKCksbWUoNDQsImJ1dHRvbiIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsZC5yZWNyZWF0ZURhdGFiYXNlPSEwfSksTmUoNDUsIiBPayAiKSx5ZSgpKCkoKX0yJmEmJihSZSgibmdJZiIsZC5hdXRvZGVwbG95aW5nKSxDZSg5''@;'; put 'put ''KSxvcihkLmFwcExvYyksQ2UoNiksb3IoZC5kY1BhdGgpLENlKDYpLG9yKGQuc2VsZWN0ZWRBZG1pbkdyb3VwKSxDZSgyKSxSZSgibmdNb2RlbCIsZC5yZWNyZWF0ZURhdGFiYXNlKSxDZSg0KSxSZSgiZGlzYWJsZWQiLCFkLmpzb25GaWxlKSxDZSgxKSxncigiIERlcGxveSAiLGQuanNvbkZp''@;'; put 'put ''bGU/IiI6Iihqc29uIGZpbGUgaXMgbm90IGF2YWlsYWJsZSkiLCJcbiIpLENlKDUpLFJlKCJjbHJNb2RhbE9wZW4iLGQucmVjcmVhdGVEYXRhYmFzZU1vZGFsKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDYpLG9yKGQuZGNQYXRoKSl9LGRlcGVuZGVuY2llczpbWmksUzAsQnMsT3Msa2Es''@;'; put 'put ''b3Usc3UsVXMsRDAsVDBdLHN0eWxlczpbIi5hdXRvLWRlcGxveVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC40KTt6LWlu''@;'; put 'put ''ZGV4OjEwMH0uc3Bpbm5lci1ib3hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3BhZGRpbmc6MjBweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiNmZmY7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0''@;'; put 'put ''aW9uOmNvbHVtbjtib3gtc2hhZG93OjFweCAxcHggOHB4ICMwMDAwMDA4Mn0uc3Bpbm5lci1ib3hbX25nY29udGVudC0lQ09NUCVdICAgLmJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt3aWR0aDoxMDAlfS5kZXBs''@;'; put 'put ''b3ktc3RhdHVzLXJvd1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4''@;'; put 'put ''fS5kZXBsb3ktc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzZlY2Y0NH0uZGVwbG95LWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTc0YzNjfS5kZXBsb3ktdW5kZXRlcm1pbmF0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNjYWNhY2F9aHJbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVde2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjI3MDU4ODIzNTMpfSJdfSksY30pKCk7ZnVuY3Rpb24gbkVlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw2KSgxLCJwIiw3KSxOZSgyLCJQbGVhc2UgbG9nIGluIGZpcnN0IikseWUoKSxtZSgzLCJs''@;'; put 'put ''YWJlbCIsOCksTmUoNCwiVXNlcm5hbWUiKSx5ZSgpLG1lKDUsImRpdiIsOSkoNiwiZGl2IiwxMCkscXQoNywiaW5wdXQiLDExKSx5ZSgpKCksbWUoOCwibGFiZWwiLDEyKSxOZSg5LCJQYXNzd29yZCIpLHllKCksbWUoMTAsImRpdiIsOSkoMTEsImRpdiIsMTApLHF0KDEyLCJpbnB1dCIsMTMp''@;'; put 'put ''LHllKCkoKSxtZSgxMywiYnV0dG9uIiwxNCksTmUoMTQsIkxvZyBpbiIpLHllKCkoKSl9ZnVuY3Rpb24gckVlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwzNiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5pZCksQ2UoMSksZ3IoIiAiLGEu''@;'; put 'put ''bmFtZSwiICIpfX1mdW5jdGlvbiBpRWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLGdyKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24gb0VlKGMsbCl7aWYoMSZjJiYobWUo''@;'; put 'put ''MCwib3B0aW9uIiwzNiksTmUoMSksUWUoMixpRWUsMiwxLCJzcGFuIiw1KSxiYSgzLCJqc29uIikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5uYW1lKSxDZSgxKSxncigiICIsYS5uYW1lLCIgIiksQ2UoMSksUmUoIm5nSWYiLCJ7fSIhPVVsKDMsMyxhLmF0''@;'; put 'put ''dHJpYnV0ZXMpKX19ZnVuY3Rpb24gc0VlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIpLE5lKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLHllKCkpfWZ1bmN0aW9uIGFFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMzcpLHh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLHF0KDEsImNsci1pY29uIiwzOCkseWUoKX19ZnVuY3Rpb24gbEVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwicCIsMzkpLE5lKDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0''@;'; put 'put ''ZWQiKSx5ZSgpLHF0KDMsImhyIiksbWUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGp0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxOZSg2LCIgRG93''@;'; put 'put ''bmxvYWQgbG9nICIpLHllKCkoKSxVcigpfX1mdW5jdGlvbiBjRWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDQ0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiB1RWUoYyxsKXsxJmMmJihCcigw''@;'; put 'put ''KSxtZSgxLCJzcGFuIiwyNSksTmUoMiwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLHllKCksbWUoMywic3BhbiIpLE5lKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSx5ZSgpLFVyKCkpfWZ1bmN0aW9uIGRFZShjLGwpezEmYyYmKEJyKDApLHF0KDEsImNsci1pY29uIiw0NiksbWUoMiwi''@;'; put 'put ''c3BhbiIpLE5lKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSx5ZSgpLFVyKCkpfWZ1bmN0aW9uIGhFZShjLGwpezEmYyYmKEJyKDApLHF0KDEsImNsci1pY29uIiw0NyksbWUoMiwic3BhbiIpLE5lKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSx5ZSgpLFVyKCkpfWZ1bmN0aW9uIGZFZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDUpLFFlKDEsdUVlLDUsMCwibmctY29udGFpbmVyIiw1KSxRZSgyLGRFZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksUWUoMyxoRWUsNCwwLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5p''@;'; put 'put ''c1ZhbGlkYXRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksQ2UoMSksUmUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBwRWUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJwIiwzOSksTmUoMiwiQ3JlYXRlIERhdGFiYXNlIENvbXBsZXRlZCIpLHllKCkscXQoMywiaHIiKSxRZSg0LGNFZSwyLDEsImRpdiIsNDEpLG1lKDUsImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUo''@;'; put 'put ''MikubmF2aWdhdGVUb0hvbWUoKSl9KSxOZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0ZWQgIikseWUoKSxtZSg3LCJidXR0b24iLDQyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4ganQoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVh''@;'; put 'put ''dGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTmUoOCwiIERvd25sb2FkIGxvZyAiKSx5ZSgpLG1lKDksImJ1dHRvbiIsNDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikudmFsaWRhdGVEZXBsb3koKSl9KSxOZSgxMCwiIFZhbGlkYXRlICIpLHllKCksUWUo''@;'; put 'put ''MTEsZkVlLDQsMywiZGl2Iiw0MyksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoNCksUmUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksQ2UoNyksUmUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWNvbnN0IHROPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtmdW5jdGlvbiBnRWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJmb3JtIikoMiwiZGl2IiwxNSkoMywibGFiZWwiLDE2KSxOZSg0LCJBZG1pbiBncm91cCIpLHllKCksbWUoNSwiZGl2IiwxNykoNiwiZGl2Iiwx''@;'; put 'put ''OCkoNywic2VsZWN0IiwxOSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnNlbGVjdGVkQWRtaW5Hcm91cD1oKX0pLFFlKDgsckVlLDIsMiwib3B0aW9uIiwyMCkseWUoKSgpKCkoKSxtZSg5LCJkaXYiLDE1KSgxMCwiZGl2IikoMTEsImxhYmVs''@;'; put 'put ''IiwxNiksTmUoMTIsIkNvbnRleHQiKSx5ZSgpLG1lKDEzLCJkaXYiLDE3KSgxNCwiZGl2IiwxOCkoMTUsInNlbGVjdCIsMjEpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zZWxlY3RlZENvbnRleHQ9aCl9KSxRZSgxNixvRWUsNCw1LCJvcHRp''@;'; put 'put ''b24iLDIwKSx5ZSgpKCkoKSxtZSgxNywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4ZWN1dGFibGVDb250ZXh0KCkpfSkscXQoMTgsImNsci1pY29uIiwyMykseWUoKSgpLG1lKDE5LCJkaXYiLDI0KSgyMCwic3BhbiIsMjUpLE5lKDIx''@;'; put 'put ''LCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSx5ZSgpLG1lKDIyLCJzcGFuIiksTmUoMjMsIiBMb2FkaW5nIGNvbnRleHRzLi4uICIpLHllKCkoKSxtZSgyNCwibGFiZWwiLDI2KSxOZSgyNSwiREMgTG9jIikseWUoKSxtZSgyNiwiZGl2Iiw5KSgyNywiZGl2IiwxMCkoMjgsImlucHV0IiwyNyks''@;'; put 'put ''eHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmRjUGF0aD1oKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5zYXZlRGNQYXRoKCkpfSkseWUoKSgpKCksbWUoMjksInAiLDI4KSxOZSgzMCwiIFNlbGVjdCBKU09O''@;'; put 'put ''IGZpbGUgdG8gdXBsb2FkIChqc29uIGJ1aWxkIGZpbGUgcHJlbG9hZGVkKTogIikseWUoKSxtZSgzMSwiZGl2IiwyOSkoMzIsImlucHV0IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uSnNvbkZpbGVDaGFuZ2UoaCkpfSkseWUoKSgpLG1lKDMzLCJkaXYiLDMxKSgzNCwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmV4ZWN1dGVKc29uKCkpfSksTmUoMzUsIiBTVUJNSVQg''@;'; put 'put ''SlNPTiAiKSx5ZSgpLFFlKDM2LHNFZSwyLDAsInNwYW4iLDUpLHllKCksbWUoMzcsInAiLDI4KSxOZSgzOCwiU2VsZWN0IFNBUyBmaWxlIHRvIHVwbG9hZDoiKSx5ZSgpLG1lKDM5LCJkaXYiLDI5KSg0MCwiaW5wdXQiLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxq''@;'; put 'put ''dChWZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpO3JldHVybiBmLm9uU2FzRmlsZUNoYW5nZShoKSxqdChmLmRvd25sb2FkRmlsZUJ0bj0hMCl9KSx5ZSgpLFFlKDQxLGFFZSwyLDAsImJ1dHRvbiIsMzMpLHllKCksbWUo''@;'; put 'put ''NDIsImRpdiIsMzEpKDQzLCJidXR0b24iLDM0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZXhlY3V0ZVNBUygpKX0pLE5lKDQ0LCIgU1VCTUlUICIpLHllKCkoKSgpLFFlKDQ1LGxFZSw3LDAsIm5nLWNvbnRhaW5lciIsNSksbWUoNDYsImJ1dHRvbiIsMzUp''@;'; put 'put ''LHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5jcmVhdGVEYXRhYmFzZSgpKX0pLE5lKDQ3LCIgQ3JlYXRlIERhdGFiYXNlICIpLHllKCksUWUoNDgscEVlLDEyLDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDcp''@;'; put 'put ''LFJlKCJuZ01vZGVsIixhLnNlbGVjdGVkQWRtaW5Hcm91cCkoIm5nTW9kZWxPcHRpb25zIiwkcygxOSx0TikpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxDZSgyKSxkcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksQ2UoNSksUmUoIm5nTW9kZWwiLGEuc2VsZWN0ZWRD''@;'; put 'put ''b250ZXh0KSgibmdNb2RlbE9wdGlvbnMiLCRzKDIwLHROKSksQ2UoMSksUmUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLENlKDMpLGRyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksQ2UoOSksUmUoIm5nTW9kZWwiLGEuZGNQYXRoKSgibmdNb2RlbE9wdGlvbnMiLCRzKDIxLHROKSks''@;'; put 'put ''Q2UoNiksUmUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksQ2UoMiksUmUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxDZSg1KSxSZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLENlKDIpLFJlKCJjbHJMb2FkaW5nIixhLmV4ZWN1dGluZ1NjcmlwdCksQ2UoMiksUmUoIm5n''@;'; put 'put ''SWYiLGEuam9iTG9nLmxlbmd0aD4wKSxDZSgxKSxSZSgiY2xyTG9hZGluZyIsYS5jcmVhdGVEYXRhYmFzZUxvYWRpbmcpLENlKDIpLFJlKCJuZ0lmIixhLm1ha2VEYXRhUmVzcG9uc2UubGVuZ3RoPjApfX1sZXQgbUVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLmRlcGxveVNlcnZpY2U9Zix0aGlzLnNhc0pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IEVyLHRoaXMubmVlZHNMb2dpbj0hMSx0aGlzLmFk''@;'; put 'put ''bWluR3JvdXBzPVtdLHRoaXMuYWxsQ29udGV4dHM9W10sdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5zZWxlY3RlZENvbnRleHQ9IiIsdGhpcy5qb2JMb2c9IiIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMubGluZXNP''@;'; put 'put ''ZkNvZGU9W10sdGhpcy5maWxlTmFtZT0iIix0aGlzLnByZWxvYWRlZEZpbGU9ITAsdGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMSx0aGlzLmNvbnRleHRzTG9hZGluZz0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmV4ZWN1dGluZ1NjcmlwdD0hMSx0aGlzLmRvd25sb2Fk''@;'; put 'put ''RmlsZUJ0bj0hMSx0aGlzLmlzVmFsaWRhdGluZz0hMSx0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJub25lIn1uZ09uSW5pdCgpe31leGVjdXRhYmxlQ29udGV4dCgpe3JldHVy''@;'; put 'put ''biBmaShmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5kZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFt''@;'; put 'put ''ZTtsZXQgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gucmVzdWx0JiYodGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0Vu''@;'; put 'put ''YWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVhZEFzVGV4dChkKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRG''@;'; put 'put ''aWxlKGgpfSkoKX1hZGRQcmVjb2RlTGluZXMoKXt0aGlzLmxpbmVzT2ZDb2RlLnVuc2hpZnQoYCVsZXQgY29udGV4dD0ke3RoaXMuc2VsZWN0ZWRDb250ZXh0fTtgLGAlbGV0IGFwcExvYz0ke3RoaXMuYXBwTG9jfTtgLGAlbGV0IGFkbWluPSR7dGhpcy5zZWxlY3RlZEFkbWluR3JvdXB9O2As''@;'; put 'put ''YCVsZXQgZGNwYXRoPSR7dGhpcy5kY1BhdGh9O2ApfWRvd25sb2FkU2FzUHJlY29kZUZpbGUoKXtsZXQgYT10aGlzLmxpbmVzT2ZDb2RlLmpvaW4oIlxuIiksZD10aGlzLmZpbGVOYW1lLnNwbGl0KCIuIilbMF07dGhpcy5kb3dubG9hZEZpbGUoYSxkLCJzYXMiKX1kb3dubG9hZEZpbGUoYSxk''@;'; put 'put ''LGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxkLGgpfXNhdmVEY1BhdGgoKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiZGVwbG95X2RjX2xvYyIsdGhpcy5kY1BhdGgpfWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5pc1N1''@;'; put 'put ''Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIix2b2lkIDAsdm9pZCAwLCEwKSxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLHZvaWQgYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCl9YS5pc1N1Ym1pdHRpbmdK''@;'; put 'put ''c29uPSExfSkoKX1leGVjdXRlU0FTKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmls''@;'; put 'put ''ZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVjdGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQo''@;'; put 'put ''IkVycm9yISIpOmEuam9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0ZW1zLm1hcChoPT5oLmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7''@;'; put 'put ''aWYoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVyVXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3Vw''@;'; put 'put ''KyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3BlbihmLCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNl''@;'; put 'put ''bGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVBcGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0cnl7''@;'; put 'put ''dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9u''@;'; put 'put ''c2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1''@;'; put 'put ''YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEs''@;'; put 'put ''dGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQodmwpLHR0KHcwKSx0dChHZWUpKX0s''@;'; put 'put ''Yy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRv''@;'; put 'put ''SG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEsImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFyLW1lbW9y''@;'; put 'put ''eS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQtbm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJmb3IiLCJ1''@;'; put 'put ''c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwiY2xyLWNv''@;'; put 'put ''bnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEsImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEsImNsci1j''@;'; put 'put ''b250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMi''@;'; put 'put ''LCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbIm5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyIsIm5nTW9kZWxDaGFuZ2UiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsImNvbnRl''@;'; put 'put ''eHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFtZSIsImRj''@;'; put 'put ''UGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJuZ01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwzLCJjbGlj''@;'; put 'put ''ayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1pbi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImlk''@;'; put 'put ''IiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMsImNsaWNr''@;'; put 'put ''Il0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xpY2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywiY2xpY2si''@;'; put 'put ''XSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBwZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3MiXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLE5lKDEsIiBDb25maWd1cmF0b3IgIiksbWUoMiwicCIsMSksTmUoMykseWUoKSxtZSg0LCJidXR0b24iLDIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kZWxldGVLZXlzKCl9KSxOZSg1LCIgQ2xlYXIgbWVt''@;'; put 'put ''b3J5ICIpLHllKCkoKSxtZSg2LCJkaXYiLDMpLFFlKDcsbkVlLDE1LDAsImRpdiIsNCksUWUoOCxnRWUsNDksMjIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSksMiZhJiYoQ2UoMyksZ3IoIkFwcCBMb2NhdGlvbjogIixkLmFwcExvYywiIiksQ2UoNCksUmUoIm5nSWYiLGQubmVlZHNMb2dpbiks''@;'; put 'put ''Q2UoMSksUmUoIm5nSWYiLCFkLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxDcCxsMSxjMSxXYSxNMCxCcyx3cCxPcyxyMixrYSxadSxkaCxVcyxpR10sc3R5bGVzOlsiLmNsZWFyLW1lbW9yeS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjEwcHg7dG9wOjJweH0i''@;'; put 'put ''XX0pLGN9KSgpO2Z1bmN0aW9uIHZFZShjLGwpezEmYyYmKG1lKDAsImRpdiIsMTUpLHF0KDEsInByb2dyZXNzIikseWUoKSl9ZnVuY3Rpb24gX0VlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwxNiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJ2YWx1ZSIs''@;'; put 'put ''YS5HUk9VUE5BTUUpLENlKDEpLGpjKCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgYkVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2Fz''@;'; put 'put ''SnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgRXIsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0i''@;'; put 'put ''bi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6''@;'; put 'put ''IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMu''@;'; put 'put ''c2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLlNZ''@;'; put 'put ''U1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuU1lTSE9TVE5BTUUsdGhpcy5TWVNWTE9ORz1hLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMiXS5pbmNsdWRlcyhhLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6Indp''@;'; put 'put ''bmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5n''@;'; put 'put ''ZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCxfPXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VWMuRC5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNN''@;'; put 'put ''YWtlZGF0YUNoZWNraW5nKCkudGhlbihXPT57VyYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VWMuRC5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsXz1l''@;'; put 'put ''bmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7X30gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5z''@;'; put 'put ''YXNTZXJ2aWNlLmxvZ291dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChvYSksdHQoaXEpLHR0KEpkKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zYXNqcy1jb25maWd1cmF0b3IiXV0saW5wdXRzOntzYXNK''@;'; put 'put ''czoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQxLHZhcnM6OSxjb25zdHM6W1siY2xhc3MiLCJ0aGluUHJvZ3Jl''@;'; put 'put ''c3MgcHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbMSwibGlnaHQiXSxbMSwibS0wIl0sWzEsIm0tMCIsIm10LTEwIl0sWzEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1j''@;'; put 'put ''b250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInBsYWNlaG9sZGVyIiwiVHlwZSBpbiBkaXJlY3RvcnkiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMSwibWItMTAiLCJtdC0wIiwidy01MHZ3Il0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9k''@;'; put 'put ''ZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWZsZXgiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRleHQiLCJwYi0xMCJdLFsxLCJ0aGluUHJvZ3Jlc3Mi''@;'; put 'put ''LCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoUWUoMCx2RWUsMiwwLCJkaXYiLDApLG1lKDEsImg0IiwxKSxOZSgyLCJTYXNqcyBEZXBsb3kiKSx5ZSgpLHF0KDMsImhyIiwyKSxtZSg0LCJwIiwzKSxO''@;'; put 'put ''ZSg1LCIgVG8gY29uZmlndXJlIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuIikseWUoKSxtZSg2LCJwIiw0KSxOZSg3LCIgUGxlYXNlIHNwZWNpZnkgYSBwaHlzaWNhbCBkaXJlY3RvcnkgYmVsb3csIHRvIHdoaWNo''@;'; put 'put ''IHVzZXIgIiksbWUoOCwic3Ryb25nIiksTmUoOSkseWUoKSxOZSgxMCwiIGNhbiB3cml0ZSwgb24gYmVoYWxmIG9mIERhdGEgQ29udHJvbGxlcjpcbiIpLHllKCksbWUoMTEsImxhYmVsIiw1KSxOZSgxMiwiREMgRGlyZWN0b3J5IikseWUoKSxtZSgxMywiZGl2Iiw2KSgxNCwiZGl2Iiw3KSgx''@;'; put 'put ''NSwiaW5wdXQiLDgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kY0RpcmVjdG9yeT1mfSkseWUoKSgpKCksbWUoMTYsInAiLDQpLE5lKDE3LCIgQmVsb3cgYXJlIHRoZSBsaXN0IG9mIGdyb3VwcyB0byB3aGljaCB5b3UgYmVsb25nLiBUaGUgZ3JvdXAgeW91IHNl''@;'; put 'put ''bGVjdCB3aWxsIGJlY29tZSB0aGUgRGF0YSBDb250cm9sbGVyIEFkbWluIEdyb3VwLCBhbmQgZXZlcnlvbmUgaW4gaXQgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRGF0YSBDb250cm9sbGVyLlxuIikseWUoKSxtZSgxOCwibGFiZWwiLDUpLE5lKDE5LCJEYXRhIENvbnRyb2xs''@;'; put 'put ''ZXIgQWRtaW4gZ3JvdXAiKSx5ZSgpLG1lKDIwLCJjbHItc2VsZWN0LWNvbnRhaW5lciIsOSkoMjEsInNlbGVjdCIsMTApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5kY0FkbWluR3JvdXA9Zn0pLFFlKDIyLF9FZSwyLDMsIm9wdGlvbiIsMTEpLHllKCkoKSxtZSgy''@;'; put 'put ''MywicCIsNCksTmUoMjQsIiBOb3csIGNyZWF0ZSB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbmQgZGVwbG95IHRoZSBjb250cm9sIGxpYnJhcnkgdXNpbmcgdGhlIGFkbWluIGdyb3VwIHNlbGVjdGVkIGFib3ZlOlxuIikseWUoKSxtZSgyNSwiZGl2IiwxMikoMjYsImJ1dHRvbiIsMTMpLHh0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5tYWtlRGF0YSgpfSksTmUoMjcsIiBTVUJNSVQgIikseWUoKSgpLHF0KDI4LCJociIsMiksbWUoMjksImRpdiIsMTQpKDMwLCJwIiksTmUoMzEsIllvdSBhcmUgY29ubmVjdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjcmVkZW50aWFsczoiKSx5ZSgp''@;'; put 'put ''LG1lKDMyLCJ1bCIpKDMzLCJsaSIpLE5lKDM0KSx5ZSgpLG1lKDM1LCJsaSIpLE5lKDM2KSx5ZSgpLG1lKDM3LCJsaSIpLE5lKDM4KSx5ZSgpLG1lKDM5LCJsaSIpLE5lKDQwKSx5ZSgpKCkoKSksMiZhJiYoUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoOSksb3IoZC5TWVNVU0VSSUQpLENlKDYp''@;'; put 'put ''LFJlKCJuZ01vZGVsIixkLmRjRGlyZWN0b3J5KSxDZSg2KSxSZSgibmdNb2RlbCIsZC5kY0FkbWluR3JvdXApLENlKDEpLFJlKCJuZ0Zvck9mIixkLmRjQWRtaW5Hcm91cExpc3QpLENlKDEyKSxncigiTUVUQVBFUlNPTjogIixkLk1FVEFQRVJTT04sIiIpLENlKDIpLGdyKCJTWVNVU0VSSUQ6''@;'; put 'put ''ICIsZC5TWVNVU0VSSUQsIiIpLENlKDIpLGdyKCJTWVNIT1NUTkFNRTogIixkLlNZU0hPU1ROQU1FLCIiKSxDZSgyKSxncigiU1lTVkxPTkc6ICIsZC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLGwxLGMxLFdhLE0wLEJzLE9zLFVzLE44LEg4XSxzdHlsZXM6WyIuY2xyLWNv''@;'; put 'put ''bnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHZ3fS5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGhp''@;'; put 'put ''blByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDp1bnNldDtoZWlnaHQ6MXB4O21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnRoaW5Qcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dG9wOjB9Il19KSxjfSkoKTtmdW5jdGlvbiB5RWUoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksTmUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSx5ZSgpLG1lKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJwIiksTmUoNiwiIFRoZSBEZW1vIHZlcnNpb24gb2YgRGF0YSBDb250cm9sbGVyIGlzIGZyZWUgZm9y''@;'; put 'put ''IEVWQUxVQVRJT04gcHVycG9zZXMgb25seS4gQmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBwbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsIGFuZCBhZ3JlZWQgdG8gdGhlICIpLG1lKDcsImEiLDgpLE5lKDgsIkRhdGEgQ29udHJvbGxl''@;'; put 'put ''ciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLHllKCksTmUoOSwiLiAiKSx5ZSgpKCkscXQoMTAsImhyIiw5KSxtZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwiaW5wdXQiLDEwKSx4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnRl''@;'; put 'put ''cm1zQWdyZWVDaGFuZ2UoKSl9KSx5ZSgpLG1lKDEzLCJsYWJlbCIpLE5lKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxtZSgxNSwiYSIsOCksTmUoMTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLHll''@;'; put 'put ''KCkoKSgpKCkoKX19ZnVuY3Rpb24gd0VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwxNSkoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE2KSx4dCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMykub25OYXZpZ2F0ZVRvSG9t''@;'; put 'put ''ZSgpKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEuZGNQ''@;'; put 'put ''YXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIENFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTcpKDEsImFwcC1tYW51YWwtZGVwbG95IiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEJ0KGEpLGp0KFZlKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3Mp''@;'; put 'put ''fX1mdW5jdGlvbiBTRWUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLHdFZSwyLDYsImRpdiIsMTMpLFFlKDIsQ0VlLDIsMywiZGl2IiwxNCksVXIoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmF1dG9kZXBsb3kpLENlKDEpLFJlKCJuZ0lmIiwhYS5hdXRvZGVwbG95''@;'; put 'put ''KX19ZnVuY3Rpb24gTUVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2IiwxNSkoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTgpLHh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5vbk5hdmlnYXRlVG9Ib21l''@;'; put 'put ''KCkpfSkseWUoKSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiB4RWUoYyxsKXtpZigxJmMpe2Nv''@;'; put 'put ''bnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCkseHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSx5ZSgpKCksVXIoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9VmUoMik7Q2UoMiksUmUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEVFZShjLGwpe2lmKDEmYyYmKEJyKDAsMTEpLFFlKDEsU0VlLDMsMiwibmctY29udGFp''@;'; put 'put ''bmVyIiwxMiksUWUoMixNRWUsMywzLCJuZy1jb250YWluZXIiLDEyKSxRZSgzLHhFZSwzLDMsIm5nLWNvbnRhaW5lciIsMTIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpO1JlKCJuZ1N3aXRjaCIsITApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09''@;'; put 'put ''PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19''@;'; put 'put ''bGV0ICRlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0ZXA9MCx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY2xpZW50X2lk''@;'; put 'put ''PSIiLHRoaXMuY2xpZW50X3NlY3JldD0iIix0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuU2Vy''@;'; put 'put ''dmVyVHlwZT1VYy5ELHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2Vy''@;'; put 'put ''dmljZS5nZXRTYXNqc0luc3RhbmNlKCksdGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMuY2xpZW50X2lkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lf''@;'; put 'put ''Y2xpZW50X2lkIil8fCIiLHRoaXMuY2xpZW50X3NlY3JldD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19sb2MiKXx8IiJ9bmdPbkluaXQoKXt0aGlzLnNhc0pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclR5cGU9PT1VYy5ELlNhc1ZpeWEmJmZldGNoKCJzYXNidWlsZC92aXlhLmpzb24iKS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1udWxsO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5qc29uRmlsZT1kLHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZS5sb2codGhpcy5qc29uRmlsZSkpfSksdGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNl''@;'; put 'put ''dHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31n''@;'; put 'put ''ZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7''@;'; put 'put ''dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24u''@;'; put 'put ''aHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoZTgpLHR0KG9hKSx0dCh3MCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJdXSxob3N0QXR0''@;'; put 'put ''cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJdLFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxb''@;'; put 'put ''ImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWyJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRpb24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxhbmsiXSxbMSwi''@;'; put 'put ''bGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xhc3MiLCJjYXJk''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIiwiYXBwTG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwib25OYXZpZ2F0ZVRvSG9tZSJdLFsiaWQiLCJtYWluYm9keSIs''@;'; put 'put ''MSwiY2FyZCJdLFszLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJvbk5hdmlnYXRlVG9Ib21lIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLFFlKDIseUVlLDE3LDAsImRpdiIsMikseWUoKSxRZSgzLEVF''@;'; put 'put ''ZSw0LDQsIm5nLWNvbnRhaW5lciIsMykseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLDA9PT1kLnN0ZXApLENlKDEpLFJlKCJuZ0lmIixkLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W1ppLG5kLHRoLFVzLEQwLFQwLHRFZSxtRWUsYkVlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17bWFyZ2luLXRvcDowfS5idG5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZjBmMGYwO2JvcmRlcjoxcHggc29saWQgI2M5YzljOTtwYWRkaW5nOjEwcHg7b3ZlcmZs''@;'; put 'put ''b3c6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0jY29udGV4dHMtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjNweCAwIDA7bWluLXdpZHRoOjMwcHg7bWFyZ2luLWxlZnQ6MTBweDtoZWlnaHQ6MzBweDtkaXNwbGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyfS52YWxpZGF0aW9uLWJhcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRpb24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXttYXJnaW4tcmlnaHQ6NXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAxNXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jaGVja2JveC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBw''@;'; put 'put ''eCAwfS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmJ0bi1hdXRvZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjoxNXB4IDB9Il19KSxjfSkoKTtjb25zdCBrRWU9W3twYXRoOiIiLGNvbXBvbmVudDokZWV9LHtwYXRoOiJtYW51''@;'; put 'put ''YWxkZXBsb3kiLGNvbXBvbmVudDokZWV9XTtsZXQgQUVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGtFZSks''@;'; put 'put ''ZGNdfSksY30pKCksVEVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLCRsLF91LEFFZV19KSxjfSkoKTtGKDg3MTMpLEYoNTY1''@;'; put 'put ''OCksRig5MTk0NSk7dmFyIERFZT1GKDcwODk2KTtmdW5jdGlvbiBxZWUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxhKz0xfWZ1bmN0aW9uIG5OKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9''@;'; put 'put ''MX1mdW5jdGlvbiBLYihjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxlbmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1b''@;'; put 'put ''XSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIEFsKGMsbCxhLGQpe2xldCBoPS0xLGY9YyxfPWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXkuZnJvbShjKSk7Y29uc3QgVD1mLmxlbmd0aDtmb3IoZCYmVCYmKGgrPTEsXz1mW2hdKSxoKz0xO2g8VDspXz1sKF8sZltoXSxo''@;'; put 'put ''LGYpLGgrPTE7cmV0dXJuIF99ZnVuY3Rpb24gXzEoYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IF89LTE7Zm9yKDthPGg7KXtjb25zdCBUPWRbYV07bChULGEsZCkmJihfKz0xLGZbX109VCksYSs9''@;'; put 'put ''MX1yZXR1cm4gZn1mdW5jdGlvbiBjcyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgsZj1bXTtsZXQgXz0tMTtmb3IoO2E8aDspXys9MSxmW19dPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gRG4o''@;'; put 'put ''YyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxhLGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIEtlZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIElF''@;'; put 'put ''ZShjKXtyZXR1cm4gQWwoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBMRWUoYyl7cmV0dXJuIEFsKGMsKGwsYSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gUkVlKGMpe3JldHVybiBjLmxlbmd0''@;'; put 'put ''aD9LZWUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBYZWUoYyl7cmV0dXJuIEFsKGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/WGVlKGEpOmEpLFtdKX1mdW5jdGlvbiByTihjKXtjb25zdCBsPVtdO3JldHVybiBEbihjLGE9PnstMT09PWwuaW5kZXhPZihhKSYmbC5wdXNoKGEp''@;'; put 'put ''fSksbH1mdW5jdGlvbiBpTigpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIERuKGgsXz0+e2Y9Zi5maWx0ZXIoVD0+IV8uaW5jbHVkZXMoVCkp''@;'; put 'put ''fSksZn1mdW5jdGlvbiBPRWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBEbihoLF89PntmPWYuZmlsdGVyKFQ9Pl8uaW5jbHVkZXMoVCkp''@;'; put 'put ''fSksZn1mdW5jdGlvbiBQRWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXSxmPW5ldyBTZXQoZCk7cmV0dXJuIERuKGgsXz0+e0RuKF8sVD0+e2YuaGFzKFQpfHxmLmFk''@;'; put 'put ''ZChUKX0pfSksQXJyYXkuZnJvbShmKX1mdW5jdGlvbiBvTihjKXtyZXR1cm4gYy5zcGxpdChhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiAiKX1mdW5jdGlvbiBBYShjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJh''@;'; put 'put ''eShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIEFsKGMsKGYsXyxUKT0+ZitfLnJlcGxhY2UoL1xyP1xuXHMqL2csIiIpKyhhW1RdP2FbVF06IiIpLCIiKS50cmltKCl9ZnVuY3Rpb24gX2woYyl7bGV0IGw7c3dpdGNoKHR5cGVvZiBjKXtjYXNlInN0''@;'; put 'put ''cmluZyI6Y2FzZSJudW1iZXIiOmw9YCR7Y31gO2JyZWFrO2Nhc2Uib2JqZWN0IjpsPW51bGw9PT1jPyIiOmMudG9TdHJpbmcoKTticmVhaztjYXNlInVuZGVmaW5lZCI6bD0iIjticmVhaztkZWZhdWx0Omw9Yy50b1N0cmluZygpfXJldHVybiBsfWZ1bmN0aW9uIEtpKGMpe3JldHVybiB0eXBl''@;'; put 'put ''b2YgYzwidSJ9ZnVuY3Rpb24gTGEoYyl7cmV0dXJuIHR5cGVvZiBjPiJ1In1mdW5jdGlvbiBwYyhjKXtyZXR1cm4gbnVsbD09PWN8fCIiPT09Y3x8TGEoYyl9ZnVuY3Rpb24gSmVlKGMpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMp''@;'; put 'put ''fWNvbnN0IFhiPSJsZW5ndGgiLEpiPWM9PnBhcnNlSW50KGMsMTYpLFFlZT1jPT5wYXJzZUludChjLDEwKSxuaz0oYyxsLGEpPT5jLnN1YnN0cihsLGEpLFFiPWM9PmMuY29kZVBvaW50QXQoMCktNjUsc049Yz0+YCR7Y31gLnJlcGxhY2UoL1wtL2csIiIpLEZFZT1jPT5KYihuayhzTihjKSxK''@;'; put 'put ''YigiMTIiKSxRYigiRiIpKSkvKEpiKG5rKHNOKGMpLFFiKCJCIiksfn4hW11bWGJdKSl8fDkpLEhFZT0oKT0+dHlwZW9mIGxvY2F0aW9uPCJ1IiYmL14oW2EtejAtOVwtXStcLik/XHg2OFx4NjFceDZFXHg2NFx4NzNceDZGXHg2RVx4NzRceDYxXHg2Mlx4NkNceDY1XHgyRVx4NjNceDZGXHg2''@;'; put 'put ''RCQvaS50ZXN0KGxvY2F0aW9uLmhvc3QpO2xldCBldGU9ITE7Y29uc3QgdHRlPXtpbnZhbGlkOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBo''@;'; put 'put ''YW5kc29udGFibGUuY29tLmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gQWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0YWxs''@;'; put 'put ''ZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIFJlbmV3IHlvdXIgbGljZW5zZSBrZXkgYXQgaGFuZHNvbnRhYmxlLmNvbSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yXHgyMAogICAgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3QgdXMgYXQgc2Fs''@;'; put 'put ''ZXNAaGFuZHNvbnRhYmxlLmNvbS5gfSxtaXNzaW5nOigpPT5BYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNh''@;'; put 'put ''biBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy4gSWYgeW91IG5lZWQgYW55IGhlbHAsIGNvbnRhY3RceDIwCiAgICB1cyBhdCBz''@;'; put 'put ''dXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9LG50ZT17aW52YWxpZDooKT0+QWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2Nz''@;'; put 'put ''L3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IG9uIGhvdyB0b1x4MjAKICAgIGluc3RhbGwgaXQgcHJvcGVybHkgb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhh''@;'; put 'put ''bmRzb250YWJsZS5jb208L2E+LmAsZXhwaXJlZDpjPT57bGV0e2tleVZhbGlkaXR5RGF0ZTpsLGhvdFZlcnNpb246YX09YztyZXR1cm4gQWFgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBleHBpcmVkIG9uICR7bH0sIGFuZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBpbnN0''@;'; put 'put ''YWxsZWRceDIwCiAgICB2ZXJzaW9uICR7YX0uIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9wcmljaW5nIiB0YXJnZXQ9Il9ibGFuayI+UmVuZXc8L2E+IHlvdXJceDIwCiAgICBsaWNlbnNlIGtleSBvciBkb3duZ3JhZGUgdG8gYSB2ZXJzaW9uIHJlbGVhc2VkIHByaW9yIHRv''@;'; put 'put ''ICR7bH0uIElmIHlvdSBuZWVkIGFueVx4MjAKICAgIGhlbHAsIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnNhbGVzQGhhbmRzb250YWJsZS5jb20iPnNhbGVzQGhhbmRzb250YWJsZS5jb208L2E+LmB9LG1pc3Npbmc6KCk9PkFhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5k''@;'; put 'put ''c29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAog''@;'; put 'put ''ICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLlx4MjAKICAgIDxhIGhyZWY9Imh0dHBzOi8vaGFuZHNvbnRhYmxlLmNvbS9kb2NzL3R1dG9yaWFsLWxpY2Vuc2Uta2V5Lmh0bWwiIHRhcmdldD0iX2JsYW5rIj5SZWFkIG1vcmU8L2E+IGFib3V0IGl0''@;'; put 'put ''IGluXHgyMAogICAgdGhlIGRvY3VtZW50YXRpb24gb3IgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c3VwcG9ydEBoYW5kc29udGFibGUuY29tIj5zdXBwb3J0QGhhbmRzb250YWJsZS5jb208L2E+LmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifTtmdW5jdGlvbiBydGUoYyxsKXtjb25z''@;'; put 'put ''dCBhPSFwYyhjKSxkPSJzdHJpbmciPT10eXBlb2YgYyYmIm5vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uIj09PWMudG9Mb3dlckNhc2UoKSxoPSIxMy4xLjAiO2xldCBmLF89ImludmFsaWQiLFQ9ImludmFsaWQiO2NvbnN0IFc9ZnVuY3Rpb24gTkVlKGMpe2xldCBsPVtdW1hiXSxhPWw7''@;'; put 'put ''aWYoY1tYYl0hPT1RYigiWiIpKXJldHVybiExO2ZvcihsZXQgZD0iIixoPSJCPEg0UCsiLnNwbGl0KCIiKSxmPVFiKGguc2hpZnQoKSk7ZjtmPVFiKGguc2hpZnQoKXx8IkEiKSktLWY8IiJbWGJdP2F8PShRZWUoYCR7UWVlKEpiKGQpKyhKYihuayhjLE1hdGguYWJzKGYpLDIpKStbXSkucGFk''@;'; put 'put ''U3RhcnQoMiwiMCIpKX1gKSU5N3x8Mik+PjE6ZD1uayhjLGYsZj8xPT09aFtYYl0/OTo4OjYpO3JldHVybiBhPT09bH0oYz1zTihjfHwiIikpO2lmKGF8fGR8fFcpaWYoVyl7Y29uc3QgaWU9S28oIjMxLzA4LzIwMjMiLCJERC9NTS9ZWVlZIiksZ2U9TWF0aC5mbG9vcihpZS50b0RhdGUoKS5n''@;'; put 'put ''ZXRUaW1lKCkvODY0ZTUpLHdlPUZFZShjKTtmPUtvKDg2NGU1Kih3ZSsxKSwieCIpLmZvcm1hdCgiTU1NTSBERCwgWVlZWSIpLGdlPndlPyhfPSJleHBpcmVkIixUPSJleHBpcmVkIik6KF89InZhbGlkIixUPSJ2YWxpZCIpfWVsc2UgZD8oXz0ibm9uX2NvbW1lcmNpYWwiLFQ9InZhbGlkIik6''@;'; put 'put ''KF89ImludmFsaWQiLFQ9ImludmFsaWQiKTtlbHNlIF89Im1pc3NpbmciLFQ9Im1pc3NpbmciO2lmKEhFZSgpJiYoXz0idmFsaWQiLFQ9InZhbGlkIiksIWV0ZSYmInZhbGlkIiE9PV8mJih0dGVbX10oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pJiZjb25zb2xlWyJub25fY29t''@;'; put 'put ''bWVyY2lhbCI9PT1fPyJpbmZvIjoid2FybiJdKHR0ZVtfXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpLGV0ZT0hMCksInZhbGlkIiE9PVQmJmwucGFyZW50Tm9kZSYmbnRlW1RdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7Y29uc3QgZ2U9ZG9jdW1lbnQu''@;'; put 'put ''Y3JlYXRlRWxlbWVudCgiZGl2Iik7Z2UuY2xhc3NOYW1lPSJob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLGdlLmlubmVySFRNTD1udGVbVF0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pLGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZ2UsbC5uZXh0U2libGluZyl9fWZ1bmN0''@;'; put 'put ''aW9uIGJ1KGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rpb24gVkVlKCl7Y29uc3QgYz1bXTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1hLmxlbmd0aDtmb3Io''@;'; put 'put ''O2g7KXtoLT0xO2NvbnN0IGY9X2woYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfXJldHVybiAxPT09Yy5sZW5ndGh9ZnVuY3Rpb24gYU4oKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3Ry''@;'; put 'put ''aW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiBsTihjKXtyZXR1cm4vXihbMC05XVswLTldPyUkKXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiBjTihjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hhckF0KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiB1TihjKXtyZXR1cm4gcmsoYCR7Y31gLHtB''@;'; put 'put ''TExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiByayhjLGwpe3JldHVybiBERWUuc2FuaXRpemUoYyxsKX1mdW5jdGlvbiBpdGUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxkPW51bGwsaD1jO2Zvcig7bnVsbCE9''@;'; put 'put ''PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oPWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gb3RlKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJl''@;'; put 'put ''bnQpJiZjLmZyYW1lRWxlbWVudH1mdW5jdGlvbiBleShjKXtyZXR1cm4gb3RlKGMpJiZjLnBhcmVudH1mdW5jdGlvbiBCRWUoYyl7cmV0dXJuISFPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wYXJlbnQpfWZ1bmN0aW9uIE5wKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2NvbnN0e0VMRU1FTlRfTk9ERTpkLERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6aH09Tm9kZTtsZXQgZj1jO2Zvcig7bnVsbCE9ZiYmZiE9PWE7KXtjb25zdHtub2RlVHlw''@;'; put 'put ''ZTpfLG5vZGVOYW1lOlR9PWY7aWYoXz09PWQmJihsLmluY2x1ZGVzKFQpfHxsLmluY2x1ZGVzKGYpKSlyZXR1cm4gZjtjb25zdHtob3N0Old9PWY7Zj1XJiZfPT09aD9XOmYucGFyZW50Tm9kZX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB0eShjLGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1jO2Zvcig7''@;'; put 'put ''aCYmKGg9TnAoaCxsLGEpLGgmJighYXx8YS5jb250YWlucyhoKSkpOylkLnB1c2goaCksaD1oLmhvc3QmJmgubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aC5ob3N0OmgucGFyZW50Tm9kZTtjb25zdCBmPWQubGVuZ3RoO3JldHVybiBmP2RbZi0xXTpudWxsfWZ1bmN0''@;'; put 'put ''aW9uIFZwKGMsbCl7bGV0IGE9Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVsdFZpZXc/Yy5xdWVyeVNlbGVjdG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQu''@;'; put 'put ''cHVzaChsKTtudWxsIT09YTspe2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBzdGUoYyl7bGV0IGw9MCxhPWM7aWYoYS5wcmV2aW91c1NpYmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0''@;'; put 'put ''aW9uIEJwKGMsbCxhKXtjb25zdCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtjfWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVsbH1mdW5jdGlvbiBhdGUoYyl7cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gQm8o''@;'; put 'put ''YyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIhPT1sJiZjLmNsYXNzTGlzdC5jb250YWlucyhsKX1mdW5jdGlvbiBwaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1hdGUobCkpLmxlbmd0aD4wJiZjLmNs''@;'; put 'put ''YXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24gV28oYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9YXRlKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmwpfWZ1bmN0aW9uIGROKGMpe2lmKDM9PT1jLm5vZGVUeXBlKWMucGFyZW50Tm9kZS5y''@;'; put 'put ''ZW1vdmVDaGlsZChjKTtlbHNlIGlmKFsiVEFCTEUiLCJUSEVBRCIsIlRCT0RZIiwiVEZPT1QiLCJUUiJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTEpe2NvbnN0IGw9Yy5jaGlsZE5vZGVzO2ZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKWROKGxbYV0pfX1mdW5jdGlvbiBnMihjKXtsZXQg''@;'; put 'put ''bDtmb3IoO2w9Yy5sYXN0Q2hpbGQ7KWMucmVtb3ZlQ2hpbGQobCl9Y29uc3QgbHRlPS8oPCguKik+fCYoLiopOykvO2Z1bmN0aW9uIGdnKGMsbCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtsdGUudGVzdChsKT9jLmlu''@;'; put 'put ''bmVySFRNTD1hP3JrKGwpOmw6anAoYyxsKX1mdW5jdGlvbiBqcChjLGwpe2NvbnN0IGE9Yy5maXJzdENoaWxkO2EmJjM9PT1hLm5vZGVUeXBlJiZudWxsPT09YS5uZXh0U2libGluZz9hLnRleHRDb250ZW50PWw6KGcyKGMpLGMuYXBwZW5kQ2hpbGQoYy5vd25lckRvY3VtZW50LmNyZWF0ZVRl''@;'; put 'put ''eHROb2RlKGwpKSl9ZnVuY3Rpb24gZTcoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2xldCBhPWM7Zm9yKDthIT09bDspe2lmKG51bGw9PT1hKXJldHVybiExO2lmKGEubm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpe2lmKGEuaG9zdCl7''@;'; put 'put ''aWYoYS5ob3N0LmltcGwpcmV0dXJuIGU3KGEuaG9zdC5pbXBsKTtpZihhLmhvc3QpcmV0dXJuIGU3KGEuaG9zdCk7dGhyb3cgbmV3IEVycm9yKCJMb3N0IGluIFdlYiBDb21wb25lbnRzIHdvcmxkIil9cmV0dXJuITF9aWYoYS5zdHlsZSYmIm5vbmUiPT09YS5zdHlsZS5kaXNwbGF5KXJldHVy''@;'; put 'put ''biExO2E9YS5wYXJlbnROb2RlfXJldHVybiEwfWZ1bmN0aW9uIHFsKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLF8sVCxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LF89aC5vZmZzZXRUb3AsVD1oOyhoPWgub2Zmc2V0''@;'; put 'put ''UGFyZW50KSYmaCE9PWwuYm9keTspZis9aC5vZmZzZXRMZWZ0LF8rPWgub2Zmc2V0VG9wLFQ9aDtyZXR1cm4gVCYmImZpeGVkIj09PVQuc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsXys9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYs''@;'; put 'put ''dG9wOl99fWZ1bmN0aW9uIHQ3KCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gbWcoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBueShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD90NyhsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiBpayhjKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9tZyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24gcnkoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3Vt''@;'; put 'put ''ZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDpfLG92ZXJmbG93WTpUfT1oLnN0eWxlO2lmKFtmLF8s''@;'; put 'put ''VF0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6XyxvdmVyZmxvd1k6VH09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKF8pfHxkLmluY2x1ZGVzKFQpfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxI''@;'; put 'put ''ZWlnaHQrMSYmKGQuaW5jbHVkZXMoVCl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKF8pfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiB2ZyhjKXtjb25zdCBsPWMub3du''@;'; put 'put ''ZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXc7bGV0IGQ9Yy5wYXJlbnROb2RlO2Zvcig7ZCYmZC5zdHlsZSYmbC5ib2R5IT09ZDspe2lmKCJ2aXNpYmxlIiE9PWQuc3R5bGUub3ZlcmZsb3cmJiIiIT09ZC5zdHlsZS5vdmVyZmxvdylyZXR1cm4gZDtjb25zdCBoPXpwKGQsYSksZj1bInNjcm9s''@;'; put 'put ''bCIsImhpZGRlbiIsImF1dG8iXSxfPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxUPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLFc9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoZi5pbmNsdWRlcyhfKXx8Zi5pbmNsdWRlcyhUKXx8Zi5pbmNsdWRl''@;'; put 'put ''cyhXKSlyZXR1cm4gZDtkPWQucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBuNyhjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYoIWMpcmV0dXJuO2lmKGM9PT1hKXJldHVybiJ3aWR0aCI9PT1sP2Ak''@;'; put 'put ''e2EuaW5uZXJXaWR0aH1weGA6ImhlaWdodCI9PT1sP2Ake2EuaW5uZXJIZWlnaHR9cHhgOnZvaWQgMDtjb25zdCBkPWMuc3R5bGVbbF07aWYoIiIhPT1kJiZ2b2lkIDAhPT1kKXJldHVybiBkO2NvbnN0IGg9enAoYyxhKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lk''@;'; put 'put ''IDB9ZnVuY3Rpb24gakVlKGMsbCl7Y29uc3R7c2VsZWN0b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEp''@;'; put 'put ''KSksZH1mdW5jdGlvbiB6cChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjLmN1cnJlbnRTdHlsZXx8bC5nZXRDb21wdXRlZFN0eWxlKGMpfWZ1bmN0aW9uIHdhKGMpe3JldHVybiBjLm9mZnNldFdp''@;'; put 'put ''ZHRofWZ1bmN0aW9uIGFsKGMpe3JldHVybiBjLm9mZnNldEhlaWdodH1mdW5jdGlvbiBqZihjKXtyZXR1cm4gYy5jbGllbnRIZWlnaHR8fGMuaW5uZXJIZWlnaHR9ZnVuY3Rpb24gaXkoYyl7cmV0dXJuIGMuY2xpZW50V2lkdGh8fGMuaW5uZXJXaWR0aH1mdW5jdGlvbiB6RWUoYyxsLGEpe2Mu''@;'; put 'put ''YWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFVFZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gaE4oYyl7cmV0dXJuIGMuc2VsZWN0aW9uU3RhcnQ/Yy5zZWxlY3Rpb25TdGFydDowfWZ1bmN0aW9uIGN0ZShjKXtyZXR1cm4gYy5zZWxlY3Rp''@;'; put 'put ''b25FbmQ/Yy5zZWxlY3Rpb25FbmQ6MH1mdW5jdGlvbiB1dGUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2NvbnN0IGw9Yy5kb2N1bWVudDtsZXQgYT0iIjtyZXR1cm4gYy5nZXRTZWxlY3Rpb24/YT1jLmdldFNl''@;'; put 'put ''bGVjdGlvbigpLnRvU3RyaW5nKCk6bC5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWwuc2VsZWN0aW9uLnR5cGUmJihhPWwuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dCksYX1mdW5jdGlvbiBmTigpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2Fy''@;'; put 'put ''Z3VtZW50c1swXTp3aW5kb3c7Yy5nZXRTZWxlY3Rpb24mJihjLmdldFNlbGVjdGlvbigpLmVtcHR5P2MuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTpjLmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcyYmYy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSl9ZnVuY3Rpb24gb3ko''@;'; put 'put ''YyxsLGEpe2lmKHZvaWQgMD09PWEmJihhPWwpLGMuc2V0U2VsZWN0aW9uUmFuZ2Upe2MuZm9jdXMoKTt0cnl7Yy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpfWNhdGNoe2NvbnN0IGg9Yy5wYXJlbnROb2RlLGY9aC5zdHlsZS5kaXNwbGF5O2guc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuc2V0U2Vs''@;'; put 'put ''ZWN0aW9uUmFuZ2UobCxhKSxoLnN0eWxlLmRpc3BsYXk9Zn19fWxldCBwTjtmdW5jdGlvbiBJYygpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09cE4mJihwTj1mdW5jdGlvbiBaRWUo''@;'; put 'put ''KXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7Y29uc3QgbD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuc3R5bGUuaGVpZ2h0PSIyMDBweCIsbC5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3QgYT1jLmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoImRpdiIpO2Euc3R5bGUuYm94U2l6aW5nPSJjb250ZW50LWJveCIsYS5zdHlsZS5oZWlnaHQ9IjE1MHB4IixhLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9IjBweCIsYS5zdHls''@;'; put 'put ''ZS53aWR0aD0iMjAwcHgiLGEuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixhLmFwcGVuZENoaWxkKGwpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChhKTtjb25zdCBkPWwub2Zmc2V0V2lkdGg7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjtsZXQgaD1sLm9mZnNl''@;'; put 'put ''dFdpZHRoO3JldHVybiBkPT09aCYmKGg9YS5jbGllbnRXaWR0aCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKGEpLGQtaH0oYykpLHBOfWZ1bmN0aW9uIGR0ZShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gaHRlKGMpe3Jl''@;'; put 'put ''dHVybiBjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIG9rKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBZRWUoYyl7bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUu''@;'; put 'put ''dHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rpb24gc3koYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gYXkoYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEi''@;'; put 'put ''XS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1jLmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gc2soYyl7cmV0dXJuIGF5KGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIGZ0ZShjKXtzayhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxl''@;'; put 'put ''bWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gZ04oYyl7cmV0dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiBwdGUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxo''@;'; put 'put ''LnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3VtZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIFJhKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIGd0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06MjAwLGE9MDtjb25zdCBkPXtsYXN0Q2FsbFRocm90dGxlZDohMH07bGV0IGg9bnVsbDtyZXR1cm4gZnVuY3Rpb24gZigpe2Zvcih2YXIgXz1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KF8pLFc9MDtXPF87VysrKVRbV109YXJndW1lbnRzW1ddO2NvbnN0IGllPURh''@;'; put 'put ''dGUubm93KCk7bGV0IGdlPSExO2QubGFzdENhbGxUaHJvdHRsZWQ9ITAsYXx8KGE9aWUsZ2U9ITApO2NvbnN0IHdlPWwtKGllLWEpO3JldHVybiBnZT8oZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsVCkpOihoJiZjbGVhclRpbWVvdXQoaCksaD1zZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''ZC5sYXN0Q2FsbFRocm90dGxlZD0hMSxjLmFwcGx5KHRoaXMsVCksYT0wLGg9dm9pZCAwfSx3ZSkpLGR9fWZ1bmN0aW9uIFdFZShjKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTA7Y29uc3QgZD1ndGUoYyxhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwKTtsZXQgaD1hO2Z1bmN0aW9uIF8oKXtmb3IodmFyIFQ9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShUKSxpZT0wO2llPFQ7aWUrKylXW2llXT1hcmd1bWVudHNbaWVdO3JldHVybiBoPyhoLT0xLGMu''@;'; put 'put ''YXBwbHkodGhpcyxXKSk6ZC5hcHBseSh0aGlzLFcpfXJldHVybiBfLmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSxffWZ1bmN0aW9uIG1OKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLF8pfSxsKSxkfX1mdW5jdGlvbiBH''@;'; put 'put ''RWUoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBfPWFyZ3VtZW50cy5sZW5ndGgsVD1uZXcgQXJyYXkoXyksVz0wO1c8XztXKysp''@;'; put 'put ''VFtXXT1hcmd1bWVudHNbV107cmV0dXJuIEFsKGgsKGllLGdlKT0+Z2UoaWUpLGQuYXBwbHkodGhpcyxUKSl9fWZ1bmN0aW9uIHZOKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKylfW1RdPWFyZ3VtZW50c1tUXTtyZXR1cm4gYy5hcHBseSh0aGlzLGEuY29uY2F0KF8pKX19ZnVuY3Rpb24gbXRlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsXz1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspX1tUXT1hcmd1bWVudHNbVF07Y29uc3QgVz1kLmNvbmNhdChfKTtsZXQgaWU7cmV0dXJuIGllPVcubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxXKTph''@;'; put 'put ''KFcpLGllfX0oW10pfWZ1bmN0aW9uICRFZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKV9bVF09YXJndW1lbnRzW1RdO2NvbnN0IFc9''@;'; put 'put ''ZC5jb25jYXQoXy5yZXZlcnNlKCkpO2xldCBpZTtyZXR1cm4gaWU9Vy5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLFcpOmEoVyksaWV9fShbXSl9ZnVuY3Rpb24gYWsoYyxsLGEsZCxoLGYsXyxUKXtyZXR1cm4gS2koVCk/Yy5jYWxsKGwsYSxkLGgsZixfLFQpOktpKF8pP2MuY2FsbChsLGEsZCxo''@;'; put 'put ''LGYsXyk6S2koZik/Yy5jYWxsKGwsYSxkLGgsZik6S2koaCk/Yy5jYWxsKGwsYSxkLGgpOktpKGQpP2MuY2FsbChsLGEsZCk6S2koYSk/Yy5jYWxsKGwsYSk6Yy5jYWxsKGwpfWZ1bmN0aW9uIHI3KGMpe2xldCBsO3JldHVybiBBcnJheS5pc0FycmF5KGMpP2w9Yy5sZW5ndGg/bmV3IEFycmF5''@;'; put 'put ''KGMubGVuZ3RoKS5maWxsKG51bGwpOltdOihsPXt9LGRzKGMsKGEsZCk9PnsiX19jaGlsZHJlbiIhPT1kJiYobFtkXT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFBcnJheS5pc0FycmF5KGEpP3I3KGEpOkFycmF5LmlzQXJyYXkoYSk/YS5sZW5ndGgmJiJvYmplY3QiPT10eXBlb2YgYVswXSYm''@;'; put 'put ''IUFycmF5LmlzQXJyYXkoYVswXSk/W3I3KGFbMF0pXTpbXTpudWxsKX0pKSxsfWZ1bmN0aW9uIHpmKGMsbCl7cmV0dXJuIGwucHJvdG90eXBlLmNvbnN0cnVjdG9yPWwsYy5wcm90b3R5cGU9bmV3IGwsYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjfWZ1bmN0aW9uIEtsKGMsbCxhKXtjb25z''@;'; put 'put ''dCBkPUFycmF5LmlzQXJyYXkoYSk7cmV0dXJuIGRzKGwsKGgsZik9PnsoITE9PT1kfHxhLmluY2x1ZGVzKGYpKSYmKGNbZl09aCl9KSxjfWZ1bmN0aW9uIGx5KGMsbCl7ZHMobCwoYSxkKT0+e2xbZF0mJiJvYmplY3QiPT10eXBlb2YgbFtkXT8oY1tkXXx8KGNbZF09QXJyYXkuaXNBcnJheShs''@;'; put 'put ''W2RdKT9bXToiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobFtkXSk/bFtkXTp7fSksbHkoY1tkXSxsW2RdKSk6Y1tkXT1sW2RdfSl9ZnVuY3Rpb24geXUoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''YykpOmN9ZnVuY3Rpb24gV3UoYyl7Y29uc3QgbD17fTtyZXR1cm4gZHMoYywoYSxkKT0+e2xbZF09YX0pLGx9ZnVuY3Rpb24gVGEoYyl7Yy5NSVhJTlN8fChjLk1JWElOUz1bXSk7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylh''@;'; put 'put ''W2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBEbihhLGg9PntjLk1JWElOUy5wdXNoKGguTUlYSU5fTkFNRSksZHMoaCwoZixfKT0+e2lmKHZvaWQgMCE9PWMucHJvdG90eXBlW19dKXRocm93IG5ldyBFcnJvcihgTWl4aW4gY29uZmxpY3QuIFByb3BlcnR5ICcke199JyBhbHJlYWR5IGV4aXN0''@;'; put 'put ''IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uYCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpYy5wcm90b3R5cGVbX109ZjtlbHNle2NvbnN0IFc9ZnVuY3Rpb24oZ2Upe2NvbnN0IHdlPWBfJHtnZX1gO3JldHVybiBmdW5jdGlvbihFZSl7dGhpc1t3ZV09RWV9fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYy5wcm90b3R5cGUsXyx7Z2V0OmZ1bmN0aW9uKGdlLHdlKXtjb25zdCBFZT1gXyR7Z2V9YDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09dGhpc1tFZV0mJih0aGlzW0VlXT0ob3Q9PntsZXQgZXQ9b3Q7cmV0dXJuKEFycmF5LmlzQXJyYXkoZXQpfHx1cyhldCkpJiYo''@;'; put 'put ''ZXQ9eXUoZXQpKSxldH0pKHdlKSksdGhpc1tFZV19fShfLGYpLHNldDpXKF8pLGNvbmZpZ3VyYWJsZTohMH0pfX0pfSksY31mdW5jdGlvbiBsayhjLGwpe3JldHVybiBKU09OLnN0cmluZ2lmeShjKT09PUpTT04uc3RyaW5naWZ5KGwpfWZ1bmN0aW9uIHVzKGMpe3JldHVybiJbb2JqZWN0IE9i''@;'; put 'put ''amVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfWZ1bmN0aW9uIGZoKGMsbCxhLGQpe2QudmFsdWU9YSxkLndyaXRhYmxlPSExIT09ZC53cml0YWJsZSxkLmVudW1lcmFibGU9ITEhPT1kLmVudW1lcmFibGUsZC5jb25maWd1cmFibGU9ITEhPT1kLmNvbmZpZ3VyYWJs''@;'; put 'put ''ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLGQpfWZ1bmN0aW9uIGRzKGMsbCl7Zm9yKGNvbnN0IGEgaW4gYylpZigoIWMuaGFzT3duUHJvcGVydHl8fGMuaGFzT3duUHJvcGVydHkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGEpKSYmITE9PT1sKGNbYV0sYSxj''@;'; put 'put ''KSlicmVhaztyZXR1cm4gY31mdW5jdGlvbiB2dGUoYyxsKXtjb25zdCBhPWwuc3BsaXQoIi4iKTtsZXQgZD1jO3JldHVybiBkcyhhLGg9PntpZihkPWRbaF0sdm9pZCAwPT09ZClyZXR1cm4gZD12b2lkIDAsITF9KSxkfWZ1bmN0aW9uIGNrKGMsbCxhKXtjb25zdCBkPWwuc3BsaXQoIi4iKTts''@;'; put 'put ''ZXQgaD1jO2QuZm9yRWFjaCgoZixfKT0+e18hPT1kLmxlbmd0aC0xPyhibChoLGYpfHwoaFtmXT17fSksaD1oW2ZdKTpoW2ZdPWF9KX1mdW5jdGlvbiB1ayhjKXtpZighdXMoYykpcmV0dXJuIDA7Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiB1cyhhKT9kcyhhLChoLGYpPT57''@;'; put 'put ''Il9fY2hpbGRyZW4iIT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBfZyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAsZD17X3RvdWNoZWQ6ITEs''@;'; put 'put ''W2FdOmMsaXNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxk''@;'; put 'put ''fWZ1bmN0aW9uIGJsKGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfUYoMTMwMDYpO2NvbnN0IGZkPWM9Pntjb25zdCBsPXt2YWx1ZTohMSx0ZXN0OihhLGQpPT57bC52YWx1ZT1jKGEsZCl9fTtyZXR1cm4gbH0sVWY9e2Nocm9tZTpmZCgoYyxs''@;'; put 'put ''KT0+L0Nocm9tZS8udGVzdChjKSYmL0dvb2dsZS8udGVzdChsKSksY2hyb21lV2ViS2l0OmZkKGM9Pi9DcmlPUy8udGVzdChjKSksZWRnZTpmZChjPT4vRWRnZS8udGVzdChjKSksZWRnZVdlYktpdDpmZChjPT4vRWRnaU9TLy50ZXN0KGMpKSxmaXJlZm94OmZkKGM9Pi9GaXJlZm94Ly50ZXN0''@;'; put 'put ''KGMpKSxmaXJlZm94V2ViS2l0OmZkKGM9Pi9GeGlPUy8udGVzdChjKSksbW9iaWxlOmZkKGM9Pi9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChjKSksc2FmYXJpOmZkKChjLGwpPT4vU2FmYXJpLy50ZXN0KGMpJiYv''@;'; put 'put ''QXBwbGUgQ29tcHV0ZXIvLnRlc3QobCkpfSxpNz17bWFjOmZkKGM9Pi9eTWFjLy50ZXN0KGMpKSx3aW46ZmQoYz0+L15XaW4vLnRlc3QoYykpLGxpbnV4OmZkKGM9Pi9eTGludXgvLnRlc3QoYykpLGlvczpmZChjPT4vaVBob25lfGlQYWR8aVBvZC9pLnRlc3QoYykpfTtmdW5jdGlvbiBfdGUo''@;'; put 'put ''KXtsZXR7dXNlckFnZW50OmM9bmF2aWdhdG9yLnVzZXJBZ2VudCx2ZW5kb3I6bD1uYXZpZ2F0b3IudmVuZG9yfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZHMoVWYsYT0+e2xldHt0ZXN0OmR9PWE7ZChjLGwpfSl9ZnVuY3Rpb24g''@;'; put 'put ''YnRlKCl7bGV0e3BsYXRmb3JtOmM9bmF2aWdhdG9yLnBsYXRmb3JtfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307ZHMoaTcsbD0+e2xldHt0ZXN0OmF9PWw7YShjKX0pfWZ1bmN0aW9uIF9OKCl7cmV0dXJuIFVmLmNocm9tZS52YWx1''@;'; put 'put ''ZX1mdW5jdGlvbiB5dGUoKXtyZXR1cm4gVWYuY2hyb21lV2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGRrKCl7cmV0dXJuIFVmLmZpcmVmb3gudmFsdWV9ZnVuY3Rpb24gd3RlKCl7cmV0dXJuIFVmLmZpcmVmb3hXZWJLaXQudmFsdWV9ZnVuY3Rpb24gcUVlKCl7cmV0dXJuIFVmLnNhZmFyaS52YWx1''@;'; put 'put ''ZX1mdW5jdGlvbiBDdGUoKXtyZXR1cm4gVWYuZWRnZS52YWx1ZX1mdW5jdGlvbiBLRWUoKXtyZXR1cm4gVWYuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBtMigpe3JldHVybiBVZi5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gYk4oKXtyZXR1cm4gaTcuaW9zLnZhbHVlfWZ1bmN0aW9uIHlOKCl7''@;'; put 'put ''bGV0e21heFRvdWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmaTcubWFjLnZhbHVlfWZ1bmN0aW9uIHdOKCl7cmV0dXJuIGk3Lndpbi52YWx1ZX1mdW5jdGlvbiBoaygpe3JldHVy''@;'; put 'put ''biBpNy5tYWMudmFsdWV9ZnVuY3Rpb24gWEVlKCl7cmV0dXJuIGk3LmxpbnV4LnZhbHVlfV90ZSgpLGJ0ZSgpO2NvbnN0IGNvPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046ZGsoKT8xODI6MTc0LEFVRElP''@;'; put 'put ''X01VVEU6ZGsoKT8xODE6MTczLEFVRElPX1VQOmRrKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEz''@;'; put 'put ''LEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5T''@;'; put 'put ''RVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BB''@;'; put 'put ''Q0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LEpFZT1bY28uQUxULGNvLkFSUk9XX0RPV04sY28uQVJST1dfTEVGVCxjby5BUlJPV19SSUdIVCxjby5BUlJPV19VUCxjby5BVURJT19ET1dOLGNvLkFVRElPX01V''@;'; put 'put ''VEUsY28uQVVESU9fVVAsY28uQkFDS1NQQUNFLGNvLkNBUFNfTE9DSyxjby5ERUxFVEUsY28uRU5ELGNvLkVOVEVSLGNvLkVTQ0FQRSxjby5GMSxjby5GMixjby5GMyxjby5GNCxjby5GNSxjby5GNixjby5GNyxjby5GOCxjby5GOSxjby5GMTAsY28uRjExLGNvLkYxMixjby5GMTMsY28uRjE0''@;'; put 'put ''LGNvLkYxNSxjby5GMTYsY28uRjE3LGNvLkYxOCxjby5GMTksY28uSE9NRSxjby5JTlNFUlQsY28uTUVESUFfTkVYVCxjby5NRURJQV9QTEFZX1BBVVNFLGNvLk1FRElBX1BSRVYsY28uTUVESUFfU1RPUCxjby5OVUxMLGNvLk5VTV9MT0NLLGNvLlBBR0VfRE9XTixjby5QQUdFX1VQLGNvLlBB''@;'; put 'put ''VVNFLGNvLlNDUk9MTF9MT0NLLGNvLlNISUZULGNvLlRBQl07ZnVuY3Rpb24gU3RlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxjPj0yMjZ8fGM+PTY1JiZjPD05MH1mdW5jdGlvbiBDTihjKXty''@;'; put 'put ''ZXR1cm4gSkVlLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFFFZShjKXtjb25zdCBsPVtdO3JldHVybiBoaygpP2wucHVzaChjby5DT01NQU5EX0xFRlQsY28uQ09NTUFORF9SSUdIVCxjby5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChjby5DT05UUk9MKSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIE10''@;'; put 'put ''ZShjKXtyZXR1cm5bY28uQ09OVFJPTCxjby5DT01NQU5EX0xFRlQsY28uQ09NTUFORF9SSUdIVCxjby5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIG83KGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0IGQ9ITE7cmV0dXJuIERuKGEsaD0+e2lmKGM9PT1jb1toXSly''@;'; put 'put ''ZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gdjIoYyl7Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBiZyhjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWR9ZnVuY3Rpb24gVXAoYyl7cmV0dXJu''@;'; put 'put ''IDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBmayhjKXtyZXR1cm4gMD09PWMuYnV0dG9ufWZ1bmN0aW9uIEdhKCl7S2koY29uc29sZSkmJmNvbnNvbGUud2FybiguLi5hcmd1bWVudHMpfWZ1bmN0aW9uIFNOKCl7S2koY29uc29sZSkmJmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKX1jb25zdCBz''@;'; put 'put ''Nz1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ciLCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0ZUNvbCIsImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIs''@;'; put 'put ''ImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRLZXlEb3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJhZnRl''@;'; put 'put ''ckdldFJvd0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEiLCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJh''@;'; put 'put ''ZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVDb2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93''@;'; put 'put ''U2VxdWVuY2VDaGFuZ2UiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVydGljYWxseSIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZXRDZWxs''@;'; put 'put ''TWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNldERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hhbmdlIiwiYWZ0''@;'; put 'put ''ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxBbGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2UiLCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIiwiYmVmb3JlTG9hZERhdGEiLCJiZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3JlS2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVu''@;'; put 'put ''dSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9uQ2VsbE1vdXNlT3V0IiwiYmVmb3JlUmVtb3ZlQ29sIiwiYmVmb3JlUmVtb3ZlUm93IiwiYmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlU2V0Q2Vs''@;'; put 'put ''bE1ldGEiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsImJlZm9yZVNldFJhbmdlU3RhcnQiLCJiZWZvcmVTZXRSYW5nZUVuZCIsImJlZm9yZVRvdWNoU2Nyb2xsIiwiYmVmb3JlVmFsaWRhdGUiLCJiZWZvcmVWYWx1ZVJlbmRlciIsImNvbnN0cnVjdCIsImluaXQiLCJtb2RpZnlDb2xIZWFk''@;'; put 'put ''ZXIiLCJtb2RpZnlDb2xXaWR0aCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1vZGlmeURhdGEiLCJtb2RpZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZvcmVI''@;'; put 'put ''aWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlmeUF1dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5YWJs''@;'; put 'put ''ZVJhbmdlIiwiYmVmb3JlQ3V0IiwiYWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1bW5Nb3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwiYmVm''@;'; put 'put ''b3JlQ29sdW1uVW5mcmVlemUiLCJhZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0ZXJSb3dSZXNpemUiLCJhZnRlckdldENvbHVtbkhl''@;'; put 'put ''YWRlclJlbmRlcmVycyIsImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsImFmdGVy''@;'; put 'put ''TmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsImFmdGVyU2hlZXRBZGRlZCIsImFmdGVyU2hlZXRSZW5hbWVkIiwiYWZ0ZXJTaGVldFJlbW92ZWQiLCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsImJlZm9yZVVuZG8iLCJiZWZvcmVVbmRvU3RhY2tD''@;'; put 'put ''aGFuZ2UiLCJhZnRlclVuZG8iLCJhZnRlclVuZG9TdGFja0NoYW5nZSIsImJlZm9yZVJlZG8iLCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLCJhZnRlclJlZG8iLCJhZnRlclJlZG9TdGFja0NoYW5nZSIsIm1vZGlmeVJvd0hlYWRlcldpZHRoIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2Rp''@;'; put 'put ''ZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyUGx1Z2luc0luaXRp''@;'; put 'put ''YWxpemVkIiwiYmVmb3JlSGlkZVJvd3MiLCJhZnRlckhpZGVSb3dzIiwiYmVmb3JlVW5oaWRlUm93cyIsImFmdGVyVW5oaWRlUm93cyIsImJlZm9yZUhpZGVDb2x1bW5zIiwiYWZ0ZXJIaWRlQ29sdW1ucyIsImJlZm9yZVVuaGlkZUNvbHVtbnMiLCJhZnRlclVuaGlkZUNvbHVtbnMiLCJiZWZv''@;'; put 'put ''cmVUcmltUm93IiwiYWZ0ZXJUcmltUm93IiwiYmVmb3JlVW50cmltUm93IiwiYWZ0ZXJVbnRyaW1Sb3ciLCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwiYmVmb3JlQWRkQ2hpbGQiLCJhZnRlckFkZENoaWxk''@;'; put 'put ''IiwiYmVmb3JlRGV0YWNoQ2hpbGQiLCJhZnRlckRldGFjaENoaWxkIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwiYmVmb3JlVW5tZXJnZUNlbGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0''@;'; put 'put ''ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2UiLCJiZWZvcmVDb2x1bW5FeHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2Vl''@;'; put 'put ''ZCJdLGVrZT1BYWBUaGUgcGx1Z2luIGhvb2sgIltob29rTmFtZV0iIHdhcyByZW1vdmVkIGluIEhhbmRzb250YWJsZSBbcmVtb3ZlZEluVmVyc2lvbl0uXHgyMAogIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90ZXMgaHR0cHM6Ly9naXRodWIuY29tL2hhbmRzb250YWJsZS9oYW5kc29udGFi''@;'; put 'put ''bGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1x4MjAKICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYCxNTj1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2RpZnlSb3ciLCI4LjAuMCJdLFsidW5tb2Rp''@;'; put 'put ''ZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxbImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSkseE49bmV3IE1hcChbXSk7Y2xhc3MgeHRle3N0YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1cm4gZnVuY3Rpb24gbmtlKCl7cmV0''@;'; put 'put ''dXJuIHRrZX0oKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZ2xvYmFsQnVja2V0PXRoaXMuY3JlYXRlRW1wdHlCdWNrZXQoKX1jcmVhdGVFbXB0eUJ1Y2tldCgpe2NvbnN0IGw9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gRG4oczcsYT0+bFthXT1bXSksbH1nZXRCdWNrZXQoKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gbD8obC5wbHVnaW5Ib29rQnVja2V0fHwobC5wbHVnaW5Ib29rQnVja2V0PXRoaXMuY3JlYXRlRW1wdHlCdWNrZXQoKSksbC5wbHVnaW5Ib29rQnVja2V0KTp0aGlzLmdsb2JhbEJ1''@;'; put 'put ''Y2tldH1hZGQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZihBcnJheS5pc0FycmF5KGEpKURuKGEsaD0+dGhpcy5hZGQobCxoLGQpKTtlbHNle01OLmhhcyhsKSYmR2EoY04oZWtlLHtob29rTmFtZTpsLHJl''@;'; put 'put ''bW92ZWRJblZlcnNpb246TU4uZ2V0KGwpfSkpLHhOLmhhcyhsKSYmR2EoeE4uZ2V0KGwpKTtjb25zdCBoPXRoaXMuZ2V0QnVja2V0KGQpO2lmKHR5cGVvZiBoW2xdPiJ1IiYmKHRoaXMucmVnaXN0ZXIobCksaFtsXT1bXSksYS5za2lwPSExLC0xPT09aFtsXS5pbmRleE9mKGEpKXtsZXQgZj0h''@;'; put 'put ''MTthLmluaXRpYWxIb29rJiZEbihoW2xdLChfLFQpPT57aWYoXy5pbml0aWFsSG9vaylyZXR1cm4gaFtsXVtUXT1hLGY9ITAsITF9KSxmfHxoW2xdLnB1c2goYSl9fXJldHVybiB0aGlzfW9uY2UobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9h''@;'; put 'put ''cmd1bWVudHNbMl06bnVsbDtBcnJheS5pc0FycmF5KGEpP0RuKGEsaD0+dGhpcy5vbmNlKGwsaCxkKSk6KGEucnVuT25jZT0hMCx0aGlzLmFkZChsLGEsZCkpfXJlbW92ZShsLGEpe2NvbnN0IGg9dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOm51bGwpO3JldHVybiB0eXBlb2YgaFtsXTwidSImJmhbbF0uaW5kZXhPZihhKT49MCYmKGEuc2tpcD0hMCwhMCl9aGFzKGwpe2NvbnN0IGQ9dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''Om51bGwpO3JldHVybiEodm9pZCAwPT09ZFtsXXx8IWRbbF0ubGVuZ3RoKX1ydW4obCxhLGQsaCxmLF8sVCxXKXt7Y29uc3QgaWU9dGhpcy5nbG9iYWxCdWNrZXRbYV0sZ2U9aWU/aWUubGVuZ3RoOjA7bGV0IHdlPTA7aWYoZ2UpZm9yKDt3ZTxnZTspe2lmKCFpZVt3ZV18fGllW3dlXS5za2lw''@;'; put 'put ''KXt3ZSs9MTtjb250aW51ZX1jb25zdCBFZT1hayhpZVt3ZV0sbCxkLGgsZixfLFQsVyk7dm9pZCAwIT09RWUmJihkPUVlKSxpZVt3ZV0mJmllW3dlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLGllW3dlXSksd2UrPTF9fXtjb25zdCBpZT10aGlzLmdldEJ1Y2tldChsKVthXSxnZT1pZT9pZS5s''@;'; put 'put ''ZW5ndGg6MDtsZXQgd2U9MDtpZihnZSlmb3IoO3dlPGdlOyl7aWYoIWllW3dlXXx8aWVbd2VdLnNraXApe3dlKz0xO2NvbnRpbnVlfWNvbnN0IEVlPWFrKGllW3dlXSxsLGQsaCxmLF8sVCxXKTt2b2lkIDAhPT1FZSYmKGQ9RWUpLGllW3dlXSYmaWVbd2VdLnJ1bk9uY2UmJnRoaXMucmVtb3Zl''@;'; put 'put ''KGEsaWVbd2VdLGwpLHdlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7ZHModGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpLChhLGQsaCk9PmhbZF0ubGVuZ3RoPTApfXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdp''@;'; put 'put ''c3RlcmVkKGwpfHxzNy5wdXNoKGwpfWRlcmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCkmJnM3LnNwbGljZShzNy5pbmRleE9mKGwpLDEpfWlzRGVwcmVjYXRlZChsKXtyZXR1cm4geE4uaGFzKGwpfHxNTi5oYXMobCl9aXNSZWdpc3RlcmVkKGwpe3JldHVybiBzNy5pbmRleE9mKGwp''@;'; put 'put ''Pj0wfWdldFJlZ2lzdGVyZWQoKXtyZXR1cm4gczd9fWNvbnN0IHRrZT1uZXcgeHRlLHNvPXh0ZSxFTj1uZXcgTWFwO2Z1bmN0aW9uIHBkKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjb21tb24iO0VOLmhhcyhjKXx8RU4u''@;'; put 'put ''c2V0KGMsbmV3IE1hcCk7Y29uc3QgbD1FTi5nZXQoYyk7cmV0dXJue3JlZ2lzdGVyOmZ1bmN0aW9uIGEoVCxXKXtsLnNldChULFcpfSxnZXRJdGVtOmZ1bmN0aW9uIGQoVCl7cmV0dXJuIGwuZ2V0KFQpfSxoYXNJdGVtOmZ1bmN0aW9uIGgoVCl7cmV0dXJuIGwuaGFzKFQpfSxnZXROYW1lczpm''@;'; put 'put ''dW5jdGlvbiBmKCl7cmV0dXJuWy4uLmwua2V5cygpXX0sZ2V0VmFsdWVzOmZ1bmN0aW9uIF8oKXtyZXR1cm5bLi4ubC52YWx1ZXMoKV19fX1jb25zdCBrTj1uZXcgV2Vha01hcCx7cmVnaXN0ZXI6cmtlLGdldEl0ZW06RXRlLGhhc0l0ZW06a3RlLGdldE5hbWVzOmlrZX09cGQoImVkaXRvcnMi''@;'; put 'put ''KTtmdW5jdGlvbiBva2UoYyl7Y29uc3QgbD17fSxhPWM7dGhpcy5nZXRDb25zdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBjfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKGQpe3JldHVybiBkLmd1aWQgaW4gbHx8KGxbZC5ndWlkXT1uZXcgYShkKSksbFtkLmd1aWRdfSxzby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5hZGQoImFmdGVyRGVzdHJveSIsZnVuY3Rpb24oKXtsW3RoaXMuZ3VpZF09bnVsbH0pfWZ1bmN0aW9uIEF0ZShjLGwpe2xldCBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKWtOLmdldChjKXx8UjAobnVsbCxjKSxhPWtOLmdldChjKTtlbHNle2lmKCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''Yyl0aHJvdyBFcnJvcignT25seSBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgY2FuIGJlIHBhc3NlZCBhcyAiZWRpdG9yIiBwYXJhbWV0ZXInKTthPUV0ZShjKX1pZighYSl0aHJvdyBFcnJvcihgTm8gZWRpdG9yIHJlZ2lzdGVyZWQgdW5kZXIgbmFtZSAiJHtjfSJgKTtyZXR1cm4gYS5nZXRJbnN0''@;'; put 'put ''YW5jZShsKX1mdW5jdGlvbiBwayhjKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylyZXR1cm4gYztpZigha3RlKGMpKXRocm93IEVycm9yKGBObyByZWdpc3RlcmVkIGVkaXRvciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBFdGUoYykuZ2V0Q29uc3RydWN0b3IoKX1mdW5jdGlv''@;'; put 'put ''biBSMChjLGwpe2MmJiJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuRURJVE9SX1RZUEUpO2NvbnN0IGE9bmV3IG9rZShsKTsic3RyaW5nIj09dHlwZW9mIGMmJnJrZShjLGEpLGtOLnNldChsLGEpfWxldCBnaz0wO2NvbnN0IGxsPWNsYXNzIHNrZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY29u''@;'; put 'put ''dGV4dD0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IGg9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKF8pe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIGFrZShjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlv''@;'; put 'put ''bj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksdjIodGhpcyl9LGN9KF8pKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30pLGwuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLGYsaCksZ2srPTEsKCk9Pnt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgXyxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10aGlzLmNv''@;'; put 'put ''bnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYoZi09MSxfPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSxfLmV2ZW50PT09YSYmXy5lbGVtZW50PT09bCl7aWYoZCYmZCE9PV8uY2FsbGJhY2t8fGgmJl8uZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlz''@;'; put 'put ''LmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksXy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXy5ldmVudCxfLmNhbGxiYWNrUHJveHksXy5vcHRpb25zKSxnay09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0''@;'; put 'put ''aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSksZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxnay09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFyRXZlbnRz''@;'; put 'put ''KCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVudDpsLGg9''@;'; put 'put ''ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5jZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0''@;'; put 'put ''dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCBfO2QuY3JlYXRlRXZlbnQ/KF89ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSxfLmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxmLmNsaWVu''@;'; put 'put ''dFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6Xz1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudChfKTpsLmZpcmVF''@;'; put 'put ''dmVudChgb24ke2F9YCxfKX19LG1rPSJlZGl0b3JNYW5hZ2VyLm5hdmlnYXRpb24iLGN5PSJlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtjbGFzcyBBTntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMudGFibGVNZXRhPWEsdGhpcy5zZWxlY3Rpb249ZCx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlcj1uZXcgbGwobCksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5sb2NrPSExLHRoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMCx0aGlzLmNlbGxQcm9wZXJ0aWVzPXZvaWQgMCx0aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLmFkZENvbnRleHQoImVkaXRvciIpLHRo''@;'; put 'put ''aXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmluc3RhbmNlLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixmPT50aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oZikpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0IixmPT57IXRoaXMuZGVzdHJveWVkJiZ0aGlzLmluc3RhbmNlLmlzTGlzdGVuaW5nKCkmJnRoaXMub3BlbkVkaXRvcigiIixmKX0pLHRoaXMuaW5zdGFuY2Uudmlldy5fd3QudXBkYXRlKCJvbkNlbGxEYmxDbGljayIsKGYsXyxUKT0+''@;'; put 'put ''dGhpcy5vbkNlbGxEYmxDbGljayhmLF8sVCkpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlkIiksZD1sLmdldENvbnRleHQoImVkaXRvciIpLGg9e2dyb3VwOmN5fTtkLmFkZFNob3J0Y3V0''@;'; put 'put ''cyhbe2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIl0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSIsIlNoaWZ0Il1dLGNhbGxiYWNrOihmLF8pPT57dGhpcy5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwuaXNDdHJsUHJlc3NlZCgpKSx0''@;'; put 'put ''aGlzLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKF8uaW5jbHVkZXMoInNoaWZ0IikpfX0se2tleXM6W1siRXNjYXBlIl0sWyJFc2NhcGUiLCJDb250cm9sL01ldGEiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobC5pc0N0cmxQcmVzc2Vk''@;'; put 'put ''KCkpLHRoaXMuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fV0saCksYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkYyIl1dLGNhbGxiYWNrOmY9Pnt0aGlzLm9wZW5FZGl0b3IobnVsbCxmLCEwKX19LHtrZXlzOltbIkJhY2tzcGFjZSJdLFsiRGVsZXRlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0''@;'; put 'put ''YW5jZS5lbXB0eVNlbGVjdGVkQ2VsbHMoKSx0aGlzLnByZXBhcmVFZGl0b3IoKX19LHtrZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihmLF8pPT57dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz90aGlzLmNlbGxQcm9wZXJ0''@;'; put 'put ''aWVzLnJlYWRPbmx5P3RoaXMubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIoKTp0aGlzLm9wZW5FZGl0b3IobnVsbCxmLCEwKTp0aGlzLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKF8uaW5jbHVkZXMoInNoaWZ0IikpLHYyKGYpfX1dLHsuLi5oLHJ1bk9ubHlJZjooKT0+S2kodGhpcy5pbnN0YW5j''@;'; put 'put ''ZS5nZXRTZWxlY3RlZCgpKX0pfWxvY2tFZGl0b3IoKXt0aGlzLmxvY2s9ITB9dW5sb2NrRWRpdG9yKCl7dGhpcy5sb2NrPSExfWRlc3Ryb3lFZGl0b3IobCl7dGhpcy5sb2NrfHx0aGlzLmNsb3NlRWRpdG9yKGwpfWdldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1w''@;'; put 'put ''cmVwYXJlRWRpdG9yKCl7aWYodGhpcy5sb2NrKXJldHVybjtpZih0aGlzLmFjdGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZUVkaXRvcighMSwhMSxXPT57VyYmdGhpcy5wcmVwYXJlRWRpdG9yKCl9KTtjb25zdHtyb3c6bCxj''@;'; put 'put ''b2w6YX09dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCxkPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGwsYSk7bGV0IGg9bCxmPWE7QXJyYXkuaXNBcnJheShkKSYmKFtoLGZdPWQpLHRoaXMuY2VsbFByb3BlcnRpZXM9''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShoLGYpO2NvbnN0e2FjdGl2ZUVsZW1lbnQ6X309dGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQ7aWYoXyYmc2soXykmJl8uYmx1cigpLCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2Nv''@;'; put 'put ''bnN0IFQ9dGhpcy5pbnN0YW5jZS5nZXRDZWxsKGwsYSwhMCk7aWYoVCl7Y29uc3QgVz10aGlzLmluc3RhbmNlLmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcyksaWU9dGhpcy5pbnN0YW5jZS5jb2xUb1Byb3AoZiksZ2U9dGhpcy5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhQXRDZWxs''@;'; put 'put ''KHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhoKSxmKTt0aGlzLmFjdGl2ZUVkaXRvcj1BdGUoVyx0aGlzLmluc3RhbmNlKSx0aGlzLmFjdGl2ZUVkaXRvci5wcmVwYXJlKGwsYSxpZSxULGdlLHRoaXMuY2VsbFByb3BlcnRpZXMpfX1pc0VkaXRvck9wZW5lZCgpe3JldHVybiB0aGlzLmFj''@;'; put 'put ''dGl2ZUVkaXRvciYmdGhpcy5hY3RpdmVFZGl0b3IuaXNPcGVuZWQoKX1vcGVuRWRpdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZih0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpe2lmKCF0aGlzLmFjdGl2ZUVkaXRv''@;'; put 'put ''cil7Y29uc3R7cm93OmgsY29sOmZ9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQsXz10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVD10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7dGhpcy5pbnN0YW5jZS52aWV3LnNjcm9sbFZpZXdwb3J0KHRoaXMuaW5zdGFuY2UuX2NyZWF0ZUNlbGxDb29yZHMoXyxUKSksdGhpcy5pbnN0YW5jZS52aWV3LnJlbmRlcigpLHRoaXMucHJlcGFyZUVkaXRvcigpfXRoaXMuYWN0aXZl''@;'; put 'put ''RWRpdG9yJiYoZCYmdGhpcy5hY3RpdmVFZGl0b3IuZW5hYmxlRnVsbEVkaXRNb2RlKCksdGhpcy5hY3RpdmVFZGl0b3IuYmVnaW5FZGl0aW5nKGwsYSkpfWVsc2UgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpfWNsb3NlRWRpdG9yKGwsYSxkKXt0aGlzLmFjdGl2ZUVkaXRvcj90aGlzLmFjdGl2''@;'; put 'put ''ZUVkaXRvci5maW5pc2hFZGl0aW5nKGwsYSxkKTpkJiZkKCExKX1jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwpe3RoaXMuY2xvc2VFZGl0b3IoITEsbCl9Y2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShsKXt0aGlzLmNsb3NlRWRpdG9yKCEwLGwpfWNsZWFyQWN0aXZlRWRp''@;'; put 'put ''dG9yKCl7dGhpcy5hY3RpdmVFZGl0b3I9dm9pZCAwfWlzQ2VsbEVkaXRhYmxlKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzphLGNvbDpkfT10aGlzLmluc3RhbmNlLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0''@;'; put 'put ''LHtyb3dJbmRleE1hcHBlcjpoLGNvbHVtbkluZGV4TWFwcGVyOmZ9PXRoaXMuaW5zdGFuY2UsXz1oLmlzSGlkZGVuKHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhhKSl8fGYuaXNIaWRkZW4odGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsQ29sdW1uKGQpKTtyZXR1cm4hKHRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMucmVhZE9ubHl8fCFsfHxfKX1tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKXtjb25zdCBhPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzP3RoaXMudGFibGVNZXRhLmVudGVyTW92ZXMoZXZlbnQpOnRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM7''@;'; put 'put ''bD90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5yb3csLWEuY29sKTp0aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLnJvdyxhLmNvbCwhMCl9b25BZnRlckRvY3VtZW50S2V5RG93bihsKXtpZighdGhpcy5pbnN0YW5jZS5pc0xpc3RlbmluZygpKXJldHVybjtjb25zdHtr''@;'; put 'put ''ZXlDb2RlOmF9PWw7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD0obC5jdHJsS2V5fHxsLm1ldGFLZXkpJiYhbC5hbHRLZXk7dGhpcy5hY3RpdmVFZGl0b3ImJighdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXx8''@;'; put 'put ''Q04oYSl8fE10ZShhKXx8ZHx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwodGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVj''@;'; put 'put ''dGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVj''@;'; put 'put ''dGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKnRoaXMuaW5zdGFuY2UuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsdGhpcy5pbnN0YW5jZS5nZXREaXJlY3Rp''@;'; put 'put ''b25GYWN0b3IoKSl9fV0se3J1bk9ubHlJZjooKT0+S2kodGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZCgpKSxncm91cDpta30pLHRoaXMub3BlbkVkaXRvcigiIixsKSl9b25DZWxsRGJsQ2xpY2sobCxhLGQpeyJURCI9PT1kLm5vZGVOYW1lJiZ0aGlzLm9wZW5FZGl0b3IobnVsbCxsLCEwKX1k''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jb25zdCBUdGU9bmV3IFdlYWtNYXA7QU4uZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPVR0ZS5nZXQoYyk7cmV0dXJuIGR8fChkPW5ldyBBTihjLGwsYSksVHRlLnNldChjLGQp''@;'; put 'put ''KSxkfTtjb25zdCBja2U9QU4sRHRlPXsiJm5ic3A7IjoiICIsIiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4ifSx1a2U9bmV3IFJlZ0V4cChPYmplY3Qua2V5cyhEdGUpLm1hcChjPT5gKCR7Y30pYCkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIFROKGMpe2NvbnN0IGw9Yy5oYXND''@;'; put 'put ''b2xIZWFkZXJzKCksYT1jLmhhc1Jvd0hlYWRlcnMoKSxkPVtsPy0xOjAsYT8tMTowLGMuY291bnRSb3dzKCktMSxjLmNvdW50Q29scygpLTFdLGg9Yy5nZXREYXRhKC4uLmQpLGY9aC5sZW5ndGgsXz1mPjA/aFswXS5sZW5ndGg6MCxUPVsiPHRhYmxlPiIsIjwvdGFibGU+Il0sVz1sP1siPHRo''@;'; put 'put ''ZWFkPiIsIjwvdGhlYWQ+Il06W10saWU9WyI8dGJvZHk+IiwiPC90Ym9keT4iXSxnZT1hPzE6MCx3ZT1sPzE6MDtmb3IobGV0IEVlPTA7RWU8ZjtFZSs9MSl7Y29uc3QgWmU9bCYmMD09PUVlLG90PVtdO2ZvcihsZXQgeXQ9MDt5dDxfO3l0Kz0xKXtjb25zdCBrdD0hWmUmJmEmJjA9PT15dDts''@;'; put 'put ''ZXQgU3Q9IiI7aWYoWmUpU3Q9YDx0aD4ke2MuZ2V0Q29sSGVhZGVyKHl0LWdlKX08L3RoPmA7ZWxzZSBpZihrdClTdD1gPHRoPiR7Yy5nZXRSb3dIZWFkZXIoRWUtd2UpfTwvdGg+YDtlbHNle2NvbnN0IFF0PWhbRWVdW3l0XSx7aGlkZGVuOnJuLHJvd3NwYW46dm4sY29sc3BhbjpObn09Yy5n''@;'; put 'put ''ZXRDZWxsTWV0YShFZS13ZSx5dC1nZSk7aWYoIXJuKXtjb25zdCBjcj1bXTtpZih2biYmY3IucHVzaChgcm93c3Bhbj0iJHt2bn0iYCksTm4mJmNyLnB1c2goYGNvbHNwYW49IiR7Tm59ImApLHBjKFF0KSlTdD1gPHRkICR7Y3Iuam9pbigiICIpfT48L3RkPmA7ZWxzZXtjb25zdCBEcj1RdC50''@;'; put 'put ''b1N0cmluZygpLnJlcGxhY2UoIjwiLCImbHQ7IikucmVwbGFjZSgiPiIsIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7U3Q9YDx0ZCAk''@;'; put 'put ''e2NyLmpvaW4oIiAiKX0+JHtEcn08L3RkPmB9fX1vdC5wdXNoKFN0KX1jb25zdCBldD1bIjx0cj4iLC4uLm90LCI8L3RyPiJdLmpvaW4oIiIpO1plP1cuc3BsaWNlKDEsMCxldCk6aWUuc3BsaWNlKC0xLDAsZXQpfXJldHVybiBULnNwbGljZSgxLDAsVy5qb2luKCIiKSxpZS5qb2luKCIiKSks''@;'; put 'put ''VC5qb2luKCIiKX1mdW5jdGlvbiBETihjKXtjb25zdCBsPWMubGVuZ3RoLGE9WyI8dGFibGU+Il07Zm9yKGxldCBkPTA7ZDxsO2QrPTEpe2NvbnN0IGg9Y1tkXSxmPWgubGVuZ3RoLF89W107MD09PWQmJmEucHVzaCgiPHRib2R5PiIpO2ZvcihsZXQgVD0wO1Q8ZjtUKz0xKXtjb25zdCBXPWhb''@;'; put 'put ''VF0saWU9cGMoVyk/IiI6Vy50b1N0cmluZygpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLnJlcGxhY2UoLyg8YnIoXHMqfFwvKT4oXHJcbnxcbik/fFxyXG58XG4pL2csIjxicj5cclxuIikucmVwbGFjZSgvXHgyMHsyLH0vZ2ksZ2U9PmA8c3BhbiBzdHlsZT0i''@;'; put 'put ''bXNvLXNwYWNlcnVuOiB5ZXMiPiR7IiZuYnNwOyIucmVwZWF0KGdlLmxlbmd0aC0xKX0gPC9zcGFuPmApLnJlcGxhY2UoL1x0L2dpLCImIzk7Iik7Xy5wdXNoKGA8dGQ+JHtpZX08L3RkPmApfWEucHVzaCgiPHRyPiIsLi4uXywiPC90cj4iKSxkKzE9PT1sJiZhLnB1c2goIjwvdGJvZHk+Iil9''@;'; put 'put ''cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIEl0ZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1lbnQ7Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9''@;'; put 'put ''bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKGgpO2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCBRdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0ZD4vZyxybj0+e2NvbnN0IHZuPXJuLm1hdGNoKC88dGRcYltePl0qPz4vZylb''@;'; put 'put ''MF07cmV0dXJuYCR7dm59JHtybi5zdWJzdHJpbmcodm4ubGVuZ3RoLHJuLmxhc3RJbmRleE9mKCI8IikpLnJlcGxhY2UoLyg8KD8hYnIpKFtePl0rKT4pL2dpLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7UXR9YCksZj1oLnF1ZXJ5U2VsZWN0b3Io''@;'; put 'put ''InRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiBka2UoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5vZGVOYW1lfHwiIil9KGYpKXJldHVybjtjb25zdCBfPWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLFQ9bnVsbCE9PWYucXVlcnlTZWxlY3RvcigidGJvZHkgdGgi''@;'; put 'put ''KSxXPWYucXVlcnlTZWxlY3RvcigidHIiKSxpZT1XP0FycmF5LmZyb20oVy5jZWxscykucmVkdWNlKChRdCxybik9PlF0K3JuLmNvbFNwYW4sMCktKFQ/MTowKTowLGdlPWYudEZvb3QmJkFycmF5LmZyb20oZi50Rm9vdC5yb3dzKXx8W10sd2U9W107bGV0IEVlPSExLFplPTAsb3Q9MDtpZihm''@;'; put 'put ''LnRIZWFkKXtjb25zdCBRdD1BcnJheS5mcm9tKGYudEhlYWQucm93cykuZmlsdGVyKHJuPT57Y29uc3Qgdm49bnVsbCE9PXJuLnF1ZXJ5U2VsZWN0b3IoInRkIik7cmV0dXJuIHZuJiZ3ZS5wdXNoKHJuKSwhdm59KTtaZT1RdC5sZW5ndGgsRWU9WmU+MCxaZT4xP2EubmVzdGVkSGVhZGVycz1B''@;'; put 'put ''cnJheS5mcm9tKFF0KS5yZWR1Y2UoKHJuLHZuKT0+e2NvbnN0IE5uPUFycmF5LmZyb20odm4uY2VsbHMpLnJlZHVjZSgoY3IsRHIsX2kpPT57aWYoVCYmMD09PV9pKXJldHVybiBjcjtjb25zdHtjb2xTcGFuOmxpLGlubmVySFRNTDptcn09RHI7cmV0dXJuIGNyLnB1c2gobGk+MT97bGFiZWw6''@;'; put 'put ''bXIsY29sc3BhbjpsaX06bXIpLGNyfSxbXSk7cmV0dXJuIHJuLnB1c2goTm4pLHJufSxbXSk6RWUmJihhLmNvbEhlYWRlcnM9QXJyYXkuZnJvbShRdFswXS5jaGlsZHJlbikucmVkdWNlKChybix2bixObik9PihUJiYwPT09Tm58fHJuLnB1c2godm4uaW5uZXJIVE1MKSxybiksW10pKX13ZS5s''@;'; put 'put ''ZW5ndGgmJihhLmZpeGVkUm93c1RvcD13ZS5sZW5ndGgpLGdlLmxlbmd0aCYmKGEuZml4ZWRSb3dzQm90dG9tPWdlLmxlbmd0aCk7Y29uc3QgZXQ9Wy4uLndlLC4uLkFycmF5LmZyb20oZi50Qm9kaWVzKS5yZWR1Y2UoKFF0LHJuKT0+KFF0LnB1c2goLi4uQXJyYXkuZnJvbShybi5yb3dzKSks''@;'; put 'put ''UXQpLFtdKSwuLi5nZV07b3Q9ZXQubGVuZ3RoO2NvbnN0IHl0PW5ldyBBcnJheShvdCk7Zm9yKGxldCBRdD0wO1F0PG90O1F0KyspeXRbUXRdPW5ldyBBcnJheShpZSk7Y29uc3Qga3Q9W10sU3Q9W107Zm9yKGxldCBRdD0wO1F0PG90O1F0Kyspe2NvbnN0IHZuPUFycmF5LmZyb20oZXRbUXRd''@;'; put 'put ''LmNlbGxzKSxObj12bi5sZW5ndGg7Zm9yKGxldCBjcj0wO2NyPE5uO2NyKyspe2NvbnN0IERyPXZuW2NyXSx7bm9kZU5hbWU6X2ksaW5uZXJIVE1MOmxpLHJvd1NwYW46bXIsY29sU3BhbjpFaX09RHIsWnI9eXRbUXRdLmZpbmRJbmRleChGbj0+dm9pZCAwPT09Rm4pO2lmKCJURCI9PT1faSl7''@;'; put 'put ''aWYobXI+MXx8RWk+MSl7Zm9yKGxldCBNcj1RdDtNcjxRdCttcjtNcisrKWlmKE1yPG90KWZvcihsZXQgX3I9WnI7X3I8WnIrRWk7X3IrKyl5dFtNcl1bX3JdPW51bGw7Y29uc3QgRnI9RHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO0ZyJiZGci5pbmNsdWRlcygibXNvLWlnbm9yZTpjb2xzcGFu''@;'; put 'put ''Iil8fGt0LnB1c2goe2NvbDpacixyb3c6UXQscm93c3Bhbjptcixjb2xzcGFuOkVpfSl9bGV0IEZuPSIiO0ZuPV8mJi9leGNlbC9naS50ZXN0KF8uY29udGVudCk/bGkucmVwbGFjZSgvW1xyXG5dW1x4MjBdezAsMn0vZywiICIpLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT9bXHgyMF17''@;'; put 'put ''MCwzfS9naW0sIlxyXG4iKTpsaS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/L2dpbSwiXHJcbiIpLHl0W1F0XVtacl09Rm4ucmVwbGFjZSh1a2UsRnI9PkR0ZVtGcl0pfWVsc2UgU3QucHVzaChsaSl9fXJldHVybiBrdC5sZW5ndGgmJihhLm1lcmdlQ2VsbHM9a3QpLFN0Lmxlbmd0aCYm''@;'; put 'put ''KGEucm93SGVhZGVycz1TdCkseXQubGVuZ3RoJiYoYS5kYXRhPXl0KSxhfWZ1bmN0aW9uIEd1KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtjb25zdCBhPXR5cGVvZiBjO2lmKCJudW1iZXIiPT09YSlyZXR1cm4haXNO''@;'; put 'put ''YU4oYykmJmlzRmluaXRlKGMpO2lmKCJzdHJpbmciPT09YSl7aWYoMD09PWMubGVuZ3RoKXJldHVybiExO2lmKDE9PT1jLmxlbmd0aClyZXR1cm4vXGQvLnRlc3QoYyk7Y29uc3QgZD1BcnJheS5mcm9tKG5ldyBTZXQoWyIuIiwuLi5sXSkpLm1hcChoPT5gXFwke2h9YCkuam9pbigifCIpO3Jl''@;'; put 'put ''dHVybiBuZXcgUmVnRXhwKGBeWystXT9cXHMqKCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMudmFsdWVPZigpfHxjIGlu''@;'; put 'put ''c3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gTHRlKGMpe3JldHVybiBHdShjLFsiLCJdKX1mdW5jdGlvbiB2byhjLGwsYSl7bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiB2ayhjLGwsYSl7bGV0IGQ9''@;'; put 'put ''YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIElOKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJbnQoYypsLzEwMCwxMCl9''@;'; put 'put ''Y29uc3QgUnRlPW5ldyBNYXAoW1siYXNjIixbLTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLGZrZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmAscGtlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIG5vdCBhIG51bWJlci5gLG1rZT1jPT5g''@;'; put 'put ''VGhlIGlkICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gX2soKXtsZXR7ZXJyb3JJZEV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgTWFwO2Z1bmN0aW9uIFQo''@;'; put 'put ''KXtyZXR1cm5bLi4ubF19ZnVuY3Rpb24gVyhpZSl7cmV0dXJuIGwuaGFzKGllKX1yZXR1cm4gYz1SYShjKT9jOm1rZSx7YWRkSXRlbTpmdW5jdGlvbiBhKGllLGdlKXtpZihXKGllKSl0aHJvdyBuZXcgRXJyb3IoYyhpZSkpO2wuc2V0KGllLGdlKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xl''@;'; put 'put ''YXIoKX0sZ2V0SWQ6ZnVuY3Rpb24gZihpZSl7Y29uc3RbZ2VdPVQoKS5maW5kKHdlPT57bGV0W0VlLFplXT13ZTtyZXR1cm4gaWU9PT1aZSYmRWV9KXx8W251bGxdO3JldHVybiBnZX0sZ2V0SXRlbTpmdW5jdGlvbiBfKGllKXtyZXR1cm4gbC5nZXQoaWUpfSxnZXRJdGVtczpULGhhc0l0ZW06''@;'; put 'put ''VyxyZW1vdmVJdGVtOmZ1bmN0aW9uIGQoaWUpe3JldHVybiBsLmRlbGV0ZShpZSl9fX1jb25zdCB2a2U9Yz0+YCcke2N9JyB2YWx1ZSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLFJOPWM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7Y30iIHBsdWdpbi5g''@;'; put 'put ''LE90ZT1mdW5jdGlvbiBna2UoKXtsZXR7ZXJyb3JQcmlvcml0eUV4aXN0czpjLGVycm9yUHJpb3JpdHlOYU46bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYz1SYShjKT9jOmZrZSxsPVJh''@;'; put 'put ''KGwpP2w6cGtlLHthZGRJdGVtOmZ1bmN0aW9uIGQoZixfKXtpZighR3UoZikpdGhyb3cgbmV3IEVycm9yKGwoZikpO2lmKGEuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTthLnNldChmLF8pfSxnZXRJdGVtczpmdW5jdGlvbiBoKCl7bGV0IGY9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2NvbnN0W18sVF09UnRlLmdldChmKXx8UnRlLmdldCgiYXNjIik7cmV0dXJuWy4uLmFdLnNvcnQoKFcsaWUpPT5XWzBdPGllWzBdP186VCkubWFwKFc9PldbMV0pfX19KHtlcnJvclByaW9yaXR5RXhpc3RzOmM9PmBUaGVyZSBp''@;'; put 'put ''cyBhbHJlYWR5IHJlZ2lzdGVyZWQgcGx1Z2luIG9uIHByaW9yaXR5ICIke2N9Ii5gLGVycm9yUHJpb3JpdHlOYU46Yz0+YFRoZSBwcmlvcml0eSAiJHtjfSIgaXMgbm90IGEgbnVtYmVyLmB9KSxQdGU9ZnVuY3Rpb24gX2tlKCl7bGV0e2Vycm9ySXRlbUV4aXN0czpjfT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgU2V0O3JldHVybiBjPVJhKGMpP2M6dmtlLHthZGRJdGVtOmZ1bmN0aW9uIGEoZil7aWYobC5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2wuYWRkKGYpfSxjbGVhcjpmdW5jdGlvbiBo''@;'; put 'put ''KCl7bC5jbGVhcigpfSxnZXRJdGVtczpmdW5jdGlvbiBkKCl7cmV0dXJuWy4uLmxdfX19KHtlcnJvckl0ZW1FeGlzdHM6Uk59KSxPTj1fayh7ZXJyb3JJZEV4aXN0czpSTn0pO2Z1bmN0aW9uIFBOKCl7cmV0dXJuWy4uLk90ZS5nZXRJdGVtcygpLC4uLlB0ZS5nZXRJdGVtcygpXX1mdW5jdGlv''@;'; put 'put ''biB1eShjKXtjb25zdCBsPWJ1KGMpO3JldHVybiBPTi5nZXRJdGVtKGwpfWZ1bmN0aW9uIGpzKGMsbCxhKXtbYyxsLGFdPWZ1bmN0aW9uIHdrZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPShsPWMpLlBMVUdJTl9LRVksYT1sLlBMVUdJTl9QUklPUklUWSksW2MsbCxh''@;'; put 'put ''XX0oYyxsLGEpLHZvaWQgMD09PXV5KGMpJiZmdW5jdGlvbiB5a2UoYyxsLGEpe2NvbnN0IGQ9YnUoYyk7aWYoT04uaGFzSXRlbShkKSl0aHJvdyBuZXcgRXJyb3IoUk4oZCkpO3ZvaWQgMD09PWE/UHRlLmFkZEl0ZW0oZCk6T3RlLmFkZEl0ZW0oYSxkKSxPTi5hZGRJdGVtKGQsbCl9KGMsbCxh''@;'; put 'put ''KX1jb25zdHtyZWdpc3RlcjpDa2UsZ2V0SXRlbTpTa2UsaGFzSXRlbTpGdGUsZ2V0TmFtZXM6TWtlfT1wZCgicmVuZGVyZXJzIik7ZnVuY3Rpb24gYmsoYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIUZ0ZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCByZW5k''@;'; put 'put ''ZXJlciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBTa2UoYyl9ZnVuY3Rpb24gcGgoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlJFTkRFUkVSX1RZUEUpLENrZShjLGwpfWNvbnN0e3JlZ2lzdGVyOnhrZSxnZXRJdGVtOkVrZSxoYXNJdGVtOkh0ZSxnZXROYW1l''@;'; put 'put ''czpra2V9PXBkKCJ2YWxpZGF0b3JzIik7ZnVuY3Rpb24gRk4oYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIUh0ZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gRWtlKGMpfWZ1bmN0''@;'; put 'put ''aW9uIGE3KGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5WQUxJREFUT1JfVFlQRSkseGtlKGMsbCl9ZnVuY3Rpb24geWsoYyl7cmV0dXJuIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gZHkoYyl7d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGMp''@;'; put 'put ''fWZ1bmN0aW9uIEhOKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiB3aW5kb3d9bGV0IGw3O2Z1bmN0aW9uIE50ZShjKXtyZXR1cm4gbDd8fChsNz0ib2JqZWN0Ij09dHlwZW9mIEludGw/bmV3IEludGwuQ29sbGF0b3IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06e30pLmNvbXBhcmU6ImZ1bmN0aW9uIj09dHlwZW9mIFN0cmluZy5wcm90b3R5cGUubG9jYWxlQ29tcGFyZT8oYSxkKT0+YCR7YX1gLmxvY2FsZUNvbXBhcmUoZCk6KGEsZCk9PmE9PT1kPzA6YT5kPy0xOjEsbDcpfWNvbnN0IGM3PW5ldyBXZWFrTWFwLFZ0ZT1jbGFz''@;'; put 'put ''cyBBa2V7Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe2xldCBUPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJndW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsO3RoaXMud3RTZXR0aW5ncz1kLHRoaXMuZG9tQmluZGluZ3M9YSx0aGlzLnd0VGFibGU9Zix0aGlzLnNlbGVjdGlvbnM9''@;'; put 'put ''Xyx0aGlzLnBhcmVudD1ULHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5mYWNhZGVHZXR0ZXI9bCxjNy5zZXQodGhpcyx7c2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQ6dm9pZCAwLGRibENsaWNrVGltZW91dDpbbnVsbCxudWxsXSxkYmxDbGlja09yaWdpbjpbbnVsbCxudWxsXX0pLHRoaXMu''@;'; put 'put ''cmVnaXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwiY29udGV4dG1lbnUiLGQ9PnRoaXMub25Db250ZXh0TWVudShkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0''@;'; put 'put ''aGlzLnd0VGFibGUuVEFCTEUsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuVEFCTEUsIm1vdXNlb3V0IixkPT50aGlzLm9uTW91c2VPdXQoZCkpO2NvbnN0IGw9KCk9Pnt0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInRvdWNoc3RhcnQiLGQ9PnRoaXMub25Ub3VjaFN0YXJ0KGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInRvdWNoZW5kIixkPT50aGlzLm9uVG91Y2hF''@;'; put 'put ''bmQoZCkpLHRoaXMubW9tZW50dW1TY3JvbGxpbmd8fCh0aGlzLm1vbWVudHVtU2Nyb2xsaW5nPXt9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsInNjcm9sbCIsKCk9PntjbGVhclRpbWVvdXQodGhpcy5tb21lbnR1bVNjcm9sbGluZy5f''@;'; put 'put ''dGltZW91dCksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVUb3VjaFNjcm9sbCIpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRpbWVv''@;'; put 'put ''dXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25BZnRlck1vbWVudHVtU2Nyb2xsIikpfSwyMDApfSl9O20yKCk/bCgpOihITigpJiZsKCksKCgpPT57dGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJtb3VzZXVwIixkPT50aGlzLm9uTW91c2VVcChkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpfSko''@;'; put 'put ''KSl9c2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChsKXtjb25zdCBhPWM3LmdldCh0aGlzKSxoPXRoaXMucGFyZW50Q2VsbChsKS5jb29yZHM7aWYoYS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZCYmaCl7Y29uc3RbZixfXT1baC5yb3csYS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZC5mcm9t''@;'; put 'put ''LnJvd10sW1QsV109W2guY29sLGEuc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQuZnJvbS5jb2xdO3JldHVybiBmPT09XyYmVD09PVd9cmV0dXJuITF9cGFyZW50Q2VsbChsKXtjb25zdCBhPXt9LGg9dHkobCxbIlREIiwiVEgiXSx0aGlzLnd0VGFibGUuVEFCTEUpO3JldHVybiBoPyhhLmNv''@;'; put 'put ''b3Jkcz10aGlzLnd0VGFibGUuZ2V0Q29vcmRzKGgpLGEuVEQ9aCk6Qm8obCwid3RCb3JkZXIiKSYmQm8obCwiY3VycmVudCIpPyhhLmNvb3Jkcz10aGlzLnNlbGVjdGlvbnMuZ2V0Q2VsbCgpLmNlbGxSYW5nZS5oaWdobGlnaHQsYS5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChhLmNvb3Jkcykp''@;'; put 'put ''OkJvKGwsInd0Qm9yZGVyIikmJkJvKGwsImFyZWEiKSYmdGhpcy5zZWxlY3Rpb25zLmNyZWF0ZU9yR2V0QXJlYSgpLmNlbGxSYW5nZSYmKGEuY29vcmRzPXRoaXMuc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKS5jZWxsUmFuZ2UudG8sYS5URD10aGlzLnd0VGFibGUuZ2V0Q2VsbChhLmNv''@;'; put 'put ''b3JkcykpLGF9b25Nb3VzZURvd24obCl7Y29uc3QgYT1jNy5nZXQodGhpcyksZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGg9dk4oaXRlLGwudGFyZ2V0KSxmPWwudGFyZ2V0O2lmKGY9PT1kfHxoKDApPT09ZHx8aCgxKT09PWQpcmV0dXJuO2NvbnN0IF89''@;'; put 'put ''dGhpcy5wYXJlbnRDZWxsKGYpO0JvKGYsImNvcm5lciIpP3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLGwsZik6Xy5URCYmdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VEb3duIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3Vz''@;'; put 'put ''ZURvd24iLGwsXy5jb29yZHMsXy5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiZfLlREJiYoYS5kYmxDbGlja09yaWdpblswXT1fLlRELGNsZWFyVGltZW91dChhLmRibENsaWNrVGltZW91dFswXSksYS5kYmxDbGlja1RpbWVvdXRbMF09c2V0VGltZW91dCgoKT0+e2Eu''@;'; put 'put ''ZGJsQ2xpY2tPcmlnaW5bMF09bnVsbH0sMWUzKSl9b25Db250ZXh0TWVudShsKXtpZih0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbENvbnRleHRN''@;'; put 'put ''ZW51IixsLGEuY29vcmRzLGEuVEQpfX1vbk1vdXNlT3ZlcihsKXtpZighdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VPdmVyIikpcmV0dXJuO2NvbnN0IGE9dGhpcy53dFRhYmxlLlRBQkxFLGQ9dHkobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD10aGlzLnBhcmVudHx8dGhpcztk''@;'; put 'put ''JiZkIT09aC5sYXN0TW91c2VPdmVyJiZWcChkLGEpJiYoaC5sYXN0TW91c2VPdmVyPWQsdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3ZlciIsbCx0aGlzLnd0VGFibGUuZ2V0Q29vcmRzKGQpLGQpKX1vbk1vdXNlT3V0KGwpe2lmKCF0aGlzLnd0U2V0dGluZ3MuaGFzKCJvbkNlbGxN''@;'; put 'put ''b3VzZU91dCIpKXJldHVybjtjb25zdCBhPXRoaXMud3RUYWJsZS5UQUJMRSxkPXR5KGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9dHkobC5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGY9dGhpcy5wYXJlbnR8fHRoaXM7ZCYmZCE9PWgmJlZwKGQsYSkmJih0aGlzLmNhbGxMaXN0ZW5l''@;'; put 'put ''cigib25DZWxsTW91c2VPdXQiLGwsdGhpcy53dFRhYmxlLmdldENvb3JkcyhkKSxkKSxudWxsPT09aCYmKGYubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKGwpe2NvbnN0IGE9YzcuZ2V0KHRoaXMpLGQ9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTtkLlREJiZ0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuaGFzKCJvbkNlbGxNb3VzZVVwIikmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZVVwIixsLGQuY29vcmRzLGQuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmKGQuVEQ9PT1hLmRibENsaWNrT3JpZ2luWzBdJiZkLlREPT09YS5kYmxDbGlja09yaWdpblsx''@;'; put 'put ''XT8oQm8obC50YXJnZXQsImNvcm5lciIpP3RoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb3JuZXJEYmxDbGljayIsbCxkLmNvb3JkcyxkLlREKTp0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsRGJsQ2xpY2siLGwsZC5jb29yZHMsZC5URCksYS5kYmxDbGlja09yaWdpblswXT1udWxsLGEuZGJs''@;'; put 'put ''Q2xpY2tPcmlnaW5bMV09bnVsbCk6ZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMF0mJihhLmRibENsaWNrT3JpZ2luWzFdPWQuVEQsY2xlYXJUaW1lb3V0KGEuZGJsQ2xpY2tUaW1lb3V0WzFdKSxhLmRibENsaWNrVGltZW91dFsxXT1zZXRUaW1lb3V0KCgpPT57YS5kYmxDbGlja09yaWdpblsx''@;'; put 'put ''XT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KGwpe2M3LmdldCh0aGlzKS5zZWxlY3RlZENlbGxCZWZvcmVUb3VjaEVuZD10aGlzLnNlbGVjdGlvbnMuZ2V0Q2VsbCgpLmNlbGxSYW5nZSx0aGlzLnRvdWNoQXBwbGllZD0hMCx0aGlzLm9uTW91c2VEb3duKGwpfW9uVG91Y2hFbmQobCl7dmFy''@;'; put 'put ''IGE7Y29uc3QgZD1sLnRhcmdldCxoPW51bGw9PT0oYT10aGlzLnBhcmVudENlbGwoZCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmNvb3JkcyxmPUtpKGgpJiZoLnJvdz49MCYmaC5jb2w+PTA7aWYobC5jYW5jZWxhYmxlJiZmJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiaXNEYXRhVmll''@;'; put 'put ''d0luc3RhbmNlIikpe2NvbnN0IFQ9WyJBIiwiQlVUVE9OIiwiSU5QVVQiXTtiTigpJiYoeXRlKCl8fHd0ZSgpKSYmdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpJiYhVC5pbmNsdWRlcyhkLnRhZ05hbWUpP2wucHJldmVudERlZmF1bHQoKTp0aGlzLnNlbGVjdGVkQ2VsbFdhc1RvdWNo''@;'; put 'put ''ZWQoZCl8fGwucHJldmVudERlZmF1bHQoKX10aGlzLm9uTW91c2VVcChsKSx0aGlzLnRvdWNoQXBwbGllZD0hMX1jYWxsTGlzdGVuZXIobCxhLGQsaCl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUobCk7ZiYmZihhLGQsaCx0aGlzLmZhY2FkZUdldHRlcigpKX1kZXN0''@;'; put 'put ''cm95KCl7Y29uc3QgbD1jNy5nZXQodGhpcyk7Y2xlYXJUaW1lb3V0KGwuZGJsQ2xpY2tUaW1lb3V0WzBdKSxjbGVhclRpbWVvdXQobC5kYmxDbGlja1RpbWVvdXRbMV0pLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19O2NsYXNzIEJ0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3VycmVudFNp''@;'; put 'put ''emU9MCx0aGlzLm5leHRTaXplPTAsdGhpcy5jdXJyZW50T2Zmc2V0PTAsdGhpcy5uZXh0T2Zmc2V0PTB9c2V0U2l6ZShsKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1sfXNldE9mZnNldChsKXt0aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0''@;'; put 'put ''LHRoaXMubmV4dE9mZnNldD1sfX1jbGFzcyBPa2V7Y29uc3RydWN0b3IoKXt0aGlzLnNpemU9bmV3IEJ0ZSx0aGlzLndvcmtpbmdTcGFjZT0wLHRoaXMuc2hhcmVkU2l6ZT1udWxsfXNldFNpemUobCl7dGhpcy5zaXplLnNldFNpemUobCl9c2V0T2Zmc2V0KGwpe3RoaXMuc2l6ZS5zZXRPZmZz''@;'; put 'put ''ZXQobCl9Z2V0Vmlld1NpemUoKXtyZXR1cm4gdGhpcy5zaXplfWlzU2hhcmVkKCl7cmV0dXJuIHRoaXMuc2hhcmVkU2l6ZSBpbnN0YW5jZW9mIEJ0ZX1pc1BsYWNlT24obCl7cmV0dXJuIHRoaXMud29ya2luZ1NwYWNlPT09bH1hcHBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MSxsLndvcmtp''@;'; put 'put ''bmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9cHJlcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0yLGwud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX19Y2xhc3MganRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvb3ROb2Rl''@;'; put 'put ''PWwsdGhpcy5ub2Rlc1Bvb2w9YSx0aGlzLnNpemVTZXQ9bmV3IE9rZSx0aGlzLmNoaWxkTm9kZVR5cGU9ZC50b1VwcGVyQ2FzZSgpLHRoaXMudmlzdWFsSW5kZXg9MCx0aGlzLmNvbGxlY3RlZE5vZGVzPVtdfXNldFNpemUobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRTaXplKGwpLHRoaXN9''@;'; put 'put ''c2V0T2Zmc2V0KGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0T2Zmc2V0KGwpLHRoaXN9aXNTaGFyZWRWaWV3U2V0KCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5pc1NoYXJlZCgpfWdldE5vZGUobCl7cmV0dXJuIGw8dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg/dGhpcy5jb2xsZWN0ZWROb2Rl''@;'; put 'put ''c1tsXTpudWxsfWdldEN1cnJlbnROb2RlKCl7Y29uc3QgbD10aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aDtyZXR1cm4gbD4wP3RoaXMuY29sbGVjdGVkTm9kZXNbbC0xXTpudWxsfWdldFJlbmRlcmVkQ2hpbGRDb3VudCgpe2NvbnN0e3Jvb3ROb2RlOmwsc2l6ZVNldDphfT10aGlzO2xldCBk''@;'; put 'put ''PTA7aWYodGhpcy5pc1NoYXJlZFZpZXdTZXQoKSl7bGV0IGg9bC5maXJzdEVsZW1lbnRDaGlsZDtmb3IoO2g7KXtpZihoLnRhZ05hbWU9PT10aGlzLmNoaWxkTm9kZVR5cGUpZCs9MTtlbHNlIGlmKGEuaXNQbGFjZU9uKDEpKWJyZWFrO2g9aC5uZXh0RWxlbWVudFNpYmxpbmd9fWVsc2UgZD1s''@;'; put 'put ''LmNoaWxkRWxlbWVudENvdW50O3JldHVybiBkfXN0YXJ0KCl7dGhpcy5jb2xsZWN0ZWROb2Rlcy5sZW5ndGg9MCx0aGlzLnZpc3VhbEluZGV4PTA7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXMsZD10aGlzLmlzU2hhcmVkVmlld1NldCgpLHtuZXh0U2l6ZTpofT1hLmdldFZpZXdT''@;'; put 'put ''aXplKCk7bGV0IGY9dGhpcy5nZXRSZW5kZXJlZENoaWxkQ291bnQoKTtmb3IoO2Y8aDspe2NvbnN0IFQ9dGhpcy5ub2Rlc1Bvb2woKTshZHx8ZCYmYS5pc1BsYWNlT24oMik/bC5hcHBlbmRDaGlsZChUKTpsLmluc2VydEJlZm9yZShULGwuZmlyc3RDaGlsZCksZis9MX1jb25zdCBfPWQmJmEu''@;'; put 'put ''aXNQbGFjZU9uKDEpO2Zvcig7Zj5oOylsLnJlbW92ZUNoaWxkKF8/bC5maXJzdENoaWxkOmwubGFzdENoaWxkKSxmLT0xfXJlbmRlcigpe2NvbnN0e3Jvb3ROb2RlOmwsc2l6ZVNldDphfT10aGlzO2xldCBkPXRoaXMudmlzdWFsSW5kZXg7dGhpcy5pc1NoYXJlZFZpZXdTZXQoKSYmYS5pc1Bs''@;'; put 'put ''YWNlT24oMikmJihkKz1hLnNoYXJlZFNpemUubmV4dFNpemUpO2xldCBoPWwuY2hpbGROb2Rlc1tkXTtpZihoLnRhZ05hbWUhPT10aGlzLmNoaWxkTm9kZVR5cGUpe2NvbnN0IGY9dGhpcy5ub2Rlc1Bvb2woKTtsLnJlcGxhY2VDaGlsZChmLGgpLGg9Zn10aGlzLmNvbGxlY3RlZE5vZGVzLnB1''@;'; put 'put ''c2goaCksdGhpcy52aXN1YWxJbmRleCs9MX1lbmQoKXt9fWNsYXNzIHp0ZSBleHRlbmRzIGp0ZXtwcmVwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnByZXBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQuYXBwZW5kKHRoaXMuc2l6ZVNldCksdGhpc31hcHBlbmRWaWV3KGwpe3JldHVy''@;'; put 'put ''biB0aGlzLnNpemVTZXQuYXBwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LnByZXBlbmQodGhpcy5zaXplU2V0KSx0aGlzfX1jbGFzcyBQa2V7Y29uc3RydWN0b3IobCl7dGhpcy5ub2RlVHlwZT1sLnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50KGwpe3RoaXMucm9vdERvY3VtZW50PWx9''@;'; put 'put ''b2J0YWluKCl7cmV0dXJuIHRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSl9fWNsYXNzIGh5e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiBsP25ldyBQa2UobCk6bnVsbCx0aGlzLm5vZGVUeXBlPWwsdGhpcy5yb290''@;'; put 'put ''Tm9kZT1hLHRoaXMudGFibGU9bnVsbCx0aGlzLnJlbmRlcmVkTm9kZXM9MH1zZXRUYWJsZShsKXt0aGlzLm5vZGVzUG9vbCYmdGhpcy5ub2Rlc1Bvb2wuc2V0Um9vdERvY3VtZW50KGwucm9vdERvY3VtZW50KSx0aGlzLnRhYmxlPWx9YWRqdXN0KCl7fXJlbmRlcigpe319Y2xhc3MgRmtlIGV4''@;'; put 'put ''dGVuZHMgaHl7Y29uc3RydWN0b3IoKXtzdXBlcigiVEgiKSx0aGlzLm9yZGVyVmlld3M9bmV3IFdlYWtNYXAsdGhpcy5zb3VyY2VSb3dJbmRleD0wfW9idGFpbk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6''@;'; put 'put ''KGE9bmV3IHp0ZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpLHRoaXMubm9kZVR5cGUpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dIZWFkZXJGdW5jdGlvbnM6YSxyb3dIZWFkZXJz''@;'; put 'put ''Q291bnQ6ZCxyb3dzOmgsY2VsbHM6Zn09dGhpcy50YWJsZTtmb3IobGV0IF89MDtfPGw7XysrKXtjb25zdCBUPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShfKSxXPWguZ2V0UmVuZGVyZWROb2RlKF8pO3RoaXMuc291cmNlUm93SW5kZXg9VDtjb25zdCBpZT10aGlzLm9idGFpbk9y''@;'; put 'put ''ZGVyVmlldyhXKSxnZT1mLm9idGFpbk9yZGVyVmlldyhXKTtpZS5hcHBlbmRWaWV3KGdlKS5zZXRTaXplKGQpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCB3ZT0wO3dlPGQ7d2UrKyl7aWUucmVuZGVyKCk7Y29uc3QgRWU9''@;'; put 'put ''aWUuZ2V0Q3VycmVudE5vZGUoKTtFZS5jbGFzc05hbWU9IiIsRWUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGFbd2VdKFQsRWUsd2UpfWllLmVuZCgpfX19Y2xhc3MgSGtlIGV4dGVuZHMgaHl7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5IZWFk''@;'; put 'put ''ZXJzQ291bnQ6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtsZXQgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7aWYobCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmh9PXRoaXMudGFibGUsZj1oK2E7Zm9yKGxldCBUPTAsVz1sO1Q8VztUKyspe2ZvcihkPXRoaXMucm9vdE5vZGUu''@;'; put 'put ''Y2hpbGROb2Rlc1tUXSxkfHwoZD10aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQoZCkpLHRoaXMucmVuZGVyZWROb2Rlcz1kLmNoaWxkTm9kZXMubGVuZ3RoO3RoaXMucmVuZGVyZWROb2RlczxmOylkLmFwcGVuZENo''@;'; put 'put ''aWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5mOylkLnJlbW92ZUNoaWxkKGQubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9Y29uc3QgXz10aGlzLnJvb3RO''@;'; put 'put ''b2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lmKF8+bClmb3IobGV0IFQ9bDtUPF87VCsrKXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpfWVsc2UgZCYmZzIoZCl9cmVuZGVyKCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omx9PXRoaXMudGFibGU7Zm9y''@;'; put 'put ''KGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0e2NvbHVtbkhlYWRlckZ1bmN0aW9uczpkLGNvbHVtbnNUb1JlbmRlcjpoLHJvd0hlYWRlcnNDb3VudDpmfT10aGlzLnRhYmxlLF89dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2FdO2ZvcihsZXQgVD0tMSpmO1Q8aDtUKz0xKXtjb25zdCBXPXRoaXMu''@;'; put 'put ''dGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShUKSxpZT1fLmNoaWxkTm9kZXNbVCtmXTtpZS5jbGFzc05hbWU9IiIsaWUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLGRbYV0oVyxpZSxhKX19fX1jbGFzcyBOa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFk''@;'; put 'put ''anVzdCgpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlLGQ9bCthO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPGQ7KXRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIikp''@;'; put 'put ''LHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5kOyl0aGlzLnJvb3ROb2RlLnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9cmVuZGVyKCl7dGhpcy5hZGp1c3QoKTtjb25zdHtjb2x1bW5zVG9SZW5k''@;'; put 'put ''ZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtmb3IobGV0IGg9MDtoPGE7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSxfPXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0SGVhZGVyV2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5v''@;'; put 'put ''ZGVzW2hdLnN0eWxlLndpZHRoPWAke199cHhgfWZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLF89dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxk''@;'; put 'put ''Tm9kZXNbaCthXS5zdHlsZS53aWR0aD1gJHtffXB4YH1jb25zdCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtkJiZwaShkLCJyb3dIZWFkZXIiKX19bGV0IFV0ZT0hMTtjbGFzcyBWa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3RvcihsKXtzdXBlcigiVFIiLGwpLHRoaXMub3JkZXJWaWV3PW5l''@;'; put 'put ''dyBqdGUobCxhPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4oYSksdGhpcy5ub2RlVHlwZSl9Z2V0UmVuZGVyZWROb2RlKGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5nZXROb2RlKGwpfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsfT10aGlzLnRhYmxlOyFVdGUmJmw+MWUzJiYoVXRlPSEw''@;'; put 'put ''LEdhKEFhYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93cy4gQ29uc2lkZXIgbGltaXRpbmdceDIwCiAgICAgICAgdGhlIG51bWJlciBvZiByZW5kZXJlZCByb3dzIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIGhlaWdodCBh''@;'; put 'put ''bmQvb3IgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxSb3dzIiBvcHRpb24uYCkpLHRoaXMub3JkZXJWaWV3LnNldFNpemUobCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGE9MDthPGw7YSsrKXRoaXMub3JkZXJWaWV3LnJl''@;'; put 'put ''bmRlcigpO3RoaXMub3JkZXJWaWV3LmVuZCgpfX1jbGFzcyBCa2UgZXh0ZW5kcyBoeXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJURCIpLHRoaXMub3JkZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9y''@;'; put 'put ''ZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgenRlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NU''@;'; put 'put ''b1JlbmRlcjpsLGNvbHVtbnNUb1JlbmRlcjphLHJvd3M6ZCxyb3dIZWFkZXJzOmh9PXRoaXMudGFibGU7Zm9yKGxldCBmPTA7ZjxsO2YrKyl7Y29uc3QgXz10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoZiksVD1kLmdldFJlbmRlcmVkTm9kZShmKTt0aGlzLnNvdXJjZVJvd0luZGV4''@;'; put 'put ''PV87Y29uc3QgVz10aGlzLm9idGFpbk9yZGVyVmlldyhUKSxpZT1oLm9idGFpbk9yZGVyVmlldyhUKTtXLnByZXBlbmRWaWV3KGllKS5zZXRTaXplKGEpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCBnZT0wO2dlPGE7Z2Ur''@;'; put 'put ''Kyl7Vy5yZW5kZXIoKTtjb25zdCB3ZT1XLmdldEN1cnJlbnROb2RlKCksRWU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGdlKTtCbyh3ZSwiaGlkZSIpfHwod2UuY2xhc3NOYW1lPSIiKSx3ZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksd2UucmVtb3ZlQXR0cmlidXRlKCJk''@;'; put 'put ''aXIiKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihfLEVlLHdlKX1XLmVuZCgpfX19Y2xhc3Mgamtle2NvbnN0cnVjdG9yKGwpe2xldHtjZWxsUmVuZGVyZXI6YX09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3RoaXMucm9vdE5vZGU9''@;'; put 'put ''bCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5yb3dIZWFkZXJzPW51bGwsdGhpcy5jb2x1bW5IZWFkZXJzPW51bGwsdGhpcy5jb2xHcm91cD1udWxsLHRoaXMucm93cz1udWxsLHRoaXMuY2VsbHM9bnVsbCx0aGlzLnJvd0ZpbHRlcj1udWxsLHRo''@;'; put 'put ''aXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5yb3dVdGlscz1udWxsLHRoaXMuY29sdW1uVXRpbHM9bnVsbCx0aGlzLnJvd3NUb1JlbmRlcj0wLHRoaXMuY29sdW1uc1RvUmVuZGVyPTAsdGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9W10sdGhpcy5yb3dIZWFkZXJzQ291bnQ9MCx0aGlzLmNvbHVt''@;'; put 'put ''bkhlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLmNvbHVtbkhlYWRlcnNDb3VudD0wLHRoaXMuY2VsbFJlbmRlcmVyPWF9c2V0QXhpc1V0aWxzKGwsYSl7dGhpcy5yb3dVdGlscz1sLHRoaXMuY29sdW1uVXRpbHM9YX1zZXRWaWV3cG9ydFNpemUobCxhKXt0aGlzLnJvd3NUb1JlbmRlcj1sLHRoaXMu''@;'; put 'put ''Y29sdW1uc1RvUmVuZGVyPWF9c2V0RmlsdGVycyhsLGEpe3RoaXMucm93RmlsdGVyPWwsdGhpcy5jb2x1bW5GaWx0ZXI9YX1zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9bCx0aGlzLnJvd0hlYWRlcnNDb3VudD1sLmxlbmd0aCx0aGlzLmNv''@;'; put 'put ''bHVtbkhlYWRlckZ1bmN0aW9ucz1hLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWEubGVuZ3RofXNldFJlbmRlcmVycygpe2xldHtyb3dIZWFkZXJzOmwsY29sdW1uSGVhZGVyczphLGNvbEdyb3VwOmQscm93czpoLGNlbGxzOmZ9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdP2FyZ3VtZW50c1swXTp7fTtsLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyksZC5zZXRUYWJsZSh0aGlzKSxoLnNldFRhYmxlKHRoaXMpLGYuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWwsdGhpcy5jb2x1bW5IZWFkZXJzPWEsdGhpcy5jb2xHcm91cD1kLHRo''@;'; put 'put ''aXMucm93cz1oLHRoaXMuY2VsbHM9Zn1yZW5kZXJlZFJvd1RvU291cmNlKGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVy''@;'; put 'put ''KCl7dGhpcy5jb2xHcm91cC5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMuYWRqdXN0KCksdGhpcy5yb3dzLmFkanVzdCgpLHRoaXMucm93SGVhZGVycy5hZGp1c3QoKSx0aGlzLmNvbHVtbkhlYWRlcnMucmVuZGVyKCksdGhpcy5yb3dzLnJlbmRlcigpLHRoaXMucm93SGVhZGVycy5yZW5k''@;'; put 'put ''ZXIoKSx0aGlzLmNlbGxzLnJlbmRlcigpLHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy5jb2xHcm91cC5yZW5kZXIoKTtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dzOmF9PXRoaXM7Zm9yKGxldCBkPTA7ZDxsO2QrKyl7Y29uc3QgaD1hLmdldFJlbmRlcmVkTm9kZShk''@;'; put 'put ''KTtpZihoLmZpcnN0Q2hpbGQpe2NvbnN0IGY9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKGQpLF89dGhpcy5yb3dVdGlscy5nZXRIZWlnaHQoZik7aC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1fP18tMSsicHgiOiIifX19fWNsYXNzIHprZXtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTpsLFRI''@;'; put 'put ''RUFEOmEsQ09MR1JPVVA6ZCxUQk9EWTpoLHJvd1V0aWxzOmYsY29sdW1uVXRpbHM6XyxjZWxsUmVuZGVyZXI6VH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMucmVuZGVyZXI9bmV3IGprZShsLHtjZWxsUmVuZGVyZXI6VH0p''@;'; put 'put ''LHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyZXJzKHtyb3dIZWFkZXJzOm5ldyBGa2UsY29sdW1uSGVhZGVyczpuZXcgSGtlKGEpLGNvbEdyb3VwOm5ldyBOa2UoZCkscm93czpuZXcgVmtlKGgpLGNlbGxzOm5ldyBCa2V9KSx0aGlzLnJlbmRlcmVyLnNldEF4aXNVdGlscyhmLF8pfXNldEZpbHRl''@;'; put 'put ''cnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRGaWx0ZXJzKGwsYSksdGhpc31zZXRWaWV3cG9ydFNpemUobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRWaWV3cG9ydFNpemUobCxhKSx0aGlzfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5k''@;'; put 'put ''ZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSksdGhpc31hZGp1c3QoKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfXJlbmRlcigpe3RoaXMucmVuZGVyZXIucmVuZGVyKCl9fWNsYXNzIFVrZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncz1hLHRoaXMuaGVhZGVyV2lkdGhzPW5ldyBNYXB9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIsbCl8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRTdHJldGNoZWRDb2x1''@;'; put 'put ''bW5XaWR0aChsKXtjb25zdCBhPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO2xldCBkPXRoaXMuZ2V0V2lkdGgobCk7aWYoYSl7Y29uc3QgaD1hLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwsZCk7aCYmKGQ9aCl9cmV0dXJuIGR9Z2V0''@;'; put 'put ''SGVhZGVySGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT1hP01hdGgu''@;'; put 'put ''bWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRo''@;'; put 'put ''aXMse3d0VGFibGU6YSx3dFZpZXdwb3J0OmQsY2xvbmVTb3VyY2U6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGY9aD9oLnd0VGFibGUuaG9sZGVyOmEuaG9sZGVyLF89Zi5vZmZzZXRIZWlnaHQ8Zi5zY3JvbGxIZWlnaHQ/SWMoKTowO2xldCBUPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lk''@;'; put 'put ''dGgiKTtpZihkLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnJlZnJlc2hTdHJldGNoaW5nKGQuZ2V0Vmlld3BvcnRXaWR0aCgpLV8pLFQ9bC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixUKSxudWxsIT1UKXtjb25zdCBXPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aCxpZT1sLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZ2U9MDtnZTxXO2dlKyspe2xldCB3ZT1BcnJheS5pc0FycmF5KFQpP1RbZ2VdOlQ7d2U9d2U/P2llLHRoaXMuaGVhZGVyV2lkdGhzLnNldChnZSx3ZSl9fX19Y2xhc3MgWmtle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTty''@;'; put 'put ''ZXR1cm4gdm9pZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9fWNvbnN0IHlnPSJ0b3AiLGdoPSJib3R0b20iLHdnPSJpbmxpbmVfc3RhcnQiLENnPSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsWnA9ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIixZa2U9W3ln''@;'; put 'put ''LGdoLHdnLENnLFpwXSxXa2U9bmV3IE1hcChbW3lnLGBodF9jbG9uZV8ke3lnfWBdLFtnaCxgaHRfY2xvbmVfJHtnaH1gXSxbd2csYGh0X2Nsb25lXyR7d2d9IGh0X2Nsb25lX2xlZnRgXSxbQ2csYGh0X2Nsb25lXyR7Q2d9IGh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lcmBdLFtacCxgaHRfY2xv''@;'; put 'put ''bmVfJHtacH0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBtaChjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gR2tlKGMpe3ZhciBsPWZ1bmN0aW9uICRrZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWNvbnN0IHU3PWNsYXNzIHFrZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe21oKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLG1oKHRoaXMsImRvbUJpbmRpbmdzIix2b2lkIDApLG1oKHRoaXMsIlRCT0RZIixudWxsKSxtaCh0aGlzLCJUSEVBRCIsbnVsbCksbWgodGhpcywi''@;'; put 'put ''Q09MR1JPVVAiLG51bGwpLG1oKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksbWgodGhpcywiaGFzVGFibGVXaWR0aCIsITApLG1oKHRoaXMsImlzVGFibGVWaXNpYmxlIiwhMSksbWgodGhpcywidGFibGVPZmZzZXQiLDApLG1oKHRoaXMsImhvbGRlck9mZnNldCIsMCksdGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1mLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMud290PXRoaXMuZGF0''@;'; put 'put ''YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSxkTih0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhpcy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3Jl''@;'; put 'put ''YXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0''@;'; put 'put ''aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO2NvbnN0IF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dIZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhpcy5fbW9kaWZ5Um93''@;'; put 'put ''SGVhZGVyV2lkdGgoXykpLHRoaXMucm93VXRpbHM9bmV3IFprZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxzPW5ldyBVa2UodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJlbmRlcmVyPW5ldyB6''@;'; put 'put ''a2Uoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9VUDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5yb3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0''@;'; put 'put ''dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpfSl9aXMobCl7cmV0dXJuIHRoaXMubmFtZT09PWx9Zml4VGFibGVEb21UcmVlKCl7Y29uc3QgbD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudDt0aGlzLlRCT0RZPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGJvZHkiKSx0aGlzLlRCT0RZ''@;'; put 'put ''fHwodGhpcy5UQk9EWT1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksdGhpcy5UQUJMRS5hcHBlbmRDaGlsZCh0aGlzLlRCT0RZKSksdGhpcy5USEVBRD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRoZWFkIiksdGhpcy5USEVBRHx8KHRoaXMuVEhFQUQ9bC5jcmVhdGVFbGVtZW50KCJ0aGVh''@;'; put 'put ''ZCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuVEhFQUQsdGhpcy5UQk9EWSkpLHRoaXMuQ09MR1JPVVA9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJjb2xncm91cCIpLHRoaXMuQ09MR1JPVVB8fCh0aGlzLkNPTEdST1VQPWwuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSx0aGlz''@;'; put 'put ''LlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLkNPTEdST1VQLHRoaXMuVEhFQUQpKX1jcmVhdGVTcHJlYWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RTcHJlYWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwu''@;'; put 'put ''cGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNl''@;'; put 'put ''cnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSxkfWNyZWF0ZUhvbGRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8IUJvKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3RE''@;'; put 'put ''b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIsZC5jbGFzc05hbWU9Ind0SG9sZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLHRoaXMuaXNNYXN0ZXImJihkLnBhcmVudE5vZGUuY2xhc3NOYW1lKz0iaHRfbWFzdGVyIGhhbmRzb250YWJs''@;'; put 'put ''ZSIsZC5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJ0bE1vZGUiKT8icnRsIjoibHRyIikpLGQuYXBwZW5kQ2hpbGQobCkpLGR9ZHJhdygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBd''@;'; put 'put ''JiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10aGlzLHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpLF89YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxUPWEuZ2V0U2V0dGluZygi''@;'; put 'put ''cm93SGVhZGVycyIpLFc9VC5sZW5ndGgsaWU9YS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksZ2U9aWUubGVuZ3RoO2xldCB3ZT0hMSxFZT1sO2lmKHRoaXMuaXNNYXN0ZXImJih0aGlzLmhvbGRlck9mZnNldD1xbCh0aGlzLmhvbGRlciksRWU9aC5jcmVhdGVSZW5kZXJDYWxjdWxhdG9y''@;'; put 'put ''cyhFZSksVyYmIWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IG90PWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksZXQ9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PW90LGV0IT09dGhpcy5j''@;'; put 'put ''b3JyZWN0SGVhZGVyV2lkdGgmJihFZT0hMSl9aWYodGhpcy5pc01hc3RlciYmKHdlPWQudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpKSxFZSl0aGlzLmlzTWFzdGVyJiZoLmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLGQmJmQucmVmcmVzaCghMCk7ZWxzZXt0aGlzLnRhYmxlT2Zmc2V0PXRo''@;'; put 'put ''aXMuaXNNYXN0ZXI/cWwodGhpcy5UQUJMRSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnBhcmVudFRhYmxlT2Zmc2V0O2NvbnN0IG90PWY+MD90aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTowLGV0PV8+MD90aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTowO3RoaXMucm93RmlsdGVyPW5l''@;'; put 'put ''dyBjbGFzcyBJa2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3Jl''@;'; put 'put ''dHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93''@;'; put 'put ''VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX0ob3QsZixnZSksdGhp''@;'; put 'put ''cy5jb2x1bW5GaWx0ZXI9bmV3IGNsYXNzIFRrZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5vZmZzZXQ9bCx0aGlzLnRvdGFsPWEsdGhpcy5jb3VudFRIPWR9b2Zmc2V0dGVkKGwpe3JldHVybiBsK3RoaXMub2Zmc2V0fXVuT2Zmc2V0dGVkKGwpe3JldHVybiBsLXRoaXMub2Zmc2V0fXJlbmRl''@;'; put 'put ''cmVkVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMub2Zmc2V0dGVkKGwpfXNvdXJjZVRvUmVuZGVyZWQobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWQobCl9b2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwtdGhpcy5jb3VudFRIfXVuT2Zmc2V0dGVkVEgobCl7cmV0dXJuIGwrdGhpcy5jb3VudFRIfXZp''@;'; put 'put ''c2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbihsKXtyZXR1cm4gdGhpcy5yZW5kZXJlZFRvU291cmNlKHRoaXMub2Zmc2V0dGVkVEgobCkpfXNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZFRIKHRoaXMuc291cmNl''@;'; put 'put ''VG9SZW5kZXJlZChsKSl9fShldCxfLFcpO2xldCB5dD0hMDtpZih0aGlzLmlzTWFzdGVyKXt0aGlzLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKTtjb25zdCBrdD17fTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYmVmb3JlRHJhdyIsITAsa3QpLHl0PSEwIT09a3Qu''@;'; put 'put ''c2tpcFJlbmRlcn1pZih5dCl7bGV0IGt0O2lmKHRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsaWUpLCh0aGlzLmlzKGdoKXx8dGhpcy5pcyhacCkpJiZ0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhULFtdKSx0aGlzLnJl''@;'; put 'put ''c2V0T3ZlcnNpemVkUm93cygpLHRoaXMudGFibGVSZW5kZXJlci5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVy''@;'; put 'put ''KCksdGhpcy5pc01hc3RlciYmKGt0PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3Jrc3BhY2VXaWR0aCx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMubWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKSksdGhpcy5hZGp1c3RDb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHRzKCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoZ2gpKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXIpe3RoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpLHRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC53dE92ZXJsYXlzLnJlZnJlc2goITEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dE92ZXJsYXlzLmFwcGx5VG9ET00oKTtjb25zdCBTdD13YSh0aGlzLmhpZGVyKSxRdD13YSh0aGlzLlRBQkxFKTswIT09U3QmJlF0IT09U3QmJih0aGlzLmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygp''@;'; put 'put ''LHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksa3QhPT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY29udGFpbmVyV2lkdGg9bnVsbCx0aGlz''@;'; put 'put ''LmNvbHVtblV0aWxzLmNhbGN1bGF0ZVdpZHRocygpLHRoaXMudGFibGVSZW5kZXJlci5yZW5kZXJlci5jb2xHcm91cC5yZW5kZXIoKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uRHJhdyIsITApfWVsc2UgdGhpcy5pcyhnaCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNv''@;'; put 'put ''dXJjZS53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpfX1sZXQgWmU9ITE7cmV0dXJuIHRoaXMuaXNNYXN0ZXImJihaZT1kLnRvcE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21PdmVybGF5LmNsb25lJiYoWmU9ZC5ib3R0b21PdmVybGF5LnJlc2V0Rml4ZWRQb3Np''@;'; put 'put ''dGlvbigpfHxaZSksWmU9ZC5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFplLGQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbUlubGluZVN0YXJ0Q29y''@;'; put 'put ''bmVyT3ZlcmxheSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpKSxaZT8oZC5yZWZyZXNoQWxsKCksZC5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5yZWZyZXNoU2Vs''@;'; put 'put ''ZWN0aW9ucyhFZSksd2UmJmQuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3QuZHJhd249ITAsdGhpc31tYXJrSWZPdmVyc2l6ZWRDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT10aGlzLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpO2xldCBkPXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgZixfLFQ7Y29uc3QgVz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVySGVpZ2h0''@;'; put 'put ''Iil8fFtdO2Zvcig7ZDspZC09MSxmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KGQpLF89dGhpcy5nZXRDb2x1bW5IZWFkZXIoYSxkKSxfJiYoVD1qZihfKSwoIWYmJmg8VHx8ZjxUKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNb''@;'; put 'put ''ZF09VCksQXJyYXkuaXNBcnJheShXKT9udWxsIT1XW2RdJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1XW2RdKTppc05hTihXKXx8KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRl''@;'; put 'put ''cnNbZF09VyksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXTwoV1tkXXx8VykmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVdbZF18fFcpKX1hZGp1c3RDb2x1bW5IZWFk''@;'; put 'put ''ZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLGE9dGhpcy5USEVBRC5jaGlsZE5vZGVzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVycztmb3IobGV0IGY9MCxfPWwuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxl''@;'; put 'put ''bmd0aDtmPF87ZisrKWlmKGRbZl0pe2lmKCFhW2ZdfHwwPT09YVtmXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47YVtmXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD1gJHtkW2ZdfXB4YH19cmVzZXRPdmVyc2l6ZWRSb3dzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdw''@;'; put 'put ''b3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhnaCkpJiYhbC5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3QgZD10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Eub3ZlcnNpemVkUm93cyYmYS5vdmVyc2l6ZWRSb3dzW2ZdJiYoYS5vdmVyc2l6ZWRSb3dzW2ZdPXZvaWQgMCl9fX1yZW1vdmVDbGFzc0Zyb21DZWxscyhsKXtjb25zdCBhPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvckFsbChg''@;'; put 'put ''LiR7bH1gKTtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspV28oYVtkXSxsKX1yZWZyZXNoU2VsZWN0aW9ucyhsKXtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3NlbGVjdGlvbnM6ZH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFkKXJldHVybjtjb25zdCBoPUFycmF5LmZyb20o''@;'; put 'put ''ZCksZj1oLmxlbmd0aDtpZihsKXtjb25zdCBfPVtdO2ZvcihsZXQgaWU9MDtpZTxmO2llKyspe2NvbnN0e2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpnZSxoaWdobGlnaHRSb3dDbGFzc05hbWU6d2UsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOkVlfT1oW2llXS5zZXR0aW5ncyxaZT1oW2ll''@;'; put 'put ''XS5jbGFzc05hbWVzLG90PVplLmxlbmd0aDtmb3IobGV0IGV0PTA7ZXQ8b3Q7ZXQrKylfLmluY2x1ZGVzKFplW2V0XSl8fF8ucHVzaChaZVtldF0pO2dlJiYhXy5pbmNsdWRlcyhnZSkmJl8ucHVzaChnZSksd2UmJiFfLmluY2x1ZGVzKHdlKSYmXy5wdXNoKHdlKSxFZSYmIV8uaW5jbHVkZXMo''@;'; put 'put ''RWUpJiZfLnB1c2goRWUpfWNvbnN0IFQ9YS5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShUKSlmb3IobGV0IGllPTA7aWU8VC5sZW5ndGg7aWUrKylfLnB1c2goVFtpZV0pO2NvbnN0IFc9Xy5sZW5ndGg7Zm9yKGxldCBpZT0wO2ll''@;'; put 'put ''PFc7aWUrKyl0aGlzLnJlbW92ZUNsYXNzRnJvbUNlbGxzKF9baWVdKX1mb3IobGV0IF89MDtfPGY7XysrKWhbX10uZHJhdyh0aGlzLmZhY2FkZUdldHRlcigpLGwpfWdldENlbGwobCl7bGV0IGE9bC5yb3csZD1sLmNvbDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1v''@;'; put 'put ''ZGlmeUdldENlbGxDb29yZHMiLGEsZCk7aWYoaCYmQXJyYXkuaXNBcnJheShoKSYmKFthLGRdPWgpLHRoaXMuaXNSb3dCZWZvcmVSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTE7aWYodGhpcy5pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGEpKXJldHVybi0yO2lmKHRoaXMuaXNDb2x1bW5CZWZvcmVS''@;'; put 'put ''ZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTM7aWYodGhpcy5pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi00O2NvbnN0IGY9dGhpcy5nZXRSb3coYSk7aWYoIWYmJmE+PTApdGhyb3cgbmV3IEVycm9yKCJUUiB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlz''@;'; put 'put ''IG5vdCIpO2NvbnN0IF89Zi5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihkKV07aWYoIV8mJmQ+PTApdGhyb3cgbmV3IEVycm9yKCJURCBvciBUSCB3YXMgZXhwZWN0ZWQgdG8gYmUgcmVuZGVyZWQgYnV0IGlzIG5vdCIp''@;'; put 'put ''O3JldHVybiBffWdldFJvdyhsKXtsZXQgYT1udWxsLGQ9bnVsbDt2YXIgaCxmO3JldHVybiBsPDA/KGE9bnVsbD09PShoPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09aD92b2lkIDA6aC5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCksZD10aGlzLlRIRUFEKTooYT1udWxsPT09''@;'; put 'put ''KGY9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLnNvdXJjZVRvUmVuZGVyZWQobCksZD10aGlzLlRCT0RZKSx2b2lkIDAhPT1hJiZ2b2lkIDAhPT1kJiYhKGQuY2hpbGROb2Rlcy5sZW5ndGg8YSsxKSYmZC5jaGlsZE5vZGVzW2FdfWdldENvbHVtbkhlYWRlcihsKXtjb25z''@;'; put 'put ''dCBkPXRoaXMuVEhFQUQuY2hpbGROb2Rlc1thcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MF07cmV0dXJuIGQ/LmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpXX1n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCk7cmV0dXJuIHRoaXMuVEhFQUQuY2hpbGROb2Rlcy5mb3JFYWNoKGg9Pntjb25zdCBmPWguY2hpbGROb2Rlc1tkXTtmJiZhLnB1c2go''@;'; put 'put ''Zil9KSxhfWdldFJvd0hlYWRlcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtpZigwPT09dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKDApKXJldHVybjtpZihhPj10''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aClyZXR1cm47Y29uc3QgaD10aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV07cmV0dXJuIGg/LmNoaWxkTm9kZXNbYV19Z2V0Um93SGVhZGVycyhsKXtpZigw''@;'; put 'put ''PT09dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKDApKXJldHVybltdO2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMu''@;'; put 'put ''VEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSxfPWY/LmNoaWxkTm9kZXNbaF07XyYmYS5wdXNoKF8pfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9TnAoYSxb''@;'; put 'put ''IlREIiwiVEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2RlLGg9ZC5wYXJlbnROb2RlO2xldCBmPXN0ZShkKSxfPWEuY2VsbEluZGV4O3JldHVybiBCcChDZyxhLHRoaXMud3RSb290RWxlbWVudCl8fEJwKHlnLGEsdGhpcy53dFJvb3RFbGVtZW50KT8iVEhF''@;'; put 'put ''QUQiPT09aC5ub2RlTmFtZSYmKGYtPWguY2hpbGROb2Rlcy5sZW5ndGgpOmY9QnAoWnAsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcChnaCxhLHRoaXMud3RSb290RWxlbWVudCk/dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLWguY2hpbGROb2Rlcy5sZW5ndGgrZjpo''@;'; put 'put ''PT09dGhpcy5USEVBRD90aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZik6dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShmKSxfPUJwKENnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8QnAod2csYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxCcChacCxh''@;'; put 'put ''LHRoaXMud3RSb290RWxlbWVudCk/dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgoXyk6dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKF8pLHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZixfKX1tYXJrT3ZlcnNpemVkUm93cygpe2lm''@;'; put 'put ''KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSlyZXR1cm47bGV0IGgsZixfLFQsVyxsPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7aWYobCp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpIT1qZih0aGlz''@;'; put 'put ''LlRCT0RZKS0xfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDtsOylsLT0xLF89dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKSxoPXRoaXMuZ2V0Um93SGVpZ2h0KF8pLFQ9dGhpcy5nZXRUckZvclJvdyhfKSxXPVQucXVlcnlTZWxl''@;'; put 'put ''Y3RvcigidGgiKSxmPVc/amYoVyk6amYoVCktMSwoIWgmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik8Znx8aDxmKSYmKGYrPTEsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tfXT1mKX1nZXRUckZvclJvdyhsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldfWlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0hlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dCZWZvcmVSZW5kZXJlZFJvd3Mo''@;'; put 'put ''bCl7Y29uc3QgYT10aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzUm93SGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MobCl7cmV0dXJuIGw+dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0NvbHVtbkJlZm9yZVJl''@;'; put 'put ''bmRlcmVkQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIm''@;'; put 'put ''Jmw+dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1pc0NvbHVtbkFmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKX1pc1Jvd0FmdGVyVmlld3BvcnQobCl7cmV0dXJuIHRoaXMucm93RmlsdGVyJiZsPnRoaXMu''@;'; put 'put ''Z2V0TGFzdFZpc2libGVSb3coKX1pc0NvbHVtbkJlZm9yZVZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKTwwJiZsPj0wfWlzTGFzdFJvd0Z1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNp''@;'; put 'put ''YmxlUm93KCk9PT10aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzTGFzdENvbHVtbkZ1bGx5VmlzaWJsZSgpe3JldHVybiB0aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk9PT10aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWFsbFJvd3NJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT09PXRoaXMuZ2V0VmlzaWJsZVJvd3NDb3VudCgpfWFsbENvbHVtbnNJblZpZXdwb3J0KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT09PXRoaXMuZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgp''@;'; put 'put ''fWdldFJvd0hlaWdodChsKXtyZXR1cm4gdGhpcy5yb3dVdGlscy5nZXRIZWlnaHQobCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldEhlYWRlckhlaWdodChsKX1nZXRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRX''@;'; put 'put ''aWR0aChsKX1nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChsKX1oYXNEZWZpbmVkU2l6ZSgpe3JldHVybiB0aGlzLmhhc1RhYmxlSGVpZ2h0JiZ0aGlzLmhhc1RhYmxlV2lkdGh9Z2V0V2lkdGgoKXtyZXR1''@;'; put 'put ''cm4gd2EodGhpcy5UQUJMRSl9Z2V0SGVpZ2h0KCl7cmV0dXJuIGFsKHRoaXMuVEFCTEUpfWdldFRvdGFsV2lkdGgoKXtjb25zdCBsPXdhKHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0V2lkdGgoKX1nZXRUb3RhbEhlaWdodCgpe2NvbnN0IGw9YWwodGhpcy5oaWRlcik7cmV0''@;'; put 'put ''dXJuIDAhPT1sP2w6dGhpcy5nZXRIZWlnaHQoKX1pc1Zpc2libGUoKXtyZXR1cm4gZTcodGhpcy5UQUJMRSl9X21vZGlmeVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPVJhKGwpP2woKTpudWxsO3JldHVybiBBcnJheS5pc0FycmF5KGEpPyhhPVsuLi5hXSxhW2EubGVuZ3RoLTFdPXRoaXMuX2Nv''@;'; put 'put ''cnJlY3RSb3dIZWFkZXJXaWR0aChhW2EubGVuZ3RoLTFdKSk6YT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYSksYX1fY29ycmVjdFJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBsJiYoYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVm''@;'; put 'put ''YXVsdENvbHVtbldpZHRoIikpLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoJiYoYSs9MSksYX19LFp0ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPy0xOjB9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''e2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksYyl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3Vu''@;'; put 'put ''dCgpfX07ZmgoWnRlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c1RvcCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBZdGU9WnRlLFd0ZT17Z2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUmVuZGVyZWQ7''@;'; put 'put ''cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfX07ZmgoV3RlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMi''@;'; put 'put ''LHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgTk49V3RlO2NsYXNzIFZOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCx5Zyl9fVRhKFZOLFl0ZSksVGEoVk4sTk4pO2NvbnN0IEprZT1WTjtmdW5jdGlvbiBCTihjLGwsYSl7cmV0dXJuIGw9''@;'; put 'put ''ZnVuY3Rpb24gUWtlKGMpe3ZhciBsPWZ1bmN0aW9uIGVBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh''@;'; put 'put ''PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6''@;'; put 'put ''U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEd0ZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gb0FlKGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIHNBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGZ5KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIGFBZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsJHRl''@;'; put 'put ''KGMsbCwiZ2V0IikpfWZ1bmN0aW9uICR0ZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgU2c9bmV3IFdlYWtNYXA7Y2xhc3Mgak57Y29u''@;'; put 'put ''c3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO0d0ZSh0aGlzLCJyb3ciLG51bGwpLEd0ZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIHJBZShjLGwsYSl7KGZ1bmN0aW9uIGlBZShjLGwpe2lmKGwuaGFz''@;'; put 'put ''KGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsU2cse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksZnVuY3Rpb24gbEFlKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gY0FlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYywkdGUoYyxsLCJzZXQiKSxhKSxh''@;'; put 'put ''fSh0aGlzLFNnLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe3JldHVybiEodGhpcy5yb3c8MHx8dGhpcy5jb2w8MHx8dGhpcy5yb3c+PWwuZ2V0U2V0dGluZygidG90YWxSb3dzIil8fHRoaXMuY29sPj1sLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsQ29sdW1ucyIpKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1sLnJvdyYmdGhpcy5jb2w9PT1sLmNvbH1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihmeSh0aGlzLFNnKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwu''@;'; put 'put ''Y29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJihmeSh0aGlzLFNnKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihmeSh0aGlzLFNnKT90aGlzLmNvbD49bC5jb2w6dGhp''@;'; put 'put ''cy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJihmeSh0aGlzLFNnKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRo''@;'; put 'put ''aXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1heCh0aGlzLmNvbCwwKSx0aGlzfWNsb25lKCl7cmV0dXJuIG5ldyBqTih0aGlzLnJvdyx0aGlzLmNvbCxmeSh0aGlzLFNnKSl9dG9PYmplY3QoKXtyZXR1cm57cm93OnRoaXMucm93LGNvbDp0aGlzLmNv''@;'; put 'put ''bH19fWNvbnN0IFNrPWpOO2Z1bmN0aW9uIHpOKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBoQWUoYyl7dmFyIGw9ZnVuY3Rpb24gZkFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09''@;'; put 'put ''YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp''@;'; put 'put ''KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdmgo''@;'; put 'put ''YyxsKXtyZXR1cm4gZnVuY3Rpb24gcEFlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxxdGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gcXRlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUg''@;'; put 'put ''ZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBnZD1uZXcgV2Vha01hcDtjbGFzcyBVTntjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt6Tih0aGlzLCJoaWdobGlnaHQiLG51bGwpLHpOKHRoaXMsImZyb20iLG51bGwpLHpOKHRoaXMsInRvIixudWxsKSxm''@;'; put 'put ''dW5jdGlvbiB1QWUoYyxsLGEpeyhmdW5jdGlvbiBkQWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLGdkLHt3''@;'; put 'put ''cml0YWJsZTohMCx2YWx1ZTohMX0pLHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKS5ub3JtYWxpemUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIGdBZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIG1BZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChj''@;'; put 'put ''LGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscXRlKGMsbCwic2V0IiksYSksYX0odGhpcyxnZCxoKX1zZXRIaWdobGlnaHQobCl7cmV0dXJuIHRoaXMuaGln''@;'; put 'put ''aGxpZ2h0PWwuY2xvbmUoKS5ub3JtYWxpemUoKSx0aGlzfXNldEZyb20obCl7cmV0dXJuIHRoaXMuZnJvbT1sLmNsb25lKCksdGhpc31zZXRUbyhsKXtyZXR1cm4gdGhpcy50bz1sLmNsb25lKCksdGhpc31pc1ZhbGlkKGwpe3JldHVybiB0aGlzLmZyb20uaXNWYWxpZChsKSYmdGhpcy50by5p''@;'; put 'put ''c1ZhbGlkKGwpfWlzU2luZ2xlKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5y''@;'; put 'put ''b3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lm''@;'; put 'put ''KHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csMCksYT1NYXRoLm1heCh0aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29s''@;'; put 'put ''PDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5tYXgodGhpcy50by5jb2wsMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRo''@;'; put 'put ''aXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNvbDw9ZCYmZi5jb2w+PWR9aW5jbHVk''@;'; put 'put ''ZXNSYW5nZShsKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMobC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgu''@;'; put 'put ''bWluKGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWF4KGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpJiZN''@;'; put 'put ''YXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92ZXJsYXBzKGwpe3JldHVybiBsLmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90''@;'; put 'put ''dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2w+''@;'; put 'put ''PWwuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbHx8dGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYm''@;'; put 'put ''dGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2w+PWwuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuY29sfWlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJv''@;'; put 'put ''dyYmdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3d8fHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wUmln''@;'; put 'put ''aHRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvd31leHBhbmQobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4obC5yb3c8YS5yb3d8fGwuY29sPGEuY29sfHxsLnJv''@;'; put 'put ''dz5kLnJvd3x8bC5jb2w+ZC5jb2wpJiYodGhpcy5mcm9tPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4oYS5yb3csbC5yb3cpLE1hdGgubWluKGEuY29sLGwuY29sKSksdGhpcy50bz10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGQucm93LGwucm93KSxNYXRoLm1heChk''@;'; put 'put ''LmNvbCxsLmNvbCkpLCEwKX1leHBhbmRCeVJhbmdlKGwpe2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxoPXRoaXMu''@;'; put 'put ''Z2V0RGlyZWN0aW9uKCksZj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxfPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxUPU1hdGgubWluKGEucm93LGYucm93KSxXPU1hdGgubWluKGEuY29sLGYuY29sKSxpZT1NYXRoLm1heChkLnJvdyxfLnJvdyksZ2U9TWF0aC5tYXgoZC5jb2ws''@;'; put 'put ''Xy5jb2wpLHdlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoVCxXKSxFZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGllLGdlKTtyZXR1cm4gdGhpcy5mcm9tPXdlLHRoaXMudG89RWUsdGhpcy5zZXREaXJlY3Rpb24oaCksdGhpcy5oaWdobGlnaHQucm93PT09dGhpcy5nZXRPdXRlckJvdHRvbVJp''@;'; put 'put ''Z2h0Q29ybmVyKCkucm93JiYiTi1TIj09PXRoaXMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpLHRoaXMuaGlnaGxpZ2h0LmNvbD09PXRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbCYmIlctRSI9PT10aGlzLmdldEhvcml6b250''@;'; put 'put ''YWxEaXJlY3Rpb24oKSYmdGhpcy5mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCksITB9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20u''@;'; put 'put ''aXNTb3V0aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1TRSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIo''@;'; put 'put ''KSx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJv''@;'; put 'put ''bSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmln''@;'; put 'put ''aHRDb3JuZXIoKV19fWdldFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlz''@;'; put 'put ''LmdldERpcmVjdGlvbigpKT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0Ut''@;'; put 'put ''TlciKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0''@;'; put 'put ''aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUiKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiB2aCh0aGlz''@;'; put 'put ''LGdkKT90aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRo''@;'; put 'put ''aXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVu''@;'; put 'put ''ZENvcm5lcigpfWdldEJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3Ju''@;'; put 'put ''ZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5y''@;'; put 'put ''b3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVy''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRl''@;'; put 'put ''ckJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0''@;'; put 'put ''aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gdmgodGhpcyxnZCk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpfWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJuIHZoKHRoaXMsZ2QpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdl''@;'; put 'put ''dE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKX1pc0Nvcm5lcihsLGEpe3JldHVybiEhKGEmJmEuaW5jbHVkZXMobCkmJih0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLmZyb20ucm93LGEuZnJvbS5jb2wpKXx8dGhpcy5nZXRPdXRl''@;'; put 'put ''clRvcFJpZ2h0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGEuZnJvbS5yb3csYS50by5jb2wpKXx8dGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoYS50by5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdl''@;'; put 'put ''dE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoYS50by5yb3csYS50by5jb2wpKSkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGwu''@;'; put 'put ''aXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsLGEpe2lmKCEobCBpbnN0YW5jZW9mIFNrKSlyZXR1cm4hMTtpZihhKXtjb25zdHtmcm9tOmQsdG86aH09''@;'; put 'put ''YTtpZihhLmluY2x1ZGVzKGwpKXtpZih0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIo''@;'; put 'put ''KS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csaC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk7aWYodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGQuY29s''@;'; put 'put ''KSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgucm93LGguY29sKSkpcmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfX1yZXR1cm4gbC5p''@;'; put 'put ''c0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJU''@;'; put 'put ''b3BFbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwfWdldEJvcmRlcnNTaGFyZWRXaXRoKGwpe2lmKCF0aGlzLmluY2x1''@;'; put 'put ''ZGVzUmFuZ2UobCkpcmV0dXJuW107Y29uc3QgYV90b3A9TWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9ib3R0b209TWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksYV9sZWZ0PU1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGFfcmlnaHQ9''@;'; put 'put ''TWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksZF90b3A9TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdyksZF9ib3R0b209TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdyksZF9sZWZ0PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpLGRfcmlnaHQ9TWF0aC5tYXgo''@;'; put 'put ''bC5mcm9tLmNvbCxsLnRvLmNvbCksaD1bXTtyZXR1cm4gYV90b3A9PT1kX3RvcCYmaC5wdXNoKCJ0b3AiKSxhX3JpZ2h0PT09ZF9yaWdodCYmaC5wdXNoKCJyaWdodCIpLGFfYm90dG9tPT09ZF9ib3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2goImxlZnQi''@;'; put 'put ''KSxofWdldElubmVyKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKykodGhpcy5mcm9tLnJvdyE9''@;'; put 'put ''PWh8fHRoaXMuZnJvbS5jb2whPT1mKSYmKHRoaXMudG8ucm93IT09aHx8dGhpcy50by5jb2whPT1mKSYmZC5wdXNoKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7cmV0dXJuIGR9Z2V0QWxsKCl7Y29uc3QgbD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuZ2V0T3V0''@;'; put 'put ''ZXJCb3R0b21FbmRDb3JuZXIoKSxkPVtdO2ZvcihsZXQgaD1sLnJvdztoPD1hLnJvdztoKyspZm9yKGxldCBmPWwuY29sO2Y8PWEuY29sO2YrKylkLnB1c2gobC5yb3c9PT1oJiZsLmNvbD09PWY/bDphLnJvdz09PWgmJmEuY29sPT09Zj9hOnRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSk7''@;'; put 'put ''cmV0dXJuIGR9Zm9yQWxsKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBoPWEucm93O2g8PWQucm93O2grKylmb3IobGV0IGY9YS5jb2w7Zjw9ZC5jb2w7ZisrKWlmKCExPT09bChoLGYpKXJl''@;'; put 'put ''dHVybn1jbG9uZSgpe3JldHVybiBuZXcgVU4odGhpcy5oaWdobGlnaHQsdGhpcy5mcm9tLHRoaXMudG8sdmgodGhpcyxnZCkpfXRvT2JqZWN0KCl7cmV0dXJue2Zyb206dGhpcy5mcm9tLnRvT2JqZWN0KCksdG86dGhpcy50by50b09iamVjdCgpfX1fY3JlYXRlQ2VsbENvb3JkcyhsLGEpe3Jl''@;'; put 'put ''dHVybiBuZXcgU2sobCxhLHZoKHRoaXMsZ2QpKX19Y29uc3QgWk49VU47ZnVuY3Rpb24gXzIoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHZBZShjKXt2YXIgbD1mdW5jdGlvbiBfQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6''@;'; put 'put ''ITB9KTpjW2xdPWEsY31jbGFzcyBZTntnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIG5ldyBsbCh0aGlzKX1jb25zdHJ1Y3RvcihsLGEpe18yKHRoaXMsInd0VGFibGUiLHZvaWQgMCksXzIodGhpcywid3RTY3JvbGwiLHZvaWQgMCksXzIodGhpcywid3RWaWV3cG9ydCIsdm9pZCAwKSxfMih0''@;'; put 'put ''aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLF8yKHRoaXMsInNlbGVjdGlvbnMiLHZvaWQgMCksXzIodGhpcywid3RFdmVudCIsdm9pZCAwKSxfMih0aGlzLCJndWlkIixgd3RfJHthTigpfWApLF8yKHRoaXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLF8yKHRoaXMsImRyYXduIiwhMSksXzIodGhp''@;'; put 'put ''cywiZG9tQmluZGluZ3MiLHZvaWQgMCksXzIodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3VtZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3M9YSx0aGlzLnd0U2Nyb2xsPW5ldyBjbGFzcyB0QWV7Y29uc3RydWN0b3IobCl7Qk4odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSxCTih0aGlzLCJsYXN0U2Nyb2xsZWRDb2x1bW5Qb3MiLC0xKSxCTih0aGlzLCJsYXN0U2Nyb2xsZWRSb3dQb3MiLC0xKSx0aGlzLmRhdGFBY2Nl''@;'; put 'put ''c3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe2NvbnN0IF89dGhpcy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLmNvbCxkLGYpLFQ9dGhpcy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobC5yb3csYSxoKTtyZXR1cm4gX3x8VH1zY3JvbGxWaWV3cG9ydEhvcml6b250''@;'; put 'put ''YWxseShsLGEsZCl7Y29uc3R7ZHJhd246aCx0b3RhbENvbHVtbnM6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFofHwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmYpcmV0dXJuITE7Y29uc3QgXz10aGlzLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLFQ9dGhpcy5nZXRMYXN0Vmlz''@;'; put 'put ''aWJsZUNvbHVtbigpLFc9dm9pZCAwPT09YSYmdm9pZCAwPT09ZCx7Zml4ZWRDb2x1bW5zU3RhcnQ6aWUsaW5saW5lU3RhcnRPdmVybGF5OmdlfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoVyYmbDxpZSlyZXR1cm4hMTtsZXQgd2U9ITE7cmV0dXJuLTE9PT1fP3dlPWdlLnNjcm9sbFRvKGws''@;'; put 'put ''Vz9sPnRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zOmEpOihXJiYobDxffHxsPlQpfHwhVykmJih3ZT1nZS5zY3JvbGxUbyhsLFc/bD5UOmEpKSx3ZSYmKHRoaXMubGFzdFNjcm9sbGVkQ29sdW1uUG9zPWwpLHdlfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl7Y29uc3R7ZHJhd246''@;'; put 'put ''aCx0b3RhbFJvd3M6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKCFofHwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmYpcmV0dXJuITE7Y29uc3QgXz10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLFQ9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpLFc9dm9pZCAwPT09YSYmdm9pZCAw''@;'; put 'put ''PT09ZCx7Zml4ZWRSb3dzQm90dG9tOmllLGZpeGVkUm93c1RvcDpnZSx0b3BPdmVybGF5OndlfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoVyYmKGw8Z2V8fGw+Zi1pZS0xKSlyZXR1cm4hMTtsZXQgRWU9ITE7cmV0dXJuLTE9PT1fP0VlPXdlLnNjcm9sbFRvKGwsVz9sPnRoaXMubGFzdFNj''@;'; put 'put ''cm9sbGVkUm93UG9zOmQpOihXJiYobDxffHxsPlQpfHwhVykmJihFZT13ZS5zY3JvbGxUbyhsLFc/bD5UOmQpKSxFZSYmKHRoaXMubGFzdFNjcm9sbGVkUm93UG9zPWwpLEVlfWdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRv''@;'; put 'put ''dGFsUm93czpoLGZpeGVkUm93c1RvcDpmLHJvb3RXaW5kb3c6X309dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBUPWEuZ2V0Rmlyc3RWaXNpYmxlUm93KCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PV8pe2NvbnN0IFc9cWwoYS53dFJvb3RFbGVtZW50KSxpZT1qZihhLmhp''@;'; put 'put ''ZGVyKSxnZT1qZihfKSx3ZT1ueShfLF8pO2lmKFcudG9wK2llLWdlPD13ZSl7bGV0IEVlPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7RWUrPWwuc3VtQ2VsbFNpemVzKDAsZik7Zm9yKGxldCBaZT1oO1plPjA7WmUtLSlpZihFZSs9bC5zdW1DZWxsU2l6ZXMoWmUtMSxaZSksVy50b3AraWUt''@;'; put 'put ''RWU8PXdlKXtUPVplO2JyZWFrfX19cmV0dXJuIFR9Z2V0TGFzdFZpc2libGVSb3coKXtjb25zdHt0b3BPdmVybGF5Omwsd3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCx0b3RhbFJvd3M6aCxyb290V2luZG93OmZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtsZXQgXz1hLmdldExhc3RWaXNpYmxlUm93''@;'; put 'put ''KCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IFQ9cWwoYS53dFJvb3RFbGVtZW50KSxXPW55KGYsZik7aWYoVC50b3A+Vyl7Y29uc3QgaWU9amYoZik7bGV0IGdlPWQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCk7Zm9yKGxldCB3ZT0xO3dlPD1oO3dlKyspaWYo''@;'; put 'put ''Z2UrPWwuc3VtQ2VsbFNpemVzKHdlLTEsd2UpLFQudG9wK2dlLVc+PWllKXtfPXdlLTI7YnJlYWt9fX1yZXR1cm4gX31nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdHtpbmxpbmVTdGFydE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsQ29sdW1uczpoLHJvb3RXaW5k''@;'; put 'put ''b3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBfPWEuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCk7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IFQ9cWwoYS53dFJvb3RFbGVtZW50KSxXPWl5KGEuaGlkZXIpLGllPWl5KGYpLGdlPU1hdGguYWJzKGlrKGYs''@;'; put 'put ''ZikpO2lmKFQubGVmdCtXLWllPD1nZSl7bGV0IHdlPWQuZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IEVlPWg7RWU+MDtFZS0tKWlmKHdlKz1sLnN1bUNlbGxTaXplcyhFZS0xLEVlKSxULmxlZnQrVy13ZTw9Z2Upe189RWU7YnJlYWt9fX1yZXR1cm4gX31nZXRMYXN0VmlzaWJsZUNvbHVt''@;'; put 'put ''bigpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6X309dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCBUPWQuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTtpZihhLm1haW5UYWJsZVNj''@;'; put 'put ''cm9sbGFibGVFbGVtZW50PT09Xyl7bGV0IGllPW51bGw7aWYobC5nZXRTZXR0aW5nKCJydGxNb2RlIikpe2NvbnN0IHdlPWQuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWU9TWF0aC5hYnMod2UucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cuZG9jdW1lbnQu''@;'; put 'put ''ZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKX1lbHNlIGllPXFsKGQud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBnZT1NYXRoLmFicyhpayhfLF8pKTtpZihpZT5nZSl7Y29uc3Qgd2U9aXkoXyk7bGV0IEVlPWguZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IFplPTE7WmU8PWY7WmUr''@;'; put 'put ''KylpZihFZSs9YS5zdW1DZWxsU2l6ZXMoWmUtMSxaZSksaWUrRWUtZ2U+PXdlKXtUPVplLTI7YnJlYWt9fX1yZXR1cm4gVH19KHRoaXMuY3JlYXRlU2Nyb2xsRGFvKCkpfWZpbmRPcmlnaW5hbEhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzLmxl''@;'; put 'put ''bmd0aCYmdGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGgpe2ZvcihsZXQgYT0wLGQ9dGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlcy5sZW5ndGg7YTxkO2ErKylsLnB1c2godGhpcy53dFRhYmxlLlRIRUFELmNoaWxkTm9k''@;'; put 'put ''ZXNbMF0uY2hpbGROb2Rlc1thXS5pbm5lckhUTUwpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RofHx0aGlzLnd0U2V0dGluZ3MudXBkYXRlKCJjb2x1bW5IZWFkZXJzIixbZnVuY3Rpb24oYSxkKXtqcChkLGxbYV0pfV0pfX1jcmVhdGVDZWxsQ29v''@;'; put 'put ''cmRzKGwsYSl7cmV0dXJuIG5ldyBTayhsLGEsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gbmV3IFpOKGwsYSxkLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWRyYXcoKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMSxsfHx0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCk/dGhpcy53dFRhYmxlLmRyYXcobCk6dGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITAsdGhpc31nZXRD''@;'; put 'put ''ZWxsKGwpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSkpcmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGg9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLF89dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYobC5yb3c8aCYmbC5jb2w8XylyZXR1cm4gdGhpcy53dE92ZXJs''@;'; put 'put ''YXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8aClyZXR1cm4gdGhpcy53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwuY29sPF8mJmwucm93Pj1kLWYpe2lmKHRoaXMud3RPdmVy''@;'; put 'put ''bGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxs''@;'; put 'put ''KGwpfWVsc2V7aWYobC5jb2w8XylyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCk7aWYobC5yb3c8ZCYmbC5yb3c+PWQtZiYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkmJnRoaXMud3RPdmVybGF5cy5ib3R0b21P''@;'; put 'put ''dmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9cmV0dXJuIHRoaXMud3RUYWJsZS5nZXRDZWxsKGwpfXNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil7cmV0dXJuIShsLmNvbDwwfHxsLnJvdzwwKSYmdGhpcy53''@;'; put 'put ''dFNjcm9sbC5zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtyZXR1cm4hKGw8MCkmJnRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl7cmV0''@;'; put 'put ''dXJuIShsPDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEsZCl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19ZGVzdHJveSgpe3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1jcmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigpe3Jl''@;'; put 'put ''dHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCB3''@;'; put 'put ''dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gbC53dFNldHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRp''@;'; put 'put ''bmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJvd3NC''@;'; put 'put ''b3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfSxnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhpczty''@;'; put 'put ''ZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwud3RW''@;'; put 'put ''aWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVjdGlvbnMoKXtyZXR1cm4gbC5zZWxlY3Rpb25zfSxnZXQgZHJhd24oKXtyZXR1cm4gbC5k''@;'; put 'put ''cmF3bn0sc2V0IGRyYXduKGEpe2wuZHJhd249YX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgc3RhcnRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBzdGFydENvbHVtblZpc2li''@;'; put 'put ''bGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7''@;'; put 'put ''cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgY291bnRDb2x1bW5zUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRDb2x1bW5zVmlzaWJsZSgpe3JldHVy''@;'; put 'put ''biBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fSxnZXQgc3RhcnRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBzdGFydFJvd1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJv''@;'; put 'put ''d3NWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBlbmRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5k''@;'; put 'put ''Um93fSxnZXQgY291bnRSb3dzUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLmNvdW50fSxnZXQgY291bnRSb3dzVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmNvdW50fX19fWZ1bmN0aW9uIEt0ZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gYkFlKGMpe3ZhciBsPWZ1bmN0aW9uIHlBZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHdBZSBleHRlbmRzIFlOe2NvbnN0cnVjdG9yKGwsYSxkKXtz''@;'; put 'put ''dXBlcihsLGEpLEt0ZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxLdGUodGhpcywiY2xvbmVPdmVybGF5Iix2b2lkIDApO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1kLnNvdXJjZSx0aGlzLmNsb25lT3Zlcmxh''@;'; put 'put ''eT1kLm92ZXJsYXksdGhpcy53dFRhYmxlPXRoaXMuY2xvbmVPdmVybGF5LmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVEYW8oKSxoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9ZC52aWV3cG9ydCx0aGlzLnNlbGVjdGlvbnM9ZC5zZWxlY3Rpb25z''@;'; put 'put ''LHRoaXMud3RFdmVudD1uZXcgVnRlKGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9ucyxkLmV2ZW50KSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX19Y2xhc3MgcHl7Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQsaCxmKXsoZnVuY3Rpb24gQ0FlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBTQWUoYyl7dmFyIGw9ZnVuY3Rpb24gTUFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJ3dFNldHRpbmdz''@;'; put 'put ''IixudWxsKSxmaCh0aGlzLCJ3b3QiLGwse3dyaXRhYmxlOiExfSksdGhpcy5kb21CaW5kaW5ncz1mLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFNldHRpbmdzPWg7Y29uc3R7VEFCTEU6XyxoaWRlcjpULHNwcmVhZGVyOlcsaG9sZGVyOmllLHd0Um9vdEVsZW1lbnQ6Z2V9PXRoaXMud290''@;'; put 'put ''Lnd0VGFibGU7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT1fLHRoaXMuaGlkZXI9VCx0aGlzLnNwcmVhZGVyPVcsdGhpcy5ob2xkZXI9aWUsdGhpcy53dFJvb3RFbGVtZW50PWdlLHRoaXMu''@;'; put 'put ''dHJpbW1pbmdDb250YWluZXI9dmcodGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLHRoaXMudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpLHRoaXMuY2xvbmU9dGhpcy5tYWtlQ2xvbmUoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl7Y29uc3QgbD10aGlzLm5lZWRGdWxsUmVuZGVy''@;'; put 'put ''O3RoaXMubmVlZEZ1bGxSZW5kZXI9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCk7Y29uc3QgYT1sIT09dGhpcy5uZWVkRnVsbFJlbmRlcjtyZXR1cm4gYSYmIXRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMucmVzZXQoKSxhfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4hMH11cGRhdGVUcmltbWlu''@;'; put 'put ''Z0NvbnRhaW5lcigpe3RoaXMudHJpbW1pbmdDb250YWluZXI9dmcodGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Qse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlz''@;'; put 'put ''Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP3RoaXMud290Lnd0VGFibGUuaG9sZGVyOnJ5KGwuVEFCTEUpfWdldFJlbGF0aXZlQ2Vs''@;'; put 'put ''bFBvc2l0aW9uKGwsYSxkKXtpZighMT09PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuY29udGFpbnMobCkpcmV0dXJuIHZvaWQgR2EoYFRoZSBwcm92aWRlZCBlbGVtZW50IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSAke3RoaXMudHlwZX0gb3ZlcmxheWApO2NvbnN0IGg9dGhpcy5tYWluVGFi''@;'; put 'put ''bGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxmPWQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksXz1hPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxUPWE+PXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksVz10aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIsaWU9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKFcpLHRvcDpXLm9mZnNldFRvcH0s''@;'; put 'put ''Z2U9e3N0YXJ0OnRoaXMuZ2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpLHRvcDpsLm9mZnNldFRvcH07bGV0IHdlPW51bGw7cmV0dXJuIHdlPWg/dGhpcy5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbldpbmRvdyhfLGYsZ2UsaWUpOnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25X''@;'; put 'put ''aXRoaW5Ib2xkZXIoXyxULGYsZ2UsaWUpLHdlfWdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5pc1J0bCgpP2wub2Zmc2V0UGFyZW50Lm9mZnNldFdpZHRoLWwub2Zmc2V0TGVmdC1sLm9mZnNldFdpZHRoOmwub2Zmc2V0TGVmdH1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlv''@;'; put 'put ''bldpdGhpbldpbmRvdyhsLGEsZCxoKXtjb25zdCBmPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgXz0wLFQ9MDtpZihhKXtsZXQgVz1mLmxlZnQ7dGhpcy5pc1J0bCgpJiYoVz10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5u''@;'; put 'put ''ZXJXaWR0aC0oZi5sZWZ0K2Yud2lkdGgrSWMoKSkpLF89Vzw9MD8tMSpXOjB9ZWxzZSBfPWguc3RhcnQ7cmV0dXJuIFQ9bD90aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWYudG9wOmgudG9wLHtzdGFydDpkLnN0YXJ0K18sdG9wOmQudG9wK1R9''@;'; put 'put ''fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGwsYSxkLGgsZil7Y29uc3QgX19ob3Jpem9udGFsPXRoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksX192ZXJ0aWNhbD10aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJs''@;'; put 'put ''YXkuZ2V0U2Nyb2xsUG9zaXRpb24oKTtsZXQgVD0wLFc9MDtpZihkfHwoVD1fX2hvcml6b250YWwtZi5zdGFydCksYSl7Y29uc3QgaWU9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1c9LTEqdGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdl''@;'; put 'put ''dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCtpZS50b3B9ZWxzZSBsfHwoVz1fX3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1ULHRvcDpoLnRvcC1XfX1tYWtlQ2xvbmUoKXtpZigtMT09PVlrZS5pbmRleE9mKHRoaXMudHlwZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0''@;'; put 'put ''eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9YS5jcmVhdGVFbGVtZW50KCJESVYiKSxmPWEuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSxf''@;'; put 'put ''PWwud3RSb290RWxlbWVudC5wYXJlbnROb2RlO2guY2xhc3NOYW1lPWAke1drZS5nZXQodGhpcy50eXBlKX0gaGFuZHNvbnRhYmxlYCxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsKCk/InJ0bCI6Imx0ciIpLGguc3R5bGUucG9zaXRpb249ImFic29sdXRlIixoLnN0eWxlLnRvcD0w''@;'; put 'put ''LGguc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLHRoaXMuaXNSdGwoKT9oLnN0eWxlLnJpZ2h0PTA6aC5zdHlsZS5sZWZ0PTAsZi5jbGFzc05hbWU9bC5UQUJMRS5jbGFzc05hbWUsaC5hcHBlbmRDaGlsZChmKSxfLmFwcGVuZENoaWxkKGgpO2NvbnN0IFQ9dGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSEwPT09VHx8Imhvcml6b250YWwiPT09VCYmdGhpcy50eXBlPT09eWd8fCJ2ZXJ0aWNhbCI9PT1UJiZ0aGlzLnR5cGU9PT13Zz9kOiJoaWRkZW4iPT09ZC5nZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKF8pLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/bC5ob2xkZXI6cnkobC5UQUJMRSksbmV3IHdBZShmLHRoaXMud3RTZXR0aW5ncyx7c291cmNlOnRoaXMud290LG92ZXJsYXk6dGhpcyx2aWV3cG9ydDp0aGlzLndvdC53dFZpZXdwb3J0LGV2ZW50OnRoaXMud290Lnd0RXZlbnQs''@;'; put 'put ''c2VsZWN0aW9uczp0aGlzLndvdC5zZWxlY3Rpb25zfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgYT10aGlzLnNob3VsZEJlUmVuZGVyZWQoKTt0aGlzLmNsb25lJiYodGhpcy5uZWVkRnVsbFJl''@;'; put 'put ''bmRlcnx8YSkmJnRoaXMuY2xvbmUuZHJhdyhsKSx0aGlzLm5lZWRGdWxsUmVuZGVyPWF9cmVzZXQoKXtpZighdGhpcy5jbG9uZSlyZXR1cm47Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO0RuKFtsLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVu''@;'; put 'put ''dE5vZGUuc3R5bGVdLF89PntfLndpZHRoPSIiLF8uaGVpZ2h0PSIifSl9aXNSdGwoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKX1kZXN0cm95KCl7dGhpcy5jbG9uZS5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX1jbGFzcyBBQWUgZXh0ZW5kcyBweXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEseWcsZCxoKSxmdW5jdGlvbiB4QWUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIEVBZShjKXt2YXIgbD1mdW5jdGlvbiBrQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzVG9wIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0w''@;'; put 'put ''O2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBKa2UoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxs''@;'; put 'put ''UmVuZGVyfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZl''@;'; put 'put ''bnRPdmVyZmxvdyIpO2xldCBoPTAsZj0hMTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8ZCYmInZlcnRpY2FsIj09PWQpaD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksc3kobCk7ZWxzZXtjb25zdHt3dFRhYmxlOlR9PXRoaXMud290LFc9VC5oaWRlci5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKTtmPU1hdGguY2VpbChXLmJvdHRvbSk9PT1sLm9mZnNldEhlaWdodCxoPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLG9rKGwsIjBweCIsYCR7aH1weGApfWNvbnN0IF89dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oaCxmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50''@;'; put 'put ''c1NpemUoKSxffXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93O2xldCBkPSExO3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YSYmYS5zY3JvbGxZIT09bD8oYS5zY3JvbGxUbyhtZyhhKSxsKSxkPSEwKTp0aGlz''@;'; put 'put ''Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD1sLGQ9ITApLGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxs''@;'; put 'put ''U2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik7bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KXtjb25zdCBfPXRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGgpO2YrPXZvaWQgMD09PV8/ZDpfLGgrPTF9cmV0dXJuIGZ9YWRq''@;'; put 'put ''dXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksKHRoaXMubmVlZEZ1bGxSZW5kZXJ8fGwpJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUo''@;'; put 'put ''KSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9SWMoYSksXz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVy''@;'; put 'put ''LnBhcmVudE5vZGUuc3R5bGUsVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWR8fCJob3Jpem9udGFsIj09PVQpe2xldCBpZT10aGlzLndvdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCk7dGhp''@;'; put 'put ''cy53b3Qud3RPdmVybGF5cy5oYXNTY3JvbGxiYXJSaWdodCYmKGllLT1oKSxpZT1NYXRoLm1pbihpZSxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLF8ud2lkdGg9YCR7aWV9cHhgfWVsc2UgXy53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPV8ud2lk''@;'; put 'put ''dGg7bGV0IFc9YWwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChXPTApLF8uaGVpZ2h0PWAke1d9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXt2YXIgbDtjb25zdHtob2xkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlLHtz''@;'; put 'put ''ZWxlY3Rpb25zOmR9PXRoaXMud290LGg9dGhpcy5mYWNhZGVHZXR0ZXIoKSxmPU1hdGguYWJzKG51bGwhPT0obD1kPy5nZXRDZWxsKCkuZ2V0Qm9yZGVyKGgpLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0KSYmdm9pZCAwIT09bD9sOjApO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53''@;'; put 'put ''aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGEuc3R5bGUud2lkdGg9YS5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGEuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2Z9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVl''@;'; put 'put ''ZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0''@;'; put 'put ''Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLF89KGQu''@;'; put 'put ''Y2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcjtsZXQgVD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksVz0wO2lmKGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSYmKGE9''@;'; put 'put ''ITEpLGEmJl8ub2Zmc2V0SGVpZ2h0IT09Xy5jbGllbnRIZWlnaHQmJihXPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYSl7Y29uc3QgaWU9aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxnZT1oLmdldFNldHRpbmcoInRvdGFsUm93cyIpO1QrPXRoaXMuc3VtQ2Vs''@;'; put 'put ''bFNpemVzKDAsbCsxKSxULT1kLnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKS10aGlzLnN1bUNlbGxTaXplcyhnZS1pZSxnZSksVCs9MX1lbHNlIFQrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIFQrPVcsdGhpcy5zZXRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbihUKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0''@;'; put 'put ''dXJuIG55KHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVy''@;'; put 'put ''ZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBfPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtkPU1hdGgubWF4KHRoaXMuZ2V0''@;'; put 'put ''U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD5fJiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25z''@;'; put 'put ''dCBkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpP1dvKGQsImVtcHR5Q29sdW1ucyIpOnBpKGQsImVtcHR5Q29sdW1ucyIpO2xldCBmPSExO2lmKCFhKXtjb25zdCBfPXRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxUPXRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wIT09XyxXPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKFR8fDA9PT1fKSYmVy5sZW5ndGg+MCl7Y29uc3QgaWU9Qm8oZCwiaW5uZXJCb3JkZXJUb3AiKTt0aGlz''@;'; put 'put ''LmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT8ocGkoZCwiaW5uZXJCb3JkZXJUb3AiKSxmPSFpZSk6KFdvKGQsImlubmVyQm9yZGVyVG9wIiks''@;'; put 'put ''Zj1pZSl9fXJldHVybiBmfX1jb25zdCBYdGU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxhPWMtbDtyZXR1cm4gMD09PWN8''@;'; put 'put ''fDA9PT1sPy0xOmE8MD8wOmF9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9t''@;'; put 'put ''IiksYyl9LGdldFZpc2libGVSb3dzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpfX07ZmgoWHRlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c0JvdHRvbSIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBKdGU9WHRlO2NsYXNzIFdOIGV4dGVuZHMg''@;'; put 'put ''dTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxnaCl9fVRhKFdOLEp0ZSksVGEoV04sTk4pO2NvbnN0IERBZT1XTjtjbGFzcyBPQWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZ2gsZCxoKSxmdW5jdGlvbiBJQWUoYyxsLGEpe3JldHVybiBs''@;'; put 'put ''PWZ1bmN0aW9uIExBZShjKXt2YXIgbD1mdW5jdGlvbiBSQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9s''@;'; put 'put ''OlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2FjaGVkRml4ZWRSb3dzQm90dG9tIiwtMSksdGhpcy5jYWNoZWRGaXhlZFJvd3NC''@;'; put 'put ''b3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBEQWUoLi4uYSl9c2hvdWxk''@;'; put 'put ''QmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7YS5zdHlsZS50b3A9IiI7bGV0IGQ9MDtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt0aGlzLnRyaW1t''@;'; put 'put ''aW5nQ29udGFpbmVyIT09bHx8aCYmInZlcnRpY2FsIj09PWg/KGQ9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKSk6KGQ9dGhpcy5nZXRPdmVybGF5T2Zmc2V0KCksYS5zdHlsZS5ib3R0b209YCR7ZH1weGApO2NvbnN0IGY9dGhpcy5hZGp1c3RIZWFk''@;'; put 'put ''ZXJCb3JkZXJzUG9zaXRpb24oZCk7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksZn1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5ob2xkZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9SWMoZCkpLGguc3R5''@;'; put 'put ''bGUuYm90dG9tPWAke2Z9cHhgfXNldFNjcm9sbFBvc2l0aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztsZXQgZD0hMTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWE/KGEuc2Nyb2xsVG8obWcoYSksbCksZD0hMCk6dGhpcy5tYWlu''@;'; put 'put ''VGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVz''@;'; put 'put ''KGwsYSl7Y29uc3R7d3RUYWJsZTpkLHd0U2V0dGluZ3M6aH09dGhpcy53b3QsZj1oLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtsZXQgXz1sLFQ9MDtmb3IoO188YTspe2NvbnN0IFc9ZC5nZXRSb3dIZWlnaHQoXyk7VCs9dm9pZCAwPT09Vz9mOlcsXys9MX1yZXR1cm4gVH1hZGp1''@;'; put 'put ''c3RFbGVtZW50c1NpemUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwodGhpcy5uZWVkRnVsbFJlbmRlcnx8bCkmJih0aGlzLmFkanVzdFJvb3RFbGVtZW50U2l6ZSgp''@;'; put 'put ''LHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLGY9SWMoZCksVD10aGlzLmNsb25lLnd0''@;'; put 'put ''VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsVz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PVcpe2xldCBnZT1hLmdldFdvcmtzcGFjZVdpZHRoKCk7dGhpcy53b3Qu''@;'; put 'put ''d3RPdmVybGF5cy5oYXNTY3JvbGxiYXJSaWdodCYmKGdlLT1mKSxnZT1NYXRoLm1pbihnZSxsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLFQud2lkdGg9YCR7Z2V9cHhgfWVsc2UgVC53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPVQud2lkdGg7bGV0''@;'; put 'put ''IGllPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7dGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoaWU9MCksVC5oZWlnaHQ9YCR7aWV9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlO3RoaXMuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVk''@;'; put 'put ''RnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RW''@;'; put 'put ''aWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29u''@;'; put 'put ''c3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCBfPTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKF89SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlz''@;'; put 'put ''LnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsKSxkKz1fLHRoaXMuc2V0U2Nyb2xsUG9zaXRp''@;'; put 'put ''b24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBueSh0''@;'; put 'put ''aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTts''@;'; put 'put ''ZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksXz1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLFQ9dGhpcy5kb21CaW5kaW5ncy5yb290''@;'; put 'put ''RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktVCtoLDApLGQ+XyYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgZj0hMTtpZigoZHx8MD09PWEpJiZoLmxlbmd0aD4wKXtj''@;'; put 'put ''b25zdCBfPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsVD1CbyhfLCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsfHwwPT09dGhpcy53dFNldHRpbmdz''@;'; put 'put ''LmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhwaShfLCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IVQpOihXbyhfLCJpbm5lckJvcmRlckJvdHRvbSIpLGY9VCl9cmV0dXJuIGZ9fWNvbnN0IFF0ZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0''@;'; put 'put ''YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFB''@;'; put 'put ''Y2Nlc3NPYmplY3QuZW5kUm93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfX07ZmgoUXRlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVt''@;'; put 'put ''ZXJhYmxlOiExfSk7Y29uc3QgZW5lPVF0ZSx0bmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRl''@;'; put 'put ''cmVkQ29sdW1uKCl9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtj''@;'; put 'put ''b25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKTtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksYyl9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJl''@;'; put 'put ''ZENvbHVtbnNDb3VudCgpfX07ZmgodG5lLCJNSVhJTl9OQU1FIiwic3RpY2t5Q29sdW1uc1N0YXJ0Iix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IEdOPXRuZTtjbGFzcyAkTiBleHRlbmRzIHU3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsd2cpfX1UYSgk''@;'; put 'put ''TixlbmUpLFRhKCROLEdOKTtjb25zdCBIQWU9JE47Y2xhc3MgTkFlIGV4dGVuZHMgcHl7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLHdnLGQsaCl9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFy''@;'; put 'put ''Z3VtZW50c1tkXTtyZXR1cm4gbmV3IEhBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290''@;'; put 'put ''O2lmKCF0aGlzLm5lZWRGdWxsUmVuZGVyfHwhbC5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJl''@;'; put 'put ''dmVudE92ZXJmbG93Iik7bGV0IGY9MDt0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8aCYmImhvcml6b250YWwiPT09aD8oZj10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksc3koZCkpOihmPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSksb2soZCxgJHtmfXB4''@;'; put 'put ''YCwiMHB4IikpO2NvbnN0IF89dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksX31zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNSdGwoKSYmKGw9LWwpLHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hJiZhLnNjcm9sbFghPT1sPyhhLnNjcm9sbFRvKGwsdDcoYSkpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCE9PWwmJih0aGlzLm1haW5UYWJsZVNjcm9s''@;'; put 'put ''bGFibGVFbGVtZW50LnNjcm9sbExlZnQ9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsVmVydGljYWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0''@;'; put 'put ''aCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOylmKz10aGlzLndvdC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGgpfHxkLGgrPTE7cmV0dXJuIGZ9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3Vt''@;'; put 'put ''ZW50c1swXTt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksKHRoaXMubmVlZEZ1bGxSZW5kZXJ8fGwpJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTps''@;'; put 'put ''fT10aGlzLndvdCx7cm9vdERvY3VtZW50OmEscm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9SWMoYSksXz10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhp''@;'; put 'put ''cy50cmltbWluZ0NvbnRhaW5lciE9PWR8fCJ2ZXJ0aWNhbCI9PT1UKXtsZXQgaWU9dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKTt0aGlzLndvdC53dE92ZXJsYXlzLmhhc1Njcm9sbGJhckJvdHRvbSYmKGllLT1oKSxpZT1NYXRoLm1pbihpZSxsLnd0Um9vdEVsZW1l''@;'; put 'put ''bnQuc2Nyb2xsSGVpZ2h0KSxfLmhlaWdodD1gJHtpZX1weGB9ZWxzZSBfLmhlaWdodD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLmhlaWdodD1fLmhlaWdodDtjb25zdCBXPXdhKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Xy53aWR0aD1gJHtXfXB4YH1hZGp1c3RSb290''@;'; put 'put ''Q2hpbGRyZW5TaXplKCl7dmFyIGw7Y29uc3R7aG9sZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZSx7c2VsZWN0aW9uczpkfT10aGlzLndvdCxoPXRoaXMuZmFjYWRlR2V0dGVyKCksZj1NYXRoLmFicyhudWxsIT09KGw9ZD8uZ2V0Q2VsbCgpLmdldEJvcmRlcihoKS5jb3JuZXJDZW50ZXJQb2lu''@;'; put 'put ''dE9mZnNldCkmJnZvaWQgMCE9PWw/bDowKTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGEuc3R5bGUuaGVpZ2h0PWEucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsYS5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLnBhcmVudE5v''@;'; put 'put ''ZGUuc3R5bGUud2lkdGgsMTApK2Z9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29sdW1u''@;'; put 'put ''c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1''@;'; put 'put ''ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3Zl''@;'; put 'put ''cmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0''@;'; put 'put ''LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRl''@;'; put 'put ''cjtsZXQgXz0wO3JldHVybiBhJiZ0aGlzLndvdC53dFRhYmxlLmdldENvbHVtbldpZHRoKGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpJiYoYT0hMSksYSYmZi5vZmZzZXRXaWR0aCE9PWYuY2xpZW50V2lkdGgmJihfPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERv''@;'; put 'put ''Y3VtZW50KSksYT8oZCs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLGQtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpKTpkKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxsKSxkKz1fLHRoaXMu''@;'; put 'put ''c2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtsZXQgYT0wO3JldHVybiF0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IikmJnRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cmJihhPXRo''@;'; put 'put ''aXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LmxlZnQpLGF9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gTWF0aC5hYnMoaWsodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpKX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9v''@;'; put 'put ''dFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7cmV0dXJuIHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1sfHxhJiYiaG9yaXpvbnRhbCI9PT1hfHwoZD10aGlzLmlzUnRsKCk/TWF0aC5hYnMo''@;'; put 'put ''TWF0aC5taW4odGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSwwKSk6TWF0aC5tYXgodGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKSwwKSxkPnRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxXaWR0aCgp''@;'; put 'put ''LXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCkmJihkPTApKSxkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGg9''@;'; put 'put ''dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpP1dvKGEsImVtcHR5Um93cyIpOnBpKGEsImVtcHR5Um93cyIpO2xldCBfPSExO2lmKGgmJiFkLmxlbmd0aClwaShhLCJpbm5lckJvcmRl''@;'; put 'put ''ckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYoIWgmJmQubGVuZ3RoKXtjb25zdCBUPUJvKGEsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhwaShhLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLF89IVQpOihXbyhhLCJpbm5lckJvcmRl''@;'; put 'put ''ckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLF89VCl9cmV0dXJuIF99fWNsYXNzIHFOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxDZyl9fVRhKHFOLFl0ZSksVGEocU4sR04pO2NvbnN0IFZBZT1xTjtmdW5jdGlvbiBubmUoYyxsLGEpe3JldHVy''@;'; put 'put ''biBsPWZ1bmN0aW9uIEJBZShjKXt2YXIgbD1mdW5jdGlvbiBqQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB6QWUgZXh0ZW5kcyBweXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7c3VwZXIo''@;'; put 'put ''bCxhLENnLGQsaCksbm5lKHRoaXMsInRvcE92ZXJsYXkiLHZvaWQgMCksbm5lKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsdm9pZCAwKSx0aGlzLnRvcE92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1ffWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''YT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBWQWUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyVG9wT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0''@;'; put 'put ''U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCF0aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/b2sobCx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkqKHRoaXMuaXNSdGwoKT8tMToxKSsicHgiLGAke3RoaXMudG9wT3Zlcmxh''@;'; put 'put ''eS5nZXRPdmVybGF5T2Zmc2V0KCl9cHhgKTpzeShsKTtsZXQgYT1hbCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGQ9d2EodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoYT0wKSxsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1gJHthfXB4YCxsLnN0eWxlLndpZHRoPWAke2R9cHhgLCExfX1jbGFzcyBLTiBleHRlbmRzIHU3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsWnApfX1UYShLTixKdGUpLFRhKEtOLEdOKTtjb25zdCBVQWU9S047Y2xhc3MgWkFlIGV4dGVuZHMgcHl7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQsaCxmLF8pe3N1cGVyKGwsYSxacCxkLGgpLHRoaXMuYm90dG9tT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PV99Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTty''@;'; put 'put ''ZXR1cm4gbmV3IFVBZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1y''@;'; put 'put ''ZXNldEZpeGVkUG9zaXRpb24oKXtjb25zdHt3b3Q6bH09dGhpcztpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIWwud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTtpZihhLnN0eWxl''@;'; put 'put ''LnRvcD0iIix0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KXtjb25zdCBmPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSxfPXRoaXMuYm90dG9tT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCk7YS5zdHlsZVt0aGlz''@;'; put 'put ''LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2Z9cHhgLGEuc3R5bGUuYm90dG9tPWAke199cHhgfWVsc2Ugc3koYSksdGhpcy5yZXBvc2l0aW9uT3ZlcmxheSgpO2xldCBkPWFsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7Y29uc3QgaD13YSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUp''@;'; put 'put ''O3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChkPTApLGEuc3R5bGUuaGVpZ2h0PWAke2R9cHhgLGEuc3R5bGUud2lkdGg9YCR7aH1weGAsITF9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERv''@;'; put 'put ''Y3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgp''@;'; put 'put ''JiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPUljKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH19ZnVuY3Rpb24gWmYoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIFlBZShjKXt2YXIgbD1mdW5jdGlvbiBXQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBybmUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHFBZShjKXt2YXIgbD1mdW5jdGlvbiBLQWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJp''@;'; put 'put ''bWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n''@;'; put 'put ''Ij09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jbGFzcyBYQWV7Y29uc3RydWN0b3IobCl7cm5lKHRoaXMsInNldHRpbmdzIix7fSkscm5lKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLGRzKHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGlu''@;'; put 'put ''Z3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNE''@;'; put 'put ''YXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxzdHJldGNoSDoibm9uZSIsY3VycmVudFJvd0NsYXNzTmFtZTpudWxsLGN1cnJlbnRDb2x1bW5DbGFzc05hbWU6bnVsbCxwcmV2ZW50T3ZlcmZsb3c6KCk9PiExLHByZXZlbnRXaGVlbDohMSxkYXRhOnZvaWQgMCxm''@;'; put 'put ''cmVlemVPdmVybGF5czohMSxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c1RvcDowLGZpeGVkUm93c0JvdHRvbTowLHNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPjB8fHRoaXMuZ2V0U2V0dGluZygicm93''@;'; put 'put ''SGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIik+MHx8dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0''@;'; put 'put ''aW5nKCJmaXhlZFJvd3NCb3R0b20iKT4wLG1pblNwYXJlUm93czowLHJvd0hlYWRlcnM6KCk9PltdLGNvbHVtbkhlYWRlcnM6KCk9PltdLHRvdGFsUm93czp2b2lkIDAsdG90YWxDb2x1bW5zOnZvaWQgMCxjZWxsUmVuZGVyZXI6KGwsYSxkKT0+e2pwKGQsdGhpcy5nZXRTZXR0aW5nKCJkYXRh''@;'; put 'put ''IixsLGEpPz8iIil9LGNvbHVtbldpZHRoKCl7fSxyb3dIZWlnaHQoKXt9LGRlZmF1bHRSb3dIZWlnaHQ6MjMsZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOm51bGws''@;'; put 'put ''dmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9uQ2VsbERibENsaWNrOm51bGwsb25D''@;'; put 'put ''ZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZvcmVEcmF3Qm9yZGVyczpudWxsLG9u''@;'; put 'put ''U2Nyb2xsVmVydGljYWxseTpudWxsLG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9sbDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOmw9Pmwsb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpudWxsLG9u''@;'; put 'put ''TW9kaWZ5R2V0Q2VsbENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbFJvd3M6ITEs''@;'; put 'put ''Z3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMX19dXBkYXRlKGwsYSl7cmV0dXJuIHZvaWQgMD09PWE/ZHMobCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3Nb''@;'; put 'put ''bF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0''@;'; put 'put ''aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIFhOIGV4dGVuZHMgdTd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVy''@;'; put 'put ''bGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9dmcodGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxl''@;'; put 'put ''Lm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9bjcobCwiaGVpZ2h0IixhKSxmPW43KGwsIm92ZXJmbG93IixhKSxfPXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0''@;'; put 'put ''aDpULHNjcm9sbEhlaWdodDpXfT1sO2xldHt3aWR0aDppZSxoZWlnaHQ6Z2V9PWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikpe2NvbnN0IEVlPWwuY2xvbmVOb2RlKCExKTtFZS5zdHlsZS5vdmVyZmxvdz0iYXV0''@;'; put 'put ''byIsRWUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZShFZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZChFZSk7Y29uc3QgWmU9cGFyc2VJbnQoenAoRWUsYSkuaGVpZ2h0LDEwKTtkLnJlbW92ZUNoaWxkKEVl''@;'; put 'put ''KSwwPT09WmUmJihnZT0wKX1nZT1NYXRoLm1pbihnZSxXKSxfLmhlaWdodD0iYXV0byI9PT1oPyJhdXRvIjpgJHtnZX1weGAsaWU9TWF0aC5taW4oaWUsVCksXy53aWR0aD1gJHtpZX1weGAsXy5vdmVyZmxvdz0iIix0aGlzLmhhc1RhYmxlSGVpZ2h0PSJhdXRvIj09PV8uaGVpZ2h0fHxnZT4w''@;'; put 'put ''LHRoaXMuaGFzVGFibGVXaWR0aD1pZT4wfXRoaXMuaXNUYWJsZVZpc2libGU9ZTcodGhpcy5UQUJMRSl9bWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGQ9Im1hc3RlciIsZj1s''@;'; put 'put ''LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7aWYoZiYmIWEuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXSl7Y29uc3QgVD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsVz10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBp''@;'; put 'put ''ZT0wO2llPGY7aWUrKylmb3IobGV0IGdlPS0xKlQ7Z2U8VztnZSsrKXRoaXMubWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKGdlKTthLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF09ITB9fX1UYShYTixlbmUpLFRhKFhOLE5OKTtjb25zdCBKQWU9WE47Rig1MTAxKTtjb25z''@;'; put 'put ''dCBpbmU9bmV3IFdlYWtNYXA7Y2xhc3MgSk57c3RhdGljIGdldCBERUZBVUxUX0hFSUdIVCgpe3JldHVybiAyM31jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJyaWRlRm46ZixjYWxjdWxhdGlvblR5''@;'; put 'put ''cGU6XyxzY3JvbGxiYXJIZWlnaHQ6VH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2luZS5zZXQodGhpcyx7dmlld3BvcnRIZWlnaHQ6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbFJvd3M6ZCxyb3dIZWlnaHRGbjpoLG92ZXJyaWRlRm46''@;'; put 'put ''ZixjYWxjdWxhdGlvblR5cGU6Xyxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OlR9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFydFJvdz1udWxsLHRoaXMuZW5kUm93PW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMu''@;'; put 'put ''Y2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7Y29uc3QgbD1pbmUuZ2V0KHRoaXMpLGE9bC5jYWxjdWxhdGlvblR5cGUsZD1sLm92ZXJyaWRlRm4saD1sLnJvd0hlaWdodEZuLGY9bC5zY3JvbGxPZmZzZXQsXz1NYXRoLm1heChsLnNjcm9sbE9mZnNldCwwKSxUPWwudG90YWxSb3dzLFc9bC52aWV3''@;'; put 'put ''cG9ydEhlaWdodCxpZT1sLmhvcml6b250YWxTY3JvbGxiYXJIZWlnaHR8fDA7bGV0IGdlPTAsd2U9ITA7Y29uc3QgRWU9W107bGV0IFplLG90PTAsZXQ9MDtmb3IobGV0IFF0PTA7UXQ8VDtRdCsrKWlmKFplPWgoUXQpLGlzTmFOKFplKSYmKFplPUpOLkRFRkFVTFRfSEVJR0hUKSxnZTw9XyYm''@;'; put 'put ''MiE9PWEmJih0aGlzLnN0YXJ0Um93PVF0LG90PVplKSxnZT49XyYmZ2UrKDI9PT1hP1plOjApPD1fK1ctaWUmJihudWxsPT09dGhpcy5zdGFydFJvdyYmKHRoaXMuc3RhcnRSb3c9UXQsb3Q9WmUpLHRoaXMuZW5kUm93PVF0KSxFZS5wdXNoKGdlKSxnZSs9WmUsZXQ9WmUsMiE9PWEmJih0aGlz''@;'; put 'put ''LmVuZFJvdz1RdCksZ2U+PV8rVy1pZSl7d2U9ITE7YnJlYWt9Y29uc3QgU3Q9Mj09PWE/MDpldDtpZih0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShmK1ctaWU8KDI9PT1hP290OjApfHxmPkVlLmF0KC0xKStTdCksdGhpcy5lbmRSb3c9PT1ULTEmJndlKWZvcih0aGlzLnN0''@;'; put 'put ''YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IFF0PUVlW3RoaXMuZW5kUm93XStaZS1FZVt0aGlzLnN0YXJ0Um93LTFdO2lmKChRdDw9Vy1pZXx8MiE9PWEpJiYodGhpcy5zdGFydFJvdy09MSksUXQ+PVctaWUpYnJlYWt9MT09PWEmJm51bGwhPT10aGlzLnN0YXJ0''@;'; put 'put ''Um93JiZkJiZkKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1FZVt0aGlzLnN0YXJ0Um93XSx2b2lkIDA9PT10aGlzLnN0YXJ0UG9zaXRpb24mJih0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCksVDx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PVQtMSksbnVsbCE9PXRoaXMuc3RhcnRSb3cmJih0''@;'; put 'put ''aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWNvbnN0IG9uZT1KTixkNz1uZXcgV2Vha01hcDtjbGFzcyBRTntzdGF0aWMgZ2V0IERFRkFVTFRfV0lEVEgoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IoKXtsZXR7dmlld3BvcnRTaXplOmwsc2Nyb2xsT2Zmc2V0OmEsdG90''@;'; put 'put ''YWxJdGVtczpkLGl0ZW1TaXplRm46aCxvdmVycmlkZUZuOmYsY2FsY3VsYXRpb25UeXBlOl8sc3RyZXRjaE1vZGU6VCxzdHJldGNoaW5nSXRlbVdpZHRoRm46Vz0oZ2U9PmdlKSxpbmxpbmVTdGFydE9mZnNldDppZX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOnt9O2Q3LnNldCh0aGlzLHt2aWV3cG9ydFdpZHRoOmwsc2Nyb2xsT2Zmc2V0OmEsdG90YWxDb2x1bW5zOmQsY29sdW1uV2lkdGhGbjpoLG92ZXJyaWRlRm46ZixjYWxjdWxhdGlvblR5cGU6XyxzdHJldGNoaW5nQ29sdW1uV2lkdGhGbjpXLGlubGluZVN0YXJ0T2Zmc2V0''@;'; put 'put ''OmllfSksdGhpcy5jb3VudD0wLHRoaXMuc3RhcnRDb2x1bW49bnVsbCx0aGlzLmVuZENvbHVtbj1udWxsLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hMSx0aGlzLnN0cmV0Y2hBbGxSYXRpbz0wLHRoaXMuc3RyZXRjaExhc3RXaWR0''@;'; put 'put ''aD0wLHRoaXMuc3RyZXRjaD1ULHRoaXMudG90YWxUYXJnZXRXaWR0aD0wLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMCx0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGg9W10sdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtsZXQgbD0wLGE9ITA7Y29uc3QgZD1bXTtsZXQg''@;'; put 'put ''aCxmPTAsXz0wO2NvbnN0IFQ9ZDcuZ2V0KHRoaXMpLFc9VC5jYWxjdWxhdGlvblR5cGUsaWU9VC5vdmVycmlkZUZuLGdlPVQuc2Nyb2xsT2Zmc2V0LHdlPU1hdGgubWF4KFQuc2Nyb2xsT2Zmc2V0LDApLEVlPVQudG90YWxDb2x1bW5zLFplPVQudmlld3BvcnRXaWR0aCxvdD13ZT4wP1plKzE6''@;'; put 'put ''WmU7Zm9yKGxldCBTdD0wO1N0PEVlO1N0KyspaWYoaD10aGlzLl9nZXRDb2x1bW5XaWR0aChTdCksbDw9d2UmJjIhPT1XJiYodGhpcy5zdGFydENvbHVtbj1TdCxmPWgpLGw+PXdlJiZsKygyPT09Vz9oOjApPD13ZStvdCYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29s''@;'; put 'put ''dW1uPVN0LGY9aCksdGhpcy5lbmRDb2x1bW49U3QpLGQucHVzaChsKSxsKz1oLF89aCwyIT09VyYmKHRoaXMuZW5kQ29sdW1uPVN0KSxsPj13ZStaZSl7YT0hMTticmVha31jb25zdCB5dD0yPT09Vz8wOl8sa3Q9Mj09PVc/ZjowO2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5l''@;'; put 'put ''cj0hKGdlK1plLW90PC0xKlQuaW5saW5lU3RhcnRPZmZzZXR8fGdlPmQuYXQoLTEpK3l0fHwtMSpULnNjcm9sbE9mZnNldC1ULnZpZXdwb3J0V2lkdGg+LTEqa3QpLHRoaXMuZW5kQ29sdW1uPT09RWUtMSYmYSlmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0''@;'; put 'put ''Q29sdW1uPjA7KXtjb25zdCBTdD1kW3RoaXMuZW5kQ29sdW1uXStoLWRbdGhpcy5zdGFydENvbHVtbi0xXTtpZigoU3Q8PVplfHwyIT09VykmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxTdD5aZSlicmVha30xPT09VyYmbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJmllJiZpZSh0aGlzKSx0aGlz''@;'; put 'put ''LnN0YXJ0UG9zaXRpb249ZFt0aGlzLnN0YXJ0Q29sdW1uXSx2b2lkIDA9PT10aGlzLnN0YXJ0UG9zaXRpb24mJih0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCksRWU8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1FZS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291''@;'; put 'put ''bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX1yZWZyZXNoU3RyZXRjaGluZyhsKXtpZigibm9uZSI9PT10aGlzLnN0cmV0Y2gpcmV0dXJuO2xldCBhPWw7dGhpcy50b3RhbFRhcmdldFdpZHRoPWE7Y29uc3QgZD1kNy5nZXQodGhpcyksaD1kLnRvdGFsQ29sdW1ucztsZXQg''@;'; put 'put ''Zj0wO2ZvcihsZXQgVD0wO1Q8aDtUKyspe2NvbnN0IFc9dGhpcy5fZ2V0Q29sdW1uV2lkdGgoVCksaWU9ZC5zdHJldGNoaW5nQ29sdW1uV2lkdGhGbih2b2lkIDAsVCk7Im51bWJlciI9PXR5cGVvZiBpZT9hLT1pZTpmKz1XfWNvbnN0IF89YS1mO2lmKCJhbGwiPT09dGhpcy5zdHJldGNoJiZf''@;'; put 'put ''PjApdGhpcy5zdHJldGNoQWxsUmF0aW89YS9mLHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aD1bXSx0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGg9ITA7ZWxzZSBpZigibGFzdCI9PT10aGlzLnN0cmV0Y2gmJmEhPT0xLzApe2NvbnN0IFQ9dGhpcy5fZ2V0Q29sdW1uV2lkdGgoaC0x''@;'; put 'put ''KSxXPV8rVDt0aGlzLnN0cmV0Y2hMYXN0V2lkdGg9Vz49MD9XOlR9fWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4iYWxsIj09PXRoaXMuc3RyZXRjaCYmMCE9PXRoaXMuc3RyZXRjaEFsbFJhdGlvP2Q9dGhpcy5fZ2V0U3RyZXRjaGVkQWxsQ29sdW1uV2lk''@;'; put 'put ''dGgobCxhKToibGFzdCI9PT10aGlzLnN0cmV0Y2gmJjAhPT10aGlzLnN0cmV0Y2hMYXN0V2lkdGgmJihkPXRoaXMuX2dldFN0cmV0Y2hlZExhc3RDb2x1bW5XaWR0aChsKSksZH1fZ2V0U3RyZXRjaGVkQWxsQ29sdW1uV2lkdGgobCxhKXtsZXQgZD0wO2NvbnN0IGg9ZDcuZ2V0KHRoaXMpLGY9''@;'; put 'put ''aC50b3RhbENvbHVtbnM7aWYoIXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXSl7Y29uc3QgXz1NYXRoLnJvdW5kKGEqdGhpcy5zdHJldGNoQWxsUmF0aW8pLFQ9aC5zdHJldGNoaW5nQ29sdW1uV2lkdGhGbihfLGwpO3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXT12b2lkIDA9''@;'; put 'put ''PT1UP186aXNOYU4oVCk/dGhpcy5fZ2V0Q29sdW1uV2lkdGgobCk6VH1pZih0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoPT09ZiYmdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoKXt0aGlzLm5lZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGg9ITE7Zm9yKGxldCBfPTA7Xzx0''@;'; put 'put ''aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoO18rKylkKz10aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGhbX107ZCE9PXRoaXMudG90YWxUYXJnZXRXaWR0aCYmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFt0aGlzLnN0cmV0Y2hBbGxDb2x1bW5zV2lkdGgubGVuZ3RoLTFd''@;'; put 'put ''Kz10aGlzLnRvdGFsVGFyZ2V0V2lkdGgtZCl9cmV0dXJuIHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFtsXX1fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldpZHRoKGwpe3JldHVybiBsPT09ZDcuZ2V0KHRoaXMpLnRvdGFsQ29sdW1ucy0xP3RoaXMuc3RyZXRjaExhc3RXaWR0aDpudWxsfV9n''@;'; put 'put ''ZXRDb2x1bW5XaWR0aChsKXtsZXQgYT1kNy5nZXQodGhpcykuY29sdW1uV2lkdGhGbihsKTtyZXR1cm4gaXNOYU4oYSkmJihhPVFOLkRFRkFVTFRfV0lEVEgpLGF9fWNvbnN0IGVWPVFOO2NsYXNzIHRUZSBleHRlbmRzIFlOe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxuZXcgWEFlKGEpKTtj''@;'; put 'put ''b25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMud3RUYWJsZT1uZXcgSkFlKHRoaXMuZ2V0VGFibGVEYW8oKSxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9bmV3IGNsYXNzIFFBZXtjb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEsZCxoLGYpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1mLHRoaXMub3ZlcnNpemVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENv''@;'; put 'put ''bHVtbkhlYWRlcnM9W10sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5jb250YWluZXJXaWR0aD1OYU4sdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVt''@;'; put 'put ''bnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9Pnt0aGlzLmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgp''@;'; put 'put ''fSl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBkPTA7cmV0dXJuIGQ9YT09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1''@;'; put 'put ''bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OmFsKGEpPjAmJmEuY2xpZW50SGVpZ2h0PjA/YS5jbGllbnRIZWlnaHQ6MS8wLGR9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3Jvb3REb2N1bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxo''@;'; put 'put ''PXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcixmPWEuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLF89bC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxUPWwuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IiksVz1sLmdldFNl''@;'; put 'put ''dHRpbmcoInJ0bE1vZGUiKSxpZT10aGlzLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksd2U9Zi0oVz9pZS5yaWdodC1mOmllLmxlZnQpO2xldCBFZSxaZTtpZihUKXJldHVybiB3YSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudCk7aWYoRWU9bC5nZXRTZXR0aW5nKCJm''@;'; put 'put ''cmVlemVPdmVybGF5cyIpP01hdGgubWluKHdlLGYpOk1hdGgubWluKHRoaXMuZ2V0Q29udGFpbmVyRmlsbFdpZHRoKCksd2UsZiksaD09PWQmJl8+MCYmdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCxfLTEpPkVlKXJldHVybiBhLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtpZihoIT09ZCYm''@;'; put 'put ''KFplPW43KHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lciwib3ZlcmZsb3ciLGQpLCJzY3JvbGwiPT09WmV8fCJoaWRkZW4iPT09WmV8fCJhdXRvIj09PVplKSlyZXR1cm4gTWF0aC5tYXgoRWUsaC5jbGllbnRXaWR0aCk7Y29uc3Qgb3Q9''@;'; put 'put ''bC5nZXRTZXR0aW5nKCJzdHJldGNoSCIpO3JldHVybiJub25lIiE9PW90JiZvdD9FZTpNYXRoLm1heChFZSx3YSh0aGlzLnd0VGFibGUuVEFCTEUpKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0SGVpZ2h0PnRoaXMuZ2V0V29ya3NwYWNlSGVp''@;'; put 'put ''Z2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0V2lkdGg+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpfXN1bUNvbHVtbldpZHRocyhsLGEpe2xldCBkPTAsaD1sO2Zvcig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgo''@;'; put 'put ''aCksaCs9MTtyZXR1cm4gZH1nZXRDb250YWluZXJGaWxsV2lkdGgoKXtpZih0aGlzLmNvbnRhaW5lcldpZHRoKXJldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoO2NvbnN0IGw9dGhpcy53dFRhYmxlLmhvbGRlcixhPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImRpdiIpO2Euc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxcHgiLGwuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1hLm9mZnNldFdpZHRoO3JldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoPWQsbC5yZW1vdmVDaGlsZChhKSxkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBx''@;'; put 'put ''bCh0aGlzLnd0VGFibGUuVEFCTEUpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1hbCh0''@;'; put 'put ''aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5I''@;'; put 'put ''ZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93''@;'; put 'put ''SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhp''@;'; put 'put ''cy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz13YShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hl''@;'; put 'put ''YWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWdldFZpZXdwb3J0V2lkdGgoKXtjb25zdCBsPXRoaXMuZ2V0V29ya3Nw''@;'; put 'put ''YWNlV2lkdGgoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpO3JldHVybiBhPjA/bC1hOmx9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06''@;'; put 'put ''MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoLGYsXzt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTixoPWEuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpJiYxPT09bD8xLzA6dGhpcy5nZXRWaWV3cG9ydEhlaWdodCgpO2xldCBUPXRoaXMuZGF0YUFjY2Vzc09iamVj''@;'; put 'put ''dC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IFc9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxpZT1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGdlPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJu''@;'; put 'put ''IFcmJlQ+PTAmJihfPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLFcpLFQrPV8saC09XyksaWUmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYoXz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1D''@;'; put 'put ''ZWxsU2l6ZXMoZ2UtaWUsZ2UpLGgtPV8pLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6SWModGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyBvbmUoe3ZpZXdwb3J0U2l6ZTpoLHNjcm9sbE9mZnNldDpULHRvdGFsSXRlbXM6YS5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ0b3RhbFJvd3MiKSxpdGVtU2l6ZUZuOndlPT5kLmdldFJvd0hlaWdodCh3ZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9uVHlwZTpsLHNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1u''@;'; put 'put ''c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNj''@;'; put 'put ''ZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3QgXz1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYoXyYmZj49MCl7''@;'; put 'put ''Y29uc3QgVD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLF8pO2YrPVQsaC09VH1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPUljKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50''@;'; put 'put ''KSksbmV3IGVWKHt2aWV3cG9ydFNpemU6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbEl0ZW1zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksaXRlbVNpemVGbjpUPT5kLmdldENvbHVtbldpZHRoKFQpLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxh''@;'; put 'put ''dG9yT3ZlcnJpZGUiKSxjYWxjdWxhdGlvblR5cGU6bCxzdHJldGNoTW9kZTphLmdldFNldHRpbmcoInN0cmV0Y2hIIiksc3RyZXRjaGluZ0l0ZW1XaWR0aEZuOihULFcpPT5hLmdldFNldHRpbmcoIm9uQmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixULFcpLGlubGluZVN0YXJ0T2Zmc2V0''@;'; put 'put ''OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZihhKXtjb25zdCBkPXRoaXMuY3JlYXRlUm93''@;'; put 'put ''c0NhbGN1bGF0b3IoMiksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDIpO3RoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChkKSYmdGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGgpfHwoYT0hMSl9cmV0dXJu''@;'; put 'put ''IGF8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMSksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDEpKSx0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1u''@;'; put 'put ''c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsYX1jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKXt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKDIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0''@;'; put 'put ''b3IoMil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZCxpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51''@;'; put 'put ''bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Um93OmYsZW5kUm93Ol99PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+X3x8ZD09PV8mJmQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEpfWFyZUFsbFByb3Bvc2Vk''@;'; put 'put ''VmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2NvbnN0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmQsaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcjpofT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCly''@;'; put 'put ''ZXR1cm4haDtjb25zdHtzdGFydENvbHVtbjpmLGVuZENvbHVtbjpffT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO3JldHVybiEoYTxmfHxhPT09ZiYmYT4wfHxkPl98fGQ9PT1fJiZkPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKX1yZXNldEhhc092''@;'; put 'put ''ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXtkcyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fSh0aGlzLmdldFZpZXdwb3J0RGFvKCksdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFn''@;'; put 'put ''ZXIsdGhpcy53dFRhYmxlKSx0aGlzLnNlbGVjdGlvbnM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNlbGVjdGlvbnMiKSx0aGlzLnd0RXZlbnQ9bmV3IFZ0ZShkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlz''@;'; put 'put ''LnNlbGVjdGlvbnMpLHRoaXMud3RPdmVybGF5cz1uZXcgY2xhc3MgR0Fle2NvbnN0cnVjdG9yKGwsYSxkLGgsZixfKXtaZih0aGlzLCJ3b3QiLG51bGwpLFpmKHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJvdHRvbU92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImlubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheSIsbnVsbCksWmYodGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxaZih0aGlzLCJib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLFpmKHRoaXMsImJyb3dzZXJMaW5lSGVpZ2h0Iix2b2lkIDApLFpmKHRoaXMsInd0U2V0dGluZ3MiLG51''@;'; put 'put ''bGwpLFpmKHRoaXMsInJlc2l6ZU9ic2VydmVyIixuZXcgUmVzaXplT2JzZXJ2ZXIoZ2U9Pnt5aygoKT0+eyFBcnJheS5pc0FycmF5KGdlKXx8IWdlLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpfSl9KSksdGhpcy53b3Q9bCx0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9Xztjb25zdHtyb290RG9jdW1lbnQ6VCxyb290V2luZG93Old9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1m''@;'; put 'put ''LHRoaXMuc2Nyb2xsYmFyU2l6ZT1JYyhUKTtjb25zdCBpZT0iaGlkZGVuIj09PVcuZ2V0Q29tcHV0ZWRTdHlsZShfLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PWllP18uaG9sZGVyOnJ5KF8uVEFC''@;'; put 'put ''TEUpLHRoaXMuaW5pdE92ZXJsYXlzKCksdGhpcy5oYXNTY3JvbGxiYXJCb3R0b209ITEsdGhpcy5oYXNTY3JvbGxiYXJSaWdodD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxhc3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlz''@;'; put 'put ''LnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPVcuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPVcuc2Nyb2xsWX1nZXRPdmVy''@;'; put 'put ''bGF5cygpe2NvbnN0IGE9W3RoaXMudG9wT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldO3JldHVybiBhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWluaXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShh''@;'; put 'put ''LmJvZHkpLGg9cGFyc2VJbnQoZC5saW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMu''@;'; put 'put ''ZG9tQmluZGluZ3NdO3RoaXMudG9wT3ZlcmxheT1uZXcgQUFlKC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgT0FlKC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBOQWUoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IHpBZSguLi5sLHRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IFpBZSguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpe2xldCBsPXRoaXMu''@;'; put 'put ''dG9wT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCk7cmV0dXJuIGw9dGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCxsPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCx0aGlzLmlubGluZVN0YXJ0T3Zl''@;'; put 'put ''cmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKGw9dGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpfHxsKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJihsPXRoaXMuYm90''@;'; put 'put ''dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCkpLGx9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXduKXtpZighdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRy''@;'; put 'put ''YXcoITApLHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nJiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9s''@;'; put 'put ''bGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5p''@;'; put 'put ''bmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsd2U9PnRoaXMub25LZXlEb3duKHdlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAi''@;'; put 'put ''LCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIix3ZT0+dGhpcy5vblRhYmxlU2Nyb2xs''@;'; put 'put ''KHdlKSx7cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsd2U9PnRoaXMub25UYWJsZVNjcm9sbCh3ZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsXz10''@;'; put 'put ''aGlzLnNjcm9sbGFibGVFbGVtZW50PT09YSxUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxXPXtwYXNzaXZlOl99O2xldCBnZTsoVHx8Znx8IV9OKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVt''@;'; put 'put ''ZW50LCJ3aGVlbCIsd2U9PnRoaXMub25DbG9uZVdoZWVsKHdlLFQpLFcpLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5XS5mb3JFYWNoKHdlPT57aWYod2UmJndlLm5lZWRGdWxsUmVuZGVyKXtjb25zdHtob2xkZXI6RWV9PXdlLmNsb25lLnd0VGFibGU7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihFZSwid2hlZWwiLFplPT50aGlzLm9uQ2xvbmVXaGVlbChaZSxUKSxXKX19KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInJlc2l6ZSIsKCk9PntjbGVhclRpbWVvdXQoZ2UpLGdlPXNldFRpbWVvdXQoKCk9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKX0sMjAwKX0pLF98fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2''@;'; put 'put ''ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1kZXJlZ2lzdGVyTGlzdGVuZXJzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXJFdmVudHMoITApfW9uVGFibGVTY3JvbGwobCl7Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlubGlu''@;'; put 'put ''ZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGghPT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9PWEm''@;'; put 'put ''JiFsLnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtjb25zdHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRo''@;'; put 'put ''aXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxfPWwudGFyZ2V0LFQ9ZiE9PWQmJl8hPT1kJiYhXy5jb250YWlucyhmKSxXPWghPT1kJiZfIT09ZCYmIV8uY29udGFpbnMoaCk7aWYodGhpcy5rZXlQcmVzc2VkJiYoVHx8VykpcmV0dXJuO2NvbnN0IGllPXRoaXMudHJh''@;'; put 'put ''bnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50IT09ZCYmaWUpJiZsLnByZXZlbnREZWZhdWx0KCl9b25LZXlEb3duKGwpe3RoaXMua2V5UHJlc3NlZD1vNyhsLmtleUNvZGUsIkFSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1df''@;'; put 'put ''TEVGVCIpfW9uS2V5VXAoKXt0aGlzLmtleVByZXNzZWQ9ITF9dHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpe2xldCBhPWlzTmFOKGwuZGVsdGFZKT8tMSpsLndoZWVsRGVsdGFZOmwuZGVsdGFZLGQ9aXNOYU4obC5kZWx0YVgpPy0xKmwud2hlZWxEZWx0YVg6bC5kZWx0YVg7MT09PWwu''@;'; put 'put ''ZGVsdGFNb2RlJiYoZCs9ZCp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0LGErPWEqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaD10aGlzLnNjcm9sbFZlcnRpY2FsbHkoYSksZj10aGlzLnNjcm9sbEhvcml6b250YWxseShkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWZXJ0aWNhbGx5KGwpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH1zY3JvbGxIb3Jpem9udGFsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVF''@;'; put 'put ''bGVtZW50LnNjcm9sbExlZnQ7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0fXN5bmNTY3JvbGxQb3NpdGlvbnMoKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm47Y29uc3R7cm9vdFdpbmRvdzps''@;'; put 'put ''fT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsW2gsZl09W3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCx0aGlzLnNjcm9sbGFibGVFbGVt''@;'; put 'put ''ZW50LnNjcm9sbFRvcF07aWYodGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPWEuc2Nyb2xsTGVmdCE9PWh8fHRoaXMubGFzdFNjcm9sbFghPT1sLnNjcm9sbFgsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz1kLnNjcm9sbFRvcCE9PWZ8fHRoaXMubGFzdFNjcm9sbFkhPT1sLnNjcm9sbFksdGhpcy5s''@;'; put 'put ''YXN0U2Nyb2xsWD1sLnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1sLnNjcm9sbFksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nKXthLnNjcm9sbExlZnQ9aDtjb25zdCBfPXRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlcj90aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5o''@;'; put 'put ''b2xkZXI6bnVsbDtfJiYoXy5zY3JvbGxMZWZ0PWgpfXRoaXMudmVydGljYWxTY3JvbGxpbmcmJihkLnNjcm9sbFRvcD1mKSx0aGlzLnJlZnJlc2hBbGwoKX1zeW5jU2Nyb2xsV2l0aE1hc3Rlcigpe2NvbnN0IGw9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHtz''@;'; put 'put ''Y3JvbGxMZWZ0OmEsc2Nyb2xsVG9wOmR9PWw7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5ib3R0b21PdmVybGF5''@;'; put 'put ''LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygp''@;'; put 'put ''e3RoaXMuZGVyZWdpc3Rlckxpc3RlbmVycygpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMudG9wT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJnRo''@;'; put 'put ''aXMuYm90dG9tT3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKTtjb25zdHt3dFRhYmxlOmx9PXRoaXMse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0aGlzLnNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxl''@;'; put 'put ''bWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOnJ5KGwuVEFCTEUpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKX1kZXN0cm95KCl7dGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRo''@;'; put 'put ''aXMudG9wT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkuZGVzdHJveSgpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmRlc3Ryb3koKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFy''@;'; put 'put ''dENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZGVzdHJveSgpLHRoaXMuZGVzdHJveWVk''@;'; put 'put ''PSEwfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpJiZ0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5i''@;'; put 'put ''b3R0b21PdmVybGF5LnJlZnJlc2gobCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcE92ZXJsYXkucmVmcmVzaChsKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKSx0''@;'; put 'put ''aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCl9dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpe2NvbnN0IGw9dGhpcy53''@;'; put 'put ''dFRhYmxlLnNwcmVhZGVyLGE9bC5jbGllbnRXaWR0aCxkPWwuY2xpZW50SGVpZ2h0LGg9YSE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aHx8ZCE9PXRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ7cmV0dXJuIGgmJih0aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGg9YSx0aGlzLnNw''@;'; put 'put ''cmVhZGVyTGFzdFNpemUuaGVpZ2h0PWQpLGh9YWRqdXN0RWxlbWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFZpZXdwb3J0OmF9PXRoaXMud290LHt3dFRhYmxlOmR9PXRoaXMsaD10aGlzLnd0''@;'; put 'put ''U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksXz1hLmdldFJvd0hlYWRlcldpZHRoKCksVD1hLmdldENvbHVtbkhlYWRlckhlaWdodCgpLFc9ZC5oaWRlci5zdHlsZTtpZihXLndpZHRoPWAke18rdGhp''@;'; put 'put ''cy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsaCl9cHhgLFcuaGVpZ2h0PWAke1QrdGhpcy50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLGYpKzF9cHhgLHRoaXMuc2Nyb2xsYmFyU2l6ZT4wKXtjb25zdHtzY3JvbGxIZWlnaHQ6aWUsc2Nyb2xsV2lkdGg6Z2V9PWQud3RSb290''@;'; put 'put ''RWxlbWVudCx7c2Nyb2xsSGVpZ2h0OndlLHNjcm9sbFdpZHRoOkVlfT1kLmhvbGRlcjt0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PWllPHdlLHRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tPWdlPEVlLHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQmJmQuaGlkZXIuc2Nyb2xsV2lkdGgrdGhpcy5zY3JvbGxi''@;'; put 'put ''YXJTaXplPmdlP3RoaXMuaGFzU2Nyb2xsYmFyQm90dG9tPSEwOnRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tJiZkLmhpZGVyLnNjcm9sbEhlaWdodCt0aGlzLnNjcm9sbGJhclNpemU+aWUmJih0aGlzLmhhc1Njcm9sbGJhclJpZ2h0PSEwKX10aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVudHNT''@;'; put 'put ''aXplKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZShsKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKGwpfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRo''@;'; put 'put ''aXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gRG4oW3RoaXMudG9wT3Zl''@;'; put 'put ''cmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMo''@;'; put 'put ''bCkmJihkPWguY2xvbmUpfSksZH1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO0RuKFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJP''@;'; put 'put ''dmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxkPT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFzc05hbWU9bC5jbGFzc05hbWUpfSl9fSh0aGlzLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53''@;'; put 'put ''dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtjb25zdCBhPVtdLGQ9W107ZHMoe3Jvd0hlYWRlcnM6Imh0Um93SGVhZGVycyIsY29sdW1uSGVhZGVyczoiaHRDb2x1''@;'; put 'put ''bW5IZWFkZXJzIn0sKGgsZik9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhmKS5sZW5ndGgmJmQucHVzaChoKSxhLnB1c2goaCl9KSxXbyh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGEpLHBpKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUs''@;'; put 'put ''ZCl9Z2V0Vmlld3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0T3Zlcmxh''@;'; put 'put ''eVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgdG9wUGFy''@;'; put 'put ''ZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IGlu''@;'; put 'put ''bGluZVN0YXJ0UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1''@;'; put 'put ''cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3MgdFZ7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIFlOP3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9tU2V0dGlu''@;'; put 'put ''Z3MobCl9X2luaXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IHRWKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IHRUZShsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290''@;'; put 'put ''LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9ucygpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uc31nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVybGF5''@;'; put 'put ''cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50ZXJydXB0ZWQ9bH1nZXQgbGFz''@;'; put 'put ''dE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxpbmd9c2V0IG1vbWVudHVtU2Ny''@;'; put 'put ''b2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGluZ3MoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhpcy5fd290LmV2ZW50TWFuYWdl''@;'; put 'put ''cn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93b3QuZHJhdyhhcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9c2Nyb2xsVmlld3BvcnQobCxh''@;'; put 'put ''LGQsaCxmKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEs''@;'; put 'put ''ZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpfWdldFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRWaWV3cG9ydCgpfWdldE92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXk/dGhpcy5fd290LmNsb25lT3Zlcmxh''@;'; put 'put ''eS50eXBlOiJtYXN0ZXIifWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuX3dvdC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShsLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy51cGRhdGUobCxhKSx0aGlzfWdldFNldHRpbmcobCxhLGQs''@;'; put 'put ''aCxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhsLGEsZCxoLGYpfWhhc1NldHRpbmcobCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmhhc1NldHRpbmcobCl9ZGVzdHJveSgpe3RoaXMuX3dvdC5kZXN0cm95KCl9fWZ1bmN0aW9uIHNuZShjKXtsZXR7aXNT''@;'; put 'put ''aGlmdEtleTpsLGlzTGVmdENsaWNrOmEsaXNSaWdodENsaWNrOmQsY29vcmRzOmgsc2VsZWN0aW9uOmYsY29udHJvbGxlcjpfLGNlbGxDb29yZHNGYWN0b3J5OlR9PWM7Y29uc3QgVz1mLmlzU2VsZWN0ZWQoKT9mLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxpZT1mLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeUNvcm5lcigpLGdlPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYobCYmVyloLnJvdz49MCYmaC5jb2w+PTAmJiFfLmNlbGw/Zi5zZXRSYW5nZUVuZChoKTooaWV8fGdlKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhXy5jZWxsP2Yuc2V0UmFuZ2VFbmQoVChoLnJvdyxoLmNvbCkp''@;'; put 'put ''OmllJiZoLnJvdzwwJiYhXy5jb2x1bW4/Zi5zZXRSYW5nZUVuZChUKFcudG8ucm93LGguY29sKSk6Z2UmJmguY29sPDAmJiFfLnJvdz9mLnNldFJhbmdlRW5kKFQoaC5yb3csVy50by5jb2wpKTooIWllJiYhZ2UmJmguY29sPDB8fGllJiZoLmNvbDwwKSYmIV8ucm93P2Yuc2VsZWN0Um93cyhN''@;'; put 'put ''YXRoLm1heChXLmZyb20ucm93LDApLGgucm93LGguY29sKTooIWllJiYhZ2UmJmgucm93PDB8fGdlJiZoLnJvdzwwKSYmIV8uY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoVy5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCB3ZT0hZi5pbkluU2VsZWN0aW9uKGgp''@;'; put 'put ''LEVlPWF8fGQmJndlO2gucm93PDAmJmguY29sPj0wJiYhXy5jb2x1bW4/RWUmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiFfLnJvdz9FZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNvbD49MCYmaC5yb3c+PTAmJiFf''@;'; put 'put ''LmNlbGw/RWUmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCl9fWNvbnN0IHJUZT1uZXcgTWFwKFtbIm1vdXNlZG93biIsc25lXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gblRlKGMpe2xldHtpc0xlZnRDbGljazpsLGNvb3JkczphLHNlbGVj''@;'; put 'put ''dGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1jO2lmKCFsKXJldHVybjtjb25zdCBfPWQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVD1kLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLFc9ZC50YWJsZVByb3BzLmNvdW50Q29scygpLGllPWQudGFibGVQcm9wcy5j''@;'; put 'put ''b3VudFJvd3MoKTtUJiYhaC5jb2x1bW4/ZC5zZXRSYW5nZUVuZChmKGllLTEsYS5jb2wpKTpfJiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LFctMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKX1dLFsidG91Y2hzdGFydCIsc25lXV0pO2Z1bmN0aW9uIGFuZShjLGwpe2xldHtjb29y''@;'; put 'put ''ZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09bDtyVGUuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxpc0xlZnRDbGljazpmayhjKXx8''@;'; put 'put ''InRvdWNoc3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGljazpVcChjKX0pfWNvbnN0IGxuZT1uZXcgV2Vha01hcCxuVj1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIHJWKGMpe3JldHVybiBsbmUuaGFzKGMpfWZ1bmN0aW9uIGNuZShjLGwsYSl7KGZ1bmN0aW9uIHNUZShjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gWXAoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGFUZShjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBsVGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB1bmUoYyxsKXtyZXR1cm4gZnVuY3Rpb24gY1RlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0o''@;'; put 'put ''YyxobmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gZG5lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gdVRlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRl''@;'; put 'put ''IGZpZWxkIik7bC52YWx1ZT1hfX0oYyxobmUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIGhuZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1j''@;'; put 'put ''b25zdCB4Zz1uZXcgV2Vha01hcDt2YXIgaVY9bmV3IFdlYWtNYXAsb1Y9bmV3IFdlYWtNYXA7Y29uc3QgaFRlPWNsYXNzIGRUZXtjb25zdHJ1Y3RvcihsKXtZcCh0aGlzLCJpbnN0YW5jZSIsdm9pZCAwKSxZcCh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksWXAodGhpcywic2V0dGluZ3Mi''@;'; put 'put ''LHZvaWQgMCksWXAodGhpcywiVEhFQUQiLHZvaWQgMCksWXAodGhpcywiVEJPRFkiLHZvaWQgMCksWXAodGhpcywiX3d0Iix2b2lkIDApLFlwKHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLGNuZSh0aGlzLGlWLHt3cml0YWJsZTohMCx2YWx1ZTowfSksY25lKHRoaXMsb1Yse3dyaXRhYmxlOiEw''@;'; put 'put ''LHZhbHVlOjB9KSxZcCh0aGlzLCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSx0aGlzLmluc3RhbmNlPWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMuaW5zdGFuY2UpLHRoaXMuc2V0dGluZ3M9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLHhnLnNldCh0aGlzLHtz''@;'; put 'put ''ZWxlY3Rpb25Nb3VzZURvd246ITEsbW91c2VEb3duOnZvaWQgMCx0YWJsZTp2b2lkIDAsbGFzdFdpZHRoOjAsbGFzdEhlaWdodDowfSksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJsZSgpfXJlbmRlcigpe3RoaXMu''@;'; put 'put ''aW5zdGFuY2UuaXNSZW5kZXJTdXNwZW5kZWQoKXx8KHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1Np''@;'; put 'put ''emU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoITApKSx0aGlzLl93dC5kcmF3KCF0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLmluc3RhbmNlLmZv''@;'; put 'put ''cmNlRnVsbFJlbmRlcj0hMSx0aGlzLmluc3RhbmNlLnJlbmRlckNhbGw9ITEpfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5pbnN0YW5jZS5pc1JlbmRlclN1c3BlbmRlZCgpP3Ro''@;'; put 'put ''aXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKGwpfWdldENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNjcm9sbFZpZXdwb3J0KGwsYSxk''@;'; put 'put ''LGgsZil7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLHtyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkfT10aGlzLmluc3RhbmNlLGg9YS5nZXRBdHRyaWJ1dGUoInN0eWxlIik7aCYmYS5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsaCkscGkoYSwiaGFuZHNvbnRhYmxlIiksbC50YWJsZT1kLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIikscGkobC50YWJsZSwiaHRDb3JlIiksdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NOYW1lJiZwaShsLnRhYmxlLHRo''@;'; put 'put ''aXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5USEVBRD1kLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksbC50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZPWQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxsLnRhYmxlLmFwcGVuZENoaWxk''@;'; put 'put ''KHRoaXMuVEJPRFkpLHRoaXMuaW5zdGFuY2UudGFibGU9bC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUobC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5maXJzdENoaWxkKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLHtyb290''@;'; put 'put ''RWxlbWVudDphLHJvb3REb2N1bWVudDpkLHNlbGVjdGlvbjpofT10aGlzLmluc3RhbmNlLGY9ZC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLF89PntpZihsLnNlbGVjdGlvbk1vdXNlRG93bj0hMCwhdGhpcy5pc1RleHRT''@;'; put 'put ''ZWxlY3Rpb25BbGxvd2VkKF8udGFyZ2V0KSl7Y29uc3R7cm9vdFdpbmRvdzpUfT10aGlzLmluc3RhbmNlO2ZOKFQpLF8ucHJldmVudERlZmF1bHQoKSxULmZvY3VzKCl9fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+e2wuc2VsZWN0aW9uTW91''@;'; put 'put ''c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLF89PntsLnNlbGVjdGlvbk1vdXNlRG93biYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZChfLnRhcmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZmTih0''@;'; put 'put ''aGlzLmluc3RhbmNlLnJvb3RXaW5kb3cpLF8ucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIixfPT57aC5pc0luUHJvZ3Jlc3MoKSYmIV8uc2hpZnRLZXkmJmguZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVu''@;'; put 'put ''dExpc3RlbmVyKGYsIm1vdXNldXAiLF89PntoLmlzSW5Qcm9ncmVzcygpJiZmayhfKSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMSwoc2soZC5hY3RpdmVFbGVtZW50KXx8IWguaXNTZWxlY3RlZCgpJiYhaC5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmIWEuY29udGFpbnMoXy50YXJnZXQp''@;'; put 'put ''JiYhVXAoXykpJiZ0aGlzLmluc3RhbmNlLnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixfPT57aC5pc0luUHJvZ3Jlc3MoKSYmVXAoXykmJihoLmZpbmlzaCgpLGwubW91c2VEb3duPSExKX0pLHRoaXMuZXZlbnRNYW5hZ2Vy''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57aC5pc0luUHJvZ3Jlc3MoKSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixfPT57Y29uc3QgVD1fLnRhcmdldCxXPV8ueHx8Xy5jbGll''@;'; put 'put ''bnRYLGllPV8ueXx8Xy5jbGllbnRZO2xldCBnZT1fLnRhcmdldDtpZihsLm1vdXNlRG93bnx8IWF8fCF0aGlzLmluc3RhbmNlLnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjp3ZX09dGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlO2lmKGdlPT09d2Upe2NvbnN0IFplPUljKGQpO2lmKGQu''@;'; put 'put ''ZWxlbWVudEZyb21Qb2ludChXK1plLGllKSE9PXdlfHxkLmVsZW1lbnRGcm9tUG9pbnQoVyxpZStaZSkhPT13ZSlyZXR1cm59ZWxzZSBmb3IoO2dlIT09Zjspe2lmKG51bGw9PT1nZSl7aWYoXy5pc1RhcmdldFdlYkNvbXBvbmVudClicmVhaztyZXR1cm59aWYoZ2U9PT1hKXJldHVybjtnZT1n''@;'; put 'put ''ZS5wYXJlbnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoVCk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMpP3RoaXMuaW5zdGFuY2UuZGVzZWxl''@;'; put 'put ''Y3RDZWxsKCk6dGhpcy5pbnN0YW5jZS5kZXN0cm95RWRpdG9yKCExLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC50YWJsZSwic2VsZWN0c3RhcnQiLF89Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxheShfLnRhcmdldCl8fF8ucHJldmVudERl''@;'; put 'put ''ZmF1bHQoKX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5z''@;'; put 'put ''bGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1hPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJl''@;'; put 'put ''bmRlcmFibGVJbmRleChhKTphO3JldHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtkLGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25zdCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KGQtMSwtMSk7cmV0dXJuIG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix0aGlz''@;'; put 'put ''LnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMobCxhKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuSW5kZXhlcyhsLGEsdGhpcy5p''@;'; put 'put ''bnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpLF89ZC5nZXRSZW5k''@;'; put 'put ''ZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKF8pKXJldHVybiAwO2xldCBUPTA7cmV0dXJuIGE8MD9UPV8rMTphPjAmJihUPWgtXyksVH1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmNvdW50Q29scygp''@;'; put 'put ''LGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''b3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKXtjb25zdCBsPXRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''b3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRoaXMuaW5zdGFuY2UuY291bnRS''@;'; put 'put ''ZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9eGcuZ2V0KHRoaXMpLGE9e3J0bE1vZGU6dGhpcy5pbnN0YW5jZS5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5pbnN0''@;'; put 'put ''YW5jZS5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVkKCksdGFibGU6bC50YWJsZSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PnJWKHRoaXMuaW5zdGFuY2UpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50''@;'; put 'put ''aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCxzdHJldGNoSDooKT0+dGhpcy5zZXR0aW5ncy5zdHJldGNoSCxkYXRhOihfLFQpPT50aGlzLmluc3RhbmNlLmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSksdG90YWxSb3dzOigp''@;'; put 'put ''PT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnRO''@;'; put 'put ''b3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQ+MHx8YS5yb3dIZWFkZXJzKCku''@;'; put 'put ''bGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8YS5jb2x1bW5IZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20+MCxtaW5TcGFyZVJv''@;'; put 'put ''d3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJvd0hlYWRlcnM6KCk9Pntjb25zdCBfPVtdO3JldHVybiB0aGlzLmluc3RhbmNlLmhhc1Jvd0hlYWRlcnMoKSYmXy5wdXNoKChULFcpPT57Y29uc3QgaWU9''@;'; put 'put ''VD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VDt0aGlzLmFwcGVuZFJvd0hlYWRlcihpZSxXKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixfKSxkbmUodGhpcyxvVixf''@;'; put 'put ''Lmxlbmd0aCksX30sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IF89W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzQ29sSGVhZGVycygpJiZfLnB1c2goKFQsVyk9Pntjb25zdCBpZT1UPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ''@;'; put 'put ''bmRleChUKTpUO3RoaXMuYXBwZW5kQ29sSGVhZGVyKGllLFcpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLF8pLGRuZSh0aGlzLGlWLF8ubGVuZ3RoKSxffSxjb2x1bW5XaWR0aDpfPT57Y29uc3QgVD10aGlzLmluc3RhbmNlLmNvbHVt''@;'; put 'put ''bkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoXyk7cmV0dXJuIHRoaXMuaW5zdGFuY2UuZ2V0Q29sV2lkdGgobnVsbD09PVQ/XzpUKX0scm93SGVpZ2h0Ol89Pntjb25zdCBUPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi''@;'; put 'put ''bGVJbmRleChfKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWlnaHQobnVsbD09PVQ/XzpUKX0sY2VsbFJlbmRlcmVyOihfLFQsVyk9Pntjb25zdFtpZSxnZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSx3ZT10aGlzLmluc3RhbmNlLnJ1bkhv''@;'; put 'put ''b2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixpZSxnZSk7bGV0IEVlPWllLFplPWdlO0FycmF5LmlzQXJyYXkod2UpJiYoW0VlLFplXT13ZSk7Y29uc3Qgb3Q9dGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShFZSxaZSksZXQ9dGhpcy5pbnN0YW5jZS5jb2xUb1Byb3AoWmUpO2xldCB5dD10aGlz''@;'; put 'put ''Lmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoRWUsZXQpO3RoaXMuaW5zdGFuY2UuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKHl0PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIix5dCxvdCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJl''@;'; put 'put ''bmRlcmVyIixXLGllLGdlLGV0LHl0LG90KSx0aGlzLmluc3RhbmNlLmdldENlbGxSZW5kZXJlcihvdCkodGhpcy5pbnN0YW5jZSxXLGllLGdlLGV0LHl0LG90KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixXLGllLGdlLGV0LHl0LG90KX0sc2VsZWN0aW9uczp0aGlz''@;'; put 'put ''Lmluc3RhbmNlLnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmluc3Rh''@;'; put 'put ''bmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmluc3RhbmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooXyxULFcsaWUpPT57Y29u''@;'; put 'put ''c3QgZ2U9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLHdlPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaW5zdGFuY2UubGlzdGVuKCksdGhpcy5hY3RpdmVXdD1pZSxsLm1vdXNlRG93bj0hMCx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVPbkNlbGxNb3VzZURvd24iLF8sZ2UsVyx3ZSksIWJnKF8pJiYoYW5lKF8se2Nvb3JkczpnZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjp3ZSxjZWxsQ29vcmRzRmFjdG9yeTooRWUsWmUpPT50aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKEVl''@;'; put 'put ''LFplKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooXyxULFcsaWUpPT57Y29uc3QgZ2U9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29v''@;'; put 'put ''cmRzKFQpO3RoaXMuYWN0aXZlV3Q9aWUsbC5tb3VzZURvd249ITEsdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixfLGdl''@;'; put 'put ''LFcpLCFiZyhfKSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1''@;'; put 'put ''YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsXyxnZSxXKSwhYmcoXykmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5f''@;'; put 'put ''d3QpfSxvbkNlbGxNb3VzZU92ZXI6KF8sVCxXLGllKT0+e2NvbnN0IGdlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKSx3ZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PWllLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZU9uQ2VsbE1vdXNlT3ZlciIsXyxnZSxXLHdlKSwhYmcoXykmJihsLm1vdXNlRG93biYmYW5lKF8se2Nvb3JkczpnZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjp3ZSxjZWxsQ29vcmRzRmFjdG9yeTooRWUsWmUpPT50aGlzLmluc3RhbmNlLl9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKEVlLFplKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixfLGdlLFcpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZVVwOihfLFQsVyxpZSk9Pntjb25zdCBnZT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9W''@;'; put 'put ''aXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1pZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIixfLGdlLFcpLCFiZyhfKSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlVXAi''@;'; put 'put ''LF8sZ2UsVyksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjpfPT57Xy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixfKX0sb25DZWxsQ29ybmVyRGJsQ2xpY2s6Xz0+e18ucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixfKX0sYmVmb3JlRHJhdzooXyxUKT0+dGhpcy5iZWZvcmVSZW5kZXIoXyxUKSxvbkRyYXc6Xz0+dGhpcy5hZnRlclJlbmRlcihfKSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9PnRo''@;'; put 'put ''aXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsVmVydGljYWxseSIpLG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaW5zdGFu''@;'; put 'put ''Y2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZ2U9aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKSx3ZT10aGlz''@;'; put 'put ''Lmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGdlLFQsVyk7cmV0dXJuIGllLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6''@;'; put 'put ''KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIsZ2U9aWUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfKSx3ZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGdlLFQsVyk7cmV0dXJuIGll''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHdlLDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KF8sVCxXKT0+e2xldCBpZTtjb25zdFtnZSx3ZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoXyxUKSxF''@;'; put 'put ''ZT10aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksWmU9RWUuc2l6ZSgpO2lmKFplPjApe2NvbnN0IGV0PUVlLnBlZWtCeUluZGV4KChXPz8wKSsxLVplKTtpZT1bZXQuZnJvbS5yb3csZXQuZnJvbS5jb2wsZXQudG8ucm93LGV0LnRvLmNvbF19cmV0dXJuIHRoaXMu''@;'; put 'put ''aW5zdGFuY2UucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsZ2Usd2UsaWUsVyl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6KF8sVCk9Pntjb25zdFtXLGllLGdlLHdlXT1fLEVlPVt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVyks''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGllKSx0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZ2UpLHRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz''@;'; put 'put ''dWFsRnJvbVJlbmRlcmFibGVJbmRleCh3ZSldO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsRWUsVCl9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVu''@;'; put 'put ''dHVtU2Nyb2xsOigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xsIiksb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6KF8sVCk9Pntjb25zdCBXPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRl''@;'; put 'put ''eChUKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixfLFcpfSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOl89PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixfKSxvbk1vZGlmeUdldENlbGxDb29y''@;'; put 'put ''ZHM6KF8sVCxXKT0+e2NvbnN0IGllPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZ2U9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix3ZT1UPj0wP2dlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VCxFZT1fPj0wP2llLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl''@;'; put 'put ''SW5kZXgoXyk6XyxaZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixFZSx3ZSxXKTtpZihBcnJheS5pc0FycmF5KFplKSl7Y29uc3Rbb3QsZXQseXQsa3RdPVplO3JldHVybltvdD49MD9pZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGllLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChvdCwxKSk6b3QsZXQ+PTA/Z2UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZXQsMSkpOmV0LHl0Pj0wP2llLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaWUuZ2V0TmVhcmVzdE5vdEhpZGRl''@;'; put 'put ''bkluZGV4KHl0LC0xKSk6eXQsa3Q+PTA/Z2UuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChnZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoa3QsLTEpKTprdF19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpfPT57bGV0IFQ9dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1Jl''@;'; put 'put ''bmRlcmluZ09mZnNldDtpZigiYXV0byI9PT1UJiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgVz10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxpZT1fLnN0YXJ0Um93LGdlPV8uZW5kUm93O2lmKCJudW1iZXIiPT10eXBlb2YgVClf''@;'; put 'put ''LnN0YXJ0Um93PU1hdGgubWF4KGllLVQsMCksXy5lbmRSb3c9TWF0aC5taW4oZ2UrVCxXLTEpO2Vsc2UgaWYoImF1dG8iPT09VCl7Y29uc3Qgd2U9TWF0aC5jZWlsKGdlL1cqMTIpO18uc3RhcnRSb3c9TWF0aC5tYXgoaWUtd2UsMCksXy5lbmRSb3c9TWF0aC5taW4oZ2Urd2UsVy0xKX19dGhp''@;'; put 'put ''cy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsXyl9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOl89PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PVQmJnRo''@;'; put 'put ''aXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJihUPTEwKSxUPjB8fCJhdXRvIj09PVQpe2NvbnN0IFc9dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksaWU9Xy5zdGFydENvbHVtbixnZT1fLmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIFQmJihfLnN0YXJ0Q29sdW1uPU1h''@;'; put 'put ''dGgubWF4KGllLVQsMCksXy5lbmRDb2x1bW49TWF0aC5taW4oZ2UrVCxXLTEpKSwiYXV0byI9PT1UKXtjb25zdCB3ZT1NYXRoLmNlaWwoZ2UvVyo2KTtfLnN0YXJ0Q29sdW1uPU1hdGgubWF4KGllLXdlLDApLF8uZW5kQ29sdW1uPU1hdGgubWluKGdlK3dlLFctMSl9fXRoaXMuaW5zdGFuY2Uu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLF8pfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCBfPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeUNv''@;'; put 'put ''bHVtbkhlYWRlckhlaWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8X319O3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsYSksdGhpcy5fd3Q9bmV3IHRWKGEpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7Y29uc3QgZD10''@;'; put 'put ''aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpoLGhlaWdodDpmfT10aGlzLmluc3RhbmNlLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoaCxmKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsIm1vdXNlZG93biIs''@;'; put 'put ''Xz0+e18udGFyZ2V0PT09ZCYmMz09PV8ud2hpY2gmJl8uc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsImNvbnRleHRtZW51IixfPT57Xy50YXJnZXQ9PT1kJiYzPT09Xy53aGljaCYmXy5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJih0aGlzLmluc3RhbmNlLmZvcmNl''@;'; put 'put ''RnVsbFJlbmRlcj0hMCx0aGlzLnJlbmRlcigpKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7aWYoYXkobCkpcmV0dXJuITA7Y29uc3QgYT1WcChsLHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50''@;'; put 'put ''U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwo''@;'; put 'put ''KSl9aXNNb3VzZURvd24oKXtyZXR1cm4geGcuZ2V0KHRoaXMpLm1vdXNlRG93bn1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNT''@;'; put 'put ''aW5nbGUoKSkmJnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGwsYSl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRlciIs''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYoYS5maXJzdENoaWxkKXtjb25z''@;'; put 'put ''dCBkPWEuZmlyc3RDaGlsZDtpZighQm8oZCwicmVsYXRpdmUiKSlyZXR1cm4gZzIoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaW5zdGFuY2UuZ2V0Um93SGVhZGVyKX1l''@;'; put 'put ''bHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmluc3RhbmNlLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSxfPWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsXy5jbGFzc05hbWU9InJvd0hlYWRlciIsdGhpcy51cGRhdGVD''@;'; put 'put ''ZWxsSGVhZGVyKF8sbCxoKSxmLmFwcGVuZENoaWxkKF8pLGEuYXBwZW5kQ2hpbGQoZil9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''Ml0/YXJndW1lbnRzWzJdOnRoaXMuaW5zdGFuY2UuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7aWYoYS5maXJzdENoaWxkKXtjb25zdCBmPWEuZmlyc3RDaGlsZDtCbyhmLCJyZWxhdGl2ZSIpP3RoaXMudXBk''@;'; put 'put ''YXRlQ2VsbEhlYWRlcihmLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCk6KGcyKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmluc3RhbmNlLF89Zi5jcmVhdGVFbGVtZW50KCJkaXYiKSxUPWYuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgic3BhbiIpO18uY2xhc3NOYW1lPSJyZWxhdGl2ZSIsVC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKFQsbCxkLGgpLF8uYXBwZW5kQ2hpbGQoVCksYS5hcHBlbmRDaGlsZChfKX10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckdldENvbEhl''@;'; put 'put ''YWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGY9YTtjb25zdCBfPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKXx8dGhpcy5fd3Q7bC5w''@;'; put 'put ''YXJlbnROb2RlJiYoQm8obCwiY29sSGVhZGVyIik/Zj1fLnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6Qm8obCwicm93SGVhZGVyIikmJihmPV8ud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSkpLGY+LTE/Z2cobCxkKGEsaCkpOihqcChsLFN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoMTYwKSkscGkobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZpc2libGVFbGVtZW50SGVp''@;'; put 'put ''Z2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBkPjA/ZDowfXNldExhc3RTaXplKGwsYSl7Y29uc3QgZD14Zy5nZXQodGhpcyk7W2QubGFzdFdpZHRoLGQubGFzdEhlaWdodF09W2wsYV19Z2V0TGFzdFNpemUoKXtjb25zdCBs''@;'; put 'put ''PXhnLmdldCh0aGlzKTtyZXR1cm57d2lkdGg6bC5sYXN0V2lkdGgsaGVpZ2h0OmwubGFzdEhlaWdodH19Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uu''@;'; put 'put ''dmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0''@;'; put 'put ''TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29s''@;'; put 'put ''dW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Q29s''@;'; put 'put ''dW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHVuZSh0aGlzLGlWKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdW5lKHRoaXMsb1YpfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX0sZm5lPSJBQkNERUZHSElKS0xNTk9QUVJTVFVW''@;'; put 'put ''V1hZWiIsc1Y9Zm5lLmxlbmd0aDtmdW5jdGlvbiBNayhjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7bD4wOylkPShsLTEpJXNWLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9cGFyc2VJbnQoKGwtZCkvc1YsMTApO3JldHVybiBhfWZ1bmN0aW9uIGZUZShjKXtsZXQgbD0wO2lmKGMp''@;'; put 'put ''Zm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPXNWKipkKihmbmUuaW5kZXhPZihjW2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIHBUZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw''@;'; put 'put ''XToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goTWsoaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4g''@;'; put 'put ''YX1mdW5jdGlvbiBnVGUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2Zvcihk''@;'; put 'put ''PTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1NayhoKSsoZCsxKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gbVRlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKysp''@;'; put 'put ''ZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gYVYoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShj''@;'; put 'put ''WzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goKF8sVCk9PntkLnB1c2goW2YrbCxULF9dKX0pOk9iamVjdC5rZXlzKGgpLmZvckVhY2goXz0+e2QucHVzaChbZitsLF8saFtfXV0pfSl9KSxkfWZ1bmN0aW9uIGxWKGMpe2xldCBsPTA7''@;'; put 'put ''cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1swXS5sZW5ndGg6Y1swXSYmdXMoY1swXSkmJihsPXVrKGNbMF0pKSksbH1mdW5jdGlvbiBwbmUoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJy''@;'; put 'put ''YXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIGduZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWNvbnN0IF9UZT1jbGFzcyB2VGV7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO3RoaXMuaG90PWwsdGhpcy5kYXRhPWEsdGhpcy5kYXRhVHlwZT0iYXJyYXkiLHRoaXMuY29sVG9Qcm9wPSgpPT57fSx0aGlzLnByb3BUb0NvbD0oKT0+e319bW9kaWZ5Um93RGF0''@;'; put 'put ''YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRh''@;'; put 'put ''dGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1b''@;'; put 'put ''XTtyZXR1cm4gRG4odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9''@;'; put 'put ''PT1hJiZ2b2lkIDA9PT1kO2xldCBfPW51bGwsVD1udWxsO2lmKF89dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFycmF5LmlzQXJyYXkoXykpVD1bXSxmP18uZm9yRWFjaCgoVyxpZSk9PntUW2llXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsaWUsXyl9KTp2byhhLGQsVz0+e1RbVy1hXT10aGlz''@;'; put 'put ''LmdldEF0UGh5c2ljYWxDZWxsKGwsVyxfKX0pO2Vsc2UgaWYodXMoXyl8fFJhKF8pKWlmKFQ9aD9bXTp7fSwhZnx8aCl7Y29uc3QgaWU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7dm8oMCxpZSxnZT0+e2NvbnN0IHdlPXRoaXMuY29sVG9Qcm9wKGdlKTtpZihnZT49KGF8fDApJiZnZTw9''@;'; put 'put ''KGR8fGllKSYmIU51bWJlci5pc0ludGVnZXIod2UpKXtjb25zdCBFZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsd2UsXyk7aD9ULnB1c2goRWUpOmNrKFQsd2UsRWUpfX0pfWVsc2UgZHMoXywoVyxpZSk9PntjayhULGllLHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxpZSxfKSl9KTtyZXR1''@;'; put 'put ''cm4gVH1zZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBoPV9nKGQpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VE''@;'; put 'put ''YXRhIixsLGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF1bYV09ZDpjayh0aGlzLmRhdGFbbF0sYSxkKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZCYmKGg9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBhP3Z0ZShkLGEpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXSksdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPV9nKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9''@;'; put 'put ''Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsXz1u''@;'; put 'put ''dWxsLFQ9bnVsbCxXPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxUPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLF89TWF0aC5taW4obC5jb2wsYS5jb2wpLFQ9TWF0aC5tYXgobC5yb3csYS5yb3cpLFc9TWF0aC5tYXgobC5jb2wsYS5jb2wp''@;'; put 'put ''KTtjb25zdCBpZT1bXTtyZXR1cm4gdm8oZixULGdlPT57aWUucHVzaChoP3RoaXMuZ2V0QXRSb3coZ2Usdm9pZCAwLHZvaWQgMCxkKTp0aGlzLmdldEF0Um93KGdlLF8sVyxkKSl9KSxpZX1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBsVih0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVs''@;'; put 'put ''bCx0aGlzLmhvdD1udWxsfX0sbW5lPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoYyxsLGEsZCxoLGYsXyl7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgVD10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IFc9MDtXPFQ7VysrKWFrKHRoaXMuX2xvY2FsSG9va3NbY11bV10sdGhpcyxsLGEsZCxoLGYsXyl9fSxjbGVhckxvY2FsSG9va3Mo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07ZmgobW5lLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBPMD1tbmU7Y2xhc3MgRWd7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLmluZGV4ZWRWYWx1ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYo''@;'; put 'put ''bDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRW''@;'; put 'put ''YWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLFJhKHRoaXMuaW5pdFZhbHVlT3JGbik/dm8obC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihh''@;'; put 'put ''KSkpOnZvKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNl''@;'; put 'put ''cnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIGNW''@;'; put 'put ''KGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gZ3koYyxsKXtyZXR1cm4gXzEoYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIHVWKGMsbCl7cmV0dXJuIGNzKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVu''@;'; put 'put ''Y3Rpb24gZFYoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4gY3MoYyxoPT5oPj1hP2grZDpoKX1UYShFZyxPMCk7Y2xhc3Mgdm5lIGV4dGVuZHMgRWd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPWRWKHRoaXMuaW5kZXhlZFZhbHVlcyxh''@;'; put 'put ''KTt0aGlzLmluZGV4ZWRWYWx1ZXM9Y1YoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPWd5KHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9dVYoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIGhWKGMsbCxhLGQpe2NvbnN0IGg9''@;'; put 'put ''YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZixfKT0+UmEoZCk/ZChmLF8pOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gZlYoYyxsKXtyZXR1cm4gXzEoYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFz''@;'; put 'put ''cyBXcCBleHRlbmRzIEVne2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1oVih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1mVih0aGlzLmluZGV4ZWRWYWx1ZXMsbCks''@;'; put 'put ''c3VwZXIucmVtb3ZlKGwpfX1jbGFzcyB4ayBleHRlbmRzIFdwe2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBBbCh0aGlzLmdldFZhbHVlcygpLChsLGEs''@;'; put 'put ''ZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBFayBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB5VGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIHdUZShjKXt2YXIgbD1mdW5jdGlvbiBDVGUoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVkVmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhp''@;'; put 'put ''cy5vcmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIuc2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVz''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAsbCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFu''@;'; put 'put ''Z2UiKSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPWd5KHRoaXMub3JkZXJPZkluZGV4ZXMsW2xdKSxSYSh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihsKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGws''@;'; put 'put ''dGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMu''@;'; put 'put ''bGVuZ3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9aFYodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4ZXM9ZFYodGhp''@;'; put 'put ''cy5vcmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPWZWKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPWd5KHRoaXMub3JkZXJPZkluZGV4ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz11Vih0aGlz''@;'; put 'put ''Lm9yZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIG15IGV4dGVuZHMgV3B7Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmltbWVkSW5kZXhlcygpe3JldHVybiBBbCh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBfbmU9bmV3IE1hcChbWyJoaWRpbmciLHhrXSxbImluZGV4IixF''@;'; put 'put ''Z10sWyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIsRWtdLFsicGh5c2ljYWxJbmRleFRvVmFsdWUiLFdwXSxbInRyaW1taW5nIixteV1dKTtsZXQgcFY9MDtjbGFzcyBnVntjb25zdHJ1Y3Rvcigpe3RoaXMuY29sbGVjdGlvbj1uZXcgTWFwfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNv''@;'; put 'put ''bGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLHBWKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtLaShhKSYmKGEu''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLHBWLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9''@;'; put 'put ''Z2V0KGwpe3JldHVybiBMYShsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9''@;'; put 'put ''PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fVRhKGdWLE8wKTtjbGFzcyBibmUgZXh0ZW5kcyBnVntj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZT1bXSx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPWNzKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPUtpKGFbMF0pJiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9''@;'; put 'put ''MDtmPGg7Zis9MSl7Y29uc3QgXz1bXTtmb3IobGV0IFQ9MDtUPHRoaXMuZ2V0TGVuZ3RoKCk7VCs9MSlfLnB1c2goYVtUXVtmXSk7ZC5wdXNoKF8pfXJldHVybiBjcyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dE1lcmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gS2koZCk/ZDp0aGlzLmZhbGxiYWNrVmFsdWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24geW5lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBtVj1uZXcgV2Vha01hcDtjbGFzcyB3bmV7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24geFRlKGMsbCxhKXsoZnVuY3Rpb24gRVRlKGMsbCl7aWYobC5oYXMo''@;'; put 'put ''YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxtVix7d3JpdGFibGU6ITAsdmFsdWU6W119KX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIFRUZShjLGwpe3JldHVybiBmdW5jdGlvbiBEVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHluZShjLGwsImdldCIpKX0odGhpcyxtVikpLHRoaXN9dW5zdWJzY3JpYmUoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlv''@;'; put 'put ''biBrVGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBBVGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHlu''@;'; put 'put ''ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsbVYsbCl9fWZ1bmN0aW9uIENuZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxu''@;'; put 'put ''ZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVl''@;'; put 'put ''OnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIHZ5KGMsbCxhKXsoZnVuY3Rpb24gSVRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBtZChjLGwpe3JldHVybiBmdW5jdGlvbiBMVGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFNuZShjLGwsImdldCIpKX1mdW5jdGlvbiBrayhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFJUZShjLGwsYSl7aWYobC5zZXQpbC5zZXQu''@;'; put 'put ''Y2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsU25lKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBTbmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9VGEod25lLE8wKTt2YXIgQWs9bmV3IFdlYWtNYXAsX3k9bmV3IFdlYWtNYXAsVGs9bmV3IFdlYWtNYXAsRGs9bmV3IFdlYWtNYXAsSWs9bmV3''@;'; put 'put ''IFdlYWtNYXA7Y2xhc3MgT1Rle2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt2eSh0aGlzLEFrLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU2V0fSksdnkodGhpcyxf''@;'; put 'put ''eSx7d3JpdGFibGU6ITAsdmFsdWU6W119KSx2eSh0aGlzLFRrLHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHZ5KHRoaXMsRGsse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdnkodGhpcyxJayx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxrayh0aGlzLElrLGw/PyExKX1jcmVhdGVPYnNlcnZlcigp''@;'; put 'put ''e2NvbnN0IGw9bmV3IHduZTtyZXR1cm4gbWQodGhpcyxBaykuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PnttZCh0aGlzLEFrKS5kZWxldGUobCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKENuZShtZCh0aGlzLF95KSxtZCh0aGlzLFRrKSkpLGx9ZW1pdChsKXts''@;'; put 'put ''ZXQgYT1tZCh0aGlzLFRrKTsoIW1kKHRoaXMsRGspfHxtZCh0aGlzLF95KS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5ndGgpLmZpbGwobWQodGhpcyxJaykpOmtrKHRoaXMsX3ksbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKG1kKHRoaXMsSWsp''@;'; put 'put ''KSksbWQodGhpcyxEayl8fChrayh0aGlzLERrLCEwKSxhPW1kKHRoaXMsX3kpKSk7Y29uc3QgZD1DbmUoYSxsKTttZCh0aGlzLEFrKS5mb3JFYWNoKGg9PmguX3dyaXRlKGQpKSxrayh0aGlzLFRrLGwpfX1jbGFzcyB2Vntjb25zdHJ1Y3Rvcigpe3RoaXMuaW5kZXhlc1NlcXVlbmNlPW5ldyB2''@;'; put 'put ''bmUsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uPW5ldyBibmUobD0+bC5zb21lKGE9PiEwPT09YSksITEpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb249bmV3IGJuZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb249bmV3IGdWLHRoaXMuaGlk''@;'; put 'put ''aW5nQ2hhbmdlc09ic2VydmFibGU9bmV3IE9UZSh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9W10sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9W10sdGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRo''@;'; put 'put ''aXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT1bXSx0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hl''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlPW5ldyBNYXAsdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2Ui''@;'; put 'put ''LGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9''@;'; put 'put ''Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhp''@;'; put 'put ''cy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNP''@;'; put 'put ''YnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxk''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIFNUZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighX25lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAo''@;'; put 'put ''IiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KF9uZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgbXk/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIHhrP3RoaXMuaGlk''@;'; put 'put ''aW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBz''@;'; put 'put ''Q29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgp''@;'; put 'put ''LHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gS2ko''@;'; put 'put ''YSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBLaShhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNh''@;'; put 'put ''bFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gS2koYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJl''@;'; put 'put ''bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBLaShhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0''@;'; put 'put ''aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgXz0tMTtyZXR1cm4gXz1hPjA/Zi5maW5kSW5kZXgoVD0+VD5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoVD0+VDxsKSwtMT09PV8/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCEx''@;'; put 'put ''KTpudWxsOmZbX119aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygp''@;'; put 'put ''XSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9''@;'; put 'put ''dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmlu''@;'; put 'put ''aXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwp''@;'; put 'put ''LmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09''@;'; put 'put ''PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg''@;'; put 'put ''MCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9''@;'; put 'put ''PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50''@;'; put 'put ''c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhl''@;'; put 'put ''cygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4''@;'; put 'put ''ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxl''@;'; put 'put ''bmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPWNzKGwsaWU9PnRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoaWUpKSxoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3RoLF89Z3kodGhpcy5nZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UoKSxkKSxUPV8uZmlsdGVyKGllPT4hMT09PXRoaXMuaXNUcmltbWVkKGllKSk7bGV0IFc9Xy5pbmRleE9mKFRbVC5sZW5ndGgtMV0pKzE7YStmPGgmJihXPV8uaW5kZXhPZihUW2FdKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4''@;'; put 'put ''ZXNTZXF1ZW5jZShjVihfLFcsZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlzSGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xs''@;'; put 'put ''ZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7Y29uc3QgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbbF0saD1LaShkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksZj10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGQp''@;'; put 'put ''P3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLF89Y3MobmV3IEFycmF5KGEpLmZpbGwoaCksKFQsVyk9PlQrVyk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlz''@;'; put 'put ''LmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQoZixfKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsXyksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsXyksdGhpcy52YXJpb3Vz''@;'; put 'put ''TWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLF8pLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCks''@;'; put 'put ''dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVy''@;'; put 'put ''eShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0''@;'; put 'put ''aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNo''@;'; put 'put ''ZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVG''@;'; put 'put ''cm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJn''@;'; put 'put ''ZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5n''@;'; put 'put ''ZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX1jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9W''@;'; put 'put ''aXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9''@;'; put 'put ''MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gTW5lKGMpe2Nv''@;'; put 'put ''bnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHthWzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9uIHhuZShjKXtLaShjKSYmU04oQWFgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90''@;'; put 'put ''IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1U''@;'; put 'put ''YSh2VixPMCk7Y29uc3R7cmVnaXN0ZXI6SFRlLGdldFZhbHVlczpOVGV9PXBkKCJwaHJhc2VGb3JtYXR0ZXJzIik7IWZ1bmN0aW9uIFZUZShjLGwpe0hUZShjLGwpfSgicGx1cmFsaXplIixmdW5jdGlvbiBGVGUoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmTnVtYmVyLmlzSW50ZWdl''@;'; put 'put ''cihsKT9jW2xdOmN9KTtjb25zdCBFbmU9IkNvbnRleHRNZW51Oml0ZW1zIixfVj1gJHtFbmV9Lm5vSXRlbXNgLGJWPWAke0VuZX0uaW5zZXJ0Um93QWJvdmVgLHlWPWAke0VuZX0uaW5zZXJ0Um93QmVsb3dgLHdWPWAke0VuZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxDVj1gJHtFbmV9Lmlu''@;'; put 'put ''c2VydENvbHVtbk9uVGhlUmlnaHRgLFNWPWAke0VuZX0ucmVtb3ZlUm93YCxNVj1gJHtFbmV9LnJlbW92ZUNvbHVtbmAseFY9YCR7RW5lfS51bmRvYCxFVj1gJHtFbmV9LnJlZG9gLGtWPWAke0VuZX0ucmVhZE9ubHlgLEFWPWAke0VuZX0uY2xlYXJDb2x1bW5gLFRWPWAke0VuZX0uY29weWAs''@;'; put 'put ''RFY9YCR7RW5lfS5jb3B5V2l0aEhlYWRlcnNgLElWPWAke0VuZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLExWPWAke0VuZX0uY29weUhlYWRlcnNPbmx5YCxSVj1gJHtFbmV9LmN1dGAsT1Y9YCR7RW5lfS5mcmVlemVDb2x1bW5gLFBWPWAke0VuZX0udW5mcmVlemVDb2x1bW5gLEZWPWAke0Vu''@;'; put 'put ''ZX0ubWVyZ2VDZWxsc2AsSFY9YCR7RW5lfS51bm1lcmdlQ2VsbHNgLE5WPWAke0VuZX0uYWRkQ29tbWVudGAsVlY9YCR7RW5lfS5lZGl0Q29tbWVudGAsQlY9YCR7RW5lfS5yZW1vdmVDb21tZW50YCxqVj1gJHtFbmV9LnJlYWRPbmx5Q29tbWVudGAselY9YCR7RW5lfS5hbGlnbmAsVVY9YCR7''@;'; put 'put ''RW5lfS5hbGlnbi5sZWZ0YCxaVj1gJHtFbmV9LmFsaWduLmNlbnRlcmAsWVY9YCR7RW5lfS5hbGlnbi5yaWdodGAsV1Y9YCR7RW5lfS5hbGlnbi5qdXN0aWZ5YCxHVj1gJHtFbmV9LmFsaWduLnRvcGAsJFY9YCR7RW5lfS5hbGlnbi5taWRkbGVgLHFWPWAke0VuZX0uYWxpZ24uYm90dG9tYCxL''@;'; put 'put ''Vj1gJHtFbmV9LmJvcmRlcnNgLFhWPWAke0VuZX0uYm9yZGVycy50b3BgLEpWPWAke0VuZX0uYm9yZGVycy5yaWdodGAsUVY9YCR7RW5lfS5ib3JkZXJzLmJvdHRvbWAsZUI9YCR7RW5lfS5ib3JkZXJzLmxlZnRgLHRCPWAke0VuZX0uYm9yZGVycy5yZW1vdmVgLG5CPWAke0VuZX0ubmVzdGVk''@;'; put 'put ''SGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsckI9YCR7RW5lfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLGlCPWAke0VuZX0uaGlkZUNvbHVtbmAsb0I9YCR7RW5lfS5zaG93Q29sdW1uYCxzQj1gJHtFbmV9LmhpZGVSb3dgLGFCPWAke0VuZX0uc2hvd1Jvd2AsJHU9IkZpbHRlcnM6''@;'; put 'put ''Iix5bD1gJHskdX1jb25kaXRpb25zYCxMaz1gJHt5bH0ubm9uZWAsbEI9YCR7eWx9LmlzRW1wdHlgLGNCPWAke3lsfS5pc05vdEVtcHR5YCx1Qj1gJHt5bH0uaXNFcXVhbFRvYCxkQj1gJHt5bH0uaXNOb3RFcXVhbFRvYCxoQj1gJHt5bH0uYmVnaW5zV2l0aGAsZkI9YCR7eWx9LmVuZHNXaXRo''@;'; put 'put ''YCxwQj1gJHt5bH0uY29udGFpbnNgLGdCPWAke3lsfS5kb2VzTm90Q29udGFpbmAsalRlPWAke3lsfS5ieVZhbHVlYCxtQj1gJHt5bH0uZ3JlYXRlclRoYW5gLHZCPWAke3lsfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsX0I9YCR7eWx9Lmxlc3NUaGFuYCxiQj1gJHt5bH0ubGVzc1RoYW5PckVx''@;'; put 'put ''dWFsVG9gLHlCPWAke3lsfS5pc0JldHdlZW5gLHdCPWAke3lsfS5pc05vdEJldHdlZW5gLENCPWAke3lsfS5hZnRlcmAsU0I9YCR7eWx9LmJlZm9yZWAsTUI9YCR7eWx9LnRvZGF5YCx4Qj1gJHt5bH0udG9tb3Jyb3dgLEVCPWAke3lsfS55ZXN0ZXJkYXlgLGtCPWAkeyR1fWxhYmVscy5maWx0''@;'; put 'put ''ZXJCeUNvbmRpdGlvbmAsQUI9YCR7JHV9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLFRCPWAkeyR1fWxhYmVscy5jb25qdW5jdGlvbmAsUms9YCR7JHV9bGFiZWxzLmRpc2p1bmN0aW9uYCxPaz1gJHskdX12YWx1ZXMuYmxhbmtDZWxsc2AsREI9YCR7JHV9YnV0dG9ucy5zZWxlY3RBbGxgLElCPWAk''@;'; put 'put ''eyR1fWJ1dHRvbnMuY2xlYXJgLExCPWAkeyR1fWJ1dHRvbnMub2tgLFJCPWAkeyR1fWJ1dHRvbnMuY2FuY2VsYCxPQj1gJHskdX1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsUEI9YCR7JHV9YnV0dG9ucy5wbGFjZWhvbGRlci52YWx1ZWAsRkI9YCR7JHV9YnV0dG9ucy5wbGFjZWhvbGRl''@;'; put 'put ''ci5zZWNvbmRWYWx1ZWAsa25lPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbX1ZdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW2JWXToiSW5zZXJ0IHJvdyBhYm92ZSIsW3lWXToiSW5zZXJ0IHJvdyBiZWxvdyIsW3dWXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbQ1ZdOiJJbnNlcnQgY29sdW1uIHJp''@;'; put 'put ''Z2h0IixbU1ZdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW01WXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFt4Vl06IlVuZG8iLFtFVl06IlJlZG8iLFtrVl06IlJlYWQgb25seSIsW0FWXToiQ2xlYXIgY29sdW1uIixbelZdOiJBbGlnbm1lbnQiLFtVVl06Ikxl''@;'; put 'put ''ZnQiLFtaVl06IkNlbnRlciIsW1lWXToiUmlnaHQiLFtXVl06Ikp1c3RpZnkiLFtHVl06IlRvcCIsWyRWXToiTWlkZGxlIixbcVZdOiJCb3R0b20iLFtPVl06IkZyZWV6ZSBjb2x1bW4iLFtQVl06IlVuZnJlZXplIGNvbHVtbiIsW0tWXToiQm9yZGVycyIsW1hWXToiVG9wIixbSlZdOiJSaWdo''@;'; put 'put ''dCIsW1FWXToiQm90dG9tIixbZUJdOiJMZWZ0IixbdEJdOiJSZW1vdmUgYm9yZGVyKHMpIixbTlZdOiJBZGQgY29tbWVudCIsW1ZWXToiRWRpdCBjb21tZW50IixbQlZdOiJEZWxldGUgY29tbWVudCIsW2pWXToiUmVhZC1vbmx5IGNvbW1lbnQiLFtGVl06Ik1lcmdlIGNlbGxzIixbSFZdOiJV''@;'; put 'put ''bm1lcmdlIGNlbGxzIixbVFZdOiJDb3B5IixbRFZdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW0lWXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyJdLFtMVl06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFk''@;'; put 'put ''ZXJzIG9ubHkiXSxbUlZdOiJDdXQiLFtuQl06Ikluc2VydCBjaGlsZCByb3ciLFtyQl06IkRldGFjaCBmcm9tIHBhcmVudCIsW2lCXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW29CXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW3NCXTpbIkhpZGUgcm93IiwiSGlk''@;'; put 'put ''ZSByb3dzIl0sW2FCXTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW0xrXToiTm9uZSIsW2xCXToiSXMgZW1wdHkiLFtjQl06IklzIG5vdCBlbXB0eSIsW3VCXToiSXMgZXF1YWwgdG8iLFtkQl06IklzIG5vdCBlcXVhbCB0byIsW2hCXToiQmVnaW5zIHdpdGgiLFtmQl06IkVuZHMgd2l0aCIs''@;'; put 'put ''W3BCXToiQ29udGFpbnMiLFtnQl06IkRvZXMgbm90IGNvbnRhaW4iLFttQl06IkdyZWF0ZXIgdGhhbiIsW3ZCXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbX0JdOiJMZXNzIHRoYW4iLFtiQl06Ikxlc3MgdGhhbiBvciBlcXVhbCB0byIsW3lCXToiSXMgYmV0d2VlbiIsW3dCXToiSXMg''@;'; put 'put ''bm90IGJldHdlZW4iLFtDQl06IkFmdGVyIixbU0JdOiJCZWZvcmUiLFtNQl06IlRvZGF5IixbeEJdOiJUb21vcnJvdyIsW0VCXToiWWVzdGVyZGF5IixbT2tdOiJCbGFuayBjZWxscyIsW2tCXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW0FCXToiRmlsdGVyIGJ5IHZhbHVlIixbVEJdOiJBbmQi''@;'; put 'put ''LFtSa106Ik9yIixbREJdOiJTZWxlY3QgYWxsIixbSUJdOiJDbGVhciIsW0xCXToiT0siLFtSQl06IkNhbmNlbCIsW09CXToiU2VhcmNoIixbUEJdOiJWYWx1ZSIsW0ZCXToiU2Vjb25kIHZhbHVlIn0selRlPVYsSEI9a25lLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6VVRlLGdldEl0ZW06QW5l''@;'; put 'put ''LGhhc0l0ZW06WlRlLGdldFZhbHVlczpZVGV9PXBkKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBUbmUoYyxsKXtsZXQgYT1jLGQ9bDtyZXR1cm4gdXMoYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gV1RlKGMsbCl7YyE9PUhCJiZmdW5jdGlvbiBQVGUoYyxs''@;'; put 'put ''KXtkcyhsLChhLGQpPT57TGEoY1tkXSkmJihjW2RdPWEpfSl9KGwsQW5lKEhCKSl9KGEsZCksVVRlKGEseXUoZCkpLHl1KGQpfWZ1bmN0aW9uIERuZShjKXtyZXR1cm4gTkIoYyk/eXUoQW5lKGMpKTpudWxsfWZ1bmN0aW9uIE5CKGMpe3JldHVybiBaVGUoYyl9ZnVuY3Rpb24gSW5lKGMsbCxh''@;'; put 'put ''KXtjb25zdCBkPURuZShjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWRbbF07aWYoTGEoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiAkVGUoYyxsKXtsZXQgYT1jO3JldHVybiBEbihmdW5jdGlvbiBCVGUoKXtyZXR1cm4gTlRlKCl9KCksZD0+e2E9ZChjLGwpfSks''@;'; put 'put ''YX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBdOmZ9VG5lKGtuZSk7Y29uc3QgUGs9ImFjdGl2ZS1oZWFkZXIiLEZrPSJhcmVhIixieT0iY2VsbCIsVkI9ImZpbGwiLHl5PSJoZWFkZXIiLEJCPSJjdXN0b20tc2VsZWN0aW9uIixRVGU9Y2xhc3MgSlRle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSl7dGhpcy5zZXR0aW5ncz1sLHRoaXMuY2VsbFJhbmdlPWF8fG51bGwsdGhpcy5pbnN0YW5jZUJvcmRlcnM9e30sdGhpcy5jbGFzc05hbWVzPVt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZV0sdGhpcy5jbGFzc05hbWVHZW5lcmF0b3I9dGhpcy5saW5lYXJDbGFzc05hbWVHZW5lcmF0b3IodGhp''@;'; put 'put ''cy5zZXR0aW5ncy5jbGFzc05hbWUsdGhpcy5zZXR0aW5ncy5sYXllckxldmVsKX1nZXRCb3JkZXIobCl7cmV0dXJuIHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF18fCh0aGlzLmluc3RhbmNlQm9yZGVyc1tsLmd1aWRdPW5ldyBjbGFzcyBLVGV7Y29uc3RydWN0b3IobCxhKXthJiYodGhp''@;'; put 'put ''cy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5jZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVs''@;'; put 'put ''bCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxsLHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT17d2lkdGg6IjZweCIsaGVpZ2h0OiI2cHgiLGJvcmRlcldpZHRoOiIxcHgiLGJvcmRlclN0eWxlOiJz''@;'; put 'put ''b2xpZCIsYm9yZGVyQ29sb3I6IiNGRkYifSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMix0aGlzLmNvcm5lcj1udWxsLHRoaXMuY29ybmVyU3R5bGU9bnVsbCx0aGlzLmNyZWF0ZUJvcmRlcnMoYSksdGhp''@;'; put 'put ''cy5yZWdpc3Rlckxpc3RlbmVycygpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLCgpPT50aGlzLm9uTW91c2VEb3duKCkpLHRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpO2ZvcihsZXQgYT0wLGQ9dGhpcy5tYWluLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm1haW4uY2hpbGROb2Rlc1thXSwi''@;'; put 'put ''bW91c2VlbnRlciIsZj0+dGhpcy5vbk1vdXNlRW50ZXIoZix0aGlzLm1haW4uY2hpbGROb2Rlc1thXSkpfW9uTW91c2VEb3duKCl7dGhpcy5tb3VzZURvd249ITB9b25Nb3VzZVVwKCl7dGhpcy5tb3VzZURvd249ITF9b25Nb3VzZUVudGVyKGwsYSl7aWYoIXRoaXMubW91c2VEb3dufHwhdGhp''@;'; put 'put ''cy53b3QuZ2V0U2V0dGluZygiaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlciIpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdjIobCk7Y29uc3QgZD10aGlzLGg9dGhpcy53b3Qucm9vdERvY3VtZW50LmJvZHksZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Euc3R5bGUuZGlzcGxheT0i''@;'; put 'put ''bm9uZSIsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJtb3VzZW1vdmUiLGZ1bmN0aW9uIFQoVyl7KGZ1bmN0aW9uIF8oVyl7aWYoVy5jbGllbnRZPE1hdGguZmxvb3IoZi50b3ApfHxXLmNsaWVudFk+TWF0aC5jZWlsKGYudG9wK2YuaGVpZ2h0KXx8Vy5jbGllbnRYPE1h''@;'; put 'put ''dGguZmxvb3IoZi5sZWZ0KXx8Vy5jbGllbnRYPk1hdGguY2VpbChmLmxlZnQrZi53aWR0aCkpcmV0dXJuITB9KShXKSYmKGQuZXZlbnRNYW5hZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixUKSxhLnN0eWxlLmRpc3BsYXk9ImJsb2NrIil9KX1jcmVhdGVCb3JkZXJzKGwp''@;'; put 'put ''e2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLndvdDt0aGlzLm1haW49YS5jcmVhdGVFbGVtZW50KCJkaXYiKTtjb25zdCBkPVsidG9wIiwic3RhcnQiLCJib3R0b20iLCJlbmQiLCJjb3JuZXIiXTtsZXQgaD10aGlzLm1haW4uc3R5bGU7aC5wb3NpdGlvbj0iYWJzb2x1dGUiLGgudG9wPTAs''@;'; put 'put ''aC5sZWZ0PTA7Zm9yKGxldCBUPTA7VDw1O1QrKyl7Y29uc3QgVz1kW1RdLGllPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWUuY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10uaGlkZSYm''@;'; put 'put ''KGllLmNsYXNzTmFtZSs9IiBoaWRkZW4iKSxoPWllLnN0eWxlLGguYmFja2dyb3VuZENvbG9yPXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10uY29sb3I/dGhpcy5zZXR0aW5nc1tXXS5jb2xvcjpsLmJvcmRlci5jb2xvcixoLmhlaWdodD10aGlzLnNldHRpbmdzW1ddJiZ0aGlz''@;'; put 'put ''LnNldHRpbmdzW1ddLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbV10ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCxoLndpZHRoPXRoaXMuc2V0dGluZ3NbV10mJnRoaXMuc2V0dGluZ3NbV10ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tXXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lk''@;'; put 'put ''dGh9cHhgLHRoaXMubWFpbi5hcHBlbmRDaGlsZChpZSl9dGhpcy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5zdGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rl''@;'; put 'put ''c1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUsdGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0''@;'; put 'put ''XSx0aGlzLmNvcm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9dGhpcy5jb3JuZXJEZWZhdWx0''@;'; put 'put ''U3R5bGUuaGVpZ2h0LHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyPVt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigiICIpLG0yKCkmJnRo''@;'; put 'put ''aXMuY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IF89Zi5ib3JkZXJzSG9sZGVyO198fChfPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksXy5jbGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9s''@;'; put 'put ''ZGVyPV8sZi5zcHJlYWRlci5hcHBlbmRDaGlsZChfKSksXy5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMud290O3RoaXMuc2VsZWN0aW9uSGFuZGxlcz17dG9wOmwuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''RElWIiksdG9wSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLGJvdHRvbUhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKX0sdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZSB0''@;'; put 'put ''b3BMZWZ0U2VsZWN0aW9uSGFuZGxlIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5jbGFzc05hbWU9InRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5jbGFzc05hbWU9''@;'; put 'put ''ImJvdHRvbVNlbGVjdGlvbkhhbmRsZSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSBib3R0b21SaWdodFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0''@;'; put 'put ''aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzPXt0b3A6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcC5zdHlsZSx0b3BIaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhLnN0eWxlLGJvdHRvbTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLnN0eWxlLGJvdHRvbUhp''@;'; put 'put ''dEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEuc3R5bGV9LGRzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiNDBweCIsd2lkdGg6IjQwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCg0MC8xLjUsMTApfXB4YH0sKF8sVCk9Pnt0aGlzLnNlbGVjdGlv''@;'; put 'put ''bkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWFbVF09Xyx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbVF09X30pLGRzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8x''@;'; put 'put ''LjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZGIixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In0sKF8sVCk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbVtUXT1fLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wW1RdPV99KSx0aGlzLm1haW4uYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRo''@;'; put 'put ''aXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53b3Quc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKTtyZXR1cm4hKCFkLmNlbGxSYW5nZXx8bD09PWQuY2VsbFJhbmdlLnRvLnJvdyYmYT09PWQuY2VsbFJhbmdlLnRvLmNv''@;'; put 'put ''bCl9dXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24obCxhLGQsaCxmLF8pe2NvbnN0IFc9dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik/InJpZ2h0IjoibGVmdCIse3RvcDppZSx0b3BIaXRBcmVhOmdlLGJvdHRvbTp3ZSxib3R0b21IaXRBcmVh''@;'; put 'put ''OkVlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLFplPXBhcnNlSW50KGllLmJvcmRlcldpZHRoLDEwKSxvdD1wYXJzZUludChpZS53aWR0aCwxMCksZXQ9cGFyc2VJbnQoZ2Uud2lkdGgsMTApLHl0PXRoaXMud290Lnd0VGFibGUuZ2V0V2lkdGgoKSxrdD10aGlzLndvdC53dFRhYmxl''@;'; put 'put ''LmdldEhlaWdodCgpO2llLnRvcD1gJHtwYXJzZUludChkLW90LTEsMTApfXB4YCxpZVtXXT1gJHtwYXJzZUludChoLW90LTEsMTApfXB4YCxnZS50b3A9YCR7cGFyc2VJbnQoZC1ldC80KjMsMTApfXB4YCxnZVtXXT1gJHtwYXJzZUludChoLWV0LzQqMywxMCl9cHhgO2NvbnN0IFN0PU1hdGgu''@;'; put 'put ''bWluKHBhcnNlSW50KGgrZiwxMCkseXQtb3QtMipaZSksUXQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLWV0LzQsMTApLHl0LWV0LTIqWmUpO3dlW1ddPWAke1N0fXB4YCxFZVtXXT1gJHtRdH1weGA7Y29uc3Qgcm49TWF0aC5taW4ocGFyc2VJbnQoZCtfLDEwKSxrdC1vdC0yKlplKSx2bj1NYXRo''@;'; put 'put ''Lm1pbihwYXJzZUludChkK18tZXQvNCwxMCksa3QtZXQtMipaZSk7d2UudG9wPWAke3JufXB4YCxFZS50b3A9YCR7dm59cHhgLHRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUmJnRoaXMuc2V0dGluZ3MuYm9yZGVyLmNvcm5lclZpc2libGUoKT8oaWUuZGlzcGxheT0iYmxvY2si''@;'; put 'put ''LGdlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzUGFydFJhbmdlKGwsYSk/KHdlLmRpc3BsYXk9Im5vbmUiLEVlLmRpc3BsYXk9Im5vbmUiKTood2UuZGlzcGxheT0iYmxvY2siLEVlLmRpc3BsYXk9ImJsb2NrIikpOihpZS5kaXNwbGF5PSJub25lIix3ZS5kaXNwbGF5PSJub25lIixnZS5kaXNw''@;'; put 'put ''bGF5PSJub25lIixFZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KGllLnpJbmRleD0iOTk5OSIsZ2UuekluZGV4''@;'; put 'put ''PSI5OTk5Iik6KGllLnpJbmRleD0iIixnZS56SW5kZXg9IiIpfWFwcGVhcihsKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtjb25zdHt3dFRhYmxlOmEscm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLndvdDtsZXQgZixfLFQsVyxpZSxnZTtjb25zdCB3ZT1hLmdldFJlbmRlcmVk''@;'; put 'put ''Um93c0NvdW50KCk7Zm9yKGxldCBfcj0wO19yPHdlO19yKz0xKXtjb25zdCB2dD1hLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKF9yKTtpZih2dD49bFswXSYmdnQ8PWxbMl0pe2Y9dnQsaWU9bFswXTticmVha319Zm9yKGxldCBfcj13ZS0xO19yPj0wO19yLT0xKXtjb25zdCB2dD1hLnJv''@;'; put 'put ''d0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKF9yKTtpZih2dD49bFswXSYmdnQ8PWxbMl0pe189dnQ7YnJlYWt9fWNvbnN0IEVlPWEuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IF9yPTA7X3I8RWU7X3IrPTEpe2NvbnN0IHZ0PWEuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3Vy''@;'; put 'put ''Y2UoX3IpO2lmKHZ0Pj1sWzFdJiZ2dDw9bFszXSl7VD12dCxnZT1sWzFdO2JyZWFrfX1mb3IobGV0IF9yPUVlLTE7X3I+PTA7X3ItPTEpe2NvbnN0IHZ0PWEuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoX3IpO2lmKHZ0Pj1sWzFdJiZ2dDw9bFszXSl7Vz12dDticmVha319aWYodm9p''@;'; put 'put ''ZCAwPT09Znx8dm9pZCAwPT09VClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2xldCBaZT1hLmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLFQpKTtjb25zdCBvdD1mIT09X3x8VCE9PVcsZXQ9b3Q/YS5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoXyxX''@;'; put 'put ''KSk6WmUseXQ9cWwoWmUpLGt0PW90P3FsKGV0KTp5dCxTdD1xbChhLlRBQkxFKSxRdD13YShhLlRBQkxFKSxybj15dC50b3Asdm49eXQubGVmdCxObj10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKTtsZXQgY3I9MCxEcj0wO2lmKE5uKXtjb25zdCBfcj13YShaZSk7''@;'; put 'put ''RHI9dm4rX3Ita3QubGVmdCxjcj1oLmlubmVyV2lkdGgtdm4tX3ItKGguaW5uZXJXaWR0aC1TdC5sZWZ0LVF0KS0xfWVsc2UgRHI9a3QubGVmdCt3YShldCktdm4sY3I9dm4tU3QubGVmdC0xO2lmKHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZChmLF8pKXtjb25zdCBfcj10aGlzLmdldERp''@;'; put 'put ''bWVuc2lvbnNGcm9tSGVhZGVyKCJjb2x1bW5zIixULFcsaWUsU3QpO2xldCB2dD1udWxsO19yJiYoW3Z0LGNyLERyXT1fciksdnQmJihaZT12dCl9bGV0IF9pPXJuLVN0LnRvcC0xLGxpPWt0LnRvcCthbChldCktcm47aWYodGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKFQsVykpe2NvbnN0IF9y''@;'; put 'put ''PXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGYsXyxnZSxTdCk7bGV0IHZ0PW51bGw7X3ImJihbdnQsX2ksbGldPV9yKSx2dCYmKFplPXZ0KX1jb25zdCBtcj16cChaZSxoKTtwYXJzZUludChtci5ib3JkZXJUb3BXaWR0aCwxMCk+MCYmKF9pKz0xLGxpPWxpPjA/bGktMTow''@;'; put 'put ''KSxwYXJzZUludChtcltObj8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCJdLDEwKT4wJiYoY3IrPTEsRHI9RHI+MD9Eci0xOjApO2NvbnN0IEVpPU5uPyJyaWdodCI6ImxlZnQiO3RoaXMudG9wU3R5bGUudG9wPWAke19pfXB4YCx0aGlzLnRvcFN0eWxlW0VpXT1gJHtjcn1w''@;'; put 'put ''eGAsdGhpcy50b3BTdHlsZS53aWR0aD1gJHtEcn1weGAsdGhpcy50b3BTdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy5zdGFydFN0eWxlLnRvcD1gJHtfaX1weGAsdGhpcy5zdGFydFN0eWxlW0VpXT1gJHtjcn1weGAsdGhpcy5zdGFydFN0eWxlLmhlaWdodD1gJHtsaX1weGAsdGhpcy5zdGFy''@;'; put 'put ''dFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBacj1NYXRoLmZsb29yKHRoaXMuc2V0dGluZ3MuYm9yZGVyLndpZHRoLzIpO3RoaXMuYm90dG9tU3R5bGUudG9wPV9pK2xpLVpyKyJweCIsdGhpcy5ib3R0b21TdHlsZVtFaV09YCR7Y3J9cHhgLHRoaXMuYm90dG9tU3R5bGUud2lkdGg9YCR7''@;'; put 'put ''RHJ9cHhgLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuZW5kU3R5bGUudG9wPWAke19pfXB4YCx0aGlzLmVuZFN0eWxlW0VpXT1jcitEci1acisicHgiLHRoaXMuZW5kU3R5bGUuaGVpZ2h0PWAke2xpKzF9cHhgLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0iYmxvY2siO2xl''@;'; put 'put ''dCBGbj10aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlO0ZuPSJmdW5jdGlvbiI9PXR5cGVvZiBGbj9Gbih0aGlzLnNldHRpbmdzLmxheWVyTGV2ZWwpOkZuO2NvbnN0IEZyPXRoaXMud290LmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsXyxXKTtsZXRbUW4sTXJd''@;'; put 'put ''PVtfLFddO2lmKEZyJiZBcnJheS5pc0FycmF5KEZyKSYmKFssLFFuLE1yXT1GciksbTIoKXx8IUZufHx0aGlzLmlzUGFydFJhbmdlKFFuLE1yKSl0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dGhpcy5jb3JuZXJTdHlsZS50b3A9X2krbGkrdGhpcy5jb3JuZXJDZW50ZXJQ''@;'; put 'put ''b2ludE9mZnNldC0xKyJweCIsdGhpcy5jb3JuZXJTdHlsZVtFaV09Y3IrRHIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC0xKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoLHRoaXMuY29ybmVyU3R5''@;'; put 'put ''bGUud2lkdGg9dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtsZXQgX3I9dmcoYS5UQUJMRSk7Y29uc3QgdnQ9X3I9PT1oO3Z0JiYoX3I9ZC5kb2N1bWVudEVsZW1lbnQpO2NvbnN0IE90PXBhcnNlSW50KHRoaXMuY29ybmVyRGVm''@;'; put 'put ''YXVsdFN0eWxlLndpZHRoLDEwKS8yLGNuPXBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMjtpZihXPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3QgRW49dnQ/ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpldC5v''@;'; put 'put ''ZmZzZXRMZWZ0O2xldCBPbj0hMSxKbj0wO05uPyhKbj1Fbi1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixPbj1KbjwwKTooSm49RW4rd2EoZXQpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLE9uPUpuPj1peShfcikpLE9u''@;'; put 'put ''JiYodGhpcy5jb3JuZXJTdHlsZVtFaV09YCR7TWF0aC5mbG9vcihjcitEcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LU90KX1weGAsdGhpcy5jb3JuZXJTdHlsZVtObj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmlnaHRXaWR0aCJdPTApfV89PT10aGlzLndvdC5nZXRTZXR0aW5n''@;'; put 'put ''KCJ0b3RhbFJvd3MiKS0xJiYodnQ/ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOmV0Lm9mZnNldFRvcCkrYWwoZXQpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMj49amYoX3IpJiYodGhpcy5jb3JuZXJTdHlsZS50b3A9YCR7TWF0aC5mbG9vcihf''@;'; put 'put ''aStsaSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LWNuKX1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD0wKSx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1tMigpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKF8s''@;'; put 'put ''VyxfaSxjcixEcixsaSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1''@;'; put 'put ''cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6X309dGhpcy53b3QsVD1fLnd0Um9v''@;'; put 'put ''dEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgVz1udWxsLGllPW51bGwsZ2U9bnVsbCx3ZT1udWxsLEVlPW51bGwsWmU9bnVsbCxvdD1udWxsLGV0PW51bGw7c3dpdGNoKGwpe2Nhc2Uicm93cyI6Vz1mdW5jdGlvbigpe3JldHVybiBfLmdldFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSxpZT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBhbCguLi5hcmd1bWVudHMpfSxnZT0iaHRfX3NlbGVjdGlvbi0tcm93cyIsWmU9InRvcCI7YnJlYWs7Y2FzZSJjb2x1bW5zIjpXPWZ1bmN0aW9uKCl7cmV0dXJuIF8uZ2V0Q29sdW1uSGVhZGVyKC4uLmFyZ3VtZW50cyl9LGllPWZ1bmN0aW9uKCl7cmV0dXJuIHdhKC4u''@;'; put 'put ''LmFyZ3VtZW50cyl9LGdlPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixaZT0ibGVmdCJ9aWYoVC5jbGFzc0xpc3QuY29udGFpbnMoZ2UpKXtjb25zdCB5dD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKG90PVcoYSx5dC1oKSxldD1XKGQseXQtaCksIW90''@;'; put 'put ''fHwhZXQpcmV0dXJuITE7Y29uc3Qga3Q9cWwob3QpLFN0PXFsKGV0KTtyZXR1cm4gb3QmJmV0JiYod2U9a3RbWmVdLWZbWmVdLTEsRWU9U3RbWmVdK2llKGV0KS1rdFtaZV0pLFtvdCx3ZSxFZV19cmV0dXJuITF9Y2hhbmdlQm9yZGVyU3R5bGUobCxhKXtjb25zdCBkPXRoaXNbbF0uc3R5bGUs''@;'; put 'put ''aD1hW2xdOyFofHxoLmhpZGU/cGkodGhpc1tsXSwiaGlkZGVuIik6KEJvKHRoaXNbbF0sImhpZGRlbiIpJiZXbyh0aGlzW2xdLCJoaWRkZW4iKSxkLmJhY2tncm91bmRDb2xvcj1oLmNvbG9yLCgidG9wIj09PWx8fCJib3R0b20iPT09bCkmJihkLmhlaWdodD1gJHtoLndpZHRofXB4YCksKCJz''@;'; put 'put ''dGFydCI9PT1sfHwiZW5kIj09PWwpJiYoZC53aWR0aD1gJHtoLndpZHRofXB4YCkpfWNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZTtkLmJhY2tncm91bmRDb2xvcj0iIzAwMCIsZC53aWR0aD0iMXB4IixkLmhlaWdodD0iMXB4In10b2dnbGVIaWRk''@;'; put 'put ''ZW5DbGFzcyhsLGEpe3RoaXMuY2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCksYT9waSh0aGlzW2xdLCJoaWRkZW4iKTpXbyh0aGlzW2xdLCJoaWRkZW4iKX1kaXNhcHBlYXIoKXt0aGlzLnRvcFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYm90dG9tU3R5bGUuZGlzcGxheT0ibm9uZSIs''@;'; put 'put ''dGhpcy5zdGFydFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuZW5kU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIixtMigpJiYodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3AuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5k''@;'; put 'put ''bGVzLnN0eWxlcy50b3BIaXRBcmVhLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tSGl0QXJlYS5kaXNwbGF5PSJub25lIil9ZGVzdHJveSgpe3RoaXMuZXZl''@;'; put 'put ''bnRNYW5hZ2VyLmRlc3Ryb3lXaXRoT3duRXZlbnRzT25seSgpLHRoaXMubWFpbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubWFpbil9fShsLHRoaXMuc2V0dGluZ3MpKSx0aGlzLmluc3RhbmNlQm9yZGVyc1tsLmd1aWRdfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJh''@;'; put 'put ''bmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJv''@;'; put 'put ''bS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVy''@;'; put 'put ''cygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5bbC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWFkZENsYXNzQXRDb29yZHMobCxhLGQsaCl7bGV0IGY9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0mJmFyZ3VtZW50c1s0XTtjb25zdCBfPWwud3RUYWJsZS5nZXRDZWxsKHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKTtpZigib2JqZWN0Ij09dHlwZW9mIF8pe2xldCBUPWg7ZiYmKFQ9dGhpcy5jbGFzc05hbWVH''@;'; put 'put ''ZW5lcmF0b3IoXyksdGhpcy5jbGFzc05hbWVzLmluY2x1ZGVzKFQpfHx0aGlzLmNsYXNzTmFtZXMucHVzaChUKSkscGkoXyxUKX1yZXR1cm4gdGhpc31saW5lYXJDbGFzc05hbWVHZW5lcmF0b3IobCxhKXtyZXR1cm4gZnVuY3Rpb24gZChoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7aWYoMD09PWF8fDA9PT1mKXJldHVybiBsO2xldCBfPWY+PTA/ZjphLFQ9bDtyZXR1cm4gXy09MSxUPUJvKGgsMD09PV8/bDpgJHtsfS0ke199YCk/YCR7bH0tJHtfKzF9YDpkKGgsXyksVH19ZHJhdyhsKXtpZih0aGlzLmlzRW1w''@;'; put 'put ''dHkoKSlyZXR1cm4gdm9pZCh0aGlzLnNldHRpbmdzLmJvcmRlciYmdGhpcy5nZXRCb3JkZXIobCkuZGlzYXBwZWFyKCkpO2NvbnN0IGE9bC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1sLnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxoPXRoaXMuZ2V0Q29ybmVy''@;'; put 'put ''cygpLFtmLF8sVCxXXT1oLHtoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6aWUsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOmdlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTp3ZSxoaWdobGlnaHRPbmx5Q2xvc2VzdEhlYWRlcjpFZSxzZWxlY3Rpb25UeXBlOlplfT10aGlzLnNldHRpbmdzLG90PXZv''@;'; put 'put ''aWQgMD09PVplfHxbImFjdGl2ZS1oZWFkZXIiLCJoZWFkZXIiXS5pbmNsdWRlcyhaZSk7aWYob3QmJm51bGwhPT1fJiZudWxsIT09Vyl7bGV0IGV0PTA7Zm9yKGxldCB5dD0wO3l0PGQ7eXQrPTEpe2NvbnN0IGt0PWwud3RUYWJsZS5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZSh5dCk7''@;'; put 'put ''aWYoa3Q+PV8mJmt0PD1XKXtsZXQgU3Q9bC53dFRhYmxlLmdldENvbHVtbkhlYWRlcnMoa3QpO2NvbnN0IFF0PVN0Lmxlbmd0aC0xO0VlJiZTdC5sZW5ndGg+MSYmKFN0PVtTdFtRdF1dKTtmb3IobGV0IHJuPTA7cm48U3QubGVuZ3RoO3JuKz0xKXtjb25zdCB2bj1bXTtsZXQgTm49U3Rbcm5d''@;'; put 'put ''O2llJiZ2bi5wdXNoKGllKSxnZSYmdm4ucHVzaChnZSkscm49RWU/UXQ6cm47Y29uc3QgY3I9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsa3Qscm4se3NlbGVjdGlvblR5cGU6WmUsY29sdW1uQ3Vyc29yOmV0LHNlbGVjdGlvbldpZHRoOlctXysxLGNs''@;'; put 'put ''YXNzTmFtZXM6dm59KTtjciE9PWt0JiYoTm49bC53dFRhYmxlLmdldENvbHVtbkhlYWRlcihjcixybikpLHBpKE5uLHZuKX1ldCs9MX19fWlmKG51bGwhPT1mJiZudWxsIT09VCl7bGV0IGV0PTA7Zm9yKGxldCB5dD0wO3l0PGE7eXQrPTEpe2NvbnN0IGt0PWwud3RUYWJsZS5yb3dGaWx0ZXIu''@;'; put 'put ''cmVuZGVyZWRUb1NvdXJjZSh5dCk7aWYob3QmJmt0Pj1mJiZrdDw9VCl7bGV0IFN0PWwud3RUYWJsZS5nZXRSb3dIZWFkZXJzKGt0KTtjb25zdCBRdD1TdC5sZW5ndGgtMTtFZSYmU3QubGVuZ3RoPjEmJihTdD1bU3RbUXRdXSk7Zm9yKGxldCBybj0wO3JuPFN0Lmxlbmd0aDtybis9MSl7Y29u''@;'; put 'put ''c3Qgdm49W107bGV0IE5uPVN0W3JuXTtpZSYmdm4ucHVzaChpZSksd2UmJnZuLnB1c2god2UpLHJuPUVlP1F0OnJuO2NvbnN0IGNyPWwuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGt0LHJuLHtzZWxlY3Rpb25UeXBlOlplLHJvd0N1cnNvcjpldCxzZWxlY3Rp''@;'; put 'put ''b25IZWlnaHQ6VC1mKzEsY2xhc3NOYW1lczp2bn0pO2NyIT09a3QmJihObj1sLnd0VGFibGUuZ2V0Um93SGVhZGVyKGNyLHJuKSkscGkoTm4sdm4pfWV0Kz0xfWlmKG51bGwhPT1fJiZudWxsIT09Vylmb3IobGV0IFN0PTA7U3Q8ZDtTdCs9MSl7Y29uc3QgUXQ9bC53dFRhYmxlLmNvbHVtbkZp''@;'; put 'put ''bHRlci5yZW5kZXJlZFRvU291cmNlKFN0KTtrdD49ZiYma3Q8PVQmJlF0Pj1fJiZRdDw9Vz90aGlzLnNldHRpbmdzLmNsYXNzTmFtZSYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUsdGhpcy5zZXR0aW5ncy5tYXJrSW50ZXJzZWN0aW9ucyk6''@;'; put 'put ''a3Q+PWYmJmt0PD1UP3dlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCxrdCxRdCx3ZSk6UXQ+PV8mJlF0PD1XJiZnZSYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQsZ2UpO2NvbnN0IHJuPWwuZ2V0U2V0dGluZygib25BZnRlckRyYXdTZWxlY3Rpb24iLGt0LFF0LHRoaXMuc2V0dGlu''@;'; put 'put ''Z3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiBybiYmdGhpcy5hZGRDbGFzc0F0Q29vcmRzKGwsa3QsUXQscm4pfX19bC5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixoLHRoaXMuc2V0dGluZ3MuY2xhc3NOYW1lKSx0aGlzLnNldHRpbmdzLmJvcmRlciYmdGhpcy5nZXRC''@;'; put 'put ''b3JkZXIobCkuYXBwZWFyKGgpfWRlc3Ryb3koKXtPYmplY3QudmFsdWVzKHRoaXMuaW5zdGFuY2VCb3JkZXJzKS5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKX19O2NvbnN0IGg3PWNsYXNzIHJEZSBleHRlbmRzIFFUZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gZURl''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB0RGUoYyl7dmFyIGw9ZnVuY3Rpb24gbkRlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1''@;'; put 'put ''bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1''@;'; put 'put ''YWxDZWxsUmFuZ2U9YXx8bnVsbCx0aGlzLmNvbW1pdCgpfWFkZChsKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChsKSx0aGlz''@;'; put 'put ''fWNsZWFyKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9ubHkobCl7bGV0e2Zyb206YSx0bzpkfT1sLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsMSksZj10aGlzLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5Db29yZHMoZCwtMSk7aWYobnVsbD09PWh8fG51bGw9PT1mKXJldHVybiBudWxsO2lmKGgucm93PmYucm93fHxoLmNvbD5mLmNvbCl7aWYoImhlYWRlciIhPT10aGlzLnNldHRpbmdzLnR5cGUmJiJhY3RpdmUtaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSlyZXR1cm4gbnVsbDto''@;'; put 'put ''PWEsZj1kfXJldHVybiB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShoLGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphO2NvbnN0IGg9dGhpcy5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcigpLGwucm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcigpLGwuY29sLGQpO3Jl''@;'; put 'put ''dHVybiBudWxsPT09Zj9udWxsOnRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEsZCl7aWYoYTwwKXJldHVybiBhO2NvbnN0IGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSxkKTtyZXR1cm4iaGVhZGVyIiE9PXRoaXMu''@;'; put 'put ''c2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlfHxudWxsIT09aD9oOi0xfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRoaXMu''@;'; put 'put ''dmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT0iTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGQ9Ilct''@;'; put 'put ''RSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwuZnJvbS5jbG9uZSgpLm5vcm1hbGl6ZSgpLGEsZCk7aWYobnVsbCE9PWgmJmwub3ZlcmxhcHMoaCkpe2lmKG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgZj10''@;'; put 'put ''aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKTt0aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShmKX1yZXR1cm4gbC5zZXRIaWdobGlnaHQoaCksdGhpc31yZXR1cm4gbC5zZXRIaWdobGlnaHQobC5mcm9tKSx0aGlzfWdldENvcm5lcnMo''@;'; put 'put ''KXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2UsZD1udWxsPT09bC5yb3d8fG51bGw9PT1hLnJvdyxoPW51bGw9PT1sLmNvbHx8bnVsbD09PWEuY29sLGY9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGQ/bnVsbDpNYXRoLm1pbihsLnJvdyxhLnJvdyksaD9udWxsOk1h''@;'; put 'put ''dGgubWluKGwuY29sLGEuY29sKSksXz10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWF4KGwucm93LGEucm93KSxoP251bGw6TWF0aC5tYXgobC5jb2wsYS5jb2wpKTtyZXR1cm5bZi5yb3csZi5jb2wsXy5yb3csXy5jb2xdfWdldFZpc3VhbENvcm5lcnMoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGE9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO3JldHVy''@;'; put 'put ''bltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCksaD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhhKTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''ZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpfX0se3JlZ2lzdGVyOmY3LGdldEl0ZW06bURlfT1wZCgiaGlnaGxpZ2h0L3R5cGVzIik7ZnVuY3Rpb24gcDcoYyxsKXtyZXR1cm4gbURlKGMpKHt0eXBlOmMsLi4ubH0pfWY3KFBrLGZ1bmN0aW9uIGlEZShjKXtsZXR7YWN0aXZlSGVhZGVy''@;'; put 'put ''Q2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IGg3KHtoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6UGt9KX0pLGY3KEZrLGZ1bmN0aW9uIHNEZShjKXtsZXR7bGF5ZXJMZXZlbDpsLGFyZWFDb3JuZXJWaXNpYmxlOmEsLi4uZH09YztyZXR1cm4gbmV3''@;'; put 'put ''IGg3KHtjbGFzc05hbWU6ImFyZWEiLG1hcmtJbnRlcnNlY3Rpb25zOiEwLGxheWVyTGV2ZWw6TWF0aC5taW4obCw3KSxib3JkZXI6e3dpZHRoOjEsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6YX0sLi4uZCxzZWxlY3Rpb25UeXBlOkZrfSl9KSxmNyhieSxmdW5jdGlvbiBsRGUoYyl7''@;'; put 'put ''bGV0e2NlbGxDb3JuZXJWaXNpYmxlOmwsLi4uYX09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImN1cnJlbnQiLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6Ynl9KX0pLGY3KEJCLGZ1bmN0aW9uIHVEZShjKXts''@;'; put 'put ''ZXR7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmEsLi4uZH09YztyZXR1cm4gbmV3IGg3KHsuLi5sLC4uLmQsc2VsZWN0aW9uVHlwZTpCQn0sYSl9KSxmNyhWQixmdW5jdGlvbiBoRGUoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyBoNyh7Y2xhc3NOYW1lOiJmaWxsIixib3JkZXI6e3dpZHRo''@;'; put 'put ''OjEsY29sb3I6IiNmZjAwMDAifSwuLi5sLHNlbGVjdGlvblR5cGU6VkJ9KX0pLGY3KHl5LGZ1bmN0aW9uIHBEZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwscm93Q2xhc3NOYW1lOmEsY29sdW1uQ2xhc3NOYW1lOmQsLi4uaH09YztyZXR1cm4gbmV3IGg3KHtjbGFzc05hbWU6ImhpZ2hsaWdo''@;'; put 'put ''dCIsaGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOmwsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOmEsaGlnaGxpZ2h0Q29sdW1uQ2xhc3NOYW1lOmQsLi4uaCxoaWdobGlnaHRPbmx5Q2xvc2VzdEhlYWRlcjohMCxzZWxlY3Rpb25UeXBlOnl5fSl9KTtjbGFzcyB2RGV7Y29uc3RydWN0b3IobCl7dGhp''@;'; put 'put ''cy5vcHRpb25zPWwsdGhpcy5sYXllckxldmVsPTAsdGhpcy5jZWxsPXA3KGJ5LGwpLHRoaXMuZmlsbD1wNyhWQixsKSx0aGlzLmFyZWFzPW5ldyBNYXAsdGhpcy5oZWFkZXJzPW5ldyBNYXAsdGhpcy5hY3RpdmVIZWFkZXJzPW5ldyBNYXAsdGhpcy5jdXN0b21TZWxlY3Rpb25zPVtdfWlzRW5h''@;'; put 'put ''YmxlZEZvcihsLGEpe2xldCBkPWw7bD09PWJ5JiYoZD0iY3VycmVudCIpO2xldCBoPXRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oYS5yb3csYS5jb2wpO3JldHVybiJzdHJpbmciPT10eXBlb2YgaCYmKGg9W2hdKSwhMT09PWh8fEFycmF5LmlzQXJyYXkoaCkmJiFoLmluY2x1''@;'; put 'put ''ZGVzKGQpfXVzZUxheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5sYXllckxldmVsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHRoaXN9Z2V0Q2VsbCgpe3JldHVybiB0aGlzLmNlbGx9Z2V0RmlsbCgpe3JldHVybiB0aGlzLmZpbGx9Y3Jl''@;'; put 'put ''YXRlT3JHZXRBcmVhKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuYXJlYXMuaGFzKGwpP2E9dGhpcy5hcmVhcy5nZXQobCk6KGE9cDcoRmsse2xheWVyTGV2ZWw6bCwuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmFyZWFzLnNldChsLGEpKSxhfWdldEFyZWFzKCl7''@;'; put 'put ''cmV0dXJuWy4uLnRoaXMuYXJlYXMudmFsdWVzKCldfWNyZWF0ZU9yR2V0SGVhZGVyKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuaGVhZGVycy5oYXMobCk/YT10aGlzLmhlYWRlcnMuZ2V0KGwpOihhPXA3KHl5LHsuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmhl''@;'; put 'put ''YWRlcnMuc2V0KGwsYSkpLGF9Z2V0SGVhZGVycygpe3JldHVyblsuLi50aGlzLmhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCl7Y29uc3QgbD10aGlzLmxheWVyTGV2ZWw7bGV0IGE7cmV0dXJuIHRoaXMuYWN0aXZlSGVhZGVycy5oYXMobCk/YT10aGlzLmFjdGl2''@;'; put 'put ''ZUhlYWRlcnMuZ2V0KGwpOihhPXA3KFBrLHsuLi50aGlzLm9wdGlvbnN9KSx0aGlzLmFjdGl2ZUhlYWRlcnMuc2V0KGwsYSkpLGF9Z2V0QWN0aXZlSGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4u''@;'; put 'put ''dGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rpb24obCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2gocDcoQkIsey4uLnRoaXMub3B0aW9ucywuLi5sfSkpfWNsZWFyKCl7dGhpcy5jZWxsLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksRG4odGhpcy5h''@;'; put 'put ''cmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksRG4odGhpcy5oZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxEbih0aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuW3RoaXMuY2VsbCx0aGlzLmZpbGws''@;'; put 'put ''Li4udGhpcy5hcmVhcy52YWx1ZXMoKSwuLi50aGlzLmhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuY3VzdG9tU2VsZWN0aW9uc11bU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBfRGU9dkRlO2NsYXNzIGJEZXtjb25zdHJ1Y3RvcihsKXt0''@;'; put 'put ''aGlzLnJhbmdlcz1bXSx0aGlzLmNyZWF0ZUNlbGxSYW5nZT1sfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuc2l6ZSgpfXNldChsKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9YWRkKGwpe3JldHVybiB0aGlzLnJh''@;'; put 'put ''bmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfXBvcCgpe3JldHVybiB0aGlzLnJhbmdlcy5wb3AoKSx0aGlzfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCgwKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KC0xKX1pbmNsdWRlcyhsKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5yYW5nZXMuc29tZShhPT5hLmluY2x1ZGVzKGwpKX1jbGVhcigpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGg9MCx0aGlzfXNpemUoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RofXBlZWtCeUluZGV4KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7Y29uc3QgYT10aGlzLnNpemUoKStsLTE7bGV0IGQ7cmV0dXJuIGE+PTAmJihkPXRoaXMucmFuZ2VzW2FdKSxkfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3QgeURlPWJEZTtj''@;'; put 'put ''bGFzcyBMbmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnJhbmdlPWwsdGhpcy5vcHRpb25zPWF9dHJhbnNmb3JtU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5vcHRpb25zLmNyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobCxhKSxmPXRoaXMucmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCx7cm93Ol8sY29sOlR9PXRoaXMub3B0aW9ucy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoZik7bGV0IFc9ZixpZT0wLGdlPTA7aWYodGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIs''@;'; put 'put ''aCksbnVsbCE9PV8mJm51bGwhPT1UKXtsZXQgd2U9dGhpcy5vcHRpb25zLmNvdW50Um93cygpLEVlPXRoaXMub3B0aW9ucy5jb3VudENvbHMoKTtjb25zdCBaZT10aGlzLm9wdGlvbnMuZml4ZWRSb3dzQm90dG9tKCksb3Q9dGhpcy5vcHRpb25zLm1pblNwYXJlUm93cygpLGV0PXRoaXMub3B0''@;'; put 'put ''aW9ucy5taW5TcGFyZUNvbHMoKSx5dD10aGlzLm9wdGlvbnMuYXV0b1dyYXBSb3coKSxrdD10aGlzLm9wdGlvbnMuYXV0b1dyYXBDb2woKTtfK2w+d2UtMT9kJiZvdD4wJiYhKFplJiZfPj13ZS1aZS0xKT8odGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIix3ZSksd2U9dGhp''@;'; put 'put ''cy5vcHRpb25zLmNvdW50Um93cygpKTprdCYmKGgucm93PTEtd2UsaC5jb2w9VCtoLmNvbD09PUVlLTE/MS1FZToxKTprdCYmXytoLnJvdzwwJiZUK2guY29sPj0wJiYoaC5yb3c9d2UtMSxoLmNvbD1UK2guY29sPT09MD9FZS0xOi0xKSxUK2guY29sPkVlLTE/ZCYmZXQ+MD8odGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIixFZSksRWU9dGhpcy5vcHRpb25zLmNvdW50Q29scygpKTp5dCYmKGgucm93PV8raC5yb3c9PT13ZS0xPzEtd2U6MSxoLmNvbD0xLUVlKTp5dCYmVCtoLmNvbDwwJiZfK2gucm93Pj0wJiYoaC5yb3c9XytoLnJvdz09PTA/d2UtMTotMSxoLmNv''@;'; put 'put ''bD1FZS0xKTtjb25zdCBTdD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhfK2gucm93LFQraC5jb2wpO2llPTAsZ2U9MCxTdC5yb3c8MD8oaWU9LTEsU3Qucm93PTApOlN0LnJvdz4wJiZTdC5yb3c+PXdlJiYoaWU9MSxTdC5yb3c9d2UtMSksU3QuY29sPDA/KGdlPS0xLFN0LmNvbD0w''@;'; put 'put ''KTpTdC5jb2w+MCYmU3QuY29sPj1FZSYmKGdlPTEsU3QuY29sPUVlLTEpLFc9dGhpcy5vcHRpb25zLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhTdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsVyxpZSxnZSksV310cmFuc2Zvcm1FbmQobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD10aGlzLnJhbmdlLmN1cnJlbnQoKTtsZXQgZj1oLnRvLF89MCxUPTA7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGQpO2NvbnN0e3JvdzpXLGNvbDppZX09dGhpcy5vcHRpb25zLnZpc3Vh''@;'; put 'put ''bFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCk7aWYobnVsbCE9PVcmJm51bGwhPT1pZSl7Y29uc3QgZ2U9dGhpcy5vcHRpb25zLmNvdW50Um93cygpLHdlPXRoaXMub3B0aW9ucy5jb3VudENvbHMoKSx7cm93OkVlLGNvbDpaZX09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJs''@;'; put 'put ''ZUNvb3JkcyhoLnRvKSxvdD10aGlzLm9wdGlvbnMuY3JlYXRlQ2VsbENvb3JkcyhFZStkLnJvdyxaZStkLmNvbCk7Xz0wLFQ9MCxvdC5yb3c8MD8oXz0tMSxvdC5yb3c9MCk6b3Qucm93PjAmJm90LnJvdz49Z2UmJihfPTEsb3Qucm93PWdlLTEpLG90LmNvbDwwPyhUPS0xLG90LmNvbD0wKTpv''@;'; put 'put ''dC5jb2w+MCYmb3QuY29sPj13ZSYmKFQ9MSxvdC5jb2w9d2UtMSksZj10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKG90KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsZixfLFQpLGZ9fVRhKExuZSxPMCk7Y29uc3Qgd0RlPUxuZSxD''@;'; put 'put ''RGU9WzMsMl0sU0RlPVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0sWyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSx6Qj1TeW1ib2woInJvb3QiKSxPbmU9U3ltYm9sKCJjaGlsZCIpO2Z1bmN0aW9uIGc3KGMpe2xldCBsPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp6QjtpZihsIT09ekImJmwhPT1PbmUpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7Y29u''@;'; put 'put ''c3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PXpCO2xldCBoPTA7aWYoYSl7Y29uc3QgZj1jWzBdOzA9PT1jLmxlbmd0aD9oPTE6ZCYmZiBpbnN0YW5jZW9mIFpOP2g9MzpkJiZBcnJheS5pc0FycmF5KGYpP2g9ZzcoZixPbmUpOmMubGVuZ3RoPj0yJiZjLmxlbmd0aDw9NCYmIWMuc29tZSgo''@;'; put 'put ''VCxXKT0+IVNEZVtXXS5pbmNsdWRlcyh0eXBlb2YgVCkpJiYoaD0yKX1yZXR1cm4gaH1mdW5jdGlvbiB3eShjKXtsZXR7a2VlcERpcmVjdGlvbjpsPSExLHByb3BUb0NvbDphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIUNE''@;'; put 'put ''ZS5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1hIHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihkKXtjb25zdCBoPTM9PT1jO2xldCBmPWg/ZC5mcm9tLnJvdzpkWzBdLF89aD9kLmZyb20uY29sOmRbMV0s''@;'; put 'put ''VD1oP2QudG8ucm93OmRbMl0sVz1oP2QudG8uY29sOmRbM107aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJigic3RyaW5nIj09dHlwZW9mIF8mJihfPWEoXykpLCJzdHJpbmciPT10eXBlb2YgVyYmKFc9YShXKSkpLExhKFQpJiYoVD1mKSxMYShXKSYmKFc9XyksIWwpe2NvbnN0IGllPWYsZ2U9''@;'; put 'put ''Xyx3ZT1ULEVlPVc7Zj1NYXRoLm1pbihpZSx3ZSksXz1NYXRoLm1pbihnZSxFZSksVD1NYXRoLm1heChpZSx3ZSksVz1NYXRoLm1heChnZSxFZSl9cmV0dXJuW2YsXyxULFddfX1mdW5jdGlvbiBHcChjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+PTAmJmM8KGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzApfWNsYXNzIFBuZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkPXRoaXM7dGhpcy5zZXR0aW5ncz1sLHRoaXMudGFibGVQcm9wcz1hLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLnNlbGVjdGVkQnlDb3JuZXI9ITEsdGhp''@;'; put 'put ''cy5zZWxlY3RlZEJ5Um93SGVhZGVyPW5ldyBTZXQsdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyPW5ldyBTZXQsdGhpcy5zZWxlY3RlZFJhbmdlPW5ldyB5RGUoKGgsZixfKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsXykpLHRoaXMuaGlnaGxpZ2h0PW5ldyBfRGUo''@;'; put 'put ''e2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xhc3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFtZSxkaXNh''@;'; put 'put ''YmxlZENlbGxTZWxlY3Rpb246KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBkLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9w''@;'; put 'put ''cy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZixfKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsXykscm93SW5kZXhN''@;'; put 'put ''YXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcigpLGNvbHVtbkluZGV4TWFwcGVyOigpPT50aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIoKX0pLHRoaXMudHJhbnNmb3JtYXRpb249bmV3IHdEZSh0aGlzLnNlbGVjdGVkUmFuZ2Use2NvdW50Um93czooKT0+''@;'; put 'put ''dGhpcy50YWJsZVByb3BzLmNvdW50Um93c1RyYW5zbGF0ZWQoKSxjb3VudENvbHM6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudENvbHNUcmFuc2xhdGVkKCksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVu''@;'; put 'put ''ZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PmwuZml4ZWRSb3dzQm90''@;'; put 'put ''dG9tLG1pblNwYXJlUm93czooKT0+bC5taW5TcGFyZVJvd3MsbWluU3BhcmVDb2xzOigpPT5sLm1pblNwYXJlQ29scyxhdXRvV3JhcFJvdzooKT0+bC5hdXRvV3JhcFJvdyxhdXRvV3JhcENvbDooKT0+bC5hdXRvV3JhcENvbH0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJi''@;'; put 'put ''ZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uZil9KSx0''@;'; put 'put ''aGlzLnRyYW5zZm9ybWF0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRl''@;'; put 'put ''ck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNb''@;'; put 'put ''X107cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheSho''@;'; put 'put ''KSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSx0aGlzLnRyYW5zZm9ybWF0aW9uLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoO18rKylmW19dPWFyZ3VtZW50c1tfXTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLF89MDtfPGg7XysrKWZbX109YXJndW1lbnRzW19dO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVj''@;'; put 'put ''dGVkUmFuZ2V9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0hMX1pc0luUHJvZ3Jlc3MoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pblByb2dyZXNzfXNldFJhbmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im11bHRpcGxlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSxmPUxhKGEpP3RoaXMudGFibGVQcm9w''@;'; put 'put ''cy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk6YSxfPWwucm93PDAsVD1sLmNvbDwwLFc9XyYmVCxpZT1sLmNsb25lKCk7dGhpcy5zZWxlY3RlZEJ5Q29ybmVyPVcsdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IisoZD8iT25seSI6IiIpLGllKSwo''@;'; put 'put ''IWh8fGgmJiFmJiZMYShhKSkmJnRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoaWUpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVh''@;'; put 'put ''cigpKSwhVyYmVCYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksIVcmJl8mJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHko''@;'; put 'put ''bCxhKXt0aGlzLnNldFJhbmdlU3RhcnQobCxhLCEwKX1zZXRSYW5nZUVuZChsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPWwuY2xvbmUoKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixhKSx0aGlzLmJlZ2luKCk7Y29uc3Qg''@;'; put 'put ''ZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpOyJzaW5nbGUiIT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlJiZkLnNldFRvKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEucm93LGEuY29sKSksdGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLmNsZWFyKCksdGhpcy5o''@;'; put 'put ''aWdobGlnaHQuaXNFbmFibGVkRm9yKGJ5LGQuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Q2VsbCgpLmFkZCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgoZCk7Y29uc3QgaD10aGlzLmdldExheWVyTGV2ZWwoKTtoPHRoaXMu''@;'; put 'put ''aGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihEbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLFc9PntXLmNsZWFyKCl9KSxEbih0aGlzLmhpZ2hsaWdodC5nZXRIZWFkZXJzKCksVz0+e1cuY2xlYXIoKX0pLERuKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUhlYWRlcnMoKSxXPT57Vy5jbGVhcigp''@;'; put 'put ''fSkpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFyZWEoKSxfPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0SGVhZGVyKCksVD10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFjdGl2ZUhlYWRlcigpO2lmKGYuY2xl''@;'; put 'put ''YXIoKSxfLmNsZWFyKCksVC5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihGayxkLmhpZ2hsaWdodCkmJih0aGlzLmlzTXVsdGlwbGUoKXx8aD49MSkmJihmLmFkZChkLmZyb20pLmFkZChkLnRvKS5jb21taXQoKSwxPT09aCkpe2NvbnN0IFc9dGhpcy5zZWxlY3RlZFJhbmdl''@;'; put 'put ''LnByZXZpb3VzKCk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoLTEpLmNyZWF0ZU9yR2V0QXJlYSgpLmFkZChXLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKFcpLHRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCl9aWYodGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKHl5LGQu''@;'; put 'put ''aGlnaGxpZ2h0KSl7Y29uc3QgVz0wPT09dGhpcy50YWJsZVByb3BzLmNvdW50Um93c1RyYW5zbGF0ZWQoKSxpZT0wPT09dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKTtsZXQgZ2U9ZDsoV3x8aWUpJiYoZ2U9ZC5jbG9uZSgpKSxXJiYoZ2UuZnJvbS5yb3c9LTEpLGllJiYo''@;'; put 'put ''Z2UuZnJvbS5jb2w9LTEpLCJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyh0aGlzLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiZnZS5mcm9tLm5vcm1hbGl6ZSgpLF8uYWRkKGdlLmZyb20pLmNvbW1pdCgpKTpfLmFkZChnZS5mcm9tKS5hZGQoZ2UudG8pLmNvbW1pdCgp''@;'; put 'put ''LHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk9PT1kLmdldFdpZHRoKCkmJlQuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQuZnJvbS5yb3csLTEpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''ZC50by5yb3csLTEpKS5jb21taXQoKSx0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKSYmdGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpPT09ZC5nZXRIZWlnaHQoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsZC5mcm9tLmNvbCkpLmFkZCh0aGlzLnRh''@;'; put 'put ''YmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLnRvLmNvbCkpLmNvbW1pdCgpfXRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRSYW5nZUVuZCIsbCl9aXNNdWx0aXBsZSgpe2NvbnN0IGw9X2coIXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaXNTaW5nbGUoKSk7cmV0dXJuIHRo''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixsKSxsLnZhbHVlfXRyYW5zZm9ybVN0YXJ0KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0KHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtU3RhcnQobCxhLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzJdJiZhcmd1bWVudHNbMl0pKX10cmFuc2Zvcm1FbmQobCxhKXt0aGlzLnNldFJhbmdlRW5kKHRoaXMudHJhbnNmb3JtYXRpb24udHJhbnNmb3JtRW5kKGwsYSkpfWdldExheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xfWlzU2VsZWN0ZWQoKXty''@;'; put 'put ''ZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5''@;'; put 'put ''Q29ybmVyKGwpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQobCl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxl''@;'; put 'put ''Y3RlZEJ5Um93SGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTty''@;'; put 'put ''ZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKGwpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxl''@;'; put 'put ''dmVsKCk7cmV0dXJuLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5zaXplPjA6dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyhsKX1pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0''@;'; put 'put ''ZWRCeUNvbHVtbkhlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCl9aXNTZWxlY3RlZEJ5Q29ybmVyKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRCeUNvcm5lcn1pbkluU2VsZWN0aW9uKGwpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2UuaW5jbHVkZXMobCl9aXNDZWxsQ29ybmVy''@;'; put 'put ''VmlzaWJsZSgpe3JldHVybiB0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmIXRoaXMuaXNNdWx0aXBsZSgpfWlzQXJlYUNvcm5lclZpc2libGUobCl7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPT09dGhpcy5nZXRMYXll''@;'; put 'put ''ckxldmVsKCkpJiZ0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5pc011bHRpcGxlKCl9Y2xlYXIoKXt0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpfWRlc2VsZWN0KCl7dGhpcy5p''@;'; put 'put ''c1NlbGVjdGVkKCkmJih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEZXNlbGVjdCIpKX1zZWxlY3RBbGwoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZighKGx8fGF8fDAhPT1kJiYwIT09aCkpcmV0dXJuO2NvbnN0IGY9dGhpcy50YWJs''@;'; put 'put ''ZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYT8tMTowLGw/LTE6MCksXz10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLTEsaC0xKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShmKSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJM''@;'; put 'put ''ZXZlbCgpKSx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKF8pLHRoaXMuZmluaXNoKCl9c2VsZWN0Q2VsbHMobCl7Y29uc3QgYT1nNyhsKTtpZigxPT09YSlyZXR1cm4hMTtpZigwPT09YSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoQWFgVW5zdXBwb3J0ZWQgZm9ybWF0IG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2VzIHdhcyBwYXNzZWQuIFRvIHNlbGVjdCBjZWxscyBwYXNzXHgyMAogICAgICAgIHRoZSBjb29yZGluYXRlcyBhcyBhbiBhcnJheSBvZiBhcnJheXMgKFtbcm93U3RhcnQsIGNvbHVtblN0YXJ0L2NvbHVtblBy''@;'; put 'put ''b3BTdGFydCwgcm93RW5kLFx4MjAKICAgICAgICBjb2x1bW5FbmQvY29sdW1uUHJvcEVuZF1dKSBvciBhcyBhbiBhcnJheSBvZiBDZWxsUmFuZ2Ugb2JqZWN0cy5gKTtjb25zdCBkPXd5KGEse3Byb3BUb0NvbDpUPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKFQpLGtlZXBEaXJlY3Rpb246''@;'; put 'put ''ITB9KSxoPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxmPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxfPSFsLnNvbWUoVD0+e2NvbnN0W1csaWUsZ2Usd2VdPWQoVCk7cmV0dXJuIShHcChXLGgpJiZHcChpZSxmKSYmR3AoZ2UsaCkmJkdwKHdlLGYpKX0pO3JldHVybiBfJiYodGhp''@;'; put 'put ''cy5jbGVhcigpLERuKGwsVD0+e2NvbnN0W1csaWUsZ2Usd2VdPWQoVCk7dGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhXLGllKSwhMSksdGhpcy5zZXRSYW5nZUVuZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhnZSx3ZSkp''@;'; put 'put ''LHRoaXMuZmluaXNoKCl9KSksX31zZWxlY3RDb2x1bW5zKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi0xO2NvbnN0''@;'; put 'put ''IGg9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2wobCk6bCxmPSJzdHJpbmciPT10eXBlb2YgYT90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGEpOmEsXz10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksVD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCks''@;'; put 'put ''Vz1HcChoLF8pJiZHcChmLF8pO3JldHVybiBXJiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhkLGgpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFQtMSxmKSksdGhpcy5maW5pc2goKSks''@;'; put 'put ''V31zZWxlY3RSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi0xO2NvbnN0IGg9dGhpcy50YWJsZVByb3BzLmNv''@;'; put 'put ''dW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLF89R3AobCxoKSYmR3AoYSxoKTtyZXR1cm4gXyYmKHRoaXMuc2V0UmFuZ2VTdGFydE9ubHkodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxkKSksdGhpcy5zZXRSYW5nZUVuZCh0aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhhLGYtMSkpLHRoaXMuZmluaXNoKCkpLF99cmVmcmVzaCgpe2lmKHRoaXMuaGlnaGxpZ2h0LmdldEN1c3RvbVNlbGVjdGlvbnMoKS5mb3JFYWNoKGg9PntoLmNvbW1pdCgpfSksIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBhPXRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmdldENlbGwoKSxkPXRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2EuY29tbWl0KCkuc3luY1dpdGgodGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29u''@;'; put 'put ''c3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFyZWEoKSxfPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0SGVhZGVyKCksVD10aGlzLmhpZ2hsaWdodC5jcmVhdGVPckdldEFjdGl2ZUhlYWRlcigpO2YuY29tbWl0KCksXy5jb21taXQoKSxULmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LnVzZUxheWVyTGV2ZWwoZCl9fVRhKFBuZSxPMCk7Y29uc3QgRURlPVBuZSx7cmVnaXN0ZXI6a0RlLGdldEl0ZW06QURlLGhhc0l0ZW06Rm5lLGdldE5hbWVzOlREZX09cGQoImNlbGxUeXBlcyIpO2Z1bmN0aW9uIFVCKGMpe2lmKCFGbmUoYykpdGhyb3cgRXJyb3IoYFlvdSBkZWNsYXJlZCBj''@;'; put 'put ''ZWxsIHR5cGUgIiR7Y30iIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3duIG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4gb2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVnaXN0ZXJlZCBieVxuICAgICAg''@;'; put 'put ''ICAgICAgICAgICAiSGFuZHNvbnRhYmxlLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlIiBtZXRob2RgKTtyZXR1cm4gQURlKGMpfWZ1bmN0aW9uIGIyKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5DRUxMX1RZUEUpO2NvbnN0e2VkaXRvcjphLHJlbmRlcmVyOmQsdmFsaWRh''@;'; put 'put ''dG9yOmh9PWw7YSYmUjAoYyxhKSxkJiZwaChjLGQpLGgmJmE3KGMsaCksa0RlKGMsbCl9ZnVuY3Rpb24gVmsoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Yztjb25zdCBkPSJzdHJpbmciPT10eXBlb2YgbC50eXBlP1VC''@;'; put 'put ''KGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmZHMobCwoZixfKT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxldGUoXyl9KSwhdXMoZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVBy''@;'; put 'put ''b3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9e307ZHMoZCwoZixfKT0+e3ZhciBUOyhmdW5jdGlvbiBERGUoYyxsKXt2YXIgYTtyZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1l''@;'; put 'put ''dGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IWJsKGwsYykpfSkoXyxhKSYmKGhbX109ZixudWxsPT09KFQ9Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09VHx8VC5hZGQoXykpfSksS2woYyxoKX1mdW5jdGlvbiBCayhjKXtyZXR1cm4g''@;'; put 'put ''TnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1mdW5jdGlvbiBqayhjLGwpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24gemsoYyl7cmV0dXJuIG51bGw9PWN9Y29uc3QgSG5lPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRh''@;'; put 'put ''UHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEwLGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxv''@;'; put 'put ''d1JlbW92ZVJvdzohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dzV2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1l''@;'; put 'put ''OnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNvbHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENs''@;'; put 'put ''YXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1''@;'; put 'put ''cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAsZGF0YVNjaGVtYTp2b2lkIDAsZGF0ZUZvcm1hdDoiREQvTU0vWVlZWSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEs''@;'; put 'put ''ZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxlbnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZp''@;'; put 'put ''bHRlcnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDowLGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWlnaHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJv''@;'; put 'put ''d3M6dm9pZCAwLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGlzRW1wdHlDb2woYyl7bGV0IGwsYSxkO2ZvcihsPTAsYT10aGlzLmNvdW50Um93cygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwobCxjKSwhMT09PXBjKGQpKXJldHVybiExO3JldHVybiEwfSxpc0Vt''@;'; put 'put ''cHR5Um93KGMpe2xldCBsLGEsZCxoO2ZvcihsPTAsYT10aGlzLmNvdW50Q29scygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwoYyxsKSwhMT09PXBjKGQpKXJldHVybiJvYmplY3QiPT10eXBlb2YgZCYmKGg9dGhpcy5nZXRDZWxsTWV0YShjLGwpLGxrKHRoaXMuZ2V0U2NoZW1h''@;'; put 'put ''KClbaC5wcm9wXSxkKSk7cmV0dXJuITB9LGxhYmVsOnZvaWQgMCxsYW5ndWFnZToiZW4tVVMiLGxheW91dERpcmVjdGlvbjoiaW5oZXJpdCIsbGljZW5zZUtleTp2b2lkIDAsbG9jYWxlOiJlbi1VUyIsbWFudWFsQ29sdW1uRnJlZXplOnZvaWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZvaWQgMCxt''@;'; put 'put ''YW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xzOjAsbWluUm93czowLG1pblNwYXJlQ29sczowLG1pblNwYXJlUm93czowLG11bHRpQ29s''@;'; put 'put ''dW1uU29ydGluZzp2b2lkIDAsbmVzdGVkSGVhZGVyczp2b2lkIDAsbmVzdGVkUm93czp2b2lkIDAsbm9Xb3JkV3JhcENsYXNzTmFtZToiaHROb1dyYXAiLG51bWVyaWNGb3JtYXQ6dm9pZCAwLG9ic2VydmVET01WaXNpYmlsaXR5OiEwLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMCxwZXJzaXN0''@;'; put 'put ''ZW50U3RhdGU6dm9pZCAwLHBsYWNlaG9sZGVyOnZvaWQgMCxwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzohMSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJodERpbW1lZCIscmVuZGVyQWxs''@;'; put 'put ''Um93czp2b2lkIDAscmVuZGVyZXI6dm9pZCAwLHJvd0hlYWRlcnM6dm9pZCAwLHJvd0hlYWRlcldpZHRoOnZvaWQgMCxyb3dIZWlnaHRzOnZvaWQgMCxzZWFyY2g6ITEsc2VsZWN0aW9uTW9kZToibXVsdGlwbGUiLHNlbGVjdE9wdGlvbnM6dm9pZCAwLHNraXBDb2x1bW5PblBhc3RlOiExLHNr''@;'; put 'put ''aXBSb3dPblBhc3RlOiExLHNvcnRCeVJlbGV2YW5jZTohMCxzb3VyY2U6dm9pZCAwLHN0YXJ0Q29sczo1LHN0YXJ0Um93czo1LHN0cmV0Y2hIOiJub25lIixzdHJpY3Q6dm9pZCAwLHRhYmxlQ2xhc3NOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmlt''@;'; put 'put ''RHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOnZvaWQgMCx2YWxpZGF0b3I6dm9pZCAwLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydFJvd1JlbmRl''@;'; put 'put ''cmluZ09mZnNldDoiYXV0byIsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAwLHdvcmRXcmFwOiEwfSk7Y2xhc3MgUkRle2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YUN0b3I9Y2xhc3N7fSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUsS2wodGhpcy5tZXRhLEhuZSgpKSx0aGlz''@;'; put 'put ''Lm1ldGEuaW5zdGFuY2U9bH1nZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRhQ3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3ZhciBhO0tsKHRoaXMubWV0YSxsKSxWayh0aGlzLm1ldGEsey4uLmwsdHlwZTpudWxsIT09KGE9bC50eXBlKSYm''@;'; put 'put ''dm9pZCAwIT09YT9hOnRoaXMubWV0YS50eXBlfSxsKX19Y2xhc3MgT0Rle2NvbnN0cnVjdG9yKGwpe2NvbnN0IGE9bC5nZXRNZXRhQ29uc3RydWN0b3IoKTt0aGlzLm1ldGE9bmV3IGF9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXtLbCh0aGlzLm1ldGEsbCksVmso''@;'; put 'put ''dGhpcy5tZXRhLGwsbCl9fWNsYXNzIFpCe2NvbnN0cnVjdG9yKGwpe3RoaXMudmFsdWVGYWN0b3J5PWwsdGhpcy5kYXRhPVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcz1uZXcgU2V0fW9idGFpbihsKXtqaygoKT0+QmsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29u''@;'; put 'put ''c3QgYT10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShsKTtsZXQgZDtpZihhPj0wKWQ9dGhpcy5kYXRhW2FdLHZvaWQgMD09PWQmJihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuZGF0YVthXT1kKTtlbHNlIGlmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5ob2xlcy5zaXplPjAp''@;'; put 'put ''e2NvbnN0IGg9dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7dGhpcy5ob2xlcy5kZWxldGUoaCksdGhpcy5kYXRhW2hdPWQsdGhpcy5pbmRleFtsXT1ofWVsc2UgdGhpcy5kYXRhLnB1c2goZCksdGhpcy5pbmRleFtsXT10aGlzLmRhdGEubGVuZ3RoLTE7cmV0dXJuIGR9aW5zZXJ0''@;'; put 'put ''KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO2prKCgpPT5CayhsKXx8emsobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD1bXSxoPXRoaXMu''@;'; put 'put ''ZGF0YS5sZW5ndGg7Zm9yKGxldCBfPTA7XzxhO18rKylkLnB1c2goaCtfKSx0aGlzLmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IGY9emsobCk/dGhpcy5pbmRleC5sZW5ndGg6bDt0aGlzLmluZGV4PVsuLi50aGlzLmluZGV4LnNsaWNlKDAsZiksLi4uZCwuLi50aGlzLmluZGV4LnNsaWNlKGYp''@;'; put 'put ''XX1yZW1vdmUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7amsoKCk9PkJrKGwpfHx6ayhsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPXRo''@;'; put 'put ''aXMuaW5kZXguc3BsaWNlKHprKGwpP3RoaXMuaW5kZXgubGVuZ3RoLWE6bCxhKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdOyJudW1iZXIiPT10eXBlb2YgZiYmdGhpcy5ob2xlcy5hZGQoZil9fXNpemUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aC10aGlzLmhv''@;'; put 'put ''bGVzLnNpemV9dmFsdWVzKCl7cmV0dXJuIF8xKHRoaXMuZGF0YSwobCxhKT0+IXRoaXMuaG9sZXMuaGFzKGEpKVtTeW1ib2wuaXRlcmF0b3JdKCl9ZW50cmllcygpe2NvbnN0IGw9W107Zm9yKGxldCBkPTA7ZDx0aGlzLmRhdGEubGVuZ3RoO2QrKyl7Y29uc3QgaD10aGlzLl9nZXRLZXlCeVN0''@;'; put 'put ''b3JhZ2VJbmRleChkKTstMSE9PWgmJmwucHVzaChbaCx0aGlzLmRhdGFbZF1dKX1sZXQgYT0wO3JldHVybntuZXh0OigpPT57aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdO3JldHVybiBhKz0xLHt2YWx1ZTpkLGRvbmU6ITF9fXJldHVybntkb25lOiEwfX19fWNsZWFyKCl7dGhpcy5kYXRh''@;'; put 'put ''PVtdLHRoaXMuaW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShsKXtyZXR1cm4gdGhpcy5pbmRleC5sZW5ndGg+bD90aGlzLmluZGV4W2xdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRleChsKXtyZXR1cm4gdGhpcy5pbmRleC5pbmRleE9mKGwpfVtTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1jb25zdCBQRGU9WyJkYXRhIiwid2lkdGgiXTtjbGFzcyBGRGV7Y29uc3RydWN0b3IobCl7dGhpcy5nbG9iYWxNZXRhPWwsdGhpcy5tZXRhcz1uZXcgWkIoKCk9PnRoaXMuX2NyZWF0ZU1ldGEoKSl9dXBkYXRlTWV0YShsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5nZXRNZXRhKGwpO0tsKGQsYSksVmsoZCxhKX1jcmVhdGVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfXJlbW92ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9Z2V0TWV0YShsKXtyZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCl9Z2V0''@;'; put 'put ''TWV0YUNvbnN0cnVjdG9yKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIElEZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgpe316ZihhLGMpO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWEucHJvdG90eXBlW2xbZF1dPXZvaWQgMDtyZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLFBEZSkucHJvdG90eXBlfX1j''@;'; put 'put ''bGFzcyBIRGV7Y29uc3RydWN0b3IobCl7dGhpcy5jb2x1bW5NZXRhPWwsdGhpcy5tZXRhcz1uZXcgWkIoKCk9PnRoaXMuX2NyZWF0ZVJvdygpKX11cGRhdGVNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0TWV0YShsLGEpO0tsKGgsZCksVmsoaCxkKX1jcmVhdGVSb3cobCxhKXt0aGlzLm1l''@;'; put 'put ''dGFzLmluc2VydChsLGEpfWNyZWF0ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLmluc2VydChsLGEpfXJlbW92ZVJvdyhsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7Zm9yKGxl''@;'; put 'put ''dCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkucmVtb3ZlKGwsYSl9Z2V0TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7cmV0dXJuIHZvaWQgMD09PWQ/aDpoW2RdfXNldE1ldGEobCxhLGQsaCl7dmFyIGY7''@;'; put 'put ''Y29uc3QgXz10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7bnVsbD09PShmPV8uX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWZ8fGYuZGVsZXRlKGQpLF9bZF09aH1yZW1vdmVNZXRhKGwsYSxkKXtkZWxldGUgdGhpcy5tZXRhcy5vYnRhaW4obCkub2J0''@;'; put 'put ''YWluKGEpW2RdfWdldE1ldGFzKCl7Y29uc3QgbD1bXSxhPUFycmF5LmZyb20odGhpcy5tZXRhcy52YWx1ZXMoKSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspbC5wdXNoKC4uLmFbZF0udmFsdWVzKCkpO3JldHVybiBsfWdldE1ldGFzQXRSb3cobCl7amsoKCk9PkJrKGwpLCJFeHBlY3Rp''@;'; put 'put ''bmcgYW4gdW5zaWduZWQgbnVtYmVyLiIpO2NvbnN0IGE9bmV3IE1hcCh0aGlzLm1ldGFzKTtyZXR1cm4gYS5oYXMobCk/QXJyYXkuZnJvbShhLmdldChsKS52YWx1ZXMoKSk6W119Y2xlYXJDYWNoZSgpe3RoaXMubWV0YXMuY2xlYXIoKX1fY3JlYXRlUm93KCl7cmV0dXJuIG5ldyBaQihsPT50''@;'; put 'put ''aGlzLl9jcmVhdGVNZXRhKGwpKX1fY3JlYXRlTWV0YShsKXtyZXR1cm4gbmV3KHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhQ29uc3RydWN0b3IobCkpfX1jbGFzcyBObmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l''@;'; put 'put ''bnRzWzFdOnt9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO3RoaXMuaG90PWwsdGhpcy5nbG9iYWxNZXRhPW5ldyBSRGUobCksdGhpcy50YWJsZU1ldGE9bmV3IE9EZSh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY29sdW1uTWV0YT1u''@;'; put 'put ''ZXcgRkRlKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jZWxsTWV0YT1uZXcgSERlKHRoaXMuY29sdW1uTWV0YSksZC5mb3JFYWNoKGg9Pm5ldyBoKHRoaXMpKSx0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShhKX1nZXRHbG9iYWxNZXRhKCl7cmV0dXJuIHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRh''@;'; put 'put ''KCl9dXBkYXRlR2xvYmFsTWV0YShsKXt0aGlzLmdsb2JhbE1ldGEudXBkYXRlTWV0YShsKX1nZXRUYWJsZU1ldGEoKXtyZXR1cm4gdGhpcy50YWJsZU1ldGEuZ2V0TWV0YSgpfXVwZGF0ZVRhYmxlTWV0YShsKXt0aGlzLnRhYmxlTWV0YS51cGRhdGVNZXRhKGwpfWdldENvbHVtbk1ldGEobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY29sdW1uTWV0YS5nZXRNZXRhKGwpfXVwZGF0ZUNvbHVtbk1ldGEobCxhKXt0aGlzLmNvbHVtbk1ldGEudXBkYXRlTWV0YShsLGEpfWdldENlbGxNZXRhKGwsYSxkKXtsZXR7dmlzdWFsUm93OmgsdmlzdWFsQ29sdW1uOmZ9PWQ7Y29uc3QgXz10aGlzLmNlbGxNZXRhLmdl''@;'; put 'put ''dE1ldGEobCxhKTtyZXR1cm4gXy52aXN1YWxSb3c9aCxfLnZpc3VhbENvbD1mLF8ucm93PWwsXy5jb2w9YSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLF8pLF99Z2V0Q2VsbE1ldGFLZXlWYWx1ZShsLGEsZCl7aWYoInN0cmluZyIhPXR5cGVvZiBkKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSxkKX1zZXRDZWxsTWV0YShsLGEsZCxoKXt0aGlzLmNlbGxNZXRhLnNldE1ldGEobCxhLGQsaCl9dXBkYXRlQ2VsbE1ldGEobCxhLGQp''@;'; put 'put ''e3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShsLGEsZCl9cmVtb3ZlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEucmVtb3ZlTWV0YShsLGEsZCl9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhsKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93KGwpfWNyZWF0ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1yZW1vdmVSb3cobCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVSb3cobCxh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9Y3JlYXRlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGws''@;'; put 'put ''YSksdGhpcy5jb2x1bW5NZXRhLmNyZWF0ZUNvbHVtbihsLGEpfXJlbW92ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5y''@;'; put 'put ''ZW1vdmVDb2x1bW4obCxhKX1jbGVhckNlbGxzQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX1jbGVhckNhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRhLmNsZWFyQ2FjaGUoKX19VGEoTm5lLE8wKTtjbGFzcyBORGV7Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7dGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMubWV0YVN5bmNNZW1vPW5ldyBNYXAsbC5hZGRMb2NhbEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGE9PnRoaXMuZXh0ZW5kQ2VsbE1ldGEoYSkpLHNvLmdldFNpbmdsZXRvbigpLmFkZCgiYmVmb3JlUmVuZGVyIixhPT57YSYmdGhpcy5tZXRhU3lu''@;'; put 'put ''Y01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3QpfWV4dGVuZENlbGxNZXRhKGwpe3ZhciBhO2NvbnN0e3JvdzpkLGNvbDpofT1sO2lmKG51bGwhPT0oYT10aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkpJiZ2b2lkIDAhPT1hJiZhLmhhcyhoKSlyZXR1cm47Y29uc3R7dmlzdWFsUm93''@;'; put 'put ''OmYsdmlzdWFsQ29sOl99PWwsVD10aGlzLm1ldGFNYW5hZ2VyLmhvdCxXPVQuY29sVG9Qcm9wKF8pO2wucHJvcD1XLFQucnVuSG9va3MoImJlZm9yZUdldENlbGxNZXRhIixmLF8sbCk7Y29uc3QgaWU9YmwobCwidHlwZSIpP2wudHlwZTpudWxsO2xldCBnZT1SYShsLmNlbGxzKT9sLmNlbGxz''@;'; put 'put ''KGQsaCxXKTpudWxsO2lmKGllKWlmKGdlKXt2YXIgd2U7Z2UudHlwZT1udWxsIT09KHdlPWdlLnR5cGUpJiZ2b2lkIDAhPT13ZT93ZTppZX1lbHNlIGdlPXt0eXBlOmllfTtnZSYmdGhpcy5tZXRhTWFuYWdlci51cGRhdGVDZWxsTWV0YShkLGgsZ2UpLFQucnVuSG9va3MoImFmdGVyR2V0Q2Vs''@;'; put 'put ''bE1ldGEiLGYsXyxsKSx0aGlzLm1ldGFTeW5jTWVtby5oYXMoZCl8fHRoaXMubWV0YVN5bmNNZW1vLnNldChkLG5ldyBTZXQpLHRoaXMubWV0YVN5bmNNZW1vLmdldChkKS5hZGQoaCl9fWNsYXNzIFZEZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy51c2FnZVRyYWNr''@;'; put 'put ''ZXI9bmV3IFNldCx0aGlzLnByb3BEZXNjcmlwdG9ycz1uZXcgTWFwKFtbImZpeGVkQ29sdW1uc0xlZnQiLHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZShhKXtpZih0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT1hKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIik7aWYodGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhh''@;'; put 'put ''cygiZml4ZWRDb2x1bW5zU3RhcnQiKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVmdGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIp''@;'; put 'put ''fX1dLFsibGF5b3V0RGlyZWN0aW9uIix7b25DaGFuZ2UoYSxkLGgpe2lmKCFoKXRocm93IG5ldyBFcnJvcihgVGhlIFxgJHthfVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX19XV0pLHRoaXMuZXh0ZW5kTWV0YVBy''@;'; put 'put ''b3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7dGhpcy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e3RhcmdldDpkLG9uQ2hhbmdlOmg9KCgpPT57fSl9PWwsZj0ic3RyaW5nIj09dHlwZW9mIGQsXz1mP2Q6YSxUPWBfJHtffWA7dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRh''@;'; put 'put ''Lm1ldGFbVF09dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbX10sdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxULGgpLGYmJnRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGQsVCxoKX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IF89IWgudXNhZ2VUcmFja2VyLmhhcyhsKTtoLnVzYWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLF8pLHRoaXNbYV09Zn0sZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITB9KX19Y29uc3QgVm5lPS9eKFxyXG58XG5ccnxccnxcbikvLEJEZT0vXlteXHRcclxuXSsvLEJuZT0vXlx0LztmdW5jdGlvbiBDeShjKXtsZXQgbCxhLGQsaCxfLGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7''@;'; put 'put ''ZDxoO2QrPTEpZD4wJiYoZis9Ilx0IiksXz1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2YgXz9fLmluZGV4T2YoIlxuIik+LTE/Zis9YCIke18ucmVwbGFjZSgvIi9nLCciIicpfSJgOmYrPV86Zis9bnVsbD09Xz8iIjpfO2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1jbGFzcyBtN3tzdGF0''@;'; put 'put ''aWMgZ2V0IERFU1RJTkFUSU9OX1JFTkRFUkVSKCl7cmV0dXJuIDF9c3RhdGljIGdldCBERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKCl7cmV0dXJuIDJ9Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaW5zdGFuY2U9bCx0aGlzLm1ldGFNYW5hZ2VyPWQsdGhpcy50YWJsZU1ldGE9ZC5n''@;'; put 'put ''ZXRUYWJsZU1ldGEoKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCksdGhpcy5jb2xUb1Byb3BDYWNoZT12b2lkIDAsdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDAsdGhpcy5jcmVhdGVNYXAoKX1jcmVhdGVNYXAoKXtjb25zdCBsPXRo''@;'; put 'put ''aXMuZ2V0U2NoZW1hKCk7aWYodHlwZW9mIGw+InUiKXRocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGNyZWF0ZSBgY29sdW1uc2AgZGVmaW5pdGlvbiBidXQgeW91IGRpZG4ndCBwcm92aWRlIGBzY2hlbWFgIG5vciBgZGF0YWAiKTtjb25zdCBhPXRoaXMudGFibGVNZXRhLmNvbHVtbnM7bGV0''@;'; put 'put ''IGQ7aWYodGhpcy5jb2xUb1Byb3BDYWNoZT1bXSx0aGlzLnByb3BUb0NvbENhY2hlPW5ldyBNYXAsYSl7bGV0IGg9MCxmPTAsXz0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7Y29uc3QgVD11ayhsKTtoPVQ+MD9UOnRoaXMuY291bnRGaXJzdFJvd0tleXMoKSxfPSEwfWVsc2UgaD1NYXRo''@;'; put 'put ''Lm1pbih0aGlzLnRhYmxlTWV0YS5tYXhDb2xzLGEubGVuZ3RoKTtmb3IoZD0wO2Q8aDtkKyspe2NvbnN0IFQ9Xz9hKGQpOmFbZF07aWYodXMoVCkpe2lmKHR5cGVvZiBULmRhdGE8InUiKXtjb25zdCBXPV8/ZjpkO3RoaXMuY29sVG9Qcm9wQ2FjaGVbV109VC5kYXRhLHRoaXMucHJvcFRvQ29s''@;'; put 'put ''Q2FjaGUuc2V0KFQuZGF0YSxXKX1mKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwpfWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIGxWKHRoaXMuZGF0YVNvdXJjZSl9cmVjdXJzaXZlRHVja0NvbHVtbnMobCxhLGQpe2xldCBfLGg9YSxmPWQ7cmV0dXJuIHR5cGVvZiBo''@;'; put 'put ''PiJ1IiYmKGg9MCxmPSIiKSwib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZkcyhsLChULFcpPT57bnVsbD09PVQ/KF89ZitXLHRoaXMuY29sVG9Qcm9wQ2FjaGUucHVzaChfKSx0aGlzLnByb3BUb0NvbENhY2hlLnNldChfLGgpLGgrPTEpOmg9dGhpcy5yZWN1cnNpdmVE''@;'; put 'put ''dWNrQ29sdW1ucyhULGgsYCR7V30uYCl9KSxofWNvbFRvUHJvcChsKXtpZighMT09PU51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGw7Y29uc3QgYT10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmS2kodGhp''@;'; put 'put ''cy5jb2xUb1Byb3BDYWNoZVthXSk/dGhpcy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2FjaGUuZ2V0KGwpO2lmKEtpKGEpKXJldHVybiB0aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGEpO2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS50''@;'; put 'put ''b1Zpc3VhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWQ/bDpkfWdldFNjaGVtYSgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtyZXR1cm4gbD8iZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bDp0aGlzLmR1Y2tTY2hlbWF9Y3JlYXRlRHVja1NjaGVtYSgpe3JldHVybiB0aGlz''@;'; put 'put ''LmRhdGFTb3VyY2UmJnRoaXMuZGF0YVNvdXJjZVswXT9yNyh0aGlzLmRhdGFTb3VyY2VbMF0pOnt9fXJlZnJlc2hEdWNrU2NoZW1hKCl7dGhpcy5kdWNrU2NoZW1hPXRoaXMuY3JlYXRlRHVja1NjaGVtYSgpfWNyZWF0ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJhYm92ZSJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBmPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bGV0IF89ZixUPTAs''@;'; put 'put ''Vz1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIFd8fFc+PWYpJiYoVz1mKSxXPHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCkmJihfPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhXKSksITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFcsYSxkKXx8bnVsbD09''@;'; put 'put ''PV8pcmV0dXJue2RlbHRhOjB9O2NvbnN0IGdlPXRoaXMudGFibGVNZXRhLm1heFJvd3Msd2U9dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsRWU9W107Zm9yKDtUPGEmJmYrVDxnZTspe2xldCBvdD1udWxsOyJhcnJheSI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP3RoaXMudGFibGVNZXRhLmRh''@;'; put 'put ''dGFTY2hlbWE/b3Q9eXUodGhpcy5nZXRTY2hlbWEoKSk6KG90PVtdLHZvKHdlLTEsKCk9Pm90LnB1c2gobnVsbCkpKToiZnVuY3Rpb24iPT09dGhpcy5pbnN0YW5jZS5kYXRhVHlwZT9vdD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKFcrVCk6KG90PXt9LGx5KG90LHRoaXMuZ2V0U2NoZW1h''@;'; put 'put ''KCkpKSxFZS5wdXNoKG90KSxUKz0xfXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhXLFQpLCJiZWxvdyI9PT1oJiYoXz1NYXRoLm1pbihfKzEsZikpLHRoaXMuc3BsaWNlRGF0YShfLDAsRWUpO2NvbnN0IFplPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3coXyk7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk9PT1FZS5sZW5ndGgmJnRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuaW5zdGFuY2UuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLFQ+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdl''@;'; put 'put ''ci5jcmVhdGVSb3cobnVsbCxUKToiYXV0byIhPT1kJiZ0aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhfLGEpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsWmUsVCxkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx7ZGVsdGE6VCxzdGFydFBoeXNp''@;'; put 'put ''Y2FsSW5kZXg6X319Y3JlYXRlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz''@;'; put 'put ''WzJdOnt9O2lmKCF0aGlzLmluc3RhbmNlLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNyZWF0ZSBuZXcgY29sdW1uLiBXaGVuIGRhdGEgc291cmNlIGluIGFuIG9iamVjdCwgeW91IGNhbiBvbmx5IGhhdmUgYXMgbXVjaCBjb2x1bW5zIGFz''@;'; put 'put ''IGRlZmluZWQgaW4gZmlyc3QgZGF0YSByb3csIGRhdGEgc2NoZW1hIG9yIGluIHRoZSAnY29sdW1ucycgc2V0dGluZy5JZiB5b3Ugd2FudCB0byBiZSBhYmxlIHRvIGFkZCBuZXcgY29sdW1ucywgeW91IGhhdmUgdG8gdXNlIGFycmF5IGRhdGFzb3VyY2UuIik7Y29uc3QgZj10aGlzLmRhdGFT''@;'; put 'put ''b3VyY2UsXz10aGlzLnRhYmxlTWV0YS5tYXhDb2xzLFQ9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZUNvbHMoKTtsZXQgVz1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIFd8fFc+PVQpJiYoVz1UKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsVyxhLGQpKXJl''@;'; put 'put ''dHVybntkZWx0YTowfTtsZXQgZ2U9VDtXPHRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCkmJihnZT10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oVykpO2NvbnN0IHdlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bGV0IEVlPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCks''@;'; put 'put ''WmU9MCxvdD1nZTsiZW5kIj09PWgmJihvdD1NYXRoLm1pbihvdCsxLFQpKTtjb25zdCBldD1vdDtmb3IoO1plPGEmJkVlPF87KXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFc+PUVlKWlmKHdlPjApZm9yKGxldCBrdD0wO2t0PHdlO2t0Kz0xKXR5cGVvZiBmW2t0XT4idSImJihmW2t0XT1bXSks''@;'; put 'put ''ZltrdF0ucHVzaChudWxsKTtlbHNlIGYucHVzaChbbnVsbF0pO2Vsc2UgZm9yKGxldCBrdD0wO2t0PHdlO2t0KyspZltrdF0uc3BsaWNlKG90LDAsbnVsbCk7WmUrPTEsb3QrPTEsRWUrPTF9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFcsWmUpLFplPjAm''@;'; put 'put ''JihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKG51bGwsWmUpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlQ29sdW1uKGV0LGEpKTtjb25zdCB5dD10aGlzLmluc3RhbmNlLnRvVmlzdWFsQ29sdW1uKGV0KTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5I''@;'; put 'put ''b29rcygiYWZ0ZXJDcmVhdGVDb2wiLHl0LFplLGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx7ZGVsdGE6WmUsc3RhcnRQaHlzaWNhbEluZGV4OmV0fX1yZW1vdmVSb3cobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU51bWJlci5pc0ludGVnZXIobCk/bDotYTtjb25zdCBmPXRoaXMudmlzdWFsUm93c1RvUGh5c2ljYWwoaCxhKSxfPXRoaXMuaW5zdGFuY2UuY291bnRTb3Vy''@;'; put 'put ''Y2VSb3dzKCk7aWYoaD0oXytoKSVfLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixoLGYubGVuZ3RoLGYsZCkpcmV0dXJuITE7Y29uc3QgVz1mLmxlbmd0aDtpZih0aGlzLmZpbHRlckRhdGEoaCxXLGYpLGg8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSl7''@;'; put 'put ''dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IGdlPUtpKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxLaSh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKTswPT09dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhl''@;'; put 'put ''c0xlbmd0aCgpJiYhMT09PWdlJiZ0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIGYuc2xpY2UoMCkuc29ydCgoZ2Usd2UpPT53ZS1nZSkuZm9yRWFjaChnZT0+e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KGdlLDEpfSksdGhp''@;'; put 'put ''cy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVSb3ciLGgsVyxmLGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLCEwfXJlbW92ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5pbnN0YW5jZS5kYXRhVHlwZXx8dGhpcy50YWJsZU1ldGEuY29sdW1ucyl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCByZW1vdmUgY29sdW1uIHdpdGggb2JqZWN0IGRhdGEgc291cmNlIG9yIGNvbHVt''@;'; put 'put ''bnMgb3B0aW9uIHNwZWNpZmllZCIpO2xldCBoPSJudW1iZXIiIT10eXBlb2YgbD8tYTpsO2g9KHRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCkraCkldGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKTtjb25zdCBmPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSxfPWYuc2xpY2UoMCku''@;'; put 'put ''c29ydCgod2UsRWUpPT5FZS13ZSk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDb2wiLGgsYSxmLGQpKXJldHVybiExO2xldCBXPSEwO2NvbnN0IGllPV8ubGVuZ3RoLGdlPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IHdlPTA7d2U8aWU7d2UrKylXJiZmWzBd''@;'; put 'put ''IT09Zlt3ZV0td2UmJihXPSExKTtpZihXKWZvcihsZXQgd2U9MCxFZT10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpO3dlPEVlO3dlKyspZ2Vbd2VdLnNwbGljZShmWzBdLGEpLDA9PT13ZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQg''@;'; put 'put ''d2U9MCxFZT10aGlzLmluc3RhbmNlLmNvdW50U291cmNlUm93cygpO3dlPEVlO3dlKyspZm9yKGxldCBaZT0wO1plPGllO1plKyspZ2Vbd2VdLnNwbGljZShfW1plXSwxKSwwPT09d2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKF9bWmVdLDEpO3JldHVybiBoPHRoaXMuaW5zdGFu''@;'; put 'put ''Y2UuY291bnRDb2xzKCkmJih0aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZiksMD09PXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5zZXRJ''@;'; put 'put ''bmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLCEwfXNwbGljZUNvbChsLGEsZCl7Y29uc3QgaD10aGlzLmluc3Rh''@;'; put 'put ''bmNlLmdldERhdGFBdENvbChsKSxmPWguc2xpY2UoYSxhK2QpLF89aC5zbGljZShhK2QpO2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFc9bmV3IEFycmF5KFQ+Mz9ULTM6MCksaWU9MztpZTxUO2llKyspV1tpZS0zXT1hcmd1bWVudHNbaWVdO25OKFcsXyk7bGV0IGdlPTA7Zm9yKDtnZTxk''@;'; put 'put ''OylXLnB1c2gobnVsbCksZ2UrPTE7cmV0dXJuIHFlZShXKSx0aGlzLmluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KGEsbCxXLG51bGwsbnVsbCwic3BsaWNlQ29sIiksZn1zcGxpY2VSb3cobCxhLGQpe2NvbnN0IGg9dGhpcy5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhQXRSb3cobCksZj1oLnNs''@;'; put 'put ''aWNlKGEsYStkKSxfPWguc2xpY2UoYStkKTtmb3IodmFyIFQ9YXJndW1lbnRzLmxlbmd0aCxXPW5ldyBBcnJheShUPjM/VC0zOjApLGllPTM7aWU8VDtpZSsrKVdbaWUtM109YXJndW1lbnRzW2llXTtuTihXLF8pO2xldCBnZT0wO2Zvcig7Z2U8ZDspVy5wdXNoKG51bGwpLGdlKz0xO3JldHVy''@;'; put 'put ''biB0aGlzLmluc3RhbmNlLnBvcHVsYXRlRnJvbUFycmF5KGwsYSxbV10sbnVsbCxudWxsLCJzcGxpY2VSb3ciKSxmfXNwbGljZURhdGEobCxhLGQpe2lmKCExIT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlRGF0YVNwbGljZSIsbCxhLGQpKXtjb25zdCBmPVsuLi50aGlzLmRhdGFT''@;'; put 'put ''b3VyY2Uuc2xpY2UoMCxsKSwuLi5kLC4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZShsKV07dGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLGYuZm9yRWFjaChfPT50aGlzLmRhdGFTb3VyY2UucHVzaChfKSl9fWZpbHRlckRhdGEobCxhLGQpe2xldCBoPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImZp''@;'; put 'put ''bHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsXyk9Pi0xPT09ZC5pbmRleE9mKF8pKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxoKX1n''@;'; put 'put ''ZXQobCxhKXtjb25zdCBkPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbFJvdyhsKTtsZXQgaD10aGlzLmRhdGFTb3VyY2VbZF07Y29uc3QgZj10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixkKTtoPWlzTmFOKGYpP2Y6aDtsZXQgXz1udWxsO2lmKGgmJmguaGFzT3duUHJv''@;'; put 'put ''cGVydHkmJmJsKGgsYSkpXz1oW2FdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7Y29uc3QgVD1hLnNwbGl0KCIuIik7bGV0IFc9aDtpZighVylyZXR1cm4gbnVsbDtmb3IobGV0IGllPTAsZ2U9VC5sZW5ndGg7aWU8Z2U7aWUrKylpZihXPVdbVFtpZV1d''@;'; put 'put ''LHR5cGVvZiBXPiJ1IilyZXR1cm4gbnVsbDtfPVd9ZWxzZSJmdW5jdGlvbiI9PXR5cGVvZiBhJiYoXz1hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShkLGQrMSlbMF0pKTtpZih0aGlzLmluc3RhbmNlLmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgVD1fZyhfKTt0aGlzLmluc3RhbmNlLnJ1''@;'; put 'put ''bkhvb2tzKCJtb2RpZnlEYXRhIixkLHRoaXMucHJvcFRvQ29sKGEpLFQsImdldCIpLFQuaXNUb3VjaGVkKCkmJihfPVQudmFsdWUpfXJldHVybiBffWdldENvcHlhYmxlKGwsYSl7cmV0dXJuIHRoaXMuaW5zdGFuY2UuZ2V0Q2VsbE1ldGEobCx0aGlzLnByb3BUb0NvbChhKSkuY29weWFibGU/''@;'; put 'put ''dGhpcy5nZXQobCxhKToiIn1zZXQobCxhLGQpe2NvbnN0IGg9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGwpO2xldCBmPWQsXz10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgVD10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlSb3dEYXRhIixoKTtpZihfPWlzTmFOKFQpP1Q6Xyx0''@;'; put 'put ''aGlzLmluc3RhbmNlLmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgVz1fZyhmKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixoLHRoaXMucHJvcFRvQ29sKGEpLFcsInNldCIpLFcuaXNUb3VjaGVkKCkmJihmPVcudmFsdWUpfWlmKF8mJl8uaGFzT3duUHJvcGVydHkm''@;'; put 'put ''JmJsKF8sYSkpX1thXT1mO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7Y29uc3QgVz1hLnNwbGl0KCIuIik7bGV0IHdlLGllPV8sZ2U9MDtmb3IoZ2U9MCx3ZT1XLmxlbmd0aC0xO2dlPHdlO2dlKyspdHlwZW9mIGllW1dbZ2VdXT4idSImJihpZVtXW2dl''@;'; put 'put ''XV09e30pLGllPWllW1dbZ2VdXTtpZVtXW2dlXV09Zn1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGE/YSh0aGlzLmRhdGFTb3VyY2Uuc2xpY2UoaCxoKzEpWzBdLGYpOl9bYV09Zn12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3Mo''@;'; put 'put ''KSxoPVtdO2xldCBULGY9KGQrbCklZCxfPWE7Zm9yKDtmPGQmJl87KVQ9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGYpLGgucHVzaChUKSxfLT0xLGYrPTE7cmV0dXJuIGh9dmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwobCxhKXtjb25zdCBkPXRoaXMuaW5zdGFuY2UuY291bnRDb2xzKCks''@;'; put 'put ''aD1bXTtsZXQgZj0oZCtsKSVkLF89YTtmb3IoO2Y8ZCYmXzspe2NvbnN0IFQ9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsQ29sdW1uKGYpO2gucHVzaChUKSxfLT0xLGYrPTF9cmV0dXJuIGh9Y2xlYXIoKXtmb3IobGV0IGw9MDtsPHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7bCsr''@;'; put 'put ''KWZvcihsZXQgYT0wO2E8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaW5z''@;'; put 'put ''dGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1cm4gTWF0aC5taW4oZCxhKX1nZXRBbGwoKXtjb25zdCBsPXtyb3c6MCxjb2w6MH0sYT17cm93Ok1hdGgubWF4KHRoaXMuaW5zdGFuY2UuY291bnRSb3dzKCktMSwwKSxjb2w6TWF0aC5tYXgodGhp''@;'; put 'put ''cy5pbnN0YW5jZS5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk/dGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05fUkVOREVSRVIpOltdfWNvdW50Q2FjaGVkQ29sdW1ucygpe3JldHVybiB0aGlzLmNv''@;'; put 'put ''bFRvUHJvcENhY2hlLmxlbmd0aH1nZXRSYW5nZShsLGEsZCl7Y29uc3QgaD1bXTtsZXQgZixfLFQ7Y29uc3QgVz10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLGllPXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PVd8fDA9PT1pZSlyZXR1cm5bXTtjb25zdCBnZT1kPT09bTcuREVTVElOQVRJ''@;'; put 'put ''T05fQ0xJUEJPQVJEX0dFTkVSQVRPUj90aGlzLmdldENvcHlhYmxlOnRoaXMuZ2V0LHdlPU1hdGgubWluKE1hdGgubWF4KFctMSwwKSxNYXRoLm1heChsLnJvdyxhLnJvdykpLEVlPU1hdGgubWluKE1hdGgubWF4KGllLTEsMCksTWF0aC5tYXgobC5jb2wsYS5jb2wpKTtmb3IoZj1NYXRoLm1p''@;'; put 'put ''bihsLnJvdyxhLnJvdyk7Zjw9d2U7ZisrKXtUPVtdO2NvbnN0IFplPWY+PTA/dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGYpOmY7Zm9yKF89TWF0aC5taW4obC5jb2wsYS5jb2wpO188PUVlJiZudWxsIT09WmU7XysrKVQucHVzaChnZS5jYWxsKHRoaXMsZix0aGlzLmNvbFRvUHJvcChf''@;'; put 'put ''KSkpO251bGwhPT1aZSYmaC5wdXNoKFQpfXJldHVybiBofWdldFRleHQobCxhKXtyZXR1cm4gQ3kodGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05fUkVOREVSRVIpKX1nZXRDb3B5YWJsZVRleHQobCxhKXtyZXR1cm4gQ3kodGhpcy5nZXRSYW5nZShsLGEsbTcuREVTVElOQVRJT05f''@;'; put 'put ''Q0xJUEJPQVJEX0dFTkVSQVRPUikpfWRlc3Ryb3koKXt0aGlzLmluc3RhbmNlPW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5j''@;'; put 'put ''bGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCB6RGU9bTc7ZnVuY3Rpb24gam5lKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFTb3VyY2U6XyxpbnRlcm5hbFNvdXJjZTpULHNvdXJjZTpXLG1ldGFNYW5hZ2VyOmllLGZpcnN0UnVuOmdl''@;'; put 'put ''fT1kLHdlPWJ1KFQpLEVlPWguZ2V0U2V0dGluZ3MoKTtoLmRhdGFUeXBlPUFycmF5LmlzQXJyYXkoRWUuZGF0YVNjaGVtYSk/ImFycmF5IjpSYShFZS5kYXRhU2NoZW1hKT8iZnVuY3Rpb24iOiJvYmplY3QiLGYmJmYuZGVzdHJveSgpLGM9aC5ydW5Ib29rcyhgYmVmb3JlJHt3ZX1gLGMsZ2Us''@;'; put 'put ''Vyk7Y29uc3QgWmU9bmV3IHpEZShoLGMsaWUpO2lmKGwoWmUpLCJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMpYy5wdXNoJiZjLnNwbGljZXx8KGM9W2NdKTtlbHNle2lmKG51bGwhPT1jKXRocm93IG5ldyBFcnJvcihgJHtUfSBvbmx5IGFjY2VwdHMgYXJyYXkgb2Ygb2JqZWN0cyBvciBh''@;'; put 'put ''cnJheSBvZiBhcnJheXMgKCR7dHlwZW9mIGN9IGdpdmVuKWApO3tjb25zdCBvdD1aZS5nZXRTY2hlbWEoKTtjPVtdO2xldCBldCx5dD0wLGt0PTA7Zm9yKHl0PTAsa3Q9RWUuc3RhcnRSb3dzO3l0PGt0O3l0KyspaWYoIm9iamVjdCIhPT1oLmRhdGFUeXBlJiYiZnVuY3Rpb24iIT09aC5kYXRh''@;'; put 'put ''VHlwZXx8IUVlLmRhdGFTY2hlbWEpaWYoImFycmF5Ij09PWguZGF0YVR5cGUpZXQ9eXUob3RbMF0pLGMucHVzaChldCk7ZWxzZXtldD1bXTtmb3IobGV0IFN0PTAsUXQ9RWUuc3RhcnRDb2xzO1N0PFF0O1N0KyspZXQucHVzaChudWxsKTtjLnB1c2goZXQpfWVsc2UgZXQ9eXUob3QpLGMucHVz''@;'; put 'put ''aChldCl9fUFycmF5LmlzQXJyYXkoY1swXSkmJihoLmRhdGFUeXBlPSJhcnJheSIpLEVlLmRhdGE9YyxaZS5kYXRhU291cmNlPWMsXy5kYXRhPWMsXy5kYXRhVHlwZT1oLmRhdGFUeXBlLF8uY29sVG9Qcm9wPVplLmNvbFRvUHJvcC5iaW5kKFplKSxfLnByb3BUb0NvbD1aZS5wcm9wVG9Db2wu''@;'; put 'put ''YmluZChaZSksXy5jb3VudENhY2hlZENvbHVtbnM9WmUuY291bnRDYWNoZWRDb2x1bW5zLmJpbmQoWmUpLGEoWmUpLGgucnVuSG9va3MoYGFmdGVyJHt3ZX1gLGMsZ2UsVyksZ2V8fChoLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsbnVsbCxUKSxoLnJlbmRlcigpKX1jb25zdCB6bmU9bmV3IE1h''@;'; put 'put ''cChbWyIgIiwic3BhY2UiXSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIsIm1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRyYWNr''@;'; put 'put ''cHJldmlvdXMiXSxbInZvbHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlwbHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIsIi0i''@;'; put 'put ''XSxbImxlZnQiLCJhcnJvd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSxVaz1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHpuZS5oYXMoYSk/em5lLmdldChhKTphfSkuc29ydCgp''@;'; put 'put ''LmpvaW4oIisiKSxVbmU9Yz0+Yy50b0xvd2VyQ2FzZSgpLFdEZT1bIm1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSxTeT1mdW5jdGlvbiBZRGUoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwpfSxyZWxlYXNlQWxs''@;'; put 'put ''KCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgpLCREZT1jPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1fayh7ZXJyb3JJZEV4aXN0czpaZT0+YFRoZSAiJHtaZX0iIGNvbnRleHQg''@;'; put 'put ''bmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCBfPSJncmlkIjtjb25zdCBXPSgpPT5fLGllPVplPT5mLmdldEl0ZW0oWmUpO2xldCB3ZT0hMTtjb25zdCBFZT1mdW5jdGlvbiBHRGUoYyxsLGEsZCxoKXtjb25zdCBmPUVlPT5XRGUuaW5jbHVkZXMoRWUpLF89ZnVuY3Rpb24oRWUp''@;'; put 'put ''e2xldCBaZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IG90PVtdO3JldHVybiBFZS5hbHRLZXkmJm90LnB1c2goImFsdCIpLFplJiYoRWUuY3RybEtleXx8RWUubWV0YUtleSk/b3QucHVzaCgiY29udHJvbC9tZXRhIik6KEVl''@;'; put 'put ''LmN0cmxLZXkmJm90LnB1c2goImNvbnRyb2wiKSxFZS5tZXRhS2V5JiZvdC5wdXNoKCJtZXRhIikpLEVlLnNoaWZ0S2V5JiZvdC5wdXNoKCJzaGlmdCIpLG90fSxUPUVlPT57aWYoITE9PT1sKEVlKSlyZXR1cm47Y29uc3QgWmU9YShFZSk7aWYoMjI5PT09RWUua2V5Q29kZXx8ITE9PT1aZXx8''@;'; put 'put ''YmcoRWUpKXJldHVybjtjb25zdCBvdD1VbmUoRWUua2V5KTtsZXQgZXQ9W107ZihvdCk/U3kucHJlc3Mob3QpOmV0PV8oRWUpO2NvbnN0IHl0PVtvdF0uY29uY2F0KGV0KTshaChFZSx5dCkmJihoaygpJiZldC5pbmNsdWRlcygibWV0YSIpfHwhaGsoKSYmZXQuaW5jbHVkZXMoImNvbnRyb2wi''@;'; put 'put ''KSkmJmgoRWUsW290XS5jb25jYXQoXyhFZSwhMCkpKSxkKEVlKX0sVz1FZT0+e2lmKCExPT09bChFZSkpcmV0dXJuO2NvbnN0IFplPVVuZShFZS5rZXkpOyExIT09ZihaZSkmJlN5LnJlbGVhc2UoWmUpfSxpZT0oKT0+e1N5LnJlbGVhc2VBbGwoKX07cmV0dXJue21vdW50OigpPT57bGV0IEVl''@;'; put 'put ''PWM7Zm9yKDtFZTspRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFQpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsVyksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlz''@;'; put 'put ''dGVuZXIoImJsdXIiLGllKSxFZT1leShFZSl9LHVubW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoO0VlOylFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoImtleXVwIixXKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsaWUpLEVlPWV5KEVlKX0saXNQcmVzc2VkOkVlPT5TeS5pc1ByZXNzZWQoRWUpLHJlbGVhc2VQcmVzc2VkS2V5czooKT0+U3kucmVsZWFzZUFsbCgpfX0obCxhLGQsaCwo''@;'; put 'put ''WmUsb3QpPT57Y29uc3QgZXQ9aWUoVygpKTtsZXQgeXQ9ITE7aWYoIWV0Lmhhc1Nob3J0Y3V0KG90KSlyZXR1cm4geXQ7Y29uc3Qga3Q9ZXQuZ2V0U2hvcnRjdXRzKG90KTtmb3IobGV0IFN0PTA7U3Q8a3QubGVuZ3RoO1N0Kyspe2NvbnN0e2NhbGxiYWNrOlF0LHJ1bk9ubHlJZjpybixwcmV2''@;'; put 'put ''ZW50RGVmYXVsdDp2bixzdG9wUHJvcGFnYXRpb246Tm4sY2FwdHVyZUN0cmw6Y3J9PWt0W1N0XTtpZighMSE9PXJuKFplKSYmKHdlPWNyLHl0PSExPT09UXQoWmUsb3QpLHdlPSExLHZuJiZaZS5wcmV2ZW50RGVmYXVsdCgpLE5uJiZaZS5zdG9wUHJvcGFnYXRpb24oKSx5dCkpYnJlYWt9cmV0''@;'; put 'put ''dXJuIHl0fSk7cmV0dXJuIEVlLm1vdW50KCkse2FkZENvbnRleHQ6WmU9Pntjb25zdCBvdD0oYz0+e2NvbnN0IGw9X2soe2Vycm9ySWRFeGlzdHM6Vz0+YFRoZSAiJHtXfSIgc2hvcnRjdXQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSAiJHtjfSIgY29udGV4dC5gfSksYT1mdW5jdGlv''@;'; put 'put ''bigpe2xldHtrZXlzOlcsY2FsbGJhY2s6aWUsZ3JvdXA6Z2UscnVuT25seUlmOndlPSgoKT0+ITApLGNhcHR1cmVDdHJsOkVlPSExLHByZXZlbnREZWZhdWx0OlplPSEwLHN0b3BQcm9wYWdhdGlvbjpvdD0hMSxyZWxhdGl2ZVRvR3JvdXA6ZXQscG9zaXRpb246eXR9PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihMYShnZSkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIik7aWYoITE9PT1SYShpZSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2hvcnRjdXQncyBjYWxs''@;'; put 'put ''YmFjayBuZWVkcyB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKCExPT09QXJyYXkuaXNBcnJheShXKSl0aHJvdyBuZXcgRXJyb3IoQWFgUGFzcyB0aGUgc2hvcnRjdXRcJ3Mga2V5cyBhcyBhbiBhcnJheSBvZiBhcnJheXMsXHgyMAogICAgICB1c2luZyB0aGUgS2V5Ym9hcmRFdmVudC5rZXkgcHJv''@;'; put 'put ''cGVydGllczpceDIwCiAgICAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzLmApO2NvbnN0IGt0PXtjYWxsYmFjazppZSxncm91cDpnZSxydW5Pbmx5SWY6d2UsY2FwdHVyZUN0cmw6RWUscHJldmVu''@;'; put 'put ''dERlZmF1bHQ6WmUsc3RvcFByb3BhZ2F0aW9uOm90fTtLaShldCkmJihba3QucmVsYXRpdmVUb0dyb3VwLGt0LnBvc2l0aW9uXT1bZXQseXRdKSxXLmZvckVhY2goU3Q9Pntjb25zdCBRdD1VayhTdCk7aWYobC5oYXNJdGVtKFF0KSl7Y29uc3Qgdm49bC5nZXRJdGVtKFF0KTtsZXQgTm49dm4u''@;'; put 'put ''ZmluZEluZGV4KGNyPT5jci5ncm91cD09PWV0KTstMSE9PU5uPyJiZWZvcmUiPT09eXQ/Tm4tPTE6Tm4rPTE6Tm49dm4ubGVuZ3RoLHZuLnNwbGljZShObiwwLGt0KX1lbHNlIGwuYWRkSXRlbShRdCxba3RdKX0pfSxoPVc9Pntjb25zdCBpZT1VayhXKTtsLnJlbW92ZUl0ZW0oaWUpfTtyZXR1''@;'; put 'put ''cm57YWRkU2hvcnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oVyl7bGV0IGllPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtXLmZvckVhY2goZ2U9PntkcyhpZSwod2UsRWUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoZ2UsRWUpJiYoZ2VbRWVdPWllW0VlXSl9KSxhKGdlKX0pfSxnZXRTaG9ydGN1dHM6Vz0+e2NvbnN0IGllPVVrKFcpLGdlPWwuZ2V0SXRlbShpZSk7cmV0dXJuIEtpKGdlKT9nZS5zbGljZSgpOltdfSxoYXNTaG9ydGN1dDpXPT57Y29uc3QgaWU9VWsoVyk7cmV0dXJu''@;'; put 'put ''IGwuaGFzSXRlbShpZSl9LHJlbW92ZVNob3J0Y3V0c0J5S2V5czpoLHJlbW92ZVNob3J0Y3V0c0J5R3JvdXA6Vz0+e2wuZ2V0SXRlbXMoKS5mb3JFYWNoKGdlPT57bGV0W3dlLEVlXT1nZTtjb25zdCBaZT1FZS5maWx0ZXIob3Q9Pm90Lmdyb3VwIT09Vyk7MD09PVplLmxlbmd0aD9oKChjPT5j''@;'; put 'put ''LnNwbGl0KCIrIikpKHdlKSk6KEVlLmxlbmd0aD0wLEVlLnB1c2goLi4uWmUpKX0pfX19KShaZSk7cmV0dXJuIGYuYWRkSXRlbShaZSxvdCksb3R9LGdldEFjdGl2ZUNvbnRleHROYW1lOlcsZ2V0Q29udGV4dDppZSxzZXRBY3RpdmVDb250ZXh0TmFtZTpaZT0+e189WmV9LGlzQ3RybFByZXNz''@;'; put 'put ''ZWQ6KCk9PiF3ZSYmKEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0cm95OigpPT5FZS51bm1vdW50KCl9fSxxRGU9ImdyaWREZWZhdWx0IjtsZXQgWUI9bnVsbDtm''@;'; put 'put ''dW5jdGlvbiBXQihjLGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPXRoaXM7Y29uc3QgXz1uZXcgbGwoZik7bGV0IFQsVyxpZSxnZSx3ZT0hMDsoZnVuY3Rpb24gb1RlKGMpe3JldHVybiBjPT09blZ9''@;'; put 'put ''KShkKSYmZnVuY3Rpb24gaVRlKGMpe2xuZS5zZXQoYywhMCl9KHRoaXMpLHRoaXMucm9vdEVsZW1lbnQ9Yyx0aGlzLnJvb3REb2N1bWVudD1jLm93bmVyRG9jdW1lbnQsdGhpcy5yb290V2luZG93PXRoaXMucm9vdERvY3VtZW50LmRlZmF1bHRWaWV3LHRoaXMuaXNEZXN0cm95ZWQ9ITEsdGhp''@;'; put 'put ''cy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPTAsdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPTA7Y29uc3QgRWU9bnVsbCE9PShhPWw/LmxheW91dERpcmVjdGlvbikmJnZvaWQgMCE9PWE/YToiaW5oZXJpdCIsWmU9WyJydGwiLCJsdHIiXS5pbmNsdWRlcyhFZSk/RWU6dGhpcy5yb290''@;'; put 'put ''V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5yb290RWxlbWVudCkuZGlyZWN0aW9uO3RoaXMucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkaXIiLFplKSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1aZX0sdGhpcy5pc0x0cj1mdW5jdGlvbigpe3JldHVybiFmLmlz''@;'; put 'put ''UnRsKCl9LHRoaXMuZ2V0RGlyZWN0aW9uRmFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGYuaXNMdHIoKT8xOi0xfSxsLmxhbmd1YWdlPWZ1bmN0aW9uIHFUZShjKXtsZXQgbD1NbmUoYyk7cmV0dXJuIE5CKGwpfHwobD1IQix4bmUoYykpLGx9KGwubGFuZ3VhZ2UpO2NvbnN0IG90PW5ldyBObmUo''@;'; put 'put ''ZixsLFtORGUsVkRlXSksZXQ9b3QuZ2V0VGFibGVNZXRhKCkseXQ9b3QuZ2V0R2xvYmFsTWV0YSgpLGt0PV9rKCk7dGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5yZW5kZXJDYWxsPSExLGMuaW5zZXJ0QmVmb3JlKHRoaXMuY29udGFp''@;'; put 'put ''bmVyLGMuZmlyc3RDaGlsZCksclYodGhpcykmJnJ0ZShsLmxpY2Vuc2VLZXksYyksdGhpcy5ndWlkPWBodF8ke2FOKCl9YCx0aGlzLmNvbHVtbkluZGV4TWFwcGVyPW5ldyB2Vix0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyB2Vix0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygi''@;'; put 'put ''aW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNo''@;'; put 'put ''YW5nZSIsdnQpfSksVz1uZXcgX1RlKGYpLCghdGhpcy5yb290RWxlbWVudC5pZHx8Imh0XyI9PT10aGlzLnJvb3RFbGVtZW50LmlkLnN1YnN0cmluZygwLDMpKSYmKHRoaXMucm9vdEVsZW1lbnQuaWQ9dGhpcy5ndWlkKTtjb25zdCBTdD12dD0+e2NvbnN0e3JvdzpPdCxjb2w6Y259PXZ0O3Jl''@;'; put 'put ''dHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE90Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCk6T3QsY24+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGNuKTpjbil9O2xldCBybj1uZXcgRURlKGV0''@;'; put 'put ''LHtyb3dJbmRleE1hcHBlcjooKT0+Zi5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjooKT0+Zi5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmYuY291bnRDb2xzKCksY291bnRSb3dzOigpPT5mLmNvdW50Um93cygpLHByb3BUb0NvbDp2dD0+VC5wcm9wVG9Db2wodnQp''@;'; put 'put ''LGlzRWRpdG9yT3BlbmVkOigpPT4hIWYuZ2V0QWN0aXZlRWRpdG9yKCkmJmYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudENvbHNUcmFuc2xhdGVkOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGNvdW50Um93c1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmll''@;'; put 'put ''dy5jb3VudFJlbmRlcmFibGVSb3dzKCksZ2V0U2hvcnRjdXRNYW5hZ2VyOigpPT5mLmdldFNob3J0Y3V0TWFuYWdlcigpLGNyZWF0ZUNlbGxDb29yZHM6KHZ0LE90KT0+Zi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxPdCksY3JlYXRlQ2VsbFJhbmdlOih2dCxPdCxjbik9PmYuX2NyZWF0ZUNlbGxS''@;'; put 'put ''YW5nZSh2dCxPdCxjbiksdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOlN0LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp2dD0+e2NvbnN0e3JvdzpPdCxjb2w6Y259PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE90Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRl''@;'; put 'put ''cmFibGVJbmRleChPdCk6T3QsY24+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNuKTpjbil9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih2dCxPdCk9PmYuZ2V0Q2VsbE1ldGEodnQsT3QpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb259KTt0aGlz''@;'; put 'put ''LnNlbGVjdGlvbj1ybjtjb25zdCB2bj12dD0+e2xldHtoaWRkZW5JbmRleGVzQ2hhbmdlZDpPdH09dnQ7T3QmJnRoaXMuc2VsZWN0aW9uLnJlZnJlc2goKX07ZnVuY3Rpb24gTm4odnQpe2NvbnN0IE90PU1uZSh2dCk7TkIoT3QpPyhmLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIs''@;'; put 'put ''T3QpLHl0Lmxhbmd1YWdlPU90LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE90KSk6eG5lKHZ0KX1mdW5jdGlvbiBjcih2dCxPdCl7Y29uc3QgY249ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVtZW50OmYudGFibGU7aWYod2UpcGkoY24sT3QpO2Vsc2V7bGV0IEVuPVtdLE9u''@;'; put 'put ''PVtdO3l0W3Z0XSYmKEVuPUFycmF5LmlzQXJyYXkoeXRbdnRdKT95dFt2dF06b04oeXRbdnRdKSksT3QmJihPbj1BcnJheS5pc0FycmF5KE90KT9PdDpvTihPdCkpO2NvbnN0IEpuPWlOKEVuLE9uKSxQcj1pTihPbixFbik7Sm4ubGVuZ3RoJiZXbyhjbixKbiksUHIubGVuZ3RoJiZwaShjbixQ''@;'; put 'put ''cil9eXRbdnRdPU90fWZ1bmN0aW9uIERyKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEwLGFkZFZhbGlkYXRvclRvUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0xLHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0aGlzLnZhbGlk''@;'; put 'put ''YXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9''@;'; put 'put ''PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIF9pKHZ0KXtjb25zdCBPdD12dC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChPdCkpP3BhcnNlRmxvYXQoT3QpOnZ0fWZ1bmN0aW9uIGxpKHZ0LE90LGNuKXtp''@;'; put 'put ''ZighdnQubGVuZ3RoKXJldHVybjtjb25zdCBFbj1mLmdldEFjdGl2ZUVkaXRvcigpLE9uPW5ldyBEcjtsZXQgSm49ITA7T24ub25RdWV1ZUVtcHR5PVByPT57RW4mJkpuJiZFbi5jYW5jZWxDaGFuZ2VzKCksY24oUHIpfTtmb3IobGV0IFByPXZ0Lmxlbmd0aC0xO1ByPj0wO1ByLS0pe2NvbnN0''@;'; put 'put ''W09yLCRyLCxZcl09dnRbUHJdLE5yPVQucHJvcFRvQ29sKCRyKSxSaT1mLmdldENlbGxNZXRhKE9yLE5yKTsibnVtZXJpYyI9PT1SaS50eXBlJiYic3RyaW5nIj09dHlwZW9mIFlyJiZMdGUoWXIpJiYodnRbUHJdWzNdPV9pKFlyKSksZi5nZXRDZWxsVmFsaWRhdG9yKFJpKSYmKE9uLmFkZFZh''@;'; put 'put ''bGlkYXRvclRvUXVldWUoKSxmLnZhbGlkYXRlQ2VsbCh2dFtQcl1bM10sUmksZnVuY3Rpb24oWG8sR28pe3JldHVybiBmdW5jdGlvbihKcyl7aWYoImJvb2xlYW4iIT10eXBlb2YgSnMpdGhyb3cgbmV3IEVycm9yKCJWYWxpZGF0aW9uIGVycm9yOiByZXN1bHQgaXMgbm90IGJvb2xlYW4iKTtp''@;'; put 'put ''ZighMT09PUpzJiYhMT09PUdvLmFsbG93SW52YWxpZCl7Sm49ITEsdnQuc3BsaWNlKFhvLDEpLEdvLnZhbGlkPSEwO2NvbnN0IGdhPWYuZ2V0Q2VsbChHby52aXN1YWxSb3csR28udmlzdWFsQ29sKTtudWxsIT09Z2EmJldvKGdhLGV0LmludmFsaWRDZWxsQ2xhc3NOYW1lKX1Pbi5yZW1vdmVW''@;'; put 'put ''YWxpZGF0b3JGb3JtUXVldWUoKX19KFByLFJpKSxPdCkpfU9uLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBtcih2dCxPdCl7bGV0IGNuPXZ0Lmxlbmd0aC0xO2lmKGNuPDApcmV0dXJuO2Zvcig7Y24+PTA7Y24tLSl7bGV0IE9uPSExO2lmKG51bGwhPT12dFtjbl0pe2lmKG51bGwh''@;'; put 'put ''PXZ0W2NuXVsyXXx8bnVsbCE9dnRbY25dWzNdKXtpZihldC5hbGxvd0luc2VydFJvdylmb3IoO3Z0W2NuXVswXT5mLmNvdW50Um93cygpLTE7KXtjb25zdHtkZWx0YTpKbn09VC5jcmVhdGVSb3codm9pZCAwLHZvaWQgMCx7c291cmNlOk90fSk7aWYoMD09PUpuKXtPbj0hMDticmVha319aWYo''@;'; put 'put ''ImFycmF5Ij09PWYuZGF0YVR5cGUmJighZXQuY29sdW1uc3x8MD09PWV0LmNvbHVtbnMubGVuZ3RoKSYmZXQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtULnByb3BUb0NvbCh2dFtjbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOkpufT1ULmNyZWF0ZUNvbCh2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09Sm4pe09uPSEwO2JyZWFrfX1Pbnx8VC5zZXQodnRbY25dWzBdLHZ0W2NuXVsxXSx2dFtjbl1bM10pfX1lbHNlIHZ0LnNwbGljZShjbiwxKX1mLmZvcmNlRnVsbFJlbmRlcj0hMCxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYucnVuSG9va3MoImJlZm9y''@;'; put 'put ''ZUNoYW5nZVJlbmRlciIsdnQsT3QpLGdlLmxvY2tFZGl0b3IoKSxmLl9yZWZyZXNoQm9yZGVycyhudWxsKSxnZS51bmxvY2tFZGl0b3IoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLHZ0LE90fHwiZWRpdCIpO2NvbnN0IEVuPWYuZ2V0QWN0''@;'; put 'put ''aXZlRWRpdG9yKCk7RW4mJktpKEVuLnJlZnJlc2hWYWx1ZSkmJkVuLnJlZnJlc2hWYWx1ZSgpfWZ1bmN0aW9uIEVpKHZ0LE90LGNuKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh2dCk/dnQ6W1t2dCxPdCxjbl1dfWZ1bmN0aW9uIFpyKHZ0LE90KXtjb25zdCBjbj1mLmdldEFjdGl2ZUVkaXRvcigp''@;'; put 'put ''LEVuPWYucnVuSG9va3MoImJlZm9yZUNoYW5nZSIsdnQsT3R8fCJlZGl0IiksT249dnQuZmlsdGVyKEpuPT5udWxsIT09Sm4pO3JldHVybiExPT09RW58fDA9PT1Pbi5sZW5ndGg/KGNuJiZjbi5jYW5jZWxDaGFuZ2VzKCksW10pOk9ufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxI''@;'; put 'put ''b29rKCJjYWNoZVVwZGF0ZWQiLHZuKSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIix2biksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0Iix2dD0+e3RoaXMucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQi''@;'; put 'put ''LHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLHZ0KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VFbmQiLHZ0PT57''@;'; put 'put ''dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLHZ0KSx2dC5yb3c8MCYmKHZ0LnJvdz10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpLHZ0LmNvbDwwJiYodnQuY29sPXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSl9''@;'; put 'put ''KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2V0UmFuZ2VFbmQiLHZ0PT57Y29uc3QgT3Q9X2coITEpLGNuPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7ZnJvbTpFbix0bzpPbn09Y24uY3VycmVudCgpLEpuPWNuLnNpemUoKS0xO3RoaXMucnVuSG9va3Mo''@;'; put 'put ''ImFmdGVyU2VsZWN0aW9uIixFbi5yb3csRW4uY29sLE9uLnJvdyxPbi5jb2wsT3QsSm4pLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIixFbi5yb3csZi5jb2xUb1Byb3AoRW4uY29sKSxPbi5yb3csZi5jb2xUb1Byb3AoT24uY29sKSxPdCxKbik7Y29uc3QgUHI9dGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCksT3I9dGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7bGV0ICRyPSEwO2gmJigkcj0hMSksT3QuaXNUb3VjaGVkKCkmJigkcj0hT3QudmFsdWUpO2NvbnN0IFlyPXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJv''@;'; put 'put ''d0hlYWRlcigpLE5yPXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpOyExIT09JHImJihQcj9Zcj90aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dC5yb3cpKTpOciYm''@;'; put 'put ''dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dC5jb2wpKTpPciYmIXRoaXMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT90aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnQoU3QoT3IuZnJvbSkp''@;'; put 'put ''OnRoaXMudmlldy5zY3JvbGxWaWV3cG9ydChTdCh2dCkpKSxZciYmTnI/cGkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pOllyPyhXbyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikscGko''@;'; put 'put ''dGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTpOcj8oV28odGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLHBpKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6V28odGhpcy5yb290RWxlbWVudCxbImh0X19zZWxl''@;'; put 'put ''Y3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdGlvbkZpbmlzaGVkIix2dD0+e2NvbnN0IE90PXZ0Lmxlbmd0aC0xLHtmcm9tOmNuLHRvOkVufT12''@;'; put 'put ''dFtPdF07dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGNuLnJvdyxjbi5jb2wsRW4ucm93LEVuLmNvbCxPdCksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGNuLnJvdyxmLmNvbFRvUHJvcChjbi5jb2wpLEVuLnJvdyxmLmNvbFRvUHJvcChFbi5jb2wp''@;'; put 'put ''LE90KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIix2dD0+e2NvbnN0IE90PXRoaXMucnVuSG9va3MoImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQudmFsdWUpO3Z0LnZhbHVlJiYodnQudmFsdWU9T3QpfSksdGhpcy5zZWxlY3Rp''@;'; put 'put ''b24uYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQ9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwodnQsT3QsY24pPT57dGhp''@;'; put 'put ''cy5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsdnQsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0PT57dGhpcy5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRW5kIix2dCl9KSx0aGlzLnNlbGVjdGlv''@;'; put 'put ''bi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwodnQsT3QsY24pPT57dGhpcy5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLHZ0LE90LGNuKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJEZXNlbGVjdCIsKCk9PntnZS5kZXN0cm95''@;'; put 'put ''RWRpdG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMoKSxXbyh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksdGhpcy5ydW5Ib29rcygiYWZ0ZXJEZXNlbGVjdCIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJp''@;'; put 'put ''bnNlcnRSb3dSZXF1aXJlIix2dD0+e3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHZ0LDEsImF1dG8iKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9Pnt0aGlzLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix2dCwxLCJhdXRvIil9KSxp''@;'; put 'put ''ZT17YWx0ZXIodnQsT3Qpe3ZhciBjbixFbjtsZXQgT249YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEsSm49YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDAsUHI9YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0''@;'; put 'put ''XTp2b2lkIDA7Y29uc3QgT3I9JHI9PntpZigwPT09JHIubGVuZ3RoKXJldHVybltdO2NvbnN0IFlyPVsuLi4kcl07cmV0dXJuIFlyLnNvcnQoKFJpLFhvKT0+e2xldFtHb109UmksW0pzXT1YbztyZXR1cm4gR289PT1Kcz8wOkdvPkpzPzE6LTF9KSxBbChZciwoUmksWG8pPT57bGV0W0dvLEpz''@;'; put 'put ''XT1Ybztjb25zdCBnYT1SaVtSaS5sZW5ndGgtMV0sW3VvLEF0XT1nYSxJaT11bytBdDtpZihHbzw9SWkpe2NvbnN0IFFzPU1hdGgubWF4KEpzLShJaS1HbyksMCk7Z2FbMV0rPVFzfWVsc2UgUmkucHVzaChbR28sSnNdKTtyZXR1cm4gUml9LFtZclswXV0pfTtzd2l0Y2godnQpe2Nhc2UiaW5z''@;'; put 'put ''ZXJ0X3Jvd19iZWxvdyI6Y2FzZSJpbnNlcnRfcm93X2Fib3ZlIjpjb25zdCAkcj1mLmNvdW50U291cmNlUm93cygpO2lmKGV0Lm1heFJvd3M9PT0kcilyZXR1cm47Y29uc3QgWXI9Imluc2VydF9yb3dfYmVsb3ciPT09dnQ/ImJlbG93IjoiYWJvdmUiO090PW51bGwhPT0oY249T3QpJiZ2b2lk''@;'; put 'put ''IDAhPT1jbj9jbjoiYmVsb3ciPT09WXI/JHI6MDtjb25zdHtkZWx0YTpOcixzdGFydFBoeXNpY2FsSW5kZXg6Uml9PVQuY3JlYXRlUm93KE90LE9uLHtzb3VyY2U6Sm4sbW9kZTpZcn0pO2lmKE5yKXtjb25zdCBBdD1ybi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxJaT1BdD8uZnJvbSxRcz1J''@;'; put 'put ''aT8ucm93LGxhPWYudG9WaXN1YWxSb3coUmkpO2lmKHJuLmlzU2VsZWN0ZWRCeUNvcm5lcigpKWYuc2VsZWN0QWxsKCk7ZWxzZSBpZihLaShRcykmJlFzPj1sYSl7Y29uc3R7cm93OkZzLGNvbDplY309QXQudG87bGV0IENhPUlpLmNvbDtybi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmKENh''@;'; put 'put ''PS0xKSxybi5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCkscm4uc2V0UmFuZ2VTdGFydE9ubHkoZi5fY3JlYXRlQ2VsbENvb3JkcyhRcytOcixDYSksITApLHJuLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoRnMrTnIsZWMpKX1lbHNlIGYuX3JlZnJlc2hCb3JkZXJzKCl9YnJlYWs7''@;'; put 'put ''Y2FzZSJpbnNlcnRfY29sX3N0YXJ0IjpjYXNlImluc2VydF9jb2xfZW5kIjpjb25zdCBYbz0iaW5zZXJ0X2NvbF9lbmQiPT09dnQ/ImVuZCI6InN0YXJ0IjtPdD1udWxsIT09KEVuPU90KSYmdm9pZCAwIT09RW4/RW46ImVuZCI9PT1Ybz9mLmNvdW50U291cmNlQ29scygpOjA7Y29uc3R7ZGVs''@;'; put 'put ''dGE6R28sc3RhcnRQaHlzaWNhbEluZGV4OkpzfT1ULmNyZWF0ZUNvbChPdCxPbix7c291cmNlOkpuLG1vZGU6WG99KTtpZihHbyl7aWYoQXJyYXkuaXNBcnJheShldC5jb2xIZWFkZXJzKSl7Y29uc3QgRnM9W2YudG9WaXN1YWxDb2x1bW4oSnMpLDBdO0ZzLmxlbmd0aCs9R28sQXJyYXkucHJv''@;'; put 'put ''dG90eXBlLnNwbGljZS5hcHBseShldC5jb2xIZWFkZXJzLEZzKX1jb25zdCBBdD1ybi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxJaT1BdD8uZnJvbSxRcz1JaT8uY29sLGxhPWYudG9WaXN1YWxDb2x1bW4oSnMpO2lmKHJuLmlzU2VsZWN0ZWRCeUNvcm5lcigpKWYuc2VsZWN0QWxsKCk7ZWxz''@;'; put 'put ''ZSBpZihLaShRcykmJlFzPj1sYSl7Y29uc3R7cm93OkZzLGNvbDplY309QXQudG87bGV0IENhPUlpLnJvdztybi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmKENhPS0xKSxybi5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCkscm4uc2V0UmFuZ2VTdGFydE9ubHkoZi5fY3JlYXRlQ2VsbENv''@;'; put 'put ''b3JkcyhDYSxRcytHbyksITApLHJuLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoRnMsZWMrR28pKX1lbHNlIGYuX3JlZnJlc2hCb3JkZXJzKCl9YnJlYWs7Y2FzZSJyZW1vdmVfcm93Ijpjb25zdCBnYT1BdD0+e2xldCBJaT0wO0RuKEF0LFFzPT57bGV0W2xhLEZzXT1Rcztjb25z''@;'; put 'put ''dCBlYz1wYyhsYSk/Zi5jb3VudFJvd3MoKS0xOk1hdGgubWF4KGxhLUlpLDApO2lmKE51bWJlci5pc0ludGVnZXIobGEpJiYobGE9TWF0aC5tYXgobGEtSWksMCkpLCFULnJlbW92ZVJvdyhsYSxGcyxKbikpcmV0dXJuO2NvbnN0IFJoPWYuY291bnRSb3dzKCksUzE9ZXQuZml4ZWRSb3dzVG9w''@;'; put 'put ''O1MxPj1lYysxJiYoZXQuZml4ZWRSb3dzVG9wLT1NYXRoLm1pbihGcyxTMS1lYykpO2NvbnN0IERsPWV0LmZpeGVkUm93c0JvdHRvbTtEbCYmZWM+PVJoLURsJiYoZXQuZml4ZWRSb3dzQm90dG9tLT1NYXRoLm1pbihGcyxEbCkpLElpKz1Gc30pfTtBcnJheS5pc0FycmF5KE90KT9nYShPcihP''@;'; put 'put ''dCkpOmdhKFtbT3QsT25dXSksaWUuYWRqdXN0Um93c0FuZENvbHMoKSxmLl9yZWZyZXNoQm9yZGVycygpO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgdW89QXQ9PntsZXQgSWk9MDtEbihBdCxRcz0+e2xldFtsYSxGc109UXM7Y29uc3QgZWM9cGMobGEpP2YuY291bnRDb2xzKCktMTpN''@;'; put 'put ''YXRoLm1heChsYS1JaSwwKTtsZXQgQ2E9Zi50b1BoeXNpY2FsQ29sdW1uKGVjKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGxhKSYmKGxhPU1hdGgubWF4KGxhLUlpLDApKSwhVC5yZW1vdmVDb2wobGEsRnMsSm4pKXJldHVybjtjb25zdCBTMT1ldC5maXhlZENvbHVtbnNTdGFydDtTMT49ZWMrMSYm''@;'; put 'put ''KGV0LmZpeGVkQ29sdW1uc1N0YXJ0LT1NYXRoLm1pbihGcyxTMS1lYykpLEFycmF5LmlzQXJyYXkoZXQuY29sSGVhZGVycykmJih0eXBlb2YgQ2E+InUiJiYoQ2E9LTEpLGV0LmNvbEhlYWRlcnMuc3BsaWNlKENhLEZzKSksSWkrPUZzfSl9O0FycmF5LmlzQXJyYXkoT3QpP3VvKE9yKE90KSk6''@;'; put 'put ''dW8oW1tPdCxPbl1dKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX1Qcnx8aWUuYWRqdXN0Um93c0FuZENvbHMoKX0sYWRqdXN0Um93c0FuZENv''@;'; put 'put ''bHMoKXtjb25zdCB2dD1ldC5taW5Sb3dzLE90PWV0Lm1pblNwYXJlUm93cyxjbj1ldC5taW5Db2xzLEVuPWV0Lm1pblNwYXJlQ29scztpZigwPT09Zi5jb3VudFJvd3MoKSYmMD09PWYuY291bnRDb2xzKCkmJnJuLmRlc2VsZWN0KCksdnQpe2NvbnN0IE9uPWYuY291bnRSb3dzKCk7T248dnQm''@;'; put 'put ''JlQuY3JlYXRlUm93KE9uLHZ0LU9uLHtzb3VyY2U6ImF1dG8ifSl9aWYoT3Qpe2NvbnN0IE9uPWYuY291bnRFbXB0eVJvd3MoITApO2lmKE9uPE90KXtjb25zdCBQcj1NYXRoLm1pbihPdC1PbixldC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO1QuY3JlYXRlUm93KGYuY291bnRSb3dz''@;'; put 'put ''KCksUHIse3NvdXJjZToiYXV0byJ9KX19e2xldCBPbjsoY258fEVuKSYmKE9uPWYuY291bnRFbXB0eUNvbHMoITApKTtsZXQgSm49Zi5jb3VudENvbHMoKTtpZihjbiYmIWV0LmNvbHVtbnMmJkpuPGNuKXtjb25zdCBQcj1jbi1KbjtPbis9UHIsVC5jcmVhdGVDb2woSm4sUHIse3NvdXJjZToi''@;'; put 'put ''YXV0byJ9KX1pZihFbiYmIWV0LmNvbHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiZPbjxFbil7Sm49Zi5jb3VudENvbHMoKTtjb25zdCBPcj1NYXRoLm1pbihFbi1PbixldC5tYXhDb2xzLUpuKTtULmNyZWF0ZUNvbChKbixPcix7c291cmNlOiJhdXRvIn0pfX1pZihybi5pc1NlbGVjdGVk''@;'; put 'put ''KCkpe2NvbnN0IE9uPWYuY291bnRSb3dzKCksSm49Zi5jb3VudENvbHMoKTtEbihybi5zZWxlY3RlZFJhbmdlLFByPT57bGV0IE9yPSExLCRyPVByLmZyb20ucm93LFlyPVByLmZyb20uY29sLE5yPVByLnRvLnJvdyxSaT1Qci50by5jb2w7JHI+T24tMT8oJHI9T24tMSxPcj0hMCxOcj4kciYm''@;'; put 'put ''KE5yPSRyKSk6TnI+T24tMSYmKE5yPU9uLTEsT3I9ITAsJHI+TnImJigkcj1OcikpLFlyPkpuLTE/KFlyPUpuLTEsT3I9ITAsUmk+WXImJihSaT1ZcikpOlJpPkpuLTEmJihSaT1Kbi0xLE9yPSEwLFlyPlJpJiYoWXI9UmkpKSxPciYmZi5zZWxlY3RDZWxsKCRyLFlyLE5yLFJpKX0pfWYudmll''@;'; put 'put ''dyYmZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxwb3B1bGF0ZUZyb21BcnJheSh2dCxPdCxjbixFbixPbil7bGV0IEpuLFByLE9yLCRyO2NvbnN0IFlyPVtdLE5yPXt9LFJpPVtdLFhvPXZ0LnJvdyxHbz12dC5jb2w7aWYoUHI9T3QubGVuZ3RoLDA9PT1QcilyZXR1cm4hMTtsZXQgSnM9''@;'; put 'put ''MCxnYT0wO3N3aXRjaCh1cyhjbikmJihKcz1jbi5jb2wtR28rMSxnYT1jbi5yb3ctWG8rMSksT24pe2Nhc2Uic2hpZnRfZG93biI6Y29uc3QgdW89S2IoT3QpLEF0PXVvLmxlbmd0aCxJaT1NYXRoLm1heChBdCxKcyksUXM9Zi5nZXREYXRhKCkuc2xpY2UoWG8pLGxhPUtiKFFzKS5zbGljZShH''@;'; put 'put ''byxHbytJaSk7Zm9yKE9yPTA7T3I8SWk7T3IrPTEpaWYoT3I8QXQpe2ZvcihKbj0wLFByPXVvW09yXS5sZW5ndGg7Sm48Z2EtUHI7Sm4rPTEpdW9bT3JdLnB1c2godW9bT3JdW0puJVByXSk7UmkucHVzaCh1b1tPcl0uY29uY2F0KE9yPGxhLmxlbmd0aD9sYVtPcl06bmV3IEFycmF5KFFzLmxl''@;'; put 'put ''bmd0aCkuZmlsbChudWxsKSkpfWVsc2UgUmkucHVzaCh1b1tPciVBdF0uY29uY2F0KGxhW09yXSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoWG8sR28sS2IoUmkpKTticmVhaztjYXNlInNoaWZ0X3JpZ2h0Ijpjb25zdCBGcz1PdC5sZW5ndGgsZWM9TWF0aC5tYXgoRnMsZ2EpLENhPWYuZ2V0RGF0''@;'; put 'put ''YSgpLnNsaWNlKFhvKS5tYXAoJGM9PiRjLnNsaWNlKEdvKSk7Zm9yKEpuPTA7Sm48ZWM7Sm4rPTEpaWYoSm48RnMpe2ZvcihPcj0wLCRyPU90W0puXS5sZW5ndGg7T3I8SnMtJHI7T3IrPTEpT3RbSm5dLnB1c2goT3RbSm5dW09yJSRyXSk7aWYoSm48Q2EubGVuZ3RoKWZvcihsZXQgJGM9MDsk''@;'; put 'put ''YzxDYVtKbl0ubGVuZ3RoOyRjKz0xKU90W0puXS5wdXNoKENhW0puXVskY10pO2Vsc2UgT3RbSm5dLnB1c2goLi4ubmV3IEFycmF5KENhWzBdLmxlbmd0aCkuZmlsbChudWxsKSl9ZWxzZSBPdC5wdXNoKE90W0puJVByXS5zbGljZSgwLGVjKS5jb25jYXQoQ2FbSm5dKSk7Zi5wb3B1bGF0ZUZy''@;'; put 'put ''b21BcnJheShYbyxHbyxPdCk7YnJlYWs7ZGVmYXVsdDpOci5yb3c9dnQucm93LE5yLmNvbD12dC5jb2w7bGV0IHgyLFJoPTAsUzE9MCxEbD0hMDtjb25zdCB1ND1mdW5jdGlvbihTZCl7bGV0IEp1PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTpudWxsO2NvbnN0IE0xPU90W1NkJU90Lmxlbmd0aF07cmV0dXJuIG51bGwhPT1KdT9NMVtKdSVNMS5sZW5ndGhdOk0xfSxPaD1PdC5sZW5ndGgsQ2Q9Y24/Y24ucm93LXZ0LnJvdysxOjA7Zm9yKFByPWNuP0NkOk1hdGgubWF4KE9oLENkKSxKbj0wO0puPFByJiYhKGNuJiZOci5yb3c+Y24u''@;'; put 'put ''cm93JiZDZD5PaHx8IWV0LmFsbG93SW5zZXJ0Um93JiZOci5yb3c+Zi5jb3VudFJvd3MoKS0xfHxOci5yb3c+PWV0Lm1heFJvd3MpO0puKyspe2NvbnN0ICRjPUpuLVJoLFNkPXU0KCRjKS5sZW5ndGgsSnU9Y24/Y24uY29sLXZ0LmNvbCsxOjA7aWYoJHI9Y24/SnU6TWF0aC5tYXgoU2QsSnUp''@;'; put 'put ''LE5yLmNvbD12dC5jb2wseDI9Zi5nZXRDZWxsTWV0YShOci5yb3csTnIuY29sKSwiQ29weVBhc3RlLnBhc3RlIiE9PUVuJiYiQXV0b2ZpbGwuZmlsbCIhPT1Fbnx8IXgyLnNraXBSb3dPblBhc3RlKXtmb3IoUzE9MCxPcj0wO09yPCRyJiYhKGNuJiZOci5jb2w+Y24uY29sJiZKdT5TZHx8IWV0''@;'; put 'put ''LmFsbG93SW5zZXJ0Q29sdW1uJiZOci5jb2w+Zi5jb3VudENvbHMoKS0xfHxOci5jb2w+PWV0Lm1heENvbHMpO09yKyspe2lmKHgyPWYuZ2V0Q2VsbE1ldGEoTnIucm93LE5yLmNvbCksKCJDb3B5UGFzdGUucGFzdGUiPT09RW58fCJBdXRvZmlsbC5maWxsIj09PUVuKSYmeDIuc2tpcENvbHVt''@;'; put 'put ''bk9uUGFzdGUpe1MxKz0xLE5yLmNvbCs9MSwkcis9MTtjb250aW51ZX1pZih4Mi5yZWFkT25seSYmIlVuZG9SZWRvLnVuZG8iIT09RW4pe05yLmNvbCs9MTtjb250aW51ZX1sZXQgTXU9dTQoJGMsT3ItUzEpLGF1PWYuZ2V0RGF0YUF0Q2VsbChOci5yb3csTnIuY29sKTtpZihudWxsIT09TXUm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgTXUpaWYoQXJyYXkuaXNBcnJheShNdSkmJm51bGw9PT1hdSYmKGF1PVtdKSxudWxsPT09YXV8fCJvYmplY3QiIT10eXBlb2YgYXUpRGw9ITE7ZWxzZXtjb25zdCB4MT1yNyhBcnJheS5pc0FycmF5KGF1KT9hdTphdVswXXx8YXUpLEUyPXI3KEFycmF5LmlzQXJy''@;'; put 'put ''YXkoTXUpP011Ok11WzBdfHxNdSk7bGsoeDEsRTIpfHxBcnJheS5pc0FycmF5KHgxKSYmQXJyYXkuaXNBcnJheShFMik/TXU9eXUoTXUpOkRsPSExfWVsc2UgbnVsbCE9PWF1JiYib2JqZWN0Ij09dHlwZW9mIGF1JiYoRGw9ITEpO0RsJiZZci5wdXNoKFtOci5yb3csTnIuY29sLE11XSksRGw9''@;'; put 'put ''ITAsTnIuY29sKz0xfU5yLnJvdys9MX1lbHNlIFJoKz0xLE5yLnJvdys9MSxQcis9MX1mLnNldERhdGFBdENlbGwoWXIsbnVsbCxudWxsLEVufHwicG9wdWxhdGVGcm9tQXJyYXkiKX19fSx0aGlzLmluaXQ9ZnVuY3Rpb24oKXtXLnNldERhdGEoZXQuZGF0YSksZi5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''SW5pdCIpLChtMigpfHx5TigpKSYmcGkoZi5yb290RWxlbWVudCwibW9iaWxlIiksdGhpcy51cGRhdGVTZXR0aW5ncyhldCwhMCksdGhpcy52aWV3PW5ldyBoVGUodGhpcyksZ2U9Y2tlLmdldEluc3RhbmNlKGYsZXQscm4pLGYucnVuSG9va3MoImluaXQiKSx0aGlzLmZvcmNlRnVsbFJlbmRl''@;'; put 'put ''cj0hMCx0aGlzLnZpZXcucmVuZGVyKCksd2UmJm51bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmcHRlKGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRz''@;'; put 'put ''U2l6ZSgpfSksIm9iamVjdCI9PXR5cGVvZiB3ZSYmKGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix3ZVswXSx3ZVsxXSksd2U9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9jcmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKHZ0LE90KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE90LGNuKXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsT3QsY24pfSx0aGlzLnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uPWYuZ2V0Q2VsbFZhbGlk''@;'; put 'put ''YXRvcihPdCk7ZnVuY3Rpb24gSm4oUHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU90LmhpZGRlbilyZXR1cm4gdm9pZCBjbihQcik7Y29uc3QgJHI9T3QudmlzdWFsQ29sLFlyPU90LnZpc3VhbFJvdyxOcj1mLmdl''@;'; put 'put ''dENlbGwoWXIsJHIsITApO2lmKE5yJiYiVEgiIT09TnIubm9kZU5hbWUpe2NvbnN0IFJpPWYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChZciksWG89Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KCRyKTtmLnZpZXcu''@;'; put 'put ''X3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIsUmksWG8sTnIpfWNuKFByKX12YXIgUHI7SmVlKE9uKSYmKFByPU9uLE9uPWZ1bmN0aW9uKE9yLCRyKXskcihQci50ZXN0KE9yKSl9KSxSYShPbik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxPdC52aXN1YWxSb3csT3Qu''@;'; put 'put ''cHJvcCxFbiksZi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PntPbi5jYWxsKE90LHZ0LFByPT57ZiYmKFByPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLFByLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSxPdC52YWxpZD1QcixKbihQciksZi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRh''@;'; put 'put ''dGUiLFByLHZ0LE90LnZpc3VhbFJvdyxPdC5wcm9wLEVuKSl9KX0pKTpmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e090LnZhbGlkPSEwLEpuKE90LnZhbGlkLCExKX0pfSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsT3QsY24sRW4pe2NvbnN0IE9uPUVpKHZ0LE90LGNuKSxKbj1b''@;'; put 'put ''XTtsZXQgT3IsJHIsWXIsUHI9RW47Zm9yKE9yPTAsJHI9T24ubGVuZ3RoO09yPCRyO09yKyspe2lmKCJvYmplY3QiIT10eXBlb2YgT25bT3JdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJheSBvZiBhcnJh''@;'; put 'put ''eXMgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgT25bT3JdWzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNl''@;'; put 'put ''IG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO1lyPU9uW09yXVsxXT49dGhpcy5jb3VudENvbHMoKT9PbltPcl1bMV06VC5jb2xUb1Byb3AoT25bT3JdWzFdKSxKbi5wdXNoKFtPbltPcl1bMF0sWXIsVy5nZXRBdENlbGwodGhpcy50b1BoeXNp''@;'; put 'put ''Y2FsUm93KE9uW09yXVswXSksT25bT3JdWzFdKSxPbltPcl1bMl1dKX0hUHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihQcj1PdCk7Y29uc3QgTnI9WnIoSm4sRW4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIsTnIsUHIpLGxpKE5yLFByLCgpPT57bXIoTnIsUHIpfSl9LHRoaXMu''@;'; put 'put ''c2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249RWkodnQsT3QsY24pLEpuPVtdO2xldCBPciwkcixQcj1Fbjtmb3IoT3I9MCwkcj1Pbi5sZW5ndGg7T3I8JHI7T3IrKylKbi5wdXNoKFtPbltPcl1bMF0sT25bT3JdWzFdLFcuZ2V0QXRDZWxsKHRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbFJvdyhPbltPcl1bMF0pLE9uW09yXVsxXSksT25bT3JdWzJdXSk7IVByJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoUHI9T3QpO2NvbnN0IFlyPVpyKEpuLEVuKTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLFlyLFByKSxsaShZcixQciwoKT0+e21yKFlyLFByKX0p''@;'; put 'put ''fSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihZQj1mLmd1aWQsZi5ydW5Ib29rcygiYWZ0ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVuY3Rpb24oKXt0aGlzLmlzTGlzdGVuaW5nKCkmJihZQj1udWxsLGYucnVuSG9va3MoImFmdGVyVW5saXN0ZW4i''@;'; put 'put ''KSl9LHRoaXMuaXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gWUI9PT1mLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2YuX3JlZnJlc2hCb3JkZXJzKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sIShhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9LHRoaXMucG9wdWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24odnQsT3QsY24sRW4sT24sSm4sUHIpe2lmKCJvYmplY3QiIT10eXBlb2YgY258fCJvYmplY3QiIT10eXBlb2YgY25bMF0pdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJwb3B1bGF0ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBtdXN0IGJlIGFuIGFycmF5IG9mIGFycmF5cyIpO2NvbnN0IE9yPSJudW1iZXIiPT10eXBlb2YgRW4/Zi5fY3JlYXRlQ2VsbENvb3JkcyhFbixPbik6bnVsbDtyZXR1cm4gaWUucG9wdWxhdGVGcm9tQXJyYXkoZi5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3Jkcyh2dCxPdCksY24sT3IsSm4sUHIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih2dCxPdCxjbil7Zm9yKHZhciBFbj1hcmd1bWVudHMubGVuZ3RoLE9uPW5ldyBBcnJheShFbj4zP0VuLTM6MCksSm49MztKbjxFbjtKbisrKU9uW0puLTNdPWFyZ3VtZW50c1tKbl07cmV0''@;'; put 'put ''dXJuIFQuc3BsaWNlQ29sKHZ0LE90LGNuLC4uLk9uKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odnQsT3QsY24pe2Zvcih2YXIgRW49YXJndW1lbnRzLmxlbmd0aCxPbj1uZXcgQXJyYXkoRW4+Mz9Fbi0zOjApLEpuPTM7Sm48RW47Sm4rKylPbltKbi0zXT1hcmd1bWVudHNbSm5dO3JldHVy''@;'; put 'put ''biBULnNwbGljZVJvdyh2dCxPdCxjbiwuLi5Pbil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihybi5pc1NlbGVjdGVkKCkpcmV0dXJuIGNzKHJuLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtmcm9tOk90LHRvOmNufT12dDtyZXR1cm5bT3Qucm93LE90LmNvbCxjbi5yb3cs''@;'; put 'put ''Y24uY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgT3Q7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE90PXZ0W3Z0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lmKHJu''@;'; put 'put ''LmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShybi5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IE90O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihPdD12dFt2''@;'; put 'put ''dC5sZW5ndGgtMV0pLE90fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYoIXJuLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybjtjb25zdCBPdD1bXTtEbihybi5nZXRTZWxlY3RlZFJhbmdlKCksY249''@;'; put 'put ''Pntjb25zdCBFbj1jbi5nZXRUb3BTdGFydENvcm5lcigpLE9uPWNuLmdldEJvdHRvbUVuZENvcm5lcigpO3ZvKEVuLnJvdyxPbi5yb3csSm49Pnt2byhFbi5jb2wsT24uY29sLFByPT57dGhpcy5nZXRDZWxsTWV0YShKbixQcikucmVhZE9ubHl8fE90LnB1c2goW0puLFByLG51bGxdKX0pfSl9''@;'; put 'put ''KSxPdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKE90LHZ0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRD''@;'; put 'put ''b3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVy''@;'; put 'put ''U3VzcGVuZGVkQ291bnRlciYmKHRoaXMucmVuZGVyQ2FsbD90aGlzLnJlbmRlcigpOnRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpKX0sdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnZpZXcmJih0aGlzLnJlbmRlckNhbGw9ITAsdGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1Jl''@;'; put 'put ''bmRlclN1c3BlbmRlZCgpfHwoZ2UubG9ja0VkaXRvcigpLHRoaXMuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGdlLnVubG9ja0VkaXRvcigpKSl9LHRoaXMuYmF0Y2hSZW5kZXI9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpO2NvbnN0IE90PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1l''@;'; put 'put ''UmVuZGVyKCksT3R9LHRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPjB9LHRoaXMuc3VzcGVuZEV4ZWN1dGlvbj1mdW5jdGlvbigpe3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcis9MSx0aGlzLmNv''@;'; put 'put ''bHVtbkluZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpfSx0aGlzLnJlc3VtZUV4ZWN1dGlvbj1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1l''@;'; put 'put ''bnRzWzBdO2NvbnN0IE90PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlci0xO3RoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heChPdCwwKSwoIXRoaXMuaXNFeGVjdXRpb25TdXNwZW5kZWQoKSYmT3Q9PT10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXJ8fHZ0''@;'; put 'put ''KSYmKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIucmVzdW1lT3BlcmF0aW9ucygpKX0sdGhpcy5iYXRjaEV4ZWN1dGlvbj1mdW5jdGlvbih2dCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz''@;'; put 'put ''WzFdJiZhcmd1bWVudHNbMV07dGhpcy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgY249dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oT3QpLGNufSx0aGlzLmJhdGNoPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKSx0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25z''@;'; put 'put ''dCBPdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbigpLHRoaXMucmVzdW1lUmVuZGVyKCksT3R9LHRoaXMucmVmcmVzaERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtpZighZi52aWV3KXJldHVybjtjb25zdHt3aWR0aDp2dCxoZWlnaHQ6T3R9PWYudmlldy5nZXRMYXN0U2l6ZSgpLHt3''@;'; put 'put ''aWR0aDpjbixoZWlnaHQ6RW59PWYucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksT249Y24hPT12dHx8RW4hPT1PdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6dnQsaGVpZ2h0Ok90fSx7d2lkdGg6Y24saGVpZ2h0OkVufSxPbikm''@;'; put 'put ''JigoT258fGYudmlldy5fd3Qud3RPdmVybGF5cy5zY3JvbGxhYmxlRWxlbWVudD09PWYucm9vdFdpbmRvdykmJihmLnZpZXcuc2V0TGFzdFNpemUoY24sRW4pLGYucmVuZGVyKCkpLGYucnVuSG9va3MoImFmdGVyUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDp2dCxoZWlnaHQ6T3R9LHt3aWR0''@;'; put 'put ''aDpjbixoZWlnaHQ6RW59LE9uKSl9LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbih2dCxPdCl7am5lKHZ0LGNuPT57VD1jbn0sY249PntUPWNuLGYuY29sdW1uSW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksZi5yb3dJbmRleE1hcHBlci5maXRU''@;'; put 'put ''b0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOlQsZGF0YVNvdXJjZTpXLGludGVybmFsU291cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6b3QsZmlyc3RSdW46d2V9KX0sdGhp''@;'; put 'put ''cy5sb2FkRGF0YT1mdW5jdGlvbih2dCxPdCl7am5lKHZ0LGNuPT57VD1jbn0sKCk9PntvdC5jbGVhckNlbGxzQ2FjaGUoKSxmLmluaXRJbmRleE1hcHBlcnMoKSxpZS5hZGp1c3RSb3dzQW5kQ29scygpLHdlJiYod2U9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFw''@;'; put 'put ''OlQsZGF0YVNvdXJjZTpXLGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291cmNlOk90LG1ldGFNYW5hZ2VyOm90LGZpcnN0UnVuOndlfSl9LHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZXQuY29sdW1ucztsZXQgT3Q9MDtpZihBcnJheS5pc0FycmF5''@;'; put 'put ''KHZ0KSlPdD12dC5sZW5ndGg7ZWxzZSBpZihSYSh2dCkpaWYoImFycmF5Ij09PWYuZGF0YVR5cGUpe2NvbnN0IGNuPXRoaXMuY291bnRTb3VyY2VDb2xzKCk7Zm9yKGxldCBFbj0wO0VuPGNuO0VuKz0xKXZ0KEVuKSYmKE90Kz0xKX1lbHNlKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ImZ1bmN0''@;'; put 'put ''aW9uIj09PWYuZGF0YVR5cGUpJiYoT3Q9VC5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoS2koZXQuZGF0YVNjaGVtYSkpe2NvbnN0IGNuPVQuZ2V0U2NoZW1hKCk7T3Q9QXJyYXkuaXNBcnJheShjbik/Y24ubGVuZ3RoOnVrKGNuKX1lbHNlIE90PXRoaXMuY291bnRTb3VyY2VDb2xz''@;'; put 'put ''KCk7cmV0dXJuIE90fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93''@;'; put 'put ''cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHZ0LE90LGNuLEVuKXtyZXR1cm4gTGEodnQpP1QuZ2V0QWxsKCk6VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVuKSxULkRFU1RJTkFUSU9OX1JFTkRFUkVSKX0sdGhpcy5nZXRD''@;'; put 'put ''b3B5YWJsZVRleHQ9ZnVuY3Rpb24odnQsT3QsY24sRW4pe3JldHVybiBULmdldENvcHlhYmxlVGV4dChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLEVuKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHZ0LE90KXtyZXR1cm4gVC5nZXRD''@;'; put 'put ''b3B5YWJsZSh2dCxULmNvbFRvUHJvcChPdCkpfSx0aGlzLmdldFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiBULmdldFNjaGVtYSgpfSx0aGlzLnVwZGF0ZVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3Vt''@;'; put 'put ''ZW50c1sxXTtjb25zdCBjbj0od2U/Zi5sb2FkRGF0YTpmLnVwZGF0ZURhdGEpLmJpbmQodGhpcyk7bGV0IE9uLEpuLEVuPSExO2lmKEtpKHZ0LnJvd3MpKXRocm93IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0''@;'; put 'put ''Um93cywgbWluUm93cyBvciBtYXhSb3dzPycpO2lmKEtpKHZ0LmNvbHMpKXRocm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKEtpKHZ0LmdhbnR0Q2hh''@;'; put 'put ''cnQpKXRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlICJnYW50dENoYXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7Zm9yKE9uIGluIHZ0KSJkYXRhIj09PU9ufHwoImxhbmd1YWdlIj09PU9uP05uKHZ0Lmxhbmd1YWdlKToiY2xhc3NOYW1lIj09PU9uP2NyKCJj''@;'; put 'put ''bGFzc05hbWUiLHZ0LmNsYXNzTmFtZSk6InRhYmxlQ2xhc3NOYW1lIj09PU9uJiZmLnRhYmxlPyhjcigidGFibGVDbGFzc05hbWUiLHZ0LnRhYmxlQ2xhc3NOYW1lKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKSk6c28uZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''aXNSZWdpc3RlcmVkKE9uKXx8c28uZ2V0U2luZ2xldG9uKCkuaXNEZXByZWNhdGVkKE9uKT8oUmEodnRbT25dKXx8QXJyYXkuaXNBcnJheSh2dFtPbl0pKSYmKHZ0W09uXS5pbml0aWFsSG9vaz0hMCxmLmFkZEhvb2soT24sdnRbT25dKSk6IU90JiZibCh2dCxPbikmJih5dFtPbl09dnRbT25d''@;'; put 'put ''KSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAwPT09ZXQuZGF0YT9jbihudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/Y24odnQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lkIDAhPT12dC5jb2x1bW5zJiYoVC5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMo''@;'; put 'put ''KSk7Y29uc3QgUHI9Zi5jb3VudENvbHMoKSxPcj1ldC5jb2x1bW5zO2lmKE9yJiZSYShPcikmJihFbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5jb2x1bW5zKSYmb3QuY2xlYXJDYWNoZSgpLFByPjApZm9yKE9uPTAsSm49MDtPbjxQcjtP''@;'; put 'put ''bisrKXtpZihPcil7Y29uc3QgTnI9RW4/T3IoT24pOk9yW0puXTtOciYmb3QudXBkYXRlQ29sdW1uTWV0YShKbixOcil9Sm4rPTF9S2kodnQuY2VsbCkmJmRzKHZ0LmNlbGwsTnI9PntmLnNldENlbGxNZXRhT2JqZWN0KE5yLnJvdyxOci5jb2wsTnIpfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxs''@;'; put 'put ''TWV0YVJlc2V0Iik7bGV0ICRyPWYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09JHImJigkcj1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpO2xldCBZcj12dC5oZWlnaHQ7aWYoUmEoWXIpJiYoWXI9WXIoKSksT3QmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmli''@;'; put 'put ''dXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxudWxsPT09WXIpe2NvbnN0IE5yPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIp''@;'; put 'put ''O05yJiYoTnIuaW5kZXhPZigiaGVpZ2h0Iik+LTF8fE5yLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsTnIpOihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNl''@;'; put 'put ''IHZvaWQgMCE9PVlyJiYoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4oWXIpP2Ake1lyfWA6YCR7WXJ9cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5cGVvZiB2dC53aWR0aDwidSIpe2xldCBOcj12dC53aWR0aDtSYShOcikmJihOcj1Ocigp''@;'; put 'put ''KSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKE5yKT9gJHtOcn1gOmAke05yfXB4YH1PdHx8KGYudmlldyYmKGYudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKSxmLnZpZXcuX3d0LmV4cG9ydFNldHRpbmdzQXNDbGFzc05h''@;'; put 'put ''bWVzKCkpLGYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KSksaWUuYWRqdXN0Um93c0FuZENvbHMoKSxmLnZpZXcmJiF3ZSYmKGYuZm9yY2VGdWxsUmVuZGVyPSEwLGdlLmxvY2tFZGl0b3IoKSxmLl9yZWZyZXNoQm9yZGVycyhudWxsKSxmLnZpZXcuX3d0Lnd0T3ZlcmxheXMu''@;'; put 'put ''YWRqdXN0RWxlbWVudHNTaXplKCksZ2UudW5sb2NrRWRpdG9yKCkpLCFPdCYmZi52aWV3JiYoIiI9PT0kcnx8IiI9PT1Zcnx8dm9pZCAwPT09WXIpJiYkciE9PVlyJiZmLnZpZXcuX3d0Lnd0T3ZlcmxheXMudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpfSx0aGlzLmdldFZhbHVlPWZ1''@;'; put 'put ''bmN0aW9uKCl7Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZExhc3QoKTtpZihldC5nZXRWYWx1ZSl7aWYoUmEoZXQuZ2V0VmFsdWUpKXJldHVybiBldC5nZXRWYWx1ZS5jYWxsKGYpO2lmKHZ0KXJldHVybiBmLmdldERhdGEoKVt2dFswXVswXV1bZXQuZ2V0VmFsdWVdfWVsc2UgaWYodnQpcmV0dXJu''@;'; put 'put ''IGYuZ2V0RGF0YUF0Q2VsbCh2dFswXSx2dFsxXSl9LHRoaXMuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZXR9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdEFsbCgpLHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzKCl9LHRoaXMuYWx0ZXI9ZnVuY3Rpb24odnQsT3QsY24s''@;'; put 'put ''RW4sT24pe2llLmFsdGVyKHZ0LE90LGNuLEVuLE9uKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHZ0LE90KXtsZXQgY249YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxFbj1PdCxPbj12dDtpZihPdD49MCl7aWYodGhpcy5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpKSlyZXR1cm4gbnVsbDtFbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoT3QpfWlmKHZ0Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbFJvdyh2dCkpKXJldHVybiBudWxsO09uPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dCl9cmV0dXJuIG51bGw9PT1Pbnx8bnVsbD09PUVuP251bGw6Zi52aWV3LmdldENlbGxBdENvb3JkcyhmLl9jcmVhdGVDZWxsQ29vcmRzKE9uLEVu''@;'; put 'put ''KSxjbil9LHRoaXMuZ2V0Q29vcmRzPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD10aGlzLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29vcmRzKHZ0KTtpZihudWxsPT09T3QpcmV0dXJuIG51bGw7Y29uc3R7cm93OmNuLGNvbDpFbn09T3Q7bGV0IE9uPWNuLEpuPUVuO3JldHVybiBjbj49MCYmKE9uPXRo''@;'; put 'put ''aXMucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChjbikpLEVuPj0wJiYoSm49dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEVuKSksZi5fY3JlYXRlQ2VsbENvb3JkcyhPbixKbil9LHRoaXMuY29sVG9Qcm9wPWZ1''@;'; put 'put ''bmN0aW9uKHZ0KXtyZXR1cm4gVC5jb2xUb1Byb3AodnQpfSx0aGlzLnByb3BUb0NvbD1mdW5jdGlvbih2dCl7cmV0dXJuIFQucHJvcFRvQ29sKHZ0KX0sdGhpcy50b1Zpc3VhbFJvdz12dD0+dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50''@;'; put 'put ''b1Zpc3VhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleCh2dCksdGhpcy50b1BoeXNpY2FsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1''@;'; put 'put ''bW49dnQ9PnRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMuZ2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIFQuZ2V0KHZ0LFQuY29sVG9Qcm9wKE90KSl9LHRoaXMuZ2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxP''@;'; put 'put ''dCl7cmV0dXJuIFQuZ2V0KHZ0LE90KX0sdGhpcy5nZXREYXRhQXRDb2w9ZnVuY3Rpb24odnQpe2NvbnN0IE90PVtdLGNuPVQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcygwLHZ0KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGV0LmRhdGEubGVuZ3RoLTEsdnQpLFQuREVTVElOQVRJT05fUkVO''@;'; put 'put ''REVSRVIpO2ZvcihsZXQgRW49MDtFbjxjbi5sZW5ndGg7RW4rPTEpZm9yKGxldCBPbj0wO09uPGNuW0VuXS5sZW5ndGg7T24rPTEpT3QucHVzaChjbltFbl1bT25dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0RGF0YUF0UHJvcD1mdW5jdGlvbih2dCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShm''@;'; put 'put ''Ll9jcmVhdGVDZWxsQ29vcmRzKDAsVC5wcm9wVG9Db2wodnQpKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGV0LmRhdGEubGVuZ3RoLTEsVC5wcm9wVG9Db2wodnQpKSxULkRFU1RJTkFUSU9OX1JFTkRFUkVSKTtmb3IobGV0IEVuPTA7RW48Y24ubGVuZ3RoO0VuKz0xKWZvcihsZXQgT249MDtPbjxj''@;'; put 'put ''bltFbl0ubGVuZ3RoO09uKz0xKU90LnB1c2goY25bRW5dW09uXSk7cmV0dXJuIE90fSx0aGlzLmdldFNvdXJjZURhdGE9ZnVuY3Rpb24odnQsT3QsY24sRW4pe2xldCBPbjtyZXR1cm4gT249dm9pZCAwPT09dnQ/Vy5nZXREYXRhKCk6Vy5nZXRCeVJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''dnQsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKSxPbn0sdGhpcy5nZXRTb3VyY2VEYXRhQXJyYXk9ZnVuY3Rpb24odnQsT3QsY24sRW4pe2xldCBPbjtyZXR1cm4gT249dm9pZCAwPT09dnQ/Vy5nZXREYXRhKCEwKTpXLmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxP''@;'; put 'put ''dCksZi5fY3JlYXRlQ2VsbENvb3JkcyhjbixFbiksITApLE9ufSx0aGlzLmdldFNvdXJjZURhdGFBdENvbD1mdW5jdGlvbih2dCl7cmV0dXJuIFcuZ2V0QXRDb2x1bW4odnQpfSx0aGlzLnNldFNvdXJjZURhdGFBdENlbGw9ZnVuY3Rpb24odnQsT3QsY24sRW4pe2NvbnN0IE9uPUVpKHZ0LE90''@;'; put 'put ''LGNuKSxKbj10aGlzLmhhc0hvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIpLFByPVtdO0puJiZEbihPbiwkcj0+e2xldFtZcixOcixSaV09JHI7UHIucHVzaChbWXIsTnIsVy5nZXRBdENlbGwoWXIsTnIpLFJpXSl9KSxEbihPbiwkcj0+e2xldFtZcixOcixSaV09JHI7Vy5zZXRBdENl''@;'; put 'put ''bGwoWXIsTnIsUmkpfSksSm4mJnRoaXMucnVuSG9va3MoImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsUHIsRW4pLHRoaXMucmVuZGVyKCk7Y29uc3QgT3I9Zi5nZXRBY3RpdmVFZGl0b3IoKTtPciYmS2koT3IucmVmcmVzaFZhbHVlKSYmT3IucmVmcmVzaFZhbHVlKCl9LHRoaXMuZ2V0U291''@;'; put 'put ''cmNlRGF0YUF0Um93PWZ1bmN0aW9uKHZ0KXtyZXR1cm4gVy5nZXRBdFJvdyh2dCl9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxPdCl7cmV0dXJuIFcuZ2V0QXRDZWxsKHZ0LE90KX0sdGhpcy5nZXREYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBULmdldFJhbmdl''@;'; put 'put ''KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsMCksZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCx0aGlzLmNvdW50Q29scygpLTEpLFQuREVTVElOQVRJT05fUkVOREVSRVIpWzBdfHxbXX0sdGhpcy5nZXREYXRhVHlwZT1mdW5jdGlvbih2dCxPdCxjbixFbil7Y29uc3QgT249dm9pZCAwPT09dnQ/WzAs''@;'; put 'put ''MCx0aGlzLmNvdW50Um93cygpLHRoaXMuY291bnRDb2xzKCldOlt2dCxPdCxjbixFbl0sW0puLFByXT1PbjtsZXRbLCxPciwkcl09T24sWXI9bnVsbCxOcj1udWxsO3ZvaWQgMD09PU9yJiYoT3I9Sm4pLHZvaWQgMD09PSRyJiYoJHI9UHIpO2xldCBSaT0ibWl4ZWQiO3JldHVybiB2byhNYXRo''@;'; put 'put ''Lm1heChNYXRoLm1pbihKbixPciksMCksTWF0aC5tYXgoSm4sT3IpLFhvPT57bGV0IEdvPSEwO3JldHVybiB2byhNYXRoLm1heChNYXRoLm1pbihQciwkciksMCksTWF0aC5tYXgoUHIsJHIpLEpzPT4oTnI9dGhpcy5nZXRDZWxsTWV0YShYbyxKcykudHlwZSxZcj9Hbz1Zcj09PU5yOllyPU5y''@;'; put 'put ''LEdvKSksUmk9R28/TnI6Im1peGVkIixHb30pLFJpfSx0aGlzLnJlbW92ZUNlbGxNZXRhPWZ1bmN0aW9uKHZ0LE90LGNuKXtjb25zdFtFbixPbl09W3RoaXMudG9QaHlzaWNhbFJvdyh2dCksdGhpcy50b1BoeXNpY2FsQ29sdW1uKE90KV07bGV0IEpuPW90LmdldENlbGxNZXRhS2V5VmFsdWUo''@;'; put 'put ''RW4sT24sY24pOyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLHZ0LE90LGNuLEpuKSYmKG90LnJlbW92ZUNlbGxNZXRhKEVuLE9uLGNuKSxmLnJ1bkhvb2tzKCJhZnRlclJlbW92ZUNlbGxNZXRhIix2dCxPdCxjbixKbikpLEpuPW51bGx9LHRoaXMuc3BsaWNlQ2VsbHNN''@;'; put 'put ''ZXRhPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7Zm9yKHZhciBjbj1hcmd1bWVudHMubGVuZ3RoLEVuPW5ldyBBcnJheShjbj4yP2NuLTI6MCksT249MjtPbjxjbjtPbisrKUVuW09uLTJdPWFyZ3Vt''@;'; put 'put ''ZW50c1tPbl07aWYoRW4ubGVuZ3RoPjAmJiFBcnJheS5pc0FycmF5KEVuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSAzcmQgYXJndW1lbnQgKGNlbGxNZXRhUm93cykgaGFzIHRvIGJlIHBhc3NlZCBhcyBhbiBhcnJheSBvZiBjZWxsIG1ldGEgb2JqZWN0cyBhcnJheS4iKTtPdD4wJiZvdC5y''@;'; put 'put ''ZW1vdmVSb3codGhpcy50b1BoeXNpY2FsUm93KHZ0KSxPdCksRW4ubGVuZ3RoPjAmJkRuKEVuLnJldmVyc2UoKSxKbj0+e290LmNyZWF0ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpKSxEbihKbiwoUHIsT3IpPT50aGlzLnNldENlbGxNZXRhT2JqZWN0KHZ0LE9yLFByKSl9KSxmLnJlbmRl''@;'; put 'put ''cigpfSx0aGlzLnNldENlbGxNZXRhT2JqZWN0PWZ1bmN0aW9uKHZ0LE90LGNuKXsib2JqZWN0Ij09dHlwZW9mIGNuJiZkcyhjbiwoRW4sT24pPT57dGhpcy5zZXRDZWxsTWV0YSh2dCxPdCxPbixFbil9KX0sdGhpcy5zZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxPdCxjbixFbil7aWYoITE9PT1m''@;'; put 'put ''LnJ1bkhvb2tzKCJiZWZvcmVTZXRDZWxsTWV0YSIsdnQsT3QsY24sRW4pKXJldHVybjtsZXQgSm49dnQsUHI9T3Q7dnQ8dGhpcy5jb3VudFJvd3MoKSYmKEpuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLE90PHRoaXMuY291bnRDb2xzKCkmJihQcj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3Qp''@;'; put 'put ''KSxvdC5zZXRDZWxsTWV0YShKbixQcixjbixFbiksZi5ydW5Ib29rcygiYWZ0ZXJTZXRDZWxsTWV0YSIsdnQsT3QsY24sRW4pfSx0aGlzLmdldENlbGxzTWV0YT1mdW5jdGlvbigpe3JldHVybiBvdC5nZXRDZWxsc01ldGEoKX0sdGhpcy5nZXRDZWxsTWV0YT1mdW5jdGlvbih2dCxPdCl7bGV0''@;'; put 'put ''IGNuPXRoaXMudG9QaHlzaWNhbFJvdyh2dCksRW49dGhpcy50b1BoeXNpY2FsQ29sdW1uKE90KTtyZXR1cm4gbnVsbD09PWNuJiYoY249dnQpLG51bGw9PT1FbiYmKEVuPU90KSxvdC5nZXRDZWxsTWV0YShjbixFbix7dmlzdWFsUm93OnZ0LHZpc3VhbENvbHVtbjpPdH0pfSx0aGlzLmdldENl''@;'; put 'put ''bGxNZXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBvdC5nZXRDZWxsc01ldGFBdFJvdyh2dCl9LHRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkPWZ1bmN0aW9uKCl7cmV0dXJuISgib2JqZWN0Ij09PWYuZGF0YVR5cGV8fGV0LmNvbHVtbnMpfSx0aGlzLmdldENlbGxSZW5kZXJl''@;'; put 'put ''cj1mdW5jdGlvbih2dCxPdCl7Y29uc3QgY249Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE90KS5yZW5kZXJlcjp2dC5yZW5kZXJlcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP2JrKGNuKTpMYShjbik/YmsoInRleHQiKTpjbn0sdGhpcy5nZXRDZWxsRWRpdG9yPWZ1''@;'; put 'put ''bmN0aW9uKHZ0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsT3QpLmVkaXRvcjp2dC5lZGl0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9wayhjbik6TGEoY24pP3BrKCJ0ZXh0Iik6Y259LHRoaXMuZ2V0Q2VsbFZhbGlkYXRvcj1mdW5jdGlv''@;'; put 'put ''bih2dCxPdCl7Y29uc3QgY249Im51bWJlciI9PXR5cGVvZiB2dD9mLmdldENlbGxNZXRhKHZ0LE90KS52YWxpZGF0b3I6dnQudmFsaWRhdG9yO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/Rk4oY24pOmNufSx0aGlzLnZhbGlkYXRlQ2VsbHM9ZnVuY3Rpb24odnQpe3RoaXMuX3ZhbGlkYXRl''@;'; put 'put ''Q2VsbHModnQpfSx0aGlzLnZhbGlkYXRlUm93cz1mdW5jdGlvbih2dCxPdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVSb3dzIHBhcmFtZXRlciBgcm93c2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoT3QsdnQpfSx0aGlz''@;'; put 'put ''LnZhbGlkYXRlQ29sdW1ucz1mdW5jdGlvbih2dCxPdCl7aWYoIUFycmF5LmlzQXJyYXkodnQpKXRocm93IG5ldyBFcnJvcigidmFsaWRhdGVDb2x1bW5zIHBhcmFtZXRlciBgY29sdW1uc2AgbXVzdCBiZSBhbiBhcnJheSIpO3RoaXMuX3ZhbGlkYXRlQ2VsbHMoT3Qsdm9pZCAwLHZ0KX0sdGhp''@;'; put 'put ''cy5fdmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCxPdCxjbil7Y29uc3QgRW49bmV3IERyO3Z0JiYoRW4ub25RdWV1ZUVtcHR5PXZ0KTtsZXQgT249Zi5jb3VudFJvd3MoKS0xO2Zvcig7T24+PTA7KXtpZih2b2lkIDAhPT1PdCYmLTE9PT1PdC5pbmRleE9mKE9uKSl7T24tPTE7Y29udGludWV9''@;'; put 'put ''bGV0IEpuPWYuY291bnRDb2xzKCktMTtmb3IoO0puPj0wOyl2b2lkIDA9PT1jbnx8LTEhPT1jbi5pbmRleE9mKEpuKT8oRW4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKGYuZ2V0RGF0YUF0Q2VsbChPbixKbiksZi5nZXRDZWxsTWV0YShPbixKbiksUHI9PntpZigiYm9v''@;'; put 'put ''bGVhbiIhPXR5cGVvZiBQcil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09UHImJihFbi52YWxpZD0hMSksRW4ucmVtb3ZlVmFsaWRhdG9yRm9ybVF1ZXVlKCl9LCJ2YWxpZGF0ZUNlbGxzIiksSm4tPTEpOkpuLT0xO09uLT0x''@;'; put 'put ''fUVuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX0sdGhpcy5nZXRSb3dIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBPdD1ldC5yb3dIZWFkZXJzLGNuPXZ0O3JldHVybiB2b2lkIDAhPT1jbiYmKGNuPWYucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlciIsY24pKSx2b2lkIDA9PT1jbj8oT3Q9W10sdm8o''@;'; put 'put ''Zi5jb3VudFJvd3MoKS0xLEVuPT57T3QucHVzaChmLmdldFJvd0hlYWRlcihFbikpfSkpOkFycmF5LmlzQXJyYXkoT3QpJiZ2b2lkIDAhPT1PdFtjbl0/T3Q9T3RbY25dOlJhKE90KT9PdD1PdChjbik6T3QmJiJzdHJpbmciIT10eXBlb2YgT3QmJiJudW1iZXIiIT10eXBlb2YgT3QmJihPdD1j''@;'; put 'put ''bisxKSxPdH0sdGhpcy5oYXNSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFldC5yb3dIZWFkZXJzfSx0aGlzLmhhc0NvbEhlYWRlcnM9ZnVuY3Rpb24oKXtpZihudWxsIT1ldC5jb2xIZWFkZXJzKXJldHVybiEhZXQuY29sSGVhZGVycztmb3IobGV0IHZ0PTAsT3Q9Zi5jb3VudENvbHMo''@;'; put 'put ''KTt2dDxPdDt2dCsrKWlmKGYuZ2V0Q29sSGVhZGVyKHZ0KSlyZXR1cm4hMDtyZXR1cm4hMX0sdGhpcy5nZXRDb2xIZWFkZXI9ZnVuY3Rpb24odnQpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06LTE7Y29uc3QgY249Zi5ydW5I''@;'; put 'put ''b29rcygibW9kaWZ5Q29sSGVhZGVyIix2dCk7aWYodm9pZCAwPT09Y24pe2NvbnN0IE9yPVtdLCRyPWYuY291bnRDb2xzKCk7Zm9yKGxldCBZcj0wO1lyPCRyO1lyKyspT3IucHVzaChmLmdldENvbEhlYWRlcihZcikpO3JldHVybiBPcn1sZXQgRW49ZXQuY29sSGVhZGVycztjb25zdCBKbj1m''@;'; put 'put ''LnRvUGh5c2ljYWxDb2x1bW4oY24pLFByPWZ1bmN0aW9uKE9yKXtjb25zdCAkcj1bXSxZcj1mLmNvdW50Q29scygpO2xldCBOcj0wO2Zvcig7TnI8WXI7TnIrKylSYShldC5jb2x1bW5zKSYmZXQuY29sdW1ucyhOcikmJiRyLnB1c2goTnIpO3JldHVybiAkcltPcl19KEpuKTtyZXR1cm4hMT09''@;'; put 'put ''PWV0LmNvbEhlYWRlcnM/RW49bnVsbDpldC5jb2x1bW5zJiZSYShldC5jb2x1bW5zKSYmZXQuY29sdW1ucyhQcikmJmV0LmNvbHVtbnMoUHIpLnRpdGxlP0VuPWV0LmNvbHVtbnMoUHIpLnRpdGxlOmV0LmNvbHVtbnMmJmV0LmNvbHVtbnNbSm5dJiZldC5jb2x1bW5zW0puXS50aXRsZT9Fbj1l''@;'; put 'put ''dC5jb2x1bW5zW0puXS50aXRsZTpBcnJheS5pc0FycmF5KGV0LmNvbEhlYWRlcnMpJiZ2b2lkIDAhPT1ldC5jb2xIZWFkZXJzW0puXT9Fbj1ldC5jb2xIZWFkZXJzW0puXTpSYShldC5jb2xIZWFkZXJzKT9Fbj1ldC5jb2xIZWFkZXJzKEpuKTpldC5jb2xIZWFkZXJzJiYic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGV0LmNvbEhlYWRlcnMmJiJudW1iZXIiIT10eXBlb2YgZXQuY29sSGVhZGVycyYmKEVuPU1rKGNuKSksRW49Zi5ydW5Ib29rcygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLEVuLHZ0LE90KSxFbn0sdGhpcy5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3M9ZnVuY3Rpb24odnQpe2xldCBP''@;'; put 'put ''dDtpZih2dD49MCYmKE90PWYuZ2V0Q2VsbE1ldGEoMCx2dCkud2lkdGgpLCh2b2lkIDA9PT1PdHx8T3Q9PT1ldC53aWR0aCkmJihPdD1ldC5jb2xXaWR0aHMpLG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtjYXNlIm9iamVjdCI6T3Q9T3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90''@;'; put 'put ''PU90KHZ0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Q29sV2lkdGg9ZnVuY3Rpb24odnQpe2xldCBPdD1mLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIE90PWYucnVuSG9va3MoIm1vZGlmeUNvbFdpZHRo''@;'; put 'put ''IixPdCx2dCksdm9pZCAwPT09T3QmJihPdD1lVi5ERUZBVUxUX1dJRFRIKSxPdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtsZXQgT3Q9ZXQucm93SGVpZ2h0cztpZihudWxsIT1PdCl7c3dpdGNoKHR5cGVvZiBPdCl7Y2FzZSJvYmplY3QiOk90PU90W3Z0''@;'; put 'put ''XTticmVhaztjYXNlImZ1bmN0aW9uIjpPdD1PdCh2dCl9InN0cmluZyI9PXR5cGVvZiBPdCYmKE90PXBhcnNlSW50KE90LDEwKSl9cmV0dXJuIE90fSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih2dCl7bGV0IE90PWYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIE90''@;'; put 'put ''PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsT3QsdnQpLE90fSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBXLmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBXLmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291''@;'; put 'put ''bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZXQubWF4Q29scyxPdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHZ0LE90KX0s''@;'; put 'put ''dGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZp''@;'; put 'put ''ZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxl''@;'; put 'put ''Q29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRFbXB0eVJvd3M9ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MF0mJmFyZ3VtZW50c1swXSxPdD0wO3JldHVybiB2ayhmLmNvdW50Um93cygpLTEsY249PntpZihmLmlzRW1wdHlSb3coY24pKU90Kz0xO2Vsc2UgaWYoITA9PT12dClyZXR1cm4hMX0pLE90fSx0aGlzLmNvdW50RW1wdHlDb2xzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sT3Q9MDtyZXR1cm4gdmsoZi5jb3VudENvbHMoKS0xLGNuPT57aWYoZi5pc0VtcHR5Q29sKGNuKSlPdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxPdH0sdGhpcy5pc0VtcHR5Um93PWZ1bmN0aW9uKHZ0KXtyZXR1''@;'; put 'put ''cm4gZXQuaXNFbXB0eVJvdy5jYWxsKGYsdnQpfSx0aGlzLmlzRW1wdHlDb2w9ZnVuY3Rpb24odnQpe3JldHVybiBldC5pc0VtcHR5Q29sLmNhbGwoZix2dCl9LHRoaXMuc2VsZWN0Q2VsbD1mdW5jdGlvbih2dCxPdCxjbixFbil7bGV0IE9uPSEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0sSm49IShhcmd1bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtyZXR1cm4hTGEodnQpJiYhTGEoT3QpJiZ0aGlzLnNlbGVjdENlbGxzKFtbdnQsT3QsY24sRW5dXSxPbixKbil9LHRoaXMuc2Vs''@;'; put 'put ''ZWN0Q2VsbHM9ZnVuY3Rpb24oKXtsZXQgY249IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTshMT09PSghKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKSYmKGg9ITApO2NvbnN0''@;'; put 'put ''IEVuPXJuLnNlbGVjdENlbGxzKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dKTtyZXR1cm4gRW4mJmNuJiZmLmxpc3RlbigpLGg9ITEsRW59LHRoaXMuc2VsZWN0Q29sdW1ucz1mdW5jdGlvbih2dCl7cmV0dXJuIHJuLnNlbGVjdENv''@;'; put 'put ''bHVtbnModnQsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnZ0KX0sdGhpcy5zZWxlY3RSb3dzPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gcm4uc2VsZWN0Um93cyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h''@;'; put 'put ''cmd1bWVudHNbMV06dnQpfSx0aGlzLmRlc2VsZWN0Q2VsbD1mdW5jdGlvbigpe3JuLmRlc2VsZWN0KCl9LHRoaXMuc2VsZWN0QWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07Y29uc3QgT3Q9dnQm''@;'; put 'put ''JnRoaXMuaGFzUm93SGVhZGVycygpLGNuPXZ0JiZ0aGlzLmhhc0NvbEhlYWRlcnMoKTtoPSEwLHJuLnNlbGVjdEFsbChPdCxjbiksaD0hMX07Y29uc3QgRm49KHZ0LE90KT0+dnQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LDEsITApO3RoaXMuc2Nyb2xsVmlld3BvcnRUbz1mdW5jdGlv''@;'; put 'put ''bih2dCxPdCl7bGV0IGNuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sRW49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBKbj0hY24sUHI9IUVuO2xldCBPcj12dCwkcj1P''@;'; put 'put ''dDtpZighKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdKXtjb25zdCBSaT1OdW1iZXIuaXNJbnRlZ2VyKHZ0KSxYbz1OdW1iZXIuaXNJbnRlZ2VyKE90KSxHbz1SaT9Gbih0aGlzLnJvd0luZGV4TWFwcGVyLHZ0KTp2b2lkIDAsSnM9WG8/''@;'; put 'put ''Rm4odGhpcy5jb2x1bW5JbmRleE1hcHBlcixPdCk6dm9pZCAwO2lmKG51bGw9PT1Hb3x8bnVsbD09PUpzKXJldHVybiExO09yPVJpP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChHbyk6dm9pZCAwLCRyPVhvP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleChKcyk6dm9pZCAwfWNvbnN0IFlyPU51bWJlci5pc0ludGVnZXIoT3IpLE5yPU51bWJlci5pc0ludGVnZXIoJHIpO3JldHVybiBZciYmTnI/Zi52aWV3LnNjcm9sbFZpZXdwb3J0KGYuX2NyZWF0ZUNlbGxDb29yZHMoT3IsJHIpLEpuLEVuLGNuLFByKTpZ''@;'; put 'put ''ciYmITE9PT1Ocj9mLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KE9yLEpuLGNuKTohKCFOcnx8ITEhPT1ZcikmJmYudmlldy5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseSgkcixFbixQcil9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe2lmKGYuX2NsZWFyVGltZW91dHMoKSxmLl9j''@;'; put 'put ''bGVhckltbWVkaWF0ZXMoKSxmLnZpZXcmJmYudmlldy5kZXN0cm95KCksVyYmVy5kZXN0cm95KCksVz1udWxsLHRoaXMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZGVzdHJveSgpLG90LmNsZWFyQ2FjaGUoKSxyVihmKSl7Y29uc3QgdnQ9dGhpcy5yb290RG9jdW1lbnQucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mbyIpO3Z0JiZ2dC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHZ0KX1nMihmLnJvb3RFbGVtZW50KSxfLmRlc3Ryb3koKSxnZSYmZ2UuZGVzdHJveSgpLGYuYmF0Y2hFeGVjdXRpb24oKCk9PntmLnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxm''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJBbGwoKSxrdC5nZXRJdGVtcygpLmZvckVhY2godnQ9PntsZXRbLE90XT12dDtPdC5kZXN0cm95KCl9KSxrdC5jbGVhcigpLGYucnVuSG9va3MoImFmdGVyRGVzdHJveSIpfSwhMCksc28uZ2V0U2luZ2xldG9uKCkuZGVzdHJveShmKSxkcyhm''@;'; put 'put ''LCh2dCxPdCxjbik9PntSYSh2dCk/Y25bT3RdPWZ1bmN0aW9uIEZyKHZ0KXtyZXR1cm4oKT0+e3Rocm93IG5ldyBFcnJvcihgVGhlICIke3Z0fSIgbWV0aG9kIGNhbm5vdCBiZSBjYWxsZWQgYmVjYXVzZSB0aGlzIEhhbmRzb250YWJsZSBpbnN0YW5jZSBoYXMgYmVlbiBkZXN0cm95ZWRgKX19''@;'; put 'put ''KE90KToiZ3VpZCIhPT1PdCYmKGNuW090XT1udWxsKX0pLGYuaXNEZXN0cm95ZWQ9ITAsVCYmVC5kZXN0cm95KCksVD1udWxsLGllPW51bGwscm49bnVsbCxnZT1udWxsLGY9bnVsbH0sdGhpcy5nZXRBY3RpdmVFZGl0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZ2UuZ2V0QWN0aXZlRWRpdG9yKCl9''@;'; put 'put ''LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKHZ0KXtjb25zdCBPdD1idSh2dCk7cmV0dXJuIlVuZG9SZWRvIj09PU90P3RoaXMudW5kb1JlZG86a3QuZ2V0SXRlbShPdCl9LHRoaXMuZ2V0UGx1Z2luTmFtZT1mdW5jdGlvbih2dCl7cmV0dXJuIHZ0PT09dGhpcy51bmRvUmVkbz90aGlzLnVuZG9S''@;'; put 'put ''ZWRvLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVk6a3QuZ2V0SWQodnQpfSx0aGlzLmdldEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ9LHRoaXMuYWRkSG9vaz1mdW5jdGlvbih2dCxPdCl7c28uZ2V0U2luZ2xldG9uKCkuYWRkKHZ0LE90LGYpfSx0aGlzLmhhc0hvb2s9ZnVuY3Rpb24odnQp''@;'; put 'put ''e3JldHVybiBzby5nZXRTaW5nbGV0b24oKS5oYXModnQsZil8fHNvLmdldFNpbmdsZXRvbigpLmhhcyh2dCl9LHRoaXMuYWRkSG9va09uY2U9ZnVuY3Rpb24odnQsT3Qpe3NvLmdldFNpbmdsZXRvbigpLm9uY2UodnQsT3QsZil9LHRoaXMucmVtb3ZlSG9vaz1mdW5jdGlvbih2dCxPdCl7c28u''@;'; put 'put ''Z2V0U2luZ2xldG9uKCkucmVtb3ZlKHZ0LE90LGYpfSx0aGlzLnJ1bkhvb2tzPWZ1bmN0aW9uKHZ0LE90LGNuLEVuLE9uLEpuLFByKXtyZXR1cm4gc28uZ2V0U2luZ2xldG9uKCkucnVuKGYsdnQsT3QsY24sRW4sT24sSm4sUHIpfSx0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2U9ZnVuY3Rpb24o''@;'; put 'put ''dnQsT3Qpe3JldHVybiBJbmUoZXQubGFuZ3VhZ2UsdnQsT3QpfSx0aGlzLnRvSFRNTD0oKT0+VE4odGhpcyksdGhpcy50b1RhYmxlRWxlbWVudD0oKT0+e2NvbnN0IHZ0PXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB2dC5pbnNlcnRBZGphY2VudEhUTUwo''@;'; put 'put ''ImFmdGVyYmVnaW4iLFROKHRoaXMpKSx2dC5maXJzdEVsZW1lbnRDaGlsZH0sdGhpcy50aW1lb3V0cz1bXSx0aGlzLl9yZWdpc3RlclRpbWVvdXQ9ZnVuY3Rpb24odnQpe2xldCBjbj12dDsiZnVuY3Rpb24iPT10eXBlb2YgY24mJihjbj1zZXRUaW1lb3V0KGNuLGFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKSksdGhpcy50aW1lb3V0cy5wdXNoKGNuKX0sdGhpcy5fY2xlYXJUaW1lb3V0cz1mdW5jdGlvbigpe0RuKHRoaXMudGltZW91dHMsdnQ9PntjbGVhclRpbWVvdXQodnQpfSl9LHRoaXMuaW1tZWRpYXRlcz1bXSx0aGlzLl9y''@;'; put 'put ''ZWdpc3RlckltbWVkaWF0ZT1mdW5jdGlvbih2dCl7dGhpcy5pbW1lZGlhdGVzLnB1c2goc2V0SW1tZWRpYXRlKHZ0KSl9LHRoaXMuX2NsZWFySW1tZWRpYXRlcz1mdW5jdGlvbigpe0RuKHRoaXMuaW1tZWRpYXRlcyx2dD0+e2NsZWFySW1tZWRpYXRlKHZ0KX0pfSx0aGlzLl9yZWZyZXNoQm9y''@;'; put 'put ''ZGVycz1mdW5jdGlvbigpe2xldCBPdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2dlLmRlc3Ryb3lFZGl0b3IoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSksZi52aWV3LnJl''@;'; put 'put ''bmRlcigpLE90JiZybi5pc1NlbGVjdGVkKCkmJmdlLnByZXBhcmVFZGl0b3IoKX0sdGhpcy5pc1J0bD1mdW5jdGlvbigpe3JldHVybiJydGwiPT09Zi5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUoZi5yb290RWxlbWVudCkuZGlyZWN0aW9ufSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9O2NvbnN0IFFuPSREZSh7aGFuZGxlRXZlbnQ6dnQ9PmYuaXNMaXN0ZW5pbmcoKSYmdm9pZCAwIT09dnQ/LmtleSxiZWZvcmVLZXlEb3duOnZ0PT50aGlzLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVLZXlEb3duIix2dCksYWZ0ZXJLZXlEb3duOnZ0PT57dGhpcy5pc0Rlc3Ryb3llZHx8Zi5ydW5Ib29rcygiYWZ0ZXJEb2N1bWVudEtleURvd24iLHZ0KX0sb3duZXJXaW5kb3c6dGhpcy5yb290V2luZG93fSk7dGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LHZ0PT57ITE9PT12dC5jdHJsS2V5JiYhMT09PXZ0Lm1ldGFLZXkmJlFuLnJlbGVhc2VQcmVzc2VkS2V5cygpfSksdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gUW59O2NvbnN0IE1yPVFuLmFkZENvbnRleHQoImdyaWQiKSxfcj17cnVuT25seUlmOigpPT5LaShm''@;'; put 'put ''LmdldFNlbGVjdGVkKCkpJiZmLmNvdW50UmVuZGVyZWRSb3dzKCk+MCYmZi5jb3VudFJlbmRlcmVkQ29scygpPjAsZ3JvdXA6cURlfTtRbi5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLE1yLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+e2Yuc2VsZWN0QWxsKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRSYW5nZSgpLHtyb3c6T3QsY29sOmNufT12dFt2dC5sZW5ndGgtMV0uaGlnaGxpZ2h0LEVuPWYuZ2V0RGF0YUF0Q2VsbChPdCxjbiks''@;'; put 'put ''T249bmV3IE1hcDtmb3IobGV0IEpuPTA7Sm48dnQubGVuZ3RoO0puKyspdnRbSm5dLmZvckFsbCgoUHIsT3IpPT57aWYoUHI+PTAmJk9yPj0wJiYoUHIhPT1PdHx8T3IhPT1jbikpe2NvbnN0e3JlYWRPbmx5OiRyfT1mLmdldENlbGxNZXRhKFByLE9yKTskcnx8T24uc2V0KGAke1ByfXgke09y''@;'; put 'put ''fWAsW1ByLE9yLEVuXSl9fSk7Zi5zZXREYXRhQXRDZWxsKEFycmF5LmZyb20oT24udmFsdWVzKCkpKX0scnVuT25seUlmOigpPT5mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0Q2VsbHNDb3VudCgpPjF9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntybi50cmFuc2Zvcm1T''@;'; put 'put ''dGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntybi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKSxmLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LmNvbCkpfX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtRW5kKC0xLDApfX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNh''@;'; put 'put ''bGxiYWNrOigpPT57Y29uc3R7ZnJvbTp2dCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7cm4uc2V0UmFuZ2VTdGFydCh2dC5jbG9uZSgpKSxybi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGNuLE90LmNvbCkpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtU3RhcnQo''@;'; put 'put ''MSwwKX19LHtrZXlzOltbIkFycm93RG93biIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygp''@;'; put 'put ''LTEsLTEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e3JuLnRyYW5zZm9ybUVuZCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwiU2hpZnQiLCJDb250cm9sL01ldGEiXV0sY2Fw''@;'; put 'put ''dHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOnZ0LHRvOk90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb3VudFJvd3MoKS0xLC0xKTtybi5zZXRSYW5nZVN0YXJ0KHZ0LmNsb25lKCkp''@;'; put 'put ''LHJuLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2Fs''@;'; put 'put ''bGJhY2s6KCk9Pntybi50cmFuc2Zvcm1TdGFydCgwLC0xKmYuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dMZWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hs''@;'; put 'put ''aWdodC5yb3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uZi5pc1J0bCgpP1tmLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtybi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHModnQsT3QpKX19LHtrZXlzOltbIkFycm93TGVmdCIs''@;'; put 'put ''IlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtRW5kKDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0e2Zyb206dnQsdG86T3R9''@;'; put 'put ''PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO3JuLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSkscm4uc2V0UmFuZ2VFbmQoZi5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhPdC5yb3csY24pKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntybi50cmFuc2Zvcm1T''@;'; put 'put ''dGFydCgwLGYuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LE90PWYuY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7cm4uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE90KSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pnty''@;'; put 'put ''bi50cmFuc2Zvcm1FbmQoMCxmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0e2Zyb206dnQsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxj''@;'; put 'put ''bj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/WzAsMV06W2YuY291bnRDb2xzKCktMSwtMV0pO3JuLnNldFJhbmdlU3RhcnQodnQuY2xvbmUoKSkscm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdC5yb3csY24pKX0s''@;'; put 'put ''cnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCB2dD1wYXJzZUludChmLmdldFNldHRpbmdz''@;'; put 'put ''KCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLE90PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LDEpO3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdCxjbikp''@;'; put 'put ''fSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siSG9tZSIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57cm4uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhybi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5m''@;'; put 'put ''cm9tLnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpKSl9fSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkUm93''@;'; put 'put ''c1RvcCwxMCksT3Q9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCwxKSxFbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwxKTty''@;'; put 'put ''bi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sRW4pKX0scnVuT25seUlmOigpPT5mLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e3JuLnNldFJhbmdlU3Rh''@;'; put 'put ''cnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxmLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygpLTEsLTEpKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFpblRhYmxlTm90''@;'; put 'put ''RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJFbmQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e3JuLnNldFJhbmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMocm4uc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuZnJvbS5yb3csZi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgoZi5jb3VudENvbHMoKS0xLC0xKSkpfX0se2tleXM6W1siRW5kIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgdnQ9cGFyc2VJbnQoZi5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSwxMCksT3Q9Zi5yb3dJbmRl''@;'; put 'put ''eE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb3VudFJvd3MoKS12dC0xLC0xKSxjbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygpLTEsLTEpO3JuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhPdCxj''@;'; put 'put ''bikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtU3RhcnQoLWYuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZVVwIiwiU2hp''@;'; put 'put ''ZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzp2dH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLE90PU1hdGgubWF4KHZ0LnJvdy1mLmNvdW50VmlzaWJsZVJvd3MoKSwwKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwxKTtpZihudWxsIT09Y24p''@;'; put 'put ''e2NvbnN0IEVuPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sdnQuY29sKSxPbj12dC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksSm49TWF0aC5tYXgoRW4ucm93LU9uLDApO3JuLnNldFJhbmdlRW5kKEVuKSxmLnNjcm9sbFZpZXdwb3J0VG8oSm4pfX19LHtrZXlzOltbIlBh''@;'; put 'put ''Z2VEb3duIl1dLGNhbGxiYWNrOigpPT57cm4udHJhbnNmb3JtU3RhcnQoZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlRG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57Y29uc3R7dG86dnR9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxPdD1NYXRoLm1pbih2dC5y''@;'; put 'put ''b3crZi5jb3VudFZpc2libGVSb3dzKCksZi5jb3VudFJvd3MoKS0xKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChPdCwtMSk7aWYobnVsbCE9PWNuKXtjb25zdCBFbj1mLl9jcmVhdGVDZWxsQ29vcmRzKGNuLHZ0LmNvbCksT249dnQucm93LWYudmlldy5n''@;'; put 'put ''ZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEpuPU1hdGgubWluKEVuLnJvdy1PbixmLmNvdW50Um93cygpLTEpO3JuLnNldFJhbmdlRW5kKEVuKSxmLnNjcm9sbFZpZXdwb3J0VG8oSm4pfX19LHtrZXlzOltbIlRhYiJdXSxjYWxsYmFjazp2dD0+e2NvbnN0IE90PSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBldC50YWJNb3Zlcz9ldC50YWJNb3Zlcyh2dCk6ZXQudGFiTW92ZXM7cm4udHJhbnNmb3JtU3RhcnQoT3Qucm93LE90LmNvbCwhMCl9fSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazp2dD0+e2NvbnN0IE90PSJmdW5jdGlvbiI9PXR5cGVvZiBldC50YWJNb3Zlcz9ldC50YWJN''@;'; put 'put ''b3Zlcyh2dCk6ZXQudGFiTW92ZXM7cm4udHJhbnNmb3JtU3RhcnQoLU90LnJvdywtT3QuY29sKX19XSxfciksUE4oKS5mb3JFYWNoKHZ0PT57Y29uc3QgT3Q9dXkodnQpO2t0LmFkZEl0ZW0odnQsbmV3IE90KHRoaXMpKX0pLHNvLmdldFNpbmdsZXRvbigpLnJ1bihmLCJjb25zdHJ1Y3QiKX1j''@;'; put 'put ''b25zdCBabmU9e19ob29rc1N0b3JhZ2U6T2JqZWN0LmNyZWF0ZShudWxsKSxhZGRIb29rKGMsbCl7cmV0dXJuIHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8KHRoaXMuX2hvb2tzU3RvcmFnZVtjXT1bXSksdGhpcy5ob3QuYWRkSG9vayhjLGwpLHRoaXMuX2hvb2tzU3RvcmFnZVtjXS5wdXNoKGwp''@;'; put 'put ''LHRoaXN9LHJlbW92ZUhvb2tzQnlLZXkoYyl7RG4odGhpcy5faG9va3NTdG9yYWdlW2NdfHxbXSxsPT57dGhpcy5ob3QucmVtb3ZlSG9vayhjLGwpfSl9LGNsZWFySG9va3MoKXtkcyh0aGlzLl9ob29rc1N0b3JhZ2UsKGMsbCk9PnRoaXMucmVtb3ZlSG9va3NCeUtleShsKSksdGhpcy5faG9v''@;'; put 'put ''a3NTdG9yYWdlPXt9fX07ZmgoWm5lLCJNSVhJTl9OQU1FIiwiaG9va3NSZWZSZWdpc3RlcmVyIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFhEZT1abmUsWWM9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdB''@;'; put 'put ''SVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KSxHQj0iYmFzZUVkaXRvciI7Y2xhc3Mgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJiYXNlIn1jb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuaW5zdGFuY2U9bCx0aGlzLnN0YXRl''@;'; put 'put ''PVljLlZJUkdJTix0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCx0aGlzLlREPW51bGwsdGhpcy5yb3c9bnVsbCx0aGlzLmNvbD1udWxsLHRoaXMucHJvcD1udWxsLHRoaXMub3JpZ2luYWxWYWx1ZT1udWxsLHRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXM9bnVsbCx0aGlzLmluaXQoKX1fZmlyZUNhbGxiYWNrcyhsKXt0aGlzLl9jbG9zZUNhbGxiYWNrJiYodGhpcy5fY2xvc2VDYWxsYmFjayhsKSx0aGlzLl9jbG9zZUNhbGxiYWNrPW51bGwpfWluaXQoKXt9Z2V0VmFsdWUoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGdldFZhbHVlKCkg''@;'; put 'put ''bWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1zZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3Igc2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfW9wZW4oKXt0aHJvdyBFcnJvcigiRWRpdG9yIG9wZW4oKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfWNsb3NlKCl7dGhyb3cgRXJyb3Io''@;'; put 'put ''IkVkaXRvciBjbG9zZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9cHJlcGFyZShsLGEsZCxoLGYsXyl7dGhpcy5URD1oLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnByb3A9ZCx0aGlzLm9yaWdpbmFsVmFsdWU9Zix0aGlzLmNlbGxQcm9wZXJ0aWVzPV8sdGhpcy5zdGF0ZT1ZYy5WSVJH''@;'; put 'put ''SU59ZXh0ZW5kKCl7cmV0dXJuIGNsYXNzIGV4dGVuZHMgdGhpcy5jb25zdHJ1Y3Rvcnt9fXNhdmVWYWx1ZShsLGEpe2xldCBkLGgsZixfO2lmKGEpe2NvbnN0IHdlPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO2Q9TWF0aC5tYXgoTWF0aC5taW4od2VbMF0sd2VbMl0pLDApLGg9TWF0aC5t''@;'; put 'put ''YXgoTWF0aC5taW4od2VbMV0sd2VbM10pLDApLGY9TWF0aC5tYXgod2VbMF0sd2VbMl0pLF89TWF0aC5tYXgod2VbMV0sd2VbM10pfWVsc2VbZCxoLGYsX109W3RoaXMucm93LHRoaXMuY29sLG51bGwsbnVsbF07Y29uc3QgVD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5R2V0Q2VsbENvb3Jk''@;'; put 'put ''cyIsZCxoKTtBcnJheS5pc0FycmF5KFQpJiYoW2QsaF09VCk7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZ2U9e3J1bk9ubHlJZjooKT0+S2kodGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6R0J9O3RoaXMuaXNJbkZ1bGxF''@;'; put 'put ''ZGl0TW9kZSgpJiZpZS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNm''@;'; put 'put ''b3JtU3RhcnQoMSwwKX19LHtrZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKnRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCx0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fV0sZ2UpLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KGQsaCxsLGYsXywiZWRpdCIpfWJlZ2luRWRpdGluZyhsLGEpe2lmKHRoaXMuc3RhdGUhPT1ZYy5WSVJHSU4pcmV0dXJu''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5ob3QsaD1kLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLGY9ZC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKTtpZihkLnZpZXcuc2Nyb2xsVmlld3BvcnQoZC5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhoLGYpKSx0aGlzLnN0YXRlPVljLkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IF89InN0cmluZyI9PXR5cGVvZiBsP2w6X2wodGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKF8pfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9''@;'; put 'put ''ITAsdGhpcy5mb2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2xldCBoO2lmKGQpe2NvbnN0IFQ9dGhpcy5fY2xvc2VDYWxsYmFjazt0aGlzLl9jbG9zZUNhbGxiYWNrPVc9''@;'; put 'put ''PntUJiZUKFcpLGQoVyksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX19aWYodGhpcy5pc1dhaXRpbmcoKSlyZXR1cm47Y29uc3QgXz10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtpZihfLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoR0IpLF8ucmVtb3Zl''@;'; put 'put ''U2hvcnRjdXRzQnlHcm91cChtayksdGhpcy5zdGF0ZSE9PVljLlZJUkdJTil7aWYodGhpcy5zdGF0ZT09PVljLkVESVRJTkcpe2lmKGwpcmV0dXJuIHRoaXMuY2FuY2VsQ2hhbmdlcygpLHZvaWQgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtjb25zdCBUPXRoaXMuZ2V0VmFsdWUoKTtoPXRoaXMu''@;'; put 'put ''Y2VsbFByb3BlcnRpZXMudHJpbVdoaXRlc3BhY2U/W1sic3RyaW5nIj09dHlwZW9mIFQ/U3RyaW5nLnByb3RvdHlwZS50cmltLmNhbGwoVHx8IiIpOlRdXTpbW1RdXSx0aGlzLnN0YXRlPVljLldBSVRJTkcsdGhpcy5zYXZlVmFsdWUoaCxhKSx0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKHRo''@;'; put 'put ''aXMuY2VsbFByb3BlcnRpZXMpP3RoaXMuaG90LmFkZEhvb2tPbmNlKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsVz0+e3RoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKFcpfSk6KHRoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCEwKSl9fWVsc2Ug''@;'; put 'put ''dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuX2ZpcmVDYWxsYmFja3MoITApfSl9Y2FuY2VsQ2hhbmdlcygpe3RoaXMuc3RhdGU9WWMuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRpdG9yKCl9ZGlzY2FyZEVkaXRvcihsKXt0aGlzLnN0YXRlPT09WWMuRklOSVNIRUQmJighMT09''@;'; put 'put ''PWwmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPVljLkVESVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3Bl''@;'; put 'put ''bmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPVljLlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9ZW5hYmxlRnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVs''@;'; put 'put ''bEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0ZT09PVljLldBSVRJTkd9Z2V0RWRpdGVkQ2VsbFJlY3QoKXt2YXIgbDtjb25zdCBh''@;'; put 'put ''PXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFhKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmhvdC52aWV3Ll93dCxmPXRoaXMuaG90LnJvb3RXaW5kb3csXz1xbChhKSxUPXdhKGEpLFc9cWwodGhpcy5ob3Qucm9vdEVsZW1lbnQpLGllPXdhKHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50KSxnZT1kLnRvcE92ZXJsYXkuaG9sZGVyLHdlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixFZT1nZSE9PWY/Z2Uuc2Nyb2xsVG9wOjAsWmU9d2UhPT1mP3dlLnNjcm9sbExlZnQ6MCxvdD1mLmlubmVyV2lkdGgtVy5sZWZ0LWllLHt3dFRhYmxlOmV0fT1udWxsIT09''@;'; put 'put ''KGw9ZC5nZXRQYXJlbnRPdmVybGF5KGEpKSYmdm9pZCAwIT09bD9sOnRoaXMuaG90LnZpZXcuX3d0LHl0PWV0Lm5hbWUsa3Q9WyJtYXN0ZXIiLCJpbmxpbmVfc3RhcnQiXS5pbmNsdWRlcyh5dCk/RWU6MCxTdD1bIm1hc3RlciIsInRvcCIsImJvdHRvbSJdLmluY2x1ZGVzKHl0KT9aZTowO2xl''@;'; put 'put ''dCBybj1fLnRvcC1XLnRvcC0oXy50b3A9PT1XLnRvcD8wOjEpLWt0LHZuPTA7dm49dGhpcy5ob3QuaXNSdGwoKT9mLmlubmVyV2lkdGgtXy5sZWZ0LVQtb3QtMStTdDpfLmxlZnQtVy5sZWZ0LTEtU3QsWyJ0b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHl0KSYmKHJu''@;'; put 'put ''Kz1kLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeXQpJiYodm4rPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSkpO2NvbnN0IE5uPXRoaXMuaG90''@;'; put 'put ''Lmhhc0NvbEhlYWRlcnMoKSxjcj10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxEcj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMuY29sKSxsaT10aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpOyhObiYmY3I8PTB8fGNyPT09bGkpJiYocm4rPTEpLERyPD0wJiYodm4rPTEpO2NvbnN0IG1yPWgucm93c1JlbmRlckNhbGN1bGF0''@;'; put 'put ''b3Iuc3RhcnRQb3NpdGlvbixFaT1oLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sWnI9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSksRm49ZC50b3BPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksRnI9SWModGhpcy5ob3Qu''@;'; put 'put ''cm9vdERvY3VtZW50KSxRbj1hLm9mZnNldFRvcCttci1GbjtsZXQgTXI9MDtpZih0aGlzLmhvdC5pc1J0bCgpKXtjb25zdCBZcj1hLm9mZnNldExlZnQ7TXI9WXI+PTA/ZXQuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoWXIpLE1yKz1FaS1aci1UfWVsc2UgTXI9YS5vZmZzZXRM''@;'; put 'put ''ZWZ0K0VpLVpyO2NvbnN0IF9yPXpwKHRoaXMuVEQsdGhpcy5ob3Qucm9vdFdpbmRvdyksdnQ9dGhpcy5ob3QuaXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsT3Q9cGFyc2VJbnQoX3JbdnRdLDEwKT4wPzA6MSxjbj1wYXJzZUludChfci5ib3JkZXJUb3BXaWR0''@;'; put 'put ''aCwxMCk+MD8wOjEsRW49d2EoYSkrT3QsT249YWwoYSkrY24sSm49ZHRlKGdlKT9GcjowLFByPWh0ZSh3ZSk/RnI6MCxPcj10aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKE1yKS1KbitPdDtyZXR1cm57dG9wOnJuLHN0YXJ0OnZuLGhlaWdodDpPbixtYXhIZWlnaHQ6''@;'; put 'put ''TWF0aC5tYXgodGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQoUW4pLVByK2NuLDIzKSx3aWR0aDpFbixtYXhXaWR0aDpPcn19Z2V0RWRpdGVkQ2VsbHNMYXllckNsYXNzKCl7c3dpdGNoKHRoaXMuY2hlY2tFZGl0b3JTZWN0aW9uKCkpe2Nhc2UiaW5saW5lLXN0YXJ0''@;'; put 'put ''IjpyZXR1cm4iaHRfY2xvbmVfbGVmdCBodF9jbG9uZV9pbmxpbmVfc3RhcnQiO2Nhc2UiYm90dG9tIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tIjtjYXNlImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyIGh0X2Nsb25lX2JvdHRv''@;'; put 'put ''bV9pbmxpbmVfc3RhcnRfY29ybmVyIjtjYXNlInRvcCI6cmV0dXJuImh0X2Nsb25lX3RvcCI7Y2FzZSJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX3RvcF9sZWZ0X2Nvcm5lciBodF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciI7ZGVmYXVsdDpyZXR1cm4i''@;'; put 'put ''aHRfY2xvbmVfbWFzdGVyIn19Z2V0RWRpdGVkQ2VsbCgpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsKHRoaXMucm93LHRoaXMuY29sLCEwKX1jaGVja0VkaXRvclNlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBhPSIiO3JldHVybiB0aGlzLnJvdzx0aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcD9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/InRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjoidG9wIjp0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSYmdGhpcy5yb3c+PWwtdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20/YT10aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6ImJvdHRvbSI6dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENv''@;'; put 'put ''bHVtbnNTdGFydCYmKGE9ImlubGluZS1zdGFydCIpLGF9fWZ1bmN0aW9uIFFEZSgpe3ZhciBsLGM9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwfSxhPWRvY3VtZW50LmJvZHksZD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksaD1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJTUEFOIiksZj1mdW5jdGlvbihFZSxaZSxvdCl7RWUuYWRkRXZlbnRMaXN0ZW5lcihaZSxvdCwhMSl9LF89ZnVuY3Rpb24oRWUsWmUsb3Qpe0VlLnJlbW92ZUV2ZW50TGlzdGVuZXIoWmUsb3QsITEpfSxUPWZ1bmN0aW9uKEVlKXt2YXIgWmUsb3Q7RWU/L15b''@;'; put 'put ''YS16QS1aIFwuLFxcXC9cfDAtOV0kLy50ZXN0KEVlKXx8KEVlPSIuIik6RWU9IiIsdm9pZCAwIT09ZC50ZXh0Q29udGVudD9kLnRleHRDb250ZW50PWwudmFsdWUrRWU6ZC5kYXRhPWwudmFsdWUrRWUsaC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGguc3R5bGUuZm9udFNpemU9d2UobCku''@;'; put 'put ''Zm9udFNpemUsaC5zdHlsZS5mb250RmFtaWx5PXdlKGwpLmZvbnRGYW1pbHksaC5zdHlsZS53aGl0ZVNwYWNlPSJwcmUiLGEuYXBwZW5kQ2hpbGQoaCksWmU9aC5jbGllbnRXaWR0aCsyLGEucmVtb3ZlQ2hpbGQoaCksbC5zdHlsZS5oZWlnaHQ9Yy5taW5IZWlnaHQrInB4IixsLnN0eWxlLndp''@;'; put 'put ''ZHRoPWMubWluV2lkdGg+WmU/Yy5taW5XaWR0aCsicHgiOlplPmMubWF4V2lkdGg/Yy5tYXhXaWR0aCsicHgiOlplKyJweCIsYy5taW5IZWlnaHQ+KG90PWwuc2Nyb2xsSGVpZ2h0P2wuc2Nyb2xsSGVpZ2h0LTE6MCk/bC5zdHlsZS5oZWlnaHQ9Yy5taW5IZWlnaHQrInB4IjpjLm1heEhlaWdo''@;'; put 'put ''dDxvdD8obC5zdHlsZS5oZWlnaHQ9Yy5tYXhIZWlnaHQrInB4IixsLnN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIpOmwuc3R5bGUuaGVpZ2h0PW90KyJweCJ9LFc9ZnVuY3Rpb24oKXt3aW5kb3cuc2V0VGltZW91dChULDApfTtmdW5jdGlvbiB3ZShFZSl7cmV0dXJuIEVlLmN1cnJlbnRTdHls''@;'; put 'put ''ZXx8ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShFZSl9cmV0dXJue2luaXQ6ZnVuY3Rpb24oRWUsWmUsb3QpeyFmdW5jdGlvbihFZSxaZSxvdCl7bD1FZSxmdW5jdGlvbihFZSl7aWYoRWUmJkVlLm1pbkhlaWdodClpZigiaW5oZXJpdCI9PUVlLm1pbkhlaWdodCljLm1p''@;'; put 'put ''bkhlaWdodD1sLmNsaWVudEhlaWdodDtlbHNle3ZhciBaZT1wYXJzZUludChFZS5taW5IZWlnaHQpO2lzTmFOKFplKXx8KGMubWluSGVpZ2h0PVplKX1pZihFZSYmRWUubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09RWUubWF4SGVpZ2h0KWMubWF4SGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7''@;'; put 'put ''dmFyIG90PXBhcnNlSW50KEVlLm1heEhlaWdodCk7aXNOYU4ob3QpfHwoYy5tYXhIZWlnaHQ9b3QpfWlmKEVlJiZFZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PUVlLm1pbldpZHRoKWMubWluV2lkdGg9bC5jbGllbnRXaWR0aDtlbHNle3ZhciBldD1wYXJzZUludChFZS5taW5XaWR0aCk7aXNO''@;'; put 'put ''YU4oZXQpfHwoYy5taW5XaWR0aD1ldCl9aWYoRWUmJkVlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09RWUubWF4V2lkdGgpYy5tYXhXaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIHl0PXBhcnNlSW50KEVlLm1heFdpZHRoKTtpc05hTih5dCl8fChjLm1heFdpZHRoPXl0KX1oLmZpcnN0Q2hp''@;'; put 'put ''bGR8fChoLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsaC5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGguYXBwZW5kQ2hpbGQoZCkpfShaZSksIlRFWFRBUkVBIj09bC5ub2RlTmFtZSYmKGwuc3R5bGUucmVzaXplPSJub25lIixsLnN0eWxlLm92ZXJmbG93WT0iIixsLnN0eWxlLmhlaWdo''@;'; put 'put ''dD1jLm1pbkhlaWdodCsicHgiLGwuc3R5bGUubWluV2lkdGg9Yy5taW5XaWR0aCsicHgiLGwuc3R5bGUubWF4V2lkdGg9Yy5tYXhXaWR0aCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iKSxvdCYmKGYobCwiY2hhbmdlIixUKSxmKGwsImN1dCIsVyksZihsLCJwYXN0ZSIsVyksZihs''@;'; put 'put ''LCJkcm9wIixXKSxmKGwsImtleWRvd24iLFcpLGYobCwiZm9jdXMiLFQpLGYobCwiY29tcG9zaXRpb25zdGFydCIsVyksZihsLCJjb21wb3NpdGlvbnVwZGF0ZSIsVyksZihsLCJjb21wb3NpdGlvbmVuZCIsVykpLFQoKX0oRWUsWmUsb3QpfSx1bk9ic2VydmU6ZnVuY3Rpb24oKXtfKGwsImNo''@;'; put 'put ''YW5nZSIsVCksXyhsLCJjdXQiLFcpLF8obCwicGFzdGUiLFcpLF8obCwiZHJvcCIsVyksXyhsLCJrZXlkb3duIixXKSxfKGwsImZvY3VzIixUKSxfKGwsImNvbXBvc2l0aW9uc3RhcnQiLFcpLF8obCwiY29tcG9zaXRpb251cGRhdGUiLFcpLF8obCwiY29tcG9zaXRpb25lbmQiLFcpfSxyZXNp''@;'; put 'put ''emU6VH19ZnVuY3Rpb24gWW5lKGMsbCl7Y29uc3QgYT1oTihsKSxkPWwudmFsdWUuc3BsaXQoIlxuIik7bGV0IGg9YSxmPTA7Zm9yKGxldCBfPTA7XzxkLmxlbmd0aDtfKyspezAhPT1fJiYoZis9ZFtfLTFdLmxlbmd0aCsxKTtjb25zdCBXPWYrZFtfXS5sZW5ndGg7aWYoImhvbWUiPT09Yz9o''@;'; put 'put ''PWY6ImVuZCI9PT1jJiYoaD1XKSxhPD1XKWJyZWFrfW95KGwsaCl9VGEodjcsWERlKTtjb25zdCBaaz0iaHRfZWRpdG9yX2hpZGRlbiIsV25lPSJ0ZXh0RWRpdG9yIjtjbGFzcyBrZyBleHRlbmRzIHY3e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuYXV0b1Jlc2l6ZT1RRGUoKSx0aGlzLlRFWFRBUkVBPXZvaWQgMCx0aGlzLnRleHRhcmVhU3R5bGU9dm9pZCAwLHRoaXMuVEVYVEFSRUFfUEFSRU5UPXZvaWQgMCx0aGlzLnRleHRhcmVhUGFyZW50U3R5bGU9''@;'; put 'put ''dm9pZCAwLHRoaXMubGF5ZXJDbGFzcz12b2lkIDAsdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMuYmluZEV2ZW50cygpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT50aGlzLmRlc3Ryb3koKSl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5URVhUQVJFQS52YWx1ZX1z''@;'; put 'put ''ZXRWYWx1ZShsKXt0aGlzLlRFWFRBUkVBLnZhbHVlPWx9b3Blbigpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5hZGRIb29r''@;'; put 'put ''KCJhZnRlckRvY3VtZW50S2V5RG93biIsYT0+dGhpcy5vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGEpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLmF1dG9SZXNpemUudW5PYnNlcnZlKCksdGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLlRF''@;'; put 'put ''WFRBUkVBJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhpZGVFZGl0YWJsZUVsZW1lbnQoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImFmdGVyRG9jdW1lbnRLZXlEb3duIil9cHJlcGFyZShsLGEsZCxoLGYsXyl7Y29uc3QgVD10aGlzLnN0YXRl''@;'; put 'put ''O2lmKHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pLCFfLnJlYWRPbmx5KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCEwKTtjb25zdHthbGxvd0ludmFsaWQ6VyxmcmFnbWVudFNlbGVjdGlvbjppZX09XztXJiYodGhpcy5URVhUQVJFQS52YWx1ZT0iIiksVCE9PVljLkZJTklTSEVEJiZ0aGlz''@;'; put 'put ''LmhpZGVFZGl0YWJsZUVsZW1lbnQoKSwhaWUmJiFtMigpJiZ0aGlzLmZvY3VzKCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1ZYy5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2Vs''@;'; put 'put ''ZWN0KCksb3kodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksdGhpcy5URVhUQVJFQS5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoImRhdGEtaG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS50YWJJbmRleD0tMSxwaSh0aGlzLlRFWFRBUkVBLCJoYW5kc29udGFibGVJbnB1dCIpLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFy''@;'; put 'put ''ZWFTdHlsZS5oZWlnaHQ9MCx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLlRFWFRBUkVBX1BBUkVOVD1sLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULCJoYW5kc29udGFibGVJbnB1dEhvbGRlciIpLEJvKHRoaXMuVEVYVEFS''@;'; put 'put ''RUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykmJldvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykscGkodGhpcy5URVhUQVJFQV9QQVJFTlQsWmspLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZT10aGlzLlRFWFRBUkVBX1BBUkVOVC5zdHlsZSx0aGlzLlRFWFRBUkVBX1BB''@;'; put 'put ''UkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKSx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBX1BBUkVOVCl9aGlkZUVkaXRhYmxlRWxlbWVudCgpe0N0ZSgpJiYodGhpcy50ZXh0YXJlYVN0eWxlLnRleHRJbmRlbnQ9Ii05OTk5OXB4IiksdGhpcy50''@;'; put 'put ''ZXh0YXJlYVN0eWxlLm92ZXJmbG93WT0idmlzaWJsZSIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjAiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IjFweCIsV28odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxwaSh0aGlzLlRFWFRBUkVB''@;'; put 'put ''X1BBUkVOVCxaayl9c2hvd0VkaXRhYmxlRWxlbWVudCgpe3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5oZWlnaHQ9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm92ZXJmbG93PSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5wb3NpdGlvbj0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5''@;'; put 'put ''bGVbdGhpcy5ob3QuaXNSdGwoKT8ibGVmdCI6InJpZ2h0Il09ImF1dG8iLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS5vcGFjaXR5PSIxIix0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iIix0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJoaWRkZW4iO2NvbnN0IGw9dGhpcy5U''@;'; put 'put ''RVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTt2byhsLmxlbmd0aC0xLGQ9PntpZihCbyhsW2RdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0pLEJvKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFprKSYmV28odGhpcy5URVhUQVJFQV9QQVJFTlQsWmspLGE/KHRo''@;'; put 'put ''aXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLHBpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxwaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3Mp''@;'; put 'put ''KX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1y''@;'; put 'put ''ZWZyZXNoRGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PVljLkVESVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVy''@;'; put 'put ''biB2b2lkKGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1heFdpZHRoOmYsaGVpZ2h0Ol8sbWF4SGVpZ2h0OlR9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJl''@;'; put 'put ''bnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBXPXpwKHRoaXMuVEQsdGhpcy5ob3Qucm9vdFdpbmRvdyk7dGhpcy5URVhUQVJFQS5zdHlsZS5mb250U2l6ZT1XLmZvbnRTaXplLHRoaXMuVEVY''@;'; put 'put ''VEFSRUEuc3R5bGUuZm9udEZhbWlseT1XLmZvbnRGYW1pbHksdGhpcy5URVhUQVJFQS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGhpcy5URC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7Y29uc3QgaWU9enAodGhpcy5URVhUQVJFQSksZ2U9cGFyc2VJbnQoaWUucGFkZGluZ0xlZnQsMTApK3BhcnNl''@;'; put 'put ''SW50KGllLnBhZGRpbmdSaWdodCwxMCksd2U9cGFyc2VJbnQoaWUucGFkZGluZ1RvcCwxMCkrcGFyc2VJbnQoaWUucGFkZGluZ0JvdHRvbSwxMCksWmU9Xy13ZSxvdD1mLWdlLGV0PVQtd2U7dGhpcy5hdXRvUmVzaXplLmluaXQodGhpcy5URVhUQVJFQSx7bWluV2lkdGg6TWF0aC5taW4oaC1n''@;'; put 'put ''ZSxvdCksbWluSGVpZ2h0Ok1hdGgubWluKFplLGV0KSxtYXhXaWR0aDpvdCxtYXhIZWlnaHQ6ZXR9LCEwKX1iaW5kRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJjdXQiLGw9Pmwuc3RvcFByb3BhZ2F0aW9uKCkpLHRoaXMuZXZlbnRN''@;'; put 'put ''YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwicGFzdGUiLGw9Pmwuc3RvcFByb3BhZ2F0aW9uKCkpLGJOKCkmJnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5URVhUQVJFQSwiZm9jdXNvdXQiLCgpPT50aGlzLmZpbmlzaEVkaXRpbmcoITEpKSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6''@;'; put 'put ''ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5mb2N1cygpfSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKCl7fWRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGg9KCk9Pnt0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImlu''@;'; put 'put ''c2VydFRleHQiLCExLCJcbiIpfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaG90LmdldFNldHRpbmdzKCksVD0iZnVuY3Rpb24iPT10eXBlb2YgXy50YWJNb3Zlcz9fLnRhYk1vdmVzKGYpOl8udGFiTW92ZXM7dGhpcy5ob3Quc2Vs''@;'; put 'put ''ZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KFQucm93LFQuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaG90LmdldFNldHRpbmdzKCksVD0iZnVuY3Rpb24iPT10eXBlb2YgXy50YWJNb3Zlcz9fLnRhYk1vdmVzKGYpOl8udGFiTW92ZXM7''@;'; put 'put ''dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC1ULnJvdywtVC5jb2wpfX0se2tleXM6W1siQ29udHJvbCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6Zj0+IXRoaXMuaG90LnNlbGVjdGlvbi5pc011bHRpcGxlKCkmJiFmLmFsdEtleSxyZWxhdGl2''@;'; put 'put ''ZVRvR3JvdXA6Y3kscG9zaXRpb246ImJlZm9yZSJ9LHtrZXlzOltbIk1ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOigpPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSxyZWxhdGl2ZVRvR3JvdXA6Y3kscG9zaXRpb246ImJlZm9yZSJ9LHtr''@;'; put 'put ''ZXlzOltbIkFsdCIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxyZWxhdGl2ZVRvR3JvdXA6Y3kscG9zaXRpb246ImJlZm9yZSJ9LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtdGhpcy5ob3QuY291bnRW''@;'; put 'put ''aXNpYmxlUm93cygpLDApfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodGhpcy5ob3QuY291bnRWaXNpYmxlUm93cygpLDApfX0se2tleXM6W1siSG9tZSJdXSxjYWxsYmFjazooZixfKT0+e2xldFtUXT1fO1lu''@;'; put 'put ''ZShULHRoaXMuVEVYVEFSRUEpfX0se2tleXM6W1siRW5kIl1dLGNhbGxiYWNrOihmLF8pPT57bGV0W1RdPV87WW5lKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJaIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOigpPT57dGhpcy5ob3QuX3JlZ2lzdGVy''@;'; put 'put ''VGltZW91dCgoKT0+e3RoaXMuYXV0b1Jlc2l6ZS5yZXNpemUoKX0sMTApfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJaIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOigpPT57dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuYXV0b1Jlc2l6ZS5yZXNp''@;'; put 'put ''emUoKX0sMTApfX1dLHtydW5Pbmx5SWY6KCk9PktpKHRoaXMuaG90LmdldFNlbGVjdGVkKCkpLGdyb3VwOlduZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2EucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlHcm91cChtayksYS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFduZSksYS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEdCKX1vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGwpey0xPT09W2NvLkFSUk9XX1VQLGNvLkFSUk9XX1JJR0hULGNvLkFSUk9XX0RPV04sY28uQVJST1dfTEVGVF0uaW5kZXhP''@;'; put 'put ''ZihsLmtleUNvZGUpJiZ0aGlzLmF1dG9SZXNpemUucmVzaXplKFN0cmluZy5mcm9tQ2hhckNvZGUobC5rZXlDb2RlKSl9fWZ1bmN0aW9uIE15KGMsbCxhLGQsaCxmLF8pe2NvbnN0IFQ9W10sVz1bXTtfLmNsYXNzTmFtZSYmcGkobCxfLmNsYXNzTmFtZSksXy5yZWFkT25seSYmVC5wdXNoKF8u''@;'; put 'put ''cmVhZE9ubHlDZWxsQ2xhc3NOYW1lKSwhMT09PV8udmFsaWQmJl8uaW52YWxpZENlbGxDbGFzc05hbWU/VC5wdXNoKF8uaW52YWxpZENlbGxDbGFzc05hbWUpOlcucHVzaChfLmludmFsaWRDZWxsQ2xhc3NOYW1lKSwhMT09PV8ud29yZFdyYXAmJl8ubm9Xb3JkV3JhcENsYXNzTmFtZSYmVC5w''@;'; put 'put ''dXNoKF8ubm9Xb3JkV3JhcENsYXNzTmFtZSksIWYmJl8ucGxhY2Vob2xkZXImJlQucHVzaChfLnBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZSksV28obCxXKSxwaShsLFQpfWZ1bmN0aW9uICRwKGMsbCxhLGQsaCxmLF8pe015LmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLF9dKTtsZXQgVD1mO2lm''@;'; put 'put ''KCFUJiZfLnBsYWNlaG9sZGVyJiYoVD1fLnBsYWNlaG9sZGVyKSxUPV9sKFQpLF8udHJpbVdoaXRlc3BhY2UmJihUPVQudHJpbSgpKSxfLnJlbmRlcmVyVGVtcGxhdGUpe2cyKGwpO2NvbnN0IFc9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEVNUExBVEUiKTtXLnNldEF0dHJpYnV0''@;'; put 'put ''ZSgiYmluZCIsInt7fX0iKSxXLmlubmVySFRNTD1fLnJlbmRlcmVyVGVtcGxhdGUsSFRNTFRlbXBsYXRlRWxlbWVudC5kZWNvcmF0ZShXKSxXLm1vZGVsPWMuZ2V0U291cmNlRGF0YUF0Um93KGEpLGwuYXBwZW5kQ2hpbGQoVyl9ZWxzZSBqcChsLFQpfU15LlJFTkRFUkVSX1RZUEU9ImJhc2Ui''@;'; put 'put ''LCRwLlJFTkRFUkVSX1RZUEU9InRleHQiO2NvbnN0IEduZT17Q0VMTF9UWVBFOiJ0ZXh0IixlZGl0b3I6a2cscmVuZGVyZXI6JHB9O2Z1bmN0aW9uIHkyKGMsbCl7Y29uc3QgYT1uZXcgV0IoYyxsfHx7fSxuVik7cmV0dXJuIGEuaW5pdCgpLGF9YjIoR25lKSx5Mi5lZGl0b3JzPXtCYXNlRWRp''@;'; put 'put ''dG9yOnY3fSx5Mi5Db3JlPWZ1bmN0aW9uKGMpe3JldHVybiBuZXcgV0IoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sblYpfSx5Mi5EZWZhdWx0U2V0dGluZ3M9SG5lKCkseTIuaG9va3M9c28uZ2V0U2luZ2xldG9uKCkseTIuQ2Vs''@;'; put 'put ''bENvb3Jkcz1Tayx5Mi5DZWxsUmFuZ2U9Wk4seTIucGFja2FnZU5hbWU9ImhhbmRzb250YWJsZSIseTIuYnVpbGREYXRlPSIzMS8wOC8yMDIzIDA4OjIzOjMzIix5Mi52ZXJzaW9uPSIxMy4xLjAiLHkyLmxhbmd1YWdlcz17ZGljdGlvbmFyeUtleXM6elRlLGdldExhbmd1YWdlRGljdGlvbmFy''@;'; put 'put ''eTpEbmUsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIEdUZSgpe3JldHVybiBZVGUoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6VG5lLGdldFRyYW5zbGF0ZWRQaHJhc2U6SW5lfTtjb25zdCBtcz15MixpSWU9WyJjb250YWluZXIiXSwkQj1uZXcgTWFwLCRuZT0iVGhl''@;'; put 'put ''IEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iO2xldCBBZz0oKCk9PntjbGFzcyBje2dldEluc3RhbmNlKGEpe2NvbnN0IGQ9JEIuZ2V0KGEpO3JldHVybiBkLmlzRGVzdHJveWVk''@;'; put 'put ''Pyhjb25zb2xlLndhcm4oJG5lKSxudWxsKTpkfXJlZ2lzdGVySW5zdGFuY2UoYSxkKXtyZXR1cm4gJEIuc2V0KGEsZCl9cmVtb3ZlSW5zdGFuY2UoYSl7cmV0dXJuICRCLmRlbGV0ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgb0llPU9iamVjdC5rZXlzKG1zLkRlZmF1bHRTZXR0aW5ncykscW5lPW1zLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgS25lPSgoKT0+e2NsYXNzIGN7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBkPSJz''@;'; put 'put ''ZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9mIGEuc2V0dGluZ3MsaD1kP2Euc2V0dGluZ3M6e307cmV0dXJuIHFuZS5jb25jYXQob0llKS5mb3JFYWNoKF89Pntjb25zdCBUPXFuZS5pbmRleE9mKF8pPi0xO2xldCBXO2QmJlQmJihXPWEuc2V0dGluZ3NbX10pLHZvaWQgMCE9PWFbX10m''@;'; put 'put ''JihXPWFbX10pLHZvaWQgMCE9PVcmJihoW19dPSJuZ1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIFcmJlQ/ZnVuY3Rpb24oLi4uaWUpe3JldHVybiBhLm5nWm9uZS5ydW4oKCk9PlcuYXBwbHkodGhpcyxpZSkpfTpXKX0pLGh9cHJlcGFyZUNoYW5nZXMoYSl7Y29uc3QgZD17fTtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmPT57YS5oYXNPd25Qcm9wZXJ0eShmKSYmKGRbZl09YVtmXS5jdXJyZW50VmFsdWUpfSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMu''@;'; put 'put ''XHUwMjc1ZmFjfSksY30pKCkseHk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5faG90VGFibGVSZWdpc3RlcmVyPWEsdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlcj1kLHRoaXMubmdab25lPWgsdGhpcy5fX2hvdEluc3RhbmNlPW51bGwsdGhpcy5jb2x1bW5zQ29tcG9u''@;'; put 'put ''ZW50cz1bXSx0aGlzLmhvdElkPSIifWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5y''@;'; put 'put ''ZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4oJG5lKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhpcyk7aWYo''@;'; put 'put ''dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVuT3V0c2lk''@;'; put 'put ''ZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBtcy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0aGlzLmhv''@;'; put 'put ''dEluc3RhbmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhpcy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3RoaXMubmda''@;'; put 'put ''b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVtbnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlzLmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRz''@;'; put 'put ''Lmxlbmd0aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNOdW1iZXJD''@;'; put 'put ''aGFuZ2UoKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1''@;'; put 'put ''bW5zOmF9KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnNDb21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29tcG9uZW50''@;'; put 'put ''cy5zcGxpY2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFnKSx0dChLbmUpLHR0KE5vKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImhvdC10YWJs''@;'; put 'put ''ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKGlJZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7c2V0dGluZ3M6InNldHRpbmdzIixob3RJZDoiaG90SWQiLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiYWN0aXZl''@;'; put 'put ''SGVhZGVyQ2xhc3NOYW1lIixhbGxvd0VtcHR5OiJhbGxvd0VtcHR5IixhbGxvd0h0bWw6ImFsbG93SHRtbCIsYWxsb3dJbnNlcnRDb2x1bW46ImFsbG93SW5zZXJ0Q29sdW1uIixhbGxvd0luc2VydFJvdzoiYWxsb3dJbnNlcnRSb3ciLGFsbG93SW52YWxpZDoiYWxsb3dJbnZhbGlkIixhbGxv''@;'; put 'put ''d1JlbW92ZUNvbHVtbjoiYWxsb3dSZW1vdmVDb2x1bW4iLGFsbG93UmVtb3ZlUm93OiJhbGxvd1JlbW92ZVJvdyIsYXV0b0NvbHVtblNpemU6ImF1dG9Db2x1bW5TaXplIixhdXRvUm93U2l6ZToiYXV0b1Jvd1NpemUiLGF1dG9XcmFwQ29sOiJhdXRvV3JhcENvbCIsYXV0b1dyYXBSb3c6ImF1''@;'; put 'put ''dG9XcmFwUm93IixiaW5kUm93c1dpdGhIZWFkZXJzOiJiaW5kUm93c1dpdGhIZWFkZXJzIixjZWxsOiJjZWxsIixjZWxsczoiY2VsbHMiLGNoZWNrZWRUZW1wbGF0ZToiY2hlY2tlZFRlbXBsYXRlIixjbGFzc05hbWU6ImNsYXNzTmFtZSIsY29sSGVhZGVyczoiY29sSGVhZGVycyIsY29sbGFw''@;'; put 'put ''c2libGVDb2x1bW5zOiJjb2xsYXBzaWJsZUNvbHVtbnMiLGNvbHVtbkhlYWRlckhlaWdodDoiY29sdW1uSGVhZGVySGVpZ2h0Iixjb2x1bW5zOiJjb2x1bW5zIixjb2x1bW5Tb3J0aW5nOiJjb2x1bW5Tb3J0aW5nIixjb2x1bW5TdW1tYXJ5OiJjb2x1bW5TdW1tYXJ5Iixjb2xXaWR0aHM6ImNv''@;'; put 'put ''bFdpZHRocyIsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiY29tbWVudGVkQ2VsbENsYXNzTmFtZSIsY29tbWVudHM6ImNvbW1lbnRzIixjb250ZXh0TWVudToiY29udGV4dE1lbnUiLGNvcHlhYmxlOiJjb3B5YWJsZSIsY29weVBhc3RlOiJjb3B5UGFzdGUiLGNvcnJlY3RGb3JtYXQ6ImNvcnJl''@;'; put 'put ''Y3RGb3JtYXQiLGN1cnJlbnRDb2xDbGFzc05hbWU6ImN1cnJlbnRDb2xDbGFzc05hbWUiLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1cnJlbnRIZWFkZXJDbGFzc05hbWUiLGN1cnJlbnRSb3dDbGFzc05hbWU6ImN1cnJlbnRSb3dDbGFzc05hbWUiLGN1c3RvbUJvcmRlcnM6ImN1c3RvbUJv''@;'; put 'put ''cmRlcnMiLGRhdGE6ImRhdGEiLGRhdGFTY2hlbWE6ImRhdGFTY2hlbWEiLGRhdGVGb3JtYXQ6ImRhdGVGb3JtYXQiLGRhdGVQaWNrZXJDb25maWc6ImRhdGVQaWNrZXJDb25maWciLGRlZmF1bHREYXRlOiJkZWZhdWx0RGF0ZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiZGlzYWJsZVZpc3Vh''@;'; put 'put ''bFNlbGVjdGlvbiIsZHJhZ1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVudToiZHJvcGRvd25NZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxIYW5kbGU6ImZpbGxI''@;'; put 'put ''YW5kbGUiLGZpbHRlcjoiZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1bW5zU3RhcnQiLGZp''@;'; put 'put ''eGVkUm93c0JvdHRvbToiZml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVkUm93c1RvcCIsZm9ybXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlaWdodDoiaGVpZ2h0IixoaWRkZW5Db2x1bW5zOiJoaWRkZW5Db2x1bW5zIixo''@;'; put 'put ''aWRkZW5Sb3dzOiJoaWRkZW5Sb3dzIixpbnZhbGlkQ2VsbENsYXNzTmFtZToiaW52YWxpZENlbGxDbGFzc05hbWUiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxhbmd1YWdlIixsYXlvdXREaXJlY3Rpb246ImxheW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtleSIsbG9jYWxl''@;'; put 'put ''OiJsb2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxDb2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJlc2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIsbWFudWFsUm93''@;'; put 'put ''UmVzaXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3MiLG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFyZVJvd3M6Im1p''@;'; put 'put ''blNwYXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5lc3RlZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5lc3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFzc05hbWU6Im5vV29yZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51''@;'; put 'put ''bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToicGVyc2lzdGVudFN0YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBs''@;'; put 'put ''YWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIscHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5OiJyZWFkT25seSIscmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNl''@;'; put 'put ''bGxDbGFzc05hbWUiLHJlbmRlckFsbFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRlcmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVycyIscm93SGVhZGVyV2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0''@;'; put 'put ''aW9uTW9kZToic2VsZWN0aW9uTW9kZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5PblBhc3RlIixza2lwUm93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6''@;'; put 'put ''InNvdXJjZSIsc3RhcnRDb2xzOiJzdGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRSb3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3RyaWN0Iix0YWJsZUNsYXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRv''@;'; put 'put ''d246InRyaW1Ecm9wZG93biIsdHJpbVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVzcGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVuY2hlY2tlZFRlbXBsYXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29s''@;'; put 'put ''dW1uUmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFw''@;'; put 'put ''IixhZnRlckFkZENoaWxkOiJhZnRlckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJhZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0ZXJCZWdpbkVkaXRpbmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2Ui''@;'; put 'put ''LGFmdGVyQ2hhbmdlc09ic2VydmVkOiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJDb2x1bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFm''@;'; put 'put ''dGVyQ29sdW1uTW92ZToiYWZ0ZXJDb2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U6ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNv''@;'; put 'put ''bHVtblVuZnJlZXplOiJhZnRlckNvbHVtblVuZnJlZXplIixhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoi''@;'; put 'put ''YWZ0ZXJDb250ZXh0TWVudVNob3ciLGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRlckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3JlYXRlQ29sOiJhZnRlckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVy''@;'; put 'put ''RGVzZWxlY3Q6ImFmdGVyRGVzZWxlY3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENoaWxkIixhZnRlckRvY3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2Vs''@;'; put 'put ''ZWN0aW9uIixhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bkb3duTWVudUhpZGU6ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ci''@;'; put 'put ''LGFmdGVyRmlsdGVyOiJhZnRlckZpbHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0ZXJHZXRDZWxsTWV0YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENv''@;'; put 'put ''bHVtbkhlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hlYWRlciIsYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJh''@;'; put 'put ''ZnRlckhpZGVDb2x1bW5zIixhZnRlckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixhZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNoYW5nZToiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRh''@;'; put 'put ''IixhZnRlck1lcmdlQ2VsbHM6ImFmdGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xsOiJhZnRl''@;'; put 'put ''ck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkOiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJPbkNlbGxD''@;'; put 'put ''b250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazoiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3VzZURvd24i''@;'; put 'put ''LGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25DZWxsTW91c2VPdXQiLGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVyUGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1Z2luc0lu''@;'; put 'put ''aXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsYWZ0ZXJSZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1vdmVDZWxs''@;'; put 'put ''TWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0ZXJSZW1vdmVDb2w6ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoiYWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3ZlOiJhZnRl''@;'; put 'put ''clJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRlclJvd1Jlc2l6ZSIsYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2FsbHk6ImFm''@;'; put 'put ''dGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlvbkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlvbkVuZCIsYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVy''@;'; put 'put ''U2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNldENlbGxNZXRhOiJhZnRlclNldENlbGxNZXRhIixhZnRlclNldERhdGFBdENlbGw6ImFmdGVyU2V0RGF0YUF0Q2VsbCIsYWZ0ZXJTZXREYXRhQXRSb3dQcm9wOiJhZnRlclNldERhdGFBdFJvd1Byb3AiLGFmdGVyU2V0U291cmNlRGF0YUF0Q2Vs''@;'; put 'put ''bDoiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixhZnRlclNoZWV0QWRkZWQ6ImFmdGVyU2hlZXRBZGRlZCIsYWZ0ZXJTaGVldFJlbmFtZWQ6ImFmdGVyU2hlZXRSZW5hbWVkIixhZnRlclNoZWV0UmVtb3ZlZDoiYWZ0ZXJTaGVldFJlbW92ZWQiLGFmdGVyVHJpbVJvdzoiYWZ0ZXJUcmltUm93''@;'; put 'put ''IixhZnRlclVuZG86ImFmdGVyVW5kbyIsYWZ0ZXJVbmRvU3RhY2tDaGFuZ2U6ImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixhZnRlclVuaGlkZUNvbHVtbnM6ImFmdGVyVW5oaWRlQ29sdW1ucyIsYWZ0ZXJVbmhpZGVSb3dzOiJhZnRlclVuaGlkZVJvd3MiLGFmdGVyVW5saXN0ZW46ImFmdGVyVW5s''@;'; put 'put ''aXN0ZW4iLGFmdGVyVW5tZXJnZUNlbGxzOiJhZnRlclVubWVyZ2VDZWxscyIsYWZ0ZXJVbnRyaW1Sb3c6ImFmdGVyVW50cmltUm93IixhZnRlclVwZGF0ZURhdGE6ImFmdGVyVXBkYXRlRGF0YSIsYWZ0ZXJVcGRhdGVTZXR0aW5nczoiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYWZ0ZXJWYWxpZGF0''@;'; put 'put ''ZToiYWZ0ZXJWYWxpZGF0ZSIsYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlk''@;'; put 'put ''ZSIsYWZ0ZXJWaWV3UmVuZGVyOiJhZnRlclZpZXdSZW5kZXIiLGJlZm9yZUFkZENoaWxkOiJiZWZvcmVBZGRDaGlsZCIsYmVmb3JlQXV0b2ZpbGw6ImJlZm9yZUF1dG9maWxsIixiZWZvcmVDZWxsQWxpZ25tZW50OiJiZWZvcmVDZWxsQWxpZ25tZW50IixiZWZvcmVDaGFuZ2U6ImJlZm9yZUNo''@;'; put 'put ''YW5nZSIsYmVmb3JlQ2hhbmdlUmVuZGVyOiJiZWZvcmVDaGFuZ2VSZW5kZXIiLGJlZm9yZUNvbHVtbkNvbGxhcHNlOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYmVmb3JlQ29sdW1uRXhwYW5kOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGJlZm9yZUNvbHVtbkZyZWV6ZToiYmVmb3JlQ29sdW1uRnJl''@;'; put 'put ''ZXplIixiZWZvcmVDb2x1bW5Nb3ZlOiJiZWZvcmVDb2x1bW5Nb3ZlIixiZWZvcmVDb2x1bW5SZXNpemU6ImJlZm9yZUNvbHVtblJlc2l6ZSIsYmVmb3JlQ29sdW1uU29ydDoiYmVmb3JlQ29sdW1uU29ydCIsYmVmb3JlQ29sdW1uVW5mcmVlemU6ImJlZm9yZUNvbHVtblVuZnJlZXplIixiZWZv''@;'; put 'put ''cmVDb250ZXh0TWVudVNldEl0ZW1zOiJiZWZvcmVDb250ZXh0TWVudVNldEl0ZW1zIixiZWZvcmVDb250ZXh0TWVudVNob3c6ImJlZm9yZUNvbnRleHRNZW51U2hvdyIsYmVmb3JlQ29weToiYmVmb3JlQ29weSIsYmVmb3JlQ3JlYXRlQ29sOiJiZWZvcmVDcmVhdGVDb2wiLGJlZm9yZUNyZWF0''@;'; put 'put ''ZVJvdzoiYmVmb3JlQ3JlYXRlUm93IixiZWZvcmVDdXQ6ImJlZm9yZUN1dCIsYmVmb3JlRGV0YWNoQ2hpbGQ6ImJlZm9yZURldGFjaENoaWxkIixiZWZvcmVEcmF3Qm9yZGVyczoiYmVmb3JlRHJhd0JvcmRlcnMiLGJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zOiJiZWZvcmVEcm9wZG93bk1l''@;'; put 'put ''bnVTZXRJdGVtcyIsYmVmb3JlRHJvcGRvd25NZW51U2hvdzoiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsYmVmb3JlRmlsdGVyOiJiZWZvcmVGaWx0ZXIiLGJlZm9yZUdldENlbGxNZXRhOiJiZWZvcmVHZXRDZWxsTWV0YSIsYmVmb3JlSGlkZUNvbHVtbnM6ImJlZm9yZUhpZGVDb2x1bW5zIixi''@;'; put 'put ''ZWZvcmVIaWRlUm93czoiYmVmb3JlSGlkZVJvd3MiLGJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsYmVmb3JlSW5pdDoi''@;'; put 'put ''YmVmb3JlSW5pdCIsYmVmb3JlSW5pdFdhbGtvbnRhYmxlOiJiZWZvcmVJbml0V2Fsa29udGFibGUiLGJlZm9yZUtleURvd246ImJlZm9yZUtleURvd24iLGJlZm9yZUxhbmd1YWdlQ2hhbmdlOiJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsYmVmb3JlTG9hZERhdGE6ImJlZm9yZUxvYWREYXRhIixi''@;'; put 'put ''ZWZvcmVNZXJnZUNlbGxzOiJiZWZvcmVNZXJnZUNlbGxzIixiZWZvcmVPbkNlbGxDb250ZXh0TWVudToiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLGJlZm9yZU9uQ2VsbE1vdXNlRG93bjoiYmVmb3JlT25DZWxsTW91c2VEb3duIixiZWZvcmVPbkNlbGxNb3VzZU91dDoiYmVmb3JlT25DZWxs''@;'; put 'put ''TW91c2VPdXQiLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjoiYmVmb3JlT25DZWxsTW91c2VPdmVyIixiZWZvcmVPbkNlbGxNb3VzZVVwOiJiZWZvcmVPbkNlbGxNb3VzZVVwIixiZWZvcmVQYXN0ZToiYmVmb3JlUGFzdGUiLGJlZm9yZVJlZG86ImJlZm9yZVJlZG8iLGJlZm9yZVJlZG9TdGFja0No''@;'; put 'put ''YW5nZToiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixiZWZvcmVSZWZyZXNoRGltZW5zaW9uczoiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLGJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzOiJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsYmVmb3JlUmVtb3ZlQ2VsbE1ldGE6ImJlZm9yZVJl''@;'; put 'put ''bW92ZUNlbGxNZXRhIixiZWZvcmVSZW1vdmVDb2w6ImJlZm9yZVJlbW92ZUNvbCIsYmVmb3JlUmVtb3ZlUm93OiJiZWZvcmVSZW1vdmVSb3ciLGJlZm9yZVJlbmRlcjoiYmVmb3JlUmVuZGVyIixiZWZvcmVSZW5kZXJlcjoiYmVmb3JlUmVuZGVyZXIiLGJlZm9yZVJvd01vdmU6ImJlZm9yZVJv''@;'; put 'put ''d01vdmUiLGJlZm9yZVJvd1Jlc2l6ZToiYmVmb3JlUm93UmVzaXplIixiZWZvcmVTZXRDZWxsTWV0YToiYmVmb3JlU2V0Q2VsbE1ldGEiLGJlZm9yZVNldFJhbmdlRW5kOiJiZWZvcmVTZXRSYW5nZUVuZCIsYmVmb3JlU2V0UmFuZ2VTdGFydDoiYmVmb3JlU2V0UmFuZ2VTdGFydCIsYmVmb3Jl''@;'; put 'put ''U2V0UmFuZ2VTdGFydE9ubHk6ImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IixiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6ImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYmVmb3JlVG91Y2hTY3JvbGw6ImJlZm9yZVRvdWNoU2Nyb2xsIixiZWZvcmVUcmltUm93OiJiZWZvcmVUcmlt''@;'; put 'put ''Um93IixiZWZvcmVVbmRvOiJiZWZvcmVVbmRvIixiZWZvcmVVbmRvU3RhY2tDaGFuZ2U6ImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYmVmb3JlVW5oaWRlQ29sdW1uczoiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYmVmb3JlVW5oaWRlUm93czoiYmVmb3JlVW5oaWRlUm93cyIsYmVmb3JlVW5tZXJn''@;'; put 'put ''ZUNlbGxzOiJiZWZvcmVVbm1lcmdlQ2VsbHMiLGJlZm9yZVVudHJpbVJvdzoiYmVmb3JlVW50cmltUm93IixiZWZvcmVVcGRhdGVEYXRhOiJiZWZvcmVVcGRhdGVEYXRhIixiZWZvcmVWYWxpZGF0ZToiYmVmb3JlVmFsaWRhdGUiLGJlZm9yZVZhbHVlUmVuZGVyOiJiZWZvcmVWYWx1ZVJlbmRl''@;'; put 'put ''ciIsYmVmb3JlVmlld1JlbmRlcjoiYmVmb3JlVmlld1JlbmRlciIsY29uc3RydWN0OiJjb25zdHJ1Y3QiLGluaXQ6ImluaXQiLG1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDoibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixtb2RpZnlBdXRvZmlsbFJhbmdlOiJtb2RpZnlBdXRvZmlsbFJhbmdl''@;'; put 'put ''Iixtb2RpZnlDb2xIZWFkZXI6Im1vZGlmeUNvbEhlYWRlciIsbW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0OiJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLG1vZGlmeUNvbHVtbkhlYWRlclZhbHVlOiJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsbW9kaWZ5Q29sV2lkdGg6Im1vZGlmeUNvbFdp''@;'; put 'put ''ZHRoIixtb2RpZnlDb3B5YWJsZVJhbmdlOiJtb2RpZnlDb3B5YWJsZVJhbmdlIixtb2RpZnlEYXRhOiJtb2RpZnlEYXRhIixtb2RpZnlHZXRDZWxsQ29vcmRzOiJtb2RpZnlHZXRDZWxsQ29vcmRzIixtb2RpZnlSb3dEYXRhOiJtb2RpZnlSb3dEYXRhIixtb2RpZnlSb3dIZWFkZXI6Im1vZGlm''@;'; put 'put ''eVJvd0hlYWRlciIsbW9kaWZ5Um93SGVhZGVyV2lkdGg6Im1vZGlmeVJvd0hlYWRlcldpZHRoIixtb2RpZnlSb3dIZWlnaHQ6Im1vZGlmeVJvd0hlaWdodCIsbW9kaWZ5U291cmNlRGF0YToibW9kaWZ5U291cmNlRGF0YSIsbW9kaWZ5VHJhbnNmb3JtRW5kOiJtb2RpZnlUcmFuc2Zvcm1FbmQi''@;'; put 'put ''LG1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lzdGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNpc3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGVTYXZlIn0sZmVhdHVyZXM6W3RpKFtBZyxLbmVdKSx2YV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiaWQiXSxbImNvbnRhaW5lciIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwiZGl2IiwwLDEpLDImYSYmUmUoImlkIixkLmhvdElkKX0sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyfSksY30pKCksXzc9KCgpPT57Y2xhc3MgY3tzdGF0aWMgZm9yUm9vdCgpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbQWddfX19cmV0dXJuIGMudmVyc2lvbj0iMTMuMS4wIixjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7''@;'; put 'put ''dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe30pLGN9KSgpO2NvbnN0IFhuZT0iaGFuZHNvbnRhYmxlRWRpdG9yIjtjbGFzcyBxQiBleHRlbmRzIGtne3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iaGFuZHNvbnRhYmxlIn1vcGVuKCl7c3VwZXIub3BlbigpLHRoaXMuaHRFZGl0b3Im''@;'; put 'put ''JnRoaXMuaHRFZGl0b3IuZGVzdHJveSgpLCJub25lIj09PXRoaXMuaHRDb250YWluZXIuc3R5bGUuZGlzcGxheSYmKHRoaXMuaHRDb250YWluZXIuc3R5bGUuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0''@;'; put 'put ''T3B0aW9ucyksdGhpcy5odEVkaXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksb3kodGhp''@;'; put 'put ''cy5URVhUQVJFQSwwLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZv''@;'; put 'put ''cmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKTtjb25zdCBUPXRoaXMsVz17c3RhcnRSb3dzOjAsc3RhcnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZToh''@;'; put 'put ''MSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFmdGVyT25DZWxsTW91c2VEb3duKGllLGdlKXtjb25zdCB3ZT10aGlzLmdldFNvdXJjZURhdGEoZ2Uucm93LGdlLmNvbCk7dm9p''@;'; put 'put ''ZCAwIT09d2UmJlQuc2V0VmFsdWUod2UpLFQuaW5zdGFuY2UuZGVzdHJveUVkaXRvcigpfSxwcmV2ZW50V2hlZWw6ITAsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciJ9O3RoaXMuY2VsbFByb3BlcnRpZXMuaGFuZHNvbnRhYmxlJiZLbChXLF8uaGFuZHNvbnRh''@;'; put 'put ''YmxlKSx0aGlzLmh0T3B0aW9ucz1XfWJlZ2luRWRpdGluZyhsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vbkJlZ2luRWRpdGluZztkJiYhMT09PWQoKXx8c3VwZXIuYmVnaW5FZGl0aW5nKGwsYSl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpO2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpO2wuY2xhc3NOYW1lPSJoYW5kc29udGFibGVFZGl0b3IiLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKGwpLHRoaXMuaHRDb250YWluZXI9bCx0aGlzLmFzc2lnbkhvb2tzKCl9ZmluaXNoRWRp''@;'; put 'put ''dGluZyhsLGEsZCl7aWYodGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5pc0xpc3RlbmluZygpJiZ0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkTGFzdCgpKXtjb25zdCBoPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKS5nZXRW''@;'; put 'put ''YWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9YXNzaWduSG9va3MoKXt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCl9KX1yZWdpc3RlclNo''@;'; put 'put ''b3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLF8pPT57Y29uc3QgVD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCk7aWYodm9pZCAwIT09ZiYmKGY8''@;'; put 'put ''MHx8VC5mbGlwcGVkJiZmPlQuY291bnRSb3dzKCktMT9ULmRlc2VsZWN0Q2VsbCgpOlQuc2VsZWN0Q2VsbChmLDApLFQuZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIF8ucHJldmVudERlZmF1bHQoKSx2MihfKSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2Eu''@;'; put 'put ''YWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtsZXQgVCxXO3JldHVybiFfLmdldFNlbGVjdGVkTGFzdCgpJiZfLmZsaXBwZWQ/VD1fLmNvdW50Um93cygpLTE6Xy5nZXRTZWxlY3RlZExhc3Qo''@;'; put 'put ''KSYmKF8uZmxpcHBlZD8oVz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9TWF0aC5tYXgoMCxXLTEpKTooVz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9Vy0xKSksaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOmY9Pntjb25zdCBfPXRo''@;'; put 'put ''aXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2UoKTtsZXQgVCxXO2lmKF8uZ2V0U2VsZWN0ZWRMYXN0KCl8fF8uZmxpcHBlZCl7aWYoXy5nZXRTZWxlY3RlZExhc3QoKSlpZihfLmZsaXBwZWQpVD1fLmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighXy5mbGlwcGVkKXtjb25zdCBpZT1fLmNv''@;'; put 'put ''dW50Um93cygpLTE7Vz1fLmdldFNlbGVjdGVkTGFzdCgpWzBdLFQ9TWF0aC5taW4oaWUsVysxKX19ZWxzZSBUPTA7cmV0dXJuIGgoVCxmKX0scHJldmVudERlZmF1bHQ6ITF9XSx7Z3JvdXA6WG5lLHJlbGF0aXZlVG9Hcm91cDptayxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9y''@;'; put 'put ''dGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChYbmUpfX1jb25zdCBLQj1uZXcgV2Vha01hcDtjbGFzcyBYQiBleHRlbmRzIHFCe3N0YXRpYyBn''@;'; put 'put ''ZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBhSWUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGxJZShjKXt2YXIgbD1mdW5jdGlvbiBjSWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJl''@;'; put 'put ''dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0''@;'; put 'put ''aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic29ydEJ5UmVsZXZhbmNlIixmdW5jdGlvbihhLGQsaCl7Y29uc3QgZj1bXSxfPVtdLFQ9YS5sZW5ndGg7bGV0IGllLGdlLHdlLEVlLFc9ZC5sZW5ndGg7aWYoMD09PVQpe2Zvcih3ZT0wO3dlPFc7d2UrKylfLnB1c2go''@;'; put 'put ''d2UpO3JldHVybiBffWZvcih3ZT0wO3dlPFc7d2UrKyl7aWYoZ2U9dU4oX2woZFt3ZV0pKSxoKUVlPWdlLmluZGV4T2YoYSk7ZWxzZXtjb25zdCBaZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZTtFZT1nZS50b0xvY2FsZUxvd2VyQ2FzZShaZSkuaW5kZXhPZihhLnRvTG9jYWxlTG93ZXJD''@;'; put 'put ''YXNlKFplKSl9LTEhPT1FZSYmKGllPWdlLmxlbmd0aC1FZS1ULGYucHVzaCh7YmFzZUluZGV4OndlLGluZGV4OkVlLGNoYXJzTGVmdDppZSx2YWx1ZTpnZX0pKX1mb3IoZi5zb3J0KChaZSxvdCk9PntpZigtMT09PW90LmluZGV4KXJldHVybi0xO2lmKC0xPT09WmUuaW5kZXgpcmV0dXJuIDE7''@;'; put 'put ''aWYoWmUuaW5kZXg8b3QuaW5kZXgpcmV0dXJuLTE7aWYob3QuaW5kZXg8WmUuaW5kZXgpcmV0dXJuIDE7aWYoWmUuaW5kZXg9PT1vdC5pbmRleCl7aWYoWmUuY2hhcnNMZWZ0PG90LmNoYXJzTGVmdClyZXR1cm4tMTtpZihaZS5jaGFyc0xlZnQ+b3QuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVy''@;'; put 'put ''biAwfSksd2U9MCxXPWYubGVuZ3RoO3dlPFc7d2UrKylfLnB1c2goZlt3ZV0uYmFzZUluZGV4KTtyZXR1cm4gX30pLHRoaXMucXVlcnk9bnVsbCx0aGlzLnN0cmlwcGVkQ2hvaWNlcz1bXSx0aGlzLnJhd0Nob2ljZXM9W10sS0Iuc2V0KHRoaXMse3NraXBPbmU6ITEsaXNNYWNPUzp0aGlzLmhv''@;'; put 'put ''dC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCJNYWMiKT4tMX0pfWdldFZhbHVlKCl7Y29uc3QgbD10aGlzLnJhd0Nob2ljZXMuZmluZChhPT50aGlzLnN0cmlwVmFsdWVJZk5lZWRlZChhKT09PXRoaXMuVEVYVEFSRUEudmFsdWUpO3JldHVybiBLaShsKT9sOnRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWV9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHBpKHRoaXMuaHRDb250YWluZXIsImF1dG9jb21wbGV0ZUVkaXRvciIpLHBpKHRoaXMuaHRDb250YWluZXIsLTE9PT10aGlzLmhvdC5yb290V2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybS5pbmRl''@;'; put 'put ''eE9mKCJNYWMiKT8iIjoiaHRNYWNTY3JvbGwiKX1vcGVuKCl7Y29uc3QgbD1LQi5nZXQodGhpcyk7c3VwZXIub3BlbigpO2NvbnN0IGE9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLGQ9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMudHJpbURyb3Bkb3duO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKTtsZXQgaD1JYygpOzA9PT1oJiZsLmlzTWFjT1MmJihoKz0xNSksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIixmPT50aGlzLm9uQmVmb3JlS2V5RG93bihmKSksYS51cGRhdGVTZXR0''@;'; put 'put ''aW5ncyh7Y29sV2lkdGhzOmQ/W3dhKHRoaXMuVEVYVEFSRUEpLTJdOnZvaWQgMCx3aWR0aDpkP3dhKHRoaXMuVEVYVEFSRUEpK2g6dm9pZCAwLHJlbmRlcmVyOihmLF8sVCxXLGllLGdlLHdlKT0+eyRwKGYsXyxULFcsaWUsZ2Usd2UpO2NvbnN0e2ZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6RWUs''@;'; put 'put ''YWxsb3dIdG1sOlplLGxvY2FsZTpvdH09dGhpcy5jZWxsUHJvcGVydGllcyxldD10aGlzLnF1ZXJ5O2xldCBrdCxTdCx5dD1fbChnZSk7eXQmJiFaZSYmKGt0PSEwPT09RWU/eXQuaW5kZXhPZihldCk6eXQudG9Mb2NhbGVMb3dlckNhc2Uob3QpLmluZGV4T2YoZXQudG9Mb2NhbGVMb3dlckNh''@;'; put 'put ''c2Uob3QpKSwtMSE9PWt0JiYoU3Q9eXQuc3Vic3RyKGt0LGV0Lmxlbmd0aCkseXQ9eXQucmVwbGFjZShTdCxgPHN0cm9uZz4ke1N0fTwvc3Ryb25nPmApKSksXy5pbm5lckhUTUw9eXR9LGF1dG9Db2x1bW5TaXplOiEwfSksbC5za2lwT25lJiYobC5za2lwT25lPSExKSx0aGlzLmhvdC5fcmVn''@;'; put 'put ''aXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhUQVJFQS52YWx1ZSl9KX1jbG9zZSgpe3RoaXMucmVtb3ZlSG9va3NCeUtleSgiYmVmb3JlS2V5RG93biIpLHN1cGVyLmNsb3NlKCl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMu''@;'; put 'put ''aG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRl''@;'; put 'put ''Q2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRl''@;'; put 'put ''Q2hvaWNlc0xpc3QobCl7Y29uc3QgYT1oTih0aGlzLlRFWFRBUkVBKSxkPWN0ZSh0aGlzLlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI7bGV0IF89bnVsbCxUPW51bGwsVz1sO2gmJihfPXRoaXMuc29y''@;'; put 'put ''dEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUoKSksVyx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpKTtjb25zdCBpZT1BcnJheS5pc0FycmF5KF8pP18ubGVuZ3RoOjA7aWYoITE9PT1mKWllJiYoVD1fWzBdKTtlbHNl''@;'; put 'put ''e2NvbnN0IGdlPVtdO2ZvcihsZXQgd2U9MCxFZT1XLmxlbmd0aDt3ZTxFZSYmIShoJiZpZTw9d2UpO3dlKyspZ2UucHVzaChpZT9XW19bd2VdXTpXW3dlXSk7VD0wLFc9Z2V9dGhpcy5zdHJpcHBlZENob2ljZXM9Vyx0aGlzLmh0RWRpdG9yLmxvYWREYXRhKEtiKFtXXSkpLHRoaXMudXBkYXRl''@;'; put 'put ''RHJvcGRvd25IZWlnaHQoKSx0aGlzLmZsaXBEcm9wZG93bklmTmVlZGVkKCksITA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdCYmdGhpcy5oaWdobGlnaHRCZXN0TWF0Y2hpbmdDaG9pY2UoVCksdGhpcy5ob3QubGlzdGVuKCksb3kodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpk''@;'; put 'put ''KX1mbGlwRHJvcGRvd25JZk5lZWRlZCgpe2NvbnN0IGw9dmcodGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5UQUJMRSksYT1sPT09dGhpcy5ob3Qucm9vdFdpbmRvdyxkPXRoaXMuY2VsbFByb3BlcnRpZXMucHJldmVudE92ZXJmbG93O2lmKGF8fCFhJiYoZHx8Imhvcml6b250YWwiPT09ZCkp''@;'; put 'put ''cmV0dXJuITE7Y29uc3QgaD1xbCh0aGlzLlRFWFRBUkVBKSxmPWFsKHRoaXMuVEVYVEFSRUEpLF89dGhpcy5nZXREcm9wZG93bkhlaWdodCgpLFQ9bC5zY3JvbGxUb3AsVz1hbCh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRIRUFEKSxpZT1xbChsKSxnZT1oLnRvcC1pZS50b3AtVytULHdl''@;'; put 'put ''PWwuc2Nyb2xsSGVpZ2h0LWdlLVctZixFZT1fPndlJiZnZT53ZTtyZXR1cm4gRWU/dGhpcy5mbGlwRHJvcGRvd24oXyk6dGhpcy51bmZsaXBEcm9wZG93bigpLHRoaXMubGltaXREcm9wZG93bklmTmVlZGVkKEVlP2dlOndlLF8pLEVlfWxpbWl0RHJvcGRvd25JZk5lZWRlZChsLGEpe2lmKGE+''@;'; put 'put ''bCl7bGV0IGQ9MCxoPTAsZj0wLF89bnVsbDtkb3tmPXRoaXMuaHRFZGl0b3IuZ2V0Um93SGVpZ2h0KGgpfHx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0LmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKSxkKz1mLGgrPTF9d2hpbGUoZDxsKTtfPWQtZix0aGlzLmh0RWRpdG9yLmZsaXBwZWQm''@;'; put 'put ''Jih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS1fKyJweCIpLHRoaXMuc2V0RHJvcGRvd25IZWlnaHQoZC1mKX19ZmxpcERyb3Bkb3duKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5y''@;'; put 'put ''b290RWxlbWVudC5zdHlsZTthLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS50b3A9LWwrInB4Iix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9ITB9dW5mbGlwRHJvcGRvd24oKXtjb25zdCBsPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGwudG9wPSIi''@;'; put 'put ''LHRoaXMuaHRFZGl0b3IuZmxpcHBlZD12b2lkIDB9dXBkYXRlRHJvcGRvd25IZWlnaHQoKXtjb25zdCBsPXRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lkdGgoMCkrSWModGhpcy5ob3Qucm9vdERvY3VtZW50KSsyLGE9dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5odEVkaXRv''@;'; put 'put ''ci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0OnRoaXMuZ2V0RHJvcGRvd25IZWlnaHQoKSx3aWR0aDphP3ZvaWQgMDpsfSksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1zZXREcm9wZG93bkhlaWdodChsKXt0aGlzLmh0''@;'; put 'put ''RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6bH0pfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwo''@;'; put 'put ''KX1nZXREcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpLmdldFJvd0hlaWdodCgwKXx8MjMsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnZpc2libGVSb3dzO3JldHVybiB0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGg+PWE/YSpsOnRoaXMuc3RyaXBw''@;'; put 'put ''ZWRDaG9pY2VzLmxlbmd0aCpsKzh9c3RyaXBWYWx1ZUlmTmVlZGVkKGwpe3JldHVybiB0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoW2xdKVswXX1zdHJpcFZhbHVlc0lmTmVlZGVkKGwpe2NvbnN0e2FsbG93SHRtbDphfT10aGlzLmNlbGxQcm9wZXJ0aWVzLGQ9Y3MobCxmPT5fbChmKSk7cmV0''@;'; put 'put ''dXJuIGNzKGQsZj0+YT9mOnVOKGYpKX1hbGxvd0tleUV2ZW50UHJvcGFnYXRpb24obCl7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZF9yb3c9YT9hLmZyb20ucm93Oi0xO2xldCBoPSExO3JldHVybiBsPT09Y28uQVJST1dfRE9XTiYmZF9yb3c+MCYmZF9y''@;'; put 'put ''b3c8dGhpcy5odEVkaXRvci5jb3VudFJvd3MoKS0xJiYoaD0hMCksbD09PWNvLkFSUk9XX1VQJiZkX3Jvdz4tMSYmKGg9ITApLGh9b25CZWZvcmVLZXlEb3duKGwpe2NvbnN0IGE9S0IuZ2V0KHRoaXMpO2lmKGEuc2tpcE9uZT0hMSxTdGUobC5rZXlDb2RlKXx8bC5rZXlDb2RlPT09Y28uQkFD''@;'; put 'put ''S1NQQUNFfHxsLmtleUNvZGU9PT1jby5ERUxFVEV8fGwua2V5Q29kZT09PWNvLklOU0VSVCl7bGV0IGQ9MTA7aWYobC5rZXlDb2RlPT09Y28uQyYmKGwuY3RybEtleXx8bC5tZXRhS2V5KSlyZXR1cm47dGhpcy5pc09wZW5lZCgpfHwoZCs9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9y''@;'; put 'put ''ZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKSxhLnNraXBPbmU9ITB9LGQpfX19Y2xhc3MgSm5lIGV4dGVuZHMgdjd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGwsYSl7aWYoYSYm''@;'; put 'put ''Im1vdXNldXAiPT09YS50eXBlKXtjb25zdCBkPXRoaXMuVEQucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT0iY2hlY2tib3giXScpO0JvKGQsImh0QmFkVmFsdWUiKXx8ZC5jbGljaygpfX1maW5pc2hFZGl0aW5nKCl7fWluaXQoKXt9b3Blbigpe31jbG9zZSgpe31nZXRWYWx1ZSgpe31zZXRW''@;'; put 'put ''YWx1ZSgpe31mb2N1cygpe319dmFyIFFuZT1GKDE3NDgwKTtjb25zdCBlcmU9ImRhdGUiLHRyZT0iZGF0ZUVkaXRvciI7Y2xhc3MgbnJlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiBlcmV9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5kZWZhdWx0RGF0''@;'; put 'put ''ZUZvcm1hdD0iREQvTU0vWVlZWSIsdGhpcy5pc0NlbGxFZGl0ZWQ9ITEsdGhpcy5wYXJlbnREZXN0cm95ZWQ9ITEsdGhpcy4kZGF0ZVBpY2tlcj1udWxsfWluaXQoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgS28pdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBpbmNsdWRlIG1vbWVudC5q''@;'; put 'put ''cyB0byB5b3VyIHByb2plY3QuIik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFFuZSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgUGlrYWRheSB0byB5b3VyIHByb2plY3QuIik7c3VwZXIuaW5pdCgpLHRoaXMuaW5zdGFuY2UuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+''@;'; put 'put ''e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJveUVsZW1lbnRzKCl9KX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5kYXRlUGlja2VyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmRhdGVQaWNrZXJT''@;'; put 'put ''dHlsZT10aGlzLmRhdGVQaWNrZXIuc3R5bGUsdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PTAsdGhpcy5kYXRlUGlja2VyU3R5bGUuekluZGV4PTk5OTksdGhpcy5kYXRl''@;'; put 'put ''UGlja2VyLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiKSxwaSh0aGlzLmRhdGVQaWNrZXIsImh0RGF0ZXBpY2tlckhvbGRlciIpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlciksbmV3IGxsKHRoaXMp''@;'; put 'put ''LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kYXRlUGlja2VyLCJtb3VzZWRvd24iLGE9PmEuc3RvcFByb3BhZ2F0aW9uKCkpfWRlc3Ryb3lFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5kYXRlUGlja2VyLnBhcmVudE5vZGU7dGhpcy4kZGF0ZVBpY2tlciYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95''@;'; put 'put ''KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmRhdGVQaWNrZXIpfXByZXBhcmUobCxhLGQsaCxmLF8pe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLF8pfW9wZW4oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCBk''@;'; put 'put ''PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO3N1cGVyLm9wZW4oKSx0aGlzLnNob3dEYXRlcGlja2VyKGwpLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6aD0+e2guc3RvcFByb3BhZ2F0aW9uKCl9LGdyb3VwOnRyZX0p''@;'; put 'put ''fWNsb3NlKCl7dmFyIGw7dGhpcy5fb3BlbmVkPSExLG51bGwhPT0obD10aGlzLiRkYXRlUGlja2VyKSYmdm9pZCAwIT09bCYmbC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSx0aGlzLmluc3RhbmNlLl9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLmluc3RhbmNlLl9yZWZy''@;'; put 'put ''ZXNoQm9yZGVycygpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cCh0cmUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzBdJiZhcmd1bWVudHNbMF0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKGwpe2NvbnN0IGQ9dGhpcy5vcmlnaW5hbFZhbHVlO3ZvaWQgMCE9PWQmJnRoaXMuc2V0VmFsdWUoZCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEp''@;'; put 'put ''fXNob3dEYXRlcGlja2VyKGwpe2NvbnN0IGE9dGhpcy5URC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCxoPXRoaXMuaW5zdGFuY2Uudmlldy5pc01vdXNlRG93bigpLGY9ISFsJiZDTihsLmtl''@;'; put 'put ''eUNvZGUpO2xldCBfO3RoaXMuZGF0ZVBpY2tlci5zdHlsZS5kaXNwbGF5PSJibG9jayIsdGhpcy4kZGF0ZVBpY2tlcj1uZXcgUW5lKHRoaXMuZ2V0RGF0ZVBpY2tlckNvbmZpZygpKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMuZGF0ZVBpY2tlclN0''@;'; put 'put ''eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2EudG9wK2FsKHRoaXMuVEQpfXB4YDtsZXQgVD10aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0O1Q9dGhpcy5ob3QuaXNSdGwoKT9hLnJpZ2h0LXdhKHRoaXMuZGF0ZVBpY2tlcik6YS5sZWZ0LHRoaXMuZGF0''@;'; put 'put ''ZVBpY2tlclN0eWxlLmxlZnQ9YCR7VH1weGAsdGhpcy5vcmlnaW5hbFZhbHVlPyhfPXRoaXMub3JpZ2luYWxWYWx1ZSxLbyhfLGQsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoS28oXyxkKSwhMCksdGhpcy5nZXRWYWx1ZSgpIT09dGhpcy5vcmlnaW5hbFZhbHVl''@;'; put 'put ''JiZ0aGlzLnNldFZhbHVlKHRoaXMub3JpZ2luYWxWYWx1ZSksIWYmJiFoJiZ0aGlzLnNldFZhbHVlKCIiKSk6dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZT8oXz10aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlLEtvKF8sZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlj''@;'; put 'put ''a2VyLnNldE1vbWVudChLbyhfLGQpLCEwKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLiRkYXRlUGlja2VyLmdvdG9Ub2RheSgpfWhpZGVEYXRlcGlja2VyKCl7dGhpcy5kYXRlUGlja2VyU3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy4kZGF0ZVBpY2tlci5oaWRlKCl9Z2V0RGF0''@;'; put 'put ''ZVBpY2tlckNvbmZpZygpe2NvbnN0IGw9dGhpcy5URVhUQVJFQSxhPXt9O3RoaXMuY2VsbFByb3BlcnRpZXMmJnRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyYmbHkoYSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcpO2NvbnN0IGQ9YS5vblNlbGVjdCxo''@;'; put 'put ''PWEub25DbG9zZTtyZXR1cm4gYS5maWVsZD1sLGEudHJpZ2dlcj1sLGEuY29udGFpbmVyPXRoaXMuZGF0ZVBpY2tlcixhLmJvdW5kPSExLGEuZm9ybWF0PWEuZm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGEucmVwb3NpdGlvbj1hLnJlcG9zaXRpb258fCExLGEuaXNSVEw9ITEsYS5v''@;'; put 'put ''blNlbGVjdD1mPT57bGV0IF89Zjtpc05hTihfLmdldFRpbWUoKSl8fChfPUtvKF8pLmZvcm1hdCh0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQpKSx0aGlzLnNldFZhbHVlKF8pLHRoaXMuaGlkZURhdGVwaWNrZXIoKSxkJiZkKCl9LGEub25D''@;'; put 'put ''bG9zZT0oKT0+e3RoaXMucGFyZW50RGVzdHJveWVkfHx0aGlzLmZpbmlzaEVkaXRpbmcoITEpLGgmJmgoKX0sYX19Y2xhc3MgSkIgZXh0ZW5kcyBYQntzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImRyb3Bkb3duIn1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGws''@;'; put 'put ''YSxkLGgsZixfKSx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcj0hMSx0aGlzLmNlbGxQcm9wZXJ0aWVzLnN0cmljdD0hMH19c28uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oYyxsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRv''@;'; put 'put ''Q29sKGEpKTtkLmVkaXRvcj09PUpCJiZ2b2lkIDA9PT1kLnN0cmljdCYmKGQuZmlsdGVyPSExLGQuc3RyaWN0PSEwKX0pO2NsYXNzIHJyZSBleHRlbmRzIGtne3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ibnVtZXJpYyJ9fWNsYXNzIGlyZSBleHRlbmRzIGtne3N0YXRpYyBnZXQg''@;'; put 'put ''RURJVE9SX1RZUEUoKXtyZXR1cm4icGFzc3dvcmQifWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLlRFWFRBUkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJ0eXBlIiwi''@;'; put 'put ''cGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0''@;'; put 'put ''aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCxnMih0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFFCPSJodF9lZGl0b3JfdmlzaWJsZSIsb3JlPSJzZWxlY3RFZGl0b3IiO2NsYXNzIG1JZSBl''@;'; put 'put ''eHRlbmRzIHY3e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ic2VsZWN0In1pbml0KCl7dGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNFTEVDVCIpLHBpKHRoaXMuc2VsZWN0LCJodFNlbGVjdEVkaXRvciIpLHRoaXMuc2VsZWN0LnN0eWxl''@;'; put 'put ''LmRpc3BsYXk9Im5vbmUiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdC52YWx1ZX1zZXRWYWx1ZShsKXt0aGlzLnNlbGVjdC52YWx1ZT1sfW9wZW4oKXt0aGlzLl9v''@;'; put 'put ''cGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2VsZWN0LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuX29w''@;'; put 'put ''ZW5lZD0hMSx0aGlzLnNlbGVjdC5zdHlsZS5kaXNwbGF5PSJub25lIixCbyh0aGlzLnNlbGVjdCxRQikmJldvKHRoaXMuc2VsZWN0LFFCKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmNsZWFySG9va3MoKX1mb2N1cygpe3RoaXMuc2VsZWN0LmZvY3VzKCl9cmVnaXN0ZXJIb29r''@;'; put 'put ''cygpe3RoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1u''@;'; put 'put ''UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKX1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKTtjb25zdCBUPXRoaXMuY2VsbFBy''@;'; put 'put ''b3BlcnRpZXMuc2VsZWN0T3B0aW9ucztsZXQgVztXPXRoaXMucHJlcGFyZU9wdGlvbnMoImZ1bmN0aW9uIj09dHlwZW9mIFQ/VCh0aGlzLnJvdyx0aGlzLmNvbCx0aGlzLnByb3ApOlQpLGcyKHRoaXMuc2VsZWN0KSxkcyhXLChpZSxnZSk9Pntjb25zdCB3ZT10aGlzLmhvdC5yb290RG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7d2UudmFsdWU9Z2UsZ2cod2UsaWUpLHRoaXMuc2VsZWN0LmFwcGVuZENoaWxkKHdlKX0pfXByZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFbbFtkXV09''@;'; put 'put ''bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4gYX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMucmVmcmVz''@;'; put 'put ''aERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMuc3RhdGUhPT1ZYy5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRoOmQsaGVp''@;'; put 'put ''Z2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2VsZWN0LnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1weGAsZi50b3A9YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixwaSh0''@;'; put 'put ''aGlzLnNlbGVjdCxRQil9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLGQ9e2dyb3VwOm9yZX07ITEhPT10aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFy''@;'; put 'put ''cm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTtoPj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4''@;'; put 'put ''KzE7aDw9dGhpcy5zZWxlY3QubGVuZ3RoLTEmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0sZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAob3JlKX19''@;'; put 'put ''Y2xhc3Mgc3JlIGV4dGVuZHMga2d7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1wcmVwYXJlKGwsYSxkLGgsZixfKXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZixfKSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24gZWooYyxsLGEsZCxoLGYsXyl7TXkuYXBw''@;'; put 'put ''bHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGdnKGwsZj8/IiIsITEpfWZ1bmN0aW9uIGI3KGMsbCxhLGQsaCxmLF8pe2NvbnN0e3Jvb3REb2N1bWVudDpUfT1jLFc9Xy5hbGxvd0h0bWw/ZWo6JHAsaWU9VC5jcmVhdGVFbGVtZW50KCJESVYiKTtpZihpZS5jbGFzc05hbWU9Imh0QXV0b2NvbXBs''@;'; put 'put ''ZXRlQXJyb3ciLGllLmFwcGVuZENoaWxkKFQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSg5NjYwKSkpLFcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChULmNyZWF0ZVRleHROb2RlKFN0cmluZy5mcm9tQ2hhckNvZGUo''@;'; put 'put ''MTYwKSkpLGwuaW5zZXJ0QmVmb3JlKGllLGwuZmlyc3RDaGlsZCkscGkobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlzdGVuZXIpe2NvbnN0IGdlPW5ldyBsbChjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbih3ZSl7Qm8od2UudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93''@;'; put 'put ''IikmJmMudmlldy5fd3QuZ2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwpfSxnZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVz''@;'; put 'put ''dHJveSIsKCk9PntnZS5kZXN0cm95KCl9KX19ZWouUkVOREVSRVJfVFlQRT0iaHRtbCIsYjcuUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIjtjb25zdCBhcmU9bmV3IFdlYWtNYXAsbHJlPW5ldyBXZWFrTWFwLHdJZT0iaHRCYWRWYWx1ZSIseTc9ImRhdGEtcm93Iix3Nz0iZGF0YS1jb2wi''@;'; put 'put ''LENJZT0iY2hlY2tib3hSZW5kZXJlciI7ZnVuY3Rpb24gdGooYyxsLGEsZCxoLGYsXyl7Y29uc3R7cm9vdERvY3VtZW50OlR9PWM7TXkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsX10pLGZ1bmN0aW9uIFNJZShjKXtsZXQgbD1scmUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDph''@;'; put 'put ''fT1jO2w9bmV3IGxsKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24ga0llKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIW5qKGEpfHwhYS5oYXNBdHRyaWJ1dGUoeTcpfHwhYS5oYXNBdHRyaWJ1dGUodzcpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0''@;'; put 'put ''QXR0cmlidXRlKHk3KSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh3NyksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gRUllKGMsbCl7Y29uc3R7''@;'; put 'put ''dGFyZ2V0OmF9PWM7bmooYSkmJighYS5oYXNBdHRyaWJ1dGUoeTcpfHwhYS5oYXNBdHRyaWJ1dGUodzcpfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9PmZ1bmN0aW9uIEFJZShjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lm''@;'; put 'put ''KCFuaihhKXx8IWEuaGFzQXR0cmlidXRlKHk3KXx8IWEuaGFzQXR0cmlidXRlKHc3KSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZSh5NyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUodzcpLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25s''@;'; put 'put ''eSl7bGV0IF89bnVsbDtfPWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLF8pfX0oZCxjKSksbHJl''@;'; put 'put ''LnNldChjLGwpfX0oYyk7bGV0IFc9ZnVuY3Rpb24gTUllKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJv''@;'; put 'put ''ZmYiKSxsLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oVCk7Y29uc3QgaWU9Xy5sYWJlbDtsZXQgZ2U9ITE7aWYodHlwZW9mIF8uY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKF8uY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgXy51bmNoZWNrZWRUZW1wbGF0''@;'; put 'put ''ZT4idSImJihfLnVuY2hlY2tlZFRlbXBsYXRlPSExKSxnMihsKSxmPT09Xy5jaGVja2VkVGVtcGxhdGV8fF9sKGYpLnRvTG9jYWxlTG93ZXJDYXNlKF8ubG9jYWxlKT09PV9sKF8uY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk/Vy5jaGVja2VkPSEwOmY9PT1f''@;'; put 'put ''LnVuY2hlY2tlZFRlbXBsYXRlfHxfbChmKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk9PT1fbChfLnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZShfLmxvY2FsZSk/Vy5jaGVja2VkPSExOnBjKGYpP3BpKFcsIm5vVmFsdWUiKTooVy5zdHlsZS5kaXNwbGF5PSJub25l''@;'; put 'put ''IixwaShXLHdJZSksZ2U9ITApLFcuc2V0QXR0cmlidXRlKHk3LGEpLFcuc2V0QXR0cmlidXRlKHc3LGQpLCFnZSYmaWUpe2xldCBvdD0iIjtpZihpZS52YWx1ZSlvdD0iZnVuY3Rpb24iPT10eXBlb2YgaWUudmFsdWU/aWUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOmllLnZhbHVlO2Vsc2Ug''@;'; put 'put ''aWYoaWUucHJvcGVydHkpe2NvbnN0IHl0PWMuZ2V0RGF0YUF0Um93UHJvcChhLGllLnByb3BlcnR5KTtvdD1udWxsIT09eXQ/eXQ6IiJ9Y29uc3QgZXQ9ZnVuY3Rpb24geEllKGMsbCxhKXtjb25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtyZXR1cm4gZC5jbGFzc05hbWU9Imh0Q2hl''@;'; put 'put ''Y2tib3hSZW5kZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpLGQuYXBwZW5kQ2hpbGQoYy5jcmVhdGVUZXh0Tm9kZShsKSksZC5jbG9uZU5vZGUoITApfShULG90LCEwIT09aWUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PWllLnBvc2l0aW9uP2llLnNlcGFyYXRlZD8obC5hcHBlbmRDaGls''@;'; put 'put ''ZChldCksbC5hcHBlbmRDaGlsZChXKSk6KGV0LmFwcGVuZENoaWxkKFcpLFc9ZXQpOighaWUucG9zaXRpb258fCJhZnRlciI9PT1pZS5wb3NpdGlvbikmJihpZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoVyksbC5hcHBlbmRDaGlsZChldCkpOihldC5pbnNlcnRCZWZvcmUoVyxldC5maXJz''@;'; put 'put ''dENoaWxkKSxXPWV0KSl9ZnVuY3Rpb24gRWUoKXtsZXQgb3Q9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBldD1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihldClmb3IobGV0IHl0PTA7eXQ8ZXQubGVuZ3RoO3l0Kyspe2NvbnN0''@;'; put 'put ''e3JvdzprdCxjb2w6U3R9PWV0W3l0XS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6UXQsY29sOnJufT1ldFt5dF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCksdm49W107Zm9yKGxldCBObj1rdDtObjw9UXQ7Tm4rPTEpZm9yKGxldCBjcj1TdDtjcjw9cm47Y3IrPTEpe2NvbnN0IERyPWMuZ2V0Q2Vs''@;'; put 'put ''bE1ldGEoTm4sY3IpO2lmKCJjaGVja2JveCIhPT1Eci50eXBlKXJldHVybjtpZighMD09PURyLnJlYWRPbmx5KWNvbnRpbnVlO3R5cGVvZiBEci5jaGVja2VkVGVtcGxhdGU+InUiJiYoRHIuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgRHIudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoRHIu''@;'; put 'put ''dW5jaGVja2VkVGVtcGxhdGU9ITEpO2NvbnN0IF9pPWMuZ2V0RGF0YUF0Q2VsbChObixjcik7ITE9PT1vdD9bRHIuY2hlY2tlZFRlbXBsYXRlLERyLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhfaSk/dm4ucHVzaChbTm4sY3IsRHIudW5jaGVja2VkVGVtcGxhdGVdKTpb''@;'; put 'put ''RHIudW5jaGVja2VkVGVtcGxhdGUsRHIudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVkZXMoX2kpJiZ2bi5wdXNoKFtObixjcixEci5jaGVja2VkVGVtcGxhdGVdKTp2bi5wdXNoKFtObixjcixEci51bmNoZWNrZWRUZW1wbGF0ZV0pfXZuLmxlbmd0aD4w''@;'; put 'put ''JiZjLnNldERhdGFBdENlbGwodm4pfX1mdW5jdGlvbiBaZSgpe2NvbnN0IG90PWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKG90KXtmb3IobGV0IGV0PTA7ZXQ8b3QubGVuZ3RoO2V0Kyspe2NvbnN0IHl0PW90W2V0XS5nZXRUb3BTdGFydENvcm5lcigpLGt0PW90W2V0XS5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKTtmb3IobGV0IFN0PXl0LnJvdztTdDw9a3Qucm93O1N0KyspZm9yKGxldCBRdD15dC5jb2w7UXQ8PWt0LmNvbDtRdCsrKXtjb25zdCBybj1jLmdldENlbGxNZXRhKFN0LFF0KTtpZigiY2hlY2tib3giIT09cm4udHlwZSlyZXR1cm4hMTtjb25zdCB2bj1jLmdldENlbGwoU3QsUXQp''@;'; put 'put ''O2lmKG51bGw9PXZuKXJldHVybiEwO2lmKHZuLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hdIikubGVuZ3RoPjAmJiFybi5yZWFkT25seSlyZXR1cm4hMH19cmV0dXJuITF9fSghaWV8fGllJiYhaWUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChXKSxnZSYmbC5hcHBl''@;'; put 'put ''bmRDaGlsZChULmNyZWF0ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSxhcmUuaGFzKGMpfHwoYXJlLnNldChjLCEwKSxmdW5jdGlvbiB3ZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6''@;'; put 'put ''KCk9PihFZSgpLCFaZSgpKX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFaZSgpKSxydW5Pbmx5SWY6KCk9PmMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmd9LHtrZXlzOltbImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoITAp''@;'; put 'put ''LCFaZSgpKSxyZWxhdGl2ZVRvR3JvdXA6Y3kscG9zaXRpb246ImJlZm9yZSJ9XSx7Z3JvdXA6Q0llfSl9KCkpfWZ1bmN0aW9uIG5qKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfXNvLmdldFNpbmdsZXRvbigpLmFkZCgi''@;'; put 'put ''bW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOl8scHJvcDpUfT1sO2lmKCJjaGVja2JveCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpXLHByb3BlcnR5OmllfT1kO2xldCBnZT1hO2lmKFcpZ2U9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFc/VyhmLF8sVCxhKTpXO2Vsc2UgaWYoaWUpe2NvbnN0IHdlPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLGllKTtnZT1udWxsIT09d2U/d2U6YX1jPWdlfXJldHVybiBjfX0pLHRqLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94Ijt2YXIgcXA9RigxMTE3MCksVEllPUYubihx''@;'; put 'put ''cCk7ZnVuY3Rpb24gcmooYyxsLGEsZCxoLGYsXyl7bGV0IFQ9ZjtpZihHdShUKSl7Y29uc3QgVz1fLm51bWVyaWNGb3JtYXQsaWU9VyYmVy5jdWx0dXJlfHwiLSIsZ2U9VyYmVy5wYXR0ZXJuLHdlPV8uY2xhc3NOYW1lfHwiIixFZT13ZS5sZW5ndGg/d2Uuc3BsaXQoIiAiKTpbXTtpZih0eXBl''@;'; put 'put ''b2YgaWU8InUiJiYhcXAubGFuZ3VhZ2VzKClbaWVdKXtjb25zdCBaZT1pZS5yZXBsYWNlKCItIiwiIiksb3Q9cXAuYWxsTGFuZ3VhZ2VzP3FwLmFsbExhbmd1YWdlc1tpZV06cXBbWmVdO290JiZxcC5yZWdpc3Rlckxhbmd1YWdlKG90KX1xcC5zZXRMYW5ndWFnZShpZSksVD1xcChUKS5mb3Jt''@;'; put 'put ''YXQoZ2V8fCIwIiksRWUuaW5kZXhPZigiaHRMZWZ0Iik8MCYmRWUuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZFZS5pbmRleE9mKCJodFJpZ2h0Iik8MCYmRWUuaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmRWUucHVzaCgiaHRSaWdodCIpLEVlLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJkVlLnB1''@;'; put 'put ''c2goImh0TnVtZXJpYyIpLF8uY2xhc3NOYW1lPUVlLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn0kcChjLGwsYSxkLGgsVCxfKX1mdW5jdGlvbiBpaihjLGwsYSxkLGgsZixfKXskcC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSk7Y29uc3QgVz1fLmhhc2hTeW1ib2x8fCIqIjtsZXQgaWU9IiI7''@;'; put 'put ''dm8oKF8uaGFzaExlbmd0aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57aWUrPVd9KSxnZyhsLGllKX1mdW5jdGlvbiBvaihjLGwsYSxkLGgsZixfKXskcC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZixfXSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24gRXkoYyxsKXtsZXQgYT1jO251bGw9PWEm''@;'; put 'put ''JihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsdXJlKGEsbCkpOnVyZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiB1cmUoYyxsKXtj''@;'; put 'put ''b25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQgZj0wLF89ZC5sZW5ndGg7ZjxfO2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiBkcmUoYyl7Y29uc3QgbD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6''@;'; put 'put ''MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gWWsoYyxsKXtjb25zdCBhPUF0ZShlcmUsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1LbyhkLHRoaXMuZGF0ZUZv''@;'; put 'put ''cm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLF89S28obmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKF89ITAsZj0hMCksX3x8KGg9ITEpLCFfJiZmJiYoaD0hMCksXyYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3Jt''@;'; put 'put ''YXQpe2NvbnN0IFQ9ZnVuY3Rpb24gRkllKGMsbCl7Y29uc3QgYT1LbyhkcmUoYykpLGQ9S28oYyxsKSxoPWMuc2VhcmNoKC9bQS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3JtYXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5m''@;'; put 'put ''b3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KSxXPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLGllPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChXLGllLFQsImRhdGVWYWxpZGF0b3IiKSxoPSEw''@;'; put 'put ''fWVsc2UgaD0hMTtsKGgpfWZ1bmN0aW9uIHNqKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmR3UoYykpfXJqLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLGlqLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixvai5SRU5E''@;'; put 'put ''RVJFUl9UWVBFPSJ0aW1lIixFeS5WQUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixZay5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsc2ouVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IE5JZT1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24gV2soYyxs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCBfPUtvKGgsTkll''@;'; put 'put ''LCEwKS5pc1ZhbGlkKCk/S28oaCk6S28oaCxhKTtsZXQgVD1fLmlzVmFsaWQoKSxXPUtvKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKFQ9ITAsVz0hMCksVHx8KGQ9ITEpLCFUJiZXJiYoZD0hMCksVCYmIVcpaWYoITA9PT10aGlzLmNvcnJlY3RG''@;'; put 'put ''b3JtYXQpe2NvbnN0IGllPV8uZm9ybWF0KGEpLGdlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLHdlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChnZSx3ZSxpZSwidGltZVZhbGlkYXRvciIpLGQ9''@;'; put 'put ''ITB9ZWxzZSBkPSExO2woZCl9V2suVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IGpJZT17Q0VMTF9UWVBFOiJhdXRvY29tcGxldGUiLGVkaXRvcjpYQixyZW5kZXJlcjpiNyx2YWxpZGF0b3I6RXl9LHpJZT17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOkpuZSxyZW5kZXJlcjp0an0s''@;'; put 'put ''VUllPXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjpucmUscmVuZGVyZXI6YjcsdmFsaWRhdG9yOllrfSxaSWU9e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpKQixyZW5kZXJlcjpiNyx2YWxpZGF0b3I6RXl9LFlJZT17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpxQixyZW5k''@;'; put 'put ''ZXJlcjpiN30sV0llPXtDRUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpycmUscmVuZGVyZXI6cmosdmFsaWRhdG9yOnNqLGRhdGFUeXBlOiJudW1iZXIifSxHSWU9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjppcmUscmVuZGVyZXI6aWosY29weWFibGU6ITF9LCRJZT17Q0VMTF9UWVBF''@;'; put 'put ''OiJ0aW1lIixlZGl0b3I6c3JlLHJlbmRlcmVyOm9qLHZhbGlkYXRvcjpXa307Y29uc3QgaHJlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBia2UoYyl7cmV0dXJuISF1eShjKX1dLFsiY2VsbC10eXBlIixGbmVdLFsiZWRpdG9yIixrdGVdLFsicmVuZGVyZXIiLEZ0ZV0sWyJ2YWxpZGF0''@;'; put 'put ''b3IiLEh0ZV1dKSxUZz1uZXcgV2Vha01hcCxhaj1bXTtsZXQgX2g9bnVsbDt2YXIgZnJlPW5ldyBXZWFrU2V0O2NsYXNzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfWNvbnN0''@;'; put 'put ''cnVjdG9yKGwpeyhmdW5jdGlvbiBLSWUoYyxsKXsoZnVuY3Rpb24gWEllKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0''@;'; put 'put ''aGlzLGZyZSksZmgodGhpcywiaG90IixsLHt3cml0YWJsZTohMX0pLFRnLnNldCh0aGlzLHtob29rczp7fX0pLF9oPW51bGwsdGhpcy5wbHVnaW5OYW1lPW51bGwsdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3M9W10sdGhpcy5pc1BsdWdpbnNSZWFkeT0hMSx0aGlzLmVuYWJsZWQ9''@;'; put 'put ''ITEsdGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGlu''@;'; put 'put ''Z3MoYSkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUluaXQiLCgpPT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpb''@;'; put 'put ''XTtpZihhLmxlbmd0aD4wKXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbXyxUXT1mLnNwbGl0KCI6Iik7aWYoIWhyZS5oYXMoXykpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7X30iIHdhcyBmb3VuZC5gKTtocmUuZ2V0KF8pKFQp''@;'; put 'put ''fHxoLnB1c2goYCAtICR7VH0gKCR7X30pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTthai5wdXNoKGYpfX1pZihfaHx8''@;'; put 'put ''KF9oPVBOKCkpLF9oLmluZGV4T2YoIlVuZG9SZWRvIik+PTAmJl9oLnNwbGljZShfaC5pbmRleE9mKCJVbmRvUmVkbyIpLDEpLF9oLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmX2guc3BsaWNlKF9oLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09X2gubGVuZ3RoKXtpZihhai5sZW5ndGg+MCl7Y29uc3QgaD1bYCR7YWouam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGlt''@;'; put 'put ''cG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpe3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1hZGRIb29rKGwsYSl7VGcuZ2V0KHRoaXMpLmhvb2tzW2xdPVRnLmdldCh0aGlzKS5ob29rc1tsXXx8W107Y29uc3QgZD1UZy5nZXQo''@;'; put 'put ''dGhpcykuaG9va3NbbF07dGhpcy5ob3QuYWRkSG9vayhsLGEpLGQucHVzaChhKSxUZy5nZXQodGhpcykuaG9va3NbbF09ZH1yZW1vdmVIb29rcyhsKXtEbihUZy5nZXQodGhpcykuaG9va3NbbF18fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3Qg''@;'; put 'put ''bD1UZy5nZXQodGhpcykuaG9va3M7ZHMobCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2lu''@;'; put 'put ''c0luaXRpYWxpemVkKCl7RG4odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT1mdW5jdGlvbiBKSWUo''@;'; put 'put ''YyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGF9KHRoaXMsZnJlLGVMZSkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5p''@;'; put 'put ''c0VuYWJsZWQoKSYmdGhpcy5kaXNhYmxlUGx1Z2luKCksIXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJv''@;'; put 'put ''eSgpe3RoaXMuZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCksZHModGhpcywobCxhKT0+eyJob3QiIT09YSYmKHRoaXNbYV09bnVsbCl9KSxkZWxldGUgdGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24gZUxlKGMpe2lmKCFj''@;'; put 'put ''KXJldHVybiExO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1jW2xbYV1dKXJldHVybiEwO3JldHVybiExfWNvbnN0IGxqPWNsYXNzIHRMZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSx0aGlzLnJvd3M9W10sdGhpcy5jb2x1bW5zPVtdLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMuc2V0dGluZ3M9e3VzZUhlYWRlcnM6ITB9fWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1u''@;'; put 'put ''cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17''@;'; put 'put ''cm93Omx9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy50YWJsZS50''@;'; put 'put ''ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVJvdyhsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhl''@;'; put 'put ''YWRlcigwKSl7Y29uc3QgZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50''@;'; put 'put ''YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQu''@;'; put 'put ''dGFibGU9dGhpcy50YWJsZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0''@;'; put 'put ''ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5n''@;'; put 'put ''KCJ1c2VIZWFkZXJzIikmJm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCksdGhpcy50YWJsZS50Qm9keS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIuY29udGFp''@;'; put 'put ''bmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxEbih0aGlzLnJvd3MsYT0+e2woYS5yb3csYWwoYS50YWJsZSktMSl9KX1nZXRXaWR0aHMobCl7''@;'; put 'put ''dGhpcy5pbmplY3RlZHx8dGhpcy5pbmplY3RUYWJsZSgpLERuKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGlu''@;'; put 'put ''ZyhsLGEpe3RoaXMuc2V0dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91''@;'; put 'put ''cHNDb2woKXtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmbC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChhPT57RG4o''@;'; put 'put ''YS5zdHJpbmdzLGQ9PntsLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChkLmNvbCkpfSl9KSxsfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57RG4oZi5zdHJpbmdzLF89Pntjb25zdCBUPV8uY29sLFc9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxU''@;'; put 'put ''KTtXLmNvbD1ULFcucm93PWw7Y29uc3QgaWU9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKFcpLGdlPWEuY3JlYXRlRWxlbWVudCgidGQiKTtnZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxpZSh0aGlzLmhvdCxnZSxsLFQsdGhpcy5ob3QuY29sVG9Qcm9wKFQpLF8udmFsdWUsVyks''@;'; put 'put ''ZC5hcHBlbmRDaGlsZChnZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgidGgiKTtkLnB1c2goWy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntEbihoLnN0cmluZ3MsZj0+e2NvbnN0IF89Zi5jb2wsVD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFtfLFRdKSxhLmFwcGVuZENoaWxkKFQpfSl9KSx0aGlzLnRhYmxl''@;'; put 'put ''LnRIZWFkLmFwcGVuZENoaWxkKGEpLERuKGQsaD0+e2NvbnN0W2YsX109aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLF8pfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlz''@;'; put 'put ''LnNhbXBsZXMuZm9yRWFjaChoPT57RG4oaC5zdHJpbmdzLGY9Pntjb25zdCBfPWYucm93LFQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoXyxsKTtULmNvbD1sLFQucm93PV87Y29uc3QgVz10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVCksaWU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpLGdlPWEuY3Jl''@;'; put 'put ''YXRlRWxlbWVudCgidHIiKTtpZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxXKHRoaXMuaG90LGllLF8sbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxUKSxnZS5hcHBlbmRDaGlsZChpZSksZC5hcHBlbmRDaGlsZChnZSl9KX0pLGR9Y2xlYW4oKXt0aGlzLnJvd3MubGVu''@;'; put 'put ''Z3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250''@;'; put 'put ''YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtyZXR1cm4gYS5zdHlsZS53aWR0aD1gJHt0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfXB4YCxhfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLF89YS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ0Ym9keSIpLFQ9YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLFc9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLGllPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoVCksdGhpcy5pc0hvcml6b250YWwoKSYmKFcu''@;'; put 'put ''YXBwZW5kQ2hpbGQoaWUpLGYuYXBwZW5kQ2hpbGQoVyksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJl8uYXBwZW5kQ2hpbGQoVyksaC5hcHBlbmRDaGlsZChfKSxwaShoLGwpLGQuYXBw''@;'; put 'put ''ZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5Ol8sY29sR3JvdXA6VCx0cjpXLHRoOmllfX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERv''@;'; put 'put ''Y3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9''@;'; put 'put ''fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2NsYXNzIGNqe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0''@;'; put 'put ''dXJuIDN9Y29uc3RydWN0b3IobCl7dGhpcy5zYW1wbGVzPW51bGwsdGhpcy5kYXRhRmFjdG9yeT1sLHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bnVsbCx0aGlzLmFsbG93RHVwbGljYXRlcz0hMX1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3Vz''@;'; put 'put ''dG9tU2FtcGxlQ291bnQ6Y2ouU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNh''@;'; put 'put ''bXBsZXMoInJvdyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOl99PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRv''@;'; put 'put ''OmR9OmQ7cmV0dXJuIHZvKGYsXyxUPT57Y29uc3QgVz10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxUKTtoLnNldChULFcpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2Nv''@;'; put 'put ''bnN0IGg9bmV3IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93IixfPVtdO3JldHVybiB2byhhLmZyb20sYS50byxUPT57Y29uc3R7dmFsdWU6VyxidW5kbGVTZWVkOmllfT0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9yeShkLFQpOnRoaXMuZGF0YUZhY3RvcnkoVCxkKSxnZT0ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGllJiZpZS5sZW5ndGg+MDtsZXQgd2U7d2U9Z2U/aWU6dXMoVyk/YCR7T2JqZWN0LmtleXMoVykubGVuZ3RofWA6QXJyYXkuaXNBcnJheShXKT9gJHtXLmxlbmd0aH1gOmAke19sKFcpLmxlbmd0aH1gLGguaGFzKHdlKXx8aC5zZXQod2Use25lZWRlZDp0aGlzLmdldFNhbXBsZUNv''@;'; put 'put ''dW50KCksc3RyaW5nczpbXX0pO2NvbnN0IEVlPWguZ2V0KHdlKTtFZS5uZWVkZWQmJighKF8uaW5kZXhPZihXKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxnZSkmJihFZS5zdHJpbmdzLnB1c2goe3ZhbHVlOlcsW2ZdOlR9KSxfLnB1c2goVyksRWUubmVlZGVkLT0xKX0pLGh9fWNvbnN0''@;'; put 'put ''IHByZT1jajtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7Y29uc3Qga3k9ImF1dG9Db2x1bW5TaXplIix1aj1uZXcgV2Vha01hcDtjbGFzcyBBeSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBreX1zdGF0aWMg''@;'; put 'put ''Z2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdWouc2V0KHRoaXMse2NhY2hlZENvbHVtbkhlYWRlcnM6W119KSx0aGlzLmdob3N0VGFibGU9bmV3IGxqKHRoaXMuaG90KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IHByZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgZj0iIjto''@;'; put 'put ''LnNwYW5uZWR8fChmPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IF89IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoXz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixfLGgsZikpLHt2YWx1''@;'; put 'put ''ZTpmLGJ1bmRsZVNlZWQ6X319KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhpcy5pblByb2dyZXNzPSExLHRoaXMubWVhc3VyZWRDb2x1bW5zPTAsdGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IFdwLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1u''@;'; put 'put ''U2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2t5XSYmIXRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldO2EmJm51bGwhPWEudXNlSGVhZGVycyYmdGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhl''@;'; put 'put ''YWRlcnMiLGEudXNlSGVhZGVycyksdGhpcy5zZXRTYW1wbGluZ09wdGlvbnMoKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZD0+''@;'; put 'put ''dGhpcy5vbkJlZm9yZUNoYW5nZShkKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixkPT50aGlzLm9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixkPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihk''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5m''@;'; put 'put ''aW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpO2wubGVuZ3RoJiYodGhpcy5jbGVhckNhY2hlKGwpLHRoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5yZW5kZXJDYWxsLGQ9''@;'; put 'put ''dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxoPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMT09PWR8fC0xPT09aHx8dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpofSx2b2lkIDAsYSl9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJv''@;'; put 'put ''d3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTt2byhoLmZyb20saC50byxfPT57''@;'; put 'put ''bGV0IFQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihfKTtudWxsPT09VCYmKFQ9XyksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoVCkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoVCkpJiZEbih0aGlzLnNhbXBsZXNHZW5lcmF0''@;'; put 'put ''b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKF8sZiksaWU9PntsZXRbZ2Usd2VdPWllO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGdlLHdlKX0pfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0''@;'; put 'put ''VGFibGUuZ2V0V2lkdGhzKChfLFQpPT57Y29uc3QgVz10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKF8pO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChXLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNh''@;'; put 'put ''bGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9MDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IGg9bnVs''@;'; put 'put ''bDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3QgZj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gZHkoaCksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmEsdG86TWF0aC5taW4oYStBeS5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWEr''@;'; put 'put ''QXkuQ0FMQ1VMQVRJT05fU1RFUCsxLGE8ZD9oPXlrKGYpOihkeShoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LF89dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmXz49MCYmKHRoaXMu''@;'; put 'put ''Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOjAsdG86X30sbCksdGhpcy5maXJzdENhbGN1bGF0aW9uPSExLGE9XysxKSxhPGQ/ZigpOnRoaXMuaW5Qcm9ncmVzcz0hMX1zZXRTYW1wbGluZ09wdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldLGE9bCYmYmwobCwi''@;'; put 'put ''c2FtcGxpbmdSYXRpbyIpP2wuc2FtcGxpbmdSYXRpbzp2b2lkIDAsZD1sJiZibChsLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKT9sLmFsbG93U2FtcGxlRHVwbGljYXRlczp2b2lkIDA7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQo''@;'; put 'put ''YSwxMCkpLGQmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMoZCl9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxj''@;'; put 'put ''dWxhdGVBbGxDb2x1bW5zV2lkdGgoKSl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClba3ldO2xldCBhPUF5LlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiB1cyhsKSYmKGE9''@;'; put 'put ''bC5zeW5jTGltaXQsbE4oYSk/YT1JTihkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXT9hcmd1bWVudHNbMV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLGVWLkRFRkFV''@;'; put 'put ''TFRfV0lEVEgpKSksaH1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1pZihsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtpZigtMSE9PWEpcmV0dXJuIHRoaXMu''@;'; put 'put ''aG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53''@;'; put 'put ''dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUu''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfXJldHVybi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRD''@;'; put 'put ''b2xIZWFkZXIoKSx7Y2FjaGVkQ29sdW1uSGVhZGVyczphfT11ai5nZXQodGhpcyk7cmV0dXJuIEFsKGwsKGgsZixfKT0+e2NvbnN0IFQ9YS5sZW5ndGg7cmV0dXJuKFQtMTxffHxhW19dIT09ZikmJmgucHVzaChfKSxULTE8Xz9hLnB1c2goZik6YVtfXT1mLGh9LFtdKX1jbGVhckNhY2hlKCl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO2wubGVuZ3RoP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57RG4obCxhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRo''@;'; put 'put ''aXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIV8xKHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLGw9Pm51bGw9PT1sKS5sZW5ndGh9b25CZWZvcmVWaWV3UmVuZGVyKCl7dGhp''@;'; put 'put ''cy5jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pc05lZWRSZWNhbGN1bGF0ZSgpJiYhdGhpcy5pblByb2dyZXNzJiZ0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVt''@;'; put 'put ''bnNXaWR0aCgpOnNldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfSwwKX1vbkJlZm9yZUNoYW5nZShsKXtjb25zdCBhPWNzKGwsZD0+e2xldFssaF09ZDtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0aGlzLmhvdC5wcm9w''@;'; put 'put ''VG9Db2woaCkpfSk7dGhpcy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChhKSkpfW9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKXtsZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRDb2x1bW5XaWR0aChhLHZv''@;'; put 'put ''aWQgMCwhMSkpLGh9b25BZnRlckluaXQoKXt1ai5nZXQodGhpcykuY2FjaGVkQ29sdW1uSGVhZGVycz10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKX1vbkFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUobCl7Y29uc3QgZD1jcyhfMShsLGg9Pnt2YXIgZjtyZXR1cm4gS2kobnVsbD09PShmPWguYWRk''@;'; put 'put ''cmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuY29sKX0pLGg9PmguYWRkcmVzcy5jb2wpO3RoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9tKG5ldyBTZXQoZCkpKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBEZz17aG9yaXpvbnRhbDoi''@;'; put 'put ''aG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRv''@;'; put 'put ''ZmlsbCIpO2NvbnN0IGFMZT1bImZpbGxIYW5kbGUiXTtjbGFzcyB1TGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJu''@;'; put 'put ''WyJhdXRvZmlsbCIsLi4uYUxlXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5hZGRpbmdTdGFydGVkPSExLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLmhhbmRsZURy''@;'; put 'put ''YWdnZWRDZWxscz0wLHRoaXMuZGlyZWN0aW9ucz1bXSx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdp''@;'; put 'put ''c3RlckV2ZW50cygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PnRoaXMub25BZnRlckNlbGxDb3JuZXJNb3VzZURvd24obCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+dGhpcy5vbkNlbGxDb3JuZXJEYmxDbGljayhs''@;'; put 'put ''KSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT50aGlzLm9uQmVmb3JlQ2VsbE1vdXNlT3ZlcihhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJNYXBwZWRTZXR0aW5ncygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTZWxlY3Rpb25EYXRhKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENv''@;'; put 'put ''cm5lcigpLHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmEsc3RhcnRDb2w6ZCxlbmRSb3c6aCxlbmRDb2w6Zn1dKSxUPVtdLFc9W10saWU9W107cmV0dXJuIERuKF8sZ2U9Pntm''@;'; put 'put ''b3IobGV0IHdlPWdlLnN0YXJ0Um93O3dlPD1nZS5lbmRSb3c7d2UrPTEpLTE9PT1ULmluZGV4T2Yod2UpJiZULnB1c2god2UpO2ZvcihsZXQgd2U9Z2Uuc3RhcnRDb2w7d2U8PWdlLmVuZENvbDt3ZSs9MSktMT09PVcuaW5kZXhPZih3ZSkmJlcucHVzaCh3ZSl9KSxEbihULGdlPT57Y29uc3Qg''@;'; put 'put ''d2U9W107RG4oVyxFZT0+e3dlLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGdlLEVlKSl9KSxpZS5wdXNoKHdlKX0pLGllfWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdFtsLGEsZCxoXT10aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLF89Zi5nZXRUb3BTdGFydENvcm5lcigpLFQ9Zi5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2Vk''@;'; put 'put ''QXJlYSgpO2NvbnN0IFc9W18ucm93LF8uY29sLFQucm93LFQuY29sXSxpZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKF8ucm93LGwpLE1hdGgubWluKF8uY29sLGEpLE1hdGgubWF4KFQucm93LGQpLE1hdGgubWF4KFQuY29sLGgpXSxXKSx7ZGly''@;'; put 'put ''ZWN0aW9uT2ZEcmFnOmdlLHN0YXJ0T2ZEcmFnQ29vcmRzOndlLGVuZE9mRHJhZ0Nvb3JkczpFZX09ZnVuY3Rpb24gaUxlKGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09''@;'; put 'put ''PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihm''@;'; put 'put ''PSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShXLGllLChaZSxvdCk9PnRoaXMuaG90Ll9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKFplLG90KSk7aWYod2UmJndlLnJvdz4tMSYmd2UuY29sPi0xKXtjb25zdCBaZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxvdD1mLmNsb25lKCksZXQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh3ZSx3ZSxFZSkseXQ9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUF1dG9m''@;'; put 'put ''aWxsIixaZSxvdCxldCxnZSk7aWYoITE9PT15dClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQga3Q9eXQ7Y29uc3QgU3Q9eXQ7aWYoWyJ1cCIsImxlZnQiXS5pbmRleE9mKGdlKT4tMSYmKDEhPT1T''@;'; put 'put ''dC5sZW5ndGh8fDAhPT1TdFswXS5sZW5ndGgpKWlmKGt0PVtdLCJ1cCI9PT1nZSl7Y29uc3QgUXQ9RWUucm93LXdlLnJvdysxLHJuPVF0JVN0Lmxlbmd0aDtmb3IobGV0IHZuPTA7dm48UXQ7dm4rKylrdC5wdXNoKFN0Wyh2bisoU3QubGVuZ3RoLXJuKSklU3QubGVuZ3RoXSl9ZWxzZXtjb25z''@;'; put 'put ''dCBRdD1FZS5jb2wtd2UuY29sKzEscm49UXQlU3RbMF0ubGVuZ3RoO2ZvcihsZXQgdm49MDt2bjxTdC5sZW5ndGg7dm4rKyl7a3QucHVzaChbXSk7Zm9yKGxldCBObj0wO05uPFF0O05uKyspa3Rbdm5dLnB1c2goU3Rbdm5dWyhObisoU3Rbdm5dLmxlbmd0aC1ybikpJVN0W3ZuXS5sZW5ndGhd''@;'; put 'put ''KX19dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkod2Uucm93LHdlLmNvbCxrdCxFZS5yb3csRWUuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24oaWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIixrdCxvdCxldCxnZSksdGhp''@;'; put 'put ''cy5ob3QucmVuZGVyKCl9ZWxzZSB0aGlzLmhvdC5fcmVmcmVzaEJvcmRlcnMoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLmhvcml6b250YWwpKXtjb25zdCBm''@;'; put 'put ''PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNv''@;'; put 'put ''bCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKERnLnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoRGcuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhp''@;'; put 'put ''cy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0''@;'; put 'put ''aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFs''@;'; put 'put ''Q29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBXPWxbMV07Vzw9bFszXTtXKyspaWYoYVtmXVtXXSlyZXR1cm4tMTsoYVtmXVtsWzFdLTFdfHxhW2ZdW2xbM10rMV0pJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVh''@;'; put 'put ''VG9TcGVjaWZpY1Jvd0luZGV4KGwsYSl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgpfXNl''@;'; put 'put ''dFNlbGVjdGlvbihsKXt0aGlzLmhvdC5zZWxlY3RDZWxsKC4uLmNzKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpO3Jl''@;'; put 'put ''dHVybi0xIT09YSYmdm9pZCAwIT09YSYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln''@;'; put 'put ''aHQuZ2V0RmlsbCgpLmNsZWFyKCl9cmVkcmF3Qm9yZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRv''@;'; put 'put ''KS5hZGQobCkuY29tbWl0KCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxkPXFsKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cu''@;'; put 'put ''cGFnZVlPZmZzZXR8fGEuc2Nyb2xsVG9wKSthbCh0aGlzLmhvdC50YWJsZSksaD1xbCh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KSt3YSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNsaWVu''@;'; put 'put ''dFg8PWh9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKX1vbkNlbGxDb3JuZXJEYmxDbGljaygpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bigpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhp''@;'; put 'put ''cy5tb3VzZURvd25PbkNlbGxDb3JuZXI9ITB9b25CZWZvcmVDZWxsTW91c2VPdmVyKGwpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRo''@;'; put 'put ''aXMuc2hvd0JvcmRlcihsKSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfW9uTW91c2VVcCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25D''@;'; put 'put ''ZWxsQ29ybmVyPSExKX1vbk1vdXNlTW92ZShsKXtjb25zdCBhPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZhPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdT''@;'; put 'put ''dGFydGVkPSEwKTp0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9bWFw''@;'; put 'put ''U2V0dGluZ3MoKXtjb25zdCBsPWZ1bmN0aW9uIG9MZShjKXtjb25zdCBsPXt9O3JldHVybiEwPT09Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKERnKSxsLmF1dG9JbnNlcnRSb3c9ITApOnVzKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFLaShjLmF1dG9JbnNlcnRSb3cpJiZjLmRpcmVjdGlv''@;'; put 'put ''biE9PURnLmhvcml6b250YWwmJmMuYXV0b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9S2koYy5kaXJlY3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoRGcpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93PSEwKToobC5kaXJlY3Rpb25z''@;'; put 'put ''PVtdLGwuYXV0b0luc2VydFJvdz0hMSksbH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgR2s9ImF1''@;'; put 'put ''dG9Sb3dTaXplIjtjbGFzcyBUeSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBHa31zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RF''@;'; put 'put ''UCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMucm93SGVpZ2h0c01hcD12b2lkIDAsdGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCx0aGlzLmdob3N0VGFibGU9bmV3IGxqKHRoaXMuaG90''@;'; put 'put ''KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IHByZSgoYSxkKT0+e2xldCBoO3JldHVybiBhPj0wP2g9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6aH19KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhp''@;'; put 'put ''cy5pblByb2dyZXNzPSExLHRoaXMubWVhc3VyZWRSb3dzPTAsdGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBXcCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChh''@;'; put 'put ''LGQsaCk9PnRoaXMub25CZWZvcmVSb3dSZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbR2tdO3JldHVybiEwPT09bHx8dXMobCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldFNhbXBsaW5nT3B0''@;'; put 'put ''aW9ucygpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixhPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGEpKSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZUNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsYT0+dGhpcy5vbkJlZm9yZVZpZXdSZW5kZXIoYSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoYSxkKT0+dGhpcy5nZXRS''@;'; put 'put ''b3dIZWlnaHQoZCxhKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsc3VwZXIuZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlUm93UmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJv''@;'; put 'put ''bTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1sy''@;'; put 'put ''XSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3QgXz10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2Vu''@;'; put 'put ''ZXJhdGVSb3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KF8uZ2V0KC0xKSl9dm8oaC5mcm9tLGgudG8sXz0+eyhkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChfKSkmJkRuKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5n''@;'; put 'put ''ZW5lcmF0ZVJvd1NhbXBsZXMoXyxmKSxXPT57bGV0W2llLGdlXT1XO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkUm93KGllLGdlKX0pfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0''@;'; put 'put ''cygoXyxUKT0+e188MD90aGlzLmhlYWRlckhlaWdodD1UOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfKSxUKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVB''@;'; put 'put ''bGxSb3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Q''@;'; put 'put ''cm9ncmVzcz0hMDtjb25zdCBmPSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBkeShoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmEsdG86TWF0aC5taW4oYStUeS5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWErVHkuQ0FMQ1VMQVRJ''@;'; put 'put ''T05fU1RFUCsxLGE8ZD9oPXlrKGYpOihkeShoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmhvdC52aWV3Ll93''@;'; put 'put ''dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS5kcmF3KCkpfSxfPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTt0aGlzLmZpcnN0Q2FsY3VsYXRpb24mJl8+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpffSxsKSx0aGlzLmZpcnN0Q2Fs''@;'; put 'put ''Y3VsYXRpb249ITEsYT1fKzEpLGE8ZD9mKCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMSkpfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHa10sYT1sJiZibChsLCJzYW1wbGluZ1JhdGlv''@;'; put 'put ''Iik/bC5zYW1wbGluZ1JhdGlvOnZvaWQgMCxkPWwmJmJsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhp''@;'; put 'put ''cy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXtlNyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSYmKHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKX1nZXRTeW5jQ2Fs''@;'; put 'put ''Y3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHa107bGV0IGE9VHkuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHVzKGwpJiYoYT1sLnN5bmNMaW1pdCxsTihhKT9hPUlOKGQsYSk6YT4+PTAp''@;'; put 'put ''LE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lkIDA7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7''@;'; put 'put ''cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3I/bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOi0xfWdldExhc3RWaXNpYmxlUm93KCl7Y29u''@;'; put 'put ''c3QgbD10aGlzLmhvdC52aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKTpsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3I/bC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpOi0xfWNs''@;'; put 'put ''ZWFyQ2FjaGUoKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLHRoaXMucm93SGVpZ2h0c01hcC5pbml0KCl9Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt2''@;'; put 'put ''byhNYXRoLm1pbihhLGQpLE1hdGgubWF4KGEsZCksaD0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIV8xKHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3Vy''@;'; put 'put ''ZWRSb3dzKSxsPT5udWxsPT09bCkubGVuZ3RofW9uQmVmb3JlVmlld1JlbmRlcigpe2NvbnN0IGw9dGhpcy5ob3QucmVuZGVyQ2FsbCxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGQ9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxoPXRoaXMuZ2V0TGFzdFZpc2li''@;'; put 'put ''bGVSb3coKTtpZigtMSE9PWQmJi0xIT09aCl7aWYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86aH0sdm9pZCAwLGwpLGEpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCktMTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206Zi1hLHRvOmZ9KX10aGlzLmlzTmVl''@;'; put 'put ''ZFJlY2FsY3VsYXRlKCkmJiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfX1vbkJlZm9yZVJvd01vdmUobCxhKXt0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKHtmcm9tOmwsdG86YX0pLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfW9uQmVmb3JlUm93''@;'; put 'put ''UmVzaXplKGwsYSxkKXtsZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGEsdm9pZCAwLCEwKSxoPXRoaXMuZ2V0Um93SGVpZ2h0KGEpKSxofW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKTpzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57dGhpcy5ob3QmJnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2xldCBhPW51bGw7MT09PWwubGVuZ3RoP2E9bFswXVswXTpsLmxlbmd0aD4xJiYoYT17ZnJvbTpsWzBdWzBdLHRvOmxbbC5sZW5ndGgtMV1bMF19KSxudWxs''@;'; put 'put ''IT09YSYmdGhpcy5jbGVhckNhY2hlQnlSYW5nZShhKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBtcmU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6Y1YsZ2V0TGlzdFdpdGhSZW1v''@;'; put 'put ''dmVkSXRlbXM6Z3l9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmhWLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmZWfV1dKSx2cmU9Yz0+e2lmKCExPT09bXJlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7''@;'; put 'put ''Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBtcmUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOmZMZSxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpwTGV9PXZyZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOnZMZSxnZXRMaXN0V2l0''@;'; put 'put ''aFJlbW92ZWRJdGVtczpfTGV9PXZyZSgicGh5c2ljYWxseUluZGV4ZWQiKSxkaj0iYmluZFJvd3NXaXRoSGVhZGVycyIsU0xlPW5ldyBNYXAoW1sibG9vc2UiLGNsYXNzIGdMZSBleHRlbmRzIEVne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1kVih0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPWZMZShkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPXBMZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPXVWKGEsbCksc3VwZXIucmVt''@;'; put 'put ''b3ZlKGwpfX1dLFsic3RyaWN0IixjbGFzcyBiTGUgZXh0ZW5kcyBFZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz12TGUodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUoaCkpLHN1cGVyLmluc2Vy''@;'; put 'put ''dChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9X0xlKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTtjbGFzcyBNTGUgZXh0ZW5kcyBac3tzdGF0''@;'; put 'put ''aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuaGVhZGVySW5kZXhlcz1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkal19''@;'; put 'put ''ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtsZXQgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RqXTsic3RyaW5nIiE9dHlwZW9mIGwmJihsPSJsb29zZSIpO2NvbnN0IGE9U0xlLmdldChsKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''cmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+dGhpcy5vbk1vZGlmeVJvd0hlYWRlcihkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVu''@;'; put 'put ''cmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9b25Nb2RpZnlSb3dIZWFkZXIobCl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9ZGVzdHJveSgpe3N1cGVyLmRl''@;'; put 'put ''c3Ryb3koKX19ZnVuY3Rpb24gaGooYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGtMZShjKXt2YXIgbD1mdW5jdGlvbiBBTGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBfcmUoYyxsKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gVExlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxicmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gZmooYyxsLGEpe3JldHVybiBmdW5jdGlvbiBETGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRh''@;'; put 'put ''YmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGJyZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gYnJlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHBqPSJjb2xsYXBzaWJsZUNvbHVtbnMiLExMZT1bIm5lc3RlZEhlYWRlcnMiXSxDNz0iY29sbGFwc2libGVJbmRpY2F0b3IiLHlyZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlk''@;'; put 'put ''ZUNvbHVtbjohMCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQi''@;'; put 'put ''fV1dKTt2YXIgUzc9bmV3IFdlYWtNYXA7Y2xhc3MgUkxlIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGhqKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLGhqKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGxsKHRoaXMpKSxoaih0aGlzLCJoZWFk''@;'; put 'put ''ZXJTdGF0ZU1hbmFnZXIiLG51bGwpLGZ1bmN0aW9uIHhMZShjLGwsYSl7KGZ1bmN0aW9uIEVMZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp''@;'; put 'put ''LGwuc2V0KGMsYSl9KHRoaXMsUzcse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpOZXN0''@;'; put 'put ''ZWRIZWFkZXJzIl19c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bcGosLi4uTExlXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcGpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRI''@;'; put 'put ''ZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7YXx8R2EoIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLGZqKHRoaXMsUzcsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''Y3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdl''@;'; put 'put ''dFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFk''@;'; put 'put ''ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PnRoaXMub25CZWZvcmVPbkNlbGxNb3VzZURvd24oZCxoLGYpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0''@;'; put 'put ''aGlzLnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xl''@;'; put 'put ''YW4iPT10eXBlb2YgbD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5o''@;'; put 'put ''ZWFkZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLGZqKHRoaXMsUzcsbnVsbCksdGhpcy5uZXN0ZWRIZWFk''@;'; put 'put ''ZXJzUGx1Z2luPW51bGwsdGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMu''@;'; put 'put ''aG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKF8pe18mJl8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfKX07dm8oMCxsLTEsXz0+e2NvbnN0IFQ9YS5jaGlsZE5vZGVzW19dLFc9ZC5jaGlsZE5vZGVzW19d''@;'; put 'put ''LGllPWg/aC5jaGlsZE5vZGVzW19dOm51bGw7dm8oMCxULmNoaWxkTm9kZXMubGVuZ3RoLTEsZ2U9PntsZXQgd2U9VC5jaGlsZE5vZGVzW2dlXS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKTtmKHdlKSxXJiZXLmNoaWxkTm9kZXNbZ2VdJiYod2U9Vy5jaGlsZE5vZGVzW2dlXS5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKGAuJHtDN31gKSxmKHdlKSksaCYmaWUmJmllLmNoaWxkTm9kZXNbZ2VdJiYod2U9aWUuY2hpbGROb2Rlc1tnZV0ucXVlcnlTZWxlY3RvcihgLiR7Qzd9YCksZih3ZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9''@;'; put 'put ''Y29sbGFwc2VTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3Jp''@;'; put 'put ''Z0NvbHNwYW46ZixoZWFkZXJMZXZlbDpfLGNvbHVtbkluZGV4OlQsaXNDb2xsYXBzZWQ6V309ZDtpZighMD09PWgmJmY+MSYmKFcmJiJleHBhbmQiPT09bHx8IVcmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHMoXyks''@;'; put 'put ''Y29sOlR9fSk7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2ds''@;'; put 'put ''ZUNvbGxhcHNpYmxlU2VjdGlvbihsLGEpe2lmKCF5cmUuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9XzEobCxFZT0+e2xldHtyb3c6WmV9PUVlO3JldHVybiBa''@;'; put 'put ''ZTwwfSk7bGV0IGg9ZC5sZW5ndGg+MDtEbihkLEVlPT57dmFyIFplO2xldHtyb3c6b3QsY29sOmV0fT1FZTtjb25zdHtjb2xsYXBzaWJsZTp5dCxpc0NvbGxhcHNlZDprdH09bnVsbCE9PShaZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhvdCxldCkpJiZ2b2lk''@;'; put 'put ''IDAhPT1aZT9aZTp7fTtpZigheXR8fGt0JiYiY29sbGFwc2UiPT09YXx8IWt0JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLF89W107aCYmRG4oZCxFZT0+e2xldHtyb3c6WmUsY29sOm90fT1FZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOmV0LGFmZmVjdGVk''@;'; put 'put ''Q29sdW1uczp5dCxyb2xsYmFja01vZGlmaWNhdGlvbjprdH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxaZSxvdCk7ZXQ+MCYmKF8ucHVzaCguLi55dCksZi5wdXNoKGt0KSl9KTtjb25zdCBUPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xl''@;'; put 'put ''dCBXPVtdOyJjb2xsYXBzZSI9PT1hP1c9ck4oWy4uLlQsLi4uX10pOiJleHBhbmQiPT09YSYmKFc9XzEoVCxFZT0+IV8uaW5jbHVkZXMoRWUpKSk7Y29uc3QgaWU9eXJlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKGllLmJlZm9yZUhvb2ssVCxXLGgpKXJldHVybiB2b2lkIERu''@;'; put 'put ''KGYsRWU9PntFZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntEbihfLEVlPT57X3JlKHRoaXMsUzcpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEVlKSxpZS5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3Qgd2U9dGhpcy5nZXRDb2xsYXBzZWRDb2x1''@;'; put 'put ''bW5zKCkubGVuZ3RoIT09VC5sZW5ndGg7dGhpcy5ob3QucnVuSG9va3MoaWUuYWZ0ZXJIb29rLFQsVyxoLHdlKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBfcmUodGhpcyxTNykuZ2V0''@;'; put 'put ''SGlkZGVuSW5kZXhlcygpfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhLGQpe3ZhciBoO2NvbnN0e2NvbGxhcHNpYmxlOmYsb3JpZ0NvbHNwYW46Xyxpc0NvbGxhcHNlZDpUfT1udWxsIT09KGg9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoZCxsKSkmJnZvaWQgMCE9''@;'; put 'put ''PWg/aDp7fSxXPWYmJl8+MSYmbD49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtsZXQgaWU9YS5xdWVyeVNlbGVjdG9yKGAuJHtDN31gKTt2YXIgZ2U7Vz8oaWV8fChpZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikscGkoaWUsQzcp''@;'; put 'put ''LGEucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoaWUpKSxXbyhpZSxbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLFQ/KHBpKGllLCJjb2xsYXBzZWQiKSxqcChpZSwiKyIpKToocGkoaWUsImV4cGFuZGVkIiksanAoaWUsIi0iKSkpOm51bGw9PT0oZ2U9aWUp''@;'; put 'put ''fHx2b2lkIDA9PT1nZXx8Z2UucmVtb3ZlKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhKXtCbyhsLnRhcmdldCxDNykmJihCbyhsLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGwudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBz''@;'; put 'put ''aWJsZVNlY3Rpb24oW2FdLCJjb2xsYXBzZSIpKTpCbyhsLnRhcmdldCwiY29sbGFwc2VkIikmJih0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImV4cGFuZCIpKSx2MihsKSl9b25Jbml0KCl7''@;'; put 'put ''dGhpcy51cGRhdGVQbHVnaW4oKX1vbkFmdGVyTG9hZERhdGEobCxhKXthfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWRlc3Ryb3koKXtmaih0aGlzLFM3LG51bGwpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgT0xlPVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJj''@;'; put 'put ''b21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3MgTkxle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLnNvcnRpbmdTdGF0ZXM9bmV3IEVrLHRoaXMuc29ydEVtcHR5Q2VsbHM9ITEsdGhpcy5pbmRpY2F0b3I9ITAsdGhpcy5oZWFkZXJBY3Rpb249ITAsdGhpcy5jb21wYXJlRnVu''@;'; put 'put ''Y3Rpb25GYWN0b3J5PXZvaWQgMCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7dXMobCkmJmRzKGwsKGEsZCk9PntPTGUuaW5jbHVkZXMoZCkmJih0''@;'; put 'put ''aGlzW2RdPWEpfSl9Z2V0QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0''@;'; put 'put ''aGlzLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRl''@;'; put 'put ''eCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCku''@;'; put 'put ''ZmluZEluZGV4KGE9PntsZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVk''@;'; put 'put ''Q29sdW1ucygpfWlzQ29sdW1uU29ydGVkKGwpe3JldHVybiB1cyh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0''@;'; put 'put ''aW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoS2koYSkpcmV0dXJu''@;'; put 'put ''e2NvbHVtbjpsLHNvcnRPcmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1''@;'; put 'put ''bW4pLHtzb3J0T3JkZXI6bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1jb25zdCAkaz0iYXNjIixxaz0iZGVzYyI7ZnVuY3Rpb24gd3JlKGMpe2lm''@;'; put 'put ''KGMhPT1xaylyZXR1cm4gYz09PSRrP3FrOiRrfWZ1bmN0aW9uIENyZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIil9ZnVuY3Rpb24gU3JlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hp''@;'; put 'put ''bGROb2RlcztyZXR1cm4gQXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFyZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIGdqKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09VXAoYSl9Y29uc3QgTXJlPSJpbmRpY2F0b3JEaXNhYmxlZCIseHJlPSJjb2x1bW5Tb3J0aW5nIixF''@;'; put 'put ''cmU9InNvcnRBY3Rpb24iLGtyZT1uZXcgTWFwKFtbJGssImFzY2VuZGluZyJdLFtxaywiZGVzY2VuZGluZyJdXSk7ZnVuY3Rpb24gQXJlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOl99PWE7cmV0dXJuInN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiBoJiYoaD1oLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mPzA6cGMoaCk/cGMoZik/MDpfJiYiYXNjIj09PWM/LTE6MTpwYyhmKT9fJiYiYXNjIj09PWM/MTotMTppc05hTihoKSYmIWlzTmFO''@;'; put 'put ''KGYpPyJhc2MiPT09Yz8xOi0xOiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYpKSxoPGYpPyJhc2MiPT09Yz8tMToxOmg+Zj8iYXNjIj09PWM/MTotMTowfX1jb25zdHtyZWdpc3RlcjpLayxnZXRJdGVtOkRy''@;'; put 'put ''ZSxoYXNJdGVtOlFMZX09cGQoInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3RlcjpJcmUsZ2V0SXRlbTplUmV9PXBkKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uIExyZShjKXtyZXR1cm4gUUxlKGMpP0RyZShjKTpEcmUoImRlZmF1bHQiKX1L''@;'; put 'put ''aygibnVtZXJpYyIsZnVuY3Rpb24gR0xlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksXz1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpUfT1hO2lmKGY9PT1ffHxpc05hTihmKSYmaXNOYU4oXykpcmV0dXJuIDA7aWYoVCl7aWYocGMoZCkp''@;'; put 'put ''cmV0dXJuImFzYyI9PT1jPy0xOjE7aWYocGMoaCkpcmV0dXJuImFzYyI9PT1jPzE6LTF9cmV0dXJuIGlzTmFOKGYpPzE6aXNOYU4oXyk/LTE6ZjxfPyJhc2MiPT09Yz8tMToxOmY+Xz8iYXNjIj09PWM/MTotMTowfX0pLEtrKCJjaGVja2JveCIsZnVuY3Rpb24gcUxlKGMsbCxhKXtjb25zdCBk''@;'; put 'put ''PWwuY2hlY2tlZFRlbXBsYXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24oXyxUKXtjb25zdCBXPXBjKF8pLGllPXBjKFQpLGdlPVc/aDpfLHdlPWllP2g6VCxFZT1nZT09PWh8fGdlPT09ZCxaZT13ZT09PWh8fHdlPT09ZDtpZigh''@;'; put 'put ''MT09PWYpe2lmKFcmJiExPT09aWUpcmV0dXJuIDE7aWYoITE9PT1XJiZpZSlyZXR1cm4tMX1yZXR1cm4hMT09PUVlJiZaZT8iYXNjIj09PWM/LTE6MTpFZSYmITE9PT1aZT8iYXNjIj09PWM/MTotMTohMT09PUVlJiYhMT09PVplP0FyZShjLGwsYSkoXyxUKTpnZT09PWgmJndlPT09ZD8iYXNj''@;'; put 'put ''Ij09PWM/LTE6MTpnZT09PWQmJndlPT09aD8iYXNjIj09PWM/MTotMTowfX0pLEtrKCJkYXRlIixmdW5jdGlvbiBYTGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIDA7aWYocGMoZCkpcmV0dXJuIHBjKGgpPzA6''@;'; put 'put ''ZiYmImFzYyI9PT1jPy0xOjE7aWYocGMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz8xOi0xO2NvbnN0IF89bC5kYXRlRm9ybWF0LFQ9S28oZCxfKSxXPUtvKGgsXyk7cmV0dXJuIFQuaXNWYWxpZCgpP1cuaXNWYWxpZCgpP1cuaXNBZnRlcihUKT8iYXNjIj09PWM/LTE6MTpXLmlzQmVmb3JlKFQp''@;'; put 'put ''PyJhc2MiPT09Yz8xOi0xOjA6LTE6MX19KSxLaygiZGVmYXVsdCIsQXJlKTtjb25zdCBtaj0iY29sdW1uU29ydGluZyI7SXJlKG1qLGZ1bmN0aW9uIHRSZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oVCl7Y29uc3Qg''@;'; put 'put ''Vz1jWzBdLGllPWxbMF0sZ2U9aFswXSx3ZT1mWzBdLEVlPWllLmNvbHVtblNvcnRpbmc7cmV0dXJuKEVlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/RWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTpMcmUoaWUudHlwZSkpKFcsaWUsRWUpKGdlLHdlKX0oKX19KSxzby5nZXRTaW5nbGV0b24oKS5y''@;'; put 'put ''ZWdpc3RlcigiYmVmb3JlQ29sdW1uU29ydCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjbGFzcyBPcmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gbWp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''NTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLnBsdWdpbktleT1taix0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRT''@;'; put 'put ''ZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgTkxlKHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9''@;'; put 'put ''bmV3IFdwKGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1u''@;'; put 'put ''TWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVP''@;'; put 'put ''bkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLmxvYWRPclNvcnRCeVNldHRpbmdzKCkp''@;'; put 'put ''LHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2Nv''@;'; put 'put ''bnN0IGw9KGEsZCk9Pntjb25zdCBoPUNyZShkKTshMT09PVNyZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9''@;'; put 'put ''Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhl''@;'; put 'put ''c1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlz''@;'; put 'put ''LmNvbHVtblN0YXRlc01hbmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXpl''@;'; put 'put ''ZFNvcnRDb25maWdzKGwpLGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZUNhY2hlPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyB2bmUpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1u''@;'; put 'put ''U3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmKHRoaXMuaG90LnJlbmRlcigpLHRoaXMu''@;'; put 'put ''aG90LmZvcmNlRnVsbFJlbmRlcj0hMSx0aGlzLmhvdC52aWV3LnJlbmRlcigpKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRT''@;'; put 'put ''b3J0Q29uZmlnKGwpe3JldHVybiBLaShsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25m''@;'; put 'put ''aWdzKGwpO3RoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd''@;'; put 'put ''OltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBqTGUoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24gQkxlKGMpe2lmKCExPT09dXMo''@;'; put 'put ''YykpcmV0dXJuITE7Y29uc3R7Y29sdW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJlskayxxa10uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBsPWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3IFNldChs''@;'; put 'put ''KS5zaXplPT09bC5sZW5ndGh9KGwpJiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0aWFsQ29u''@;'; put 'put ''ZmlnPWNzKGwsaD0+e2xldHtjb2x1bW46ZiwuLi5ffT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi5ffX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0U2V0dGlu''@;'; put 'put ''Z3MoKXtjb25zdCBsPXt9O3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBLaShhKSYmQXJyYXkuaXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPWNzKGEuaW5pdGlh''@;'; put 'put ''bENvbmZpZyxoPT57bGV0e2NvbHVtbjpmLC4uLl99PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi5ffX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7''@;'; put 'put ''aWYoS2koYSkpe2NvbnN0IGg9d3JlKGEpO3JldHVybiBLaShoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0ludGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOndyZSgpfX1n''@;'; put 'put ''ZXROZXh0U29ydENvbmZpZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFwcGVuZCI7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9''@;'; put 'put ''dGhpcy5nZXRTb3J0Q29uZmlnKCksXz10aGlzLmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoTGEoXykpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKCJhcHBlbmQiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSxfXTtp''@;'; put 'put ''ZigicmVwbGFjZSI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksXywuLi5mLnNsaWNlKGQrMSldfXJldHVybiBLaShfKT9mLmNvbmNhdChfKTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZih1cyhsKSl7Y29uc3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZih1cyhhKSlyZXR1cm4gYX1y''@;'; put 'put ''ZXR1cm57fX1nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9''@;'; put 'put ''T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpO3JldHVybiBBcnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6UmEoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNv''@;'; put 'put ''bHVtbkNvbmZpZyhmLmNvbHVtbnMobCkpKTpPYmplY3QuYXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTtyZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2Fj''@;'; put 'put ''aGUuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dzPD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNl''@;'; put 'put ''dFNvcnRTdGF0ZXMobCl7aWYoMD09PWwubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKTtjb25zdCBhPVtdLGQ9dGhpcy5ob3QuY291bnRSb3dzKCksaD1pZT0+''@;'; put 'put ''Y3MobCxnZT0+dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChpZSxnZS5jb2x1bW4pKTtmb3IobGV0IGllPTA7aWU8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7aWUrPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KGllKV0uY29uY2F0KGgoaWUpKSk7Y29uc3QgZj1jcyhhLGll''@;'; put 'put ''PT5pZVswXSk7IWZ1bmN0aW9uIFdMZShjLGwpe2NvbnN0IGE9ZVJlKGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVnaW5LZXksY3MobCxp''@;'; put 'put ''ZT0+aWUuc29ydE9yZGVyKSxjcyhsLGllPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGllLmNvbHVtbikpKTtmb3IobGV0IGllPWEubGVuZ3RoO2llPGQ7aWUrPTEpYS5wdXNoKFtpZV0uY29uY2F0KGgoaWUpKSk7Y29uc3QgXz1jcyhhLGllPT5pZVswXSksVD1uZXcgTWFwKGNzKGYsKGll''@;'; put 'put ''LGdlKT0+W2llLF9bZ2VdXSkpLFc9Y3ModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksaWU9PlQuaGFzKGllKT9ULmdldChpZSk6aWUpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShXKX1sb2FkT3JTb3J0QnlTZXR0aW5ncygp''@;'; put 'put ''e2NvbnN0IGw9dGhpcy5nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKHVzKGwpKXRoaXMuc29ydEJ5U2V0dGluZ3MobCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MoYSl9fXNvcnRCeVNldHRpbmdzKGwp''@;'; put 'put ''e2lmKHVzKGwpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29uc3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fHVzKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9b25BZnRlckdldENv''@;'; put 'put ''bEhlYWRlcihsLGEpe2NvbnN0IGQ9Q3JlKGEpO2lmKCExPT09U3JlKGwsYSl8fG51bGw9PT1kKXJldHVybjtjb25zdCBoPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MobClbdGhpcy5wbHVnaW5LZXldO3RoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhkLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdl''@;'; put 'put ''cixsLGguaW5kaWNhdG9yLGguaGVhZGVyQWN0aW9uKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2lmKFdvKGwsZnVuY3Rpb24gWUxlKCl7cmV0dXJuIEFycmF5LmZyb20oa3JlLnZhbHVlcygpKS5jb25jYXQoRXJlLE1yZSx4cmUpfSgpKSwhMSE9PXRoaXMuZW5hYmxlZCl7Zm9yKHZhciBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3BpKGwsZnVuY3Rpb24gWkxlKGMsbCxhLGQpe2NvbnN0IGg9W3hyZV07aWYoZCYmaC5wdXNoKEVyZSksITE9PT1hKXJldHVybiBoLnB1c2goTXJlKSxoO2NvbnN0IGY9''@;'; put 'put ''Yy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtyZXR1cm4gS2koZikmJmgucHVzaChrcmUuZ2V0KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncygpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUu''@;'; put 'put ''aW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksS2kobFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX1vbkFmdGVyTG9hZERhdGEobCl7ITA9PT1sJiZ0aGlzLmhvdC52aWV3JiZ0aGlzLmxv''@;'; put 'put ''YWRPclNvcnRCeVNldHRpbmdzKCl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJiJTUEFOIj09PWwudGFyZ2V0Lm5vZGVOYW1lfW9uQmVmb3JlT25DZWxsTW91c2VE''@;'; put 'put ''b3duKGwsYSxkLGgpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoaC5jb2x1bW49ITApfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxh''@;'; put 'put ''KXshMSE9PWdqKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEu''@;'; put 'put ''Y29sKSksdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gdmooYyl7cmV0dXJu''@;'; put 'put ''IG51bGw9PWN8fGlzTmFOKGMpfWNvbnN0IF9qPSJjb2x1bW5TdW1tYXJ5IjtjbGFzcyBhUmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX2p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjIwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRo''@;'; put 'put ''aXMuZW5kcG9pbnRzPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW19qXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtfal0sdGhpcy5lbmRwb2ludHM9bmV3''@;'; put 'put ''IGNsYXNzIGlSZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuZW5kcG9pbnRzPVtdLHRoaXMuc2V0dGluZ3M9YSx0aGlzLnNldHRpbmdzVHlwZT0iYXJyYXkiLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5jZWxsc1Rv''@;'; put 'put ''U2V0Q2FjaGU9W119Z2V0RW5kcG9pbnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09''@;'; put 'put ''PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29u''@;'; put 'put ''c3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxEbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSks''@;'; put 'put ''dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5''@;'; put 'put ''IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1''@;'; put 'put ''bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5n''@;'; put 'put ''KGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlv''@;'; put 'put ''biIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIh''@;'; put 'put ''PT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixm''@;'; put 'put ''PXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7RG4oZixfPT57InJvdyI9PT1oJiZfLmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD9fLmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKF8uYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmXy5kZXN0aW5h''@;'; put 'put ''dGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29sIj09PWw/Xy5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJihfLmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlv''@;'; put 'put ''bihsLGEsZCxoLGYpe2xldCBfPSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBFZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIi''@;'; put 'put ''LEVlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLEVlKX1jb25zdCBUPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsVz1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsaWU9dGhp''@;'; put 'put ''cy5nZXRBbGxFbmRwb2ludHMoKSxnZT0wPT09bC5pbmRleE9mKCJtb3ZlX3JvdyIpLHdlPWE7RG4oaWUsRWU9Pnsicm93Ij09PVQmJkVlLmRlc3RpbmF0aW9uUm93Pj13ZSYmKEVlLmFsdGVyUm93T2Zmc2V0PVcqZCksImNvbCI9PT1UJiZFZS5kZXN0aW5hdGlvbkNvbHVtbj49d2UmJihFZS5h''@;'; put 'put ''bHRlckNvbHVtbk9mZnNldD1XKmQpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhpZSwhZ2UpLERuKGllLGdlP0VlPT57dGhpcy5leHRlbmRFbmRwb2ludFJhbmdlcyhFZSx3ZSxoWzBdLGgubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoRWUpLHRoaXMuY2xlYXJPZmZzZXRJ''@;'; put 'put ''bmZvcm1hdGlvbihFZSl9OkVlPT57dGhpcy5zaGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoRWUsd2UpfSksXyYmdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Y2xlYXJPZmZzZXRJbmZvcm1hdGlvbihsKXtsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQg''@;'; put 'put ''MH1leHRlbmRFbmRwb2ludFJhbmdlcyhsLGEsZCxoKXtEbihsLnJhbmdlcyxmPT57ZlsxXSYmKGE+PWZbMF0mJmE8PWZbMV0/ZD5mWzFdP2ZbMV0rPWg6ZDxmWzBdJiYoZlswXS09aCk6ZD49ZlswXSYmZDw9ZlsxXSYmKGZbMV0tPWgsYTw9ZlswXSYmKGZbMF0rPTEsZlsxXSs9MSkpKX0pfXJl''@;'; put 'put ''Y3JlYXRlUGh5c2ljYWxSYW5nZXMobCl7Y29uc3QgZD1bXSxoPVtdO0RuKGwucmFuZ2VzLGY9Pntjb25zdCBfPVtdO2lmKGZbMV0pZm9yKGxldCBUPWZbMF07VDw9ZlsxXTtUKyspXy5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coVCkpO2Vsc2UgXy5wdXNoKHRoaXMuaG90LnRvUGh5c2lj''@;'; put 'put ''YWxSb3coZlswXSkpO2gucHVzaChfKX0pLERuKGgsZj0+e2xldCBfPVtdO0RuKGYsKFQsVyk9PnswPT09Vz9fLnB1c2goVCk6ZltXXSE9PWZbVy0xXSsxJiYoXy5wdXNoKGZbVy0xXSksZC5wdXNoKF8pLF89W10sXy5wdXNoKFQpKSxXPT09Zi5sZW5ndGgtMSYmKF8ucHVzaChUKSxkLnB1c2go''@;'; put 'put ''XykpfSl9KSxsLnJhbmdlcz1kfXNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhsLGEpe2wuYWx0ZXJSb3dPZmZzZXQmJjAhPT1sLmFsdGVyUm93T2Zmc2V0PyhsLmRlc3RpbmF0aW9uUm93Kz1sLmFsdGVyUm93T2Zmc2V0fHwwLERuKGwucmFuZ2VzLGQ9PntEbihkLChoLGYpPT57aD49YSYmKGRb''@;'; put 'put ''Zl0rPWwuYWx0ZXJSb3dPZmZzZXR8fDApfSl9KSk6bC5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWwuYWx0ZXJDb2x1bW5PZmZzZXQmJihsLmRlc3RpbmF0aW9uQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGwuc291cmNlQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX1yZXNl''@;'; put 'put ''dEFsbEVuZHBvaW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFsbEVuZHBvaW50cygpLGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtsLnNv''@;'; put 'put ''bWUoaD0+e2NvbnN0IF89aC5hbHRlckNvbHVtbk9mZnNldHx8MDtyZXR1cm4gaC5kZXN0aW5hdGlvblJvdysoaC5hbHRlclJvd09mZnNldHx8MCk+PXRoaXMuaG90LmNvdW50Um93cygpfHxoLmRlc3RpbmF0aW9uQ29sdW1uK18+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNlbGxz''@;'; put 'put ''VG9TZXRDYWNoZT1bXSxEbihsLGg9Pnt0aGlzLnJlc2V0RW5kcG9pbnRWYWx1ZShoLGEpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9pbnRz''@;'; put 'put ''KCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sRG4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGws''@;'; put 'put ''dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sRG4obCwoZCxoLGYp''@;'; put 'put ''PT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1gJiZEbih0aGlzLmdldEFsbEVuZHBvaW50cygpLChfLFQpPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1bMV0pPT09Xy5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKFQpJiZhLnB1c2goVCl9KX0pLERuKGEsZD0+e3RoaXMucmVmcmVzaEVu''@;'; put 'put ''ZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRo''@;'; put 'put ''aXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25z''@;'; put 'put ''dCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/''@;'; put 'put ''aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRo''@;'; put 'put ''aXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7''@;'; put 'put ''Y29uc3QgXz10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHxfLnJlYWRPbmx5IT09bC5yZWFkT25seSkmJihfLnJlYWRPbmx5PWwucmVhZE9ubHksXy5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1sLnJvdW5kRmxvYXQmJiFp''@;'; put 'put ''c05hTihsLnJlc3VsdCkmJihsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVkKGwucm91bmRGbG9hdCkpLGQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxs''@;'; put 'put ''LmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtHYSgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMg''@;'; put 'put ''eW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckluaXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNoYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVs''@;'; put 'put ''bCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVm''@;'; put 'put ''b3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIs''@;'; put 'put ''Li4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhp''@;'; put 'put ''cy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto''@;'; put 'put ''KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk''@;'; put 'put ''PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyUm93TW92ZSguLi5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmVuZHBvaW50cz1udWxsLHRoaXMuc2V0dGluZ3M9bnVsbCx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRv''@;'; put 'put ''TG93ZXJDYXNlKCkpe2Nhc2Uic3VtIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhs''@;'; put 'put ''KTticmVhaztjYXNlImF2ZXJhZ2UiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShsKTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBkcyhsLnJhbmdlcyxkPT57YSs9''@;'; put 'put ''dGhpcy5nZXRQYXJ0aWFsU3VtKGQsbC5zb3VyY2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3VtKGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLF89MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj12aihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IFQ9KGAke2Z9YC5z''@;'; put 'put ''cGxpdCgiLiIpWzFdfHxbXSkubGVuZ3RofHwxO1Q+XyYmKF89VCl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKl8pLzEwKipffWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIGRzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRo''@;'; put 'put ''aXMuZ2V0UGFydGlhbE1pbk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVu''@;'; put 'put ''b3VnaCBkYXRhIjpkfWdldFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCBfLGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYoXz10aGlzLmdldENlbGxWYWx1ZShmLGEpLF89dmooXyk/bnVsbDpfLG51bGw9PT1oKWg9XztlbHNlIGlmKG51bGwhPT1fKXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRo''@;'; put 'put ''Lm1pbihoLF8pO2JyZWFrO2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsXyl9Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD12aihkKT9udWxsOmQsbnVsbD09PWQmJiho''@;'; put 'put ''Kz0xKSxmLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW50cmllcyhsKXtsZXQgYT0wO3JldHVybiBkcyhsLnJhbmdlcyxoPT57Y29uc3QgZj12b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsXz10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT1ffSks''@;'; put 'put ''YX1jYWxjdWxhdGVBdmVyYWdlKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlzLmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U291cmNlRGF0YUF0Q2VsbChsLGEpLF89IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYoXz10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZXx8IiIpLF8uaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1''@;'; put 'put ''cnJlbnRFbmRwb2ludC5mb3JjZU51bWVyaWMmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxpc05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihBYWBDb2x1bW5TdW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMgbm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn1vbkFmdGVySW5pdCgpe3RoaXMuZW5kcG9pbnRzLmVuZHBv''@;'; put 'put ''aW50cz10aGlzLmVuZHBvaW50cy5wYXJzZVNldHRpbmdzKCksdGhpcy5lbmRwb2ludHMucmVmcmVzaEFsbEVuZHBvaW50cyghMCl9b25BZnRlckNoYW5nZShsLGEpe2wmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWEmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT1hJiYibG9hZERhdGEiIT09YSYm''@;'; put 'put ''dGhpcy5lbmRwb2ludHMucmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl9b25BZnRlclJvd01vdmUobCxhKXt0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGxbMF0sbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpLHRoaXMuZW5k''@;'; put 'put ''cG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixhLGwubGVuZ3RoLGwsdGhpcy5wbHVnaW5OYW1lKX19Y2xhc3MgTTd7c3RhdGljIGdldCBDTEFTU19FRElUT1JfQ09OVEFJTkVSKCl7cmV0dXJuImh0Q29tbWVudHNDb250YWluZXIifXN0YXRpYyBn''@;'; put 'put ''ZXQgQ0xBU1NfRURJVE9SKCl7cmV0dXJuImh0Q29tbWVudHMifXN0YXRpYyBnZXQgQ0xBU1NfSU5QVVQoKXtyZXR1cm4iaHRDb21tZW50VGV4dEFyZWEifXN0YXRpYyBnZXQgQ0xBU1NfQ0VMTCgpe3JldHVybiJodENvbW1lbnRDZWxsIn1jb25zdHJ1Y3RvcihsLGEpe3RoaXMucm9vdERvY3Vt''@;'; put 'put ''ZW50PWwsdGhpcy5pc1J0bD1hLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5lZGl0b3I9dGhpcy5jcmVhdGVFZGl0b3IoKSx0aGlzLmVkaXRvclN0eWxlPXRoaXMuZWRpdG9yLnN0eWxlLHRoaXMuaGlkZGVuPSEwLHRoaXMuaGlkZSgpfXNldFBvc2l0aW9uKGwsYSl7dGhpcy5lZGl0b3JTdHls''@;'; put 'put ''ZS5sZWZ0PWAke2x9cHhgLHRoaXMuZWRpdG9yU3R5bGUudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3''@;'; put 'put ''aWR0aDp3YSh0aGlzLmdldElucHV0RWxlbWVudCgpKSxoZWlnaHQ6YWwodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5U3RhdGUobCl7''@;'; put 'put ''dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXt0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmhpZGRlbj0hMX1oaWRlKCl7dGhpcy5oaWRkZW58fCh0aGlzLmVkaXRvclN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLmhpZGRlbj0hMH1pc1Zpc2li''@;'; put 'put ''bGUoKXtyZXR1cm4iYmxvY2siPT09dGhpcy5lZGl0b3JTdHlsZS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZT1hfWdldFZh''@;'; put 'put ''bHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIHRoaXMucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpfWNyZWF0ZUVk''@;'; put 'put ''aXRvcigpe2NvbnN0IGw9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksYT10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29udGFpbmVyPXRoaXMucm9vdERvY3VtZW50LmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLmlzUnRsPyJydGwiOiJsdHIiKSxwaSh0aGlzLmNvbnRhaW5lcixNNy5DTEFTU19FRElUT1JfQ09OVEFJTkVSKSx0aGlzLnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuY29u''@;'; put 'put ''dGFpbmVyKSxwaShsLE03LkNMQVNTX0VESVRPUikscGkoYSxNNy5DTEFTU19JTlBVVCksbC5hcHBlbmRDaGlsZChhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVybiB0aGlzLmVkaXRvci5xdWVyeVNlbGVjdG9yKGAuJHtNNy5DTEFTU19J''@;'; put 'put ''TlBVVH1gKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLmNvbnRhaW5lcj90aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlOm51bGw7dGhpcy5lZGl0b3IucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmVkaXRvciksdGhpcy5lZGl0b3I9bnVsbCx0aGlzLmVkaXRvclN0eWxlPW51bGwsbCYmbC5y''@;'; put 'put ''ZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9fWNvbnN0IGxSZT1NNyxncz0iLS0tLS0tLS0tIjtmdW5jdGlvbiBYayhjKXtyZXR1cm4gQm8oYywiaHRTZXBhcmF0b3IiKX1mdW5jdGlvbiBKayhjKXtyZXR1cm4gQm8oYywiaHREaXNhYmxlZCIpfWZ1bmN0aW9uIFFrKGMpe3JldHVybiBCbyhj''@;'; put 'put ''LCJodFNlbGVjdGlvbkRpc2FibGVkIil9ZnVuY3Rpb24gSWcoYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGxbMF08MD9udWxsOmx9ZnVuY3Rpb24gTGcoYyxsKXtjb25zdCBhPXt9O3JldHVybiBEbihjLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJihhW2hd''@;'; put 'put ''fHwoYVtoXT1bXSksYVtoXVtmXT1sKGgsZikpfSl9KSxhfWZ1bmN0aW9uIEtwKGMsbCxhLGQsaCl7RG4oYyxmPT57Zi5mb3JBbGwoKF8sVCk9PntfPj0wJiZUPj0wJiZmdW5jdGlvbiBwUmUoYyxsLGEsZCxoLGYpe2NvbnN0IF89aChjLGwpO2xldCBUPWQ7Xy5jbGFzc05hbWUmJihUPSJ2ZXJ0''@;'; put 'put ''aWNhbCI9PT1hP2Z1bmN0aW9uIGhSZShjLGwpe3JldHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodFRvcCIsIiIpLnJlcGxhY2UoImh0TWlkZGxlIiwiIikucmVwbGFjZSgiaHRCb3R0b20iLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0oXy5jbGFzc05hbWUsZCk6''@;'; put 'put ''ZnVuY3Rpb24gZlJlKGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0TGVmdCIsIiIpLnJlcGxhY2UoImh0Q2VudGVyIiwiIikucmVwbGFjZSgiaHRSaWdodCIsIiIpLnJlcGxhY2UoImh0SnVzdGlmeSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfShf''@;'; put 'put ''LmNsYXNzTmFtZSxkKSksZihjLGwsImNsYXNzTmFtZSIsVCl9KF8sVCxsLGEsZCxoKX0pfSl9ZnVuY3Rpb24geWgoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmRG4oYyxkPT4oZC5mb3JBbGwoKGgsZik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAs''@;'; put 'put ''ITF9KSxhKSksYX1mdW5jdGlvbiBZZihjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj4ke1N0cmluZy5mcm9tQ2hhckNvZGUoMTAwMDMpfTwvc3Bhbj4ke2N9YH1mdW5jdGlvbiBQcmUoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5u''@;'; put 'put ''YW1lPT09bDspYS5zaGlmdCgpO3JldHVybiBhfWNsYXNzIEZyZXtjb25zdHJ1Y3RvcihsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZD1udWxsLHRoaXMuaGlkaW5nVGltZXI9bnVsbCx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RB''@;'; put 'put ''Y3Rpb25TaG93PSExLHRoaXMuaGlkaW5nVGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1j''@;'; put 'put ''YW5jZWxIaWRpbmcoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9bU4oYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygic2hvdyIsYS5mcm9tLnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fVRhKEZyZSxPMCk7Y29uc3Qgd1JlPUZyZSxiaj0i''@;'; put 'put ''Y29tbWVudHMiLGVBPW5ldyBXZWFrTWFwLHdoPSJjb21tZW50Iix4Nz0idmFsdWUiLHRBPSJyZWFkT25seSI7Y2xhc3MgU1JlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGJqfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfWNvbnN0cnVj''@;'; put 'put ''dG9yKGwpe3N1cGVyKGwpLHRoaXMuZWRpdG9yPW51bGwsdGhpcy5kaXNwbGF5U3dpdGNoPW51bGwsdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLnJhbmdlPXt9LHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITEsZUEuc2V0KHRoaXMse3RlbXBFZGl0b3JEaW1lbnNpb25zOnt9LGNl''@;'; put 'put ''bGxCZWxvd0N1cnNvcjpudWxsfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2JqXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmVkaXRvcnx8KHRoaXMuZWRpdG9yPW5ldyBsUmUodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90Lmlz''@;'; put 'put ''UnRsKCkpKSx0aGlzLmV2ZW50TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSksdGhpcy5kaXNwbGF5U3dpdGNofHwodGhpcy5kaXNwbGF5U3dpdGNoPW5ldyB3UmUodGhpcy5nZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4''@;'; put 'put ''dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGwpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChsLGEsZCxoLGYsXyk9PnRoaXMub25BZnRlclJlbmRlcmVyKGwsXykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50''@;'; put 'put ''aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmRpc3BsYXlTd2l0Y2guYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5o''@;'; put 'put ''aWRlKCkpLHRoaXMuZGlzcGxheVN3aXRjaC5hZGRMb2NhbEhvb2soInNob3ciLChsLGEpPT50aGlzLnNob3dBdENlbGwobCxhKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpLHRoaXMuZGlzcGxheVN3aXRjaC51cGRhdGVEZWxheSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3RE''@;'; put 'put ''b2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsYT0+dGhpcy5vbk1vdXNlT3ZlcihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGE9PnRoaXMub25Nb3VzZURvd24oYSkp''@;'; put 'put ''LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksImJsdXIiLCgpPT50aGlzLm9uRWRpdG9yQmx1cigp''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGE9PnRoaXMub25FZGl0b3JNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRF''@;'; put 'put ''bGVtZW50KCksIm1vdXNldXAiLGE9PnRoaXMub25FZGl0b3JNb3VzZVVwKGEpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1OcChsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVy''@;'; put 'put ''biEhKGEmJkJvKGEsImh0Q29tbWVudENlbGwiKSYmTnAoYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT10aGlzLmVkaXRvci5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwh''@;'; put 'put ''PWEmJihkPWEpLHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbeDddOmR9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0''@;'; put 'put ''aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx3aCksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5o''@;'; put 'put ''aWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21t''@;'; put 'put ''ZW50KGQpfWdldENvbW1lbnQoKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wseDcpfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEseDcpfXNob3coKXtpZighdGhpcy5y''@;'; put 'put ''YW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmwsY29sOmF9fT10aGlzLnJhbmdlO2lmKGw8MHx8bD50aGlz''@;'; put 'put ''LmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxhPDB8fGE+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIHRoaXMuZWRpdG9yLnNldFZh''@;'; put 'put ''bHVlKGRbd2hdP2Rbd2hdW3g3XToiIiksdGhpcy5lZGl0b3Iuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7''@;'; put 'put ''dGhpcy5lZGl0b3IuaGlkZSgpfXJlZnJlc2hFZGl0b3IoKXt2YXIgbCxhO2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZ0aGlzLmVkaXRvci5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0lu''@;'; put 'put ''ZGV4TWFwcGVyOmgsY29sdW1uSW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qse3JvdzpfLGNvbDpUfT10aGlzLnJhbmdlLmZyb207bGV0IFc9aC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8pLGllPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChUKTtjb25zdCBnZT1udWxsPT09''@;'; put 'put ''Vzt0aGlzLmVkaXRvci5zZXRQb3NpdGlvbigwLDApLG51bGw9PT1XJiYoVz1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXywtMSkpKSxudWxsPT09aWUmJihpZT1mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZi5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoVCwtMSkpKTtjb25zdCB3ZT1udWxsPT09VyxFZT1udWxsPT09aWU7Vz1udWxsIT09KGw9VykmJnZvaWQgMCE9PWw/bDowLGllPW51bGwhPT0oYT1pZSkmJnZvaWQgMCE9PWE/YTowO2NvbnN0e3Jvb3RXaW5kb3c6WmUsdmlldzp7X3d0Om90fX09dGhpcy5ob3Qs''@;'; put 'put ''e3d0VGFibGU6ZXR9PW90LHl0PW90LmdldENlbGwoe3JvdzpXLGNvbDppZX0sITApLGt0PXRoaXMuZ2V0Q29tbWVudE1ldGEoXyxULCJzdHlsZSIpO2t0P3RoaXMuZWRpdG9yLnNldFNpemUoa3Qud2lkdGgsa3QuaGVpZ2h0KTp0aGlzLmVkaXRvci5yZXNldFNpemUoKTtjb25zdCBTdD1FZT8w''@;'; put 'put ''OmV0LmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGllKSxRdD1nZSYmIXdlP2FsKHl0KTowLHtsZWZ0OnJuLHRvcDp2bix3aWR0aDpObixoZWlnaHQ6Y3J9PXl0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpEcixoZWlnaHQ6X2l9PXRoaXMuZWRpdG9yLmdldFNpemUoKSx7aW5uZXJX''@;'; put 'put ''aWR0aDpsaSxpbm5lckhlaWdodDptcn09dGhpcy5ob3Qucm9vdFdpbmRvdyxFaT10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2xldCBacj1ybitaZS5zY3JvbGxYK1N0LEZuPXZuK1plLnNjcm9sbFkrUXQ7dGhpcy5ob3QuaXNSdGwoKSYmKFpyLT1EcitTdCksdGhpcy5o''@;'; put 'put ''b3QuaXNMdHIoKSYmcm4rTm4rRHI+bGk/WnI9cm4rWmUuc2Nyb2xsWC1Eci0xOnRoaXMuaG90LmlzUnRsKCkmJlpyPC0oRWkuc2Nyb2xsV2lkdGgtRWkuY2xpZW50V2lkdGgpJiYoWnI9cm4rWmUuc2Nyb2xsWCtTdCsxKSx2bitfaT5tciYmKEZuLT1faS1jcisxKSx0aGlzLmVkaXRvci5zZXRQ''@;'; put 'put ''b3NpdGlvbihacixGbiksdGhpcy5lZGl0b3Iuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKF8sVCx0QSkpfWNoZWNrU2VsZWN0aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTts''@;'; put 'put ''ZXQgYT0hMTtjb25zdCBkPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKTtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShkLnJvdyxkLmNvbCx4NykmJihhPSEwKSxhfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbd2hdO2xldCBmO2g/KGY9''@;'; put 'put ''eXUoaCksbHkoZixkKSk6Zj1kLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSx3aCxmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbd2hdKXJldHVybiBoW3doXVtkXX1vbk1vdXNlRG93bihsKXtpZih0aGlzLmhvdC52aWV3JiZ0''@;'; put 'put ''aGlzLmhvdC52aWV3Ll93dCYmIXRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2gmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpKXtjb25zdCBhPU5wKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0IGQ9bnVsbDthJiYoZD10aGlzLmhvdC5nZXRDb29yZHMoYSkpLCghYXx8dGhp''@;'; put 'put ''cy5yYW5nZS5mcm9tJiZkJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PWQucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09ZC5jb2wpKSYmdGhpcy5oaWRlKCl9fW9uTW91c2VPdmVyKGwpe2NvbnN0IGE9ZUEuZ2V0KHRoaXMpLHtyb290RG9jdW1lbnQ6ZH09dGhpcy5ob3Q7aWYoISh0aGlzLnBy''@;'; put 'put ''ZXZlbnRFZGl0b3JBdXRvU3dpdGNofHx0aGlzLmVkaXRvci5pc0ZvY3VzZWQoKXx8Qm8obC50YXJnZXQsInd0Qm9yZGVyIil8fGEuY2VsbEJlbG93Q3Vyc29yPT09bC50YXJnZXQpJiZ0aGlzLmVkaXRvcilpZihhLmNlbGxCZWxvd0N1cnNvcj1kLmVsZW1lbnRGcm9tUG9pbnQobC5jbGllbnRY''@;'; put 'put ''LGwuY2xpZW50WSksdGhpcy50YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKSl7Y29uc3QgaD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhsLnRhcmdldCkpO3RoaXMuZGlzcGxheVN3aXRjaC5zaG93KGgpfWVsc2UgVnAobC50YXJnZXQsZCkmJiF0aGlzLnRh''@;'; put 'put ''cmdldElzQ29tbWVudFRleHRBcmVhKGwpJiZ0aGlzLmRpc3BsYXlTd2l0Y2guaGlkZSgpfW9uTW91c2VVcCgpe3RoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITF9b25BZnRlclJlbmRlcmVyKGwsYSl7YVt3aF0mJmFbd2hdW3g3XSYmcGkobCxhLmNvbW1lbnRlZENlbGxDbGFzc05hbWUp''@;'; put 'put ''fW9uRWRpdG9yQmx1cigpe3RoaXMuc2V0Q29tbWVudCgpfW9uRWRpdG9yTW91c2VEb3duKGwpe2VBLmdldCh0aGlzKS50ZW1wRWRpdG9yRGltZW5zaW9ucz17d2lkdGg6d2EobC50YXJnZXQpLGhlaWdodDphbChsLnRhcmdldCl9fW9uRWRpdG9yTW91c2VVcChsKXtjb25zdCBhPWVBLmdldCh0''@;'; put 'put ''aGlzKSxkPXdhKGwudGFyZ2V0KSxoPWFsKGwudGFyZ2V0KTsoZCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMud2lkdGgrMXx8aCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMuaGVpZ2h0KzIpJiZ0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5m''@;'; put 'put ''cm9tLmNvbCx7c3R5bGU6e3dpZHRoOmQsaGVpZ2h0Omh9fSl9b25Db250ZXh0TWVudUFkZENvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCx0aGlzLmRpc3BsYXlTd2l0Y2guY2FuY2VsSGlkaW5n''@;'; put 'put ''KCksdGhpcy5zZXRSYW5nZSh7ZnJvbTpsLmhpZ2hsaWdodH0pLHRoaXMuc2hvdygpLHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuZWRpdG9yLmZvY3VzKCl9b25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhp''@;'; put 'put ''cy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCxsLmZvckFsbCgoYSxkKT0+e2E+PTAmJmQ+PTAmJnRoaXMucmVtb3ZlQ29tbWVudEF0Q2VsbChhLGQsITEpfSksdGhpcy5ob3QucmVuZGVyKCl9b25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNoPSEwLGwuZm9yQWxsKChhLGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIXRoaXMuZ2V0Q29tbWVudE1ldGEoYSxkLHRBKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W3RBXTohaH0pfX0pfWFkZFRvQ29u''@;'; put 'put ''dGV4dE1lbnUobCl7Y29uc3QgYT0oKT0+dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKT4wJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjA7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0t''@;'; put 'put ''LS0ifSx7a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWU6KCk9PnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShWVik6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShOViksY2FsbGJhY2s6KCk9PnRoaXMub25D''@;'; put 'put ''b250ZXh0TWVudUFkZENvbW1lbnQoKSxkaXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNs''@;'; put 'put ''YXRlZFBocmFzZShCVil9LGNhbGxiYWNrOigpPT50aGlzLm9uQ29udGV4dE1lbnVSZW1vdmVDb21tZW50KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSx7a2V5OiJjb21t''@;'; put 'put ''ZW50c1JlYWRPbmx5IixuYW1lKCl7bGV0IGQ9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGpWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLChmLF8pPT57bGV0IFQ9dGhpcy5nZXRDZWxsTWV0YShmLF8pW3doXTtpZihUJiYoVD1UW3RBXSksVClyZXR1cm4hMH0pJiYo''@;'; put 'put ''ZD1ZZihkKSksZH0sY2FsbGJhY2s6KCk9PnRoaXMub25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpLGRpc2FibGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZ0aGlzLmNoZWNrU2VsZWN0''@;'; put 'put ''aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgpKX0pfWdldERpc3BsYXlEZWxheVNldHRpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbYmpdO2lmKHVzKGwpKXJldHVybiBsLmRpc3BsYXlEZWxheX1kZXN0cm95KCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmRlc3Ryb3koKSx0''@;'; put 'put ''aGlzLmRpc3BsYXlTd2l0Y2gmJnRoaXMuZGlzcGxheVN3aXRjaC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1GKDE2MDAxKTtjb25zdCBOcmU9Y2xhc3MgTVJle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5jb21tYW5kcz17fSx0aGlzLmNvbW1vbkNhbGxiYWNrPW51bGx9cmVn''@;'; put 'put ''aXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3Vt''@;'; put 'put ''ZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSxfPWZbMF0sVD0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBXPXRoaXMuY29tbWFuZHNbX107aWYoIVcpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7X30nIG5vdCBleGlzdHMuYCk7aWYoVCYmVy5zdWJtZW51JiYoVz1mdW5j''@;'; put 'put ''dGlvbiB4UmUoYyxsKXtsZXQgYTtyZXR1cm4gRG4obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KFQsVy5zdWJtZW51Lml0ZW1zKSksITA9PT1XLmRpc2FibGVkfHwiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgVy5kaXNhYmxlZCYmITA9PT1XLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxibChXLCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IGllPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBXLmNhbGxiYWNrJiZpZS5wdXNoKFcuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlz''@;'; put 'put ''LmNvbW1vbkNhbGxiYWNrJiZpZS5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksRG4oaWUsZ2U9PmdlLmFwcGx5KHRoaXMuaG90LGQpKX19LHZkPSJhbGlnbm1lbnQiLG5BPSJjbGVhcl9jb2x1bW4iLER5PSJjb2xfbGVmdCIsSXk9ImNvbF9yaWdodCIs''@;'; put 'put ''THk9Im1ha2VfcmVhZF9vbmx5IixyQT0icmVkbyIsUnk9InJlbW92ZV9jb2wiLGlBPSJyZW1vdmVfcm93IixvQT0icm93X2Fib3ZlIixzQT0icm93X2JlbG93IixPeT0ibm9faXRlbXMiLGFBPSJ1bmRvIixWcmU9W29BLHNBLER5LEl5LG5BLGlBLFJ5LGFBLHJBLEx5LHZkLGdzLE95XSxCcmU9''@;'; put 'put ''e1tnc106ZnVuY3Rpb24gY1JlKCl7cmV0dXJue25hbWU6Z3N9fSxbT3ldOmZ1bmN0aW9uIEZSZSgpe3JldHVybntrZXk6T3ksbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoX1YpfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbb0FdOmZ1bmN0aW9uIE9SZSgpe3Jl''@;'; put 'put ''dHVybntrZXk6b0EsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYlYpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250''@;'; put 'put ''ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxlZCgpe3JldHVybiFJZyh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Um93cygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygp''@;'; put 'put ''Pj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW3NBXTpmdW5jdGlvbiBQUmUoKXtyZXR1cm57a2V5OnNBLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlWKX0sY2Fs''@;'; put 'put ''bGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7cmV0dXJuIUlnKHRoaXMpfHwhdGhpcy5z''@;'; put 'put ''ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJih0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5jb3VudFJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5z''@;'; put 'put ''ZXJ0Um93fX19LFtEeV06ZnVuY3Rpb24gQVJlKCl7cmV0dXJue2tleTpEeSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3Vil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0''@;'; put 'put ''bCgpPyJpbnNlcnRfY29sX2VuZCI6Imluc2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFJZyh0aGlzKXx8KHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Q29scygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdz''@;'; put 'put ''KCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW0l5XTpmdW5jdGlvbiBUUmUoKXtyZXR1cm57a2V5Okl5LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKENWKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5l''@;'; put 'put ''cigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhSWcodGhp''@;'; put 'put ''cyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCku''@;'; put 'put ''YWxsb3dJbnNlcnRDb2x1bW59fX0sW25BXTpmdW5jdGlvbiBrUmUoKXtyZXR1cm57a2V5Om5BLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFWKX0sY2FsbGJhY2soYyxsKXtjb25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dz''@;'; put 'put ''KCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtyZXR1cm4hSWcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD''@;'; put 'put ''b2x1bW5IZWFkZXIoKX19fSxbaUFdOmZ1bmN0aW9uIFJSZSgpe3JldHVybntrZXk6aUEsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlKFNWLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIHhEZShjKXtjb25zdCBsPWc3KGMpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPXd5KGwpLGQ9bmV3IFNldDtyZXR1cm4gRG4oYyxfPT57Y29uc3RbVCws''@;'; put 'put ''V109YShfKSxpZT1NYXRoLm1heChULDApO0RuKEFycmF5LmZyb20obmV3IEFycmF5KFctaWUrMSksKHdlLEVlKT0+aWUrRWUpLHdlPT57ZC5oYXMod2UpfHxkLmFkZCh3ZSl9KX0pLEFsKEFycmF5LmZyb20oZCkuc29ydCgoXyxUKT0+Xy1UKSwoXyxULFcsaWUpPT4oMCE9PVcmJlQ9PT1pZVtX''@;'; put 'put ''LTFdKzE/X1tfLmxlbmd0aC0xXVsxXSs9MTpfLnB1c2goW1QsMV0pLF8pLFtdKX0odGhpcy5nZXRTZWxlY3RlZCgpKSwxLCJDb250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtpZighSWcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW1J5XTpmdW5jdGlvbiBMUmUoKXtyZXR1''@;'; put 'put ''cm57a2V5OlJ5LG5hbWUoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTVYsbCl9LGNhbGxiYWNrKCl7dGhp''@;'; put 'put ''cy5hbHRlcigicmVtb3ZlX2NvbCIsZnVuY3Rpb24gTURlKGMpe2NvbnN0IGw9ZzcoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9d3kobCksZD1uZXcgU2V0O3JldHVybiBEbihjLF89Pntjb25zdFssVCwsV109YShfKSxpZT1NYXRoLm1heChULDApO0RuKEFycmF5LmZyb20o''@;'; put 'put ''bmV3IEFycmF5KFctaWUrMSksKHdlLEVlKT0+aWUrRWUpLHdlPT57ZC5oYXMod2UpfHxkLmFkZCh3ZSl9KX0pLEFsKEFycmF5LmZyb20oZCkuc29ydCgoXyxUKT0+Xy1UKSwoXyxULFcsaWUpPT4oMCE9PVcmJlQ9PT1pZVtXLTFdKzE/X1tfLmxlbmd0aC0xXVsxXSs9MTpfLnB1c2goW1QsMV0p''@;'; put 'put ''LF8pLFtdKX0odGhpcy5nZXRTZWxlY3RlZCgpKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUlnKHRoaXMpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4g''@;'; put 'put ''dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFthQV06ZnVuY3Rpb24gSFJlKCl7''@;'; put 'put ''cmV0dXJue2tleTphQSxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh4Vil9LGNhbGxiYWNrKCl7dGhpcy51bmRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3Jl''@;'; put 'put ''dHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbckFdOmZ1bmN0aW9uIElSZSgpe3JldHVybntrZXk6ckEsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRVYpfSxjYWxsYmFjaygpe3RoaXMucmVkbygpfSxoaWRkZW4oKXtj''@;'; put 'put ''b25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW0x5XTpmdW5jdGlvbiBEUmUoKXtyZXR1cm57a2V5Okx5LG5hbWUo''@;'; put 'put ''KXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoa1YpO3JldHVybiB5aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2Uo''@;'; put 'put ''KSxsPXloKGMsKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7RG4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtyZXR1cm4hKCF0aGlz''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW3ZkXTpmdW5jdGlvbiBFUmUoKXtyZXR1''@;'; put 'put ''cm57a2V5OnZkLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHpWKX0sZGlzYWJsZWQoKXtyZXR1cm4gMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpfHwhKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxl''@;'; put 'put ''Y3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHt2ZH06bGVmdGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShVVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCku''@;'; put 'put ''Y2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodExlZnQiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpv''@;'; put 'put ''bnRhbCIsZD0iaHRMZWZ0Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9''@;'; put 'put ''LHtrZXk6YCR7dmR9OmNlbnRlcmAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShaVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9m''@;'; put 'put ''KCJodENlbnRlciIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhpcy5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3ZkfTpyaWdodGAsbmFtZSgp''@;'; put 'put ''e2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShZVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFJpZ2h0IikpcmV0dXJuITB9KSYmKGM9''@;'; put 'put ''WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGws''@;'; put 'put ''YyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixfLFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06anVzdGlmeWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZShXVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodEp1c3RpZnkiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25z''@;'; put 'put ''dCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+''@;'; put 'put ''dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsXyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOmdzfSx7a2V5OmAke3ZkfTp0b3BgLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoR1YpO3JldHVybiB5''@;'; put 'put ''aCh0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5kZXhPZigiaHRUb3AiKSlyZXR1cm4hMH0pJiYoYz1ZZihjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZSgpLGw9TGcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxLcChjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYs''@;'; put 'put ''XyxUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsXyxUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7dmR9Om1pZGRsZWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkVik7cmV0dXJuIHloKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57''@;'; put 'put ''Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodE1pZGRsZSIpKXJldHVybiEwfSkmJihjPVlmKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1MZyhjLChoLGYpPT50aGlzLmdldENl''@;'; put 'put ''bGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLEtwKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZixfLFQpPT50aGlzLnNldENlbGxNZXRhKGgsZixf''@;'; put 'put ''LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt2ZH06Ym90dG9tYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFWKTtyZXR1cm4geWgodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxk''@;'; put 'put ''KS5jbGFzc05hbWU7aWYoaCYmLTEhPT1oLmluZGV4T2YoImh0Qm90dG9tIikpcmV0dXJuITB9KSYmKGM9WWYoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUxnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZl''@;'; put 'put ''cnRpY2FsIixkPSJodEJvdHRvbSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksS3AoYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLF8sVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLF8sVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVk''@;'; put 'put ''OiExfV19fX19O2Z1bmN0aW9uIGpyZSgpe2NvbnN0IGM9e307cmV0dXJuIGRzKEJyZSwobCxhKT0+e2NbYV09bCgpfSksY31jb25zdCB6cmU9Y2xhc3MgTlJle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx''@;'; put 'put ''XTpudWxsO3RoaXMuaG90PWwsdGhpcy5wcmVkZWZpbmVkSXRlbXM9anJlKCksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLGRzKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5h''@;'; put 'put ''bWU9PT1ncz8oYVtnc109ZCxmPWdzKTppc05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRl''@;'; put 'put ''bXM9YX1nZXRJdGVtcygpe3JldHVybiBmdW5jdGlvbiBWUmUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29u''@;'; put 'put ''c3QgZD1bXTtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCksdXMoaCk/ZHMoaCwoZixfKT0+e2xldCBUPWFbInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBmP2Y6X107VHx8KFQ9ZiksdXMoZik/S2woVCxmKToic3RyaW5nIj09dHlwZW9mIFQmJihUPXtuYW1lOlR9KSx2b2lkIDA9PT1ULmtleSYmKFQua2V5PV8pLGQucHVzaChUKX0pOkRuKGgsKGYsXyk9PntsZXQgVD1hW2ZdOyFUJiZWcmUuaW5kZXhPZihmKT49MHx8KFR8fChUPXtuYW1l''@;'; put 'put ''OmYsa2V5OmAke199YH0pLHVzKGYpJiZLbChULGYpLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9XyksZC5wdXNoKFQpKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnBy''@;'; put 'put ''ZWRlZmluZWRJdGVtcyl9fTtjbGFzcyBsQXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWwsdGhpcy5vcHRpb25zPWF8fHtwYXJlbnQ6bnVsbCxuYW1lOm51bGwsY2xhc3NOYW1lOiIiLGtlZXBJblZpZXdwb3J0OiEwLHN0YW5kYWxvbmU6ITEsbWluV2lkdGg6MjE1LGNvbnRhaW5lcjp0aGlz''@;'; put 'put ''LmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5vcHRpb25zLm5hbWUpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90U3ViTWVudXM9e30sdGhpcy5w''@;'; put 'put ''YXJlbnRNZW51PXRoaXMub3B0aW9ucy5wYXJlbnR8fG51bGwsdGhpcy5tZW51SXRlbXM9bnVsbCx0aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9bnVsbCx0aGlzLmtleUV2ZW50PSExLHRoaXMub2Zmc2V0PXthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9LHRoaXMuX2FmdGVy''@;'; put 'put ''U2Nyb2xsQ2FsbGJhY2s9bnVsbCx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMub25Eb2N1''@;'; put 'put ''bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJjb250ZXh0bWVudSIsYT0+dGhpcy5vbkRvY3VtZW50Q29udGV4dE1lbnUoYSkpLGw9ZXkobCl9c2V0TWVudUl0ZW1zKGwpe3RoaXMubWVudUl0ZW1zPWx9Z2V0U2VsZWN0ZWRJ''@;'; put 'put ''dGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ob3RNZW51LmdldFNl''@;'; put 'put ''bGVjdGVkTGFzdCgpKX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXRbbF09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjB9aXNTdWJNZW51KCl7cmV0dXJuIG51bGwhPT10aGlzLnBhcmVudE1lbnV9b3Blbigpe3ZhciBsPXRoaXM7dGhpcy5y''@;'; put 'put ''dW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBhPW1OKEVlPT50aGlzLm9wZW5TdWJNZW51KEVlKSwzMDApLGQ9dGhpcy5vcHRpb25zLm1pbldp''@;'; put 'put ''ZHRofHwyMTU7bGV0IGg9ITEsZj1fMSh0aGlzLm1lbnVJdGVtcyxFZT0+KEVlLmtleT09PU95JiYoaD0hMCksZnVuY3Rpb24gZ1JlKGMsbCl7cmV0dXJuIWMuaGlkZGVufHwhKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmhpZGRlbiYmYy5oaWRkZW4uY2FsbChsKSl9KEVlLHRoaXMuaG90KSkpO2lm''@;'; put 'put ''KGYubGVuZ3RoPDEmJiFoKWYucHVzaChqcmUoKVtPeV0pO2Vsc2UgaWYoMD09PWYubGVuZ3RoKXJldHVybjtmPWZ1bmN0aW9uIF9SZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Z3MsYT1jLnNsaWNlKDApO3JldHVybiBh''@;'; put 'put ''PVByZShhLGwpLGE9ZnVuY3Rpb24gbVJlKGMsbCl7bGV0IGE9Yy5zbGljZSgwKTtyZXR1cm4gYS5yZXZlcnNlKCksYT1QcmUoYSxsKSxhLnJldmVyc2UoKSxhfShhLGwpLGE9ZnVuY3Rpb24gdlJlKGMpe2NvbnN0IGw9W107cmV0dXJuIERuKGMsKGEsZCk9PntkPjA/bFtsLmxlbmd0aC0xXS5u''@;'; put 'put ''YW1lIT09YS5uYW1lJiZsLnB1c2goYSk6bC5wdXNoKGEpfSksbH0oYSksYX0oZixncyk7bGV0IF89ITE7Y29uc3QgVD17ZGF0YTpmLGNvbEhlYWRlcnM6ITEsYXV0b0NvbHVtblNpemU6ITAsYXV0b1dyYXBSb3c6ITEsbW9kaWZ5Q29sV2lkdGg6RWU9PktpKEVlKSYmRWU8ZD9kOkVlLGF1dG9S''@;'; put 'put ''b3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsbWF4Q29sczoxLGNvbHVtbnM6W3tkYXRhOiJuYW1lIixyZW5kZXJlcjooRWUsWmUsb3QsZXQseXQsa3QpPT50aGlzLm1lbnVJdGVtUmVuZGVyZXIoRWUsWmUsb3QsZXQseXQsa3QpfV0scmVuZGVyQWxsUm93czoh''@;'; put 'put ''MCxmcmFnbWVudFNlbGVjdGlvbjohMSxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsbGF5b3V0RGlyZWN0aW9uOnRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KEVlLFplKT0+e3RoaXMuaXNBbGxT''@;'; put 'put ''dWJNZW51c0Nsb3NlZCgpP2EoWmUucm93KTp0aGlzLm9wZW5TdWJNZW51KFplLnJvdyl9LHJvd0hlaWdodHM6RWU9PmZbRWVdLm5hbWU9PT1ncz8xOjIzLGFmdGVyT25DZWxsQ29udGV4dE1lbnU6RWU9PntFZS5wcmV2ZW50RGVmYXVsdCgpLHdOKCkmJl8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVt''@;'; put 'put ''KCkmJnRoaXMuY2xvc2UoITApfSxiZWZvcmVPbkNlbGxNb3VzZVVwOkVlPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKF89IXRoaXMuaXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKEVlKSl9LGFmdGVyT25DZWxsTW91c2VVcDpF''@;'; put 'put ''ZT0+eyghd04oKXx8IVVwKEVlKSkmJl8mJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihtMigpfHx5TigpP3NldFRpbWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNP''@;'; put 'put ''cGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90''@;'; put 'put ''TWVudT1uZXcgV0IodGhpcy5jb250YWluZXIsVCksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJTZWxlY3Rpb24oLi4u''@;'; put 'put ''YXJndW1lbnRzKX0pLHRoaXMuaG90TWVudS5pbml0KCksdGhpcy5ob3RNZW51Lmxpc3RlbigpO2NvbnN0IFc9dGhpcy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLGllPVcuYWRkQ29udGV4dCgibWVudSIpLHdlPXtncm91cDoibWVudSIscnVuT25seUlmOkVlPT4hMT09PWF5KEVlLnRh''@;'; put 'put ''cmdldCl8fCExPT09dGhpcy5jb250YWluZXIuY29udGFpbnMoRWUudGFyZ2V0KX07Vy5zZXRBY3RpdmVDb250ZXh0TmFtZSgibWVudSIpLGllLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57dGhpcy5rZXlFdmVudD0hMCx0aGlzLmNsb3NlKCksdGhpcy5r''@;'; put 'put ''ZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e2NvbnN0IEVlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLEVlP3RoaXMuc2VsZWN0TmV4dENlbGwoRWVbMF0sRWVbMV0pOnRoaXMuc2VsZWN0Rmlyc3RDZWxsKCks''@;'; put 'put ''dGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLnNlbGVjdFByZXZDZWxsKEVlWzBdLEVlWzFdKTp0aGlzLnNlbGVjdExhc3RDZWxs''@;'; put 'put ''KCksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYodGhpcy5rZXlFdmVudD0hMCxFZSl7Y29uc3QgWmU9dGhpcy5vcGVuU3ViTWVudShFZVswXSk7WmUmJlplLnNl''@;'; put 'put ''bGVjdEZpcnN0Q2VsbCgpfXRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZSYmdGhpcy5pc1N1Yk1lbnUoKSYmKHRoaXMuY2xvc2UoKSx0''@;'; put 'put ''aGlzLnBhcmVudE1lbnUmJnRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6RWU9Pntjb25zdCBaZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCx0aGlzLmhv''@;'; put 'put ''dE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KFplWzBdKS5zdWJtZW51fHwodGhpcy5leGVjdXRlQ29tbWFuZChFZSksdGhpcy5jbG9zZSghMCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBFZT10aGlzLmhvdE1lbnUuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxFZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC10aGlzLmhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLDApOnRoaXMuc2VsZWN0Rmlyc3RDZWxsKCksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VEb3duIl1d''@;'; put 'put ''LGNhbGxiYWNrOigpPT57Y29uc3QgRWU9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsRWU/dGhpcy5ob3RNZW51LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdE1lbnUuY291bnRWaXNpYmxlUm93cygpLDApOnRoaXMuc2VsZWN0TGFzdENl''@;'; put 'put ''bGwoKSx0aGlzLmtleUV2ZW50PSExfX1dLHdlKSx0aGlzLmJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlck9wZW4iKX1jbG9zZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhp''@;'; put 'put ''cy5pc09wZW5lZCgpJiYobCYmdGhpcy5wYXJlbnRNZW51P3RoaXMucGFyZW50TWVudS5jbG9zZSgpOih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSx0aGlzLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MoKSx0aGlzLmhvdE1lbnUu''@;'; put 'put ''ZGVzdHJveSgpLHRoaXMuaG90TWVudT1udWxsLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSx0aGlzLnBhcmVudE1lbnUmJnRoaXMucGFyZW50''@;'; put 'put ''TWVudS5ob3RNZW51Lmxpc3RlbigpKSl9b3BlblN1Yk1lbnUobCl7aWYoIXRoaXMuaG90TWVudSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7aWYodGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksIWF8fCFmdW5jdGlvbiBkUmUoYyl7cmV0dXJuIEJvKGMsImh0U3Vi''@;'; put 'put ''bWVudSIpfShhKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3cobCksaD1uZXcgbEEodGhpcy5ob3Qse3BhcmVudDp0aGlzLG5hbWU6ZC5uYW1lLGNsYXNzTmFtZTp0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5l''@;'; put 'put ''cjp0aGlzLm9wdGlvbnMuY29udGFpbmVyfSk7cmV0dXJuIGguc2V0TWVudUl0ZW1zKGQuc3VibWVudS5pdGVtcyksaC5vcGVuKCksaC5zZXRQb3NpdGlvbihhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSx0aGlzLmhvdFN1Yk1lbnVzW2Qua2V5XT1oLGh9Y2xvc2VTdWJNZW51KGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxkPXRoaXMuaG90U3ViTWVudXNbYS5rZXldO2QmJihkLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5ob3RTdWJNZW51c1thLmtleV0pfWNsb3NlQWxsU3ViTWVudXMoKXtEbih0aGlzLmhvdE1lbnUuZ2V0RGF0YSgpLChsLGEpPT50''@;'; put 'put ''aGlzLmNsb3NlU3ViTWVudShhKSl9aXNBbGxTdWJNZW51c0Nsb3NlZCgpe3JldHVybiAwPT09T2JqZWN0LmtleXModGhpcy5ob3RTdWJNZW51cykubGVuZ3RofWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuY29udGFpbmVyLnBhcmVudE5vZGU7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNs''@;'; put 'put ''b3NlKCksdGhpcy5wYXJlbnRNZW51PW51bGwsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpfWlzT3BlbmVkKCl7cmV0dXJuIG51bGwhPT10aGlzLmhvdE1lbnV9ZXhlY3V0ZUNvbW1hbmQobCl7aWYoIXRoaXMuaXNPcGVuZWQoKXx8''@;'; put 'put ''IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtpZih0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsYSxsKSx0aGlzLmlzQ29tbWFuZFBhc3NpdmUoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgp''@;'; put 'put ''LGg9ZD9mdW5jdGlvbiB1UmUoYyl7cmV0dXJuIGNzKGMsbD0+KHtzdGFydDpsLmdldFRvcFN0YXJ0Q29ybmVyKCksZW5kOmwuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9KSl9KGQpOltdO3RoaXMucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCksdGhpcy5pc1N1Yk1lbnUo''@;'; put 'put ''KSYmdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpfWlzQ29tbWFuZFBhc3NpdmUobCl7Y29uc3R7aXNDb21tYW5kOmEsbmFtZTpkLGRpc2FibGVkOmgsc3VibWVudTpmfT1sLF89ITA9PT1ofHwiZnVuY3Rpb24iPT10eXBlb2YgaCYmITA9''@;'; put 'put ''PT1oLmNhbGwodGhpcy5ob3QpO3JldHVybiExPT09YXx8ZD09PWdzfHwhMD09PV98fGZ9c2V0UG9zaXRpb24obCl7Y29uc3QgYT1uZXcgY2xhc3MgQlJle2NvbnN0cnVjdG9yKGwsYSl7Y29uc3QgZD10NyhhKSxoPW1nKGEpO2xldCBmLF8sVCxXLGllLGdlO3RoaXMucm9vdFdpbmRvdz1hLHRo''@;'; put 'put ''aXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxUPXBhcnNlSW50KGwubGVmdCwxMCksaWU9bC5oZWlnaHR8fDAsZ2U9bC53aWR0aHx8MCxfPWYsVz1ULGYrPWQsVCs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYm''@;'; put 'put ''KGY9cGFyc2VJbnQobC5wYWdlWSwxMCksVD1wYXJzZUludChsLnBhZ2VYLDEwKSxpZT1sLnRhcmdldC5jbGllbnRIZWlnaHQsZ2U9bC50YXJnZXQuY2xpZW50V2lkdGgsXz1mLWQsVz1ULWgpLHRoaXMudG9wPWYsdGhpcy50b3BSZWxhdGl2ZT1fLHRoaXMubGVmdD1ULHRoaXMubGVmdFJlbGF0''@;'; put 'put ''aXZlPVcsdGhpcy5zY3JvbGxUb3A9ZCx0aGlzLnNjcm9sbExlZnQ9aCx0aGlzLmNlbGxIZWlnaHQ9aWUsdGhpcy5jZWxsV2lkdGg9Z2V9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cu''@;'; put 'put ''aW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRo''@;'; put 'put ''KX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19KGwsdGhpcy5jb250YWluZXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyk7dGhpcy5vcHRpb25zLmtlZXBJblZpZXdwb3J0PyhhLmZpdHNCZWxvdyh0aGlzLmNvbnRhaW5lcik/dGhpcy5z''@;'; put 'put ''ZXRQb3NpdGlvbkJlbG93Q3Vyc29yKGEpOmEuZml0c0Fib3ZlKHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJzb3IoYSk6dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKGEpLHRoaXMuaG90LmlzTHRyKCk/dGhpcy5zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIo''@;'; put 'put ''YSk6dGhpcy5zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwoYSkpOih0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihhKSl9c2V0SG9yaXpvbnRhbFBvc2l0aW9uRm9yUnRsKGwpe2wuZml0c09uTGVmdCh0aGlzLmNvbnRhaW5l''@;'; put 'put ''cik/dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpOnRoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IobCl9c2V0SG9yaXpvbnRhbFBvc2l0aW9uRm9yTHRyKGwpe2wuZml0c09uUmlnaHQodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3Io''@;'; put 'put ''bCk6dGhpcy5zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpfXNldFBvc2l0aW9uQWJvdmVDdXJzb3IobCl7bGV0IGE9dGhpcy5vZmZzZXQuYWJvdmUrbC50b3AtdGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0O3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wK2wuY2VsbEhlaWdodC10aGlz''@;'; put 'put ''LmNvbnRhaW5lci5vZmZzZXRIZWlnaHQrMyksdGhpcy5jb250YWluZXIuc3R5bGUudG9wPWAke2F9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IobCl7bGV0IGE9dGhpcy5vZmZzZXQuYmVsb3crbC50b3ArMTt0aGlzLmlzU3ViTWVudSgpJiYoYT1sLnRvcC0xKSx0aGlzLmNvbnRhaW5lci5z''@;'; put 'put ''dHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IobCl7bGV0IGE9bC5sZWZ0O2lmKHRoaXMuaXNTdWJNZW51KCkpe2NvbnN0e3JpZ2h0OmR9PXRoaXMucGFyZW50TWVudS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YSs9bC5jZWxsV2lkdGgrZC0o''@;'; put 'put ''bC5sZWZ0K2wuY2VsbFdpZHRoKX1lbHNlIGErPXRoaXMub2Zmc2V0LnJpZ2h0O3RoaXMuY29udGFpbmVyLnN0eWxlLmxlZnQ9YCR7YX1weGB9c2V0UG9zaXRpb25PbkxlZnRPZkN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5sZWZ0K2wubGVmdC10aGlzLmNvbnRhaW5lci5vZmZzZXRXaWR0''@;'; put 'put ''aDtpZih0aGlzLmlzU3ViTWVudSgpKXtjb25zdHtsZWZ0OmR9PXRoaXMucGFyZW50TWVudS5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS09bC5sZWZ0LWR9dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZWxlY3RGaXJzdENlbGwoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90TWVudS5nZXRDZWxsKDAsMCk7WGsobCl8fEprKGwpfHxRayhsKT90aGlzLnNlbGVjdE5leHRDZWxsKDAsMCk6dGhpcy5ob3RNZW51LnNlbGVjdENlbGwoMCwwKX1zZWxlY3RMYXN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmNvdW50Um93cygpLTEsYT10aGlzLmhvdE1lbnUuZ2V0''@;'; put 'put ''Q2VsbChsLDApO1hrKGEpfHxKayhhKXx8UWsoYSk/dGhpcy5zZWxlY3RQcmV2Q2VsbChsLDApOih0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChsLDAsdm9pZCAwLHZvaWQgMCwhMSksdGhpcy5ob3RNZW51LnNjcm9sbFZpZXdwb3J0VG8obCwwLCEwLCExKSl9c2VsZWN0TmV4dENlbGwobCxhKXtj''@;'; put 'put ''b25zdCBkPWwrMSxoPWQ8dGhpcy5ob3RNZW51LmNvdW50Um93cygpP3RoaXMuaG90TWVudS5nZXRDZWxsKGQsYSk6bnVsbDtoJiYoWGsoaCl8fEprKGgpfHxRayhoKT90aGlzLnNlbGVjdE5leHRDZWxsKGQsYSk6dGhpcy5ob3RNZW51LnNlbGVjdENlbGwoZCxhKSl9c2VsZWN0UHJldkNlbGwo''@;'; put 'put ''bCxhKXtjb25zdCBkPWwtMSxoPWQ+PTA/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJihYayhoKXx8SmsoaCl8fFFrKGgpP3RoaXMuc2VsZWN0UHJldkNlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1tZW51SXRlbVJlbmRlcmVyKGwsYSxkLGgsZixfKXtj''@;'; put 'put ''b25zdCBUPWwuZ2V0U291cmNlRGF0YUF0Um93KGQpLFc9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLEVlPW90PT5vdC5kaXNhYmxlU2VsZWN0aW9uO2xldCBaZT1fO3ZhciBvdDsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihaZT1aZS5jYWxsKHRoaXMuaG90KSks''@;'; put 'put ''ZzIoYSkscGkoVywiaHRJdGVtV3JhcHBlciIpLGEuYXBwZW5kQ2hpbGQoVyksb3Q9VCxuZXcgUmVnRXhwKGdzLCJpIikudGVzdChvdC5uYW1lKT9waShhLCJodFNlcGFyYXRvciIpOiJmdW5jdGlvbiI9PXR5cGVvZiBULnJlbmRlcmVyPyhwaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEu''@;'; put 'put ''YXBwZW5kQ2hpbGQoVC5yZW5kZXJlcihsLFcsZCxoLGYsWmUpKSk6Z2coVyxaZSksKG90PT4hMD09PW90LmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2Ygb3QuZGlzYWJsZWQmJiEwPT09b3QuZGlzYWJsZWQuY2FsbCh0aGlzLmhvdCkpKFQpPyhwaShhLCJodERpc2FibGVkIiksdGhpcy5l''@;'; put 'put ''dmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSkpOkVlKFQpPyhwaShhLCJodFNlbGVjdGlvbkRpc2FibGVkIiksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVj''@;'; put 'put ''dENlbGwoKSkpOihvdD0+Ymwob3QsInN1Ym1lbnUiKSkoVCk/KHBpKGEsImh0U3VibWVudSIpLEVlKFQpP3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2VlbnRlciIsKCk9PmwuZGVzZWxlY3RDZWxsKCkpOnRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIoYSwibW91c2VlbnRlciIsKCk9Pmwuc2VsZWN0Q2VsbChkLGgsdm9pZCAwLHZvaWQgMCwhMSwhMSkpKTooV28oYSxbImh0U3VibWVudSIsImh0RGlzYWJsZWQiXSksRWUoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVj''@;'; put 'put ''dENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5zZWxlY3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpfWNyZWF0ZUNvbnRhaW5lcigpe2NvbnN0IGE9dGhpcy5vcHRpb25zLmNvbnRhaW5lci5vd25lckRvY3VtZW50''@;'; put 'put ''O2xldCBoLGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGQmJihSYShkKSYmKGQ9ZC5jYWxsKHRoaXMuaG90KSxkPW51bGw9PT1kfHxMYShkKT8iIjpkLnRvU3RyaW5nKCkpLGQ9ZC5yZXBsYWNlKC9bXkEtejAtOV0v''@;'; put 'put ''ZywiXyIpLGQ9YCR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX1TdWJfJHtkfWAsaD1hLnF1ZXJ5U2VsZWN0b3IoYC4ke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9LiR7ZH1gKSksaHx8KGg9YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxwaShoLGBodE1lbnUgJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1l''@;'; put 'put ''fWApLGQmJnBpKGgsZCksdGhpcy5vcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChoKSksaH1ibG9ja01haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2s9ZnVuY3Rpb24oKXt9LHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsdGhp''@;'; put 'put ''cy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spfXJlbGVhc2VNYWluVGFibGVDYWxsYmFja3MoKXt0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrJiYodGhpcy5ob3QucmVtb3Zl''@;'; put 'put ''SG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayksdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsKX1vbkFm''@;'; put 'put ''dGVySW5pdCgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy5ob3RNZW51LnZpZXcuX3d0LGE9dGhpcy5ob3RNZW51LmdldFNldHRpbmdzKCkuZGF0YSxkPWwuaGlkZXIuc3R5bGUsaD1sLmhvbGRlci5zdHlsZSxmPXBhcnNlSW50KGQud2lkdGgsMTApLF89QWwoYSwoVCxXKT0+VCsoVy5uYW1lPT09''@;'; put 'put ''Z3M/MToyNiksMCk7aC53aWR0aD1gJHtmKzN9cHhgLGguaGVpZ2h0PWAke18rM31weGAsZC5oZWlnaHQ9aC5oZWlnaHR9b25BZnRlclNlbGVjdGlvbihsLGEsZCxoLGYpeyExPT09dGhpcy5rZXlFdmVudCYmKGYudmFsdWU9ITApfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5l''@;'; put 'put ''ZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxvbmUmJnRoaXMuaG90TWVudSYmIVZwKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1lbnUoKSkmJiFWcChsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5j''@;'; put 'put ''bG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRNZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYmQm8obC50YXJnZXQsImh0Q29yZSIpJiZWcChsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZhdWx0KCl9fVRhKGxBLE8wKTtjb25zdCB5aj1sQSxjQT0iY29udGV4''@;'; put 'put ''dE1lbnUiO3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVT''@;'; put 'put ''aG93Iiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7bGV0IFpSZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZ''@;'; put 'put ''KCl7cmV0dXJuIGNBfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltvQSxzQSxncyxEeSxJeSxncyxpQSxS''@;'; put 'put ''eSxncyxhQSxyQSxncyxMeSxncyx2ZF19Y29uc3RydWN0b3IoYSl7c3VwZXIoYSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5ldyBOcmUodGhpcy5ob3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51bGx9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NBXX1lbmFibGVQbHVnaW4oKXt2YXIgYT10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NBXTsiZnVuY3Rpb24iPT10eXBlb2YgZC5jYWxsYmFjayYmdGhpcy5jb21tYW5k''@;'; put 'put ''RXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soZC5jYWxsYmFjayksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6ZC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0''@;'; put 'put ''aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+dGhpcy5vbk1lbnVCZWZvcmVPcGVuKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRoaXMub25NZW51QWZ0ZXJPcGVuKCkpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgp''@;'; put 'put ''PT50aGlzLm9uTWVudUFmdGVyQ2xvc2UoKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksXz0wO188aDtfKyspZltfXT1hcmd1bWVudHNbX107cmV0dXJuIGEuZXhlY3V0''@;'; put 'put ''ZUNvbW1hbmQuY2FsbChhLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixoPT50aGlzLm9uQWZ0ZXJPbkNlbGxDb250ZXh0TWVudShoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFi''@;'; put 'put ''bGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1vcGVuKGEpe2lmKCF0aGlzLm1lbnV8fCh0aGlzLnByZXBh''@;'; put 'put ''cmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpLCF0aGlzLm1lbnUuaXNPcGVuZWQoKSkpcmV0dXJuO2xldCBkPTAsaD0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmZ9PXRoaXMuaG90''@;'; put 'put ''LnJvb3RXaW5kb3cse3RvcDpfLGxlZnQ6VH09Zi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPV8tdDcoYS52aWV3KSxoPVQtbWcoYS52aWV3KX1lbHNlIGQ9LTEqdDcodGhpcy5tZW51LmhvdE1lbnUucm9vdFdpbmRvdyksaD0tMSptZyh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KTt0''@;'; put 'put ''aGlzLm1lbnUuc2V0UG9zaXRpb24oe3RvcDpwYXJzZUludChhLnBhZ2VZLDEwKStkLGxlZnQ6cGFyc2VJbnQoYS5wYWdlWCwxMCkraH0pfWNsb3NlKCl7dGhpcy5tZW51JiYodGhpcy5tZW51LmNsb3NlKCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCl9ZXhlY3V0ZUNvbW1hbmQoYSl7bnVsbD09''@;'; put 'put ''PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkPjE/ZC0xOjApLGY9MTtmPGQ7ZisrKWhbZi0xXT1hcmd1bWVudHNbZl07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShhLC4uLmgpfXBy''@;'; put 'put ''ZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgenJlKHRoaXMuaG90LGMuREVGQVVMVF9JVEVNUyk7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NBXSxkPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKX07dGhpcy5ob3QucnVuSG9va3MoImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZCksdGhpcy5pdGVtc0ZhY3Rvcnkuc2V0UHJlZGVmaW5lZEl0ZW1zKGQuaXRlbXMpO2NvbnN0IGg9dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMoYSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGgp''@;'; put 'put ''LHRoaXMubWVudS5zZXRNZW51SXRlbXMoaCksRG4oaCxmPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoZi5rZXksZikpfW9uQWZ0ZXJPbkNlbGxDb250ZXh0TWVudShhKXtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKCksaD1kLnJvd0hlYWRlcnMsZj1kLmNvbEhl''@;'; put 'put ''YWRlcnMsVD1hLnRhcmdldDt0aGlzLmNsb3NlKCksIUJvKFQsImhhbmRzb250YWJsZUlucHV0IikmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSwoaHx8Znx8ZnVuY3Rpb24gXyhXKXtyZXR1cm4iVEQiPT09Vy5ub2RlTmFtZXx8IlREIj09PVcucGFyZW50Tm9kZS5u''@;'; put 'put ''b2RlTmFtZX0oVCl8fEJvKFQsImN1cnJlbnQiKSYmQm8oVCwid3RCb3JkZXIiKSkmJnRoaXMub3BlbihhKSl9b25NZW51QmVmb3JlT3Blbigpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0TWVudVNob3ciLHRoaXMpfW9uTWVudUFmdGVyT3Blbigpe3RoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlckNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJDbG9zZSgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51SGlkZSIsdGhpcyl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95''@;'; put 'put ''KCksc3VwZXIuZGVzdHJveSgpfX1yZXR1cm4gYy5TRVBBUkFUT1I9e25hbWU6Z3N9LGN9KSgpO2NsYXNzIEtSZXtjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YT17fX1zZXREYXRhKGwsYSl7dGhpcy5kYXRhW2xdPWF9Z2V0RGF0YShsKXtyZXR1cm4gdGhpcy5kYXRhW2xdfHx2b2lkIDB9fWNsYXNz''@;'; put 'put ''IFhSZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xpcGJvYXJkRGF0YT1uZXcgS1JlfX1jbGFzcyB3antjb25zdHJ1Y3RvcihsKXt0aGlzLnJvb3REb2N1bWVudD1sLmRlZmF1bHRWaWV3P2w6bC5vd25lckRvY3VtZW50LHRoaXMubWFpbkVsZW1lbnQ9bnVsbCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcg''@;'; put 'put ''bGwodGhpcyksdGhpcy5saXN0ZW5lcnNDb3VudD1uZXcgV2Vha1NldCx0aGlzLmNvbnRhaW5lcj1sfXVzZVNlY29uZGFyeUVsZW1lbnQoKXtjb25zdCBsPWZ1bmN0aW9uIGVPZShjKXtjb25zdCBsPWRBLmdldChjKTtpZihsKXJldHVybiBsLnBhcmVudEVsZW1lbnR8fGMuYXBwZW5kQ2hpbGQo''@;'; put 'put ''bCksbDtjb25zdCBkPShjLmRlZmF1bHRWaWV3P2M6Yy5vd25lckRvY3VtZW50KS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBkQS5zZXQoYyxkKSxkLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSxkLmNsYXNzTmFtZT0iSGFuZHNvbnRhYmxlQ29weVBhc3RlIixk''@;'; put 'put ''LnRhYkluZGV4PS0xLGQuYXV0b2NvbXBsZXRlPSJvZmYiLGQud3JhcD0iaGFyZCIsZC52YWx1ZT0iICIsYy5hcHBlbmRDaGlsZChkKSxkfSh0aGlzLmNvbnRhaW5lcik7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMobCl8fCh0aGlzLmxpc3RlbmVyc0NvdW50LmFkZChsKSxZcmUodGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXIsbCx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1sfXNldEZvY3VzYWJsZUVsZW1lbnQobCl7dGhpcy5saXN0ZW5lcnNDb3VudC5oYXMobCl8fCh0aGlzLmxpc3RlbmVyc0NvdW50LmFkZChsKSxZcmUodGhpcy5ldmVudE1hbmFnZXIsbCx0aGlzKSksdGhpcy5tYWluRWxlbWVudD1s''@;'; put 'put ''fWdldEZvY3VzYWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5tYWluRWxlbWVudH1mb2N1cygpe3RoaXMubWFpbkVsZW1lbnQudmFsdWU9IiAiLG0yKCl8fGZ0ZSh0aGlzLm1haW5FbGVtZW50KX19VGEod2osTzApO2NvbnN0IHVBPW5ldyBXZWFrTWFwLENqPShjLGwpPT5hPT5sLnJ1bkxvY2Fs''@;'; put 'put ''SG9va3MoYyxhKTtmdW5jdGlvbiBZcmUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLCJjb3B5IixDaigiY29weSIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJjdXQiLENqKCJjdXQiLGEpKSxjLmFkZEV2ZW50TGlzdGVuZXIobCwicGFzdGUiLENqKCJwYXN0ZSIsYSkpfWNvbnN0IGRB''@;'; put 'put ''PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFdyZShjKXtpZighKGMgaW5zdGFuY2VvZiB3aikpcmV0dXJuO2xldCBsPXVBLmdldChjLmNvbnRhaW5lcik7aWYobD1pc05hTihsKT8wOmwsbD4wJiYobC09MSksZnVuY3Rpb24gUVJlKGMpe2MuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9KGMpLGw8PTApe2w9''@;'; put 'put ''MDtjb25zdCBhPWRBLmdldChjLmNvbnRhaW5lcik7YSYmYS5wYXJlbnROb2RlJiYoYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpLGRBLmRlbGV0ZShjLmNvbnRhaW5lcikpLGMubWFpbkVsZW1lbnQ9bnVsbH11QS5zZXQoYy5jb250YWluZXIsbCl9ZnVuY3Rpb24gR3JlKGMsbCl7JHJlKGMs''@;'; put 'put ''bCksbC5hZGQoYyl9ZnVuY3Rpb24gRTcoYyxsLGEpeyRyZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gJHJlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3Qi''@;'; put 'put ''KX1mdW5jdGlvbiBoQShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX1mdW5jdGlvbiBxdShjLGwpe3JldHVybiBmdW5jdGlvbiB0T2UoYyxsKXtyZXR1cm4gbC5n''@;'; put 'put ''ZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHFyZShjLGwsImdldCIpKX1mdW5jdGlvbiBrNyhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIG5PZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVk''@;'; put 'put ''IHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMscXJlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBxcmUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5z''@;'; put 'put ''dGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIFhwPW5ldyBXZWFrTWFwLFNqPW5ldyBXZWFrTWFwLFB5PW5ldyBXZWFrTWFwLE1qPW5ldyBXZWFrTWFwLHhqPW5ldyBXZWFrTWFwLEZ5PW5ldyBXZWFrTWFwLGZBPW5ldyBXZWFrU2V0LEtyZT1uZXcgV2Vha1NldDtjbGFzcyByT2V7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVtbnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczpffT1sO0dyZSh0aGlzLEtyZSksR3JlKHRoaXMsZkEpLEU3KHRoaXMsWHAse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMs''@;'; put 'put ''U2ose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsUHkse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsTWose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMseGose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEU3KHRoaXMsRnkse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnZvaWQgMH0pLGs3KHRoaXMsU2osYSksazcodGhpcyxQeSxkKSxrNyh0aGlzLE1qLGgpLGs3KHRoaXMseGosZiksazcodGhpcyxGeSxfKX1zZXRTZWxlY3RlZFJhbmdlKGwpe2s3KHRoaXMsWHAsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1xdSh0aGlzLFNqKS5jYWxs''@;'; put 'put ''KHRoaXMpfHwwPT09cXUodGhpcyxQeSkuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09cXUodGhpcyxYcCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PXF1KHRoaXMsWHApLmdldEJvdHRvbUVuZENvcm5lcigpLGY9aEEodGhpcyxLcmUsaU9lKS5j''@;'; put 'put ''YWxsKHRoaXMsbCxkKSxfPWhBKHRoaXMsZkEsRWopLmNhbGwodGhpcyxhLGgpO3JldHVybntpc1JhbmdlVHJpbW1lZDpkIT09Znx8aCE9PV8sc3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpmLGVuZENvbDpffX1nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PXF1''@;'; put 'put ''KHRoaXMsUHkpLmNhbGwodGhpcyl8fDA9PT1xdSh0aGlzLEZ5KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1xdSh0aGlzLFhwKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09cXUodGhpcyxYcCkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1oQSh0aGlzLGZBLEVqKS5j''@;'; put 'put ''YWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LTEsc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fWdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1xdSh0aGlzLFB5KS5jYWxsKHRoaXMpfHwwPT09cXUodGhpcyxGeSkuY2FsbCh0''@;'; put 'put ''aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtjb2w6bH09cXUodGhpcyxYcCkuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PXF1KHRoaXMsWHApLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9aEEodGhpcyxmQSxFaikuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0''@;'; put 'put ''YXJ0Um93Oi1xdSh0aGlzLEZ5KS5jYWxsKHRoaXMpLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX19ZnVuY3Rpb24gRWooYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK3F1KHRoaXMseGopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gaU9lKGMsbCl7cmV0dXJuIE1h''@;'; put 'put ''dGgubWluKGwsTWF0aC5tYXgoYytxdSh0aGlzLE1qKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIFhyZShjKXtjb25zdCBsPVtdLGE9W107cmV0dXJuIERuKGMsZD0+e3ZvKE1hdGgubWluKGQuc3RhcnRSb3csZC5lbmRSb3cpLE1hdGgubWF4KGQuc3RhcnRSb3csZC5lbmRSb3cpLFc9Pnst''@;'; put 'put ''MT09PWwuaW5kZXhPZihXKSYmbC5wdXNoKFcpfSksdm8oTWF0aC5taW4oZC5zdGFydENvbCxkLmVuZENvbCksTWF0aC5tYXgoZC5zdGFydENvbCxkLmVuZENvbCksVz0+ey0xPT09YS5pbmRleE9mKFcpJiZhLnB1c2goVyl9KX0pLHtyb3dzOmwsY29sdW1uczphfX1mdW5jdGlvbiBSZyhjLGws''@;'; put 'put ''YSl7SnJlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBKcmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEE3KGMsbCxhKXtyZXR1cm4g''@;'; put 'put ''bD1mdW5jdGlvbiBzT2UoYyl7dmFyIGw9ZnVuY3Rpb24gYU9lKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gYjEoYyxsKXtyZXR1cm4gZnVuY3Rpb24gY09lKGMsbCl7cmV0dXJuIGwuZ2V0''@;'; put 'put ''P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxRcmUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gV2YoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB1T2UoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0''@;'; put 'put ''byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFFyZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUXJlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3Rh''@;'; put 'put ''bmNlIik7cmV0dXJuIGwuZ2V0KGMpfXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHlMaW1pdCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJtb2RpZnlDb3B5YWJsZVJhbmdlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUN1dCIpLHNvLmdldFNp''@;'; put 'put ''bmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckN1dCIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVQYXN0ZSIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclBhc3RlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvcHkiKSxzby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5Iik7Y29uc3QgcEE9ImNvcHlQYXN0ZSIsaE9lPVsiZnJhZ21lbnRTZWxlY3Rpb24iXSxlaWU9Wyc8bWV0YSBuYW1lPSJnZW5lcmF0b3IiIGNvbnRlbnQ9IkhhbmRzb250YWJsZSIvPicsJzxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+dGR7d2hpdGUt''@;'; put 'put ''c3BhY2U6bm9ybWFsfWJye21zby1kYXRhLXBsYWNlbWVudDpzYW1lLWNlbGx9PC9zdHlsZT4nXS5qb2luKCIiKTt2YXIga2o9bmV3IFdlYWtNYXAsQWo9bmV3IFdlYWtNYXAsVGo9bmV3IFdlYWtNYXAsVDc9bmV3IFdlYWtNYXAsZ0E9bmV3IFdlYWtNYXAsbUE9bmV3IFdlYWtNYXAsRDc9bmV3''@;'; put 'put ''IFdlYWtNYXAsdGllPW5ldyBXZWFrU2V0O2NsYXNzIGZPZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBvT2UoYyxsKXtKcmUoYyxsKSxsLmFkZChjKX0odGhpcyx0aWUpLEE3KHRoaXMsImNvbHVtbnNMaW1pdCIsMS8wKSxBNyh0aGlzLCJy''@;'; put 'put ''b3dzTGltaXQiLDEvMCksQTcodGhpcywicGFzdGVNb2RlIiwib3ZlcndyaXRlIiksQTcodGhpcywidWlDb250YWluZXIiLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSxSZyh0aGlzLGtqLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLFJnKHRoaXMsQWose3dyaXRhYmxlOiEwLHZhbHVlOiEx''@;'; put 'put ''fSksUmcodGhpcyxUaix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxSZyh0aGlzLFQ3LHt3cml0YWJsZTohMCx2YWx1ZToiY2VsbHMtb25seSJ9KSxSZyh0aGlzLGdBLHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLFJnKHRoaXMsbUEse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksUmcodGhpcyxENyx7''@;'; put 'put ''d3JpdGFibGU6ITAsdmFsdWU6bmV3IHJPZSh7Y291bnRSb3dzOigpPT50aGlzLmhvdC5jb3VudFJvd3MoKSxjb3VudENvbHVtbnM6KCk9PnRoaXMuaG90LmNvdW50Q29scygpLHJvd3NMaW1pdDooKT0+dGhpcy5yb3dzTGltaXQsY29sdW1uc0xpbWl0OigpPT50aGlzLmNvbHVtbnNMaW1pdCxj''@;'; put 'put ''b3VudENvbHVtbkhlYWRlcnM6KCk9PnRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl9KX0pLEE3KHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSksQTcodGhpcywiZm9jdXNhYmxlRWxlbWVudCIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcEF9c3Rh''@;'; put 'put ''dGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bcEEsLi4uaE9lXX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA4MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcEFdfWVuYWJsZVBsdWdpbigpe2lmKHRoaXMuZW5hYmxlZClyZXR1cm47''@;'; put 'put ''Y29uc3R7W3BBXTpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO3ZhciBhLGQ7Im9iamVjdCI9PXR5cGVvZiBsJiYodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShhPWwucGFzdGVNb2RlKSYmdm9pZCAwIT09YT9hOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlzTmFOKGwucm93c0xpbWl0''@;'; put 'put ''KT90aGlzLnJvd3NMaW1pdDpsLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTihsLmNvbHVtbnNMaW1pdCk/dGhpcy5jb2x1bW5zTGltaXQ6bC5jb2x1bW5zTGltaXQsV2YodGhpcyxraiwhIWwuY29weUNvbHVtbkhlYWRlcnMpLFdmKHRoaXMsQWosISFsLmNvcHlDb2x1bW5Hcm91''@;'; put 'put ''cEhlYWRlcnMpLFdmKHRoaXMsVGosISFsLmNvcHlDb2x1bW5IZWFkZXJzT25seSksdGhpcy51aUNvbnRhaW5lcj1udWxsIT09KGQ9bC51aUNvbnRhaW5lcikmJnZvaWQgMCE9PWQ/ZDp0aGlzLnVpQ29udGFpbmVyKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIsaD0+dGhpcy5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhoKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlVXAiLCgpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLCgpPT50aGlzLm9uQWZ0ZXJT''@;'; put 'put ''ZWxlY3Rpb25FbmQoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+dGhpcy5vbkJlZm9yZUtleURvd24oKSksdGhpcy5mb2N1c2FibGVFbGVtZW50PWZ1bmN0aW9uIEpSZShjKXtjb25zdCBsPW5ldyB3aihjKTtsZXQgYT11QS5nZXQoYyk7cmV0dXJuIGE9aXNOYU4oYSk/MDph''@;'; put 'put ''LHVBLnNldChjLGErMSksbH0odGhpcy51aUNvbnRhaW5lciksdGhpcy5mb2N1c2FibGVFbGVtZW50LmFkZExvY2FsSG9vaygiY29weSIsaD0+dGhpcy5vbkNvcHkoaCkpLmFkZExvY2FsSG9vaygiY3V0IixoPT50aGlzLm9uQ3V0KGgpKS5hZGRMb2NhbEhvb2soInBhc3RlIixoPT50aGlzLm9u''@;'; put 'put ''UGFzdGUoaCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5m''@;'; put 'put ''b2N1c2FibGVFbGVtZW50JiZXcmUodGhpcy5mb2N1c2FibGVFbGVtZW50KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y29weSgpe1dmKHRoaXMsVDcsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJjZWxscy1vbmx5IiksV2YodGhpcyxnQSwh''@;'; put 'put ''MCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKX1jb3B5Q2VsbHNPbmx5KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRl''@;'; put 'put ''cnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVycy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9''@;'; put 'put ''Y3V0KCl7V2YodGhpcyxtQSwhMCksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuZXhlY0NvbW1hbmQoImN1dCIpfWdldFJhbmdlZENvcHlhYmxlRGF0YShsKXtyZXR1cm4gQ3kodGhp''@;'; put 'put ''cy5nZXRSYW5nZWREYXRhKGwpKX1nZXRSYW5nZWREYXRhKGwpe2NvbnN0IGE9W10se3Jvd3M6ZCxjb2x1bW5zOmh9PVhyZShsKTtyZXR1cm4gRG4oZCxmPT57Y29uc3QgXz1bXTtEbihoLFQ9PntfLnB1c2goZjwwP3RoaXMuaG90LmdldENvbEhlYWRlcihULGYpOnRoaXMuaG90LmdldENvcHlh''@;'; put 'put ''YmxlRGF0YShmLFQpKX0pLGEucHVzaChfKX0pLGF9cGFzdGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bDtpZigh''@;'; put 'put ''bCYmIWEpcmV0dXJuO2NvbnN0IGQ9bmV3IFhSZTtsJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsbCksYSYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsYSksdGhpcy5nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSx0aGlzLm9uUGFzdGUoZCl9''@;'; put 'put ''c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtiMSh0aGlzLEQ3KS5zZXRTZWxlY3RlZFJhbmdlKGwpO2NvbnN0IGE9bmV3IE1hcChbWyJoZWFkZXJzIixudWxsXSxbImNlbGxzIixudWxsXV0pOyJjb2x1bW4taGVh''@;'; put 'put ''ZGVycy1vbmx5Ij09PWIxKHRoaXMsVDcpP2Euc2V0KCJoZWFkZXJzIixiMSh0aGlzLEQ3KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOigid2l0aC1jb2x1bW4taGVhZGVycyI9PT1iMSh0aGlzLFQ3KT9hLnNldCgiaGVhZGVycyIsYjEodGhpcyxENykuZ2V0TW9zdEJvdHRv''@;'; put 'put ''bUNvbHVtbkhlYWRlcnNSYW5nZSgpKToid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyI9PT1iMSh0aGlzLFQ3KSYmYS5zZXQoImhlYWRlcnMiLGIxKHRoaXMsRDcpLmdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpKSxhLnNldCgiY2VsbHMiLGIxKHRoaXMsRDcpLmdldENlbGxzUmFuZ2UoKSkp''@;'; put 'put ''LHRoaXMuY29weWFibGVSYW5nZXM9QXJyYXkuZnJvbShhLnZhbHVlcygpKS5maWx0ZXIoaD0+bnVsbCE9PWgpLm1hcChoPT57bGV0e3N0YXJ0Um93OmYsc3RhcnRDb2w6XyxlbmRSb3c6VCxlbmRDb2w6V309aDtyZXR1cm57c3RhcnRSb3c6ZixzdGFydENvbDpfLGVuZFJvdzpULGVuZENvbDpX''@;'; put 'put ''fX0pLHRoaXMuY29weWFibGVSYW5nZXM9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLHRoaXMuY29weWFibGVSYW5nZXMpO2NvbnN0IGQ9YS5nZXQoImNlbGxzIik7aWYobnVsbCE9PWQmJmQuaXNSYW5nZVRyaW1tZWQpe2NvbnN0e3N0YXJ0Um93Omgsc3RhcnRDb2w6''@;'; put 'put ''ZixlbmRSb3c6XyxlbmRDb2w6VH09ZDt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5TGltaXQiLF8taCsxLFQtZisxLHRoaXMucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0KX19Z2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5o''@;'; put 'put ''b3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLlRFWFRBUkVBO2E/dGhpcy5mb2N1c2FibGVFbGVtZW50LnNldEZvY3VzYWJsZUVsZW1lbnQoYSk6dGhpcy5mb2N1c2FibGVFbGVtZW50LnVzZVNlY29uZGFyeUVsZW1lbnQoKX1pc0VkaXRvck9wZW5lZCgpe3ZhciBs''@;'; put 'put ''O3JldHVybiBudWxsPT09KGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzT3BlbmVkKCl9cG9wdWxhdGVWYWx1ZXMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwubGVuZ3RoKXJldHVybjtjb25zdCBkPWwubGVuZ3RoLGg9bFswXS5sZW5ndGgsZj1bXSx7cm93Ol8sY29sOlR9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OlcsY29sOmllfT1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBnZT1fLHdl''@;'; put 'put ''PVQsRWU9XyxaZT1UO2Zvcig7Zi5sZW5ndGg8ZHx8Z2U8PVc7KXtjb25zdHtza2lwUm93T25QYXN0ZTpvdCx2aXN1YWxSb3c6ZXR9PXRoaXMuaG90LmdldENlbGxNZXRhKGdlLFQpO2lmKGdlPWV0KzEsITA9PT1vdCljb250aW51ZTtFZT1ldCx3ZT1UO2NvbnN0IHl0PVtdLGt0PWYubGVuZ3Ro''@;'; put 'put ''JWQ7Zm9yKDt5dC5sZW5ndGg8aHx8d2U8PWllOyl7Y29uc3R7c2tpcENvbHVtbk9uUGFzdGU6U3QsdmlzdWFsQ29sOlF0fT10aGlzLmhvdC5nZXRDZWxsTWV0YShfLHdlKTsod2U9UXQrMSwhMCE9PVN0KSYmKFplPVF0LHl0LnB1c2gobFtrdF1beXQubGVuZ3RoJWhdKSl9Zi5wdXNoKHl0KX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoXyxULGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW18sVCxFZSxaZV19b25Db3B5KGwpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhYjEodGhpcyxnQSl8fHRoaXMuaXNFZGl0b3JP''@;'; put 'put ''cGVuZWQoKSlyZXR1cm47dGhpcy5zZXRDb3B5YWJsZVRleHQoKSxXZih0aGlzLGdBLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKSxkPWZ1bmN0aW9uIGxPZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRl''@;'; put 'put ''ZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX0odGhpcyx0aWUscE9lKS5jYWxsKHRoaXMsdGhpcy5jb3B5YWJsZVJhbmdlcyk7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxkKSl7Y29uc3QgZj1D''@;'; put 'put ''eShhKTtpZihsJiZsLmNsaXBib2FyZERhdGEpe2NvbnN0IF89RE4oYSk7bC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvcGxhaW4iLGYpLGwuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L2h0bWwiLFtlaWUsX10uam9pbigiIikpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1''@;'; put 'put ''IiYmdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLnNldERhdGEoIlRleHQiLGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHkiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyxkKX1XZih0aGlzLFQ3LCJjZWxscy1vbmx5IiksbC5wcmV2ZW50RGVmYXVsdCgpfW9uQ3V0KGwpe2lm''@;'; put 'put ''KCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhYjEodGhpcyxtQSl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47dGhpcy5zZXRDb3B5YWJsZVRleHQoKSxXZih0aGlzLG1BLCExKTtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhv''@;'; put 'put ''dC5ydW5Ib29rcygiYmVmb3JlQ3V0IixhLHRoaXMuY29weWFibGVSYW5nZXMpKXtjb25zdCBoPUN5KGEpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgZj1ETihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsaCksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRl''@;'; put 'put ''eHQvaHRtbCIsW2VpZSxmXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsaCk7dGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyQ3V0IixhLHRoaXMuY29weWFibGVSYW5nZXMpfWwucHJldmVudERlZmF1bHQoKX1vblBhc3RlKGwpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2xldCBhO2lmKGwmJmwucHJldmVudERlZmF1bHQmJmwucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSxsJiZ0eXBlb2YgbC5jbGlwYm9hcmREYXRhPCJ1Iil7Y29uc3QgVD1yayhsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9BVFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTthPVQmJi8oPHRhYmxlKXwo''@;'; put 'put ''PFRBQkxFKS9nLnRlc3QoVCk/SXRlKFQsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhOmwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1''@;'; put 'put ''IiYmKGE9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQiKSk7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYoYT1mdW5jdGlvbiBqRGUoYyl7Y29uc3QgbD1bWyIiXV07aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0''@;'; put 'put ''aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRjaChCbmUpKWM9Yy5yZXBsYWNlKEJuZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaChWbmUpKWM9Yy5yZXBsYWNlKFZuZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFy''@;'; put 'put ''dHNXaXRoKCciJykpe2xldCBfPTAsVD0hMDtmb3IoO1Q7KXtjb25zdCBXPWMuc2xpY2UoMCwxKTsnIic9PT1XJiYoXys9MSksZis9VywoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgvXltcdFxyXG5dLykmJl8lMj09MCkmJihUPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxXPT5uZXcgQXJyYXkoTWF0aC5mbG9vcihXLmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IF89Yy5tYXRjaChCRGUpO2Y9Xz9fWzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBs''@;'; put 'put ''fShhKSksYSYmMD09PWEubGVuZ3RofHwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVQYXN0ZSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbZCxoLGYsX109dGhpcy5wb3B1bGF0ZVZhbHVlcyhhKTt0aGlzLmhvdC5zZWxlY3RDZWxsKGQsaCxNYXRoLm1pbih0aGlz''@;'; put 'put ''LmhvdC5jb3VudFJvd3MoKS0xLGYpLE1hdGgubWluKHRoaXMuaG90LmNvdW50Q29scygpLTEsXykpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFt''@;'; put 'put ''ZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gWVJlKGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFRWKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRo''@;'; put 'put ''aXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxiMSh0aGlzLGtqKSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uICRSZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2hl''@;'; put 'put ''YWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERWLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhDb2x1bW5IZWFkZXJzKCl9LGRpc2Fi''@;'; put 'put ''bGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYjEodGhpcyxBaikmJmwuaXRlbXMucHVzaChmdW5jdGlvbiBHUmUoYyl7cmV0dXJue2tleToiY29w''@;'; put 'put ''eV93aXRoX2NvbHVtbl9ncm91cF9oZWFkZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP01hdGgubWluKGwuZ2V0V2lkdGgoKS0xLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJVixhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRo''@;'; put 'put ''QWxsQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKXx8IXRoaXMuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlz''@;'; put 'put ''KSksYjEodGhpcyxUaikmJmwuaXRlbXMucHVzaChmdW5jdGlvbiBXUmUoYyl7cmV0dXJue2tleToiY29weV9jb2x1bW5faGVhZGVyc19vbmx5IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP01hdGgubWluKGwuZ2V0V2lkdGgoKS0xLDEpOjA7cmV0dXJu''@;'; put 'put ''IHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShMVixhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0s''@;'; put 'put ''aGlkZGVuOiExfX0odGhpcykpLGwuaXRlbXMucHVzaChmdW5jdGlvbiBxUmUoYyl7cmV0dXJue2tleToiY3V0IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShSVil9LGNhbGxiYWNrKCl7Yy5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8''@;'; put 'put ''MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKX1vbkFmdGVyT25DZWxsTW91c2VVcCgpeyF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVk''@;'; put 'put ''KCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpKX1vbkFmdGVyU2VsZWN0aW9uRW5kKCl7dGhpcy5pc0VkaXRvck9wZW5lZCgpfHwodGhpcy5n''@;'; put 'put ''ZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKSwoIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCk9PT10aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudHx8IXV0ZSgpKSYm''@;'; put 'put ''KHRoaXMuc2V0Q29weWFibGVUZXh0KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpKX1vbkJlZm9yZUtleURvd24oKXtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3Rp''@;'; put 'put ''dmVFbGVtZW50LGE9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7IWF8fGwhPT10aGlzLmZvY3VzYWJsZUVsZW1lbnQuZ2V0Rm9jdXNhYmxlRWxlbWVudCgpJiZsIT09YS5zZWxlY3R8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5m''@;'; put 'put ''b2N1cygpKX1kZXN0cm95KCl7dGhpcy5mb2N1c2FibGVFbGVtZW50JiYoV3JlKHRoaXMuZm9jdXNhYmxlRWxlbWVudCksdGhpcy5mb2N1c2FibGVFbGVtZW50PW51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcE9lKGMpe2NvbnN0e3Jvd3M6bH09WHJlKGMpO2xldCBhPTA7Zm9yKGxl''@;'; put 'put ''dCBkPTA7ZDxsLmxlbmd0aCYmIShsW2RdPj0wKTtkKyspYSs9MTtyZXR1cm57Y29sdW1uSGVhZGVyc0NvdW50OmF9fWZ1bmN0aW9uIG5pZShjLGwpe3JldHVybmBib3JkZXJfcm93JHtjfWNvbCR7bH1gfWZ1bmN0aW9uIERqKGMpe3ZhciBsLGE7cmV0dXJuKEtpKGMuc3RhcnQpfHxLaShjLmxl''@;'; put 'put ''ZnQpKSYmKGMuc3RhcnQ9bnVsbCE9PShsPWMuc3RhcnQpJiZ2b2lkIDAhPT1sP2w6Yy5sZWZ0KSwoS2koYy5lbmQpfHxLaShjLnJpZ2h0KSkmJihjLmVuZD1udWxsIT09KGE9Yy5lbmQpJiZ2b2lkIDAhPT1hP2E6Yy5yaWdodCksZGVsZXRlIGMubGVmdCxkZWxldGUgYy5yaWdodCxjfWZ1bmN0''@;'; put 'put ''aW9uIE55KGMpe3JldHVybiBLaShjLnN0YXJ0KSYmKGMubGVmdD1jLnN0YXJ0KSxLaShjLmVuZCkmJihjLnJpZ2h0PWMuZW5kKSxjfWZ1bmN0aW9uIElqKGMsbCl7cmV0dXJue2lkOm5pZShjLGwpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzAwMCIsY29ybmVyVmlzaWJsZTohMX0scm93OmMs''@;'; put 'put ''Y29sOmwsdG9wOntoaWRlOiEwfSxib3R0b206e2hpZGU6ITB9LHN0YXJ0OntoaWRlOiEwfSxlbmQ6e2hpZGU6ITB9fX1mdW5jdGlvbiAkZihjLGwpe2xldCBhPSExO3JldHVybiBEbihjLmdldFNlbGVjdGVkUmFuZ2UoKSxkPT57ZC5mb3JBbGwoKGgsZik9PntpZihoPDB8fGY8MClyZXR1cm47''@;'; put 'put ''Y29uc3QgXz1jLmdldENlbGxNZXRhKGgsZikuYm9yZGVycztpZihfKXtpZighbClyZXR1cm4gYT0hMCwhMTtpZighYmwoX1tsXSwiaGlkZSIpfHwhMT09PV9bbF0uaGlkZSlyZXR1cm4gYT0hMCwhMX19KX0pLGF9ZnVuY3Rpb24gdkEoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+''@;'; put 'put ''JHtTdHJpbmcuZnJvbUNoYXJDb2RlKDEwMDAzKX08L3NwYW4+JHtjfWB9Y29uc3QgYk9lPW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24geU9lKGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9Yk9lLmdldChjKSkmJnZvaWQgMCE9PWw/bDpjfWZ1''@;'; put 'put ''bmN0aW9uIHdPZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShYVik7cmV0dXJuICRmKHRoaXMsInRvcCIpJiYobD12QShsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPSRmKHRoaXMsInRvcCIpO2MucHJlcGFyZUJv''@;'; put 'put ''cmRlcihhLCJ0b3AiLGQpfX19ZnVuY3Rpb24gQ09lKGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSlYpO3JldHVybiAkZih0aGlzLGwpJiYoYT12QShh''@;'; put 'put ''KSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPSRmKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIFNPZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShRVik7cmV0dXJuICRmKHRoaXMs''@;'; put 'put ''ImJvdHRvbSIpJiYobD12QShsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPSRmKHRoaXMsImJvdHRvbSIpO2MucHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gTU9lKGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRl''@;'; put 'put ''cnM6bGVmdCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlQik7cmV0dXJuICRmKHRoaXMsbCkmJihhPXZBKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9JGYodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24geE9lKGMpe3JldHVybntr''@;'; put 'put ''ZXk6ImJvcmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodEIpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQoKXtyZXR1cm4hJGYodGhpcyl9fX1jb25zdCBfQT0iY3VzdG9tQm9yZGVy''@;'; put 'put ''cyI7Y2xhc3MgRE9lIGV4dGVuZHMgWnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEVPZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24ga09lKGMpe3ZhciBsPWZ1bmN0aW9uIEFPZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJu''@;'; put 'put ''IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg''@;'; put 'put ''dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3Vy''@;'; put 'put ''YWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX0F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW19BXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+dGhpcy5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+dGhpcy5vbkFm''@;'; put 'put ''dGVySW5pdCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNl''@;'; put 'put ''dHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVycyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPURqKGEpKTtjb25zdCBfPXd5KGc3''@;'; put 'put ''KGwpKTtEbihsLFQ9Pntjb25zdFtXLGllLGdlLHdlXT1fKFQpO2ZvcihsZXQgRWU9VztFZTw9Z2U7RWUrPTEpZm9yKGxldCBaZT1pZTtaZTw9d2U7WmUrPTEpRG4oZCxvdD0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChFZSxaZSxoLHlPZShvdCkpfSl9KSx0aGlzLmhvdC52''@;'; put 'put ''aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IGQ9d3koZzcobCkpLGg9W107cmV0dXJuIERuKGwsZj0+e2NvbnN0W18sVCxXLGllXT1kKGYpO2ZvcihsZXQgZ2U9XztnZTw9VztnZSs9MSlmb3IobGV0''@;'; put 'put ''IHdlPVQ7d2U8PWllO3dlKz0xKURuKHRoaXMuc2F2ZWRCb3JkZXJzLEVlPT57RWUucm93PT09Z2UmJkVlLmNvbD09PXdlJiZoLnB1c2goTnkoRWUpKX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KERuKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFy''@;'; put 'put ''Qm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGws''@;'; put 'put ''YSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8''@;'; put 'put ''fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSxfPXRoaXMuaG90LmNvdW50Q29s''@;'; put 'put ''cygpO2lmKGw+PWZ8fGE+PV8pcmV0dXJuO2xldCBUPUlqKGwsYSk7ZCYmKFQ9ZnVuY3Rpb24gbU9lKGMsbCl7cmV0dXJuIGJsKGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxibChsLCJ0b3AiKSYmS2kobC50b3ApJiYobC50b3A/KHVzKGwudG9wKXx8KGwudG9w''@;'; put 'put ''PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hpZGU6ITB9LGMudG9wPWwudG9wKSksYmwobCwiYm90dG9tIikmJktpKGwuYm90dG9tKSYmKGwuYm90dG9tPyh1cyhsLmJvdHRvbSl8fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRv''@;'; put 'put ''bT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRvbSkpLGJsKGwsInN0YXJ0IikmJktpKGwuc3RhcnQpJiYobC5zdGFydD8odXMobC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hp''@;'; put 'put ''ZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLGJsKGwsImVuZCIpJiZLaShsLmVuZCkmJihsLmVuZD8odXMobC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlkZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShULGQpLERuKHRoaXMuaG90LnNl''@;'; put 'put ''bGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxXPT57aWYoVC5pZD09PVcuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oVy5zZXR0aW5ncyxkKSxULmlkPVcuc2V0dGluZ3MuaWQsVC50b3A9Vy5zZXR0aW5ncy50b3AsVC5ib3R0b209Vy5zZXR0aW5ncy5ib3R0b20s''@;'; put 'put ''VC5zdGFydD1XLnNldHRpbmdzLnN0YXJ0LFQuZW5kPVcuc2V0dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsTnkoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQsaCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGws''@;'; put 'put ''YSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO3ZvKGwuZnJvbS5yb3csZCxmPT57dm8obC5mcm9tLmNvbCxoLF89Pntjb25zdCBUPUlqKGYsXyk7bGV0IFc9MDtmPT09''@;'; put 'put ''bC5mcm9tLnJvdyYmYmwoYSwidG9wIikmJihXKz0xLFQudG9wPWEudG9wKSxmPT09bC50by5yb3cmJmJsKGEsImJvdHRvbSIpJiYoVys9MSxULmJvdHRvbT1hLmJvdHRvbSksXz09PWwuZnJvbS5jb2wmJmJsKGEsInN0YXJ0IikmJihXKz0xLFQuc3RhcnQ9YS5zdGFydCksXz09PWwudG8uY29s''@;'; put 'put ''JiZibChhLCJlbmQiKSYmKFcrPTEsVC5lbmQ9YS5lbmQpLFc+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYsXywiYm9yZGVycyIsTnkoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQpKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9bmllKGwsYSk7dGhpcy5z''@;'; put 'put ''cGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/RGooZik6SWoobCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYs''@;'; put 'put ''ZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixOeShmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhp''@;'; put 'put ''cy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixOeShmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe0RuKGwsaD0+e2xldHtzdGFydDpmLGVuZDpffT1oO2lmKGYucm93PT09Xy5yb3cmJmYuY29sPT09Xy5jb2wpIm5vQm9yZGVy''@;'; put 'put ''cyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5zZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6dm8oZi5jb2wsXy5jb2wsVD0+e3ZvKGYucm93LF8ucm93LFc9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMo''@;'; put 'put ''VyxUKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOnZvKGYuY29sLF8uY29sLFQ9Pnt0aGlzLnNldEJvcmRlcihmLnJvdyxULGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6dm8oZi5jb2wsXy5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKF8ucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOnZvKGYu''@;'; put 'put ''cm93LF8ucm93LFQ9Pnt0aGlzLnNldEJvcmRlcihULGYuY29sLGEsZCl9KTticmVhaztjYXNlImVuZCI6dm8oZi5yb3csXy5yb3csVD0+e3RoaXMuc2V0Qm9yZGVyKFQsXy5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMobCl7RG4obCxhPT57Y29uc3QgZD1EaihhKTthLnJhbmdl''@;'; put 'put ''P3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIEFsKFth''@;'; put 'put ''LGQsaCxmXSwoVCxXKT0+e2xldCBpZT1UO3JldHVybiBXJiZXLmhpZGUmJihpZSs9MSksaWV9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPWNzKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdz''@;'; put 'put ''LmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe0RuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9''@;'; put 'put ''PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe0RuKHRoaXMu''@;'; put 'put ''c2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9Y3ModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlz''@;'; put 'put ''LnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpEbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVy''@;'; put 'put ''biB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIERuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0''@;'; put 'put ''dGluZ3MuaWQpcmV0dXJuIGRzKGYuaW5zdGFuY2VCb3JkZXJzLF89PntfLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJl''@;'; put 'put ''bW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITApOkRuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxfPT57aWYobC5pZD09PV8uc2V0dGluZ3MuaWQpcmV0dXJuIF8udmlzdWFsQ2VsbFJhbmdlPWEsXy5jb21taXQoKSxkJiZkcyhfLmluc3RhbmNl''@;'; put 'put ''Qm9yZGVycyxUPT57VC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbX0FdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9eXUobCk7dGhpcy5jaGVja1NldHRpbmdzQ29o''@;'; put 'put ''ZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1''@;'; put 'put ''bmN0aW9uIHZPZShjKXtyZXR1cm4gYy5zb21lKGw9PktpKGwubGVmdCl8fEtpKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiBfT2UoYyl7cmV0dXJuIGMuc29tZShsPT5LaShsLnN0YXJ0KXx8S2kobC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0''@;'; put 'put ''IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3Bl''@;'; put 'put ''cnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW19BXSYmbC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7''@;'; put 'put ''a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLVil9LGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbd09lKHRoaXMpLENPZSh0aGlzKSxTT2UodGhpcyksTU9lKHRo''@;'; put 'put ''aXMpLHhPZSh0aGlzKV19fSl9b25BZnRlckluaXQoKXt0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgcmllPSJkcmFnVG9TY3JvbGwiO2NsYXNzIExPZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBy''@;'; put 'put ''aWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJvdW5kYXJpZXM9bnVsbCx0aGlzLmNhbGxiYWNrPW51bGwsdGhpcy5saXN0ZW5pbmc9ITF9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3JpZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1v''@;'; put 'put ''dXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQ''@;'; put 'put ''bHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcyhsKXt0aGlzLmJvdW5kYXJpZXM9bH1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/''@;'; put 'put ''aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91''@;'; put 'put ''bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgpfWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRo''@;'; put 'put ''aXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50''@;'; put 'put ''aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQpKSxhPWV5KGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfXNldHVwTGlzdGVuaW5n''@;'; put 'put ''KGwpe2lmKFVwKGwpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuaG9sZGVyO2EhPT10aGlzLmhvdC5yb290V2luZG93JiYodGhpcy5zZXRCb3VuZGFyaWVzKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuc2V0Q2FsbGJhY2soKGQsaCk9PntkPDA/YS5z''@;'; put 'put ''Y3JvbGxMZWZ0LT01MDpkPjAmJihhLnNjcm9sbExlZnQrPTUwKSxoPDA/YS5zY3JvbGxUb3AtPTIwOmg+MCYmKGEuc2Nyb2xsVG9wKz0yMCl9KSx0aGlzLmxpc3RlbigpKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9''@;'; put 'put ''ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lz''@;'; put 'put ''dGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IExqPSJkcm9wZG93bk1lbnUiLFJqPSJj''@;'; put 'put ''aGFuZ2VUeXBlIjtsZXQgT09lPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTGp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29s''@;'; put 'put ''dW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltEeSxJeSxncyxSeSxncyxuQSxncyxMeSxncyx2ZF19Y29uc3RydWN0b3IoYSl7c3VwZXIoYSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMpLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5ldyBOcmUodGhpcy5o''@;'; put 'put ''b3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChkLGgpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbTGpdfWVu''@;'; put 'put ''YWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgenJlKHRoaXMuaG90LGMuREVGQVVMVF9JVEVNUyk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0xqXSxoPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJ''@;'; put 'put ''dGVtcyhkKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhkLmNhbGxiYWNrKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeSgoKT0+e3Ro''@;'; put 'put ''aXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixoKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoaC5pdGVtcyk7Y29uc3QgZj10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhkKTt0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95''@;'; put 'put ''KCksdGhpcy5tZW51PW5ldyB5aih0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodERyb3Bkb3duTWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmQudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVu''@;'; put 'put ''dVNldEl0ZW1zIixmKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGYpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4o''@;'; put 'put ''KSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIF89YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheShfKSxXPTA7''@;'; put 'put ''VzxfO1crKylUW1ddPWFyZ3VtZW50c1tXXTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEsLi4uVCl9KSxEbihmLF89PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChfLmtleSxfKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVu''@;'; put 'put ''YWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVu''@;'; put 'put ''ZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixhPT50aGlzLm9uVGFibGVDbGljayhhKSl9b3BlbihhKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLGEud2lkdGgmJnRoaXMubWVudS5zZXRPZmZzZXQoImxlZnQiLGEud2lkdGgpLHRoaXMubWVudS5zZXRQb3NpdGlvbihhKSl9''@;'; put 'put ''Y2xvc2UoKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGEpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRl''@;'; put 'put ''KGEsLi4uaCl9c2V0TGlzdGVuaW5nKCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGE/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0''@;'; put 'put ''ZW4oKSl9b25UYWJsZUNsaWNrKGEpe2lmKGEuc3RvcFByb3BhZ2F0aW9uKCksQm8oYS50YXJnZXQsUmopJiYhdGhpcy5tZW51LmlzT3BlbmVkKCkpe2xldCBkPTAsaD0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7Y29uc3R7''@;'; put 'put ''ZnJhbWVFbGVtZW50Ol99PXRoaXMuaG90LnJvb3RXaW5kb3cse3RvcDpULGxlZnQ6V309Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPVQsaD1XfWNvbnN0IGY9YS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0OmYubGVmdCtoLHRvcDpmLnRvcCthLnRh''@;'; put 'put ''cmdldC5vZmZzZXRIZWlnaHQrMytkLHdpZHRoOmYud2lkdGgsaGVpZ2h0OmYuaGVpZ2h0fSl9fW9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtjb25zdCBoPWQucGFyZW50Tm9kZTtpZighaClyZXR1cm47Y29uc3QgZj1oLnBhcmVudE5vZGUuY2hpbGROb2RlcyxfPUFycmF5LnByb3RvdHlwZS5p''@;'; put 'put ''bmRleE9mLmNhbGwoZixoKTtpZihhPDB8fF8hPT1mLmxlbmd0aC0xKXJldHVybjtjb25zdCBUPWQucXVlcnlTZWxlY3RvcihgLiR7Ump9YCk7aWYodGhpcy5lbmFibGVkJiZUKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKFQmJlQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChU''@;'; put 'put ''KSk7Y29uc3QgVz10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc05hbWU9UmosVy50eXBlPSJidXR0b24iLFcub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxkLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKFcsZC5maXJzdENoaWxkLmZpcnN0''@;'; put 'put ''Q2hpbGQpfW9uTWVudUJlZm9yZU9wZW4oKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJDbG9zZSgpe3RoaXMu''@;'; put 'put ''aG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19cmV0dXJuIGMuU0VQQVJBVE9SPXtuYW1lOmdzfSxjfSko''@;'; put 'put ''KTtjbGFzcyBPantzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9wbGFpbiIsZmlsZUV4dGVuc2lvbjoidHh0IixmaWxlbmFtZToiSGFuZHNvbnRhYmxlIFtZWVlZXS1bTU1dLVtERF0iLGVuY29kaW5nOiJ1dGYtOCIsYm9tOiExLGNvbHVtbkhlYWRl''@;'; put 'put ''cnM6ITEscm93SGVhZGVyczohMSxleHBvcnRIaWRkZW5Db2x1bW5zOiExLGV4cG9ydEhpZGRlblJvd3M6ITEscmFuZ2U6W119fWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhUHJvdmlkZXI9bCx0aGlzLm9wdGlvbnM9dGhpcy5fbWVyZ2VPcHRpb25zKGEpLHRoaXMuZGF0YVByb3ZpZGVyLnNl''@;'; put 'put ''dE9wdGlvbnModGhpcy5vcHRpb25zKX1fbWVyZ2VPcHRpb25zKGwpe2xldCBhPVd1KHRoaXMuY29uc3RydWN0b3IuREVGQVVMVF9PUFRJT05TKTtjb25zdCBkPW5ldyBEYXRlO3JldHVybiBhPUtsKFd1KE9qLkRFRkFVTFRfT1BUSU9OUyksYSksYT1LbChhLGwpLGEuZmlsZW5hbWU9Y04oYS5m''@;'; put 'put ''aWxlbmFtZSx7WVlZWTpkLmdldEZ1bGxZZWFyKCksTU06YCR7ZC5nZXRNb250aCgpKzF9YC5wYWRTdGFydCgyLCIwIiksREQ6YCR7ZC5nZXREYXRlKCl9YC5wYWRTdGFydCgyLCIwIil9KSxhfX1jb25zdCBIT2U9T2osTk9lPVN0cmluZy5mcm9tQ2hhckNvZGUoMTMpLFZPZT1TdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKDM0KSxCT2U9U3RyaW5nLmZyb21DaGFyQ29kZSgxMCksUGo9e2NzdjpjbGFzcyBqT2UgZXh0ZW5kcyBIT2V7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxjb2x1bW5EZWxp''@;'; put 'put ''bWl0ZXI6IiwiLHJvd0RlbGltaXRlcjoiXHJcbiJ9fWV4cG9ydCgpe2NvbnN0IGw9dGhpcy5vcHRpb25zLGE9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCBkPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25zdCBoPWQubGVuZ3RoPjAsZj10aGlzLmRhdGFQ''@;'; put 'put ''cm92aWRlci5nZXRSb3dIZWFkZXJzKCksXz1mLmxlbmd0aD4wO2xldCBUPWwuYm9tP1N0cmluZy5mcm9tQ2hhckNvZGUoNjUyNzkpOiIiO3JldHVybiBoJiYoZD1jcyhkLFc9PnRoaXMuX2VzY2FwZUNlbGwoVywhMCkpLF8mJihUKz1sLmNvbHVtbkRlbGltaXRlciksVCs9ZC5qb2luKGwuY29s''@;'; put 'put ''dW1uRGVsaW1pdGVyKSxUKz1sLnJvd0RlbGltaXRlciksRG4oYSwoVyxpZSk9PntpZT4wJiYoVCs9bC5yb3dEZWxpbWl0ZXIpLF8mJihUKz10aGlzLl9lc2NhcGVDZWxsKGZbaWVdKStsLmNvbHVtbkRlbGltaXRlciksVCs9Vy5tYXAoZ2U9PnRoaXMuX2VzY2FwZUNlbGwoZ2UpKS5qb2luKGwu''@;'; put 'put ''Y29sdW1uRGVsaW1pdGVyKX0pLFR9X2VzY2FwZUNlbGwobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPV9sKGwpO3JldHVybiIiIT09ZCYmKGF8fGQuaW5kZXhPZihOT2UpPj0wfHxkLmluZGV4T2YoVk9lKT49MHx8ZC5p''@;'; put 'put ''bmRleE9mKEJPZSk+PTB8fGQuaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihkPWQucmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGQ9YCIke2R9ImApLGR9fX07Y2xhc3MgR09lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0''@;'; put 'put ''dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l''@;'; put 'put ''bnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3du''@;'; put 'put ''bG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksXz10aGlzLl9jcmVh''@;'; put 'put ''dGVCbG9iKGYpLFQ9aC5VUkx8fGgud2Via2l0VVJMLFc9ZC5jcmVhdGVFbGVtZW50KCJhIiksaWU9YCR7Zi5vcHRpb25zLmZpbGVuYW1lfS4ke2Yub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09Vy5kb3dubG9hZCl7Y29uc3QgZ2U9VC5jcmVhdGVPYmplY3RVUkwoXyk7Vy5z''@;'; put 'put ''dHlsZS5kaXNwbGF5PSJub25lIixXLnNldEF0dHJpYnV0ZSgiaHJlZiIsZ2UpLFcuc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsaWUpLGQuYm9keS5hcHBlbmRDaGlsZChXKSxXLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChXKSxzZXRU''@;'; put 'put ''aW1lb3V0KCgpPT57VC5yZXZva2VPYmplY3RVUkwoZ2UpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKF8saWUpfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighUGpbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIFpPZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFBqW2NdP25ldyBQ''@;'; put 'put ''altjXShsLGEpOm51bGx9KGwsbmV3IGNsYXNzIFBPZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvdD1sLHRoaXMub3B0aW9ucz17fX1zZXRPcHRpb25zKGwpe3RoaXMub3B0aW9ucz1sfWdldERhdGEoKXtjb25zdHtzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmQsZW5kQ29sOmh9PXRoaXMu''@;'; put 'put ''X2dldERhdGFSYW5nZSgpLGY9dGhpcy5vcHRpb25zLF89W107cmV0dXJuIHZvKGwsZCxUPT57Y29uc3QgVz1bXTshZi5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlzLl9pc0hpZGRlblJvdyhUKXx8KHZvKGEsaCxpZT0+eyFmLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1u''@;'; put 'put ''KGllKXx8Vy5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwoVCxpZSkpfSksXy5wdXNoKFcpKX0pLF99Z2V0Um93SGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLnJvd0hlYWRlcnMpe2NvbnN0e3N0YXJ0Um93OmEsZW5kUm93OmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9''@;'; put 'put ''dGhpcy5ob3QuZ2V0Um93SGVhZGVyKCk7dm8oYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1nZXRDb2x1bW5IZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMuY29sdW1u''@;'; put 'put ''SGVhZGVycyl7Y29uc3R7c3RhcnRDb2w6YSxlbmRDb2w6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKTt2byhhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4oZil8fGwucHVzaChoW2Zd''@;'; put 'put ''KX0pfXJldHVybiBsfV9nZXREYXRhUmFuZ2UoKXtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpLTEsYT10aGlzLmhvdC5jb3VudFJvd3MoKS0xO2xldFtkPTAsaD0wLGY9YSxfPWxdPXRoaXMub3B0aW9ucy5yYW5nZTtyZXR1cm4gZD1NYXRoLm1heChkLDApLGg9TWF0aC5tYXgoaCwwKSxm''@;'; put 'put ''PU1hdGgubWluKGYsYSksXz1NYXRoLm1pbihfLGwpLHtzdGFydFJvdzpkLHN0YXJ0Q29sOmgsZW5kUm93OmYsZW5kQ29sOl99fV9pc0hpZGRlblJvdyhsKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9X2lzSGlkZGVu''@;'; put 'put ''Q29sdW1uKGwpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKX19KHRoaXMuaG90KSxhKX1fY3JlYXRlQmxvYihsKXtsZXQgYT1udWxsO3JldHVybiB0eXBlb2YgQmxvYjwidSImJihhPW5ldyBCbG9iKFtsLmV4''@;'; put 'put ''cG9ydCgpXSx7dHlwZTpgJHtsLm9wdGlvbnMubWltZVR5cGV9O2NoYXJzZXQ9JHtsLm9wdGlvbnMuZW5jb2Rpbmd9YH0pKSxhfX1jbGFzcyBpaWV7Y29uc3RydWN0b3IobCxhKXtsZXR7aWQ6ZCxzdGF0ZWxlc3M6aD0hMH09YTt0aGlzLmhvdD1sLHRoaXMuaWQ9ZCx0aGlzLmVsZW1lbnRzPVtd''@;'; put 'put ''LHRoaXMuaGlkZGVuPSExLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyBFayl9cmVzZXQoKXtEbih0aGlzLmVsZW1lbnRzLGw9''@;'; put 'put ''PmwucmVzZXQoKSl9aGlkZSgpe3RoaXMuaGlkZGVuPSEwfXNob3coKXt0aGlzLmhpZGRlbj0hMX1pc0hpZGRlbigpe3JldHVybiBudWxsPT09dGhpcy5ob3R8fHRoaXMuaGlkZGVufXJlc3RvcmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUuZ2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KGwpKX1zZXRTdGF0ZSgpe3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIHNldHRpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9c2F2ZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5nZXRTdGF0ZSgpKX1nZXRTdGF0ZSgp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiVGhlIHN0YXRlIGdhdGhlcmluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnN0YXRlSWQpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksRG4odGhpcy5lbGVt''@;'; put 'put ''ZW50cyxsPT5sLmRlc3Ryb3koKSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLmhvdD1udWxsfX1UYShpaWUsTzApO2NvbnN0IGJBPWlpZSxWeT17fTtmdW5jdGlvbiBKcChjLGwpe2lmKCFWeVtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIg''@;'; put 'put ''ZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpkfT1WeVtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShmLm1ldGEuaW5zdGFu''@;'; put 'put ''Y2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gT2coYyl7aWYoIVZ5W2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gVnlbY10uZGVzY3JpcHRvcn1mdW5jdGlvbiBYbChjLGwsYSl7YS5rZXk9YyxWeVtjXT17Y29u''@;'; put 'put ''ZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBXYz0ibm9uZSI7WGwoV2MsZnVuY3Rpb24gJE9lKCl7cmV0dXJuITB9LHtuYW1lOkxrLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IEJ5PSJlbXB0eSI7WGwoQnksZnVuY3Rpb24gcU9lKGMpe3JldHVybiBwYyhjLnZh''@;'; put 'put ''bHVlKX0se25hbWU6bEIsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgeUE9Im5vdF9lbXB0eSI7WGwoeUEsZnVuY3Rpb24gS09lKGMsbCl7cmV0dXJuIUpwKEJ5LGwpKGMpfSx7bmFtZTpjQixpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBqeT0i''@;'; put 'put ''ZXEiO1hsKGp5LGZ1bmN0aW9uIFhPZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PV9sKGEpfSx7bmFtZTp1QixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB3QT0ibmVxIjtYbCh3QSxmdW5j''@;'; put 'put ''dGlvbiBKT2UoYyxsKXtyZXR1cm4hSnAoanksbCkoYyl9LHtuYW1lOmRCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLFhsKCJndCIsZnVuY3Rpb24gUU9lKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTAp''@;'; put 'put ''KSxjLnZhbHVlPmR9LHtuYW1lOm1CLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLFhsKCJndGUiLGZ1bmN0aW9uIGVQZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6''@;'; put 'put ''dkIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksWGwoImx0IixmdW5jdGlvbiB0UGUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6X0IsaW5wdXRzQ291bnQ6MSxzaG93''@;'; put 'put ''T3BlcmF0b3JzOiEwfSksWGwoImx0ZSIsZnVuY3Rpb24gblBlKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpiQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25z''@;'; put 'put ''dCBGaj0iZGF0ZV9hZnRlciI7WGwoRmosZnVuY3Rpb24gclBlKGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUtvKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9''@;'; put 'put ''LHtuYW1lOkNCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEhqPSJkYXRlX2JlZm9yZSI7WGwoSGosZnVuY3Rpb24gaVBlKGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1LbyhjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUtvKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3Jl''@;'; put 'put ''dHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9LHtuYW1lOlNCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IENBPSJiZXR3ZWVuIjtYbChDQSxmdW5jdGlvbiBvUGUoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVyaWMi''@;'; put 'put ''PT09Yy5tZXRhLnR5cGUpe2NvbnN0IF89cGFyc2VGbG9hdChoLDEwKSxUPXBhcnNlRmxvYXQoZiwxMCk7aD1NYXRoLm1pbihfLFQpLGY9TWF0aC5tYXgoXyxUKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCBfPUpwKEhqLFtmXSksVD1KcChGaixbaF0pO3JldHVybiBfKGMp''@;'; put 'put ''JiZUKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTp5QixpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBjaWU9Im5vdF9iZXR3ZWVuIjtYbChjaWUsZnVuY3Rpb24gc1BlKGMsbCl7cmV0dXJuIUpwKENBLGwpKGMpfSx7bmFtZTp3QixpbnB1dHND''@;'; put 'put ''b3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCB1aWU9ImJlZ2luc193aXRoIjtYbCh1aWUsZnVuY3Rpb24gYVBlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIF9sKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgoX2woYSkpfSx7bmFtZTpoQixp''@;'; put 'put ''bnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxYbCgiZW5kc193aXRoIixmdW5jdGlvbiBsUGUoYyxsKXtsZXRbYV09bDtyZXR1cm4gX2woYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgoX2woYSkpfSx7bmFtZTpmQixpbnB1dHNDb3VudDox''@;'; put 'put ''LHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBOaj0iY29udGFpbnMiO1hsKE5qLGZ1bmN0aW9uIGNQZShjLGwpe2xldFthXT1sO3JldHVybiBfbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKF9sKGEpKT49MH0se25hbWU6cEIsaW5wdXRzQ291bnQ6''@;'; put 'put ''MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgaGllPSJub3RfY29udGFpbnMiO1hsKGhpZSxmdW5jdGlvbiB1UGUoYyxsKXtyZXR1cm4hSnAoTmosbCkoYyl9LHtuYW1lOmdCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGZpZT0iZGF0ZV90b21vcnJvdyI7WGwoZmll''@;'; put 'put ''LGZ1bmN0aW9uIGRQZShjKXtjb25zdCBsPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKEtvKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTp4QixpbnB1dHNDb3VudDowfSk7Y29uc3QgcGll''@;'; put 'put ''PSJkYXRlX3RvZGF5IjtYbChwaWUsZnVuY3Rpb24gaFBlKGMpe2NvbnN0IGw9S28oYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoS28oKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpNQixpbnB1dHNDb3VudDowfSk7Y29uc3QgZ2ll''@;'; put 'put ''PSJkYXRlX3llc3RlcmRheSI7WGwoZ2llLGZ1bmN0aW9uIGZQZShjKXtjb25zdCBsPUtvKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKEtvKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOkVCLGlu''@;'; put 'put ''cHV0c0NvdW50OjB9KTtjb25zdCB2aWU9e251bWVyaWM6W1djLGdzLEJ5LHlBLGdzLGp5LHdBLGdzLCJndCIsImd0ZSIsImx0IiwibHRlIixDQSxjaWVdLHRleHQ6W1djLGdzLEJ5LHlBLGdzLGp5LHdBLGdzLHVpZSwiZW5kc193aXRoIixncyxOaixoaWVdLGRhdGU6W1djLGdzLEJ5LHlBLGdz''@;'; put 'put ''LGp5LHdBLGdzLEhqLEZqLENBLGdzLGZpZSxwaWUsZ2llXX0sVmo9ImJ1aWx0IixCaj0iYnVpbGRpbmciLF9pZT1bImNsaWNrIiwiaW5wdXQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImZvY3VzIiwiYmx1ciIsImNoYW5nZSJdO2NsYXNzIFNBe3N0YXRpYyBnZXQgREVGQVVMVFMo''@;'; put 'put ''KXtyZXR1cm4gV3Uoe2NsYXNzTmFtZToiIix2YWx1ZToiIix0YWdOYW1lOiJkaXYiLGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgbGwodGhpcyksdGhpcy5vcHRpb25zPUtsKFNBLkRFRkFVTFRTLGEpLHRo''@;'; put 'put ''aXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSksdGhpcy5idWlsZFN0YXRlPW51bGx9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRhdGUoKX1n''@;'; put 'put ''ZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09Qmo/dGhpcy5fZWxlbWVudDp0aGlzLmJ1aWxkU3RhdGU9PT1Waj8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRlPUJqLHRo''@;'; put 'put ''aXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9VmosdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1Wan10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKCR1KT90aGlzLmhvdC5nZXRUcmFu''@;'; put 'put ''c2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1CaiksdGhpcy5vcHRp''@;'; put 'put ''b25zLmNsYXNzTmFtZSYmcGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKURuKHRoaXMub3B0aW9ucy5jaGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2UgaWYodGhpcy5v''@;'; put 'put ''cHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7ZHModGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09''@;'; put 'put ''aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksRG4oX2llLGQ9PmwoYSxkKSl9ZWxzZSBEbihfaWUsYT0+bCh0aGlzLl9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhp''@;'; put 'put ''cy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5o''@;'; put 'put ''b3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fVRhKFNBLE8wKTtjb25zdCBRcD1TQSxNQT1uZXcgV2Vha01hcDtjbGFzcyBqaiBleHRlbmRzIFFwe3N0''@;'; put 'put ''YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gV3Uoe3BsYWNlaG9sZGVyOiIiLHR5cGU6InRleHQiLHRhZ05hbWU6ImlucHV0In0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChqai5ERUZBVUxUUyxhKSksTUEuc2V0KHRoaXMse30pLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVy''@;'; put 'put ''SG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT50aGlzLm9uQ2xpY2soKSksdGhpcy5hZGRMb2NhbEhvb2soImtleXVwIixsPT50aGlzLm9uS2V5dXAobCkpfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPU1BLmdldCh0aGlzKSxhPXRoaXMuaG90LnJvb3REb2N1bWVu''@;'; put 'put ''dC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmlucHV0PXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCxwaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxwaShhLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe2lmKCF0''@;'; put 'put ''aGlzLmlzQnVpbHQoKSlyZXR1cm47Y29uc3QgbD1NQS5nZXQodGhpcykuaW5wdXQ7bC50eXBlPXRoaXMub3B0aW9ucy50eXBlLGwucGxhY2Vob2xkZXI9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlciksbC52YWx1ZT10aGlzLnRyYW5zbGF0ZUlmUG9z''@;'; put 'put ''c2libGUodGhpcy5vcHRpb25zLnZhbHVlKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZNQS5nZXQodGhpcykuaW5wdXQuZm9jdXMoKX1vbkNsaWNrKCl7fW9uS2V5dXAobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwudGFyZ2V0LnZhbHVlfX1jb25zdCBJNz1qaix4QT1uZXcgV2Vha01hcDtjbGFz''@;'; put 'put ''cyB6aiBleHRlbmRzIFFwe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gV3Uoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0OiExfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKHpqLkRFRkFVTFRTLGEpKSx4QS5zZXQodGhpcyx7fSksdGhpcy5tZW51PW51bGwsdGhpcy5p''@;'; put 'put ''dGVtcz1bXSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+dGhpcy5vbkNsaWNrKCkpfXNldEl0ZW1zKGwpe3RoaXMuaXRlbXM9dGhpcy50cmFuc2xhdGVOYW1lcyhsKSx0aGlzLm1lbnUmJnRoaXMubWVudS5zZXRNZW51''@;'; put 'put ''SXRlbXModGhpcy5pdGVtcyl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIERuKGwsYT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgpLHRoaXMubWVudT1uZXcgeWoodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRTZWxlY3RV''@;'; put 'put ''SSBodEZpbHRlcnNDb25kaXRpb25zTWVudSIsa2VlcEluVmlld3BvcnQ6ITEsc3RhbmRhbG9uZTohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLm1lbnVDb250YWluZXJ9KSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKHRoaXMuaXRlbXMpO2NvbnN0IGw9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05h''@;'; put 'put ''bWU6Imh0VUlTZWxlY3RDYXB0aW9uIn0pLGE9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3REcm9wZG93biJ9KSxkPXhBLmdldCh0aGlzKTtkLmNhcHRpb249bCxkLmNhcHRpb25FbGVtZW50PWwuZWxlbWVudCxkLmRyb3Bkb3duPWEsRG4oW2wsYV0saD0+dGhpcy5fZWxl''@;'; put 'put ''bWVudC5hcHBlbmRDaGlsZChoLmVsZW1lbnQpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGg9PnRoaXMub25NZW51U2VsZWN0KGgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vbk1lbnVDbG9zZWQoKSksdGhpcy51cGRhdGUoKX11cGRh''@;'; put 'put ''dGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOnRoaXMubWVudS5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShMaykseEEuZ2V0KHRoaXMpLmNhcHRpb25FbGVtZW50LnRleHRDb250ZW50PWwsc3Vw''@;'; put 'put ''ZXIudXBkYXRlKCl9b3Blbk9wdGlvbnMoKXtjb25zdCBsPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLHRoaXMubWVudS5zZXRQb3NpdGlvbih7bGVmdDp0aGlzLmhvdC5pc0x0cigpP2wubGVmdC01OmwubGVmdC0zMSx0''@;'; put 'put ''b3A6bC50b3AtMSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pKX1jbG9zZU9wdGlvbnMoKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfW9uTWVudVNlbGVjdChsKXtsLm5hbWUhPT1ncyYmKHRoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfW9uTWVudUNsb3NlZCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfW9uQ2xpY2soKXt0aGlzLm9wZW5PcHRpb25zKCl9ZGVzdHJveSgpe3RoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51''@;'; put 'put ''PW51bGwpO2NvbnN0e2NhcHRpb246bCxkcm9wZG93bjphfT14QS5nZXQodGhpcyk7bCYmbC5kZXN0cm95KCksYSYmYS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBiaWU9emosVWo9Y2xhc3MgdlBlIGV4dGVuZHMgYkF7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlk''@;'; put 'put ''LHN0YXRlbGVzczohMX0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBiaWUodGhpcy5ob3Qse21lbnVDb250YWluZXI6YS5tZW51Q29udGFpbmVyfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhp''@;'; put 'put ''cy5ob3Qse3BsYWNlaG9sZGVyOlBCfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3BsYWNlaG9sZGVyOkZCfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soInNlbGVjdCIsbD0+''@;'; put 'put ''dGhpcy5vbkNvbmRpdGlvblNlbGVjdChsKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2VkKCkpLERuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGw9PntsLmFkZExvY2FsSG9vaygia2V5ZG93biIsYT0+''@;'; put 'put ''dGhpcy5vbklucHV0S2V5RG93bihhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9V3UobC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aCh5bCkmJihhLm5hbWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNl''@;'; put 'put ''bGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxEbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtjb25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHxzZXRUaW1l''@;'; put 'put ''b3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmdldFZhbHVlKCl8fE9nKFdjKSxhPVtdO3JldHVybiBEbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFs''@;'; put 'put ''dWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPU9nKGw/bC5uYW1lOldjKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fERuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0''@;'; put 'put ''VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIGJpZSlbMF19Z2V0SW5wdXRFbGVtZW50KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpW2xdfWdldElucHV0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIEk3KX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21t''@;'; put 'put ''YW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSxkLGgsZixfKT0+e3BpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiIpLHRoaXMuYWRkU2VwYXJhdG9yJiZwaShhLnBhcmVudE5vZGUsImJvcmRlciIp''@;'; put 'put ''O2NvbnN0IFQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShULCJodEZpbHRlcnNNZW51TGFiZWwiKSxULnRleHRDb250ZW50PV8sYS5hcHBlbmRDaGlsZChUKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxEbih0''@;'; put 'put ''aGlzLmVsZW1lbnRzLFc9PmEuYXBwZW5kQ2hpbGQoVy5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO2xldCBhPVtPZyhXYyldO2lmKG51bGwhPT1sKXtjb25zdHt2aXN1YWxJbmRleDpkfT1sO2E9''@;'; put 'put ''ZnVuY3Rpb24gbVBlKGMpe2NvbnN0IGw9W107bGV0IGE9YztyZXR1cm4gdmllW2FdfHwoYT0idGV4dCIpLERuKHZpZVthXSxkPT57bGV0IGg7aD1kPT09Z3M/e25hbWU6Z3N9Old1KE9nKGQpKSxsLnB1c2goaCl9KSxsfSh0aGlzLmhvdC5nZXREYXRhVHlwZSgwLGQsdGhpcy5ob3QuY291bnRS''@;'; put 'put ''b3dzKCksZCkpfURuKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGQ9PmQuaGlkZSgpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyhhKSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGFbMF0pfW9uQ29uZGl0aW9uU2VsZWN0KGwpe0RuKHRo''@;'; put 'put ''aXMuZ2V0SW5wdXRFbGVtZW50cygpLChhLGQpPT57YVtsLmlucHV0c0NvdW50PmQ/InNob3ciOiJoaWRlIl0oKSwwPT09ZCYmc2V0VGltZW91dCgoKT0+YS5mb2N1cygpLDEwKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKX1vblNlbGVjdFVJQ2xvc2VkKCl7dGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlckNsb3NlIil9b25JbnB1dEtleURvd24obCl7bzcobC5rZXlDb2RlLCJFTlRFUiIpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpLHYyKGwpKTpvNyhsLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSx2MihsKSl9fSx6eT17''@;'; put 'put ''fTtmdW5jdGlvbiBiUGUoYyl7cmV0dXJuIHp5W2NdLm5hbWV9ZnVuY3Rpb24gWmooYyxsLGEpe3p5W2NdPXtuYW1lOmwsZnVuYzphfX1jb25zdCBlND0iY29uanVuY3Rpb24iO1pqKGU0LFRCLGZ1bmN0aW9uIHdQZShjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9KTtjb25zdCBF''@;'; put 'put ''QT0iZGlzanVuY3Rpb24iO1pqKEVBLFJrLGZ1bmN0aW9uIFNQZShjLGwpe3JldHVybiBjLnNvbWUoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IFlqPSJkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7WmooWWosUmssZnVuY3Rpb24geFBlKGMsbCl7aWYoYy5sZW5ndGg8Myl0aHJvdyBFcnJv''@;'; put 'put ''cigiT3BlcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBsZXNzIHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gYy5zbGljZSgwLGMubGVuZ3RoLTEpLnNvbWUoYT0+YS5mdW5jKGwpKSYmY1tjLmxlbmd0aC0xXS5mdW5jKGwpfSk7Y29uc3Qga0E9bmV3IFdlYWtNYXA7Y2xhc3MgV2ogZXh0''@;'; put 'put ''ZW5kcyBRcHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIFd1KHt0eXBlOiJyYWRpbyIsdGFnTmFtZToiaW5wdXQiLGNsYXNzTmFtZToiaHRVSVJhZGlvIixsYWJlbDp7fX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxLbChXai5ERUZBVUxUUyxhKSksa0Euc2V0KHRoaXMse30pfWJ1''@;'; put 'put ''aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPWtBLmdldCh0aGlzKTtsLmlucHV0PXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZDtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpO2EudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxl''@;'; put 'put ''KHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCksYS5odG1sRm9yPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwuaHRtbEZvciksbC5sYWJlbD1hLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhp''@;'; put 'put ''cy5pc0J1aWx0KCkpcmV0dXJuO2NvbnN0IGw9a0EuZ2V0KHRoaXMpO2wuaW5wdXQuY2hlY2tlZD10aGlzLm9wdGlvbnMuY2hlY2tlZCxsLmxhYmVsLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpfWlzQ2hlY2tlZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLm9wdGlvbnMuY2hlY2tlZH1zZXRDaGVja2VkKCl7dGhpcy5vcHRpb25zLmNoZWNrZWQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSx0aGlzLnVwZGF0ZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJmtBLmdl''@;'; put 'put ''dCh0aGlzKS5pbnB1dC5mb2N1cygpfX1jb25zdCB5aWU9V2osa1BlPWNsYXNzIEVQZSBleHRlbmRzIGJBe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0''@;'; put 'put ''ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4ocGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3Jz''@;'; put 'put ''IiksYS5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8RG4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBsPVtlNCxFQV07RG4obCxhPT57Y29uc3QgZD1uZXcgeWllKHRoaXMu''@;'; put 'put ''aG90LHtuYW1lOiJvcGVyYXRvciIsbGFiZWw6e2h0bWxGb3I6YSx0ZXh0Q29udGVudDpiUGUoYSl9LHZhbHVlOmEsY2hlY2tlZDphPT09bFswXSxpZDphfSk7ZC5hZGRMb2NhbEhvb2soImNoYW5nZSIsaD0+dGhpcy5vblJhZGlvSW5wdXRDaGFuZ2UoaCkpLHRoaXMuZWxlbWVudHMucHVzaChk''@;'; put 'put ''KX0pfXNldENoZWNrZWQobCl7aWYodGhpcy5lbGVtZW50cy5sZW5ndGg8bCl0aHJvdyBFcnJvcihBYWBSYWRpbyBidXR0b24gd2l0aCBpbmRleCAke2x9IGRvZXNuJ3QgZXhpc3QuYCk7RG4odGhpcy5lbGVtZW50cywoYSxkKT0+e2Euc2V0Q2hlY2tlZChkPT09bCl9KX1nZXRBY3RpdmVPcGVy''@;'; put 'put ''YXRpb25JZCgpe2NvbnN0IGw9dGhpcy5lbGVtZW50cy5maW5kKGE9PmEgaW5zdGFuY2VvZiB5aWUmJmEuaXNDaGVja2VkKCkpO3JldHVybiBsP2wuZ2V0VmFsdWUoKTplNH1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCl9c2V0U3RhdGUobCl7dGhpcy5yZXNl''@;'; put 'put ''dCgpLGwmJnRoaXMuZ2V0QWN0aXZlT3BlcmF0aW9uSWQoKSE9PWwmJkRuKHRoaXMuZWxlbWVudHMsYT0+e2Euc2V0Q2hlY2tlZChhLmdldFZhbHVlKCk9PT1sKX0pfXVwZGF0ZVN0YXRlKCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz''@;'; put 'put ''WzBdOmU0O2Q9PT1ZaiYmKGQ9RUEpLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfW9uUmFkaW9JbnB1dENoYW5nZShsKXt0aGlzLnNldFN0YXRlKGwudGFyZ2V0LnZh''@;'; put 'put ''bHVlKX19O2Z1bmN0aW9uIFRQZShjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1OdGUoKTtjb25zdCBHaj1uZXcgU2V0KFsxXSkuaGFzKDEpLERQZT1HaiYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5LmZyb207ZnVuY3Rpb24gVXkoYyl7bGV0IGw9YztyZXR1cm4g''@;'; put 'put ''R2omJihsPW5ldyBTZXQobCkpLGZ1bmN0aW9uKGEpe2xldCBkO3JldHVybiBkPUdqP2wuaGFzKGEpOiEhfmwuaW5kZXhPZihhKSxkfX1mdW5jdGlvbiBDaWUoYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uICRqKGMpe2xldCBsPWM7cmV0dXJuIGw9RFBlP0FycmF5LmZyb20obmV3IFNldChsKSk6''@;'; put 'put ''ck4obCksbD1sLnNvcnQoKGEsZCk9PiJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkP2EtZDphPT09ZD8wOmE+ZD8xOi0xKSxsfWZ1bmN0aW9uIFNpZShjLGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IF87cmV0dXJuIGZ8fChfPVV5KGwpKSxEbihjLFQ9PntsZXQg''@;'; put 'put ''Vz0hMTsoZnx8XyhUKSkmJihXPSEwKTtjb25zdCBpZT17Y2hlY2tlZDpXLHZhbHVlOlQsdmlzdWFsVmFsdWU6VFBlKFQsYSl9O2QmJmQoaWUpLGgucHVzaChpZSl9KSxofWNvbnN0IHFqPW5ldyBXZWFrTWFwO2NsYXNzIEtqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVy''@;'; put 'put ''biBXdSh7aHJlZjoiIyIsdGFnTmFtZToiYSJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsS2woS2ouREVGQVVMVFMsYSkpLHFqLnNldCh0aGlzLHt9KX1idWlsZCgpe3N1cGVyLmJ1aWxkKCkscWouZ2V0KHRoaXMpLmxpbms9dGhpcy5fZWxlbWVudC5maXJzdENoaWxkfXVwZGF0ZSgpe3Ro''@;'; put 'put ''aXMuaXNCdWlsdCgpJiYocWouZ2V0KHRoaXMpLmxpbmsudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy50ZXh0Q29udGVudCkpfX1jb25zdCBNaWU9S2osSVBlPW5ldyBXZWFrTWFwO2NsYXNzIFhqIGV4dGVuZHMgUXB7c3RhdGljIGdldCBERUZBVUxU''@;'; put 'put ''Uygpe3JldHVybiBXdSh7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLEtsKFhqLkRFRkFVTFRTLGEpKSxJUGUuc2V0KHRoaXMse30pLHRoaXMuc2VhcmNoSW5wdXQ9bmV3IEk3KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpP''@;'; put 'put ''QixjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCJ9KSx0aGlzLnNlbGVjdEFsbFVJPW5ldyBNaWUodGhpcy5ob3Qse3RleHRDb250ZW50OkRCLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSx0aGlzLmNsZWFyQWxsVUk9bmV3IE1pZSh0aGlzLmhvdCx7dGV4dENvbnRlbnQ6''@;'; put 'put ''SUIsY2xhc3NOYW1lOiJodFVJQ2xlYXJBbGwifSksdGhpcy5pdGVtcz1bXSx0aGlzLml0ZW1zQm94PW51bGwsdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuc2VhcmNoSW5wdXQuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT50aGlzLm9uSW5wdXRLZXlEb3duKGwp''@;'; put 'put ''KSx0aGlzLnNlYXJjaElucHV0LmFkZExvY2FsSG9vaygiaW5wdXQiLGw9PnRoaXMub25JbnB1dChsKSksdGhpcy5zZWxlY3RBbGxVSS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT50aGlzLm9uU2VsZWN0QWxsQ2xpY2sobCkpLHRoaXMuY2xlYXJBbGxVSS5hZGRMb2NhbEhvb2soImNsaWNrIixs''@;'; put 'put ''PT50aGlzLm9uQ2xlYXJBbGxDbGljayhsKSl9c2V0SXRlbXMobCl7dGhpcy5pdGVtcz1sLHRoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3gubG9hZERhdGEodGhpcy5pdGVtcyl9c2V0TG9jYWxlKGwpe3RoaXMubG9jYWxlPWx9Z2V0TG9jYWxlKCl7cmV0dXJuIHRoaXMubG9jYWxlfWdldEl0''@;'; put 'put ''ZW1zKCl7cmV0dXJuWy4uLnRoaXMuaXRlbXNdfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIE9QZShjKXtjb25zdCBsPVtdO3JldHVybiBEbihjLGE9PnthLmNoZWNrZWQmJmwucHVzaChhLnZhbHVlKX0pLGx9KHRoaXMuaXRlbXMpfWlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5pdGVtcy5sZW5ndGg9PT10aGlzLmdldFZhbHVlKCkubGVuZ3RofWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9bmV3IFFwKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0VUlTZWxlY3Rpb25Db250''@;'; put 'put ''cm9scyIsY2hpbGRyZW46W3RoaXMuc2VsZWN0QWxsVUksdGhpcy5jbGVhckFsbFVJXX0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWFyY2hJbnB1dC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGls''@;'; put 'put ''ZChhKTtjb25zdCBoPWY9Pnt0aGlzLl9lbGVtZW50JiYodGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5kZXN0cm95KCkscGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksdGhpcy5pdGVtc0JveD1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IoZix7ZGF0YTp0aGlzLml0ZW1zLGNvbHVt''@;'; put 'put ''bnM6W3tkYXRhOiJjaGVja2VkIix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjooVyxpZSxnZSx3ZSxFZSxaZSk9PntXLnRpdGxlPVplLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AoaWUsWmUu''@;'; put 'put ''bGFiZWwucHJvcGVydHkpfSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb2xXaWR0aHM6KCk9PnRoaXMuaXRlbXNCb3guY29udGFpbmVyLnNjcm9sbFdpZHRoLUljKGwpLGNvcHlQYXN0ZTohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixmaWxsSGFuZGxlOiEx''@;'; put 'put ''LGZyYWdtZW50U2VsZWN0aW9uOiJjZWxsIix0YWJNb3Zlczp7cm93OjEsY29sOjB9LGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSksdGhpcy5pdGVtc0JveC5pbml0KCksdGhpcy5pdGVtc0JveC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJn''@;'; put 'put ''cmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOlc9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLFcsdGhpcyl9LGdyb3VwOiJtdWx0aXBsZVNlbGVjdC5pdGVtQm94In0pKX07aChhKSxzZXRUaW1lb3V0KCgpPT5oKGEpLDEwMCl9cmVzZXQoKXt0aGlz''@;'; put 'put ''LnNlYXJjaElucHV0LnJlc2V0KCksdGhpcy5zZWxlY3RBbGxVSS5yZXNldCgpLHRoaXMuY2xlYXJBbGxVSS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYodGhpcy5pdGVtc0JveC5sb2FkRGF0YShmdW5jdGlvbiBSUGUoYyxsKXtjb25zdCBhPVV5KGwpO3JldHVybiBjcyhjLGQ9''@;'; put 'put ''PihkLmNoZWNrZWQ9YShkLnZhbHVlKSxkKSl9KHRoaXMuaXRlbXMsdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmRlc3Ryb3koKSx0aGlzLnNlYXJjaElucHV0LmRlc3Ryb3koKSx0aGlzLmNsZWFyQWxs''@;'; put 'put ''VUkuZGVzdHJveSgpLHRoaXMuc2VsZWN0QWxsVUkuZGVzdHJveSgpLHRoaXMuc2VhcmNoSW5wdXQ9bnVsbCx0aGlzLmNsZWFyQWxsVUk9bnVsbCx0aGlzLnNlbGVjdEFsbFVJPW51bGwsdGhpcy5pdGVtc0JveD1udWxsLHRoaXMuaXRlbXM9bnVsbCxzdXBlci5kZXN0cm95KCl9b25JbnB1dChs''@;'; put 'put ''KXtjb25zdCBhPWwudGFyZ2V0LnZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKHRoaXMuZ2V0TG9jYWxlKCkpO2xldCBkO2Q9IiI9PT1hP1suLi50aGlzLml0ZW1zXTpfMSh0aGlzLml0ZW1zLGg9PmAke2gudmFsdWV9YC50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKS5pbmRleE9m''@;'; put 'put ''KGEpPj0wKSx0aGlzLml0ZW1zQm94LmxvYWREYXRhKGQpfW9uSW5wdXRLZXlEb3duKGwpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsbCx0aGlzKSx2TihvNyxsLmtleUNvZGUpKCJBUlJPV19ET1dOfFRBQiIpJiYhdGhpcy5pdGVtc0JveC5pc0xpc3RlbmluZygpJiYodjIobCksdGhp''@;'; put 'put ''cy5pdGVtc0JveC5saXN0ZW4oKSx0aGlzLml0ZW1zQm94LnNlbGVjdENlbGwoMCwwKSl9b25TZWxlY3RBbGxDbGljayhsKXtjb25zdCBhPVtdO2wucHJldmVudERlZmF1bHQoKSxEbih0aGlzLml0ZW1zQm94LmdldFNvdXJjZURhdGEoKSwoZCxoKT0+e2QuY2hlY2tlZD0hMCxhLnB1c2goYVYo''@;'; put 'put ''ZCxoKVswXSl9KSx0aGlzLml0ZW1zQm94LnNldFNvdXJjZURhdGFBdENlbGwoYSl9b25DbGVhckFsbENsaWNrKGwpe2NvbnN0IGE9W107bC5wcmV2ZW50RGVmYXVsdCgpLERuKHRoaXMuaXRlbXNCb3guZ2V0U291cmNlRGF0YSgpLChkLGgpPT57ZC5jaGVja2VkPSExLGEucHVzaChhVihkLGgp''@;'; put 'put ''WzBdKX0pLHRoaXMuaXRlbXNCb3guc2V0U291cmNlRGF0YUF0Q2VsbChhKX19Y29uc3QgeGllPVhqLFBnPSJieV92YWx1ZSI7WGwoUGcsZnVuY3Rpb24gUFBlKGMsbCl7bGV0W2FdPWw7cmV0dXJuIGEoYy52YWx1ZSl9LHtuYW1lOiJCeSB2YWx1ZSIsaW5wdXRzQ291bnQ6MCxpbnB1dFZhbHVl''@;'; put 'put ''c0RlY29yYXRvcihjKXtsZXRbbF09YztyZXR1cm5bVXkobCldfSxzaG93T3BlcmF0b3JzOiExfSk7Y29uc3QgSFBlPWNsYXNzIEZQZSBleHRlbmRzIGJBe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVu''@;'; put 'put ''dHMucHVzaChuZXcgeGllKHRoaXMuaG90KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT50aGlzLm9uSW5wdXRLZXlEb3duKGwpKX1zZXRTdGF0ZShsKXtpZih0aGlz''@;'; put 'put ''LnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09PVBnKXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7YS5zZXRJdGVtcyhsLml0ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5pc1NlbGVjdGVkQWxsVmFsdWVzKCl8fCFhLmxlbmd0aD9XYzpQZ30sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2NvbnN0''@;'; put 'put ''IGE9KGQsaCxmLF8sVCk9Pntjb25zdFtXXT1fMShoLHdlPT53ZS5uYW1lPT09UGcpLGllPXt9LGdlPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoT2spO2lmKFcpe2NvbnN0IHdlPSRqKGNzKF8oZCxUKSxldD0+ZXQudmFsdWUpKTtmJiYoVy5hcmdzWzBdPWYpO2NvbnN0IEVlPVtdLFpl''@;'; put 'put ''PVNpZSh3ZSxXLmFyZ3NbMF0sZ2UsZXQ9PntldC5jaGVja2VkJiZFZS5wdXNoKGV0LnZhbHVlKX0pO2llLmxvY2FsZT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uKS5sb2NhbGUsaWUuYXJncz1bRWVdLGllLmNvbW1hbmQ9T2coUGcpLGllLml0''@;'; put 'put ''ZW1zU25hcHNob3Q9WmV9ZWxzZSBpZS5hcmdzPVtdLGllLmNvbW1hbmQ9T2coV2MpO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGQsaWUpfTthKGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29sdW1uLGwuZWRpdGVkQ29uZGl0aW9uU3RhY2suY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3ND''@;'; put 'put ''aGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5KSxsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrcy5sZW5ndGgmJmEobC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29sdW1uLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdl''@;'; put 'put ''LGwuZmlsdGVyZWRSb3dzRmFjdG9yeSxsLmVkaXRlZENvbmRpdGlvblN0YWNrKX1nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIobD0+bCBpbnN0YW5jZW9mIHhpZSlbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlz''@;'; put 'put ''LmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsXyk9PntwaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IFQ9dGhpcy5ob3Qucm9vdERv''@;'; put 'put ''Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBwaShULCJodEZpbHRlcnNNZW51TGFiZWwiKSxULnRleHRDb250ZW50PV8sYS5hcHBlbmRDaGlsZChUKSxhLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxEbih0aGlzLmVsZW1lbnRzLFc9PmEuYXBwZW5k''@;'; put 'put ''Q2hpbGQoVy5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKE9rKSxhPSRqKHRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMoKSksZD1TaWUoYSxhLGwpO3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoZCks''@;'; put 'put ''c3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09aCYmdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRMb2Nh''@;'; put 'put ''bGUodGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxoLnZpc3VhbEluZGV4KS5sb2NhbGUpfW9uSW5wdXRLZXlEb3duKGwpe283KGwua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLHYyKGwpKX1fZ2V0Q29sdW1uVmlzaWJsZVZhbHVlcygpe2NvbnN0IGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtyZXR1cm4gbnVsbD09PWw/W106Y3ModGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwudmlzdWFsSW5kZXgpLGE9PkNpZShhKSl9fTtjbGFzcyBaeSBleHRlbmRzIGJBe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0''@;'; put 'put ''dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IEk3KHRoaXMuaG90LHt0eXBlOiJidXR0b24i''@;'; put 'put ''LHZhbHVlOkxCLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uT0siLGlkZW50aWZpZXI6WnkuQlVUVE9OX09LfSkpLHRoaXMuZWxlbWVudHMucHVzaChuZXcgSTcodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6UkIsY2xhc3NOYW1lOiJodFVJQnV0dG9uIGh0VUlCdXR0b25D''@;'; put 'put ''YW5jZWwiLGlkZW50aWZpZXI6WnkuQlVUVE9OX0NBTkNFTH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7RG4odGhpcy5lbGVtZW50cyxsPT57bC5hZGRMb2NhbEhvb2soImNsaWNrIiwoYSxkKT0+dGhpcy5vbkJ1dHRvbkNsaWNrKGEsZCkpfSl9Z2V0TWVudUl0ZW1E''@;'; put 'put ''ZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4ocGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiks''@;'; put 'put ''YS5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8RG4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2Vs''@;'; put 'put ''Iil9b25CdXR0b25DbGljayhsLGEpe2Eub3B0aW9ucy5pZGVudGlmaWVyPT09WnkuQlVUVE9OX09LP3RoaXMuYWNjZXB0KCk6dGhpcy5jYW5jZWwoKX19Y29uc3QgTlBlPVp5LEVpZT0iQ29uZGl0aW9uQ29sbGVjdGlvbi5maWx0ZXJpbmdTdGF0ZXMiO2NsYXNzIGtpZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO3RoaXMuaG90PWwsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPWEsdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bmV3IEVrLCEwPT09dGhpcy5pc01hcFJlZ2lzdHJhYmxlP3RoaXMuaG90''@;'; put 'put ''LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKEVpZSx0aGlzLmZpbHRlcmluZ1N0YXRlcyk6dGhpcy5maWx0ZXJpbmdTdGF0ZXMuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5nZXRGaWx0''@;'; put 'put ''ZXJlZENvbHVtbnMoKS5sZW5ndGh9aXNNYXRjaChsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGEpLGY9bnVsbCE9PShkPWg/LmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1kP2Q6W10sXz1oPy5vcGVyYXRpb247cmV0dXJuIHRoaXMuaXNNYXRj''@;'; put 'put ''aEluQ29uZGl0aW9ucyhmLGwsXyl9aXNNYXRjaEluQ29uZGl0aW9ucyhsLGEpe3JldHVybiFsLmxlbmd0aHx8ZnVuY3Rpb24gX1BlKGMpe2lmKCF6eVtjXSl0aHJvdyBFcnJvcihgT3BlcmF0aW9uIHdpdGggaWQgIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0IGw9enlbY10uZnVuYzty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oYSxkKXtyZXR1cm4gbChhLGQpfX0oYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmU0KShsLGEpfWFkZENvbmRpdGlvbihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJd''@;'; put 'put ''P2FyZ3VtZW50c1syXTplNCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO2NvbnN0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKS5sb2NhbGUsXz1jcyhhLmFyZ3MsZ2U9PiJzdHJpbmciPT10eXBlb2YgZ2U/Z2UudG9Mb2NhbGVMb3dlckNhc2UoZik6Z2UpLFQ9''@;'; put 'put ''YS5uYW1lfHxhLmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQWRkIixsKTtjb25zdCBXPXRoaXMuZ2V0T3BlcmF0aW9uKGwpO2lmKFcpe2lmKFchPT1kKXRocm93IEVycm9yKEFhYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtsfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQg''@;'; put 'put ''d2l0aCBhIFxgJHtXfVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVzZSBcYHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRp''@;'; put 'put ''ZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlvdSB1c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKX1lbHNlIGlmKExhKHp5W2RdKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''QWFgVW5leHBlY3RlZCBvcGVyYXRpb24gbmFtZWQgXGAke2R9XGAuIFBvc3NpYmxlIG9uZXMgYXJlXHgyMAogICAgICAgIFxgZGlzanVuY3Rpb25cYCBhbmQgXGBjb25qdW5jdGlvblxgLmApO2NvbnN0IGllPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTswPT09aWUubGVuZ3RoP3RoaXMuZmlsdGVy''@;'; put 'put ''aW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRpb25zOlt7bmFtZTpULGFyZ3M6XyxmdW5jOkpwKFQsXyl9XX0saCk6aWUucHVzaCh7bmFtZTpULGFyZ3M6XyxmdW5jOkpwKFQsXyl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQWRkIixsKX1nZXRDb25k''@;'; put 'put ''aXRpb25zKGwpe3ZhciBhLGQ7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb25kaXRpb25zKSYmdm9pZCAwIT09YT9hOltdfWdldE9wZXJhdGlvbihsKXt2YXIgYTtyZXR1cm4g''@;'; put 'put ''bnVsbD09PShhPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub3BlcmF0aW9ufWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGw9PntsZXRbYV09bDtyZXR1''@;'; put 'put ''cm4gYX0pfWdldENvbHVtblN0YWNrUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkuaW5kZXhPZihsKX1leHBvcnRBbGxDb25kaXRpb25zKCl7cmV0dXJuIEFsKHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKSwobCxhKT0+e2xldFtkLHtvcGVyYXRp''@;'; put 'put ''b246aCxjb25kaXRpb25zOmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpkLG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Y3MoZixfPT57bGV0e25hbWU6VCxhcmdzOld9PV87cmV0dXJue25hbWU6VCxhcmdzOld9fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFu''@;'; put 'put ''KCksRG4obCxhPT57RG4oYS5jb25kaXRpb25zLGQ9PnRoaXMuYWRkQ29uZGl0aW9uKGEuY29sdW1uLGQpKX0pfXJlbW92ZUNvbmRpdGlvbnMobCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSZW1vdmUiLGwpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyVmFsdWUobCksdGhpcy5ydW5M''@;'; put 'put ''b2NhbEhvb2tzKCJhZnRlclJlbW92ZSIsbCl9Y2xlYW4oKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNsZWFuIiksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXIoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xlYW4iKX1oYXNDb25kaXRpb25zKGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dENvbmRpdGlvbnMobCk7cmV0dXJuIGE/ZC5zb21lKGg9PmgubmFtZT09PWEpOmQubGVuZ3RoPjB9ZGVzdHJveSgpe3RoaXMuaXNNYXBSZWdpc3RyYWJsZSYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChFaWUpLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW51bGwsdGhp''@;'; put 'put ''cy5jbGVhckxvY2FsSG9va3MoKX19VGEoa2llLE8wKTtjb25zdCBBaWU9a2llLFRpZT1jbGFzcyBWUGV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT5bXTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rp''@;'; put 'put ''b249bCx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWF9ZmlsdGVyKCl7bGV0IGw9W107cmV0dXJuIERuKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKSwoYSxkKT0+e2xldCBoPXRoaXMuY29sdW1uRGF0YUZhY3RvcnkoYSk7ZCYmKGg9dGhpcy5fZ2V0SW50ZXJz''@;'; put 'put ''ZWN0RGF0YShoLGwpKSxsPXRoaXMuZmlsdGVyQnlDb2x1bW4oYSxoKX0pLGx9ZmlsdGVyQnlDb2x1bW4obCl7Y29uc3QgZD1bXTtyZXR1cm4gRG4oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9Pnt2b2lkIDAhPT1oJiZ0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb24uaXNNYXRjaChoLGwpJiZkLnB1c2goaCl9KSxkfV9nZXRJbnRlcnNlY3REYXRhKGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4gRG4oYSxoPT57Y29uc3QgZj1oLm1ldGEudmlzdWFsUm93O3ZvaWQgMCE9PWxbZl0mJihkW2ZdPWxbZl0pfSksZH19O2NsYXNzIERpZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTooKT0+W107dGhpcy5ob3Q9bCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249YSx0aGlzLmNvbHVtbkRhdGFGYWN0b3J5PWQsdGhpcy5jaGFuZ2VzPVtdLHRo''@;'; put 'put ''aXMuZ3JvdXBpbmc9ITEsdGhpcy5sYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbj0tMSx0aGlzLmxhdGVzdE9yZGVyU3RhY2s9W10sdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlUmVtb3ZlIixoPT50aGlzLl9vbkNvbmRpdGlvbkJlZm9yZU1vZGlmeShoKSks''@;'; put 'put ''dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJSZW1vdmUiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQWRkIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgp''@;'; put 'put ''KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVDbGVhbiIsKCk9PnRoaXMuX29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4oKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJDbGVhbiIsKCk9PnRoaXMuX29uQ29uZGl0aW9uQWZ0''@;'; put 'put ''ZXJDbGVhbigpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxEbih0aGlzLmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9X29uQ29uZGl0aW9uQmVmb3JlTW9kaWZ5''@;'; put 'put ''KGwpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24obCl9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNo''@;'; put 'put ''YW5nZXMuaW5kZXhPZihsKSYmdGhpcy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRo''@;'; put 'put ''aXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24pO2NvbnN0IF89aC5zbGljZSgwLGYpLFQ9aC5zbGljZShmKTtULmxlbmd0aCYmVFswXS5jb2x1bW49PT1sJiZULnNoaWZ0KCk7Y29uc3QgVz1tdGUoZnVuY3Rpb24oZ2Usd2Upe2xldCBFZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107Y29uc3QgWmU9bmV3IEFpZShkLmhvdCwhMSksb3Q9W10uY29uY2F0KGdlLEVlKTtaZS5pbXBvcnRBbGxDb25kaXRpb25zKG90KTtjb25zdCBldD1kLmNvbHVtbkRhdGFGYWN0b3J5KHdlKTtsZXQgeXQ7eXQ9WmUuaXNFbXB0eSgpP2V0Om5l''@;'; put 'put ''dyBUaWUoWmUsU3Q9PmQuY29sdW1uRGF0YUZhY3RvcnkoU3QpKS5maWx0ZXIoKSx5dD1jcyh5dCxTdD0+U3QubWV0YS52aXN1YWxSb3cpO2NvbnN0IGt0PVV5KHl0KTtyZXR1cm4gWmUuZGVzdHJveSgpLF8xKGV0LFN0PT5rdChTdC5tZXRhLnZpc3VhbFJvdykpfSkoXyksaWU9W10uY29uY2F0''@;'; put 'put ''KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb25kaXRpb25zKGwpKTt0aGlzLnJ1bkxvY2FsSG9va3MoInVwZGF0ZSIse2VkaXRlZENvbmRpdGlvblN0YWNrOntjb2x1bW46bCxjb25kaXRpb25zOmllfSxkZXBlbmRlbnRDb25kaXRpb25TdGFja3M6VCxmaWx0ZXJlZFJvd3NGYWN0b3J5''@;'; put 'put ''OlcsY29uZGl0aW9uQXJnc0NoYW5nZTphfSl9X29uQ29uZGl0aW9uQmVmb3JlQ2xlYW4oKXt0aGlzLmxhdGVzdE9yZGVyU3RhY2s9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpfV9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4oKXtEbih0aGlzLmxhdGVzdE9yZGVy''@;'; put 'put ''U3RhY2ssbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxkcyh0aGlzLChsLGEpPT57dGhpc1thXT1udWxsfSl9fVRhKERpZSxPMCk7Y29uc3QgQlBlPURpZTtjbGFzcyB6UGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBM''@;'; put 'put ''VUdJTl9LRVkoKXtyZXR1cm4iZmlsdGVycyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpjaGVja2JveCJdfWNv''@;'; put 'put ''bnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj1udWxsLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbXBvbmVudHM9bmV3''@;'; put 'put ''IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pLHRoaXMuZmlsdGVyc1Jvd3NNYXA9''@;'; put 'put ''bnVsbCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PnRoaXMub25BZnRlckdldENvbEhlYWRlcihhLGQpKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsdGVyc31lbmFibGVQbHVnaW4oKXtpZih0aGlzLmVuYWJsZWQpcmV0''@;'; put 'put ''dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyBteSksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTtjb25zdCBsPXRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKCkuZHJvcGRvd25NZW51LGE9bCYmbC51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksZD1fPT4oXy5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PnRoaXMub25BY3Rpb25CYXJTdWJtaXQoImFjY2VwdCIpKSxfLmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+''@;'; put 'put ''dGhpcy5vbkFjdGlvbkJhclN1Ym1pdCgiY2FuY2VsIikpLF8uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLFQ9PnRoaXMub25Db21wb25lbnRDaGFuZ2UoXyxUKSksXyksaD0oKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShrQil9OmA7aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZp''@;'; put 'put ''bHRlcl9ieV9jb25kaXRpb24iKSl7Y29uc3QgXz1uZXcgVWoodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uIixuYW1lOmgsYWRkU2VwYXJhdG9yOiExLG1lbnVDb250YWluZXI6YX0pO18uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2Vk''@;'; put 'put ''KCkpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGQoXykpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IGtQZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9v''@;'; put 'put ''cGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0IF89bmV3IFVqKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG5hbWU6IiIsYWRkU2VwYXJhdG9yOiEwLG1lbnVDb250YWluZXI6''@;'; put 'put ''YX0pO18uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5vblNlbGVjdFVJQ2xvc2VkKCkpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIixkKF8pKX10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKXx8dGhpcy5jb21wb25lbnRz''@;'; put 'put ''LnNldCgiZmlsdGVyX2J5X3ZhbHVlIixkKG5ldyBIUGUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfdmFsdWUiLG5hbWU6KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQUIpfTpgfSkpKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsZChuZXcgTlBlKHRoaXMuaG90LHtpZDoiZmlsdGVyX2FjdGlvbl9iYXIiLG5hbWU6IkFjdGlvbiBiYXIifSkpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb258fCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bmV3IEFpZSh0aGlzLmhv''@;'; put 'put ''dCkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXJ8fCh0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyPW5ldyBCUGUodGhpcy5ob3QsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLF89PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKF8pKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVy''@;'; put 'put ''LmFkZExvY2FsSG9vaygidXBkYXRlIixfPT50aGlzLnVwZGF0ZUNvbXBvbmVudHMoXykpKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChfPT5fLnNob3coKSksdGhpcy5hZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsXz0+dGhpcy5vbkJlZm9yZURyb3Bkb3duTWVudVNldEl0''@;'; put 'put ''ZW1zKF8pKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLF89PnRoaXMub25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zKF8pKSx0aGlzLmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51U2hvdyIsKCk9PnRoaXMub25BZnRlckRyb3Bkb3duTWVu''@;'; put 'put ''dVNob3coKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLCgpPT50aGlzLm9uQWZ0ZXJEcm9wZG93bk1lbnVIaWRlKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLF89PnRoaXMub25BZnRlckNoYW5nZShfKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93''@;'; put 'put ''bk1lbnUmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhpcy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7dGhpcy5lbmFi''@;'; put 'put ''bGVkJiYobnVsbCE9PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChhLGQpPT57YS5kZXN0cm95KCksdGhpcy5jb21w''@;'; put 'put ''b25lbnRzLnNldChkLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1h''@;'; put 'put ''ZGRDb25kaXRpb24obCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTplNDtjb25zdCBmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLHtjb21t''@;'; put 'put ''YW5kOntrZXk6YX0sYXJnczpkfSxoKX1yZW1vdmVDb25kaXRpb25zKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX1jbGVhckNvbmRpdGlvbnMobCl7aWYodm9pZCAwPT09bCl0aGlzLmNv''@;'; put 'put ''bmRpdGlvbkNvbGxlY3Rpb24uY2xlYW4oKTtlbHNle2NvbnN0IGE9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhhKX19ZmlsdGVyKCl7Y29uc3QgbD10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCksYT0hdGhpcy5j''@;'; put 'put ''b25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtsZXQgZD1bXTtjb25zdCBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRmlsdGVyIixoKSlpZihhKXtjb25zdCBfPVtdO3RoaXMuaG90LmJh''@;'; put 'put ''dGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpLGQ9Y3MobC5maWx0ZXIoKSxXPT5XLm1ldGEudmlzdWFsUm93KTtjb25zdCBUPVV5KGQpO3ZvKHRoaXMuaG90LmNvdW50U291cmNlUm93cygpLTEsVz0+e1QoVyl8fF8ucHVzaChXKX0pLERuKF8sVz0+e3RoaXMu''@;'; put 'put ''ZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KFcsITApfSl9LCEwKSxkLmxlbmd0aHx8dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCl9ZWxzZSB0aGlzLmZpbHRlcnNSb3dzTWFwLmNsZWFyKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixoKSx0aGlzLmhvdC52aWV3LmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSghMCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5jbGVhckNvbHVtblNlbGVjdGlvbigpfWdldFNlbGVjdGVkQ29sdW1uKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGln''@;'; put 'put ''aGxpZ2h0O3JldHVybiBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWNsZWFyQ29sdW1uU2VsZWN0aW9uKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PWwmJnRoaXMuaG90LnNl''@;'; put 'put ''bGVjdENlbGwoMCxsLnZpc3VhbEluZGV4KX1nZXREYXRhTWFwQXRDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKSxkPVtdO3JldHVybiBEbih0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDb2woYSksKGgsZik9Pnt2YXIgXztjb25zdHtyb3c6VCxjb2w6Vyx2aXN1''@;'; put 'put ''YWxDb2w6aWUsdmlzdWFsUm93OmdlLHR5cGU6d2UsaW5zdGFuY2U6RWUsZGF0ZUZvcm1hdDpaZSxsb2NhbGU6b3R9PXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSksZXQ9bnVsbCE9PShfPXRoaXMuaG90LmdldERhdGFBdENlbGwodGhpcy5ob3QudG9WaXN1YWxSb3coZiksYSkpJiZ2b2lkIDAh''@;'; put 'put ''PT1fP186aDtkLnB1c2goe21ldGE6e3JvdzpULGNvbDpXLHZpc3VhbENvbDppZSx2aXN1YWxSb3c6Z2UsdHlwZTp3ZSxpbnN0YW5jZTpFZSxkYXRlRm9ybWF0OlplLGxvY2FsZTpvdH0sdmFsdWU6Q2llKGV0KX0pfSksZH1vbkFmdGVyQ2hhbmdlKGwpe2wmJkRuKGwsYT0+e2NvbnN0WyxkXT1h''@;'; put 'put ''LGg9dGhpcy5ob3QucHJvcFRvQ29sKGQpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGgpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGgpfSl9dXBkYXRlVmFsdWVDb21wb25lbnRDb25kaXRpb24obCl7Y29uc3QgZD0kaih0aGlzLmhvdC5nZXRE''@;'; put 'put ''YXRhQXRDb2wobCkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIudXBkYXRlU3RhdGVzQXRDb2x1bW4obCxkKX1yZXN0b3JlQ29tcG9uZW50cyhsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmdldFNlbGVjdGVkQ29sdW1uKCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnBoeXNp''@;'; put 'put ''Y2FsSW5kZXg7bC5mb3JFYWNoKGg9PntoLmlzSGlkZGVuKCl8fGgucmVzdG9yZVN0YXRlKGQpfSksdGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpfW9uQWZ0ZXJEcm9wZG93bk1lbnVTaG93KCl7dGhpcy5yZXN0b3JlQ29tcG9uZW50cyhBcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''Y29tcG9uZW50cy52YWx1ZXMoKSkpfW9uQWZ0ZXJEcm9wZG93bk1lbnVIaWRlKCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9u''@;'; put 'put ''MiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1vbkJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zKCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT57dGhpcy5kcm9wZG93''@;'; put 'put ''bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LnVwZGF0ZVNldHRpbmdzKHtoaWRkZW5Sb3dzOiEwfSl9KX1vbkFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOmdzfSksdGhpcy5jb21wb25lbnRzLmZvckVhY2goYT0+e2wuaXRlbXMucHVzaChhLmdl''@;'; put 'put ''dE1lbnVJdGVtRGVzY3JpcHRvcigpKX0pfWdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHMobCxhLGQsaCl7bGV0IGY9bDtyZXR1cm4gZj09PUVBJiZhLmNvbW1hbmQua2V5IT09V2MmJmQuY29tbWFuZC5rZXkhPT1XYyYmaC5jb21tYW5kLmtleSE9PVdjP2Y9WWo6aC5jb21tYW5kLmtleSE9''@;'; put 'put ''PVdjJiYoYS5jb21tYW5kLmtleT09PVdjfHxkLmNvbW1hbmQua2V5PT09V2MpJiYoZj1lNCksZn1vbkFjdGlvbkJhclN1Ym1pdChsKXt2YXIgYTtpZigiYWNjZXB0Ij09PWwpe2NvbnN0IGg9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBkO2lmKG51bGw9PT1oKXJldHVybiB2b2lkKG51''@;'; put 'put ''bGw9PT0oZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWR8fGQuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpmfT1oLF89dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksVD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0''@;'; put 'put ''ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksVz10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLGllPXRoaXMuZ2V0T3BlcmF0aW9uQmFzZWRPbkFyZ3VtZW50cyh0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikuZ2V0QWN0''@;'; put 'put ''aXZlT3BlcmF0aW9uSWQoKSxfLFQsVyk7dGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5ncm91cENoYW5nZXMoKTtsZXQgZ2U9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24oZik7LTE9PT1nZSYmKGdlPXZvaWQgMCksdGhpcy5jb25kaXRpb25Db2xs''@;'; put 'put ''ZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoZiksXy5jb21tYW5kLmtleSE9PVdjJiYodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLF8saWUsZ2UpLFQuY29tbWFuZC5rZXkhPT1XYyYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihmLFQsaWUsZ2Up''@;'; put 'put ''KSxXLmNvbW1hbmQua2V5IT09V2MmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZixXLGllLGdlKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmZsdXNoKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2god2U9PndlLnNhdmVTdGF0ZShmKSksdGhpcy5maWx0ZXJz''@;'; put 'put ''Um93c01hcC5jbGVhcigpLHRoaXMuZmlsdGVyKCl9bnVsbD09PShhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8YS5jbG9zZSgpfW9uQ29tcG9uZW50Q2hhbmdlKGwsYSl7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpLGwuY29uc3RydWN0''@;'; put 'put ''b3I9PT1VaiYmIWEuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9b25TZWxlY3RVSUNsb3NlZCgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMu''@;'; put 'put ''ZHJvcGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgbD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50''@;'; put 'put ''cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLmQpfW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKT9waShhLCJodEZpbHRlcnNBY3RpdmUiKTpXbyhhLCJodEZpbHRlcnNBY3RpdmUiKX1fY3JlYXRlRGF0YUZpbHRlcigpe3JldHVy''@;'; put 'put ''biBuZXcgVGllKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24sYT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oYSkpfXVwZGF0ZUNvbXBvbmVudHMobCl7dmFyIGE7aWYobnVsbD09PShhPXRoaXMu''@;'; put 'put ''ZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09YXx8IWEuZW5hYmxlZClyZXR1cm47Y29uc3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6ZCxjb2x1bW46aH19PWwsZj1kLmZpbHRlcihUPT5ULm5hbWU9PT1QZyksXz1kLmZpbHRlcihUPT5ULm5hbWUhPT1QZyk7aWYoZi5s''@;'; put 'put ''ZW5ndGg+PTJ8fF8ubGVuZ3RoPj0zKUdhKEFhYFRoZSBmaWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9ucyBleGNl''@;'; put 'put ''ZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3duIG1lbnUuXHgyMAogICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgVD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGgpO3RoaXMuY29tcG9uZW50cy5n''@;'; put 'put ''ZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZShfWzBdLGgpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUoX1sxXSxoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3RhdGUoVCxo''@;'; put 'put ''KSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRhdGVTdGF0ZShsKX19Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVu''@;'; put 'put ''dTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRG4oaCxfPT57RG4oYS5tZW51SXRlbXMsKFQsVyk9PntULmtleT09PV8uZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goVyl9KX0p''@;'; put 'put ''LGx9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5t''@;'; put 'put ''ZW51LmhvdE1lbnUsaD1kLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLF89bmV3IEFycmF5KGY+MT9mLTE6MCksVD0xO1Q8ZjtUKyspX1tULTFdPWFyZ3VtZW50c1tUXTtjb25zdCBXPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi5fKTts''@;'; put 'put ''P2guc2hvd1Jvd3MoVyk6aC5oaWRlUm93cyhXKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwu''@;'; put 'put ''Li5hKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMu''@;'; put 'put ''Y29tcG9uZW50cy5mb3JFYWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5y''@;'; put 'put ''b3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgTGllPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixKaj17bGljZW5zZUtleTpMaWUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVz''@;'; put 'put ''ZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9y''@;'; put 'put ''bWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0iLCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIFJpZShjKXt2YXIgbDtyZXR1cm57bWF4Q29sdW1uczpjLm1heENvbHVtbnMsbWF4Um93czpjLm1heFJvd3MsbGFuZ3VhZ2U6bnVsbD09PShsPWNbQ3VdKXx8dm9pZCAwPT09bHx8bnVsbD09PShs''@;'; put 'put ''PWwubGFuZ3VhZ2UpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxhbmdDb2RlfX1mdW5jdGlvbiBPaWUoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLnJlZHVjZSgobCxhKT0+KCJoeXBlcmZvcm11bGEiIT09YSYmKGxbYV09Y1thXSksbCkse30pfWZ1bmN0aW9uIEFBKCl7Y29uc3QgYz0iZW5naW5l''@;'; put 'put ''X3JlbGF0aW9uc2hpcCIsbD1wZChDdSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBRaigpe2NvbnN0IGM9InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGw9cGQoQ3UpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIo''@;'; put 'put ''YyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gUGllKGMpe3ZhciBsO2NvbnN0IGE9QUEoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9YS5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9y''@;'; put 'put ''bXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gRmllKGMsbCl7aWYoYyl7Y29uc3QgYT1BQSgpLGQ9YS5nZXQoYyksaD1RaigpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQuaW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmlu''@;'; put 'put ''Y2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2YobC5ndWlkKSwxKSwwPT09Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCBIaWU9IkREL01NL1lZWVkiO2Z1bmN0aW9uIE5pZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hh''@;'; put 'put ''ckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX1mdW5jdGlvbiBleihjLGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBWaWUoYyxsKXtyZXR1cm4gS28oYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gQmllKGMsbCl7cmV0dXJuIEtvKGMsbCwhMCkuZm9y''@;'; put 'put ''bWF0KEhpZSl9ZnVuY3Rpb24gZUZlKGMsbCl7cmV0dXJuIEtvKGMsSGllLCEwKS5mb3JtYXQobCl9ZnVuY3Rpb24gamllKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3JldHVybiBLbyhkKS5mb3JtYXQobCl9ZnVuY3Rpb24gRmcoYyxsLGEpeyhmdW5jdGlvbiB0''@;'; put 'put ''RmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHJsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIG5GZShjLGwp''@;'; put 'put ''e3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsemllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIHQ0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gckZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyx6aWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIHppZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxk''@;'; put 'put ''IG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgWXk9bmV3IFdlYWtNYXAsbjQ9bmV3IFdlYWtNYXAseTE9bmV3IFdlYWtNYXAsVEE9bmV3IFdlYWtNYXAsdHo9bmV3IFdlYWtNYXAsbno9bmV3IFdlYWtNYXAsREE9bmV3IFdlYWtNYXA7Y29uc3QgVWllPWNsYXNzIGlGZXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEsZCl7RmcodGhpcyxZeSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxuNCx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyx5MSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksRmcodGhpcyxUQSx7d3JpdGFibGU6ITAsdmFsdWU6''@;'; put 'put ''W119KSxGZyh0aGlzLHR6LHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEZnKHRoaXMsbnose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEZnKHRoaXMsREEse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksdDQodGhpcyxZeSxsKSx0NCh0aGlzLG40LGEpLHQ0KHRoaXMseTEsZCl9c2V0UmVtb3Zl''@;'; put 'put ''ZEhmSW5kZXhlcyhsKXtyZXR1cm4gdDQodGhpcyxEQSxsLm1hcChhPT57Y29uc3QgZD1ybCh0aGlzLG40KS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLHJsKHRoaXMsREEpfWdldFJlbW92ZWRIZkluZGV4''@;'; put 'put ''ZXMoKXtyZXR1cm4gcmwodGhpcyxEQSl9Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9cmwodGhpcyxuNCkuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0pfXN5bmNNb3Zlcyhs''@;'; put 'put ''KXtjb25zdCBkPWBtb3ZlJHtidShybCh0aGlzLFl5KSl9c2A7cmwodGhpcyx5MSkuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmguZnJvbSsxIT09aC50byYmcmwodGhpcyx5MSkuZ2V0RW5naW5lKClbZF0ocmwodGhpcyx5MSkuZ2V0U2hlZXRJ''@;'; put 'put ''ZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1vdmVzSW5mb3JtYXRpb24obCxhLGQpeyExIT09ZCYmKHQ0KHRoaXMsdHosbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksdDQodGhpcyxueix0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1n''@;'; put 'put ''ZXRNb3ZlTGluZShsLGEpe2NvbnN0IGQ9cmwodGhpcyxuNCkuZ2V0TnVtYmVyT2ZJbmRleGVzKCksaD1BcnJheS5mcm9tKEFycmF5KGQpLmtleXMoKSkuZmlsdGVyKF89PiExPT09bC5pbmNsdWRlcyhfKSk7dmFyIGY7cmV0dXJuIDA9PT1hP251bGwhPT0oZj1oW2FdKSYmdm9pZCAwIT09Zj9m''@;'; put 'put ''OjA6aFthLTFdKzF9Z2V0SW5pdGlhbGx5Q2FsY3VsYXRlZE1vdmVzKGwsYSl7bGV0IGQ9dGhpcy5nZXRNb3ZlTGluZShsLGEpO2NvbnN0IGg9W107cmV0dXJuIGwuZm9yRWFjaChmPT57Y29uc3QgXz17ZnJvbTpmLHRvOmR9O2guZm9yRWFjaChUPT57VC5mcm9tPl8uZnJvbSYmVC50bzw9Xy5m''@;'; put 'put ''cm9tJiZULmZyb20+VC50byYmKF8uZnJvbSs9MSl9KSxfLmZyb20+PWQmJihkKz0xKSxoLnB1c2goXyl9KSxofWFkanVzdGVkQ2FsY3VsYXRlZE1vdmVzKGwpe3JldHVybiBsLmZvckVhY2goKGEsZCk9PntsLnNsaWNlKGQrMSkuZm9yRWFjaChmPT57Zi5mcm9tPmEuZnJvbSYmZi5mcm9tPGYu''@;'; put 'put ''dG8mJihmLmZyb20tPTEpfSl9KSxsfWNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhsLGEpe2lmKHJsKHRoaXMseTEpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCl8fCExPT09bHx8ITE9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuYWRqdXN0ZWRDYWxjdWxhdGVkTW92ZXModGhpcy5nZXRJbml0aWFsbHlD''@;'; put 'put ''YWxjdWxhdGVkTW92ZXMocmwodGhpcyx0eikscmwodGhpcyxueikpKTtudWxsPT09cmwodGhpcyx5MSkuZ2V0U2hlZXRJZCgpP3JsKHRoaXMseTEpLmdldFBvc3Rwb25lQWN0aW9uKCgpPT50aGlzLnN5bmNNb3ZlcyhkKSk6dGhpcy5zeW5jTW92ZXMoZCl9Z2V0SW5kZXhlc0NoYW5nZVN5bmNN''@;'; put 'put ''ZXRob2QoKXtjb25zdCBsPWBzZXQke2J1KHJsKHRoaXMsWXkpKX1PcmRlcmA7cmV0dXJuIGE9PntpZihybCh0aGlzLHkxKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpKXJldHVybjtjb25zdCBkPXJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpO2lmKCJ1cGRhdGUiPT09YSl7Y29uc3Qg''@;'; put 'put ''aD1ybCh0aGlzLFRBKS5tYXAoVz0+ZC5pbmRleE9mKFcpKSxmPXJsKHRoaXMseTEpLmdldEVuZ2luZSgpLmdldFNoZWV0RGltZW5zaW9ucyhybCh0aGlzLHkxKS5nZXRTaGVldElkKCkpO2xldCBfO189InJvdyI9PT1ybCh0aGlzLFl5KT9mLmhlaWdodDpmLndpZHRoO2ZvcihsZXQgVz1oLmxl''@;'; put 'put ''bmd0aDtXPF87Vys9MSloLnB1c2goVyk7cmwodGhpcyx5MSkuZ2V0RW5naW5lKClbbF0ocmwodGhpcyx5MSkuZ2V0U2hlZXRJZCgpLGgpfXQ0KHRoaXMsVEEsZCl9fWluaXQoKXt0NCh0aGlzLFRBLHJsKHRoaXMsbjQpLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX19O2Z1bmN0aW9uIEhnKGMsbCxh''@;'; put 'put ''KXsoZnVuY3Rpb24gb0ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBxZihjLGwpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiBzRmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLFppZShjLGwsImdldCIpKX1mdW5jdGlvbiBOZyhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGFGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsWmllKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBaaWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIg''@;'; put 'put ''cHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIElBPW5ldyBXZWFrTWFwLExBPW5ldyBXZWFrTWFwLHJ6PW5ldyBXZWFrTWFwLGl6PW5ldyBXZWFrTWFwLG96PW5ldyBXZWFrTWFwLHN6PW5ldyBXZWFrTWFwLGF6PW5ldyBXZWFrTWFwO2Z1bmN0aW9u''@;'; put 'put ''IEw3KGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB1RmUoYyl7dmFyIGw9ZnVuY3Rpb24gZEZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbHooYyxsLGEpeyhmdW5jdGlvbiBoRmUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHI0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gZkZlKGMsbCxhKXtp''@;'; put 'put ''ZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxZaWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFI3KGMsbCl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uIHBGZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWWllKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIFlpZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5v''@;'; put 'put ''bi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCBDdT0iZm9ybXVsYXMiLGdGZT1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTtzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLHNvLmdldFNpbmdsZXRvbigpLnJl''@;'; put 'put ''Z2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVy''@;'; put 'put ''U2hlZXRSZW5hbWVkIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTtjb25zdCBPNz1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBLZj1uZXcgV2Vha01hcCxjej1uZXcgV2Vh''@;'; put 'put ''a01hcCxXeT1uZXcgV2Vha01hcDtjbGFzcyB2RmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLGx6KHRoaXMsS2Yse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksbHoodGhpcyxjeix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxseih0aGlz''@;'; put 'put ''LFd5LHt3cml0YWJsZTohMCx2YWx1ZTpbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lVmFsdWVzVXBkYXRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZU5hbWVkRXhwcmVzc2lv''@;'; put 'put ''bnNBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25SZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0''@;'; put 'put ''QWRkZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW5hbWVkKC4uLmFyZ3VtZW50cyl9XSxbInNoZWV0UmVtb3ZlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0UmVtb3ZlZCguLi5hcmd1bWVudHMp''@;'; put 'put ''fV1dfSksTDcodGhpcywic3RhdGljUmVnaXN0ZXIiLHBkKCJmb3JtdWxhcyIpKSxMNyh0aGlzLCJlbmdpbmUiLG51bGwpLEw3KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksTDcodGhpcywiaW5kZXhTeW5jZXIiLG51bGwpLEw3KHRoaXMsInJvd0F4aXNTeW5jZXIiLG51bGwpLEw3KHRoaXMsImNv''@;'; put 'put ''bHVtbkF4aXNTeW5jZXIiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBDdX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bQ3UsLi4uZ0ZlXX1nZXQgc2hlZXRJZCgpe3JldHVybiBudWxs''@;'; put 'put ''PT09dGhpcy5zaGVldE5hbWU/bnVsbDp0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbQ3VdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVu''@;'; put 'put ''Z2luZT1udWxsIT09KGw9ZnVuY3Rpb24gV1BlKGMpe2NvbnN0IGw9Yy5nZXRTZXR0aW5ncygpLGE9bFtDdV0sZD1hPy5lbmdpbmU7aWYoITA9PT1hfHxMYShkKSlyZXR1cm4gbnVsbDt2YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBmdW5jdGlvbiBHUGUoYyxsLGEpe2NvbnN0IGQ9bFtDdV0saD1mdW5jdGlvbiBVUGUoYyl7dmFyIGw7Y29uc3QgYT1jW0N1XSxkPU9pZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1SaWUo''@;'; put 'put ''Yyk7cmV0dXJuey4uLkpqLC4uLmQsLi4uaH19KGwpLGY9QUEoKSxfPVFqKCk7KGZ1bmN0aW9uICRQZShjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKF8pe0dhKF8u''@;'; put 'put ''bWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBxUGUoYyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXtHYShkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgVD1jLmJ1aWxkRW1wdHkoaCk7''@;'; put 'put ''cmV0dXJuIGYuc2V0KFQsW2FdKSxfLnNldChULFthLmd1aWRdKSxmdW5jdGlvbiBLUGUoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6X309YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Np''@;'; put 'put ''b24oZCxoLGYsXyl9Y2F0Y2goVCl7R2EoVC5tZXNzYWdlKX19KSxjLnJlc3VtZUV2YWx1YXRpb24oKSl9KFQsZC5uYW1lZEV4cHJlc3Npb25zKSxULm9uKCJzaGVldEFkZGVkIiwoKT0+e1QucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxULm9uKCJzaGVldFJlbW92ZWQiLCgpPT57VC5yZWJ1''@;'; put 'put ''aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFR9KG51bGwhPT0oaD1kLmh5cGVyZm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZMYShkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9QUEoKSxfPVFqKCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQo''@;'; put 'put ''ZCxbXSksZi5nZXQoZCkucHVzaChjKSxfJiZfLnB1c2goYy5ndWlkKSxkLmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5OkxpZX0pLChkLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PUpqLmxlYXBZZWFyMTkwMHx8ITE9PT1sayhkLmdldENvbmZp''@;'; put 'put ''ZygpLm51bGxEYXRlLEpqLm51bGxEYXRlKSkmJkdhKEFhYElmIHlvdSB1c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3Jt''@;'; put 'put ''dWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhhbmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgR2EoIk1pc3NpbmcgdGhlIHJlcXVpcmVk''@;'; put 'put ''IGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBsZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhp''@;'; put 'put ''cy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5zaGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09ZCYmKHRoaXMuc2hlZXROYW1lPWQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZv''@;'; put 'put ''cmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVm''@;'; put 'put ''b3JlTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5''@;'; put 'put ''RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5U291cmNlRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9y''@;'; put 'put ''ZVZhbGlkYXRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXREYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZUNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlz''@;'; put 'put ''LmluZGV4U3luY2VyPW5ldyBjbGFzcyBsRmV7Y29uc3RydWN0b3IobCxhLGQpe0hnKHRoaXMsSUEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhnKHRoaXMsTEEse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhnKHRoaXMscnose3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLEhn''@;'; put 'put ''KHRoaXMsaXose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksSGcodGhpcyxveix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxIZyh0aGlzLHN6LHt3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksSGcodGhpcyxheix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE5nKHRoaXMsSUEsbmV3IFVpZSgicm93''@;'; put 'put ''IixsLHRoaXMpKSxOZyh0aGlzLExBLG5ldyBVaWUoImNvbHVtbiIsYSx0aGlzKSksTmcodGhpcyxyeixkKX1nZXRGb3JBeGlzKGwpe3JldHVybiBxZih0aGlzLCJyb3ciPT09bD9JQTpMQSl9c2V0UGVyZm9ybVVuZG8obCl7TmcodGhpcyxpeixsKX1zZXRQZXJmb3JtUmVkbyhsKXtOZyh0aGlz''@;'; put 'put ''LG96LGwpfWlzUGVyZm9ybWluZ1VuZG9SZWRvKCl7cmV0dXJuIHFmKHRoaXMsaXopfHxxZih0aGlzLG96KX1nZXRTaGVldElkKCl7cmV0dXJuIHFmKHRoaXMsYXopfWdldEVuZ2luZSgpe3JldHVybiBxZih0aGlzLHN6KX1nZXRQb3N0cG9uZUFjdGlvbigpe3JldHVybiBxZih0aGlzLHJ6KX1z''@;'; put 'put ''ZXR1cFN5bmNFbmRwb2ludChsLGEpe05nKHRoaXMsc3osbCksTmcodGhpcyxheixhKSxxZih0aGlzLElBKS5pbml0KCkscWYodGhpcyxMQSkuaW5pdCgpfX0odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNl''@;'; put 'put ''KCJpbml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1''@;'; put 'put ''ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhv''@;'; put 'put ''dC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsXyk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCxfKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgsZixfKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1v''@;'; put 'put ''dmVzSW5mb3JtYXRpb24oZCxoLF8pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsXyxUKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoXyxUKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLF8sVCk9''@;'; put 'put ''Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKF8sVCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwo''@;'; put 'put ''ZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlz''@;'; put 'put ''U3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckNlbGxNZXRhUmVzZXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmlu''@;'; put 'put ''ZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgp''@;'; put 'put ''PT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFm''@;'; put 'put ''dGVyRGV0YWNoQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVBdXRvZmlsbCguLi5hcmd1bWVudHMpfSksUjcodGhpcyxXeSkuZm9yRWFjaChkPT57bGV0W2gsZl09ZDtyZXR1cm4gdGhpcy5lbmdp''@;'; put 'put ''bmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7UjcodGhpcyxXeSkuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEsZCl9KSxGaWUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIFpQZShjKXt2YXIgbDtjb25zdCBhPWNbQ3VdO3JldHVybnsuLi5PaWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLC4uLlJp''@;'; put 'put ''ZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBZUGUoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGEp''@;'; put 'put ''O2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV07aWYoS2koZCkmJktpKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChkLnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBoPXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKClbQ3VdLnNoZWV0TmFtZTtoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKT90aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTp0aGlzLnNoZWV0TmFtZT10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJy''@;'; put 'put ''YXkoKSl9c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtSNyh0aGlzLFd5KS5mb3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1sO3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSkscjQodGhpcyxXeSxudWxsKSxGaWUodGhp''@;'; put 'put ''cy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgpfWFkZFNoZWV0KGwsYSl7aWYoS2koYSkmJiFwbmUoYSkpcmV0dXJuIEdhKCJUaGUgcHJvdmlkZWQgZGF0YSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMu''@;'; put 'put ''ZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBHYSgiU2hlZXQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRTaGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRl''@;'; put 'put ''bnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBHYShkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVldChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIHZvaWQgU04oYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5v''@;'; put 'put ''dCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7dGhpcy5zaGVldE5hbWU9bDtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRoaXMuaG90LmxvYWREYXRhKGEsYCR7YnUoQ3UpfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBl''@;'; put 'put ''KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVs''@;'; put 'put ''bCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxh''@;'; put 'put ''Q2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9t''@;'; put 'put ''VmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qg''@;'; put 'put ''ZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3QgXz1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAhPT1fJiYoZC5oYXMoXyl8fGQuYWRkKF8pKX0pLFBpZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3Zh''@;'; put 'put ''ciBfOyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0oXz1oLnZpZXcpfHx2b2lkIDA9PT1ffHxfLmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlkYXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIF87Y29uc3R7cm93OlQsY29s''@;'; put 'put ''Olcsc2hlZXQ6aWV9PW51bGwhPT0oXz1mPy5hZGRyZXNzKSYmdm9pZCAwIT09Xz9fOnt9O3JldHVybiBLaShpZSk/YCR7aWV9OiR7VH14JHtXfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+''@;'; put 'put ''ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIF8sVDtjb25zdHtyb3c6Vyxjb2w6aWV9PW51bGwhPT0oXz1mLmFkZHJlc3MpJiZ2b2lkIDAhPT1fP186e307aWYoITE9PT1LaShXKXx8ITE9PT1LaShpZSl8fFc+PXRoaXMuaG90LmNvdW50Um93cygpfHxpZT49dGhpcy5ob3QuY291bnRDb2xzKCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGdlPW51bGw9PWZ8fG51bGw9PT0oVD1mLmFkZHJlc3MpfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnNoZWV0LHdlPWQoZik7aWYodm9pZCAwIT09Z2UmJiFoLmhhcyh3ZSkpe2NvbnN0IEVlPVBpZSh0aGlzLmVuZ2luZSkuZ2V0KGdlKTtpZighRWUpcmV0dXJuO0VlLnZhbGlk''@;'; put 'put ''YXRlQ2VsbChFZS5nZXREYXRhQXRDZWxsKFcsaWUpLEVlLmdldENlbGxNZXRhKFcsaWUpLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1''@;'; put 'put ''bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkpcmV0dXJuIHZvaWQgR2EoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO3JldHVybiBleihkLGYudHlwZSkmJihWaWUoZCxmLmRhdGVGb3JtYXQpP2Q9QmllKGQsZi5kYXRlRm9ybWF0KTohMT09PWZ1bmN0aW9uIFFQZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMu''@;'; put 'put ''c3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfW9uQmVmb3JlVmFsaWRhdGUobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QucHJvcFRvQ29sKGQpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoYSxoKSl7Y29uc3QgZj17cm93''@;'; put 'put ''OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0aGlzLnNoZWV0SWR9LF89dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxoKTtsZXQgVD10aGlzLmVu''@;'; put 'put ''Z2luZS5nZXRDZWxsVmFsdWUoZik7cmV0dXJuImRhdGUiPT09Xy50eXBlJiZHdShUKSYmKFQ9amllKFQsXy5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiBUJiZudWxsIT09VD9ULnZhbHVlOlR9cmV0dXJuIGx9b25CZWZvcmVBdXRvZmlsbChsLGEsZCl7Y29uc3R7cm93OmgsY29sOmZ9''@;'; put 'put ''PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93Ol8sY29sOlR9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpXLGNvbDppZX09ZC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Z2UsY29sOndlfT1kLmdldEJvdHRvbUVuZENvcm5lcigpLEVlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5''@;'; put 'put ''bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KF8p''@;'; put 'put ''LGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxzaGVldDp0aGlzLnNoZWV0SWR9fSxaZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChXKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2Vy''@;'; put 'put ''LmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaWUpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZ2UpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleCh3ZSks''@;'; put 'put ''c2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaZSkpcmV0dXJuITE7Y29uc3Qgb3Q9dGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShFZSxaZSkse3JvdzpldCxjb2w6eXR9PUVlLnN0YXJ0LHtyb3c6a3QsY29s''@;'; put 'put ''OlN0fT1FZS5lbmQsUXQ9a3QtZXQrMSxybj1TdC15dCsxO2ZvcihsZXQgdm49MDt2bjxvdC5sZW5ndGg7dm4rPTEpZm9yKGxldCBObj0wO05uPG90W3ZuXS5sZW5ndGg7Tm4rPTEpe2NvbnN0IGNyPW90W3ZuXVtObl0sRHI9dm4lUXQsX2k9Tm4lcm4sbGk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEo''@;'; put 'put ''RHIsX2kpO2V6KGNyLGxpLnR5cGUpJiYoY3Iuc3RhcnRzV2l0aCgiJyIpP290W3ZuXVtObl09Y3Iuc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKERyLF9pLHRoaXMuc2hlZXRJZCkmJihvdFt2bl1bTm5dPWVGZShjcixsaS5kYXRlRm9ybWF0KSkpfXJldHVybiBvdH1vbkJl''@;'; put 'put ''Zm9yZUxvYWREYXRhKGwsYSl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYnUoQ3UpKXx8cjQodGhpcyxjeixMYSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1vbkFmdGVyQ2VsbE1ldGFSZXNldCgpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7bGV0IGE9ITE7bC5mb3JFYWNoKChkLGgpPT57ZC5mb3JFYWNoKChmLF8pPT57Y29uc3QgVD10aGlzLmhvdC5nZXRDZWxsTWV0YShoLF8pLFc9VC5kYXRlRm9ybWF0O2V6KGYsVC50eXBlKSYmKGE9ITAsVmllKGYsVyk/bFtoXVtf''@;'; put 'put ''XT1CaWUoZixXKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoaCxfKSYmKGxbaF1bX109YCcke2Z9YCkpfSl9KSwhMD09PWEmJihyNCh0aGlzLEtmLCEwKSx0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGwpLHI0KHRoaXMsS2YsITEpKX1vbkFmdGVyTG9hZERh''@;'; put 'put ''dGEobCxhKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYnUoQ3UpKSlpZih0aGlzLnNoZWV0TmFtZT1mdW5jdGlvbiBYUGUoYyxsKXtyZXR1cm4oTGEobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9''@;'; put 'put ''Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDdV0uc2hlZXROYW1lKSxSNyh0aGlzLGN6KSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5l''@;'; put 'put ''bmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7cjQodGhpcyxLZiwhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5l''@;'; put 'put ''bmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSxyNCh0aGlzLEtmLCExKX19fW9uTW9kaWZ5RGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fFI3KHRoaXMsS2YpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlz''@;'; put 'put ''dCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCk7aWYobnVsbD09PWZ8fG51bGw9PT1hKXJldHVybjtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShmLGEpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLGEpKXJldHVybiB2b2lkKE5p''@;'; put 'put ''ZShkLnZhbHVlKSYmKGQudmFsdWU9ZnVuY3Rpb24gSlBlKGMpe3JldHVybiBOaWUoYyk/Yy5zdWJzdHIoMSk6Y30oZC52YWx1ZSkpKTtjb25zdCBUPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5n''@;'; put 'put ''ZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07bGV0IFc9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKFQpO2NvbnN0IGllPXRoaXMuaG90LmdldENlbGxNZXRhKGYsYSk7ImRhdGUiPT09aWUudHlwZSYmR3UoVykmJihXPWppZShXLGllLmRhdGVGb3JtYXQp''@;'; put 'put ''KSxkLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgVyYmbnVsbCE9PVc/Vy52YWx1ZTpXfW9uTW9kaWZ5U291cmNlRGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fFI3KHRoaXMsS2YpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0''@;'; put 'put ''TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksXz10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYobnVsbD09PWZ8fG51bGw9PT1ffHwhdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShmLF8pJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLF8pKXJldHVybjtjb25z''@;'; put 'put ''dCBXPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PVcud2lkdGgmJjA9PT1XLmhlaWdodClyZXR1cm47Y29uc3QgaWU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoXyksc2hlZXQ6dGhpcy5zaGVldElkfTtkLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxTZXJpYWxpemVkKGllKX1vbkFmdGVyU2V0RGF0YUF0Q2VsbChsLGEpe2lmKE83KGEpKXJldHVy''@;'; put 'put ''bjtjb25zdCBkPVtdLGg9W10sZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2wuZm9yRWFjaChfPT57bGV0W1QsVywsaWVdPV87Y29uc3QgZ2U9dGhpcy5ob3QucHJvcFRvQ29sKFcpLHdlPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coVCksRWU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihnZSks''@;'; put 'put ''WmU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZ2UpLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PXdlJiZudWxsIT09RWU/dGhpcy5zeW5jQ2hh''@;'; put 'put ''bmdlV2l0aEVuZ2luZShULGdlLGllKTpkLnB1c2goW1QsZ2UsaWVdKSxoLnB1c2goe2FkZHJlc3M6WmV9KX0pfSk7ZC5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsKCk9Pntjb25zdCBfPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57ZC5mb3JFYWNoKFQ9PntsZXRb''@;'; put 'put ''VyxpZSxnZV09VDt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFcsaWUsZ2UpfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhfLCEwKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhmLGgpfW9uQWZ0ZXJTZXRTb3VyY2VE''@;'; put 'put ''YXRhQXRDZWxsKGwsYSl7aWYoTzcoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXTtsLmZvckVhY2goZj0+e2xldFtfLFQsLFddPWY7Y29uc3QgaWU9dGhpcy5ob3QucHJvcFRvQ29sKFQpO2lmKCFHdShpZSkpcmV0dXJuO2NvbnN0IGdlPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k''@;'; put 'put ''ZXhGcm9tVmlzdWFsSW5kZXgoXyksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGllKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGdlKT8oaC5wdXNoKHthZGRyZXNzOmdlfSks''@;'; put 'put ''ZC5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhnZSxXKSkpOkdhKGBOb3QgcG9zc2libGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShnZSl9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKSx0aGlzLnZhbGlkYXRlRGVwZW5k''@;'; put 'put ''ZW50Q2VsbHMoZCxoKX1vbkJlZm9yZUNyZWF0ZVJvdyhsLGEpe2xldCBkPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50Um93cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1No''@;'; put 'put ''ZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVDcmVhdGVDb2wobCxhKXtsZXQgZD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChsKTtpZihsPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGQ9bCksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2QsYV0pKXJl''@;'; put 'put ''dHVybiExfW9uQmVmb3JlUmVtb3ZlUm93KGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KF89PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW18sMV0pKSYmdm9pZCAwfW9uQmVm''@;'; put 'put ''b3JlUmVtb3ZlQ29sKGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KF89PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW18sMV0pKSYmdm9pZCAwfW9uQWZ0ZXJDcmVh''@;'; put 'put ''dGVSb3cobCxhLGQpe2lmKE83KGQpKXJldHVybjtjb25zdCBoPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxhXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaCl9b25BZnRlckNyZWF0''@;'; put 'put ''ZUNvbChsLGEsZCl7aWYoTzcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVy''@;'; put 'put ''UmVtb3ZlUm93KGwsYSxkLGgpe2lmKE83KGgpKXJldHVybjtjb25zdCBmPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgpLnJldmVyc2UoKSxfPXRoaXMuZW5naW5lLmJhdGNoKCgpPT57Zi5mb3JFYWNoKFQ9Pnt0aGlzLmVuZ2luZS5yZW1vdmVSb3dzKHRo''@;'; put 'put ''aXMuc2hlZXRJZCxbVCwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKF8pfW9uQWZ0ZXJSZW1vdmVDb2wobCxhLGQsaCl7aWYoTzcoaCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLF89''@;'; put 'put ''dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoXyl9b25BZnRlckRldGFjaENoaWxkKGwsYSxkKXt2YXIgaDtyNCh0aGlzLEtmLCEwKTtj''@;'; put 'put ''b25zdCBmPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShkLDAsZCsoKG51bGw9PT0oaD1hLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtyNCh0aGlzLEtmLCExKSxmLmZvckVhY2goKF8sVCk9PntfLmZv''@;'; put 'put ''ckVhY2goKFcsaWUpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6aWUscm93OmQrVCxzaGVldDp0aGlzLnNoZWV0SWR9LFtbV11dKX0pfSl9b25FbmdpbmVWYWx1ZXNVcGRhdGVkKGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixsKX1v''@;'; put 'put ''bkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNBZGRlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixsLGEpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQobCxhKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1v''@;'; put 'put ''dmVkIixsLGEpfW9uRW5naW5lU2hlZXRBZGRlZChsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIixsKX1vbkVuZ2luZVNoZWV0UmVuYW1lZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsbCxhKX1vbkVuZ2luZVNoZWV0UmVtb3ZlZChsLGEp''@;'; put 'put ''e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsbCxhKX19ZnVuY3Rpb24gV2llKGMsbCxhKXsoZnVuY3Rpb24geUZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MShjLGwpe3JldHVybiBmdW5jdGlvbiB3RmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLEdpZShjLGwsImdldCIpKX1mdW5jdGlvbiBHeShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IENGZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsR2llKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBH''@;'; put 'put ''aWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksc28uZ2V0''@;'; put 'put ''U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlQ29sdW1ucyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCB1ej0iaGlkZGVuQ29sdW1ucyI7''@;'; put 'put ''dmFyIENoPW5ldyBXZWFrTWFwLFNoPW5ldyBXZWFrTWFwO2NsYXNzIE1GZSBleHRlbmRzIFpze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxXaWUodGhpcyxDaCx7d3JpdGFibGU6ITAsdmFsdWU6e319KSxXaWUodGhpcyxTaCx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0''@;'; put 'put ''YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB1en1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3V6XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1''@;'; put 'put ''cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3V6XTt1cyhhKSYmKEd5KHRoaXMsQ2gsYSksTGEoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLEd5KHRoaXMsU2gsbmV3IHhrKSx3MSh0aGlzLFNoKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50''@;'; put 'put ''aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsdzEodGhpcyxTaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0''@;'; put 'put ''TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMub25Nb2RpZnlDb2xXaWR0''@;'; put 'put ''aChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkp''@;'; put 'put ''LHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVn''@;'; put 'put ''aW5OYW1lKSxHeSh0aGlzLENoLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5zKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXcxKHRoaXMsU2gp''@;'; put 'put ''LmdldFZhbHVlcygpLnNsaWNlKCksXz1sLmxlbmd0aD4wO2QmJl8mJihEbihsLm1hcChpZT0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihpZSkpLGllPT57ZltpZV09ITF9KSxoPUFsKGYsKGllLGdlLHdlKT0+KGdlJiZpZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHdlKSksaWUp''@;'; put 'put ''LFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJl8pJiYoZCYmXyYmdzEodGhpcyxTaCkuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1u''@;'; put 'put ''cyIsYSxoLGQmJl8sZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4''@;'; put 'put ''ZWN1dGlvbigoKT0+e0RuKGwsXz0+e3cxKHRoaXMsU2gpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKF8pLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVt''@;'; put 'put ''bigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiBjcyh3MSh0aGlzLFNoKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwpe3JldHVybiB3MSh0aGlzLFNoKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5p''@;'; put 'put ''c0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7RG4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wmJihsLnNraXBDb2x1bW5PblBhc3RlPSExKX0pfW9uTW9kaWZ5Q29sV2lkdGgobCxh''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pc0hpZGRlbihhKT8wOncxKHRoaXMsQ2gpLmluZGljYXRvcnMmJih0aGlzLmlzSGlkZGVuKGErMSl8fHRoaXMuaXNIaWRkZW4oYS0xKSkmJiJudW1iZXIiPT10eXBlb2YgbCYmdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2wrMTU6dm9pZCAwfW9uQWZ0ZXJHZXRDZWxs''@;'; put 'put ''TWV0YShsLGEsZCl7aWYoITE9PT13MSh0aGlzLENoKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGEpJiYoZC5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihhLTEpKWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2Yo''@;'; put 'put ''ImFmdGVySGlkZGVuQ29sdW1uIikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtm''@;'; put 'put ''Pi0xJiZoLnNwbGljZShmLDEpLGQuY2xhc3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKHcxKHRoaXMsQ2gpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7Y29uc3QgYT1bXSxkPShoLGYsXyxUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6Zixz''@;'; put 'put ''dGFydENvbDpfLGVuZENvbDpUfSl9O3JldHVybiBEbihsLGg9PntsZXQgZj0hMCxfPTA7dm8oaC5zdGFydENvbCxoLmVuZENvbCxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChoLnN0YXJ0Um93LGguZW5kUm93LF8sVC0xKSxmPSEwKTooZiYmKF89VCksVD09PWguZW5kQ29sJiZkKGguc3Rh''@;'; put 'put ''cnRSb3csaC5lbmRSb3csXyxUKSxmPSExKX0pfSksYX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7aWYoIXcxKHRoaXMsQ2gpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0xJiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxsPHRo''@;'; put 'put ''aXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSxwaShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpnc30sZnVuY3Rpb24gX0ZlKGMpe3JldHVybntrZXk6''@;'; put 'put ''ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaUIsYSl9LGNhbGxiYWNr''@;'; put 'put ''KCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxmPVtdO2ZvcihsZXQgVz1kO1c8PWg7Vys9MSlmLnB1c2goVyk7Yy5oaWRlQ29sdW1ucyhmKTtj''@;'; put 'put ''b25zdCBUPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVjdENvbHVtbnMoVCk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmll''@;'; put 'put ''dy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gYkZlKGMpe2NvbnN0''@;'; put 'put ''IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uob0IsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0x''@;'; put 'put ''XTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09''@;'; put 'put ''ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3Qg''@;'; put 'put ''YT1jcyhjLmdldEhpZGRlbkNvbHVtbnMoKSx3ZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKHdlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5s''@;'; put 'put ''ZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxfPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsVD1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVz1f''@;'; put 'put ''LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksaWU9Xy5nZXROb3RUcmltbWVkSW5kZXhlcygpLGdlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5XLVQrMSl7Y29uc3QgWmU9aWUuc2xpY2UoaCxmKzEpO2dlLnB1c2goLi4uWmUuZmlsdGVyKG90PT5hLmluY2x1ZGVzKG90KSkpfX1lbHNl''@;'; put 'put ''IGlmKDA9PT1UJiZUPGgpZ2UucHVzaCguLi5pZS5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1UKWdlLnB1c2goLi4uaWUuc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCB3ZT10aGlzLmNvdW50Q29scygpLTE7Vz09PV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChfLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwtMSkpJiZ3ZT5mJiZnZS5wdXNoKC4uLmllLnNsaWNlKGYrMSkpfXJldHVybiBEbihnZSx3ZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29sdW1uKHdlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0FycmF5Lmlz''@;'; put 'put ''QXJyYXkodzEodGhpcyxDaCkuY29sdW1ucykmJnRoaXMuaGlkZUNvbHVtbnModzEodGhpcyxDaCkuY29sdW1ucyl9ZGVzdHJveSgpe0d5KHRoaXMsQ2gsbnVsbCksR3kodGhpcyxTaCxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uICRpZShjLGwsYSl7KGZ1bmN0aW9uIGtGZShjLGwp''@;'; put 'put ''e2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gX2QoYyxsKXtyZXR1cm4gZnVuY3Rpb24gQUZlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxxaWUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gJHkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBURmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVt''@;'; put 'put ''cHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHFpZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gcWllKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9u''@;'; put 'put ''LWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVSb3dzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxz''@;'; put 'put ''by5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgZHo9ImhpZGRlblJvd3MiO3ZhciBYZj1uZXcgV2Vha01hcCxNaD1uZXcgV2Vha01hcDtjbGFzcyBJRmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksJGllKHRoaXMs''@;'; put 'put ''WGYse3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksJGllKHRoaXMsTWgse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKVtkel19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtkel07dXMoYSkmJigkeSh0aGlzLFhmLGEpLExhKGEuY29weVBhc3RlRW5hYmxlZCkmJihhLmNvcHlQYXN0ZUVu''@;'; put 'put ''YWJsZWQ9ITApKSwkeSh0aGlzLE1oLG5ldyB4ayksX2QodGhpcyxNaCkuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLF9kKHRoaXMsTWgpKSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoZCxoLGYpPT50aGlzLm9uQWZ0ZXJHZXRDZWxsTWV0YShk''@;'; put 'put ''LGgsZikpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5vbk1vZGlmeVJvd0hlaWdodChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSwkeSh0aGlzLFhmLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5S''@;'; put 'put ''b3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPV9kKHRoaXMsTWgpLmdldFZhbHVlcygpLnNsaWNlKCksXz1sLmxlbmd0aD4wO2QmJl8mJihEbihsLm1hcChpZT0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhpZSkpLGllPT57ZltpZV09ITF9KSxoPUFsKGYsKGll''@;'; put 'put ''LGdlLHdlKT0+KGdlJiZpZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93KHdlKSksaWUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJl8pJiYoZCYmXyYmX2QodGhpcyxNaCkuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''clVuaGlkZVJvd3MiLGEsaCxkJiZfLGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRp''@;'; put 'put ''b24oKCk9PntEbihsLF89PntfZCh0aGlzLE1oKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhfKSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4gY3MoX2QodGhpcyxNaCkuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1p''@;'; put 'put ''c0hpZGRlbihsKXtyZXR1cm4gX2QodGhpcyxNaCkuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwu''@;'; put 'put ''ZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe0RuKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsJiYobC5za2lwUm93T25QYXN0ZT0hMSl9KX1vbk1vZGlmeVJvd0hlaWdodChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6''@;'; put 'put ''bH1vbkFmdGVyR2V0Q2VsbE1ldGEobCxhLGQpe2lmKCExPT09X2QodGhpcyxYZikuY29weVBhc3RlRW5hYmxlZCYmdGhpcy5pc0hpZGRlbihsKSYmKGQuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4obC0xKSlkLmNsYXNzTmFtZT1kLmNsYXNzTmFtZXx8IiIsLTE9PT1kLmNsYXNz''@;'; put 'put ''TmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoZC5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGQuY2xhc3NOYW1lKXtjb25zdCBoPWQuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoaC5sZW5ndGg+MCl7Y29uc3QgZj1oLmluZGV4T2YoImFmdGVySGlkZGVuUm93''@;'; put 'put ''Iik7Zj4tMSYmaC5zcGxpY2UoZiwxKSxkLmNsYXNzTmFtZT1oLmpvaW4oIiAiKX19fW9uTW9kaWZ5Q29weWFibGVSYW5nZShsKXtpZihfZCh0aGlzLFhmKS5jb3B5UGFzdGVFbmFibGVkKXJldHVybiBsO2NvbnN0IGE9W10sZD0oaCxmLF8sVCk9PnthLnB1c2goe3N0YXJ0Um93OmgsZW5kUm93''@;'; put 'put ''OmYsc3RhcnRDb2w6XyxlbmRDb2w6VH0pfTtyZXR1cm4gRG4obCxoPT57bGV0IGY9ITAsXz0wO3ZvKGguc3RhcnRSb3csaC5lbmRSb3csVD0+e3RoaXMuaXNIaWRkZW4oVCk/KGZ8fGQoXyxULTEsaC5zdGFydENvbCxoLmVuZENvbCksZj0hMCk6KGYmJihfPVQpLFQ9PT1oLmVuZFJvdyYmZChf''@;'; put 'put ''LFQsaC5zdGFydENvbCxoLmVuZENvbCksZj0hMSl9KX0pLGF9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe2lmKCFfZCh0aGlzLFhmKS5pbmRpY2F0b3JzfHxsPDApcmV0dXJuO2NvbnN0IGQ9W107bD49MSYmdGhpcy5pc0hpZGRlbihsLTEpJiZkLnB1c2goImFmdGVySGlkZGVuUm93IiksbDx0''@;'; put 'put ''aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGwrMSkmJmQucHVzaCgiYmVmb3JlSGlkZGVuUm93IikscGkoYSxkKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtsLml0ZW1zLnB1c2goe25hbWU6Z3N9LGZ1bmN0aW9uIHhGZShjKXtyZXR1cm57a2V5OiJo''@;'; put 'put ''aWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbZCwsaF09bDtkLWghPTAmJihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc0IsYSl9LGNhbGxiYWNrKCl7Y29u''@;'; put 'put ''c3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwucm93LGEucm93KSwwKSxoPU1hdGgubWF4KGwucm93LGEucm93KSxmPVtdO2ZvcihsZXQgVz1kO1c8PWg7Vys9MSlmLnB1c2goVyk7Yy5oaWRlUm93cyhmKTtjb25zdCBUPXRo''@;'; put 'put ''aXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVjdFJvd3MoVCk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50''@;'; put 'put ''c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gRUZlKGMpe2NvbnN0IGw9W107cmV0dXJue2tleToi''@;'; put 'put ''aGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoYUIsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJv''@;'; put 'put ''d0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNo''@;'; put 'put ''b3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT1jcyhjLmdldEhpZGRlblJvd3MoKSx3ZT0+dGhpcy50''@;'; put 'put ''b1BoeXNpY2FsUm93KHdlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxfPXRoaXMucm93SW5kZXhNYXBwZXIsVD1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksVz1fLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksaWU9Xy5nZXROb3RU''@;'; put 'put ''cmltbWVkSW5kZXhlcygpLGdlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5XLVQrMSl7Y29uc3QgWmU9aWUuc2xpY2UoaCxmKzEpO2dlLnB1c2goLi4uWmUuZmlsdGVyKG90PT5hLmluY2x1ZGVzKG90KSkpfX1lbHNlIGlmKDA9PT1UJiZUPGgpZ2UucHVzaCguLi5pZS5zbGljZSgwLGgpKTtlbHNl''@;'; put 'put ''IGlmKG51bGw9PT1UKWdlLnB1c2goLi4uaWUuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCB3ZT10aGlzLmNvdW50Um93cygpLTE7Vz09PV8uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChfLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh3ZSwtMSkpJiZ3ZT5mJiZn''@;'; put 'put ''ZS5wdXNoKC4uLmllLnNsaWNlKGYrMSkpfXJldHVybiBEbihnZSx3ZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsUm93KHdlKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0FycmF5LmlzQXJyYXkoX2QodGhpcyxYZikucm93cykmJnRoaXMuaGlkZVJvd3MoX2QodGhpcyxY''@;'; put 'put ''Zikucm93cyl9ZGVzdHJveSgpeyR5KHRoaXMsWGYsbnVsbCksJHkodGhpcyxNaCxudWxsKSxzdXBlci5kZXN0cm95KCl9fXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5GcmVlemUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUi''@;'; put 'put ''KSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IEtpZT0ibWFudWFsQ29sdW1uRnJlZXplIixxeT1uZXcgV2Vha01hcDtjbGFzcyBQRmUgZXh0ZW5k''@;'; put 'put ''cyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gS2llfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxxeS5zZXQodGhpcyx7YWZ0ZXJGaXJzdFVzZTohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtLaWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLmFkZENvbnRleHRNZW51RW50cnkobCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9''@;'; put 'put ''PnRoaXMub25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7cXkuZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2U9ITEsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5h''@;'; put 'put ''YmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9cXkuZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+ZC5maXhlZENvbHVtbnNTdGFydC0xO2Eu''@;'; put 'put ''YWZ0ZXJGaXJzdFVzZXx8KGEuYWZ0ZXJGaXJzdFVzZT0hMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixsLGgpJiYoaCYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCksZC5fZml4ZWRDb2x1''@;'; put 'put ''bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsbCxoKSl9dW5mcmVlemVDb2x1bW4obCl7Y29uc3QgYT1xeS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydD4wJiZsPD1kLmZpeGVkQ29sdW1uc1N0''@;'; put 'put ''YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxoKSYmKGgmJihkLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhs''@;'; put 'put ''LGQuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxoKSl9YWRkQ29udGV4dE1lbnVFbnRyeShsKXtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIExGZShjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1u''@;'; put 'put ''IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShPVil9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGhpZGRlbigpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbDw9dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEpJiYoYT0hMCksYX19fSh0''@;'; put 'put ''aGlzKSxmdW5jdGlvbiBSRmUoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShQVil9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIo''@;'; put 'put ''KSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlz''@;'; put 'put ''LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9b25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSl7aWYocXkuZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2Upe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihhPGh8''@;'; put 'put ''fGwuc29tZShmPT5mPGgpKXJldHVybiExfX19Y29uc3QgUDc9InB4IixRaWU9Y2xhc3MgRkZle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRU''@;'; put 'put ''byhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVu''@;'; put 'put ''ZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBv''@;'; put 'put ''c2l0aW9uKGwsYSl7R3UobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK1A3KSxHdShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV09YStQNyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9w''@;'; put 'put ''YXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUobCxhKXtHdShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtQNyksR3UoYSkmJih0aGlzLl9lbGVtZW50LnN0''@;'; put 'put ''eWxlLmhlaWdodD1hK1A3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe0d1KGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtQNyksR3UoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke2J1KHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErUDcpfWdldE9mZnNldCgpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke2J1KHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUludChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sVkZlPWNsYXNzIE5GZSBleHRlbmRz''@;'; put 'put ''IFFpZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sekZlPWNsYXNzIGpGZSBleHRlbmRzIFFpZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1v''@;'; put 'put ''dmUtLWd1aWRlbGluZSIpfX07c28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7Y29uc3QgZno9Im1hbnVhbENvbHVtbk1vdmUiLGk0PW5ldyBXZWFrTWFwLGVvZT0iaHRfX21h''@;'; put 'put ''bnVhbENvbHVtbk1vdmUiLFJBPSJzaG93LXVpIixwej0ib24tbW92aW5nLS1jb2x1bW5zIixnej0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjtjbGFzcyBaRmUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZnp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFko''@;'; put 'put ''KXtyZXR1cm4gMTIwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGk0LnNldCh0aGlzLHtjb2x1bW5zVG9Nb3ZlOltdLGNvdW50Q29sczowLGZpeGVkQ29sdW1uczowLHByZXNzZWQ6dm9pZCAwLHRhcmdldDp7ZXZlbnRQYWdlWDp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAsY29sOnZv''@;'; put 'put ''aWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcgVkZlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyB6RmUobCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2Z6XX1lbmFi''@;'; put 'put ''bGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNl''@;'; put 'put ''T3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLm9uQWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0''@;'; put 'put ''YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxlb2UpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7V28odGhpcy5ob3Qucm9vdEVsZW1lbnQsZW9lKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJh''@;'; put 'put ''Y2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD1pNC5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJ''@;'; put 'put ''bmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxfPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9PT1fKXJldHVybjtmJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhs''@;'; put 'put ''LGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gaTQuZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZUNvbHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZElu''@;'; put 'put ''ZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCxfPWwuc29tZShXPT5XPDApLFQ9bC5zb21lKFc9Plc+PWQpO3JldHVybiEoaHx8Znx8X3x8VCl9aXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxh''@;'; put 'put ''KXtjb25zdCBkPUFsKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IF89ZC5nZXRSZW5kZXJhYmxlRnJv''@;'; put 'put ''bVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PV8mJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKF8pfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0''@;'; put 'put ''aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtmel07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVDb2x1bW5zKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVD''@;'; put 'put ''b2x1bW5zKGEsMCl9fWlzRml4ZWRDb2x1bW5zU3RhcnQobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydH1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3Zl''@;'; put 'put ''Iix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsQ29sdW1uTW92ZSIsbCksbC52YWx1ZT9sLnZh''@;'; put 'put ''bHVlOltdfXByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcobCxhKXtjb25zdCBkPVtdO3JldHVybiB2byhsLGEsaD0+e2QucHVzaChoKX0pLGR9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9aTQuZ2V0KHRoaXMpLGE9dGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO3Ro''@;'; put 'put ''aXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odm9pZCAwLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKTtjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGY9Im51bWJlciI9PXR5cGVvZiBoLnNjcm9sbFg/aC5zY3JvbGxYOmguc2Nyb2xsTGVmdDtsZXQgXz10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lk''@;'; put 'put ''dGgoMCxsLmhvdmVyZWRDb2x1bW4tMSk7Y29uc3QgVD1kLmhpZGVyLm9mZnNldFdpZHRoLFc9ZC5UQk9EWS5vZmZzZXRMZWZ0LGllPXRoaXMuYmFja2xpZ2h0LmdldE9mZnNldCgpLnN0YXJ0LGdlPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDtsZXQgd2U9MCxFZT0wO2lmKHRoaXMu''@;'; put 'put ''aG90LmlzUnRsKCkpe2NvbnN0IGV0PXRoaXMuaG90LnJvb3RXaW5kb3cseXQ9d2EodGhpcy5ob3Qucm9vdEVsZW1lbnQpO0VlPWV0LmlubmVyV2lkdGgtbC50YXJnZXQuZXZlbnRQYWdlWC0oZXQuaW5uZXJXaWR0aC1sLnJvb3RFbGVtZW50T2Zmc2V0LXl0KS0odm9pZCAwPT09aC5zY3JvbGxY''@;'; put 'put ''P2Y6MCl9ZWxzZSBFZT1sLnRhcmdldC5ldmVudFBhZ2VYLShsLnJvb3RFbGVtZW50T2Zmc2V0LSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKSk7bC5oYXNSb3dIZWFkZXJzJiYod2U9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5n''@;'; put 'put ''ZXRDb2x1bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQobC5ob3ZlcmVkQ29sdW1uKSYmKF8rPWYpLF8rPXdlLGwuaG92ZXJlZENvbHVtbjwwP2wudGFyZ2V0LmNvbD1sLmZpeGVkQ29sdW1uc1N0YXJ0PjA/MDphPjA/YS0xOmE6bC50YXJnZXQuVEQu''@;'; put 'put ''b2Zmc2V0V2lkdGgvMitfPD1FZT8obC50YXJnZXQuY29sPShsLmhvdmVyZWRDb2x1bW4+PWwuY291bnRDb2xzP2wuY291bnRDb2xzLTE6bC5ob3ZlcmVkQ29sdW1uKSsxLF8rPWwudGFyZ2V0LlRELm9mZnNldFdpZHRoKTpsLnRhcmdldC5jb2w9bC5ob3ZlcmVkQ29sdW1uO2xldCBaZT1FZSxv''@;'; put 'put ''dD1fO0VlK2dlK2llPj1UP1plPVQtZ2UtaWU6RWUraWU8Vyt3ZSYmKFplPVcrd2UrTWF0aC5hYnMoaWUpKSxfPj1ULTE/b3Q9VC0xOjA9PT1vdD9vdD0xOnZvaWQgMCE9PWguc2Nyb2xsWCYmbC5ob3ZlcmVkQ29sdW1uPGwuZml4ZWRDb2x1bW5zU3RhcnQmJihvdC09bC5yb290RWxlbWVudE9m''@;'; put 'put ''ZnNldDw9aC5zY3JvbGxYP2wucm9vdEVsZW1lbnRPZmZzZXQ6MCksdGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxaZSksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24obnVsbCxvdCl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKX11bnJlZ2lzdGVyRXZl''@;'; put 'put ''bnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsXz10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVD10aGlzLmhvdC5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpLFc9aTQuZ2V0KHRoaXMpLGllPUJvKGwudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIVR8fCFffHxXLnByZXNzZWR8fDAhPT1sLmJ1dHRvbnx8aWUpcmV0dXJuIFcucHJlc3NlZD0hMSxXLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsdm9pZCBXbyh0aGlzLmhvdC5yb290''@;'; put 'put ''RWxlbWVudCxbcHosUkFdKTtjb25zdCBnZT10aGlzLmd1aWRlbGluZS5pc0J1aWx0KCkmJiF0aGlzLmd1aWRlbGluZS5pc0FwcGVuZGVkKCksd2U9dGhpcy5iYWNrbGlnaHQuaXNCdWlsdCgpJiYhdGhpcy5iYWNrbGlnaHQuaXNBcHBlbmRlZCgpO2dlJiZ3ZSYmKHRoaXMuZ3VpZGVsaW5lLmFw''@;'; put 'put ''cGVuZFRvKGYuaGlkZXIpLHRoaXMuYmFja2xpZ2h0LmFwcGVuZFRvKGYuaGlkZXIpKTtjb25zdHtmcm9tOkVlLHRvOlplfT1ULG90PU1hdGgubWluKEVlLmNvbCxaZS5jb2wpLGV0PU1hdGgubWF4KEVlLmNvbCxaZS5jb2wpO2lmKGEucm93PDAmJmEuY29sPj1vdCYmYS5jb2w8PWV0KXtoLmNv''@;'; put 'put ''bHVtbj0hMCxXLnByZXNzZWQ9ITAsVy50YXJnZXQuZXZlbnRQYWdlWD1sLnBhZ2VYLFcudGFyZ2V0LmV2ZW50T2Zmc2V0WD1sLm9mZnNldFgsVy5ob3ZlcmVkQ29sdW1uPWEuY29sLFcudGFyZ2V0LlREPWQsVy50YXJnZXQuY29sPWEuY29sLFcuY29sdW1uc1RvTW92ZT10aGlzLnByZXBhcmVD''@;'; put 'put ''b2x1bW5zVG9Nb3Zpbmcob3QsZXQpLFcuaGFzUm93SGVhZGVycz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyxXLmNvdW50Q29scz10aGlzLmhvdC5jb3VudENvbHMoKSxXLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3Rh''@;'; put 'put ''cnQsVy5yb290RWxlbWVudE9mZnNldD1xbCh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdDtjb25zdCB5dD1XLmhhc1Jvd0hlYWRlcnM/LTE6MCxrdD1mLmhvbGRlci5zY3JvbGxUb3ArZi5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxTdD1hLmNvbDxXLmZpeGVkQ29sdW1uc1N0YXJ0LFF0''@;'; put 'put ''PU1hdGguYWJzKHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLHJuPU1hdGguYWJzKGwub2Zmc2V0WC0odGhpcy5ob3QuaXNSdGwoKT9sLnRhcmdldC5vZmZzZXRXaWR0aDowKSksdm49dGhpcy5nZXRDb2x1bW5zV2lk''@;'; put 'put ''dGgob3QsYS5jb2wtMSkrcm4sTm49dGhpcy5nZXRDb2x1bW5zV2lkdGgoeXQsb3QtMSkrKFN0P1F0OjApK3ZuO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKGt0LE5uKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKG90LGV0KSxmLmhpZGVyLm9mZnNldEhl''@;'; put 'put ''aWdodC1rdCksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KG51bGwsLXZuKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxweil9ZWxzZSBXbyh0aGlzLmhvdC5yb290RWxlbWVudCxneiksVy5wcmVzc2VkPSExLFcuY29sdW1uc1RvTW92ZS5sZW5ndGg9MH1vbk1vdXNlTW92ZShsKXtjb25zdCBh''@;'; put 'put ''PWk0LmdldCh0aGlzKTtpZihhLnByZXNzZWQpe2lmKGwudGFyZ2V0PT09dGhpcy5iYWNrbGlnaHQuZWxlbWVudCl7Y29uc3QgZD10aGlzLmJhY2tsaWdodC5nZXRTaXplKCkud2lkdGg7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZSgwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5iYWNrbGln''@;'; put 'put ''aHQuc2V0UG9zaXRpb24oZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VYPWwucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVmb3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxfPWk0LmdldCh0aGlzKTshZnx8''@;'; put 'put ''IV8ucHJlc3NlZHx8KF8uY29sdW1uc1RvTW92ZS5pbmRleE9mKGEuY29sKT4tMT9Xbyh0aGlzLmhvdC5yb290RWxlbWVudCxSQSk6cGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsUkEpLGgucm93PSEwLGguY29sdW1uPSEwLGguY2VsbD0hMCxfLmhvdmVyZWRDb2x1bW49YS5jb2wsXy50YXJnZXQu''@;'; put 'put ''VEQ9ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD1pNC5nZXQodGhpcyksYT1sLnRhcmdldC5jb2wsZD1sLmNvbHVtbnNUb01vdmUubGVuZ3RoO2lmKGwuaG92ZXJlZENvbHVtbj12b2lkIDAsbC5wcmVzc2VkPSExLGwuYmFja2xpZ2h0V2lkdGg9MCxXbyh0aGlzLmhvdC5yb290RWxlbWVudCxbcHos''@;'; put 'put ''UkEsZ3pdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJnBpKHRoaXMuaG90LnJvb3RFbGVtZW50LGd6KSxkPDF8fHZvaWQgMD09PWEpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsLmNvbHVtbnNUb01vdmVbMF0pLF89dGhp''@;'; put 'put ''cy5kcmFnQ29sdW1ucyhsLmNvbHVtbnNUb01vdmUsYSk7aWYobC5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wLCEwPT09Xyl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApO2NvbnN0IFQ9dGhpcy5o''@;'; put 'put ''b3QudG9WaXN1YWxDb2x1bW4oZik7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhULFQrZC0xKX19b25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD1sLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2wuaG9sZGVyLnNjcm9sbFRvcDt0''@;'; put 'put ''aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsbC5oaWRlci5vZmZzZXRIZWlnaHQtaCl9YnVpbGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlz''@;'; put 'put ''Lm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJveSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBPQT0ibWFudWFsQ29sdW1uUmVzaXplIix0b2U9Im1hbnVhbENvbHVtbldpZHRocyIsbXo9bmV3IFdl''@;'; put 'put ''YWtNYXA7Y2xhc3MgV0ZlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE9BfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJy''@;'; put 'put ''ZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRDb2w9bnVsbCx0aGlzLnNlbGVjdGVkQ29scz1bXSx0aGlzLmN1cnJlbnRXaWR0aD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGwsdGhpcy5zdGFydFdpZHRoPW51bGwsdGhpcy5zdGFydE9mZnNldD1udWxsLHRoaXMuaGFuZGxl''@;'; put 'put ''PWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ndWlkZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLnByZXNzZWQ9bnVsbCx0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITEsdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRp''@;'; put 'put ''bWVvdXQ9bnVsbCx0aGlzLmNvbHVtbldpZHRoc01hcD12b2lkIDAsbXouc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSxwaSh0aGlzLmhhbmRsZSwibWFudWFsQ29sdW1uUmVzaXplciIpLHBpKHRoaXMuZ3VpZGUsIm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPQV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IFdwLHRoaXMuY29sdW1uV2lkdGhzTWFwLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGwsYSk9PnRoaXMub25Nb2Rp''@;'; put 'put ''ZnlDb2xXaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsKGwsYSk9PnRoaXMub25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVD''@;'; put 'put ''b2x1bW5SZXNpemUobCxhLGQpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7bXouZ2V0KHRoaXMp''@;'; put 'put ''LmNvbmZpZz10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlU2F2ZSIsdG9lLHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHRvZSxsKSxsLnZhbHVlfXNldE1hbnVh''@;'; put 'put ''bFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gdGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29s''@;'; put 'put ''dW1uKGwpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfW9uTWFwSW5pdCgpe2NvbnN0IGw9bXouZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPQV0sZD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgZDwidSI/dGhpcy5o''@;'; put 'put ''b3QuYmF0Y2hFeGVjdXRpb24oKCk9PntkLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PnthLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVt''@;'; put 'put ''bldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCksbC5jb25maWc9YSk6ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFs''@;'; put 'put ''dWVBdEluZGV4KGYsaCl9KX0sITApfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47dGhpcy5jdXJyZW50VEg9bDtjb25zdHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLGg9ZC5jb2w7aWYoaDww''@;'; put 'put ''KXJldHVybjtjb25zdCBmPWFsKHRoaXMuY3VycmVudFRIKSxfPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBXO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpJiYoVz1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Lmdl''@;'; put 'put ''dFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGQucm93LGQuY29sKSksV3x8KFc9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsZC5yb3csZC5jb2wpKSx0aGlzLmN1cnJlbnRDb2w9dGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSx0aGlzLnNlbGVjdGVkQ29scz1bXTtjb25zdCBpZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlz''@;'; put 'put ''LmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZpZSYmRG4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLHdlPT57dm8od2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsd2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLG90PT57dGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXMob3QpfHx0''@;'; put 'put ''aGlzLnNlbGVjdGVkQ29scy5wdXNoKG90KX0pfSksdGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXModGhpcy5jdXJyZW50Q29sKXx8KHRoaXMuc2VsZWN0ZWRDb2xzPVt0aGlzLmN1cnJlbnRDb2xdKSx0aGlzLnN0YXJ0T2Zmc2V0PVcuc3RhcnQtNix0aGlzLnN0YXJ0V2lkdGg9cGFyc2VJbnQo''@;'; put 'put ''Xy53aWR0aCwxMCksdGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke1cudG9wfXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLnN0YXJ0V2lkdGh9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5y''@;'; put 'put ''b290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5jdXJyZW50V2lkdGh9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9''@;'; put 'put ''cGFyc2VJbnQoYWwodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxlLnN0eWxlLnRvcCwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KDApLDEwKTtwaSh0aGlzLmhhbmRsZSwiYWN0aXZlIikscGkodGhpcy5ndWlk''@;'; put 'put ''ZSwiYWN0aXZlIiksdGhpcy5ndWlkZS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLHRoaXMuZ3VpZGUuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ3VpZGUpfXJlZnJlc2hHdWlkZVBvc2l0''@;'; put 'put ''aW9uKCl7dGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe1dvKHRoaXMuaGFuZGxlLCJhY3RpdmUiKSxXbyh0aGlzLmd1aWRlLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwp''@;'; put 'put ''e3JldHVybiEhTnAobCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9b25Nb3VzZU92''@;'; put 'put ''ZXIobCl7aWYoIWdOKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJZkNvbHVtbkhlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC50YXJnZXQpO2lmKCFhKXJldHVybjtjb25zdCBkPWEuZ2V0QXR0cmlidXRl''@;'; put 'put ''KCJjb2xzcGFuIik7YSYmKG51bGw9PT1kfHwiMSI9PT1kKSYmKHRoaXMucHJlc3NlZHx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRl''@;'; put 'put ''cigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXplLGQsITApO3ZvaWQgMCE9PWYmJih0aGlzLm5ld1NpemU9ZiksImFsbCI9PT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLnN0cmV0Y2hIP3RoaXMuY2xlYXJNYW51YWxTaXplKGQpOnRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMubmV3U2l6ZSksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwh''@;'; put 'put ''MCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZENvbHMubGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoLCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGlt''@;'; put 'put ''ZW91dD1udWxsfW9uTW91c2VEb3duKGwpe0JvKGwudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0dXBHdWlkZVBvc2l0aW9uKCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNp''@;'; put 'put ''emVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0aGlzLmF1dG9yZXNpemVUaW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WD1s''@;'; put 'put ''LnBhZ2VYLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0V2lkdGgpfW9uTW91c2VNb3ZlKGwpe2lmKHRoaXMucHJlc3NlZCl7Y29uc3QgYT0obC5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCk7dGhpcy5jdXJyZW50V2lkdGg9dGhpcy5zdGFydFdpZHRoK2Es''@;'; put 'put ''RG4odGhpcy5zZWxlY3RlZENvbHMsZD0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLmN1cnJlbnRXaWR0aCl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19b25Nb3VzZVVwKCl7Y29uc3QgbD0oKT0+e3Ro''@;'; put 'put ''aXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKSxoJiZsKCksdGhp''@;'; put 'put ''cy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRoaXMubmV3U2l6ZSE9PXRoaXMuc3Rh''@;'; put 'put ''cnRXaWR0aCYmKHRoaXMuc2VsZWN0ZWRDb2xzLmxlbmd0aD4xPyhEbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoKX0pLGwoKSk6RG4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVudFRIKSl9b25Db250ZXh0TWVu''@;'; put 'put ''dSgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5oYW5kbGUpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuZ3VpZGUpLHRoaXMucHJlc3NlZD0hMSx0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITAsdGhp''@;'; put 'put ''cy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57dGhpcy5pc1RyaWdnZXJlZEJ5Uk1CPSExfSl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+''@;'; put 'put ''dGhpcy5vbk1vdXNlT3ZlcihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQp''@;'; put 'put ''KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaGFuZGxlLCJjb250ZXh0bWVudSIsKCk9PnRoaXMub25Db250ZXh0TWVudSgpKX1vbk1vZGlm''@;'; put 'put ''eUNvbFdpZHRoKGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxmPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW09BXSYmZiYmKGQ9Zil9cmV0dXJuIGR9''@;'; put 'put ''b25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKXtsZXQgZD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxkfW9uQmVmb3JlQ29sdW1uUmVzaXplKCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhh''@;'; put 'put ''c092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCBGNz0icHgiLGlvZT1jbGFzcyBHRmV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWFwcGVuZFRvKGwpe2wuYXBwZW5k''@;'; put 'put ''Q2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5f''@;'; put 'put ''ZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5zdGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2''@;'; put 'put ''b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCtGNyksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK0Y3KX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50''@;'; put 'put ''b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtGNyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErRjcp''@;'; put 'put ''fWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6''@;'; put 'put ''MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrRjcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YStGNyl9Z2V0T2Zmc2V0KCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlz''@;'; put 'put ''Ll9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTApOjB9fX0sS0ZlPWNsYXNzIHFGZSBleHRlbmRzIGlvZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCks''@;'; put 'put ''cGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCIpfX0sUUZlPWNsYXNzIEpGZSBleHRlbmRzIGlvZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCkscGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07c28uZ2V0U2luZ2xldG9u''@;'; put 'put ''KCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QgX3o9Im1hbnVhbFJvd01vdmUiLG80PW5ldyBXZWFrTWFwLG9vZT0iaHRfX21hbnVhbFJvd01vdmUiLFBBPSJzaG93LXVpIixiej0ib24tbW92aW5nLS1y''@;'; put 'put ''b3dzIix5ej0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjtjbGFzcyB0SGUgZXh0ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gX3p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTQwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLG80LnNldCh0aGlzLHty''@;'; put 'put ''b3dzVG9Nb3ZlOltdLHByZXNzZWQ6dm9pZCAwLHRhcmdldDp7ZXZlbnRQYWdlWTp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAscm93OnZvaWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcg''@;'; put 'put ''S0ZlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyBRRmUobCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW196XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJh''@;'; put 'put ''ZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbEhvcml6b250YWxseSgpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0''@;'; put 'put ''aGlzLnJlZ2lzdGVyRXZlbnRzKCkscGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsb29lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBk''@;'; put 'put ''YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe1dvKHRoaXMuaG90LnJvb3RFbGVtZW50LG9vZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMuZ3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEp''@;'; put 'put ''e3JldHVybiB0aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2NvbnN0IGQ9bzQuZ2V0KHRoaXMpLGg9ZC5jYWNoZWREcm9wSW5kZXgsZj10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksXz10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGgsZik7aWYoZC5jYWNo''@;'; put 'put ''ZWREcm9wSW5kZXg9dm9pZCAwLCExPT09XylyZXR1cm47ZiYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCBUPWYmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGgsZixU''@;'; put 'put ''KSxUfWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIG80LmdldCh0aGlzKS5jYWNoZWREcm9wSW5kZXg9YSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9zc2libGUo''@;'; put 'put ''bCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsXz1sLnNvbWUoVz0+VzwwKSxUPWwuc29tZShXPT5XPj1kKTtyZXR1cm4hKGh8fGZ8fF98fFQpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7''@;'; put 'put ''cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1BbChsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRSb3dzSGVpZ2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0wO2Zvcihs''@;'; put 'put ''ZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCBfPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09XyYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KF8pfHwyMyl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''aG90LmdldFNldHRpbmdzKClbX3pdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwpe3Jl''@;'; put 'put ''dHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0b20obCl7cmV0dXJuIGw+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3Qu''@;'; put 'put ''cnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dzVG9Nb3ZpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1bXTtpZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gdm8oTWF0aC5t''@;'; put 'put ''aW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxUPT57YS5wdXNoKFQpfSksYX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1vNC5nZXQodGhpcyksYT1sLnRhcmdldC5jb29yZHMsZD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhv''@;'; put 'put ''dC52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKSxmPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChhLnJvdykmJmQ+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0x''@;'; put 'put ''LC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGEucm93KSYmaDxmJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoKzEsMSksdm9pZCAwLCEwKTtjb25zdCBfPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFi''@;'; put 'put ''bGUsVD1sLnRhcmdldC5URCxXPXRoaXMuaG90LnJvb3RFbGVtZW50LGllPXFsKFcpLGdlPXZnKFcpO2xldCBFZTtFZT10aGlzLmhvdC5yb290V2luZG93PT09Z2U/Z2Uuc2Nyb2xsWTpnZS5zY3JvbGxUb3A7Y29uc3Qgb3Q9bC50YXJnZXQuZXZlbnRQYWdlWS0oaWUudG9wLUVlKStfLmhvbGRl''@;'; put 'put ''ci5zY3JvbGxUb3AsZXQ9Xy5oaWRlci5vZmZzZXRIZWlnaHQseXQ9Xy5UQk9EWS5vZmZzZXRUb3Asa3Q9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkudG9wLFN0PXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQsUXQ9VC5vZmZzZXRIZWlnaHQvMixybj1ULm9mZnNldEhlaWdodDts''@;'; put 'put ''ZXQgdm49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVpZ2h0KDAsYS5yb3ctMSk7Y29uc3QgTm49b3Q+PXZuK1F0O3RoaXMuaXNGaXhlZFJvd1RvcChhLnJvdykmJih2bis9Xy5ob2xkZXIuc2Nyb2xsVG9wKSxhLnJvdzwwP2wudGFyZ2V0LnJvdz1kPjA/''@;'; put 'put ''ZC0xOmQ6Tm4/KGwudGFyZ2V0LnJvdz1hLnJvdysxLHZuKz0wPT09YS5yb3c/cm4tMTpybik6bC50YXJnZXQucm93PWEucm93O2xldCBjcj1vdCxEcj12bjtvdCtTdCtrdD49ZXQ/Y3I9ZXQtU3Qta3Q6b3Qra3Q8eXQmJihjcj15dCtNYXRoLmFicyhrdCkpLHZuPj1ldC0xJiYoRHI9ZXQtMSks''@;'; put 'put ''dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oY3IpLHRoaXMuZ3VpZGVsaW5lLnNldFBvc2l0aW9uKERyKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJt''@;'; put 'put ''b3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uQmVmb3JlT25DZWxsTW91''@;'; put 'put ''c2VEb3duKGwsYSxkLGgpe2NvbnN0e3d0VGFibGU6Zix3dFZpZXdwb3J0Ol99PXRoaXMuaG90LnZpZXcuX3d0LFQ9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFc9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxpZT1vNC5nZXQodGhpcyk7aWYoIVd8''@;'; put 'put ''fCFUfHxpZS5wcmVzc2VkfHwwIT09bC5idXR0b24pcmV0dXJuIGllLnByZXNzZWQ9ITEsaWUucm93c1RvTW92ZS5sZW5ndGg9MCx2b2lkIFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtieixQQV0pO2NvbnN0IGdlPXRoaXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlz''@;'; put 'put ''QXBwZW5kZWQoKSx3ZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7Z2UmJndlJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciksdGhpcy5iYWNrbGlnaHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206RWUsdG86WmV9''@;'; put 'put ''PVcsb3Q9TWF0aC5taW4oRWUucm93LFplLnJvdyksZXQ9TWF0aC5tYXgoRWUucm93LFplLnJvdyk7aWYoYS5jb2w8MCYmYS5yb3c+PW90JiZhLnJvdzw9ZXQpe2gucm93PSEwLGllLnByZXNzZWQ9ITAsaWUudGFyZ2V0LmV2ZW50UGFnZVk9bC5wYWdlWSxpZS50YXJnZXQuY29vcmRzPWEsaWUu''@;'; put 'put ''dGFyZ2V0LlREPWQsaWUucm93c1RvTW92ZT10aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKTtjb25zdCB5dD1mLmhvbGRlci5zY3JvbGxMZWZ0K18uZ2V0Um93SGVhZGVyV2lkdGgoKTt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLHl0KSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGYu''@;'; put 'put ''aGlkZXIub2Zmc2V0V2lkdGgteXQsdGhpcy5nZXRSb3dzSGVpZ2h0KG90LGV0KSksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KC0xKih0aGlzLmdldFJvd3NIZWlnaHQob3QsYS5yb3ctMSkrbC5vZmZzZXRZKSxudWxsKSxwaSh0aGlzLmhvdC5yb290RWxlbWVudCxieiksdGhpcy5yZWZyZXNo''@;'; put 'put ''UG9zaXRpb25zKCl9ZWxzZSBXbyh0aGlzLmhvdC5yb290RWxlbWVudCx5eiksaWUucHJlc3NlZD0hMSxpZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9bzQuZ2V0KHRoaXMpO2lmKGEucHJlc3NlZCl7aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVt''@;'; put 'put ''ZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQ7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShudWxsLDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihudWxsLGQpfSl9YS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLHRo''@;'; put 'put ''aXMucmVmcmVzaFBvc2l0aW9ucygpfX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksXz1vNC5nZXQodGhpcyk7IWZ8fCFfLnByZXNzZWR8fChfLnJvd3NUb01vdmUuaW5kZXhPZihhLnJvdyk+LTE/V28odGhp''@;'; put 'put ''cy5ob3Qucm9vdEVsZW1lbnQsUEEpOnBpKHRoaXMuaG90LnJvb3RFbGVtZW50LFBBKSxoLnJvdz0hMCxoLmNvbHVtbj0hMCxoLmNlbGw9ITAsXy50YXJnZXQuY29vcmRzPWEsXy50YXJnZXQuVEQ9ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD1vNC5nZXQodGhpcyksYT1sLnRhcmdldC5yb3csZD1s''@;'; put 'put ''LnJvd3NUb01vdmUubGVuZ3RoO2lmKGwucHJlc3NlZD0hMSxsLmJhY2tsaWdodEhlaWdodD0wLFdvKHRoaXMuaG90LnJvb3RFbGVtZW50LFtieixQQSx5el0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmcGkodGhpcy5ob3Qucm9vdEVsZW1lbnQseXopLGQ8''@;'; put 'put ''MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwucm93c1RvTW92ZVswXSksXz10aGlzLmRyYWdSb3dzKGwucm93c1RvTW92ZSxhKTtpZihsLnJvd3NUb01vdmUubGVuZ3RoPTAsITA9PT1fKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlz''@;'; put 'put ''LmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTt0aGlzLmhvdC5zZWxlY3RSb3dzKFQsVCtkLTEpfX1vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93''@;'; put 'put ''dC53dFRhYmxlLGg9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2wuaG9sZGVyLnNjcm9sbExlZnQ7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGwuaGlkZXIub2Zmc2V0V2lkdGgtaCl9YnVp''@;'; put 'put ''bGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJveSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCks''@;'; put 'put ''c3VwZXIuZGVzdHJveSgpfX1jb25zdCBGQT0ibWFudWFsUm93UmVzaXplIixzb2U9Im1hbnVhbFJvd0hlaWdodHMiLHd6PW5ldyBXZWFrTWFwO2NsYXNzIHJIZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBGQX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgp''@;'; put 'put ''e3JldHVybiAzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJyZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRSb3c9bnVsbCx0aGlzLnNlbGVjdGVkUm93cz1bXSx0aGlzLmN1cnJlbnRIZWlnaHQ9bnVsbCx0aGlzLm5ld1NpemU9''@;'; put 'put ''bnVsbCx0aGlzLnN0YXJ0WT1udWxsLHRoaXMuc3RhcnRIZWlnaHQ9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmd1aWRlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGxsKHRoaXMp''@;'; put 'put ''LHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMucm93SGVpZ2h0c01hcD12b2lkIDAsd3ouc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSxwaSh0aGlzLmhhbmRsZSwibWFudWFs''@;'; put 'put ''Um93UmVzaXplciIpLHBpKHRoaXMuZ3VpZGUsIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGQV19ZW5hYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5lbmFibGVkfHwodGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBXcCx0aGlzLnJvd0hlaWdodHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMucm93''@;'; put 'put ''SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGwsYSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJs''@;'; put 'put ''ZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt3ei5nZXQodGhpcykuY29uZmlnPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLHNvZSx0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9v''@;'; put 'put ''a3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLHNvZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1heChhLG9uZS5ERUZBVUxUX0hFSUdIVCk7cmV0dXJuIHRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5k''@;'; put 'put ''ZXgoZCxoKSxofXNldHVwSGFuZGxlUG9zaXRpb24obCl7dGhpcy5jdXJyZW50VEg9bDtjb25zdHt2aWV3OmF9PXRoaXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCBfPXdhKHRoaXMuY3VycmVu''@;'; put 'put ''dFRIKSxUPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFc9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGllPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgZ2U7Vz9nZT1kLnd0''@;'; put 'put ''T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGgucm93LGguY29sKTppZSYmKGdlPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24o''@;'; put 'put ''dGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpKSxnZXx8KGdlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpKSx0aGlzLmN1cnJlbnRSb3c9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSx0aGlzLnNlbGVjdGVkUm93cz1bXTtjb25zdCB3ZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNT''@;'; put 'put ''ZWxlY3RlZCgpJiZ3ZSYmRG4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLFplPT57dm8oWmUuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csWmUuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cseXQ9Pnt0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh5dCl8fHRoaXMuc2VsZWN0ZWRSb3dz''@;'; put 'put ''LnB1c2goeXQpfSl9KSx0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRSb3cpfHwodGhpcy5zZWxlY3RlZFJvd3M9W3RoaXMuY3VycmVudFJvd10pLHRoaXMuc3RhcnRPZmZzZXQ9Z2UudG9wLTYsdGhpcy5zdGFydEhlaWdodD1wYXJzZUludChULmhlaWdodCwxMCksdGhp''@;'; put 'put ''cy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5zdGFydEhlaWdodH1weGAsdGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2dlLnN0YXJ0fXB4YCx0aGlzLmhhbmRsZS5zdHlsZS53aWR0aD1gJHtffXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5h''@;'; put 'put ''cHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5jdXJyZW50SGVpZ2h0fXB4YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KHdhKHRoaXMuaGFuZGxl''@;'; put 'put ''KSwxMCksYT1wYXJzZUludCh0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD1wYXJzZUludCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKDApLDEwKTtwaSh0aGlzLmhhbmRsZSwiYWN0aXZlIikscGkodGhpcy5ndWlkZSwiYWN0aXZlIiks''@;'; put 'put ''dGhpcy5ndWlkZS5zdHlsZS50b3A9dGhpcy5oYW5kbGUuc3R5bGUudG9wLHRoaXMuZ3VpZGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLHRoaXMuZ3VpZGUuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVm''@;'; put 'put ''cmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhhbmRsZS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7V28odGhpcy5oYW5kbGUsImFjdGl2ZSIpLFdvKHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7dmFyIGE7cmV0dXJu''@;'; put 'put ''IE5wKGwsWyJUSCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSYmIlRCT0RZIj09PShudWxsPT09KGE9bC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YXx8bnVsbD09PShhPWEucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudGFnTmFtZSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVy''@;'; put 'put ''biJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3QgYT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09YSYmdGhpcy5uZXdTaXplPGE/YTp0aGlzLm5ld1NpemV9b25Nb3VzZU92ZXIobCl7aWYoIWdOKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJZlJvd0hlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQo''@;'; put 'put ''bC50YXJnZXQpO2EmJih0aGlzLnByZXNzZWR8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihhKSl9fWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQgMCE9PWYmJih0aGlzLm5ld1NpemU9ZiksdGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdT''@;'; put 'put ''aXplKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07dGhpcy5kYmxjbGljaz49MiYmKHRoaXMuc2VsZWN0ZWRSb3dzLmxlbmd0aD4xPyhEbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoKX0pLGwoKSk6''@;'; put 'put ''RG4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCwhMCl9KSksdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbH1vbk1vdXNlRG93bihsKXtCbyhsLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVu''@;'; put 'put ''dFRIKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLHRoaXMucHJlc3NlZD0hMCxudWxsPT09dGhpcy5hdXRvcmVzaXplVGltZW91dCYmKHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApLHRoaXMuaG90Ll9yZWdp''@;'; put 'put ''c3RlclRpbWVvdXQodGhpcy5hdXRvcmVzaXplVGltZW91dCkpLHRoaXMuZGJsY2xpY2srPTEsdGhpcy5zdGFydFk9bC5wYWdlWSx0aGlzLm5ld1NpemU9dGhpcy5zdGFydEhlaWdodCl9b25Nb3VzZU1vdmUobCl7dGhpcy5wcmVzc2VkJiYodGhpcy5jdXJyZW50SGVpZ2h0PXRoaXMuc3RhcnRI''@;'; put 'put ''ZWlnaHQrKGwucGFnZVktdGhpcy5zdGFydFkpLERuKHRoaXMuc2VsZWN0ZWRSb3dzLGE9Pnt0aGlzLm5ld1NpemU9dGhpcy5zZXRNYW51YWxTaXplKGEsdGhpcy5jdXJyZW50SGVpZ2h0KX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigp''@;'; put 'put ''KX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhp''@;'; put 'put ''cy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSksaCYmbCgpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITEpfTt0aGlzLnByZXNzZWQmJih0aGlzLmhpZGVIYW5kbGVB''@;'; put 'put ''bmRHdWlkZSgpLHRoaXMucHJlc3NlZD0hMSx0aGlzLm5ld1NpemUhPT10aGlzLnN0YXJ0SGVpZ2h0JiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KERuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9PnthKGgpfSksbCgpKTpEbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoLCEwKX0pKSx0aGlz''@;'; put 'put ''LnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5n''@;'; put 'put ''dWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3Ro''@;'; put 'put ''aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5k''@;'; put 'put ''bGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoaCk7''@;'; put 'put ''dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGQV0mJmYmJihkPWYpfXJldHVybiBkfW9uTWFwSW5pdCgpe2NvbnN0IGw9d3ouZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtGQV0sZD10aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9''@;'; put 'put ''Pnt0eXBlb2YgZDwidSI/ZC5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSk6QXJyYXkuaXNBcnJheShhKT8oYS5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSksbC5jb25maWc9YSk6''@;'; put 'put ''ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmbC5jb25maWcuZm9yRWFjaCgoaCxmKT0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgeGg9Y2xhc3MgaUhle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgsZixfKXt0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5yZW1vdmVkPSExLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNlbGxSYW5nZUZhY3Rvcnk9X31zdGF0aWMgTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCl7cmV0''@;'; put 'put ''dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7bC5yb3d9LCBjb2w6ICR7bC5jb2x9LFx4MjAKICAgICAgcm93c3BhbjogJHtsLnJvd3NwYW59LCBjb2xzcGFuOiAke2wuY29sc3Bhbn19IGNvbnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAg''@;'; put 'put ''ICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtyZXR1cm4gQWFgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGlzIHBvc2l0aW9u''@;'; put 'put ''ZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7cmV0dXJuIEFhYFRoZSBtZXJn''@;'; put 'put ''ZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rp''@;'; put 'put ''b24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7cmV0dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgInJvd3NwYW4iXHgyMAogICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9y''@;'; put 'put ''dGVkLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtyZXR1cm4gbC5yb3c8MHx8bC5jb2w8MHx8bC5yb3dzcGFuPDB8fGwuY29sc3BhbjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7cmV0dXJuIDE9PT1sLmNv''@;'; put 'put ''bHNwYW4mJjE9PT1sLnJvd3NwYW59c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7cmV0dXJuIDA9PT1sLmNvbHNwYW58fDA9PT1sLnJvd3NwYW59c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+''@;'; put 'put ''PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5j''@;'; put 'put ''b2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRo''@;'; put 'put ''aXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNwYW4iOiJyb3dzcGFuIixfPWxbMF0/ImNvbCI6InJvdyIsVD1NYXRoLm1pbihhLGgpLFc9TWF0''@;'; put 'put ''aC5tYXgoYSxoKSxpZT10aGlzW19dLGdlPXRoaXNbX10rdGhpc1tmXS0xO2lmKGllPj1hJiYodGhpc1tfXSs9ZCksZD4wKWE8PWdlJiZhPmllJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lmKFQ8PWllJiZXPj1nZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLCExO2lmKGllPj1UJiZpZTw9''@;'; put 'put ''Vyl7Y29uc3Qgd2U9Vy1pZSsxLEVlPU1hdGguYWJzKGQpLXdlO3RoaXNbX10tPUVlK2QsdGhpc1tmXS09d2V9ZWxzZSBpZTw9VCYmZ2U+PVc/dGhpc1tmXSs9ZDppZTw9VCYmZ2U+PVQmJmdlPFcmJih0aGlzW2ZdLT1nZS1UKzEpfXJldHVybiEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwo''@;'; put 'put ''ImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdl''@;'; put 'put ''dExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiB0aGlzLmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlz''@;'; put 'put ''LmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkpfX07ZnVuY3Rpb24gQ3ooYyxsLGEsZCl7bD9sLnJvdz09PWEmJmwuY29sPT09ZD8oYy5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoInJvd3NwYW4iLGwucm93c3Bhbi50b1N0cmluZygpKSxjLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsbC5jb2xzcGFuLnRvU3RyaW5nKCkpKTooYy5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGMuc3R5bGUuZGlzcGxheT0i''@;'; put 'put ''bm9uZSIpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSIiKX1jbGFzcyBTentjb25zdHJ1Y3RvcihsKXt0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHM9W10sdGhpcy5ob3Q9bC5ob3R9c3RhdGlj''@;'; put 'put ''IElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7cmV0dXJuIEFhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGggdGhlIG90aGVyIGRlY2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2Vk''@;'; put 'put ''IGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXtsZXQgaD0hMTtyZXR1cm4gRG4odGhpcy5tZXJnZWRDZWxscyxmPT4hKGYucm93PD1sJiZmLnJvdytmLnJvd3NwYW4tMT49bCYmZi5jb2w8PWEmJmYuY29s''@;'; put 'put ''K2YuY29sc3Bhbi0xPj1hJiYoaD1mLDEpKSksaH1nZXRCeVJhbmdlKGwpe2xldCBkPSExO3JldHVybiBEbih0aGlzLm1lcmdlZENlbGxzLGg9PiEoaC5yb3c8PWwuZnJvbS5yb3cmJmgucm93K2gucm93c3Bhbi0xPj1sLnRvLnJvdyYmaC5jb2w8PWwuZnJvbS5jb2wmJmguY29sK2guY29sc3Bh''@;'; put 'put ''bi0xPj1sLnRvLmNvbCl8fChkPWgsZCkpLGR9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD1bXTtsZXQgZj1sO2lmKCFmLmluY2x1ZGVzUmFuZ2Up''@;'; put 'put ''e2NvbnN0IF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5mcm9tLnJvdyxmLmZyb20uY29sKSxUPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYudG8ucm93LGYudG8uY29sKTtmPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoXyxfLFQpfXJldHVybiBEbihkLF89Pntjb25zdCBU''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LF8uY29sKSxXPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93K18ucm93c3Bhbi0xLF8uY29sK18uY29sc3Bhbi0xKSxpZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFQsVCxXKTthP2Yub3ZlcmxhcHMoaWUpJiZoLnB1''@;'; put 'put ''c2goXyk6Zi5pbmNsdWRlc1JhbmdlKGllKSYmaC5wdXNoKF8pfSksISFoLmxlbmd0aCYmaH1hZGQobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzLGQ9bC5yb3csaD1sLmNvbCxUPW5ldyB4aChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxXPXRoaXMuZ2V0KGQsaCksaWU9dGhpcy5pc092ZXJsYXBwaW5nKFQpO3JldHVybiBXfHxpZT8oR2EoU3ouSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhUKSksITEpOih0aGlzLmhvdCYmVC5ub3JtYWxpemUodGhpcy5ob3QpLGEucHVzaChUKSxUKX1yZW1v''@;'; put 'put ''dmUobCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD10aGlzLmdldChsLGEpLGY9aD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoaCk6LTE7cmV0dXJuISghaHx8LTE9PT1mKSYmKGQuc3BsaWNlKGYsMSksaCl9Y2xlYXIoKXtjb25zdCBhPVtdLGQ9W107RG4odGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''cyxoPT57Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsKGgucm93LGguY29sKTtmJiZhLnB1c2goW2YsdGhpcy5nZXQoaC5yb3csaC5jb2wpLGgucm93LGguY29sXSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLERuKGEsKGgsZik9Pnt2bygwLGgucm93c3Bhbi0xLF89Pnt2bygwLGguY29s''@;'; put 'put ''c3Bhbi0xLFQ9PntpZigwIT09VHx8MCE9PV8pe2NvbnN0IFc9dGhpcy5ob3QuZ2V0Q2VsbChoLnJvdytfLGguY29sK1QpO1cmJmQucHVzaChbVyxudWxsLG51bGwsbnVsbF0pfX0pfSksYVtmXVsxXT1udWxsfSksRG4oYSxoPT57Q3ooLi4uaCl9KSxEbihkLGg9PntDeiguLi5oKX0pfWlzT3Zl''@;'; put 'put ''cmxhcHBpbmcobCl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKDAsMCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2wucm93c3Bhbi0xLGwu''@;'; put 'put ''Y29sK2wuY29sc3Bhbi0xKSk7bGV0IGQ9ITE7cmV0dXJuIERuKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoMCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxoLmNvbCksdGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoaC5yb3craC5yb3dzcGFuLTEsaC5jb2wraC5jb2xzcGFuLTEpKS5vdmVybGFwcyhhKXx8KGQ9ITAsITEpKSxkfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtyZXR1cm4gZCYmdGhpcy5ob3Qucm93SW5kZXhN''@;'; put 'put ''YXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYo''@;'; put 'put ''IWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxl''@;'; put 'put ''ZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9RG4odGhpcy5tZXJnZWRDZWxscyxmPT57Zi5zaGlmdChoLGEpfSksdmsodGhpcy5tZXJnZWRDZWxscy5sZW5ndGgtMSwwLGY9Pntjb25zdCBfPXRoaXMubWVyZ2VkQ2VsbHNbZl07XyYm''@;'; put 'put ''Xy5yZW1vdmVkJiZ0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoXyksMSl9KX19Y29uc3Qgb0hlPVN6O3NvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTWVy''@;'; put 'put ''Z2VDZWxscyIpLHNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBLeT0ibWVyZ2VDZWxscyIsYW9lPW5ldyBXZWFrTWFwLGxvZT1LeTtjbGFzcyBoSGUgZXh0''@;'; put 'put ''ZW5kcyBac3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gS3l9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGFvZS5zZXQodGhpcyx7bGFzdERlc2lyZWRDb29yZHM6bnVsbH0pLHRoaXMubWVyZ2VkQ2VsbHNDb2xs''@;'; put 'put ''ZWN0aW9uPW51bGwsdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1udWxsLHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0t5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRo''@;'; put 'put ''aXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPW5ldyBvSGUodGhpcyksdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucz1uZXcgY2xhc3Mgc0hle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0''@;'; put 'put ''aW9uLHRoaXMuY3VycmVudEZpbGxEYXRhPW51bGx9Y29ycmVjdFNlbGVjdGlvbkFyZWFTaXplKGwpe2lmKGxbMF09PT1sWzJdJiZsWzFdPT09bFszXSl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobFswXSxsWzFdKTthJiYobFsyXT1sWzBdK2Eucm93c3Bhbi0xLGxb''@;'; put 'put ''M109bFsxXSthLmNvbHNwYW4tMSl9fWdldERpcmVjdGlvbihsLGEpe2xldCBkPW51bGw7cmV0dXJuIGQ9YVswXT09PWxbMF0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8iZG93biI6YVsyXT09PWxbMl0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8idXAiOmFbMV09PT1sWzFdJiZhWzJd''@;'; put 'put ''PT09bFsyXT8icmlnaHQiOiJsZWZ0IixkfXNuYXBEcmFnQXJlYShsLGEsZCxoKXtjb25zdCBmPWEuc2xpY2UoMCksXz10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksW1QsVyxpZSxnZV09bCxFZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/aWUtVCsxOmdlLVcrMSxvdD1fLU1hdGgu''@;'; put 'put ''Zmxvb3IoXy9FZSkqRWUsZXQ9dGhpcy5nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCk7aWYoZXQpaWYoImRvd24iPT09ZCl7Y29uc3QgeXQ9ZXQucm93K2V0LnJvd3NwYW4tVC1vdDtmWzJdK3l0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRSb3dzKCk/ZlsyXS09b3Q6ZlsyXSs9b3Q/eXQ6''@;'; put 'put ''MH1lbHNlIGlmKCJyaWdodCI9PT1kKXtjb25zdCB5dD1ldC5jb2wrZXQuY29sc3Bhbi1XLW90O2ZbM10reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudENvbHMoKT9mWzNdLT1vdDpmWzNdKz1vdD95dDowfWVsc2UgaWYoInVwIj09PWQpe2NvbnN0IHl0PWllLW90LWV0LnJvdysxO2ZbMF0reXQ8''@;'; put 'put ''MD9mWzBdKz1vdDpmWzBdLT1vdD95dDowfWVsc2UgaWYoImxlZnQiPT09ZCl7Y29uc3QgeXQ9Z2Utb3QtZXQuY29sKzE7ZlsxXSt5dDwwP2ZbMV0rPW90OmZbMV0tPW90P3l0OjB9cmV0dXJuIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNoZSh7YmFzZUFyZWE6bCxkcmFnRGlyZWN0aW9uOmQs''@;'; put 'put ''Zm91bmRNZXJnZWRDZWxsczpoLGZpbGxTaXplOl8sZHJhZ0FyZWE6ZixjeWNsZUxlbmd0aDpFZX0pLGZ9dXBkYXRlQ3VycmVudEZpbGxDYWNoZShsKXt0aGlzLmN1cnJlbnRGaWxsRGF0YXx8KHRoaXMuY3VycmVudEZpbGxEYXRhPXt9KSxLbCh0aGlzLmN1cnJlbnRGaWxsRGF0YSxsKX1nZXRB''@;'; put 'put ''dXRvZmlsbFNpemUobCxhLGQpe2NvbnN0W2gsZixfLFRdPWwsW1csaWUsZ2Usd2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybiBoLVc7Y2FzZSJkb3duIjpyZXR1cm4gZ2UtXztjYXNlImxlZnQiOnJldHVybiBmLWllO2Nhc2UicmlnaHQiOnJldHVybiB3ZS1UO2RlZmF1bHQ6cmV0dXJu''@;'; put 'put ''IG51bGx9fWdldERyYWdBcmVhKGwsYSxkKXtjb25zdFtoLGYsXyxUXT1sLFtXLGllLGdlLHdlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bVyxpZSxoLTEsVF07Y2FzZSJkb3duIjpyZXR1cm5bXysxLGYsZ2UsVF07Y2FzZSJsZWZ0IjpyZXR1cm5bVyxpZSxfLGYtMV07Y2FzZSJyaWdo''@;'; put 'put ''dCI6cmV0dXJuW2gsVCsxLGdlLHdlXTtkZWZhdWx0OnJldHVybiBudWxsfX1nZXRGYXJ0aGVzdENvbGxlY3Rpb24obCxhLGQsaCl7Y29uc3RbZixfLFQsV109bCxpZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTEsZ2U9aWU/VDpXLHdlPWllP2Y6XyxFZT10aGlzLmdldEF1dG9maWxsU2l6''@;'; put 'put ''ZShsLGEsZCksWmU9aWU/VC1mKzE6Vy1fKzEsZXQ9RWUtTWF0aC5mbG9vcihFZS9aZSkqWmU7bGV0IHl0PW51bGwsa3Q9bnVsbCxTdD1udWxsO3N3aXRjaChkKXtjYXNlInVwIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixTdD1nZS1ldCsxO2JyZWFrO2Nhc2UibGVmdCI6eXQ9ImluY2x1ZGVz''@;'; put 'put ''SG9yaXpvbnRhbGx5IixTdD1nZS1ldCsxO2JyZWFrO2Nhc2UiZG93biI6eXQ9ImluY2x1ZGVzVmVydGljYWxseSIsU3Q9d2UrZXQtMTticmVhaztjYXNlInJpZ2h0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLFN0PXdlK2V0LTF9cmV0dXJuIERuKGgsUXQ9PntRdFt5dF0oU3QpJiZRdC5p''@;'; put 'put ''c0ZhcnRoZXIoa3QsZCkmJihrdD1RdCl9KSxrdH1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKSxkPXRoaXMuY3VycmVudEZpbGxEYXRhLmZvdW5kTWVyZ2VkQ2Vs''@;'; put 'put ''bHMsaD10aGlzLmN1cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLGY9KGllLGdlKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gaWUucm93LWdlPj1hLmZyb20ucm93O2Nhc2UiZG93biI6cmV0dXJuIGllLnJvdytpZS5yb3dzcGFuLTErZ2U8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0''@;'; put 'put ''dXJuIGllLmNvbC1nZT49YS5mcm9tLmNvbHVtbjtjYXNlInJpZ2h0IjpyZXR1cm4gaWUuY29sK2llLmNvbHNwYW4tMStnZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCBfPTAsVD1udWxsLFc9MTtkb3tmb3IobGV0IGllPTA7aWU8ZC5sZW5ndGg7aWUrPTEpe2lmKFQ9''@;'; put 'put ''ZFtpZV0sXz1XKnRoaXMuY3VycmVudEZpbGxEYXRhLmN5Y2xlTGVuZ3RoLGYoVCxfKSlzd2l0Y2goaCl7Y2FzZSJ1cCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LV8scm93c3BhbjpULnJvd3NwYW4sY29sOlQuY29sLGNvbHNwYW46VC5jb2xzcGFu''@;'; put 'put ''fSk7YnJlYWs7Y2FzZSJkb3duIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6VC5yb3crXyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImxlZnQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVj''@;'; put 'put ''dGlvbi5hZGQoe3JvdzpULnJvdyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wtXyxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UicmlnaHQiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdyxyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wr''@;'; put 'put ''Xyxjb2xzcGFuOlQuY29sc3Bhbn0pfWllPT09ZC5sZW5ndGgtMSYmKFcrPTEpfX13aGlsZShmKFQsXykpO3RoaXMuY3VycmVudEZpbGxEYXRhPW51bGwsdGhpcy5wbHVnaW4uaG90LnJlbmRlcigpLGQubGVuZ3RoPjAmJnRoaXMucGx1Z2luLmlmQ2hyb21lRm9yY2VSZXBhaW50KCl9Z2V0UmFu''@;'; put 'put ''Z2VGcm9tQ2hhbmdlcyhsKXtjb25zdCBhPXttaW46bnVsbCxtYXg6bnVsbH0sZD17bWluOm51bGwsbWF4Om51bGx9O3JldHVybiBEbihsLGg9Pntjb25zdCBmPWhbMF0sXz10aGlzLnBsdWdpbi5ob3QucHJvcFRvQ29sKGhbMV0pOyhudWxsPT09YS5taW58fGY8YS5taW4pJiYoYS5taW49Ziks''@;'; put 'put ''KG51bGw9PT1hLm1heHx8Zj5hLm1heCkmJihhLm1heD1mKSwobnVsbD09PWQubWlufHxfPGQubWluKSYmKGQubWluPV8pLChudWxsPT09ZC5tYXh8fF8+ZC5tYXgpJiYoZC5tYXg9Xyl9KSx7ZnJvbTp7cm93OmEubWluLGNvbHVtbjpkLm1pbn0sdG86e3JvdzphLm1heCxjb2x1bW46ZC5tYXh9''@;'; put 'put ''fX1kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREcmFnQXJlYShsLGEsZCksW2YsXyxULFddPWgsaWU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsXyksZ2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQsVyks''@;'; put 'put ''d2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoaWUsaWUsZ2UpO3JldHVybiEhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2Uod2UsITApfX0odGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IGNsYXNzIGxIZXtjb25zdHJ1Y3Rvcihs''@;'; put 'put ''KXt0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90LHRoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWU9ImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsIn1zbmFwRGVsdGEobCxhLGQpe2NvbnN0IGg9YS50byxfPWguY29sK2wuY29sO2wucm93P3RoaXMuanVtcE92ZXJNZXJnZWRD''@;'; put 'put ''ZWxsKGwsZCxoLnJvdytsLnJvdyk6bC5jb2wmJnRoaXMuanVtcE92ZXJNZXJnZWRDZWxsKGwsZCxfKX1qdW1wT3Zlck1lcmdlZENlbGwobCxhLGQpe2xldCBoPWwucm93fHxsLmNvbCxmPW51bGwsXz1udWxsLFQ9bnVsbDtsLnJvdz8oZj1hLmluY2x1ZGVzVmVydGljYWxseShkKSxfPWEucm93''@;'; put 'put ''LFQ9YS5nZXRMYXN0Um93KCkpOmwuY29sJiYoZj1hLmluY2x1ZGVzSG9yaXpvbnRhbGx5KGQpLF89YS5jb2wsVD1hLmdldExhc3RDb2x1bW4oKSksMCE9PWgmJihoPjA/ZiYmZCE9PV8mJihoKz1ULWQrMSk6ZiYmZCE9PVQmJihoLT1kLV8rMSksbC5yb3c/bC5yb3c9aDpsLmNvbCYmKGwuY29s''@;'; put 'put ''PWgpKX1nZXRVcGRhdGVkU2VsZWN0aW9uUmFuZ2UobCxhKXtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShsLmhpZ2hsaWdodCxsLmZyb20sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC50by5yb3crYS5yb3csbC50by5jb2wrYS5jb2wpKX1nZXRTZWxlY3RlZE1lcmdlZENl''@;'; put 'put ''bGxDbGFzc05hbWUobCxhLGQsaCl7Y29uc3QgZj1NYXRoLm1pbihkWzBdLGRbMl0pLF89TWF0aC5taW4oZFsxXSxkWzNdKSxUPU1hdGgubWF4KGRbMF0sZFsyXSksVz1NYXRoLm1heChkWzFdLGRbM10pO2lmKHZvaWQgMD09PWh8fCF0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24u''@;'; put 'put ''aXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuO2NvbnN0IGdlPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighZ2UpcmV0dXJuO2NvbnN0IHdlPWdlLmdldExhc3RSb3coKSxFZT1nZS5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIGY8PWdl''@;'; put 'put ''LnJvdyYmXzw9Z2UuY29sJiZUPj13ZSYmVz49RWU/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtofWA6dGhpcy5wbHVnaW4uc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChnZSx0aGlzLnBsdWdpbi5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZSgpKT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWA6dm9pZCAwfWlzTWVyZ2VDZWxsRnVsbHlTZWxlY3RlZChsLGEpe2NvbnN0IGQ9W107aWYoIWF8fCFsKXJldHVybiExO2ZvcihsZXQgaD0wO2g8bC5yb3dzcGFuO2grPTEpZm9yKGxl''@;'; put 'put ''dCBmPTA7ZjxsLmNvbHNwYW47Zis9MSlkLnB1c2godGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3craCxsLmNvbCtmKSk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKz0xKXtjb25zdCBmPVtdO2ZvcihsZXQgXz0wO188YS5sZW5ndGg7Xys9MSlmW19dPWFbX10uaW5jbHVkZXMoZFto''@;'; put 'put ''XSk7aWYoIWYuaW5jbHVkZXMoITApKXJldHVybiExfXJldHVybiEwfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPD03O2ErPTEpbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7''@;'; put 'put ''YX1gKTtyZXR1cm4gbC5wdXNoKGAke3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYCksbH19KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv''@;'; put 'put ''b2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5VHJhbnNmb3JtU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5VHJhbnNmb3JtRW5kKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUdldENlbGxDb29yZHMiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGwub25Nb2RpZnlHZXRDZWxsQ29vcmRzKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVTZXRSYW5nZVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNldFJhbmdl''@;'; put 'put ''U3RhcnRPbmx5IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlU2V0UmFuZ2VTdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlRW5kKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW5kZXJlciguLi5h''@;'; put 'put ''cmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwuYWRkTWVyZ2VBY3Rpb25zVG9Db250ZXh0TWVudSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBsLm9uQWZ0ZXJHZXRDZWxsTWV0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSguLi5hcmd1bWVudHMp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdl''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5QXV0b2ZpbGxSYW5nZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ3JlYXRlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVt''@;'; put 'put ''b3ZlQ29sIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJl''@;'; put 'put ''bW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDaGFuZ2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJhd0Jv''@;'; put 'put ''cmRlcnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEcmF3QXJlYUJvcmRlcnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJEcmF3U2VsZWN0aW9uKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwoYSxkKT0+e2lmKCJNZXJnZUNlbGxzIj09PWQp''@;'; put 'put ''cmV0dXJuITF9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5yZW5kZXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0t5XTt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3MobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9aWZDaHJvbWVGb3JjZVJlcGFpbnQoKXtp''@;'; put 'put ''ZighX04oKSlyZXR1cm47Y29uc3QgbD1bXTtsZXQgYT1bXTt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5mb3JFYWNoKGQ9Pntjb25zdHtyb3c6aCxyb3dzcGFuOmZ9PWQ7Zm9yKGxldCBfPWgrMTtfPGgrZjtfKyspYS5wdXNoKF8pfSksYT1bLi4ubmV3IFNldChhKV0s''@;'; put 'put ''YS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZCk7dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5nZXRPdmVybGF5cyghMCkubWFwKGY9PiJtYXN0ZXIiPT09Zj8ubmFtZT9mOmYuY2xvbmUud3RUYWJs''@;'; put 'put ''ZSkuZm9yRWFjaChmPT57Y29uc3QgXz1mLmdldFJvdyhoKTtfJiYoXy5zdHlsZS5iYWNrZ3JvdW5kPW43KF8sImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIikiLCIsIDAuOTkpIiksbC5wdXNoKF8pKX0pfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2wuZm9yRWFjaChkPT57''@;'; put 'put ''ZC5zdHlsZS5iYWNrZ3JvdW5kPW43KGQsImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIiwgMC45OSkiLCIpIil9KX0sMSl9dmFsaWRhdGVTZXR0aW5nKGwpe2xldCBhPSEwO3JldHVybiEhbCYmKHhoLmNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCk/KEdhKHhoLk5FR0FUSVZFX1ZBTFVFU19X''@;'; put 'put ''QVJOSU5HKGwpKSxhPSExKTp4aC5pc091dE9mQm91bmRzKGwsdGhpcy5ob3QuY291bnRSb3dzKCksdGhpcy5ob3QuY291bnRDb2xzKCkpPyhHYSh4aC5JU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCkpLGE9ITEpOnhoLmlzU2luZ2xlQ2VsbChsKT8oR2EoeGguSVNfU0lOR0xFX0NFTEwobCkp''@;'; put 'put ''LGE9ITEpOnhoLmNvbnRhaW5zWmVyb1NwYW4obCkmJihHYSh4aC5aRVJPX1NQQU5fV0FSTklORyhsKSksYT0hMSksYSl9Z2VuZXJhdGVGcm9tU2V0dGluZ3MobCl7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgYT1bXTtpZihEbihsLGQ9PntpZighdGhpcy52YWxpZGF0ZVNldHRpbmcoZCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csZC5jb2wpLGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3crZC5yb3dzcGFuLTEsZC5jb2wrZC5jb2xzcGFuLTEpLF89dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShoLGgsZik7dGhpcy5tZXJn''@;'; put 'put ''ZVJhbmdlKF8sITAsITApLHZvKGQucm93LGQucm93K2Qucm93c3Bhbi0xLFQ9Pnt2byhkLmNvbCxkLmNvbCtkLmNvbHNwYW4tMSxXPT57VD09PWQucm93JiZXPT09ZC5jb2x8fGEucHVzaChbVCxXLG51bGxdKX0pfSl9KSwwPT09YS5sZW5ndGgpcmV0dXJuO3RoaXMuaG90LnNldERhdGFBdENl''@;'; put 'put ''bGwoYSl9fWNsZWFyQ29sbGVjdGlvbnMoKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpfWNhbk1lcmdlUmFuZ2UobCl7cmV0dXJuISEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl8fHRoaXMudmFsaWRhdGVTZXR0aW5n''@;'; put 'put ''KGwpfXRvZ2dsZU1lcmdlT25TZWxlY3Rpb24oKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnRvZ2dsZU1l''@;'; put 'put ''cmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7''@;'; put 'put ''aWYoIWwpcmV0dXJuO2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLm1lcmdlUmFuZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxk''@;'; put 'put ''LmNvbCwhMSl9dW5tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVy''@;'; put 'put ''Z2VSYW5nZShsLCEwKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9bC5nZXRUb3BTdGFydENvcm5lcigpLGY9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxfPXtyb3c6aC5yb3csY29sOmguY29sLHJvd3NwYW46Zi5yb3ctaC5yb3crMSxjb2xzcGFuOmYuY29sLWguY29sKzF9LFQ9W107bGV0IFc9''@;'; put 'put ''bnVsbDtyZXR1cm4hIXRoaXMuY2FuTWVyZ2VSYW5nZShfLGEpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGwsYSksdm8oMCxfLnJvd3NwYW4tMSxnZT0+e3ZvKDAsXy5jb2xzcGFuLTEsd2U9PntsZXQgRWU9bnVsbDtUW2dlXXx8KFRbZ2VdPVtdKSwwPT09Z2UmJjA9''@;'; put 'put ''PT13ZT9FZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coXy5yb3cpLHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oXy5jb2wpKTp0aGlzLmhvdC5zZXRDZWxsTWV0YShfLnJvdytnZSxfLmNvbCt3ZSwiaGlkZGVuIiwhMCksVFtnZV1bd2VdPUVl''@;'; put 'put ''fSl9KSx0aGlzLmhvdC5zZXRDZWxsTWV0YShfLnJvdyxfLmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoXyl8fChkP1c9W18ucm93LF8uY29sLFRdOnRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KF8ucm93LF8uY29sLFQsdm9pZCAwLHZvaWQgMCx0''@;'; put 'put ''aGlzLnBsdWdpbk5hbWUpLGF8fHRoaXMuaWZDaHJvbWVGb3JjZVJlcGFpbnQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNZXJnZUNlbGxzIixsLF8sYSksVykpfXVubWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1l''@;'; put 'put ''bnRzWzFdO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UobCk7ZCYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksRG4oZCxoPT57dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSx2''@;'; put 'put ''bygwLGgucm93c3Bhbi0xLGY9Pnt2bygwLGguY29sc3Bhbi0xLF89Pnt0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK18sImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrXywiY29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2Vs''@;'; put 'put ''bE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVubWVyZ2VDZWxscyIsbCxhKSx0aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5mcm9tLnJvdyxsLmZyb20u''@;'; put 'put ''Y29sKTthLnJvdz09PWwuZnJvbS5yb3cmJmEuY29sPT09bC5mcm9tLmNvbCYmYS5yb3crYS5yb3dzcGFuLTE9PT1sLnRvLnJvdyYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sLnRvLmNvbD90aGlzLnVubWVyZ2VSYW5nZShsKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2Nv''@;'; put 'put ''bnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSxfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLF8pKX11bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMobCxhKSxfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShmLGYsXykpfW9uQWZ0ZXJJbml0KCl7dGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncyh0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0t5''@;'; put 'put ''XSksdGhpcy5ob3QucmVuZGVyKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIm0iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnRvZ2dsZU1lcmdlKHRoaXMuaG90''@;'; put 'put ''LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpLHRoaXMuaG90LnJlbmRlcigpfSxydW5Pbmx5SWY6ZD0+IWQuYWx0S2V5LGdyb3VwOmxvZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRz''@;'; put 'put ''QnlHcm91cChsb2UpfW9uQWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uKGwpe2lmKGwpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCs9MSlpZihkLmZy''@;'; put 'put ''b20ucm93PT09YVtoXS5yb3cmJmQuZnJvbS5jb2w9PT1hW2hdLmNvbCYmZC50by5yb3c9PT1hW2hdLnJvdythW2hdLnJvd3NwYW4tMSYmZC50by5jb2w9PT1hW2hdLmNvbCthW2hdLmNvbHNwYW4tMSlyZXR1cm4hMX1yZXR1cm4gbH1vbk1vZGlmeVRyYW5zZm9ybVN0YXJ0KGwpe2NvbnN0IGE9''@;'; put 'put ''YW9lLmdldCh0aGlzKSxkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bGV0IGg9e3JvdzpsLnJvdyxjb2w6bC5jb2x9LGY9bnVsbDtjb25zdCBfPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQuaGlnaGxpZ2h0LnJvdyxkLmhpZ2hsaWdodC5jb2wpLFQ9dGhpcy5tZXJnZWRD''@;'; put 'put ''ZWxsc0NvbGxlY3Rpb24uZ2V0KF8ucm93LF8uY29sKTtpZihhLmxhc3REZXNpcmVkQ29vcmRzfHwoYS5sYXN0RGVzaXJlZENvb3Jkcz10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhudWxsLG51bGwpKSxUKXtjb25zdCBpZT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhULnJvdyxULmNv''@;'; put 'put ''bCksZ2U9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVC5yb3crVC5yb3dzcGFuLTEsVC5jb2wrVC5jb2xzcGFuLTEpO3RoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoaWUsaWUsZ2UpLmluY2x1ZGVzKGEubGFzdERlc2lyZWRDb29yZHMpfHwoYS5sYXN0RGVzaXJlZENvb3Jkcz10aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhudWxsLG51bGwpKSxoLnJvdz1hLmxhc3REZXNpcmVkQ29vcmRzLnJvdz9hLmxhc3REZXNpcmVkQ29vcmRzLnJvdy1fLnJvdzpoLnJvdyxoLmNvbD1hLmxhc3REZXNpcmVkQ29vcmRzLmNvbD9hLmxhc3REZXNpcmVkQ29vcmRzLmNvbC1fLmNvbDpoLmNvbCxs''@;'; put 'put ''LnJvdz4wP2gucm93PVQucm93K1Qucm93c3Bhbi0xLV8ucm93K2wucm93Omwucm93PDAmJihoLnJvdz1fLnJvdy1ULnJvdytsLnJvdyksbC5jb2w+MD9oLmNvbD1ULmNvbCtULmNvbHNwYW4tMS1fLmNvbCtsLmNvbDpsLmNvbDwwJiYoaC5jb2w9Xy5jb2wtVC5jb2wrbC5jb2wpfWY9dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5oaWdobGlnaHQucm93K2gucm93LGQuaGlnaGxpZ2h0LmNvbCtoLmNvbCk7Y29uc3QgVz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZi5yb3csZi5jb2wpO2lmKFcpe2NvbnN0IGllPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEZp''@;'; put 'put ''cnN0UmVuZGVyYWJsZUNvb3JkcyhXLnJvdyxXLmNvbCk7YS5sYXN0RGVzaXJlZENvb3Jkcz1mLGg9e3JvdzppZS5yb3ctXy5yb3csY29sOmllLmNvbC1fLmNvbH19MCE9PWgucm93JiYobC5yb3c9aC5yb3cpLDAhPT1oLmNvbCYmKGwuY29sPWguY29sKX1vbk1vZGlmeVRyYW5zZm9ybUVuZChs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1XdShsKSxoPXRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShhLGwpO2xldCBmPVd1KGQpO2NvbnN0IF89dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGlu''@;'; put 'put ''UmFuZ2UoaCwhMCk7ZG97Zj1XdShkKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRVcGRhdGVkU2VsZWN0aW9uUmFuZ2UoYSxkKSxEbihfLFQ9Pnt0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5zbmFwRGVsdGEoZCxhLFQpfSl9d2hpbGUoZC5yb3chPT1mLnJvd3x8ZC5jb2whPT1m''@;'; put 'put ''LmNvbCk7bC5yb3c9ZC5yb3csbC5jb2w9ZC5jb2x9b25Nb2RpZnlHZXRDZWxsQ29vcmRzKGwsYSl7aWYobDwwfHxhPDApcmV0dXJuO2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYoIWQpcmV0dXJuO2NvbnN0e3JvdzpoLGNvbDpmLGNvbHNwYW46Xyxyb3dz''@;'; put 'put ''cGFuOlR9PWQ7cmV0dXJuW2gsZixoK1QtMSxmK18tMV19YWRkTWVyZ2VBY3Rpb25zVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHVIZShjKXtyZXR1cm57a2V5OiJtZXJnZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVj''@;'; put 'put ''dGVkTGFzdCgpO2lmKGwpe2NvbnN0IGE9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGxbMF0sbFsxXSk7aWYoYS5yb3c9PT1sWzBdJiZhLmNvbD09PWxbMV0mJmEucm93K2Eucm93c3Bhbi0xPT09bFsyXSYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sWzNdKXJldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UoSFYpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRlYpfSxjYWxsYmFjaygpe2MudG9nZ2xlTWVyZ2VPblNlbGVjdGlvbigpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hbHx8eGguaXNTaW5nbGVDZWxsKHtyb3c6''@;'; put 'put ''bFswXSxjb2w6bFsxXSxyb3dzcGFuOmxbMl0tbFswXSsxLGNvbHNwYW46bFszXS1sWzFdKzF9KXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl9LGhpZGRlbjohMX19KHRoaXMpKX1vbkFmdGVyUmVuZGVyZXIobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxl''@;'; put 'put ''Y3Rpb24uZ2V0KGEsZCksZj11cyhoKT9XdShoKTp2b2lkIDA7aWYodXMoZikpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOl8sY29sdW1uSW5kZXhNYXBwZXI6VH09dGhpcy5ob3Qse3JvdzpXLGNvbDppZSxjb2xzcGFuOmdlLHJvd3NwYW46d2V9PWYsW0VlLFplXT10aGlzLnRyYW5zbGF0ZU1lcmdl''@;'; put 'put ''ZENlbGxUb1JlbmRlcmFibGUoVyx3ZSxpZSxnZSkseXQ9RWUtXy5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGEpKzEsa3Q9WmUtVC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpKzE7Zi5yb3c9Xy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5yb3csMSksZi5jb2w9VC5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZi5jb2wsMSksZi5yb3dzcGFuPU1hdGgubWluKGYucm93c3Bhbix5dCksZi5jb2xzcGFuPU1hdGgubWluKGYuY29sc3BhbixrdCl9Q3oobCxmLGEsZCl9b25CZWZvcmVTZXRSYW5nZVN0YXJ0KGwpe2lmKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u''@;'; put 'put ''LmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLnJvdyxsLmNvbCkpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwuY29sKTtbbC5yb3csbC5jb2xdPVthLnJvdyxhLmNvbF19fW9uQmVmb3JlU2V0UmFuZ2VFbmQobCl7Y29uc3QgYT10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2EuaGlnaGxpZ2h0PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEuaGlnaGxpZ2h0LnJvdyxhLmhpZ2hsaWdodC5jb2wpLGEudG89bDtsZXQgZD0hMTtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhp''@;'; put 'put ''cy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKWRve2Q9ITE7Zm9yKGxldCBoPTA7aDx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7aCs9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1toXS5n''@;'; put 'put ''ZXRSYW5nZSgpO2EuZXhwYW5kQnlSYW5nZShfKSYmKGwucm93PWEudG8ucm93LGwuY29sPWEudG8uY29sLGQ9ITApfX13aGlsZShkKX1vbkFmdGVyR2V0Q2VsbE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aCYmKGgucm93IT09bHx8aC5j''@;'; put 'put ''b2whPT1hP2QuY29weWFibGU9ITE6KGQucm93c3Bhbj1oLnJvd3NwYW4sZC5jb2xzcGFuPWguY29sc3BhbikpfW9uQWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3RoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEp''@;'; put 'put ''LHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qg''@;'; put 'put ''Xz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZih1cyhfKSl7Y29uc3QgVD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5yb3csMSkpO2lmKFQ8bC5zdGFydFJvdylyZXR1cm4gbC5zdGFydFJvdz1ULHZvaWQg''@;'; put 'put ''dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCBf''@;'; put 'put ''PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKHVzKF8pKXtjb25zdCBXPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfLnJvdytfLnJvd3NwYW4tMSwtMSkpO2lmKFc+bC5lbmRSb3cpcmV0dXJuIGwuZW5kUm93''@;'; put 'put ''PVcsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9fX1vbkFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKSx0aGlzLm1vZGlmeVZpZXdw''@;'; put 'put ''b3J0Q29sdW1uRW5kKGwsYSl9bW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IF89dGhp''@;'; put 'put ''cy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYodXMoXykpe2NvbnN0IFQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF8uY29sLDEpKTtpZihUPGwuc3RhcnRDb2x1bW4pcmV0dXJuIGwuc3RhcnRDb2x1bW49VCx2b2lk''@;'; put 'put ''IHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kQ29sdW1uKTtmb3IobGV0IGY9MDtmPGE7''@;'; put 'put ''Zis9MSl7Y29uc3QgXz10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZih1cyhfKSl7Y29uc3QgVz1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoXy5jb2wrXy5jb2xzcGFuLTEsLTEpKTtpZihXPmwuZW5kQ29sdW1u''@;'; put 'put ''KXJldHVybiBsLmVuZENvbHVtbj1XLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpfX19dHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShsLGEsZCxoKXtjb25zdHtyb3dJbmRleE1hcHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOl99PXRoaXMuaG90O2xldCBULFc7''@;'; put 'put ''cmV0dXJuIFQ9MD09PWE/Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwxKTpmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsK2EtMSwtMSksVz0wPT09aD9fLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpOl8uZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQraC0xLC0xKSxbbD49''@;'; put 'put ''MD9mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoVCk6bCxkPj0wP18uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChXKTpkXX1vbk1vZGlmeUF1dG9maWxsUmFuZ2UobCxhKXt0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmNvcnJlY3RTZWxlY3Rpb25BcmVhU2l6ZShhKTtjb25z''@;'; put 'put ''dCBkPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZ2V0RGlyZWN0aW9uKGEsbCk7bGV0IGg9bDtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhhLGgsZCkpcmV0dXJuIGg9YSxoO2NvbnN0IGY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rp''@;'; put 'put ''b24uZ2V0V2l0aGluUmFuZ2Uoe2Zyb206e3JvdzphWzBdLGNvbDphWzFdfSx0bzp7cm93OmFbMl0sY29sOmFbM119fSk7cmV0dXJuIGYmJihoPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKGEsaCxkLGYpKSxofW9uQWZ0ZXJDcmVhdGVDb2wobCxhKXt0aGlzLm1lcmdl''@;'; put 'put ''ZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJyaWdodCIsbCxhKX1vbkFmdGVyUmVtb3ZlQ29sKGwsYSl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygibGVmdCIsbCxhKX1vbkFmdGVyQ3JlYXRlUm93KGwsYSxkKXsiYXV0byIhPT1kJiZ0aGlz''@;'; put 'put ''Lm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIixsLGEpfW9uQWZ0ZXJSZW1vdmVSb3cobCxhKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsbCxhKX1vbkFmdGVyQ2hhbmdlKGwsYSl7IkF1dG9maWxsLmZpbGwiPT09''@;'; put 'put ''YSYmdGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl9b25CZWZvcmVEcmF3QXJlYUJvcmRlcnMobCxhKXtpZihhJiYiYXJlYSI9PT1hKXtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7RG4odGhpcy5tZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoZCksZj0+e2QuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93PT09Zi5nZXRMYXN0Um93KCkmJmQuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sPT09Zi5nZXRMYXN0Q29sdW1uKCkmJihsWzJdPWYucm93LGxbM109Zi5jb2wpfSl9fW9uQWZ0ZXJNb2Rp''@;'; put 'put ''ZnlUcmFuc2Zvcm1TdGFydChsLGEsZCl7aWYoIXRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO2lmKCFoKXJldHVybjtjb25zdCBmPWE+MCxfPWE8MCxUPWQ8MCxXPWQ+MCxpZT1oLnJvdytoLnJvd3NwYW4tMT09''@;'; put 'put ''dGhpcy5ob3QuY291bnRSb3dzKCktMSxnZT0wPT09aC5yb3csd2U9aC5jb2wraC5jb2xzcGFuLTE9PXRoaXMuaG90LmNvdW50Q29scygpLTE7KGYmJmllfHxfJiZnZXx8VyYmd2V8fFQmJjA9PT1oLmNvbCkmJihsLnJvdz1oLnJvdyxsLmNvbD1oLmNvbCl9b25BZnRlckRyYXdTZWxlY3Rpb24o''@;'; put 'put ''bCxhLGQsaCl7aWYoZClyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpfW9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRN''@;'; put 'put ''ZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKX19ZnVuY3Rpb24gY29lKCl7R2EoQWFgUGx1Z2lucyBcYGNvbHVtblNvcnRpbmdcYCBhbmQgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuIAogICAgT25seSBcYG11bHRpQ29sdW1u''@;'; put 'put ''U29ydGluZ1xgIHdpbGwgd29yay5gKX1jb25zdCBNej0ibXVsdGlDb2x1bW5Tb3J0aW5nIixkb2U9ImNvbHVtblNvcnRpbmciO0lyZShNeixmdW5jdGlvbiBmSGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtjb25zdFssLi4uaF09YSxbLC4uLmZdPWQ7cmV0dXJuIGZ1bmN0aW9uIF8oVCl7''@;'; put 'put ''Y29uc3QgVz1jW1RdLGllPWxbVF0sZ2U9aFtUXSx3ZT1mW1RdLEVlPWllLm11bHRpQ29sdW1uU29ydGluZyxvdD0oRWUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9FZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkxyZShpZS50eXBlKSkoVyxpZSxFZSkoZ2Usd2UpO2lmKDA9PT1vdCl7Y29uc3Qg''@;'; put 'put ''ZXQ9VCsxO2lmKHR5cGVvZiBsW2V0XTwidSIpcmV0dXJuIF8oZXQpfXJldHVybiBvdH0oMCl9fSk7Y2xhc3MgX0hlIGV4dGVuZHMgT3Jle3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBNen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNzB9Y29uc3RydWN0b3Io''@;'; put 'put ''bCl7c3VwZXIobCksdGhpcy5wbHVnaW5LZXk9TXp9aXNFbmFibGVkKCl7cmV0dXJuIHN1cGVyLmlzRW5hYmxlZCgpfWVuYWJsZVBsdWdpbigpeyF0aGlzLmVuYWJsZWQmJnRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldJiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RvZV0m''@;'; put 'put ''JmNvZSgpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9c29ydChsKXtzdXBlci5zb3J0KGwpfWNsZWFyU29ydCgpe3N1cGVyLmNsZWFyU29ydCgpfWlzU29ydGVkKCl7cmV0dXJuIHN1cGVyLmlzU29ydGVkKCl9Z2V0U29ydENvbmZp''@;'; put 'put ''ZyhsKXtyZXR1cm4gc3VwZXIuZ2V0U29ydENvbmZpZyhsKX1zZXRTb3J0Q29uZmlnKGwpe3N1cGVyLnNldFNvcnRDb25maWcobCl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltd''@;'; put 'put ''O3JldHVybiBBcnJheS5pc0FycmF5KGwpP2w6W2xdfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3N1cGVyLnVwZGF0ZUhlYWRlckNsYXNzZXMobCwu''@;'; put 'put ''Li5kKSxXbyhsLGZ1bmN0aW9uIGdIZShjKXtjb25zdCBsPWMuY2xhc3NOYW1lLnNwbGl0KCIgIiksYT1uZXcgUmVnRXhwKCJec29ydC1bMC05XXsxLDJ9JCIpO3JldHVybiBsLmZpbHRlcihkPT5hLnRlc3QoZCkpfShsKSksITEhPT10aGlzLmVuYWJsZWQmJnBpKGwsZnVuY3Rpb24gcEhlKGMs''@;'; put 'put ''bCxhKXtjb25zdCBkPVtdO3JldHVybiExPT09YXx8Yy5pc0NvbHVtblNvcnRlZChsKSYmYy5nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKT4xJiZkLnB1c2goYHNvcnQtJHtjLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKSsxfWApLGR9KC4uLmQpKX1vblVwZGF0ZVNldHRpbmdzKGwp''@;'; put 'put ''e3RoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldJiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2RvZV0mJmNvZSgpLHN1cGVyLm9uVXBkYXRlU2V0dGluZ3MobCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpeyExIT09Z2ooYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xp''@;'; put 'put ''Y2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmKHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKT8odGhpcy5ob3QuZGVzZWxlY3RDZWxsKCksdGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhhLmNvbCksdGhpcy5zb3J0KHRoaXMuZ2V0TmV4dFNvcnRDb25maWco''@;'; put 'put ''YS5jb2wsImFwcGVuZCIpKSk6dGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX19Y2xhc3Mgd0hlIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIm11bHRpcGxlU2VsZWN0aW9uSGFuZGxlcyJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ''@;'; put 'put ''VFkoKXtyZXR1cm4gMTYwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZHJhZ2dlZD1bXSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMubGFzdFNldENlbGw9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4gbTIoKX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmV2ZW50''@;'; put 'put ''TWFuYWdlcnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBsbCh0aGlzKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZChoKXtpZigx''@;'; put 'put ''PT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gbC5kcmFnZ2VkLnNwbGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoMCwxKToxPT09ZiYmKGwuZHJh''@;'; put 'put ''Z2dlZD1sLmRyYWdnZWQuc2xpY2UoLTEpKX10aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gQm8oaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxsLmRyYWdnZWQucHVzaCgidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTpCbyhoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFu''@;'; put 'put ''ZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZl''@;'; put 'put ''bnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9PkJvKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJl''@;'; put 'put ''dmVudERlZmF1bHQoKSwhMSk6Qm8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYSwidG91Y2htb3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCBfLFQsVyxpZSxnZSx3ZTtpZigwPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm47Y29uc3QgRWU9Zi5lbGVtZW50RnJvbVBvaW50KGgudG91Y2hlc1swXS5jbGllbnRYLGgudG91Y2hl''@;'; put 'put ''c1swXS5jbGllbnRZKTshRWV8fEVlPT09bC5sYXN0U2V0Q2VsbHx8KCgiVEQiPT09RWUubm9kZU5hbWV8fCJUSCI9PT1FZS5ub2RlTmFtZSkmJihfPWwuaG90LmdldENvb3JkcyhFZSksLTE9PT1fLmNvbCYmKF8uY29sPTApLFQ9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxXPVQuZ2V0''@;'; put 'put ''V2lkdGgoKSxpZT1ULmdldEhlaWdodCgpLGdlPVQuZ2V0RGlyZWN0aW9uKCksMT09PVcmJjE9PT1pZSYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKF8pLHdlPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKFQsXyxsLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sZ2UsbC5kcmFnZ2VkWzBd''@;'; put 'put ''KSxudWxsIT09d2Uuc3RhcnQmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KHdlLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQod2UuZW5kKSxsLmxhc3RTZXRDZWxsPUVlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxkLGgs''@;'; put 'put ''Zil7Y29uc3QgXz1sLmdldFRvcFN0YXJ0Q29ybmVyKCksVD1sLmdldEJvdHRvbUVuZENvcm5lcigpLFc9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLGllPWwuZ2V0VG9wRW5kQ29ybmVyKCk7bGV0IGdlPXtzdGFydDpudWxsLGVuZDpudWxsfTtzd2l0Y2goZCl7Y2FzZSJORS1TVyI6c3dpdGNo''@;'; put 'put ''KGgpe2Nhc2UiTkUtU1ciOmNhc2UiTlctU0UiOmdlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csbC5oaWdobGlnaHQuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVy5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csXy5jb2wpfTticmVhaztjYXNlIlNFLU5XIjoiYm90dG9tIj09PWYmJihnZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVC5yb3csYS5jb2wpLGVu''@;'; put 'put ''ZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCl9KX1icmVhaztjYXNlIk5XLVNFIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6InRvcCI9PT1mP2dlPXtzdGFydDphLGVuZDpXfTpnZS5lbmQ9YTticmVhaztjYXNlIk5XLVNFIjoidG9wIj09PWY/Z2U9e3N0YXJ0OmEsZW5k''@;'; put 'put ''OlR9OmdlLmVuZD1hO2JyZWFrO2Nhc2UiU0UtTlciOiJ0b3AiPT09Zj9nZT17c3RhcnQ6YSxlbmQ6X306Z2UuZW5kPWE7YnJlYWs7Y2FzZSJTVy1ORSI6InRvcCI9PT1mP2dlPXtzdGFydDphLGVuZDppZX06Z2UuZW5kPWF9YnJlYWs7Y2FzZSJTVy1ORSI6c3dpdGNoKGgpe2Nhc2UiTlctU0Ui''@;'; put 'put ''OmdlPSJib3R0b20iPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csXy5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhXLnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhfLnJvdyxhLmNvbCksZW5kOnRoaXMu''@;'; put 'put ''aG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LFQuY29sKX07YnJlYWs7Y2FzZSJTVy1ORSI6Z2U9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxULmNv''@;'; put 'put ''bCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxfLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKF8ucm93LGEuY29sKX07YnJlYWs7Y2FzZSJTRS1OVyI6ImJvdHRvbSI9PT1mP2dlPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhh''@;'; put 'put ''LnJvdyxpZS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhfLnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKGdlPXtzdGFydDpXLGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYm''@;'; put 'put ''KGdlLmVuZD1hKTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/Z2UuZW5kPWE6Z2U9e3N0YXJ0OmEsZW5kOl99fX1yZXR1cm4gZ2V9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24geHooKXtsZXR7bGFiZWw6Yz0iIixjb2xzcGFuOmw9MSxvcmln''@;'; put 'put ''Q29sc3BhbjphPTEsY29sbGFwc2libGU6ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOl89ITEsaXNSb290OlQ9ITEsaXNQbGFjZWhvbGRlcjpXPSExfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu''@;'; put 'put ''dHNbMF06e307cmV0dXJue2xhYmVsOmMsY29sc3BhbjpsLG9yaWdDb2xzcGFuOmEsY29sbGFwc2libGU6ZCxpc0NvbGxhcHNlZDpmLGNyb3NzSGlkZGVuQ29sdW1uczpoLGlzSGlkZGVuOl8saXNSb290OlQsaXNQbGFjZWhvbGRlcjpXfX1mdW5jdGlvbiBFeihjLGwsYSl7KGZ1bmN0aW9uIFNI''@;'; put 'put ''ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdzIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gTUhlKGMsbCl7''@;'; put 'put ''cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxmb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gWHkoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB4SGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''ImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLGZvZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gZm9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQg''@;'; put 'put ''b24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IHBvZT1bImxhYmVsIiwiY29sbGFwc2libGUiXTt2YXIgSmY9bmV3IFdlYWtNYXAsVmc9bmV3IFdlYWtNYXAsa3o9bmV3IFdlYWtNYXA7Y2xhc3MgRUhle2NvbnN0cnVjdG9yKCl7RXoodGhpcyxKZix7d3JpdGFibGU6ITAs''@;'; put 'put ''dmFsdWU6W119KSxFeih0aGlzLFZnLHt3cml0YWJsZTohMCx2YWx1ZTowfSksRXoodGhpcyxreix7d3JpdGFibGU6ITAsdmFsdWU6MS8wfSl9c2V0Q29sdW1uc0xpbWl0KGwpe1h5KHRoaXMsa3osbCl9c2V0RGF0YSgpe1h5KHRoaXMsSmYsZnVuY3Rpb24gQ0hlKGMpe2xldCBsPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLzA7Y29uc3QgYT1bXTtpZigwPT09bClyZXR1cm4gYTtEbihjLGg9Pntjb25zdCBmPVtdO2xldCBfPTA7YS5wdXNoKGYpLERuKGgsVD0+e2NvbnN0IFc9eHooKTtpZih1cyhUKSl7Y29uc3R7bGFiZWw6Z2Us''@;'; put 'put ''Y29sc3Bhbjp3ZX09VDtXLmxhYmVsPV9sKGdlKSwibnVtYmVyIj09dHlwZW9mIHdlJiZ3ZT4xJiYoVy5jb2xzcGFuPXdlLFcub3JpZ0NvbHNwYW49d2UpfWVsc2UgVy5sYWJlbD1fbChUKTtfKz1XLm9yaWdDb2xzcGFuO2xldCBpZT0hMTtpZihfPj1sJiYoVy5jb2xzcGFuPVcub3JpZ0NvbHNw''@;'; put 'put ''YW4tKF8tbCksVy5vcmlnQ29sc3Bhbj1XLmNvbHNwYW4saWU9ITApLGYucHVzaChXKSxXLmNvbHNwYW4+MSlmb3IobGV0IGdlPTA7Z2U8Vy5jb2xzcGFuLTE7Z2UrKylmLnB1c2goe2xhYmVsOiIiLGlzUGxhY2Vob2xkZXI6ITB9KTtyZXR1cm4haWV9KX0pO2NvbnN0IGQ9TWF0aC5tYXgoLi4u''@;'; put 'put ''Y3MoYSxoPT5oLmxlbmd0aCkpO3JldHVybiBEbihhLGg9PntpZihoLmxlbmd0aDxkKXtjb25zdCBmPWNzKG5ldyBBcnJheShkLWgubGVuZ3RoKSwoKT0+eHooKSk7aC5zcGxpY2UoaC5sZW5ndGgsMCwuLi5mKX19KSxhfShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06W10sdzIodGhpcyxreikpKSxYeSh0aGlzLFZnLHcyKHRoaXMsSmYpLmxlbmd0aCl9Z2V0RGF0YSgpe3JldHVybiB3Mih0aGlzLEpmKX1tZXJnZVdpdGgobCl7RG4obCxhPT57bGV0e3JvdzpkLGNvbDpoLC4uLmZ9PWE7Y29uc3QgXz10aGlzLmdldEhlYWRlclNldHRp''@;'; put 'put ''bmdzKGQsaCk7bnVsbCE9PV8mJktsKF8sZixwb2UpfSl9bWFwKGwpe0RuKHcyKHRoaXMsSmYpLGE9PntEbihhLGQ9Pntjb25zdCBoPWwoey4uLmR9KTt1cyhoKSYmS2woZCxoLHBvZSl9KX0pfWdldEhlYWRlclNldHRpbmdzKGwsYSl7dmFyIGQ7aWYobD49dzIodGhpcyxWZyl8fGw8MClyZXR1''@;'; put 'put ''cm4gbnVsbDtjb25zdCBoPXcyKHRoaXMsSmYpW2xdO3JldHVybiBhPj1oLmxlbmd0aD9udWxsOm51bGwhPT0oZD1oW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyc1NldHRpbmdzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJn''@;'; put 'put ''dW1lbnRzWzJdOjE7Y29uc3QgaD1bXTtpZihsPj13Mih0aGlzLFZnKXx8bDwwKXJldHVybiBoO2NvbnN0IGY9dzIodGhpcyxKZilbbF07bGV0IF89MDtmb3IobGV0IFQ9YTtUPGYubGVuZ3RoO1QrKyl7Y29uc3QgVz1mW1RdO2lmKFcuaXNQbGFjZWhvbGRlcil0aHJvdyBuZXcgRXJyb3IoIlRo''@;'; put 'put ''ZSBmaXJzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMiKTtpZihfKz1XLmNvbHNwYW4saC5wdXNoKFcpLFcuY29sc3Bhbj4xJiYoVCs9Vy5jb2xzcGFuLTEpLF89PT1kKWJyZWFrO2lmKF8+ZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBsYXN0''@;'; put 'put ''IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpfXJldHVybiBofWdldExheWVyc0NvdW50KCl7cmV0dXJuIHcyKHRoaXMsVmcpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiB3Mih0aGlzLFZnKT4wP3cyKHRoaXMsSmYpWzBdLmxlbmd0aDow''@;'; put 'put ''fWNsZWFyKCl7WHkodGhpcyxKZixbXSksWHkodGhpcyxWZywwKX19ZnVuY3Rpb24gQXooYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGtIZShjKXt2YXIgbD1mdW5jdGlvbiBBSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9''@;'; put 'put ''KTpjW2xdPWEsY31jb25zdCBfb2U9bmV3IE1hcChbWyJERi1wcmUtb3JkZXIiLGZ1bmN0aW9uIGdvZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2ZvcihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMubGVuZ3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9Z29lLmNhbGwodGhpcy5jaGlsZHNb''@;'; put 'put ''ZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24gbW9lKGMsbCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7YSsrKWlmKCExPT09bW9lLmNhbGwodGhpcy5jaGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJG''@;'; put 'put ''IixmdW5jdGlvbiBJSGUoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwhMSE9PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIEhBe2NvbnN0cnVjdG9yKGwpe0F6''@;'; put 'put ''KHRoaXMsImRhdGEiLHt9KSxBeih0aGlzLCJwYXJlbnQiLG51bGwpLEF6KHRoaXMsImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wucGFyZW50PXRoaXMsdGhpcy5jaGlsZHMucHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyBIQSh7Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5ndGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5jbG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhp''@;'; put 'put ''cy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hpbGRzW2FdKX13YWxrRG93bihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNb''@;'; put 'put ''MV06IkJGIjtpZighX29lLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNhbCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtfb2UuZ2V0KGEpLmNhbGwodGhpcyxsLHRoaXMpfXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9''@;'; put 'put ''PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gVHooYyxsLGEpeyhmdW5jdGlvbiBSSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj''@;'; put 'put ''dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEt1KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIE9IZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsYm9lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIGJvZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgSDc9bmV3IFdlYWtNYXAsQmc9bmV3IFdlYWtNYXAsTjc9bmV3IFdlYWtNYXA7Y2xhc3MgSEhle2NvbnN0cnVjdG9yKGwpe1R6KHRoaXMsSDcse3dyaXRh''@;'; put 'put ''YmxlOiEwLHZhbHVlOm5ldyBNYXB9KSxUeih0aGlzLEJnLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksVHoodGhpcyxONyx7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGZ1bmN0aW9uIFBIZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEZIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2Fs''@;'; put 'put ''bChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsYm9lKGMsbCwic2V0IiksYSksYX0odGhpcyxONyxsKX1nZXRSb290cygpe3JldHVybiBBcnJheS5mcm9t''@;'; put 'put ''KEt1KHRoaXMsSDcpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4obCl7bGV0IGE7cmV0dXJuIEt1KHRoaXMsQmcpLmhhcyhsKSYmKGE9S3UodGhpcyxINykuZ2V0KEt1KHRoaXMsQmcpLmdldChsKSkpLGF9Z2V0Tm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRSb290QnlDb2x1bW4oYSk7aWYo''@;'; put 'put ''IWQpcmV0dXJuO2NvbnN0IGg9YS1LdSh0aGlzLEJnKS5nZXQoYSk7bGV0IF8sZj0wO3JldHVybiBkLndhbGtEb3duKFQ9Pntjb25zdHtkYXRhOntvcmlnQ29sc3BhbjpXLGhlYWRlckxldmVsOmllfX09VDtpZihsPT09aWUpe2lmKGg+PWYmJmg8PWYrVy0xKXJldHVybiBfPVQsXy5kYXRhLmlz''@;'; put 'put ''Um9vdD1hPT09Xy5kYXRhLmNvbHVtbkluZGV4LCExO2YrPVd9fSksX31yZWJ1aWxkVHJlZUluZGV4KCl7bGV0IGw9MDtLdSh0aGlzLEJnKS5jbGVhcigpLERuKEt1KHRoaXMsSDcpLGE9PntsZXRbLHtkYXRhOntjb2xzcGFuOmR9fV09YTtmb3IobGV0IGg9bDtoPGwrZDtoKyspS3UodGhpcyxC''@;'; put 'put ''Zykuc2V0KGgsbCk7bCs9ZH0pfWJ1aWxkVHJlZSgpe3RoaXMuY2xlYXIoKTtjb25zdCBsPUt1KHRoaXMsTjcpLmdldENvbHVtbnNDb3VudCgpO2xldCBhPTA7Zm9yKDthPGw7KXtjb25zdCBkPUt1KHRoaXMsTjcpLmdldEhlYWRlclNldHRpbmdzKDAsYSksaD1uZXcgSEE7S3UodGhpcyxINyku''@;'; put 'put ''c2V0KGEsaCksdGhpcy5idWlsZExlYXZlcyhoLGEsMCxkLm9yaWdDb2xzcGFuKSxhKz1kLm9yaWdDb2xzcGFufXRoaXMucmVidWlsZFRyZWVJbmRleCgpfWJ1aWxkTGVhdmVzKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNb''@;'; put 'put ''M106MTtjb25zdCBmPUt1KHRoaXMsTjcpLmdldEhlYWRlcnNTZXR0aW5ncyhkLGEsaCk7ZCs9MSxEbihmLF89Pntjb25zdCBUPXsuLi5fLGhlYWRlckxldmVsOmQtMSxjb2x1bW5JbmRleDphfTtsZXQgVzsxPT09ZD8obC5kYXRhPVQsVz1sKTooVz1uZXcgSEEoVCksbC5hZGRDaGlsZChXKSks''@;'; put 'put ''ZDxLdSh0aGlzLE43KS5nZXRMYXllcnNDb3VudCgpJiZ0aGlzLmJ1aWxkTGVhdmVzKFcsYSxkLF8ub3JpZ0NvbHNwYW4pLGErPV8ub3JpZ0NvbHNwYW59KX1jbGVhcigpe0t1KHRoaXMsSDcpLmNsZWFyKCksS3UodGhpcyxCZykuY2xlYXIoKX19ZnVuY3Rpb24geW9lKGMsbCl7Yy53YWxrRG93''@;'; put 'put ''bihhPT57bGV0e2RhdGE6ZCxjaGlsZHM6aH09YTtpZighZC5pc0hpZGRlbiYmKGwoZC5jb2x1bW5JbmRleCksMD09PWgubGVuZ3RoKSlmb3IobGV0IGY9MTtmPGQuY29sc3BhbjtmKyspbChkLmNvbHVtbkluZGV4K2YpfSl9ZnVuY3Rpb24gTkEoYyxsKXtsZXR7Y2hpbGRzOmF9PWM7aWYoMCE9''@;'; put 'put ''PWEubGVuZ3RoKXJldHVybiBhWzBdLmRhdGFbbF19ZnVuY3Rpb24gVkEoYyl7cmV0dXJuIE5BKGMsIm9yaWdDb2xzcGFuIik9PT1jLmRhdGEub3JpZ0NvbHNwYW59ZnVuY3Rpb24gRHooYyl7Y29uc3R7ZGF0YTpsLGNoaWxkczphfT1jO2lmKCFsLmlzQ29sbGFwc2VkfHxsLmlzSGlkZGVufHxs''@;'; put 'put ''Lm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoVkEoYykpcmV0dXJuIER6KGFbMF0pO2wuaXNDb2xsYXBzZWQ9ITE7Y29uc3QgaD1hLnNsaWNlKDEpLGY9bmV3IFNldDts''@;'; put 'put ''ZXQgXz0wO2lmKGgubGVuZ3RoPjApRG4oaCxUPT57VC5yZXBsYWNlVHJlZVdpdGgoVC5kYXRhLmNsb25lZFRyZWUpLFQuZGF0YS5jbG9uZWRUcmVlPW51bGwsXys9VC5kYXRhLmNvbHNwYW4seW9lKFQsaWU9PntmLmFkZChpZSl9KX0pO2Vsc2V7Y29uc3R7Y29sc3BhbjpULG9yaWdDb2xzcGFu''@;'; put 'put ''OlcsY29sdW1uSW5kZXg6aWV9PWw7Xz1XLVQ7Zm9yKGxldCBnZT0xO2dlPFc7Z2UrKylmLmFkZChpZStnZSl9cmV0dXJuIGMud2Fsa1VwKFQ9Pntjb25zdHtkYXRhOld9PVQ7Vy5jb2xzcGFuKz1fLFcuY29sc3Bhbj49Vy5vcmlnQ29sc3Bhbj8oVy5jb2xzcGFuPVcub3JpZ0NvbHNwYW4sVy5p''@;'; put 'put ''c0NvbGxhcHNlZD0hMSk6VkEoVCkmJihXLmlzQ29sbGFwc2VkPU5BKFQsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5JeihjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShmKSxjb2xzcGFuQ29tcGVuc2F0aW9uOl99fWZ1bmN0aW9uIEl6KGMpe3ZhciBs''@;'; put 'put ''O2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoVkEoYykpcmV0dXJu''@;'; put 'put ''IEl6KGRbMF0pO2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLF89bmV3IFNldDtpZihmLmxlbmd0aD4wKURuKGYsVz0+e3lvZShXLGllPT57Xy5hZGQoaWUpfSksVy5kYXRhLmNsb25lZFRyZWU9Vy5jbG9uZVRyZWUoKSxXLndhbGtEb3duKGllPT57bGV0e2RhdGE6Z2V9PWll''@;'; put 'put ''O2dlLmlzSGlkZGVuPSEwfSl9KTtlbHNle2NvbnN0e29yaWdDb2xzcGFuOlcsY29sdW1uSW5kZXg6aWV9PWE7Zm9yKGxldCBnZT0xO2dlPFc7Z2UrKylfLmFkZChpZStnZSl9Y29uc3QgVD1hLmNvbHNwYW4tKG51bGwhPT0obD1OQShjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0''@;'; put 'put ''dXJuIGMud2Fsa1VwKFc9Pntjb25zdHtkYXRhOmllfT1XO2llLmNvbHNwYW4tPVQsaWUuY29sc3Bhbjw9MT8oaWUuY29sc3Bhbj0xLGllLmlzQ29sbGFwc2VkPSEwKTpWQShXKSYmKGllLmlzQ29sbGFwc2VkPU5BKFcsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigp''@;'; put 'put ''PT5EeihjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShfKSxjb2xzcGFuQ29tcGVuc2F0aW9uOlR9fWNvbnN0IHdvZT1uZXcgTWFwKFtbImNvbGxhcHNlIixJel0sWyJleHBhbmQiLER6XSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBOSGUoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihs''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKEFhYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4g''@;'; put 'put ''T25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0''@;'; put 'put ''YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5jb2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1''@;'; put 'put ''bmN0aW9uIFZIZShjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoQWFgVGhlIHBhc3NlZCBu''@;'; put 'put ''b2RlIGlzIG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwp''@;'; put 'put ''KXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5p''@;'; put 'put ''bmRleE9mKGwpLDEpLCFmLmlzSGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBCQShjKXtjb25zdCBsPVtdO3JldHVybiBEbihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0Nv''@;'; put 'put ''bHNwYW46Zixjb2x1bW5JbmRleDpfLGhlYWRlckxldmVsOlQsY3Jvc3NIaWRkZW5Db2x1bW5zOld9PWgsaWU9ZnVuY3Rpb24gekhlKGMsbCl7bGV0IGE7cmV0dXJuIEFycmF5LmlzQXJyYXkoY1tsXSk/YT1jW2xdOihhPVtdLGNbbF09YSksYX0obCxUKTtsZXQgZ2U9ITE7Zm9yKGxldCB3ZT1f''@;'; put 'put ''O3dlPF8rZjt3ZSsrKWlmKFcuaW5jbHVkZXMod2UpfHxnZSlpZS5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7ZWxzZXtjb25zdCBaZT1qSGUoaCk7WmUuaXNSb290PSEwLGllLnB1c2goWmUpLGdlPSEwfX0pfSksbH1mdW5jdGlvbiBqSGUoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5D''@;'; put 'put ''b2x1bW5zOmwsLi4uYX09eHooYyk7cmV0dXJuIGF9ZnVuY3Rpb24gTHooYyxsLGEpeyhmdW5jdGlvbiBVSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIp''@;'; put 'put ''fSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEp5KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gWkhlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRl''@;'; put 'put ''IGZpZWxkIik7bC52YWx1ZT1hfX0oYyxDb2UoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFRsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIFlIZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsQ29lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIENvZShjLGwsYSl7aWYoIWwu''@;'; put 'put ''aGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX12YXIgRWg9bmV3IFdlYWtNYXAsQzE9bmV3IFdlYWtNYXAsamc9bmV3IFdlYWtNYXA7Y2xhc3MgV0hle2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7THoodGhpcyxFaCx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IEVIZX0pLEx6KHRoaXMsQzEse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBISGUoVGwodGhpcyxFaCkpfSksTHoodGhpcyxqZyx7d3JpdGFibGU6ITAsdmFsdWU6W1tdXX0pfXNldFN0YXRlKGwpe1RsKHRoaXMsRWgpLnNldERhdGEo''@;'; put 'put ''bCk7bGV0IGE9ITE7dHJ5e1RsKHRoaXMsQzEpLmJ1aWxkVHJlZSgpfWNhdGNoe1RsKHRoaXMsQzEpLmNsZWFyKCksVGwodGhpcyxFaCkuY2xlYXIoKSxhPSEwfXJldHVybiBKeSh0aGlzLGpnLEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtUbCh0aGlz''@;'; put 'put ''LEVoKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT1jcyhsLGQ9PntsZXR7cm93OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6aCwuLi5mfX0pO1RsKHRoaXMsRWgpLm1lcmdlV2l0aChhKSxUbCh0aGlzLEMxKS5i''@;'; put 'put ''dWlsZFRyZWUoKSxKeSh0aGlzLGpnLEJBKFRsKHRoaXMsQzEpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXtUbCh0aGlzLEVoKS5tYXAobCksVGwodGhpcyxDMSkuYnVpbGRUcmVlKCksSnkodGhpcyxqZyxCQShUbCh0aGlzLEMxKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIEFs''@;'; put 'put ''KFRsKHRoaXMsQzEpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25z''@;'; put 'put ''dCBoPVRsKHRoaXMsQzEpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gQkhlKGMsbCxhKXtpZighd29lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gd29lLmdl''@;'; put 'put ''dChjKShsLGEpfShsLGgsZCksSnkodGhpcyxqZyxCQShUbCh0aGlzLEMxKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJl''@;'; put 'put ''dHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9udWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49''@;'; put 'put ''MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9VGwodGhpcyxqZylbbF0pfHx2b2lkIDA9''@;'; put 'put ''PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7aWYobDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCkpcmV0dXJuIG51bGw7Y29uc3QgZD1UbCh0aGlzLEMx''@;'; put 'put ''KS5nZXROb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0YX06bnVsbH1maW5kTGVmdE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpofT1udWxsIT09KGQ9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpKSYmdm9pZCAwIT09ZD9kOntpc1Jvb3Q6ITB9O2lmKGgpcmV0''@;'; put 'put ''dXJuIGE7bGV0IGY9YS0xO2Zvcig7Zj49MDspe3ZhciBfO2NvbnN0e2lzUm9vdDpUfT1udWxsIT09KF89dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLGYpKSYmdm9pZCAwIT09Xz9fOntpc1Jvb3Q6ITB9O2lmKFQpYnJlYWs7Zi09MX1yZXR1cm4gZn1nZXRMYXllcnNDb3VudCgpe3JldHVybiBU''@;'; put 'put ''bCh0aGlzLEVoKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBUbCh0aGlzLEVoKS5nZXRDb2x1bW5zQ291bnQoKX1jbGVhcigpe0p5KHRoaXMsamcsW10pLFRsKHRoaXMsRWgpLmNsZWFyKCksVGwodGhpcyxDMSkuY2xlYXIoKX19ZnVuY3Rpb24gUXkoYyxsLGEp''@;'; put 'put ''e3JldHVybiBsPWZ1bmN0aW9uIEdIZShjKXt2YXIgbD1mdW5jdGlvbiAkSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBTb2UoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIFhIZShjKXt2''@;'; put 'put ''YXIgbD1mdW5jdGlvbiBKSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g''@;'; put 'put ''ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBp''@;'; put 'put ''biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBNb2UoYyxsLGEpeyhmdW5jdGlvbiBRSGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD''@;'; put 'put ''YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGpBKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gZU5lKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53''@;'; put 'put ''cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyx4b2UoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFNsKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHROZShjLGwpe3JldHVybiBsLmdldD9sLmdl''@;'; put 'put ''dC5jYWxsKGMpOmwudmFsdWV9KGMseG9lKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIHhvZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCBF''@;'; put 'put ''b2U9Im5lc3RlZEhlYWRlcnMiO3ZhciBKbD1uZXcgV2Vha01hcCxzND1uZXcgV2Vha01hcDtjbGFzcyByTmUgZXh0ZW5kcyBac3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksTW9lKHRoaXMsSmwse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBXSGV9KSxNb2UodGhpcyxzNCx7d3Jp''@;'; put 'put ''dGFibGU6ITAsdmFsdWU6bnVsbH0pLFNvZSh0aGlzLCJnaG9zdFRhYmxlIixuZXcgY2xhc3MgcUhle2NvbnN0cnVjdG9yKGwsYSl7UXkodGhpcywiaG90Iix2b2lkIDApLFF5KHRoaXMsIm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyIix2b2lkIDApLFF5KHRoaXMsImxheWVyc0NvdW50Iiww''@;'; put 'put ''KSxReSh0aGlzLCJjb250YWluZXIiLHZvaWQgMCksUXkodGhpcywid2lkdGhzTWFwIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcj1hLHRoaXMud2lkdGhzTWFwPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5k''@;'; put 'put ''ZXhNYXAoIm5lc3RlZEhlYWRlcnMud2lkdGhzTWFwIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKX1zZXRMYXllcnNDb3VudChsKXtyZXR1cm4gdGhpcy5sYXllcnNDb3VudD1sLHRoaXN9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50''@;'; put 'put ''b1BoeXNpY2FsQ29sdW1uKGwpKX1idWlsZFdpZHRoc01hcCgpe3RoaXMuY29udGFpbmVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJoYW5kc29udGFibGUiLCJodEdob3N0VGFibGUiLCJodEF1dG9TaXpl''@;'; put 'put ''IiksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgbD10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0LW9mLXR5cGUgdGgiKSxhPWwubGVu''@;'; put 'put ''Z3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9yKGxldCBkPTA7ZDxhO2QrKyl7Y29uc3QgaD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGQpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKTt0aGlzLndpZHRoc01hcC5zZXRW''@;'; put 'put ''YWx1ZUF0SW5kZXgoZixsW2RdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50OmEsY29sdW1uSW5kZXhNYXBwZXI6''@;'; put 'put ''ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSxfPSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsVD1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9yKGxldCBXPTA7Vzx0aGlzLmxheWVy''@;'; put 'put ''c0NvdW50O1crKyl7Y29uc3QgaWU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgZ2U9MDtnZTxUO2dlKyspe2xldCB3ZT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZ2UpO251bGw9PT13ZSYmKHdlPWdlKTtjb25zdCBFZT1hLmNyZWF0ZUVsZW1lbnQoInRoIiksWmU9dGhp''@;'; put 'put ''cy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihXLHdlKTtpZihaZSYmKCFaZS5pc1BsYWNlaG9sZGVyfHxaZS5pc0hpZGRlbikpe2xldCBvdD1aZS5sYWJlbDtfJiYob3QrPSc8YnV0dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1dHRvbj4nKSxnZyhFZSxvdCksRWUuY29sU3Bhbj1aZS5j''@;'; put 'put ''b2xzcGFuLGllLmFwcGVuZENoaWxkKEVlKX19Zi5hcHBlbmRDaGlsZChpZSl9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX0odGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0''@;'; put 'put ''dGluZ3MobCxhKSkpLFNvZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEVvZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0''@;'; put 'put ''aW5ncygpW0VvZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmR2EoQWFgWW91ciBOZXN0''@;'; put 'put ''ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1d''@;'; put 'put ''XWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''YmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT50aGlzLm9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJl''@;'; put 'put ''cnMoZCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlDb2xXaWR0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbHVtbkhl''@;'; put 'put ''YWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSgu''@;'; put 'put ''Li5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO1NsKHRoaXMsSmwpLnNldENvbHVtbnNM''@;'; put 'put ''aW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1TbCh0aGlzLEpsKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZHYShBYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdp''@;'; put 'put ''biBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO1NsKHRoaXMsSmwpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFTbCh0aGlzLHM0KSYmdGhpcy5lbmFi''@;'; put 'put ''bGVkJiZqQSh0aGlzLHM0LHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6X309ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBUPSEwPT09''@;'; put 'put ''Xz8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7U2wodGhpcyxKbCkudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihULGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkp''@;'; put 'put ''LmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLFNsKHRoaXMsSmwpLmNsZWFyKCksU2wodGhpcyxzNCkudW5zdWJzY3JpYmUoKSxqQSh0aGlzLHM0LG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gU2wodGhpcyxKbCl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gU2wodGhpcyxKbCkuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBTbCh0aGlzLEpsKS5nZXRIZWFkZXJTZXR0''@;'; put 'put ''aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IF89MDtfPGE7XysrKXtjb25zdCBUPWQuY2hpbGROb2Rl''@;'; put 'put ''c1tfXTtpZighVClicmVhaztjb25zdCBXPWguY2hpbGROb2Rlc1tfXSxpZT1mP2YuY2hpbGROb2Rlc1tfXTpudWxsO2ZvcihsZXQgZ2U9MCx3ZT1ULmNoaWxkTm9kZXMubGVuZ3RoO2dlPHdlO2dlKyspVC5jaGlsZE5vZGVzW2dlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhULmNo''@;'; put 'put ''aWxkTm9kZXNbZ2VdLCJoaWRkZW5IZWFkZXIiKSxXJiZXLmNoaWxkTm9kZXNbZ2VdJiYoVy5jaGlsZE5vZGVzW2dlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhXLmNoaWxkTm9kZXNbZ2VdLCJoaWRkZW5IZWFkZXIiKSksZiYmaWUmJmllLmNoaWxkTm9kZXNbZ2VdJiYoaWUuY2hp''@;'; put 'put ''bGROb2Rlc1tnZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksV28oaWUuY2hpbGROb2Rlc1tnZV0sImhpZGRlbkhlYWRlciIpKX19aGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCIpO3JldHVybihoLGYpPT57dmFyIF87Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6VCx2aWV3Old9PXRoaXMuaG90O2xldCBpZT1ULmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PWllJiYoaWU9aCksZi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxXbyhmLCJo''@;'; put 'put ''aWRkZW5IZWFkZXIiKTtjb25zdHtjb2xzcGFuOmdlLGlzSGlkZGVuOndlLGlzUGxhY2Vob2xkZXI6RWV9PW51bGwhPT0oXz1TbCh0aGlzLEpsKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGllKSkmJnZvaWQgMCE9PV8/Xzp7bGFiZWw6IiJ9O2lmKEVlfHx3ZSlwaShmLCJoaWRkZW5IZWFkZXIiKTtl''@;'; put 'put ''bHNlIGlmKGdlPjEpe3ZhciBaZSxvdDtjb25zdHt3dE92ZXJsYXlzOmV0fT1XLl93dCx5dD1udWxsPT09KFplPWV0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PVplP3ZvaWQgMDpaZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLGt0PW51bGw9PT0ob3Q9''@;'; put 'put ''ZXQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09b3Q/dm9pZCAwOm90LmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksU3Q9eXR8fGt0P01hdGgubWluKGdlLGQtaCk6Z2U7U3Q+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLFN0KX10aGlzLmhvdC52aWV3LmFwcGVuZENv''@;'; put 'put ''bEhlYWRlcihpZSxmLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0sbCl9fWdldENvbHVtbkhlYWRlclZhbHVlKGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwhPT0oZD1TbCh0aGlzLEpsKS5nZXRI''@;'; put 'put ''ZWFkZXJTZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfW9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKGwsYSxkKXtjb25zdCBoPVNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGwp''@;'; put 'put ''O2lmKCFoKXJldHVybiBsO2NvbnN0e2NsYXNzTmFtZXM6Zixjb2x1bW5DdXJzb3I6XyxzZWxlY3Rpb25UeXBlOlQsc2VsZWN0aW9uV2lkdGg6V309ZCx7aXNSb290OmllLGNvbHNwYW46Z2V9PVNsKHRoaXMsSmwpLmdldEhlYWRlclNldHRpbmdzKGEsbCk7aWYoVD09PXl5KXtpZighaWUpcmV0''@;'; put 'put ''dXJuIGguY29sdW1uSW5kZXh9ZWxzZSBUPT09UGsmJihnZT5XLV98fCFpZSkmJihmLmxlbmd0aD0wKTtyZXR1cm4gbH1vbkJlZm9yZUNvcHkobCxhLGQpe2xldHtjb2x1bW5IZWFkZXJzQ291bnQ6aH09ZDtpZigwIT09aClmb3IobGV0IF89MDtfPGEubGVuZ3RoO18rKyl7Y29uc3R7c3RhcnRS''@;'; put 'put ''b3c6VCxzdGFydENvbDpXLGVuZFJvdzppZSxlbmRDb2w6Z2V9PWFbX10sd2U9aWUtVCsxO2lmKFQ+PTB8fDE9PVctZ2UrMSlicmVhaztmb3IobGV0IFplPVc7WmU8PWdlO1plKyspZm9yKGxldCBvdD1UO290PD1pZTtvdCsrKXt2YXIgZjtjb25zdCBldD13ZStvdCx5dD1aZS1XOzAhPT15dCYm''@;'; put 'put ''ITE9PT0obnVsbD09PShmPVNsKHRoaXMsSmwpLmdldEhlYWRlclRyZWVOb2RlRGF0YShvdCxaZSkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmlzUm9vdCkmJihsW2V0XVt5dF09IiIpfX19b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRh''@;'; put 'put ''QnlDb29yZHMoYSkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpe2NvbnN0IGQ9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoYSk7aWYoIWQpcmV0dXJuO2NvbnN0e3NlbGVjdGlvbjpofT10aGlzLmhvdCxmPWguaXNTZWxlY3RlZCgpP2guZ2V0''@;'; put 'put ''U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLF89W10se2NvbHVtbkluZGV4OlQsb3JpZ0NvbHNwYW46V309ZCxpZT0haC5pbkluU2VsZWN0aW9uKGEpO2wuc2hpZnRLZXkmJmY/YS5jb2w8Zi5mcm9tLmNvbD9fLnB1c2goZi5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsVCxhLnJvdyk6Xy5w''@;'; put 'put ''dXNoKGEuY29sPmYuZnJvbS5jb2w/Zi5nZXRUb3BTdGFydENvcm5lcigpLmNvbDpULFQrVy0xLGEucm93KTooZmsobCl8fFVwKGwpJiZpZSkmJl8ucHVzaChULFQrVy0xLGEucm93KSxoLnNlbGVjdENvbHVtbnMoLi4uXyl9b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7aWYoIXRo''@;'; put 'put ''aXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSlyZXR1cm47Y29uc3QgZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtpZighZilyZXR1cm47Y29uc3R7Y29sdW1uSW5kZXg6XyxvcmlnQ29sc3BhbjpUfT1mLFc9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxp''@;'; put 'put ''ZT1XLmdldFRvcFN0YXJ0Q29ybmVyKCksZ2U9Vy5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTp3ZX09VztoLmNvbHVtbj0hMCxoLmNlbGw9ITA7Y29uc3QgRWU9W107YS5jb2w8d2UuY29sP0VlLnB1c2goZ2UuY29sLF8pOkVlLnB1c2goYS5jb2w+d2UuY29sP2llLmNvbDpfLF8rVC0xKSx0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3RDb2x1bW5zKC4uLkVlKX1vbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzKGwpe2wubGVuZ3RoPTA7Zm9yKGxldCBhPTA7YTxTbCh0aGlzLEpsKS5nZXRMYXllcnNDb3VudCgpO2ErKylsLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkoYSkpfW9uQWZ0''@;'; put 'put ''ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPVNsKHRoaXMsSmwpLmdldExheWVyc0NvdW50KCk7bGV0IGQ9bC5zdGFydENvbHVtbixoPSEhYTtmb3IobGV0IGY9MDtmPGE7ZisrKXtjb25zdCBfPVNsKHRoaXMsSmwpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4''@;'; put 'put ''KGYsbC5zdGFydENvbHVtbiksVD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KF8pO2lmKF8+PTAmJihoPSExKSxHdShUKSYmVDxsLnN0YXJ0Q29sdW1uKXtkPVQ7YnJlYWt9fWwuc3RhcnRDb2x1bW49aD9TbCh0aGlzLEpsKS5nZXRIZWFk''@;'; put 'put ''ZXJUcmVlTm9kZURhdGEoMCxkKS5jb2x1bW5JbmRleDpkfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChhKTtyZXR1cm4gbD5kP2w6ZH1vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKGwsYSxkKXt2YXIgaDtjb25zdHtsYWJlbDpmfT1udWxs''@;'; put 'put ''IT09KGg9U2wodGhpcyxKbCkuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGQsYSkpJiZ2b2lkIDAhPT1oP2g6e2xhYmVsOiIifTtyZXR1cm4gZn1vbkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe2pB''@;'; put 'put ''KHRoaXMsSmwsbnVsbCksbnVsbCE9PVNsKHRoaXMsczQpJiYoU2wodGhpcyxzNCkudW5zdWJzY3JpYmUoKSxqQSh0aGlzLHM0LG51bGwpKSxzdXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpe2lmKCEobC5yb3c+PTB8fGwuY29sPDApKXJldHVybiBTbCh0''@;'; put 'put ''aGlzLEpsKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobC5yb3csbC5jb2wpfX1jb25zdCBSej1jbGFzcyBzTmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9fTtjbGFzcyBRZiBleHRlbmRzIFJ6e3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNh''@;'; put 'put ''dG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoi''@;'; put 'put ''aHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdV''@;'; put 'put ''SSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLF89''@;'; put 'put ''YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sVD1fLnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIik7aWYoRG4oXy5xdWVyeVNlbGVjdG9yQWxsKCdbY2xhc3NePSJodF9uZXN0aW5nIl0nKSxpZT0+e2llJiZfLnJlbW92ZUNoaWxkKGllKX0pLHBpKGEsUWYuQ1NTX0NMQVNT''@;'; put 'put ''RVMuaW5kaWNhdG9yQ29udGFpbmVyKSxoKXtjb25zdHtyb290RG9jdW1lbnQ6aWV9PXRoaXMuaG90LGdlPVQuY2xvbmVOb2RlKCEwKTtfLmlubmVySFRNTD0iIix2bygwLGgtMSwoKT0+e2NvbnN0IHdlPWllLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtwaSh3ZSxRZi5DU1NfQ0xBU1NFUy5lbXB0''@;'; put 'put ''eUluZGljYXRvciksXy5hcHBlbmRDaGlsZCh3ZSl9KSxfLmFwcGVuZENoaWxkKGdlKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpKXtjb25zdCBpZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7cGkoYSxRZi5DU1NfQ0xBU1NFUy5wYXJlbnQp''@;'; put 'put ''LHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3BpKGllLGAke1FmLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtRZi5DU1NfQ0xBU1NFUy5leHBhbmRCdXR0b259YCk6cGkoaWUsYCR7UWYuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1FmLkNTU19DTEFTU0VTLmNvbGxhcHNl''@;'; put 'put ''QnV0dG9ufWApLF8uYXBwZW5kQ2hpbGQoaWUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3VudCksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLDExKzEwKmErMjUpLHRoaXMuaG90LnJlbmRl''@;'; put 'put ''cigpfX1jb25zdCBrb2U9UWYsbE5lPWNsYXNzIGFOZSBleHRlbmRzIFJ6e2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dz''@;'; put 'put ''U3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29s''@;'; put 'put ''bGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCBfPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksRG4oZC5sYXN0Q29sbGFwc2VkUm93cywoVCxXKT0+e1Q+PWgmJlQ8ZiYmKGQu''@;'; put 'put ''bGFzdENvbGxhcHNlZFJvd3NbV109VCtfKX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RD''@;'; put 'put ''b2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57dm8oaCxoK2YtMSxfPT57Y29uc3QgVD10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2YoXyk7VD4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoVCwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQg''@;'; put 'put ''YT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsXz1udWxsLFQ9bnVsbDtyZXR1cm4g''@;'; put 'put ''aXNOYU4obCk/KGY9bCxfPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxfPWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJkRuKGYuX19jaGlsZHJlbixXPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93SW5kZXgoVykpfSksVD10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihfKSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2goXyksVH1jb2xs''@;'; put 'put ''YXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtEbihs''@;'; put 'put ''LGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd''@;'; put 'put ''O2NvbnN0IGg9W107cmV0dXJuIERuKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn''@;'; put 'put ''dW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZEbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbixfPT57Y29uc3QgVD10''@;'; put 'put ''aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KF8pO2EucHVzaChUKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKFQsYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1b''@;'; put 'put ''XTtyZXR1cm4gRG4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltd''@;'; put 'put ''LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZEbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbixfPT57aWYoIXRoaXMuaXNBbnlQYXJlbnRD''@;'; put 'put ''b2xsYXBzZWQoXykpe2NvbnN0IFQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChfKTthLnB1c2goVCksdGhpcy5leHBhbmRDaGlsZFJvd3MoVCxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg''@;'; put 'put ''MCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLF89bnVsbCxUPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsXz10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksXz1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKF8pLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJkRuKGYuX19jaGls''@;'; put 'put ''ZHJlbixXPT57Y29uc3QgaWU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChXKTtoLnB1c2goaWUpfSksVD10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhpcy51bnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksVH1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwp''@;'; put 'put ''e2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107RG4obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhw''@;'; put 'put ''YW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107RG4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihk''@;'; put 'put ''KSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107RG4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYm''@;'; put 'put ''YS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntEbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEw''@;'; put 'put ''KX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxsPT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihhKSYmRG4oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFn''@;'; put 'put ''ZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBhcmVudENvbGxhcHNlZChsKXtsZXQgYT1sO2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFy''@;'; put 'put ''ZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1cm4hMX10b2dnbGVTdGF0ZShsLGEpe2lmKGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1l''@;'; put 'put ''ZFJvdyhhLnJvdyk7Qm8obC50YXJnZXQsa29lLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRyZW4oZCk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGQpLHYyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0KCl7dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19LEFvZT1uZXcgV2Vh''@;'; put 'put ''a01hcCx1TmU9Y2xhc3MgY05lIGV4dGVuZHMgUnp7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLEFvZS5zZXQodGhpcyx7cm93X2Fib3ZlOihkLGgpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGhbaC5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGQs''@;'; put 'put ''aCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSksdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcn1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFkZF9jaGlsZCIsbmFtZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobkIpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTt0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5o''@;'; put 'put ''b3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShyQil9LGNhbGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVk''@;'; put 'put ''TGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gdm8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gRG4o''@;'; put 'put ''YSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtjb25zdCBhPUFvZS5nZXQodGhpcyk7cmV0dXJuIHZvKDAsbC5pdGVtcy5sZW5ndGgtMSxkPT57Y29uc3Qg''@;'; put 'put ''aD1hW2wuaXRlbXNbZF0ua2V5XTtudWxsIT1oJiYobC5pdGVtc1tkXS5jYWxsYmFjaz1oKX0pLGx9fTtjbGFzcyBkTmV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5j''@;'; put 'put ''b2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRyb3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0''@;'; put 'put ''IF89ZD09PXRoaXMuaG90LmNvdW50Um93cygpLFQ9Xz90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7bGV0IFc9ITA7Y29uc3QgaWU9bC5tYXAob3Q9PntpZighVylyZXR1cm4hMTtjb25zdCBldD10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3cob3QpO3JldHVybiBXPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcoZXQsVCksZXR9KSxnZT0tMT09PWllLmluZGV4T2YoVCk7aWYoIVd8fCFnZSlyZXR1cm4hMTtjb25zdCB3ZT10aGlzLmdldEJhc2VQYXJlbnQoaWUpLEVlPXRoaXMuZ2V0VGFyZ2V0UGFy''@;'; put 'put ''ZW50KF8sVCksWmU9d2U9PT1FZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKEVlKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRz''@;'; put 'put ''TG9jYXRpb25zKGllLFQsWmUpLHRoaXMubW92ZVJvd3MoaWUsVCxFZSksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoaWUsVCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCksITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJv''@;'; put 'put ''cEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IF89ITE7cmV0dXJuIExhKGgpJiYoR2EoQWFgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRoZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUg''@;'; put 'put ''TmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixhLGQsaCxmLCExKSxfPSEwKSxffXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRh''@;'; put 'put ''dGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJuIHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRo''@;'; put 'put ''aXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xs''@;'; put 'put ''YXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFu''@;'; put 'put ''YWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhpcy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01l''@;'; put 'put ''dGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxl''@;'; put 'put ''bmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MCxfPW51bGwsVD1udWxsO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IFc9bnVsbDtXPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6''@;'; put 'put ''YSk7Y29uc3QgaWU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PVc/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTpXLTEpLGdlPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaWUpO2g9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coZ2Up''@;'; put 'put ''LGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO189dGhpcy5ob3Quc2VsZWN0aW9uLFQ9dGhpcy5ob3QuY291bnRDb2xzKCktMSxfLnNldFJhbmdlU3RhcnQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCwwKSksXy5zZXRSYW5nZUVuZCh0aGlzLmhv''@;'; put 'put ''dC5fY3JlYXRlQ2VsbENvb3JkcyhmLFQpLCEwKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1jb25zdCBPej0ibmVzdGVkUm93cyIsZTM9bmV3IFdlYWtNYXA7Y2xhc3MgcE5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7''@;'; put 'put ''cmV0dXJuIE96fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRhdGFNYW5hZ2VyPW51bGwsdGhpcy5oZWFkZXJzVUk9bnVsbCx0aGlzLmNvbGxhcHNlZFJvd3NNYXA9bnVsbCxlMy5zZXQodGhpcyx7bW92ZWRUb0Nv''@;'; put 'put ''bGxhcHNlZDohMSxza2lwUmVuZGVyOm51bGwsc2tpcENvcmVBUElNb2RpZmllcnM6ITF9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbT3pdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRo''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgbXkpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IGNsYXNzIGlOZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWEsdGhpcy5kYXRhPW51bGwsdGhpcy5wbHVnaW49bCx0aGlzLnBhcmVudFJlZmVyZW5jZT1u''@;'; put 'put ''ZXcgV2Vha01hcCx0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9fXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9Z2V0UmF3U291cmNlRGF0YSgpe2xldCBsPW51bGw7cmV0dXJuIHRo''@;'; put 'put ''aXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGx9dXBkYXRlV2l0aERhdGEobCl7dGhpcy5zZXREYXRhKGwpLHRoaXMucmV3cml0ZUNhY2hlKCl9cmV3cml0ZUNh''@;'; put 'put ''Y2hlKCl7dGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSx2bygwLHRoaXMuZGF0YS5sZW5ndGgtMSxsPT57dGhpcy5jYWNoZU5vZGUodGhpcy5kYXRhW2xdLDAsbnVsbCl9KX1jYWNoZU5vZGUobCxhLGQpe3RoaXMuY2FjaGUu''@;'; put 'put ''bGV2ZWxzW2FdfHwodGhpcy5jYWNoZS5sZXZlbHNbYV09W10sdGhpcy5jYWNoZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNhY2hlLmxldmVsc1thXS5wdXNoKGwpLHRoaXMuY2FjaGUucm93cy5wdXNoKGwpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGwse3BhcmVudDpkLHJvdzp0aGlzLmNhY2hl''@;'; put 'put ''LnJvd3MubGVuZ3RoLTEsbGV2ZWw6YX0pLHRoaXMuaGFzQ2hpbGRyZW4obCkmJkRuKGwuX19jaGlsZHJlbixoPT57dGhpcy5jYWNoZU5vZGUoaCxhKzEsbCl9KX1nZXREYXRhT2JqZWN0KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5yb3dzW2xdfXJlYWRUcmVlTm9kZXMobCxh''@;'; put 'put ''LGQsaCl7bGV0IGY9ITEsXz1hO2lmKGlzTmFOKF8pJiZfLmVuZClyZXR1cm4gXztsZXQgVD1sO3JldHVybiBUfHwoVD17X19jaGlsZHJlbjp0aGlzLmRhdGF9LGY9ITAsXy09MSksbnVsbCE9ZCYmXz09PWQ/e3Jlc3VsdDpULGVuZDohMH06bnVsbCE9aCYmVD09PWg/e3Jlc3VsdDpfLGVuZDoh''@;'; put 'put ''MH06KF8rPTEsVC5fX2NoaWxkcmVuJiZEbihULl9fY2hpbGRyZW4sVz0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNldChXLGY/bnVsbDpUKSxfPXRoaXMucmVhZFRyZWVOb2RlcyhXLF8sZCxoKSxpc05hTihfKSYmXy5lbmQpcmV0dXJuITF9KSxfKX1tb2NrUGFyZW50KCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLm1vY2tOb2RlKCk7cmV0dXJuIGwuX19jaGlsZHJlbj10aGlzLmRhdGEsbH1tb2NrTm9kZSgpe2NvbnN0IGw9e307cmV0dXJuIGRzKHRoaXMuZGF0YVswXSwoYSxkKT0+e2xbZF09bnVsbH0pLGx9Z2V0Um93SW5kZXgobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJ''@;'; put 'put ''bmZvLmdldChsKS5yb3d9Z2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCl7bGV0IGE9bnVsbDthPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpO2NvbnN0IGQ9dGhpcy5nZXRSb3dQYXJlbnQobCk7cmV0dXJuIG51bGw9PWQ/dGhpcy5kYXRhLmluZGV4T2YoYSk6ZC5fX2NoaWxkcmVu''@;'; put 'put ''LmluZGV4T2YoYSl9Y291bnRBbGxSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlzLmRhdGF9KX1jb3VudENoaWxkcmVuKGwpe2xldCBhPTAsZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiZkLl9fY2hpbGRyZW4/''@;'; put 'put ''KERuKGQuX19jaGlsZHJlbixoPT57YSs9MSxoLl9fY2hpbGRyZW4mJihhKz10aGlzLmNvdW50Q2hpbGRyZW4oaCkpfSksYSk6MH1nZXRSb3dQYXJlbnQobCl7bGV0IGE7cmV0dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQoYSl9''@;'; put 'put ''Z2V0Um93T2JqZWN0UGFyZW50KGwpe3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGw/dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwobCl7bGV0IGE9bnVsbDtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSxhP3RoaXMu''@;'; put 'put ''Z2V0Um93T2JqZWN0TGV2ZWwoYSk6bnVsbH1nZXRSb3dPYmplY3RMZXZlbChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLmxldmVsfWhhc0NoaWxkcmVuKGwpe2xldCBhPWw7cmV0dXJuIGlzTmFOKGEpfHwoYT10aGlzLmdldERhdGFPYmplY3QoYSkp''@;'; put 'put ''LCEoIWEuX19jaGlsZHJlbnx8IWEuX19jaGlsZHJlbi5sZW5ndGgpfWlzQ2hpbGQobCl7cmV0dXJuIG51bGwhPT10aGlzLmdldFJvd1BhcmVudChsKX1nZXRDaGlsZChsLGEpe3ZhciBkO3JldHVybihudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZFthXSl8fG51''@;'; put 'put ''bGx9aXNSb3dIaWdoZXN0TGV2ZWwobCl7cmV0dXJuIXRoaXMuaXNDaGlsZChsKX1pc1BhcmVudChsKXt2YXIgYTtsZXQgZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiYhIWQuX19jaGlsZHJlbiYmMCE9PShudWxsPT09KGE9ZC5fX2NoaWxkcmVuKXx8''@;'; put 'put ''dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpfWFkZENoaWxkKGwsYSl7bGV0IGQ9YTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsZCk7bGV0IGg9bnVsbDtsJiYoaD10aGlzLmdldFJvd0luZGV4KGwpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93Iixo''@;'; put 'put ''K3RoaXMuY291bnRDaGlsZHJlbihsKSsxLDEpO2xldCBmPWw7bHx8KGY9dGhpcy5tb2NrUGFyZW50KCkpLGYuX19jaGlsZHJlbnx8KGYuX19jaGlsZHJlbj1bXSksZHx8KGQ9dGhpcy5tb2NrTm9kZSgpKSxmLl9fY2hpbGRyZW4ucHVzaChkKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IF89''@;'; put 'put ''dGhpcy5nZXRSb3dJbmRleChkKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKF8sMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixfLDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGQpfWFkZENoaWxkQXRJbmRleChsLGEsZCl7''@;'; put 'put ''bGV0IGYsaD1kO2lmKGh8fChoPXRoaXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxkIixsLGgsYSksbCl7Y29uc3QgVD10aGlzLmdldFJvd0luZGV4KGwpK2ErMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixULDEpLGwuX19jaGlsZHJl''@;'; put 'put ''bi5zcGxpY2UoYSxudWxsLGgpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksIl9fY2hpbGRyZW4iLGwuX19jaGlsZHJlbiwi''@;'; put 'put ''TmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFQsMSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsVCwxKSxmPVR9ZWxzZSB0aGlzLnBs''@;'; put 'put ''dWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixhLDEsIk5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGY9dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFb''@;'; put 'put ''YV0pO2g9dGhpcy5nZXREYXRhT2JqZWN0KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGgsYSl9YWRkU2libGluZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93Ijtjb25zdCBkPXRoaXMu''@;'; put 'put ''dHJhbnNsYXRlVHJpbW1lZFJvdyhsKSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLGY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKTtzd2l0Y2goYSl7Y2FzZSJiZWxvdyI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGls''@;'; put 'put ''ZEF0SW5kZXgoaCxmLG51bGwpfX1kZXRhY2hGcm9tUGFyZW50KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1udWxsO2NvbnN0IGg9W107QXJyYXkuaXNBcnJheShsKT8odm8obFswXSxsWzJdLEVlPT57Y29uc3Qg''@;'; put 'put ''WmU9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KEVlKTtoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KFplKSl9KSx2bygwLGgubGVuZ3RoLTIsRWU9Pnt0aGlzLmRldGFjaEZyb21QYXJlbnQoaFtFZV0sITEpfSksZD1oW2gubGVuZ3RoLTFdKTpkPWw7Y29uc3QgZj10aGlzLmdldFJvd0luZGV4''@;'; put 'put ''KGQpLF89dGhpcy5jb3VudENoaWxkcmVuKGQpLFQ9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKSxXPXRoaXMuZ2V0Um93UGFyZW50KGQpLGllPXRoaXMuZ2V0Um93UGFyZW50KFcpLGdlPXRoaXMuZ2V0Um93SW5kZXgoaWUpO2xldCB3ZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVEZXRhY2hDaGlsZCIsVyxkKSxudWxsIT1UKXtjb25zdCBFZT1BcnJheS5mcm9tKG5ldyBBcnJheShmK18rMSkua2V5cygpKS5zcGxpY2UoLTEqKF8rMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsXysxLEVlLHRoaXMucGx1Z2luLnBsdWdpbk5h''@;'; put 'put ''bWUpLFcuX19jaGlsZHJlbi5zcGxpY2UoVCwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsZixfKzEsRWUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksaWUpe3dlPWdlK3RoaXMuY291bnRDaGlsZHJlbihpZSk7Y29uc3QgWmU9dGhpcy5n''@;'; put 'put ''ZXRDaGlsZChpZSx0aGlzLmNvdW50Q2hpbGRyZW4oaWUpLTEpLG90PXRoaXMuZ2V0Um93SW5kZXgoWmUpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLG90KzEsXysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLGllLl9fY2hpbGRyZW4ucHVzaChkKX1lbHNlIHdlPXRoaXMu''@;'; put 'put ''aG90LmNvdW50Um93cygpKzEsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsd2UtMixfKzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5kYXRhLnB1c2goZCl9dGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHdlLTIs''@;'; put 'put ''XysxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRldGFjaENoaWxkIixXLGQsdGhpcy5nZXRSb3dJbmRleChkKSksYSYmdGhpcy5ob3QucmVuZGVyKCl9ZmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1bXTtEbihkLGY9PntoLnB1c2godGhpcy5nZXRE''@;'; put 'put ''YXRhT2JqZWN0KGYpKX0pLERuKGgsZj0+e2NvbnN0IF89dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChmKSxUPXRoaXMuZ2V0Um93UGFyZW50KGYpO251bGw9PT1UP3RoaXMuZGF0YS5zcGxpY2UoXywxKTpULl9fY2hpbGRyZW4uc3BsaWNlKF8sMSl9KSx0aGlzLnJld3JpdGVDYWNoZSgp''@;'; put 'put ''fXNwbGljZURhdGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREYXRhT2JqZWN0KGwtMSk7bGV0IGY9bnVsbCxfPWw7aCYmaC5fX2NoaWxkcmVuJiYwPT09aC5fX2NoaWxkcmVuLmxlbmd0aD8oZj1oLF89MCk6bDx0aGlzLmNvdW50QWxsUm93cygpJiYoZj10aGlzLmdldFJvd1BhcmVudChsKSxf''@;'; put 'put ''PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCkpLGY/ZD9mLl9fY2hpbGRyZW4uc3BsaWNlKF8sYSwuLi5kKTpmLl9fY2hpbGRyZW4uc3BsaWNlKF8sYSk6ZD90aGlzLmRhdGEuc3BsaWNlKF8sYSwuLi5kKTp0aGlzLmRhdGEuc3BsaWNlKF8sYSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1z''@;'; put 'put ''eW5jUm93V2l0aFJhd1NvdXJjZShsKXtsZXQgYT1sLGQ9bnVsbDtkb3tkPXRoaXMuZ2V0Um93UGFyZW50KGQpLG51bGwhPT1kJiYoYT1kKX13aGlsZShudWxsIT09ZCk7dGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRo''@;'; put 'put ''aXMuZ2V0Um93SW5kZXgoYSksIl9fY2hpbGRyZW4iLGEuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5zeW5jUm93V2l0aFJhd1NvdXJjZSIpLHRoaXMucGx1Z2luLmVuYWJsZUNvcmVBUElNb2RpZmllcnMoKX1tb3ZlUm93KGwsYSxkLGgpe2NvbnN0IGY9YT09PXRoaXMuaG90LmNvdW50Um93cygp''@;'; put 'put ''LF89dGhpcy5nZXRSb3dQYXJlbnQobCksVD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpLFc9Xy5fX2NoaWxkcmVuLnNsaWNlKFQsVCsxKSxpZT1sPmE7bGV0IGdlPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PWdlJiYoZ2U9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSks''@;'; put 'put ''bnVsbD09Z2UmJihnZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSksZ2U/Z2UuX19jaGlsZHJlbnx8KGdlLl9fY2hpbGRyZW49W10pOihnZT10aGlzLmdldERhdGFPYmplY3QoYSksZ2UuX19jaGlsZHJlbj1bXSk7Y29uc3Qgd2U9Znx8ZHx8aD9nZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdl''@;'; put 'put ''dFJvd0luZGV4V2l0aGluUGFyZW50KGEpLEVlPV89PT1nZTtnZS5fX2NoaWxkcmVuLnNwbGljZSh3ZSwwLFdbMF0pLF8uX19jaGlsZHJlbi5zcGxpY2UoVCsoaWUmJkVlPzE6MCksMSksdGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShfKSxFZXx8dGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShn''@;'; put 'put ''ZSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2luLmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/''@;'; put 'put ''dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfX0odGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IGxOZSh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcga29lKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVV''@;'; put 'put ''ST1uZXcgdU5lKHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IGROZSh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVy''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlVmlld1JlbmRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlTb3VyY2VM''@;'; put 'put ''ZW5ndGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlTb3VyY2VMZW5ndGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGF0YVNwbGljZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZURhdGFTcGxpY2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''ZmlsdGVyRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkZpbHRlckRhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFy''@;'; put 'put ''Z3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3Jl''@;'; put 'put ''T25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlQWRkQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJBZGRDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''bC5vbkFmdGVyQWRkQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBsLm9uQWZ0ZXJEZXRhY2hDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0hlYWRlcldpZHRoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRl''@;'; put 'put ''Um93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJvd01vdmUoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERh''@;'; put 'put ''dGEiLGE9PnRoaXMub25CZWZvcmVMb2FkRGF0YShhKSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixhPT50aGlzLm9uQmVmb3JlTG9hZERhdGEoYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rl''@;'; put 'put ''ck1hcCgibmVzdGVkUm93cyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKTtjb25zdCBsPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpO3RoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5kYXRhTWFuYWdlci51cGRhdGVXaXRoRGF0YShs''@;'; put 'put ''KSxzdXBlci51cGRhdGVQbHVnaW4oKX1vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl7cmV0dXJuIHRoaXMucm93TW92ZUNvbnRyb2xsZXIub25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpfWRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCl7ZTMuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzPSEw''@;'; put 'put ''fWVuYWJsZUNvcmVBUElNb2RpZmllcnMoKXtlMy5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITF9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGwsYSxkKX1vbk1vZGlmeVJvd0RhdGEobCl7aWYoIWUzLmdldCh0aGlz''@;'; put 'put ''KS5za2lwQ29yZUFQSU1vZGlmaWVycylyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIWUzLmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycylyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5jb3VudEFsbFJvd3MoKX1v''@;'; put 'put ''bkJlZm9yZURhdGFTcGxpY2UobCxhLGQpe3JldHVybiEoIWUzLmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycyYmIXRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCkmJih0aGlzLmRhdGFNYW5hZ2VyLnNwbGljZURhdGEobCxhLGQpLDEpKX1vbkZpbHRlckRhdGEobCxh''@;'; put 'put ''LGQpe2NvbnN0IGg9ZTMuZ2V0KHRoaXMpO3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNoKGRbMF0sYSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0''@;'; put 'put ''YXNoLnNoaWZ0U3Rhc2goZFswXSxudWxsLC0xKmEpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShsLGEsZCksaC5za2lwUmVuZGVyPSEwLHRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLnNsaWNlKCl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGwpfW9uQWZ0ZXJHZXRSb3dIZWFkZXIobCxhKXt0aGlzLmhlYWRlcnNVSS5hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKX1vbk1vZGlmeVJvd0hlYWRlcldpZHRoKGwpe3JldHVybiB0aGlzLmhlYWRlcnNVSS5yb3dIZWFkZXJXaWR0aENhY2hl''@;'; put 'put ''fHxsfW9uQWZ0ZXJSZW1vdmVSb3cobCxhLGQsaCl7aWYoaD09PXRoaXMucGx1Z2luTmFtZSlyZXR1cm47Y29uc3QgZj1lMy5nZXQodGhpcyk7c2V0VGltZW91dCgoKT0+e2Yuc2tpcFJlbmRlcj1udWxsLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBz''@;'; put 'put ''aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0sMCl9b25CZWZvcmVSZW1vdmVSb3cobCxhLGQpe2NvbnN0IGg9QXJyYXkuZnJvbShkLnJlZHVjZSgoZixfKT0+e2lmKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQoXykpe2NvbnN0IFQ9dGhpcy5kYXRhTWFuYWdlci5nZXRE''@;'; put 'put ''YXRhT2JqZWN0KF8pLl9fY2hpbGRyZW47cmV0dXJuIGYuYWRkKF8pLEFycmF5LmlzQXJyYXkoVCkmJlQuZm9yRWFjaChXPT5mLmFkZCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KFcpKSksZn1yZXR1cm4gZi5hZGQoXyl9LG5ldyBTZXQpKTtkLmxlbmd0aD0wLGQucHVzaCguLi5oKX1v''@;'; put 'put ''bkJlZm9yZUFkZENoaWxkKCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCl9b25BZnRlckFkZENoaWxkKGwsYSl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2godGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKSks''@;'; put 'put ''dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfW9uQmVmb3JlRGV0YWNoQ2hpbGQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyRGV0''@;'; put 'put ''YWNoQ2hpbGQobCxhLGQpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGQsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfW9u''@;'; put 'put ''QWZ0ZXJDcmVhdGVSb3coKXt0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpfW9uQWZ0ZXJJbml0KCl7Y29uc3QgbD1NYXRoLm1heCguLi50aGlzLmRhdGFNYW5hZ2VyLmNhY2hlLmxldmVscyk7bD4wJiZ0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aChsKX1vbkJlZm9y''@;'; put 'put ''ZVZpZXdSZW5kZXIobCxhKXtlMy5nZXQodGhpcykuc2tpcFJlbmRlciYmKGEuc2tpcFJlbmRlcj0hMCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX1vbkJlZm9yZUxvYWREYXRhKGwpe2lmKCFnbmUobCkpcmV0dXJuIFNOKCJUaGUgTmVzdGVkIFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFy''@;'; put 'put ''cmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbT3pdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5kYXRhTWFuYWdlci5zZXREYXRhKGwpLHRoaXMu''@;'; put 'put ''ZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9fXNvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksc28uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZUxvYWQiKSxzby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVu''@;'; put 'put ''dFN0YXRlUmVzZXQiKTtjb25zdCBUb2U9InBlcnNpc3RlbnRTdGF0ZSI7Y2xhc3MgX05lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFRvZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMu''@;'; put 'put ''c3RvcmFnZT12b2lkIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RvZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5ldyBjbGFzcyBnTmV7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdzt0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMuc2F2ZWRLZXlzPVtdLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3Jh''@;'; put 'put ''Z2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnkoYSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2lu''@;'; put 'put ''ZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVvZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1f''@;'; put 'put ''JHtsfWApfXJlc2V0QWxsKCl7RG4odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2Nv''@;'; put 'put ''bnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlz''@;'; put 'put ''LnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9''@;'; put 'put ''fSh0aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFs''@;'; put 'put ''dWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3Ro''@;'; put 'put ''aXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVlKGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3RvcmFnZS5zYXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwp''@;'; put 'put ''e3R5cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgUHo9InNlYXJjaCIsd05lPWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9''@;'; put 'put ''LENOZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJuIShMYShjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fExhKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVM''@;'; put 'put ''b3dlckNhc2UoYS5sb2NhbGUpKX07Y2xhc3MgU05lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFB6fXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE5MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmNhbGxiYWNrPXdOZSx0aGlzLnF1''@;'; put 'put ''ZXJ5TWV0aG9kPUNOZSx0aGlzLnNlYXJjaFJlc3VsdENsYXNzPSJodFNlYXJjaFJlc3VsdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbUHpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90''@;'; put 'put ''LmdldFNldHRpbmdzKClbUHpdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbmRlcmVyKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dmFyIGw9dGhpcztjb25zdCBhPWZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW5kZXJlciguLi5hcmd1bWVudHMpfTt0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsYSksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5y''@;'; put 'put ''ZW1vdmVIb29rKCJiZWZvcmVSZW5kZXJlciIsYSl9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1xdWVyeShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5nZXRDYWxsYmFjaygpLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuZ2V0UXVlcnlNZXRob2QoKTtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLGY9''@;'; put 'put ''dGhpcy5ob3QuY291bnRDb2xzKCksXz1bXSxUPXRoaXMuaG90O3JldHVybiB2bygwLGgtMSxXPT57dm8oMCxmLTEsaWU9Pntjb25zdCBnZT10aGlzLmhvdC5nZXREYXRhQXRDZWxsKFcsaWUpLHdlPXRoaXMuaG90LmdldENlbGxNZXRhKFcsaWUpLEVlPXdlLnNlYXJjaC5jYWxsYmFja3x8YSxv''@;'; put 'put ''dD0od2Uuc2VhcmNoLnF1ZXJ5TWV0aG9kfHxkKShsLGdlLHdlKTtvdCYmXy5wdXNoKHtyb3c6Vyxjb2w6aWUsZGF0YTpnZX0pLEVlJiZFZShULFcsaWUsZ2Usb3QpfSl9KSxffWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1s''@;'; put 'put ''fWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7dGhpcy5zZWFy''@;'; put 'put ''Y2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe3VzKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVlcnlNZXRob2Qp''@;'; put 'put ''LGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfW9uQmVmb3JlUmVuZGVyZXIobCxhLGQsaCxmLF8pe2NvbnN0IFQ9Xy5jbGFzc05hbWV8fFtdO2xldCBXPVtdOyJzdHJpbmciPT10eXBlb2YgVD9XPVQuc3BsaXQoIiAiKTpXLnB1c2goLi4uVCksdGhpcy5pc0VuYWJs''@;'; put 'put ''ZWQoKSYmXy5pc1NlYXJjaFJlc3VsdD9XLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpfHxXLnB1c2goYCR7dGhpcy5zZWFyY2hSZXN1bHRDbGFzc31gKTpXLmluY2x1ZGVzKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpJiZXLnNwbGljZShXLmluZGV4T2YodGhpcy5zZWFyY2hSZXN1''@;'; put 'put ''bHRDbGFzcyksMSksXy5jbGFzc05hbWU9Vy5qb2luKCIgIil9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y2xhc3MgRU5lIGV4dGVuZHMgWnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInRvdWNoU2Nyb2xsIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAy''@;'; put 'put ''MDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLnNjcm9sbGJhcnM9W10sdGhpcy5jbG9uZXM9W10sdGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHRoaXMuZnJlZXplT3ZlcmxheXM9ITF9aXNFbmFibGVkKCl7cmV0dXJuIEhO''@;'; put 'put ''KCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT50aGlzLm9uQWZ0ZXJWaWV3UmVuZGVyKCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRD''@;'; put 'put ''b2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+dGhpcy5vbkJlZm9yZVRvdWNoU2Nyb2xsKCkpLHRoaXMuYWRkSG9v''@;'; put 'put ''aygiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsKCk9PnRoaXMub25BZnRlck1vbWVudHVtU2Nyb2xsKCkpfW9uQWZ0ZXJWaWV3UmVuZGVyKCl7aWYodGhpcy5sb2NrZWRDb2xsZWN0aW9uKXJldHVybjtjb25zdHt0b3BPdmVybGF5OmwsYm90dG9tT3ZlcmxheTphLGlubGluZVN0YXJ0T3ZlcmxheTpk''@;'; put 'put ''LHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMCx0aGlzLnNjcm9sbGJhcnMubGVuZ3RoPTAsdGhpcy5zY3JvbGxiYXJzLnB1c2go''@;'; put 'put ''bCksYS5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goYSksdGhpcy5zY3JvbGxiYXJzLnB1c2goZCksaCYmdGhpcy5zY3JvbGxiYXJzLnB1c2goaCksZiYmZi5jbG9uZSYmdGhpcy5zY3JvbGxiYXJzLnB1c2goZiksdGhpcy5jbG9uZXM9W10sbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9u''@;'; put 'put ''ZXMucHVzaChsLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5o''@;'; put 'put ''b2xkZXIucGFyZW50Tm9kZSksaCYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGYmJmYuY2xvbmUmJnRoaXMuY2xvbmVzLnB1c2goZi5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKX1vbkJlZm9yZVRvdWNoU2Nyb2xsKCl7dGhpcy5m''@;'; put 'put ''cmVlemVPdmVybGF5cz0hMCxEbih0aGlzLmNsb25lcyxsPT57cGkobCwiaGlkZS10d2VlbiIpfSl9b25BZnRlck1vbWVudHVtU2Nyb2xsKCl7dGhpcy5mcmVlemVPdmVybGF5cz0hMSxEbih0aGlzLmNsb25lcyxsPT57V28obCwiaGlkZS10d2VlbiIpLHBpKGwsInNob3ctdHdlZW4iKX0pLHRo''@;'; put 'put ''aXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntEbih0aGlzLmNsb25lcyxsPT57V28obCwic2hvdy10d2VlbiIpfSl9LDQwMCksRG4odGhpcy5zY3JvbGxiYXJzLGw9PntsLnJlZnJlc2goKSxsLnJlc2V0Rml4ZWRQb3NpdGlvbigpfSksdGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5z''@;'; put 'put ''eW5jU2Nyb2xsV2l0aE1hc3RlcigpfX1jb25zdCB6QT0idHJpbVJvd3MiO2NsYXNzIEFOZSBleHRlbmRzIFpze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiB6QX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhp''@;'; put 'put ''cy50cmltbWVkUm93c01hcD1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6QV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3Mi''@;'; put 'put ''LG5ldyBteSksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pBXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlz''@;'; put 'put ''LmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuY2xlYXIoKSxEbihsLGE9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLnVucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfWdldFRyaW1tZWRSb3dzKCl7cmV0dXJuIHRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VHJpbW1lZEluZGV4ZXMoKX10cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRo''@;'; put 'put ''aXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVUcmltUm93IixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsXz0+e3RoaXMudHJp''@;'; put 'put ''bW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KF8sITApfSl9LCEwKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJUcmltUm93IixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfXRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2Qr''@;'; put 'put ''KylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnRyaW1Sb3dzKGEpfXVudHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXRoaXMudHJpbW1lZFJvd3NNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoKSxfPWwu''@;'; put 'put ''bGVuZ3RoPjA7ZCYmXyYmKERuKGwsVz0+e2ZbV109ITF9KSxoPUFsKGYsKFcsaWUsZ2UpPT4oaWUmJlcucHVzaChnZSksVyksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGEsaCxkJiZfKSYmKGQmJl8mJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVz''@;'; put 'put ''KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJl8sZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJp''@;'; put 'put ''bVJvd3MoYSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291''@;'; put 'put ''cmNlUm93cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9b25NYXBJbml0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pBXTtBcnJheS5pc0FycmF5KGwpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e0RuKGwsYT0+e3Ro''@;'; put 'put ''aXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB0byhjKXtjb25zdCBsPXRoaXM7dGhpcy5pbnN0YW5jZT1jLHRoaXMuZG9uZUFjdGlvbnM9W10sdGhpcy51bmRvbmVBY3Rpb25zPVtdLHRoaXMu''@;'; put 'put ''aWdub3JlTmV3QWN0aW9ucz0hMSx0aGlzLmVuYWJsZWQ9ITEsYy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oYSxkKXtjb25zdCBoPWEmJmEubGVuZ3RoO2gmJmEuZmluZChUPT57Y29uc3RbLCxXLGllXT1UO3JldHVybiBXIT09aWV9KSYmbC5kb25lKCgpPT57Y29uc3QgVD1hLnJl''@;'; put 'put ''ZHVjZSgoaWUsZ2UpPT4oaWUucHVzaChbLi4uZ2VdKSxpZSksW10pO0RuKFQsaWU9PntpZVsxXT1jLnByb3BUb0NvbChpZVsxXSl9KTtjb25zdCBXPWg+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tUWzBdWzBdLFRbMF1bMV1dXTtyZXR1cm4gbmV3IHRvLkNoYW5nZUFjdGlvbihULFcpfSxkKX0p''@;'; put 'put ''LGMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChhLGQsaCk9PntsLmRvbmUoKCk9Pm5ldyB0by5DcmVhdGVSb3dBY3Rpb24oYSxkKSxoKX0pLGMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pntjb25zdCBUPWMudG9QaHlzaWNhbFJvdyhhKSxXPXl1''@;'; put 'put ''KGwuaW5zdGFuY2UuZ2V0U291cmNlRGF0YShULDAsVCtkLTEsbC5pbnN0YW5jZS5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyB0by5SZW1vdmVSb3dBY3Rpb24oVCxXLGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sYy5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCxj''@;'; put 'put ''LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX0sZil9KSxjLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT57bC5kb25lKCgpPT5uZXcgdG8uQ3JlYXRlQ29sdW1uQWN0aW9uKGEsZCksaCl9KSxjLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsKGEsZCxoLGYp''@;'; put 'put ''PT57bC5kb25lKCgpPT57Y29uc3QgVD1sLmluc3RhbmNlLmdldFNvdXJjZURhdGFBcnJheSgpLFc9KGwuaW5zdGFuY2UuY291bnRDb2xzKCkrYSklbC5pbnN0YW5jZS5jb3VudENvbHMoKSxpZT1bXSxnZT1bXSx3ZT1bXTt2byhULmxlbmd0aC0xLG90PT57Y29uc3QgZXQ9W10seXQ9VFtvdF07''@;'; put 'put ''dm8oVyxXKyhkLTEpLGt0PT57ZXQucHVzaCh5dFtjLnRvUGh5c2ljYWxDb2x1bW4oa3QpXSl9KSxpZS5wdXNoKGV0KX0pLHZvKGQtMSxvdD0+e3dlLnB1c2goYy50b1BoeXNpY2FsQ29sdW1uKFcrb3QpKX0pLEFycmF5LmlzQXJyYXkoYy5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnMpJiZ2byhk''@;'; put 'put ''LTEsb3Q9PntnZS5wdXNoKGMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2MudG9QaHlzaWNhbENvbHVtbihXK290KV18fG51bGwpfSk7Y29uc3QgRWU9Yy5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxaZT1jLnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5j''@;'; put 'put ''ZSgpO3JldHVybiBuZXcgdG8uUmVtb3ZlQ29sdW1uQWN0aW9uKFcsd2UsaWUsZ2UsRWUsWmUsYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0KX0sZil9KSxjLmFkZEhvb2soImJlZm9yZUNlbGxBbGlnbm1lbnQiLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+bmV3IHRvLkNlbGxBbGln''@;'; put 'put ''bm1lbnRBY3Rpb24oYSxkLGgsZikpfSksYy5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLGE9PntsLmRvbmUoKCk9Pm5ldyB0by5GaWx0ZXJzQWN0aW9uKGEpKX0pLGMuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGEsZCk9PnshMSE9PWEmJmwuZG9uZSgoKT0+bmV3IHRvLlJvd01vdmVBY3Rpb24o''@;'; put 'put ''YSxkKSl9KSxjLmFkZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChhLGQpPT57ZHx8bC5kb25lKCgpPT5uZXcgdG8uTWVyZ2VDZWxsc0FjdGlvbihjLGEpKX0pLGMuYWRkSG9vaygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLChhLGQpPT57ZHx8bC5kb25lKCgpPT5uZXcgdG8uVW5tZXJnZUNlbGxzQWN0''@;'; put 'put ''aW9uKGMsYSkpfSksYy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT57bC5pbml0KCl9KX1mdW5jdGlvbiBJb2UoYyxsKXtpZigibG9hZERhdGEiPT09bClyZXR1cm4gdGhpcy51bmRvUmVkby5jbGVhcigpfXRvLnByb3RvdHlwZS5kb25lPWZ1bmN0aW9uKGMsbCl7aWYodGhpcy5pZ25vcmVOZXdB''@;'; put 'put ''Y3Rpb25zfHwiVW5kb1JlZG8udW5kbyI9PT1sfHwiVW5kb1JlZG8ucmVkbyI9PT1sfHwiYXV0byI9PT1sKXJldHVybjtjb25zdCBkPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZCxsKSlyZXR1''@;'; put 'put ''cm47Y29uc3QgZj1jKCksXz10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2goZiksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGQsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tz''@;'; put 'put ''KCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLF8pLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsXyx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9LHRvLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7aWYo''@;'; put 'put ''dGhpcy5pc1VuZG9BdmFpbGFibGUoKSl7Y29uc3QgYz10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixjKTtjb25zdCBsPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0''@;'; put 'put ''ZXJVbmRvU3RhY2tDaGFuZ2UiLGMsdGhpcy5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBhPXl1KGwpO2lmKCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlVW5kbyIsYSkpcmV0dXJuO3RoaXMuaWdub3JlTmV3QWN0aW9ucz0hMDtjb25zdCBoPXRoaXMsZj10aGlzLnVuZG9u''@;'; put 'put ''ZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGYpLGwudW5kbyh0aGlzLmluc3RhbmNlLCgpPT57aC5pZ25vcmVOZXdBY3Rpb25zPSExLGgudW5kb25lQWN0aW9ucy5wdXNoKGwpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kbyIsYSl9fSx0by5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe2lmKHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpe2NvbnN0IGM9dGhpcy51bmRv''@;'; put 'put ''bmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIixjKTtjb25zdCBsPXRoaXMudW5kb25lQWN0aW9ucy5wb3AoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsYyx0aGlzLnVuZG9uZUFjdGlv''@;'; put 'put ''bnMuc2xpY2UoKSk7Y29uc3QgYT15dShsKTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG8iLGEpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgaD10aGlzLGY9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFuY2UucnVuSG9v''@;'; put 'put ''a3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksbC5yZWRvKHRoaXMuaW5zdGFuY2UsKCk9PntoLmlnbm9yZU5ld0FjdGlvbnM9ITEsaC5kb25lQWN0aW9ucy5wdXNoKGwpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGYsdGhpcy5kb25lQWN0aW9u''@;'; put 'put ''cy5zbGljZSgpKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlZG8iLGEpfX0sdG8ucHJvdG90eXBlLmlzVW5kb0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD4wfSx0by5wcm90b3R5cGUuaXNSZWRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg+MH0sdG8ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5kb25lQWN0aW9ucy5sZW5ndGg9MCx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTB9LHRvLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbmFibGVkfSx0by5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0VuYWJsZWQoKSlyZXR1cm47Y29uc3QgYz10aGlzLmluc3RhbmNlO3RoaXMuZW5hYmxlZD0hMCxmdW5jdGlvbiBMTmUoYyl7Yy51bmRvPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8udW5kbygp''@;'; put 'put ''fSxjLnJlZG89ZnVuY3Rpb24oKXtyZXR1cm4gYy51bmRvUmVkby5yZWRvKCl9LGMuaXNVbmRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uaXNVbmRvQXZhaWxhYmxlKCl9LGMuaXNSZWRvQXZhaWxhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uaXNSZWRv''@;'; put 'put ''QXZhaWxhYmxlKCl9LGMuY2xlYXJVbmRvPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8uY2xlYXIoKX19KGMpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxjLmFkZEhvb2soImFmdGVyQ2hhbmdlIixJb2UpfSx0by5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe2lmKCF0aGlzLmlz''@;'; put 'put ''RW5hYmxlZCgpKXJldHVybjtjb25zdCBjPXRoaXMuaW5zdGFuY2U7dGhpcy5lbmFibGVkPSExLGZ1bmN0aW9uIFJOZShjKXtkZWxldGUgYy51bmRvLGRlbGV0ZSBjLnJlZG8sZGVsZXRlIGMuaXNVbmRvQXZhaWxhYmxlLGRlbGV0ZSBjLmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgYy5jbGVhclVu''@;'; put 'put ''ZG99KGMpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLGMucmVtb3ZlSG9vaygiYWZ0ZXJDaGFuZ2UiLElvZSl9LHRvLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5jbGVhcigpLHRoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLmRvbmVBY3Rpb25zPW51bGwsdGhpcy51bmRvbmVB''@;'; put 'put ''Y3Rpb25zPW51bGx9LCh0by5BY3Rpb249ZnVuY3Rpb24oKXt9KS5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpe30sdG8uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7fSx0by5DaGFuZ2VBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmNoYW5nZXM9Yyx0aGlzLnNlbGVjdGVkPWws''@;'; put 'put ''dGhpcy5hY3Rpb25UeXBlPSJjaGFuZ2UifSx6Zih0by5DaGFuZ2VBY3Rpb24sdG8uQWN0aW9uKSx0by5DaGFuZ2VBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPXl1KHRoaXMuY2hhbmdlcyksZD1jLmNvdW50RW1wdHlSb3dzKCEwKSxoPWMuY291bnRFbXB0eUNv''@;'; put 'put ''bHMoITApO2ZvcihsZXQgZj0wLF89YS5sZW5ndGg7ZjxfO2YrKylhW2ZdLnNwbGljZSgzLDEpO2MuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixsKSxjLnNldERhdGFBdENlbGwoYSxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtmb3IobGV0IGY9MCxfPWEubGVuZ3RoO2Y8XztmKyspe2Nv''@;'; put 'put ''bnN0W1QsV109YVtmXTtjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzJiZUKzErYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cz09PWMuY291bnRSb3dzKCkmJmQ9PT1jLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzJiYoYy5hbHRlcigicmVtb3ZlX3JvdyIscGFyc2VJbnQoVCsxLDEw''@;'; put 'put ''KSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzKSxjLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpKSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzJiZXKzErYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scz09PWMuY291bnRDb2xzKCkmJmg9PT1jLmdldFNldHRpbmdzKCkubWlu''@;'; put 'put ''U3BhcmVDb2xzJiYoYy5hbHRlcigicmVtb3ZlX2NvbCIscGFyc2VJbnQoVysxLDEwKSxjLmdldFNldHRpbmdzKCkubWluU3BhcmVDb2xzKSxjLnVuZG9SZWRvLmRvbmVBY3Rpb25zLnBvcCgpKX1jLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfSx0by5DaGFuZ2VBY3Rpb24ucHJv''@;'; put 'put ''dG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPXl1KHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBkPTAsaD1hLmxlbmd0aDtkPGg7ZCsrKWFbZF0uc3BsaWNlKDIsMSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGwpLGMuc2V0RGF0YUF0Q2VsbChhLG51bGwsbnVsbCwiVW5kb1Jl''@;'; put 'put ''ZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmMuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9LHRvLkNyZWF0ZVJvd0FjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuaW5kZXg9Yyx0aGlzLmFtb3VudD1sLHRoaXMuYWN0aW9uVHlwZT0iaW5zZXJ0X3JvdyJ9LHpmKHRvLkNyZWF0ZVJv''@;'; put 'put ''d0FjdGlvbix0by5BY3Rpb24pLHRvLkNyZWF0ZVJvd0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5jb3VudFJvd3MoKSxkPWMuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZVJvd3M7dGhpcy5pbmRleD49YSYmdGhpcy5pbmRleC1kPGEmJih0aGlzLmluZGV4LT1k''@;'; put 'put ''KSxjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsbCksYy5hbHRlcigicmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfSx0by5DcmVhdGVSb3dBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRl''@;'; put 'put ''ckNyZWF0ZVJvdyIsbCksYy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0by5SZW1vdmVSb3dBY3Rpb249ZnVuY3Rpb24oYyxsLGEsZCxoKXt0aGlzLmluZGV4PWMsdGhpcy5kYXRhPWwsdGhpcy5hY3Rpb25UeXBlPSJy''@;'; put 'put ''ZW1vdmVfcm93Iix0aGlzLmZpeGVkUm93c0JvdHRvbT1hLHRoaXMuZml4ZWRSb3dzVG9wPWQsdGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9aH0semYodG8uUmVtb3ZlUm93QWN0aW9uLHRvLkFjdGlvbiksdG8uUmVtb3ZlUm93QWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29u''@;'; put 'put ''c3QgYT1jLmdldFNldHRpbmdzKCksZD1bXTthLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxhLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaCgoaCxmKT0+e09iamVjdC5rZXlzKGgpLmZvckVhY2goXz0+e2NvbnN0IFQ9cGFyc2VJ''@;'; put 'put ''bnQoXywxMCk7ZC5wdXNoKFt0aGlzLmluZGV4K2YsaXNOYU4oVCk/XzpULGhbX11dKX0pfSksYy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsdGhpcy5pbmRleCx0aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnNl''@;'; put 'put ''dFNvdXJjZURhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKSxjLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd0luZGV4ZXNTZXF1ZW5jZSl9LHRvLlJlbW92ZVJvd0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9v''@;'; put 'put ''a09uY2UoImFmdGVyUmVtb3ZlUm93IixsKSxjLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuZGF0YS5sZW5ndGgsIlVuZG9SZWRvLnJlZG8iKX0sdG8uQ3JlYXRlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5pbmRleD1jLHRoaXMuYW1vdW50PWwsdGhpcy5hY3Rp''@;'; put 'put ''b25UeXBlPSJpbnNlcnRfY29sIn0semYodG8uQ3JlYXRlQ29sdW1uQWN0aW9uLHRvLkFjdGlvbiksdG8uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGwpLGMuYWx0ZXIoInJlbW92ZV9jb2wiLHRo''@;'; put 'put ''aXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX0sdG8uQ3JlYXRlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVDb2wiLGwpLGMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXgsdGhp''@;'; put 'put ''cy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX0sdG8uUmVtb3ZlQ29sdW1uQWN0aW9uPWZ1bmN0aW9uKGMsbCxhLGQsaCxmLF8pe3RoaXMuaW5kZXg9Yyx0aGlzLmluZGV4ZXM9bCx0aGlzLmRhdGE9YSx0aGlzLmFtb3VudD10aGlzLmRhdGFbMF0ubGVuZ3RoLHRoaXMuaGVhZGVycz1kLHRoaXMu''@;'; put 'put ''Y29sdW1uUG9zaXRpb25zPWguc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9Zi5zbGljZSgwKSx0aGlzLmFjdGlvblR5cGU9InJlbW92ZV9jb2wiLHRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ9X30semYodG8uUmVtb3ZlQ29sdW1uQWN0aW9uLHRvLkFjdGlvbiksdG8uUmVtb3ZlQ29sdW1uQWN0''@;'; put 'put ''aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Yy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgZD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGg9KGllLGdlLHdlKT0+d2VbdGhpcy5pbmRleGVzLmluZGV4T2Yo''@;'; put 'put ''ZFtnZV0pXSxmPXRoaXMuZGF0YS5sZW5ndGgsXz1bXTtmb3IobGV0IGllPTA7aWU8ZjtpZSsrKV8ucHVzaChjcyh0aGlzLmRhdGFbaWVdLGgpKTtjb25zdCBUPWNzKHRoaXMuaGVhZGVycyxoKSxXPVtdO2MuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXhlc1swXSx0aGlzLmlu''@;'; put 'put ''ZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksRG4oYy5nZXRTb3VyY2VEYXRhQXJyYXkoKSwoaWUsZ2UpPT57RG4oZCwod2UsRWUpPT57aWVbd2VdPV9bZ2VdW0VlXSxXLnB1c2goW2dlLHdlLGllW3dlXV0pfSl9KSxjLnNldFNvdXJjZURhdGFBdENlbGwoVyx2b2lkIDAsdm9pZCAwLCJV''@;'; put 'put ''bmRvUmVkby51bmRvIiksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJkRuKFQsKGllLGdlKT0+e2MuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2RbZ2VdXT1pZX0pLGMuYmF0Y2hFeGVjdXRpb24oKCk9PntjLnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0''@;'; put 'put ''aW9ucyksYy5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5SZW1vdmVDb2x1bW5BY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24o''@;'; put 'put ''YyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsbCksYy5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uPWZ1bmN0aW9uKGMsbCxhLGQpe3RoaXMuc3RhdGVCZWZvcmU9Yyx0aGlz''@;'; put 'put ''LnJhbmdlPWwsdGhpcy50eXBlPWEsdGhpcy5hbGlnbm1lbnQ9ZH0sdG8uQ2VsbEFsaWdubWVudEFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe0RuKHRoaXMucmFuZ2UsYT0+e2EuZm9yQWxsKChkLGgpPT57ZD49MCYmaD49MCYmYy5zZXRDZWxsTWV0YShkLGgsImNsYXNzTmFt''@;'; put 'put ''ZSIsdGhpcy5zdGF0ZUJlZm9yZVtkXVtoXXx8IiBodExlZnQiKX0pfSksYy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxjLnJlbmRlcigpfSx0by5DZWxsQWxpZ25tZW50QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7S3AodGhpcy5yYW5nZSx0aGlzLnR5cGUs''@;'; put 'put ''dGhpcy5hbGlnbm1lbnQsKGEsZCk9PmMuZ2V0Q2VsbE1ldGEoYSxkKSwoYSxkLGgsZik9PmMuc2V0Q2VsbE1ldGEoYSxkLGgsZikpLGMuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYy5yZW5kZXIoKX0sdG8uRmlsdGVyc0FjdGlvbj1mdW5jdGlvbihjKXt0aGlzLmNvbmRpdGlv''@;'; put 'put ''bnNTdGFjaz1jLHRoaXMuYWN0aW9uVHlwZT0iZmlsdGVyIn0semYodG8uRmlsdGVyc0FjdGlvbix0by5BY3Rpb24pLHRvLkZpbHRlcnNBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7Yy5hZGRIb29rT25jZSgiYWZ0ZXJW''@;'; put 'put ''aWV3UmVuZGVyIixsKSxhLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjay5zbGljZSgwLHRoaXMuY29uZGl0aW9uc1N0YWNrLmxlbmd0aC0xKSksYS5maWx0ZXIoKX0sdG8uRmlsdGVyc0FjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5j''@;'; put 'put ''dGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQbHVnaW4oImZpbHRlcnMiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKHRoaXMuY29uZGl0aW9uc1N0YWNrKSxhLmZpbHRlcigpfSx0by5NZXJnZUNlbGxz''@;'; put 'put ''QWN0aW9uPWNsYXNzIEROZSBleHRlbmRzIHRvLkFjdGlvbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jZWxsUmFuZ2U9YTtjb25zdCBkPXRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCksaD10aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJh''@;'; put 'put ''bmdlRGF0YT1sLmdldERhdGEoZC5yb3csZC5jb2wsaC5yb3csaC5jb2wpfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10''@;'; put 'put ''aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5yYW5nZURhdGEsdm9pZCAwLHZvaWQgMCwiTWVyZ2VDZWxscyIpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29rT25j''@;'; put 'put ''ZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UpfX0sdG8uVW5tZXJnZUNlbGxzQWN0aW9uPWNsYXNzIElOZSBleHRlbmRzIHRvLkFjdGlvbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jZWxsUmFuZ2U9YX11bmRvKGwsYSl7Y29uc3QgZD1s''@;'; put 'put ''LmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRl''@;'; put 'put ''ciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVuZGVyKCl9fSx0by5Sb3dNb3ZlQWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5yb3dzPWMuc2xpY2UoKSx0aGlzLmZpbmFsSW5kZXg9bCx0aGlzLmFjdGlvblR5cGU9InJvd19tb3ZlIn0semYodG8uUm93TW92ZUFj''@;'; put 'put ''dGlvbix0by5BY3Rpb24pLHRvLlJvd01vdmVBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIiksZD1bXS5jb25jYXQodGhpcy5yb3dzKSxoPWQuZmlsdGVyKFQ9PlQ+dGhpcy5maW5hbEluZGV4KSxmPWQuZmlsdGVy''@;'; put 'put ''KFQ9PlQ8PXRoaXMuZmluYWxJbmRleCksXz1oLnNvcnQoKFQsVyk9PlctVCkuY29uY2F0KGYuc29ydCgoVCxXKT0+VC1XKSk7Yy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKTtmb3IobGV0IFQ9MDtUPF8ubGVuZ3RoO1QrPTEpe2NvbnN0IFc9Yy50b1Zpc3VhbFJvdyhfW1RdKTth''@;'; put 'put ''Lm1vdmVSb3coVyxfW1RdKX1jLnJlbmRlcigpLGMuZGVzZWxlY3RDZWxsKCksYy5zZWxlY3RSb3dzKHRoaXMucm93c1swXSx0aGlzLnJvd3NbMF0rdGhpcy5yb3dzLmxlbmd0aC0xKX0sdG8uUm93TW92ZUFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRQ''@;'; put 'put ''bHVnaW4oIm1hbnVhbFJvd01vdmUiKTtjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGEubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbEluZGV4KSxjLnJlbmRlcigpLGMuZGVzZWxlY3RDZWxsKCksYy5zZWxlY3RSb3dzKHRoaXMuZmluYWxJbmRleCx0aGlz''@;'; put 'put ''LmZpbmFsSW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX0sdG8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtjb25zdCBjPXRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS51bmRvLGw9dHlwZW9mIGM+InUifHxjO3RoaXMuaW5zdGFuY2UudW5kb1JlZG98fCh0aGlzLmluc3RhbmNlLnVuZG9S''@;'; put 'put ''ZWRvPXRoaXMpLGw/dGhpcy5pbnN0YW5jZS51bmRvUmVkby5lbmFibGUoKTp0aGlzLmluc3RhbmNlLnVuZG9SZWRvLmRpc2FibGUoKX0sdG8ucHJvdG90eXBlLnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0''@;'; put 'put ''KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnJlZG8oKX19''@;'; put 'put ''XSx7cnVuT25seUlmOmg9PiFoLmFsdEtleSxncm91cDoidW5kb1JlZG8ifSl9LHRvLnByb3RvdHlwZS51bnJlZ2lzdGVyU2hvcnRjdXRzPWZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91''@;'; put 'put ''cCgidW5kb1JlZG8iKX07Y29uc3QgZXc9c28uZ2V0U2luZ2xldG9uKCk7ZXcuYWRkKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe3ZhciBjO251bGw9PT0oYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKSl8fHZvaWQgMD09PWN8fGMuaW5pdCgpfSksZXcucmVnaXN0ZXIoImJl''@;'; put 'put ''Zm9yZVVuZG8iKSxldy5yZWdpc3RlcigiYWZ0ZXJVbmRvIiksZXcucmVnaXN0ZXIoImJlZm9yZVJlZG8iKSxldy5yZWdpc3RlcigiYWZ0ZXJSZWRvIiksdG8uUExVR0lOX0tFWT0idW5kb1JlZG8iLHRvLlNFVFRJTkdfS0VZUz0hMDtjb25zdCBPTmU9dG87ZnVuY3Rpb24gRnooKXsoZnVuY3Rp''@;'; put 'put ''b24gX0llKCl7UjAodjcpLFIwKFhCKSxSMChKbmUpLFIwKG5yZSksUjAoSkIpLFIwKHFCKSxSMChycmUpLFIwKGlyZSksUjAobUllKSxSMChrZyksUjAoc3JlKX0pKCksZnVuY3Rpb24gUkllKCl7cGgoYjcpLHBoKE15KSxwaCh0aikscGgoZWopLHBoKHJqKSxwaChpaikscGgoJHApLHBoKG9q''@;'; put 'put ''KX0oKSxmdW5jdGlvbiBCSWUoKXthNyhFeSksYTcoWWspLGE3KHNqKSxhNyhXayl9KCksZnVuY3Rpb24gcUllKCl7YjIoakllKSxiMih6SWUpLGIyKFVJZSksYjIoWkllKSxiMihZSWUpLGIyKFdJZSksYjIoR0llKSxiMihHbmUpLGIyKCRJZSl9KCksZnVuY3Rpb24gUE5lKCl7anMoQXkpLGpz''@;'; put 'put ''KHVMZSksanMoVHkpLGpzKE1MZSksanMoUkxlKSxqcyhPcmUpLGpzKGFSZSksanMoU1JlKSxqcyhaUmUpLGpzKGZPZSksanMoRE9lKSxqcyhMT2UpLGpzKE9PZSksanMoR09lKSxqcyh6UGUpLGpzKHZGZSksanMoTUZlKSxqcyhJRmUpLGpzKFBGZSksanMoWkZlKSxqcyhXRmUpLGpzKHRIZSks''@;'; put 'put ''anMockhlKSxqcyhoSGUpLGpzKF9IZSksanMod0hlKSxqcyhyTmUpLGpzKHBOZSksanMoX05lKSxqcyhTTmUpLGpzKEVOZSksanMoQU5lKSxqcyhPTmUpfSgpfWxldCBDMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c''@;'; put 'put ''dTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxWNz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W2FQLGxQXSxpbXBvcnRzOltvbywkbCxkYyxfdSxDMl19KSxjfSkoKSx0dz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1''@;'; put 'put ''aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKSxMb2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28sJGxdfSksY30p''@;'; put 'put ''KCksQjc9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsX3UsZGMsVjcsdHcsQzIsTG9lXX0pLGN9KSgpO3ZhciBIeixOeixW''@;'; put 'put ''eixCeixqeixHYz1GKDgzNDE3KSx0Mz1GKDEyMDcwKTtjbGFzcyBSb2V7Y29uc3RydWN0b3IoKXt0aGlzLnF1ZXVlPVtdfWFkZFRvUXVldWUobCl7dGhpcy5xdWV1ZS5wdXNoKC4uLmwpfX1GeigpLGZ1bmN0aW9uIEZOZShjKXtjb25zdCBsPSEodHlwZW9mIHdpbmRvdz4idSIpJiZ3aW5kb3cu''@;'; put 'put ''alF1ZXJ5O2wmJihsLmZuLmhhbmRzb250YWJsZT1mdW5jdGlvbihhKXtjb25zdCBkPXRoaXMuZmlyc3QoKTtsZXQgZixoPWQuZGF0YSgiaGFuZHNvbnRhYmxlIik7aWYoInN0cmluZyIhPXR5cGVvZiBhKXtjb25zdCBpZT1hfHx7fTtyZXR1cm4gaD9oLnVwZGF0ZVNldHRpbmdzKGllKTooaD1u''@;'; put 'put ''ZXcgYy5Db3JlKGRbMF0saWUpLGQuZGF0YSgiaGFuZHNvbnRhYmxlIixoKSxoLmluaXQoKSksZH1pZihoKXtpZighKHR5cGVvZiBoW2FdPCJ1IikpdGhyb3cgbmV3IEVycm9yKGBIYW5kc29udGFibGUgZG8gbm90IHByb3ZpZGUgYWN0aW9uOiAke2F9YCk7Zm9yKHZhciBfPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsVD1uZXcgQXJyYXkoXz4xP18tMTowKSxXPTE7VzxfO1crKylUW1ctMV09YXJndW1lbnRzW1ddO2Y9aFthXS5jYWxsKGgsLi4uVCksImRlc3Ryb3kiPT09YSYmZC5yZW1vdmVEYXRhKCl9cmV0dXJuIGZ9KX0obXMpLG1zLl9fR2hvc3RUYWJsZT1saixtcy5fZ2V0TGlzdGVuZXJzQ291''@;'; put 'put ''bnRlcj1mdW5jdGlvbiBsa2UoKXtyZXR1cm4gZ2t9LG1zLl9nZXRSZWdpc3RlcmVkTWFwc0NvdW50ZXI9ZnVuY3Rpb24gTVRlKCl7cmV0dXJuIHBWfSxtcy5FdmVudE1hbmFnZXI9bGw7Y29uc3QgSE5lPVthZSxSLGosQixFLE0seCxrLE8sbSx6LEldLE5OZT1bbGUsS107bXMuaGVscGVyPXt9''@;'; put 'put ''LG1zLmRvbT17fSxEbihITmUsYz0+e0RuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKG1zLmhlbHBlcltsXT1jW2xdKX0pfSksRG4oTk5lLGM9PntEbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQo''@;'; put 'put ''MCkmJihtcy5kb21bbF09Y1tsXSl9KX0pLG1zLmNlbGxUeXBlcz1udWxsIT09KEh6PW1zLmNlbGxUeXBlcykmJnZvaWQgMCE9PUh6P0h6Ont9LERuKFREZSgpLGM9Pnttcy5jZWxsVHlwZXNbY109VUIoYyl9KSxtcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1iMixtcy5jZWxsVHlwZXMu''@;'; put 'put ''Z2V0Q2VsbFR5cGU9VUIsbXMuZWRpdG9ycz1udWxsIT09KE56PW1zLmVkaXRvcnMpJiZ2b2lkIDAhPT1Oej9Oejp7fSxEbihpa2UoKSxjPT57bXMuZWRpdG9yc1tgJHtidShjKX1FZGl0b3JgXT1wayhjKX0pLG1zLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9UjAsbXMuZWRpdG9ycy5nZXRFZGl0''@;'; put 'put ''b3I9cGssbXMucmVuZGVyZXJzPW51bGwhPT0oVno9bXMucmVuZGVyZXJzKSYmdm9pZCAwIT09Vno/Vno6e30sRG4oTWtlKCksYz0+e2NvbnN0IGw9YmsoYyk7ImJhc2UiPT09YyYmKG1zLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLG1zLnJlbmRlcmVyc1tgJHtidShjKX1SZW5kZXJlcmBd''@;'; put 'put ''PWx9KSxtcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1waCxtcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9YmssbXMudmFsaWRhdG9ycz1udWxsIT09KEJ6PW1zLnZhbGlkYXRvcnMpJiZ2b2lkIDAhPT1Cej9Cejp7fSxEbihra2UoKSxjPT57bXMudmFsaWRhdG9yc1tgJHtidShjKX1WYWxp''@;'; put 'put ''ZGF0b3JgXT1GTihjKX0pLG1zLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9YTcsbXMudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9Rk4sbXMucGx1Z2lucz1udWxsIT09KGp6PW1zLnBsdWdpbnMpJiZ2b2lkIDAhPT1qej9qejp7fSxEbihQTigpLGM9Pnttcy5wbHVnaW5zW2NdPXV5KGMp''@;'; put 'put ''fSksbXMucGx1Z2luc1tgJHtidShacy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1acyxtcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPWpzLG1zLnBsdWdpbnMuZ2V0UGx1Z2luPXV5O2NvbnN0IFZOZT1tcyx6ej0oYyxsLGEpPT57Zm9yKGxldCBkIG9mIGMpe2NvbnN0IGg9bC5maW5kKF89Pl8uZGF0''@;'; put 'put ''YT09PWQuTkFNRSksZj1hLnZhcnNbZC5OQU1FXTtmJiYoZC5UWVBFPVsiREFURSIsIkRBVEVUSU1FIiwiVElNRSJdLmluY2x1ZGVzKGQuRERUWVBFKT8ibnVtIjpmLnR5cGUpLGgmJmQuREVTQyYmKGguZGVzYz1kLkRFU0MpLGgmJmYubGVuZ3RoJiYoaC5sZW5ndGg9cGFyc2VJbnQoZi5sZW5n''@;'; put 'put ''dGgpKSxoJiZkLkNMU19SVUxFJiYoaC5jbHNSdWxlPWQuQ0xTX1JVTEUpfXJldHVybiBsfTtmdW5jdGlvbiBVeihjLGwpe2lmKG51bGw9PWN8fCFpc05hTihjKSYmaXNGaW5pdGUoYykpcmV0dXJuIGwmJmwoITApLCEwO2NvbnN0IGE9KDAsdDMuaXNTcGVjaWFsTWlzc2luZykoYyk7cmV0dXJu''@;'; put 'put ''IGwmJmwoYSksYX1jb25zdCBPb2U9e0NBU0U6KGMsbCk9Pntzd2l0Y2gobCl7Y2FzZSJVUENBU0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtjYXNlIkxPV0NB''@;'; put 'put ''U0UiOnJldHVybiEhW3ZvaWQgMCxudWxsXS5pbmNsdWRlcyhjKXx8InN0cmluZyI9PXR5cGVvZiBjJiZjLnRvU3RyaW5nKCk9PT1jLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKX1yZXR1cm4hMH0sTUlOVkFMOihjLGwpPT57Y29uc3QgYT1VeihjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFh''@;'; put 'put ''fHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1VeihjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuISghYXx8IWlzTmFOKGQpKXx8ZDw9TnVtYmVyKGwudG9TdHJpbmcoKSl9LE5PVE5VTEw6KGMsbCk9Pm51bGwhPWMmJmMudG9TdHJp''@;'; put 'put ''bmcoKS5sZW5ndGg+MH07dmFyIFp6PUYoNDQzMTYpO2NsYXNzIFpOZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsXyl7dGhpcy5ydWxlcz1bXSx0aGlzLmRxcnVsZXM9W10sdGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRl''@;'; put 'put ''SG90VmFsaWRhdG9yPShULFcsaWUpPT57Y29uc3QgZ2U9ey4uLlQsdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBWTmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6''@;'; put 'put ''MH07bnVsbD09VyYmKFc9IiIpLFQmJlQudmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgVC52YWxpZGF0b3I/VC52YWxpZGF0b3IuY2FsbChnZSxXLHdlPT57aWUmJmllKHdlKX0pOmllJiZpZSghMSl9LHRoaXMuc2FzcGFyYW1zPWwsdGhpcy5ob3RJbnN0YW5jZT1fLHRoaXMucnVsZXM9''@;'; put 'put ''KGM9Pnt0cnl7cmV0dXJuIEpTT04ucGFyc2UoYFske2N9XWApfWNhdGNoe3JldHVybltdfX0pKGwuQ09MVFlQRSksdGhpcy5ydWxlcz16eihkLHRoaXMucnVsZXMsYSksdGhpcy5ydWxlcz0oYz0+e2lmKCFaelt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEg''@;'; put 'put ''b2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5Q''@;'; put 'put ''Sy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygp''@;'; put 'put ''e3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3Bs''@;'; put 'put ''aWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3Jl''@;'; put 'put ''dHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93''@;'; put 'put ''blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0si''@;'; put 'put ''XS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0p''@;'; put 'put ''LGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5k''@;'; put 'put ''cXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZ''@;'; put 'put ''UEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7''@;'; put 'put ''aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZmlsdGVyPSExKSx0aGlz''@;'; put 'put ''Lmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1QiXSkmJih0aGlzLnJ1bGVzW2xdLnN0cmljdD0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJIQVJEU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiU09GVFNFTEVDVF9IT09LIl0pJiYodGhpcy5y''@;'; put 'put ''dWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVF9IT09LIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITApLHRoaXMuaGFzRHFSdWxlcyhhLFsiTk9UTlVMTCJdKSYmKHRoaXMucnVsZXNbbF0uYWxsb3dFbXB0eT0hMSl9InRydWUiPT09dGhpcy5ydWxl''@;'; put 'put ''c1tsXS5jb3JyZWN0Rm9ybWF0JiYodGhpcy5ydWxlc1tsXS5jb3JyZWN0Rm9ybWF0PSEwKSx0aGlzLnNldERlZmF1bHRWYWxpZGF0b3IodGhpcyxsKSx0aGlzLnNldENvbHVtbkxldmVsU2VjdXJpdHkobCl9fXRoaXMuc2FzcGFyYW1zPy5DTFNfRkxBRyYmdGhpcy5oaWRkZW5Db2x1bW5zLnB1''@;'; put 'put ''c2goMCl9c2V0RGVmYXVsdFZhbGlkYXRvcihsLGEpe3RoaXMucnVsZXNbYV0udmFsaWRhdG9yPWZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1sLnJ1bGVzW2FdLmRhdGE/LnRvU3RyaW5nKCksXz1sLnJ1bGVzW2FdLnR5cGV8fCIiO2xldCBUPW51bGw7cmV0dXJuImF1dG9jb21wbGV0ZSIhPT10aGlz''@;'; put 'put ''LmVkaXRvcnx8KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKCJhdXRvY29tcGxldGUiKS5jYWxsKHRoaXMsZCxXPT57VD1XfSksVCk/KGwuZ2V0SGFuZHNvbnRhYmxlVmFsaWRhdG9yKF8pLmNhbGwodGhpcyxkLFc9PntUPVd9KSxUP2wubGVuZ3RoQ2hlY2soZCxsLnJ1bGVzW2FdLmxlbmd0''@;'; put 'put ''aCxfKT9sLmlzRHFDb2woZnx8IiIpJiYhKChjLGwpPT57Zm9yKGxldCBhIG9mIGMpaWYoT29lW2EuUlVMRV9UWVBFXSYmIU9vZVthLlJVTEVfVFlQRV0obCxhLlJVTEVfVkFMVUUpKXJldHVybiBjb25zb2xlLndhcm4oYERRIEludmFsaWQgUmVhc29uOiAke2EuUlVMRV9UWVBFfVxuVmFsdWU6''@;'; put 'put ''ICR7bH0pXG5SdWxlIFZhbHVlOiAke2EuUlVMRV9WQUxVRS5sZW5ndGg+MCYmIiAiIT09YS5SVUxFX1ZBTFVFP2EuUlVMRV9WQUxVRToiTm90IGRlZmluZWQifWApLCExO3JldHVybiEwfSkobC5nZXREcURldGFpbHMoZnx8IiIpLGQpPyhjb25zb2xlLndhcm4oYERRIFZhbGlkYXRpb24gLSBp''@;'; put 'put ''bnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTp2b2lkIGgoITApOihjb25zb2xlLndhcm4oYExlbmd0aCBWYWxpZGF0aW9uIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIC0gaW52YWxpZCAo''@;'; put 'put ''VmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSkpOihjb25zb2xlLndhcm4oYEhPVCBOYXRpdmUgVmFsaWRhdGlvbiAoYXV0b2NvbXBsZXRlKSAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpfX1sZW5ndGhDaGVjayhsLGEsZCl7aWYoKDAsdDMuaXNTcGVjaWFsTWlzc2luZyko''@;'; put 'put ''bCl8fG51bGw9PWx8fG51bGw9PWEpcmV0dXJuITA7aWYoIm51bWVyaWMiPT09ZCl7aWYoOD09PWEpcmV0dXJuITA7aWYoYTwzfHxhPjh8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpKXJldHVybiBjb25zb2xlLndhcm4oImludmFsaWQgbGVuZ3RoIGZyb20gU0FTLCBydWxlIGxlbmd0aCBjYW4gb25s''@;'; put 'put ''eSBiZSBhbiBpbnRlZ2VyIGJldHdlZW4gMy04IiksITE7Y29uc3QgaD1OdW1iZXIobCk9PT1sJiZsJTEhPTA7aWYoYTw4JiZoKXJldHVybiBjb25zb2xlLndhcm4oInJlZHVjZWQgbGVuZ3RoIG51bWVyaWNzIGNhbm5vdCBjb250YWluIGRlY2ltYWxzIGVsc2UgcHJlY2lzaW9uIHdpbGwgYmUg''@;'; put 'put ''YWZmZWN0ZWQiKSwhMTtzd2l0Y2goYSl7Y2FzZSAzOnJldHVybiBsPD04MTkyO2Nhc2UgNDpyZXR1cm4gbDw9MjA5NzE1MjtjYXNlIDU6cmV0dXJuIGw8PTUzNjg3MDkxMjtjYXNlIDY6cmV0dXJuIGw8PTEzNzQzODk1MzQ3MjtjYXNlIDc6cmV0dXJuIGw8PTM1MTg0MzcyMDg4ODMyfX1yZXR1''@;'; put 'put ''cm4gbC50b1N0cmluZygpLmxlbmd0aDw9YX1nZXRIYW5kc29udGFibGVWYWxpZGF0b3IobCl7c3dpdGNoKGwpe2Nhc2UiYXV0b2NvbXBsZXRlIjpyZXR1cm4gRXk7Y2FzZSJudW1lcmljIjpyZXR1cm4gVXo7Y2FzZSJkYXRlIjpyZXR1cm4gWWs7Y2FzZSJ0aW1lIjpyZXR1cm4gV2s7ZGVmYXVs''@;'; put 'put ''dDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJl''@;'; put 'put ''dHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEw''@;'; put 'put ''KSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCBVQT17bnVtZXJpYzowLGRlZmF1bHQ6IiJ9LFlOZT0oYyxsKT0+Yz8iYXV0b2NvbXBsZXRl''@;'; put 'put ''Ij09PWM/bCYmbC5zb3VyY2U/bC5zb3VyY2VbMF06W106VUEuaGFzT3duUHJvcGVydHkoYyk/VUFbY106VUEuZGVmYXVsdDpVQS5kZWZhdWx0LFBvZT1jPT57bGV0IGw9KCIwIitjLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKSsiOiI7cmV0dXJuIGw9bCsoIjAiK2MuZ2V0VVRDTWludXRlcygp''@;'; put 'put ''KS5zbGljZSgtMikrIjoiLGwrPSgiMCIrYy5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKSxsfSxZej1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksV3o9Yz0+bmV3IERhdGUoTWF0''@;'; put 'put ''aC5yb3VuZCg4NjQwMCooYy0yNTU2OSkqMWUzKSksJE5lPShjLGwpPT57Y29uc3QgYT1bXSxkPVtdO3JldHVybiBsLmZvckVhY2goaD0+ey0xPT09Yy5pbmRleE9mKGgpP2EucHVzaChoKTpkLnB1c2goaCl9KSxbYSxkXX0scU5lPShjLGwsYSxkLGgsZixfKT0+KGwuaW5uZXJIVE1MPWAke2Y/''@;'; put 'put ''Zi50b1N0cmluZygpOiIifSA8Y2xyLWljb24gc2hhcGU9ImV4Y2xhbWF0aW9uLWNpcmNsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nsci1pY29uPmAsbCksR3o9KGMsbCxhLGQsaCxmLF8pPT4obC5pbm5lckhUTUw9Znx8IiIsbCksS05lPShjLGwsYSxkLGgsZixfKT0+KGwuaW5uZXJIVE1MPWAk''@;'; put 'put ''e2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsbCksJHo9Yz0+ISEvXi17MCwxfVxkKyQvLnRlc3QoYyksRm9lPWM9PiEhL15cZCtcLlxkKyQvLnRlc3QoYykscXo9ZnVuY3Rpb24gSk5lKGMp''@;'; put 'put ''e3JldHVybiJzeW1ib2wiPT10eXBlb2YgY3x8bDgoYykmJiJbb2JqZWN0IFN5bWJvbF0iPT1pOChjKX07dmFyIFFOZT0vXC58XFsoPzpbXltcXV0qfChbIiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxlVmU9L15cdyokLztmdW5jdGlvbiBLeihjLGwpe2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBjfHxudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1''@;'; put 'put ''cm4gZi5nZXQoaCk7dmFyIF89Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsXyl8fGYsX307cmV0dXJuIGEuY2FjaGU9bmV3KEt6LkNhY2hlfHxnUCksYX1Lei5DYWNoZT1nUDtjb25zdCBpVmU9S3o7dmFyIGxWZT0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/''@;'; put 'put ''KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxjVmU9L1xcKFxcKT8vZyx1VmU9ZnVuY3Rpb24gc1ZlKGMpe3ZhciBsPWlWZShjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1s''@;'; put 'put ''LmNhY2hlO3JldHVybiBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKGxWZSxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoY1ZlLCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IGRWZT11VmU7''@;'; put 'put ''dmFyIEhvZT1tcD9tcC5wcm90b3R5cGU6dm9pZCAwLE5vZT1Ib2U/SG9lLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBnVmU9ZnVuY3Rpb24gVm9lKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihjOChjKSlyZXR1cm4gZnVuY3Rpb24gaFZlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9''@;'; put 'put ''bnVsbD09Yz8wOmMubGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsVm9lKSsiIjtpZihxeihjKSlyZXR1cm4gTm9lP05vZS5jYWxsKGMpOiIiO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxiVmU9ZnVuY3Rpb24g''@;'; put 'put ''X1ZlKGMsbCl7cmV0dXJuIGM4KGMpP2M6ZnVuY3Rpb24gdFZlKGMsbCl7aWYoYzgoYykpcmV0dXJuITE7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISgibnVtYmVyIiE9YSYmInN5bWJvbCIhPWEmJiJib29sZWFuIiE9YSYmbnVsbCE9YyYmIXF6KGMpKXx8ZVZlLnRlc3QoYyl8fCFRTmUudGVzdChj''@;'; put 'put ''KXx8bnVsbCE9bCYmYyBpbiBPYmplY3QobCl9KGMsbCk/W2NdOmRWZShmdW5jdGlvbiBtVmUoYyl7cmV0dXJuIG51bGw9PWM/IiI6Z1ZlKGMpfShjKSl9LENWZT1mdW5jdGlvbiB3VmUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjfHxxeihjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIw''@;'; put 'put ''Ij09bCYmMS9jPT0tMS8wPyItMCI6bH0saWw9ZnVuY3Rpb24geFZlKGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlvbiBTVmUoYyxsKXtmb3IodmFyIGE9MCxkPShsPWJWZShsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbQ1ZlKGxbYSsrXSldO3JldHVybiBhJiZhPT1k''@;'; put 'put ''P2M6dm9pZCAwfShjLGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IGJkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IGJlLHRoaXMu''@;'; put 'put ''Y2hhbmdlZFRhYmxlPW5ldyBiZSx0aGlzLmRldGFpbHM9bmV3IGJlLHRoaXMuZGlmZnM9bmV3IGJlLHRoaXMuY29sdW1ucz1uZXcgYmUsdGhpcy52YWx1ZXM9bmV3IGJlLHRoaXMuZmlsdGVyPW5ldyBiZSx0aGlzLnF1ZXJ5PW5ldyBiZSx0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IGJlLHRoaXMu''@;'; put 'put ''cmVtb3ZlUXVlcnk9bmV3IGJlLHRoaXMuc2V0U3VibWl0PW5ldyBiZSx0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IGJlfWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe18ubGliZHM9Zjtjb25zdCBUPXt9O3JldHVybiBUW2RdPVthXSx7ZGF0YTp5''@;'; put 'put ''aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVzdChoLFQpLGxpYmRzOl8ubGliZHN9fSkoKX11cGRhdGVUYWJsZShhLGQsaCxmLF8pe3ZhciBUPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBXPXtqc2RhdGE6ZH07aWYoXyl7bGV0IGdlPVQucGFyc2VGb3JtYXRzKF8pO1cuJGpzZGF0YT17''@;'; put 'put ''Zm9ybWF0czpnZX19cmV0dXJuIFdbaF09W2FdLHlpZWxkIFQuc2FzU2VydmljZS5yZXF1ZXN0KGYsVyl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KGgsXyl9KSgpfXNlbmREZXRhaWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz1PYmplY3QuYXNzaWduKHtzdWI6ITB9LGEpO2Yuc3VibWl0dERldGFpbC5uZXh0KHtkYXRhOmhbZF0sdmlld0RhdGE6X30pfSkoKX1nZXRTdWJtaXR0cygpe3ZhciBh''@;'; put 'put ''PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKX0pKCl9dmlld0xpYnMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtyZXR1cm4gYS5zYXNTZXJ2aWNlLnJlcXVlc3Qo''@;'; put 'put ''InB1YmxpYy92aWV3bGlicyIsbnVsbCl9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZnJlc2hsaWJpbmZvIix7bGliMnJlZnJlc2g6W3tsaWJyZWY6YX1dfSl9KSgpfXZl''@;'; put 'put ''cnNpb25IaXN0b3J5KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2l3YW50Olt7TElCRFM6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXR2ZXJzaW9uaGlzdG9yeSIsaCl9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9''@;'; put 'put ''dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCl9KSgpfXZpZXdEYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rp''@;'; put 'put ''b24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe0xJQkRTOmEsRklMVEVSX1JLOmR9XX07cmV0dXJuIHlpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2RhdGEiLGYpfSkoKX12aWV3RGF0YVNlYXJjaChhLGQ9ITEsaCxmKXt2YXIgXz10aGlzO3JldHVybiBmaShmdW5j''@;'; put 'put ''dGlvbiooKXtsZXQgVz17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNIVFlQRTphLmxlbmd0aD4wP2Q/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6YSxMSUJEUzpoLEZJTFRFUl9SSzpmfV19O3JldHVybiB5aWVsZCBfLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixX''@;'; put 'put ''KX0pKCl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpfSkoKX1nZXREZXRhaWxz''@;'; put 'put ''KGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2hvd0RpZmZzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1''@;'; put 'put ''cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfLHt1c2VDb21wdXRlQXBpOiExfSl9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e307cmV0dXJuIF9bZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KGgsXyx7dXNlQ29tcHV0ZUFwaTohMX0pfSkoKX1hcHByb3ZlVGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXt9O3JldHVybiBfW2RdPVthXSx5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLF8pfSkoKX1nZXRIaXN0b3J5KGEsZCxoKXt2''@;'; put 'put ''YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgXz17fTtyZXR1cm4gX1tkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxfKX0pKCl9c2V0UXVlcnlWYXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hh''@;'; put 'put ''bmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7VEFCTEU6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixmKX0pKCl9Z2V0UXVlcnlWYWx1ZXMoYSxkLGgs''@;'; put 'put ''ZixfKXt2YXIgVD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtsZXQgVz17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi5fJiZ7Uk9XUzpffX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKFcuRklMVEVSUVVFUlk9aCkseWllbGQgVC5zYXNTZXJ2aWNlLnJlcXVl''@;'; put 'put ''c3QoInB1YmxpYy9nZXRjb2x2YWxzIixXKS5jYXRjaChnZT0+e3Rocm93IGdlfSl9KSgpfXNhdmVRdWVyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH0sXz15aWVsZCBoLnNhc1NlcnZp''@;'; put 'put ''Y2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5maWx0ZXIubmV4dChfKSxffSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg9e2l3YW50Olt7dGFibGVfaWQ6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2''@;'; put 'put ''aWNlLnJlcXVlc3QoImF1ZGl0b3JzL2dldHN0YWdldGFibGUiLGgpfSkoKX1jaGVja09wZXJhdG9yKGEsZCxoKXtsZXQgZjtzd2l0Y2goYSl7Y2FzZSJCRVRXRUVOIjpkIGluc3RhbmNlb2YgQXJyYXkmJigiIiE9PWRbMF0mJiIiIT09ZFsxXT9mPWRbMF0rIiBBTkQgIitkWzFdOiIiIT09ZFsw''@;'; put 'put ''XSYmIiI9PT1kWzFdPyhkWzFdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKToiIj09PWRbMF0mJiIiIT09ZFsxXT8oZFswXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6KGRbMF09Ii4iLGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pKTticmVhaztjYXNlIklOIjpjYXNlIk5PVCBJTiI6''@;'; put 'put ''bGV0IFQ9W107aWYodHlwZW9mIGQ8InUiKWZvcihsZXQgVz0wO1c8ZC5sZW5ndGg7VysrKSEwPT09ZFtXXS5jaGVja2VkJiYoImNoYXIiPT09aD8oInN0cmluZyI9PXR5cGVvZiBkW1ddLnZhbCYmKGRbV10udmFsPWRbV10udmFsLnJlcGxhY2UoIiciLCInJyIpKSxULnB1c2goIiciK2RbV10u''@;'; put 'put ''dmFsKyInIikpOihudWxsPT09ZFtXXS52YWwmJihkW1ddLnZhbD0iLiIpLFQucHVzaChkW1ddLnZhbCkpKTtkPSIoIitUKyIpIjticmVhaztjYXNlIkNPTlRBSU5TIjphPSI/IjticmVhaztjYXNlIk5PVCBFUVVBTCI6YT0ibmUifXJldHVybiJudW0iPT09aCYmbnVsbD09PWQmJihkPSIuIiks''@;'; put 'put ''IlBsZWFzZSBzZWxlY3QgdmFsdWUiPT09ZCYmKGQ9IiIpLC0xIT09WyI9IiwiPiIsIjwiLCI8PSIsIj49IiwibmUiXS5pbmRleE9mKGEpJiYibnVtIj09PWgmJiIiPT09ZCYmKGQ9Ii4iKSwiQkVUV0VFTiI9PT1hP3t2YWx1ZTpmLG9wZXJhdG9yOmF9Ont2YWx1ZTpkLG9wZXJhdG9yOmF9fXdo''@;'; put 'put ''ZXJlQ2xhdXNlQ3JlYXRvcihhLGQsaCl7bGV0IFcsd2UsZj0iIixpZT0iIixnZT1bXTtmb3IobGV0IFplPTA7WmU8YS5xdWVyeU9iai5sZW5ndGg7WmUrKyl7bGV0IG90PSIiLGV0PWEucXVlcnlPYmpbWmVdO2ZvcihsZXQgeXQ9MDt5dDxldC5lbGVtZW50cy5sZW5ndGg7eXQrKyl7bGV0IFN0''@;'; put 'put ''LGt0PWV0LmVsZW1lbnRzW3l0XTtXPXl0PGV0LmVsZW1lbnRzLmxlbmd0aC0xP2V0LmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgRHI9MDtEcjxrdC52YWx1ZXMubGVuZ3RoO0RyKyspe2lmKCJzdHJpbmciPT10eXBlb2Yga3QudmFsdWUmJiJudW1iZXIiPT10eXBlb2Yga3QudmFsdWVzW0RyXS5m''@;'; put 'put ''b3JtYXR0ZWQpa3QudmFsdWU9PT1KU09OLnN0cmluZ2lmeShrdC52YWx1ZXNbRHJdLmZvcm1hdHRlZCkmJihTdD1rdC52YWx1ZXNbRHJdLnVuZm9ybWF0dGVkKTtlbHNle2xldCBsaT0ibnVtYmVyIiE9dHlwZW9mIGt0LnZhbHVlc1tEcl0uZm9ybWF0dGVkJiZudWxsIT09a3QudmFsdWVzW0Ry''@;'; put 'put ''XS5mb3JtYXR0ZWQ/a3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQudHJpbSgpOmt0LnZhbHVlc1tEcl0uZm9ybWF0dGVkO2t0LnZhbHVlPT09bGkmJihTdD1rdC52YWx1ZXNbRHJdLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1rdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIs''@;'; put 'put ''Ijw9IiwiPj0iLCJuZSJdLmluZGV4T2Yoa3Qub3BlcmF0b3IpJiYoU3Q9IiIpLCgiQ09OVEFJTlMiPT09a3Qub3BlcmF0b3J8fCJMSUtFIj09PWt0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09a3Qub3BlcmF0b3IpJiYoU3Q9a3QudmFsdWUpfWlmKFN0fHwoU3Q9a3QudmFsdWUpLGt0LnZh''@;'; put 'put ''bHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PWt0Lm9wZXJhdG9yKXtTdD1bXSxTdC5wdXNoKGt0LnZhbHVlWzBdKSxTdC5wdXNoKGt0LnZhbHVlWzFdKTtmb3IobGV0IERyPTA7RHI8a3QudmFsdWVzLmxlbmd0aDtEcisrKVN0WzBdPT09a3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQm''@;'; put 'put ''JihTdFswXT1rdC52YWx1ZXNbRHJdLnVuZm9ybWF0dGVkKSxTdFsxXT09PWt0LnZhbHVlc1tEcl0uZm9ybWF0dGVkJiYoU3RbMV09a3QudmFsdWVzW0RyXS51bmZvcm1hdHRlZCl9aWYoa3QudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1rdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1r''@;'; put 'put ''dC5vcGVyYXRvcikpe1N0PVtdLFN0PWt0LnZhbHVlO2ZvcihsZXQgRHI9MDtEcjxrdC52YWx1ZXMubGVuZ3RoO0RyKyspU3RbRHJdJiZTdFtEcl0udmFsPT09a3QudmFsdWVzW0RyXS5mb3JtYXR0ZWQmJihTdFtEcl0udmFsPWt0LnZhbHVlc1tEcl0udW5mb3JtYXR0ZWQpfWxldCBRdD1rdC50''@;'; put 'put ''eXBlO2NvbnN0IHJuPWt0LnZhbHVlVmFyaWFibGU7bGV0IGNyLHZuPW51bGw9PT1rdC52YXJpYWJsZT8iIjprdC52YXJpYWJsZSxObj1udWxsPT09a3Qub3BlcmF0b3I/IiI6a3Qub3BlcmF0b3I7Y3I9dGhpcy5jaGVja09wZXJhdG9yKE5uLFN0LFF0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGNyJiYiKCIhPT1jclswXSYmKGNyPWNyLnJlcGxhY2UoIiciLCInJyIpKSxObj10aGlzLmNoZWNrT3BlcmF0b3IoTm4sY3IsUXQpLm9wZXJhdG9yLCJjaGFyIj09PVF0JiYiSU4iIT09Tm4mJiJOT1QgSU4iIT09Tm4/KHR5cGVvZiBjcj4idSImJihjcj0iIiksY3I9cm4/IiAiK2NyKyIgIjoi''@;'; put 'put ''ICciK2NyKyInICIsb3Q9b3QrIiAiK3ZuKyIgIitObitjcitXKTooIm51bSI9PT1RdCYmdHlwZW9mIGNyPiJ1IiYmKGNyPSIuIiksY3I9dHlwZW9mIGNyPiJ1Ij8iIjoiICIrY3IrIiAiLG90PW90KyIgIit2bisiICIrTm4rY3IrVyl9Z2UucHVzaChvdCl9aWU9IiI7Zm9yKGxldCBaZT0wO1pl''@;'; put 'put ''PGdlLmxlbmd0aDtaZSsrKXdlPVplPGdlLmxlbmd0aC0xP2Q6IiIsaWU9MT09PWdlLmxlbmd0aD9nZVswXTppZSsiICgiK2dlW1plXSsiKSAiK3dlO3JldHVybiBmPWllLnN1YnN0cigxKS5zbGljZSgwLC0xKSxpZT0iV0hFUkUiK2llKyI7Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNl''@;'; put 'put ''OmllLHN0cmluZzpmLG9iajphLGxpYmRzOmh9KSx7d2hlcmVDbGF1c2U6aWUsc3RyaW5nOmZ9fWNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYS5maWx0ZXJHcm91cHMuZm9yRWFjaCgoaCxmKT0+e2guZmlsdGVyQ2xhdXNlcy5mb3JFYWNoKF89PntsZXQgVD0i''@;'; put 'put ''IjsiQkVUV0VFTiI9PT1fLm9wZXJhdG9yP1Q9YCR7Xy52YWx1ZVswXX0gQU5EICR7Xy52YWx1ZVsxXX1gOiJJTiI9PT1fLm9wZXJhdG9yfHwiTk9UIElOIj09PV8ub3BlcmF0b3I/KF8udmFsdWUuZm9yRWFjaChXPT57aWYoVy5jaGVja2VkKXtjb25zdCBpZT1XLnZhbDsic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIGllfHwoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShpZSkmJiJjaGFyIiE9PV8udHlwZT9ULmxlbmd0aD4wP1QrPWAsJHtpZX1gOlQ9YCgke2llfWA6VC5sZW5ndGg+MD9UKz1gLCcke2llLnJlcGxhY2UoLycvZywiJyciKX0nYDpUPWAoJyR7aWUucmVwbGFjZSgvJy9nLCInJyIpfSdgfX0p''@;'; put 'put ''LFQubGVuZ3RoPjAmJihUKz0iKSIpKToiIj09PV8udmFsdWU/VD0iY2hhciI9PT1fLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PV8udHlwZSYmIV8udmFsdWVWYXJpYWJsZSYmKFQ9YCcke18udmFsdWUucmVwbGFjZSgvJy9nLCInJyIpfSdgKSxkLnB1c2goe0dST1VQX0xPR0lDOmEuZ3JvdXBM''@;'; put 'put ''b2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOl8udmFyaWFibGUsT1BFUkFUT1JfTk06Xy5vcGVyYXRvcixSQVdfVkFMVUU6VHx8Xy52YWx1ZX0pfSl9KSxkfWluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoYSxkKXtj''@;'; put 'put ''b25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOmlsKEduLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307aWwoR24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoKSxpbChHbixhKS5maWx0ZXIuZ3JvdXBMb2dp''@;'; put 'put ''Yz1pbChHbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsXz17ZWxlbWVudHM6W119LFQ9MDtpbChHbixhKS5maWx0ZXIucXVlcnkuZm9yRWFjaChXPT57Y29uc3QgaWU9e307Zm9yKGxldCBnZT0wO2dlPGQubGVuZ3RoO2dlKyspaWYoZFtnZV0uTkFNRT09PVcuVkFS''@;'; put 'put ''SUFCTEVfTk0pe2lmKGY9Vy5TVUJHUk9VUF9MT0dJQyxpZS5kZHR5cGU9ZFtnZV0uRERUWVBFLGllLnR5cGU9ZFtnZV0uVFlQRSxpZS5vcGVyYXRvcnM9Im51bSI9PT1kW2dlXS5UWVBFP0duLm9wZXJhdG9ycy5udW1PcGVyYXRvcnM6R24ub3BlcmF0b3JzLmNoYXJPcGVyYXRvcnMsaWUubG9n''@;'; put 'put ''aWM9bnVsbCxpZS5vcGVyYXRvcj1XLk9QRVJBVE9SX05NLGllLnZhcmlhYmxlPVcuVkFSSUFCTEVfTk0sImNoYXIiPT09ZFtnZV0uVFlQRSlpZigiSU4iPT09Vy5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1XLk9QRVJBVE9SX05NKXtjb25zdCB3ZT1bXSxaZT1XLlJBV19WQUxVRS5zbGljZSgx''@;'; put 'put ''LC0xKS5zcGxpdCgiJywnIik7MT09PVplLmxlbmd0aD93ZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpaZVswXS5zbGljZSgxLC0xKS5yZXBsYWNlKC8nJy9nLCInIil9KTpaZS5mb3JFYWNoKChvdCxldCk9Pnt3ZS5wdXNoKDA9PT1ldD97Y2hlY2tlZDohMCx2YWw6b3Quc2xpY2UoMSkucmVwbGFj''@;'; put 'put ''ZSgvJycvZywiJyIpfTpldD09PVplLmxlbmd0aC0xP3tjaGVja2VkOiEwLHZhbDpvdC5zbGljZSgwLC0xKS5yZXBsYWNlKC8nJy9nLCInIil9OntjaGVja2VkOiEwLHZhbDpvdC5yZXBsYWNlKC8nJy9nLCInIil9KX0pLGllLnZhbHVlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUod2Up''@;'; put 'put ''fWVsc2UgaWUudmFsdWU9Vy5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PVcuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09Vy5PUEVSQVRPUl9OTSl7Y29uc3Qgd2U9W107Vy5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JF''@;'; put 'put ''YWNoKChvdCxldCk9Pnt3ZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpvdH0pfSksaWUudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh3ZSl9ZWxzZSBpZigiQkVUV0VFTiI9PT1XLk9QRVJBVE9SX05NKXtjb25zdCB3ZT1XLlJBV19WQUxVRS5zcGxpdCgiIEFORCAiKTtpZS52YWx1''@;'; put 'put ''ZT13ZX1lbHNlIGllLnZhbHVlPVcuUkFXX1ZBTFVFO2llLnZhbHVlcz1bXSxUPT09Vy5TVUJHUk9VUF9JRHx8KGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShfKSksaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlP''@;'; put 'put ''YmpbVF0uY2xhdXNlTG9naWM9ZixpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5pbnZhbGlkQ2xhdXNlPSExLFQrKyxfLmVsZW1lbnRzPVtdKSxfLmVsZW1lbnRzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZSkpO2JyZWFrfX0pLF8uZWxlbWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJihpbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9iai5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoXykpLGlsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW1RdLmNsYXVzZUxvZ2ljPWYsaWwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0u''@;'; put 'put ''aW52YWxpZENsYXVzZT0hMSksaWwoR24sYSkuZmlsdGVyLnF1ZXJ5PVtdfXJlbW92ZUNsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBhLnJlbW92ZVF1ZXJ5Lm5leHQoITApLCEwfSkoKX1zcGVjQ29udmVyc2lvbihhKXtsZXQgZD17fSxoPVtdO2lmKGg9''@;'; put 'put ''YS5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuTkFNRS50b1VwcGVyQ2FzZSgpfSksYSBpbnN0YW5jZW9mIEFycmF5KWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWRbaFtmXV09MT09PWFbZl0uVFlQRT97Y29sVHlwZToibnVtIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9Ontjb2xUeXBlOiJz''@;'; put 'put ''dHJpbmciLGNvbExlbmd0aDphW2ZdLkxFTkdUSH07cmV0dXJuIGR9c2V0U3VibWl0UmVhZHkoKXt0aGlzLnNldFN1Ym1pdC5uZXh0KCEwKX1wYXJzZUZvcm1hdHMoYSl7Y29uc3QgZD17fSxoPWEudmFycztmb3IobGV0IGYgb2YgT2JqZWN0LmtleXMoaCkpe2NvbnN0IF89aFtmXS50eXBlLFQ9''@;'; put 'put ''aFtmXS5sZW5ndGg7Im51bSI9PT1fP2RbZl09ImJlc3QuIjoiY2hhciI9PT1fJiYoZFtmXT1gJGNoYXIke1R9LmApfXJldHVybiBkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihvYSksYXIoQWMpLGFyKHcwKSl9LGMuXHUwMjc1cHJvdj1ocih7''@;'; put 'put ''dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7ZnVuY3Rpb24gYTQoYyl7cmV0dXJuIG51bGwhPWMmJiJmYWxzZSIhPWAke2N9YH1mdW5jdGlvbiBCb2UoYyxsPTApe3JldHVybiBmdW5jdGlvbiBFVmUoYyl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVt''@;'; put 'put ''YmVyKGMpKX0oYyk/TnVtYmVyKGMpOmx9ZnVuY3Rpb24gUDAoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBOaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jb25zdCBudz17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdh''@;'; put 'put ''dGU6ZH09bnc7ZCYmKGw9ZC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBoPWwoZj0+e2E9dm9pZCAwLGMoZil9KTtyZXR1cm4gbmV3IGVlKCgpPT5hPy4oaCkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6''@;'; put 'put ''bH09bnc7cmV0dXJuKGw/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sY2FuY2VsQW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09bnc7cmV0dXJuKGw/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25G''@;'; put 'put ''cmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZvaWQgMH0sam9lPW5ldyBjbGFzcyBUVmUgZXh0ZW5kcyBCUHtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxk''@;'; put 'put ''LnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJv''@;'; put 'put ''dyBofX19KGNsYXNzIEFWZSBleHRlbmRzIE5Qe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rp''@;'; put 'put ''b25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPW53LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+bC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVj''@;'; put 'put ''eWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihudy5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgWHosRFZl''@;'; put 'put ''PTE7Y29uc3QgWkE9e307ZnVuY3Rpb24gem9lKGMpe3JldHVybiBjIGluIFpBJiYoZGVsZXRlIFpBW2NdLCEwKX1jb25zdCBJVmU9e3NldEltbWVkaWF0ZShjKXtjb25zdCBsPURWZSsrO3JldHVybiBaQVtsXT0hMCxYenx8KFh6PVByb21pc2UucmVzb2x2ZSgpKSxYei50aGVuKCgpPT56b2Uo''@;'; put 'put ''bCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7em9lKGMpfX0se3NldEltbWVkaWF0ZTpMVmUsY2xlYXJJbW1lZGlhdGU6UlZlfT1JVmUsWUE9e3NldEltbWVkaWF0ZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1ZQTtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxMVmUpKC4uLmMpfSxjbGVh''@;'; put 'put ''ckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1ZQTtyZXR1cm4obD8uY2xlYXJJbW1lZGlhdGV8fFJWZSkoYyl9LGRlbGVnYXRlOnZvaWQgMH07bmV3IGNsYXNzIFBWZSBleHRlbmRzIEJQe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlz''@;'; put 'put ''Ll9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9y''@;'; put 'put ''KDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgT1ZlIGV4dGVuZHMgTlB7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0''@;'; put 'put ''dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChsLl9zY2hlZHVsZWQ9WUEuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFy''@;'; put 'put ''IGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1sO251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKFlBLmNsZWFySW1tZWRp''@;'; put 'put ''YXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gVW9lKGMsbD1pYil7cmV0dXJuIGZ1bmN0aW9uIEhWZShjKXtyZXR1cm4gWGUoKGwsYSk9PntsZXQgZD0hMSxoPW51bGwsZj1udWxsLF89ITE7Y29uc3QgVD0oKT0+e2lmKGY/LnVuc3Vi''@;'; put 'put ''c2NyaWJlKCksZj1udWxsLGQpe2Q9ITE7Y29uc3QgaWU9aDtoPW51bGwsYS5uZXh0KGllKX1fJiZhLmNvbXBsZXRlKCl9LFc9KCk9PntmPW51bGwsXyYmYS5jb21wbGV0ZSgpfTtsLnN1YnNjcmliZShVZShhLGllPT57ZD0hMCxoPWllLGZ8fEtyKGMoaWUpKS5zdWJzY3JpYmUoZj1VZShhLFQs''@;'; put 'put ''VykpfSwoKT0+e189ITAsKCFkfHwhZnx8Zi5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9PmpQKGMsbCkpfWxldCBKejt0cnl7Sno9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtKej0hMX1sZXQgcncsUXosWm9lPSgoKT0+e2NsYXNzIGN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoYSl7dGhpcy5fcGxhdGZvcm1JZD1hLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/UnModGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlzLkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmln''@;'; put 'put ''YXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5kb3cuY2hyb21lJiYhSnopJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURH''@;'; put 'put ''RSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxp''@;'; put 'put ''UG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2Fu''@;'; put 'put ''ZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJLSVR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKGFyKEdzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gaXcoYyl7cmV0dXJuIGZ1bmN0aW9uIE5WZSgpe2lmKG51bGw9PXJ3JiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2lu''@;'; put 'put ''ZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5ydz0hMH0pKX1maW5hbGx5e3J3PXJ3fHwhMX1yZXR1cm4gcnd9KCk/YzohIWMuY2FwdHVyZX1mdW5jdGlvbiBXb2UoYyl7aWYoZnVuY3Rpb24gVlZlKCl7''@;'; put 'put ''aWYobnVsbD09UXope2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5oZWFkOm51bGw7UXo9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gUXp9KCkpe2NvbnN0IGw9Yy5nZXRSb290Tm9kZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtp''@;'; put 'put ''Zih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFuY2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIEdBKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgpWzBdOmMudGFyZ2V0fWxldCBqVmU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09ZCx0aGlzLl9zY3JvbGxlZD1uZXcgYmUsdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0wLHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMu''@;'; put 'put ''X2RvY3VtZW50PWh9cmVnaXN0ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25ldyBLZShkPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0''@;'; put 'put ''aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUoVW9lKGEpKS5zdWJzY3JpYmUoZCk6dGhpcy5fc2Nyb2xsZWQuc3Vic2NyaWJlKGQpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntoLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Ny''@;'; put 'put ''b2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6V2koKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGEsZCk9PnRoaXMuZGVyZWdpc3Rl''@;'; put 'put ''cihkKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKTtyZXR1cm4gdGhpcy5zY3JvbGxlZChkKS5waXBlKElhKGY9PiFmfHxoLmluZGV4T2YoZik+LTEpKX1nZXRBbmNlc3Rv''@;'; put 'put ''clNjcm9sbENvbnRhaW5lcnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGgsZik9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGYsYSkmJmQucHVzaChmKX0pLGR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5k''@;'; put 'put ''ZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGEsZCl7bGV0IGg9UDAoZCksZj1hLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rve2lmKGg9PWYpcmV0dXJuITB9d2hpbGUoaD1oLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0''@;'; put 'put ''ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pm4yKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJzY3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5l''@;'; put 'put ''cigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKFpvZSks''@;'; put 'put ''YXIoTHMsOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFVWZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2NoYW5nZT1uZXcgYmUsdGhpcy5fY2hh''@;'; put 'put ''bmdlTGlzdGVuZXI9Zj0+e3RoaXMuX2NoYW5nZS5uZXh0KGYpfSx0aGlzLl9kb2N1bWVudD1oLGQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZihhLmlzQnJvd3Nlcil7Y29uc3QgZj10aGlzLl9nZXRXaW5kb3coKTtmLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlz''@;'; put 'put ''dGVuZXIpLGYuYWRkRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlld3BvcnRTaXplPW51bGwpfSl9bmdPbkRlc3Ryb3koKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRl''@;'; put 'put ''KCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtjb25zdCBhPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUud2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5p''@;'; put 'put ''c0Jyb3dzZXJ8fCh0aGlzLl92aWV3cG9ydFNpemU9bnVsbCksYX1nZXRWaWV3cG9ydFJlY3QoKXtjb25zdCBhPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHt3aWR0aDpkLGhlaWdodDpofT10aGlzLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybnt0b3A6YS50b3AsbGVmdDphLmxl''@;'; put 'put ''ZnQsYm90dG9tOmEudG9wK2gscmlnaHQ6YS5sZWZ0K2QsaGVpZ2h0Omgsd2lkdGg6ZH19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07Y29uc3QgYT10aGlzLl9kb2N1bWVudCxkPXRoaXMuX2dldFdp''@;'; put 'put ''bmRvdygpLGg9YS5kb2N1bWVudEVsZW1lbnQsZj1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LWYudG9wfHxhLmJvZHkuc2Nyb2xsVG9wfHxkLnNjcm9sbFl8fGguc2Nyb2xsVG9wfHwwLGxlZnQ6LWYubGVmdHx8YS5ib2R5LnNjcm9sbExlZnR8fGQuc2Nyb2xsWHx8aC5z''@;'; put 'put ''Y3JvbGxMZWZ0fHwwfX1jaGFuZ2UoYT0yMCl7cmV0dXJuIGE+MD90aGlzLl9jaGFuZ2UucGlwZShVb2UoYSkpOnRoaXMuX2NoYW5nZX1fZ2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3VwZGF0ZVZpZXdwb3J0U2l6ZSgpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5fZ2V0V2luZG93KCk7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj97d2lkdGg6YS5pbm5lcldpZHRoLGhlaWdodDphLmlubmVySGVpZ2h0fTp7d2lkdGg6MCxoZWlnaHQ6MH19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8''@;'; put 'put ''fGMpKGFyKFpvZSksYXIoTm8pLGFyKExzLDgpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxaVmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7fSksY30pKCk7Y29uc3QgYUJlPW5ldyBNaSgiY2RrLWRpci1kb2MiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OmZ1bmN0aW9uIGxCZSgpe3JldHVybiBGaShMcyl9fSksY0JlPS9eKGFyfGNrYnxkdnxoZXxp''@;'; put 'put ''d3xmYXxucW98cHN8c2R8dWd8dXJ8eWl8LipbLV9dKEFkbG18QXJhYnxIZWJyfE5rb298Um9oZ3xUaGFhKSkoPyEuKlstX10oTGF0bnxDeXJsKSgkfC18XykpKCR8LXxfKS9pO2xldCBLb2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdl''@;'; put 'put ''PW5ldyBFcixhJiYodGhpcy52YWx1ZT1mdW5jdGlvbiB1QmUoYyl7Y29uc3QgbD1jPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1sJiZ0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9jQmUudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJs''@;'; put 'put ''dHIiOiJydGwiPT09bD8icnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGlyOm51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoYUJlLDgpKX0sYy5cdTAyNzVwcm92PWhyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTtmdW5jdGlvbiBlVShjLGwsYSl7Zm9yKGxldCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShkKSl7Y29uc3QgaD1sW2RdO2g/Yy5zZXRQcm9wZXJ0eShkLGgsYT8uaGFzKGQpPyJpbXBvcnRhbnQiOiIiKTpjLnJlbW92ZVByb3BlcnR5KGQpfXJldHVybiBjfWZ1bmN0aW9uIHo3KGMsbCl7Y29uc3QgYT1sPyIiOiJub25lIjtlVShjLnN0eWxlLHsidG91Y2gtYWN0aW9uIjpsPyIiOiJu''@;'; put 'put ''b25lIiwiLXdlYmtpdC11c2VyLWRyYWciOmw/IiI6Im5vbmUiLCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiOmw/IiI6InRyYW5zcGFyZW50IiwidXNlci1zZWxlY3QiOmEsIi1tcy11c2VyLXNlbGVjdCI6YSwiLXdlYmtpdC11c2VyLXNlbGVjdCI6YSwiLW1vei11c2VyLXNlbGVjdCI6''@;'; put 'put ''YX0pfWZ1bmN0aW9uIFhvZShjLGwsYSl7ZVUoYy5zdHlsZSx7cG9zaXRpb246bD8iIjoiZml4ZWQiLHRvcDpsPyIiOiIwIixvcGFjaXR5Omw/IiI6IjAiLGxlZnQ6bD8iIjoiLTk5OWVtIn0sYSl9ZnVuY3Rpb24gJEEoYyxsKXtyZXR1cm4gbCYmIm5vbmUiIT1sP2MrIiAiK2w6Y31mdW5jdGlv''@;'; put 'put ''biBKb2UoYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChjKSpsfWZ1bmN0aW9uIHRVKGMsbCl7cmV0dXJuIGMuZ2V0UHJvcGVydHlWYWx1ZShsKS5zcGxpdCgiLCIpLm1hcChkPT5kLnRyaW0oKSl9ZnVuY3Rpb24gblUo''@;'; put 'put ''Yyl7Y29uc3QgbD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6bC50b3AscmlnaHQ6bC5yaWdodCxib3R0b206bC5ib3R0b20sbGVmdDpsLmxlZnQsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHQseDpsLngseTpsLnl9fWZ1bmN0aW9uIHJVKGMsbCxhKXtjb25zdHt0''@;'; put 'put ''b3A6ZCxib3R0b206aCxsZWZ0OmYscmlnaHQ6X309YztyZXR1cm4gYT49ZCYmYTw9aCYmbD49ZiYmbDw9X31mdW5jdGlvbiBvdyhjLGwsYSl7Yy50b3ArPWwsYy5ib3R0b209Yy50b3ArYy5oZWlnaHQsYy5sZWZ0Kz1hLGMucmlnaHQ9Yy5sZWZ0K2Mud2lkdGh9ZnVuY3Rpb24gUW9lKGMsbCxh''@;'; put 'put ''LGQpe2NvbnN0e3RvcDpoLHJpZ2h0OmYsYm90dG9tOl8sbGVmdDpULHdpZHRoOlcsaGVpZ2h0OmllfT1jLGdlPVcqbCx3ZT1pZSpsO3JldHVybiBkPmgtd2UmJmQ8Xyt3ZSYmYT5ULWdlJiZhPGYrZ2V9Y2xhc3MgZXNle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvY3VtZW50PWwsdGhpcy5wb3Np''@;'; put 'put ''dGlvbnM9bmV3IE1hcH1jbGVhcigpe3RoaXMucG9zaXRpb25zLmNsZWFyKCl9Y2FjaGUobCl7dGhpcy5jbGVhcigpLHRoaXMucG9zaXRpb25zLnNldCh0aGlzLl9kb2N1bWVudCx7c2Nyb2xsUG9zaXRpb246dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9KSxsLmZvckVhY2goYT0+''@;'; put 'put ''e3RoaXMucG9zaXRpb25zLnNldChhLHtzY3JvbGxQb3NpdGlvbjp7dG9wOmEuc2Nyb2xsVG9wLGxlZnQ6YS5zY3JvbGxMZWZ0fSxjbGllbnRSZWN0Om5VKGEpfSl9KX1oYW5kbGVTY3JvbGwobCl7Y29uc3QgYT1HQShsKSxkPXRoaXMucG9zaXRpb25zLmdldChhKTtpZighZClyZXR1cm4gbnVs''@;'; put 'put ''bDtjb25zdCBoPWQuc2Nyb2xsUG9zaXRpb247bGV0IGYsXztpZihhPT09dGhpcy5fZG9jdW1lbnQpe2NvbnN0IGllPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpO2Y9aWUudG9wLF89aWUubGVmdH1lbHNlIGY9YS5zY3JvbGxUb3AsXz1hLnNjcm9sbExlZnQ7Y29uc3QgVD1oLnRv''@;'; put 'put ''cC1mLFc9aC5sZWZ0LV87cmV0dXJuIHRoaXMucG9zaXRpb25zLmZvckVhY2goKGllLGdlKT0+e2llLmNsaWVudFJlY3QmJmEhPT1nZSYmYS5jb250YWlucyhnZSkmJm93KGllLmNsaWVudFJlY3QsVCxXKX0pLGgudG9wPWYsaC5sZWZ0PV8se3RvcDpULGxlZnQ6V319Z2V0Vmlld3BvcnRTY3Jv''@;'; put 'put ''bGxQb3NpdGlvbigpe3JldHVybnt0b3A6d2luZG93LnNjcm9sbFksbGVmdDp3aW5kb3cuc2Nyb2xsWH19fWZ1bmN0aW9uIHRzZShjKXtjb25zdCBsPWMuY2xvbmVOb2RlKCEwKSxhPWwucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLGQ9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2wucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKCJpZCIpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKWFbaF0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiJjYW52YXMiPT09ZD9pc2UoYyxsKTooImlucHV0Ij09PWR8fCJzZWxlY3QiPT09ZHx8InRleHRhcmVhIj09PWQpJiZyc2UoYyxsKSxuc2UoImNhbnZhcyIs''@;'; put 'put ''YyxsLGlzZSksbnNlKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIsYyxsLHJzZSksbH1mdW5jdGlvbiBuc2UoYyxsLGEsZCl7Y29uc3QgaD1sLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7aWYoaC5sZW5ndGgpe2NvbnN0IGY9YS5xdWVyeVNlbGVjdG9yQWxsKGMpO2ZvcihsZXQgXz0wO188aC5sZW5n''@;'; put 'put ''dGg7XysrKWQoaFtfXSxmW19dKX19bGV0IGhCZT0wO2Z1bmN0aW9uIHJzZShjLGwpeyJmaWxlIiE9PWwudHlwZSYmKGwudmFsdWU9Yy52YWx1ZSksInJhZGlvIj09PWwudHlwZSYmbC5uYW1lJiYobC5uYW1lPWBtYXQtY2xvbmUtJHtsLm5hbWV9LSR7aEJlKyt9YCl9ZnVuY3Rpb24gaXNlKGMs''@;'; put 'put ''bCl7Y29uc3QgYT1sLmdldENvbnRleHQoIjJkIik7aWYoYSl0cnl7YS5kcmF3SW1hZ2UoYywwLDApfWNhdGNoe319Y29uc3Qgb3NlPWl3KHtwYXNzaXZlOiEwfSkscUE9aXcoe3Bhc3NpdmU6ITF9KSxpVT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgcEJle2dldCBkaXNhYmxlZCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9kaXNhYmxlZHx8ISghdGhpcy5fZHJvcENvbnRhaW5lcnx8IXRoaXMuX2Ryb3BDb250YWluZXIuZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXtjb25zdCBhPWE0KGwpO2EhPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWEsdGhpcy5fdG9nZ2xlTmF0aXZlRHJh''@;'; put 'put ''Z0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChkPT56NyhkLGEpKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmLF8pe3RoaXMuX2NvbmZpZz1hLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuX2RyYWdEcm9wUmVnaXN0''@;'; put 'put ''cnk9Xyx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMSx0aGlzLl9tb3ZlRXZlbnRzPW5ldyBiZSx0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj1lZS5FTVBUWSx0aGlz''@;'; put 'put ''Ll9wb2ludGVyVXBTdWJzY3JpcHRpb249ZWUuRU1QVFksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPWVlLkVNUFRZLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1lZS5FTVBUWSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bnVsbCx0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPSEwLHRo''@;'; put 'put ''aXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzPW5ldyBTZXQsdGhpcy5fZGlyZWN0aW9uPSJsdHIiLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IGJlLHRoaXMuc3RhcnRlZD1uZXcgYmUsdGhpcy5yZWxlYXNl''@;'; put 'put ''ZD1uZXcgYmUsdGhpcy5lbmRlZD1uZXcgYmUsdGhpcy5lbnRlcmVkPW5ldyBiZSx0aGlzLmV4aXRlZD1uZXcgYmUsdGhpcy5kcm9wcGVkPW5ldyBiZSx0aGlzLm1vdmVkPXRoaXMuX21vdmVFdmVudHMsdGhpcy5fcG9pbnRlckRvd249VD0+e2lmKHRoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCks''@;'; put 'put ''dGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IFc9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKFQpO1cmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKFcpJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShXLFQpfWVsc2UgdGhpcy5kaXNhYmxlZHx8dGhpcy5f''@;'; put 'put ''aW5pdGlhbGl6ZURyYWdTZXF1ZW5jZSh0aGlzLl9yb290RWxlbWVudCxUKX0sdGhpcy5fcG9pbnRlck1vdmU9VD0+e2NvbnN0IFc9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKFQpO2lmKCF0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpe2lmKE1hdGguYWJzKFcueC10aGlzLl9waWNr''@;'; put 'put ''dXBQb3NpdGlvbk9uUGFnZS54KStNYXRoLmFicyhXLnktdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSk+PXRoaXMuX2NvbmZpZy5kcmFnU3RhcnRUaHJlc2hvbGQpe2NvbnN0IFplPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVsYXkoVCks''@;'; put 'put ''b3Q9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighWmUpcmV0dXJuIHZvaWQgdGhpcy5fZW5kRHJhZ1NlcXVlbmNlKFQpOyghb3R8fCFvdC5pc0RyYWdnaW5nKCkmJiFvdC5pc1JlY2VpdmluZygpKSYmKFQucHJldmVudERlZmF1bHQoKSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9ITAsdGhpcy5f''@;'; put 'put ''bmdab25lLnJ1bigoKT0+dGhpcy5fc3RhcnREcmFnU2VxdWVuY2UoVCkpKX1yZXR1cm59VC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGllPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKFcpO2lmKHRoaXMuX2hhc01vdmVkPSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3Np''@;'; put 'put ''dGlvbj1XLHRoaXMuX3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShpZSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKGllLFcpO2Vsc2V7Y29uc3QgZ2U9dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsQ2xpZW50UmVjdDp0''@;'; put 'put ''aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx3ZT10aGlzLl9hY3RpdmVUcmFuc2Zvcm07d2UueD1pZS54LWdlLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LHdlLnk9aWUueS1nZS55K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHdl''@;'; put 'put ''Lngsd2UueSl9dGhpcy5fbW92ZUV2ZW50cy5vYnNlcnZlcnMubGVuZ3RoJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5fbW92ZUV2ZW50cy5uZXh0KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246aWUsZXZlbnQ6VCxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoaWUpLGRl''@;'; put 'put ''bHRhOnRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YX0pfSl9LHRoaXMuX3BvaW50ZXJVcD1UPT57dGhpcy5fZW5kRHJhZ1NlcXVlbmNlKFQpfSx0aGlzLl9uYXRpdmVEcmFnU3RhcnQ9VD0+e2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBXPXRoaXMuX2dldFRhcmdldEhhbmRsZShU''@;'; put 'put ''KTtXJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhXKSYmIXRoaXMuZGlzYWJsZWQmJlQucHJldmVudERlZmF1bHQoKX1lbHNlIHRoaXMuZGlzYWJsZWR8fFQucHJldmVudERlZmF1bHQoKX0sdGhpcy53aXRoUm9vdEVsZW1lbnQobCkud2l0aFBhcmVudChhLnBhcmVudERyYWdSZWZ8fG51''@;'; put 'put ''bGwpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgZXNlKGQpLF8ucmVnaXN0ZXJEcmFnSXRlbSh0aGlzKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnR9Z2V0VmlzaWJsZUVs''@;'; put 'put ''ZW1lbnQoKXtyZXR1cm4gdGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp0aGlzLmdldFJvb3RFbGVtZW50KCl9d2l0aEhhbmRsZXMobCl7dGhpcy5faGFuZGxlcz1sLm1hcChkPT5QMChkKSksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGQ9Pno3KGQsdGhpcy5k''@;'; put 'put ''aXNhYmxlZCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5mb3JFYWNoKGQ9Pnt0aGlzLl9oYW5kbGVzLmluZGV4T2YoZCk+LTEmJmEuYWRkKGQpfSksdGhpcy5fZGlzYWJsZWRIYW5kbGVz''@;'; put 'put ''PWEsdGhpc313aXRoUHJldmlld1RlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bCx0aGlzfXdpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWwsdGhpc313aXRoUm9vdEVsZW1lbnQobCl7Y29uc3QgYT1QMChs''@;'; put 'put ''KTtyZXR1cm4gYSE9PXRoaXMuX3Jvb3RFbGVtZW50JiYodGhpcy5fcm9vdEVsZW1lbnQmJnRoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl''@;'; put 'put ''ZG93biIsdGhpcy5fcG9pbnRlckRvd24scUEpLGEuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sb3NlKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LHFBKX0pLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09''@;'; put 'put ''dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWEpLHR5cGVvZiBTVkdFbGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRh''@;'; put 'put ''cnlFbGVtZW50KGwpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bD9QMChsKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgo''@;'; put 'put ''KT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKSkpLHRoaXN9d2l0aFBhcmVudChsKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1sLHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLmlz''@;'; put 'put ''RHJhZ2dpbmcoKSYmdGhpcy5fcm9vdEVsZW1lbnQ/LnJlbW92ZSgpLHRoaXMuX2FuY2hvcj8ucmVtb3ZlKCksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyYWdJdGVtKHRoaXMpLHRoaXMuX3Jl''@;'; put 'put ''bW92ZVN1YnNjcmlwdGlvbnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRl''@;'; put 'put ''KCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJl''@;'; put 'put ''KCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFy''@;'; put 'put ''ZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9y''@;'; put 'put ''bXx8IiIsdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhh''@;'; put 'put ''bmRsZXMuYWRkKGwpLHo3KGwsITApKX1lbmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCksejcobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWws''@;'; put 'put ''dGhpc31fd2l0aERyb3BDb250YWluZXIobCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNmb3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0''@;'; put 'put ''RnJlZURyYWdQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5z''@;'; put 'put ''Zm9ybShsLngsbC55KSx0aGlzfXdpdGhQcmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENv''@;'; put 'put ''bnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlU3Vic2NyaXB0aW9ucygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVw''@;'; put 'put ''U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8ucmVtb3ZlKCksdGhpcy5fcHJldmlld1JlZj8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9dGhpcy5fcHJldmlld1Jl''@;'; put 'put ''Zj1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhvbGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJh''@;'; put 'put ''Z0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlU3Vic2NyaXB0aW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9v''@;'; put 'put ''dEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlz''@;'; put 'put ''Ll9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5z''@;'; put 'put ''dG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnks''@;'; put 'put ''dGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50Omx9KX0pLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5z''@;'; put 'put ''dG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdTZXF1ZW5jZShsKXtzdyhsKSYmKHRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEpe2NvbnN0IGQ9''@;'; put 'put ''dGhpcy5fcm9vdEVsZW1lbnQsaD1kLnBhcmVudE5vZGUsZj10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxfPXRoaXMuX2FuY2hvcj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpLFQ9dGhpcy5fZ2V0U2hhZG93''@;'; put 'put ''Um9vdCgpO2guaW5zZXJ0QmVmb3JlKF8sZCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1kLnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3RWxlbWVudCgpLFhvZShkLCExLGlVKSx0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgucmVw''@;'; put 'put ''bGFjZUNoaWxkKGYsZCkpLHRoaXMuX2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChoLFQpLmFwcGVuZENoaWxkKHRoaXMuX3ByZXZpZXcpLHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksYS5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9YSx0aGlzLl9pbml0''@;'; put 'put ''aWFsSW5kZXg9YS5nZXRJdGVtSW5kZXgodGhpcyl9ZWxzZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoYT9hLmdldFNjcm9s''@;'; put 'put ''bGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9c3coYSksZj0haCYmMCE9PWEuYnV0dG9uLF89dGhpcy5fcm9vdEVsZW1lbnQsVD1H''@;'; put 'put ''QShhKSxXPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxpZT1oP2Z1bmN0aW9uIGlCZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNoYW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVz''@;'; put 'put ''WzBdO3JldHVybiEoIWx8fC0xIT09bC5pZGVudGlmaWVyfHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIHJCZShjKXtyZXR1cm4gMD09PWMuYnV0dG9uc3x8MD09PWMub2Zmc2V0WCYmMD09PWMub2Zm''@;'; put 'put ''c2V0WX0oYSk7aWYoVCYmVC5kcmFnZ2FibGUmJiJtb3VzZWRvd24iPT09YS50eXBlJiZhLnByZXZlbnREZWZhdWx0KCksZHx8Znx8V3x8aWUpcmV0dXJuO2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBFZT1fLnN0eWxlO3RoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0PUVlLndl''@;'; put 'put ''YmtpdFRhcEhpZ2hsaWdodENvbG9yfHwiIixFZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj0idHJhbnNwYXJlbnQifXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz10aGlzLl9oYXNNb3ZlZD0hMSx0aGlzLl9yZW1vdmVTdWJzY3JpcHRpb25zKCksdGhpcy5faW5pdGlhbENsaWVudFJlY3Q9dGhp''@;'; put 'put ''cy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj10aGlz''@;'; put 'put ''Ll9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9pbnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShFZT0+dGhpcy5fdXBkYXRlT25T''@;'; put 'put ''Y3JvbGwoRWUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFyeVJlY3Q9blUodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgZ2U9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PWdlJiZnZS50ZW1wbGF0ZSYmIWdlLm1h''@;'; put 'put ''dGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KHRoaXMuX2luaXRpYWxDbGllbnRSZWN0LGwsYSk7Y29uc3Qgd2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPXRoaXMuX2dldFBvaW50ZXJQ''@;'; put 'put ''b3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDp3ZS54LHk6d2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0''@;'; put 'put ''cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXtYb2UodGhpcy5fcm9vdEVsZW1lbnQsITAsaVUpLHRoaXMuX2FuY2hvci5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZCh0aGlzLl9yb290RWxlbWVudCx0aGlzLl9hbmNob3IpLHRoaXMuX2Rlc3Ryb3lQcmV2''@;'; put 'put ''aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5faW5pdGlhbENsaWVudFJlY3Q9dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX25nWm9uZS5ydW4oKCk9Pntjb25zdCBhPXRoaXMuX2Ryb3BD''@;'; put 'put ''b250YWluZXIsZD1hLmdldEl0ZW1JbmRleCh0aGlzKSxoPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKSxmPXRoaXMuX2dldERyYWdEaXN0YW5jZShoKSxfPWEuX2lzT3ZlckNvbnRhaW5lcihoLngsaC55KTt0aGlzLmVuZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmYs''@;'; put 'put ''ZHJvcFBvaW50OmgsZXZlbnQ6bH0pLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOnRoaXMsY3VycmVudEluZGV4OmQscHJldmlvdXNJbmRleDp0aGlzLl9pbml0aWFsSW5kZXgsY29udGFpbmVyOmEscHJldmlvdXNDb250YWluZXI6dGhpcy5faW5pdGlhbENvbnRhaW5lcixpc1BvaW50ZXJPdmVy''@;'; put 'put ''Q29udGFpbmVyOl8sZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksYS5kcm9wKHRoaXMsZCx0aGlzLl9pbml0aWFsSW5kZXgsdGhpcy5faW5pdGlhbENvbnRhaW5lcixfLGYsaCxsKSx0aGlzLl9kcm9wQ29udGFpbmVyPXRoaXMuX2luaXRpYWxDb250YWluZXJ9KX1fdXBkYXRlQWN0''@;'; put 'put ''aXZlRHJvcENvbnRhaW5lcih7eDpsLHk6YX0se3g6ZCx5Omh9KXtsZXQgZj10aGlzLl9pbml0aWFsQ29udGFpbmVyLl9nZXRTaWJsaW5nQ29udGFpbmVyRnJvbVBvc2l0aW9uKHRoaXMsbCxhKTshZiYmdGhpcy5fZHJvcENvbnRhaW5lciE9PXRoaXMuX2luaXRpYWxDb250YWluZXImJnRoaXMu''@;'; put 'put ''X2luaXRpYWxDb250YWluZXIuX2lzT3ZlckNvbnRhaW5lcihsLGEpJiYoZj10aGlzLl9pbml0aWFsQ29udGFpbmVyKSxmJiZmIT09dGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZXhpdGVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6dGhpcy5fZHJv''@;'; put 'put ''cENvbnRhaW5lcn0pLHRoaXMuX2Ryb3BDb250YWluZXIuZXhpdCh0aGlzKSx0aGlzLl9kcm9wQ29udGFpbmVyPWYsdGhpcy5fZHJvcENvbnRhaW5lci5lbnRlcih0aGlzLGwsYSxmPT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmZi5zb3J0aW5nRGlzYWJsZWQ/dGhpcy5faW5pdGlhbEluZGV4''@;'; put 'put ''OnZvaWQgMCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06dGhpcyxjb250YWluZXI6ZixjdXJyZW50SW5kZXg6Zi5nZXRJdGVtSW5kZXgodGhpcyl9KX0pLHRoaXMuaXNEcmFnZ2luZygpJiYodGhpcy5fZHJvcENvbnRhaW5lci5fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShkLGgpLHRoaXMu''@;'; put 'put ''X2Ryb3BDb250YWluZXIuX3NvcnRJdGVtKHRoaXMsbCxhLHRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSksdGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obCxhKTp0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC10aGlzLl9waWNrdXBQb3Np''@;'; put 'put ''dGlvbkluRWxlbWVudC54LGEtdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueSkpfV9jcmVhdGVQcmV2aWV3RWxlbWVudCgpe2NvbnN0IGw9dGhpcy5fcHJldmlld1RlbXBsYXRlLGE9dGhpcy5wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxhdGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25z''@;'; put 'put ''dCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxDbGllbnRSZWN0Om51bGwsXz1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5jb250ZXh0KTtfLmRldGVjdENoYW5nZXMoKSxoPWFzZShfLHRoaXMuX2RvY3VtZW50KSx0aGlzLl9wcmV2aWV3UmVmPV8sbC5tYXRjaFNp''@;'; put 'put ''emU/bHNlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09S0EodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KX1lbHNlIGg9dHNlKHRoaXMuX3Jvb3RFbGVtZW50KSxsc2UoaCx0aGlzLl9pbml0aWFsQ2xpZW50UmVjdCksdGhpcy5faW5pdGlh''@;'; put 'put ''bFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiBlVShoLnN0eWxlLHsicG9pbnRlci1ldmVudHMiOiJub25lIixtYXJnaW46IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixsZWZ0OiIwIiwiei1pbmRleCI6YCR7dGhpcy5fY29u''@;'; put 'put ''ZmlnLnpJbmRleHx8MWUzfWB9LGlVKSx6NyhoLCExKSxoLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXByZXZpZXciKSxoLnNldEF0dHJpYnV0ZSgiZGlyIix0aGlzLl9kaXJlY3Rpb24pLGEmJihBcnJheS5pc0FycmF5KGEpP2EuZm9yRWFjaChmPT5oLmNsYXNzTGlzdC5hZGQoZikpOmguY2xh''@;'; put 'put ''c3NMaXN0LmFkZChhKSksaH1fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuY2xhc3NMaXN0''@;'; put 'put ''LmFkZCgiY2RrLWRyYWctYW5pbWF0aW5nIiksdGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwubGVmdCxsLnRvcCk7Y29uc3QgYT1mdW5jdGlvbiBkQmUoYyl7Y29uc3QgbD1nZXRDb21wdXRlZFN0eWxlKGMpLGE9dFUobCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLGQ9YS5maW5kKFQ9PiJ0''@;'; put 'put ''cmFuc2Zvcm0iPT09VHx8ImFsbCI9PT1UKTtpZighZClyZXR1cm4gMDtjb25zdCBoPWEuaW5kZXhPZihkKSxmPXRVKGwsInRyYW5zaXRpb24tZHVyYXRpb24iKSxfPXRVKGwsInRyYW5zaXRpb24tZGVsYXkiKTtyZXR1cm4gSm9lKGZbaF0pK0pvZShfW2hdKX0odGhpcy5fcHJldmlldyk7cmV0''@;'; put 'put ''dXJuIDA9PT1hP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9Xz0+eyghX3x8R0EoXyk9PT10aGlzLl9wcmV2aWV3JiYidHJhbnNmb3JtIj09PV8ucHJvcGVydHlOYW1lKSYmKHRoaXMuX3ByZXZpZXc/''@;'; put 'put ''LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpLGQoKSxjbGVhclRpbWVvdXQoZikpfSxmPXNldFRpbWVvdXQoaCwxLjUqYSk7dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKX0pKX1fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLGE9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGQ7cmV0dXJuIGE/KHRoaXMuX3BsYWNlaG9sZGVyUmVmPWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSxsLmNvbnRleHQpLHRoaXMuX3BsYWNlaG9sZGVyUmVmLmRldGVj''@;'; put 'put ''dENoYW5nZXMoKSxkPWFzZSh0aGlzLl9wbGFjZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOmQ9dHNlKHRoaXMuX3Jvb3RFbGVtZW50KSxkLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLGQuY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcGxhY2Vob2xkZXIiKSxkfV9nZXRQb2ludGVyUG9z''@;'; put 'put ''aXRpb25JbkVsZW1lbnQobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuX3Jvb3RFbGVtZW50P251bGw6YSxmPWg/aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpsLF89c3coZCk/ZC50YXJnZXRUb3VjaGVzWzBdOmQsVD10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3g6''@;'; put 'put ''Zi5sZWZ0LWwubGVmdCsoXy5wYWdlWC1mLmxlZnQtVC5sZWZ0KSx5OmYudG9wLWwudG9wKyhfLnBhZ2VZLWYudG9wLVQudG9wKX19X2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKXtjb25zdCBhPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxkPXN3KGwpP2wudG91Y2hlc1sw''@;'; put 'put ''XXx8bC5jaGFuZ2VkVG91Y2hlc1swXXx8e3BhZ2VYOjAscGFnZVk6MH06bCxoPWQucGFnZVgtYS5sZWZ0LGY9ZC5wYWdlWS1hLnRvcDtpZih0aGlzLl9vd25lclNWR0VsZW1lbnQpe2NvbnN0IF89dGhpcy5fb3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpO2lmKF8pe2NvbnN0IFQ9dGhp''@;'; put 'put ''cy5fb3duZXJTVkdFbGVtZW50LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIFQueD1oLFQueT1mLFQubWF0cml4VHJhbnNmb3JtKF8uaW52ZXJzZSgpKX19cmV0dXJue3g6aCx5OmZ9fV9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXI/''@;'; put 'put ''dGhpcy5fZHJvcENvbnRhaW5lci5sb2NrQXhpczpudWxsO2xldHt4OmQseTpofT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuY29uc3RyYWluUG9zaXRpb24obCx0aGlzLHRoaXMuX2luaXRpYWxDbGllbnRSZWN0LHRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50KTpsO2lmKCJ4Ij09''@;'; put 'put ''PXRoaXMubG9ja0F4aXN8fCJ4Ij09PWE/aD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55OigieSI9PT10aGlzLmxvY2tBeGlzfHwieSI9PT1hKSYmKGQ9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCksdGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4OmYseTpffT10aGlzLl9waWNr''@;'; put 'put ''dXBQb3NpdGlvbkluRWxlbWVudCxUPXRoaXMuX2JvdW5kYXJ5UmVjdCx7d2lkdGg6VyxoZWlnaHQ6aWV9PXRoaXMuX2dldFByZXZpZXdSZWN0KCksZ2U9VC50b3ArXyx3ZT1ULmJvdHRvbS0oaWUtXyk7ZD1zc2UoZCxULmxlZnQrZixULnJpZ2h0LShXLWYpKSxoPXNzZShoLGdlLHdlKX1yZXR1''@;'; put 'put ''cm57eDpkLHk6aH19X3VwZGF0ZVBvaW50ZXJEaXJlY3Rpb25EZWx0YShsKXtjb25zdHt4OmEseTpkfT1sLGg9dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhLGY9dGhpcy5fcG9pbnRlclBvc2l0aW9uQXRMYXN0RGlyZWN0aW9uQ2hhbmdlLF89TWF0aC5hYnMoYS1mLngpLFQ9TWF0aC5hYnMo''@;'; put 'put ''ZC1mLnkpO3JldHVybiBfPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC54PWE+Zi54PzE6LTEsZi54PWEpLFQ+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLnk9ZD5mLnk/MTotMSxmLnk9ZCksaH1fdG9nZ2xl''@;'; put 'put ''TmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpe2lmKCF0aGlzLl9yb290RWxlbWVudHx8IXRoaXMuX2hhbmRsZXMpcmV0dXJuO2NvbnN0IGw9dGhpcy5faGFuZGxlcy5sZW5ndGg+MHx8IXRoaXMuaXNEcmFnZ2luZygpO2whPT10aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkJiYodGhpcy5f''@;'; put 'put ''bmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZD1sLHo3KHRoaXMuX3Jvb3RFbGVtZW50LGwpKX1fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnMobCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLHFBKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInRv''@;'; put 'put ''dWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLG9zZSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFydCxxQSl9X2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obCxhKXtjb25zdCBkPUtBKGwsYSksaD10aGlzLl9yb290RWxlbWVudC5zdHls''@;'; put 'put ''ZTtudWxsPT10aGlzLl9pbml0aWFsVHJhbnNmb3JtJiYodGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnRyYW5zZm9ybSYmIm5vbmUiIT1oLnRyYW5zZm9ybT9oLnRyYW5zZm9ybToiIiksaC50cmFuc2Zvcm09JEEoZCx0aGlzLl9pbml0aWFsVHJhbnNmb3JtKX1fYXBwbHlQcmV2aWV3VHJhbnNm''@;'; put 'put ''b3JtKGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3VGVtcGxhdGU/LnRlbXBsYXRlP3ZvaWQgMDp0aGlzLl9pbml0aWFsVHJhbnNmb3JtLGg9S0EobCxhKTt0aGlzLl9wcmV2aWV3LnN0eWxlLnRyYW5zZm9ybT0kQShoLGQpfV9nZXREcmFnRGlzdGFuY2UobCl7Y29uc3QgYT10aGlzLl9waWNr''@;'; put 'put ''dXBQb3NpdGlvbk9uUGFnZTtyZXR1cm4gYT97eDpsLngtYS54LHk6bC55LWEueX06e3g6MCx5OjB9fV9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpe3RoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD12b2lkIDAsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2NvbnRh''@;'; put 'put ''aW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCl7bGV0e3g6bCx5OmF9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07aWYoMD09PWwmJjA9PT1hfHx0aGlzLmlzRHJhZ2dpbmcoKXx8IXRoaXMuX2JvdW5kYXJ5RWxlbWVudClyZXR1cm47Y29uc3QgZD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGlu''@;'; put 'put ''Z0NsaWVudFJlY3QoKSxoPXRoaXMuX2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aC53aWR0aCYmMD09PWguaGVpZ2h0fHwwPT09ZC53aWR0aCYmMD09PWQuaGVpZ2h0KXJldHVybjtjb25zdCBmPWgubGVmdC1kLmxlZnQsXz1kLnJpZ2h0LWgucmlnaHQs''@;'; put 'put ''VD1oLnRvcC1kLnRvcCxXPWQuYm90dG9tLWguYm90dG9tO2gud2lkdGg+ZC53aWR0aD8oZj4wJiYobCs9ZiksXz4wJiYobC09XykpOmw9MCxoLmhlaWdodD5kLmhlaWdodD8oVD4wJiYoYSs9VCksVz4wJiYoYS09VykpOmE9MCwobCE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueHx8YSE9PXRo''@;'; put 'put ''aXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueSkmJnRoaXMuc2V0RnJlZURyYWdQb3NpdGlvbih7eTphLHg6bH0pfV9nZXREcmFnU3RhcnREZWxheShsKXtjb25zdCBhPXRoaXMuZHJhZ1N0YXJ0RGVsYXk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6c3cobCk/YS50b3VjaDphP2EubW91c2U6MH1f''@;'; put 'put ''dXBkYXRlT25TY3JvbGwobCl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2lmKGEpe2NvbnN0IGQ9R0EobCk7dGhpcy5fYm91bmRhcnlSZWN0JiZkIT09dGhpcy5fYm91bmRhcnlFbGVtZW50JiZkLmNvbnRhaW5zKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkm''@;'; put 'put ''Jm93KHRoaXMuX2JvdW5kYXJ5UmVjdCxhLnRvcCxhLmxlZnQpLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngrPWEubGVmdCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55Kz1hLnRvcCx0aGlzLl9kcm9wQ29udGFpbmVyfHwodGhpcy5fYWN0aXZlVHJhbnNmb3JtLngtPWEubGVmdCx0''@;'; put 'put ''aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueS09YS50b3AsdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSkpfX1fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnRQb3Np''@;'; put 'put ''dGlvbnMucG9zaXRpb25zLmdldCh0aGlzLl9kb2N1bWVudCk/LnNjcm9sbFBvc2l0aW9ufHx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfV9nZXRTaGFkb3dSb290KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3QmJih0aGlz''@;'; put 'put ''Ll9jYWNoZWRTaGFkb3dSb290PVdvZSh0aGlzLl9yb290RWxlbWVudCkpLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCI7aWYoInBhcmVudCI9PT1kKXJldHVybiBsO2lm''@;'; put 'put ''KCJnbG9iYWwiPT09ZCl7Y29uc3QgaD10aGlzLl9kb2N1bWVudDtyZXR1cm4gYXx8aC5mdWxsc2NyZWVuRWxlbWVudHx8aC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8aC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8aC5tc0Z1bGxzY3JlZW5FbGVtZW50fHxoLmJvZHl9cmV0dXJuIFAwKGQpfV9n''@;'; put 'put ''ZXRQcmV2aWV3UmVjdCgpe3JldHVybighdGhpcy5fcHJldmlld1JlY3R8fCF0aGlzLl9wcmV2aWV3UmVjdC53aWR0aCYmIXRoaXMuX3ByZXZpZXdSZWN0LmhlaWdodCkmJih0aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9wcmV2aWV3P3RoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0''@;'; put 'put ''KCk6dGhpcy5faW5pdGlhbENsaWVudFJlY3QpLHRoaXMuX3ByZXZpZXdSZWN0fV9nZXRUYXJnZXRIYW5kbGUobCl7cmV0dXJuIHRoaXMuX2hhbmRsZXMuZmluZChhPT5sLnRhcmdldCYmKGwudGFyZ2V0PT09YXx8YS5jb250YWlucyhsLnRhcmdldCkpKX19ZnVuY3Rpb24gS0EoYyxsKXtyZXR1''@;'; put 'put ''cm5gdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKGMpfXB4LCAke01hdGgucm91bmQobCl9cHgsIDApYH1mdW5jdGlvbiBzc2UoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9uIHN3KGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiBhc2UoYyxs''@;'; put 'put ''KXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkpLGR9ZnVuY3Rpb24gbHNl''@;'; put 'put ''KGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09S0EobC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBjc2UoYyxsLGEpe2NvbnN0IGQ9YXcobCxjLmxlbmd0aC0xKSxoPWF3KGEsYy5sZW5ndGgtMSk7''@;'; put 'put ''aWYoZD09PWgpcmV0dXJuO2NvbnN0IGY9Y1tkXSxfPWg8ZD8tMToxO2ZvcihsZXQgVD1kO1QhPT1oO1QrPV8pY1tUXT1jW1QrX107Y1toXT1mfWZ1bmN0aW9uIGF3KGMsbCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4obCxjKSl9Y2xhc3MgbUJle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5f''@;'; put 'put ''ZWxlbWVudD1sLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMub3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9wcmV2aW91c1N3YXA9e2RyYWc6bnVsbCxkZWx0YTowLG92ZXJsYXBzOiExfX1zdGFydChsKXt0aGlzLndpdGhJdGVtcyhsKX1z''@;'; put 'put ''b3J0KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faXRlbVBvc2l0aW9ucyxfPXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCk7aWYoLTE9PT1fJiZmLmxlbmd0aD4wKXJldHVybiBudWxsO2NvbnN0IFQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixX''@;'; put 'put ''PWYuZmluZEluZGV4KHl0PT55dC5kcmFnPT09bCksaWU9ZltfXSx3ZT1pZS5jbGllbnRSZWN0LEVlPVc+Xz8xOi0xLFplPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChmW1ddLmNsaWVudFJlY3Qsd2UsRWUpLG90PXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChXLGYsRWUpLGV0PWYuc2xpY2UoKTty''@;'; put 'put ''ZXR1cm4gY3NlKGYsVyxfKSxmLmZvckVhY2goKHl0LGt0KT0+e2lmKGV0W2t0XT09PXl0KXJldHVybjtjb25zdCBTdD15dC5kcmFnPT09bCxRdD1TdD9aZTpvdCxybj1TdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnl0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTt5dC5vZmZzZXQrPVF0LFQ/''@;'; put 'put ''KHJuLnN0eWxlLnRyYW5zZm9ybT0kQShgdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKHl0Lm9mZnNldCl9cHgsIDAsIDApYCx5dC5pbml0aWFsVHJhbnNmb3JtKSxvdyh5dC5jbGllbnRSZWN0LDAsUXQpKToocm4uc3R5bGUudHJhbnNmb3JtPSRBKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91''@;'; put 'put ''bmQoeXQub2Zmc2V0KX1weCwgMClgLHl0LmluaXRpYWxUcmFuc2Zvcm0pLG93KHl0LmNsaWVudFJlY3QsUXQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPXJVKHdlLGEsZCksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9aWUuZHJhZyx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9''@;'; put 'put ''VD9oLng6aC55LHtwcmV2aW91c0luZGV4OlcsY3VycmVudEluZGV4Ol99fWVudGVyKGwsYSxkLGgpe2NvbnN0IGY9bnVsbD09aHx8aDwwP3RoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQpOmgsXz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLFQ9Xy5pbmRleE9mKGwp''@;'; put 'put ''LFc9bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTtsZXQgaWU9X1tmXTtpZihpZT09PWwmJihpZT1fW2YrMV0pLCFpZSYmKG51bGw9PWZ8fC0xPT09Znx8ZjxfLmxlbmd0aC0xKSYmdGhpcy5fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQoYSxkKSYmKGllPV9bMF0pLFQ+LTEmJl8uc3BsaWNlKFQs''@;'; put 'put ''MSksaWUmJiF0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoaWUpKXtjb25zdCBnZT1pZS5nZXRSb290RWxlbWVudCgpO2dlLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKFcsZ2UpLF8uc3BsaWNlKGYsMCxsKX1lbHNlIFAwKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKFcp''@;'; put 'put ''LF8ucHVzaChsKTtXLnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1sLnNsaWNlKCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFBy''@;'; put 'put ''ZWRpY2F0ZT1sfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JFYWNoKGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1sKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5z''@;'; put 'put ''Zm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNT''@;'; put 'put ''bmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0''@;'; put 'put ''ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNjcm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0pPT57b3coZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9k''@;'; put 'put ''cmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdn''@;'; put 'put ''YWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18fCIiLGNsaWVudFJlY3Q6blUoZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVu''@;'; put 'put ''dFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xpZW50UmVjdC50b3ApfV9nZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9h''@;'; put 'put ''LndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQpLGZ9X2dldFNpYmxpbmdPZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLGY9YVtsXS5jbGllbnRSZWN0LF89YVtsKy0xKmRdO2xldCBUPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lm''@;'; put 'put ''KF8pe2NvbnN0IFc9aD8ibGVmdCI6InRvcCIsaWU9aD8icmlnaHQiOiJib3R0b20iOy0xPT09ZD9ULT1fLmNsaWVudFJlY3RbV10tZltpZV06VCs9ZltXXS1fLmNsaWVudFJlY3RbaWVdfXJldHVybiBUfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFn''@;'; put 'put ''Z2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMsaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IF89ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVy''@;'; put 'put ''biBoP2w+PV8ucmlnaHQ6YT49Xy5ib3R0b219e2NvbnN0IF89ZFswXS5jbGllbnRSZWN0O3JldHVybiBoP2w8PV8ubGVmdDphPD1fLnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLF89''@;'; put 'put ''dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOlQsY2xpZW50UmVjdDpXfSk9PlQhPT1sJiYoKCFofHxUIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRh''@;'; put 'put ''KSYmKGY/YT49TWF0aC5mbG9vcihXLmxlZnQpJiZhPE1hdGguZmxvb3IoVy5yaWdodCk6ZD49TWF0aC5mbG9vcihXLnRvcCkmJmQ8TWF0aC5mbG9vcihXLmJvdHRvbSkpKSk7cmV0dXJuLTEhPT1fJiZ0aGlzLl9zb3J0UHJlZGljYXRlKF8sbCk/XzotMX19Y2xhc3MgdkJle2NvbnN0cnVjdG9y''@;'; put 'put ''KGwsYSxkLGgsZil7dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLmRpc2FibGVkPSExLHRoaXMuc29ydGluZ0Rpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbFN0ZXA9Mix0''@;'; put 'put ''aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgYmUsdGhpcy5lbnRlcmVkPW5ldyBiZSx0aGlzLmV4aXRlZD1uZXcgYmUsdGhpcy5kcm9wcGVkPW5ldyBiZSx0aGlzLnNvcnRlZD1uZXcgYmUsdGhpcy5yZWNl''@;'; put 'put ''aXZpbmdTdGFydGVkPW5ldyBiZSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQ9bmV3IGJlLHRoaXMuX2lzRHJhZ2dpbmc9ITEsdGhpcy5fZHJhZ2dhYmxlcz1bXSx0aGlzLl9zaWJsaW5ncz1bXSx0aGlzLl9hY3RpdmVTaWJsaW5ncz1uZXcgU2V0LHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0''@;'; put 'put ''aW9uPWVlLkVNUFRZLHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPTAsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj0wLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnM9bmV3IGJlLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbCx0aGlzLl9zdGFydFNjcm9sbEludGVydmFsPSgp''@;'; put 'put ''PT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIHNCZShjPTAsbD1pYil7cmV0dXJuIGM8MCYmKGM9MCksalAoYyxjLGwpfSgwLGpvZSkucGlwZShhaCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3QgXz10aGlzLl9zY3JvbGxOb2RlLFQ9dGhpcy5h''@;'; put 'put ''dXRvU2Nyb2xsU3RlcDsxPT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb24/Xy5zY3JvbGxCeSgwLC1UKToyPT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb24mJl8uc2Nyb2xsQnkoMCxUKSwxPT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj9fLnNjcm9sbEJ5KC1U''@;'; put 'put ''LDApOjI9PT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uJiZfLnNjcm9sbEJ5KFQsMCl9KX0sdGhpcy5lbGVtZW50PVAwKGwpLHRoaXMuX2RvY3VtZW50PWQsdGhpcy53aXRoU2Nyb2xsYWJsZVBhcmVudHMoW3RoaXMuZWxlbWVudF0pLGEucmVnaXN0ZXJEcm9wQ29udGFpbmVyKHRo''@;'; put 'put ''aXMpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgZXNlKGQpLHRoaXMuX3NvcnRTdHJhdGVneT1uZXcgbUJlKHRoaXMuZWxlbWVudCxhKSx0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aFNvcnRQcmVkaWNhdGUoKF8sVCk9PnRoaXMuc29ydFByZWRpY2F0ZShfLFQsdGhpcykpfWRpc3Bvc2UoKXt0''@;'; put 'put ''aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fc3RvcFNjcm9sbFRpbWVycy5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0''@;'; put 'put ''ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLnNvcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX2FjdGl2ZVNpYmxpbmdzLmNsZWFyKCksdGhpcy5fc2Ny''@;'; put 'put ''b2xsTm9kZT1udWxsLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJvcENvbnRhaW5lcih0aGlzKX1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmd9c3RhcnQoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSx0aGlz''@;'; put 'put ''Ll9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpfWVudGVyKGwsYSxkLGgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLG51bGw9PWgmJnRoaXMuc29ydGluZ0Rpc2FibGVkJiYoaD10aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCkpLHRoaXMuX3NvcnRTdHJhdGVneS5lbnRlcihsLGEsZCxoKSx0''@;'; put 'put ''aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpcyxjdXJyZW50SW5kZXg6dGhpcy5nZXRJdGVtSW5kZXgobCl9KX1leGl0KGwpe3RoaXMuX3Jlc2V0KCksdGhpcy5l''@;'; put 'put ''eGl0ZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzfSl9ZHJvcChsLGEsZCxoLGYsXyxULFc9e30pe3RoaXMuX3Jlc2V0KCksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06bCxjdXJyZW50SW5kZXg6YSxwcmV2aW91c0luZGV4OmQsY29udGFpbmVyOnRoaXMscHJldmlvdXNDb250YWluZXI6''@;'; put 'put ''aCxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmYsZGlzdGFuY2U6Xyxkcm9wUG9pbnQ6VCxldmVudDpXfSl9d2l0aEl0ZW1zKGwpe2NvbnN0IGE9dGhpcy5fZHJhZ2dhYmxlcztyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlcz1sLGwuZm9yRWFjaChkPT5kLl93aXRoRHJvcENvbnRhaW5lcih0aGlzKSks''@;'; put 'put ''dGhpcy5pc0RyYWdnaW5nKCkmJihhLmZpbHRlcihoPT5oLmlzRHJhZ2dpbmcoKSkuZXZlcnkoaD0+LTE9PT1sLmluZGV4T2YoaCkpP3RoaXMuX3Jlc2V0KCk6dGhpcy5fc29ydFN0cmF0ZWd5LndpdGhJdGVtcyh0aGlzLl9kcmFnZ2FibGVzKSksdGhpc313aXRoRGlyZWN0aW9uKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uPWwsdGhpc31jb25uZWN0ZWRUbyhsKXtyZXR1cm4gdGhpcy5fc2libGluZ3M9bC5zbGljZSgpLHRoaXN9d2l0aE9yaWVudGF0aW9uKGwpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kub3JpZW50YXRpb249bCx0aGlzfXdpdGhTY3JvbGxh''@;'; put 'put ''YmxlUGFyZW50cyhsKXtjb25zdCBhPVAwKHRoaXMuZWxlbWVudCk7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cz0tMT09PWwuaW5kZXhPZihhKT9bYSwuLi5sXTpsLnNsaWNlKCksdGhpc31nZXRTY3JvbGxhYmxlUGFyZW50cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dHN9Z2V0SXRlbUluZGV4KGwpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVneS5nZXRJdGVtSW5kZXgobCk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpfWlzUmVjZWl2aW5nKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0o''@;'; put 'put ''bCxhLGQsaCl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9jbGllbnRSZWN0fHwhUW9lKHRoaXMuX2NsaWVudFJlY3QsLjA1LGEsZCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQobCxhLGQsaCk7ZiYmdGhpcy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRl''@;'; put 'put ''eDpmLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmYuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06bH0pfV9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGwsYSl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQpcmV0dXJuO2xldCBkLGg9MCxmPTA7aWYodGhpcy5fcGFyZW50''@;'; put 'put ''UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKChfLFQpPT57VD09PXRoaXMuX2RvY3VtZW50fHwhXy5jbGllbnRSZWN0fHxkfHxRb2UoXy5jbGllbnRSZWN0LC4wNSxsLGEpJiYoW2gsZl09ZnVuY3Rpb24gX0JlKGMsbCxhLGQpe2NvbnN0IGg9aHNlKGwsZCksZj1mc2UobCxhKTtsZXQgXz0w''@;'; put 'put ''LFQ9MDtpZihoKXtjb25zdCBXPWMuc2Nyb2xsVG9wOzE9PT1oP1c+MCYmKF89MSk6Yy5zY3JvbGxIZWlnaHQtVz5jLmNsaWVudEhlaWdodCYmKF89Mil9aWYoZil7Y29uc3QgVz1jLnNjcm9sbExlZnQ7MT09PWY/Vz4wJiYoVD0xKTpjLnNjcm9sbFdpZHRoLVc+Yy5jbGllbnRXaWR0aCYmKFQ9''@;'; put 'put ''Mil9cmV0dXJuW18sVF19KFQsXy5jbGllbnRSZWN0LGwsYSksKGh8fGYpJiYoZD1UKSl9KSwhaCYmIWYpe2NvbnN0e3dpZHRoOl8saGVpZ2h0OlR9PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksVz17d2lkdGg6XyxoZWlnaHQ6VCx0b3A6MCxyaWdodDpfLGJvdHRvbTpU''@;'; put 'put ''LGxlZnQ6MH07aD1oc2UoVyxhKSxmPWZzZShXLGwpLGQ9d2luZG93fWQmJihoIT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVj''@;'; put 'put ''dGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3JvbGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xsaW5n''@;'; put 'put ''KCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgpe2NvbnN0IGw9UDAodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9bC5tc1Njcm9sbFNu''@;'; put 'put ''YXBUeXBlfHxsLnNjcm9sbFNuYXBUeXBlfHwiIixsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3JvbGxT''@;'; put 'put ''dWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGw9UDAodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlzLl9j''@;'; put 'put ''bGllbnRSZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGwpLmNsaWVudFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPVAwKHRoaXMuZWxlbWVudCkuc3R5bGU7bC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5p''@;'; put 'put ''dGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9wUmVjZWl2aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlz''@;'; put 'put ''Ll9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJuIG51bGwhPXRoaXMuX2NsaWVudFJlY3QmJnJVKHRoaXMuX2NsaWVudFJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdz''@;'; put 'put ''LmZpbmQoaD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5fY2xpZW50UmVjdHx8IXJVKHRoaXMuX2NsaWVudFJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRvd1Jvb3Qo''@;'; put 'put ''KS5lbGVtZW50RnJvbVBvaW50KGEsZCk7aWYoIWgpcmV0dXJuITE7Y29uc3QgZj1QMCh0aGlzLmVsZW1lbnQpO3JldHVybiBoPT09Znx8Zi5jb250YWlucyhoKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50''@;'; put 'put ''aGlzLmVudGVyUHJlZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFkZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRv''@;'; put 'put ''cjpsLHJlY2VpdmVyOnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5ncy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmws''@;'; put 'put ''cmVjZWl2ZXI6dGhpc30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9v''@;'; put 'put ''dCgpe2lmKCF0aGlzLl9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPVdvZShQMCh0aGlzLmVsZW1lbnQpKTt0aGlzLl9jYWNoZWRTaGFkb3dSb290PWx8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5fc29ydFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoYT0+YS5pc0RyYWdnaW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxsKSl9fWZ1bmN0aW9uIGhzZShjLGwpe2NvbnN0e3RvcDphLGJvdHRvbTpk''@;'; put 'put ''LGhlaWdodDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmPzE6bD49ZC1mJiZsPD1kK2Y/MjowfWZ1bmN0aW9uIGZzZShjLGwpe2NvbnN0e2xlZnQ6YSxyaWdodDpkLHdpZHRoOmh9PWMsZj0uMDUqaDtyZXR1cm4gbD49YS1mJiZsPD1hK2Y/MTpsPj1kLWYmJmw8PWQrZj8yOjB9''@;'; put 'put ''Y29uc3QgWEE9aXcoe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pO2xldCBiQmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9uZT1hLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9kcmFnSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0lu''@;'; put 'put ''c3RhbmNlcz1bXSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZT1oPT5oLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyBiZSx0aGlzLnBvaW50ZXJVcD1uZXcgYmUsdGhpcy5zY3JvbGw9bmV3IGJlLHRoaXMuX3ByZXZlbnREZWZh''@;'; put 'put ''dWx0V2hpbGVEcmFnZ2luZz1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmaC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVE''@;'; put 'put ''cmFnSW5zdGFuY2VzLnNvbWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZoLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGgpKX0sdGhpcy5fZG9jdW1lbnQ9ZH1yZWdpc3RlckRyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMu''@;'; put 'put ''X2Ryb3BJbnN0YW5jZXMuYWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsWEEpfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BE''@;'; put 'put ''cmFnZ2luZyhhKSwwPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixYQSl9c3RhcnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJh''@;'; put 'put ''Z0luc3RhbmNlcy5pbmRleE9mKGEpPi0xKSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMucHVzaChhKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgpKXtjb25zdCBoPWQudHlwZS5zdGFydHNXaXRoKCJ0b3VjaCIpO3RoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoaD8i''@;'; put 'put ''dG91Y2hlbmQiOiJtb3VzZXVwIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJVcC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNjcm9sbCIse2hhbmRsZXI6Zj0+dGhpcy5zY3JvbGwubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzZWxlY3RzdGFydCIse2hhbmRsZXI6dGhpcy5fcHJldmVu''@;'; put 'put ''dERlZmF1bHRXaGlsZURyYWdnaW5nLG9wdGlvbnM6WEF9KSxofHx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KCJtb3VzZW1vdmUiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlck1vdmUubmV4dChmKSxvcHRpb25zOlhBfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhp''@;'; put 'put ''cy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGYsXyk9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKF8sZi5oYW5kbGVyLGYub3B0aW9ucyl9KX0pfX1zdG9wRHJhZ2dpbmcoYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk7ZD4tMSYmKHRo''@;'; put 'put ''aXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc3BsaWNlKGQsMSksMD09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpKX1pc0RyYWdnaW5nKGEpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTF9''@;'; put 'put ''c2Nyb2xsZWQoYSl7Y29uc3QgZD1bdGhpcy5zY3JvbGxdO3JldHVybiBhJiZhIT09dGhpcy5fZG9jdW1lbnQmJmQucHVzaChuZXcgS2UoaD0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgXz1UPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJmgu''@;'; put 'put ''bmV4dChUKX07cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixfLCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIixfLCEwKX19KSkpLGlzKC4uLmQpfW5nT25EZXN0cm95KCl7dGhpcy5fZHJhZ0luc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJh''@;'; put 'put ''Z0l0ZW0oYSkpLHRoaXMuX2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyb3BDb250YWluZXIoYSkpLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X2NsZWFyR2xvYmFs''@;'; put 'put ''TGlzdGVuZXJzKCl7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGQsYS5oYW5kbGVyLGEub3B0aW9ucyl9KSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuY2xlYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8YykoYXIoTm8pLGFyKExzKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7Y29uc3QgeUJlPXtkcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdl''@;'; put 'put ''VGhyZXNob2xkOjV9O2xldCBvVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX2RvY3VtZW50PWEsdGhpcy5fbmdab25lPWQsdGhpcy5fdmlld3BvcnRSdWxlcj1oLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9Zn1jcmVhdGVEcmFnKGEsZD15QmUpe3JldHVybiBuZXcg''@;'; put 'put ''cEJlKGEsZCx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KX1jcmVhdGVEcm9wTGlzdChhKXtyZXR1cm4gbmV3IHZCZShhLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25l''@;'; put 'put ''LHRoaXMuX3ZpZXdwb3J0UnVsZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihMcyksYXIoTm8pLGFyKFVWZSksYXIoYkJlKSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSksY30pKCk7Y29uc3Qgc1U9bmV3IE1pKCJDREtfRFJBR19QQVJFTlQiKSxhVT1uZXcgTWkoIkNka0Ryb3BMaXN0R3JvdXAiKTtsZXQgcHNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtcz1uZXcgU2V0LHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YTQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9pdGVtcy5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOlsiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbdGkoW3twcm92aWRlOmFV''@;'; put 'put ''LHVzZUV4aXN0aW5nOmN9XSldfSksY30pKCk7Y29uc3QgZ3NlPW5ldyBNaSgiQ0RLX0RSQUdfQ09ORklHIik7bGV0IHdCZT0wO2NvbnN0IG1zZT1uZXcgTWkoIkNka0Ryb3BMaXN0Iik7bGV0IHZzZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8''@;'; put 'put ''ISF0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Ryb3BMaXN0UmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkPWE0KGEpfWNvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVm''@;'; put 'put ''PWgsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1mLHRoaXMuX2Rpcj1fLHRoaXMuX2dyb3VwPVQsdGhpcy5fZGVzdHJveWVkPW5ldyBiZSx0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMuaWQ9ImNkay1kcm9wLWxpc3QtIit3QmUrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQ''@;'; put 'put ''cmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgRXIsdGhpcy5lbnRlcmVkPW5ldyBFcix0aGlzLmV4aXRlZD1uZXcgRXIsdGhpcy5zb3J0ZWQ9bmV3IEVyLHRoaXMuX3Vuc29ydGVkSXRlbXM9bmV3IFNldCx0aGlzLl9kcm9wTGlzdFJlZj1kLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMu''@;'; put 'put ''X2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxXJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhXKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0oaWUsZ2UpPT50aGlzLmVudGVyUHJlZGljYXRlKGllLmRhdGEsZ2UuZGF0YSksdGhpcy5fZHJvcExpc3RSZWYuc29ydFByZWRpY2F0ZT0oaWUs''@;'; put 'put ''Z2Usd2UpPT50aGlzLnNvcnRQcmVkaWNhdGUoaWUsZ2UuZGF0YSx3ZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxUJiZU''@;'; put 'put ''Ll9pdGVtcy5hZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJdGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ry''@;'; put 'put ''b3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5fZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBv''@;'; put 'put ''c2l0aW9uKGQuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9n''@;'; put 'put ''cm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2Ny''@;'; put 'put ''aXB0aW9uKGEpe3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKGNwKHRoaXMuX2Rpci52YWx1ZSksYWgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24g''@;'; put 'put ''a1ZlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKF89Pl8uaWQ9PT1oKTpoKTtpZih0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0x''@;'; put 'put ''PT09ZC5pbmRleE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRp''@;'; put 'put ''dmVFbGVtZW50KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPWE0KHRoaXMu''@;'; put 'put ''c29ydGluZ0Rpc2FibGVkKSxhLmF1dG9TY3JvbGxEaXNhYmxlZD1hNCh0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZCksYS5hdXRvU2Nyb2xsU3RlcD1Cb2UodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxhLmNvbm5lY3RlZFRvKGQuZmlsdGVyKGg9PmgmJmghPT10aGlzKS5tYXAoaD0+aC5fZHJvcExp''@;'; put 'put ''c3RSZWYpKS53aXRoT3JpZW50YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVy''@;'; put 'put ''ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0''@;'; put 'put ''ZW0uZGF0YX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMs''@;'; put 'put ''aXRlbTpkLml0ZW0uZGF0YX0pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEs''@;'; put 'put ''Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0''@;'; put 'put ''ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxpcyhhLnJlY2VpdmluZ1N0YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2lu''@;'; put 'put ''Z0Rpc2FibGVkOmgsc29ydGluZ0Rpc2FibGVkOmYsbGlzdEF1dG9TY3JvbGxEaXNhYmxlZDpfLGxpc3RPcmllbnRhdGlvbjpUfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9Xz8/ITEsdGhpcy5vcmllbnRh''@;'; put 'put ''dGlvbj1UfHwidmVydGljYWwiLGQmJih0aGlzLmxvY2tBeGlzPWQpfV9zeW5jSXRlbXNXaXRoUmVmKCl7dGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoYT0+YS5fZHJhZ1JlZikpfX1yZXR1cm4gYy5fZHJvcExpc3RzPVtdLGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KG9VKSx0dChVYSksdHQoalZlKSx0dChLb2UsOCksdHQoYVUsMTIpLHR0KGdzZSw4KSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0IiwiIl0sWyJjZGstZHJvcC1saXN0Il1d''@;'; put 'put ''LGhvc3RBdHRyczpbMSwiY2RrLWRyb3AtbGlzdCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoVHIoImlkIixkLmlkKSxkcigiY2RrLWRyb3AtbGlzdC1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImNkay1kcm9wLWxpc3QtZHJhZ2dpbmciLGQuX2Ryb3BMaXN0''@;'; put 'put ''UmVmLmlzRHJhZ2dpbmcoKSkoImNkay1kcm9wLWxpc3QtcmVjZWl2aW5nIixkLl9kcm9wTGlzdFJlZi5pc1JlY2VpdmluZygpKSl9LGlucHV0czp7Y29ubmVjdGVkVG86WyJjZGtEcm9wTGlzdENvbm5lY3RlZFRvIiwiY29ubmVjdGVkVG8iXSxkYXRhOlsiY2RrRHJvcExpc3REYXRhIiwiZGF0''@;'; put 'put ''YSJdLG9yaWVudGF0aW9uOlsiY2RrRHJvcExpc3RPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIl0saWQ6ImlkIixsb2NrQXhpczpbImNka0Ryb3BMaXN0TG9ja0F4aXMiLCJsb2NrQXhpcyJdLGRpc2FibGVkOlsiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIl0sc29ydGluZ0Rpc2Fi''@;'; put 'put ''bGVkOlsiY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWQiLCJzb3J0aW5nRGlzYWJsZWQiXSxlbnRlclByZWRpY2F0ZTpbImNka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6WyJjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGUiLCJzb3J0UHJl''@;'; put 'put ''ZGljYXRlIl0sYXV0b1Njcm9sbERpc2FibGVkOlsiY2RrRHJvcExpc3RBdXRvU2Nyb2xsRGlzYWJsZWQiLCJhdXRvU2Nyb2xsRGlzYWJsZWQiXSxhdXRvU2Nyb2xsU3RlcDpbImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRvU2Nyb2xsU3RlcCJdfSxvdXRwdXRzOntkcm9wcGVkOiJj''@;'; put 'put ''ZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlzdFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJvcExpc3QiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt0aShbe3Byb3ZpZGU6''@;'; put 'put ''YVUsdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTptc2UsdXNlRXhpc3Rpbmc6Y31dKV19KSxjfSkoKTtjb25zdCBsVT1uZXcgTWkoIkNka0RyYWdIYW5kbGUiKTtsZXQgX3NlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBkaXNhYmxlZChh''@;'; put 'put ''KXt0aGlzLl9kaXNhYmxlZD1hNChhKSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgYmUsdGhpcy5fZGlzYWJsZWQ9ITEsdGhpcy5fcGFyZW50RHJhZz1kfW5nT25EZXN0cm95KCl7dGhp''@;'; put 'put ''cy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KE5pKSx0dChzVSwxMikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnSGFuZGxlIiwiIl1dLGhvc3RBdHRyczpb''@;'; put 'put ''MSwiY2RrLWRyYWctaGFuZGxlIl0saW5wdXRzOntkaXNhYmxlZDpbImNka0RyYWdIYW5kbGVEaXNhYmxlZCIsImRpc2FibGVkIl19LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpsVSx1c2VFeGlzdGluZzpjfV0pXX0pLGN9KSgpO2NvbnN0IGJzZT1uZXcgTWkoIkNka0Ry''@;'; put 'put ''YWdQbGFjZWhvbGRlciIpLHlzZT1uZXcgTWkoIkNka0RyYWdQcmV2aWV3Iik7bGV0IHdzZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIuZGlzYWJsZWR9c2V0IGRpc2FibGVk''@;'; put 'put ''KGEpe3RoaXMuX2Rpc2FibGVkPWE0KGEpLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSxnZSx3ZSxFZSl7dGhpcy5lbGVtZW50PWEsdGhpcy5kcm9wQ29udGFpbmVyPWQsdGhpcy5fbmdab25lPWYsdGhpcy5fdmlld0Nv''@;'; put 'put ''bnRhaW5lclJlZj1fLHRoaXMuX2Rpcj1XLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWdlLHRoaXMuX3NlbGZIYW5kbGU9d2UsdGhpcy5fcGFyZW50RHJhZz1FZSx0aGlzLl9kZXN0cm95ZWQ9bmV3IGJlLHRoaXMuc3RhcnRlZD1uZXcgRXIsdGhpcy5yZWxlYXNlZD1uZXcgRXIsdGhpcy5lbmRl''@;'; put 'put ''ZD1uZXcgRXIsdGhpcy5lbnRlcmVkPW5ldyBFcix0aGlzLmV4aXRlZD1uZXcgRXIsdGhpcy5kcm9wcGVkPW5ldyBFcix0aGlzLm1vdmVkPW5ldyBLZShaZT0+e2NvbnN0IG90PXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShNZShldD0+KHtzb3VyY2U6dGhpcyxwb2ludGVyUG9zaXRpb246ZXQu''@;'; put 'put ''cG9pbnRlclBvc2l0aW9uLGV2ZW50OmV0LmV2ZW50LGRlbHRhOmV0LmRlbHRhLGRpc3RhbmNlOmV0LmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoWmUpO3JldHVybigpPT57b3QudW5zdWJzY3JpYmUoKX19KSx0aGlzLl9kcmFnUmVmPWllLmNyZWF0ZURyYWcoYSx7ZHJhZ1N0YXJ0VGhyZXNob2xk''@;'; put 'put ''OlQmJm51bGwhPVQuZHJhZ1N0YXJ0VGhyZXNob2xkP1QuZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDpUJiZudWxsIT1ULnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ/VC5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjUs''@;'; put 'put ''ekluZGV4OlQ/LnpJbmRleH0pLHRoaXMuX2RyYWdSZWYuZGF0YT10aGlzLGMuX2RyYWdJbnN0YW5jZXMucHVzaCh0aGlzKSxUJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhUKSxkJiYodGhpcy5fZHJhZ1JlZi5fd2l0aERyb3BDb250YWluZXIoZC5fZHJvcExpc3RSZWYpLGQuYWRkSXRlbSh0aGlz''@;'; put 'put ''KSksdGhpcy5fc3luY0lucHV0cyh0aGlzLl9kcmFnUmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJhZ1JlZil9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCl9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZHJhZ1JlZi5nZXRSb290RWxlbWVudCgpfXJlc2V0KCl7dGhpcy5fZHJhZ1JlZi5yZXNldCgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbihhKXt0aGlzLl9kcmFnUmVmLnNldEZy''@;'; put 'put ''ZWVEcmFnUG9zaXRpb24oYSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoaWQoMSksYWgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQo''@;'; put 'put ''KSx0aGlzLl9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpLHRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9KX0pfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5yb290RWxlbWVudFNlbGVjdG9yLGg9YS5m''@;'; put 'put ''cmVlRHJhZ1Bvc2l0aW9uO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLGgmJiFoLmZpcnN0Q2hhbmdlJiZ0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfW5nT25E''@;'; put 'put ''ZXN0cm95KCl7dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIucmVtb3ZlSXRlbSh0aGlzKTtjb25zdCBhPWMuX2RyYWdJbnN0YW5jZXMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcmFnSW5zdGFuY2VzLnNwbGljZShhLDEpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5n''@;'; put 'put ''dWxhcigoKT0+e3RoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fdXBkYXRlUm9vdEVsZW1lbnQoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O2xldCBkPWE7dGhpcy5yb290RWxlbWVu''@;'; put 'put ''dFNlbGVjdG9yJiYoZD12b2lkIDAhPT1hLmNsb3Nlc3Q/YS5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcik6YS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3RvcikpLHRoaXMuX2RyYWdSZWYud2l0aFJvb3RFbGVtZW50KGR8fGEpfV9nZXRCb3Vu''@;'; put 'put ''ZGFyeUVsZW1lbnQoKXtjb25zdCBhPXRoaXMuYm91bmRhcnlFbGVtZW50O3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT90aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZXN0KGEpOlAwKGEpOm51bGx9X3N5bmNJbnB1dHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''e2lmKCFhLmlzRHJhZ2dpbmcoKSl7Y29uc3QgZD10aGlzLl9kaXIsaD10aGlzLmRyYWdTdGFydERlbGF5LGY9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3BsYWNlaG9sZGVyVGVt''@;'; put 'put ''cGxhdGUuZGF0YSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGwsXz10aGlzLl9wcmV2aWV3VGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5kYXRhLG1hdGNoU2l6''@;'; put 'put ''ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUubWF0Y2hTaXplLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0NvbnRhaW5lclJlZn06bnVsbDthLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlzLmxvY2tBeGlzLGEuZHJhZ1N0YXJ0RGVsYXk9Im9iamVjdCI9PXR5cGVvZiBoJiZo''@;'; put 'put ''P2g6Qm9lKGgpLGEuY29uc3RyYWluUG9zaXRpb249dGhpcy5jb25zdHJhaW5Qb3NpdGlvbixhLnByZXZpZXdDbGFzcz10aGlzLnByZXZpZXdDbGFzcyxhLndpdGhCb3VuZGFyeUVsZW1lbnQodGhpcy5fZ2V0Qm91bmRhcnlFbGVtZW50KCkpLndpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGYpLndp''@;'; put 'put ''dGhQcmV2aWV3VGVtcGxhdGUoXykud2l0aFByZXZpZXdDb250YWluZXIodGhpcy5wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIiksZCYmYS53aXRoRGlyZWN0aW9uKGQudmFsdWUpfX0pLGEuYmVmb3JlU3RhcnRlZC5waXBlKGlkKDEpKS5zdWJzY3JpYmUoKCk9PntpZih0aGlzLl9wYXJlbnRE''@;'; put 'put ''cmFnKXJldHVybiB2b2lkIGEud2l0aFBhcmVudCh0aGlzLl9wYXJlbnREcmFnLl9kcmFnUmVmKTtsZXQgZD10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2Zvcig7ZDspe2lmKGQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjZGstZHJhZyIpKXthLndpdGhQYXJlbnQoYy5f''@;'; put 'put ''ZHJhZ0luc3RhbmNlcy5maW5kKGg9PmguZWxlbWVudC5uYXRpdmVFbGVtZW50PT09ZCk/Ll9kcmFnUmVmfHxudWxsKTticmVha31kPWQucGFyZW50RWxlbWVudH19KX1faGFuZGxlRXZlbnRzKGEpe2Euc3RhcnRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuc3RhcnRlZC5lbWl0KHtzb3VyY2U6dGhp''@;'; put 'put ''cyxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLnJlbGVhc2VkLnN1YnNjcmliZShkPT57dGhpcy5yZWxlYXNlZC5lbWl0KHtzb3VyY2U6dGhpcyxldmVudDpkLmV2ZW50fSl9KSxhLmVuZGVkLnN1YnNjcmliZShkPT57dGhpcy5lbmRl''@;'; put 'put ''ZC5lbWl0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29u''@;'; put 'put ''dGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleH0pfSksYS5leGl0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmV4aXRlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXN9KX0pLGEuZHJvcHBlZC5zdWJzY3Jp''@;'; put 'put ''YmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGlzUG9pbnRlck92''@;'; put 'put ''ZXJDb250YWluZXI6ZC5pc1BvaW50ZXJPdmVyQ29udGFpbmVyLGl0ZW06dGhpcyxkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQb2ludCxldmVudDpkLmV2ZW50fSl9KX1fYXNzaWduRGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnU3RhcnREZWxheTpoLGNvbnN0''@;'; put 'put ''cmFpblBvc2l0aW9uOmYscHJldmlld0NsYXNzOl8sYm91bmRhcnlFbGVtZW50OlQsZHJhZ2dpbmdEaXNhYmxlZDpXLHJvb3RFbGVtZW50U2VsZWN0b3I6aWUscHJldmlld0NvbnRhaW5lcjpnZX09YTt0aGlzLmRpc2FibGVkPVc/PyExLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9aHx8MCxkJiYodGhp''@;'; put 'put ''cy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1mKSxfJiYodGhpcy5wcmV2aWV3Q2xhc3M9XyksVCYmKHRoaXMuYm91bmRhcnlFbGVtZW50PVQpLGllJiYodGhpcy5yb290RWxlbWVudFNlbGVjdG9yPWllKSxnZSYmKHRoaXMucHJldmlld0NvbnRhaW5lcj1nZSl9X3Nl''@;'; put 'put ''dHVwSGFuZGxlc0xpc3RlbmVyKCl7dGhpcy5faGFuZGxlcy5jaGFuZ2VzLnBpcGUoY3AodGhpcy5faGFuZGxlcyksemMoYT0+e2NvbnN0IGQ9YS5maWx0ZXIoaD0+aC5fcGFyZW50RHJhZz09PXRoaXMpLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1l''@;'; put 'put ''bnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhkKX0pLFNhKGE9PmlzKC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdlcy5waXBlKGNwKGQpKSkpKSxhaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5f''@;'; put 'put ''ZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9fXJldHVybiBjLl9kcmFnSW5zdGFuY2VzPVtdLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpLHR0KG1z''@;'; put 'put ''ZSwxMiksdHQoTHMpLHR0KE5vKSx0dChhcyksdHQoZ3NlLDgpLHR0KEtvZSw4KSx0dChvVSksdHQoVWEpLHR0KGxVLDEwKSx0dChzVSwxMikpfSxjLlx1MDI3NWRpcj1Dcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo''@;'; put 'put ''KXtpZigxJmEmJihJbyhoLHlzZSw1KSxJbyhoLGJzZSw1KSxJbyhoLGxVLDUpKSwyJmEpe2xldCBmO3NpKGY9YWkoKSkmJihkLl9wcmV2aWV3VGVtcGxhdGU9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuX3BsYWNlaG9sZGVyVGVtcGxhdGU9Zi5maXJzdCksc2koZj1haSgpKSYmKGQuX2hhbmRs''@;'; put 'put ''ZXM9Zil9fSxob3N0QXR0cnM6WzEsImNkay1kcmFnIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJjZGstZHJhZy1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImNkay1kcmFnLWRyYWdnaW5nIixkLl9kcmFnUmVmLmlzRHJhZ2dpbmcoKSl9LGlucHV0czp7''@;'; put 'put ''ZGF0YTpbImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOlsiY2RrRHJhZ0xvY2tBeGlzIiwibG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVjdG9yOlsiY2RrRHJhZ1Jvb3RFbGVtZW50Iiwicm9vdEVsZW1lbnRTZWxlY3RvciJdLGJvdW5kYXJ5RWxlbWVudDpbImNka0RyYWdCb3VuZGFy''@;'; put 'put ''eSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5OlsiY2RrRHJhZ1N0YXJ0RGVsYXkiLCJkcmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246WyJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImZyZWVEcmFnUG9zaXRpb24iXSxkaXNhYmxlZDpbImNka0RyYWdEaXNhYmxl''@;'; put 'put ''ZCIsImRpc2FibGVkIl0sY29uc3RyYWluUG9zaXRpb246WyJjZGtEcmFnQ29uc3RyYWluUG9zaXRpb24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOlsiY2RrRHJhZ1ByZXZp''@;'; put 'put ''ZXdDb250YWluZXIiLCJwcmV2aWV3Q29udGFpbmVyIl19LG91dHB1dHM6e3N0YXJ0ZWQ6ImNka0RyYWdTdGFydGVkIixyZWxlYXNlZDoiY2RrRHJhZ1JlbGVhc2VkIixlbmRlZDoiY2RrRHJhZ0VuZGVkIixlbnRlcmVkOiJjZGtEcmFnRW50ZXJlZCIsZXhpdGVkOiJjZGtEcmFnRXhpdGVkIixk''@;'; put 'put ''cm9wcGVkOiJjZGtEcmFnRHJvcHBlZCIsbW92ZWQ6ImNka0RyYWdNb3ZlZCJ9LGV4cG9ydEFzOlsiY2RrRHJhZyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3RpKFt7cHJvdmlkZTpzVSx1c2VFeGlzdGluZzpjfV0pLHZhXX0pLGN9KSgpLENzZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtwcm92aWRlcnM6W29VXSxpbXBvcnRzOltaVmVdfSksY30pKCk7Y29uc3QgVWc9dm9pZCAwLEVCZT1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJw''@;'; put 'put ''bSJdLFVnXSxbWyJhbSIsInBtIl0sVWcsVWddLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5Iiwi''@;'; put 'put ''U2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLFVnLFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIs''@;'; put 'put ''Ik5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sVWcsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJp''@;'; put 'put ''c3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwiSEg6bW06c3MgeiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixVZywiezF9ICdhdCcgezB9IixVZ10sWyIu''@;'; put 'put ''IiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJHQlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJV''@;'; put 'put ''UyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIHhCZShjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dLGtCZT1bImlucHV0Il07ZnVuY3Rpb24gQUJlKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw3KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxncigiICIsYS5sb2FkaW5nTW9yZT8iTG9hZGluZy4uLiI6IkxPQUQgTU9SRSIsIiAiKX19Y29uc3QgVEJlPWZ1bmN0aW9uKGMsbCl7cmV0dXJueyJ3aWR0aC5weCI6YywibWF4''@;'; put 'put ''LWhlaWdodC5weCI6bH19LERCZT1bIioiXTtsZXQgU3NlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1''@;'; put 'put ''dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IEVyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgRXIsdGhpcy52YWx1ZUNoYW5nZT1uZXcgRXIsdGhpcy5v''@;'; put 'put ''bkxvYWRpbmdNb3JlPW5ldyBFcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEs''@;'; put 'put ''dGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVj''@;'; put 'put ''dEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRD''@;'; put 'put ''bGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0''@;'; put 'put ''aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0''@;'; put 'put ''aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRo''@;'; put 'put ''fHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtp''@;'; put 'put ''ZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCBfPWYuaW5uZXJUZXh0fHwiIixUPWYudmFsdWV8fCIiOyhfK1QpPy50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZl''@;'; put 'put ''bnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxl''@;'; put 'put ''bWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lkdGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFM''@;'; put 'put ''aXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5z''@;'; put 'put ''ZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNldD8udHlwZT8iT1BUSU9OIiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9''@;'; put 'put ''bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYo''@;'; put 'put ''dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNN''@;'; put 'put ''b3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2Fw''@;'; put 'put ''ZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3Rf''@;'; put 'put ''JHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0g''@;'; put 'put ''b3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9w''@;'; put 'put ''dGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCBfPWRbZl07aWYoXy5jbGFzc0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTAp''@;'; put 'put ''LF8uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVWEp''@;'; put 'put ''KX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlJvKGtCZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLmlucHV0RWxlbWVudD1oLmZpcnN0KX19LGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihhLGQpezEmYSYmeHQoInJlc2l6ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25SZXNpemUoZil9LDAsbTYpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5''@;'; put 'put ''cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25J''@;'; put 'put ''bnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sbmdDb250ZW50U2VsZWN0b3JzOkRCZSxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbMSwiYXV0b2NvbXBsZXRlLXdyYXBwZXIiLDMsImtleWRv''@;'; put 'put ''d24iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJpbnB1dC12YWwiLDMsImlkIiwicGxhY2Vob2xkZXIiLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwi''@;'; put 'put ''Zm9jdXMiLCJmb2N1c291dCIsImtleXVwIl0sWyJpbnB1dCIsIiJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0IiwzLCJuZ1N0eWxlIiwiaWQiLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIl0sWyJvcHRpb25zIiwiIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1v''@;'; put 'put ''cmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihUaSgpLG1lKDAsImRpdiIsMCkseHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uTWFp''@;'; put 'put ''bktleWRvd24oZil9KSxtZSgxLCJpbnB1dCIsMSwyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudmFsdWU9Zn0pKCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dENsaWNrKGYpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBk''@;'; put 'put ''Lm9uSW5wdXRGaXJlZChmKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbklucHV0TW91c2VlbnRlcihmKX0pKCJmb2N1cyIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEZvY3VzaW4oZil9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uSW5wdXRG''@;'; put 'put ''b2N1c291dChmKX0pKCJrZXl1cCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25JbnB1dEtleXVwKGYpfSkseWUoKSxxdCgzLCJkaXYiLDMpLG1lKDQsImRpdiIsNCkseHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0Q2xpY2soZil9KSgibW91c2VlbnRlciIsZnVuY3Rp''@;'; put 'put ''b24oZil7cmV0dXJuIGQub25EYXRhTGlzdE1vdXNlRW50ZXIoZil9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EYXRhTGlzdE1vdXNlTGVhdmUoZil9KSgic2Nyb2xsIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRhdGFMaXN0U2Nyb2xsKGYpfSksbWUoNSwiZGl2Iixu''@;'; put 'put ''dWxsLDUpLGtyKDcpLHllKCksUWUoOCxBQmUsMiwxLCJvcHRpb24iLDYpLHllKCkoKSksMiZhKXtjb25zdCBoPSRpKDYpO0NlKDEpLFJlKCJpZCIsZC5pbnB1dElkKSgicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXIpKCJuZ01vZGVsIixkLnZhbHVlKSgiZGlzYWJsZWQiLGQuZGlzYWJsZWQp''@;'; put 'put ''LFRyKCJsaXN0IiwiZGF0YWxpc3RfIitkLmlucHV0SWQpLENlKDIpLGRyKCJoaWRkZW4iLCFkLmRhdGFsaXN0T3BlbiksQ2UoMSksZHIoImhpZGRlbiIsIWQuZGF0YWxpc3RPcGVuKSxSZSgibmdTdHlsZSIsUTIoMTIsVEJlLGQuaW5wdXRDbGllbnRSZWN0LndpZHRoLGQuaW5uZXJIZWlnaHQm''@;'; put 'put ''JmQuaW5wdXRDbGllbnRSZWN0LmJvdHRvbT9kLmlubmVySGVpZ2h0LWQuaW5wdXRDbGllbnRSZWN0LmJvdHRvbTp2b2lkIDApKSgiaWQiLCJkYXRhbGlzdF8iK2QuaW5wdXRJZCksQ2UoNCksUmUoIm5nSWYiLGguY2hpbGRyZW4ubGVuZ3RoPjAmJmQuZW5hYmxlTG9hZE1vcmUpfX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOltaaSxyRyxsMSxjMSxXYSxCcyxPc10sc3R5bGVzOlsiLmlucHV0LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAw''@;'; put 'put ''JTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17cG9z''@;'; put 'put ''aXRpb246Zml4ZWQ7aW5zZXQ6MDt6LWluZGV4OjE1MDB9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7YmFja2dyb3VuZDp3aGl0ZTtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAj''@;'; put 'put ''MDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIwMDB9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfS5hdXRvY29tcGxldGUt''@;'; put 'put ''d3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNTg4MjM1Mjk0KX0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgICAgb3B0aW9uLmZvY3VzZWR7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4wNTg4MjM1Mjk0KX0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvYWQtbW9yZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXI7Ym9y''@;'; put 'put ''ZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNn0iXX0pLGN9KSgpLElCZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYS5sZW5ndGg8MSlyZXR1cm4gYTtzd2l0Y2goZCl7Y2FzZSJkYXRlIjpyZXR1cm4gS28oYSwiRERNTU1ZWVlZOmhoOm1tOnNz''@;'; put 'put ''IikuZm9ybWF0KCJERC9NTS9ZWVlZIik7Y2FzZSJ0aW1lIjp7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0aW1lLiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiIpO2NvbnN0IGg9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSxmPXBhcnNlSW50KGEu''@;'; put 'put ''c3BsaXQoIjoiKVsxXSksXz1wYXJzZUludChhLnNwbGl0KCI6IilbMl0pO3JldHVybmAke2g8MTA/IjAiK2g6aH06JHtmPDEwPyIwIitmOmZ9OiR7XzwxMD8iMCIrXzpffWB9fXJldHVybiJzdHJpbmciPT10eXBlb2YgYT9hOmEudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToiZGF0ZVRpbWVGb3JtYXR0ZXIiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgTEJlPVsiaW5wdXQiXTtmdW5jdGlvbiBSQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxOZSgxLCIgLyAi''@;'; put 'put ''KSxtZSgyLCJzcGFuIiw0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIpKX0pLE5lKDMpLHllKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksZHIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJzZWNvbmQi''@;'; put 'put ''PT09YS5sYWJlbFNlbGVjdGVkKSxDZSgxKSxvcihhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gT0JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwibGFiZWwiLDMpKDEsInNwYW4iLDQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkNoYW5nZUxh''@;'; put 'put ''YmVsKCJmaXJzdCIpKX0pLE5lKDIpLHllKCksUWUoMyxSQmUsNCwzLCJuZy1jb250YWluZXIiLDUpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7ZHIoInNlY29uZExhYmVsQWN0aXZlIixhLnNlY29uZExhYmVsJiZhLnNlY29uZExhYmVsLmxlbmd0aD4wKSxDZSgxKSxkcigidmFsdWUtdHlw''@;'; put 'put ''ZS1zZWxlY3RlZCIsImZpcnN0Ij09PWEubGFiZWxTZWxlY3RlZCksQ2UoMSksb3IoYS5sYWJlbCksQ2UoMSksUmUoIm5nSWYiLGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBQQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJp''@;'; put 'put ''bnB1dCIsNikseHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uRGF0ZUlucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uSW5wdXRNb3VzZU92ZXIo''@;'; put 'put ''KSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3V0KCkpfSksYmEoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSx5ZSgpKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVy''@;'; put 'put ''IixNNSgzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLFRyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBGQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJpbnB1dCIsNykseHQo''@;'; put 'put ''ImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbklucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuaW5w''@;'; put 'put ''dXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25JbnB1dE1vdXNlT3V0KCkpfSkseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJ2YWx1ZSIsYS52YWx1ZSkoImlkIixhLmlucHV0SWQpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksVHIoImxpc3QiLCJkYXRhbGlzdF8iK2Eu''@;'; put 'put ''aW5wdXRJZCl9fWZ1bmN0aW9uIEhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImFwcC1hdXRvY29tcGxldGUiLDgsOSkseHQoIm9uSW5wdXRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgib25Mb2FkaW5n''@;'; put 'put ''TW9yZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCkpfSksa3IoMykseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDph''@;'; put 'put ''LnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpfX1jb25zdCBOQmU9WyIqIl07bGV0IE1zZT0oKCk9PntjbGFzcyBje2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1u''@;'; put 'put ''ZXcgRXIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IEVyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBFcix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IEVyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZT1uZXcgRXIsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMu''@;'; put 'put ''bGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGEpe2EudmFsdWUmJmEudmFsdWUuY3VycmVudFZhbHVlIT09YS52YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYS52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRp''@;'; put 'put ''bmdNb3JlKGEpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KGEpfW9uSW5wdXRGaXJlZChhKXtjb25zdCBkPWEudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1kLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uRGF0ZUlucHV0Rmly''@;'; put 'put ''ZWQoYSl7dGhpcy50ZW1wPWEsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEpLHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25JbnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigp''@;'; put 'put ''e3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9IiIpfW9uRm9jdXNpbklucHV0KGEpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQoYSl9b25DaGFuZ2VMYWJlbChhKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9YSx0aGlzLnNl''@;'; put 'put ''bGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09YT90aGlzLmxhYmVsOnRoaXMuc2Vjb25kTGFiZWwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0''@;'; put 'put ''Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oTEJlLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuaW5wdXRFbGVtZW50PWguZmlyc3QpfX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFs''@;'; put 'put ''dWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVD''@;'; put 'put ''aGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxD''@;'; put 'put ''aGFuZ2UifSxmZWF0dXJlczpbdmFdLG5nQ29udGVudFNlbGVjdG9yczpOQmUsZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbImNsYXNzIiwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsInNlY29uZExhYmVsQWN0aXZlIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsx''@;'; put 'put ''LCJjbHItY29udHJvbC1sYWJlbCJdLFszLCJjbGljayJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiZGF0ZSIsImNsckRhdGUiLCIiLDMsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3Vz''@;'; put 'put ''ZW92ZXIiLCJtb3VzZW91dCJdLFsidHlwZSIsInRpbWUiLCJzdGVwIiwiMSIsMSwiaW5wdXQtdmFsIiwzLCJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiLCJpbnB1dCIsImZvY3VzIiwiZm9jdXNvdXQiLCJmb2N1c2luIiwibW91c2VvdmVyIiwibW91c2VvdXQiXSxbInR5cGUiLCJ0ZXh0IiwiYXV0''@;'; put 'put ''b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwxLCJpbnB1dC12YWwiLDMsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIiwib25JbnB1dENoYW5nZSIsIm9uTG9hZGluZ01vcmUiXSxbImlucHV0IiwiIl1dLHRlbXBs''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxRZSgwLE9CZSw0LDYsImxhYmVsIiwwKSxCcigxLDEpLFFlKDIsUEJlLDQsOCwibmctY29udGFpbmVyIiwyKSxRZSgzLEZCZSwyLDQsIm5nLWNvbnRhaW5lciIsMiksUWUoNCxIQmUsNCw1LCJuZy1jb250YWluZXIiLDIpLFVyKCkpLDImYSYm''@;'; put 'put ''KFJlKCJuZ0lmIixkLmxhYmVsKSxDZSgxKSxSZSgibmdTd2l0Y2giLGQudHlwZSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0ZXh0IikpfSxkZXBlbmRlbmNpZXM6W1ppLG5k''@;'; put 'put ''LHRoLFVzLExiLCRGLHFGLFNzZSxJQmVdLHN0eWxlczpbIi5pbnB1dC12YWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0''@;'; put 'put ''bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6MnB4IWltcG9ydGFu''@;'; put 'put ''dH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5k''@;'; put 'put ''YXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tcmlnaHQ6MjBweDttYXJnaW4tdG9wOi01cHh9bGFiZWwuc2Vjb25kTGFiZWxBY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV06bm90KC52YWx1ZS10eXBlLXNlbGVjdGVkKXt0ZXh0LWRlY29yYXRpb246''@;'; put 'put ''bGluZS10aHJvdWdoO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjZ9Il19KSxjfSkoKSxVNz0oKCk9PntjbGFzcyBje3NldCBuZ1ZhcihhKXt0aGlzLmNvbnRleHQuJGltcGxpY2l0PXRoaXMuY29udGV4dC5uZ1Zhcj1hLHRoaXMuaGFzVmlld3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRW''@;'; put 'put ''aWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy50ZW1wbGF0ZVJlZj1hLHRoaXMudmNSZWY9ZCx0aGlzLmNvbnRleHQ9eyRpbXBsaWNpdDpudWxsLG5nVmFyOm51bGx9LHRoaXMuaGFzVmlldz0hMX19cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoemEpLHR0KGFzKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVmFyIiwiIl1dLGlucHV0czp7bmdWYXI6Im5nVmFyIn19KSxjfSkoKSxWQmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLmhlbHBlclNlcnZpY2U9YX10cmFuc2Zvcm0oYSxkPSJkYXlzIixoPSExKXtpZih2b2lkIDA9PT1hJiYoYT0iIiksInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLDA9PT1hLmxlbmd0aCl7aWYoImRheXMiPT09ZClyZXR1cm4gbnVsbDtpZigic2Vjb25k''@;'; put 'put ''cyI9PT1kKXJldHVybiBoPyIxMTowMDowMCI6bnVsbH1sZXQgZj10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQpO2lmKDQ9PT1hLnNwbGl0KCI6IikubGVuZ3RoKXtjb25zdCBUPWEuc3BsaXQoIjoiKTtmPW5ldyBEYXRlKFRbMF0pLGYuc2V0SG91cnMocGFy''@;'; put 'put ''c2VJbnQoVFsxXSkpLGYuc2V0TWludXRlcyhwYXJzZUludChUWzJdKSksZi5zZXRTZWNvbmRzKHBhcnNlSW50KFRbM10pKX1lbHNlIGlzTmFOKE51bWJlcihhKSkmJihmPW5ldyBEYXRlKGEpKTtsZXQgXz1gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRIb3Vycygp''@;'; put 'put ''LnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldE1pbnV0ZXMoKS50b1N0cmluZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSl9YDtyZXR1cm4gaD9fOmZ9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFjLDE2KSl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToic2FzVG9Kc0RhdGUiLHR5cGU6YyxwdXJlOiEwfSksY30pKCksQkJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9''@;'; put 'put ''dHJhbnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgXz1hLnNwbGl0KCI6Iik7ZD1fWzBdLGg9X1sxXSxmPV9bMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYm''@;'; put 'put ''KGE9cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1pl''@;'; put 'put ''cm8oaCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFjLDE2KSl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1cmU6ITB9KSxj''@;'; put 'put ''fSkoKTtmdW5jdGlvbiBqQmUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDIyKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInNlbGVjdGVkIixWZSgpLmxvZ2ljT3BlcmF0b3JzWzBdKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiB6QmUoYyxsKXsx''@;'; put 'put ''JmMmJihtZSgwLCJkaXYiLDIzKSxOZSgxLCJcbiAgICAgICAgIikscXQoMiwicHJvZ3Jlc3MiKSxOZSgzLCJcbiAgICAgICIpLHllKCkpfWZ1bmN0aW9uIFVCZShjLGwpezEmYyYmcXQoMCwiZGl2Iil9ZnVuY3Rpb24gWkJlKGMsbCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiwyMiksTmUoMSks''@;'; put 'put ''eWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJzZWxlY3RlZCIsVmUoMikubG9naWNPcGVyYXRvcnNbMF0pLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1bmN0aW9uIFlCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsMzIpLHh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxxdCgxLCJjbHItaWNvbiIsMzMpLG1lKDIsInNwYW4iKSxOZSgzLCJHcm91cCIpLHllKCkoKX19ZnVuY3Rpb24gV0JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDM0KSx4dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLmluZGV4O3JldHVybiBqdChWZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGgpKX0pLHllKCl9fWZ1bmN0aW9uIEdCZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dDtDZSgxKSxncigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uICRCZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxvcihhKX19ZnVuY3Rpb24gcUJlKGMsbCl7MSZjJiZqYSgwKX1jb25zdCBLQmU9ZnVuY3Rp''@;'; put 'put ''b24oYyxsLGEpe3JldHVybntxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphfX07ZnVuY3Rpb24gWEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMiku''@;'; put 'put ''aW5kZXgsZj1WZSgpLmluZGV4LF89VmUoKTtyZXR1cm4gXy5jdXJyZW50UXVlcnlJbmRleD1oLGp0KF8uY3VycmVudENsYXVzZUluZGV4PWYpfSksTmUoMiwiIENob29zZSB2YWx1ZXMgIikseWUoKSxRZSgzLHFCZSwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLHllKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVZlKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4LGY9VmUoKS5pbmRleDtWZSgpO2NvbnN0IF89JGkoMzcpO0NlKDMpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixfKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHlfKDIsS0JlLGQsaCxmKSl9fWZ1bmN0aW9uIEpCZShjLGwpezEmYyYmamEo''@;'; put 'put ''MCl9Y29uc3QgUUJlPWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybntxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH19O2Z1bmN0aW9uIGVqZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNTQpLFFlKDEsSkJlLDEsMCwibmctY29udGFpbmVyIiw1MykseWUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXIsZD1WZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LF89VmUoKS5pbmRleCxUPVZlKCksVz0kaSgzMSksaWU9JGkoMzMpO0NlKDEpLFJlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tlcnM/VzppZSkoIm5nVGVtcGxhdGVPdXRsZXRD''@;'; put 'put ''b250ZXh0IixXTSgyLFFCZSxoLGYsXyxhKSl9fWZ1bmN0aW9uIHRqZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gbmplKGMsbCl7MSZjJiZqYSgwKX1jb25zdCByamU9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJue3JhbmdlOiJzdGFydCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MCxxdWVy''@;'; put 'put ''eUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9fSxpamU9ZnVuY3Rpb24oYyxsLGEsZCl7cmV0dXJue3JhbmdlOiJlbmQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjEscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfX07ZnVuY3Rpb24gb2plKGMsbCl7''@;'; put 'put ''aWYoMSZjJiYobWUoMCwiZGl2Iiw1NSkoMSwiZGl2Iiw1NiksUWUoMix0amUsMSwwLCJuZy1jb250YWluZXIiLDUzKSx5ZSgpLG1lKDMsImRpdiIsNTcpLFFlKDQsbmplLDEsMCwibmctY29udGFpbmVyIiw1MykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcixkPVZlKCksaD1kLiRp''@;'; put 'put ''bXBsaWNpdCxmPWQuaW5kZXgsXz1WZSgpLmluZGV4LFQ9VmUoKSxXPSRpKDMxKSxpZT0kaSgzNSk7Q2UoMiksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9XOmllKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFdNKDQscmplLGgsZixfLGEpKSxDZSgyKSxSZSgibmdU''@;'; put 'put ''ZW1wbGF0ZU91dGxldCIsYSYmVC51c2VQaWNrZXJzP1c6aWUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsV00oOSxpamUsaCxmLF8sYSkpfX1mdW5jdGlvbiBzamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDU4KSgxLCJsYWJlbCIsMyksTmUoMiwiVmFsdWUiKSx5''@;'; put 'put ''ZSgpLG1lKDMsImlucHV0Iiw1OSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQudmFsdWU9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS5pbmRleCxfPVZlKCkuaW5kZXg7cmV0''@;'; put 'put ''dXJuIGp0KFZlKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxmLF8pKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDMpLFJlKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gYWplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw0NiksUWUoMSxYQmUsNCw2LCJk''@;'; put 'put ''aXYiLDQ3KSxRZSgyLGVqZSwyLDcsImRpdiIsNDgpLFFlKDMsb2plLDUsMTQsImRpdiIsNDkpLFFlKDQsc2plLDQsMSwiZGl2Iiw1MCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwiSU4iPT09YS5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1hLm9wZXJh''@;'; put 'put ''dG9yKSxDZSgxKSxSZSgibmdJZiIsIkJFVFdFRU4iIT09YS5vcGVyYXRvciYmIklOIiE9PWEub3BlcmF0b3ImJiJOT1QgSU4iIT09YS5vcGVyYXRvciYmIkxJS0UiIT09YS5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWEub3BlcmF0b3ImJiJCRUdJTlNfV0lUSCIhPT1hLm9wZXJhdG9yKSxDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsIkJFVFdFRU4iPT09YS5vcGVyYXRvciksQ2UoMSksUmUoIm5nSWYiLCJMSUtFIj09PWEub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT1hLm9wZXJhdG9yfHwiQ09OVEFJTlMiPT09YS5vcGVyYXRvcil9fWZ1bmN0aW9uIGxqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp''@;'; put 'put ''O21lKDAsImRpdiIsNikoMSwiZGl2IiwzNSkoMiwiZGl2IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNykseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LnZhcmlhYmxlPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3Qg''@;'; put 'put ''Zj1CdChhKSxfPWYuJGltcGxpY2l0LFQ9Zi5pbmRleCxXPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkudmFyaWFibGVJbnB1dENoYW5nZShfLnZhcmlhYmxlLFQsVyxoKSl9KSxRZSg0LEdCZSwyLDEsIm9wdGlvbiIsMzgpLHllKCkoKSgpLG1lKDUsImRpdiIsMzkpKDYsImNsci1zZWxlY3Qt''@;'; put 'put ''Y29udGFpbmVyIikoNywibGFiZWwiKSxOZSg4LCJPcGVyYXRvciIpLHllKCksbWUoOSwic2VsZWN0Iiw0MCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBqdChCdChhKS4kaW1wbGljaXQub3BlcmF0b3I9aCl9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtjb25z''@;'; put 'put ''dCBoPUJ0KGEpLGY9aC5pbmRleCxfPWguJGltcGxpY2l0LFQ9VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZU9wZXJhdG9yKGYsXy5vcGVyYXRvcixUKSl9KSxRZSgxMCwkQmUsMiwxLCJvcHRpb24iLDM4KSx5ZSgpKCkoKSxRZSgxMSxhamUsNSw0LCJkaXYiLDQxKSxtZSgx''@;'; put 'put ''MiwiZGl2Iiw0MikoMTMsImJ1dHRvbiIsNDMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLmluZGV4LF89VmUoKS5pbmRleDtyZXR1cm4ganQoVmUoKS5yZW1vdmVDbGF1c2UoZixfKSl9KSxxdCgxNCwiY2xyLWljb24iLDQ0KSgxNSwic3BhbiIpLHllKCksbWUoMTYsImJ1''@;'; put 'put ''dHRvbiIsNDUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuaW5kZXg7cmV0dXJuIGp0KFZlKCkuYWRkQ2xhdXNlKGgpKX0pLHF0KDE3LCJjbHItaWNvbiIsMzMpKDE4LCJzcGFuIikseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRl''@;'; put 'put ''eCxoPVZlKCkuaW5kZXgsZj1WZSgpO2RyKCJpbnZhbGlkLWNsYXVzZSIsYS5pbnZhbGlkQ2xhdXNlKSxDZSgzKSxSZSgiaWQiLCJzZWxlY3RfdmFsc192YXJfaWQiK2QrIl8iK2gpKCJpbnB1dElkIiwidmFsc192YXJfaWQiK2QrIl8iK2gpKCJlbWl0T25seVNlbGVjdGVkIiwhMCkoInZhbHVl''@;'; put 'put ''IixhLnZhcmlhYmxlKSxDZSgxKSxSZSgibmdGb3JPZiIsZi5jb2xzKSxDZSg1KSxSZSgibmdNb2RlbCIsYS5vcGVyYXRvciksQ2UoMSksUmUoIm5nRm9yT2YiLGEub3BlcmF0b3JzKSxDZSgxKSxSZSgibmdWYXIiLCJEQVRFIj09PWEuZGR0eXBlfHwiREFURVRJTUUiPT09YS5kZHR5cGV8fCJU''@;'; put 'put ''SU1FIj09PWEuZGR0eXBlKSxDZSgyKSxSZSgiZGlzYWJsZWQiLDE9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHMubGVuZ3RoKX19ZnVuY3Rpb24gY2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwyNCkoMSwiZGl2Iiw2KSgyLCJkaXYiLDI1KSgzLCJkaXYi''@;'; put 'put ''LDI2KSg0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDUsImxhYmVsIiksTmUoNiwiTG9naWMiKSx5ZSgpLG1lKDcsInNlbGVjdCIsMjcpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkuJGltcGxpY2l0LmNsYXVzZUxvZ2ljPWgpfSkoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuc2V0TG9naWMoKSl9KSxRZSg4LFpCZSwyLDIsIm9wdGlvbiIsOSkseWUoKSgpKCkscXQoOSwiYnIiKSxRZSgxMCxZQmUsNCwwLCJidXR0b24iLDI4KSx5ZSgpLG1lKDExLCJkaXYiLDI5KSxRZSgxMixXQmUsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMzApLFFlKDEzLGxqZSwxOSwxMSwiZGl2IiwzMSkseWUoKSgpLHF0KDE0LCJiciIpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxkcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksQ2UoNiksUmUoIm5nTW9kZWwiLGEuY2xhdXNlTG9n''@;'; put 'put ''aWMpKCJkaXNhYmxlZCIsYS5lbGVtZW50cy5sZW5ndGg8MiksQ2UoMSksUmUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLENlKDIpLFJlKCJuZ0lmIixkLmlubmVyV2lkdGg+NzY4KSxDZSgyKSxSZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxDZSgxKSxSZSgibmdG''@;'; put 'put ''b3JPZiIsYS5lbGVtZW50cyl9fWZ1bmN0aW9uIHVqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjIpLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5xdWVyeSxUPWYucXVlcnlJbmRleCxX''@;'; put 'put ''PWYuY2xhdXNlSW5kZXgsaWU9Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkuZGF0ZUNoYW5nZShoLF8sVCxXLGllKSl9KSxiYSgyLCJzYXNUb0pzRGF0ZSIpLGJhKDMsInNhc1RvSnNEYXRlIikseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpLGQ9YS5xdWVyeUluZGV4LGg9''@;'; put 'put ''YS5jbGF1c2VJbmRleCxmPWEucXVlcnlWYWx1ZUluZGV4LF89YS5xdWVyeTtDZSgxKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZCsiXyIraCkoInZhbHVlIix2b2lkIDAhPT1mP1VsKDIsMyxfLnZhbHVlW2ZdKTpVbCgzLDUsXy52YWx1ZSkpfX1m''@;'; put 'put ''dW5jdGlvbiBkamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJhcHAtc29mdC1zZWxlY3QiLDYzKSx4dCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKSxfPWYuY2xhdXNlSW5kZXgsVD1mLnF1ZXJ5SW5kZXg7cmV0dXJuIGp0KFZlKCku''@;'; put 'put ''Z2V0UXVlcnlEYXRlVGltZShfLFQpLmRhdGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWgucXVlcnksXz1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUluZGV4LFc9aC5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkuZGF0ZVRpbWVDaGFu''@;'; put 'put ''Z2UoZixfLFQsVykpfSksYmEoMiwic2FzVG9Kc0RhdGUiKSxiYSgzLCJzYXNUb0pzRGF0ZSIpLHllKCksbWUoNCwiYXBwLXNvZnQtc2VsZWN0Iiw2NCkseHQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCksXz1mLmNsYXVzZUluZGV4LFQ9Zi5xdWVyeUluZGV4''@;'; put 'put ''O3JldHVybiBqdChWZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoXyxUKS50aW1lPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCksZj1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LFQ9aC5jbGF1c2VJbmRleCxXPWgucXVlcnlWYWx1ZUluZGV4O3JldHVybiBqdChW''@;'; put 'put ''ZSgpLmRhdGVUaW1lQ2hhbmdlKGYsXyxULFcpKX0pLGJhKDUsInNhc1RvSnNEYXRlIiksYmEoNiwic2FzVG9Kc0RhdGUiKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD1hLnF1ZXJ5SW5kZXgsaD1hLmNsYXVzZUluZGV4LGY9YS5xdWVyeVZhbHVlSW5kZXgsXz1hLnF1ZXJ5O0Nl''@;'; put 'put ''KDEpLFJlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitkKyJfIitoKSgidmFsdWUiLHZvaWQgMCE9PWY/TTUoMiw2LF8udmFsdWVbZl0sInNlY29uZHMiKTpNNSgzLDksXy52YWx1ZSwic2Vjb25kcyIpKSxDZSgzKSxSZSgiZGlzYWJsZVNvZnRzZWxlY3Qi''@;'; put 'put ''LCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZCsiXyIraCkoInZhbHVlIix2b2lkIDAhPT1mP0RSKDUsMTIsXy52YWx1ZVtmXSwic2Vjb25kcyIsITApOkRSKDYsMTYsXy52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gaGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCks''@;'; put 'put ''bWUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSkseHQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLF89Zi5xdWVyeSxUPWYucXVlcnlJbmRleCxXPWYuY2xhdXNlSW5kZXgsaWU9Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGp0KFZlKCkudGltZUNoYW5nZSho''@;'; put 'put ''LF8sVCxXLGllKSl9KSxiYSgyLCJzZWNvbmRzUGFyc2VyIiksYmEoMywic2Vjb25kc1BhcnNlciIpLHllKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKSxkPWEucXVlcnlJbmRleCxoPWEuY2xhdXNlSW5kZXgsZj1hLnF1ZXJ5VmFsdWVJbmRleCxfPWEucXVlcnk7Q2UoMSksUmUoImRpc2Fi''@;'; put 'put ''bGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzXyIrZCsiXyIraCkoInZhbHVlIix2b2lkIDAhPT1mP1VsKDIsMyxfLnZhbHVlW2ZdKTpVbCgzLDUsXy52YWx1ZSkpfX1mdW5jdGlvbiBmamUoYyxsKXsxJmMmJihCcigwLDYwKSxRZSgxLHVqZSw0LDcsIm5nLWNvbnRhaW5lciIsNjEp''@;'; put 'put ''LFFlKDIsZGplLDcsMjAsIm5nLWNvbnRhaW5lciIsNjEpLFFlKDMsaGplLDQsNywibmctY29udGFpbmVyIiw2MSksVXIoKSksMiZjJiYoUmUoIm5nU3dpdGNoIixsLnF1ZXJ5LmRkdHlwZSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwi''@;'; put 'put ''REFURVRJTUUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiVElNRSIpKX1mdW5jdGlvbiBwamUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLnVuZm9ybWF0dGVkKSxDZSgxKSxncigiICIs''@;'; put 'put ''YS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIGdqZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEscGplLDIsMiwib3B0aW9uIiw2NykseWUoKSksMiZjKXtjb25zdCBhPVZlKCkucXVlcnk7Q2UoMSksUmUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gbWplKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYobWUoMCwib3B0aW9uIiw2OCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O1JlKCJ2YWx1ZSIsYS5OQU1FKSxDZSgxKSxncigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIHZqZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsbWplLDIsMiwib3B0''@;'; put 'put ''aW9uIiw2OSksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMikucXVlcnk7Q2UoMSksUmUoIm5nSWYiLGEuVFlQRT09PWQudHlwZSl9fWZ1bmN0aW9uIF9qZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsdmplLDIsMSwibmctY29udGFpbmVyIiwzOCkseWUoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbHMpfX1mdW5jdGlvbiBiamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSx4dCgic2VsZWN0ZWRMYWJlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS5x''@;'; put 'put ''dWVyeTtyZXR1cm4ganQoVmUoKS5zZWxlY3RlZExhYmVsQ2hhbmdlKGgsXykpfSkoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSkucXVlcnkudmFsdWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpLF89Zi5xdWVyeUluZGV4LFQ9''@;'; put 'put ''Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLnRhcmdldC52YWx1ZSxfLFQpKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPUJ0KGEpLF89Zi5xdWVyeSxUPWYucXVlcnlJbmRleCxXPWYuY2xhdXNlSW5kZXg7''@;'; put 'put ''cmV0dXJuIGp0KFZlKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLF8udmFyaWFibGUsVCxXKSl9KSxRZSgxLGdqZSwyLDEsImRpdiIsMTYpLFFlKDIsX2plLDIsMSwiZGl2IiwxNikseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5k''@;'; put 'put ''ZXg7UmUoInNlY29uZExhYmVsIiwiVmFyaWFibGUiKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS52YWx1ZVZhcmlhYmxlKSgiaW5wdXRJZCIsInZhbHNfIitkKyJfIitoKSgidmFsdWUiLGEudmFsdWUpKCJlbmFibGVMb2FkTW9yZSIsYS5ub2JzPmEudmFsdWVzLmxlbmd0aCksQ2UoMSksUmUoIm5n''@;'; put 'put ''SWYiLCFhLnZhbHVlVmFyaWFibGUpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlVmFyaWFibGUpfX1mdW5jdGlvbiB5amUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDY4KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UmUoInZhbHVlIixhLmZvcm1hdHRlZCksQ2Uo''@;'; put 'put ''MSksZ3IoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIHdqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImFwcC1zb2Z0LXNlbGVjdCIsNzApLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1CdChhKTtyZXR1cm4ganQoZi5xdWVyeS52YWx1ZVtmLnF1''@;'; put 'put ''ZXJ5VmFsdWVJbmRleF09aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe2NvbnN0IGg9QnQoYSksZj1oLnF1ZXJ5LF89aC5xdWVyeUluZGV4LFQ9aC5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5zZXRWYXJpYWJsZVZhbHVlcyhmLnZhbHVlLF8sVCkpfSkoIm9uQXV0b2NvbXBsZXRl''@;'; put 'put ''TG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9QnQoYSksXz1mLnF1ZXJ5LFQ9Zi5xdWVyeUluZGV4LFc9Zi5jbGF1c2VJbmRleDtyZXR1cm4ganQoVmUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsXy52YXJpYWJsZSxULFcpKX0pLFFlKDEseWplLDIsMiwib3B0aW9uIiw2''@;'; put 'put ''NykseWUoKX1pZigyJmMpe2NvbnN0IGE9bC5yYW5nZSxkPWwucXVlcnksaD1sLnF1ZXJ5VmFsdWVJbmRleDtSZSgiaW5wdXRJZCIsInZhbHMtIithKyJfIitsLnF1ZXJ5SW5kZXgrIl8iK2wuY2xhdXNlSW5kZXgpKCJ2YWx1ZSIsZC52YWx1ZVtoXSkoImVuYWJsZUxvYWRNb3JlIixkLm5vYnM+''@;'; put 'put ''ZC52YWx1ZXMubGVuZ3RoKSgiZGlzYWJsZWQiLHZvaWQgMCE9PWgmJiJzdGFydCIhPT1hJiYhZC52YWx1ZVswXSksQ2UoMSksUmUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gQ2plKGMsbCl7MSZjJiYobWUoMCwiaDUiLDc4KSxOZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiks''@;'; put 'put ''eWUoKSl9ZnVuY3Rpb24gU2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLmluZGV4O3JldHVybiBqdChWZSgyKS5xdWVyeS52YWx1''@;'; put 'put ''ZVtfXS5jaGVja2VkPWgpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMiksXz1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiBqdChWZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgsXyxUKSl9KSx5ZSgpLG1lKDIsImxhYmVsIiksTmUoMyks''@;'; put 'put ''eWUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1WZSgyKS5xdWVyeTtDZSgxKSxSZSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxDZSgyKSxncigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gTWplKGMsbCl7aWYoMSZjJiYobWUoMCwic2Vj''@;'; put 'put ''dGlvbiIsNzkpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxRZSgyLFNqZSw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKS5xdWVyeTtDZSgyKSxSZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiB4amUoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLE5lKDIsIlNlbGVjdCB2YWx1ZXMiKSx5ZSgpLG1lKDMsImRpdiIsNzMpLFFlKDQsQ2plLDIsMCwiaDUiLDc0KSxRZSg1LE1qZSwzLDEsInNlY3Rpb24iLDc1KSx5ZSgpLG1lKDYsImRpdiIsNzYpKDcsImJ1dHRv''@;'; put 'put ''biIsNzcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsanQoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksTmUoOCwiIEFwcGx5ICIpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVy''@;'; put 'put ''eUluZGV4LGg9bC5jbGF1c2VJbmRleCxmPVZlKCk7UmUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg0KSxSZSgibmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkpLENlKDEpLFJl''@;'; put 'put ''KCJuZ0lmIixmLmlzQXJyKGEudmFsdWUpKX19IWZ1bmN0aW9uIGYwZShjLGwsYSl7KGZ1bmN0aW9uIFVNKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW3FvLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksJGRbbF09YyxhJiYoJGRbbF1b''@;'; put 'put ''cW8uRXh0cmFEYXRhXT1hKX0pKGMsbCxhKX0oRUJlKTtsZXQgY1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5jZGY9Zix0aGlzLmNhY2hpbmc9ITAs''@;'; put 'put ''dGhpcy5yb3dzX2luY3JlbWVudD0xMDAsdGhpcy5pbml0aWFsX3Jvd3M9MWUzLHRoaXMuY2xhdXNlQW10PVsiIl0sdGhpcy5udW1PcGVyYXRvcnM9WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSx0aGlzLmNoYXJPcGVyYXRvcnM9WyI9IiwiPCIs''@;'; put 'put ''Ij4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5ub3RJbj0hMSx0aGlzLm5vdEFycj0hMCx0aGlzLndhc0JldHdlZW49ITEsdGhpcy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsdGhpcy5keW5hbWljV2hlcmVDbGF1c2U9ITAsdGhpcy51c2VQaWNrZXJzPSEx''@;'; put 'put ''LHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVWYXJpYWJsZTohMSxzdGFydHJvdzowLHJvd3M6MCxub2JzOjAsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1d''@;'; put 'put ''LGNsYXVzZUxvZ2ljOiIiLGludmFsaWRDbGF1c2U6ITF9LHRoaXMuc2VsVmFyPXtpbmRleDpudWxsLGZvcm1hdDpudWxsLHR5cGU6bnVsbH0sdGhpcy5pbk9iaj1be2NoZWNrZWQ6ITEsdmFsdWU6bnVsbH1dLHRoaXMuZ3JvdXBMb2dpYz0iQU5EIix0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0''@;'; put 'put ''aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dpY30sdGhpcy5sb2dpY09wZXJhdG9ycz1bIkFORCIsIk9SIl0sdGhpcy5xdWVyeURhdGVUaW1lPVtdLHRoaXMuY3VycmVudENsYXVzZUluZGV4PS0xLHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9LTEs''@;'; put 'put ''dGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbCx0aGlzLmlubmVyV2lkdGg9d2luZG93LnNjcmVlbi53aWR0aCx0aGlzLmlubmVyV2lkdGg+NzY4JiYodGhpcy5ub0JvcmRlcj0iYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCBncmF5OyIpfWdldFF1ZXJ5RGF0ZVRpbWUoYSxkKXtsZXQgaD10aGlz''@;'; put 'put ''LnF1ZXJ5RGF0ZVRpbWUuZmluZChmPT5mLmNsYXVzZUluZGV4PT09YSYmZi5xdWVyeUluZGV4PT09ZCk7aWYoIWgpe2NvbnN0IGY9dGhpcy5xdWVyeURhdGVUaW1lLnB1c2goe2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkLGRhdGU6IiIsdGltZToiIn0pLTE7aD10aGlzLnF1ZXJ5RGF0ZVRp''@;'; put 'put ''bWVbZl19cmV0dXJuIGh9dXNlUGlja2Vyc0NoYW5nZSgpe3RoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLnVzZVBpY2tlcnMmJnRoaXMuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKGE9PnthLmVsZW1lbnRzLmZvckVhY2goZD0+e1siREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVz''@;'; put 'put ''KGQuZGR0eXBlKSYmZC52YWx1ZVZhcmlhYmxlJiYoZC52YWx1ZT0iIixkLnZhbHVlVmFyaWFibGU9ITEpfSl9KX1yZXNldEZpbHRlcigpe3RoaXMud2hlcmVTdHJpbmc9dm9pZCAwLHRoaXMud2hlcmVDbGF1c2U9dm9pZCAwLHRoaXMucXVlcnlPYmo9e2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0''@;'; put 'put ''eXBlOm51bGwsZGR0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSx0aGlzLmNsYXVzZXM9e3F1ZXJ5T2JqOlt0aGlzLnF1ZXJ5T2JqXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOnRoaXMuZ3JvdXBMb2dp''@;'; put 'put ''Y30sdGhpcy53aGVyZUNsYXVzZUZuKCEwKX1zZXRUb0dsb2JhbHMoKXtpZighdGhpcy5jYWNoaW5nKXJldHVybjtsZXQgYT0iIjsiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtP2E9dGhpcy52aWV3Ym94SWQ/YHZpZXdib3hlcy4ke3RoaXMudmlld2JveElk''@;'; put 'put ''fWA6ImVkaXRvciI6InZpZXciPT09R24ucm9vdFBhcmFtJiYoYT0idmlld2VyIiksaWwoR24sYSkuZmlsdGVyLmdyb3VwTG9naWM9dGhpcy5ncm91cExvZ2ljLCJzdHJpbmciPT10eXBlb2YgdGhpcy53aGVyZUNsYXVzZSYmKGlsKEduLGEpLmZpbHRlci53aGVyZUNsYXVzZT10aGlzLndoZXJl''@;'; put 'put ''Q2xhdXNlKSwic3RyaW5nIj09dHlwZW9mIHRoaXMubGliZHMmJihpbChHbixhKS5maWx0ZXIubGliZHM9dGhpcy5saWJkcyksaWwoR24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5jbGF1c2VzfWdldEZyb21HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUi''@;'; put 'put ''PT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLGlsKEduLGEpLmZpbHRlci5jb2xzLmxlbmd0aD4wJiYo''@;'; put 'put ''dGhpcy5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaWwoR24sYSkuZmlsdGVyLmNvbHMpKSksaWwoR24sYSkuZmlsdGVyLnZhbHMubGVuZ3RoPjAmJih0aGlzLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbChHbixhKS5maWx0ZXIudmFscykpKSwiIiE9PWlsKEduLGEp''@;'; put 'put ''LmZpbHRlci5ncm91cExvZ2ljJiYodGhpcy5ncm91cExvZ2ljPWlsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljLHRoaXMud2hlcmVDbGF1c2U9aWwoR24sYSkuZmlsdGVyLndoZXJlQ2xhdXNlLHRoaXMubGliZHM9aWwoR24sYSkuZmlsdGVyLmxpYmRzLHRoaXMuY2xhdXNlcz1pbChHbixhKS5m''@;'; put 'put ''aWx0ZXIuY2xhdXNlcyx0aGlzLndoZXJlQ2xhdXNlRm4oKSl9c2V0R3JvdXBMb2dpYyhhKXt0aGlzLmdyb3VwTG9naWM9YSx0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9ZGF0ZUNoYW5nZShhLGQsaCxmLF8pe2xldCBU''@;'; put 'put ''PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEpOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PV8mJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbX109VCksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhULGgsZil9ZGF0''@;'; put 'put ''ZVRpbWVDaGFuZ2UoYSxkLGgsZil7Y29uc3QgXz10aGlzLmdldFF1ZXJ5RGF0ZVRpbWUoaCxkKTtpZigiIj09PV8uZGF0ZSl7aWYoIiI9PT1hLnZhbHVlKXJldHVybjtfLmRhdGU9YS52YWx1ZS5zcGxpdCgiOiIpWzBdfWNvbnN0IFQ9cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMF0pLFc9''@;'; put 'put ''cGFyc2VJbnQoXy50aW1lLnNwbGl0KCI6IilbMV0pLGllPXBhcnNlSW50KF8udGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgZ2U9bmV3IERhdGUoXy5kYXRlKSx3ZT1uZXcgRGF0ZShnZS5nZXRGdWxsWWVhcigpLGdlLmdldE1vbnRoKCksZ2UuZ2V0RGF0ZSgpLFQsVyxpZSksRWU9dGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlLmNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUod2UsInNlY29uZHMiKTsiQkVUV0VFTiI9PT1hLm9wZXJhdG9yJiZ2b2lkIDAhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlW2ZdPUVlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKEVlLGQs''@;'; put 'put ''aCl9dGltZUNoYW5nZShhLGQsaCxmLF8pe2E9YS50YXJnZXQudmFsdWU7bGV0IEVlPTYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSkqNjArNjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzFdKSsocGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKXx8MCk7IkJFVFdFRU4iPT09ZC5vcGVyYXRvciYm''@;'; put 'put ''dm9pZCAwIT09XyYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZVtfXT1FZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhFZSxoLGYpfWR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoYSxkKXtsZXQgaD1bXTtpZih0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3Ro''@;'; put 'put ''PjF8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cy5sZW5ndGg+MSlmb3IobGV0IGY9MDtmPHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg7ZisrKWZvcihsZXQgXz0wO188dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzLmxlbmd0aDtfKyspe2lmKGY9PT1hJiZf''@;'; put 'put ''PT09ZHx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFyaWFibGUpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS5vcGVyYXRvcil8fFtudWxsLHZvaWQgMF0uaW5j''@;'; put 'put ''bHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnZhbHVlKSljb250aW51ZTtsZXQgVD0iIjtjb25zdCBXPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS5vcGVyYXRvcixpZT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFy''@;'; put 'put ''aWFibGU7IkJFVFdFRU4iPT09Vz9UPWAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZVswXX0gQU5EICR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdW19dLnZhbHVlWzFdfWA6IklOIj09PVd8fCJOT1QgSU4iPT09Vz8odGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2Zd''@;'; put 'put ''W19dLnZhbHVlLmZvckVhY2goZ2U9PntpZihnZS5jaGVja2VkKXtsZXQgd2U9Z2UudmFsOyJzdHJpbmciIT10eXBlb2Ygd2V8fCgwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKHdlKT9ULmxlbmd0aD4wP1QrPWAsJHt3ZX1gOlQ9YCgke3dlfWA6VC5sZW5ndGg+MD9UKz1gLCcke3dlfSdgOlQ9YCgn''@;'; put 'put ''JHt3ZX0nYH19KSxULmxlbmd0aD4wJiYoVCs9IikiKSk6IiI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWU/VD0iY2hhciI9PT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09dGhpcy5jbGF1c2Vz''@;'; put 'put ''LnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW19dLnR5cGUmJihUPWAnJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbX10udmFsdWV9J2ApLGgucHVzaCh7R1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsU1VCR1JPVVBfTE9HSUM6dGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq''@;'; put 'put ''W2ZdLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOmllLE9QRVJBVE9SX05NOlcsUkFXX1ZBTFVFOlR8fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1tfXS52YWx1ZX0pfXJldHVybiBofWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpe3ZhciBf''@;'; put 'put ''PXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IFQ9Xy5saWJkc3x8IiI7dHJ5e2lmKHZvaWQgMCE9PV8uY29scyl7Zm9yKGxldCBldD0wO2V0PF8uY29scy5sZW5ndGg7ZXQrKylfLmNvbHNbZXRdLk5BTUU9PT1kJiYoXy5zZWxWYXIuaW5kZXg9ZXQpO2NvbnN0IFc9Xy5jb2xzW18u''@;'; put 'put ''c2VsVmFyLmluZGV4XS5ERFRZUEUse3N0YXJ0cm93OmllLHJvd3M6Z2V9PV8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXSx3ZT1fLnJvd3NfaW5jcmVtZW50LEVlPWllK2dlO2xldCBaZT1bXTtfLmR5bmFtaWNXaGVyZUNsYXVzZSYmKFplPV8uZHluYW1pY1doZXJlQ2xhdXNlQ3Jl''@;'; put 'put ''YXRvcihmLGgpKTtjb25zdCBvdD1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhXKTtfLnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLFQsWmUsRWUsd2UpLnRoZW4oZXQ9Pntjb25zdCB5dD1ldC52YWxzLHtTVEFSVFJPVzprdCxST1dTOlN0LE5PQlM6UXR9PWV0''@;'; put 'put ''Lm1ldGFbMF07aWYoXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PWt0LF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPVN0LF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPVF0LDE9PT15dC5sZW5ndGgmJiIiPT09eXRb''@;'; put 'put ''MF0uRk9STUFUVEVEJiYiIj09PXl0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6KF8uY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi55dC5tYXAoTm49Pntjb25zdCBjcj0ibnVtIj09PWV0LiR2YWxzLnZhcnMuVU5GT1JNQVRURUQu''@;'; put 'put ''dHlwZTtsZXQgX2k9Y3ImJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKE5uLlVORk9STUFUVEVEKT8iLiIrTm4uVU5GT1JNQVRURUQ6Tm4uVU5GT1JNQVRURUQ7cmV0dXJuIGNyJiZudWxsPT09X2kmJihfaT0iLiIpLHtmb3JtYXR0ZWQ6b3Q/Tm4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06Tm4u''@;'; put 'put ''Rk9STUFUVEVELHVuZm9ybWF0dGVkOl9pfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQoUXQtXy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLF8ud2hlcmVDbGF1c2VGbigpLF8uc2V0VG9HbG9iYWxzKCksXy53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVs''@;'; put 'put ''bCE9PV8ucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpybixxdWVyeUluZGV4OnZufT1fLnBlbmRpbmdJTlZhbHVlc1NldDtfLnNldElOVmFsdWVzKHJuLHZuKSxfLnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfV8uY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKGV0PT57''@;'; put 'put ''Xy53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goVyl7Xy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsVyl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Yud2hlcmVDbGF1c2VMb2Fk''@;'; put 'put ''aW5nPSEwO2xldCBfPSIiO3ZvaWQgMCE9PWYubGliZHMmJihfPWYubGliZHMpLGYuY2xlYXJWYWx1ZXMoZCxoKSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVzPVtdLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT0iIixmLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3I9Ij0iLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YXJpYWJsZT1hO3RyeXtpZih2b2lkIDAhPT1mLmNvbHMpe2ZvcihsZXQgZ2U9MDtnZTxmLmNvbHMubGVuZ3RoO2dlKyspZi5jb2xzW2dlXS5OQU1FPT09YSYmKGYuc2Vs''@;'; put 'put ''VmFyLmluZGV4PWdlKTtjb25zdCBUPWYuY29sc1tmLnNlbFZhci5pbmRleF0uRERUWVBFO2YuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5kZHR5cGU9VCxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLlRZUEUsZi5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9ycz0ibnVtIj09PWYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlP2YubnVtT3BlcmF0b3JzOmYuY2hhck9wZXJhdG9ycztsZXQgVz1bXTtmLmR5bmFtaWNXaGVyZUNsYXVzZSYmKFc9Zi5keW5hbWljV2hl''@;'; put 'put ''cmVDbGF1c2VDcmVhdG9yKGgsZCkpO2NvbnN0IGllPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKFQpO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEsXyxXLDEsZi5pbml0aWFsX3Jvd3MpLnRoZW4oZ2U9Pntjb25zdCB3ZT1nZS52YWxzLHtTVEFSVFJPVzpF''@;'; put 'put ''ZSxST1dTOlplLE5PQlM6b3R9PWdlLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PUVlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPVplLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPW90LGYu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9d2UubWFwKGV0PT57Y29uc3QgeXQ9Im51bSI9PT1nZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IFN0PXl0JiYoMCx0My5pc1NwZWNpYWxNaXNzaW5nKShldC5VTkZPUk1BVFRFRCk/Ii4iK2V0LlVORk9STUFU''@;'; put 'put ''VEVEOmV0LlVORk9STUFUVEVEO3JldHVybiB5dCYmbnVsbD09PVN0JiYoU3Q9Ii4iKSx7Zm9ybWF0dGVkOmllP2V0LkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOmV0LkZPUk1BVFRFRCx1bmZvcm1hdHRlZDpTdH19KS5zbGljZSgwLDJlMyksZi53aGVyZUNsYXVzZUZuKCksZi5zZXRUb0dsb2Jh''@;'; put 'put ''bHMoKSxmLndoZXJlQ2xhdXNlTG9hZGluZz0hMSxudWxsIT09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQpe2NvbnN0e2NsYXVzZUluZGV4OmV0LHF1ZXJ5SW5kZXg6eXR9PWYucGVuZGluZ0lOVmFsdWVzU2V0O2Yuc2V0SU5WYWx1ZXMoZXQseXQpLGYucGVuZGluZ0lOVmFsdWVzU2V0PW51bGx9Zi5j''@;'; put 'put ''ZGYuZGV0ZWN0Q2hhbmdlcygpfSkuY2F0Y2goZ2U9PntmLndoZXJlQ2xhdXNlTG9hZGluZz0hMX0pfX1jYXRjaChUKXtmLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjb2x2YWxzIixUKX19KSgpfWdldGxvZ2ljKGEpe3RoaXMubG9naWM9YSx0aGlzLndoZXJl''@;'; put 'put ''Q2xhdXNlRm4oKX1zZXRMb2dpYygpe3RoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9aXNBcnIoYSl7cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSYmYS5sZW5ndGg+MCYmdHlwZW9mIGFbMF0uY2hlY2tlZDwidSJ9c2VsZWN0ZWRMYWJlbENoYW5nZShhLGQpe2QudmFs''@;'; put 'put ''dWVWYXJpYWJsZT0iVmFyaWFibGUiPT09YSxkLnZhbHVlPSIiLHRoaXMud2hlcmVDbGF1c2VGbigpfXZhcmlhYmxlSW5wdXRDaGFuZ2UoYSxkLGgsZil7dGhpcy5nZXRWYWx1ZXMoYSxkLGgpfXNldFZhcmlhYmxlVmFsdWVzKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0u''@;'; put 'put ''ZWxlbWVudHNbZF0ub3BlcmF0b3I7IkJFVFdFRU4iIT09ZiYmIklOIiE9PWYmJiJOT1QgSU4iIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZT1hLnRvU3RyaW5nKCkpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0VmFy''@;'; put 'put ''aWFibGVPcGVyYXRvcihhLGQsaCl7bGV0IGY9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlO2YgaW5zdGFuY2VvZiBBcnJheSYmIklOIiE9PWQmJiJOT1QgSU4iIT09ZCYmKGY9ZiBpbnN0YW5jZW9mIEFycmF5JiYyPT09Zi5sZW5ndGgmJiJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgZlswXT9mWzBdOiIiKSx0aGlzLmNsZWFyVmFsdWVzT3BlcmF0b3IoYSxoKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0ub3BlcmF0b3I9ZCwoIj0iPT09ZHx8Ij4iPT09ZHx8IjwiPT09ZHx8Ijw9Ij09PWR8fCI+PSI9PT1kfHwiTkUiPT09ZCkmJih0aGlzLmNsYXVz''@;'; put 'put ''ZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU9ZiksIkJFVFdFRU4iPT09ZCYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1bXSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaChmKSx0aGlzLmNsYXVzZXMucXVl''@;'; put 'put ''cnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWUucHVzaCgiIikpLCgiSU4iPT09ZHx8Ik5PVCBJTiI9PT1kKSYmdGhpcy5zZXRJTlZhbHVlcyhoLGEpLHRoaXMud2hlcmVDbGF1c2VGbigpLHRoaXMuc2V0VG9HbG9iYWxzKCl9c2V0SU5WYWx1ZXMoYSxkKXtjb25zdCBoPVtdLGY9dGhpcy5jbGF1''@;'; put 'put ''c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlcztmLmxlbmd0aDwxJiYodGhpcy5wZW5kaW5nSU5WYWx1ZXNTZXQ9e2NsYXVzZUluZGV4OmEscXVlcnlJbmRleDpkfSk7Zm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspaC5wdXNoKHtjaGVja2VkOiExLHZhbDpmW19dLmZvcm1hdHRl''@;'; put 'put ''ZH0pO3RoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50c1tkXS52YWx1ZT1ofWNsZWFyVmFsdWVzKGEsZCl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2RdLmVsZW1lbnRzW2FdLnZhbHVlPSIifWNsZWFyVmFsdWVzT3BlcmF0b3IoYSxkKXtsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmpb''@;'; put 'put ''ZF0uZWxlbWVudHNbYV0ub3BlcmF0b3I7KCJCRVRXRUVOIj09PWh8fCJJTiI9PT1ofHwiTk9UIElOIj09PWh8fCJDT05UQUlOUyI9PT1oKSYmdGhpcy5jbGVhclZhbHVlcyhhLGQpfWhhc0ludmFsaWRDbHVhc2UoYSl7Zm9yKGxldCBkIG9mIGEpe2lmKG51bGw9PT1kLnZhcmlhYmxlfHxudWxs''@;'; put 'put ''PT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWV8fCIiPT09ZC52YWx1ZSlyZXR1cm4gZC5pbnZhbGlkQ2xhdXNlPSEwLCEwO2QuaW52YWxpZENsYXVzZT0hMX1yZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5j''@;'; put 'put ''bGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0u''@;'; put 'put ''aW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5l''@;'; put 'put ''dyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRv''@;'; put 'put ''cjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhp''@;'; put 'put ''cy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUg''@;'; put 'put ''Y2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5z''@;'; put 'put ''ZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hl''@;'; put 'put ''cmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''ZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53''@;'; put 'put ''aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vic2NyaWJlKGQ9PnthLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1l''@;'; put 'put ''bnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVyZUNsYXVzZUZuKCkpKX0pLGEuY29sdW1uc1N1Yj1h''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09R24ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUduLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxHbi5lZGl0b3IuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShK''@;'; put 'put ''U09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmR24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksYS5saWJkc3x8KGEu''@;'; put 'put ''bGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJkduLmVkaXRvci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMs''@;'; put 'put ''R24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmR24udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi52aWV3ZXIuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09O''@;'; put 'put ''LnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMoKSxzZXRUaW1lb3V0KCgpPT57bGV0IGE9ZG9jdW1l''@;'; put 'put ''bnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhpcy52YWx1ZXNTdWIudW5zdWJzY3JpYmUoKX19cmV0''@;'; put 'put ''dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChBYyksdHQoVWEpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3''@;'; put 'put ''Ym94SWQifSxmZWF0dXJlczpbdGkoW3twcm92aWRlOktkLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94''@;'; put 'put ''IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMi''@;'; put 'put ''LDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywiZGlzYWJsZWQiLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJzZWxlY3RlZCIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEs''@;'; put 'put ''ImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsicGlja2VyIiwiIl0sWyJub3RQaWNrZXIiLCIiXSxbIm5vdFBpY2tlclJhbmdlIiwiIl0sWyJjaGVja2JveFZhbHVlcyIsIiJd''@;'; put 'put ''LFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2Ut''@;'; put 'put ''YnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBl''@;'; put 'put ''IiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsImlkIiwiaW5w''@;'; put 'put ''dXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDEsIm10LTIiLDMsIm5nTW9k''@;'; put 'put ''ZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImRp''@;'; put 'put ''c2FibGVkIiwiY2xpY2siXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xh''@;'; put 'put ''c3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNr''@;'; put 'put ''Il0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywi''@;'; put 'put ''bmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiXSxbImxhYmVsIiwiVmFsdWUiLCJ0''@;'; put 'put ''eXBlIiwiZGF0ZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFsidHlwZSIsInRpbWUiLDMsImRpc2FibGVTb2Z0c2VsZWN0IiwiaW5wdXRJZCIsInZhbHVlIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQi''@;'; put 'put ''XSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiLCJvbklucHV0RXZlbnQiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlY29uZExhYmVsIiwiZW1pdE9ubHlTZWxlY3RlZCIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJs''@;'; put 'put ''ZUxvYWRNb3JlIiwic2VsZWN0ZWRMYWJlbENoYW5nZSIsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50Iiwib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIs''@;'; put 'put ''IlZhbHVlIiwzLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIiwidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9z''@;'; put 'put ''YWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMs''@;'; put 'put ''ImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwi''@;'; put 'put ''Y2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmR5bmFtaWNXaGVyZUNsYXVzZT1mfSkseWUoKSxtZSg0LCJsYWJlbCIsMyksTmUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSx5ZSgpKCkoKSxtZSg2LCJk''@;'; put 'put ''aXYiLDQpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC51c2VQaWNrZXJzPWZ9KSgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLnVzZVBpY2tlcnNDaGFuZ2UoKX0pLHllKCksbWUoOSwibGFi''@;'; put 'put ''ZWwiLDMpLE5lKDEwLCIgVXNlIHBpY2tlcnMgIikseWUoKSgpKCkoKSxtZSgxMSwiZGl2Iiw2KSgxMiwiZGl2Iiw3KSgxMywiY2xyLXNlbGVjdC1jb250YWluZXIiKSgxNCwibGFiZWwiKSxOZSgxNSwiR3JvdXAgbG9naWMiKSx5ZSgpLG1lKDE2LCJzZWxlY3QiLDgpLHh0KCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5ncm91cExvZ2ljPWZ9KSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRHcm91cExvZ2ljKGQuZ3JvdXBMb2dpYyl9KSxRZSgxNyxqQmUsMiwyLCJvcHRpb24iLDkpLHllKCkoKSgpLG1lKDE4LCJkaXYiLDEwKSgxOSwicHJl''@;'; put 'put ''IiwxMSksTmUoMjAsIiAgICAgICIpLFFlKDIxLHpCZSw0LDAsImRpdiIsMTIpLE5lKDIyLCJcblxuICAgICAgIiksbWUoMjMsImNvZGUiLDEzKSxOZSgyNCkseWUoKSxOZSgyNSwiXG4gICAgIikseWUoKSgpKCksbWUoMjYsImRpdiIsMTQpKDI3LCJkaXYiLDE1KSxRZSgyOCxVQmUsMSwwLCJk''@;'; put 'put ''aXYiLDE2KSxRZSgyOSxjamUsMTUsOCwiZGl2IiwxNykseWUoKSgpLFFlKDMwLGZqZSw0LDQsIm5nLXRlbXBsYXRlIixudWxsLDE4LEVjKSxRZSgzMixiamUsMyw3LCJuZy10ZW1wbGF0ZSIsbnVsbCwxOSxFYyksUWUoMzQsd2plLDIsNSwibmctdGVtcGxhdGUiLG51bGwsMjAsRWMpLFFlKDM2''@;'; put 'put ''LHhqZSw5LDQsIm5nLXRlbXBsYXRlIixudWxsLDIxLEVjKSksMiZhJiYoQ2UoMyksUmUoIm5nTW9kZWwiLGQuZHluYW1pY1doZXJlQ2xhdXNlKSxDZSg1KSxSZSgibmdNb2RlbCIsZC51c2VQaWNrZXJzKSxDZSg4KSxSZSgiZGlzYWJsZWQiLChudWxsPT1kLmNsYXVzZXN8fG51bGw9PWQuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9iaj9udWxsOmQuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpKCJuZ01vZGVsIixkLmdyb3VwTG9naWMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxvZ2ljT3BlcmF0b3JzKSxDZSg0KSxSZSgibmdJZiIsZC53aGVyZUNsYXVzZUxvYWRpbmcpLENlKDMpLG9yKGQud2hlcmVD''@;'; put 'put ''bGF1c2UpLENlKDMpLGRyKCJjbHItY29sLW1kLTEwIiwobnVsbD09ZC5jbGF1c2VzfHxudWxsPT1kLmNsYXVzZXMucXVlcnlPYmo/bnVsbDpkLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoKT4xKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWQuY2xhdXNlc3x8bnVsbD09ZC5jbGF1c2VzLnF1ZXJ5''@;'; put 'put ''T2JqP251bGw6ZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aCk+MSksQ2UoMSksUmUoIm5nRm9yT2YiLGQuY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W3hzLFppLHJkLG5kLHRoLGthLG91LHN1LFVzLEQwLEQ4LFQwLE44LEg4LGwxLGMxLFdhLFMwLE0wLEJzLE9zLE1zZSxVNyxW''@;'; put 'put ''QmUsQkJlXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1ufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWxvZ2ljW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpjb2x1bW47YmFja2dyb3VuZDojZTllOWU5O3BhZGRpbmc6MTVweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozMHB4IDAgMjBweCAy''@;'; put 'put ''MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5jbHItcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjE2KX0uY29u''@;'; put 'put ''dGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAucmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRl''@;'; put 'put ''O3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZh''@;'; put 'put ''cmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFp''@;'; put 'put ''bmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz''@;'; put 'put ''ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2VsZWN0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjQ1cHg7bWFyZ2luLXRv''@;'; put 'put ''cDowO3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZzowIDVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zKX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1jaGVja2JveC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdp''@;'; put 'put ''bi10b3A6MH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MTIwcHg7b3ZlcmZsb3cteTpzY3JvbGx9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xy''@;'; put 'put ''LWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUt''@;'; put 'put ''Y29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUt''@;'; put 'put ''ZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHIt''@;'; put 'put ''Y29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1j''@;'; put 'put ''b2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz''@;'; put 'put ''ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2lu''@;'; put 'put ''LWJvdHRvbToxMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRp''@;'; put 'put ''bmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDBweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz''@;'; put 'put ''ZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVy''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgt''@;'; put 'put ''d2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xh''@;'; put 'put ''dXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOmF1dG99LmludmFsaWQtY2xhdXNlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoy''@;'; put 'put ''cHggc29saWQgI2Q5NGIzMX0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmNsYXVzZS1yb3dbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3Bvc2l0aW9uOnJlbGF0aXZlO2NvbnRlbnQ6IiI7aGVpZ2h0Oi40MTY2''@;'; put 'put ''N3JlbTt3aWR0aDouNDE2NjdyZW07dG9wOi4yOTE2N3JlbTtyaWdodDouMjVyZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnXFwyMDI2JTJDOS44NCUyQzMuMjRh''@;'; put 'put ''MC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9W19uZ2NvbnRlbnQtJUNPTVAlXTpu''@;'; put 'put ''b3QocHJlKSA+IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZiZjhmOH1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVde3BhZGRp''@;'; put 'put ''bmc6OHB4O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MXB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OjY2cHg7cG9zaXRpb246cmVsYXRpdmV9cHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IHNwYW4uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMHB4O3RvcDoxMHB4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXSBjb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmlucHV0''@;'; put 'put ''LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1pbnB1dFt0eXBlPXRpbWVd''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiM2IzYjN9aW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTpub25lfS5pbi12YWx1ZXMtbW9kYWxbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLm1vZGFsLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2Q4ZDhkODttYXJnaW4tdG9wOjEwcHh9LnByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnByb2dyZXNzLXN0YXRpY1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp0cmFuc3BhcmVudDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH0nXX0pLGN9KSgpO2NvbnN0IEVqZT1bInNlYXJjaExpYlRyZWVJbnB1dCJdO2Z1bmN0aW9uIGtqZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDkpfWZ1bmN0aW9uIEFqZShjLGwpe2lmKDEmYyl7Y29u''@;'; put 'put ''c3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gVGplKGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMykoMSwiZGl2Iiw0KSgyLCJpbnB1dCIsNSw2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChW''@;'; put 'put ''ZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksUWUoNCxramUsMSwwLCJjbHItaWNvbiIsNyksUWUoNSxBamUsMSwwLCJjbHItaWNvbiIsOCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxDZSgyKSxS''@;'; put 'put ''ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBEamUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw5KX1mdW5jdGlvbiBJamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTApLHh0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBM''@;'; put 'put ''amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0IiwxNywxOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtl''@;'; put 'put ''eXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSx5ZSgpLFFlKDQsRGplLDEsMCwiY2xyLWljb24iLDcpLFFlKDUsSWplLDEsMCwiY2xyLWljb24iLDgpLHllKCkoKX1pZigyJmMpe2Nv''@;'; put 'put ''bnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBSamUoYyxsKXsxJmMmJnF0KDAsImNs''@;'; put 'put ''ci1pY29uIiwyNil9ZnVuY3Rpb24gT2plKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIFBqZShjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxOZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSx5ZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBGamUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksUWUoMSxQamUsMiwwLCJzcGFuIiwyNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBIamUoYyxsKXsxJmMmJnF0KDAsImNsci1p''@;'; put 'put ''Y29uIiw5KX1mdW5jdGlvbiBOamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgzKS4kaW1wbGljaXQsXz1WZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJj''@;'; put 'put ''aFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpfX1mdW5jdGlvbiBWamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwzKSgxLCJkaXYiLDQpKDIsImlucHV0IiwyOSwxOCkseHQoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikp''@;'; put 'put ''fSkseWUoKSxRZSg0LEhqZSwxLDAsImNsci1pY29uIiw3KSxRZSg1LE5qZSwxLDAsImNsci1pY29uIiw4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoMykuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFs''@;'; put 'put ''dWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gQmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBs''@;'; put 'put ''aWNpdCxfPVZlKDMpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2x1bW5PbkNsaWNrKGYsVCxfKSl9KSxxdCgyLCJjbHItaWNvbiIsMzEpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSg2KTtDZSgxKSxkcigiY29sdW1u''@;'; put 'put ''LWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxDZSgyKSxncigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIGpqZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsVmplLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksUWUoMixCamUsNCwzLCJjbHItdHJlZS1ub2RlIiwxKSxV''@;'; put 'put ''cigpKSwyJmMpe2NvbnN0IGE9VmUoMikuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLmNvbHVtbnMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiB6amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjAp''@;'; put 'put ''LHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLm5nVmFyLF89VmUoKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQsVz1WZSgpO3JldHVybiBqdChmPyIiOlcudGFibGVPbkNsaWNrKF8uVEFCTEVVUkksXyxUKSl9KSxCcigyLDIxKSxRZSgzLFJqZSwxLDAsImNsci1pY29u''@;'; put 'put ''IiwyMiksUWUoNCxPamUsMSwwLCJjbHItaWNvbiIsMjMpLFVyKCksTmUoNSkseWUoKSxRZSg2LEZqZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSxRZSg3LGpqZSwzLDIsIm5nLWNvbnRhaW5lciIsMjUpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1WZSgpLiRpbXBsaWNp''@;'; put 'put ''dCxoPVZlKDIpLiRpbXBsaWNpdCxmPVZlKCk7Q2UoMSksZHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksZ3IoIiAiLGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxDZSgyKSxSZSgibmdJZiIsZi5oYXNDb2x1bW5zKX19ZnVuY3Rpb24gVWplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''MTIpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudHJlZU5vZGVDbGlja2VkKGgsXyxULnRhYmxlcykpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4ganQoQnQoYSku''@;'; put 'put ''JGltcGxpY2l0LmV4cGFuZGVkPWgpfSksUWUoMSx6amUsOCw5LCJjbHItdG9vbHRpcCIsMTkpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDMpO2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCko''@;'; put 'put ''ImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLENlKDEpLFJlKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gWmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUt''@;'; put 'put ''bm9kZSIsMTIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmxpYnJhcnlMaXN0KSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChh''@;'; put 'put ''KSxqdChWZSgpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDIsInAiLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD0kaSgxKSxmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy5saWI9Zi5MSUJSQVJZSUQsanQoXy5saWJyYXJ5T25DbGljayhfLmxpYnx8''@;'; put 'put ''IiIsZixoKSl9KSxxdCgzLCJjbHItaWNvbiIsMTUpLE5lKDQpLHllKCksUWUoNSxMamUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxRZSg2LFVqZSwyLDUsImNsci10cmVlLW5vZGUiLDE2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4''@;'; put 'put ''cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksQ2UoNCksZ3IoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9''@;'; put 'put ''fWZ1bmN0aW9uIFlqZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsWmplLDcsNywiY2xyLXRyZWUtbm9kZSIsMTEpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIFdqZShjLGwpezEmYyYm''@;'; put 'put ''KG1lKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWxldCBHamU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNlYXJjaExpYklucHV0TGlzdD1u''@;'; put 'put ''ZXcgZWgsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBFcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlcj1uZXcgRXIsdGhpcy5oYXNDb2x1bW5zPSExLHRoaXMucGFnaW5nPSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5saWJy''@;'; put 'put ''YXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0p''@;'; put 'put ''fW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRl''@;'; put 'put ''cihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH10cmVl''@;'; put 'put ''Tm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXtkLmluRm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0KCgpPT5oLmNvbnRlbnRDb250YWluZXIubmF0''@;'; put 'put ''aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50YWJsZXMpZC5leHBhbmRlZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITB9KTtlbHNl''@;'; put 'put ''e2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITF9KTtjb25zdCBfPXNldEludGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNsZWFySW50ZXJ2YWwoXykpfSw1MDApfWQuZXhw''@;'; put 'put ''YW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVt''@;'; put 'put ''bnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9h''@;'; put 'put ''ZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQo''@;'; put 'put ''e3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1''@;'; put 'put ''cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3Ro''@;'; put 'put ''LTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJy''@;'; put 'put ''YXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZz''@;'; put 'put ''ZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoQWMpLHR0KEMwKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7aWYoMSZhJiZSbyhFamUsNSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5zZWFyY2hMaWJJbnB1dExpc3Q9aCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZVNjcm9sbChmKX0pfSxpbnB1''@;'; put 'put ''dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRl''@;'; put 'put ''ciJ9LGZlYXR1cmVzOlt2YV0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2Vh''@;'; put 'put ''cmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJz''@;'; put 'put ''ZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRl''@;'; put 'put ''ZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIl0sWyJsaWJUcmVlTm9kZSIsIiJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xy''@;'; put 'put ''RXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJu''@;'; put 'put ''Z01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0''@;'; put 'put ''Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbNCwibmdJZiJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIs''@;'; put 'put ''ImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsi''@;'; put 'put ''LDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci10cmVlIiksUWUoMSxUamUsNiwzLCJjbHItdHJlZS1ub2RlIiwwKSxR''@;'; put 'put ''ZSgyLFlqZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkseWUoKSxRZSgzLFdqZSwzLDAsImRpdiIsMikpLDImYSYmKENlKDEpLFJlKCJuZ0lmIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyaWVzUGFnaW5nKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbeHMsWmksbmQsdGgsZGQsZzEsRHAsa2EsWnUsYzIsZjEsamIsVWIsemIsV2EsQnMsT3MsVTddLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Y2xyLXRy''@;'; put 'put ''ZWVbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOm5vbmV9Il19KSxjfSkoKTtjb25zdCAkamU9WyJyZXNpemVCb3giXSxxamU9WyJkcmFnSGFuZGxlQ29ybmVyIl07ZnVuY3Rpb24gS2plKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIsMzIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLGpjKCJUbyB1bmxvY2sg''@;'; put 'put ''bW9yZSB0aGVuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQ/InZpZXdib3giOiJ2aWV3Ym94ZXMiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBYamUo''@;'; put 'put ''YyxsKXsxJmMmJihtZSgwLCJkaXYiLDMzKSxxdCgxLCJjbHItc3Bpbm5lciIsMzQpLHllKCkpfWZ1bmN0aW9uIEpqZShjLGwpezEmYyYmKG1lKDAsInAiLDM1KSxOZSgxLCIgVmlld2JveCBvcGVuIGxpbWl0IHJlYWNoZWQgIikseWUoKSl9ZnVuY3Rpb24gUWplKGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPVZuKCk7bWUoMCwiZGMtdHJlZSIsMzYpLHh0KCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkNsaWNrKGgpKX0pKCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS50''@;'; put 'put ''YWJsZU9uQ2xpY2soaCkpfSkseWUoKX0yJmMmJlJlKCJsaWJyYXJ5TGlzdCIsVmUoKS5saWJyYXJpZXMpfWZ1bmN0aW9uIGV6ZShjLGwpezEmYyYmKG1lKDAsInAiLDM3KSxOZSgxLCIgUGljayB0YWJsZSBmcm9tIHRoZSBsaXN0IG9uIHRoZSBsZWZ0ICIpLHllKCkpfWZ1bmN0aW9uIHR6ZShj''@;'; put 'put ''LGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDQ1KX1mdW5jdGlvbiBuemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy5taW5pbWl6ZShmKSxq''@;'; put 'put ''dChfLnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCgxLCJjbHItaWNvbiIsMTUpLG1lKDIsInNwYW4iLDE0KSxOZSgzLCJNaW5pbWl6ZSB2aWV3Ym94IikseWUoKSgpfX1mdW5jdGlvbiByemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bihoKXtCdChhKTtjb25zdCBmPVZlKCkuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4gXy5yZXN0b3JlKGYpLGp0KF8uc3RvcFByb3BhZ2F0aW9uKGgpKX0pLHF0KDEsImNsci1pY29uIiwxNiksbWUoMiwic3BhbiIsMTQpLE5lKDMsIlJlc3RvcmUgdmlld2JveCIpLHllKCkoKX19ZnVuY3Rpb24g''@;'; put 'put ''aXplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzOCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnNlbGVjdFZpZXdib3goZikpfSksbWUoMSwiZGl2IiwzOSksTmUoMiksUWUoMyx0emUsMSwwLCJjbHIt''@;'; put 'put ''c3Bpbm5lciIsNDApLHllKCksbWUoNCwiZGl2IikoNSwiYSIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD1WZSgpO3JldHVybiBULnJlc2V0UG9zU2l6ZShfKSxqdChULnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCg2LCJjbHItaWNvbiIsNDIp''@;'; put 'put ''LG1lKDcsInNwYW4iLDE0KSxOZSg4LCJSZXNldCBwb3NpdGlvbiBhbmQgc2l6ZSIpLHllKCkoKSxRZSg5LG56ZSw0LDAsImEiLDQzKSxRZSgxMCxyemUsNCwwLCJhIiw0MyksbWUoMTEsImEiLDEyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0LFQ9VmUo''@;'; put 'put ''KTtyZXR1cm4gVC5jbG9zZShfKSxqdChULnN0b3BQcm9wYWdhdGlvbihoKSl9KSxxdCgxMiwiY2xyLWljb24iLDQ0KSxtZSgxMywic3BhbiIsMTQpLE5lKDE0LCJDbG9zZSB2aWV3Ym94IikseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO2RyKCJzZWxlY3Rl''@;'; put 'put ''ZCIsKG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94P251bGw6ZC5zZWxlY3RlZFZpZXdib3guaWQpPT09YS5pZCksQ2UoMiksYjAoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksQ2UoMiksZHIoImRpc2FibGVkIiww''@;'; put 'put ''PT09YS54JiYwPT09YS55KSxDZSg0KSxSZSgibmdJZiIsIWEubWluaW1pemVkKSxDZSgxKSxSZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlvbiBvemUoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksZ3Io''@;'; put 'put ''IiAiLGEsIiAiKX19ZnVuY3Rpb24gc3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiZGl2Iiw0OCkoMiwiYXBwLWF1dG9jb21wbGV0ZSIsNDksNTApLHh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj0kaSgzKSxfPVZlKCkubmdWYXI7cmV0''@;'; put 'put ''dXJuIGp0KFZlKCkub25Db2xzZWFyY2hDaGFuZ2UoZixoLF8uY29sSGVhZGVyc0hpZGRlbikpfSksUWUoNCxvemUsMiwxLCJvcHRpb24iLDUxKSx5ZSgpKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgyKSxSZSgiaW5wdXRJZCIsInZpZXdib3gtY29sdW1uLXNlYXJjaCIp''@;'; put 'put ''KCJlbWl0T25seVNlbGVjdGVkIiwhMCksQ2UoMiksUmUoIm5nRm9yT2YiLGEuY29sSGVhZGVyc0hpZGRlbil9fWZ1bmN0aW9uIGF6ZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU3KX1mdW5jdGlvbiBsemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsNTgp''@;'; put 'put ''LHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS5vbkNvbFJlbW92ZShoKSl9KSx5ZSgpfX1mdW5jdGlvbiBjemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDU0KSgxLCJzcGFuIiksTmUoMiksUWUoMyxhemUsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsNTUpLHllKCksUWUoNCxsemUsMSwwLCJjbHItaWNvbiIsNTYpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLm5nVmFyLGg9VmUoKTtGTSgiY29sLWJveCBjb2x1bW4tIixhLCIiKSxkcigiY3Vyc29yLWRlZmF1bHQtaSIsZC5oZWFkZXJQa3MuaW5jbHVk''@;'; put 'put ''ZXMoYSkpKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxSZSgiY2RrRHJhZ0RhdGEiLGEpKCJjZGtEcmFnRGlzYWJsZWQiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxDZSgyKSxqYygiICIsYSwiICIsIm51bSI9PT0obnVsbD09aC5zZWxlY3RlZFZp''@;'; put 'put ''ZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuJGRhdGFmb3JtYXRzLnZhcnNbYV0udHlwZSk/IihudW1lcmljKSI6IiIsIiAiKSxDZSgxKSxSZSgibmdJZiIsZC5oZWFkZXJQa3MuaW5j''@;'; put 'put ''bHVkZXMoYSkpLENlKDEpLFJlKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiB1emUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJwIiw1KSxOZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLHllKCksbWUo''@;'; put 'put ''MywiZGl2Iiw1MikseHQoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmNvbHVtbnNEcm9wKGgpKX0pLFFlKDQsY3plLDUsMTMsImRpdiIsNTMpLHllKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS5uZ1ZhcjtDZSgzKSxSZSgiY2RrRHJv''@;'; put 'put ''cExpc3REYXRhIixhLmNvbEhlYWRlcnNWaXNpYmxlKSxDZSgxKSxSZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGR6ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDYpLFFlKDEsc3plLDUsMywibmctY29udGFpbmVyIiw0NyksUWUoMix1emUsNSwyLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDQ3KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtDZSgxKSxSZSgibmdJZiIsYS5jb2xIZWFkZXJzSGlkZGVuKSxDZSgxKSxSZSgibmdJZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGh6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1p''@;'; put 'put ''Y29uIiw4NSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkuY29sbGFwc2UoaCkpfSkseWUoKX19ZnVuY3Rpb24gZnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg2KSx4dCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5leHBhbmQoaCkpfSkseWUoKX19ZnVuY3Rpb24gcHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDg3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29u''@;'; put 'put ''c3QgaD1WZSgpLiRpbXBsaWNpdCxmPSRpKDE2KTtyZXR1cm4ganQoVmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLHllKCl9fWZ1bmN0aW9uIGd6ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDg4KSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBtemUoYyxsKXsxJmMmJihtZSgw''@;'; put 'put ''LCJzcGFuIiw4OSksTmUoMSwiTG9hZGluZy4uLiIpLHllKCkpfWZ1bmN0aW9uIHZ6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiw5MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj0kaSgxNik7cmV0dXJuIFZl''@;'; put 'put ''KCkucmVsb2FkVGFibGVEYXRhKGgpLGp0KGYudmFsdWU9IiIpfSkseWUoKX19ZnVuY3Rpb24gX3plKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw5NCkscXQoMSwiY2xyLXNwaW5uZXIiLDM0KSx5ZSgpKX1mdW5jdGlvbiBiemUoYyxsKXtpZigxJmMmJnF0KDAsImhvdC10YWJsZSIsOTUpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKS4kaW1wbGljaXQsaD1WZSgpO1JlKCJob3RJZCIsImhvdEluc3RhbmNlX3ZpZXdib3hfIitkLmlkKSgicmVhZE9ubHkiLCEwKSgibW9kaWZ5Q29sV2lkdGgiLGgubWF4V2lkdGhDaGVrZXIpKCJjb3B5UGFzdGUiLGgudmlld2JveFRhYmxlc1thXS5o''@;'; put 'put ''b3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbnRleHRNZW51KSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJs''@;'; put 'put ''ZS5kYXRhKSgiY29sSGVhZGVycyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29sdW1ucykoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUu''@;'; put 'put ''ZHJvcGRvd25NZW51KSgiaGVpZ2h0IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuaGVpZ2h0KSgiY2VsbHMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVz''@;'; put 'put ''aXplIiwhMCkoImxpY2Vuc2VLZXkiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24geXplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw5MSksUWUoMSxfemUsMiwwLCJkaXYiLDkyKSxRZSgyLGJ6ZSwxLDE3LCJob3QtdGFibGUiLDkzKSx5ZSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVZlKCkuJGltcGxpY2l0O0h1KCJkaXNwbGF5IixkLmNvbGxhcHNlZD8ibm9uZSI6IiIpLENlKDEpLFJlKCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLENlKDEpLFJlKCJuZ0lmIixhPi0xKX19Y29uc3Qgd3plPWZ1bmN0aW9uKGMsbCl7cmV0dXJue3g6''@;'; put 'put ''Yyx5Omx9fTtmdW5jdGlvbiBDemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDU5LDYwKSx4dCgibW91c2Vkb3duIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmZvY3VzVmlld2JveChmKSl9KSgiY2RrRHJhZ0VuZGVkIixm''@;'; put 'put ''dW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS52aWV3Ym94RHJhZ0VuZGVkKGgsXykpfSksbWUoMiwiZGl2Iiw2MSkoMywic3BhbiIsNjIpLE5lKDQpLHllKCksbWUoNSwiZGl2Iiw2MyksUWUoNixoemUsMSwwLCJjbHItaWNvbiIsNjQpLFFlKDcsZnpl''@;'; put 'put ''LDEsMCwiY2xyLWljb24iLDY1KSxtZSg4LCJjbHItaWNvbiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5taW5pbWl6ZShmKSl9KSx5ZSgpLG1lKDksImNsci1pY29uIiw2NykseHQoImNsaWNrIixmdW5jdGlvbigpe2Nv''@;'; put 'put ''bnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmNsb3NlKGYpKX0pLHllKCkoKSgpLG1lKDEwLCJzcGFuIiw2OCw2OSkseHQoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQsVD0kaSgxMSksVz0kaSgxKTtyZXR1cm4ganQoVmUoKS5k''@;'; put 'put ''cmFnTW92ZShULFcsXyxoKSl9KSx5ZSgpLG1lKDEyLCJmb3JtIiw3MCkoMTMsImRpdiIsNzEpKDE0LCJkaXYiLDcyKSgxNSwiaW5wdXQiLDczLDc0KSx4dCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz0kaSgxNik7cmV0dXJuIGp0KFZlKCkuc2Vh''@;'; put 'put ''cmNoVGFibGUoXyxmKSl9KSx5ZSgpLFFlKDE3LHB6ZSwxLDAsImNsci1pY29uIiw3NSksUWUoMTgsZ3plLDIsMCwic3BhbiIsNzYpLHllKCksbWUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5wdXQiLDc3KSx4dCgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5zZWFyY2hOdW1lcmljPWgpfSkseWUoKSxtZSgyMiwibGFiZWwiKSxOZSgyMywiTnVtZXJpYyIpLHllKCkoKSgpKCksbWUoMjQsImRpdiIsMzkpLFFlKDI1LG16ZSwyLDAsInNwYW4iLDc4KSxRZSgyNix2emUs''@;'; put 'put ''MSwwLCJjbHItaWNvbiIsNzkpLG1lKDI3LCJhIiw4MCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0LF89JGkoMTYpO3JldHVybiBWZSgpLm9wZW5GaWx0ZXIoZiksanQoXy52YWx1ZT0iIil9KSxxdCgyOCwiY2xyLWljb24iLDgxKSxtZSgyOSwic3BhbiIs''@;'; put 'put ''ODIpLE5lKDMwKSx5ZSgpKCksbWUoMzEsImNsci1pY29uIiw4MykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLm9wZW5UYWJsZUVkaXQoZikpfSkseWUoKSgpKCksUWUoMzIseXplLDMsNCwiZGl2Iiw4NCkseWUoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO0h1KCJkaXNwbGF5IixhLm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdodCwicHgiKSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIikoImJveC1zaGFkb3ciLGEu''@;'; put 'put ''Y29sbGFwc2VkPyJub25lIjoiIiksZHIoImZvY3VzZWQiLGEuZm9jdXNlZCksUmUoImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIixRMigzNCx3emUsYS54LGEueSkpKCJpZCIsInZpZXdib3hfIithLmlkKSxDZSg0KSxiMCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIp''@;'; put 'put ''LENlKDIpLFJlKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLENlKDEpLFJlKCJuZ0lmIixhLmNvbGxhcHNlZCksQ2UoMyksUmUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxDZSgyKSxIdSgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxDZSgzKSxSZSgidHlwZSIsYS5zZWFyY2hO''@;'; put 'put ''dW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksQ2UoMiksUmUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLENlKDMpLFJlKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLENlKDQpLFJlKCJuZ0lmIixhLmxvYWRpbmdEYXRhKSxDZSgxKSxS''@;'; put 'put ''ZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLENlKDIpLGRyKCJmaWx0ZXItYWN0aXZlIiwiMCIhPT1hLmZpbHRlcl9wayksQ2UoMiksb3IoYS5maWx0ZXJUZXh0KSxDZSgxKSxkcigiZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksQ2UoMSksUmUoIm5nVmFyIixkLmdldFZpZXdib3hU''@;'; put 'put ''YWJsZUluZGV4KGEpKX19ZnVuY3Rpb24gU3plKGMsbCl7aWYoMSZjJiZxdCgwLCJhcHAtcXVlcnkiLDk2LDk3KSwyJmMpe2NvbnN0IGE9VmUoKTtSZSgidmlld2JveElkIixudWxsPT1hLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQpfX1jb25zdCBNemU9ZnVu''@;'; put 'put ''Y3Rpb24oYyxsLGEpe3JldHVybntjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX19O2xldCB4c2U9KCgpPT57Y2xhc3MgY3tnZXQgdmlld2JveE1vZGFsKCl7cmV0dXJuIHRoaXMuX3ZpZXdib3hNb2RhbH1zZXQgdmlld2JveE1vZGFsKGEpe2lmKCEx''@;'; put 'put ''PT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveCYmYSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJWaWV3Ym94ZXMiKSx2b2lkIHRoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoITEpO3RoaXMuX3ZpZXdib3hNb2RhbD1hLGEmJnRoaXMudW5z''@;'; put 'put ''ZXRTZWxlY3RlZFZpZXdib3goKX1jb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCxXLGllLGdlLHdlKXt0aGlzLm5nWm9uZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPV8sdGhpcy5sb2dnZXJT''@;'; put 'put ''ZXJ2aWNlPVQsdGhpcy5oZWxwZXJTZXJ2aWNlPVcsdGhpcy5yb3V0ZXI9aWUsdGhpcy5hY3RpdmF0ZWRSb3V0ZT1nZSx0aGlzLmNkZj13ZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IEVyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVz''@;'; put 'put ''TG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFi''@;'; put 'put ''bGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5''@;'; put 'put ''X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFm''@;'; put 'put ''dGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRhYmxl''@;'; put 'put ''UmVnaXN0ZXJlcj1uZXcgQWd9bmdPbkluaXQoKXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNM''@;'; put 'put ''b2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkp''@;'; put 'put ''Oih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGltaXRS''@;'; put 'put ''ZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxp''@;'; put 'put ''YnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5s''@;'; put 'put ''aWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0QWxs''@;'; put 'put ''SGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0pKCl9''@;'; put 'put ''bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFibGVz''@;'; put 'put ''PWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdUYWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7''@;'; put 'put ''cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57bGV0IFQ9aC52aWV3Ym94VGFibGVzLmZpbmQoVz0+Vy52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKFc9PntUJiYoVC5ob3RUYWJsZS5kYXRhPVcu''@;'; put 'put ''dmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgoKT0+e18oKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLF8pPT57bGV0IFQ9ITEsVz1oLnZpZXdib3hUYWJsZXMuZmluZChpZT0+aWUudmlld2JveElk''@;'; put 'put ''PT09ZC5pZCk7VyYmKCIwIj09PWQuZmlsdGVyX3BrfHwhZC5maWx0ZXJfcGspJiZmKCksaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGEoYSxwYXJzZUludChkLmZpbHRlcl9wa3x8IjAiKSkudGhlbihpZT0+e1c/VD0hMDpXPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhv''@;'; put 'put ''dFRhYmxlOnp4KGguaG90VGFibGVEZWZhdWx0KX0sVy5ob3RUYWJsZS5kYXRhPWllLnZpZXdkYXRhLFcuaG90VGFibGUuJGRhdGFmb3JtYXRzPWllLiR2aWV3ZGF0YSxXLmhvdFRhYmxlLmNvbHM9aWUuY29scyx6eihXLmhvdFRhYmxlLmNvbHMsW10saWUuJHZpZXdkYXRhKTtsZXQgZ2U9W10s''@;'; put 'put ''d2U9W107Zm9yKGxldCBFZSBpbiBpZS52aWV3ZGF0YVswXSlFZSYmd2UucHVzaChFZSk7Zm9yKGxldCBFZT0wO0VlPHdlLmxlbmd0aDtFZSsrKWdlLnB1c2goe2RhdGE6d2VbRWVdfSk7Vy5ob3RUYWJsZS5oZWFkZXJQa3M9engoaWUuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIp''@;'; put 'put ''KSxXLmhvdFRhYmxlLmFsbENvbEhlYWRlcnM9d2UuZmlsdGVyKEVlPT4hVy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoRWUpKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW49engoVy5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPXdl''@;'; put 'put ''LmZpbHRlcihFZT0+Vy5ob3RUYWJsZS5oZWFkZXJQa3MuaW5jbHVkZXMoRWUpKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnM9d2UsVy5ob3RUYWJsZS5jb2x1bW5zPWdlLGQuY29sdW1ucyYmZC5jb2x1bW5zLmxlbmd0aD4wPyhXLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmU9ZC5jb2x1bW5zLGQu''@;'; put 'put ''Y29sdW1ucz8ubWFwKChFZSxaZSk9Pntjb25zdCBvdD13ZVtFZV0sZXQ9Vy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLmluZGV4T2Yob3QpO2V0Pi0xJiYoVy5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnNwbGljZShldCwxKSxXLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlW1plXT1v''@;'; put 'put ''dCl9KSk6Vy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5wdXNoKC4uLlcuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UoMCwxMCkpLFcuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGU9Vy5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5maWx0ZXIoRWU9PkVlKSxUfHxoLnZp''@;'; put 'put ''ZXdib3hUYWJsZXMucHVzaChXKSxkLnF1ZXJ5PWguaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoaWUucXVlcnkpLGQuZmlsdGVyVGV4dD1pZS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsc2V0VGltZW91dCgoKT0+e2gudXBkYXRlSG90Q29sdW1ucyhXLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRk''@;'; put 'put ''ZW58fFtdLGQuaWQpO2NvbnN0IEVlPWguZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQuaWQpO0VlPy51cGRhdGVTZXR0aW5ncyh7bWFudWFsQ29sdW1uTW92ZTpXLmhvdFRhYmxlLm1hbnVhbENvbHVtbk1vdmUsYWZ0ZXJHZXRDb2xIZWFkZXI6KFplLG90KT0+e2NvbnN0IGV0PUVlPy5jb2xUb1By''@;'; put 'put ''b3AoWmUpO2V0JiZXLmhvdFRhYmxlLmhlYWRlclBrcy5pbmRleE9mKGV0KT4tMSYmb3QuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIil9fSksRWU/LnJlbmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSksZigpfSkuY2F0Y2go''@;'; put 'put ''aWU9PntoLmxvZ2dlclNlcnZpY2UuZXJyb3IoaWUpLF8oKX0pfSl9KSgpfXJlTG9hZFZpZXdib3h0YWJsZXMoYSl7YS5tYXAoZD0+e2NvbnN0IGg9YCR7ZC5saWJyYXJ5fS4ke2QudGFibGV9YDtkLmxvYWRpbmdEYXRhPSEwLHRoaXMubG9hZERhdGEoaCxkKS50aGVuKCgpPT57ZC5sb2FkaW5n''@;'; put 'put ''RGF0YT0hMX0pfSl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9Z2V0Vmlld2JveFRhYmxlSW5kZXgoYSl7cmV0dXJuIHRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoaD0+aC52aWV3Ym94SWQ9PT1hLmlkKX1yZXNpemUoYSxkKXtjb25zdCBoPWEuZ2V0Qm91bmRp''@;'; put 'put ''bmdDbGllbnRSZWN0KCksZj1kLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLF89aC5sZWZ0LWYubGVmdCtoLndpZHRoLFQ9aC50b3AtZi50b3AraC5oZWlnaHQ7cmV0dXJuIGQuc3R5bGUud2lkdGg9XysicHgiLGQuc3R5bGUuaGVpZ2h0PVQrInB4Iix0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9y''@;'; put 'put ''bSgpLHRoaXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMWUzLCgpPT57dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSkse3dpZHRoOl8saGVpZ2h0OlR9fWRyYWdNb3ZlKGEsZCxoLGYpe3RoaXMubmdab25lLnJ1bk91''@;'; put 'put ''dHNpZGVBbmd1bGFyKCgpPT57Y29uc3QgXz10aGlzLnJlc2l6ZShhLGQpO2gud2lkdGg9Xy53aWR0aCxoLmhlaWdodD1fLmhlaWdodH0pfXNldEFsbEhhbmRsZVRyYW5zZm9ybSgpe3RoaXMucmVzaXplQm94UXVlcnkuZm9yRWFjaChhPT57Y29uc3QgZD1hLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91''@;'; put 'put ''bmRpbmdDbGllbnRSZWN0KCksaD1gaGFuZGxlXyR7YS5uYXRpdmVFbGVtZW50LmlkfWAsZj10aGlzLmRyYWdIYW5kbGVDb3JuZXJRdWVyeS5maW5kKChfLFQpPT5fLm5hdGl2ZUVsZW1lbnQuaWQ9PT1oKTt0aGlzLnNldEhhbmRsZVRyYW5zZm9ybShmPy5uYXRpdmVFbGVtZW50LGQsImJvdGgi''@;'; put 'put ''KX0pfXNldEhhbmRsZVRyYW5zZm9ybShhLGQsaCl7Y29uc3QgZj1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBfPWQud2lkdGgtZi53aWR0aCxUPWQuaGVpZ2h0LWYuaGVpZ2h0O18rPTUsVCs9NSwieCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke199cHgsIDAp''@;'; put 'put ''YCksInkiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoMCwgJHtUfXB4KWApLCJib3RoIj09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKCR7X31weCwgJHtUfXB4KWApfWZvY3VzVmlld2JveChhKXt0aGlzLnZpZXdib3hlcy5tYXAoZD0+e2QuZm9jdXNlZD0h''@;'; put 'put ''MX0pLGEuZm9jdXNlZD0hMH12aWV3Ym94RHJhZ0VuZGVkKGEsZCl7bGV0IGY9YS5zb3VyY2UuZ2V0Um9vdEVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLng9Zi5sZWZ0LGQueT1mLnRvcCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c25hcFRvR3JpZCgpe2NvbnN0IGE9d2luZG93''@;'; put 'put ''LmlubmVyV2lkdGgsZD13aW5kb3cuaW5uZXJIZWlnaHQsVD1NYXRoLmNlaWwodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLFc9TWF0aC5mbG9vcih0aGlzLnZpZXdib3hlcy5sZW5ndGgvMiksd2U9KGEtNSooVCsxKSkvVCxFZT0oYS01KihXKzEpKS9XO2xldCBvdD0wLHl0PShkLTI1MC02MCkv''@;'; put 'put ''MixrdD0wLFN0PTA7Zm9yKGxldCBRdD0wO1F0PHRoaXMudmlld2JveGVzLmxlbmd0aDtRdCsrKXtsZXQgcm49dGhpcy52aWV3Ym94ZXNbUXRdLHZuPSEoUXQ+VC0xKTtjb25zdCBObj12bj93ZTpFZTshdm4mJjA9PT1TdCYmKGt0PTAsU3QrKyxvdD0wKSxybi54PTUrb3Qra3QqKE5uKzUpLHJu''@;'; put 'put ''Lnk9MjUwK1N0Kih5dCs1KSxybi53aWR0aD1Obixybi5oZWlnaHQ9eXQsa3QrK310aGlzLnZpZXdib3hDaGFuZ2VkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KX1taW5pbWl6ZUFsbCgpe3RoaXMudmlld2JveGVzLmZvckVhY2goYT0+e2EubWluaW1p''@;'; put 'put ''emVkPSEwfSksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXJlc3RvcmVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMX0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXNldFBvc1NpemUoYSl7YS54PXdpbmRvdy5pbm5lcldpZHRoLXRoaXMuZGVmYXVsdENvbmZp''@;'; put 'put ''Zy53aWR0aCxhLnk9dGhpcy5kZWZhdWx0Q29uZmlnLnksYS53aWR0aD10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS5oZWlnaHQ9dGhpcy5kZWZhdWx0Q29uZmlnLmhlaWdodCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9bWluaW1pemUoYSl7YS5taW5pbWl6ZWQ9ITAsdGhpcy52aWV3Ym94Q2hh''@;'; put 'put ''bmdlZCgpfXJlc3RvcmUoYSl7YS5taW5pbWl6ZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNvbGxhcHNlKGEpe2EuY29sbGFwc2VkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1leHBhbmQoYSl7YS5jb2xsYXBzZWQ9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNsb3NlKGEpe2NvbnN0''@;'; put 'put ''IGQ9dGhpcy52aWV3Ym94ZXMuZmluZEluZGV4KGY9PmYuaWQ9PT1hLmlkKSxoPXRoaXMudmlld2JveFRhYmxlcy5maW5kSW5kZXgoZj0+Zi52aWV3Ym94SWQ9PT1hLmlkKTtkPi0xJiZ0aGlzLnZpZXdib3hlcy5zcGxpY2UoZCwxKSxoPi0xJiZ0aGlzLnZpZXdib3hUYWJsZXMuc3BsaWNlKGgs''@;'; put 'put ''MSksdGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkPT09YS5pZCYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpLEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFBPKSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9c2VsZWN0Vmlld2JveChhKXt2b2lkIDA9PT10''@;'; put 'put ''aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlJiZ2b2lkIDA9PT10aGlzLnNlbGVjdGVkVmlld2JveD90aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpOmEuaWQ9PT10aGlzLnNlbGVjdGVkVmlld2JveD8uaWQ/dGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpOnRoaXMucmVzZXRTZWxlY3RlZFZp''@;'; put 'put ''ZXdib3goYSl9Y29sdW1uc0Ryb3AoYSl7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbiYmKGEucHJldmlvdXNDb250YWluZXI9PT1hLmNvbnRhaW5lcj9jc2UoYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgsYS5jdXJyZW50SW5kZXgp''@;'; put 'put ''OmZ1bmN0aW9uIGdCZShjLGwsYSxkKXtjb25zdCBoPWF3KGEsYy5sZW5ndGgtMSksZj1hdyhkLGwubGVuZ3RoKTtjLmxlbmd0aCYmbC5zcGxpY2UoZiwwLGMuc3BsaWNlKGgsMSlbMF0pfShhLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsYS5jb250YWluZXIuZGF0YSxhLnByZXZpb3VzSW5kZXgs''@;'; put 'put ''YS5jdXJyZW50SW5kZXgpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUmJiJvYmplY3QiPT10eXBlb2YgdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzKSYmdGhpcy51cGRhdGVDb2x1bW5PcmRlckhvdChhLml0ZW0uZGF0YSxhLmN1cnJlbnRJ''@;'; put 'put ''bmRleCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9b25Db2xzZWFyY2hDaGFuZ2UoYSxkLGgpe2NvbnN0IGY9aC5pbmRleE9mKGQpO2guc3BsaWNlKGYsMSksYS52YWx1ZT0iIix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZSYmKHRoaXMuc2VsZWN0ZWRW''@;'; put 'put ''aWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaChkKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51''@;'; put 'put ''cGRhdGVDb2x1bW5PcmRlckhvdChkLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLTEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKX1vbkNvbFJlbW92ZShhKXtpZih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxl''@;'; put 'put ''Py5ob3RUYWJsZSl7Y29uc3QgZD10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmluZGV4T2YoYSk7dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5zcGxpY2UoZCwxKSx0aGlzLnNlbGVjdGVkVmll''@;'; put 'put ''d2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4ucHVzaChhKSx0aGlzLnVwZGF0ZUhvdENvbHVtbnModGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbix0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCksdGhpcy51cGRh''@;'; put 'put ''dGVDb2x1bW5PcmRlckhvdChhLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUubGVuZ3RoLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKX19cmVzZXRTZWxlY3RlZFZpZXdib3goYSl7dGhpcy5zZWxlY3RlZFZpZXdib3g9YSx0''@;'; put 'put ''aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPXRoaXMudmlld2JveFRhYmxlcy5maW5kKGQ9PmQudmlld2JveElkPT09YS5pZCl9dW5zZXRTZWxlY3RlZFZpZXdib3goKXt0aGlzLnNlbGVjdGVkVmlld2JveD12b2lkIDAsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT12b2lkIDB9c3RvcFByb3Bh''@;'; put 'put ''Z2F0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9b3BlbkZpbHRlcihhKXt0aGlzLnNlbGVjdFZpZXdib3goYSk7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXNbdGhpcy5nZXRWaWV3Ym94VGFibGVJbmRleChhKV07dGhpcy5maWx0ZXJMaWJkcz1gJHthLmxpYnJhcnl9LiR7YS50YWJsZX1g''@;'; put 'put ''LHRoaXMuZmlsdGVyaW5nVmlld2JveD1hLHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmZpbHRlckxpYmRzLGQuaG90VGFibGUuY29scyl9b3BlblRhYmxlRWRpdChhKXtjb25zdCBkPWEu''@;'; put 'put ''bGlicmFyeSsiLiIrYS50YWJsZTtsZXQgaD1sb2NhdGlvbi5ocmVmLnNsaWNlKDAsbG9jYXRpb24uaHJlZi5pbmRleE9mKCIjIikpO2g9YCR7aH0jL2VkaXRvci8ke2R9YCx3aW5kb3cub3BlbihoLCJfYmxhbmsiKX1yZXNldEZpbHRlcigpe3RoaXMuZmlsdGVyaW5nVmlld2JveCYmKHRoaXMu''@;'; put 'put ''ZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9IjAiLHRoaXMucmVsb2FkVGFibGVEYXRhKHRoaXMuZmlsdGVyaW5nVmlld2JveCksdGhpcy5maWx0ZXI9ITEsdGhpcy52aWV3Ym94Q2hhbmdlZCgpLEduLnZpZXdib3hlc1t0aGlzLmZpbHRlcmluZ1ZpZXdib3guaWRdPXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUoUE8pKX1zZW5kQ2xhdXNlKCl7dGhpcy5maWx0ZXJMb2FkaW5nPSEwO2xldCBhPVtdLGQ9W107aWYodHlwZW9mIHRoaXMuY2xhdXNlcz4idSIpcmV0dXJuIHRoaXMubnVsbFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7e2xldCBoPXRoaXMu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9iajtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyl7Y29uc3QgXz1oW2ZdLmVsZW1lbnRzO2E9Xy5maWx0ZXIoZnVuY3Rpb24oVCl7cmV0dXJuIG51bGw9PT1ULnZhcmlhYmxlfSksYS5sZW5ndGgmJmQucHVzaChfKX19aWYoZC5sZW5ndGgpcmV0dXJuIHRoaXMubnVs''@;'; put 'put ''bFZhcmlhYmxlcz0hMCx2b2lkKHRoaXMuZmlsdGVyTG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PXRoaXMuY2xhdXNlcyYmdGhpcy5maWx0ZXJMaWJkcyl7Y29uc3QgaD17Z3JvdXBMb2dpYzp0aGlzLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O3RoaXMuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9iai5mb3JFYWNoKF89Pntjb25zdCBUPXtmaWx0ZXJDbGF1c2VzOltdfTtfLmVsZW1lbnRzLmZvckVhY2goVz0+e1QuZmlsdGVyQ2xhdXNlcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSksVC5jbGF1c2VMb2dpYz1fLmNsYXVzZUxvZ2ljLGguZmlsdGVyR3Jv''@;'; put 'put ''dXBzLnB1c2godGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShUKSl9KTtjb25zdCBmPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoaCk7dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KHRoaXMuZmlsdGVyTGliZHMsZikudGhlbihfPT57dGhpcy5m''@;'; put 'put ''aWx0ZXJpbmdWaWV3Ym94LmZpbHRlcl9waz1fLnJlc3VsdFswXS5GSUxURVJfUkssdGhpcy5sb2FkRGF0YSh0aGlzLmZpbHRlckxpYmRzLHRoaXMuZmlsdGVyaW5nVmlld2JveCkudGhlbigoKT0+e3RoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMX0pLHRoaXMudmlld2JveENo''@;'; put 'put ''YW5nZWQoKX0pLmNhdGNoKF89Pnt0aGlzLmZpbHRlckxvYWRpbmc9ITF9KX19Y2F0Y2h7dGhpcy5maWx0ZXJMb2FkaW5nPSExfX1zZWFyY2hUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLF89ZC5saWJy''@;'; put 'put ''YXJ5KyIuIitkLnRhYmxlLFQ9cGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIik7Y29uc3QgVz1oLnZpZXdib3hUYWJsZXMuZmluZChpZT0+aWUudmlld2JveElkPT09ZC5pZCk7VyYmKHlpZWxkIGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGYsZC5zZWFyY2hOdW1lcmljLF8sVCku''@;'; put 'put ''dGhlbihpZT0+e2llLnNhc3BhcmFtc3x8aWUudmlld0RhdGE/Vy5ob3RUYWJsZS5kYXRhPWllLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKGllPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKGllKX0pLGQuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShh''@;'; put 'put ''KXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EubGlicmFyeX0uJHthLnRhYmxlfWA7YS5sb2FkaW5nRGF0YT0hMCx5aWVsZCBkLnJlbG9hZERhdGEoaCxhKSxhLmxvYWRpbmdEYXRhPSExLGQuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIp''@;'; put 'put ''fSkoKX11cGRhdGVIb3RDb2x1bW5zKGEsZCl7dGhpcy51cGRhdGVIaWRkZW5Db2x1bW5zSG90KGEsZCksdGhpcy5zZXRDb2x1bW5PcmRlcihkKX11cGRhdGVDb2x1bW5PcmRlckhvdChhLGQsaCl7Y29uc3QgZj10aGlzLmdldFZpZXdib3hIb3RJbnN0YW5jZShoKTtpZihmKXtjb25zdCBfPWYu''@;'; put 'put ''cHJvcFRvQ29sKGEpO2YuZ2V0UGx1Z2luKCJtYW51YWxDb2x1bW5Nb3ZlIikubW92ZUNvbHVtbihfLGQpLGYucmVuZGVyKCksdGhpcy5zZXRDb2x1bW5PcmRlcihoKX19dGFibGVFZGl0RXhpc3RzKGEpe2NvbnN0IGQ9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsaD1hLmxpYnJhcnk7cmV0dXJu''@;'; put 'put ''ISFkW2hdJiZkW2hdLmluY2x1ZGVzKGEudGFibGUpfXNldENvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy52aWV3Ym94ZXMuZmluZChoPT5oLmlkPT09YSk7aWYoZCl7Y29uc3QgaD10aGlzLmNyZWF0ZUNvbHVtbk9yZGVyKGEpO2QuY29sdW1ucz1oLmxlbmd0aD4wP2g6ZC5jb2x1bW5zfXRo''@;'; put 'put ''aXMudmlld2JveENoYW5nZWQoKX1jcmVhdGVDb2x1bW5PcmRlcihhKXtjb25zdCBkPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGEpO2lmKCFkKXJldHVybltdO2NvbnN0IGg9ZC5nZXRDb2xIZWFkZXIoKSxmPXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRl''@;'; put 'put ''cnM7aWYoIWYpcmV0dXJuW107Y29uc3QgXz10aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlPy5ob3RUYWJsZT8uY29sSGVhZGVyc1Zpc2libGUubGVuZ3RofHw1LFQ9W107cmV0dXJuIGgubWFwKChXLGllKT0+e2lmKGllPF8pe2NvbnN0IGdlPWYuaW5kZXhPZihXKTtnZT4tMSYmVC5wdXNoKGdl''@;'; put 'put ''KX19KSxUfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAoXz0+aC5wcm9wVG9Db2woXykpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRl''@;'; put 'put ''cigpfX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xldCBhO2NvbnN0IGQ9dGhpcy5lbmNvZGVVcmxEYXRhKHRoaXMu''@;'; put 'put ''dmlld2JveGVzKTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0ZXJDYWNoZSgpfXByZXBhcmVGaWx0ZXJDYWNoZSgpe2Zvcihs''@;'; put 'put ''ZXQgYSBvZiB0aGlzLnZpZXdib3hlcylpZihHbi52aWV3Ym94ZXNbYS5pZF18fChHbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShQTykpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZj0+Zi52''@;'; put 'put ''aWV3Ym94SWQ9PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7R24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1hLnF1ZXJ5LEduLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVH''@;'; put 'put ''bG9iYWxGaWx0ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4gYS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lkdGh9LSR7aC5oZWlnaHR9LSR7aC54fS0ke2gueX0tJHtoLmNv''@;'; put 'put ''bGxhcHNlZD8xOjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMubGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihkKz0iOyIpfSksZH1kZWNvZGVVcmxEYXRhKGEpe2xldCBoPVtd''@;'; put 'put ''O3JldHVybiBhLnNwbGl0KCI7IikubWFwKF89Pntjb25zdCBUPV8uc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KFRbMF0pLGxpYnJhcnk6VFsxXSx0YWJsZTpUWzJdLHdpZHRoOnBhcnNlSW50KFRbM10pLGhlaWdodDpwYXJzZUludChUWzRdKSx4OnBhcnNlSW50KFRbNV0pLHk6cGFy''@;'; put 'put ''c2VJbnQoVFs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoVFs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoVFs4XSksY29sdW1uczpUWzEwXT8uc3BsaXQoIiwiKS5tYXAoVz0+cGFyc2VJbnQoVykpfHxbXSxmaWx0ZXJfcGs6VFs5XX0pfSksaH1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5Py51''@;'; put 'put ''bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChObyksdHQoQzApLHR0KG9hKSx0dCh2bCksdHQoYmQpLHR0KHcwKSx0dChBYyksdHQoRHMpLHR0KFdsKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKFJvKCRqZSw1KSxSbyhxamUsNSkpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQucmVzaXplQm94UXVlcnk9aCksc2koaD1haSgpKSYmKGQuZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5PWgpfX0saW5w''@;'; put 'put ''dXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siYXBwRHJhZ05kcm9wIiwiIiwxLCJyb290LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMs''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbImNsYXNzIiwibGljZW5jZS1ub3RpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCJdLFsxLCJhZGQtbmV3Iiwi''@;'; put 'put ''ZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsIm10LTAtaSJdLFsxLCJ3LTEwMCJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm0tMCB2aWV3Ym94LWxpbWl0LW5vdGljZSIsNCwibmdJZiJdLFszLCJsaWJyYXJ5TGlzdCIsImxp''@;'; put 'put ''YnJhcnlPbkNsaWNrRW1pdHRlciIsInRhYmxlT25DbGlja0VtaXR0ZXIiLDQsIm5nSWYiXSxbMSwiY3VycmVudGx5LW9wZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29s''@;'; put 'put ''dGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC0zIiwzLCJjbGljayJdLFsic2hhcGUiLCJncmlkLXZpZXciLCJzaXplIiwiMTkiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWyJzaGFwZSIsIm1pbnVzIiwic2l6ZSIsIjE5Il0sWyJzaGFwZSIsIndpbmRvdy1yZXN0''@;'; put 'put ''b3JlIiwic2l6ZSIsIjE5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvcGVuLXZpZXdib3ggZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0''@;'; put 'put ''LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsIm10LTEwIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIiw0LCJu''@;'; put 'put ''Z1ZhciJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ2aWV3Ym94ZXMtY29udGFpbmVyIl0sWyJjbGFzcyIsInZpZXdib3giLCJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRh''@;'; put 'put ''aW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDMsImZvY3VzZWQiLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJwb2ludGVyLWV2ZW50cyIsImJveC1zaGFkb3ciLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIiwibW91c2Vkb3duIiwiY2RrRHJhZ0VuZGVkIiw0LCJu''@;'; put 'put ''Z0ZvciIsIm5nRm9yT2YiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3Jh''@;'; put 'put ''eSJdLFsxLCJtb2RhbC1ib2R5Il0sWzMsInZpZXdib3hJZCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJM''@;'; put 'put ''b2FkaW5nIiwiY2xpY2siXSxbMSwibGljZW5jZS1ub3RpY2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwibS0wIiwidmlld2JveC1saW1pdC1ub3RpY2UiXSxbMywibGlicmFyeUxpc3QiLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0''@;'; put 'put ''YWJsZU9uQ2xpY2tFbWl0dGVyIl0sWzEsInRleHQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwib3Blbi12aWV3Ym94IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFs''@;'; put 'put ''aWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLCJjbGFzcyIsIm1sLTMiLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsMywiY2xpY2siXSxbInNoYXBl''@;'; put 'put ''IiwiY3Vyc29yLW1vdmUiLCJzaXplIiwiMTMiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLCJjbGFzcyIsInRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLWJvdHRvbS1sZWZ0IG1sLTMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwic2l6''@;'; put 'put ''ZSIsIjE5Il0sWyJjbHJTbWFsbCIsIiIsMSwibWwtMyJdLFsiY2RrRHJvcExpc3RHcm91cCIsIiIsMSwiY29uZmlndXJhdGlvbi13cmFwcGVyIl0sWzQsIm5nSWYiXSxbMSwiY29scy1zZWFyY2giXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiYXV0b2ZvY3VzIiwiIiwi''@;'; put 'put ''cGxhY2Vob2xkZXIiLCJTZWFyY2ggY29sdW1ucyIsInRhYmluZGV4IiwiMCIsMywiaW5wdXRJZCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJ2YWx1ZUNoYW5nZSJdLFsiaW5wdXQiLCIiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcm9wTGlzdCIsIiIsMSwiY29scy1saXN0IiwzLCJjZGtE''@;'; put 'put ''cm9wTGlzdERhdGEiLCJjZGtEcm9wTGlzdERyb3BwZWQiXSxbImNka0RyYWciLCIiLDMsImNsYXNzIiwiY3Vyc29yLWRlZmF1bHQtaSIsInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNka0RyYWci''@;'; put 'put ''LCIiLDMsImNka0RyYWdEYXRhIiwiY2RrRHJhZ0Rpc2FibGVkIl0sWyJzaGFwZSIsImtleSIsNCwibmdJZiJdLFsic2hhcGUiLCJ0cmFzaCIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImtleSJdLFsic2hhcGUiLCJ0cmFzaCIsMSwiY3Vy''@;'; put 'put ''c29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJjZGtEcmFnQm91bmRhcnkiLCIudmlld2JveGVzLWNvbnRhaW5lciIsImNka0RyYWciLCIiLCJ0YWJpbmRleCIsIjAiLDEsInZpZXdib3giLDMsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQi''@;'; put 'put ''XSxbInJlc2l6ZUJveCIsIiJdLFsiY2RrRHJhZ0hhbmRsZSIsIiIsMSwiZHJhZy1oYW5kbGUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRhYmxlLXRpdGxlIl0sWzEsImFjdGlvbnMiXSxbInNoYXBlIiwiYW5n''@;'; put 'put ''bGUgdG9wIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJtaW51cyIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWyJjZGtEcmFnIiwiIiwxLCJkcmFnSGFuZGxlIiwiY29ybmVyIiwz''@;'; put 'put ''LCJpZCIsImNka0RyYWdNb3ZlZCJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsiY2xyRm9ybSIsIiIsMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWZsZXgtd3JhcCIsInRhYmxlLXNlYXJjaC13cmFwcGVyIl0sWzEs''@;'; put 'put ''ImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LXdyYXAiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsInR5cGUiLCJrZXl1cC5lbnRlciJdLFsic2VhcmNoRWwiLCIi''@;'; put 'put ''XSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItaW5saW5lIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJudW1lcmljX2NoZWNrIiwzLCJuZ01vZGVsIiwibmdNb2RlbENo''@;'; put 'put ''YW5nZSJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbInNoYXBlIiwicmVmcmVzaCIsImNsYXNzIiwiY2xpY2staWNvbiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29s''@;'; put 'put ''dGlwLWxnIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciIsMSwiY2xpY2staWNvbiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiLCJ0b29sdGlwLWxvbmciXSxbInNoYXBlIiwicGVuY2lsIiwxLCJjbGljay1pY29uIiwibWwtNSIsMywiY2xp''@;'; put 'put ''Y2siXSxbImNsYXNzIiwiY29udGVudCIsMywiZGlzcGxheSIsNCwibmdWYXIiXSxbInNoYXBlIiwiYW5nbGUgdG9wIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSBkb3duIiwzLCJjbGljayJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlu''@;'; put 'put ''bGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJjbGljay1pY29uIiwzLCJjbGljayJdLFsxLCJjb250ZW50Il0sWyJjbGFzcyIsImhvdC1zcGlubmVyIG15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImlkIiwiaG90VGFi''@;'; put 'put ''bGUiLCJzdHJldGNoSCIsImFsbCIsMywiaG90SWQiLCJyZWFkT25seSIsIm1vZGlmeUNvbFdpZHRoIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIs''@;'; put 'put ''ImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJsaWNlbnNlS2V5Iiw0LCJuZ0lmIl0sWzEsImhvdC1zcGlubmVyIiwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJpZCIsImhvdFRhYmxlIiwic3Ry''@;'; put 'put ''ZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJz''@;'; put 'put ''IiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSJdLFszLCJ2aWV3Ym94SWQiXSxbInF1ZXJ5RmlsdGVyIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4''@;'; put 'put ''dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5jbHJNb2RhbE9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiIFZpZXdib3hlcyAiKSxRZSgzLEtqZSwyLDIsInNwYW4iLDIpLHllKCksbWUoNCwiZGl2IiwzKSg1LCJkaXYiLDQpKDYsInAiLDUpLE5l''@;'; put 'put ''KDcsIkFkZCBuZXciKSx5ZSgpLHF0KDgsImhyIiw2KSxRZSg5LFhqZSwyLDAsImRpdiIsNyksUWUoMTAsSmplLDIsMCwicCIsOCksUWUoMTEsUWplLDEsMSwiZGMtdHJlZSIsOSkseWUoKSxtZSgxMiwiZGl2IiwxMCkoMTMsImRpdiIsMTEpKDE0LCJwIiw1KSxOZSgxNSwiQ3VycmVudGx5IG9w''@;'; put 'put ''ZW4iKSx5ZSgpLG1lKDE2LCJkaXYiKSgxNywiYSIsMTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zbmFwVG9HcmlkKCl9KSxxdCgxOCwiY2xyLWljb24iLDEzKSxtZSgxOSwic3BhbiIsMTQpLE5lKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIikseWUoKSgpLG1lKDIxLCJh''@;'; put 'put ''IiwxMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm1pbmltaXplQWxsKCl9KSxxdCgyMiwiY2xyLWljb24iLDE1KSxtZSgyMywic3BhbiIsMTQpLE5lKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVzIikseWUoKSgpLG1lKDI1LCJhIiwxMikseHQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBkLnJlc3RvcmVBbGwoKX0pLHF0KDI2LCJjbHItaWNvbiIsMTYpLG1lKDI3LCJzcGFuIiwxNCksTmUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLHllKCkoKSgpKCkscXQoMjksImhyIiksUWUoMzAsZXplLDIsMCwicCIsMTcpLFFlKDMxLGl6ZSwxNSwxMCwiZGl2IiwxOCks''@;'; put 'put ''bWUoMzIsImRpdiIsMTkpKDMzLCJwIiwyMCksTmUoMzQpLHllKCkoKSxxdCgzNSwiaHIiKSxRZSgzNixkemUsMywyLCJkaXYiLDIxKSx5ZSgpKCksbWUoMzcsImRpdiIsMjIpKDM4LCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQudmlld2JveE1vZGFsPSExfSks''@;'; put 'put ''TmUoMzksIiBPayAiKSx5ZSgpKCkoKSxtZSg0MCwiZGl2IiwyNCksUWUoNDEsQ3plLDMzLDM3LCJkaXYiLDI1KSx5ZSgpLG1lKDQyLCJjbHItbW9kYWwiLDI2KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5maWx0ZXI9Zn0pLG1lKDQzLCJoMyIsMjcpLE5l''@;'; put 'put ''KDQ0LCIgRmlsdGVyIGZvciB2aWV3Ym94IHRhYmxlOiAiKSxtZSg0NSwic3BhbiIpLE5lKDQ2KSx5ZSgpKCksbWUoNDcsImRpdiIsMjgpLFFlKDQ4LFN6ZSwyLDEsImFwcC1xdWVyeSIsMjkpLHllKCksbWUoNDksImRpdiIsMjIpKDUwLCJidXR0b24iLDMwKSx4dCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDUxLCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoNTIsImJ1dHRvbiIsMjMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITF9KSxOZSg1MywiIENhbmNlbCAiKSx5ZSgpLG1lKDU0LCJidXR0b24iLDMxKSx4dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoNTUsIiBPayAiKSx5ZSgpKCkoKSksMiZhJiYoUmUoImNsck1vZGFsT3BlbiIsZC52aWV3Ym94TW9kYWwpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksQ2UoMyksUmUoIm5nSWYi''@;'; put 'put ''LGQubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXQhPT1kLkluZmluaXR5KSxDZSg2KSxSZSgibmdJZiIsZC5saWJyYXJpZXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC52aWV3Ym94TGltaXRSZWFjaGVkKSxDZSgxKSxSZSgibmdJZiIsZC52aWV3Ym94TW9kYWwpLENlKDE5KSxS''@;'; put 'put ''ZSgibmdJZiIsZC52aWV3Ym94ZXMubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnZpZXdib3hlcyksQ2UoMyksZ3IoIiBDb25maWd1cmF0aW9uICgiLG51bGwhPWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUmJmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQ/IiMi''@;'; put 'put ''KyhudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpKyIgIisobnVsbD09ZC5zZWxlY3RlZFZpZXdib3hUYWJsZT9udWxsOmQuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveExpYkRhdGFzZXQpOiJzZWxlY3Qgdmlld2Jv''@;'; put 'put ''eCBmcm9tIGFib3ZlIiwiKSAiKSxDZSgyKSxSZSgibmdWYXIiLHlfKDE5LE16ZSxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1kLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6ZC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlk''@;'; put 'put ''ZGVuLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLG51bGw9PWQuc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWQu''@;'; put 'put ''c2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpkLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmhlYWRlclBrcykpLENlKDUpLFJlKCJuZ0Zvck9mIixkLnZpZXdib3hlcyksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5maWx0ZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIp''@;'; put 'put ''KCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNCksamMoIiAjIixudWxsPT1kLmZpbHRlcmluZ1ZpZXdib3g/bnVsbDpkLmZpbHRlcmluZ1ZpZXdib3guaWQsIiAiLGQuZmlsdGVyTGliZHMsIiAiKSxDZSgyKSxSZSgibmdJZiIsZC5maWx0ZXIpLENlKDYpLFJlKCJjbHJMb2FkaW5nIixkLmZp''@;'; put 'put ''bHRlckxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxrYSxvdSxzdSxadSxkaCxVcyxYSixEMCxEOCxUMCxmMSx1MixDcCxsMSxjMSxTMCxCcyx3cCxPcyxyMixjVSx4eSx2c2UscHNlLHdzZSxfc2UsU3NlLEdqZSxVNyxZYl0sc3R5bGVzOlsiLmxpY2VuY2Utbm90aWNlW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXXtmb250LXNpemU6MTRweDtkaXNwbGF5OmJsb2NrO29wYWNpdHk6LjZ9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVde3otaW5kZXg6MTMwMH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1ib2R5LXdyYXBw''@;'; put 'put ''ZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWNvbnRlbnR7aGVpZ2h0Ojgwdmh9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWZvb3Rlcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17cGFkZGluZzowfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtaGVpZ2h0OjEwMCU7aGVpZ2h0OjEwMCV9ZGMtdHJlZVtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bztmbGV4''@;'; put 'put ''OjF9LnRvb2x0aXAtbG9uZ1tfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hZGQtbmV3W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCU7cGFkZGluZy1yaWdodDo1cHh9LnZpZXdib3gtbGltaXQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi43''@;'; put 'put ''O2NvbG9yOiNlNzRjM2N9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCV9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3hbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6M3B4IDVweH0uY3Vy''@;'; put 'put ''cmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveC5zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDYwLDEzMywwLC4xODAzOTIxNTY5KX0uY3VycmVudGx5LW9wZW5bX25nY29udGVudC0lQ09NUCVdICAgLm9wZW4tdmlld2JveFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDojZThlOGU4fS52aWV3Ym94ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1''@;'; put 'put ''czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9LnZpZXdib3guZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMTAwO291dGxpbmU6bm9uZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFw''@;'; put 'put ''eCBzb2xpZCByZ2JhKDAsMCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOndoaXRlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZmxleDoxO292ZXJmbG93LXg6YXV0b30udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEw''@;'; put 'put ''MCU7bWluLWhlaWdodDoyMHB4O2JhY2tncm91bmQtY29sb3I6IzNjODUwMDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgNXB4O3BvaW50ZXItZXZlbnRzOmFsbH0udmlld2JveFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLnRhYmxlLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLWFsbH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDttaW4td2lkdGg6MzVweH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''Y2xyLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZy1oYW5kbGVbX25nY29udGVudC0lQ09NUCVdICAgLmFjdGlvbnNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdOmhvdmVye3RyYW5zZm9ybTpzY2FsZSgxLjMpfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xpY2staWNvbltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlLmNv''@;'; put 'put ''cm5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTVweDtoZWlnaHQ6MTVweDtjdXJzb3I6bndzZS1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUucmlnaHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjJweDtoZWlnaHQ6MTAwJTtjdXJzb3I6ZXct''@;'; put 'put ''cmVzaXplfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlLmJvdHRvbVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjJweDt3aWR0aDoxMDAlO2N1cnNvcjpucy1yZXNpemV9LmNvbHMtc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21hcmdpbi10''@;'; put 'put ''b3A6NXB4O2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwuMjc4NDMxMzcyNSk7Ym9yZGVyLXJhZGl1czozcHh9LmNvbHMtbGlzdFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOnNvbGlkIDFweCAjY2NjO21pbi1oZWlnaHQ6NjBweDtiYWNrZ3JvdW5kOndoaXRlO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1ib3R0b206c29saWQgMXB4ICNjY2M7Y29sb3I6IzAwMDAwMGRl''@;'; put 'put ''O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6bW92ZTtiYWNrZ3JvdW5kOndoaXRlO2ZvbnQtc2l6ZToxNHB4fS5jb2wtYm94LnNlYXJjaFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV06Zm9jdXN7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xMDE5NjA3ODQzKX0uY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuMTQxMTc2NDcwNil9LmNkay1kcmFnLXByZXZpZXdb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4ICMwMDAzLDAgOHB4IDEwcHggMXB4ICMwMDAwMDAyNCwwIDNweCAxNHB4IDJweCAjMDAwMDAwMWY7ei1pbmRleDoxMzAwIWltcG9ydGFudH0u''@;'; put 'put ''Y2RrLWRyYWctcGxhY2Vob2xkZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLWRyYWctYW5pbWF0aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''Omxhc3QtY2hpbGR7Ym9yZGVyOm5vbmV9LmNvbHMtbGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1Ymlj''@;'; put 'put ''LWJlemllcigwLDAsLjIsMSl9LmRpc2FibGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfS5maWx0ZXItYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDA3MmEzfWhvdC10YWJsZVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAgIC5maXJzdENvbHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxl''@;'; put 'put ''LCBob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNjkwMTk2MDc4NCl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg''@;'; put 'put ''LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOnJnYmEoNDgsMTA3LDAsLjQzMTM3MjU0OSl9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRv''@;'; put 'put ''bmx5Q2VsbHtvcGFjaXR5Oi41fSJdfSksY30pKCksRXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5maWxlT3Zlcj1uZXcgRXIsdGhpcy5maWxlRHJvcD1uZXcgRXIsdGhpcy5lbGVtZW50PWF9b25Ecm9wKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5k''@;'; put 'put ''YXRhVHJhbnNmZXI/LmZpbGVzLGg9W107aWYoZClmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyloLnB1c2goZFtmXSk7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShoKSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpLHRoaXMuZmlsZURyb3AuZW1pdChoKX1vbkRyYWdPdmVyKGEpe3RoaXMuX3By''@;'; put 'put ''ZXZlbnRBbmRTdG9wKGEpO2NvbnN0IGQ9YS5kYXRhVHJhbnNmZXI7aWYoZCl7aWYoLTE9PT1kLnR5cGVzLmluZGV4T2YoIkZpbGVzIikpcmV0dXJuO2QuZHJvcEVmZmVjdD0iY29weSJ9dGhpcy5maWxlT3Zlci5lbWl0KCEwKX1vbkRyYWdMZWF2ZShhKXt0aGlzLl9wcmV2ZW50QW5kU3RvcChh''@;'; put 'put ''KSx0aGlzLmZpbGVPdmVyLmVtaXQoITEpfV9wcmV2ZW50QW5kU3RvcChhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoTmkpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiZHJvcCIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Ecm9wKGYpfSkoImRyYWdvdmVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyYWdPdmVyKGYpfSkoImRyYWdsZWF2''@;'; put 'put ''ZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25EcmFnTGVhdmUoZil9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9fSksY30pKCksa3NlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhp''@;'; put 'put ''cy5maWxlU2VsZWN0ZWQ9bmV3IEVyLHRoaXMuZWxlbWVudD1hfWlzRW1wdHlBZnRlclNlbGVjdGlvbigpe3JldHVybiEhdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYXR0cmlidXRlcy5tdWx0aXBsZX1vbkNoYW5nZSgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZmls''@;'; put 'put ''ZXM7dGhpcy51cGxvYWRlcj8uYWRkVG9RdWV1ZShhKSx0aGlzLmZpbGVTZWxlY3RlZC5lbWl0KGEpLHRoaXMuaXNFbXB0eUFmdGVyU2VsZWN0aW9uKCkmJih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpKHR0KE5pKSl9LGMuXHUwMjc1ZGlyPUNyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcEZpbGVTZWxlY3QiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZ4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBkLm9uQ2hhbmdlKCl9KX0saW5wdXRzOnt1''@;'; put 'put ''cGxvYWRlcjoidXBsb2FkZXIifSxvdXRwdXRzOntmaWxlU2VsZWN0ZWQ6ImZpbGVTZWxlY3RlZCJ9fSksY30pKCk7ZnVuY3Rpb24geHplKGMsbCl7MSZjJiYobWUoMCwicCIsOCksTmUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSx5ZSgpKX1mdW5jdGlvbiBFemUoYyxsKXtpZigx''@;'; put 'put ''JmMmJihtZSgwLCJjbHItZGctcm93IikoMSwiY2xyLWRnLWNlbGwiKSxOZSgyKSx5ZSgpLG1lKDMsImNsci1kZy1jZWxsIiksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5OQU1FKSxDZSgyKSxvcihhLlZBTFVFKX19ZnVuY3Rpb24ga3plKGMsbCl7''@;'; put 'put ''aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IiwxMSkoMSwiY2xyLWRhdGFncmlkIikoMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDMsIk5hbWUiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iKSxOZSg1LCJWYWx1ZSIpLHllKCksUWUoNixFemUsNSwyLCJjbHItZGctcm93Iiw1KSx5ZSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSg2KSxSZSgibmdGb3JPZiIsYS5kc21ldGEpfX1mdW5jdGlvbiBBemUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiw5KSxOZSgyKSx5ZSgpLFFlKDMsa3plLDcsMSwiY2xyLXRhYi1jb250ZW50IiwxMCks''@;'; put 'put ''eWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtDZSgyKSxvcihhLmdyb3VwKSxDZSgxKSxSZSgiY2xySWZBY3RpdmUiLDA9PT1kKX19bGV0IEFzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcGVuPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMub3BlbkNo''@;'; put 'put ''YW5nZT1uZXcgRXIsdGhpcy5kc21ldGFHcm91cHBlZD1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmdGhpcy5wYXJzZURTTWV0YSgpfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFHcm91cHBlZD1bXTtmb3IobGV0IGEgb2Yg''@;'; put 'put ''dGhpcy5kc21ldGEpe2xldCBkPXRoaXMuZHNtZXRhR3JvdXBwZWQuZmluZEluZGV4KGg9PmguZ3JvdXA9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YUdyb3VwcGVkLnB1c2goe2dyb3VwOmEuT0RTX1RBQkxFLGRzbWV0YTpbXX0pLTEpLHRoaXMuZHNtZXRhR3JvdXBwZWRbZF0u''@;'; put 'put ''ZHNtZXRhLnB1c2goYSl9fW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNt''@;'; put 'put ''cD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W3ZhXSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMywiY2xyTW9k''@;'; put 'put ''YWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xyTGF5b3V0IiwidmVydGljYWwiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsclRh''@;'; put 'put ''YkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIsImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIs''@;'; put 'put ''InctMTAwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbk9wZW5DaGFuZ2UoZil9KSxtZSgxLCJoMyIsMSksTmUoMiwiRGF0YXNldCBNZXRhIikseWUoKSxtZSgz''@;'; put 'put ''LCJkaXYiLDIpLFFlKDQseHplLDIsMCwicCIsMyksbWUoNSwiY2xyLXRhYnMiLDQpLFFlKDYsQXplLDQsMiwiY2xyLXRhYiIsNSkseWUoKSgpLG1lKDcsImRpdiIsNikoOCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DbG9zZUNsaWNrKCl9KSxOZSg5LCIg''@;'; put 'put ''Q2xvc2UgIikseWUoKSgpKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQub3BlbikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxDZSg0KSxSZSgibmdJZiIsZC5kc21ldGFHcm91cHBlZC5sZW5ndGg8MSksQ2UoMiksUmUoIm5nRm9yT2YiLGQuZHNtZXRh''@;'; put 'put ''R3JvdXBwZWQpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxXOCxUcCx0ZyxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxvdSxzdSxFOCxMcCxPcCxkZyxScCxJcCxjZ10sc3R5bGVzOlsiLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXRhYnNbX25nY29udGVudC0lQ09NUCVde21h''@;'; put 'put ''eC1oZWlnaHQ6NzB2aH0ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmF1dG99Lm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgICAudGFiLWNvbnRlbnQgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6''@;'; put 'put ''MTAwJX0iXX0pLGN9KSgpO2Z1bmN0aW9uIFR6ZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksb3IoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpfX1mdW5jdGlvbiBEemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgw''@;'; put 'put ''LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmdlbmVyYXRlRWRpdFJlY29yZFVybCgpKX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO1JlKCJkaXNhYmxlZCIsYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nKSxD''@;'; put 'put ''ZSgxKSxncigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4uIjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gSXplKGMsbCl7aWYoMSZjJiYoQnIoMCks''@;'; put 'put ''UWUoMSxUemUsMiwxLCJzcGFuIiwxMSksUWUoMixEemUsMiwyLCJidXR0b24iLDEyKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKSxDZSgxKSxSZSgibmdJZiIsIShu''@;'; put 'put ''dWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKX19ZnVuY3Rpb24gTHplKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxNSkoMSwic3BhbiIsMTYpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gUnplKGMsbCl7MSZjJiZxdCgwLCJj''@;'; put 'put ''bHItaWNvbiIsMjkpfWZ1bmN0aW9uIE96ZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDMwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBQemUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gRnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUo''@;'; put 'put ''MCwiY2xyLWlucHV0LWNvbnRhaW5lciIsMzMpKDEsImlucHV0IiwzNCkseHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuaW5kZXg7cmV0dXJuIGp0KFZlKDIpLm9uUmVjb3JkSW5wdXRGb2N1cyhoLGYpKX0pKCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0''@;'; put 'put ''KGEpLGp0KFZlKDUpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdCxfPVZlKDIpO3JldHVybiBfLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpLGp0KF8uY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITAp''@;'; put 'put ''fSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMykuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKX0pLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMykuJGltcGxpY2l0LGQ9VmUoMik7ZHIoImludmFsaWQtZGF0''@;'; put 'put ''YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSxDZSgxKSxSZSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIEh6ZShjLGwpezEmYyYmamEoMCl9Y29uc3QgdVU9ZnVuY3Rpb24oYyxsKXtyZXR1cm57Y29sOmMsY29sSW5kZXg6''@;'; put 'put ''bH19O2Z1bmN0aW9uIE56ZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpLFFlKDEsSHplLDEsMCwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O1ZlKDIpO2NvbnN0IGY9JGkoMTYpO0NlKDEpLFJlKCJuZ1RlbXBsYXRl''@;'; put 'put ''T3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFEyKDIsdVUsZCxoKSl9fWNvbnN0IFZ6ZT1mdW5jdGlvbigpe3JldHVyblsibnVtZXJpYyIsdm9pZCAwXX0sVHNlPWZ1bmN0aW9uKCl7cmV0dXJuWyJhdXRvY29tcGxldGUiXX07ZnVuY3Rpb24gQnplKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''QnIoMCksUWUoMSxGemUsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzMiksUWUoMixOemUsMiw1LCJkaXYiLDIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLFZ6ZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJy''@;'; put 'put ''ZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShhLmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMoMyxUc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9ZC5j''@;'; put 'put ''dXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRpdG9yKSl9fWZ1bmN0aW9uIGp6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiKSgxLCJ0ZXh0YXJlYSIsMzYsMzcpLHh0KCJmb2N1c2luIixmdW5jdGlv''@;'; put 'put ''bihoKXtCdChhKTtjb25zdCBmPVZlKDMpLmluZGV4O3JldHVybiBqdChWZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7''@;'; put 'put ''Y29uc3QgZj1WZSgzKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDMpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikuY3VycmVudFJlY29yZFtmLmtleV09''@;'; put 'put ''aCl9KSxOZSgzLCIgICAgICAgICAgICAgICAgICAiKSx5ZSgpLG1lKDQsImNsci1jb250cm9sLWhlbHBlciIpLE5lKDUpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMiksZD1WZSgzKS4kaW1wbGljaXQsaD1WZSgyKTtsZXQgZixfLFQ7Q2UoMSksZHIoImludmFsaWQtZGF0YSIsaC5jdXJy''@;'; put 'put ''ZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmYudHlwZSksUmUoInJvd3MiLGQudmFsdWUubGVu''@;'; put 'put ''Z3RoPjgwPzY6MSkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pKCJtYXhMZW5ndGgiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KF89aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOl8ubGVuZ3RoKSxDZSg0KSxqYygi''@;'; put 'put ''IixhLnZhbHVlLmxlbmd0aCwiIC8gIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShUPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDpULmxlbmd0aCwiIil9fWZ1bmN0aW9uIHp6ZShjLGwpezEmYyYmamEoMCl9ZnVuY3Rpb24gVXpl''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksUWUoMSx6emUsMSwwLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7VmUoMik7Y29uc3QgZj0kaSgxNik7Q2UoMSksUmUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0Q29udGV4dCIsUTIoMix1VSxkLGgpKX19Y29uc3QgWnplPWZ1bmN0aW9uKCl7cmV0dXJuW3ZvaWQgMF19O2Z1bmN0aW9uIFl6ZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsanplLDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMiksUWUoMixVemUsMiw1LCJkaXYi''@;'; put 'put ''LDIpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtsZXQgaCxmO0NlKDEpLFJlKCJuZ0lmIiwkcygyLFp6ZSkuaW5jbHVkZXMobnVsbD09ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oaD1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShh''@;'; put 'put ''LmtleSkpP251bGw6aC5lZGl0b3IpKSxDZSgxKSxSZSgibmdJZiIsJHMoMyxUc2UpLmluY2x1ZGVzKG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGY9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmYuZWRpdG9yKSl9fWZ1bmN0aW9u''@;'; put 'put ''IFd6ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDM4KSgxLCJ0ZXh0YXJlYSIsMzkpLHh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlv''@;'; put 'put ''bihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5jdXJyZW50UmVj''@;'; put 'put ''b3JkW2Yua2V5XT1oKX0pLHllKCksbWUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksTmUoMywiSEg6bW06c3MiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpLiRpbXBsaWNpdCxkPVZlKDIpO2xldCBoO0NlKDEpLGRyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRD''@;'; put 'put ''b2xzLmluY2x1ZGVzKGEua2V5KSkoIm5vdC1jaGFyIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnR5cGUpLFJlKCJyb3dzIixhLnZhbHVlLmxlbmd0aD44MD82OjEpKCJuZ01v''@;'; put 'put ''ZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gR3plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IiwzOCkoMSwidGV4dGFyZWEiLDQwKSx4dCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgp''@;'; put 'put ''KX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgyKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4g''@;'; put 'put ''anQoVmUoMikuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSx5ZSgpLG1lKDIsImNsci1kYXRlLWNvbnRhaW5lciIsNDEpKDMsImlucHV0Iiw0MikseHQoImNsckRhdGVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5yZWNv''@;'; put 'put ''cmREYXRlQ2hhbmdlKGgsZi5rZXkpKX0pLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKS4kaW1wbGljaXQsZD1WZSgyKTtDZSgxKSxkcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLFJlKCJuZ01vZGVsIixkLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gJHplKGMsbCl7MSZjJiZqYSgwKX1mdW5jdGlvbiBxemUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLCR6ZSwxLDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtW''@;'; put 'put ''ZSgyKTtjb25zdCBmPSRpKDE2KTtDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixRMigyLHVVLGQsaCkpfX1mdW5jdGlvbiBLemUoYyxsKXtpZigxJmMmJihCcigwKSxtZSgxLCJkaXYiLDE4KSgyLCJkaXYiLDE5KSgzLCJwIiwyMCksTmUo''@;'; put 'put ''NCksUWUoNSxSemUsMSwwLCJjbHItaWNvbiIsMjEpLHllKCksbWUoNiwicCIsMjIpLE5lKDcpLHllKCkoKSxtZSg4LCJkaXYiLDIzKSxRZSg5LE96ZSwyLDAsInNwYW4iLDI0KSxRZSgxMCxQemUsMSwwLCJjbHItaWNvbiIsMjUpLFFlKDExLEJ6ZSwzLDQsIm5nLWNvbnRhaW5lciIsMjYpLFFl''@;'; put 'put ''KDEyLFl6ZSwzLDQsIm5nLWNvbnRhaW5lciIsMjYpLFFlKDEzLFd6ZSw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI3KSxRZSgxNCxHemUsNCwzLCJkaXYiLDI3KSxRZSgxNSxxemUsMiw1LCJkaXYiLDI2KSx5ZSgpKCkscXQoMTYsImhyIiwyOCksVXIoKSksMiZjKXtjb25zdCBhPVZl''@;'; put 'put ''KCksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXgsZj1WZSgyKTtsZXQgXyxUO0NlKDQpLGdyKCIgIixkLmtleSwiICIpLENlKDEpLFJlKCJuZ0lmIixmLmlzQ29sUGsoZC5rZXkpKSxDZSgyKSxncigiICIsbnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oXz1mLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6Xy5kZXNjLCIgIiksQ2UoMSksUmUoIm5nU3dpdGNoIixudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShUPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDpULnR5cGUpLENl''@;'; put 'put ''KDEpLFJlKCJuZ0lmIixmLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyhoKSksQ2UoMSksUmUoIm5nSWYiLGYuY3VycmVudFJlY29yZEVycm9ycy5pbmNsdWRlcyhoKSksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIix2b2lk''@;'; put 'put ''IDApLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJ0aW1lIiksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIFh6ZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsS3plLDE3LDExLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDIpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIkFjdGlvbiIhPT1hLmtleSYmIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLmtleSYmIm5vTGlua09wdGlvbiIhPT1hLmtleSl9fWZ1bmN0aW9uIEp6ZShjLGwpe2lmKDEm''@;'; put 'put ''YyYmKEJyKDApLFFlKDEsWHplLDIsMSwibmctY29udGFpbmVyIiwxNyksYmEoMiwia2V5dmFsdWUiKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdGb3JPZiIsTTUoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFja0J5IixhLnRyYWNr''@;'; put 'put ''QnlGbil9fWZ1bmN0aW9uIFF6ZShjLGwpezEmYyYmKG1lKDAsImNsci1hbGVydCIsNDMpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDQpLE5lKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSx5ZSgpKCkoKSksMiZjJiYoSHUoInZpc2liaWxpdHki''@;'; put 'put ''LFZlKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksUmUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIGVVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDUp''@;'; put 'put ''KDEsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxxdCgyLCJjbHItaWNvbiIsNDcpLHllKCksbWUoMywicCIpLE5lKDQsIiBDdXJyZW50IHJvdzogIiksbWUoNSwic3Ryb25nIiksTmUoNiks''@;'; put 'put ''eWUoKSgpLG1lKDcsImJ1dHRvbiIsNDYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLHF0KDgsImNsci1pY29uIiw0OCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJkaXNhYmxlZCIsYS5jdXJy''@;'; put 'put ''ZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLENlKDUpLGdyKCIgIixhLmN1cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksQ2UoMSksUmUoImRpc2FibGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCl9fWZ1bmN0aW9uIHRVZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9w''@;'; put 'put ''dGlvbiIsNTMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgibmdWYWx1ZSIsYSksQ2UoMSksZ3IoIiAiLGEsIiAiKX19ZnVuY3Rpb24gblVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1MSkseHQoImZv''@;'; put 'put ''Y3VzaW4iLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZlKCkuY3VycmVudFJlY29y''@;'; put 'put ''ZFtmLmtleV09aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKSxmPWguY29sLF89aC5jb2xJbmRleDtyZXR1cm4ganQoVmUoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LF8pKX0pLFFlKDIsdFVlLDIsMiwib3B0aW9uIiw1MikseWUoKSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1WZSgpLmNvbCxkPVZlKCk7bGV0IGg7Q2UoMSksUmUoInZhbHVlIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKSgiaW5wdXRJZCIsYS5rZXkpLENlKDEpLFJlKCJuZ0Zvck9mIixudWxsPT1kLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShoPWQuY3VycmVudFJl''@;'; put 'put ''Y29yZFZhbGlkYXRvci5nZXRSdWxlKGEua2V5KSk/bnVsbDpoLnNvdXJjZSl9fWZ1bmN0aW9uIHJVZShjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsNTYpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgidmFsdWUiLGEpLENlKDEpLGdyKCIgIixhLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIGlVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsInNlbGVjdCIsNTQpLHh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtCdChhKTtjb25zdCBmPVZlKCkuY29sSW5kZXg7cmV0dXJuIGp0KFZlKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9VmUoKS5jb2w7cmV0dXJuIGp0KFZlKCkuY3VycmVudFJlY29yZFtmLmtleV09aCl9KSxRZSgxLHJVZSwyLDIsIm9wdGlvbiIsNTUpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuY29sLGQ9VmUoKTtsZXQgaDtSZSgibmdNb2RlbCIsZC5jdXJy''@;'; put 'put ''ZW50UmVjb3JkW2Eua2V5XSksQ2UoMSksUmUoIm5nRm9yT2YiLG51bGw9PWQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9ZC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoYS5rZXkpKT9udWxsOmguc291cmNlKX19Y29uc3Qgb1VlPWZ1bmN0aW9uKCl7cmV0dXJuWyJT''@;'; put 'put ''T0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl19O2Z1bmN0aW9uIHNVZShjLGwpe2lmKDEmYyYmKFFlKDAsblVlLDMsMywiZGl2Iiw0OSksUWUoMSxpVWUsMiwyLCJuZy10ZW1wbGF0ZSIsbnVsbCw1MCxFYykpLDImYyl7Y29uc3QgYT1sLmNvbCxkPSRpKDIpLGg9VmUoKTtSZSgibmdJZiIs''@;'; put 'put ''bnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksJHMoMixvVWUpKSkoIm5nSWZFbHNlIixkKX19bGV0IGFVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9''@;'; put 'put ''YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudFJl''@;'; put 'put ''Y29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBFcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBFcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBFcix0aGlzLm9uUmVjb3JkRWRpdENsb3NlPW5l''@;'; put 'put ''dyBFcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3IEVyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBFcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IEVyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlz''@;'; put 'put ''LmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJlY29yZENvbChhLGQp''@;'; put 'put ''e3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZixfKT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsVD0+e2YoVCl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0IGg9dGhpcy5jdXJy''@;'; put 'put ''ZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPUlHKCkoYSkuZm9ybWF0KGYpKX1jb25maXJtUmVjb3JkRWRpdCgpe3RoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxl''@;'; put 'put ''bmd0aDwxJiZ0aGlzLm9uUmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UmVjb3JkKX1jbG9zZVJlY29yZEVkaXQoKXt0aGlzLm9uUmVjb3JkRWRpdENsb3NlLmVtaXQoKX1vblJlY29yZERyb3Bkb3duQ2hhbmdlKGEsZCl7dGhpcy5vblJlY29yZERyb3Bkb3duQ2hhbmdlZC5lbWl0KHtj''@;'; put 'put ''b2xOYW1lOmEsY29sOmR9KX1vblJlY29yZElucHV0Rm9jdXMoYSxkKXt0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkLmVtaXQoe2V2ZW50OmEsY29sTmFtZTpkfSl9cmVjb3JkSW5wdXRQYXN0ZShhKXtzZXRUaW1lb3V0KCgpPT57YS50YXJnZXQudmFsdWU9YS50YXJnZXQudmFsdWUucmVwbGFj''@;'; put 'put ''ZSgvXHMrJC8sIiIpfSwwKX1yZWNvcmRJbnB1dENoYW5nZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLF89YS50YXJnZXQudmFsdWU7aC5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgz''@;'; put 'put ''MDAsKCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsXykudGhlbihUPT57Y29uc3QgVz1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO1Q/Vz4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKFcsMSk6VzwwJiZoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s''@;'; put 'put ''cy5wdXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3Jl''@;'; put 'put ''Y29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHlsZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJ''@;'; put 'put ''bmRleD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRlRWRpdFJlY29yZFVybCgpe3ZhciBhPXRo''@;'; put 'put ''aXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKWEuY29weVRvQ2xpcChhLmdlbmVyYXRlZFJlY29yZFVybCk7ZWxzZXthLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITA7Y29uc3QgZD1bXTthLmhlYWRlclBrcy5mb3JFYWNoKGg9PntsZXQgZj0i''@;'; put 'put ''QyIsXz0iIjtmb3IobGV0IFQ9MDtUPGEuY2VsbFZhbGlkYXRpb24ubGVuZ3RoO1QrKyl7Y29uc3QgVz1hLmNlbGxWYWxpZGF0aW9uW1RdO2lmKFcuZGF0YT09PWgpeygibnVtZXJpYyI9PT1XLnR5cGV8fCJkYXRlIj09PVcudHlwZXx8InRpbWUiPT09Vy50eXBlKSYmKGY9Ik4iKTticmVha319''@;'; put 'put ''Xz0iQyI9PT1mP2AnJHthLmN1cnJlbnRSZWNvcmRbaF19J2A6YS5jdXJyZW50UmVjb3JkW2hdLnRvU3RyaW5nKCksZC5wdXNoKHtHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9MT0dJQzoiQU5EIixTVUJHUk9VUF9JRDowLFZBUklBQkxFX05NOmgsT1BFUkFUT1JfTk06Ij0iLFJBV19WQUxV''@;'; put 'put ''RTpffSl9KSxkLmxlbmd0aD4wJiZhLmxpYmRzJiYoeWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsZCkudGhlbihoPT57YS5xdWVyeUZpbHRlcj17aWQ6aC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOmgucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX07Y29uc3QgVD1s''@;'; put 'put ''b2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0rIiMvZWRpdG9yL2VkaXQtcmVjb3JkLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZDthLmNvcHlUb0NsaXAoVCksYS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLGEuZmlsdGVyPSExfSkuY2F0Y2goaD0+''@;'; put 'put ''e2Euc3VibWl0TG9hZGluZz0hMX0pKX19KSgpfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9dHJhY2tCeUZuKGEsZCl7cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KGJkKSx0dChBYykpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRl''@;'; put 'put ''cjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNvcmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50''@;'; put 'put ''UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENoYW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1''@;'; put 'put ''c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRpdENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJl''@;'; put 'put ''Y29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siaWQiLCJyZWNvcmRNb2RhbFJlZiIsMSwicmVjb3JkLWVkaXQtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuIiwi''@;'; put 'put ''Y2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFs0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwIHB5LTEwIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIs''@;'; put 'put ''InAtMCIsImNsci1nYXAtNSIsImNsci1nYXAtbWQtMCIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LW1kLXJvdyJdLFsiY2xhc3MiLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsInZpc2liaWxpdHkiLCJjbHJBbGVydENsb3NhYmxlIiwiY2xyQWxlcnRUeXBlIiw0LCJuZ0lmIl0sWyJj''@;'; put 'put ''bGFzcyIsInByZXYtbmV4dCIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJmb2N1c2FibGUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImZvY3VzYWJsZSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsi''@;'; put 'put ''YXV0b2NvbXBsZXRlIiwiIl0sWyJjbGFzcyIsInBvc2l0aW9uLWFic29sdXRlIGdlbmVyYXRlLXJlY29yZC11cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1saW5rIGdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIHBvc2l0aW9uLWFic29sdXRlIiwzLCJkaXNhYmxlZCIsImNsaWNr''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsInBvc2l0aW9uLWFic29sdXRlIiwiZ2VuZXJhdGUtcmVjb3JkLXVybCJdLFsxLCJidG4iLCJidG4tbGluayIsImdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbMSwiZC1mbGV4IiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciIsInctMTAwIiwicHktMTAiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwiY29sdW1uLWVudHJ5IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0s''@;'; put 'put ''WzEsIm5hbWUtaW5wdXQtcm93Il0sWzEsImZvbnQtd2VpZ2h0LWJvbGQiXSxbInNoYXBlIiwia2V5Iiw0LCJuZ0lmIl0sWzEsImNlbGwtZGVzYyJdLFsxLCJpbnB1dHMtd3JhcHBlciIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJuZ1N3aXRjaCJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXIt''@;'; put 'put ''aW5saW5lIGZsZXgtdW5zZXQgcG9zaXRpb24tYWJzb2x1dGUgZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0''@;'; put 'put ''dXMiLCJ3YXJuaW5nIiw0LCJuZ0lmIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJkYXRlLWZpZWxkIiw0LCJuZ1N3aXRjaENhc2UiXSxbMSwibXQtMTAiXSxbInNoYXBlIiwia2V5Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsImZsZXgtdW5zZXQiLCJwb3NpdGlvbi1h''@;'; put 'put ''YnNvbHV0ZSIsImVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Il0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwic3RhdHVzIiwid2FybmluZyIsMSwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbImNsYXNzIiwibnVtZXJpYy1pbnB1''@;'; put 'put ''dCIsMywiaW52YWxpZC1kYXRhIiw0LCJuZ0lmIl0sWzEsIm51bWVyaWMtaW5wdXQiXSxbImNscklucHV0IiwiIiwidHlwZSIsInRleHQiLDEsIm5vdC1jaGFyIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWzQsIm5nVGVtcGxhdGVPdXRs''@;'; put 'put ''ZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwibWF4TGVuZ3RoIiwiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xy''@;'; put 'put ''VGV4dGFyZWEiLCIiLDMsInJvd3MiLCJuZ01vZGVsIiwicGFzdGUiLCJpbnB1dCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsIm5nTW9kZWwiLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSJd''@;'; put 'put ''LFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQt''@;'; put 'put ''dGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmln''@;'; put 'put ''aHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWzMsInZhbHVlIiwiaW5wdXRJZCIsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwiZm9jdXNpbiIsIm5nTW9kZWxDaGFuZ2UiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImNsci1tb2RhbCIsMCkoMSwi''@;'; put 'put ''aDMiLDEpLE5lKDIpLFFlKDMsSXplLDMsMiwibmctY29udGFpbmVyIiwyKSx5ZSgpLG1lKDQsImRpdiIsMyksUWUoNSxMemUsMywwLCJkaXYiLDQpLFFlKDYsSnplLDMsNSwibmctY29udGFpbmVyIiwyKSx5ZSgpLG1lKDcsImRpdiIsNSksUWUoOCxRemUsNCw0LCJjbHItYWxlcnQiLDYpLFFl''@;'; put 'put ''KDksZVVlLDksMywiZGl2Iiw3KSxtZSgxMCwiZGl2IikoMTEsImJ1dHRvbiIsOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSExLGQuY2xvc2VSZWNvcmRFZGl0KCl9KSxOZSgxMiwiIENhbmNlbCAiKSx5ZSgpLG1lKDEzLCJidXR0''@;'; put 'put ''b24iLDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb25maXJtUmVjb3JkRWRpdCgpfSksTmUoMTQsIiBDb25maXJtICIpLHllKCkoKSgpLFFlKDE1LHNVZSwzLDMsIm5nLXRlbXBsYXRlIixudWxsLDEwLEVjKSx5ZSgpKSwyJmEmJihSZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNs''@;'; put 'put ''ck1vZGFsQ2xvc2FibGUiLCExKSxDZSgyKSxiMCgiICIsIkFERCI9PT1kLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1kLmxpYmRzP251bGw6ZC5saWJkcy5zcGxpdCgiLiIp''@;'; put 'put ''WzFdLCIgIiksQ2UoMSksUmUoIm5nSWYiLCJFRElUIj09PWQucmVjb3JkQWN0aW9uKSxDZSgyKSxSZSgibmdJZiIsZC5hZGRSZWNvcmRMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWQuYWRkUmVjb3JkTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xz''@;'; put 'put ''Lmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLENlKDQpLFJlKCJkaXNhYmxlZCIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxyZCxuZCx0aCxsMSxjMSxXYSxNMCxC''@;'; put 'put ''cyxPcyxIYixQUSxOYixoSCxrYSxvdSxzdSxIRixMYiwkRixxRixmMSxqRixOOCxvd2UsdVEsTXNlLGR4XSxzdHlsZXM6WyIucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnkt''@;'; put 'put ''Y29udGVudDpzcGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlucHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXgtd2lkdGg6MjYwcHh9LnJlY29y''@;'; put 'put ''ZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5hbWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jZWxsLWRlc2NbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDozMHB4O21hcmdpbi10b3A6''@;'; put 'put ''MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5yZWNvcmQtZWRp''@;'; put 'put ''dC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAgPio6bm90KC5kYXRlLWZpZWxkKTpub3QoY2xyLXNlbGVjdC1jb250YWluZXIpe2ZsZXg6MX0ucmVjb3JkLWVk''@;'; put 'put ''aXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgICAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6MCFp''@;'; put 'put ''bXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3R7ZGlzcGxheTpibG9jazt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5''@;'; put 'put ''O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29m''@;'; put 'put ''dC1zZWxlY3QgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1v''@;'; put 'put ''dXRlci1zcGluLWJ1dHRvbiwgLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxkICAgcFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5yZWNvcmQtZWRpdC1tb2RhbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRl''@;'; put 'put ''eHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMzBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdo''@;'; put 'put ''dDowO3RvcDo0cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLXBpY2tlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQt''@;'; put 'put ''ZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1ib3R0b206MTBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lcntib3JkZXI6MXB4IHNvbGlkICM5''@;'; put 'put ''OTk7Y29sb3I6IzAwMDtib3JkZXItcmFkaXVzOi4xMjVyZW07bWFyZ2luLXJpZ2h0OjVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVye21heC1oZWlnaHQ6dW5zZXR9LnJlY29yZC1lZGl0''@;'; put 'put ''LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcnt0b3A6MTVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3R7aGVpZ2h0OmF1''@;'; put 'put ''dG87cGFkZGluZzoxMHB4IDIwcHggMTBweCAxMHB4O2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3Q6Zm9jdXN7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1t''@;'; put 'put ''b2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpob3ZlcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXJ7d2lkdGg6MjI0cHg7YmFja2dy''@;'; put 'put ''b3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO3BhZGRpbmc6Y2FsYyguMjVyZW0gKyAycHgpIC41cmVtO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtmb250LXNpemU6LjU0MTY2N3JlbTttYXJnaW4tcmlnaHQ6NnB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3Vze2JhY2tncm91bmQ6bm9uZTtib3JkZXI6MCFpbXBvcnRh''@;'; put 'put ''bnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiwgLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1''@;'; put 'put ''dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkfS5yZWNvcmQtZWRp''@;'; put 'put ''dC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1kaWFsb2d7d2lkdGg6ODB2d30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDoxMDAlO3Jlc2l6ZTpub25lO2JvcmRlci1jb2xvcjojOTk5fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEuaW52YWxpZC1k''@;'; put 'put ''YXRhe2JvcmRlci1jb2xvcjpyZWQ7b3V0bGluZTowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWEubm90LWNoYXJ7Zm9udC1mYW1pbHk6THVjaWRhIENvbnNvbGUsTW9uYWNvLG1vbm9zcGFjZX0ucmVjb3Jk''@;'; put 'put ''LWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuZ2VuZXJhdGUtcmVjb3JkLXVybHtyaWdodDo0MHB4O3RvcDo0MHB4O2ZvbnQtc2l6ZToxMnB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJsLWJ1dHRvbntyaWdo''@;'; put 'put ''dDoyNXB4O3RvcDo1cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWhlYWRlcntwYWRkaW5nOjAgMCAxcmVtfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZm9vdGVyIC5hbGVydHttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDEwcHh9LmZvY3VzYWJsZVtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV06Zm9jdXN7Ym94LXNoYWRvdzowIDAgM3B4ICM1YWEyMjB9LmVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0W19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0Oi0zMHB4fS52YWxpZGF0aW9uLWluZm8tYWxlcnRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMxMHB4fSJdfSksY30pKCk7ZnVu''@;'; put 'put ''Y3Rpb24gbFVlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLCIgIil9fWxldCBjVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3RhdGVzTGlzdD1bXSx0aGlzLnByb2Nlc3NlZFN0''@;'; put 'put ''YXRlcz1bXSx0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITEsdGhpcy5taW5EZWxheT0xZTN9bmdPbkluaXQoKXt9YXBwZW5kU3RhdGUoYSl7aWYoIntmaW5pc2h9Ij09PWEpcmV0dXJuIHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx2b2lkIGNsZWFySW50ZXJ2YWwodGhpcy5zdGF0ZUludGVydmFs''@;'; put 'put ''KTt0aGlzLnN0YXRlc0xpc3QucHVzaChhKSx0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKGEpfXJlcGxhY2VMYXN0U3RhdGUoYSl7dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wPyh0aGlzLnN0YXRlc0xpc3QucG9wKCksdGhpcy5zdGF0ZXNMaXN0LnB1c2goYSkpOnRoaXMucHJvY2Vzc2VkU3Rh''@;'; put 'put ''dGVzW3RoaXMucHJvY2Vzc2VkU3RhdGVzLmxlbmd0aC0xXT1hfWNsZWFyU3RhdGVzKCl7dGhpcy5wcm9jZXNzZWRTdGF0ZXM9W119c3RhcnRTdGF0ZXIoKXt0aGlzLnN0YXRlckluUHJvZ3Jlc3M9ITAsdGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNo''@;'; put 'put ''KHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIiksdGhpcy5zdGF0ZUludGVydmFsPXNldEludGVydmFsKCgpPT57dGhpcy5zdGF0ZXNMaXN0Lmxlbmd0aD4wJiZ0aGlzLnByb2Nlc3NlZFN0YXRlcy5wdXNoKHRoaXMuc3RhdGVzTGlzdC5zaGlmdCgpfHwiIil9LHRoaXMubWluRGVsYXkpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MSwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwibS0wIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiksUWUoMSxsVWUsMiwxLCJwIiwwKSx5ZSgpLG1lKDIsImRpdiIsMSkoMywic3Bh''@;'; put 'put ''biIsMiksTmUoNCwiTG9hZGluZy4uLiIpLHllKCkoKSksMiZhJiYoQ2UoMSksUmUoIm5nRm9yT2YiLGQucHJvY2Vzc2VkU3RhdGVzKSl9LGRlcGVuZGVuY2llczpbeHNdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja31wW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46''@;'; put 'put ''MDt0ZXh0LWFsaWduOmNlbnRlcn0iXX0pLGN9KSgpLHVVZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cGlwZT1OYSh7bmFtZToi''@;'; put 'put ''cGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLERzZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe3JldHVybiB0aGlzLmFkZFNlcGFyYXRvcnMoYS50b1N0cmluZygpLGQpfWFkZFNlcGFyYXRvcnMoYSxkPSIgIil7Y29uc3QgaD0oYSs9IiIpLnNwbGl0KCIuIik7''@;'; put 'put ''bGV0IGY9aFswXTtjb25zdCBfPWgubGVuZ3RoPjE/Ii4iK2hbMV06IiIsVD0vKFxkKykoXGR7M30pLztmb3IoO1QudGVzdChmKTspZj1mLnJlcGxhY2UoVCwiJDEiK2QrIiQyIik7cmV0dXJuIGYrX319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu''@;'; put 'put ''XHUwMjc1cGlwZT1OYSh7bmFtZToidGhvdXNhbmRTZXBhcmF0b3IiLHR5cGU6YyxwdXJlOiEwfSksY30pKCk7Y29uc3QgZFVlPVsiaHQiXSxoVWU9WyJ1cGxvYWRTdGF0ZXIiXSxmVWU9WyJxdWVyeUZpbHRlciJdLHBVZT1bImhvdEluc3RhbmNlIl0sZ1VlPVsiZmlsZVVwbG9hZElucHV0Il07''@;'; put 'put ''ZnVuY3Rpb24gbVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2MSkoMSwic3BhbiIsNjIpKDIsImxhYmVsIiw2MyksTmUoMywiIEJyb3dzZSAiKSx5ZSgpKCksbWUoNCwiaW5wdXQiLDY0LDY1KSx4dCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQo''@;'; put 'put ''VmUoKS5nZXRGaWxlRGVzYyhoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoNCksUmUoInVwbG9hZGVyIixhLnVwbG9hZGVyKX19ZnVuY3Rpb24gdlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw2NikoMSwiYnV0dG9uIiw2NykseHQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdldEZpbGUoKSl9KSxOZSgyLCIgVXBsb2FkICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgiZGlzYWJsZWQiLCEwKSl9ZnVuY3Rpb24gX1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OCkseHQoImNsaWNr''@;'; put 'put ''IixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxOZSgxLCIgQ2xvc2UgIikseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtSZSgiZGlzYWJsZWQiLGEuZXhjZWxGaWxlUGFyc2luZ3x8YS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gYlVlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnNob3dVcGxvYWRNb2RhbD0hMSl9KSxOZSgxLCIgU2tpcCAiKSx5ZSgpfX1mdW5jdGlvbiB5VWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDcw''@;'; put 'put ''KSxxdCgxLCJhcHAtdXBsb2FkLXN0YXRlciIsbnVsbCw3MSkseWUoKSl9ZnVuY3Rpb24gd1VlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYXBwLWVkaXQtcmVjb3JkIiw3MikseHQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNvbmZp''@;'; put 'put ''cm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmNsb3NlUmVjb3JkRWRp''@;'; put 'put ''dCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkub25QcmV2aW91c1JlY29yZCgpKX0pLHllKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVZlKCk7UmUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1p''@;'; put 'put ''dExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRp''@;'; put 'put ''bmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBDVWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDczKSxxdCgxLCJwcm9ncmVzcyIp''@;'; put 'put ''LHllKCkpfWNvbnN0IFNVZT1mdW5jdGlvbigpe3JldHVyblsiL2hvbWUiXX07ZnVuY3Rpb24gTVVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw3NCkoMSwic3BhbiIsNzUpLHF0KDIsImNsci1pY29uIiw3NiksTmUoMywiQmFjayB0byB0YWJsZSBzZWxlY3Rpb24gIiks''@;'; put 'put ''eWUoKSxtZSg0LCJzcGFuIiw3NykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSkscXQoNSwiY2xyLWljb24iLDc4KSxOZSg2LCIgVmlld2JveGVzICIpLHllKCkoKX0yJmMmJihDZSgxKSxSZSgicm91dGVyTGluayIsJHMoMSxT''@;'; put 'put ''VWUpKSl9ZnVuY3Rpb24geFVlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsODMpfWZ1bmN0aW9uIEVVZShjLGwpe2lmKDEmYyYmKEJyKDApLE5lKDEpLGJhKDIsInRob3VzYW5kU2VwYXJhdG9yIiksVXIoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLHc1KCIgKCIsTTUoMiw0LGEuZGF0''@;'; put 'put ''YVNvdXJjZS5sZW5ndGgsIiwiKSwiICIsMT09PWEuZGF0YVNvdXJjZS5sZW5ndGg/InJvdyI6InJvd3MiLCIsICIsYS5jb2xzLmxlbmd0aCwiIiwxPT09YS5jb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24ga1VlKGMsbCl7MSZjJiYoQnIoMCksTmUoMSwiICgwIHJv''@;'; put 'put ''d3MpICIpLFVyKCkpfWZ1bmN0aW9uIEFVZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsRVVlLDMsNywibmctY29udGFpbmVyIiwzNSksUWUoMixrVWUsMiwwLCJuZy1jb250YWluZXIiLDM1KSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLnplcm9GaWx0ZXJS''@;'; put 'put ''b3dzKSxDZSgxKSxSZSgibmdJZiIsYS56ZXJvRmlsdGVyUm93cyl9fWZ1bmN0aW9uIFRVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImg0Iiw3OSkoMSwiY2xyLWljb24iLDgwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuZGF0YXNldEluZm89''@;'; put 'put ''ITApfSkseWUoKSxRZSgyLHhVZSwxLDAsImNsci1pY29uIiw4MSksTmUoMyksbWUoNCwiYSIsODIpLE5lKDUpLHllKCksUWUoNixBVWUsMywyLCJuZy1jb250YWluZXIiLDM1KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS50YWJsZU5hbWUu''@;'; put 'put ''aW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxncigiICIsYS5saWJOYW1lLCIuIiksQ2UoMSksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrZC5saWJkcyksQ2UoMSksb3IoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLENlKDEpLFJlKCJuZ0lmIixkLmRhdGFTb3VyY2UpfX1mdW5j''@;'; put 'put ''dGlvbiBEVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJidXR0b24iLDkwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSkscXQoMSwiY2xyLWljb24iLDkxKSxtZSgyLCJzcGFuIiksTmUoMywiVXBsb2Fk''@;'; put 'put ''IikseWUoKSgpfX1mdW5jdGlvbiBJVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJidXR0b24iLDg1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9wZW5RYigpKX0pLHF0KDIsImNsci1pY29uIiw4NiksbWUoMywic3BhbiIpLE5l''@;'; put 'put ''KDQsIkZpbHRlciIpLHllKCkoKSxtZSg1LCJidXR0b24iLDg3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmVkaXRUYWJsZSgpKX0pLHF0KDYsImNsci1pY29uIiw4OCksbWUoNywic3BhbiIpLE5lKDgsIkVkaXQiKSx5ZSgpKCksUWUoOSxEVWUsNCwwLCJi''@;'; put 'put ''dXR0b24iLDg5KSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg5KSxSZSgibmdJZiIsIWEuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcpfX1mdW5jdGlvbiBMVWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDEpLGpjKCJU''@;'; put 'put ''byB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1m''@;'; put 'put ''dW5jdGlvbiBSVWUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw5OCksUWUoMSxMVWUsMiwyLCJzcGFuIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIE9V''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImJ1dHRvbiIsOTIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2FuY2VsRWRpdCgpKX0pLHF0KDIsImNsci1pY29uIiw5MyksbWUoMywic3BhbiIpLE5lKDQsIkNhbmNlbCIpLHllKCko''@;'; put 'put ''KSxtZSg1LCJjbHItdG9vbHRpcCIpKDYsImJ1dHRvbiIsOTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBqdChoLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdz8iIjpoLmFkZFJvdygpKX0pLHF0KDcsImNsci1pY29uIiw5NSksTmUoOCwiQWRk''@;'; put 'put ''IFJvdyAiKSx5ZSgpLFFlKDksUlVlLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsOTYpLHllKCksbWUoMTAsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuY2hlY2tTYXZlKCkpfSkscXQoMTEsImNsci1pY29uIiw5NyksTmUoMTIsIlN1''@;'; put 'put ''Ym1pdCAiKSx5ZSgpLFVyKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDYpLGRyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLFJlKCJjbHJMb2FkaW5nIixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIFBVZShjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsImJ1dHRvbiIsMTAyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSkscXQoMSwiY2xyLWljb24iLDg4KSxtZSgyLCJzcGFuIiksTmUoMywiRWRpdCIpLHllKCkoKX19ZnVuY3Rpb24gRlVlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7QnIoMCksbWUoMSwiYnV0dG9uIiw5OSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5kaXNjYXJkU291cmNlRmlsZT0hMCl9KSxxdCgyLCJjbHItaWNvbiIsOTMpLG1lKDMsInNwYW4iKSxOZSg0LCJEaXNjYXJkIGZp''@;'; put 'put ''bGUiKSx5ZSgpKCksUWUoNSxQVWUsNCwwLCJidXR0b24iLDEwMCksbWUoNiwiYnV0dG9uIiwxMDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuc3VibWl0RXhjZWwoKSl9KSxxdCg3LCJjbHItaWNvbiIsOTcpLE5lKDgsIiBTdWJtaXQgIikseWUoKSxVcigp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1KSxSZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSksQ2UoMSksUmUoImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIEhVZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODQpLFFlKDEsSVVlLDEwLDEsIm5nLWNvbnRh''@;'; put 'put ''aW5lciIsMzUpLFFlKDIsT1VlLDEzLDMsIm5nLWNvbnRhaW5lciIsMzUpLFFlKDMsRlVlLDksMiwibmctY29udGFpbmVyIiwzNSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLENlKDEpLFJlKCJu''@;'; put 'put ''Z0lmIiwhYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksQ2UoMSksUmUoIm5nSWYiLGEudXBsb2FkUHJldmlldyl9fWZ1bmN0aW9uIE5VZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTAzKSgxLCJzcGFuIiksTmUoMiwiRklMVEVSIDogIiksbWUoMywiYiIpLE5lKDQp''@;'; put 'put ''LHllKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxvcihhLnF1ZXJ5VGV4dCl9fWZ1bmN0aW9uIFZVZShjLGwpezEmYyYmKEJyKDApLG1lKDEsInNwYW4iLDEwNiksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxtZSgzLCJkaXYiKSg0LCJoMyIpLE5lKDUsIkxvYWRpbmcgdGFibGUi''@;'; put 'put ''KSx5ZSgpKCksVXIoKSl9ZnVuY3Rpb24gQlVlKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwic3BhbiIpLHF0KDIsImNsci1pY29uIiwxMDcpLHllKCksbWUoMywiZGl2IikoNCwiaDMiKSxOZSg1LCJMb2FkaW5nIHRhYmxlIGVycm9yIikseWUoKSgpLFVyKCkpfWZ1bmN0aW9uIGpVZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKG1lKDAsImRpdiIsMTA0KSgxLCJkaXYiLDEwNSksUWUoMixWVWUsNiwwLCJuZy1jb250YWluZXIiLDM1KSxRZSgzLEJVZSw2LDAsIm5nLWNvbnRhaW5lciIsMzUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLCFhLmdldGRhdGFFcnJvciksQ2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLGEuZ2V0ZGF0YUVycm9yKX19ZnVuY3Rpb24gelVlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxqYygiVG8gdW5sb2NrIG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2Fs''@;'; put 'put ''bG93ZWQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkPyJyb3ciOiJyb3dzIiwiLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gVVVlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTEw''@;'; put 'put ''KSxRZSgxLHpVZSwyLDIsInNwYW4iLDM1KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gWlVlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0''@;'; put 'put ''b24iLDEwOCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3c/IiI6aC5hZGRSZWNvcmRCdXR0b25DbGljaygpKX0pLHF0KDIsImNsci1pY29uIiw5NSksTmUoMywiIEFkZCBSZWNvcmQgIikseWUo''@;'; put 'put ''KSxRZSg0LFVVZSwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDEwOSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxkcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gWVVlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIs''@;'; put 'put ''MTExKSxOZSgxKSxxdCgyLCJjb250YWN0LWxpbmsiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxncigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIFdVZShj''@;'; put 'put ''LGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEyMyksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLGpjKCJPbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiAiLDE9PT1hLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD8i''@;'; put 'put ''cm93Ijoicm93cyIsIiB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEdVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTI0KSgxLCJkaXYiLDEyNSko''@;'; put 'put ''MiwibGFiZWwiLDEyNiksTmUoMywiTWVzc2FnZSIpLHllKCksbWUoNCwidGV4dGFyZWEiLDEyNykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5tZXNzYWdlPWgpfSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDQpLFJlKCJu''@;'; put 'put ''Z01vZGVsIixhLm1lc3NhZ2UpKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsYS52YWxpZGF0aW9uRG9uZT8iIjoiUGxlYXNlIHdhaXQgd2hpbGUgd2UgdmFsaWRhdGUgIithLmNvbHMubGVuZ3RoKmEubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsiIGNlbGxzLiIpfX1m''@;'; put 'put ''dW5jdGlvbiAkVWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDExMikoMSwiZGl2IiwxMTMpKDIsImRpdiIsMTE0KSgzLCJkaXYiLDExNSkoNCwiYnV0dG9uIiwxMTYpLHF0KDUsImNsci1pY29uIiwxMTcpLHllKCksbWUoNiwiaDMiLDIpLE5lKDcpLHllKCkoKSxtZSg4''@;'; put 'put ''LCJkaXYiLDMpLFFlKDksV1VlLDIsMiwic3BhbiIsMTE4KSxRZSgxMCxHVWUsNSwzLCJkaXYiLDExOSkseWUoKSxtZSgxMSwiZGl2IiwxMjApKDEyLCJidXR0b24iLDEyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5zYXZlVGFibGUoaC5o''@;'; put 'put ''b3RUYWJsZS5kYXRhKSl9KSxOZSgxMywiIFN1Ym1pdCAiKSx5ZSgpLG1lKDE0LCJidXR0b24iLDEyMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4gaC5jYW5jZWxTdWJtaXQoKSxoLnN1Ym1pdD0hMSxqdChoLnZhbGlkYXRpb25Eb25lPTApfSksTmUo''@;'; put 'put ''MTUsIiBDYW5jZWwgIikseWUoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDcpLGIwKCIgU3VibWl0IGZvciBBcHByb3ZhbCAoIixhLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCwiIGFkZGVkLCAiLGEucm93c0NoYW5nZWQucm93c1VwZGF0ZWQsIiB1cGRhdGVkLCAiLGEucm93c0No''@;'; put 'put ''YW5nZWQucm93c0RlbGV0ZWQsIiBkZWxldGVkKSAiKSxDZSgyKSxSZSgibmdJZiIsYS50b3RhbFJvd3NDaGFuZ2VkPmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0JiZhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWEuSW5maW5pdHkpLENlKDEp''@;'; put 'put ''LFJlKCJuZ0lmIixhLnRhYmxlVHJ1ZSksQ2UoMiksUmUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSl9fWZ1bmN0aW9uIHFVZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iLDEyOCksTmUoMSksYmEoMiwicGtTcGFjZVNlcGFyYXRlIikseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxp''@;'; put 'put ''Y2l0LGQ9VmUoKTtDZSgxKSxqYygiIE9uIHJvdyAiLGErMSwiOiAiLFVsKDIsMixkLnBrRmllbGRzW2FdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVuY3Rpb24gS1VlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxi''@;'; put 'put ''MCgiICIsYS5jb2wsIigiLGEubGVuLCIpLCAiLGEudmFsLCIgIil9fWZ1bmN0aW9uIFhVZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMTI5KSgxLCJkaXYiLDEzMCkoMiwiZGl2IiwxMTQpKDMsImRpdiIsMTE1KSg0LCJidXR0b24iLDExNikscXQoNSwiY2xyLWljb24i''@;'; put 'put ''LDExNykseWUoKSxtZSg2LCJoMyIsMiksTmUoNywiRXJyb3IiKSx5ZSgpKCksbWUoOCwiZGl2IiwzKSg5LCJwIiksTmUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVzZXMiKSx5ZSgpKCksbWUoMTEsImRpdiIsMTcpKDEyLCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxOZSgxMywiIE9rICIpLHllKCkoKSgpKCkoKX19ZnVuY3Rpb24gSlVlKGMsbCl7MSZjJiZxdCgwLCJhcHAtcXVlcnkiLG51bGwsMTMxKX1mdW5jdGlvbiBRVWUoYyxsKXsxJmMmJihtZSgwLCJwIiwxMzIpLE5lKDEs''@;'; put 'put ''IiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLHllKCkpfWNvbnN0IGVaZT1mdW5jdGlvbihjLGwpe3JldHVybntsaWJOYW1lOmMsdGFibGVOYW1lOmx9fSxJc2U9ZnVuY3Rpb24oKXtyZXR1cm5bIiIsIiAiXX0sdFplPWZ1bmN0aW9uKGMpe3JldHVybntoZWFkZXJCYXJG''@;'; put 'put ''aWx0ZXI6Y319LExzZT1GKDUzKSxSc2U9RigzOTAwNykuQnVmZmVyO2xldCBKQT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcsaWUsZ2Usd2Upe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMu''@;'; put 'put ''c2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPV8sdGhpcy5yb3V0ZXI9VCx0aGlzLnJvdXRlPVcsdGhpcy5zYXNTZXJ2aWNlPWllLHRoaXMuY2RmPWdlLHRoaXMuaG90UmVnaXN0ZXJlcj13ZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBlaCx0aGlzLnF1ZXJ5Rmls''@;'; put 'put ''dGVyQ29tcExpc3Q9bmV3IGVoLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgZWgsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZWgsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMu''@;'; put 'put ''ZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWluU3BhcmVSb3dzOjEsbGljZW5zZUtleTp2''@;'; put 'put ''b2lkIDAscmVhZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3Qgb3Q9dGhpcy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCk7aWYoIW90KXJldHVybiExO2NvbnN0IGV0PW90WzBdO3JldHVybiBldC5mcm9tLnJvdyE9PWV0LnRvLnJvd30sY2FsbGJhY2s6KFplLG90LGV0KT0+e2xldCB5dD1vdFswXTt5dC5zdGFydC5yb3c9PT15dC5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCx5dC5zdGFydC5y''@;'; put 'put ''b3cpfX0scm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6IkNvcHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFk''@;'; put 'put ''ZXJzOntuYW1lOiJDb3B5IHdpdGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hlYWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVuZG8ifSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9w''@;'; put 'put ''Um93PW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0FkZGVkOjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlF''@;'; put 'put ''cnI9ITEsdGhpcy5zdWNjZXNzRW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVkaXQ9ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0''@;'; put 'put ''aGlzLmVyclZhbGlkYXRpb249ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1BrTnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hvd0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25E''@;'; put 'put ''b25lPTAsdGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVyPW5ldyBSb2UsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFk''@;'; put 'put ''eT0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJW''@;'; put 'put ''aXNpYmxlPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRo''@;'; put 'put ''aXMuZGF0ZUhlYWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Q9bmV3IGJlLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmls''@;'; put 'put ''ZVBhc3N3b3JkTW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50''@;'; put 'put ''RWRpdFJlY29yZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmll''@;'; put 'put ''ZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlv''@;'; put 'put ''blNvdXJjZT1bXSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxVRToyLERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVf''@;'; put 'put ''Q0hBUjo1LEZPUkNFX0ZMQUc6Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGlj''@;'; put 'put ''ZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAsWnpbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJlRJZSgpLnJlZ2lzdGVyTGFuZ3VhZ2UoWnpbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pLHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgQWcsdGhpcy5wYXJz''@;'; put 'put ''ZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRS''@;'; put 'put ''ZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17''@;'; put 'put ''Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYo''@;'; put 'put ''ZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51''@;'; put 'put ''KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJj''@;'; put 'put ''ZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwo''@;'; put 'put ''KXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24i''@;'; put 'put ''LCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9''@;'; put 'put ''dXBkYXRlX3NoZWV0X3JhbmdlKGEpe3ZhciBkPXtzOntyOjEvMCxjOjEvMH0sZTp7cjowLGM6MH19O09iamVjdC5rZXlzKGEpLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4iISIhPWguY2hhckF0KDApfSkubWFwKEdjLnV0aWxzLmRlY29kZV9jZWxsKS5mb3JFYWNoKGZ1bmN0aW9uKGgpe2Qu''@;'; put 'put ''cy5jPU1hdGgubWluKGQucy5jLGguYyksZC5zLnI9TWF0aC5taW4oZC5zLnIsaC5yKSxkLmUuYz1NYXRoLm1heChkLmUuYyxoLmMpLGQuZS5yPU1hdGgubWF4KGQuZS5yLGgucil9KSxhWyIhcmVmIl09R2MudXRpbHMuZW5jb2RlX3JhbmdlKGQpfWdldFJhbmdlQW5kU2hlZXQoYSl7bGV0IGQ9''@;'; put 'put ''MCxoPTAsZj0tMSxfPS0xLFQ9IiIsVz0hMSxpZT1bXSx3ZT1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4udGhpcy5oZWFkZXJBcnJheV0ubWFwKG90PT5vdC50b0xvd2VyQ2FzZSgpKSxFZT13ZS5yZWR1Y2UoKG90LGV0KT0+KG90W2V0XT0tMSxvdCkse30pO3JldHVybiBh''@;'; put 'put ''LlNoZWV0TmFtZXMuZm9yRWFjaChvdD0+e2lmKFcpcmV0dXJuO2llPVtdLFQ9b3Q7Y29uc3QgZXQ9YS5TaGVldHNbVF07aWYodGhpcy5kYXRhPUdjLnV0aWxzLnNoZWV0X3RvX2pzb24oZXQse2hlYWRlcjoxLGJsYW5rcm93czohMSxkZWZ2YWw6IiJ9KSx0aGlzLmRhdGEubGVuZ3RoPD0xKXJl''@;'; put 'put ''dHVybjtsZXQgeXQ9W107dGhpcy5oZWFkZXJBcnJheS5mb3JFYWNoKCgpPT55dC5wdXNoKCIiKSksdGhpcy5kYXRhLnB1c2goeXQpO2xldCBrdD0hMTtpZih0aGlzLmRhdGEuZm9yRWFjaCgoU3QsUXQpPT57aWYoIVcpaWYoa3Qpe2xldCBybj0hMCx2bj0hMTt3ZS5mb3JFYWNoKE5uPT57Y29u''@;'; put 'put ''c3QgY3I9RWVbTm5dOyIiIT09U3RbY3JdJiZ2b2lkIDAhPT1TdFtjcl0/cm49ITE6LTEhPT10aGlzLmhlYWRlclBrcy5pbmRleE9mKE5uLnRvVXBwZXJDYXNlKCkpJiYodm49ITApfSkscm58fHZuPyhfPVF0LFc9ITApOi0xPT09ZiYmKGY9UXQpfWVsc2V7Y29uc3Qgcm49U3QubWFwKE5uPT5O''@;'; put 'put ''bi50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO2lmKCFybi5pbmNsdWRlcygiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIikpe2NvbnN0IE5uPXdlLmluZGV4T2YoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpO05uPi0xJiZ3ZS5zcGxpY2UoTm4sMSl9a3Q9ITAsd2Uu''@;'; put 'put ''Zm9yRWFjaChObj0+ey0xPT09cm4uaW5kZXhPZihObikmJihrdD0hMSl9KTtsZXQgdm49W107dm49dGhpcy5maW5kVmFsaWRIZWFkZXJzKHJuLHdlLFF0LFQpLCExPT09dm5bMF0/KGt0PSExLHZuWzFdLmxlbmd0aD4wJiZ2blsxXS5mb3JFYWNoKE5uPT57aWUucHVzaChObil9KSk6RWU9dm5b''@;'; put 'put ''MV19fSksVyYmKHRoaXMudXBkYXRlX3NoZWV0X3JhbmdlKGV0KSxldFsiIXJlZiJdKSl7Y29uc3QgUXQ9R2MudXRpbHMuZGVjb2RlX3JhbmdlKGV0WyIhcmVmIl18fCIiKTtkPVF0LnMucixoPVF0LnMuY319KSwtMT09PWYmJihXPSExKSx7Zm91bmREYXRhOlcsc2hlZXROYW1lOlQsc3RhcnRS''@;'; put 'put ''b3c6ZixlbmRSb3c6Xyxjc3ZBcnJheUhlYWRlcnNNYXA6RWUsbWlzc2luZ0hlYWRlcnM6aWUscmFuZ2VTdGFydFJvdzpkLHJhbmdlU3RhcnRDb2w6aH19cHJvbXB0RXhjZWxQYXNzd29yZCgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITAsc2V0''@;'; put 'put ''VGltZW91dCgoKT0+e2NvbnN0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ZpbGVQYXNzd29yZElucHV0Iik7aCYmKGguZm9jdXMoKSxoLnZhbHVlPSIiKX0sMTAwKSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Quc3Vic2NyaWJlKGg9Pnt0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSxhKGh8''@;'; put 'put ''fHZvaWQgMCl9KX0pfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztsZXQgZjt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCxmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmls''@;'; put 'put ''ZW5hbWU9IiI7bGV0IF89Zi5uYW1lO3RoaXMuZmlsZW5hbWU9Xyx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKGBMb2FkaW5nICR7X30gaW50byB0aGUgYnJvd3NlcmApO2xldCBXPV8uc2xpY2UoXy5sYXN0SW5kZXhPZigiLiIpKzEsXy5sYXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4bHMiPT09Vy50''@;'; put 'put ''b0xvd2VyQ2FzZSgpKXtsZXQgaWU9bmV3IEZpbGVSZWFkZXI7aWUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHdlPWZpKGZ1bmN0aW9uKihFZSl7Y29uc3QgWmU9aC50b0JzdHIoRWUudGFyZ2V0LnJlc3VsdCk7bGV0IG90LGV0PSExO2NvbnN0IHl0PXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczoh''@;'; put 'put ''MSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e290PUdjLnJlYWQoWmUsey4uLnl0fSl9Y2F0Y2goRHIpe2lmKERyLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKSlmb3IoZXQ9ITA7ZXQ7KXtjb25zdCBfaT15''@;'; put 'put ''aWVsZCBoLnByb21wdEV4Y2VsUGFzc3dvcmQoKTtpZihfaSl0cnl7b3Q9R2MucmVhZChaZSx7Li4ueXQscGFzc3dvcmQ6X2l9KSxldD0hMSxoLmZpbGVVbmxvY2tFcnJvcj0hMX1jYXRjaChsaSl7aC5maWxlVW5sb2NrRXJyb3I9ITAsbGkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVz''@;'; put 'put ''KCJwYXNzd29yZCIpfHwoZXQ9ITEpfWVsc2UgZXQ9ITF9ZWxzZSBoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLERyLHZvaWQgMCwiRXJyb3IgcmVhZGluZyBmaWxlIil9aWYoIW90KXJldHVybiBoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZChoLnNob3dVcGxvYWRNb2RhbD0h''@;'; put 'put ''MSk7bGV0IGt0PSExLFN0PVtdO2NvbnN0IFF0PVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5oLmhlYWRlckFycmF5XTtsZXQgcm49UXQubWFwKERyPT5Eci50b0xvd2VyQ2FzZSgpKSx2bj1ybi5yZWR1Y2UoKERyLF9pKT0+KERyW19pXT0tMSxEcikse30pLE5uPVtdO2Nv''@;'; put 'put ''bnN0IGNyPWguZ2V0UmFuZ2VBbmRTaGVldChvdCk7aWYoU3Q9Y3IubWlzc2luZ0hlYWRlcnMsY3IuZm91bmREYXRhKXtrdD0hMCx2bj1jci5jc3ZBcnJheUhlYWRlcnNNYXA7Y29uc3QgRHI9b3QuU2hlZXRzW2NyLnNoZWV0TmFtZV07aC5hcHBlbmRVcGxvYWRTdGF0ZShgVGFibGUgZm91bmQg''@;'; put 'put ''b24gc2hlZXQgJHtjci5zaGVldE5hbWV9IG9uIHJvdyAke2NyLnN0YXJ0Um93fWApO2xldCBfaT0iIixsaT0iIjtmb3IobGV0IG1yPWNyLnN0YXJ0Um93O21yPGNyLmVuZFJvdzsrK21yKXtjb25zdCBFaT1bXTtybi5mb3JFYWNoKEZuPT57Y29uc3QgUW49R2MudXRpbHMuZW5jb2RlX2NlbGwo''@;'; put 'put ''e3I6Y3IucmFuZ2VTdGFydFJvdyttcixjOmNyLnJhbmdlU3RhcnRDb2wrdm5bRm5dfSk7bGV0IE1yOyIiPT09X2kmJihfaT1RbiksbGk9UW4sTXI9RHJbUW5dP0RyW1FuXTp7djoiIn0sRWkucHVzaChNcil9KSxFaS5maW5kKEZuPT4iIiE9PUZuLnYpJiZObi5wdXNoKEVpKX1oLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5zaG93SW5mb01vZGFsKCJUYWJsZSBGb3VuZCIsYFNoZWV0OiAke2NyLnNoZWV0TmFtZX1cblJhbmdlOiAke19pfToke2xpfWApfWVsc2UgU3Q9Y3IubWlzc2luZ0hlYWRlcnM7aWYoU3QubGVuZ3RoPjApe1N0LnNvcnQoZnVuY3Rpb24obGksbXIpe3JldHVybiBsaVsxXT09PW1yWzFd''@;'; put 'put ''PzA6bGlbMV0+bXJbMV0/LTE6MX0pO2xldCBEcj1TdC5tYXAoX2k9Pl9pWzBdKS5zbGljZSgwLDUpLmpvaW4oIlxuIik7cmV0dXJuIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsRHIpLHNldFRpbWVvdXQoKCk9PntoLmZpbGVuYW1lPSIifSksaC5leGNlbEZpbGVQYXJzaW5n''@;'; put 'put ''PSExLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKX1pZigwPT09Tm4ubGVuZ3RofHwwPT09Tm5bMF0ubGVuZ3RoKXJldHVybiBoLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntoLmZp''@;'; put 'put ''bGVuYW1lPSIifSksaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtpZigoaC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjB8fGguZGF0ZUhlYWRlcnMubGVuZ3RoPjB8fGgudGltZUhlYWRlcnMubGVuZ3RoPjApJiYoTm49aC51cGRhdGVEYXRlVGltZUNv''@;'; put 'put ''bHMoUXQsTm4pKSxoLnhsUnVsZXMubGVuZ3RoPjAmJihObj1oLnVwZGF0ZVhMUnVsZUNvbHMoUXQsTm4pKSwha3Qpe2lmKDA9PT1TdC5sZW5ndGgpaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gcmVsZXZhbnQgZGF0YSBmb3VuZCBpbiBGaWxlICEiKSxzZXRUaW1lb3V0''@;'; put 'put ''KCgpPT57aC5maWxlbmFtZT0iIn0pO2Vsc2V7U3Quc29ydChmdW5jdGlvbihsaSxtcil7cmV0dXJuIGxpWzFdPT09bXJbMV0/MDpsaVsxXT5tclsxXT8tMToxfSk7bGV0IERyPVN0Lm1hcChfaT0+X2lbMF0pLnNsaWNlKDAsNSkuam9pbigiXG4iKTtoLmV2ZW50U2VydmljZS5zaG93QWJvcnRN''@;'; put 'put ''b2RhbChudWxsLERyKX1yZXR1cm4gaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKX17aC5oZWFkZXJTaG93PVF0LE5uPU5uLm1hcChfaT0+X2kubWFwKGxpPT4ibiI9PT1saS50P2xpLnY6bGkudykpLE5uPU5uLm1hcChfaT0+X2kubWFwKChsaSxtcik9''@;'; put 'put ''PnshbGkmJjAhPT1saSYmKGxpPSIiKSxpc05hTihsaSkmJihsaT1saS5yZXBsYWNlKC8iL2csJyIiJykpLnNlYXJjaCgvLC9nKT4tMSYmKGxpPSciJytsaSsnIicpO2NvbnN0IEVpPWguaGVhZGVyU2hvd1ttcl07cmV0dXJuIm51bWVyaWMiPT09aC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShFaSk/''@;'; put 'put ''LnR5cGUmJigwLHQzLmlzU3BlY2lhbE1pc3NpbmcpKGxpKSYmIWxpLmluY2x1ZGVzKCIuIikmJihsaT0iLiIrbGkpLGxpfSkpLGguZGF0YT1ObjtsZXQgRHI9UXQuam9pbigiLCIpKyJcbiI7aWYoRHIrPU5uLnNsaWNlKDAsaC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQp''@;'; put 'put ''Lm1hcChfaT0+X2kuam9pbigiLCIpKS5qb2luKCJcbiIpLCJXTEFUSU4xIj09PWguZW5jb2Rpbmcpe2xldCBfaT1Mc2UuZGVjb2RlKFJzZS5mcm9tKERyKSwiQ1AtMTI1MiIpLGxpPW5ldyBCbG9iKFtfaV0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxtcj1oLmJsb2JUb0ZpbGUobGksaC5m''@;'; put 'put ''aWxlbmFtZSsiLmNzdiIpO2gudXBsb2FkZXIuYWRkVG9RdWV1ZShbbXJdKX1lbHNle2xldCBfaT1uZXcgQmxvYihbRHJdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSksbGk9aC5ibG9iVG9GaWxlKF9pLGguZmlsZW5hbWUrIi5jc3YiKTtoLnVwbG9hZGVyLmFkZFRvUXVldWUoW2xpXSl9aC5l''@;'; put 'put ''eGNlbEZpbGVSZWFkeT0hMH1pZigwPT09aC5kYXRhLmxlbmd0aClyZXR1cm4gaC5zaG93VXBsb2FkTW9kYWw9ITEsaC51cGxvYWRQcmV2aWV3PSExLGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlRhYmxlIGluIHRoZSBmaWxl''@;'; put 'put ''IGlzIGVtcHR5LiBEYXRhIGZvdW5kIG9uIHNoZWV0OiAiKTtoLmV4Y2VsRmlsZVJlYWR5PSEwLGguZ2V0UGVuZGluZ0V4Y2VsUHJldmlldygpfSk7cmV0dXJuIGZ1bmN0aW9uKEVlKXtyZXR1cm4gd2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxpZS5yZWFkQXNBcnJheUJ1ZmZlcihmKX1l''@;'; put 'put ''bHNlIGlmKCJjc3YiPT09Vy50b0xvd2VyQ2FzZSgpKXtpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PTEvMClyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiRXhjZWwgZmlsZXMgb25seS4gVG8gdW5sb2NrIENTViB1''@;'; put 'put ''cGxvYWRzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCB0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2lmKCJXTEFUSU4xIj09PXRoaXMuZW5jb2Rpbmcpe2xldCBp''@;'; put 'put ''ZT1uZXcgRmlsZVJlYWRlcjtpZS5vbmxvYWQ9d2U9PntsZXQgRWU9THNlLmRlY29kZShSc2UuZnJvbSh3ZS50YXJnZXQucmVzdWx0KSwiQ1AtMTI1MiIpLFplPW5ldyBCbG9iKFtFZV0se3R5cGU6V30pLG90PXRoaXMuYmxvYlRvRmlsZShaZSx0aGlzLmZpbGVuYW1lKTt0aGlzLnVwbG9hZGVy''@;'; put 'put ''LnF1ZXVlLnBvcCgpLHRoaXMudXBsb2FkZXIuYWRkVG9RdWV1ZShbb3RdKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwfSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSxpZS5yZWFkQXNBcnJheUJ1ZmZlcihmKSx0aGlzLmdldEZpbGUoKX1lbHNlIHRoaXMu''@;'; put 'put ''ZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZ2V0RmlsZSgpfWVsc2UgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgY3N2''@;'; put 'put ''IG9yIGV4Y2VsIGZpbGUuJyksdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuZ2V0Rmls''@;'; put 'put ''ZSgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9Z2V0RmlsZSgpe2lmKHRoaXMuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiSW52YWxpZCB2YWx1ZXMgYXJlIHByZXNlbnQuIik7aWYodGhpcy52YWxpZGF0ZVByaW1h''@;'; put 'put ''cnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdm9pZCh0aGlzLnN1Ym1pdD0hMSk7dGhpcy5wa0R1cHM9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSEwO2xldCBhPVtdO2Zvcihjb25zdCBkIG9mIHRoaXMudXBsb2FkZXIucXVl''@;'; put 'put ''dWUpYS5wdXNoKHtmaWxlOmQsZmlsZU5hbWU6ZC5uYW1lfSk7dGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUodGhpcy51cGxvYWRVcmwsYSx7dGFibGU6dGhpcy5saWJkc30pLnRoZW4oZD0+e2lmKHR5cGVvZiBkLnNhc2pzQWJvcnQ+InUiKXtpZih0eXBlb2YgZC5zYXNwYXJhbXM+InUiKXJl''@;'; put 'put ''dHVybjt7dGhpcy51cGxvYWRMb2FkaW5nPSExO2xldCBoPWQuc2FzcGFyYW1zWzBdO3RoaXMuc3VjY2Vzc0VuYWJsZT0hMCx0aGlzLnRhYmxlSWQ9aC5EU0lELHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVJZCl9fWVsc2V7Y29uc3QgaD1kLGY9aC5zYXNq''@;'; put 'put ''c0Fib3J0WzBdLk1TRyxfPWguc2FzanNBYm9ydFswXS5NQUM7dGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1''@;'; put 'put ''ZT0iIiksdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixmLHtTWVNXQVJOSU5HVEVYVDpoLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpoLlNZU0VSUk9SVEVYVCxNQUM6X30pfX0sZD0+e3RoaXMudXBsb2FkTG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxv''@;'; put 'put ''YWQiLGQpfSl9Z2V0UGVuZGluZ0V4Y2VsUHJldmlldygpe3RoaXMucXVlcnlUZXh0U2F2ZWQ9dGhpcy5xdWVyeVRleHQsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5leGNlbFVwbG9hZFN0YXRlPSJQYXJzaW5nIix0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCExKTtsZXQgYT1b''@;'; put 'put ''XTt0aGlzLmRhdGEubWFwKGg9PntsZXQgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKChfLFQpPT57ZltfXT1oW1RdfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFT''@;'; put 'put ''b3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixk''@;'; put 'put ''LnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQ''@;'; put 'put ''cmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19h''@;'; put 'put ''bGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVh''@;'; put 'put ''ZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRT''@;'; put 'put ''YXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVj''@;'; put 'put ''dENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShhKSl9ZmluZFZhbGlkSGVhZGVycyhh''@;'; put 'put ''LGQsaCxmKXtsZXQgXz0hMSxUPVtdLFc9MDtmb3IoO1c8YS5sZW5ndGg7KXtpZighXyYmLTEhPT1kLmluZGV4T2YoYVtXXSkpe2xldCBpZSxnZT0wLHdlPTAsRWU9MCxaZT1bXSxvdD0hMTtmb3IobGV0IGt0PVc7a3Q8YS5sZW5ndGg7a3QrKyl7aWYoIiI9PT1hW2t0XXx8LTEhPT1aZS5pbmRl''@;'; put 'put ''eE9mKGFba3RdKSYmdGhpcy5pc0NvbEhlYWRlcihhW2t0XSkpeyIiPT09YVtrdF0mJihvdD0hMCksaWU9a3Q7YnJlYWt9WmUucHVzaChhW2t0XSl9bGV0IGV0PVtdO3ZvaWQgMCE9PWllPyhldD1hLnNsaWNlKFcsaWUpLEVlPVcsd2U9aWUsb3Q/KGdlPVcsVz1pZSk6KGdlPVcsVz1pZS0xKSk6''@;'; put 'put ''KGV0PWEuc2xpY2UoVyksZ2U9VyxFZT1XLHdlPWEubGVuZ3RoLFc9YS5sZW5ndGgpO2xldCB5dD0hMDtpZihkLmZvckVhY2goa3Q9PnstMT09PWV0LmluZGV4T2Yoa3QpJiYoeXQ9ITEpfSkseXQpe189ITA7bGV0IFN0PWQucmVkdWNlKGZ1bmN0aW9uKHJuLHZuKXtyZXR1cm4gcm5bdm5dPS0x''@;'; put 'put ''LHJufSx7fSksUXQ9YS5zbGljZShnZSx3ZSk7cmV0dXJuIGQuZm9yRWFjaChybj0+e1N0W3JuXT1RdC5pbmRleE9mKHJuKStnZX0pLFshMCxTdF19e2xldCBrdD0kTmUoZXQsZCk7VC5wdXNoKFsiPGI+VEFCKCIrZisiKTwvYj4gLSAiK2t0WzFdLmpvaW4oIiwiKSsiICggbWlzc2luZyAiK2t0''@;'; put 'put ''WzBdLmpvaW4oIiwiKSsiICkiLGt0WzFdLmxlbmd0aF0pfX1XKyt9cmV0dXJuWyExLFRdfWlzQ29sUGsoYSl7cmV0dXJuIHRoaXMuaGVhZGVyUGtzLmluZGV4T2YoYSk+LTF9aXNSZWFkb25seUNvbChhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKT8ucmVhZE9ubHl9aXND''@;'; put 'put ''b2xIZWFkZXIoYSl7cmV0dXJuIHRoaXMuaGVhZGVyQXJyYXkuaW5kZXhPZihhLnRvVXBwZXJDYXNlKCkpPi0xfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9dXBkYXRlRGF0ZVRpbWVDb2xzKGEsZCl7aWYodGhpcy5kYXRlSGVhZGVycy5sZW5ndGg+''@;'; put 'put ''MCl7bGV0IGg9W107dGhpcy5kYXRlSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW19dO2lmKCR6KFQudikpe2NvbnN0IFc9V3ooTnVtYmVyKFQudikpO1Qudj1X''@;'; put 'put ''LmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKFcuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK1cuZ2V0RGF0ZSgpKS5zbGljZSgtMil9ZWxzZSBpZihUJiZULnYmJi0xPT09VC52LnRvU3RyaW5nKCkuaW5kZXhPZigiOiIpKXtjb25zdCBXPW5ldyBEYXRlKFQudik7IkludmFsaWQg''@;'; put 'put ''RGF0ZSIhPT1XLnRvVVRDU3RyaW5nKCkmJihULnY9WXooVykpfWZbX109VH0pfSl9aWYodGhpcy50aW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107dGhpcy50aW1lSGVhZGVycy5mb3JFYWNoKGY9PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZvckVh''@;'; put 'put ''Y2goZj0+e2guZm9yRWFjaChfPT57Y29uc3QgVD1mW19dO2lmKCR6KFQudil8fEZvZShULnYpfHxULnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IFc9V3ooTnVtYmVyKFQudikpO1Qudj1Qb2UoVyl9ZltfXT1UfSl9KX1pZih0aGlzLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MCl7bGV0IGg9W107''@;'; put 'put ''dGhpcy5kYXRlVGltZUhlYWRlcnMuZm9yRWFjaChmPT57LTEhPT1hLmluZGV4T2YoZikmJmgucHVzaChhLmluZGV4T2YoZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2goXz0+e2NvbnN0IFQ9ZltfXTtpZigkeihULnYpfHxGb2UoVC52KSl7bGV0IFc9V3ooTnVtYmVyKFQudikpO1Qudj1Z''@;'; put 'put ''eihXKSsiICIrUG9lKFcpfWVsc2V7aWYoLTE9PT1ULnYuaW5kZXhPZigiICIpJiYtMSE9PVQudi5pbmRleE9mKCI6Iikpe2xldCBpZT1ULnYuc3Vic3RyaW5nKDAsVC52LmluZGV4T2YoIjoiKSk7aWU9aWUrIiAiK1Qudi5zdWJzdHJpbmcoVC52LmluZGV4T2YoIjoiKSsxKSxULnY9aWV9bGV0''@;'; put 'put ''IFc9bmV3IERhdGUoVC52KTsiSW52YWxpZCBEYXRlIiE9PVcudG9VVENTdHJpbmcoKSYmKFQudj1ZeihXKSsiICIrKGM9PntsZXQgbD0oIjAiK2MuZ2V0SG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitj''@;'; put 'put ''LmdldFNlY29uZHMoKSkuc2xpY2UoLTIpLGx9KShXKSl9ZltfXT1UfSl9KX1yZXR1cm4gZH11cGRhdGVYTFJ1bGVDb2xzKGEsZCl7aWYodGhpcy54bFJ1bGVzLmxlbmd0aD4wKXtjb25zdCBoPVtdO3RoaXMueGxSdWxlcy5mb3JFYWNoKGY9PnstMSE9PWEuaW5kZXhPZihmLlhMX0NPTFVNTikm''@;'; put 'put ''JihmLmluZGV4PWEuaW5kZXhPZihmLlhMX0NPTFVNTiksaC5wdXNoKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKF89Pntjb25zdCBUPWZbXy5pbmRleF07IkZPUk1VTEEiPT09Xy5YTF9SVUxFJiYiZiJpbiBUJiYoIm4iPT09VC50P1Qudj0iPSIrVC5mOlQudz0iPSIrVC5mKSxmW19d''@;'; put 'put ''PVR9KX0pfXJldHVybiBkfWJsb2JUb0ZpbGUoYSxkKXtjb25zdCBoPWE7cmV0dXJuIGgubGFzdE1vZGlmaWVkRGF0ZT1uZXcgRGF0ZSxoLm5hbWU9ZCxofXRvQnN0cihhKXtsZXQgZD1uZXcgVWludDhBcnJheShhKSxoPSIiLGY9ZC5ieXRlTGVuZ3RoO2ZvcihsZXQgXz0wO188ZjtfKyspaCs9''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZShkW19dKTtyZXR1cm4gaH1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2''@;'; put 'put ''b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybigiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmKEduLmVkaXRvci5maWx0ZXIuY2xhdXNlcz1bXSxHbi5l''@;'; put 'put ''ZGl0b3IuZmlsdGVyLnF1ZXJ5PVtdLEduLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0''@;'; put 'put ''IFQ9ZltfXS5lbGVtZW50cztkPVQuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBudWxsPT09Vy52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goVCl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAh''@;'; put 'put ''PT1hLmNsYXVzZXMmJmEubGliZHMpe2NvbnN0IGY9e2dyb3VwTG9naWM6YS5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTthLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChUPT57Y29uc3QgVz17ZmlsdGVyQ2xhdXNlczpbXX07VC5lbGVtZW50cy5mb3JFYWNoKGllPT57Vy5m''@;'; put 'put ''aWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShpZSkpfSksVy5jbGF1c2VMb2dpYz1ULmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShXKSl9KTtjb25zdCBfPWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZp''@;'; put 'put ''bHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsXykudGhlbihUPT57YS5xdWVyeUZpbHRlcj17aWQ6VC5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOlQucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIv''@;'; put 'put ''Il0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJl''@;'; put 'put ''c2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goVD0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaChmKXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1mfX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMu''@;'; put 'put ''Y2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxkKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBo''@;'; put 'put ''PXRoaXMuaG90SW5zdGFuY2U7bGV0IGY9aC5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLF89Zi5nZXRTb3J0Q29uZmlnKCksVD1BcnJheS5pc0FycmF5KF8pP186W19dO3NldFRpbWVvdXQoKCk9PnthfHwodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkPXRoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKSxkJiZ0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQucG9wKCkpLHRoaXMuaG90VGFibGUucmVhZE9ubHk9ITEsdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSxoLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxl''@;'; put 'put ''LnJlYWRPbmx5fSwhMSksaC5yZW5kZXIoKTtmb3IobGV0IFcgb2YgVClmLnNvcnQoVyk7dGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCl9LDApfWNvbnZlcnRUb0NvcnJlY3RUeXBlcyhhKXtmb3IobGV0IGQgb2YgYSlmb3IobGV0IGggaW4gZCl7bGV0IGY9dGhpcy5jb2xzLmZpbmQo''@;'; put 'put ''Xz0+Xy5OQU1FPT09aCk7ZiYmIiIhPT1kW2hdJiYibnVtIj09PWYuVFlQRSYmIWYuRERUWVBFLmluY2x1ZGVzKCJUSU1FIikmJiFmLkREVFlQRS5pbmNsdWRlcygiREFURSIpJiYoZFtoXT1wYXJzZUludChkW2hdKSl9fWNhbmNlbEVkaXQoKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4''@;'; put 'put ''dE1lbnUiLCExKSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlPVtdO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNl''@;'; put 'put ''VW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3Jl''@;'; put 'put ''YWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGxldCBfIG9mIGYpZC5zb3J0KF8pO3RoaXMuY2hlY2tSb3dMaW1pdCgpfWhvdENsaWNrZWQoKXsxPT09dGhpcy50''@;'; put 'put ''aW1lc0NsaWNrZWQmJnRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCksMD09PXRoaXMudGltZXNDbGlja2VkJiYodGhpcy50aW1lc0NsaWNrZWQrKyxzZXRUaW1lb3V0KCgpPT57dGhpcy50aW1lc0NsaWNrZWQ9MH0sMjAwKSl9Y2xlYW5FeGNlZWQoKXt0aGlzLmV4Y2Vl''@;'; put 'put ''ZENlbGxzPVtdfWFwcHJvdmVyc1RvZ2dsZSgpe3RoaXMuc2hvd0FwcHJvdmVycz0hdGhpcy5zaG93QXBwcm92ZXJzfWFkZFJvdygpe3RoaXMuYWRkaW5nTmV3Um93PSEwLHNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGQ9dGhpcy5kYXRhU291cmNlLmxlbmd0''@;'; put 'put ''aDthLmFsdGVyKCJpbnNlcnRfcm93X2JlbG93IixkLDEpLGEudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS5zZWxlY3RDZWxsKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwwKSxhLnJlbmRlcigpLHRoaXMuZGF0YVNvdXJjZVtkXSYmKHRoaXMuZGF0YVNvdXJj''@;'; put 'put ''ZVtkXS5ub0xpbmtPcHRpb249ITApLHRoaXMuYWRkaW5nTmV3Um93PSExLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSl9Y2FuY2VsU3VibWl0KCl7dGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0''@;'; put 'put ''KSx0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9W10sdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29s''@;'; put 'put ''dW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGQsaCl7cmV0dXJuIDA9PT1oPzYwOmQ+NTAwPzUwMDpkfX0sITEpLGEuc2VsZWN0Q2VsbCgwLDApLGEucmVuZGVyKCksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpLHRoaXMucmVT''@;'; put 'put ''ZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfWdldFJvd3NTdWJtaXR0aW5nQ291bnQoKXt0aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5kZWJ1ZyYmKHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5kYXRhU291cmNlKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNv''@;'; put 'put ''dXJjZVVuY2hhbmdlZCkpO2xldCBhPTAsZD0wLGg9MDt0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLmRhdGFNb2RpZmllZD1bXTtmb3IobGV0IGY9MDtmPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7ZisrKXtsZXQgXz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0''@;'; put 'put ''YVNvdXJjZVtmXSk7aWYoIlllcyI9PT1fLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0aGlzLmRhdGFNb2RpZmllZC5wdXNoKF8pLGQrKztlbHNle2xldCBUPXRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5maW5kKFc9Pntmb3IobGV0IGllIG9mIHRoaXMuaGVhZGVyUGtzKWlmKFdb''@;'; put 'put ''aWVdIT09X1tpZV0pcmV0dXJuITE7cmV0dXJuITB9KTtUP0pTT04uc3RyaW5naWZ5KF8pIT09SlNPTi5zdHJpbmdpZnkoVCkmJih0aGlzLmRhdGFNb2RpZmllZC5wdXNoKF8pLHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLnB1c2goZiksYSsrKToodGhpcy5kYXRhTW9kaWZpZWQucHVzaChfKSx0''@;'; put 'put ''aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGgrKyl9fXRoaXMucm93c0NoYW5nZWQ9e3Jvd3NVcGRhdGVkOmEscm93c0RlbGV0ZWQ6ZCxyb3dzQWRkZWQ6aH19dmFsaWRhdGVQcmltYXJ5S2V5cygpe2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTtsZXQgZD1hLmdldERhdGEoKTt0aGlz''@;'; put 'put ''LnBrRmllbGRzPVtdO2ZvcihsZXQgVD0wO1Q8ZC5sZW5ndGg7VCsrKXtsZXQgVz0iIjtmb3IobGV0IGllPTE7aWU8dGhpcy5yZWFkT25seUZpZWxkcysxO2llKyspVz1XKyJ8IitkW1RdW2llXTt0aGlzLnBrRmllbGRzLnB1c2goVyl9bGV0IF8saD1bXSxmPXRoaXMuZGF0YVNvdXJjZS5sZW5n''@;'; put 'put ''dGg7Zm9yKGxldCBUPTA7VDx0aGlzLnBrRmllbGRzLmxlbmd0aDtUKyspZm9yKGxldCBXPTA7Vzx0aGlzLnBrRmllbGRzLmxlbmd0aDtXKyspdGhpcy5wa0ZpZWxkc1tUXT09PXRoaXMucGtGaWVsZHNbV10mJlchPT1UJiZoLnB1c2goVyk7aWYodGhpcy5wa0ZpZWxkcy5sZW5ndGg+Zilmb3Io''@;'; put 'put ''bGV0IFQ9ZjtUPHRoaXMucGtGaWVsZHMubGVuZ3RoO1QrKylmb3IobGV0IFc9ZjtXPHRoaXMucGtGaWVsZHMubGVuZ3RoO1crKylUPFcmJnRoaXMucGtGaWVsZHNbVF09PT10aGlzLnBrRmllbGRzW1ddJiZoLnB1c2goVyk7Zm9yKGxldCBUPTA7VDxoLmxlbmd0aDtUKyspZm9yKGxldCBXPTE7''@;'; put 'put ''Vzx0aGlzLnJlYWRPbmx5RmllbGRzKzE7VysrKV89YS5nZXRDZWxsTWV0YShoW1RdLFcpLF8udmFsaWQ9ITEsXy5kdXBLZXk9ITAsYS5yZW5kZXIoKTt0aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcz1bLi4ubmV3IFNldChoLnNvcnQoKSldfXJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoYT0hMSxk''@;'; put 'put ''KXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7Zm9yKGxldCBmIG9mIHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Upe2NvbnN0IF89Zi52YWx1ZXMubWFwKFQ9PlRbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtoLmJhdGNoKCgpPT57Y29uc3QgVD1oLmdldENlbGxNZXRh''@;'; put 'put ''KGYucm93LGYuY29sKSxXPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoVC5kYXRhfHwiIik7bGV0IGllO1cmJihpZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKFcpKSxpZXx8KGllPVtdKTtjb25zdCBnZT1bLi4ubmV3IFNldChbLi4uaWUsLi4uX10pXTt0aGlzLmN1''@;'; put 'put ''cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHtzb3VyY2U6Z2V9KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzb3VyY2UiLGdlKSxmLnZhbHVlcy5sZW5ndGg+MCYmKGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInJlbmRlcmVyIiwiYXV0b2NvbXBsZXRl''@;'; put 'put ''IiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlk''@;'; put 'put ''YXRvcj8udXBkYXRlUnVsZShmLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUiLHN0cmljdDpmLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoZix2b2lkIDAsYSxkKSxoLnJlbmRlcigpfSl9''@;'; put 'put ''fXJlU2V0RXh0ZW5kZWRDZWxsVmFsaWRhdGlvblZhbHVlcyhhLGQsaD0hMSxmKXtpZihhKXtkfHwoZD1hLnJvdyk7Y29uc3QgVD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLFQsaCxmKX1lbHNlIGZvcihsZXQg''@;'; put 'put ''VCBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBXPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShUKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhULFQucm93LFcsaCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsXyl7Y29u''@;'; put 'put ''c3QgVD10aGlzLmhvdEluc3RhbmNlO2xldCBXPVtdO2ZvcihsZXQgaWUgb2YgaClXLmluZGV4T2YoaWUuRVhUUkFfQ09MX05BTUUpPDAmJlcucHVzaChpZS5FWFRSQV9DT0xfTkFNRSk7Zm9yKGxldCBpZSBvZiBXKXtjb25zdCBnZT1oLmZpbHRlcihTdD0+U3QuRVhUUkFfQ09MX05BTUU9PT1p''@;'; put 'put ''ZSk7bGV0IHdlPWdlLm1hcChTdD0+IkMiPT09U3QuRElTUExBWV9UWVBFP1N0LlJBV19WQUxVRV9DSEFSOlN0LlJBV19WQUxVRV9OVU0pO2NvbnN0IEVlPVQucHJvcFRvQ29sKGllKTt0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChTdD0+U3Qucm93PT09''@;'; put 'put ''ZCYmU3QuY29sPT09RWUpfHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmQsY29sOkVlLGFjdGl2ZTohMX0pLFQuc2V0Q2VsbE1ldGEoZCxFZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxULnNldENlbGxNZXRhKGQsRWUsImVkaXRvciIs''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIpLFQuc2V0Q2VsbE1ldGEoZCxFZSwic3RyaWN0IixhLnN0cmljdCksVC5zZXRDZWxsTWV0YShkLEVlLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKEVlLHtyZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6''@;'; put 'put ''ImF1dG9jb21wbGV0ZSIsc3RyaWN0OmEuc3RyaWN0LGZpbHRlcjohMX0pO2NvbnN0IG90PVQuZ2V0Q2VsbE1ldGEoZCxFZSksZXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShvdC5kYXRhfHwiIik7bGV0IHl0O2V0JiYoeXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJj''@;'; put 'put ''ZShldCkpLHl0fHwoeXQ9W10pLCJudW1lcmljIj09PWV0Py50eXBlPyh5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJudW1iZXIiKSx3ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHdlLCJudW1iZXIiKSk6KHl0PXRoaXMuaGVscGVy''@;'; put 'put ''U2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsInN0cmluZyIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsInN0cmluZyIpKTtjb25zdCBrdD1bLi4ubmV3IFNldChbLi4ueXQsLi4ud2VdKV07aWYoVC5zZXRDZWxsTWV0YShkLEVlLCJzb3VyY2UiLGt0''@;'; put 'put ''KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKEVlLHtzb3VyY2U6a3R9KSxmKXtpZihfJiZfIT09ZClyZXR1cm47Y29uc3QgU3Q9Z2UuZmluZChRdD0+MT09PVF0LkZPUkNFX0ZMQUcpO1N0JiZzZXRUaW1lb3V0KCgpPT57VC5zZXREYXRhQXRDZWxsKGQsRWUs''@;'; put 'put ''IkMiPT09U3QuRElTUExBWV9UWVBFP1N0LlJBV19WQUxVRV9DSEFSOlN0LlJBV19WQUxVRV9OVU0sImZvcmNlX2NlbGxfdmFsaWRhdGlvbl92YWx1ZSIpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD09PWQmJih0aGlzLmRhdGFTb3VyY2VbdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4''@;'; put 'put ''XVtpZV09IkMiPT09U3QuRElTUExBWV9UWVBFP1N0LlJBV19WQUxVRV9DSEFSOlN0LlJBV19WQUxVRV9OVU0pfSl9fX1nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEsZCl7Y29uc3QgZj10aGlzLmhvdEluc3RhbmNlLmdldERhdGFBdENlbGwoZHx8YS5yb3csYS5jb2wpLF89KGEudmFs''@;'; put 'put ''dWVzLmZpbmQoZ2U9PmdlW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXT09PWYpfHxbXSlbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5ESVNQTEFZX0lOREVYXSxUPWEuZXh0ZW5kZWRfdmFsdWVzPy5maWx0ZXIoZ2U9PmdlWzBdPT09XyksVz10aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGVlcENsb25lKHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcyksaWU9W107Zm9yKGxldCBnZSBvZiBUfHxbXSl7bGV0IHdlPXt9O2ZvcihsZXQgRWUgb2YgT2JqZWN0LmtleXMoVykpd2VbRWVdPWdlW1dbRWVdXTtpZS5wdXNoKHdlKX1yZXR1cm4gaWV9Y2hlY2tTYXZlKCl7''@;'; put 'put ''aWYodGhpcy5nZXRSb3dzU3VibWl0dGluZ0NvdW50KCksMD09PXRoaXMucm93c0NoYW5nZWQucm93c0FkZGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQpcmV0dXJuIHRoaXMuYmFkRWRpdFRpdGxlPSJObyBjaGFu''@;'; put 'put ''Z2VzIHRvIHN1Ym1pdCIsdGhpcy5iYWRFZGl0Q2F1c2U9IlBsZWFzZSBtb2RpZnkgc29tZSB2YWx1ZXMgYW5kIHRyeSBhZ2Fpbi4iLHZvaWQodGhpcy5iYWRFZGl0PSEwKTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7dGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PXRoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlKTtmb3IobGV0IGg9MDtoPHRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7aCsrKWRlbGV0ZSB0aGlzLmRhdGFTb3VyY2VbaF0ubm9MaW5rT3B0aW9uO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhp''@;'; put 'put ''cy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihoLGYpe3JldHVybiBoPjUwMD81MDA6aH19LCExKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKSxjLmNudD0wLGMubm9uUGtDbnQ9MDtsZXQgZD1hLmdldERh''@;'; put 'put ''dGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3coZC5sZW5ndGgtMSkmJmEuYWx0ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRo''@;'; put 'put ''aXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJv''@;'; put 'put ''ciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZvcm1GaWVsZHNfOCIpLmZvY3VzKCl9KSl9KX1zYXZlVGFibGUoYSl7dmFyIGQ9dGhpczty''@;'; put 'put ''ZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoZC5ob3RJbnN0YW5jZS5nZXREYXRhKCksYT0oYT1hLmZpbHRlcihfPT4hIWQuZGF0YU1vZGlmaWVkLmZpbmQoVz0+e2ZvcihsZXQgaWUgb2YgZC5oZWFkZXJQa3MpaWYoV1tpZV0hPT1fW2llXSlyZXR1cm4hMTtyZXR1cm4hMH0pKSkubWFwKF89Pnts''@;'; put 'put ''ZXQgVD1fLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIF8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLF8uX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPVQsT2JqZWN0LmtleXMoXykubWFwKFc9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRh''@;'; put 'put ''dG9yPy5nZXRSdWxlKFcpPy50eXBlJiYiLiI9PT1fW1ddJiYoX1tXXT1udWxsKX0pLF99KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIs''@;'; put 'put ''IkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2''@;'; put 'put ''ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2xldCBfPXtBQ1RJT046IkxPQUQifTtpZihkLm1lc3NhZ2U9ZC5tZXNzYWdlLnJlcGxhY2UoL1xuL2csIi4gIiksXy5NRVNTQUdFPWQubWVzc2FnZSxfLkxJQkRTPWQubGliZHMsZC5jb2xzKXtjb25zdCBUPWEuc2xp''@;'; put 'put ''Y2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7aWYoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoXyxULCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL3N0YWdlZGF0YSIsZC4kZGF0YUZvcm1hdHMpLnRoZW4oaWU9PntpZih0eXBlb2YgaWUu''@;'; put 'put ''c2FzcGFyYW1zPCJ1IilyZXR1cm4gZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIraWUuc2FzcGFyYW1zWzBdLkRTSUQpLCEwO2xldCBnZT0iU3VibWl0IHJlcXVlc3QgZmFpbGVkIjtpZSYmKGdlKz1gXG4keyJzdHJpbmciPT10eXBlb2YgaWU/aWU6SlNPTi5zdHJpbmdpZnkoaWUp''@;'; put 'put ''fWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsZ2UsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChpZT0+e2NvbnNvbGUubG9nKCJlcnIiLGllKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVTdWJtaXQ9ITAsZC5zdWJtaXQ9ITE7''@;'; put 'put ''bGV0IGdlPSJzdHJpbmciPT10eXBlb2YgaWU/aWU6SlNPTi5zdHJpbmdpZnkoaWUpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVzdCBmYWlsZWRcbiR7Z2V9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJl''@;'; put 'put ''dHVybn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0p''@;'; put 'put ''KCl9dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZpcnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFs''@;'; put 'put ''aWQiKS5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlk''@;'; put 'put ''YXRvcj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0s''@;'; put 'put ''ITEpKX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0IF89dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxUPSJu''@;'; put 'put ''dW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsVz0oMCx0My5pc1NwZWNpYWxNaXNzaW5nKShfKTtUJiYhaXNOYU4oXykmJiFXJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKl8pfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhp''@;'; put 'put ''cy5ob3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJl''@;'; put 'put ''Y29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRS''@;'; put 'put ''ZWNvcmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJ''@;'; put 'put ''bmRleC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQi''@;'; put 'put ''KTp0aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRS''@;'; put 'put ''ZWNvcmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVj''@;'; put 'put ''b3JkKSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3Ip''@;'; put 'put ''LGgpdGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRh''@;'; put 'put ''QXRSb3coZCkpO2ZvcihsZXQgXyBvZiBmKWlmKF8pe2NvbnN0IFQ9Xy5wcm9wPy50b1N0cmluZygpO2RlbGV0ZSBfLnByb3AsZGVsZXRlIF8uZGF0YSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKF8uY29sLHsuLi5fLGRhdGE6VH0pfX10aGlzLmN1cnJlbnRF''@;'; put 'put ''ZGl0UmVjb3JkSW5kZXg9ZCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlW2RdKX19dG9nZ2xlSG90UGx1Z2luKGEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2guYmF0Y2goKCk9PntsZXQgZj1oLmdldFBsdWdp''@;'; put 'put ''bihhKTtmPyhzZXRUaW1lb3V0KCgpPT57ZD9mLmVuYWJsZVBsdWdpbigpOmYuZGlzYWJsZVBsdWdpbigpfSwxMDApLGgucmVuZGVyKCkpOmNvbnNvbGUud2FybigiVG9nZ2xlIEhvdCBQbHVnaW4gZmFpbGVkIC0gUGx1Z2luIG5hbWVkOiAiK2ErIiAtIGNvdWxkIG5vdCBiZSBmb3VuZC4iKX0p''@;'; put 'put ''fWR5bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCl7cmV0dXJuISF0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChmPT5mLnJvdz09PWEmJmYuY29sPT09ZCYmIWYuYWN0aXZlKX1keW5hbWljQ2VsbFZhbGlkYXRpb24oYSxkKXtpZih0aGlzLmR5''@;'; put 'put ''bmFtaWNDZWxsVmFsaWRhdGlvbkRpc2FibGVkKGEsZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtpZihoLmdldENlbGxNZXRhKGEsZCkucmVhZE9ubHkpcmV0dXJuO2NvbnN0IF89aC5nZXREYXRhQXRDZWxsKGEsZCksVD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRo''@;'; put 'put ''aXMuZGF0YVNvdXJjZVthXSksVz1PYmplY3Qua2V5cyhUKVtkXSxpZT10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goVCxbVywibm9MaW5rT3B0aW9uIl0sITEpLGdlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KHdlPT53ZS5oYXNoPT09aWUpO2lmKGdl''@;'; put 'put ''Pi0xKXtsZXQgd2U9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtnZV0udmFsdWVzLm1hcChvdD0+b3RbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKTtjb25zdCBFZT0oaC5nZXRDZWxsTWV0YShhLGQpLnNvdXJjZXx8W10pLmxlbmd0aDwxLFplPSIgIiE9PV87aC5iYXRj''@;'; put 'put ''aCgoKT0+e2NvbnN0IG90PWguZ2V0Q2VsbE1ldGEoYSxkKSxldD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKG90LmRhdGF8fCIiKTtsZXQgeXQ7ZXQmJih5dD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKGV0KSkseXR8fCh5dD1bXSksIm51bWVyaWMiPT09ZXQ/LnR5''@;'; put 'put ''cGU/KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsIm51bWJlciIpLHdlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMod2UsIm51bWJlciIpKTooeXQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwic3RyaW5n''@;'; put 'put ''Iiksd2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh3ZSwic3RyaW5nIikpO2NvbnN0IGt0PVsuLi5uZXcgU2V0KFsuLi55dCwuLi53ZV0pXTtpZihoLnNldENlbGxNZXRhKGEsZCwic291cmNlIixrdCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBk''@;'; put 'put ''YXRlUnVsZShkLHtzb3VyY2U6a3R9KSx0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2dlXS52YWx1ZXMubGVuZ3RoPjApe2NvbnN0IFN0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZ2VdLnN0cmljdDtoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNl''@;'; put 'put ''dENlbGxNZXRhKGEsZCwiZWRpdG9yIiwiYXV0b2NvbXBsZXRlIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIsU3QpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJhdXRvY29t''@;'; put 'put ''cGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlIixzdHJpY3Q6U3QsZmlsdGVyOiExfSl9dGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXModGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtnZV0sYSxFZSYmWmUpLGgucmVuZGVyKCl9KX1pZihnZTwwKXtjb25zdCB3ZT17U0FT''@;'; put 'put ''Q29udHJvbFRhYmxlOlt7bGliZHM6dGhpcy5saWJkcyx2YXJpYWJsZV9ubTpXfV0sc291cmNlX3JvdzpbVF19LEVlPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscyhXKS5maW5kKFplPT4iU09GVFNFTEVDVF9IT09LIj09PVplLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1RfSE9PSyI9PT1a''@;'; put 'put ''ZS5SVUxFX1RZUEUpO0VlJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5wdXNoKHtyb3c6YSxjb2w6ZCxzdHJpY3Q6IkhBUkRTRUxFQ1RfSE9PSyI9PT1FZS5SVUxFX1RZUEUsdmFsdWVzOltdLGhhc2g6aWUsY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGgu''@;'; put 'put ''c2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsS05lKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIix3ZSx2b2lkIDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0''@;'; put 'put ''TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKFplPT57aWYoWmUuZHluYW1pY192YWx1ZXMubWFwKGV0PT5ldFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pLmxlbmd0aD4wKXtjb25zdCBldD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZp''@;'; put 'put ''bmRJbmRleCh5dD0+eXQuaGFzaD09PWllKTtldD4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZXRdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2V0XSxyb3c6YSxjb2w6ZCx2YWx1ZXM6WmUuZHluYW1pY192YWx1ZXMsZXh0ZW5kZWRfdmFsdWVzOlplLmR5bmFtaWNfZXh0''@;'; put 'put ''ZW5kZWRfdmFsdWVzfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixHeiksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRj''@;'; put 'put ''aCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixHeiksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdz''@;'; put 'put ''LnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGg+dGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdCl7Y29uc3QgZXQ9dGhpcy5jZWxsVmFsaWRh''@;'; put 'put ''dGlvblNvdXJjZS5yZWR1Y2UoKGt0LFN0KT0+a3QuY291bnQ8U3QuY291bnQ/a3Q6U3QpLHl0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuaW5kZXhPZihldCk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoeXQsMSl9fSkuY2F0Y2goWmU9Pntjb25zdCBvdD10aGlzLmNlbGxW''@;'; put 'put ''YWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChldD0+ZXQuaGFzaD09PWllKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShvdCwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixxTmUpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3Jk''@;'; put 'put ''TG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixHeiksaC5yZW5kZXIoKSx0aGlzLmN1''@;'; put 'put ''cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YoZCksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiZ2V0ZHluYW1pY2NvbHZhbHMgZXJyb3I6IixaZSl9''@;'; put 'put ''KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxlbmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFibGUuZGF0YVswXVt0aGlzLmhlYWRlclBr''@;'; put 'put ''c1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKGEpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCxhLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoYSxk''@;'; put 'put ''LGgpe2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtoXSxbYSwibm9MaW5rT3B0aW9uIl0pLF89dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kKFQ9PlQuaGFzaD09PWYmJmQ9PT1ULmNvbCk7aWYoXyYmXy5leHRlbmRlZF92''@;'; put 'put ''YWx1ZXMmJl8uZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCBUPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShfLGgpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKF8saCxULCEwKX19dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90''@;'; put 'put ''YWxSb3dzQ2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2''@;'; put 'put ''aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1ofSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2Jq''@;'; put 'put ''KX0pO2xldCBkPXt9O3R5cGVvZiBhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW08InUiJiYoYS5saWJkcz1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sYS5maWx0ZXJfcGs9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQsImVkaXQtcmVjb3JkIj09PWEucm91dGUu''@;'; put 'put ''c25hcHNob3QudXJsWzBdLnBhdGgmJihhLnJlY29yZEFjdGlvbj10eXBlb2YgYS5maWx0ZXJfcGs8InUiPyJFRElUIjoiQUREIiksZC5MSUJEUz1hLmxpYmRzLHR5cGVvZiBhLmZpbHRlcl9wazwidSImJihkLkZJTFRFUl9SSz1wYXJzZUludChhLmZpbHRlcl9waykpLGQuT1VUREVTVD0iV0VC''@;'; put 'put ''IixhLmxpYmRzJiYoR24uZWRpdG9yLmxpYnJhcnk9YS5saWJkcy5zcGxpdCgiLiIpWzBdLEduLmVkaXRvci50YWJsZT1hLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxhLmxpYmRzJiYoYS5nZXRkYXRhRXJyb3I9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2UoZCwiU0FTQ29u''@;'; put 'put ''dHJvbFRhYmxlIiwiZWRpdG9ycy9nZXRkYXRhIixhLmxpYmRzKS50aGVuKGg9PnthLmluaXRTZXR1cChoKX0pLmNhdGNoKGg9PnthLmdldGRhdGFFcnJvcj0hMCxhLnRhYmxlVHJ1ZT0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fWluaXRTZXR1cChhKXtpZih0aGlzLmhvdEluc3RhbmNl''@;'; put 'put ''PXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmdldGRhdGFFcnJvcnx8IWF8fCFhLmRhdGEpcmV0dXJuO3RoaXMuY29scz1hLmRhdGEuY29scyx0aGlzLmRzbWV0YT1hLmRhdGEuZHNtZXRhO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZSxoPWEuZGF0''@;'; put 'put ''YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxldCBhIG9mIGMpIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksaC5mb3JFYWNoKF89''@;'; put 'put ''Pnt0aGlzLmFwcHJvdmVycy5wdXNoKF8uUEVSU09OTkFNRSl9KSx0aGlzLnRhYmxlVHJ1ZT0hMCx0aGlzLmxpYmRzPWEubGliZHMsdGhpcy5ob3RUYWJsZS5kYXRhPWEuZGF0YS5zYXNkYXRhLHRoaXMuaGVhZGVyQ29sdW1ucz1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQo''@;'; put 'put ''IiwiKSx0aGlzLmhlYWRlclBrcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hIWEuZGF0YS5zYXNwYXJhbXNbMF0uQ0xTX0ZMQUcsdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZyYmdGhpcy5zZXRSZXN0cmljdGlvbnMo''@;'; put 'put ''e3Jlc3RyaWN0QWRkUm93OiEwLHJlbW92ZUVkaXRSZWNvcmRCdXR0b246ITAscmVtb3ZlQWRkUmVjb3JkQnV0dG9uOiEwfSksdGhpcy5jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpLC0xIT09dGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19f''@;'; put 'put ''XyIpJiYodGhpcy5oZWFkZXJDb2x1bW5zW3RoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKV09IkRlbGV0ZT8iKSx0aGlzLmhlYWRlckFycmF5PXRoaXMuaGVhZGVyQ29sdW1ucy5zbGljZSgxKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNb''@;'; put 'put ''MF0uRFRWQVJTJiYodGhpcy5kYXRlSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTJiYodGhpcy50aW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUy5zcGxpdCgiICIpKSwiIiE9PWEu''@;'; put 'put ''ZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMmJih0aGlzLmRhdGVUaW1lSGVhZGVycz1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTLnNwbGl0KCIgIikpLGEuZGF0YS54bF9ydWxlcy5sZW5ndGg+MCYmKHRoaXMueGxSdWxlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGEuZGF0''@;'; put 'put ''YS54bF9ydWxlcykpLHRoaXMuZGNWYWxpZGF0b3I9bmV3IFpOZShhLmRhdGEuc2FzcGFyYW1zWzBdLGEuZGF0YS4kc2FzZGF0YSx0aGlzLmNvbHMsYS5kYXRhLmRxcnVsZXMsYS5kYXRhLmRxZGF0YSksdGhpcy5jZWxsVmFsaWRhdGlvbj10aGlzLmRjVmFsaWRhdG9yLmdldFJ1bGVzKCksdGhp''@;'; put 'put ''cy5kYXRhU291cmNlPWEuZGF0YS5zYXNkYXRhLHRoaXMuJGRhdGFGb3JtYXRzPWEuZGF0YS4kc2FzZGF0YTtmb3IobGV0IF89MDtfPHRoaXMuaGVhZGVyQ29sdW1ucy5sZW5ndGg7XysrKXRoaXMuaG90RGF0YVNjaGVtYVt0aGlzLmNlbGxWYWxpZGF0aW9uW19dLmRhdGFdPVlOZSh0aGlzLmNl''@;'; put 'put ''bGxWYWxpZGF0aW9uW19dLnR5cGUsdGhpcy5jZWxsVmFsaWRhdGlvbltfXSk7dGhpcy5jaGVja1Jvd0xpbWl0KCksZC51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLGhl''@;'; put 'put ''aWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxmb3JtdWxhczp0aGlzLmhvdFRhYmxlLmZvcm11bGFzLHN0cmV0Y2hIOiJhbGwiLHJlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksaGlkZGVuQ29sdW1uczp7aW5kaWNhdG9yczohMCxjb2x1bW5zOnRoaXMuZGNWYWxpZGF0b3IuZ2V0SGlk''@;'; put 'put ''ZGVuQ29sdW1ucygpfSxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihfLFQpe3JldHVybiAwPT09VD82MDpfPjUwMD81MDA6X30sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVz''@;'; put 'put ''aXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Xz0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxv''@;'; put 'put ''d2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6''@;'; put 'put ''InRlc3QgaW5mbyIscmVuZGVyZXI6KF8sVCxXLGllLGdlLHdlKT0+e2NvbnN0IEVlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgWmUsb3Q9Ik5vIGluZm8gZm91bmQiO2lmKHRoaXMuaG90SW5zdGFuY2Upe2NvbnN0IGV0PXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQo''@;'; put 'put ''KXx8W10seXQ9ZXQ/ZXRbMF1bMV06LTEsa3Q9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKHl0KTtaZT10aGlzLiRkYXRhRm9ybWF0cz8udmFyc1trdF0sWmUmJihvdD1gTEFCRUw6ICR7WmU/LmxhYmVsfTxicj5UWVBFOiAke1plPy50eXBlfTxicj5MRU5HVEg6ICR7WmU/Lmxlbmd0aH08''@;'; put 'put ''YnI+Rk9STUFUOiAke1plPy5mb3JtYXR9YCl9cmV0dXJuIEVlLmlubmVySFRNTD1vdCxFZX19fX0sZGF0YVNjaGVtYTp0aGlzLmhvdERhdGFTY2hlbWEsY29udGV4dE1lbnU6dGhpcy5ob3RUYWJsZS5zZXR0aW5ncy5jb250ZXh0TWVudSxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXN0b21I''@;'; put 'put ''IixhZnRlckdldENvbEhlYWRlcjooXyxUKT0+e2NvbnN0IFc9dGhpcy5jb2x1bW5IZWFkZXJbX10saWU9VyYmdGhpcy5pc0NvbFBrKFcpLGdlPVcmJnRoaXMuaXNSZWFkb25seUNvbChXKTtpZSYmVC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxnZSYmIWllJiZULmNs''@;'; put 'put ''YXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1fJiZULmNsYXNzTGlzdC5hZGQoImZpcnN0Q29sdW1uSGVhZGVyU3R5bGUiKX0sYWZ0ZXJHZXRDZWxsTWV0YTooXyxULFcpPT57VCYmdGhpcy5pc1JlYWRvbmx5Q29sKFQpJiYoVy5jbGFzc05hbWU9InJlYWRvbmx5Q2VsbCIpfX0sITEp''@;'; put 'put ''LHRoaXMuaG90VGFibGUuaGlkZGVuPSExLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpLHRoaXMucXVlcnlUZXh0PWEuZGF0YS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQsdGhpcy5jb2x1bW5IZWFkZXI9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0''@;'; put 'put ''KCIsIiksdGhpcy5jb2x1bW5IZWFkZXJbMF09IkRlbGV0ZT8iLHRoaXMucmVhZE9ubHlGaWVsZHM9YS5kYXRhLnNhc3BhcmFtc1swXS5QS0NOVDtsZXQgZj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtmJiZmLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsXz0+''@;'; put 'put ''e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5ob3RDbGlja2VkKCksc2V0VGltZW91dCgoKT0+e2xldCBUPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7VCYmVC5jbGljaygpfSwxMDApfSksZC5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKF8s''@;'; put 'put ''VCxXLGllLGdlLHdlKT0+e189PT1XJiZUPT09aWUmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24oXyxUKX0pLGQuYWRkSG9vaygiYmVmb3JlS2V5RG93biIsXz0+e2NvbnN0IFQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLFc9''@;'; put 'put ''VCYmVFswXTtpZihXKXtjb25zdCBpZT1XWzBdLHdlPVdbMV07aWYoaWU9PT1XWzJdJiZ3ZT09PVdbM10pe2NvbnN0IFplPXRoaXMuaG90SW5zdGFuY2UuZ2V0Q2VsbE1ldGEoaWUsd2UpO1plJiYhMT09PVplLmZpbHRlciYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShpZSx3ZSwiZmls''@;'; put 'put ''dGVyIiwhMCl9fX0pLGQuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLChfLFQpPT57aWYoImVkaXQiPT09VCl7Y29uc3QgVz10aGlzLmhvdEluc3RhbmNlLGllPV9bMF1bMF0sZ2U9X1swXVsxXSx3ZT1XLnByb3BUb0NvbChnZSksRWU9Vy5nZXRDZWxsTWV0YShpZSx3ZSk7RWUmJiExPT09RWUuZmls''@;'; put 'put ''dGVyJiZXLnNldENlbGxNZXRhKGllLHdlLCJmaWx0ZXIiLCEwKSx0aGlzLmV4ZWN1dGVEeW5hbWljQ2VsbFZhbGlkYXRpb25JZkFwcGxpY2FibGUoZ2Usd2UsaWUpfX0pLGQuYWRkSG9vaygiYWZ0ZXJSZW5kZXIiLF89Pnt0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUi''@;'; put 'put ''KX0pLGQuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChfLFQpPT57aWYoXz50aGlzLmRhdGFTb3VyY2UubGVuZ3RoKXtsZXQgVz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57VyYmKFcuc2Nyb2xsVG9wPVcuc2Nyb2xsSGVpZ2h0KX0pfX0pLGQu''@;'; put 'put ''YWRkSG9vaygiYmVmb3JlUGFzdGUiLChfLFQpPT57Y29uc3QgVz1UWzBdLnN0YXJ0Q29sO19bMF09X1swXS5tYXAoKGllLGdlKT0+e2NvbnN0IHdlPXRoaXMuY29sdW1uSGVhZGVyW1crZ2VdLEVlPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbd2VdPy50eXBlLFplPSgwLHQzLmlz''@;'; put 'put ''U3BlY2lhbE1pc3NpbmcpKGllKTtyZXR1cm4gRWUmJiFpc05hTihpZSkmJiFaZSYmKGllKj0xKSxpZX0pfSksZC5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLGQuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xp''@;'; put 'put ''bWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3Ro''@;'; put 'put ''LTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0pJiYwPT09R24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxl''@;'; put 'put ''bmd0aCYmKEduLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEduLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9i''@;'; put 'put ''YWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksZC5yZW5kZXIoKX19cmV0dXJuIGMuY250PTAsYy5ub25Qa0NudD0wLGMubGFzdENlbGw9MCxjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEMwKSx0dCh2bCksdHQodzApLHR0KGJkKSx0dChBYyks''@;'; put 'put ''dHQoRHMpLHR0KFdsKSx0dChvYSksdHQoVWEpLHR0KEFnKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1lZGl0b3IiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoUm8oZFVlLDcpLFJvKGhVZSw1KSxSbyhmVWUsNSksUm8ocFVlLDUpLFJvKGdV''@;'; put 'put ''ZSw1KSksMiZhKXtsZXQgaDtzaShoPWFpKCkpJiYoZC5odD1oLmZpcnN0KSxzaShoPWFpKCkpJiYoZC51cGxvYWRTdGF0ZXJDb21wTGlzdD1oKSxzaShoPWFpKCkpJiYoZC5xdWVyeUZpbHRlckNvbXBMaXN0PWgpLHNpKGg9YWkoKSkmJihkLmhvdEluc3RhbmNlQ29tcExpc3Q9aCksc2koaD1h''@;'; put 'put ''aSgpKSYmKGQuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9aCl9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTc3LHZhcnM6NzMsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwi''@;'; put 'put ''cmVsYXRpdmUiLDMsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1v''@;'; put 'put ''ZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xy''@;'; put 'put ''SW5saW5lIiwiIiwxLCJtdC0wLWkiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbCIsImRpc2FibGVkIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIs''@;'; put 'put ''IldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsIm5nTW9kZWxDaGFuZ2UiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsidHlwZSIsImJ1''@;'; put 'put ''dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJzaW5nIGNsci1j''@;'; put 'put ''b2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZElu''@;'; put 'put ''ZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVj''@;'; put 'put ''b3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImh0IiwiIl0sWyJjbGFzcyIsInByb2dyZXNTdGF0aWMgcHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJjYXJkIiwiYm9yZGVyLTAiLCJib3gtc2hhZG93LW5vbmUtaSIsInBvc2l0aW9uLXJlbGF0''@;'; put 'put ''aXZlIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbMSwiY2FyZC1oZWFkZXIiLCJjbHItcm93IiwiYnV0dG9uQmFyIiwiaGVhZGVyQmFyIiwiY2xyLWZsZXgtbWQtcm93IiwiY2xyLWp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWxnLWVuZCJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0''@;'; put 'put ''ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMC1pIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbGctNCBidG5DdHJsIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsx''@;'; put 'put ''LCJjYXJkLWJsb2NrIiwicC0wIiwiY2xyLWZsZXgtMSIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWzEsImNhcmQtdGV4dCIsImhvdEVkaXRvciIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwi''@;'; put 'put ''YmFja2dyb3VuZC10cmFuc3BhcmVudCJdLFsxLCJob3Qtd3JhcHBlciIsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwxLCJlZGl0LWhvdCIsMywibGljZW5zZUtleSJdLFsiaG90SW5zdGFuY2UiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJt''@;'; put 'put ''dC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIl0sWzEsIm0tMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNs''@;'; put 'put ''aWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwi''@;'; put 'put ''bmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0''@;'; put 'put ''bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xy''@;'; put 'put ''TW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRh''@;'; put 'put ''LWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIl0sWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJtLTAgY29sb3It''@;'; put 'put ''cmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzMsIm9wZW4iLCJkc21ldGEiLCJvcGVuQ2hhbmdlIl0sWzMsInZpZXdib3hNb2RhbCIsInZpZXdib3hNb2RhbENoYW5nZSJd''@;'; put 'put ''LFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2Fk''@;'; put 'put ''IiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJ1cGxvYWRlciIsImNoYW5nZSJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0''@;'; put 'put ''b25zIiwidy0xMDAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayJdLFsxLCJl''@;'; put 'put ''eGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJdLFsidXBsb2FkU3RhdGVyIiwiIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3Vy''@;'; put 'put ''cmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJv''@;'; put 'put ''blByZXZpb3VzUmVjb3JkIl0sWzEsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImJhY2tCdG4iXSxbMSwiYnRuIiwiYnRuLXNtIiwzLCJyb3V0ZXJMaW5rIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNp''@;'; put 'put ''emUiLCIyMCJdLFsxLCJidG4iLCJidG4tc20iLCJ2aWV3Ym94LW9wZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiLCJzaXplIiwiMjAiXSxbMSwiZWRpdG9yLXRpdGxlIiwidGV4dC1jZW50ZXIiLCJtdC0wLWkiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiLCJzaXplIiwiMjQi''@;'; put 'put ''LDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbMSwibXItMTAiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93Il0sWzEsImNsci1j''@;'; put 'put ''b2wtMTIiLCJjbHItY29sLWxnLTQiLCJidG5DdHJsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG5WaWV3IiwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwi''@;'; put 'put ''YnRuLXByaW1hcnkiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWyJzaGFwZSIsIm5vdGUiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi''@;'; put 'put ''dG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWljb24iLCJidG4tb3V0bGluZS1kYW5nZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInRpbWVzIl0s''@;'; put 'put ''WyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbInNoYXBlIiwicGx1cyIsInNpemUiLCIxNiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJs''@;'; put 'put ''ZyIsNCwiY2xySWZPcGVuIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi11''@;'; put 'put ''cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXByaW1hcnkgYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJw''@;'; put 'put ''cmV2aWV3LXN1Ym1pdCIsMywiY2xyTG9hZGluZyIsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiY2FyZC10ZXh0Il0s''@;'; put 'put ''WzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciXSxb''@;'; put 'put ''MSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtb2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwi''@;'; put 'put ''LCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1vZmZzZXQtbWQtMiBjbHItY29s''@;'; put 'put ''LW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVzdGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJtLTAiLDMsImRpc2FibGVkIiwiY2xpY2siXSxb''@;'; put 'put ''ImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVyIiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJd''@;'; put 'put ''LFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIiwibmdNb2RlbENoYW5nZSJdLFsxLCJkLWJsb2NrIl0sWzEsIm1v''@;'; put 'put ''ZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWzEsIm0tMCIsImNvbG9yLXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1Wbigp''@;'; put 'put ''O21lKDAsImRpdiIsMCkoMSwiY2xyLW1vZGFsIiwxKSx4dCgiZmlsZU92ZXIiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmZpbGVPdmVyQmFzZShfKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZ2V0RmlsZURlc2MoXywhMCl9KSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihfKXtyZXR1cm4gZC5zaG93VXBsb2FkTW9kYWw9X30pLG1lKDIsImgzIiwyKSxOZSgzLCJVcGxvYWQgRmlsZSIpLHllKCksbWUoNCwiZGl2IiwzKSg1LCJkaXYiLDQpKDYsInNwYW4iKSxOZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLHllKCkoKSxtZSg4LCJkaXYiLDUp''@;'; put 'put ''KDksImRpdiIsNikoMTAsImRpdiIsNykoMTEsImRpdiIsOCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDkpKDEzLCJjbHItcmFkaW8td3JhcHBlciIpKDE0LCJpbnB1dCIsMTApLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5lbmNvZGluZz1ffSkseWUoKSxtZSgx''@;'; put 'put ''NSwibGFiZWwiKSxOZSgxNiwiVVRGLTgiKSx5ZSgpKCksbWUoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxMSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLmVuY29kaW5nPV99KSx5ZSgpLG1lKDE5LCJsYWJlbCIpLE5lKDIwLCJXTEFUSU4xIiks''@;'; put 'put ''eWUoKSgpKCkoKSgpLFFlKDIxLG1VZSw2LDEsImRpdiIsMTIpLFFlKDIyLHZVZSwzLDEsImRpdiIsMTMpLG1lKDIzLCJkaXYiLDcpLFFlKDI0LF9VZSwyLDEsImJ1dHRvbiIsMTQpLFFlKDI1LGJVZSwyLDAsImJ1dHRvbiIsMTUpLHllKCksUWUoMjYseVVlLDMsMCwiZGl2IiwxNikseWUoKSgp''@;'; put 'put ''KCkscXQoMjcsImRpdiIsMTcpLHllKCksUWUoMjgsd1VlLDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMTgpLG1lKDI5LCJkaXYiLDE5LDIwKSxRZSgzMSxDVWUsMiwwLCJkaXYiLDIxKSxtZSgzMiwiZGl2IiwyMikseHQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblNo''@;'; put 'put ''b3dVcGxvYWRNb2RhbCgpfSksbWUoMzMsImRpdiIsMjMpLFFlKDM0LE1VZSw3LDIsImRpdiIsMjQpLG1lKDM1LCJkaXYiLDI1KSxRZSgzNixUVWUsNyw1LCJoNCIsMjYpLHllKCksUWUoMzcsSFVlLDQsMywiZGl2IiwyNyksUWUoMzgsTlVlLDUsMSwiZGl2IiwyOCkseWUoKSxtZSgzOSwiZGl2''@;'; put 'put ''IiwyOSksUWUoNDAsalVlLDQsMiwiZGl2IiwzMCksbWUoNDEsImRpdiIsMzEpKDQyLCJkaXYiLDMyKSxxdCg0MywiaG90LXRhYmxlIiwzMywzNCkseWUoKSxtZSg0NSwiZGl2IiksUWUoNDYsWlVlLDUsMiwiY2xyLXRvb2x0aXAiLDM1KSxRZSg0NyxZVWUsMywxLCJwIiwzNikseWUoKSxRZSg0''@;'; put 'put ''OCwkVWUsMTYsNiwiZGl2IiwzNyksbWUoNDksImNsci1tb2RhbCIsMzgpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnN1Ym1pdExpbWl0Tm90aWNlPV99KSxtZSg1MCwiaDMiLDIpLE5lKDUxLCJOb3RpY2UiKSx5ZSgpLG1lKDUyLCJkaXYiLDMpKDUzLCJw''@;'; put 'put ''IiwzOSksTmUoNTQpLHllKCkoKSxtZSg1NSwiZGl2IiwxNykoNTYsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDU3LCIgQ2FuY2VsICIpLHllKCksbWUoNTgsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gZC5nZXRGaWxlKCksZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDU5LCIgU3VibWl0ICIpLHllKCkoKSgpLG1lKDYwLCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5iYWRFZGl0PV99KSxtZSg2MSwiaDMi''@;'; put 'put ''LDIpLE5lKDYyKSx5ZSgpLG1lKDYzLCJkaXYiLDMpKDY0LCJwIiksTmUoNjUpLHllKCkoKSxtZSg2NiwiZGl2IiwxNykoNjcsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5iYWRFZGl0PSExfSksTmUoNjgsIiBPayAiKSx5ZSgpKCkoKSxtZSg2OSwiY2xyLW1v''@;'; put 'put ''ZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQucGtOdWxsPV99KSxtZSg3MCwiaDMiLDIpLE5lKDcxLCJFcnJvciIpLHllKCksbWUoNzIsImRpdiIsMykoNzMsInAiKSxOZSg3NCwiIE51bGwgdmFsdWVzIG9yIGluY29ycmVjdCBkYXRhIHR5cGVz''@;'; put 'put ''IGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIikseWUoKSgpLG1lKDc1LCJkaXYiLDE3KSg3NiwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBrTnVsbD0hMSxkLmJhZEVkaXQ9ITF9KSxOZSg3NywiIE9rICIpLHllKCkoKSgp''@;'; put 'put ''LG1lKDc4LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5ub1BrTnVsbD1ffSksbWUoNzksImgzIiwyKSxOZSg4MCwiRXJyb3IiKSx5ZSgpLG1lKDgxLCJkaXYiLDMpKDgyLCJwIiksTmUoODMsIkluY29ycmVjdCBkYXRhIHR5cGVz''@;'; put 'put ''IGluIG5vbi1QcmltYXJ5IEtleSBjb2x1bW5zIikseWUoKSgpLG1lKDg0LCJkaXYiLDE3KSg4NSwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5vUGtOdWxsPSExLGQuYmFkRWRpdD0hMX0pLE5lKDg2LCIgT2sgIikseWUoKSgpKCksbWUoODcsImNsci1tb2Rh''@;'; put 'put ''bCIsNDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKF8pe3JldHVybiBkLnBrRHVwcz1ffSksbWUoODgsImgzIiwyKSxOZSg4OSwiRXJyb3IiKSx5ZSgpLG1lKDkwLCJkaXYiLDMpKDkxLCJwIiksTmUoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQg''@;'; put 'put ''Zm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIikseWUoKSxtZSg5MywicCIpLE5lKDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLHllKCksUWUoOTUscVVlLDMsNCwic3BhbiIsNDMpLHllKCksbWUoOTYsImRpdiIsMTcpKDk3LCJidXR0b24iLDQxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGQucGtEdXBzPSExfSksTmUoOTgsIiBPayAiKSx5ZSgpKCkoKSxtZSg5OSwiY2xyLW1vZGFsIiwzOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQudG9vTG9uZz1ffSksbWUoMTAwLCJoMyIsMiksTmUoMTAxLCJFcnJvciIpLHllKCksbWUoMTAyLCJkaXYi''@;'; put 'put ''LDMpKDEwMywicCIpLE5lKDEwNCwiIFRoZSBmb2xsb3dpbmcgY29sdW1ucyBoYXZlIHZhbHVlcyB0aGF0IGV4Y2VlZCBsZW5ndGggbGltaXRzOiAiKSx5ZSgpLFFlKDEwNSxLVWUsMiwzLCJwIiw0NCkseWUoKSxtZSgxMDYsImRpdiIsMTcpKDEwNywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBkLnRvb0xvbmc9ITEsZC5jbGVhbkV4Y2VlZCgpfSksTmUoMTA4LCIgT2sgIikseWUoKSgpKCkoKSgpKCkoKSgpLFFlKDEwOSxYVWUsMTQsMCwiZGl2Iiw0NSksbWUoMTEwLCJjbHItbW9kYWwiLDQ2KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihf''@;'; put 'put ''KXtyZXR1cm4gZC5maWx0ZXI9X30pLG1lKDExMSwiaDMiLDQ3KSxOZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxtZSgxMTMsInNwYW4iKSxOZSgxMTQpLHllKCkoKSxtZSgxMTUsImRpdiIsMyksUWUoMTE2LEpVZSwyLDAsImFwcC1xdWVyeSIsMzUpLHllKCksbWUoMTE3LCJkaXYiLDE3''@;'; put 'put ''KSgxMTgsImJ1dHRvbiIsNDgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5yZXNldEZpbHRlcigpfSksTmUoMTE5LCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoMTIwLCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZmlsdGVyPSExfSksTmUoMTIx''@;'; put 'put ''LCIgQ2FuY2VsICIpLHllKCksbWUoMTIyLCJidXR0b24iLDUwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc2VuZENsYXVzZSgpfSksTmUoMTIzLCIgT2sgIikseWUoKSgpKCksbWUoMTI0LCJjbHItbW9kYWwiLDM4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihf''@;'; put 'put ''KXtyZXR1cm4gZC5xdWVyeUVycj1ffSksbWUoMTI1LCJoMyIsMiksTmUoMTI2LCJFcnJvciIpLHllKCksbWUoMTI3LCJkaXYiLDMpKDEyOCwicCIpLE5lKDEyOSkseWUoKSgpLG1lKDEzMCwiZGl2IiwxNykoMTMxLCJidXR0b24iLDUxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQu''@;'; put 'put ''cXVlcnlFcnI9ITF9KSxOZSgxMzIsIiBDYW5jZWwgIikseWUoKSxtZSgxMzMsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5xdWVyeUVycj0hMX0pLE5lKDEzNCwiIE9rICIpLHllKCkoKSgpLG1lKDEzNSwiY2xyLW1vZGFsIiw1MikseHQoImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9X30pLG1lKDEzNiwiaDMiLDQ3KSxOZSgxMzcsIldhcm5pbmciKSx5ZSgpLG1lKDEzOCwiZGl2IiwzKSxOZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdz''@;'; put 'put ''IGxvYWRlZCBkYXRhICIpLG1lKDE0MCwiYiIpLE5lKDE0MSkseWUoKSxOZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSx5ZSgpLG1lKDE0MywiZGl2IiwxNykoMTQ0LCJidXR0b24iLDQ5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGlzY2FyZFNvdXJjZUZpbGU9''@;'; put 'put ''ITF9KSxOZSgxNDUsIiBDYW5jZWwgIikseWUoKSxtZSgxNDYsImJ1dHRvbiIsNTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5kaXNjYXJkU291cmNlRmlsZT0hMSxkLmRpc2NhcmRQZW5kaW5nRXhjZWwoITApfSksTmUoMTQ3LCIgT2sgIikseWUoKSgpKCksbWUoMTQ4LCJjbHIt''@;'; put 'put ''bW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5maWxlUGFzc3dvcmRNb2RhbD1ffSksbWUoMTQ5LCJoMyIsNDcpLE5lKDE1MCwiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLHllKCksbWUoMTUxLCJkaXYiLDU0KSgxNTIsInAiLDM5KSxO''@;'; put 'put ''ZSgxNTMsIlBsZWFzZSBlbnRlciBwYXNzd29yZDoiKSx5ZSgpLHF0KDE1NCwiaW5wdXQiLDU1LDU2KSx5ZSgpLG1lKDE1NiwiZGl2IiwxNyksUWUoMTU3LFFVZSwyLDAsInAiLDU3KSxtZSgxNTgsImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWxlUGFzc3dv''@;'; put 'put ''cmRNb2RhbD0hMSxkLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApfSksTmUoMTU5LCIgQ2FuY2VsIHVwbG9hZCAiKSx5ZSgpLG1lKDE2MCwiYnV0dG9uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2NvbnN0IF89JGkoMTU1KTtyZXR1cm4gZC5maWxlUGFzc3dvcmRN''@;'; put 'put ''b2RhbD0hMSxqdChkLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dChfLnZhbHVlKSl9KSxOZSgxNjEsIiBVbmxvY2sgIikseWUoKSgpKCksbWUoMTYyLCJjbHItbW9kYWwiLDUyKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihfKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFs''@;'; put 'put ''PV99KSxtZSgxNjMsImgzIiw0NyksTmUoMTY0LCJXYXJuaW5nIikseWUoKSxtZSgxNjUsImRpdiIsMyksTmUoMTY2LCIgTWFudWFsbHkgZWRpdGluZyB0aGlzIGRhdGEgd2lsbCBtZWFuIHRoZSBzb3VyY2UgZmlsZSAiKSxtZSgxNjcsImIiKSxOZSgxNjgpLHllKCksTmUoMTY5LCIgd2lsbCBi''@;'; put 'put ''ZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLHllKCksbWUoMTcwLCJkaXYiLDE3KSgxNzEsImJ1dHRvbiIsNDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5tYW51YWxGaWxlRWRpdE1vZGFsPSExfSksTmUoMTcyLCIgQ2FuY2VsICIpLHllKCksbWUoMTcz''@;'; put 'put ''LCJidXR0b24iLDUzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxkLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCl9KSxOZSgxNzQsIiBPayAiKSx5ZSgpKCkoKSxtZSgxNzUsImFwcC1kYXRhc2V0LWluZm8iLDU5KSx4dCgib3BlbkNoYW5n''@;'; put 'put ''ZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQuZGF0YXNldEluZm89X30pLHllKCksbWUoMTc2LCJhcHAtdmlld2JveGVzIiw2MCkseHQoInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oXyl7cmV0dXJuIGQudmlld2JveGVzPV99KSx5ZSgpfWlmKDImYSl7Y29uc3QgaD0kaSgxNTUpO0NlKDEp''@;'; put 'put ''LFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09ZC5leGNlbFVwbG9hZFN0YXRlKSgiY2xyTW9kYWxPcGVuIixkLnNob3dVcGxvYWRNb2Rh''@;'; put 'put ''bCksQ2UoMTMpLFJlKCJuZ01vZGVsIixkLmVuY29kaW5nKSgiZGlzYWJsZWQiLCIiIT1kLmZpbGVuYW1lKSxDZSg0KSxSZSgibmdNb2RlbCIsZC5lbmNvZGluZykoImRpc2FibGVkIiwiIiE9ZC5maWxlbmFtZSksQ2UoMyksUmUoIm5nSWYiLCFkLmV4Y2VsRmlsZVBhcnNpbmcmJiFkLnVwbG9h''@;'; put 'put ''ZExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhZC5leGNlbEZpbGVQYXJzaW5nJiYhZC51cGxvYWRMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsIlZhbGlkYXRpbmciIT09ZC5leGNlbFVwbG9hZFN0YXRlKSxDZSgxKSxSZSgibmdJZiIsIlZhbGlkYXRpbmctRFEiPT09ZC5leGNlbFVwbG9hZFN0''@;'; put 'put ''YXRlKSxDZSgxKSxSZSgibmdJZiIsZC5leGNlbEZpbGVQYXJzaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxDZSgzKSxSZSgibmdJZiIsIWQudmFsaWRhdGlvbkRvbmUmJmQuc3VibWl0KSxDZSgzKSxSZSgibmdJZiIsZC50YWJsZVRydWUpLENlKDEp''@;'; put 'put ''LGRyKCJjbHItY29sLWxnLTEyIiwhZC50YWJsZVRydWUpLENlKDEpLFJlKCJuZ1ZhciIsUTIoNjYsZVplLG51bGw9PWQubGliZHM/bnVsbDpkLmxpYmRzLnNwbGl0KCIuIilbMF0sbnVsbD09ZC5saWJkcz9udWxsOmQubGliZHMuc3BsaXQoIi4iKVsxXSkpLENlKDEpLFJlKCJuZ0lmIixkLnRh''@;'; put 'put ''YmxlVHJ1ZSksQ2UoMSksUmUoIm5nSWYiLCEkcyg2OSxJc2UpLmluY2x1ZGVzKGQucXVlcnlUZXh0KSksQ2UoMSksUmUoIm5nQ2xhc3MiLEoyKDcxLHRaZSwhJHMoNzAsSXNlKS5pbmNsdWRlcyhkLnF1ZXJ5VGV4dCkpKSxDZSgxKSxSZSgibmdJZiIsIWQudGFibGVUcnVlKSxDZSgzKSxkcigi''@;'; put 'put ''aGlkZGVuIixkLmhvdFRhYmxlLmhpZGRlbiksUmUoImxpY2Vuc2VLZXkiLGQuaG90VGFibGUubGljZW5zZUtleSksQ2UoMyksUmUoIm5nSWYiLGQudGFibGVUcnVlJiYhZC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUu''@;'; put 'put ''dmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkmJmQuZGF0YVNvdXJjZSYmZC5kYXRhU291cmNlLmxlbmd0aD5kLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSxDZSgxKSxSZSgibmdJZiIsZC5zdWJtaXQpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LGQuc3VibWl0TGltaXROb3RpY2UpLENlKDUpLGdyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24s''@;'; put 'put ''IGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxDZSg2KSxSZSgiY2xyTW9kYWxPcGVuIixkLmJhZEVkaXQpLENlKDIpLG9yKGQuYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxDZSgzKSxvcihkLmJhZEVkaXRDYXVzZSksQ2UoNCksUmUoImNsck1vZGFsT3BlbiIsZC5wa051bGwp''@;'; put 'put ''LENlKDkpLFJlKCJjbHJNb2RhbE9wZW4iLGQubm9Qa051bGwpLENlKDkpLFJlKCJjbHJNb2RhbE9wZW4iLGQucGtEdXBzKSxDZSg4KSxSZSgibmdGb3JPZiIsZC5kdXBsaWNhdGVQa0luZGV4ZXMpLENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQudG9vTG9uZyksQ2UoNiksUmUoIm5nRm9yT2Yi''@;'; put 'put ''LGQuZXhjZWVkQ2VsbHMpLENlKDQpLFJlKCJuZ0lmIixkLm51bGxWYXJpYWJsZXMpLENlKDEpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLGdyKCIgIixkLmxpYmRzLCIgIiksQ2UoMiksUmUoIm5n''@;'; put 'put ''SWYiLGQuZmlsdGVyKSxDZSg2KSxSZSgiY2xyTG9hZGluZyIsZC5zdWJtaXRMb2FkaW5nKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLnF1ZXJ5RXJyKSxDZSg1KSxvcihkLnF1ZXJ5RXJyTWVzc2FnZSksQ2UoNiksUmUoImNsck1vZGFsT3BlbiIsZC5kaXNjYXJkU291cmNlRmlsZSkoImNs''@;'; put 'put ''ck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxDZSg2KSxvcihkLmZpbGVuYW1lKSxDZSg3KSxSZSgiY2xyTW9kYWxPcGVuIixkLmZpbGVQYXNzd29yZE1vZGFsKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDkpLFJlKCJuZ0lm''@;'; put 'put ''IixkLmZpbGVVbmxvY2tFcnJvciksQ2UoMyksUmUoImRpc2FibGVkIixoLnZhbHVlLmxlbmd0aDwxKSxDZSgyKSxSZSgiY2xyTW9kYWxPcGVuIixkLm1hbnVhbEZpbGVFZGl0TW9kYWwpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoNiksb3IoZC5maWxl''@;'; put 'put ''bmFtZSksQ2UoNyksUmUoIm9wZW4iLGQuZGF0YXNldEluZm8pKCJkc21ldGEiLGQuZHNtZXRhKSxDZSgxKSxSZSgidmlld2JveE1vZGFsIixkLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W3hzZSx1Yyx4cyxaaSxXYSxsRSxCcyxPcyxCdSxrYSxvdSxzdSxadSxjMixkaCxVcyxYRix0d2Us''@;'; put 'put ''S0YsamIsVWIsemIseHksVTcsWWIsRXNlLGtzZSxBc2UsakUsY1UsYVVlLGNVZSx1VWUsRHNlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2JvcmRlcjowfS5idXR0b25CYXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4IDEwcHg7YWxpZ24t''@;'; put 'put ''aXRlbXM6Y2VudGVyfS50ZXN0UmVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmZmO2JhY2tncm91bmQ6cmdiYSgyNTUsMCwwLC44KSFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmZpcnN0Q29sdW1uSGVhZGVyU3R5bGUgYnV0dG9uLmNoYW5nZVR5cGV7''@;'; put 'put ''ZGlzcGxheTpub25lfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRf''@;'; put 'put ''X2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDpyZ2JhKDQ4LDEwNywwLC42OTAxOTYwNzg0KX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX1o''@;'; put 'put ''b3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0aC5yZWFkb25seUNlbGwgZGl2e29wYWNpdHk6LjR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGQucmVhZG9ubHlDZWxse29wYWNpdHk6LjV9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTRw''@;'; put 'put ''eDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6MTZweDtoZWlnaHQ6MzBweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LmluZm9CYXJbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6ODAlfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntoZWlnaHQ6dW5zZXQ7d2hpdGUtc3BhY2U6bm9ybWFsfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlciAgIHNwYW5bX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde3dpZHRoOnVuc2V0fS5wa0hlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjg3NjgyO2NvbG9yOiNmZmY7bWFyZ2luOi0xcHh9LmhlYWRlckJhcltfbmdjb250ZW50LSVDT01QJV17YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZmZmZjtiYWNrZ3Jv''@;'; put 'put ''dW5kOiNmNWY2ZmV9LmVycm9yLWljb25bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHg7Y29sb3I6cmVkfS5idG5DdHJsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jYXJkLWhlYWRlcltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnR9LmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59Lm15LWRyb3Atem9uZVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOnNvbGlkIDFweCBsaWdodGdyYXk7Ym9yZGVyLXJhZGl1czox''@;'; put 'put ''MHB4O2JhY2tncm91bmQ6d2hpdGVzbW9rZTtib3gtc2hhZG93Omluc2V0IDAgMCA0cHggMnB4ICNhN2E1YTUyYjtoZWlnaHQ6NTB2aH0ubnYtZmlsZS1vdmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMnB4IGdyZWVufS5maWxlLWRyb3AtdGV4dFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17dGV4dC1hbGlnbjpjZW50ZXJ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5wcm9ncmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjlweCFpbXBvcnRhbnR9LnByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnByb2dyZXNzLXN0YXRpY1tf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17d2lkdGg6Y2FsYygxMDAlIC0gMTRweCl9fS5ob3RFZGl0b3JbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tfbmdjb250ZW50LSVDT01QJV0gICAuZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOi00NXB4fS5lZGl0LXJlY29yZC1zcGlubmVyW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC42KTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMDAlO3otaW5kZXg6NTAwfUBtZWRpYSBzY3JlZW4g''@;'; put 'put ''YW5kIChtYXgtd2lkdGg6IDQ4MHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozMnB4IWltcG9ydGFudH0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH19''@;'; put 'put ''LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIC44cmVtIC44cmVtIWltcG9ydGFudDtwYWRkaW5nLXRvcDowfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50''@;'; put 'put ''ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0jc3VibWl0QnRuW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSwgI2NhbmNlbFN1Ym1pdEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTUwcHh9Il19KSxjfSkoKTtjb25zdCBuWmU9W3twYXRoOiI6bGliTWVtIixjb21wb25lbnQ6SkF9LHtwYXRoOiI6bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OkpBfSx7cGF0aDoiZWRpdC1y''@;'; put 'put ''ZWNvcmQvOmxpYk1lbSIsY29tcG9uZW50OkpBfSx7cGF0aDoiZWRpdC1yZWNvcmQvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpKQX1dO2xldCByWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sZGMuZm9yQ2hpbGQoblplKSxkY119KSxjfSkoKSxRQT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbCxDMl19KSxjfSkoKSxpWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1''@;'; put 'put ''Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ob21lLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0p''@;'; put 'put ''LGN9KSgpO2NvbnN0IG9aZT1bInNpZGViYXJOYXYiXTtmdW5jdGlvbiBzWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJhIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksTmUoMSwiRGF0YSIpLHll''@;'; put 'put ''KCl9fWZ1bmN0aW9uIGFaZShjLGwpezEmYyYmKG1lKDAsImEiLDE5KSxOZSgxLCJBUEkgRXhwbG9yZXIiKSx5ZSgpKX1mdW5jdGlvbiBsWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMCksTmUoMSwiTGluZWFnZSIpLHllKCkpfWZ1bmN0aW9uIGNaZShjLGwpezEmYyYmKG1lKDAsImEiLDIxKSxO''@;'; put 'put ''ZSgxLCJNZXRhZGF0YSIpLHllKCkpfWZ1bmN0aW9uIHVaZShjLGwpezEmYyYmKG1lKDAsImEiLDIyKSxOZSgxLCIgVXNlcnMiKSx5ZSgpKX1mdW5jdGlvbiBkWmUoYyxsKXsxJmMmJihtZSgwLCJhIiwyMyksTmUoMSwiU3VibWl0dGVkIikseWUoKSl9ZnVuY3Rpb24gaFplKGMsbCl7MSZjJiYo''@;'; put 'put ''bWUoMCwiYSIsMjQpLE5lKDEsIlRvIEFwcHJvdmUiKSx5ZSgpKX1mdW5jdGlvbiBmWmUoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLFFlKDEsc1plLDIsMCwiYSIsMTEpLFFlKDIsYVplLDIsMCwiYSIsMTIpLFFlKDMsbFplLDIsMCwiYSIsMTMpLFFlKDQsY1plLDIs''@;'; put 'put ''MCwiYSIsMTQpLFFlKDUsdVplLDIsMCwiYSIsMTUpLFFlKDYsZFplLDIsMCwiYSIsMTYpLFFlKDcsaFplLDIsMCwiYSIsMTcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0''@;'; put 'put ''ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLENlKDEpLFJlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksQ2UoMSksUmUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKSxDZSgxKSxSZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92ZSIpKX19ZnVuY3Rpb24gcFplKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2Iiw3KSgxLCJj''@;'; put 'put ''bHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE5lKDMpLHF0KDQsImNsci1pY29uIiw5KSx5ZSgpLFFlKDUsZlplLDgsNywiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLGdyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1mdW5jdGlvbiBn''@;'; put 'put ''WmUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIG1aZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9Y29uc3QgdlplPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L3JvbGVzIl19O2Z1bmN0aW9uIF9aZShjLGwpe2lmKDEmYyYmKG1l''@;'; put 'put ''KDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNykscXQoMywiY2xyLWljb24iLDMyKSxOZSg0LCIgUm9sZXMgIikseWUoKSgpLFFlKDUsbVplLDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJyb3V0ZXJMaW5rIiwk''@;'; put 'put ''cygyLHZaZSkpLENlKDQpLFJlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19Y29uc3QgYlplPWZ1bmN0aW9uKCl7cmV0dXJuWyIvdmlldy91c2VybmF2L3VzZXJzIl19LHlaZT1mdW5jdGlvbigpe3JldHVyblsiL3ZpZXcvdXNlcm5hdi9ncm91''@;'; put 'put ''cHMiXX07ZnVuY3Rpb24gd1plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYnMiLDI1KSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyNikoMywicCIsMjcpLHF0KDQsImNsci1pY29uIiwyOCksTmUoNSwiIFVzZXJzIikseWUoKSgpLHF0KDYsImNsci10YWItY29udGVudCIpLHllKCksbWUo''@;'; put 'put ''NywiY2xyLXRhYiIpKDgsImJ1dHRvbiIsMjYpKDksInAiLDI3KSxxdCgxMCwiY2xyLWljb24iLDI5KSxOZSgxMSwiIEdyb3VwcyIpLHllKCkoKSxRZSgxMixnWmUsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSx5ZSgpLFFlKDEzLF9aZSw2LDMsImNsci10YWIiLDMxKSx5ZSgpKSwyJmMpe2Nv''@;'; put 'put ''bnN0IGE9VmUoKTtDZSgyKSxSZSgicm91dGVyTGluayIsJHMoNCxiWmUpKSxDZSg2KSxSZSgicm91dGVyTGluayIsJHMoNSx5WmUpKSxDZSg0KSxSZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvZ3JvdXBzIikpLENlKDEpLFJlKCJuZ0lmIiwiU0FTOSI9PT1h''@;'; put 'put ''LnNlcnZlclR5cGUpfX1mdW5jdGlvbiBDWmUoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24tbWVudSIpKDEsImEiLDMzKSxOZSgyLCJUYWJsZXMiKSx5ZSgpLG1lKDMsImEiLDM0KSxOZSg0LCJGaWxlcyIpLHllKCkoKSl9ZnVuY3Rpb24gU1plKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2''@;'; put 'put ''Iiw3KSgxLCJjbHItZHJvcGRvd24iKSgyLCJidXR0b24iLDgpLE5lKDMpLHF0KDQsImNsci1pY29uIiw5KSx5ZSgpLFFlKDUsQ1plLDUsMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEwKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLGdyKCIgIixhLmdldFN1YlBhZ2UoKSwiICIpfX1j''@;'; put 'put ''b25zdCBNWmU9WyIqIl07bGV0IG4zPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgRXIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNp''@;'; put 'put ''ZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhp''@;'; put 'put ''cy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQo''@;'; put 'put ''InJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRl''@;'; put 'put ''cyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMu''@;'; put 'put ''cmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNz''@;'; put 'put ''c1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0''@;'; put 'put ''aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lk''@;'; put 'put ''dGg+YS5jbGllbnRXaWR0aH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoRHMpLHR0KHZsKSx0dChvYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtp''@;'; put 'put ''ZigxJmEmJlJvKG9aZSw1KSwyJmEpe2xldCBoO3NpKGg9YWkoKSkmJihkLnNpZGViYXJOYXY9aC5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnh0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uTW91c2VNb3ZlKGYpfSwwLGZmKSgibW91c2V1cCIs''@;'; put 'put ''ZnVuY3Rpb24oZil7cmV0dXJuIGQub25Nb3VzZVVwKGYpfSwhMSxmZil9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6TVplLGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1siaWQiLCJzaWRlYmFyTmF2Il0sWyJzaWRlYmFy''@;'; put 'put ''TmF2IiwiIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywi''@;'; put 'put ''bW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzdWItZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLWxpbmsiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4i''@;'; put 'put ''XSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRl''@;'; put 'put ''ckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9y''@;'; put 'put ''ZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYi''@;'; put 'put ''XSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJW''@;'; put 'put ''ZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNs''@;'; put 'put ''clZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwi''@;'; put 'put ''YWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIsIiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0s''@;'; put 'put ''WzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIiXSxbInNoYXBlIiwidXNlcnMiXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0''@;'; put 'put ''ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hvbWUvZmlsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoVGkoKSxtZSgwLCJjbHItdmVydGljYWwtbmF2Iiww''@;'; put 'put ''LDEpLFFlKDIscFplLDYsMSwiZGl2IiwyKSxRZSgzLHdaZSwxNCw2LCJjbHItdGFicyIsMyksUWUoNCxTWmUsNiwxLCJkaXYiLDIpLHF0KDUsImRpdiIsNCksbWUoNiwiZGl2Iiw1KSx4dCgic2Nyb2xsIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblRyZWVTY3JvbGwoZil9KSxrcig3KSx5ZSgp''@;'; put 'put ''LG1lKDgsInNwYW4iLDYpLHh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzaXplU3RhcnQoKX0pLHllKCkoKSksMiZhJiYoSHUoIndpZHRoIixkLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixkLnNpZGViYXJNYXhXaWR0aCwicHgiKSxkcigiY2xvc2VkIiwhZC5z''@;'; put 'put ''aWRlYmFyT3BlbikoInJlc2l6aW5nIixkLnJlc2l6aW5nKSxDZSgyKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldyIpKSxDZSgxKSxSZSgibmdJZiIsZC5pc01haW5Sb3V0ZSgidmlldy91c2VybmF2IikpLENlKDEpLFJlKCJuZ0lmIixkLmlzTWFpblJvdXRlKCJob21lIikpLENlKDQp''@;'; put 'put ''LGRyKCJyZXNpemluZyIsZC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W1ppLGthLEU4LGMyLExwLE9wLGRnLFJwLElwLGNnLFpRLFlRLE5mLGFnLGxnLEJ1LEdfXSxzdHlsZXM6WyJjbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyNzJweDttaW4td2lkdGg6Mjcy''@;'; put 'put ''cHg7aGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjM3NXB4O3Bvc2l0aW9uOnJlbGF0aXZlO2JveC1zaGFkb3c6MCAwIDVweCAjMDAwMDAwMWY7YmFja2dyb3VuZC1jb2xvcjojZmZmIWltcG9ydGFudH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdW4tZHJvcGRvd25bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MzZweH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtdHJlZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfWNsci12ZXJ0aWNhbC1uYXYuY2xvc2VkW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXttYXJnaW4tbGVmdDotMjcycHh9Y2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6LTNweDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkICM4''@;'; put 'put ''MGI0NDE7Y3Vyc29yOmNvbC1yZXNpemU7b3BhY2l0eTowO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLWluLW91dH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntvcGFjaXR5Oi41fWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGUucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX1jbHItdmVydGljYWwtbmF2LnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5uYXYtZGl2aWRlcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkMzttYXJnaW4tYm90dG9tOjB9LnBhZ2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfS56ZXJvLW1hcmdpbltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17bWFyZ2luOjB9LnVzZXItbmF2LWJ0bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDJweH0jc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoyMDB9QG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KXsjc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fSJdfSksY30pKCk7ZnVuY3Rpb24geFplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIEVaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24ga1plKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJp''@;'; put 'put ''bnB1dCIsOCw5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGlicmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksUWUoNCx4WmUsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsMTApLFFlKDUsRVplLDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIs''@;'; put 'put ''YS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEFaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBUWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGko''@;'; put 'put ''MyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLHllKCl9fWZ1bmN0aW9uIERaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYp''@;'; put 'put ''KDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDE5KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLiRpbXBsaWNpdC5zZWFyY2hTdHJpbmc9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKS4kaW1wbGljaXQ7cmV0dXJu''@;'; put 'put ''IGp0KFZlKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLHllKCksUWUoNCxBWmUsMSwwLCJjbHItaWNvbiIsMTApLFFlKDUsVFplLDEsMCwiY2xyLWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoMikuJGltcGxpY2l0O0NlKDIpLFJlKCJuZ01vZGVsIixk''@;'; put 'put ''LnNlYXJjaFN0cmluZyksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSVplKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIExaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24i''@;'; put 'put ''LDI3KX1mdW5jdGlvbiBSWmUoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiksTmUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIikseWUoKSl9ZnVuY3Rpb24gT1plKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRvb2x0aXAtY29udGVu''@;'; put 'put ''dCIsMjgpLFFlKDEsUlplLDIsMCwic3BhbiIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyO0NlKDEpLFJlKCJuZ0lmIixhKX19ZnVuY3Rpb24gUFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIxKSx4dCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS5uZ1ZhcixfPVZlKCkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0LFc9VmUoKTtyZXR1cm4ganQoZj8iIjpXLm9uVGFibGVDbGljayhfLFQpKX0pLEJyKDIsMjIpLFFlKDMsSVplLDEsMCwiY2xyLWljb24iLDIzKSxRZSg0LExaZSwxLDAsImNs''@;'; put 'put ''ci1pY29uIiwyNCksVXIoKSxOZSg1KSx5ZSgpLFFlKDYsT1plLDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMjUpLHllKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1WZSgpLiRpbXBsaWNpdCxoPVZlKDIpLiRpbXBsaWNpdCxmPVZlKCk7Q2UoMSksZHIoImRjLWxvY2tlZC1jb250cm9s''@;'; put 'put ''IixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLENlKDEpLFJlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCEwKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMSksQ2UoMSksZ3IoIiAiLGQucmVw''@;'; put 'put ''bGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gRlplKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIpLFFlKDEsUFplLDcsOCwiY2xyLXRvb2x0aXAiLDIwKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDMpO0NlKDEpLFJlKCJuZ1ZhciIsYSsxPmQubGljZW5j''@;'; put 'put ''ZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gSFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0''@;'; put 'put ''dXJuIF8udHJlZU5vZGVDbGlja2VkKGgsZiksanQoXy5saWI9Zi5MSUJSQVJZUkVGKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtC''@;'; put 'put ''dChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLGp0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLHF0KDIsImNsci1pY29uIiwxNyksTmUoMykseWUoKSxRZSg0LERaZSw2LDMsImNsci10cmVlLW5vZGUiLDApLFFl''@;'; put 'put ''KDUsRlplLDIsMSwiY2xyLXRyZWUtbm9kZSIsMSkseWUoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7ZHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksUmUoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMp''@;'; put 'put ''LENlKDMpLGdyKCIgIixhLkxJQlJBUllSRUYsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIE5aZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsSFplLDYsNywiY2xyLXRyZWUtbm9kZSIsMTQpLFVyKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gVlplKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwzMCkoMSwiZGl2IiwzMSkoMiwic3BhbiIsMzIpLE5lKDMsIiBMb2FkaW5nLi4uICIpLHllKCkoKSgpKX1mdW5jdGlvbiBCWmUoYyxsKXsxJmMm''@;'; put 'put ''JihtZSgwLCJoMyIsMzYpLE5lKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIikseWUoKSl9ZnVuY3Rpb24galplKGMsbCl7MSZjJiYobWUoMCwiaDMiLDM2KSxOZSgxLCIgTm8gRWRpdGFibGUgVGFibGVzIENvbmZpZ3VyZWQgIikseWUoKSl9ZnVuY3Rpb24gelplKGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''bWUoMCwiZGl2IiwzMykscXQoMSwiY2xyLWljb24iLDM0KSxRZSgyLEJaZSwyLDAsImgzIiwzNSksUWUoMyxqWmUsMiwwLCJoMyIsMzUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJy''@;'; put 'put ''YXJpZXMubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk8MSl9fWxldCBVWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5yb3V0ZT1hLHRoaXMucm91''@;'; put 'put ''dGVyPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMuZXZlbnRTZXJ2aWNlPV8sdGhpcy5zYXNTZXJ2aWNlPVQsdGhpcy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIs''@;'; put 'put ''dGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZSUQhPT1kLkxJQlJBUllJRCYmKGguZXhwYW5k''@;'; put 'put ''ZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7ZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmV4cGFuZGVkJiYhdGhpcy50''@;'; put 'put ''YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGEsITEsZCksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1zZWxlY3RMaWJyYXJ5KGEsZCxoKXtoLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGYsXz1bXTtpZih0aGlzLmxpYnNBbmRUYWJsZXMmJihmPXRoaXMubGlic0Fu''@;'; put 'put ''ZFRhYmxlc1thXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWEpKXtsZXQgVD1mLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4tMT09PV8uaW5kZXhPZihXKSYmKF8ucHVzaChXKSwhMCl9KTt0aGlzLnRhYmxlcz1ULEduLmVkaXRvci5saWJyYXJpZXM9dGhp''@;'; put 'put ''cy5saWJyYXJpZXN9R24uZWRpdG9yLmxpYnJhcnk9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSEwfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gu''@;'; put 'put ''dGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksR24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7R24uZWRpdG9yLmZpbHRlci5saWJkcz0iIixHbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEdu''@;'; put 'put ''LmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixHbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sR24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEduLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhp''@;'; put 'put ''cy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJp''@;'; put 'put ''ZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxHbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMuc2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0''@;'; put 'put ''VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09R24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzJiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1Hbi5lZGl0b3Iu''@;'; put 'put ''dHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09R24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUduLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmllcy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSks''@;'; put 'put ''dGhpcy5zZWxlY3RMaWJyYXJ5KEduLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Hbi5lZGl0b3IubGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUo''@;'; put 'put ''KSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9fXJldHVy''@;'; put 'put ''biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KERzKSx0dChXbCksdHQoQzApLHR0KEFjKSx0dCh2bCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9tZS1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNv''@;'; put 'put ''bnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsiY2xhc3MiLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiLDQsIm5n''@;'; put 'put ''SWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIs''@;'; put 'put ''MywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwz''@;'; put 'put ''LCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vy''@;'; put 'put ''c29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFy''@;'; put 'put ''Y2hUcmVlSW5wdXQiLCIiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENh''@;'; put 'put ''c2UiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbNCwibmdJZiJdLFsxLCJzcGlu''@;'; put 'put ''bmVyLXdyYXBwZXItZnVsbHBhZ2UiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsInRleHQt''@;'; put 'put ''Y2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLFFlKDIsa1plLDYsMywiY2xyLXRyZWUtbm9kZSIsMCksUWUoMyxOWmUs''@;'; put 'put ''MiwxLCJuZy1jb250YWluZXIiLDEpLHllKCkoKSxtZSg0LCJkaXYiLDIpKDUsImRpdiIsMyksUWUoNixWWmUsNCwwLCJkaXYiLDQpLFFlKDcselplLDQsMiwiZGl2Iiw1KSx5ZSgpKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIiwobnVsbD09ZC50cmVlTm9kZUxpYnJhcmllcz9udWxsOmQudHJl''@;'; put 'put ''ZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxDZSgxKSxSZSgibmdGb3JPZiIsZC50cmVlTm9kZUxpYnJhcmllcyksQ2UoMyksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltXYSxCcyxPcyxkZCxnMSxEcCxrYSxadSxjMixm''@;'; put 'put ''MSxqYixVYix6YixuMyx4cyxaaSxuZCx0aCxVN10sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cGFk''@;'; put 'put ''ZGluZzowfS5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9ICBjbHItaWNvbi5pcy1ibHVlLCAgIGNsci1pY29uLmlzLWluZm97ZmlsbDojNmE5MjM1fS5zcGlubmVyLXdyYXBwZXItZnVsbHBhZ2VbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfSJdfSksY30pKCk7Y29uc3QgWlplPWM9Pntmb3IoY29uc3QgbCBpbiBjKWlmKCJfX3Jvd051bV9fIiE9PWwpcmV0dXJuITE7cmV0dXJuITB9''@;'; put 'put ''LGRVPWM9Pntjb25zdCBhPWMubWF0Y2goL1JcWyhcZCspXF1DXFsoXGQrKVxdLyk7cmV0dXJuIGE/e3JvdzpwYXJzZUludChhWzFdLDEwKSxjb2x1bW46cGFyc2VJbnQoYVsyXSwxMCl9Om51bGx9LE9zZT0oYyxsKT0+e2lmKGMuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihjPWMucmVwbGFj''@;'; put 'put ''ZSgiQUJTT0xVVEUgIiwiIikpLGMuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGE9ZFUoYyk7aWYoYSl7Y29uc3R7cm93OmQsY29sdW1uOmh9PWE7Yz1HYy51dGlscy5lbmNvZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7''@;'; put 'put ''Y29uc3QgZD1jLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07bGV0IF89IiIsVD0tMSxXPSIiO2lmKGlzTmFOKE51bWJlcihmKSk/Xz1mOlQ9cGFyc2VJbnQoZiksLTEhPT1UKXtjb25zdCB3ZT1sW1QtMV07Zm9yKGNvbnN0IEVlIGlu''@;'; put 'put ''IHdlKWlmKCJfX3Jvd051bV9fIiE9PUVlJiZ3ZVtFZV09PT1hKXtXPUVlK1Q7YnJlYWt9fWVsc2UgZm9yKGxldCB3ZT0wO3dlPGwubGVuZ3RoO3dlKyspaWYobFt3ZV1bX109PT1hKXtXPV8rKHdlKzEpO2JyZWFrfWNvbnN0IGllPUdjLnV0aWxzLmRlY29kZV9jZWxsKFcpLGdlPWRVKGMpO2lm''@;'; put 'put ''KGdlKXtjb25zdHtyb3c6d2UsY29sdW1uOkVlfT1nZTtjPUdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOmllLnIrd2UsYzppZS5jK0VlfSl9fXJldHVybiBjfSwkWmU9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBxWmUoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDI4KSxxdCgxLCJjbHItc3Bp''@;'; put 'put ''bm5lciIsMjkpLHllKCkpfWZ1bmN0aW9uIEtaZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBYWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMzEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJu''@;'; put 'put ''IGguc2VhcmNoU3RyaW5nPSIiLGp0KGgueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBKWmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJjbHItdHJlZS1ub2RlIikoMiwiYnV0dG9uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9''@;'; put 'put ''QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnhsbWFwT25DbGljayhmKSl9KSxxdCgzLCJjbHItaWNvbiIsMzMpLE5lKDQpLHllKCkoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMiksZHIoInRhYmxlLWFjdGl2ZSIsZC5pc0FjdGl2ZVhMTWFwKGEu''@;'; put 'put ''aWQpKSxDZSgyKSxncigiICIsYS5pZCwiICIpfX1mdW5jdGlvbiBRWmUoYyxsKXsxJmMmJihtZSgwLCJoMyIsMzcpLE5lKDEsIiBQbGVhc2Ugc2VsZWN0IGEgbWFwICIpLHllKCkpfWZ1bmN0aW9uIGVZZShjLGwpezEmYyYmKG1lKDAsImgzIiwzNyksTmUoMSwiIE5vIGV4Y2VsIG1hcCBpcyBm''@;'; put 'put ''b3VuZCAiKSx5ZSgpKX1mdW5jdGlvbiB0WWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM0KSxxdCgxLCJjbHItaWNvbiIsMzUpLFFlKDIsUVplLDIsMCwiaDMiLDM2KSxRZSgzLGVZZSwyLDAsImgzIiwzNikseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMiksUmUoIm5nSWYiLGEueGxt''@;'; put 'put ''YXBzLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBuWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxtZSgzLCJkaXYiKSg0LCJoNCIpLE5lKDUpLHllKCkoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg1KSxvcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiByWWUoYyxsKXsxJmMmJnF0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIGlZZShjLGwpezEmYyYmcXQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gb1llKGMsbCl7MSZjJiZq''@;'; put 'put ''YSgwKX1mdW5jdGlvbiBzWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDQwKSx4dCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksbWUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIiko''@;'; put 'put ''MywiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVzKX0pLE5lKDQsIlJ1bGVzIikseWUoKSxRZSg1LHJZZSwxLDAsImNsci10YWItY29udGVudCIsNDIpLHllKCksbWUoNiwi''@;'; put 'put ''Y2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGp0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5EYXRhKX0pLE5lKDgsIkRhdGEiKSx5ZSgpLFFlKDksaVllLDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MikseWUo''@;'; put 'put ''KSgpLFFlKDEwLG9ZZSwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLG1lKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxOZSgxMykseWUoKSxtZSgxNCwiaSIsNDUpLE5lKDE1KSx5ZSgpLG1lKDE2LCJoNSIsNDUpLE5lKDE3LCIgUnVsZXMgU291cmNlOiAiKSxtZSgxOCwiYSIsNDYpLE5lKDE5KSx5''@;'; put 'put ''ZSgpKCksbWUoMjAsImg1Iiw0NSksTmUoMjEsIiBUYXJnZXQgZGF0YXNldDogIiksbWUoMjIsImEiLDQ2KSxOZSgyMykseWUoKSgpKCksbWUoMjQsImRpdiIsNDcpLHF0KDI1LCJob3QtdGFibGUiLDQ4KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCksZD0kaSg0MSk7Q2UoNSksUmUoImNs''@;'; put 'put ''cklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyksQ2UoNCksUmUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSxDZSgxKSxSZSgibmdUZW1wbGF0ZU91dGxldCIsZCksQ2UoMyksZ3IoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwi''@;'; put 'put ''ICIpLENlKDIpLG9yKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksQ2UoMyksUmUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSksQ2UoMSksZ3IoIiAiLGEucnVsZXNTb3VyY2UsIiAiKSxDZSgzKSxSZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnNl''@;'; put 'put ''bGVjdGVkWExNYXAudGFyZ2V0RFMpLENlKDEpLGdyKCIgIixhLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMsIiAiKSxDZSgyKSxSZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVt''@;'; put 'put ''LlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhlYWRlcikoImNvbHVtbnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBS''@;'; put 'put ''dWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhlaWdodCIsIjEwMCUiKSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVja2VyKSgiY2VsbHMiLGEuZ2V0Q2VsbENvbmZpZ3VyYXRpb24pKCJtYXhSb3dzIixhLmhvdFRhYmxlTWF4Um93cykoIm1hbnVh''@;'; put 'put ''bENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsMTUpKCJyb3dIZWlnaHRzIiwyMCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KX19ZnVuY3Rpb24gYVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi''@;'; put 'put ''ZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLHF0KDIsImNsci1pY29uIiw1MyksbWUoMywic3BhbiIpLE5lKDQsIlVwbG9hZCIpLHllKCkoKSgpfX1mdW5jdGlvbiBsWWUoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnN1Ym1pdEV4Y2VsKCkpfSkscXQoMiwiY2xyLWljb24iLDUzKSxtZSgzLCJzcGFuIiksTmUoNCwiU3VibWl0IikseWUo''@;'; put 'put ''KSgpKCl9fWZ1bmN0aW9uIGNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxxdCgyLCJjbHItaWNvbiIsNTUp''@;'; put 'put ''LG1lKDMsInNwYW4iKSxOZSg0LCJEaXNjYXJkIikseWUoKSgpKCl9fWZ1bmN0aW9uIHVZZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNDkpLFFlKDEsYVllLDUsMCwiZGl2Iiw1MCksUWUoMixsWWUsNSwwLCJkaXYiLDUwKSxRZSgzLGNZZSw1LDAsImRpdiIsNTApLHllKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnN0YXR1cz09PWEuU3RhdHVzRW51bS5SZWFkeVRvVXBsb2FkKSxDZSgxKSxSZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCksQ2UoMSksUmUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5''@;'; put 'put ''VG9TdWJtaXQpfX12YXIgeWQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0Y2hpbmdSdWxlcyIsY1tjLlJlYWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0''@;'; put 'put ''YT0zXT0iRXh0cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixjW2MuU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsY30oeWR8fHt9KSxaNz1mdW5j''@;'; put 'put ''dGlvbihjKXtyZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRhdGE9MV09IkRhdGEiLGN9KFo3fHx7fSk7bGV0IFBzZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxULFcpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9n''@;'; put 'put ''Z2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj1fLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPVQsdGhpcy5zYXNTZXJ2aWNlPVcsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZWgsdGhpcy5TdGF0dXNFbnVtPXlk''@;'; put 'put ''LHRoaXMuVGFic0VudW09WjcsdGhpcy5zZWxlY3RlZFRhYj1aNy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPUduLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9h''@;'; put 'put ''ZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9eWQuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhp''@;'; put 'put ''cy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lE''@;'; put 'put ''IiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2Rh''@;'; put 'put ''bD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IFJvZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGlj''@;'; put 'put ''ZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxlY3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRh''@;'; put 'put ''PVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPVo3LlJ1bGVz''@;'; put 'put ''LHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9maWxlcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4wP0duLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTpHbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFwPy5pZD09PWF9bWF4V2lkdGhDaGVja2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0''@;'; put 'put ''aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhp''@;'; put 'put ''cztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZighZilyZXR1cm47Y29uc3QgXz1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT1fLCJ4bHMiPT09Xy5zbGljZShfLmxhc3RJbmRleE9mKCIuIikrMSxfLmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93''@;'; put 'put ''VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPXlkLkV4dHJhY3RpbmdEYXRhO2NvbnN0IFc9bmV3IEZpbGVSZWFkZXI7Vy5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgaWU9ZmkoZnVuY3Rpb24qKGdl''@;'; put 'put ''KXtjb25zdCB3ZT0oYz0+e2NvbnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGE9IiI7Y29uc3QgZD1sLmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBhfSkoZ2UudGFyZ2V0LnJlc3VsdCk7bGV0IEVlO2NvbnN0IFpl''@;'; put 'put ''PXt0eXBlOiJiaW5hcnkiLGNlbGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e0VlPUdjLnJlYWQod2Usey4uLlplfSl9Y2F0Y2gob3Qpe2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsb3Qsdm9pZCAwLCJF''@;'; put 'put ''cnJvciByZWFkaW5nIGZpbGUiKX1pZighRWUpcmV0dXJuIGguaXNMb2FkaW5nPSExLGguaXNMb2FkaW5nRGVzYz0iIixoLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJhY3REYXRhKEVlKX0pO3JldHVybiBmdW5jdGlvbihnZSl7cmV0''@;'; put 'put ''dXJuIGllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksVy5yZWFkQXNBcnJheUJ1ZmZlcihmKX1lbHNlIHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwLHRoaXMudXBsb2Fk''@;'; put 'put ''ZXIucXVldWUucG9wKCksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwnSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrdGhpcy5maWxlbmFtZSsnPC9iPiIuIFBsZWFzZSB1cGxvYWQgZXhjZWwgZmlsZS4nKX1kaXNjYXJkRXh0cmFjdGVkRGF0YSgpe3RoaXMuaXNMb2FkaW5n''@;'; put 'put ''PSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz15ZC5SZWFkeVRvVXBsb2FkLHRoaXMueGxEYXRhPVtdLHRoaXMuc2VsZWN0ZWRUYWI9WjcuUnVsZXMsdGhpcy5maWxlbmFtZT0iIix0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Qu''@;'; put 'put ''Zmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5zdWJtaXQoKTp0aGlzLnN1Ym1pdExpbWl0Tm90aWNl''@;'; put 'put ''PSEwfXN1Ym1pdCgpe2lmKCF0aGlzLnNlbGVjdGVkWExNYXB8fCF0aGlzLnhsRGF0YS5sZW5ndGgpcmV0dXJuO3RoaXMuc3RhdHVzPXlkLlN1Ym1pdHRpbmcsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJTdWJtaXR0aW5nIGV4dHJhY3RlZCBkYXRhIjtjb25zdCBhPVtd''@;'; put 'put ''O2Zvcihjb25zdCBUIG9mIHRoaXMudXBsb2FkZXIucXVldWUpYS5wdXNoKHtmaWxlOlQsZmlsZU5hbWU6VC5uYW1lfSk7Y29uc3QgZD1PYmplY3Qua2V5cyh0aGlzLnhsRGF0YVswXSkuam9pbigiLCIpKyJcbiIrdGhpcy54bERhdGEuc2xpY2UoMCx0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5z''@;'; put 'put ''dWJtaXRfcm93c19saW1pdCkubWFwKFQ9Pk9iamVjdC52YWx1ZXMoVCkuam9pbigiLCIpKS5qb2luKCJcbiIpLGY9KChjLGwpPT5uZXcgRmlsZShbY10sdGhpcy5maWxlbmFtZSsiLmNzdiIse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRpbWUoKX0pKShuZXcgQmxvYihbZF0se3R5cGU6''@;'; put 'put ''ImFwcGxpY2F0aW9uL2NzdiJ9KSk7YS5wdXNoKHtmaWxlOmYsZmlsZU5hbWU6Zi5uYW1lfSksdGhpcy5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLGEse3RhYmxlOnRoaXMuc2VsZWN0ZWRYTE1hcC50YXJnZXREU30pLnRoZW4oVD0+e1Quc2FzanNB''@;'; put 'put ''Ym9ydD90aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIixULnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpULlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpULlNZU0VSUk9SVEVYVCxNQUM6VC5zYXNqc0Fib3J0WzBdLk1BQ30pOlQuc2FzcGFyYW1zJiZ0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitULnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKFQ9Pnt0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixUKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnN0YXR1cz15ZC5SZWFkeVRvU3VibWl0LHRo''@;'; put 'put ''aXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEpe2NvbnN0IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRoKCIvIikpe2NvbnN0IEVlPWYuc3BsaXQoIi8iKVsxXSxaZT1w''@;'; put 'put ''YXJzZUludChFZSktMTtmPWEuU2hlZXROYW1lc1taZV19Y29uc3QgXz1hLlNoZWV0c1tmXSxUPUdjLnV0aWxzLnNoZWV0X3RvX2pzb24oXyx7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksVz1Pc2UoaC5YTE1BUF9TVEFSVCxUKSxpZT0oKGMsbCxhKT0+e2lmKCIiPT09bClyZXR1''@;'; put 'put ''cm4gYztpZihsLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPWRVKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVtbjpmfT1kLHtyOl8sYzpUfT1HYy51dGlscy5kZWNvZGVfY2Vs''@;'; put 'put ''bChjKTtsPUdjLnV0aWxzLmVuY29kZV9jZWxsKHtyOl8raCxjOlQrZn0pfX1pZihsLnN0YXJ0c1dpdGgoIk1BVENIICIpJiYobD1Pc2UobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PUdjLnV0aWxzLmRlY29kZV9jZWxsKGMpLGY9R2MudXRpbHMuZW5jb2RlX2NvbChoKTts''@;'; put 'put ''ZXQgXz1kO2ZvcihsZXQgVD1kKzE7VDxhLmxlbmd0aCYmYVtUXVtmXTtUKyspXz1UO2w9ZisoXysxKX1pZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1HYy51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQgVz1kKzE7VzxhLmxlbmd0aCYmIVpaZShhW1ddKTtXKyspaD1X''@;'; put 'put ''O2w9T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKFc9PiJfX3Jvd051bV9fIiE9PVcpLnJlZHVjZSgoVyxpZSk9PmllPlc/aWU6VywiIikrKGgrMSl9cmV0dXJuIGx9KShXLGguWExNQVBfRklOSVNILFQpLHdlPUdjLnV0aWxzLnNoZWV0X3RvX2pzb24oXyx7cmF3OiEwLHJhbmdlOmAke1d9OiR7''@;'; put 'put ''aWV9YCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pO2ZvcihsZXQgRWU9MDtFZTx3ZS5sZW5ndGg7RWUrKyl7Y29uc3QgWmU9d2VbRWVdLG90PU9iamVjdC5rZXlzKFplKS5maWx0ZXIoZXQ9PiJfX3Jvd051bV9fIiE9PWV0KTtmb3IobGV0IGV0PTA7ZXQ8b3QubGVuZ3RoO2V0KyspZC5wdXNo''@;'; put 'put ''KHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpFZSsxLENPTF9OTzpldCsxLFZBTFVFX1RYVDpaZVtvdFtldF1dfSl9fSksdGhpcy5zdGF0dXM9eWQuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPVo3LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihhLmlzTG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRp''@;'; put 'put ''bmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVzPXlkLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFwcnVsZXMsYS5zdGF0dXM9eWQuUmVhZHlUb1VwbG9hZH0pLmNh''@;'; put 'put ''dGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rlc2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9R24ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lm''@;'; put 'put ''KGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMuZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxl''@;'; put 'put ''TGljZW5zZUtleT1hfSl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0duLmVkaXRvci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5sb2FkKCl9KX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQodmwpLHR0KEMwKSx0dCh3MCksdHQoV2wpLHR0KERzKSx0dChiZCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lm''@;'; put 'put ''KDEmYSYmUm8oJFplLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9aCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoImNvbnRlbnQtY29udGFpbmVyIixkLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRl''@;'; put 'put ''Y2xzOjQyLHZhcnM6MTYsY29uc3RzOltbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElkIiwibmFtZSIs''@;'; put 'put ''ImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hYTE1hcFRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5n''@;'; put 'put ''Rm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgt''@;'; put 'put ''Y29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJyZWxhdGl2ZSIsMywidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsT3BlbiIsImZpbGVPdmVy''@;'; put 'put ''IiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50''@;'; put 'put ''LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJm''@;'; put 'put ''aWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywidXBsb2FkZXIiLCJjaGFuZ2UiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlw''@;'; put 'put ''ZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhY3Rpb25CdXR0b25zIiwiIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywi''@;'; put 'put ''Y2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmls''@;'; put 'put ''ZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWzEsIm1sLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdC10YWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1Jl''@;'; put 'put ''bmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJoZWlnaHQiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJs''@;'; put 'put ''aWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxnLTQiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnkt''@;'; put 'put ''Y29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIpLFFlKDEscVplLDIsMCwiZGl2IiwwKSxtZSgyLCJjbHIt''@;'; put 'put ''dHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDEpKDQsImRpdiIsMikoNSwiaW5wdXQiLDMsNCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNlYXJjaFN0cmluZz1mfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBkLnhsbWFwTGlzdE9uRmlsdGVyKCl9KSx5ZSgp''@;'; put 'put ''LFFlKDcsS1plLDEsMCwiY2xyLWljb24iLDUpLFFlKDgsWFplLDEsMCwiY2xyLWljb24iLDYpLHllKCkoKSxRZSg5LEpaZSw1LDMsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDEwLCJkaXYiLDgpLFFlKDExLHRZZSw0LDIsImRpdiIsOSksUWUoMTIsblllLDYsMSwiZGl2IiwxMCksUWUo''@;'; put 'put ''MTMsc1llLDI2LDI0LCJkaXYiLDExKSxtZSgxNCwiY2xyLW1vZGFsIiwxMikseHQoImZpbGVPdmVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5maWxlT3ZlckJhc2UoZil9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmdldEZpbGVEZXNjKGYsITApfSkoImNsck1vZGFsT3BlbkNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc2hvd1VwbG9hZE1vZGFsPWZ9KSxtZSgxNSwiaDMiLDEzKSxOZSgxNiwiVXBsb2FkIEZpbGUiKSx5ZSgpLG1lKDE3LCJkaXYiLDE0KSgxOCwiZGl2IiwxNSkoMTksInNwYW4iKSxOZSgyMCwiRHJvcCBmaWxlIGFueXdoZXJlIHRvIHVwbG9hZCEi''@;'; put 'put ''KSx5ZSgpKCksbWUoMjEsImRpdiIsMTYpKDIyLCJkaXYiLDE3KSgyMywiZGl2IiwxOCkoMjQsInNwYW4iLDE5KSgyNSwibGFiZWwiLDIwKSxOZSgyNiwiIEJyb3dzZSAiKSx5ZSgpKCksbWUoMjcsImlucHV0IiwyMSwyMikseHQoImNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZ2V0Rmls''@;'; put 'put ''ZURlc2MoZil9KSx5ZSgpKCkoKSgpKCkoKSxtZSgyOSwiY2xyLW1vZGFsIiwyMykseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9Zn0pLG1lKDMwLCJoMyIsMTMpLE5lKDMxLCJOb3RpY2UiKSx5ZSgpLG1lKDMyLCJkaXYiLDE0''@;'; put 'put ''KSgzMywicCIsMjQpLE5lKDM0KSx5ZSgpKCksbWUoMzUsImRpdiIsMjUpKDM2LCJidXR0b24iLDI2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0TGltaXROb3RpY2U9ITF9KSxOZSgzNywiIENhbmNlbCAiKSx5ZSgpLG1lKDM4LCJidXR0b24iLDI2KSx4dCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIGQuc3VibWl0KCksZC5zdWJtaXRMaW1pdE5vdGljZT0hMX0pLE5lKDM5LCIgU3VibWl0ICIpLHllKCkoKSgpKCksUWUoNDAsdVllLDQsMywibmctdGVtcGxhdGUiLG51bGwsMjcsRWMpKSwyJmEpe2NvbnN0IGg9JGkoNik7Q2UoMSksUmUoIm5nSWYiLGQueGxt''@;'; put 'put ''YXBzTG9hZGluZyksQ2UoNCksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxDZSgyKSxSZSgibmdJZiIsaC52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGgudmFsdWUubGVuZ3RoPjApLENlKDEpLFJlKCJuZ0Zvck9mIixkLnhsbWFwcyksQ2UoMiksUmUoIm5nSWYiLCFkLnNl''@;'; put 'put ''bGVjdGVkWExNYXApLENlKDEpLFJlKCJuZ0lmIixkLmlzTG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLCFkLmlzTG9hZGluZyYmZC5zZWxlY3RlZFhMTWFwKSxDZSgxKSxSZSgidXBsb2FkZXIiLGQudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9w''@;'; put 'put ''IiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxPcGVuIixkLnNob3dVcGxvYWRNb2RhbCksQ2UoMTMpLFJlKCJ1cGxvYWRlciIsZC51cGxvYWRlciksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5zdWJtaXRMaW1pdE5vdGljZSksQ2UoNSksZ3IoIiBEdWUgdG8gY3VycmVu''@;'; put 'put ''dCBsaWNlbmNlLCBvbmx5ICIsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5k''@;'; put 'put ''ZW5jaWVzOlt4eSxCdSxXYSxCcyxPcyxkZCxnMSxEcCxrYSxvdSxzdSxFOCxVcyxmMSxMcCxPcCxkZyxScCxJcCxjZyx1MixuMyx4cyxaaSxyZCxZYixFc2Usa3NlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXJv''@;'; put 'put ''d1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1''@;'; put 'put ''c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRl''@;'; put 'put ''clN0eWxle2JhY2tncm91bmQ6cmdiYSg0OCwxMDcsMCwuNDMxMzcyNTQ5KX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2Zm''@;'; put 'put ''Zjt6LWluZGV4Oi0xfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoyMHB4O2NvbG9yOiNmZmZ9Il19KSxjfSkoKTtjb25zdCBkWWU9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBj''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29u''@;'; put 'put ''dGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6UHNlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6''@;'; put 'put ''UHNlfV19XTtsZXQgaFllPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2RjLmZvckNoaWxkKGRZZSksZGNdfSksY30pKCk7RnooKTts''@;'; put 'put ''ZXQgZlllPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W183LGhZZSwkbCxfdSxCNyxvbyxRQSxDMl19KSxjfSkoKTtjb25zdCBwWWU9''@;'; put 'put ''W3twYXRoOiIiLGNvbXBvbmVudDppWmUsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidGFibGVzIn0se3BhdGg6InRhYmxlcyIsY29tcG9uZW50OlVaZX0se3BhdGg6ImZpbGVzIixsb2FkQ2hpbGRyZW46KCk9PmZZZX1dfV07bGV0IGdZZT0oKCk9Pntj''@;'; put 'put ''bGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChwWWUpLGRjXX0pLGN9KSgpLGhVPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W2dZZSwkbCxfdSxCNyxvbyxRQSxDMl19KSxjfSkoKSxmVT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxvbywkbCxCNyx0dyxDMl19KSxjfSkoKSxGc2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sX3Usb28sJGwsZlUsXzcsQ3NlLExvZSxRQSxDMl19KSxjfSkoKTtGeigpO2xldCBtWWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbRnNlLG9vLCRsLHJaZSxfdSxfNy5mb3JSb290KCksQjcsQzIsVjcsaFUsdHcsUUEsQ3NlLGZVXX0pLGN9KSgpLHBVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2Vu''@;'; put 'put ''Y2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3RpdmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxs''@;'; put 'put ''IT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuISho''@;'; put 'put ''Py51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3RlciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKEMwKSxhcihEcykpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMs''@;'; put 'put ''ZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2Z1bmN0aW9uIEhzZShjLGwpeyhmdW5jdGlvbiB2WWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSko''@;'; put 'put ''YyxsKSxsLmFkZChjKX1mdW5jdGlvbiBnVShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gYX1mdW5jdGlvbiBsdyhjKXtyZXR1cm4obHc9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24obCl7cmV0dXJuIHR5cGVvZiBsfTpmdW5jdGlvbihsKXtyZXR1cm4gbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmbC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmbCE9PVN5bWJvbC5wcm90b3R5''@;'; put 'put ''cGU/InN5bWJvbCI6dHlwZW9mIGx9KShjKX1mdW5jdGlvbiBGMChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYlllKGMpe3ZhciBsPWZ1bmN0aW9uIF9ZZShjLGwpe2lmKCJvYmplY3QiIT09bHcoYyl8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2''@;'; put 'put ''b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09bHcoZCkpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09PWx3KGwpP2w6U3RyaW5nKGwpfShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31sZXQgbDQ9e2Fz''@;'; put 'put ''eW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVs''@;'; put 'put ''bCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiBOc2UoYyl7bDQ9Y31jb25zdCBWc2U9L1smPD4iJ10vLHlZZT1uZXcgUmVnRXhwKFZzZS5zb3VyY2UsImci''@;'; put 'put ''KSxCc2U9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLHdZZT1uZXcgUmVnRXhwKEJzZS5zb3VyY2UsImciKSxDWWU9eyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LGpzZT1jPT5DWWVb''@;'; put 'put ''Y107ZnVuY3Rpb24gU3UoYyxsKXtpZihsKXtpZihWc2UudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKHlZZSxqc2UpfWVsc2UgaWYoQnNlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSh3WWUsanNlKTtyZXR1cm4gY31jb25zdCBTWWU9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/''@;'; put 'put ''Olx3KykpOz8vZ2k7ZnVuY3Rpb24genNlKGMpe3JldHVybiBjLnJlcGxhY2UoU1llLChsLGEpPT4iY29sb24iPT09KGE9YS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/IngiPT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLnN1YnN0cmlu''@;'; put 'put ''ZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgTVllPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIGZhKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9mIGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9PihoPShoPWgu''@;'; put 'put ''c291cmNlfHxoKS5yZXBsYWNlKE1ZZSwiJDEiKSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGMsbCl9O3JldHVybiBhfWNvbnN0IHhZZT0vW15cdzpdL2csRVllPS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gVXNlKGMsbCxhKXtp''@;'; put 'put ''ZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklDb21wb25lbnQoenNlKGEpKS5yZXBsYWNlKHhZZSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PWQuaW5kZXhP''@;'; put 'put ''ZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYhRVllLnRlc3QoYSkmJihhPWZ1bmN0aW9uIERZZShjLGwpe2VUWyIgIitjXXx8KGVUWyIgIitjXT1rWWUudGVzdChjKT9jKyIvIjpuVChjLCIvIiwhMCkpO2NvbnN0IGE9LTE9PT0oYz1lVFsiICIrY10pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8i''@;'; put 'put ''PT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5yZXBsYWNlKEFZZSwiJDEiKStsOiIvIj09PWwuY2hhckF0KDApP2E/bDpjLnJlcGxhY2UoVFllLCIkMSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNvZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4g''@;'; put 'put ''YX1jb25zdCBlVD17fSxrWWU9L15bXjpdKzpcLypbXi9dKiQvLEFZZT0vXihbXjpdKzopW1xzXFNdKiQvLFRZZT0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sdFQ9e2V4ZWM6ZnVuY3Rpb24oKXt9fTtmdW5jdGlvbiBac2UoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwvZywoZixfLFQp''@;'; put 'put ''PT57bGV0IFc9ITEsaWU9Xztmb3IoOy0taWU+PTAmJiJcXCI9PT1UW2llXTspVz0hVztyZXR1cm4gVz8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgpLGQubGVu''@;'; put 'put ''Z3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2QubGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVuZ3RoO2grKylkW2hdPWRbaF0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVybiBkfWZ1bmN0aW9uIG5UKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9PT1kKXJl''@;'; put 'put ''dHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7aWYoZj09PWx8fCFhKWJyZWFrO2grK31lbHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQtaCl9ZnVuY3Rpb24gWXNlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50aXRsZT9T''@;'; put 'put ''dShsLnRpdGxlKTpudWxsLF89Y1sxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1swXS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5MaW5rPSEwO2NvbnN0IFQ9e3R5cGU6ImxpbmsiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6Xyx0b2tlbnM6ZC5pbmxpbmVUb2tlbnMo''@;'; put 'put ''Xyl9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxUfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDpTdShfKX19Y2xhc3MgclR7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fGw0fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5uZXds''@;'; put 'put ''aW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1jb2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJj''@;'; put 'put ''b2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2Q6blQoZCwiXG4iKX19fWZlbmNlcyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rpb24gUlll''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29uc3QgZD1hWzFdO3JldHVybiBsLnNwbGl0KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1hdGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3RbX109ZjtyZXR1cm4g''@;'; put 'put ''Xy5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5sZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0ZXh0Omh9''@;'; put 'put ''fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KGQpKXtjb25zdCBoPW5UKGQsIiMiKTsodGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9aC50cmlt''@;'; put 'put ''KCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzphWzBdfX1i''@;'; put 'put ''bG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhlci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10aGlzLmxl''@;'; put 'put ''eGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMucnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZixfLFQsVyxpZSxn''@;'; put 'put ''ZSx3ZSxFZSxaZSxvdCxldD1hWzFdLnRyaW0oKTtjb25zdCB5dD1ldC5sZW5ndGg+MSxrdD17dHlwZToibGlzdCIscmF3OiIiLG9yZGVyZWQ6eXQsc3RhcnQ6eXQ/K2V0LnNsaWNlKDAsLTEpOiIiLGxvb3NlOiExLGl0ZW1zOltdfTtldD15dD9gXFxkezEsOX1cXCR7ZXQuc2xpY2UoLTEpfWA6''@;'; put 'put ''YFxcJHtldH1gLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGV0PXl0P2V0OiJbKistXSIpO2NvbnN0IFN0PW5ldyBSZWdFeHAoYF4oIHswLDN9JHtldH0pKCg/OltcdCBdW15cXG5dKik/KD86XFxufCQpKWApO2Zvcig7bCYmKG90PSExLChhPVN0LmV4ZWMobCkpJiYhdGhpcy5ydWxlcy5ibG9j''@;'; put 'put ''ay5oci50ZXN0KGwpKTspe2lmKGQ9YVswXSxsPWwuc3Vic3RyaW5nKGQubGVuZ3RoKSxnZT1hWzJdLnNwbGl0KCJcbiIsMSlbMF0ucmVwbGFjZSgvXlx0Ky8scm49PiIgIi5yZXBlYXQoMypybi5sZW5ndGgpKSx3ZT1sLnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhf''@;'; put 'put ''PTIsWmU9Z2UudHJpbUxlZnQoKSk6KF89YVsyXS5zZWFyY2goL1teIF0vKSxfPV8+ND8xOl8sWmU9Z2Uuc2xpY2UoXyksXys9YVsxXS5sZW5ndGgpLFc9ITEsIWdlJiYvXiAqJC8udGVzdCh3ZSkmJihkKz13ZSsiXG4iLGw9bC5zdWJzdHJpbmcod2UubGVuZ3RoKzEpLG90PSEwKSwhb3Qpe2Nv''@;'; put 'put ''bnN0IHJuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSg/OlsqKy1dfFxcZHsxLDl9Wy4pXSkoKD86WyBcdF1bXlxcbl0qKT8oPzpcXG58JCkpYCksdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19KCg/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/Olxc''@;'; put 'put ''KiAqKXszLH0pKD86XFxuK3wkKWApLE5uPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLF8tMSl9fSg/OlxgXGBcYHx+fn4pYCksY3I9bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsXy0xKX19I2ApO2Zvcig7bCYmKEVlPWwuc3BsaXQoIlxuIiwxKVswXSx3ZT1FZSx0aGlzLm9w''@;'; put 'put ''dGlvbnMucGVkYW50aWMmJih3ZT13ZS5yZXBsYWNlKC9eIHsxLDR9KD89KCB7NH0pKlteIF0pL2csIiAgIikpLCEoTm4udGVzdCh3ZSl8fGNyLnRlc3Qod2UpfHxybi50ZXN0KHdlKXx8dm4udGVzdChsKSkpOyl7aWYod2Uuc2VhcmNoKC9bXiBdLyk+PV98fCF3ZS50cmltKCkpWmUrPSJcbiIr''@;'; put 'put ''d2Uuc2xpY2UoXyk7ZWxzZXtpZihXfHxnZS5zZWFyY2goL1teIF0vKT49NHx8Tm4udGVzdChnZSl8fGNyLnRlc3QoZ2UpfHx2bi50ZXN0KGdlKSlicmVhaztaZSs9IlxuIit3ZX0hVyYmIXdlLnRyaW0oKSYmKFc9ITApLGQrPUVlKyJcbiIsbD1sLnN1YnN0cmluZyhFZS5sZW5ndGgrMSksZ2U9''@;'; put 'put ''d2Uuc2xpY2UoXyl9fWt0Lmxvb3NlfHwoaWU/a3QubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChkKSYmKGllPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9L15cW1sgeFhdXF0gLy5leGVjKFplKSxoJiYoZj0iWyBdICIhPT1oWzBdLFplPVplLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIp''@;'; put 'put ''KSksa3QuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9vc2U6ITEsdGV4dDpaZX0pLGt0LnJhdys9ZH1rdC5pdGVtc1trdC5pdGVtcy5sZW5ndGgtMV0ucmF3PWQudHJpbVJpZ2h0KCksa3QuaXRlbXNba3QuaXRlbXMubGVuZ3RoLTFdLnRl''@;'; put 'put ''eHQ9WmUudHJpbVJpZ2h0KCksa3QucmF3PWt0LnJhdy50cmltUmlnaHQoKTtjb25zdCBRdD1rdC5pdGVtcy5sZW5ndGg7Zm9yKFQ9MDtUPFF0O1QrKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxrdC5pdGVtc1tUXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhrdC5pdGVtc1tU''@;'; put 'put ''XS50ZXh0LFtdKSwha3QubG9vc2Upe2NvbnN0IHJuPWt0Lml0ZW1zW1RdLnRva2Vucy5maWx0ZXIoTm49PiJzcGFjZSI9PT1Obi50eXBlKSx2bj1ybi5sZW5ndGg+MCYmcm4uc29tZShObj0+L1xuLipcbi8udGVzdChObi5yYXcpKTtrdC5sb29zZT12bn1pZihrdC5sb29zZSlmb3IoVD0wO1Q8''@;'; put 'put ''UXQ7VCsrKWt0Lml0ZW1zW1RdLmxvb3NlPSEwO3JldHVybiBrdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2NrOiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUi''@;'; put 'put ''PT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUiPT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGFbMF0pOlN1KGFbMF0pO2QudHlwZT0icGFyYWdyYXBo''@;'; put 'put ''IixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlubGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJlcGxh''@;'; put 'put ''Y2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToiZGVm''@;'; put 'put ''Iix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6WnNlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxhY2Uo''@;'; put 'put ''L14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5ndGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZixfLFQsVyxoPWQu''@;'; put 'put ''YWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFsaWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjovXiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2ZvcihoPWQu''@;'; put 'put ''cm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2ZdPVpzZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3RoKS5tYXAoaWU9Pih7dGV4dDppZX0pKTtmb3IoaD1kLmhlYWRlci5sZW5ndGgsXz0wO188aDtfKyspZC5oZWFkZXJbX10udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGQuaGVhZGVy''@;'; put 'put ''W19dLnRleHQpO2ZvcihoPWQucm93cy5sZW5ndGgsXz0wO188aDtfKyspZm9yKFc9ZC5yb3dzW19dLFQ9MDtUPFcubGVuZ3RoO1QrKylXW1RdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShXW1RdLnRleHQpO3JldHVybiBkfX19bGhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2Nr''@;'; put 'put ''LmxoZWFkaW5nLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6Ij0iPT09YVsyXS5jaGFyQXQoMCk/MToyLHRleHQ6YVsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVsxXSl9fXBhcmFncmFwaChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2su''@;'; put 'put ''cGFyYWdyYXBoLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD0iXG4iPT09YVsxXS5jaGFyQXQoYVsxXS5sZW5ndGgtMSk/YVsxXS5zbGljZSgwLC0xKTphWzFdO3JldHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzphWzBdLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZCl9fX10ZXh0KGwp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToidGV4dCIscmF3OmFbMF0sdGV4dDphWzBdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShhWzBdKX19ZXNjYXBlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMobCk7''@;'; put 'put ''aWYoYSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6YVswXSx0ZXh0OlN1KGFbMV0pfX10YWcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhlYyhsKTtpZihhKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3Rh''@;'; put 'put ''dGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwhdGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pP3Ro''@;'; put 'put ''aXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXpl''@;'; put 'put ''PyJ0ZXh0IjoiaHRtbCIscmF3OmFbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25z''@;'; put 'put ''LnNhbml0aXplcihhWzBdKTpTdShhWzBdKTphWzBdfX1saW5rKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KGQpKXtpZighLz4kLy50ZXN0KGQpKXJl''@;'; put 'put ''dHVybjtjb25zdCBfPW5UKGQuc2xpY2UoMCwtMSksIlxcIik7aWYoKGQubGVuZ3RoLV8ubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNle2NvbnN0IF89ZnVuY3Rpb24gSVllKGMsbCl7aWYoLTE9PT1jLmluZGV4T2YobFsxXSkpcmV0dXJuLTE7Y29uc3QgYT1jLmxlbmd0aDtsZXQgZD0wLGg9MDtm''@;'; put 'put ''b3IoO2g8YTtoKyspaWYoIlxcIj09PWNbaF0paCsrO2Vsc2UgaWYoY1toXT09PWxbMF0pZCsrO2Vsc2UgaWYoY1toXT09PWxbMV0mJihkLS0sZDwwKSlyZXR1cm4gaDtyZXR1cm4tMX0oYVsyXSwiKCkiKTtpZihfPi0xKXtjb25zdCBXPSgwPT09YVswXS5pbmRleE9mKCIhIik/NTo0KSthWzFd''@;'; put 'put ''Lmxlbmd0aCtfO2FbMl09YVsyXS5zdWJzdHJpbmcoMCxfKSxhWzBdPWFbMF0uc3Vic3RyaW5nKDAsVykudHJpbSgpLGFbM109IiJ9fWxldCBoPWFbMl0sZj0iIjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2NvbnN0IF89L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKGgp''@;'; put 'put ''O18mJihoPV9bMV0sZj1fWzNdKX1lbHNlIGY9YVszXT9hWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBoPWgudHJpbSgpLC9ePC8udGVzdChoKSYmKGg9dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KGQpP2guc2xpY2UoMSk6aC5zbGljZSgxLC0xKSksWXNlKGEse2hyZWY6aCYm''@;'; put 'put ''aC5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmYmJmYucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sYVswXSx0aGlzLmxleGVyKX19cmVmbGluayhsLGEpe2xldCBkO2lmKChkPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsu''@;'; put 'put ''ZXhlYyhsKSl8fChkPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGwpKSl7bGV0IGg9KGRbMl18fGRbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYoaD1hW2gudG9Mb3dlckNhc2UoKV0sIWgpe2NvbnN0IGY9ZFswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpmLHRl''@;'; put 'put ''eHQ6Zn19cmV0dXJuIFlzZShkLGgsZFswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcobCxhLGQ9IiIpe2xldCBoPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLmxEZWxpbS5leGVjKGwpO2lmKCEoIWh8fGhbM10mJmQubWF0Y2goL1tccHtMfVxwe059XS91KSkmJighaFsxXSYmIWhbMl18fCFk''@;'; put 'put ''fHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGQpKSl7Y29uc3QgXz1oWzBdLmxlbmd0aC0xO2xldCBULFcsaWU9XyxnZT0wO2NvbnN0IHdlPSIqIj09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ry''@;'; put 'put ''b25nLnJEZWxpbVVuZDtmb3Iod2UubGFzdEluZGV4PTAsYT1hLnNsaWNlKC0xKmwubGVuZ3RoK18pO251bGwhPShoPXdlLmV4ZWMoYSkpOyl7aWYoVD1oWzFdfHxoWzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZdLCFUKWNvbnRpbnVlO2lmKFc9VC5sZW5ndGgsaFszXXx8aFs0XSl7aWUrPVc7''@;'; put 'put ''Y29udGludWV9aWYoKGhbNV18fGhbNl0pJiZfJTMmJiEoKF8rVyklMykpe2dlKz1XO2NvbnRpbnVlfWlmKGllLT1XLGllPjApY29udGludWU7Vz1NYXRoLm1pbihXLFcraWUrZ2UpO2NvbnN0IEVlPWwuc2xpY2UoMCxfK2guaW5kZXgrVysxKTtpZihNYXRoLm1pbihfLFcpJTIpe2NvbnN0IG90''@;'; put 'put ''PUVlLnNsaWNlKDEsLTEpO3JldHVybnt0eXBlOiJlbSIscmF3OkVlLHRleHQ6b3QsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKG90KX19Y29uc3QgWmU9RWUuc2xpY2UoMiwtMik7cmV0dXJue3R5cGU6InN0cm9uZyIscmF3OkVlLHRleHQ6WmUsdG9rZW5zOnRoaXMubGV4ZXIuaW5s''@;'; put 'put ''aW5lVG9rZW5zKFplKX19fX1jb2Rlc3BhbihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmNvZGUuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnJlcGxhY2UoL1xuL2csIiAiKTtjb25zdCBoPS9bXiBdLy50ZXN0KGQpLGY9L14gLy50ZXN0KGQpJiYvICQvLnRlc3QoZCk7cmV0dXJuIGgm''@;'; put 'put ''JmYmJihkPWQuc3Vic3RyaW5nKDEsZC5sZW5ndGgtMSkpLGQ9U3UoZCwhMCkse3R5cGU6ImNvZGVzcGFuIixyYXc6YVswXSx0ZXh0OmR9fX1icihsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmJyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiYnIiLHJhdzphWzBdfX1kZWwobCl7Y29u''@;'; put 'put ''c3QgYT10aGlzLnJ1bGVzLmlubGluZS5kZWwuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJkZWwiLHJhdzphWzBdLHRleHQ6YVsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoYVsyXSl9fWF1dG9saW5rKGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5l''@;'; put 'put ''eGVjKGwpO2lmKGQpe2xldCBoLGY7cmV0dXJuIkAiPT09ZFsyXT8oaD1TdSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFsxXSk6ZFsxXSksZj0ibWFpbHRvOiIraCk6KGg9U3UoZFsxXSksZj1oKSx7dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0''@;'; put 'put ''IixyYXc6aCx0ZXh0Omh9XX19fXVybChsLGEpe2xldCBkO2lmKGQ9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4ZWMobCkpe2xldCBoLGY7aWYoIkAiPT09ZFsyXSloPVN1KHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzBdKTpkWzBdKSxmPSJtYWlsdG86IitoO2Vsc2V7bGV0IF87ZG97Xz1kWzBd''@;'; put 'put ''LGRbMF09dGhpcy5ydWxlcy5pbmxpbmUuX2JhY2twZWRhbC5leGVjKGRbMF0pWzBdfXdoaWxlKF8hPT1kWzBdKTtoPVN1KGRbMF0pLGY9Ind3dy4iPT09ZFsxXT8iaHR0cDovLyIrZFswXTpkWzBdfXJldHVybnt0eXBlOiJsaW5rIixyYXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5''@;'; put 'put ''cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19aW5saW5lVGV4dChsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUudGV4dC5leGVjKGwpO2lmKGQpe2xldCBoO3JldHVybiBoPXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz90aGlzLm9wdGlvbnMuc2FuaXRpemU/dGhpcy5vcHRpb25z''@;'; put 'put ''LnNhbml0aXplcj90aGlzLm9wdGlvbnMuc2FuaXRpemVyKGRbMF0pOlN1KGRbMF0pOmRbMF06U3UodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2EoZFswXSk6ZFswXSkse3R5cGU6InRleHQiLHJhdzpkWzBdLHRleHQ6aH19fX1jb25zdCBUbz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8s''@;'; put 'put ''Y29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjov''@;'; put 'put ''XiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkp''@;'; put 'put ''Ky8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxT''@;'; put 'put ''XSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwvPyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0''@;'; put 'put ''YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNd''@;'; put 'put ''Kj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6dFQsbGhlYWRpbmc6L14oKD86KD8hXmJ1bGwgKS58XG4o''@;'; put 'put ''PyFcbnxidWxsICkpKz8pXG4gezAsM30oPSt8LSspICooPzpcbit8JCkvLF9wYXJhZ3JhcGg6L14oW15cbl0rKD86XG4oPyFocnxoZWFkaW5nfGxoZWFkaW5nfGJsb2NrcXVvdGV8ZmVuY2VzfGxpc3R8aHRtbHx0YWJsZXwgK1xuKVteXG5dKykqKS8sdGV4dDovXlteXG5dKy8sX2xhYmVsOi8o''@;'; put 'put ''PyFccypcXSkoPzpcXC58W15cW1xdXFxdKSsvLF90aXRsZTovKD86Iig/OlxcIj98W14iXFxdKSoifCdbXidcbl0qKD86XG5bXidcbl0rKSpcbj8nfFwoW14oKV0qXCkpL307VG8uZGVmPWZhKFRvLmRlZikucmVwbGFjZSgibGFiZWwiLFRvLl9sYWJlbCkucmVwbGFjZSgidGl0bGUiLFRvLl90''@;'; put 'put ''aXRsZSkuZ2V0UmVnZXgoKSxUby5idWxsZXQ9Lyg/OlsqKy1dfFxkezEsOX1bLildKS8sVG8ubGlzdEl0ZW1TdGFydD1mYSgvXiggKikoYnVsbCkgKi8pLnJlcGxhY2UoImJ1bGwiLFRvLmJ1bGxldCkuZ2V0UmVnZXgoKSxUby5saXN0PWZhKFRvLmxpc3QpLnJlcGxhY2UoL2J1bGwvZyxUby5i''@;'; put 'put ''dWxsZXQpLnJlcGxhY2UoImhyIiwiXFxuKyg/PVxcMT8oPzooPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkpIikucmVwbGFjZSgiZGVmIiwiXFxuKyg/PSIrVG8uZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksVG8uX3RhZz0iYWRkcmVzc3xhcnRpY2xl''@;'; put 'put ''fGFzaWRlfGJhc2V8YmFzZWZvbnR8YmxvY2txdW90ZXxib2R5fGNhcHRpb258Y2VudGVyfGNvbHxjb2xncm91cHxkZHxkZXRhaWxzfGRpYWxvZ3xkaXJ8ZGl2fGRsfGR0fGZpZWxkc2V0fGZpZ2NhcHRpb258ZmlndXJlfGZvb3Rlcnxmb3JtfGZyYW1lfGZyYW1lc2V0fGhbMS02XXxoZWFkfGhl''@;'; put 'put ''YWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bWV0YXxuYXZ8bm9mcmFtZXN8b2x8b3B0Z3JvdXB8b3B0aW9ufHB8cGFyYW18c2VjdGlvbnxzb3VyY2V8c3VtbWFyeXx0YWJsZXx0Ym9keXx0ZHx0Zm9vdHx0aHx0aGVhZHx0aXRsZXx0cnx0cmFj''@;'; put 'put ''a3x1bCIsVG8uX2NvbW1lbnQ9LzwhLS0oPyEtPz4pW1xzXFNdKj8oPzotLT58JCkvLFRvLmh0bWw9ZmEoVG8uaHRtbCwiaSIpLnJlcGxhY2UoImNvbW1lbnQiLFRvLl9jb21tZW50KS5yZXBsYWNlKCJ0YWciLFRvLl90YWcpLnJlcGxhY2UoImF0dHJpYnV0ZSIsLyArW2EtekEtWjpfXVtcdy46''@;'; put 'put ''LV0qKD86ICo9ICoiW14iXG5dKiJ8ICo9IConW14nXG5dKid8ICo9ICpbXlxzIic9PD5gXSspPy8pLmdldFJlZ2V4KCksVG8ubGhlYWRpbmc9ZmEoVG8ubGhlYWRpbmcpLnJlcGxhY2UoL2J1bGwvZyxUby5idWxsZXQpLmdldFJlZ2V4KCksVG8ucGFyYWdyYXBoPWZhKFRvLl9wYXJhZ3JhcGgp''@;'; put 'put ''LnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9''@;'; put 'put ''KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRh''@;'; put 'put ''ZyIsVG8uX3RhZykuZ2V0UmVnZXgoKSxUby5ibG9ja3F1b3RlPWZhKFRvLmJsb2NrcXVvdGUpLnJlcGxhY2UoInBhcmFncmFwaCIsVG8ucGFyYWdyYXBoKS5nZXRSZWdleCgpLFRvLm5vcm1hbD17Li4uVG99LFRvLmdmbT17Li4uVG8ubm9ybWFsLHRhYmxlOiJeICooW15cXG4gXS4qXFx8Liop''@;'; put 'put ''XFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLiooPzpcXG58JCkpKilcXG4qfCQpIn0sVG8uZ2ZtLnRhYmxlPWZhKFRvLmdm''@;'; put 'put ''bS50YWJsZSkucmVwbGFjZSgiaHIiLFRvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxc''@;'; put 'put ''bl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFRvLl90''@;'; put 'put ''YWcpLmdldFJlZ2V4KCksVG8uZ2ZtLnBhcmFncmFwaD1mYShUby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsVG8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgidGFibGUiLFRvLmdmbS50YWJsZSkucmVwbGFj''@;'; put 'put ''ZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiAr''@;'; put 'put ''fFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFRvLl90YWcpLmdldFJlZ2V4KCksVG8ucGVkYW50aWM9ey4uLlRvLm5vcm1hbCxodG1sOmZhKCJeICooPzpjb21tZW50ICooPzpcXG58XFxzKiQpfDwodGFnKVtcXHNcXFNdKz88L1xc''@;'; put 'put ''MT4gKig/OlxcbnsyLH18XFxzKiQpfDx0YWcoPzpcIlteXCJdKlwifCdbXiddKid8XFxzW14nXCIvPlxcc10qKSo/Lz8+ICooPzpcXG57Mix9fFxccyokKSkiKS5yZXBsYWNlKCJjb21tZW50IixUby5fY29tbWVudCkucmVwbGFjZSgvdGFnL2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8''@;'; put 'put ''Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxiIikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1d''@;'; put 'put ''KylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6dFQsbGhlYWRpbmc6L14oLis/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxwYXJhZ3JhcGg6ZmEoVG8ubm9ybWFs''@;'; put 'put ''Ll9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixUby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiAqI3sxLDZ9ICpbXlxuXSIpLnJlcGxhY2UoImxoZWFkaW5nIixUby5saGVhZGluZykucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJ8ZmVuY2VzIiwiIikucmVwbGFjZSgi''@;'; put 'put ''fGxpc3QiLCIiKS5yZXBsYWNlKCJ8aHRtbCIsIiIpLmdldFJlZ2V4KCl9O2NvbnN0IFhpPXtlc2NhcGU6L15cXChbISIjJCUmJygpKissXC0uLzo7PD0+P0BcW1xdXFxeX2B7fH1+XSkvLGF1dG9saW5rOi9ePChzY2hlbWU6W15cc1x4MDAtXHgxZjw+XSp8ZW1haWwpPi8sdXJsOnRULHRhZzoi''@;'; put 'put ''XmNvbW1lbnR8XjwvW2EtekEtWl1bXFx3Oi1dKlxccyo+fF48W2EtekEtWl1bXFx3LV0qKD86YXR0cmlidXRlKSo/XFxzKi8/PnxePFxcP1tcXHNcXFNdKj9cXD8+fF48IVthLXpBLVpdK1xcc1tcXHNcXFNdKj8+fF48IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4iLGxpbms6L14hP1xb''@;'; put 'put ''KGxhYmVsKVxdXChccyooaHJlZikoPzpccysodGl0bGUpKT9ccypcKS8scmVmbGluazovXiE/XFsobGFiZWwpXF1cWyhyZWYpXF0vLG5vbGluazovXiE/XFsocmVmKVxdKD86XFtcXSk/LyxyZWZsaW5rU2VhcmNoOiJyZWZsaW5rfG5vbGluayg/IVxcKCkiLGVtU3Ryb25nOntsRGVsaW06L14o''@;'; put 'put ''PzpcKisoPzooKD8hXCopW3B1bmN0XSl8W15ccypdKSl8Xl8rKD86KCg/IV8pW3B1bmN0XSl8KFteXHNfXSkpLyxyRGVsaW1Bc3Q6L15bXl8qXSo/X19bXl8qXSo/XCpbXl8qXSo/KD89X18pfFteKl0rKD89W14qXSl8KD8hXCopW3B1bmN0XShcKispKD89W1xzXXwkKXxbXnB1bmN0XHNdKFwq''@;'; put 'put ''KykoPyFcKikoPz1bcHVuY3Rcc118JCl8KD8hXCopW3B1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKXxbXHNdKFwqKykoPyFcKikoPz1bcHVuY3RdKXwoPyFcKilbcHVuY3RdKFwqKykoPyFcKikoPz1bcHVuY3RdKXxbXnB1bmN0XHNdKFwqKykoPz1bXnB1bmN0XHNdKS8sckRlbGltVW5kOi9e''@;'; put 'put ''W15fKl0qP1wqXCpbXl8qXSo/X1teXypdKj8oPz1cKlwqKXxbXl9dKyg/PVteX10pfCg/IV8pW3B1bmN0XShfKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXyspKD8hXykoPz1bcHVuY3Rcc118JCl8KD8hXylbcHVuY3Rcc10oXyspKD89W15wdW5jdFxzXSl8W1xzXShfKykoPyFfKSg/PVtwdW5j''@;'; put 'put ''dF0pfCg/IV8pW3B1bmN0XShfKykoPyFfKSg/PVtwdW5jdF0pL30sY29kZTovXihgKykoW15gXXxbXmBdW1xzXFNdKj9bXmBdKVwxKD8hYCkvLGJyOi9eKCB7Mix9fFxcKVxuKD8hXHMqJCkvLGRlbDp0VCx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xzXFNdKj8oPzooPz1bXFw8''@;'; put 'put ''IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99O2Z1bmN0aW9uIE9ZZShjKXtyZXR1cm4gYy5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIikucmVwbGFjZSgvKF58Wy1c''@;'; put 'put ''dTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIwMjYiKX1mdW5jdGlvbiBX''@;'; put 'put ''c2UoYyl7bGV0IGEsZCxsPSIiO2NvbnN0IGg9Yy5sZW5ndGg7Zm9yKGE9MDthPGg7YSsrKWQ9Yy5jaGFyQ29kZUF0KGEpLE1hdGgucmFuZG9tKCk+LjUmJihkPSJ4IitkLnRvU3RyaW5nKDE2KSksbCs9IiYjIitkKyI7IjtyZXR1cm4gbH1YaS5fcHVuY3R1YXRpb249IlxccHtQfSQrPD0+YF58''@;'; put 'put ''fiIsWGkucHVuY3R1YXRpb249ZmEoWGkucHVuY3R1YXRpb24sInUiKS5yZXBsYWNlKC9wdW5jdHVhdGlvbi9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5ibG9ja1NraXA9L1xbW15bXF1dKj9cXVwoW15cKFwpXSo/XCl8YFteYF0qP2B8PFtePD5dKj8+L2csWGkuYW55UHVuY3R1''@;'; put 'put ''YXRpb249L1xcW3B1bmN0XS9nLFhpLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLFhpLl9jb21tZW50PWZhKFRvLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLmxEZWxpbT1mYShYaS5lbVN0cm9uZy5sRGVsaW0sInUiKS5y''@;'; put 'put ''ZXBsYWNlKC9wdW5jdC9nLFhpLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxYaS5lbVN0cm9uZy5yRGVsaW1Bc3Q9ZmEoWGkuZW1TdHJvbmcuckRlbGltQXN0LCJndSIpLnJlcGxhY2UoL3B1bmN0L2csWGkuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLFhpLmVtU3Ryb25nLnJEZWxpbVVuZD1m''@;'; put 'put ''YShYaS5lbVN0cm9uZy5yRGVsaW1VbmQsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuYW55UHVuY3R1YXRpb249ZmEoWGkuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCks''@;'; put 'put ''WGkuX2VzY2FwZXM9ZmEoWGkuX2VzY2FwZXMsImd1IikucmVwbGFjZSgvcHVuY3QvZyxYaS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksWGkuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sWGkuX2VtYWlsPS9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dKyhA''@;'; put 'put ''KVthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSsoPyFbLV9dKS8sWGkuYXV0b2xpbms9ZmEoWGkuYXV0b2xpbmspLnJlcGxhY2UoInNjaGVtZSIsWGkuX3NjaGVtZSku''@;'; put 'put ''cmVwbGFjZSgiZW1haWwiLFhpLl9lbWFpbCkuZ2V0UmVnZXgoKSxYaS5fYXR0cmlidXRlPS9ccytbYS16QS1aOl9dW1x3LjotXSooPzpccyo9XHMqIlteIl0qInxccyo9XHMqJ1teJ10qJ3xccyo9XHMqW15ccyInPTw+YF0rKT8vLFhpLnRhZz1mYShYaS50YWcpLnJlcGxhY2UoImNvbW1lbnQi''@;'; put 'put ''LFhpLl9jb21tZW50KS5yZXBsYWNlKCJhdHRyaWJ1dGUiLFhpLl9hdHRyaWJ1dGUpLmdldFJlZ2V4KCksWGkuX2xhYmVsPS8oPzpcWyg/OlxcLnxbXlxbXF1cXF0pKlxdfFxcLnxgW15gXSpgfFteXFtcXVxcYF0pKj8vLFhpLl9ocmVmPS88KD86XFwufFteXG48PlxcXSkrPnxbXlxzXHgwMC1c''@;'; put 'put ''eDFmXSovLFhpLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpcXCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLFhpLmxpbms9ZmEoWGkubGluaykucmVwbGFjZSgibGFiZWwiLFhpLl9sYWJlbCkucmVwbGFjZSgiaHJlZiIsWGkuX2hyZWYpLnJlcGxhY2UoInRpdGxl''@;'; put 'put ''IixYaS5fdGl0bGUpLmdldFJlZ2V4KCksWGkucmVmbGluaz1mYShYaS5yZWZsaW5rKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5yZXBsYWNlKCJyZWYiLFRvLl9sYWJlbCkuZ2V0UmVnZXgoKSxYaS5ub2xpbms9ZmEoWGkubm9saW5rKS5yZXBsYWNlKCJyZWYiLFRvLl9sYWJlbCkuZ2V0''@;'; put 'put ''UmVnZXgoKSxYaS5yZWZsaW5rU2VhcmNoPWZhKFhpLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJyZWZsaW5rIixYaS5yZWZsaW5rKS5yZXBsYWNlKCJub2xpbmsiLFhpLm5vbGluaykuZ2V0UmVnZXgoKSxYaS5ub3JtYWw9ey4uLlhpfSxYaS5wZWRhbnRpYz17Li4uWGkubm9ybWFsLHN0''@;'; put 'put ''cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8XlwqXCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClc''@;'; put 'put ''Kig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazpmYSgvXiE/XFsobGFiZWwpXF1cKCguKj8pXCkvKS5yZXBsYWNlKCJsYWJlbCIsWGkuX2xhYmVsKS5nZXRSZWdleCgp''@;'; put 'put ''LHJlZmxpbms6ZmEoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLFhpLl9sYWJlbCkuZ2V0UmVnZXgoKX0sWGkuZ2ZtPXsuLi5YaS5ub3JtYWwsZXNjYXBlOmZhKFhpLmVzY2FwZSkucmVwbGFjZSgiXSkiLCJ+fF0pIikuZ2V0UmVnZXgoKSxfZXh0ZW5k''@;'; put 'put ''ZWRfZW1haWw6L1tBLVphLXowLTkuXystXSsoQClbYS16QS1aMC05LV9dKyg/OlwuW2EtekEtWjAtOS1fXSpbYS16QS1aMC05XSkrKD8hWy1fXSkvLHVybDovXigoPzpmdHB8aHR0cHM/KTpcL1wvfHd3d1wuKSg/OlthLXpBLVowLTlcLV0rXC4/KStbXlxzPF0qfF5lbWFpbC8sX2JhY2twZWRh''@;'; put 'put ''bDovKD86W14/IS4sOjsqXycifigpJl0rfFwoW14pXSpcKXwmKD8hW2EtekEtWjAtOV0rOyQpfFs/IS4sOjsqXycifildKyg/ISQpKSsvLGRlbDovXih+fj8pKD89W15cc35dKShbXHNcU10qP1teXHN+XSlcMSg/PVtefl18JCkvLHRleHQ6L14oW2B+XSt8W15gfl0pKD86KD89IHsyLH1cbil8''@;'; put 'put ''KD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCl8W1xzXFNdKj8oPzooPz1bXFw8IVxbYCp+X118XGJffGh0dHBzPzpcL1wvfGZ0cDpcL1wvfHd3d1wufCQpfFteIF0oPz0gezIsfVxuKXxbXmEtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0oPz1bYS16QS1aMC05LiEj''@;'; put 'put ''JCUmJyorXC89P19ge1x8fX4tXStAKSkpL30sWGkuZ2ZtLnVybD1mYShYaS5nZm0udXJsLCJpIikucmVwbGFjZSgiZW1haWwiLFhpLmdmbS5fZXh0ZW5kZWRfZW1haWwpLmdldFJlZ2V4KCksWGkuYnJlYWtzPXsuLi5YaS5nZm0sYnI6ZmEoWGkuYnIpLnJlcGxhY2UoInsyLH0iLCIqIikuZ2V0''@;'; put 'put ''UmVnZXgoKSx0ZXh0OmZhKFhpLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7MixcfS9nLCIqIikuZ2V0UmVnZXgoKX07Y2xhc3Mga2h7Y29uc3RydWN0b3IobCl7dGhpcy50b2tlbnM9W10sdGhpcy50b2tlbnMubGlua3M9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShudWxsKSx0aGlzLm9wdGlvbnM9bHx8bDQsdGhpcy5vcHRpb25zLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyfHxuZXcgclQsdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRva2Vu''@;'; put 'put ''aXplci5sZXhlcj10aGlzLHRoaXMuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3QmxvY2s6ITEsdG9wOiEwfTtjb25zdCBhPXtibG9jazpUby5ub3JtYWwsaW5saW5lOlhpLm5vcm1hbH07dGhpcy5vcHRpb25zLnBlZGFudGljPyhhLmJsb2NrPVRvLnBlZGFudGlj''@;'; put 'put ''LGEuaW5saW5lPVhpLnBlZGFudGljKTp0aGlzLm9wdGlvbnMuZ2ZtJiYoYS5ibG9jaz1Uby5nZm0sYS5pbmxpbmU9dGhpcy5vcHRpb25zLmJyZWFrcz9YaS5icmVha3M6WGkuZ2ZtKSx0aGlzLnRva2VuaXplci5ydWxlcz1hfXN0YXRpYyBnZXQgcnVsZXMoKXtyZXR1cm57YmxvY2s6VG8saW5s''@;'; put 'put ''aW5lOlhpfX1zdGF0aWMgbGV4KGwsYSl7cmV0dXJuIG5ldyBraChhKS5sZXgobCl9c3RhdGljIGxleElubGluZShsLGEpe3JldHVybiBuZXcga2goYSkuaW5saW5lVG9rZW5zKGwpfWxleChsKXtsZXQgYTtmb3IobD1sLnJlcGxhY2UoL1xyXG58XHIvZywiXG4iKSx0aGlzLmJsb2NrVG9rZW5z''@;'; put 'put ''KGwsdGhpcy50b2tlbnMpO2E9dGhpcy5pbmxpbmVRdWV1ZS5zaGlmdCgpOyl0aGlzLmlubGluZVRva2VucyhhLnNyYyxhLnRva2Vucyk7cmV0dXJuIHRoaXMudG9rZW5zfWJsb2NrVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLF87Zm9yKGw9dGhpcy5vcHRpb25zLnBlZGFudGljP2wucmVwbGFj''@;'; put 'put ''ZSgvXHQvZywiICAgICIpLnJlcGxhY2UoL14gKyQvZ20sIiIpOmwucmVwbGFjZSgvXiggKikoXHQrKS9nbSwoVCxXLGllKT0+VysiICAgICIucmVwZWF0KGllLmxlbmd0aCkpO2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0''@;'; put 'put ''aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKFQ9PiEhKGQ9VC5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcu''@;'; put 'put ''bGVuZ3RoKSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3Jh''@;'; put 'put ''cGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5m''@;'; put 'put ''ZW5jZXMobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9''@;'; put 'put ''bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0''@;'; put 'put ''cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmh0bWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVu''@;'; put 'put ''Z3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tlbnMubGlua3NbZC50YWddPXtocmVmOmQuaHJlZix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgu''@;'; put 'put ''dGV4dCs9IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10''@;'; put 'put ''aGlzLnRva2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2spe2xldCBUPTEvMDtjb25zdCBXPWwuc2xp''@;'; put 'put ''Y2UoMSk7bGV0IGllO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihnZSl7aWU9Z2UuY2FsbCh7bGV4ZXI6dGhpc30sVyksIm51bWJlciI9PXR5cGVvZiBpZSYmaWU+PTAmJihUPU1hdGgubWluKFQsaWUpKX0pLFQ8MS8wJiZUPj0wJiYoZj1sLnN1''@;'; put 'put ''YnN0cmluZygwLFQrMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoZD10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoZikpKXtoPWFbYS5sZW5ndGgtMV0sXyYmInBhcmFncmFwaCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5w''@;'; put 'put ''b3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOmEucHVzaChkKSxfPWYubGVuZ3RoIT09bC5sZW5ndGgsbD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGV4dChsKSl7bD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNy''@;'; put 'put ''Yz1oLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBUPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoVCk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKFQpfX1yZXR1cm4gdGhpcy5z''@;'; put 'put ''dGF0ZS50b3A9ITAsYX1pbmxpbmUobCxhPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6bCx0b2tlbnM6YX0pLGF9aW5saW5lVG9rZW5zKGwsYT1bXSl7bGV0IGQsaCxmLFQsVyxpZSxfPWw7aWYodGhpcy50b2tlbnMubGlua3Mpe2NvbnN0IGdlPU9iamVjdC5rZXlzKHRo''@;'; put 'put ''aXMudG9rZW5zLmxpbmtzKTtpZihnZS5sZW5ndGg+MClmb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWMoXykpOylnZS5pbmNsdWRlcyhUWzBdLnNsaWNlKFRbMF0ubGFzdEluZGV4T2YoIlsiKSsxLC0xKSkmJihfPV8uc2xpY2UoMCxU''@;'; put 'put ''LmluZGV4KSsiWyIrImEiLnJlcGVhdChUWzBdLmxlbmd0aC0yKSsiXSIrXy5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyhfKSk7''@;'; put 'put ''KV89Xy5zbGljZSgwLFQuaW5kZXgpKyJbIisiYSIucmVwZWF0KFRbMF0ubGVuZ3RoLTIpKyJdIitfLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoO251bGwhPShUPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVh''@;'; put 'put ''dGlvbi5leGVjKF8pKTspXz1fLnNsaWNlKDAsVC5pbmRleCkrIisrIitfLnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7bDspaWYoV3x8KGllPSIiKSxXPSExLCEodGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0''@;'; put 'put ''aW9ucy5leHRlbnNpb25zLmlubGluZSYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lLnNvbWUoZ2U9PiEhKGQ9Z2UuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLmVz''@;'; put 'put ''Y2FwZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8o''@;'; put 'put ''aC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saW5rKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIucmVmbGluayhsLHRoaXMudG9rZW5z''@;'; put 'put ''LmxpbmtzKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1kLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5lbVN0cm9u''@;'; put 'put ''ZyhsLF8saWUpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4obCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5icihsKSl7''@;'; put 'put ''bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKGwsV3NlKSl7bD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihkPXRoaXMudG9rZW5pemVyLnVybChsLFdzZSkpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBnZT0xLzA7Y29uc3Qgd2U9bC5zbGljZSgxKTtsZXQgRWU7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUuZm9yRWFjaChmdW5jdGlvbihaZSl7RWU9WmUuY2FsbCh7bGV4ZXI6dGhpc30s''@;'; put 'put ''d2UpLCJudW1iZXIiPT10eXBlb2YgRWUmJkVlPj0wJiYoZ2U9TWF0aC5taW4oZ2UsRWUpKX0pLGdlPDEvMCYmZ2U+PTAmJihmPWwuc3Vic3RyaW5nKDAsZ2UrMSkpfWlmKGQ9dGhpcy50b2tlbml6ZXIuaW5saW5lVGV4dChmLE9ZZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwiXyIh''@;'; put 'put ''PT1kLnJhdy5zbGljZSgtMSkmJihpZT1kLnJhdy5zbGljZSgtMSkpLFc9ITAsaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgZ2U9IkluZmluaXRlIGxvb3Agb24gYnl0''@;'; put 'put ''ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihnZSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKGdlKX19cmV0dXJuIGF9fWNsYXNzIGlUe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNH1jb2RlKGwsYSxkKXtjb25zdCBoPShh''@;'; put 'put ''fHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGY9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxsPWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4kLywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNz''@;'; put 'put ''PSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K1N1KGgpKyciPicrKGQ/bDpTdShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOlN1KGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3JldHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2Nr''@;'; put 'put ''cXVvdGU+XG5gfWh0bWwobCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9oJHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5c''@;'; put 'put ''bmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGwsYSxkKXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8nIHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIitsKyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1''@;'; put 'put ''cm5gPGxpPiR7bH08L2xpPlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBhcmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5c''@;'; put 'put ''bmB9dGFibGUobCxhKXtyZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJvdyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5o''@;'; put 'put ''ZWFkZXI/InRoIjoidGQiO3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFsaWdufSI+YDpgPCR7ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJuYDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3Jl''@;'; put 'put ''dHVybmA8Y29kZT4ke2x9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGwsYSxkKXtpZihudWxsPT09KGw9VXNlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMu''@;'; put 'put ''YmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJuIGEmJihoKz0nIHRpdGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7aWYobnVsbD09PShsPVVzZSh0aGlzLm9wdGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VV''@;'; put 'put ''cmwsbCkpKXJldHVybiBkO2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7cmV0dXJuIGEmJihoKz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNsYXNzIHZVe3N0cm9uZyhsKXtyZXR1cm4gbH1lbShs''@;'; put 'put ''KXtyZXR1cm4gbH1jb2Rlc3BhbihsKXtyZXR1cm4gbH1kZWwobCl7cmV0dXJuIGx9aHRtbChsKXtyZXR1cm4gbH10ZXh0KGwpe3JldHVybiBsfWxpbmsobCxhLGQpe3JldHVybiIiK2R9aW1hZ2UobCxhLGQpe3JldHVybiIiK2R9YnIoKXtyZXR1cm4iIn19Y2xhc3MgX1V7Y29uc3RydWN0b3Io''@;'; put 'put ''KXt0aGlzLnNlZW49e319c2VyaWFsaXplKGwpe3JldHVybiBsLnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5y''@;'; put 'put ''ZXBsYWNlKC9ccy9nLCItIil9Z2V0TmV4dFNhZmVTbHVnKGwsYSl7bGV0IGQ9bCxoPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGQpKXtoPXRoaXMuc2VlbltsXTtkb3toKyssZD1sKyItIitofXdoaWxlKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl9cmV0dXJuIGF8fCh0aGlz''@;'; put 'put ''LnNlZW5bbF09aCx0aGlzLnNlZW5bZF09MCksZH1zbHVnKGwsYT17fSl7Y29uc3QgZD10aGlzLnNlcmlhbGl6ZShsKTtyZXR1cm4gdGhpcy5nZXROZXh0U2FmZVNsdWcoZCxhLmRyeXJ1bil9fWNsYXNzIEFoe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxsNCx0aGlzLm9wdGlvbnMu''@;'; put 'put ''cmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyfHxuZXcgaVQsdGhpcy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXIsdGhpcy5yZW5kZXJlci5vcHRpb25zPXRoaXMub3B0aW9ucyx0aGlzLnRleHRSZW5kZXJlcj1uZXcgdlUsdGhpcy5zbHVnZ2VyPW5ldyBfVX1zdGF0aWMgcGFy''@;'; put 'put ''c2UobCxhKXtyZXR1cm4gbmV3IEFoKGEpLnBhcnNlKGwpfXN0YXRpYyBwYXJzZUlubGluZShsLGEpe3JldHVybiBuZXcgQWgoYSkucGFyc2VJbmxpbmUobCl9cGFyc2UobCxhPSEwKXtsZXQgaCxmLF8sVCxXLGllLGdlLHdlLEVlLFplLG90LGV0LHl0LGt0LFN0LFF0LHJuLHZuLE5uLGQ9IiI7''@;'; put 'put ''Y29uc3QgY3I9bC5sZW5ndGg7Zm9yKGg9MDtoPGNyO2grKylpZihaZT1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1taZS50eXBlXSYmKE5uPXRoaXMub3B0aW9u''@;'; put 'put ''cy5leHRlbnNpb25zLnJlbmRlcmVyc1taZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sWmUpLCExIT09Tm58fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwicGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKFplLnR5''@;'; put 'put ''cGUpKSlkKz1Obnx8IiI7ZWxzZSBzd2l0Y2goWmUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFkaW5nKHRoaXMucGFyc2VJbmxpbmUoWmUudG9rZW5zKSxa''@;'; put 'put ''ZS5kZXB0aCx6c2UodGhpcy5wYXJzZUlubGluZShaZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5kZXJlci5jb2RlKFplLnRleHQsWmUubGFuZyxaZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpm''@;'; put 'put ''b3Iod2U9IiIsZ2U9IiIsVD1aZS5oZWFkZXIubGVuZ3RoLGY9MDtmPFQ7ZisrKWdlKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKFplLmhlYWRlcltmXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246WmUuYWxpZ25bZl19KTtmb3Iod2UrPXRoaXMucmVuZGVyZXIu''@;'; put 'put ''dGFibGVyb3coZ2UpLEVlPSIiLFQ9WmUucm93cy5sZW5ndGgsZj0wO2Y8VDtmKyspe2ZvcihpZT1aZS5yb3dzW2ZdLGdlPSIiLFc9aWUubGVuZ3RoLF89MDtfPFc7XysrKWdlKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKGllW19dLnRva2Vucykse2hlYWRlcjoh''@;'; put 'put ''MSxhbGlnbjpaZS5hbGlnbltfXX0pO0VlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGdlKX1kKz10aGlzLnJlbmRlcmVyLnRhYmxlKHdlLEVlKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOkVlPXRoaXMucGFyc2UoWmUudG9rZW5zKSxkKz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoRWUp''@;'; put 'put ''O2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKG90PVplLm9yZGVyZWQsZXQ9WmUuc3RhcnQseXQ9WmUubG9vc2UsVD1aZS5pdGVtcy5sZW5ndGgsRWU9IiIsZj0wO2Y8VDtmKyspU3Q9WmUuaXRlbXNbZl0sUXQ9U3QuY2hlY2tlZCxybj1TdC50YXNrLGt0PSIiLFN0LnRhc2smJih2bj10aGlzLnJl''@;'; put 'put ''bmRlcmVyLmNoZWNrYm94KFF0KSx5dD9TdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09U3QudG9rZW5zWzBdLnR5cGU/KFN0LnRva2Vuc1swXS50ZXh0PXZuKyIgIitTdC50b2tlbnNbMF0udGV4dCxTdC50b2tlbnNbMF0udG9rZW5zJiZTdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0''@;'; put 'put ''aD4wJiYidGV4dCI9PT1TdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihTdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9dm4rIiAiK1N0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOlN0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0ZXh0Iix0ZXh0OnZufSk6a3QrPXZuKSxrdCs9dGhp''@;'; put 'put ''cy5wYXJzZShTdC50b2tlbnMseXQpLEVlKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKGt0LHJuLFF0KTtkKz10aGlzLnJlbmRlcmVyLmxpc3QoRWUsb3QsZXQpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKFplLnRleHQsWmUuYmxvY2spO2NvbnRpbnVlO2Nhc2Ui''@;'; put 'put ''cGFyYWdyYXBoIjpkKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKFplLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKEVlPVplLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyk6WmUudGV4dDtoKzE8Y3ImJiJ0ZXh0Ij09PWxbaCsxXS50''@;'; put 'put ''eXBlOylaZT1sWysraF0sRWUrPSJcbiIrKFplLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKFplLnRva2Vucyk6WmUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChFZSk6RWU7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgRHI9J1Rva2VuIHdpdGggIicrWmUudHlwZSsnIiB0eXBl''@;'; put 'put ''IHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoRHIpO3Rocm93IG5ldyBFcnJvcihEcil9fXJldHVybiBkfXBhcnNlSW5saW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVyO2xldCBoLGYsXyxkPSIiO2NvbnN0IFQ9bC5sZW5n''@;'; put 'put ''dGg7Zm9yKGg9MDtoPFQ7aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKF89dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVy''@;'; put 'put ''ZXJzW2YudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGYpLCExIT09X3x8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUpKSlkKz1ffHwiIjtlbHNlIHN3aXRjaChmLnR5cGUp''@;'; put 'put ''e2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6ZCs9YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5ocmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFn''@;'; put 'put ''ZSI6ZCs9YS5pbWFnZShmLmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpkKz1hLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29k''@;'; put 'put ''ZXNwYW4iOmQrPWEuY29kZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJyKCk7YnJlYWs7Y2FzZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IFc9J1Rva2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2Fz''@;'; put 'put ''IG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihXKTt0aHJvdyBuZXcgRXJyb3IoVyl9fXJldHVybiBkfX1jbGFzcyBjd3tjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8bDR9cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0''@;'; put 'put ''cHJvY2VzcyhsKXtyZXR1cm4gbH19RjAoY3csInBhc3NUaHJvdWdoSG9va3MiLG5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSkpO3ZhciBiVT1uZXcgV2Vha1NldCxHc2U9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gJHNlKGMsbCl7cmV0dXJuKGEsZCxoKT0+eyJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBkJiYoaD1kLGQ9bnVsbCk7Y29uc3QgZj17Li4uZH07ZD17Li4udGhpcy5kZWZhdWx0cywuLi5mfTtjb25zdCBfPWdVKHRoaXMsR3NlLEZZZSkuY2FsbCh0aGlzLGQuc2lsZW50LGQuYXN5bmMsaCk7aWYodHlwZW9mIGE+InUifHxudWxsPT09YSlyZXR1cm4gXyhuZXcgRXJyb3Io''@;'; put 'put ''Im1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBfKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEp''@;'; put 'put ''KyIsIHN0cmluZyBleHBlY3RlZCIpKTtpZihmdW5jdGlvbiBMWWUoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1v''@;'; put 'put ''dmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdfcHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVyKSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0ZXJzIGFyZSBk''@;'; put 'put ''ZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMuaGlnaGxpZ2h0''@;'; put 'put ''fHwibGFuZ3VhZ2UtIiE9PWMubGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVk''@;'; put 'put ''IGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5n''@;'; put 'put ''bGU6IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQg''@;'; put 'put ''dXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVz''@;'; put 'put ''ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQg''@;'; put 'put ''c2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQcmVmaXgpJiZj''@;'; put 'put ''b25zb2xlLndhcm4oIm1hcmtlZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIg''@;'; put 'put ''dGhpcyB3YXJuaW5nLCBpbnN0YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGQsaCksZC5ob29rcyYmKGQuaG9va3Mub3B0aW9ucz1kKSxoKXtjb25z''@;'; put 'put ''dCBUPWQuaGlnaGxpZ2h0O2xldCBXO3RyeXtkLmhvb2tzJiYoYT1kLmhvb2tzLnByZXByb2Nlc3MoYSkpLFc9YyhhLGQpfWNhdGNoKHdlKXtyZXR1cm4gXyh3ZSl9Y29uc3QgaWU9d2U9PntsZXQgRWU7aWYoIXdlKXRyeXtkLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhXLGQud2Fsa1Rv''@;'; put 'put ''a2VucyksRWU9bChXLGQpLGQuaG9va3MmJihFZT1kLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goWmUpe3dlPVplfXJldHVybiBkLmhpZ2hsaWdodD1ULHdlP18od2UpOmgobnVsbCxFZSl9O2lmKCFUfHxULmxlbmd0aDwzfHwoZGVsZXRlIGQuaGlnaGxpZ2h0LCFXLmxlbmd0aCkpcmV0''@;'; put 'put ''dXJuIGllKCk7bGV0IGdlPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhXLHdlPT57ImNvZGUiPT09d2UudHlwZSYmKGdlKyssc2V0VGltZW91dCgoKT0+e1Qod2UudGV4dCx3ZS5sYW5nLChFZSxaZSk9PntpZihFZSlyZXR1cm4gaWUoRWUpO251bGwhPVplJiZaZSE9PXdlLnRleHQmJih3ZS50''@;'; put 'put ''ZXh0PVplLHdlLmVzY2FwZWQ9ITApLGdlLS0sMD09PWdlJiZpZSgpfSl9LDApKX0pLHZvaWQoMD09PWdlJiZpZSgpKX1pZihkLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rcz9kLmhvb2tzLnByZXByb2Nlc3MoYSk6YSkudGhlbihUPT5jKFQsZCkpLnRoZW4oVD0+ZC53YWxr''@;'; put 'put ''VG9rZW5zP1Byb21pc2UuYWxsKHRoaXMud2Fsa1Rva2VucyhULGQud2Fsa1Rva2VucykpLnRoZW4oKCk9PlQpOlQpLnRoZW4oVD0+bChULGQpKS50aGVuKFQ9PmQuaG9va3M/ZC5ob29rcy5wb3N0cHJvY2VzcyhUKTpUKS5jYXRjaChfKTt0cnl7ZC5ob29rcyYmKGE9ZC5ob29rcy5wcmVwcm9j''@;'; put 'put ''ZXNzKGEpKTtjb25zdCBUPWMoYSxkKTtkLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhULGQud2Fsa1Rva2Vucyk7bGV0IFc9bChULGQpO3JldHVybiBkLmhvb2tzJiYoVz1kLmhvb2tzLnBvc3Rwcm9jZXNzKFcpKSxXfWNhdGNoKFQpe3JldHVybiBfKFQpfX19ZnVuY3Rpb24gRlllKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4gZD0+e2lmKGQubWVzc2FnZSs9IlxuUGxlYXNlIHJlcG9ydCB0aGlzIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZWRqcy9tYXJrZWQuIixjKXtjb25zdCBoPSI8cD5BbiBlcnJvciBvY2N1cnJlZDo8L3A+PHByZT4iK1N1KGQubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiI7''@;'; put 'put ''cmV0dXJuIGw/UHJvbWlzZS5yZXNvbHZlKGgpOmE/dm9pZCBhKG51bGwsaCk6aH1pZihsKXJldHVybiBQcm9taXNlLnJlamVjdChkKTtpZighYSl0aHJvdyBkO2EoZCl9fWNvbnN0IFpnPW5ldyBjbGFzcyBQWWV7Y29uc3RydWN0b3IoLi4ubCl7SHNlKHRoaXMsR3NlKSxIc2UodGhpcyxiVSks''@;'; put 'put ''RjAodGhpcywiZGVmYXVsdHMiLHthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBl''@;'; put 'put ''ZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX0pLEYwKHRoaXMsIm9wdGlvbnMiLHRoaXMuc2V0T3B0aW9ucyksRjAodGhpcywicGFy''@;'; put 'put ''c2UiLGdVKHRoaXMsYlUsJHNlKS5jYWxsKHRoaXMsa2gubGV4LEFoLnBhcnNlKSksRjAodGhpcywicGFyc2VJbmxpbmUiLGdVKHRoaXMsYlUsJHNlKS5jYWxsKHRoaXMsa2gubGV4SW5saW5lLEFoLnBhcnNlSW5saW5lKSksRjAodGhpcywiUGFyc2VyIixBaCksRjAodGhpcywicGFyc2VyIixB''@;'; put 'put ''aC5wYXJzZSksRjAodGhpcywiUmVuZGVyZXIiLGlUKSxGMCh0aGlzLCJUZXh0UmVuZGVyZXIiLHZVKSxGMCh0aGlzLCJMZXhlciIsa2gpLEYwKHRoaXMsImxleGVyIixraC5sZXgpLEYwKHRoaXMsIlRva2VuaXplciIsclQpLEYwKHRoaXMsIlNsdWdnZXIiLF9VKSxGMCh0aGlzLCJIb29rcyIs''@;'; put 'put ''Y3cpLHRoaXMudXNlKC4uLmwpfXdhbGtUb2tlbnMobCxhKXtsZXQgZD1bXTtmb3IoY29uc3QgaCBvZiBsKXN3aXRjaChkPWQuY29uY2F0KGEuY2FsbCh0aGlzLGgpKSxoLnR5cGUpe2Nhc2UidGFibGUiOmZvcihjb25zdCBmIG9mIGguaGVhZGVyKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5z''@;'; put 'put ''KGYudG9rZW5zLGEpKTtmb3IoY29uc3QgZiBvZiBoLnJvd3MpZm9yKGNvbnN0IF8gb2YgZilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhfLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJsaXN0IjpkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLml0ZW1zLGEpKTticmVhaztkZWZhdWx0OnRo''@;'; put 'put ''aXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXS5mb3JFYWNoKGY9Pntk''@;'; put 'put ''PWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoW2ZdLGEpKX0pOmgudG9rZW5zJiYoZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC50b2tlbnMsYSkpKX1yZXR1cm4gZH11c2UoLi4ubCl7Y29uc3QgYT10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tl''@;'; put 'put ''bnM6e319O3JldHVybiBsLmZvckVhY2goZD0+e2NvbnN0IGg9ey4uLmR9O2lmKGguYXN5bmM9dGhpcy5kZWZhdWx0cy5hc3luY3x8aC5hc3luY3x8ITEsZC5leHRlbnNpb25zJiYoZC5leHRlbnNpb25zLmZvckVhY2goZj0+e2lmKCFmLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24g''@;'; put 'put ''bmFtZSByZXF1aXJlZCIpO2lmKGYucmVuZGVyZXIpe2NvbnN0IF89YS5yZW5kZXJlcnNbZi5uYW1lXTthLnJlbmRlcmVyc1tmLm5hbWVdPV8/ZnVuY3Rpb24oLi4uVCl7bGV0IFc9Zi5yZW5kZXJlci5hcHBseSh0aGlzLFQpO3JldHVybiExPT09VyYmKFc9Xy5hcHBseSh0aGlzLFQpKSxXfTpm''@;'; put 'put ''LnJlbmRlcmVyfWlmKGYudG9rZW5pemVyKXtpZighZi5sZXZlbHx8ImJsb2NrIiE9PWYubGV2ZWwmJiJpbmxpbmUiIT09Zi5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTthW2YubGV2ZWxdP2FbZi5sZXZlbF0udW5z''@;'; put 'put ''aGlmdChmLnRva2VuaXplcik6YVtmLmxldmVsXT1bZi50b2tlbml6ZXJdLGYuc3RhcnQmJigiYmxvY2siPT09Zi5sZXZlbD9hLnN0YXJ0QmxvY2s/YS5zdGFydEJsb2NrLnB1c2goZi5zdGFydCk6YS5zdGFydEJsb2NrPVtmLnN0YXJ0XToiaW5saW5lIj09PWYubGV2ZWwmJihhLnN0YXJ0SW5s''@;'; put 'put ''aW5lP2Euc3RhcnRJbmxpbmUucHVzaChmLnN0YXJ0KTphLnN0YXJ0SW5saW5lPVtmLnN0YXJ0XSkpfWYuY2hpbGRUb2tlbnMmJihhLmNoaWxkVG9rZW5zW2YubmFtZV09Zi5jaGlsZFRva2Vucyl9KSxoLmV4dGVuc2lvbnM9YSksZC5yZW5kZXJlcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnJl''@;'; put 'put ''bmRlcmVyfHxuZXcgaVQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IF8gaW4gZC5yZW5kZXJlcil7Y29uc3QgVD1mW19dO2ZbX109KC4uLlcpPT57bGV0IGllPWQucmVuZGVyZXJbX10uYXBwbHkoZixXKTtyZXR1cm4hMT09PWllJiYoaWU9VC5hcHBseShmLFcpKSxpZX19aC5yZW5kZXJlcj1m''@;'; put 'put ''fWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgclQodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IF8gaW4gZC50b2tlbml6ZXIpe2NvbnN0IFQ9ZltfXTtmW19dPSguLi5XKT0+e2xldCBpZT1kLnRva2VuaXplcltfXS5hcHBseShmLFcpO3JldHVy''@;'; put 'put ''biExPT09aWUmJihpZT1ULmFwcGx5KGYsVykpLGllfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IGN3O2Zvcihjb25zdCBfIGluIGQuaG9va3Mpe2NvbnN0IFQ9ZltfXTtmW19dPWN3LnBhc3NUaHJvdWdoSG9va3MuaGFzKF8pP1c9''@;'; put 'put ''PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1tfXS5jYWxsKGYsVykpLnRoZW4oZ2U9PlQuY2FsbChmLGdlKSk7Y29uc3QgaWU9ZC5ob29rc1tfXS5jYWxsKGYsVyk7cmV0dXJuIFQuY2FsbChmLGllKX06KC4uLlcpPT57bGV0IGllPWQuaG9v''@;'; put 'put ''a3NbX10uYXBwbHkoZixXKTtyZXR1cm4hMT09PWllJiYoaWU9VC5hcHBseShmLFcpKSxpZX19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKF8pe2xldCBUPVtdO3JldHVybiBULnB1c2goZC53''@;'; put 'put ''YWxrVG9rZW5zLmNhbGwodGhpcyxfKSksZiYmKFQ9VC5jb25jYXQoZi5jYWxsKHRoaXMsXykpKSxUfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRo''@;'; put 'put ''aXN9fShsNCk7ZnVuY3Rpb24gcGEoYyxsLGEpe3JldHVybiBaZy5wYXJzZShjLGwsYSl9cGEub3B0aW9ucz1wYS5zZXRPcHRpb25zPWZ1bmN0aW9uKGMpe3JldHVybiBaZy5zZXRPcHRpb25zKGMpLE5zZShwYS5kZWZhdWx0cz1aZy5kZWZhdWx0cykscGF9LHBhLmdldERlZmF1bHRzPWZ1bmN0''@;'; put 'put ''aW9uIG1VKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50''@;'; put 'put ''aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfX0scGEuZGVmYXVsdHM9bDQscGEudXNlPWZ1bmN0aW9uKC4uLmMpe3JldHVybiBaZy51c2Uo''@;'; put 'put ''Li4uYyksTnNlKHBhLmRlZmF1bHRzPVpnLmRlZmF1bHRzKSxwYX0scGEud2Fsa1Rva2Vucz1mdW5jdGlvbihjLGwpe3JldHVybiBaZy53YWxrVG9rZW5zKGMsbCl9LHBhLnBhcnNlSW5saW5lPVpnLnBhcnNlSW5saW5lLHBhLlBhcnNlcj1BaCxwYS5wYXJzZXI9QWgucGFyc2UscGEuUmVuZGVy''@;'; put 'put ''ZXI9aVQscGEuVGV4dFJlbmRlcmVyPXZVLHBhLkxleGVyPWtoLHBhLmxleGVyPWtoLmxleCxwYS5Ub2tlbml6ZXI9clQscGEuU2x1Z2dlcj1fVSxwYS5Ib29rcz1jdyxwYS5wYXJzZT1wYTtjb25zdCBOWWU9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBWWWUoYyxsKXsxJmMmJnF0KDAsImNs''@;'; put 'put ''ci1zcGlubmVyIiw4KX1sZXQgQlllPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xuTGljZW5jZSBB''@;'; put 'put ''Z3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5EYXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQgb3duZWQgYnkg''@;'; put 'put ''Qm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmllcyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBcblxuVGhpcyBz''@;'; put 'put ''b2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxpY2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcywg''@;'; put 'put ''bWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5JZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1l''@;'; put 'put ''YW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUgb3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJt''@;'; put 'put ''cyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5kYXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29u''@;'; put 'put ''dHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVkIGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVzdCBub3QgbWFr''@;'; put 'put ''ZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGggdGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQUyBQUk9WSURF''@;'; put 'put ''UyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZFTlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFN''@;'; put 'put ''QUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxuXG4nfW5nT25J''@;'; put 'put ''bml0KCl7Y29uc3QgYT1wYS5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZlRWxlbWVudC5k''@;'; put 'put ''aXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZ2lzdGVy''@;'; put 'put ''dXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLnJldHVybiYmZC5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+''@;'; put 'put ''e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRhcmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Ny''@;'; put 'put ''b2xsVG9wK2Qub2Zmc2V0SGVpZ2h0Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5j''@;'; put 'put ''dGlvbihhLGQpe2lmKDEmYSYmUm8oTlllLDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQubWFya2Rvd25DYXJkPWguZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywiaW5uZXJIVE1MIiwic2Ny''@;'; put 'put ''b2xsIl0sWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdlIiwiY2hh''@;'; put 'put ''bmdlIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksTmUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLG1lKDMsInAiKSxOZSg0''@;'; put 'put ''LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSx5ZSgpKCksbWUoNSwiZGl2IiwyLDMpLHh0KCJzY3JvbGwiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2Fy''@;'; put 'put ''ZEJsb2NrU2Nyb2xsKGYpfSkseWUoKSxtZSg3LCJkaXYiLDQpKDgsImNsci1jaGVja2JveC13cmFwcGVyIiw1KSg5LCJpbnB1dCIsNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFncmVlQ2hlY2tlZD1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC50''@;'; put 'put ''ZXJtc0FncmVlQ2hhbmdlKCl9KSx5ZSgpLG1lKDEwLCJsYWJlbCIpLE5lKDExLCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIGFib3ZlLiIpLHllKCkoKSxRZSgxMixWWWUsMSwwLCJjbHItc3Bpbm5lciIsNykseWUoKSgpKSwyJmEmJihDZSg1KSxSZSgiaW5uZXJIVE1M''@;'; put 'put ''IixkLmV1bGFfbWFya2Rvd24scTIpLENlKDMpLGRyKCJkaXNhYmxlZCIsZC5hZ3JlZUJveExvY2tlZCksQ2UoMSksUmUoIm5nTW9kZWwiLGQuYWdyZWVDaGVja2VkKSgiZGlzYWJsZWQiLGQuYWdyZWVCb3hMb2NrZWQpLENlKDMpLFJlKCJuZ0lmIixkLmFncmVlQm94TG9ja2VkJiZkLmFncmVl''@;'; put 'put ''Q2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W1ppLFMwLEJzLE9zLFVzLEQwLFQwLHUyXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn0uY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6''@;'; put 'put ''LjV9LmNhcmRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7b3ZlcmZsb3c6YXV0''@;'; put 'put ''bztiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjR9LmFjY2VwdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDE1cHh9Il19KSxjfSkoKTtmdW5jdGlvbiBqWWUoYyxsKXsxJmMmJihtZSgwLCJwIiwyNyksTmUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNh''@;'; put 'put ''bid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLHllKCkpfWZ1bmN0aW9uIHpZZShjLGwpe2lmKDEmYyYmcXQoMCwicCIsMjgpLDImYyl7Y29uc3QgYT1WZSgzKTtSZSgiaW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0scTIpfX1mdW5jdGlv''@;'; put 'put ''biBVWWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIikoMSwic3Ryb25nIiksTmUoMiwiRGV0YWlsczoiKSx5ZSgpLE5lKDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgzKSxncigiICIsYS5lcnJvckRldGFpbHMsIiIpfX1mdW5jdGlvbiBaWWUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgx''@;'; put 'put ''LGpZZSwyLDAsInAiLDI1KSxRZSgyLHpZZSwxLDEsInAiLDI2KSxRZSgzLFVZZSw0LDEsInAiLDEpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsIWEua2V5RXJyb3IpLENlKDEpLFJlKCJuZ0lmIixhLmtleUVycm9yKSxDZSgxKSxSZSgibmdJZiIsYS5lcnJvckRl''@;'; put 'put ''dGFpbHMpfX1mdW5jdGlvbiBZWWUoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJwIiwyNyksTmUoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIikscXQoMywiY29udGFj''@;'; put 'put ''dC1saW5rIiwyOSksTmUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLHllKCksVXIoKSl9ZnVuY3Rpb24gV1llKGMsbCl7MSZjJiYoQnIoMCksbWUoMSwicCIsMjcpLE5lKDIsIiBVcGRhdGUgdGhlIGxpY2Vu''@;'; put 'put ''c2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIikseWUoKSxVcigpKX1mdW5jdGlvbiBHWWUoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiksTmUoMSks''@;'; put 'put ''eWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpO2RyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksQ2UoMSksamMoIiAiLGEsIiIsZD09PShudWxsPT1oLnN5c3NpdGUudmFsdWU/bnVsbDpoLnN5c3NpdGUudmFs''@;'; put 'put ''dWUubGVuZ3RoKS0xPyIiOiIsIiwiICIpfX1mdW5jdGlvbiAkWWUoYyxsKXtpZigxJmMmJihtZSgwLCJwIiwzMCkoMSwic3Ryb25nIiksTmUoMiwiQWxsb3dlZCB1c2VyczoiKSx5ZSgpLE5lKDMpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgzKSxncigiICIsYS5saWNlbnNlS2V5RGF0''@;'; put 'put ''YS51c2Vyc19hbGxvd2VkLCIgIil9fWZ1bmN0aW9uIHFZZShjLGwpezEmYyYmcXQoMCwiY2xyLXNwaW5uZXIiLDMxKX1mdW5jdGlvbiBLWWUoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSxOZSgxLCIgRHJvcCAvIEJyb3dzZSBsaWNlbmNlIGZpbGUgIikseWUoKSl9ZnVuY3Rpb24gWFllKGMsbCl7''@;'; put 'put ''aWYoMSZjJiYobWUoMCwiZGl2IiksTmUoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLG1lKDIsInN0cm9uZyIpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLG9yKGEubGljZW5jZWZpbGUuZmlsZW5hbWUpfX1mdW5jdGlvbiBKWWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi''@;'; put 'put ''KSgxLCJzdHJvbmciKSxOZSgyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgyKSxvcihhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBRWWUoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLEtZZSwyLDAsImRpdiIsMSksUWUoMixYWWUsNCwxLCJkaXYiLDEpLFFlKDMsSlllLDMs''@;'; put 'put ''MSwiZGl2IiwxKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCIiPT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksQ2UoMSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVFcnJvcil9fWZ1''@;'; put 'put ''bmN0aW9uIGVXZShjLGwpezEmYyYmKG1lKDAsImJ1dHRvbiIsMzIpLE5lKDEsIiBDb250aW51ZSB3aXRoIGZyZWUgdGllciAiKSx5ZSgpKX1mdW5jdGlvbiB0V2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDIpKDEsImRpdiIsMyksTmUoMiwiTGljZW5jaW5nIikseWUo''@;'; put 'put ''KSxtZSgzLCJkaXYiLDQpLFFlKDQsWlllLDQsMywibmctY29udGFpbmVyIiw1KSxRZSg1LFlZZSw1LDAsIm5nLWNvbnRhaW5lciIsNSksUWUoNixXWWUsMywwLCJuZy1jb250YWluZXIiLDUpLG1lKDcsInAiKSg4LCJzdHJvbmciKSxOZSg5LCJTWVNTSVRFOiIpLHllKCksUWUoMTAsR1llLDIs''@;'; put 'put ''NCwic3BhbiIsNiksbWUoMTEsImEiLDcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPSRpKDEzKSxmPSRpKDE1KSxfPVZlKCk7cmV0dXJuIGp0KF8uY29weVN5c3NpdGUoaCxmLF8uc3lzc2l0ZS52YWx1ZXx8W10pKX0pLHF0KDEyLCJjbHItaWNvbiIsOCw5KSxtZSgxNCwi''@;'; put 'put ''c3BhbiIsMTAsMTEpLE5lKDE2LCJDb3B5IHRvIGNsaXBib2FyZCIpLHllKCkoKSgpLFFlKDE3LCRZZSw0LDEsInAiLDEyKSxtZSgxOCwiY2xyLXRhYnMiKSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDEzKSxOZSgyMSwiVXBsb2FkIGxpY2VuY2UiKSx5ZSgpLG1lKDIyLCJjbHItdGFiLWNv''@;'; put 'put ''bnRlbnQiKSgyMywiaW5wdXQiLDE0LDE1KSx4dCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLHllKCksbWUoMjUsImRpdiIsMTYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoJGkoMjQpLmNsaWNrKCkp''@;'; put 'put ''fSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLFFlKDI2LHFZZSwxLDAsImNsci1zcGlubmVyIiwxNyksUWUoMjcsUVllLDQsMywibmctY29udGFpbmVyIiwxKSx5ZSgpKCkoKSxtZSgyOCwiY2xyLXRhYiIpKDI5LCJi''@;'; put 'put ''dXR0b24iLDEzKSxOZSgzMCwiUGFzdGUgbGljZW5jZSIpLHllKCksbWUoMzEsImNsci10YWItY29udGVudCIpKDMyLCJmb3JtIiwxOCkoMzMsInAiKSxOZSgzNCwiTGljZW5jZSBrZXk6IikseWUoKSxtZSgzNSwiZGl2IiwxOSkoMzYsInRleHRhcmVhIiwyMCkseHQoIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpY2VuY2VLZXlWYWx1ZT1oKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnRyaW1LZXlzKCkpfSkseWUoKSgpKCksbWUoMzcsImZvcm0iLDIxKSgzOCwicCIpLE5lKDM5LCJBY3RpdmF0aW9u''@;'; put 'put ''IGtleToiKSx5ZSgpLG1lKDQwLCJkaXYiLDE5KSg0MSwidGV4dGFyZWEiLDIyKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuYWN0aXZhdGlvbktleVZhbHVlPWgpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZl''@;'; put 'put ''KCkudHJpbUtleXMoKSl9KSx5ZSgpKCkoKSgpKCkoKSxtZSg0MiwiYnV0dG9uIiwyMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcGx5S2V5cygpKX0pLE5lKDQzLCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLHllKCksUWUoNDQsZVdlLDIsMCwiYnV0dG9u''@;'; put 'put ''IiwyNCkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLFJlKCJuZ1N3aXRjaCIsYS5hY3Rpb24pLENlKDEpLFJlKCJuZ1N3aXRjaENhc2UiLCJrZXkiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwibGltaXQiKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksQ2Uo''@;'; put 'put ''NCksUmUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52YWx1ZSksQ2UoNyksUmUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksQ2UoOSksUmUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWEubGljZW5jZUZpbGVMb2FkaW5n''@;'; put 'put ''KSxDZSg5KSxSZSgibmdNb2RlbCIsYS5saWNlbmNlS2V5VmFsdWUpLENlKDUpLFJlKCJuZ01vZGVsIixhLmFjdGl2YXRpb25LZXlWYWx1ZSksQ2UoMSksUmUoImNsckxvYWRpbmciLGEuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLGEuZGlzYWJsZUFwcGx5QnV0dG9uKSxDZSgyKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5pc0FwcEZyZWVUaWVyLnZhbHVlKX19ZnVuY3Rpb24gbldlKGMsbCl7MSZjJiZxdCgwLCJhcHAtdGVybXMiKX12YXIgcXNlPWZ1bmN0aW9uKGMpe3JldHVybiBjLmtleT0ia2V5IixjLnJlZ2lzdGVyPSJyZWdpc3RlciIsYy5saW1pdD0ibGltaXQiLGMudXBkYXRlPSJ1cGRhdGUiLGN9''@;'; put 'put ''KHFzZXx8e30pO2NvbnN0IHJXZT1be3BhdGg6IjphY3Rpb24iLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMucm91dGU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5hcHBTZXJ2aWNlPWYsdGhpcy5hY3Rpb249''@;'; put 'put ''bnVsbCx0aGlzLmxpY2Vuc2VFcnJvcnM9e21pc3Npbmc6J0xpY2VuY2Uga2V5IGlzIG1pc3NpbmcgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwv''@;'; put 'put ''YT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxleHBpcmVkOidMaWNlbmNlIGtleSBpcyBleHBpcmVkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xs''@;'; put 'put ''ZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsaW52YWxpZDonTGljZW5jZSBrZXkgaXMgaW52YWxpZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFj''@;'; put 'put ''b250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLG1pc3NtYXRjaDonWW91ciBTWVNTSVRFIChiZWxvdykgaXMgbm90IGZvdW5kIGluIHRoZSBsaWNlbmNlIGtleSAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBz''@;'; put 'put ''dXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nfSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT0iIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT0iIix0aGlzLmFwcGx5aW5nS2V5cz0hMSx0aGlzLnN5''@;'; put 'put ''c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5jdXJyZW50TGljZW5jZUtleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VLZXksdGhpcy5jdXJyZW50QWN0aXZhdGlvbktleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb25LZXksdGhpcy5pc0FwcEZyZWVUaWVyPXRo''@;'; put 'put ''aXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllcix0aGlzLnVzZXJDb3VudExpbWl0YXRpb249dGhpcy5saWNlbmNlU2VydmljZS51c2VyQ291bnRMaW1pdGF0aW9uLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLmlucHV0VHlwZT0iZmlsZSIsdGhpcy5saWNlbmNlRmlsZUxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5saWNlbmNlZmlsZT17ZmlsZW5hbWU6IiJ9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5jdXJyZW50TGljZW5jZUtleXx8IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleXx8IiIsdGhpcy5yb3V0ZS5xdWVy''@;'; put 'put ''eVBhcmFtcy5zdWJzY3JpYmUoYT0+e3RoaXMua2V5RXJyb3I9YS5lcnJvcix0aGlzLm1pc3NtYXRjaGVkS2V5PWEubWlzc21hdGNoSWQsYS5kZXRhaWxzJiYodGhpcy5lcnJvckRldGFpbHM9YXRvYihhLmRldGFpbHMpKX0pLHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShhPT57bGV0IGQ9''@;'; put 'put ''YS5hY3Rpb247ZCYmT2JqZWN0LnZhbHVlcyhxc2UpLmluY2x1ZGVzKGQpJiYodGhpcy5hY3Rpb249ZCl9KSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKX10cmltS2V5cygpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMubGljZW5j''@;'; put 'put ''ZUtleVZhbHVlLnRyaW0oKSx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmFjdGl2YXRpb25LZXlWYWx1ZS50cmltKCl9Y29weVN5c3NpdGUoYSxkLGgpe2NvbnN0IGY9aC5qb2luKCJcbiIpO25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGYpLnRoZW4oKCk9PnthLnNldEF0dHJp''@;'; put 'put ''YnV0ZSgic2hhcGUiLCJjaGVjayIpLGEuc2V0QXR0cmlidXRlKCJjbGFzcyIsImlzLXN1Y2Nlc3MiKSxkLmlubmVyVGV4dD0iQ29waWVkISIsc2V0VGltZW91dCgoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNvcHkiKSxhLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxkLmlubmVyVGV4''@;'; put 'put ''dD0iQ29weSB0byBjbGlwYm9hcmQifSwxZTMpfSl9YXBwbHlLZXlzKCl7dGhpcy5hcHBseWluZ0tleXM9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZ2lzdGVya2V5Iix7a2V5dXBsb2FkOlt7QUNUSVZBVElPTl9LRVk6dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUsTElDRU5D''@;'; put 'put ''RV9LRVk6dGhpcy5saWNlbmNlS2V5VmFsdWV9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWlu''@;'; put 'put ''Z0tleXM9ITF9KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0IGg9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25s''@;'; put 'put ''b2FkPV89PntpZih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJlYWRpbmcgZmlsZS4iLCFffHwhXy50YXJnZXR8fDIhPV8udGFyZ2V0LnJlYWR5U3RhdGV8fF8udGFyZ2V0LmVycm9yfHwhXy50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlz''@;'; put 'put ''LmxpY2VuY2VGaWxlRXJyb3I9dm9pZCAwO2NvbnN0IFQ9Xy50YXJnZXQucmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9VFsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1UWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlu''@;'; put 'put ''cHV0VHlwZT1hfWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZh''@;'; put 'put ''dGlvbktleVZhbHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoV2wpLHR0KEMwKSx0dChvYSksdHQoVXgpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpY2Vu''@;'; put 'put ''c2luZyJdXSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdG''@;'; put 'put ''b3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWyJjb3B5SWNvbiIsIiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNvcHlU''@;'; put 'put ''b29sdGlwIiwiIl0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJdLFsibGljZW5jZUZpbGUiLCIiXSxbImFwcEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3Ai''@;'; put 'put ''XSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwi''@;'; put 'put ''Y2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXktYXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIs''@;'; put 'put ''MSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiLCJjbGljayJdLFsicm91dGVyTGluayIsIi8iLCJjbGFzcyIsImJ0biBidG4t''@;'; put 'put ''c20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMsImlubmVySFRNTCJdLFsiY2xhc3NlcyIsImNvbG9yLWdy''@;'; put 'put ''ZWVuIl0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihRZSgwLHRXZSw0NSwxMywiZGl2IiwwKSxRZSgxLG5XZSwxLDAsImFwcC10ZXJtcyIsMSkpLDIm''@;'; put 'put ''YSYmKFJlKCJuZ0lmIiwicmVnaXN0ZXIiIT09ZC5hY3Rpb24pLENlKDEpLFJlKCJuZ0lmIiwicmVnaXN0ZXIiPT09ZC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxuZCx0aCxDcCxXYSxCcyx3cCxPcyxyMixrYSxadSxkaCxMcCxPcCxkZyxScCxJcCxjZyx1MixCdSxCWWUsakVdLHN0''@;'; put 'put ''eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwJSAtIDk2cHgpO3BhZGRpbmc6MjBweH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5rZXktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5taXNza2V5W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtjb2xvcjojZTc0YzNjfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MH0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29u''@;'; put 'put ''dGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xy''@;'; put 'put ''LWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0YXJlYVtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTcwcHg7bWF4LWhlaWdodDoxNzBweDttaW4taGVpZ2h0OjE3MHB4O3Jlc2l6ZTpub25lfS5hcHBseS1rZXlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDBweDt3aWR0aDoyMDBweH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoycHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1jbHItdGFic1tfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Il19KSxjfSkoKSxjYW5BY3RpdmF0ZTpbcFVdLGNhbkRlYWN0aXZhdGU6W3BVXX1dO2xldCBpV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbZGMuZm9yQ2hpbGQocldlKSxkY119KSxjfSkoKSxvV2U9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8''@;'; put 'put ''Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28sJGwsX3UsaVdlLFY3XX0pLGN9KSgpO2Z1bmN0aW9uIHNXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiwxOSksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUo''@;'; put 'put ''KTtSZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLENlKDEpLGdyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIGFXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw0KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0Nl''@;'; put 'put ''KDEpLGdyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIGxXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksUWUoMyxzV2UsMiwyLCJ0ZCIsMTcpLFFlKDQsYVdlLDIsMSwidGQiLDE4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7''@;'; put 'put ''Q2UoMiksb3IoYSksQ2UoMSksUmUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLENlKDEpLFJlKCJuZ0lmIiwhYS5pbmNsdWRlcygiVEFCTEVfSUQiKSl9fWZ1bmN0aW9uIGNXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDQpLE5lKDIpLHllKCksbWUoMywidGQiLDQp''@;'; put 'put ''LE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9VmUoMyk7Q2UoMiksb3IoYSksQ2UoMiksb3IoZC5zdWJtaXREZXRhaWxzW2FdKX19ZnVuY3Rpb24gdVdlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRhYi1jb250ZW50IikoMSwiZGl2IiwyMikoMiwidGFibGUiLDMp''@;'; put 'put ''KDMsInRoZWFkIikoNCwidHIiKSg1LCJ0aCIsNCksTmUoNiwiTmFtZSIpLHllKCksbWUoNywidGgiLDQpLE5lKDgsIlZhbHVlIikseWUoKSgpKCksbWUoOSwidGJvZHkiKSxRZSgxMCxjV2UsNSwyLCJ0ciIsNSkseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEwKSxSZSgibmdG''@;'; put 'put ''b3JPZiIsYS5zdWJtaXRBcnIpfX1mdW5jdGlvbiBkV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiw0KSxOZSgyKSx5ZSgpLG1lKDMsInRkIiw0KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpO0NlKDIpLG9yKGEpLENlKDIpLG9yKGQuanNQ''@;'; put 'put ''YXJhbXNbYV0pfX1mdW5jdGlvbiBoV2UoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdGFicyIpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDIwKSxOZSgzLCJTdWJtaXR0ZWQgVGFibGUgRGV0YWlscyIpLHllKCksUWUoNCx1V2UsMTEsMSwiY2xyLXRhYi1jb250ZW50IiwyMSkseWUoKSxtZSg1''@;'; put 'put ''LCJjbHItdGFiIikoNiwiYnV0dG9uIiwyMCksTmUoNywiQmFzZSBUYWJsZSBEZXRhaWxzIikseWUoKSxtZSg4LCJjbHItdGFiLWNvbnRlbnQiKSg5LCJkaXYiLDIyKSgxMCwidGFibGUiLDMpKDExLCJ0aGVhZCIpKDEyLCJ0ciIpKDEzLCJ0aCIsNCksTmUoMTQsIk5hbWUiKSx5ZSgpLG1lKDE1''@;'; put 'put ''LCJ0aCIsNCksTmUoMTYsIlZhbHVlIikseWUoKSgpKCksbWUoMTcsInRib2R5IiksUWUoMTgsZFdlLDUsMiwidHIiLDUpLHllKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSg0KSxSZSgiY2xySWZBY3RpdmUiLCEwKSxDZSgxNCksUmUoIm5nRm9yT2YiLGEua2V5c0FycmF5KX19''@;'; put 'put ''ZnVuY3Rpb24gZldlKGMsbCl7MSZjJiYobWUoMCwicCIsNzQpLE5lKDEsIiBUaGVyZSBhcmUgbm8gZGV0YWlscyB0byBzaG93ICIpLHllKCkpfWZ1bmN0aW9uIHBXZShjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsImRpdiIsNzUpKDIsInNwYW4iKSxOZSgzLCJUYWJsZSBJZDoiKSx5ZSgpLG1l''@;'; put 'put ''KDQsInN0cm9uZyIsNzYpLE5lKDUpLHllKCkoKSxtZSg2LCJkaXYiKSg3LCJzcGFuIiksTmUoOCwiU3VibWl0dGVyOiIpLHllKCksbWUoOSwic3BhbiIsNzcpLE5lKDEwKSx5ZSgpKCksbWUoMTEsImRpdiIpKDEyLCJzcGFuIiksTmUoMTMsIlN1Ym1pdHRlZCBvbjoiKSx5ZSgpLG1lKDE0LCJz''@;'; put 'put ''cGFuIiw3NyksTmUoMTUpLHllKCkoKSxtZSgxNiwiZGl2IikoMTcsInNwYW4iKSxOZSgxOCwiU3VibWl0dGVkIFJlYXNvbjoiKSx5ZSgpLG1lKDE5LCJzcGFuIiw3NyksTmUoMjApLHllKCkoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksUmUoInJvdXRlckxpbmsiLCIvc3RhZ2Uv''@;'; put 'put ''IisobnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpLENlKDEpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50''@;'; put 'put ''YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxDZSg1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5T''@;'; put 'put ''VUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBnV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw3OCkscXQoMSwiY2xyLWljb24iLDc5KSxOZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLHllKCkpfWZ1''@;'; put 'put ''bmN0aW9uIG1XZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLFFlKDMsZldlLDIsMCwicCIsNDUpLFFlKDQscFdlLDIxLDUsIm5nLWNvbnRhaW5lciIsOCkseWUoKSxtZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJk''@;'; put 'put ''aXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTmUoMTAsIiBHbyB0byBiYXNlIHRh''@;'; put 'put ''YmxlIHNjcmVlbiAiKSx5ZSgpLG1lKDExLCJidXR0b24iLDU3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nZXRUYWJsZShoLnRhYmxlSWQpKX0pLE5lKDEyLCIgR28gdG8gZWRpdGVkIHNjcmVlbiAiKSx5ZSgpLG1lKDEzLCJidXR0b24i''@;'; put 'put ''LDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSg0KTtyZXR1cm4ganQoaC5nb0JhY2sobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLE5lKDE0LCIgR28gYmFjayB0byBlZGl0b3IgIikseWUoKSgpKCkoKSxtZSgxNSwiZGl2Iiw1''@;'; put 'put ''OSkoMTYsImJ1dHRvbiIsNjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuYXBwcm92ZVRhYmxlKCkpfSksTmUoMTcsIiBBQ0NFUFQgIikseWUoKSxtZSgxOCwiYnV0dG9uIiw2MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0''@;'; put 'put ''KS5yZWplY3RPcGVuPSEwKX0pLE5lKDE5LCIgUkVKRUNUICIpLHllKCksbWUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUtd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUo''@;'; put 'put ''NCkuZm9ybWF0dGVkVmFsdWVzPWgpfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSx5ZSgpLG1lKDIzLCJsYWJlbCIsNjQpLE5lKDI0KSx5ZSgpKCkoKSgpLG1lKDI1LCJkaXYiLDY1KSxRZSgyNixnV2UsMywwLCJzcGFu''@;'; put 'put ''Iiw2NiksbWUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgpLE5lKDMwLCIgQ2hhbmdlZCBSb3dzICIpLG1lKDMxLCJzcGFuIiw2OSksTmUoMzIpLHllKCkoKSxtZSgzMywic3BhbiIsNzApLE5lKDM0LCIgQWRkZWQgUm93cyAiKSxtZSgzNSwic3BhbiIsNzEpLE5lKDM2''@;'; put 'put ''KSx5ZSgpKCksbWUoMzcsInNwYW4iLDcyKSxOZSgzOCwiIERlbGV0ZWQgUm93cyAiKSxtZSgzOSwic3BhbiIsNzMpLE5lKDQwKSx5ZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDQpO0NlKDMpLFJlKCJuZ0lmIiwhYS50YWJsZURldGFpbHMpLENlKDEpLFJlKCJuZ0lmIixh''@;'; put 'put ''LnRhYmxlRGV0YWlscyksQ2UoMTIpLFJlKCJjbHJMb2FkaW5nIixhLmFjY2VwdExvYWRpbmcpKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5wYXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxDZSgyKSxSZSgiZGlzYWJsZWQi''@;'; put 'put ''LCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksQ2UoNCksUmUoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxDZSgyKSxvcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3Jt''@;'; put 'put ''YXR0ZWQiKSxDZSgyKSxSZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxDZSg2KSxvcihhLmxlbnMudXBkYXRlZCksQ2UoNCksb3IoYS5sZW5zLm5ldyksQ2UoNCksb3IoYS5sZW5zLmRlbGV0ZWQpfX1mdW5jdGlvbiB2V2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRp''@;'; put 'put ''bmcgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIF9XZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODApKDEsInNwYW4iLDgxKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLFFlKDMsdldlLDMsMCwiZGl2Iiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7Q2UoMyksUmUoIm5nSWYiLCFh''@;'; put 'put ''LmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGJXZShjLGwpezEmYyYmKG1lKDAsInAiLDc0KSxOZSgxLCIgVGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gc2hvdyAiKSx5ZSgpKX1mdW5jdGlvbiB5V2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0aCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiB3V2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4NiksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLGdyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hh''@;'; put 'put ''bmdlc1tkXVthXSwiIil9fWNvbnN0IEtzZT1mdW5jdGlvbihjKXtyZXR1cm57ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRvcC1yaWdodCI6Y319O2Z1bmN0aW9uIENXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw4NCksTmUoMSksUWUoMix3V2UsMiwxLCJzcGFuIiw4NSkseWUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLmluZGV4LGY9VmUoNCk7UmUoIm5nQ2xhc3MiLEoyKDMsS3NlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksQ2UoMSksZ3IoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0s''@;'; put 'put ''IiAiKSxDZSgxKSxSZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBTV2UoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLENXZSwzLDUsInRkIiw4MyksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0KTtDZSgx''@;'; put 'put ''KSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gTVdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0s''@;'; put 'put ''IiAiKX19ZnVuY3Rpb24geFdlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxNV2UsMiwxLCJ0ZCIsNDcpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWNvbnN0IFhzZT1mdW5jdGlvbihjLGwsYSl7cmV0dXJu''@;'; put 'put ''e2FkZGVkUm93OmMsZGVsZXRlZFJvdzpsLHVwZGF0ZWRSb3c6YX19O2Z1bmN0aW9uIEVXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiw4MiksUWUoMSxTV2UsMiwxLCJuZy1jb250YWluZXIiLDgpLFFlKDIseFdlLDIsMSwibmctY29udGFpbmVyIiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5p''@;'; put 'put ''bmRleCxkPVZlKDQpO1JlKCJuZ0NsYXNzIix5XygzLFhzZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVk''@;'; put 'put ''IiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBrV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDI5KSgxLCJkaXYiLDMwKSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiwzMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5n''@;'; put 'put ''b1RvQXBwcm92YWxzTGlzdCgpKX0pLHF0KDUsImNsci1pY29uIiwzNCksTmUoNiwiQmFjayB0byBhcHByb3ZhbHMgbGlzdCAiKSx5ZSgpKCksbWUoNywiZGl2IiwzNSkoOCwiaDMiLDM2KSxOZSg5KSx5ZSgpKCksbWUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCkseHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nZXREZXRhaWxzKCkpfSkscXQoMTIsImNsci1pY29uIiwzOSkseWUoKSgpKCksbWUoMTMsInAiLDQwKSxOZSgxNCkseWUoKSgpLG1lKDE1LCJkaXYiLDQxKSxRZSgxNixtV2UsNDEsMTEsImRpdiIsNDIpLHllKCksUWUoMTcsX1dlLDQsMSwiZGl2''@;'; put 'put ''Iiw0MyksbWUoMTgsImRpdiIsNDQpLFFlKDE5LGJXZSwyLDAsInAiLDQ1KSxtZSgyMCwidGFibGUiLDMpKDIxLCJ0aGVhZCIpKDIyLCJ0ciIsNDYpLFFlKDIzLHlXZSwyLDEsInRoIiw0NykseWUoKSgpLG1lKDI0LCJ0Ym9keSIpLFFlKDI1LEVXZSwzLDcsInRyIiw0OCkseWUoKSgpKCkoKX1p''@;'; put 'put ''ZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoOSksZ3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX05NLCIgIiksQ2UoNSksZ3IoIiAiLG51bGw9PWEuanNQYXJhbXM/bnVsbDphLmpzUGFyYW1zLlRBQkxFX0RFU0MsIiAiKSxDZSgyKSxSZSgibmdJZiIsYS5sb2Fk''@;'; put 'put ''ZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLENlKDIpLFJlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLENlKDQpLFJlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksQ2UoMiksUmUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIEFXZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKG1lKDAsImRpdiIsMjcpLFFlKDEsa1dlLDI2LDcsImRpdiIsMjgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBUV2UoYyxsKXsxJmMmJihtZSgwLCJzcGFuIiw4MSksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9''@;'; put 'put ''ZnVuY3Rpb24gRFdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHByZXZpZXciKSx5ZSgpKCkpfWZ1bmN0aW9uIElXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODcpLFFlKDEsVFdlLDIsMCwic3BhbiIsODgpLFFlKDIsRFdlLDMsMCwiZGl2Iiw4KSx5''@;'; put 'put ''ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIExXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjMpLFFlKDEsQVdlLDIsMSwiZGl2IiwyNCksbWUoMiwiZGl2IiwyNSksUWUoMyxJ''@;'; put 'put ''V2UsMywyLCJkaXYiLDI2KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMiksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFJXZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDc4KSxxdCgxLCJjbHItaWNvbiIsNzkpLE5lKDIsIiBP''@;'; put 'put ''bmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVzIGFyZSBkaXNwbGF5ZWQgIikseWUoKSl9ZnVuY3Rpb24gT1dlKGMsbCl7MSZjJiZxdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBQV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIsIkxvYWRpbmcg''@;'; put 'put ''dGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIEZXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTAzKSgxLCJzcGFuIiw4MSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSxRZSgzLFBXZSwzLDAsImRpdiIsOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDMpLFJlKCJuZ0lmIiwhYS5s''@;'; put 'put ''b2FkaW5nVGFibGUpfX1mdW5jdGlvbiBIV2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0aCIsNCksTmUoMSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLG9yKGEpfX1mdW5jdGlvbiBOV2UoYyxsKXtpZigxJmMmJihtZSgwLCJzcGFuIiw4NiksTmUoMSkseWUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPVZlKCkuaW5kZXgsZD1WZSgyKS5pbmRleCxoPVZlKDQpO0NlKDEpLGdyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIFZXZShjLGwpe2lmKDEmYyYmKG1lKDAsInRkIiw4NCksTmUoMSksUWUoMixOV2UsMiwxLCJzcGFuIiw4''@;'; put 'put ''NSkseWUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVZlKDIpLmluZGV4LGY9VmUoNCk7UmUoIm5nQ2xhc3MiLEoyKDMsS3NlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksQ2UoMSksZ3IoIiAiLGYuZGlmZlRhYmxlLmRhdGFb''@;'; put 'put ''aF1bYV0sIiAiKSxDZSgxKSxSZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBCV2UoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLFZXZSwzLDUsInRkIiw4MyksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuaW5kZXgsZD1WZSg0''@;'; put 'put ''KTtDZSgxKSxSZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24galdlKGMsbCl7aWYoMSZjJiYobWUoMCwidGQiLDQpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDIpLmluZGV4LGg9VmUoNCk7Q2UoMSksZ3IoIiAiLGguZGlmZlRhYmxlLmRhdGFb''@;'; put 'put ''ZF1bYV0sIiAiKX19ZnVuY3Rpb24geldlKGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxqV2UsMiwxLCJ0ZCIsNDcpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpLmluZGV4LGQ9VmUoNCk7Q2UoMSksUmUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIFVXZShjLGwpe2lmKDEmYyYm''@;'; put 'put ''KG1lKDAsInRyIiw4MiksUWUoMSxCV2UsMiwxLCJuZy1jb250YWluZXIiLDgpLFFlKDIseldlLDIsMSwibmctY29udGFpbmVyIiw4KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDQpO1JlKCJuZ0NsYXNzIix5XygzLFhzZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09''@;'; put 'put ''ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxDZSgxKSxSZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksQ2UoMSksUmUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYi''@;'; put 'put ''LDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5NSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLHF0KDUsImNsci1pY29uIiwzNCksTmUoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlz''@;'; put 'put ''dCAiKSx5ZSgpKCksbWUoNywiZGl2Iiw5NikoOCwiaDMiLDk3KSxOZSg5KSx5ZSgpKCksbWUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS50YWJsZUZsYWc9ITApfSkscXQoMTIsImNsci1pY29uIiwzOSkseWUoKSgp''@;'; put 'put ''KCksbWUoMTMsInAiLDk4KSxOZSgxNCkseWUoKSgpLG1lKDE1LCJkaXYiLDUwKSgxNiwiZGl2Iiw1MSkoMTcsImRpdiIsNzUpKDE4LCJzcGFuIiksTmUoMTksIlRhYmxlIElkOiIpLHllKCksbWUoMjAsInN0cm9uZyIsNzYpKDIxLCJzcGFuIiksTmUoMjIpLHllKCkoKSgpLG1lKDIzLCJkaXYi''@;'; put 'put ''KSgyNCwic3BhbiIpLE5lKDI1LCJTdWJtaXR0ZWQgb246IikseWUoKSxtZSgyNiwic3BhbiIsNzcpLE5lKDI3KSx5ZSgpKCksbWUoMjgsImRpdiIpKDI5LCJzcGFuIiksTmUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLHllKCksbWUoMzEsInNwYW4iKSxOZSgzMikseWUoKSgpKCksbWUoMzMsImRp''@;'; put 'put ''diIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJidXR0b24iLDU2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5nb1RvQmFzZShoLnN1Yk9iai5iYXNlKSl9KSxOZSgzOCwiIEdvIHRvIGJhc2UgdGFi''@;'; put 'put ''bGUgc2NyZWVuICIpLHllKCksbWUoMzksImJ1dHRvbiIsNTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDMpO3JldHVybiBqdChoLmdldFRhYmxlKGguc3ViT2JqLnRhYmxlSWQpKX0pLE5lKDQwLCIgR28gdG8gZWRpdGVkIHNjcmVlbiAiKSx5ZSgpLG1lKDQxLCJi''@;'; put 'put ''dXR0b24iLDU4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgzKTtyZXR1cm4ganQoaC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksTmUoNDIsIiBHbyBiYWNrIHRvIGVkaXRvciAiKSx5ZSgpKCkoKSgpLG1lKDQzLCJkaXYiLDY1KSxRZSg0NCxSV2UsMywwLCJzcGFu''@;'; put 'put ''Iiw2NiksbWUoNDUsImRpdiIsMzEpKDQ2LCJkaXYiLDY3KSg0Nywic3BhbiIsNjgpLE5lKDQ4LCIgQ2hhbmdlZCBSb3dzICIpLG1lKDQ5LCJzcGFuIiw2OSksTmUoNTApLHllKCkoKSxtZSg1MSwic3BhbiIsNzApLE5lKDUyLCIgQWRkZWQgUm93cyAiKSxtZSg1Mywic3BhbiIsNzEpLE5lKDU0''@;'; put 'put ''KSx5ZSgpKCksbWUoNTUsInNwYW4iLDcyKSxOZSg1NiwiIERlbGV0ZWQgUm93cyAiKSxtZSg1Nywic3BhbiIsNzMpLE5lKDU4KSx5ZSgpKCkoKSgpKCksbWUoNTksImRpdiIsNTMpKDYwLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsOTkpKDYxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg2MiwiaW5w''@;'; put 'put ''dXQiLDYzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmZvcm1hdHRlZFZhbHVlcz1oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSkseWUoKSxtZSg2MywibGFiZWwi''@;'; put 'put ''KSxOZSg2NCkseWUoKSgpKCkoKSgpKCksbWUoNjUsImRpdiIsMTAwKSxRZSg2NixPV2UsMSwwLCJkaXYiLDQyKSx5ZSgpLFFlKDY3LEZXZSw0LDEsImRpdiIsMTAxKSxtZSg2OCwiZGl2IiwxMDIpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRyIiw0NiksUWUoNzIsSFdlLDIsMSwi''@;'; put 'put ''dGgiLDQ3KSx5ZSgpKCksbWUoNzMsInRib2R5IiksUWUoNzQsVVdlLDMsNywidHIiLDQ4KSx5ZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgzKTtDZSg5KSxncigiICIsYS5zdWJPYmouYmFzZSwiICIpLENlKDUpLGdyKCIgIixhLnRhYmxlRGVzY3JpcHRpb24sIiAiKSxDZSg2KSxSZSgi''@;'; put 'put ''cm91dGVyTGluayIsIi9zdGFnZS8iK2Euc3ViT2JqLnRhYmxlSWQpLENlKDIpLGdyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxDZSg1KSxncigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksQ2UoNSksZ3IoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNvbiwiICIpLENlKDEyKSxSZSgibmdJ''@;'; put 'put ''ZiIsYS5kaWZmc0xpbWl0KSxDZSg2KSxvcihhLmxlbnMudXBkYXRlZCksQ2UoNCksb3IoYS5sZW5zLm5ldyksQ2UoNCksb3IoYS5sZW5zLmRlbGV0ZWQpLENlKDQpLFJlKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksQ2UoMiksb3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6''@;'; put 'put ''IlVuZm9ybWF0dGVkIiksQ2UoMiksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxDZSg1KSxSZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLENlKDIpLFJlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBZV2UoYyxsKXtpZigxJmMmJiht''@;'; put 'put ''ZSgwLCJkaXYiLDkxKSxRZSgxLFpXZSw3NSwxNiwiZGl2Iiw5MikseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIFdXZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUi''@;'; put 'put ''KSx5ZSgpKCkpfWZ1bmN0aW9uIEdXZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTA0KSgxLCJkaXYiLDEwNSkoMiwic3BhbiIsODEpLE5lKDMsIiBMb2FkaW5nLi4uICIpLHllKCksUWUoNCxXV2UsMywwLCJkaXYiLDgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDQpLFJlKCJu''@;'; put 'put ''Z0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiAkV2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLFlXZSwyLDEsImRpdiIsODkpLFFlKDIsR1dlLDUsMSwiZGl2Iiw5MCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEubG9hZGVkKSxDZSgxKSxSZSgibmdJ''@;'; put 'put ''ZiIsIWEubG9hZGVkKX19Y29uc3QgcVdlPWZ1bmN0aW9uKCl7cmV0dXJue3N0YW5kYWxvbmU6ITB9fTtsZXQgSnNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5y''@;'; put 'put ''b3V0ZT1mLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDowLGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5jZT0iaG90SW5zdGFu''@;'; put 'put ''Y2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hh''@;'; put 'put ''bmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0PTEwMH1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1n''@;'; put 'put ''b1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIith''@;'; put 'put ''KX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50''@;'; put 'put ''YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxlY3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2''@;'; put 'put ''YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLnJlamVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFzb249YS5zdWJtaXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQX1JFQVNPTjphLnN1''@;'; put 'put ''Ym1pdFJlYXNvbn07eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9''@;'; put 'put ''ITEsYS5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZU''@;'; put 'put ''SU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9''@;'; put 'put ''PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNl''@;'; put 'put ''LmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxkLmpzUGFyYW1zPWguanNwYXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IF8gaW4gZC5qc1BhcmFtcylkLmpzUGFyYW1zLmhhc093blByb3BlcnR5KF8pJiZmLnB1c2goXyk7ZC5rZXlzQXJy''@;'; put 'put ''YXk9Zn0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9KX0pKCl9Zm9ybWF0dGluZ0NoYW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5yZXNwb25zZS5uZXcs''@;'; put 'put ''ZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLm9yaWdpbmFsczt0aGlzLmZvcm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRoaXMucmVzcG9uc2Uu''@;'; put 'put ''Zm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhpcy5yb3dLZXlzPVtdO2ZvcihsZXQgU3Q9MDtTdDxkLmxlbmd0aDtTdCsrKXtsZXQgUXQ9T2JqZWN0LmtleXMoZFtTdF0pO2ZvcihsZXQgcm49MDtybjxRdC5sZW5ndGg7cm4rKylk''@;'; put 'put ''W1N0XVtRdFtybl1dIT09ZltTdF1bUXRbcm5dXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDpTdCxmaWVsZDpRdFtybl0scHJvcDpkW1N0XVtRdFtybl1dLG9yaWdpbmFsOmZbU3RdW1F0W3JuXV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVEfHwwLHVwZGF0ZWQ6''@;'; put 'put ''dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHwwfTtsZXQgaWU9W10sZ2U9ZC5jb25jYXQoYSxoKTtmb3IobGV0IFN0PTA7U3Q8dGhpcy5yZXNwb25zZS5jb2xzLmxlbmd0aDtTdCsrKWllLnB1c2godGhpcy5yZXNwb25zZS5jb2xz''@;'; put 'put ''W1N0XS5OQU1FKTtsZXQgd2U9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LEVlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlm''@;'; put 'put ''ZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD13ZTtsZXQgb3Q9W10sZXQ9W107Zm9yKGxldCBTdD0wO1N0PGll''@;'; put 'put ''Lmxlbmd0aDtTdCsrKWV0LnB1c2goe2RhdGE6aWVbU3RdLHJlYWRPbmx5OiEwfSk7dGhpcy5kaWZmVGFibGUuZGF0YT1nZTtmb3IobGV0IFN0PTA7U3Q8Z2UubGVuZ3RoO1N0Kyspe2xldCBybj1PYmplY3Qua2V5cyhnZVtTdF0pO3RoaXMucm93S2V5cy5wdXNoKHJuKX1sZXQgeXQ9W10sa3Q9''@;'; put 'put ''W107Zm9yKGxldCBTdD0wO1N0PHRoaXMuZGlmZlRhYmxlLmRhdGEubGVuZ3RoO1N0Kyspe2lmKFN0PEVlJiYwIT09RWUpe3l0LnB1c2goW10pLGt0LnB1c2goW10pLG90LnB1c2goInVwZGF0ZWQiKTtsZXQgUXQ9T2JqZWN0LmtleXModGhpcy5kaWZmVGFibGUuZGF0YVtTdF0pO2ZvcihsZXQg''@;'; put 'put ''cm49MDtybjxRdC5sZW5ndGg7cm4rKyl7bGV0IHZuPVF0W3JuXTtmW1N0XVt2bl0hPT1kW1N0XVt2bl0/KHl0W1N0XS5wdXNoKCEwKSxrdFtTdF0ucHVzaChmW1N0XVt2bl0pKTooeXRbU3RdLnB1c2goITEpLGt0W1N0XS5wdXNoKG51bGwpKX10aGlzLmFyckNoYW5nZWQ9eXQsdGhpcy5hcnJP''@;'; put 'put ''ZkNoYW5nZXM9a3R9U3Q+PUVlJiZTdDxFZSt3ZSYmb3QucHVzaCgiYWRkZWQiKSxTdD53ZStFZS0xJiZvdC5wdXNoKCJkZWxldGVkIil9dGhpcy5jaEFycj1vdCx0aGlzLnJvd0hlYWRlcj10aGlzLnJvd0tleXNbMF0sdGhpcy5kaWZmVGFibGUuZGF0YT1nZX1uZ0FmdGVyVmlld0luaXQoKXt2''@;'; put 'put ''YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtpZihhLl9kZXRhaWxzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnN1Ym1pdHREZXRhaWwuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7dmFyIGg9ZmkoZnVuY3Rpb24qKGYpe2Euc3ViT2JqPWYudmlld0RhdGEsYS50YWJsZUlkPWYudmlld0RhdGEu''@;'; put 'put ''dGFibGVJZCxhLnN1Ym1pdHRlZD1mLnZpZXdEYXRhLnN1YixhLnN1Ym1pdERldGFpbHM9Zi5kYXRhLGEuc3VibWl0QXJyPVtdO2ZvcihsZXQgVCBpbiBhLnN1Ym1pdERldGFpbHMpInN1YiIhPT1UJiZhLnN1Ym1pdEFyci5wdXNoKFQpO2xldCBfPXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxF''@;'; put 'put ''OmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhfLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oVD0+e2EucGFyYW1zPVQucGFyYW1zWzBdLGEucmVzcG9uc2U9VCxhLmNhbGNE''@;'; put 'put ''aWZmKCl9KS5jYXRjaChUPT5UKS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5w''@;'; put 'put ''YXJhbXMudGFibGVJZD4idSIpcmV0dXJuO2EudGFibGVJZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDtsZXQgZD17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5z''@;'; put 'put ''aG93RGlmZnMoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnBhcmFtcz1oLnBhcmFtc1swXSxhLnJlc3BvbnNlPWgsYS5jYWxjRGlmZigpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJs''@;'; put 'put ''ZT0hMCxhLnNldEZvY3VzKCl9KSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RldGFpbHNTdWImJnRoaXMuX2RldGFpbHNTdWIudW5zdWJzY3JpYmUoKX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQu''@;'; put 'put ''Z2V0RWxlbWVudEJ5SWQoImFjY2VwdEJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChXbCksdHQoRHMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBw''@;'; put 'put ''LWFwcHJvdmUtZGV0YWlscyJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NDIsdmFyczoxMixjb25zdHM6W1szLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJd''@;'; put 'put ''LFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFs0LCJuZ0lmIl0sWzEsImZvcm0tYmxvY2siXSxbMSwiZm9ybS1ncm91cCJdLFsiZm9yIiwi''@;'; put 'put ''Zm9ybUZpZWxkc184Il0sWyJpZCIsImZvcm1GaWVsZHNfOCIsInJvd3MiLCI1IiwxLCJ3LTEwMCIsMywibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIiwibmdNb2RlbENoYW5nZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCBsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJjbGFzcyIsImxlZnQiLDQsIm5nSWYiXSxbMSwibGVmdCIsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbImNsclRhYkxpbmsiLCIiXSxbNCwiY2xySWZBY3RpdmUiXSxbMSwib3ZlcmZsb3ctYXV0byJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImNhcmQtaGVhZGVyIGQtZmxleCBmbGV4LWNv''@;'; put 'put ''bHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsIm92ZXJmbG93LWF1dG8iLCJtci0xMiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQt''@;'; put 'put ''aGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQiLCJjbGFzcyIsIm10LTAiLDQsIm5nSWYiXSxbMSwibXQtMCJdLFsxLCJjYXJkLWhlYWRlciIsInAtMCJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtbWQtNCIs''@;'; put 'put ''ImFwcHJvdmFsQmFjayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsIm0tMCIsMywiY2xpY2siXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwi''@;'; put 'put ''bXQtMCIsImZvbnQtd2VpZ2h0LTMwMCJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEluZm8iXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtc20iLCJ0b29sdGlwLXRvcC1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJpbmZvLXN0YW5kYXJkIiwic2l6ZSIsIjI4Il0sWzEsInRleHQtY2Vu''@;'; put 'put ''dGVyIiwibXQtMTAiXSxbMSwiY2FyZC1ibG9jayIsInAtMCJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbImNsYXNzIiwiaC0yNHZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJs''@;'; put 'put ''ZUNvbnQiLCJtdC0wIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtc2l6ZS0xOCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiXSxbImNsYXNzIiwibGVmdCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsImQtZmxleCIsMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEs''@;'; put 'put ''ImNhcmQtdGV4dCJdLFsxLCJjbHItcm93IiwiZm9udC1zaXplLTE1Il0sWzEsImNsci1jb2wtbWQtNSJdLFsxLCJjbHItY29sLW1kLTciXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRl''@;'; put 'put ''ciIsIm10LTAiXSxbMSwiY2xyLXJvdyIsImNsci1nYXAtNSIsImNsci1nYXAtc20tMCJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2Vu''@;'; put 'put ''dGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHIt''@;'; put 'put ''Z2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIsImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiLCJjbGljayJd''@;'; put 'put ''LFsiaWQiLCJyZWplY3RCdG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0biIsImJ0bi1kYW5nZXIiLCJtci0wIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbCIsIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4''@;'; put 'put ''IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0wIl0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSIsImJhZGdlLXdhcm5pbmciXSxbMSwibGFiZWwiLCJsYWJlbC1zdWNjZXNzIl0sWzEsImJhZGdlIiwiYmFk''@;'; put 'put ''Z2Utc3VjY2VzcyJdLFsxLCJsYWJlbCIsImxhYmVsLWRhbmdlciJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtc2l6ZS0xOCJdLFsxLCJtdC0xNSJdLFsxLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm10LTEwIl0sWzEsInJvd3Mtbm90''@;'; put 'put ''aWNlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3Itb3JhbmdlIl0sWzEsImgtMjR2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWzEsImQt''@;'; put 'put ''ZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRu''@;'; put 'put ''LW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImNsci1jb2wtbWQtNCJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIiwidGV4dC1jZW50ZXIiXSxbMSwibS0wIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtLTAiLCJtbC0yMC1pIl0sWzEsImNhcmQtYmxvY2siLCJw''@;'; put 'put ''LTAiLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC0yNXZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiXSxbMSwiaC0yNXZoIiwiZC1mbGV4IiwiZmxleC1jb2x1''@;'; put 'put ''bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwibG9hZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihm''@;'; put 'put ''KXtyZXR1cm4gZC5kZXRhaWxzT3Blbj1mfSksbWUoMSwiaDMiLDEpLE5lKDIsIkFwcHJvdmFsIERldGFpbHMiKSx5ZSgpLG1lKDMsImRpdiIsMikoNCwidGFibGUiLDMpKDUsInRoZWFkIikoNiwidHIiKSg3LCJ0aCIsNCksTmUoOCwiTmFtZSIpLHllKCksbWUoOSwidGgiLDQpLE5lKDEwLCJW''@;'; put 'put ''YWx1ZSIpLHllKCkoKSgpLG1lKDExLCJ0Ym9keSIpLFFlKDEyLGxXZSw1LDMsInRyIiw1KSx5ZSgpKCkoKSxtZSgxMywiZGl2Iiw2KSgxNCwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZGV0YWlsc09wZW49ITF9KSxOZSgxNSwiIE9rICIpLHllKCkoKSgpLG1l''@;'; put 'put ''KDE2LCJjbHItbW9kYWwiLDApLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRhYmxlRmxhZz1mfSksbWUoMTcsImgzIiwxKSxOZSgxOCwiQWxsIERldGFpbHMiKSx5ZSgpLG1lKDE5LCJkaXYiLDIpLFFlKDIwLGhXZSwxOSwyLCJjbHItdGFicyIsOCkseWUo''@;'; put 'put ''KSxtZSgyMSwiZGl2Iiw2KSgyMiwiYnV0dG9uIiw3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVGbGFnPSExfSksTmUoMjMsIiBPayAiKSx5ZSgpKCkoKSxtZSgyNCwiY2xyLW1vZGFsIiwwKSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4g''@;'; put 'put ''ZC5yZWplY3RPcGVuPWZ9KSxtZSgyNSwiaDMiLDEpLE5lKDI2LCJSZWFzb24gTWVzc2FnZSIpLHllKCksbWUoMjcsImRpdiIsMikoMjgsImZvcm0iKSgyOSwic2VjdGlvbiIsOSkoMzAsImRpdiIsMTApKDMxLCJsYWJlbCIsMTEpLE5lKDMyLCJSZWFzb24gZm9yIHJlamVjdGluZz8iKSx5ZSgp''@;'; put 'put ''LG1lKDMzLCJ0ZXh0YXJlYSIsMTIpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5zdWJtaXRSZWFzb249Zn0pLHllKCkoKSgpKCkoKSxtZSgzNCwiZGl2Iiw2KSgzNSwiYnV0dG9uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnJlamVjdE9wZW49''@;'; put 'put ''ITF9KSxOZSgzNiwiIENhbmNlbCAiKSx5ZSgpLG1lKDM3LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVqZWN0aW5nKCl9KSxOZSgzOCwiIE9LICIpLHllKCkoKSgpLG1lKDM5LCJkaXYiLDE1KSxRZSg0MCxMV2UsNCwyLCJkaXYiLDE2KSxRZSg0MSwkV2Us''@;'; put 'put ''MywyLCJkaXYiLDgpLHllKCkpLDImYSYmKFJlKCJjbHJNb2RhbE9wZW4iLGQuZGV0YWlsc09wZW4pLENlKDEyKSxSZSgibmdGb3JPZiIsZC5rZXlzQXJyYXkpLENlKDQpLFJlKCJjbHJNb2RhbE9wZW4iLGQudGFibGVGbGFnKSxDZSg0KSxSZSgibmdJZiIsZC50YWJsZUZsYWcpLENlKDQpLFJl''@;'; put 'put ''KCJjbHJNb2RhbE9wZW4iLGQucmVqZWN0T3BlbiksQ2UoOSksUmUoIm5nTW9kZWwiLGQuc3VibWl0UmVhc29uKSgibmdNb2RlbE9wdGlvbnMiLCRzKDExLHFXZSkpKCJpbm5lckhUTUwiLGQuc3VibWl0UmVhc29uLHEyKSxDZSg0KSxSZSgiY2xyTG9hZGluZyIsZC5yZWplY3RMb2FkaW5nKSxD''@;'; put 'put ''ZSgzKSxSZSgibmdJZiIsIWQuc3VibWl0dGVkKSxDZSgxKSxSZSgibmdJZiIsZC5zdWJtaXR0ZWQpKX0sZGVwZW5kZW5jaWVzOlt1Yyx4cyxaaSxDcCxXYSxTMCxCcyx3cCxPcyxyMixCdSxrYSxvdSxzdSxadSxFOCxkaCxVcyxEMCxEOCxUMCxMcCxPcCxkZyxScCxJcCxjZ10sc3R5bGVzOlsn''@;'; put 'put ''LmxvYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7aGVpZ2h0Ojc1dmg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ubW9kYWxMYXJnZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTByZW0haW1wb3J0''@;'; put 'put ''YW50fS5hZGRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2IoMTQ2LDIwOCwxNTQpO2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDc3LDExNywuMik7Ym9yZGVyLXJhZGl1czo1cHh9LmRlbGV0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6cmdiKDIzMCwx''@;'; put 'put ''NzksMTc5KTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoNzAsNzEsNzAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS51cGRhdGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNmYWZkYTg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDksMTE3LDksLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5j''@;'; put 'put ''aFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDpyZ2JhKDAsMCwwLC4xKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMTA0LDEwMCwwLC40KTtib3JkZXItcmFkaXVzOjVweH0uY2hbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQ6cmdiYSgyNTIsMTM1LDEyMCwuNCl9LnRv''@;'; put 'put ''b2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''LCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjU0MTY3cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZDojMzE0MzUxO2JvcmRlci1yYWRpdXM6LjEyNXJl''@;'; put 'put ''bTtjb2xvcjojZjBmMWVjO2xpbmUtaGVpZ2h0Oi43NXJlbTttYXJnaW46MDtwYWRkaW5nOi4zNzVyZW0gLjVyZW07d2lkdGg6MjM1cHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgMTJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTou''@;'; put 'put ''NjY2NjdyZW19LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29u''@;'; put 'put ''dGVudDoiIjtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9LnRhYmxlW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4IHNvbGlkfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6''@;'; put 'put ''IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJn''@;'; put 'put ''aW46MTVweCAxMHB4IDEwcHh9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9''@;'; put 'put ''LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjByZW0haW1wb3J0''@;'; put 'put ''YW50O21pbi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWdu''@;'; put 'put ''OmxlZnQ7d2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkLmxlZnRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O2Zs''@;'; put 'put ''ZXg6MTt3aWR0aDozMDBweCFpbXBvcnRhbnR9LnRvb2xsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9I2FjY2VwdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNyZWplY3RCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE3NXB4fS5mb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjc1cHh9Y2xy''@;'; put 'put ''LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRvfS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQt''@;'; put 'put ''c2l6ZToxNXB4fS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9J119KSxjfSkoKTtmdW5jdGlvbiBLV2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDkpKDEsImRpdiIsMTApLHF0KDIsImNsci1pY29uIiwxMSksbWUo''@;'; put 'put ''MywiaDMiLDEyKSxOZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLHllKCkoKSgpKX1mdW5jdGlvbiBYV2UoYyxsKXsxJmMmJihtZSgwLCJoMyIsMTMpLE5lKDEsIiBSRVZJRVcgIikseWUoKSl9ZnVuY3Rpb24gSldlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMTQpLE5l''@;'; put 'put ''KDEsIiBZb3UgaGF2ZSAiKSxtZSgyLCJzcGFuIiksTmUoMykseWUoKSxOZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLGdyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gUVdlKGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMTcpLE5l''@;'; put 'put ''KDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIGVHZShjLGwpezEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLHllKCkoKSl9ZnVuY3Rpb24gdEdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNSksUWUoMSxRV2UsMiwwLCJz''@;'; put 'put ''cGFuIiwxNiksUWUoMixlR2UsMywwLCJkaXYiLDgpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBuR2UoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwzOCl9ZnVuY3Rpb24gckdl''@;'; put 'put ''KGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzkpLDImYyYmUmUoImNsclNtYWxsIiwhMCl9ZnVuY3Rpb24gaUdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5l''@;'; put 'put ''KDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpLG1lKDcsImNsci1kZy1jZWxsIiksTmUoOCkseWUoKSxtZSg5LCJjbHItZGctY2VsbCIpKDEwLCJkaXYiLDI2KSgxMSwiYSIsMjcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLmluZGV4O3JldHVybiBq''@;'; put 'put ''dChWZSgyKS5nZXRDbGlja2VkKGYpKX0pLHF0KDEyLCJjbHItaWNvbiIsMjgpLG1lKDEzLCJzcGFuIiwyOSksTmUoMTQsIkdvIHRvIHJldmlldyBwYWdlIHNjcmVlbiIpLHllKCkoKSxtZSgxNSwiYSIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPUJ0KGEpLGY9aC4kaW1wbGlj''@;'; put 'put ''aXQsXz1oLmluZGV4LFQ9VmUoMik7cmV0dXJuIGp0KGYucmVqZWN0TG9hZGluZz8iIjpULnJlamVjdGluZyhfKSl9KSxRZSgxNixuR2UsMSwwLCJjbHItaWNvbiIsMzEpLFFlKDE3LHJHZSwxLDEsImNsci1zcGlubmVyIiwzMiksbWUoMTgsInNwYW4iLDI5KSxOZSgxOSwiUmVqZWN0IikseWUo''@;'; put 'put ''KSgpLG1lKDIwLCJhIiwzMykseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSgyKS5nZXRUYWJsZShmLnRhYmxlSWQpKX0pLHF0KDIxLCJjbHItaWNvbiIsMzQpLG1lKDIyLCJzcGFuIiwyOSksTmUoMjMsIkdvIHRvIHN0YWdlZCBkYXRh''@;'; put 'put ''IHNjcmVlbiIpLHllKCkoKSgpKCksbWUoMjQsImNsci1kZy1jZWxsIiwzNSkoMjUsImJ1dHRvbiIsMzYpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgXz1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIFZlKDIpLmRvd25sb2FkKF8udGFibGVJZCksanQoaC5zdG9wUHJvcGFnYXRpb24oKSl9''@;'; put 'put ''KSxxdCgyNiwiY2xyLWljb24iLDM3KSx5ZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5zdWJtaXR0ZXIpLENlKDIpLG9yKGEuYmFzZVRhYmxlKSxDZSgyKSxvcihhLnN1Ym1pdHRlZCksQ2UoMiksb3IoYS5zdWJtaXRSZWFzb24pLENlKDgpLFJlKCJuZ0lm''@;'; put 'put ''IiwhYS5yZWplY3RMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxDZSg4KSxSZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIG9HZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMTgpKDIsImNsci1kZy1jb2x1''@;'; put 'put ''bW4iLDE5KSxOZSgzLCJTVUJNSVRURVIiKSx5ZSgpLG1lKDQsImNsci1kZy1jb2x1bW4iLDE5KSxOZSg1LCJCQVNFIFRBQkxFIikseWUoKSxtZSg2LCJjbHItZGctY29sdW1uIiwxOSksTmUoNywiU1VCTUlUVEVEIikseWUoKSxtZSg4LCJjbHItZGctY29sdW1uIiwxOSksTmUoOSwiU1VCTUlU''@;'; put 'put ''IFJFQVNPTiIpLHllKCksbWUoMTAsImNsci1kZy1jb2x1bW4iKSxOZSgxMSwiQUNUSU9OIikseWUoKSxtZSgxMiwiY2xyLWRnLWNvbHVtbiIpLE5lKDEzLCJET1dOTE9BRCIpLHllKCksUWUoMTQsaUdlLDI3LDcsImNsci1kZy1yb3ciLDIwKSxtZSgxNSwiY2xyLWRnLWZvb3RlciIsMjEpKDE2''@;'; put 'put ''LCJzcGFuIiksTmUoMTcsIml0ZW1zIHBlciBwYWdlIikseWUoKSxtZSgxOCwic2VsZWN0IiwyMikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLml0ZW1zTnVtPWgpfSksbWUoMTksIm9wdGlvbiIsMjMpLE5lKDIwLCIzIikseWUoKSxtZSgyMSwi''@;'; put 'put ''b3B0aW9uIiwyMyksTmUoMjIsIjUiKSx5ZSgpLG1lKDIzLCJvcHRpb24iLDIzKSxOZSgyNCwiMTAiKSx5ZSgpLG1lKDI1LCJvcHRpb24iLDIzKSxOZSgyNiwiMTUiKSx5ZSgpKCksbWUoMjcsImNsci1kZy1wYWdpbmF0aW9uIiwyNCwyNSksTmUoMjkpLHllKCkoKSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPSRpKDI4KSxkPVZlKCk7Q2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsImJhc2VUYWJsZSIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSxDZSg2''@;'; put 'put ''KSxSZSgiY2xyRGdJdGVtc09mIixkLmFwcHJvdmVMaXN0KSxDZSg0KSxSZSgibmdNb2RlbCIsZC5pdGVtc051bSksQ2UoMSksUmUoIm5nVmFsdWUiLDMpLENlKDIpLFJlKCJuZ1ZhbHVlIiw1KSxDZSgyKSxSZSgibmdWYWx1ZSIsMTApLENlKDIpLFJlKCJuZ1ZhbHVlIiwxNSksQ2UoMiksUmUo''@;'; put 'put ''ImNsckRnUGFnZVNpemUiLGQuaXRlbXNOdW0pLENlKDIpLGIwKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgYXBwcm92YWxzICIpfX1jb25zdCBzR2U9ZnVuY3Rpb24oYyl7cmV0dXJue25vQm9yZGVyOmN9fTtsZXQgYUdlPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuY2RyPV8sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMH1nZXRUYWJsZShhKXt0aGlz''@;'; put 'put ''LnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldENsaWNrZWQoYSl7dm9pZCAwIT09dGhpcy5hcHByb3ZlTGlzdCYmKHRoaXMudGFibGVJZD10aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQsdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCJyZXZpZXcvYXBwcm92ZURldC8iK3Ro''@;'; put 'put ''aXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCkpfXJlamVjdGluZyhhKXt2YXIgZD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXt2b2lkIDAhPT1kLmFwcHJvdmVMaXN0JiYoZC50YWJsZUlkPWQuYXBwcm92ZUxpc3RbYV0udGFibGVJZCk7bGV0IGg9e1NUUF9BQ1RJT046IlJFSkVDVF9UQUJM''@;'; put 'put ''RSIsVEFCTEU6ZC50YWJsZUlkLFNUUF9SRUFTT046InF1aWNrIHJlamVjdGlvbiJ9O3RyeXsoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITAsKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhoLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlv''@;'; put 'put ''biIpKS5mcm9tc2FzWzBdLlJFU1BPTlNFLmluY2x1ZGVzKCJTVUNDRVNTIikmJigoZC5hcHByb3ZlTGlzdHx8W10pW2FdLnJlamVjdExvYWRpbmc9ITEsZC5hcHByb3ZlTGlzdD8uc3BsaWNlKGEsMSksZC5yZW1haW5lZC0tLGQuY2RyLmRldGVjdENoYW5nZXMoKSl9Y2F0Y2goZil7ZC5ldmVu''@;'; put 'put ''dFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvcmVqZWN0aW9uIixmKX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5mZXRjaEFwcHJvdmFscygpfSkoKX1mZXRjaEFwcHJvdmFscygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1''@;'; put 'put ''bmN0aW9uKigpe2EuaXRlbXNOdW09MTA7bGV0IGQ9e1NUUF9BQ1RJT046Ik9QRU5fQVBQUk9WQUxTIn07dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEFwcHJvdmFscyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIpO2EucmVtYWluZWQ9aC5m''@;'; put 'put ''cm9tc2FzLmxlbmd0aDtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKF8pe3JldHVybnt0YWJsZUlkOl8uVEFCTEVfSUQsc3VibWl0dGVyOl8uU1VCTUlUVEVEX0JZX05NLHN1Ym1pdHRlZDpfLlNVQk1JVFRFRF9PTl9EVFRNLGJhc2VUYWJsZTpfLkJBU0VfVEFCTEUsc3VibWl0UmVhc29u''@;'; put 'put ''Ol8uU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7YS5hcHByb3ZlTGlzdD1mLGEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIsaCl9fSkoKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2Uu''@;'; put 'put ''Z2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChEcyksdHQob2EpLHR0KFVhKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs''@;'; put 'put ''czo5LHZhcnM6OCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0''@;'; put 'put ''LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFwcHJvdmFscy1saXN0LXdyYXBwZXIiLDQsIm5nSWYiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItY29sLW1kLTEyIl0s''@;'; put 'put ''WzQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJjYXJkLWJsb2NrIiwibm9hcHByb3ZhbHMtaW5mby13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwi''@;'; put 'put ''dGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIl0sWyJjbGFzcyIsInNw''@;'; put 'put ''aW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJkYXRhZ3JpZC1jb21wYWN0IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0s''@;'; put 'put ''WzMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWyJyb2xlIiwidG9vbHRpcCIsMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVy''@;'; put 'put ''IiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ncmVlbiIsMywiY2xpY2siXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjQiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0''@;'; put 'put ''aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLXJlZCIsMywiY2xpY2siXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiw0LCJuZ0lmIl0sWzMsImNsclNtYWxsIiw0LCJuZ0lmIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29s''@;'; put 'put ''dGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiaWQiLCJjbGljayJd''@;'; put 'put ''LFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApKDEsImRpdiIsMSksUWUoMixLV2UsNSwwLCJkaXYiLDIpLG1lKDMsImRpdiIsMyksUWUoNCxYV2Us''@;'; put 'put ''MiwwLCJoMyIsNCksUWUoNSxKV2UsNSwxLCJwIiw1KSx5ZSgpLFFlKDYsdEdlLDMsMiwiZGl2Iiw2KSxtZSg3LCJkaXYiLDcpLFFlKDgsb0dlLDMwLDE0LCJkaXYiLDgpLHllKCkoKSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsMD09PWQucmVtYWluZWQpLENlKDEpLFJlKCJuZ0NsYXNzIixK''@;'; put 'put ''Mig2LHNHZSwhZC5sb2FkZWQpKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQmJjAhPT1kLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQmJjAhPT1kLnJlbWFpbmVkKSxDZSgxKSxSZSgibmdJZiIsIWQubG9hZGVkKSxDZSgyKSxSZSgibmdJZiIsZC5hcHByb3ZlTGlzdCYmMCE9''@;'; put 'put ''PWQucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOlt1YyxaaSxsMSxjMSxNMCxCcyxPcyxXOCxUcCx0ZyxQRSxVOCxGRSxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxrYSx1Ml0sc3R5bGVzOlsiLmNvbHVtbi1jZW50ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVj''@;'; put 'put ''dGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhZ3JpZC1jb2x1bW5bX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17''@;'; put 'put ''b3V0bGluZTpub25lIWltcG9ydGFudH0ubGlua3NbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcn0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''LCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''PiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1yaWdodDouMjVyZW0gc29saWQg''@;'; put 'put ''IzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfS5ub0JvcmRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fS5hcHByb3ZhbHMtbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXto''@;'; put 'put ''ZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KSxjfSkoKTtmdW5jdGlvbiBsR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxxdCgyLCJjbHItaWNvbiIsMTQpLG1lKDMsImgzIiwx''@;'; put 'put ''NSksTmUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxlcyAiKSx5ZSgpKCkoKSl9ZnVuY3Rpb24gY0dlKGMsbCl7MSZjJiYobWUoMCwiaDMiLDE2KSxOZSgxLCIgU1VCTUlUIFFVRVVFICIpLHllKCkpfWZ1bmN0aW9uIHVHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDE3KSxO''@;'; put 'put ''ZSgxLCIgWW91IGhhdmUgIiksbWUoMiwic3BhbiIpLE5lKDMpLHllKCksTmUoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksZ3IoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBkR2UoYyxsKXsxJmMmJiht''@;'; put 'put ''ZSgwLCJzcGFuIiwyMCksTmUoMSwiIExvYWRpbmcuLi4gIikseWUoKSl9ZnVuY3Rpb24gaEdlKGMsbCl7MSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBsaXN0IikseWUoKSgpKX1mdW5jdGlvbiBmR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE4''@;'; put 'put ''KSxRZSgxLGRHZSwyLDAsInNwYW4iLDE5KSxRZSgyLGhHZSwzLDAsImRpdiIsMikseWUoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBwR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4o''@;'; put 'put ''KTttZSgwLCJjbHItZGctcm93IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGY9QnQoYSkuJGltcGxpY2l0O3JldHVybiBqdChWZSg1KS5nb1RvRGV0YWlscyhmLnRhYmxlSWQpKX0pLG1lKDEsImNsci1kZy1jZWxsIiksTmUoMikseWUoKSxtZSgzLCJjbHItZGctY2VsbCIpLE5l''@;'; put 'put ''KDQpLHllKCksbWUoNSwiY2xyLWRnLWNlbGwiKSxOZSg2KSx5ZSgpLG1lKDcsImNsci1kZy1jZWxsIikoOCwiZGl2IiwzMSkoOSwiYSIsMzIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBmPUJ0KGEpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoNSkuZ29Ub1N0YWdlKGYudGFibGVJZCkp''@;'; put 'put ''fSkscXQoMTAsImNsci1pY29uIiwzMyksbWUoMTEsInNwYW4iLDM0KSxOZSgxMiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIikseWUoKSgpKCkoKSxtZSgxMywiY2xyLWRnLWNlbGwiLDM1KSgxNCwiYnV0dG9uIiwzNikseHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBfPUJ0KGEpLiRp''@;'; put 'put ''bXBsaWNpdDtyZXR1cm4gVmUoNSkuZG93bmxvYWQoXy50YWJsZUlkKSxqdChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLHF0KDE1LCJjbHItaWNvbiIsMzcpLHllKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLmJhc2UpLENlKDIpLG9yKGEuc3VibWl0dGVkKSxD''@;'; put 'put ''ZSgyKSxvcihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIGdHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMjIpKDIsImNsci1kZy1jb2x1bW4iKSxOZSgzLCJCQVNFIFRBQkxFIikseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiwyMyks''@;'; put 'put ''TmUoNSwiU1VCTUlUVEVEIikseWUoKSxtZSg2LCJjbHItZGctY29sdW1uIiwyMyksTmUoNywiU1VCTUlUIFJFQVNPTiIpLHllKCksbWUoOCwiY2xyLWRnLWNvbHVtbiIsMTIpLE5lKDksIkFDVElPTiIpLHllKCksbWUoMTAsImNsci1kZy1jb2x1bW4iLDEyKSxOZSgxMSwiRE9XTkxPQUQiKSx5''@;'; put 'put ''ZSgpLFFlKDEyLHBHZSwxNiwzLCJjbHItZGctcm93IiwyNCksbWUoMTMsImNsci1kZy1mb290ZXIiLDI1KSgxNCwic3BhbiIpLE5lKDE1LCJpdGVtcyBwZXIgcGFnZSIpLHllKCksbWUoMTYsInNlbGVjdCIsMjYpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoVmUoNCkuaXRlbXNOdW09aCl9KSxtZSgxNywib3B0aW9uIiwyNyksTmUoMTgsIjMiKSx5ZSgpLG1lKDE5LCJvcHRpb24iLDI3KSxOZSgyMCwiNSIpLHllKCksbWUoMjEsIm9wdGlvbiIsMjcpLE5lKDIyLCIxMCIpLHllKCksbWUoMjMsIm9wdGlvbiIsMjcpLE5lKDI0LCIxNSIpLHllKCko''@;'; put 'put ''KSxtZSgyNSwiY2xyLWRnLXBhZ2luYXRpb24iLDI4LDI5KSxOZSgyNykseWUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMjYpLGQ9VmUoNCk7Q2UoNCksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLENlKDYpLFJl''@;'; put 'put ''KCJjbHJEZ0l0ZW1zT2YiLGQuc3VibWl0dGVyTGlzdCksQ2UoNCksUmUoIm5nTW9kZWwiLGQuaXRlbXNOdW0pLENlKDEpLFJlKCJuZ1ZhbHVlIiwzKSxDZSgyKSxSZSgibmdWYWx1ZSIsNSksQ2UoMiksUmUoIm5nVmFsdWUiLDEwKSxDZSgyKSxSZSgibmdWYWx1ZSIsMTUpLENlKDIpLFJlKCJj''@;'; put 'put ''bHJEZ1BhZ2VTaXplIixkLml0ZW1zTnVtKSxDZSgyKSxiMCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVtcywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBtR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDIxKSxRZSgxLGdHZSwyOCwx''@;'; put 'put ''MiwiZGl2IiwyKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEuc3VibWl0dGVyTGlzdCYmMCE9PWEucmVtYWluZWQpfX1jb25zdCB2R2U9ZnVuY3Rpb24oYyl7cmV0dXJue25vQm9yZGVyOmN9fTtmdW5jdGlvbiBfR2UoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYi''@;'; put 'put ''LDUpLFFlKDEsbEdlLDUsMCwiZGl2Iiw2KSxtZSgyLCJkaXYiLDcpLFFlKDMsY0dlLDIsMCwiaDMiLDgpLFFlKDQsdUdlLDUsMSwicCIsOSkseWUoKSxRZSg1LGZHZSwzLDIsImRpdiIsMTApLFFlKDYsbUdlLDIsMSwiZGl2IiwxMSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJl''@;'; put 'put ''KCJuZ0lmIiwwPT09YS5yZW1haW5lZCYmYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0NsYXNzIixKMig2LHZHZSwhYS5sb2FkZWQpKSxDZSgxKSxSZSgibmdJZiIsMCE9PWEucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCYmMCE9PWEucmVtYWluZWQpLENlKDEpLFJlKCJuZ0lmIiwh''@;'; put 'put ''YS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIGJHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMyksUWUoMSxfR2UsNyw4LCJkaXYiLDQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIiwhYS5zdWJSZWFkeSl9fWZ1bmN0aW9uIHlH''@;'; put 'put ''ZShjLGwpezEmYyYmKG1lKDAsImRpdiIpLHF0KDEsImFwcC1hcHByb3ZlLWRldGFpbHMiKSx5ZSgpKX1sZXQgUXNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlz''@;'; put 'put ''LnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPV8sdGhpcy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEsdGhpcy5kZXRhaWxzT3Blbj0hMX1nb1RvU3RhZ2UoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29Ub0RldGFpbHMoYSl7dGhp''@;'; put 'put ''cy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQvIithKX1nZXREZXRhaWxzKGEsZCl7dGhpcy5zdWJSZWFkeT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2VuZERldGFpbHMoYSxkLHRoaXMuc3VibWl0RGF0YSl9LDApfW5nT25Jbml0KCl7''@;'; put 'put ''dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7Y29uc3QgZD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2EuaXRlbXNOdW09MTA7dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFN1Ym1pdHRzKCk7aWYoYS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3Ro''@;'; put 'put ''LGEucmVtYWluZWQ+MCl7YS5zdWJtaXR0ZXI9aC5mcm9tc2FzWzBdLlNVQk1JVFRFRF9CWV9OTTtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKF8pe3JldHVybnt0YWJsZUlkOl8uVEFCTEVfSUQsYmFzZTpfLkJBU0VfVEFCTEUsc3VibWl0dGVkOl8uU1VCTUlUVEVEX09OX0RUVE0sc3Vi''@;'; put 'put ''bWl0dGVyOl8uU1VCTUlUVEVEX0JZX05NLHN1Ym1pdFJlYXNvbjpfLlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2lmKGEuc3VibWl0dGVyTGlzdD1mLGEuc3VibWl0RGF0YT1oLmZyb21zYXMsdHlwZW9mIGQ8InUiKXtjb25zdCBfPWEuc3VibWl0dGVyTGlzdC5maW5kSW5kZXgoVD0+VC50YWJs''@;'; put 'put ''ZUlkPT09ZCk7Xz4tMSYmYS5nZXREZXRhaWxzKGEuc3VibWl0dGVyTGlzdFtfXSxfKX19YS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJlZGl0b3JzL2dldHN1Ym1pdHMiLGgpfX0pKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcmVhZHlT''@;'; put 'put ''dWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT1hfSksdGhpcy5fYmFja1RvU3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdExpc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PSF0aGlzLnN1YlJlYWR5LHRoaXMu''@;'; put 'put ''ZGV0YWlsc09wZW49ITF9KX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9z''@;'; put 'put ''ZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoYmQpLHR0KHZsKSx0dChEcyksdHQoV2wpLHR0KG9hKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw''@;'; put 'put ''cC1zdWJtaXR0ZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQt''@;'; put 'put ''MTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJuby1zdWJtaXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hh''@;'; put 'put ''cGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1k''@;'; put 'put ''YXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImRhdGFn''@;'; put 'put ''cmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1zdGFydCJdLFszLCJu''@;'; put 'put ''Z01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFszLCJuZ1ZhbHVlIl0sWzEsImNlbnRlciIsMywiY2xyRGdQYWdlU2l6ZSJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInJvbGUiLCJ0b29sdGlwIiwxLCJyb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYXJv''@;'; put 'put ''dW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsInAtMCIsImQt''@;'; put 'put ''ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiZGl2IiwwKSxRZSgxLGJHZSwyLDEsImRpdiIsMSksUWUoMix5R2UsMiww''@;'; put 'put ''LCJkaXYiLDIpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIiwhZC5zdWJSZWFkeSksQ2UoMSksUmUoIm5nSWYiLGQuc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOlt1YyxaaSxsMSxjMSxNMCxCcyxPcyxXOCxUcCx0ZyxQRSxVOCxGRSxuZyxyZyxpZywkOCxvZyxCOCxrcCx6OCxrYSxKc2Vd''@;'; put 'put ''LHN0eWxlczpbIi5ub0JvcmRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBz''@;'; put 'put ''b2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vLXN1Ym1pdHRlZC10YWJsZXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSksY30pKCk7ZnVuY3Rpb24gd0dlKGMsbCl7MSZjJiYobWUoMCwiZGl2Iiwx''@;'; put 'put ''MikscXQoMSwiY2xyLWljb24iLDEzKSxtZSgyLCJoMyIsMTQpLE5lKDMsIlRoZXJlIGlzIG5vIGhpc3RvcnkgdG8gc2hvdyIpLHllKCkoKSl9ZnVuY3Rpb24gQ0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiYSIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25z''@;'; put 'put ''dCBoPVZlKCkuJGltcGxpY2l0LGY9VmUoKTtyZXR1cm4ganQoZi5nZXRUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSxOZSgxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7Q2UoMSksb3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIFNHZShjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIpKDEsImEiLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGp0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDIsIlZJRVciKSx5ZSgpLG1l''@;'; put 'put ''KDMsInNwYW4iKSxOZSg0LCIgLyAiKSx5ZSgpLG1lKDUsImEiLDE3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGp0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLE5lKDYsIkVESVQiKSx5ZSgpKCl9''@;'; put 'put ''fWZ1bmN0aW9uIE1HZShjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO0NlKDEpLG9yKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiB4R2UoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiw2KSxO''@;'; put 'put ''ZSgyKSx5ZSgpLG1lKDMsInRkIiw2KSxRZSg0LENHZSwyLDEsImEiLDE1KSxRZSg1LFNHZSw3LDAsImRpdiIsMTYpLFFlKDYsTUdlLDIsMSwic3BhbiIsMTYpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDtDZSgyKSxvcihhKSxDZSgyKSxSZSgibmdJZiIsZDwx''@;'; put 'put ''KSxDZSgxKSxSZSgibmdJZiIsZDwyJiZkPj0xKSxDZSgxKSxSZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIEVHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDIwKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBrR2UoYyxsKXsxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5l''@;'; put 'put ''KDIsIkxvYWRpbmcgaGlzdG9yeSIpLHllKCkoKSl9ZnVuY3Rpb24gQUdlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxOCksUWUoMSxFR2UsMiwwLCJzcGFuIiwxOSksUWUoMixrR2UsMywwLCJkaXYiLDE2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIWEubG9h''@;'; put 'put ''ZGVkKSxDZSgxKSxSZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gVEdlKGMsbCl7MSZjJiYobWUoMCwiaDMiLDI4KSxOZSgxLCJISVNUT1JZIikseWUoKSl9ZnVuY3Rpb24gREdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsMjkpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtD''@;'; put 'put ''ZSgxKSxncigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19Y29uc3QgSUdlPWZ1bmN0aW9uKGMsbCl7cmV0dXJue3JlamVjdGVkOmMs''@;'; put 'put ''YWNjZXB0ZWQ6bH19O2Z1bmN0aW9uIExHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kZy1yb3ciLDMzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLmdldEFwcHJJbmRleChmKSl9KSxtZSgxLCJjbHIt''@;'; put 'put ''ZGctY2VsbCIsMzQpKDIsImEiLDM1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKDMpLmdldEJhc2VUYWJsZShmLmJhc2V0YWJsZSkpfSksTmUoMykseWUoKSgpLG1lKDQsImNsci1kZy1jZWxsIiwzNiksTmUoNSkseWUoKSxtZSg2''@;'; put 'put ''LCJjbHItZGctY2VsbCIsMzQpLE5lKDcpLHllKCksbWUoOCwiY2xyLWRnLWNlbGwiLDM0KSxOZSg5KSx5ZSgpLG1lKDEwLCJjbHItZGctY2VsbCIsMzQpLE5lKDExKSx5ZSgpLG1lKDEyLCJjbHItZGctY2VsbCIsMzQpLE5lKDEzKSx5ZSgpLG1lKDE0LCJjbHItZGctY2VsbCIsMzcpKDE1LCJi''@;'; put 'put ''dXR0b24iLDM4KSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0O3JldHVybiBWZSgzKS5kb3dubG9hZChfLnRhYmxlSWQpLGp0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSkscXQoMTYsImNsci1pY29uIiwzOSkseWUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwu''@;'; put 'put ''JGltcGxpY2l0O0NlKDMpLG9yKGEuYmFzZXRhYmxlKSxDZSgxKSxSZSgibmdDbGFzcyIsUTIoNyxJR2UsIlJFSkVDVEVEIj09PWEuc3RhdHVzLCJBUFBST1ZFRCI9PT1hLnN0YXR1cykpLENlKDEpLG9yKGEuc3RhdHVzKSxDZSgyKSxvcihhLnN1Ym1pdHRlciksQ2UoMiksb3IoYS5zdWJtaXR0''@;'; put 'put ''ZWRSZWFzb24pLENlKDIpLG9yKGEuc3VibWl0dGVkKSxDZSgyKSxvcihhLnJldmlld2VkKX19ZnVuY3Rpb24gUkdlKGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLE5lKDIsIkJBU0VfVEFCTEUiKSx5ZSgpLG1lKDMsImNsci1kZy1j''@;'; put 'put ''b2x1bW4iLDMxKSxOZSg0LCJTVEFUVVMiKSx5ZSgpLG1lKDUsImNsci1kZy1jb2x1bW4iLDMxKSxOZSg2LCJTVUJNSVRURVIiKSx5ZSgpLG1lKDcsImNsci1kZy1jb2x1bW4iLDMxKSxOZSg4LCJTVUJNSVQgUkVBU09OIikseWUoKSxtZSg5LCJjbHItZGctY29sdW1uIiwzMSksTmUoMTAsIlNV''@;'; put 'put ''Qk1JVFRFRCIpLHllKCksbWUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxOZSgxMiwiQVBQUk9WRUQgLyBSRUpFQ1RFRCIpLHllKCksbWUoMTMsImNsci1kZy1jb2x1bW4iKSxOZSgxNCwiRE9XTkxPQUQiKSx5ZSgpLFFlKDE1LExHZSwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLHllKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgiY2xyRGdGaWVsZCIsImJhc2V0YWJsZSIpLENlKDIpLFJlKCJjbHJEZ0ZpZWxkIiwic3RhdHVzIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxDZSgyKSxSZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJlYXNvbiIpLENlKDIpLFJl''@;'; put 'put ''KCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksQ2UoMiksUmUoImNsckRnRmllbGQiLCJyZXZpZXdlZCIpLENlKDQpLFJlKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIE9HZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImJ1dHRvbiIsNDApLHh0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoMikubG9hZERhdGEoKSl9KSxOZSgxKSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtSZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksQ2UoMSksZ3IoIiBMb2FkICIsYS5yb3dzTGVmdFRvTG9hZCwiIG1vcmUgIil9fWZ1bmN0aW9u''@;'; put 'put ''IFBHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpLFFlKDIsVEdlLDIsMCwiaDMiLDIzKSxRZSgzLERHZSwyLDEsInAiLDI0KSx5ZSgpLFFlKDQsUkdlLDE2LDcsImNsci1kYXRhZ3JpZCIsMjUpLG1lKDUsImRpdiIsMjYpLFFlKDYsT0dlLDIsMiwiYnV0dG9uIiwy''@;'; put 'put ''NykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgyKSxSZSgibmdJZiIsYS5sb2FkZWQpLENlKDEpLFJlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixhLmxvYWRlZCksQ2UoMiksUmUoIm5n''@;'; put 'put ''SWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y29uc3QgRkdlPVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50OmFHZX0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDpKc2V9''@;'; put 'put ''LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDpRc2V9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDpRc2V9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlz''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1NlcnZpY2U9Xyx0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9w''@;'; put 'put ''ZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IHIxLlNBU2pzQ29uZmlnLHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10''@;'; put 'put ''aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldEJhc2VUYWJsZShh''@;'; put 'put ''KXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z2V0RWRpdFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nZXRBcHBySW5kZXgoYSl7Y29uc3QgZD10aGlzLmhpc3RvcnlBcnIuZmluZEluZGV4KGg9PmguVEFCTEVfSUQ9''@;'; put 'put ''PT1hLnRhYmxlSWQpO2Q+LTEmJih0aGlzLmFwcHJvdmVEYXRhPXRoaXMuaGlzdG9yeUFycltkXSx0aGlzLm9wZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgYT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhpc3RvcnkubGVuZ3RoLGQ9dGhpcy5oaXN0UGFyYW1zLkhJ''@;'; put 'put ''U1Q7cmV0dXJuIGE8PTA/MDphPmQ/ZDphfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyxfPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCtfKyIvP19wcm9ncmFt''@;'; put 'put ''PSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2ErIiZfY29udGV4dG5hbWU9Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBkPXtTVEFSVFJPVzphLmhpc3RQYXJh''@;'; put 'put ''bXMuSElTVCthLmhpc3RQYXJhbXMuU1RBUlRST1d9O2EubG9hZGluZ01vcmU9ITA7dHJ5e2xldCBmLGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0SGlzdG9yeShkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGhpc3RvcnkiKTthLmxvYWRpbmdNb3JlPSExLGEuaGlzdFBhcmFt''@;'; put 'put ''cz1oLmhpc3RwYXJhbXNbMF07Y29uc3QgXz1oLmZyb21zYXMuc2xpY2UoMCxhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCk7aWYoXy5sZW5ndGg+MCl7Y29uc3QgVD1fO2EuaGlzdG9yeUFycj1fLGY9T2JqZWN0LmtleXMoVFswXSksYS50YWJsZVRpdGxlcz1mO2xl''@;'; put 'put ''dCBXPV8ubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm57dGFibGVJZDppZS5UQUJMRV9JRCxzdWJtaXR0ZXI6aWUuU1VCTUlUVEVSLHN1Ym1pdHRlZFJlYXNvbjppZS5TVUJNSVRURURfUkVBU09OX1RYVCxzdWJtaXR0ZWQ6aWUuU1VCTUlUVEVELHN0YXR1czppZS5TVEFUVVMscmV2aWV3UmVhc29u''@;'; put 'put ''OmllLlJFVklFV19SRUFTT05fVFhULHJldmlld2VyOmllLlJFVklFV0VSLHJldmlld2VkOmllLlJFVklFV0VELG51bU9mQXBwcm92YWxzOmllLk5VTV9PRl9BUFBST1ZBTFNfUkVRVUlSRUQsYmFzZXRhYmxlOmllLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uVyksYS5sb2FkZWQ9''@;'; put 'put ''ITB9ZWxzZSBhLmxvYWRlZD0hMCwwPT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEubm9EYXRhPSEwKX1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10''@;'; put 'put ''aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmxvYWREYXRhKCl9KSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQoYmQpLHR0KHZsKSx0dChEcyksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''YXBwLWhpc3RvcnkiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6Nixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVy''@;'; put 'put ''IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRh''@;'; put 'put ''cmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsxLCJoLTcwdmgiLCJkLWZs''@;'; put 'put ''ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQt''@;'; put 'put ''MTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwibG9hZC1tb3Jl''@;'; put 'put ''IiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJkYXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0sWzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0s''@;'; put 'put ''WzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRu''@;'; put 'put ''IiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJkaXYiLDApLFFlKDEsd0dlLDQsMCwiZGl2IiwxKSxtZSgy''@;'; put 'put ''LCJjbHItbW9kYWwiLDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9wZW5Nb2RhbD1mfSksbWUoMywiaDQiLDMpLE5lKDQsIkFwcHJvdmFsIGRldGFpbHMiKSx5ZSgpLG1lKDUsImRpdiIsNCkoNiwidGFibGUiLDUpKDcsInRoZWFkIikoOCwidHIiKSg5''@;'; put 'put ''LCJ0aCIsNiksTmUoMTAsIk5hbWUiKSx5ZSgpLG1lKDExLCJ0aCIsNiksTmUoMTIsIlZhbHVlIikseWUoKSgpKCksbWUoMTMsInRib2R5IiksUWUoMTQseEdlLDcsNCwidHIiLDcpLHllKCkoKSgpLG1lKDE1LCJkaXYiLDgpKDE2LCJidXR0b24iLDkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZC5vcGVuTW9kYWw9ITF9KSxOZSgxNywiIE9LICIpLHllKCkoKSgpLFFlKDE4LEFHZSwzLDIsImRpdiIsMTApLFFlKDE5LFBHZSw3LDQsImRpdiIsMTEpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0lmIixkLm5vRGF0YSksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5vcGVuTW9k''@;'; put 'put ''YWwpKCJjbHJNb2RhbFNpemUiLCJ4bCIpLENlKDEyKSxSZSgibmdGb3JPZiIsZC50YWJsZVRpdGxlcyksQ2UoNCksUmUoIm5nSWYiLCFkLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFkLm5vRGF0YSYmZC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt1Yyx4cyxaaSxXOCxUcCx0ZyxVOCxuZyxy''@;'; put 'put ''ZyxpZywkOCxvZyxCOCxrcCx6OCxrYSxvdSxzdSxadSxkaF0sc3R5bGVzOlsiLnJlamVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZjgzMTI2O2ZvbnQtd2VpZ2h0OjcwMH0uYWNjZXB0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfS5o''@;'; put 'put ''c0NlbGxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudDthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50O3BhZGRpbmc6N3B4fS5idENlbGxbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LnZlckNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjt3b3JkLWJyZWFrOmJyZWFrLWFsbH0ubG9hZC1tb3Jl''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo5MHB4fSNub0RhdGFDb250YWluZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSksY30pKCl9XTtsZXQgSEdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLGRjLmZvckNoaWxkKEZHZSksZGNdfSksY30pKCksTkdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD12aSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9bWkoe2ltcG9ydHM6W29vLCRsLEhHZSxfdSxfNy5mb3JSb290KCksQzIsVjddfSksY30pKCksVkdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcmV2aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5j''@;'; put 'put ''dGlvbihhLGQpezEmYSYmcXQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2ZwXX0pLGN9KSgpO2Z1bmN0aW9uIEJHZShjLGwpezEmYyYmKG1lKDAsInNwYW4iLDYpLE5lKDEsIiBMb2FkaW5nLi4uICIpLHllKCkpfWZ1bmN0aW9uIGpHZShjLGwpezEmYyYmKG1lKDAsImRpdiIp''@;'; put 'put ''KDEsImgzIiksTmUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSx5ZSgpKCkpfWZ1bmN0aW9uIHpHZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsNCksUWUoMSxCR2UsMiwwLCJzcGFuIiw1KSxRZSgyLGpHZSwzLDAsImRpdiIsMykseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMSks''@;'; put 'put ''UmUoIm5nSWYiLCFhLmxvYWRlZCksQ2UoMSksUmUoIm5nSWYiLCFhLmxvYWRlZCl9fWNvbnN0IFVHZT1mdW5jdGlvbihjLGwpe3JldHVybntyZWplY3RlZDpjLGFjY2VwdGVkOmx9fTtmdW5jdGlvbiBaR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiKSgxLCJkaXYiLDcp''@;'; put 'put ''KDIsImRpdiIsOCkoMywiaDQiLDkpLE5lKDQsIlN0YWdlZCBEYXRhIikseWUoKSgpKCksbWUoNSwiZGl2IiwxMCkoNiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4KSxOZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLHllKCkoKSxtZSgxMCwiZGl2IikoMTEsInNwYW4iKSxO''@;'; put 'put ''ZSgxMiwiVGFibGUgSWQ6IikseWUoKSxtZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxOZSgxNSkseWUoKSgpKCksbWUoMTYsImRpdiIpKDE3LCJzcGFuIiksTmUoMTgsIkJhc2UgVGFibGU6IikseWUoKSxtZSgxOSwiYSIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoVmUoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLE5lKDIwKSx5ZSgpKCksbWUoMjEsImRpdiIpKDIyLCJzcGFuIiksTmUoMjMsIlN1Ym1pdCBEYXRlOiIpLHllKCksbWUoMjQsInNwYW4iLDE0KSxOZSgyNSkseWUoKSgpLG1lKDI2LCJkaXYiKSgyNywic3BhbiIpLE5lKDI4LCJSZXZpZXcg''@;'; put 'put ''U3RhdHVzOiIpLHllKCksbWUoMjksInNwYW4iLDE1KSxOZSgzMCkseWUoKSgpKCksbWUoMzEsImRpdiIsMTYpKDMyLCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxOZSgzNCwiQWN0aW9ucyIpLHllKCkoKSxtZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSx4dCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxOZSgzOCwiIEdvIHRvIGJhc2UgdGFibGUgc2NyZWVuICIpLHllKCksbWUoMzksImJ1dHRvbiIsMjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5hcHBy''@;'; put 'put ''b3ZlVGFibGVTY3JlZW4oKSl9KSxOZSg0MCwiIEdvIHRvIGFwcHJvdmFscyBzY3JlZW4gIikseWUoKSxtZSg0MSwiYnV0dG9uIiwyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmdvQmFjaygpKX0pLE5lKDQyLCIgR28gYmFjayB0byBlZGl0b3IgIikseWUo''@;'; put 'put ''KSxtZSg0MywiYnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKTtyZXR1cm4ganQoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxxdCg0NCwiY2xyLWljb24iLDIzKSx5ZSgpKCko''@;'; put 'put ''KSgpKCksbWUoNDUsImRpdiIsMjQpLHF0KDQ2LCJob3QtdGFibGUiLDI1KSx5ZSgpLHF0KDQ3LCJkaXYiLDI2KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDE1KSxncigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiIiksQ2UoNSks''@;'; put 'put ''Z3IoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQkFTRV9UQUJMRSwiICIpLENlKDUpLGdyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksQ2UoNCksUmUoIm5nQ2xhc3MiLFEyKDEz''@;'; put 'put ''LFVHZSwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCksIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSksQ2UoMSksZ3IoIiAi''@;'; put 'put ''LG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIpLENlKDkpLFJlKCJkaXNhYmxlZCIsIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpfHwiUkVKRUNU''@;'; put 'put ''RUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpLENlKDcpLFJlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMp''@;'; put 'put ''KCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpfX1jb25zdCBZR2U9W3twYXRoOiI6dGFibGVJZCIsY29tcG9uZW50OigoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPV8sdGhpcy5zYXNTZXJ2aWNlPVQsdGhpcy5sb2FkZWQ9ITEsdGhpcy5s''@;'; put 'put ''aWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''LnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wfX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQv''@;'; put 'put ''Iit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0duLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5C''@;'; put 'put ''QVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2ZpbGVzLyIrdGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQg''@;'; put 'put ''ZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2MsXz10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrXysiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFi''@;'; put 'put ''bGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2lmKGEubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWR9KSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxl''@;'; put 'put ''SWQ8InUiKXthLnRhYmxlX2lkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO3RyeXtsZXQgZD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEudGFibGVfaWQpO2lmKCFkfHwhZC5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5''@;'; put 'put ''IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTthLnRhYmxlRGV0YWlscz1kLmpzcGFyYW1zWzBdfWNhdGNoKGQpe2xldCBoPXt9O2QuTUVTU0FHRT9oPWQ6aC5NRVNTQUdFPWQsYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsaCl9dHJ5''@;'; put 'put ''e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShhLnRhYmxlX2lkKTtpZighZHx8IWQuc3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBoPWQuc3RhZ2V0YWJsZVswXSxmPVtd''@;'; put 'put ''LF89W107Zm9yKGxldCBXIGluIGgpaCYmZi5wdXNoKFcpO2ZvcihsZXQgVz0wO1c8Zi5sZW5ndGg7VysrKV8ucHVzaCh7ZGF0YTpmW1ddfSk7bGV0IFQ9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTthLmhvdFRhYmxlLmRhdGE9ZC5zdGFnZXRhYmxlLGEuaG90VGFibGUuY29sSGVh''@;'; put 'put ''ZGVycz1mLGEuaG90VGFibGUuY29sdW1ucz1fLGEuaG90VGFibGUuY2VsbHM9VCxhLmxvYWRlZD0hMCxhLnNldEZvY3VzKCl9Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFfHwoaC5NRVNTQUdFPWQpLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXVkaXRvcnMvZ2V0c3Rh''@;'; put 'put ''Z2V0YWJsZSIsaCksYS5sb2FkZWQ9ITF9fX0pKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhcHByb3ZhbC1idG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKHR0KEMwKSx0dChiZCksdHQodmwpLHR0KERzKSx0dChXbCksdHQob2EpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN0YWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sx''@;'; put 'put ''LCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImgtODB2aCIsImQtZmxleCIs''@;'; put 'put ''Imp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLXRpdGxlIiwidGV4dC1jZW50''@;'; put 'put ''ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9jayIsImNsci1jb2wtbWQtNiJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwibXQtMTAiXSxbMSwibXQtMTAiLDMsIm5nQ2xh''@;'; put 'put ''c3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2FyZC1ibG9jayJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJkaXNhYmxlZCIsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIs''@;'; put 'put ''InRleHQtY2VudGVyIiwibXQtMjAiLCJtaW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJjYXJkLWJsb2NrIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVt''@;'; put 'put ''bnMiLCJtYXhSb3dzIiwiaGVpZ2h0IiwibGljZW5zZUtleSIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxRZSgyLHpHZSwzLDIs''@;'; put 'put ''ImRpdiIsMiksUWUoMyxaR2UsNDgsMTYsImRpdiIsMykseWUoKSgpKSwyJmEmJihDZSgyKSxSZSgibmdJZiIsIWQubG9hZGVkKSxDZSgxKSxSZSgibmdJZiIsZC5sb2FkZWQpKX0sZGVwZW5kZW5jaWVzOlt1YyxaaSxrYSx4eV0sc3R5bGVzOlsiLnJlamVjdGVkW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXtjb2xvcjojZjgzMTI2O2ZvbnQtd2VpZ2h0OjcwMH0uYWNjZXB0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMzZmM0MjQ7Zm9udC13ZWlnaHQ6NzAwfS5iYXNlVGFibGVMaW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tdG9wOjEwcHg7Y29sb3I6IzAw''@;'; put 'put ''N2NiYn0iXX0pLGN9KSgpfV07bGV0IFdHZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvbyxfdSxkYy5mb3JDaGlsZChZR2UpLF83''@;'; put 'put ''LmZvclJvb3QoKV19KSxjfSkoKTtmdW5jdGlvbiBHR2UoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw2KSxOZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFsdWUu''@;'; put 'put ''dmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uICRHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gcUdlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIFN0YWdlIHJvd3MgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5saWNlbmNlU3RhdGUudmFs''@;'; put 'put ''dWUuc3RhZ2Vfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gS0dlKGMsbCl7aWYoMSZjJiYobWUoMCwicCIsNiksTmUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0ZS52''@;'; put 'put ''YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIFhHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2VuY2VTdGF0''@;'; put 'put ''ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIEpHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBUYWJsZXMgaW4gbGlicmFyeSBsaW1pdDogIiksbWUoMiwic3BhbiIsNyksTmUoMykseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgzKSxvcihhLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIFFHZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLG1lKDIsInNwYW4iLDcpLE5lKDMpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksb3IoYS5s''@;'; put 'put ''aWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIGUkZShjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDYpLE5lKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSxtZSgyLCJzcGFuIiw3KSxOZSgzKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDMpLG9yKGEubGlj''@;'; put 'put ''ZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiB0JGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDE3KSxOZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksbWUoMiwiYnV0dG9uIiwxOCkseHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBCdChhKSxqdChWZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxOZSgzLCIgUkVGUkVTSCAiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLFJlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9uIG4kZShjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1WbigpO0JyKDApLFFlKDEsdCRlLDQsMSwiZGl2IiwxNiksbWUoMiwiZGl2IiwxNyksTmUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLG1lKDQsImJ1dHRvbiIsMTgpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5yZWZyZXNoRGF0YUNhdGFs''@;'; put 'put ''b2coKSl9KSxOZSg1LCIgUkVGUkVTSCAiKSx5ZSgpKCksbWUoNiwiZGl2IiwxNyksTmUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIiksbWUoOCwiYnV0dG9uIiwxOSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigp''@;'; put 'put ''KX0pLE5lKDksIiBET1dOTE9BRCAiKSx5ZSgpKCksbWUoMTAsImRpdiIsMTcpLE5lKDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLG1lKDEyLCJidXR0b24iLDIwKSxOZSgxMywiIFVQREFURSAiKSx5ZSgpKCksVXIoKX1pZigyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsIlNB''@;'; put 'put ''UzkiPT09YS5zZXJ2ZXJUeXBlKSxDZSgzKSxSZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCByJGU9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9''@;'; put 'put ''ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xMC4xIixhcHBWZXJzaW9uOiJ2Ni41LjIiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDpJRygpKHBhcnNlSW50KCIxNzA3MjQ1NzIzNTE4IikpLmZvcm1hdCgiREQtTU1NLVlZWVkg''@;'; put 'put ''SEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNlPSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5m''@;'; put 'put ''aW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgp''@;'; put 'put ''LHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLmVudmlyb25tZW50SW5mbyYmKHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBvbmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpfW5n''@;'; put 'put ''T25Jbml0KCl7fWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIr''@;'; put 'put ''aCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlz''@;'; put 'put ''LnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hE''@;'; put 'put ''YXRhTGluZWFnZSgpe3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9''@;'; put 'put ''ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoYSk6YX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykodHQoVXgpLHR0KG9hKSx0dChDMCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3lzdGVtIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250''@;'; put 'put ''YWluZXIiXSxkZWNsczoxMzAsdmFyczozNCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsInAtMTAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwidGV4dC1jZW50''@;'; put 'put ''ZXIiLCJtLTAiXSxbMSwidy0xMDAiLCJsaWdodCJdLFsxLCJjb250ZW50LWJveCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJzeXMtaW5mbyIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbGctcm93Il0s''@;'; put 'put ''WzEsIm0tMCJdLFsxLCJkYXJrIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctY2VudGVyIl0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsT3BlbkNoYW5nZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJt''@;'; put 'put ''b2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJi''@;'; put 'put ''dG4tc20iLDMsImNsckxvYWRpbmciLCJjbGljayJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJiht''@;'; put 'put ''ZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLE5lKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLHllKCkscXQoNCwiaHIiLDMpLG1lKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksTmUoOSwiRW52aXJvbm1lbnQgRGV0YWlscyAiKSxxdCgxMCwic3BhbiIs''@;'; put 'put ''NykseWUoKSxtZSgxMSwicCIsNiksTmUoMTIsIiBTWVNTSVRFOiAiKSxtZSgxMywic3BhbiIsNyksTmUoMTQpLHllKCkoKSxtZSgxNSwicCIsNiksTmUoMTYsIiBTWVNTQ1BMOiAiKSxtZSgxNywic3BhbiIsNyksTmUoMTgpLHllKCkoKSxtZSgxOSwicCIsNiksTmUoMjAsIiBTWVNUQ1BJUEhP''@;'; put 'put ''U1ROQU1FOiAiKSxtZSgyMSwic3BhbiIsNyksTmUoMjIpLHllKCkoKSxtZSgyMywicCIsNiksTmUoMjQsIiBTWVNWTE9ORzogIiksbWUoMjUsInNwYW4iLDcpLE5lKDI2KSx5ZSgpKCksbWUoMjcsInAiLDYpLE5lKDI4LCIgTUVNU0laRTogIiksbWUoMjksInNwYW4iLDcpLE5lKDMwKSx5ZSgp''@;'; put 'put ''KCksbWUoMzEsInAiLDYpLE5lKDMyLCIgU1lTUFJPQ0VTU01PREU6ICIpLG1lKDMzLCJzcGFuIiw3KSxOZSgzNCkseWUoKSgpLG1lKDM1LCJwIiw2KSxOZSgzNiwiIFNZU0hPU1ROQU1FOiAiKSxtZSgzNywic3BhbiIsNyksTmUoMzgpLHllKCkoKSxtZSgzOSwicCIsNiksTmUoNDAsIiBTWVNI''@;'; put 'put ''T1NUSU5GT0xPTkc6ICIpLG1lKDQxLCJzcGFuIiw3KSxOZSg0MikseWUoKSgpLG1lKDQzLCJwIiw2KSxOZSg0NCwiIFNZU0VOQ09ESU5HOiAiKSxtZSg0NSwic3BhbiIsNyksTmUoNDYpLHllKCkoKSxtZSg0NywicCIsNiksTmUoNDgsIiBBVVRPRVhFQzogIiksbWUoNDksInNwYW4iLDcpLE5l''@;'; put 'put ''KDUwKSx5ZSgpKCksbWUoNTEsInAiLDYpLE5lKDUyLCIgREMgQURNSU4gR1JPVVA6ICIpLG1lKDUzLCJzcGFuIiw3KSxOZSg1NCkseWUoKSgpKCksbWUoNTUsImRpdiIsOCkoNTYsImRpdiIpKDU3LCJoNiIsNiksTmUoNTgsIiBEYXRhIENvbnRyb2xsZXIgRGV0YWlscyAiKSxxdCg1OSwic3Bh''@;'; put 'put ''biIsNykseWUoKSxtZSg2MCwicCIsNiksTmUoNjEsIiBBcHBsaWNhdGlvbiB2ZXJzaW9uOiAiKSxtZSg2Miwic3BhbiIsNyksTmUoNjMpLHllKCkoKSxtZSg2NCwicCIsNiksTmUoNjUsIiBCdWlsZCB0aW1lc3RhbXA6ICIpLG1lKDY2LCJzcGFuIiw3KSxOZSg2NykseWUoKSgpLG1lKDY4LCJw''@;'; put 'put ''Iiw2KSxOZSg2OSwiIEFkYXB0ZXIgdmVyc2lvbjogIiksbWUoNzAsInNwYW4iLDcpLE5lKDcxKSx5ZSgpKCksbWUoNzIsInAiLDYpLE5lKDczLCIgSFRUUDogIiksbWUoNzQsInNwYW4iLDcpLE5lKDc1KSx5ZSgpKCkoKSgpLG1lKDc2LCJkaXYiKSg3NywiaDYiLDYpLE5lKDc4LCJMaWNlbmNl''@;'; put 'put ''IGRldGFpbHMgIikscXQoNzksInNwYW4iLDcpLHllKCksbWUoODAsInAiLDYpLE5lKDgxLCIgVmFsaWQgdW50aWw6ICIpLG1lKDgyLCJzcGFuIiw3KSxOZSg4MykseWUoKSgpLG1lKDg0LCJwIiw2KSxOZSg4NSwiIFVzZXJzIGFsbG93ZWQ6ICIpLG1lKDg2LCJzcGFuIiw3KSxOZSg4NykseWUo''@;'; put 'put ''KSgpLG1lKDg4LCJwIiw2KSxOZSg4OSwiIFNpdGUgSURzOiAiKSxtZSg5MCwic3BhbiIsNyksTmUoOTEpLHllKCkoKSxtZSg5MiwicCIsNiksTmUoOTMsIiBGcmVlIFRpZXI6ICIpLG1lKDk0LCJzcGFuIiw3KSxOZSg5NSkseWUoKSgpLFFlKDk2LEdHZSw0LDEsInAiLDkpLFFlKDk3LCRHZSw0''@;'; put 'put ''LDEsInAiLDkpLFFlKDk4LHFHZSw0LDEsInAiLDkpLFFlKDk5LEtHZSw0LDEsInAiLDkpLFFlKDEwMCxYR2UsNCwxLCJwIiw5KSxRZSgxMDEsSkdlLDQsMSwicCIsOSksUWUoMTAyLFFHZSw0LDEsInAiLDkpLFFlKDEwMyxlJGUsNCwxLCJwIiw5KSxtZSgxMDQsInAiLDYpLE5lKDEwNSwiIFZp''@;'; put 'put ''ZXdib3hlczogIiksbWUoMTA2LCJzcGFuIiw3KSxOZSgxMDcpLHllKCkoKSxtZSgxMDgsInAiLDYpLE5lKDEwOSwiIEZpbGUgVXBsb2FkOiAiKSxtZSgxMTAsInNwYW4iLDcpLE5lKDExMSkseWUoKSgpLG1lKDExMiwicCIsNiksTmUoMTEzLCIgRWRpdCByZWNvcmQ6ICIpLG1lKDExNCwic3Bh''@;'; put 'put ''biIsNyksTmUoMTE1KSx5ZSgpKCksbWUoMTE2LCJwIiw2KSxOZSgxMTcsIiBBZGQgcmVjb3JkOiAiKSxtZSgxMTgsInNwYW4iLDcpLE5lKDExOSkseWUoKSgpKCkoKSxxdCgxMjAsImhyIiwzKSxRZSgxMjEsbiRlLDE0LDIsIm5nLWNvbnRhaW5lciIsMTApLHllKCkoKSgpLG1lKDEyMiwiY2xy''@;'; put 'put ''LW1vZGFsIiwxMSkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmVzcG9uc2VNb2RhbD1mfSksbWUoMTIzLCJoMyIsMTIpLE5lKDEyNCwiUmVzcG9uc2UiKSx5ZSgpLG1lKDEyNSwiZGl2IiwxMyksTmUoMTI2KSx5ZSgpLG1lKDEyNywiZGl2IiwxNCkoMTI4''@;'; put 'put ''LCJidXR0b24iLDE1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucmVzcG9uc2VNb2RhbD0hMX0pLE5lKDEyOSwiIE9rICIpLHllKCkoKSgpKSwyJmEmJihDZSgxNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNTSVRFKSxDZSg0''@;'; put 'put ''KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1NDUEwpLENlKDQpLG9yKG51bGw9PWQuZW52aXJvbm1lbnRJbmZvP251bGw6ZC5lbnZpcm9ubWVudEluZm8uU1lTVENQSVBIT1NUTkFNRSksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudElu''@;'; put 'put ''Zm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNWTE9ORyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5NRU1TSVpFKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU1BST0NF''@;'; put 'put ''U1NNT0RFKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU0hPU1ROQU1FKSxDZSg0KSxvcihudWxsPT1kLmVudmlyb25tZW50SW5mbz9udWxsOmQuZW52aXJvbm1lbnRJbmZvLlNZU0hPU1RJTkZPTE9ORyksQ2UoNCksb3IobnVsbD09''@;'; put 'put ''ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksQ2UoNCksb3IobnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmly''@;'; put 'put ''b25tZW50SW5mby5EQ19BRE1JTl9HUk9VUCksQ2UoOSksb3IoZC5hcHBJbmZvLmFwcFZlcnNpb24pLENlKDQpLG9yKGQuYXBwSW5mby5idWlsZFRpbWVzdGFtcCksQ2UoNCksb3IoZC5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxDZSg0KSxvcihkLmh0dHA/IllFUyI6Ik5PIiksQ2UoOCksb3Io''@;'; put 'put ''bnVsbD09ZC5saWNlbmNlSW5mbz9udWxsOmQubGljZW5jZUluZm8udmFsaWRfdW50aWwpLENlKDQpLG9yKG51bGw9PWQubGljZW5jZUluZm8/bnVsbDpkLmxpY2VuY2VJbmZvLnVzZXJzX2FsbG93ZWQpLENlKDQpLG9yKG51bGw9PWQubGljZW5jZUluZm8/bnVsbDpkLmxpY2VuY2VJbmZvLnNp''@;'; put 'put ''dGVfaWRfbXVsdGlwbGUpLENlKDQpLG9yKG51bGwhPWQubGljZW5jZUluZm8mJmQubGljZW5jZUluZm8uZGVtbz8iWUVTIjoiTk8iKSxDZSgxKSxSZSgibmdJZiIsZC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixk''@;'; put 'put ''LmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0''@;'; put 'put ''b3J5X3Jvd3NfYWxsb3dlZCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWQuSW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCE9PWQu''@;'; put 'put ''SW5maW5pdHkpLENlKDEpLFJlKCJuZ0lmIixkLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09ZC5JbmZpbml0eSksQ2UoMSksUmUoIm5nSWYiLGQubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQhPT1kLkluZmluaXR5KSxDZSg0KSxvcihkLmxpY2VuY2VT''@;'; put 'put ''dGF0ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLENlKDQpLG9yKGQubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWQ/IllFUyI6Ik5PIiksQ2UoNCksb3IoZC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZD8iWUVTIjoiTk8iKSxDZSg0KSxvcihkLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS5hZGRSZWNvcmQ/IllFUyI6Ik5PIiksQ2UoMiksUmUoIm5nSWYiLDE9PT0obnVsbD09ZC5lbnZpcm9ubWVudEluZm8/bnVsbDpkLmVudmlyb25tZW50SW5mby5JU0FETUlOKSksQ2UoMSksUmUoImNsck1vZGFsT3BlbiIsZC5yZXNwb25zZU1vZGFsKSxDZSg0KSxncigiICIsZC5yZXNwb25z''@;'; put 'put ''ZSwiICIpKX0sZGVwZW5kZW5jaWVzOltaaSxCdSxvdSxzdSxadSxkaF0sc3R5bGVzOlsiLmNvbnRlbnQtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MTI4OXB4fS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gPiBkaXZbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MX0uc3lz''@;'; put 'put ''LWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQoMil7bWFyZ2luOjAgMzBweH0uYWRtaW4tYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyO3BhZGRpbmc6NXB4IDEwcHg7Ym9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyOjFweCBzb2xpZCAjZGVkZWRlO21hcmdpbi1ib3R0b206NXB4fS5hZG1pbi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6MTAycHh9LmRh''@;'; put 'put ''cmtbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiMwMDB9QG1lZGlhIChtYXgtd2lkdGg6IDk5M3B4KXsuc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQoMil7bWFyZ2luOjB9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IGRpdltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHggMH19Il19KSxjfSkoKX1dO2xldCBpJGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7''@;'; put 'put ''aW1wb3J0czpbZGMuZm9yQ2hpbGQociRlKSxkY119KSxjfSkoKSxvJGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb28saSRlLF91''@;'; put 'put ''XX0pLGN9KSgpO2Z1bmN0aW9uIHMkZShjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBhJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsMTMpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmdy''@;'; put 'put ''b3VwU2VhcmNoPSIiLGp0KGguZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBsJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gQnQoYSksanQoVmUoKS5ncm91cFNlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxzJGUsMSwwLCJjbHItaWNvbiIsMTApLFFlKDUsYSRlLDEsMCwiY2xyLWljb24iLDExKSx5''@;'; put 'put ''ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gYyRlKGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmdyb3VwT25DbGljayhoKSl9KSxtZSgxLCJwIiwxNikscXQoMiwiY2xyLWljb24iLDE3KSxOZSgzKSx5ZSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtkcigidGFibGUtYWN0aXZlIixhLkdST1VQVVJJPT09ZC5ncm91cFVyaSksQ2UoMyksZ3IoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIHUkZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsYyRlLDQsMywiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIsMTQpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZCRlKGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24g''@;'; put 'put ''aCRlKGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI1KSg2LCJwIiwyNikoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLE5lKDEyKSx5ZSgp''@;'; put 'put ''KCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoOCksb3IoYS5ncm91cE5hbWUpLENlKDQpLG9yKGEuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24iKX19ZnVuY3Rpb24gZiRlKGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSx5ZSgpKX1m''@;'; put 'put ''dW5jdGlvbiBwJGUoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJ0ZCIsMzEpKDIsImIiKSxOZSgzLCJOQU1FIikseWUoKSgpLG1lKDQsInRkIiwzMSkoNSwiYiIpLE5lKDYsIkVNQUlMIikseWUoKSgpLG1lKDcsInRkIiwzMSkoOCwiYiIpLE5lKDksIkNSRUFURUQiKSx5ZSgpKCksbWUoMTAsInRk''@;'; put 'put ''IiwzMikoMTEsImIiKSxOZSgxMiwiVVBEQVRFRCIpLHllKCkoKSxVcigpKX1mdW5jdGlvbiBnJGUoYyxsKXsxJmMmJihCcigwKSxtZSgxLCJ0ZCIsMzEpKDIsImIiKSxOZSgzLCJJRCIpLHllKCkoKSxtZSg0LCJ0ZCIsMzEpKDUsImIiKSxOZSg2LCJESVNQTEFZIE5BTUUiKSx5ZSgpKCksbWUo''@;'; put 'put ''NywidGQiLDMxKSg4LCJiIiksTmUoOSwiVVNFUiBOQU1FIikseWUoKSgpLFVyKCkpfWZ1bmN0aW9uIG0kZShjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsInRkIiwzMiksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzIpLE5lKDQpLHllKCksbWUoNSwidGQiLDMyKSxOZSg2KSx5ZSgpLG1lKDcsInRk''@;'; put 'put ''IiwzMiksTmUoOCkseWUoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMiksb3IoYS5NRU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHYkZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKEJyKDApLG1lKDEsInRkIiwzMiksTmUoMikseWUoKSxtZSgzLCJ0ZCIsMzIpLE5lKDQpLHllKCksbWUoNSwidGQiLDMyKSxOZSg2KSx5ZSgpLFVyKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtDZSgyKSxvcihhLklEKSxDZSgyKSxvcihhLkRJU1BMQVlOQU1FKSxDZSgy''@;'; put 'put ''KSxvcihhLlVTRVJOQU1FKX19ZnVuY3Rpb24gXyRlKGMsbCl7aWYoMSZjJiYobWUoMCwidHIiLDMzKSxRZSgxLG0kZSw5LDQsIm5nLWNvbnRhaW5lciIsNSksUWUoMix2JGUsNywzLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDQpO1JlKCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhhLlVSSU1FTXx8YS5JRCkpLENlKDEpLFJlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXNqcyl9fWZ1bmN0aW9uIGIk''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpLFFlKDMscCRlLDEzLDAsIm5nLWNvbnRhaW5lciIsNSksUWUoNCxnJGUsMTAsMCwibmctY29udGFpbmVyIiw1KSx5ZSgpKCksbWUoNSwidGJvZHkiKSxRZSg2LF8kZSwzLDMsInRyIiwzMCkseWUoKSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMyksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxDZSgyKSxSZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlv''@;'; put 'put ''biB5JGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJoMyIpLE5lKDIpLHllKCksUWUoMyxmJGUsMiwwLCJoNSIsNSksbWUoNCwiZGl2IiwyNyksUWUoNSxiJGUsNywzLCJ0YWJsZSIsMjgpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJNRU1CRVJTICgiLGEuZ3Jv''@;'; put 'put ''dXBNZW1iZXJDb3VudCwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiB3JGUoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEMkZShjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMykoMSwidGQiLDMyKSxOZSgyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxDZSgyKSxvcihhLk1FTUJFUk5BTUUp''@;'; put 'put ''fX1mdW5jdGlvbiBTJGUoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxOZSg1KSx5ZSgpKCkoKSgpLG1lKDYsInRib2R5IiksUWUoNyxDJGUsMywyLCJ0ciIsMzApLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDUp''@;'; put 'put ''LGdyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLENlKDIpLFJlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIE0kZShjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxRZSgzLHckZSwyLDAsImg1Iiw1KSxtZSg0LCJkaXYi''@;'; put 'put ''LDI3KSxRZSg1LFMkZSw4LDIsInRhYmxlIiwyOCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiksb3IoYS5ncm91cE5hbWUpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlv''@;'; put 'put ''biB4JGUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLGgkZSwxMywyLCJkaXYiLDIwKSxtZSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSg0LCJkaXYiLDIzKSxRZSg1LHkkZSw2LDMsImRpdiIsNSksUWUoNixNJGUsNiwzLCJkaXYiLDUpLHF0KDcsImJyIikseWUoKSgpKCkoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVZlKCk7Q2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxDZSg0KSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzVml5YSl9fWxldCBlYWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8pe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9Xyx0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFy''@;'; put 'put ''YW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBl''@;'; put 'put ''PVVjLkQsdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdP''@;'; put 'put ''bkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkp''@;'; put 'put ''LEduLnVzZXJuYXYuZ3JvdXBMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUduLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9R24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUduLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAs''@;'; put 'put ''dGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0''@;'; put 'put ''ZW1zLm1hcChmPT4oe0dST1VQVVJJOmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxHbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91''@;'; put 'put ''cHMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmdyb3VwcyxHbi51c2VybmF2Lmdyb3VwTGlzdD1hLmdyb3Vwc30pKToodGhpcy5ncm91cHM9R24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3VwU2VhcmNoKSx0''@;'; put 'put ''aGlzLnBhcmFtUHJlc2VudCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrdGhpcy5wYXJhbVVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRp''@;'; put 'put ''b24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ9SlNPTi5wYXJzZShhKTt0aGlzLmxvYWRpbmc9ITE7bGV0IGg9ZC5pdGVtcy5tYXAoZj0+KHtNRU1CRVJOQU1FOmYubmFtZSxNRU1CRVJJRDpmLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPWgsdGhpcy5ncm91cE1l''@;'; put 'put ''bWJlckNvdW50PWgubGVuZ3RoLHRoaXMuZ3JvdXBVcmk9dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOnRoaXMucGFyYW1VUkl9XX0p''@;'; put 'put ''LnRoZW4oZD0+e3RoaXMuZ3JvdXBNZW1iZXJzPWQuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5zYXNtZW1iZXJzLmxlbmd0aCx2b2lkIDAhPT1kLnNhc21lbWJlcnNbMF0mJih0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1kLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0''@;'; put 'put ''aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuc2FzbWVtYmVyc1swXS5HUk9VUE5BTUUsdGhpcy5ncm91cERlc2M9ZC5zYXNtZW1iZXJzWzBdLkdST1VQREVTQyx0aGlzLmdyb3VwTmFtZXx8KHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkkpKX0pKSl9Z3JvdXBMaXN0T25GaWx0ZXIo''@;'; put 'put ''KXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZ3JvdXBzLHRoaXMuZ3JvdXBTZWFyY2gsIkdST1VQTkFNRSIpLEduLnVzZXJuYXYuZ3JvdXBTZWFyY2g9dGhpcy5ncm91cFNlYXJjaH1ncm91cE9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91''@;'; put 'put ''dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpOmQrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK2EuR1JPVVBVUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy5s''@;'; put 'put ''b2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQztsZXQgXz1mLml0ZW1zLm1hcChUPT4oe01FTUJFUk5BTUU6VC5uYW1lLE1FTUJFUklEOlQuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9''@;'; put 'put ''Xyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9Xy5sZW5ndGh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6YS5HUk9VUFVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9V''@;'; put 'put ''UFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQyx0aGlzLmdyb3VwTWVtYmVycz1mLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuc2FzbWVtYmVycy5sZW5ndGh9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykodHQob2EpLHR0KEFjKSx0dChEcyksdHQoSmQpLHR0KFdsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwi''@;'; put 'put ''c2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUt''@;'; put 'put ''c2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgR3JvdXBzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxb''@;'; put 'put ''InNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0t''@;'; put 'put ''MCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXJzIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAt''@;'; put 'put ''ZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJM''@;'; put 'put ''aW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwiY2xyLXRyZWUiKSxRZSgyLGwkZSw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFl''@;'; put 'put ''KDMsdSRlLDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxRZSg1LGQkZSwzLDAsImRpdiIsNCksUWUoNix4JGUsOCwzLCJkaXYiLDUpLHllKCkpLDImYSYmKENlKDIpLFJlKCJuZ0lmIixkLmdyb3VwcyksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZ3JvdXBzKSxDZSgy''@;'; put 'put ''KSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5ncm91cE1lbWJlcnMmJiFkLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxXYSxCcyxPcyxkZCxnMSxrYSxmMSxuM10sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWln''@;'; put 'put ''aHQ6MTAwJX0uZ3JvdXAtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFk''@;'; put 'put ''aXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5ncm91cC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5''@;'; put 'put ''O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1dG99Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdLCAuZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojZjlmOWY5O3dpZHRoOjEwMCV9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgLm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtvdmVyZmxvdzphdXRvfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCk7ZnVuY3Rpb24gRSRlKCl7fWZ1bmN0aW9uIHlVKGMpe3JldHVy''@;'; put 'put ''biBudWxsPT1jP0UkZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9uIHRhZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBBJGUoKXtyZXR1cm5bXX1mdW5jdGlvbiBuYWUoYyl7cmV0''@;'; put 'put ''dXJuIG51bGw9PWM/QSRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVuY3Rpb24gcmFlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNoZXMoYyl9fWZ1bmN0aW9uIGlhZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0''@;'; put 'put ''Y2hlcyhjKX19dmFyIEkkZT1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBSJGUoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgUCRlPUFycmF5LnByb3RvdHlwZS5maWx0ZXI7ZnVuY3Rpb24gRiRlKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVu''@;'; put 'put ''Y3Rpb24gb2FlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIG9UKGMsbCl7dGhpcy5vd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1jLm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2Rh''@;'; put 'put ''dGFfXz1sfWZ1bmN0aW9uIHokZShjLGwsYSxkLGgsZil7Zm9yKHZhciBULF89MCxXPWwubGVuZ3RoLGllPWYubGVuZ3RoO188aWU7KytfKShUPWxbX10pPyhULl9fZGF0YV9fPWZbX10sZFtfXT1UKTphW19dPW5ldyBvVChjLGZbX10pO2Zvcig7XzxXOysrXykoVD1sW19dKSYmKGhbX109VCl9''@;'; put 'put ''ZnVuY3Rpb24gVSRlKGMsbCxhLGQsaCxmLF8pe3ZhciBULFcsWmUsaWU9bmV3IE1hcCxnZT1sLmxlbmd0aCx3ZT1mLmxlbmd0aCxFZT1uZXcgQXJyYXkoZ2UpO2ZvcihUPTA7VDxnZTsrK1QpKFc9bFtUXSkmJihFZVtUXT1aZT1fLmNhbGwoVyxXLl9fZGF0YV9fLFQsbCkrIiIsaWUuaGFzKFpl''@;'; put 'put ''KT9oW1RdPVc6aWUuc2V0KFplLFcpKTtmb3IoVD0wO1Q8d2U7KytUKVplPV8uY2FsbChjLGZbVF0sVCxmKSsiIiwoVz1pZS5nZXQoWmUpKT8oZFtUXT1XLFcuX19kYXRhX189ZltUXSxpZS5kZWxldGUoWmUpKTphW1RdPW5ldyBvVChjLGZbVF0pO2ZvcihUPTA7VDxnZTsrK1QpKFc9bFtUXSkm''@;'; put 'put ''JmllLmdldChFZVtUXSk9PT1XJiYoaFtUXT1XKX1mdW5jdGlvbiBaJGUoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gVyRlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBKJGUoYyxsKXtyZXR1cm4gYzxsPy0x''@;'; put 'put ''OmM+bD8xOmM+PWw/MDpOYU59b1QucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvVCxhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5fcGFyZW50''@;'; put 'put ''Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIgd1U9Imh0''@;'; put 'put ''dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2NvbnN0IHNhZT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6d1UseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxu''@;'; put 'put ''czoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBzVChjKXt2YXIgbD1jKz0iIixhPWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEpKSYmKGM9Yy5zbGljZShhKzEpKSxzYWUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNl''@;'; put 'put ''OnNhZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIG9xZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gc3FlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gYXFl''@;'; put 'put ''KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gbHFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbCl9fWZ1bmN0aW9uIGNxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBh''@;'; put 'put ''PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gdXFlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92''@;'; put 'put ''ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0aW9uIGFhZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZp''@;'; put 'put ''ZXd9ZnVuY3Rpb24gaHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9uIGZxZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uIHBxZShjLGwsYSl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBZNyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fGFhZShj''@;'; put 'put ''KS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBtcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIHZxZShjLGwpe3JldHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gX3FlKGMsbCl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGxhZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLyl9ZnVuY3Rpb24gQ1UoYyl7cmV0dXJuIGMuY2xhc3NMaXN0fHxuZXcg''@;'; put 'put ''Y2FlKGMpfWZ1bmN0aW9uIGNhZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9bGFlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rpb24gdWFlKGMsbCl7Zm9yKHZhciBhPUNVKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5hZGQobFtkXSl9ZnVuY3Rpb24gZGFlKGMs''@;'; put 'put ''bCl7Zm9yKHZhciBhPUNVKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rpb24geXFlKGMpe3JldHVybiBmdW5jdGlvbigpe3VhZSh0aGlzLGMpfX1mdW5jdGlvbiB3cWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGFlKHRoaXMsYyl9fWZ1bmN0aW9uIENxZShj''@;'; put 'put ''LGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT91YWU6ZGFlKSh0aGlzLGMpfX1mdW5jdGlvbiBNcWUoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIHhxZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIEVx''@;'; put 'put ''ZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX1mdW5jdGlvbiBBcWUoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5jdGlvbiBUcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVu''@;'; put 'put ''Y3Rpb24gRHFlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBMcWUoKXt0aGlzLm5leHRTaWJsaW5nJiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gT3FlKCl7''@;'; put 'put ''dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gRnFlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3Jl''@;'; put 'put ''dHVybiBhPT09d1UmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PXdVP2wuY3JlYXRlRWxlbWVudChjKTpsLmNyZWF0ZUVsZW1lbnROUyhhLGMpfX1mdW5jdGlvbiBIcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''TlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gaGFlKGMpe3ZhciBsPXNUKGMpO3JldHVybihsLmxvY2FsP0hxZTpGcWUpKGwpfWZ1bmN0aW9uIFZxZSgpe3JldHVybiBudWxsfWZ1bmN0aW9uIGpxZSgpe3ZhciBjPXRoaXMucGFyZW50Tm9kZTtjJiZjLnJlbW92ZUNoaWxkKHRoaXMpfWZ1''@;'; put 'put ''bmN0aW9uIFVxZSgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCExKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gWnFlKCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITApLGw9dGhpcy5wYXJlbnROb2RlO3JldHVy''@;'; put 'put ''biBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBxcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5fX29uO2lmKGwpe2Zvcih2YXIgZixhPTAsZD0tMSxoPWwubGVuZ3RoO2E8aDsrK2EpZj1sW2FdLGMudHlwZSYmZi50eXBlIT09Yy50eXBl''@;'; put 'put ''fHxmLm5hbWUhPT1jLm5hbWU/bFsrK2RdPWY6dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGYudHlwZSxmLmxpc3RlbmVyLGYub3B0aW9ucyk7KytkP2wubGVuZ3RoPWQ6ZGVsZXRlIHRoaXMuX19vbn19fWZ1bmN0aW9uIEtxZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGgsZD10aGlz''@;'; put 'put ''Ll9fb24sZj1mdW5jdGlvbiBHcWUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe2MuY2FsbCh0aGlzLGwsdGhpcy5fX2RhdGFfXyl9fShsKTtpZihkKWZvcih2YXIgXz0wLFQ9ZC5sZW5ndGg7XzxUOysrXylpZigoaD1kW19dKS50eXBlPT09Yy50eXBlJiZoLm5hbWU9PT1jLm5hbWUpcmV0dXJuIHRo''@;'; put 'put ''aXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcixoLm9wdGlvbnMpLHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihoLnR5cGUsaC5saXN0ZW5lcj1mLGgub3B0aW9ucz1hKSx2b2lkKGgudmFsdWU9bCk7dGhpcy5hZGRFdmVudExpc3RlbmVyKGMudHlwZSxmLGEpLGg9e3R5cGU6''@;'; put 'put ''Yy50eXBlLG5hbWU6Yy5uYW1lLHZhbHVlOmwsbGlzdGVuZXI6ZixvcHRpb25zOmF9LGQ/ZC5wdXNoKGgpOnRoaXMuX19vbj1baF19fWZ1bmN0aW9uIGZhZShjLGwsYSl7dmFyIGQ9YWFlKGMpLGg9ZC5DdXN0b21FdmVudDsiZnVuY3Rpb24iPT10eXBlb2YgaD9oPW5ldyBoKGwsYSk6KGg9ZC5k''@;'; put 'put ''b2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxhPyhoLmluaXRFdmVudChsLGEuYnViYmxlcyxhLmNhbmNlbGFibGUpLGguZGV0YWlsPWEuZGV0YWlsKTpoLmluaXRFdmVudChsLCExLCExKSksYy5kaXNwYXRjaEV2ZW50KGgpfWZ1bmN0aW9uIEpxZShjLGwpe3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmYWUodGhpcyxjLGwpfX1mdW5jdGlvbiBRcWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZmFlKHRoaXMsYyxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fWNhZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihjKXt0aGlzLl9uYW1lcy5pbmRleE9mKGMpPDAmJih0aGlz''@;'; put 'put ''Ll9uYW1lcy5wdXNoKGMpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LHJlbW92ZTpmdW5jdGlvbihjKXt2YXIgbD10aGlzLl9uYW1lcy5pbmRleE9mKGMpO2w+PTAmJih0aGlzLl9uYW1lcy5zcGxpY2UobCwxKSx0aGlzLl9ub2RlLnNl''@;'; put 'put ''dEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxjb250YWluczpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihjKT49MH19O3ZhciBTVT1bbnVsbF07ZnVuY3Rpb24gWHUoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVu''@;'; put 'put ''Y3Rpb24gcGFlKCl7cmV0dXJuIG5ldyBYdShbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLFNVKX1YdS5wcm90b3R5cGU9cGFlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WHUsc2VsZWN0OmZ1bmN0aW9uIGskZShjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9eVUoYykpO2Zvcih2YXIg''@;'; put 'put ''bD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIFcsaWUsZj1sW2hdLF89Zi5sZW5ndGgsVD1kW2hdPW5ldyBBcnJheShfKSxnZT0wO2dlPF87KytnZSkoVz1mW2dlXSkmJihpZT1jLmNhbGwoVyxXLl9fZGF0YV9fLGdlLGYpKSYmKCJf''@;'; put 'put ''X2RhdGFfXyJpbiBXJiYoaWUuX19kYXRhX189Vy5fX2RhdGFfXyksVFtnZV09aWUpO3JldHVybiBuZXcgWHUoZCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIEQkZShjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIFQkZShjKXtyZXR1cm4gZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGFlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOm5hZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1bXSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgVyxfPWxbZl0sVD1fLmxlbmd0aCxpZT0wO2llPFQ7KytpZSkoVz1fW2llXSkmJihkLnB1c2go''@;'; put 'put ''Yy5jYWxsKFcsVy5fX2RhdGFfXyxpZSxfKSksaC5wdXNoKFcpKTtyZXR1cm4gbmV3IFh1KGQsaCl9LHNlbGVjdENoaWxkOmZ1bmN0aW9uIE8kZShjKXtyZXR1cm4gdGhpcy5zZWxlY3QobnVsbD09Yz9SJGU6ZnVuY3Rpb24gTCRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBJJGUuY2Fs''@;'; put 'put ''bCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzppYWUoYykpKX0sc2VsZWN0Q2hpbGRyZW46ZnVuY3Rpb24gTiRlKGMpe3JldHVybiB0aGlzLnNlbGVjdEFsbChudWxsPT1jP0YkZTpmdW5jdGlvbiBIJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFAkZS5j''@;'; put 'put ''YWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmlhZShjKSkpfSxmaWx0ZXI6ZnVuY3Rpb24gViRlKGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1yYWUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7''@;'; put 'put ''aDxhOysraClmb3IodmFyIFcsZj1sW2hdLF89Zi5sZW5ndGgsVD1kW2hdPVtdLGllPTA7aWU8XzsrK2llKShXPWZbaWVdKSYmYy5jYWxsKFcsVy5fX2RhdGFfXyxpZSxmKSYmVC5wdXNoKFcpO3JldHVybiBuZXcgWHUoZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiBZJGUoYyxsKXtp''@;'; put 'put ''ZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLFokZSk7dmFyIGE9bD9VJGU6eiRlLGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVuY3Rpb24gaiRlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0o''@;'; put 'put ''YykpO2Zvcih2YXIgZj1oLmxlbmd0aCxfPW5ldyBBcnJheShmKSxUPW5ldyBBcnJheShmKSxXPW5ldyBBcnJheShmKSxpZT0wO2llPGY7KytpZSl7dmFyIGdlPWRbaWVdLHdlPWhbaWVdLEVlPXdlLmxlbmd0aCxaZT1XJGUoYy5jYWxsKGdlLGdlJiZnZS5fX2RhdGFfXyxpZSxkKSksb3Q9WmUu''@;'; put 'put ''bGVuZ3RoLGV0PVRbaWVdPW5ldyBBcnJheShvdCkseXQ9X1tpZV09bmV3IEFycmF5KG90KTthKGdlLHdlLGV0LHl0LFdbaWVdPW5ldyBBcnJheShFZSksWmUsbCk7Zm9yKHZhciBybix2bixTdD0wLFF0PTA7U3Q8b3Q7KytTdClpZihybj1ldFtTdF0pe2ZvcihTdD49UXQmJihRdD1TdCsxKTsh''@;'; put 'put ''KHZuPXl0W1F0XSkmJisrUXQ8b3Q7KTtybi5fbmV4dD12bnx8bnVsbH19cmV0dXJuKF89bmV3IFh1KF8sZCkpLl9lbnRlcj1ULF8uX2V4aXQ9VyxffSxlbnRlcjpmdW5jdGlvbiBCJGUoKXtyZXR1cm4gbmV3IFh1KHRoaXMuX2VudGVyfHx0aGlzLl9ncm91cHMubWFwKG9hZSksdGhpcy5fcGFy''@;'; put 'put ''ZW50cyl9LGV4aXQ6ZnVuY3Rpb24gRyRlKCl7cmV0dXJuIG5ldyBYdSh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKG9hZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gJCRlKGMsbCxhKXt2YXIgZD10aGlzLmVudGVyKCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5tZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9u''@;'; put 'put ''IHEkZShjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5fZ3JvdXBzLGg9YS5sZW5ndGgsXz1NYXRoLm1pbihoLGQubGVuZ3RoKSxUPW5ldyBBcnJheShoKSxXPTA7VzxfOysrVylmb3IodmFyIFplLGllPWFbV10sZ2U9ZFtXXSx3ZT1p''@;'; put 'put ''ZS5sZW5ndGgsRWU9VFtXXT1uZXcgQXJyYXkod2UpLG90PTA7b3Q8d2U7KytvdCkoWmU9aWVbb3RdfHxnZVtvdF0pJiYoRWVbb3RdPVplKTtmb3IoO1c8aDsrK1cpVFtXXT1hW1ddO3JldHVybiBuZXcgWHUoVCx0aGlzLl9wYXJlbnRzKX0sc2VsZWN0aW9uOmZ1bmN0aW9uIG5LZSgpe3JldHVy''@;'; put 'put ''biB0aGlzfSxvcmRlcjpmdW5jdGlvbiBLJGUoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsrK2w8YTspZm9yKHZhciBfLGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKF89ZFtoXSkmJihmJiY0Xl8uY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikm''@;'; put 'put ''JmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXyxmKSxmPV8pO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIFgkZShjKXtmdW5jdGlvbiBsKHdlLEVlKXtyZXR1cm4gd2UmJkVlP2Mod2UuX19kYXRhX18sRWUuX19kYXRhX18pOiF3ZS0hRWV9Y3x8KGM9SiRlKTtmb3IodmFyIGE9dGhpcy5f''@;'; put 'put ''Z3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgaWUsXz1hW2ZdLFQ9Xy5sZW5ndGgsVz1oW2ZdPW5ldyBBcnJheShUKSxnZT0wO2dlPFQ7KytnZSkoaWU9X1tnZV0pJiYoV1tnZV09aWUpO1cuc29ydChsKX1yZXR1cm4gbmV3IFh1KGgsdGhpcy5f''@;'; put 'put ''cGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBRJGUoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIGVxZSgpe3JldHVybiBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1''@;'; put 'put ''bmN0aW9uIHRxZSgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgXz1kW2hdO2lmKF8pcmV0dXJuIF99cmV0dXJuIG51bGx9LHNpemU6ZnVuY3Rpb24gbnFlKCl7bGV0IGM9MDtm''@;'; put 'put ''b3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gcnFlKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIGlxZShjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsrK2EpZm9yKHZhciBULGg9bFthXSxmPTAsXz1o''@;'; put 'put ''Lmxlbmd0aDtmPF87KytmKShUPWhbZl0pJiZjLmNhbGwoVCxULl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gZHFlKGMsbCl7dmFyIGE9c1QoYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUoKTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJp''@;'; put 'put ''YnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9hLmxvY2FsP3NxZTpvcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD91cWU6Y3FlOmEubG9jYWw/bHFlOmFxZSkoYSxsKSl9LHN0eWxlOmZ1bmN0aW9uIGdxZShj''@;'; put 'put ''LGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/aHFlOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3BxZTpmcWUpKGMsbCxhPz8iIikpOlk3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBicWUoYyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4xP3RoaXMuZWFjaCgobnVsbD09bD9tcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/X3FlOnZxZSkoYyxsKSk6dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24gU3FlKGMsbCl7dmFyIGE9bGFlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciBkPUNVKHRoaXMubm9k''@;'; put 'put ''ZSgpKSxoPS0xLGY9YS5sZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP0NxZTpsP3lxZTp3cWUpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIGtxZShjKXtyZXR1cm4gYXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9NcWU6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0VxZTp4cWUpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiBJcWUoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/QXFlOigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgYz9EcWU6VHFlKShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBScWUoKXtyZXR1cm4gdGhpcy5lYWNoKExxZSl9LGxvd2VyOmZ1bmN0aW9uIFBxZSgpe3JldHVybiB0aGlzLmVhY2goT3FlKX0sYXBwZW5kOmZ1bmN0aW9uIE5xZShjKXt2YXIg''@;'; put 'put ''bD0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmhhZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KX0saW5zZXJ0OmZ1bmN0aW9uIEJxZShjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P2M6aGFlKGMpLGQ9bnVsbD09bD9WcWU6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDp5VShsKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoYS5hcHBseSh0aGlzLGFyZ3VtZW50cyksZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fG51bGwpfSl9''@;'; put 'put ''LHJlbW92ZTpmdW5jdGlvbiB6cWUoKXtyZXR1cm4gdGhpcy5lYWNoKGpxZSl9LGNsb25lOmZ1bmN0aW9uIFlxZShjKXtyZXR1cm4gdGhpcy5zZWxlY3QoYz9acWU6VXFlKX0sZGF0dW06ZnVuY3Rpb24gV3FlKGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0''@;'; put 'put ''YV9fIixjKTp0aGlzLm5vZGUoKS5fX2RhdGFfX30sb246ZnVuY3Rpb24gWHFlKGMsbCxhKXt2YXIgaCxfLGQ9ZnVuY3Rpb24gJHFlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24obCl7dmFyIGE9IiIsZD1sLmluZGV4T2YoIi4iKTtyZXR1cm4gZD49MCYm''@;'; put 'put ''KGE9bC5zbGljZShkKzEpLGw9bC5zbGljZSgwLGQpKSx7dHlwZTpsLG5hbWU6YX19KX0oYysiIiksZj1kLmxlbmd0aDtpZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2ZvcihUPWw/S3FlOnFxZSxoPTA7aDxmOysraCl0aGlzLmVhY2goVChkW2hdLGwsYSkpO3JldHVybiB0aGlzfXZhciBUPXRo''@;'; put 'put ''aXMubm9kZSgpLl9fb247aWYoVClmb3IodmFyIGdlLFc9MCxpZT1ULmxlbmd0aDtXPGllOysrVylmb3IoaD0wLGdlPVRbV107aDxmOysraClpZigoXz1kW2hdKS50eXBlPT09Z2UudHlwZSYmXy5uYW1lPT09Z2UubmFtZSlyZXR1cm4gZ2UudmFsdWV9LGRpc3BhdGNoOmZ1bmN0aW9uIGVLZShj''@;'; put 'put ''LGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP1FxZTpKcWUpKGMsbCkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbip0S2UoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wpZm9yKHZhciBfLGQ9Y1tsXSxoPTAsZj1kLmxl''@;'; put 'put ''bmd0aDtoPGY7KytoKShfPWRbaF0pJiYoeWllbGQgXyl9fTtjb25zdCBZZz1wYWU7ZnVuY3Rpb24gTVUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBYdShbZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBYdShbdGFl''@;'; put 'put ''KGMpXSxTVSl9ZnVuY3Rpb24ga3MoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBYdShbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYyldXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IFh1KFtbY11dLFNVKX12YXIgcktlPXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIGdh''@;'; put 'put ''ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3VtZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2QpO2FbZF09W119cmV0dXJuIG5ldyBhVChhKX1mdW5j''@;'; put 'put ''dGlvbiBhVChjKXt0aGlzLl89Y31mdW5jdGlvbiBvS2UoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiBtYWUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2Rd''@;'; put 'put ''Lm5hbWU9PT1sKXtjW2RdPXJLZSxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31yZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9YVQucHJvdG90eXBlPWdhZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmFULG9uOmZ1bmN0aW9uKGMsbCl7''@;'; put 'put ''dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBpS2UoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6ZH19KX0oYysiIixhKSxmPS0xLF89ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8XzspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09bWFlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09bWFlKGFbaF0sYy5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytmPF87KWlmKCho''@;'; put 'put ''PShjPWRbZl0pLnR5cGUpJiYoaD1vS2UoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigpe3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgYVQoYyl9LGNhbGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxl''@;'; put 'put ''bmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRoaXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7Kyto''@;'; put 'put ''KWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IHhVPWdhZTt2YXIgbFQsaHcsVzc9MCx1dz0wLGR3PTAsdmFlPTFlMyxjVD0wLFdnPTAsdVQ9MCxmdz0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxfYWU9Im9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oYyl7c2V0VGltZW91dChjLDE3KX07ZnVuY3Rpb24gRVUoKXtyZXR1cm4gV2d8fChfYWUoc0tlKSxXZz1mdy5ub3coKSt1''@;'; put 'put ''VCl9ZnVuY3Rpb24gc0tlKCl7V2c9MH1mdW5jdGlvbiBkVCgpe3RoaXMuX2NhbGw9dGhpcy5fdGltZT10aGlzLl9uZXh0PW51bGx9ZnVuY3Rpb24gYmFlKGMsbCxhKXt2YXIgZD1uZXcgZFQ7cmV0dXJuIGQucmVzdGFydChjLGwsYSksZH1mdW5jdGlvbiB5YWUoKXtXZz0oY1Q9Zncubm93KCkp''@;'; put 'put ''K3VULFc3PXV3PTA7dHJ5eyFmdW5jdGlvbiBhS2UoKXtFVSgpLCsrVzc7Zm9yKHZhciBsLGM9bFQ7YzspKGw9V2ctYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVzd9KCl9ZmluYWxseXtXNz0wLGZ1bmN0aW9uIGNLZSgpe2Zvcih2YXIgYyxhLGw9bFQs''@;'; put 'put ''ZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOmxUPWEpO2h3PWMsa1UoZCl9KCksV2c9MH19ZnVuY3Rpb24gbEtlKCl7dmFyIGM9Zncubm93KCksbD1jLWNUO2w+dmFlJiYo''@;'; put 'put ''dVQtPWwsY1Q9Yyl9ZnVuY3Rpb24ga1UoYyl7Vzd8fCh1dyYmKHV3PWNsZWFyVGltZW91dCh1dykpLGMtV2c+MjQ/KGM8MS8wJiYodXc9c2V0VGltZW91dCh5YWUsYy1mdy5ub3coKS11VCkpLGR3JiYoZHc9Y2xlYXJJbnRlcnZhbChkdykpKTooZHd8fChjVD1mdy5ub3coKSxkdz1zZXRJbnRl''@;'; put 'put ''cnZhbChsS2UsdmFlKSksVzc9MSxfYWUoeWFlKSkpfWZ1bmN0aW9uIGhUKGMsbCxhKXt2YXIgZD1uZXcgZFQ7cmV0dXJuIGQucmVzdGFydChoPT57ZC5zdG9wKCksYyhoK2wpfSxsPW51bGw9PWw/MDorbCxhKSxkfWRULnByb3RvdHlwZT1iYWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkVCxy''@;'; put 'put ''ZXN0YXJ0OmZ1bmN0aW9uKGMsbCxhKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBpcyBub3QgYSBmdW5jdGlvbiIpO2E9KG51bGw9PWE/RVUoKTorYSkrKG51bGw9PWw/MDorbCksIXRoaXMuX25leHQmJmh3IT09dGhpcyYmKGh3P2h3Ll9u''@;'; put 'put ''ZXh0PXRoaXM6bFQ9dGhpcyxodz10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLGtVKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1udWxsLHRoaXMuX3RpbWU9MS8wLGtVKCkpfX07dmFyIHVLZT14VSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRl''@;'; put 'put ''cnJ1cHQiKSxkS2U9W10sd2FlPTAsVFU9MixmVD0zLERVPTUscFQ9NjtmdW5jdGlvbiBnVChjLGwsYSxkLGgsZil7dmFyIF89Yy5fX3RyYW5zaXRpb247aWYoXyl7aWYoYSBpbiBfKXJldHVybn1lbHNlIGMuX190cmFuc2l0aW9uPXt9OyFmdW5jdGlvbiBoS2UoYyxsLGEpe3ZhciBoLGQ9Yy5f''@;'; put 'put ''X3RyYW5zaXRpb247ZnVuY3Rpb24gXyhpZSl7dmFyIGdlLHdlLEVlLFplO2lmKDEhPT1hLnN0YXRlKXJldHVybiBXKCk7Zm9yKGdlIGluIGQpaWYoKFplPWRbZ2VdKS5uYW1lPT09YS5uYW1lKXtpZihaZS5zdGF0ZT09PWZUKXJldHVybiBoVChfKTs0PT09WmUuc3RhdGU/KFplLnN0YXRlPXBU''@;'; put 'put ''LFplLnRpbWVyLnN0b3AoKSxaZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLGMsYy5fX2RhdGFfXyxaZS5pbmRleCxaZS5ncm91cCksZGVsZXRlIGRbZ2VdKTorZ2U8bCYmKFplLnN0YXRlPXBULFplLnRpbWVyLnN0b3AoKSxaZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyxaZS5pbmRleCxa''@;'; put 'put ''ZS5ncm91cCksZGVsZXRlIGRbZ2VdKX1pZihoVChmdW5jdGlvbigpe2Euc3RhdGU9PT1mVCYmKGEuc3RhdGU9NCxhLnRpbWVyLnJlc3RhcnQoVCxhLmRlbGF5LGEudGltZSksVChpZSkpfSksYS5zdGF0ZT1UVSxhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3Vw''@;'; put 'put ''KSxhLnN0YXRlPT09VFUpe2ZvcihhLnN0YXRlPWZULGg9bmV3IEFycmF5KEVlPWEudHdlZW4ubGVuZ3RoKSxnZT0wLHdlPS0xO2dlPEVlOysrZ2UpKFplPWEudHdlZW5bZ2VdLnZhbHVlLmNhbGwoYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCkpJiYoaFsrK3dlXT1aZSk7aC5sZW5ndGg9''@;'; put 'put ''d2UrMX19ZnVuY3Rpb24gVChpZSl7Zm9yKHZhciBnZT1pZTxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGwsaWUvYS5kdXJhdGlvbik6KGEudGltZXIucmVzdGFydChXKSxhLnN0YXRlPURVLDEpLHdlPS0xLEVlPWgubGVuZ3RoOysrd2U8RWU7KWhbd2VdLmNhbGwoYyxnZSk7YS5zdGF0ZT09''@;'; put 'put ''PURVJiYoYS5vbi5jYWxsKCJlbmQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLFcoKSl9ZnVuY3Rpb24gVygpe2Zvcih2YXIgaWUgaW4gYS5zdGF0ZT1wVCxhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJldHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGlt''@;'; put 'put ''ZXI9YmFlKGZ1bmN0aW9uIGYoaWUpe2Euc3RhdGU9MSxhLnRpbWVyLnJlc3RhcnQoXyxhLmRlbGF5LGEudGltZSksYS5kZWxheTw9aWUmJl8oaWUtYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91cDpoLG9uOnVLZSx0d2VlbjpkS2UsdGltZTpmLnRpbWUsZGVs''@;'; put 'put ''YXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6d2FlfSl9ZnVuY3Rpb24gSVUoYyxsKXt2YXIgYT1TMihjLGwpO2lmKGEuc3RhdGU+d2FlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJu''@;'; put 'put ''IGF9ZnVuY3Rpb24gVGgoYyxsKXt2YXIgYT1TMihjLGwpO2lmKGEuc3RhdGU+ZlQpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJuIGF9ZnVuY3Rpb24gUzIoYyxsKXt2YXIgYT1jLl9fdHJhbnNpdGlvbjtpZighYXx8IShhPWFbbF0pKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gYX1mdW5jdGlvbiBtVChjLGwpe3ZhciBkLGgsXyxhPWMuX190cmFuc2l0aW9uLGY9ITA7aWYoYSl7Zm9yKF8gaW4gbD1udWxsPT1sP251bGw6bCsiIixhKShkPWFbX10pLm5hbWU9PT1sPyhoPWQuc3RhdGU+VFUmJmQuc3Rh''@;'; put 'put ''dGU8RFUsZC5zdGF0ZT1wVCxkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2VsIixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVtfXSk6Zj0hMTtmJiZkZWxldGUgYy5fX3RyYW5zaXRpb259fWZ1bmN0aW9uIERoKGMsbCl7cmV0dXJuIGM9''@;'; put 'put ''K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciB2VCxTYWU9MTgwL01hdGguUEksTFU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gTWFlKGMsbCxhLGQsaCxmKXt2YXIgXyxULFc7''@;'; put 'put ''cmV0dXJuKF89TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPV8sbC89XyksKFc9YyphK2wqZCkmJihhLT1jKlcsZC09bCpXKSwoVD1NYXRoLnNxcnQoYSphK2QqZCkpJiYoYS89VCxkLz1ULFcvPVQpLGMqZDxsKmEmJihjPS1jLGw9LWwsVz0tVyxfPS1fKSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0''@;'; put 'put ''ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKlNhZSxza2V3WDpNYXRoLmF0YW4oVykqU2FlLHNjYWxlWDpfLHNjYWxlWTpUfX1mdW5jdGlvbiB4YWUoYyxsLGEsZCl7ZnVuY3Rpb24gaChpZSl7cmV0dXJuIGllLmxlbmd0aD9pZS5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGllLGdl''@;'; put 'put ''KXt2YXIgd2U9W10sRWU9W107cmV0dXJuIGllPWMoaWUpLGdlPWMoZ2UpLGZ1bmN0aW9uIGYoaWUsZ2Usd2UsRWUsWmUsb3Qpe2lmKGllIT09d2V8fGdlIT09RWUpe3ZhciBldD1aZS5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLGwsbnVsbCxhKTtvdC5wdXNoKHtpOmV0LTQseDpEaChpZSx3ZSl9''@;'; put 'put ''LHtpOmV0LTIseDpEaChnZSxFZSl9KX1lbHNlKHdlfHxFZSkmJlplLnB1c2goInRyYW5zbGF0ZSgiK3dlK2wrRWUrYSl9KGllLnRyYW5zbGF0ZVgsaWUudHJhbnNsYXRlWSxnZS50cmFuc2xhdGVYLGdlLnRyYW5zbGF0ZVksd2UsRWUpLGZ1bmN0aW9uIF8oaWUsZ2Usd2UsRWUpe2llIT09Z2U/''@;'; put 'put ''KGllLWdlPjE4MD9nZSs9MzYwOmdlLWllPjE4MCYmKGllKz0zNjApLEVlLnB1c2goe2k6d2UucHVzaChoKHdlKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6RGgoaWUsZ2UpfSkpOmdlJiZ3ZS5wdXNoKGgod2UpKyJyb3RhdGUoIitnZStkKX0oaWUucm90YXRlLGdlLnJvdGF0ZSx3ZSxFZSksZnVu''@;'; put 'put ''Y3Rpb24gVChpZSxnZSx3ZSxFZSl7aWUhPT1nZT9FZS5wdXNoKHtpOndlLnB1c2goaCh3ZSkrInNrZXdYKCIsbnVsbCxkKS0yLHg6RGgoaWUsZ2UpfSk6Z2UmJndlLnB1c2goaCh3ZSkrInNrZXdYKCIrZ2UrZCl9KGllLnNrZXdYLGdlLnNrZXdYLHdlLEVlKSxmdW5jdGlvbiBXKGllLGdlLHdl''@;'; put 'put ''LEVlLFplLG90KXtpZihpZSE9PXdlfHxnZSE9PUVlKXt2YXIgZXQ9WmUucHVzaChoKFplKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7b3QucHVzaCh7aTpldC00LHg6RGgoaWUsd2UpfSx7aTpldC0yLHg6RGgoZ2UsRWUpfSl9ZWxzZSgxIT09d2V8fDEhPT1FZSkmJlplLnB1c2goaCha''@;'; put 'put ''ZSkrInNjYWxlKCIrd2UrIiwiK0VlKyIpIil9KGllLnNjYWxlWCxpZS5zY2FsZVksZ2Uuc2NhbGVYLGdlLnNjYWxlWSx3ZSxFZSksaWU9Z2U9bnVsbCxmdW5jdGlvbihaZSl7Zm9yKHZhciB5dCxvdD0tMSxldD1FZS5sZW5ndGg7KytvdDxldDspd2VbKHl0PUVlW290XSkuaV09eXQueChaZSk7''@;'; put 'put ''cmV0dXJuIHdlLmpvaW4oIiIpfX19dmFyIG1LZT14YWUoZnVuY3Rpb24gcEtlKGMpe2NvbnN0IGw9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT9MVTpNYWUobC5hLGwuYixsLmMsbC5k''@;'; put 'put ''LGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxFYWU9eGFlKGZ1bmN0aW9uIGdLZShjKXtyZXR1cm4gbnVsbCE9YyYmKHZUfHwodlQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksdlQuc2V0QXR0cmlidXRlKCJ0cmFuc2Zv''@;'; put 'put ''cm0iLGMpLGM9dlQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/TWFlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOkxVfSwiLCAiLCIpIiwiKSIpO2Z1bmN0aW9uIHZLZShjLGwpe3ZhciBhLGQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGg9VGgodGhpcyxjKSxm''@;'; put 'put ''PWgudHdlZW47aWYoZiE9PWEpZm9yKHZhciBfPTAsVD0oZD1hPWYpLmxlbmd0aDtfPFQ7KytfKWlmKGRbX10ubmFtZT09PWwpeyhkPWQuc2xpY2UoKSkuc3BsaWNlKF8sMSk7YnJlYWt9aC50d2Vlbj1kfX1mdW5jdGlvbiBfS2UoYyxsLGEpe3ZhciBkLGg7aWYoImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IGEpdGhyb3cgbmV3IEVycm9yO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPVRoKHRoaXMsYyksXz1mLnR3ZWVuO2lmKF8hPT1kKXtoPShkPV8pLnNsaWNlKCk7Zm9yKHZhciBUPXtuYW1lOmwsdmFsdWU6YX0sVz0wLGllPWgubGVuZ3RoO1c8aWU7KytXKWlmKGhbV10ubmFtZT09PWwpe2hbV109''@;'; put 'put ''VDticmVha31XPT09aWUmJmgucHVzaChUKX1mLnR3ZWVuPWh9fWZ1bmN0aW9uIFJVKGMsbCxhKXt2YXIgZD1jLl9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9VGgodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1''@;'; put 'put ''bmN0aW9uKGgpe3JldHVybiBTMihoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiBPVShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9yPWN9ZnVuY3Rpb24ga2FlKGMsbCl7dmFyIGE9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtk''@;'; put 'put ''XT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIHB3KCl7fXZhciBfVD0xLy43LEc3PSJcXHMqKFsrLV0/XFxkKylcXHMqIixtdz0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIsSWg9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/''@;'; put 'put ''XFxkKyk/KSVcXHMqIix5S2U9L14jKFswLTlhLWZdezMsOH0pJC8sd0tlPW5ldyBSZWdFeHAoYF5yZ2JcXCgke0c3fSwke0c3fSwke0c3fVxcKSRgKSxDS2U9bmV3IFJlZ0V4cChgXnJnYlxcKCR7SWh9LCR7SWh9LCR7SWh9XFwpJGApLFNLZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7Rzd9LCR7''@;'; put 'put ''Rzd9LCR7Rzd9LCR7bXd9XFwpJGApLE1LZT1uZXcgUmVnRXhwKGBecmdiYVxcKCR7SWh9LCR7SWh9LCR7SWh9LCR7bXd9XFwpJGApLHhLZT1uZXcgUmVnRXhwKGBeaHNsXFwoJHttd30sJHtJaH0sJHtJaH1cXCkkYCksRUtlPW5ldyBSZWdFeHAoYF5oc2xhXFwoJHttd30sJHtJaH0sJHtJaH0s''@;'; put 'put ''JHttd31cXCkkYCksQWFlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1''@;'; put 'put ''LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3JhbDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxr''@;'; put 'put ''OjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAsZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmtt''@;'; put 'put ''YWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdyZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0''@;'; put 'put ''ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmly''@;'; put 'put ''ZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46''@;'; put 'put ''MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAwLGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVy''@;'; put 'put ''Ymx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRlbnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGln''@;'; put 'put ''aHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1Myxs''@;'; put 'put ''aWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVkaXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1''@;'; put 'put ''bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lzZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdo''@;'; put 'put ''dGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAs''@;'; put 'put ''b3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMscGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVy''@;'; put 'put ''dToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3''@;'; put 'put ''LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xhdGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5''@;'; put 'put ''OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9pc2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEs''@;'; put 'put ''d2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIFRhZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIERhZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1''@;'; put 'put ''bmN0aW9uIEdnKGMpe3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPXlLZS5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP0lhZShsKTozPT09YT9uZXcgSDAobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZs''@;'; put 'put ''LCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP2JUKGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP2JUKGw+PjEyJjE1fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwyNDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9d0tlLmV4''@;'; put 'put ''ZWMoYykpP25ldyBIMChsWzFdLGxbMl0sbFszXSwxKToobD1DS2UuZXhlYyhjKSk/bmV3IEgwKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLDEpOihsPVNLZS5leGVjKGMpKT9iVChsWzFdLGxbMl0sbFszXSxsWzRdKToobD1NS2UuZXhlYyhjKSk/YlQoMjU1KmxbMV0v''@;'; put 'put ''MTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9eEtlLmV4ZWMoYykpP09hZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPUVLZS5leGVjKGMpKT9PYWUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCxsWzRdKTpBYWUuaGFzT3duUHJvcGVydHkoYyk/SWFlKEFhZVtjXSk6''@;'; put 'put ''InRyYW5zcGFyZW50Ij09PWM/bmV3IEgwKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gSWFlKGMpe3JldHVybiBuZXcgSDAoYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIGJUKGMsbCxhLGQpe3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgSDAoYyxsLGEsZCl9''@;'; put 'put ''ZnVuY3Rpb24geVQoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIFRLZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHB3fHwoYz1HZyhjKSksYz9uZXcgSDAoKGM9Yy5yZ2IoKSkucixjLmcsYy5iLGMub3BhY2l0eSk6bmV3IEgwfShjKTpuZXcgSDAoYyxsLGEs''@;'; put 'put ''ZD8/MSl9ZnVuY3Rpb24gSDAoYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIExhZSgpe3JldHVybmAjJHtxZyh0aGlzLnIpfSR7cWcodGhpcy5nKX0ke3FnKHRoaXMuYil9YH1mdW5jdGlvbiBSYWUoKXtjb25zdCBjPXdUKHRo''@;'; put 'put ''aXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHskZyh0aGlzLnIpfSwgJHskZyh0aGlzLmcpfSwgJHskZyh0aGlzLmIpfSR7MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIHdUKGMpe3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxj''@;'; put 'put ''KSl9ZnVuY3Rpb24gJGcoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiBxZyhjKXtyZXR1cm4oKGM9JGcoYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygxNil9ZnVuY3Rpb24gT2FlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1h''@;'; put 'put ''PU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgTTIoYyxsLGEsZCl9ZnVuY3Rpb24gUGFlKGMpe2lmKGMgaW5zdGFuY2VvZiBNMilyZXR1cm4gbmV3IE0yKGMuaCxjLnMsYy5sLGMub3BhY2l0eSk7aWYoYyBpbnN0YW5jZW9mIHB3fHwoYz1HZyhjKSksIWMpcmV0dXJu''@;'; put 'put ''IG5ldyBNMjtpZihjIGluc3RhbmNlb2YgTTIpcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSxfPU5hTixUPWYtaCxXPShmK2gpLzI7cmV0dXJuIFQ/KF89bD09PWY/KGEtZCkvVCs2''@;'; put 'put ''KihhPGQpOmE9PT1mPyhkLWwpL1QrMjoobC1hKS9UKzQsVC89VzwuNT9mK2g6Mi1mLWgsXyo9NjApOlQ9Vz4wJiZXPDE/MDpfLG5ldyBNMihfLFQsVyxjLm9wYWNpdHkpfWZ1bmN0aW9uIE0yKGMsbCxhLGQpe3RoaXMuaD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1m''@;'; put 'put ''dW5jdGlvbiBGYWUoYyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIENUKGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8MCkpfWZ1bmN0aW9uIFBVKGMsbCxhKXtyZXR1cm4gMjU1KihjPDYwP2wrKGEtbCkqYy82MDpjPDE4MD9hOmM8MjQwP2wrKGEt''@;'; put 'put ''bCkqKDI0MC1jKS82MDpsKX1mdW5jdGlvbiBIYWUoYyxsLGEsZCxoKXt2YXIgZj1jKmMsXz1mKmM7cmV0dXJuKCgxLTMqYyszKmYtXykqbCsoNC02KmYrMypfKSphKygxKzMqYyszKmYtMypfKSpkK18qaCkvNn1PVShwdyxHZyx7Y29weShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhp''@;'; put 'put ''cy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDpUYWUsZm9ybWF0SGV4OlRhZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIGtLZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0sZm9ybWF0SHNsOmZ1bmN0''@;'; put 'put ''aW9uIEFLZSgpe3JldHVybiBQYWUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpEYWUsdG9TdHJpbmc6RGFlfSksT1UoSDAseVQsa2FlKHB3LHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP19UOk1hdGgucG93KF9ULGMpLG5ldyBIMCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIq''@;'; put 'put ''Yyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgSDAodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBIMCgkZyh0aGlzLnIpLCRn''@;'; put 'put ''KHRoaXMuZyksJGcodGhpcy5iKSx3VCh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3Bh''@;'; put 'put ''Y2l0eTw9MX0saGV4OkxhZSxmb3JtYXRIZXg6TGFlLGZvcm1hdEhleDg6ZnVuY3Rpb24gREtlKCl7cmV0dXJuYCMke3FnKHRoaXMucil9JHtxZyh0aGlzLmcpfSR7cWcodGhpcy5iKX0ke3FnKDI1NSooaXNOYU4odGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpS''@;'; put 'put ''YWUsdG9TdHJpbmc6UmFlfSkpLE9VKE0yLGZ1bmN0aW9uIElLZShjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/UGFlKGMpOm5ldyBNMihjLGwsYSxkPz8xKX0sa2FlKHB3LHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP19UOk1hdGgucG93KF9ULGMpLG5ldyBNMih0''@;'; put 'put ''aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBNMih0aGlzLmgsdGhpcy5zLHRoaXMubCpjLHRoaXMub3BhY2l0eSl9LHJnYigpe3ZhciBjPXRoaXMuaCUzNjArMzYwKih0aGlzLmg8MCks''@;'; put 'put ''bD1pc05hTihjKXx8aXNOYU4odGhpcy5zKT8wOnRoaXMucyxhPXRoaXMubCxkPWErKGE8LjU/YToxLWEpKmwsaD0yKmEtZDtyZXR1cm4gbmV3IEgwKFBVKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLFBVKGMsaCxkKSxQVShjPDEyMD9jKzI0MDpjLTEyMCxoLGQpLHRoaXMub3BhY2l0eSl9LGNs''@;'; put 'put ''YW1wKCl7cmV0dXJuIG5ldyBNMihGYWUodGhpcy5oKSxDVCh0aGlzLnMpLENUKHRoaXMubCksd1QodGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3Bh''@;'; put 'put ''Y2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2woKXtjb25zdCBjPXdUKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/ImhzbCgiOiJoc2xhKCJ9JHtGYWUodGhpcy5oKX0sICR7MTAwKkNUKHRoaXMucyl9JSwgJHsxMDAqQ1QodGhpcy5sKX0lJHsxPT09Yz8iKSI6YCwgJHtjfSlg''@;'; put 'put ''fWB9fSkpO2NvbnN0IEZVPWM9PigpPT5jO2Z1bmN0aW9uIFZhZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9mdW5jdGlvbiBOYWUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTpGVShpc05hTihjKT9sOmMpfWNvbnN0IFNUPWZ1bmN0aW9uIGMobCl7dmFyIGE9''@;'; put 'put ''ZnVuY3Rpb24gUEtlKGMpe3JldHVybiAxPT0oYz0rYyk/VmFlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBPS2UoYyxsLGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBvdyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEp''@;'; put 'put ''fX0obCxhLGMpOkZVKGlzTmFOKGwpP2E6bCl9fShsKTtmdW5jdGlvbiBkKGgsZil7dmFyIF89YSgoaD15VChoKSkuciwoZj15VChmKSkuciksVD1hKGguZyxmLmcpLFc9YShoLmIsZi5iKSxpZT1WYWUoaC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGdlKXtyZXR1cm4gaC5y''@;'; put 'put ''PV8oZ2UpLGguZz1UKGdlKSxoLmI9VyhnZSksaC5vcGFjaXR5PWllKGdlKSxoKyIifX1yZXR1cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0aW9uIEJhZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIF8sVCxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9bmV3IEFycmF5KGEpLGY9bmV3IEFy''@;'; put 'put ''cmF5KGEpO2ZvcihfPTA7XzxhOysrXylUPXlUKGxbX10pLGRbX109VC5yfHwwLGhbX109VC5nfHwwLGZbX109VC5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxULm9wYWNpdHk9MSxmdW5jdGlvbihXKXtyZXR1cm4gVC5yPWQoVyksVC5nPWgoVyksVC5iPWYoVyksVCsiIn19fUJh''@;'; put 'put ''ZShmdW5jdGlvbiBMS2UoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gSGFlKChhLWQvbCkqbCxkPjA/Y1tkLTFdOjIqaC1mLGgsZixkPGwtMT9j''@;'; put 'put ''W2QrMl06MipmLWgpfX0pLEJhZShmdW5jdGlvbiBSS2UoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gSGFlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tkJWxdLGNbKGQrMSklbF0sY1soZCsy''@;'; put 'put ''KSVsXSl9fSk7dmFyIEhVPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxOVT1uZXcgUmVnRXhwKEhVLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIGphZShjLGwpe3ZhciBkLGgsZixhPUhVLmxhc3RJbmRleD1OVS5sYXN0SW5kZXg9MCxfPS0xLFQ9W10sVz1bXTtm''@;'; put 'put ''b3IoYys9IiIsbCs9IiI7KGQ9SFUuZXhlYyhjKSkmJihoPU5VLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNlKGEsZiksVFtfXT9UW19dKz1mOlRbKytfXT1mKSwoZD1kWzBdKT09PShoPWhbMF0pP1RbX10/VFtfXSs9aDpUWysrX109aDooVFsrK19dPW51bGwsVy5wdXNoKHtp''@;'; put 'put ''Ol8seDpEaChkLGgpfSkpLGE9TlUubGFzdEluZGV4O3JldHVybiBhPGwubGVuZ3RoJiYoZj1sLnNsaWNlKGEpLFRbX10/VFtfXSs9ZjpUWysrX109ZiksVC5sZW5ndGg8Mj9XWzBdP2Z1bmN0aW9uIEhLZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGMobCkrIiJ9fShXWzBdLngpOmZ1''@;'; put 'put ''bmN0aW9uIEZLZShjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gY319KGwpOihsPVcubGVuZ3RoLGZ1bmN0aW9uKGllKXtmb3IodmFyIHdlLGdlPTA7Z2U8bDsrK2dlKVRbKHdlPVdbZ2VdKS5pXT13ZS54KGllKTtyZXR1cm4gVC5qb2luKCIiKX0pfWZ1bmN0aW9uIHphZShjLGwpe3ZhciBh''@;'; put 'put ''O3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/RGg6bCBpbnN0YW5jZW9mIEdnP1NUOihhPUdnKGwpKT8obD1hLFNUKTpqYWUpKGMsbCl9ZnVuY3Rpb24gTktlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBWS2UoYyl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBCS2UoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiBfPT09aD9udWxsOl89PT1kP2Y6Zj1sKGQ9XyxhKX19''@;'; put 'put ''ZnVuY3Rpb24gaktlKGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIF89PT1oP251bGw6Xz09PWQ/ZjpmPWwoZD1fLGEpfX1mdW5jdGlvbiB6S2UoYyxsLGEpe3ZhciBkLGgsZjty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oKXt2YXIgXyxXLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09VD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGMpOihfPXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShXPVQrIiIpP251bGw6Xz09PWQmJlc9PT1oP2Y6KGg9VyxmPWwoZD1fLFQpKX19ZnVuY3Rpb24gVUtl''@;'; put 'put ''KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF8sVyxUPWEodGhpcyk7cmV0dXJuIG51bGw9PVQ/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KF89dGhpcy5nZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpKT09PShXPVQrIiIp''@;'; put 'put ''P251bGw6Xz09PWQmJlc9PT1oP2Y6KGg9VyxmPWwoZD1fLFQpKX19ZnVuY3Rpb24gR0tlKGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rpb24gV0tlKGMsbCl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiAkS2UoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9''@;'; put 'put ''PWQmJihhPShkPWYpJiZmdW5jdGlvbiBZS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gS0tlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7SVUodGhpcyxjKS5k''@;'; put 'put ''ZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIFhLZShjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7SVUodGhpcyxjKS5kZWxheT1sfX1mdW5jdGlvbiBRS2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmR1cmF0aW9uPStsLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKX19ZnVuY3Rpb24gZVhlKGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtUaCh0aGlzLGMpLmR1cmF0aW9uPWx9fXZhciBnWGU9WWcucHJvdG90eXBlLmNvbnN0cnVjdG9yO2Z1bmN0aW9uIFVhZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5''@;'; put 'put ''KGMpfX12YXIgUlhlPTA7ZnVuY3Rpb24gTGgoYyxsLGEsZCl7dGhpcy5fZ3JvdXBzPWMsdGhpcy5fcGFyZW50cz1sLHRoaXMuX25hbWU9YSx0aGlzLl9pZD1kfWZ1bmN0aW9uIFZVKGMpe3JldHVybiBZZygpLnRyYW5zaXRpb24oYyl9ZnVuY3Rpb24gWmFlKCl7cmV0dXJuKytSWGV9dmFyIHIz''@;'; put 'put ''PVlnLnByb3RvdHlwZTtMaC5wcm90b3R5cGU9VlUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMaCxzZWxlY3Q6ZnVuY3Rpb24gZlhlKGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9eVUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1k''@;'; put 'put ''Lmxlbmd0aCxmPW5ldyBBcnJheShoKSxfPTA7XzxoOysrXylmb3IodmFyIGdlLHdlLFQ9ZFtfXSxXPVQubGVuZ3RoLGllPWZbX109bmV3IEFycmF5KFcpLEVlPTA7RWU8VzsrK0VlKShnZT1UW0VlXSkmJih3ZT1jLmNhbGwoZ2UsZ2UuX19kYXRhX18sRWUsVCkpJiYoIl9fZGF0YV9fImluIGdl''@;'; put 'put ''JiYod2UuX19kYXRhX189Z2UuX19kYXRhX18pLGllW0VlXT13ZSxnVChpZVtFZV0sbCxhLEVlLGllLFMyKGdlLGEpKSk7cmV0dXJuIG5ldyBMaChmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2VsZWN0QWxsOmZ1bmN0aW9uIHBYZShjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIGMmJihjPW5hZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sXz1bXSxUPTA7VDxoOysrVClmb3IodmFyIGdlLFc9ZFtUXSxpZT1XLmxlbmd0aCx3ZT0wO3dlPGllOysrd2UpaWYoZ2U9V1t3ZV0pe2Zvcih2YXIgWmUsRWU9Yy5jYWxsKGdl''@;'; put 'put ''LGdlLl9fZGF0YV9fLHdlLFcpLG90PVMyKGdlLGEpLGV0PTAseXQ9RWUubGVuZ3RoO2V0PHl0OysrZXQpKFplPUVlW2V0XSkmJmdUKFplLGwsYSxldCxFZSxvdCk7Zi5wdXNoKEVlKSxfLnB1c2goZ2UpfXJldHVybiBuZXcgTGgoZixfLGwsYSl9LHNlbGVjdENoaWxkOnIzLnNlbGVjdENoaWxk''@;'; put 'put ''LHNlbGVjdENoaWxkcmVuOnIzLnNlbGVjdENoaWxkcmVuLGZpbHRlcjpmdW5jdGlvbiBzWGUoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJhZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgVyxmPWxb''@;'; put 'put ''aF0sXz1mLmxlbmd0aCxUPWRbaF09W10saWU9MDtpZTxfOysraWUpKFc9ZltpZV0pJiZjLmNhbGwoVyxXLl9fZGF0YV9fLGllLGYpJiZULnB1c2goVyk7cmV0dXJuIG5ldyBMaChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdlOmZ1bmN0aW9uIGFYZShjKXtpZihj''@;'; put 'put ''Ll9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSxfPW5ldyBBcnJheShkKSxUPTA7VDxmOysrVClmb3IodmFyIEVlLFc9bFtUXSxpZT1hW1RdLGdlPVcubGVuZ3Ro''@;'; put 'put ''LHdlPV9bVF09bmV3IEFycmF5KGdlKSxaZT0wO1plPGdlOysrWmUpKEVlPVdbWmVdfHxpZVtaZV0pJiYod2VbWmVdPUVlKTtmb3IoO1Q8ZDsrK1QpX1tUXT1sW1RdO3JldHVybiBuZXcgTGgoXyx0aGlzLl9wYXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24g''@;'; put 'put ''bVhlKCl7cmV0dXJuIG5ldyBnWGUodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIElYZSgpe2Zvcih2YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1aYWUoKSxkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgVyxf''@;'; put 'put ''PWRbZl0sVD1fLmxlbmd0aCxpZT0wO2llPFQ7KytpZSlpZihXPV9baWVdKXt2YXIgZ2U9UzIoVyxsKTtnVChXLGMsYSxpZSxfLHt0aW1lOmdlLnRpbWUrZ2UuZGVsYXkrZ2UuZHVyYXRpb24sZGVsYXk6MCxkdXJhdGlvbjpnZS5kdXJhdGlvbixlYXNlOmdlLmVhc2V9KX1yZXR1cm4gbmV3IExo''@;'; put 'put ''KGQsdGhpcy5fcGFyZW50cyxjLGEpfSxjYWxsOnIzLmNhbGwsbm9kZXM6cjMubm9kZXMsbm9kZTpyMy5ub2RlLHNpemU6cjMuc2l6ZSxlbXB0eTpyMy5lbXB0eSxlYWNoOnIzLmVhY2gsb246ZnVuY3Rpb24gdVhlKGMsbCl7dmFyIGE9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''Mj9TMih0aGlzLm5vZGUoKSxhKS5vbi5vbihjKTp0aGlzLmVhY2goZnVuY3Rpb24gY1hlKGMsbCxhKXt2YXIgZCxoLGY9ZnVuY3Rpb24gbFhlKGMpe3JldHVybihjKyIiKS50cmltKCkuc3BsaXQoL158XHMrLykuZXZlcnkoZnVuY3Rpb24obCl7dmFyIGE9bC5pbmRleE9mKCIuIik7cmV0dXJu''@;'; put 'put ''IGE+PTAmJihsPWwuc2xpY2UoMCxhKSksIWx8fCJzdGFydCI9PT1sfSl9KGwpP0lVOlRoO3JldHVybiBmdW5jdGlvbigpe3ZhciBfPWYodGhpcyxjKSxUPV8ub247VCE9PWQmJihoPShkPVQpLmNvcHkoKSkub24obCxhKSxfLm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1bmN0aW9uIFpLZShjLGwp''@;'; put 'put ''e3ZhciBhPXNUKGMpLGQ9InRyYW5zZm9ybSI9PT1hP0VhZTp6YWU7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/VUtlOnpLZSkoYSxkLFJVKHRoaXMsImF0dHIuIitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP1ZLZTpOS2UpKGEpOihhLmxvY2Fs''@;'; put 'put ''P2pLZTpCS2UpKGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBxS2UoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPXNUKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/R0tlOiRLZSkoZCxsKSl9LHN0eWxlOmZ1bmN0aW9uIHdYZShjLGwsYSl7dmFyIGQ9InRyYW5zZm9ybSI9PShjKz0iIik/bUtlOnphZTtyZXR1cm4gbnVsbD09bD90''@;'; put 'put ''aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiB2WGUoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9WTcodGhpcyxjKSxfPSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLFk3KHRoaXMsYykpO3JldHVybiBmPT09Xz9udWxsOmY9PT1hJiZfPT09ZD9oOmg9bChhPWYs''@;'; put 'put ''ZD1fKX19KGMsZCkpLm9uKCJlbmQuc3R5bGUuIitjLFVhZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gYlhlKGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIF89WTcodGhpcyxjKSxUPWEodGhpcyksVz1UKyIiO3JldHVy''@;'; put 'put ''biBudWxsPT1UJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxXPVQ9WTcodGhpcyxjKSksXz09PVc/bnVsbDpfPT09ZCYmVz09PWg/ZjooaD1XLGY9bChkPV8sVCkpfX0oYyxkLFJVKHRoaXMsInN0eWxlLiIrYyxsKSkpLmVhY2goZnVuY3Rpb24geVhlKGMsbCl7dmFyIGEsZCxoLFQs''@;'; put 'put ''Zj0ic3R5bGUuIitsLF89ImVuZC4iK2Y7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFc9VGgodGhpcyxjKSxpZT1XLm9uLGdlPW51bGw9PVcudmFsdWVbZl0/VHx8KFQ9VWFlKGwpKTp2b2lkIDA7KGllIT09YXx8aCE9PWdlKSYmKGQ9KGE9aWUpLmNvcHkoKSkub24oXyxoPWdlKSxXLm9uPWR9fSh0''@;'; put 'put ''aGlzLl9pZCxjKSk6dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gX1hlKGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgXz1ZNyh0aGlzLGMpO3JldHVybiBfPT09aD9udWxsOl89PT1kP2Y6Zj1sKGQ9XyxhKX19KGMsZCxsKSxhKS5vbigiZW5kLnN0eWxlLiIr''@;'; put 'put ''YyxudWxsKX0sc3R5bGVUd2VlbjpmdW5jdGlvbiBNWGUoYyxsLGEpe3ZhciBkPSJzdHlsZS4iKyhjKz0iIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihkPXRoaXMudHdlZW4oZCkpJiZkLl92YWx1ZTtpZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGQsbnVsbCk7aWYoImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGQsZnVuY3Rpb24gU1hlKGMsbCxhKXt2YXIgZCxoO2Z1bmN0aW9uIGYoKXt2YXIgXz1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gXyE9PWgmJihkPShoPV8pJiZmdW5jdGlvbiBDWGUoYyxsLGEp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihkKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbC5jYWxsKHRoaXMsZCksYSl9fShjLF8sYSkpLGR9cmV0dXJuIGYuX3ZhbHVlPWwsZn0oYyxsLGE/PyIiKSl9LHRleHQ6ZnVuY3Rpb24ga1hlKGMpe3JldHVybiB0aGlzLnR3ZWVuKCJ0ZXh0IiwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgYz9mdW5jdGlvbiBFWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yyh0aGlzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX0oUlUodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIHhYZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fShudWxsPT1j''@;'; put 'put ''PyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIERYZShjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9m''@;'; put 'put ''IGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gVFhlKGMpe3ZhciBsLGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIEFYZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7''@;'; put 'put ''dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIGhYZSgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBkWGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5wYXJl''@;'; put 'put ''bnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBiS2UoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih2''@;'; put 'put ''YXIgXyxkPVMyKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKF89ZFtoXSkubmFtZT09PWMpcmV0dXJuIF8udmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD92S2U6X0tlKShhLGMsbCkpfSxkZWxheTpmdW5jdGlvbiBKS2Uo''@;'; put 'put ''Yyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9LS2U6WEtlKShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gdFhlKGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/UUtlOmVYZSkobCxjKSk6UzIodGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gclhlKGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChmdW5jdGlv''@;'; put 'put ''biBuWGUoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7VGgodGhpcyxjKS5lYXNlPWx9fShsLGMpKTpTMih0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBvWGUoYyl7aWYoImZ1bmN0aW9uIiE9dHlw''@;'; put 'put ''ZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gaVhlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO1RoKHRoaXMsYykuZWFzZT1hfX0o''@;'; put 'put ''dGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gTFhlKCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLF8pe3ZhciBUPXt2YWx1ZTpffSxXPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07YS5lYWNoKGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGllPVRoKHRoaXMsZCksZ2U9aWUub247Z2UhPT1jJiYoKGw9KGM9Z2UpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChUKSxsLl8uaW50ZXJydXB0LnB1c2goVCksbC5fLmVuZC5wdXNoKFcpKSxpZS5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9yXTpyM1tTeW1ib2wu''@;'; put 'put ''aXRlcmF0b3JdfTt2YXIgUFhlPXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBPWGUoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBGWGUoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFuc2l0aW9uKXx8IShh''@;'; put 'put ''PWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBub3QgZm91bmRgKTtyZXR1cm4gYX1ZZy5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIGZLZShjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bVQodGhpcyxjKX0pfSxZ''@;'; put 'put ''Zy5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiBIWGUoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgTGg/KGw9Yy5faWQsYz1jLl9uYW1lKToobD1aYWUoKSwoYT1QWGUpLnRpbWU9RVUoKSxjPW51bGw9PWM/bnVsbDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgs''@;'; put 'put ''Zj0wO2Y8aDsrK2YpZm9yKHZhciBXLF89ZFtmXSxUPV8ubGVuZ3RoLGllPTA7aWU8VDsrK2llKShXPV9baWVdKSYmZ1QoVyxjLGwsaWUsXyxhfHxGWGUoVyxsKSk7cmV0dXJuIG5ldyBMaChkLHRoaXMuX3BhcmVudHMsYyxsKX07dmFyIE5YZT1bbnVsbF07Y29uc3QgQlU9e2NhcHR1cmU6ITAs''@;'; put 'put ''cGFzc2l2ZTohMX07ZnVuY3Rpb24galUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gWWFlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0IFlYZT1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsXyl7''@;'; put 'put ''dmFyIHl0LGt0LFQ9ZlswXSxXPWZbMV0saWU9ZlsyXSxFZT1fWzJdLFplPV9bMF0tVCxvdD1fWzFdLVcsZXQ9WmUqWmUrb3Qqb3Q7aWYoZXQ8MWUtMTIpa3Q9TWF0aC5sb2coRWUvaWUpL2wseXQ9ZnVuY3Rpb24oY3Ipe3JldHVybltUK2NyKlplLFcrY3Iqb3QsaWUqTWF0aC5leHAobCpjcipr''@;'; put 'put ''dCldfTtlbHNle3ZhciBTdD1NYXRoLnNxcnQoZXQpLFF0PShFZSpFZS1pZSppZStkKmV0KS8oMippZSphKlN0KSxybj0oRWUqRWUtaWUqaWUtZCpldCkvKDIqRWUqYSpTdCksdm49TWF0aC5sb2coTWF0aC5zcXJ0KFF0KlF0KzEpLVF0KSxObj1NYXRoLmxvZyhNYXRoLnNxcnQocm4qcm4rMSkt''@;'; put 'put ''cm4pO2t0PShObi12bikvbCx5dD1mdW5jdGlvbihjcil7dmFyIERyPWNyKmt0LF9pPVlhZSh2biksbGk9aWUvKGEqU3QpKihfaSpmdW5jdGlvbiBaWGUoYyl7cmV0dXJuKChjPU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKkRyK3ZuKS1mdW5jdGlvbiBVWGUoYyl7cmV0dXJuKChjPU1hdGgu''@;'; put 'put ''ZXhwKGMpKS0xL2MpLzJ9KHZuKSk7cmV0dXJuW1QrbGkqWmUsVytsaSpvdCxpZSpfaS9ZYWUobCpEcit2bildfX1yZXR1cm4geXQuZHVyYXRpb249MWUzKmt0KmwvTWF0aC5TUVJUMix5dH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIF89TWF0aC5tYXgoLjAwMSwrZiksVD1fKl87cmV0''@;'; put 'put ''dXJuIGMoXyxULFQqVCl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBLZyhjLGwpe2lmKGM9ZnVuY3Rpb24gV1hlKGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25l''@;'; put 'put ''clNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91''@;'; put 'put ''bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBNVD1jPT4oKT0+YztmdW5jdGlv''@;'; put 'put ''biBHWGUoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZToh''@;'; put 'put ''MCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIGkzKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9''@;'; put 'put ''bCx0aGlzLnk9YX1pMy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmkzLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlzOm5ldyBpMyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IGkzKHRo''@;'; put 'put ''aXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMp''@;'; put 'put ''e3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVy''@;'; put 'put ''bihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5n''@;'; put 'put ''ZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIHhUPW5ldyBpMygxLDAsMCk7ZnVuY3Rpb24gRVQoYyl7Zm9y''@;'; put 'put ''KDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiB4VDtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24gelUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiB2dyhjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24o''@;'; put 'put ''KX1mdW5jdGlvbiAkWGUoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBxWGUoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZHRWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3''@;'; put 'put ''Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVudFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rp''@;'; put 'put ''b24gV2FlKCl7cmV0dXJuIHRoaXMuX196b29tfHx4VH1mdW5jdGlvbiBLWGUoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBYWGUoKXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9p''@;'; put 'put ''bnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gSlhlKGMsbCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1bMV0sXz1jLmludmVydFkobFsxXVsxXSktYVsxXVsx''@;'; put 'put ''XTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSxfPmY/KGYrXykvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLF8pKX1mdW5jdGlvbiBHYWUoYyl7dmFyIGw9e30sYT1jLm5vZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9''@;'; put 'put ''PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBmPWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52''@;'; put 'put ''YWx1ZX12YXIgZ2UsVz1jLm5vZGUoKS50cmFuc2Zvcm07aWYoVyYmMCE9Vy5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBpZT1XLmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDppZS5lLHk6aWUuZn0sbC5zY2FsZT1pZS5hfWlmKCJlbGxpcHNlIj09YSYm''@;'; put 'put ''KGwuY2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIHdlPShnZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihRdCl7cmV0dXJuIFF0LnNwbGl0KCIsIilbMF19KSxFZT1nZS5tYXAoZnVuY3Rpb24o''@;'; put 'put ''UXQpe3JldHVybiBRdC5zcGxpdCgiLCIpWzFdfSksWmU9TWF0aC5taW4uYXBwbHkobnVsbCx3ZSksb3Q9TWF0aC5tYXguYXBwbHkobnVsbCx3ZSksZXQ9TWF0aC5taW4uYXBwbHkobnVsbCxFZSkseXQ9TWF0aC5tYXguYXBwbHkobnVsbCxFZSk7bC5iYm94PXt4OlplLHk6ZXQsd2lkdGg6b3Qt''@;'; put 'put ''WmUsaGVpZ2h0Onl0LWV0fSxsLmNlbnRlcj17eDooWmUrb3QpLzIseTooZXQreXQpLzJ9fSJwYXRoIj09YSYmKChnZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksd2U9Z2UubWFwKGZ1bmN0aW9uKG1yKXtyZXR1cm4rbXIuc3BsaXQoIiwiKVswXX0pLEVlPWdlLm1hcChm''@;'; put 'put ''dW5jdGlvbihtcil7cmV0dXJuK21yLnNwbGl0KCIsIilbMV19KSxaZT1NYXRoLm1pbi5hcHBseShudWxsLHdlKSxvdD1NYXRoLm1heC5hcHBseShudWxsLHdlKSxldD1NYXRoLm1pbi5hcHBseShudWxsLEVlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLEVlKSxsLmJib3g9e3g6WmUseTpldCx3''@;'; put 'put ''aWR0aDpvdC1aZSxoZWlnaHQ6eXQtZXR9LGwuY2VudGVyPXt4OihaZStvdCkvMix5OihldCt5dCkvMn0sbC50b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0''@;'; put 'put ''Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBYZyhjKXt2YXIgbD1HYWUoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10sTVUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbigpe3ZhciBkPVhnKGtzKHRoaXMp''@;'; put 'put ''KTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24gVVUoYyl7cmV0dXJuIiN0ZXh0Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOiIjY29tbWVudCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoYy5jb21tZW50KTpkb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjLnRhZyl9ZnVuY3Rpb24gWlUoYyl7dmFyIGw9VVUoYyksYT1rcyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgsZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gJGFlKGMs''@;'; put 'put ''bCl7dmFyIGE9a3MoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1aVShsKSxoPWEuaW5zZXJ0KGZ1bmN0aW9uKCl7cmV0dXJuIGR9LGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpfSk7cmV0dXJuIGMucmVtb3ZlKCksaH1mdW5jdGlvbiBZVShjLGwpeyFmdW5jdGlvbiBlSmUoYyxsKXtjLmRhdHVt''@;'; put 'put ''KGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksTVUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe1lVKGtzKHRoaXMpLGwuY2hpbGRyZW5baF0pfSl9ZnVuY3Rpb24gX3coYyxsPTApe3ZhciBhPWtzKHRoaXMpLGg9Yy5hdHRyaWJ1''@;'; put 'put ''dGVzLGY9YS5ub2RlKCkuYXR0cmlidXRlcztpZihmKWZvcih2YXIgXz0wO188Zi5sZW5ndGg7XysrKXt2YXIgVD1mW19dLFc9VC5uYW1lO2lmKCJ4bWxucyIhPVcuc3BsaXQoIjoiKVswXSYmVC5uYW1lc3BhY2VVUkkpe3ZhciBpZT1ULm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO1c9aWVbaWUu''@;'; put 'put ''bGVuZ3RoLTFdKyI6IitXfVcgaW4gaHx8KGhbV109bnVsbCl9Zm9yKHZhciB3ZSBvZiBPYmplY3Qua2V5cyhoKSlhLmF0dHIod2UsaFt3ZV0pO2MudGV4dCYmYS50ZXh0KGMudGV4dCksZnVuY3Rpb24gdEplKGMsbCl7dmFyIGE9Yy5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2Rl''@;'; put 'put ''KCkuY2hpbGROb2Rlc30pLGQ9KGE9YS5kYXRhKGZ1bmN0aW9uKF8pe3JldHVybiBfLmNoaWxkcmVufSxmdW5jdGlvbihfKXtyZXR1cm4gXy50YWcrIi0iK2x9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24oXyl7cmV0dXJuIFVVKF8pfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1kLm1l''@;'; put 'put ''cmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbihfKXt2YXIgVD1fLnRhZztudWxsPT1mW1RdJiYoZltUXT0wKTt2YXIgVz1mW1RdKys7X3cuY2FsbCh0aGlzLF8sVyl9KX0oYSxsKX1mdW5jdGlvbiBxYWUoYyxsKXt2YXIgXyxhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxjLmxl''@;'; put 'put ''bmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3IoXz0wO188ZDsrK18paFtfXT1rVChjW19dLGxbX10pO2Zvcig7XzxhOysrXylmW19dPWxbX107cmV0dXJuIGZ1bmN0aW9uKFQpe2ZvcihfPTA7XzxkOysrXylmW19dPWhbX10oVCk7cmV0dXJuIGZ9fWZ1bmN0aW9uIG5K''@;'; put 'put ''ZShjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gckplKGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17fSks''@;'; put 'put ''KG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1rVChjW2hdLGxbaF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIGlKZShjLGwpe2x8fChsPVtdKTt2YXIgaCxh''@;'; put 'put ''PWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBrVChjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8fCJi''@;'; put 'put ''b29sZWFuIj09PWE/RlUobCk6KCJudW1iZXIiPT09YT9EaDoic3RyaW5nIj09PWE/KGQ9R2cobCkpPyhsPWQsU1QpOmphZTpsIGluc3RhbmNlb2YgR2c/U1Q6bCBpbnN0YW5jZW9mIERhdGU/bkplOmZ1bmN0aW9uIG9KZShjKXtyZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5z''@;'; put 'put ''dGFuY2VvZiBEYXRhVmlldyl9KGwpP2lKZTpBcnJheS5pc0FycmF5KGwpP3FhZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0cmluZ3x8aXNOYU4obCk/ckplOkRoKShjLGwpfWZ1bmN0aW9uIEthZSgpe3ZhciBjPXRoaXMsZD1rcyh0aGlz''@;'; put 'put ''Ll9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rpb24gUVhlKCl7dmFyIGdlLHdlLEVlLGM9JFhlLGw9cVhlLGE9SlhlLGQ9S1hlLGg9WFhlLGY9WzAsMS8wXSxf''@;'; put 'put ''PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLFQ9MjUwLFc9WVhlLGllPXhVKCJzdGFydCIsInpvb20iLCJlbmQiKSxaZT01MDAsb3Q9MTUwLGV0PTAseXQ9MTA7ZnVuY3Rpb24ga3QoRm4pe0ZuLnByb3BlcnR5KCJfX3pvb20iLFdhZSkub24oIndoZWVsLnpvb20iLERyLHtwYXNzaXZlOiExfSku''@;'; put 'put ''b24oIm1vdXNlZG93bi56b29tIixfaSkub24oImRibGNsaWNrLnpvb20iLGxpKS5maWx0ZXIoaCkub24oInRvdWNoc3RhcnQuem9vbSIsbXIpLm9uKCJ0b3VjaG1vdmUuem9vbSIsRWkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2FuY2VsLnpvb20iLFpyKS5zdHlsZSgiLXdlYmtpdC10YXAt''@;'; put 'put ''aGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIFN0KEZuLEZyKXtyZXR1cm4oRnI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLEZyKSkpPT09Rm4uaz9GbjpuZXcgaTMoRnIsRm4ueCxGbi55KX1mdW5jdGlvbiBRdChGbixGcixRbil7dmFyIE1yPUZyWzBdLVFu''@;'; put 'put ''WzBdKkZuLmssX3I9RnJbMV0tUW5bMV0qRm4uaztyZXR1cm4gTXI9PT1Gbi54JiZfcj09PUZuLnk/Rm46bmV3IGkzKEZuLmssTXIsX3IpfWZ1bmN0aW9uIHJuKEZuKXtyZXR1cm5bKCtGblswXVswXSsgK0ZuWzFdWzBdKS8yLCgrRm5bMF1bMV0rICtGblsxXVsxXSkvMl19ZnVuY3Rpb24gdm4o''@;'; put 'put ''Rm4sRnIsUW4sTXIpe0ZuLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe05uKHRoaXMsYXJndW1lbnRzKS5ldmVudChNcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXtObih0aGlzLGFyZ3VtZW50cykuZXZlbnQoTXIpLmVuZCgpfSkudHdlZW4o''@;'; put 'put ''Inpvb20iLGZ1bmN0aW9uKCl7dmFyIF9yPXRoaXMsdnQ9YXJndW1lbnRzLE90PU5uKF9yLHZ0KS5ldmVudChNciksY249bC5hcHBseShfcix2dCksRW49bnVsbD09UW4/cm4oY24pOiJmdW5jdGlvbiI9PXR5cGVvZiBRbj9Rbi5hcHBseShfcix2dCk6UW4sT249TWF0aC5tYXgoY25bMV1bMF0t''@;'; put 'put ''Y25bMF1bMF0sY25bMV1bMV0tY25bMF1bMV0pLEpuPV9yLl9fem9vbSxQcj0iZnVuY3Rpb24iPT10eXBlb2YgRnI/RnIuYXBwbHkoX3IsdnQpOkZyLE9yPVcoSm4uaW52ZXJ0KEVuKS5jb25jYXQoT24vSm4uayksUHIuaW52ZXJ0KEVuKS5jb25jYXQoT24vUHIuaykpO3JldHVybiBmdW5jdGlv''@;'; put 'put ''bigkcil7aWYoMT09PSRyKSRyPVByO2Vsc2V7dmFyIFlyPU9yKCRyKSxOcj1Pbi9ZclsyXTskcj1uZXcgaTMoTnIsRW5bMF0tWXJbMF0qTnIsRW5bMV0tWXJbMV0qTnIpfU90Lnpvb20obnVsbCwkcil9fSl9ZnVuY3Rpb24gTm4oRm4sRnIsUW4pe3JldHVybiFRbiYmRm4uX196b29taW5nfHxu''@;'; put 'put ''ZXcgY3IoRm4sRnIpfWZ1bmN0aW9uIGNyKEZuLEZyKXt0aGlzLnRoYXQ9Rm4sdGhpcy5hcmdzPUZyLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWwuYXBwbHkoRm4sRnIpLHRoaXMudGFwcz0wfWZ1bmN0aW9uIERyKEZuLC4uLkZyKXtpZihjLmFwcGx5''@;'; put 'put ''KHRoaXMsYXJndW1lbnRzKSl7dmFyIFFuPU5uKHRoaXMsRnIpLmV2ZW50KEZuKSxNcj10aGlzLl9fem9vbSxfcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sTXIuaypNYXRoLnBvdygyLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKSkpLHZ0PUtnKEZuKTtpZihRbi53aGVlbCkoUW4ubW91''@;'; put 'put ''c2VbMF1bMF0hPT12dFswXXx8UW4ubW91c2VbMF1bMV0hPT12dFsxXSkmJihRbi5tb3VzZVsxXT1Nci5pbnZlcnQoUW4ubW91c2VbMF09dnQpKSxjbGVhclRpbWVvdXQoUW4ud2hlZWwpO2Vsc2V7aWYoTXIuaz09PV9yKXJldHVybjtRbi5tb3VzZT1bdnQsTXIuaW52ZXJ0KHZ0KV0sbVQodGhp''@;'; put 'put ''cyksUW4uc3RhcnQoKX12dyhGbiksUW4ud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbiBPdCgpe1FuLndoZWVsPW51bGwsUW4uZW5kKCl9LG90KSxRbi56b29tKCJtb3VzZSIsYShRdChTdChNcixfciksUW4ubW91c2VbMF0sUW4ubW91c2VbMV0pLFFuLmV4dGVudCxfKSl9fWZ1bmN0aW9uIF9p''@;'; put 'put ''KEZuLC4uLkZyKXtpZighRWUmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49Rm4uY3VycmVudFRhcmdldCxNcj1Obih0aGlzLEZyLCEwKS5ldmVudChGbiksX3I9a3MoRm4udmlldykub24oIm1vdXNlbW92ZS56b29tIixmdW5jdGlvbiBFbihKbil7aWYodncoSm4pLCFNci5tb3Zl''@;'; put 'put ''ZCl7dmFyIFByPUpuLmNsaWVudFgtT3QsT3I9Sm4uY2xpZW50WS1jbjtNci5tb3ZlZD1QcipQcitPcipPcj5ldH1Nci5ldmVudChKbikuem9vbSgibW91c2UiLGEoUXQoTXIudGhhdC5fX3pvb20sTXIubW91c2VbMF09S2coSm4sUW4pLE1yLm1vdXNlWzFdKSxNci5leHRlbnQsXykpfSwhMCku''@;'; put 'put ''b24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24gT24oSm4pe19yLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGZ1bmN0aW9uIGpYZShjLGwpe3ZhciBhPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQ9a3MoYykub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtsJiYo''@;'; put 'put ''ZC5vbigiY2xpY2suZHJhZyIsalUsQlUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxlY3QsZGVs''@;'; put 'put ''ZXRlIGEuX19ub3NlbGVjdCl9KEpuLnZpZXcsTXIubW92ZWQpLHZ3KEpuKSxNci5ldmVudChKbikuZW5kKCl9LCEwKSx2dD1LZyhGbixRbiksT3Q9Rm4uY2xpZW50WCxjbj1Gbi5jbGllbnRZOyhmdW5jdGlvbiBCWGUoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYT1rcyhj''@;'; put 'put ''KS5vbigiZHJhZ3N0YXJ0LmRyYWciLGpVLEJVKTsib25zZWxlY3RzdGFydCJpbiBsP2Eub24oInNlbGVjdHN0YXJ0LmRyYWciLGpVLEJVKToobC5fX25vc2VsZWN0PWwuc3R5bGUuTW96VXNlclNlbGVjdCxsLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiKX0pKEZuLnZpZXcpLHpVKEZuKSxN''@;'; put 'put ''ci5tb3VzZT1bdnQsdGhpcy5fX3pvb20uaW52ZXJ0KHZ0KV0sbVQodGhpcyksTXIuc3RhcnQoKX19ZnVuY3Rpb24gbGkoRm4sLi4uRnIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgUW49dGhpcy5fX3pvb20sTXI9S2coRm4uY2hhbmdlZFRvdWNoZXM/Rm4uY2hhbmdlZFRvdWNo''@;'; put 'put ''ZXNbMF06Rm4sdGhpcyksX3I9UW4uaW52ZXJ0KE1yKSxPdD1hKFF0KFN0KFFuLFFuLmsqKEZuLnNoaWZ0S2V5Py41OjIpKSxNcixfciksbC5hcHBseSh0aGlzLEZyKSxfKTt2dyhGbiksVD4wP2tzKHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihUKS5jYWxsKHZuLE90LE1yLEZuKTprcyh0''@;'; put 'put ''aGlzKS5jYWxsKGt0LnRyYW5zZm9ybSxPdCxNcixGbil9fWZ1bmN0aW9uIG1yKEZuLC4uLkZyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIHZ0LE90LGNuLEVuLFFuPUZuLnRvdWNoZXMsTXI9UW4ubGVuZ3RoLF9yPU5uKHRoaXMsRnIsRm4uY2hhbmdlZFRvdWNoZXMubGVuZ3Ro''@;'; put 'put ''PT09TXIpLmV2ZW50KEZuKTtmb3IoelUoRm4pLE90PTA7T3Q8TXI7KytPdClFbj1bRW49S2coY249UW5bT3RdLHRoaXMpLHRoaXMuX196b29tLmludmVydChFbiksY24uaWRlbnRpZmllcl0sX3IudG91Y2gwPyFfci50b3VjaDEmJl9yLnRvdWNoMFsyXSE9PUVuWzJdJiYoX3IudG91Y2gxPUVu''@;'; put 'put ''LF9yLnRhcHM9MCk6KF9yLnRvdWNoMD1Fbix2dD0hMCxfci50YXBzPTErISFnZSk7Z2UmJihnZT1jbGVhclRpbWVvdXQoZ2UpKSx2dCYmKF9yLnRhcHM8MiYmKHdlPUVuWzBdLGdlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtnZT1udWxsfSxaZSkpLG1UKHRoaXMpLF9yLnN0YXJ0KCkpfX1mdW5j''@;'; put 'put ''dGlvbiBFaShGbiwuLi5Gcil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB2dCxPdCxjbixFbixRbj1Obih0aGlzLEZyKS5ldmVudChGbiksTXI9Rm4uY2hhbmdlZFRvdWNoZXMsX3I9TXIubGVuZ3RoO2Zvcih2dyhGbiksdnQ9MDt2dDxfcjsrK3Z0KWNuPUtnKE90PU1yW3Z0XSx0aGlzKSxRbi50''@;'; put 'put ''b3VjaDAmJlFuLnRvdWNoMFsyXT09PU90LmlkZW50aWZpZXI/UW4udG91Y2gwWzBdPWNuOlFuLnRvdWNoMSYmUW4udG91Y2gxWzJdPT09T3QuaWRlbnRpZmllciYmKFFuLnRvdWNoMVswXT1jbik7aWYoT3Q9UW4udGhhdC5fX3pvb20sUW4udG91Y2gxKXt2YXIgT249UW4udG91Y2gwWzBdLEpu''@;'; put 'put ''PVFuLnRvdWNoMFsxXSxQcj1Rbi50b3VjaDFbMF0sT3I9UW4udG91Y2gxWzFdLCRyPSgkcj1QclswXS1PblswXSkqJHIrKCRyPVByWzFdLU9uWzFdKSokcixZcj0oWXI9T3JbMF0tSm5bMF0pKllyKyhZcj1PclsxXS1KblsxXSkqWXI7T3Q9U3QoT3QsTWF0aC5zcXJ0KCRyL1lyKSksY249WyhP''@;'; put 'put ''blswXStQclswXSkvMiwoT25bMV0rUHJbMV0pLzJdLEVuPVsoSm5bMF0rT3JbMF0pLzIsKEpuWzFdK09yWzFdKS8yXX1lbHNle2lmKCFRbi50b3VjaDApcmV0dXJuO2NuPVFuLnRvdWNoMFswXSxFbj1Rbi50b3VjaDBbMV19UW4uem9vbSgidG91Y2giLGEoUXQoT3QsY24sRW4pLFFuLmV4dGVu''@;'; put 'put ''dCxfKSl9fWZ1bmN0aW9uIFpyKEZuLC4uLkZyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHZ0LE90LFFuPU5uKHRoaXMsRnIpLmV2ZW50KEZuKSxNcj1Gbi5jaGFuZ2VkVG91Y2hlcyxfcj1Nci5sZW5ndGg7Zm9yKHpVKEZuKSxFZSYmY2xlYXJUaW1lb3V0KEVlKSxFZT1zZXRUaW1lb3V0KGZ1''@;'; put 'put ''bmN0aW9uKCl7RWU9bnVsbH0sWmUpLHZ0PTA7dnQ8X3I7Kyt2dClPdD1Nclt2dF0sUW4udG91Y2gwJiZRbi50b3VjaDBbMl09PT1PdC5pZGVudGlmaWVyP2RlbGV0ZSBRbi50b3VjaDA6UW4udG91Y2gxJiZRbi50b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiZkZWxldGUgUW4udG91Y2gxO2lm''@;'; put 'put ''KFFuLnRvdWNoMSYmIVFuLnRvdWNoMCYmKFFuLnRvdWNoMD1Rbi50b3VjaDEsZGVsZXRlIFFuLnRvdWNoMSksUW4udG91Y2gwKVFuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoUW4udG91Y2gwWzBdKTtlbHNlIGlmKFFuLmVuZCgpLDI9PT1Rbi50YXBzJiYoT3Q9S2coT3QsdGhpcyks''@;'; put 'put ''TWF0aC5oeXBvdCh3ZVswXS1PdFswXSx3ZVsxXS1PdFsxXSk8eXQpKXt2YXIgY249a3ModGhpcykub24oImRibGNsaWNrLnpvb20iKTtjbiYmY24uYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGt0LnRyYW5zZm9ybT1mdW5jdGlvbihGbixGcixRbixNcil7dmFyIF9yPUZuLnNlbGVj''@;'; put 'put ''dGlvbj9Gbi5zZWxlY3Rpb24oKTpGbjtfci5wcm9wZXJ0eSgiX196b29tIixXYWUpLEZuIT09X3I/dm4oRm4sRnIsUW4sTXIpOl9yLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXtObih0aGlzLGFyZ3VtZW50cykuZXZlbnQoTXIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBGcj9Gci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6RnIpLmVuZCgpfSl9LGt0LnNjYWxlQnk9ZnVuY3Rpb24oRm4sRnIsUW4sTXIpe2t0LnNjYWxlVG8oRm4sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20uayooImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJn''@;'; put 'put ''dW1lbnRzKTpGcil9LFFuLE1yKX0sa3Quc2NhbGVUbz1mdW5jdGlvbihGbixGcixRbixNcil7a3QudHJhbnNmb3JtKEZuLGZ1bmN0aW9uKCl7dmFyIF9yPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHZ0PXRoaXMuX196b29tLE90PW51bGw9PVFuP3JuKF9yKToiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''UW4/UW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOlFuLGNuPXZ0LmludmVydChPdCksRW49ImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGcjtyZXR1cm4gYShRdChTdCh2dCxFbiksT3QsY24pLF9yLF8pfSxRbixNcil9LGt0LnRyYW5zbGF0ZUJ5PWZ1bmN0''@;'; put 'put ''aW9uKEZuLEZyLFFuLE1yKXtrdC50cmFuc2Zvcm0oRm4sZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIEZyP0ZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpGciwiZnVuY3Rpb24iPT10eXBlb2YgUW4/UW4uYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpOlFuKSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxfKX0sbnVsbCxNcil9LGt0LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKEZuLEZyLFFuLE1yLF9yKXtrdC50cmFuc2Zvcm0oRm4sZnVuY3Rpb24oKXt2YXIgdnQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksT3Q9dGhpcy5fX3pvb20sY249''@;'; put 'put ''bnVsbD09TXI/cm4odnQpOiJmdW5jdGlvbiI9PXR5cGVvZiBNcj9Nci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6TXI7cmV0dXJuIGEoeFQudHJhbnNsYXRlKGNuWzBdLGNuWzFdKS5zY2FsZShPdC5rKS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIEZyPy1Gci5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk6LUZyLCJmdW5jdGlvbiI9PXR5cGVvZiBRbj8tUW4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1RbiksdnQsXyl9LE1yLF9yKX0sY3IucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbihGbil7cmV0dXJuIEZuJiYodGhpcy5zb3VyY2VFdmVudD1GbiksdGhpc30sc3RhcnQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oRm4sRnIpe3JldHVybiB0aGlzLm1vdXNlJiYibW91c2UiIT09Rm4mJih0aGlzLm1vdXNlWzFdPUZyLmludmVydCh0aGlzLm1v''@;'; put 'put ''dXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT1GbiYmKHRoaXMudG91Y2gwWzFdPUZyLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09Rm4mJih0aGlzLnRvdWNoMVsxXT1Gci5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29t''@;'; put 'put ''PUZyLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1pdDpmdW5jdGlvbihGbil7dmFyIEZyPWtzKHRoaXMudGhhdCkuZGF0dW0o''@;'; put 'put ''KTtpZS5jYWxsKEZuLHRoaXMudGhhdCxuZXcgR1hlKEZuLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDprdCx0eXBlOkZuLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOmllfSksRnIpfX0sa3Qud2hlZWxEZWx0YT1mdW5jdGlvbihGbil7cmV0dXJuIGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg/KGQ9ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuOk1UKCtGbiksa3QpOmR9LGt0LmZpbHRlcj1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIEZuP0ZuOk1UKCEhRm4pLGt0KTpjfSxrdC50b3VjaGFibGU9ZnVu''@;'; put 'put ''Y3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBGbj9GbjpNVCghIUZuKSxrdCk6aH0sa3QuZXh0ZW50PWZ1bmN0aW9uKEZuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgRm4/Rm46TVQoW1srRm5bMF1b''@;'; put 'put ''MF0sK0ZuWzBdWzFdXSxbK0ZuWzFdWzBdLCtGblsxXVsxXV1dKSxrdCk6bH0sa3Quc2NhbGVFeHRlbnQ9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhmWzBdPStGblswXSxmWzFdPStGblsxXSxrdCk6W2ZbMF0sZlsxXV19LGt0LnRyYW5zbGF0ZUV4dGVudD1mdW5jdGlv''@;'; put 'put ''bihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF9bMF1bMF09K0ZuWzBdWzBdLF9bMV1bMF09K0ZuWzFdWzBdLF9bMF1bMV09K0ZuWzBdWzFdLF9bMV1bMV09K0ZuWzFdWzFdLGt0KTpbW19bMF1bMF0sX1swXVsxXV0sW19bMV1bMF0sX1sxXVsxXV1dfSxrdC5jb25zdHJhaW49ZnVuY3Rp''@;'; put 'put ''b24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPUZuLGt0KTphfSxrdC5kdXJhdGlvbj1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9K0ZuLGt0KTpUfSxrdC5pbnRlcnBvbGF0ZT1mdW5jdGlvbihGbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFc9Rm4s''@;'; put 'put ''a3QpOld9LGt0Lm9uPWZ1bmN0aW9uKCl7dmFyIEZuPWllLm9uLmFwcGx5KGllLGFyZ3VtZW50cyk7cmV0dXJuIEZuPT09aWU/a3Q6Rm59LGt0LmNsaWNrRGlzdGFuY2U9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhldD0oRm49K0ZuKSpGbixrdCk6TWF0aC5zcXJ0KGV0''@;'; put 'put ''KX0sa3QudGFwRGlzdGFuY2U9ZnVuY3Rpb24oRm4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5dD0rRm4sa3QpOnl0fSxrdH0oKS5zY2FsZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudCkudHJhbnNsYXRlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4''@;'; put 'put ''dGVudCkuaW50ZXJwb2xhdGUoa1QpLm9uKCJ6b29tIixmdW5jdGlvbiBsKF8pe2tzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSkuYXR0cigidHJhbnNmb3JtIixfLnRyYW5zZm9ybSksYy5fZGlzcGF0Y2guY2FsbCgiem9vbSIsYyl9KTt0aGlzLl96b29tQmVoYXZpb3I9aDt2YXIgZj1r''@;'; put 'put ''cyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpO3JldHVybiBkLmNhbGwoaCksdGhpcy5fYWN0aXZlfHxHVS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09RVQoZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24gV1UoYyl7dmFyIGw9dGhpcy5fdHJhbnNsYXRpb24sYT10aGlz''@;'; put 'put ''Ll9zY2FsZSxkPWMuZGF0dW0oKS50cmFuc2xhdGlvbixoPWMuZGF0dW0oKS5zY2FsZSxmPUVUKHRoaXMuX3pvb21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gbCYmKGY9KGY9Zi5zY2FsZSgxL2EpKS50cmFuc2xhdGUoLWwueCwtbC55KSksKGY9Zi50cmFuc2xhdGUoZC54LGQueSkpLnNjYWxl''@;'; put 'put ''KGgpfWZ1bmN0aW9uIEdVKGMpe3RoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0odGhpcy5fem9vbVNlbGVjdGlvbixXVS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUsdGhpcy5fb3JpZ2lu''@;'; put 'put ''YWxUcmFuc2Zvcm09eFQudHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIGhKZShjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IGtUKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gWGFlKGMpe3JldHVybiJlZGdlIj09Yy5hdHRyaWJ1dGVz''@;'; put 'put ''LmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiBKYWUoYyl7cmV0dXJuIGMucGFyZW50JiZYYWUoYy5wYXJlbnQpfWZ1bmN0aW9uIFFhZShjKXt2YXIgbD10aGlzLl90cmFuc2l0aW9u''@;'; put 'put ''LGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyxfPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMmJm51''@;'; put 'put ''bGwhPWwsVD10aGlzLl9hdHRyaWJ1dGVyLFc9dGhpczt2YXIgd2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciBFZT10aGlzLl9qb2JzO2lmKFcuX2FjdGl2ZSlyZXR1cm4gRWUucHVzaChudWxsKSx0aGlzO3dlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDAp''@;'; put 'put ''Lm9uKCJlbmQiLGZ1bmN0aW9uKCl7Vy5fYWN0aXZlPSExLDAhPUVlLmxlbmd0aCYmKEVlLnNoaWZ0KCksVy5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmd2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlv''@;'; put 'put ''blN0YXJ0IixXKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7Vy5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsVyl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe1cuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLFcpLFcuX2Rpc3BhdGNoLmNh''@;'; put 'put ''bGwoImVuZCIsVyksYyYmYy5jYWxsKFcpfSk7dmFyIFplPXRoaXMuX2RhdGEsb3Q9d2Uuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtaZV0sZnVuY3Rpb24oZXQpe3JldHVybiBldC5rZXl9KTtyZXR1cm4gb3Q9b3QuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKG90KSxmdW5jdGlvbiBnZShl''@;'; put 'put ''dCl7dmFyIHl0PWtzKHRoaXMpO2lmKCJzdmciPT1ldC50YWcpe3ZhciBrdD1XLl9vcHRpb25zO2lmKG51bGwhPWt0LndpZHRofHxudWxsIT1rdC5oZWlnaHQpe3ZhciBTdD1rdC53aWR0aCxRdD1rdC5oZWlnaHQ7bnVsbD09U3Q/U3Q9NCpldC5hdHRyaWJ1dGVzLndpZHRoLnJlcGxhY2UoInB0''@;'; put 'put ''IiwiIikvMzooeXQuYXR0cigid2lkdGgiLFN0KSxldC5hdHRyaWJ1dGVzLndpZHRoPVN0KSxudWxsPT1RdD9RdD00KmV0LmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzooeXQuYXR0cigiaGVpZ2h0IixRdCksZXQuYXR0cmlidXRlcy5oZWlnaHQ9UXQpLGt0LmZpdHx8KHl0''@;'; put 'put ''LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKlN0LzQva3Quc2NhbGV9ICR7MypRdC80L2t0LnNjYWxlfWApLGV0LmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypTdC80L2t0LnNjYWxlfSAkezMqUXQvNC9rdC5zY2FsZX1gKX0xIT1rdC5zY2FsZSYmKGt0LmZpdHx8bnVsbD09a3Qud2lkdGgm''@;'; put 'put ''Jm51bGw9PWt0LmhlaWdodCkmJihTdD1ldC5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxRdD1ldC5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSx5dC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7U3Qva3Quc2NhbGV9ICR7UXQva3Quc2NhbGV9YCksZXQuYXR0cmlidXRl''@;'; put 'put ''cy52aWV3Qm94PWAwIDAgJHtTdC9rdC5zY2FsZX0gJHtRdC9rdC5zY2FsZX1gKX1UJiZ5dC5lYWNoKFQpO3ZhciBybj1ldC50YWcsdm49ZXQuYXR0cmlidXRlcyxObj15dC5ub2RlKCkuYXR0cmlidXRlcztpZihObilmb3IodmFyIGNyPTA7Y3I8Tm4ubGVuZ3RoO2NyKyspe3ZhciBEcj1Obltj''@;'; put 'put ''cl0sX2k9RHIubmFtZTtpZigieG1sbnMiIT1faS5zcGxpdCgiOiIpWzBdJiZEci5uYW1lc3BhY2VVUkkpe3ZhciBsaT1Eci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtfaT1saVtsaS5sZW5ndGgtMV0rIjoiK19pfV9pIGluIHZufHwodm5bX2ldPW51bGwpfXZhciBFaT0hMSxacj0hMTtpZiho''@;'; put 'put ''JiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZldC5hbHRlcm5hdGl2ZU9sZCYmKFpyPSEwKSwoInBvbHlnb24iPT1ybnx8ImVsbGlwc2UiPT1ybikmJmV0LmFsdGVybmF0aXZlTmV3JiYoRWk9ITApLCJwb2x5Z29uIj09dGhpcy5u''@;'; put 'put ''b2RlTmFtZSYmInBvbHlnb24iPT1ybiYmZXQuYWx0ZXJuYXRpdmVPbGQpe3ZhciBGbj1HYWUoeXQpO2lmKCFmKXt2YXIgUW49Rm4uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KE1yPWV0LmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0aD09UW4mJihFaT0h''@;'; put 'put ''MSxacj0hMSl9fWlmKFpyKXt2YXIgT3Q9JGFlKHl0LGV0LmFsdGVybmF0aXZlT2xkKTtPdC5kYXRhKFtldF0sZnVuY3Rpb24oKXtyZXR1cm4gZXQua2V5fSkseXQ9T3R9RWkmJihybj0icGF0aCIsdm49ZXQuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIEVuPXl0O2lmKGwmJihFbj1F''@;'; put 'put ''bi50cmFuc2l0aW9uKGwpLGEmJkVuLmZpbHRlcihmdW5jdGlvbihJaSl7cmV0dXJuIiMiPT1JaS50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLEVuLmZpbHRlcihmdW5jdGlvbihJaSl7cmV0dXJuIiMiPT1JaS50YWdbMF0/bnVsbDp0aGlzfSkub24oImVuZCIsZnVuY3Rp''@;'; put 'put ''b24oSWkpe2tzKHRoaXMpLmF0dHIoInN0eWxlIixJaSYmSWkuYXR0cmlidXRlcyYmSWkuYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksXyYmInBhdGgiPT1ybiYmZXQub2Zmc2V0KXt2YXIgSm49ZXQudG90YWxMZW5ndGg7eXQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsSm4rIiAiK0puKS5h''@;'; put 'put ''dHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSm4pLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK2V0Lm9mZnNldC54KyIsIitldC5vZmZzZXQueSsiKSIpLHZuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsdm4udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsRW4uYXR0cigic3Ryb2tlLWRh''@;'; put 'put ''c2hvZmZzZXQiLHZuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLHZuLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe2tzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7a3ModGhpcykuYXR0cigic3Ryb2tlLWRh''@;'; put 'put ''c2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZihfJiYicG9seWdvbiI9PXJuJiZKYWUoZXQpJiZldC5vZmZzZXQmJiJwYXRoIj09ZXQucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIE9yPWtzKHl0Lm5vZGUo''@;'; put 'put ''KS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksJHI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksWXI9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgpLE5yPU9yLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKGV0LnRvdGFsTGVuZ3RoLTEpLFJp''@;'; put 'put ''PTE4MCpNYXRoLmF0YW4yKFlyLnktTnIueSxZci54LU5yLngpL01hdGguUEksWG89JHIueC1Zci54K2V0Lm9mZnNldC54LEdvPSRyLnktWXIueStldC5vZmZzZXQueTt5dC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIitYbysiLCIrR28rIikiKSxFbi5hdHRyVHdlZW4oInRyYW5zZm9y''@;'; put 'put ''bSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oSWkpe3ZhciBRcz1Pci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChldC50b3RhbExlbmd0aCpJaSksbGE9T3Iubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoZXQudG90YWxMZW5ndGgqSWkrMSksRnM9MTgwKk1hdGguYXRhbjIobGEueS1Rcy55''@;'; put 'put ''LGxhLngtUXMueCkvTWF0aC5QSS1SaTtyZXR1cm4idHJhbnNsYXRlKCIrKFhvPVFzLngtWXIueCtldC5vZmZzZXQueCooMS1JaSkpKyIsIisoR289UXMueS1Zci55K2V0Lm9mZnNldC55KigxLUlpKSkrIikgcm90YXRlKCIrRnMrIiAiK1lyLngrIiAiK1lyLnkrIikifX0pLm9uKCJzdGFydCIs''@;'; put 'put ''ZnVuY3Rpb24oKXtrcyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe2tzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgSnM9ZCYmbCYmInBhdGgiPT1ybiYmbnVsbCE9eXQuYXR0cigiZCIpO2Zvcih2YXIgZ2Egb2YgT2JqZWN0Lmtl''@;'; put 'put ''eXModm4pKXt2YXIgdW89dm5bZ2FdO2lmKEpzJiYiZCI9PWdhKXt2YXIgTXI7KE1yPShldC5hbHRlcm5hdGl2ZU9sZHx8ZXQpLnBvaW50cykmJkVuLmF0dHJUd2VlbigiZCIsaEplKE1yLHVvKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09Z2EmJmV0LnRyYW5zbGF0aW9uKWlmKGwpe3ZhciBBdD1F''@;'; put 'put ''bi5vbigiZW5kIik7RW4ub24oInN0YXJ0IixmdW5jdGlvbigpe1cuX3pvb21CZWhhdmlvciYmRW4udHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBJaT10aGlzO3JldHVybiBmdW5jdGlvbihRcyl7SWkuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLEVhZShFVChXLl96b29t''@;'; put 'put ''U2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxXVS5jYWxsKFcseXQpLnRvU3RyaW5nKCkpKFFzKSl9fSl9KS5vbigiZW5kIixmdW5jdGlvbigpe0F0LmNhbGwodGhpcyksVy5fem9vbUJlaGF2aW9yJiZHVS5jYWxsKFcseXQpfSl9ZWxzZSBXLl96b29tQmVoYXZpb3ImJihHVS5jYWxsKFcs''@;'; put 'put ''eXQpLHVvPVdVLmNhbGwoVyx5dCkudG9TdHJpbmcoKSk7RW4uYXR0cihnYSx1byl9fUVpJiZFbi5vbigiZW5kIixmdW5jdGlvbihJaSxRcyxsYSl7JGFlKE90PWtzKHRoaXMpLElpKS5kYXRhKFtJaV0sZnVuY3Rpb24oKXtyZXR1cm4gSWkua2V5fSl9KSxldC50ZXh0JiZFbi50ZXh0KGV0LnRl''@;'; put 'put ''eHQpLGZ1bmN0aW9uIGllKGV0KXt2YXIgeXQ9ZXQuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGV0Lm5vZGUoKS5jaGlsZE5vZGVzfSksa3Q9KHl0PXl0LmRhdGEoZnVuY3Rpb24ocm4pe3JldHVybiBybi5jaGlsZHJlbn0sZnVuY3Rpb24ocm4pe3JldHVybiBybi5rZXl9KSkuZW50ZXIo''@;'; put 'put ''KS5hcHBlbmQoZnVuY3Rpb24ocm4pe3ZhciB2bj1VVShybik7cmV0dXJuIiN0ZXh0Ij09cm4udGFnJiZhJiYodm4ubm9kZVZhbHVlPXJuLnRleHQpLHZufSk7KGF8fF8mJlhhZShldC5kYXR1bSgpKSkmJmt0LmZpbHRlcihmdW5jdGlvbihybil7cmV0dXJuIiMiPT1ybi50YWdbMF0/bnVsbDp0''@;'; put 'put ''aGlzfSkuZWFjaChmdW5jdGlvbihybil7dmFyIHZuPWtzKHRoaXMpO2Zvcih2YXIgTm4gb2YgT2JqZWN0LmtleXMocm4uYXR0cmlidXRlcykpdm4uYXR0cihObixybi5hdHRyaWJ1dGVzW05uXSl9KS5maWx0ZXIoZnVuY3Rpb24ocm4pe3JldHVybiJzdmciPT1ybi50YWd8fCJnIj09cm4udGFn''@;'; put 'put ''P251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKTt2YXIgUXQ9eXQuZXhpdCgpO1QmJlF0LmVhY2goVCksbCYmKFF0PVF0LnRyYW5zaXRpb24obCksYSYmUXQuZmlsdGVyKGZ1bmN0aW9uKHJuKXtyZXR1cm4iIyI9PXJuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkp''@;'; put 'put ''LFF0PVF0LnJlbW92ZSgpLCh5dD1rdC5tZXJnZSh5dCkpLmVhY2goZ2UpfSh5dCl9LmNhbGwob3Qubm9kZSgpLFplKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJkthZS5jYWxsKHRoaXMpLFcuX2Rpc3BhdGNoLmNhbGwoInJlbmRlckVuZCIsVyksbnVsbD09bCYm''@;'; put 'put ''KHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfUVULnByb3RvdHlwZT1pMy5wcm90b3R5cGU7dmFyIGJKZT1BcnJheUJ1ZmZlcixRbD1VaW50OEFycmF5LEFUPVVpbnQxNkFycmF5LHlKZT1JbnQxNkFycmF5LFRUPUludDMyQXJyYXksJFU9ZnVu''@;'; put 'put ''Y3Rpb24oYyxsLGEpe2lmKFFsLnByb3RvdHlwZS5zbGljZSlyZXR1cm4gUWwucHJvdG90eXBlLnNsaWNlLmNhbGwoYyxsLGEpOyhudWxsPT1sfHxsPDApJiYobD0wKSwobnVsbD09YXx8YT5jLmxlbmd0aCkmJihhPWMubGVuZ3RoKTt2YXIgZD1uZXcgUWwoYS1sKTtyZXR1cm4gZC5zZXQoYy5z''@;'; put 'put ''dWJhcnJheShsLGEpKSxkfSxidz1mdW5jdGlvbihjLGwsYSxkKXtpZihRbC5wcm90b3R5cGUuZmlsbClyZXR1cm4gUWwucHJvdG90eXBlLmZpbGwuY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDsr''@;'; put 'put ''K2EpY1thXT1sO3JldHVybiBjfSx3SmU9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoUWwucHJvdG90eXBlLmNvcHlXaXRoaW4pcmV0dXJuIFFsLnByb3RvdHlwZS5jb3B5V2l0aGluLmNhbGwoYyxsLGEsZCk7Zm9yKChudWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihk''@;'; put 'put ''PWMubGVuZ3RoKTthPGQ7KWNbbCsrXT1jW2ErK119LENKZT1bImludmFsaWQgenN0ZCBkYXRhIiwid2luZG93IHNpemUgdG9vIGxhcmdlICg+MjA0Nk1CKSIsImludmFsaWQgYmxvY2sgdHlwZSIsIkZTRSBhY2N1cmFjeSB0b28gaGlnaCIsIm1hdGNoIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIs''@;'; put 'put ''InVuZXhwZWN0ZWQgRU9GIl0sZ2M9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPW5ldyBFcnJvcihsfHxDSmVbY10pO2lmKGQuY29kZT1jLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkLGdjKSwhYSl0aHJvdyBkO3JldHVybiBkfSxlbGU9ZnVuY3Rpb24o''@;'; put 'put ''YyxsLGEpe2Zvcih2YXIgZD0wLGg9MDtkPGE7KytkKWh8PWNbbCsrXTw8KGQ8PDMpO3JldHVybiBofSxTSmU9ZnVuY3Rpb24oYyxsKXt2YXIgYSxoPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1oJiYyNTM9PWNbM10pe3ZhciBmPWNbNF0sXz1mPj41JjEsVD1mPj4yJjEsVz0z''@;'; put 'put ''JmYsaWU9Zj4+Njs4JmYmJmdjKDApO3ZhciBnZT02LV8sd2U9Mz09Vz80OlcsRWU9ZWxlKGMsZ2Usd2UpLFplPWllPzE8PGllOl8sb3Q9ZWxlKGMsZ2UrPXdlLFplKSsoMT09aWUmJjI1NiksZXQ9b3Q7aWYoIV8pe3ZhciB5dD0xPDwxMCsoY1s1XT4+Myk7ZXQ9eXQrKHl0Pj4zKSooNyZjWzVd''@;'; put 'put ''KX1ldD4yMTQ1Mzg2NDk2JiZnYygxKTt2YXIga3Q9bmV3IFFsKCgxPT1sP290fHxldDpsPzA6ZXQpKzEyKTtyZXR1cm4ga3RbMF09MSxrdFs0XT00LGt0WzhdPTgse2I6Z2UrWmUseTowLGw6MCxkOkVlLHc6bCYmMSE9bD9sOmt0LnN1YmFycmF5KDEyKSxlOmV0LG86bmV3IFRUKGt0LmJ1ZmZl''@;'; put 'put ''ciwwLDMpLHU6b3QsYzpULG06TWF0aC5taW4oMTMxMDcyLGV0KX19aWYoMjU0ODE4OTM9PShoPj40fGNbM108PDIwKSlyZXR1cm4gOCsoKChhPWMpWzRdfGFbNV08PDh8YVs2XTw8MTZ8YVs3XTw8MjQpPj4+MCk7Z2MoMCl9LEpnPWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0wOzE8PGw8PWM7Kyts''@;'; put 'put ''KTtyZXR1cm4gbC0xfSx5dz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTtoPmEmJmdjKDMpO2Zvcih2YXIgZj0xPDxoLF89ZixUPS0xLFc9LTEsaWU9LTEsZ2U9Zix3ZT1uZXcgYkplKDUxMisoZjw8MikpLEVlPW5ldyB5SmUod2UsMCwyNTYpLFplPW5ldyBB''@;'; put 'put ''VCh3ZSwwLDI1Niksb3Q9bmV3IEFUKHdlLDUxMixmKSxldD01MTIrKGY8PDEpLHl0PW5ldyBRbCh3ZSxldCxmKSxrdD1uZXcgUWwod2UsZXQrZik7VDwyNTUmJl8+MDspe3ZhciBTdD1KZyhfKzEpLFF0PWQ+PjMscm49KDE8PFN0KzEpLTEsdm49KGNbUXRdfGNbUXQrMV08PDh8Y1tRdCsyXTw8''@;'; put 'put ''MTYpPj4oNyZkKSZybixObj0oMTw8U3QpLTEsY3I9cm4tXy0xLERyPXZuJk5uO2lmKERyPGNyPyhkKz1TdCx2bj1Ecik6KGQrPVN0KzEsdm4+Tm4mJih2bi09Y3IpKSxFZVsrK1RdPS0tdm4sLTE9PXZuPyhfKz12bix5dFstLWdlXT1UKTpfLT12biwhdm4pZG97dmFyIF9pPWQ+PjM7Vz0oY1tf''@;'; put 'put ''aV18Y1tfaSsxXTw8OCk+Pig3JmQpJjMsZCs9MixUKz1XfXdoaWxlKDM9PVcpfShUPjI1NXx8XykmJmdjKDApO2Zvcih2YXIgbGk9MCxtcj0oZj4+MSkrKGY+PjMpKzMsRWk9Zi0xLFpyPTA7WnI8PVQ7Kytacil7dmFyIEZuPUVlW1pyXTtpZihGbjwxKVplW1pyXT0tRm47ZWxzZSBmb3IoaWU9''@;'; put 'put ''MDtpZTxGbjsrK2llKXt5dFtsaV09WnI7ZG97bGk9bGkrbXImRWl9d2hpbGUobGk+PWdlKX19Zm9yKGxpJiZnYygwKSxpZT0wO2llPGY7KytpZSl7dmFyIEZyPVplW3l0W2llXV0rKyxRbj1rdFtpZV09aC1KZyhGcik7b3RbaWVdPShGcjw8UW4pLWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6eXQs''@;'; put 'put ''bjprdCx0Om90fV19LE1KZT15dyhuZXcgUWwoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSx4SmU9eXcobmV3IFFsKFszMywyMCwxOTYsMjQsOTksMTQwLDMzLDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4''@;'; put 'put ''LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLEVKZT15dyhuZXcgUWwoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sdGxlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoLGQ9bmV3IFRUKGEpLGg9MDtoPGE7''@;'; put 'put ''KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxxVT1uZXcgUWwobmV3IFRUKFswLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIyMDkzXSkuYnVmZmVyLDAsMzYpLGtKZT10bGUocVUsMCksS1U9bmV3IFFsKG5ldyBUVChbMCwwLDAsMCwwLDAs''@;'; put 'put ''MCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLEFKZT10bGUoS1UsMyksd3c9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sXz0oMTw8YS5iKS0xLFQ9LWEuYjtmfHxnYygw''@;'; put 'put ''KTtmb3IodmFyIFc9MCxpZT1hLmIsZ2U9KGQ8PDMpLTgrSmcoZiktaWUsd2U9LTE7Z2U+VCYmd2U8aDspe3ZhciBFZT1nZT4+MztsWysrd2VdPWEuc1tXPShXPDxpZXwoY1tFZV18Y1tFZSsxXTw8OHxjW0VlKzJdPDwxNik+Pig3JmdlKSkmX10sZ2UtPWllPWEubltXXX1nZT09VCYmd2UrMT09''@;'; put 'put ''aHx8Z2MoMCl9LFRKZT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NixoPWwubGVuZ3RoKzM+PjIsZj1oPDwxLF89aCtmO3d3KGMuc3ViYXJyYXkoZCxkKz1jWzBdfGNbMV08PDgpLGwuc3ViYXJyYXkoMCxoKSxhKSx3dyhjLnN1YmFycmF5KGQsZCs9Y1syXXxjWzNdPDw4KSxsLnN1YmFycmF5KGgs''@;'; put 'put ''ZiksYSksd3coYy5zdWJhcnJheShkLGQrPWNbNF18Y1s1XTw8OCksbC5zdWJhcnJheShmLF8pLGEpLHd3KGMuc3ViYXJyYXkoZCksbC5zdWJhcnJheShfKSxhKX0sREplPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZCxoPWwuYixmPWNbaF0sXz1mPj4xJjM7bC5sPTEmZjt2YXIgVD1mPj4zfGNbaCsx''@;'; put 'put ''XTw8NXxjW2grMl08PDEzLFc9KGgrPTMpK1Q7aWYoMT09XylyZXR1cm4gaD49Yy5sZW5ndGg/dm9pZCAwOihsLmI9aCsxLGE/KGJ3KGEsY1toXSxsLnksbC55Kz1UKSxhKTpidyhuZXcgUWwoVCksY1toXSkpO2lmKCEoVz5jLmxlbmd0aCkpe2lmKDA9PV8pcmV0dXJuIGwuYj1XLGE/KGEuc2V0''@;'; put 'put ''KGMuc3ViYXJyYXkoaCxXKSxsLnkpLGwueSs9VCxhKTokVShjLGgsVyk7aWYoMj09Xyl7dmFyIGllPWNbaF0sZ2U9MyZpZSx3ZT1pZT4+MiYzLEVlPWllPj40LFplPTAsb3Q9MDtnZTwyPzEmd2U/RWV8PWNbKytoXTw8NHwoMiZ3ZSYmY1srK2hdPDwxMik6RWU9aWU+PjM6KG90PXdlLHdlPDI/''@;'; put 'put ''KEVlfD0oNjMmY1srK2hdKTw8NCxaZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09d2U/KEVlfD1jWysraF08PDR8KDMmY1srK2hdKTw8MTIsWmU9Y1toXT4+MnxjWysraF08PDYpOihFZXw9Y1srK2hdPDw0fCg2MyZjWysraF0pPDwxMixaZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSks''@;'; put 'put ''KytoO3ZhciBldD1hP2Euc3ViYXJyYXkobC55LGwueStsLm0pOm5ldyBRbChsLm0pLHl0PWV0Lmxlbmd0aC1FZTtpZigwPT1nZSlldC5zZXQoYy5zdWJhcnJheShoLGgrPUVlKSx5dCk7ZWxzZSBpZigxPT1nZSlidyhldCxjW2grK10seXQpO2Vsc2V7dmFyIGt0PWwuaDtpZigyPT1nZSl7dmFy''@;'; put 'put ''IFN0PWZ1bmN0aW9uKGdhLHVvKXt2YXIgQXQ9MCxJaT0tMSxRcz1uZXcgUWwoMjkyKSxsYT1nYVt1b10sRnM9UXMuc3ViYXJyYXkoMCwyNTYpLGVjPVFzLnN1YmFycmF5KDI1NiwyNjgpLENhPW5ldyBBVChRcy5idWZmZXIsMjY4KTtpZihsYTwxMjgpe3ZhciBSaD15dyhnYSx1bysxLDYpLERs''@;'; put 'put ''PVJoWzFdLHgyPVJoWzBdPDwzLHU0PWdhW3VvKz1sYV07dTR8fGdjKDApO2Zvcih2YXIgT2g9MCxDZD0wLCRjPURsLmIsU2Q9JGMsSnU9KCsrdW88PDMpLTgrSmcodTQpOyEoKEp1LT0kYyk8eDIpOyl7dmFyIE0xPUp1Pj4zO2lmKEZzWysrSWldPURsLnNbT2grPShnYVtNMV18Z2FbTTErMV08''@;'; put 'put ''PDgpPj4oNyZKdSkmKDE8PCRjKS0xXSwoSnUtPVNkKTx4MilicmVhaztDZCs9KGdhW00xPUp1Pj4zXXxnYVtNMSsxXTw8OCk+Pig3Jkp1KSYoMTw8U2QpLTEsRnNbKytJaV09RGwuc1tDZF0sJGM9RGwubltPaF0sT2g9RGwudFtPaF0sU2Q9RGwubltDZF0sQ2Q9RGwudFtDZF19KytJaT4yNTUm''@;'; put 'put ''JmdjKDApfWVsc2V7Zm9yKElpPWxhLTEyNztBdDxJaTtBdCs9Mil7dmFyIE11PWdhWysrdW9dO0ZzW0F0XT1NdT4+NCxGc1tBdCsxXT0xNSZNdX0rK3VvfXZhciBhdT0wO2ZvcihBdD0wO0F0PElpOysrQXQpKGQ0PUZzW0F0XSk+MTEmJmdjKDApLGF1Kz1kNCYmMTw8ZDQtMTt2YXIgeDE9Smco''@;'; put 'put ''YXUpKzEsRTI9MTw8eDEsJDc9RTItYXU7Zm9yKCQ3JiQ3LTEmJmdjKDApLEZzW0lpKytdPUpnKCQ3KSsxLEF0PTA7QXQ8SWk7KytBdCl7dmFyIGQ0PUZzW0F0XTsrK2VjW0ZzW0F0XT1kNCYmeDErMS1kNF19dmFyIFN3PW5ldyBRbChFMjw8MSksZW09U3cuc3ViYXJyYXkoMCxFMiksTXc9U3cu''@;'; put 'put ''c3ViYXJyYXkoRTIpO2ZvcihDYVt4MV09MCxBdD14MTtBdD4wOy0tQXQpe3ZhciB4dz1DYVtBdF07YncoTXcsQXQseHcsQ2FbQXQtMV09eHcrZWNbQXRdKigxPDx4MS1BdCkpfWZvcihDYVswXSE9RTImJmdjKDApLEF0PTA7QXQ8SWk7KytBdCl7dmFyIHRtPUZzW0F0XTtpZih0bSl7dmFyIEV3''@;'; put 'put ''PUNhW3RtXTtidyhlbSxBdCxFdyxDYVt0bV09RXcrKDE8PHgxLXRtKSl9fXJldHVyblt1byx7bjpNdyxiOngxLHM6ZW19XX0oYyxoKTtaZSs9aC0oaD1TdFswXSksbC5oPWt0PVN0WzFdfWVsc2Uga3R8fGdjKDApOyhvdD9USmU6d3cpKGMuc3ViYXJyYXkoaCxoKz1aZSksZXQuc3ViYXJyYXko''@;'; put 'put ''eXQpLGt0KX12YXIgUXQ9Y1toKytdO2lmKFF0KXsyNTU9PVF0P1F0PTMyNTEyKyhjW2grK118Y1toKytdPDw4KTpRdD4xMjcmJihRdD1RdC0xMjg8PDh8Y1toKytdKTt2YXIgcm49Y1toKytdOzMmcm4mJmdjKDApO2Zvcih2YXIgdm49W3hKZSxFSmUsTUplXSxObj0yO05uPi0xOy0tTm4pe3Zh''@;'; put 'put ''ciBjcj1ybj4+MisoTm48PDEpJjM7aWYoMT09Y3Ipe3ZhciBEcj1uZXcgUWwoWzAsMCxjW2grK11dKTt2bltObl09e3M6RHIuc3ViYXJyYXkoMiwzKSxuOkRyLnN1YmFycmF5KDAsMSksdDpuZXcgQVQoRHIuYnVmZmVyLDAsMSksYjowfX1lbHNlIDI9PWNyPyhoPShkPXl3KGMsaCw5LSgxJk5u''@;'; put 'put ''KSkpWzBdLHZuW05uXT1kWzFdKTozPT1jciYmKGwudHx8Z2MoMCksdm5bTm5dPWwudFtObl0pfXZhciBfaT1sLnQ9dm4sbGk9X2lbMF0sbXI9X2lbMV0sRWk9X2lbMl0sWnI9Y1tXLTFdO1pyfHxnYygwKTt2YXIgRm49KFc8PDMpLTgrSmcoWnIpLUVpLmIsRnI9Rm4+PjMsUW49MCxNcj0oY1tG''@;'; put 'put ''cl18Y1tGcisxXTw8OCk+Pig3JkZuKSYoMTw8RWkuYiktMSxfcj0oY1tGcj0oRm4tPW1yLmIpPj4zXXxjW0ZyKzFdPDw4KT4+KDcmRm4pJigxPDxtci5iKS0xLHZ0PShjW0ZyPShGbi09bGkuYik+PjNdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PGxpLmIpLTE7Zm9yKCsrUXQ7LS1RdDspe3Zh''@;'; put 'put ''ciBPdD1FaS5zW01yXSxjbj1FaS5uW01yXSxFbj1saS5zW3Z0XSxPbj1saS5uW3Z0XSxKbj1tci5zW19yXSxQcj1tci5uW19yXSxPcj0xPDxKbiwkcj1PcisoKGNbRnI9KEZuLT1Kbik+PjNdfGNbRnIrMV08PDh8Y1tGcisyXTw8MTZ8Y1tGciszXTw8MjQpPj4+KDcmRm4pJk9yLTEpO0ZyPShG''@;'; put 'put ''bi09S1VbRW5dKT4+Mzt2YXIgWXI9QUplW0VuXSsoKGNbRnJdfGNbRnIrMV08PDh8Y1tGcisyXTw8MTYpPj4oNyZGbikmKDE8PEtVW0VuXSktMSk7RnI9KEZuLT1xVVtPdF0pPj4zO3ZhciBOcj1rSmVbT3RdKygoY1tGcl18Y1tGcisxXTw8OHxjW0ZyKzJdPDwxNik+Pig3JkZuKSYoMTw8cVVb''@;'; put 'put ''T3RdKS0xKTtpZihGcj0oRm4tPWNuKT4+MyxNcj1FaS50W01yXSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PGNuKS0xKSxGcj0oRm4tPU9uKT4+Myx2dD1saS50W3Z0XSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PE9uKS0xKSxGcj0oRm4tPVByKT4+Myxfcj1tci50''@;'; put 'put ''W19yXSsoKGNbRnJdfGNbRnIrMV08PDgpPj4oNyZGbikmKDE8PFByKS0xKSwkcj4zKWwub1syXT1sLm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09JHItPTM7ZWxzZXt2YXIgUmk9JHItKDAhPU5yKTtSaT8oJHI9Mz09Umk/bC5vWzBdLTE6bC5vW1JpXSxSaT4xJiYobC5vWzJdPWwub1sxXSks''@;'; put 'put ''bC5vWzFdPWwub1swXSxsLm9bMF09JHIpOiRyPWwub1swXX1mb3IoTm49MDtObjxOcjsrK05uKWV0W1FuK05uXT1ldFt5dCtObl07eXQrPU5yO3ZhciBYbz0oUW4rPU5yKS0kcjtpZihYbzwwKXt2YXIgR289LVhvLEpzPWwuZStYbztmb3IoR28+WXImJihHbz1ZciksTm49MDtObjxHbzsrK05u''@;'; put 'put ''KWV0W1FuK05uXT1sLndbSnMrTm5dO1FuKz1HbyxZci09R28sWG89MH1mb3IoTm49MDtObjxZcjsrK05uKWV0W1FuK05uXT1ldFtYbytObl07UW4rPVlyfWlmKFFuIT15dClmb3IoO3l0PGV0Lmxlbmd0aDspZXRbUW4rK109ZXRbeXQrK107ZWxzZSBRbj1ldC5sZW5ndGg7YT9sLnkrPVFuOmV0''@;'; put 'put ''PSRVKGV0LDAsUW4pfWVsc2UgaWYoYSl7aWYobC55Kz1FZSx5dClmb3IoTm49MDtObjxFZTsrK05uKWV0W05uXT1ldFt5dCtObl19ZWxzZSB5dCYmKGV0PSRVKGV0LHl0KSk7cmV0dXJuIGwuYj1XLGV0fWdjKDIpfX07dmFyIFJKZT0odHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3Vy''@;'; put 'put ''cmVudFNjcmlwdCYmZG9jdW1lbnQsZnVuY3Rpb24oYyl7dmFyIGwsYSxkPXZvaWQgMCE9PShjPWN8fHt9KT9jOnt9O2QucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oc3QsZ3Qpe2w9c3QsYT1ndH0pO3ZhciBoLGY9T2JqZWN0LmFzc2lnbih7fSxkKSxfPSIuL3RoaXMucHJvZ3JhbSIsVD0o''@;'; put 'put ''c3QsZ3QpPT57dGhyb3cgZ3R9LFc9ZC5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxpZT1kLnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGQsZiksZj1udWxsLGQudGhpc1Byb2dyYW0mJihfPWQudGhpc1Byb2dyYW0pLGQucXVpdCYm''@;'; put 'put ''KFQ9ZC5xdWl0KSxkLndhc21CaW5hcnkmJihoPWQud2FzbUJpbmFyeSk7dmFyIGdlLHdlPWQubm9FeGl0UnVudGltZXx8ITA7Im9iamVjdCIhPXR5cGVvZiBXZWJBc3NlbWJseSYmRW4oIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgRWU9ITE7ZnVuY3Rpb24gWmUoc3Qs''@;'; put 'put ''Z3Qpe3N0fHxFbihndCl9dmFyIG90LGV0LHl0LGt0LFN0LFF0LHJuLHZuPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIE5uKHN0LGd0LFJ0KXtmb3IodmFyIHRuPWd0K1J0LHduPWd0O3N0W3duXSYmISh3bj49dG4pOykrK3du''@;'; put 'put ''O2lmKHduLWd0PjE2JiZzdC5idWZmZXImJnZuKXJldHVybiB2bi5kZWNvZGUoc3Quc3ViYXJyYXkoZ3Qsd24pKTtmb3IodmFyIHNyPSIiO2d0PHduOyl7dmFyIGxyPXN0W2d0KytdO2lmKDEyOCZscil7dmFyIFJyPTYzJnN0W2d0KytdO2lmKDE5MiE9KDIyNCZscikpe3ZhciBnbz02MyZzdFtn''@;'; put 'put ''dCsrXTtpZigobHI9MjI0PT0oMjQwJmxyKT8oMTUmbHIpPDwxMnxScjw8NnxnbzooNyZscik8PDE4fFJyPDwxMnxnbzw8Nnw2MyZzdFtndCsrXSk8NjU1MzYpc3IrPVN0cmluZy5mcm9tQ2hhckNvZGUobHIpO2Vsc2V7dmFyIE1vPWxyLTY1NTM2O3NyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1''@;'; put 'put ''Mjk2fE1vPj4xMCw1NjMyMHwxMDIzJk1vKX19ZWxzZSBzcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmbHIpPDw2fFJyKX1lbHNlIHNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxyKX1yZXR1cm4gc3J9ZnVuY3Rpb24gY3Ioc3QsZ3Qpe3JldHVybiBzdD9Obih5dCxzdCxndCk6IiJ9ZnVuY3Rp''@;'; put 'put ''b24gRHIoc3QsZ3QsUnQsdG4pe2lmKCEodG4+MCkpcmV0dXJuIDA7Zm9yKHZhciB3bj1SdCxzcj1SdCt0bi0xLGxyPTA7bHI8c3QubGVuZ3RoOysrbHIpe3ZhciBScj1zdC5jaGFyQ29kZUF0KGxyKTtpZihScj49NTUyOTYmJlJyPD01NzM0MyYmKFJyPTY1NTM2KygoMTAyMyZScik8PDEwKXwx''@;'; put 'put ''MDIzJnN0LmNoYXJDb2RlQXQoKytscikpLFJyPD0xMjcpe2lmKFJ0Pj1zcilicmVhaztndFtSdCsrXT1Scn1lbHNlIGlmKFJyPD0yMDQ3KXtpZihSdCsxPj1zcilicmVhaztndFtSdCsrXT0xOTJ8UnI+PjYsZ3RbUnQrK109MTI4fDYzJlJyfWVsc2UgaWYoUnI8PTY1NTM1KXtpZihSdCsyPj1z''@;'; put 'put ''cilicmVhaztndFtSdCsrXT0yMjR8UnI+PjEyLGd0W1J0KytdPTEyOHxScj4+NiY2MyxndFtSdCsrXT0xMjh8NjMmUnJ9ZWxzZXtpZihSdCszPj1zcilicmVhaztndFtSdCsrXT0yNDB8UnI+PjE4LGd0W1J0KytdPTEyOHxScj4+MTImNjMsZ3RbUnQrK109MTI4fFJyPj42JjYzLGd0W1J0Kytd''@;'; put 'put ''PTEyOHw2MyZScn19cmV0dXJuIGd0W1J0XT0wLFJ0LXdufWZ1bmN0aW9uIF9pKHN0KXtmb3IodmFyIGd0PTAsUnQ9MDtSdDxzdC5sZW5ndGg7KytSdCl7dmFyIHRuPXN0LmNoYXJDb2RlQXQoUnQpO3RuPD0xMjc/Z3QrKzp0bjw9MjA0Nz9ndCs9Mjp0bj49NTUyOTYmJnRuPD01NzM0Mz8oZ3Qr''@;'; put 'put ''PTQsKytSdCk6Z3QrPTN9cmV0dXJuIGd0fWZ1bmN0aW9uIGxpKHN0KXtvdD1zdCxkLkhFQVA4PWV0PW5ldyBJbnQ4QXJyYXkoc3QpLGQuSEVBUDE2PWt0PW5ldyBJbnQxNkFycmF5KHN0KSxkLkhFQVAzMj1TdD1uZXcgSW50MzJBcnJheShzdCksZC5IRUFQVTg9eXQ9bmV3IFVpbnQ4QXJyYXko''@;'; put 'put ''c3QpLGQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoc3QpLGQuSEVBUFUzMj1RdD1uZXcgVWludDMyQXJyYXkoc3QpLGQuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KHN0KSxkLkhFQVBGNjQ9cm49bmV3IEZsb2F0NjRBcnJheShzdCl9dmFyIG1yLEVpLFpyLEZuLEZyPVtdLFFuPVtdLE1yPVtd''@;'; put 'put ''LF9yPTAsdnQ9bnVsbDtmdW5jdGlvbiBPdChzdCl7X3IrKyxkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJmQubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhfcil9ZnVuY3Rpb24gY24oc3Qpe2lmKF9yLS0sZC5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZkLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMo''@;'; put 'put ''X3IpLDA9PV9yJiZ2dCl7dmFyIGd0PXZ0O3Z0PW51bGwsZ3QoKX19ZnVuY3Rpb24gRW4oc3Qpe2Qub25BYm9ydCYmZC5vbkFib3J0KHN0KSxpZShzdD0iQWJvcnRlZCgiK3N0KyIpIiksRWU9ITAsc3QrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgZ3Q9''@;'; put 'put ''bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihzdCk7dGhyb3cgYShndCksZ3R9ZnVuY3Rpb24gT24oc3Qpe3JldHVybiBzdC5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil9T24obXI9ImdyYXBodml6bGliLndhc20iKXx8KEVpPW1yLG1yPWQu''@;'; put 'put ''bG9jYXRlRmlsZT9kLmxvY2F0ZUZpbGUoRWksIiIpOiIiK0VpKTt2YXIgT3I9ezE3NTY2NDooc3QsZ3QpPT57dmFyIFJ0PWNyKHN0KSx0bj1jcihndCk7QXQuY3JlYXRlUGF0aCgiLyIsUmkuZGlybmFtZShSdCkpLEF0LndyaXRlRmlsZShSaS5qb2luKCIvIixSdCksdG4pfX07ZnVuY3Rpb24g''@;'; put 'put ''JHIoc3Qpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrc3QrIikiLHRoaXMuc3RhdHVzPXN0fWZ1bmN0aW9uIFlyKHN0KXtmb3IoO3N0Lmxlbmd0aD4wOylzdC5zaGlmdCgpKGQpfWZ1bmN0aW9uIE5yKHN0KXt0aGlz''@;'; put 'put ''LmV4Y1B0cj1zdCx0aGlzLnB0cj1zdC0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKGd0KXtRdFt0aGlzLnB0cis0Pj4yXT1ndH0sdGhpcy5nZXRfdHlwZT1mdW5jdGlvbigpe3JldHVybiBRdFt0aGlzLnB0cis0Pj4yXX0sdGhpcy5zZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbihndCl7UXRbdGhp''@;'; put 'put ''cy5wdHIrOD4+Ml09Z3R9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gUXRbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKGd0KXtTdFt0aGlzLnB0cj4+Ml09Z3R9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbihndCl7ZXRbdGhpcy5wdHIr''@;'; put 'put ''MTI+PjBdPWd0PWd0PzE6MH0sdGhpcy5nZXRfY2F1Z2h0PWZ1bmN0aW9uKCl7cmV0dXJuIDAhPWV0W3RoaXMucHRyKzEyPj4wXX0sdGhpcy5zZXRfcmV0aHJvd249ZnVuY3Rpb24oZ3Qpe2V0W3RoaXMucHRyKzEzPj4wXT1ndD1ndD8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIDAhPWV0W3RoaXMucHRyKzEzPj4wXX0sdGhpcy5pbml0PWZ1bmN0aW9uKGd0LFJ0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShndCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihSdCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0''@;'; put 'put ''aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe1N0W3RoaXMucHRyPj4yXT1TdFt0aGlzLnB0cj4+Ml0rMX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBndD1TdFt0aGlzLnB0cj4+Ml07cmV0dXJuIFN0W3RoaXMucHRyPj4yXT1ndC0xLDE9PT1n''@;'; put 'put ''dH0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKGd0KXtRdFt0aGlzLnB0cisxNj4+Ml09Z3R9LHRoaXMuZ2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbigpe3JldHVybiBRdFt0aGlzLnB0cisxNj4+Ml19LHRoaXMuZ2V0X2V4Y2VwdGlvbl9wdHI9ZnVuY3Rpb24oKXtpZih0bSh0aGlz''@;'; put 'put ''LmdldF90eXBlKCkpKXJldHVybiBRdFt0aGlzLmV4Y1B0cj4+Ml07dmFyIGd0PXRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO3JldHVybiAwIT09Z3Q/Z3Q6dGhpcy5leGNQdHJ9fXZhciBSaT17aXNBYnM6c3Q9PiIvIj09PXN0LmNoYXJBdCgwKSxzcGxpdFBhdGg6c3Q9Pi9eKFwvP3wpKFtcc1xT''@;'; put 'put ''XSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKHN0KS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooc3QsZ3QpPT57Zm9yKHZhciBSdD0wLHRuPXN0Lmxlbmd0aC0xO3RuPj0wO3RuLS0pe3ZhciB3bj1zdFt0bl07Ii4iPT09d24/c3Quc3BsaWNl''@;'; put 'put ''KHRuLDEpOiIuLiI9PT13bj8oc3Quc3BsaWNlKHRuLDEpLFJ0KyspOlJ0JiYoc3Quc3BsaWNlKHRuLDEpLFJ0LS0pfWlmKGd0KWZvcig7UnQ7UnQtLSlzdC51bnNoaWZ0KCIuLiIpO3JldHVybiBzdH0sbm9ybWFsaXplOnN0PT57dmFyIGd0PVJpLmlzQWJzKHN0KSxSdD0iLyI9PT1zdC5zdWJz''@;'; put 'put ''dHIoLTEpO3JldHVybihzdD1SaS5ub3JtYWxpemVBcnJheShzdC5zcGxpdCgiLyIpLmZpbHRlcih0bj0+ISF0biksIWd0KS5qb2luKCIvIikpfHxndHx8KHN0PSIuIiksc3QmJlJ0JiYoc3QrPSIvIiksKGd0PyIvIjoiIikrc3R9LGRpcm5hbWU6c3Q9Pnt2YXIgZ3Q9Umkuc3BsaXRQYXRoKHN0''@;'; put 'put ''KSxSdD1ndFswXSx0bj1ndFsxXTtyZXR1cm4gUnR8fHRuPyh0biYmKHRuPXRuLnN1YnN0cigwLHRuLmxlbmd0aC0xKSksUnQrdG4pOiIuIn0sYmFzZW5hbWU6c3Q9PntpZigiLyI9PT1zdClyZXR1cm4iLyI7dmFyIGd0PShzdD0oc3Q9Umkubm9ybWFsaXplKHN0KSkucmVwbGFjZSgvXC8kLywi''@;'; put 'put ''IikpLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1ndD9zdDpzdC5zdWJzdHIoZ3QrMSl9LGpvaW46ZnVuY3Rpb24oKXt2YXIgc3Q9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gUmkubm9ybWFsaXplKHN0LmpvaW4oIi8iKSl9LGpvaW4yOihzdCxndCk9''@;'; put 'put ''PlJpLm5vcm1hbGl6ZShzdCsiLyIrZ3QpfSxYbz17cmVzb2x2ZTpmdW5jdGlvbigpe2Zvcih2YXIgc3Q9IiIsZ3Q9ITEsUnQ9YXJndW1lbnRzLmxlbmd0aC0xO1J0Pj0tMSYmIWd0O1J0LS0pe3ZhciB0bj1SdD49MD9hcmd1bWVudHNbUnRdOkF0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''dG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighdG4pcmV0dXJuIiI7c3Q9dG4rIi8iK3N0LGd0PVJpLmlzQWJzKHRuKX1yZXR1cm4oZ3Q/Ii8iOiIiKSsoc3Q9Umkubm9ybWFsaXplQXJyYXkoc3Quc3BsaXQoIi8i''@;'; put 'put ''KS5maWx0ZXIod249PiEhd24pLCFndCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooc3QsZ3QpPT57ZnVuY3Rpb24gUnQoTW8pe2Zvcih2YXIgZm89MDtmbzxNby5sZW5ndGgmJiIiPT09TW9bZm9dO2ZvKyspO2Zvcih2YXIgSm89TW8ubGVuZ3RoLTE7Sm8+PTAmJiIiPT09TW9bSm9dO0pv''@;'; put 'put ''LS0pO3JldHVybiBmbz5Kbz9bXTpNby5zbGljZShmbyxKby1mbysxKX1zdD1Yby5yZXNvbHZlKHN0KS5zdWJzdHIoMSksZ3Q9WG8ucmVzb2x2ZShndCkuc3Vic3RyKDEpO2Zvcih2YXIgdG49UnQoc3Quc3BsaXQoIi8iKSksd249UnQoZ3Quc3BsaXQoIi8iKSksc3I9TWF0aC5taW4odG4ubGVu''@;'; put 'put ''Z3RoLHduLmxlbmd0aCksbHI9c3IsUnI9MDtScjxzcjtScisrKWlmKHRuW1JyXSE9PXduW1JyXSl7bHI9UnI7YnJlYWt9dmFyIGdvPVtdO2ZvcihScj1scjtScjx0bi5sZW5ndGg7UnIrKylnby5wdXNoKCIuLiIpO3JldHVybihnbz1nby5jb25jYXQod24uc2xpY2UobHIpKSkuam9pbigiLyIp''@;'; put 'put ''fX07ZnVuY3Rpb24gR28oc3QsZ3QsUnQpe3ZhciB0bj1SdD4wP1J0Ol9pKHN0KSsxLHduPW5ldyBBcnJheSh0biksc3I9RHIoc3Qsd24sMCx3bi5sZW5ndGgpO3JldHVybiBndCYmKHduLmxlbmd0aD1zciksd259dmFyIEpzPXt0dHlzOltdLGluaXQ6ZnVuY3Rpb24oKXt9LHNodXRkb3duOmZ1''@;'; put 'put ''bmN0aW9uKCl7fSxyZWdpc3RlcjpmdW5jdGlvbihzdCxndCl7SnMudHR5c1tzdF09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6Z3R9LEF0LnJlZ2lzdGVyRGV2aWNlKHN0LEpzLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9SnMudHR5c1tzdC5ub2Rl''@;'; put 'put ''LnJkZXZdO2lmKCFndCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7c3QudHR5PWd0LHN0LnNlZWthYmxlPSExfSxjbG9zZTpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5mc3luYyhzdC50dHkpfSxmc3luYzpmdW5jdGlvbihzdCl7c3QudHR5Lm9wcy5mc3luYyhzdC50dHkpfSxyZWFkOmZ1''@;'; put 'put ''bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBzcj0wLGxyPTA7bHI8dG47bHIrKyl7dmFyIFJyO3RyeXtScj1zdC50dHkub3BzLmdldF9jaGFyKHN0LnR0eSl9Y2F0Y2h7dGhy''@;'; put 'put ''b3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PVJyJiYwPT09c3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNik7aWYobnVsbD09UnIpYnJlYWs7c3IrKyxndFtSdCtscl09UnJ9cmV0dXJuIHNyJiYoc3Qubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksc3J9LHdyaXRlOmZ1''@;'; put 'put ''bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXtpZighc3QudHR5fHwhc3QudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgc3I9MDtzcjx0bjtzcisrKXN0LnR0eS5vcHMucHV0X2NoYXIoc3QudHR5LGd0W1J0K3NyXSl9Y2F0Y2h7dGhyb3cgbmV3''@;'; put 'put ''IEF0LkVycm5vRXJyb3IoMjkpfXJldHVybiB0biYmKHN0Lm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLHNyfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpmdW5jdGlvbihzdCl7aWYoIXN0LmlucHV0Lmxlbmd0aCl7dmFyIGd0PW51bGw7aWYodHlwZW9mIHdpbmRvdzwidSImJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oZ3Q9d2luZG93LnByb21wdCgiSW5wdXQ6ICIpKSYmKGd0Kz0iXG4iKToiZnVuY3Rpb24iPT10eXBlb2YgcmVhZGxpbmUmJm51bGwhPT0oZ3Q9cmVhZGxpbmUoKSkmJihndCs9IlxuIiksIWd0KXJldHVybiBudWxsO3N0LmlucHV0''@;'; put 'put ''PUdvKGd0LCEwKX1yZXR1cm4gc3QuaW5wdXQuc2hpZnQoKX0scHV0X2NoYXI6ZnVuY3Rpb24oc3QsZ3Qpe251bGw9PT1ndHx8MTA9PT1ndD8oVyhObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSk6MCE9Z3QmJnN0Lm91dHB1dC5wdXNoKGd0KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0Lm91''@;'; put 'put ''dHB1dCYmc3Qub3V0cHV0Lmxlbmd0aD4wJiYoVyhObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSl9fSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hhcjpmdW5jdGlvbihzdCxndCl7bnVsbD09PWd0fHwxMD09PWd0PyhpZShObihzdC5vdXRwdXQsMCkpLHN0Lm91dHB1dD1bXSk6MCE9Z3Qm''@;'; put 'put ''JnN0Lm91dHB1dC5wdXNoKGd0KX0sZnN5bmM6ZnVuY3Rpb24oc3Qpe3N0Lm91dHB1dCYmc3Qub3V0cHV0Lmxlbmd0aD4wJiYoaWUoTm4oc3Qub3V0cHV0LDApKSxzdC5vdXRwdXQ9W10pfX19O2Z1bmN0aW9uIGdhKHN0KXtzdD02NTUzNipNYXRoLmNlaWwoc3QvNjU1MzYpO3ZhciBSdCxndD14''@;'; put 'put ''dyg2NTUzNixzdCk7cmV0dXJuIGd0Pyh5dC5maWxsKDAsUnQ9Z3QsUnQrc3QpLFJ0KTowfXZhciB1bz17b3BzX3RhYmxlOm51bGwsbW91bnQ6ZnVuY3Rpb24oc3Qpe3JldHVybiB1by5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApfSxjcmVhdGVOb2RlOmZ1bmN0aW9uKHN0LGd0LFJ0LHRu''@;'; put 'put ''KXtpZihBdC5pc0Jsa2RldihSdCl8fEF0LmlzRklGTyhSdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3VvLm9wc190YWJsZXx8KHVvLm9wc190YWJsZT17ZGlyOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyLGxvb2t1''@;'; put 'put ''cDp1by5ub2RlX29wcy5sb29rdXAsbWtub2Q6dW8ubm9kZV9vcHMubWtub2QscmVuYW1lOnVvLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6dW8ubm9kZV9vcHMudW5saW5rLHJtZGlyOnVvLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6dW8ubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOnVvLm5vZGVf''@;'; put 'put ''b3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOnVvLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6dW8uc3RyZWFtX29wcy5sbHNlZWsscmVhZDp1by5z''@;'; put 'put ''dHJlYW1fb3BzLnJlYWQsd3JpdGU6dW8uc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTp1by5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6dW8uc3RyZWFtX29wcy5tbWFwLG1zeW5jOnVvLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOnVvLm5vZGVfb3BzLmdldGF0dHIs''@;'; put 'put ''c2V0YXR0cjp1by5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOnVvLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjp1by5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6dW8ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOkF0LmNocmRldl9zdHJlYW1f''@;'; put 'put ''b3BzfX0pO3ZhciB3bj1BdC5jcmVhdGVOb2RlKHN0LGd0LFJ0LHRuKTtyZXR1cm4gQXQuaXNEaXIod24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5kaXIubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5kaXIuc3RyZWFtLHduLmNvbnRlbnRzPXt9KTpBdC5pc0ZpbGUo''@;'; put 'put ''d24ubW9kZSk/KHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5maWxlLm5vZGUsd24uc3RyZWFtX29wcz11by5vcHNfdGFibGUuZmlsZS5zdHJlYW0sd24udXNlZEJ5dGVzPTAsd24uY29udGVudHM9bnVsbCk6QXQuaXNMaW5rKHduLm1vZGUpPyh3bi5ub2RlX29wcz11by5vcHNfdGFibGUubGlu''@;'; put 'put ''ay5ub2RlLHduLnN0cmVhbV9vcHM9dW8ub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpBdC5pc0NocmRldih3bi5tb2RlKSYmKHduLm5vZGVfb3BzPXVvLm9wc190YWJsZS5jaHJkZXYubm9kZSx3bi5zdHJlYW1fb3BzPXVvLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSx3bi50aW1lc3RhbXA9RGF0''@;'; put 'put ''ZS5ub3coKSxzdCYmKHN0LmNvbnRlbnRzW2d0XT13bixzdC50aW1lc3RhbXA9d24udGltZXN0YW1wKSx3bn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5jb250ZW50cz9zdC5jb250ZW50cy5zdWJhcnJheT9zdC5jb250ZW50cy5zdWJhcnJheSgwLHN0''@;'; put 'put ''LnVzZWRCeXRlcyk6bmV3IFVpbnQ4QXJyYXkoc3QuY29udGVudHMpOm5ldyBVaW50OEFycmF5KDApfSxleHBhbmRGaWxlU3RvcmFnZTpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PXN0LmNvbnRlbnRzP3N0LmNvbnRlbnRzLmxlbmd0aDowO2lmKCEoUnQ+PWd0KSl7Z3Q9TWF0aC5tYXgoZ3QsUnQq''@;'; put 'put ''KFJ0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1SdCYmKGd0PU1hdGgubWF4KGd0LDI1NikpO3ZhciB0bj1zdC5jb250ZW50cztzdC5jb250ZW50cz1uZXcgVWludDhBcnJheShndCksc3QudXNlZEJ5dGVzPjAmJnN0LmNvbnRlbnRzLnNldCh0bi5zdWJhcnJheSgwLHN0LnVzZWRCeXRlcyks''@;'; put 'put ''MCl9fSxyZXNpemVGaWxlU3RvcmFnZTpmdW5jdGlvbihzdCxndCl7aWYoc3QudXNlZEJ5dGVzIT1ndClpZigwPT1ndClzdC5jb250ZW50cz1udWxsLHN0LnVzZWRCeXRlcz0wO2Vsc2V7dmFyIFJ0PXN0LmNvbnRlbnRzO3N0LmNvbnRlbnRzPW5ldyBVaW50OEFycmF5KGd0KSxSdCYmc3QuY29u''@;'; put 'put ''dGVudHMuc2V0KFJ0LnN1YmFycmF5KDAsTWF0aC5taW4oZ3Qsc3QudXNlZEJ5dGVzKSkpLHN0LnVzZWRCeXRlcz1ndH19LG5vZGVfb3BzOntnZXRhdHRyOmZ1bmN0aW9uKHN0KXt2YXIgZ3Q9e307cmV0dXJuIGd0LmRldj1BdC5pc0NocmRldihzdC5tb2RlKT9zdC5pZDoxLGd0Lmlubz1zdC5p''@;'; put 'put ''ZCxndC5tb2RlPXN0Lm1vZGUsZ3Qubmxpbms9MSxndC51aWQ9MCxndC5naWQ9MCxndC5yZGV2PXN0LnJkZXYsZ3Quc2l6ZT1BdC5pc0RpcihzdC5tb2RlKT80MDk2OkF0LmlzRmlsZShzdC5tb2RlKT9zdC51c2VkQnl0ZXM6QXQuaXNMaW5rKHN0Lm1vZGUpP3N0LmxpbmsubGVuZ3RoOjAsZ3Qu''@;'; put 'put ''YXRpbWU9bmV3IERhdGUoc3QudGltZXN0YW1wKSxndC5tdGltZT1uZXcgRGF0ZShzdC50aW1lc3RhbXApLGd0LmN0aW1lPW5ldyBEYXRlKHN0LnRpbWVzdGFtcCksZ3QuYmxrc2l6ZT00MDk2LGd0LmJsb2Nrcz1NYXRoLmNlaWwoZ3Quc2l6ZS9ndC5ibGtzaXplKSxndH0sc2V0YXR0cjpmdW5j''@;'; put 'put ''dGlvbihzdCxndCl7dm9pZCAwIT09Z3QubW9kZSYmKHN0Lm1vZGU9Z3QubW9kZSksdm9pZCAwIT09Z3QudGltZXN0YW1wJiYoc3QudGltZXN0YW1wPWd0LnRpbWVzdGFtcCksdm9pZCAwIT09Z3Quc2l6ZSYmdW8ucmVzaXplRmlsZVN0b3JhZ2Uoc3QsZ3Quc2l6ZSl9LGxvb2t1cDpmdW5jdGlv''@;'; put 'put ''bihzdCxndCl7dGhyb3cgQXQuZ2VuZXJpY0Vycm9yc1s0NF19LG1rbm9kOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXtyZXR1cm4gdW8uY3JlYXRlTm9kZShzdCxndCxSdCx0bil9LHJlbmFtZTpmdW5jdGlvbihzdCxndCxSdCl7aWYoQXQuaXNEaXIoc3QubW9kZSkpe3ZhciB0bjt0cnl7dG49QXQu''@;'; put 'put ''bG9va3VwTm9kZShndCxSdCl9Y2F0Y2h7fWlmKHRuKWZvcih2YXIgd24gaW4gdG4uY29udGVudHMpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBzdC5wYXJlbnQuY29udGVudHNbc3QubmFtZV0sc3QucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLHN0Lm5hbWU9UnQsZ3Qu''@;'; put 'put ''Y29udGVudHNbUnRdPXN0LGd0LnRpbWVzdGFtcD1zdC5wYXJlbnQudGltZXN0YW1wLHN0LnBhcmVudD1ndH0sdW5saW5rOmZ1bmN0aW9uKHN0LGd0KXtkZWxldGUgc3QuY29udGVudHNbZ3RdLHN0LnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcjpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PUF0''@;'; put 'put ''Lmxvb2t1cE5vZGUoc3QsZ3QpO2Zvcih2YXIgdG4gaW4gUnQuY29udGVudHMpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBzdC5jb250ZW50c1tndF0sc3QudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXI6ZnVuY3Rpb24oc3Qpe3ZhciBndD1bIi4iLCIuLiJdO2Zvcih2''@;'; put 'put ''YXIgUnQgaW4gc3QuY29udGVudHMpc3QuY29udGVudHMuaGFzT3duUHJvcGVydHkoUnQpJiZndC5wdXNoKFJ0KTtyZXR1cm4gZ3R9LHN5bWxpbms6ZnVuY3Rpb24oc3QsZ3QsUnQpe3ZhciB0bj11by5jcmVhdGVOb2RlKHN0LGd0LDQxNDcxLDApO3JldHVybiB0bi5saW5rPVJ0LHRufSxyZWFk''@;'; put 'put ''bGluazpmdW5jdGlvbihzdCl7aWYoIUF0LmlzTGluayhzdC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIHN0Lmxpbmt9fSxzdHJlYW1fb3BzOntyZWFkOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduKXt2YXIgc3I9c3Qubm9kZS5jb250ZW50cztpZih3bj49c3Qubm9k''@;'; put 'put ''ZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIGxyPU1hdGgubWluKHN0Lm5vZGUudXNlZEJ5dGVzLXduLHRuKTtpZihscj44JiZzci5zdWJhcnJheSlndC5zZXQoc3Iuc3ViYXJyYXkod24sd24rbHIpLFJ0KTtlbHNlIGZvcih2YXIgUnI9MDtScjxscjtScisrKWd0W1J0K1JyXT1zclt3bitScl07''@;'; put 'put ''cmV0dXJuIGxyfSx3cml0ZTpmdW5jdGlvbihzdCxndCxSdCx0bix3bixzcil7aWYoZ3QuYnVmZmVyPT09ZXQuYnVmZmVyJiYoc3I9ITEpLCF0bilyZXR1cm4gMDt2YXIgbHI9c3Qubm9kZTtpZihsci50aW1lc3RhbXA9RGF0ZS5ub3coKSxndC5zdWJhcnJheSYmKCFsci5jb250ZW50c3x8bHIu''@;'; put 'put ''Y29udGVudHMuc3ViYXJyYXkpKXtpZihzcilyZXR1cm4gbHIuY29udGVudHM9Z3Quc3ViYXJyYXkoUnQsUnQrdG4pLGxyLnVzZWRCeXRlcz10bix0bjtpZigwPT09bHIudXNlZEJ5dGVzJiYwPT09d24pcmV0dXJuIGxyLmNvbnRlbnRzPWd0LnNsaWNlKFJ0LFJ0K3RuKSxsci51c2VkQnl0ZXM9''@;'; put 'put ''dG4sdG47aWYod24rdG48PWxyLnVzZWRCeXRlcylyZXR1cm4gbHIuY29udGVudHMuc2V0KGd0LnN1YmFycmF5KFJ0LFJ0K3RuKSx3biksdG59aWYodW8uZXhwYW5kRmlsZVN0b3JhZ2UobHIsd24rdG4pLGxyLmNvbnRlbnRzLnN1YmFycmF5JiZndC5zdWJhcnJheSlsci5jb250ZW50cy5zZXQo''@;'; put 'put ''Z3Quc3ViYXJyYXkoUnQsUnQrdG4pLHduKTtlbHNlIGZvcih2YXIgUnI9MDtScjx0bjtScisrKWxyLmNvbnRlbnRzW3duK1JyXT1ndFtSdCtScl07cmV0dXJuIGxyLnVzZWRCeXRlcz1NYXRoLm1heChsci51c2VkQnl0ZXMsd24rdG4pLHRufSxsbHNlZWs6ZnVuY3Rpb24oc3QsZ3QsUnQpe3Zh''@;'; put 'put ''ciB0bj1ndDtpZigxPT09UnQ/dG4rPXN0LnBvc2l0aW9uOjI9PT1SdCYmQXQuaXNGaWxlKHN0Lm5vZGUubW9kZSkmJih0bis9c3Qubm9kZS51c2VkQnl0ZXMpLHRuPDApdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3JldHVybiB0bn0sYWxsb2NhdGU6ZnVuY3Rpb24oc3QsZ3QsUnQpe3Vv''@;'; put 'put ''LmV4cGFuZEZpbGVTdG9yYWdlKHN0Lm5vZGUsZ3QrUnQpLHN0Lm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KHN0Lm5vZGUudXNlZEJ5dGVzLGd0K1J0KX0sbW1hcDpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIUF0LmlzRmlsZShzdC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vy''@;'; put 'put ''cm9yKDQzKTt2YXIgc3IsbHIsUnI9c3Qubm9kZS5jb250ZW50cztpZigyJndufHxSci5idWZmZXIhPT1vdCl7aWYoKFJ0PjB8fFJ0K2d0PFJyLmxlbmd0aCkmJihScj1Sci5zdWJhcnJheT9Sci5zdWJhcnJheShSdCxSdCtndCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUnIsUnQsUnQr''@;'; put 'put ''Z3QpKSxscj0hMCwhKHNyPWdhKGd0KSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDgpO2V0LnNldChScixzcil9ZWxzZSBscj0hMSxzcj1Sci5ieXRlT2Zmc2V0O3JldHVybntwdHI6c3IsYWxsb2NhdGVkOmxyfX0sbXN5bmM6ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3JldHVybiB1by5z''@;'; put 'put ''dHJlYW1fb3BzLndyaXRlKHN0LGd0LDAsdG4sUnQsITEpLDB9fX0sQXQ9e3Jvb3Q6bnVsbCxtb3VudHM6W10sZGV2aWNlczp7fSxzdHJlYW1zOltdLG5leHRJbm9kZToxLG5hbWVUYWJsZTpudWxsLGN1cnJlbnRQYXRoOiIvIixpbml0aWFsaXplZDohMSxpZ25vcmVQZXJtaXNzaW9uczohMCxF''@;'; put 'put ''cnJub0Vycm9yOm51bGwsZ2VuZXJpY0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsbG9va3VwUGF0aDooc3QsZ3Q9e30pPT57aWYoIShzdD1Yby5yZXNvbHZlKHN0KSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigoZ3Q9T2JqZWN0LmFzc2lnbih7Zm9s''@;'; put 'put ''bG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sZ3QpKS5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgUnQ9c3Quc3BsaXQoIi8iKS5maWx0ZXIoTW89PiEhTW8pLHRuPUF0LnJvb3Qsd249Ii8iLHNyPTA7c3I8UnQubGVuZ3RoO3NyKyspe3Zh''@;'; put 'put ''ciBscj1zcj09PVJ0Lmxlbmd0aC0xO2lmKGxyJiZndC5wYXJlbnQpYnJlYWs7aWYodG49QXQubG9va3VwTm9kZSh0bixSdFtzcl0pLHduPVJpLmpvaW4yKHduLFJ0W3NyXSksQXQuaXNNb3VudHBvaW50KHRuKSYmKCFscnx8bHImJmd0LmZvbGxvd19tb3VudCkmJih0bj10bi5tb3VudGVkLnJv''@;'; put 'put ''b3QpLCFscnx8Z3QuZm9sbG93KWZvcih2YXIgUnI9MDtBdC5pc0xpbmsodG4ubW9kZSk7KXt2YXIgZ289QXQucmVhZGxpbmsod24pO2lmKHduPVhvLnJlc29sdmUoUmkuZGlybmFtZSh3biksZ28pLHRuPUF0Lmxvb2t1cFBhdGgod24se3JlY3Vyc2VfY291bnQ6Z3QucmVjdXJzZV9jb3VudCsx''@;'; put 'put ''fSkubm9kZSxScisrPjQwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMyKX19cmV0dXJue3BhdGg6d24sbm9kZTp0bn19LGdldFBhdGg6c3Q9Pntmb3IodmFyIGd0Ozspe2lmKEF0LmlzUm9vdChzdCkpe3ZhciBSdD1zdC5tb3VudC5tb3VudHBvaW50O3JldHVybiBndD8iLyIhPT1SdFtSdC5s''@;'; put 'put ''ZW5ndGgtMV0/UnQrIi8iK2d0OlJ0K2d0OlJ0fWd0PWd0P3N0Lm5hbWUrIi8iK2d0OnN0Lm5hbWUsc3Q9c3QucGFyZW50fX0saGFzaE5hbWU6KHN0LGd0KT0+e2Zvcih2YXIgUnQ9MCx0bj0wO3RuPGd0Lmxlbmd0aDt0bisrKVJ0PShSdDw8NSktUnQrZ3QuY2hhckNvZGVBdCh0bil8MDtyZXR1''@;'; put 'put ''cm4oc3QrUnQ+Pj4wKSVBdC5uYW1lVGFibGUubGVuZ3RofSxoYXNoQWRkTm9kZTpzdD0+e3ZhciBndD1BdC5oYXNoTmFtZShzdC5wYXJlbnQuaWQsc3QubmFtZSk7c3QubmFtZV9uZXh0PUF0Lm5hbWVUYWJsZVtndF0sQXQubmFtZVRhYmxlW2d0XT1zdH0saGFzaFJlbW92ZU5vZGU6c3Q9Pnt2''@;'; put 'put ''YXIgZ3Q9QXQuaGFzaE5hbWUoc3QucGFyZW50LmlkLHN0Lm5hbWUpO2lmKEF0Lm5hbWVUYWJsZVtndF09PT1zdClBdC5uYW1lVGFibGVbZ3RdPXN0Lm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgUnQ9QXQubmFtZVRhYmxlW2d0XTtSdDspe2lmKFJ0Lm5hbWVfbmV4dD09PXN0KXtSdC5uYW1lX25l''@;'; put 'put ''eHQ9c3QubmFtZV9uZXh0O2JyZWFrfVJ0PVJ0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGU6KHN0LGd0KT0+e3ZhciBSdD1BdC5tYXlMb29rdXAoc3QpO2lmKFJ0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFJ0LHN0KTtmb3IodmFyIHRuPUF0Lmhhc2hOYW1lKHN0LmlkLGd0KSx3bj1BdC5uYW1l''@;'; put 'put ''VGFibGVbdG5dO3duO3duPXduLm5hbWVfbmV4dClpZih3bi5wYXJlbnQuaWQ9PT1zdC5pZCYmd24ubmFtZT09PWd0KXJldHVybiB3bjtyZXR1cm4gQXQubG9va3VwKHN0LGd0KX0sY3JlYXRlTm9kZTooc3QsZ3QsUnQsdG4pPT57dmFyIHduPW5ldyBBdC5GU05vZGUoc3QsZ3QsUnQsdG4pO3Jl''@;'; put 'put ''dHVybiBBdC5oYXNoQWRkTm9kZSh3biksd259LGRlc3Ryb3lOb2RlOnN0PT57QXQuaGFzaFJlbW92ZU5vZGUoc3QpfSxpc1Jvb3Q6c3Q9PnN0PT09c3QucGFyZW50LGlzTW91bnRwb2ludDpzdD0+ISFzdC5tb3VudGVkLGlzRmlsZTpzdD0+MzI3Njg9PSg2MTQ0MCZzdCksaXNEaXI6c3Q9PjE2''@;'; put 'put ''Mzg0PT0oNjE0NDAmc3QpLGlzTGluazpzdD0+NDA5NjA9PSg2MTQ0MCZzdCksaXNDaHJkZXY6c3Q9PjgxOTI9PSg2MTQ0MCZzdCksaXNCbGtkZXY6c3Q9PjI0NTc2PT0oNjE0NDAmc3QpLGlzRklGTzpzdD0+NDA5Nj09KDYxNDQwJnN0KSxpc1NvY2tldDpzdD0+NDkxNTI9PSg0OTE1MiZzdCks''@;'; put 'put ''ZmxhZ01vZGVzOntyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9LG1vZGVTdHJpbmdUb0ZsYWdzOnN0PT57dmFyIGd0PUF0LmZsYWdNb2Rlc1tzdF07aWYodm9pZCAwPT09Z3QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAiK3N0KTty''@;'; put 'put ''ZXR1cm4gZ3R9LGZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nOnN0PT57dmFyIGd0PVsiciIsInciLCJydyJdWzMmc3RdO3JldHVybiA1MTImc3QmJihndCs9InciKSxndH0sbm9kZVBlcm1pc3Npb25zOihzdCxndCk9PkF0Lmlnbm9yZVBlcm1pc3Npb25zfHwoIWd0LmluY2x1ZGVzKCJyIil8fDI5''@;'; put 'put ''MiZzdC5tb2RlKSYmKCFndC5pbmNsdWRlcygidyIpfHwxNDYmc3QubW9kZSkmJighZ3QuaW5jbHVkZXMoIngiKXx8NzMmc3QubW9kZSk/MDoyLG1heUxvb2t1cDpzdD0+QXQubm9kZVBlcm1pc3Npb25zKHN0LCJ4Iil8fChzdC5ub2RlX29wcy5sb29rdXA/MDoyKSxtYXlDcmVhdGU6KHN0LGd0''@;'; put 'put ''KT0+e3RyeXtyZXR1cm4gQXQubG9va3VwTm9kZShzdCxndCksMjB9Y2F0Y2h7fXJldHVybiBBdC5ub2RlUGVybWlzc2lvbnMoc3QsInd4Iil9LG1heURlbGV0ZTooc3QsZ3QsUnQpPT57dmFyIHRuO3RyeXt0bj1BdC5sb29rdXBOb2RlKHN0LGd0KX1jYXRjaChzcil7cmV0dXJuIHNyLmVycm5v''@;'; put 'put ''fXZhciB3bj1BdC5ub2RlUGVybWlzc2lvbnMoc3QsInd4Iik7aWYod24pcmV0dXJuIHduO2lmKFJ0KXtpZighQXQuaXNEaXIodG4ubW9kZSkpcmV0dXJuIDU0O2lmKEF0LmlzUm9vdCh0bil8fEF0LmdldFBhdGgodG4pPT09QXQuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYoQXQuaXNEaXIodG4u''@;'; put 'put ''bW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuOihzdCxndCk9PnN0P0F0LmlzTGluayhzdC5tb2RlKT8zMjpBdC5pc0RpcihzdC5tb2RlKSYmKCJyIiE9PUF0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGd0KXx8NTEyJmd0KT8zMTpBdC5ub2RlUGVybWlzc2lvbnMoc3QsQXQuZmxh''@;'; put 'put ''Z3NUb1Blcm1pc3Npb25TdHJpbmcoZ3QpKTo0NCxNQVhfT1BFTl9GRFM6NDA5NixuZXh0ZmQ6KHN0PTAsZ3Q9QXQuTUFYX09QRU5fRkRTKT0+e2Zvcih2YXIgUnQ9c3Q7UnQ8PWd0O1J0KyspaWYoIUF0LnN0cmVhbXNbUnRdKXJldHVybiBSdDt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMyl9''@;'; put 'put ''LGdldFN0cmVhbTpzdD0+QXQuc3RyZWFtc1tzdF0sY3JlYXRlU3RyZWFtOihzdCxndCxSdCk9PntBdC5GU1N0cmVhbXx8KEF0LkZTU3RyZWFtPWZ1bmN0aW9uKCl7dGhpcy5zaGFyZWQ9e319LEF0LkZTU3RyZWFtLnByb3RvdHlwZT17fSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBdC5GU1N0''@;'; put 'put ''cmVhbS5wcm90b3R5cGUse29iamVjdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZX0sc2V0OmZ1bmN0aW9uKHduKXt0aGlzLm5vZGU9d259fSxpc1JlYWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiAxIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX19LGlzV3JpdGU6e2dldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiAwIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX19LGlzQXBwZW5kOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfX0sZmxhZ3M6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc30sc2V0OmZ1bmN0aW9uKHduKXt0aGlzLnNoYXJlZC5m''@;'; put 'put ''bGFncz13bn19LHBvc2l0aW9uOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259LHNldDpmdW5jdGlvbih3bil7dGhpcy5zaGFyZWQucG9zaXRpb249d259fX0pKSxzdD1PYmplY3QuYXNzaWduKG5ldyBBdC5GU1N0cmVhbSxzdCk7dmFyIHRuPUF0Lm5leHRmZChn''@;'; put 'put ''dCxSdCk7cmV0dXJuIHN0LmZkPXRuLEF0LnN0cmVhbXNbdG5dPXN0LHN0fSxjbG9zZVN0cmVhbTpzdD0+e0F0LnN0cmVhbXNbc3RdPW51bGx9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuOnN0PT57dmFyIGd0PUF0LmdldERldmljZShzdC5ub2RlLnJkZXYpO3N0LnN0cmVhbV9vcHM9Z3Quc3Ry''@;'; put 'put ''ZWFtX29wcyxzdC5zdHJlYW1fb3BzLm9wZW4mJnN0LnN0cmVhbV9vcHMub3BlbihzdCl9LGxsc2VlazooKT0+e3Rocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOnN0PT5zdD4+OCxtaW5vcjpzdD0+MjU1JnN0LG1ha2VkZXY6KHN0LGd0KT0+c3Q8PDh8Z3QscmVnaXN0ZXJEZXZp''@;'; put 'put ''Y2U6KHN0LGd0KT0+e0F0LmRldmljZXNbc3RdPXtzdHJlYW1fb3BzOmd0fX0sZ2V0RGV2aWNlOnN0PT5BdC5kZXZpY2VzW3N0XSxnZXRNb3VudHM6c3Q9Pntmb3IodmFyIGd0PVtdLFJ0PVtzdF07UnQubGVuZ3RoOyl7dmFyIHRuPVJ0LnBvcCgpO2d0LnB1c2godG4pLFJ0LnB1c2guYXBwbHko''@;'; put 'put ''UnQsdG4ubW91bnRzKX1yZXR1cm4gZ3R9LHN5bmNmczooc3QsZ3QpPT57ImZ1bmN0aW9uIj09dHlwZW9mIHN0JiYoZ3Q9c3Qsc3Q9ITEpLEF0LnN5bmNGU1JlcXVlc3RzKyssQXQuc3luY0ZTUmVxdWVzdHM+MSYmaWUoIndhcm5pbmc6ICIrQXQuc3luY0ZTUmVxdWVzdHMrIiBGUy5zeW5jZnMg''@;'; put 'put ''b3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBkb2luZyBleHRyYSB3b3JrIik7dmFyIFJ0PUF0LmdldE1vdW50cyhBdC5yb290Lm1vdW50KSx0bj0wO2Z1bmN0aW9uIHduKGxyKXtyZXR1cm4gQXQuc3luY0ZTUmVxdWVzdHMtLSxndChscil9ZnVuY3Rpb24gc3Io''@;'; put 'put ''bHIpe2lmKGxyKXJldHVybiBzci5lcnJvcmVkP3ZvaWQgMDooc3IuZXJyb3JlZD0hMCx3bihscikpOysrdG4+PVJ0Lmxlbmd0aCYmd24obnVsbCl9UnQuZm9yRWFjaChscj0+e2lmKCFsci50eXBlLnN5bmNmcylyZXR1cm4gc3IobnVsbCk7bHIudHlwZS5zeW5jZnMobHIsc3Qsc3IpfSl9LG1v''@;'; put 'put ''dW50OihzdCxndCxSdCk9Pnt2YXIgdG4sd249Ii8iPT09UnQsc3I9IVJ0O2lmKHduJiZBdC5yb290KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZighd24mJiFzcil7dmFyIGxyPUF0Lmxvb2t1cFBhdGgoUnQse2ZvbGxvd19tb3VudDohMX0pO2lmKFJ0PWxyLnBhdGgsQXQuaXNNb3Vu''@;'; put 'put ''dHBvaW50KHRuPWxyLm5vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZighQXQuaXNEaXIodG4ubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNTQpfXZhciBScj17dHlwZTpzdCxvcHRzOmd0LG1vdW50cG9pbnQ6UnQsbW91bnRzOltdfSxnbz1zdC5tb3VudChScik7cmV0''@;'; put 'put ''dXJuIGdvLm1vdW50PVJyLFJyLnJvb3Q9Z28sd24/QXQucm9vdD1nbzp0biYmKHRuLm1vdW50ZWQ9UnIsdG4ubW91bnQmJnRuLm1vdW50Lm1vdW50cy5wdXNoKFJyKSksZ299LHVubW91bnQ6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93X21vdW50OiExfSk7aWYoIUF0Lmlz''@;'; put 'put ''TW91bnRwb2ludChndC5ub2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIFJ0PWd0Lm5vZGUsdG49UnQubW91bnRlZCx3bj1BdC5nZXRNb3VudHModG4pO09iamVjdC5rZXlzKEF0Lm5hbWVUYWJsZSkuZm9yRWFjaChscj0+e2Zvcih2YXIgUnI9QXQubmFtZVRhYmxlW2xyXTtS''@;'; put 'put ''cjspe3ZhciBnbz1Sci5uYW1lX25leHQ7d24uaW5jbHVkZXMoUnIubW91bnQpJiZBdC5kZXN0cm95Tm9kZShSciksUnI9Z299fSksUnQubW91bnRlZD1udWxsO3ZhciBzcj1SdC5tb3VudC5tb3VudHMuaW5kZXhPZih0bik7UnQubW91bnQubW91bnRzLnNwbGljZShzciwxKX0sbG9va3VwOihz''@;'; put 'put ''dCxndCk9PnN0Lm5vZGVfb3BzLmxvb2t1cChzdCxndCksbWtub2Q6KHN0LGd0LFJ0KT0+e3ZhciB0bj1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlLHduPVJpLmJhc2VuYW1lKHN0KTtpZighd258fCIuIj09PXdufHwiLi4iPT09d24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Io''@;'; put 'put ''MjgpO3ZhciBzcj1BdC5tYXlDcmVhdGUodG4sd24pO2lmKHNyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHNyKTtpZighdG4ubm9kZV9vcHMubWtub2QpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO3JldHVybiB0bi5ub2RlX29wcy5ta25vZCh0bix3bixndCxSdCl9LGNyZWF0ZTooc3Qs''@;'; put 'put ''Z3QpPT4oZ3Q9dm9pZCAwIT09Z3Q/Z3Q6NDM4LGd0Jj00MDk1LEF0Lm1rbm9kKHN0LGd0fD0zMjc2OCwwKSksbWtkaXI6KHN0LGd0KT0+KGd0PXZvaWQgMCE9PWd0P2d0OjUxMSxndCY9MTAyMyxBdC5ta25vZChzdCxndHw9MTYzODQsMCkpLG1rZGlyVHJlZTooc3QsZ3QpPT57Zm9yKHZhciBS''@;'; put 'put ''dD1zdC5zcGxpdCgiLyIpLHRuPSIiLHduPTA7d248UnQubGVuZ3RoOysrd24paWYoUnRbd25dKXt0bis9Ii8iK1J0W3duXTt0cnl7QXQubWtkaXIodG4sZ3QpfWNhdGNoKHNyKXtpZigyMCE9c3IuZXJybm8pdGhyb3cgc3J9fX0sbWtkZXY6KHN0LGd0LFJ0KT0+KHZvaWQgMD09PVJ0JiYoUnQ9''@;'; put 'put ''Z3QsZ3Q9NDM4KSxBdC5ta25vZChzdCxndHw9ODE5MixSdCkpLHN5bWxpbms6KHN0LGd0KT0+e2lmKCFYby5yZXNvbHZlKHN0KSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7dmFyIFJ0PUF0Lmxvb2t1cFBhdGgoZ3Qse3BhcmVudDohMH0pLm5vZGU7aWYoIVJ0KXRocm93IG5ldyBBdC5F''@;'; put 'put ''cnJub0Vycm9yKDQ0KTt2YXIgdG49UmkuYmFzZW5hbWUoZ3QpLHduPUF0Lm1heUNyZWF0ZShSdCx0bik7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFSdC5ub2RlX29wcy5zeW1saW5rKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gUnQubm9kZV9vcHMu''@;'; put 'put ''c3ltbGluayhSdCx0bixzdCl9LHJlbmFtZTooc3QsZ3QpPT57dmFyIFJ0LHRuLHduPVJpLmRpcm5hbWUoc3QpLHNyPVJpLmRpcm5hbWUoZ3QpLGxyPVJpLmJhc2VuYW1lKHN0KSxScj1SaS5iYXNlbmFtZShndCk7aWYoUnQ9QXQubG9va3VwUGF0aChzdCx7cGFyZW50OiEwfSkubm9kZSx0bj1B''@;'; put 'put ''dC5sb29rdXBQYXRoKGd0LHtwYXJlbnQ6ITB9KS5ub2RlLCFSdHx8IXRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTtpZihSdC5tb3VudCE9PXRuLm1vdW50KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDc1KTt2YXIgZ28sTW89QXQubG9va3VwTm9kZShSdCxsciksZm89WG8ucmVsYXRp''@;'; put 'put ''dmUoc3Qsc3IpO2lmKCIuIiE9PWZvLmNoYXJBdCgwKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7aWYoIi4iIT09KGZvPVhvLnJlbGF0aXZlKGd0LHduKSkuY2hhckF0KDApKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU1KTt0cnl7Z289QXQubG9va3VwTm9kZSh0bixScil9Y2F0Y2h7''@;'; put 'put ''fWlmKE1vIT09Z28pe3ZhciBKbz1BdC5pc0RpcihNby5tb2RlKSxZaT1BdC5tYXlEZWxldGUoUnQsbHIsSm8pO2lmKFlpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFlpKTtpZihZaT1nbz9BdC5tYXlEZWxldGUodG4sUnIsSm8pOkF0Lm1heUNyZWF0ZSh0bixScikpdGhyb3cgbmV3IEF0LkVy''@;'; put 'put ''cm5vRXJyb3IoWWkpO2lmKCFSdC5ub2RlX29wcy5yZW5hbWUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNjMpO2lmKEF0LmlzTW91bnRwb2ludChNbyl8fGdvJiZBdC5pc01vdW50cG9pbnQoZ28pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtpZih0biE9PVJ0JiYoWWk9QXQubm9kZVBl''@;'; put 'put ''cm1pc3Npb25zKFJ0LCJ3IikpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKFlpKTtBdC5oYXNoUmVtb3ZlTm9kZShNbyk7dHJ5e1J0Lm5vZGVfb3BzLnJlbmFtZShNbyx0bixScil9Y2F0Y2goWXMpe3Rocm93IFlzfWZpbmFsbHl7QXQuaGFzaEFkZE5vZGUoTW8pfX19LHJtZGlyOnN0PT57dmFy''@;'; put 'put ''IGd0PUF0Lmxvb2t1cFBhdGgoc3Qse3BhcmVudDohMH0pLm5vZGUsUnQ9UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cE5vZGUoZ3QsUnQpLHduPUF0Lm1heURlbGV0ZShndCxSdCwhMCk7aWYod24pdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Iod24pO2lmKCFndC5ub2RlX29wcy5ybWRpcil0''@;'; put 'put ''aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7aWYoQXQuaXNNb3VudHBvaW50KHRuKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigxMCk7Z3Qubm9kZV9vcHMucm1kaXIoZ3QsUnQpLEF0LmRlc3Ryb3lOb2RlKHRuKX0scmVhZGRpcjpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtmb2xs''@;'; put 'put ''b3c6ITB9KS5ub2RlO2lmKCFndC5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0KTtyZXR1cm4gZ3Qubm9kZV9vcHMucmVhZGRpcihndCl9LHVubGluazpzdD0+e3ZhciBndD1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFndCl0aHJvdyBu''@;'; put 'put ''ZXcgQXQuRXJybm9FcnJvcig0NCk7dmFyIFJ0PVJpLmJhc2VuYW1lKHN0KSx0bj1BdC5sb29rdXBOb2RlKGd0LFJ0KSx3bj1BdC5tYXlEZWxldGUoZ3QsUnQsITEpO2lmKHduKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHduKTtpZighZ3Qubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBBdC5F''@;'; put 'put ''cnJub0Vycm9yKDYzKTtpZihBdC5pc01vdW50cG9pbnQodG4pKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDEwKTtndC5ub2RlX29wcy51bmxpbmsoZ3QsUnQpLEF0LmRlc3Ryb3lOb2RlKHRuKX0scmVhZGxpbms6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCkubm9kZTtpZighZ3QpdGhy''@;'; put 'put ''b3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKCFndC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFhvLnJlc29sdmUoQXQuZ2V0UGF0aChndC5wYXJlbnQpLGd0Lm5vZGVfb3BzLnJlYWRsaW5rKGd0KSl9LHN0YXQ6KHN0LGd0KT0+e3ZhciBS''@;'; put 'put ''dD1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IWd0fSkubm9kZTtpZighUnQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKCFSdC5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gUnQubm9kZV9vcHMuZ2V0YXR0cihSdCl9LGxzdGF0OnN0''@;'; put 'put ''PT5BdC5zdGF0KHN0LCEwKSxjaG1vZDooc3QsZ3QsUnQpPT57dmFyIHRuO2lmKCEodG49InN0cmluZyI9PXR5cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IVJ0fSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig2Myk7dG4ubm9kZV9v''@;'; put 'put ''cHMuc2V0YXR0cih0bix7bW9kZTo0MDk1Jmd0fC00MDk2JnRuLm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kOihzdCxndCk9PntBdC5jaG1vZChzdCxndCwhMCl9LGZjaG1vZDooc3QsZ3QpPT57dmFyIFJ0PUF0LmdldFN0cmVhbShzdCk7aWYoIVJ0KXRocm93IG5ldyBBdC5F''@;'; put 'put ''cnJub0Vycm9yKDgpO0F0LmNobW9kKFJ0Lm5vZGUsZ3QpfSxjaG93bjooc3QsZ3QsUnQsdG4pPT57dmFyIHduO2lmKCEod249InN0cmluZyI9PXR5cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IXRufSkubm9kZTpzdCkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgQXQuRXJy''@;'; put 'put ''bm9FcnJvcig2Myk7d24ubm9kZV9vcHMuc2V0YXR0cih3bix7dGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNob3duOihzdCxndCxSdCk9PntBdC5jaG93bihzdCxndCxSdCwhMCl9LGZjaG93bjooc3QsZ3QsUnQpPT57dmFyIHRuPUF0LmdldFN0cmVhbShzdCk7aWYoIXRuKXRocm93IG5ldyBB''@;'; put 'put ''dC5FcnJub0Vycm9yKDgpO0F0LmNob3duKHRuLm5vZGUsZ3QsUnQpfSx0cnVuY2F0ZTooc3QsZ3QpPT57aWYoZ3Q8MCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIFJ0O2lmKCEoUnQ9InN0cmluZyI9PXR5cGVvZiBzdD9BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ITB9KS5ub2Rl''@;'; put 'put ''OnN0KS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDYzKTtpZihBdC5pc0RpcihSdC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigzMSk7aWYoIUF0LmlzRmlsZShSdC5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7dmFyIHRuPUF0Lm5vZGVQ''@;'; put 'put ''ZXJtaXNzaW9ucyhSdCwidyIpO2lmKHRuKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKHRuKTtSdC5ub2RlX29wcy5zZXRhdHRyKFJ0LHtzaXplOmd0LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZTooc3QsZ3QpPT57dmFyIFJ0PUF0LmdldFN0cmVhbShzdCk7aWYoIVJ0KXRocm93''@;'; put 'put ''IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCEoMjA5NzE1NSZSdC5mbGFncykpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO0F0LnRydW5jYXRlKFJ0Lm5vZGUsZ3QpfSx1dGltZTooc3QsZ3QsUnQpPT57dmFyIHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2ZvbGxvdzohMH0pLm5vZGU7dG4ubm9k''@;'; put 'put ''ZV9vcHMuc2V0YXR0cih0bix7dGltZXN0YW1wOk1hdGgubWF4KGd0LFJ0KX0pfSxvcGVuOihzdCxndCxSdCk9PntpZigiIj09PXN0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQ0KTt2YXIgdG47aWYoUnQ9dm9pZCAwPT09UnQ/NDM4OlJ0LFJ0PTY0JihndD0ic3RyaW5nIj09dHlwZW9mIGd0''@;'; put 'put ''P0F0Lm1vZGVTdHJpbmdUb0ZsYWdzKGd0KTpndCk/NDA5NSZSdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2Ygc3QpdG49c3Q7ZWxzZXtzdD1SaS5ub3JtYWxpemUoc3QpO3RyeXt0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6ISgxMzEwNzImZ3QpfSkubm9kZX1jYXRjaHt9fXZhciB3bj0h''@;'; put 'put ''MTtpZig2NCZndClpZih0bil7aWYoMTI4Jmd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDIwKX1lbHNlIHRuPUF0Lm1rbm9kKHN0LFJ0LDApLHduPSEwO2lmKCF0bil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0NCk7aWYoQXQuaXNDaHJkZXYodG4ubW9kZSkmJihndCY9LTUxMyksNjU1MzYm''@;'; put 'put ''Z3QmJiFBdC5pc0Rpcih0bi5tb2RlKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig1NCk7aWYoIXduKXt2YXIgc3I9QXQubWF5T3Blbih0bixndCk7aWYoc3IpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3Ioc3IpfTUxMiZndCYmIXduJiZBdC50cnVuY2F0ZSh0biwwKSxndCY9LTEzMTcxMzt2YXIg''@;'; put 'put ''bHI9QXQuY3JlYXRlU3RyZWFtKHtub2RlOnRuLHBhdGg6QXQuZ2V0UGF0aCh0biksZmxhZ3M6Z3Qsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOnRuLnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gbHIuc3RyZWFtX29wcy5vcGVuJiZsci5zdHJlYW1f''@;'; put 'put ''b3BzLm9wZW4obHIpLCFkLmxvZ1JlYWRGaWxlc3x8MSZndHx8KEF0LnJlYWRGaWxlc3x8KEF0LnJlYWRGaWxlcz17fSksc3QgaW4gQXQucmVhZEZpbGVzfHwoQXQucmVhZEZpbGVzW3N0XT0xKSksbHJ9LGNsb3NlOnN0PT57aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vy''@;'; put 'put ''cm9yKDgpO3N0LmdldGRlbnRzJiYoc3QuZ2V0ZGVudHM9bnVsbCk7dHJ5e3N0LnN0cmVhbV9vcHMuY2xvc2UmJnN0LnN0cmVhbV9vcHMuY2xvc2Uoc3QpfWNhdGNoKGd0KXt0aHJvdyBndH1maW5hbGx5e0F0LmNsb3NlU3RyZWFtKHN0LmZkKX1zdC5mZD1udWxsfSxpc0Nsb3NlZDpzdD0+bnVs''@;'; put 'put ''bD09PXN0LmZkLGxsc2Vlazooc3QsZ3QsUnQpPT57aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCFzdC5zZWVrYWJsZXx8IXN0LnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKTtpZigwIT1SdCYmMSE9UnQmJjIhPVJ0''@;'; put 'put ''KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gc3QucG9zaXRpb249c3Quc3RyZWFtX29wcy5sbHNlZWsoc3QsZ3QsUnQpLHN0LnVuZ290dGVuPVtdLHN0LnBvc2l0aW9ufSxyZWFkOihzdCxndCxSdCx0bix3bik9PntpZih0bjwwfHx3bjwwKXRocm93IG5ldyBBdC5FcnJub0Vy''@;'; put 'put ''cm9yKDI4KTtpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmc3QuZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKEF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMzEpO2lmKCFz''@;'; put 'put ''dC5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjgpO3ZhciBzcj12b2lkIDAhPT13bjtpZihzcil7aWYoIXN0LnNlZWthYmxlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX1lbHNlIHduPXN0LnBvc2l0aW9uO3ZhciBscj1zdC5zdHJlYW1fb3BzLnJlYWQoc3Qs''@;'; put 'put ''Z3QsUnQsdG4sd24pO3JldHVybiBzcnx8KHN0LnBvc2l0aW9uKz1sciksbHJ9LHdyaXRlOihzdCxndCxSdCx0bix3bixzcik9PntpZih0bjwwfHx3bjwwKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZihBdC5pc0Nsb3NlZChzdCkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoOCk7aWYo''@;'; put 'put ''ISgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTtpZihBdC5pc0RpcihzdC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDMxKTtpZighc3Quc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOCk7c3Quc2Vla2FibGUm''@;'; put 'put ''JjEwMjQmc3QuZmxhZ3MmJkF0Lmxsc2VlayhzdCwwLDIpO3ZhciBscj12b2lkIDAhPT13bjtpZihscil7aWYoIXN0LnNlZWthYmxlKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDcwKX1lbHNlIHduPXN0LnBvc2l0aW9uO3ZhciBScj1zdC5zdHJlYW1fb3BzLndyaXRlKHN0LGd0LFJ0LHRuLHdu''@;'; put 'put ''LHNyKTtyZXR1cm4gbHJ8fChzdC5wb3NpdGlvbis9UnIpLFJyfSxhbGxvY2F0ZTooc3QsZ3QsUnQpPT57aWYoQXQuaXNDbG9zZWQoc3QpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKGd0PDB8fFJ0PD0wKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDI4KTtpZighKDIwOTcxNTUmc3Qu''@;'; put 'put ''ZmxhZ3MpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO2lmKCFBdC5pc0ZpbGUoc3Qubm9kZS5tb2RlKSYmIUF0LmlzRGlyKHN0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDMpO2lmKCFzdC5zdHJlYW1fb3BzLmFsbG9jYXRlKXRocm93IG5ldyBBdC5FcnJub0Vycm9y''@;'; put 'put ''KDEzOCk7c3Quc3RyZWFtX29wcy5hbGxvY2F0ZShzdCxndCxSdCl9LG1tYXA6KHN0LGd0LFJ0LHRuLHduKT0+e2lmKDImdG4mJiEoMiZ3bikmJjIhPSgyMDk3MTU1JnN0LmZsYWdzKSl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyKTtpZigxPT0oMjA5NzE1NSZzdC5mbGFncykpdGhyb3cgbmV3''@;'; put 'put ''IEF0LkVycm5vRXJyb3IoMik7aWYoIXN0LnN0cmVhbV9vcHMubW1hcCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0Myk7cmV0dXJuIHN0LnN0cmVhbV9vcHMubW1hcChzdCxndCxSdCx0bix3bil9LG1zeW5jOihzdCxndCxSdCx0bix3bik9PnN0LnN0cmVhbV9vcHMubXN5bmM/c3Quc3RyZWFt''@;'; put 'put ''X29wcy5tc3luYyhzdCxndCxSdCx0bix3bik6MCxtdW5tYXA6c3Q9PjAsaW9jdGw6KHN0LGd0LFJ0KT0+e2lmKCFzdC5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gc3Quc3RyZWFtX29wcy5pb2N0bChzdCxndCxSdCl9LHJlYWRGaWxlOihzdCxn''@;'; put 'put ''dD17fSk9PntpZihndC5mbGFncz1ndC5mbGFnc3x8MCxndC5lbmNvZGluZz1ndC5lbmNvZGluZ3x8ImJpbmFyeSIsInV0ZjgiIT09Z3QuZW5jb2RpbmcmJiJiaW5hcnkiIT09Z3QuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGVuY29kaW5nIHR5cGUgIicrZ3QuZW5jb2Rpbmcr''@;'; put 'put ''JyInKTt2YXIgUnQsdG49QXQub3BlbihzdCxndC5mbGFncyksd249QXQuc3RhdChzdCkuc2l6ZSxzcj1uZXcgVWludDhBcnJheSh3bik7cmV0dXJuIEF0LnJlYWQodG4sc3IsMCx3biwwKSwidXRmOCI9PT1ndC5lbmNvZGluZz9SdD1ObihzciwwKToiYmluYXJ5Ij09PWd0LmVuY29kaW5nJiYo''@;'; put 'put ''UnQ9c3IpLEF0LmNsb3NlKHRuKSxSdH0sd3JpdGVGaWxlOihzdCxndCxSdD17fSk9PntSdC5mbGFncz1SdC5mbGFnc3x8NTc3O3ZhciB0bj1BdC5vcGVuKHN0LFJ0LmZsYWdzLFJ0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgZ3Qpe3ZhciB3bj1uZXcgVWludDhBcnJheShfaShndCkrMSks''@;'; put 'put ''c3I9RHIoZ3Qsd24sMCx3bi5sZW5ndGgpO0F0LndyaXRlKHRuLHduLDAsc3Isdm9pZCAwLFJ0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGd0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO0F0LndyaXRlKHRuLGd0LDAsZ3QuYnl0ZUxlbmd0''@;'; put 'put ''aCx2b2lkIDAsUnQuY2FuT3duKX1BdC5jbG9zZSh0bil9LGN3ZDooKT0+QXQuY3VycmVudFBhdGgsY2hkaXI6c3Q9Pnt2YXIgZ3Q9QXQubG9va3VwUGF0aChzdCx7Zm9sbG93OiEwfSk7aWYobnVsbD09PWd0Lm5vZGUpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNDQpO2lmKCFBdC5pc0Rpcihn''@;'; put 'put ''dC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDU0KTt2YXIgUnQ9QXQubm9kZVBlcm1pc3Npb25zKGd0Lm5vZGUsIngiKTtpZihSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcihSdCk7QXQuY3VycmVudFBhdGg9Z3QucGF0aH0sY3JlYXRlRGVmYXVsdERpcmVjdG9yaWVzOigp''@;'; put 'put ''PT57QXQubWtkaXIoIi90bXAiKSxBdC5ta2RpcigiL2hvbWUiKSxBdC5ta2RpcigiL2hvbWUvd2ViX3VzZXIiKX0sY3JlYXRlRGVmYXVsdERldmljZXM6KCk9PntBdC5ta2RpcigiL2RldiIpLEF0LnJlZ2lzdGVyRGV2aWNlKEF0Lm1ha2VkZXYoMSwzKSx7cmVhZDooKT0+MCx3cml0ZTooZ3Qs''@;'; put 'put ''UnQsdG4sd24sc3IpPT53bn0pLEF0Lm1rZGV2KCIvZGV2L251bGwiLEF0Lm1ha2VkZXYoMSwzKSksSnMucmVnaXN0ZXIoQXQubWFrZWRldig1LDApLEpzLmRlZmF1bHRfdHR5X29wcyksSnMucmVnaXN0ZXIoQXQubWFrZWRldig2LDApLEpzLmRlZmF1bHRfdHR5MV9vcHMpLEF0Lm1rZGV2KCIv''@;'; put 'put ''ZGV2L3R0eSIsQXQubWFrZWRldig1LDApKSxBdC5ta2RldigiL2Rldi90dHkxIixBdC5tYWtlZGV2KDYsMCkpO3ZhciBzdD1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7dmFyIGd0PW5ldyBV''@;'; put 'put ''aW50OEFycmF5KDEpO3JldHVybigpPT4oY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhndCksZ3RbMF0pfXJldHVybigpPT5FbigicmFuZG9tRGV2aWNlIil9KCk7QXQuY3JlYXRlRGV2aWNlKCIvZGV2IiwicmFuZG9tIixzdCksQXQuY3JlYXRlRGV2aWNlKCIvZGV2IiwidXJhbmRvbSIsc3QpLEF0''@;'; put 'put ''Lm1rZGlyKCIvZGV2L3NobSIpLEF0Lm1rZGlyKCIvZGV2L3NobS90bXAiKX0sY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzOigpPT57QXQubWtkaXIoIi9wcm9jIik7dmFyIHN0PUF0Lm1rZGlyKCIvcHJvYy9zZWxmIik7QXQubWtkaXIoIi9wcm9jL3NlbGYvZmQiKSxBdC5tb3VudCh7bW91bnQ6''@;'; put 'put ''KCk9Pnt2YXIgZ3Q9QXQuY3JlYXRlTm9kZShzdCwiZmQiLDE2ODk1LDczKTtyZXR1cm4gZ3Qubm9kZV9vcHM9e2xvb2t1cDooUnQsdG4pPT57dmFyIHNyPUF0LmdldFN0cmVhbSgrdG4pO2lmKCFzcil0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig4KTt2YXIgbHI9e3BhcmVudDpudWxsLG1vdW50''@;'; put 'put ''Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5zci5wYXRofX07cmV0dXJuIGxyLnBhcmVudD1scixscn19LGd0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zOigpPT57ZC5zdGRpbj9BdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJz''@;'; put 'put ''dGRpbiIsZC5zdGRpbik6QXQuc3ltbGluaygiL2Rldi90dHkiLCIvZGV2L3N0ZGluIiksZC5zdGRvdXQ/QXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGQuc3Rkb3V0KTpBdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZC5zdGRlcnI/QXQuY3JlYXRlRGV2''@;'; put 'put ''aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGQuc3RkZXJyKTpBdC5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLEF0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLEF0Lm9wZW4oIi9kZXYvc3Rkb3V0IiwxKSxBdC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LGVuc3VyZUVycm5vRXJyb3I6''@;'; put 'put ''KCk9PntBdC5FcnJub0Vycm9yfHwoQXQuRXJybm9FcnJvcj1mdW5jdGlvbihzdCxndCl7dGhpcy5ub2RlPWd0LHRoaXMuc2V0RXJybm89ZnVuY3Rpb24oUnQpe3RoaXMuZXJybm89UnR9LHRoaXMuc2V0RXJybm8oc3QpLHRoaXMubWVzc2FnZT0iRlMgZXJyb3IifSxBdC5FcnJub0Vycm9yLnBy''@;'; put 'put ''b3RvdHlwZT1uZXcgRXJyb3IsQXQuRXJybm9FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3I9QXQuRXJybm9FcnJvcixbNDRdLmZvckVhY2goc3Q9PntBdC5nZW5lcmljRXJyb3JzW3N0XT1uZXcgQXQuRXJybm9FcnJvcihzdCksQXQuZ2VuZXJpY0Vycm9yc1tzdF0uc3RhY2s9IjxnZW5lcmlj''@;'; put 'put ''IGVycm9yLCBubyBzdGFjaz4ifSkpfSxzdGF0aWNJbml0OigpPT57QXQuZW5zdXJlRXJybm9FcnJvcigpLEF0Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksQXQubW91bnQodW8se30sIi8iKSxBdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxBdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygp''@;'; put 'put ''LEF0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLEF0LmZpbGVzeXN0ZW1zPXtNRU1GUzp1b319LGluaXQ6KHN0LGd0LFJ0KT0+e0F0LmluaXQuaW5pdGlhbGl6ZWQ9ITAsQXQuZW5zdXJlRXJybm9FcnJvcigpLGQuc3RkaW49c3R8fGQuc3RkaW4sZC5zdGRvdXQ9Z3R8fGQuc3Rkb3V0LGQu''@;'; put 'put ''c3RkZXJyPVJ0fHxkLnN0ZGVycixBdC5jcmVhdGVTdGFuZGFyZFN0cmVhbXMoKX0scXVpdDooKT0+e0F0LmluaXQuaW5pdGlhbGl6ZWQ9ITE7Zm9yKHZhciBzdD0wO3N0PEF0LnN0cmVhbXMubGVuZ3RoO3N0Kyspe3ZhciBndD1BdC5zdHJlYW1zW3N0XTtndCYmQXQuY2xvc2UoZ3QpfX0sZ2V0''@;'; put 'put ''TW9kZTooc3QsZ3QpPT57dmFyIFJ0PTA7cmV0dXJuIHN0JiYoUnR8PTM2NSksZ3QmJihSdHw9MTQ2KSxSdH0sZmluZE9iamVjdDooc3QsZ3QpPT57dmFyIFJ0PUF0LmFuYWx5emVQYXRoKHN0LGd0KTtyZXR1cm4gUnQuZXhpc3RzP1J0Lm9iamVjdDpudWxsfSxhbmFseXplUGF0aDooc3QsZ3Qp''@;'; put 'put ''PT57dHJ5e3N0PSh0bj1BdC5sb29rdXBQYXRoKHN0LHtmb2xsb3c6IWd0fSkpLnBhdGh9Y2F0Y2h7fXZhciBSdD17aXNSb290OiExLGV4aXN0czohMSxlcnJvcjowLG5hbWU6bnVsbCxwYXRoOm51bGwsb2JqZWN0Om51bGwscGFyZW50RXhpc3RzOiExLHBhcmVudFBhdGg6bnVsbCxwYXJlbnRP''@;'; put 'put ''YmplY3Q6bnVsbH07dHJ5e3ZhciB0bj1BdC5sb29rdXBQYXRoKHN0LHtwYXJlbnQ6ITB9KTtSdC5wYXJlbnRFeGlzdHM9ITAsUnQucGFyZW50UGF0aD10bi5wYXRoLFJ0LnBhcmVudE9iamVjdD10bi5ub2RlLFJ0Lm5hbWU9UmkuYmFzZW5hbWUoc3QpLHRuPUF0Lmxvb2t1cFBhdGgoc3Qse2Zv''@;'; put 'put ''bGxvdzohZ3R9KSxSdC5leGlzdHM9ITAsUnQucGF0aD10bi5wYXRoLFJ0Lm9iamVjdD10bi5ub2RlLFJ0Lm5hbWU9dG4ubm9kZS5uYW1lLFJ0LmlzUm9vdD0iLyI9PT10bi5wYXRofWNhdGNoKHduKXtSdC5lcnJvcj13bi5lcnJub31yZXR1cm4gUnR9LGNyZWF0ZVBhdGg6KHN0LGd0LFJ0LHRu''@;'; put 'put ''KT0+e3N0PSJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCk7Zm9yKHZhciB3bj1ndC5zcGxpdCgiLyIpLnJldmVyc2UoKTt3bi5sZW5ndGg7KXt2YXIgc3I9d24ucG9wKCk7aWYoc3Ipe3ZhciBscj1SaS5qb2luMihzdCxzcik7dHJ5e0F0Lm1rZGlyKGxyKX1jYXRjaHt9c3Q9''@;'; put 'put ''bHJ9fXJldHVybiBscn0sY3JlYXRlRmlsZTooc3QsZ3QsUnQsdG4sd24pPT57dmFyIHNyPVJpLmpvaW4yKCJzdHJpbmciPT10eXBlb2Ygc3Q/c3Q6QXQuZ2V0UGF0aChzdCksZ3QpLGxyPUF0LmdldE1vZGUodG4sd24pO3JldHVybiBBdC5jcmVhdGUoc3IsbHIpfSxjcmVhdGVEYXRhRmlsZToo''@;'; put 'put ''c3QsZ3QsUnQsdG4sd24sc3IpPT57dmFyIGxyPWd0O3N0JiYoc3Q9InN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxscj1ndD9SaS5qb2luMihzdCxndCk6c3QpO3ZhciBScj1BdC5nZXRNb2RlKHRuLHduKSxnbz1BdC5jcmVhdGUobHIsUnIpO2lmKFJ0KXtpZigic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIFJ0KXtmb3IodmFyIE1vPW5ldyBBcnJheShSdC5sZW5ndGgpLGZvPTAsSm89UnQubGVuZ3RoO2ZvPEpvOysrZm8pTW9bZm9dPVJ0LmNoYXJDb2RlQXQoZm8pO1J0PU1vfUF0LmNobW9kKGdvLDE0NnxScik7dmFyIFlpPUF0Lm9wZW4oZ28sNTc3KTtBdC53cml0ZShZaSxSdCww''@;'; put 'put ''LFJ0Lmxlbmd0aCwwLHNyKSxBdC5jbG9zZShZaSksQXQuY2htb2QoZ28sUnIpfXJldHVybiBnb30sY3JlYXRlRGV2aWNlOihzdCxndCxSdCx0bik9Pnt2YXIgd249Umkuam9pbjIoInN0cmluZyI9PXR5cGVvZiBzdD9zdDpBdC5nZXRQYXRoKHN0KSxndCksc3I9QXQuZ2V0TW9kZSghIVJ0LCEh''@;'; put 'put ''dG4pO0F0LmNyZWF0ZURldmljZS5tYWpvcnx8KEF0LmNyZWF0ZURldmljZS5tYWpvcj02NCk7dmFyIGxyPUF0Lm1ha2VkZXYoQXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIEF0LnJlZ2lzdGVyRGV2aWNlKGxyLHtvcGVuOlJyPT57UnIuc2Vla2FibGU9ITF9LGNsb3NlOlJyPT57''@;'; put 'put ''dG4mJnRuLmJ1ZmZlciYmdG4uYnVmZmVyLmxlbmd0aCYmdG4oMTApfSxyZWFkOihScixnbyxNbyxmbyxKbyk9Pntmb3IodmFyIFlpPTAsWXM9MDtZczxmbztZcysrKXt2YXIgSWw7dHJ5e0lsPVJ0KCl9Y2F0Y2h7dGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUlsJiYw''@;'; put 'put ''PT09WWkpdGhyb3cgbmV3IEF0LkVycm5vRXJyb3IoNik7aWYobnVsbD09SWwpYnJlYWs7WWkrKyxnb1tNbytZc109SWx9cmV0dXJuIFlpJiYoUnIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksWWl9LHdyaXRlOihScixnbyxNbyxmbyxKbyk9Pntmb3IodmFyIFlpPTA7WWk8Zm87WWkrKyl0''@;'; put 'put ''cnl7dG4oZ29bTW8rWWldKX1jYXRjaHt0aHJvdyBuZXcgQXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIGZvJiYoUnIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksWWl9fSksQXQubWtkZXYod24sc3IsbHIpfSxmb3JjZUxvYWRGaWxlOnN0PT57aWYoc3QuaXNEZXZpY2V8fHN0LmlzRm9sZGVy''@;'; put 'put ''fHxzdC5saW5rfHxzdC5jb250ZW50cylyZXR1cm4hMDt0aHJvdyB0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiP25ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBidXQgaXQgd2FzIG5vdC4g''@;'; put 'put ''TGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik6bmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxIdHRwUmVxdWVzdC4iKX0s''@;'; put 'put ''Y3JlYXRlTGF6eUZpbGU6KHN0LGd0LFJ0LHRuLHduKT0+e2Z1bmN0aW9uIHNyKCl7dGhpcy5sZW5ndGhLbm93bj0hMSx0aGlzLmNodW5rcz1bXX1pZihzci5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGZvKXtpZighKGZvPnRoaXMubGVuZ3RoLTF8fGZvPDApKXt2YXIgSm89Zm8ldGhpcy5jaHVu''@;'; put 'put ''a1NpemU7cmV0dXJuIHRoaXMuZ2V0dGVyKGZvL3RoaXMuY2h1bmtTaXplfDApW0pvXX19LHNyLnByb3RvdHlwZS5zZXREYXRhR2V0dGVyPWZ1bmN0aW9uKGZvKXt0aGlzLmdldHRlcj1mb30sc3IucHJvdG90eXBlLmNhY2hlTGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGZvPW5ldyBYTUxIdHRwUmVx''@;'; put 'put ''dWVzdDtpZihmby5vcGVuKCJIRUFEIixSdCwhMSksZm8uc2VuZChudWxsKSwhKGZvLnN0YXR1cz49MjAwJiZmby5zdGF0dXM8MzAwfHwzMDQ9PT1mby5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK1J0KyIuIFN0YXR1czogIitmby5zdGF0dXMpO3ZhciBKbyxZaT1O''@;'; put 'put ''dW1iZXIoZm8uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpLFlzPShKbz1mby5nZXRSZXNwb25zZUhlYWRlcigiQWNjZXB0LVJhbmdlcyIpKSYmImJ5dGVzIj09PUpvLElsPShKbz1mby5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1FbmNvZGluZyIpKSYmImd6aXAiPT09''@;'; put 'put ''Sm8sTWw9MTA0ODU3NjtZc3x8KE1sPVlpKTt2YXIgUXU9dGhpcztRdS5zZXREYXRhR2V0dGVyKGNsPT57dmFyIEFpPWNsKk1sLGpvPShjbCsxKSpNbC0xO2lmKGpvPU1hdGgubWluKGpvLFlpLTEpLHZvaWQgMD09PVF1LmNodW5rc1tjbF0mJihRdS5jaHVua3NbY2xdPSgocWMsTGwpPT57aWYo''@;'; put 'put ''cWM+TGwpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHJhbmdlICgiK3FjKyIsICIrTGwrIikgb3Igbm8gYnl0ZXMgcmVxdWVzdGVkISIpO2lmKExsPllpLTEpdGhyb3cgbmV3IEVycm9yKCJvbmx5ICIrWWkrIiBieXRlcyBhdmFpbGFibGUhIHByb2dyYW1tZXIgZXJyb3IhIik7dmFyIHRjPW5l''@;'; put 'put ''dyBYTUxIdHRwUmVxdWVzdDtpZih0Yy5vcGVuKCJHRVQiLFJ0LCExKSxZaSE9PU1sJiZ0Yy5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrcWMrIi0iK0xsKSx0Yy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIix0Yy5vdmVycmlkZU1pbWVUeXBlJiZ0Yy5vdmVycmlkZU1pbWVU''@;'; put 'put ''eXBlKCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXgtdXNlci1kZWZpbmVkIiksdGMuc2VuZChudWxsKSwhKHRjLnN0YXR1cz49MjAwJiZ0Yy5zdGF0dXM8MzAwfHwzMDQ9PT10Yy5zdGF0dXMpKXRocm93IG5ldyBFcnJvcigiQ291bGRuJ3QgbG9hZCAiK1J0KyIuIFN0YXR1czogIit0Yy5zdGF0dXMp''@;'; put 'put ''O3JldHVybiB2b2lkIDAhPT10Yy5yZXNwb25zZT9uZXcgVWludDhBcnJheSh0Yy5yZXNwb25zZXx8W10pOkdvKHRjLnJlc3BvbnNlVGV4dHx8IiIsITApfSkoQWksam8pKSx2b2lkIDA9PT1RdS5jaHVua3NbY2xdKXRocm93IG5ldyBFcnJvcigiZG9YSFIgZmFpbGVkISIpO3JldHVybiBRdS5j''@;'; put 'put ''aHVua3NbY2xdfSksIUlsJiZZaXx8KE1sPVlpPTEsWWk9dGhpcy5nZXR0ZXIoMCkubGVuZ3RoLE1sPVlpLFcoIkxhenlGaWxlcyBvbiBnemlwIGZvcmNlcyBkb3dubG9hZCBvZiB0aGUgd2hvbGUgZmlsZSB3aGVuIGxlbmd0aCBpcyBhY2Nlc3NlZCIpKSx0aGlzLl9sZW5ndGg9WWksdGhpcy5f''@;'; put 'put ''Y2h1bmtTaXplPU1sLHRoaXMubGVuZ3RoS25vd249ITB9LHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVs''@;'; put 'put ''b2FkLWZpbGUgaW4gZW1jYyI7dmFyIGxyPXtpc0RldmljZTohMSx1cmw6UnR9LFJyPUF0LmNyZWF0ZUZpbGUoc3QsZ3QsbHIsdG4sd24pO2xyLmNvbnRlbnRzP1JyLmNvbnRlbnRzPWxyLmNvbnRlbnRzOmxyLnVybCYmKFJyLmNvbnRlbnRzPW51bGwsUnIudXJsPWxyLnVybCksT2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnRpZXMoUnIse3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgZ289e307ZnVuY3Rpb24gTW8oZm8sSm8sWWksWXMsSWwpe3ZhciBNbD1mby5ub2RlLmNvbnRlbnRzO2lmKElsPj1NbC5sZW5ndGgpcmV0dXJuIDA7''@;'; put 'put ''dmFyIFF1PU1hdGgubWluKE1sLmxlbmd0aC1JbCxZcyk7aWYoTWwuc2xpY2UpZm9yKHZhciBjbD0wO2NsPFF1O2NsKyspSm9bWWkrY2xdPU1sW0lsK2NsXTtlbHNlIGZvcihjbD0wO2NsPFF1O2NsKyspSm9bWWkrY2xdPU1sLmdldChJbCtjbCk7cmV0dXJuIFF1fXJldHVybiBPYmplY3Qua2V5''@;'; put 'put ''cyhSci5zdHJlYW1fb3BzKS5mb3JFYWNoKGZvPT57dmFyIEpvPVJyLnN0cmVhbV9vcHNbZm9dO2dvW2ZvXT1mdW5jdGlvbigpe3JldHVybiBBdC5mb3JjZUxvYWRGaWxlKFJyKSxKby5hcHBseShudWxsLGFyZ3VtZW50cyl9fSksZ28ucmVhZD0oZm8sSm8sWWksWXMsSWwpPT4oQXQuZm9yY2VM''@;'; put 'put ''b2FkRmlsZShSciksTW8oZm8sSm8sWWksWXMsSWwpKSxnby5tbWFwPShmbyxKbyxZaSxZcyxJbCk9PntBdC5mb3JjZUxvYWRGaWxlKFJyKTt2YXIgTWw9Z2EoSm8pO2lmKCFNbCl0aHJvdyBuZXcgQXQuRXJybm9FcnJvcig0OCk7cmV0dXJuIE1vKGZvLGV0LE1sLEpvLFlpKSx7cHRyOk1sLGFs''@;'; put 'put ''bG9jYXRlZDohMH19LFJyLnN0cmVhbV9vcHM9Z28sUnJ9LGNyZWF0ZVByZWxvYWRlZEZpbGU6KHN0LGd0LFJ0LHRuLHduLHNyLGxyLFJyLGdvLE1vKT0+e3ZhciBZaSxJbCxRdSxmbz1ndD9Yby5yZXNvbHZlKFJpLmpvaW4yKHN0LGd0KSk6c3Q7ZnVuY3Rpb24gSm8oWWkpe2Z1bmN0aW9uIFlz''@;'; put 'put ''KElsKXtNbyYmTW8oKSxScnx8QXQuY3JlYXRlRGF0YUZpbGUoc3QsZ3QsSWwsdG4sd24sZ28pLHNyJiZzcigpLGNuKCl9QnJvd3Nlci5oYW5kbGVkQnlQcmVsb2FkUGx1Z2luKFlpLGZvLFlzLCgpPT57bHImJmxyKCksY24oKX0pfHxZcyhZaSl9T3QoKSwic3RyaW5nIj09dHlwZW9mIFJ0PyhJ''@;'; put 'put ''bD1scixRdT0iYWwgIisoWWk9UnQpLCh2b2lkIDApKFlpLGNsPT57WmUoY2wsJ0xvYWRpbmcgZGF0YSBmaWxlICInK1lpKyciIGZhaWxlZCAobm8gYXJyYXlCdWZmZXIpLicpLChZaT0+e0pvKFlpKX0pKG5ldyBVaW50OEFycmF5KGNsKSksUXUmJmNuKCl9LGNsPT57aWYoIUlsKXRocm93J0xv''@;'; put 'put ''YWRpbmcgZGF0YSBmaWxlICInK1lpKyciIGZhaWxlZC4nO0lsKCl9KSxRdSYmT3QoKSk6Sm8oUnQpfSxpbmRleGVkREI6KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQixEQl9OQU1FOigp''@;'; put 'put ''PT4iRU1fRlNfIit3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsREJfVkVSU0lPTjoyMCxEQl9TVE9SRV9OQU1FOiJGSUxFX0RBVEEiLHNhdmVGaWxlc1RvREI6KHN0LGd0LFJ0KT0+e2d0PWd0fHwoKCk9Pnt9KSxSdD1SdHx8KCgpPT57fSk7dmFyIHRuPUF0LmluZGV4ZWREQigpO3RyeXt2YXIg''@;'; put 'put ''d249dG4ub3BlbihBdC5EQl9OQU1FKCksQXQuREJfVkVSU0lPTil9Y2F0Y2goc3Ipe3JldHVybiBSdChzcil9d24ub251cGdyYWRlbmVlZGVkPSgpPT57VygiY3JlYXRpbmcgZGIiKSx3bi5yZXN1bHQuY3JlYXRlT2JqZWN0U3RvcmUoQXQuREJfU1RPUkVfTkFNRSl9LHduLm9uc3VjY2Vzcz0o''@;'; put 'put ''KT0+e3ZhciBzcj13bi5yZXN1bHQudHJhbnNhY3Rpb24oW0F0LkRCX1NUT1JFX05BTUVdLCJyZWFkd3JpdGUiKSxscj1zci5vYmplY3RTdG9yZShBdC5EQl9TVE9SRV9OQU1FKSxScj0wLGdvPTAsTW89c3QubGVuZ3RoO2Z1bmN0aW9uIGZvKCl7MD09Z28/Z3QoKTpSdCgpfXN0LmZvckVhY2go''@;'; put 'put ''Sm89Pnt2YXIgWWk9bHIucHV0KEF0LmFuYWx5emVQYXRoKEpvKS5vYmplY3QuY29udGVudHMsSm8pO1lpLm9uc3VjY2Vzcz0oKT0+eysrUnIrZ289PU1vJiZmbygpfSxZaS5vbmVycm9yPSgpPT57Z28rKyxScitnbz09TW8mJmZvKCl9fSksc3Iub25lcnJvcj1SdH0sd24ub25lcnJvcj1SdH0s''@;'; put 'put ''bG9hZEZpbGVzRnJvbURCOihzdCxndCxSdCk9PntndD1ndHx8KCgpPT57fSksUnQ9UnR8fCgoKT0+e30pO3ZhciB0bj1BdC5pbmRleGVkREIoKTt0cnl7dmFyIHduPXRuLm9wZW4oQXQuREJfTkFNRSgpLEF0LkRCX1ZFUlNJT04pfWNhdGNoKHNyKXtyZXR1cm4gUnQoc3IpfXduLm9udXBncmFk''@;'; put 'put ''ZW5lZWRlZD1SdCx3bi5vbnN1Y2Nlc3M9KCk9Pnt2YXIgc3I9d24ucmVzdWx0O3RyeXt2YXIgbHI9c3IudHJhbnNhY3Rpb24oW0F0LkRCX1NUT1JFX05BTUVdLCJyZWFkb25seSIpfWNhdGNoKFlpKXtyZXR1cm4gdm9pZCBSdChZaSl9dmFyIFJyPWxyLm9iamVjdFN0b3JlKEF0LkRCX1NUT1JF''@;'; put 'put ''X05BTUUpLGdvPTAsTW89MCxmbz1zdC5sZW5ndGg7ZnVuY3Rpb24gSm8oKXswPT1Nbz9ndCgpOlJ0KCl9c3QuZm9yRWFjaChZaT0+e3ZhciBZcz1Sci5nZXQoWWkpO1lzLm9uc3VjY2Vzcz0oKT0+e0F0LmFuYWx5emVQYXRoKFlpKS5leGlzdHMmJkF0LnVubGluayhZaSksQXQuY3JlYXRlRGF0''@;'; put 'put ''YUZpbGUoUmkuZGlybmFtZShZaSksUmkuYmFzZW5hbWUoWWkpLFlzLnJlc3VsdCwhMCwhMCwhMCksKytnbytNbz09Zm8mJkpvKCl9LFlzLm9uZXJyb3I9KCk9PntNbysrLGdvK01vPT1mbyYmSm8oKX19KSxsci5vbmVycm9yPVJ0fSx3bi5vbmVycm9yPVJ0fX0sSWk9e0RFRkFVTFRfUE9MTE1B''@;'; put 'put ''U0s6NSxjYWxjdWxhdGVBdDpmdW5jdGlvbihzdCxndCxSdCl7aWYoUmkuaXNBYnMoZ3QpKXJldHVybiBndDt2YXIgdG47aWYodG49LTEwMD09PXN0P0F0LmN3ZCgpOklpLmdldFN0cmVhbUZyb21GRChzdCkucGF0aCwwPT1ndC5sZW5ndGgpe2lmKCFSdCl0aHJvdyBuZXcgQXQuRXJybm9FcnJv''@;'; put 'put ''cig0NCk7cmV0dXJuIHRufXJldHVybiBSaS5qb2luMih0bixndCl9LGRvU3RhdDpmdW5jdGlvbihzdCxndCxSdCl7dHJ5e3ZhciB0bj1zdChndCl9Y2F0Y2goUnIpe2lmKFJyJiZSci5ub2RlJiZSaS5ub3JtYWxpemUoZ3QpIT09Umkubm9ybWFsaXplKEF0LmdldFBhdGgoUnIubm9kZSkpKXJl''@;'; put 'put ''dHVybi01NDt0aHJvdyBScn1TdFtSdD4+Ml09dG4uZGV2LFN0W1J0Kzg+PjJdPXRuLmlubyxTdFtSdCsxMj4+Ml09dG4ubW9kZSxRdFtSdCsxNj4+Ml09dG4ubmxpbmssU3RbUnQrMjA+PjJdPXRuLnVpZCxTdFtSdCsyND4+Ml09dG4uZ2lkLFN0W1J0KzI4Pj4yXT10bi5yZGV2LEZuPVt0bi5z''@;'; put 'put ''aXplPj4+MCwoWnI9dG4uc2l6ZSwrTWF0aC5hYnMoWnIpPj0xP1pyPjA/KDB8TWF0aC5taW4oK01hdGguZmxvb3IoWnIvNDI5NDk2NzI5NiksNDI5NDk2NzI5NSkpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLFN0W1J0KzQwPj4yXT1Gblsw''@;'; put 'put ''XSxTdFtSdCs0ND4+Ml09Rm5bMV0sU3RbUnQrNDg+PjJdPTQwOTYsU3RbUnQrNTI+PjJdPXRuLmJsb2Nrczt2YXIgd249dG4uYXRpbWUuZ2V0VGltZSgpLHNyPXRuLm10aW1lLmdldFRpbWUoKSxscj10bi5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIEZuPVtNYXRoLmZsb29yKHduLzFlMyk+Pj4w''@;'; put 'put ''LChacj1NYXRoLmZsb29yKHduLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs1Nj4+Ml09''@;'; put 'put ''Rm5bMF0sU3RbUnQrNjA+PjJdPUZuWzFdLFF0W1J0KzY0Pj4yXT13biUxZTMqMWUzLEZuPVtNYXRoLmZsb29yKHNyLzFlMyk+Pj4wLChacj1NYXRoLmZsb29yKHNyLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5''@;'; put 'put ''NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs3Mj4+Ml09Rm5bMF0sU3RbUnQrNzY+PjJdPUZuWzFdLFF0W1J0KzgwPj4yXT1zciUxZTMqMWUzLEZuPVtNYXRoLmZsb29yKGxyLzFlMyk+Pj4wLChacj1NYXRoLmZsb29y''@;'; put 'put ''KGxyLzFlMyksK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCs4OD4+Ml09Rm5bMF0sU3RbUnQrOTI+''@;'; put 'put ''PjJdPUZuWzFdLFF0W1J0Kzk2Pj4yXT1sciUxZTMqMWUzLEZuPVt0bi5pbm8+Pj4wLChacj10bi5pbm8sK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4w''@;'; put 'put ''KSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFtSdCsxMDQ+PjJdPUZuWzBdLFN0W1J0KzEwOD4+Ml09Rm5bMV0sMH0sZG9Nc3luYzpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7aWYoIUF0LmlzRmlsZShndC5ub2RlLm1vZGUpKXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDQzKTtpZigyJnRuKXJl''@;'; put 'put ''dHVybiAwO3ZhciBzcj15dC5zbGljZShzdCxzdCtSdCk7QXQubXN5bmMoZ3Qsc3Isd24sUnQsdG4pfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSWkudmFyYXJncys9NCxTdFtJaS52YXJhcmdzLTQ+PjJdfSxnZXRTdHI6ZnVuY3Rpb24oc3Qpe3JldHVybiBjcihzdCl9''@;'; put 'put ''LGdldFN0cmVhbUZyb21GRDpmdW5jdGlvbihzdCl7dmFyIGd0PUF0LmdldFN0cmVhbShzdCk7aWYoIWd0KXRocm93IG5ldyBBdC5FcnJub0Vycm9yKDgpO3JldHVybiBndH19LFFzPVtdO2Z1bmN0aW9uIEZzKHN0KXt0cnl7cmV0dXJuIGdlLmdyb3coc3Qtb3QuYnl0ZUxlbmd0aCs2NTUzNT4+''@;'; put 'put ''PjE2KSxsaShnZS5idWZmZXIpLDF9Y2F0Y2h7fX12YXIgZWM9e307ZnVuY3Rpb24gQ2EoKXtpZighQ2Euc3RyaW5ncyl7dmFyIHN0PXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3Qi''@;'; put 'put ''PT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzpffHwiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIGd0IGluIGVjKXZvaWQgMD09PWVjW2d0XT9kZWxldGUgc3RbZ3Rd''@;'; put 'put ''OnN0W2d0XT1lY1tndF07dmFyIFJ0PVtdO2Zvcih2YXIgZ3QgaW4gc3QpUnQucHVzaChndCsiPSIrc3RbZ3RdKTtDYS5zdHJpbmdzPVJ0fXJldHVybiBDYS5zdHJpbmdzfWZ1bmN0aW9uIERsKHN0KXtyZXR1cm4gc3QlND09MCYmKHN0JTEwMCE9MHx8c3QlNDAwPT0wKX12YXIgeDI9WzMxLDI5''@;'; put 'put ''LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSx1ND1bMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLENkPWZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXtzdHx8KHN0PXRoaXMpLHRoaXMucGFyZW50PXN0LHRoaXMubW91bnQ9c3QubW91bnQsdGhpcy5tb3VudGVkPW51bGws''@;'; put 'put ''dGhpcy5pZD1BdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9Z3QsdGhpcy5tb2RlPVJ0LHRoaXMubm9kZV9vcHM9e30sdGhpcy5zdHJlYW1fb3BzPXt9LHRoaXMucmRldj10bn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2QucHJvdG90eXBlLHtyZWFkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MzY1PT0oMzY1JnRoaXMubW9kZSl9LHNldDpmdW5jdGlvbihzdCl7c3Q/dGhpcy5tb2RlfD0zNjU6dGhpcy5tb2RlJj0tMzY2fX0sd3JpdGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAxNDY9PSgxNDYmdGhpcy5tb2RlKX0sc2V0OmZ1bmN0aW9uKHN0KXtzdD90aGlzLm1vZGV8PTE0Njp0aGlz''@;'; put 'put ''Lm1vZGUmPS0xNDd9fSxpc0ZvbGRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEF0LmlzRGlyKHRoaXMubW9kZSl9fSxpc0RldmljZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEF0LmlzQ2hyZGV2KHRoaXMubW9kZSl9fX0pLEF0LkZTTm9kZT1DZCxBdC5zdGF0aWNJbml0KCk7dmFyIEp1PXti''@;'; put 'put ''OmZ1bmN0aW9uKHN0LGd0LFJ0KXt0aHJvdyBuZXcgTnIoc3QpLmluaXQoZ3QsUnQpLHN0fSxsOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7aWYoZ3Q9SWkuZ2V0U3RyKGd0KSxndD1JaS5jYWxjdWxhdGVBdChzdCxndCksLTgmUnQpcmV0dXJuLTI4O3ZhciB3bj1BdC5sb29rdXBQYXRoKGd0''@;'; put 'put ''LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCF3bilyZXR1cm4tNDQ7dmFyIHNyPSIiO3JldHVybiA0JlJ0JiYoc3IrPSJyIiksMiZSdCYmKHNyKz0idyIpLDEmUnQmJihzcis9IngiKSxzciYmQXQubm9kZVBlcm1pc3Npb25zKHduLHNyKT8tMjowfWNhdGNoKGxyKXtpZih2b2lkIDA9PT1BdHx8IShs''@;'; put 'put ''ciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IGxyO3JldHVybi1sci5lcnJub319LGk6ZnVuY3Rpb24oc3QsZ3QsUnQpe0lpLnZhcmFyZ3M9UnQ7dHJ5e3ZhciB0bj1JaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3N3aXRjaChndCl7Y2FzZSAwOnJldHVybih3bj1JaS5nZXQoKSk8MD8t''@;'; put 'put ''Mjg6QXQuY3JlYXRlU3RyZWFtKHRuLHduKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJuIDA7Y2FzZSAzOnJldHVybiB0bi5mbGFncztjYXNlIDQ6dmFyIHduPUlpLmdldCgpO3JldHVybiB0bi5mbGFnc3w9d24sMDtjYXNlIDU6cmV0dXJuIHduPUlpLmdldCgpLGt0W3du''@;'; put 'put ''KzA+PjFdPTIsMDtjYXNlIDE2OmNhc2UgODpkZWZhdWx0OnJldHVybi0yODtjYXNlIDk6cmV0dXJuIFN0W013KCk+PjJdPTI4LC0xfX1jYXRjaChscil7aWYodm9pZCAwPT09QXR8fCEobHIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBscjtyZXR1cm4tbHIuZXJybm99fSx3OmZ1''@;'; put 'put ''bmN0aW9uKHN0LGd0KXt0cnl7dmFyIFJ0PUlpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIElpLmRvU3RhdChBdC5zdGF0LFJ0LnBhdGgsZ3QpfWNhdGNoKHRuKXtpZih2b2lkIDA9PT1BdHx8ISh0biBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHRuO3JldHVybi10bi5lcnJu''@;'; put 'put ''b319LHg6ZnVuY3Rpb24oc3QsZ3QsUnQpe0lpLnZhcmFyZ3M9UnQ7dHJ5e3ZhciB0bj1JaS5nZXRTdHJlYW1Gcm9tRkQoc3QpO3N3aXRjaChndCl7Y2FzZSAyMTUwOTpjYXNlIDIxNTA1OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNl''@;'; put 'put ''IDIxNTA4OmNhc2UgMjE1MjM6Y2FzZSAyMTUyNDpyZXR1cm4gdG4udHR5PzA6LTU5O2Nhc2UgMjE1MTk6aWYoIXRuLnR0eSlyZXR1cm4tNTk7dmFyIHduPUlpLmdldCgpO3JldHVybiBTdFt3bj4+Ml09MCwwO2Nhc2UgMjE1MjA6cmV0dXJuIHRuLnR0eT8tMjg6LTU5O2Nhc2UgMjE1MzE6cmV0''@;'; put 'put ''dXJuIHduPUlpLmdldCgpLEF0LmlvY3RsKHRuLGd0LHduKTtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuLXNyLmVycm5vfX0sdTpmdW5jdGlvbihzdCxndCxSdCx0bil7dHJ5''@;'; put 'put ''e2d0PUlpLmdldFN0cihndCk7dmFyIHduPTI1NiZ0bixzcj00MDk2JnRuO3JldHVybiB0biY9LTY0MDEsZ3Q9SWkuY2FsY3VsYXRlQXQoc3QsZ3Qsc3IpLElpLmRvU3RhdCh3bj9BdC5sc3RhdDpBdC5zdGF0LGd0LFJ0KX1jYXRjaChscil7aWYodm9pZCAwPT09QXR8fCEobHIgaW5zdGFuY2Vv''@;'; put 'put ''ZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBscjtyZXR1cm4tbHIuZXJybm99fSxkOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXtJaS52YXJhcmdzPXRuO3RyeXtndD1JaS5nZXRTdHIoZ3QpLGd0PUlpLmNhbGN1bGF0ZUF0KHN0LGd0KTt2YXIgd249dG4/SWkuZ2V0KCk6MDtyZXR1cm4gQXQub3Blbihn''@;'; put 'put ''dCxSdCx3bikuZmR9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuLXNyLmVycm5vfX0sdjpmdW5jdGlvbihzdCxndCl7dHJ5e3JldHVybiBzdD1JaS5nZXRTdHIoc3QpLElpLmRvU3RhdChBdC5zdGF0LHN0LGd0''@;'; put 'put ''KX1jYXRjaChSdCl7aWYodm9pZCAwPT09QXR8fCEoUnQgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBSdDtyZXR1cm4tUnQuZXJybm99fSxwOmZ1bmN0aW9uKHN0LGd0LFJ0KXt0cnl7cmV0dXJuIGd0PUlpLmdldFN0cihndCksZ3Q9SWkuY2FsY3VsYXRlQXQoc3QsZ3QpLDA9PT1S''@;'; put 'put ''dD9BdC51bmxpbmsoZ3QpOjUxMj09PVJ0P0F0LnJtZGlyKGd0KTpFbigiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8gdW5saW5rYXQiKSwwfWNhdGNoKHRuKXtpZih2b2lkIDA9PT1BdHx8ISh0biBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHRuO3JldHVybi10bi5lcnJub319LGo6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4hMH0scTpmdW5jdGlvbihzdCxndCxSdCx0bix3bixzcixscil7dHJ5e3ZhciBScj1JaS5nZXRTdHJlYW1Gcm9tRkQodG4pLGdvPUF0Lm1tYXAoUnIsc3Qsd24sZ3QsUnQpLE1vPWdvLnB0cjtyZXR1cm4gU3Rbc3I+PjJdPWdvLmFsbG9jYXRlZCxRdFtscj4+Ml09''@;'; put 'put ''TW8sMH1jYXRjaChmbyl7aWYodm9pZCAwPT09QXR8fCEoZm8gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBmbztyZXR1cm4tZm8uZXJybm99fSxyOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuLHduLHNyKXt0cnl7dmFyIGxyPUlpLmdldFN0cmVhbUZyb21GRCh3bik7MiZSdCYmSWkuZG9N''@;'; put 'put ''c3luYyhzdCxscixndCx0bixzciksQXQubXVubWFwKGxyKX1jYXRjaChScil7aWYodm9pZCAwPT09QXR8fCEoUnIgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxhOmZ1bmN0aW9uKCl7RW4oIiIpfSx5OmZ1bmN0aW9uKHN0LGd0LFJ0KXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gbGEoc3QsZ3QsUnQpe3ZhciB0bj1mdW5jdGlvbih3bixzcil7dmFyIGxyO2ZvcihRcy5sZW5ndGg9MCxzcj4+PTI7bHI9eXRbd24rK107KXNyKz0xMDUhPWxyJnNyLFFzLnB1c2goMTA1PT1scj9TdFtzcl06cm5bc3IrKz4+MV0pLCsrc3I7cmV0dXJuIFFzfShndCxSdCk7''@;'; put 'put ''cmV0dXJuIE9yW3N0XS5hcHBseShudWxsLHRuKX0oc3QsZ3QsUnQpfSxlOmZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9LGs6ZnVuY3Rpb24oc3QsZ3QsUnQpe3l0LmNvcHlXaXRoaW4oc3QsZ3QsZ3QrUnQpfSxvOmZ1bmN0aW9uKHN0KXt2YXIgZ3QsdG49eXQubGVuZ3RoLHduPTIxNDc0''@;'; put 'put ''ODM2NDg7aWYoKHN0Pj4+PTApPnduKXJldHVybiExO2Zvcih2YXIgc3I9MTtzcjw9NDtzcio9Mil7dmFyIGxyPXRuKigxKy4yL3NyKTtpZihscj1NYXRoLm1pbihscixzdCsxMDA2NjMyOTYpLEZzKE1hdGgubWluKHduLChndD1NYXRoLm1heChzdCxscikpKyg2NTUzNi1ndCU2NTUzNiklNjU1''@;'; put 'put ''MzYpKSlyZXR1cm4hMH1yZXR1cm4hMX0sczpmdW5jdGlvbihzdCxndCl7dmFyIFJ0PTA7cmV0dXJuIENhKCkuZm9yRWFjaChmdW5jdGlvbih0bix3bil7dmFyIHNyPWd0K1J0O1F0W3N0KzQqd24+PjJdPXNyLGZ1bmN0aW9uKGxyLFJyLGdvKXtmb3IodmFyIE1vPTA7TW88bHIubGVuZ3RoOysr''@;'; put 'put ''TW8pZXRbUnIrKz4+MF09bHIuY2hhckNvZGVBdChNbyk7ZXRbUnI+PjBdPTB9KHRuLHNyKSxSdCs9dG4ubGVuZ3RoKzF9KSwwfSx0OmZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9Q2EoKTtRdFtzdD4+Ml09UnQubGVuZ3RoO3ZhciB0bj0wO3JldHVybiBSdC5mb3JFYWNoKGZ1bmN0aW9uKHduKXt0''@;'; put 'put ''bis9d24ubGVuZ3RoKzF9KSxRdFtndD4+Ml09dG4sMH0sZjpmdW5jdGlvbihzdCxndCl7IWZ1bmN0aW9uIFJoKHN0KXt3ZXx8KGQub25FeGl0JiZkLm9uRXhpdChzdCksRWU9ITApLFQoc3QsbmV3ICRyKHN0KSl9KHN0KX0sYzpmdW5jdGlvbihzdCl7dHJ5e3ZhciBndD1JaS5nZXRTdHJlYW1G''@;'; put 'put ''cm9tRkQoc3QpO3JldHVybiBBdC5jbG9zZShndCksMH1jYXRjaChSdCl7aWYodm9pZCAwPT09QXR8fCEoUnQgaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBSdDtyZXR1cm4gUnQuZXJybm99fSxnOmZ1bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7dmFyIHduPWZ1bmN0aW9uKHNyLGxy''@;'; put 'put ''LFJyLGdvKXtmb3IodmFyIE1vPTAsZm89MDtmbzxScjtmbysrKXt2YXIgSm89UXRbbHI+PjJdLFlpPVF0W2xyKzQ+PjJdO2xyKz04O3ZhciBZcz1BdC5yZWFkKHNyLGV0LEpvLFlpLHZvaWQgMCk7aWYoWXM8MClyZXR1cm4tMTtpZihNbys9WXMsWXM8WWkpYnJlYWt9cmV0dXJuIE1vfShJaS5n''@;'; put 'put ''ZXRTdHJlYW1Gcm9tRkQoc3QpLGd0LFJ0KTtyZXR1cm4gUXRbdG4+PjJdPXduLDB9Y2F0Y2goc3Ipe2lmKHZvaWQgMD09PUF0fHwhKHNyIGluc3RhbmNlb2YgQXQuRXJybm9FcnJvcikpdGhyb3cgc3I7cmV0dXJuIHNyLmVycm5vfX0sbTpmdW5jdGlvbihzdCxndCxSdCx0bix3bil7dHJ5e3Zh''@;'; put 'put ''ciBzcj0oZ289UnQpKzIwOTcxNTI+Pj4wPDQxOTQzMDUtISEoUnI9Z3QpPyhScj4+PjApKzQyOTQ5NjcyOTYqZ286TmFOO2lmKGlzTmFOKHNyKSlyZXR1cm4gNjE7dmFyIGxyPUlpLmdldFN0cmVhbUZyb21GRChzdCk7cmV0dXJuIEF0Lmxsc2Vlayhscixzcix0biksRm49W2xyLnBvc2l0aW9u''@;'; put 'put ''Pj4+MCwoWnI9bHIucG9zaXRpb24sK01hdGguYWJzKFpyKT49MT9acj4wPygwfE1hdGgubWluKCtNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpLDQyOTQ5NjcyOTUpKT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxTdFt3bj4+Ml09Rm5bMF0s''@;'; put 'put ''U3Rbd24rND4+Ml09Rm5bMV0sbHIuZ2V0ZGVudHMmJjA9PT1zciYmMD09PXRuJiYobHIuZ2V0ZGVudHM9bnVsbCksMH1jYXRjaChNbyl7aWYodm9pZCAwPT09QXR8fCEoTW8gaW5zdGFuY2VvZiBBdC5FcnJub0Vycm9yKSl0aHJvdyBNbztyZXR1cm4gTW8uZXJybm99dmFyIFJyLGdvfSxoOmZ1''@;'; put 'put ''bmN0aW9uKHN0LGd0LFJ0LHRuKXt0cnl7dmFyIHduPWZ1bmN0aW9uKHNyLGxyLFJyLGdvKXtmb3IodmFyIE1vPTAsZm89MDtmbzxScjtmbysrKXt2YXIgSm89UXRbbHI+PjJdLFlpPVF0W2xyKzQ+PjJdO2xyKz04O3ZhciBZcz1BdC53cml0ZShzcixldCxKbyxZaSx2b2lkIDApO2lmKFlzPDAp''@;'; put 'put ''cmV0dXJuLTE7TW8rPVlzfXJldHVybiBNb30oSWkuZ2V0U3RyZWFtRnJvbUZEKHN0KSxndCxSdCk7cmV0dXJuIFF0W3RuPj4yXT13biwwfWNhdGNoKHNyKXtpZih2b2lkIDA9PT1BdHx8IShzciBpbnN0YW5jZW9mIEF0LkVycm5vRXJyb3IpKXRocm93IHNyO3JldHVybiBzci5lcnJub319LG46''@;'; put 'put ''ZnVuY3Rpb24oc3QsZ3QsUnQsdG4sd24pe3JldHVybiBmdW5jdGlvbiBPaChzdCxndCxSdCx0bil7dmFyIHduPVN0W3RuKzQwPj4yXSxzcj17dG1fc2VjOlN0W3RuPj4yXSx0bV9taW46U3RbdG4rND4+Ml0sdG1faG91cjpTdFt0bis4Pj4yXSx0bV9tZGF5OlN0W3RuKzEyPj4yXSx0bV9tb246''@;'; put 'put ''U3RbdG4rMTY+PjJdLHRtX3llYXI6U3RbdG4rMjA+PjJdLHRtX3dkYXk6U3RbdG4rMjQ+PjJdLHRtX3lkYXk6U3RbdG4rMjg+PjJdLHRtX2lzZHN0OlN0W3RuKzMyPj4yXSx0bV9nbXRvZmY6U3RbdG4rMzY+PjJdLHRtX3pvbmU6d24/Y3Iod24pOiIifSxscj1jcihSdCksUnI9eyIlYyI6IiVh''@;'; put 'put ''ICViICVkICVIOiVNOiVTICVZIiwiJUQiOiIlbS8lZC8leSIsIiVGIjoiJVktJW0tJWQiLCIlaCI6IiViIiwiJXIiOiIlSTolTTolUyAlcCIsIiVSIjoiJUg6JU0iLCIlVCI6IiVIOiVNOiVTIiwiJXgiOiIlbS8lZC8leSIsIiVYIjoiJUg6JU06JVMiLCIlRWMiOiIlYyIsIiVFQyI6IiVDIiwi''@;'; put 'put ''JUV4IjoiJW0vJWQvJXkiLCIlRVgiOiIlSDolTTolUyIsIiVFeSI6IiV5IiwiJUVZIjoiJVkiLCIlT2QiOiIlZCIsIiVPZSI6IiVlIiwiJU9IIjoiJUgiLCIlT0kiOiIlSSIsIiVPbSI6IiVtIiwiJU9NIjoiJU0iLCIlT1MiOiIlUyIsIiVPdSI6IiV1IiwiJU9VIjoiJVUiLCIlT1YiOiIlViIs''@;'; put 'put ''IiVPdyI6IiV3IiwiJU9XIjoiJVciLCIlT3kiOiIleSJ9O2Zvcih2YXIgZ28gaW4gUnIpbHI9bHIucmVwbGFjZShuZXcgUmVnRXhwKGdvLCJnIiksUnJbZ29dKTt2YXIgTW89WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1''@;'; put 'put ''cmRheSJdLGZvPVsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXTtmdW5jdGlvbiBKbyhBaSxqbyxxYyl7Zm9yKHZhciBMbD0ibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIEFpP0FpLnRvU3RyaW5nKCk6QWl8fCIiO0xsLmxlbmd0aDxqbzspTGw9cWNbMF0rTGw7cmV0dXJuIExsfWZ1bmN0aW9uIFlpKEFpLGpvKXtyZXR1cm4gSm8oQWksam8sIjAiKX1mdW5jdGlvbiBZcyhBaSxqbyl7ZnVuY3Rpb24gcWModGMpe3JldHVybiB0YzwwPy0xOnRjPjA/MTow''@;'; put 'put ''fXZhciBMbDtyZXR1cm4gMD09PShMbD1xYyhBaS5nZXRGdWxsWWVhcigpLWpvLmdldEZ1bGxZZWFyKCkpKSYmMD09PShMbD1xYyhBaS5nZXRNb250aCgpLWpvLmdldE1vbnRoKCkpKSYmKExsPXFjKEFpLmdldERhdGUoKS1qby5nZXREYXRlKCkpKSxMbH1mdW5jdGlvbiBJbChBaSl7c3dpdGNo''@;'; put 'put ''KEFpLmdldERheSgpKXtjYXNlIDA6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwyOSk7Y2FzZSAxOnJldHVybiBBaTtjYXNlIDI6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCksMCwzKTtjYXNlIDM6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCks''@;'; put 'put ''MCwyKTtjYXNlIDQ6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCksMCwxKTtjYXNlIDU6cmV0dXJuIG5ldyBEYXRlKEFpLmdldEZ1bGxZZWFyKCktMSwxMSwzMSk7Y2FzZSA2OnJldHVybiBuZXcgRGF0ZShBaS5nZXRGdWxsWWVhcigpLTEsMTEsMzApfX1mdW5jdGlvbiBNbChBaSl7''@;'; put 'put ''dmFyIGpvPWZ1bmN0aW9uKFRydCxWVCl7Zm9yKHZhciBFMT1uZXcgRGF0ZShUcnQuZ2V0VGltZSgpKTtWVD4wOyl7dmFyIERydD1EbChFMS5nZXRGdWxsWWVhcigpKSxhWj1FMS5nZXRNb250aCgpLFNsZT0oRHJ0P3gyOnU0KVthWl07aWYoIShWVD5TbGUtRTEuZ2V0RGF0ZSgpKSlyZXR1cm4g''@;'; put 'put ''RTEuc2V0RGF0ZShFMS5nZXREYXRlKCkrVlQpLEUxO1ZULT1TbGUtRTEuZ2V0RGF0ZSgpKzEsRTEuc2V0RGF0ZSgxKSxhWjwxMT9FMS5zZXRNb250aChhWisxKTooRTEuc2V0TW9udGgoMCksRTEuc2V0RnVsbFllYXIoRTEuZ2V0RnVsbFllYXIoKSsxKSl9cmV0dXJuIEUxfShuZXcgRGF0ZShB''@;'; put 'put ''aS50bV95ZWFyKzE5MDAsMCwxKSxBaS50bV95ZGF5KSxxYz1uZXcgRGF0ZShqby5nZXRGdWxsWWVhcigpLDAsNCksTGw9bmV3IERhdGUoam8uZ2V0RnVsbFllYXIoKSsxLDAsNCksdGM9SWwocWMpLEFydD1JbChMbCk7cmV0dXJuIFlzKHRjLGpvKTw9MD9ZcyhBcnQsam8pPD0wP2pvLmdldEZ1''@;'; put 'put ''bGxZZWFyKCkrMTpqby5nZXRGdWxsWWVhcigpOmpvLmdldEZ1bGxZZWFyKCktMX12YXIgUXU9eyIlYSI6ZnVuY3Rpb24oQWkpe3JldHVybiBNb1tBaS50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKX0sIiVBIjpmdW5jdGlvbihBaSl7cmV0dXJuIE1vW0FpLnRtX3dkYXldfSwiJWIiOmZ1bmN0aW9u''@;'; put 'put ''KEFpKXtyZXR1cm4gZm9bQWkudG1fbW9uXS5zdWJzdHJpbmcoMCwzKX0sIiVCIjpmdW5jdGlvbihBaSl7cmV0dXJuIGZvW0FpLnRtX21vbl19LCIlQyI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaSgoQWkudG1feWVhcisxOTAwKS8xMDB8MCwyKX0sIiVkIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlp''@;'; put 'put ''KEFpLnRtX21kYXksMil9LCIlZSI6ZnVuY3Rpb24oQWkpe3JldHVybiBKbyhBaS50bV9tZGF5LDIsIiAiKX0sIiVnIjpmdW5jdGlvbihBaSl7cmV0dXJuIE1sKEFpKS50b1N0cmluZygpLnN1YnN0cmluZygyKX0sIiVHIjpmdW5jdGlvbihBaSl7cmV0dXJuIE1sKEFpKX0sIiVIIjpmdW5jdGlv''@;'; put 'put ''bihBaSl7cmV0dXJuIFlpKEFpLnRtX2hvdXIsMil9LCIlSSI6ZnVuY3Rpb24oQWkpe3ZhciBqbz1BaS50bV9ob3VyO3JldHVybiAwPT1qbz9qbz0xMjpqbz4xMiYmKGpvLT0xMiksWWkoam8sMil9LCIlaiI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9tZGF5K2Z1bmN0aW9uKGpvLHFj''@;'; put 'put ''KXtmb3IodmFyIExsPTAsdGM9MDt0Yzw9cWM7TGwrPWpvW3RjKytdKTtyZXR1cm4gTGx9KERsKEFpLnRtX3llYXIrMTkwMCk/eDI6dTQsQWkudG1fbW9uLTEpLDMpfSwiJW0iOmZ1bmN0aW9uKEFpKXtyZXR1cm4gWWkoQWkudG1fbW9uKzEsMil9LCIlTSI6ZnVuY3Rpb24oQWkpe3JldHVybiBZ''@;'; put 'put ''aShBaS50bV9taW4sMil9LCIlbiI6ZnVuY3Rpb24oKXtyZXR1cm4iXG4ifSwiJXAiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1faG91cj49MCYmQWkudG1faG91cjwxMj8iQU0iOiJQTSJ9LCIlUyI6ZnVuY3Rpb24oQWkpe3JldHVybiBZaShBaS50bV9zZWMsMil9LCIldCI6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4iXHQifSwiJXUiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1fd2RheXx8N30sIiVVIjpmdW5jdGlvbihBaSl7cmV0dXJuIFlpKE1hdGguZmxvb3IoKEFpLnRtX3lkYXkrNy1BaS50bV93ZGF5KS83KSwyKX0sIiVWIjpmdW5jdGlvbihBaSl7dmFyIGpvPU1hdGguZmxvb3IoKEFp''@;'; put 'put ''LnRtX3lkYXkrNy0oQWkudG1fd2RheSs2KSU3KS83KTtpZigoQWkudG1fd2RheSszNzEtQWkudG1feWRheS0yKSU3PD0yJiZqbysrLGpvKXtpZig1Mz09am8pe3ZhciBxYz0oQWkudG1fd2RheSszNzEtQWkudG1feWRheSklNzs0PT1xY3x8Mz09cWMmJkRsKEFpLnRtX3llYXIpfHwoam89MSl9''@;'; put 'put ''fWVsc2V7am89NTI7dmFyIExsPShBaS50bV93ZGF5KzctQWkudG1feWRheS0xKSU3Oyg0PT1MbHx8NT09TGwmJkRsKEFpLnRtX3llYXIlNDAwLTEpKSYmam8rK31yZXR1cm4gWWkoam8sMil9LCIldyI6ZnVuY3Rpb24oQWkpe3JldHVybiBBaS50bV93ZGF5fSwiJVciOmZ1bmN0aW9uKEFpKXty''@;'; put 'put ''ZXR1cm4gWWkoTWF0aC5mbG9vcigoQWkudG1feWRheSs3LShBaS50bV93ZGF5KzYpJTcpLzcpLDIpfSwiJXkiOmZ1bmN0aW9uKEFpKXtyZXR1cm4oQWkudG1feWVhcisxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKX0sIiVZIjpmdW5jdGlvbihBaSl7cmV0dXJuIEFpLnRtX3llYXIrMTkw''@;'; put 'put ''MH0sIiV6IjpmdW5jdGlvbihBaSl7dmFyIGpvPUFpLnRtX2dtdG9mZjtyZXR1cm4oam8+PTA/IisiOiItIikrKCIwMDAwIisoam89KGpvPU1hdGguYWJzKGpvKS82MCkvNjAqMTAwK2pvJTYwKSkuc2xpY2UoLTQpfSwiJVoiOmZ1bmN0aW9uKEFpKXtyZXR1cm4gQWkudG1fem9uZX0sIiUlIjpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiIlIn19O2Zvcih2YXIgZ28gaW4gbHI9bHIucmVwbGFjZSgvJSUvZywiXDBcMCIpLFF1KWxyLmluY2x1ZGVzKGdvKSYmKGxyPWxyLnJlcGxhY2UobmV3IFJlZ0V4cChnbywiZyIpLFF1W2dvXShzcikpKTt2YXIgY2w9R28obHI9bHIucmVwbGFjZSgvXDBcMC9nLCIl''@;'; put 'put ''IiksITEpO3JldHVybiBjbC5sZW5ndGg+Z3Q/MDooZXQuc2V0KGNsLHN0KSxjbC5sZW5ndGgtMSl9KHN0LGd0LFJ0LHRuKX19OyhmdW5jdGlvbigpe3ZhciBzdD17YTpKdX07ZnVuY3Rpb24gZ3Qod24sc3Ipe2QuYXNtPXduLmV4cG9ydHMsbGkoKGdlPWQuYXNtLnopLmJ1ZmZlciksUW4udW5z''@;'; put 'put ''aGlmdChkLmFzbS5BKSxjbigpfWZ1bmN0aW9uIFJ0KHduKXtndCh3bi5pbnN0YW5jZSl9ZnVuY3Rpb24gdG4od24pe3JldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIFByKHN0KXt0cnl7aWYoc3Q9PW1yJiZoKXJldHVybiBuZXcgVWludDhB''@;'; put 'put ''cnJheShoKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goZ3Qpe0VuKGd0KX19KG1yKX0pLnRoZW4oZnVuY3Rpb24oc3Ipe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShzcixzdCl9KS50aGVuKGZ1bmN0aW9uKHNyKXty''@;'; put 'put ''ZXR1cm4gc3J9KS50aGVuKHduLGZ1bmN0aW9uKHNyKXtpZSgiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIitzciksRW4oc3IpfSl9aWYoT3QoKSxkLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIGQuaW5zdGFudGlhdGVXYXNtKHN0LGd0KX1jYXRjaCh3bil7aWUo''@;'; put 'put ''Ik1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrd24pLGEod24pfShofHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fE9uKG1yKXx8ZnVuY3Rpb24gSm4oc3Qpe3JldHVybiBzdC5zdGFydHNXaXRo''@;'; put 'put ''KCJmaWxlOi8vIil9KG1yKXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZldGNoP3RuKFJ0KTpmZXRjaChtcix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24od24pe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh3bixzdCkudGhlbihSdCxmdW5j''@;'; put 'put ''dGlvbihzcil7cmV0dXJuIGllKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitzciksaWUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdG4oUnQpfSl9KSkuY2F0Y2goYSl9KSgpLGQuX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuKGQuX19fd2FzbV9jYWxsX2N0b3JzPWQuYXNtLkEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIE0xPWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTTE9ZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19f''@;'; put 'put ''MD1kLmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPWZ1bmN0aW9uKCl7cmV0dXJuKE11PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPWQuYXNtLkMpLmFwcGx5KG51bGwsYXJndW1lbnRz''@;'; put 'put ''KX0sYXU9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD1mdW5jdGlvbigpe3JldHVybihhdT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPWQuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seDE9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6''@;'; put 'put ''X2xhc3RFcnJvcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKHgxPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0RXJyb3JfMD1kLmFzbS5FKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEUyPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4oRTI9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1kLmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LCQ3PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXN0UmVzdWx0XzA9ZnVuY3Rpb24oKXtyZXR1cm4oJDc9ZC5fZW1zY3JpcHRlbl9iaW5kX0dy''@;'; put 'put ''YXBodml6X2xhc3RSZXN1bHRfMD1kLmFzbS5HKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGQ0PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1mdW5jdGlvbigpe3JldHVybihkND1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0XzM9ZC5hc20uSCkuYXBwbHko''@;'; put 'put ''bnVsbCxhcmd1bWVudHMpfSxTdz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihTdz1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1kLmFzbS5JKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O2QuX2ZyZWU9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4oZC5fZnJlZT1kLmFzbS5LKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGQuX21hbGxvYz1mdW5jdGlvbigpe3JldHVybihkLl9tYWxsb2M9ZC5hc20uTCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfTt2YXIgZW0sTXc9ZC5fX19lcnJub19sb2NhdGlvbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybihNdz1kLl9fX2Vycm5vX2xvY2F0aW9uPWQuYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seHc9ZC5fZW1zY3JpcHRlbl9idWlsdGluX21lbWFsaWduPWZ1bmN0aW9uKCl7cmV0dXJuKHh3PWQuX2Vtc2NyaXB0ZW5fYnVpbHRpbl9tZW1hbGlnbj1kLmFzbS5OKS5hcHBs''@;'; put 'put ''eShudWxsLGFyZ3VtZW50cyl9LHRtPWQuX19fY3hhX2lzX3BvaW50ZXJfdHlwZT1mdW5jdGlvbigpe3JldHVybih0bT1kLl9fX2N4YV9pc19wb2ludGVyX3R5cGU9ZC5hc20uTykuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtmdW5jdGlvbiBFdyhzdCl7ZnVuY3Rpb24gZ3QoKXtlbXx8KGVtPSEw''@;'; put 'put ''LGQuY2FsbGVkUnVuPSEwLEVlfHwoZC5ub0ZTSW5pdHx8QXQuaW5pdC5pbml0aWFsaXplZHx8QXQuaW5pdCgpLEF0Lmlnbm9yZVBlcm1pc3Npb25zPSExLFlyKFFuKSxsKGQpLGQub25SdW50aW1lSW5pdGlhbGl6ZWQmJmQub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxmdW5jdGlvbigpe2lmKGQu''@;'; put 'put ''cG9zdFJ1bilmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGQucG9zdFJ1biYmKGQucG9zdFJ1bj1bZC5wb3N0UnVuXSk7ZC5wb3N0UnVuLmxlbmd0aDspUnQ9ZC5wb3N0UnVuLnNoaWZ0KCksTXIudW5zaGlmdChSdCk7dmFyIFJ0O1lyKE1yKX0oKSkpfV9yPjB8fChmdW5jdGlvbigpe2lmKGQucHJl''@;'; put 'put ''UnVuKWZvcigiZnVuY3Rpb24iPT10eXBlb2YgZC5wcmVSdW4mJihkLnByZVJ1bj1bZC5wcmVSdW5dKTtkLnByZVJ1bi5sZW5ndGg7KVJ0PWQucHJlUnVuLnNoaWZ0KCksRnIudW5zaGlmdChSdCk7dmFyIFJ0O1lyKEZyKX0oKSxfcj4wfHwoZC5zZXRTdGF0dXM/KGQuc2V0U3RhdHVzKCJSdW5u''@;'; put 'put ''aW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLnNldFN0YXR1cygiIil9LDEpLGd0KCl9LDEpKTpndCgpKSl9aWYoZC5fX19zdGFydF9lbV9qcz0xNzU4MjgsZC5fX19zdG9wX2VtX2pzPTE3NTkyNix2dD1mdW5jdGlvbiBzdCgpe2VtfHxFdygp''@;'; put 'put ''LGVtfHwodnQ9c3QpfSxkLnByZUluaXQpZm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBkLnByZUluaXQmJihkLnByZUluaXQ9W2QucHJlSW5pdF0pO2QucHJlSW5pdC5sZW5ndGg+MDspZC5wcmVJbml0LnBvcCgpKCk7ZnVuY3Rpb24gTWQoKXt9ZnVuY3Rpb24gTlQoc3Qpe3JldHVybihzdHx8TWQp''@;'; put 'put ''Ll9fY2FjaGVfX31mdW5jdGlvbiBzWihzdCxndCl7dmFyIFJ0PU5UKGd0KSx0bj1SdFtzdF07cmV0dXJuIHRufHwoKHRuPU9iamVjdC5jcmVhdGUoKGd0fHxNZCkucHJvdG90eXBlKSkucHRyPXN0LFJ0W3N0XT10bil9RXcoKSwoTWQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoTWQucHJvdG90''@;'; put 'put ''eXBlKSkuY29uc3RydWN0b3I9TWQsTWQucHJvdG90eXBlLl9fY2xhc3NfXz1NZCxNZC5fX2NhY2hlX189e30sZC5XcmFwcGVyT2JqZWN0PU1kLGQuZ2V0Q2FjaGU9TlQsZC53cmFwUG9pbnRlcj1zWixkLmNhc3RPYmplY3Q9ZnVuY3Rpb24oc3QsZ3Qpe3JldHVybiBzWihzdC5wdHIsZ3QpfSxk''@;'; put 'put ''Lk5VTEw9c1ooMCksZC5kZXN0cm95PWZ1bmN0aW9uKHN0KXtpZighc3QuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO3N0Ll9fZGVzdHJveV9fKCksZGVsZXRlIE5UKHN0Ll9fY2xhc3NfXylbc3Qu''@;'; put 'put ''cHRyXX0sZC5jb21wYXJlPWZ1bmN0aW9uKHN0LGd0KXtyZXR1cm4gc3QucHRyPT09Z3QucHRyfSxkLmdldFBvaW50ZXI9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24oc3Qpe3JldHVybiBzdC5fX2NsYXNzX199O3ZhciBPYT17YnVmZmVyOjAsc2l6ZTow''@;'; put 'put ''LHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmU6ZnVuY3Rpb24oKXtpZihPYS5uZWVkZWQpe2Zvcih2YXIgc3Q9MDtzdDxPYS50ZW1wcy5sZW5ndGg7c3QrKylkLl9mcmVlKE9hLnRlbXBzW3N0XSk7T2EudGVtcHMubGVuZ3RoPTAsZC5fZnJlZShPYS5idWZmZXIpLE9hLmJ1ZmZlcj0w''@;'; put 'put ''LE9hLnNpemUrPU9hLm5lZWRlZCxPYS5uZWVkZWQ9MH1PYS5idWZmZXJ8fChPYS5zaXplKz0xMjgsT2EuYnVmZmVyPWQuX21hbGxvYyhPYS5zaXplKSxaZShPYS5idWZmZXIpKSxPYS5wb3M9MH0sYWxsb2M6ZnVuY3Rpb24oc3QsZ3Qpe1plKE9hLmJ1ZmZlcik7dmFyIFJ0LHduPXN0Lmxlbmd0''@;'; put 'put ''aCpndC5CWVRFU19QRVJfRUxFTUVOVDtyZXR1cm4gT2EucG9zKyh3bj13bis3Ji04KT49T2Euc2l6ZT8oWmUod24+MCksT2EubmVlZGVkKz13bixSdD1kLl9tYWxsb2Mod24pLE9hLnRlbXBzLnB1c2goUnQpKTooUnQ9T2EuYnVmZmVyK09hLnBvcyxPYS5wb3MrPXduKSxSdH0sY29weTpmdW5j''@;'; put 'put ''dGlvbihzdCxndCxSdCl7c3dpdGNoKFJ0Pj4+PTAsZ3QuQllURVNfUEVSX0VMRU1FTlQpe2Nhc2UgMjpSdD4+Pj0xO2JyZWFrO2Nhc2UgNDpSdD4+Pj0yO2JyZWFrO2Nhc2UgODpSdD4+Pj0zfWZvcih2YXIgdG49MDt0bjxzdC5sZW5ndGg7dG4rKylndFtSdCt0bl09c3RbdG5dfX07ZnVuY3Rp''@;'; put 'put ''b24ga3coc3Qpe2lmKCJzdHJpbmciPT10eXBlb2Ygc3Qpe3ZhciBndD1HbyhzdCksUnQ9T2EuYWxsb2MoZ3QsZXQpO3JldHVybiBPYS5jb3B5KGd0LGV0LFJ0KSxSdH1yZXR1cm4gc3R9ZnVuY3Rpb24gbzMoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0''@;'; put 'put ''b3IgaW4gSURMIn1mdW5jdGlvbiBtYyhzdCxndCl7c3QmJiJvYmplY3QiPT10eXBlb2Ygc3QmJihzdD1zdC5wdHIpLGd0JiYib2JqZWN0Ij09dHlwZW9mIGd0JiYoZ3Q9Z3QucHRyKSx0aGlzLnB0cj1NdShzdCxndCksTlQobWMpW3RoaXMucHRyXT10aGlzfXJldHVybihvMy5wcm90b3R5cGU9''@;'; put 'put ''T2JqZWN0LmNyZWF0ZShNZC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1vMyxvMy5wcm90b3R5cGUuX19jbGFzc19fPW8zLG8zLl9fY2FjaGVfXz17fSxkLlZvaWRQdHI9bzMsbzMucHJvdG90eXBlLl9fZGVzdHJveV9fPW8zLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe00xKHRo''@;'; put 'put ''aXMucHRyKX0sKG1jLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKE1kLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPW1jLG1jLnByb3RvdHlwZS5fX2NsYXNzX189bWMsbWMuX19jYWNoZV9fPXt9LGQuR3JhcGh2aXo9bWMsbWMucHJvdG90eXBlLnZlcnNpb249bWMucHJvdG90eXBlLnZlcnNpb249''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gY3IoYXUodGhpcy5wdHIpKX0sbWMucHJvdG90eXBlLmxhc3RFcnJvcj1tYy5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIGNyKHgxKHRoaXMucHRyKSl9LG1jLnByb3RvdHlwZS5jcmVhdGVGaWxlPW1jLnByb3RvdHlwZS5jcmVhdGVGaWxl''@;'; put 'put ''PWZ1bmN0aW9uKHN0LGd0KXt2YXIgUnQ9dGhpcy5wdHI7T2EucHJlcGFyZSgpLHN0PXN0JiYib2JqZWN0Ij09dHlwZW9mIHN0P3N0LnB0cjprdyhzdCksZ3Q9Z3QmJiJvYmplY3QiPT10eXBlb2YgZ3Q/Z3QucHRyOmt3KGd0KSxFMihSdCxzdCxndCl9LG1jLnByb3RvdHlwZS5sYXN0UmVzdWx0''@;'; put 'put ''PW1jLnByb3RvdHlwZS5sYXN0UmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIGNyKCQ3KHRoaXMucHRyKSl9LG1jLnByb3RvdHlwZS5sYXlvdXQ9bWMucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihzdCxndCxSdCl7dmFyIHRuPXRoaXMucHRyO3JldHVybiBPYS5wcmVwYXJlKCksc3Q9c3QmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2Ygc3Q/c3QucHRyOmt3KHN0KSxndD1ndCYmIm9iamVjdCI9PXR5cGVvZiBndD9ndC5wdHI6a3coZ3QpLFJ0PVJ0JiYib2JqZWN0Ij09dHlwZW9mIFJ0P1J0LnB0cjprdyhSdCksY3IoZDQodG4sc3QsZ3QsUnQpKX0sbWMucHJvdG90eXBlLl9fZGVzdHJveV9fPW1jLnBy''@;'; put 'put ''b3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1N3KHRoaXMucHRyKX0sYy5yZWFkeX0pO2xldCBDdyxYVTtmdW5jdGlvbiBPSmUoYyl7cmV0dXJue3BhdGg6Yy5wYXRoLGRhdGE6YDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PlxuPCFE''@;'; put 'put ''T0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj5cbjxzdmcgd2lkdGg9IiR7Yy53aWR0aH0iIGhlaWdodD0iJHtjLmhlaWdodH0iPjwvc3ZnPmB9fWNsYXNzIERUe2NvbnN0''@;'; put 'put ''cnVjdG9yKGwpe3RoaXMuX21vZHVsZT1sfXN0YXRpYyBsb2FkKCl7cmV0dXJuKFhVfHwoWFU9ZnVuY3Rpb24gTEplKGMpe3JldHVybiBmdW5jdGlvbiBJSmUoYyxsKXtmb3IodmFyIGE9MCxkPVtdLGg9KyFsLGY9MDtjLmxlbmd0aDspe3ZhciBfPVNKZShjLGh8fGwpO2lmKCJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgXyl7Zm9yKGg/KGw9bnVsbCxfLncubGVuZ3RoPT1fLnUmJihkLnB1c2gobD1fLncpLGYrPV8udSkpOihkLnB1c2gobCksXy5lPTApOyFfLmw7KXt2YXIgVD1ESmUoYyxfLGwpO1R8fGdjKDUpLGw/Xy5lPV8ueTooZC5wdXNoKFQpLGYrPVQubGVuZ3RoLHdKZShfLncsMCxULmxlbmd0''@;'; put 'put ''aCksXy53LnNldChULF8udy5sZW5ndGgtVC5sZW5ndGgpKX1hPV8uYis0Kl8uY31lbHNlIGE9XztjPWMuc3ViYXJyYXkoYSl9cmV0dXJuIGZ1bmN0aW9uKFcsaWUpe2lmKDE9PVcubGVuZ3RoKXJldHVybiBXWzBdO2Zvcih2YXIgZ2U9bmV3IFFsKGllKSx3ZT0wLEVlPTA7d2U8Vy5sZW5ndGg7''@;'; put 'put ''Kyt3ZSl7dmFyIFplPVdbd2VdO2dlLnNldChaZSxFZSksRWUrPVplLmxlbmd0aH1yZXR1cm4gZ2V9KGQsZil9KGZ1bmN0aW9uKGEpe2NvbnN0IGQ9YS5sZW5ndGgsaD1bXTtsZXQgZj0wLF89MCxUPS0xO2ZvcihsZXQgVz0wO1c8ZDtXKyspe2NvbnN0IGllPSdBQkNERUZHSElKS0xNTk9QUVJT''@;'; put 'put ''VFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSEjJCUmKCkqKywuLzo7PD0+P0BbXV5fYHt8fX4iJy5pbmRleE9mKGFbV10pO2lmKC0xIT09aWUpaWYoVDwwKVQ9aWU7ZWxzZXtUKz05MSppZSxmfD1UPDxfLF8rPSg4MTkxJlQpPjg4PzEzOjE0O2Rve2gucHVzaCgy''@;'; put 'put ''NTUmZiksZj4+PTgsXy09OH13aGlsZShfPjcpO1Q9LTF9fXJldHVybiBUPi0xJiZoLnB1c2goMjU1JihmfFQ8PF8pKSxuZXcgVWludDhBcnJheShoKX0oYykpfSgndjcjYVNYajpdQ1s5MD55S21hOktgMmh0ejh7L1suJVkrTkFFPmlyVS8/X0poXk1pfVYifmZ5elMhKDF5NiVTXWJxaEZodz5+''@;'; put 'put ''fnJ1QF5QYWM3fk40bjlCa09qY1o9RjhOJHdCInNdaW5dJVRHXj1KRDRMYmdOLFcrNmBVNyopcGokMi5HXTxwMH1ANncxWDxpey5nPDcydnVdMitVL0R7L2N+dkNzdD16Y1Fyb3BeN0k2YjlkTXp8W2taIXMiQUd5VEUleTM8NERbQD9mfHwkU2JmdSZLblVYUDkhRmc1PWBaKylBSmNaPCt4aC9i''@;'; put 'put ''PExEd1tYcmRMIVlaKH5jMkNmeHpxRyVfeCtLej9GRF49OEVlekd3aD9dbDg4S3NDUyY6VigvMm53KihhXVU7Wnl3ZSNVUnxUdTk1LEJvXyJlV3FDQVFiJF5NQ1Q2JCpiZDVnVmd1WE9dOFJpdWVAaWUhbDxGYWs7IVsscGpGY304Z3t7aFksW0w0cTEreU5DZShpZDApUnRWRCFbRD5CfFhXKTJT''@;'; put 'put ''PzBySD1GeFVBV0p3aUUienVaZjApUkJ+MktiZT9SS0ZCZTN4OzdMUk99Zjs1OWdxL1lXKUhQZ1ZhdGtvQ2dSWUJdcXlCUDQ0fm8/bUNAQlpyJU1MWVQ4PnVDUWBReSVtPU44M0p4VzJUWEAiXWFoXnRzIU1mNS88OWJFTUFrWXIsI0A/eEhbYU05Km1NPE1PKiNeR2dtYHZXV3l0RDN0PFF5UnV4''@;'; put 'put ''fEllVyk6V010X3dvbTh2R1BQUlRjem1HdiZ7M3Zse3pXbX09WG89STlPPVVqP2x7bX48VW0uUkdeUWdlTFc8OUZGRm06VVUpa3RYS0shZUZZSWddK1ZVc3MiWUhUVmdwOHMsZEtuOHJ5OCVvOGJ5OCVRaHRnM2xMeDc4SlhPSVBzfTd0Xn5edHYhe3pgQDdje11QL25+dlRUQjZlazhwSSMmTSpk''@;'; put 'put ''UiNtM05UVWRlPSohMmwuUjVLV2ZIMTJWRkxiJGF5OmpESXA8Z29iPEtAYFdmdGR0O1sucjU3SDFGczU3OyU5TG9ld0MkRy9QJU5eSGx2dXQ5cjhNIjR8QHVqa1V0NkIsXnoiLzRrP2wmZ1ZLYCNBeGBaaDh2TkdvTHhbYWN1NCY6RVdVOS5KeElUQSpnQz9jODJKS2pETGhYRlUxQ1VXKjJ2M2xB''@;'; put 'put ''YWY5JmtPfXMhPkx9MSFFfnIrWl9nXTVPUGkvSXhARjtlYzxUWixyfiJkfjRJYk08Oyw1UWk9elFCbHMvNSZlXihjW1U7bVVlUDRnSVJKcSZweVRvQlRnJDJxcH52KkZlRm9yZ1orNHZMT29wb3RNK2wzaWsoJSpERHlrSzMwL2ErWlsufGsjL2ZMODBTLl5BWlQhOGUxdS5YZX1XIzZmciZRT3Us''@;'; put 'put ''QnhiQCh5byozKUBnYF8rJS8/aVB6UkZeI3hZYlZMe0BIPEgpTERFMlcqLjtNMXRFIWpuYy5LQGVfRi5LWl5QKGlvZ0khNlQ+Un43fjNWfUwwfEJIPiNMaUpjYVFOaipZOFViXjRvcXBdJj9zXztrKj5OLzN4bVZocDh8QzFzWk9vWjhVbzh3cDlseD9KJCwhbT5CJC8pQjk0SkgzMC9iZi5wcjw8''@;'; put 'put ''bltbP3ZyYlpzNitKJWBPalJNR3Z5ZkA6LEllUXJZSHlIM0ZBMl1GL0xLdX1DL0lRYyVGIklpK0FrQVNlUGk7WntZaFQre21afTwsUHxZNGw+QTJkXywmU190OWw/MkNRI1lwY1NlTUFQQThIaFoxO15hZz9SSU4mS1hKakl4SFBkbXdZS3B1KC99YlpfLCZ4XUpqKzl9JntEQXVIcjhFYkV4Oms9''@;'; put 'put ''QTglYSFmImI2PjQ6X341ZGVgRXRfe0t5fUlKfEk8WHBbfSE5KDlhN2JfQmd+Jns8YjZya1A8bEppeCNNLHhUR1o+JjF1L2pdMHcwazVCYnZZSU5KaV9PIUI7eCkoWjk3Oyo7cz58az4xM1dbZCY5Mi45eHJUKzMkJHYqckY4QWVgQEI7TTloXVBGaSsuOFNGVWdYaVQkVlFrcE4hRjxCLkxSbXk8''@;'; put 'put ''QH1wLkNPIzVWRixnM0dTOnt3OnUsanBWJERRLF1kISNdeXM8aTdnTDN1MW9iUmljI2FbXWAldTAuS0BoZUI4MiZDZSNdKztVN0YjcHtxJDslNn5dYHMyd3xqN0dwRVY5PVN4cV5GekU5dlZ4akZyYDNZZ1h8cWZwRWc6KnI0NXBbJS5CKGxXdHNPbWVrcS9leEJWK2JEKk98TilJMitZT0RIKUx5''@;'; put 'put ''UXVsU3kybHBAVj5VJnpmOGxpfCYhby5TJn0wL3F3NTtuOVV5TjlfPUBTI3gjL0kvNXFxNVRtN2RvaDQwUGF5NUY/dUpHOkpUUXJ4SmZYP3d0RCNOIVlITHtSSnA+RzNoeEppNUB0V1hfUng7fSwqRSMvMTBpTUNvM10zTiVyb1AwYnhCV3J7KEA3P11gOS9ZOWxtenpgezNHOWdwdzo5TUVbLFgq''@;'; put 'put ''WXR4a3BPXXEkVjs/enpga0p5VUcyQ148XzJWWixdPDFfIWB6Q3A7NzQsTioiVXJsIkdUMmY1OjdFRWZkeyVsJjswM1NIeXYpW2cjem1HNyZOS1tBN2dafGk6ZlN0QnFETylNVy5NelpjImw5LjYhYlNBT0gqWVVdRlNLe1kkVUQjNH46SUFIXTJrNUlsRDVNcXdDVFkhOStsWD1zfDNTL1dCbX54''@;'; put 'put ''PCFsTUpOfDlWUl9ZLzZbbyg4YEtrdj9rZUZpPSUuN3BUI3gySFRIdmZgPTU6R10qQFtnLk82QHQiQGU8OUpnSG4uekJ0eG1NbFNCO3p5ISleYHNuc19he3pQXyorKkApcTkqSGBXN0xrVn03NVBuZkJbeiY/Q15La1JyLmIoYiVQREE4VitBSS42OiMhREA2OH1fRmprJnBoV3NUSTJDXlhgNzs9''@;'; put 'put ''RXk5KWB8TlFbciRUZkZXKlRsb0I9SV42XUtrTCQoPjIjPiQhOV95QyY/Jkx+KmcmJWh9dnh7ODJJcmU7NyVDKmI4JW5kd2VzVEU4UlVNNVEjMlBwNyUvQGVNZE53NSlsN0hweTlIcCg2YTx8PTRTYFkqUmAxKHRiJW0mX2pmJFheYEYrYnNUJE82PX5tcihVNzxhdUNpL25LQGVpYkNTb0VCVzxp''@;'; put 'put ''Wj5XI1J8S3N5OzlpO3BET11dSlQ7JnYpNmRaX0EwZD54Mko4WDhfMVYuZzBNOFYjKFJFM00zMC9UX0tPfiMmYF1gKSQ0bHg/KzgrSVVDTEszfWpWdkB5NVQxVk8sXXFsbHhfcn5yTyQudExydzU2YnBwQ0o6TCwlSm08anAyIkBGKk15Ymg5TSltMUJ0Y09EbllUPSY6UVlWWmJINUlASlhsY2Fy''@;'; put 'put ''M0dIQkp3Q2Q/U2JVcy8peSo5TSZIVmVVJlJPZV1qMmMybzBGekNmbStBa0FTWG9kOS9HSXtjPUZJWTdiXkh9Tmd5eCEpVHlKb1JDeC5kVEtjdlRoZC50a3NZVjIjOVhfQ2A2Xiw8Y3gxcTtwb3x7JlRZaW9TT015WSJuOz1GR0w9O3FEZVJ3Q103VW5XMVkmcEczRkdyT0xIVl0wNE1XIzVNS19k''@;'; put 'put ''OGwoY0YuOV4kRl8vcyMye3AjOmNLdmlGMl8iQHBSP3xMby8yNVlrRzw7dzNtO0YqT3w6ZmVxfnZoaGF6YSw2NElxIW0vfUZJZk07WGUoXz15JmdGOSQjOiMyI20zT11RS18qcERWNl4kTntASXErcTs1JC9nKnomLDZzY0RZKGtXWWhfJEguSnJsWTE+TGI+ZX5VO01Pe1UzPE1IREphclVUSz5z''@;'; put 'put ''d0AyNT82LkFeOykmbnhvYWpWNlFoPFM4bGBMWXF6MlQjeUR7fXo8ImVbNXNjOG9TaytUOGBnT30jXnF8JGtoYnN0WSIpRlNMPWdkdFlyW0IybXZVcyJtVnlrSW9SJFZ4S3lzYm9bPzVNXTEiRFZlejhXW1JteTM0SEV8TDRzL359QDo9cWtONUVoaVZdZ3YkPEsjWzshMFNsayhuPEdxNGZqLjxk''@;'; put 'put ''VURYJWcmMjMrajV6Z302cDklSEprI1QuajxKLD18aWI8NWE7dyRKbiVOe0B1eXArdnxoS2l9PyxSKSFDODNgLHY+N11tPSx5czNRbHE0Vys1PVg9LzEoLkpmYDYxckhUOzYxailMKShyYndESGcxbT0uOS4qfkg5Q2t0QE8+YT5dNmVrMmFCNTF6eTszY1glRjREbiNgTkhkQW5lcUx2eVtXLjZ1''@;'; put 'put ''RDcvJjo5cVB2dEo5JiJZeWZHdUZWe1N5MXp9ZEVbUzlzWzpbbk84c3R4NXVoNzg5NyhCczUvWDsvOXkkOTQmeW8kMnc+YikhIkYlM10lZGY/XktBUHtYV31KLFgvSlROZzBVKjk1IUlePWBTWltIajJhJXRpdyg0QnIjaHxaPiRwOGw4Q2c3c3E1dnhPODhGcjw8ZnE4Q2N8Tz5EVzEvRU9rPj0v''@;'; put 'put ''NXJRa0tbdEtxfSRgNTAjXVRrVjx+Qk1gVn13PiRMVmt3WlZaVGY9e3RLPjwkZ1AyYCxZcntAd3VUVHRMUkQvXXsoNFp3Q3g6L0cmd3pLIlVGey8pb2BwbkZEb15oOVdPVDRBbyo6WVNAcD8jaUpqPChOcUNWO2ROJU0yO1J4S29hdmk9eGdCelM0SjFxWiJwSF0mOzpNNWVLUSVnY2YqOSpTPmRP''@;'; put 'put ''SSYqdyNjOi9HVDJPfVUwRzlvWXBobUIxRCxyfHdrL04rSmlQLis/RiFwZWxEMVtHaiZYdjk5bmcuMiM1ZTpiMkYke3tVPjFTalhWaUpbInJyVFR9PW9gcVpRI2BoPz0yblJDNDk5PnJ9X0A4cyk2LEROVklySHMoI1lyfjRDbjtxPSROQT91WmJLYEl5PUI7bG8rT30mOnZ0Ok99b3A5WChbJmMp''@;'; put 'put ''KlM7KF1qc3Z7S1d9Tz5iKl4sNT1PfDVgNnlgV2x0PzYsMjB9YklPNUk5ZTo3SVYsK2lkL358RE8pTVBbJlYhTTJyQFUpYnJ0amJLITQvQkw5P1A6c2NmQERPP0w1IzZLQXgrZWFqd0JVWXZ7K3YiXVYrQEhbPFJ0Py4sRklxPExZN3Z4VnBXWSh1JTd3RkFtKEZZKUVHNkY6R280djJrTUNtO0ZN''@;'; put 'put ''bXNDQ204eWFidm99fm9vVTFNIV9QOm0+MVBrOm10K0YxJDdTTVMuQDZQVkw4fENwMF8yKy9ZKFkqOWMvRVArXz0vfE05L3tLOEM1STJAfHdWJDZhKysqSnt7KFkqeyhyQHF7MyhQZzVafnl7S1JEcjNVVzEkX1VfbmhhJV4vZiY3Q0IieTkrfE1rZChaTTNaZiQ5JVc1PWtldXQ0cypXZV1OaWdN''@;'; put 'put ''QDtiaDVVR0gyU1NgaHhwSWFvbCZMNCEpKCNqIjM8PVVlaCYzOz9nWCVJMXlxVm4jIT83SUpUKWpoTEJMYEFjKTt2L1JxLCx5WT5kN21wLklBSFt4LlsxRigmKmJKI194JlU3SUBKbElyWlEzeT0kOXs3STljR24wOXciVnM7Nzo2MCQ3MDMkOih+M2k7XmB9fSZ5MmNfY31aXlhCen07KV9iOkVG''@;'; put 'put ''PlYqJmtUI15KfUBUW0Y3fT18LCVVOntaUl8vUUoiPE1Vdm1uKGl7PXwqe3FsSCx8VktWfWIiR0E9PCtBNWg/L0MkQnJzbD1LUTF4fnpSX08jPk48PGlGbkR9OFBBS35XL29nXXxGY2tGbHtLeU5pO3pHLi4qOl9UKzVOUnxLUTxpbX1nLjxlXytQPnZ5X2lyVVkqVCZ5c2VuZipMUT5iS2UsSSJ8''@;'; put 'put ''Zmx1bD5udl1kIUM4MzF0SEQ4anB2W3N3Z2FHWjxMQWZ+eG9ZPjduT0U3TUQ4cFZQK2NJZm5lbXdDM10ufnJNJkNGKyNyQENlaEc5LkJLRkBrRjZOajwvM3QrMkBDYTBoZyxBXWA6VTB2bFFgZVU1Jj15UGV3PXxQcV5KbnYqT2BpK0xFcWoxfWY7ZzpQQyFyfkAyJkBQRElRMCNkdmNtOCE5dURY''@;'; put 'put ''WzZwfWIuSURPbnZoV2s4eyozNVpiSihsN2c+ampscko5U14qLjhoRz9HciMyc1R3LHJoIyY0anhuP2x5YDY/Zy5tIU5fdmtlOmlfMXA6VUM5ZFFHeTkrT1JsRGlfVjxHcVcrfmE3NmcwWHJDXUtwaEpWXXFMVT4qKnZ8N3ZvYmU3YSlXV15dS3B6OSZ2N0lEQClCRypGN2xXekteS20jLl09Ozoj''@;'; put 'put ''NTRjUSN4NC9zd2AzVzs9ejo7bjhKM1JfNj9LZ2EzO3FzJlcsb2NCOT5iSyFiaHs9KXMpNnNtQlBvRzJYVHZMR28rdEk7Q0clZDVDKWg1Y3QlWTYiJVk5IiVZPGlfUX58KWF4PzVZTylOaD4rWmRKLDVZTEpoRT5JKENRZiR3OmhUOVlldUlsRXhIL1plNVlHb0dSKlZIbHpXWDsiJVksKUBvI3pR''@;'; put 'put ''XmY3XmgjLypJLnZZaj55fSg1Xzw+RmlvdCh1KURXKXZwSDxYaUJDPVIpMChhaDUlNX5lUE1mWXNVOlNoTXBSbTBVLD1baHghdW87ZjdxWiVMfCJYSEVQNmUhK1h4MnVWMDkvRlJJR09vNll7aXFPKGZkPGZaKldJQ0hSbHhVWEhCMm5zTEtCMFBZazlaaCsuV2BEX1BrJCFHMkpRb3pxZ1o6V0tF''@;'; put 'put ''N0s7S0FMRnp4WFNFTEsvdC9JWlhzTShUW3BtTyZNbUxSQ3daPVdtRVFMOiIuSXF1UE5mUCVqM0RKbyZ5TnUqTW9Md0JsTWZEK0QrazZLZkc+aFQ5YTQ3dU9DLkZkSG50MEc2SXVIQ2VDcXN1ZXV5NmZENDAvKkU4TThNJjpMK0tVQF5RYyNmL1RmImh7dFJTMjpwdWhCdDdXUzIwXlY8cisuY2Mv''@;'; put 'put ''RihGbmplU1EwYnhmdjJ1OGMpSUR5bzs5L3F4RSttbTIrMUlLRlFpVDk2WW4pNWQyKyl5IVghSF4vVlg7aSJPX2RlNVZpdlBRMGF4X1k8VTxreklGRXVIITpheEh2QShPR05SeUkiNFJ6TlImSUNNV1hXKUxuOWRieFh2NS5PR0xEcXg+VWVPfUMyeF10UHpGUiJJQkdkTU5pd01RMCFZZClxYWY3''@;'; put 'put ''eEkheCkzT0dKUk5IM1JnNT80W0RXOjAwJk16KzdMXkIiMGM8aFpgVyFFS045UkpvIjk5QklUODRAJHdQI0xUWjt4OktmT0thSm9GZiJofCJ2SD9PZWUqMHJMXUJjZEoqUmp0TCJCb1RrJEdlcTEueUV1a0leKC5JalpFWGlFaGoscjUhK3k2WEdLUD9JWVNqeExmQ31UMEB3ZyNNUiFydCNIZFVG''@;'; put 'put ''PWBbalpbTHBDLlQhaVFqekwydkdLWltdYSR5YXVtS0drODg1IVd0YU9RNjk1fHldQWBjKHplWjEiUkolZDl5fEIpZnIjaVo0IlVRdCVlWjYia1F6P283KE1+eUdDdWhVMDl5O0I2ZD01OHk6dSJPKGZlWnUiUFBobGVadyJjSX1vaVp5IjhJPE05eWBCdFVQRCt5TUM9VTlaYmpfTDdDTGJgayt5''@;'; put 'put ''ZkIvcmVHd0wsQ20iPGMhV11JVEQhNWl0flJzVSNNanRRTWZqIXlhQ0daUERnTDVFWjdVMCF5NUJ7MGVHJVcuR1FvZlpRdT5TInFmWlN1S088TSN5O0J+N0lZI3k/Qmo5PGMpV2BIYylmWlV1RVFKKiN5R0MlKDxjK1c2SUF9ZlpJQllqbjcseSxCITg8YzpXU0kicSQ1enR+Un1vJHlxQzlrbU9r''@;'; put 'put ''TDlFZCpnenpMJUVhISE1JkxHRj48ZnovV1VLdSYvSXdMLkRzblA3KXkwQ1JvX2tzK2xCUl5Rdz4ka1k4TytwPGN8eVFEQn5BOFJRQT90SFMqYFtTMFFTbTY6Z3VPNFclWFVQWXdMTy93PWZ2elhjT0V2JUU2dzQ8STZ1SGFHWGpTdjdNT2B3XlYiaEM6K0ZPRU9lI3oxVjR8a0BIYWM1X1ExP0Rh''@;'; put 'put ''RWQ6SUN+QzYxNFpSVGBEYWc1ckx1U3c4QSF9V0NsYCVZd01hL3ROTCtHLzdCWF9GbjMyeFYvdkIqWWJ2aCNbV2hHUChYRFIweEJHbGw1PVBXLzVCdmFOeEZUX183ZnM0NEQ4Njw4WC9gQldJQCF8N1s+KzR9RCMlSS5ZL0lDRyFIYlovU0NRblRQZFNHWElKSSkxRWEvY0NtbEU4TTgyaylYRkt4''@;'; put 'put ''O2VtJmtUdU1PJWwjPG4vKEJgb2ZyZFM/NEJFTjNIYiVrPXQzTkQjZCMzLyRZdlNrVSM8L2tXdWBUVThSMjA0R0Y/W0kuJmtidSJVUn5qI3ZjPUY6QiNadGNFdzx1NWQqNT12Y1kiTyNmX1h0dGVlNjo9dkJCV2h0Lz5GTENiKkRuKUZUQ1BnIkNWJkFYQko2bX1MRj9CRV86fTQoTGBIZ21BemtM''@;'; put 'put ''S0koPXxMOldrUXY/WTdETTdjU0ZONVQsUHQudTNwW2B9WDZ0c1UiQ3x2TnY8VXRafHZkQno2aVN+WCF0W1ZBd3x2akJTdHNjbkxdSVJEfjQ/V35Sb1UiTEBXUU1Yaj92YnZGWiJDJkY1RVk3TTA/djVCYDB+RnFMLkdNb2BYUEI6T2ojflhAdEdtdEJAdmx2MGNWcCJYbFh+VVMyLzc3QSlEYmZ+''@;'; put 'put ''NElHJEReZFlMfVdQUEBvQHZgQiwhInl0TCNKKHAkPHU4TndDQz9VW2RZTHJBWEplXWBYREJEZipbKUZWRS51fUxKR2RFM3h9TEZYelQ6T3tYTEJkOTpXZVNNMFt2cnZobFdPfnZnQ048dC9Gd3h2UW82Olt2bUMrWypbK0ZgRWIqfjRbTEVLfWdFMFt2d0NXSXYvaT19WGJCalQuTTlZK1JkSEM4''@;'; put 'put ''MVomWSNpOEkuTVl4dCpUUEl3I3lJSi93PGZQekFST0UsdDVZJmlFUVUyVVgjaXhKOWRZeH11WEhSe1BIIVlSKXJuJjpSQHkrZnRHdk1JLyV5cSwkcCtqMGFZdk8qWk8wZVk2ZFs1RzBHNiJPO3REYVg1RVEkIURhWjVbSis6SGEmT3w2R0tbNUgwNll5VlhET09xeDR1dnpmT3l4Q3dCZGRjWUdN''@;'; put 'put ''YWNTPih0SGJ0O1BWL1VDTEV0Z2FDNmtIdVJQNz1NOGB2MENAXipbazV5eGIqNWQvNVh4bippU0l3Z3hrdU48eXFWQCVXTzBXMDZdfXZ5O2ZDR3R4P05NMTB9dE93dyM4Uzdsek5JKH13eV1Dd0prPm8wODxPSHosI0VYZWpyIXh3MkhXWksjVjMsT3hwWEhASTAwNVhJI0Q4ZnI8cnU4U0cmPy5n''@;'; put 'put ''LklrYmlSViZsSysuIzk9SEdpYEU4TmVJdGR2KnNLOikpZXZ9SzhBIXU4eDc3OTAxYHdvZiFhZTF7ZE8sKThVMSojaiolUGk7TUxoV2xmUmZhZkIpZ2VSODVqOyFBLlF7QEB+OnIvXiwvakUiMz5TKHcsc2RsQUteQXw3Kk1SJmt5RFVqfilvWCx1PmdzUUlTYyV4RGFOZ2NsNWpYLHVQSixTZ1gk''@;'; put 'put ''TVhYX257UFshRmxoZWMscHxgIzR4NCZPbmJfVikqb2lgblIwSUNYaHQ8aUwoS3xYNTpnY1EvRiRtQVJIQz5GbiV0KmoqVDF7JFc2RG1COHdPQThmUjBJdiphaU8hSTl+KEZmLCM6Sz0lSm1CJmh0TWV3UHx0QWhebW8sb2VCUER9VmV2XTpqa3tVbWFwfSx9OExQSVA+aUFJZkx+QklPdS5lJnpu''@;'; put 'put ''VE1dQ1RZMkxbTyxEVWU/MCVNVVh9PntJWyFTL0tzUiV6RjRXa1lxTEhyTmkqdnRBeGRtPW09bHxBTDwsR3NTZksxOjc9bFRlJjhoO2kvT1B5KGBrbjlDOzhxWUEhS3VRPzBSOG9lJlAwMSMmbmZgVHxwK3R5bkJlL3lVWylPZHVHZXg4TTY8JEV7VVhDOC5DQjJkaXArW2Q7SyJtMiRoIm1aYD4s''@;'; put 'put ''JiFMKGxhcDVGMCJnWC5pTnRMVC5xLEs5bDBCaUZiRD1aPENtRnJvNDNDZW00ejhEV1FfWF1YbClEQzhKUExXZT0lXVhlTXQ0R3M4ODhuQSF1fFF9Q3gjQFAvJkhEdEhbV2RjTT9DImI+QEpZNC4mcjQxXyVZQH1JSThtQXY5YXxZe11uU19TP1t4cjtQKGZYZVRfe3Q7JHgoTEFCOEFBazZQZ0I4''@;'; put 'put ''OmdSNzp3fDpYTlh0OkgwZUtSbGd2XS8hMUp7bXw2RiFyKnhnX1BFV2d0fSQ4aUd2UFIsalA3K3ZbPGU9byxSWF9eKkxQdjVZbkw7LGJ9NiFLISojRjRje01Db2Y6JGFhOGN4MGshYFBkZyI2YCVGZiRMNCl9ZFc+alJEdiNFfnB3RmcrMTppNHgpfilEWC4kQmkkQz9XQEJIOnduP3tYZVkpeWEi''@;'; put 'put ''Ii9sWzxeIXx0Y2M/XzxTRXQjSEB8SUFFe0pvJVAvIXs9eCVvfEc9c3hNOzVrR0JHQn0kTTYjdD0reyJWUnVhPEMrIypXYXg+TG5mUXYhRD0pfjdIWkRwRlc2dVVYfEQ7REQiaTtBdiNEekhVUXxqOXIxJU05QWVsUHs2dFgmZzQxTi5JZUtkZjtxbXw6eUkrYURIcHVMaTlhajBoJC4hIjppam1K''@;'; put 'put ''O0hnJjMkb3NwTGU9LGlTZnN0Q2YxW29CRTBIXUp1d3UsT052Wis/KFRzP0FsQnhPQlBScj1he1A0KSlGQldoTFshc2FyTytTK2hBSUN0YkFnJndrcmlCPn5EPTgyOSpAXVJPNjs9XUI3dUI4fjdXKXFnV2w0SHNIVyklTGZ0c0xYSW1LKTxQNiUoeXJMISxpMVpgJTorPClCKF44UkBdQkQpans0''@;'; put 'put ''IW5mRUVQe2hrWXx8M1BedVAuN09VXjkzTDxNTnBKaXw2KFNjRDBhVV8kXi4makZvdWVSIVdRdHJ0V117ZmUsWEJQO3UkNypGd1UpUXZyK3dnRmVIOjwmaFJhPEdBO3ZiQiRkaWIyOyNadUlZYT5oQCN2RkhtRV4jcX5XZyNHXUZDeTc2dT5aUTtmUkRlVjhMV30jXkZUKEYkXyVmXldJMyl5WkFQ''@;'; put 'put ''SjdndStXLDt8dDRJaHB2KCxfdXkwP2RNajlqOHhycX08WSpWRXNOWVlWRmBdOnVfTXJeSEA1bUw6YUBDMX5IYnMmN0hMajQ0NkBBR2RGVj9jXWdCVzEzKEJ5aUlRX3w7WTJVZWh2eDkuJmcmbDdHST8pMUxjJngpaCJmRW5CUkRmTE9DRmMhJXs4e3VUSkpzIWlEJSE8ZjcpaiZbOmAlUFl7VGEw''@;'; put 'put ''VkBmblEsREAmQWV8S0lzUUI7SGwlLkZYMThSSCosMS4xNEw3ci5GdCw0NHw2T3xAKSp3Sz9odWpFe3J7ISNDNTRWUFt2MylUX1hlYzhULE97JUZIXjhdSldGO1BjTGk0T2l5cCxzJiRWLmVVWF0pcmBLaVF9LDFAWDgsJDliYHlyJDlwNzpINllXNWVFKURuPmM9W09ZP3khU1d4MXp7W0Y9Ym1o''@;'; put 'put ''Q2VHc0h9OjhaYU59MUxWZUJiOlA4OWoqezc7PUwqQmw4S1NiW048InFMMDMrU0dlTURqSmp2N2JqSnhsTjM5TG91TThBXjpCUDI3Iy8oLDV6ZX5leXMmYWRCI0UmZTh0ZkNyUkRGK1M7I3thakpHVzdHI0VYUG5DakpNayFFK1NNc3c7VUVLcj0iSjt5L3BRal1jRGgvPkJhQj1vPjxzYXg1PGw2''@;'; put 'put ''ZHJVfFpSUWtYc1hFSD1fJFd8dUlPLC9MeVdOZTAiY2Njemo6TkxPZE5RT150SU95YT1mMGNwMG91SU9dIl1nKTpgZl86PFlJNUw2eDUpZHNVRGJyVWtmeGE2T0h6S0AmWmVkZTM3R0lIIjVCTjtaVzhKT2ljdkQ4R1BhclVdIklPLC9qXWR3bTQvTiw6Ny41R2s8czRTeyVEOlp+RGQ0Pk8qJHI3''@;'; put 'put ''SjBGZHhhUCNiTjFmXVtaMVpkO1A1Lkk2Vks8KHhjIjU2YWdjKkJpNGBkZHd7b1AjSTUsL3pdaSEmWmJ7NEdsUXo2OTckOHhjLGFYYVJRejY2YT48YT4raz8lcjdeT0toO0YyR1plNiU/KGc0MWt9bytKS0lDMG9vbFB2Mk4qbmFRb3NjKUZeXUBnfERzc0tKdCtYKEx+WFpmMG9CSzh8Q2E4dk5l''@;'; put 'put ''U3B4VU8ueTlnNkc4NntsYiRUbS5PKG1zXT1YUG5IeFFdRno/YkE1SV4mKmd7Jlcoa0Q9XmZVbUkvSm9HYCZYJiZGJX1dJkE/YzgydHNQSz06aUYhWVcsJnRHQlVyb2w2OnZua0VbOVRQSHo2Vio4d2olbDtSXSZPaHdjSTA9OE81VC80IkVUZDQ5U1VJPk93c2FsO0gmWCpkejUvWFcvLE5DcDxF''@;'; put 'put ''Pj0sQlBfPEVoUCN5bjsiKHcmLE5pcGhGNF96PFkqOUtQbEM9QipPd3csOCY0SiZVKnU6UCVlUTN5dHk0eCssT3NsVkdaPGBnNk5XMVgvcyRhL1A4MUk9XUJyLmc4d2NrMkQyLm9ALnNbO2lgODkoeGk1cUR1W1RIKVNadSRubyElZGJXVilIWzJuPGAqS1A3KDszPTw8K30yMn4+MHt9aGptb3hx''@;'; put 'put ''e1U3aGsiYlIoVTsyb3tWU1Y5OSxOdmk/b1J4aEZCVU8jTjIwVUJtVEk6TD89YCNyVSU7aHBXWlBUajxIRntwSjckWEYueykuZSIjVz00bUBgTD1la2gzRz1la19xa15LVVQ0Y3srM3ZOK3F9P148TnAhfVMkMDRyJXVZQWxbR0ttXjFELj8ybW1wU1tnIXcrQDcjaEVvWjJaKmI0SiwlOV5IfDtm''@;'; put 'put ''LjBVYWdkO2w8RG1STVpvRH43NCFLbltraDdWRHg8KHl6biI3KltwPjFeZWV5KSJkY2ZWJDN0QThQXm1kN1ViM3FRV3k1SjhrTkJdMkZSUkNoQE1TZTtfYzAxT25jeEU8eW0kTHtOZj1GOSQlW10peHdqLHxAbitKRTZWazdZN107KT49JVlkeCRxVEdWfVc7OWRTXkdze0BQLFFgeDMkcWQ/bFNT''@;'; put 'put ''NDExInptaDtAb3hJY21ydjFDKEpRLFVVQXlsJmpmWDwqZzxOYlcjKkZHZ11ASj9GKnZOclZWU0FXfFpMfSZHWFppdkEsLm9rTDpHbERhSl9lYCE5TCtTTCJVJGNyMWxyen48ZEZKZ0AwLHI8QFhrUmEsfUlnQDBqLHMlRH1ac31NXk4ySEdgclY4e3FTTWphZXoqay5hbXZ3RFtXMWpoPTo/STdi''@;'; put 'put ''bkNjazZVU2cxMU5oeyM8M2o5bWBnbXNmIzVeb0drNj91JSJLQ3gjRz1yUCNWYHVTTWphZW1AfWpRTnRqPTtDc1dvejNTPn5xR1FvYWZycWtjVmo6I1lrWW9YKyt7LEE2QjRGS1tOeVRTZlVVfiNOe2skN1pFMT92anA4X0w0cmN9N3s+d2o8WWY0blhFLnhJNjl8ZkFoTjw2TlRyaHE/SnNDXkh9''@;'; put 'put ''PyVbY15FdVlRaj1JRyp+VGgmTEk5SXQiRy5dJnckSTRxWDcxM1F0WzIiRmhGaiI2YmVdelEuTEA7VVYydSZYRnNNTXxIPTZpOHgvOXlHJkE4M1J1SFdfYFVjPjMyLFp5SWYjezI2XSg+V1NlfiZ4UUNtTHNZclIvSz1IX1lMOHYqTHJEZmBKSVB1bihnQkVARHU1QHRoaURmNnhuXXBPSzBsZyNl''@;'; put 'put ''KHFWTzskVkhFZzpePCxaJF5vcCxNVjgvfUcucll1cGhHYnpuIUB0X1BWeHVORjIhP3Z5STMrRSF3NV1efFJLPkRjXzxpYl1WP2QrXXZpXW1rWChtb1JOI1FGdDRaLitXZyhQKV5xUU9mJnlxblhgNjIoXjxnRVdZZldtX1REPVhwbSt1ODckTHJNWl9mRHNjNj1hWFttaDhMTWpqKlBVW00zPUll''@;'; put 'put ''TlF7IUpGVEMhZ3JnYlNASSZIdUNgKmRxaVl0OUt3fUxyeDw5XTtzLztqPnQyKmxGfHJHITkzMXl0JElrdmJqaXohVGR9OEkzcEx1Nn1hR3RvTzMpcFlPaFRCZUBBRjUwP19DdjI0bWpjWEJ2Mkd1YnZ0RzhPZ3YuUnByJGYjX21QNU55eEkoKz8wRTZQNjZYXjp4Lnt9eW5nb1VkOFFwJWZJVVM0''@;'; put 'put ''Km5PczdwWktQU1k1Pk1wJUJLWjhQRG41YTptdktTOkNNVCZZO1ltPFdPU31PZixUfjE+b3VwS3lfZHJ9TT1bZWhHS1oyK3xWJkNNej1lJEZMRyhlLmV5XyVmd2htMylbVDFkZGxGUXwpSVY4Q2s7Z01QZzg1IWdyO29TWkRbO2JrXThnc3xka3NAIyEyLkZ+P041aTlvLk0jWVhYIUpWOzdTJHc6''@;'; put 'put ''U1AyMTx9U3RAPTdOXTxnJWFFbDkhSjoxPDgiSToxPEZdOykhOWlKXTB1VSRsQ35KOU4zTERlZHh9ND9lZjdrUnw/Q2hFW2hES3hbfGpOIjMkTU1uWFF8Q2wyfWFaKy4yfjRZQylBSXBzTGpZTFd0eGcwTCFrNk1mdjRCbEpdUUJsZi8xPGFpVC9hSVN7REtuNV1pZWQ/eXY9eTV0QGs7c3w+MmM0''@;'; put 'put ''VilCSFlsbEcrPlh2P3t2dShGOSRaJCNucHl3LEMxdjh3Rlo4OWZJWnRCNXdOTihNYzVmNyJ5JUwrUnJhMnMhN0l6QWwwdyg6LE9lbTs7YEFPTXE1dCtPdD04QEJMLHE1fEElN0pPJT89b2djUz1zRT1nYkxqVFJ2YF42RiNKdDVMb0loN1hxOUR3KUNmX2Exez0xaGA2S3dNWzBwaj42P1VPc1Ru''@;'; put 'put ''UGBGUGdUaDBCUVhRe193QDIqLld1eG4/eXZtfng2TUR5bEgpOk9zcGJRQDJucGlQe2E8eGc8WChycks/WmJCc3N+IkFfQHQ5KCVYLnU2KChbUDt2Qi9bYVo4VWIxcHdDbzlAKGUmI01OTUN1NHBLJmYrKDB5X1lLWnV1UGVWUiJFZkooV0tRSH1qT0IlViVRTFBNbnVFPChUVWQ6PiZOQnJCbD8o''@;'; put 'put ''QV09ZSo5fihUJFAxXjhvaTNZeyJFQFtrT35ZKC45QHl2M15CO0kmMVBLTSZ2c0plYyZMNGdaL1VmcVl5cm41RTUmTDZvUkwqaG5mW0dWZSpQW1QhRl1ILGA7MUBqQ05qVEQpPk5GLFlWMDBKKjdAQTN0LEkqQVM7MC5mQyI7UDF1TG1RRnU5JV5kZT0qcyEwfCNCOEJIV3I9OnBuT0hLL1c3JUJJ''@;'; put 'put ''KnFNOU4hbGgrWTUwdyQ4Z3xvKUdtd1FjO2U0KlNFen47e29PczBSM0JkW2MzSkZILzYleWNuMl1mb18hNCRJNmllXkBFTHRyL24yS1ljSEkoaUhUSy4pbWx6JG5tUn59RXE1Oi4hNEk9LEI0Q0VRMURjJlchdzopRj02TkU4XUB4TmhMZk5sd2grTDIlRT5OX1daPzpVbXd1RjdkSz03V1ttOF9O''@;'; put 'put ''bnEucUtIVyQ5d2pQIlNVM1RWY3RFPixCMndhTyJTWzY6LklhRXU4VSE2VjlVN1UxfF1oYjUxY2Q/PiF+VGx3IyokNEQxcSppNiZsdlhwU0ZOZ2FJYjs5PFIqKnlCOz50L2RWYSYicWM9OUhTQzxENnR4dXBpRURKZEM8byZLbnViL00qazEjJCtaVnRFT2Q0bXFdM1pVWmxaT319JjV3Y2VZXjck''@;'; put 'put ''OTN0KmlSYlZ3NE9mKmVIPVorK098PVpMcjFsS2w8YzM8dUI+PFNGaC98fSR3YjQucW9HfnpobDtVNmlrMjpBVHVsUGJ7TmNNNi5JS091aSZYL2Rjc1JDT19fQUYrQlY5SSk9R35Kdl1nPUl+d0hESnJ6VzJHZHhKVGFsLCIueyJ3TndYVCZ9JTtHWW9YVlopc1N9XVcvN1cpQnQsM2dUfmhzRlhD''@;'; put 'put ''XVYoZDpKdVdsclBwbllvIUBMQmVtOTxjIU5jOmIvSjY5KVRwOTZzI191NmMmPjpqc2hOc0dxIi5jIW5TZDk9WD9rTDNFajpHJDRlcn1OKnhWVS5zU3Y+YEdqMHBLbW97U1NXXnxJKXNaJjdweW5YPSF9YFNEb294cCNSakhYUVsyblh9RCNGJnVFZWQsTlpeZSRSUCg0MUtnY31rbUhLWll9R2Au''@;'; put 'put ''e0E6MEc1UT50ZVk7YFZiKjVkSzE7SU5PIyk8aCo8SzI0PWc8RnlgVms8a3oyYy5rZXB4cCN4amhwIU81STlESXJ5SiJZRmUoR2tWViE0XXcjR28qeV4sI103NCsqRVFuOHY8ZEVAdjYxOXZtbWlXbFVdRmlKUmNseXlUakZPfWRhZXhtIUtDNSRJNV1FTUg9bmFeRl1MLEkjM1VaelQ9flozbVJi''@;'; put 'put ''azxbXXlDUT4pdjxDOiVdVztyYSVVZVgqNU5ifCIhb1goOXBHIVlPPSR1WlZBPEtYbChfKz9JUEMjNFpwOTdObmd2ME1PazxXaX1qIzJ8YF9telt9cjVTWFo7ZFBLIyFFInx+TXA3ZkBNKEhRInh4eDpuXTw6RmhAU0dFTmYwX2ljUTNKeWJodklWUTBAN1J8RWFmYSpjdGwpdHkzST9CTHFmUVJX''@;'; put 'put ''fDkpckBGVnxDVm13P08qanFKTiQ6MUslL1ZLRyJiNC5IWk49YGxtfXIxOTtWWD52QG43UCYwc3NfWHM+N245RkttIkN8VyoiYHI2QEI0ZFhXQ1Y8XTRkUiNTem00VkdrPy9ScERufCNiNSovKWYuNChUSFohXlMwQk85TEtdVXpLXX0qL0ZLIyMjQjY7SXJ9aEwsMW8jS1p9WHpGNzpNfn1GMF83''@;'; put 'put ''UihPR0FQTGUiT1hXKTxKZ1dqNCVRWC90VTtieWM8N21bb3kvJCVlYyZMNkViJno8a3JXTldwYH59dnByKXRuMjg6YnUzVi5FbWQjVXo7dksibCI8Ny9rVVdUVG8mOnwpJHFnP1h1Yi9xaClyekxLZDxMWzZsOGssZTNOaHFaRmV2XWAwbXo2MEgxUDZQb2woZTBRcSM5W1AzfSU+eFFEXzBLeSw+''@;'; put 'put ''WDxxbFZYM1hROnxJQCV2c30wTV0/emF5fCh5JHJlNjJnI307JSNJUHQzLEFwQzFGTSlSbFtod0EsOiZbWl9OVnEuMUFPZ1o5LDVObTJJSzhvL1NRVSp+X0ZrJj8oPndOaGBoVXowcDBxbHdiaSlLcSxxZDFmWzM2LlErPGJNbjFNJV0wLDJWdiZAUEZvMmdjeDN7azhTJEZwQzZBcFhoSXtReiov''@;'; put 'put ''JjwxSnE1RllVWElFVSFxR316dnssMTszQyFDN2QxZHI/UnlgS3Vsb0M0QyFxOXtNPHpweVdgaW1hVl9MZjYqbS5LSjNOPix4KTVGe34+fT5hMT4hXjYpNV9WPWpvPD4pcX12cnw/YGtjfC5AQHRjIk1ofFoqaWs+R24wZnYqay5QdGFbe1tGb0hbKUZQP2w+TV1zYlRmOyVaRlomc319b0drK3Js''@;'; put 'put ''YHohSEM6VigvIis1JSE2THciK0xyMkp8TndwdU16czRbb1VFW2VLb105NSQvMTxXS2FrMDtXPTY9MDlbR0NXLiF0MlJqJiNobUQ+eTtbS0E7dmx1d3lmWzxNZSs5KEowcXU8SGsvI2IhNnkmTn1FYUdTQHxEcEJGIUAxP14xcTE8bTNpaChVP287bWhwZ1oicFsibGNMc2duQkdHO0BddSZoIUQ4''@;'; put 'put ''bTg4JlBfbHZKOCFaYj5ZLnA1JmVzVCY9PkVrJClWV3hbNjwhO2R1JS8jUyQlfHN1VCZXIVQqKUZyJHxsV3ZWVVFuejl2ViRxIy9OXn5ATDlqd2wyOCs/SV9iOGV4PHJ7KHlIXlpwLjxZJFBpIT9nMyI5JCU/JSYqekxvcT1VYmJQU0RXSl52ZjlbWSRwOD49Ti9oQyImTW0kW1YkYzI+YE40KG5f''@;'; put 'put ''S3g7O114PmczWWFXck0kfGk1VjJ9TWdDIUZNQlZGRj1xOiw+YDY1SGlLPHYjKyxmU2lKWjM1fXBne1ZbQEVlcDI0LkJCSSNEdkcmYjVTQmx4QT5WOGMvKjBaajMlRV9DSGhocEBscilUe10oKXFyLixod11DOXl4Wi85VTxiTEdAKUc3fX4+K2tXPzgzRnAsNzkpMDgmT2t7Tkk7emNiNlUsSEQ6''@;'; put 'put ''eTtrSnBQUj9QPEhMVz8wdV01Ly5ZYiNoWFVtO3YsPUlmcUh5L2ZEU01kUDZtZHZpOWRsWigqKGJoUlBQImhpbHBvcHJRdkhTKlAyMTsuODEvLCNxUERrWlY0X1RobCRSfT12bHo8PEx9LCJCcHIzTGVTVSlYZkttMmpgfF9AekJNT3pdeyhjSyJgPCwsK1NLRD5SfjBDcktdezhLU3svfUpFXXtO''@;'; put 'put ''OVpAaWs4MV44ZUdQRVVhLDVGN0tnUGE3cjRvSmVvN310Xkh4LiJFWSlBXUpxdjJIYl1QbEw+bFolODYrbFloIVZedjx2Pkwwfnh8alopX0Rod0hgYnNJLiFOa2VrU0JmXWEpYUtmKjVffDlfVVJ2e2BpWj1GcVkyRGNmPDRyVC4kJktFR29aa2pgNzZab21sRTkwNmRgW243Kjl4PkZSVWh3Z1gp''@;'; put 'put ''PD9qKz9deXJLI3p9c0puOH1eZ1hFOCxwMTl1O21mS2pke2FfJnBhemQ+a3tjX0tsUDxgYVlzOVY+WEcoIV8odjgvQ1dTKn1eZ0x7eytbO0taXihCSnxyMnNZSntUQz1sUiE/SUVsVSRNTl5dIy5re20hMlY+T0R7YDtvN0w7OFtlNmpSLEU9PHlJKFdraWRoVD4uS0BkSiZgPj1nK2AuXSN0ZHt6''@;'; put 'put ''YHpKenx8Rl95JGY0bFVrdytSXXNicjx6djdMXmpZTSwsR1dlU102V1hYKSxidHVNT0hFMUVlNWBHPlZ9eHV3RGVSIWAoV3VjdlhkS2Bve2orcys7ZXdwUDJtO0wjaTV6eX4xVjtBRV5iOyVVeU4lRltKOiYpVVgoUTtXeHZXW0hWPVcuSUU7ZSJeKnchPkxOTVtjMzxXcC9HMjhfN0leaislPntk''@;'; put 'put ''enwlRWY1Ny8hKy9Kc0dtfT92cypRal9PLG5YQ31vR1BnfDxrYVpvSzU5e3V5TUxzaE9LIU1IbHtMa0QjNFtNcikkIV9tekVWNl4vdSkuKU0sXlJTfDJRX3x8RklIWXk7U01Tc3loNnAlODpOSyhpJDlzMFFQTDReSmZePDN1OiJqKks1OkVEb3doMEQsbUJYYHp3VitsY0J2SzxlZHteVCojTT1F''@;'; put 'put ''PkJzQWx9P34jOk4zNH1QWmJVPGB5emVxZCJIYERXaEpwLCwsN01WITZ5NT1lSlpVJUlZK19HVktTM2ghOXxXTHxVPjZfT3wqSntAPmV5fT5lfT9XP3JALzwsS1s2YEcrI1tSOk9QXm5MWl8lak1yJFlvWl93OCtYTX1LLDosd2JDNFU/KWdGaHFyZF42JmZXYGtrQDB8Nz41clNjWT5VZyUjNWBP''@;'; put 'put ''JUxHZHFuOWt3VFliKklOa0FhbGtHTFBxNkVTaUBjP3RHTXs5UTNEbmN5ZjprSHAhNS5sL2IvKlFzVWJRd0ljXj94UVYvL0ZDV11HU2s1Rl0xTVNlaH08RShfYWF9eDliX1tfemVyJl92Nyx8NWZMLjhWcig3S25WaV50JkIseGxmKy5JIyNQbyRdcVouZlUrLzxaJEFHMGZuI2EoPW9RKyRZd2wq''@;'; put 'put ''IjR7WEtfNnl4eWNzPzFQfHlGYDwzd1ZrW2FyUUdMV1RfNUBGcW9faEtuOCkzSkB5ODZDcCNnOWl7cD9iS15PPjZEV2g6OkhocT4pY1ZyKHkzSkA9JlBdJlRONiR2Z0ZHciNOVj5bc2NWVzVxNzY+X3pxbilDLFZCN0FeIit0U2hCSjZFQFBTcVp5TmF1d0Q9X3hwUiNsS2hbIlZHcGQ3ejNCM0Fk''@;'; put 'put ''OW9pV0NSempGVCU9Inw+aVksP1tRbDEoI0RtdTdXZmNJd2B5PnZ8T0U2bk86PCUuTW1sJT1URD1aKmR5M0k2XXFaPHo9Y0JPME1kKWlddXs0THA6KGlqdGohW0txVkcwNiM0TWRiI1tyc3ltQWRgP01nTEBKM3RzLC9TSSMjJjEmTXJIP3lFdXJNPFJJNzdXVnk4WDpvISQ5flh8SDd9YEpqZkBX''@;'; put 'put ''Jl9qdDF5OmU0LEEyRmN0TFdmX19mYjRrJWx8e19Wb01ZODEhaVR1Ilprd2NePU5QI0hOSWJnITQibDtjIig6QV5NUSZ3NVtgUGtaa3dzNGVKRTdvaGM0RDcrTnlJZi9MLnh4dzpPW0xGeSpvS15xUSROaUUlSF0pa0ROeEBIK09FJUUhL3JfXTM1ckJXKio0Y1NhQEU8aXdFXXdPKzF5RyZCRFU9''@;'; put 'put ''WTVUQE98UGdvSyhdXmhDWEoxNWdvRGA3KyMlQ2ZpczlVRyZkLl42ZGBbS2VdfXgxXUpRR3hjYypBRmFKOGJFMk8uSTIzKykhMyJjQVF8XyQpZDhNImZNT2ZtL2BuOE5rLFBEREt+SFIjSihaOmJAIjdudFZ8RGhMeXtBbD19KV83bUk4YHMqaSRSYXhTYldMJnhZP2NmL1cuNSU7PGwrbDltMnM5''@;'; put 'put ''OCZzVVUocEZLfUBMfi98VjxpbTZGaFZOWDtsLkBYR3FbQExkX0FnVXBPdD14cDczJnBVaV1dR018THxXd1YlNCRkKVBMXTYmTnxAfV9PN29lOE8uQ281I3MxUlI7fTowdStCWUFyVitVPl0xais0RnlRbnErJkthKiErKlhCakZaOGtvWm8/KjIuXSxYRTR5UjNkaFpUdGhPdG8md0Ftajt1P2dH''@;'; put 'put ''U0VrSyQpci5kPHZ7RiZnUE9tJjE4Kjd0M3ZyIX1SeFltOzlNIURMcVtjd1JLRnc4aCtwZmtKbEk1OTsvVH5SQGx3bnBzc348KFdEbCNVJldqUUgkajIiQFMyK1doTCtXczlRLG1YU31nIWpweyptWDNSWnEhdXhCYnEhRi9HRWojMkIkVmpnWmtqbDtiXzpTe0AoVkJnOHRAKTslUz9ze2hFbkNK''@;'; put 'put ''Oz4xeXJPcmVFMjNnR0VWUkZLeCM2e2wrI2ZdYERgbkU5SGBSRXBRW0doPmwyK1NjKXR1Z1pmTHF3Ul4xVmhzI1VmM1o8QXloRzZFfnc6PjFEV1UuUWMpcDJuXjlNVFlAWGRbK0VmL3NfVm0ydWxLUEZ9P0BMOmpRfEpmQFZoe2grfSNiZSIpPXgjTSs3Jmg5I0FaWit0QEl6fUppVXNUSUpxZH5u''@;'; put 'put ''Z0AqT3VBcHJFRFkheXNvdG9vSE1ZWmY3XS9LOzVUVX5wN3hhTChrNnpaJjFgaUZGQkRoazptdnVKfCR5OGFEbCxdTml1ZSY6cmMsTUx8SzI6Yl81JE99Z1pHdnU5ZzFYVTwiRmNMSn1eLGdAdmx6ZmhIYlZWQD41U209M1BJW0Rhfkh3KElGMmlNL3NqPSpMYGBMPS56dV0hSTkkUXQ8azVLdnZQ''@;'; put 'put ''YV97S3N6bU12JX5HViVNXnJZQnFTLF88RHkyQVBLfW91L10peUUxX1BkIkhecVojO3g+dFo8I18zfUZLLEREZjolSTp0eTMxZiNfIzw/QWQuZ2FfS0NJOTQjWWtIcSElSW1RYXhHQ1dwJDZDWEdzdlkwLCp5ZltFdUxyRUl4Y3BoJWQpaCVkLElQdDdOYHZHQ1dwayZodHdVMFFsc0pxKzlbeUtr''@;'; put 'put ''RX5YV2BMXT11aFpPeD50RFd3SDl5RCtedF9IXnJzeDtAcE9IZyF5PGgqN05vJnFINEpwP2NPOGlEVHRkPCM1fThOOVk6R0NuZGE6dVYsOC5Jd3w7QFZZK21HJHxja0A6TUg9bjUrX2BRentxWjVreGc0MyxdekpWc0Zyc3dgJE5qang6JUkjV3liWSttR0VvIm9CTj58SEpCRz4yN3QyRU5qVERK''@;'; put 'put ''Szslc04mV0N7VlcqLkRWc3NIJkgrcDZWNzJtWTI3dFZ8NWF6eClhLm1GOl0vQEtmY2EucHQzPCt4ZFtwU15HW2M4MjRiKG1vUjR1Wlp5LE5GVF5jNUthK2hHfHpOOUk2Tn1aM1VrKSspUitISC88UUwkWn5gIzdKT2dfWDIjP0RKbl1ELFFhIS8vUEVkODI3LFBPaGQubThWUmEhLz5eakhmPCpW''@;'; put 'put ''OG14Jm43Y21peikhbCkuXU8hJEJGKXEwbixGN1dNQk5DWGxmbmNtUWBdJU1uNUBTTXYsKntHcG0hTmR4ODdTMmFfVWxDcE40azA1ZCNfY08zPlVaUzAmS2AhIzZsRGY6fH1iLFZjRzVCaEc1OHcoPjoxbEBjen51dVlJamJ0V0RLL1c3cmIlNF18enlWSEhPcndPY2B6Y1NpfUw0NmtLNFY2KkUw''@;'; put 'put ''WX01YlQ3Tnw0fmMjI20zciJWVzhOYXhjcypkfkVzRG9xQj5RLnNobnVLfFJJRW92ezQpaHlBMG1odWpXK15bfFhgV3c+YjZYK3Yqai9ZWVNjSkIzeEkmeGdxPVNPbyFBN2ZTXXJ0WFF+JkZDKi4vLDt+WU8kdHFUWix6Lll2S1lld2xTbzZ4RVNFR2V7cSRLU0djbWIsTHpXTltHY0M+OypDSj9N''@;'; put 'put ''Q2UzVVJPMjdWK2tNUUNMVVQ0LihOWGpObTBRfjkpYilSX3tiXXpxN3ljUGs5LlZCIUpfKj5raG1FQHUrdUx1P2FJTlZBPClGUXFPYmlRW3QmVz1jZTw4MEZdT09LYSsjSSQ3NHlLTGdDJkhUIUA9N2p3XSJeODIjSjwySm86cl57d2haeSNaVX1ZOylVLiRUQU8rMlBeJWRGU3s8UmpTPig2U3lX''@;'; put 'put ''fSNEYGJKOTNzTTVAMyEyRT1sSkFIdV0yaT9rVzNpZztKZHp6Wmt+altORC9LfVgsQn5dT0Z6Y3ckaEhBPTRtN1VFSXJtY2deWWJ1OVhoXnFnZHhdZWM/YikofGYhWnZrc1lTQW0wQiY9RyUpW3JaVGVSdnt1RGJwWiR5VlNPX3IoekcvJTImTitSdXBoNDEyRlA/Ikd7LjUrUWxwRXlWcCZmU2wr''@;'; put 'put ''VURLSStGJHIkZE16MDVTcyUwOHRmbUR0ZmM0VVNlKyNka2VkRm8qZHZ3PkxJMjA6Ry5TMipKVzB7YHsld0QhcGYjVGs3T2BkSjdUcDtCLnxKaCpbOXNFTkwjVCZ0L1kqV1A3IzttP2NbOkNFRkBiQD8kVVUmaEVnPGchNT5mI2U3OEB1PlNWLjMhT0VxPiR2NkY+PFdVQE8pcF17fCtjYSlOfCsw''@;'; put 'put ''UyJidEpOdFFxUWF1K19GLnM3a2dwKE0ibm43STpjeHgrWjhCdiIjcFVYR1J8YCsibCsoK1N+SFA/X0Zad1tFMCwpRmIsblpoJnRjV2ZuOTZaJWVqOz8rJnBveG5aRXAiJXo7Q01LfSovaDU+Y207VGJ+SC5VfFs7TnhUaFpYbk0wR0NXcDdiM111WjVOWlBaSXs6ZEtOMDBZbl5xMFd0JGxkV0g+''@;'; put 'put ''N15obG9kKS9Kc2x3PWZWOFF0cGJ5UmVLbVJFNSRGKCYyLkw7cSVDeDdVayRpeTMqPWNCT3B0UyY8KDx2KmAhSXJqRkZXfShQdDxmK3BmSWgiUFJEX1goVzc5MiFodzBYVD1DZzEqSm8zPGRLTzx7LFd9IiErclQ7emNUaEBSVEA9RGA6SipNTG08JGI1PkF+ZEtsWGhGSzsiKTRKdVlUdGRTfFlt''@;'; put 'put ''WXsyMXh3fWhJPSIma0cubntMNHx9TERfXXpIMXBETj1ZYXt4bHlyRkZBIU5LczRzWyJOS1d+cjluNyMlY01uL1N7KDV9ZW5tV1tAdXtvXSQobWJtKz9PcXJHP0VJWCFrWmpAIUtuVTUhMXk4e2Q0dkw1X2szSysxK2xJVHdKJDA0fX1ZR0pnMHBHeyErciF+PkQyIjt2QSpLKnU6a008eC9oeHBC''@;'; put 'put ''RkU6YEd3ZXk8elZ5KU01Z0Y1JSFlUkkhKiJTMjtuQyxKWClbVjwqZGhTZk04NTx4UjhrVTtreU9RKkdIRSxAIWI2OSFVY2ovOVNSVFUkcWghMHhVRTpbPHYrMj92Yjp5fERhNXgyMnNQeDwhKHZgPUo9RmxZWWhSaTwwOS5Qa1N7a0BKSjBvLGRsVENreXx3dmpIYnZXQnRmIXlDdyx3OitIdk0m''@;'; put 'put ''VUhgNSZrWGl3eUs+flskWXIscUxxUkZtW3RjUXR3dzIjcDZXZzV6bywlaj8hOCslalYlV1dOamN1OiopS1V5NGZyeE5JJmw3YWU3eW06Qm0vOUd2WnBHZnlpZmtYKVsue15LLHVxITBvcmFlSUMxM1kyWUAmISFhRytIYXJbYG1rcCFPVjl6YitgS1NJPy55JGIjSmdHOj8hUDZiZlZ2fDBWVmFp''@;'; put 'put ''VEs0aXUiY11PL3oveURncj83flksfEo/SUw5ezZMfixMNVh0fE4qSnp8PCxjRlQ6S1lTKyVHJSl6QnA1amBZaG52NHttNDVQRkdTRnlZKz86T09YOUFFN2JFcm9JXWdETTNkcUFrMC5UVzwjYlc5eiEqSEQ5JjJ7OWgycVNTbXddcEBMVSpAcCksLkNiVjMxKUJgSzkmMDRXL2xGOFFRVVQvJTxl''@;'; put 'put ''LlZuK3JQdjNpYDRhVHclUz9wLHBvejJzKW1BQ3FUVUp8STREbmNNZkJAQENBQFF9LCNDO0cyS01HOTcxNG9CUlR0PnV2U0ZgdShPX018Xl5AKX1ofGp5Rz1zIVEsL3BJQEBpWiQjSz17bHF4Om4/fjFIaVIreileQF5nZnU5IUNVb3J5MmxpUD1QbDpePVBbUFtuenl9UDdna29jPFVNWl5HUThh''@;'; put 'put ''fVF+fThrPixuYCI7eFprUUhDe1FfPWlMLCk6VUlLdSw+I01nfFdFezZLQklsNktKb2ArbUx5TiR0QmtpJDxtVXsyaXdqbmZkdWpLQHZqQCg7aiZAczk0bUBWQjx1PGssUTpHcntrKTVaPF48ZS9iL2dFZS9OXk1rPjsuOzB1VSsoeSo8RCM+MyN6Znp+UCtAZWhzK2hoOyVPWUlZN0l3JStscVFZ''@;'; put 'put ''RmtWWVZ5RG0sfHU/ekJUVjx7Q0h8dWVTNEU3MnpdTXFRWjxVbTJZZkVIK3NtSSE7a1F6Sl0oTVYxX1dXZiJfTls9UEhFZjArOThSb0IlanIhMypJdXl7LHN6MT1IW2heUnB2YFJkYy5wbWgwcGI8QTh8MSpaPSgvdHxYI3kwWnl8YkBhaiFLNXUmezdMcjgpMkJhdCVnd1hPakNFWUtSMHApVXF1''@;'; put 'put ''I0lOZzpaJjxXW1U9UGxnQEB+UStjPHE6KiRsK1Q9PClMV3E/cGkkQy9HcmdhJi90bUloSShdbmohKzZvdTdhdUNFZ2MxQkpWS0BpOmldSUF2KEdyWEFPTy4pUD1ISlR3MSQjPGd1eVAlL1lhR1AsVyJvdSR5UW9JVEs1XUIoc3EwM0YlOm02ZSJPe3FJOHsqPTBHMmkrJXBHNmJ9JHI9bzpxI0N4''@;'; put 'put ''Zm1Wdzp7LH4zaVZrc2x9djJHRExsU2NsQ21WKjlgank6N11sL35ILjZmNmRRemIyZmpEQWdSTUJbNkNVMDttW3toNUFsTC4+VVQ5QEsqOz9JLjUlMkhgQFdAS0IwIVtsWyVgVkBNLk1HLFg1Tn50Tj17V084Yi8zTmNoamU8W3dWJjtvLEFGTDlTRnc4YTkjUWlFPHo7U3ZAIiUydkhpfGwvR3ho''@;'; put 'put ''fFAifV4jYFN6eT0mKCpzQHwhSFgwPiFsJmBaTTs5SV5WJHRBbVZQRH5bMyE4dmh1dUtocTRNZi4ofU5aaiZBV1AhejsxalE2K3ZYc0hqU1dlNmN8aGYic1sqdFhNezJteFh1amkuTWhxVWRKRWM5Sl4sQ1dQITVwajpgMjBGRTEsNTZoRnVNZUxbUkA6bi5YSnJldVJCdmFzckVjdlQxc0xWJVRh''@;'; put 'put ''JEcxMGJUQm5rbVgvfCx2RVtgUF1gRm1SYj8vZnlhbUg9TDw6Z3hlUkV6XSo/azwiPWoqMmBbanZqTlFge208X20yZls+ZXlCLFMrMjV7ajB2eHlneVVid3liaHg7ODRqa3NOc29ZaC5VYF5sUH1AMVZZVXRVZHFERDtJIk5NfjtsWitub2I8USJWRm03P1suS0VsWzhgbnVMPHhbb0tGWjJkJF03''@;'; put 'put ''bXtMWCs7YDpUWnI3Sn41Rl0sViFCRU0zUVs4cipgZ35lIyYrLl10PGQ3IyVoa289NG16dWJyRlZWaHpHd21wK0FrdTxIdnJzeVNKTzg5KjlMaFBYWEZiZ3VRXXJDJDNsaiRxNXlxKXV7MWUqdHNYYk5bWUx1amciTSEkOzhBMW4jZCxdZDNpVFspIT1leXhnK1JAbFdVNi5fNiI2bV5oUTEvSms9''@;'; put 'put ''LEQ5ejIwMSpTX3h6Xng7YS5GZ09tb2Zgdz4pZExdcit7Kyw1VUw8a3VlJSlvMEYuNm1gYiQxTDspOkd1fiZ6LjErI1UqcH5KKjpRYWJlSXklanI2WDZVTSQ/LE9oY2E7Qz9ARCp9I25wZF5kYlcubXxuMkl0Okd0b3NmW3h4VzdsPEVybz5II2Z1OVE5VjtjOHBpbjlfYlZyZk1lcC5bLyFDY1ps''@;'; put 'put ''SyooZSF0RlZIM2ZYWTZPP2lzdHE1ZCUyN0k/Kzc7USpsd0EsLGZbZUlwa3UiYSx5XzxtOE1gZXVJSnlWYkVdVmJeSDlNbC85KEovTkc1fCYwPWl5VzMyfmN1JnZCPDVGOG09QT9jN0pASUhfMykiOSsuajwmTXFJNEsqLDg2OSRvMzZdI0lKJWh8Um50RD80SjBxRzBJfkMiRTwmaXdXZVcxRyox''@;'; put 'put ''dk5tMUVrZG1TKjQzRzkpT3phQzpyNmkkTThafU8jZUBIYmUzRlkvfn1vV0chQj8+YFR4Ky9uWzY2N0tFb15dU3MhTXY+ZWRRK0pARTM8enNqb35LeCUvIlA3NltJYWJufmpDajUiZjc2WUQyLGgxOVlLX3JeMHN+STVoIyNIVTp9Q3g0PG4+PnBsOC8uO1E2L3tDUV5VRl5VSWNXUXJxJVZVZkd6''@;'; put 'put ''P0l9cGw4Wy51amYzPWJkO2BxfUsqY1R9PzlHZzN2WE1POEdnSltfdlhnUC5ULjMxUlheTm0zP1VMM3BreFhXZyMvbjlFTGx7KFBxK1dpQ0MhciVfNytjWT9gJEhIYDErNi9tRXwzdkxFSkhFKE91Z2ByMDM0Nnd9eXBTO1Z6Oyx+P2VAWkwrKEU7eVdMKzxrK21aIXlMSG5CT0JGMzs+OztlIWJG''@;'; put 'put ''V2VmMGJEeXkqcnZmVSl4SmJURTk3aypZJS9pIk5Vajh7WHFMM240dmlTUlFYXiU8Yjt3MXNKQ08jcXM1cH52dUZPU0YoSHUwZm03SX5wLnc3MXVQdEZENzhUfVNFd2g9V2FqLG8xS0dgW2NYJVg+O29qNT5EbzVuU1ljYyZUYXVeTnh1S0MxNiZLLmVIdCUlZVs7VnJbJkcrZy4kPDRtX2BCMUta''@;'; put 'put ''eU5MPVVLUGs5KVhPS2o0MC4jP3FKQjFSL2osWHc1QyF5d2pgNjJAdXhwdyM3SDE8TXB1NHVzeF5WWWlaaGE9JjtkPkZ5Tmk0eHV3e1dtL0dtWFp1IVteKGxeSnUpL2UpL25VbT8pPlchWCNdeCl3NG88YUUpeVVGP2k9UChOUGtBMm8sdVk6WlYlVys7PTxvOl8oP3w9TTYhI2AxMCtzIT1NS054''@;'; put 'put ''I1ZkXlp5MSkqPG93b2ZEOj9DPG5qbjkydWJ6N1FkdiNkPFQqZTYvOCtPRVtwVFp+LG5nREI4MWI8S1YjdjkyIUFFQTBZT31EeHZXP1ZuQmtFXlRvMFZDWSVxVXgyfi80XSg/ISNrO2lMNkxJeGBXT0tjPGM6S1VxK01qdD1NNkp1biwzdGdDMlp7LDlIIWNSUD0xSEZEbF5QJV5GI2IhLmlDMzt5''@;'; put 'put ''fUZdMjVGQUFYTG9pPEc1TG9GUFh1dUFrOlVaWltoYU1VUXpSQUp7W3pLWGlad0lVdlo+SCoiQGdLa34oQi5GYFtibGNdOkpWZ3x8aTIiYTMsXXRKYmd2Klc2am8lLz4hMFBtWVJDVWxVTS5RN1gpRCNlSENIOjd2cWwrdDVZMjMuKiE/eHFDV1lVK1lWKz1pXVtdQzJNTSE0ZXx5cWpCSzRDUTVX''@;'; put 'put ''amM8b2gveHMvRVg5SHtENS9mXyMxWUQ+PHF5WE1xLDVCLDJXK2p9M0plKiMrUlFGUGIpenZDKztrNy8jKzAzLyMrYjlqfU9CQ01WOz9eb1t5TXdZPng4eEJwNX0hcXl0KS9tYykvbWMpLDQ9PDRDTUouVGlUb1pOXlpwX3BPOzw/OEV0IShKO3x4XkNAR3cjcCZLPkJZL1V5QztkakQiMV5OaXt3''@;'; put 'put ''RWZQVCUpVWYqd3owYFhYUkRXSSspd2AhRmBEKzhNYCY7PzZbZ0BqLDtJfU9nU2JoLi9ENldldDNaMlpraz8zUFJqWl9AeCpQWCk0ayZXMmw5IyYsWzxTaGh6dmNbTENgZCMid0ciV0lFS1VsSkY3Tk1vXUx2IUJXfUxqcTwpaVJ1VURGRF1nLl1xYlRRdXxkKkdFS0NYZypyPDIiPEE0YzxUUlhb''@;'; put 'put ''RyVCaTk8MllXektKQTJsTXs2U3sofkF5fWFeV11aKWs0Z0A3SChPdnYocE82UmsqTXlmdl9QSileOjxZcDtlfW13eTlKTD1wNDQ4QXx2dShGSS5GO1cmbCg8RTdoPiNnUT8jJW1WeT0hfDhOZ3giOWZ0WXFLRUtYNWtKT3Ele34+MkJvO0ZaWSpJcnx7KzVJMmdAXkhBSFkqO181USQ6bmVgWzZG''@;'; put 'put ''bTQ+U341Z3U0eTo9WjRDO31lWFcrcGtXPFRgNDhWeSRHVkVwUHlDXXJ5T3pQfC5JWElRQUI+VTF4M1FYdGJufFYzezt+YzNhb1JhWDt1P19GPSpnO3U0LyR4UDc0XzpvSz1mYXNoZzh6Wkx4V1ltMzQzcnBWbU5bZTExXmdPPzg6R0Jwd294eHJwWzhgTEBDbEQwV1hiSV1FcDtuZWFhWHdDNWll''@;'; put 'put ''JH10eSpzN1lYNT1RIzxyXnVfNy8qOltlM2NELztbPF1FXnBKb0FEVUM+MD9DQUhdanBJRG0jNVRxUiNlditlWSkvPDlKQUY7eiVESHhtbn1yUVdBbzI5Tl5DYSFKU246Rz9UMEN9NTNYYWpMKykoK1J9dXgwSVhaa15EbyZfX0Ntb3t9cFMqbEJvWnxHPXFoKSxIbUdGTSp0Nl04RlYlQHUlcCUm''@;'; put 'put ''fnJEPl13cnA7SnEmQUQqS11xdGxlbU05NFtgVjZEInZwcCVIY3VFclM1aTN7QlUqK1hYfW9KT3U+aHgrdTJIfiQ+aS87MSZRVUNCYStKOSNiNitpIiptQXloIy5MRl5aX0JNekpzPjl4X1g3ZTlgNn1FVmlKIShVTUZeWikqO3J6S3lAPEgmaTspNSFLKSYwPSMjWm5CRE0lU0tFWUwiNFlYTElN''@;'; put 'put ''enMvfEc+dE4wM3pBaTU6di96cD5hWEQidmtDW2U/RXVZInJVOlhiVCFMezVmImY9Zi51fmdMYGMpbzpvOWZoSyE9VXN6djNycH58dyE9XXUyY31FS2xwKjk4KlREcjolYilYQkAqZm51dlkjL358LyR0ay5Fa2I7flZ2djQ8eEpoTDRKRE9TaGJBJGl6ZWY8dzgvYSpsVUc2dXZdW2dAI2IlITo9''@;'; put 'put ''NDV8byU4QG1hRkRLK1Z9dy5zMzVSYWhTKDxUUDxkcVU8SUthaFNlOypKMC49WCwpe2A6NiozKmEmXTNEZ00kNmcpP3hvdlRhbyRQOS5lOV0wIUB2TClsXn5KUGpMZkZEem1oIUNXIW0lYn1iJTViNDche0Y6fC4qN3g5NUtIPVg+cixxKVthVkFZT0E6PWBOWT8uSXg7c10lZl9YTDVePzZyREYx''@;'; put 'put ''fCVPXXt8L1hXeD13TG1SQEM+aXVVOzVXTTt7RVhPR1BSYDRmRWs2dmZZQHpSeDFBVylIeWRTPiVZS0x5VEEqWXlpRVh4Z1FzVllXfCQrQzIjUCl5bkp4bnMrQ0RAVElybzAmNypVWmlPMEVQWUBDcVgqUzkuYXVaTyh1YnVfQUpzZlIxTEheanY8UVo5QHlpdUtwQC4+Z0RfO0xIJUV2PWI4ZSly''@;'; put 'put ''WUB+QHlZQldHIU83Vks7OUo/dVV3PFVRcm1OZytZK1ZkZSQrYHpXcS87R3s+KkU1WWxgYDAvY0l4UitFNHc7L18uM1d4Qm82RVhnfExDKVledmRyQjl6TF9CYTldQCpqRkY2T0pdaGRkPm1Icmx6MkM6Y2R0Wi9aLmtye1smeVghdyVwIW84aURSd0MxOkBmWlI5cjpKU318OU1XS1V1M0x7eyNw''@;'; put 'put ''Iz94YnghKUNkNjkrRWdIe3xEM1sxYmhaVT9HaU92U0VvOlMwfUlmQDYxZV9vailOQVN7KGNQXV40b08mXUQyOnlsTGopIkpxSm9sajNuOyE0bWQuTEleS2U3TiRiTjY7ZTRiJlg6TSZYSVE/eUs1dylgeT15cC9yK3csL25oejNxTG8iL3N3PkxRRndOcHZxMk5gYFhCWWsmRlVIQz5KIU1jN2M8''@;'; put 'put ''SCw9b3k1bmw3LD5MK3EoIkd6TTN6c1FWYiYhX21oa3J5QUA4NGphY2N1THxzelc3ZyNNX2tAY1RHTnFySmJmckFoaGduO3xHRkYpcWthXSRKLmNQO0wyI3Ipe2BbR0NoNT1EWng6NmM/ZSI7c1BlQygpMSZ7NEJvPmB5O05mc3RkZF0sJGlMXywmQl9wdVI9MD5neFglQzptTyxdeiE1WFJ1Y3Rk''@;'; put 'put ''OVhaSTJyL0doTz9CZSwieHI5Kl9ZOSR6S2syaEBZKiFLRnNHKWJCflhnLGRBfn41TklvSXR+c1YlK3M6M21wND9kdkRFbDpZdyVPQ3VuXTJnRUVtJEYkQUk7QTcqbyI3SmEpLndZYkc+I2liRH19N2duIUcieTNCVHl4LjQhVldkS0tfTklDOjBgeVVsMzZgUHpCbSxyK3VGOltkL1QzWFhpbz9j''@;'; put 'put ''V1hBNUFjSX01Yz9CRSRoK0pGdyFPdjRxaEJOWDhWOzNeNypDeCE7S0IwSGVkUVh0KVJyUzAwJGlMfWwmKDReaGt5LmR3QS9yKko8dzB7X2lzSTd5a0JaMyF+fX1WYzxYKmQzajtVdkcvVTM8K3gsMTAra3ttSzpSNFk/NUZZVkU9SiZbJjVHQSJkM2tXV2BAMkZDVTQmNzxeXnhWKG9AMlBeRll3''@;'; put 'put ''NEA4RT0oOi9deGAqTDptK2J0JS8yZXRHcXReeiw2OUFHO1ROaHo7SncwRDhEZmZ7YE05bnwrOHtnIjgvTSVkT0kjSnE1OjcyVWR2NktEcihfVSNzJUxBbz5uMFFAcXArKS5JdFlAWzc0U3hyWjd8RiNOTjRnN09BdkBbJkQuS1ppe1FeW294UzBYak5+WUMldG9DOjRoYEwqdz5WK24uKzQ8YCVl''@;'; put 'put ''eSE5cGk5SU15dD5zdHBMemE1MTwvbyg7OE86dks8Ikd6aDllbz0xZno4bSQrV0I4TUFhalcsfDQja3REa3BjLz5JIk5PcXEiL2dxezZZaEwlUV1ne29BPm81d3FFWDNGcT5kbCFMLnFZRGtLVyRBfiwxaiI/ekE8PDJ8KGN+LykxQj5TeXYrMn4wO1luWEtYUnJUNy55ImN6bTlaSl8+WkdZT305''@;'; put 'put ''NnwvRVJLfCw4YEwzfEprSH4qelVVTWd2blszaDBbNGd7cWY9eXJafSNzTiZtbyx0SH5nayhSbix0X3tHQmhfZ0w+NyZNcXduJkNoaEAkZl1lQ3wxOS45cj8oVXE+dUUudl1NS3dRJFE6JjtIcVpJQ0R6bX5AdSkyU2E4UEc4fjpiZkx3OHJpRzlmRVRoQ0xDa1RoaGhhenEoZztJPl9GcnV4I2xA''@;'; put 'put ''Sm5xd3tLVkQ5Y2hPTmtgcixYVSY2VyhyNHpHKXBVcUU3L1haPyhsXnZ1RTxBTTFJNU1jciF0YHQobjkrdDJnTVN0UX53SjN8OGNrRmZQJVJhazlFczM/dFFSWXpebUkjZnY1fjghdUVoRS87VURVc0cxX3k1Nn4+cnAjRy5PKEgpNHt5dEhJT1hANChAMmpILnc9Y29YNGchIV9DVSUlZD95THQl''@;'; put 'put ''W14heXRdbWpMPUF9USFIWGJjPGI2YF9GI25meT1AQ1BfKU1QRF9ySks9cSZyM3QsSF4qeDo0b3ZLVyQpMl1KRj8yMkZbdGtnWigzdHZQbD1TOGc0QX19UkJMNlBqUTF7QGJyOGcyTXByUSR1Rl17V1h3S2w2JXR8UyluaXZWRk81IUJ0UzVJMGE0Z2B5cCh6PzR3V0tCO3lXNkJqLFdSUnJwLDNP''@;'; put 'put ''TEEvJGdEQ3V5dGNleSs8aCJ4YDV8SjZaY0t+ITFkJUdmNykyeGNoX2JpNWJmaV08VHRmZ0ZudzIkSSYpdGpxbWswU2MlXzlnalYsVVNmZDk4NilSQjc2VV0scCkzKEYsJHRrQmdOYVMkRGpXI1hqfVUpWWJJTWYzOlhlIytAaEcsc2tiNyVGNypmO3c2TGYhMF4zQ2wzfW9zTGVdMkVgbkRedXxw''@;'; put 'put ''N2ouUWVaOSklMTtoTUpzcHteUDhdKDgpJWhESG1YPWB6PTxLZ3o/SC9yc1E2bSpRd0JjbHlxXjJXPFJqUyldKEY9PyxNRUl5KTQ4P3ldSSNDWkxjWFNFKCYlSEtgcFpAV1t2a3N4cDg5ZEJMc1dnZG0wM0t5XztieVU7YHQ7NDFJXnJ+O2RuSFJ1cUZAJVlObWs9fXpYPlBbVnE0MyE6VGM4S2Us''@;'; put 'put ''b3gmVUdkUz4pTHkxIl4kVXh9KWRxeHRCNWU9TDFwbTJzQmZIVHkpRFUhbntzcypVNTlpJHtKT2N5ISNPP0JMPC5vKTRiS2RkfWRiVFJGTjNeZCk8L2B0WmIlQ1VeRzw6MCwpRlJYa2Q8UWJ8Nk45T0B1MDJKK1RwVmJoSW9VV21ZQD9DMFtFeFgpe0U3VEMuZTZZZyokc3Jba119UDs+W1R+XyZ7''@;'; put 'put ''Ukh2SlgoJFtRb0lDK3F2N0RYS1UpQWkwKERIPUJoP0M8cEpQcCssUUllWSp5dWN0SlZ1PFRtNEJRfnhBKTIxSD40SSQpN0U8ZDZwcTJ9VnhnZ2hHaTo+a2JLaXk3Jn1odlYvKFc8RU5DP1s0LitDYUxKPHtQOllwdV4hfihNaHhFVVJQdGl7YElgZEJHbDFVT1lAIWBaIiE8PGErOXhfP2BIeHo0''@;'; put 'put ''S2JmKDwrPHVbO2pvOi82eWo+e15vJVEkPi5bRTN7PTYrSmheIWIxOUQ1dDIrVWg3TH0zNTIycDRpXkh7Z21jcEdDb0RXdzc5MD1PR0VRRXRsKSUiNjUpQjd1L1g3cSZ0byN0LlRYMXA/V21QZjx8T0YiT2MjIU09OWBJKylGXy5zPmYmPyhLc0E1aV47SyJyPWVVSkVWfUgoYVYwbyMjT0liMjZJ''@;'; put 'put ''Q1JJVzNOKXVwZ25IflB5SSY7Ki55I2xqJVtAWGI+bmN7PE5qPy8jWUZhLzFeZy5sSj4kZEt5bUJPKU1Ze2hYSTtzWCg2QSlxZ3A9WyY9ITBDJExuUClbZCVTandmNUYyITB5anJmdTpHeVZOQzJfZ1hUUiV0P2c8N1hacGwzQl9MTD49SXtoNHdOPHRobzQ9I01XOSNpQCxGV35NRkBZY0JOZndz''@;'; put 'put ''LnRpMkRrYlolZG9bZnFEaEMjXSg9OmwhdStreCxfWnlnOUxvOHBjXTdYbT8yOnlkRlY4KmUhIjhaZShIZW0rKlREaUZVRU8lV1ZAUXY5aD9JZEZ8QkgvQmlXLlhgV0paaTRnfDlKRURCVFU0azB0filFXSJpWyNLdld9V0pAUEs8aT95TXFSeDRlJHl7KFRZKGVFNWdIS0c6UXlMUyN4e2YraFUy''@;'; put 'put ''WS4mdHUwUl1zRFEvVWBnWkw0OnRNTCtnajojXSg4YyZsUzBuU3NveFdielooe2swcmkrPyxgTSwuViRNfSUpIW9iWGcubEhJSUxbVmNdOWdnY0UvO3JEcnRAZkEleDIyOnBXL1d0WCJ0M3d3JjosXkIzdHF7U1AvO2pEU3tjTzcjeGZVPF9nXVcoeTApaGVZZGducmdMYHhFSSVCbUVrMitFVTIz''@;'; put 'put ''W0RJQnc+YEozL19rYixQL3hgMDlCUlB6e1AhdVVXbCxGQiUrSnU+az5RS1ovbkp0LGAhPFJqODlgZlYzI3orXV9aSW5uKzReZEUyVVY2LF86fU1SeXViaDRsNWxkMyZ8X2lgfWgsW3Y1Yk9KLjtwO1ZEMW1ZSj1CQUg/MyJOY0UlX3F8Im1DeGtbTEc9aWZIQkNifFkkVGZISWd+MF4+M2pMaEtV''@;'; put 'put ''Z0tuaENbPWtDXip9PzU9ayhSX0hiIm84eDE0Ukk4ZVl2aUhLI3QyS2pzcUA6aSN+PE8kYEAobWM/MTZfWDFLX0NFS08jVHAuPW42a15qOUA6RzlfRyFodSEiaToqIy91MmB+eUVRXWRRVV5zcVR1SzVCVDlRKyU2UXI0LG5YYjBpZllhanp9M3F0aVJwM3ZYalVgPmtlJEZkOzY7cHV2VmIjUTly''@;'; put 'put ''R1ZOW2Y8X04+S3h7W1gkXT82QSZVTSlxVE9gcXtCYnFeMi5ybHU5aSJ8aSs5R1ZfWHo/WGsmNmdWOyp+ckJ1TS5lQ15+QGhfITJRRTdWMlRVUUA9YDhwP3ppUWssZTkmKkZjUU9ncG8oZTkyY1YxOHRQRVhDNEFHSWBIVTUmb2AxUkA2SipMMzxDcVgpQiopIldRYDEmZkd0dmpZYDZAIn1RL0JF''@;'; put 'put ''PExEQGVTeiNZNXRlaU9WXz96MUl3fSxeW1UjUi93QUMuImFabGd+ai84OX14MnwoIyhbW11OSlZFOVt8US9CRTxsW3A0b2x3alEjXlVFeiI5ZiFySSlgRl1fdEtNQV48QjdPPF9sPTpYLlheMXh1UTdyWitONGwyKUBjaTU9Mm8/VzteajZkIXJQXW0wKEs4e019L1EuYT89Ozl3Ymk1W1NxZEh1''@;'; put 'put ''QEVyb2A4NVBbM1k3MiEuIUt0ZCZSNmJEfHJhS0dKST1QPz4oVVV7PGlJT186V3U4dERJeXN0d0RGOnFXc3s5M0Zbbi4mTix8LH08eDM8SD9NPkM8eyhvL2ldJG5Ndkg3WTRqQ0lvV0hScjRRcDdfQERmMFtmWkgmcUo7KyZ1WWdjaWNYKzRBd3B5dHFUW2QmIX1CRDkuSHhfODV4aHZeZDZ5eX5T''@;'; put 'put ''Qz1fNkAhW3JIOTVoej0xaTtiUGtFQ29HcTh9ZkwkV0E+NFM6RzxKZ1Q+ay9xRit3JkBMZWNdJjcuNHpLcFtXIUVBbEwzeFh0Uk5fPXRUXVQmaW96fHo8Z3hyfCQrdDEySHUlNF0/en5RJGxbdld3aEwlUU9NJmhjWT44WkU3KldYaGVuWEhEb1VscSZwXVRFW0o7dTJRKT4kISVaYjtLcE1taFFy''@;'; put 'put ''S3hkeWcrPmw6QHFOMyxUU2svNWlJUS5hPGczKDRUaStSblFEJEhARiVkb1gpW3NJU1loXlcrdXgoeTtLYTd9Jj9XO2BjUSlST1IiTm5Fa2FFWGAseHdCSC5rWGQ1IVJtaDloV1YldCo8U1pNNk5iSDxgKi9zJDovITFCIUAxVlZBT2ledyQmNkEwIXBjZHVqQTglTGxgKHpET3BOfmJpPGIuVmJs''@;'; put 'put ''cFFJTUgsZ05sOUNQL1kzMVBuSlUsJSVPVWFLRE8+S3VwLj07TWdAO3NYYmJQeEZhayVyQktWOFNEckAuVT1NOG1MOXljVUY7ZUZ5YVdzdU0pXzxfNzc6aHswO3ZLazZsK0VKOkxjS0R4X1luMlNua0VNTF8+RFR6cXNScnpVVV9HPGk7MW43ZD5QPlZfUHk8VSN9NzR7VlVOZlJfK3wyWWtSSyVN''@;'; put 'put ''LmohWjEhM0EuSUd5Jjo4OWVPcXZNNGF5OTlDXVkkT1kzcUx3VVVFKHU0bFU3STo/ZD1Yfm9vRT80Lk4lUTB7eEJtUU9EUitUNU4saTN9JkZ3YEokIzw3blVVcztgVyNuSnd4amZtKDh2el9JXURRXThEPio2NFZ+SHY5eFZDcXJvRktqYkZWSCFrQkdoJmpzbkI6Lk9jKkh1R1UuVXF9bSk2NHVs''@;'; put 'put ''Qk1GbFpmaFMqKTxmcVZEW3BsbTNFRFZJe11yY2A3KldXVFt6STptTEw2UXN9NjF6PGphQlRwJDtZMCNRXyNrNEpXI1JfcHlGbUUmfFZUUkRzK2ltSH1RXVBDMnBFXl0hcVtQaigwcFRLZlU4T30mbWIwelpbUm0vdVEzeW8hTXFVTyRgS2x2QlRjYmFSd0dkZGBKa0NbSnFyXmtUSU9ebzxwRFMx''@;'; put 'put ''eE1HK2dpaTVUN0F7WVtTdlhFdHUiaVo+JFpVKVFpZSgianBjR2ldVEdZYjIoSkRHY3JIdUVybilMSVFiKUBNNW5DMXlDeCFxL0gsZGAxZDNJVHZtLjtvaj5SSj9zUEB2bWwwWS4hPmt8cWRiX0YkcDkuYnIrOi9tJVFCUjVxVjE2dkAjKm1GXmBXNis0VFQyPGV9bVR6bk9KOF1qYjo3L0VtLGc4''@;'; put 'put ''WGdtV2AjWlpRMEAxJGA9bnowLE46S1lFVkYxLE5WRzZaRVFbcndtTCswUWRuIyNVN2d2d3tNUkA8M3Z0WWtkTXN6MU92SVBLQEpJWXdOXkIhOj1lSGxEYV47Iy98RHZrV1UhQn1YUTVOVklKOGBZXXJhR2tyYm9BPEdyTWt0bGdqMmxMN1ZVeHw/JWJ5RT0oTk5teygsX0FqYll9RiosJUB+dG9v''@;'; put 'put ''WD82YDY2STJxPHI+K0d4TTJzfXREW2BQLEJxIUt2QVR+PGVJdjEwRldfPixNUmpwdmdFRUUrQCslP1czfWZGPW9Ga0QuNnA5aVgmelUzZzt7KGZrQEtJLG4qMVJ+UUd6KTI7X086cG1lay5pKUJLI3F0WnZNNGZUI1twWlkiLmZdQHNVYkttPDZWNVh5MjxbZjJ3PWg0dCUme2ViTSNnfjtwWSRJ''@;'; put 'put ''MnA1X0o5LmBgYCs5dnYqTntnb0pRTk9yL1BsWissTiVWQy45azkjI0tQPFQyWVQvSHtfKWc/JXwyfkRYYityNFo6cXtIb28pZz8lM0dEWj1YYiQkWnNYL3trWkwzL0UjbV8oNVomLHJjMX5rdSwsQHRiVXU1WzFTTXZpeWovNEchZXJVTUg5Uyt9UGU+RnopMldHSGYkeSJeZUorcUJWJkphL0Us''@;'; put 'put ''dkdXTWdkYE1LIS8mcEdgNm16TiwhPHcwelZUTiNrQ15CMTZfbUddayYqIzxRXi5qJl1GV1hlZmZoXTZoYzl5WmUpS3tqZkJDS0tvJG9hZz1jSUJZWmhtPixoVmEjVXttcEBFKVd5XUN4RTVTe2MiYDhtPmszdXk0KUIjZ2E8ZWYqWlVVODhLLElydEJ0SEAvQGcmUCh9TnBwIXV1fk1nVj1qSHQ1''@;'; put 'put ''W3s0ZHFNYGQ8Yi9tYGM6fEVIL3cmSykhayZLPykrTGNrfX5McTFRMntuaWIkVTtaSV5Eek1aPjRqLFcmVV9oVEtzL2Q3LCw6YFEkXig6V1BGfUZ5PHZdS2V4TFBpWj5xR21pPTZ1WDxgYTBUfnY7Rm9vO3tqfns2WWtGQC9gIW1kLDRqXXslUyt2djAzRihIJFssJGZfQnZNfGlWaUd9Xih3Jjtv''@;'; put 'put ''IUZ9bzhPeHFQXSI0U1psN0k1Nj5PI1QpQm5NcmFiTzpOM2VKdHosYnMyTnNvO0E9MnV0bEBrcXBQZGEmaU0+VStIUFouRUB0QDhDaUN+ekRwPW5ULF41VWdATHNodnJobzd2d0U9X2t1aVI8eUIpIztldHtxTFlPdF9KazROdiRaM1ZCUXsyTi5hLzE8dzNHXSxaN30hYDk3VURKVU5JaT05di5O''@;'; put 'put ''UjJbUEZxQHkqVnFzc1dgUX0vKTtLZDojWThAViM0XUtrMTE8b2xGV2A0VXkhN0tTXUNeT0I/YCtzOFZJYixJMTBBTEZsay4hZ3F3ekMoaiRMRkxpYDxoOVZKKjl3NGkpIz5VYHwkWk9TdFRqPHR7ZnpIPEgrO3tmQk9SQU8rMmJ3NW1aQHdbK1ZmalFzK1k+bitPTSkvKC43UXNfWVBfOFZCLz1r''@;'; put 'put ''UV9wSWg1NlY3V25PWCo4V2g1T35dTmlYNyVGSkxtdERoWzFaWEVbSX5sUTJrKXA9Ti9NT3dxekJVUmFTZWZEdV5eZzk4b2tXcil8OE8vWSo4P3BMQHQwaWM0PjZsU2l9ZVBpeFFWbj9qeTNLKnVAXkQmTVdRKVM5cUNFam1ecE9Lfkx4NC9CLD44d0ZocSJnWnhiaEJXO1E3OFFzcnZ4NlY+cDRj''@;'; put 'put ''Vl8/Y3FDNDNQZHRaS2dsdVd1RGF3UjB4NDVXZE0qKURSamclLmFHNUJ5VjNuVzg9XXVwdGNxdmdFNnU3UCFVZngoS29wZmw4JWRebWU5bShxMEplfkRJb3tyajJeN3RycCFNMSVOPGJxMSVbbCJicDM2cDQ2UDxIViRrW0doaE9pMHJPaUs1Y0tpVXVeb18/dFM7UT9bK2d6O1UrZnRKQ0M1U0J4''@;'; put 'put ''RyE8KmpwMz1yUCMleVdpUCokIn1GPW1STzgkZnRtPHB2XmdrO1U7JEVEZTJxbGVjbi5uTEpbSCloKlhNdl45ZnJiYTpGQjRXbit9OihiSFRfXTV1KS4wOUV3PkJmbSFTZmhJdkRdUDtxTSk6KUJFKngrakpXaHUqSXd1YDAuLlspZU5oYzAhd1FGI3JVbmtgRnJYcmQuVTxCMjkqKF4sXjlNUnZ3''@;'; put 'put ''MmBwblIxRGkxbUdTYXwpYFE9OEtianltWTdyZlBbVyhKLlg1Q1NeOC9+JGNrXXFWejArXkZQZSUqI0w/YHY7R3BwcStPM10yTXZmIUxqPTxfVitOOD9rWldIJUt3SzZQcnRHUj1hSXg7ekRVZzZYNSxdNG9kKi9TSz5dRl4/eFRHd14zeG97cmUwfkdBKGZZVldyUWltNCptTl1+PjhQSkA/MXZs''@;'; put 'put ''UWBuJWZacD1JIj1afTQ8Umx4cE8lOyZ4MiE9WF50K1NYWSwlenhzUlA/aS9ndl0mPjduZD9UK2UhZSIjdj4jMTspPDI0N3Y9XmJTc2wuaUo7dFBIUXVLR1EmRltsUj0/aThEPzhjWFVVXXJMfT5sL1t5ZUQ5NSpoJWZDdlQ7RHQ+W3c3Q24mYlZJQVkzcWc/V2FUO3lhLzRVRXRoSUFmSkdePDh9''@;'; put 'put ''TCF+YVlhdFU8MzMvbGJYIz8qa1s2YFNnOzUyRU0pUjZjZU1Oe1tOJDNgYE98TUVkaXN1VVVkJEFoY15wSCE1VWQ5KWRlaDBtcDM1b11eLGJQM11NUXtFOCI1ZURkSjhBcTFZaC95O3l4L0tsPi4mV34+WEFAKzxFJnNFNyZzVl40ImM4TyhURlpoYSsjLFQoVGpCWTlDMiIqUWZ5NWhdVGZAKGxV''@;'; put 'put ''dUVqc0FPXkp1NWArTHA9OHBNM11JO2tCbH14Plh2Rl1XYE94djRlYnJJKHB5Xm92ISV5fW9AUzZeWSJTTTVteyJjPyFsdzU7Qz5aOCpxRE1YM1F+KkUycVYsU2s6ZDBdP2NBSVJKOSo/KC9wSSV5NT01T1k4enV1KCY4W2krdVdmWzRJeX1dJkFtbz4yPEEhflFwSltWKTc+NmBxZD0zXiMvaVZV''@;'; put 'put ''YHRgNy9gPGA8czV+In4odkxhPW49LkVsP2l5b1EyTW9CNnZ1RCI8I0IwXjJ2L1NyVU8menY8c1pUXWs8WkFhIyNmTVtFJjo2OGMuMDFFfFloZyRKZT1qWlReYmZGaDxUIUJhRSg3LyU8NUg6TDs1Q2Q3Zls7IzFnPEtaWnZPWnpZVGBoNV5PdS9oLmFvQ0QxbXNMX3wmRkJKZStTUj1gUjNYXz42''@;'; put 'put ''TG9GfHcvVmowPmFTI1dFdjQ2MzJKO1dDZkAxX0BFRHheS1ZqbWdZKD91REMkPCY8bGB0YFM4NThpKzEuYVVdb0dnLiwvd2wzPmRVdTV+dnUsZWE3RVMpb1hCOGk7Vy5fT0V2UF05LF09UmxETGdYXyp5KnYwbUFpQjNFSXBVXXk4bjVFRnEmNUN7PnlTbnRELlR5cDhFbDUmdm1YK1lfSCF+MXdv''@;'; put 'put ''K3J3XkRxeFU2M2pSWm0wMjVVLHYzYHUmWUNWXUlUZUx1JTdWIU1YY1dkWjQ4T1B6K1EhZHhBPiJOaGhMfGt0PVdpdXs0SClJKHRIXXsuM3lNd3kiRmJoRzE8Rk5zK3liLDtTQmVnemI4dEgjI21mU1UzPikyLkdMRl49cFM+cXoxbVhndCUxc0ZMR3hxRztONiJ5OyxjTlp1bTdUazh7cjApW143''@;'; put 'put ''K3YsKlpeM1YqYSlbb21kOH12dksybCp2WUN4WHFtaj44Yyo5UDRQO1R+XmlkZDJUYEZBTFdNJXxBVDMyfTlHTUp7M0JgTTlScHlAbzove2AsTXx3cEoleFR4LEhbY2lUdEs9ZmVqZk9lZjVoPml1K2BiLF8vSzYhM0VQYUV6eWkvSVA6Pls1YnN5UV43ZnxEKjRnI0FJIjRRYHdjcyxeU3ZSMzhX''@;'; put 'put ''aHNUTC5YXiFIKGRHKHRIbDxJaCRARmBHbHUsa1Q2LndKaHEpQCZPdFEmLD8hbVtaa3dyfD9qeVordl99bzgrWitfUk1qTlZGYGp5QzNkMUc0fXlJNjpAWV1iJlomKEdXLDxzSmpieWE8Z2ldSWgxZ2ldSX57WWI1andRX1p8YU5tQWUjNixKMEc6bUVbeXdWTV9gSk9vWjxILGNpaWxnWTlhdW43''@;'; put 'put ''KVJpd0lYQ3B6OHcqeGRDSVEvJkdnJmQxXTBXL1pnZlhhIT10ISRtTn0weS9OI01RMUdnL3NSSWJRaS9APS5oRFpeOyNeR2lHTmRTPE5fam92JiorOiRxK2xKV2E8TlVGSV5mTGw6bjFWKTspQ1AjNSgyUVhufVdtREptMzxBRm9hJnNDVnNvTmlaVTElTEtqWE1tI3kyd204UHg7dixLRS55NUMo''@;'; put 'put ''bVJRUWUkMTR0fnQraTVmJm0jbFNQe1c3SmtRUFBbV1ooXXRAKS43YFdxLldjJjo2a0s4JDVtSXpMc1IkcFFjYENDSFppRVRuSGU7XnMpaWBvL1JUSyJCMm5XbmF8WnFnWkZKIkxOKD0yLkxGbixkSXt+SVZdPmBxTn5ERF1eW25FJDtsNFZOcT5XQF4vQ3Ngbn16Imxwbzhjdl9FQDVnNE4vcEFx''@;'; put 'put ''OmJgeXdWbkNLdjohUE9tKyJrQE53IzJFSFgkZjF4LjpIJWJ4MHVteCZ7eWs4WSswK1JxazY+cUxtcHxIZTVUbTZ9M1JDRTcvM31VSyUrans8Zl93W0h2WHZfTTRfVSJ3OC9jentePE1PPT9mPlBfdUB5aXdBLG06dndTPDxIeTVsJFE0OCtBcDdnZkdGcylxL1RCN18vTkxKUVhLdDs1bGl7fXZF''@;'; put 'put ''T1B0PzgmWDt0dWpjUExtbysxbTlkU0NRXngvJFFLc3s9VThpWVE2QTBlSjhIc2dEcW9pblg9IzxkRzgsNU47LHlaZjE6ZUpgeGkhTnlzWE1hNzhTOWFhZTtbZFN9YzpAKywwLEBzZmx4PCFFfSN2MCReakxTZCx6UXlSWGMoXSR4Yl5ieUFMLGQ5MFssN2w1aH5kUTZMZTZ1LDVxWjJxMTVjLmx6''@;'; put 'put ''d1ZYMUZ7VW1WekZgRyVSd2V5c051fXY7d0pLVCwxcjI6JkU7X2RfRjYlbThhRF5aflVKKjosc2BKcSUldlJxOl03XUdrLnE9eF4pNXpPaD9hWCFtMlN2UlBrdTJ0IllUIjs8d2FtdURGLiFgIVltVUdnfj4mblNSPjM8c2xwREpLfUZyT1ZpXUF2P2twUDx7P2NQNlNiejJ6Kj5bQj11VSJ4KT9v''@;'; put 'put ''I1piVXpZK1dpQFAkPmlUXl1xZlN5VyRaLGVNV0RqL3lCJn5nUWpETTNLRn1eWnMkVkkhZztPUH15ImNqfllyaC4zKG1XOTlzMXhtYzM7S196cDRES35fSFVgP3R1dTI9TTpHM31YaypLSjwoXnoha0oqOyZLWGkpUmc+aHd7Q0FPPlBrUTRpWWltfU49JGRUKW50XngyW0okOXNMLF8yZz8/ZiFq''@;'; put 'put ''IzIxWUZMOFZNUyl9UGhzQFBqMXo+dVJOe0NnKWxERDt+OlJQMFh1R3F1bnRydVBpPWhVcVVjb3VSTj5pP1c4Mjl1MHs/VzgyN3Uwe3VIaHBie21SZGM3VURqRk0sLCE1VSk6V319R3lIYzJdP3g8L1FTVS9ULm9TYS82ZTtuNjNnWE1yQF1udWdYcUZfU21QOXdIZ2hIeD5CVEtkc1R1JndlL2py''@;'; put 'put ''fCY5KTI4STM5VH55eTBQQGVLQkhCPldFT3VPTkBmTTF6QSsmT3REaX18Mn0hZGROPXVqYTZMM2MuMygoTmw3eUFAfTRrX2pjYCJ2OixrK3tMIjwuYSpHT1RoR0hgKE1hSiw4M3VnSl4qMXU2JGoyU0BJdV4wTTtKWXkmVVcpTTw2c3swSnNFKUw1TiVgOE80bmwraVB8TmhWPzdZTGZtMFVrQHJs''@;'; put 'put ''Ky9WeDx3O2g2ZUwxLHwzM3BackBXTldBT0J1dWpBXkQwdGQvS29td0AxcVQ1O1luMHcmc0Y8N2JSNk1+STJYYjQjfGBUKz04RTgmOjQrWGNXXUkwLFtUIj5MKkRJWC80bTRQekRPTUVQRCoodyE8a1NoW3lQclQrQWVGdz1VbG48aSo7ZS8qckg7fD5xOSlmb21ndUs4JFhRX0V+OkVFVEt4aXRY''@;'; put 'put ''NzFudyp9JHNxdjBvX0ZlKGRPTX1QdS9JWFFUKXI3MntOT2BVO1dIJmw5I2hjSjVsSUw9JD94bXM8OVhUTj8vMXZPRjwldkNLZUg7WCM0Jns4ZkttYloqMHA1cWU8V1A3O28rUlNkYmAyPXZZclg3QHFnQjhZRnpIJlM/aTA7UHBaQ19acHdfNGBbPDEqQ0ZqPzJRV28sN2RRU2dbY1toZnFMXjtv''@;'; put 'put ''fTRFL1YlYSttQSxdZUIhV0VHMHh5OmtmcUpzbH1DY19ld3IkWX1xQFJfVlReYj1iYDJTQG1GNGVHPFBQUVl2OS9Gezh5S3tSKXdlJFROV25MTDA4TkR5alZIZ3kodDQ/MixUUGV6YnwyajNlaXtBP190fVosLEZALlR4KW50OVR7VCxya0Y4NkNYNSMoKXckLGwvey5SL2dfO2sqW0w/ZVN3fTg8''@;'; put 'put ''OixNOnFxb3VXTWBYMEVzJW0sWEF1QFt2V3suPTx9NUZqYnY8e2Vue3w6bDN5WWEhUjY+b2hQRihmOHpuaTNPNj5pL3B5cmZ3MD5sZzs2bG0kNUlzKnhoJWQlWmtLVHxWXVteVTtqekAxKkwqZz5ZKU1vUzVKOW46WSY1X3ZWKlkpMjl2VnFWR0khREYueDwlK2BLSFUrcmNDQ1siOHpBMFBySWhq''@;'; put 'put ''SXRWNHVMNz5tPHQhRGpqNTVMYD05WnFMbGk8alBqXjcxJllJZzhSSUUreHNyYF9HfTUjWC9beGtyWDVac1lRc3BfTUFLfWgjciZJYG41Mk5MbX5aLF9aJF5beyx9cFJJIjJuOklYNEVxSHBmWFk+Y0tKcS8vNCU2Wjd6bjIyQix0NTpHJU4wZnRbWn5XeURaM0dheUUhcmExe0NSQ1BlOipELClG''@;'; put 'put ''KlJ1YltqSUtlSipPLzlfcWYjSUZLYVZtaSt9aWlVVWdLNmVkYTB5VENEQHh0MnNMKyh4cXEkPDxOZWV9KHUwfDNIWEd0WS49Wyh4SXVAYUhSY1AzP0N9fUdoYnh4OXpGR1JjKT1MeVhHOmNAYDFybTchZjp8RzYuZ01KZjVNcGdlekJwM3B2NUkpTmkpWzh7ensoZVVCcT42W3NMMWJoeFlDe1pr''@;'; put 'put ''JmIlOXpicnNmflsjei5xI2xxcHNqfVQhLnkiRzwuIUwqdCRUbCtrWFpzV0tSej9vRzlSalhMSmt3STMmKSJmTGVASDdLNTdEQGFuX2J+bl9hc3ZaQmM+Rzw8NHdpUE4wZSE0XWwpXWZgXkg3Z3xgUDZFdH4sdkdNfX15RnxhJTRQdF1ZbmMjN0luKyh9NTRZVjApNzw8clRVP2JeRiF2NjIhK3R+''@;'; put 'put ''cDc+a1JvTExDdXhFdktgV1pYPSxgaHpHN3NKZ3pqQz40UjR5PXN0QDx+NG41SD1yI1F3UndeZTJ0XnZrKyE5b0x9TlNAZk50ciVeQ3JuYVNaKmJscSlhY3dlYyFNQGs3bmIsKUZnSy9TL1pLdz9oXi9EZStsNjo8U3xaa3BPaUs5I1UpL3clSDpPeS42RlZbJHZiLEkxMEpxTXwxfFVTMSxbUCtW''@;'; put 'put ''XkxDcE1OTlVJe1F6JUx+clRfMVk7L1V9fmYzajJZLiY+O0F+R10oTE5QJGRbM3dpPnR0OiJlKmZkTWw4e1tBTVg/SzZoTGw1PXlYRHpaYTBoMz81XUk6NXpHNHskKyFMImR9WChCZHE9WE5TOU07dCZ5NG9rLCFsMT9aZGF3WzgmdVArI1k3anN9SERxeEBpcUUiXk82MCladlAwSGYxRyZYZ2lH''@;'; put 'put ''QyhTbixiSXs6ODhlJm43Vmo7KXgmLkkhTXxQM0VGMz51PykkL1VKIUplZDVRaSk+KyRjW2N1alQ1Y1F5ZSVSJVA/MGRZM3ttSSNvWFdaciFlSCN4e2klaG9Eb29FbWR2JC4yeTZAPVhaWHoqUlF4fCMjLikhUXx4PnBRND4hLlooYnc+TEI1SG44a0lZMVVJWFAuYHl4K3RaSWordjpVR3pxL3d0''@;'; put 'put ''OyVGW0t4aWIrU2V6VF5rejt1PWJqRDZnZERxTEROO3Ryd0hFQiZgL3xmLnx9azkhUnUzcFIjYyp0ak9ZS002b3BYYEtaIUwxT19wWjxUJFJjQ14vRl5VdmtqUTdYRHovMzN8RChZV2kpUCtkMmRbSD9PWVUmRDBJfGt6Zk93Zj9IIyQuN3BoQms+YyZreFQsOlo/V01LJXdVeiFsOUBVdms1eHwm''@;'; put 'put ''UzA3PltXJjNaOHFDSiVFQWBfaTI5UFZyfnx4bDI5cWZpPHwjVUpqJGBFU3N5O0BvP3heMCF6Nn5xS1cpdU5teiF6NlBWXXVhfD10fnF1U1tEWiZhW1kqMGR0WHwwUSE2e1crUDdfY2lOVnchK2s8PURhSmtlM3A7VTM8d3I6L1g+M1VMbCovbjwlLnhuM24qbEJkZUlNfER4KmYxNUtiOllJVmZA''@;'; put 'put ''K04qczxaS1klTXJsLlE9VTkjaFRSI2xLTjN0QkxhaGhjamZAWjJYXUouV0pZLFosN3BmPyM7XkhYans/JG1YMnF5JmRrLE1kfFolKzU+KzA1YmRYJjVWNm06e2lKd0c6aG86WSIzRz1fP2ZNU01uTTNARE1gfVFUYGJkcmguPlZdY09WelJOUChnfTNrNCVENkUiWEhsQDQlLjdwPSpycyxgJCtt''@;'; put 'put ''UHhmTzZ+cChCLGtrYTh1dUJRRHk7V09Bej5MMT8/Q2A2SjYlK2J7fmBqUWVyMk1SOkR6P0k+QF17NClMLk17X29IW0dtQlVdP3xDO3l3VGVTSHVLbncuMzMyR18oUzIyR2dmN3EvYn06UypgYXs9LEclIXNYflE3JkVhT1ldYDZ1P1BoeUVwJjBUOzd2Sl9oQCpFKWZGcmZpcEBpRiQzXU9uMnpO''@;'; put 'put ''R3JyMzVxJm8jOSg1ODN9eTpNTGI7MVddPlt7LGEraF4uJGNeaFtxPCUuP3RnQGpwPGopXk96TiszdVtDWUVKKz8ub3R8XVlHWC5GRzdMUEo5bmJYXTJ7VCpVQSxNfXVqSH50UU1gJUlsPEkudj04JDxVZGZWOGV1WnFXZTY0dEpwRzJMby40b3l+ZSQ0QFF6JGNVO3w2Oz90bWloeTM7fV1+Smsl''@;'; put 'put ''dmtUZFAoOVdRL1NSJUddV1R6eEZMRCUhYXRxdCVHcmtvJkBqbSlnN0ouUFk1e1ROOCRHOkBNamFlZ0tuXiQyVDxQal0sfXljIUAxVVZkclUyeGo7PGZtTSlSI20zKFthJCUrbXBoPDQ6TWEkdEgxaVJ+L3N5Oy9kTGh1QSwvJXIqOVo9OTRKeW0rcGkkOCNRel49MDM9Y3w8Sih1azJ1ZE4mWG1A''@;'; put 'put ''ait9Q2xxfjRKaEVyNnVjJmdPZ3psMjFMUi5AYkg9IkwrcXU8JW5EMDFzXSskL3MlI10mOCRkIlJLVVF9eVJUSy9YWFV4XVJGRVdlcEVhfilpKX12ZlhoQzVBPDhGJTU/ZyNEe0d3UkEsRmlGeDR2eUV0R3dYTjtuLHJMLnlkWEAsOGkkJmZaUklKZFpyLzlmdCs/dkZbVXYzbTI+LjFYYjtzJnQ4''@;'; put 'put ''a2Z6VEAqO2RbfXd7K2ZVaClsXjk+YXJnPUspOlpLSyZILnJjaCJWT1o7UDxTP2N5O1tLZiRCemEwfXZZZT5bXVRMVWYpaGZdSFA/cnoqTWA2P0lXNGt9aiM/ZSxeUUI3OlIud2xNZiJWUXp0WnptWTQoXV5fRlFQcEV+bGJtKyNvL1dlI0s4MExzeU9iZmojOGlDS34lKHkzNmQycmxxfl9Rei9u''@;'; put 'put ''MHs7c3o5IVl1ZU5nRi4rWW0rL2ZIYTVCO04pZDdXe3w2WjNsPGdmcXQmXSNJRFpKdWNyQU03aS9mIzp5P1JbQjJWPWVmTT1+WiMySkRtWChlIWdTXzFEJj1xcEF7UTp9UjAiaEdCQDRNdG9hNFRSckJJRi5+P0FKa1lXUGRjSlcmO2g5SUxbaVkmNUk1Ump5R3JYRltLUF9iPjhsKiN+YmA+bD5X''@;'; put 'put ''LHdWdyRbM1QxT0ZnTjsqMWc7Uy4xW1Y+W148fT5mR2MrJlQ2VmdWPls3VXosJVgzLCNFdmd0aiNWb2V1Xm9vSig9dDpjVjsubyZbYz5VTihsdnhLfDl6amIkSS4xYE5YJnw8MzUzM1M+OTQuKEtLbD03M2pAfWgvZmIlUTUkL0JIMnYrOSE0RFNdZy4xJSluKlc0VWsoZmVTVjpJN3cyflphO2V5''@;'; put 'put ''eGcjd1F2KzkoSmhlQDBscGEoLGxQYHNFYFZ3aVdkT1N8bX0/amF9ejJwIk57LFtoemJXVSNXdXR1NjxWQGpxTCpXfTpXXXZHKVJURkJiWF0maXpvNWRtZSErcUgueXxnQEpqentabSRBbyFoJVpVeDx9LjVsKDR3YU1gS1FsdllFMzBIbjgmS0tsamNwViNaJVtkKisqRFAoXyEvbDU8ZkQlfW1h''@;'; put 'put ''TTF3cDkvNS88Ikl7eXNLTFdGTEpMYG9ncjE9Q29IME9oVEliVmYvW2c3SnczMFlxNHpvYmJneFtWVy4hcklZU3c0MFR7T09mTmZOUnY/ZnxoPzxDbXVSSjVaOjdaQnRuMEc2Y0lMQjBqM1ZLPEduKCYmeSkqM1Y1WFM9MyF0RUshaXJIRzAkWTwxTmIjTytsNS9ZWGlBO1I2THoqIjF0ZkI0RUBb''@;'; put 'put ''OksxdWkjNHo0MGApRjZfOGJiUysoUFhuUit5TWMuVy9yVTk3dyNnclAjWjlHSyJCXXI4UHRZcVlfaXo2LG00I3paMTxVUDchX3c7KzxpNEs/Y3kzbWVOaDh0L1J3bD93eXEwO2BnUytlNlorU2A4dls/aS9LeGR4VnptR2RaKntMNWRTSnVOJEsiU2hzRT5tNmVWTi99Iks5b3JWUlolZFBYeGk3''@;'; put 'put ''N0d5e2o3MEgkT2hMa3ErdWJSVF1YODphVkQ5LE5MKSwxfkBIbGkpPVY2KTosQ11CYElMO14xZkF1Q3hmYV1IInJfd0RiN3BFMSMjInVqRExLSCsoWnFWckJiLl15flskWSlaV0grMUcrUTpfbWQ2Vmg6QjtNVlFzS0RKYmNHRz55STpecVJ4JVtPek96I3FteHMmVkhaPF9tMkJybzNYIi5UUCwp''@;'; put 'put ''NGdtRz9gOCsrPDlaXz1eWkkqM3RmaiUvNmtqK1A9IXFZUVNIblM6MSRwZGR+cWNPWElPSS9yJSFnbFIhPShAS0x3UFQ/bE1kVTtkcCYuVWRAaSs0X1ZQXmJibUZ3MzAxJFs3YC8kSGFHeEZrYUdVSSJgSUtXVTRiLFt2JixrNilQQlNGQCVCaChwPFhVeEREV1VIU2BTP31gTmEkXnQvW1Y8eC9t''@;'; put 'put ''YGdlSVlxQmBIbyU6VE9OLE99elNkS302RyVjcTQyWFhkJS9FQSMoUk5DIntFMVA3bkZgKkJVOXZzVUFvIltoZyE5dHRML2EvST1pY0VRQUFBQUFBQWdBQUFeVTQsPndLOjVITE1MdDJJKTJgMXRqTHtpdlVmKGFEWSxiIjRkLyl5Tm4yKHpHb2hYZEgrbSJJMX5ya1dKYkkzOlNARGpgWTNDNHNf''@;'; put 'put ''SzdbO0wkem8wWzAxJkBoKTJ+KFh6dSFbQzN6SHRFLHAqYl5XS1NMWTYqbmBlKnoyd0poc0JGdzQ2SSFUIT59S0U0VGVoMyZsQy4xPEwmXnc0ejdoWTVFLHlYMTx8bXB9REM4cDB7LzlraXJpN0E8QDhAMV4lNlZ7MXY2e15oM0l8I2gwe0YhUmorYDgkaSZiVT9AL0NidmA4I1NZVCVeQWtdNWBd''@;'; put 'put ''WlE1SzhUYHtpWC8xMiVMbCQyakpddEpgcz5FbEAjWkY2ZW5mRSxMWGdDeGZmKW9rUSUrd1UhJlNFVVg8bU17ZjheLFo0aFFIVFRrMGdkQiV2OnN3fUtRK2s3akRDJjlscChFZytGRWZAUURjWGk5akR5emlUL3R9d1d0NW1vJnp5IyYyJU5UIiZyJTl2I1c6dFNleFt8Ok1jWkxjbzBvNHdoUTo3''@;'; put 'put ''IUFGZypMWGs2bEM0U1lDRldWUlgjSzslTGNVbyFxdE9rZE1kRkNdJF1FNnM1W01aU2Y1MVBKWm0/NSowdFI5PFtGMSpAPERybTVVcWY1cXN0NSxkXXJoYz9CaGxrTmpYe3oxPH0pZUI2IX4vYXd9dl55XUpsbn5IMnNaNU5QUjtrZipmNm9TVDx5Mnt7RW9gPCZbJEU0SlA/VzYuTFtER058RjM9''@;'; put 'put ''QDkvMHQqQyV6KmIpTjBFOylJeT1qaV9KJEJ1MEtpdihEYnA1N2Q9PEJEUVd5N2FVJmcqZUh4IlhSI1lDWmkjbEIyMjVFI3xKKlMlOzcsMXxKLCw6c1B4Imp+RUVrOlI8MDtzMG9xcVl4XTBqZ2hOdWIhUipOSGlAMXprMyVvQkJLQmVLP2IsMlRXbjF1Y2BCIX4lRihjT11lXmd6OCM2cWUxUERE''@;'; put 'put ''KlckaFZQeXQ3fDB9Q2kvK3U6X0F+eik8Jms3JiNPVCpTNTpAZjA2N29ZNSkzRnFdSVAuQjszXl1uXUFzNTt0MHBMUHlmZSVnIT02SSwpYXloWnlTdX5xOTl4YCY7VHJTWVo7NVlSfTJnVURUNS9mU3oqeFJrOi9ybmhSODxYIUA8JWxwVHhyS3RZVz9YclssZH1lfjUyQEVVYVg5fmBYa31SR1lX''@;'; put 'put ''cDQzTWUvQXkoXyZpQ0VOLnExLGtwckVqNjM5fmVuVHE5VGBXaW98MTtqIl5ZSX5fazAyazcoMk1pSldpbU1eQ0YwS3JuREBYKiFrdmNtaGE7R3xzeCpwa28sdmF4XiNbNGNyRkxWU1dPNDdjPmJjYjJfJndXUDpGI2MibTdYZHpLOWVLLzd1UCRHRU5QWEA6UUlwKFdVbEI4ZyE6U2F0K2JQezQ4''@;'; put 'put ''bUdqV0NsQjgwZUBJRzx1M0h4OTBPXzZePDpNOisqUTEwVl9RQEpnezdKWDdmeDV+VENbTEYlOkl3KGdPZU8kMShKSUV+YWN0Zig0NzpNSFdMNUBiMFtkKl5qXyxmbTJSRF1ZLClYXzVJUUF4NEBOe35DJjZJKENsIzR5aTZaUiEiITxMRDYoN1g5Zj1rS0Y7dS9kezI9OWAiJSo5WGpeanoxbi9u''@;'; put 'put ''LHM9fCVlNjY7KmgwXSsrd3VNI2t0PUwkRU5KS1pZNmtUL25sL3chQW9wfVs4JEx6cmE2ZS9IVXRyYCZIdy9FSixRP3khS2BIezdbe2hVX0FBRDt1NWFbTEU1OCw0RCZFT05gX1EmN3ciLmQ6PiphYWVmdlUoNWwlKDFrKntScixCK1pXdkNsL0I6I3RScFV+TU9KKyFoaTReZWAmIW1RaD0/SFR0''@;'; put 'put ''RGF0RVNsIXVGOmt4aTVyYldRR0pGZDc7LGk5TGdIazp6Vnl8e1BSIXhLUjphd1l7K1hKP01EOGE8XiN9XkY6UiF9MltoMGlIP3Nmdj0rSD9WdVooSUpWSj9CI0osKU97YVBvWE9TTyliKkpNYUM/N3Z0T09AZmJMfSl0c3dCMS9HdVVzSWV8fHZPWkYoYH55YDo/MFBhSD5ZJnA8XVpFSXFyaFtz''@;'; put 'put ''NXhWPDB9aHsqW0FPWTJsd1d0X2Q5M15UVHgxIzRNeipxa3FkSWVEaXBpXn03OCFlalZSYFZoeVBZUTtaZkF3O1tHQ3VkTypraC4vVl1GPHFDQjVwa0ooaD1eSis1VyNpRj8vJSQ+QlAuYXpNe0xIXnwse3t8UHVzTS9qJjZKellvLHwsd30kQjFhSXk8XUg1YXo0aDElWUdlK3pganc4JjdARXBP''@;'; put 'put ''ditEbCojNSw9ZzE8YD1NdiwoL1BSRWg8IUJFUT03QHh3S2w/Mlk0cE4jZTU7bXp2eSRBdWVRMV1xL1lvYCo6VjRuKVteUlolOU5yJjRYWHBwVjcpRSE4PG5obF8iSFJwVCRTUmBHS1BbSmxnKn1tKFdYLiEpJlhULjd2bVJFTGhgR1g1alIyY3ZJQ215blJMR3k/I2NmTUVtVH0ucztjI3Bdc0Yj''@;'; put 'put ''d2F3fCQiWihLdCM0RCpKKE49XndzJVZHNnI2WnBVZD9TTThdPmhHV0tsV2B4cV89WC8+Pm1nVCEmYHYlPX5CfF1mKkw7I1dMREZ6PypxWlkrJk17WVomLmxfWFB6Y0MpSWJrekxSVkdbRCxuWW9jXiM/KzB6PFsjWHpuUVhDRikob1BVTUlpRj07Sk4sOm56cXM9fHc1RUhMLlcycCRJS21lKmk5''@;'; put 'put ''TlljRV5yIXlgKTdOWWNuPUVpKWFMLH1DUE45Lm1qQ31HQyM1WHB2fm07Zks6LzIsQ1peIkFWTWE1Zkdna1UseUxGKFBBQUBHIlpbJWw1TE88V1lXeGciVnl4SCZ9KiI/cDNaQWk3fGlpYXFfWSVIUSNUIncrfE8rU3JWNllTVFVFNU9VMT0jIzs+dkV3Qk8hZEtvZD1wVTdgPXgjSj4zbWFXJSxI''@;'; put 'put ''LF88OzNVRjZDW1FaITlKOXQ1PFFgIzdbdTZzXiZNLjRDe3gzSjZXeWkjVzJVYVEiR2Jiaj9aUFQoPH5QW35FT0AibDNTQy84RX5sSG0zI20hV1MiJGRYdUUqeCs1NWtRMkBJfSYlNU5EeG5tUUVEVntzU2VyfFU7JiFXTEduPWhtbXpFU0VyRnZueXYrc0tbQFk0YShKJGJyPyVnX0NXKTBfW0ZW''@;'; put 'put ''LkxPZypddmVYUkE4PzYxRnR2UHd3Pz1QO1VxTypUVF18PGQyTltiOSRfLE5Xa2dnUTBuNiJFOW4hSiJYSkc+T0dzc2Y+K3N6SF51MisyTH1wZ1NPLllAfj5GeUZwQ1Y6I3spV10lXTwoeys1Wl8yTiMvQW9wYH0hbD55Wjc4Pz1QOXh9YyRtQTYocTNscllqKyZPQyVYTXwqRnFScWYhfXdTajt9''@;'; put 'put ''I1lMSDYlSCFuRllJdyxFNkc1RmBiejsvIWkhTXRpQGYvdjl7Pm9FJCtLNVl6R29BK2lEPy8wWXxHRzJgXmZ7ZFhfNDpTbGV1Q29wbThNSTtJMEIuckQ4S35lNH1oMUx+VXxkSCVoTmB7VV8pVjNyODFsfG9nOmU8VzJvYUIkYUtzJjh0O1g9JUQ7Sy5bZS4kZCZnWmtfRmhPaTtLcEwscCN+cnw/''@;'; put 'put ''Ql8jciU+dTEiNE1CclVgPndkTUlaIlp2aVM+WEIhPD1zU2k8RncmbCQyRlBJWV9ZTDwmR2B5LkcxPSExIjQoQ25rOnVAaT4/cVo2TkJtX0BtKXdZMDhuO0IqaTg7OHI8fHklRFFAPXRwJDN1M0VUWzhgX15Ze3ladS9uM2d7TCZmenhzOW9wKWo5PmluXnYzN3Y/R2dhLHl7PiZyLDNUXVFRVjd6''@;'; put 'put ''Yj4hNGNtYHI7b0I/JVlgRUFralgwe2gsbXkqUDwqOWNxfU8vXUE3fUVRZmwzTnFvPHtYZWF4ZUYvSSRSSFUkaz94SmBwMzEkWDk5XyQqfFZvNCw+JEtIPFhQT2M/RXh9b1R4MUozVzVoOC9me05RL3h0OEpQISMhOV0+UTszPlQjOzA+fUdzSzM0SC9lbC5PVjRxZmAjeEZuJWBeMXhdWilzTUJq''@;'; put 'put ''JCNMWU94RXxuOTluJSg5entFPCYlYnNURiEuKi9mL0h6WWFjL2goMD9Rdk1RLCVsKGM4MVJFaHpyISxidE89VHl2SE4wI0lpWTQlMnc6VTQhMy9VLFdMdCtNQEd9SCt9WnFMazUxPDNrTDZDa3x9V3ZJejptLyg2cHFjY1FwXmVuaXpqdSRjRUJGP3A0Y29fKGF+fWdWcm5XNUs3ITlwKGo/KGdb''@;'; put 'put ''W2JJLiIwRXUzQ3s/I35GYkt4fVk5MmZGeXRjRT98ZChhJEVNMXJdXkZXJmV5K3FpaH17aXwpdD5qY0pUfTl9fVdZcn1pMDZHaCp8dlJJeCxiIl9GfS5TS01fLHcsQ3I6MURwKjxMJlVsbC94PDY3Ry9dUCxvQ3l7ZUJHPm8+KWdWKHZoQWNLRHA4Q1RPP30wKnIwXm02OzFKM0lEJVI0QFdacmND''@;'; put 'put ''eih4eT4ubjI3cmBaZ00pTVpgci82ejpkWzM6Oj5PSjRUM0UlXkNrQV1rbCZfMT8xYzFWXmV3Tkh9eUtISXYvRmtUKlcoTykmJHFeUl5ZUnZPY2wlZUUoMmY7Nn5GaEVtcTNfNVZIcmxobCR3cH5AKzQsRGdZbE9JJVEpSDhyclR2OUkyZm1pYSt8aT9kXyx0SSVqJWo/IURxNzosel9dMzxVMkBb''@;'; put 'put ''PXJRQUdNTzMhJT1tbCNCRkNOR1YwfkFAOX0qSzxGQTRVMmFvMzwlZVB0YUVVfEE8d2dzZngzQkduOyRfRWVUMStSTTE1SmtDbCREO0E3MiYwZT5PWyFwailsO30ldjdXKlphWEA+Y1t+bmlzbk8qT1MzcWNXJD8jdmlGMXZYTHAmcHRtfWEsI0orNDBIOnhlVSllZll1cntqbHo4eiR8bFFqRSI8''@;'; put 'put ''UDl8O2xlb0FwYiNPXihleCV5RWVUaFdtbFQpXTU1RnM+UjAqJi8xampHeFIzYm1jbmJVRFlYRm8pNkt9Z1VYcFNEOl1aQzw5JV4lLH0hWFQwIVNVfFlPMk1SJXJFRz9TOUovS311QnRdNWtsfls9Q3lHI2dGNm9CQTohdmBreDs1cDheMWRRSWhUR1U9TFpqLm0kVGFfP09bUkVkPGp4OEk3JXhZ''@;'; put 'put ''KkF5SDdBeWh+MkJJMiNxcFdRMnBQOjdPdHNMUzVmUT42Ri5CQ3k8N3I+SlElLmVfYisib25KRERGPXV3YTdGVWEyTjNgNThAMmZKaWw7bCpnb1VxI3QrW1VlQD48aHFwOWtMQSxDTTRuVmdmJltMXVouVk9pbUFDTyI0dlNXOCxwKz04R217XXpQWUJqRS8uIXIiMWgpIVh4ezVLZzBifU86Z3J0''@;'; put 'put ''MU5lSW8wX1pkLCZ3ajZ+Zz1ZJXwlMXFLKyFPS3JHTGshP150QUVkZztfcDt1fCJmdVgsZEAhJGFiRH5MUTR+bnp6SDBgNnshX1FeOGNWbUoqUFQpXz9ZfHVAWCs2MFU/azVYSmFZdlE6Rlgzc19bcG82blViKnA3dVE0UWQ9VXQibUprInhWbU03K1IwNVJIUFN9am0ufF1FQ1pQPjUvfDhJPWZF''@;'; put 'put ''Nj1sQk5hPmJFX2E2WihZTVtyPCRwMVJeRV9rZTZWcmkxKzVwLHRSJnwlTTVNJjFbbkRDcCYkP0xvfC8mMTFTPUhIRyRtMz5acWVENUt4RCNLUzxtPWJyQngiVzw1fC9odEcvIiZARWhPen5gNEREa1p2V2Z6Xl5TPWReK3tJRURSST09ckR7LGhdeS57eWEjRV9qPTpDfmdIQT9uZz9XcFN2bntA''@;'; put 'put ''bDx9dEx7YjFmSGs0T119VlJ8N2oway5mKmlCbzRfMjdqeXJMY18uNXQ5blNyVTQxK0l9eFZLdzVGaE0kcDl9VlRAaVtoRkZ3YV1AM1BKLlpka1U2NDR0P3RYbGtqUjg/bypkQlA2S0g4JkNwbmQoSExqa2o2b05HWFljNm0lbF9oOTlzVSIrY0dEOkBGMXUwKGIxaFZ7OEM4WzlWWk9hRWRiYXMu''@;'; put 'put ''Qil2Z0wkYS86PjNeVCNINDB6fGUvMjRreThmIylJT1ExeGw+MyQ0OUpnXiw1ITJAKW1oZnBMK2dhO21HJU5yXSN3Ikd6YUpkOypASnY4NTdYJHZiJklnNlhPZ1Urd2JLO1IzSWxdaURkISQlUEU0KklneFluSGdPQCFQaT18ekJQJHdAR3xmYDhrfVghYjIqZnZsdzdJdDtbQSFrSCFzNmQ/dUl0''@;'; put 'put ''R0RESGZdc1RtMHFvNnZxO0o5WG13RlE6NHRRb3V7WitMVjZDLFNONU9pUXdiKzNvI2NwNWVbJmclNkwqNkxvNHZtZnMoKyFFcDo9ITVHeU57KSlhXVZRdkhAZ3BNYl1NdXl5WEJxZHxuPXR7T04+emdnZiMiVzZmaS5qR1Ihe1skJDBVM2RqS19zem5ifkdSRyZbUksvdHwqQmtDNkZ8KlUhQyN4''@;'; put 'put ''Syg/U0NbNkklSiVdInh0WmlDV2BHISE4SU5SdnZUfEJELzBrZmAqQGFJKTVxL0xMQF54cDFYVV9CZFppN2ZvNDY3eCJdNltHZ2NAREVaM2ZDP3tTJFFENTNaPDVmbmZEZy4jSkcybClNbkBePiN1OSlGXmJjXXsidytLaSQ1X2VddF81LGB+elpAO2FvSjVxZ15AMCVMN3lnemdjLFtKcitnOW9P''@;'; put 'put ''VEJYaUZ6XTRwMU42ekwjWndkPj83PCRCS2kvflBiNz91Lls4bnFPPiw8SzlCLCkxPkdmcW07Li87cmJLfSZ2bnVGO25AWnIvMkwqT1p4Xmp6dlRJKnFxRERnTHIiTkslKTJgQjJlVGEkQE9LXnVqXXcse044bnIoQHsvVDRdUTpdbzx5bXR2UXZsOUhTNz9FaFcpMisucTY9XVpiO0R6XWZEN0pH''@;'; put 'put ''W3g0aD8xN0QwLkNBJHEuVCppeyhtL2cyQnRmbkoyVU08fn1XWkQoK2oyPnhhWS9RdXNlOWMialUyKGZePyV1T2M4fDIsbStrVTxRaEpWS11PVmVEN3V7OUhCTUM7JnxnYSxaaFlBYXhod0Q4dFpOZWwsa01sLzciZ1hDU1JfdDR5XUxkfWxzej9Jd2gvOkk5KXtUbFlzIUYpLFE7SmxVUUpKYk53''@;'; put 'put ''fSEya2kuLzB5IiVrMytydWBIOzJ3OjpsQ31eWUgsfDJzNGJ5PVpgcyRbRHNeVklBaXR9bUE1OjVUYkhTOEY4ZiY8Rm19V0RrMipDamtZVVhzWUZ4RlVQVywyRi5kVlBpY1lSNXtZLktuIiZqUSZBMylrYHcra0RCV3tLM3IyRSg6QmhYcWlgSj56IkthRVVIMj8ieSxMUmB5Zns/OltZc1lOW0A3''@;'; put 'put ''dkFkeDBMWCJ1SChfSkNieSEwYFp4SjpgUUtqfVErZ3V4RXRSei86STV1YE9JOG85VUVDLFJAcWRbIktyWUg9c0J1akN9IkFtTCxwPkh+ViJsUWhiUH00ISN8MTY9cVB0Uz97Mj0lWE1QbilYVShjT1NJXTZvaH1GLE1sSl0qPyM9LHRbd0pjb2AxdX01LGFbcFhXakRvbXJGSlE2MW5kPzpfQDpe''@;'; put 'put ''MmRpWyg+K2pwcXwvMzlebGlkVCxZJEkkP0tgV28ufEY+PXhLVGdZVjRncUclfHAhYG9YVnkhIkF7IzJleX5kTXQofWxjVlo2SiMlQzUmbXMyOH1ANDdCSl1SaUx2PCRmS2phMFg+OH0yZVRsXTpJKTB1VlFnPDBKd1dJSHFxI0ojfj9PaWY0WTIweGhPc0U9OTVrNFRldzcpNjVXQCMjJVtxL2RX''@;'; put 'put ''TUloQ0tmYWlPVzYuRVhkNnEydGpZZ2E3U2NLYyxPWlNXZEJAKSw4Zi5MKDxGMTBrKjZ4LFRHJD82N2J9Q0wmfVF3ei88I1o6QG1TQix8UV1aRnlfYz9PPWRmNj5bU0swb0FBTkUiPnAxJncyfSJsKm0oMGFzWkVXaDZdP3JSdCU0T04hW3xxKWxCTWVKNC4rLCZNPDt3RCR4IkUqTy81KzxRbGFG''@;'; put 'put ''QWRtMD9ZUl10KDF3WXh3fC53YntvfDxbPnROUVh3IzY/QiJJXSZLOjZre1JSQUxYIVooaUhufVBhTmwyVyNYQG4reEo4QypNRU8+NGc3YildNntmNHdLfDhAYDQkeSwkQzchW1ojOG4iOVd0VlBEUzxOU1NqMCNxdU9NIUxJQFZgeUhyWyRMS3pYUUx+VjUyJkwzNi83fVAqR1BeRTpsJX5nLi4j''@;'; put 'put ''RS9IYzprYFswQHdSUkI0Tmw5MW9UPntMR1hMQEk3eGluVDtjWyMiM1Q+SnhmRmxIaVNKL2BbXkw5IldiQEprTVZNODZ4c2A2MSFZWm1fP352PGsjdn1WRmJvQTB1a0pgUWVsQ1N4L1MsXW9iVFFkVWYqMDJbPWZXUFlXZTRgTlp0OFJLSFgoajcxdj5QRzJodW9teTxwQ0kzK3ptTD1DP09LTWhV''@;'; put 'put ''SjF3KEt8cVB5eV98MVFqR09aMmEqcX1bbF90RTBka0w1N15XOWRmWTROe1Z2cEg2blY+Jl1AbjIjKS9NWmtaLlgrPjQmSD5YLENfQFVOSG9SW2VdaCNrNzJBZDAkZjY9KDl+XS5MYHshSDgjPHtvalpQW1c5PDsuNihXb3I+dV9KaHRzRjxWdGZValhtZEVyWSR3Ll9rMXx4d0J4bDpSR1ZXXlhk''@;'; put 'put ''WSpsNWNhfnoudnBPcnxPK3tOciJYKkxVO24jWkQ3Ly9uZnNHRlJoVmBzfWhSM0dGekJKIUxhK0ZpQXVBPnAuPEc7YyRJM2xXUHZsfipAI1AqeiQyLnkyU240TXhZZER3MSRANkRCektLQTIpYXtIM3daK2VqYjBmUkAkKTNdalUmc2JCa3JjZ3I2fTYqb0UxP0EjN2JTLkd0P3MxTFlqP3opL1pB''@;'; put 'put ''c31gOypkR19TP3IjJXFpcDk3YGpSYlBCQ0w1OmZDR2ttJGpKP2dVSTVkdm1RK246OEd9cWQqIyt6ZFJ3SzBtKWY3YikqMHh+VlYhZXtRLiFYeX55WjImIWJxS2VrUURJeytQV0BbZT86JnkwRl4sJXo2T2FvbTgsYGV+fHJ3TlAlRnUvS3ZiMUo3R10xUjgjQTtZMHdoTFg9dmNLd2g9Y3NCPkVP''@;'; put 'put ''KU5RTihfXk5wOktNRGFJN1JgK3c4P2M7R3dFKm9FN100d24xeFcxZWtmYCQ0NXc+IUFDZXVtX25NZHNHL19pUHdUZjg3KloyUG0ifjZhaHwpI2VMdF1KWy8iXl1Qa3JXJGlubmtfQ3RrLz1EZF9HWyJbeGwzSXhLMTprZ0gjcDVAd1lnekU9SjBFPjxfRTZfLF8vajhmTlN8bUpoUVRsYlhHdkVI''@;'; put 'put ''R09leWA+MEgvWjQ2NG9INjRpQEkveSwkR25uTU5IPFU6YTZjYVV6aSpJPksuKiFJfTRILz1Idz5aRiJ0JnU9U1BET24xOFBGPS9gNU9rVk07dlBHKXdofmohX0hAc182MU98W0hMS3Z+RHYmMiJfImNRcXw5V0h9RH5WSGN5fDBbTlVRY3UyWyJZPkBKWXhCP2xGPi5wbllJJnp7fD9FIXh7QHhn''@;'; put 'put ''bTZTMWAxYiI1Q0VxR2hhZCUoV2s1a1ZXdk5KbnpVcl83PTBYTlsxMmkiP2o/fipYY09LeVZ3JCh8JE1NW1FJZ0VTJHYwe2heQC5MQGFHRXVyOjkyKmY5PSlxdDhTJmN3TnV4MyJ7UXhhZkZgK1Y0IllMUDNpfFcuTk8pei5Qa3hORWtPUVM0VEtMN141Yzo7IWAvcUhkS2x3eTUiPlIxPkU1KG8r''@;'; put 'put ''cXg1eUB2e3k2MUJQaE1BdWI2QD5yIVopYkl0R0UwelV2OVFKKVFLe3FWbGdiXjImISltQSFUVndISjBZfSF9QyQ+VTI3cFV3WGMrZEVVQ2tEZTlXTD9AUj90bj4oWCQubEZOTyx7c2tlNSJrL0Y1bCR1JkduQjFqVHZxXzgyJUVfOmFESEsrPCE/VkN7algzQCE8YlhoVjhyZkF6fjd+Qypfdngl''@;'; put 'put ''bXg6Z0R6NSJmUXNCZWRpa15RLDNdTTBhNlRjR0Ulc1NrbTdIeEcvOVtVTX41clA1JHh1ZU1FRDw6KV1adjM6XndgaC9FMC9oN0FPbyRjNDVIeWlrcTBheVoqQl9RUDlecXk4NytNVVlrQE0rQjFVfnhdV1FsWF5PenBUfCx0eXA2WlNjY0FTc1JQPyouOzI+cSJYcmxST0JJdUR8Tl9NLDhdLzNW''@;'; put 'put ''VDVILzZuanssNzk5bENYMHZ3SU86R1FLUTspUls1XUZeSzBQVzh5NFZlbUZRPjF6dkplSm1nezpsOUJUPkV0QmZyfSh5QFBCJVlkbFUpYi9MOzNaPUAudD0sNnRLMHZvfixLKmcxZE08X10/T14rQjN3QlAqWyQiQ3Q1cil3Y2dMaVpsQGxKSGtgL2ZgNCxJPyxlQSolejo3VEJPa29JVkIlcEpV''@;'; put 'put ''cC53Ym9GOmF0WGZrUC47b3Q1Rzx5el0lIltGQz51dFpwV3ZMLFFBVismPnhLPVdGRHtJIj1EfGV9IlpDXSIwbl1dWyZCNSp+K1NQZW9Ed2gveG9tNnclb0w2O15vJiJ4WkQqZD5JSDRmaE5rXiJ8VHJuckppMCRWKHpaUTdpXndlRldKZzBba143bVA1VH11Nk5heW5YUyk2ZHM7VHokfmhNWWsp''@;'; put 'put ''bHVyaFErJTkhUTdjPzBnVClnfGQxQ3dzRnYiRGdHTEFLMT5JTG0xLikiP3FEa1NYOjZXMSE3Ti9jL15jIX17WjRVdDk5ZHc3RG5ON0glUSZBflJTPltTdTlaSjFwUjV6RmJQO0B7e3lKVzhbamhKPjZ6fWYxbkFLJjx3JFZhRWosb2k8Z20wMD5KX3c6RygyX31LUEsofGMpdD9JJC9sbWYre3xF''@;'; put 'put ''Kjt4InVZdmAjb31hcTlUQl54YUVNfHFqKUdEMlReeSFZKk0sVVlXNXEhejxrSyJvL0Y4amdQRiEmd0A5eyUvYVA+c1tjSik7XjROTGA2PkhyWXB2aUdsZytHO0V+KjtXeDE+MFQjVm5pKTt7THp2TCF5T2UkaigwI14qK3pBWn5RXzMrTE95NTledWxQdixvOk9ySW4/ZGw8aWNaelJfW1BOJUhk''@;'; put 'put ''d0AqTUMyVE05fV1iT2ZPVVRALiYvbjdjbVYwelc7eX1aWnFuOCtkZXVMfjk3OD9ELiNRNF0/SU0xPDMpRl8qKDI5Z0VyJSwkZl1rYGE7SU1NIldfYiNyb3JfKkpbS2FLRkp7SlFMPEJ5dUp7RipFPihgQ0V3KmdgcUpQR0pDY3J8LixfcD9zSCtdUCpmemZSMC4lIVU7PmMlRzV8aCx4NlQhcEpo''@;'; put 'put ''V0smNGFqZ3JjW3hiL3Zwcz89fnphbDBIR0k8TmtQPUtPb0JeQntTbHd7PlsvSHZ2bnAkLk5qJixTb2dmaW8vWEY5b1pDS0xHbE9sWypvOXZtYnpxcC5tLFRHM0trRk5ffGtDenVXZ2VfTDRiMUkxMSZ3c3BPV3A6KVlhaW8+QWd5RXc2Yl1BZTVdWWM4blQ4LnJ5Vm9FSVZbcDxJTGo1L115cldL''@;'; put 'put ''TEBYMDdNUlJoP3s1MiV+elN9RXZESGRLIVEqWkd9Nj0vdTAqJSkiO1RPa101fm1JbH1hb2BXbl5jTTteV2pQZHhHYGEjQSshJTddfH0xYVlqYCFOWXZ7M1EubSthP2Jkfl5kSF1ROnkifHNAPUh8KXFzKyFkYlg4fmNQfjhiNyhzU2FIYnNmYStsLD5+S0RHQj4xVTxGTnV4dz4sLDRLLHNyU2wv''@;'; put 'put ''OTF1YE52N20wQTtBWnozX3BGenlRX1VCN31KWStFKW0+REBAdUFpb0NZanVAcXlHK11fNHhgNk49QkxhRlttREU8WEMjSmhlIy5aRy9VJFFMKyJyRlE1T04/NTdSK3t+MkBCOU1fRWVeSTU6QiJQZiZiTml7STA+fU5jMDdLQiRNdnU3NnxUT0czRTJ+PWZFPkg3X154W04vbEYhVnA5S0RGPzxg''@;'; put 'put ''KGtNS0QkZ3RYVmNOV1o1MVlRQzxRcjxPMSxPXTpGIm40cDhbYHE2ImpUOEkheEU0Z01xR1BXR1JzVU14O0kkRlFzaWokUDtZeWRkJX1Jezh2fWpMd2xKSGc+bH16ZClgTHlhaFoyJE1waWw6NHNxTm5XLih0ME17OTlPb1E0cHR7UiUrPzpoRyVCXkVpZnxFMDovKihjRXVodyZWRTVMXXd4N3li''@;'; put 'put ''KGhtTEJVOVRQTVFGY3g4cz49KlJsd1guYX03Y0xiN2dNITVRbW5zUGxoOjtCKyM7R354QTxqLmE1dUFjNjksTDl6eWJ2Jjd3dWIvLntGej9UOFd3Tz1WQVBPVjpFVGpia0AhZT9JWGB1ISJvKUA2Ol0hT3I8Y1RZOD48Tyo1fXtRaT5LM1g+Sy4yKFNWTV0heik4cDwsOWEuUUkoZUw/Z0MoW2k9''@;'; put 'put ''VUY7O1B3QkE+IT1hS1Zoen1nPDclbVk+eGxYTEY4Z3woV2U3T3RYIj9GSjdFNCMhQzludWZWckIvPWRhNWVCaXBQSk0sMGlFUjcxPTR3TE5eL2s6XV1pbEhRcnUpaGgoUUJ4NUlTLm58fXt6diJKYmlaTSZkazpBI3hAS1ByYGs1Uko2U05LcixIXjtPd2ZLaEp+ViwkdV1ucTxtPnhJIktOPUUz''@;'; put 'put ''PWlaNH0yMzU5YTA5bWV3Pj5VbmZjLE9SSTIwS1tXflpzRmdASDZrei4iajtdT1hYTGZYL1c5ZT9iR3AqJTgvUGI/Rlg2S2ohOzMxNVkjW1diamYwKDBUY2YiQkBfbmthcWpkJH1XQnlkSzNSIy86VGlWRERmVzk+JUtbVkVZe25oL1Z6WHRUQD9daSIkUDl1M0BiNGskMF5KMlo5aGdlIi5jIkAr''@;'; put 'put ''L2ZMbzQufi4sRkZOMntiMmkqXXF2L2khZEVIP19fJWJJZ0A+USxedVI1IypecWRZfXFZLDouJjBWI014TzZ4RF5eKV81IU1mXXBrckBZUFRafT9wU3x6JWpiPT1vMkJzJCpOZ0tZUWg2ODtYbWRuMSJqYihibGMoeExoQ0EvY3ZKX3lodEIqT3Y9fG0lamErSl0zL3NgY3pnYjpMOUd9RmFEfkBU''@;'; put 'put ''KFBxTllpKGpfK3d0JmtLL0QiOTNdLnZSPV18ISRfeithNT96eltIUC9rV0dHe1ZrYGZ2QihUdmE1e25YKSh5R2A5eWt2RS42UltWZyFqbXZSI2Y1PXY7bnA3SlRRPS8/TEo0VlpyZzlGbzMyNlk+VFgxd35pW0p6MkcrfWlJdylXbXVEWGZhJGZHWFElPS4qamlbdW1sakB1Jnw7Yjd4T1gsZ2Jz''@;'; put 'put ''SzxmZV5RUnRteldkOTFSZFY0QyRHbGJGc1UjTTBBSihLd2xnWkB+W1UwWC5ybWkqOnQpWVV3bFQyam1panBuKHtWa0Z4PVFlUTliWU1MeEF5PTxMLE5DbEJWRUg4WCFoU2NTOnRnU3hJOSwzQm4uLkNJWnojI2JOLHVvdVBdV1hCaXlDW3VWZXU6eGdOWzEmWzh1P25sY35SNVIsNykjKGZ+Kk9E''@;'; put 'put ''TnJofm93a20uX0s8O1VESFJIdX4razwjdkxsLzJucShgQyk1QCk/T3lSO2o9PkBsM3RlQS50bGAwIzohMl9QZERrRGI1TCo8SFBEcWc5JnI3eXReNFtGaVBxSV5mKFRxKmBvJFlsbzAmYn1TSHYvRkghV0JiUThFYnE9WzpLQlhSUHw5eEFKPk8iVixkZjgwSkNOTWlyTSQ1blQ0TFF5IkkqdyxS''@;'; put 'put ''IWQkblJ1IjdmST0qMk1ZeiFZQ1RtX0ZiTDFRWnRpYWNiKlBvZUozZUoxPW9mRWdKMG1XQ05eIUpQMkpMY3R4WCZiJFRaJUpeVVk2cjIiLEpgJko9elVWU0FfVVFxMVJza3RGbD59K3NuODJKbEU8SXtuLmB6LitsWmQ5Y2NaS2tqR2t7Y0BUP2xmOUdXQCFVRFFwVkxuV3UhPntLZkdSJSM9RTV+''@;'; put 'put ''VSZZTHtxVEdnOTsvRTlacWVaT15UYzhrS2glTElQb3gyVCxUX2NkQmZlSXJ3YERyKXdfYmhvfks8blsoZlIydHVJN21ZQyVkJXZEKCFodlpnflFnUD44ODF7TmE7JF8rViE8XWhKZ1B1WUd6SyU2QCE7Q2ZvQEdVJWJMVDY4TH0ka2dscUt2SF9lZDlhL3pHOGo3LCQuImlKfiE4Kmd3fjkmSXdM''@;'; put 'put ''JGl9Rjw/YGpPfENTMHozb1N+WzA7KUJ7VlBXPkoycDl3JDAkYngka25McE43QEs4Nj5JZmZCI1khNk8kV0M4aUh7QExHQCo3YE4/fl5PfGFnW2NSSHlZISJ0WTtKR09OYCRubzomVV4zfCgvZ19bbGU2WW1YVWtwIUJSLlVifFY0c2pBRTYybkBvPzw3eXh2KCkxRzpaaSo4T2hWWWxVS1JHYXlR''@;'; put 'put ''SE9QNyNlSkF0LD52K3wuRV12aFA6LHxFVG9AY0dzIjsoNW57KDdxVDJyM19RLD0/VkJWZmhCMy5deCM6RD8jQWlzOkhPa3h1W1RjUSsuYGxmelcxQUZnezdvVFh8SkRAVG9kWDdbKUUkbDMlcDZsdyJFVVY/fnhVMmBEOFQjazNLKEtaUklTdHwmRWw2anNrYTkwRlVwfGddbUU9LkdWZUtVIkEp''@;'; put 'put ''WzNbezZxeWFuNz5JTmQ9ZUZla3pxS2t6T0tpdm1MSGpeOm5iZDx3YVt7biMzbTkze3Q9dldlQlhrVVdreWg8IU5Oan1mdiQkUzFfaURhTEx8U1IyKn5MTiZ4Qn5FIlZVYmo5XmNwdjIzKkhPektLJFVyPWw7b2Y2ZEAxfD0xaWEhKn0wT1Bmc21AWmdFclFoPzVXNH1Yb0E9cCw4YFZRTWJXfkpw''@;'; put 'put ''Y2hgPldiJTZ1PWtsKUElKHNfTm5JPUtvMTdGfmFuKCood3R4fVdQV3FbYEZPTHReMWJNcE1HdEB1KjlNKjAzW0Byey9gJnwmS0lyNX51T3pGJiIzYlRgLjBUUzNrcklMN2F8TXUsLHouYkZSMU4wUnlTM1UpUzV0Y3ByNi9HciJdcnBLfDFXRjpUPWFaNjJIZ21jISl3TD00PTNwaDs1WjM8Uno/''@;'; put 'put ''Pmpbfl1xdkAkUS5gVksxelFsNzU9bCUscDl5Qyl6ciJ+Y1ZmRGlUaGMvYD9ELiI/WHRrRFpyPDddSTpNLHAqI1lMNFQ1YU9fNmYuZGp9SE91fF1OQVB4XVBgd24yb3lnLmhWKTMyezQ/Y0xDNmNuO34uPnNpRTBxW0lqQEBfeXV6YnRReDdnTXxzOXRHR1lnZkNFRmRIUn0xNzt1SWI/SXRvSGdT''@;'; put 'put ''N0EuTWc7QzFobiRSfC5CYC8vPmtVd0FTeUs7NzA6KShMPVZjZlk4Tm12UiN4OzVTZF9iYjV2MCphdG18c2E3WVZCNEdeLm0hP3BaKitBQlJtRWo2eC8+cFh3YjhDdVJGJUleaEg6LyNXIlY9fCh3QzAsNHRyJDpHRyhyKjw8SSRDfUxOSWZTJWhldFIzUElYO0JRVXBiKmk+Vk9ELj1hc1EheiFu''@;'; put 'put ''SkooJiVOUDlXb2gjSF00S2A3amlFam5OPGc5bj1bYE9KWUwhLFROKn5JNU13ey8zdWk5Rz10WD5aPTghLHR5UTw3OX4hd0ltaHJ6dyEyLzwpKGYzS11eNEp7ZStXKEIrV2p0Z15YWip6eEtIVk02Vj42T15OU0xVPmdGWm9+TDtIYDVHQyNrXSVrXWNneHxWOHIqXWJ1Ty97IyZDe0prTXVMdlM0''@;'; put 'put ''OCxmNkN0Ri42MWVUY2psaVh+ZW1qWD55L08vTjhyYDV3Y0hedzV0emp4PGtMV1JnRFV9M3UhNCFOVk1SRyNhJk16d0A/RXFQbU00W1lvUzNYNTUpWXtbaWs7amFDPXIkND0rPWAleH1Sc01teHBPTWElNzJSJF5KNXxNRWUxRllvVlFBRiZCUDtUKCkpUm5BVGY0e3gvUnJLdWN9RHIkUG5Na3BP''@;'; put 'put ''eWRuZ0E/W2xeNFVKOGFTOlhrJFk0b1YkbDs1ZGQoLFB6MjNIX04oJEIyfks5a2ZKTXU3VisybUhOMnYzb2JYJkhze0F2R0thNyNqdEYuZDd5SlZLKEx7T2tCblF0TS45MSNKNGZPQUhXbj5ETVZqdjslIkdVOWtbWXh4I0V0QWp3b2ZqPFR0cVkrN0YpQDp5PV9wdk9JYFNpQy9wbEk2dXddQUgr''@;'; put 'put ''bGJrbHB+NiRzVTsjbkZHV0ZvSTdiQX4+KGhMYlZAMmJ6OipLVz4wdU94bWlFPHJ+PW1zX3ZIdENafExqa1EsS2xrYV5GYi4xLnVGe0h+R0xJOEFHQWp3e0MrQFQoSEtvPkRvbnh7SEpITmI0KXAhe2dfMjQsbiYjNjI5Szp6U0EkK2xaKjhIflNsdDAzfXpKPWRtMTlXezp1NTlqcDRKXjUofGEw''@;'; put 'put ''K0tmRTJRRmY3ZVJCZj4yVX4vMUYjJkY1V0k3OU82bDMob05JT1AxRUBmL1BkM3EsfWNaeXwrUDlldTlgQUpsL097KFhPNC9mWUFLZVZhWWtjPENYTVhnNltabDhaVFo+aHw6NXs1VDpLQGhrRTw6c1QwdXJRIWwpUW49NixEa149bzAoYnwpaUd+LncveU8+fF1eUGJPSiRWImo1VyRxdUJyRHx0''@;'; put 'put ''REQ+SHI0e3NaW1g4LmFuPyN6KDhidiYqSDRBPilZOGA3WWd3K3ZPcDtuSWpGbl5nd2U8JWAsQVtlKGcmJCV1Ynt3aFJNd2BiYCFfV2FzXzVRflt2T1FVQl9NbCg4fGRLJllfJn1bOSZ0QkhTV0xwdzxubXZnTE5rbiVLci5zOHNeVHgueTtQWmBOelV8cnJvTDY5I0kwJGZqanYuUzoxcW1tUzdw''@;'; put 'put ''SXJgXnVNWWF8VChsOkNYQXQoQnQ/PjwxdVRXR1lXUW9QbCVnVW9VdGJ3b0NsaCxIc0VTeyMkRDQwekx0aW9OUlUhX3ZgRyNUWHJoWVY3XUo2THNNUVlCezEyQHpJfUxDJXx0KTdESyFEdX5nfF5lKk4kTlElP3dTL1VPRFo3Tjw5WCNGY0lXak5qSVJKOEZgL3ZiTjFxJTZEdF96bE5iSXo1fm8v''@;'; put 'put ''QnJhYDFIJXFlPmt1cXlrbjZRcUFTRFFaTnlGO3F7fFNwY3xAKyF4ImJ+a2hKTDE2UEdDQ3xpUCx8eTtQT0dgVURkfngjTjwvWTs+Z0NWXWJCR3AzTz9NanVrfFlGUUhteTVFUVUpLnEhJmxBJH5oQ0xIek8+TilyVnJ0dSp2Py5icn40TmRLZGV6ZCUoLixYb0ReWzRURTw1P1ReVS9YdWROIXtY''@;'; put 'put ''K1hATzdDYDU4SUNSVnhlWUAxLnBRMTU+WT0vQlR9Qzh2OWI7RChUbiQiPSRMWnJjOT4rdn4/Yj1sJnReUXF5N05vdDN9biIuWTpXQXcmT19eNUJubW1hUj8jVE9VdjdiKltRbk4vZ0g7RX5eVkl8KzQ+WnR3YzV+Tz13RUdLVmtNeG17WVJgPl5laj1Ac0J1ZGFUZ25BSntXOFo3OT5AdWdEeSl3''@;'; put 'put ''emtaOi8sLD5KOCgvIUslMzpsJTRAe1FVWDA3X1RjO28hNSMxOUxCaUJkJUQxJXpWeF1HTnNZeW8/TD5CUHRKfC84dzpfUkByR2UoSnB2IXAucl8yemI3TnRoZGl6ckZrRXliclJlKS5hU0U6Sl1bVkA0XVA8MzFMeUcoaFBKPXk0cjt8OmZ9M3AkQX0jUVRQJD1SWGIwU1s4RlRPe2MmdHhBSmpO''@;'; put 'put ''R3xzXXF2Z3dWU2dkbTZteXZQPXBhTm5tKm5qNHB5fCxsUm4/M1IjWSxtbFR2Wzh3QDBwZlVpRl9JPzllVyYkSEB0K3clQHIxUmQxV2IzSF5hPyQpSSl1Y2F+LkIrITFxOFIiKGpmP1Bxa3tkb0J1V00uZi8hdTlnejhtc1M0ITV7d3lXQTJkPl1VMUtLSHpASSldVC9+aUd6VGMhJEl4VzQ5NnNx''@;'; put 'put ''WiY4ZjJybjx1UCVVQCtENFBfaDdMXkhaajR4TXY2Vn4uYXwkU3pqSERrKDZfZDBFLi5Nb35hWFAqQGFASUooVChzMiNSWlElcnZvUStabktAczA/YmI1MFV8c0BxLCUoMy96QEJDTUM6ZTNWLmhMSlB1RiFxc1ZIeT14QHU+bTdHUyhqbkVoWXh8ImY+fkM/Lk5UPlBZc35xV0E2YFdtVStaayVz''@;'; put 'put ''YTVybEJ8aEAvZnxLLn1mbktHVio5Nk18I21iaEBNcC9NSCoiRnY+dkcqPVs0NFc+OHA3WWB3UDA9YnNPIy92KEVYLClPK3Vnbj47enkxK2RhM0pjUGlgeGc6aF97OGsiPioxc2E8eEAjL2lRQmQ2KE9vcj5fP0N0O2M8NFMvVi5MRlJzSmtrSnFtOkJ7ViRpZE9gblg8Nk48Wn5rWlRrKyNLdFFT''@;'; put 'put ''aHZWfkFma3g7X1A/T3g0SFBubn0/diZreWpOI3l3IjVYVkhucDdOSkluZDBvQSkpSFBTY1J2UnlRbkxOSFM4VXNEZWpeRD06SnNXY2hOUVUhJGhQVGFEKXtvZ1YpZFtJSWV6ZiMhQHZsZl9aQFo8YnAiZ1pgcDNwQUg2NGVmT1BrRlRFXUE/NF5CRy57K2o+WjZYZ0o4eEd2Wj1le1UwWFFQaU46''@;'; put 'put ''QlBDP3Z1fER4ciRoZmQ5KVY6JVYhS1FtMitGcWJXOzE5Vm5aPHV4RVEpbWwuOyZ+PVZ5WiklMjdZMl19aixqMDdKeCZFSGZZS158OH0uN3xibEZbQl5JQi8qWj1RbjpSJVtrYjR5Z1AuUEguKGkvUCo1fXlVW2wldWNTZiVnKjVjSXA6aTEuPUVdRTw1ZWUwVElJP0Q/OEtddTxUVHA2Qn5EW31D''@;'; put 'put ''R0ZZdi47JGk1eGVGRltAdnx6d1ZLWz4ldltaWX06bE5dTjckX204RC84WiF1UWojRlJ4PXNzLGNpcmBhR3JPXipqSUd8M2M4bU03bTFkUzFaKiFPLF4udnRBa252dFo0PzR1YmJOIileamlqfVo/WkxpaXRvJD83TFtpXU1DM2E/ZSo3TnFwPSEoeC83bDw6bXJqKEQiViNzVVBkfV03N0MvcGVP''@;'; put 'put ''TXR6KTY7Knheci8heFlRO2NBO2hXVDVWaEVOeHVNXS5GX2h1WU1Kbl9QR3FMNUlpWjUocVRhVi93O0dDYzs7ang6MkBHZFdiYFBqZz9gaSNyQ3pIQGloWGNnYDlgRmcxYGV+U005c20mRH5aUktJST41ei9eLyo2I2JQXy84e2FUPXI6bVtZI2ckcnNBfEFMfjxIQnhhfjhIPTRCOnV5Klg7O0RO''@;'; put 'put ''N2hAIU9RQjxZRUpAQU47RjRDMDxwKXxmPDlwKz5dNz9uMjAldytqQSVSUlN0Ml5xdEhbbUwyUTx4NS5fN3J9UTNqbnZFNCtMNjIkSkdlYlhoO1o3IWZ6QSZkcn05eUBtRWN1PWx1VVsmM2NvOCorW2hIcVk3ZE1nY0tmN2ReYmtrRls3OU4reV59THp8eTFNZEtATjh+eiV0MT9DS31TOj5JdyEx''@;'; put 'put ''NVZpWkl6PThUY0xPdHteMiRfdzJZT11EQ0F4dUhvJDRgVlM9PEJWP3c1cFl6O2tFbWI2SzB7dm9qbk4oYlJ2LDddL1JUYz95JDUqbUxNVyUzUDBUQU91Sj1iQz1vbk91cFQqJTVRLmNYaTdKMj18dUovcCxdeWhCOjxGLm13IjtoR3c9OVA0ZCFGdlApKCtbdF5CUCk+WWV2KSllNmt4djd7MHhO''@;'; put 'put ''Yn42JEw6VF5UdGRIeyhTaUhsPjJnQW1IbU4maT9wK1hIKEI9K1RAYigjdzU5PHN0RG1oYjldZlFXZzlPeGVvWzc4TEFwNHVabyMxdSs9b1ZlJTQ+K29ZMDh9JGBedHh8cXVYNFhZRjpNOVA9OHpnNGJpSC4jUF5MYGkjPVc8W0cpX1Jhb3lEfFR5KUZIMmZzKzk9bjV8NzpBUEByJTRlUj1dTU1t''@;'; put 'put ''QV0hb3NkdTwiRSkwaylePSJYWDVXX0UlVlRDd05xW2lfdyg1XUtLeSthVVZyZU90UTcwMHRqd29qSDIlfEwiWW1tOCRpNlQ1Kl5rRjhIP08sd1BmXmleZiNhX2puUUV3JDssYnEpKW1mdUUmJSgzWX10OnwxUD47eVAiU1pQVUFJKl4pZ1hkNCJ0NjZXI1kzR2Y8QiU1W2UrdEg5dDNFezReT1ZW''@;'; put 'put ''LmhlP1hZdTNWPG5yMmRDcFRyXXdEP0tAWFBTbVZpbCNCX28pNEhdMHdyZy5UZiQkIiVJYDBsYG8sdHp+NnU/bHRbMEVRWWx1JkJAbig9UEpCIjAkfX1POC99bGxuU0h4dFVoKitpMjV2LENROF0od2t4d2dzV1JFdFdVKjVKI3ZFITFoaGcweVBMNUlfJjAvKzRKfXFqPk1QfW12ZWZodGwkN1Ry''@;'; put 'put ''RWl9PkguTmhfWE1pYCYzbUl2b11qTmEkek5fb351Zj14YzlXfmRlL20ufFN1LlZyWzUkOixJMHg5bi5wSm9GSTIqanVrVVRHVk4ufH1GMl0ybTd9eXFXdmhydTx2MHV8PU8wKzFfRDkse1s9NC5NQyI1dk5YW3hnSX11KjIuSWs/Q0FSWlVdfWIjWT5Ke34/UXhjMiwzWXJVVUlrUHMqe19gfCwq''@;'; put 'put ''bSwvaX5rRF4/JCt+Y2MxY2QjT3pwfU98JHp0MGU3JHNQaCFJb1I5d0g0PGhvQHdKIyQuRlR4cWMyPzhqdGIwfXdXUyU9VTRIQzVgYGp4TlJ2UyUqPHgyJCQ6YTAyRFAsK0RYRDpAYVk8SipUKGFiTyQ7VGF7en5lcFZ0eCksRWZUVkg8UD8qW2BDKWp5e0FdeEFEI1gwenokJlJCdzNic3dtcD17''@;'; put 'put ''WHtwZjs8THk6RktWZSkvI1AiaG8wRm83dXlGPS4mKGcpTUdgbzEjTDJAIWA8a1d4PDtoM2orQjVdKEZ3YUo7Ilg7OmM6fSJUQHxON2cyUU9UPkw4PkhSPmIlUHNKVjZielgxT090SXdVUF9RYExiazNBTnlvc1hdUmFlUyQhVmksW1Y3QnMxZ0s2QXJ5JVEqITU+XltzTURGR0s+dnJCNm07MkRn''@;'; put 'put ''dXlIUzFiSFBkW3Z4SXohUmhqWGpxLmgwVSZnLkImbVpbZ2M5Uk1QNy9mcWQ7VypXZ1ZnYHF5W0granZyfCEzPnxTRk52eFlIJXMqTm5SeClkT0Vre2hdcHNKdl5FYnhjOlQrXW88dCJJOU4xPGB6IThzTk81PXx8JFMvcmtAZ1lOY1MiX1VtLDxnJm5ESm4qPX0+c2JJKiMzOTohfDA/YUEpfUNv''@;'; put 'put ''RDZTdHVkZ0NfYCVVYmt0ITUzITQjbCVuM3x8YmZ0Zmp+aDFlU3AjLCo5LFJXdXJfN3lMfVNoMFZZa0NORkgsQzwvflgobEJqZj1gX0ozam0vO0kuQ0tEZW4oSXcsJGEmM2MwPzMwZG1WQndPTztgYzRVLFlkNnU2MFc9YFUyJWg1QkhVMmtxMTI9PE53WGZeKnRaV25qYjRiSlpXQjojaT9vTkxE''@;'; put 'put ''IlBvIlJOL2dIeGA+c2F+JChKZiZEdjhCWXtHNXREbGFNZVMuTlEqN3RBPj1TOHMoTEB6V1ooPWt1VXciTk13IjF4I0FodjxWakwmPn0wXiY1VWsmPGEscmM3aj45IjRwZXFdM0hFfT91JT1WP2dbI1treV51c11UZE9WLmV0UzJZUyRubDdKRHk2Ll5QJEEjdXQ5QVNAbllDO1J3YStzX0N1Qm0w''@;'; put 'put ''WSZwXTtHdiZ4ZkA0VmZgN1QqVy5xaWdqWHVzblFPK2h8NyVLI3F4R0pZZV4rMzR6PDlsRiZpczspWkxCSy4wJHZEdGZIKz4/ekxJfUUrVDRCdGBoeE8/PWxBS28kYjM/KkxqK1F0RSk4O090elJORjtqQFshWHp1THUrXVVvVUJ9TEdmfnV3O1pzcV97bklQQG9ELEwjbklLek5HbkVdb3FQVGxp''@;'; put 'put ''NHNsRTYjLmE5KyF9TDJPOiFORU84X3VLU2M4Ry5PT0BbKDVjX1FKQHhNZnt1cHViJT8+WSEmM1RHSEdiblt2N3x4aW9ZN3l7SUozM2tpWHZESz5nLjVraDBnWjdQWnhGaEVYdWduNCh6ZSFRW3dId0d9Mio9N0xANlt4WmV0cXFHM3twMyorTENhOTFSe3FoTCkvVmk+YkhNS0htI1dxUHl8OS9i''@;'; put 'put ''JmE7Rlh3LCgwM2xERTpCQnU/cHd+JXxobTQyXnxaRiRDYHNoO1NacDNLcGVEU0MrIWZoWiZTRjwiZUIhO0x0OH1fKSQkYG1CWDRJKXFjV0dzX1p8S19GR18zVk8saUFjSlV2Wi5SUjB2T0R6Xzk+d2V9e3RuQEhyYFpUUkp7OF48WVdPNkZ+V19eOT9VdnorOkNNQ09sdGpkY10lfGBeKmE9bUx0''@;'; put 'put ''djd6V0dOcmJDVyRtWHZnSzNWeXFmSSssO2Mmbi5AVVEyXjd9JHpnZzFeQnw7JGt0YjIjLEIzcDVtRUZwIjZ9dz1icEtFbk5dPylZTEZscUgkRUZQaTVjVWZmXSt3LkhKfEkwMX1FQUEwLEVOMWRzNC5ENk1xT2tuTEQoQ1hzVGR2JFcueitSREUibGdpM3c5Ty8oZTw5UloxKDJzPmI7OHxlZklI''@;'; put 'put ''eyZuSyNKeER7X1RpP15XL3sxaCF9fishfVBsTlJqOEAySHh3dzJEei94bmdNXm41V0VhJGQwNGN4K1Jsc0cvK3w7XzEsaCpMWWI2I3NNTnRVWjxSZTkmKXA9SHUlWlRbanEpMV1KLD0sMnRiaVgzZXd3RiZdMHh7ak91I1kjd3gsRWJ4Ik58Nk1SLGZJKzI4a0xuXj5Tal1OSyomd0JdT0AwenVz''@;'; put 'put ''fU0hUUo2d2YlVV9benoiR3NeeSpuZCpmS2N6b2BnQ01gWTBzRy9dZXFtckZbcTxHSDFPWUkkKHtQczB0dH56VllbSH1iS2NMSzJdTyNuN245TDI9IzFoakxmQHVCQ0JdZHNBSTFSL0xeW0dLemVHNCE6P1E/IkddUk1dWkVBYzMuZXU9a1U8YTpJZ1ljdW5gbiJxMnRkWVA8dnM4STdQVXg9SGRs''@;'; put 'put ''QlI/IX5AMWRTLHxkKX5fM2VtTnw0ZGZUR3shbEM9K2tUTnBGK2c0RStqcnZiJiYxO3lOMjthIkJMdzN6e1t8UUw0PmJfKyhZZWNGZ2Q2SjVmbD08SntBZ2AraEFYb2J0TERdbS5pVnQuKVtTIjxpQFN3LnM+eTxmOHtuRV5hLlJEc3s1aHpET2NPbntRRVlTVC98PTpEe2c7JVlFS3koQj5rMTF4''@;'; put 'put ''UD0hWX54O0VFdyxgMWI+KixOX2wxcV9Td0wiPlhOaHJrSzZRYygrKzcyO2U9YHs3SX1lQlB9ZDh8amUjSDgrIXVtM0FANDNSJnVDcSMsS0lPJmM7N0NtI3lIRUd9N3cxPVdCd3xLOGo8VDJudDNdJS9CYiZeME1XKjsiYkQ2dlQ1SVJsY2AsIStgWFQ1cnRrYVckRj5KVCM6bEl2RD1HaUtCMUkm''@;'; put 'put ''Y2wwM21SJntfaz89PiFbNmdaOi9AcktHO25FT1NHNklPXUowImpUU3wrL25BQz81VU5UT1ZdbXlVOyZqQlJCYTUwJj9WKG5XQndLeXB4QCJyUTg/JlcpODI0UXpCKiIkJU0zN24jPkNjKUZSVHRITGcyeDhsWT9MUWYkWlQjRGBeViF3bGovYCRlbSxuPFBeR102NUBBPCImJDg6Xz9+O2lxQUd5''@;'; put 'put ''U1tqLF4+aGB7fixrMS5KNDssKnp1bmN3JURRKyYveTlWIVJ2IXx8aThHe0V1PTtXWnZZeWI0MWI6UE9sRUopJmtDNDdhWlFpQi41P3IpU1lje0VVX0wsJXJJU0JZfS5ecDAvc0BlUHJXQTdhb1Nhanp+TmYpODlAW0gpT3tRR1IhSk48dHZPQVNmU1B2dSRvODEuVDJDYGpYWSFVK3w6OFM9VmpL''@;'; put 'put ''P0wxVFtQVC55W1hkQ1Epd2FVc0VRO29qZDZkX0AldjI6JFsrfG1IZT9TME44VD5re3d6SmAsPEBrbFBraSxyXWkpTnIlPmRKK3U7Q01VaE1FLkk6dUAkYEglVUNaI3gibi5nZFRTI2I7PjpoNkRbW3hDMzxdL105blRMQyI6VndjSi5NelppeXZOQy8qMFpjXUgvbmA5UUxMfTRGaDJFakosZmY/''@;'; put 'put ''NU1hUU1bbHs2YHRNMEdKQkVqTmtuMTc1S0VSNlFyUSE4QkxCQkc5REN6R010OjVsOVVwbjsodzFrV3NLKzN5b3ZBNC8yX3ozQGFnVTVzOWh4dyVCLjR7enFReCI+UWQlb3B6RTsqY2I4alpfeGJuSVtZRiReKEhIdWg6RU0vMVF6YyNsYEQ+bF4/SjxnPTdCKyYuZF4xRCFWZnZAJiIhVCh+VVlS''@;'; put 'put ''SD4uQmJaP1pqcyRVNEooVXxfJV4xczkuJVRRamJFa3NYZG9vcXhDJkcjR3pGJGAoaCUxYUMjV3E4KXNdL3dlSngrMGxhPEV4fEAubT5xdGtkJmJzNCooOS9EIlV8UyJ1RDowK19QXXd5fHF2eW1beEIqeXNbOXckLyw7dGNpXUVQTXtYaExKTlU+K3NzYEFKR28qczJbd1goUTAseERlQmNQQmdB''@;'; put 'put ''ZVRLJT54aVBIdFdHJWtzKFVNJWo2PD5qZ0NNaEd4akl5KXJEIl0saC9QOktuQF8wX21zN1JuXXYsMV49eEpzNDwsRk4yR2EkdWpnYSwqOStWRUdAXUVjfUU7fDBiP2I/PV0hXUhZfEg/QkZzKXFUKE1dXV4jWlordVNPNk1WKmdEYFsmajNKNE4qT11TdTVGNT5JQkw0WGk0IjgwNXhqYTUqM31C''@;'; put 'put ''SVtMdy5ALG18LiZka3dORWoxOTJ1MCgsUmpvXmZQNkV0LyprIU9pOnxfJXFObShYMmpuWno2SWRrdXwvKnc9dk1uSzY7VVdtSHh+V2JjdDE+fjt8cWMhWUNBKHEvL0BpYW9TInhjQjIxKENTUClCV3lrKHJbeHxUS2osV1p4RWJqMj5UOiZkXy40W14+KXQmKzNxbH1vejBBJTNacGFvZUxHenl2''@;'; put 'put ''SFtCOm8xUnw/ZitUakNAYkVAK2dvfHJsT1tvJUIyTiJzITV6RGxeYCtvbiFtJCJTUDxsZjxOTEY0KmpFIXlDKmxLaGN7YnQ+KGsmanBYbE81MlApW21HZTA+cD13WzpjOzxEM05UK3RpVnphdVVIdSRjTSo0RTtESVBHPiZuTWFRYkA8UD9LYUtyXm5GL3IlcHlKaEJ2enE0Q1VHP2g8QTBrRUFE''@;'; put 'put ''I1sscT8jRyJDNWJ4OSpMXn5iSWhrfX4qPnApLkR3ITM8Uk5VW1lNY2IrRT1IUE0pMTA8OFslR3ZwKmxCMG8xU2MxYDRKQHRPUngvfjpDcGd1M2tGNjN0fT0qL1AiRXVPUGN0OWhOIjkxWVFDdyMjfGlAeVtpSnJDRnpgOkBZS3p+Z2t6RXROfDFnamFrNStHXkZuUmlyQ355bXV4JVYmLl5NTk95''@;'; put 'put ''dldMIy5nLmNuInczcyJUeXcsYUtdOmZ4PU5xVyxKajFXZXlvUT9Ib3Jzazt1ZTVVcy84eztFKlZ8S29RanJONlJYUkQ6e0BCbzQoO35eRTAvalZIOXdyPk5jL04we2A2YmoyJmtaamR1P1I1SWFoV1FBYl9HenlmXmdWUTFjRVNHJjF4dUtjYnRNUHIobXBFKXdoPiklUFgoaSVMd2FPNEZrRmJM''@;'; put 'put ''U2o8MzBhY1hTWkBaKXBKOlRmTlc1aCpbajJ4SDlaa358NUYoN3tKYDV9ITJMR31oUW9Ya3NNeitSYyFCR0pdKFN3NkBBYiZCQmVtaktnWF5OcG5JMmo/TFVqTndNRnksZzQweD1obXhgV0RKKTFCI3pQSHJnWyZaXXJEYXt1LHVTT3I7ImgqSHI/P0BdIlFUaTx6UiRFQnB4WUVua2YwdmFQa1hd''@;'; put 'put ''Lm0sPDFySSNHT0lZb3M2Oj5mfH14NEQ6JHtXcj5aKnwoQlI/fDQiT28haW8pVj5kNDlaMkpTcVJHdkk3azE/RD0hMDpRbmRrWnIiW1I9IU93fGEvNzp1eGJJU0BxRDIhOV1GQn1lKjFXKzFWajxaYUJsJlRxTngwKjore3M2cSh1VTk5UCY2KFJBODloTkBgI2FFKVBVMkguRiRJZDRgWmZbV3Uk''@;'; put 'put ''QGV4VU1nZj14NiJzPSkkUEgpTT59XTs9aC9NP1spU1toMyY+Tmd2U1EuMypdOF5zQklALj1PMzgkfVQvPVVUV21LJXpUXzY1aUxae0ZWd10oJnJKLDZHTHlVNDI0KGZDQGNeYTZ6QF83V3heZ1U7dlApYG8pYW9KK250eWM5VEJHV049Ty4pVF4vKUgsVT94UFhaTmAoe2JmTHh+Vzs6SnFFYjR1''@;'; put 'put ''flpkWXUkRjJ3LDJbJTMwREtwJmgoa1lkSGllfjAwczk4OlpfWzkjTUAiZHNYRm93T05OSmI0PllAaChsNW9kTj5bPj5CRGt9dUJaU2Q6d2Z8OixlcnIySi4+WSwrKTA2akwmLFlVKEtII3EoQWh5aCN1QXAkbCtsbSwvVkVmWDFbMjIzcX5RSFlbTmV1Mn41MUxTISVHXnFCSjxnKXpdYilTRUgu''@;'; put 'put ''W2hwVEdvI1ZvZDZYKVkiP21eVDZKJDVsZD4mezZWb2JJWToyfU5xdypGVH1UcDsqOEdvMl9eSWtvSiMzYHZ2YkZAO15wJmNpZUQ5ZDUofDNoZS9uOm5AL0UoLDZiSjVRUVdvM2AieEV3fGhIfWBDe25EPSpuKUNtWFsoPXRZPEUmYHMjcTt6SnQ+LyhMMHc8QCVKTms/KjZ4N2BfKHReanFmVDUj''@;'; put 'put ''ZSJ+PlZnPEZyRHRHVks0Q3U6OjUiJmN7SSl5bHUmfkBQY1N2Uz5jKytTTnE7R1cwTGQjZXREMjF2YDFCNWpASmw3NmUuRmQwITNoNj82UmEqJHlZVFAuKWVKfEp5d1AiZUIwYmE7JEE5dzEwRyYiNjc5OmU/Vy4+ZHE9c2hCO2YkWT53fWBWRCw7TnJkey5LYHQpcjUhRHdIb1ZiUmxEa3YvcGJU''@;'; put 'put ''Zm9MeTppNyVlQ193N2pLdG1zYkxOVHZDPls4JDt+cExUXSgvO0o/RDhoPjtCTChpeXdwLkBMRUIiOz9DQ11COEVhLnJNUH03MDhNeHwoMCZ9aGM7MGFZI0tGaChqQTkqVT14alJ9WHVzc00jMko/Jk52WnIxLylJfVVCakVULmUsQldfbGgiQ1Y6TkpdKGx6K1NndnM/OWlfOikmPzhWZVhOOWhN''@;'; put 'put ''MnVbKVV+eD51OGV5N1lISTw3S2E7Q3E8PWksTSZpQCh0cFFab0ppPkc5KWt4V11iSVpacG5bdFNNJEpVflpfZWZsZTVIRUVGWS9LTnVUbE5HKHZiQlcheFU/X0x6ITVNd3U/VFcqPHI4S112fUsmKlpTdC5fZlFwdypJNC49JXpuVV9zdkhAQ3hRKUpyJnZ7VFFdV21DMEJHaiovWF9ETT50SG5p''@;'; put 'put ''aWVROXk+YnxecGJjLDJ2e3k0QXdseWdWJCt8KUJmdj1mVWd3Z20jay9OVDVpbEJvXT9sUmlgNSY/WFZXJlsxSCtHMTwjel4jLzdvXl8zZVduKF1pL149NXdqVl55UmVlSXZ7fClATk5JUWFhM21tZ1dSO3NydW06LkVqb1VWU3JVcG48cWFodUoxTTQkeVlzYlhXS2dgMFk5NEoiOU09LF55MXpu''@;'; put 'put ''VEQmZlBKIXM9RXtTPEReL2RkSGhPOUphaHZuaHdrQThKN0s1OHBwbjtyIWtFUmsvRFk+OmFyb1RTaFBmTzN4W15jNnYqOkI0ODU0JTRebV05PipoKHlJaTNIVUgmYztNO3hQQTE4RENaaWUkUnpzOn46UjtGaGl8SilrOG9SJTQjKW5EYEFbQTJCdDlRRCtAJnw9el5LRlhbbHMqfS88elpPUkNo''@;'; put 'put ''SCtJRD4hN2dJeTFvbSN7W1U5V2shfDp4dy5rQj5UNyFjNDZtTlhYJk97Qzg3WCw/cmlhSlllcjJYRiQ9LkZ4WnwmeWMrST8/M21zdThHZW8pT1Y6PCZQZF1QO1s0fUsvWV1RPnhYRltvPnFad3ljRGZURnZYKTdkdztSfGJmZ04xcDt0Pz82aEUrMHs8MiIkImFeN2VNNWFlKERPLkNdc15Fc1lM''@;'; put 'put ''SiVvZGpdKWhFPG0+eG5+b3Q4UVtbP1hmWzxQU14pMS8zUD5sPjR8Py8mVXdVXm1hZDtBZHVdTERuI152fjpGVE8wPSE2S05zM0FFaVQrY1hAW2JHVUg7NH4mJkpPK3pEXXZhNzY7OzxDOE5BR2tCWjhpdSJuQS9aXS8za31uSVJRKShOXiorZ0BwVzhUWG1EVU5BLDZEZ2xxSUBHNEljK11QYF54''@;'; put 'put ''aX1xRVEkZ1A9a3puU1Nbcl5+OkclVEptOWRwSEglbHVMYTNaOHd2QllrMTpALGdYelJlNjsrS1kyLks6Zmc/e2Q4IlVGTStzRWpKL2NudXxJI3YqbWJOPklwMS5wdGk3dX5Qd3Zfc3ouWGVrY1JBPmdSOHtdKyZpJFNUQ31jJFBANzdOdTZ8RXJPeGo+PDh+c2xsa1Y+akZ2KENrflJqOCZMb3VD''@;'; put 'put ''VDluM093LlhAT05eS3lIVH5rWCVUa1o4aFR+YylGbDMoPzd+THd4MnZvKCJJdSIpTnwod1lCSX1vP1NzZE8ucyZhIUdte2RsX1IkYkVgYF86ck9uaUN+ZjgzYmgra2ZLTmYwIzJ3b0JeSDtwdlQ2TzUkSXY2KHxNWDRfWXJUNitEKVo0dDc/e3BEbEwhfmxNYW02YWpIUltqKTs6ZTpbY0p0M2lG''@;'; put 'put ''VSYvMl1wUDlgfjc+XSEkJFRvTW0+c3xUMExpUkdxNHg8eC5IXVtYQGpuInY3dGNaIlB3QUN8VEwuTzF4WXUxbzg0V2ttJDM/P15fTVhkLnx2T0FNRV9jQEc9QUdJbltralZpYC99TnIlSFhPUG0/I0NXWn56UlQ+aj9YV1VXJTpQX1BbZ11MNnxALF91dDozY35XOE9TI0MsMTwhYGtpWUV6Rmpj''@;'; put 'put ''ND5jXyxhZSwhInVkOF4kM3FOcDppfndQZkYsbk5RNHZvMSkvYEpwc01OenB0Y19QbUYoNnZZOEpIMy55UW9CSlEiJFZ+MzdgYTA+WXU3L1t5KT1Zd1YmWkNqZmBmNyF9MEFYKV5QUChhKC81XjElW01NTjMrLlMhXzBZQWhwYTpHdzY/PFo3NUw8TGldJDx1RUlfYSlyQyJleXYlbXFfMilVLyw9''@;'; put 'put ''KldaRzh2YTt+Zi5tI0lCN2JqUEUuaTpCVXNfe29tMilsdm1nNXloRkwhOV99Ln5VP0ddfVYyR19NISMjW1piVmxuXk0/TlV7NXlmQTZreTc+PV14WmR+Xjp0aj5jfEZqKjU3L3NKWFEyMjdDbChoTEEhKEdqRlk/fUZvYV0xYE1vQyIqeU05Z0g2OUB7QFlBTWcmcUszekpbdGYvXXBmL018VyQj''@;'; put 'put ''NHpLR3pwaktgXTpMQnhiVkh0MUNZMXM4aWMjPG0sWT50NGJFeVE2IUF3aXZ1QGZZYEZ1ciN+aD57OH42Kyg0XlE4LnNUXzl4SVBTd0AzfXxlflRbJV1MOjJPTVozMm5TWzUqUUVmMnx9cF8pJVcpRV5xYXBlVmJXenxkZChGN3R7VXxyK1l0UyFVTTlMWXcoKG5pNT1rdHswRWBLOkw9a25RYzB2''@;'; put 'put ''WVVIZDRALmZBU34wPkUxWmtgbkJQZ2VVOzAyXURtR3dicCZJTmIrb2JyXXg+XjtHe0duemFNRkB8RzsmMGZ8YThNeSsla0BWMUkiVXsjLHRYZGAqViRTd0YrRzYsfkNEPnQ4JTVHOTpJWyVQcGtlOzFDdFo8PWheQm4+MV5ZXSsudHpFRGIuIkRqMUthZ2FnMD9sQjFjXlFBaTBEdF5MWEVqKnN0''@;'; put 'put ''UD05QWN6JUh6UVUmRWJBWFtBckF4O2FJLlhbR29eWUtfQShYZ340ZSRVOFs2LkhxPl0hSCR5PU9PUk1rQi9+YiFHITQwMT1+fTRMcyo4TU12VUAyMkVqOHVHSWl7bU0wK0lVZ1ZgQTA3cjNhSENzU3ZvUWB9KHchLnd8Xj0+RCVaMigxTGdqUUUzN0YxRlVOeFpeT3g8XmI1V0xNPig2eFIoJmpV''@;'; put 'put ''cGhbYSszOHFuM2BaQ0ZeNFcldENtRFc+KklLPD1HfXtATGM4NXo4KD89V3VEa0kve3EsbFAre2p0cCtKY3I8PUQuSldMfm0jIjBdWk5HL318UyN9VFJYfCMrVVZkdiRFL21FVGV4cXdXTSFSO3RdNkFTZj1nQCk+MyFqcl5sQEdtUnBENkpMS04hIW5GYFVvYUhCYC9SWWYhIWRhUVdWXiZVWU15''@;'; put 'put ''JGRHW0MjY3QueUc6UzBnVF9+anZaMG42M1QiXzNTISI+T2YqcmBsbU8oIU9oYW9AQ15EQUNBOF9zejlBQGJ9PE8yJi9BdCVjajJhPk9XW2VpZjhfQ3ZVWHBHJTBeJDxyRj17Q0I2SWMlNS5LI0ZhTnxfNiFWNyJXVWVlKmN7aXJjPDladz59cEYxQHB2MSRQK1BBM1dxJmllYHZTUVRAZkQpPyFj''@;'; put 'put ''eysuSXdLUXQoZX1DfUw3JjI1ZHMmRHh5JTxxWSpEVntGcFpnQ0RERmQvKEltMlMmTjA5VyV5aHYmPDMocWFpPGU2NmNxVl5pQDVBVF9kNyo2T0Y+L1VLIkZbVXRrOFp9YmkseCZGSHFCXkQpYUpPPk9ZSjNfb1lRcVssMDprYX5pfFFURG96WE1hVXdyWmhbbHR3NjM2ZSs1a1RhY3JWP2NbVkI6''@;'; put 'put ''b29nYk9UeWJ2JSNzfGZyXjdnXS4pY3Y3aT83VkV0YUpCO2p+Uk9FW2txTlNKaWovalh4ZURMZGlDXj5aJXxjMnBadH1JWyFddDk2RmRZaWhWYmJEQ2xgeVpPemxyS1FuZllqbVUoXT9FPV9APnp5akB0TzBGUHJ8UlthPGtSU01fb0okKmQ/KSwufCp1bnI6OjZEOz07LDQyLFRyc05NN19PeCVi''@;'; put 'put ''cCNgciNaWnp3akhMXjEuQzFxSzdjWiE5QStFKTx6PCZwaW0kKWxQXjZPbWdsRDBUL2xTNlRCJTN0Uk52S2R3Uj05dzNeYU9ZY0E/Rk9zJkgqNSpaN3k9clN1Z3g+b3lFQU1WTzcjelBJMSNtZ1tWQlcpV3U4N0pSTV8qeyYxPHN7PX52O0tkRiJmQkBEKG0qbXkmYnFWblRyaUsvUF5uMHRORlhY''@;'; put 'put ''WCI8OyhdUWs+UFBkRCxIVmx4L2dUJEhYL2Y3eUgqZENNNS5rQDgrK2wxLyRvTG5mMy4hR3tNLDhjeTskRlcwcjgkIVl8RHsqciM/PyE9e2kkNGsvOVF6dDpvfCxaUU1kYH1LeElyXkI0JGYucVlbfjQjUjElamVxZmNiaXNwOFB6ayomTGk0VFZZNG4+WzooeFdJY2ZQM0BEemFhPVg/OSlvQH5Z''@;'; put 'put ''MTk7KWtSP0p6RiJdJkJ4JTI6bVQwYiUzSXw1SUtZcT9YdkRqUHBrc3EvKih7NjwoMWRjK1UxfT4pUVk7aVYiNXklKmcod1hAZl99V2Q9ODFANDMxaHQ+P1FSVnNvQz5QPnlQPkU+PV4wQ0lZWCNrdClXKnIyTTFKPVBrXjMhRHp8dzdDXXRFaUlYTTRiQiJRPiREUFdfIU82Z0RgPlY1NyxxX19l''@;'; put 'put ''KDgxUV9wYld5KyRXMjtPIzYqOyg7blFOMGx2LiplZCtjRUFQJCF2P29mU2o3JlBsZTFOTll2YHNrMz4vZEBQPVZ3O1Q0czcxSzVgVDEmTnYiUD5RInVyZyshcGxQOkN+Vl96W1p2YnJmRCNANHFnNG82Sm9Xd1M7S3tIZ19QO141Im5NWEtlVWpZV1F6X3VWcnhJX1csY0NEZCpjdTNSP2RdbkRl''@;'; put 'put ''b29dJlk+RzYwIXxydFgyZlglM1gjT25HZX0wTyg8JD9tX0w/dUljclI7MX1mKUk6UGU7NyVOMktYfHkqJlJobilpZHkkUSRGfFhGIVolPWw0QFd7MWFIUTk8WEQve3VzK3hIJC9WTDJ1OUs0WlsqTUpAcFQsTl1tY0RpN3Z9SUJ7PW9jY1J0eTI/UkdKTDQiez41JWRYSiN4WToyYUg1MGhMZXts''@;'; put 'put ''Sy86fFlgRF18KzxFMmg4SE9mZCgoUl4wM3VldntWOnQ9aEssaFZBRSlHMnsmWjlpUXhMOFE4JDJSKCRdUiVyPiVTKElvYGo7RGB5U2k5biR+JkdyUWUjcGEpbVF7OGNPWE0yUStzdDMkYjRMRD5KaDVifmApXzphc30pMF5CYEFDY3MqRHQ9NV8iTiVbSWRoX0JPd2FrPHcwSHlveDRiQVNDX04m''@;'; put 'put ''QyM3X35kLGtRXUg8ZEI9Pz4oYStYb0xQOnduV1tfO09NTFZFRi9YaD1mIXglVlBpbkJuWylPcFQ1eD4kVDdUcXU1W2xbKVQiKEpQU0JkOl9NWyZiTFtjMGdfbmRyZDI1TCohK0s1RWh6XzV9PkZCUDlaTTkvOnRpflFyQzxgIk51Zz5DOz9VVmBqXmJ7RVZsVktgcC5rS0F1QitWaHFHODpEajFF''@;'; put 'put ''JGxheVA3ZDNeYnBNOl8/TSNIcEVLZmxgWVU+P3t2Rio9PFhuNHdGX34lXnZ9P28he11TOiYlQGwzJSokJVJnSD1jc3ZoL3swfVtVa1E3OixsZ21dL2xYS1A6Vk9mL2R7M0EoOjNeIVBQPFZwNmJ1K2NrJGE8LFFvXzYqNFg+VEkxNXdPQjd3PntTX0VwSyZSXn52JHJxTltBNX4jM01ddlo6Z2hf''@;'; put 'put ''Vjl2W3hLRCVGMUF5QzQ3XlRCMWl6dk4/U3Z3K2NFMXQrZWApQT1xaisqJHBLMHNMPmhQVC4qZls5T1o7aUNvQEE3WWl3M0E4Z2UySFpBVStvSEJVRUIldk1oalBuM19bdXxjcTEjQl1TOnxHZ2JSXkVTMF1OIT8xdW0vdj99d0M0c0xiOSg1N2AkSTVQclpGbGBmK24wUmdBRDJlNWssdE1dW1Nn''@;'; put 'put ''JTB9SXtzKl5bLDtlI2ErO2VgeStgfV9GOXU6YXhXfSU6bClAeTw6UU98VGtCMmdxOEV0L3twaDZMVmB0dnNDTmhQMHBoMjM1JjZNNUM6b0xwOX5GaVpnY01ka3E5YEh0L0MmcUpUfGNwWmkkaSNxV1M1Y35yTFo2TGNqSFs8ZEx2LnZUfGdbWF8vPUs0VFFdcSNWK21qOTZeYE54M2NPNih0ZnMs''@;'; put 'put ''RylvUiNaaXg0WWw3Xnp1NUpOa0cld2dCIyVmZkc0PGZFTTNRW08qbSJeQE5XbGAmMz5HZndQJlQpQjJ9aDNkaUBUQCpnTmNbRmBzRC9nNlRELDNjPUk6LlZpY2trb0UheGdgYH4xZ1pbMTUoKl8sPWU1P0pJK11Qc006eVAsZk5kb10wM3oiMkw6KWlyMGl+cTV6Ozdbbik3JXptPHNOP2V6ZV5+''@;'; put 'put ''R21rfDRiNXF5SUJydzlNWnxGTCR4cFJ1RU9gYyhyR1U1en5BPUteJEozdkE9KGxZVCg+IiVkYGJ6eWVhTCRyb1RyPWdHQU9pTGBmdXp1cCs4aGVNWWohS0Fqc2psYSVTen1Zfk5QKCFlMHxvcGpMZmp9VUg4a30rJnhROXgqa2ZwfDEoOWdRTHBYeGNuXlYsP0lQTF5tKnk0eCh9Si5Ad35aTFRo''@;'; put 'put ''R3s6S2tILHFCaHhTYUBmOS5xaStKYjosNFhAZ2pdTkZ5dlRIcV96YUc4YD5rP0pJczcuc2NMWDc4akpESjx9MjQhMmAyMW4rQH4jKHU+ZjE5VE1wSUc6fVgkZFt5cnlveCpWQWdAU0N1Ik8yWi85KltEYWpNaCwvbi9bYn4pImw5fDh7VUByYTZjI3pCb344Wz1nXjJGJW5vaHk3Z0BHUnlbTklB''@;'; put 'put ''KTdkTn5OdUJ2MHFAfEk6PCMlNzEvQSkoXnhpUzJtRzEjc2VVO3k3UCEsfG5sNSl4c05SSkh1STBCc0lebkVuKk1sTF1EZnpadkxIVXdpSENhaypiRHJ4LiN7K1d1OGlvRTUlamdMa3l4OEUra21ZXUJEZEpxP1RwVSFbfTwlfE17P0dPTUwzPVs2LiVOTGIwWUNQMUwjXXdPZy5qJXBvI0JzIThX''@;'; put 'put ''WVY9bCtOSTQ1JEN2ZisxQz55TiwhcXFTbXRUbnYjM01ad2tHOn0mJW9QT25GVFRqMz9Ba3M5US5RJiRVazZCVWdBZiEkNkUkTVRwR1hIVm1meE5LMjhPbXVaNUM/YkJPMVRFRlY5bEQ8TU01dDlnc1kqPz9GW0o1RiNecEgoRGV3O053IWwlam41JHgqUDRzZzJnMCM6RXVSckxQS0w8eDlDeHZ7''@;'; put 'put ''fmFjaXsvdi5TbkVWfDY7X2teV2FtNy5lQEZVb3VXeE9Ga0MrPXQpYzlzempfM2hMWkJsLDguJi4kMk1iOEk4KWFmdnFMTUQwKU1oMXgrdHIsejFlPzFqLFhoSi81KSZ8SmpBPUdbOT8pbHBFQlEvLGJWWDVWP0RBM2R0Km1vdElrNzo9TSZ7MlUzKHZUVGRUbT5gV3NyKzY2YCs/N05vbj1DI31P''@;'; put 'put ''JF5RXikqbEFpOlNDR1NJdmo4cFN6dCRBe087NjRTNEd3X3VOLjQvLmJeRSRoJik5MyxffHw1PHBrXy5Mbndfam5NTE9oWCU7KjlDQm4lV3d4Tm9KUjR3aGl3alsifk9je3Y4SzY0TDxuNlQvUUJJe0ZFQUwoT1ErT3UsalozNXhXXlFmRHB+SEtjbCZlLEBScC5XKF9VeFFbbkNyS20kYSU8Siov''@;'; put 'put ''I0FxbmhUQDd2P0A/KkB8dS4rWTQwZ3c0NkokaC8vajt1Tig2JWxOYCIqcDhbVClZOmVUb3gqLlRlKF47XT42JVZSVV84ZWF3PDsjajFvPUdkQDhDTiZ8Z2ooQVQlTE17JTkmOUdeU2NKdUJvYFYuWU5BYTJrcSMoQmkjcTxydllvNH1ObHJ3WDNyIVYzZ0N9UmJiMXp7LnJAMT8ocG5HdUlCSlhA''@;'; put 'put ''dG51Qy94Yys4I0hLdmdGKV9lTnZgV0ZYO3I7ITsyJi5yTko2UX1jbHxAPEhuTV1YO105YGJ2NF11NkFiK3o4JjVSQVBUWixFbHMyPHJSeyVpN35mJT1DIWVaJEoqXy5yM0BnazB0WC9aWkIuUF9YSWdXZnFBTkhNYXZFUj00JFZyaGdVSCFrUWxZK2RPZCRRTk4odEUjXyIvPWd6L2R2JXtjNkZF''@;'; put 'put ''RGx0OTFCeE0oVn1hMChLKXY1byJGdC4oRkNrXk0ifi9aSXshMFRQeTlaXixxbX1uNmB7UEMkNG5JbUU3PUR0cHoqdEdTfFdfQ3lKcW1CZm55PVUrPGI4e1B9U2pffkszaixlcUtkeGIlWl5SPyQ2akpxKFgiRDRpXS5xSE0oWyZvbmJHVmZZW2p2UHRIbChbXSRgaFduLkliLyR1cl80bClpYG0j''@;'; put 'put ''LlRUdjgzSWlJSTN2IlNQRD5gNF5YcG1aKDxifFEobmdtb156NGs1Ni8uIX1nZUBORTV7dmJEdzMsWGpMLyNYTUR8cGlmPjZVIz0xdWI2SUlYO2AwSW9HcFNvRCQjY30lNV5sSl92SkRbU3B2aiorKUxDI1EwWTBQIVsrVDg/JTFPSFI4W10+QEpbV15+fE10ViNSY0NOeEVlcFRiJHVIaEttIWl4''@;'; put 'put ''RXlfX14qXzM5aGx0ZUtnUkJmTlpDcVExKVhQdWE1NFFjIVBZekNqMiImakVUdHZeMWQ8PUx7RzJ7ZEZzRFlLXmRNNnVQRmRIRUshQ1d1Kn0zTkZvcU5mOk82JVQ7ZClpe25RSzF8LCZ5Qj81YzoqLittRkI2W1hRLnhtPl1qU3x7SWc2JiRPW1ZNcGYwLy8qcXh3Kl03WmJoU2poTCpqaDBWclRK''@;'; put 'put ''W0xPPzBqVnczInljWmF1IyJoYCpGdEd6YkFTJktpVVZBLkFjaXpUL1Z1ZFZZIl50e24xUFIxbntyWXZtVmJFQWx1Y1ppYSgofCo4NiJQXk1IS2paQz96YWppUUpueU4xfix4NT1wOl1rJT5YR11TSGptJnhnVTwuUzRNMTN0SUdDej1mR2p3ZSw9USN9I3s7MUwkS0o1Mn5Ya2U4Sm1KLl9ZKU1U''@;'; put 'put ''UXFBblBuNX58aF5nT2dVTGBXPENrJGZ6N3V3WDMxaCQwaUdoSCttIkswTClzJSUsRj15TE0pVmRRTCxwO0s2dFFNZk5UXXBzNzVaSGZuPlFga01+SkNtTC83flRJe0VeJDY+SjFDVlQmNzchc1g/Zi9lW2VgKngvTSE1YGJCXj5+WC4uXkIlbis3NzldbHchTFl5TU1lZUtkSUUpKkxAamhBaHE/''@;'; put 'put ''TWhTJFFadjFdNTkkP1lrX3ZZfmUxUmk7c31YOW4rNlt+ViRdaUZvKDhMZ353VUV9fnpBQGokPElQZ2x8PU5OUjlgME9DWTFkMGtBMmJASX5ifl5zODhMZ0hKUX0rJTRWYVd+e057OHIvaFg3cFhQI3VOKC9mMSpeZlYwYmNGUk87bXIqVmguXnFnTUg0Y0A4OHZYM2p1KGByMT5UNUdSfWl+Vms0''@;'; put 'put ''YCNAKF45SWY/cndbJkYqaCJnZjxIUE9sQlVOazY2RDNGM285SkZyV3VxVnxiZjw3YXsrNyVnKUxVPjsieHpdSCQ7fDBDXSs6S2leNUNrS0JkXix2fnVfRXlVeXE0Ly8jYWFDUl9jTTlJSnUpRT81ZlpPNG5MZmpVRWIpLGxrYlApdihGP2l6NWFRbDlYVGVxVWBSSjdSbX4xOWl2R3gkaUxhKVlh''@;'; put 'put ''KyRdRnM0M2U6XyVxYm9bSWpjSFE+Myp0XU1MdExSPXUqcWtiOTU0VlJtc3s3SEB3PmM0cihZW1VGQjE2KDYuLyx4S0VWKyova3ZGVWojPExgOl90VVVtIiw+Kkk5Y2V9JjNUPVtHM2luWmh3T3toW0xtN0J0eSZzZURfVm56S01JXi95QVlPcEQqSEVpemw+Y1E9ajlDVUUzZ10wPntNNyZJIkBm''@;'; put 'put ''QUVGVzd5fGthcnpzMVpodD9obT1zeX1wZE5VL35QJEo9I0NTSmNvQV8hckZpamdfRFtpPz9ZPm5fe3w0ejlTe3U3ZiYjYmR5Z1U2KWUvP0piRXlOUnNKPHgoZ1BYWnZRJmRWQWosUz4uLiFFanRyTi90VT1MVTMuNn5xOzBRZEBze3hhTCRgazdxaTVoOjZMT0hXRiNKdGErbU5iZWFVbEhFT1Yq''@;'; put 'put ''YURvL00zYlkqTHl0TG1OV0Z8ZH4vYjtvJj42aXxbe2pgVm06PSJ+VF86NGg5amAkU2RxZS5WXUQ7QF5VWj81R3grXk5QTHlJejNNVSNTbWllUkkod3s8dTwvXTNVOSJCOy4ibD1tanp3dHguNV5mLHYyIksrTjt6bGdBTjs3LzddUGVkPS9zZFtwejdgXU0mMlUycjMrK3V8W0RpeHM3fWNvS1N2''@;'; put 'put ''akp3fHxufDRuRyM8dFN+fjNZYyR5dnxQNGBnWzBMWmxofiUrWUgmOktycygmK1ZMKldHK3dWME93aT9ARnBAWl40JFN3Zk9qT05pR1gyMlJeQ0pnTk5ifS8lbD17UEA1azN6YlRDMVpuKz48YGFCKk9RWEVyMiZkIUEjUnFJQ0VFbU5IQyQhWDB0cHczJWFXVCJfJD8xNG06ampITV5AU3Vpb104''@;'; put 'put ''Xlo5bnNLOV8wbjcjJFE4QU5bV3hYZT4yOFgmVT4oem10JThBWUYvJjpTZH40V3wwWDFyLCYhaGsyPWwmQjx8a1BqPCNJSWUqcnJ0X0lJWnFTekN9ZVgjTVtWPEJ8a0duVFVJeklWNCpQdFEiREgzfEdkOl5AM3B9cWszeDZzTUgwMFImS1lyeSZMP350KFpiZHxBNDtRfkp+SEFiYSs5N3o5VlU4''@;'; put 'put ''TFh8UUgrImx1X0QoWCtxKFRxK348PS9LaTRGd2xMS0xBZWdddTsvdVJeP2pYWiNEaUxCMUlJJk49W2ZeWUJJd29DbnF1djg9XjZsUVApWmZNaD9SMitjdzRvdzdKdFQ5dF1Jc05mW3tyLD11aksmTjtdRHtQSC5Pb2Fifm81aE4ibTZTOV5gZiFTRmohcU9SWnVTL35HUEM1VFZfLDA/Umo+cVda''@;'; put 'put ''bn5mPix9dk98figuWj46MWVTeE54QSl9dCg+XyFrdT4wbW1TN3VwUGVyRUBCfXNnUmsvfWwjQkl7dEIlVWZMY05Ncl5PbXJLWCpaaUpCemt0SSFJIUk7dWEzIlVYPFBDKjdoYlRLPSVwRDp0XlAyV3pfbU9xK3M8Pm45aX4lfEhMckhMOThNTmAxfkRlOnE9KEhQdVVwOzNnI0FpbTFDakAkcTZr''@;'; put 'put ''RXg1NlY7eH1qUT94YGhDI3syVSZGdkxPQkQkT3g1UFs2KnVVOHhofS54KTlaSltiIU5qNTF0eDsxNS59P0gxaFJvWXhSX3B8RkkmPWBVdWpNd1dCfXtVKEh4RT9ITEtJcjhRRShEL11PNHREZFVoUyFqa3I8ajF9dTcjej5IRFVqQVc2YEMqcUlpbCw7V3FLcCwpZmJoeHlpaDE/VHB4YXZIM3le''@;'; put 'put ''S0tiUjNoNkArTUZOOyhZN0A6Pj8+V0Z0MWokcmgpX11sNU1JfEZWcERaLHZYcGZUbitnYW9OVG1VZz97T0dyIURyYzRrfCQ4alRWTFIqX2RTJGR+RiNvYiUxZEAwSCVaPH1RTGtjeXwxfDAjTXomWyhKcmZFcEpHVWdaM1IhNz9vSDNqeSY1fXUsKDNTVEtCUW1HdFlqdHBQaTlQOCQ9KGVHcnMw''@;'; put 'put ''Il4zWD1fMilqWE5nP2csRFhAWywqMkJYdjMuMjp0IkhvciU4emlSa1hjcSkyVz5DSWtCOX4wX0c+Jkw2YmJjeHwmdW4rOUZCTV54ZyJRKHBCYzhkU1peOGlDeXxJVFteblJAO3NCeyN3ZFl1TCtjMF8oOiErWEw8UUxOIlFCezl5Yjc1KVtNRmFfVEAkOTUiJXMhJiVjQmdEe3Z5KCYiNDEmdCx1''@;'; put 'put ''VWpuRE1IV1tWa3B3W1FJeVdVa2VkJXw9eXw5bGRubGU2ZlUuWTZrMTZALkhXTF9YYGVtIVkieHpCU096KnE0M31jeE5Bb2FXRXN7R1lpRzVUYCQhOltKRlArK2dCS2Bgc3I8V3BibDsseDhqWSVfczMhXXxWPDk5MDc0Nl9jRD81bHEvRjk5Z0hESlo+N1oheEsjLnRxQ2B0fi99T25FelRbMz0k''@;'; put 'put ''JDRoeGIrKWw2SjR2OG5WaH5Bb1JrInhJM1FjPH5WdFA0eUtuPWRTdWhrTTtDR0pFen5qemk0WnZtZiM8bHh7KX1wb3hBSWo+fSFiaTlDayRUR19AMDFfMX58LlYufVFecVE1KU06WW1TZ0lbcl8rdGBFVi46a2h9MT8yUG9uPCFteE1+RiZNdHhEPV1rKVRDelt6N2ttOVF7ZUhDJGRYJUpCPHlo''@;'; put 'put ''ISteNzskb090fXNCWlJvRmtCLFtsMFVUTzcjUEo/UlYiK0UveEdYOzpWNF9SRThOYThPd2deVDpxWj1LQiJSbllpU01mSH1AYSFxKVh2UVJANSI/akthcSFja0JCXWQhaWVmcUk5fSRRIndEJCRbbEt3YzxPWnJlfD9efjgqYzp5UHM2L1g2bnh6L2l2dUY8S1R6T3ZpflJfSDZwIjZDfXhgTDJV''@;'; put 'put ''d31lVzhvIyxxLHo9QnVMKWthQzMhZ1d8NEB0Xm9fRkdiRCVqaik6eDJ3ZlEpe1RyPWJQNEhIYTF0RVtyNDZIaWs+eihVfmMxMSw4YV5ZMiN9RkRXISNVZGxieDJIQFJKfDNlSltpM0BIJXJUIiR0cmdLRksrcGdDaVJ0YCZLb1RMUEFBZHpNV1tKPzFZODBNKkp6NkkwSVVVR25sR0QpSVJiPlNG''@;'; put 'put ''a3kzTCUme2MwbWhIaX1FLDduSTlRZWVbYntHWnJrQkZZZHB8YV94b0IwMStOYVtJO1lBMXByPzAsZi9sQUNiU3I3IT1HUmtRK3s7fnEwcmZYd11vKlp9dSU4flBib15aSWU9KFI/WUp3e0hCZDoiOTkzUmg9dylJZ1Y7VytrcHxBP3IwZjVzMSMyViY9anBFOj9uNjdTfXQzJUsyIWcmU3RCcE9Z''@;'; put 'put ''QEpiQEgycHxQYFVvd3p0IjNXUn00R05xW3Vkfn1zXTV1c2RnaTp8WixvSD0qfTErWFc7XWBoNDw5T2wmellFRGh+Qjh6fCI8KGJjPXZIR1BaYEhKeE1gK2dpPD9vW0xxUHZJQjwxbispeywjUFVZRy5ieSNLM0s+c0dOdUhxKUludGZ5aUpSWjtnRX4iVmskRFN7UjchWSZLY3d2SmIrK2I8fnoq''@;'; put 'put ''JCx1c3IxKF5CfVQ4a1MzWFFQaHFNQ3pReXcuS0k8YHhtUUFxSU5fVkxbanhvWjh8T00rSE1eWXsuPE9ZPiRhZzZQbzViekBwfDBVbzZIVjZ2fTNYYVVfYDdCRiVlXmskKUQiYS5XeixFdFdsTUpeI0t6c3YwLDdPRCNGTk1nbzwleXl9RFFxYCRfRVpdWCptMi9sbCtdK2pZYXBIZF9CXWVQMSl6''@;'; put 'put ''KnssKE1Ra2pLW0lKNDFEOlgpKVlvVCJQSzRGZCNUakYjamI+PXY4TX5DbEZhZj91MyJwbjFKalpxanwvXjpWSTpCeD81JSo1MlA7fGQxLHA4Lj1PM1tkS0psWVV1PXhrcmlBdX5tN0BaUkd4Y1RPUDdiYl8jIlFPTyxjKzh0OThdPlhKL2d2US4wdWgzdEBhSW9OeUpIQndML3woLmh6YXkucW0k''@;'; put 'put ''ZlVYUioqI0xsOjBAb1hsQl1JQzYqKjU+L1QqYyh6MSU9dHVxWUhnXW1sIzM5RC8hOV88bHRjbExrfj0ybWF+TUhpWFRebUgySVpjLndseWE4SDZHK1lyeHVqXSV8SzJMXk47N3tbNCV8Rkt4Ujx4OSlnUWl7XmFfWEpVYHNaW3lAbEc5KHRye11aam9beSIoXXh8fCMufnQ5JHNFJUdmMFBvUjtZ''@;'; put 'put ''cjQqJE9tR2k9WHs5Z15dLz4xdGxyJVhCIkIiZCZmaGU7ZiNeRlNtcm5mTjpuYVsjfiFjIkBiKT1CX2FgKHlbenBDfWV2VTc8VH5xek94Y3gxU1p+S357X2BmWG8iZ1I4b1J2U2M3TyEvY11lVXJLPzEqTixoPm5hMzZ4MFpoRWI+cj1jR0RULmBPWkIpQitHNkQ5VUhMQ3Z0YCxTQ1Updz4mUCV3''@;'; put 'put ''L0YuWmowZE9vUTJqRjdVM05KfElNZmlKUm9lSGlHZDphU3x4PEIqPUk8YVUwak5JVTx2e2xJYmErPSxKJU1Vd1V7QCxkVzwqeHxiMjw9Z2BkKmFITn1dRm9ISjZ1OG4xZ2JNX0E0PTB7Mm9gfWEjLyRRO0h0PCt0S2BKKnpjRlJaZkRqQDtbbH0waEomfDdqYzswfFFET2dDWkBCL10rO2piTzAu''@;'; put 'put ''RVRXVzFHN0I2TVkveitJPG0lMWpkfXk+N2lGY0VWTiw2NH1VbWc5KnAsUlleSWlBUWljaDVbN1A1S1g7WVV4QW1RLk9Nd3I7WzlHZiYlbkRla1ptZ0NEcn5DOXlMdlgkeUh1Mj1xY1cmXlh+N0F4ITBqaG9oQSJHXWNoel5sOXJiSmdQVCw6anZ1ZzhxSFV8NCJlMj9WKW1ESSZwQn1gcDREU35o''@;'; put 'put ''dElVeVtXdHMzamdSYyEycldZSiF4V2NtJGNReyYrd1IkUU09U2p7eEFOJk89Pm1xLjFgQko/YkhfV18rK2lITClCQWUxKDZObD58eEFhdmloIzhWVj5rTko9UnVmJWw3cSV+X04hfV43RCUlcz8hWUptc2JKfiN0aHFoW3wrX3hkZHA6aVpuMGJ7Qy8mQVUjLE1DOHVbcGhvMXM1dyhmMlBqKTJ3''@;'; put 'put ''Wyl5T1pBdXtvaGY6a1UlQTV+R2E5KGJAKmE6RGBueGEoaG1AIVY8SXwjcitfTn02XXhVXitrI2NmIVkqLGVPMzo/VT5CWzhTZ0ouaU5SZkUqMDZpQX1VZCV9Q0xsZTZJVmJHNnlQL31FOSRPKEUjKnZ6dTleO1FnLmxKOHpIYFVjPC4pX0c2UE8rOzo0VVh5N35xcCZHYig4YVQ0Qj4mJSpAR3Jz''@;'; put 'put ''IV5SUz5nVjMoKjBfWkBOY0skeC4yRFNiPyw0VDorLiYxUGl9L1pRJVRXJkVxITRfal9IcX5zW1YzXn5HT058aVVPbnsuRyUhSVo5MSNNMVg0PkczdUAxUU5nMDt4MlE4Zih3MVhuZHtFQzRONyMuIlZhIlByLGh6VT9BcT1pdiFubDFNbitbJEsiVm8xcGZlKixXQnhiXV4mZ05KRSpUdkw1cztJ''@;'; put 'put ''bEljQEtVKisjYHhhJH5QKmUoUmpGZUdtbz9WSnJAK1pINzNuSixVSiFQOzxtaFI2JS56ak58OzlDY0svKTsqZXV1UVFrNENqelcxWHhbdn5IS3M+Y2R6c1AqMz1RPEZtVj5oa3wjfTdSQFkocCw3dnBSTn1dMjFbd0lOVExxV3g6JmlHe1NYNz01flE1WkRkZHR0VU1dd2U2bCFUP3c+eH54OWtm''@;'; put 'put ''Rl4sQnVZe3p0NTJPMCNOWTpmZ3E8Y0tbbl9pTGEvcHVlIjI8bnJlLFl3NlE6fi4jdyROS3sqb00veEZsOEssYDkua3B6MlN7fkhsQyNoKH5XZnU5TXpGVzFZIXlPUSthRVh4Ol8veWhRfX5LVEBZaCM4ZFk1TDQ3eXJSdVo9YHYwJm81bmFmYklkMXtXcGg1ZF5MeigsdURBP3xuaXMpKnc3OytX''@;'; put 'put ''Til0eSVoI35XTSRKMV5bbzpJMFRYPU1IWDZnO1QoIzQxOkFwM1VhfSxuUmJSWElVe1trPV1TJSQqaFJXdUBeKUdiP1k9dDFpLHl1ZEFCYVMwI3pbX0VxNEh2R1JWQzw2UTslUSg8TTYoOlMyWWU0fWI3Xnd+eip9UF02biRNMXBwQDgoTmU5Q1Y7cjJlRnppZThuSkApJmxGRTk7RXUmcF50K1hK''@;'; put 'put ''VThaN1I/PT16TEV7Xy5iZ0lWb2ZsS3Emd0htKkBbflYrL21eLk1wKkBDNWFle0UlOmh+YGhMdDVgdWlwZEJiVlEsL0drfT1gXytLPXoxW3Q6eVJDYCNlKEUqWlI3ZG1BflQqWW02IWtfJmEmM31ldE00ITM1N10reU8vTFJRX2BReiRvZXM/KDxzLz5hPHszSC5RaCYsJC9TZXpsNTtPLEBTXkZI''@;'; put 'put ''PFVIZSQoY11qXSV1YlQkbUteOXs8cXgvP0kmSWpAM0hAUT9+WFVFdzJXSno4Y11DaUtjTCVDc34/QXAraVttUzV4I11EZUQpPGFXKjxVWXRHYlg9aGBJKixPRVFHT0R+VjpbMUM5QDU1UUZyNVJjVSljVnd5LmpER34sY0FwXypGTUxxX0gvVUY0enxva1YvSXBJcTJ2Oj5DRElIc1UuMmRbMDM6''@;'; put 'put ''UUQrRmU2TXl5ViImc0pAVmdTcVZSfGFienI9c3g/TDYxTzw/aG1AIUlEcSRFMDp6cCkoZ3A4UEJgMT0rd0xnV0BuclhTSSgoe1NHTHA8MD0vSWpLTXgwQVImZXVzYUJOKTY9UDo6Omg0V1lqeGhraCVWYiUlci5IQk1gSDd7bz9pWGJ3LFBMM3pMU0h2cDU4YlB2NHhdPykoUkslTT4lMCRnSUtx''@;'; put 'put ''akgmIkxEN2RAVUpxRV8yaHZafCJKb3ZlOzEpUkwxU0lURHB7eC4mdUlsOVlLWVtpU14oTT5sPjtCbktZaVpUek1KciREQ1g5aX4+KDx5aVtMVkA7dDtvT1Q4UmN7Pn4uZCJidlMsNjxdSEcpeiYmKmhzOF5KTGtBQUMjL2tgPDxud0JvJEpVSCFyVzdiaGFUeVVuaj10Vy4mTEx7RyUjdEQudH1a''@;'; put 'put ''TTA2YHZibGw2fHBsXjJpUW5vLCtCaH53bkEydEU1RT8/T2x8JGVUQ3pHdnRoRzFJTTpGaFJscmVFOjM+I198ZnRjci98K0JQQnAvXyFybEk8eyJYbHhHSC5DXnskPz41SlVDIyROb0N1bEw2fXM8dyZndVdhYzt8cTNPKX5YKSFEfVFCM2h0VTpbOlZGJUZGPjVJeldHWlBrbWNqYjRwfG18OitN''@;'; put 'put ''eCE2T1cmJDp9a1d8QlpnQlU+MEo7V3t7ZTBPeSJNcEhJaU9oZTgpM3ZKXiZAKmpnfiNEREd7cXRkbz1GWUBLYndRNT5NWDI7YGlZJVdWQXN2UiY0RXc7RE9VdWlqM3EuJn46XnQ2LCgjMEY/TVtfIVpPLzloJF5Vc2dESEZrdEpjMktFSUBJNHdfI0IrNVY/RlM5dnRydlovMmh9NGdpVzYvaklU''@;'; put 'put ''a0FUUW9gbG9nRVY+OkB7fGlyeE55andGSyozUzZ6Vy99NGJxWH0iIlU3Iyp2Lk83IkQ6RSpqZUNLfFFTTGRILEdHekRfQ1NgKjEkfHh0cnohJjQyVlB1Xmd1MFJFeW8pIVV0b2Aqd0ZtPVVWMz5YaDRjNUtLXiM5JDRBOWYhYVRNNk0xL2gmdUJrTng1X2o/fTw/RncsIXVbS3pMP05oJHZCTCxi''@;'; put 'put ''NytbekRTeWRFOmQoJCFnb0pvQTUjfVAwdnx0Y21nKCltTj90Qz5LR3tfQiNKfUVbOCZid3NmRHgpRXtJTUwkbCw0LzFYV35oOEY1cEwxX2wiY1NYRlZnZEhZViVoPVNUKzZSNGsqZnVEa1FdM21De3dLPEhGTXJUZ19tN3BwQk5ESX0wcW1nUS9gdUA6dFNodkFTVlJQNUpoJXVgOyh3PzVnSXph''@;'; put 'put ''LClZYEVjVUQwU1VzKXJVMihSVUl8TjB4X2pDTTw8LmlCXjB7PzI6NEZYJEBJcSFWQldqe35Hd3gvb05oeFAhT2hvQWdFTnw9JDhZa0k/JG50NEB5KXd+JjV9KCVlKlB+UGF+SF12ZS9RPCwwP0hfMUV1P3BZQ11qWilvc3N8YWw5SihjM3kpblQ1ejROLj1HJGZIaC5aQnEwdjxnKkgpNWB6ZDBf''@;'; put 'put ''PzdSeFVSQCsiKy50UmQ4SXUxNm5WKDFrZCVUJHJ2VmJGZDIjMjc0XSMjaDJCOE9CLDt6LFk3RXRMQmFBVENiYmN1OXxxQDxgQGNtTUtJQS44ZDR+P3oudGM6JXBPa0kuYHluKzAwfTVBXn45aypnRDBSNVdGYVRQanY2WEhLVGssVHVZVyZZUio6d247WzwxMkx1JlhAPEMseU86fXQreCokd1ti''@;'; put 'put ''V1NOS1k/dF49YGtpMklVTXUrO2hBdTIqd2BtMUFrWFEiRTB0dXZ9YS5lb3hmXm9fR1QzfUNENEhLaSZ0e0R6ZnhtUyxdenp0MypzeGtRRGd3KnBLLDovPH18RypOWHpZfmFLNVs9aENydC81NEJoIW5leEs/UXAyJiMiKnFDV1BtZVllJUZLYCJ1SDA4RnZzVFhsPyhtJnxSSUkpWF9RYmRbeUR3''@;'; put 'put ''QzhAZmAwPTkuUDNhMj9ZRFNDJSZlJUt2SlVeUSpacGFeVmdoPU8hS2M2OHBiNX4zfSp7VjI0UUVkcEZCP2dTLGZifilGbjxZYDJrQH5CMW5BYjM1UzpsOFthJl9FbV9HanJkOSQxX1NqdXghLC9jXUwpSi5gNT9BRDYlZ3cmfi86NGksKHV7WjN5XkVQaztyYGdHTjhkQSwxMkJJe2U7WmBRZm8l''@;'; put 'put ''LHdVI0c8KV8lQ0lkP3MsWUAhVjJVOEVQa3FqKnE5dGQ5Y3B8ODlLNmtReCN1alApVVJlPnB5Jl9tSTdtMUZHfGlbS1tsVitxTSNPNVBgeFQwLj8hZ2pNW01AKT9JNlhuS1J6bHx5JWZ1bmpqcGU+M15vNSp9Pz9tUDVSaldDVVB8fktJLkxRaHFqUVQ+JWZQbHVMOEl5VDk2dlVMOyU5UlluTUd5''@;'; put 'put ''c1MoJDAiO0A4OClkcFZscFRURzR7IloreFZUMkYkVDBfNEdJMElzbDtELmFJTV8mQVEkcHt7UDBybixkblg/PG8vbW4hQFtySXgpcmwwQjR+W2xpeyx4clQuKkspIzQhV0ReNmdXZHxeXVZeeWcrTlpYdyUmV10yeXVCLGFLVShnNGxLSjUscUYrVSRbelEzVSRBIUUiMDdrb0MxMlsoeUJQXmVD''@;'; put 'put ''U0U1dFFQO0IyRVAwLik9TTlbTnZCJkhNUChXS3YoY0sscjkvbUdZWTh7UUZuOD5wW08xckRzfWo+UGdTI182UDNyeTUqW1I3cWdsUn5oQ0YpRi8wY2tOR2soNTk9RH5+ZmxUajxGVlgyezM9Y2l1SH44OGtIYU96MS5ZW1g1QyVLPHxIPERAW2xweUdEeyRfZTxiVE5ZLnx9djJlWCskVSVsN0pN''@;'; put 'put ''OlNoV0skS2NbWUlMKzU5dGh3ODJZRW90Xm5gNlFjeVI6W0B2bXFeYjVjbH5vNEEvOVg1aCF0Qyw3eForPkNwbHAxLypyPU9xbGdLPno1TkJ0WkRtXVNhR0tFXTA1LFtUcDhvNFZLZ0B4XVNWTjxhKHBCZHh2K1A7YiFwZTZJaGYyTVpaMHdMUzVYaExOcyZTaGkySitddFh6SjZkaFF1K1UrZzkj''@;'; put 'put ''XWxWcGo3ME1SW2MqQiVzOkUjaiomcCF2Q0pLIVpRI31ZZXkvXmkud0xOdlV6aGdsKjM1fCs0T2JFZVYzc2VvZlAjNy4zaTwoc2pQTTFkRGBWX083KnIyeVFNJSQhUEdOZHQuXjpeeCgzLGQyVk1SK1ZMWSFCc1smcjJSKyV3dWw4MkorIT9mMlIrTyhlI1FHVjZJWiJkaGxwXnBkRGBtMHFNI2xu''@;'; put 'put ''MS5PU1QsfCglPl1keFtqaVkrPXM+XjY3ZG5wZ18oZEZtTFZiY2l0NXRRRm1NI2x3S1RUfkIpOHlWfUUhYTI2QyVrPyo8Ojg/W01Lci9xVW1tODIubkJUPUc9NDpPKkhedHFnKE5ONSxHeGN3cVU3bWwpU2YuQDVQNyNfXlBnREQlNF8mU30hJSN+ZFU2SG1TaDZkZ0p2SjtkTCFneno8eTY+LnEo''@;'; put 'put ''bH5JRm4uIWx+OG85XiFnUzJkfCZQM0dXWzEyQWdEeWN0Yzoybi9PZGhedFJgSk1OODldbHMye3ZSc05PJF14N0lFQlE7TnRoTH1LaChlRE5JR3ohVEhqMVE6UWNIflFXd1ZHNmM1Jm9UMz9URHVhe0p+JWciZz0ze2Y4W3I1ciV1OjQxMyFlX05oRypUS1c2aXZRK3RZS2xoMjNCV3d2JUIzUlZz''@;'; put 'put ''MlFbOzM3QzdHP1RkaH5yN0ZEPFMzM0Q0VzRtLjomS3NDb3BlMihuYWk0aG4oUH0vSl9sfj5TMHUhLFVDKG5LUE9BaiJIX2piVVghKWRDO1VUdGVxUT4hOjthRXFbYz5GaU9YQGwvT0NyZSlWRk5deiNkPVk6ei4jUEp4fUs6LFVFW3JHcCNLfktJWytFV1hLTFloQmxQZmNFZiF3NV5XXyFBO3Ex''@;'; put 'put ''MTdQaTJaaDVWK2BwXXp8eXRUR14mYWpCUj8qWU4iKVBnQkwlSlMpQ1ZgT35OfTpzP2JIQGJrP35sS3RdbHJnayg5ZEVBZFVsfCZiUkNhQldEU1RNdmpTTDozY3t7YEQyMEtTVDZrSklAWVgvQzNRdEQ9TEhiKm5TSyxsKX1oN1hpNDhTTUs7MktJJGMjV3o7UnZHXVEwL3UlL2g3clJ4eERaR2I4''@;'; put 'put ''TWVDMW9Laz1CP2lxbz54anIjIU1VYjE8YnZVVSFec2lgLypEa3lEZUgiUF9VXTs3Ul52ezlWYFBAQ3FfNCpyanM3VnQrPmg3e0NtJXImJChAMS93cTxoNk5uZkshPV8uZWBZWytNOixhY1dVMFdhOS4mcCtYazs0T2ZdYEZlSHl2UCopWnJCNVM0TGA/eVE6ZztCVEk7JVs0fGBbJHx5aHZaNyhE''@;'; put 'put ''OXI8WXZGfGx1QTM5PElJPkdhImg2IXluYnt7YD5sTVUjZ1FmZnFtXX1VeS9yYW5TaV5aYiJGZjdzPXUyaSR9MjBuImI7VWA3Y0ZAQmcvWS5jM31CQGRMVm5FVFhsOmpIYDdWYSF1I1lseSEybzUlMTlnX1lbJkYmSVF+LnR9QFUsKXM6eV0xMzQrZkpZVDRhWCtLeE5bJXdZJV9JUHEkX29dYEA7''@;'; put 'put ''SXw/M1BHKDdfZ1ZZfCFdM1BFYyI2ayZYJmxLWWVQUyY/RiU1LmspOm5rcFJIWV1sJHNVWixQLlB2L1U0JTd6XyZtJCUkWXh0WXljPXAjallgKkphVkIrZz9uXkFAWWZ2VXhEZm08NG9edDVgPz56fFleKVovez85aCYmTmR6QENfbT0ufF4zVUl5UWRGVGE/UXgyTVs0T31ISndMOkpAcGlkZDhk''@;'; put 'put ''KCx4eiJ7dVZRUHtkbTA4Mi5kSEA7NzdhaHlNW1YlJltIMEc1KFVMNTc9UDFPWCs1UXApbjIwWXdkZEVYcmo5MmFjaF5wZEF0bmNtMD9kU2gxYSQ2Q1RPWEk1dkwoUjFmendzP2E2OlUka3hdXiFCXTcsOXBZZlhjbHheZUU7LGFDUiIsTVI5Z1c6LmoqZmlRekdIKFs9RHRWNGl2JDN1OmBpMUFy''@;'; put 'put ''ekJiVm1FeS5CamFSbyVwISF6RHMucjc4IU5VPXhZQ3JARks0bns2YztJdzV6K2F0c2tKciltTTZXTElnUzFCZj93XzJIUV1vWF9Jb0dBNi4xV2ovYzY+b3ZgQCZsJFszJHJTZV98P3JgY2EjOnNzNlhTUllKX3xqT1ssXUA/bj1QSzI6VlYpR01TOHJrWnxeRDM4fUw2PlZDUmZzMTd2NlI3YFBl''@;'; put 'put ''Qyphe3Yufjp5NlpGeyYpJVNlLylSeGo2YTZeQHp4KzQsLnUpWyFwdzdNNnI4Q3M+MSZ8IThsX0gqNzV7Q213JGpyZSREanJ6OXFFYW4qYXFKdXs3XXV7Nzo4WGIiMFJkU0ZrLFJibWxRdUt3MjE+MyFSYltHeWwsP0wscz9XTFIpMCgsVTI2N2ouTjhYT2Q5Rjp0TW9AdHxgajdlQGpjODtQNWhM''@;'; put 'put ''UlIyMy4ya3hgJXdFP05TXzM0NyE+d1JPfUczbUo/PDs2OH5qM2EqRlNuSDJud18mZy4rLiR5QmdpZWQpfFA1X2lfYD8pQW1lMCU0TlBnYGpqWTp1PG4hbSEjXmJyfjt5akdhXjU+a0poSHpVMXUyVip0P193PXZtfF1uemYoRmNSfkd7Mnx6YFRoeD50PDMjXjd2I1ZJcVlPdXpJK2s8YTw2LHNZ''@;'; put 'put ''dWI7Q2Zia0dvT093Qlh0VEg8R3FNPj5bUH1lQXM+PnxfRFUqMHBDPGkraFo0PWcjMiw+PzkmRm1VaEhnUHtAdjFFcXwqaywpKlFKRD5IP0ttKT9fOikrUXBxUT9fJUZuL2FtdzxYYFZHJmIxc3p+UFZaN18sWUlBaFdEcl9Ia2FWP3xxdzdrMDxPU0FFXVRHM2w4OCR5Izk0ZFF9eEJ+SGxEbjhC''@;'; put 'put ''N3tAdFMjM1owKX09O21TT3E/KW5vJHxhX0dgb2hBfkQ7SWdMJj5ZLCJzMnNKQ0xRPExEQHJARll0ejlPak8jckQqKXQxL0Z7MmpNemk4YGVrTzxhbSh1TGAzeXd1dHNIdTY/ey5CcjpjQGJtd3M3d0kpTEkmO1ZxRjxOMjNma2ZDcmhic28rN21tJEdBLz9dNTF3T3goXTlLdGsqe208P18pVTxl''@;'; put 'put ''XzU1N1doM3xMK1M2dykrJWVJZ3JVMmg3O1ssNTVqUXgmTWJAOSZrPGFkV3lxSkRHK0Q6MDVNIjwjY2dtImg2IUkqUj9LWilPSDlvNWZPNmRnMihuQjt4LmU7SkdxOD1PO3peRzwjJnE/K3pDVT14JDdaWS40aiVfMWlJXyhrWGIqdzhVLyZ+UT9XLyxVNjY9YzJPJVliPTxraCRrZlJCeSxoe0Bv''@;'; put 'put ''WSp8eyZKdyYxYzBCKmpJW3FQcWxjOHxHX1glTjxkUnNYXWksXUhSWVYocXVMWzFvSDgxZXksdSQpWEh2fE9hIyFPSDQ4eE54RDBrJlczWGp2aDRiWHh4aD8mVFpJKXUsV2FldTZ3K0A+LmdgSjklUWRIXk1SK1N+OVREI182SXpNdjthZFclfGF7LlQ/KiFQPWxLRnc3O0plc2dKZyouU2Urald5''@;'; put 'put ''OyxtSWM0I0V7O2oubnsrIyVHVXN+ZzhtbS9JUD97S0p7USV8cWsxOCoiQ2VudGRRMldQfWRJIWVvTk5+Szg4dWYja0JWaUt4PyooI2ovQS95c15yIyNQKkhKIXBudHNeaCpbV0ZdUk94b25SSnpRWTM3XkBaREJYeTMqemQyZk9sQEZJM3IoO0BkRX52TzBHNW9GKkc+LFU/bGFfdD9pUF17S18z''@;'; put 'put ''Wlg1KDpiTkxHaEtsbzcya2wpenZJbiFsPDhabktdKmUzR046NHBZKGxwSixpSGdjNmEsZkRBOS4+YnBufGJOfiEsYFtyW3dPI2A7filEdU9la0FxKFlKR2wjTipDKXVzIVFQV2JUOCFmJFRMbiI/Ul5mTnBiKVByIT5ZUFY4WEpeMjBmWml0LFtuX3pIWUBpOCE4OWdkWzk0bzwsJHxvLyNwZSZ4''@;'; put 'put ''KXNtTzE3PzJzc114SV4sKkFpV304SWN6aiNTOlhaaldVMEQmMnlJXkJqOl1MOT4wc0kiciNmNXdNSG88PjdlamRMR0o3Qlo0alpoRlghWTRBJlkpVj1XYFIrRilacC5Eem5IV1c4M3Y+YkIuUXFmdGZ1VjEqd3dTUldbTm9FZXNmR0FDJVcpeDc+VF5XM1YlKEVeLE1bRWw2Wl5xenFIfkhDK3tx''@;'; put 'put ''e2RTJV4raHZwIVNVQH51RCU4eTxTSzM+K2h5V2huMmBpIzNxdGddLk5ZVkJbTmBlWDhdfUlbbGJ4VX0vT2BfI2k5SV0xMzgqd2V7RFBEQl1AWmJdT0pRWiE7RS97ZV91MSxpbn15aFhiZkc2dyJOcz5USStaNU9hPU1TVTZwQH50Y3xBWS9eam88dE85U3N8XjBOVSFueDlwQU5CLkJAVm58MFd4''@;'; put 'put ''VVs4eiNObVBKdyMuOjhNTyRoMV9ja3Rlcm9jZzNDV24qY0dOPkBQaywxfW1PM0IuQkArUityOD9peT8zX3JgVWJCRURjQGdEYz9STylHZjYrLCg7ZjlzQ3dYQiU2aXdpNmRAWDVWdVh8RlhhWHsmZ1N2eitQeHQ1bE5pWV9WPVp1XUE1ZFkpcTI7KmgsVlk8MnY2P2FBbSRicC9YKUAuRzF3Iixo''@;'; put 'put ''MmkqMCxtZUopaWV0Pj56Tl9rWCJUbUglSTQ1SnU/fH0md2VWbSJvPWsvamYkbjVYYFYkOz13QGl5UkdxKyNtLGFxbzEmWS8kaG8kVzskbyQlaTdMbTo4S3o/X0IrY3tUMTl3XmUwKmlycVtMK15jRGlZbj8sVmVacG81cFplOl8rZy9waCZYOWo3MVNVQ1szYXcmXzNeNUdxMHM6SlBsNnpyZ3U4''@;'; put 'put ''R0hSZWAsc2cieGBTeCxCMnQuLiRoQ0JRZy4/cEE8Vm0+a0RJNkwsSH0xemFzXT5STFp+fGUxMk15bDxlQjg0YXgxKFV9ZVtnIWdOZTE1S2lrby5ZZjNFeFN6M0NSdSNYJSlMJWJ6YXpOZ3ouPWhmRStISGV2Jjl7RXs0LDpnXnk0KUwlNE1vR3JAcUksLDU8LFQ4V252TX5fNi93RlYkJnZHODFr''@;'; put 'put ''UURoTik0PFJ+bUxBelpONXhSRn5BV3RlZU5YdXEockQqLEIzNHNKW15XVS5RXThkNm9nUXFhZj5yOVJJR1ZLVixFLihlVjU4fXBMI3t4aH0hImV4dTdoLEA5XWolPkBeNWoxREQ1djlHVjZ0SC8kMjNeWU5TPWcwXXtwVUYxbTxwWCFIOnw+M0ZhVzNMTlMiUl4xKnEmJT8lbDJaa3RWOWV0bz8x''@;'; put 'put ''SElHX0QhV2h2SC9ycjZCTWlJREdBXjtRR001O1B3MllHWnpWVHhNeUF3OCVpcEplT1BMO2V5cXZROF8lT3ltb0NNXW1pUTh6ODs5LGZabXJVKWttIkRoU2p4dlJoWGAzfnx0Lms1UmJsNngpPz9rNnIqe19EP1NUOnciNUVJP2lSL0Uxckcvez9gT2VbWiVsOj8qfmxIQld2Qk89cmldVG95eUE9''@;'; put 'put ''Pjgreyg5PVdXVkY9LE5rYjdOa193RStjVHRkQjNJLzpuPmtRMmVufk5OM2liQTAkZHhvT2JiL2tjaS5jdkM1fGJjKiRkZzVYYixLLHUjd3VHKnVAdG9eJlV1d2tvSTtwdkl+NS5CS1lBWVsiN3I1dGZ5V0RqdF5jJEc8SDk4R3s7PktBSHFUby5KdEcrZm5KPWledjV3SE07dTxOYjdgfXpoemIk''@;'; put 'put ''NmAzR0FVVm0rbkFhQW1HRWpNISM1LGomYCVedGR0PnA+QnI8UGQ+KzVvbzNhMmleYC9+fCZjSTklT1liO1lnJW9sL1JJOGt5fSQ6PFE7NGNPKk5iNCVZYkdpN1p3NWN1V1puM1pKeHYxTTsyQlRgQGY/aEJSMmhWQlBeYTYzbWdNZi40fTk8aURqOzJhST1URXNfS08qRH5HQ0I2eX5ARUQrRTJ1''@;'; put 'put ''JDNlYzRjY1g4OmZBQDxVbnlBMHpKfFYwXTRIbGwsaWcxSjA2NkduNCU7Q2Y4VGFLaVQkekxyQ0RtNSRyQ2wkYy4wRyIzPzQ7WkdUIW49c25tbGVycDBeYnt4VFFNOi8pfCFJWDp5d1Z6eCFmNiQ2bnZuey9ELFhTa2pZal1IP3BUKDx0b3VlVSxIRiFRSW1DM0tmPiw1YC5iQVRqNjh1YGROLkhA''@;'; put 'put ''V1VJQFZgOjsyYmFVPnN1ZyJyVEdsWV8vU2kjeFc4fEo/WXJLaitFN158Si58Z2hVbyRmdWhEaGleWEx9ZiokOnRPa2NMJSFEXUV+S2JwPWxWPTR4KyluVGppbSxEdkg9by99NkdzaEEpcmNGYzJAW2JKQy9fRilJZTlPKmxeQjwzfCZQOHVYc1BkMnNaJThLJkkoLnVbfXZBL2tsOGBWS2BZTCtR''@;'; put 'put ''SkRBcWlKSUVqNDUkR3BxXiR1Y1ghNWAxOCRkUUNbOndKLEh1d09odGl9YltKfmUiNmxKJkd6TVZ5WiY9JFsoWClCVClEXnFCS0cyT2VWZ0ZSY3AyIUI4M3VYYnM5eX41Ri4zfmA5THRxeTJIWUZAO1d8Yi90bl1DOT1QRncuZjlhNyFAI3J9Wzgpaks8SVMqSFQhdkNyNThRPHQmUnl4Sz8iR3dS''@;'; put 'put ''TStbbEpBIyNDUEZ3TjVteHReKS5gPTtuXlRCO0tLKmNwUCwvXXQwNklmfk4vPEU1SThyVzt8fXdtUjtfUG8pOCZUKF8yKzNPYDJpfHhSfk5qeG53P0xvPUFBfFYxaTExM2w/PylLVz1KT35mNCt4ZlYmaWMlNT4zSFNoY2JhVHdnRl5yTmxhMX0qY0syNC54PSlHVHBIWGwmbkdRU2hSM10mNEFQ''@;'; put 'put ''bDhwUGpGIWV4OWM4bX1WTUBHVFAhO2FiVVdTQT96LGt2JW1leDpdNGdJInI2cmxsbyF4R29HOHkoKStFLlJ3JnIpKShDKE00NFpMbFNzZSJNLFRYWTYrenl8eTBkcUcyIXd2ImI0LClfOzZXVjVgWHtOLiRbLE4kYXNiNjY4VC9WQHZzejc8fDszfFchU2BeYURtfW0ub3JJMD12dzBIbktQI3Nm''@;'; put 'put ''P28wLkdWVylWcT1bZ1k+KEVvZ0IvZVB5LFVQKWpLbk9RR18+SEQ+b3RfZVtSMXUyKWcwT3pNRU42NjtANDk8MHUyPml6bnZde04wPSp8ezdiLk5bIXFoRklwaj9rOHUwWWE+QDV3SXB7JnwmLFIlKmNRYHVuZ3EjNSxkXmcvOTIuW2YjL2dsUT93TUkkVnQmNiRuZEQ5SilGYG1bV1tLYm1aJnhu''@;'; put 'put ''Z2pxTSlWdCphMUVnSjs7Ji59eDJXMlY6cnpsckVCNkprXmlqTyxrUkpZKkc9I25ub1U8NXhKRzA+MXZsRWYwNWt7YSpUYVFIMCsqPTVMPD5lOikpdjlxVGooPHxrS3xhVTZgMUg9fTpWcmg3IzA4L19MIWh9Jnd1S08jSndLLn50bi9qdj9ecVZHIntWNWAmYD8yVj44OC5jcG9JN0JNZUo3W0BI''@;'; put 'put ''RTZMa2pySlB3N3ZKd3hPTF91YE9EZyRJOklwcT5JdGQyJn0idih9Ujc1UWhHOzAzZEd5cGVrb3Y2P3NwdndjcHpbU01ZNT5UViEhYElIQyppfFRwSlk3SElMYSgqakwkW3h2PVRGS1lFZ3Elc0FPZWkvPixsfT9qT1tQbjF3NyxEfSpWcCZzW2JJdWg4SXdta2huQiIzRThKaFE8P2Q/fSQyWFdD''@;'; put 'put ''RWM1MFFBPDYrbUhYWVkuTjAoeX45NTxnJm9FWSpOdWgpfDtzWW1IU3h3MjJ8RG1PJD1pQ3dSUlgjOlJgMz8oNER2bVh1LGQuXykuVGVdWzEsVjg5MnMxXmNQPWleQjgzb1tYN3M8d2M4dCZiRnIrNVtaKnNwNjFIK1JMcm1TSiRrblBpLiJkUTs4VStjWU1ecj03YmprKnt5RDc3RnRkRDhiKncm''@;'; put 'put ''MjtNdFhiQE4iWjB3WUp2ZSJWcEhUaSQ2Llp9eiZFa0kjVlgpdEJCOTZAbzVBUCE5ZjlBZUc4OFEsdDd1Lkw7fGI7XVd5MnYoNDNedTVpa3RybjsvSEY2cjA2YWw6VlA2ZmwwUUZQS0d8VlFnNitVK053OnxLcX00fT0sVHl8P3IqYyJWJXQ2P21yL0JCVHZhO1Y9S0RHSThMOXJORyEzMnV5Yi9r''@;'; put 'put ''SGZaQnRLTGR6JTJwL1ZxS3khKHFWJVJEIko/X0UzKzs/O2E1cGxWLFhobFpkclNsS2YwP25HeXA6L0UuTzhZIlBtVFVSMW1qP35tUDlmPTUsfEpGTF0rSHltbnkmKjgoUEEuO0o6NG51Lzx3dVpLdk0/e1VocDYjOWgmJGQrY1FVLnU/WUNIOW1MP34+fGc9ampZQz1dSkpKTzM2bmR6T1sqViks''@;'; put 'put ''VGBuTkpMZT9qNzFhZGUmeGM2eClZSCFeP19fZEtpVCRFW1dLVlEhcD1tSHxSek14YGw9JXRPamBraWMxR0p2WlUpLj1ZOHBjXVc6Piw1Vl5iYE5RfUU7IjdyTDshZG0kL0kvTGlQKiRIJVtPIXVDOG0ieSgjKWNaJlU/WjxjOjQ0eCspN0hDVlF4W30jfSRvckdlOk5yNkZ7XXh+LkljXjhSUU0y''@;'; put 'put ''NmY6byQ6dDd+dHYoVGFwa0YzOTFdUmZUUklefjlIZn4sdyheel0lW3Q3cTcsJWJhMztDYG9UVFJvJDJOTDJfLjN4RlVvXkBMMXJHa2EhXV5OLHBNLFY6eW0qe2dMbVA/ZTg3K0x9WHM5fFVIISs/PkBNZU9IRjYoaWlqX3FpT0kiWExedjdwXTNITDRqTnIuOGl6ODtUbytfJDloRE19fDhoRCxE''@;'; put 'put ''Wyg5OT1QPWtlTF0oZF5QU0JMK1M/Pi4jZD1oUmV+eXJ6Tl0sISJNbnZSdHZeSl9YZXtfMzJ4ImJKIVA5fUtbImI5XVpHcyRCV2dOZTx8PiJZUX5RezIwOCRTTyZbTF5Nd2xnZSh1b3cxbixJfGA6O25zOilnRUl2JX5jcEQiY2dBei8yK31XSzU0JjE1VkNhcWBOfDZATmN1MTFoLkBTPCVaUyhn''@;'; put 'put ''REw4RFNtN3N9Ii86Ri5+d0R4TWJYayNwb0I+cCxrcXFJaUMvTkFFYnZGXj5MKjdrZWVqVTlbIW5mSzp6I05eXT00Zkgrbkd+JDJZMmhjdD5xTkJ0dj8uaEw1P3A+KFdVWW8mdHRvdyhpJCtAPnc2dnlKejU9fGw2L1B5cmVlO1klU0pGJDRAP1VCTihuYDZOWzMzUiEwWCh8R0NZWmJ6NT1iSkY6''@;'; put 'put ''YWglakUoYj8oLD1PZmo1cFVoRUApVkVdPGhTfW1JaUJjIX10XnIwMD5nNnpRJD5AaXVQVjhXOCFlYyVbVDE7az4lKy9TZFdqdDhUPVhhai5FSExGOFh9dDsqRTYqNGp0RD17MHw5XWlHS31YQDc1Y1JIKEImaj8hZlJxXV86Oyouaz83NnhBbGV4M1sscSl5IjFqQ2xLI3doSFBtd0U4T19GOyV9''@;'; put 'put ''TntiL3RgKCZfYiY8ZWIwdzxIczZyVE8yKiVwdl1pJjsjcWBtOCsxeX5qP1YlTkFPdTtwO2UkZDNMTU1HIWRyZHNYaHpMel5jalZAe1lveUpgI3oyO0JYV3R8YjpZdTI5TD4kVzhwREI7eUhFPChEbUg/Qk9nM3ckL3RAOWk3VUE7ZWh0eFN8SjR5TD5ydHZaSUM8QU1nPH1JW1JYdkU/Ryk1KXdf''@;'; put 'put ''JUtNIVlqWGJPcWVqWiVYKl0sS2Y1Tk1FIjElWy9WYEpbVlZpVyxeM0B9IkxvS0NIXTsiUntocmxkZUxlSGZgWS9eeykwTDYyPXBoLGo/JEtSZkFeRXxeQlUrZTNvKUc1cVs/UGdzbiksZytyNEYmaj92SS8xMXRzdFkkNlhiZXBtUX5LQiM/VENEaGYlREJdU1B1OjArZUhQbCxWcEBtc0JUe1ZU''@;'; put 'put ''ektKVEdIOE0rWjU6VnVwO09jWXxjbk9WZjxlVkVsOjI4NEV4STZObSNOJmhqSiZGblFWaXRNKSpMP1Rke2FoODV+LnU+bnE5IlRPRig5cX10LCZGWCQhIj5HMz1CVT1jNUBNLk1YcChufFhxMSs/REk9S2QoaGlzInZPdTIofE5Fel1xTnJrL2F+al5MZVZEKWcqc3pEdTkwcWl2cEpxYV9pOy8s''@;'; put 'put ''SytSZkBdSmApazhvMWxpWWl6bjZVSTlQcHlKaUpsOX1VKGdEez1tOGZSSmk4emc0QjFmJFU7cGB5YyVsOHA5X0w2WSFdfSZ3MWxgO0A+X3FdQiQ0dGVtRzI8JWMlLmomIiFTNC5IRFB+Mj9oLFZvQ0kzUjVGNVA4KURYfEglKG9nR0thaElVRlQ2TXU8KX1mYllMTmtbaTBCaDQsUWlwOTRmcXBz''@;'; put 'put ''NGhmPFJtMk5gNEpMYiFIRnw7TnMuUlhNSXAxfn5KRkchUzFxR11UPkB2QncxfUlCS0B0PnRhWG5wJXBBOSo2ZFYjZHFHKz5jJUBFNi9lOVRRZiRuYzIveFFfeXIhaCtaQkN1UV5eWDNgWTl0X054KDV2bmBYaXleYDNHYFclS0RjVTd0eCpjbVImUGkuclkoK2V1JSNZW3phbDxWX1dnW1pla2lL''@;'; put 'put ''M3d1KCpMZ3F5NnlNck9mLkt+L1VDQENgeHo9OXY8UDJtSDM5N0pMTmdfYmNUISQ7eVhudXklZjk8Q1FdOzkxNDF5c3s4V1s7cUR1aDVDfHxVUy5kVndgME9FfmlqJmM4b29YXn19P2psJGp6a0s3Y0J3b29seWxvYH5NM2pCaFcwbktxQVVSUldhYFRDcT4hRGx2WFtNdmtBfG17VTY4SixjIlZI''@;'; put 'put ''OE1mT3c9OE91cnF+ODByckwrPURHLnZ8RHtiVjhqSFcqIUA+cFdATnRxVnpISUIlW1M5W0ZEfHFgbD8xWkwuP3lRVlNFPXFYZmVGd08vVVZyMWpMZ2FkKlF7RUlGWUY8OlkmLFQhNjpXUDByLmlUX0h3dndPdz82YEFvOnFLeSNkW1s1dH1TcG94ZXlgSCN1PCtjWlZ6dnIsSmZibEJtX2pDZWhe''@;'; put 'put ''PylHaVZEJEJBZD9jJmQwbCswb2l8eEJRXVc/ZEdkI3Q7OkpAPDcwTyQ8WklFKHlzZ14sYzNZI2BzMGJgWHFFLmc1OUMxZU53NFZKbSwlZWlPSD43fSxtRTt7KVsmQzhGWjkrYUR5K0MkQl5FfGouWkUvXVgxV3BCVWMoVnVXXXQ1dFh3TkQkQmhLJVhPKnxofWh3WnhAUCgkRTJfTlJBYUtfcmAv''@;'; put 'put ''UXZARUtATmJzdiQlJV01eVY2K20lWlYlaSUjQE19RmVSc2xfaipiTFp+ZF4qYnYxZiZKWGcvOEhKaUkoUCV1X2QwMlRRX25KdyJvKyV8KmZERmVEOzJIY3BafGwsbF58My9kUVN8WGtFV0NERHlkInVRUks+PzhBRV5JYCwpLk87KmhuWlU1bzJ7dTQpUG1VME5HODN4NUNhe3Y3c3hwXkQ5OGws''@;'; put 'put ''S28+OVZIXTVXbVV8L0t1e1d4NU1uYHkxdiJ+Q2xfcFdjc1EqclhzIUkqUWBJZ0l0c3xsSSR1MTdxJDEkfWRMR1hmUjovY0hMTEh2T3M3XmRjPkNHPypINWdJQjhBTTI4ckcsSXp8cT4sYyJWbllEN1oxKlJ9TTZdWTg2VTRCNW9MfXZKX3txRztiNFc/ciIsbkVAOFFoclFiTUwrLl08YVg+bTdu''@;'; put 'put ''RFV9dD9zLl51WmpmNWJSaioobmlZLCtMNU1pUjxeb2RnJkIuR3M/Rk0vaEliQUMoNChGeCgieXcwZ1lEUGk4Vzh7diRKbEQkMiFHaipQZ3E+UjhfMW9lfEQ5VFhsQXA7Q2cmd2lGT3JTa0sxS29oKi5PVzI3Uj9YQWVNNHZlMXFYSFkhM11fVF9kZjAvJGUlX2taVnNQWD0/Kktpc25QcX1tJFQu''@;'; put 'put ''P2p2Zj8sQTErNCo4Ik0uVldNdTJeKXBzXkRRaXl1ITszcVlmRG9AVnxCIXZZZmUhTz44bngyOHNXeHdMWj9TSlFmPEk+e1VoZElHOndnYWFIRUVdeXBaUTZZJnxTK1AmNFE3X01pVj0qZkdHeDJYel83QjtValRAPCFqNkp4Ul4zT3tbO2E4TE53Z0hXdSRMOFsyV3wvUW9SMmV6WFc+PC4kfnxb''@;'; put 'put ''VnNmSUdRZzI6fUowTlhsJEpzPi8pYltVMzVCXihsUjVHM3BzPypqa3ZEVDw3OTVENDN0O2lkUCQyKz9hYnF6Lzx5U1liOXFXaFIpPEBfaiMsNSkvUjpHQmt6YmlEN0lqeVp4Q2xbQHFSfihTZW0/O3xgNmQwXU86OXdtJCldITMyMF9TYGxQS2ltfF9TSHhgJn1iMTdqS3FTWDlvKylEc0kqfTpW''@;'; put 'put ''Jiosd2hjPyxwQHUheDJnXmxsV0lrU0wxUkwzNjA0PDdEZF5jUG81N0hvaWNDR3lzeFJPcj4rZk9HeS8lX0RJSnh7OV0lWkppfnYmOG8vYz4zMlpWUDwxXlRVan54aVBOWV5iYTEjdj1FO0lUTUReOHRyJG44ZzI5SWkqRFl2dnYkMWExRThKWzBaWU4oXnJgVzFtS3smJiU+ZzozXVZ4MjImeyxz''@;'; put 'put ''M20kdCVqMk46O1ohZnB6QlV8Jio2XWxxYUc1MDltcHtTSUZMZEohJW9iVEp5TFlrbEU2Qns1YnxaWlYsY1gyWlYrY2NSNks+cilRO2JXcCluLD9oKDU1dixEPiZTRlo4ZlY9YyZKWTJkbyVmU04pKkAld0BxT1AiMVshVDVFVVkqQDxnKUA8KipwLCVkN29uUyF3TTRha04zZ1lpekpVb299T0l3''@;'; put 'put ''MTwjaFAsd0RJYTd2L0wpdENNSyYvJmdTL1JqV2ptMkY5Nzs5WGh9XXA4dHIxKWYsPWtQPClAJj8+T011KXUzeDd2fFYudEx8PT8mckdma3J0ZC9pNzZQPSZqMVldYmpJOzNiOkxsfHZVO0A/azIue3JWTTkuUztKQW4zQ0dKcTE9PDkqaDBvNzgzKlJGO0xPdXByJHYyMmkjOCo6fCEuJjdyMG46''@;'; put 'put ''dGNZVFlRNnhsOV1td0hlLyRqOV48Kjh1MFByUWslVTA4PmdVenk3fFtOfDYldUhKOjYlTWw4ZjEycDNFJG4rbThCQlNsYDNleyJeZWRvdVRUT2ZlUDFDRkt1YD5sSGpON154KXxWZkQ4bmo0d0x1LkU2I3Rpems1a3h4O0pCbTlIeU9+ZSlZSkp1OlUydit3JmFIZUhoTWxAYmxqSEkqLkp5Z313''@;'; put 'put ''PmtAO3cpJWtaUTxZYnNEXSVQKTlqQ0hFSF1YUW52eCNBSyFZVSVDO0NuSV9MV147b31eby5KTVI9R31xfmIqZUE4TD84L1J5dilBM21CQnlHJVZFcXJYaC95PHRGdSxtPmVARlB8ZE11SjlQfGI3QmVIIlBaUkR8Z3UucmJARnZiK2F3fDEobmA1PlU6MnVBRlY4OTc1KHckPXlhVlYySmZvXz9j''@;'; put 'put ''Rnt6X3J+Pm9Td0hHbjBaU0R8OzJoYGJyM0hmNlVVamtvQSF9VXldeCFjK053fHdtUzMvOmEqME1lXilPTmlLez9RdjN0RyYheUwqWF5TTUZedyFIODs3JXxBRzYlPmxOWW85WUQ8bH47UU4ze0g8NSZZalc7dzg4JWQyfmRHYHppJEhMOEU4OkBLWXdSYC5jK0hPayNlcmcvTl4kZDE7djokTXZ6''@;'; put 'put ''W1ZsYk8+UzQvaGY2PEliMVNZVG1OWUJNM3Bie0xOVSY2JTB3OyFZT1plRVhtJikrSj9beWdkUjsvR2JZa0BOQFdoTVV+YkIle1BGcGFOIzFVeWwqLzlRaEF1LFlFO15rS0h6bDEoaG1oMGJxRjl+Xig8VX5rNVdpIT8oPEZaTXVEOXM8Q2hUPkdzez1dITo9OE9bazN5cGVMIk59JC9dRjNFQHgw''@;'; put 'put ''WVhRRE1zZXNLZUtPeFlHK2QmaVVlKD89a3svPVBQPixaU00uckpjU1AwLjdVc3g+eEEmdysqOShWMG0hL10lSD1kJERdbig3PyYhL1tIUSliREkicihwL3VOc1d6ZS9Ga0VAKCM/a19vOCQoSm14WSYkcmVjUH0sfXxkV3p1TCp3QGp6ODRsSU5kP0hpNH0qZ1ZpMD5iOnNpNj5saSRkL24mMWgw''@;'; put 'put ''U0NFVnpPeT4lYk9IZGR4NU1PWjwuejU7dk5WK10vaDhhd1pKKyk9JURdfkVjY2QsN3BrZU88N2JZajluc1VgXjRRJEpiYEhle2UiO3c/ZkwoekhzTjowSmBWWG02P0M7P0lyekRWRGQ+QFs5RFl4NEB0TXxoLH5AZUhYX2NnQFJNUD9EeyZ5WGxUXWNvNFpqPyRAK21pZXMhanJGZk1VSXVmSHxp''@;'; put 'put ''WlBoZWgoQEJpPmp8PmYuZE0hfnBGIzBSfndmflF2N15xP14xZi5GbjlacnRVPFN2aT5bRWFNMj99ZCVNOmVuO1N4YERnYT9YfTM8PWxtYE9RZ0NPOW13d2w2e113LzExSDpLdigsTnZib0xQNWdjQ0xFQlJmbmJiUEBjKmRXdCowVzBoKkFCKjU3WGZCT1VVcWlLaVlVY1FzOVh6QkZYMChgeEpJ''@;'; put 'put ''JkMqNXY3dGN7KSRBSFUiRkZ0NHd+NzlQKSJdVntHfihtTFA1ZnYhKzQrbUVwcCZOQGM7THpMQ0NSbmxKUUdrSFU2Lmh0dUJNaF5qU1hLRk9ZZipnNWQrOmxpQ2Q0Um9uQGMrOi9GZVpmZGJlQTx+TEhhcis3XyxHekIrbk10NHdmSjBLNG9vT2JELEIieUU2V0BxX3d3PEUybklCVUhyKy5bcFZ4''@;'; put 'put ''WCRIUGQqZGJPWGUsREpHP2lPRyo1djdaRHhXYyk6KHtSfExQNUE4IUNib3BucDQzYzZGMWNBZVpCKUxSQ15IcHZ+V2NZR2QwUVlAclVRP19YN35+ZjQwNiZGZCw5JG1obX1FJXdwPE15QTV3UHJPVFRBUEAhTygmYUIxaiFjeVpHa2tjY21ISEEvSmBpTCRFQE9kOkE6N3Z7aXpJZWdiM0wvSjU3''@;'; put 'put ''RXdeYE8wXkY/QnJuUHZ7dVo0OEYxY2RYXzAyUi9GR0NfaDlGSXpvNCU8VlJ7Q0tNVGoiQ3x9RTZzdXtRYFhPMHUweVdTT3V4ZU9hU3xMakdnbTZhY3Y0KF1OWSlGR3N3UVcjZnRCNTI6JkNQVXd9T195e0csJkFZU0opOjJZImRYR1FBRHRYTDpDZUdvTzMvJl8va3g3Und5USVxWG05UyJ5RTZq''@;'; put 'put ''Kk1oa1NJdTthX1grTWp6U0tFdXgoTiZxRnRaOVhGQklDYj96KClISUJVSEB2RCkjW0dCKXUlNF92OiZnWW9ZVV8uREY4UFZec0k4RV0sLGY8MGVCSFI/OH0yX2J2VmZjSTRDLkMoQXg2b0hob307USEsbmFLdGE3ITZYPV0hOHZTKWgodjQ6fGYkR1U9fnxgfTNxZF07NCopNkpVUil8QkI2NDg/''@;'; put 'put ''fld6Wl80eGRPPGtJV3hdcU46QzNbY3dDMWNkMGBQNjZ3YlliQS9XY05mc2EpVjRePU83TT5ecSNdJm1DanxveUdKJipbPHxJZntdZkhrIy9xWGJEPiU0dl9jSmlQUlRzMXVdfmxGaXxaTkAvRVciWSVzOz1aRFpALHU7ZjE7dHVgOFFzVStqOHNhe2ZwJVJ5IWJ9bnQkcjh8JWUmbG96bXtfaDh2''@;'; put 'put ''KnlpPjlUYHI+JUhKYz9sT15Ma3I5MWZKVyhwSG93P0c5azVjXXA4bHtgO2lMSXBGbTl4RklUWiM5I2NnXmJbR3MzdypFcG8mJGxLL2JXPCpbb1leaVh7c0NzdSIlYCg8WkZSd0lOOG59I31KWFByZ0wmSDNvNGdeTXdJYkt3PDkyPVN3bWIsTzNVTEwrbC40ejBDNXIyWDE0WXs6WkchMTtRP1tD''@;'; put 'put ''RyNQbT1dUVswbzloKW46Zl95WSR7eS4/fWM3Ui8uSSkwfUhLO0RvUH05dXMraTBLfkAlbiNZWz9NcFYlKywrREtCPTFweWJ6KiZNIUlkUm49fCh8clpnWkliO0Y5OnwzMS4lSHVGPXlqWmdQTU4oaEsidXM/V0N7OmQ9T14oXTg0MSxlZ0VmcU95UEQ2SyY7Tyh1aW15fG1YNltLOkJuLzRJXjMv''@;'; put 'put ''ZCMjdnQwcngybUYkYGR1SCQoPG8oTW08NVlZR0g8PlFjX1trZkliakZzNl9WJEcmWHtJNGI3MzUuSktPNT9aZDVUMVRVeWN2aVtGZ2lFPCRAOUJtPGlTTzFVYFVHJEglfDY6RCtxR3JgcCRRMSVQUXQlc3tXT0QkRWBpZilAbj4/RkN4fW1LPyYzVylFeSxjJnVAclJbO3pOLyQobSs0dGl8Qzoo''@;'; put 'put ''Mk9gcXsjZFFRPFd0VlRqY1c/OFEickxyZEVnUUtlNmNxJlMwWFAuUiZIMkgsUTs7YnZZbmtCSCQ2V1d5Z1Y8Lm8kN2p8VjM5Q19CRVc5JiZJJG5mRztXV2xTMCQ6XmNOP2cmPyYvOHAkW1ZJLns/UGJsXUBWS31LQF5CKF97P0pXNkQ0O2VTPlR7OiQ0TU06IiVCcHwiJlUyMmp3dFFYYXI/TTh8''@;'; put 'put ''VTteKGtbTGVqfnwxaVVpLFo/VHtidklnZCQ1YCpsbTpwQzZwYGduKmZFNVgoZkJ7JmRUKFVwclc4PGE0JFMySiRER21jM2tWSm8hfl5XMV06MmlmaT98aCp3KEluNVJ6T1A9dW1OcXhbTlsqVkRoYk4hJFkhczVvNyhbdkNGU2RpUiMoXWJ2Zi5pKWNeQCQlQm1KY2RQLG4rQ15MOSU7JWo7ayta''@;'; put 'put ''TnoobjIwJHUjXS9rK1NzP2JyRWpXNl4oeHxacFpiVnlxNSRkNU4sYEFtZHZeIT10TSlBMn1EYWI+Xy5KXXsjRj9yeXY2bEY5KTAuNkdSR2NRSlYsOzpidj9mdDFSayxBTXx9Tl9VKFhafjF3MyxvYTU+aFVfM1IzSCxIMFM/YEd1c2VeeWYieko2fikjUXYxXXQ0Mzd2X1lGaSFmZUN+VGVmKVl4''@;'; put 'put ''NCo4I1F+TiJ2SVRHbC9bRWMySWZ2bmBMQCR4IlZEMjFoR0MrVnssZE8/VCNRRVRHYD5IVCpyXjF9MXY3S1c1ZHkhc05yLnlzJnBMK0d9JT5gbkJEMjxRIkNCRWY7SWsvN1BXSS4sSGhNY2QrfEF1MDdSLml1Rnx5MjkmdVt4ITIvPDk+a10pQ1MxVHZRPFZmOkxuSWY8eDNyRG1rXWoxdUdaVi9n''@;'; put 'put ''NmhfQWNXTClzT2dUNjZSTD5kKD89dz5uM0tocUomKX17SFlWeWF4aVU7dll5eClKMTBedTNQcm8vdSEhI3pNantMIzxWQXg8VkFWbmFqYjxLfnAxbD41Xk5TW1N+P1BSITFYNkA7ZE11VTcqKV0lSlFIfiF5O1VUcUVmKj8sYl8hLFtAfD1kSls/el1gV2gjXkQ1XXdjRUtQLChlJVF0MWJBbFM1''@;'; put 'put ''eW4jYlNVQyRCWyE4QiRKR0dRQjh2IV8yUGAmWWJoMDo2Ymk7aUArUUIhSmE8cEBQQigyQyUqSytyXkxuYVArSj4hL0JTKEJANmhdd3thU1ksejIkd3Q/cGZCcDkqYCh9K190eEB3ZSpjWyouKHRQVH5TNUR8dDhTT0MpS1cyTVBtKWFQYSpmTHJGZC5EUmZEJnRQS0IlbGg8KWQsUGxRZUh6QzRB''@;'; put 'put ''T0Rvb1l2WC94KEAwISViUSMmSGs3JWlPZjtBJjMzPCkiUytPPyFyJjpuJV49c1lgLEJEJGl4OHVsPT0rcWE4L2V5cz9AQEhSbzNGRjIsVEZUcG5FY2oiN0xOVV1ENCl8cSVIXSZhNiliL18jYD1SUmsyeVIpUVY9cnE9LClKKUV1aVk6emB8W2tzYDBKKkJQTSZqIj17aE1ZMFRlSSxtO2g1JEp2''@;'; put 'put ''XVg7UGVgaGNOQzwiO2EoWzF0aWpBfW0mcCt3MXgrV2cyTkk8bzxgKlhoXnJVWjhCfE5PK2s7V3YwL18/U2FmfFUjcFd5aTU6YEJ2Zj1FLjl6VHlgPXk3UW9ZR3YxSGR9dlRHUWw3NWdRNjgzUjA2Y3JsUnlZcHYuV2xlNF04cDp0K1N9c15bVWgkOTl6cTwwdDBTfXM6VTZqfjs8a0svN09PNnwp''@;'; put 'put ''RURzL1R9UVoxZEMxUSY9SXZZbU1IO0skXWNvNDx0UFlqPTgpU25WYj1jPT9aPj4lOmpWKHxnS18+czgwLGh1OHc5e3xbY11rUzFyR3NGVmgrRnRTZEZKYFZVIypjNUNLZE1+UnxBU0IxPjQsYyZqQjxDKHolTmIrPU08Vl98UVFhPyFZRHZFMzc4Knk4SG1JVFFxdXBHK3xSZ2JqLHMiNmo+T1J0''@;'; put 'put ''cmgmVWEpeWtVV1hhfDlzdyo1W3toaktBTz94N1NdRiZMMWtzdTkoPU9RIilsQjFwPHZ+e0pPY3FxW0NyaHBMdHVsQVNCSlhAVnw3SDRFJHZCQlheZFlIN3RdOVdYPSw4anJSQ0hGPllPWiNyTW5aazMhIX5pNlt4bCZUNS5YNzFiWDtbN1gsVW1UOi9tJGs3WDJhNCZ4JEZnWTZNKngsdEw2VlZo''@;'; put 'put ''VUopVSU1SERhX3R2Z1NhT1ZmJShDdXl7KDpwblEyKl8jZHFHPihjYTxyelg4QCVfJXlnPlYlSV9SRzIxeGxlPD9yNnYiYGl5Uko9Y282cWBYNkJSNXc7emxsOG01NT8vcSxjITo1TERyaHtMPU1sNnF4YVUkNCJ5JVtOSmFDJHdBX0wkTWpbQHdQeCVabEtIOGBSZzU+YzlnNElFe2w/ZWBAOUs1''@;'; put 'put ''XU5JOSxOUlV+OUBYPWVfIm8sKTB9TVMlXkI7M2RLR21XUD8/Tk9eLHF7KDMsKGNSbiM5PSwoS2RHdkN1ME5+Q0pzPE89JWxaKTNZXmdBYSIxWSM0U2pLbnF5eyNrSlpdTmEvaWV9PTZsIWRxISpFQEVzYix7aipyWzwjanJLOCt7U2UsZS8wJjp+aHhnKmg8IUhbTmEoZntaYSxPaGg4c0A1ZEFk''@;'; put 'put ''U2ImTjpHeSx0Q21mPixwOEJpWUIoYXs0IVdDbURAPSxecmR2WEJyMW9Zd0kpTGw/UkxpMlBVfEdGbFBmRHhJRl4xb08qbURGWDUjKyJJOXwqUGVMZCglUzNVWEA/VFhiKWN6SW50NDRoLzxgN1E9TXRkLzhmOHRJaUMoQnxNMyZuL0QzT09kOzJxXk43aU5vTDZzWTZlOEJxanpTV2Q0QGYqaWpi''@;'; put 'put ''ZVBOZDtyNWtbKV58VEEpLFJYPUBKMV5SUTckOTgiMDJ3O3V7aWcxZ2ZidlBeVFo6R2E8ZyhsMiYkMUt9bj9oRVIidik2cj9iUG90UVhvbjtVbU0pKEo/dGNvMFtiSn5yYWZIcjNCVUA5OCglXzt8T1huJE4+cTcjXk5afms/KUFtW0AiNCNaaHlnMHIpP3YpTnIrOyIybGBpKU1BbCtsVDdCNm5E''@;'; put 'put ''IjYiSDx3fk9DbH43KGVRWXxKYSpoKXg7P3p7fVRoOG1Eej10flojdTFQIjtyLDJeWlVyNzprISF5Nlo3cTB0bDpARGIudklGZEhDNEliYSpeInMyRnUwNGouIjE9TVRXXkJxNWYuaXpSKE9lRXcqdSV3Jmo6eXVxRGJSSE97ejxFLi5XLDV9dWZIcEg1SDZLajk/RDYwelRPMyJWPXViLyJWNXAs''@;'; put 'put ''UHBzNEU0OmovNWxoJCRUNVs3cmJWJm51XyFSQ0UpL34wRXIkOH1sUUlDYnhuSSpuL3UlIXt8ITZySFt4aShLRVFlT3RkQFBhVWspUC5zRip1I3drSDczeDdxdCg3YVk1Vz9kWyJ8VzdaTy5NLi9wKXpEVEkjPlVTMVI+anIhKXh4cXtiVSRiU0B7W24hZHp8MmgpYylFTXpDTFlWYUNte1EkRjdk''@;'; put 'put ''alMqdWsxKSpoTDlHW21lMjViSVlXS1dEIlksVX1MOFFkWXYvWDFMdi5DRE9VVSZOfjEuZExOdUVYTip8Rnl5USIzZ2ZUTjU3ZSFBO1NkUFlFPHVdMjcldF83M2wjVX13Jk1ebyg3WGhUbH13IilJbWhIMGJXSFhOKzA7b0FTUjxCaThFLzhMdkVmSCsmL308UnUqcVFKNEdPRm9HfUVYPU41WFJn''@;'; put 'put ''WypMS0Vjejp+T0N0UzNfLnxnQDc4JCprJkNpVnYvPHlROXNlZUUpeHAvOjs1QnZfXiZNOm12fVIkQm4xeWZiOG1qYmxpcEUyI1o8L20yJTxRc1l3d2dWOXp4RG8oblhZTCNMeHFBVXNzbmB9P0Z+XWxBVSlnSU9BQD5zaTE1WzZocnRzMnBnK3Nda3EsImc9RG99O19mLyVNWCFHeWo3RFh4N2pW''@;'; put 'put ''QFYueCN3c2lQNn1PdExNeWF3WXZ0VDtkKkY/Lm0lPTQ/TXREXUA+WHxWRzhDWzw5XXQ6NHc/TFYmPD1ARVUjZCF5UDw7R31QUWYhbSl8YnZATCxOcmJfLjtwbjJILiVgIzFfL01neyZlPUFgeWBLKDJCYWY6I29vZVMrYzlyMjhsWD1bTmdkLmJiflMsZClpZ0JILkAseHlVM2UjQEcra1lIfUVa''@;'; put 'put ''U0tlJlckXyFYMFZgKX5JM19iZ2BnZzBVVyhwSTMsfDsjTiZIW2ZvZytGS1cofUc3M04zS1BoTERrcXNZSGRGZVtKOjVyb3UpaURtVz40OnhUZlBsKmp8Jip8empSS1shZnJTMCRVZFokKFAkai4wR1skKkNlRzV1NHBZbDZpUzkjOSo8SUltTG9GKV1rMlhZPD03QChjXns+ZjhnKVJpbywlaitw''@;'; put 'put ''PjZsSDpLQCk1QyxTezlhfD9NXlA1W1JieWBwUT5yUVJbJT4hZnNWSH4hWnBuK20jTl1IPUNeJn05LmZ2RGBCJVhWTWhoMkZ7bi9XUzdFe1ZdenQlbWxNNlFbKWcleUlOXVs9WmNSOypVeyIval0kKm4vZzJJLkRAW1pnMk15bS94ek5bWSVtbGtTPHhTMEQjOTdZVXxQRixbOWZkNVNxZW0vfnxl''@;'; put 'put ''ZGU7XkNPJWM1K25Yd2Z4SEY9M2tINSFNK2N3d1NuXTo6Z0sjYCVwNHM3R2A6JWp2dHg1L2F4PmZ3R3pDbXlZSUo1fSVjekdsRGZgMk8vJjc7JEhIYklVMXhZbTY+OUVzdGFVfS43S1F0bjowMTtRV3VmcThqdEpEPiVuKFcoRVJ1NjY+Ui94OWp1MWZqQHc0STV4WUVrYm4lcCxFRDd3UFZrL2dS''@;'; put 'put ''amBSRStWOWZ5JGx8QVJjSTlrP0w7QixKXkZWPFAyZFlaZVchLmswITdTVzdWIWY7aStxZVNXQXhFeX1xL1J2fWVmKE1bcVBLJSNYfS9FLHE1Yzo7QmlLS1k0MXdfO1VGW1AiMGV4R0Awe2tXQGc8Mi9jOzpyYXhoYVc6S3xhUSUkcV9ed0M8PVZSZEMyUGxsM3dNcEpsb1hEaVJyK2lBdXBYbVN1''@;'; put 'put ''P3dhYVBORUBab0pQNSVFSHo3Lz5ZZSZVZFtuaEMkOHNQe1lMZz9jTGRvSkQ6QVBQOVhjWFpYOzk/cFlkNkM7OT9QMDM5bk97Vj9jbzJ1PCEqe1kqTX04eGB2SyZjaFcueyhMUUFyb3kqQCp2b1hTMyRTdUxxRFBCK3ojMHVXfmA6OlFfb0clZWh5aVQkYzRbSEs7NC9PIkc5KE1wcmdKU1NtJGhL''@;'; put 'put ''XUxTWzomOSNqeDhDSTplYXlXVmdgZzBtR3ZhYT09cF5fZ1MmdjUhT2dZcGVLMSkqNkp2Q2sqUVQ8cUJ9JlEiMzRsN258fVM3Yzl1fl1DZUgweC5DRTxtcT8oZipBZDNHR3ZQKig4cVhlZyRISlc9UFZVNEd1O0xOKG4wJm9Oa0hZI2NZTzp7XmY4LiFfR2lldVRtcD5VQGo5RnBje1QqRC4hYD0p''@;'; put 'put ''SX59OTVjUC8yfjdaMihucEIoTmY9L0ZmZW4rPzgjKXJvUDZ2fUZ8JG83OEZLWmFCXiZOUDxtMyhjaXQqL2ApVCZxVSNmUVNpbXErTDdtM2o7MFUzVSZfc2lzdDQhRVU4KDZHW3VLPnclKy8xaWwxI1tJP3wlRHZxMFg6TGw5RXBZMj9nKk5ZemxBZTJ1cXh6WVt1TTlhRDZLVzFRVntRZzxfM1tG''@;'; put 'put ''dXQkTiYvXyhXNS5BKikuYzxlaHozXVFEK3tqckZtUCQkWUpLOF02QEtJX31IeEIhd08lVX1hIXI3RnV3NUcwenVKYG9jUVUxNEJCQHRmaHVITVhTR2gleTgwRUUpYjZLdVtsJTs/aiVHMj9Qdk5tKDlKb3IjSEwlfW03aDxtdDFtSD0pTTAxYTNDUDh+UTUsTypOZHZvZEteTmBAeEJLaj89IVpO''@;'; put 'put ''aGdbUHhTPmVaPSY9eVEmR3lrYVkmJUx6cUtGWHtydDlFYDBsI1FzNCxZNWptTXplPiVTeEp8OkA3amxTSWk5Vzgrd2oveHoqWzhkLGJKYHpqUjglXyI0NiEzL11nZGY4eWRleGMobW4wV2FsNWZmQE04NENUS2h1Uz4sYWleej92Szc8VltAUzYqbkxxNFFpL2dFMG8qSnUybHBUcEw/akBhKEt5''@;'; put 'put ''PndERjN7MzRISnIlP1RlZnQ5PVB4c3BsTnhUNWxKVFI9R21ZW3V0aF9BM2BmaWVHM1dJaThwLlFdTnlxZ0s7SmpHXkxwekNlZ0o9UD1rPyVHTSEjYmRkbyw9VDpEKyR3SzVFZktiYzcxP2FCazl6dnFhUWJUcmpHN3ZkRzczPjBsTHZOLCx+KSExc0ZtXV45SDJpPlM8Vio2eFVMO1lSJlAkUWBB''@;'; put 'put ''dkpgNktgKUJZIlNjUk1iKSRpcWRHaGtOblZnJWE/NiszflV7VChnO0gzUWw+fnJga0xTL2ppPDg0aDFmeGFKOS56eXdxLixxbCFMbTF9YEImWCM6KXZSPU9zIjEubF1XS3ApPmliMHw7XUUxI281QHJDMjw6MUJ0TWpNJlo4N0lAJG91NlV7KylAQFJ5Z0daVnomMFlJNDtBfEc0aDFHODd8elgx''@;'; put 'put ''WH1VdF80OjlbfTB5SmB0TmFNYjYyQDEsfjV8bzsoMCx+NVg1Iyt+TEJvLygvQml8a1NmZlo9I2t8PmVJV01BR012Wkc1fi5iPCVocFtAPSJgQChnWWpnaH13T012L2l5aTFfKVNOfVJWMSVQcyp7YEplbVVkNlgjMTUweHNtSDhNPTBtREkxbVoxKFlDLFUzbVo7VSlZJSs0ZyJTajw/KSxORG92''@;'; put 'put ''elFJIllLVUh6Xyk/RzQ3WURqaWJkXkdBKzs9UCViNmRZbXFKS0xofUBsYkxWWFdWcHl7ZWxCL1tSV1U6a3xbXnY1bD5fSTQ3IVopNzg1ej15SWpwdk5FbWl3eWJkaXdXWlV4Xyw0UUBNa2M4VzhQOGR9WCJydD9tR21OflhSenUvfCxyby5JdmUsLDxZajBJamtlVGRiUnFpPURTODRscyQ9PVha''@;'; put 'put ''Nk9bKDtASSUyU0giJWYuRyJZZTNKOEBeVVUkbHVfJXFYVkJ5fk0hP2h5WjxvTGYyTFZHeUIrTl5HTTQ2UVdSK1k8KUI7Ykd5cG97W3hsbjVkSFpaIixdPVYzPFAxLDNZcmFsdD9yPFdQYHJwZWYhL2NoOn0iRGElTkNnbCJRIixCQG1ILHUzNm1vTEtnbG41JTElS0Z2fnZNSDNZO2s8SXcvbiJ7''@;'; put 'put ''K2dLM2RmTGY5V3ZdMFE4RHdRYlNobTdSNyJmV1VbZCxdeCNFQzBvTH5XQlo7dmxMPEBrSUVvWT5YTzw4Z25vZXpbRSZ1Xm5WN1NkRSZTbl0zZEpGJnx6LEZ1QzN8alh5cVYsYU1ZUj9nY0dReEx0bDh8ZHFPQmxZWFNbTzcqcl05P3FqNXNbWVJtKmRFLkQ5ez0hP1VIISklPE83YyhTNGdeOkR1''@;'; put 'put ''OzFLNUEqRy9demhBTy9VOnoyNmNfbzNCNmA7fHJEbXdgZVBlNHU0P2w8TWxxUlkuaSpGd01JbltBakp+cWAvRWNsY1FLOjAsVUBjTjArUWlPfmFNe2YhUVs6XjMoVkopfGR3ZEY2W2wlfTAhQ3cuTmkpfTpLfEV7QSwxbF8zZnZNIVsufjJzUnp7K2FlJWpPdlBfUy9TIXVBRltBJURYWFgpRi52''@;'; put 'put ''PWxvX3s1WFNtbztYdjYvZE5aKSM8PmJBSkU2RDJ8ZTx3cjVoe0RiXihyfmlKdlEiXjN2OjY+OUBDN2hjUE1MKi5TZWouOHsqakwkW3g5akViM21Nb0BxQltMallmPlN6QU1iK3xQdkNsQmwxIiRmOG02KXRTeXg5Pz9gRVMyMyRjbiFVYW9aUXgwWDA+NXtLcDExcyZkbV06PklPdmdPb0NdTTU5''@;'; put 'put ''fClaTVFrTWl7LkNPO31DU3sibGNyaXhKZmokRT5pT3Q7ZiUqbi9qYGNsb2sve09DIldrb1k1QypBMEZebEV7dlteMTxfVmZhe3ZHOWNQcm1peG87PypPIU11ODN4a3FASGZ8elp2T1ZhZFtRKytaJUV1aC9fQTZrIWkiR1RwNGdIWCNrTDpxRUw6IWo8MG1vOiNDI3ErUlREYWljTl9hRytYLlk9''@;'; put 'put ''W20qNDZRb1EhKjN9VzojcUM5KSFrL1tLSn11RilwZ0tdcVVDRSkvV1BFRXF+MzFgbDkpYG9bMHJ6Qj1SK2lKfVk0K2JSUktdWDtudihsUlFgfillN14sOlh7IWRud3U4ZWdkbzJPUnVWVTN5aSJHI1Z8eHl3IjV9Pnl6KUlOWzUlUGNCbVIhVkQ5Nyw1VG5uKzcsP2h8dFtScFJmSz5ASUdAaCU/''@;'; put 'put ''Q1A1WHNgVDI6MVU7LEVRIyM0Xmd5JGUqYlpiMDYvVTFOPDYvdiZmMTt5ZiQlamBvekdWfSlrXUZZPzBoa3w6T1FlXWBnIzx+c21dIypOflg3d01NX3ZgcztyUDAkZCVCI0JYJTZXKC9VYFBkLGgxeTRrVkt+XVYlQGkheUkoLF11OSxSVjh+OVB9WUQ3JDUmaHtTI3ssSSE6QVR+aCwuKHdocTl6''@;'; put 'put ''dypTLz5KfVBzQlBiO1IxcHAxKFBjcyltPH5AVDUvRiNbLkdEWiRXV0VqNWRpWSh9L0o1Y0BdeDh1QEB3aSp0Ul4kXiV3Zk1NaCVpcXMsdjZPIypMLFkpVXB3fHhpOGAvOUtNe2RTWk1TZHlXaztpe3U1cnxXeyFhXnEhPWBMLnBAQC9MbUJ6LF9RWXV1Sk1VOk48UUtVfHNgTUREejJNaHRFUFlF''@;'; put 'put ''ZGcoUnwpa0lxdTtKemBydzxGZV9nZHxecyR2SWlMYHwlX3l3VHRzT2RdPygwZWM1PjpuaSJGKy5aRz4zSFF7NV95b3U1JThtejEjYj1gJmpjUFd0Jlt2aHw/SWZtbGMhNy9eMHUxciVYKGA2fGIxZ0tTbWlDWDZmPlojRmlkR1h5M190USkudUl0WSlEfl06en5ITngxLk8iNCVHfnh3UF9BOyRQ''@;'; put 'put ''fT5IUzA/djldQWYyUm5SKENCVCElJTNeNX19RjcyOTdXLDE0OixLRHVBKUAiXkwrKjFwSD5YKGhldk1LbWZwQkhCSE1HO0ljWS8mYmY1aDZRPlYrZEpoTG5lL2xRcG0zaUVTWWIuOiRJZG5XTjZbR2p6WD9jKGdKeml2c3I/YE9FSjhKalkvfnxrcmsocHQoN2gqRmpoL2JmN0JAZEp6anY8cHIm''@;'; put 'put ''WFg4JUUkL3dyYFZnIlc1cng3aiNjSXclL2oxXj15WWNVcX5udCZGdkpgNE1FeWhYWGZ8WUVYWGZuITJNJXJaRDFyPWBTRTNdeWdwLGR2SjhpWX1AMyRmVXh6LzAyK3I1RipkeGgpfDFwPCthLDxzc1ZNIVspOzhqVW9mal5EZzVPImZtW3JPNWdTbCpvbWh8S3VhL2tbSWIydmlXKEVrLDdQLENF''@;'; put 'put ''TjlbU1BFRTRQVnJSKWMkW0JBbToxMXpfbk1FKCZRYkJrRUl4KVpYQWFCTiJ1N0hbMGkhMzFnKyZyKkYwOCs3MSxMYCQ1NSpPcy5zZHB4XSQhRkBZemNrWChvJnU+N2BMOmp0SiZiak0/a3sleSZRPTtyWnlCXUVYal9bamojKVphL0xqRDU0Y3p9dStDRGRFTkMkP3F+TWIwQDwxUUc8Z1I4d1oz''@;'; put 'put ''IS5PQl9gMGEvTF9jS1oobVQqMk9hd19nU2dPTUV8P0c8TjpVMVM4MXw0ZzVtTCx2fERAZH4wbSQwe3hfb3J1aSI4bnRuJTw4JExQV012NnNzUk5LNytgeTZGKyRyaXRJYUM7K3RgSSxZL01sTV9XZGF+YmNGdWgvNDVeNSNyNF1ocU9OIXVAOyE5Zj80fHFaKlRoJWJqWD5JQiJHfVFraEJKWDVN''@;'; put 'put ''UnxgWnZYL1laa3MlZDJ1T21SRkB1TmkqUyxvTENxNDpCSkVuLERwWSwkTTVjMGQmTjtMOmsqSnROPzFNRGkyQy4iUURISGt0SXlDQyV7cnUpe2B8IT83bCNdJkc/QnJVYyU/PUVbSVR1XVYraW4pY3xLT2cuc291X0w2LERDbVEuOT9JLHklXVB8JlBIazZGUjgjK3FZMkkxQWlxcFlEfmsvWFJi''@;'; put 'put ''cmxNO110Plt9KW83UDRRLkpiSSY6fFhsSjd7WmhiPWs1Lz42SGtyaDtVZVUhTTVCcmtsZX1YNjxUWWsySHt4L1A5dCMlWntnQWFPc2UzN3pVOEdQWDluK0Z2aj8+TXBlOD9dUDIqSWJaRC4/X00sXnhVbiYpNH1xYE05I0lfSiF0X3tQMXg+fTB9S21QRDBZM0c1fGM5ODdvaitMbyMyIXdHfShm''@;'; put 'put ''TGxIMDgmaSpmSiRre0xnQkxAeTVJImsoSz97MEZrV2l7RElOS2J7WWYhRjk5el9vTyxAJEp1OlR0flpsc24rK015cSQhVCViTFJhTFs5NE5bWEQ3M3c+VHxIfC8sOFR8Lylue3djfUJNPzt7M2AwN0IxUyFIPXBMRWJAJDYmck15KDh9ZXV1SiFeTmclMCE3LnFecGREYDxxXkwpMWk1XmAocDM3''@;'; put 'put ''K30jV1pmaCV4fFpKPWVISTs+Tlp3RGJdImVPV1ZEb0loY0t2c11YYkJvQnQ8Q2YwTTFrSEJURCsmWGY8e0tWTWYwPV1lITFCQ05BK29vUVZ3Li5SOykuWDRXKDdfci82IiopVT4zRjNUXzA5ZUFvdU17TUY7SnJQNyV7ckYqSXV4RmpmdkZAcWQlS0VBJEtwdWlLMSEiKV9fKH14KixnYT5hJl8+''@;'; put 'put ''Nm1wLGElbiVuT2k1dmVyQUU7JXxeQyYyM3x5dDE4dE44eUQ3Uy9YfGg5dkNQdjJuWSwsKz5sP2A0SCwvTztMKXN6M1hZPzxdQihncTYiTUIudjY4PUtVLl0rZmtnZE1bJC4mMFVEWmVAbHB+TmAuV0JfMzdWNjM5U3Axcj9oYl5KNFFRaTclZ3FOL3Iud3A7UCsqJjs3QGlPTnhVeyQ3OyFZNV4h''@;'; put 'put ''VH1EcV00Ji52Z0lYeDMyRj85Pih9dCp8YlleWGs2Z3E/JHRGM1V5ayVUciZ4c2dRMUpGOSN0VjhkWC9ld0Y7ZHpEcExmP2pScm9HW28/bzkpX2R9MHMzYyw7bUw6aElFQHJMX0pJUGE1KEpGSkMvLGhSWUZyXjRddl06M2JjdjM8V34rVDt+azE5flc8aSU1aFtxIUNlXjRHTiUuVEA9cXdnJWk6''@;'; put 'put ''OksuPjc/aksvPzliOkZgaCNBS21FS1hiOHVnVS92aDI2VGkuWU5vXTRQaC5BfnFdQmR0a3AsTzdtdmI1Oi5aKTh7Zyx0fGZNUGw1ZU19MSJiOSRSIXRVUjtNI3IyJWVdOHxAWiVWbGFrJEtQLk0uR11DMltUVU9bSjNfNFE4dztYITxraW8kW3lgV0tZRGZ9TE5VRWI9ZGouJF9mR0kweFYveUxy''@;'; put 'put ''bnQ2YmRpc3lgV288eGdwKWhxM0tKVXx1U11qXShEZTQ4d2R9byRVWGJybiMoLjB9ci98SiVQan0zQyh5SEppK34pNCNifXpOfG15LysoRVNgZkxOSz46JTtlKHR8QnM/IjRCPGEsOXBHdE9ncUIoZVYjYndvOGFyc3h9OVYxKHxxZlhDJGkpbkxQbzpQLCxCd3JUJXEyU11TTWhsaE0yaW8/MlY4''@;'; put 'put ''JUpsU1JFaUhuJEhyfGxRMz9eI1FpVlpnUkJAd0d7Sz1QQW9LOSxlbGxCeX5xI0dWKG0wR1JCQFRGPGxCeW1IcWBdbkFePls5TzpVQVV2RyxDP0hjUUh1TEN7MENTcG94SX5XQz5pdTNqbnUoLG8zcF9BXjQjPSkuYDxrc1kqdWVtbSUye0ppYVhBdSlfMkxPPltASDtYV31ITHt0XVl0JS5jdWZe''@;'; put 'put ''XzpoNnJPWHtBZXdTO1NbaFA5YWkkTEZkI2AieV40b15wW2JgSjB5S302L0QqblpdYmA6aHx5dHdDd285KkxuWHxpeTFsUVIrLF5AemxFWWVhd2psckBsQ1ohUipkRD50LkQoQlA8PnR6XWRoK1oqJHtjWnNaRUs7dFVJR3gyQX0ka1NWYHApc0lAeXUxU289NSRZdTl1RihSMjJFW2BYMCFvLC4m''@;'; put 'put ''YFBLb2VUKUFddFIuR301aiQsYChgZXtFbU15WSVIWlheZzpEYHc2UXl2fW87NW9HeSNFUzhmOFBte0UvajlpPmdgXSw1YCRmPFVlK2FrL3o7ellNeXZNWGIjY1JjSytlcnF4M1tlMTYiZH0+Mit7P1B1cEdibXdbfl4zSDlwPkBbO0gxOTJdPDRXTUBDYkdUZ2k4aSsvVmZYZmkjeUY1VTVzPFds''@;'; put 'put ''IXA1JDM7aGQ2OkhsakprWCt2fV5kYGtOQixVKF8zV1MiZ31dUjU2eGZOTnNeZXNMJC5oLCRPeEc5OSwxdVVsdT8lYEYvNVg+Mnd1elZFcVEvIlNme1F3fVtgOklHWHRtbD0xbHJNMnxxc1V9K3U+dH5WaWUqRTNFc3U0JF9WfFZQZz1GS2VednlENUI3Q1UsLGhETGxRMXU8SDYhT15mPD0+InRk''@;'; put 'put ''fVsqfSx0IWt4KkxOJUNZd3lETDVMUk1SVjxGQWlPPiJXP1QxdlNbeUZGSDt0RHYodmpYJkZGUXJIcz9zP2spLGhQWnNFS0ltMEFmd3lKWkRDTU0zcmJ9ZXtzYyJ0MntfLC9qdjlRXl85JllZNFNYNGIveTQ0amQ5QlBjeiordjZddXs1TmA5R1R2SFVaWW4+S0woVCFzX01QbzRKViYobEJyTVZ2''@;'; put 'put ''NDpKbzkpUU9aRn1FY0U5dERSTkZSO3pIN2QqR3E5Y21tI3paV05UPDJFdWhwSmslPHVrL05vaV5mU1VBV0JJZFVRQUVVTHBWfCgxOThCfmRhcDgvX21wKTdmOUgkMTpZYmlxVXEqKUcmKWJOV1NeXW9WeWg+a3l7d0l7Q3FGbFVoc21PYk1rc0FER2xaUUk2WDZPKj1IeDQlcjFFensmIXQmSFJf''@;'; put 'put ''MEkmejprTXFgai5HTCgoJWJ9Oj9QfCZnJiRrU2BVWEx1W1I4azw2L0NEbG8mZWUoVjdjeDdFbHZ0MGpQI0BzdnJiNUA6In09fj1+NkNRYixDUSVYaGghWGhTMyttdiYrN1IsRHtnQ318MFlGOig3YExSRHlmcykreWZhPXhIVEJGZ3NQeHdHWEJaSW1baUdYQlJRInVtIy5MNXFZT1VMYjVGZEw2''@;'; put 'put ''YGYxdGMwM0ZpSEVdfjY7WzU6clZobDw2V00lbmJTeVlLb283ekRfNiM1ZDdeQVdCV0JmMnUwalZeQl15Il9ER011KUx9T3BCaTFvR3tSPk88a2RzbU9jTVJWWVFkbGlMUzJVVUtHMjpOSGQjPkNOcCluKW4rSzRraUZhXXM/cz8iOk1eaz1ddCZ0YHZJbG80VlhWL01eaz04TGF0US97JjJTLlJl''@;'; put 'put ''OlFobW9YMk1IQmt3MWwyUC5Aa1BkQEp9RTw/TzElTV1DfURCTlJWezJwbyhZY3NHTDN6PW1XfHVLeVZ3TnZeKHdrcmU2NkZmL1VtUkFzP1B5R3UrLzUmeTtiSU9SUnM6ZTVjfDE3UCpDWlpkN0lNaGorOXRyaEtsb0QkdixFeyhmXVtnPmcpPm1eRXNjNDZYITh6WGQrVHYlNCZvQmtMLC9EJjls''@;'; put 'put ''W0JjQyV0MTs7cztgcChjQH0mTXE7PCxDXmw+SUgmVF0icWxeY2crXS9hVXtxa0BmYS9ySCFlL2UjRT9wPWU+UiFiPVA1O20odmBPcjV9byZmYWJYI1VlOlFTQV4wO2Q+cmxKcSQ/alArMnE+WTpdWHIwd05ZLntdOkNZKnR9Ql5vOXU3aFFwK2MvMipMYXZpdktgbSV9VUR3ZSRnZykwOUhIMEJR''@;'; put 'put ''bmU6UWhxbGRPWTpRaERoMF0mfFFoJEttS3lzYU4zUHN6OzlLbGZuak0mOCVyQFViUikhSHxAZD99fDhuNSolT3FHY3pJSWJUUzljOkspRUc8M2tAXm0oSls6KTNjfXFfbHlaWyk7VjVwOSYkbmpMYHFQMV8zQE9GfEx1eWRiPWB6VH4iVkEpeWNVUjhoOUpVU3tMMmJ9KiNRZElYQ0tgZGYuYl1b''@;'; put 'put ''PGFCZkYyMmk3L18vRTVCfmZDaHd2O3lSXnl8Uk9+cCUzTUFXNXBVXTR2PCJdbyQ7XzM4PipMWlZHWCxyW2U1Zm9MfiV6JnA6I00hSFU0UUl0dltPLiQmP2xFU2ZEb0lYTn4oeD9vQEMuZV5nbGlBYSomXkA6NGloSW0pYTQ4P0I8LFRTaW1eQGdZfnlfaUxCczFsNikhfFdfZWQ2Q1lyTFpdeUwq''@;'; put 'put ''OT4sRjprY0hrIm9MZ3k2VDJyJGw1UVRpNnhQR2EzWVFUJGNxMnoyZWlWa0xMaEVeY1owfik+Qj9VbEgpTD90dEphd080bXNaLElYQjl5fjI+WDBGJSNISzoofDp3SmlYeWh1WHJha09VcWBHREssPlUkb0dkX3VDOHs6Oy4lXzxbJlNDd148VXZvQiJUfDFzP0VvYzd9Pm9vS2BgSkJgNDR2JnJk''@;'; put 'put ''NEhuUCh5LkI1Z1hhXylaZUtzLkZBPl5GeCQxSW95Q2xTcUwyRVsoRS9PODRLcTw1V0gsSU06Yjs2N29HYWZYKzsmW0R0TUh1TX1FLGlWUT9FNVF7VVl4PVdyYjVsSClMclp5WDYrUFhORHc5Ll8pb0tgMUxkVjJEOXZSRHsyL3NqPkc1Y1R+OTUmNGQ2d05IflJTXUE1bGcwLjAvN2I3Y1pWXnZ2''@;'; put 'put ''alJ8Pz1rYV8lbGx7Pk1uJSw6WlJoJX40fHJrbjNeTHZnemkjeFhUQyhBKU8uI24ofkRiLzhyKSpmelBgdUR7QjRjVnVSb2FubysoZlNwM1F2NS9YS2orQUozI01JOzNpOUZMa1BzWU1wSV5SSnBofFZSb2d1YnpjWyF4VilEWDNILjtRTnkmRnJsKWAoOnpRPVNWUkglcU1ZWEdaRkdmWl9UTW4j''@;'; put 'put ''I0hlNVt5ZllLYG43LmV9d2s+MWBSUVdqKixtZVEyXXlrXl5OOlYvQCV8Y1FbKUUuIytDSzY+RltjUTIseXFLRz41S3ssQmZ1JXA7U1YvKD1BbT0sJC9tfWB0fk5ISmkrM2dgem91cEgwUVVdRHN6cWJKJko/Q0lIXytnZUcqXlpub05vRWJFNjQ1JU5lTjgxJTdheGlDdns8IUMvOCUqRlg1PzQm''@;'; put 'put ''QzVBZnswRDFTcHVNYSFwaiNbJTIlcWxkN08hOjpXNmEvdmZaY05fQmsrc3hmaWl4JEYoVyQoJXhqXXdgV2ovKUUpJDFFSXBdVSZ3cTRDPXd2d1heYGYxeixNMyFvTFJyVXtEOGA2SUNkS2BuN3t2PV0mdHVsak90eU5yUkV3NX44RmgxQnQwbls5Rn1kS1U7UjNlQGhTfVlaWDBBdiI9KTt9YSp9''@;'; put 'put ''WyUyTkhSQTdyKX4xK2EoO0w7M2NYXlA9JjxfRHdGfGB6JD1ZbDVIZTBPeiIlZlg1JCFrNVRTTyhASlI2YzVyZi8pRUFxWGsleH5qYihDLlNpTlgzVysoJDMhNiRrPEcqcHBhKHE4aX1UPE46WChvSVU0O0I9Nz1yTXdMSDVMc3BuTyhhPVB+eFpwNlJlOllhMysvVnFjeip6RD8vLDRVMiROXWVO''@;'; put 'put ''YHhyPy9WUTwpJih0MU4uSzpMXkx0ZGErLk1NKCFaKld7XV13bENZWilofCxzOXdXYTpRNDJgLkpNVCgvV0osenYuZmlVImhJKzlbdz52QlosWGJJOFlSQGkhMVtMZFojaVo7bXY1aVc0NTh4PW1INjVkeWsqIXlHVWVIOXFnRDtiUW95dTsjS15yYFZveXVVKU5ibXgmQUJUY1BJaTNoSD5HVE8z''@;'; put 'put ''WldJcEY4NGVGUmZNVUBhWHVvU0drJlpvcXU6UmViK3x3NiVRMlk3eDZIYzUzMiI3LiZmR3szNG1iJGZZZDNVaFk6OGtJX3R4bFJkRVBKeH1UYFZpZTomcmIkMS5rKiNWOiM+PkJlRHY5Y3g9KE0xXTI/ezwvRTYjKXREUmJ1RWY3eTlIbjdhI2gmZS5xZy5jUz19YUpyUD1AK1hZVDY7VEppOlJN''@;'; put 'put ''ZnplYSFbSC9JSGZ8LE48NjZoO3pteU1wa1I4SFQ5N0lXW15dPUMuSzhyfiY6cWoyJjR1V1hOOUppSkxEXzVqQGhtQ3xdVmBGI3pqbVJOJkBpbWlAMGNyWHZsSVtrPkMhWlpWcFFycEo5MEtzZTk1M0Z2bF87TGA8QHpMOH1ZO0JLc3h5azg+ND1+ZTN5RX02KiY7OilXWDloalcjI3w+d3F9YytV''@;'; put 'put ''Rl4sNVROcjpoalAmVlZGc3ApZzVVYDRHait8eVN9UzdITUhZZjxfJHxIYFs4a1s7MVFSTC41c1JYZ2toRz41XkAsUWEhIW9AW3NJQUZ9Mk19SHVkYXpRIUZ8VTsiSylLenJBcHsza3spNU4oYTsxfl84RXY+UnIzZXhPb05tVndTIyl0fklQZSwuP1MoWHR4PHJQclhFL2szM2EvblFqJDZnVCln''@;'; put 'put ''YSQlMypxPk9FOlUzJURWSXBWZ3tMNz5MYHM9VTElY1tmN3lAZTN5ayhpajxWQVhbTi5FQStbeUpVZDg9fEd2Sk0mX00yUVF4MVFXJGlzOyVHK1ppRD1tdDE9fj8hMV9eaylnQnhwYHdYaWJ+b1FdVm9rL2svKTBHXTFJIVliOGVJJiElMTZWMGRyeUlYaClRMFpwQmIrU1gkW0Y1Y2txfSQmeGxz''@;'; put 'put ''O2EmZVs3O1A9aGJmIkNMRTNPckRhdFEiJEFbWEE8NixwfXMwfERAelJFaWRQS3JiZ1VHTWBNOWVNOzo8THM4b0ElTE5FKCg4L19CJD1WeHl1MS5MeUxzJVtbYW9DdChDQG5jJElHQCEwJnF8UD9XZ3d8JiU9JWs7cnAxIyJ3TEBjRV5OP0NPPzM0ayhxUUdHSXV2TDwuci9TQE9Rd1BORCMxJV18''@;'; put 'put ''PURWSzNKMkZDR2hPelRTYnBwbXtpQ1QvTVhHdm1KUUtedX5FYXcyPTcjNlFoYCoiK0lYWV1vbz0rUjpsZmcpS2lkKFhYc3tKLFZpcWE/KG1eYmNNUUUmLl8zTVkpaWYmIkI1fGJlcElUTzBeMzxpM1M1ckFlYlVrXz4sOylWKGBXc0M5YTdfWyNaQjEoLCQhQW1MT3NVN1FRZV9sQ0VhNkNTQXtK''@;'; put 'put ''eE5uWEghTnV5ZHlTXT85eWdhTU1XYURhPCxVP189LzAmNHRZZkpfI0V6IjxYaGc0NzRbc206cSlXekk/Liw3UzNIX3s/LzE3NGJuN2RmTmUiZTZkdUJ4cStbTDkhTnxteGNCd2N5cmVWZVVUeSoyN2gwc0codWIyQ1E0Z25OblBLcXlidyFScm9PIjZRRj9wYSQhZWlYYEBUVT85ZUVfe0BXbywl''@;'; put 'put ''ak59Yn48X0wuI2p8Uj5+WnpsYlpJImBYYTFRNjZUaSI3bTxYKm08bSZ1RDNLQ2RacEZ7VDRlN0ZlPGlHXlJ5NiU8WVcxMmwzPUFoNiwqIWlyT30yfEsrPz9weyg7WmUqdSZxZ25pK35yJiVrUHgjN1JpYT0iWmx+R2J3KThwdiF0YkgqNzcuYkl2Mz9lRz1oMiptbHIkK3RKO3o8O0xxNGY+Imsl''@;'; put 'put ''O3E/SXU6O3hDITpWMSlbKkU/OWl5MllDNl8iZH1TTGo7eV15QzJ4L1dDPGNZZUgrTT8oKkRIZytASU11QHRkTXouZDU6ViZ0THkiSGpKY2x6SmRXOEV5cyR6MmlCJHZTbWFbKyNsSjwvUGw4cFBKPC9QVSNHa084I0VRUU46bEBQbU5tQGVGfWZwYyg9JVBMLHt1NjAqP1VoOSp6OmdZZlpjayhN''@;'; put 'put ''R1FnKmpoJFt4I0ZWL19eXkBZNlJzQExZO1txaTVMZWAoUWVBOzM6Xm16ZVEhKTdhOFJycXxQcXcldkpkV3xQVnpFN2tpaENTZyFNIi9fXmd+aFAiX10pfXBmPlF0WyErPTZbNlpOTmdzZF1tKmFpM2FWclV+ZTpgXlA4SHhIKSZ6PVkmP31lRjlbV0RoJUg9OG0+TjZHOnBTamR2WDtja3NhWG0v''@;'; put 'put ''VE4xcTN9NDFEa1R4Y29nU15MbzhZezc+IVhDNCojZ01bcVZoWitFXUtuLHMybHg2KVIiQ1p6OjRhU1c2W08vTHU7JnJbPUQ8M3EySEUlXyhDVUclcDdZK0I9Tmh2UzNvd1FPZjUpfGQ8d3BwJCViJlIxSXI9RTx8c2s4YG0+QVErbFI+SWdEM0sqR2o4V1ddYmZ+XTdlOzdNZVspLiJBQjxrcG1U''@;'; put 'put ''N24+dlR3ZXk4OG1fPjZrVE9db3Ijc3A2MX44elsmeGNlMkJdcylVWnsyfkMmUk1PWjY2NU4qNDZReXdnY3clSmheL0lzSmlIbWlTbz5adHZxO2hZJUZdfEpWL2dZUD9qcH1EVlh8REAhQ2U4JHVSR2NJSDB3U3xEO1krOmZPcihqTm93aXFeSFVGN1VTM2s5WlVAMCJgSVpDJFchY1FEaVBFOFIo''@;'; put 'put ''fSxXV059QXZeMz5GKXclaSY4cj1tPT1kR2VPfU9mYmVvOSwkcHdqLjE4YVV5bjhgb200OFkxM2FPSGsxdUg4ZjFmLylrOGx2RmtgSDNIPWkzSG9mdDsxSDNjZy48LCVqPyF3MGJVPXNQQEYqd2hqVyExPiZVVjVRVmNiPjBiWmEka3VofSpXeW11V3lIXnEke1dfMFF6UkdGcGUvQThqay93T29Y''@;'; put 'put ''R1ArZjd5czQqSUR4JXpGL2csS09bYXVPM313YXprZWN+d3ouV1NuQDxYZl08IWU0bjhgNUhDZVs8a3lXSmIrQkxsODdIeCQ7cSoqWkp5W3F4Zk58SGd7P246bHQxXXhHci9KdzdoK09mNWJwXUpgNSoubGY0OGhZLnc7bStEKXFremlicy8kYWZCZmZqNHhaam1KOGVGPT5gMm84VXsmVSI9YGY9''@;'; put 'put ''XlFMaz1CN3RjcUBAbng9NFpDcXReQGVJMTFDdCNWPHQydGxmOyx2VFUwPGQ+KztpVEFVMDEscUZ6TXJ1Z1MiZWEjZz8ld09tbTg5RGllOkcyJmQqOSpiUm5MYGh6dz49U1JxQkA7NVVlSFFENTlwQCo0ejtWbV5ZcV0mNXplV2FvZSkxUVtVbWw2SzxiTE5LbVkkdkcmdkhfWXwuYjAsaV5vOGI3''@;'; put 'put ''eEpeSyoobjd+KSl6Mkd8RXFrIUZ2P09hPmwmY0NOfjlhdz8jSnIpd312XyRLaDFXJGRKUE9Vb3QkZzVDdigmeXNyRUhSWkw5V09FRV12LkxfaUpEcWdacjdKd1A+XktsTmtbWkQwI29nLkt4UXJ1WV5jaG1gXVZKKTMrRWo0X1M1KTg2QEZSKDRBKGReblF3ZH48JD08OGB6MXt2OG5LPnB4cChK''@;'; put 'put ''JF1FUikmKWdVcTFxTV4heCY1Kmt8YjszNW5beS5yNEc1fHh9Xn1xJnBWTXxKbXxGUihDel07Mzc/cmg2LjVMalFPLi42Q2FnTUNkI1NAOXt8LlRXai5gKVJ2W3A7QG5UUDElRzJfZkE2TXM4Kz9eKmUrZnNEbjMoSyU3SlslX1lFJXlXfEZjIUJaMUBtTXQ2XzdiRWQwQy4sekFBMClTQUtDXkpl''@;'; put 'put ''Y2khcylQKz0xP15JdEUiJE17SCojPTVAdi5MU2p8dnRCQUFBQUFBQUFBQU1jfmFFZ1svJWdpV0JKR3kmJmpGWC5bZCZqW0l9b3AzYFJsWkdrZGNuPGJYeEYvSFpZZ2trR0gsQTBMY1QzPSw3Xn5xdztqVSxZdF4uRGchTzxYeDlwQXQ0OVY2P3ZHaXgoWFl1XkEpVDRRUTU7UyhVaDxKNG5rYjVO''@;'; put 'put ''WTVZQ0ZMKiUkeDpqfmk4TzRzaEVSbT1MTWVeYnV9WWVpNWZie2l0Jl54dV96JUJiRjEiQSp9JDMlUi84cWE9Kngvcig1I2wzfEAoflQjWWV6eV5UKG9KekcpSFNKUUdkWEVoWWk/JVYiLFN6bV84eTg8OW9FUGQ8UCMmQSZSYHdFLyRsaS8rfmh4VlZdMVJ9dihtLHVNaWVpN1UmalBLJkRpQkBu''@;'; put 'put ''P2k8ZTUwYDNwayJLPCw3P0FJaDcrPWsiRH1ELkl6JXE9MDNrcVBBXyEpSWBBRVZML15OTWQvXTZIZXhNRXJvQ0hFdlZ0XnZjOV8oSCo9KEVzbTopUiRKOVA9SExUW31dL2hsNUdKY1ZfOSl4PnAoQyRbO2BCcSxreT9mQXEyMSZSNnQsTT4jOUQhcn1VL1d8ISxVb0lyKX1Dd1VfKCF2QClZIyRm''@;'; put 'put ''U1R2blZWJjR9PiNIK25XKzR1PS4haV5MTkdCMkFsWGpNREhXenZ0dFUie0h8cDpzRF04I3okVF42XkQyYnRNSllCYnw4WUlZI251bGBlSGc8JF5qPWE1djQrUF96IzIsPC95NH1Rc25IfFZncjx4QkdLdUclPjIreVhBYHNzQD4iZCVabz9SWldyPEM8cHdYVjVwWmtzQlJXdX4xV0p1cS4qXi4h''@;'; put 'put ''UGEpTT5sVDZzRzwubU5jVGQmSWZmOXM3fkt9WmVlNGt+dFZsQipCXUJGM3B2UEYkVno3I181NGVEOjEyVHQ0SFhDZ2leWFB3WnA2TyZVYERbe05IKUAmQmV7Yl1FQWclKXVRZDg/NWU0OEB8Ry8+VjtYQlt0MW15WSNTIXFBR2Q2Nn0kdWpzNz5jSHFDNil9JHg7fCEoK1c9UnROJXtrYF5JLDxG''@;'; put 'put ''YXVEMUVEIzUqJiFGMS91fTN6KCwmeFtKV3p6RTdzOk5LTiVVfnIrV3leJEozXmJiInhvWmRxX0MwKk9KPTZnciZML1RVMXRQe3YuVSguKnpYOXNGL3Q5IWZRcFd5RSkkOyY1WD5re1BqcXQ8XzwkdGMuPXxATGU1XT9rYXUzZWciJHZYU2NMMFNZKFRdSjomQ1BkTHU8bWJ0ZyV0eEcqZE9edSgu''@;'; put 'put ''XnN0N1dVTz9CPUxSbGg3MG42Nm1zTkV3VWY9WVpXQlQ/My9UIi8pMkUhb3UzZHsiRjJqa2hxantfPGp9fmArV2lzen5fVXNlY08pN2JbUyJFSzJGdF9IK1JmSH0sVTojXkpKZmJgVCFCUVJ4c3czVlJ9WnF0OzhmUnZsRTU1XVViOFkodXdVLEp8ME8mMjs5W241TChZczJJI1UhflQ5MUUraFBK''@;'; put 'put ''bkk1RDp2ZWF0LHxaKzZKdD16QE1Zd0JFZ2p2MnxoJnNGOlZQSXx+ZSNJWyxTWn46PXlkdHpPJFZDUDZPUWN8T0s+a3s7fHBJS3NZbHN8X297Ol9HK2ZhUndAIylIPmApPTtpZX4qQ0pCdz5Pa15DdUgoMFJKelgyfmBIMDplR1IiMCVQUTMrIUx9P1F0O04mUnhiSUJgZnY8KT47N1J4V05ZPiFT''@;'; put 'put ''LEg1RSV0cERqN2NYUGgiVzUhIj9NTHdyKllFSHQ2dDV0UXZSKDU5Y3hbSz46biEmcSg3aDVPbHVgcVMxWmxsKUNQYjJHV3g1Z0BdQ0lJRl8yZ1RDVDNtUUI6YlI1LiNDP0JfO0dCU31MR0w5fFA9fHloJjBCcnwlVWNFPWhjNEIxQUVHSzZXY1JGeFtIMXIrbTw1YktqU2xSfSY6UVZraUtofmc2''@;'; put 'put ''JmRJTyskbnBhbGtSYSlBOElYcDIoeV9lQDBMaTJaL35XKHkmMVUiJF9FaHpYPjZJNEN5UUc+WC5zdChEW3t0SngqQmEqam0obitJP1BmakxYLnYzTz1pbDRhRHZSWypKajFHVGooSmpAU2w6cVZDe25gUXZ3Tmh0KmZtOVolPiheT3A+QmYvfjwyQThaQHcwenUvTmV8WHBBMnJ0V3clN2YwcT1G''@;'; put 'put ''Kjd8dSh7KXBsT3d2PHwvaWJ0SSJadkBAamtlYDRbaEsmeEc0ZVNHWGk4VnB3SkYxdTtMRlRLWm5jUGpHZE4rPmpyWCx0bW5QXXYqTjB9fCtZWkhuP2tFJj5YfWpPSjZyNSw/en1QQl5FLDRRZkFQZGt2YVlSREcoX05kTE58ZTdgQz19XWphXWkhO3x4dUQ8Z05oMlooPEckTDltIXQ3RVIsUUVS''@;'; put 'put ''VGJJMVE2JF5YR2M/W2E4KjZXIWo3bjY3Nk1VemtifHVTbFkjJGxZa284NyhpSX57K3B4OEYqOElvU2JfKkZuOD1RPzVJXl9xOyFWODFIKDlwcnd1ImpOQXIqOSNmRWlfcndDM3svSFt3cGNAdXBWNn1eK3k4N2cwRH5leEQ3e3g6eyVadjFsNF1xXmJualddV18uaylCdGt7RChTPClpQl0iVmFU''@;'; put 'put ''ME1PVGh3OmdUJjVNNldoSCVMcWtCSVllODU/X1IzTkN5WHUyY3M8UGElTT1PaU9WaT5oPzAhS01GIzY7PHBQTExlOzgmcT99YHomUEd9dn1LNU9bazFoSVErZDNNeHlEIWlbYSZ6QCxEMSZkUyJ5QjMydyVLOGk2KTZFc2Q+flIxMHxdRCV0W3ZUZTNyczErNVtTa0h2NztoKzV+P1ZrOCJMR2JV''@;'; put 'put ''MiRKN2R8OXl6NiFYNk5GVDZAdkFkNW5bVD9yMUNiTXN5UCt8WCNgSElLbFlXTDhhQHpaPTtKbWZ9QyVWQFdWfi5ncW5fc21HMEkvelZPL1Z7QzsuSENze3tiUjVON08mbE54amFpfngwJTFxSWZyVTM4fSsoK1ohezI+PVAjUHspcSJJIzg1LEEvfm1IXSlXJSpCbmJpQ0NdNXQrQmp6VCk7SEY7''@;'; put 'put ''UHZJSnhUXyw2Wk40SE08MCFnQkJLMkEyKGpGVDZuVlNSNnl9RyE6N0IpaE11PywpJVM1KntrTkg9K0gmbVVPalJkaDJbXWsoYDZJYT9aZSw7WWVVTFNeJD5+VmwwZCw4S29UQkdYOGZXRyV0P0tTJnBMOCtTMDp5SypPe2g2QmxQUCVPd35vMD1GVXVLei4pSUtgcWxkJENlNEB0KUxNc3o1QExH''@;'; put 'put ''VWFGUFozOTA7WkFJM2JHZldRM2ImMj9HWWtaZShCWkdPK2VGMEJoT0xtRUtDXW1JYU56SmlpYHFoOjpFck4iJEdyfWFIKlVaT0xAck9DTmlvWW0oX1RuTHo1Jls9aiNoNCQ7by8mNWY0b0RtNSZILEt9MzEzRE5AW3x6e144ajpRcWowQC59enU5IXM4UDE6dSxBW1J8dTd6MUx+WzhRdVZzSyRb''@;'; put 'put ''altufGd4OU17KTFQaTZBanBlYDlwMk5qWn06NFNbZDFNRyFHP3F5Tm5MUU8pT299dVEyP19zMW4/Vjgoc10hTSNuaVchUmk4c0toaVN9blQsUiFaRUIhTXkvWHB2OGh2WD5oVEMoNFRkYzA0entkMDw1RUNkcXpOWmR0RVRoI2dVI2RneEwjZmV7LDVgX1ttUnp7MGEqaj40K0BBWV1tPUosRHsx''@;'; put 'put ''KFcvbGp6UkRyJF1fZi9jbTgzSl4yQllKbE84YWNNRC80S2RMbnssbyVbcnZVaz4qRWIqZltXfT9UZmhhO3tEPG0lUHZZd0AzdCplMjpxVm44PV9rYW8wNSpMdEZFTndHdF1IWSI2UTVUSm1UK3dqRV5NVUU7Lj1Lc1E/bURuPyNrTDA+KnUxNHBHQUdxXSgsVTI2RWMrW2A2dFtCJDNFZld0QHg7''@;'; put 'put ''YGtES0h9Pj9HfisyTEcoI1lQfGBgVUZdNXRaP3hbbjMrWmFOR2JlRz1pXyozOXpWQUB1Q3RvQ1kjPnVDRns+RlhbXj5KfGUmYzI1dXFCMEtKTkhGZyluOTNnRE4wJGR5JWA7Tm8jQ3taQ100SGReTUdaendsW2pJI0RQJW1mXUtHJkY0Jnl1NjppJCxFVDhLaCpGO1Jgajw8ZDUuXlV3VSs5dnpy''@;'; put 'put ''TiVFVzVGQl9EQlViK3Y9VHskPTM7MFlPVSxZWjpVVSI2L1M5VFJzKUEkbTNTXXVRSE5paHdRQk8ueyU6b21jc1dya0hbTFowPEk6UjE5eFddO0F0TTIsRD06YFQ3SH1rdGA2L3lwJTVxSk9vWUFKLjkqNWpxL3VvIzZSKzVrP04vcGtlViEkUFQ+JTlRPjkjOW83KUx4XVlFN0B2X1VHSm52MU50''@;'; put 'put ''ZW9wNDxWI3R7IVJ+N3ZaeEJkUmJDXkVJRm93Z218eTBDMm5fI2lUdiM+ZUZZMDFCdH5qRmpkOUArLzFYQl0sLzMlVTdOW280ZE5oWiQmSVdARFV5YSQpSTxNU15xSnprUl45c29LK0U5TFRaa0h6RVs4QHFuXlRpM0l1Y2Mzdll0UGdsZmMpTTUjdVJ0ej5xW2ApI1NKPE9FTCVjX1R8QCVKY0xA''@;'; put 'put ''NV18RFhmQCxXdHVNYztfel5Nb0RpWiZRNzphWDBTWWAiNT9dIn1DQXFxfElsRTpjLm95eGtzMVBgdnN2bHAvbUJ4cUFHeFU7TWlRc3hJWV1ZM2VhNm0zSEk9WTtKbCNFNVBnSmxPL19kSzhlTHddUzY6PXs4dTRrfDd+MylOQE9sZCpYTEc9UjM/QDxMZXl6JEUxdygqRWtuTCVmc2wpKn55JEVJ''@;'; put 'put ''YUh3LjtHNnVtOm1xX1ZES15LSD5rPHhxMmRoaiJgJSN2eVBSZHMzPjFoO3dQVmpocChPYComPihaZzg7PSV7bV1EdikxMUtnY2JaW3U0eWZCdVlMKzo7MWhJTE9OVU8/KChlQiRIIXgmLmBwaHomZCp5cTh2P091c2o0Uz4iTz0oWl5SXVdQNmIwdkA7UGsscyRIaWFBb3xIdkg7aF9rVkYyY1Ev''@;'; put 'put ''aDwzLCVTOE5OdkFxX0IlMmNZVkBMYTh0eHFTWHt7TVlTQGZ5ciVlTE8zQHVvbFpqazh1Nz1YQS9PNjxmUEBUX1RCRk1vbjVLOis7dmN+c0ZAJWI/RTdBa1hwfnlkQUkoXkopfU8uLms2Xj1CYzBqNkd2YVBZP058M3whWzBxL1EvaVVvQDZXIyZqRkF5andWekl2RCNxVF5Yang+bG18biM+YkBX''@;'; put 'put ''bmlfQCFpfj1CNkJIeWJUZUJHUnVKKTxMdiJiXlhmPlIkc3dnMnNJWE03YkIvTCFuaDp8fCVYQ2lHMS9DV1k9JEJyVUJuWyxZRX4jeVcsLFZXL08pbC9MTXBkZUpLK1J9WWU6SDQsVSN2bTx4Y21lbUQwN2d1anR3VDpxbj8lQ1M2OEQwNTltRCsyKWYsWjQjQkBsMFdtNElwa0JDbCxpPmdSfk9w''@;'; put 'put ''ImFaIlp+a3dKbCFMelElIT9fRTBAcG91dDcjIUtmQSZbXSUkPWFrSVV1bGo2fmVzTXptNnkhSnUwLnFxJGhHa150WCw/YWA6XXVTYCE+YjBCXzVePDAhSyNXNClxbCE2JHlWUyFIZC5jTTwmQGYjWGY/eig0Q1pBbkJfK1AlNyZdY0B9WE9rQEt3XkJVQCVLUFpWZEk+I0MhY0chYm14Q2I0L1R1''@;'; put 'put ''OzspMndvW301fkxkYWkoKDJwWWFtTEp6PiNrZ1dWS2M7TEU5cGgpMXEkM1VvY082WD9HSlkzNT45MFJ7Jn1vKEg1ZkBLbXE8aXovaG5ob3RhT305bislZzAodGJwYzZwRSN2UTpFfmN1RDk7bDlHQU40MUAqREVFSmh0eFptJUYwSTk8cVY4MkxwQUFsdnZSSTBhXjlFMz5lKyNsWnxeWmpISHdy''@;'; put 'put ''L1lldE8kJjkkSl1hMDlyXmhLZCMkXiI3KlV5eWtieXoxI3tIUXAlVktSMXdMP25oe0J9TVFWfEBaaH1fQXp1V1g7I0loPndAdzIwaUM3JkJAR3h6fWhudnZTWjl8W2VGclhsbnYyNSNmfWdNPFBjW04kZVIjJTlJUl8lazYwJFQ2VkNLNThYM00kPyNVczNBYVlxeGx4L0tQXismTCIwZTgzWTZp''@;'; put 'put ''bT81aDhwQ21Vc2xmRERqe0dOVk5xMUxJTk52fE1rI2ZuY1EzYHJ5OTtSXklmYmFzRC9xdnt7Wm57LmZRb1AvRVpPLiZGMjZvKktkOiJiM2lwfTA9eHspJTU9WXskemQ+WyNtM19lVEN3KF5BUiIwI19DNipRQD1IWjQuWGJZXlpMI2s9JWhlUUZQSGEmNXZUTmxVR1UyVyZGM1NFZmNPUFJYJXxq''@;'; put 'put ''PkRUWSwhJWlFciN7YmA4NSZMcVB0cypHJihXWXE1cjJGXWl5VlVIZyZeUmtJIjI0bW5KU0hqP1NGa2lAKCgrdTBIYmFGL3R1Q2tTJWgpQm9QPUpyTCQxfn55azxlI1prXndzK01jd2sxJXJzVCRLZCxBU20wXkhyKnlxJSNZK3gzfkUmSDd8Mn1nSSExTFJwQ3p9Q1F7KiJGdmddaVdieSFIdmw2''@;'; put 'put ''TyIpKEsxOSk5fCtiZkl5bGY3aEtUb0l2XyhMYGRLTz80WEkvVVk9eVQsLkY6Rk9XXlJnRkJyeztgR3Y8eXV5UFk5VUxaLH1lJUAwY3NqQmlrN2swU1ExdTB6ajp5WVF0YWA4d3haTlRbSy4xVGxNWU91a2ZfWDtMN00weC5eTnxuIW8vTzt3ZklGKnx+T2l2XklZZi8hclNKOHJUO1lyOkV7YExa''@;'; put 'put ''MjVrZz49VWE6P3p0bCFKSjpBdFleZz5JOHkmcTI9MV5JMStEIiVdXWpfW3ZGQ3ZTO3h3fVNeWyo8NGVifiVbRFJbSlg6YFJ8dEk5Q0M8QDIiKkVIKEgrKVI5cV1UN1N3cGRwMHokIzZuQnFdRml9ZmhrJTNLcz9NfXtqaTFdPFI4aHF6a144X0szSEtufCs8aHs0YmxodSFhVDxzWytVISVDJiYr''@;'; put 'put ''SmwsQCwkQkE9UjJ8L2I1UWh6Iik5dEhHbyJ+L0RPZ1E4ajZgKGUuJDhZXVF3PE9QVnN4I2RfM2l5QkhCYjA3eXI0Nkl9Sjw2PnZ2Y2RFP1J9K2c5RnwyTXw4KUJSa0tkS2RkXUY8UD4/ditqe0t1KiRZd3puSk0vI3ZHUTRWLDk6Z3dqTzNsWzJiJjVFZCpCSSlnZUJSczI4Mzo6X0dCZD8wNDh2''@;'; put 'put ''cFV7IyI+M2A9VWs/WzFTdD8zNExgQF05O15meWIyd2gjbldCNDEqSTYuOHR0QCFmKG9pek8iWVF+RCFmKEtfcHM2SHNHblcxNUJwWz1QTVNTKU14XSFvMjp9WmhnfGNENVk5USNLb3lAd1RwaldNTFZlLHJmbWVFYEJWflNUemBVRVg+YmU/JDRbc0hzYmlVNjRkdVFEL2FeQVtva0QrcFV+IWAv''@;'; put 'put ''JnZXWE5lcmVvRXdBe1VCS2RCbSNgInk6OnN4b0lZRV87MGhwQUtjfEk2aSVVNmlVSTtqQXg/RSo6ZFJsZ2YkMmlFQHlScDdFR31zcT9WNWQhWWFTbmNIPShPdn15MVhfdGtediZQOWdWbmZQUTxMUCYqWC9VOiVpWWJaP2Z9entfO2syIyNkYWxeL3M2KFJ9MCthcHtNNyt3eEZ4cmo0Lyo6UGhi''@;'; put 'put ''bSFNZmZSZn4peUk6MlJ0JGxIQlp+ZHEjPmx0TC4pRTtsREFMPjQ2VmNVLD5XI2M9ZCZmRU4oUXVHQnhUQiV4I0UvcHY1W0FfXWNDRGh2a2Z4ZjVSXzptTEk7YzIqKithR1lpU1MqcFg3PG46Z095SFZBcV4hT2VvJHtBUTFhYDNNc2g6cVFNZXQ+eWthMkc5VCoxZEl0QmFtXUkxckRWajkoK3tJ''@;'; put 'put ''b1U+SmdVd09BIzgoI21mNSglPEd6c2B7bGF8aGV+Y3R0VFk6biY1M2hmZGszXTkwa0Epc3BsfSMsKjRRL1s7KH0wTD1yMzRLY2VNXVldWnZ1VjJUenR+Uiw5Q2IjTVhbU3UxKl1PUE54MTldb2habEFHXSVfL3k+c1JtOHVfcEE+V2ElMCJwWz1HaU9MR2FZb3UmZF8xcDlbTShMKXhhOixXIj54''@;'; put 'put ''KlI9YVR7U3tzIlJmWClxZTJwRnZBNTNZJXJSJDJ1VltraDlQZ1pxVUBZYiFqampNNl9YcUo1MClLcEx5XnBXKXpDODN9Ly5sbVRWJTcrLF9tZiw6fCxGRGgwS0hYS0I1PEYxTFtfbmpPY1U8THg0ZTssYTpyP0IyJURWUVtVYlZ+dH5BWzZYXytrKGtZMjkkOE1lOzJhezMuPUxHbk1VZjwxanFx''@;'; put 'put ''Z2EoN3R8Zz5YYiouXU9kcUFfIUg9bEJ5NlQ9MWVqbzdPdFpjeE01ZFVFST09aF5USyVweGEuUWRROCgiPm10SlBnVmJeN25YeT5gbSptSl91JG13SCVNS0RrfiZiWVFXOCZwSVpmNkNDKmsxI2ovPD09bEZaSyQ/LFgkYy5tWixiVyRWZ2ZPWzthQm1rZDE1bF84bjo5KFskcEIvd0ZSayxaS2Zb''@;'; put 'put ''eno4Tj5CYTIqfC92fG5JR2B3JVZ9PEt0a1EvbV5RemNYRH0mSy9EKEdeOzJ5Ok9bJmdpZGtJOUxOaSxSUklCfHEwYCZYW3wrT0RAUUEiamg9KmYyTk87eG17PU4zUH1MLDh5WXZ6fGRKc3RuUjMmYXpaREIwRj8jT09je0tyYE1MdClLIX5gXj8odXVOa11JaEI1JV5Ne09kRCE/MkRsaHEsW0RI''@;'; put 'put ''TTl6fnJGeFZ3REJ6SHFHIXxqM19fL2RMTVsqLFArRXxoeWgvKF10QFBUVXtRdzk0K3d3ZlVCdW5GJFdbU2dyKnpdWWMzNmFNJkxDJDRyeH5kJlNHNzk1VmZRXmJ+ZTxJSVNGYDo3aE8yMlFhPnoqYDdgalIkOjo/YXJJMUchN1c5cUdpdnVeb3d8L0JmV25leUg9JDg+dTVYN25DfHxoaXJ1WlFT''@;'; put 'put ''OCtpZEQqVD80WmQ6TmBWdWEhQikqIVJLbj1sLlowJTUiaWpNNjo8SzRLNlUhYVB1TX55bUhBTDYsQCRAV0ArKk5YYF1YJVIlRTpZQ0l5aXdRfVRyKTtwLjxhLElRLH19T1RkUlpDSmxIVUI4JUBnMzNDTkYrPjdUL0x3YWJfMDwiNzJJMzhoKWQla2xpJGd1PUZddWNEXlNjX2BSPVB3YypVeDd9''@;'; put 'put ''Y1NWUXhiMlFgL15fbiowTCxoc35hUD06VSJ3Kld1eUp0WHtzTDBtWWBIVTd1RztebEZNajwzTjlpXmFwP0lLPWdpXyZvWzYjWn4yMiFvUn1GKjRFNX5ETWQsRTBYIkd3L2YqMTNWUSUhX0dkQkI0aFhCIyNJJXRyVCMyKXY6KmBycFV+NDg2YWo6I2RiQC9RNCFVVG5uVTlKST5hd2l1fVFSbmok''@;'; put 'put ''TCNAQ0g0InRCaWY+MD1jYjl0P3thfndAR3skIT5nVGA9fU9ObTooY2VQbCk3SWNYdlY9UnJlLlNMLm5QX2ZyfHVVS1E0NVcuXUQraEZ6dWYzUyRpQW0oY11hOmFxMlgyP3YhJXNYMCxVPH1iW2ZHMz49PDFDOHpVSGxRc3klczY0VGN8bmo+T2RKSXpebD1mKG5+UVl+TlhgW1tJRW5OfUB8OFU5''@;'; put 'put ''KyNQbzxVPyVkdWM8MldUPHBvVGRTTUh+NFZzZz5rbV9uUzxSMDdPWiwxTjF7U2txYyZvcD43VV1SPjYoKVFaeitiaENPdjlDWmdha2g6cClGP1gifFZadj9VOTBpYkFdNFNqPkV9TUhhT0gjR1BgTkZaUWJkN0FsRV1dMXBNb3l7fjJPOWBjI2JYbXdsR2BLLnx0UHJ0NEErdEpuLC8udV4mTnJO''@;'; put 'put ''TkladzdFVyhjJUZeQFVUenoycWg8PzdUaWh1aU80Vjs3Ul53VGg+JSx1ez5UUnUyaktAMXFWT0N9U0AucUl4X3ZXIy8mWXImWysldn1zYDt3bkdnRVBicnQwXmdOVyR5OiNnRml0NjZJOzhuNn1hfnUlZyZgdltpIlk0LjJzcCM7V3tKME83Lk5MVyl3P0ZPPThgMihtPl90d0ghTzNJSSl5OVpF''@;'; put 'put ''Mj9iWSQlVWUuYEZIekZ5X2ZuS2dALix0Pz5QJTdZXWV6Pj0lL3V5N2A/In1BK1BpU1VeaFt5dlE4Sy4wV01tVDhxK3xmWlFGKnx9IWxBW3lhSyMhdnhaPXhqdDheekVoLmxgUzhiUTNEeml9VjA9Ln03JmcxSzh1I2EmbkoqcCpOOzFJYzBCXS9rRUwuYV5iQjFWLy9aVUMhfHR7MFZKOFs8bHsh''@;'; put 'put ''Y2BBdVF6WThtX1kvV0shcG5MNXVWflgyWDkpai4hWkJSe0ZuV0ZAVDxFa1tFTDk6JWdwajY6Xls8KT1VZUI7UW9jdCZBVTRoNEIpXU9yWS44Kz5kMlljLjIqakFVRixSLDopIzM2emY+fDl6dktAMUFqPWQ3QDBTWlFjIVpdUjtgN3t4SEMuOyU1ZHg+cFdTVH0qTUVjNjElJjNmVDFnXj0xejN+''@;'; put 'put ''d1A9MU1LNFcxRUdEdCxvX3JYN0B2OE92ZT0vITBAOkd4VDVNfD1KUVhtTmp9STZ5dTRIZVFmMmY3eUdVWntGWEZlZSh4Y1Y0fjUmUXJAR21BTEhwd0cqSG9HJmFPLHwiYn0jISFBMmpsSn1XPTR3Q3YhLiJ7bDtXTGV7bEdfTEJZRnlSLGAybl56LGYiKW95c11WLjB7V1dCSklzOG1hfnsySC5Z''@;'; put 'put ''VjAoYnc+Xmt+JUkrYlNYMVM2UChrYypufEw3YkwjI1ckSHRQcCl8aGhndn5mYzlhYnBZPGZfZ2ZxbDF7Z2IleUdwZHswan5lMnp9ZChwSmR+N3x5bzh5bHdnPCgqRHowbF1TfCR8MVE4QzlCellWdU4wSzhVbTB6RmMqPWk0aWMpT1VUeHtVKW9IOmVIN2gyZkgxT1N8e2MpQi9CYH0/ODZqeCJ2''@;'; put 'put ''djRbX2UyLClMKUkibk1uQ25gO1hmMzV9U358KlR6eUBFP1FxPGImLldkREo7Ol5pSil8cztoI2UwUGQ7LFVWU3s7XkZHQE9DY2xDZndCTTxZUygzKlR4RWpoQkYuJDcvdWBRVj9EU3NrYjlfTkFAPiQiJU9ITGpHbjVlNWs0YCp+Plp+JH1PLEowfEQoQC88bWRfeVRieUVuKUVzKE1TfjBGSixk''@;'; put 'put ''dTp6XW56YFBEQlpbSEF0SiE6JC91PzkqVEtvQ3whQiVwdk5MYGNPSl1ZKW5Kcjo9cDtEI3MwanNlSFBrInhCeyNuUmQjdEo7XjUmNCNWWjphWXVee0ptdT4iLm9pd1dvOSlvV3B1RlBxYkEhLGgsMTF6UG90NzxacS81IWVeVmRWWVRRYjU5OXEqbCVUczE2QGc0cmNOSWdmK1k+WWMubjJDRWIl''@;'; put 'put ''OEZNcl1HP0x+b3pyUjxZLFEsPC9kTjRRajU9ZFFabyI+YFFUQyFULyF4cSZRYHldbV9ANn1UXip6Zyh8YGpzMF5qPXRpUDliJHhuViVWY1ZyOTpDU09eNjFVOypGSDslJXNBPHpPUEE7UG9SZ0VWS0M3anZFUSNWazFwTWBZdlhbPnwjeiZ1dXI4UUJCUFkjWEZCfWg0bFpVLDVHWE1be2F1VXVb''@;'; put 'put ''azRpaXVsZjxBQiV6WTpmWlc0dXlNOjI8TnFnKXdYQi9Cc2s+ZHRLYUhsZThoPGJiKXlhT0lLfG9YS2s7ZWFmdzZVWGNZLDswbmhtInlES095On0rVV5ofHtdbDxNNzMldDl8JitFOVZCPXtZVmkmI0dLcjlhRV41e2U7ZCtrKXxnb35RLil6d0csNDB1Qzx3PnQzazpve3tHRVAqVUpwZjJwfGlE''@;'; put 'put ''RkgoK11PUylwUHhedjQ0d1FpXkBRLks9OHZGMm8mMlklRUs3VmxgRzJGNEZBL11yeEBwI25HMWxYaGJqWjN6I1Z5T1NFKmNjOE5IM2Z1TT1Ea1IoYSR4WHFyPU9GfVovPlk1YHcoZld9PE9Tc2pWLj8xeCkyeXEvRWQqWy56VDF8cH0+flJfMy9ARlozVTIid0Y8W185bmxjeCYxInE/QW1ZaVt9''@;'; put 'put ''UGNuei5PPmVkYmRaK3MiQVYxLjJOXTpkYH1dI14lYSwrIzkwZSU7LHNSY1tmfVU5K10+bFtlL1NdUUdVY2NnRSFvblAoe3I1dyk2XztHVjdaMTRUMXEqdlV9OENJQnw5eWJvZmIwPjYuOnlUclBkfjg7Km4xKnFfNT5xTWVTYkE6T0hSfTpPeV5dKzY8YlFKYSE5W1tuSnpBSmtzRkpkOXF0VXpm''@;'; put 'put ''RndhRCxNWm0uVmdpRiNhJnQ0Myg3L2dPc2NaIVBHOTRSO1g9VEhMOWBGOm0oNEJOSktgXmR+QUZVaHlfbHdKbWdbVEV1OT9xeDd8LlFGTz5XRkl4e3N4UnZpaVYiN1EvTUlyS2h0bHJzU093e3tlJU1bI0VASndfZDNNNkpyTEtDaD43K2BLeHpKQGUvZ2t0UG1ebjlLQm1beyhDXiFjMzY6c341''@;'; put 'put ''fFtMKXdhVmheR05xfn5Jfj02Tll+Vmdlc3B8KHBbVn0iOyRsM3A6JUs2N0RubT98M0hpUkJONz8+VUErd01wSEFydnN7Xi40LmhwY0pgNDs7c3t4S05+cWRGb2c5OF82fDZMNipjYjl4N3loezhWfFZMWTFsUFlYUGsyZVcwKns4Vk5keSpEIiJ8WVF8PHRyPyFvOy5YQyRwc2F2b1klRDRXaShW''@;'; put 'put ''Z0FxKGlETnZZaGozLG54WT1nZjElPUNNdUAhKGlVMFNLLlU1UjRCM0JMOyVgbld3JTo5bzFpfWgsMmV4NShMRTlPVX1OVFkwLjpHRCkhSkhQRVNnM1NRSXUqbGZXU2siJUo0b1Ztd2UoWmRwRj5ZbHFyb2gqJkg8Vk1AUW1wX0U3bCg2LERVI0tmJmJlSVdbUCReK2ckO1ReMlAsentKSG9taVgx''@;'; put 'put ''fEQjQl82LF1OUUhrenslRXpkTnVJaSshbEtoUmN9fD5vNndZPjkoZXg9T0lafkB6JmIyISJESW5yJn45UG9ELjFEImlXJUcyKyNgKDdZYkpZcnNWOTw3dEcmXjRRVXlnIkNdZjlZY0QhQk0iV0I7LjsxMSE8bkZPSCZAW1hWKFNZU1AvWigsKDwwOnlieSpseUtvSFQ7LGtTUVUmU18+QEdzSkA1''@;'; put 'put ''UjtvfmVjT05IIyw9IyU3OkhrbjpIUlZveTBHP2A2WTVgenVGZnJbeHE6dkJAYmZZXmx6a1hvZjp3NDl+by8ySG19SFB0QjA6IXVCQTEhRylFI3pjMGYlbHAvMWxqLF4zSnV6cXY7d103R2MrR2J0XnxhbDZbbzhgdz98RD5PMTNdKkdpVE1CVnJEcytmeEs0ZCQxVC9tLGMySzFRVGtPWWQxZFZ3''@;'; put 'put ''d285IXlLS2pYZXc2aSozPG9XTGc1dk9+OGR8R3Z0JDU0ejZjY1hrWiVXVVRtJVdHbCF+QlVDMjQqVEJjOzNGOldDaDQ0bzhFMUJedi9NRnI+cFtHR0R1VytOR0lXRiV4ZylbQmxOQkJaQyJ3PSN7VTUsOikwXiZVR2VGJEd4TmVsQ3BEK2E2dXlXISlGMTgyZSVYfCEzeF1ERUt6dXhfRmcjTmFj''@;'; put 'put ''Pj8mPmYmUmQ5eThCKigwXUFQPT8uNlRdK1EuRypGWn46fF1IdzldZjFhVCQmZmdsbW19JGUjNzJLJj09LlFUPSVnV1VmaH1rRyZTb0JbfjdbfmxGaUlHfTgsQm1jdU4kSy5KVWMrJkp0fm9fMmhXZ1lNSktCX2tGeG00X0diTlslNms3cHJeKHxmT2lJd3MkKmZeZWZoYyYhY3gxSUNMdDJVS2J0''@;'; put 'put ''SmZPKX57JiouSCZqNzU9bm0sMS9AQFB+eU9QMk46UTpqRUpTKDVnRzB8M0huR1dANlRed14zdUdoejVDLEkoaHRQPyZBbkxMMUYvY24vS0JmXj1FWUxXWm0mYnw5d1ZJcVFiSmxgfjxDe1ptWC9tXTtGITFAcW1OZ2VtZU9BciljZnw6O09CY3JZMTdjKXlaPTxZY0pfXWMkR1R+XzJxIzU4JGlO''@;'; put 'put ''LCNDc3pENFA3ZGo9VUpkYVU1Pn1SaWQoYT1SI0YkfFZwMnwlRCRab0RYO3k0REJ0NUdIOVJIL00ycS8jdSEjcmFhfGUuVGZdT0l8LEBgbl45S3h2Nm5wdCQpNFpbVixIXSpUdngyJXZIKlA4dj9lJiVqZjplJjgvKjU4YTQlNitQLGgvK21EMSNmd109QFtEcjIuLispJmd4QjpKcnIwQksxUksh''@;'; put 'put ''TFIpcVI3KmxmTyFPMlR2R09ITVJvNjo9czV8U3BuOExIIVpvMkAkLGpGTHpqUWlZWkgibH1tenlXKkJOJVhtP150MTJ9RWUsdihWaHxgQzxMXzxVWWohKS5dOztdeXNoUWxDTmNBWDF2KWJDaCFNIXFTN2MmfVlmRWY2UClsfGAwRnM/KWQ5S3lieDM1YlRiYDIldyZ9bSJ5KF9Pbm5ETzhLTU9D''@;'; put 'put ''I1ApU01kXXhHVi9AcWp8PSkpMHQ7PXBZe0hoSVFsNU5lJEZtTzEwaShPIiNvUjteL34sM3RBNiwyYWtWe31AbUxhSXpBOVAzXkt2Wz9naXwzLk43TE50TnhjZU4lNVNSc1ptT1lZPStKa0RSTXVXfER6Sn5ZV1Y6QiJEbTVxSTYkPkgrZDNbITJBb21gdE5uUGhQInhbSHkwfEB9dCtWcmh1QilV''@;'; put 'put ''ciFgd215X0d0JFFYbHFRPGllbXlhMzV5eCskbSFZNXpQLmQ4QWF9UnpDa0ZrZVlVZktZNyJrISVsKlo7MD9aKFE2WzBRbzF6SWJNUXwqKVhpVEUvUjNLR0FbL1RARWlReSlCMER1eS9Bck1VQXxbZXtKV2ZJYlpqQWpaRWg+Y2gyJmxbPWp1dFhVTWI6K242O24xPX4vV2AwJiQuank9PGljOXUu''@;'; put 'put ''bzB+bVNDcjxuQ3QqfTVBIURYOHl6e1siVD4uWntRVDx1RDtQTzZgPi98NEhRaTgrOERTR1s5WV85PXIhMyl2a3tyZG0sfUp1fCs3LER7c2RydmlzYH55czpgdlBpd1BNbUUqVk9+PUBUZkR3TjMqWi4zQj1tVVNkMyJ7MDNjaWZ8Ljp3NVV5Pn54Y2JvNGledVY3IlZ3OUNGNEJxV0xnMSVRUGk/''@;'; put 'put ''e3xJPEFqMUMjMyE0OzZgInBWWEwlKSQ+MU5xU3ZSdEVqbFZWODdzfE9rJmR3OnFyMWlfKU1ORCtIb2RmSGcpPF45OzJ4Tj5BeVRhUlB7NzxmKnMvTzZ0XVMuKShOPldhVW0lW05bLyIsaDVOKnVuKFd4M3JmNTAkXiQpYl0uYG58OUJOKTR+MV9FZSxYc29HVj1sYTZwemYrUylgYm9CeGtfdllP''@;'; put 'put ''bWRFXysvR3JZek5KRy8laXx4czNQci8oS0BWXTJ4aERRQDJAZytVcnxFXktpL2g6TlpuWERwXXtwdTRZL2VDcyE7LGVuVGFbSkMuR05PT2xrc2A4I2s8Lk5LbDUiKXhuIWRxVlEmZnNjdU9HIUUpQW92Wz9hWjUiOTBNV2k6WyVkYCooS1pwOk5HVzJzbmNieTh8MTZHVkxHR2BpezIrTUZSNDk3''@;'; put 'put ''bGl5W29xKEIrQ31nXlZXMD4rTmAjMVlNcWduVWVTQ2tkOW0pRDh9ZEkmeiZKbSVNR2t0L3cyRG4oMzBeNnlJOUd0ZztgKzp1eyhOKnM7Uk9KNyJDPlZMKUpRNmZXSS51Vj5kJXp8L21dQVRnZ0M3akR6amlyI1k+Rm4/flZfSVdYNHRNTj9qcWZ2QmNuamRUZkgyblZYdj9GWVFdaV1KQUYyXV1e''@;'; put 'put ''K1AsNysjbjhhdSxIRzFWdHp3N1F1Q2JpKCg4OTh9WFhEbGJEJGQ3QFNDIUk1LnsrNk93dHhYP1Q6biU6SVg+P3cybnxSInpMXSFRV1VVIV1JSV50SnAyXmNWYEE5Lzp4VEtZUVNLZikpQiYsOzR1T3JtTkJMUF1mQmJyaW90cVlbOm9fMzJaVkgzLkl2eWRPJGE3UGsidEN6PlM6d1V7L2lNQml4''@;'; put 'put ''P1ksbDk+fXxULEVfPVl3P3ZadkA0YzkxdWNHeC97MT02TmJDUGk5SUBVWlBeTV5WVjBdaEM1dEdrUVNwb2NKLmR1TllVTnJgRyFmKEVqfDFFKUwzZ1ZIdjAqb1V2M2J+JWt2MkIqVUxsY1pkK0JyTEV5XyIqbSJCbjVCL3A9L1M3P0l3dVY0azl0O2QySDVQPm5qSC9fbUJSbyNLe21dTlJKYG5r''@;'; put 'put ''KUAjLm51VEE6PUxOWHYzWkdyVkhNOCsic3hCKkVPUGwzeHNPM2VlWSZWITxNcF5Yb2VZcCYrdiJXVTg/KFdYZCZnWHMlZGNyeHU+eiN4Wls9O3lkSjFSPktFO2ZYbm1iUUJrKVNRcEhZdWcia2RoWX0qTX1DPVIkSnxDMW8pOThOWU0vcWQ8JjRPZD13ZzpkSCN1KypOTz8/dnEydzZEYiE3Mjwl''@;'; put 'put ''QyQldTBFWHE4Mm1naWl+WFUoQTFTPUxPNHNxVFlsXWguNTc4OXdOKih0KDZTOmckUzRlZ0dKXkVAOjNAY2EjIVB3KWdiWGdUeDBbZG8zYTw6VnBgUzlwTihHYSJUS2JMIjoyaUV7S1FFaH1iRF8rXilZYThkbSpRS0BoMm0mdWQkYlE5c0YubDddcl5rc1AvTnZbTkdORUR1QF84SWNdM098P19M''@;'; put 'put ''RWEsXkI6K1kpX0o9XTVoWz5XSjhVfHJMN3ghRjl3Zyhbcj9fQnlOaVdWVnRKInNXdEpgQV1YP0o1L0NWSEIqX1M+e0d+MnhMfipSNUx5Q1R0YnVtPSFFVF8iZD14W3REVSxHSXolYSxyRzwxXXtackZ9eW1aflVNUzBGY3BDIjhjPHUxXyRoeztCcXkmfisvWHFrNVVOInZGXTY3QFNzM1NVa2E5''@;'; put 'put ''OGxTdSJ8KStzdHpbMil+SCteJTl7KSU/Zj8qPzNVUENSL2F1eiZ0ckpDOGE9U3Z7LjY0QVk9RTV7cFAoUFZpOUd2OUl7O3xPSnJ1WmhYYFpNYk5JcT1iUlJRNFAxWTIyfX1pN25mfTZQa1gjWHUuSS88XmRraGx1IzMlKEE0U0BfciJmWmtQWHBMaX1xJip0VmFNQm93c1tAOiovO3gsKClZJFpx''@;'; put 'put ''KWFSZ1IlVkMofXw0S2V+NVtnRSE8ZURnOThYUVRjU0BoIl1ZViswRFpoRS5GI2VHK3ZYKTYrNltjMTBgMlFVMCtaZW40emUpZ3Q2YV95VHEyUTh3NXtsLDt7UVB5dCkieXhJdUpgN253K3RlLkJYRDQmUFMiQkwqPmckKihQWkowPzhDRVdqcUA+e0pnbz1VejtAP0spaUo3WnY8N0tqWkJISH1h''@;'; put 'put ''bVVhUExNRFomM1dHXWAxUSl9aHFnOE9HJmsoI2I7THVAc3huRHFkcUJ3L28rZmxMLm0jISY1JVFWc21ubndBSmspQ3VGKXB2Z1cjWEAmMz1QdnFFVzx8Zk9hXmkhbi4sUXUhImRSZEBmPFU5dUo1OH5BcFU/dHt1YUJbPDA9XSwweTlMeyFbWjBPcDNnW2pFSzJEdklMX1dvYngqQHF5TEdjcmg+''@;'; put 'put ''JiF8ZytwUykrb0piSFdyIzVnb1ApNFVUY2VrOE52OTdvVXRkNn0pbkhGYWE7S1AoOyw7ZFchJmhXbCFqa3o6Xz5mTXR8VDkkK1RvS2hLdGpVWWdoLiNTMUZBbFQ9eSRkZFN4X0ZSL3ZqL3wjd3NJN3NsJDkpTzAlQGJsT2JIUDx+eix8KGY2Sms7dlZPdV4wUjJjOyp8aX5pLHptMT0qMl1bWHtv''@;'; put 'put ''Wm5ZVVooSzx5Xyx3SiF7RWM7L1paRldabnZ+Sj0+LzNLdz4jYCwzWCVPNWFScEwqdGBdNEQsa1UuZV1mWldvXmhgcXhyJWhsOlA7LzExUlgoPCssJTI9RmlMfmQ/Nz47XXpjOXY1UGZ4QkY3LlVYY3ZHVG5DIyQ1O0cuQGNpcjRxbFJuUXYkYVhrRjI5RF1lMF1le2x0RXJZIWoyUDBeYkxQN3c2''@;'; put 'put ''djkjJS57Y3Rbb3lmbmY1UyleUzhMUDYuKUIiKCg7NUd9Y28ybCRlbnhmWSMiYzpscV5uOGJqT2BCaSohbGN5KFZYVEFjenR3UUAmW3c4WyYrX1A4SXcrXjVKYiU1cVIib2JEQm08dmNDSF0hZSNpVXNDS3VHVSI8aD4ySWV8O3RxMDFhWSMmMGhneWtWLitlT3NWRHUhPTEofFcsIVdXSENCXjYo''@;'; put 'put ''WjR6UCg5RE0vOWMvQG5yYSxqKzsoYihXZ1N1THNxQWY8T3xyZWFRND04YnhbXigseSFgNl01eyk5TFh3dVhIPmV9W3wya3ZMMSgzO2opN1g+XT1+cCNEVSVGX3FaK29XQz1Yfl1XRHdLa2NjRVsqJHE8RVdFc1RCU0hrX2JuQFtMPUVKUDc9MmJFYDwjIVpCI1JyQFBCSU09dSUzaklGUWsoRy5r''@;'; put 'put ''aS57X2g/blNVY1lFY1kudmNmbDVHOFI6ISJ1K2o6fiRKIih6Qk1mVEVCeUpKJDJrU2pjeWlII1JdcW5xYWB9ekhxUy45YHY7IkpjSmxYRUx5LyRRd0NsbFVTd0l2MSlJV1NOelJvRXRpcU43MENKImBMZyE9Qm1CYzA7Y0dTWV1vL1Qhc3I9enp+SygsfXFKRGdnJm10KnZWPFowP15jc0d7P0JF''@;'; put 'put ''SEMzSEYpamJ7fjZiIXxmXnx7OEtjZVtvS01AeDkiO3BHU0NnYWlVYjVZcDQ9P1Y1dEJQYCFWeWhKT0J8SHhYRj1gfWphIj0rNntbaEtLemQ9SSNkZTBudnpwK15BbnRWNj5WfURBcFg7LmhlUGkjWiVKPX1ed0V3dnA6TU5TJX51Sig/OW42c2xOQyhGeEt4SCE5SE9Rc0ZzaXV2NVJUV1VpRTI8''@;'; put 'put ''SC82PGwpVyJJY1NARTNvIjo3aF4vQ1oiNXApUDpsQC9PX24oT0toSnJCN2A1VHZyeDlbYGw2Z2N6RGdYJD5GP2d5SDF0aW1WdzdFPyZpQz0uKnh1cGQhQ3lYPiYyLzkqQ2g5MmMqZGkhR18/XzgzeWMqJnomb2pKOT8oQlQyRWt+T2VOIz5ZbiFzbyZbc0N2VzRePz5YQSNmTEdFVUp1cDkpQVhT''@;'; put 'put ''NWVeWmRfTCF8eDduL1ZsKTFNJHs6bzNPUixyLzRyNVlRbCg7anRoMVlfb04wSktAWjpgO2h1WlVyZmBoWGguXldPbDBISXthP1Y7QCxBZi5BVlFXR05ScFtDXjQuVFAzU25rbEpAX2pGa2d4dnZobCh6VUZqY2dHJlpVO349SVd5YDw1RiY6Y0ApMmdVMyJBSFArNVhWK1t6aXd1JTNEcWc8cExw''@;'; put 'put ''ekw5U3NyQ21geSgvJWRPcFtYXkBYPjR2TVtvSFk8U1B6eX1CLHpdRGZRMVJ0TGU+SyxqaWxhNFg8MlMwMl9QfWxLLi9MfiUvckgvKysxPW5SKUVVNF9JTlhqX3g0TFlrO2hrWD0qPn4rMi4+bzpxIXguOGJ7NzR4Wz5JU0wjeW09RWUjK2w6eHN+TWUlKjZOfSJJNWB4S2cxTUd2SitucGteTzNe''@;'; put 'put ''Qy9WWGlgcGJESDZ8OUVTNW8lbzBOPF13P0JeOHduYFlIOHEwYzhgdmVtXV0vITN1YmdKRihWXX1dWE1ZMHlyInZ7SHR1TXxLYGp7e0xUM2BpN0B5RjNnW1QvW3IvOjlHekNfcClNXmwvaG1nQzxMWWtzeW01cjlFO012dFIiQUYwdmMsRTN4fm94T1UjZEI4T05WeXlOeWRwI2BkW211bzlWfiNr''@;'; put 'put ''KWxDI0dYfkc4WjkvQnZFRlVwOHhfTlleUWZdP3opWCI2OVpUI3klTU44LzYrRGc8ZFFYbEA4S2J7RTc6QEB4PGUzPFluJGQpbGtMLk8/JV04SXx2TS9rITZ8dktyRHhnPHppKDJDIXdbKGJ2JUheSmVYa1tOIiJPP0liazRHUGQ9Lz00XVNQMHEhYWIqbEhGa1UuWyE4TW47KlJ3SS9mUUV2K0I1''@;'; put 'put ''PXZ9S356WmtBPEoqZjFPc11RbTgyMjtNdzc3JnEyfk8jVHhjYTRDd3Fwa3xwOS5bcm9TN2JpV1lQeXd1Q3leO344Mng/VD8yLHUpRzdnaFAuK3Z1NEYlKnk1dHg+KyQ0SWN7N0NCZ10xYEBQfFIyMXl0Lmc+LH57KnZxP248bns4LDk/ezB3Pz1KbStOditNLzI1SkJ1ZTRUaGBMRGNjYnpjLzQr''@;'; put 'put ''Z3MyIlI7YG80SHw+WTBALCNmY0ljYjl0X3pISjd6WyZOZCEvejZsdDdnUnw1dHx1ZitPaXozMTtNTG9bfVhqcGRpRXEmOU9GZFR1Y1phM1oxfEkyRih0Z141MUR+O2dNTzYydSVNd1ZzX0NZYlledUJDcEFmIyFfbnZmMH02UDh3KnArRlYxKzAsYnhnRGojRWxSMHtlPEUhInJoXnhtLGdOSERO''@;'; put 'put ''UD9kRDh7YCFscFhKRjI+OTQxai5jLzMlb21baCUvPVchdjhlSE9hfHxDO3x9SzclWz5pQUpqRzdyK1kyUDNHWHc3KVF8dmdiV09VTE06PldndVR6Wzo5JmlhMVBTVVYwRlUhYC9ed09sdj5jWDtIVlhEKXVlayUmUj9TYHtuel0vSjJSVW85WyJOd0NMM30xWjhPY2x8ZVd3NCp7ODI7PkZtVnJ0''@;'; put 'put ''V25IZH13NDpxWnNnMGJAYE9rVXtIPnlBeFYjZ1NhRmlURzlJPU9tPzZWazY9fTcvdDRWPDl1L2BSbTx4W0xSIXdpaV5NMGhEX0ZCRyhFNllTPyt+KGYmVCVHeGVFMVR4OWRLcj0wPG12ZDNiblBPIjkraTkvMHIoJTErZnQyKzxdVWssZCE8Y2tnezZaN0NYcCNidTN6a2NiX2MqIT85TjshIk4x''@;'; put 'put ''fXxlRT9wJEVIOkRoMGVJPT1yRiFsdjBteVFOSVozXkNjdT1DbVl2YiljZl5fRSxFeEw1KSE9MTR8dU8/YTpQJFtIanBnQTFiRUxacmxebDo1RC5OS31zOypPNWBfME1Ud0Z1dkElQnwuYnVLOW06U3VLazVrfUpCNlllRz52PnF1Q15sLihXZUddd0ojWjxsPHM6TGBiKURlK3B2LyQxclopMVNz''@;'; put 'put ''PSNWQ311eVcsaWR2TUwpdXFKUktzezIsfnp6U1JMcEFDKTRJNkBMRS9WdWkhMSpfWEZ5PUw+JGkpfUwhWnRKOVJWKn5XcVtNZHk7YjI0UkRCIlJ6eDw1YWB5ZDhhckxqM3VETzhDUlQuS1NDZ208SkU8SzBxczRiJnZMYG5HbFA+Sz9QLyVxKV1gVigyamZhTjtnXUdWIXNaVGpPY1NhZGJXJiU3''@;'; put 'put ''aVZne1JZWVslXm8hZkBAdHNSQ3pRUi82VWZ3UD1xZnxxOFRiOGFePGRlZEp4LDhWc053NGI8Zn5sXls8bHtmZjE+OkBXWVBeO2Y/IVJHdGkyVSpeLnA/WyxWRyE6TyVkJU5wOi55fCVFTnBdVzB8SGtzb2d9cmJRPGFUUzRsY287ZHFvfDc0MFJzYWozV3lsbmZBdWpnRDAjOTRAaT9SZ298LjIo''@;'; put 'put ''XjdlOD1OW1NQQCErfDxVPTdhZW9APEkmW212Um1oVnhgP2J3YC9Zbm9ZYTh5N3JwSDMyWlV+bHVdPyZtMChnVX1raWlWdiQ/LGJFaSY5eTRKJDUqQlkpT21vbHpwWylbXml6fmQ9IW9jNi5JYlVheCZjVyF+a25MYD1MRCV1ZmxiPFEzbD8qZ24rOmZZWjNjPjQ6ZWheUF4lMFlMcm05cTFdeXVy''@;'; put 'put ''QjhtKF5FVVBUVmEySUJefjoiIzZrPTBrZj4xNEp2XiR1a2VLTUN7dl07M3hzbUtXc2smd0U/YyssOXlEO1NOMFlpfmwqejByODB2OlpBbCVnM2IoNUh8QSgqIVVrWipCQWBjT1EqeCRubm8qfDRIO00oJWE7XjlNOlR9TT97aH56Qy9JRTtbND16MiFWWFUwYlBSfVs9Skw2TDlQVV17dzBOclFv''@;'; put 'put ''WGchaS9sP2hAVD49ZUcxXnNpRCgiRD9iZHBxQHxsTUBLNnBgKVMyOz1UdHNoYUhAaSl4XWlDKGoza1RUcCVqUHxOTTBrVi53KCopYCRNLEUmKFJzX3pAVGBmc1Z0ej9hZV15fTh1cVlDIyt3W0pZd2M3ZklFNThMUCN1c00rdXQ2N0MvIT5OQn0/bHIwfGQ8PnN3OV5aPnBgKC9DeVsyd31dXyUw''@;'; put 'put ''M15bZih2Wkk4PiROQVEiVyVqP2F1SEFoZGUjaXMqIVlpcWFddWNnaWtra1N7WlQ7YlshTlNWR1R9fGBpO3BxMEwjXmVZbjsxLEQqI3ZuRTA9Wzkkei9DcWlNXykpUSkoYUNYaGhYJnc2MUxuZztQXndpci9OSE9wZ1RHV1RpRTg3ai8qbGNVWW5tejkmPX1LSEIme0QjaipuKW9iQ2AiVj1yYSV3''@;'; put 'put ''aUMsJSZ1LlZCZDovPUddYClyI2ZoI00lRjJtJkBFTGxrWEIkK3FJNVcmQG90Ojk8T2pCUF1JbG5YLCUyREgwVlo0SXxuSSNkVixGPmt1RkJOI2ZWSHZdSl1SLlZYMEgjPjwmMUUkXU9kPTdKPWZidTJQPVFIZTNkZTFqVWZtNz1VbVlMUmlyZ3o7NSF3QiYmQFJETCRwR0hbYHRUNUFBUWdbZiFu''@;'; put 'put ''USNkPUdCZWwubCl8QDtjY0VYZXVzbnRxRntFaTpZbT84MTBYZjdTfnBIenIiWW9IOVIjJnZES3E4WyF7a3xZZ2tkJEZqS1J5OmtdNjQ3cXo9MiJOTHNxU056KDk1Pl52Pkl8ZFIjYHJMJGRbX1BLYTk0LmhfOyUraTUrVEhHM0w8dmU7XWxOd3JNbT1jYkhkayluR1ZPVzJ2SnhiI3FPfDpjcWlE''@;'; put 'put ''V3tuKF4vNnouQWBIRFJEbG9pNCl6SSZtNGJSRzQleWVgWUttNEtETlRlUTpDYms2P0Z6enF7Qm8zPS5mN3JENGZWTiQrRyFKRHZUb3ksfj5XY1Q2WyR6JHQ/Llg7KzJvOVc0dFp2cCZhbjNbP3ErN1Joek9LNCVKXiVZYnhOKTNDLCgvalhVXl11cUkyaEMlM3FOcExBdllFVVg/PUA5JFt5c1hl''@;'; put 'put ''TSJjWVJPQTU8PHA6KVJGVzcpLEtYTjIreUklWEhvZXg+PVQhJmNwNmFTcDpWVT9MVFIjciwqJXp4ZCQuOkpLenxybWE5SCU4JEBQNlp5XnBRdGxFZT49LlBjV2Ftb31qRSxeQ3FufX5rS0F0O31zQjEoVFFaNC8/dmVxLjFqZkJbOzNERCp8Jl1bODBLIUxbKWV2bEFDazNgXiFrYUNZbD4+OW85''@;'; put 'put ''dWQ9QWkiY18zIWFrYng8RlM7eSF3KDNUUmJ6Uz5mMCRHWGM7PjE4TkV0ZFlnKCNUTXVsYFowe3l1V20obGx7IS9ZIlIzXjJtdWcjLGxueytWWiZKU09zQHBtcllhYDlSS1dIT1NpfGFQTH5PWjk7RVRTWTdDLHx6XjMvd1VHZyhWQ08oKyk9I3RMKyxnWDFxWkpRdX1ybWAvJkxDKjQ/KkltaCFu''@;'; put 'put ''YWZrUiJddkA1eGB9W3YlZjFBSVNRKC9KQVh5IjlTV1BJY3lYSlB7QnthKTB4YkVUVjR6LClYKUpuWUxUO1VuIUxAI01+MXVNP19rVUhuJj1GWEo+ZVErKVh9UGZQQnw2OCNxQmZxQW0je2k0LFZfeHowJmlLYT16UlJ4S0FmLkhBZ0pxKWVbYjkmU255ZDU9N3UhfDxLVEo1bFBxVGEjXjdEeW01''@;'; put 'put ''MTtlPG9Xek42fFp2RmEyelE9WWlFPGNxbytpSFJpJTM6VzdAengqZis0c19eUj1wUnIpRTU4SEgpZCl0V1d8b2BVOnFMdEBAeGFnfGp0TTVGajRUbik1ITA2ejhYPUFIPT5UdD8iKHlrITwhbD1kZnZGSzcoInQzPXZCLD13N0UpRjpuU0Z1ezhOUHtNdzA5XXg9WzxnI2JHIjQ7YFA6YDBoWUBw''@;'; put 'put ''MUFJIkRYLCF1Rl9tZEBKUzE5UmVmZngsbX0ma1VEa2VFITw3dihWKmo9OE0pT0RLS04wJGJdRG10e3l4TU01aXpUIl1sOVcpLDk5QnI8bUhdTC9nQUtVN3Q2W140eDszbHo+MT5lanxGJDBUKXd4NmpTQnY4OjJaMnlBbWE4Vlh2LlYmIVZzRT5UfEkwWEhmODI3ay5GdT9VPV4jQSpDdDBaQUFi''@;'; put 'put ''eHtqNzREQjJtKTc9UklGIkJ3QGl5QkdHaDdCR0N8WW54MVN3USxLRzFZNHw8aGZxWFRIZ3JiWHtLSixvdmdafGh5Z11EPCQrT3lnTXVTcC9FRThrTmNyb0VbcGIwcjt8MU5aVl5NazFuMzs8JiFQbDslfl9OWnpUVixmWzFgRiE6PVdnPjYoNih6OWxnYXNbW3lOPEhPKXorNG1kcV5wS358ZUZ+''@;'; put 'put ''V1crfmZ+eiRtRD1WNFQvUzZabmEwZCxyeDVJdWFZTXlWQH5KX0lDKG5iLE1Me0ZJdUR3ZV80Zzp3RVJaaCoyNnc2JkovPktsejtkJGZxOlN0KUpxMzsoNCRscGdRKkw9Y20jXXhTfjl6Jmx5LlhESDFUSE1CI0hHKCpKKHBhJWRHNmVvcjMwO3hPUkg2VmIhQ1RpeGlBSWQkPCpWMUl5eFZZVSRN''@;'; put 'put ''IikwVWcleCpVZnlkUG5GI0VPYHlfLipQNigrfEI0UD1HIWBFPT5FXkA+cGpjeXFgXnB5PSxTeFh5IVRbR09qcUU8KUhNdjx3cFBGQHtxcExTaHA9em9KXVpqNEMrIWBWSz9gV0ptMSV1dG1wJF9AfT9ZMTZ+ODkrMkdGYFYqbFolVEk9NHVOaF1mfFRbPjg+RiJafHV3QiFvRDdne0drKWpBX1o/''@;'; put 'put ''YGtdTzpsJHlUcjY6Ujh6XU1hJHlDbCxES3hNYXt3PWg8flpYLy5wVTJJQUNTNlE6YixXVl4hP3ZJKSpeUlU+YmM7d3R2XXBlWyhbLj5MflFPWFJAI0s5dypdb3grUCpZK1F5Pl82YDlsX0RneiNHbG0pTmlrNF00V1AzfFBmLiV+a11wK3I1TzttdzMuZGNzb0dBUWR3a0IiIWZFZl97b2RxRlI5''@;'; put 'put ''JXElKWNwNmdWOigiNjBWbFd2JX58I1ttW15xe3dMVnVPd1lITFVAZFd7LGc0SE5TVzdGSXk2S3lLU0YkZVNnV090M3F8IUVONV5gXlFacXtOIkVmZDlTLm5eZjorYUhie2F8PUpwXSxvJTkzaW5IZ0lFZmgqQyZzNG8sZGcmfHFiPU98UHF1bUJOTl1bQmJuRHNbWEhIbT5VVzlBMkNddipFPHpJ''@;'; put 'put ''NV8wZiFqOjVJViolcTlAZG1PXS45d1pVOmc1Z2pTbDVgPjNQZnpjZkUlRSgqJUMwKDUpa2N8Sy9SUiolT1s6b1VrZkJLe0sufSNpKj1XJlhjIyxdb1EjRkg2L0pFZz9JdzNqR3JOLFRRI043JCNCUE4sWFojfnBDQ3NkRV9IWCJlMn5gR3coJV8saU56d0dvflpKZkZKSypSXylGQTVOT2xodnox''@;'; put 'put ''N2tWLlo2eF9DU0NNUltyezV+NnI2Q2JPfiJKMl10TmNKQGU7XVFFTyhIV3tsNDUpU3EhRHBeU0pjTTxOK35PcTJXfHdnX2hpPDpyX2dKKiUwMnk7cFNDc2gwfXQ0cHozK0doRWU5ZjdvP3xsYz5uRF9iXj5OYGVZcV1TZXhdci5jW0tKMzooWTYrMT9RY21iMz1WLCFNeC9+WmIzekJ0PE8mbVs5''@;'; put 'put ''UDQhW2ZIIUpNJndRbU46MHphLnUlY0ZJKFA4Y0BPPXo/bSxUaD1QYHMoME1gYmBsNH0sU3UxT3ZaVTcxWnVmQVdHflJgNER8RFIzaHFMbDR3YDhPTEIpcTYjWVQ7MUQuKUV3NjskbF0+fk4xXURofHg6dmd1bCZiMkNXVDZNcV9gaE09dT0/Zzx2S0I7UE14THQsO1FLRERAdF1XOEIwO2Y1RHU9''@;'; put 'put ''ZFUjcmV7cCs+TWZhQzMyOjFkbj8iUmVubUA9VUZEe29AS1l4SEZYYWhOdHxbVGZ0a3xCdGd8XXJPZCVYN15KJDlobS4uL1NZbVldV0NNKFphNUEoJFZMZXBzZFBfKkluailEJG5NVUk3ST15I0pRZShVeEtvYkZsdUBGeChpfVYyIWRDJml4NzcoeCEmNTJHLkIwWDE9bmBrNUwxYDpLUFNqJTZh''@;'; put 'put ''JDVBJEVjfmRVQCxiay5+X2QqeXYpZDxbel9ZUSEvK1NFVm0wMTo4KlAzfTcjOTBFQEpfKFttZlJoMjJSYXNtNylpUV15K2hdYWFPRTBJYl0+diw9RyFCdFBGcHxlWCElekBNWVoobmBNWlg0bl5Ncik/VVcofktHR29bcDZ9K15rdWIjb3hWYVc0X3xUek9DS2V2byJSRiE3fkAkM0UzWzQ5WThW''@;'; put 'put ''fFl5aiw+P1F4KGBYVFRXRjs1dzMmUX5sX040cSVhfGxgYSN3bTRVUHZKNmd8biliNClzPm8sL2xFb3M+WHNxJXdtbWQkKUFKVyNEZEU0d2lgYTl0NT5pOHU2ISkpPkxCUlt1PFM1L1prMyUiMkZBeTd6e0lXPzszMTFoMGY8fTA2KDNucEFuSCxnTW5fMVBYT0M1RWU7YWE0OkxLaT1AN058aDRj''@;'; put 'put ''Pm0paV9yRFpnIVBrOFsiS15hZ2s8by84RTNNaGpgNltyb0dCXz0haENFIWhRVGlhRkdMQyRiMFJtOj1lcz8uaGZhak47cXJvVXopNDpXSkF3TWJLL2hKUnhIPF9Pamp3eUNlKWw5TEghcTI9enhDMnQrJGV9SSxPZjR4PH04RTklb20zJFZ1eGhpb0J1KkooOiVyNU47a0w0PlNSIz0sNmV8QWtP''@;'; put 'put ''KipoIlczJnNzKnZMVTlaLmVRdyZiZ35WZiNGPGQ6TjdRIjZ4M1VHNH1Ndz5Bei8hS0MxSy9EPHMqSjVePXJ2PjMhW1Nhcj47ZG1kTmZxOEZBd189bnAvNSM5R2NuWHU8XVFkV0RROTxuNHViUlt4eHZkam1VPTlIZltCUShhOnNkUDAqY29lSXRaWj5TNSY3eVpVR3YiZXJfInIyXzR5am12fXBH''@;'; put 'put ''MllpaX1DZGNvOWZZaCtMV1lHeTdoSypfTX5dTShTZGZkem5hZSVwZ2E8QHVfXWJeYTZefTJXTnNGTk9+bSxUYjQlIiYoanUkJHs1MSJlc0hufTE6UytoQktWJU4kZ2kxMX52KzxULGtjeTYhUyEjWDQ9cFs6ckRpV21AYTgxeGddc35UWl9MaEoyNDsiKU96NiFuWVNGZGw9eXc4UClaWFBRKWdr''@;'; put 'put ''aXd+ZyVoK3NXWl1pRVhKKmhkKG5qdG56N3dffF0pOmtAX2YhU2ZRd3xGITh3QT03PjteR3o5YFB1UE1tUXk2V08yJUddJiIoRURFYDBxVlQuNWMjYiZpYXxHWFZROiM9KE9+d2JnPU88QXMsfiU6NyxFUFtfT1RbKHlTXX0seWAkV3hUWVk1JHw8MztSOC8lcEE4Ryp1WS88XTFmeE4lVkcwaD4+''@;'; put 'put ''TTRFL2VvKzwoIzN8RiNga0JreCNtRCxIdXhsSEd1RypJUUZ3Ilg9UWM7bTZ+OEI/YVpTZUwjJkhUWG1fMEYpUF5WUysuSjxZWGcrfmFAb21tciU2IjVrYFB7Wk4uLE5xZCY8MXc7L24rWzNnRn09MixNVGtwZVVPTXJpR3cuZyt6LzYqeDtATlhMTTJ4Q3IyL3NUczFAM0NNKysvLnV7P2pXUCZX''@;'; put 'put ''R28hWVJ9L2Nfe2s+ITBXdHl5TztnNzFIQCR7anJGaDI4TU1gTnVkMWVAWzg/IiNuc2oxUV4jWjJ1NVJIdCZdVl9AOHRySGw7blU5dk44WSUwP006biFeSUhhTWtvUTJsXiZUflo9aGJTLmZUfjVLZyRDdE16YDJUaTJNNVlFLGEyJnFQJHZJPChwO2lWU25obTcjQVVsTkJvOjJdYDI7XkosTGYh''@;'; put 'put ''enRdWHg+MT5DfEV2TDxQO2tlRylOVGMmQCg6PlBmOXNwR01hWEBfTXpoekZJc0w5US4jPksjWDQkS0o7aHxmZiFvcl5STiUpKD9Ncm95MDdqMEMucFZSSGh1ckhwWGlmRmJTdGgwaTA4enp6clBXdGVsX208eU49QVlOYEo3T14iPmEjQG5xbCxZMH0mS11QbjojOHx0fGdnWD1UZSN0dHA3TFRY''@;'; put 'put ''TzBlOXNQUFZ6PkxPWWpffjJVRyNqczl5IiNwcjYmTzxvSk5jd2llSHokNCZMKjQ1WCprPWVERnVNVTU5MWA/YnhNZHkyW1ZeMVZsNFFqWnhNVjgoNEVWQzFSdjh9TEwvZ0UrZXN3bVZCM3siM2g9U05ebSEvZWZ8WEpCbGBhK0ZhKjcpSWVJcFRkVENpMykydkNjMnFbRGZPVnNiP0tHMWRCJkd3''@;'; put 'put ''TChMRHp9Rk1tckouVWRxM10uS3VfUVhzSSReNlowazheIloxWm9QR0RTQDtsKVYqPGFXOktVTSxYZWlMQTYzL0B7aG1nRk1lTWgzfVEqKm9lLCkiRl85MTpNUVQyaHJUN0oiOlJocSVXeVBdNFBMJC5fPk5eVSRReUckcG1aPW1tIS5+Ok5iSW5sSFpBa0t9eSxRRkwrSihTaF40VF1mRWU4dGxT''@;'; put 'put ''Xkg/ZT5PL1lAXnxCfHpMOHxJT3gmblJ7VDZVKzA7bjddSm5IUXZqUChyUiQ3TjIrOXZsZn04Pm1gRGl+MFNCcGZFUFNHMk52Y1d0K0JBZUVRNSZ3WDVdXllMTkw6aUVeZWl8YmhQLzxCSi5WZTBAWEZqVj5zdUxlcztkPSVKU11NflIuOzt2WmRBOFpFW14wMDEkXUtPNUMkPnFCbVFmNyhsfkd5''@;'; put 'put ''R3tnJk1Rd2wwP2BiLzxdVHhwL0JsQjguczxUYHV8VD1JNntdfipLfitjZT48IyRZRnNBVUIzQjNPTEI8WFZfa0QlVWBJOyokNFcpMSliQCR8PCU+Tn4kRXpJTlMiTn1nT0J6MjI8YXFlSjwqayNHcStkNWMqfmg9MWEsfXUmaStnKWxENFtoJmh1b28yZ1ZJbElCWXZEfDQ/I1JQc0dOcX42d29T''@;'; put 'put ''Kz5uaV92VUtHS1EqUUMlVD8lflh0K0w+Nk1TL09nNDR0VyppTm9hT0RDTl13MHNSaVkoUXJVMW8mKl1QIm5qWFk3ITZNNzN5JDZvfEg9NFhpUSVAYGtGMTxFTGRiTztqcHQ2JWomZy99KSU4a2JaSzIufTQyPnkkRSVta2o2c1NpX1s6NF04dS4sYiJET2Mqd2xaImBhRj1qRUpJOHh2OThLLD1y''@;'; put 'put ''S1gmMUd5LGh6Z1d3R31OQGJdZXVtfWh1QnpMUTJPd3NqTkRvS2lARTcvcl58JU4/JntHbyJIe19ncGEyc2JSNTd+WH11TXJEPypWcmtgX0lad11MblRKZUpvSHZFTWxYRmJ4PHxXSy9GIUNgYyghY2EkZTh5RFI0LHJfRyZXeXVscVZPdGg8X18jMGkpVjB5dysrPUhUKnZoYFJdRFNQbTwsNE5Y''@;'; put 'put ''ZV94Ujhddj1xVyMucFRvRExxUWQsX3s+cGF4WiNUWSp+MSNUUW4sSUZlVnZeKT9tfn46eG0iKWkzelBUVW0zcy9IJXJBWTMuMzo1Lzs9bnxQQEMzfjI3KzQzMjRLfiNVJj16Pzp0MXJTYTpQYGNlODg8W2hdOCY6XUxZZkxCLHlSIWJZO0UhT2VpUmN8ISUkZl9pSUU9JChCLnZ0TU5YOmlgR3oq''@;'; put 'put ''dkNJLz8mM3JgKEBEdDZVOzo5OU0xUEZuRkZnd0ZqM1hPQH1YZURwbnNyPXI0cTU+Un5AMyNCSUVpZm12KFksIl5mTCEwImp3ZmcoY0lUd3o/NXtLInIle0pRWVlNYTBpe1ExayloYGkqeWZpTX0hSDRGRn58JFlUSTZhJlNKcmRjJVc5XkBuJU5dQ3pQJGJSOl5yKjs6eD8xaEFSaX5eaC4wQGgs''@;'; put 'put ''fCFqdypdVGJeQVI9OS5HWFU5Zzl6ODBxU3hCQSFoS0FGMS44WWVAY0ldfFMoNTR+MiMpSiUiUV8yNV9kdyhVSlZNe2I3S3VMZC42NWQuci9NUUhvYF5iY0J1IlIkQC54TCtlR2xKZEgxXWowY1JYXkxdQl9lImlLVjssI3p5LGNYIWl8T2JPO1oiSjgjIlN+QDtzQ10lQl1tfFBVcUk/dkRnP0dk''@;'; put 'put ''a1MjeGE0bkp4XW9gU1p6cEk1MXwzUGB8VDI3TUVDTltdIWpuXi9ofk1PJjNZKVFicD54eTFtYFdnJD1bVzxSKDBdamRWKTRiPVNgVWpefVZ+X2hMdmE7d0BIS2VNeysxXztaQCF7L0peYzVKIkZZMU9XTnIyIXpdL2x0WjJ6KDZuNTV2QmpsLEx1dFFnTSpxI3l2SzRfUT82NFdmU3VmTyV0eFsj''@;'; put 'put ''WCQ+b15uQik+Z3kuekQkLEhCYDBTNSV4UzBIZEZZPyNdTFcuLnp1OXRvYXw4JTh3Pjkqb2w/Ui5Bc1cqW3hUVD50Q0UwY2BHTGk2fHdkM2NNcVZbYUxjYz8kWWBLdClfJHJjeXRdYHovMGE+O2A2QiVRMGNoNmJlR0JjZF0xOnJ0Kk44Z19WSkh1XntFTHpQI004NlgvcSpGQkNAIWg6P2FzJSMw''@;'; put 'put ''aWloX1pOKjlsITw/fllDJEpZezlTMEp2Y2xLSGRzTz93QjU7L2N5U1c0USRqRCVydnxVRnRENkc8c24uSiVCOHx9K1djL213UUR5VFhzNmQobUttJSgmUz0/d2F4QUF0SzhWSkQlUGNXOCplOGRJYk5belB0b3ZDX1ZIYEFPelhqTWU1bjZZT2lMMVVbaE9TS3JSRkwwKitbYXFpMip7TTlLKjF5''@;'; put 'put ''VTl3TmwzIyVfdXVMfn5iaT1GdU0iVD4wPDFYL0suPFdnVSkjIz8jLFFNdnk7XkxyM0R7QWV8fn1Dek8oTGY/ZlpXUig4ZVtkWF56cU1zeShNIXNLSjJWZlpQSHMjTz9ZR2kwREQrPDd1SWkqQmVXfj9IZD94Yi5DOjNZVXptMWNAbi4vYCV+USg6NUR0K2ZJTi9eWk8jU3FmQXtwdHlVSlY0KjJw''@;'; put 'put ''ciRMTzBFMzh5WjRVKFRvUDc6eDBsL3NTQjh8Z2c5Oj8vMFRSJVN4eW5adVUpUiRldCE5MH40VFdPSUFXKzlRQGxXJmMxUGkjRSUwNHUkLy9mR0QmY3FUTDhjc340QFM9UF1VPkpsOkMxTGNSZU9wNWIyUG18UD09RV0/a3cmXnJ7O2kyW0VbJFZuOnZ8VkpPfHtET3dzMm1FYEdbKnQmOWFiP1BS''@;'; put 'put ''e3UkJGpdNGI4dWomVmFQQTE8R0clSU55S3dKQzszdmFfMiZvdW8lIURuZThFSTBmLHhCcmlAZnJ+PzdyIkojVDcqQG1YQTBkfCtwPUJmSF92QyZjRkxmYCZwdDZHLk92Sih9Q2RuSDopYSh6TG5+bmlSSWRvM2xHfURASTtnczAwOkBecG9WV2Y4MTU1ZkkxQHUxczQoLHA7O3VfOUs0Knl3N3t6''@;'; put 'put ''T3M1KnVYSHZbM2FiczZFMlYhdExrO0xMe2l5WjUsRCpvITZeR0dqfDduc1c8Zi44TmxAe3VHMF5YJE1rQCFQRT5OTzc2bG0+cWFhV0FrSHBGNWIqZUg4W30xMWwuZngkJlgqdyJCcUI8I3I4bXpMLkZhdG5jJFg+N0R7d3FbbkslJTdRajdPQmlxb1tNW111RTJBOkAxM2sjbS9UQGtVUTthYlFJ''@;'; put 'put ''OT1CVCZ7MTZYMXR9eCMlJldtKnRFNjhFJXxsbDhSOTRvcW5ZUX56M2ZNPERHZG88SHtYUWA6QlNIfnI5MFFxOEVnNV9TcV4oRSNsPUZUNz8zKmh0ZnhoSTJnM3lvTWN7O0Z8RylvZCpQX3IoTiY2PiU7bDo/d2IxZV0mWnpLQEtZRHZua1tubiRsdmEiYTFhMkhaPEJMWFdkclpVX1J5ezkjOkdm''@;'; put 'put ''elModXhIK0h7MmdCRVUsci5HS1NHO1hySyJXZzNCflROeV47Pi9xQlE2OipIUjslcXpmZCp7dyZsVl18ez5PWEtsTmo7R1ojTmZOOEIuJG1HUFApPCREd31JRWtLKiNkMG9eSDUvKTN6VDgvYCo0aHpDUyRTKDlPaCx6K0lCUlBESEslXldiKH1Ra3hQK18jNmxzOXZPITcubjUhTyE6UDduPExI''@;'; put 'put ''ZlNPXm5VVihkalBEI0g6OmhvZGNvTjxYMzYrKDRXZWArKFtGejRITCM9ekN4M0YxTlVNJndAfkkxd2F9O3VkKy9sKTouLElQa0xGMVR4MXZqRSN7JntDcntoLEI3cVFkYTMsdn4xMHlONyoqeFFbRkh0eHs9UX1eZzNSbGpCJm1xLnJwdT9JTmo1ZS95OExRV1JdeEVeZCw8RCxpbE5kPXkuY0ZT''@;'; put 'put ''PS55SzxuIz47diJ7JkA1RG03R003Y3xCZT9AQFRYMko7JiRuVV93Mit5LGs+aFEyVDBUPH1HYGhVI0tQa34lOSx7PUB0PTZUZS81QGUpX2tNMiJKd3d8cnhiXlZKdTR+VmJFJC8wKDkqc0wsLk5kSWUiK0BtMkdpIjo9TCkrIkdbLEZpZk8pMyxjWC9tLj1HZk1YdE0rZkU1TEdCXVVjQnpZazQ3''@;'; put 'put ''SHhQPEYmfWdmPn5wYkx0UHVyaj9CSHJgYmdqeS4xeFNgOV17Imd1WUV6Tz5OQiYlSWE/QihXREAwdVZlTyh5XS5UN096K2pFWX0mbzZUaTxacFZuNy5jNVBLRFlmSU9edXxRczZzQ2x1OlVGQHFKOXBHRiFPNiQ9Sk5fdShtVE9+dUI2NmgoIVlSK1ZMKCEqaHszT3l6JmNeOFQoSHN2dFZ3RWYs''@;'; put 'put ''P0RlXl5sZyxNdXk4IU85fFdaYiRySEMmSzdxRz1HUE1xWmA9RjE6YTNgRkg2dyE1Lllzc0FSO3JFPnBgcF1IaHd3VUMubiw/aV5ze1AufFs1OT1CcGoyMCxVajZGKVhbbEV1UTtCXkoudGUvTDMybFd8Tkh1W2Znd1R0fG5YI35eVEx8XSYwNlBPI0pBe29OPkQ4Zn1DQGg4Q1lFZVh8eS8qKV44''@;'; put 'put ''WDkvMSMjbC9SXlkhWzI5PGg9V3tGJU5tSTt4JWM5eHdlcmk6RlU6ZFlSVlA/WkQ4Y1YyZTMhNTo8ZDRROUdsX2JFRig8PHkyPWV7NFA+cUFLXVJrKXs9TzZbV1l0eHZgaH4vfnxAY3Y0cDc+T2BZOy95SkBoQSM3fFFvWF9nXztvbUJZKiFSQV08Kjc5PCN9L2RfWVApalo0Q3VQJXYqSnYhfXA0''@;'; put 'put ''eFc0Q1hAcDpPeixTd2NQbEc7VV9sbVRyemh7SElIIzhQQCNHdXthOEFwST5qLCZ0VzpldHMoOS9yZS5GfkdnRFFhbCkkUmJ0QT0sT0d9MElxOCMhQnM2NDdPXURRZUE1fWR+IVdrV0Z1aXQ7VGMlPiZSJD1nVS5uZyg/QnFTJjZYeVBpWTZvcTJrKzBwNjNDSG5tSSRdZH53NSZdZWY6KG8mVW87''@;'; put 'put ''WFRTOm95KE13bUtoZ1hSP2lJcHgzZlJ+NS99RHE+Z0FuX09HbTJYfndzK3xPbEljPVlOelpPLjxoPTN3XzZiUlVFPWlObTlteDBuJUtZNDwhNnBYfG1PI1QodXBENW0kaE5FLmtkNVZjVTsmdTZ3anhyTlFwY3txb1kmK3FpZjNbRGU5MF8jaztvZUY6Il1lSDh9RT1tfXh1LCNWPWd+LE9sLnQz''@;'; put 'put ''IXY7PjY7W3UvaU5eTyJGazl0QVJrXT9UTiJGcGJzJVgzP3F0bGg4U1AoLGp8VHQ+VVN3SFtNemQ/UnEjXylCdyF3Rm1GLlpZYlNUYy9aUl53LjJSQ0dlUyw3MHAiK31IREYzU2tEZ1BRR1t3SXNTe0JIUntGJXQ3YE4+Q3BqSmZzU3NIYFl0W0huLjRfdUA2NkVnJT1xIVQlZjoyTXgiVyF3aFkx''@;'; put 'put ''UFYvTFtadFt+Pk5YMn0pPm9DeVR1biV5cGc0IWIkT0pPQzhaMDYhWytdZTVGYTgrRWswd2dXXVJUb3RDKEE5S1QyZXBFVUI5dUBqYE4pM0dERUJffk9Ze2B7Ok1eNEF1OGs0XVBIOzl1d2BuP3pJeTVJKFtuJXJ4bnwxe29nSDZBJnVWUE92P0cuV3khK1tpQitjXmRDUj5JVj05cCJVW3VbTTks''@;'; put 'put ''IUVrPD5Ad1ckOFFsXUZYXm1mInAld0I/KD1mJE42IVlXUTxtZjVRKntbKTczV0dyZGVeeUxhX1l0NGt9dT8sTiEiMSRyRyJfSjROWldMbVhuakNaY0NHZSEqOiZgUWI+LEZ2QjwyfilPb1VrMWFAfVo5b1VeYyhJT1g6LFs1T1ZhQmQ1OWZEOVFUUH08TCV+TFYkTmBtQVhHYDxgSnc1NjkuKi5I''@;'; put 'put ''MkEiVit3Qn1eZkhfaUh6dEh0OCU9U1MuMjJvWnU6KipOI3xvTURlVSwxJi51aWE8NCs3UyM+JTY4c2NVWSFCI00le2twNFFKPF1kWTlPRFRzSU5jX2AhZVpqJVs/U0ExZ21tTXhMU3slQVRpPCtwQWVWZnlLcjlLNV4lVGVBUUxuRlRNL0NhbSxNLnIjZkpjV0p4blk2JHJLczN2eFYrLy9VRVd8''@;'; put 'put ''V1pZbT9OVmRgXnlkVUlocGAmaWMyX0dpSERHKzEkTWhYeyIsdjNBRiRyRmhiaDtEbjQ9PjpZeD9BaSFwOnoiKSJ2YEhOQ0ttTnBUJiRnUF4jZkI3JGgsSngrOjdiS0tWMCRAWzpKUHszNCtOUERUYXUuKE5NTE0mYWhhdjFJbkw9aCVgM2VpaU4qVWFsNm0rNHA9fjlLWG97WXFXLn5mfi5RSGp6''@;'; put 'put ''R2VeK3VwMW5CVSleX0B0aGEuSTJMNSIrZjtWPz5aP1gofWwvdiswbjMuNlFWezQwczAuTDM7SjwrV1IyKDpIKnBHSXMjdHc0fDVUd343LFEiOGciUWguTDxQUiFKTHAwVXtlKDs7SHNmRSZTTlc0TVgjeVZuUlN2d2gwc0gyYDhqbVZCZTxwRSxlUVF3eGs8OFFWNX5tV3hXLykyL3doMnhFWFtE''@;'; put 'put ''UTcyODwpVHZLTUUkLmZqdFZsbXxtaFo8ViZ1dDBpKnhRPm9sVHhrJCt0TW94aHt1Rytfck8wWHRgOms+S2xGLiF8T1slWHxRZC5Caz13TnV+NTdnO1FQWUohQngqXy8+RTdxRyxrT187T1dOcDJ6L0VeKFVscEMsZ3pwUz5yM290XnxdSlRAWUdUTHpWMHsxaXQoQ2NnNDZub3hXRmtwJlVje3V8''@;'; put 'put ''X1U8elM+dll1PHdGU0hyQXVUQHM3WXkyVXpQI0dDM0dRfCUrZGAzU1swVkVZO14mME9hVCNLfj5LSnY1I0U+WGA/QzlXJEduWz9ERlYjTXY6e35BTypSSVMpUkVQSWhTOzM6Imx2JGopJTZpczxsYWFPcylWPiwrQFJwTUtzK19YQEsjYUNJU1F6R145PS8lRC9qdlRTYWN0Pkc6TnRqQSYoS0xS''@;'; put 'put ''bFdOQTYhe3oxd1g4REc+KnZYR3VQLypFM1I+cCo8bTh1cEx5eng2WDZAckdSJTd1d2kzKi83cnEudENIN1VQaEhBKGJyaDE9XlR+WnhfN18sSFVwImYoTjd9P25heENtNVIuQDJocE5RIXxOJkNyT15JaXBpIXdSRXdyPy5rJW91cHpaeVVvbysxdUhgXyIrMX4hOklwSTFFRyhDeFRSOX5aQTY/''@;'; put 'put ''Wyl1I3tpIyImVzgpejpLV20vNS5qaEZfWkBQMUU3Lj0+VTMhUEU6VXpgUkN2dThzNDhsNylUWW5dITYqZys8ODgmd3QzPEROJWJNamcpISVSUltIakU4YTojezs+Y1cxb0smOHxYTjpgJEQyZmQuLilKO15hQTBTdkZCY21SRj85QnBOJFZbZkF5ZDA8TnxyMyhZKztWcis1XmB6a2o0USUwIy9i''@;'; put 'put ''SiI8aENWUnpxZF1jY2RZNShgKyRocD0qNlF1bmV9XUZZL1EsZlJWPlBXWERbOTpebUgxKUpOVSllKkx8aXxfeV4lWDFSfHhacSVxOW13I2BUK3MwaFkma0BLcnE1YVRqLjZQNXZJbkluTHVhRDoveiRvZjJpZ0YpVCQ1XyYwZnxCXyglSHgzdC87blhfLEFtJHRCPSEiV3gkYlMxeUc/bCtWXl9L''@;'; put 'put ''O0R9YzRxPGllXT5+fDBKL3xFYVFtYkxVLDt3NDdbOWh6WH46cERSeVVUYUhkW05YP0JAWTxyQnRqMn5TPi9xXnlHeDM/bXFrWVFhU29uNyozJHksVC4lNX5lIzt+NjtHb1cmaWlzXSpZdG1WVUIhY3xPdVoqej9xbi8qbU9VPC4hJGg9aUE+YCs8ciN9PUlaQ1l+OUZydUpscG56QDIjNn0qVVBK''@;'; put 'put ''XjMrPEZMbihAS0RQdngrKTwkMDdJbUFMZzo6bHwzYlYuK35AOCVzQl01QXBtLHFdVEBiKlsvW1NxUkxPMU58KWhJeWBsRCN1c2FHLl1fVisiYGdhPihsVDpZRTciaCp2dlZ4Nm9zW2lNdVZjJFBpSVYlfkRma0dYeU9FOCMzQ31JZnF6WEdpdVA+WloqUml6L0k/XSZySGB2SENFcDJ1SiF1TnAm''@;'; put 'put ''KThsK01bVCQmYnU7ezFUK2Q1WnF0WTNLYX1mW3pLb1E0R1o5S1FLMmpGQ0NuajJvaUNVTlg2cHouMHRSdW1rI0dLSWlRSy59Q2A4JVBCaSRvaSsvMnVTL0RWd0xWSSNhcHcjR0hPK3NaWSlfQntobHlaPj9idDFQMlV0PmN8WWMvZS4+QSFzb2xqNFE0UiZVZj5eQkJdMGlEYS9mUU5eYnc+ey5Q''@;'; put 'put ''SEkyaEA3czYkdnd6W0tddHZ9OVhUXio6UWw2Xm1+VE8manpqcjkqfWh3Lz1rSmtNUURbb1JnQ3JFXkZ3TW06TCokM3g8RkRvKkIybmUsM21rbjVESzApXV1YU0drSW0+PVhBemI9Sk9pRn5lSjUqRGp3LExYciYuLlJiRWh5b2gpem19TEtIZSpSdX5ifTolSHw+QktNKTR9Nj93aUo7L1VRQURQ''@;'; put 'put ''Oz8vZUczIkghb1FFVkQpb3o9P01GWGBoa0dAS3d+NzkvazBDVSEoS05vb05fM01wdn0kPnY2RkxtOkNjJmxxd35jOzBUVm5eMjswdEJZSGVOXSwrfS87PCl4NC94KlIvQzUqUEthSXRSLmhec01tNSh5a3RRQ0VHRktOLl58YGp+M1VuKyg+b2oxVyt7cXVNJGkkYzNlZ0xHL3QoPF83JlIxRnRK''@;'; put 'put ''UkwjOWY+QU9PWjMxYU1eanwxayVmNVk4IUNyfTlIKmxXYlklWXo0T2VsWnpGbHguMlI5NUI+dFFTPVY1OnJ5Tj9aNW9HbC53eWQmQ0w/fWx8dGJmfHhLMThSa1lSTnpHcmRnK25MMC4sNXQjQ3J2dU5mbVdDP0N7U0siLHg5XnMsQX01YzJCNy8mX3VlVz4yYEVfXX1QQVkuLkU2bk58VGFkPGl7''@;'; put 'put ''W1hfaixrJTp1Yk84N09Manl4UH5QcDFmWCV4OWBHcTBMT0NTJVByViF3d190bkVeenY9SjdMJmcrWX1MR0JFaTxmfXBVOVAiRDN2M3RvK013ZTEsYGo9UGlxMEAqaDhQcmdHRWptOkByWyp6N2IvWSM9cmsvamlNSj4hLnBLIj5PcFgxLjBDeSFNXUBDWVQhIXBvKUNTPGVTPEtOd3AvJjEmYEBN''@;'; put 'put ''OU0sZiE+eUZVPCpaVTYvbCVhWUtUfkFDLkFXYDlNXXxnJVZ8MmokKVR3V3BePF8pb1N0MXc2bzBBNmszQ0ssKmc4ZzU3azp9c0t9S0Jtd2hFWSQ/XjE+PXJmXjtrZGpweV9oOFRFOENdKCZXfmBaNXomNl5VOiM2LzVhNy4kNWoseF9aPnAseTRQTSleL19rZH5WWFFeRDghcmZAYCwmInViTVpm''@;'; put 'put ''YyRae1VBXkBRWSlUWkFIbS5MdTl0PEZddzxISzQ/VjdgWTQleSt3KGFdKVU+Y0RISF5RKSp9JSYycHJ7TEQmfjdjPzdHZ2RUe1JQUCs3LlJhZ1t3S013VmJFfmJTQGxgT1dtV3w4MlNpZlhCeU5wO21zQnZpUDVxLCVdXk40YXtPQz1bOnE0QDRuXjdgZDtgTyZlS2p+XT04em9rY1VyalZ2Z0p2''@;'; put 'put ''bURjWzZbVkZkKXhCS01AfDBKMklMIW1PKGp1KzlXbm1gRFo6fSlXfG9IWF4+eDlyL0hMREs9fnxLUjdXWiUoZ30xcWA9fUBSPzAxbzF9MEduJWUwLHZuUUxveSUpLiRjIltjSX5CREI1eDwhPT9pUUFtYUE+c3NxKS9DQCorUjA2XVZbL1EySXhhL1loMGleJGlkIzUjPVJmWX47fSZLUTR0TS9x''@;'; put 'put ''SUg4fFN8XmZSWi40V18pOXlhflJmM1hnaWJjNl8zP3kqMlNtNT0+XSRnSWYqW2RmWWMlMTFIbjN0V0FIQm4uPFVSMSRzN3hBRlFjWyRCQ3JmWSVqOyNLSFZfZ2MuNiVEOHZ9Z3YsX15ob0QrMyxudClbKXNZcG10Wj49QGI0e2Ize2hYOSIyPixPOGZ2ImNNb1AsIyRzLCRyVWpUMH0yKSROQD5M''@;'; put 'put ''S084VH1hQmkwczJtLmR7PClrUHQ7Pl55SjQ0b2t2SHI3ZEpQL2ZhKkp4SGZQSDJ9cTN2MWc6JjE2SCxyKlhPXlBCZlAxb1ZSczVqbHtmNyhNTnQ0NUtVRDBmQTVfQmZ9N3MzVDlvbn4+by9Fdn5CMFdhIVYzNHdMWnA5Y3FdcHApUzlDUXc+XTkvW3pEJTFHUDNldDgmfE53P0xNNWg1UW5mPXl+''@;'; put 'put ''dXtZSnRsWH5ldld4Lmw5NmgsOT0kc31nYW1YeC55RFF3WHNwdGhsNll6b2hgY05ZOVc6Kzl1Oi44MGR1PiUqSUlJaGo/YjwvIWhtTDtRck0yTnk/dDUpQnskZDlCUnVUcW0sLE9tWW4/NHE1SntEKyJkTm1hNnA8MXM1dlZvMUg3WD9ESVh8dTFTJl10UE07eXVxQG5eMSVZXWo0Y303aSU+aF9R''@;'; put 'put ''WGFlT1MrVFY5Y31AajdjJF9eTlQ7M303QjE+YzVfY1AjXjUyPmBYc2VeSX4jdVNnaD9YQFQkbV9TWCN2aTg/Zz4oJkFqQGFJPSgwaDA3MGtuI3hDRDQlUz95bFVBRGljW0NqdjBDJWJzZ1ZgN115UGpbSHVjNCU2LF9Gc19GQSE4dGhVMShzYjohVFJjSlQoOWUqflpkLDxXbnAwMkJJJWNoMmI5''@;'; put 'put ''XjNHXytrY1NffG5USShHUz0zPUBLa3ZAdipSTiQsVzdDdkx4WWMlS31sYFRsM1lkZyFDS2xoQmpPME5pK2NRVng5ZnNOSzxVPDs6MHQ5a2ZCUT1+aCEzWD1NfX5XNX56fV5wJitCYF5qdVU4ZSlPMHY/JC5nPjlWNi5tVCRIbipgWSZkMldybm5LLy5qaTJKNlpgL0VpYHt9endQNH49L090Ul4/''@;'; put 'put ''aH5zdkxzU1dPZXRzLmRoU18qPEYyUyZRQmJ6dDJtRmYlZDtKMz96WnpvSXNNUSpQXzdXYD4idnpbNWlEfHg7KCwoXXB1WT80N0tnUTM2RCQkT2ErYWc+ZmZwMEI6L3orTCR8KCU9NTd7U301ZT1TXk5uSUtva3d9SyspYTAmfFtDM3pPfG9wTnhaaHlzfEVRdEc5eEEiRCIjdSQqLGIyTTRXUmQ4''@;'; put 'put ''OTJZOkFONkg/MF5iaGxsTmprPDE/O3x8LFROTWBEeXA/P3N3OlsrJlNmcCN6dnJDezcpXXhJbzoxd3csOnsyamU7VCw9Tkp+ck1+WzFyJWxCIVBJakBHPT52YEp9QmV3Q14+IT5QaDc0bXZvNFBfZC9WRnkifF9xbmVgISJDW15xT2FPdSIpUHA/YDFjPC9LUXlkd1lJfj1PRm8qXkN9Zz87Sl9v''@;'; put 'put ''bFB2ZWYwayloKTNtcHlRXl0sSio8MnBzY20qTDhhdmxrNH56WnA4PWx0Qy8hRkxCLHNUQUNEKHE0akgzdSYiXmpoVlFLKlc6czhGOitsPmdpMHt5ail3ZV83dCNRdFVIbmU3OkZqKjp7Oy80dmJ2dnJSSlZ1QkF+Z1U/Ri9rejxHb3dZQD4zdyhkSFg8TGFmPDpkMi53PjwmIz0/KSZ3Xyh3YVo6''@;'; put 'put ''JCo1TCRkOWxWdSpZYkhRcHM6Mi9xXVJBekFDaDZgKDVSU3tJTkRPVUFVW3k7ZXtaNk0mWHVINk5gfH1HekkkbDNCNz5FI1BLSTMjOXNJI0htb3U3YmFxVlIzSlhdQUd8RnQoMT5VUm9DQllpd0JidmNxKU54eXc1fXhsSn5TRTNZLzM5a2lxMHtuenE/WW18U01pKkY+Wl5kYiVNR1p0LyR+eThY''@;'; put 'put ''fD8yV29XQX4vXUMsK1RfI3xZRS4oXWJ9KHdnVEhYcXgxQm5DTkxibFRxVnk8W3wvensoQGA2SlRZMlRwL3xzJEpEXltrXzFXbiZtIWVCJG44SClqNyh0RjIwbldDMCRtYW5mKVdafDYuUVFaam5VIz87SCtRSSFlOjh7eGtjWVE9UFkuRiYwZld2dEh7bk02SDEmXjpdPVY+eFdLWG8rI3xNfDsh''@;'; put 'put ''dmYmUDJLSjxhMj1WI1psaXVfOi9hKDRQcndeOixHPng6N2ZLJkxlUSkvY193SyVjeFZ6aVBKQWNdVyUkWWQ9ZU16SjEuYGc4WHoqMCtSZyJIOmYzMWdTcFAvc1cmJDB7NW5pITNfc31LWDVYUEo1JCVyUTlEK3dHRHdydlhMZmhlM3p5N2VSVH5YLFdPMTMsYiFCbTlsTmgrLiEzOi9aNz5gY35U''@;'; put 'put ''VENEdWBQa15dTEJCS05mZiM3REo0YjlVbTY9TmR4WDgrZ0REL2lSfjdoPn5AaDs1LHZCRz9dPzk9NikueCpvcUptIjU8ZFdSIjp9TWxienFoRT1qdmxYUi9IVnR7SSFQdiV1ZVFiJmBrcUk3Kmp+V14kQEUiakBHYiNYYDlxYF9ZZG4+NmZUQnUkKkpqempgXWdfWW9FP2lqbiRhQVckeStNXj5Z''@;'; put 'put ''d1ZzVHchV3tXIShZQzZNYi5aW3NKdTAzS0tpLzFiZUV4S1oya1dGWCZJMkw9VHVXbjB0PUpXc0IuPlYyKGRtPGBOXj8jKm8vcWh8L1ssKTh4enJ7XzdpeHU5SD80UXZsL2FsfEpxUX5TO20lRXVJbG1BdiFlPUM1IXtbKFt3MGc8VWQzMHlnMSM1VTh8PyY0KSRhS3Q/Lz9JOCglTkwlIltkXnZS''@;'; put 'put ''WEBxIVQwamF1UCZWRVM6ezR3Yy9xKXR3RHRAY2k5ZDBMbjt1PUladj5NZkxmRV51VW96O185Zkt1YChmViJHe2RqZnZ0QGAxOVFdaGhheSx4Ujw8bkAle2AvWUg8bD1YKnM6P1F5WHhBNk1pbGwqNFRuWFg0SDtHRD1LNFIxcCpedE05PjopOTY6Kld5TkhAdlg4cXl0bzAjUFNLQTxyZSJvc1Ve''@;'; put 'put ''NkROPkpkWW9RckhRI0o3bERoKDZvUk1bZi98KjQsMUJpbEUvOUZkQ0R4T1tBMSxOWEp2NlIudyojdWB0JkomYEJ9Si56akNLMDxmfTVNXnBlLztOY1RRYUpIQ208NUYydHIqfWBQLGk5QDMmd3FaVElQaXswaD1fLCFuWHlyMWEzfWBzQ3Y3Nz1eMShjfSksXiM0bkRWbFJMNSsvIzNqNjFiTzwl''@;'; put 'put ''Y0l3KmAwSE83LnF0PFc5Q2I2cyhYOmB+bHtLfG59KSthfHx5KCpONmxFV1NIQ1tYNDg7dU5ZSmd7UFs0PnlIMiNjYyt6QzxoZTBvRUxbUl9bQnYodn4kTkBjRHdAKEFJP0ZUb2MzJDJDREFiMTFSMDFtTkM1V0ZgIlNkdWdyITcudj1aTkxeTUF0TDM9QH5FOlV+XjtMPHh2T1RoUVJRYXs+PFh4''@;'; put 'put ''WWBBMzBqdVlCO2JnQThFVmEhVlZDelRpdkJfUXxiajlZfXFNMjp7InA7PkBMMEhDRjxqcGN7Kk43YlJITmhMd1FIbEsuUXZjXSJmW2lLXl9tRnZrKFhLMGU2JW41NH1rNkpENi4iWlR1O0lFfmQ4NDJpekAwKHhXSVBSUF9zZHx1dDttVkgxPSxZWEZsaCFaWWQ1S1V7IVpNZnZ4M2RnRGBtNClq''@;'; put 'put ''fU8zaDNTRW04fmgzPkVWRDsleV1YeVcpUG97Q0QwNyQxdHg/d1NGKmgxJWBbMUA6fVR1MHxNI29dSnNCfHFmT18rUy9ge1VNdysoTWJrS2N1Mj0jc0JIQyN9KTVaSVcmIndAZXsvSCRCNGFvVUBfPDt6IXlTdWUwUVo3JGRzNzA7LGZMQmFBNm9JKT5YOnkrP1RSNSxHTyQ/SmZNVVJ2aEtQdTR4''@;'; put 'put ''dS5vd1VPMUJ8XV8oaGA/MTkkOkN1R09fYEM1TEF1UEF+YWF1VzFVZTwjL1c+VTpUfFA/UjdJfGVfRilrPVkha2ZrfCExKmA9MlBAPGorek02PGkzXVplZV0laWJrMWVHOG44QFd+K0w9Wy5BXkFyVGRCKGJISDEkWjVoTUd+VGxPPXpjdVZaQVJfUDkuJjM7PjN9ODJxfFFhYzslZGRaTSp9VyYj''@;'; put 'put ''YFtLbGVVI0ZPTzUqMEYzeEo8eGJON3dzcXE0c012LyhLTDRScHdJWHBDfnFTK1lveDo5KShCTE1fO3doOkx6PHl2YUBUIzhFJDZ6fipzN246fUlxU0I5cTJ9MlZbRmQpMShOZFg4K3dGUXpmKlZuay99eCMifjp7MFlgbmVnOE9MU288XkE4aUo2S01lajZTInopeGhbZ1EiNz4hTmRoaGZJIjAp''@;'; put 'put ''Uk1bQHhKWCwoPjptMy96Zmp1fHM8elBkOEF9TVg7JXRfcTssaE43YnIrNShZV3xCfUpsND0kYVljdCVDQkBoJXhVcz5kTGY/VngwRDs3eW9YVEhnb2JbMT1xMlssZXt5VjFsWENlI2AiPElPWXEheXpCd1ZDZUkwTTRTaUJmXz5HeXxbYkJ6W0VpOmR+c3xMUV8ub2I7I0s7Ry9sel9keH56TU48''@;'; put 'put ''KXAoNnkpWm1vXkU+dTZaO0poQTo4VkF2P15yXWxqMmVUbF9CWyg4TDVFfk40RVpQeElLLyVjb211KDsue3xrSnpnd08uU2FMJEdNdXtYb0QoW3FqWCwmMT08YnY7PHI9Q1puVmtWK3tgY2hNMmpBU0krZ1dOV0dTVnc3c34sSXRaMCZLeUN8SFhFUTFFR0dPaXwvJX0qaGRkOVdTSV8zLkI6MXJd''@;'; put 'put ''MHFLNlE6JDtmSm9GJSEyZDlESik8RWc1ezo4I3hhajg8MjRzLnxNJXJ3ZFsobHVFcnpbbFNFaWU0dX49eXw7fDRfU00pXntzUDI/bmt0Pn4+KHEpLEV7L2o3Unl3aWlPVmlobVswOnk5SiU+WzpFXkYkUGMsXiQ4ZHIqb1E8TF1nYFYrTzkoXmlgQDpSeDdLJixZOz4wW0c0cVEvXmY4Vm4jfG9S''@;'; put 'put ''fFswaFE5NlVUfShgczArb1Q8IkN9b3lPdEMqOzZdSEdsIis/I2llKE9YQWgrYFBHXzs+QnZNLCZzK1s0eVsuXlQkdWFOW30iQSskVnBxRmJPJmtLRn0rXnU9PShBSyhaKGlpMFJjVE1JZXxFc15SQD81YT1GdHgpTHR9Y1BUSj8oM3tCeXciPmpzJDhQZj5rRW9vdktWcWlMZU9uJWIibCY0Uml8''@;'; put 'put ''fVtDT356Y216bHJOSVhWZWYialhQKFsoTDJaRnNue2hVWENjeE00cj1CfSpbRSEpNEh8dnIxVTdOQUNAejRdRHZXPmBeTkVmR3UkSXUzUS4qIywwKCF0bVtHInhXZ0kuJExPc2QqNC8laldfXj8qImEwTSI3OiN4Q25iNHc5IUNJQVc3aHJfQi5AaV9YeUdbJT4/Mj14cEplUi9CWGJFVFouOTRf''@;'; put 'put ''bSJ6fWxSZjUmWz1dZUltcWdxLmB4X0RBS1U3TFVVb2EkVyhGdz09P2VDPnNCSFtYK319WzFpOUc4VlJ1ODRJJChCVSV7W311O0hgL1lOUUdVVEo5enZVVGh0TE9oNig/V0tvRFZWWjJdNS4uOktIPWRVU35jNmhJOEA+YGh0bno9ZFo3V01XWStMZiNUWmUvU3JoLnJtcFhtQH0lN1NAKn5OPEU9''@;'; put 'put ''b2A9SmA4U2BTRjNQOGUzIXhpTlgrdj1bSGRbMltnP3JgRyRJOUt3Q09SS1tLRV5Ic3liUz43eWlGQUBybDJDeUVrfVczRmMrK3A3JCglLCgxaHs5QCNKSE9xTXQxSm0zUV9UYCo4TDEpQWhkdW5adiVzfWV9fSV4Xis+R2wuaFcwU3NRPEVMVyVOfGx9O3hkP1pJTzVrTTZXPTJuX35zX2JrWlMh''@;'; put 'put ''YV1wYmI2O25EQXsqdjtERVBURCRQQnR+N0o3aF8yZnVOdktxL2YwUkE9Tzc8MkVZOjV4V3BOIn48dT5mWnh5Jlo1T1NBXTZ6N35CKkdaPVA+aDt1ajo8SiV4RlR2RSVkIk8scnFTcXR5XU10P2ZTamJdT3hmMjwxYTR8JkNeRyozNFo1Vmp9NmJnSGl3VlRjSnhzIz1kPTpobmFufGxaKyxyKkVJ''@;'; put 'put ''QXI9SnI+JSpwKCQ6aF4wYUNmZHIrNEZhKE5AcGUkSi89I3JLSGM5WHY3UEs9Py9HRCtEU0t6OGArSldmNWUpInBlYiksemU9eT5MNyomSUB2bF9PflR1Zk1vSld5UF8vOm5oWWRuayFITDsjKG1heSlIcVhMMXA1JERUdCVKSkBLbVYvVkwrVl9GRiZ2dVQrVX4wQGMxeFYwQGUwPWgmeHRVIjwm''@;'; put 'put ''XVE9S1IwSl1SUEQ8L0VGUHV6L2wkcThTTzN5NWNlfikqX0siVWEpR3wzVikoa1JCY2MxYmRyY0pjQHFYVzJnT35WOV57fWlKI2hjPT5IPCpsZTtnMGNGd1FecGdDaitPbjpMQD12PlsxbGJMfkBLMChNbmV2VExmJF9lTE4hZFosOncsQH00cG16bUtBQ0tIP2VvKzJuMzo4MDR+P0RYTigwcC5D''@;'; put 'put ''Y0BgfSlARUoocTcmflpDWVBnX3xdTzpXRnVLdiFWOVp5NmtqRHJzSTc4JjZZMkJEKTRLcGMoRWY1ODE1TT5tdkMydSF0TFhfckx1TVVfTEVsNi9hLkVAcEkmWE1mJEk8eigxKSw2V0tTSipYcVNwaVkvMzB5JClmZkQ3MUpnRXpTKmBXZnpNNFM3N2MsdlF7cmFLP0JQSmBANShnVSlJSEJAPig1''@;'; put 'put ''Pz1NcU1VQGRyLEp8P1BQZk40NkNdb2NEIix7aEl+PWA/OEEySmIzKkNZTW5wQH1KJlVxNz4+dE1EfilIdlpjNyolVHIyXS5wVzpgYlg8XkpWMER9RVBEYCxgMTZkcENjKiZ5VzxDZUp5REs4PSUpTk0hc08sTj4qTVBlMmIyJjJzcUlkdnQ5VEIiOl9TR15wMzp+WiY6RXJxa2A8al9aSnw2blNQ''@;'; put 'put ''LChFSXFnZUpEI2g3Jk5EeX52SWprcFJsS0IjKTFUL0t4XXRuLEQ6a3pbd2ppazJyNzU5P2Q0YDM1Xn1oInE9KXZXfHtxX2kpSUYzQyxteUwoUmI7bXpXVnYsUEwsS313TEckRyI6eH0ieC8vZW9pMzE9YSV+RyxNKnpDIlh8OkhnMV4rJC9uWU9oV1M6OHovV21EcVNCYCRTNCUyUFNnPVFAKXk+''@;'; put 'put ''cyVbKnk5JkZvOV1HbyxFfFF6Yk9+NiI2NCJicz10O0E5UX0wVEsjYzViRlM4ZF06XTk1WWpUWz1uSy9WKVBlP0NSK094aVNpQSQyQFkvMCtJJHJuIjsmQUxHUkh6ZHhHMzBweks1eVpfTnZhU348OjosXSkveE80R0VGa05KS0koTjV8a1hJRGhlJkU+U0xHeDw0YGlESGgvb3Y1TUt5RXYoODYw''@;'; put 'put ''TjlpIUIiPk8uZy5nPCZoXWJEVWtoRSwmQWwhQEV3OFh7ZnBmJSxZZ0Z8ajI8X0UvL2cuUWwsUHQqdUd2W19eOUxmLGRkJHI3KlR4Q1JkP0ZxPnteKm12a1hQQGtoJisyMGEwL0NeNW1BMEReJlQyXjFQLDRCLn5HMn17Njk5fklRbl9TPD14eiFKMkE8OTErenA3d0orZUc3RFkwfkVTMmAzOCRf''@;'; put 'put ''aXpDTXkuNzd4KkZOaEx8c2A4TFM4NS5hTz8vNWRiPysrPSt1MFtiWS9CNlF8YUY2azcvc19NUEJfPU1+KXFvW0YhSXQjSy91V3R7XiNRLn17RnZaK3RWbWQ6cTQuayVhTC5FMFNzODdHQFUrdXJLKFlMYX10YD1DKik2aHJGOzc6RzhbZEk2JHE3Y3VpTSZvUjp4blNjfC9rLHQ7ZnNJVSxOWG1O''@;'; put 'put ''dj45UDBnIlA2KUxCSWokc3R1RCVMYj5VOF8qeFd1WHdKdiMlSnthKD91PnUhTDYhKlB0QzBkPG5UeCpWQ3xjQyt7YT1PQF1OPDZeLERFQV0iSzgyLFNdTDpQajNfQU9Vd0NrRi9mQCZeRkxUMCMkMWZeVz1DfFVbdGlzcC5GXVQoYjZrYCxEIl5kb0VqZTJbOH54dGZ+OXElZyQ4bzlkVDsmfU08''@;'; put 'put ''PlcmWiVrWC9FeURFQEFremxwVj9ULDMqRiwyZm5bPiRjSiJYeUBEMmQqImZnU0xSbGoqTl4kZztfPDdgOVcrWDZzQnohZj0sIXxAN01tW2klKVY8MFA9UiRZVCElOVZbPkRJalRDd0MoRyw4am1TdEs/c2ApejNwaCVENmt2TFVRfH1QZEA1dk04dHpCVnIwLF5hK0Z3SCFxKSRdcUJ5NmpkT2Fr''@;'; put 'put ''cn1lZmw8UWc6KFUrRUguPXRYdnlvX19pfkFGZkQvX1BDOl88X2dlczxnXkxJQCs8XUJWVk18fH0+NVlGNUJ9b2x0fjhxU1ZKZj1aMzF8WkpsR2k8aWJKSCl9cTh9clppTjAkc3hZU3VRVzIwZ1U2MFJ6OzlVJHl9Qi8maHcxNSk3Z0JjcENmIjxWKWxTfW5PNTpYL1h+KkFuVihSKiIoV3gjbyYq''@;'; put 'put ''U0koZkk9Qz5pTkFyT1ArTSQmIzYiZX03c1lEK2tdImR7anZ5O0N+ez1ibl1NYGxlbmIvLC59bVZEVXVeTml7MHZAL01oe29+dkZpS2VEUmJ8IlgrOkk4cj14dywjSk19eTVOaWxNdiRWTHZAaXo+NSosPVJEVzs7dEwycD1YRkQlI0h+IV1GVVdjMkk8eDE8YmVuYGg9JXxhRzNSRkIuQHFsbFVU''@;'; put 'put ''L3d2YHl1djR2ITNHcm8rd0xPI1cmdW9LW0N0bj43I3dMfF47ZSRSdXthX2UoRk5xYXtsLz5IYERoTn1EfEgoN2I/TH1hJTx6d3hMQ2krcFgmVEAvc3w7XTJONkN4VHw6djgpR0NeR1olaU9yWUFMLzQ2WGh0Li9TUTB3VTpVKVkzdD54XnUxKH17cS9bQiY/RH1Cem1TUWt5Pj9pQVV6e25HXy5T''@;'; put 'put ''UmB2M2dwUHkrO11TWXFQOFJ4NTleMCJWZ0x1OzR3d1FEYyN6a3JQP1Y4KGA2YE9QUilFcnJLIzd9OXhkVHcyNHZ8QE1kLE9aLlVfN15HPUBjWE5qR3N4czg5bVJCUzc3RDQ7YCp3dForVy89S14wXmJ5TyxlfWcoYFhZPGBaLjglVjlMfV8+WipJcWx5X3YvaVBdQ01iMzxFJnIsYywqJDozeWJq''@;'; put 'put ''MW5OejB2cmdQYUFRQEFtaUZzNVlCMmFiS2FnamNxfCtzMmczbks6cm0uNVA5Ozd7aTEzZldzJS9JL2hMaFApJik0Q3Y5SyUoeyZMTl9kWjZ9PjZhOUFBZW8zLDlMV1t2L3twcFEzbH06S2dAS1M5WlBgeyFFPHkqYmxTXmxvdkVFTXt1cyY+OnMveHYrWShsWnIwdlRNdHJbVjYhKDxkNGVrSFtD''@;'; put 'put ''MntwLjhHOyUxWE5oYUJwI0dGaEFgVCZmWFZWOiRKInN+WSRNZEdRYVFhZihyayxJO2lmLENoXixvMUZFZjV4ZHc0Lyh6aGdQWmhdblY2OG0vOHN3NUNdRFNAVGRIVEo7Y0FbWyYoTi8+THU5WWlBIkxidTc9WWNtZkNwdHUleC5RKHhrPUdTWVhNZEEyXkAuVmlESz9DdSRaKStkTzxKNFVNK1hu''@;'; put 'put ''YiJTP1k4KmhRdUkzZltMUjdpbTBDLGtrTnh6R2tGci4yI31oVTRHWUghJVJEfFYhdVhufWVIT29LNnBwbFF+KGREVDcxeUY8I2FAR3YvUG8yIjNFRyMxPl4+Iyxnb24jYilFKFM4WjQzPUcpeEVSYiI+RjA8OGBgXT0yPjNqKDptMWB+blFpbjhScjxLMyF+OFs/dzRYUzF1L31XdjlRbl15ekt0''@;'; put 'put ''LEdHNlFMTylvR0tZNGllNG5Jd10wPU5Pc0hQSDdSbGhoc0RFei9HW0MkaiwifSJOYyVZQmV3XmN2XytLaSVRfEA2ZUFGT3VGKkFEIT4obVBDX0JefTIrOHkoX2lCXjcrOSsmRSh6RlJOOzk4b0FhakkvMGlmVCMhY3BVYWxKbiM0LGRrMzY6JHlFbHYqWCR0P21iZFB1Xn14KU1ue3J5SFE/QEY4''@;'; put 'put ''eEthXXdJZ100OUc8UHNoV3Z1TDJbOj58SShQXU1GXTQjaW5bX0xFbUxHa3xndzhgUkJRUl58O3hKMit5XTFsUk5dcVYzbEZ8JlpCNSE5bGcxLE4me00sUTJBLDdgb2pYbUJZSF42XiFLYWF5PGM0Ym0lYmlsND53ZjRuUThyQSJSVGQ4ODpMdTssO0ZWKHY9SGBPTkh1OSNHPl9KMkF8R2w+QX5P''@;'; put 'put ''bktSbyI8JDB3fDhVTSgpXzl8ayp4VEVFYj4uPmR3NjFndHBIMUh8OmxvZz5vVTpuTEt2VzVfUzBrQ2BzakJ0NGh8eDZvTD5sLlQzVF4hL0xBXXNvIUdRbTZaM3c6SCM7YCo/SVE7RFhSYWgyJFFjRixSPSRDOXUhey9dZSUlXTlpKjNPJW9STUNMKFpaRkZBQDB9ZH1yUGt6Y2NZb2peWE0vI1N0''@;'; put 'put ''Ni81L255WFE0OUB3Z0JxZk8/YjVNfis8XkM4XUZdR0FxQX41JFIwMyZnN1FbQF18dlVVPnYxRX0seWI/QFFNeHsld2RSYGlJLiF4UkYvYTsyN092YVlrTnlncyVTYEttayNhYDR3WzpSIncoZnY1OzhOL2ZMNDR0dm16e14oSE9UZ2hIIWUsM3lBU0owXndjY2NmISVmfCxkZ3xjLiRwNWouMWk5''@;'; put 'put ''ZHhtOXQmQnFCZk0hQy5CblhPQ1JTKDlkSHpFbTQyayQhcyJNbDFvOkwzZWprQU5hJG9DVURUOz9IOjNOSG14OStbZmZEdF5SdUIhTztROldtVnM2NFFScTteZTZdNWxeekxvK3NkeXQ0aXtTTS9QK19Jb0BWWDE0X14kMXsvMUxLXWF3dk0pQz9IXT0yUyh+Wk9CWmxARDc5ZG5QfippWSp2TSJS''@;'; put 'put ''Z3VdW3xMdEddZTBlW3VgTTgyMWhpTWNhMWswNlhoaE00fnFtd1BIISQ4cjBQeSI0UlllV1llJnsyeWwiMSk9YGJiXU5tKk5nQEBJKl5bWE49XmFXXUckSFRnTkJjZj5RVk1EUHlnZjBqTDs7SSo0KjYoUW1XQlE2dUlRSkw6YWZ4QV9qYkEhQ1hgWjxVekpoc040Ij9se0g9MHVPPHhGfD14YnY8''@;'; put 'put ''bHZ+QTxWX1dMdW9oOit3Ul4qMVJabXNSbC92R3ZZbEp7YXB0TmlpbFUpVEpiVUErQ0ByUDwmQWBzeUdPaiYvI2lNQn4vdE1PQE93cFo5JD54PSJVTV5xbHxUWExPcUw5bHQ5JixDbFI9TEFEOUZ3Inw4bTl8PG9JQ29sOVJUcy40fixIU3JBQFdvS2kjL302anRrRnJ1Z30wdlg1PGlocXp1IXJs''@;'; put 'put ''ZGRBezlBQDN6ImVRKDs6cGNRd1lNOz5lOzpJU1JQKy9leytrajtxe2xrbyxnWWBbUSFzSmRXa3c1dG83ejxRISkibyMwTjBVVjJVOlZddlVxTWlBZV9LeCRXVkB4UStVLF5HVlB7XlAxJXdJViFKV24yeHo6QUFAS3srQnVUJlc6WTJ0QH5jMk14fThXP3B9UCtwMEJUVHxNLDRiSyh7SWFDOCxK''@;'; put 'put ''YWhYSSg3eUp0Qn4/SlM6eiFLS350R3dYIXRNd0dXTXZncV4jXVdgVHk/dSFiLH1LM3plVXczdjFrd095Qn00ajF3bDtFQ3gvMlo4WE1xVTY3c2RsITYoeSRbTDZeeDs0d3QpNVRCZ3Z3a0prXz57IWBkZD96VkxNcC9tL2ckMTsmdnBiOjU0MHYpXld8VF9XSllYOGtoO2FLO2FUVXIvPmF6Llpx''@;'; put 'put ''Kz1MNFphKCUrbnVuRy9fRlpUPW9GNF9zcnxXcStab3tRbXc/e15RMDNTUSlLQW9hRGlIKyxbeExLVHAqVk8+b1BTdSJTRCZJVDZOX0smS2k7RzdbXyxGaUJ3bWQlNENIWDlSRD5iamVzOSF0OVlMcUlNKHBMXlJjVlshayl8MURCa0JqZDRsYGkuOlludHBqMms/U104aF5TSDN9LiJwTHt4Zk0+''@;'; put 'put ''e110OkM6XUZxUmZdKiZeJVM3QWU8On47PGshNTt8SD48cTlpTSU4bSVhPEZxd3RIaDV0NGNSLFtreDk0dElEVngzNmQsdER4PVR2Jj4kIlV8eVo5PHgpQn5rKkE1K3MvblBYVVhacCNDY2o+aCRBREVDN3Q9VXk1VCw4M1tWNGU+bXltQnYkRmlTZlB2cyU6NiZweiN5RW5ENWk/PTU2em1sY1Fs''@;'; put 'put ''W3VROXRqWlQ7bXslP3E5aUN+ZXUyNmUlISFMLl5wXWohYVcwMjlfUyNnXzsvRW8jZnd3cHhjMFppP299U01GN3twcUZ3PnFlL3FGKkZSXn1RU3F9bX1YQkMxZDZCdWQ+Q3NCY11mWiE0R2pPNDYsbC9HdUk6I2d4NEc5N0huYmk/SmVkZGZAPDlrWkxsZzN+UWtyQkJlfF1aSntzZVJhUHU3MWI8''@;'; put 'put ''QjM+dzBQbipiQiFQTExeNjpBJFVxNGE5WHYsaitIOjNUTkh2UzVud2dCJVdCW0duREheN1QoU2BtMV0/ODpXUzwkZFBGTDlqVkdRZzJSfm07bV8mMU1wQENNbnRKVl9YbiRZTFdrUFI1cmhQJF5XJUlORk0yVnpqTG1ZYV5hcHR0TE9NXXY6RHxGUGQvMVtldmphX2pfZVRdMl1hSzo1PTR9dXVK''@;'; put 'put ''Z105T3xvMC5zTjl4dz4+ME8pSHxUODx6b0ZYYEIvQ0EpIkc4Pn5DNWwxK2FSL0I/U0dGUik6NmNhRWBNPyojb0REd1lpeEBPUUVOQzRxUDdtbEdwP2VbXXQjMT5KQD1xP18hMjEwTnVafThWUjw+UDVROVA0OUR8R1ZoWUBSRng4KGhvLiZDKVdzcDtIV3hCQ0VJTE9PTTcpb1ZxQiJjPTAuTzF8''@;'; put 'put ''IjxGKUEzPiN0X08xcD9VaDYuPTs7YU1tRmIhMzNeI01HMl5hLHlweWFxMT9ScmN8RWpJOFgmd21UYHJaczh+Yj4jLz4meVgzJlpSP3JrajJJLkVXRC5sL207YDNCbmR7M0cxLEpCL3h1ZUpndXgqZVEieXpAO29kSzpmJUl6WnUqe013a1JsRTtSYUtbdWBZfSovSm9yTzZBRiJAZCh2ckY9fGpK''@;'; put 'put ''PmhSamQqWFdiNkBoVnFYeW0oLnw6Xk9IN1hzZVRHPVJyNntLY14rbUVjYll5Pm9HS2QlVjs8Smt5ei9+WF5AJERSTnJ1cDxoSWx3bGklL01LdHVFTG54PXFsZmErQT08JjQrK3lbQ1QoXmM0OktzYj9rbjFLXmtzLitVdjlmbzt8dzQkZ0VrQ2FUKHh6RWwhdiVHZTU/KTpFRjp2NFE7OmZEa2tV''@;'; put 'put ''fW82Wj0oWkJWV34qPyhQbDFkK0QoNUtEcUpDWnxkcngkUjdabFF7K3V1TmssaEw7Vnk6cDxAYGJETEVYcChhPChkWyIuNHpmLDleZmk6W2JzYzpKTEVYLG1+W3RSXUwhU2xwTGkoQCwlP3NgaV16RG5XOXlrK29Mc00sbE5La0M0O358VGB5eSUobnFLKTYrRUg5M3gsSGhrXzw7Il5TIU10e1Jy''@;'; put 'put ''Z1dOLmhVPz0qfGpzQjVHWSRKVU5xWVJlLl1EOj1hOyt0RjhmVzQ6PFIvUShLMklfa19aPUN1dnBhNEtme2VIR1FgVT5Ofig2cVU8TGxWa0FDKzhNbGhMck1hZ1YiVkVCbG1hbk5FaH1HInFsTkQ2ZDhRNk1OWjlxc3JOc1pUYEl2RkNOVihhKDYhfDE1W3wlfktkbT9yW3x2eD5dQytNTldJLCZW''@;'; put 'put ''Lyg9bkgrYXJkbUJebT0uJDg/ei9DI21FNVtFWHF5PlpKRTJJMnxOeiY9dkxpWl48Ql1lKG5eMypwRzpIIW5ldmBqWHZjTHBDXzVTeFZyOXBVKyVPVGlCZTAzU0t1W1gmWmtnfjx2Olh4MjVyIWRKUz9AOjlLL3x2YVsrLyNDcDt0Ym8xYH5oLkQieTMpSChSUlgpYHk2XUVdPClPVEsjO2hQRGFG''@;'; put 'put ''QXhSfnFrYkIqPDtQSiZycHpMMStDPCROQGgsQ2p4MjUsXnRnRmh2NittfVFpamMiKHxodltZRnhoWC5PS2dxNkR3fV97IyJdKjxjQXFvfWR0bX5qNUZvTFcjJEcobm9eZm9wZzZlITQpUj5XKSRmJW5zNmExcWZGSF9YZDBNZlgzRFE3LyYzRTBNJjJpeWo+ejQ4MTdmbiUjXVhQYmZENCsiPGdy''@;'; put 'put ''PVJZNEdWXl5gRFt9LG1pVGswWD11c0RAd0BBcnBuXlJyTHJVY3s2elhbaF0jJHtPTm1dK003WXdTMzd9d3xdM05KeVZ1Z1heTnQ2NiQyYkpqbGNQLjx+XyIlYlQpdGB+WzdJb1E9SSZUbVptakJtLjVgMEJpRl8hJXBFTiV1MlRMZXNMfX1KTD8pdXdFSSFFTEp+ay88dDZzfnJbP3M+dy5eNFNZ''@;'; put 'put ''UVJTajc4MjAlWGU+SlohMEc9ZDlWMCFkcDxQWW4/KGN4RnwpWiwzUWhQa14uLjtuRClFVylIWG15ekosPnk3PCZAWVN+U0EucTM1bVsiUnJZbFp0Pn57ISkzUDZIJUpuPCgxLzNKckp9Y083U2ZzT01bc2k0UEp9JUFweShKP1AlJmR3SlIxaVUiL3xbV1FEYXc/P15wV1s5Mz1kblA2T1ZQekBW''@;'; put 'put ''W28wVmJtL09iZj47cmxYOlNiOXxlaTIqIn0kXSNFbVZmNiwkN2c1L358K0RAdypFJUIhWEdkN0RsPWJPR1p6cTRlaUN5dnlQYFZKSlUhMWJ+Tm1WVT5YbT9RXTZZRjA1TnVzd2d6enw3e303YSs9SktlNzUuPjxrUjxOQ0tqPFY0IklVM35xcFQ1QDlsfGFYbXYpPHFNcXVQXlMlTHVZSHg0YVNq''@;'; put 'put ''K29vXWVva3VgW2N5PVtAWFpNZzQpOnskcCosbCttfmR+L1ZXMmFAJmZgOU9+LiQ+Pi5LVGJXPFZ3T3c0Z1J4LFIqKldZL0hEPlJkLzFsRTMrVkIrbTk4WWkwXWpOKGJmbDM0SmA/enMzZnltcUImQj5jPG5HSDU1e3spUmg/Y34jRmxESU1SOH44dUUuc0ZfezZ2QksrYW4xRkNHZ1MqOE16cnkp''@;'; put 'put ''b29INDl2PD5bYlNTc1siaGFzRl5IMHEmLkY6RHVJTm0/cngjPitRWHhJaHNlKWVhbU9ZakhoZCxqTiVoP1s9TzkkN1AldElsNXh9X3pqVWF6ckB4L1orVkppTFNGNnsmKkNDTH4uOHVhSmo1WT1GIV5nZXtrfEFyOytMRHRuKUt3RHwvdlJTZjdIbi91MU8rbWM9dDJSMkU/a1pVbGxtajJaaSNn''@;'; put 'put ''e3dofTc8IU5eO2daJjNLLEdoRFV4ZUFEZS9hbjIpPylKNzNTQDF9K19xJGxydG8mJW5mK11mcCVROzFtUT1nWTtLUkpzeTtjRk9sJTpfaTgkdklfXnd2OD9QOEZlIUNxcnApUD5gPlZlNVk/Jl9wRDEhbD9nJFFSRGFvJFNxckw6YFE+ZipfL3ZzYlhzWGA+KWgvWWtbOThFVFUuZn1GaUJDakQp''@;'; put 'put ''MlMuTHdzPSJOTUJLJFVyY3RuaXE7KFpUVG92e3wlc0VKLDhhU2YlTE1ZZTVQUCpNdloyNzNiMUwpR0ozbE56N11PQXMpZjleP1hvN2hgVSNMPW1gNi5gfHwldnpROkc1JHx+fD9adSUkW284fWNTMURrbHsydXJQLnlSTlEzaVEwJCwpeFZHKT5LPE02dH4qMzQxdFIoYClERjN2JkVBQFppc3dZ''@;'; put 'put ''O3t4KUMkQjhDeyw7ezBNWiFtRTtuUGUmfGlMNUlvSHxjSnQsNSsjZT03SUh1TENxenB0TSR+NUd2ZytHXWAxQ095WCxCTGxyVmpiQ2VwMVZLKixyeTdyX3lnJntxJEckcXtwN2FqekQ+JCVJYzYmaihRaUpSaCYhQyMyOmlTUSN3OiU6MzB8LzR5WkQwUG5mZUFyOUtfQFNyMTRwTltYMF40fj9C''@;'; put 'put ''fCpHRXx5NlEmLD93eVMoP350fihLVWhzZj1JNWcqYjldQCUzZytGOjRLWjdKYChqbSkoWn1PdlRaMTAjJVo+eUA+Xj5JNWhkSCpRY2psdGhvbHRCOkY9NyQ1R2s0VSFPfEM5MkFdd2gxWChCR1IsNT1bRCJvb01aMXh0NFdiYTFgZEB1MXd2eF81US5fPHxTQ2sjM3NzRm1nK3VmbDJ5LGFGNEJt''@;'; put 'put ''aztna3J6LmZSPU9aVio9SGpncSFPWlZ8On43SmBXNkArYHpdMHJObmtQR31bXnlVIypWemk/R10zZDxzR1A8cSRBcDYuXmopN347bVZ6Lj5jK0YrMjwwZEhqYnFtfn1PNWBvKjU/QEdlTnBPQDhEZEZXcCo1T3Z7ZC8wfEByKCVMRFc0Imk/ZDZ+dlR7Yzd9dURuQF9JITFuJFdxIiZOY01gMkw1''@;'; put 'put ''UUBZN0pPIldwdF5MZ2pxMURublJEPFFjVDhdQX03a0gqTW51ZiNvVURqKWIlV21WcXRtaWVbSSxDIXUhdk5vR3Q3TXVFSixoR3FLSyxFYjM9T1pWWmo3Jig/YiwoQjlTVkg+WWkoT2g/VmM7OCtSVFEwc1NIJDklL1hPen1xUnMpfEF9fkApPEZuN1liZV1TeyZGeGpwTWU6OT9HMjxpeSlweGtV''@;'; put 'put ''Zzg1aU56RSMvMn5rTEhUKzhfPGBvRS59N2l8OnNBQXRRQ1VwISMqdDgpYUYuNmEwTCpmMENpNUY2KHcwV2AyQUxLU0xTRzshP3lYPG9ddXBvZUtweCF3V2RDTHk7eyk1NT5jLjJUSnVPODFEZzU8YFRVbXpmQi9Bcm5NdWh+IWVKey8jL3QxYTEjdENgOVA1PzVHSiwuJDpHY2U3PVlFby9xMjY+''@;'; put 'put ''SCJIUnNhTj9ENjdQOzlAZFEwX2hqeFpFWjwmOSVFRn1AQHRbUktKQnBvLGMjenBQM1pRTzFIZmxxT1A3Qi5IU3JLX3tHQ2MqQmNQQ11AdGE9cmEhXXlqJnlVRGdiUGI9MmJrY0x+LiQ/aTRFbEgsZl9bU09PYkpIQmV8QGtmWCg7NDhjNitIdSwhK3NYXmZwJSFjQTo7VmdlNzBVR24hMT1OUEgm''@;'; put 'put ''dj1JTF5ka1VaZnZlakk3Vz5tRlhWZm9VdDVZYztydDZ3Pm1TUU4mRlsjNE8obT97dldSNlk3bjsxMnBYUm4zPU0rVlIudWk0VTYoLk9HUjZJfDV7Wk5wRX1CRGNQRGk5MXpNU2M5YyxnciY3TVl4UHglJDRBfUpmTmRDfitMJmtQdEhXLnlTWUluWFdkY1k9LCsyJG1mcmZ7azNZOzYzJlciTU94''@;'; put 'put ''Zys/Y0lQcUJdK203ZWl3MUBjNnVRaUlrZXtES0RaPXl2bzpiRnlLSjxlZnlYJjhxYGhVVTwpR0cwOkYwSFJOcHM8QHpmP0Vgc1MqTktWLyskVztXU2l0NGxMb0whKHFEfFVxWitaQV04WHEwZ3d2YUdJfUcsa3lkeXA5TkJQV0QyZFVxV3xRSGREQEVjZyQ0dmhWYFApPTFkdkguMzFUXXUyZWlV''@;'; put 'put ''RyRkWDNaayxkfjBLJl8zWkJ8Ok5ORG4wTVNSSz9VZCVOS3VIWEpYO1tBMVBnfUtEI1RKelo2a0E8ZnNjPDFkYTFnIVticDBXODM0UFoiQEsuPkJxaFJOZ3x4Ki5yeWQvTXxQOT9YXXUqR2dacFdVPixBNUo3aWF9al47QzpybzVpOS5YI08iajJaQS8jKipTV3Z4NF5eSTwlXWcmYkQ4Q2s3JWIi''@;'; put 'put ''I0xVSTFlcHgsQzx4UilHWGRYN3w0d2t4ZXBwMVJwSnp7MS90S0YsTlRnLzE/bmlMblclOWJ4dE9xRzNPUVhROSgscih8aGFqS2BPVjV8NmlPRy5pSmhEd1A1SH5vV2g+azIrO2ReZiVzNi5jfXomJE5nbWxuZy8hS2lKZiZXZj5LdSQ8a2IlcnV2cHlvTD5KbHsrSSZGPSlrWm1TenwjOWpvTCwm''@;'; put 'put ''cTMvOWtkNXVycE1WJSFGSSVaOFcyeXlnbWwwVzh4QGk6YlQ0bFtgaz9sP0M7P1EoTlg9Z3NEREZEUFpYS1Y7fW8ybWM8Rn5dT2pAUmwic3JofXY+LlBXfkEqY0dkKSNtYyQzJW0zVTQlbWNWNzg3XTRXdyFVUzJ3fkxybzJIPlM2SU94c09iekdRMW0zYHRURERHenc9RTBoL2J3dyNMc0k9LDIx''@;'; put 'put ''QDNbVFpnSjdTXmhVSiQ0W21lblU9UX5qYlo0WDY3QWRgN2dkQHVVY3pjMGNRN0thNCpsdEZgTnBMMUpgckhhTkY6bllnR3l9d0pMemprYWdWYklnUW1CKXB2VHkqY0J9L0BrWy5uPltzajgrSnpRcTxHWE55RDs7KT1bSnpUaXl8I3F1bVJmbEdXblU+dGk/NDRRNUIpTUZmZ25YNT1DL35WOVIk''@;'; put 'put ''TzksYjNhazx4Mz1lPD9GfXt7Q1pxQ15wXkc+KiVFU0guaHJ9MixIRDwod09gYGZyRzteZTBwdH1PbFg1WzFkJnV2YiVCZWtUY05wT01OSERdSnFdT2VdKm1pNFdveXEjRDguNmV6Omh3LE1xT1BxTUc4LjMxN1ciNUkwLG5EIzBkZlpDflY3UWNvPSRXI2R7TiNgaCk7Tjp2fStBb1koPFVYUkU2''@;'; put 'put ''VWFAcXd8e0dLZFsuRnt+aE1IbVpnemgkTUVWekxLLlBDbm41b0g/ajt6IS9YS20/bmFBMmJoRlBYY1doI3k9MDxsTjlsTzdGZzFUV2hga3kwLjd+eUJGS3VWSGNwZmBwUXp+Uj81W2NOMHFofW1rKzZPQih2PUIqLzM1YTo1V1YjWVZML0tqU1FAek0+TSpNWURBcjNzTDspIV56YiNXPUgqWWFL''@;'; put 'put ''QF9HRDtgTXJ7fXUvVX4rSDVUKWdzL1JfSGNsdGthXypEVzZ1JFJKUU15NFF7bixVNkJgaDchMVB5YThIKTg6YW0+TT9NJmFteUpNQjxaZ2c5c107YXsmWV89Tn01SjVRdm1vM2dISypKK289UFlJLzo1RUlHWmMsIVViS1NYdWk/YnFUZyU5fHg+IW1aPHhIW0VwSjN0KTdgX1ZyczdwSmRZTlAl''@;'; put 'put ''ekZVaSJOM11PNyJ1czcmXWMpdFN1UW5YOyx1WHFCNGdNQ2d5O2FiJm0kTSkrST4pPDxbeHtgbFMkSkJzcUIuTX10L3RYP0tvLyRKPVYlIl9sTCYheiZIUnx0XTZNaWUiXy46TSJOOWNnJVMpXnFUVWFvNFteeTwpUnciYDpReHNEREs4Vyt8RWVwbVdjIUF4VyomfUJWLkx7OHRbKCpmOSFmMDN1''@;'; put 'put ''REsjOUpQPE1Ub0V7WS41WClofGYuVnxPNURpXXJAITs7UGdCdikvb201PWo1SXhJeD5wLklnNzFKTXwvOy5eLFVqOT5IfGVtMDQsLzs/a35KZkM+cD09bzxYcWtzQlBTaExmSj9rTC9VfVtQV0pHTzxyPipec2s/IUQle11OfEZZIlhbWChncnc5a3RlcEAjIWR7eFdmN2ZOQi5SfDBtSSlGViV2''@;'; put 'put ''OlJARWdNZmo1UWl5Rll6KHxMXXBdUGV7W240KF5UbSN+Rio3bkRrUSF2d1d3S2VJbERYX2lEcmBeZSombWhuQztYaENJZSF1LEEhckx5TmwwTT5TNz9OTGQoQ0R+ez97fXBGQGYkYVJke3p4NHFtMmwrMkdwIWNoSUlMZCxmTCl8cXRDMysmU2xULDshYkBjNXx7aFZgckVgQERbXlJKITlrPlli''@;'; put 'put ''c25FfUtzWSwsJXN4fUxKLmZ1R1g1YjNiRyh2OVJsb1pDcCo8SGtnbzd5U11AWldjaSQyTUpiSEZGe1IocElKPmRMJSlDUDFHaFEidnlgLkZMZU9fLl8pZkAzWU49Njlla2NlMiYpYXQkdVE3RUs1KDlMYWpHKjBAWiZiRzh2Tl03QF0sS3wyaT0iR1gyMjVbQCQ6d1VIWlFpckpDO3ZmTC5CY3Ux''@;'; put 'put ''Znd1c2AlLENIeFVydnZzfFY0SVI7a0xWISNJOiJpOClFPTM1VzV0ZXM8U1pnfitCfFdfVi9ySUBRajhHUEhYZyJ3UXtTKGlmTzdnMVg1OEUoU0hYaWJ+V0JyfkdjIVRWZDx6cWUyNF5RSF50Kjs9NFI0TmsibG9reyJsbEZbIV40OG5MSHxVRldrIVI2XkVZcWhuLlZpNlt6Pmk8N3UmNCl2XSF4''@;'; put 'put ''YEJvYkhwc2FXNVQwNWtTWlNrUmBKYWdeMDgoXnEqT2xsKSk0cyFTRTYyN0hPWDlpcXxjV3UrNChVUE9WeGQzPUsheDkjKHoxeFYlRUxjVy5MTmBgQFlPfiEvYVVHYlo9e2BAXyEzMzBVZSlMN1VOVjdfTnpmTWYpWksuNT1MLj8xVHdab15pS25aUkdePS5yUi95eTEwaHFvLzE4Yzh5M1EuWEFv''@;'; put 'put ''fCRVd1E/bVV9UmNJbC9AKFJSZ1BWRDQ6ZnlsMGtFTT9rPWFtdmcjd3dYQkA3W1lFbmhAdTtgKzlCNywsJUBsaXB4eStnYUJ7UkRlYzZ2eFksMXh8LjhPXik2Xm8oTmY6USMrXXc3R3dQT2Y3KyNfcGVfSFJWRHNqZVhvTjZLJCk3cntAI05kRl4sSktwTipyXk5xNjlLdGBZcVBqOkAxUiI/O0JA''@;'; put 'put ''cmZ1Mz9geF00QldpKGFEdnxYJkE4YDdPLklrWyJSe2ddTyZ1cDEpYWlMUnYsQiViXj5pV29jXWRCcTkpRWZ0PEg0dzZCWnV2UlBLN2phPW8kal1kbSNRUXQoR197M1FhdytbXVZXM11CK0Q1aXpJNE91K3w2VUhiUTY3PyZyPl88Zkp3eFh1PnEjPjV3TUgwLi9yT1R6cUN1LCxRcmNJJDEwcyVA''@;'; put 'put ''VUg8IWxbZ3pPWXtgMVR8TmJPMTlJKnJUI1lqczcqYjswQyZxYSFFWH4+IVtOZztFX2RAMTliaiFVMjJeIlkidyYvJGpSaEVNcyF3Wz00SHppUCVFL3YofkxDbkVSIVosaSZEN0Z5PGtLS1Yhfk9sYHBCfml+TVs7eGk+QmBXVz1bSVh4fXsyOjlkPWVTSmZOe1ErNHA1MyZiJFIkTGpyfk1xXi5W''@;'; put 'put ''RiRYcXI+XiFpTDw/aFtpSixSbj8+R1JfWmJIJkkrdywseC5ya3RQRSFmJSwsO21TLihmQUo1WWhPdyw5Skh8fi5TL3MmRDJoPjdMe2BXTV1AYTxKUlBZM3RLdzViakcpamw1OztoZjskMWpCQj8/OzI4IWNrYmxfPHtWU1JUQ3RtSlAqUkRHJm9pUU9kWGR2YDFRMHBYOj5db3tvWV4yb09mPzF3''@;'; put 'put ''TUQoUSxZMWFuL2J2Jk1EWkl4ZW94IW5VenZTKiRJYUIydnF6PypVLi8pZGlQKTJ5M0N8VStLY2Foaks7ej9LKlMxand6YiFyUkp9MEBFSG1ANS8scnw5bUxgbn02WjU9a1IpOlYlemIhcjY9Tl5AJCosNz0lfWswUGcjfWF8cVZxP2d7JWR3WV5AWEB5RjRWI1l7YD1XTn1uPipZdmRHfGd3VVIi''@;'; put 'put ''O1tOLERoaWo9fHYmbldaZ0dLTH12QWl6ZEp6aDQ+QSgqLCwqMntRa3k9RG9bSmBTInpzdypnJkQrQDxMcUxKaUVHQCh6aEtifkRKblZbXj9dLHBZP3s9PSMlbTtVSEtZKHxweXEleXNgKnlxT3JvImA0Z1gzMCR4UiNxMmk5SywpfGhYTj8qdE5oI2xDMDpfKH5bV2l0JHl1NF58XiZRNXt8KDd2''@;'; put 'put ''NkBfZD4+VXxXSDU5SH1AYndUczpMXmtQNEszdmZ4dzFzOWdiI1l+RGFaSFhrO0p2MF9mX0EuT3FYLCZMY0VSXj1zPHw3VUY7LmJ7eGwodW9qL0R3QltgXX4xQC9oQ3NDPD9uS2FjKkF4M3Ypfnx1T1RQLz9jXitMc1BMJXM6TSQoIklqPUZsWCgzfnwsRzVGODc2WXpXXXZzOiI6a3MmVSxWWF91''@;'; put 'put ''YDRZdFBZVncrU0UjO1BzYEheXUFSVDJxJVtEKW4qXyFpTjw0JXlSIW1lPFg4XiE5KzBgdDsmT2pweihPaVdfMSxlMDFpLCw2KVEpIyxiLiUlNUxwcGlbbDx0TlVGV2wxcD5BeDNWImBQNl8sPTlmXjQ7Y0MyZyp5akExMk5mMkxTXTAjbWhVXVJPSGJGaWdAPVNtQmZ8LCZoODJQeF4lP2BDMml4''@;'; put 'put ''QWB1VTpHO3ReYmdMYmNKXXhhVER8TCFLdVVPMHZ1W05oVipkK2N6KEZdcX1lOixlN0RiKywvbmVNRXBzbiIwMkorP18qJER9bHIqaUZUJlBEVkVAKFdsVSJRT181d0s5dlIsKTFfcEI8WEsmJUpKXVVoOGMrcVkoXnFlMHV4KixbTVBpS0skM0peXyNGRzk8Q2lzPnZHeWpSLiR6cWhOM2paNGdq''@;'; put 'put ''eSosRHtPQWwmITUyZS9hcVFbI15WMS5ZJUhNUXYlejhZVjhZVSVrRWU7MTRmNTspdnFveDZLMls2YktoTi5mMUQyd1I6aiRUUmFFNDVlRzFEN0BAckpdS1VsYEpIWkdTOG9zfFMufHk7aDIian5qTixGRkoxOzowLDZ7LGpkcixqbUEsai9uNG9dMTdLZEJgQ1pWVVV6K1RRTWwqLFV3Yi4uemty''@;'; put 'put ''eEI3OiU2dHI7MktEUDxfIyN6Jm54cVFeRyp4PmxWNUJVc0pGbVt6KGtCKndzaFtMZ1Vrbn53K0spTUZaMkJ3N2dmeyFwPlFbZCQzQmxLLjw0TTxIeExRWTl7V2khNTwvbS42MW81a0l4ZGR6JkF7RGkkMnBUUHoqYFBMT3s1RHRkWCVEWmxHdEcmXkNtRiQzV2sodGB2e3YpXzA7U0RednM6UWNn''@;'; put 'put ''Z1MmJCRpcVg3T2JuN112UGZAQyVfQiVrXz5uSUdpYl0vUFhNTWxFO3ZyQWxYI0RQMjpnZkZwP102c2spcHEvOWkoR0dvOWdge303KEZDSHloXkN9KFYibUteUlVjV1I1fWV1Wk4/TTRrWDdPYk9XRjdETkhMQEZ3dylMclhhZShfczQoW1V1bkpWfXRaRSp6Kj5WIW1ARlpUNm4vXW5MUjEkYGlU''@;'; put 'put ''K3MsdCZ0OndLemd1aDFwOndmLncmTDJLMzNMOTdIVU0ocEwpXzlXV2BKKH1wZHJlXnZ7dioySkA7dXEmR1U7SkBGelM1XnVxOlRiOThPaWghWXJHXkhpdG81c2Z7bzx8fWBZOFlYJHg4cCl5Yig6OExaLCwkL2x5dzwjY2BMd1hDNC85a19gLmhUOV50P2xvbGJVYyZMQ219Q09uSj1uPjtKQ3tk''@;'; put 'put ''dzlFTmZeeTEzZ1MkWXNwPk9tek05Y1JWL1ZKYDlRKyJ8P10mTHVBQyZ9djp5aWdvTHs4IzdCKk1gaj9nI0xRQnRxVypMVDE8WDVFZ3xoWUclPlUsPihvVj1TWCIsdT9uOlFbX11EdDtCRkFEKyNuRDd3d0FuUDEsX1N5SiZZWFcjZyp9UEZ+K0BDOlVVdnwlW0xLdj1UY1FSX0pJRm9HLCk2YFQz''@;'; put 'put ''RkZAVlV5NTF+bCpMME98WT4rZ1hnWk98XVtzeGEuJCNOSj5kS0dKKG9YU2FoZWUrLi9RWz9XJXBtWkhAaSo+KHt5fGBSNSlrJFRzSH0rUWtmbWs5JmwjWEJyUjUjLzlkNjFITGM3biNBazRjdiRFLm0weU56Nl4yNngreVQ4PUZgeF1OMUVZIkJmPE0lSUw+cGRqWE5ESXxPOT8/d3RsTTJtPios''@;'; put 'put ''Pj1IWF8rOShVKSNiayNVZzA9NChjYUsqXTZlO3xjTEFrL2plaWw5LiVvbSFzUjkjIkd2WW8vJmBnP1VFV004IWxbbzFXUnpZWUR2MF90cSpQQSxVeX5FdiRaIVh1e29nIWQhcyU/b0VRbVpYSjB1Tl5kOHo1WjJsdy8sTCtOXjE7MzF2eHhranhfYjQlLiV6ZiVrWF5sbFA5clU0Oz96PHtKSiR1''@;'; put 'put ''OCg5IzZodj9UYVNyJXJiIkRNUHJTU2t3PFsjP1omY2ttKWFzMyQ7MS97VWMwQStwPHAleXArOkx5eTlUa2k8REBaclptSXx5XWVJKFF2PmcvN2RGJWV8bVFELlZzVmhOeFIlTEE1L09nWDo4W1h4YmVuenFuV3hsKGFDTGduIV07ZEl+azB1LCY4X2A7TEF+OlljSj1QN1k1aWVNKTtrRG0vfDo1''@;'; put 'put ''VVReelN0SDZVIV16ZzE5YEs/dnNJQC88Y35qdnhvIWRsUlpxWF9vRHshZVNhbC8oZ1NOcm1wWiosVkklW2k5azBdTV9pfChGVj52OGFHTngjMCFYZkRTeFF8KktgZ01mM0V4MyhHOFZxQkdUe20/aEczfH4oVlZlUENbQkdyTTgpJWJ3Jl9UcCE/YWRmdVgkJWQ3VUtYfDl6NUJyczY8SW5nI35S''@;'; put 'put ''QSNlLD0/aXl1NTFxWVBtfXx7cCx1NnxSXzgqN3BgZU52JTNFPGw0N2RTZWtGUjoyJEl9IylhUzU/eUtTL0paSjY9fEZIbUFTVndtTjVpNjUzdVgqfUddYjl+ZVNeZCJaZTZfanlHNXxrP25kNi5WYSZ5SmE8cX5jSmJlbH5hVndzY1ZYRWFxSTd1bX5UdDxxKHRPYz5iZ0xfaDxxbkdremxaKlpE''@;'; put 'put ''bk5+ZHdtTihnN1pFNl9pX28hMWNAMWQjfHhHKkpKWjcqO1pbPCEkb19DPCgreEV6WTh+NUJla2RIZ3N9V24mOWtzb0BNd0Mkfm9fQFtNKkhZWSo9LHlxIk1CLFdVRml8dEw/VWNhISN7OUtsUVdKMURyTCMsP25mSzUrYk5AQ1FzJCYrUStRQyFGZUpWSUJAV05DJVJ5SEFMRV1RUn5GVWdMZEdC''@;'; put 'put ''PzFCY3o5cDdGLGIma3tYIWxgcz9RTUZeUVJNeSJlTU1kYVNqdzZBX2hxQnF8SzxIcU9FIih+KzZdcEBCbUFUSCsoI1A6VmEoQlhpU25mVDZOaEppc3V+LmM2Q3hxVVEyZkd2KUhqcDYqcWFlZn1YJWhrT0RUN1hoLjRBIWg3Zys6eDp9MSojR3R4U0gremg2JitJTnJYQXJsPk5feVIyPXVGSWk4''@;'; put 'put ''KzQhP15ASyNVfkJAYjclUX0oSFBIJkt0THNmRmY/fTU0RkklPXl6Zk5tTm9gcDsoQXVyJCFUJEB9LDBSVl1LLjtrVTJoOWlvXnoxJC58KzZkITxLUm8zRjA0R1pWYDM+e2JMLFlaJmBkd2xeVEBAPmw5RzNSP2c7Zy52TipnT0RuejlpOVtYRXldMmtYX3wzQiNOX2VBUkJncE5tUk5ZVGMpKVh4''@;'; put 'put ''KkhkOTM4fG9Nfnoqc0MkWypyZUBifHlQKCUoP35CX19OTjlkfjZIWm4mblFFV3Y5ZE4vSXhpPTZxQCR2dG83NHlkJE80NjFIUHZKJTxjPyxuKDtINSFYKFdNKmV7IUZNKkdtNkpScG9QTTB9WkovY1QweFBdMDhIW25dc3hBQkghdXlYalB+QEorciJ9MWVFLE19cT5UYHMiQTdbTDJVeG1zODJA''@;'; put 'put ''QkVdcldVfiJ1Zi8iVCticVNDYVI2eFp+SVBIdlNTMTV0Yi8mYlZVIzQoTmU1NmR9WD8/P3U+YCo3czI5dDVZOVl5LzEzYlYpNGB3PyFgMVl0PWAjTk1fSnNtKmZwfF1FXjM7W2NnT31SdjxjfnZqW1oxe2xHPlt8PE1pWUEsXkFHXnFUNGNjXkguMlh4Y2FVI1RIeX0jKyVqQzF5NmI6KEJ1WnZP''@;'; put 'put ''YSp2K2FXNSYrVj1NKVcyTkVEZ3w9T01DZnZkNWYzb2s/IStTVVYpfUZGIltCMDJ1KmNfcW1MZjd0JUZLPE8wMjRaZiVyUEh8MWo/IUJSMFMvPGw1L1lCfncvNEQoUy5mP1Q0eDFlN19uaUVdJUVQLENLPERJckdOWyYzJCpDfTE6Kig1O3MyaEA0WDJoNmBTTERLVE54bF5xaSNVVDdXPilMN1s2''@;'; put 'put ''LD5oT1E+SkRuTn08dzlkS3xBV2xLRGBMRXlCIXsvRlo6cmRDPiJKLHQyfUlSakFVPVZKekRTNSp1V0MyeU1paldafU0rL0Z2Xm5ye3Q8WE8ma0t6RG9BdC57R3NYMT4pLG4iNHRtNV9+KHozZU1fTSpReGNdPjlBaW19PXwyPzNXWE83L15NY1FbZnA1V2QiU1tMMUo/P2dKWHZxOGxpPF1ffjBj''@;'; put 'put ''KUk6cnRebXtwV3V2Ji9CT0NON0J+eV9gU0hBKGVpeTBBRzIoaXtsT2xITGw6Uk0sXkNsTW9PWSFCPl5NY1E7QnE1V2RQVF5sUiskdGl7L0Vgeik8RGJILlJ5d3xUZWFEOTx3QktVVXFvJUZiKTwmcUZvRW4oTlt4TlZRbDNwYjM3ezNeKG9EYEc5VmYsLE9ncVVDZ1RpJk15Z0lwWXolUmJEQ3hU''@;'; put 'put ''Q0A0cVIjRzNSaC9wV30rWTw2eVFpJXleXVFpL3leXT8hbCtpezZwLzFFV2gpdCVNc3AlKTc/TF1uXi5maklMLCFjfWlTfSFbSH1tNSxdZ147ezp3NlVlSnNUSXwqaHo+LCR0JXAsLE5BVExLekY+RGlXVXJkWyRpSTwuKn5WcFlIN0ZjSl49dTk3fk1HPyt4ekJ2LzAoajRaUENdbF85V1ZEZkRT''@;'; put 'put ''WH0jNWEmJkJ1QndIWjVea3BoQVMiST5NVFFCYnEqc1NjJl9rWFApeVdfPiwxN1VXRlg5OmN6NExBMmdkdDtidDRlN1BAbndRKXo2UDEvP0poMXtVdzlUbiwhQ3dHJWxvSFNiNGA4eHZCSUIuNyxnKV9DIV07M1A6TDdWOlgzbFI5YyV0aXhafWhVM09VMUlbYUtVdEB3PUplbFYpNUJmcD5IfXEv''@;'; put 'put ''RVNyPGlZeWooS3ZWO3ZuMlQ6I0BbNnZuS3tKJSYze0B9ImBrL1NuT3NyWT5CQW09Tl9hQD80dTBEQ0JEKSJxWnpreURUbHo8b1o0bGRES05GcmttXl8oZig8K3A7b2YpJW9vKEklTVh1Iz4uMUBVMlRINC8yYTojTlBWJnFVMzlLUipDV1soIiZwdGk/QFZ4Y2JHTlFFbkpNJnN1UjokMWRbWl94''@;'; put 'put ''ZF1hR0ZFak4wMSl2dWMlcF9xOnQrJVs8YWxWKW4sVkBgZ2hIM2svRz8rMVQ3dkxxU3o0Uz5KJix0OkpofHBVQiI/KTRSa3A2TVNRblhGPzxubnh+U3BSbjFMUUVfdVtISzsraC42d1hFNTs4RCx7WyYlJjZpQ1pze1V7ZFs7Tjg5TGxsUnlXWjJkXzBQZ3IqcWVdQk1meFZBZG1dNGdoaUJydV51''@;'; put 'put ''MWQpaGhiOX07TT9mXnFOfCNzfntkeDA4OyNae0RYe1o5MTdkenYrKmFLS1FpeXBeXTJPRj4yTUQ0IlElJiIiI1ttVmh9RC9jJG12RDpydCI8PklOUiUmaT46enFvQHQ3LyZiTm86bWNOaWp4RSk5N183NlYlWnNpV2VXbnZoQywsfFNKaWQoUTMzQnImNU1zPm03fUlzXipDdnN0ZUVqTHB9cWI4''@;'; put 'put ''OH5UdipjNzFoSz5TQTVXPmQuUlBZUS9KLFo+UX59cjFMU31MZmNlO1JuN0pWKVlJZUw1aHVONW4+YDg5L1RgW2JSbV56QWgpfnBXMC56aiZ2K2gpfCx9Un1Hd1k0YTgrOFNEI0cmJD0yI0I7TVsrN0pUSnlxSDN1TDp2e1IzbDxPcDwpI11MYD01aCZHNlhvVXIiUFFkM2BuV2owXlYld3QoNE1M''@;'; put 'put ''e2Mpdmw7ald3dHBbT2JzTzdncjkmYWMlezpfTVhAbGNsZz5VfWVbPV40P1FkO0BQI2VyJls4e2k8Rl1pPmI7d0hNVXhrcFlQWj19ZW1ZI052RGRib2J2Q2QwaiZqQlR4Jll2RytEQERgdXEmWzhYR0AufFkmJk0ueUdUQl02dC8vQHouKT4uUGxWTiVaTGgmKyUxSjpldnI7Km9WKjxvRmh2LiVH''@;'; put 'put ''djdBXUJkfUksXShBPHB2fTE3blUvQjlrJWVHPipqSnMwYldYQiJEc2IvODFDeU1bODdbIkp5MUN0dzc6fn5ENFRyMS4kNXU/a1V0aEJdPHRddHVGJXokcWwpQWluNW1lbGw4fiNoW1NUJWxvfDx7Kn4pXSE0KzFsNTlpK1N3Y0NndmdhJmtFIntxKUtoczViY0JLI1I2WTBOJnlsc3F9b09PYjdN''@;'; put 'put ''emdtW05GOTJWakdpcGhRLjw3NyUjT3ZTbDIjSi4ybClleEFFVDFJM2FiNSlJP113VDljSjt0bD8hIXNxUUtNenJSdkxmcH48VT5maWIsPGo2eFllQHt5TlJRMCpRKXpMSysyKHU+cWx1Ln0sRGJAYSVmfj45O2lyXilNcm89M3hOQzpBMks0b15WclVXZFdqcjdzeixrRl9tPVkyd3thbmcyKCRV''@;'; put 'put ''VT0kfC5wNiFGSzFEPFVac1U0bkJEVns6Nj1gSUJ+RWxwc2wpWTVxcVZxZTlUVDdFRHlNWztMN3ROUVAueG93fGpsOWcvNiNzanBHTCsjTz5Ee0tzfipBVmc2bHs3bWVPPXJdI0N6NlpPSG1QX0R5cFAwLDZUVFI2QWM2UnYyKmYhPzwobSVMJlgxTnltNztMLHFpJUklLFVSPDtdaDE8VXNtNU09''@;'; put 'put ''SHM6S2Z9XUpXZ0QjaGY1NnwyS0R+ZVU0QGFvXkxacWxxMTRCLG1JK1BfPk87e3c9XUZYTDU3YWxPVS90fnlQfC46TlJMeEw+Sjo/S2EzcCRvVCNJPzgxNFt8V0N9NFE1TWo3clNCfmRscypHWmtneSNSRy9NVlU4MVhFWnV0fXZ8V3BUckg2OTZDez5CJlhucCImbnQ+TD1RX2dPLj1hYShDX0E7''@;'; put 'put ''KWdAIVVpNT0/XTg8eypOc0RTXnAlMHVvXmM0azVXUT0hb0tkXWx+MlBBInt9bWZEMkI1NStRcz5beUNFLjNDT19DbVpJPldjQi81azttZHpPKEYjQGo7eEooQS5oSDN3UGc0MkIkNTJAamwoXyUqTDtedUBXbn4yU1M8eEJjOyxjO2p0MHR8bUwyVkVrXncpKWp0JE5ZbHBCaGJkbVJ6MCY4e2tk''@;'; put 'put ''MXd6b1g5ZEhPJCxJbUJlRCx1SVAjWyw5d0lqOG0lSWM2S2UoR2suO3c1IyZrVjsobnJ6Nm1Idyh8Ll0/Wkk+TUcyUmBPTkRpO3MqPmtWJXohYXFuMF9tRz5hNlI+NDE0Vn0uPDshMTR6eFJHdit9cGp8OUx5ZV5WRX0lTEJrd1hTTzI2biVwKXhNMXFbamU/Yzd6TCw+KVYwcnVaZ1VUZDloI0FT''@;'; put 'put ''WGEiW2czYDNXMCszN2xnaiUwIU1eNk02RzBSYnBjcS9fPnduTj0pczouaChBWDA6UXpRUz5+e3dVRVJ7RnJUMFk6OC4+VT5OfjteNm0oOGVDLjFxc15Nb0VqNn5CMHNTWDJMU1dvTmQkQ15AeF5nWVZydGxkI3BvcWYkZHtSSHgkW1JZc2FUXn5VRUQvcyp7MClsSypKLCh4JSpkRjBucERDfjN+''@;'; put 'put ''MSs0biIzJTxTWF8+c2M+MzovLCwmWEh9eCNWR3c9ZWQpQVF4UFExQWJsP2ZWbW9mVkQlKFlJPDIpdU04WyUpYW10RC8pMUtjdCEiK3QhIk4yaTdqflM6I2g+dzBvS0srMj5MOTdQcVFSOz1LKldecDw/Nn1PQ1s1UVU8dGh3TXsobiNJLClnKDh2MGNlK0ZpdjJZbDgwLkpzOix+VU84PUlgOjQ+''@;'; put 'put ''cWFTN3cwbFhrRnpvSk49JCQ1UiQ/ZCFXdUBKRkFwdUMvRXgpa1Y+UTJKPVpWNj4zSGVUfVR0eSFDRmV0UUZNS1lVdlR7bUcsSD5NOE53cDU2PmNGJEIma0JBLHUqNEt+XkNta0BvV3tsPE8rIntNNjRrLHNlWEZlSlRyaTFKPTpeOnYwYS54R2IzcjAydXF1RSJjc0BDeiNkMypSX1MqOUFXN3Fg''@;'; put 'put ''IjR0SjY3Y0E0K2RNUFN4XlY+TX5bQWZFRn0xQExpQSEjKFFWfVdLKiwrJTBZakEsKW1tLH57UCYsOCQqJipgdmwxXmQxZDMwZkkqYCN4XWc7WH0jcmlvODkyUns7YlQoV0FTKko1PTc6Qyg0OiZHay5KfnpVRW5SZHRLcSpZclkzdlQ+I1pHcV5kUHA0eDFHdm19I3g/antGemJUcT5CVjB6b2Eu''@;'; put 'put ''TmJBMmp6KyxdVTZ4e2xmYWJEWGlHeSV8eDB6cHhVS0t6ZVZJeTtGZXFgckNWLnUlR1RSQEk3b1tzSW9MISh8T0JrJDhDMlZdKyNLO099a0Q4Lk9IRnddKWRHeHclVzJjOkJRY0JNRVU1fkhYdW99c1RPXix2cVNoUHUuPHF7WEhwTkMzSixmVTczajdAL21bS3FBOCxYWyY7LnpLPTopbjtFJGRg''@;'; put 'put ''JGhMMD0lKXlOVHE5XU9YYnVkRCpKXi52Mnk3SFhxI1hoPG4mW0kzOFlbVWJlSjNaaz54aTdDMk9dY2gvV31hZVp0fnVsNztLJThMWlFDJXhrPVllLGlvL0ldRF8wJGt2MHNfZiF2SEk6PG5qXnZqTCFNeTRVfjMqeXxxMU95RGhTZypTMio4OV1del10WkJCQmlZIjhUfXFgZ01saGZARkAoY1o5''@;'; put 'put ''T0AuYUN0Sj5UO24iXXdeQFNpZGpQRGpMKyV4SWJPU0dFQG5hcXlYeDIpWXgiPVojKEBQXyZzaS4iSyl9Xl9dKWpJdmdWJVtfXSlESTRWL35JaGQmVSF8K0VIWk1eV0V8OnI4X0MsZGV6dWklRzozIUlpejYlUnxRPShvb2wpSXVEcWl+SCImbDExbFtCenJlMFZrayZRc0lPSTldLlVLKj5jWUc3''@;'; put 'put ''eERNWF97ME5SOj9XYz5gXi5oazgpe10sYWgvM29jakJ9TXJHWyxXQXtjYkt8MWk/JVJ5V1omV25ZTTh4Y05qTHwuLk1aMVs6SmRCNn1JIkhLUkZ3LHZ4YVQoO1p8PEVITj5bWU9gZ1lpeSorMCRScnsjZ2B5dXtiSHIpemszRkttW2FtJDpWbSl0ezl0XktseUZHRHFFJjUsOTJwe3NNVGZIP2Iz''@;'; put 'put ''dUYzUEpmZltTTTxnTT5TSS4xVEA+VyxlfSpeSzsrRyNsenM5bkM8ZVApK0tue1R2fGN1WjNmcG9Cc019dkI9aXRWIWF3aDU9QV1aMV5la2AuMz83LDdCSGJuZiRLUnJ6Ll0wMTlxKTwsOjI+Kmg1TSY8M1c8eUs+QiouWHpJMzg6KGchPUhxb00pY11IR3VqbHs9KDVaaDVKLnwpdmxzK0pJTW5C''@;'; put 'put ''R3dpcld9Smc9VVk5KEp9dXx2MDBxdXE9YU04eyxgWUloOyN7NmxKYlF+XnpEUU03PC8sNHQ3I0ZqaDcqazQ9LE5SQCZkaXhJOTZYYFh6MT15LnM7Y0JKMTspTmBaX09QcHoxNXtKWnEuOCsre1VDZVAuRHRQPWJnK1IyPCU0RWtqXk5eISklVzhNJUVPMWgiWmtXPCxydDVsJV0oV3dmQjAwWjh0''@;'; put 'put ''aXZIWEdUTjl7KCQkTFEmWyFQTyNyWG5VT283WnlqQEg3ZF13LDA5bTdDWzk3Yk9JaTUzdjlWV1VzakpmczspZzxhY3p7UFZpUTFFW0dlPENUJmxIaitYSm8rMkg7WEMmXkgpaiJ3cXtpdU5Sc1klVjtNXjUlJnJfYlZyaHMrSUhjYiVxaDUofmIxPnIhY0J+SW4se0lhL2oxVGcpOkRrTjB2S1J6''@;'; put 'put ''MWA8IXVJWCwlZnkpKXwsdHZAO3xXS2FoYmRgSSNOdiZWTUgxREEvMlFjaXwwbU9bS3s+O0lYcWt6ZDhxMWhlXUAia0ZUeyZhayQpWWNmOEkhYyZNUkNleEk6SyRCZ1dqKW4lZV9sRU0/QGVQUGx0MT1ueWdLREsuXTMxeHVrJT5nWUMzYCRyXXxAd2ZNIXRweW9IKXc2OCo5ejFSZUgub1lGQ2tQ''@;'; put 'put ''UkQ1OWx7bEVWXjlMeXN2ajswLEtRO3VWOnd5IVhaK0FRfTA4dDxAMUptSkAhb19EOWNkdyk0QUdKTGMocU1uM1UrMDRwe0tLKio1XXRrP1lpNURScFlIaTRLeyMrUGFpWmY+TjpQP0NJNV1xUEthb2BUK2V7aGJafiUhcGRVZThtaERQO2dQNjU8bzM7Oy5AZGgkL0k7cmV6XXg3LGZwY3F+Yll1''@;'; put 'put ''UksuUjEpR0VLXislUWsuKnJoXWdbKkI1O0twe1N7PSY7YGwpLHdqLzJ1cSQmVHkoazJUQ2BqPkpaUy9oW1BiRE0lJTk7ZUpbOzd0fXwsXUx5fElYSzVVM1VJXUdhJTdVTW9ZZF1bZFhoWDx7InJYXnl1Q1ZKKkwvUVZLMFF1dXRQWFdBXVQhPGBKbSEvNWI4WXVUYSF8STJGeWl3NENtQDtDalQs''@;'; put 'put ''Uz49TDtAQjtLUkZGUn1CPz5EbDY2JXpGRV0rX2prR014alpEb2ooZEM4JXIyJk52cFFwKkVJT3FCUW5oQGYuI1pqKGRDOG4vdV9CUDNfZyE/Qktmb2orZG5OekxHSXdrWlYpdD93Z31gTEkmNH1fKnhwMnY5QiUsK2EhPm1fWTFZMyF1KWsxciF1UnReR3B2YXE0MTM7UTxHRSIhXj5EMm81OTEl''@;'; put 'put ''MV09b0UhZzdwSVlSeDhpSTZaPHtYfDBgOWJ3fTdFalN5cGNLdXkhOjNKKi5JeHlCLntDN1F2YCNDOk5uT3QqKztyS3Qjayt8QChjIm97PilGNklHN31AZSRyWmg1QDg9VzJDX11YMVVmT0tDPDMmKigiR0J2LCwicTUvcFJbO1J1JXdBYnxddikiJk5eaGI6bWRAUSRqeDxdUjVPNGx9QFlqOUdL''@;'; put 'put ''MSk+K2hAYklGLGZtK1ZQUjBJcXBwTV9deyUoSUBwLGgrcFEwfTVnKklkT1o2NndIekM8dl5aaS9LbU9eSyxnSzpaImYuaW9PcE1lOmM+ZWZVeWY9TzZUS3tUdzR2U25FOSR6ZigvIiRKK0JsOVZoazFwKEV7QkNqOTFBUig4WEssSCtWPFJIRW0kT3RHJkwsUHo5anpqPiJBclROZjdKdDxmNn08''@;'; put 'put ''dWFkPSYrLHxoalImJHRSaV9jPzN4WjBYZHBveU82ZTtaUzZoW3JWMn5zQCZDPTdEallGYGhVJGJ9fnZLaTdiTEc2WSVAOzNgOXJBXyhXe31JcSFCOnxQdCZqXjw8UWxmT0hOZmFfWUcxWEo+LDhCRjYqQCNiUWNzd3woYjN+dGFaMnVmMjBwIUkmdXtAQmolYTZZI0N4NF09KXpUMlp8Wkp2LCg2''@;'; put 'put ''VVVxNThwNithPmFwTFNSXiFpLFkzc1d1LnR+RXlWOU44aSlYSEp1YjhZZ3pLRms8aWBEd2VlVk0yLEgyY0JCfltaPGx4Ni9VKll1VlI8ezMuPzlkXSM9LlR+I2Z5VyV8bHJoIy8+Pyo9ZiNmUy9AJUlrfmFPZC9IJEpiS2x7WThmamVHbTVQKjhNeDtnWk0+WXgkSTU8cWBAbShEJmpZX0FmR2lC''@;'; put 'put ''dGcvQWBTXzVrbzxraGV7OThJT0YmK1N3UE92TlFlNVUhTj0pWSZZOzhfLjFWQyl8KHkvVkokbnAlfjI6PE0sPClXQ0xleU9YXkQlXWl3Tig8JjxXUywuQ2s7NmhUMHgoZiMvTzRsV1Z3ZHd0KWdJYEQyKWFpK3tbdzdWSzp5cEQhS3l1UiRuQFVYZj1URl5XVXp2KkMhIVU5O29CRm0/OiVPQT81''@;'; put 'put ''STE1NSkmTTpOUWBFUkw4OUtYKiZ+a215LHVnXjApTV95WE9YUXtYcG1uI0ImOF41dCp6UGFBRW1dQCMvOTFiJHBKQUpiQCk4b3BIKno5MSsmMXJZMjAiMVBQMWosaVNAaygzZHZ7PUJ7dFlNKmpVY0I0MiVPPl01QzY0TVQrSGdYKUwlXV8rSmpxaUc7YEI8IXlsUyhfKio3ak9eWkk6alBtUXIp''@;'; put 'put ''dEs5SUg4WUtHTHV4ImApK1lQOGo1eFEhX09dZ203WHZ4Olk5NF9IdGddQGVNRyZEdDRnOGNdLEYkPD1nWmB3OSZlbCpAa3pfRF1EaTB4bE12MSluZmEwK11YZTV1cHBfVjFgUEd3KU1xQEFbQD9wOCIjYkpCNVkoT0hlNXVbW3lCeT8vWW87azxsNVdGR11qbCg7KzhmNUVlKF8/Oz9Ecm1TK2VI''@;'; put 'put ''fTE+JVF0aDVkOix4djt0ckB3dkZ5XTNscUZTbz4oWU1hKTdRZ0BrdXdpMXVRJVhoUSZkUEQ+IV49e259e1dXMCssdG9dI3pEb29AazsrVlZKSDptVUAiaitBRStPMkhMLEJGYFdROHt5UlBKRkRxWmE+W0NjKn4wQVI1YXFoPmpke0FHbUNwYk4+PCU9b1t4SXd6LzdmKTR4dTNbKkpgRTF0NTU+''@;'; put 'put ''P005YzBSTVRhJE04NGR6NzRuVX0iISZ2SW9VVEkjZk05K1M+LDs/a2ApcXN4OyEselRuJXtkPipZfVlkOkxsPiEjTCVnIlZSXnRtbm5QI2hMSnN+YnNvPUs6S1pofFBWXTkjbTxeKC9FLmFyKz1AV0hDTCovYmhmRDY3LE95P0Y0JFFhOEBDPlUuSSJkQE8jR1pEZmM6PlchXnolLzk8VDNTYXRt''@;'; put 'put ''UD9rKEQhXlYkelt1KzRMc0k2KCZmMy8iZS9SazVHN0ZhKHNLSDtkJDhrcE9FcVYwMjwwV3dja01gcGU+YClze1k4aiJ+Rk04WkxBcyFDPlo6UmJYS29dQV9NLkhuSGZZOiZFV2JiO0t6RH1KO0tLYUZTRDl9ZCxdeWN5TixdcUhBOiVkajFKUjsucSkrYWAsU1d8UWkpRlJtQl16JVJlQ0wyRG18''@;'; put 'put ''K25nO0hmS1dYcUhrQiEsKSl8VC96b05ZMDIiP0dkbngxSjJ2NTRiTnMhT345MUtaZngwRHB9TyN0cXBOUEhdYWVebER3WndsPTVULGFFY0BlKmEke3Nhe0BSO019c2ZQd2NuSXNfWWF4a04+cVcqXmh6WG94OjBrXj8xWEJzfkRyVVVtd35nQX59P1VpNSwiazFmTWJIOCoxWmU4SFFPLyRMdHEj''@;'; put 'put ''aEQ6fTM6M2UycT0vOzpHUE0ma0pmZV1APWo+WiticFFJXz9vIlAxOVImUFFxI0FPcmlWSUJSOklAWUd8SzI0WG54U0MoLyQ3cUZ6TmwzTl5rZStGX3twN1pWKz4oIW5MUGVCLFM6dyYqcUYpTjFyUDsoc3BqKyo2Om0qMlpNNFk0LDVCLkIqZGZrVEAwVS82Rks4MUVlRVdAPCsxVmM/STcldnB2''@;'; put 'put ''SCRDcTsuZGRobHh3XW5FQiMuaUJDX04rLDNBdHh4Z2hGQyw4bihVc1tCQHk8blBTPDosQXxpeUB1UnpOU3ZiZ11yX3VUYDUkRyo1Q0poSEIjZktqNldXRFpvUU00ZEx4TC48Wi9YfGN9UE4uRn58fUQpNENuKyVbQk9bcjR6QkduVWM8QnopOjZacjlWPyZxKnBZc2F7aVJxQHh+RTUsSFErVTxi''@;'; put 'put ''cG9RUmY7VU5hT2JeV0NxWTJhMjExPmV3cWBeKmkpMyN2SHFeazpbIWtacnVrfVBDa1JkL2N3JXVXOzJodm50b3dgIkBfTyQwVnNnM3EoW1dLczA6RVJSRiFVYXVCYixhbig+V28yI018JXpPais9fEM4b0x2ezxYWFJGRC5TSFsyTWlYVTBMQjZbU2YwYGcuejZOeCh+bnJ+Yyw+bTclKnhWcTRg''@;'; put 'put ''IT9JMC5YZF9ofVM+a10xfndtNz9yImBmQ3tIX2hFbXN1a3tvI3tZS3k8ckUuWGdDMncrWWksW0ghUGtrWDJCUnRGPUpOLkwsI2NHW1tvdVtOfCJrOnJ5SkJrWTQhaFg2I012PHIhJSNdPVtQeT0qajModS5qc1ZvTXdnO0tAd1ZeKjBPU2tTYjdmQCslP2Iwc0VEJDBFbFJ8I0MxdEZ+fXVPSURx''@;'; put 'put ''azRBV0Z8aUJrVSJqZC9rRi5QRVhQeVNaXWtjN04zKnd5OFo1WmlSJFIxZDFfR2M6JVojdy55VSs1dDt6eWNoRTt9c150UlpqPE1YSH0vOTJqY1clRGVORUQpWTwzezBEREAwQjlYJTJVRXVJO145Y1guZi9AR09JNVlyRUE6bjAvLnkxI0UoZzBXWFdEKXkmUU95aUkvPWE2bHlDMmhnKnh3eW5x''@;'; put 'put ''WkE7SlB5Yzp+ezQoeyNValpHT04oWmFwMFRmbSVwb1N8XjxGJGN7MGRUdChkIzwoazZbLyx9SGojYFI4SlN0RXUydSx0VmpFOkNGIiJUbnlXJTksPj5GbVpkWzpXP0JkTTQ4QCt0dS9GUnZMU04oJEcoezAmYnNNX2UsaFovTG1ofDpJKjZGU09gQUUpZUUxMF9pfUVqNy53ZTw/WGF7aG1GSk9Z''@;'; put 'put ''b0xXa0hEdT9oX3k3IVlwRXlOIkMxKStoWkVJOzNJb2JLazRFOjR5SUdfZ1I8MyZII2cjWXF8TUEjX11XMnVUakRlOE1FLD1BPVRVOTIyJFR3RVU1bmFwXltnYyNdeTsiSTB3TF1Ic19YTTtBaUxZJS9YV01tMkxMU1MpW0VHRiwyRjopKThOSHZ5JiI/YisiJiUwR09jXSJ0ajVnek1uO0NFdnBe''@;'; put 'put ''QDNxXTg5L2pTaDkldVpvMUddPGBvb1F8TkxKbkgvMWoxQWtnPCF+LER8dm92TyUsWH1+KnBfdnVJUk0/WHxuN2VRNm9gUSVkUEQ+cGBATTtmTl50PH1QI1l4bVVIIzBRJUBtciZtfCxPNFpIOHVDdDV1L29vZHQ5Syl2T3UldyhXOFJnOTsofFhrPUlYLFh4L0Z3eCpZV0IqJik2dXQhSUd+P2dd''@;'; put 'put ''ZFh2REFxK2FwX2k8eVg5TUMoQWEvb2hVVklpNFBfNHJpXWxxV0d1bGApZiQ0Wlt5KHdNa3NCTV1GPFtkfDwhRmYxSzwhZGpDNS86M1IxW2JDNUZlNyhlQ0FtLER8LDZbT0FDKFYzeyJdUmZvfnllcmhrUWV6d0IwXXZ0SyJsfGk4d0xHJUJDYmsrUX4he1dRKTlkQjh5QWdDK0JZR1JGOUQwcWRF''@;'; put 'put ''WEZ0QVtBYHhzIUd4NEFBVFgqRXtDQiVtXVEkeEglNVp4P2hvYU1RbDRvT2ZhPGxKIjhYY218eVNgcyU+TElga2JLZXFSd3UmVCF1bV1dYWg4aHRTKH03Y2F4TT42fDtXSiZXRFJSTnpEflF5e0NNKEJfP3JuOXliNzlScFlren1yR0gmOlFbWk91UzB1PzRgdW1PJlNLOjA6MmU/RGAoYmVmendA''@;'; put 'put ''dlRYWTdTS1YxSnApeUx+fEhKQHVkL1BZK096ejsqblh9WHBqVERjQ0B2KV9NVm8lcUY9YzZZYFFdRGd3KmhHbXVsbiM6YFpjPGN0SzhdclBeLC9CUFhAW0laKkp5WU9AYjlmP2Bobj0iJiJ3KiVkUGZvLzFiS1llZkVXRU5sKXl+YjlZJnBtUWZORSFjUTw9NyN9fEApaSksUCExPDFnYkp2fWpB''@;'; put 'put ''Uy54N3FuTiI+dHAiSyQ3bm9EeixeTUJYdW1+VWE4ZFdDVzVCenFsUWpLM3A4X0xDcmJzUktKbFJHQls7T3c1U0VRaiwsTnY8Q2lfWityOSliQlRFQkY4Yj9HUCM1NlFAITlqTGkuNHozKHVOKT1MenVvZzc8JGFqTlNea3AqNT5MMml6ODJqbE9qWWRmUy9ySHA9bzNXZzdza2h+byErYSlraClD''@;'; put 'put ''QTprNWgzUWokY1NUWFN2LnFuST5oQi9gVjpmay5JPmRfLmNPWjRiN2J5RHw4MlBBKjV+SiJKP0tEYHR3dUY2dyJnQHdBcTFFKVM7eSljP3JFWDtbRklqWks4NVtqbT5QOFpRWD9rVFtyNDE7aGU1PWNCJUo3PlYyY1NVU2xpNF16NjF4Pn0hNXZmNnN5Q2V9LnYoPn5xcGlNdnQ0dnVla3JIWms9''@;'; put 'put ''OUlhaEB6UmM1KHRDYTx6RE1EWi4seT5xWi40b0VmNT1PPnY1em53NGJCTX40OGVOcDBocXs5L0E9b29maGhaJFV5WGYzMFt1MWk3KFJKUl44LCUkWVk1RDppKikvZzVmRzw5PUN9UXF8IVFjfD1bO09pQmVpdnRFOFJrTzdtQlJ7RFshKy85eSV+cUp6S3xNXkh8NlM7Y05SV15UNEw2XUdUSX0s''@;'; put 'put ''MHIqTjh4ZT1WKTp7JE1HUSwsYnUlN3ZMRTE0aVJ9UXg2WSUwLGV1SWhzbSl8dHtTLiw2S0VAYi8ibXxjWkg5OmV0Wz4hKGVnMkEzYjI6PH45TWVjMFpkWGk+Yl9RWyZUc3V5WSFNd3M9Xy5weXtDfVFYb3JnK0YpeFp+TnpLOHkhWztDIURlInJQXWFzZjx0Zkx3OzlCZ3t5SltXLEVbVyNVOSE8''@;'; put 'put ''UElnP1NuemUiclQ7aDF1XklhckRtOHclMD1MPkNBejFCOVdgUlFEbVo6YSl0NnVxdW1hWHwjPzl5OWtBPEAvSXp5V2UrZk5SVlQ5dFojTDVGKHRrIjhuKXl9fkFnK2hxPkYsN3EjNTMhNVo/Sy9dNSF9XV1JSTZ8a3NTKyZXT0pTNEQkVFpTNW1sMFAxbWhNX31QSm8+emZTY1EvZn1dJlFpJlQx''@;'; put 'put ''QGNfUDAyP31kQWR1P2VTLDBmViVNWDArZ2FiUWVRU2ljVyhBOyV5ZjJPaW9aVUl4PyxrIV5ZeEsiRDg6JCI2KVYxSUxkQ15nUXlNWkhacSZXREVmeTI4cE9dPUBHLlEjZFV4dj13Mi8wOzRkPXRNKl9ZSHd+OSNNTl9ROilDOV9gVHcoXX4sZlomdTh0eW5DIWlWWXsmelc7Wm1IO1NobX48PHAu''@;'; put 'put ''OTchdVghekdrJmxIY1FeQ3BRXj9GNSVHOiVPTzkqQTk8ZG59NHdDMm06eE1lOU1vej99Y0NTWmouKHEkLC5jbChMOUxVbUFYKFV+QyQqX2RXMT51VyFjczwsJmpNU2k8dyl8KFJoQmxDTlNYVWRzeTtiMylEe1B2QVh8aTVIO1VSSnNPUyl3dk49KjsvXnkpZ3BVeDgoWjwqSlZMbmopZmlQWnZT''@;'; put 'put ''PTk4KixiN0gsdWxzZS9PSTpHUXpXJVB5Vmx+UkB3VV5dQDN4cnhYPC4sInAkeiJ8TmclL0BOaj1yPzs5fWlNUl1gN3xUMHRhQ3MoOG9AR1RhSVd6L0lXVUNATjxANH5hWEM4L0pYaS9hekU/cSVuUyQ9KmVKUHpyP2FTaihyTCYudU18WnZwUSMpakBALyJZTjBFNU5PdlRuOSZvVXFedz4qaGh+''@;'; put 'put ''I1M6PXw9TVhebGxeLk5wMzk6c3NKRHk+VVpXTzxsJU9ZRzFMdDdgIy8jZ2ZxOFFkYEAmOGFBSGZeMl5nV290LmNbQDdjajZAKylyPjF8QFYlb0h2PVVnKWNwQGZsamM5QHwlQVUmMG1dfWhoPSlBMGFbRXxKaDhoVlRwblRnOnopX2k9N3g7UEdLYC5Aen5zQFprTDFCK3JvLHNdImJLMF1wMGBj''@;'; put 'put ''bFI4VHs0Sktha0wxRVs1Nyw3YFFZZChNKHdRcGRSMHpzbnhSTEUoR0IldW5TYWpmamN8YXZUckQ9R0xJW3lPfSxPTXgkO0NSez1lK31dVm5aZylzQX1kW3tWQHJTV1dzcDM0VTV6cDN5e1hqMXU8VG03JiVbQD9rPD46VHshN3hrWFZvRTdibCk6ZVdIWTBVQWQkNjUqPkVsL1trYE8xZzI0akRl''@;'; put 'put ''eSJkWDojTk05WnA9XmU5Sl4/WylESDN6cDlkclJPaDUqZDMxTVJbKmU4eSEsWD5+MVZVP2g2KUBqInkwaCw4N3s4IXBPPkVHWFUpcVA2Unx3bFM3c2U9d3cyRGFrOzFncCw9MzZ4cGk7QXIpQXc8PCgvez4iWXlAZmdYTFtfLngxZWZFfHl9X2FTT2YrdG9+TUpUOWR3bHFvcShINEtmeHF1Tlg7''@;'; put 'put ''Tj5AeXNTO15fNk4/ZDslVTBZJXE/K1FqNTg6TVhVPStvb3V5V0NxdHZsJFtMNixAMiEqYnk5KTN2JXFrXUZeM082MFtZZiQvSzx5OTpybV1VMW1RbU1TfTlQQSgxcjNzWXk1OkwsZTVBfVIxUT1dSChbYkgqQ0V7JjEmMTt9YiYrQX4yZjd8IjV4cXtIcXlQZSFKdGQ1LE5HZiZ3eiFESmp5UG0p''@;'; put 'put ''Z3EhRzUpcDU9aXlkMS5HdChre308S3NmT3V4SnhHd1QvIixtTyJaRSolNTZ8KyYjcT09S1pDQ3B7NEptXzVKXjlYelgkeitFKDE3OVkzXmIxfWFTajZGRlI4XT9gSj1dSHtgI2B9S3Uvfm0sXU9bP2BWendMdiZMd1JGNl5rLFFHRnt8NiVOOHdLPyRbMFdTI0hgOmMxRE0sbyRhI3E1PXtKPFgj''@;'; put 'put ''N1glPkNNdEpnfWgjam0mal9edGFnT0s2Ulo5VihjTlhXbjBRY31tIX5Kbk9tM2tSaUJgaDgyXkBmMUJSOyliVDosX3Z9PEdPTWJTfmZIUlRELj5VWnA0KDdnP2c9SGV6IytJfGN6JXdwaXtJI3BTbCQrZGtBLG1kNlZxMnh3Z09aKnR2eHFPbTRWWUNLWGd+bD9LZ2Y/LykuWUg8ZDV+eVQ4UTBx''@;'; put 'put ''RSNLbWVQN0R9ZzcoO2UkP2IjfEEmTGsualV3emkzMXRtJEdOQygoU2FlIWJaRWA6OiwxYWViTklYJltiVytlUTY1XXN7Z1FOJjVZZ1FCMHd6Kns2Lz9bPjhjdlhuRzVUTSplemojSW1ndVFGLF9odFYkcTpmdVFAQ3pEOi5VSVFgWlhEfk50elNPNl58Uj1+M255M3MoJT1aZDFzcHBvOEcpbSZ8''@;'; put 'put ''fTVTMmBPQ3dCLiJnSnApP3xOTFNvZl9CbSR6dSZOSk1kMDApQi5wNUV2XUBiP3pdXy93QXJCMC5PVDhaIiJ2UEd5W2JGZW1IMixAa1s7MjVNPHRWbSRIbn5vJF9oJD4kdFYrKkhrb35BS3s2eTFIVjBQdHQjPiE8KkBVNms1bzJvVWheP2Q6L3dYYClgZ05sQmB0b2BZWUZse2w7IWN9PHxaQ0xh''@;'; put 'put ''b3txdnhATktaR3ZmTmhlSFk7QCp5QyZ7dzk7WEZZOVY4QExVL2BCWFE8YlN9elBdUmhHXyoxVTRbYEgmSVZhJldGMil8IzBmVlVaPWduMGliNFtqKmQ9N2piY0tHJWJDNW9rbTtiMXEkdDZYNkZqSzlrZVdGKnFXY31aemwpayIjQnV8KHNZQ2dZRi8oJGghMVhVTVtzZ2JzcW46WkJAUF1mYmI9''@;'; put 'put ''NlhKU1VkUjYiUiJSSDZjOTxqPzNQdnwxeE8/RWdWUjxBSkZsTSRzUSFxaEk5dkYma3R9TXk9QzJ6MURAelhTbGZ3bzpfaXMyI1BpWnJWfjtbWUVRTlNAJVM+ZlNmRnpQW2FpW0wxfnVoREMzVHdqJHNWfm9iNltNeyZbUkRRJGJ2aTJRIzZGezs6dG8rfF1PW284Ti9qOzVSQ2dTbVBKWWBPZkM3''@;'; put 'put ''YXYmLlpsYVljS11QWjs6ciVVR2ZDdjkvQD9bdUhGOndHfjMyNlpzPWxVZlticlEodzN+UTIzU2tmQlIyXkJHSEdlaHRHaUEyPDNRYiNkKlUsPGkiOCJUQmtKTT9zX3g9eVFBd1cjd09DRURNZ1okNDhGPTRYMlZAcmcqMnVMcWomIWpmUlBpYXNdOzZUNmtDRHl5RTVEeUR8JDIhMWtbQEtmM3FK''@;'; put 'put ''eDk7QGRkT3M9TCJyST5+eHEkK3tJSVM/IWRyOSNpWSlsYD5sfjp6OCg1TV15UndncWoiSShHM192MX02L2I4TmRGbF10fUJ4ezp3fEBAOVp9N2kxenhYKjl7SiFUOGQhTThaVippdmxHVCwsMHFwODQrTnJrYVRXLFZ2ZkBrYnNyM15gbzdCanhuPEx8YXZUX0o/aUlRQDhIaTVmUCkwfUMhTWld''@;'; put 'put ''VUVXVyUxNlJ9WFRweHF5X0BLfCtJfSJscG8oQHJ3fFRfNyVnbm0kaCgpbzR9L3RLaVFDcG8wanJoYUV4MWBVLF48PyU8dntoc2o2SHF2bVVYTWl1Ll9fRXVUeUNzUDI6aVIoSkNJUmo+WiFAMTliOVNzbzc1UlZPVEN1amh2KyVqKHBEMUZSVDh5UFssL3dSKVZVR2Zoa19pbkBpUkUjbU5YMlhX''@;'; put 'put ''QjohJkozMjFgU3VyW0UvQCVxN0RRWmZwKyxOVGVLL2xxVGI2ODtTfVM3I2tBRSpnKkp+eXZobHd0bUxKXztONGJXXyVGR2Rtcjh9NXojdWgkTmBAdT5VTDJGJC97bVBLI2FeKSQlcFg8SXxXTDMoK11pV2dFbE9udkpXL3hwNipialdJZGNwJjBSTldWKS44UFEkUDVZfjwuXWVpcFIzPDB3Pmxb''@;'; put 'put ''K3lpaGU/KFtAXUNbQzlTKVNlOFt2USNXOTR4SGwzWn1rTDxdRmQ2OmxyTj4xYjF1T21PQG1HVlcpU2kmVz1OflFUOF5qdW9XcDosfCIvRmFrIlo4Y3s6YSE4ekNIJChifnpvUEMuPEJscXp9cEwzY0xVLmEoSGx4bD0sUn19ImA1Kjp8USs8aTMkcHIyS3YmJVlpflMiM2s7bmFiRztnKGNDNkNJ''@;'; put 'put ''ST1Kd35dd3t8MXBrdmt0TWo7VV5fK1ZkRF5CMXkke2h5JGA1b15Cbjw2XXd3QCQkWSomT0kkdlFeaVhhcVQ1PVUoS3xtTSVSMUQhd1s0QVdIX2BILkcodWArYD86dXBvRyg2Zm1HNXBhemFpO3JVNj1wPGt7JlRGdyZOeSUlMTQiSy4jLnQhX1lLc19MNV1KIzNdKWtVLztYQV5RQXZJZy9rUj1S''@;'; put 'put ''U0hOfD5zOFQvKyNmQiNQWDA7S3F7Rio/OSxOTiZwJCwrQGt0RjVZYld0MT4sSkBKUW55UDAiciNXJSNHfmhyOkNPSWNkQlFfTTY1dWprXytPUUUmNDdzQUdHKH5dPU9RRVY/Xm9wSy5oP3VDWG09cSZWX05zc1lWOU4zPEt5L3VWdEZjJFg9SmdUe0lnJGRteGt7Un1fQFo3MzA/JWJ7MDgpezho''@;'; put 'put ''cUdXMXhtPGFsTDN0MmdnbHF6UVJaaX5pKlJSRzk4OCEmPE4kYktAJS9hXzY3UDdhLDFzeXR0W2hyRiE6Mm9ndUlyS2Z9aEZJTG17ITs4dzw1SGc8alJxNXJTL1QrYXswN1IoY3FrS1I7XjZLXTx3L1V7YnwrRW1IInR9Xk5obXYwZnohQnUoPzIrM254MXU5MGhlciV4LyJQd1svTEh9QyhROFoz''@;'; put 'put ''MEc9JE05Uj0sdzE8I29wfWpVNlhFTyNvT0NbWVM4IWBSbUljVDFJUjxMPkt3Xi9MWilVM01dOFhgIXUiKGZjT3hxT3s1anJFN0RqfC5QQzZZOGF0ZVVqN2NOPW1gIlZ0PjdgU01UKXFzRVtUWmZsQEJfS3BtI3tKWlU8c3h2cCpIJmp1U0FKNzpTMkQ6T1MqQC4vKUA8eGt2cG54MUU/byNyKT4i''@;'; put 'put ''fkBdZzBWJG1uZm4jWWppTighfl5tNTJ4RyEhS1tuQmsieFEkSDFlRHp3KENoV3ZCdjhHayxCd01HYE5YWD8+fTxjWTpAYG9vS11aems+aWI7XjxpND49Jj8kbHYoJlFILCt+YUVBYDF9VCRNOWs6OkcuVUNYPEBRWWpINiJ8ViRjR3xDRzZOXyNDRHk9PEFLISolQ0VuPGckOTdadV9AakxLVkc/''@;'; put 'put ''eTByOEklMSYxLEU0anldaSM6ZmJjPlMzcE9IVlNtTXp4NitseUBLYyEmYlcjdkh8JWFpPyFOaDxOenEsXXddKFtyJGU1SHQxTS9LISw6eyRHajl1KSw4b0txXkllX2I4ZkBbT2ZYd0FhPjshLlExTUxWdzExTTw/XUZ2T0ZvbzQqVHZXbDQ9X24wYW9yNWg4W0tKYGteLkoySFtBaitZZkJdM1Yy''@;'; put 'put ''RWZIMkZCeXwxfCx7eXJibiZ5YTFBMipnJF12YGhRXmsxRCVnV0klX2ZrWGBdN3A4JFJ+NGRdWCVIP3JsIlpGcHpaPGs9JT9tPmRqLitLO2lWZ2F4ayNKME9JTi5eSTo7OV5vUWphd05vNT8sI0dCQDUiR0QlN3ZMTjxob3YwRz1DWyMwZXdBU1sjPUh8SjI2a2NsL2pjLlt3TldwOy9CaDNYcU12''@;'; put 'put ''Tz9ydnQ7WzYseEksa0wlXXYxR2x4YEQqUUg2QlpTd0BjTm1hVFptZDEmMSguREx9MCF8b1lgbDtLKzw2V2JZIi9DMStBMURBPHpHUEhUTFFCPDRZcjpOWUUvQj9rPzBXTiMpPkU/aXN0WlBUNWVTc0g5NGxTZGFFaT5uQyRdUSxmUTJQNjQoQk5OJHlRVnZqMl51QiEkUHxPblpuUiRFdGN1Skp1''@;'; put 'put ''TllTZFp2Z1IuaEFJUDVJMFhPYWF7YV9IWW1Vai5jZkd3PGB2NDpYUH50PWJEIzd1QiRETlhQe3RPTkY8czZBZzpGakVPdVN2N3FRMlJDdk9lZnhMbUhqTE1dK0YkWi9GVF5zRU1DVmNSdmYhYTskSVVZN1c4KkBRZ3U0cUAybFJNRXEibW5aSW83dXV6Ijw3S1JNT0lqbGErYzksOXhdZCxEaUdT''@;'; put 'put ''Lk1AcGImd3ohJiRQVCwqLldsNkdHbC94ODBFdCldeWRsMHdWN1FqL1tfYFpXSFhxK3h4a3VvT2RYMVo6N2BaJkQjX0VhREg9QlFSRiQ7SC9CWUFnTUopJjx4elgrIihTRz5rVER8U3psYjdbXXlqRUUxanI2UlBiN3dmeWQ3QiQvOENRfXx6fSF2YigqW25XdUQvPURET0owc1BYKDhbQWRtXTU9''@;'; put 'put ''M082PjZYPUh9JVBWfn0iTUVXJXZaMCNQbnRybGI/OVs1YUd0OD9XdElONmtHdCwheX11SXdEZDUpVV8qPF43UC9EZDVacmlUNWExSnd8QHtbRF8wI2szVHtSV1dnXTV6b15XY3A7XkI3U3FKN21naTVNPCxmOj5Xbno4QjIxcU93an1lLkM6W1paTHlvQGg6TEhVPXQpNEo+PyRGWz1+QFE4W1Fr''@;'; put 'put ''Qm9adkdtVzZZM1Nxd3hsfEc6fEhCImgjWUdMTnQ/YHddNT04UDpRcm9JImR8X3FIY29aX3w1TXIhdDghKEFkT0owJCIzRzNZfS9CWj9ORX4idmtFRT00fVhga3hGWCorVEBKXjJYPlpEYFZHR28ldW9AUnIpQmRZOjtGW1B+e3lkSFNaej08eTB2PCNHJT5HOUkye15LN0g7TmklTCxmbmdiKHg5''@;'; put 'put ''YzZKMlNSKiZ8bEhmaGslXylSc0VoN1R5dEtTaGVMRGk2a2xKc3Z3TEdjdjFsVS8wYyM6NlpyfkIyLztNZVIhfk9zY3ZScXt2XnEiQj80NSRlNVpueTE2dlpCWF5AU0RbKjdPT313MXImPDFhKmcwUU8iMzdFKG88ckljWGJzd2Boa2Fzd2A1PGJPQX4uMih6QWRARj1NTU9WOi5MW3kuOmRzTVB3''@;'; put 'put ''NitbKCVyTlA0dEw3fTtHZnZGXkBPPyZIPzBQTW09WHNtaDVSZnhxOD8lRyM9dihiejFxKEVKVn4oRml6RzVCMjgzSU94dWlSNTYrZGNPWmQ0UX1IentUPDQoP3lLNDZYejssej5PfjB6SHZYbTBTZl9nRWIkVG4rc3h6WkowXU83cH40WFo/TG96bjh0aT9aNmlVdlQkVWZRO1V7LFs8MClEJSVV''@;'; put 'put ''bm9RJnJ7SnNPUVlGWDZsO2NeNFBgSVNucGpASitkW0l6YkFKWGRlWCI5XU5OcD9aTUhrSTtPYUswRzZLUmhdJERPXlAkQkgqPFFBYFEqKlY3UltLUz8iLnRIeCs/WHR5WmdbM0VHNT54VntgdXxFb2d3QSVnKGxZI0JBS3RiR3toJnViX0B8ZHxhaGFLXz9HWFVwfjVIP0dEfiQjI1kvNU9ifipt''@;'; put 'put ''YENVIjFzOilzQGJJUkI4VihfYSl6OCM8UXMvZm4/WFMlOUtMfWlAJGMoRyVxQ3JWKlFbRjoocywwa3xuRDQ9LyREKH5bPltpKkA+SW57NWJjKTJQbWx7Xj4wVHZePyJoaUB9Sl93N3BEP31Uez5Cck1VKjVHO19pQHdEamJVdFpnPTdpKVR7XkNwdkkxdltXS1B2fXI8Imk/U3JzaXQ0SmZuOk0z''@;'; put 'put ''dlBEVHlxViV3YklFPSlLJGRObUApUGllfi5XYEFZS1FLKXQ/PTFDc0k+W1JRbnBSM1d8V1hPVFIjWGV3OHk9T01SRVA6XztBUVouZD8xLCE4ZFk+N0xLeHsvNyQ+bUsxT3Z9Qyx4UzVjJiVzaClGMTFESD5NZ0NTcEgrMiFMKVcoOCRzJCZ3Rk5YdyNXOjJjcGt4SmBPUHRseWUiPnVqa0pONlUh''@;'; put 'put ''JW08InxpYz4lXzQ7TlUxeDxmZTdlTUhZZTpkRG5yUj8+amUxMllEeWcmdF47alojWEVYImpacnZIQVg5Mj0sI25ZPitoKTJBM0xxciRlNTQ0a0VmW1k5REQ7JSFAdUN3Qz9SOlkwI0VNYUdxIXNiPyxgVE48KE5LZ1VZbzVzYlUkb3dCSTAvJS8kMF9mVip4KlNWeThtVVhtLno6UW1YJUdwdTJN''@;'; put 'put ''RFgqZk1hZyo6a0l9V3BiPXxSMTdHUTVwaT5IUVFpNjMuKj1bdEkuWWcqMEhYXjpWIXRGTm9FXVcrO112ViV2eSouSVRgTmV5V0NRTnVFcVhjOzxGay4mRCNONSg3Z2EhcGg6WVRxV3wjNFZ9eV0+QlVCTTFkWmM2VXdJPUYhYGtvLDpJT1E6MDhRZ0xQJDdMWURARV80W0IiSXRgM3dsaiRrUW4l''@;'; put 'put ''WTZ8UloxKyMwXSNSTDM5MEJ2MVdoSShjR05Sam1xVXlabTYqOXxKJDR2RjdONksqMyRZWlJWcUo6KyJmb0JzQGNsclg/dUY/KHVGTnBeLC8xdHREPWxFYVpHUmBIOXYpZiRxfGR8OjtDeDBnRyM8RWV5bzslfkEqZ0kmTTksaC9AIlhRZW9eNSxEa05lQj1UV2Qxck5fTjpSW31TYWdWMW4oR0cv''@;'; put 'put ''XTQvMTJSdlVgJmxvOU9LRUFIMVJRak9ZdlA3P3lpcUVIYHUqM3pgWXpCOTgqQ3tlI25Qd3B3P2BBYSRFR3RyXXVZKllidUdQZ3xqVjVZX15fdCxZPnQoUnlsRysuYVYyRlQ5KUJsX2lHb0w0bGs3QmJLd0wieTY9IURkdEVmJiY8UVZONXRxQ3xhSmQ7PHZAZ3NhT0dORU9wMiJMaE8/SzptOCFb''@;'; put 'put ''Y21jQTZOP0g0dX47aUdVUndiWnA0Rz56M3xNQTNxJklNSkhfRz16UFZtJjJFUWw/ITxaXT1CT2BAQytsK3h4Sm46LyYpOFtjR2cvcmx2NTFObFNgOnU1ZWk7MFRxNUdwZUsjYVMxdGF7fTZVPFs8W3dSOi48XT0mIyl4PlU6S1VUXW4/eGBYOW11RDU7KHBIJGVgO3lGX00qc0MpZVhKVTYwJD5J''@;'; put 'put ''eVZhK01sNk1IJHomRWQhTU12VHVCSXR4WCZgLzg2PGR8dUVUcDBnLjlVLjApX3UsY3dBUmtwfSFyQCg9bU4pcGQwSHxXKTlmV0lgMmtnYWJbQF1TZmNWbSJRZFg5ZF1QeElmU3pidzRAMUhyOzZdLzg2dDZqRjFEPF9JUkk7T1NxZ3hvX0A/OTVbT0oyMVdiaXVCfGZYQl9EPkNdZiZZa3wqQS5p''@;'; put 'put ''Q3BnRVJKenkqMlZgXyt4VjxXJHNScmhDVF0+amc7SHBWQFdmaUpUSElmY1g+L00iX29ZSFV1PExTcTd2SVNaLixRcnp6LF1JanJve0ViRyMhK1Q8Tz5IbEt6JmB7Uz4lMUsoUFIjSjFadCZPOTRdfFI6YlpJaW8wTjFtaW0+IUt6MyY0UGttTzV9fE40XlROY3tPNWhaMEY1ZTVXZ2RKOzkqdUxQ''@;'; put 'put ''VUVmNUAxKEAuLGRPQW5lKStqWSJjezRTSTp8ZmZ5eDFtNVJXOk9ZZjtNJncsWVl2VUZQemhMMXdgUm5CS2kvTjZ5PU8zc1M6WmI1PWw2KSU0NVMkeyEkdmZQeyZePDFhSls3VXVWZEheNVNwUFQpQVRfLk9idSgvekFQYTE0byNgYVg+e1ZRNUBwQFJXemJ0NWJlcGQjfHVQP1toLkk1JiMuT3kh''@;'; put 'put ''MjZQY1I6aixdQ3JfZiZdNjxIOFpSUVIhaC59QyFpUlF+MFV1Zno8cmZAJl56VXdIXW1hVVMuN0kyPE5TNSh3KSJlTjBMb2EpWiozWlZuOVIyX3tkO2dUWDU9dGdEXTx7OXRtL0xRaj5Jc29OW01YTHV5b195LjEsJTxNXmhoU0dRa21CbjBtbTRBVWBsUnxkLjJgLEdERXdtTWc1cFE9Qmg6PDk7''@;'; put 'put ''bVthXVJbYVUxMlFbPzRwK0NUcyFhTkosZzxPfm97KmQyc0tOdSVtTiRiX1NyTnlsMSt+UFQkfFt7OndqQ289YWV5bEkoR2A8VkBoSzA/dStZbXM1NjsxVCtjYlNgU2xldXJnSkFLM3lZJj4uXnFAe3VxMGJyVmQ4V1h3IUFwRDtyMTYsYSwzMUZlYWcmMHhbeV49JHNacDBWUEk8KzxUOjMlL0R4''@;'; put 'put ''e1lwRTw8Z151WjxJO1AmVHlDfG1nbWwjKihbKkJeZDJKJVRXSUFlOD5WWlZVUWhVSzBdTzdgQntDNGdoP1p1Tjd6bzpOey97X2x9Z1QmKCsuPTxxcD9nZnNdO0dQX1NbNVRpTHh+TTFsPjtzUSwpeDtAfkBlInI0VUgsZ3MoIzksUWRYQDNoQl02akgubDIiLDJ6JixRJHxvfWZofW1dVzgiVlha''@;'; put 'put ''TDhPMS9nYXA2NS86bTlVUlU5X0VHQitkMlhUclZve1N1d1BLSks/K19Wel5EbGhhbksmMGtTS1BRVlkqUXlbTD1ZSC5pSjp3VSh5MEVTaDg+fXZbWmFGZ3YrJS9XZGkjRV0hYjRtPTchZjJKMSxePHE4QCtfVjRtJXxEamx7bkQ+SUBYVCVtPElkMHZSNk1dZTN9XUVwISEsRmJdS3lRWkF8alZI''@;'; put 'put ''bGhnZ0ZRW0YwWyY6YltAJT1mRjRtXVtDJSRNNHZGRn5eOW92dmIyeXlRe293VzwmT3FLSUY1XnR8eXsoW0txNEBta2w/KHphY3VhOyVFNWUuKVZEbHZFa3J8IjQ8aCRDRmYuP3d5cXdva1ZRZno6Zm13I2kpPTo/WDE3RT9tbF9lfj5tbEFvVj1PWDlhUUZnODohPU5oVUpGTDZ8dXJocDBsWVc6''@;'; put 'put ''TTU/Y2xzK2QpR1hhaDh5MDR7RncyaS83LkwsYVRpRlRCZDcycUhzZDE5OnpiTFJhQW9XVn1tZVBmKz9jdl01M2NUL3xUdFZsPCxob05LNFdVIWJUQ0haVmdwOmFWLDgyMkQ2S2E9IVNyKVE6VnVfdSI1U3ZicHRRYkUzXVhaaCZlIXJONGpGOHt5NyUuSixaSClgKHZQd2xGUTlWW2VuUUY+VCpo''@;'; put 'put ''RF9WTDttTkBLZCF1bCowXTR3I2p9RzxINmBkKSN0LGtgS1szUWt4TTY6d1prVGFNOzIkblA9ciI8OSZTcFojSD09Oks2ZCw0VXs6emAofCU7fmlJfiQ2cmhYNnJaTTs2JXJsW2U0anBtPHB2fEYjUTZve0dka3ZMfjN3TH48YSpyPnpXMUJ8IX16NCx7OXJoMk92SD09OjxzYSF7W0R4TltuXiZV''@;'; put 'put ''TWhebHREfEd7dyFkKDlyJSk8SHJoL1IuRVlUQUFBXXpBQXtRe3lqWFpZXXdvTkdwLCVHSF5YVlJ7MVRQemlwTG1YIypBd0FBQUFBQUFBQUFJQXohPm9nRCwuZGsyYG51NW5+cmc3IXhJL0ovd3k8LCliNHdOO2M+OS9YLFJmYSFVbnZVVG5JIjlSeVZdUHkkW0s8NmE1OXVrV1B7RSp8PythYT1C''@;'; put 'put ''YWd5W0xqSD4yYGVmQmR3dnFYVnRCNGh1PHczYSN+SDA3NSl+KEFYZHQ9NHIzTzU3UG0kdmdlQ1dwYiZdKGNMI2p8PThMUDNVeFY4c21DfTRKVXNLe2Y/TylGaXxPeU07SnJNXUNSQlRvME51VWAzOW1yRUh2VHg2XShSZyxLQTZrYEowOyhddUdTJSZrMHFxJDBQfiRec0Z5OEVZe2whOz41ZlAr''@;'; put 'put ''P1V6R1NWM3g/T2Z6UHdFY2JHRWB6L3FYQXlES3dEQ0BgKlFGRGAzQ0RwXkg+bUtbfEZNcH0zc31deztEJlolWzsxQnNRV3EpTj5XLEomJiFHfS91Y2EpZ31NUnNwfmQqdEZKME4qYFR5flc1MD0wWFpFfkE4PF1JWG9eLnp0cyppaE4jKWFBO3hZZXhDfWxhS2hYSyhCNndfPlMyOEx6e3ZYNERR''@;'; put 'put ''P21tMGM6SntUR2soI2A6Wj99ZF5GL3woNH0kaTZ5bCo7R0J7ZFJdWEpMS3pQRngqNDY9Z004R28jY2Q5Wmd8XVBAcVRtNGFBT1EmOHFKdCN5NkQhNHRbbUBheWJPeGdkaz1UO1hJaGgkXmtXYEVaS2N3V1VCUW1vTDI9JmNXfn4kNzpMZDVbRSFYOzo0JnJ0IUUkVUcwWHk9Rkdfbzo1cnpjQExm''@;'; put 'put ''K1Uzdz0lL35MTCtLOzgyMDQ+Iy5QLltndXdwQmhYMFFGK1lSP3RCVF1HIkxyIURIW2tRYU9GRzVbfUkkclsjQVRPS2ZGQnw2d0Ymc1p8Y2gsJSo3SV50JC9uWkx6Jlp0TT1keDU5WGplITlMP3klWzZDXztqamAwQHVReHBwW041bnMmPFZON0RJUW9pfD1SfDllKUt2NjZqVzxhIyxFY05XUCV1''@;'; put 'put ''TTA4MVBIKTpkXi5xUzpuO05hcmhgWUBbcy4mLjgvdnd6TXVnYjo+YXRdbjxJXjBoeVNnKFQyI15GK3A+eGg9enBRNk0mR1RLeyJeIX5LUGpKYnohXVB7azZUZC5WS3VHQlZbInc0O3JoUlB7R0N3MHdyQTxgVzxdd35jI08vYXZ1X0JjbDwxUU02PGRjYm06RlJ0PipMVG52fFM0UXhpW09zfWVW''@;'; put 'put ''Z1RydHQjem9LKEw0YmB1L1Y2InBGcC8lfkRVM1d4NyEiOkEmQFhbcmZPflMsa2xGa2JzTzQpU15aXTw/UEYxc1ZhVDYvZ1t5dz5zNEtMXUsrW3gkIVRZVVMwPWlFcCxyeyFiJlZeSVhnXTJgKSxvVWlYcCteTWxBaHpgdnxJVDJWPCFnYilgSXVyLnVJcW85aU4uJTJKYmQ6IlhEV34rKGlGVyZE''@;'; put 'put ''PC9pKlB0ISZyRX1KU04obyF1bzZ5aGl8XmtaZD5pRTdvcSFicktWK2NTamBpWy5XL1BbVWpXUnkkY1htUjIpUG95MC8zaT9LTThkak0vWFNqTmBuISJGa0s0O2EoMlVPPVZ4Z2QrVGVPJjwjUXN6IkBhWWRSfi5CejwqZz9SLH1NWFZgNFJibXxtL0k1OCMqQDhDK3gkVHIjdkohWTQ3RmtVPWBf''@;'; put 'put ''UlhrXigmV21TSz83VTVRcT5aODZ9PlEocV00UW1seyRnKmpoMD0xVis1S2kwUSw8fkx2WF1TRiY+MDF4NlBSZnY1OXgvX35fd1J0RVh7eUVvejFoJk9rUE5lLzJYRkd3aGB1Qy5vWEc6Q1kub21obWEscmJdMUE9aDFuQkYoSDBjQXkmKk1PZE5XTmhOOmxWQjpWKW0/aDMqdkdGV3YzVWxqP0VF''@;'; put 'put ''KkJjJUE+bWMjLCF2W31eKkJ0dkZRclR3T3hyNXg3NitwRXwqJWJoOVJDMVtpU0JvUD5pYXlHUGUzeHJXQDJHclB4T3VKQjRbSUh2MHgiSUZ7MDBHMnwkaCNCWix9fXJzdVBTRFFHOTVZNzwjYkdsT0JkKiVyanQ1Ti8/X2NTOEZYJWhjMT5dTnZbKFFSSn1XZ1tJe1E0WCpfMGI0KixdbDgpSkVo''@;'; put 'put ''eEw0KXJlakhBKHZHM2U/LkddVShIJT98RCNpZ0xKWG5CbHhZOWlGVXBMa0NQa15CJilEJSE/fWZdI3xuU1pzVDEpd0gvLmZpWVBGQ3hMSUlfW0lOKFozSyY5S0guNyNibntoRG9PdGcuKSRDRDdSUW4qUnc0TV9yUkVLS1F6bVMqPi9XUiFRMmlEfFMhLnRGOF0jT0NmUUhzTVZMXyYwJl5YS0Z7''@;'; put 'put ''ZUlxYnVyV2M8JWdJd3VeKEJ4Omo/NTs8OyxROH17TzJte3ojWnc3JklFYFFWcC5EKEdlPHMuUSI9UHQ5SiFvJi5lSTxvUyhtLFdCVDdrQUk2RTwpOzVFPypkNER2SzwrOW8vPy9udSpXfFY2VUlocmYjdC9dWSUucGA6Y2A9Z0lJYkVTaUAqQXdAMy55bXV4ZHhxMUhoPXtbbHVheGR1dH4vWmVh''@;'; put 'put ''ZT5yXmxrRDExKDFKKFlhcCJWd28qKEZ8M3cmd3tJWFdmb2xaR2BvLmZZVHVFMSExXTFBUiJxVEQ5OmQ0KjBuMXRQXX5NeCl3SW1LKnlZTFRLXlE+XWZvRipsZUp2WDxLKlYySTA3KGNmY3RWOk16VWpgUFYqa3RDLCxvOit4UWdYayVzWHZ1fTFCU2JIPC8wW19lUS9fImVXQ0xucykwNHQ7RVBP''@;'; put 'put ''ZTZRaDd6Q0JwMV5WRWxQJjVzVVZmV0RjTTZFXXJ1UDRCaz1dN3k1SSF0IWlaRXBiTUZIJjdDSGNdX1gwTUN0cj9lQiFpJDEqUG8xcTk4elBKaS4weVBQQz5TO05mWn55d157UDJTV2s3OCY9QCY8dipyVDN5NnkyWyVXcV50S0h0RWplO2V1Qk83Rnh8PzRPIm9Qc1JgRF1hd09NZWEpfkIwa2cp''@;'; put 'put ''UkA+X3g1d2ZHT1luM20+cXYkfDYqJCg4alVAO3VtbUQ1Ozc/IlM+XzFfXnd4KDRjPFt6QW96bkVNMWFjIX5INXZLSExBNDBsNE99Y1lDQEppNDJVYDdPKVAlXks+Qz5oMyM7KEImWzVqOSxoV1M+UW9WMkEpWT5NeGE1WCpROmhwPXBORChIaFgiViN6c1poRG1KNSpZWyNVdF5jNGF3I19VcFpq''@;'; put 'put ''b3BDQHdwcT48P1JPP1olbj4+YVowQlM7QzgwQ3lmIVF1dmtUSmh2KUJzVSk5KjM0I2M5eGl2K341UWRjJDtSKk5MSVM/aU89LyovaipYQT1KalpxL3dbRWA6NXB9VyIvRFJ8ZDNgJCRdfH5yMVhBOCVmNGk+elc0MjNdKEhlLj8rYCM7NlZmczQyKWhqOlhWJjQiOUYqUjoqYFdzNDo5cF9aJjUw''@;'; put 'put ''e1tbaj5BVzFLKkhQYTA6MlVXQmt4OD5JWENtQmZhb2EwUF5xX0gyJC5Ga0lweiJ5cFo3bVNiZz1le3p9cVdPOkJDYXsxdj4zaHZ3SUZKOElQNSNsd3d6d2JHNzwkS0xZMS5XaWRxfjFvNFI3aUQpQ3B1dy5IbiNkWkgsS2wxSTA+PXZXfjREN0t5bUw7WDx0Z1dyTCoyQShjJj5HXXUkRipIK0ZQ''@;'; put 'put ''XzYlVH1hRysvUFdEX0w9PCZFMFU1L31NTTNZLjFqNiJHMzA5MUB6bUtBMW16a1JBZX5BP0kyWSs5U2RXP0A0ZFlsb2lMX0AoKUw5Rl01OipedSYsJX0vOi99clNMWVE7InFVOVVbSGkpYzUxMG9iSzJKNzdobit2PXtiKHBmQiEsbFc8cjhic1khYVMwZCE7UHtCe0s4P11UL2tSMFlJayElT3cs''@;'; put 'put ''JUx7WEFyeE9HV00ybmVMMU12MFlZQiJ9RSRIRn1PJnU4KHp8dCpAMXwuZXZaNHY1ZzVsWEo9ajdRWT48SVNZYmpOKlJARlBMVVQjOl11YzJLemw4QEQ2KWhZZkY2e2UmamozPWBqYWtlSnM0biNjRjVhbEJnejJIPCxLUyY3SzY2e2s4JUZuc29XZnIpXzV7QXxweGFsdzsqOyplb0NTSjlVNWNI''@;'; put 'put ''OEpqUXhLUSVzTSJoVD4/VTBBeFUjOmEsczd3ZnQ7NippXW1kZHBEKWF0bGUmISpiVTxhKjtpbFtfJmhIMVJ2Uysvb31QbjdJMyszZiRRWVokLDdLemBCTFJ1ayIuYip3WlRVakRla2o5Pig0SWM/UDFOPjVzKFNDdGlwVk1HZ3dHWUBvMGdASFpzPzptdiU0PypBY3xpN34xbllvXkl5QXl1Tn5Q''@;'; put 'put ''OV1IejpPSCIkTE5rSXwwYDZTWmxAWXFbIihFbFdYZm17NGxWLkw/eFkoXyRWO2NEMGI0KCZ1X2RxZjw8XTJnYTI0akhYJn5HdnBtdjQxd1o7NXJodil5cmI3UWA2akFNInJhSlNpe3xkO3BwJUR0VSI2KlZ3N1F2UXlCKmd+Wkp7bHQjI0BgWz1OL1ZLZ0ZATG5IWFdDSmYjXnRUOnlKMmlQfV9x''@;'; put 'put ''WTlLLzhGNWosJGcwT2BhaDV+ZXQ0UHs+KXJ5U0ZbJWZZYjMzdiJKfldoQFY1WihRVkFWKTF2YElfLz8qNlRgOX5+el1ZfXdnTFNzZ0VvZTVkfmxaNz9INEcySj96WCVsPX0hR15IMltJQ0VVJmRieCZGe1Rgem03JCg7b01xe0wsX1hLa0ZGJS5wbzpsNVVqIX55NEtSYHtSSk81KDhhI1dpLkc5''@;'; put 'put ''cUNIMmd3Ni87YzxzL2hDQG0/RVZ3OnlPb21uRzltLFpsMytrS3IjKjRaQCVqUkhQJUViM2BAQVsoPW5iUSFzW3Y1YERucVB+QikrNiJ6TiRtKXUuKF05T0wyI05NOklyZyE1Qld8WCtLWHBCa0RJbmtiMG85N0J9ejtEMy4pK0wlMmVLQEVeOihWM1VzQWZAVjhIXSpvNW5ZfixDT146bSUzU3VX''@;'; put 'put ''SlshcG8vOWBKS155V3hEbFgwWSlRKysjKDpIRTUyJSpGZkJBWV0jXzV6VlApbVg3IyM0RjNEZDNYTUB+eVBlXykuak9CSDBoIzVyOl9lWVs0VH0kNHpvIlY+Q3ZMUmlZWVhLZTBaW0Ioei4+XzdSZjErOlFHQ1gkOyEkSHIkMXxvbFV6YyRFLFB1Lmdffj4vTmI4MjFObSlPR29gWj83M2B4aCpY''@;'; put 'put ''QGc9eUVgYi8wbzRAZnsmfGswVHgpOFQ2SGVOITpBU0UjdCI6TU15dEw3dklWVmczOCltZTk+ZXYjdVsqUG8lTGxwI19heiRLZStrfEpCQkgzY3ttZEA/UiJRKVIyV1hKZ1NKaDY0JFdoQGp3Z2FiPSJGYGM2TG1dZWYuIyZGKFJUb3lwSjMlajBkPHlJTFVpPWwlcDchTTEuMkhDYk5dZHwvKU1p''@;'; put 'put ''QkErckleISQmXTkpWG8kKlc2NEtJK2ElPSlrU2MxSnQ6MllhQEEocnVdZTk4MCF8ez9GT2hhRHQxajZnRXBlPjwiKE5EOV9EZUZDNmchOmQ7el08eXlgLF0yaUJqNFphQkROd1F3WnB2RX1rQGFVNk4uVXg1Tl5VKE95TX48X3NveXBmUFJ5WUl6ZGl6eCldXXUkaC5SZ1J9NjR3K0QvTnk0JDVP''@;'; put 'put ''bjooSGc5QVpfcyNlLCE2dXx2YWpsNitpfk1BND0+fSwrMTMuK3B3d11hYlVXalddblFgX3h+PXRkMXdMazpXeUh6eHJzVCF8MlYhSTxATyZtVzZFdlpsVWFJeD5xUXN0b0wlZilES1hye2ZpSk1zXWFeJjlJVTx3UFRIImpycEt9MzI1JWF0JiN1Mm5yZWVEYkYvODF0N0xnU1RlZGpjQmxVcj9L''@;'; put 'put ''WyMwcUxfZG5NZkw2Q1hqZkclVkRQKykyOm01NHlPKTJVZGF9elghRVEzWHtRVShbTSh2MylqfXtKJmAhV1lieDB1SkQsfm1LfFNNXk10TlFfYHxgeTQ9bTBgRHAoYWAuREMkQ1syOlImQ04ze2FSZjFrXikoalpRQl8vNEtRNz1wIXUuUUN7IUc2ZUMpUWlYeSR7ImtYciNbbSlBJG15d3UuY15D''@;'; put 'put ''Ik5RNThociMmUGlCYkw8NlNgXk15fFFsSEJzMjR8LjNMIXxtWWRTdm91d3d6aDl8O25+L1BMR2FoaU0vREhkU1Q5L2dXPSVmNyxfU2o0ZjB9bkhNeEFdQnR0fk1TUX1nJGUlQFpee1lUSFk9PFNBKSlhdiV1Y113eXo2YCJuOkZnMlNwK2ElMygjakBPeDJfMmAjLiM4OXJZWTJdYHJqQ313Q3hW''@;'; put 'put ''cFV6RH1NNSFmZzg5amdESkszKWV+XikjaDwlIX4kQUtfIyNpSyJEKSYweCJSJDxvfUZQSXV3MUNhcFNnSDVvUThSezpyKFVEQmhAQD9mIjFHLFFQZFNXXjkmP3dHfWU9a20zM0E4cyYzNk1UQjkydzQiVFVpaEBld35jfS4+NSluWk1WfDVGJTk+Ny5JL1kvdU5nIlklJlRCNEVQW08/eUNoUy5s''@;'; put 'put ''MzlAKSR0P19dUilUPX11YltGYTFudVJNcXhPISZLaTBzUix1JXEhSDFUczcyd1t3ciM8TS5GSllzI08/L0w7ey9xMi5yMiNLOE5JISolImFtKCtJY1tqPng9SF9FXyQjZzhkaT5XYURzLjMuInE5ZUBgSExQPyp+b1BzTWROVUViazVGYnNbdkN3ZkU5V0pFcTk0OENIPH5MP2dpWTtMXllUTUI3''@;'; put 'put ''d3lAZyU2dCgyZHpPXkZyNGtCLF9VR0BReHRbaHxOQStDeVNWaiZvSmlmODVRWThiYCpoOXUuTHFBYVBFXnk1MVkmJjowaFdpQCZrdDM3bnZpTHNVZypDek43XzZhPnwhJT1UODZVfj1dKTxeR0ttWj9PSEg7WmYmLDBAaTFZNDdAT3FueV4xNGBCZjllR2swSlp0MXEmP3EobGVmXUNjZFMhTkU8''@;'; put 'put ''YCpdRlEzPyhbO1s5KjRyQHdzL21zNz1NKl1oLmQoKUJuNmBAVndGel8lYzlJJCxHJlFaT0JxU2xMUTp5bVR3IX4vVEFMem80cihLXWdeQi5SdXIhOl52QEhKbDppck82SD1DfWUkQzBtUHUjIlF+SEReODg5UEBHPFomZEpUQCE/cFBHTC4lYzBQOUp5ZUQ5QCI+aFVkSUJTZSFjMD5OSjdDRmNU''@;'; put 'put ''TWFtfTslYSVARD0iPnt+PGkxeW5SQjlAMTEwXy5fLm9bbD1fciIxKTUvbj4vOFIzK1J0cWZNYitxZTt6MlBdI3w1YT9Dfj5kQktWVj53SnRHVGBLRVV4Rn5JLHRubDs0V0NUSTY+VGJZJGFZXVQvN1pVVmdZKj4wYy52aigkR3pEaDomRWhQST1dUUMpb0tMQmFObDZQN3dLa2wkdWRvdT5dRnNN''@;'; put 'put ''TTdIWGFEUz47YGRlSmp+KFglRzouKnQyS3xCJnoyXWQidStkMXVsX3c6bjBVQmBZWSFEaURmdk9jOkE4VU1CJTlrNFE0Z0IrbjAvR1F7XUR3M2QwazAiS2ZMWT0uLjNxOSpTVXVVfHRhRCJMVEdmND8zL20iaSwyOSFLPElyak0+aTp1eDhSc0YrZlU8L2dFWiNVK3wmPk5CSSM3I0VeXkIxLkpO''@;'; put 'put ''PT1idmtJSjA0bWZfPFZxUEd8TzE3bjEoaFc1bH4iIlMmYDA9bCI7YkQ4MWZIVV9NZmFua2tNUnZEL3QlJXhgfShmYVRNITNmfnBCOTF5QEU5YCUhYjRSM0YvY0QpVy9pM280PElMMnNGL1VENXdPdFp1cSVJSzI1RjVoKz5kOkBlIXdeUlZPdWRaNyQ+NyV4Jj5zIU03X01jZ1YmYX45NGdPJE5T''@;'; put 'put ''R2YvY1NpeTohVkpyJnsuZzdnKn1kVGhgMHBRZ3JmZyVkUkUmZC9sXW1yUWhgR0s/V1o4OmcuSjlnT1BgcjlGYihpQjIwcmRpQFg0ImZjWGRdJSJBLllOYCRCVDg4XVVPfl9XR2p8ZjA5UkEsUURiSjg2K09EX01aMjdBZyJ8KWlxTV1VfShIe11AL3c0QF1WZkd1VXZ+LFt6bDRpS0I8d0lhaEpd''@;'; put 'put ''bDlDPCQmPjNqVTN9R2RSfiFwST8peWEhcVIhVVdIUFlFd2VNIyg0O0Q7N3QuYDM2I0ZsTSEsdnU3Zyw5KDpMZTFtQ09CdjRgK28+OykqLC42Knh2KkZUIVBkeW91Z3c/fktAJmA+Kj1KZzgiRF0yK3gkN2FzWDE6NUlrIVkrJjojOSNuX1liJXRkczxsVF0oR290fHdLJkVgfGI6TD9RSjh6OjZx''@;'; put 'put ''ZWxvKS51W299a25qZzREekAkdUEyV0YrYCxmUiNBO1ZdbiFgVzIoWl9ae0JbMDVZPHYiRFd2Lnx3RkE1WmkoIVZgZGIyT2JHSUJycDwrcVF9bi40TzxrUXhbXVRgOWZncUYoZTk6ai9UKmN5cHQqOmBRc0k5V3klKGx1T0N9ODFLSlI/ZWdKUERKSnRIRSoyQWVvd3VdalBxRW8wS0x9MHt5alNa''@;'; put 'put ''elB7ckNFcEtfOEZdWzA5MH1LQ1pVcmU4PU57JGdxL2tvZGNIZTxKcVI9KERUYjt4NkdMQzVnRz4vME1efj0/YzdaRmBsXih4T2VTXX1FMGxgXjBkJDN1bk82ZyNDMzVCVkleZzo5eGpPdFIxYmZgSVVPaEFSYz01I0JNI2xLZGZSKld5QmFGOktnJmI6fk5DfSNfW21pSTVBNGc+SD96dzI+Vl8z''@;'; put 'put ''JmZMdGBmalEiXixEfGJQPl1pMXwwZVBbYytkW3A4Mk9RYFBMKDNBMmoiL0AkI2FzWFlqaVpoR1Ymd2ZsWWUzQjhAfFU3enlYfSp3TzQ+PXNWYTYuQloieypJX109XmYjZmpDdjlSVnNJPUBeKmFuZmg0K007eWpwKS53UEFmUnJSJXhweGFIZkxFNkxGZkpHXUdVRWomI2V+ak5zQ1dzMU9Fckss''@;'; put 'put ''PHRXdHBzNSpTUzwzcUN4R3tvXThJe1d+YkYqQngudllrfWp1a2ZwekZ9MlosdSVeRyMreVgkTWlHKyY3KDV9RShtOlttenFxRH13cVFEfnZOQVVlMiVgMyF1K29sdUghZng9al5YUXc5MUJCfVVMbHJDKUJLKXRde0JKNWYuNzV0Nz19S34qYDNEb3pzZVIjUjdXd3YsRFQ9KUxefVEvbUgsJj9l''@;'; put 'put ''eGh9YEVpeFRdKiZQMHtoTEpvbV4/RW1uVWZJR085O2Y+PVNwMllfKz41KUlgLz8kZltYZEwwd2trfE41MDt3NXloUCp8R0o9VSsmdXdzbTExKUxvWyZmdWIwN19PV0ZvW197OSxiJDxCVnE6fiQxNV9nQjV1aHtDcy9oPXpnfXYkUWlHTVBUPXFqLDNEWS5nInJ1RnZ1cXdJPD4wQW88M3RkX1dT''@;'; put 'put ''fChzMlgpN2Z7ZkN7P0F7ST5FK3YjZyVAeiZ0QFNMQlo4eSkvSHFRam9ldyh1Sihja2F+NHMoLyRmclt0Zl1zPSFdbkBVezYsQ2VQNzo3dTV3WGh1Tl5xYT97Ukh9bV4ydV5wZFg6O0U1Zjd8fW97c0EiYnM0JW51P0c1KnZYait+Ql9Vazc+Ok9rZTdRLy5BI0c6VnA9Kys0TkJyL2IrVUJ3WEBy''@;'; put 'put ''d2dpTlAscTtQOH1RdFQ/R3Byci9HfTBdVWM2KHBEQztdbC9HSUtlVzI+T34kbz1AeDMlR3BGYH0qaXIqWFJYfENkWWR0R08qJmhGYFI5Nj5YbjxXLzhLWW9rJlpeJVBRKHk6UmAqPGdGbUE+ZXdveCxgam8vfUA8NmQjRWs8JCpoY3Nkc0V8TzFJdWI5XmtvXVpYakdxdk0pcVh+IztOUjN9QVF+''@;'; put 'put ''WiN3JnZXP3x8YjYsfUxkRWVYXyF3az5zck4xKmxmYTZHJlluYzsrUURbfjxXLklaRHRDKD94RikwTDQ5IU1uemR3aShEXmhFYVczfnlhJH5LTHtzNUhUKkVfRnJTS0twPlk/azVOI3heZXBlPFs9NEZFNnw7IStMVVc3Vz4sJTBDXj8/bF1zfFdZX3ljIWJ2fH5ua1lvQ3RbN1kvVFlAPy8jd1sv''@;'; put 'put ''akQrPikwQntmfFdeY3VWVURPTS8rfiJ0RmZQRjZSK1FVeTtFdH1UVV5xRUlwZG1aUDxgNUVIL2tqVFpRIkIzPFN2R3tdWWhjQT9pOzA2NjxnKj98UFdabXtHaW8mRmM4YC5nKz5COCNQJUlqaUlxNVV7dXZ3NmN6ez1HMD9WPChyQFBtQ2dOcntMfGwhXSYxS0NZZnQmcV1eWTsvLyQ8I3BVRzRz''@;'; put 'put ''LEA4dm0zRXxhRUl2KVUqY01kJW45N31PKXQ/eSY/JCp9Kmd9SlpiQWEubWMhK259aEljTCwqNTs8flZmWyJiI0JtN3ZTfixOOU92aG8kXVRTekMsMU4/PSQkdWtuMUZ3fmw2O0cpTTxHMkskQ25ldCo4fVB0M0RWPkdDLl84bl9rd2BZd0o2aHhRdHd8KUchXVBQPXxfQkJXUjM3I0dodEduNEpK''@;'; put 'put ''VjYzWHMxaGpoQCQySjcldCpMcztxNzk9emoxXkw5MmplXl1ZPHZkcCZYfn17REcqYkV5P2o2O35Xe3t+VHdqfmNGNVBLWTQ5MGBkNVpgfUNOK3hXS2MpKVNUNSYyfiV2WCl+NE9UKnwlUlFiKiQxV21NVHpyRmFyPUY0IUR7UChYL11gJjtsMkNDXzVXUy5UU14wZyMwWzdyQTt3ci52cXlKPkpF''@;'; put 'put ''UDkjVUNGXzAxSjBwRWZ0VSpxZEkyNSVVRldVN089IjdCemtwel1yS0RILn17Tix2JCJ3XXFGJUBNdGZCal1ZOT8sTnE7W0E1OjlXcGhneG5fZTFbRXgoblV5N1BqYFI1MyptMGgvLkdicDU1Lz0iODJfYTtJP2BjTk4+JVRKWEhUTVloaiUmQHkuai4sPFU1cV5kfWZZRTpaaGp8RV9LQ1sxVkBY''@;'; put 'put ''R1QyQ2VsSU4lcE40TWZOe0tpJiVaeEF+IWtGZk00UlYxUip8WzxxUnlUc2k9Pz5tQCZHLEpVaE1sSSVpIV8oZExkP0VGcnhteT1fUXtNTCVVPFJee0l5KUI1ZHdVcTgvdHFDVUAkakYxLzdFLFtlV21oOlJkeW5pPmhnZzZZL3dvfmw/V2VXImsvQnxbKEljVUs7O0QhYWBkSjdQK05CN1o+TVo2''@;'; put 'put ''KWxNdUhucWpTN3FdJlohPXBpMG1pdHcsUHtlYnBKOVg/TEVlMi5vPCNCQTFTNDx3JEBqJW5MJUlHL2c4IU05enghUkU5RS4uVSM6PWVDbTE/NXZaVXFiO2wpYSI5TC96MkV7ZVErYFE6c19kMHpXKVd0RShhfjdoXlRVeGJwe15SJU1qXz9ZNSRHXnBiK092XzN1fTB2NFd4Nl9JdVo8TyYwaVRQ''@;'; put 'put ''ZG9AZkNBXjQ4S3AqYX5Tcy54cSsuPT85elRxXz0kcXQieFJbe0JzUUtfQ0ZoSFFDLnBSKyF6ZzVGckZQWyVGWjc5MEQ9SH1KYE97VzdObXU3bEdGeWNILEJBM0N0QndNZTR0VE19XTJofUpRcV8rWU58ZzNyKSpoQEREfEhjbEwxMEozezkvWDhXKn5JcnBxNDNCU3BEUTtCbXc2PjozS0lkcWVQ''@;'; put 'put ''NXMsTFtJVF5YQXl3WkVtaUNHViVdS0JUXm1BLDdWRlVkdGMyIS4wemVFKkNebnR4aWJxfFVMMnt0XnF1NV9FKSxrNGFdUGJgQ30oeXEpI3cxd20zJE0vNVU4V2hCPiZtPW59QSR9VUFAZ2dZdlp1U3tCLlpiJXViZmphb3lRRiRWWVN5c0p2UEMiQ3Zye11kVmNaSVAzb2d1cVReVn02ZmZpU1F0''@;'; put 'put ''NUg3OVI/I09wXSh4fjhNMVM3NlFrRUBZcExqcSRoIkhKJjoySihGSVZ5Wj9SVUFMSjJrZypIQy4iayY6dWh6MWtJWHhdSGNsbVh8R3E1Jm5vZ0xocTNnUiVseSsiNH4kQ3EpYGk5QyUlIypzWj48Ny9bbSp1WDxIP2w2d1MxbFRPLC5IKTNxQ1M3LHo1WyNPQy5RQjwlNVgvOl8mbkwhVVtfNVJ4''@;'; put 'put ''UiFpW0VRITF8NjBscDg2Ozs1QjhoPVIkODt2cD5Mc1lVTjtQaWVmfk5HRFNWOmxaX0duR1hgYG49akZfPjhEMFdIUkJjM20jTXslSCF3Q18wNHh5Lk8qJGlqTyFyK25bRldkQWJtdkV1akRlT3pXfT9iJThWbjRbQH1ATWU1JEd3aik7akY6WyEiOS9oSD8+ISRFSUtUbGB8IVhzPlM+UGFMSTRI''@;'; put 'put ''S3VgWV5icU57K1o4XWRSTl1SfHgsaEYxKk0pXixiSTN+cTduImNmI3slUX5NXShWS2pMRlc8JElWfU9rcTldbnJJcEpke242OGgxdHxIe0ZXMDBTcj00SihROzxJL1V2eEg6SFoyVWJqeip7dTUvbXU7byRab0krLHhdPl5uQ31bY201UyU7TVZ5R0dtV3ljYFRGRjtURCNqcz4jOTMpMUwjV3t3''@;'; put 'put ''UCUyPzQ8QkdTMSRxdzFlIiNNJjhoeXFiPGQlRUc0cTR3NWxSPU42S2lhc0ZyN3AyTVhhdSJ5SDRBZ0QxLjkjN3U0YEtbTHx8TzUvYldQWk1YWWIlTWE8RyQmVk9lOExXNXZJZH1jW1M1Oy45bEU0cStBNDZVeltfZDdhPm9YbWJfZTxJbXg1e1lAKXkhck8ubndnfTYmfj4jRTApNj8xYCpRLHA2''@;'; put 'put ''WX19KWN2JWR0Z1V7VDJVUjg8QEBNYlhjLEl7O1BYckh3JjsidmgrSnlePERUSGNLKlJIQTdSeyEpbnNzZ2Rvan1Uej5eSzBKSmkjVzhZUTw+ejA8fSN2Zzd0VmlLd21HWjN6V0BsVGdEODw3MSlmeGw1Qk4oS3c2SUN8dDprJjRASWYrWmF+OXc1Xn5OW3pXRFRpYXowVlprTS45U0x1Rz8vI0lI''@;'; put 'put ''cCMufnUrQ1hJa3FRYnhLQCtJPms+U3BtOC5NYjQmNkhGJlt2amBudywlM0Z6S34lQjQxLCl0dmljJmVoQ31BZ3AlVyY1VU1gJmhER0tSN0BsNlJKQTQ+dW9YXTF8MjQ4TnVfYjdEUSpSSjA9QCxNMmZFTlt9X3UmVXVCOn5eYWdRSj81KCMrQlRjZ2dTYEcmNn5mMF8zOjxNeXVCLEpXQG8xd25j''@;'; put 'put ''T2dZNyJMT005fCJ6S2FvXkJ+SGs5W3VgK2hhQ3paMmk3V0lTOF84Pm9UISQoOlQqZiFoTD8jJkpPVGReSzhtRH1zfWFQYnhsUmpVT3Joc15oSEomRl55SERLWHI6S3g4dCE3a1AocTZoS0VOezEuVlVVfj1lV2xPamJxYCE6ZEdweWkzKzVddT9vUjA6dy9rcToxd1soKVY7fG0yZXU5P1RvJj4+''@;'; put 'put ''RGthJCw9JEBLRXcsKUhwRmFsRSJTRkk7dilzR3NQSn08KDgiRDhkfHtGa1Vzb0luR0lvcWx8S1AhaEZhRSt8TiElWjpOe253eT93fDVzZE1CVDUrbyxHS1hVbSNeKjVeQSVUWWJMcXM6eFpXaUooLjVHLHhTR2BrfDFJImxAejt8TyNyY2FFYz0saX1dKXVhR25xY09JWSt3cGJsXVU7WFVtNCt3''@;'; put 'put ''V0kyWHw1WkBWVW5TIyhjZjIkX1djQi8zUDVfVDpJRiRmcHdOInpXcTd3SW99U0BZX0EpPXBpN3Y/OlhRLnZyInw2a0xDOSFeI3pkYlFWbzxPdEw4djVIK0g+elBTcnBpbkBRQGY3Q159PGs8OU1WaEciXnM9PlovJm8xWUxEPFAyTWFOLHJ6eVN4Zno1dm81SjBjOjpgJnlILzUuVzd6VEduOiZJ''@;'; put 'put ''SzdZZGJjQHwlenppLyU/eGY9e1MxT1pkL0c3U0taZDZ9XVZmUEl0ejhMe1J9Z1R8QT5jXkhnXjR3Nk9nWU1XTDJkR05OUnJPJXZoW1dTZG1idC5zS1txSEpZSnY+K14iWUtPQGR2STs7IlN6cXMuI1EwSXxZbCs1NDUwXkJXVl9XKWIqajd3end9JH15JXRffEVHXipFTEM0bjxweGMqYlpBZ2hm''@;'; put 'put ''UyF1S0ZhWSM7SUt9Kl5LNTQ8UGJqNl0/Sl9xbnxbPUVyJS9nQ0U/OylLZjdkal0uWGkobVtDLGl7dWVgXmYhIjYqaGk4VkBrey9TVXl6LHFUcysuYXdyQkxxT0lCakJeNnt4dV5OKmh7LCtUJl53dGZ4UGpBUkg2NHJwQUM4bl56X2dTXzdhW29keWZXRWRVTF48ZWkkNjk0Wi8oclJveSl4MUBH''@;'; put 'put ''WWIrMk40dyt6Vz9TZ35Xaix7TFQpQTpUSDJEPmk5Nl02XlA2RUxfRjIvMS8sRHhtTyReP2ohNDVyfUBmRm9adENYcip4dH41ckJlU043ZU1bWTh0SV0hQ08zeTI4Y2VfQDFHTF10LnI8MGg+fDVPVCkwZlk7RXYzNXo4SSJSelJXbUlJVXR0TSZUL3h+LkhrelZ4SURydFl3Wzp1VkdiI0p8RUgv''@;'; put 'put ''ayVzc1VhRStwU0xQISErWiZ1bj55blZfU3YpdGFHOjojelFifE5EaSYlZ0omVjI1PCNtPHVuT1VlUT0qRVpfYXRqanIodkRVZDI9VklYQChaPiF3UjRdOnRUb3NSalRZdE9DbHZTYW5OfEs9cW59fmhuWmNiZENtSigiNzw3L2k6cSpQKVpfTDs8PF5HbUVfYjd9UyM2JXg+Nmd+LGdMKUtXMkhi''@;'; put 'put ''djkiMG0uPEVMJG5hJktYNV9bN2w0cVA2I1sxPjRCT30oIUdVV0czeTZ0aEBjeik7UV5mJWBJbGxlWyVFU1BGdTJ4SzJ2NSNZJXBuVjIxYmNvUSwvVEpteVdVQFdEblI2TF12U3I/InApZzJPSE5rPV9iYDJIL3UufTlvQioxLE04QS4iSjR7MH12a3I5d0kuODZEK1JYO1RQOH4sX1tCfS9hdXMv''@;'; put 'put ''fmtzJCk/K0R2NEJ3dztZfCxbOy8sRkFeYzgvRVE5IT4mODVdcC4zLjh+UTlHZ08+Pl1OPW5KeHtfTUNjLE1KfHRUZlcoQz07VWszfD5Gek80JVglTWdDaTVsR3goK2MpXU4oQnEoP30kdnArSS9TUU8zNlduOjdVOD1vIkMoeF1Iay9YPnFWfTBYY15teVdUUkExPU1eMSs2VzRhcSpsOFJabyZt''@;'; put 'put ''a2NJMi4rcmFUNDQjazMlOkN1Ll5ke0skQ1BJN3ttfC5HfDM3ZWF5XSlJL2o0bmsqfSpsWTI1Ynd7QmtzKWx5dkdxfW9JQkUmPkk7TGZ8Vl83aF1bW0ckJTcmQGVQSXI4RWk0bFgwPmcyPEtBZ2x7fjlCVylPQiRfLihMZ3JZOFdKcyk6YlFfUlBMe1oxYihqKiFVVi9QaWBsPmJYa2BtQiZ7ZzU7''@;'; put 'put ''ZyFqXUlAODhmJmcuUzx+fF01Q2I9T29PVEBDaipsPWB2XT0uX0RCcS8oOFlELkVQOzVaU3RZNVdncFlkaSRHUzFnLEwveU5UN2o1N2VEbyljSDBLb2pQMmR7RklBLmooPTs1SkJjNCwpY2JzSTckcnl3LmshdDJhRjwwZUc8WDooOENQTnFWNzdxaSkucHFDYEp6SEhmfEw3UTNrIyw2OnN0RDhN''@;'; put 'put ''QmZ9aigmKU9tRmYrVTtfI3s0SDQ/LF5GPSlsaUBYTGZjaEtVYVBhPEFHQCo0KHl2NH5DZjIuQktAfElfZDdqND0yb2M6K0BoSz17UGYlfWM2cl0icnRxezRvOEBseFpQOH5NcGxlelQ9XmVJOHtLcGVmfkkzVEthdSMwfUBgLmNIUixPZnUhS15FXzlIPX5kbEheRnA7VmsyNk1menIje1k9L240''@;'; put 'put ''QFtOMENDaT05Ri43Xj92IzdZa0RbYkRqbjIsaHQ/Sys3QzBWYkMofD9zRCN0RzBlU3dVQ2hafHxYSGQhUER0VW84RmNYfUpOaitINVZCbz5qJDZxJkJgfUgjSTNbI2syVi9vYCZePTpURHY+Q0NLeGYxbGcmcXlCRk49O0l+bDlVVDw2WU47NFdAeCM5OlEhYjkrPVsrNHp0aDJQJTYxd3Y7TXZo''@;'; put 'put ''bkFIVDR3UkNlP2skXX57Vno9YDd4TCZPRSo1YGQkfUF7KSE/anNTISJrR0FHMU1TYnhaVSY7XlBOVT1odkxkSDN2NX1paTNpQ3NeUmxxdjU3amsiV301P0tuI3dqbDh2cl1vRHE2M0U7KltZUzlKcG4oJTovNGh9cWRiMjFiU0hMOGZkTW52KmNDfjhNPltiJDYzcU1VImhIJUgiP1VtIVVyW2Jy''@;'; put 'put ''X30xYkRsLDFkKmprTUkkUVlJSGcyXitpSVtYSHVnZTNBSE99NWlMPTMrLChbeUIqSH1iIjVBMlpCY3RLU2N6KC5ZOExAdmRLSWpjeUQyQS48K1FGRlpROTMmVmwle1N2VH4pUzB9LzY3Nj96OmVzcCpGeXMjRHgmJCVkR2B1OkRhTGFVfltNbCN1ND5ONVN8cUFwN3A/Iig+Y05yNzdYa0pELmdL''@;'; put 'put ''VEtqPERxWGxkNHFUSnVed1krdzZOI21QTEBxSFttTF5WZ2UsdWQrInJZT1JaTlNhQDRQYDZKMFYhRi5NclRjRWNZWkdYfVlWMGtjNShMNFlOc2EsKmxXfF0lcyksMTIuU2JKQmJbPTlZTzRVMkgxSlYzM31hUzR9NWpkcGRQV089P1s/KHdXU3gqTD5PeW9UIW5ePDR7cjd8dGVTO3EqaTlAO0U6''@;'; put 'put ''THA7dU1SMzJSazMlanplfWd1bi5vW3N2eVIvNStPQHFrWzZhQ0hfPzdkMDtkfjp5WUJ9Nz9geHZSNUdnMVYzQ0olZE4xJF9pVS9fMGBwUyN0LHUuYCEmNiZOezBQOEBuI21CMks+cH5lY1tzdFFBaWRDUFZ3KV9AX0IwSCg8anIoR04pMzpfUismT2pveV5rXVdEUzJTZVAqXWRNXWQ4RnMuP1ZB''@;'; put 'put ''cnsqVnA2QzN3M2xRUl5YVypYcXA1SikmKkhONFFaZWd3V0JmVzlOaWhuNHQmdjxMeT5+MylKaSI3WiM7YjNWIn4lZ1sxWC9CJkEmQUl6fiM8PTdXZjU2VEYyTERecztZXl8qfClqZFUodWswPkN0VUZhMW9jfj5JWSNOOWRybGhmcm50cHNFM1E4N0gsKURUTEs1RWB8dF9tenUobE9Ua0k/V0xl''@;'; put 'put ''QkhuIjQvdldQOHUxe1dxRmA6ZDozVHV+JjdWcWlvfjNCSm1EYDEybmwyVnIyOGBHYlZLb0d+ZEBeTncobT1EZWdjQW9rTmdITzZwVGBle0pIfEchV2N3dV11e0hVcyNFJlg3YzI6MG09N3k1el4hdXcscVp8N0tnLzZjNkkrQTtLaDNaXVRYQGlaTCpwTFdlPCZBKVRRXnJMNWgpWjpQXVJ0WDJz''@;'; put 'put ''OV1hPihJOERZSCZkdDNJM0N7NTY2cFUiUipoLmdEb15ocWRNSTV4QWdpW0NvITI8aD9vdHM/blRaMH17SlVFKDwyYmgiUXMrUTksPV5oYld8LDlVVCkqNH1MJFhSOWBDXSJYOyVnXlFiczcvVmhWTV1BeiReR1VgR25+cypZY3s9PWxVfS8mc1VvPzxhWlNLUXU1SFEqbXlkXTZlVnxkRDs+XzIr''@;'; put 'put ''NFZSJC5EKndBWTFhMUJwT0Q8cSZII2ZuQT1YVl5FXj46RXV3MD1sKz1TOyV+Lkc+b3JRSXxoejFreVc9d2d1dF5eeTZLPHApPkJgb2tnNj5kL08rR2Y7bWdrMHxXTWxvWCozU3d8VkNvNl0kJDp8Zio5JTk2eDtCU2kqS0N2ZT42ZWJYWCJNVyJCSCh7W3Z0YSQyKUF3LnBJITtDPkQxMz53WkJG''@;'; put 'put ''TH5MIVNIZi86aV9hJnpvTXgoXSJEeSlmM3FbYHBlcCV+KksyOE9GYGhuYmt0d1MoMD9XOUlNZ19PZ2R2QlBbbT0+b3JITmZDVG18dTskdVpfTltwSiVSVDE4al5HNU5aVWdhU11Dc2oyO3dFc0dJQjxFLmJwX3EjN3trTlkkUXBfezNxcn1VYFIqNyJkQmhxNU5NLksyR30oXVcldyt+NTJxZFl2''@;'; put 'put ''Vn1LRkt4K25QRDA+YHJ9QmRtOyowZ2pAZXU3S3BxMyZkJn5DI3s4M3hjJm0vJGRLNDNjVEhZTilsW2tCS15vSFY9ekl4fXgsQER7dEszKGQiRUdFWG1lOCVWMm9HQytAbm5KMjllZ1NMa1tde1dxOENRXypGX3xzQ0g8SDRne2tEQV1ldHZDQU4raW02X2d7JEtOYkRPZ29gLFdDRk9nKWZgekha''@;'; put 'put ''MVRMRGRVenA6eF0+XloqdmlSc2ltPFBmXmFCanpbdVZdUFBvKT4rT3JHTVB4e3s7JHp8YnssNjF+WWppdzVzc0RMOHtrZTB7dm04TyxbTCJRX3A4e1lvUmB9XVhPS2FQTVI0KVBieDR0d11eTmAkfjxWXlUmRkQjJnhZI0tMPm4xbDN7e3x2VmNvNUp+T1UiVTQlfiVtTTk4KlkyPVoxW2ovLDEp''@;'; put 'put ''bWU7aiI6ZnBNY2EySkZpbTxfSTJDZV1ie05aOTdFKFgiZWQ4Sjk5KTslTk83I3ZseFpGL2FCLmtHZk52JWU4ZiE9Jkh1IUY2WVRpSGRVKWtVZDoubHcsUHA5cWY4UUJXQVBMbVtUIyI1QyJ1YSY5eT9YaTErN2Uzc0V+NGxkWXI/UnlfRlgvNlI4e1MrVkAzKlVgO1s+bTRpNzV4IzBGbk5EKVNy''@;'; put 'put ''WFJQVE5EMzoqKjYlL1tJYnlEcz5uMSsmOVgpSGpTLyNXZFF9P15jc35IUjZoPntWIytkPF1VcDFaRVlDPWJETC5tQ0lDODo2YjhpY3BjL3Q1YExKSmxpMiZpTzVUJiFZZC5jbDMhWXNzekkodnA4fDYoWmc1WklgNV9HPV9+IXV0T3c/cjEwLz8qeF5jKFdFZEs/UnVBeH5jVEUwLCh3NlJiTEo6''@;'; put 'put ''OjUjSnFyTUdPQHQqMDt4TSIlKjgmNEwxR3IlS2suNTRObUtlYHNULmQ1TC5GPUlOOmJ0KlVbNTxBIn1ZdE8jMHQpVUhkZiVPQkNNb0wlOFtkbTNhRzFsYG8lYksrZG0xIz9weXR+eFVrPGZmR2UpT2h+d3cxQDF0fiVwQDVYd3F1cUxzfERNRF92ZlI/Nz1IYWcuNE1pVmlRbU1Te0RrcVRnWjQ3''@;'; put 'put ''T3g6Nn5eezJ9d01fNC9MSnRdKzY2SHVxZX0+JWUmKmpWO0hNaWxpcFNwdXVqJE1NU1dPZnxeTSNDa25MR0QuayswSUdeaUt1cE9NQzVSNnMzZlJJSzssMEVXfT1Ma3JmMl9XX3d5Z11HWVEpJnEwOiJNKWFwaCh1bSo1TSZdUUI3a25hRUhDNGNQJENPO2g3Yy9eOnJpN0RkaGh7eTA3ZWV0Vm0o''@;'; put 'put ''aUo2MS5dTkRYdjB2XkUlZyFHbW15Q0ZvWzlXc2VRSFJLRWcvRTRzVD9YfXkid1V3UmMpQlFGTWpLSGAuQSVeIzhGV2BfT3lSVDJESmhtN15aJF8oPHBkXjh+YytkRDQrdG8iY2x+RlpaTWRDa1c2aV5xTT5YVUd6Q0V1NlNNWUVCVV0vSyM4REB8eF47IXQ5e2RbdjVjPypRYS4maEU/K1BVa1B1''@;'; put 'put ''RiV+OEJrZ1habChyTHJabntKdzlSYyJyIURsLmpwLD9DS2ghKHFRViF7YV9gIj45bll6Sk4lOGpmJF1QR2JXNUU6XW5tJD9qUlVmTDIwQmtCL2JjTDY2T2dAUnQ5X2o6aUdjNlNgUlB4VGE9NGZIUV90Pm8udFJlbUw3OiwyMzdNQShFVlFzQ0dPPl0+MzwufkwzMjFeO1dbSVBlXl5+fmpuS2Vi''@;'; put 'put ''eUlZOVg4Im5MZn1jTWo3T0x0UElIfTlrJUZUZ20yMnlzeEhrQSlLOnNAa1QqcyEyJmVUMXFtSl81OTJ+V0JSSUAuO00ja09DX1gqJDZiRmB5fF1GJWwkdyM5OXxucXQjMUw3Ty42Xml8JFlNVE1EenRZVGwhd0Y7VnRkMilhdVkxKipmNSpJVkViL0RxUkApdUtZbiE1SjBpOGhDOyM8L2VFXlB0''@;'; put 'put ''ZFB9ZXhybmhzU0Y+UiR7fHpfXlUxfVdhQHdXRWVMQDQ6byYhP0BReFZnISJ9UENNUTMzbkN1KEtCPU1mQzRSY1RfYWVVNXc3L1d4JiZabVVWTCo+aFtGOWVgbFF3K2pQOEFXclUjQC9TWCwzSCl+Rl0rJTg8KyRqY0pAfTQuOUV9WlB4KSF+cEV1dXhrOURXOTsvJUsuVT89UjFtfW1XUDNqeDgy''@;'; put 'put ''TE5iPHZ8NFBiZEBIWXNjaH1uNnlJMUQjTSQ1I3ZkLlI6Z3NdenkwUDFOZFJxMmJQamxIP1ZzR1RYU0deT0pqbyg2aThaLiopTEZAcEMvaWpzKWZTSzgrdV19dXg1Qi9PV2UjZDRLWkkwbmUhJFhWV1ZbLiFINkdKQW82aylORVp0ZkhOOHUmbi4/V1ZleW5QSGs0YC5eMSR2S0F1aGV4fkAuW3NK''@;'; put 'put ''XmdsO0JvdU1XKn1xRDdaUl53Y0ZWeyslU3wjXk45QHE+cU5JfFdecVVnaDZOLHhmXTE4Q2JuaikpIX55PGRRd3VpTz1zQk1LRUpNQjI9dnR2PS97TnN9KiFXITpZJEZubl5eZ0U0JktuX2xudVBKIkpETzdnWU4rWkY9cWsjLy5+ZFFIR3diIk4xUmtrdykiXTVyM1peb1FnY1pzUCI1cU9iMGxU''@;'; put 'put ''SWhjaHJuVkZ9ZTg/YCxBeGN3PG5RP0JgMnMySndvMl1fRUs6fSVuSHlqfSUsbyl0QFBse2V3WipTPjhSbTd6QiZWe0NucFl6WiMhJiFVMXUiV0tvY09eR2F6UXZ3K1s0TjwjUVVSQFdmN1tAcUcuSE1MI2NRWV5HI0RmZHJhbXF5Sk9XVntrSmdHPngjbk1xeSJdYUJRfnR7Ni4qKlJCb007eH0h''@;'; put 'put ''Yn09cX5tcnQ5PC5IdlhpbDM1STNeOmR0czBHIkhjYnhlQkhOdzcrLigsT0JnfiteVV9OUGt6M0FgT259M1dmIUJgR1JfUWRDOHFJYjtZRFI4JiNzNnlxcF1tYTBLX3JGOFZ1Z2B3PSg2XWZPaEB+eDN5KkkvQ3g+V3hxdz9pZGVUUSRiMnN7eEp3dzFbNG1ZX3w7UWRNLCgkdCR1NU9jSVNDSGB8''@;'; put 'put ''SFR+dDIxKEVoVEo/a1peRE1hZko1IWFVdUJlfEkuST4zTDFLe0t0VSJhdnY0SjdCJW9VaWZQfGltYlh2dHNGfkAwNklWPntQMUVPdkdCRkAzSjd7VmRuPjs+UT9wLGZwQm87Km5yKjwwWWs1OFdpSEtmcFs6fWlAXVF5ND9VfHBRVllaZn44OysmQFNEWWFiL1FXakJ6OnordWloclk8O0ouIkg6''@;'; put 'put ''OGB4IzBmcE5YQ1t5ajMxT29TVkEqdSMlRXxNfk15TSY2UT1Na3wyTjYmPzxHJj5aMzkuMHp5VE1tZXZnMHRNYk1jYSJDIW9XSUNxYENII301dzZQS3wqOTA6JnV6djNWTHFzJW1AQGt5R3Q3U35fWkJ4KX1+TlV1KkZXQm8qfSNERikkZkQmenA1N1UlKSNQdExSPERmQCgqOXUjU25JPzxGJDc3''@;'; put 'put ''fVsuaD5KZy4vIVomX0p6WzBmNm53R1o6MCFKI35qKzxmUV5NQzBPQk0xSCJ+M18/PWJIUzFANThGM0siLHYmbWFRbDAvRWh8WDB9PkczeksuWltYKXVTeygiQWdqTlNzQjxYPClpYEAwR0EhTlg0P1RTWEc+Inw0YnpYOFVvPnB3e05UczBrNWdwZ3t4NF0yal5DMj5wUy82R2t6VGxrLyZsfkNN''@;'; put 'put ''flp+fjFvU0x6NjBtWToqaWw/N2tzImAmPTs1aTIjelVdbEtbKG8pIXF8dGdefiRoc0R3VSIuUGtrXT9FaUlLJF1ebTVvUSo1JnVDZzYxZX1HWT8mNStzbVMrPHI4W2NhVzZOXj8+S04xYGVuSH5AdUBELHFnJT5CI0hzKWRRX21pKkFKVzxkIjs5MlswSF92QSN4b3YhcjxEKit9STk4LHVEJDlV''@;'; put 'put ''QGBDR1NgRT8yV1Mvc31mWVREZm09PyxAY04uZl4hUSNSdGdOJVdTKmNXeSV0WCtuWCxtYT88eSZFfTdPYEB4YigyOztCKVRYYmYxTEF5JEBiSHh2IVtTO3dWVmJmfE4maWVNIko0V3NJaiJtdD8kS0FhekJgaHw9PTg/cTpJK3V8amR9VFN5NkR3Nk9yQXMlTEJ7KE5wYy5vOTNuKj9JKEdNLHo+''@;'; put 'put ''TkgrOFFHaH47MlR7MXpwSn42bikhaE07NGRIQzlfL1hRZX0xcjJMSWgjcUVQWClXc3FiN004YnIxUSMpUElrQW5bPS4xO0ZYfVl2VVFNYyElMig9KzIkIW8mXVI2OlgwJT1iVlhUYnxkSTA+aDFiIyIiVnx7YkZwKj9hQVlYYCgvTjRXRFRlc1M9WCUrIlBDNUxDb18qdGAlKkI8cz4rQzEpQHcl''@;'; put 'put ''LG9iYlBiM0xeJjBSYVdhX21dPn1XKngsZWV7QSNPPCI9eSNTWHJmRjUwPzZjOyRkd2NkZihBc2FOVFBOaEREL0svfmMsJmBxRlFyJHF0bkBNMlEvTnhVellvaj82XTleZ1M9el0/XXoke2ZFI0hnOlNjb3NJOTEzamMoZjB4Wjl6TFsxSjF7N0NES3JueWlCfCw8eHVYOH18PmZ8LGN5d0UkYU1S''@;'; put 'put ''LjhZSnlUOj9Fd3hqKW5xTWd+cX5JeiV8bTFud11NQFl6cU4hfWk6UXdNdm1RU34qZl1gflJhVm1sSDwwYls0QikzV2NRcl5vUGZqLFhJYWNVeU1mYFFyIlB9ZV1nNUZ+dFZYez8waSs8NCtYbmM0blVRdXJ7NEJXUlk0Z0BiNFtnSk1+YEw6ZWUpclE6W3VBeklAKFFlUDF8WHkzcl1ILylZMmdn''@;'; put 'put ''L19LMlk+YDVXYSMvOyZVU3B6Vjh6T2V3fCtnfUhvKllXVl4+Z2pmLEFvRWciJm1oOz5CdSRXRFQoSTMxMmJyRlFkO1QvYXttV24scDNlTkZtb3NJdF4jTS9NcTQvMCQ7YFAwTFd3WkhuZiVDQTYjRlNLR3I+P31bPDBpJmZKeThkTmN7OjJMTGAuI059SV4xTDRrdlAxOH09T0J6OWgqbX1qUzE7''@;'; put 'put ''WUE7QDBFOF1uUHBIX2J+QCQzUi56IjYrKCR0cyMmPW5CMGhaSlFOI0w9LG86QSE8c2BaMXdTbChQV2tDOSQ5dj80JUNjN2BBOk01UysjMlYrPkRQOn5gJU00QTQ0TktpTWgjK2dnNW1uamxFJGRrYntOKFNDWCYoY2tbKlcoczEhNyUmVWMoOV8sIXE8YipBMEtnT28+Q3k1aSkySywrbXh1MDk/''@;'; put 'put ''QFdCZUFEZXhRQEN+OiVtVi4zSTxpVFFZZUpCIXsoOn1nTVA3WTxLTmxsUGZ1LDdOdDZeR0U4PmlqaW9MIilrN3opO1RZNVJNTSE3c2whI0dXWF1WJX5jT3l9YnNQIy8oZCtxPVJfKiNqPTRHKmRTOCFnLlYwMUxTOXlYRmpYQjssent2YUYlRmRHaUU6b3g8LCE7N2A7YGtNd3U5UmNKYVBvJTtS''@;'; put 'put ''N2RSW1BEbnJIZjNEd0puTllkbXsmSiRiYXttU0YqQ0opME8raltqOUY4enhCO2UvMDVUWDVbflFLIms/Z3BkOmV7cSp0a2dMeH1HNVUxK3N0cVtJYSVdQ15OSGE1VV9pSTlpVVlHcC4xR0pKLi5tLmxiU15+UWZXPWJTamZEKXIrPCNXMWIhZUsvcy5JXiNddUR+fGBBRFg5OzEjeSVOYltpIkFj''@;'; put 'put ''PHltVyxLMnEjLyxJN2I5fFAyQ0RbfTVzbl5DN3lrYCpFclt2eiNtZTpoWDAyT2RmRC81aFkidD5OMWJyWXpKbi5IbT8yXUZDdE5sV2A0e1l0Pz4rXyYkNEp1UjhpVGxoe247b19ZenE+M1ZUV1dDK3IqSCwpTWdOeDF5Zlt2bGRab1AodCZORk5XZl1PNWJISDRGTGpEdzNOXXlyPW1ESCo6XkA+''@;'; put 'put ''fm1VUVs2UFZQbW99Tjh+WzpkI098bHlUa3tTJldFb3RDcjE8VTs8RFBLZGRCQyk5XmZ1Tm9JTFVZNlZzK19fLyRGOUk+dHlJUW5EXSVDOkg5dkM0PXlUMytLNn1uYDZYUGpTTlpwNHplZUZCejNTP3FDZGpVdWdEcDtoRk1kVjFdL3JgXzdoQlF7NzYmbWMkR1lDT3FCfEVQMENFWCVlP2ZVLntF''@;'; put 'put ''KHNOTCtkbEZqKVE7VnMoSG1HQjg2b1tkfDwlXmMzYClsZGsrfmZXZndOKDB8SkBbOi91SnFKLmkmSmgwfCsyL1E/I3d4WyokQ2JtYCk8V1Z0YCJxVF4iZ2Q3Z0pIUW9NWF9YXjouU3cybSUldVtlbCk7PFBzfUphfWVVOHBlfGpdUX5oVTRwYSR7fHhvdTU+a3RWezF1SDkmdnl7KzozIW99eEgy''@;'; put 'put ''KGBnOEssQ0JMOnBQW1IqNWs5VGczSkl6RF9Wd3Z+KikiekZ2elU1XkteQjZMSisjM3h1ZlhrNkQ+JkdZWH4/MyklfEdIQEwvN1F0OVNHTChCcntkZ29gJlk7bmdObVdBZGwqLi41QGNkeWFqfTxOdkVYazU3VUJpZVFre0tlSW9STCF2WHhIYUIhV2kwXzR5OWRydTMqMHJXQ0sxP2JMTF9TbGkz''@;'; put 'put ''SXdafEJvfEk1engzWWVLaldpQ11nSiVWWU51cT5qSTYrPTx8NlNwOk9GRD4/fnhvfWRUYTdCYDt3JVFpJHclOyF7OzMxaGZ4JmNtYX5HbXw0KCN4aDZVQXhYVkVwWUU5RDI5Pk1OVlQycmRGSGx3bnM6Kl5yNWQ6QE1qN3lSOXE1WDZhLDFIVDhsS0EuOigwVWZ2ZzV3emxFcTAxVHZxJXx8WmVf''@;'; put 'put ''Im1ENTMjZnU2WX4vXzFDXyVYcktKT2pKVHpEcFhCNTVPcU5WMCojWWZrV1VRVWpeOnlmMS9JOyFDX217LnZ3eTFsSDUhQDN4UmxdazpGQkIjZltqaXhWeC4xd21rJHE+cEVHflkuRCRJJiZyWE5WXzduO21DKEtaWVtuSk9RbU06b0FQLGRVQWlOTmp3OCEqOEYie01Ebl0mL2lLMjYlUCh+ezY8''@;'; put 'put ''TUcpOX0/Xm19UkNnUmpdUTtId2k3c1Q/U1lCVGkjOlEqNnRlWCwiKVRnNyE7Omg1ajdYLl88TWBmNEBUYEpRaSw1YTtxP0h1RGAmRjpbS0MhWjIqQ051Sz4wNmtzcDtrV2NOJTVJU295Q0FyTl5CJExVL3M/bEFCTT8zOk5EdEYmQTltPF4+LiVbbDpEQzB6d0ciKWlUXnU2V2x0aFA1WUhiM1Vz''@;'; put 'put ''RUo9VWtwYWUuQCtfazEpfVB9RlZYQFhzKEV9d3RIbnNYP2NkYiR8W05VJjtkW1kjWiksM3k4Qiw5QGZfcE8pYTx1Zl40dCJBPzlbPWxoYXJqRio6SCs6ITtCcT0mZ1Zucj1HTnpiTV80bmlSeE5pT3dxKGB6fWJILHAzeFVdQVBgcjBoSkQkYGt7bklkYnApbGpaS1tPfWA3YWZ8X05waCg4Wncy''@;'; put 'put ''V2lhKVsqL1RxdldJekRlZCQkJVsvTSIvKGdHN2Mrb0U9WS80WXEwVX5QKkw7NUxBaCNjPjssT2Jbb2NsNzBrOkUxb0o8KSNUKFs7OHkpVCV9KnI0VmZmW2VIS1orVFREND09YnFiMzp1N2ltcUE6MUVMdkVTOD1mUDg9MT8zcmxWR1YleDZ1RD8uXnZHYSgscHdwPG5WfHlwVEsyMnhAVDErZChE''@;'; put 'put ''ZmA1aDF5Zj1AR1JZdV1CZEBJWVpAezJdX34veUBBPWNmZlszK2BISzU4Pk9edTQlUThqU3ZIeiE/TGlDYX1CWCV6RGYzT3JyNiFfbzRRaWJtVCxiR11HNUcoOn0jW1tEa2ZbMFNYMm4lc3x8ZkpnfDVNOHtMS3VNQ29obzA9WSVlR1VsZ3dVeEJjWj1JNzBqOFZbUytvXXxpSmFmNXdhbzVdPyQ7''@;'; put 'put ''JjVSJD9SQiUpfDIwanduPD8vam1EJHxkIXJFJm9heXNOTGFVMWR7bmRTczFpfjwmOFs+fjpYbEZ8UUw0WEc1a0VuaytVSG43IyZ7bXVufkVpJD04N3VCZFNPeyF6SGkkPm9EUUx8Jk8mSEBQLCtXMGsqJHApOFpYUldFbHlFKTk/VXJ1e0NZfFtzV0xhTUEhRk9jZTJ4LHklOUtNRCw7ZjRbImAr''@;'; put 'put ''eVVeJVpMamU4dG5POV06R2src1Z8dmBMTXkxK05rPXg6SiM3JlpdSmhXLmtsQi96XnpJVTo1IlUqJTkua05rXnhITkAhaCEsWjZWZER1Y3UsUntjWHRxKXc9OVpkcEt2dEg7dkIufkZJWFJAIk5WLH0mTG88LEB3b1hlNTNXeT47XV9pbEVhWiF0bEw/WXchRmAiLDs8fipGYCkzTUxIdDBrZS4w''@;'; put 'put ''NFs+fkc8b1dvd1g3amdOISViPEw8N1JOay5NcylrRE1abzVgUD4mei58XS91NCMoVmQvSmxbNEQ/SyVOb01BRCYpP3FDZipwKnRjdypbNzMkcG11T2wxJChdXU4lI1N8Z0F8VDMwIkpubldlbVFMaSlCSkRNW2w2OVJ7UiJhVCRFe04uflIvNkwlb25aK11kXzIpPzQ0ajFmWlE8bHpDa0UhREco''@;'; put 'put ''ckpAeHhSRnVZXTB1IWpQPjhyYEZULz5nQmNRXXg2aV9GXXpMbmJLKlJxQks6OHEhRnZVX1RhVlRRNzA+c0JUJldgRlUwZSZDcHI2Qj59RWghYkBTK3JHJnkyRSVQRzBFMzdRezQsKVBwdm4xT0dmei58YlsuMmMyd0ZmLEhFWjlEIjs4JE9oKip5P1gvJl91WCl0P2BvWyQkR29GXiUzWD8waT8i''@;'; put 'put ''cX5eSFB9OVM1cDVyOkB6YEFqKXFfMndua2Jyd3pkSlImN35OX0pHPkk0X1k/c0N+KmdON1cxdyo5QjJGdz4oVTk9TEBSeXpYLnh+RX16VVBeYThQZSwhcGxfQns7QVVJLHk4UF1vPnxqaFAlYGU5VHZZVE0zPWB5XVAmUH1hS2Rwa3wrZWU1Vy92aiVFJn0rODdPRzQiO3JmPXErMj5xVGo9a35t''@;'; put 'put ''TCsrZmZqUz4raWZAW3NRI1hfI0A2az1vZXdFS3wlQz9WIkNzK3NvYDg4cjhGekQ7T3JMfGVqfGdDUUMicl1Le3JMQl94KClmKTomIUJjVDVgRzJtMyhWe1FCVzQmNVIjRl1iSWVrPVV3VXsoWmN8aiFyPHUyeTNMO2ppMXouY0hBNkRJTXE2b3Y3QmlMUE1lUkQ1JXsqRTZUflFfem5nJWtlUzUs''@;'; put 'put ''OXZCM1FvPDYrKVEjXTUqQG9rVyFgRlZ5bFQ7O3lFNmN0JG5mbkc3dHEsK3ZPRD5pZXQ3OXB2WU58W0gpImIve0coOnBEP2ZjUlE9c05mbklMZyhna20xRVFVem9VWjNhPWBdK0RGTnVTWiJgM3Neem4md0RWSlYmWjBbZ3xOUXlhWm50Y2RgfT8mSjV9SkVDaEk/TXtPXT8+PkpeVmNySFpCJkEm''@;'; put 'put ''QGRaUWYkdVBXeV5hOTxJcW9mYVluaGF6RjdlImcsWSh3ailQcnZEPztLP2tgL3VBKl1Lay85S1F6O194NlplKGc/Z0haam9pNnwsQTxEVXs+aCQ1NmtnP01FdU9SIkMwV2N4S3BxQERpeVEiNlJLYE1XQHw2KjRBJHBaVHQsKHkyfDVkenhDbUAxbSN+RXYhdVVZb0BoJFROMip3S00kO2BWRFVy''@;'; put 'put ''ITdRJmAsNDUjPTJ9USJKcVhyeDZ9bio5eyQhezM9USR9KSJZRFMjTUhwYEc/OF1ZSFsvMDRlM3skWyI1N1hrQEY9S2dgezdZMGBuTy5NamVyZkVvd0R0YldXeUshLCJ4WF9Waz0qMENeQip8TTtNRC4pVGpabUMhN0leVk06aT00YEQwQF17RSROKF5oTl9UfFN4KmlYcDFbO05RdF95UkArb3tY''@;'; put 'put ''VHk8eE9LXy5+NVg8JThDdXZbKWd3cWBoakp2az9meVp9MGA8Wz1TLGBSRmN9I15BI2ZDcigsOSNFK09uWS5JMllHWihqaUJaNyp5YFVRMXFZWU1gMGp7XyIlNmVVd2NSKzVyPUUwVV98Z0pKcjBhVFhDZHdVWmUrUW47S2ZhWHl5X3RiM2tXenlLRUlaJXEvdG5wPGxyQHleWW17WDhePVY6RXhI''@;'; put 'put ''RDhsQCFCbTU1M3tFIXpjOilrMWgsVWolMUddPFB+WU91bWt5OWEkWDllSihIY2lFa3M8In1KS1oxRGhVN0RVZi5HISh5SEVwTjBDVSJUbnJxME9EMjArIV1ncTdJeVkwQU5HPzMkeEAsSW1bVl4wVHpNUTIhVzRWMD86JXlyKytTL3RyLmRITysmYF8+eHw/cTdNJnRLUDR8Q19BLEptYnsjLiNu''@;'; put 'put ''cUo3cj9DanFgUUtTL0d8dkcjTFdmNkUyXU9ebkNIN2FPN3I0ZTQmZkxKM3phJXRtPEhLWEdLWS50Png2TFUwbkNOMExFWjgjQipVPTZAOmkzJjtQJjRZJWJkVFVvWyQxP2h0MllVRFBgeUhUT0dtcD9CXWx4RmQ1c0JYPS5VNDEyV3NiWVh7aj5pJVRVaGwmanNkJjh0cD12emlROV9DdF5ycTYv''@;'; put 'put ''VzZbPjs8Z3k2IiV+TnJdL1ZCKltBdCl3LzNAXjo4O3tQNTZ2MkZWc3FUSiFVO1hbRiIpMzZiJXhxRHt6ZE4lQiRmV3RQamorZDp2b2RjVnQ9ZnBeaEdYaCNEeWteTTolcz1UOH56WEtWTXtRK3xbbVozd3BmPiN3fjc6N0B2eHIvV2xNXSx2aEx5alYiSGFrVmhXJnZ1aHsyXTVPQ3clNFIuMClr''@;'; put 'put ''OUsielg5el1qXlBvV3dWYXU9aWFrYzAyRDNGRzNeJjIhfHEyS0tyQnBMVitJa25mPmJ1bmF1WHxoP0toOnwxM0RJUG0kL1RjKi8rfDR4MFo0PTBDaVtlPXFWRkVrVFI/O3Z1M1dNPEsue3x4O0VmUFQ1a3V3Z0AvJDwrPz9IWU0pPmVaLE8pbVlGRU8sKEpDOiJKW1RsRi9sLzlTRCF3MkVoQmRY''@;'; put 'put ''TjM+U09KKEBvQ3s2JGY8O0FqPGt1b29SOTxeNVYxN21YUXFDJGVuVGI8dFN8WExQMERGM1RrR1d2YDN4ayo9PHMqSzc0JkJicSRqYyozZDk4LkR5aGQyOmRESHMxeH5RcDslYWQ2VHAqRTprfGV7XS9RUmczYnMlNk5bW3xOVSQxamlHYDB7KkhpV3Q+N3ZoeyJicTtARHVZbj5WJj5TOTAvZl5b''@;'; put 'put ''Zn5CdyxNUFZzWnVHLHh6SDt3WiRTfFhtN1c1c2hqYT97X0lMSGNbJUojWmNsLyplPjVsV3ZyOkY6X186UnIjNDB5aEdSdWw2Vzp2VzUuOk1kRG5rRFlddz1GeztmJShNZmAhL0lZQFcrM2FiISRgbSV1WzxUVk5KYUZmL1Amc3FDcDpFT00kMD9GRFN+UHYsNmpPUzMrZVpUcFMsUFFxMXZzUXc6''@;'; put 'put ''bEluO148UDAiNEshWz96a1soIl84YWc/amlxdEA/dXAhIzl0cTRwbFJoNVgqQ0R1NENFRzl7PERdKSYqYEllcixIfTpmZmF0Y3NWOFopP3dtYmR1ejkvKiRoOW5VdiJVdDRVODF3PVErKktnSmlEdChQP1FfNCJTJjlPeHZXN1dnR1AvMiNbX0lhM0J2S345VWBAfihpNjtnMihkfDlVSmhCSmN3''@;'; put 'put ''KHdUaWsvS35Iencual9AOGRWTzRnMGZ9NHx3Z18mZH5tT2tOQEF8QE13SDQlaVY1UHU2QVEmIiZzKGQwVmkyYEcuVzhnJmdyWmZ2KCJuPDhNbkVMMkQ9NioxN1JhK2BWWjs5YlYvRyZVfXYkamxzP21fZXFgcipzeVlkRnJ9JnwiYGBgJXxLJEM0ay8rdzdqYWtteTlia01hN0lAKDYpbXlqJkdC''@;'; put 'put ''YSUubkwsQ0RNP3VRV1d4V09IITxxRFExXk4+L11NMnUvKCMiL0w6MmM1P3syXVV+TUwvX2pXeSw5ZDBPNylOOjgvdi8jdT1mWSZDKnJhZGN7ekpQemc4amFGfWFgRlJSSU9IbH04ZlEsdypAKj4rYnxSaC4udEJ7QkQ8XnluajVhaSJjP314cjguYzQoe2hjWH07TTZ4RChlb0VLVV8xZU1ZYWVw''@;'; put 'put ''dkgpIlB6eylYQzdVcXZFVzowKjZILFJYZXAmN0hTXTIsdzsoXU9vckAuZkhNPFsoOSswQF4wPF5GaEtIZ344ITQ+Qyg+KW1NU3hDUWJMeFE3S3shWHhEWyFCdSlTKHJ8dUZvPWgwSyg0ejZpOnVRRkl0I1ApSnlgdXk7IlRFYkYjN2JuP0A+aFVAd2x2TD5iWyRWSEB1U0pDeVl5NktqIVNGcDJi''@;'; put 'put ''TSlXTTp4T1pZVDZRYDAraXQ8OCM0NzlXOFU1ZStuMWE8dnRQKlRALDcyK3AxUSxyXiI0bGU3YDcwQDx9akdoe1lsX3x4JFF8WEBeKmY3eHdZez1uN0J7YkZEMitPUnBTOjJJeVYqfSZHUS95JiReIWdEI3pPRGZaNkdtUUJHNUZSeks3MSRYens2KURPOntRe3J2PVpVNHx8NTo9WmxJRmVJWUpq''@;'; put 'put ''bmx6JTZTcCVrOCZ2c3J9YGxucWYxa2VhTyZ7cFBTfkN+SHVeJVY0NmFxSS53IW9Gb34/YjJGWU81dFt3ITBpfV5TWFgzcyhTdTJyeFF1VnozQj19LGxuVlUsM1gja1RecHtqTj8sdH5oRW1yZml3bSE6InpwcWBpSzNsRlFtRm41MkJ2NUJ5PXc5RnJQUl9pRXM+fUlgcWcrbip1aEhmKihFOmFm''@;'; put 'put ''a2lCei9Yc1U+LkZKdWQzUVppdWJuTTVSKURhcTdYYTxVRkJDYSs9aWZCISM4WlNDIzNHQWRGZVt5TC9eTT0jaGh1Mz5GXXg+I0grYi9AWjYkbSxRKlt2ampackhwS3Q1fVYhW3tndXwpU0tPVmlOKCtCTTpHV3VeVV1fOWdmS05BVnQiLj5hUkxGbXtPfnZeMl44P0UpRyk0OnNdbm86eV1zX2dN''@;'; put 'put ''P259InVfdEVYblAvQkhKXnFrRiE5b2xGUWgyViUleGZmLjV9JUtnd2lVO29abGs0dHFrLntNKXc/Z2AlMSxIUixRaFtPKGo7aGU/U2RpMERYKHZ6NWdVflEkcElOOVZ3Y2ZGWDNwc31MQEJwc1RZMVYud0BWcCNZSStbSSMoPE9nNTEocH19NnBaMXcobj96LHo1KE9uKFIqRFFqcyZdKWRgUlZD''@;'; put 'put ''JUdDQ01sfkE4bE4qZ29OR10oY3Q9aV8zNm9eKjd9RXhreXosQlR1QkY0bG5tNCElMnljOEdtQ0V+dnFabH57XlpvaFA2KCJJLDduOkg6fmFNNnMvZm5WL0kocXU8aDhOOjZ9b1o3WkFbaSljNn0pV14kJnpxV00uUyR0RlVSZF0veFE/fmArYGFoTkxaRG52NGs+TWt0bXRXIVRnRXo/X1IwSlFo''@;'; put 'put ''Z3glXm9OMnZ6MC5gNjJCJDtdV0Uje35wMllqTFJxR3VTYmooTU9gVC5UVERxblFINS8/M2I4Jjx9OTwkSiosMypOKj8/JUo4MFVBIT1ecSwlSFBiYko9fDhJOjpgZFNARkYyZGBDJixPKGJVRGptbEcueyJualNbbGI6OlRoWD9NfU0/Sm5odyY0YCt7ak9tKCpNfnZINyVQbjRVJTRTc1UiNyUv''@;'; put 'put ''S2tDemp6Wjw7XU95b0MxT0htW1QxOSssYXl3eURDLDNbezZUVilvKnF3KX1Jfit3QTVrSlAqUU1GYzF6OCJ8YTVJIXhpK0BNczRbZGpkcSNtVHdzRHkuaTJTKFc0enliPEc1N2E6TTB7VEBWbWx+N24rTGU7bF96VC5MNnl6dHl8WCF+PTUkcXw3Q0I9VGMhImdSe0M2NyhGIU1lc3kuaC5TV2FN''@;'; put 'put ''NkRueGxIKWMmYGU0QipKVmpSKFMmTjY+WWc4IXZpLFhpSzgzb0sqR1M8MDp7Z0taXUdGZWBodGZIPE9wLyI0UHlXKnglSy86JFRoSVBbQGE2YjxQOEMwVH0kTGwpPiZiP2dMWDA6WU0iOUNLQHUrN01tc08wRiVmczM3Olg/ODN0V3ZuWk1DQ0pVQ0NtTUxfMlcoUmwwLkJiLD8/eCIyMVZ6SXpY''@;'; put 'put ''c0oxPHRKUDkqbU5aTCo4UXkhMXo+PSwiUE9LRz82TldsPXhsWEc2dlh0fm99K0JHLERYe2Q7SmYzUklpN24yfXlAM0hFfHVLPFd6IWAuejp2JHxKbHlgMUQ3QnRnU0pvajAkZ31bMD9+TkJzNlJFN35CMHx3flc9aGN4Kj9xNjFnSl5pIWBbMTN2Tj1AUSFKRmA1MTkudk1DVT4zYD5eP3VFbnFI''@;'; put 'put ''Ll5RQSIkZ35dWnB0KlJVTlcpfGBQVWs2PXlhNFBkREsrNTddMyU1KENZenc7RkN8QEZ+Yys3RTdGejkuPjxxYXs3IlhzX31fayUkcWRIOm87TmpxVXR3LCt9fmt2Kk1ddlpZTW1LYCUyPUAoKk12WDxSeUtrbF9DVkMwVkAzJmRIajxQOyl1K0RsfC47SVppMUBTZD91RVguNUBSJkMobV9Wekw5''@;'; put 'put ''MEIlb3F3LkA7RkQrKCZKTTxMVCxsLkR1W3dVczdHJXx4XXVxYytUU0VtUD1DNFcjcmp6KklhR3wsPlp4KUBRY05QVU94PlY9ayFtfSxfXUReaFltVlRTR2gsd3lvJm5CdkBePE0iPlZYQFYycnBBR103TTJpYyJXbnU4fE0lRD10LCVrUTFSIWNNM0tlSH5OeU8hbiUwVEsqdWtEUVFWdHUqTlEq''@;'; put 'put ''S2FUfVl2QFQxTFtleyo3RTthJCQ7LmR9TSk/aTYhb1s8cnEvV3hJVmJQO1BseDF1fEUqN1VJPlBEfEpnJn5hMmF4IWopZW91eTdNXzopeGBwdWY9Q0JqIUpUeEoxaGRab287IUl+TF5edWA5cGFMP3F8WmhITT0ien1lMU92TFslPEgpNjFOKG0uJmBlRF5HelgkY2hFXzdta10rJi8rMHtpZnB5''@;'; put 'put ''T3NJSWhjJGY9dTxlfkc/YWdDTW9NTGdGIVU2cylgY1BNMGpRZUJrOUNTSGFiYlckdyQzUVskSHIrK35kOWtFc3lNLCJRKip+Rn52Vld6dSpMclo1NXNFPy9MczZlSj5fYz57ZGQ3ZS9wVmtqP2dgdEl2WU9XblddOlV9WXtmSHMuSX1LJTxgTjZdQGJPKHVnZTtxIUw4VjpsfjtIYClfIUpLaHBz''@;'; put 'put ''OmZoRXJua3k2MH5BUlp7IVlYUTFQbFJUKTE2cmdNK31LKDVANlN5eFY1XXhUVXxESnE+Ry9iaWpSIlMjY2gxbnJ5M1pUKntQIzA/L307Jm1qKD1zfGY7cndpW0wjOUF6MHgxWmI+Oypzfml5LDxoUktFT0BjNz9fTSNJTCU6e2R1eV1jdGxEPnhLbGNXZUoyVW9CNWBVTVdZM1JWOlJfLnFsTFBG''@;'; put 'put ''fiVkcS9DNVgxTmJXO0FeRGZKMUlFbHc4YUxaYDA7TSRHVnk/PjVBP3xRPkU/RSZ6ZDspJC5XRCM1Pjk0UFE0WitRRGpkcktxPGtnVl47fF4qPWkjd2FbQGplJTxqMUBnJnt1czcoQW94Ri5IUVRtY3twO3BqMzRjWUghKShlUit5cXJ0SjBbWmplVmZzYyU0TiUhKDgjSUduQ25tVzZ3KXxqZXQu''@;'; put 'put ''al9WZlhyV2lDS0wweEAwfGFEbX4yMlh0UUxjIiFBVDo2SVNTXV5TdmtZRUI2IW1SU3x4b3YleUxZPFdaaEtNWzZwc2F4WyZkKDJnMHImNTdUNjxydWAlK08kQHdgRSxYRCNldERyW01RdDVoO3dzI084RX4mUDVVe1dqaEdtOjtIMCJkIyxOQ1hzPkZ3ejsxZms5RCp5XmFTUWpFNFIjPTI+LyVK''@;'; put 'put ''Om8+fTQmXmJsYXpLc2xDWjxVYDliaVNtP3tCeE5ELkFFUDIoW141WDBQVDMwdGwmOUIzYGtgblo9RHRsd2htNXAyeXVVMkU2NVdoNiQvWShhISkqX3g4WEQoRmpEYlFPO29AfW9BWm8raSE0aStsKStJUjZxL2p2OTpCT3RaI080SCY7S3Y6Pjw+TkZ5Nlh9P0xqIywhcXAqPE15VWAjIX5CJWZV''@;'; put 'put ''a3xYT0pAJSlPTV1ycFAuYTFZeDImRTdZST9FM1JCWm83fVR0aCVnRzlRREpmK2VOQl49fm8hT2VneUdkQSgrVXdgWjkvR0xWYkZgVWNWSSRsSihkUDxEZFk0RnxjPHdtVk9XR1gwNTRJLCQwVWFmbXgrSCt9WUx3NTY/WVt7cnBCOChDVmhpTWN+LjpqQmpMWCo0ZkYiQGV0P3FeYD5XbF9Hb15M''@;'; put 'put ''a0wmQ11FenNsYDJeNnYxaD0rYHQ8JHNCYGx9XylYRTdfIjIyfFd+PkpifFVXQFQ2VyZ1bmg3JDE9bF44XWpSeS9IKFFTLCplNytXSnZuQjtpVmdPNTV7aGBvK1YuTnZyaltXfGNzd1c8UTokXjM7T0VCUXNfZ09Ldk1wN04qQ3NYMFVbfWY+cXYlPSMzRlJvWExxMitwZWpHQykpMWxlNntMfitT''@;'; put 'put ''KSJDYlY+TmszbV8vNyxLOzFPKkRDQ3hKIjp+el1rNW9CWFlsZGBXW3hGZTciNyVyUy46N3UmVS84LHEueUw4QVJ1b3R1Z2lPW1A3NGw/djBZLiM/Ji4xdGE2PUpRO0w+aXFsd2pqbFo9cF06IyQvfWE0Pj9FSjZTfHskU356TGhpTD9oTmM/cyI3flB6Sj9QfWltQ09yeGEuYHUvdCklTTQ1cnt4''@;'; put 'put ''OGRKZU9VdntbOzhALjFnfG9FLm0ycjY2NUBhV0JEfH1VVH1ET0VjbSJSSS9lKmtZbiFHV0R2IW9qP05TMkU5I3hdalE8PXRyPnleYU5wP0daLD0scTB8RGp3Olg9RWx0OzZBQkNEeHs/K30ueGMpPDg6Y3ZwJiRIKW9eLiw2XkRIb297fmQ2TmFvdTYhLHVvZ1tqJFtpOUVybTZaXUVnSzNHU0V7''@;'; put 'put ''VnhmYzAvQHVna3RzezEzYHVFczVATU1xKkFFbVMjJVlxQjc6V2dFWDIhazdNKWtpNzlhQFJteHhAS2oyfjJEZ29IbSw7cyhXbkV3Vmh6bXRDYS5qfEl4US5TJVg9Q242UVtgPGg2TltiRnNEQTpgc21TcElnMW5Cb0Bed1d4Nm9aeWVuP3c8ZSN7YU8+ImtlPCtReGdKISVYJFc4bWJCQ0Qla0JV''@;'; put 'put ''TFRqSG97Q0JEZkErI3Q+JFZpaGFLZXVifUlRXSJvWTJUWFEpZDI3PFR2bmBBQ2UkQUxUU2VOJShMZD8wK1U8Z0RXRSswRHh2OlBZPDopI3QrWXhmdXZlPH50Z2xmV2pIfT9bTnReanU7cjM1WFp2fCpILEVwVSV3M0hGVl9iUU14eEw+IUZ6Kj45S09mVXhqLk1Gd3AvNEBBVD5ySWwsIyNrZ088''@;'; put 'put ''IT9uQnBYLihYSmIySUlQcUJ+aHlVR3UjbDUmaWEvcVM5WFdRZkxlODgxdXVrYyxFOEdAJWB4JXlYR0h5b1hlbFFePFVucldQeWp3UENEKGxfL3h3JjRsLjRRUDxfays4aTVER34mSDxoTHZ6JHI6MmFafTtDYVRFbEUqdjV0ezp6SmQlUyRkfFlVJDhLTUJ+TVV2bFB8a0MpRj1MXTZXSF1nVE5R''@;'; put 'put ''a18yOm81RFN4NDx+blJlQGQ3JT88T0p1dnxCIUope3s8MH4jQiFANk52dncuOmtnd25bYVtTMy92bSwhYWduNSpweGorMFM4dz4oPGZwZ2pCeFtqVmV2ajJPKHJUSl4+cS5fcEZxRVheKEI7V25ONUkhVnRIcD1yZzI9TX5BQzt0XyQoWVBoR3M8ditjKUgjZ05Pey5FcilEIUt0fF8sL1RhSnky''@;'; put 'put ''T3s+R3UzKG56YFNqQVB7M0dAfml6aDpgYVEmJWBbOm1rZ0pQMS83SnJDaTxYL3dQdlteIVRwOVlzeXcudSIlailEVldbKGdtW0RWdEkkQnd9VyN2VUJWd2I8VSNGIUBHTGdMb2hncTUoe0ZJLkpVVD5YNHUsMUVQNyVkezVRYU05bno1eTgkeSssZDdDfXZwaEkheGpRU3VqInI/Sms7bS9xbypM''@;'; put 'put ''IVZ+JVpgRko/cTk9M1k/YUcsTEs3MkZ9XlF4Q1RZMWw+clZBU1BrXX1vdmlmJDE0d3ZuLlNAU2dWYnldZypqZ2xVQTpBYFdpRTdnOzswTUtLJGBGLkszaUx4Wmk4bVgpKUg3ZXlANTVea1duTkI5LHIsMVZQXlRfVnNgY2EjU1cxMHY0PEZIVWc6Wit7UThnKn5BSWtUJDhYZSxEe2pBYkN1V0BW''@;'; put 'put ''JnRjWHFwYVQ1OHR8OklOTXVIUiR8WUhQSThbalomOiJUJCE5R0FWJklDb0lzcG0uNC9UUFh4R0x3WkJwXW0vd01qMFRhcig9N3tPfV4hTDg+cV9sMTZ5SD9+N04+X3Q2X2kvOSNydzgjPm4sXVZyRSRLJmk2Y0RyUFh6KE5lOzsmMTJZIj1pSjRTeHFNQjhEOUBeZCN2Yzd+YCtQJSgvaXhGYmBH''@;'; put 'put ''MCl5V1A4Xkl8LDIxMSFYI1M+WU9Ld1FvVl40c08jO3xJPWpRe0U5TEJxXSNbTnVBTVRgNkZZKFloUzxkW2cjSSQ5YCt4dmg4MixKNW5lMmpkaSo0YjR1T3N6NmZNVDlYbjRbKU0+U3lMJnN1aCRvKHFQREYxSE1IdE4jVzF1dDBXdWVtSkJMMX4rNVl2UWFbLFksMzg7UlNAfU5PZGVDV3UoK0Us''@;'; put 'put ''X2k7QzdEOXQ3SFtPO1FQMj19fTwyU1dNe212YX1FYV9jX0U2Z3IoVkYvZzl+YXlFdmY2cH0wRCYwQCVfUkhxJkYsIUB7eSZdL3ZsbCE8SEtSNVhgemY8QUhaK2wwOzJLOTdyMCNfLHtAYFdUbUNvaig6UXRNWFJAcVpnbW93P04wMEBuRS90KFZGcSQyTGZgJWdwPj9ZXjFbWnEqWVhKVzkkXk5j''@;'; put 'put ''JiVYdltseT1sUCEiJTcvPzNULlBgWXQ7dGY1dSYsPz0/dUN8ZlNjVFV7byFeJEFObXxIMFMsZndRUUE2USxtM2hCfUNTKyhQNjN9P0N6JSNaclReYCxXTSRUWlUjfXVnSi5VYURpZ01ScEdTezBLYT1TTWYxMzxMdU4meXoqcCtITnFxJF9bekg1KCw4RHEjfkA+dDoxckIlLDBVRDVgfWpiSzte''@;'; put 'put ''eURPbUxLZTxgSV5zMXVXOlkuNk8+ZzcvW0BLUSEqamd9XWlLIW5nTnQzMmxfNncmenVvXWRZOHxefCQycl9LTnx8S049QlVJTkl3cm9rcVtrYytsSTgjX2NXVkVxSyReZG0zTGl7SS85VSsvOXVrS345SHQqRDN4YmVEcyRmQT4qPTU4eTRMWUI/OlE8Wm5GL31HV3czc3UydT4mRDN8YFJaWk5m''@;'; put 'put ''bGJCRV45ZFZhNyJYZGF7PnZTaSFnQjY8fShdOXozY1JNPmw0eCZgSipySypjO1BMPVV3YTBuayNPejFmOFFvNFMxQDNMd0F4QyRbR2doXmtnVjxbb15kLnBnaGE1TVhHaVkqZHYqUGtrQ10mcmZgQkx6NTJIdHtBQkt5aHxoS2BiTDldKzVPWys0RC9yaSskRCh1W0NOIT07MVRON0lRblZOVkI9''@;'; put 'put ''dFJKUjhwWXc3Ql59UVolZHk1M2ZGbVUzNSx0WlltMGRRN108a0BoT1pYRTlFaiNEVGlmUzoxNCpoRUpnRXJmeW85KCE3NSU5a0J+W0Vdbio+cjw5XmJ3YHYhPjdNTFAkVUk5P3IxLDdmcjNTa2MjdU9bJS5BNXQkV1dQZ3ZjQXZkfWI8USlkYmR4UXV4cHwiYkwrWkVpcEc4dkopMipwIil8YUhI''@;'; put 'put ''IkQpNiE9R29CaCxIKT1BaSMjemFLRF5XJjFLL2AxYlY1SWkjN1lsOzIoYXJmdCY+TUwyX34vbXMrbjYpbDkqP08lOUprSnh9LnVwfXVXTkBdKVspVFU9QV1jeiNUWTNuJFFeblouczh6UDo1UkwuSVlwWVE0ejIwYWQ+K2ZTcWtoTCozI3E5dmEyXkp8K0FNLl18RkBDa3VBRnEsNi8wP2hIKm4i''@;'; put 'put ''S1JfdlE6QDw5QTtMTCYhPU58TkI+anZGRGQ0fVNKWTh7SGkzV242KDlyMUZHMzlrO2Z9dzRgY2FFLEF8TClNTCtUdkByfDNha1NIKFR5TGErQkRIMjZpfHwrOkF1LiVGTS8va3I9b35GIVtjSGx2XV51TUA7dUpHVHduRE9LamZaWVBjOnApcyFkPTh9PTlfIV08XjtHYXh7dDdkbSQjLGkpXjpD''@;'; put 'put ''KXBUW35VOj86M19+TGQxa3FkPlhMdT1wKF1JPn0jZE5jKFl6ZF1GIXYuPEM7YEZBe1M2dm5Va1IvZTIzM1lIUFtvUkAiUGU+ezFRYzldK1BJUnFFUUYwQ318VTJ5blN7aS5JKDZHS252VWc6Zi5ofEFSU0tOJHVidnR0XSttWWpXTiI1SEZQdWZXRUFnMjQ/P0YrSTFSfmdOUnNSSj8pfG5ffFEz''@;'; put 'put ''X1dfMXEjMHYxJGl0MmpCIUlDIitsRWtjX29MWV8oKXJId2xASEFIK2U1bixnaFspa34uTUBGYDYyZTVqMy5ffmQ0VDd9S34ud15HcTpiUGwpS1J3L3owM1ZmYC5jbCxoT3g4RyRmKnsxYWRlP2tjMX0zfnQvXUZPbnliWyQvfUxuYXtpTj4rfmpzZ1kjTmcrN1RZKERka3gyY2pMNk8oKHFfMEZf''@;'; put 'put ''MHRmR2g0RSZ6JEVlSHoqbEAlQnVLVClBYilrQ0skKVM3Sl5KZkQzM3VzRSlxfUFHe1JpYG9pcl9HQjVvdkpxYG82TjsqKEMhR3FlckAwVVppPk1+OFNAXi8wTVJQbVtoV0dzOUZ1VURKLHpRZXVmZDZUeWxrSThuL2poI3B2YCpMMkxLZ0BpLmB1SzpWJXs8Q1R2JippLkVYSE5ea0kzX298fX5m''@;'; put 'put ''fWddTjZVO35Xe1o4NiY2UTxeRSYzaSEvOnghL3FyOl0wVC89T0Y9QSZrYmNGNylFQ2V2fXo8YWlJYUJoa2tUPEpMUHFKdXxIcWA3KVZFTVUhR15gbThuL1dFTXIsIig6QyMkeTFzODVxdEBxOjAyeHhQOlpzPExuLjArOTFoY0x2OklhZmQvPDZoVWdIb1RtVWBIdkk3VkF6N2JKKGZOWV0jU0Ew''@;'; put 'put ''MSt+QSpdZjZia15QIXBKdFowTiVdP1lRNyV1eDNiUDh4JU5aX3JaKSxgNGg+QGA0Wyk7SXJLVUI6R1RmenQkb34+WyZmJGFtIms4fmh0N3xdP0VSfGhHQUNBdTt3aT9LVz4xNCQwSjxHP1NOSUdpJilna2ptMipmVzM1LG40JStJLH5eV3lUPmMhKHw2K15BK3UpMCRWL25fcVliWy9DUSVgO1p5''@;'; put 'put ''XkY4ay4pekYlcjhyMTlufSYlaTVlIip7MSxfcHg1dzEqcHRUIXA7WEN0WXRhZy9wTz5sYWF+eWs9ZlRKPF5FcWMkSExWe0VoXjZpc1U2K01ATzlgT21gW0hsT25fWFo2OyVoWn1FNUVbT0ByXlUucHReWGg7JnBgcX4vdnZxXT4wSz9GKzEyY3NiNCsldjQ6aUIpNipXQH05b3xEXX0oY1tITnA7''@;'; put 'put ''NXlwZSRCbTx8K1ZjaCRqVmZAVDwvL15XKlRWV3opIWFRNmQ1cVo2Pnw6cVE3VlNCNHY0Yjg/X0tgRiU0KWV+Ti80ZksvSlRvYT5qQGxobk8layFSSFkxMTYhdUVwJGcoZigwJUFYIlk9ckRzV3BAI2JNdzxVcG1Ael5HMiFYMGVbRF94T1J2Znp+bTpnY2UzWFRuKV9tTTY7InAvMWtOYD03UkZ9''@;'; put 'put ''JmEqZT82QnVzXXlQd0FCWSZpRmpFWDQubjwuQ1UqWlI4KmJ0SmhZckhicExDT1JTUUgkPnJOPDtIdlB+RmdxS0JdMzhCL0RCRjpSfj0yR1d2KVpuJmQ1ajl9Pi9PWlFlW2JTK3ZBR3lLbCNfekxpO1BWOytJXnpQUmQuMVtWYnpmNWJlPDBGfj9US3NzLkBuT0wvSDd5NU94cHwwdXwoaCpEP0df''@;'; put 'put ''djZUJFBOZ1Q1dFReaj8rUiI/ZjMjRC5vR3d7OjMsK2N3L0E2LiNZaGRCW2lYelAxUWw1S2VzNENTMHdjKWZZSXU9Sl10OEp1NzB+aShfSHlBZFc1cG87ZjN1Im8qMkQ7IjtnaFt0ayhOamIjbXFJV3wkYUxNNF42YWdlNGE4VDFfIWdqV2JgT0NvcG5taDErcXZ7OUE3VE9ETVV4M2B2Wn5JemJo''@;'; put 'put ''RUF2PjdQayQ0eVRCaW9SJEhWQ3dJPX4obyMoQkl+cFBnOiQ9ZV8jXUlvIW8sYE1QPmYmdXU1MkNFdGYsJm1MLGt5I0gpYzx8KHs6TkNpSm81Ti8rXWtFfixWaUh0XmVVVF5dQjRjQnp6SjR1QkV9Jn0vZzwwYXFvRixkYWRjMllscy4rKTtAfkxzbihuI0xWVGYxJHtedXxmVllMUG11fGovVDVa''@;'; put 'put ''eG5hOD9DRG8wPTkxTVM3cnE9fFt0MTkwUSQyZ1tTajZWeysjX0F6WzspYXZETWk8N2ltcT5INW1BViVIOmF5I0QlMTZkTXh1RUdkNzt+VyZ6L0UiI2tSMlcrNW47a0dsTChwJi43cndAJTZYXj5zbDRvZW4zfV1NcnNoPURZT1pMYDF2VzN1fk1HWUBVbXkzYEE5JHk4YUMvaitsPVRTdyV6aW4v''@;'; put 'put ''RShMc0NOdTBQUD83XWooSkl6JHlYdyZCfSReKlYoYTBvWFtVXVUhMkxNTGJaL1M+RVJXZDROKDUwSWtaUWh1Kj40bGE7WDpkUHNaWlFhIUUuXUsoV2Nacll4fUhzRUBwSGAzQmxvP3NSUmVpalA3PHRjLltjPyUiYF5lZ1F0N2lwNlhWWFcoQF8iZlVeIWA/WUloKVU0WzVLT0E2ejpGblJ0IXF2''@;'; put 'put ''fnJCIWxRY1EuVy5GMERQXjFId1NyJEUpV1ZkPHIyOil6NmxvQ218XSJlMm9WXitNNGQkcU57QD9TYixgU1IxXTRsNElabEBVcSplRzBfcCJ6bmFZSnBWaXZsZHxZaXpLIzF8fEleQDJ1TztwZWdDLG0jVytqL3pLaixPSFhQPW4+YCNyayF9NDc/eXkmeyJzQG9WaTlhd1hiJigmQj0pRXk0cV9B''@;'; put 'put ''YWc+WERVOzJeUlJ3YittNGR5OGYoZlg5Uzl6IS4qL25MS0VAYmBeNm92NU9zTlg6VnNtWHVpKF1vRDpZSm52WkEpbVl0N3BXayp3ImxrdFd4Ll9TcUB6Nls8K2IhMzJOd1lUOWBrQ2lBXjA8a1teLG1mTTFYe2pWdm55cz1xZ3pHKyJbbCt7Yk5aNHk8PEJhcENLfX0jNEdeNyYudVk0M2Neajo9''@;'; put 'put ''VzxGSUJqeShhZVJgQj9VdCkxcmIwQCxlVSpHJlRjIm17fnVyVHxDXjl9Q2Q9P3dRcnFyUiMlWVQ4c1IwdEJ3c3skfTFZTUt1LnE9OD5NUSQhMSMsKTxlQSpEVl95ZDFvMHUrTEE7cExxZFFOMUhAWzBkcWIiaD1Rc2shJSM3dmVtQEAjPH55SUx6V25CQ2wqcGlkKyhwW3NAIm43Uy9FTiF3fVkk''@;'; put 'put ''SSpWO2l7Oj1mcHQ/emtIWHBOTiUheWZTWXFEVmtTI3BvIU0+JlNBcyEpMGZvZkdIXnJSW3kud0tSaVlHPnpzWGBVOkwoOkMrTmpRXmRTZHwhfTVBSjk4S1UkQWV6ZEJbT2goKllSU2NFRThZNUZSRDlFeD4pR0s5R2pDOjRFJHVgSCpman02NGgqSTBjMGUuInpzUFt6Mjd7P3V7KmNFIyt0e31J''@;'; put 'put ''OT0rLF5weCtURHx4UHNjZXc3Lk9FPj1DX2RxZSQic2koW2hSdjR1RSlfJX4ub1JNeHZKZWlWY2M3W2lST30qTmlTXypVR0U4PURnYUdKcHJOc1lGQ316eWF2czIwRCxBdlNVMnRBblhrI3U2NSozM1E4Z0VCTDVISz9IcXF4I0pRRUpJNz1xQHcuKU5Aey8+RCokN19uZFd+bXdlIXBUTl04eyJO''@;'; put 'put ''elcxeyx0LjxwVjpIPCY1ZW9FXkYoYk9FK3opZ281MiFpVW9vIWVLfnsqalJHZCsmRHtLay5+dlRDM3JwZWhbezRJdTtndiYsZ09dPFZmbDh2NHxNOEZVXXlYUSkuY2tBOD8qM0IhQktKd0hsc3hbX2I6TSR0Oz8uJFlGTHd4QEA1eH1veFghcmFIe0FUS1csVnYmXWxNP1deYVJ4UWBtLjBRKXc9''@;'; put 'put ''YUBNPTh9YmBdVVVuNSFabTNLNjdGYj8zY34iUVg7Km89RiFLP0lBQE5eZyRXIyg0TzhZdzUsYStNOCRgW2xlTXh9UzM5d3JoYishKXN4aE0rQDZRMjssSV5gQ1VhZldpWFJwRmV5Tnc0ZHtOSFRyTH5XV09kXmlULFVhXUhyNGlRd1AyVTt3MCNXIzVweVhgPDRwYGFFIyg0fD1HZksrMVN8SCpC''@;'; put 'put ''TUlzKmVJfkM2T0FAbDV1JnY6KDFNaTpyaEsyVWsmI1lxemljYnBDJlJqLFFsaj1dZGZFXX06THw2UEx7VltARy5Be11RRnJlTSE3cmFqaGN8RiojS0ZjTD00dVkrSHdTWVB0fSNxbTZaNmUwRCFhZGVCQlt1fXlvTHtTJTk6T1lsKF9wJD9UOFFjJCxLNzR0QE1iOD41ZV4+O0QwO0dPTnxOanEm''@;'; put 'put ''ayhhU3MjOkVAPDR2cnllMm9MOE1mNlNoWWRoSSI8IT1tIThrdDQxMl8wMkc3IlpaNmY3ZXk/M3tdb1ksJG9tRnwzMWY0OCZCRkVZNjhNcUJoY111PyI/SFchQExFQjI7fEkvclBLei5De1olUGt+YnV5OHVJVktIKDlPKGF4eypvUnl+WD9+QC5SIT1VV3wlaj0rfSMqNjp3MDgjV2pNLDhONnxZ''@;'; put 'put ''bnM9UTk0Zi8/cjx2fklAeTxAMDMpSTR9MEddaS5MQyluNDExK1VFSEh0aCJiejkoL0kuV1dJISNrUUApPnRmaC97Oko5TiEzc3pkP1JydHpjelJaVmtoZExKImM7em90PzNhPzh3JExBYi83eXVoMUVYdGNyI0Z3PHt5LChXZDVQPWJ6P2hlQFNgbSN4czFAZldPfm49YDtDcDZOQFlJM1YqN1Rb''@;'; put 'put ''e3xWdX1LUzM1LFQ4I349OjRsTFd1JVIyN1ZTe3YwTmBoWFdtIkxUQy5LNyFxY3IwcDBxMHF4Knx0UWw6ckxoPkt+YT1tMURqIVRqP1BZZ3o0fTV7Szx6S1hDRWg6MV1tTDhXU0FkRT1YWCRWaVQlIzI8O0lURlBwbEdAKThqIkkwSmVCTHloOEAqU0YhPEg6N2B0MFFDSVJ8RX1sXUZ4VExsVWhf''@;'; put 'put ''bCJDUjJUeVklSnMjUGwwQSV3PFt7JTYjW34oa1hFZzdNIVF4cmJdYys9OT9hbXw5TTksfkJkUDpZJUxmNCVoQF8oN2dfT3JQUTpyIzZsUWM9XjhQM1lTN0BrcU80UEUrdXg0RmtxRXt0fXxyYiR2L0g/RHghNWhdSSQvU1dURDNYQCV7IywyOVs6aHgzczlJZWw/WGw6U1gwZ0lEQiNjU0FVL1kl''@;'; put 'put ''aTd4aS8oL3xpIkRne3w0ZyVsXStNK3pWYGdbcUtWfjBVQj57V0ZzKTgkOFJ9fSIudmhpPUU0ZH4qb0BGfGVDZDVqb0lpNk0xfExdbmluO3twfDx6JlRPdTVta05WM0AqX09+aWRzKXMxSlVtbzwlRml2WTlfcHN6RSM9SUJTPHl1ZSZdVUIyRVlJQUllM3NpWlVINEc/XnE0aU90e0RkLiJBM2so''@;'; put 'put ''ejR4XV0pIjwkdD5DYVZpWEFCVnxXejk1YTh9czRLdDp2ZWghWlQ/S2RTZy5MIVBfMSpSTFErJklIZElJSDA8WmQpP1FxfVJFcld0OmQ/M3JnN04xMXl8YiRjek4qUVRvQDxvQEcxPltCJjJ6Sj1oMW9UIXBwRWtiMHRKZWosNXt8OEZoPD9uPjhJXzpMPiJgSHl1Im9oTj9eT3NSbE1eQl0/L0RK''@;'; put 'put ''PSxhJDtgN3loYGxyezUob2ZRP109fGljU0UiSG4+QmUydjFFPXQlfVZxclF6XWtUdkxEMC5ncn1bbVNIaEo/WXdoUWpdRXN8RzRQPFtedCteXTVHY3A2TWB3Ij1rfCs0c2EwdkhAXk1wLktkZzlCRCMpYmdTZ2orPXtvd35OSjB+TnQuYT1jLHxRMk0ufTpjeS8/YzF3UWI5NVU+dnkzPCsmVGYj''@;'; put 'put ''a0xRQGYiQ2M9Mm4mdVckNF9tWiJPUm5EfCMqTzw6KW9sdX4lRWEhYGZdS1FoTW9QMW1zSXBEaEZrfnhCOk1mPXhVbXhHZkt2ZXptNVgiNDwoOVlrPWVFSGouKSJCIj40W31AbE55UnllPmlEKTlLciZRNWMoJjhLTzZhLHtpYmQqZ3ZnfVtUdEZYPnUjNWA2NHh7OlMreG41b3BvZEBnOV1LZHk8''@;'; put 'put ''LCw9NlNIIkohVkd5bGgzISJZdyhFUUV5KzpEYitzMWBPYkc6ImIkLFZkZTJsTFJWPH1EMTNleXQrU1pqfG17JWElbysmMCQvcGcucyRjPnZJXjZpIX1QT3ZlWlsyO3VlIW5TMVojdFoxNzRiZlJOYi5tS11DLFU0e2RmSl8jWWNSISVRTnhdeGN0R25TPENzVDV8dn1NY2g8WTpDJFFgUTg0Jjo6''@;'; put 'put ''XU4xNH5weChHfiVIK2RwTT05ez0zajtYeVFpPnhbYntHfmtrS21AYiVMNWdAL2IqSk9gIiZ7VWVDQSs+P140NFNJelltXzIjWCN9R115cF5hYzpDKy88Y1ckQE08Xzx9NUFDVX4pSXk+XmdhNlEkNGtxWUlobChITHhBOyRoJkI8MkJ+ZyFhVyl0PXVvQTFBcVl3Pi8lXWkmYWckXkMuL2daR3ss''@;'; put 'put ''ciQuMkpVOFlhTW1DYTsqT3lmckdlcl49akU8IVN7dXgsVFM7SlJ0ZWpmeVRSaDslZktjfDh4IkpqWV1YMW5idT9JZTU3TC9uenl1XT5NZylpenFeQStFO00rTks9cEY5QngxJWg7XkU7YU5NZjEqMl5SWXFRcX1tem07WnQ2V11IfXNfKEpARkU6XmVYdTdqMnBANUhPR1gzVyZXQmBYUyR8OFcm''@;'; put 'put ''W1JIL0NFPDV0WVF3SlQ2Qk1PRCxfflIyUCJOITIuQWZOSmBZMT8oVjE+PmlaUzBEVUNCbmV1V08/U1tlbS8wWHxaUXJLWDJ+a31SI1RBeGEoTVRxMjQ9ZExdR1s8QixUOlNSUSVtX0l2c208PGxeMj1nUUtHU0tQZXVfOXtAVHBqZnI3N1hdUVpvV1NARW90Mmh8JChSYkVObFo1K3E+aWcjZjN4''@;'; put 'put ''dyY/bkRMbjRheVBCfiZjMkomd3lAX1VBKGcpOlchZGZAUz9dTTQkeWNZWEhlWmJyQks7KkglT3Vpb1dxcUdNSEolYF1KaFRKOXpuNVZAZkYkQFcreD1VZ3pramFxQjFEQmltKUsqZmoobTRpSnQiT0JHPEt7Ql13XUBjQ0AofmIwYnolbWxhJWkxOEt7PipeXV9jP0tmbiNyVEYpVCY6NyYybFU2''@;'; put 'put ''aFQjWUNwQmdfLEI8U1R1T0EiXTtbPFduLi9jSzB6eCkoUmpbNFVtPyw+N3kuKWIwNSJXcjI7cEwyXkJ5OUZCM3orTWE9Onlxb3JVdU1eNlpSTjRhQm91PWkzR1RaO3gmL1pyZFJbQXhlfXs8VjdDXj1hSzVhamIqekN9K3E0NDtEKG5fPD9AR2B0ZUQ+UiYvR2l4USlyRERUfHtKQmxobXJRPGF2''@;'; put 'put ''YS5lIXF3VCx+KmlPQi9jUyN1YSV4Y3VmX2xzb3E3MEQ0TlQ1KElEczBicXA5NjVlMWtBIWJgZ1N1RWMyS2B2aVcwbk5WVyYyMlYqK3RKQXRNdE0wbyIvfTc/V2JVfTtnWzNLZlVWb2ovPU9CP1dlKD11TzsuK3FKUnUrRzBqeH5sTW84b0NeemJuQE4vR3oyM0ZNPVBAflRrMFVockx4eyRdfVV7''@;'; put 'put ''JlcpfiY1VH1XPDV4e0xuQGpkPTJVKiJQe1EmR2RbLD5CRXdIR2w1VT1HallIL0xUajpGNG5sXkhifW0xPilsPCM0fElrY152YmZkdnoiPkZIKHwvZCRFSE5rfX40In1Nb1FOXVNMPD5IaFVwVE0oX3NQIUErQ2N8a19GcVVIKXB7SWE+bXMiXUdUa0VaTzBDOSY9PSFxWzg2a2w8NylbIndRfkFV''@;'; put 'put ''NFZ8cXFdcHVgdyxtOlM6S2E2Lig+XVJqak4xLjpbXy9iK0ZoalR7NS57RHRNST5PUDFhQy9qKnRdbjF6Z04sYnU/RkY2Wm1EUUJYL2BiUXsrKFdYMjdVX1tLbmYmWnAyeEFGfUEjI1Y9P2RCYkwsR3FnU3FYSU5mKHklclEpblpYW0IoJm5xRjxgI019KCFScyVjTihTdGpve2s3aXJWSX49Tjhu''@;'; put 'put ''VXIvRTI/JDo8JjthVmIzeFJvNDN3fTx5Nj1wY34iSS8wM3BwTmFCcVdgYTg8K006bXQ3V3M/XWoreipKQGx6UUExX0A6OXd6QklwUUkmS3JVXT5FISZ5VDNVR3RCZ0A0eFMqK190WkhKXX1aN2A4MDJfW0R8RSk8VD8/ejxwVXR0PGhXfF4paHMqZDxTQzJFeitGNGZsZzx+YFF+PD8mNFgxdnxb''@;'; put 'put ''M1JhWjN5cTw/OS5kQ1Q/fkpMcV5tODpDVTlRSXg1UT9+XURJTV91JnY+SkRsTGNaNVYkYlE7SWlta0VZeGIvdGU0aSUqeShgXVAwOEpQI3BIZi87JXJRLHYhJkpjKHMxIkskTmope0FSTlYmeHErNnhOeV4jKm8yJXtna2FzSWVedVIheXR4aTQxK35iSzxObTo0XUEwKmJObCRSSlRbWnsmXVZP''@;'; put 'put ''IX5KRn5FVSVrejJfdzd2MyR2K0hoO1IhbW5yTClRTmdxTlJgKnlSOH5RXkRMYWxLOXQydFVWViFHKEUsLyQ0WkRDRV5PfWV1Xl11N01YTSVeMH1TOXw3KUAjI0BARV03XjhmeCVJWGxBOyUsN0V6U2ZCJUhTMiY0SS4sfGxjVkBvQ0s/LGhxTz89NU13OkZOUFZKXkQ+LzglRTZ0O0BxbDtDb2RF''@;'; put 'put ''XXYyfWZ2QGVrcSxEXWFdVUQkLFlUezJpY3RpI2opV1pJckdyQGV3fFYxVzY3X2VAb3Z2cjo8aFZxQnddfmNwXTgzUUEjUEdFaV0xaiZmQn5wTmksMCYvRHkuO14rYzcpRVBCaWJFO1BqdVZGNX1TLD02bzo3K2RtNWpgcmsxIypBNSZodDt7WUhrbDoqP3BgV1o6Kj5iW25SKm9CWE1FJH5fOWAq''@;'; put 'put ''eCFuZFp2VUZhZnNUdTJhaUxCS2Qob1ZdYFp0X08zVz07eD48NSkobnhPKmRIdVl2dypSMjBpPjZObnQ5NH4iSkV+O0VSTU5zW0A8a19aRDQuWiNwKzNuISEkel5NLnl6b3UwfVdlRjsqRTREV3UiODQhMT4qSWopaXlDbUdtXVFrMWRkaVhKfTdXSkIxPyhgSj9yO1ZnPEdRfiU3VThqSXdvUUwl''@;'; put 'put ''Nip1ZituZzkocj0rRTc+XnJDeUlCNyh3e1UsYVlndGh4Y3J3bmQjWDRULGRVQVc3eHB6THcsIz84akdDRk9lei9ncjpGLyJPIyYhK3pOWEtudFhmIVI2cCQhfTFQOXR3JD53WE5HdmRSTD0hcnx0QS8mTUd0MithfX0oNjgkQ1d8fCJIJHFCQ0BtTikldH1NQFtaInxtPj85JExOXnxNe05WRVlX''@;'; put 'put ''diRrQ31HYjpXdm5lPDlYKzhXdW11VSN1KSJrPEVZTDNHN1V6ZT1Pc25pN0csMDt9JThQMz0vQT0sTCwpaVFBKlRwImVtaXQsPl0hckVSVDcrJjxfe00qKDMxRGY/P1VyLEx2fHU3SUV1VHp4Y1NYJXR+bWQoSll7LDVldkxBa1g+OS5laDd7MXp1bVtgYnlAVFMraXZySVEvLEc4UnRHeGEzJTY+''@;'; put 'put ''S0AxU2BAVldFejZeMDIhMDQ4clA9dWYxPTZuaHRnPFk6dWRPNU1kOGVNOGEpK0QmYEZkbFtzWk9lSHt4XU5yNXtNKEJbQjtYYk51bkgpbVgyIlgqLz4+fihfNyosIVMqMz1iNlNIWGB8P2lVUlZ5WGdaTiVAa0B9Iyt7Ml9QWkQoM2pEbV9val41QDsoUUwkcChTSC9DKURwRSpGc3F0eXlAXn0h''@;'; put 'put ''PyQlN3wlKj4+bTslJnNSfUUod2IxNGRQZEBuQjgoSmFRZT1HNXQ2aH1QNkY0PnclRnA1PyRFMTg4NHxEXmw8NHxYR35ULj18RTVJNFM+dVo1fiR0JnN9L0pHdV0ydXNmamNoZWYyKGY2TWwsdip3Ln13djZ8I2MoKy5zL3lfdi9BXXFqQjp1TX1+cVc+N15Bb305djxvQnBZamJ2bVhyP1BMKGgx''@;'; put 'put ''MiQ9RlRDfF1AQXFaLnozJS9XUUN1VElrRD99bj4mYjJDZWJ2Lnc7aipVRn5AfWp4MXVEeC5CX0J3MEUzK2s9ZGUsI3gkbVBvOnBbWVlCJSs1ajlbezEqRyE6RnNWYVdGYzVuTCxFT09zTHtdfF5UK28kSVc8Pyp7Ll1xUXUwRSkkbSpfPUxjQzRFdyFsW3dLKyJPXS9gdjoqPD1XR0opJC95bEAm''@;'; put 'put ''eldxOkJyUmRAVE9uTjs9fkUyS19eOWglO08mNTZEJThEJF5LNlRTMlBwe3s9L1goPHtrRXg8NFY8ZSUyMSZTKj1fdGphJC81I3htXVtdeTtedF0+Pn4vKzYrK0tTYCooQzkwRWNfRDNNNXFuZk01XnhMaC4pOlkye1A0ZntRdGNBfUpYNU5UQExCbDxGam1eRjJUJlJLZ3d+ZilzR0thXyFjZFZQ''@;'; put 'put ''Il0ldyMqQlJaI1tvQiQhKlhvaX1SSClnfCI1I085UjN+Vz99UUJfOmBKYH1sWWFsPzhFOUJGKmgxZjwvWX02Mz9IZ2I3dy9wazE1XjVSJkxedCU1eXJSM3ZjPEI3S0kvPzg7NUFsZlplJTQ4cXNjMEZWKyElPXc8ODI5Vm5oekZSelRMLm4oR3w0Mzp0fEEvcEpXKztELnVeYHZTRUprUWc9e29K''@;'; put 'put ''aE1GLmNyXjZ5Xm0+IXs3W1VXNyI0NFkze304en46LnlpMntVdV9GSEgrR3deM205WUlQQUd8LnZxcDVMLyRsei5PJjEleERNVX5ZK2o1YFJHT0UuLzZERWd2e09bQz1DYTMheHRqYEB9OT9LZl9DWn1TTiIvVCNIM2d9PlhAdGRQeE5hVWl0NjNCdXsqeG9xLDowcUdSPlAkL096M11eb2JVR3U+''@;'; put 'put ''Z0FZQis8cG9fZ2xmJWRYTGN7PTdQbmU9SjVhYSxfVmtqe3FjSiYiWFMybSFBZl9ofVNnWSMsUm1iSGhMN24+ZW5ZV2pxZiEmbUQzaENAVk0kd1ElJjI0SHVfLzBwTG1idiUycV1sT0ZOOFIpfC5IXls+YTh4Uk1NbiN3YzNXZUUhLkcjKSM8TXNNU21YJHw0O3g5UzAlSm5wdFsyXjsiKH5EX15a''@;'; put 'put ''fDI5OSxjdkJHa1NbeThsbTZuQ1FEMlY/VzVULEJTZ1ZlMUp7VmxFMkJhY1FTfipmdzh3KH5tPEUpe08xXnMrQSRFOTdQfEl4T0t1cytyK0NUbWJZNH4jW3FyY3t0bVVyK2YlW3ZYTyVDWGpHeUsya3FiOVosZkAzUjxiVmVKaHtpLF5+PyIocFZFY0xhNnNWWHBgYU0/PG1ZclVHJkJYenlHSTRt''@;'; put 'put ''dz91dmQxNnlue2woSlNsUj4+UThIe3JqczhZXVMyV1hyXXV3X2pMUzNmIV1OMy4kYnJNJmBXYV0kQ1BHYCFicnhZeUQ1OCFEKSI7cylXZ0oyNDt0dFB7eiQkOGJ1UW97d1UpdXl0MT5HUjhsWm9tbmV6KyZ2TGxJTSxvPixMSzNWKlNvL10rOGB5ZHhhPyVsXkJSN28+WjJOdlE/WyxWMWtZZ3hR''@;'; put 'put ''WUxoWDJSTU5rcjhIMm9hJFVbTF4veU1rMG9rK08ueFJJVlIiMFNaeWxgMT5LUCxFTlg6OT9PS08vVmB3WmspPkZ3WzN1UUJsfTlXUS92TTh6ISFpakI+JE8iI2FzdHRaaTQ8UGBPZSR9PDBkb0NjN3k7Z1ouJSJrK0J+RywqUUQrZXZSRl59U2V9RVFQezF1UXEqZ2pBN3tbMHJ9dileayY+WWBo''@;'; put 'put ''OGsjNyltSUl1XmJefH04LFBFclt4TjJNQyZvZEx3RXF9aF1PLkJpZmx+PEppYj9pKzYkV0s5eS9rV0NXdHtYY0hdfGgsKlRKR0Y4Zy5CQTxOSzNGUTgsfkErXiRJdU8rdjB7RHUuUno7YXhIcik5dHhTX2JdUUF3ZUcuSUgmYihEUmFoaCExWGpbUFVNaGJTY3lfIWQ7a0hCeWs7T0UmKXJXYGBs''@;'; put 'put ''Z3l3bkpXS2xVKlhLITg+bHQlP2U4dl4hM05AdlR0KG12aT4lYSxuKHF9RUMrIix4T31ISHNRUH5dRTd0NSM+PF14SndYPWhxM2BSSnN5TkImTyg9LFtwK0tHejVaY14rSmJkVClgKFMpWXFDUHdteVpnbEJobiFJImJHNyIoQ2BuQV1Uc2J7bipsJE95eFYjNzpIX2kwRVd1JGsmZVtGP0pie2x4''@;'; put 'put ''cGZyel9pNnFXcjxlYTlgK3pqUEl6cjZLY2pkbC9iMmVyRCw7XUB4cC9LejIsMzQhTWxbLCVWTHVMZVNPcjZ7R0NjS3FjdHt+WzhZQ0M5X0hiVGxDeCJDZ1poX1ddUy5tSlRZIVJRSEYhMUt7dk49Uz5ZST5nUyo/UDdXZi8lUF07RkNHYyQxI2lIYFczaCZobl94OzQ7JW8pbUlpcnp0dmk8bWZV''@;'; put 'put ''ZmgvdnxEMDc/OisuSmskOi9BM3BMT3AjZzx2d3JoX2lUbzc6SndNMEA5LmNwZWpvOlQ8M0wsdmErKFp5d1F8SWRsPmhqVG53Uk5PLFEoOlZneXBJSVcqRCJ3NSxdaEo2ZnEka1paOk9PMTc2TlpNWmB4a1EsdDhNI2deQWZdNXU/d0RfNFd4KCg/cXhaMS5NOSguYXwmfjtsdXFaKl5YJEJ6RU55''@;'; put 'put ''fVZxWktZOztTQSV3T1ZfRnprOGxgLDtUK2NYPjgyIzlqVzB4dTQhLHd4SUZzQUJXeUpTRE5hd3J0YSlGfGtFZE5HVT9PdXB3WmNAKUVtUGE6PkpeNH15PjZAR3J7NXgvZk9VfC5rfndSe1J8ZUVhXzBFXkc9QCp6SzdOamchczh7Kz93RXUlOld3MVl9O2crU2toNXpgOllXIVkrSVtdSEx+KTp+''@;'; put 'put ''MCtjUk4+SGxmJnZkeGp2emNnJT1Lb1Y5Zz16InRnYSJjS1JHdSgue35OREtLdiFEWXEmVipAWlUxQHdxfCxgbzIhaVd6eGZKOyZlMixndnFobTd8XkBVWjVieWVYQER0aD4hS1pESHxUX2l5OExXJXgoZ1NEe2w9T1Rlc0Q4V2c7cFgkQXBSKkpvMkl6XmxRb3VgMTl1PypCdW9ufXhleSwqKSxM''@;'; put 'put ''L0wrMmgzazFjdUJrMUovTjc+d219PWIpZChoc1Z8MDs1LD47WSFjPHY0emlxdXdRQ3pWUzJTWSg/c19XMiU8MCFqT1RGZVlaMEJkTCtQWXQlQUx1cjMyWC5WZF5vR1c2UGZWXm94Wj1De1crLiglIiYmPzUkWXE2QjllY01SOzQqWSpTZE5XK347WlslcCl2Rj91MUYiTC9xb1BAXioscF9mPzxh''@;'; put 'put ''b2RAYDFROk0+RnAva1QvdlF+Q2BGI1V3SUdCMXIxcll8YkU4bEJKZTd6RHRxMTcrSllefCFJM1UkTHxvMEppLEMsYGFaeTs/JjtPPUd9W2BHPnhAQWtrYWkpZCZdK2lfZEBib1smSDxRJCZUdEVtVFlNeS5IRmFkY2F+SWlOMTw0fiNMbHJ8ZERgeDFKfWlkcnYvIW40PnVHNVsxYHZ1PEJTPStC''@;'; put 'put ''O1pQMS5jSlA9QFlxfFlzZks6ZFUkR3p2YVosdUdMV0IpVTVmQ08uTXA7SkxnJVVDJkdWRUxgVCNARE0kS2M+UU5oWmRxOzpkTC9Pe0w5b3g9a2U1KHJxYyZBT09rYHd9VUM6WHRIPXVWV3clcUh7UjNYa3hOd2wjN3xbT05tV1B4a35tcmNkc0ZlOVZzSStkX0JCTlVaVk5Vd0M9Uk4qYiVyanB8''@;'; put 'put ''aU4rTD53Wlt4dj82RFpwI1ljajpNdFhGb1AkQHosSzpRdm9zfUgkRm06LFlHcUtoZmNgLy5LNE8qWDw3OVFGdGtFJT9bXVNAfF5Gemhwenhvb2N8Vl59XWRfXnhwKGk+L2VNMCoofkdIMns+Rm40NGpoblVKPTsoMDlSc2dvZU9pIWVBSzwhSUVRZmQvMTw7ZH5lfEQvK3JQTngvKXdfeDJxW2Eo''@;'; put 'put ''aWt0OkhmTlN0eVB6eXk/Y0lOK3o9SSZ+R0RAc2x5VD87RjtCSl1+YWRbRX1SZGRZKGQvQ3IseV0qbl8jYz0/TENCa1BndU93MjR9LlFnYEIsLHxiI0UifEN0QFN8SmpSY1JbQGBLOltpfXJpMWBWUldQQEdEakdmQyJNQ1hKMGtibWZNXTNdZkdRfHhVKDJRVjNFRGVwQkJBVGdtZFhOYnxHRlVv''@;'; put 'put ''JXBgP3dAX3xyQ3B8N0hSREZOPS8hbzZ2Ql8iV0VMOjhpZHckUSRoOjVGK0hxSFt9Wy9VfjVgKHt8Tz47KSV8emomMSFVcnIqaEQrJTBwSndbaDFJS3FwcCI9WUg+ZGJQPWxmaW0vRT03ZS9RNmJbOE43VnZXK19lZTthTn43XWYwVl0qZmZ0JlIpTDRdJHYkNVU4YXNXRGc9e01gPDFDTVJYfUJ4''@;'; put 'put ''eWxAam48YyY4PTtjZSVzQmtOLlg3P2w2ajU4Nm5sXlcyenFzSzo5TjZRXXkpa3QmeHFbKnZQWFZlSjg4MUwkNUJLL3xpNlcsJEV2ITh1WzNPPDhYJl5lKnw7QH1+Qzp7QD0+Q0duU2E4S3open14TzpJa01HT2A7aFdNMUpuIWBZKzguRSpqSW0lVG8rO15AUSYrdWFHQFZmUWBhdV19PXFxbWV0''@;'; put 'put ''Ln5BOXlFPDJ7MzBzY0kzcz5TXWh3YUxzQFcsflRMcntCJkt2OW47fTF6QEFwNWNLYWpjeFlzcVlzRnJPTmBjWDtCR1JhRGUjcHgsUDJzcDxMfHp0UGxYNjhEUzVvKlMrTHF+Z1FPSTNwI2c7IXdWfVRgekkjbCRWRWlbXW5qd1NFMkRTRHgwPi5kRFdOUmopRmt3Zy5va3t+Pzt6KmtXOExnfl1Z''@;'; put 'put ''KiI1NWdnfV13UVNrWk46cUF0bGsmYV94RlByN11DZHdjPCJ9bmo3UUBAOlI8YltVcVVRIm9RIm8uJlErbUojIj13RSt6IyFDbypfWTtlP2kyTnl2YHpjRnc+Jm47S1ZKTjk1SU8ydTZsT3RnVilVIkU+cXVCOCpmTEttXlsiTnNELHtLakw8QlV7UlkhJl1DYkEuQTRtWkc5VjRyRnU4aV16NmZn''@;'; put 'put ''TlNdQUJSQngwXTJVa1BmUzclNiJacCVee3M8WCJIZS46ckNhe0Z6akkwUSxoSnVaaml4Sn0+WCQ3XylbcWZEVzgsbVMmOXZmI05wTU80bnVHaW1heCE8U0ZGeT9BZUhDZmN7KXZXUWc7b3ZHZHEzSXlgNG5ANFswNmdbc3Z8SjVHJGhIaWlpUGtpSSw6PSExZHdvWk5mM3tbamc5bCpGVDdUWyw/''@;'; put 'put ''KjAuTHA2ZDZtLlMjfEtTQGs2V0hnXixkNHZGdShVfjl1L3wjPGtibk9zTUEvTnMjYDY3VVZzbTs1P15xZGZ4T31FVEtHSWwrSiQ4QiU3RVRMO3tCMDhBVGQmNXEzZFM7b3p1PT9qLjQ4VDZzXls0c1JwTE9mLDV6aXpBdXxaNXxEUklGcl9IQT9qOWJHd2JUe3s/NVdwYUlfM0o7entOMGtmbzcx''@;'; put 'put ''UDY/ZyI9JH1xOm8+cy9GWWU0UiRPYV94Oi5+NSwlbzdiMlFRSkliWjJHSiI1Yz1qVkU2M0tray4wYDhSWEA4JHgoajs2IU1nK1h9ZFJ6LHU2S3UrOCpreEZaQnxLWGJXRVROYVgsVEZybSRSSix9b0Y4dVY+eXs1MmdzOzB7RDEldUBWYzc7bnEuST4ycXcsN1BdQl1HNSVENGd+XVdLI1lzU2Ek''@;'; put 'put ''NXhfMDJMJHJdUT0rcylxYn0wMjtQU1lwUm9sRE48Sn0lLzZEWH5OSEhAcWpyckZVbEx7QkomYCtWRUZ5NGFtSGBlKG1xXXd3STdSX2hqJThsM35CLnY+VGtMMUF6OHJPXUZmdHV1Sn5nKC4rZGFEbXhnZ2tOJCJ9Wl1dODFqZ05SUiRvNmwrL2x9eEh9PmIrNXdJMGQhWzthYy9iOz5YOXtzfjEw''@;'; put 'put ''UUlFfDBZIVMhMy9OPGZoakU/VHJLUDAmQEB4WUJDfmBQU2dNeUNCOl04JW8kSm5fe0tGJEtXLFtUal0jPWpkfGx0UnBFa2w/SGJEW3MsQm5xMHo/L1NDbj1vO2Z4MkMyWGwlcSpITyFYcGU9Ll1vfD8/Y1c4fkBnfmFZN047O3FiXVUvSzp3ZVBMWWVzVHVdejA3bElmS3NpJnssbnp5Lj1Xemxm''@;'; put 'put ''JExbfToyZXE2JDd1NnpGQXZiVkROdVZ5UitBTz9sTH1teEpKcWlyWmFuaTdSUCFyci48KnBZMTtSOSNfZU9PbWtHRGNaSmA9cnBOWSNXLltKSWBrKX5rUSw5eGk7dmleb0w2YXxrVmpTelJkbm8sbCt4Zzs3QmooNCx+ZjgiOXlReG1TX11JTE5WakReQGhXdGgkXm9uVktGIypDd3giRkpUQFVM''@;'; put 'put ''TSlaLk0xMHZ9PUw2fF00cH5lJGY7RCxjWSUrfCQ1WnFqfStPNnhjOjp+VH5BWDYvWHNwI0lPQU5WTGMoSnhWU1M/ST1WT3grZnRSISYsbXp+YmtQXlRSPn5Vdz48Yy9tWTd5VXNGTEZRdytDaklNZzRofitlfVBMYDRddmpaWTIyPD40RWooSllfWlZOMHc9QmEqQ1ZRNWYxamI/MS8/fENkTWtb''@;'; put 'put ''V3VkS0FlWmAwUUJWVHxVb2lKNUdeQjJJRDkmQEA9cixwX31zd0lzPiNuK1IvU2xTansjUyZJO0RzbnZ2cX5tcUM6dT48RTgrYzZGaU8pQWoweEkkVj4mdUc3O0N1e3pXejY8JFM0SSwvLG1hMk81LyxIZm1dY2U9ckc9S1F4a3tZdjRDTmJBNWp3W2dHaCRPT1FxLmkoJTlnWHBGbU9HUzRHdjgk''@;'; put 'put ''S2BjQEhBWTJNQU86c0pvN2IuQEg+K2szOmtjdGEjeyh1UEZ1dUoydjQjKktqe3coRWAjanFlYDN8Kk9uU3dWTGUoPkBlTj59ZSl0MVA4Z3w0VDdGZGU5TUtzOXx3fmghYkk5JGEkIlpKZ21dbkBEbV9EXThwKzBDOFU+JTZUSlJ6Qkl5O0tUP2JUPCEwP0pTZlYwWXtXLis/ZD9PT1V+ciVgIkll''@;'; put 'put ''Q0dXclVIZm0+OnFNRGV4TkRgYkNZJD14PC5BbmA9YWcoSEV5VVh3JStKOy5CNz5ZWl1OR0IwOlpud1goPkpiRH1vPD1Xd35vMlV1WHJjW2gkYFcrbCN1QyNWUGhMYE0/LClkM0FaJjQsZDFOezlsOjVSSVIwREljNTwueD0xRi9dNytFR2loLGx8cDwyVGtlMXBbcHdyZDEiK1B8TUF0a0dKUC9S''@;'; put 'put ''IWh0Q1g4JTZxVyw3WzxvWlhzclVoTTFgKGV8R0tYfnBYJXczZVcsOSZvSVFxOC5WP2RoSDlBLmtPWWM4cGBoaUtTQzQwbCpCM2FCWmB6aWpzJGRwMH5zI2RBbFlGPyxpXVJhe11hRyg8dGchXkVMQ21kRzJxLEk6RShCYCJ1ZUJFTyRXKDB1RWxWYzlMMC5eT2ZJNEtAUGNASEk5fnpqPl4zdHV8''@;'; put 'put ''M3BgJEZ2WDM0aCRJSndSS3Y2SGV3UCFJLFkyMnI1SEQvQTsiSTpBckplPHlhZX1YZXBoRWxqeHwiMlBrcGFYbzlPPTMoP0RIVjkuNiZ+an0mWERbLHFLPmNWQz8qfTJ3PToyUFBNeFJeblgxbF5CIlpHQGk4cXQ6SX1WRGAjMWE2ZUlhYEtSO1sidjVuSSZCNE5UMkpHTU9qWildbHdtITpOMX1B''@;'; put 'put ''fC9YMT9FdEI4Ul1yNmRNOGhFc2l3Z0RUWiR8PCtCRSQqS3k1NXNQVjkrWTo3QzJ7V1ZfSWkzP14zd0RBU0dWeUtEe0xGUHRXZHZgfUYpKkFnVFB+fkY4aUlddGB5LGE3dWchLEF8LDJMUi9QPTBFIzQ7MHEvUHc3dztpTXhRWylpMXh4SX1aNjAjVGdtbT5YSVJXemRMPygqdFV0SFNqRk5bbnUu''@;'; put 'put ''TFgqNCZkTXV5fXpmYXd3LEFgeFc7M1NOTmtzSXIpK1BwTV5jTjFnSjU9WHUyIUU2RHNNOzFLRiYpM3E7Q2QzJkVwQGtwbVJWUXt4ZjQhbis5THlyOl5IaUlEalpgVnU4KG59WW5YclZ6TD5oOXNsbyYicXZEXkNpNHxsb1k2Kzosaz9oYnk+KUsvV1ohNF0+ZDwoL0xzKmlvKz95RSpeTjIhIVcr''@;'; put 'put ''UTRwYlUrdGNNPUdAd2VTdUghPn5HQFd6KVovQ102bTR6JGolQSFJOyUwYXE4UGc3RHUpe3lvYHZZKyVeMkNLa1sqRjw0OUxNW0haTlV5S191JTlwPmpQSV5dcTosP3JHZS5oZ2FFWW86S0QoO0wjYk9LR2t8biIjT090O2FbIihHN0s9PSpYSjBGen5ZQj1hWCZNQTJwPSQxRml3aDk2RixqQFJp''@;'; put 'put ''Z2Z3Q1pEMk4+LEQhckcsYXhOX1dfK3l3Oys/L2loV2FWWDszNCt9ZWRIZT5IKFc7JH1sMC5wcE5oW3Zvb0lOL0ZQRSxNNjt0OCZpZUJMUSY8XXY0L2s7cz5lbSo+WzByQDhuVmJpRiFyOlR9JkA2cEMuQmN9PkJzaFA3TTAqK042KWRWNVZRek9FJlhxMGlgOEt8OHpHVXdpW1ovaHhOTTExImhO''@;'; put 'put ''W3I6aGBmSEMqVzVbWExAUlNlXmMqNDQ1anRJU21hUk17bWQ3cTlnWEtCXz8/TnNUWEtsSE5zOiszU3Qxe1M9TFhXVks2WkNIdVo/X0JNTnk/PClaKkVdXVV9In4iOF92JTMwZS4mdW1leDluPzMlciQua2tWTnpwb0tLS0M4PFZpNCZ9ST9ENGhld258RShVU2d5Tz1aNWJWJWtqbUNefXRxSjFe''@;'; put 'put ''WDFYdlAhTWFSKyRRVkZzKUttMSldRHAkYl5aaUxILDJoY1ZAKFNuWFFpMzRDcDBKXl5CdHpsfXVZT3YhIjleK2hjY1lrdT91WU9+Z1FbSGFnOnMqc2FhPDt3dHslP1hrPX0xKm0vcHN7S0kxLyJnRypDR0hOPFBJQXBhZH45STQodGA0NHd0TnBxdEo5REAjZmxxV3t1KUVjW1BDOXN0YHpuX2Vu''@;'; put 'put ''TEVMT283Uj04PGM8WC5ec195N2ouaGhHTDIpcThZWmV5K2BFT01Xe21VZGQ+ZEdVUGguKCt7aHNwJXIiZSshPFEhTzRJNCh0IVlrQXNwTiVVTHM6d11yMF1bJiltRnxOd018W3BWZDNoOTNscyt6QzheZ2Z4Sz5DYjE3aVMvMyVYNnhBYFM5UWBgci9iSl9Ed3s1R0JJfUs4WmVdKXRadEZ4Olhr''@;'; put 'put ''SV9NOytXJGRzdzErZSorS3RTK0N0XjNhLChiQCkvfXhzTDdGbE9NN2VlIiV9dEchZ2ZDYFosP052a00wQ2UmPzsrKVNnY0s9Q01aOUp9ckpHL3VTX2l9aE8saGNlYXE4YzdCR316SVpiTzFxWzZBRjQoZGN5P0dgPC5AVjB1WnpZR0haPmdUUl9OaUgvQFBNak1tfFFgITs7LiM4YlZ1TTEuTz5o''@;'; put 'put ''Rz9yRXMofDZpV017S3dCRW1DYkMpW0haVSk9YDl0bWY8NFZ7TVIrXUs1MyNNZylhVW5qcXlUamVNPyJKODtyZjY2S0FNXipDSkd6fVRTUlIzTmlraTl+TTAySWE2OjppR1JpL0cwIT9hUndDaU1LZnxNMHlhNDdTJmh6KFIxWmMrfEM3LDxONn0lfnE4cGpwVW1ZYyxsMWAhPTBMSWNpenAjODU5''@;'; put 'put ''Kz9vJD5AYGA0eCRxVyMocW5wQj5AciJwNjFwLF9Pdll5MW4oPHFYbTBGV2c7cGIhQ1IlaTUhUHFGVFE4U1I2dkxtQDJTJl5hb3NNUDNSLDFIb3g/Rk54PyYyIk12aWd5T3g9Wm96WXdCd1ArX1k1KnVgaU9vemp0SmphTXYlIzM4WSZ1aClENS4pT2VgSVI8aXhKMkNyXkc0JSwxQmVtXStjMHBw''@;'; put 'put ''b115MSNgNmVYP0M1LEp1XSRPanQlMCo8KmVDfDwxdHl4aVZdZj9NQW1EIUJVOmYvXisyPWMoMXxbQzN2K3hSRE03fS5pLDVDO3Rnb2RyTkt4WDMsLCpLXjZ1bFdHWSQ9eSNdOmd4QHI9PjVHS15PRTdEa15uMVVxSWt4Ukl4TT8xUTpJLEthXSxzYDViIix1YHd+Rm5lTWtkX0lNcUt2flEkcXYl''@;'; put 'put ''Oj96bWlpSFE4O0o+dl1AUERELzFePzdhQGtPN3ltI012VHVNVWJ7MURLfi5OXzJ8ekl3eXkhX04uOU0oS3xIO3E7UnJRVC9KSFpoSyouUEU3JD1xMWAzbCl2NWZfVklXSDRyZDQ0fm1hWntMdDM8cDs0NnNJck8hKW0oPXg+KkxdaG9gRiFDNy58UW5dYHpJRC83aEUvLEhafXNZXkVpcnFyX1ZD''@;'; put 'put ''L1ZMWzpaPm89KWpPWyNdIn0rcjVWWHM0JjY6QyhWcmlLSSxwOS9ZeTVxcnBpJC81S3BOYGYkQys5Y2VQXU5hX0hDK09uUEhVOXYwY2lXRCYzWSZ2LyNEQzY6OyVVcFFVN0EuKVV7O3lHJkQpXUhzJGBCdCZgNUlOMXlEW35VVSZLKFdDSEo+NyNSWFZgQCI8LG4rQy8/PlluWHIqRkZjejdfUVVg''@;'; put 'put ''YlgmU28pejh2KHF8eUltKlhOPW5xZyVpLElkalteQXp9Lm1hcj5MSnZLcD5jXyYuUTN1fVRkVC5uVl5bJHshJi5zXlR5SmFiUmZUR1JNU2V2Q21yL3VLL0o9PnhdX31wRE1iNX1ZZE9SVktRLl1uNloqIX0sdCEycl5VaHtvOyhPSz5bKnZJSE5MPVFTazVFVWhmWFRSPjBvYWxqfCg3IT0wXm9B''@;'; put 'put ''VCVIX0NrVEJpSjByOlRVPHtyOjdjYGAqL0FaQmM2KDoxWDJIZ3RlYkt5UUJdaGYvMmlHfWpZMHxgbXlSKFYyOFZpO1dHO1EmWUtzLGBUKy8jNWlKQG04TUsjb2dkKyZLfHJCWTlMTzJRV3N1Um44I09FdmcqLHZgW3trMT40Yiw0Rl41Z1ssPlFpUEB9I0pJL1lrJkcjd112I2llPnsqQWFjKntd''@;'; put 'put ''TTFXZExbR3JjP0x8KHtVSXZkZ2ZeSzxbd1t6ZH5gLCFbNSxNUnovLn14dSVYRz1jfm49P3doZ2ZDWj17aFFvNSZvTj8vWWE9a3pjbXh9M1ojej1NbS58MCpHNks+PXMpUXROKGheWFQxQmlwV05hMTUsezBUOjJUL1NRODdsK1pCcGphOWwqPzZSJjosYEBEZDRyNFk0QGNgWHNNa1hzXzFSImxa''@;'; put 'put ''NEIoXz85YyZlTmg6c3xyQX5fU2k8InN1RWRxP2BUKGgiMTRvPiV3el97bHtvcSUiR0V7Q3tNSmE1d34zcG88fHFZS1NfX1ZARHNKYCJLfjo2I2pZLmMyTnd5IVhpNlYiPCN1THVgQHZQN3VddzNLVEksI3hITWV7bVQwaSkmKT9SMVA9O0l9UEIySFslTyZ+VUw6IVZORmZSIihuTlp9XkJ1fFNz''@;'; put 'put ''YDJTW284ank8Tmx2YUdIZlFgWmlgSm1rZWpROzMwbzwqN2FJQWl0KXlFVFJkNDJzM2lAQiZpfDQrVytlYE1qdSorVFVFcWsrLyNvLFEmS31ePW1BZXxbSFJPZCsiZWtFRFFCdlFrQHdrNzFxPlRYKVduYjNrOEZVRGhXVlhxfUx3Q01QPTJVdD9PclIuJXF7dk1Ze0pFXkEsaDtpS1NDK04iZS42''@;'; put 'put ''UUtBVyVEOS9BQ1hTZSQ0SlUrd3tGdHZUNz1JKiZOc3o4XVF1V0daVEk1ejljS3QqVGBRfTl1LE5SZkhZQUIqS1JVQD99UD1zMzp0T3FDPGttNGNjbyUmcDg9MFsvZmF2OTdaSl8ibzdwMklbRX5sV11vflRCdEphMThvUEM9fEh8QGhVUn0oTCp+TTRfIlFRcCFPbSJPUzJpcTxgWXI4IixYXV5C''@;'; put 'put ''ImJ5SHU5IiFQN1VScCl0Z01mW300OlVASj88RnNZYHVZMHBQZ0x4RUU5aX1PXW5bL30xRU4+Sl9vTE5wIVNiSihFakw/NjpsI0lTKF1FU1VVJUlxV3pxa1gkUClqcmIkaC4jRDtsZklYS30kOilMdlZvaH0sZSkrcE5fOVtzVC5TXV09a2pZPHElayp3WTYsZmE7JV0hfT92NUN9eTtKWDZKZCRU''@;'; put 'put ''dUMuYCEiS2BAK2lBOkZ1Q0BzZ34kX25fNW5rPHNPU1JofXwibHghUDAkUE1QOCw4NWRpP3p0QkNgTnprY0xSSmBvIVQoQkI4LElvc0pTUypsbiwyLzF8RDx7STpqTEZZTERrOSN5NDlmY2ZlXkFhKUhBPCozTXtMLGNkT24lPyIqRSR0UV45bVdxb29WPHNgMlMkMEhDWEBAJn0iZ0siXzR7KmJd''@;'; put 'put ''TT1fWS8jemQzaDk2LkNhTX4iKDNeOygvUnYuK3RtaG17Q21zU1hBP1tEMmAsJUsucHlETlVne3pWNUtDLyp5d19KMDA2REBVVj42Sl4yJkh2SUZVaCwxNExVRTxvKGdMfElsRHdTYV9KPCgpXS9VbDswNURZMD9OW3FxPSk9W0AlOG9dbyNXcj0kV3ImcCUmWXk9Xj8lbyReJWBwRGpse2xIZEdJ''@;'; put 'put ''RzUrP2w8cHNUIy9pckI9V2BaSXpZSTM4TzVeSWJBKzBJYFFYQEEjYGA1RE9NenM6WT9lQXI3YUIpMT9UbUVHJmBmTz53RSt8RVNWVVI3cXZPY0MhLHIkVm1ITHd3cnRYfFo0REhNQGJONmUrdUUiYTttUFI5Tnp3OUEpak5wcW9ZMVZ4VmssKkhhcz1JdW81dHplRztFPFZNJUB1TWlxPjd7Qzgv''@;'; put 'put ''Tl8pUyI9OmdSbnU5RVBEZX5qK3AkbH0/Ny9VQkNMbUxJV0p5PEt8VkZiR2M9ST1gSV1eQFN7L206P28kfDpQL1UlYysqSGBxLmpbd3FWeVVBJSI/W24zZDUyU3oyMWE7XT08bWJANm8kc1twSz5+T1V7Jl4hbj9gYi4uJG1yTjFFTix0OzRqUlhxXShtL1VkTlorJnBEY1trRlZzQEVtKC86Zlsw''@;'; put 'put ''PmtsbFFeQG10OV9QW3V7SUQrWV02PiVOJk4vMmxZZDo3I0g5XVU1aGFJaFJeMil2UixCIl86IjtSIyl6N2VjSChjWjJ3Ukw/KG9+JkJfej9dOjs/Z3dFT3g0SmI8Q21GVVk6OGhyUWJEaC5aVSxfQEtqTSxpPl8wVllxUGtPRlo7XWRsaStEWVpVNXFkMGl2ZzUsKC5EOGozYUtAUV8lOiksUERf''@;'; put 'put ''IXE6P01UMTFMVnt5WSQwKiZlY1I9Jmh1Wl5kUXhsM291cH1TLltHWGNzM34yT31DNlVpOCNHdjhEL2ZGIzE0bnV2LG9WQCxxNDlZbENCV1NiS1gsVlp8KD0+YG4oOCIoeChkNV9gMV94PnhsJjd7e1luQj1BcWd5QXNLS15GQzJKYDxZU1N0bHxtMjA9Lz0ja1J3T3wpN3xeb3RVeHUxQHhwQmY3''@;'; put 'put ''LGp4ZDFtdjp2R2ApOn0hJnsmaj8hVCQlazFlT2FdXVdmWXJSPHlsPD1fP2dMYEMkaj04a2FgUjtSJC52NEpeQEBXUDtUY2VqSyJhR3ZfcmYpeTZWMXs2VEpxQl82K0BiN1dVPWUhUDlkXTVuVG4yc29CTW9xODc/cGdvJTp6TnltPDF9JVkzMiFaPCZPbl04N1hrXlBBJV1oYjxfc2VZSStdRmRr''@;'; put 'put ''dXNXVEA2KnhVcG8qeD5zMH5uISV5UUQpPUxAcHxxYz14KnJaRUM2LmBubVAwUTRwdVIjSkJxQSVXRiNPUXp1fE5tb2N7Q1YxR2hAamomXTB1e2lXO1pKWjNscCw5PSpzamJJTnppcCxnVVt6NypLezQvakFlT01JbWk6bXchQSl7QE9TMWpwfkNfKE9yUm53fEtsOyp9Jk0wVms9PXhPfGYqbSl0''@;'; put 'put ''VHRJJTFQPyJoV3dlOHtbVVU8XnR5QiV9ViojNFN2R3ppMFRLT1siIXQqIWxNYFh4NWpWeyZgOlJjZEYsJDpfNVRjaWsmT0tFL0gkLjZgLERdWXteSk5HJl9SeDdjKz5jczpKI19dSW5WQW1ZI2EsO3EsfUA5VUI2aCNIWDkvK1BINSxHd347dWtqUGJuSlZ7NXxUIVZtWnt1IzJZMiFoJGEjKGVx''@;'; put 'put ''NFpeIWhCJUh0Ui91bHdjZl9fZU01TzFPcENZSiRYJGguRTlRaip0PXQ+dClIW0JvPmslR0t2RTFMSWwsMzp2LyskQyhXaURAWVVvI1FeOC84ITZuKTVCVHxRP0hTTy5raz15YEg/ZEREPHQ0KlJqOHtrRzRjLzAxXWJyfT9YRnl3W3NgdEh9PTQ9VF53X3crVlY0QmQ6fGhGfWFEOGUicCglPGNb''@;'; put 'put ''cUo6L1B9eGpJcXs1OHdVTl4rS1lTTD1fPzJtJVRUX1gieWM8N2B4ZXwiaCMoX0lEOEx1ODxITHA4SV41TG9GUVBTLHFma0UoWExLYEZYdjJifU58VShEcVlveTteITNSZ3NmK3h5SEZRIlcsZWNfWWVARCI/aHFUK0Q+d1k3K1gmZW51S0pIIm5MU3BbYjF3aDArc30lajp1LFNJKHAsVlEuPW1h''@;'; put 'put ''KCEpfCV2elF1byI5aGZpW1B0cGp1a1dUXiVVaH1bVU9MakhfbSFCKTxLPXpPIVl9eF5jKDEueF84O0V1b3p6JjY3MyVlcnEkQSZBYUQ+aUhLY1ooSmIpd2dWan51TXQhbVUxV0hpZExzUEF6NypRQzQ1aDd9JHVmbjZrRnpReFE8LE1MQ2hqZ1toQD9OfiFkaUMmPV48ZVlVdyllWFU7ZWM7UGsi''@;'; put 'put ''JXpddj1yOj8zODdgcHEyWmpEUiQ2Sy5DSWt9enpefSR4T3hGRSFIVD5WO1ZgOilqci5SdVV8NSpRNXhRc0E2Uzs4ZzcxUW5IU3RtVj9wLGE7NHlfNjFtMXtCPCJoeSRoNnUkPjlDZlIhPEs+QmFjIzhvam9gQnImfShWREI1L0d8THQxMUEmQmJ4SiwoX28qM2R9amZtZ35ZUllBfkZZRE4kemkk''@;'; put 'put ''ezZ3VkdKV3AkYzZwdVpqUHBkNT0uVWVFNGc2JSV7PHF8X08rVnhGUU5ZSTVLb1prOy9FJT9XVV1ePF8zIWhsQ0tfV1smdTNdYDw5KzlTNCMhWGE1XkAmZ19sWlRrPD9qVi9mdGEoWDNHTGBLbTE9PiJbTzpzJVJiY0I5elp2OCxBUmZsNSM/SThCJTJSSHVvaik9anUvSlh+PFhdQWgoMXlZRl8/''@;'; put 'put ''aldhTVJEODV2KkgoPXFbP0hybzhlW2NMLHNEN3dmaVQzQn0qNmMxIltwWmxrWT0hTzp4RXBTZjtMUFJWWGxtQC8jJkU6aTlmeDNpZCk4dFsoK2NpeDVnJDgxTktRQWsuZ3tBcyxFZF5+MixZMV5qNnU/amM9aENAeSZQS1BiV0NCKEBaTTQxdTkyTS4kLjs5OSJuNjs5ZX4qIj9APSZUIml4TkFA''@;'; put 'put ''NXRbdU5yajlMdTRUIzlvS0FiQj4zQn1dZ0tNan5ZWX1idmAxNFZvcEtCdjhZMDsrY2EmOWJAOGZtfE93KnsoO0VqKGc8RTNteV5TPUBIQzxbLDxSMCVEb0xAcls3Ny5AdWBPMUxIQXo6OnlyQT5QdnBYKF5EezU/cEhfLiFwOEs2M0IvZFJ8SjImV19WaXIrVSV0Om4oampQRSx5bm9IJnZ1X0p8''@;'; put 'put ''THFydiU7fXYjM2lGKzlMJmolWEQ6YF4rZU8/Vyp9KkNAWz9+aT5iVUJgXThgNTZyK2IpLm9dJjZzPF1TQTE0PGZdY3MwdyFzUHlbOD1ZflQhc3lmbz1JNHB3L0g2bSZZaVlJXiE2dyhTeD5wZl4hPzBuJkdxQjxEbypnNzMpeCVoamIjZS45Pm5NPjBwcDleLE9PQk5FPUU+NUFWJXxZcHUoOUch''@;'; put 'put ''XU06NzxIJUQkRXJUXU9WKUNEciJAOENRU2E4Rz1TVkBuMlkqS3QwcjRWdDN2bEtySjxrMytVaVkrJkExYFBxXTpBYV8xKUojKSVraWplVlIzT0whJmRBPjlMU3I4KX4xP1owNW5jeD5sTD5xRXFMP1AwQ1FINjI6QGN7RUBAbVY3TG0oflIzQl5CI2YwbWEuSSl6LkFnWjk9dXskXUp9clAjaWk/''@;'; put 'put ''bXtnO18vSDc1NC9dcDlRcWtsXV0qOWNbOE0rMWdhVmw/Kk1wdkB4enZKQ0Zudj9ePXVVbjZLQz1jcUZZY1t4PlRFSTB1O0J7UFRtcz1qaWBUM3o7MkJUVCZMRnxNSWFZUXZJU2N+LGgoXlgyWSxlXisuRkwkfVNNfV9pMSREJHhxUmMlfktNY2NgRGV8fkRIKGd+MEFsKiFHW3B5Rk1aMj1xLitX''@;'; put 'put ''dWlLJCY3dlJ8OSx8cHM/ZlI5JCo0VX1eTCpZJHB7SGo0V1creER6WHp5eD9rZk0hPE9GPDlTRihie2VGTVozRkNEImFXaE9yV01zJV0hfD0+VlBmQ3tuZiguMSx2KVZYcVEsTUBfK3BOZklXPXMlVlRbfTM1JiRRRlcoLnxbWT9sWnB7fURhWHlpel5Cdjc0N1V8ZU4jOW1mQDpzRVVPaU5zMX4x''@;'; put 'put ''fjF7M35LTD8pNl1bKlJSdyp2dyFwWylRQzlLSmA7PHBvez1XfU5+IXA7fnN2fDxsYnkpZ2lhckp2Yl5ZRnhlRXROIzROfCp8Sz1NeX1WazRRRHtzOTY4IktTUntUJGIuX2lNWD5nJU5pV043KnI5WVdvKFdWbEpdRH4jOkJeOzxlWCE3TyIlY0UobyJBfD9LPExxW3k7Vi9mfmxfSUJ2dzBEej42''@;'; put 'put ''UVlidD42YUlwP3Z6T0Q6SVVDSlhvIX0hWihafSRAVEIvRHJLd3IxWkBZdyhlTDRkMD5jPG01e3UvUnt1VEU0R3x0R3RuOyxrTmM0TXFfUiFQb003MlJpZT9PSlZkelU7fXF4dk9NZWpwUSFFMXBOfFZeUSs0ZCVEWip+ayMvTGFDPUw4JUciSzYxYDtsYVFUfFs+PzkuLDksTHVDW3c7aTNbZFNf''@;'; put 'put ''OW85UH0jencsQDZiZFRpV1JzL3dhUVQmUUdzNWRjRj0wV1s7akVNNVRFezVWISVRTiFJR0xkWTgrMjRaIllyXj1mIkJ+N3hGMkBXPC5RZk9OdS49Sm9fZ202e2JqM1s2OzB6UVRGPTd4TFYuMDhENVJRSWg6XkYofllTa2dvVjheVGRpQWhEO2J5dVRYS1pqYUNtL3hsSkNFTUVPRS5HcE1KLD89''@;'; put 'put ''bFlnc3lpd0VyWFtmVjV3TldfIjgyZFtNJWgyMSpsIil+dipoRUNVKnYyfVVaNHUzakJTMXRpSi4/REZnN1k/L3I+NCFtZU8pLmQ2VlNrQXlHaGR8Z0pCIi9MWjM3YVhLcV89IUhJdHlbP31fViQqSi8obFl+SU96NS5IOVdRKlNHSSp9eHxmcGBfXT9mcE1KP1FDTEdWPFFTaz0+YF5fPyNfI1I3''@;'; put 'put ''SldubXtgeyZpNFFOaFpwUmd8bn5Ub1AuKHM8UGpaeGtpLlQsJXZ8cWt5Mk12e3AxSVglKz02PUdwQCo6U0poL1U3e0Q5MmA2fXVQREp7bkJSTlpHMWxyNkZad2pxLiohbE0+O1YvSF1WPSZqenI5L3ozNTJgRFZCOTh0XnVlOUpQSShrWE1zYUR5cVE6aSNeT2gzMSFiUCRATXNgNXI4NUlkfVYu''@;'; put 'put ''MDh7bi5gWXA8Q1p9SnhYe10/en4qKnpHfGVGSklHMHQ2NVp6fiRRJiR7LipZVigkd3VKOloxXmpEelQwenMxKU1aNHxxdT4qKGswMyg3MFlDe3AvQyE5JE9tTmFLMDJ0TVRdQT1CPWU9eEs7c1A4LkVedEJtTzx1Pl9mIyNEdEJqIjtWa1JGd19RKSVsI3w6RiJ3eyswemEyNmouPnZ0VFE7RTxg''@;'; put 'put ''X0NoWFJ7cGU+WGJQRHF7R2kuSnZrTDkjUEU4RzpXKDdGOXtvemBweD1QNnN0JCxhUEBnKXY/fH5LWlR8ST1oSzI5KUp4dHxoN2M0TmhAakFyVT55cVhHazpEJkUkZGcoQ1MjJEQ3YiQufiVKOkxmVTxYITpTQT5obXgxZitTQ0QoLGtKIUtdOylwUmozaEk5OUdwRDxyVkZbMW15Ly9JN2xybU14''@;'; put 'put ''fUkrVSxIR2dOITl2e3BPMk5dRCl5KVQuQyslbWI2IThGNCgvWCF5eixIUCV9JGAxK0l0bXpoSHlkaixOTHl2cXdKcDVDXVczPyVYPEFnZn5zUENeYXFIfEB0NSQkbEByYmdYS3FfI1IqT0U3WV0rMHVwZnN+Y3smQSg5MGRqKyQ/XSw9LillOjJGQzReOSRrOzhrWWMwZDE0Slg6e2cjUD9hcjhm''@;'; put 'put ''cXppPnd3TX1yO2p1NjZjcSVaNXZ0KnZ+ZzcxbntwQGN5dmFCKSQ+a2NoS2R7dl5LL3NaVX5zWitXXk5pWldnQWl7PilgOSk+VF9sUn5YcGI1akJfKipIe3w2Xl9EPFVpfGssQV1+b2MjRnF9VGIpY0dIKnk9NnBwKHV8M2xOZTVaT1ZUcldFTTtjfWREKyVOfHJibUNaKVdBNnJ+KngjV3x2ckhZ''@;'; put 'put ''PShlSjlqd19EcVJNYD56RHVTaGd7Rz0iRzxfS3Zta3NGR2FWNWAwV0hPVytESSNRdytnNWtmSFtlSnFja0RJMHErO09vMDExPnAqRGIxNHNJeV11XkY+K1spO2JLPVtOP0A8aGQ/QnBmSVVCVzslKHR0PUkoMHBEJT45bDA5dGlwb2kmUktpJn52c0RGO0A/WyZEZDw6KmBFOyRVUHpedlYueG9Y''@;'; put 'put ''IiVFQ0U7JEZodmI4KFZFY1hWL0d7LmkpUypXTy47YXlaKX51OlMuRkA5QFJsNVBxblQ+Sy5hQm9+Ryt5YDc9X1t6M3RQcC81fkdlOjsuY3NrQSEmaU07VixMW0hdbHBpK3JVQVFXSWgyWmFLd2xTeCYmMFQ+Smw1fGEye1UpJSVSMiovUj82JDhwc3xHUkczSV5aXjdMNEo8VG1pcz1GPXlCQDBt''@;'; put 'put ''WEUwOUFjSlpEa3B3b1VGej5JNz1XPEsrJDpGW0IqPkdIW2NkOGxfUEYkPmpgOEAjdDs+PGFBdXtkaUN0X0YxfkFBQyJtRiRGdyM1Ojwwbywlai9MbzN0bDhqOkNTTFFLJWM9KzgwRjAyQm1bMTVpeSVDS2NZJnJlX1YjY01WT0FPQSJHb19ncSpyYGpXQ1c3ZUpKXXYmW2ZDTDJvTXAlJmxGJSZZ''@;'; put 'put ''c0BAbW8oPDJwTl03Uytlekh9Vl5KVi59a2VuczQ7cWMkT3VEMDA5UGUuZ29jZHQ8RUFeISgqNzNlNHhUSjo1I2xqIW1ReCk3dlNSdy91SVZnN2gxdDlvTnNgcH5eVm5DKXRgR2k/IW5mRC88WSRwPms8eDUsZ30mazxLIzw0bD8/dmhgTFFTaUdoOntFVmA2bVNFa21BXlFoJUt3S3JKZFNBYTVl''@;'; put 'put ''QSZqSSI3ajo5aEBFa1NAaW82dD1XaDVlaFMjakImKDBSUUhUNCtfZzY9fWAieygrbHh9L0R1OkBxMTNFS0c+dyxgO2dCVjApfiVqMTFYWSpnNjJZQSZsL2MucnxNSUI1aXJ5WnpZXzx8XVBOUVRPTlskbHk7YWd2dG0sQl0qfTwvaW1HNkpIQz4ub28lOUQ8MitpWFtXX3UxXUEqKCooIXcvZGIm''@;'; put 'put ''aHlgR2YrcWJXQm9CVTBlezNHaDoqQyNkU2Z3aTxUbTxoU2luP0A9I11NR1BGYjAhKihpR1tJKWtSLEs3N25walAyVjd2O010SyU7JnFqM0FeLFpNP2NtVS9xV0ZWcGZwaUhbOV9SN19gbC8yUzpIfmQ2ZyZfIygoTk10W3RgfW46SzNsVFNjUGJbXjBLNXZSRms4RT8iWzdeXj1wfWNtS3VsMm9R''@;'; put 'put ''aHl2NC47MXh9JCs9Uyp4fnFobHF5LzY5QCpBQHQqeFJlaE5dQUBrIV5VNSw0KU80OF9nUF9EM1k1LGhZUC5bZ1lkQ0creV57MEltekNjIyxiNS48YVtIeFU2ZzF+I3Q7XUkvOns5aCheNU1kJCxLVENTJC5Ddn5wMz9DfSpKTjNzeyJ3RSskUUA2Szl8NG1wLmNDK0Q4OzhMcW84cktKOTBjanco''@;'; put 'put ''QCxqTCtEQFolNS9OOTwoRWA2Z3lzW2xHdV8pOj9PdCFtLnZNWn5zZH4mbFsmJlRgOW5EYUx+aGIpbGNeL2t4QGdDQC4mWjJsMU46eEVaJigseCVBfiEzMm1IRV5jMTB0aXU3ajNdUyZ3entRT0s7InZWJH53KHs+RWE7JiVHUVdyXi91bC88TTthPGxISFhmdCN0UFMxXiFfTl5xZ0ZeO01kOXZK''@;'; put 'put ''XXdfOyRYTnNWPEEqJlVBJn53fSMqVXYxODV6JCwrfWV9Xj5nN19JbTcpMTFUc2clVH1CakVsVHYsWFt5TX5TKzpOfj8hJDRHUTtuOmk8SlhLZE49JSZXeko9dWhUJDFFeF9VQXFwR15WbHx+SmxsdGY1anI0KXJeeVRQY1dseVU3UUNSN1FmO11wKUh7VlF4d3ZWQEluJSZ4Vkk8eCIsP11HNT56''@;'; put 'put ''citFelEhcHBgOFlxSURgIThyZTJtJlVLKno0TnRVPj0wb3BgMk0/X3d+TXUqKkgiNCFoZ0B8U0Ivfj1AbWxTbypVZ209JiE6Ujl7VGQscTpURWFgVVImc0g+TH59X2w6c18pQlV0P2pqSUU4LGMkc1RAJj1RUTlfbmdqTHc2WUY8K046JWM5eW8pfDlLOVl1SXZdR0V6UU1SLz0hfmBVP2pYRnll''@;'; put 'put ''QzwjfXRrYkVLLjRhXS90Xl4lPCs8JXtnUlMkYko1P052WjRVRSRrbXhHXWBgX2gmbUNLIlJGRDh5N09meXNJQHE/MDcwKXA+QHpJXWI7N2V1JSpsR1o+OVVoaXA/ZkxAdVIqS3A/TjRlSll6cmQhdFp6JUNJJjU2WjFfQFg+JW1yfUZ4Z01YbSliSHxfVWc1QHJYUTVXSClOXUw1TiteKTJGJCp+''@;'; put 'put ''ZUEoRDF9fEpUX2AiaHFZTDgjUEBlWysifSFFLk0zZzs/TFVIMURrV31UZHxfLihCbyoiRkFKeSIkOVJSTH5oVUo9Ljd2Ozp0ZVkmfTNnNy47fVZTJj0+RT90YCoxfklmNyIkUW8zU2NHcis5aCxOMFFUKVJsR0AsVjQ9Ml99cFdLan5wQnZnPyhldWx4RUYpXlBBYzhDRk1LQCNxKSE+UHVrT3lJ''@;'; put 'put ''LDhxRUcsYVtnR1IwRjwzODFLcW9lTzA7OFl4R3pxdVJRSzxUUStzRkEodClfd3AlUGUhKjhicDpqSzlYO0xUNV9gMSMla0xIaShDIk4rfXBjJEdAcWkrXlF0U3lzS2t7blNgTjI7PCphXjxFU2hSOnhxS0xXfSM6MFAzOEY/c0VgNDA2PGFiPk8xNGl0b101ZDljOl0hRUArcUYuKnJBU0RgZXQ9''@;'; put 'put ''dXVnWFF2VU1TdjhPUCtrZS4yQ0o/NDtKdW5nLk0wfkE6d186KV1TQEVqfm5EYjpMKDFtTC5UMmo0ej5WamkzPWxaJnd7NG1RS1AuQn18I25NIytvOjtjTWRUYkx+dX1IbGxyU0NtO3RwNFNWJTlLbFd7TFk5KCpaWWEufENJc0NARkp8WywqcDtwL1RLU1hMTDZjW0Z5Ujs3I0dqSlZiTXhCb2hh''@;'; put 'put ''SEFEOC9kOXRTeV0kN2lkcCJnajdMW3w6TT55TFZqdnxhVHFmflpqfk0xVzMmUEN1aT4sRH5EYVhIZSY2UDp8OSNiWXhve1grJHBXXnRRS2pgeUUlQ3lHenA3R1BlLmBROz9MLk5DKzVNW0hbbmdNaEZAWTZwPlRLbFdeNHV2eHhGW1k/MEViWDY6SlsrcT1edWw4MlssZ2VCM1VXQm8xSSN3dnxG''@;'; put 'put ''eWhlWSYzS2dGRlZ4e0AmaHp0cTFZI185ST82cVFRbTJycXh2WXokaXViRmIlXT53NE56djNPSWsrLnUxM2FGMFpQbHRSK0k4biFuS35KLmtgT3gyL0FkKz5rUiExUkNzQilXYEZBITw7V30kUjlPLko8NGQ4ezxlPSxPd0wscVlUbFdDYEdHfjttN0JsRjs+JHBHNGhzK0QrdkMhbT1obUJ2Rkh5''@;'; put 'put ''Okw0PVVmeExQMnU7LD9qRF4rc1AuQmJ4dUNfcit4RkVdXjs/WSVTcHZJdCZLb3R7P31gd0V1M3U0NXNQMFElMkF+aEpgVDMxR2J9R1BaeFNiVXdhLnwqVUVAdlp+b3F8VXlQfmNZSDVBaCU5WikhSi5nOkgmaTI/MHosIlF2e1lzTU9CR0FwdU54aSpxVEphQmohU0RFNGQ1RlsuUXpFaXQvMlNd''@;'; put 'put ''I14ydUEwJi5hVEVZMyNoZ05eKnU5XlgucGcsLiNXenx8bU42L11bbCRfJCtgNllFcX1eYS5+JWIoY2hvNVNCImI5e1UxbEQ0Sjh4QV5jOWhXTFJQQGxCWlh7dVV2N0A/aEdyWF0ycWIkK3hJPTFKczoqSzUrXlFYXUBiK3JbKjd3bnRMPCsyRnl7YD1MfE5BV0UkIWddaE0qQXlGNm9UZFE5cCp2''@;'; put 'put ''Ui4rZTd4b1lSYDY4OC9qRzR2eH18Nj95XjskcTRnOCxFN1AhSShnR2AuQTpxWFJeJCxoM1FSMEk3R1M8b2BzTjkkQkNaMmAhWm49d1ZpcXtDKU9eIU1JJDRyWiQycEhQfCJzSDRnNGcrLGtGb3gzcFBJSzNHazU9OChBJFExUHlMIzNKdjxuJFg5Ji57YHZvKnNTR2gsTXtEfkQ4M204VSZ8WzZS''@;'; put 'put ''PVFFcnNSTWNUNDFOQy8pUlImLGVJLD1Me1o+IVNsejspblhoWDd+XnAmPlhGWD9WaWxyfTkyMSJeTXA3ZT9EKHMucyhMQXBwcVpkXz5EUyhMa0AvOS9qfHZPVjlWXUtUcngwSDJWX2tLLDBmb0QqS2tWUG8hPHI+STFafWl4cXZeQ0lXaSQ2XlFqQWlyQV1VXitGSUtiRUFwdGE5Slg9S2lxJX45''@;'; put 'put ''ZmVVeU44WGI+Z1JTLGR+JS8uSmRUT0Y8Kj1sSWAqQXlMZCZ5WGw9WVtmUjwhO15neHt+fUVeRT9MRyN0aCkqdnc2ZX1hd2pxLFlbeFV2R1ZAVz1ufVk1WzVkRjUkbFpUPVN0UToufChUYD9INnoralE3UmpjZjouNzskKj95WWR2dUk8YDlicU1zdik7eS5aeVhzXjUjQ1I0LmNwPmh4LGx0e1ol''@;'; put 'put ''bj42cFh0dHlIc0t5IW93JjRMdCgpKUZ9SWthOTYlYSFCe3ZwXz5tTUVdUV5VVlFafVR4ZmtbOkVVXXshI2xSUCN4Zl9FYTVQcyZpVUBmPWQjN1BGZHt1dVQ0SE5xOWg/RyJfeTFLbzNydiRMbT9JTFBidVhKQWY8WDIveGZrLG1FZSojZT9IWTZKelppYlU4QGAhTXM8dGpqIU9yQ0lpNyk2IUoh''@;'; put 'put ''NVhedSU/P0MqUHA1K3tyYzIoPUlPRFlCS0teTSQ6Qz1JNGkjR1VSNSl7VHQiQVlOOndweFt0JCxuIVt8XkhINUFoSmR0M1VPSE9wX0JFcFopVHFrTj4kcmphd3E6YzMyP0RvMSZibj9YYlo7XTluUWBXZkxlTEJxIl1XI04pSGg9RU5We3lgdVg1Kz0lay89RVQ9RHgsRHB9ZDI6SFtLRiZtcyk9''@;'; put 'put ''an0kVyolbXtwInJDbXUzRjUvMS87PSMsW0QjUSVaNTBJJlB9YTNZd2Y4dHZlT2ghJCosan1KIXkuYE1neTssPlIxKT9ETGhxLmFpej0mNk5DWUJ6YTNCIjdsTUMzS10ueHN4R3gzbX5ZPk9LTkY1XUopNCl8KmtyQ3VucT1JQmdmU28xWjpAenk2c3U9cW9mKXN1ZD01P0gqLGxGYVssPWhIY24s''@;'; put 'put ''L0pWXUM8dUx0ITc4ZE5iLER8cj57bUtdKWVJeWx4Umh0bzspQVdGRENYfWFbeHZueFAyJll9LDFfMXhhUVtDWjVnenh0JVUpP012IW1XfHo2bEYrXSEsMXd1Uz1uNj4relhLS3J9clEqWEksbE0pcSFLQm1pYlA7K2teTjNha3dJPCxIbWJaUV5jZHEkMmtzVnxUeFEjVk8iT3U5Vk9HdFl9JkBd''@;'; put 'put ''WCZfWXpdeTYoRl04ezZrcX1TXUd8KlRHeDRDdllkdSFpQWZsWjVFPCNBSTtlbj0oPXw2SnBCNFl9a0t2e0IwQiE7c11IY31HLn45SDRCXlBzMFByYSVFNn1BRFVqVWp9fiIxaXQ3dlZLRk8iXzFnUDcyYEUkPkQ5NHs+cV1BPDtUVSQuRFY3cHtOZj1mVjg/RE8maHR9M2EhcXskV0Rhaz9EcEh3''@;'; put 'put ''NjlIKHlPLkheUlg/YDhyWFRQVTVtVShIcVU3XXw7bWZiKkhaOmNsRztAXkdUfnkxLm5JPGBMR0t3PlZpR0tsX345WTFKfVBCWDBpUDVnVjgre3pRe0NzN1UiO2Z1dXErZVpeTFtdZHRDdV15I1JeTFRKdEJ2TCJEbEBXWVA/RFYxVCRqVld4TGJAQHJtYFQqWjFBYy5DeE87PHFKUyNXX1BCUHtm''@;'; put 'put ''Q0IvKUYpRUdOfmRlTWY2OXQwMDpLdUJhVmVHaXkmMHRiYkZKYXdUPEtScSYvWUwuc2lHdissME5obzQsfW5feylGeThCeHxzVmIuUVprK2A6cU08WHBpa3JdN2x0UWpoaVN3Q2wwU2owNTlFPz4lVkled0FrJVNgbW8zJi9yVSw8U35ve1QqP2spOHskYVAuM3kvfXxJLEdzYzd9ITE/VnJYMWQ0''@;'; put 'put ''bkZCdyhTallUZEFIO2F7QmpeTHpNcVl+K3BdOz1xXml3OTdHNjFOdiI1WE1hKXwle2xkcj8hX3BSfWN2enUoe0o8azUqaVB3JlVCYSVLUUxSR0VoIzBBZVI3P3Q0fHJlcTp1TGN8Uk5XNyQ5MVMye0NoQTxmKlp0fVB6bSNEITwueE5EI2AxND49dntXPkpkOTlzWXZeVjdndGlWVjw6TX1oN3R7''@;'; put 'put ''cENdY31sZypIZmAmfEpSdFF3cGxJKUdQSCQ1V25uY0ZiIU8kI3Bqb2xHIkVzPH5PZF4oP3BWdWlYdyhIbzFfaUtyTHVIX0x4eGBaZnJzOk9yJUhrYT5xYnIhZSt7YVsqNiRXdjdZX3soQCZ1fTpWbnRreHxMZDJeQyhHJX05TCYoKitfNDkvJiM6X0NzR1d+cDAwc0x0fDZCX3s1PUJUa1MjbFdR''@;'; put 'put ''MnxAfVBwVCgrfmgpYXt9Lj0qdEMiZSZ4OTpObX1uSVI9Nj4jJW17M3YpKCpweVN8XUllN1NEd087QnQ6U1tpQiV1XVp9LH46T0M/fD14SntTaVQ5I3xXK1ZXKTRnOjVNTEk3Zm4/aSEwVXM2KjZlfEg7YkZSXW93aEdqfEB2bFIrQ0Ngfi9uP0osWGUpbXQzM1IrdUgrXUZ0NjZIdkNFMSh5ekE6''@;'; put 'put ''bHw3d1ZDYElgTF1EflFYdFRrZTtNQFRtQ01HZylLfjh3d1twNikqMiVFZjA4ZGske2dEQ1Rbd1pPaylkemhnaERfezJPbjhSSWsocEpMXVNpOmtQLCo/ND0sMnBmRH5PUU95W2pPcHdrc3hPLCpIKVg+SWRPTmk0altqWCtnOEo7bTZ2OWA/RTF4PUUxLGhIfUhmbT9CX2s6Xz94aklfM1NCSEos''@;'; put 'put ''UyYrenouVEZSXW0/eWt3QyMvPmx8LldRWVdvb0dWRUkwdTxzdmApZD9LOV5IQkMpODdbfDZsfjMjPldmIn5IN0M8LzZbU1l4UnpMS3k1PHM8Mn4xQzJva09nclJFXixpeUllTiMoVHIxUCZNMCpPM2w7WTdBMkZMSiFLZmczZ3chdV5HaShGYEY7SFVEaG1dKXZrRCt2dC47Zm0qTTg5SUo5Ijck''@;'; put 'put ''O3FIRHg7cURgVSVfbnEqUDBXJUdzP0c4MX1UQzRnKC8mLjY+SEl+fiRhS3V4Snt9VD07Z1Y3cWNZLzlBaDB4Y2BRLzlLZHkvQFE4QiI6QD0/LkNXe14xMFNrIUUwV1V3WlUmKjw0UmphYFgsQ3smdzptaFhVTDRAcVgiMERCQ0h8JTFfbmtCPl1eMU1TbD53QnIxaEsjO3pdJXUrUjZJeXRDSFp2''@;'; put 'put ''WnQ6cCo7Ik1lMTZ0PHIrPUYlZXxdUn05aXBUMkMjN3c9RD4leyxjMWA9bFk1T0NoQmw+alAhZGwwaWE+QSNXXmRQI0BSZldoRmV5dXU4b2c7aHxneHtab2FpW0x4bFdVKnhgY0wmaiE5dSZtNyYvdjB5Ik5KZzBpO0RFITB+PzpKaGRjR2V+QFV3WzA+VDNsXWdVLEx8OCwmO0g6JkorQlordkNE''@;'; put 'put ''eCp9U0x+aDRWUHA3XSRVNF1CX21FS15CX3VrVCVGe2RFVktyZEpKYF12UkxQLjF8ZUlqMGloJEdXX0lXR0EhRHtGZmllcD9gWyRJSCsuNEczSSJHRjo4NmVkIXo9QHR2JjxjViM3WSt4ajAuPXRrNlpeVmxBSUR3cF1YM0ZAcCo7aVtvNXE/NVVwaVN2UnVwSmBvUTsxKG94cUpuU19dIlFdajFh''@;'; put 'put ''ekc3aTxid0d4dH5sPnJrb0ZCekE3JDYqQU5dPiUlYX4+KVpBX3tmeT5fWVgvQCJ9OiUpLmIsNS8lNVMkITVbXkBBaSo1SH4/QlhQJVRgPjdZc1FHNHBUeDI7bXdjMDowQXFzb1cmY0tBPHA6e1dUb252MylnOihWUilINTJgU0U+MyFVTWsxbT1Se2lIKEF4dE8hWnk4RC8pbHxpVERuVTwjUVYq''@;'; put 'put ''MGtFInooXyI1JCFLPHU7c1Bvc2doZnYjKUdfbmI7cXZSQVtuWHZeRWlnR2VqUHBFRSx0T1Y+RkgjNClrNTp0dVZBbXI4NCtzOWYvL1p7P1hdcDA9Y2JpdDNhRX5HcG8kaiZpeiM6alRmNE9NITQvPU5yWCJyaXVQMUN4JCxGLFhwMihWQEl6P0RoSyhCU1hGXlV2WWdKTkN2SCkvJGtzNzI9TDdV''@;'; put 'put ''ZGNUeF9aIl0pYGRmZTgsa15hNEJdO2g/WGUhWWx4O3lwb196PUxOYi5VWkkkYkJ2bkV1YDRVbGN9aUl7eytsan4kTnMpUnpZaXhaQ25eNkZYPyg0ZkxsPip8Y0RkQGspYEkjQF5rQWlKJmVWXyNqJFZtK0hMQFBmcWJ4ZykhSiR9eTNXUWlePTxpIXlVcUlCQzBfL0peLjxJfTNgP0w1NV02SXBu''@;'; put 'put ''eChjWl07MmspWGx+WWhGSlRweCFoMmY3Zi4/K34oI1BqaSwpaTRiJDRWfmZQJmdkfX1wIjFqLmtPUWVmOkV6Tnd9XSFXcnd0e093Mi9HKWFAV14zX0BXOWRaVk9BOzRDPjcmSWdpdmVOQlRIPXRCcn1EZDMvO09BWTYselEiUVBZImBAfWBRN1VrcTR8UkMjQGFJJDAuMDYvZmE0MDpKUTltS2th''@;'; put 'put ''flB4XmUzRFtaZk9zUCwmR2BEJU1rPnx1MnVDb2pjQSFHVzNgWz92cG05ZjpDWHosPnBbTVEwNXYqKTwiKn1Ba2dnWSVVLkZWWVl9Kj1QdjUzWCVYT2FwLDJhcnF0NlJ7OSt6M1Z8OyspY2BuZXg/ITQ3R1J4eEM7RklIWlNSSVF9VHdhcV86ZlUuRHYlaldDe3cydzpbJGM4QEtCS0Q6ej5hUWwm''@;'; put 'put ''MjlqI3oqcUFmSCF+W0FiSWwpbVVkVHdnKXsxe0lea0IvIW0jdVpTI01VfUw3eTI6Y11bcTtIcGxxZmZ7MTxHcFokWjNNQEtMLzI7aDpeaVc0cz0zeFJ7QU9HMDo/WmNRIW1hLl1WY0IuIVhnZnJiX25JZlROTU48NXV3LCtMTVRgViZCLmZpZGN8bFg8Iyk9UEllTFNBVlAoTCgqMXArfHBkaEBw''@;'; put 'put ''TSIqfmlMKEl8bmJTZV8hRmYvPkRTc2tmKnV5K0A9UnszV2ZlcU56Old9YzROMShCUSVRalZXTjNEV3p3aVAhT1sqcVg0Q3BGcFlpQ2NQfkI4SFt6WiVUQyZMIXZvKG4vIWMpKDIufSUvKztea1grYUg0ej8wYmJVdiJwNmkpZSohaXc1JHQ4cnglc2AzaGlQP31db2ImLytSUjs/RHtPWUdOQ1Ip''@;'; put 'put ''NF8kcXslSnNidiJvVzdHQVtuWzEsTWorMHVaYUBHRS5CZHY0ZTprbV1EKTBqJkhrMVg6KVJiR0RjN1VgVEhgZXM/IygsZlR0PzFXaVVxcGl3IXlQX0lwXW54PyRNZSoyTF81YX45YnVEbER+R3ZGVDEjMk1zRX1icSVNKCt3WUAzXjdhMWM6QixsMCNdQUZqR35RPVJ1SXAsblR5OFBWfnpCTWBq''@;'; put 'put ''WXlgYzB3cD06PEk7LkVhMUBiYUJvSkJtLl5iWXpRWnNpLCxPPnVteVkkLElLPTk7P11YSUMwM2d+XmEpWmFYVSh1ZSoyYmpVNmxeYVRZeEl9Tjk2cXcqK1h5QiQ5bDtkRlhXOE9mZTxqUyYqKWNCcG8+PSJYR19aey49KDdoVllZYE09QHd6K0YpIzF6fHB3RXpPfGJSUGRmIXhUdWQwcFhyV1ta''@;'; put 'put ''Rmt9bVJAImRuMWtqPDJmeGlgV3QpMVgqTzB7cXhie1MrOjNwZkZ+REVBbDFCZiVlWnxEbSJGUk07dnhNcDAoUHg5Yko5QldTKD1lMDgvJFg6XT9JRVt1UF1ZZU44eCllOlJJfUBWXiw9JD0uKlBDZHZXNVYuS0Mke055MHlteSx9RG1Xc0N8fTNJU3UyKm9neC4oOHtMS1c9ZnhMb3wrI2ojYihJ''@;'; put 'put ''R25wQU96WC5OOVttOlF1Oj5GWUp0XXhAR2ZCOTRuT1BsYT1iNCoyI0d9NjlNNVg6RXJBSHN6LHN9KVBwMCgudXYyNVYjNjFTVT18eDZpYyRzTUxyZnhFWyw9WWhnVENXTDRPZ1dHY10vNlFwXV4yYihQW20xM2s2JCo9b1tNJShdRkwvdm57UFVeR3JTN0xLVCt8Yj8sLGpDW0Z+KDhJd1UzNHlw''@;'; put 'put ''cWw6ZTNrY1R4YlVBdjZMNW47QipbZTNZSXVSYThjfGdNK2dweEpwazY0N0Q0eFkzK29zdWt3OjIlYUskenJwPyZjJVNERjhWXTRsQlgpc3R3RnpeZz90WmpOeVQhcDYlT1AhMD9PdGQ/THtNbnchKzNXOmhPc3w9T3ojaSl6ejxCPm1oW2UzMDBeSVpdTU9NTnlCIUkyMENlYlE1SVEuX1l1JFos''@;'; put 'put ''LiMyJD87dHtmYWB6Wz1zbWl3dGohUFFILHhiMCprLHJrWGJUe0pLOiIvNyp2NT1LIzJGOzh2KSFOQVM7PV0uYm1lRl5EeUope3E8XWYkQiRnaEZlIj5YPC9zJWM0VndhRnB1fnFHPjk1YjcmR31ORW1iW0l3aG03fURlLDMzSG4xe3wkL0lUSTkwU1ZKJGRodWtaVGR0W3hXeiw1UUk6L0RaKUlr''@;'; put 'put ''P08hdDlVZGt9TGFCJm5ycmRURV5aXjcxYiUlR2BWbD5PeT0/dTY7Mk9NRVF7XjZKIW4rKmYuX2VZQVlgejF1eyJ8KH14OWhFbEgwL0lWKDtod1NqfmYyNENRKnwhfiVsWis9PlZOeXl9ezYsWWJoVjszLDE6bEk6S1ZZRCNbYX4jSn0jMllaLENXbzJYN3E1dF9qXW0yRnBURTdTTHh+MTo1NG02''@;'; put 'put ''eiVZJWNjVGRlPnp3KjxJRX5HbilTImF4bSUsXkM7eGZEYSYqTl4iNDZMQzZHQ2Exe0IqVUtQYlRyfVhxYyEsLFMkOzoqSGUsbn0iR2J3JXVbMjsmO0hUfnR9SD0lbkMkJSpfZUEqYmZ4KCRNS2hNTTcyRyRbeUdNNlcoTSJsP2hrd0FJTTZ2SFM8PHlqaywybVc5fjU5N0cuWFR7RGFxP2lSNkdx''@;'; put 'put ''R216TlBQQ1BeaUZQSFZKQWw3M15KVWFXQllaRExDNH5LdUY2SF18Pk1aUDU7NiNMfj4mfEtdXSF3SGpbZkw0WEg1Mk97N0slfWBWNi4lT3hsej0lcn1zfno2elZtTiQ6X3g2aFZfd282OS88MW0qdVMjaCt6LmF6S2FjNUo/ZzdaRnpqPmJdITNUME5tZyFZMUJWVzBIQTI1KVJWWDRjd2hqYncw''@;'; put 'put ''ZE8lKyV8VjFlT0klXyw5Omdqe3I5ck95TnAiZTU6eGcmcVpIX3RoSkhZITRAMzkjbXF7M24ocD0kbVg2IUUoUCJtSmNtPXc6ZEhiMUtNJSFUYCIlO05jWSp6QUdiPFooeXR6NTFrOG5GPCo4YUBudXpuJlNDJGc9fHh7Pl9EQEsiNDIhTkxwWiRxLmpEXnZGWlFHVyRxNVFHV0J+VlF0e2FAZlpd''@;'; put 'put ''UX1WdSZwW00xSyhNfVhKUDF4OiJGd1RXJWNncTsxSTR8Wk5DPCk1TXhPJWJUWm42P1lyJVprKVUmOCx9Wyp2XS9MQE8xLkg6TjcxWVdecERdcVk2WVRhSmF7ejYsd2g+Z3BmUD81blVAYDM0PVRXVTtPMS4pSnBqXTg6enZnKFJSZE8zZ3YjNGc6IUJ7aSZSNylGTV05dlgpJHFJUjExWDYiX0k2''@;'; put 'put ''OCpTKEAyYlY+VGBRME9AL2FSdGF3alE6OnQpWEpHcyUuIiksWHh2dyh4U0NVTmtkQXxLYShQLChELG95MnU0ekxDQE98TkVJcXJ6KFJbfCQ+S0doZ0k6P3dCXSUjJnApSjw0bCFpejxCaXNoOEoiX3NmeVlpMEQzbF9SL1dQQjlFfnNhYVkiKmcoZS4venFrJTwqcTYlInpnVHVAX3xleE90SEZr''@;'; put 'put ''X18+RHAvcWVxVUpvNnxddFZlaFQoZS5EZjxdTzxYaGdtVHZaLk5pZmV+QDFsNFJGIUNsLDh8QlRXSz1PNlRPQFZ6OUVVM3E1dCpoMDQiaVBDKn0+KjspeUk+RnBjOTZVNUYsUmdqaj1ubEAiKixhNTp4ZkN4RUslYUkpMilhaU1XUE95Vy9EWT9dQ29IbX0+dVg8YHZMWjdyNndvXksibUNPMHR2''@;'; put 'put ''e1pOUiskb2oub0tzKz9VVjcsfDhpcGUxcEFfLCVxSDl+Z2pXSm8xJk9hLEZ6MDhIcnt8JSpTXk1DWF55dG48Yyo9eVpbXTxJNFg+X1BkVj9eWy5MZTltc09vbHp6YXJPUXo0OEMkMU9oWy9AdUY+VCQmT2hpcU84LFVETkBWUWE5Nn1wI19vR1NvU2V4elhoN0tKZj9PXXpiQnFMRylWM11QUU5a''@;'; put 'put ''VHxtSFNZV0kyLFY8MiIjfCZCTE1MIjEmdzArbG82e0xoW2NEeWgmZGljP1RQdFFrYW1rPk8lbjZTZEZyVXNGSDVGZS4wSVI9UkJdfTN2dHIsJXFAJGMlall4QEx8fWdzYkR5aHlSZXxOQ2BBb1U1d3pIXyZeejExK3gkfmc9WUR5SEFpUCRPQ2ByP191YmErfT8kVml2elMoJl5sZmpAPzt9Z3Fs''@;'; put 'put ''REtjSmo4IWRdPEkwb2giZ2VOTVVZU2o4Qml6XVlYQ2BLcVs8RktbOko4QWErfXU9QVBQVWw3UmVoMHVxQSVDO3dAS3FqODFQQ2BEbzJ6d3owOUBwVndKVSxWNX44MG5vfVd2OCpGfW9QUHJaK1gqUSxlLlBaZ21mP1ZIbWU8TF8+MCZZPmgqISk6KXAxWXpDMzlhI2plOyJLQyVtNip8PVNGPSk7''@;'; put 'put ''XXZmfjNFVXJjdG12Kkh+c10pMm02PmdSeXVWXWY5X2orKDh6elRCKiVzU0tgX3pjKygraklWTSNIP0giWjB8X102cjhjbUtNMyU1bj9Iems3eF4/KUtJJk5GcWgzUVpzKU8yWVVTYWF4UnpvOFIzSVBqTCNkWXFhOTowa29pXUxDIiEuazFTbj1RR3p4QUhWdk9CO3lEVVs8WmpHbHpIJmBEIStY''@;'; put 'put ''NSEmZ0kpSDVCJHc/V0I3dndnbys6eD1MekZRZ2wjIkZteTlGXX0qSCRFSDJKISNRRDhGdUxZMT1JOnhmLmZEeX5jbWM3NSJGQzJkYFMibSssLDtmLl86X29ZaGJ8WH1QT2AqWk1hPkhLKk19XkM9KXdPR19hflA+MUQ5SVtPPUlyYFoxQ1gmL3JmQjt6REFMbmBifl95dTNadlFZZSsheVZGfCZR''@;'; put 'put ''Z1dHaGoiZCh3SllGJE9rVl5yWnZ9Sz48LFNGczg4W3hSdUswSW9nL1NiR290YHA8ZiN2N3BRTUJ6P29Td31fSUc9dldJW2V9anR0Kyp9ZXVAL0gsZGd2ejxJIUMxJEAmKkNxKXVZaVB7N0g9cXlZRm5iI0JXUzhhcURWKXJPZD9POmw0eFRyM1cofnl1bzY9WFhKJEdDRCFRQXt0MyVQbHY0czRw''@;'; put 'put ''XUc7WmhRSTUiakBvP1BTO1dpWjUiTCo1WVE8TU4qNFFbIV8xfT90Z0ZuQU1dYDV7bzlrOWp0OG8ibzZTQDt9PU1ycGg1JnI5O0AzfmdZbUo1TUAwYVo8W0FPeHZAakNwcnxRaDlzYiNySVU9QUczTzNnazFEViQ7ZzZbPVl5bHIrJkshOXVpUjBJWjZhSF93KmphL3xiTXMmLDwmQ0trZmBJe25E''@;'; put 'put ''UDlNPVJ1SlZPZl1CT0ohcHlpfCF+R0I7QzkmOyV8SXlIJDl8TSZxM0YjOD12SHV6PV9oQCRNSmE/aXwlNVEjYitnc0JgNG9OJlQ9dHdnMGBwQ1EiWVtLKHByPVhdYzJNT1J1ejFsPnlyKmVGM1tdQG9RPzhpLnl2en55K3I1P3g4ZV1QN3N4OHlleDdGS3FwYXpaMVoxOlMwRGQhWXhPY2xzcGY1''@;'; put 'put ''a29CemNzITtme1hjVUlCTFBudnk6cnJ9dHN7XklpbG4rYGdvW0R1dF5XL0ZON0dqN2VuKnYlNzpYd19GMH56SFhDPXZNJXhxb05aTDFfOUpNInoxR3J+Y1VSYnNELzwxX1JzdGFqfGleSDsrVmxoRm5YOHxHJW0zc3VRenxGKFVMaipIK0k8RGQsXUovNEJwfCRKTyY1YHBbQUV0PChxInVSM0k6''@;'; put 'put ''aEdZVkV0cH1HRVpQM0JkN2RVZjp6RlU8LCtILEsxUk01InV8dExPMUthVUFsYmNSVUMqTVVtKj9IYENUWVIwO3pWLnM+WX1qViQuLEQzaEMsYHIoe0VmRVRCQjJMOWl6RVg5bnFHdmYhSiosK1EreHpINj05bk5ibHs6R0U+aiJ5LkUxOm13TG80Tzo5fT9AY3AsTFBnKl1ALyEkKHs0QW8jJXRa''@;'; put 'put ''a2cvPnx2LGcmQlRgTTFIa1o7YzQsdiZUPEV6KV0sOE1mRH50JGRSaVowaXA4UHd6JkJTb19+REI8TkpNN1UzR1hgPElDdHEpbCNkUXVLc0VedV9obzcpVUFeRnlOKVt5b2BxMEd5SGZUUCI8MDQ5eERkQTZ5e3AuWzRNP0lRLERTRilFcDd7MzFPZTNabWA5SjQvIUw3eypUbjE/SyUlNVBoZ0BW''@;'; put 'put ''dyREKnxNenA4NkpWN3Y6TSlBYTpRWD96QFVJQHlEeEdWWEt5PnEsWX1+ZiZqezV6Kz5fKTRSZiNpazJZRGIwTFAqRXZ7YzZ+JV97NjtCc0xQOlAmRDk5cGFBXld2XnR6RkwrJkUjMGtEMEdLLHBpdHAwMl4wY1QqKUouYktDWHcwNFhRakwhUXwufUFqYzBySnk4YCxkRENjMi58RWhrK3ExKTtr''@;'; put 'put ''fHlUK0RoSm1NUGFfLy9uN2pjbllbd1RlQSFCS0lZNDQwaCIuUXNma1NbKmgwfVhwfTB6UFY1RmpZSSQ8P0RPXk8pLjpEIUA9T2huUW8qLi5uZ3ltUzZVdTp+TGEpSFJlbVJDIVArW3RiRVZ2MXowemZXdT5aQ2pZOVtpZUNmKFB1OUhoXVdpSjtCX3tKPShmc0V5XjhPWVBiUndrfkNNO2JycjIu''@;'; put 'put ''YTpucnAwNjhmM3Yscjx9OCokSTlyMmgycEh3TjhZQXRFUkEvSk1aWz90YWtrOilEXXlfRjgiQ1EjOHlnVk5De1BzSzNsLz5Vdk8hYjlkfEhXYE8hOk1pI19zTXBYaWVObjdQS0x7aWBfYysvKVpwRGR6TDglYCJ7XVczYixbLH5sMWVrJH5ob1hSVUhoLyp1cDY6PmUvW0ZpNTQ9eWw4IltXJjwx''@;'; put 'put ''KVZfTG1vP3dTfTtsfGBiRlBKOmwsd05COnl8IXlXM1hBWV5ZcEdxfSsoRTNBJmI+MSoyV3t6a1JVNyJsM0hHJStMd01YWCN+SkhaQzsrWz07WUsldDJwP3hSXU97dCY0JXdMKC4wW1czJlteTHsyPWI/JWlDcFhjJm5vOCpAWXVfUTRXRWkmV2clRkxSXzYxIn1AeClwTEAlcit5SzNBWlQsd1Az''@;'; put 'put ''SCxTWFRhSjR1Uzw/eUY5ekhHMlhIJjpvK11de2U/X3spbnkpZTE6ImhyeD1SeEpDPG1XelB0UTlEYThDfVlZWlRrekpoIVcudnpiWFJBW1JWWkNlfFg+R0hLSXdnalRSSEhaSThLPk0qfXgvS145MFBgbk83JiI0emJlQn1Ybnt1JXlyRSh1WjBxY05ZcEM4LFJgPXAkQE5LSEg+VG5oTllrcWtx''@;'; put 'put ''V0d6QDtfbDFmLD5HWGpMIXE0W2QiKDozcGNKbS5WQTxVUHxecUJCXjw7c350dmBnaXg3NVNMajh4VW1bP3VFZFFAcixpYXs5Y3AlSCNgcGgjMGxJQzBgIS4sY0ZKaDQ7Pm9wYkdXeS9xSnBEdXw2LF9OYzleNSxlOkskakVJJHlxYEs4YmlHR2NpUnYlOUV8dSVLO2k9V0UjKSY3VXZuWCtAOWsi''@;'; put 'put ''aE1wWX12dTM7UmQ6N2JWOFdxPmcwTnhMR1kwX0pBNTljSm8yKDRLLz9LfEF8RUVLSjZaIyFeKjRfQVkiZ1pSRncpVmQ1InljMCJKeVpbeC4kXUpQe2R3UyZRRGA6YFpvb0x4TVlCaFteUG4vJGVlWz1DXjZuOHIxVVpJPSFfKS9qVWRhSTBZZVt+VTxTfisqJWtITmAseClWWHlpZm5gNCk3JDUp''@;'; put 'put ''YyQ5flVQZkp6Z0U9PWZBKjB9ZUcjTXtAKzwmY1pMN3ppKzB9M0dYS0U0fUYzSXNMR1dqRVAkYCxVQiIrKDlTYVQobF8rK0h2W35oakIqLlZBfT8kM005QF5Weyh+TFQ7XkRtN000Tlp6dyJwNm89RF5DJCNTaHUuMGF5Q2guLDYlKW94cCVKPSY6UC8jZDpZInE6VFF1K2Y0UTczeGVnJUc2RnhL''@;'; put 'put ''MmVTWiRJUFI0QmlqMHZYQkN9L29gPjtUdCZnLD9gSHpVPkBETlkxWGsoI15aeD9BbVJAMGE2WX5vW3lsYD8vbG9QQHVNU1VYV2wlQ3VrQix8LmQkP1NoUWdIb1pnRylVaEdJO15oKHNRUWwudjAkS3VZKk1RQ2lPeX1ZLFRWWEp3W2hBOn1SYU5mR0ZKekZqeXZ7PCxBSGs9UUREP0UlPFFHV1Ul''@;'; put 'put ''VWg4R2s9WzJiJlAoSThvWUhed2ImZHVOUS5QMHhSRExUSSVoR1dHTiE1dil3S31AfmtweEM/O2ZMX0tGYUlZM2tJSDMkLy5qd05+ejJ9ZFF6P2gkKD9VdzhIPzRlaSYwamEwSX1DOT5pYURDT3xxczswPUloTUNQZ3xWWEFud0VEQ2ZrUyZZfV9PY30kSyZMbmMjREJeOFRuNkJnOiE2diRLUDdJ''@;'; put 'put ''PEdUJFM9aT80fiV3SThJS2xHZWY7VS87an5vYG1gdE5oP2h1T1JqMTsuUTJZcnAhaklSMlJkOVQmN3k4JFYrLzN0ak1IYEQpTXZaKWdCMWQ0SkMza25WJDNZYSU/dUk4QHgiMnUsLEJ6YkgqI3lpUjcyOCszYm9rYWhjRk10LkQpeD93T3QzeUM5LEFSMlA4aUNIS3hQb1NFO3h9UGddeX1ELCto''@;'; put 'put ''fnZSamtnIUpCcmtvYClUJFh5LCwqLFZNNi55MFVJe1smfC9tSypATVMxWGFsUFMxfDpiL3B+ezo4V3ZPWEBzdmhxP0wuNX1afi8wciJaL3JSUWl3aTVAaHZ0byFpWypMNkp6em8uN15VXW1yamJpQX1nMXN8LC8rVmFsdkk6QjppUkc6Iy5uZiJWeC5qUnVKMHZaPXd+MntpSUg5RCR8SXpDNH5+''@;'; put 'put ''cEY2PS80Mk11OltNZD9Eb1IvWS9xZVgrIU1AUmp9cGZoZ1RNZ0hAdW1wOkc2SDlUdSl5MjVaQipxdXxzcjAwND5JUlZqaVJiLjJ+SlBEKSZLSG5gTUY7WWk8WDsrRnI1ZyRjeT9beldJSTxMN3BxT2FFdVR2bEByQ01PVFdjaUlRclhyWEkjW1prLlVkYzBJSXtwPEZAaFg3TiFabzE6SjcpVERC''@;'; put 'put ''TWh+KkptNzI6S3ltOjt2QER5VG9dcC4waWhMQ1RXTXdNZm9aJkxsOik9M2lydCw/enBkUSJnfS9ZaVghLyozfj1gKD1hJTAwfWxvJUptSGlwJiV8U1YlUWRFall3aTosY1ZnVzlqZkxuPztIUmlBP0slNTdqL0Q4JGdDKyRVYzRiT3RpTkBVdT9qSV5APzYlRX0mO2NMbzlOYSUlWS5kVWZpaChm''@;'; put 'put ''UncwamxCZmUhZmhmaVQ7YklIeylpakt3cHkvU1IwST5MXyFaZVhlaFQoJWo/JWUpfSsmYWlVXlpsbGNWalRXeTRJdTF9L0pHdVUhITp4KCw6S1FMPE1DaVpxPztwIj1JPWs/ZEUiQnxFRSx9eChMPmg5el9KJnQlXyFqIyEsMSNCfXt+JWFyNHQ3bnhgR2hVYVl3NTQwdTZURTxdXmVLR242UTAq''@;'; put 'put ''a0B4TylrU0dhXn4oTnZ+VERVXUJnYUp2O0ddPWFRP240fFVeXy4lZUBOLiRINihKKUZRdkdkZ2YyKTcjSHZnejRQaURrfUEhRyhLLnlHd1IjSHN1Sj5SNnQ6T2AhT0FpfXJ2N3NGSyo/ZmtsfUlMaXt1Sjx9ZTszfkpyIlA1TEN+bSRHOXBYZU83L1NSYjM9djJwOXxCUFdGfHJ5Smh4UV8sKGdS''@;'; put 'put ''WiIkODFsS259Yz0rZWhxWWpadl0xdGAzRGd6aSZpXkMvfCovK2FHbHopOC9VPHlZKiYuK2BqKmw8OUhJNHgmQztXOlVobUA6biU6bTZ6Ki9bNlZlWX5dX3R+MGU2Ln1qcDs+Ji8xbCNzOz4xd3MzRVZ0Zk5DZWltSnVjRnoiWnFoUk5AbSlxNHZbbFMmdEgwb3h2fkRgXWJgImlufjwiejlZJjVM''@;'; put 'put ''IXxTd2hZL0d+JVsqJXR+YV11KyZncV5HNyZuNzdtOm9yNFZmXVBOOHdROTA2Vn1DMEl+RDFEK3ZrKVd1KD9kRUtOKU1mai4wOHR1K2tSV3E7WyxNfTp9L3lGbGlJM0FnWX10ZmBONzE9I2o9a0VLTE4qWjFmLDVJPF9gbSRCdTl1JTA9OTxleFl1fWlJaW5dS2BxYmp1dHdUaS9fcnx8PihGYmsh''@;'; put 'put ''SEVuU1BpeTxuQ1ByUjNIRGI/XlIoQ0JdWm5vZE9CR2U9eDFSTTQ3dWJ0SGt6V24xSTcpN250ezpnPHAwQnRUYSwpbSlWKHQ2aUA0ajhhaVgke3VzcGh3ZXkvM0tYKTtEKy5WcEg7UW42QXVdekNFIWNQcEhIMjNsenoyR01wdm9DO1F7aDlVU29tYFI8Zl1pU0FpRVJKTjlEKTF+RD9GXmNIanpI''@;'; put 'put ''PzdVaDcrZGxMZXd7bkN4TTw7Jl9ldFgqOih6aCZXcldoWFZSfTBoNnBedSJjdStgbnFgV28+Zmg8YTBYVkpPKEtFWHw9YkM7Wkl0LHZ5T1RqTDtUWUVAQn1CWUV6VXV7eVtFI2hgbGNbXSQ4dTR5dTckKClmJXFpOz0xPzVWMFM6Sy5mQT5QbT9uMUczTypQJC55PyR5Q3dPZWUiMX1LUkpba1U3''@;'; put 'put ''XTMzSjA0Q1p9d0d9QikkeDhHVTAlfkFfXU1HOVJMN1Bmdl4jRWh1PkJCRElZSj02aX5OMV57ZTQvcWV7dS9Gc2ksV3JfWE5BMFN9M0pre1tnXkR+KGlCc2FsQyRIZXxvTmV7ezYrQl9sSFRyd1JGQkNdd2phU3xJV1B2VTxQMz15cWcwTUpkaExVeUo7SDtLKWZgO2IhT0dhdEwhfClZSDtLRnUw''@;'; put 'put ''XjFibmJeMjhGaDkwNXZ6aX5iVmRUam9eRHV5aEFhe3ppWH51eWg5RDNILlFwaTcmVU83IXNSfGg0eiIqKExQZ1VAWFEjSmR7Ml1dV18jZSovPzZNNWZJSz9GRSF0eTNvJiJLOmtvOzd8eHZecWkhXmIyR2h7cE9SJDBANjFzbXZ8ISZpKFAmZyhQWCZoMiMsTGh3enVsQUtrWnElbUhSNTtHTm1r''@;'; put 'put ''MS50ZWRxdE1JUSp9JHJPYXc1R2VKNHpJOjIvLk1JQSpCLnhBQUtPN25iWGEqfHhaUSFuZy5TSF5YODhKekNPWkVBdTlEOkYiTENBQUFBQUFBQUFDIkNoM2xrfFg5TGhENWQwZjUrPCJIan14TnNrdzBqMCFHJk0jWSp0T0AoaUtIZFdtLkBZJDNNOjo5Jms2NTwuO1NfeWcva3xIQjhKX2FjdEJW''@;'; put 'put ''WCFabXI/MikuPWF2WD8vVnNNRz1IaTgwJFdpdChGd19CUGBoUFU9WCIsSntjdEs+Mms5L1U/XzM7YV1LUkZnRkdtejp0Xk4rMEZOcE1VOGo7UDBGU0tjWjc+aTJsWFVbRjB1XSghOW0wJig8Rnt2Mk9iKHckTXk4Qzc7c3ZDdCE9UksvTmxhXnZHMlFJa1ZiK0pGXjY1PFs+Sy8iNjJMRCFAWmUq''@;'; put 'put ''ZD1QX3ElLzE6c1plOkNTUWVtYnxNZXUjNjhPYSNSLnt7Sk4sSVI1UExbW3A5RjJoJEB5clU4eH0oJEhbRG5Pd0t5d2ZYYUgub0lDQjlzZ3x0JnhpcVhucENDcmZ+U0BGZXlCT009MV5zRzdJVTVMX3gmSWtbX3VoMF9UZ0Q1JSIvSGdHQ0xFRFJMIlRiVjpuNGlHTTc0LCtKeXNkTHFZZ3YwZEVj''@;'; put 'put ''JTxQfnUxTi8sMjFLKTxtOWREL2tRdlFxezlMUyhvPnlFaUF+SFcyO3FIVHQ3V3IiXih4NChFa1M+SWo1P2hEak15NGtDISI8VklCX0BUUFB5Kn5VfmgqaipNcHprKXpoOyltYCFudS9CV2AyYnp4SixiM3NWZjNZaCt4dFAobTNxZXF3emVbMzJQajxxJFlxW1t5XTcuPltiP3U1QixGb0hKREdN''@;'; put 'put ''YTtpakF1YlE1U0pRSUxzMF1AQHN2c1NsL3tBRWpSR2Uxc0VrdHY5YjVLQkoieUxiIUJZbXhefUUoTC5YMSFGL0NtMDUvczo/PVB3ZjpDdmV2YC8+UzdXL299WEAmbCQmKEtDT3NeLiliSzZRb1Nhe2Q7Wzx8MmU/OFI4dTpoYixnSWBaQ2ErPEo0YEcyeXJVI0dydng4eG4reV5gTUMwN2RSQm8j''@;'; put 'put ''M05VPSF1M3JjdktpcjBwanxFJHo7ZXt1RHE3ckV+fHQmREkyJmtNJHZVKUkqM19eTl9VIXF1bGQ6W3MuQ3tHb35oPXhIRypDYTtkbFQ8PTBYbjc6WUlWaUx0c1BdK2owX0ZwM2RzZERvI1A/SWFQMHVuTDQ1KHZZaUY1RS5+SkAkKGU2bV1gNURVbU9HOmQkVjVrMDRQVkBlP1szaC5KZ0VyYHFu''@;'; put 'put ''e197Rn1rJDdOISlXcDx6aGB2RFhCKSR8TkQqYDpBPSxZJiYmXW9nXSROWy9fUStGMGlUWTJVamhVRDFnLGZOTWRkXkUrVDxGV1ppWj04TU4pTkchVGVHaD5rTz5ee3xZe0tyYTJxe1ZaaHBPe1UuITVeOyRFKixDM1JlZFcjKFV6PGQ6QFY5V2hxa0taRmkoTyY8fHBMYkhZWn5jdCluI3U8fk08''@;'; put 'put ''PnxzezVuaT5zXm9OfGxDQGNdKXpUaUFrQUtKajZvJi5YUSZEMjspdThbLFs1fF9vSSFCdlcyW1RZMCpeK3E/b3EzVUgjLHtJR3U2di46MChDdVpDeyhoOGNrcFszJWF8azAxIldoZlMpcW11bzdTckpRcHJ0TjprMnR4Wn02QnY8XUZLYTU7Q2FndF9MJWImXkNrJnxQYD1UM0o8R0k3M3U4dj0p''@;'; put 'put ''W25SNGNkW2wkRC5ebDNWZ3x5QyRCRj4sOCxnUFQ/fDxDX113Y21dfEpsbW19XnAwKklUNFA/XTwvVGUpQmJ9RlJbaEhGfFVCbDw/QUY3XUdtKVJnQWVoKjN+KXJVLnNxdGJ2PDNxOytiMl49SS9zQWh0XzszQCh9U05KKEV1bzt+ZC5tJF4kbFZaXX0yOCowTUJ6a28zVC87RTM8SXs9MldIMDpd''@;'; put 'put ''NzBpUkpdYF1iSCl5Kj0zMHt5N0s3a2RxZFlmM3owUFJpNyVCRkhRYlJ8bWlDR04kKSJWYyI4Lyx7MlRve19dQF9lVFYrYVpeQHNWJXl4aWY1NkxaZzFndkhjKn5oQ3o3LH0iVmZlZFA2QzgyYEdKdH04Yj1MKDI2UVV5JX1fVDI/Ono9XV0wOT93bDNvbVFWelo9JVUvdFssMD9hNERybWYlSn1k''@;'; put 'put ''NjlqfCZpWiJ6VT0vZFFmJCZLLEgjTjYlTVEzLGFUXSgqTmV3RXwibj9YYExHKzxMVCtRNnh7QixCSTcyXXkqTzdUK2BuZD8wKCswUEY2ZDA4dV9SNWJwYD50LDtJLH5rK2tSKjBYOShdZkYiN15CIWw4YH18K2pWVjFjNko9XU9aZl5UOWdKYzJOQjlrcWlFN3Q2XiwyKyF1KjhaS2w8WGZoL0Fj''@;'; put 'put ''VlNIY3c4QS4wUFE8RVs7UCNkTGZSeSlyVHJsIjU6dz17Y0xYZCVPXTQ8PktIQDFyJjM2NTFnZDdgS3FmQjZ0ZDJzRGMzYC5eI0lfaVdPLENTS3BIcnk7JFd1JDE/TFtIdTVCNH09PjZ4JlJGTD0hTUA4aEdlJG1HTkA1PFRpIXx0MHxmUFpOfCF+TihzVF4kPHclRlNdYT4hVjo1ajJLYUBPK0V7''@;'; put 'put ''KngxSitRWy9SVDo5RXJwb0xZQWZHPCYoSWI/eS8zTCZlPE1HbV1VXWpXJEV9KE5LJF5QTnB1aEQ9cVt8cyJTbGBtP0BAIlJFLzZuKlUzUVFWS0B1JHdvdEpwWEUpLy97NCZdMjNWWXhjKH5YPkNGJm5PNHFueT8qRDVOL0BhQFF8WWE3MXApXWc5elpsYy9sXTlIUS5RdWRpKXJoRms/eE5SPCU0''@;'; put 'put ''dEZ3SCRia2NzPzhJdDRkblB2Zy42WWY4Slk8YCpLOldMNm5qbjReZTohNj9HUnJwI2ZGVnpWRjd0ZVdfamZwbmE9V20lP31vOUR9YktVandFTm90UzYjfjN5dy5ralkkajs/PEdkQk4mX0g/Ii93S01jZSpXZH1sJTRlPD9Zb0QwZ3UjcCh6PlVWM3R8QnlqMiNQP2FxLyRmY0RuOmpxQVtkWDpi''@;'; put 'put ''KUozal42QndjTiE3XVNvY2dLaTJMajIjYEM3Rl4wRHkyaXBLKE5DUDB7PkJ0ZU8jV1dvZ208LD1OPG1GeyVOPD9yb1ZGZVlrYXs5RkBIPSNiWD87bEp1JDEibFZCeFFeOW9maEwrSEtkWUVHKSYmd1ZhV0E5NkxObEpVdHVwPGtPczI7UzltajJ6WVRvXlJ1QGhdbShnRSV2I2V1QiUpLkJRaW5Q''@;'; put 'put ''JFBjVGp+VSVpaiYuNFI1MCJqKkZwM1lNdzl5dGl5eiFxRHcpYWIlSTc2OmtIbzU1djFdIWlWZ3VjRDZHNXYuLDVbYHMudj9rfT1TN2p6eVdRU0dTcDY6USRobWNwPUBCKUdMYjEqRVR5QHpbMX0qd2E7KE9kPjRHOVNyQC5iJSFPdX46ZSJJVTJVVDB0Q2VeU1M8RVtpPEB8e007eCwqbk8zekFi''@;'; put 'put ''aVo2YCt9N09GdkUoPTJZJklKQFNzdSlXSXEkMiIkMSF4QUg2KyovSFMzfkw3PS8+I3o3ZGpVVmMuO0NDcyxdelQsXURqMSU7aFg2TjM/QnRGWW8iYW9PUFNDYncwUENdTURITWh8fWRGKH56cWNVPHIxYG47bkBeWWU5dSFZNFEkVD81KEhaRGt4Qj0rNE9iVEBfK0tjaGV1cixJZnFSRVRTJkM5''@;'; put 'put ''I2dHcjJuSCMsRXspVSpVcD1feEBOQDZUTWoxb3BHazh7Ujt5YiN4cU1SfmtWUiNPMnpeWWkmbTx+RGhudEReLlRqM1k9dlU8YEI2U3V1SiozeWo/Y1s1UT4mIl8vcH5INCJWP0EkRXtIQGJWYV1APUlifX1RYzNlQUpefChYdGJ5UVB4QiFURkdVOE5ea0lDKzpyTG9pO3tsWFAsbnRPQnVVfllF''@;'; put 'put ''NEZJfEpBe2J4V0pYa3Z9U2NOdWhldWs7VEpeZ1FzYlNKPWBYUF0wZ344Sm1KfFo+ZXsjOCR7JWl9bFRtKlVVIW57OlZ4KENlMWMsbFB5TEBhcHBuPGxqTyV2NHBKXzQrS3U1V0NZOX5DSVRxXXZndFRYZWUxOCQuPXR6PEB6XztWKyx3YDhKQDRzXmNPMVtzSGZkUFZyOTJHKSxXRTssQjV5Qmdd''@;'; put 'put ''QjNwPDQwXW9+TzFFZnREa00mOl8zN01XemdHcD87TVZNQ0xoe1B2K09UTmtRWjtlXVVIYkhMPEl5KC9gKWBZbjx7azomd2xUPThydXBHRD1ZaE13c3pGVyJbWzBPUCJoSiNRXl1wST1lXVckSyNVTUgwdmxVVXQsZl17RisjKjxTZXFVQ2ZMbzcmP2p+fVU3YT5EYWIzbjNrbnJRV0dvSStdQ2oi''@;'; put 'put ''RTwjNik+dWFdMG54dCJVY004I0RXSURwWmx9O3V1WzA1akpNUUQraC5JKnQhdHxYUn1EbnVoZCkwYDxPcHQ+e21CKyIwMFdDMD15UVI2MVFzc31RM2tecEwmS3xWVVlKcjd8NUdMfGhUKGNmOjg0a1RBcDlFMXM0ajsxUjhLZDtaeHp7aE94YVBDOENROiVwXzUzWz9UQERYNnQ7d1Q1Z2J6N0F6''@;'; put 'put ''X3tBIU9LUDBqPElRSFZERD4uLFlVKV1MVy4hbko1aW1xSjgpTkVrNGNvfGgmQ0cpa3AlIk40ZnVhYUdkbyUzKUFqX2woOlYhU0s0RTkmeXE6NGtrNDhfKmBrMTVhc2VrUUc5TWApdlEhTjM0Ij84YmlWe0VlNm8iRF5tUEhGPFdAK2k1RV9iLnZlX1FxdFJVSEpsL31icWFVVXAkNXhnW1R2Ry5b''@;'; put 'put ''e1dQIlNAbURvYD4uZyFqUHxrUHJCdXlJRyF8SC9CSXtwM2d5JGl2NVJUcyF0dUp8XXc4OF9Ubl9VPWh+YiJjSSkwaDtbWVtRM24qW2c1PShbUTdHTmV5aEFDVTJFPkVefVBIODFSbypnUSMvJSk9QHxkTFNyOzc1Kz9GS0JVJUQxUFNANCl1TyREPVNjSks5S2dlXV10PTVbMV5SMWs1OnAhNSJX''@;'; put 'put ''dmglej1YfGgjQCRwMnU4Qm9xJUAjPEp4NCk+XihgLGpzKHsvRztRT2djKV5YTltdIU53bDp9U2whOSV7MVtqL3JRVFQsdHR3WXM2N1EremRhIWZTU3tyZWpsZjdSKD88XmlzUWltam9Xe2dVRHRqe0Bga2x3MUIpU3t3bV9IMDxkQGJ+citdaUwjKWpOTj5ye29yK1NzYE0xemIsK2R4fDJEcUZa''@;'; put 'put ''MUl7JEF5JHBrKUVXMylKLnc7OilVaSVZaXthSDN2dyMsMSlSUWorNDBYK19FTkVfe1ArMnNyL3Y2UF4ld1pFMFNdQU5IOm03Vn5+RU85JCQxK1RaXlt5NlM+IkxTaDJEYEN6cEc3RSpWQk1MWTJYUSo6YVVgN2w9MFNQZFtwOmsrW0tobElJNUlkJiNdLyZUZilHaU01e3lzTUhVa09td3psd25I''@;'; put 'put ''bn1WZ0RrVUZpNGBZUEp6cFdITkg9TjR8d1FmOmc6fUd+YSU4Nl5uczh8JGlPWEk6U0ZrN2p2Ikt3Yzx5OyFieiRXZjdHNzVbbV8/TGJaNDRHVHdbe0ZyKmklbXUsY2NrdyhKd2ZTPTRUNTMkKGEqdTA7b3RReSgvLkBLcms/K29gVC5vcmtlMiQ7Nmd4ODdbJjN2NkFpVXhNZj1mI09rYV5FYjI6''@;'; put 'put ''aCVPWURqVmplbWJPVnwhOEt2bUx4SzIhQ2hSXzJkfSgybE9KckY0PWAqMGM3RVNDYUB0KShAMz42ODhmRU9IVV1ZV2RJO0dOKS9jTWYrQkBxWEV0OGVxVnluMWptNWJAZH0pISFzRlUyMzJ5am04Pkx2NjtUZFZsIUU6RjsmOyE8ViRtb0prOC5gQnlFUUhNeTpwLis0USRreiZaPFklL0gkY1ND''@;'; put 'put ''el1QUGliXVltVyZ+a1AuUD5VMmRPXU48WjEoQH1iOiR7V2txJjFjcj92TixsM2YpJXN7STB+XVJvQj9Tb0Y5RjtvZF9QN0pYNFEqUCk4bjwsaT9aPFs8JCpVekcjTzNVfi5XeVJjfGVySFt0S1QhdERzUTZzWkssfGkkR0w/LG1tRD8xTGwyNShoUnNzUVNYUl9fZ01ATVd9PnQ+b3I0IXBGRWlq''@;'; put 'put ''VnksWlF7O0xlc3R9Wz5bdWhKJi99SFJjfipVeV04eFtOfiRvYlhRcT1lJj9oTSJHZikrd21nITw3ell7Y21KTjhwfD8yQGcqaGY4QTciNlgyREp0UDhQc31bOjsvNkh6PVh9e3hrZUJ3aDI2fXd+fkQ+WWZ+dTsofEhvZCQ4dmQkaSl7RlZ6YHlZIVRwOkYzbUBIMlpgWklZUTZ6OVM4SHRxXXRK''@;'; put 'put ''YjtgJGpMSlU6RzVlOy5DLCx2bTNoYT9APm9JPk4vOXBefW4mPV9gc3BqKnRlS2JlYk14TygqVFlEZyw4RV0xNGo2ay46VmJaT3ljXSxeLCQickA7T1swNkJIOjcwZ3tzZyg/Rlo3bm0vZzNse21xMzUxNmE2LGhxKSg8KGxmMFM9LyRaJnYsKUl5UkxAWX5pRWdSImkycHxzWTI0K2o2KypxS2ZS''@;'; put 'put ''aCMhfjUhXWRqRk9dPz5wTnx4VlksJT5JRW4sKShyZ211dlZSZiFMeTI/VkAqaEUmazNufncpKEZ1cXkhVFNuUFFyWzYuTkhnXmtTQG1JWTwyQkd5P31lO0AoQk02Q0VGS0lme3FBTHxkMmxtRWoua0B6KGBLT2srSERUZC5mZD9+PldBPSh+R3ZaSEh1Sjk/K3ZWKXJCUyxBMWZvMzg0cy81XTw5''@;'; put 'put ''XnduVWZVQWNsMGtuQGtze19we1RxT31pdjg/MDZ6YEVLT11pc3FKTENheiwkMFB5W1V0KlY6cWd3RmdCL2MrPFhjOnxAQEU9dV1mQ3t9Nzt7dHwwPkZqezFxKmssKCNzWmMkczddflIxYkBoaTRwfjxiUGxXKEN+K2BWbW5iPnQ8Q2JGbz5WSG5ONzJKWzE6JldPWHFqdl1dZGsvfD9PPG9oL0dW''@;'; put 'put ''Q3RWWlZdV3F8Pjt1PzBCUDJwQlprPHdaRTZNeFYoT3NeNWhHO0Vve1IsJWhbSW5iM0cyaUthdzhnZGoyeGNFVnpqRUZHWnA5QiJtKmlBITBrbTw+aTZkJFBNRCZOZGQhfV8ubzNAST4+ZDlpQGRZVUgsRikwXVkhR2R9djRaJVphUD8vfSRIVS8+TiJCPEImLmk8Y3dLKiwsRFlvRXd5PCRpM0lh''@;'; put 'put ''P19HWXZUfTNedCY+a2QxSV9CaHQ8MHp5LmZ6cVhubEAia0k3JCN2MilQKiFFemJKKVJNPzoqdiFJXW1ra3oyJj5GTWVffn0jdXVwJCZMay5IZEFMWFVDLzV0dE5PbXJYJFJpNzFlTH0wZGVCI2ZDKmc0Ij1FSl9yQ2R4PCxNSmM8QFQwN1YoajVuYzV2Xy9gdEZwO2tZcHRzLjJ4UDNBM0JwbSp6''@;'; put 'put ''TE9vR0gmcHV1PXtfez5Raj4vJCohfGxmelMpTUJMcnomaWJpXm40SjE2MWNtXz07JX5MVy9fIX5vaV1DN11gW3BTJEJJelBZOl88JkYlbyRQRiovRkt7MXg9Y31ISSJJIz5SeSoqY0lkQ1g8KzwmPDloKH5CS1EkMlFyMSpkPHZ7U1owOjdZfmV8QHU2biNjSj9GRVRaSzt7NXBZOExjRF40Zi8v''@;'; put 'put ''IVhIRVAwOHE4UmhoU2JIOlFFdVIzS3V4JihdT281YTdGcnlYWDFPN2tyPSR1ciFSNmk8X25naSgkKGM9MmBYWyNmVXc/cSpLYjdOT0hkJjtSK3tuQ1N0P2VPXWlPO1pHXWpoNyo8anRHZWhfQ0JxMkU5RWpmNSNiMm5YZllKYyI4dzE1IjFhSVNfLj4wViY5cy97Pl06fX5mNnExMVVQbjJwI3R+''@;'; put 'put ''ZiwuWHspLC8yISlrbVlOV1B1OCo4Mk4jTy5zbT4kQkBwKUEqT3lodldnNlpYcUg1I18rQ0FQSk80V1ZWdUk1akxmQG1eY1MuUFEiU1VWdk1FeExMWm5ae0Jyb2EpMH1ucGl2KFRnSlZOPW12ekgvPiRgXWhaMi5eRkE9Rk54ZV1jSkJEYmQwZm1RYHIoeXYoXyVEYGp3WE5WL3paRyx8UjtNNlNi''@;'; put 'put ''LFROL3w+XU5FSlB1Lzd2VHYrN0YhKGhnU0Y6XncoOUw/JV9TLnF5NCFgS0Uid0w0L24/XzZxKGtgMCRfSyRvLCpfaWlwK1ciU21aJDU0dzZWNkJNaEI9ZTRJQihARSVZOE5OOFRFTVtyOCMhV18xWFIjLE1baHB+UXc6XWtkYHV9azNeREMjMGEyeDdWc29bZTxZVX1WUHFQbSkpOlpPaiFeSW8l''@;'; put 'put ''b3B5SmhCNmBOWj9kOSNsa2RBLEZDLjoiWmdYMFJ9WFpeRSVOMCUjLiNCUnZQP3RFeDAyNVk9U0JdT0ZRdlZEQUQ9O2F+dmZLPUxrdG1he2pySkQ1aG1AY01FQj1zbD5+Mj5ZRGNBKTNoOzAybyI2OUA8bDc/UCNVJlJLLmlJV1hDVmhsLkhQfVZTOUIuQjtBQlJeRDkqTTBpIXFJSHNadHUrRF4x''@;'; put 'put ''cVNZeV4lUER9alNAX0VCfjl8V0k9Q3hQYnlBRDdbXW54ZCxzQnA3YFF4cERnTi9wUF1nTH55U102QmFncGJKUVgqXzA6THV0JTAvJGNZOHB3SWBCQSFRP3s3fGxjcC5EXSZjOyg0UkkoaylTTGovWys2e01GZjV9YlRfSVJIcF9oLGQlTGZrc2BpLjV9aktKKWFMS0R7W3ImVkN8cH18QShoVSVz''@;'; put 'put ''KWk/djs4V0kxZmxzSGQ2V3MmfEdLWD9keHsqPzEqYE0yIVBlQnskMitbNlQ8O0dvV2s4dU8xWVhmfCJlJX5nWVF7JUlCIlQ+YVBUe1E8On1IOWRUUlFzN25MK3VNXWJwciY+WVFbZGJ8bjRzW2hCInBCOTNzVzdraUsub2tNLDJwWGw5R0JgYmNeeCNpQ2ROYXA5Kzcjd14+MWl1O0ovVEN8VVFK''@;'; put 'put ''RF96TDxmP2ZtTW9ac2BjNF5zSVExUDJTMT5bTV1pSGZuT3t9Skc4ZnomajZqaXN7azM8LD85PEpZbTohSnpbST1iSUV4bDxsNzhVWlQ3bVc6ZyN8bXVhO3FhPmwjVD9QNWpHVi5FSWc8dSReeW4veS5XJmJHWSZ6cnEqZGhlI0JwYDMxOlFydF9bSmJIRjImYzpUJHgoWDBZRnV0MkJLPDlDKG89''@;'; put 'put ''R0B7ZUNncURAUTZaOWh6O21iS2hfb0VuMk5TPi58Tz5Eeml4aF9NLHoibzIiPmcmTG5WfHNaJSRASypEe2FTYFtfQlI9LHYqZzQoYTk6QjdqWjxYdztgIVp4amE/Q3A/UmlDW1BuWlV9THRofmhdUSRlK14+UyxRN2oxWyFsLiRvRltOdk46K2liSSNzXnpqNjhTWDBnXlpbWWZpc1V0ckd6U14h''@;'; put 'put ''SyoyIVl5e2g1RCNoIStwN1QsJC9RTmFkM0xZaXl6fFZLYT9Oc0t7X1dZLD0kMGEsVWZWVCZfdmRIQ0hoWXZNKDk4RlNCYldsOCosMCJDbyxkNF94TnAjQyxgPTVdaDBIZHhRVV5TYH5nKHQ7LHMjdiNfJEJTSW1rVHl2eiMlcUg1Pk0vJXRrN1ZGM09BREIzSXoqblt2SzUkZkMocmM/PDVkTDUm''@;'; put 'put ''dCUsZy4rUTl4ImkreVgoPzRdJVsxI3xadm1mQSFPYy8yM3hhKn1nTT97L3MlXWQsMDE0MihbbDghJXJQWCgjTm9kNz41KypLV003cG5PMklDPGA7YEcwNkhgWEsuWiwqQ2M6KUs9QkpDdG9JIVlLbGl9djw3LGZzOzNoVFZRKXJDVFkmWSJgYSJARDBqSC5LcCI1b2FvTzY1Q3gjRHZDYkQ9ZlB5''@;'; put 'put ''W011NywxQX5RNj87dlFYVSRAfXpeZDdyTyhOXnt6OyN1b2RaRmFFTTlrZDBlbEhAT2F2OVcrJjU1QUY2YHNRIjVfSnM4SHZ1PG96NGN4N3JzcHBXJFcoTF89S2QxQ3NpRnR6aWpJbGtsUyJWbEZwJSZDSF10XzRqMk1te0lbdzM+PWhlKVVvYiJqXz1XZTQuVkFAVlkqMCVrbDxLTW1mPF8qcCo1''@;'; put 'put ''amwmJm8zQVZMOWs+fWgxY3tNTm88cUhBPGwuPzR2Q3lUJipJOSMxPnVsfnpaWls8YCIkK0NULnY/b0l9ND1rVF41als3dyo3TSxnTT14Vm50NEtQS1h8TCwsckV7N1dDJHNhPWpGe10jcEp8PVFLPSJwZ2JSN2pILCpbPGYwMzt2R2hpaGJgcVo0MVRpSjNsa3EmMGlyeDReWmY3OCo0d0l9Wn5n''@;'; put 'put ''KUR+di5aPSRFaEJYZExFZSJATXpLd3VVe29YQnVOeHg7P0szfk9fImM2LilIczxOeX03YkVYbDZNVGQrekJbdDtNNURZNzRvI35GL0FGP1RJXUIrYz1rUFVgWilAKissd1ltXUZvP0ZzOz5mMFBkNTZMU3srS0l2eC9pd0lIRjlAXTJvLDo/PlNfbSRmcWV9JFdmfWpfezIhYGp6eFUsVW5MX2FF''@;'; put 'put ''YH1URT5hZGQ9eVs3N3tRJl94LmgwKmErLlIzdXViL2NiUTdEPytaS1AlJGZdbClsM2Fpa3UpJEF3c29kIU9DUnwyMFZBdVpkNl9ubCxaN2gvTj4ycVVqfl97JjlWXz1yWEQsJWJjVEsqVUdpdX0vK3FSaEBLOjxOJWNvKD5ebG5jYV1iKjh0NXkxdiZyZHEzcmVLUGBfO1slJW0lUSRdbyMkQGd6''@;'; put 'put ''fV1tak91e0puXTJ6MWRPY2RpITtoLzQ8O3BtcjB7Jm9rdSI3aUxQbH4rLzV9KUp2YmN8dWQhajd3TVsqI1FHLzpURDMsN19oNHh0cCQmLChDemd0RFtVVX01Ymt2IXo6RjxdOjgqcW0hTFNRemsoOEpSQG9fYF9YbFk/I0hwc3U3YVkhXVomZjVeLkVAbm50W1Fwb2x0K0UlIXElOlM5NkBtYU8y''@;'; put 'put ''UCt2ZWZmRkArdSZ2Zm80ODNlJnRNfHYjSHUjOSpfJFNHNGB7eiw5ZSpsW1FHQDYxfTtoYDwjfkpxY1RSbCF6MiFSciQjaEtKLl44YV9PYj1xVSk/QE9fKGV+M1B2JGd2aEF7c301dTghc3ZRbjQwLmd5eUpJI1k2LC89eDpudFtPZkVMeyYjfDdEYyNpN15FPXwqdTc1cHlJaCopYGZCSnUkbkdJ''@;'; put 'put ''VCU1WG16JmYhNTxHcERPJk5XUyslMytnN3lwX0tGQEtadVVwMSJ5b3c0ZnswUW42cTBNUWQ1Wi88YHl1ZSo7K0oiZDRaWVFAI2xmdkMkOmM7YWIlJG18K2hNOX4oSVpPd3BKd0Z3QzlUMixYfXxlcUQ8ZiFtXyZATk0qLEolVU81bWFXbHh0Y1lhLkxhJVNnZ0VSKEtXeVcqRTwjLmlNdEUqfWhr''@;'; put 'put ''PCVpVkJgP1tgRCNRIXx3TkhJO2tCaFF9cV0pWEVieldFO3ZLL1RwN2pZYSEwflFtKWgmOjVVYndIYHk3Nz5Db2x9b1NbVls1aXxTLjB7U0gmYSJTSCNiKTtqNEpYcy5Bfl5oI0ZWNCE3OXk8ZykyOiRmKiRJS1c5e2ZDK25+IUZvYVYid2IkL1FeeD99XlRUT0hjTDtbeTsyWUh8UUBCX3JEQ150''@;'; put 'put ''ZFQqLEcvM2c0Zzk2fSVrSXpKL0xEe2JzLHt3N1NncGp3eyxeRF5+Jkp9bF1VXUhYWGZ4NmVpb0sudztTTX5XUzNFXXJvbXRxYWtoKHg+S2ElRnhWSVI5T0JvOk0ocWZEdX1kVW9OTzkhTSZ+OFRwXUdEP2d4cFAsKVd4OSJxZ0F6en5UNDxDfEpEWWlHZUg/fnZ4YD13RG1JfXRbQzBecGI1aXlp''@;'; put 'put ''JkRRXnhRVmJRcT9Iezs7W10rMDMpLExFeFlVImA2LDl2U0tfZEhOZFRqOl16SDUqTz8yNnBqSSNgeUApP0N3PnoqcS9JKUkvNC5rTTJNMyx2dy43VVAxVWR3OGhUMn1+Yl5vfSNWRjJCOEZyaSFXST85IzVXTVtrOi8yTC8vU317Q2J4S09QV3A2bz1tYG58fnRMZGhwbj5KemRbRkNXO0V6Sjw4''@;'; put 'put ''T3Yifl4pJkg1K1NvNzpdNVVkWWNgQnRfZlBnSD16Qnc+I1dxQlBWZTR0O1ZAW3tvWUpkSENeQVUpS31NZWNUIyNCOEVrNEZyVEpAV1dXJSw0fml3Q1trOGd9VWtGLzZafHRsLnRFTUM/KXVnYXpKMl5LJXZoW25CakdjXSMoYkNAKz55SWZ9aD5qeD41d1khXUYhelZGO2AuJHVuaVVVUDxGSiht''@;'; put 'put ''SGhaYiJKZkFuamoyYERmdHt2JEROYn1ILHRwQE5TKkIsRl18cV18UEd2JiNRKTZFb0ckKEZdUXF+L21pKSQmOUhMTWNnTktfQUJ6cjpLTz5xQVVwangybzUoWU88Z3t5IyM9aWxQUmB8REV+dTBOd1JSNUgjRkEkMUc4Zjt1W2dOXTBffWZiez5sYHFBVDkkaCM5XSg7QltuMHQiPTZhRStCZ0E4''@;'; put 'put ''aiVhYCliYlQ5JFpyPFVFWXJaLlRPfVJuV3sxbjBPVHtmRDNwakN2IXp4M20yPS5JYTNbNFlMOCRTdXl3MF87eHwoOnRxKCo9R140XyVeZ34yM1lGKCx+ZltlSVZ2aHRNckR3cn4jdVR+I0x2U156KyJCYlQ8TSZTW1QwKlZ8KihRYkpWPUchfTVBdm99OCU5VGkvUX5Pa0VPMyFjR1Y9Y30pTU9b''@;'; put 'put ''IXJuUUZTNVBlS3pSOzQ6RChxWSleS1RwPH4oVllWSSs4TDlGO15MRypGTiFwVlJ1UDxSQTRiNk00NEkiOVIsJiopUHFEclI7X1IkNEMzUkFHP05ueHIxVm99e3dFNlVHfVkwe10+PG1mcyxlRzR0Q0xVaXx7PCpDTUN5Q1AoZkdeWU1daHs7UXdqJXFeKk5JNHRkY2cjbGwpQUBeRmJKd0FET2Az''@;'; put 'put ''N2BxPXt1bDkmPTRpeyI8SWdvRkN8IVkmKlBZTn1+OX0xcFZyUDRhJSh3d3hpYjJxK25aMGNXdHduUFdfIltwfGJyYytWfFd7fG9GPXZVb0dxb2I/UWVmM2F1WUhjPDdZcmQ0TntoOSYwZHlFTXl7MlBKV29kTyFhO0h+dCY/VjZ0YzovdCtVLkJubz1xKDZsQ1RMSEFYQGZaeCovRldyRHVJbElQ''@;'; put 'put ''T01wRVhuNzo2UDpHMDZWOCElZihgPXtQdygsbSZQSWFuWy8mcis9M2tgP1c5OShLOmBJYUpSWi58WTpqaj14WiNPZzpMNjkkPVZBJlZmM3JTNWR8XnRjOlI4NEt3Ny5zdTZSWzJaV243ZUtidk5WRzZqSCI3NjI3eHZhRWo2cmltZ0hUSzFkOyRwTktFI2ZlJj1NTnJ9Kmtqa0I1eHVCPW9OSyZH''@;'; put 'put ''ekNOXyk2NywpSGV9XVFKdF57UlApLn51SSN7LzM5MGNVRHpoRXddVi5UbVJITnliKE56ZVYoUXw8czlFeFpbW0JRTTJDMGx6W35fcE9dbVIuJGBGbFpzWS5ATmVvKjU2XXpFTyFoJlVzO3gyRTleWEZ1O1J1LnElWkxbVTNwLyVOdm1zJiIzcm1TQCt9NioxPmF7RT9fc3xsUzR3eyxQeU9oenNE''@;'; put 'put ''en0iWFg6MXdAVD5aY3tiJF10OklvJlFMNFVVLm9wUVl8WCtsW2dIXlBUeyQscTZZfmQvJng0NyNNMnkwZVBKUHI4YGJGXylmUHt5aCghOlAyIytrbnJpQFAwXUwvX1l2OSlfdj48YUlbQGtfe1AhUzUwX11KY3hOMl4+VktRSSxGR2tmSzBQQGouXkU3XzhbTFAzKCxQWEVUdDVWaG9aVDdwM0U/''@;'; put 'put ''KDIlXSpsaldlQmApWXdtP3oqfU9beF9beDtZJHo2Ky56dEc7MCNBTV8rZT1vTU9jKGR6WX57L01DREJiYFtrMipjIiU2VCZRanhGZUNkcnheUn5LYXpRamc6clEuMkJsU2QrayxibHR5MmBFckUxTTM1NDhGckNSKTNVYUQxVV0vTz9qe08hN14xN1tFXiImfXRsP198T2s6aG5SOileN1FNKXll''@;'; put 'put ''cXowZjlmVFkjKnZkXzcvXlAhbm5afll0bnAuNmtUQHglcWFmKlAhay94OS5fRUVGSXBudjF3VXhnKHFpY29lQnRWelRoR09tWEw4RjR+eSt2MVNWY0NVVVJwfG5QYyNSUm5CUk89cHRwV2ZLQyIpRm5tZmZpVWpfNUpEN0NFOjw7LmBOWFl0a1V0fUlqLlY1ZW12cX56MXYoYlk3V0wmbzBGeztv''@;'; put 'put ''YCR8eXopUXtpcjhSTUlJQW02VXsydT4ibm9wK3khbXIsO0swOmM9SnY9aXRWeCZwZX1oYyVHIStwKGh4M0hjeSJbYFtFdFA+ci9mNW5ISE92bmhDLCJMPihVfntIenoyLCV4dWopZlRJO2IxJShgMU1tWVp+an1YSX4mRW5PZz1bfVJIVCFKLEFMLn5tNngwYm0rTnM0MVZwNVg8YixzIj9Xa098''@;'; put 'put ''Pj82UVN0SGgkX2lQKD9hUW9vSExGVS85V1p3JChoKGVAYmhgQlN6cUg1OVAiejlPKTopdTw+eTsza3l6UWxKS3pjYW1uZyJnezxLOl15LyQlYH10bTA0LFtReCJgd2Q3SVkqUz4pUF5TbntMU19McmskKilLWEUpYXFfcD9uXXM8cThCIjBpPyVVSVpMRTQkOntyOFIwYS93IXc6Ll97LEpYOVF3''@;'; put 'put ''R2tPPnUhSldkUmArQ0FNP1tRP3I2KTYiPiZpWil1Sm4yY05id3FyUVo1WkNLNzMxQS8hdkE/UENlIXpsSHIxKzpRPT9OYUhFeDA9Q0N5bFN2Lk10SEB0MkkjLjN8dzhWZV13dWZBU0dJOUNmNjp1b0xqKTZ1SGRATGdFKih2c3VxaUlbKmdedF5QYWpRX3RwWCsvL0NaU3VXV1VBMjQ1ez1hI3B5''@;'; put 'put ''PDhwI31MckJHJldSRiVnK2FMWl0+JTMoSWcwYHN7RDFSZiIhSzRzbmN0UTpVMnM1WkVrZCNxPW1ld0Z5MipqLHV8SkddYkgiUXN2Klg8Jm93WH4rdD9ua2lHL0U2blkkKUhSREQ5cHJGSzAjSG1tOWssREAhUkF7dXl2T0IrTzlFIWZ4IiUudkV9RlY7XntPZXkiWHZaQjRuXWgvWTppIzh7dWci''@;'; put 'put ''YDY0OSR+KG13MjhubiMrVENtdCNTfVs5ayFhNytrIj5eRTE0SGo7MUR3fHFxN2JpXUg2USZbPGRfQFNmfiRjWzU2LG97NjBQRTJTdTUjJkdFKmVVMkNNalFXfkNsK3tjWnhkMmhAeHNWQThSdSl1NChEI0YoWzl2clMkZ2UiWWNLa19RbzRwbWRyMTlsfWFKRipHJFF2ZT5bNlVsa0NNSG9DM05u''@;'; put 'put ''Qz83bjdtUSFwR3FJRShQOzskOCpIMzg9K0Q5bGtabFtYSFo2VVU1MjJHSzkjXUcsancvR2ROPDR4Z1o/amdIQEx7fjQ0PU1Iay9udFhBKE1pJmVHKVtxfVR1MTVbX1JvUCxEPy86Xnw3VCE9VH4xbH5fR0dPJjAmK1hfMll9SGhGSCwiLH07STVwI21mRj17WXVCRVM/aHJyKyVde0FqZFlrTUR5''@;'; put 'put ''UiwpMW5TPjpsNUVkWW5MTl9mJD9JdGx8RnFRZGpMK2A1c3lXdzE2aW4xW3JmfHwpfmJnSXw1QC5KRld4e2okSyIlJmFUbixxIjlPOUlxZSxtVmJ1N1lRKnk3a1FzRnA3T0YiT2AyIlltLH05N05uKShNP1NGY2dSZEsmQ2A4VVg/TWVxZEg7M2EhKWF9X1MucVNkUXpUbkZ8Mzd8W0RrOFQvY0Nn''@;'; put 'put ''UzRUJmNFKSp+am9zWFBPOCR2cVUjIz9gPyR6PkVWcWl5VWk3akNhT0NtZ1F4Ni5qMD1xUHpia1ciP31GQGREXzk4QnI2OU9mXltVMDk2ZGZycz0jN0NpWmpwL21CUjhaWSwic0FuLEVaZE9VbytyPX4rWXZ7UzhpSFZeaSZkV3tbKVMranxjbiVQd25jZC5jUEQ4ajYkPHxYPEI/eHpzOUxPWWh2''@;'; put 'put ''OWxaekpBcys2ISFATGtOaF9IVldpIWxHb29aT2UsPVU7KlNVN1oxaUMmJG9ETGEseEp4VShEZUpgYTRdPC9LLmlbSTwhYi4yWDlXZn1Ja1hfP183YlZNaE9CaTdfN2ZeYSxjRjZAZXk5IUlEKWcjIkwpdjhVbVRbfiMmPU1rREk+WzUqRWo4a2Bkc2J7OmVVJnwvXWl4R3VfaSQrdDJgbz86ZD83''@;'; put 'put ''NSRtWU1uWktvLz9VdFc3JWRtTz1FQ0plXU8kbyNddFpFMS9DeW4zXjlJUlZ1Y1VXdTVFM0Rzej8vO3g6JHRMRzM/TD5ULFpKZDdBVStQUyUxOE0vXjl3NCFpUShAKEZNWTFId310Z0pMNDQ4bThXdCM5SmxrZWh+aDxYR3guTypfX2NyaH1hNU5NNlYjc2xQaSF3YHJhaHVXYjRLPi4kZig5eC90''@;'; put 'put ''VGRRIyROWDg9KVovL1EjNywjIVk2VzYpZF1jSW8rfShCOHskSlchTzNeNnF3d1YyYkVjc0ppWWs5ZjBjV0ErRCI9eGw9Mjh9RE9MXltnbzRbfFNfS2h7KU1Ic1VgPDNrWyhNU2UjcF5qInJObGkiTFkpKUNWVCtJNnI9M207MGZlQzFJeTYjPmVjayF+QGJzVWtTL3oqJSZ7XTxhNC5vY29wIjVx''@;'; put 'put ''MSs1dTwxenFvJWpbUmVoK3RzQGBGRkQ/KiV4UlU0RXkvRzNGeiVfbTk+d0AsMENFe3ghZmUsUnxLRjhHJHB8XVo/bTEqO2VLenZ6I2BtUWhnM21ufV8wXVkiSjwrKkZHQlZbXV5GTiIqVysieWQ4SEY9e3EzUGdWKVsxKlZmZXIuXmBLV1diJWhKcjArQjpvXTIoSUdXd3FhdHluN1JJPj1RcjJ6''@;'; put 'put ''aSwoV3NmcHw1aCZRTXlRKF9Le2Nifk5nKUAoLGJvfEhlNHVGInozeXNqdEJEUi9tYVVLVyNXfWVyfn4xWnwiVnw5TDFVVEhWKyg8JWZ4fVBkZC9IOjEzbHFRby8sREs7eTpKeGttQVFWVTx5bnM3L0UzMWEzMSpFPixYdzRlOjlpZzg9Y2x1XTlMUF9TKncxZDx0TFthT0dHOnovUyo2bHAja2kv''@;'; put 'put ''M19nR0VIdCNPYFN2fHQvZltVT3E+USp4Vng4IzB9VEpYSXwuNjEifnpqXihZSm4sWmlOWW9WTGUpQ3xkKDRCTC9DblBDZ3A/d2FTRVY6diRvbzojZXdDSmY9LFFLWUgmTFh4YHYoQ0dUYks2ZFh1OX1oTEhwNkx+aC90clR5dDx3Mzc8KElTbWIuMFdHTFg+Q0dOZkJxflJISXhlfEdyTytpblVN''@;'; put 'put ''eGY/R3BNP2JbSUt4ZFBdfCJWSj1MeURAKyEsNjdFK35ici9FfmghR0FPW1JkJGJxQHBONzVDdygxVCFBXmxtcCw9KWwvNVpHPipwMl1zOTpQJiE/ditdeXdvRG0kNUh9bDkwMj5ANlE6JEx9aDIwPGQ4ZSFsVixJZ1FeUVlrLkpMNHBmSlF3SXFVcil7R0FHPjkoS1lXdmZvKlM8TjkmKlZzNHdi''@;'; put 'put ''RH5uclpQWHw3Y2g9N3ljQnx2TjdqVmQlIiEpczwuMF12R3pwNFhCJWozOnRqe0AmZU9sTG1QImdBTXhQdGwwdSVISEVDKylna2pxJS5sY3VRVU9QT1JRd2cpW3VwQlB8MyRWVzE+QixzM2NwVV4jJl9vLlksLmglWSFGNlJedilTI1pSQyVmRCUwP00wKFM8PDIiTGJ+Oj5LQ0Yub3h8Qm9PP2wx''@;'; put 'put ''bnRnVVcwOn4lIVBuMFM5Q31jZng8QnBML3MiUl8vYzZiJlhkISlQJHw4WU9XZH4xSztkVj0iSFFMfXIuYWM5Nkp3aGtPTHU+TylyKTw0P2VHcUFddSxwdzBFWmkja0VOej9EfXYuYkklfTlFc1YrK3BLM34oZU1qP0gxPHsyQFE5fTdCW2dVQkYjXVczYkh5aUdNVjgwOmE5OlJdJG9wX3k/JndQ''@;'; put 'put ''KkFtVj9UTCNfNjNXaDRBRlFWR0RPejVxRU5RJGE3N1UxLDJCL21KeEhzcmt5Y2koek4zIU1NTjpvPiM7ey4+JVo6TTNQelU5Qls2TnJnInQoX2A6LEROeUkyIWdYdyl+PSleXldbSCg3bCRoOFAsOzN1IzZxPFo7KmRUVSkvInwmXWA4K3ZFKDFYT1pmYCgqOEpKK1J8R0VsJkoyLFtPcUspPSVJ''@;'; put 'put ''MGZrWkU7R2RfS3dyVVtBQXUqczJKWm9XOil4R2ksfThhI0hZXU9CXy8zd0FTWTx0NCNKJnh7R0hlcjxrZ3QmVTtDUE9uK10sTkJtZngoJkZITzU7NnRaKyw8dERuYFk7c3FAbVpKWlM/aks/fjkpbUIqOnRHeHdwd2RDT18yY1hUcH5xez8jciZDSEJ7OzQ2JGd7aUBjZWF1e3BePiR2WUlzfmlR''@;'; put 'put ''bkVtWHg3YjpbRmM3SWRwfnQ2LyVNLzBbdSUpMDpYWXdzTl8uRiFkJktGSkkveV07TCRVKlRxfTZeNVo8WlJrO3tJc3QmJFNUSExZOzBiXjZpPzpIdl8kYT5hZ34jJnlyXT55JWRRaUI3RCxlRVtuWFh5SVJARm9aa3VQKU9eUmU+UXpiMiNkRVp5OEolWUpUTiVVaDkxP1tLUUxJQDYick9pTEQ5''@;'; put 'put ''LkV9eERtKkN8cz9zQUlWNjNVQHhEazxPaUdtRTxdUW5TeixvdipsR3cuZUgsRW8zPH1JbXVNWio2bilESXZodWViKC82bEs5OTlYeEpOQV4+SiwjIVVLRmlVXltBeXV0NEs+PmlLY3dXIVNZNld+U1h4MG0hPy5CNS9ScWdlTiYjIi8kIXk8WV1DWVhSNyFMdUU9aVIvZHJYRlE1Y3N8NTxgbEg/''@;'; put 'put ''MUJjK3dVX1AmXTJTR1RTV3AqKnJVcUwiJlROPEJeNngrNGNYdlU5aFpgSkFDWERheWleV1l7NkJvQTVbTnFIR21QNUpAXTB8OyhPPjRTUzpRcDJ8eEVmdWFOQ1BNYTB9bDI4d1kzUENra2UpYTd0Yk1lKWp4ezVJNlR1emN+a3EkRF5SRjU+eklKem9eYmEuXiI2el9YJnlLKDxNWG8xaVVINltL''@;'; put 'put ''Tzk8YlhVZyJofkBYJGJ2JGA+JFVkPkpXOzpjdnd3czddUENRak5gQDVMUmVCfXVrSj1zOEQmUTI+THo9RUJ0dSQud3xSdV0xXlBweS5YJUIoT2VlTmdsKjY2L2s7Z0AlaSM3MTF8ZDVOSU99YkQ2KW9eXV1hcTViU0BXNkk8QGM6ens0bmwrJDxJJStzeDE6ai5Rd1JHW1dpJjBUbHR1d2JDKyJ6''@;'; put 'put ''KXBpZ3pgRGY0amJgXzJ2Kkl2al4seVVjMHtmbTU4L288fkgmXjdtbmdUbUhwe0dbT2B8MyowMTA1O2p4dz92NWo5bFdfTUlveCw5a2hmZncsMUIzfGEuZlZqO09DZHNaRkVMOmdlIT1WSlZ8O3EwO1gua3J8QUAlYktRZ2tpVXIlXWQoNyFxbilDUnlLPkU4QlM1TD53QXN3UVhJNX5iNUlncX5l''@;'; put 'put ''fm9NaENMRU9tdUpYMVUpIWh+KEJ0P0deP3F1K2ZtPX0lWHFdUkRdbEk8biNLdk9VKjhAJXAybmFxeGopL0x7SGE1XndQQGxiPEEqXyE8cmhmIyJbUFVKaSp5Wj48Qlt+PjA+V1FgZyRhbSNbbjo0RzIlN3RoJTp5bTo1OSk1I2dKY2VRd2dXV0dbVFRxS1R3WVsudks8Ilc6e0NEPk0xXUs7amkm''@;'; put 'put ''XVJqfUdoJE5mITlOTyhITjd6Xl5TbChBSTAuQDNqXTEvTXVDPFJlRDxkUzpxUVE8M3NTZ31pLi81VDhMTkNZez9EdGxYUCMzcGRXbyU3O3QuKTosSHF3Tkd5MGBSP2dKWGI6aSZXVD5fcipiWVh+Lmd+dz1gJG9GeGNSXUVQTkJxeixLezRSZkxfZClnKE07ZGpEc2skMV5hNHcrPlZiLkkyVVBL''@;'; put 'put ''bFUjRkdUSEs+XiIkW1ZoNFpiXV16aUhzZWVlUF80RzMxdn5ONjpkX00kcnZteG9qKldpXXwsYzNdTU1kUlIxMmtRaXl5S2Y1MCtycGxYZFAkR08oZnZZcGxLMmJ7YUdLZF5GK1FzdUBTYlM5NEo1cXZ1ZW15LllDIjlHY3U5eig8K0AqU15vM1VSMTV0ZVA1UiNpYjAuVmRxQl9oXllKP3goZS5Z''@;'; put 'put ''a1JwZy5JW2NrbWpsJlgzT3pdXnJZPWZMVEF1ZVg7aCY9UFtQclZdVkxGRWwmKWptR2hKNDRXdStwe2dQNTNuKDo1VX1AeTgjaGQ7PFI4bUdINmVLY3NAWz1NVGVoZ0lFUUJGeWRvYXJRS25maURmUlgxPVNKMmUvSCU0KXNHeChKTV0qSTUxU3d2XXJ9Oz4zcV0rWkVidnJ+ZDtybj5iR3VpNCNr''@;'; put 'put ''U2pEKFBEfTgwLGlYbEE3JGxKbCxROnksNU5EeWVgITxASVZ1Zyg7aUpYMC80VHxPTnVfNHRCb2g7a0IjWVNfLHFzNjopRXxyXUJHLCQ9Qld2JlpwaHkrPyplMCE+azt9QF1QY2YrPzB8S2Jnej1RJGVaQjhJfW5VflZEOlBZY3AuZ3c5I3F8TjBwVWlbei52Qk90MChHa2FNKXNVayszTm5MNzdh''@;'; put 'put ''LyN0dzxRPCs4U2MwOEtIV1dCIVdZPmp5WFNZTXEhM0BAcThCTjlwTTx1eSJvc2h2IytQX1BBPVZ9I3kkVF9Oakw7PGlIejJGPi5EZ2EsO1M5c0VMIz98bVBlNE9mQU8/UU5dSlE2P1ZEd3IsSURnNzJBMUVoaHVfdz5zT0NgQDghLjsxWT91PENMZ1BPMHtkJTk0dnNdLENePUZtdylDLms0Y35d''@;'; put 'put ''V2oiKnRsYm99Vl0sTGMqR2RoMXZVTjFlZXMhQ0hgKVd2Xi44ZnI1Tyw9dUF6PDlBdiNodkopYV5hd19WVG9leWxUQHEvJkM1VnYxXzE0QXVeb1o+d0E/UGshJjxeWGIkWUtLWUhYKGY+VERCaDU/Vj5vKDJuZ3NiSD8yWi9GQD9kM2hOVWhgMU40Wj5iR0lHd3ZeNzMvLkQ3aE9DbWErc1YhI1NK''@;'; put 'put ''RFZkVjhdZlJkeC9QfSpDOVJEXzRgaT9bLCVOZG4+TChSVDM6SmkvWnluT35+eG1mSzcscUpRVnxWMCwzRmRSYXY5KFB3JVhGSDROdVdEaXovZ1FCem44Snd3ckRLR1M9eFs3e25jWHIiN3tlLmpmcGViWnl3K0N1SmJMY25iUm9COklRTnFhR1V9W0QxUFpFfHpHSz55VVEqdVZlRGIjNVZHPjE/''@;'; put 'put ''P19aYVdmTjtoLyU1MUQyRD16fCxQIXlnaXhneW44PnooZ1Q0LnhQZXEyMk1TbUE7aTxrNE1YVj5AWl4ydHt4ZHxRKF1vdGUhNjtPOCNHdCljMWFkWksjYU0rSmBhW1BUdDhiSVc3YmgrT19Vd2U2S0BCaGBETyNHWT9vflYiSTdTQ0FaRm19dlFeXUdBZyUhZn5BdHo+O2k2Pn1nVDAsdVIlQF8l''@;'; put 'put ''U05IYDI4O0Q+KGVmMnl3N3QlSzVSaUFzdC5LODw3cTVRMCVQYX47fDtKaFMjVV9hQHhtS1JDWHBEdzZOdzBzQj1VUjoqfD5rcSQwe0pofW9ZdF5NNndiWCVzfmd6ZEYufGp4WSY8V0pYUTdaKGd5ODlkKXNsMWBeYW81Nm1Hb0s6KTphXmZTd3hhMmEmN2k/L3BTYlJ3OVR0LCg0X2daVnRDPkk7''@;'; put 'put ''S11sOmxKc2U+fWV5OXZveUFHaTQvdmopK3hPbTBJamYqWWlWTlJ6amBzPGM1WXh5RHpFeGkiIUN3XyZFPVExVzdtdnt0NTVlN241SHdxVlFlN0AvJkJmdyE3YkAzPjp6KH4mSzBSLGUvMUNqOWZGX0Eie1I5bUdhNH1nT29fKD8+JTNETjMrTm9ASDMiaGs9RCwxcFAkQmtJZUYlZ29hUjhsQWZo''@;'; put 'put ''TjZQU1FJdCZGVTFuRHI7Q3BoMUJ6JmlnMjd9RUlvIUUiT0peR0crTVl9Llk3cVdabmh9cmUpbn46Ui4hKV1YSUElNTpJJFtVK3Q5WE87MiRKYn0jSkZKMjBwdU9hVFFUbl9RamZYa31ody92SXdyPGdgeH1uWkJhIW5HcmteN2o6djtXQ3h7Qyp+QTQ4fChBJXVkbXFfcHYsUllfMERlOGReakws''@;'; put 'put ''SGhWJnFncDI/XkhiWyh3JWQyfSlsQ0NEfGk9NjQyUTR2UXFaX2JZNWR7UnpLant2QH01c01bVF1EbkQ5VCtqRDlMa1sjOzYqN1csMCVmdnt2Pl9FJXZbej8vLj99KTZNblVkPHx6KXElS3hGX2F7MFNuT0VaeGlNdilLTn0/PHpwS3khJkV6c0cxclk8Q0RHejh9NlZnSFNXYz9CSmM4MWdLZil4''@;'; put 'put ''Y0Y/UDp2ezI5JWskdVg7S1ltOTV5XnVRY3hydVBkNyZFZVA3UUN3ZkV2RmFvdnEyaHF5QkhybzQ5SCQkRk5fQ29eO1FIJHVFXmcwakN4MntBOGZURyMxKVJmIj9vRDtuPSx5QlApVTxVQWJlcnxueGA/fF8hOyxIPHg/ajkvVy5OOzBwJlBLaWhNWkJ7IklJbTRaWSIselBDP2NjMldbZXxib0RO''@;'; put 'put ''QXk9PykhNjcwUGMxYTN3ZFRlTTdub24sV1QmbW42M3t9Slt1azE9Imkpe0ZPeUxOK3Y0KSkuPi5Bd01sZkRuMW8lW25pZF19ZV9xcD5wWVRHWmtGSCs+Zns+PzM6Iz9Bbz1xVWd6bHFhPi4jekoydGh5bGlEdD5MPVV4MlZmeFdjakFQJUh7OzNzbjN9SSxpSXU8U3dnOzAjSFBTVT1jWz51VXEk''@;'; put 'put ''Wi9lZzkqPzJVaT04SEgyWHlAR0JZM2xGQTNaYHtGNX1xQF5xLn12dEkvZDB+cSloIzFaTVBCaDZmLzA0L3pxZ3xQaUhfMnhWb3R8MF9gKThAQEhyRz1wcVMvaktwTXo4fDQ1SmowWnp1JFd+cGN0WDl9QjRzQmB7bTsoUkNxMT1wdShoRW8keXs9Mm8/aXB1cG06N1d9SlhYU1pJQSV9OVNDdXBR''@;'; put 'put ''dVYsWHBkS3M8QWV+Sy4yVGhPfUNqR1lHPk9bJWA5Zm1tYXxpZygwK25rL3lhUyI5Xj85UU0/WiVGNnwvY01TJllfKTRrVSZYSEV1PVg7fTpyeyhoejBGIStGZzpObGVgJjtVMXh2Mk0iTTMxQ1s0dDtZYWJQIWcxPilMVDtIdnwpdH17VlImXmdobVIyfFpMdU5GU2Vwa2RQQ2pqUzVZK2FYODxy''@;'; put 'put ''LDBrJHhGP3k7O0JLX2dIe3JPejJeTl9HWnpINk8xelJEYi5LbyNndXhzO2gockBbUjtKITpERG1KeyZzZiprbjl7QWYkVk5FT2NmPCl8eHcoOz5AakRqc3Z4dU1NQUYyZVlXNH1GOXZVfFZaPGFJVDZ0aGx8ZDVkPER1VVs9IkMpKDhKbWtGVjFTfitOOVh2bDVka0Vjal95e2lzciV8eEZdX1Aw''@;'; put 'put ''X0BdYlU4TVMhJj5VQHZ8YChQdEc6KGYsWFppKUExdlNwYFd5Vks0KDo5MU1hbX5gTEhOTVh9XVhKbDArWVg9L1YlLD9UOXA3RD1IJlF3THhwUSxGOkIubWpOeyx8MU97M24pTDgoeV9RUDZeUkJ9MD41e3s1d3gsXl8iYHRdKlsxYVQpKShAVDpFe3s2WnhFPzU+M1ZCWHJrW0Y+fjFQJTgoX2hq''@;'; put 'put ''WCZAYHZLQ0w/fHI7LDoxYWVibSpZNlJsRVc1fXojeVlITyE2XlJsendNKUc8K2A3dGxPeT5+RE9KWDNbRHRlc2xoaHtDJVdHd3F7SlpyNmB1TWI0UHR7ITdGVl5hcVJoYCVATn1SWmMsPm8ydyNsO3lUdF8jNUVoUkd+Rm19fFJ5azwiL3lnUlUvM3xrTDRoM19rcHFZRHl8cFs6QXJYS01IWTg2''@;'; put 'put ''QHxEPCJ8TlN0K3pLMFQhLyZHKyJMIj4/aD94NXdea0o4b215fHVgPFdsXkpeMzF3YFs8cUR7dyxicldXWVBmaHlUYjU7c3IiayxFSUsvTXhGJWp4XzhxRiJeciZaPGxJJURnXTAmZWk7cz1vdCJsSldKWHJGcGVGTXtAXVZQLnM/QFZ5eTIjNkBOe0pmMj1oS1NlKGgrYCtgIj9PYzAhITQzJmI3''@;'; put 'put ''SzRuX057a0x8JWYhaTtpOHdjQTpRc0hwRW1GdUV4IXlVb1FELnh+UyFHSGJEMUl2eWAleko+WSppV281MmxFInFUTzBbRnQjTWZzc0M8NXB+L1JtRFhuKlsjdXxEfCxHMkZQKGZ2dm1xXVpEOVdaT2IheGhGdmNhOkBxfmlTVyY0Wz50cTBUNiMkWUl6NGdDNCM9Q3ZZOSl0M0hSRCFgJmdbc2Jh''@;'; put 'put ''XntGaEVsczB9aVtCIiF+KFs7SnxWY19YKU9nXnY4PlV5LzZoSyNQS3ExezE0RXpeNVh2NXZ3SE5GMUpyNFMwaHRncVU+Imp3Pnw7U1BiNn07PndRWk1SOWM+PTtNLFdSIjd1WllgJHkjZy4mOmkvPlhXfjQ+WC9ZVWVQNDg6ODxdVTQqXldbZmxVWiEhX3VLNVpoJS9GYChfLltRfm9HIUphOSFI''@;'; put 'put ''fk9FWWdGXWpObz5CNnJqP01tQmNjc3cwJSZkRF50NjpnJnZdVSJRQnJRbj5ody99RjhkUUZCMTs/NnFydCFNZXhtSyshYWchc1tWdzRuR2whT3YiUSVOVGw3YDgoVVZmTWI+OSpZa3JMNlNrbUtOXm49VFhxYFJkJFdle1QsdG9WWUN+YzEqeTRlOikwSjJnR1ZEcnh5UFZMN3g5KF1EUEMudlRE''@;'; put 'put ''ZWRQckFYUjNxYWRATnUze30vJV49V3lSNUBbP2M7fFp2eT5FOFI2fkQ3Ymc3RC4zTC4mW246NEcqcyRXfXhAITx+ZGFYOGM6YiZbT1V6enFJSz8yZzshPTBNIztWKyZnY2QxL0ZkeUYrWExzPn5xTH4wdWxrcXEiSyh7WD4wSFhKfEMkenVXfXszQCkmUj11UUQ1Zmd9Y2YoYHI2N2xOWWpAcVdm''@;'; put 'put ''aC9LWjwkejkqWWM8Pm9tNjdFI000WThVdTpSYDhxVmlGaiJPO2B5SHppeDV9UTJsUGQ/SXJGPDNxb0FnYlg4Q11VT0R7cDo0aS5FSDlHWDgjPWYzdUVnOXFsZnFaZnR1ZmAxaTVSWDFKOjtfPmFZRkpOIXFOdi5ZeTR+LyhRPSR4K0c/S21qTk5ZYyI7UjRAfEYjX0ZDTiYkcGpLTHooOSpuWVl7''@;'; put 'put ''K3hxbzpVPk4/MEw0JDxqKl9oVm87Mi80K2BwOUw1XVtCQ3JHYV9bOykyb2I+dT5SMHBFK1lwOTVhcnN6TDZdOk9MNi56PTVyL3B4ZnBbISEqOUZAR1ZfQ215Ono4N2NEfWB1ST15fCssdExDQWFoJT4xcXBOS3tUS3oxYFp0eDpsTUk+YSQwYiN6Smo1YUVCM295UFExYUNRc01mWGMqSE1AXX5O''@;'; put 'put ''PjQkaX5pSlYhUUl8fTkzKG0kJjxDPCF1S19oP3tkcT5nO15ndnBiQ10jNjpDUWJ6WVZZYDlEbk41PisjeiVHfnB5YCVLc20uP11ZY2tIQCtWfllXfCNyej0rWSoqYXJ1PyIxWThLPkB3NCN8anZ4d0swalB5SWQzMCkwa11Bcn09N1R4QDVdMX1AWUFSQGVoZWh+dHlZKSpEKVFBezl3LEw4M3tN''@;'; put 'put ''JSxlLH49dlpOM19BS20uNCFeQVgzNVhSKV9hRnJXa3JnWz9QLmw5bktZaXt8VzRkYFNpWDl+SzAobEElU2tsJH5sWntFbEZnTmVOVW9mKzZEcFdQIXk7dlh5czNJIUFiVHQ5SFA6Vmw8djVqWWA/WkcsZzZEfERHc2FLSyUxa3JSTjZKVUpOVn1wIzt9ZjlXNXQlalpXdDRtKDdqWUVqcCVsQmd5''@;'; put 'put ''aFJQWSx9LkM2ZEA2aklyZGkjbFFiPiFRO08ldlQ7QzZ9dEhzI3w3VjAiUEpJcWhAJXRaJUVvdCt9M2FXTjdgfT9RREZDZjEvTGJHKmdjWHtRalooPD45fDg3VVNKcG8xT2lxfDBhcFsxfSxTJENdU29jJDpDRkEsQH50cSplbE5bM2p2QGs3LisiP3YpaFQ+TiZpQSNzYElITlhSazVNInkhKl9H''@;'; put 'put ''R0ZSUT41PkwuPUxxOEZ9OXF3VFNXREMrKiFeemVLbE1xJSl4fDJlMmZGfHtvK1toQChGeXY/cFdOVVRiOXQ6Ol9eNlhXby40Uj1DMDBxY2Urdz98ejtUbERiNWd2OUcvIm4/Zkdpd0ciTXZtfU1deGd6bitbUVBnUFBVWiksclN7UTs7M21ZbiI5SX1ZTFF2d1ZlbEs+JEV0JXs8MUBPI2tNe15d''@;'; put 'put ''djt0K0B0fTVGQGBmeHM7QnowQ2opeWBBT25pTzZAOV8xVUtEWVhQXzFaZGR9V1ZRVX5kYEtvLDYpOG40TWZrNSExR2lzJD8vdWxza28rUTsvTV9TUTopc1lgMWYjOHMqbjhROHk2bi5qSngsWlpdT1EkUndkTXAkfUQvVXVDczEuPVFYd0RoInVUXywqZTZBd2Uka2lVXipYW2hdXzo5R05nQ3c2''@;'; put 'put ''XjV3MTZYWTBVP2NgVT9QZDVkUEBpSFEmImNeIUNvN3RvL1lUS3s6ZkR0SzYvVzZgLEJvK2hOW28zR0xaTXNrNTFVK2xjOjBJLjMxRUVKcFFtTk1MfCwxSjh5eC5zelsvbFtfUi9OYGQyMC5lcFV1TkY2ZXRfbW14M3haW2ZYaXUoQy96NnNkMyZkeGNgbyZuQSFwbFN3JFlmPE9Eb1MyWzFvRn4q''@;'; put 'put ''L3tKbnRYR0xod1gwXUlSPyFDdiN1UypwKTtAQSRKJHcsdVdndl8wbCNTVkI2TDUpMXgqdXk7X3s+fl1dYXFXP1tXQCYjZjgkdVY0bChXO1pKSDxrIzBTfVhJMSNsZz89cjwqRENKMmQsMCVbUXMyfElCNl1fOiZsXnU/dzVzcmNlRzFiXlgyNTwoeWx7L1ZiaGhOJFtWaDptX2siIzU1ZWBMZEZx''@;'; put 'put ''RD54cX5pXX4kY2l8PHljeyM/RUB9dWFyPy9VVUJiTndAV0tSQ1M7N2Jka2w+JTdFTj93UjllWlh4OCFHe0dZZmlOeGchWD9AP0k8ZjgvN2QkWFhmSUheSVcjTHArOSJhUjR3V1h2RyQ+K1t6dkY8dll8NVNCaXpSfkBxdmVbdnNxaUAwdSx0cmJvV0IhPVhUVmtwUExnR2F9bDBoOFF+Zmo7QlJz''@;'; put 'put ''fCJyQT0yPTJrYldRbiI2JClATElyOChyI3E/e2YzVGp6bDJLdnZANkN6UmNqKn4wblFrLzVPMDohXkU2TEFKVkVBXmErSyU4c2BGfWNUOTZWYUw7UiwiOz8jRHFsMyVoUnxudVNndj10UWshckldYzgmTkxIfTROfWlCZnY0ZmVuVGIjTCI2IjFHTlJDO25gSzNdeTo6YiNHViwmOEVXMDpUdUtO''@;'; put 'put ''b3E0TzdYbmI0L1g0alFsakFdd3VUODIkKzhMdDJFciw5fVtIakBpWEk5bEBjWH1iRk5YNG43Sik2WkAqIzVqdXt8Y3lFQ1ZUOmpGV0F+TzF4ZFc7fCRrKWpmYDsrRFc2KllsekBxej44IXR2Qm5fRVRyKkA4S3toQkBqbEVOUUovKmEpV3Nqdk0waV5RbS48aFVJcjRgWlJWZExeX28wTi8vbzd8''@;'; put 'put ''dnk6a1Y/SGlOJV4wdnd8VzxaWXhzbE41enhXeT9tTXMsWGlRPF41UyU7L24zKGExRGVVVWBuUDhOUn19TStdSlhNKmg+byFWSXI0PUNjJCF3ZX1NZX4qbkkhekY9QU5na1gsTkRuUnBVbiw/MnhTc2BqZGBUWV5EaktjY0NSemwvd2BrW0VTZjk3RVZHTX1hTWdqaSQqMl1WZjIvRGtGcmIhLndy''@;'; put 'put ''fVB+MGEvOEgzOXJqTnt3UiJgZWEyMkMuJUQkIWI3SXRjd1BeVmordkh5WHN7MT1jaFkxemAmPmxsI18iLHR4cz9JSWFHfFtbK05CKUReKChbaStaRE8yPk1PQmBuRVdlZ0RpLDx2VHwkTjFEQEpLVHpDKXN4Y3xCTW4lTyg2PiR+YyNsQSZEb048LjMvQkNjb085Y242SV86V1EkSWpQYyZqPmIu''@;'; put 'put ''SEVmYjtIKkJaLH0saylqS2dSIzUqc0d7YiVyNll8QSQ8bH5jcHAzJCF3JEBsTzlBdT4wJDxqTl91cXFLdiNbWSNeRFlkXmEoMTgsfUMqZkVeZ1pZPVIxLiJFNmlfeCt7fSwvXzhqQm9Cb21eV19WW3cremhSanY1ZXN3dSVXdC46N3AhcCJ5SXtlPV5jLkZ9NH57an00O3xNYCpMRV1RNHRmalZV''@;'; put 'put ''fWk3UkF9eEN9djR6eW89TyYkTUtpVClbJTgxRkF5WWEwajtbUDNBaFkhWzRHbmwuUTJPRC5JfVFze3p3RnJpT2lpQHMwZVgufXtkPTlOPVVDJUh3JnQsO1FLZ3pGK05weHFDcWlPZ0tGTEVKeDxqYiZzbW5bVHVlKGZBRFp9QyEoJUZgcVU8NGljUj58R0BXVnUlLzQmJE03aWFmbEN0UHhoNkpz''@;'; put 'put ''cHVzc1clMEtselZ7WkA4OSJMKCxHN01OQz97YXBoaE09JTI2VXJDeVp9VSM6MyVDaCFKVn0/bmV3YS52MjI+TzdtMjdxLlVQNiY8ZHluLkN0Q1dIJjZfPmpqPiZhTz9AK045ZUdBR3A8YWJxaHBNfFlrL3t8I2RaTFB9Wng1bXBbOlJdI2xCeCZJUTxQeHMqOSgmcGw9WEEoWz5DI2xXeCtScDB9''@;'; put 'put ''Ii9UPXNSe3dAOk5xU24sZjlROGtfeVZPfW43NDRJT0d3Pm51KzByazBFKG9oUnxCSWEpMyM1XmkxcHFlRyFpZDQ9PW81bkZoXl1QcShETF1SIjlUXXg2NmZvZ2VUeyRzP0JJYih8Ty8kNS4+MnE4K3tVUV5nVVcsbT54TCMpQVA8Lm0laF86Q2RadmlaUlNQYUJnYGZNYCo6LyM8ejheRlI/VENW''@;'; put 'put ''bTdGVlFLZk1idlU2Ui8hMHphTllnejVre0IjfmJJdlg1ZT5XKzpHKHpUb3hnXlFhRGE3YXlIOGRGflszcXw8dmRETllpYFQqSEdvPnMuKS4yMlVeJmhPNzlQMWdoclIlITJ1YUJ0RE5hQ2olJERvKS5nTywmcV9iVCRzeyhGXUFJcWQzMEdYR2RhRkdsKU5aLExNLHdEO0hdQ3dbNDVQZW5sIX0+''@;'; put 'put ''ciUqb3pnOmtvdVMmY2M8PWslZSw3MDJkNmdiK2NtZFpbOy9SVFpuQEFYNCxDN3wqbnR4RmhVQl01dWZMOD4zMTMkQDRofWp6WiM7Y192QnI2eXhONzFLbSg9XWN2QiUoT1AmQXVPfml6ZWBJdlskLl5sSF03KlVMcVo3SVR9VHFoNVp6LGYjYFMqa2tHc0kqUGdDQ257aWRVdFJiPlojWTxrdTs7''@;'; put 'put ''ZFdLK05+LnovVyp6bjZBZGpkeklIWnc1Oj1xREpHcnJAPlYyemNScD1WZ2VeTylbaDMld1gqJXdre1hpSSx3MV5qPyVyJGlVbnZQcl57blkzNEBCLmJeYVYkSTNafi92fW5XaSF5OVB0U19dKDZNcHR5aW9QeHg3O3wuZWhyQFI2V1B6al53UXAmQkNtOjs6NyRJVEwiNGg0KXldd0YpejU1Izc/''@;'; put 'put ''cSVBIiM/Zj9OcDxAajhhYCJfdTskKkYpST5MOUxLdllCaW5vS3dYUkNWeDhJMGl0bGd9cGYlNlppcGF6I3thMFIjVUAmQTdrbkZMdVkqRXtVPzpYV2Mza3NVOFo1RVFTfVpNSz4mRzo+Vzt9TlQ0XUM7KW81SUpfMmpuTyhwImREYlJrYGpsUmgoIVlGN1lwfjZdRytWTCg9LCpGeCYwa2Rpcm5L''@;'; put 'put ''MzRiZSRqL3QxNEEudl43bTcpLjk6R1cuXk1fU3VsKDh4aldVWH0vbHEqcy59ViNIRVBzRG1Me3woVy8ucTdrLEpqQE5DUlNJWUk0PH1EcjxYbE9wRl4pQk4melFPYkFHMlEyOixxclB7P2ZSImJoKXdlc0hiInhNO2dCT2RdKjhGeHZDO1JrZFpGW3hgSmpJaF0+XTQiJHU9SihvYCN0fGNXMGw4''@;'; put 'put ''dVI+OzRUL3dIVXE2UDB0UENOaT5AKmx4XV56Wm9IXVYsT193aV59fEZvdmd9VlhgaEh8QjhNdURSUjQkYlZ8PmxUV2hgQn5tQF1odz5WPU5acC4yYUwqI1BaOTI7a181NEk3azxgLllXfS86VVF7dUQ4dCNFWV41RmZmcW1GaylwW0t1U20hJSg7NkI2VzNnSVk1TU8kUGVKLjApMUBwS1kqZnV+''@;'; put 'put ''VCp5NFgwSm59PVowfjtIaGYobkl7eFJqM2o1QTtKU0VOWU9gP1tNMDZXR21wKWFXRXRWYT94RjM8clo5UWAkeUBiRDg/UWVHVWMiIjgmbU15VHFUNnRuNShteSMhc2wkVWVRbldDZn1NS3M/ZEQwKVlVfnciQ3d9RGZ8Uz4yMyk+XVJZXTAzSVR7XyQ8a0NAVWRWS3V0bjtuRkdJLlMpLmFoTFs3''@;'; put 'put ''JnUma0NhOy9HTjM6d1hicjFtdWtbX0hRUWlQZzpYcm8pXXlxRm1WZnZkW0kmd3ZMXVlDW0k6dyZfZi4jSXs6ITEwWiloYFdRfVpFfnJmcytVP2Rdc113PnBsOmhTLz1QcHpsJjNMZFJkKkV1PF8kITYseVNfRnwmO3peeUdZcXluZW5ZUHZBQXYkXShhVilrMXBjWEEyRXh1ZT13bDNUSCwlbT03''@;'; put 'put ''PWI1Z2ZYbC8mV3pZY15jOyRXe0pbIjphIWZWd110NSg6Kl8xMT1SVFMzQExUej9CMWohclROUipLdEEhTHlFNVksSEttLFtpcD19UE1eflBifUZEZjBPV0A/MWYjP0tmRWB1fk8mO0khYEBiM0BeaFY0JkkifUVhVVU4S2dwQmosPlVPLk4kdS9hNkBDKF1XLmZYXWN8VCspUkgoS0lwUkRXR0xg''@;'; put 'put ''MHNfdXlFMF87Ojg/fkBMM3RCY1U2JF1MIld1K0JzIlpMaVcyVDwpdWdLK0IhPiMiR3VEbD5WNiwsbyNvYDVTNDk8U0Y2RTF2Vm93Lyh2d3dxPVlhPXpZdTMzXm0xdF0sYVhYVVpuPCsmcTgxVk13OHY4cEN6WWw5VWVrbTh0eXlEVkxZVnlQTG08KFtpfjolQzRHZDN6dW95Ul9lYFUiY2xoXThJ''@;'; put 'put ''VVpvTF9JZnA7a0I6I2tLOXY+TUUkJTR0eFVFSSRicFBKcjVXT144filHalUmJHs9O0FBYFBtelJwd0w0KiNJJkYuZi8+VTJGOX5ZfVguX0c5SDlvaEA4T2FuMnVLTlc8YkR5YGcuJCtzak4xM200PlBidmJtKWQ9TFYwLH55VCNNNWRkcDN4MCxBLnw4THdsKHx5LHR7bl87ek9+U2pDUkdpbUtV''@;'; put 'put ''PSllMDlmPUNuTGdCSSw0SU1wZ0pzI3xlYn0yNCY4N0Z0cF8oUzYvMHZHKVE/akxVeUB1eTlkKmlQSj9rczNUTXJmIWI5UFQ/bEBaRH1aRlZMYDFIMTRZM2hbPDNfZmosLClXWz4sZnJ8TTppIitNPExwSEZ0LHZ4VCxmdVQ3WmRGQTx8VDk1fXJLVFg0QjRAMVIpRlp4UD1JNWhZNkhiR3g3Iitg''@;'; put 'put ''akdIXkl0ZWlZJntVZXd6YDdVfEM5KiZdSE9ZVltkTz8uRFAlLGphaFlYXWlpVXVnQjlXdHFVQkwpTWRMMlsxQGVVY11NQ1QhRj1KczV7Tk1fRWthQCtqO0o3dUYxIixbX2tMfFdjd0FUN0gsKEVFNC5SV1t1V1QvUlRfSyh2KlhjYE99M2QuXmhEXlB4eW1rfn43M1BGP2R9Yz1XZFNHK2wlODo8''@;'; put 'put ''QSlWVGBxMEM+SDcjJGhVO1V6dSFKWWcuVW1LTU4+MkpKI1dYT0lHbDdXSGQuaklrL3guaVtZeyVUOjNIXmwxNWAmLDl5az5Uem0/aEpPJUpfK0w+XjxRaUhOamVkU01RVHBrQGIjRCF3NCZVVzApPXNKajIzZnJweFA+MEg7RWFydFtpdkVzUCR8VD93ayQwQ3lzQy5kNiViOyg9ak1xQlt5aWJ4''@;'; put 'put ''fjVZcDBqazc4ek96RkVfWjxCYTRlVVhuajkqPTJDd2U1SSxbeWt0eTE3Y2ZMYUkpSCpSPyhVZ2Q8OWVtP24uOExqSURLSzd1cXtOOzV2RGN5JmdJIUpVeEJ5U0tORlZIMlVEZSlGJkYyTlYvYGlGT2ZVYFJKPFdrKWFYTzE9VCRtc10+JGErd1EmUXF6ZWFCcn14OlAsYDNUVmF0QHExOFNGL0Rw''@;'; put 'put ''aXd6R2dwajhUX1toTj0/SXNVenJEZFUsRnorUSM/T1dGfldQQWw7KjxURClSJUx1eEJzbCVgQk15MHd+NkhEaiFfZ2QsJnVsbmhgJHxaRTdIJU1xIkZbV0xpNz92WHE2ITJMMk1sLiNqUEREVD54W2I7STVSS0F1YF1ob1tGLjk1W2p5JS5mKD1NPl17IUp3aDh2YTtDQyUyTDwoU3s3JXE6RnBd''@;'; put 'put ''QT9tVG56WGdPYFZqQ0c1Nyp5N2JEdGRaSmlSZWN9eTMvKHFpKStZZiQvLm9ZLm1lX3xgaCxLd29SPXI3X1k0Y1JEYSRdaSxbJjp4VCVJP2ZRKT0hM0I+Yy4yWUZ9clEkfDtnUC5DKi83PjtOQEZoWTBJdEZQc0BDLF9kVXx8PmJZYEUiazVGQGM4MlZwejFDSS5EKjlFMmt7T2VQdi8jclprM3ZS''@;'; put 'put ''OjoxanpUV0h+Rn57eHxAQVsyU3UhIzxFX2p9WUw5e1BgZUI4dSojV1cpIzxvOzlkTSV4djlQQTo9I3ckeGd5X3NMYCopeThleXQmbD5KT2l4Mn1pdGBtRWprVkUqJnZFW2I4ZS9yUElTKUtMZnFpYSFQS3Q+WGxCYyxbem16W0t0TVgjP09IVCJLfEo8XlBENWdsQXY3SDg9ayJaMk4xU2M8ekpY''@;'; put 'put ''QXBgQzRGT1IyW2s+V3JPTXNWLHheW2hValY/QTRxPDEzTF9iPytxJUdFbHIjWTN8Jk01TDZlfXdmW25RbllFND8rPUlCJmpSfCpeY3E2fTxZLmMrJDZ6PiQhIXdZaHNAcEZ4Q3VPeThXKDxUSzo+VS9fV0FhJUIlR0xLNDppdyVtOzZvXVBQNEx4K10zV09ROjY2bT41LiFAZEIwbnNrYmpGcE4l''@;'; put 'put ''QSJddlhZJjZmRE8hNTNPTi5dZUEpKTE6bGx9eEpeOWIjRTprQkh3SnFXSU95czF6V3khLHQqNyE7eWtvKWl1Qj5LVHopKTU8PEljZkxFMjFCMWJaZHtjIy9hQDczTD5SMzVyOH5efXUwJDdYTV4sQV1yOnQ4Kyk/c2NAVSIyQ1pJTF98TEB4PkNeQzt9bV9tW0g3UTtqYmxSYnhyZklJQlhKdiRH''@;'; put 'put ''NVUhSktydmtJM292NixkbC5sNT9zYlA9aCpuZDJsZj5CZVtDKSxqRUYoRzRDO1lxXXhPKDdlNk1zJlcjLjU5KzNgXkh0LFl3RH5JWT05ekQ6dnwxVytxT1tqYWp0aT8sZmUpMDdMUDopIjo3ajpwbSl9IzNhe2Yhe05KKF1mKUFRQj4uel9oXVNhdilUX2QsV0NNcmRFd2RmJSlhKWFWWiF6Ri5l''@;'; put 'put ''cWxKWkFPV1hSVDh3PTVIeSxnWCtUfnFFX159YVFieDgmVHg1LHw1SjQ5UHxeNSxyQGlMQyt2SSE+YkdNKVpHYi92aWh6Sk94Zkk+WUp8Pjh0PVN+bClBQGoiTXQmV3hxUDpjdik9XnhXRzlrJVlNQ1g+RH5uaERqeHkoaktCSGBqPFlGUnU3MyV2a2siaX1XIUQ9dC8raV9+TUJTZUlpVW1gd0Ng''@;'; put 'put ''TXt+U1Q9QypWJGFqditDSjViNjlMckpLSy43fmoiaV5zJTZfeUF6dXUpamxPNGxzLis9TFVaJUhlZHQkfDppI0ZjO0pFQy42QE4zL3ZUfHMhSU1JTzl4cHV1TEFOSD5AYHtzU29wJWokUVV3RjxFRkIvKEVHZGIyfl1kPHM1PHY6dmdvSXdxUSp0UjZmNmpoSiZgd0JJO01LdzZaMSFPIiFvTU9i''@;'; put 'put ''NFVtVE55LipKP0FFUXg4a2liOkJFelZacCgwdlJTNXZsZF09MSlwZkF2SThWP3sjdk4hLko4NmMkaUBffkAjKnkuX3N9RjMlITBNfklrX2xvfV1RKXMzMTdwVkhSfmY4X0xeNTZ6dlovcUx3TFY+eX52OjwmJHNLWWdbU0ZfU243UllsJnNFNFhiOWdANzViXmJZKV5hJnEsOkNjT3NYIkMqUTJ1''@;'; put 'put ''XlRDKzMuPHJBQ2goXUlRW3J2cVdbMHNzRS9KSX1mP0svdF1SNHRGNU1gayVjd3V9WS4waCt+Sjk6Ql8mNGNJb3l7JDBgeiVtQiREWDROa21IfHQhNTMjKUBSY0koSzdhVkg0V08kSFV5P30lejxzREBKNGNWNihYKH54Kng6WlVJK2VYcytaQ2A7IUVgS15KOHxYW1o4XWUvNjRvWnMjTUpfPkxX''@;'; put 'put ''RjF9VSpJUj4hKjYsOjIyPzpZNGFaNyYveXBUaDRHMWcrO0p4fHR3PDJDOkp7Y2QpPzp1cX5qV3oqQ35wSWVyTk8hZ3FwJUg/cjh4dHw3eHJBWW1eUSNVNzgyQz19d0taRFJVSzV5QXooJThpQHI/N3oyayVhdnIuRWsxPFVnKD1LbDJxJkcwT1tLRSwjKnhHb0BzS00yTDdEZC9XalU2KVFCbjQ5''@;'; put 'put ''IzpKdTdPdS9DWGtUMiYoN2ZwNWgqNyN2ISNrZ3VgUDNQRV0oO2M8Ok8/MkhOOyFUdkZ8VUdEQH1uOEpZamk0TiM+TDliVGxaYWxtYzcwSH42VlU3RVhIX0U9SGhwfGQ7K3JgNkFPNUMqTlthQyohPVtUbXB3SDFaJTVSYXFCbjlyJWZsZmtVTnguRTkyITpzd1BOcStRJVojeEB5UW1dYzlXQV9I''@;'; put 'put ''X2x+RkI/Rn5heUx1QyllREFWLiZdeil3cVgrMlRhWlBvLj8jX1VzWDguOixGOT5Xe05hJl1RbVtybmdTSSkkY0Y9RzFhOFhZa3NaKHxvKWshNFB1WS8kd188RCNvZj56bWR7SXY1WnV2TV1YU2dqZylwTUFRJDdhWFM3JTw7RTRefj12bV5eVjRJQXg8UV1ILj8pdGUmeXJ1SWYzJExDITpSc2N+''@;'; put 'put ''ZzxUSVVYOkFLKzVBQzElOHphL34xelNbdT9YLDJwWSFsP0J9YDs/OEtjMEp5biV6fj5xL3ghLjkmcCNRfmFIYTwzNVBPPk93eC5qQj15SCsjWTJzRk5RQHJGPnhUdEI2SjlUYWZCbyV3IUxAUGs5VWhTM2czaGxhL0xrb203eTI+Wm4lMUI7aDo8dDtMdXIsJkxRKWVhSVg2aUA2b1UyQ3xzVWtO''@;'; put 'put ''OFg8bHcrTjB7QSVCTFYkeExgRitvWnpCOXlme2hoPzA4akI0eXIldHFiJUpMbTZ6WGBeVGwoZkN4QyM+T1Y/ODZ8Pj9uWERlKGExMSpFJSg/LjFMdSVNRX59LypnJCtrZlBBRkcjQWcjWWFqRFU3bkxQcylvTFp7TkYvSzxIITIjbitZcWxgTl1CWzAlWDNqL05sN2s9aD8rSUw3OSpFV3wxTlo9''@;'; put 'put ''V35banozSkAkdEs1YmReL2VqSSU7Qk83TFRpYH15Si4xWDkzQm0uNX0sdXZLeWdWaTFVZlNpMyhpZiU6RDIyWDdYYmNbQCFtJiNtRmU4LmApNj5SMSNqNypDd2sqQGMwOHMyUFp1UlROTTpEeHp1QiM/Ui5WKTdWaD4hOjxxX3owOH4pS3V0YSI7TVhuMkxWNSEpNzBbbGBNfCpLL0VCP0VUdkth''@;'; put 'put ''QSs3NEFzeV1qRlpWUnMsTzZLUTxMZT9pVVFaTH4uUTclcT1US21+UWxgLlVxX1dBRj15Skw/YCUvNHVIRkMuckYpP0QsK19wUVFnQ3E+WG9qZGxHM3lNaCxEVjVGaW1vKjROdztqZ180VXMhK1EqJihyQFZ1UD11KDkhanI8bHFRNkZ6T0ckVF14Lz5tUVJDKUxbYE5RXm1BNGd6eXYuLmNmIU1l''@;'; put 'put ''YmpuVFl8TjFsK08+QyRQOFU2Q3N1Py59U20yd0NLdiZ6WSpIaEo7ezUlKHB6ODZLNCpfRyssL2FSeltTLnVYLE5dMVhIVUQlWTdqYylYeXdWTHpiJUk+OEx9MFZ3UWRaUiNTcXl+a1pMSys7PXhaZ1FzMTpdNmhaPFZsYTU0ZnV3PGxOcDg8fn5kJVc4RUJzTmw0bDVRWE1FcGBGSCR1WVNFKWR4''@;'; put 'put ''VGJPdH0pZyEyLkY7KF8lQjZzfk5lZmI4THxBS0tbLkdBXjV7ams3d2BJZjs6WEYiZUc5OH1gSGNZNnouYVcufHZkcVB2PHFZRF5zRyx5eCx2RX4wZmQsfnxNcDY7OHNyWXxUUkE3SkVFUGMwM1d9M0oxOS9jV1VZV1NrVmpwZHQ+R0RVX3g7UFAvVCRNM11sWmNwPENjIn1PaXMjO3UldWc5Y2Jy''@;'; put 'put ''Zlp1TXdndTE3bCNvdW02O2o9Lkp8c0JQX1NaR2Zack03X3p2ey9IRCZifTNdNU5sLjApejN5KEFQNFRkR1FqaD1nI1hlQV1eMXQ2UyFqbjJLdyNwVkovUzR7MWJQNE8yQGYpS1N0e0w4aCxkNkNmYFZpRGBQeCkjcHk+YlEubzo4VU9hLkVOWzkzS0tmQWZsXW5NMWNFOlIsW1d0M0JaSDhLdFN9''@;'; put 'put ''JixPRzdkLzZ3PnhoXkFeVUdoV3x4SUkpYHk2aUorMnljUTdeZHBOTVlgd0pdPzU9RTY0Wi9qNDtlSV1YLlQrI2UoXk1rPF1UT0ddT2kuW2J+TSR4ezg4XUMmVDB+NG4+IWppVik6dDpeQ0VZVzFRcV1DRCtZYU1GTiU1TyhsTWRvQVIqI0Rufm1hKkpRR2gsQU1yYyRbbCNATXkySE44YUZsTDsv''@;'; put 'put ''ST1Jem9XIXJNYEhlcTZEYXxwdDpyJX4zLk83V1NDTjhIKDN0NlE6eXs/RC5eU3J1RkszcW90Wk1lIUsyQiN9dHFvUCZ8cyNMLlU0eGZYYzQ9UVJbY100VElOKlZuIz5nYm44eiNKI2Mrd0YldnN9eCpzWFBuIW5wTVlpal8pJFJQP21PRmJ8OD5LaXlpeC5xX3R8UTZIOktVUDVdLDQ+MWVbV1l4''@;'; put 'put ''JCFdbSs1WylyU3IraC4qQXFqZzJXNEx4ayEmb1lCU3EpYSk0UlRJJTFvXXw7YDhvTWg9W0FJWzpxVFZUWFZmTE9hZCNYNDtXNHFmK24lYyl9PWYuejk9VzlsbSk/PXdrRHBxWllQaVhJQ3p1Mk86eU5XJSNZYTI4IiIxIm0rdDQlbzs2b05KJEZBM0VOVFhZPFQ9PDltSk9NNz9ENUZvIildQEpi''@;'; put 'put ''cyJPKzxCfntsRTFBbk1sIyN4bSx8bylEd1ZlbTQySTFvI2JsWDJNezdaLjVoamx0Q1hBWSh2fktUL3Y/dmVtUVdOKC5AMjJZaC4/b2okemgpVCRrKjElYyxmem8sRVYreHlAfCk0S0lmY0lARDsjPmdZcC5DNCxYUEJhQy8obC47PyZIUzhEKUg+JVhAbTkkVWkpd0R8S0dPOXAvcDdVQUsxaXNW''@;'; put 'put ''YC90QnVfKGB3dl8yfjY8JksjSE9lZy9KfGNsUCx+YWtNL285YFhjRXJ1VGNeVn5YR0s+QzV8VTpwQ31nTlQiSjooU2ZWYDZJQEwoQ01LcHxPemk5ejJ2bnlOeW1+d14wSlIpKVZQWk95YzooPkdKfU10NV09bFNXO3JLOS91U1dpVkE/RDFeJF19fi48UXJMK05rRS4oMTVCN1JENyMoSDNpU2Np''@;'; put 'put ''fFBYZmdLMjlAOW1mOGJhUyxNVVByQHFCJnx+JUt8Q0duOEcpTl1aciVJWVB2YC9LZnQjaEIrSip7P2RSVClUYmZPOG1uRUgscFg+aFg+Y0xNNW13KHdxflclQmtlVUc0aXNISkRSODdQMWxBditWc2BMWDMlOlhtVy98b1ZXbCptN3JwMGxtKGJDUGw/JGY6dnJAbSNHOWUmcU9DSXZeOmw9dCNw''@;'; put 'put ''V1NXJjloeT8kQ05Vbz48ZF1jOU8qUV5MIV8yVTkjZzo3Nm5DemxiRD00OH1qSUN6VnFjUDxuRHp1V11EY0ZWd1c3SXhCRDJPeDB+MHk+fW9pTXxpVUI5KHNwe2pKLkxUKWlwNihqe1p7dF5uNSVPT0BNVmtjYSVaQzVyPmdGWz5saHN0W0kkSm5SSz83UzteKVV6OH5HeXc3IyVhVHwvV29PeEY9''@;'; put 'put ''ej4xezQuRmwuWTlVZVUhYVQrRSpXLFcuX1hta190NXZSKXY9OjdiWSxGelNOLihbcXx1aGtgel0sXU1QWGw6LFA/aFlTMig0c2BGeV8lYGZWQFczSTswNFdnK1lZZzN+Tzc1azk5cFZ1JFl5UXkwMVhQdTAlWV8jLm95S35Wfi41LlZ8W1hNQlR8SjxMYVlMbVVjTn5GI0x3XVlNelQ6O2lRbkI9''@;'; put 'put ''TVZWI0hPSj52MDtGWkVwe0RVTHwqMil8bzxReEs2NExlLDdWYkheNUsuU2ZPXSJHTkJJb3lmZkxfVXVfT2F3Vk47UWpkSjtvUStdPzpCKy5ze0FwW254UUglJnFrNEh+NUI3KyM2KXt8ZGl7N3EsTjR1KV9fTGIxMDRgeSljRkg/XSp0T055ZiphI2EiY3FSVGlRPSYvSks+UFFjK2QxOkFtYkU8''@;'; put 'put ''PyohRjBbVzRpZFs3emNbNWBKMDhIeFFaeEZOejkzbWx3Y3IuRTd1fCk5a148fGQ7TkxaLEphOWMqU1NWeFRBc15HUWhLMzh9bkd6SVR9QDVtSEBKWzokZGJGTHBdY0wpKnhhZTdlQihyNGxjZU48aW50UUheVzRJPkkxKVs3V1JeQVNpaGZnZChQOVprRWJ6OGtjPVFEOEx7TXQ+MHY1TlBycTJJ''@;'; put 'put ''eF5AYjdpMyQraDQjRllgK3RaZm43clAzYGtuQnZqdXo8NSQpZVlJfUdrTzdYL2pQKlUrOGcqWTJyT1UoZCpqVV0yOVFLeDYqYDRFOE1nOHhmbFU9YD89I15OQHRqUGNIYTFUMSFLcXl2anhEUXduez5oPn1ReXlQXzU+UitORDFtWXh4dDZZMU8hTUVOJnVIQigrS1t8YWk5Ni4jJHViNGxYWCgl''@;'; put 'put ''R058Xnd7My9iRnlHXX5zRzxLfjNxcEcqd01uN15ISExbSldyMk9TUSV5RHA3L0AoOWMoMFYzc3xMNEghMSgjKXw/QyN1ViYjMzE1S0MlOU9yX0JHcnNjc1tSQGo7PGF6am1lb2kyd0t2QURXI3Z4KlVDMz4wdFdLLz11NDNJb20yejc8PGhDXTBSRFdwQ0l1bnBHRz5idThybUA0M1pFRjB2WkVV''@;'; put 'put ''P1dtaD1gbyRqXmBmelBYfkZkaFlubjl5YUh6PHBwflNFd31nUSE3UTlOP0xmbU9WcnYlQHRpaCNoXTdBZW5+JXBsVlpbNCY6KH5VXkl3W202SWNZRWRoe2RvTD1AelNrNEdGdUxbcTNaVD8uTU4/JXdmTSYlQzNddFNGQVd2dEM7aEx9ZHtrZ0d+Um8mfFsoTGh6MDg0ZzdfLyo5SWd0d3dxTmBF''@;'; put 'put ''WUpSZlh+RSM2eEs+YDNMcS5+P3V7QF1wVU1LTHt9UDpXMlthVGJffD9qLiRESCxIT3h4QGlkPkBWZnJSKyZmITw4bixkKDVdKnFtMFUzSVZmZUZxJUw7RmtMYWQwVStiamp3NGEwWixRYHRyPTBXLmhnWFB6bkJeZltNclpwcyNeWlVpczA9b15gOV94Omx3SSsyfEBUWm4+JXgyPU5LNGFsbTF4''@;'; put 'put ''QmE9UUI2KlB2QF8+aCVbMzJFVyEvSFJpZ34vdjYse01ib0A2PVBIRGdieTZpTSJNJW9pI1QvIjl6TjtDNXBubkBoUH0/SGJKbUVIUUNbTyljdkVnZDNTPX5VIW1FPykuOFJkKFNFXTB3QSkqYGYjUXN8bWI4KWB1VDhBRDs/PmgqNTh5XlZRKDNjO2s3Pi9KNWQjOm45UTdSdG8rbTtuXXN7bnNy''@;'; put 'put ''UUk/cSQ1R0lBJW1lbF83NyJaZj9kckJTRWlhQXJrSm1LSXd4MHRFX1hYcnR5LnliLn08LnJ3eEg3MEJsKnAqR010I1U3M3s9N0ttTStWWll8YFpYWFg5TEJUend8X0w1X0A4e2xBNkdUKERJRls3REksLGwrOlFSeXJ4LE5mUF9RYXZsc1AiTDxFOTdZUFlLMnl+RH1CJl9+OCx7YlZWX1VyZHBg''@;'; put 'put ''Sk5CVTJGbD5dWF1GQ1VHRnB9V0RXYlVFUEt9WVQufmd0UyFyJGsoUEh3S2wsOjBXMEhiLm81QTAjWXxMQ1t+MTlsXiEvZSk6SSt5QnAwVH45OCIxXkgpZTAuMi5iYTduUFNOaWc0P2hnO21yUUVMPUYzXUYkI144OiZ4Zj4raDdPNCE0RTB7dSUhK1kkdDI1RkgrISw1MmNwbCY2biFGWF8/Vygi''@;'; put 'put ''Jn48LkJoJktvdFRIOyI4V31nbSxPXi4sRit6ZHteUCtYck9xbCNqWlY+eURsemJKUUh2KXlINH1xRVtERD9wPWo0Zk5mallPcylQJFRZNz5lOHM4fHdvJS9sX088VS5yZDhfR0sjVigodHNrS3ZbM2NdWCpLXTZdKyRPRUZMfDIzcCVpMCsxY3NqSVE9TzE1IV0vTmo0KERRTj1WYG5bRkc9YSxo''@;'; put 'put ''RC5WWU17NUVibVJQXkJqdXA7OSlLdGVYam9gcGs8YUZdUURzdV9MaVFrbDUic2NpT3ZLNTkvWkROcSpIOGNbekYxbnokUC5ROTNuOWxeaUBRXllNXV9DV2RkU20qc2E/TzBvfTR6MChpKE8oeERIZD44XzBNVUB3M1J5M2gvTDVtKXIqc3BUSnNNaGVgZHdFZUgyRnhCbVFgYUxITlY+MG1oI3V1''@;'; put 'put ''QzY2eDczcFEhXyF1KSZSM0taQTZNbSVfWTAra3BCYSgoR2g2Q2BDRHhHU0szX0cmTG1LNGowNV9XY0g4MyVKaXNDPiRmciwobTxQYTFSamova1pAeFFANHQiTDV8c3A0RHV1JT4uZTh6USNrS2xLNS9ETXc6cWlOQ0F6MUpYTyowfiE/biUzI3BpJVM5VzNXUWxmWFIzSD0kK2l+UzdoL3VUcldU''@;'; put 'put ''fUZKalhgejA7UEEzbkdCZittWDNAaz0qbEEpWjV7P1VbM1lKKThzSzBXQVA0ITdwO30sa181X3p7MEI7Vml3VyFlR1NdYXptMkYxViUlYFtlKnwwVWc/TnghNGI9alVeMylgQkdCQUxyUGQ+WHozN11uMz00LDAsMElRYCo6djlOKmJJdXVEXjxZNHpzXkMhPkcwTSp4bzptQjYkPytjNyYpNCR6''@;'; put 'put ''aFZDfEwmPHY7bFdRO3JdOiJtTlB9TVRnXUkwLjZ0ZXplQU4ub0EoVTB9LiVbVGF2UWwvSUBHYDxoUHBPLmVwOygySD4uQVhtQ3tKeF99K3JYL3x5LnpaSVd9ViJQKjs8RXBSM2hVajRJYD8sUF9RRy9MZWtROHNMQz87S1RCSzNLaSxUK31XS25YanlUIWo8MEUkeT5dUDVDOFZYSGIvTUJ1Nllu''@;'; put 'put ''VDpheUZKZS93NmZ9eC9PS05ZKDpgaCU8R0A0TDdWT0h4cjRHVUcqOjssbjxjTnRMR1NOS3xaO2MpUDAqQ1JDWk1YMjpbWiNTXkY3e1FFTXRCTkV4P2FzaGsoI0paNl8zY01RUmJzMFdeYWBzbWMhOXdOP1l9P2YsIygzfnovfjNuOUwxXmZEYmlrJDtIWiRLdzclLm1dWSs0eVhMdUdAPCtJRFJZ''@;'; put 'put ''YyxNb1tUR2glVF9FOGV2UWc6SCx7O3tYN0phXi4kfFp1Y0ZpYz52eGxIUCNCM0MzTDYxTjN7Km1MMiltPTRKTThUVkl0KFJVW0ovWHtdayE8OSEsV2JeampJZ2NxRyg9YX0xRDtTJEdzdVNGV3NMXW10P2pWInd0JmhAbUlzLFREKDllLmJGezJAQEp3fXAhey4pIylyZnpNdXFNSy9pNWF9dCw5''@;'; put 'put ''RWNkS1J9M3BvRWV5dkl3Z0V9dmpYaDdCbkRRYHVMOFhGYGpCPTM+d11KOypAU311P0VeOU80IWxrR3ZKRCZxUXwjb09HKCh0dzFiX15teCMpayloWEtkPFNNSlcke3BUMUgobTtwXiYhT1A3LjtfQyh+fD51IigqbEd6WTlJRmtpc0lyIUBPTilJJX05dFNbaUZrbmpgbXRQbVc3ZkJNQDcmMDp1''@;'; put 'put ''fUFgOCRTPV1UZVF5L30uMCs/aCQ8VjJEOVRHPjpkZj1Vb3szRGF6K2FgWDFFZ3xNOThJWzAiNm5EfkZALDdXOn5BcygwPXRGanFiPTkqPX1IZnxVdyVPfClMODJWXkZiUE1dV3RbZ3Mxej58Q1YxOXdbbGh0ZF9wUms2IXo6YzdaXiVSamlFSG0+NEx4ZTciZUxmVGY1KGBELmp0aDZAPSNPMFMp''@;'; put 'put ''RW03KlA/PWR7PW9jM1gpZlB3dVp3K1MkXT8jdjV2dyZmPUpRdXQqQGcvTTg8TEhUXWZiU0tNOlQ4UyM+RXtnTjRNU18iKkRIfTVvIXozOz9WKGM3PGplNW89QnI8NDZaOlMqPyg2anlxWGFuTGNEbzl3Jl9ST25IbzB1LCUoS1l2RjgzQTY6ajVRRTNrVlZobCs/JVtCSCF6djhJa2xgMVFlSUdM''@;'; put 'put ''OGl4QnhzfDI5Z1FgXlhHTS8/WVBsX3FQOjRjKi8kMmBodV9mZyZyPiU+XmdsVE9WR11mOU01LyFtdF5tQ0M4U3huP3RYZmZUJlUyS2lkO3I2JGoib0Y0bm5VaTAjM0w3PWhbIXNCflJxc1dKLCJDI2RhdjUpSClCUj03dVh5PXo0TEY6OFRoZnkyTEZtRWVPfWxPQl17N21yd1ZNc2JpcnY9UVR3''@;'; put 'put ''SiwuLmFvO01nfjUlPVMvVERIb2U4eXJ4UE5mU0kpbCRbSmQ8VjRzSnM7ciE6NHViQEdxcXRvYEQ7aV9GeGdSM1tNW0BuMVQkQT9tSUx6VnJIbm9YYSU1fCIhT3ZocWpENH4reGZRRyk+WXdEQGJ6WTlUdVk9VDA+NFdZUiFkUT5WX3IxfC9hJXcrWDBaYFhFcy5xZ195c2prSyJDTE1ibHBxK2RX''@;'; put 'put ''ImN3M3JCR0RNZG8kbGR6R2U9RHdQRkVybXhje35eRWdrZilfWUV9NkZTaztbKCNYTDZ6U1p6UnRsZkFfd25mMSx6PWFYYiQkUU1+Vm09SSQ2T3o5by82O2Q7dHhWOWBMPDVTOWhjMCRGTWk7T20wbixgSVF8UVZBXyFvdzgqfDxJNm47SHdDLnNnKGRtJUIydiYsWTlfbUood19oKVJdLHZoK3Fa''@;'; put 'put ''M00hR2B0bCVpWSw1bXt2MU5oLCNVMjBlO1ZpZShUMVA2KFcycEhNTXdPKDozWFg4JFIrUk0lPVs2aTlSYlguPl5UQTozSXpxUW85WyxxXy93RiZESW0zKVNkdmQwUlpDaWM5SFMzb1AobShuJFdMP0pvTiF+OzVMZ0dRRT4kM1hgTTFdU1M1YSR4ajxPIzFgY2pIMktiImpeY0lmYUQpV2xiWU5S''@;'; put 'put ''dGcyeVdpYXg2aTRnIT95e2psMntgT3NrRj5TMyV0VlkjNy8xUmtCV3gjRlU+NWB2R1p7RXsrMEF5ZjRad3dMPiFAclQ8K0toYTxQLiZsbztEOUhvckowb2thej5YeTQ1OCZPTUZYMUQxeUBhUHRAP0ZjcUMrRD5bYWtGKip3e1l2JHhSelJQVl5RZkk/IntibGF4cUQ7QE9RRVk4W0pgelhSTyhK''@;'; put 'put ''a01ZXklOJXNrcjQvTF1MJChheDxzfUBBKXV+PXpwTkYqdk02bnViV3YiVChjUGxmeno3YkB8UmAjbUhFSTI8aVZ3KSNPKUMqdkJWUmBBSj0vV0lQb2VmbC83YmA/NnwuK25ZdV5rdGpnMWVwOV0zUzIzc29UTnRuKiRZQjY2fCg6Y1dCbi5QNjshVHRDNjVNbGd4MH0/SWgufD1fan5ycGZWbiRr''@;'; put 'put ''VUdUYzwkRld3TFImJSpaa3M4N1A4PXd8TFo5aSNwJjRaVVMrIW4/IiNjKT15alRAIylqI3dWRFlAfV85ezFJey93RihqOCVALl0mOGNJZURgWHlEZ2hVVUNxJXJkZktJTUAhamx1OTgrUkZQb1M+WzVMM0tXcSNQUHE1SVlWV0RdSjIsenIwYmQhJExGdmNNIyIjdlthdFY/PWI6ayQzIk4wTU0k''@;'; put 'put ''a2BEVTwzSVVuI2l8bz1VKiJeUV43OyUoT0hfXzY1aUxMUzN9bTxFdiMrL19kfSIkM2lqdDIkSWhYSDIrWzNXc1JneGd4amlucU9fU0NeRjF4XXFaJU17M1EycDNMZi8uKUZQSkEiT3l1UDBabFJ2SDFUWTt1KUkyezlPMHxjYmVrTnsrZn1+Mi9ENXVZekUqOn1ud0JAdU9TMEsxd25aYXRHRH5b''@;'; put 'put ''JEJbSls1c2IpWXVQI25CNmM4dDJ5b01GIUBQRFhwKiYsKTdPPUk/dXpeSUEwMjdTd0FAP0M7eCozVWApTyVjfDY3OEo+JTttZkAqRkdhZmxPVFFmQlNYVGB1M2ZmJC4oJilnJlJ6YDRLbUVxRWx6QkRWcE93Y2E2UWhiRylYK1o8RTY8WlZKIltfOF0zMH5lNF06R0BMM2dWWXFJLzo6UX1bPlJY''@;'; put 'put ''PyxPc0tpYVchUmM3anApayJ5MDBWcU4pP2tsdS5KOzBRW1ZYJD5nSy9SUipuaDk5amZfbjs9c18lK05EcyI8YTpNK302ZSFjQlkzKT5tbyxBUilBODghOHdmJXYpUD5YI0g8SkRHQHo3MEdsYVcyPllrVntjVDtGfCo9UF5rOGZud2ZNOXRoLHZTJW8ifEpqXnRMSVY/MU94RWp8S0oxdCp4biFI''@;'; put 'put ''SEdUV2dbY01EWipZfXQlQi5tVEt6UExGO2BYX1VfWjpYUGhtTmt9UnhwWWNnRC9yMC9OT15nZmp9Zn5DRnA/eENDZW1lRlRHfWxmSj15aVUodmE4YGF4YEJKbklONnxAbz9Xe0UpZFJtOGJCM2s9REplWFpWZGtGSV46OSoqQEphOWYqflFbYFpac2p8fFpeMSY4VDYvXWx0b3lQRyJIS2JzNkpE''@;'; put 'put ''MWYuVDVwMX56SHFfO2BPRGUoPGJ4aHZ8QnhBdiV9QjNWZ0l5STwueEkkUW84MGNxeyE7dFBwPFdPMEZOLlgoNDk3Ykk0QGlYPyFjbjgjQWpxfngmdn5AKCQmIT5kTHZeOiRIMjszSmBRXkRjZUwuN2tMUkdIdyZuek1Qa2Y6Ok4xMzE4b3JaWFZtVCQqPEMvVmJjc0g/JSskNnlQKVAieXJyVWZb''@;'; put 'put ''TWdwUHhqRU5ONXt6c2JpeTVaXlQiJiRgLCNJUkpqST1qcVhUX253MWlpK2o9ZFs9JWp3RWJ2U0xWMUNXcyZhTXV7NkFUX3pURn00VjtQWTFiMipIcEk8WXJYVXopSzk1XkxhXXUxOExBZ2tZYVtSQkUuMjNVUCZIN0hxPHorXVVhKFdXeTNRYno4L0I3I346WVhNfm81eTlEPDxCSGZNdDo3YDoi''@;'; put 'put ''bGZJPjVzV35RIUdpRiZsTG8pTVgjVXE0WSU1KDY6WXJhMGtSNG1KRytTRDJTaUF+fkoyNUB2dn0/YHg2W2RbODZqXyU6dVFOJjMrQz5GS1BvVXxIJWhebTZ6L1srY0FRX1AsakBTfXFzNEMyczJnV3UkNGtOMGNGLmV0WiNHdD1mXj8+R1tRaHxvbyNvSXhTPCF7LzVKODc5dF52fUpGJFVfdlUj''@;'; put 'put ''VktDezwmcmFrVVVMYitoKTxmflUxWmorbzs6PSRqN2gscyRoVVRRRElqOHpGcTp+Q3FnbG50YVtUcXlwXUliW0JXKntCO1AxdEJvV3tANlojJW4rYmlmaSMuSEkmYDwseFg3S0B7d3hFaHA6JDQrNjNMQlI+fDdHMWcuSVYvJkhAVU5WIiNzJiMhKlN9R3pQUCF0SW1tNFZ5cW4wfntOQV8iWn1M''@;'; put 'put ''LmhkM1ByeixGPmVPd1AiYX1nK0AhYE5NXXh+LkJuXU9eRCwiYXp4InlURlpZM0IwfDp1bXAiZzh5NEJ0P08uaU1UQldlTzFYfihIOGY+Lm0kZDp7OWtkX2NuI0JbYUByR2ldVjheOzQ8O0xmIi86KyU7OlNsO3RJI0x7aiI9JVtbfUE9Z0kiOHFQUjAzbjVPQiFNVCFYYmpDdCNPRExVKW0uWG1P''@;'; put 'put ''eSh8O21lcyJWMH5LfTs/e14mKjhGLyFCPis1TCxYRnRbTHNZZn5wIUgrZWZUIWUuRnliTEZ3OkxYNmErRWNfTnFNcF9+aSZCMGs/TiRqUExmTTUwKk04bnIlTE58SX5TWCNYRSNZR2JQYitPP2xGUmZJcz5WPX1oTHs2JkB7VSVUT0B4fHc1RTxUPUcsTlo/U1laNXg0IyR3X1QlK0tJJilJdyls''@;'; put 'put ''fXRrI2k+Y01dO2lVVGh1SCRCSXQpeXMsJHQ8TlhLRFhmY2h6VjpdS3FdIlskQ30yK1Rqbk1oKEx1bD1wZFUrMW5kVlMsbz5TUlRlUGYob0gzeyM0TyxiRmNveVo1cz1bRXkxQl1UWiF7ISosMlpTVCVXdD1BMGI0Ji5mOiU9K21jN11RPyZER09eTWt3dVVWQj5FalNmaUslVDNFWD0uNCh+Vm10''@;'; put 'put ''QlZzQDkyUDJsbkd5cHtWJE13PlQ9cTt9OGhxSWYrTXxsNUgrVWk9WV9EOi9oeSk7OXspIT5STDkrdituMiRCP2RuWDNSSn0qOHhkRiglNStSZjJzIT1hPFt6KXpKJEUqdGJpZ2AucE1RIjt5V3piSkJ7KzRXQzY1cHYzOjUmP2pZXUpaOkBqX0Y8RU9iMClXUUdkRHxmN1JiaFtTcENHK0dmVGMm''@;'; put 'put ''bEsrNSw5cWsmcDFveCp2PywwRl1WbzNeXkwiYC4/JGQ9SEohOEkwUF5sfCFXZHM4a25OSiVgSSMlbEV5JE0sNUh2emNwNmR5UnlaR2VqfSROTXMxa10wKSskMl1eTnxkcHNpLDdzbV5PMFNEVDB6MFtGSGc2S2B5VjlBQTt2TDskcTM6WWtpKndwbmtGMiUmJFQ3elo/V0shR3t+L1dyMTRLJm9l''@;'; put 'put ''THFvPkomT2NpW0NJXjdiQlllND1uYCZUUUh2cmQpWnw3dT0xOn0yXnRLPC8uZTd1V2A/KVtvPmJndixMXTVoQCQmKEdnXVgjXjtUWG45MmZqe1U+RHJubWNbZihEOT9laTtZKD4zfWhqd09pV3NUekBkXlI1WSNMWVB7Uyx6YHByOi5NISVVM3ksSlpoT1cxW2tBZTI1bldOZzkuSEFWO0luVWtY''@;'; put 'put ''ZV45aDlRLjRvO0RgIy4iKWVdUFAvbWxKWXh8aD9PNVpgT3s+STBoTFRKKGZ1fV5XWiN4UkhYfnpnfkR9fEEye3E8Y1VFeUd5MyxmYWA9Pl1BckFsaSFOeUMhMUlncT1OR2V5JSV3bFpzcC9AWmQ/MGBHWz1aKzdsc0wydyFLMyN3bjhCS0J8bGpBPG1uTDdLMCVWc0pxV1p1MyoqLjV2cXQ8Xnx2''@;'; put 'put ''TiFmSjdpIUNRdjErJmY1QlYwTTVNKFlOVXQ+fis5a0BmIl1+NWcxezFZXjJhLykoJFh6PklFTDJ3dkc5PihXLEJlZXk3PC5McV5RfGVrJXMrL042KykjYUhoRkVEW2Mme1p9Vyx0UiNFWHE/SH1QeVQiViZMPUg6XjJHJCRjSXhmIWVPWmFjYThgdFtjflR8Rk5iXjVgRSZ3KjRTbjZ9O2hXVlJO''@;'; put 'put ''V1I0TVFzfkJfMHpTb2FrNH4wdFJgcnpxWEhOKE00NjJgMmxial8uIzUjOXEsdEwuWmtZezZbfE5fZUVgWiVhaX0zTiw8dDRrWUtsOm5vdSxNQDxzSGl+TG1dLj41RkNaa04kTFMzdkdtJEJHQXp4U1ZYc3xBdyIiZncqdDJURUNFSWhzYWEuKz0jdzJZeStGUiJFK0dQQlR0djIhVHlIcGE0QGN9''@;'; put 'put ''Li4iaVluI2QwJEBAPG85W2JbSi9MV188TGVkYWpqVz9hJVFiIzhzUFRxI0cuQCNDcF90LEUlL2dSayhsUjh1ZnVNLmlPJk55b3g/YGUqMHsuaGAhalBkbiU5WGpxdXZSUSVnKFQrRlhBXSQhdyRXdkRwd34laTo9X0w+cWlXbnZ0K1dqaUAwfDpQI0c8OyhkPERjT1BJfHkkXn5VNCtCcmY9Ynk9''@;'; put 'put ''SjdBd09NaEFCZWRLQVhFQ2pjKm5qNG5SRHpQQD4rV21JPlM5aX5+Y11gb1l8PmpwWHdoOT1fZT1ZVXM7ejxNZXo3XWNJTGpVWjdGQi45SlZNNHQ1Xkl+NXlKSUJGWiMjaUtkQipVRGZdbCQqIkJVOjFwfigvOyxHcix9P01zX2Y7dz52MllVWVN0QiEoc01tTDpxQXpXKTVsTlhDQGVMUT1DdUVU''@;'; put 'put ''NnA6enlLTThrMXd6NDZ4OTJzIXN5bzhpfmpZfmdbcVg3b0EqUFpuZHxSSHJCam42eGw0dU4ifH1KaGArKyVrbVFTfjkjRF0/MjEiQypzK0t1KFJjdH5BN0x1e2AwZ2ZiIzc/fiVpK2FBTWlITEBPSFB5Zz4uO3t6QiEkMG06KFtBWD5pYls5SltANmIkYktpIW9PNyhCbnteeSI9cjw2VHJtUTJ7''@;'; put 'put ''QTxbQyg2N1tuR1BQSzxbQUtFdX46IiwyamxSJlQqKigoR2VlJlpVemdXcnUveyo/PXpISkdDZ3UsX2Uxc01wQjNbL05tNG1XY1AzUy5ROXpxeCpHJT80RjE4ZHs5QzJzRS5FYFRsbStdLClzbjVhPjJfUVNQM3E7c24sODM0bVllT3NkOUphVj5WaylbWnkyN2slcHFzIztIKGVocypsbTpyVGMo''@;'; put 'put ''VzcpVk8xYCgzRUlvTjNmUUxrflZrYS58XXk6KkYwKWc+PF46cUN3b1tKNH1iXyoobjc2SnF1K2FGbHpQazowOmlEVmE7JlJ9OnUrPk95aEtEX3ZuKU1RSCl6NndKUitRT1IwRGNEUEs8RWsody5LbU1NKWxqaGchZDFKNUlYNXp4ejc9eWtELD1HVHxrOll0VTpqTls6WSFGQzZhMGw2cFZnJXJN''@;'; put 'put ''VU9LJiY9SE9qU1I9MlV7O2NxYyEqfWZVLmxQfStCSkFXV0hkKkdMdTEpeVY/WVt0b3gkXkF6RzZdej42a3EsSTVWXXt1VihyejRKTlg6bnRuJCgjLi5MbmtrMHtJPEN4eVFZRHc4Q3BOPnVgWjEsVTpTL3JWaFVaZTYrQytvU3ljeStya1gydzFwKXxPOldjO0EzVz9WPSZFcUlCNWJVLyhRRTZh''@;'; put 'put ''QyppOTM8Qj0pR3V9Zm8+ZzhYJEoqSkxSNTVvJms9ayxEYGxZW2V+TWp2d2VJTHp3MEw2XnA2UnUsPnpeYGNbXkdraDQvP3pNYHpfKzZEVW1ORzhPLDhLQHs/NFJDc3k6Ul0jNW53NkY6dlsqbS8jbSV3XmteUCxNVTdgfkw9Z0RfJih8I3M2dCgqdWVSWj51amo9VzkjWHkqKT5FYXAqcXdVYWNy''@;'; put 'put ''YFVwI2tKKkRAd1pqMkhEJSFuSnN8I0VBdm9QLGRaTyUuMz5kPkshajA7YSMoTEByVkxEbUQwX3JSdH5wLjoxPFVVbUI1eFglZ0E2ZCY5aClzNEUkWVl9K28wanFoLH5NPDw5bEojTlI1PmY6TypWIz94MyheTTk5ej4vR31iaTZjKiE2WGU6QFY2dHdsZ3VzWksuW3ZlJF56Q3Ejb2xbNiJSQUlT''@;'; put 'put ''endibz4sYFpWezJYalB1eTxWWSpVPjV6JTIyeGs0U1J3bCM/JVoscCFRNyR6LCtWVD9eJFEkcERyR1N4NkEuN117NkxkWnt7fnp9Vn44RFZvek5TQmo5V0tZT2QrIXVJKkFscmppNy9Pe2loMz8hMElZSmVzRF5Dc2VoUERCWExGTkRSL19pM191TVVUQlN8fjBtPXhxSX1hPEdmP3s1Ils9KTJ5''@;'; put 'put ''PSlWZmclUThPLE5TJCo2YVN9e3xTJlRMeXtSMndST0FaKDBkSCNkZVRtcVF6OmhpQ3xhfkxYN2tvJDV0PGlLeyxzLD5iYjRqVzR9fTw0OndGM0Z5OXc2Kz1GNF5xWlFlJER6L0FMYm8vQ1I3SEZFO0I3RjsqSHJ9I0BASWR0ey4pSF1eJU9keFNnN2lVLGp6ejg7bWwqZCVPfmg4RyhmdiJ+P3Iu''@;'; put 'put ''NE9fdCkuJmM9ekBEI0FnbX5sbmRIJCRFJn1Lc35IZkskbVVMXSticV0iQ2p1IzB3R2khJURlUl1+fW9bUVJGejUxNXZWdzBPaDdUKEVbVH5qIUFIVWNRUCtfL3x2VWs4WSk0cnl0KT81Ry5lZEphTF9oSn1PWE9mdE89IjlrLjhUR0hteVVXN04xdTZRcnRhdFN1eSYsVXN5PSw7WXp2Z35DTkFV''@;'; put 'put ''TVhdclh1XkA5Q3xtNSs3RndqamIjU0dsdXopIWglISEpLjQsOEouYkQzPGl4JV9INHt6UGN0SVhEbnIyND1LMkdTO3YwRUsmSjVJMWM8QFtPZXlZUEJ0M1R+WW85eUBSLyQoby8+YDJVZ2ZrUntUbVZkMXd7UkgkTkhySXx3bCFWfi89SCgzNEllSyVTJVgzZS55cXdVMnsjaEAmPCJEQ2FHOzQq''@;'; put 'put ''JCgueVtELEBNWEZKTW5AcDIxYk5mPzVYLl9GV2A6K3hBL0lYKDVoTmZNc0pDWF4vRUklRks3fHNyeiZ7ZmB1dGUyUn4qIWBNUFtYaUJDMFJaMk8kKnJ4eXR5QEN1Y0hsQnVRJm8uYy4jPGd7flZ+R3J4ZTtudSlRO1M5XVUwVURnPGpuXWBqdkc6dWo9WCssOWQ7RTUlQm8/Zmg8YUx5WCoqMj9k''@;'; put 'put ''KSxhVT49JV9YLl86N0FSS1R7dkhfXz5me0ZSLnpLe3lodW85flgxcH4rY0l0U24uc24/Zk9AczgmQ2Q7aWxCd21GX21MLlpUR3h4fiZYW1ZbcmZCZ05GWTF4VDwyZVRbQjtrP3N+e2hYISt7R1U9NE9PfXVyS00xdHV6OChjfUczPEt4Ym4kKiJ4RH5YUFBle28qQVJwNTg+TUlhJEJ+Rk9ATkR2''@;'; put 'put ''Iz14ImFqZmdDUjFofH1CYjRbVz1PdGhgYzU4Z3B9WztpMW58MClsSyFndTZWOlQ2Tl9MXUxoRG9NaUdJXjtkQ2F5TGchblNdM0paPTw1OWREWV5OQiwjSmlmdkEmQHB9YEU9Q1koMXFyMX1KNllUSi8ubC8sYmJ0aTFCcT5VdWhtaEgzWyJdOC4uTmdUITRge2FtZWk8d3c/S3B7dndDKFo5RVB1''@;'; put 'put ''e2FXSF5RYjxjKmR9aDVrN3ZkVnxlbj4zYGtCdHl5QlkwXTVfIkMmejR4RWYlMzI9XzosdDBhYWBhX1prLCRDdUBSYENHWntKSzQ4cWxRL1VBIXAlI1duJGNZUSg4ZEA+d0oxNEgreisuQCRYVD9COFNAR0RVcVNmJnptKWpac1sjOjtoZEVyeGomOnJZWTspWGJbTVJxInJdfT53RzljRSI2TVtG''@;'; put 'put ''Vjg2S2EkPylbcSxDbWYuS2dCP2BMP11iW2JGQCEzXll2akdEcT50THw3WXc0Y1NrXWBeOXUmSilHeCNmTn1udW4sVSVCeVdCXnZGIm9bO2dPREJeVDVnaUNpajU1bk5ZRT4lJV88VEYvbTdDNHtEW0thdT5mfTdfbiopKG1yPUAmUGNReShzPlQkdyxUYGdaTkpgPj56VEhRUjlqMCFWQDJzX3oq''@;'; put 'put ''WkZTIkVJPHF6NFk7KkUyWks7PDpyM1UwT2omQCRATUdLKzUxPC9YKUNLeGgmS09jYWE0bCk9UlZtOHxVO2AxaVRUfXBvN2VdTDhRcCJkYWRRXSxxeClod1MsT3hOS1ZLfmBWUUp5cFtTWDEmIkxtcHpUeDtBInlNRVo8dXg2MzMuSSpTdHFJXk1XYnQ+R3owK0hrUjp6IWc/JnlXTS5yTCVEYXdu''@;'; put 'put ''fDc7S3Z5YTEpQyJPNF1XKGJUVEtva0FRTCFoenI8JjpRVEB8aC96OHhKYWJyRUVLWiZ9U24yN3lMdmVKMzRfXXpUZDxbdVNlKmVNK1NVb009IjYlOHNVTFZVOEUhUlhnYERSSiFgPW9xSFk7Jik7cCNJfGI1KjNObzhMSWU2bjchbmthJVNXR3AjTHohdCtMRXFbJlNpKk5bNzQuQ3NqJFFYR1s0''@;'; put 'put ''Ulk/fFRyfj8kZDBjMHx3UCxLcTcuSWt6ZlhPN3MyU2lWYDRjdlQvRj8wUX18NW9kbVA1PHteVk9aOCRiSUVXOlk6KzN5eUZGLjM7NT5bQjUhKmRWYlEodSRQMHxrUFVRaj9zSk9rMX1QW2gzc0x8UXRdc0o1SzhjSGB4OFJAOy9NeU1sVk5eVFFCcGtgL11wVFY0U2cmfjtrUjFVY0d+fTg0S2h9''@;'; put 'put ''QGMjSlI6fXt8KWJ3NCtgOThzbmlhQTZnZjZHaVV7THF3TDcwRHFiLER3ej57enpYRWVrQXY9Tmc4PmQiJTpveyR3eUwhe1VQTFRaUmN5ZTNKalUsRHpgWDVnLyhaZ35nZ2c/VEdRVWd3O0hSY0kvVld+cm5xb3JNUWVERUhlP2kzNStUWTswRVY3TmQqYU8rKGB3aW9tbTJFWXVoeURNZW9Ndjhs''@;'; put 'put ''OTx1KkpqP11nXmpUX3JUT0grSl9ZPGFWVmQmanF0ZF9dKVVdcTJ4W1ZGLkV0ciksRzI4MCpHPD83OU8mRGJFfmJhOEcobDxRe15HSTR6Wjxmc1B9e3x4OlRBZ3xEfS9oM34ycVVvW0c5QEZfLnNQRFhwOXVOJll9cChqUlFFd2lwUyx+Ik12L2F5MmNGUTpWLFpEUWlVI1YwJSl7YFRET04hKiNR''@;'; put 'put ''OVY+MEE2SU58Uj05PFBDPE8qIj13X0h1fC40RCRMdXtgWSpEOiUlayleNW1TI2NfbTFhInVvWXhbNSIyRSJndkg8X2VgW2dSN3tEU15BRWhZWWNGT1VOSHZfO3JMIUltWV5vbkFDdXdJQnVSK3VoKHVPcVheOmVLXX18KHdaeHpZNix2d0JHRmdpWG5qbCRIQV9UdTRkYmohVXwiRSFDNzc3TlRj''@;'; put 'put ''Niw/djhJYU1oOH05NXVaQGBiOXkwRSRbazwmRUBma1Z7YTVWNV19RlhdU3hDd3VsSCN9Y2RsKnEkK1R4MzduKF19bylnXU5qOU5NeT07Yy57TEgxUTs7RGtCJCRraWpyXSohbTJxREh+O2EhKDxYOEI9XXNqd1l1fHE7YnNkVnIpWzAuZE1mciJSMHN9aEVtSVVKTjNFXkNSQS9fYUxoSytgPTgs''@;'; put 'put ''QUBGMyNrfXs7YXRZazw3MmNzWiZGIVBPMD9jKzI1OWpOPHwuRFF9PFhUWmB3Qm82dSQzfHk5TGlxSjJ2PTlDYG57aUZIfTskd1smfD9NY0VsO1JPYl9MJTNgVF9AeiZeZWlqQGB2UTIodC5DaF4kSCNBfUI+cVRmdU0/eSw6bWsyfm00LkY9LyJWTShJR155S3hfR1VbNlBnZ1ZjTGc8dDtvI3JH''@;'; put 'put ''O1d7eFgsOnAwUXx6Il1ucyZiJHBgd2UkYTBRU0UoKTIuXjZOOC4pb3xuZF0lQnJUSVpmWlNZKmNkV0d9eT53LzlQZjRKcHc5MGQxamBaQVQiY2liL3xNKERSXmIqcSg0S2wpIz92LipNWUldYVlQL3hjcC8yRlV9fFJWSnN8S3smMUhbKz5Lb2pRfndJXWF1fl07djxQWTZQJnFqK0wpKmQsNyox''@;'; put 'put ''Kk8/NV1kdy55WypWaWN7WzwuVkR7SFpYTkBfIVt+UV47RiR8eEg1WXpxaEJjbzBCaGJtfVVXKz08VWw9ITg0bFF2aixxI29XaGZbMDtNcFlgTipmQ3FxbENHN1siMSgpVnAqO3NOX3xPT2M0KzxtUlpheC9vJShHYXN4OXQxJnU5bUtJcXBgXzkrR14zRlssT09NOmVwWjcrKGE9JlZ9dkhbQX1I''@;'; put 'put ''Pz1Ma2kyK0QsREBlK1Uzal9fMiZ5eHYrPHF7YVBmJmY3cCN0W0h3Z1NuXiZ3VTI8VDImcjRrSmtUQ3RjSSxTLFRZNitKP3t9WzZqLGJIVDBVJmxqLyVIUGJSfkJKTnw7V0tlMC9xKTRQP2hdQElDNUw8c0wyQnd9VlQ6bXsqZH1fTD1ZUDBoQl5ufH0rWywlPlouPiYrLEZXaClRflVZYDhyK10k''@;'; put 'put ''bl4jI0BCZHRKMD9CVlQpPFYwMXM4bjhoOjE9cnU2Z2g0cn1qUD1qb3ZaWSJRPU9nKih2V3F+YT80YzorWD5FRTlhdDE0ez5mSGcjYVolZiM8V3hhY3dJdVZnZ1htQl8oX0Q6cnJPR04uZEBbY2BpWSNnejhWYDpuUGM9bm4jXjVZSD1vZ3Q3RDJ1PWpAe2BqLl9APzdwaVFNO0xbIUZdYC5BPXNf''@;'; put 'put ''U0YwRj1DL0xKRj5+Okh7amhLPEoyZF98bGZWPCVOc0M+biNTO1RNcyZ0RDJ8bkp4Yk0waUQie0FzO3RqMkMvX1ZZWyghK19RYT5vUXMhdVdGJnNQRVdGYEhifV5CT0BKQT5zeCQ0Q1NvfG9GUk5wMzpiUlY/IjxDcXYrOXp2bHtMW04jaHdsVztvci9NSHtsJiY/dWE0YU9dbm8vPU1obDxASnhm''@;'; put 'put ''b2hOckdvbjV2YjtZb0U1QVlDV1RhcSl7PExYYzg9bDxOPDQ3KT5ZU3c6JEVWWiokOShHej9xdTpDRjNiJlhOfCw/K05WInYvcmBqZXhKNWkrLFdLKFR+KCkwWFA5QWAzL0dmaTxJdXhbeip8ZEpXdCkidCt4Y31xYCR3I2M4OD0vNTldQW0wR1VIaHVMSU0wYEd3fVhXNyZ3S2IrTVtIdWpdKmU8''@;'; put 'put ''T25Ne2dnfHZxZ19tTlh2RlYmT09nOmN5RkUlVSpkOmQrcV9qTiErTXojTUZkNC9sMSY5cnhtZytZSl88biM4SWhbby8qVWhTNm8oXzpTZHBYT3U8RDxgPX1PY3lmeFVgTUYpL3BEVXI5MnAyOnBUcnd4JmF7JDxFYEdQL2BXO2Jram1tK2YjdUJjaG5gdXojcHtbdmI6bjdsQ3oqc3xqVFpoVVNS''@;'; put 'put ''XnhIPFl5MHVGNkNyMnpKXSptdDRHTz1PSmwrWSosUExdQiVydXNCUU9gUnFyVFBSMGBPITZKb14jdnpbOV44P0d+bTk3TCFfTzZfO0tSO3xBbSpVZWw0SDBoNmJBWkBBUVRXcng1RFh6KEN6NHcqcj88eltSQixxby5RNGwjM0pIaCxoQCY6d1U3Ij9oTk5OI3chIVlRSCFIcyU8UVltZnRgL1BL''@;'; put 'put ''OkltXnt6YDFZVDMmcDE6Xnt0RGFxQ0U0MV1ZRldOfTJISCR8cjhVcCxVW2dxQmQpRTBnaDZAUG5BfkRqR2EvVS5kRzVVXUg0bExRaXd0RWBiNUMqbH50fUoqditGLEojVXpOel5mJUtbZmY5OFp7OjxUREI2VEgselpoKVpFeWQlcFRNfWNAbSomRXhINixjcWdgNz9OTi5Ib1MpO2pdNFYoQ31O''@;'; put 'put ''Xz4jY11VK25JOHd1MzQzZzIyMi46Xkx4em5Ye0BsRnYyT0wqeH5ERl09O0ZhflAoVXE7TmxKfD5NKk4mTGwmN3o/V2RXbS4lM3FhbSh5QTBed09rOEgkdUY9MDNXNSwpejcobiQ0Q0hZdiM1Rk0sV21oRW5fYnltQ3YoaThjfmtpSXdNRV1gKj0hWEdKcUBWQF0jbnE9OEg6VlRhYklZYmJPSTJH''@;'; put 'put ''Nixlelg6OiVIRVptUT83YmdmQEp8K0pWNX1fQCN3N1RFSEhrdV0kbCx6Oi9FYDdqfjpRKV5FUXMhIVAhS2xhPF9XfSkoUGB6KixxfSxsRThBdSopaF5XPFZVIUVUNTZIfmpXJkVUKC42Ol9PbiEva01sU3MvamJyPU9LSj52Pz9lTSFkayZOe0k8Kjt1diJuMWh3RW13UzEjVCRIaC5KanJ0IlpC''@;'; put 'put ''a1lrdHxCdS5oQyguREdOQjNTIyQ/Mn0uNC5OcUZDLlJZQ3Y7WWI1M2MxNEdmenM1eypSN3djdH5CRG5sMDMlQG0sQG9oKjNLRSN7Sz93b0ROQFJ3NSJVez1hOmQ0Xl14Pz1XO1plPnNYWU0mTG1ha0YwM014O24qT0khZDRzOTdub016LHdFRUJ8ODttMU1nVyUrWX1SRmJrLkRAKCJTZGZpTW8q''@;'; put 'put ''JURYWSg1dzJCMWBRfnVNYzw2UHZ4SiVsdmhFVH48biRGal0oLk85Nzp1NE0sYTNDKiU+Tj1sSzkub1MmYk9KNXJ2QyptZS8kQiVMMDVBQ2o6THhgbTcsZWRXZk83cCQxRUw2ZzdVcGhSR0pNODZjdDdDU2Apfm5BQG5Ral95fUM8NiMhQ1VJVFUpIXVIQTUjR1hzKng8R00jKTdkPW5rXUM5N3FF''@;'; put 'put ''ZiJ4eDY7IWlTRERPYDkxcF5HV2RzVTheW0Z2PnVIPnFbaXhkNi4mM3Y0SStgcTQiWikkaFBMNWFsPGtMLFA9P3oiYjVpY3d0c1AhI3ZjdiFiXVprOjIsSl5NUWkqQHdWNk08PUJbSFVROmUxMF4/YCR9WStJR2c4RVJDQiZ6OUNzN25NUkhFOm06cW0wZCNjUTU+NVlyLjB9X30jbEpQT08lJmxI''@;'; put 'put ''VWthUE4waTBgdjw+NjQ9RmtpKjk3O2lQOXpBckEkOlA6d0FTNiUkT2hjWSpBaSFhMDV7RzU0UnVCLD1NYUxzb0ZGIz9FWVJMJkNYXiZjPy9JQ211NUssL011NlEsKTdsP3ZWVn40MzVWSCokJlVia09pWGRwcDcrUjdDJj9HTi5IXWRaMkEuLnI2KkpsM1ZuUm10RCptNnRYXWg4QE5hRXZLPEcs''@;'; put 'put ''JkVXVTxtdVB2Z29LZnswWnNxX0NRY11mbUZoTF07UkwqJjo0dVUpKj46b0RKJVl9Vz9lYHw1WlFwaEVaZmFhfWpAL1EueE1rU21XZ1ltU1FPK3tlTnxbVDc3IyxsPDZWPnp2R1ohXjZrOWhQW345fH46OkQ6ZmdYSFR+bXw+dzdrYnFxaS4rRnZuMkRKOiwzMXd8YDA9WnR1OG9mT1UkN0ZuW0RU''@;'; put 'put ''PWRwdVA/MypAQix9UnE1SSJiL0wzfiF5NiFKbkBAcWs3dT1CTVhVJWp3P1gqKSlFM1RUJTlKO1dURHY+bTI4UVJEc1pZODhgckIkRiVla29JKSZ9YHUiez9XZkBuLnkld312WUdLXiJpLnM5MiZIdl4kRk0iUkBfIUVZVWllbXtFQj14YndVKWZ0d3BCZHIkXnYsIz5iRGZaUWNhV21OLjhDbEJx''@;'; put 'put ''QiVENHsxLmJ7cTcuYiUmWHUrViZ+S213dTV7JGVRLEIhIndlS31odyt2YXJ6aSgkaWFbXUJwdFZ9VyVgdDxuazheKV97ckx+UGA9fmBISkhlUXhDNClFSFBASnRdfGNyaCYpPDY4QDJKWSxQaC9SKSEzWVRYeFgoUi5iRS5yRnJAblU5W0k9bUhBcT0qbj5sfVVPaH09L1VBaWF5VlYzQVtgRHJs''@;'; put 'put ''S2A+NHNmY0tiJjkvPXwmKW1YJFB6VVZ8UiZTP11uYFojdUk1NU04T1BveV11PlshWytWZ1g9V09reEhuTVVRa3w6K0JveE9UUEgrRGJPQGc1fVJvR3tdcVRySGZuVFs8MmtZZkZ9UEBtLG8oe0JBMnprOlUwP197VCxTVyomW2QyfShrQVpGYlp5aGFma1VYcCVoOXFxaEx7Q2hrZks+L3I7UnJW''@;'; put 'put ''JldET3U0KERLKl4/RzhNfFU9XW4/V2tNaXA3I0c3UDcxYEgqJV1AOSxqOkw8X2tkfW9dakxneHx3eTU5bCJsJSozIitAUHh9UGo2THNZKXZgdjBrKyx+KUhlY3ZxSXo9XzkoRyZkY0lnNmojJnheOVI2ezAiQU0lRG1QRnN5RT4+dVguQnhGfUdjLmNnNmhbaHQ5eWRsd2VMYS5za3liTXhIMWZW''@;'; put 'put ''endCTHxuVzFIQ3sjZFMpKHYmMX1mdHs+NG9qK11pJWxdYGBJNkEzR3ZYaSpkLitnKG4kViUxYlJ3M01uPEo3MF1mfWYjJUVgellrKTRbfGtPUU5xLygzWFdnekZLN2dMKWl8NWZYOWtzNSUoSiQ2MEMpWXdNdGRiPVdnSltmTnlSb3A7XnM+LFYpcGtJW3doc3x5PytdTThYR3JWLyhZQm93dGM0''@;'; put 'put ''bSJHOmZ4eXFOfUteMzA9eHJwJVNOM1hKb2YuKjU2cjs8ZzhHe1A1K2A2T3d1L0VUbG5rTzMyZ3VAQHhzNS9BRkVfVHtadSxgXVhZYTNFWj5eTVUkZVlIKHpgKTowe2B4KyRwLiJOIUAhTiVFQXRZRUJVQSFlV3M7aXZwUn42fEQ/ZyZtY3svJHomTl12Xy5gPy4lQixtSHFHQTMqVnlbbXx2byU/''@;'; put 'put ''LiR9R3NINXFxbW8rWj00dyNiL1UxcCRMbEllVGUpLFhyWG1+ezlBQmcxc10pTT4vSkJVL2BtPFdtPXZnOVErdS93Vk45Slh0MCF7Q1A5cy81dzU9JF95MG1GNDN4TDB5ZmFVcyt7T0xHJDNHOnxjQVt4eyZJPFJMWm5de1E1PkBDJEYmbDV3IUE8bnAxeC5GMmtxSzlxTFZjPndufDhJI0F0VEBH''@;'; put 'put ''TWlmW3RnLkJMM15aaiRlMGExdWtpPDY5U11dfWZ1OSo+Mndfa2IpdmQxRW9yLno0QmJnJSVQYEFZfjBVJiU7I2U3JHtgSmw3dVtVOWYhenQ+PkI5N0F+NkYpI05wQH5jVWhUWyw2dVZzbnZmPmZ9VUFHej05Z1lYXjV7SyxOLFVXS0IwX0NuKC8xJGlVQTgrSjopLHAxcikuJXs9aHZqW3QrNC5M''@;'; put 'put ''blU1RkN+ZlluQ3JFOyg5eGxPOHc6NXlxS1hEMyRxcixgdyYxa0V6Z1R8KyM/WTY6Ol9oZSp9KSx4a3chV0IzP3hyMHxOUC9XQm9tWkVmS1Z+MGNTeHFaITBtPG48Pkt6MTVyS3k5KHQuWXA6VEssb2V2P1oubiZJbV9YfD0pTkdpVTBgcHJTK1dPSHQhZG1wJUJKYGoyLF9Ze0VHJjA2Vz4lLi5n''@;'; put 'put ''OyU4V09EPl56cmNgXUEkQ1YjMkVgd3koUm47cixIY1N3KCImenA1ZSlsWE55OllwIWV+VXVmeCo7ZkhebypZaTJbek8razZqQEhTSHV0eEJlcl1eW2hQZV8je1tgK2gmWEdrSDhMKkllaj8+d2wpQls8bW9VWTU7KVlXY1lHXkFYRUgvWmBeNEtZU1M/Pio2MFcsJHF3fTdAYlFRRCt5ZWRmR01H''@;'; put 'put ''V0ttY3h4cWNCeEs+I1ZFLko0ekR4aW19enUmVkNySyhBRyNRai9JWCZxQUlVLEIvUj5SZytLbihwdnwjK2F2L1k7Q1BETiVOYVF+dWVQWV9qMEdvXXVWLHlgKnAiMnhofC9PTHQjSzZCO2M7dmlsYjRgRl5AWUB7M3NlKzhoW1Ard1tdeVg6MmolJC5pVkkpSCM3LE1JUTFkQ09DQ0g7d2x1VyF7''@;'; put 'put ''M2QoZzo1LEx1WTI2OGpfYXdMZE42THplfGZrMENPSlphPGomfC9iR31yOyZhZSt8cSYhXXlMLFtmLllaVDxoTloqTDVlVj9FJV9DUmpOZVtANFV4RExQdlYmPVo0Xk5mYmt6Y2NxQmohayQreGp6cm0uIzMiXSlZZDpNXkJbTHBNXi8qb3NWKC5SM3hWX1hsKW1gfHMle2IpIk1IbUIja2lqNll+''@;'; put 'put ''JFNWfTtANz1uP1JoO2Elakc2WX1SW3xnWWNbW2pqKkZ3eEslfDdKT0JYbmI1NnBHY1tHdER3ITpqeEVeRUlbMVhLZyNtcD0jemszITBAIV9nWWo3VntXQ0JMImJGSkl2WD42U3VWO3hdOSorUHpER34pa2hpVChYRDQqV3RMTGNlemZfMzc1JEBHOz9fSlo7fkY8fCNjVC9DdjNMeFo1bDAwJkVp''@;'; put 'put ''KjI2UFpsJDxwXnpvPT02Z0RfKEVtPDcrazUqK0FsKDxacVVGMm9OUEk3Q0MzLD9vVXltO3gqfSh4Ijl0KiFSd0Y5Yzx4WzQ0JTRrPyY+JWZFQmRpTjI/RG4oMzhZZnI9O1l8Z09uKG1Ra3cqZjJnPS8+Ki47KVMhPm5XWiYsK0cqMTgmQ3c8fjBgMENHSEQzdSJ+QEhKNDM9K1BYWD0mVVR+MSlS''@;'; put 'put ''a3pMY3kie0U4UUVHVT5AUX1MJW9qQGdBRHEmdHxyUDosPWcsbT1jfUU4IUAqczg4MFtBYV1PW1N3dC81ImJIYHRePkpXITBMVmxiS15zNnk4KWliWk1kSUMmTk86U2BWMihOZGFIOkQ8KyI+KD9KS0tkMjYmV2QiKWttT0NedjVMIiUqL0BaUXFQY05JJXtdVypxVUtAMkU4WHBCUF56XXxKcGNt''@;'; put 'put ''UT0+W0teKXlBcD5XI2RdVnZeIS42c19vfDhlQ2ZEeFtIXVUrSHk3cn0wYzohS30lcEdQU3U8PDYqODl5YH43OHFaKHdiOCtUWT1WXkNZTzp0fkdCPHdOZzNiWmZ8eDBlNHIvY1V5US9ZLipdUTs3d31PY31fYW0+X0xeNXk5RSZuI08ibkhwdEgsRmUqXW04bntDRn5AUnxbNlFrPmsoczxhfERZ''@;'; put 'put ''NWwzdH0rfnk+fUJmQldWK29ISSYmSXFgT1dob1suODBUST5EVVU5SnAyMnJWdCs2c19bJiYlO3YkbEpXfWdZcSxESzRxPW4xWUx0bCghdDtqVEN9Smhbcit2QV9qM15XQnQwbDZjcDF8Qmg4W144dnwxMEdUO3t8dy54djY9MG8pZGt3PS5je3ZjYjoyZEtYMXhhU0Bpcnh4JUB1SzdxJk9LQmZf''@;'; put 'put ''STAyWk56aFFnTiIweGxLVF9BRyR7PntpfmNYan1UU1h7X3lBWDE6Yip6XmojI2FhdEJFUVhMMjRbKGk5dllab1lYUm1mNUJGSnRGKTdQbX1mOUtfYXg5I3NHYTFkL0NMb25YPkQ0eCtgL1AjO11JJGJ1W35ZP1BhJndJU24uTDFQRTJRZkZeKjQuM2U8bUI1XXg7Qno3NWJhOHNEak5OITQrcDFS''@;'; put 'put ''NFRjZU91JUFWZnw1V21QOzkmaXs5JGwxans4Y3koWzFnPyJeTz8/SUhIeUpDcT9jWDtjUndZdyRYTTJoWEM1aFNxfjk8ciYmbFsyKitfbzMyXj5BKlskRD8wdm5FVVE+ey80VHExITtMUXkxdXA5WVAmSE05Yk92OlAlKyhOa1pGYVk0KVQmIXtWRFRROVpIbW43WVphPE9qNj82UUd3SCoqengm''@;'; put 'put ''PEF6Y1UkaU18Oi8qd2pFQSpzOWk3fUU8eVFyREZmYy5rOyhldTd2Mnp+NzBsVjdKb1VXVGJiYmF2NFc+PX1eSmBhZTYqUGhFS2ptITZlVVB2NH5Pej18Xmc+PlQvaGtySTg8VnNuLnRQbHc0UEArJGJpdjg2OmpjJUIkVEh6RUVnNks+e0FROUhibih6eTRfPl84MFpAPG98ODdxOCY+dXxyOGxT''@;'; put 'put ''VjxxRUAwYk1CNz8yeWsmVzxhJUFqOD81Pm5fXyJ3Vk5+VDFPbEVsKihnNENvVl1LMzdlV1cqb3okWUN0NFQ/cSpYNnZGZmgjV0J9Q0skJlpCIng6TkYqaiFad2dbcXo4NU5YWEpjdlVbI005O3lnWF1DZDxqbzVDMnVUOW58LnVbT2lqeU5+YiJHJlgxTVl3aippRHF2PWY7N3lReFkiT2NHRlRv''@;'; put 'put ''I2RGQT5Xe3xCIlQsdUJzR0s5NTtmIzRbPSZGblJwKmRScltBKDhAWExBZk9AKFtLVH5mUG0mdSswbTczK2BqKyVgWVtoNWVkdn0zejVkZVhhJmJZY0grdTtoV093PzQmZTNXYFEhPDBGJWJHR3chV2AlUkVUX0RYdmdDV1VFJkUwbCkwKzArYVt1e1dlT0JlcjdCXXNjOUdgJFdyZ2tvTSp0aFhi''@;'; put 'put ''T00/fUxPP304O2A/eUtgKk9YUzs3Nl1ALENjSkwhZzBSKjc2Yjp5bVhGKiVPPV5aRClmKkcsQkBscHdxZGRuP2BqRW1vOSVlOi9ZITxuN24oJWVsTFFpWTVabHxgekQiWy9jOEJ3Zj9mbzUjNUpnRkorNCMmIyI9RFBvVHddbDZQYUw0VG5iYkxxRFlFaTolTGUqIV9WSjUqbnpTNjZdKTttdTxu''@;'; put 'put ''Pk4pSV0hRyhTPSJaa0g+U2QpT1kreSJKYnFmRSouQWAmQ09DZTJueloiVl1zX0k3REtqcnFvT1YxUSwvI3EwSSxfYChbRGleYDowXU4vanN3PndieCNSfFJEPFtNdW83dk4qRkZ6L0Rie0tjLDJGQ1s7bGNkVml6eW01dW9JNDAuTW97LFJZMXpIMiRvTzA3fnYsNzU7RmU7a31JN2xKIWpdbHM4''@;'; put 'put ''InlAWSlyVU9SVjZqKTZZUXV6S3cpeGhDKU19bll0U2B+YjROMjFfU2lkQE18SXw1U1ZPPC9sQStmeSVxSzIrRyVTIml6UTQ9JWlXdS9tLz43UT9ZKmMxSGJLJnMhaERCMCtDWnxTOiZ6WCl6Ol9XJU90VSVwSkNaImQiayFzPEkuejpfcHR9TT1fPmNOKl9aI0NXMDZZNnVYZUUscnohN0MyJUdE''@;'; put 'put ''U0RTb058LFMqIT1NOHtTUyo4LFp8cU5UaEZ+SGEvbjEla3plYDEsWW9XKkc8Tys0aF1Ufm4sTWkqTzFwUyxHc0ohYmwqV1ZzezEoIW5jQSI/IX0wVyNfKCgiVFEiOUUuUCFuSyUuLmh+MShVMyw6JThMVm18ZFVCXWVGUThtPihEWWErd3BxQCR+IT5YfEo9cnRjXms7dV4hcWc3S1hEKlN3ZEAq''@;'; put 'put ''QSZCaTshKyF1JXRuSmY3Syhed2dbYj9ldExvMD5DRVAiRyVPfiNwN28qeWc0b1JwTzFra0g5JFFpLEJUKjUpOHZpemZYSzNdIU9aenIlWjVTcm8rcEFWWWgvQlFDKlJdflk3bGVNYCF1ND99YSFHTlswZT1xTm1STl1ZKHEvPUsiVXZ4L0EwSSpeRmZ2T2VaWDt4R1p6cEtzOF5gamBlbH47QjFd''@;'; put 'put ''T11Uemkjc31PXVQwP2dXIk48WzI1ZUAhM3Y1dUBgWF1UX2Mkfn5neFU0akErMVFrZC9ufD8pK35EeixRUCIvSz5meUlOVCoheGsxPnw8bytHKVpbZj9qM19IIV9rc2kmPSZOOUJSV0crTXteP0hVSjd4aUZ3fUc0SmYuLHdvY1pAc2pWUlBkPyhRe3NuYk9uVWJZeDBnVl0kU2pUOyg5dlpBc3dA''@;'; put 'put ''eEJeSXdjKmY5RGVkLldSKUd9SE1EU0ZVR3RbKlVtRylXenpPUmAjWkRRX247JkhtO05hYSo8emRna2IsZTwsWnhQJTBfTTFDfl8oMnh6VEgkdHNxXl9AIV17XlEzUTdEdjJRWmBJKF5qLFchTjcrWmhKYSFHemdsNHFzJEZyLDp1dkRtPXhlaCRkYiRXLFRuYXVCOF44bjdQPHRUOU5Daj1bUyh3''@;'; put 'put ''TD5oLDF7djR0Uil0XlRGXlF1bzBQQyFeVT0zUkBULDZHMDFKdXBJQ2oiJElCcXczZjhDT3xbNnttc0oyRDw7UFRWcmB0SzZWSysxdF5PKVFsOCxsb2M9UT1lb1pePl9JZkd9YGBnbERaI3dMR2VZPzBkbn08SDJANmQkdFRJc1ZeVHBuLztCNjx8XXIhZD1vLEltJXhzcV5dbF1YY0tYdGx8JER2''@;'; put 'put ''Vm5Zcy5wXWpYbW1DfTdOOnswLDM4VF8iUVtDIXksJil0VDVkaEVtXT1ocmZ9Yk4yRnI9a3gmZF5XZ21YejlgWnVQeHYiPSNqelhfKkM+UDh9ZyMwQHQ9JDdpRXwmKUI7YS4/IVZoVVdGKVNMOlhiJWN+ZnkhOyI7PX1TK1U8MGRNKW1EcmxOXT1VXz5ULHZWcnI6RXxRTFRhaU5SMElhRU92MSk+''@;'; put 'put ''In5VLChTN2k3UDd8TVlYU1JRenI8Mm1SUnZZdmYlUCJqendzVkdle1J8SUhecnl2ZSxQPzBvLCxqXSFuZiVQPzAjaSVuVG5Yfis+fTV3VVMjemo6QFVtM1BPIV4uPE9ELl5VNDxMMXc1Im08MG59QWxndXp1RTg5OUZtLHdlKmZoUUswSit3Omo1QzRBMmx2XU0pc1JKOFI1ZmlPbTtFQUthfFpY''@;'; put 'put ''dyZicFs5TkgsJE93fmZyZDE4ciw0ViFzVkI+WDIybkZFcnEvOyZgOGcoJmFsfVI+cnsiOzdTOFhkWTUuazpUQFRdMnM5UyVYNCVbbT5MV2wicXtYS1s/YjVRU150UVhDMEN2MCUwNFRuLFZeeThsbTVTPj1yXSRpMnpPTmRhNjBYUC8rSX0kIVhQbjdQPEdlQEsyb3MscWh4TW9wNDxoazN3M28l''@;'; put 'put ''O08oSiYqVS9+ImdnZTZwXkUlY2VFO3JCXnhSMEkuS1IsQUt3MEM4bz5Lez89djwzaio2RyN7JSIvVCM6bD80S19RQ0Q8T09wYzAqP2IwcHxXV0lRVVtlYE47Tm86Nl4lbTc4eElvVVpUKi8/Sk9LfCh0KTAzRHFtO2s+NXhZPWFdXipET1dWQDxLald1UHlbSHYpaGk4OlJMaFtffWdHZ0lTQ1R7''@;'; put 'put ''NDE/d35nKlUiPzBJP1M+WXpVL0pnNj8hMVYhQzsobDBWXlNUL0opO3k4bUV8WT58JjxXfnZIKUp3OUIzTUYrd1tLdVR0YjJaSnVYWCFCJSk9bntRe0xafWBhZi48Rz5lbV8mKEh3UzpZIzgrUXdDOiZPL3hMNmk2OFg3NiVlfldUISs1XzNLNyw1flljISQuS0pxbn01JipUVF1US1dqOk1yMHA4''@;'; put 'put ''Pyw0ZmBYaz07TCFhVkAwVClZTzkpdWVYPjBtV2IiXWNiLGhjcnI1YCFuVE12YyM7RX0qOzs8KmxMRSF9Mm9UQG8qJUs4e1FMQGpxQUQxRlQmUV80OjRFLktEUHMkYEUqRCh3dl1LXUdlaylTSjR6b10qJmphJHgqWmpzQTt1X3k4cCNpTVM1PzhabkkoXmpxLDBtKkl2RTAmKkt6MjQ1VFRzUlMx''@;'; put 'put ''REJXanZMLC8pVUMxdGRjemxzKjU/VF1NY2xMeS9iUm85TURDSCMuJX1xKT12L281WmcsfDthclpINiRgTzx2Q3F1SVRlSk8zXmgjXXsveE1XNilAPGVSTD9LI0Aqc0QoKUtdN2kja2xhSCEhWEA+RlR5RkYhMjVlPDEwNi9KLllJNiVpfXJtRWVsazxlaCNPazNsbVp9Y2VlNUNlJXA0dHxtKGQr''@;'; put 'put ''U3dHXUZjeVJ2Pi5gcnNMKmEhVzdWcncsT0xtPCRtVXBQekplSlt0bUEjYClkfnRIP1t8I0suKj1vN2tHSn1aa1RHK3t2MW1OZVsmSWlxajZNb0pNMEdmXitAY3NFNnJLeX5BfD89a193MCFpbCl3bz5BfSZtKC9qOllLQUZoMDE4LnI9NTxNW09lcCI0YE5gUCxpKTE+JUh1NyxdcTYhVGk9Ty96''@;'; put 'put ''Rlg5eEJrQkxCPWhCdHE3MlEkYzl8OXhDUTo7VU1OK1AqdXNxaVIoYG9eZGNKJmJyZDFCe1IrOXdbMVZqVyxlaWZ5eVJTbTF5Q18vJU9DQXVDVS8oOyVkSTVOd1J0d2NedD9zRS5FW3VlNS5nKV9gej9gUys0YHs5RXxEcmtJcmJudD5Mb0Q8M2EhM0xBK3I8TzBeNmExW1dRYUddcVJ+bXNxXi5Z''@;'; put 'put ''JS4oV29+JFEyeWxaRjc9W2g8SjF0QSNreUZ0NnBYSiFDMmxBbDUqa1tIZ294Pnd2Rz0jWSQmTHd4PWk+N3t5YixjbUNGMFBRbG9+O0xrTDdEUyUiLzt2bkp4ITl2ZGtXdiQ/UV5KZUVJSD0jPFBWNXhsbzJ0MSU8IT9JVWYhdyQ2SE4/d3dPaE1IQCJkOz1FKEhsNigsViRZdlZKQzk/OTY+WGpz''@;'; put 'put ''WXRsQHpjTCJOJHI2QnJGdE9GXy94JEx5e0pwPHhmaktyQE08bXF0c0hCWmt9STZLXVp3cGZKcFdoc35abGtPUUlgLjh6PVZickYrS2J+WTVdcWFITnJbNyN9IjZldXhFIkBYSEVbaE0lIlVTKHFJV0lpSC42bVdyTXNhfXkmeGg5V097OnsuVX5daiZaSlorQ15rRiVDZy9DTzxid3k4UlJ6Tjg8''@;'; put 'put ''Li4rLiVCQzFmPDhQS3t4V0gjYHM5R1YvdGhHdFFwVEhWITx7PT51PzEmRXIhXWIjQWxrSGBhXUBiKDs+ZiNBbGtuYGFdbWgsVmpLPylyRXNOPXElVk5POC49Wi46Lk9PPDJAek1LXzxtYjs3M2s+OnkqRkl4d3dCciYwQE8raFJXJipsTF4hbGs2L30+JigkLiFiY3h7RmhQOWN8Uj9TOE1OPGhm''@;'; put 'put ''K2hgQGIhdlZSdjVEelpuamhiMWo8Y0krXlU3ZjdDNl1vakxscV5UOzA1R1FhVG9qYCNIa1FkPTNvdjUweztaYlhAXXZFckUxe2xJR3JQdi4vUmAxTThUYlV7OXhKez18eElPQ29rT0clZipELzQ/LmUpYyVJSzUrYy92bTFkLC9QN3EhTGt9VFU8X2IwdWBOYVhGSEE6P2h2UV5fYXk9Ol5+b30h''@;'; put 'put ''NntnYHJAMSEoZmZsfV9WRS9jQikrNDJzfmN5UitVNSo3LiomXj1yPGw8bGY4TEIxPEx5TmxrPzwxP1A/MFdkd0crZGNIPT1RbENNUE9pTjd6UkpNNmRgNHwvckROVzFofEBvLFh4QGk1cnBUNWc4SWY2aXlkJXc9TjxUKzRIclcyZV5AaVQ8QzUlKylTaHQkanY9fE96TUxac2lMWjoyOzNyTDcu''@;'; put 'put ''NVNjW2wpLGYyX0guTjxvT0N7WVVCXV5hZkhrKGNLWHA0P3wjQS9qOCI0fDImbn03e2NwUzZgenchb0cqTXEkOjdJayhXM0hjbi9RT1diX31jOFtEcnpfXjh9djFRODxOd2p6czlvayl6cC85QnJYKndEbjwiXlciOGJvUSt3QU5eYDpbdEwpeyxDeFZEOW1WYy4sLkdySWdYc3FpKCFRWi98USJt''@;'; put 'put ''Mjk5a1ZlUSRAS3NLVCNxLkYmSm0wfDJtOSVyQCg4NlBpWjB2akErKnomPHMuU0ldWnY4YXpVP3NTTSNLUStFZW9iXVImc1U1XUNlJGIhO3MuVVZ7eS9uODpgcTh8VUhHZnc7YGJ0Pm5GNksuWT4iPHNlK1hbIyF0cGcleyg2TUVCTllbUShEclZQRzpJd0dwN1Q5SEdjSUR3VlgqNTkqWHouSTdZ''@;'; put 'put ''TCo3blFEZWl6KEtTa0FZSDJSIikkSTdGYj9XV0tDWT9eUXN3fnYrd1hCNHdsTCNDWmk/TTYrLk9DekYwUywseUpJWmpBd1d2UnY8W2NFeHthSTc1eV9wT0khYnBbL0M6QCgqanVVKztXM3dUbnAmJVVfTUdqMj9DYj1eTjU+bDtoQCFyc3I3OFF6VXs9PU16VXtGXiwxRD4+RkooWzdGJiNdcT94''@;'; put 'put ''a2lXWU03XV4qbzxNVEVedExaLHMyW0VPOD9iTyU0PTFROmlMKWU8NjRNNlNQQ21+NCJrNTlQISguVEM6dDt7bn5oJENlSTFvPSo4eHMwa0dLdiZaamxOeSVkU0V5Ul45SWVhWGJBITcmUEtgaHxnYUVHUSU2WXxIPShTaix6KUpecFtkQ0pMOWxXYltlMDRlLHYrcU1+alAkJVV+UEI5YjAiRDIm''@;'; put 'put ''Jkx0dGB6NkU9M21oQj1QezxlXU5qekckSHdXTz1CVUtQR2svaUMkeS80Nko4X3xYa1gmNVBEYyZtRz95YXhELF8kdXUlKllJY2xdaClJaV1dJnc7bEU6ND9QLkJVW10mK097cWVNNVJGTk1eS1lpWS4lPWxrUyRDVTskLkI1XWlARjhTaFA7JnZ7Lkk3WVc8TSo3bnIhU0QlL3ttcy5daThCM1Rk''@;'; put 'put ''aFh8QzxBKiRJX2kleSEjOmsie24+KiV+dlc8LHc7KmpCS2EuJWxMciElQzgve21ANXpwSD9GaXJFdVNdc1hKZW5EdnRRL0pzJGI1TnN7SE1eQWM2JlZ4WXRMeUNGRHBXL01FNz0pMT8hWnUxJEokSzxRSV5GPCY7eWtCYFUkIkxffWl3Iyk7Zj08SFA8OTYiYExqKVc9YFR6a0B8aHA+OERqXWZk''@;'; put 'put ''PGNWPklVJGZsKFQ+NjN5Pmx7e2ZhJSE9QnFmODBGUkI3djdnWTJ9Tz9xSTpGRkxaTlNXeTNUQmd8NTJqRFo9T3ApIz9BK1l8UlAlOXRlRXMwVD87UjdEJUI2fmdtb3d6aWZeOik9aiR2MFgyKzVEV0hJTWIkXypgezFpdzJIR3I2PGxoPT1IYS9uV2tdNzElL25PU0FNSktTKjddRnFdbFhbIXJP''@;'; put 'put ''US9SdTVBL11NND9pV0hJTVU4XTtbNEg7PSM1fDIjZCJrb1M2YFksTS53a3Y4I0FkN3kzMUNvOFRzc2hhYGFTOWZ3Rm0rN3BldFBHaHhsaD09dGVlKDxoTWYsLmVCMypBPi5ERSgxJkxlZDpod2xLRCVdLzBmRS98XVImdV5KRHg7RkIkSjxwUldWTEhRailmV2RwWH14UVFNPSRaYXN+SXRWem49''@;'; put 'put ''I112MHwyYXNDL0BlKC50dHMhLnpObC9LMCpYZURmW2U5XipgZCVBJDI5TEVgLmFuPj4wOEBqImVFXlBCejI3JH1gTVNqRTJvVW5ObEdzMzlXMjpxcVs/fGBsek5UaDw0O2FHVnF7bHN6ZntyPHp7SnZAIWUubkRaPU9OU2koKmUoRzQ5OWciM01aKEdAVk5wfi9mcjlXNFp5XiEiWUc5KVlGNWQ0''@;'; put 'put ''RVlLWDdWSiJzZStRdWdZYnQzaD8kdil2UitYNUdVMCk+VTdiZF0oNWo+O1pifFUjb2IkIiMzNU5iUzskdWoyL0REfGZeWzhjfFUyPGVVaDp6eis9RCVwMT4pSkhWcDp1b007PzdhNlksQD55b25lQzNdK3woeX1NJD5xQ1FkWyZgOmkydDk4Oz1BQGElNTFQRTppfW4iMGdObFlodU05O1d4OyIx''@;'; put 'put ''Ojdrfmg5Xl8kZVEpSzo4KmwofWswUy88Xk1ePlVJX0lsMWpefS9eTSFFeXJGJDNOIltEM3JhcyZ5O3p+ZF4zZGsoO3JJJGl8JnY3Z25KXWVGQTVWIkp0OiFPNURYMDUsOHtgKWhEQkVGaT5qSShESSwrMD56TkpBcUJFLkFmSytMKkhDfTZKV3A+YSZDW3F5WityPlhRWCR1Sz1DbSwlMEVUVjte''@;'; put 'put ''REptVX1BZ2RAX29xPkhEP1tFXWpDN0gyRiUvL0oiVS9taGteP3Q5PFY1KkdKaiVQUVVGczMoQEl5JXFRSWBuVltRPH1JP1tYK25QWnYrJFNpaG99R35UR1ZgVWN9S2V9JXJhOCY2aX48fi9vfSlTfmdAKDI8T2xeJnIsRH5VTGhQVmVaLmpBMTVqbk9JeGhPbnw7Ul4jX21fTnEwdDB8cjlyMjow''@;'; put 'put ''c2x+OnpeVzp+UERTaFNNWyFXSy5CLmNaYWtneXIuQkJQLi4zOiNOY0BdUHxaIVZ1anJBZzp7cn5BMFltcl5tYEZDPU5Wb3gsZSVoIXxRMG1pQ35WaDxxdiU2K3UlbXl5QnJFK181SDJxZD8ocVhbPSRRfHEsKSwlKHRAIyE/Zl5mKmB7Pz9GQiNffGNrQlFubF5ULkVdaUIralc9PE9yO3tnU15P''@;'; put 'put ''JG57SzlNciFgUWpYW2AyJlg2JEwsKGs9Yyk1cVg6U2YkM0RyJDwwZUhJPDxLaHdXcjFwSGZDJFtaTntDPHpOOz80RU5uLnpMS0w4MC5TPmxUXSsuMz9BaGkhM2BOam5SMkpIR3RvL0I1blZsbkQkQ2EmM0RDNl5aLjl2TFk+OS5tS1RALDFDKGwvMWppX0AmITVacW9pPGl8Xks4cFhTK3p3dnc9''@;'; put 'put ''VG15c3V9NVpPfXVVLC4mYDZ3N35IXldNbUhhcG8mMDhhblFNYz5iSWJ7Jm5YIUp5PVY/fTlnTF8vd3Brb0ZhS3lxRmhqQWZ1XntldDgiQjZ5Rmo+bGhAU3Qqd006T095QiM6Jm9NRCFjQjsmJHdJKSNkNXgsUStDL35VTGNjZ2hTInt8d3BBYll3bTJueXhxM14+cGVYUmE4T2t2MDRzMXRtKUUm''@;'; put 'put ''dkAmVHddTEI+I0VOWl1FR0ZhVHtkfDpVP1ptYyVmQEc/fGpeJG9XZSl+MD8uXmN1NF5WIkBuSzZLbUQ4WChyIm43ZTFtR1A3MztTXzZ7cj0lIltXWDhNZmZ6ay4rfUhjeXh7SmtqMk4+KzpSUix8OldQKm00UzMkSSttZV8oKjQrJnpRKV9pNUN8JXZgK1cyS2phMWl7QE9oNDFpcWJJYzM8PFFX''@;'; put 'put ''TyR4W3N5ME1GbDlFYkxQRC47QyxeaUxjbkgzZylMR10vfmBFZ2wjKzc9RDAjPEtMUSRxciEqL094fGNGJXUmZD0xOmQyPDZ0P3xmK3R1KUBAWE05cGQ4K1B9XmNfUFtNT3Y3cCZGaCtNNHg2VS9hLldyPz9yQSUhJXNOMShgN0MhPD4lbnFSNDV0fU5vS2tCU3BNQFtPaitWOl18JmlPXnp0WCRU''@;'; put 'put ''dnw1e3B5RHZ7dnBgOkwrYDsoSi9reyN0U3Z5Z2h6PDZWUmUiLytLcEdBcVdfNC9aPC9TSWBbIix1KzJCRS92ODFVdVZoblopRjUzQGM7aURRQzk7cl1qOihOLD5hcDVHIXpuVmE5SipKODkhfGFUMU0sYEJQYzxgX3RgOWo4T3pRUjgzOVBqP1tLVTo1NlVqYWBTfSF2cGZdc2BnXXlWI3csY3hQ''@;'; put 'put ''O2NZNGloeHwsPWhlcCwibEo5QzgiUzs7RGQmI3VISUs6WGl3bTJfRm9SfD9mTSNkQzxnbU5qbmpkaCJZZEA8ZCJTZHoyLFBTbkJdbkgkOjx0aUw8OkJwWygoKlo/IzxjaEhGU1UoalYpXl4sKUFgZ1toMjlCbUljOHowQXRxXjVSQUFtQEUhVno7Z3J8Xk8jKV4iKWReVykhJTZKMl5iJHU9L1Vf''@;'; put 'put ''VT1MZi5EZjAwQCo+dHFrdCs4cHJ1MiMiOTs7SkJwMjZaW1B1Mz83Uz0ubS8qbEJwMl50T3RQNDlXeSZjWFhlWDA1LyVEOXhtO0RUejt5JDI5KSNJek15W3lbNTthTk90Kj55MXB0MjlPbHRZZjZIeV1NOC85VG10RH4jdltIPHNoIWJ8WHJSMElHIXFAPTdGTTlNUGx+NHdVQ21qPkp3JXM7QDgk''@;'; put 'put ''PFRNODJuVVtsPUxdfDtAe3RUU21eaEVsckpwd2xsUWZaT3RtR1M2YGEuNXh6VkV3OmsrSWgpTmdGUjAyfTdebV1UMXcrJUBCa1ckLjFlLlgsVG05P1VHZypdN24xcytzW0VPYUhjZWQ1NVVaXnIibjA2QHB9LjgiQG00TDtCPE4iVXFWX0xnekR5VzBUKjRNciFwT0N7Jn1wOUdtVWNEXTYvX2Bw''@;'; put 'put ''W2ZBL203Lyh9ayZKLFJJY3VhSiRBdHRgW1l9MC5+aDF4MGt8azN8Tjc8S19YeUhqWTNdMDNMWWt1MTVFQjxXdkhiPWUufWlWJDRUNltFJHpFfTRRLDhJRyFubXcrMilBNEs+dk4wMFFGUiE+X1s5TjhxS01mQlUsN0BsdkA5dDI9SSwmLlhtUWZmczRJTUZNVFQpcEg4bG1BLChwVUo8ci99N1ZK''@;'; put 'put ''ZWduPDFKUHV9ZnF5WTBbaXtPL3U1Y3JrTkc2LFNpUDBFZ2Rjc1EvenZgLigmNCxaKE4iLnlFIyxBOkpKXXZ4VDNiMTk0cnlsIXVsUlZlNHheUjNwbFNuU194OkRldWFrVDJtUEhJdHN3SzhfVkM9YnVeSCt+PzV4VVQ2eHY1SV8+VGM1ejlHLzNvWVN6ZUhsKUV9P31kUmJQM18mLGdSPi4xaW8s''@;'; put 'put ''VC8ibC5kPVpiejguRjIjNWFrYjw6UWc+WGxZdCFCOz5JLiVfOjU/emJfXXY4KWtAfHFxfGdYSkI8Jj9GWSZ8Jj97YGlUPlZNY20zd3EhblopaUtYa0dLXV5aPDpFIjJqd1hHanUvYyRoWjMxJlQyfl03JE4+eSN9JVMxR3xYS3ZRKEViYkNpdm8rU3ZvKXcjREokZXIjeXwyeF0rVlF4eUNjWTJL''@;'; put 'put ''IUJwUEZ8WDVdV2pASWc1a0VRQ3teaCE4dipMR0tOezJnQFJwLjdVNHpGbSQ7amVCcjsjUGM4fDtBWDBqQmRZOVkiaXVLNkJwWmx8S1VGIXxbJldhRylATC93aktYOkc4IV5GTktuVGAybGVyXT1rQFQ2SV92K1t8R2BlYFpHUDVXMnlNKlhkWS93bCM8amt3eWROfFZjM2tAWlhfOyhMR095WDJx''@;'; put 'put ''IylOTG1NX35bImxlQnleaj5DeF1QWiRKcVs2bmNDY1JkUSUvOi5tR2NSQyUjR0V3TWozblYiNC45QTNLbVRdI1ZddHFMRV5kSmZdL28maUlPJnt2REZRWzFpWEN1dFJvSHpWbGJtVixkWHkiYVs7VCF1eUoubDBLLFdlck5PZ214eCFLYkUlbFlHSVs9KTM8Yzo5PU5tUiMqRjZLSjJtKVZRPUtL''@;'; put 'put ''cjd9eSNhKVghOi4rfWV4Ny4wfjlta1BUYixZaDcqdCxaajZWKk07Jm5HOiJYfGpaaFowXz50SERKUWdvTnVJSkV7PWZUYn1xI3VadmcjS1VKOE5mYixRQmxpR05OPns+ckIoL145Li9zUjIhYlZAWXY0QWVgS2AqX08kI1hAMj9hYSgkTGFORVVuNFA1TSJxJiN0Sjw6TDRWLF1IdGl3RnpUU21r''@;'; put 'put ''eT4vRi5WVns0NFQwd0pTKClSbVtManU5YHZ7cSRNdSx1WW9VTGI2eCwwVyMvImpHcVBaL1NgV2pbS3k7U3ttTGhkXXB8IXM6a2I1YnBNb2swKixBJDwxdHkrUE1hImtldTZqVkthdGlHX2h7ZntbeFYoMFF0RERMNlgyfCt+ZUN6dj9hRUJaNUBPLGZLOEpZZEk6a1pjaU9CVkN4ZX4wK3U9WjdL''@;'; put 'put ''XW1dVCpRdVRNcUFPeiYqSFZdbjxgb1VdS0pWd3Y+UXNRUHZQKTJNQ0gqOSR1Ty5fK2NuWjVaUG5LI0QpREJXZ1skXmNUJnw5JFlDbmMmNTlabzVCZX1BbSoyJDxIQ2khWTVyVFcjWTV2THV6eFloRX5sQ3tmMlB4KnJteSlyWk9rYEhlT0V7WFYyUFE9RCRiW2tYSnpNfC90cDt0bH0/RlowZSlI''@;'; put 'put ''Kj9WW1BdTCJBLiVZLHFLQnV2JilrTklFe11rVjtDZkxxSEIubWNSYVlFYXYjW3hXbG9CRGo9P0pecHxwZCtOeThaRkxsPyhXUFspTT5qLG9LelloL3pUYDlRRyw4JiRDKSRpImAmSlRrLFZBRVU1anl7Qj8rRio9XmJQbzoiaF5SYDk2YFVnVGIwWmpOaS9nV3JOLyU3SCs2fik8PDdpMk40YS5f''@;'; put 'put ''Z1gjT2hFWzkwN09KbnFzViVKc2A7I2FHOW9OIUxET1AiZkN6Z0NsXTM9RnYsJElKJClOe1kkLF4pXUEkJiklKSxVezlFczE2UDpSIVYlKyZqYVA4dyxudWkwOyFPNFk7I0o5TUtZMF9YJnl5YVguMkxvTnhCZD4lfFNLU21HJV9mb2IsYWpBYE4kYWdVPCI3YzldMVZuYiRiZSNHZiROZ285bSx1''@;'; put 'put ''PWosIj0oelJJfSFhOk5sWWZDWUxFO1MzKytdTHZVJWJqc29oTTtJb2ptKSxgbnArai9rYl82c08oR0wvbWNxNkxbbFpdSSx9RSpGdzkhTkUoQjo5cCR1eEpBPGQsb2BCbTlAJXxPdG1oJjB9QiVbKDklYCRVVSNsa3J0b34vO0wwY2w+Nn5ualNucHNqNV98JkJLfjkvNkNqQEQ6SzZiJUtVNilw''@;'; put 'put ''NmJfcDZiYTNRMkNfZ09zRGVxcCgyLChqNTZkJHR6bXhLRWcoI19PMW14YmoqTFFdeHZAJXQ/dFQzLEJBQUFBQTgwL1JQdXdYX0lZbyw1Wz1xY1FhUSIqITdgcTNzVFByTSg3YlM/UHJsIWk/MkEhP19sd3Z7eVU5TTxRJkAyNyEuWkJFWD1dalRzMjJ6cEwhVjpCdyZeLEV8I3Y5OmBxbykxXkA9''@;'; put 'put ''KEQ/TWNJdHR6b1B6MS5KVlRETUg8Z3xHNlRuJCl2Q21LI3NQU15mO1p+eEIhaCpdMG8salhqR3RwfkQ7NE1kdG93VVk8fTMzP3Z2JSsoLCw+QWxdZ0l0UGJwakE/QCM/d3MiT1tMdjxTLEshfC45ezpKPiomTyx0T15rUSV9OTckZlgpLlQ1ZmBXSjE0O29KRkQ4WDIuU2A/aCFqeiMmezFgVDRv''@;'; put 'put ''V0c5fCtSNkIrRzZ1UCpyZnsucU0wPkJsOE1aJSVLbDYlR0Q8ckcmKzY8ZWxfMHdGRC9MdzIrYixMcmxEbVhqc1EpfCZgY2M1UV8xNyJTUmFydSImfEldJUx5ZjNWTk9YRTZFQFIwOltaRUx6SCE8emgjZWV+OV9iPnVVIyZyX3BZcnQzT342PHMxbj5sMjQ+VyhESEVASkVCTDpxTnV4L19lS0Up''@;'; put 'put ''fFlDU2A+MHE1QV5TMTUpKEJVK244QjwmeilySmN2VlE6eXJrYm5WNmJnNXxRbiwzJn10RlFPW1R8KlVdcXAybG1UPjJmUjl+bEprc2kiUUFtTz0rcW1PemZROCZwMWp9VE95TSM/KDcqR0VjW312I1N9MSR4djVSNXR8TT0/eU9beylARkAlMUF8TzksS1AyYyp9cj4ia3ZwW3k9MFl0YHorZ2lx''@;'; put 'put ''V0VxQilsZTF2Inw0e1Y2KGRtcX41KGI8cCZNfCskdTtUfDEzRjRURVRmc2BFejpVK2wpcFUjKzF9cXJaPSpvYCIkWzxsMj1OaFs9VXtZJEV3Iz5bOS80L094In1uZChVJGwpU14qez8oUU5HR3l2W1hpJXQyQVFCbjNwUj1RXjNrfSxSaj5vWSNhQkBnNm5wTWRLU0t9T0Fmdk9BX1cpYCpWaCsi''@;'; put 'put ''bH01JlA0cG9ge1VQYyZOWklxb2M8NnpTUnxzY31CZkYkKS9iQi9PSU5gJj46YXUudTR7QCVpKUNQUkdvbWNAXWgzUWpRXX0icWp1VSg3SWtdLzlkX1B2SyE/NS4pT1tSIWNlUUszSVR9fjlPbyQhN35lPSp6WzdYMmIkOjJ3biYsK2Y+ITBhWU45TUNdRyo2OW4vVEt0U3NGTzgjbGo3V0pPeVlm''@;'; put 'put ''IThZIjpyMkRyen1IJU5CbnIxRm4kYG04fjp5Yjt0PnVzKTszPSp9UTdEd3x9UUFFNytJRyRnfkJ3fGhXVlNoP1pjPG9ZMC9iSXtBQz4wbU9HKyUqTT44Nmp6JjxWbkRQdHEzZEx5aTVBI05KWkIlTjcrWnpnSHhGcTl6KF1Mb09XQzhZTWs/OjtrWkRHZSVXWnhvJmUmVSklfFViZW5zOSwzNUJk''@;'; put 'put ''eW5wX05kc0lic0phYjk3YCRnI0huWSR3NlNNPWt4cjpPJmo0UCNraSFoI2Z7XVAyT3AwJGM2N2M3PW99RU5IRVptYSx6U041QF91ODBnT2U+Sk4zLz00dixpI2A0Nng+eDRROXhBMl0sNjg6WStTI2BnUj5qa1RfNWFjSlV+KDB7aVhLeS43aHdZYmcoPXdTOEhPTDMwPSRYWDwqdEQ2anhgX108''@;'; put 'put ''YHcyRzxQbXJpUiMqXyUhST1pU1cjNWEkJEkmPypMIVk6TjhAVy8hJjlnVEpdKHVHVHRBZ0NRfTxQSDdbPVAoMFUyMSlQdmZWRl5Pdlp9UShkIXdeO0gxOEQ2fF9mYFpYZ1o7TThremgkLlVgUzExeEUrOEQjcTJjJVRRYWU+SzA8WnMsPk9zXnFZJjouZTVyS3IyTSQuQCVPQVJRbGJ6MXk9Olk7''@;'; put 'put ''UyhqQkpMNXQmYlBuSmdQW2hzPzp4PGs/MDcke2B6XT1xNisoNGN7ZC5fd2I7bUNeaGdvW3ksXiRvQGhFPTJIWjVVNW88MFFNdWkrVkVucy48UWEzSmpENytSbWRecWJ0KiRROk04a1pRPTBhZnk6bXFbVk1XSV9xNDFVKVVCVCZFdnE1LGlzbng6THxYWEZwUVM8RGQzRExtOVs/Pj5ge1RtJX5q''@;'; put 'put ''SyFQLyY9RVVoRn50JEwxV2Bxelp0THVEflhvTEllWXd3a2JPcX1yNGokQi4/a0cwIVp6V2BrRytkZXpba0xmI1Y3TnU1dlBkbHJBd3RGPS90Xm0pPkxjIzp2Syo+TGJTVHQ6QEJMT0IiTiVOe1s+NCtOdkMwYmdHNld8ZWc2M249UC5gWiE3NEBBOXE5bGNrWGUpXl0mVmRkSjdJMzw/djxQWnVd''@;'; put 'put ''NEBQQDNSd3FoT0VOc2tSKylSUCtVQmFMNHwqWDJ7cio+ZWU2fnJbTXJfUkVxWH1yNXJ8ayZAcz4lSixAcW94biMrYC92eXArO1lReCZXKSwlWmkkVm0oTm5JXyN8MGAlZjBmMn1LWzN1a1RmZWdoQnVVJjwhIm0oXnxxYyo3SG9ZN1IuezNnYFMxLGt6OTltWzxzK3U7I3hDYmg2bEdLMGp2aVpX''@;'; put 'put ''KFUwaG8qITZAWyYyZj1+NmhPWEtydzNPcUpjfnNrZjgsKT5GJS5uPldbPX5LMH5zIzVadHJdfmhXcnJ7PkVWRz1UOm1Mcl1tYnJ7YDUmfmY+eGdvNT1wPTIleGd0XlBwNnZVfHh7cF96OD07cVddPmliKE5rP0osIk0jQDFCJSJyUG9JXlFrVT9zd3Z4SWNTLEQwWkR1anh+ZilqMTFmVHN3bkxu''@;'; put 'put ''VS4ib3p3OC9WYDV1Qj1ZTFVnQUokKW4kVDxjT1NtTEREJSgyV2xBYm1RRFl3SHA8UGdeRDMmNDI6ZSsreWRTYm12R3dFUyUxRVJCZSlgVDNCcSJeKCNrL0wyPHo5WmlFSHxPcmkvbF9xQ3k2MWtBKldMVVkpK1VyQmI3d1dsPUZISERMdFI/W29NUyNQYVlxWjVyUER+Qms1Tk80UjEoZTREUVRC''@;'; put 'put ''bDQ/YjJHNjRESGw1Nlc8dmd3RXB1WWMvfHEsYiQobSUpMFk/az0kUSlNKHIqQjNiYWNRUXAlKXdRdEo3c2NWQis8MWthXUJaW3YvYlFBM2klcis/Mk4+KTZ5Q2EjWExVVnRkYyRKfFdPYE03eHdLU3haP0Y6b0FDJURmRHE2VC9XSlNNQzIrVz1oOVo1NUZLfmhWcVAyb2cwb1ZIPHN8RCFXYi93''@;'; put 'put ''YiNXd00/MV9BQ2Z3dlE/OiRPQ29jZGtIS0FDZGl+ajwpZEx5SUA0dC4oVGNrdW50TXx2IytJdVIhbCk7VH1EeShxX21VQExUTktBIkxudC4kYWxMIXNJY3dGWExVanowTj4rOFBwQjQhQEFZIUhMVlhMVVpgX11OdGlOayl4bntlWUxTKSV9a1V1WDNwXUNjQHxYP0dMZTp5JldvSSgzL1dMVW0i''@;'; put 'put ''JFlhU1l3OFdgdlNBQnYjeVRAbV1Za0MqVFhkeGpIKXZ5IkFtJkMqI2ciV29oajZbQEE3Y2xOPyJCPHU1bHRKIjQuRkQlbV48aWcrR0dpckIkZzFbOE1PSi9Oa1orPDRMUHpnL1VAb0VtRGZCJihMVTNiTDVnRWshVndGKkFnd0UoQTdaPjc0NEZLbVJvbnpqaXZ1LzljK3Mhd2lLN0RtKntkbFVB''@;'; put 'put ''Qmd8NUx1R0BXKlc9byp6JDBTNEVOZkRPdFNvTi8jWypOOz5lWn56RTBQajQuNm19UVlxdTI5eTQuIzE6b1lJSlg1bjpYI1lSNlZMWCIvPlZEVGhLQ2VVeUFPWEB2Uk5CTiRbZU83PkN6JDVBVStCUEJAImEiOm87UjBEXkwwRDZhOVs6bTtFb1k7M2dHQWNOd2AkPFtTeHtZYilRYUFOclFDbW9k''@;'; put 'put ''ZVdbJWxDdFp+Pz5rX2wmTyU5W209bFReVSUxQXJ1entZdHBpW2dmTzt6LlV8TitwZ3VtRGJUT0JoSD1GcGk/Lnw+OyZ+ZX10aiYzdUQsT1hSWCtLTU5DVmFPM2NhbncwPiRNKXJ0YkkvRWx3U15YaFhjUDFGRD1Mb1NBSURYM3R1dCkwQ08vP3xqMz1qPVAvSS4zdzohbD03Wy85Y1J6Ujo9YDFf''@;'; put 'put ''QFphSmt+aEg2cD1kPFpYeDEvLyM5I0NBX05Zb2gpUnloPW18OVIsL19NWVd5ZUtBZjBvfFYqMHp1a3wwTWJDNix0eEZRdUhDXlVGYENmYGtkMDBUPnNpTXNiem4pfG15bjt0fGgzQDFuPHQ9fX49W196Z3RmfFhhMC5DYFVFYXUveXx9TF5ofGFhZVNoKHJGYUV6RHQ0YVRDJjFkem5Ye1hmMHJo''@;'; put 'put ''M3hfSUBTWyo+V28oQHJ6YF1HQEUsPHBRWFF8P0gzKGQxQHhaZGZdbHk6bFJTZHs0eXZIV0E3fm1IXj9yWzFuWj8qPy9vWl9tWD4uNFlhY2k+P2h1MFchUmhbUU5FaVtJYmtAaHdrW09VSDIhfFV3bHVeYD1YUjVvODtCPTlnfGhoLkY7Wj0lVShIYmdtTzUsQ1g9JStrKVkqMHB1Ik5bKlRnK2sw''@;'; put 'put ''RTJnPCZOMEdNZnVfN0Q8ezNaOyx4aDhhK2BxdmFEI05VTkk+dlt2KWNiOzh3P1QheFovKGpmbTAqRyJoMEZpVm1OYHBSWER3IUBaMkw/KkJmQ1ZSYUZnRCFhSWsmbypPVU8xfG1LVDsrIitNRGtkWzEwZ1V5UV8wMFQwc2kyTH45ZDFCdW1Wfj40WlNpfk07Tyx1LHlWYmkzPlMoKX5gI2N3K0Ij''@;'; put 'put ''eVMqUiV5cjlBRXducjlnSEVHPX1HVWpSI1k2eFEsQk1lMjdyWCtGVzhYM1VgMyxRV0RLSSt3VTpxWVdEezBKWjl1T3VoZiNCa2ppXTBVPFolcTAwOFdPIXJ5RmsiO3E6KF83NUZUM1loPmBzUVk8JTYvcCxZTkRvMGBMbTU5OCpWPnJkL3hQLyZ9emBrS0tuYENHM1I1SE5YfFZuVHwhYUh0JnxH''@;'; put 'put ''dCVxenA6UT57Qyp4Y1djeFZCWkgobUwuckszRnEofUxhVi8hM1YvOTp2dXtGb2s5TDVyfClxT0AoMSxDRDJnb0NnRDYxdGlvQ1doTVcjKyFzPikmaXVbaWZbI24rYCgzWGAvNTJuOGFrQGd8QFcmRDRHSmhbUzt3RVIjKmB6aW5vamtZJF1nWyNfaXtMS095WWZmSXxlR0hHUiFfTVQ0dy44dDVS''@;'; put 'put ''R0t3XURZPSNXNjdwIylhNlNwdHJDNkxfS3dPaXxVJityVnF2VGE8P0U6Y2tfQiV1NE1kSzVObmo8djoraUxOU2U+MHdZQTorOUskanVbWy4zSUpZRFRDWU86ezBMbjUxe0MoYFpjNTF7Q2t1YUBvPEEvM1hKcF1FQUdxWylbRDt6NCluXl1McWVlcn5vVEx7W3Y0dy44KkJnRCtbRnI+SUo3JHBz''@;'; put 'put ''Lz8hS1hALy87QiZPSmlRN1hlbzQ1NXYuQEhYZlhyYktYNSFzU2hgSDFOe1loc34vXn1vTXgvbWhiTm85YiF8b1Q3WHk+b1A6WGlvKUN9dlhdfCl8WEZwZFNXS1VIZ2oiJXU9eEBSTkkxQk9ubCR6WCEkMlV1IilYRi84Mz05TC5EV2NidispVV01UkdLW2ZhTTlQYlJOdUVidXVrYipHTj9UPWQ+''@;'; put 'put ''VTNKX0d3bWFwUH1uRFlnezBhLl8jcj9vMmc4MilNSWhqLG9DbXAhMC9PJCt0LHpHTlMwKVckcXIzTjRRLkQqZ3JpfkxmZnRGJXpNP0x7alo4K3dFdHJnYFpVQ15VYV13VipbcipaVj0kTVNiKEJZMm1PR1pqZDxNaFkrd0c6TU1fYENONV9lZmQxVHYrKSRHMS4pVVdVUVprMkxQTVAmR1tZO1s7''@;'; put 'put ''R2ErOjRSL3Npa3cyUGZOOjRDdC58R1VxKjBhLl8jTFc7bTJJNCgsfDFFJG1kQCVTTTphKnR2I2lMXX4/WDxHKm5ZVUpPJiUxaT93RkRhUGhMNVIyYjtDXyxiTy9GRHF5RkR6XW5yYTwiOThOX3dbYT1Tc0xNcGFdNy81RHc0SVc8TD9bU1RVc348QCwpQENfUlhaP2FHUXw/aiRaPCxTck5CWj0q''@;'; put 'put ''PzEkd3JoXlY7SWIpImVoW054SUQrd0NmXShpWTlKJihTeShtY1RCUDw5Y3JKRXMkYi5zTSx8TTs6O2JlLFNFdVl0NS5gPUxQcCJ8NnxYQ115IjpvXjk6bFJGbW03Sncjc2VlXU51dkpFUElpZ3IqJXdwPHZmaXU4YS45Qk1HVDxCaS4sPShtb2lQMGRjYXg/LjVkUFd4SnUqaFpJNHBpMEEpKHp8''@;'; put 'put ''e1pfVnEjZTRYUi5Cd2FydVhBM35XSGUrUl40QCt0SituOVJEaT0uM3d8dmN4aztEbVl0NklLcm58Ukx6IXZ0ZGdtd30zRm1ffUlMOShbaDFRYDo8dzR7OnJlYWA+Yk9pfDhXbSpPL3M8fmU9cmJeQV5kLloqOTNDZkNsemQwZyQ6RDp0Knx5Rlg4YzcxPTh0RD9GcVssVyp4TmcwVy5MVH01Q0Rn''@;'; put 'put ''RzY7MEFmI1B8aDpbO3VZcEhmZmpFOlhtLilDPHVOe2YpdkQrYWklVTBJcitBbn5XaUkiKX43c11+P1UwelJNKUFXeHBnRXEland7OnwhJk9IQnlQaj9pdW40VzUwV2Jpajk+cmpKZk95UHdpPnhCdlJUTGlsbyFRMXhRMEY2ViFUJVUlc1FIUWBHViM0fS9CJCkwTVM2KSssWnAjUGFuWV1IfDc1''@;'; put 'put ''Slp7Tz1BeTtAOjF9cUoyd0kvVE0sQyMuQkR9MyYxQTsjUFclbDhwOF49KiMqRHc8byo9JDppP01BQV5lVkFNL0pzJD4qV2VvPEtKdG5UR3FeT3VNKl1XaEw3RjB1MVFsLEUuJGlpUjVRaSxhTSJrXj1udHpOIyVTNkFGN1g6el9BbVU4U0pmS1NHdjhqSHd3d3tKYnZnQ3UxeDF4MUU8UXYqbk5P''@;'; put 'put ''eURMeCtCIzBtVnB4dnUrQkJLfENWMnRSTkhNIitAdDR+bCsrVWpLRnE5dGp0a19WMjdrd2c1fUhXTyJBVDUia0JsNTFkNCI1Si5SOT1ieXE1cCkyS0NjLCtXXW8reS4sNF9WRSx4fXR1U3ZMKTExZEpqelhbYGhTQGhVP0U6V3laYjtzcGA0M1sqVmkka0RYXm89dFBuRkpOWD1MYTd2dStYeipq''@;'; put 'put ''WHlQKmVvNkVAfUU6XmZFImUlLkQsJkxGQXt2NT86KDM6UTxGZjoxeDdTR0JlL0VyPn0pUixmUixVJXZKU0pmLjxKZTkzT1RVZipGaWEmMzNSamJAYlBnR3JUVGV7RzlXfDRlY0lbXTRyYWgpbHleUHlqaVVPXlJLUnk8OkZiLkUxNytPay4iekIlY1I/KDVHJHcsKDVpNXtQfDt6XmE0dGBuM21M''@;'; put 'put ''Xj9hTSo7PlpLYlA4Tmx6U3UyY3pbPl5xZjhHTGA+M2N4Q3paIiVLLj1MWENPcEU5JFBuREZUMCF8OkgkNEdVOGQpfXFXPzpEfC8yaDMmdDh0ZFUpYSQrQzJLVm5oc3l+cmFkRCNGYy8rfURrVGtKK1ZdOkI0az1lNDB6UGNjMU1JZTF0KDskcHVlLERnUFljekBAaFU1ZXpMRU1Od3RUKEdIUX0r''@;'; put 'put ''M3FRM2QhQl1Jamd3fE57JkdsNkVAfkcub3xkbkw1OnFxSH5UKEJSOF5WajkrXmkqVzpaOXUldHojTWdBaCV6X05uLkFMS2xKQj1pKXIhezZtI3sjIypJIVg/aUlmakJiRjFWVDZvO1FzSjJ0eGo3cnUpMS5GNFldaU1+eGdla207T2MyJFVHWUQmdUkqJS9OMl5PY1toJUpnZ1dVK1VXcy8uV1gh''@;'; put 'put ''b0JMXVBuWVRBJl5qJCpuL1FyI3hCc0ljbnRBbzE+PiRUYHpReW1PNz1fIWl8T3pPM0hYJktPcU9JdC9ERktXUz9MeHprWmxNYiw5aU5SSTwpO3dQPFpbJCkhQHBQbjYqIiVmXUQqeH0wYD9LKCZaflZkX29EeUlLWytebCUkMS43Mzc8RiZ0bWkscWhHfDV0PDc1Q0d3b3B+bDhqQE1paFIwKj1I''@;'; put 'put ''Q1Ilc0pDWl1Wdz9XfGQsRj41ckNWUWg0dE0oVCp6JlJgZDhYPVBzfTNYMjdXL24rXThWSS8mP0g2NlpGcis8akcrMyR7azlbJCxNUiU9S1VkcjkkO3U+WCYkTDEwbElhdGp4WXUzMytwVCxUcWh3c0p1KzFIO0slImMiVl5PIn5RRTJBXnpCZy9kY3ZPI0wzZzQvZExxWU5tZjUqJSUrflgmQEVS''@;'; put 'put ''eSNCSlt2Z1M+eSJYeDhZS2o3TzEqbnhCPUwidnFKXUk+NE86d2cwdzhTRyR6OWkvKzRNR0FsQjZUUml0VSwpeDQhUmd9L1g7NGRfYl42TmJmclE4QnJzaUhlRl01S3V4R3pebzx3MnRkMHVldHB7NCg4QnIpN15pIm4sVFE3UCFBa2V7QlQvWCl4LEM5SWJveHhhdCZbZ1BpYXE1cFZVK0srdWNI''@;'; put 'put ''JXxyI0Y+fF4uRmo/KE89UyUiP0NvKGJ1cFJrQzRORTpedlR2Uld0UjAldkM1cSE1NDteUkBYTl1DdnFkVWJhd3wkSTlaQ2U5RlcsZGZ4cncwUCFBdSp3X3pdbyg0aUddaCFWOztESzk0fEhqT347RDNORiIzT1A2IWJ1LDpBVHBoQ2Y3YXYifmwkWUkrWEBScDFgZyxHJFNCOEBJbkF3QU5DVEJa''@;'; put 'put ''cmFNLkUpSzBrXVE0dHBSMz4mZkdFbCVEelJII2JJOEBXcCFLfGoma3ZZQlsxcDBmZGp3YE1sQFpXU0wwIUdOU05OIXVMbURqKWw1MCN3aUMxOF9xezR0WXUlL25scHQ+bFpIdzR1cC9NLnk9RVt9b1A6bHdLcnxGTyR9JWg8O1AwQ2oyQzIsWHJYT1M2eklFW2I4aiRsND44OmdsdT17W3pkbSEy''@;'; put 'put ''KnFLfGRbYXA9e1tmWnVMNXZJRTNsPk1DQiY4eGIxTmNqaU0+NnRGWkVubn1NSW4oc35lOFp7I0EhZVQyVl80ez1UZj5mMW0pe1JaM0k5ST40KWs1U0YwOHRQcXBIYV4zdGNqJThqLG9Qc0ciIWFpJFZwSFs9SmBlTGwzXitgSmc+Tz04IkgxO1NgZnE5UiM2RTtyWnJUXmloaTUiMiUjYTpeYWFX''@;'; put 'put ''YGI+VUMpN1YrMUcycVBAeDdgV0pTfSFje292alNUQ0lCTUVZZTB4fFpiYD9rRFQ6R1h3T0JhOlA6K24jRDdJNi9eKGYwajt8UWFyNEF3VXpZY0deVGNKLHtHO0tASkNlez1Cb3tsYXJfcEJ8bFhvPlRzcSh8N2ZWSnt0JCRZKmNyPUldfFlxW0pfeiE1M298eClHZTdPUE1hYEFFW1pWd2Z0TVtL''@;'; put 'put ''JlkmbkgmUntpKks+WHxsX3VJZUw4KEc+WztyQnpfMFMsemMqZm5gSWJoNXxLKXV9MCtyPmgzMmd7TmsiUCJsUThMdiVrZWtpfE94XjRuVXEocUtCL2c6MWM+STx5aSJNOTY4LnwhVStXSlQkUktUTyxVbXU0bzZESSpsTTpAUVVFRkIrdS83ZlU4eV5hVkZYR2F1ZCMpVWcrSmslRi9HZis9QkhN''@;'; put 'put ''NDYzcFt0dUt9TEI9P1MuPl8oN0o9aWI7YkQpe3RATGcocEhmUGh1OEQ3eykrODZNLzpbV1Z0SkRpQTFJZDdgSltBQFBTeX5GRXMrMHA9OkYoXmZ6dVVve19Xey9ATUFESmRlSkBwajchdz9ZaElaeDZJNm5LeF4xRnVYJmtJOEBWdyNiYyFiYm97Wj48aEdyZ0UqJVErYSt4cm9zVGJdLE9eVith''@;'; put 'put ''K0ooJjxkZkdVdUJVR0BvUUY+fUprK14+eEElUnpAT2MsJEw+bmhfeVVjSGFhTWlCOEp4dCVFT0h3WERDOF8hTnFhdUg2d1ojWEZQTWVYZS4zamxARm9bOCQsMElHWyokKix3QiQ6YzJ9UGp7en1oKUU4P1khdGN8JjdhKUo/fWQ0NiheaHhQTWcoOTNjNDR2ODhUQzhXRXgjNEhYe2Q8P1dUYlBy''@;'; put 'put ''IUkkKT1nQWBeT3NzfUd8TTA4eVY2P05eeUNlbiRmUWJ2QERjKWFHcGxicXRSOEZqeSU9aGJ1N083JCFQPzBuQyl7YTVbKltPL3ciU18hYGdaK3xFfTVabyhwRFFKMTM7UiV8NC5TPWdCXmROPkQ9cjdhZWY6OTd6TjAvRnE4UzFkTVVXZmA9TjhAeTNEQ0R3cGteKFZub04kLjZEZDh0SUNtS3Fy''@;'; put 'put ''V0RYbTJLQ0M9RzhQX1ZFUXt0IlYpXzJqelkpUl18WC9ncmNaN3lCcXZQeCNGJFgiU2BkajkxR154e11WOGVtTXlNWH5kNSNwbkshQFQlcHopdU1mNUEkSiwoM0AkK24leWt5dl4oVmFgW3tIIXk/U3ZYXT9SPlkmWWEwKzpxZUxrflBnKlpPQEd6T2cqPGY3bD9PODp+YkdDVmQreEAqNCt2NTBV''@;'; put 'put ''WiRZJFkkInUrPXNeWFdQNmM7QWYjT1hnSjNVTUNCdS82Ymt4bGldSFJmbFJLa2wkaDxtZlRdI28uZmMsZ2U7TGphOXhtMiQ/QjM8Z1lJdUxqYXhGLD9iMS9TIylBZjVffmU0L2NEPXJBPG5eLmU6U35sNWFmPHsuPCtEVEU+XmhkeSlEa1d8PSRiKnBIdUdFVnpFdlgmaVZTRFVHSyt8WEdwKExy''@;'; put 'put ''O0BPeThYPWs4X0dSN2BKbWZbZVkiNiZPKXlzTD41KDZiOi9iSkM3JklBaixhXlA6T11CU3JmaHtaVl1rI1sifmJxbUhKbzliVFZuPiEjSi4hfmxSJCxoRn1xTlBhVFpjXnlTfmA/YDwreDhmNG4mTzpBIWpoSWpAWVVQMHMqK2QhamtQLC5SfFI5WUxEbWB9UHwuYVRka0E8Sk4wc2F2eDgzdiQl''@;'; put 'put ''a3pIPH1WRWdEPGZRVylzXngifDRTJXA8YFc4fHw5bk9vSDJQIlcjXjwhOyhCbnVZJEBwQypTYWo8Ylp1JjQ7NVlfTEJmRSRzPXE3OnJaMiZbO0JYJEBiaXxLVXY8ckRNXUd1OExqTyJsQFoyTVAmNVkyR0IlcDghYyYiWT06Z09kTU8wRzYpVkM5JWNUSGlacUpLaERqQE0kREI6JWNUSENaZmFS''@;'; put 'put ''Y3RjJjJILEFwb0hATWFkNDBTYUlkflkmdTxuVmQhMCFraWckfCJjanZpNyxMU3B+Y0NwUlF5WWgvPXZyNzp6STZNMTtQaW9+UXswe2N0LCVPIi9dWkN9XmRbNSlnWDA2T054dSZfU21aYjUoeTs1OnpZWSJRSU9lXXw1Yll+WW9TbDlBcklPKXdYdzRlNE5rRGcyW1pDcHN6YlZTZFhEMyVBXUdO''@;'; put 'put ''Rnh2ND1sTXlQRDw/Q3lfU0JZK2kqWntxajlXSkhaNkxdb0lndFMjUDlIPmFIZURGSlpUJX08fGVFcT4wZlArV0krb05sWmNuQVdsTjNDI3EmZHElV0UjTGQjRTAxLyJoNVpkcXU1Mi8iaCIrUyJ1c3pOMVp9dHlOKHQzJVgyfEw8RExoPERiLDgjWXMyeF5CQVpvdU1VM1I5SCpGTjRrd3lAX290''@;'; put 'put ''SWJwVkYxbDgsNGA/cHVlYj8vekx+XmQrWXcjPGg1InNeRWFve1hjSEcwWWkjNmhTYSlKdFB7aFl2ZVZqRUk6Z1ldNGJ6dSRFXiVrfG1HPEIxOmVPK2ZSRD4sL3V7Z1NuRVFoYWA8RXU5fDlFOjtPR19BcEBFWVA1X0pocjd+KSVjNllaYVJhRTpzaUVlRiM9KGI5PSped2ZXYS4kODxDRTh1bChE''@;'; put 'put ''dEt8UkheVTguTzBeJXZNYWc7bU0kTk9NRUQoMT0qV3UhKks2NDReVnA7VGZrTkQ6SjQ3K3A3cjs0XSJ4KGooWWRrRG1RRk84bjMiOVhKQUhnaXcwKXt+VjtQPERzWUdUa0U7JmgkJj50WUtySGBeTixLOlcjb3FYO2J9ZnlWfURERFdBMkgzPWk1c31RQzZ0KHVQVCFYPi9geGhpWVAyRHo0Rz1W''@;'; put 'put ''bi5dIUNTY18wLmZwQk48T2tGUng3RypeYVYqfTxHQlNNeUY5OklCU3dHIS5nKzF3PHQwVmI0TnFzVjV0XipYXVRXKSY8TGZkeU8sNl4mKkJAIy9Day9aUWBiMiJ1cjM9ayozK3U2XWFOailLMEM6PTNeanJaTS49a3RlJGplWkAhUVhBVE1ZbThPbCZjIi92Pzt6MD8/a2NpVG41OUVEQGlyYU5h''@;'; put 'put ''VFEzZytTa2pdWypZaSwhNTVsKTxUVEVzLnhCa0E/d2p5ZkBOSixKI1lsIz1iezZNI1YyTlgmJl9UJWNoV3tnKjNJM3BFOWxWIV9DQnUjeGg5ciUyZ0w+UyxMUl1iaU8hOTpzLklhOW1UWlEuZ0gxMWdHUmJFaWJsJGJSd2Bae0hgUGFibUw9bS9HbSxJZkoyRCxkVFh1TDclS0NKX0MmTVgsQClN''@;'; put 'put ''dV5vQlMkOlo1filzNClrQl80L0NVX2lzISksfVJDWDJOM2lOL2s5SCUucU9xYDl0fFUrSTgwbWIzeUosKXMpaD1KLiUhUEpUK01aTnA+THExanNETXh2MCxjZHNjVXhnfCFSUSMkMCgpKmkyMz5FcF1ZWGNUU2VndTx2MUs6bikpRXJjcnoiIm4wMSFqKE5fe3BgYk9ZT3tFX3huWUIwWWZXZ3Rd''@;'; put 'put ''RGFkdWpPUGZZYVR7dkojWC9tPEU4Nz0obTRsN3gmKiFCV0pufCZjK045YHtBSXFvOHNyYigxfSkjdWozMVFSJWp8bGd2WSNyaVlvUEt8OExsREF4MmYsTiQ0KkwjKmVOcThEc0FtZ2IpQigpQkhIfGZmeW1lYWxaTlJ4cDJCR3lVXWpHQWBpJkBLdUpAOn5nbHRmc1plR0ksTDAmO2UlWEAoQCI2''@;'; put 'put ''UzVpZ31rSXx0Rnlubj14dFNVJWg/WDkiNTZWcFQ6QDpAWm1zOF05dUYrNSYpakc9SyszMklKS1EuQ3oiTDM9Uyg8em49PUxEaCE0dWlCa3toI2l8Xj12bS9VS0oyXU4kMlZodkwpOnBkT0poW3pTSTdnMGU6ekJlKnRKXmwsKzoufVZjVmd5MWx2T2Y6alVlMWY7Y3QrbzZRdjIjKldeSFU/L3Ih''@;'; put 'put ''U0xLWiNxe1tqYDwvLjpLKEcuOm5bc1M4UDtyUTZEM3IpfUZjaWZ0LDdLejdyTyMqcjVVQUljM0l4aXpYWSUoNV9iKUNJLjpuMnRWfig8MiVhPDpHN1VzZytjPUNXVzFXOUtiWEBTU3xDIzhCbmFYX3EjKH4vNmxQZzxYbzc9K0MqOVFgXkFhb1UqW3xaViZ6K0xwUWkxTGpBV3F5YVovSllSaWVz''@;'; put 'put ''OFZrR2QjRlJgTFVzXj0vVCVfPyRePCEqS1tWPC5Mdk0sVjpYdj9INXhfMF0saEBUT15nOlZ8WXB2el4mYGZtYDFEa3JvW3MrKV1MT15bIWMxNEdSVnxlOHczVltVdjhLK2NVN2V5IU4hTmVmUGQ3Jmd8dUJlNiYqeGVyamFtanVuT3hYSFo1UFZlSSVQY2U/enYra0B5elNpS3pyeT5MVStIRGQj''@;'; put 'put ''XWQ4TVo8TiUpd2VAV0lqW1ZyNig5dmZGNytuVTxXUHY/SE5HUThXZVsqS1UoZ19CMyVHTkZ4R0RmKkNUbSVPLmBxN2F+byZ4flRtJWx2PmhrTiw3eVdwOE15RiVGdFZFfm9peD9JWF9hfFtvR0ZNWDUzeyZzL0JBW0JsamZQQj8iWTRQYyIxT1VVTk4oa0k5NDV6QnhZLEFwRnhWZi5VPXlUfnhG''@;'; put 'put ''IllWfU8rd0YmcU9PQnVXZ29DMyswS3khNyl2OFVRS04vKS5+WU5TKzB6NV15ZiM2bSYqYUFFIlE+QWtjdXBLYn4xeDErRjI9d2xnOHpbNU9uVG57R0Y4MUNOR2djQVtWO19UVmx8aGgvSzgoQUlBdldYTEZLQyl1dmN0LHhzcXphR2ZQbFAhJjFwaGhafVAoOz53S2h6R1BIJUVhR3tKeDVVQT47''@;'; put 'put ''ZH5jUTA3R3RUNGZPM3FLcTgqRjRXIVh6PndeJSh0N0dlcSI7YmQ9RGw8cCo+eXxoLkhII2lhbDklaXM2MVpjaG5PcVh2JW1ZSEA5SGw1X0I+azQmdWNsUDkzMHxxOi9vdT1JdzZMR1FYN0BiSWA5bHVrVWtGUm1gTSk/JWdSR2BzQ1BVS2I/MU1fLiwkOk0oXjlpYkJkbll1U2k5ckhQJVdrRGpH''@;'; put 'put ''MzRiMz44RFRNYks0VHIpbSN3Z3Nve3VgZmUqPypZL11laDwjPzJGKVtwPkZhKEM2cmIiVG1ERnFlOCgzaCVAdEpnNUYhWHg+XVZjLjI9QFMhZ1RGQVR7PDRLMF54a14xUCo1QSMyZURhO2V6LDU4Zzg0a3dyUV09V1Vudzp2Y15vNWkpKkM4YUV0cT9GV3ZAIz1EVT9GaWRNMmh7N3hSSCU7Jm14''@;'; put 'put ''WkdxKntQP3dsZzxEXURkLDJ2OC9aYmFPPnVZMDJlUU1odi5CTU4uQnVIaFllT2c1WTBhMV10UzVZIUpIKUVDej51eEF7azVPJClFOTB6SnZiT3UyNSF6dktZY2JwKik6fjlxKkwqMVBwQmkhV0sqKTNwLkh9LyI0NSg/fE9mW1paYUBOZG56YzhrV1I6aDIzP2hMMXtQKFVoTTFXa25xcVVLb0dX''@;'; put 'put ''OWJIYSZqRFh2QHlxT3MsYnc1RDczJVkibypaRChtaGJoMlJqYChkbnJ0TSN4U09uZis6fDYxUDVkfHVzIyxIUTU+P0gqJFpbWDMxbWBZYTlINFsrYGo6W0NQe3Frb1E3blJlWGhKfWkmPm50PX40bGpqWH1Ndnc5fEBPOGtgai9EPGRBZCQsIl9oUWpXNHcrMnhwLFRfY1kibU1JanZpKHdnVncr''@;'; put 'put ''KDxHOHJ7RVE0QDtlR1tLUFUmIyxHZmJZQ3JNbzRAZk5+Jm8ydy4iJixCXk5BQyxlSFhbY2E7SWF9PWl0LDpVMk15P1lyeUlkR0k4MzBoXzZzZyp4VXJyTkVUWyM9Q3RjOkZmWHRLdD9qdW5gSTxGd0ZyWmtJLD5QfFBtU1JWdlBCSllVRSMvPS9uX0tVO1ltQSEyaEBZQzAwIk15L0psYk9oSC40''@;'; put 'put ''cEx1bSM7W3A5fkpXTjZhMTpmNyN4SjRNUmNdXSZPWyUydkwsdD19KlBlWSp7U0soaWtTdHtPNyF7M1R7YWsmMWQ3a1VlL0pNSyx8KFczVGJtJC5bT05FQmIiNCZvfEUjX01UbDJtTC9KRyV2UitQOVFPL1JbdCxqLjB7SlpnNz1vNDhJXkBIUzZzLFN2Y2V2Wk9ALko6XkY1dE5neDtkdmcmSXEw''@;'; put 'put ''YkYrKmgpLFpdbDJ0W191diR3c0RmMFgjOFdPUSQ+TmhCSWdrQ3grSUg2STlLK0BnIzshcmFMNiR5Mld9UUBkczhBRypNUGchZyFtVExONU5eNTtPRU5aQzBULEtDTz9BI1pRJkAhNj1mZlRuSEgzKUB0YXA3Jkl+TlBUX2QhMU0ubzF1ZVlbJkVtJEU3RyUvZypJNGose3FUK0RYfS9jJnZVe1kp''@;'; put 'put ''PGxFWGpUPmBKcSk9X21DdUhJSEtkSGVpZXo5In0+Vlhfalk7WV5lY0AkSUluPVZATmwjT1c2YV9DJjliRHBMaHd7ckdlUzYobjBEMmdYeHRQbipQTFQoXmRAUSMvKSR1QG1fTTBMMWM5WEYsclpkLDB4I0REQkQ6MnJGJm9yNDovYnZiUUh3JnEhP3pxJjBiNShaTjx1dCojMVhnaXxDKWpuN3lq''@;'; put 'put ''P18ra0JoLFckZUQ1bGRwPzVLUCx3YF1pWWRvd3pCdHVbTFN1QnghIV9LIjc3T3lxNn1bLER3PUc5UE9Rak47KygpPVBpYCpFbSMzZk1kKSpzY2NkcnklX3ZxKyNTNnUpWE54IUksK3J2blM2OU9HdDNdU3k/fXE3UEdiKTJpc2NmdzRVI3JaRixCOFtZKnRsN2U9VyRye08yb2p2bUshXncuITN6''@;'; put 'put ''WGpZdUZOKk43cnlDW11yfDRnVmMhXlVCcFZXXz1XblU3PV9UV1ZDRWxRcEQuSUxiNlR7TDw4O3gralNAUUFnRFRoUnhJZWZObDlaVntLYm93Q2xwYk9hY3grZjRyfHZmazhAQEozZ2N7Onl5YnBbaVslWyVbRTo6Nm5CSWxJZm5KZEhYUGJgd2dMZFVoRGRKUXl5PTM5QEczakFUXkxNP29CKkJH''@;'; put 'put ''KDpBJHZ2Kyk9UEJUTyl9e2JPUS9lZnVaR3dTT3lQaUlnanB9NVUvRnImM2lNe0IlOE4hdVYvfiY3OnZ9fW9paGZHU1Z4YipeRkRyWi8oJGl3IzlJK0U8PXJHTlMhdXQ1WDFTeWxzTTAhR05TU3l8ZTE4QyFLV0NQdVB2fXY/MyVLXnZudUhhSWB3fGVZbXJhc156Wzp3ZDxwKlpDc2UzTFteciJ0''@;'; put 'put ''WkUvT1RHalQoOFFDXnt5JEx5LiF1NlFAJkFDYmpDVllhQSxMPHFnNWV0X3U2UGU+KTIpWUZpcX0hRls+dnhpc2t2YEJ4cF5tX1MucnE7IlBiTS8jbigmKlN3NWU4JHdQPG5+JkY7aT5bLEovUCwuQWRAfnVwOFFSZEw0Vy5tL0pbUEtJdVVUKnh+cTU7OkYxLiImIiZLe1FadW9zd0F9LlEkfWZy''@;'; put 'put ''cz0jfCZ9bG59U2tqWUNXPXRbdFNNMz04eCRzUVRFe2w2KDI1UE9WMmNYTjN4Ljx5PDpuI2BsNVdqMWJWLno1NltaRWQ8WypbZGN1Y3FYOTNadGkpKEtrWEliYVlyVmRILDVkP15RUzl0VFFCUDM9U0gxekxeMkc6bj9zW3A6cEVKaUVmfHBXeTdoPGMqZnRvP2AqZDdKc1osOm9reyg/Km42TUlR''@;'; put 'put ''eFVhQyguQ1M8d2dOUztMPGU4STFsYj07dmtEaEx8TjVpbWBKS1pHOFNhZHYiWTdbLmBSIldiflNQdypbPShfMmlJNVtlTXNrVD1GblZ2RlA3JjVHdlJMWk5YfmdXWX4qNXswOU8oO3A2PCVNbktwc1RQSG8lPlFXIUwuUCFCQkl1dFBHWl15SXtyIWNMSE5kZEB1WzBOOFh4IlEjU19EJUJ1JV8w''@;'; put 'put ''QSpoKmhNOjI3LDhQNDhfPHtyMH1NeHxIKzBTZnxRLEtnP204NF4vNlNwRHtuMzpZaFcjUUIxJls2JGk2KGBsOjMlPjFqbE0yL2tLOXosQUJtdylubXBJO3kkfHZPUiFZM251ODM9akgqRWtZMkFGcUArLDltJF02I1NRNW1oREhaejB6cyw+U2s0e1E3O1Yuez9rWn5XRTQmaEw9IyZWUTBeeWtJ''@;'; put 'put ''PSZ+bDoyVSEmO1ddc1k9Rj4iSjFwNykkSWwpbTk0T1kqd2chQzNeW1J+U3dgbD1ZRThyZ3N2K3Ujem57P1pSa3FGZiRyZ3NOaExgZD1IdWt3KHB5enFTNlgiZng4Zkh7ZGtIVjxENmcyQSpdX0dSWTc6U0V6PStBbElPfnFoTU84JHVKN2RlezxFSCkkUnxyLyI4ciwhSHJJKWdQOGZYPCx0RV5T''@;'; put 'put ''NlhqeXRaeVlZI04zN3lHSntNRVlpR1EvTVMzR3dtbClzOFssbS9Qa1p2dzp8OVBadFAmdlBsPDpIUmIrJWtNRmVDImkvQE10eWJzM2lNTCpyfnlNQUhBQjdbKC5QdmU9fHtoMXAyRG1Haj93M3VLY1MvZ197JjpoKzxtYFkiMTVJfkNhR0dVMlhRXUVmalIrS1I7QCIoa0BlRjJeVjUpaz1AMUlp''@;'; put 'put ''TTZ3R1R8JjRuenlnL2NrTEV2TD0wNHArZyVIV0ZSdDM7ckBlRihrLiZqTWQzKyMidW1SRC9kRWleZGN0Nmg+bHR3b1FLWF4rV0QmYiNRLnJxVDAuVH01a2BwckRFRFBCNn5AazRqN1lqPHkwdTZPU283bCRmRiwiJEllYWtLcTkwIz9ZRVtnbylhWEZOVSV4ejx4OSF4eiYsZWZ9bn5oWDFMNCEy''@;'; put 'put ''Z3drY3tvQ1dTQm5jN35hK0tue0lvTUt6cD46aDUpUUB4NzVpez9bejFabikwaURsXWNsOkI9YyZ3Y1dqI1N+dSVUUUJPS04zR3BkRSNxOWlwMUZwND0zLFdQa287b2syM3paPnJGNDsvXklPbStHNUJJWGIhIWlvRVBkZEw0VGBKW0MvPE4qIyJsXTBROHpIQ0klIWcobj9vOFNGcixfNUslPmA4''@;'; put 'put ''WGFYNmVPOlMkL0Z8Y09oTlMsdktZZj5AUShdUyt4LDtHU1BZUU5HUlB9fGcmdjF1R3ciOFAxKDpoUThKcjk4WXQ5OFVdZyhjbmtuSzl0KVRocDd3ZGJTQUN7aS9AalomQDZvK3VQVEExWlI3KVRFa017IiVjPyxlfVZ5XWVBX1gpIXU+VSshQUJqWj0jTjNDPTFbUE1hayZDVE55IzVDNW1oPUB1''@;'; put 'put ''Ong/QCFJZHBQZTEua2s0JE0zO2kiUyRsV0diUWhddlpwKnIvZVltQ3tQT0sxeH4wPShVUFh4c20jT2l8W0EhJWM3PW85JGo0c1JZdDBmSSt4MlJ2MSlQQjpHITh0fC5HTkNzZU1pOiVJaVBTT0BhRmhFW2VtWGFidlI0ZE1pYVIxMS9NIno1ODAveHUyeEQmcDpIKTFERyU9Pz8kZTxsLiMqLkl1''@;'; put 'put ''K3QsekBeSU5xMlFJYCpsNjJlaiNLU0tiKUNrcFJqWnc4P3wvK2Ewek5sMkQwPmhNLnFYP3J2RXlObTpjQURYentyZE9Dbys3ZV5gZT5gOTkhX2lgbTc2O0lfa3dXakt7dW1gc0ZOVERkSEIldUlmT0pNeUVeJVJ3OVEqYkU/dGNWYCMpfUhqNzo7M3NeRlpkTHpSSkwscmxCI3F8PCkzN29RYCg3''@;'; put 'put ''eWA1JEJEKTFxdVl3YjVnVl14N2RtcUFyLjJOYEJ1R010e1hIVDUycVdoe1liMXNwb2U0YSU5eH1jJldofXFDWk5PKEZtKVYzPm9gYHhiSkEkJCRRWkJOYDNbPVtISzIoTHRzU0N7SmhEajplTW1CdDpMUlBYYm1VfXF3djxiS01INy53Q1gjWUt0USFIMDp5aVJVcVUzZm93dSU4bCo3eCNXI1kj''@;'; put 'put ''QE9Dej8qRjN7Tm9HKzU5I249Sn1nPXYvZEgrNTlffVQzNXg7aUtDUnBgYEV5V3YlW0hLQylsNGZNanRPIiRnLEQsdFV8Lm8pczxvMzkrWyVjeEI4QiZrbXlsaEhhPVV3K29+am5hWUNsd0ZYaltVTCpAVnNoI2I1LHJvZVJ1RyJbRGxOPXtGSXUkbyxaNThlenF+UUNqdyV3bGdUJV8pTmRfVDA6''@;'; put 'put ''Rls/V11jdlomeEgkQHZ2dnd1JFVqNndTQjc5blB5IXRmJnRzakhbPnJGaF5TbFIubFddUEc5a2NfaFQ+NEx4WDM2SyxpMnZEaldMMnUmI0AvaSNAIm1OeWtRXjxZSzFPRV42OVArLDw4PF47SzdAJTh8SChGJiNfOG8sQDcuIzZKals4JDlKUCpKSjhsOGFgQzcub0kzbV40Q3hmXWU/PC9mdF5W''@;'; put 'put ''JjQ4N0NxfVUvT28yS004SDIkMyhKbVA5JTNzem1gNihhWCtzMi5FYVdpcTZlWVp8U3ZPUn47d1s8X2drQ2M+ez1XNExNUC83PmJfRFdgPTAwdHl6flZ9eHBPOXEpMXIpPDYjb216bSlOTThNVE5+RWBQbmJlLF1Zc083P0taOVdFRWhNOSV0UGFPL0U+diNdemB0KHArI19GPWhwcEddSUNkQmJv''@;'; put 'put ''KCZKezFAUDw/S3JRTX5uYmIhUVVSaC5obl1zfWY8Tig0ZVI2NVtFXW0qXWBoNGg4aSVlVW9vJEIhS2A8JUhLQmRmPCg7ciJnPlhOa0QmLzxgKyosJHRYWGFiY1oxNk9CaWBVXSZCfCUxKGJQY3txNGtMPnx3O1hGbW5NMHUxWUJDKjBQKThpT3NjMFtVJF1RUnE2ejJGPWgpZWR+TjlVTDwwRGxt''@;'; put 'put ''TFJ0djtqPmRnWCQxKmd4LGNJaEN7QVQxKkxLPHRYeDErc1JwOG5qJmkvTikqdjY5K1R7YCZ6OVA7eSJULlhtdG1QK05ATjA5Zl9sXSsoel03PWEwU1NJMFo2bltuUypvUVtuemFPSWBhMWpNJW9ALzcjNm1vYldFNzJrVkluLFFCPHdIc2tdO19ZUUJ8KE1LOj48MzhNKH5GQzdIaWFyW3UzUlFs''@;'; put 'put ''NDB8TnM7a3VyTUlqciRFZ2NOVTYySS5VOlEpcC5eY0ZMcDNjOCgxMCF8dV9+fFZRTTh1YWVXN0IoW0s/PTpfeU5LQnlNKSsqOW5Nd1syaSshKjluOHMqYEhtYmdlQlFSSWFVQlRWZThEPkFtSFcrQHVMRD1zVzNUNWxROD5pL0NXXkF4ezgjZWAyW3lCSSshNnRWaylwVWBhS1hoLiRoTSQ6IyV5''@;'; put 'put ''QFNGP31WdGdCUkBye0tINFdSUSFISlsmVFolKEkpWDF5Q0krIWopenE4fGJuYVh9UEM3VGU1RHFeNiM0VjElSTkrOyxYOjNKTyZYRSs5bnJqJEVtXjNofG85cEc0aDQuRWFpfGBefm0+JFlhIXJmNllmJkYqSCFAVnlxJDU9eSwoPmMwd0hyRzA7Iks3UG1qblc3fm91YHhXYmI3eXZjVSI5aWsk''@;'; put 'put ''VjhtVkc7N1lNJSNgPyU7SD5mfGYhZzI2IkclTzYkOHFleUFqX3RtZEdlQHNAdnNVRSw9Xzd9dzgoRiMsKVI2UG5WQGpCaT0qKHpBbWU6PFc/KkxLTCJER1ZCW05BIz8sN0RKUV1YUHE9ejdwb3k8cC4mUEIhdGpoSzlebVEofFUrXj17Mlt7RHIsaG9faz1FfFJJeC9pNDgqS3xRQm4qaWh4IlRr''@;'; put 'put ''Un1TRylIakJbSmtGXitLLlplZUFXeF1sczoyTElFPGZ1R2RzPF4ucVooUVNKI1gxel9PYCQ2cl4sQlsmeV01aX06KSRJbnYoYSIlUSlUS0pUbmFwI2NnJk0/MHZZTzdEaWlgSjN1KVAvZj1DMVs5L0pDcFBxe2dCT0I1SGYiU2AwJEJTJX0vLlBYKTB5L0Zdd3I+N3l+cHtEI0w2VVB6RSp9Vl5Y''@;'; put 'put ''anEwZiV8O0NFWSw1Wmt2IUAoaChWRipAQCthUWFlK0NfUTFJRyFwK2I5MSlkY1N6MjQ4NWUxWDtyaTNFRj14eG8sZWZTJUB8OEZ+Xn5BTjdqfjdgRE0+IkxmfW4qdTZHPWFSfl1wKGZdMC9TQUJoRG9gOEYmLnA2dGlJSTZ1enBjbC5GKHIicH18fDA5RnBKZlVwUGpOL0Y3UT1lakJuQiFHd1BL''@;'; put 'put ''WCVxOl4rLGtJXWE2Jjs+fW9pIUZgc0ZXLjh5bHM7WDJ3LCg+Yyx8IilsQnteTUBuUG4uWVZAVWQ7MjpedDI0NVFINl5aVjRpNGY6W35AYkNHUVM0M0pEN09mNlhIbSssfGN6PCh6UEllNW1DUmclOmpLcWxEI2ZyP1QmOWZOcV9nOlNJUDdtVTQ5XjpdMUJbJCI7JnBbaExNai8sZSM7Vk49dSsl''@;'; put 'put ''c3dyWHZyT1hwdj9vLDlHeiVbb1dnU1ZeI2ZhS2R6JGtiZnk+UC9BTT1hJkNzIUh9YiNMNGRSInUkUUpXMUglZ3NKe25bWzkqTGFNLH1NQnlCK1ZVe0laZGdSL2d0MitgSG11Uj4hc1F7UkIyZWh+RTxndzpaNjc1R3okWz9SITAwLyNbLjJ2cCN0U2tWMUMjN00ubyZ6Ilp7UTJPN0IhPyEzIU9g''@;'; put 'put ''SXs/IjFCcjxrRzZhPkc2bDdzJWw2JGllLzNTKDM1W0FeaU4rTD0zTlJ+JWhPNEJfVix5VmIsSW5NNEJuY1BsSXBbbWMwdCtrbU1GKmp8MDtTYy4zaF42Yl9PfEFEPnx4TzFRT0ZdNDpYUWhVZlZLK2NgSnJMSzM8LEIuPFo6VE4qRS5OTnZwaHZNKkNpZWZNUzAwYFtwSyYxTWd4RnZsJDJEan52''@;'; put 'put ''dWZwW1h1PUczOmMxY2VaN3V2IUdxd1VCaWNHWFhleGYhKWZLM1FZWytsLGBeNks0cj8vdmsjNTV2SGAmT0M9RldXWmJ6QERrO1VCPG8+SGRyP11tJipXbkxnRzc5SUpMfUYzc0ZkNFY8UzsqfnpdYUoubXVBQUBRZER2KCpCOUYrTVBmNS8xNXBiKDhRdENBOH1ZZSFrTGJUMCtYJSouSWsiQUFD''@;'; put 'put ''QUFBQUExQlM2RlNHc3lsXTg/fC5NZV9Oa1BULHMhZEJFTW4pPWMzbX5fdkFOVUwhcyZ5ekVyeCRaeWNkJX1zOHRdTW9JWzhXdEV8M0NXPnA7dD0xYigpbCM/Ly92UEJPNyldPm9rWGE4emg0UkBuY3F5PT1EfTZ2JGdlYzY3NH1OS0V8Z1ssaSN8Sj92LGl6QXMqXWpsZiUuZjo0NzgwQGo/d0hO''@;'; put 'put ''dWJsbD93b2YoR01Xcix0WTk1PjpfRCs4LE19UiJMdXM8elRvSz8uMVhYKXVxZ0ZHVWNKfiUrfUlrcUJ4V2AuKm8oJUh3TU4/R1MpUl8ySSQmRmV8aiw0MzNHVFd9dllSRypnc0YhXjd7T2BnXmpteFE1WVhyP2x3OTJXVjdjQD1YVnI0NS5nc2k+bm4oJTkpQW1IVSUzYCJZWylJRWFDQ0s/NTF2''@;'; put 'put ''P1NEXipBLipmaXhIdGxvL250KFlDfSQ0Wig4KW08MSpdNVlMMFBiQldTZmYvW3clSV1bemhzbCREPmgxUExqdzlyMk9JODhJQCQlfDY3PygsZ0JQYH0raTNOPS4kamVSUj44fTBSayZHVjAqKkhJZl5Qa3QpUF1xcU1ybkYhI3pzVXE2UnhlJTdeLFFZbER9XixyWjk3c05qOkhxSDJVejFRJkoi''@;'; put 'put ''RkcxTyt9UXk7U3hQR1p8dlZwJSN6ZXhnK3FkOk8pVENebFBESjxKNlJeSE0rU111SzwqUV9rI1cxOTJodyMqJlUzYFUkPipTQ15rKTt+Ty9ORXRweVVgWGVvNnttODdsMVJyMU1hKVZjclpaYkYxPiRpREgvWUFAWEdFckFIUGM1bjpMXmNZJmBSb2hRcis+eSZkYnUlWiNyfSJ1JWomRHo2eCF9''@;'; put 'put ''dXkwOStRMnY9R1ZZZkF1cW1sZnwrNTduLm4uPEhLLyYifk1gTHRuKnBSRW04aj14bFl0OVBXQmVvLjBNIzVGXXAhUGtEN01pOHRQLEVdKEw1NVcxUz9uekBWbztUOE0pczlCcUNoc0BRaVY1TD9TJjw+V0RKcWkuK0s1L1kjUHgwSUV6SjdpUmkzfHFYZT9udTllOGA1flFickM9fjJXbWJfLjR1''@;'; put 'put ''fnI7bz5ZUixTal0sZnIkTUMqKFA2bTFrRHNMRD5qQlpvKkVLOld8N3VoNDtiXnF2T2lAKU9KcVteWUZ4cC9mSnp6fnhWMlEzbUJaRz4lfFI9WXEwWWlaTytuKEIodCl7K219O2wuODJnJCoudzVbKU4ja0VkRkQkMWBFQWY/Ty4+R3pbIjE+SixkWjF0IXRTOS5mODUsSkV1ei91VC9gI2xXbjRC''@;'; put 'put ''JjgmdzkqIk4mfktxWnBMJHgyPGwlS2gvaEohLDE8RSF7QmtxVnVtKX1YPStUbmEhZCl8YmUjV0VhKSJsIXs3WUp6JWlJeFEhUTtiNnQqWjd6TyMre2Q4UWdmaGlZdT5MYF5FVUdLYHRzVW4wXXZ+YDpRQ1BKKy40ZDFbdTVHNHchN0NKVDRVW2Qhc20uNnhgdTNxZWxiPSopeXB0fX0jQ3BQViI/''@;'; put 'put ''cyVHKT80XVIwXV86ISsiY2w+eTErQXJfOE9aeDlWfmNwcTNlciQ2X1ZYJWYhXSI8NU9rdlFhWjQ2WCsiV3Q0d1lzJVdaajc6dUx4OnhYKHJddStFIT18TVFZZSk0UyxnUjJTYCt2dkJ5TyRGeVhaZjs7RGcoNXYrKmtUIUREQ00vT1BwXkVSOFREdHQwKHZLUlAoTlssVmsrW0lTOWV0LkdoQW9G''@;'; put 'put ''Y1lOVC8lUlA8PFshfk9jYE02IVY+YSt2NElDcCEuMnEzLG4mQjt4QUJmN3BgR2VdbXNLVmRkdlIwcFNLSF58XWJmaU1HIXZNN2U6T1RmOGErfXljfGt0TURvKnc6QGtzMnheY3NiYy8/InpMb05YPWRNYDR2c3V2bSxedFB5MUUxRXleanEvWkNYMltAZmdBVU82SDkkRDJVRVlnY3wvZzpgemwp''@;'; put 'put ''LmB3djxwY1YhR055L0x5WSo4TWBlKFZ0X104T1ozYC5RYSJuSntAY3QoNyVOQkVzbExrO3gzYmoqInVOOVtWSTg4W1taKVZ9VDlib04yNTopbS5IdzNqZz1MMmJEOnRQYCl+YiRdOyopPkEwQmxEISo3dGsyPEkydn5nY0lVRCwwTnJkb2FaRGdRbz5uQHdFPntHMVIkc31bOkcmfmpfTWNyMXVv''@;'; put 'put ''bX56I31ucUwjKCJCJmk9alk1PUBtXXYqeVR1RUZLbCREN1FRNCtvOyM/ZXBmNXNjZzleUntgXmRiOWdCMjBXYCsxa3dhbiRHUDs3cTlWcDlhP0A3RiYmMGs4dUw8RUlXKjVQUjlERS5wUzxLdEk/O20mbEAqMj9pUXk5dHIuZCV4eU05MkpfLFBdMk9oQWtGaXgrY15PfVVIdjNuQyR8RDh3PWxY''@;'; put 'put ''fFNvYnY2QGdtakpsaWJVPiZoIWxlOzNZYFkpODs1IWl0OU4yW3wkP1o8SS4lPCxuQFQqJExTcGElK0ldaEV+X0Z2dk8we09HKkJCPTpDVyN8RiVqM0hCPCokUUAqUntkOmdbPCYvWEtQfDJIOEglMCt0aGYyLE5OWyksbDA2T3x5PDJVcFd8KEdoOy5HWVJeNjRaPTxmY0R+dXd+Q3YmMihDYGJF''@;'; put 'put ''RSRqS3xdQ3s1eUMsZVU8Lmo3Si51Qi48MGp5TTRMYnghfl1xNVNUX1pGdjJwKFlXblFjc3BOQjZLdzJrI2UrV3VJcWVXNC89QCVnd295d251UzBtczp4PW8vflp7ZU83T05yfmg8dHgwMGBoWGh7fWBHc3YjYVMuazNzRlkiZ3IhZTJ+OTVnLmxWdmZiODlAVHo3QmNIWUQiKF97Z1JFdmpoWUU2''@;'; put 'put ''YWd6ZGxeTXB5cjVFX2JEYFhyM3M2REhQOj1lYitLOldjRi5PcU9DU1VVP2ZdWWZlY2hsOU5OOjdtfl5WYnpnTCU+TzAkN2JVIVFsKDRTNnBHUCNieFpqNC5ROV9jNmJtQiYqZno7bzo4W3pUN3BmZDhXUDdnczcwUF95PTZZPHk5fiFGU142bHIhTkJ2YE9pXVhsOiEveTJvKHFHSyVNYyxmbkZr''@;'; put 'put ''W1QsNXhRKnFIYnUvZWNrays8akF4UXlJRnp7R3hzR3hwcF1BRjdGPGNnUFlDcSxfO1dYPXZiRUV2dyZiLn4yYEhoTmZEc1Q+ZSt0VHgrMXpYRG5IfCU+UUlPcnJXcWAsWGNqcUg4ODo7Qk8pYE1HejZUc3JucWowb0xLeX06Q3poezZvdkUjbkZMWD8/ZGBaZ2ZeOGVQLHtKfEYub0o6YGwvJVB9''@;'; put 'put ''QmZZVnAvQGI8fjxANSo8bzw7d3BvTHg/eFgxNnVtOG03WGc3eExQOUpSfUI0UkpQcmxCczlsMHRJZ2lfIzcuYExZMHp4YTY0Y1Z8bGU5W0YpJEs9RFFefFtlck5+IV9BME1QOGh2QDk9PUBdTTdmN3pASkQ5NXJma1kzRGYvVVJ7emBAeDY+RUduVVYwYmR3XVI+aFRRRiNdN21Pb3VONE5NSXZZ''@;'; put 'put ''TzZBXUUsXXxVTl0iLlFJaW9zO0l7d2hDQGNXT35lTi8rVzYwci9WRF5hanMjMnklKjRUemE5PX1qbnZEKVVuJFMpZiJNIWJMK3BvLzJFTiRxRm0iWFFScERSbHZddlZCLkB1TUU0cE8zJHZAJmNvej80fltuImEwIXYwJS8ueUF3ajR4bWtEUyRaLiJJSFldW2ZMKm50X1JAfitONnY2ZWo9VWhD''@;'; put 'put ''aXlNYEFkNVlKVmpwaDE2W1RuajFKTUE4JUM2Z0JuYGhNV1VrS3Imeko0R2hEYm8pQS8/PFdMYCMqb2B2VisyUWJ7K095WDZuVXRYIzUkbFVlPFsvXjVETTpIWCoxQHtzdmlMeCpQPy8xfnMlNXlgU1o8RX5+L15wbV04NWRnKSY1PVNScSpyU3d1TypMZVNAOElwZ29IXnc1YXlwZFpMbkIybEY8''@;'; put 'put ''KGVwVEsja2BpLyQoIjkuOG5sbEVxLzB9eCZgeFJsPDghbHg4PDJoOENiSzRpMXo9JlFrKGVXO3hKdT1xMzdDPFZmXndoa0lUQmAsYS4oeCxId35YZEZoPGh5eT9uInBOOFROSCVUOl4jREpoKlhYY0YhZiNSPyplbV4saktGcUszJCVbTW9ZVGZMdUE4XnMpXXY5Kl5qfFg8JSx5czc8T2lnaT08''@;'; put 'put ''RUJgMGZ1eGFAfG1aUjQ5fmArbEBdbl5bOEpJKVhVM31tRFojV3h4Y3ViV3JbOEV+QGIyeCtFOWkrSUNpWitDd0htVnh3Zj1fXXlFb2FfV1UiKEcwZ0FrS0g+c1F0WXxbIk5QfE46K28oZH5Md1RgSVJ8VT9WfFh1TCpuIyQ2e3w7Sj8jJnN9LC9nWFEoXXJgaWpUU2YoaWA/UiooY2lgSHFEczo5''@;'; put 'put ''RzNaQyZQM2RGTDJbWCNjNjFnc08uQV8ocGttMDp4TTB8czlZIz1TQmo6d0dPOXN7JEM8bGRlS1N4UFc4OUZtYUohYVlPRVA/cTxGQ1R9QSRFMXE/ZWQjXixAIUVVcTdiJFRIPiQ2KyI7KS5Pcmt6SEJeXVFNaywqSTdfYSRILG4uU0VWS152e1tFbDFuJEhwU18wI0JtelIrKS5UTC9CLmsxc2Nh''@;'; put 'put ''Nn1WKXVXSjYvKzMoSF9ySmc4SVlsK00pdmRBUEpQa152e3ptfTklQFd7LzM0PG91PE1qMlYva0pKd3swZzJkKWh1LjFbelZRQFdmOGJZVXhmPk5wPVE2Iz0mc1QlK3EjZTR2eyh1X006Xi85KEZPREc0aXI7cntqOXJweHUhVm1EXXZ0YG1IaVMkMSpeYWUqM0I1dUxbelh7VG5RJFkvMFU6WSF2''@;'; put 'put ''RF57aGE+IXJCXkQ1Six6R2lMWTFjSTJLT0ZeJk0wczxCKGZMSiUoLk8xa0s+N0MwMVApKiVsWzt9amk6SW02ZTVXbjhHP1RIUCNdKCN+Ly9yRHRCKG98ajQ1X2orU25aV1V2eH1LUkthSjl5RlhSOzlJb2krIipUYGBnJCNKWHhqfitrUzg3e3tSWTNXMFN1IVJLZCZUMDR3N2o7SDBZfWheIkFt''@;'; put 'put ''SExTbDV5IyMjJWhUYFpee2ROSztVb2w5fk1bbUwsWCxHZ1YxZkpySTZvPDlYaSQqY2hybiJvTjNsTl1JXk8+dEdCVG0kNExKRWlDd2RwYkMxI21qL2BPdGIke2lJcSU6QTFFKEQ1VHYxUFpbKWhDaC40Kk80Nit0K2NjbX1tQEtUT2lLIXl6RH5NNW9POmIkUVdGSUlXUEYyU0w8bnJ3KExCOGVq''@;'; put 'put ''S1M3WWV7bmpeal07WXsmWnA3OnR1eC9OT1FebjcmWC9BZXIvYDg4Y0VVamRVW2N+QFIwJWN2cWkyNGtKWUJBKE19Rj5DX05peEtyVFAuKGpyWklQZ31GO14uT0RrMyUuZClaI1NsZn1vMXd8K0pZTWFXRFJQTVNmX35kIkw5N2xNKDI/OS9ufERGMmA1UWopUmA3Lj1XKnBdZDA7dHNhX0pzM3Z7''@;'; put 'put ''bF1XXSp3VFJYR3pYcGxTSSh6UjYhWVNSc0JZaCNNPkQjU2JSLG8yNTJNWEBVSThGNCgrYjVlPHJoa2t0bEkmWV14L2VSaSk2bWc6Ri8jMHwsKDkkamFWW1ZIbm1MVXJGQDcjLyZpUmtoRUxgZVghNSRwWlFaO0xodyhRdVtaOkd7aihZcUVINT0+LFU9SDhJIWlAUE1XZixQSW1GKFI9MSlYeHBi''@;'; put 'put ''ZllQYzhLJXk6QCJieU9DTFVobSJrXVQhdUdSdHwyaWkjW1A9VjhWWFs9R111Kkw3fj8rdXQzZjozNzk4S1l2OmxMOkMsVFVGNF53YHUqWUF6emoyNTwoJSpuZSspSllkdF1Ed1p7UDgsTU9QKChEd3t7R0VgS2lXVnZYNmtvbnw7ViRsdDFpRF8jLiFbWHBzcVVwbDFrKHI9PVN5N0RqT0FpUntU''@;'; put 'put ''SDBZNkdsSzk0KitLIT1oVDdyMWFZWlhJc0tPW2VtUCQ/V0lUZm9ZZ144fGBwK2M4NnI7eURdWiF6P0heLnB1NT0uS2IyJlJxPFtqRjRLLnlVRWUhcU5iQytsUG4wan1YTzVkYj9mS2xfMGFwY2xFQHp5RWluUFJPRXtuUStvaWFzbkY6akU2O0xXIlU7SiEvOC4lSXRlXWV9ISVrN2g4VlZqcC43''@;'; put 'put ''Xj9nbmcxV3o3QS5Ven05RVVwfGo/P3VdQmJIVE9hYW5FWzRNOnNvXkRVSDVndVdiZSxRRFthdzprVDN6KyFVITV0WkZpPzpRVDgqMEleTyhTQ3xtKV1qPl5tPWROVzxPMitZRUdKViFvd2JGVU9nNlM/ekR5fHZlT11wNDZYR2ZueUJ+e0J2cFZnaHBBPn1ufkBSJSRjaGtZIT1AMyFvOXEoRll0''@;'; put 'put ''Sjg1PTsoclIkSU1KIWtYRGJObHdgPmswYiFwbSpGYHwpTkwzdkxeZTRAOzlTbH5NM2ZPTWVCdDBadUhpVWR4K2FaSGZMbCtIIl56RGxrciMlJW5tLzxxb09nKCY7WSw9O2IxKiNsLkVHKCJ6Oy5LNixQZ245MSN+JXFJQ2BBM0NJRTckeEpieDxBQnpeMkRmOEQke0JPWnptc1JneUdtUHRXPFgu''@;'; put 'put ''PSlXWFsydjE0VE88Lj1+RVM3UHt8LmdLSj0rP2Y2Z318a0dNJCpBUGZhQTo/R3RuSG5XQmZmcVNpc3Ztc2VOcmAzQkB7XTE6WGApRSFrNnVNZyMqVjFtQkd1aSgrdj5jNmw6JTdBKyVyVSplbExVRHZCVG5URmFDfkdyWlE2YVV0WDBpaVREIml4KUxJTzY2eDRpbjglTG9SP203MnQ2Jn1GRW84''@;'; put 'put ''ZUpKR21uVCQxTT9xSy9sZj1xcE4ybD1lVClKQzA7SyVoYmYsQikhMy5hIzdEOWN+KV50PC9IPHRDPnNIZ1AwNzFbImEjKzk5JX5GRzduJm5lVn1dNjBmeWx0WWMoT3RMZyFrYH5bYmlvV2g/T0lNZGx3ejl+Z1YvRnc9JXBecz99RExhbENfYCVAYF5FK2A1O1U0eytSM2VeXkdMfEo+X2lVbEYs''@;'; put 'put ''OFhmUEp9MTZNeXAlSjgxJjl9Q1Q4QVBNPz1bUldrSHdoI3sobFltKFc+ZD5sM1pUJmRDO1BScHFCbH0sI2U5bnRpVXBWfld5dSZdM3AiZCJPPEI5U2VvMThaXXh3PzEmYmFVbkkpMjYjK2VZWklxQXg9VHlHKH1ISXYwPlJaPXdUQDpXMzkmOCtXQjA8JjhVciQobkY/SHc+Pzt7PncxUDM3cTRf''@;'; put 'put ''ejQ5OEt3PDNONlFoTihZYW13YztCbDtzalkmW15kdW9ufUdTLm9QfV06InxfYlh6Ll0uLzZpdDxybVdQfDUqRDtZZiVdQ3N7SXFWIyp5eTQrLEhLVlN2eSF2aD99TkF2W2RyWyhyNV5xd2k+TWRII0BvS1ZtWmUzJTNjU09DQEpBfk4ybWoqUFNZIUMucX5uYTgoJDwleGxtblgrInVzeSY9Ujc8''@;'; put 'put ''c2VUbWQ9OSloXTlkZnlya1JAYWRnbzUlcEpJUnNmOC8sSSU0W1koZD9wQElhUSlkTE1lNEUuMjA0Njh0JktJX1pIRChTVnlDaiZIQGgjZTtlNDcjdzJqO2IrVWNLe1diaD5PLEpUfEtFakw4WEQuUUxtOy5+Q3ZbaCN3Om50enpjcW4kfSE3fjpqY0x5e0NxL09KWiZwejVoLlBqe0JSY3dwV0lV''@;'; put 'put ''I0JRLkBkJVNDWjxpOGZVUWdnSlZTWltkclRofG80XSUsR2JPO0dqRGR6a2R6L0BDZmd4elJzTUlZLy5yWktALENTaHx8alJjU2piNz52OUBPSVthO2U0VTZsRWhxSGB7RlciMV9PbzNxIWxffH5QKF0hTHlkTExTV3k3RX4jRTIyJXVXMlNHckFqYVt+aSNuL3QqJEhVPE1uOSt8XTJNVC56Lzw+''@;'; put 'put ''eTQ7YGQpNGxyOD5QIlVXSFRpMnQkPUNqdDEiZFE2fUVraWFNKGlhM110Ml1yWGc9JFIjNT8iRVE0IkxhZDBJTTpsfUQmRWFsamVieyhFYlkqZ3l+MEAmP2FecjxkRSZNWmBiMl1iI3lDUjU4emNFIkFEI1F3UjNDOmYlc1l5eENONzMsdF5JYHRbTCEiZDFPNj4rNHY+QnB7ODg8fGY3MFdTVHp7''@;'; put 'put ''KjYhfnhTNS42RUVpYj8lYXxpJEBWOmdOV3N8fShsdkJbPE1tMyljMXMlSi9Wb3ozM2lvR2xLLE5aImo+KDhBPFdYT1dgSlNCZDJ3VFskNF5YUEVZZDBJVUZVNUY+VDVJaFRSaUoxLlhINH0sd0RXPkwpNT06KDlbRy9NKWVoOHNheCZfeCwxRzNpZmFWJFhDQWJmMiwzZTJ7dEdALkYodEA6Qi92''@;'; put 'put ''fTNYLzw9VF5UcXVzWCNOUHEjTil7YVg/SyFEaW1DOEsjIVoiY0tCNGcvSkAyaVltd284MFt6M0hWUXFCQ2ROUD9RcCFwJFREd3thNV04QnA0Z0dSNTxtazxlUEAkLF1TRjYlKCswKEtKaCYrRnBDRWhYOVovXSkpRG1fI1VNTDplbjpaZ0FRL1JxS1osLlEvI0BwOVhBfWVsV0hHdHFWYVl4RFdb''@;'; put 'put ''LGN5OXxgSnRpTXMsQDE1SkdSZktaOlU6bUAqdVE4USY+PV5jTi9kIndGenBAc3o0e0Y9dkNZPF5nNWdNcT1xW1U7QnQpSVokKDI2TTV5KCNeUlBJWHI9MUR1Q0lHOlVnP3cwRlNZZks7c1E6aEdvQCVTZSxLVUNRdWZCRCNWbDwuPjMsSkQzVEdjaXl6Y31RTl8zRylQRCQwMVRMUHR5fih2cUs9''@;'; put 'put ''YDlEO0lhYHlNZTRGWXtzRX1ZPWtVKWFHdEN+UDdnNXt9akRIWWxJUGBlbzBkPWU+aSQhLyRiKzNAKjErTUVlaHd1fCxbQmUueUt4VEJTUTFFOWdBZXxUZVd5O049XX4uZ019O3hyI31KcFA7R1lPZyRmT2p0Yjw4KE9VNV9IU1I1P1RBSktEL1RpJkVtSVlEKXI3ZU5BIi5Mdm5adSohRyh4Mj18''@;'; put 'put ''Q0JqdHBATGN8RD1YSTxHZTdVWHw5fkk4dkhsJnh0K31BVyY5filGbnZXL2QocnRQRX11OjpHXVk7NTBvRVRIX0h7b3cqWEUoVns6M25gInQxWCkwMmZ3Zn4xWnhgO21jX29EKFciOipCVjR1M11OSyxnbCgkPldoMnJxR1JKc151SDMpNSxtKlYqalBsRkVtM0QvYUIhQFBfUXJDJiEmQGF7alBL''@;'; put 'put ''aWdRfSJDOEY9bzJwMVFpMWBtK2cmUkdsNEpeNTtyLjBRaXV3WUJ+SS9PV2ZuTkZHRkBwaSF5Qz5LfngzKXw/ZT88blAkVTRmT31JNU41fFQ6MXd8bW8+UUBiNSRhVXcyPWRsdnQ3KG5MIlM9KDk/LitCaylnQXAiNjRoWjJTPjlCSCU0bDB2RlNUV3htXUsoO0Fwb0dxekZnNlMwMlZESmBrdTIx''@;'; put 'put ''NGc5KEwpdExkUS9YYzAsJF1iYX1NX2AoYHtYJTd9NX44IzJPbjdgTXJWNWY9KlFFJnBbJm9NYU5DQis5LilZejYsT3klRF1rfC9hMUJwPyVmcGl5Y2I8VSV7YGk2bldIYy9ONSVTLzlSaSUzXl0kZVMqIzV5Q1dSJEdtXTUufXZqYz1pYW5lInsmbmJeWjtaS0dRUmJ0ZjVnTyJsVCJRVCFTSngx''@;'; put 'put ''NyQoX3VTWHxpNzBIQjNCYTlCfHNwdk9iT3ZPcndmTD0vajpnXisrWSNmPGFYMGRkeGAqVUMxb1RuOVZoTyZmbn1LaCR9fDl1dWJbYFhweTFaRkBZO15OZVJ+OjUpSl9wRC9aMGUuNyg0blZ5Il4pfUl2Qk1MNVNkSDdifSRVfGA0R0c9QFJVP1NUQn5sI2ZCayZsSkBJRGk+eX00Mi50anE5LERe''@;'; put 'put ''UFg7YiVwTGRXP28kSWtJVFRDbTZJdmI0SyhyU1RufjVIYkxZMXxiRmZ7bitsPUFHKkxaT2QoalEwSU07fTIjIUI6NEE8T1dxc3IySiUvejJxVXR8fEFJbDpoQk1TUXhfXiR+VVZ+VGomRlN7QnFaYyhBSj9KOXdAMUlwb11mZ303Jkgza3REUkhZaSZiSkV4R1lWMWJSciJmVHQre1dBVn5+Yy5b''@;'; put 'put ''O1IjVGwpWX17KWZybHJmSHlSPWcxME9tMFdbeUpkO3hZKVd+bnEwP1pSfEApJUxUcX1UNFkzbDdzbiFOKz5kUVVSL2I8cDYrejdgLmhfVWJjNTBwbHd6UUxjaT9VKmFVJFoqa2FhKWhZWXU+MkckXihwS31+SEwkYko0VXEiZUxVTTFRVjdWYyFZalZ9dld0QFR8KH44blR6NkJVdnQ5XVFvMjx3''@;'; put 'put ''NyZUQixRayg1S3dsPWUpbGk2Uz8rTXs8Zj9iNFFXX3hie29UO1ldWTo9N3M8Xn5Dc0tQYXFTSV9ZKy9tSlQ0RVIpZ2lzIy85bzMyWjwjdHJ1TE1mdUVJcT9ES201eHZTQTtqM0MkPXJpciU0K1BVZV1EZ0dZNTo8eWFLK1lWQjBkMkNzMXtZSXljTSQsaj1mayxkeDo7fHlrZmokLkMkZzQ/biNq''@;'; put 'put ''MkhZTzAsfjZ6OWVjZnZ6SH1yOE53TUhibmRVSjJmUyEuWlUkYGdRI2NfPUNvRjZZSUtZRmZpaG9uTn5dUlB5SiVeNXBBTXVnN05+QV5rY2F5eDFyIUJoOC9tV118bChvOWZPQFgjYlFqWll4MHMvd3c0KmdXZy5UKXQvLHl2SDclQE8vTkJjXTAwKjlZPSheQkt3Xj8hNzxwXnQqJklCLll0Z0R1''@;'; put 'put ''ey5HPixmZCNfYURdLzJ1VF9aelgyREBDWmFDQ18zMVc9fih9Nnx3P1pKNmwjY1kmbUZZamJKRkxNPW5VSWNQRWV4PGwzMDQ0UW8+Q0wzTzVQJC5TNSIhW01HeEw0QGlFK2F5WmUuaHg4dGBmajZZfHFrRy9WaTxgYihzMTdOPnZkRS9zJUhxXVRfM350Sm9odnZyaVgwb2NZb1J+fmArOHJodHtz''@;'; put 'put ''Q0F0ND8wJFdadyhuSUEwaiFUTX0wOlk/fXJWLnQ6NklXQVUxSU18YGVaXyFjJEZLOkMvQkdhQ0NNInlGek1wISVTVkdXcTcsQFJnYmdnLCY6OSRnJjpvcWxPU087RCoyalBYeiZMW01yMCVMTEJ7bXVmZnkpdVhacmA5Ils+Mj5PVVNyYyM7c09ROn4mKHN0Py49L3leaVpyS35XOUclOSRDMTQq''@;'; put 'put ''SX5SU29WeUNrfFgvOUB1anJnVDtVYUkpKVRFajYuUzQ/XnY1Z3Q7R24mVCFod0FTKHcpSVk+JkpmY1YxLC4weTN9ZDlmMy82JltAXjguPWdaPCx8fmlIbkVrOntVRDZgb3A6MXB0fCtfX1deezlyM1QvUyozR2Y6fmssVzokdl5jRFg7P0QsPUZ9bCFzbHkoWHMzRiNhRCR7cUllYVVXIVZSNDZp''@;'; put 'put ''QSY4JDNCSShfXn5XM3doT3RKfmwoKWc0cyVzeFhxT0ZvKEhDbGJjQlZEXVRKKi4/VzIzJWEsfEJXWiNINEsxRGh8L2ZOdz4zeGwhPmJDUFU7ZzpPZXlrYT4haGlReUBnTmlbQUZ6R0BSc3cle1B+eS84YE9eS1IxZT1YaHZwMV5gKURgayIwQiNWWEpgYT08cDxJMENLXmllLzNpWl5tYndLY0dg''@;'; put 'put ''LkBgLGVaL31UaGdFWUF1ZzY+OkQ/ezAsIkg+bCtdKVE7bjdbTjojeE5lYV5SSSleKCFWaHE4QTFzX1B7Qm1kLGM4fj5jVzVrMEZXXkZKOHEraXRkNlJwI0xbZTUobTw0WkJaR3kyMyFUMD5DOERsQlVJWkNvOE51e1IxI29qRDl+ayltYTVfZiNRLDNiKT9teXR7Sl52LDVoL3w0e3tzdlBKQX13''@;'; put 'put ''fFViV3Q3Q1RUMWt0fCJAcj0zaENtdCZaJXZoMUduIlN4NHF3IyN1TSl7P0V4MHZLL0Jwb11sZ3lHNFIwYjhRZihXWE9BfElQajVkYVFrL21pfjUmLiJvU01DNmRabEZxPX15OzkkbSR6N0ciTGtMRU06WiZ7dzNRYUklfFMzNytjbitJXlE1Z14rIVM7Yjl4JHw+RT1FVXY9VFQvJWg6NlA5Ql47''@;'; put 'put ''UjBDXXRYJi9xZV14b01oN1pEc2JCMzhedmJdZzpJJHJ+QiZ0SXNpeV5sM09PZF9qcElPOSp4QnVVeEs1dm1nWUAqO0t6bChtPzZtfV8hcXE+YzRbbj9qVF11VDxYaS4sNERtc0Q8WE15T3JeVyUpNH5BZWF4XmtwVkVKUzhkVHVgXW94NjFsJCZ1cmVGQGJYb3c3OmgpJDpCK2poY3IpeH1MQ0kv''@;'; put 'put ''NXYwVH5hVkpaVGt4fihRM3JDbCh0SykkQlQ5LzUiX2JVJU0laH1mInwiU2NeTyQkKCo8eSh+YUN9LC9LeX01Wm9SPmJYQWNheGNZKSx7MlM6fCVHOEF2JE4mWW4hM3IpPjpSWT9FYlpqSjRma2RNa0NaP0piajNSNF4+VXYuXj5vMER0ITgqOWJrcGhWcCZteDN+a21VTFlqSS9KX04yMVcpXnNx''@;'; put 'put ''NjRqWUNIMkpKWDNsaSZVbklmbSlVbXY3bigjRHQlM1JLXmo4PWk5Z0p3VyR1bUsydUpgKGFxZ0lRdDZGTXkjWnBWOmhZLHFGb0dgRUE7M3ZSXkMwRUV0Q0NtZSZKe0FzeFglQztyS1E3ImUxYG5tL1NKYm1LdjZKUXUmRiZRL0RSMjg3OGlOOGAjYmRWU2hUcFJBVXUrVUkqb3cmMUBEaHk+Lih0''@;'; put 'put ''ZlVab3w8VXhhMCVlT1JlQlFyN1JVUClEUUJ6eTJObmRzIXFNMX17R3NlR1F6X3EsQUssW00oPHE5Q2dFdlJ0SyI4Zy99T0dgOVVjQTYkZ0d9Xzx3N3RIb2IlMTFNTntAL2xyTjwyQyMlc2cvUHhCYDlwZCFNOFFAa3h9L3FzemAyfkU5X2kyOX0vW0xSb2toLyM9elJAbV93RlJdK0BmQ3F+dC5E''@;'; put 'put ''eD1eSCwlW2xFQ1lgcHYuPjl0NTw2Wl8jW0dldSg9dTk2MWA2ZlpqVzE+a0dBODFNUHMvUltVW0k1cEttZ2wscF5Qe14iIXlgc1Y1RXtRQUx8fHJDNTxiP0hXUGwyZyt7X2ZkfjNadT03VWY6Xz9mZixQW0ksIXgiT2gqajc8aldMbmxTe2NoSkRbZiM4c0s8c0kse0gjIm0/UiFVIi89Ims1OmQ8''@;'; put 'put ''TjU2fVZKO0NFc2FsWSQwQXdhRSY3PmNaZTRMRnNZQC9COFRVdEBoPlMiY0NxejNBdktNLmFAbmY0RV5CX0pwO1N2byE1c3xPWE1OfGF6V0xiNU80SEpRUXt1IUg6RitWIylHbiQqVS9hbiQkRnMlbVJnRUlUPTVyNnR0PDxSS0dRakBUUX0jTXU1fGd3cCVWW1F0O0ZDTnk7flVvNyJXZmEsRTo9''@;'; put 'put ''UkZ3eWRHKiwyRHpDT25gekU9QigkNHE7by94bEdXQUJ+WXdDRF43dkFqVm81VC9bZlpTNkNmLEQ/fClXK0Q/OCxjKUd1TXxLZU95K1FLaipyVW1oTDxZTFF4PDIka10jTnk5ZTxbSEIvIWJVTyx9SW5mSzhDLER1M1ZiekFYUDpIdkxHelZ2Tmw0eUNbVCF9WHAucnpjW35GYVoyY0x6cHN2YVAh''@;'; put 'put ''fmBtQDx8TFFUL254MVN7JHpRQCopYlpdcHBAang0bWEjUSRoZlEmZTVlT1E0TEQuTXJMfV9DUz47ayojdS40UkEvdGRaUj9rUFZ+TWRGcWUsJjlyb2h8KyIrNFQ/QHxyV0VefUBDJXNFJncpMlEvcTl6JjI0IWYmZDQocEMmUilkd1Ehc1JlZjU7cUpQTzwvV1IqVXF7Z2U5PTtQPHA2IVFJKHdQ''@;'; put 'put ''WWl3Ozk9L2A+KVFXZTBdWy9HSU8pVjJCOWhdNVhmQntwVmEpQmU7TVomcC5QVlBHZ084YG1LIXhwfmdyNSFNKjpmNiE1RUFpb1FsTE5oV11eazFGIkQvOmxTOSEkdz5pbEJbV2VKYjAhKzlNXnxJaU0lKWxrSTclU0JaYzRkbEROM25LV3hdVzZdS1A8bzI8VkJhPj0lT31Ya21hbSFvQWlTaH1+''@;'; put 'put ''NC5ee0JDNEs1RWNuUSI+c29ESEFLWkVpTTw7Zl8jbTk0O05bRCYpXygkU2xkZWRgd1BLKkw6IXNEXk0hdTBSPS5pJXUpaix6MUFPaXpncSkqKVNgM1dSSFVLczEiZzhARU1vdjxDRnVMJGE9QypMSzFTUUkxfCN9bm9sQ1R+InEkWnt0WzEha292VFVTOW9LMj0vb09hVCk4Smd8MX1zcSpdPi5E''@;'; put 'put ''SVo+eSl7Z2tAWHdZPWBrKU5QcFAhTmdFbDh2dEN3bUc6cCM1cSFHbXg7flYqX3F9elZFQDMlI2orbnUrQlNhJmFSODFILFRIWC5iUldJNS84MEAkUTNPZFBXX21DM35NWHtDTDUiIkMuVkx8NTZNcVNNSXNSPGBGO119IlN9TUxvQk53IUpAaThBdlo7NVsocVNlX3giTyo4VVExQll7bSM9Q19R''@;'; put 'put ''ekMwRGVCYG9XZi8zfnNhbiswPkooKytLXTYvMWZraC9wWUdLW3VfN1BvPWgjYUMvU1JfVk15MCFJVnBsNXBuZVFPKHJtJVpILipIbjFGPDgoYl9yOHc/W1YxR0BbTXh5PW5MeCFwbzV9S1FYOkB9Smh0ZnV9aU07VVVCYVcqTDJmSl4sKD1BIlgqQ11fK3dqVDNWdWErPEN6S01LKTZAS0VYemB5''@;'; put 'put ''Im56Y3okdXF4WjFteEtmLHBANHxqYS5oUH5sUDZWNEVBNmk8eSxCUz1hYFNZe2cvcktXM20ycyNBQGhCSzdtQF5XPFFSR110dmtqbjttdyJtJk96aXA7fEZseU12cU5NMWhtYzRAMi59MzJmQHBlNSpBUk52c2k/ZUA7ZUlwQzdhZzNmaFo7PFppIj87Ni95al1+PUNrU1lGKkRnYjFXU2s6fntN''@;'; put 'put ''dEJCLG9CPkBTZjZ7LD88S3MmI2lKR2w7VWRSb2s2YnY3SFd2SUNYUGxpdnI2cWV7REFyQEBXez10LCoxK01EWHNNR1ZaLGxTTyJxWnQqbEFeY3Z7LmElPFliJmVFXTthMkoje2pPbmdEP0M3S05UVGZobzFnPkAyPzU2JTttKklpND9yR1U5S3crPmBFPX1LMjh7KDAyXTc2elQjUj4kQS54dDko''@;'; put 'put ''dSJvdWhRbXRgK3ZJPHtyOWx2WDcpXVI0cmxSUTcvaj5VSUd3NEo9Ti8qLy8pKENsLypoNC5rXjBnYSFtNipyMXZiZltUMndzWzhFNF9wJjFJI1Z4Y2dmVG1vKHRLPyg9aUZgJFhKLiYxLkJQQV5VY0I3LHwuSlVmJDhSOjRhZnchIngue1IqXyMjRihfQyxgbmQ9cmxUQmExekEvdDFWamF2TGVv''@;'; put 'put ''IWBZeTt2Y0BpQ2l7Y21NO2JZK0tIP3JwPVZhUVpQX0guIUVEOXQqdDw1aiZ8V009OXZ4LExbJDNFSzYhMTU/XnxaKFpMUXdUS1ZKWWg5L3A4Ojl1Ln1gWm99b3phfjR1ckB4VyNFPzRqQjhdb01iS15nOzJWaGlSQ0MufUlkX0o8IyVgZyhrZnBHJlcyeWpnO2s8QkdARDRkbzFEOEQpNF0uTSU4''@;'; put 'put ''XTd6XVVPSFVNTGsobFBVfUo2cyghTFd8P2o9VkRyJH1paDhqWERNRDYxaFEkPmxfbWZdRUF+YExjfFZAMzM4RyJBWWhNX25eXyo2WFQvPkJALm1hNyMmVlUvemY8YFF5SVF7aWtAajlEVkUjRn50L0pxYGUmUEEzakA2I1tmX31VaTFGVmxOL0BiKkJlPm9fSz8zQ0ZLcUU6Slphflh0M2JiVCJ2''@;'; put 'put ''WHcoPWUhO1lqMlI/JlZ2Z083OixSeUJCWEgpSiUhaWtDWW1KOzJwMWs1al5IVGdDeXtWekw0ZUVLVW5tSCRIOXNwUUldIlBHRkpqISQoL2dlZzwzcnR9O0UwI0VgbUNgTkYze2Z2REhdOCpSWUZhOzlqTm5TYkBqb0BuXmw6RjE5RzBGfT4yRlsrVGdkUVhxXUdVTyZ5NFtXeXx+cyF6UXo3NkE5''@;'; put 'put ''K3B8ZFVPdlVMSWR2QHNCQXtKX0A7Oy9pfiN1bTk8ImV8QllURXFeKEN4U2owbXVFaDpZU3cmPylgb0h1PGQlcWh3dDptIylKTz54LlRKfl0lRDh8JGlTPF56W3FSPGxzSiNufmh8cXpfZCt4N00paCs9bEtkaDRWQH5pYlZwX1dnczRAI2J4QC9jdyg+YTBqPXBBNj5bKWZIempyNkZ9VUksYlRj''@;'; put 'put ''XyN4NGY7KjljQ0oodndiaWByZWosQXtQU3o9QjUqWHU1L2ppWi9SM1lRNV1MKHtpYFdBbmkyKkp3ZG8jKigiWywsK1V1YlI9eXQ5dTBXbml+YD5VRnVjdytOKFlSd2dYQzNlJXRVfEIkdF5NL1duR3MmfF0mZEh0PVh6OUdaeWZ5fUUyWTAsTXk/L2Z9SFYkVVVxNF0vVlFLMkJBJld1eEkua21F''@;'; put 'put ''MGV4OTdsSXRETXlRZi8xfC4ofj1NYGM/UXdTMyEudCtbO1lKOCs4aTw8ITd7ODNbL3c2cyV7UkJiVmVdXThhKXVONF55PjhCUnsmUGVkIl1xMHUhMipxdnFTQH0pUUtKZSVGKUUqaWBANEsmSTV1PH12UkJkVm0pTlVFfGFscnFNQWE+ckkvQ3wqIzxDd28zOD9EWjxoSl0+OmtoRUdEdytbNGg9''@;'; put 'put ''dl9Tb2JTaXcjdDxEWCY3dSRhNCE4THFfY2BYMiFoNzdCO1gjYDhGOXhjPUVZPDA+QDN6QGpMIy9Gb2pNI2RSeEA7ZVJxQ2JgWSUvfGImMENqc2N2bz5udVltSUs9RlFWc3I6LmU1MUIsPF1YSGlhfiUiQX08fDVWeS5TJVl+XjIoKkMpdC5APCxPNUplZ2dUXkg+UG8+JTNgcFRRRTAkfnljNX5B''@;'; put 'put ''dHFiaWZqdm5rSiYlYzlPKnU0cDhDLENRbEFUPXolJiU6Xm46SVVgXXU2S0VOKHtjV2lmWmIkazNfWV9OOGd8UmguJXt7a3Z2JTRKeDQ9OyZ4Sz1HQ2coRChWNUg7enQrTj5zQ2pfKj95N0NlWkdufkZ1MFZiLllXRXFOISNKdjkwR3BvMmpXMTs6Z0U2O2RGW3RpME9qRUBAOWE+OD9rYj1WSVJw''@;'; put 'put ''RzlaVGBQZTo9bHJ9W004M1FgM3wpaTFYJnA3X1E5OF0lblI7bzk2P21RfGNiRSRAXVVOLy4yI3VYQWZRYF5DVCtneCNiW2NnVSs8biw3MjlCSTBubXA4UU83SC8oM2hBUXR1Ji9fQWlLW2hkRl5QXV4hPUEqTTdbPXMiYy9lPT18TFVOUlR8fip7LiFfRkpQRDUjOTRoKntTenVbbygybWRHSH5y''@;'; put 'put ''JnVMSjJBXiFzMUszblR0X0JhU1F8NTdoJGA1K0BvOHg8ITEiRDdQQjNrXiFsI1lZMnAubjohPm9sR3RweTtMdyVYWlM3WlJFbkM/QDIofU9+Z00pcyRvP203YHBIOVZIUyNQWHRqQ3V2OnxkKkVZQnZjQ3QqTmQ0XWFGYjJUeCEjcDpiOX45YEk5K3FsUltePXxMZDwzKlcjZl9genMrZkxRT28w''@;'; put 'put ''NTQmIkE8R3YoZzpyLGxrSHRUWytEXzIqX0FsazxwI2tIUVNSN0xXTSYvPktbSnUkQlc3ZTMuc2FPSjpOTTFHLnU6KyJDKWBmOyReQGBXcDxxZCNGVGYsaSMsaHcvcGZxVF0/UT9je35WWExoUCxdZU1dd2ZiZD4oI09JX2B5PTUzTGB3fCZzQGk7OHUpYFc4JStwQ1lTUXBCJikqaG80VFsvYD0o''@;'; put 'put ''O1t7KDZuUD47JGo+Si4pQlZ3fT8+TiRaSTlRTTFVTGtdTzRKJlA9KGVMVyxwfkNyZGdKI1I4XV5ZRCZpTE06fWpJKX0jcVBNTC56NWdoNmchbkRePypXYjJlMl5HejgyYHk6Uno5NjVGPlNjTmNKN2trYGpmeFJmKlZwWm5jTzdaYkgubGx8KnRZbildaDw6eXQkKXlTOFE7LEcqUS9fS2xPUEhT''@;'; put 'put ''Pk1FQ0AhOWIiWSw5bSh3Xig5ZTJkJXwhST0jPWhNP1ZpMnIxfUBwJGZ2fCJGbD1Ud2g6MCkoYChpbXZ0L0ljUUljVD0ufnN1NCQsW3Y/eUVBPlFCaio1aF1dQmdIY1ZET0VAQWd5PjBydTk9JlUhQEQmWG4jYk1IPXltdzAoKjFHUHJUbkpLVikiaSIvNHJRSU5LanFgbWwmeld4ISgrUVA7ZXJJ''@;'; put 'put ''K0s2TklYRUQpcC5eKnlpXWl4PSFocS5GJitEVlpDKWVUe2B5aUkwVzM1bUNCbS5MWkciQ1tMa10oKHkrflF2cVBlVHxxRGQ8UTIyMVVpWkNmQkUsKm5MTiVVWy5pQlgpP1dzLl5nTmlbXk1ycHJ2QFtvbVZSfjtIODpdJnl6XjIrUjtfPzJOdUMzY0l8TURuaywqWDpJfE9NL29AcE5NVyU2fFRj''@;'; put 'put ''KEw3e3lXYV1rRXo9OztIMG8pMCttIkheYkJ7XTY4IWJEdkMpcypNOnNsQiRhI1B3R04qWGhkMS4uK3UocU1IUH05NDFBazZub3c2R2F6KFhIPkZgTkZOfikuT095MHI1TylPJWRrYmFhLjJsR0ZRIkhtImtMPkVvUTVXWSt4PV9MYnRNWHdQYHFVNHlfX108T3BKODMzR1Z7W0tuaWU8Unx5YEV6''@;'; put 'put ''SWdpeldjOk9lITIxLDk5Ym91Uz1AdDkmOGskcE00QC5LaHgvdVMobiJLUyNyPyZIZypgQlZASWJzc2dGYChSVio7eGV+MzNHcTM1R0hWYnRqRSpsS1gzYlFZbGZTZVB3SDJBTCVRIWZOWzJIPltfeCRBMWQibHBEIVl7RCEwTTtgTCs7RDN2VzYwJFB4bF9vLD5GJH5keXE6SHVMTjU0X3RhJGxU''@;'; put 'put ''PXFjUjI3Q3VnYzlDaXxQeDV4ZTdGVDZKQTJZdjt8XU5zbHdBJSFtclR2IUlFV1s1QTFEPlpqc0hkZllTWEx4VkkpWSRZXjU0eiNlOXc2ZVl1Kyg8eCpkb3x9VVlbSlIhciFQYyN9bC48QVtnNEdNTGhlSjQ5RWo5UUBRZ0FbWmQpTVIwKjlWbmZmSz40V2JaWHUkPVc8P0xLNldCQjIwWD8yXzB6''@;'; put 'put ''bjVjSz8wcExPVFEuRkVlJmh3UiN2SCUxVmwjc25FejpfcWF3KG11Z1Usc3gjczFpa3hNeFdLJDdBSVAmdyUsMEQuNE1Jd01EJjJKRX4zMmQ6Xn4uIz5IOWkveXpAQlZEemYya15QNE57eUoqSWZ8Rl0xJHQ5MUleM0JvZDluI3xNSVtCfnpGMFB3VD5BJlBxUGlHbFJOPW5aKGVhVVtpayF5SkVR''@;'; put 'put ''VmFNS1MyfkFKOCUsKXdpcGFtdj0wb2glZWcwIV8uN0EiO0BCQ0RVezNZdkhmZVJaSHl4Vy5ze1lsLDlMZmh1M0VTUmA1ezVpblJ0aS5PXXhLaShzcShOZUg7SWshb1F8cGIzaldSPTVXQTtJdyhxTCNqPGZZNkJkLyp9JlI0W0t6TmFkTFdmSiY9LzwyfHx8cXhWcClCaWVgRVcxZVZHN1t3Ylsl''@;'; put 'put ''d2wzU0xIQntYNkNiQkA9U29majMpbVh3Vz5dM1Q8WjBOYGxhQCx9MX13QilCcV5YdSVzez9LTEpMdXNWSmAhZzx9XmwubEApT3c8R1srQTYzKUk4O3lNNzU4c3htNFo3RSJDTnxdU21eRUMpczRyNTpaMTVDUDdfUlM2VGdiO3dkWFNGYm1PUT1QN11MSFY8fSxfZGdEKW9+TTtQdHJ3VHR5WDt6''@;'; put 'put ''VmFgOUxac0wkSDM2fD0wKlJAVyNmeytGbSFoTGttRWVveEtOM3FKKnRYKDxzTzpNUjhJRHZVKjxiTWdfK2x0aT1WPlFZOmQsUUQhd0V2UC9ZcU43V3lCW05ramtEPCx4UCxDcGhwTV9aRl5LWk1IY082JVVvRFQ5N2NgXndyZig8LCtaQU82TThqKCUvUGxjbSUqX1ViZWUsJS9DbiF1Y2UjamEh''@;'; put 'put ''UmslZXVETiwkKV5KXmhOIUdGT21rcHZGdWpmVVczfUVfUTpyZjlKTF9aek43WDgxUn1mSCk8PEZGM2xpe2I0S29mdztdKCJCZEV5MF8yb2lWRCZUUl96PnQubyN8U2t8T0UiZWViQCg+fE41V0IzYlBnOlNIN3Z3XjxzNUs8UX5bZ3JGOEJkXmFjdj8/KW5RLjF2OUh7TSk4T2M9N3RvYypPezB5''@;'; put 'put ''JS9zdlEkQ1h3d2pCUlQ5RD86ZD5BRDsoaSsmW3QyR2xmdiF0JnteN10yTGtGTkFmKHhDTShYZTg6YlBqenw7dGUlKEx7KFVkRiFhXi9DQEpGfGVKVW9aKWI3I2I4Z2VYVHEsJnFBQ3whVTBzLDgkcDNRTUkjJlghTEFrJHchZ2pzbENWa3MrXVZCTElRPGc6JU42ayoxYTpOMm5SUkhKXTJvOjM+''@;'; put 'put ''TjFDfnpycS5sQCRYfDl3WEplOXUkZlRgR2kkNEhzKTlaYlFnc01UWlIsNkFjQE5MRUUjZ2cmJUlvKTVDWWoiPHNfQSpfOmZyRHtpS2RKdXwsLzY/W0FoQ1BaWi83Q15FOWVMcXNScUt7aDshdzMuTlBbOCpLRH4/UkE+TVBNcFNMd0RnfnZAbDRAWzk4a0pnWHVRdiR7U0k4M08lOn5aLmxfTEFW''@;'; put 'put ''KjxnVV9CKElvek9yIjJReTpqcCk6a1hIN0F1M0I6X0U+RGU5UjFQO3Q6eDdTZEZOMjY5Jm96OiJSUjAwfXdaMXEyb3gwbVJkTFtMKjsrR3w5XkMsPFolKjRhMGZtU35GVmZgRE0ycTdFWjpeUShCJTkiX2UpTjVIR1M9RXB5el1tNUc0QENzT2dteEpYNjkhMFojTiIhN11tez08RFA3cHlNSXtg''@;'; put 'put ''eCtmPT5aa19ZZC5dYkdHWFp5ZipyNz5rcHIsN2YrJn0lWD1LPWNqZXBwcCFNSVBHbDtjZkg2aSl0bDs1cnZTMjRIVzBrMCV4NCFXWiJ2KndWanB1Y3JJWjwsbWN6OytYP2B9QDhjLFRIX2ZMdyF+dkQwIithQVFySmJWcy5SdnReR1pgQHM5SV1dcHd0VXUremdefGRwd05vVjM4JkZMcXhGbk5s''@;'; put 'put ''Tj1fM09eS2MpOFVBPCZGIkxNYEQ+flk8PmJ1SENUdlpIbSJZeSlmUz0kMmJCMkglNGZ8ZVV9VVArUDM9XkYpYFhncnY8MFU4NX1LI3A0L2ZiZCsoQFQkPTt5JWkxVUsvN1dJJjdJYTFrdmRfJmFYSGEqZmZEZnlpOiIrIlokJURTVGBtVWhYeiR9YXBecnI3Izg3TENFbV1XR3x7OW5ZKFpVODEw''@;'; put 'put ''ZGBqNns2eldzVjFbN2sudSE+WlU+VWFPJE8qbFtLN2UhSns7cFZ3cEd7RjM0cTBbfVAqVSIqdH1dTHU7czdlJGhzTkQsN1UhMmA5JjYsbX11MVcqMztPYkZncShjdG9GUnhSMyU0SmB+bkMmJD4lQTd6OEIpdmhCSWhKRithO3ImZld0eExmX3haIVdbNUxPMGl6KUUrOzkpLGlFQDsmeHp2MDEh''@;'; put 'put ''VjNVYnE4OHhASl98YUwoVCosYVA8JXAlTVUyRnl1aWdDQTI4I1s6JjFZTihXLEhDVCg9U1lfL30vQ3k+djFnU3lYYzNmIT9qYD5zVVM8Q0IyXkokYVU5WGdqTy5HJk5yb1JKdlV4MzNxR2lncVpTIzkhanZqVz9Vby5ib2V+X2BSaVJSY187MHlBQHpWTn4vQioxMmxEfGp+X1IsUUVmV05BLmVF''@;'; put 'put ''eDIsMFksWH11NFV9On5+ZSJ3MFduJjlFWil8NXwpZV5Wcz9PS2VxUjJ1JHhhT1dKRXZyZ3dtYUIpRFl5SnI1aiU3e3s8X2pCaXhTcWY7USN1LF9XWjp9SytsLC5ZS3dRLkN+QkkiSDxANnhGfS5sY3wleERiN3twV3ZGUk5SWkJwKEA7ZV4hN3EvJFJCeT4mSUs0Oy5ZUVdgPVFPanpFeChiN2dg''@;'; put 'put ''Qlg0RTh0M0R5JiwwOlFyVmYpSElxZi8vMT1OVjV0VWNVeklKRFJ6NDZmPmZNSVJzIVhQUUJbTDlpeElqZGBWYkNnOXlbPTVUcjYvYExLbFA6OWt6N2BDIihIQnF+dUN0R1FOdz9tcHI3Iz5tRko4YXx3IUNPfkhQVUhiJDJwUVVAXkUsLEFZQGQjRk9dQz9vdTJMNkdRTjdea0JWSTMvbV00THEx''@;'; put 'put ''PlYmNWNte3twWyxtbHBXblZLLCRSKXNbfXspKyVuSEcuTWtSPlNFaTZ5KmFkRGVkcmxwJilIXnQzVWo2UkRIN1NDdEdCRHN4aV8pV25Xakt9R1MxWGJzVWtyaVsmVC5fOEw8UUo9TUY5dGUyfSkrSXFvNUVLfVNsNltVVDowOnMvb1VKajdXSVpPMntfIVZdZ04pVWxDNG8pcnczIkMoSWBPI0lH''@;'; put 'put ''VVJTJTR8YjVlKzB4Nnp5WypLRSFEMlFvdXJoUXcyX2R+JSUiY21aR35zJjZbeWt3bEZOUTtQcihTNHE2eGw3XjErY2hkQjZ6cDYzYUwpWDkvZmN0O14yWjlqMjc1bVZfU2ArNUt5WVN1dEx8SD8yUWp9OlRMRGwoZWckZkwxcU16S1d5d31Odiw8b0E9SzpycW00L1BnSkY3ZXh2dmciX2Y/JC5U''@;'; put 'put ''aGR4JTszXyY9SHIpazE0PFM0YSRYImY8aWoySDA+Nyo+Ky9GQnlEMyg7ZVsoeW1nXk91WV89b2laaCtUODhdSi48SzA2U19+Tnx9bVtFNzFLWTZGSHMiUmQvSVh8NFQxLndRd0Q3IWV4JDI9RmAuPUNkUnx2Q1VmOl5KKmBYXlAxeHlXTntpYCN1W2BORjkpPENjJWZ7TmV5Yn5YeFkuPEo5SE5r''@;'; put 'put ''PENePDl7MWw2eUMjdyhwI1k3ckRVXSN1Wk9rNkQxISt1UjA6Jk5ZSlcsRFh7K2k4TWppMWMuZUUxTSVbXUlEcDVfbVhxU3swQHEuMjpzSD5HeEFFV3NLMWQ+XkR5dU83dW4pdl99PShEQz1pSlB4VCgyYW5hP1t1akVzemQmeTN1dHc1OihqSFMkeyhnSH5TUFZkaDwoS1laOGxxR3l+V2FzNjR9''@;'; put 'put ''TU9VJGxoXj9Qd0c5bnJ4KSRNLi96c0MsbU8/JF9DZV5jUVpAYyRmKTJefXFneUkrSWFOSltTWXJ5Sjw8RSRJcCJ7VXRsfnVka3xHLGFxdHRTIXFIWjh3cVlRYnV+fEA9LkV2KWlee2Q/MnMwPHRMZm1KPiYmOkFuUm9CNFIzaXUmY2ZjS0BjJDlsV2o6TE00YzI8Z34jMEB5SiZJMThQKzx8QkBp''@;'; put 'put ''fThrOGZ4byxkaGNCZUx9TVBwXitWe2xjJT52eUYyeVlzckxkZkZ6bGtNNztaYGAsS3t4JD5+dEYkNF80d012c34uOE8yKU5pR0AqJD5KZyg/SitScUw8LCYoIld7eXx5Kl84KncoPT5WRGZ4fStqOFtfdTgkWXxuUTshbmlbQmZBYyQ7az5Xdl1Fd2JjMH01OltFTUpZPD5HMk1jS2hXT0BjWiEp''@;'; put 'put ''aTwzZ115OH0lczd+TDVIVyg4VWBLcXhbW2MyS0AlckB6YEwuSCMsMkNfXTtHT043PldjYFNEYVUyOiMqOC8pd1k3K05pTGV9dTpockM6RSUyOEdRMnhGIXteZGhhfHMpVDpEWH5+fExwPzZDZklwXi99dl9ZVzxGXmJsXT5OYGFHLnkwMCFkPnxefmxtMlkhSks2W1RiSjVBcC4ubDUiZj90QkI7''@;'; put 'put ''aHxbU0JjbCNHNWx6PT1WaGt2XWEzTzlKQTg3d1guOl1UckZXZ0Bvemw4M1RubGdkLzQqfWErOH04Q18oeFd8KmZTUU97Z3ZFKnxYZU4iZzpPRWYyMVtGd118NnYoKCRyQHEvWC9HMXFfUkgiMFVBJXdONU5tcHV9cVpgeGBNcSZCMWt5d080RFdoSl81Z2gzakxKX3FbeltOUkg2bmp8QmhOJXUw''@;'; put 'put ''V3BfJXtrcmh+IVVUbGo4Q3xOXV9tS2N9NXp4Z1FEKVgrdUhDXXZVTzJxS11IPixOP3UpYSlYVkRLPDdpOTRWIkkuJj0yW200QnZnbi8lW2RwdU1LdUt6VCo2VFkuYkFJeUVOWH5gNj8qdXNmWkw/UWN+bElzIVk1eENoekd+eFUoeENgQW1pIzojOU4+NnVsUn5vVCZhMHNSZ3AxYHZ4bFZyZEI5''@;'; put 'put ''VmVufC5IfHI+THcraiZFXyQ9PSxSKnBWejF9ZTx4Si9EaElRYk5GKkQjMTp0R1ZiUSNVZFg7PjckQGZQaj46ImEsP1dPUldofHV4fEEhRmVKWCVoNzFmMkBEMndpWG1pVVp8KFdJLFgrNGJMbVMpUCxgQHRCJDU6Sjx+Vj1IOFBmUV83a1tFMjZCJER4SFBPXnIyZGBheUJVLixqY2clVDt0I0Rz''@;'; put 'put ''LnZlOyF2WmplXzZeQHlxPmE3NS5RRD1DNHt0T1hzdFpGdi5nfUVtMW5Eby9ZVGBXcmFFVnF6aDVwNVc7YF4jWEg7cXBkM0tNZXpjTl5+UnxBWD9xLl03InxoUStpRUdBR2YvWDc1NGxueE00ckVXJnApJHdWY2Q/RyxHZW1+fDFlUXkke3hOLmZSLj5KfH1TRHF8IztaVF1FM3FYUFNeJileUXI0''@;'; put 'put ''a2MsK0hCOWNjRkZWQzJLa1ZYRWMkSmMvdC5YflU2fig5e1d5ZUZdY18+fDNHOXdJeFhBXk9JSF1dPVNGKGQ5PFckKS9odVsjaSk1Nm4pTzBWV1JuNWBRdVkueTs/ZGZDMXMhQXxeQEM3MiM3KFQ6enV2Sl5aMCU1d1pbU2BGQFJTMjN8dnkmbDQib2FmR3VUQUNQbmxuJURwPUEhVUUsai45ZkhC''@;'; put 'put ''ZS89Lzxxbnt9QHNpUFtTeFt2KFd0NS9wSSQ8LiJUeFY/bWRxIjFOSVtYYHA5dXpHdkhVYzs/VjwvemI+Ji9NTHpmOjAra0FZKTQibz5Vd1FnUVZnOSs7XXlYQ0Q5ejpIS0FWS3p3IjlzTl16XntSRUFKZHZidEI/X35vYixxeVgmVTA1M1BtJC5xTklFWjhLQnQyNmRafkFJZlgpNU47NDdWelpM''@;'; put 'put ''Q01lXVIsbl9DZnFYMWZWPV1qOURMSyV7K2FScCxQMWs1I0hVPEQ9KHtVY3FmSU82VmtXMk5UNis/K09IWDg0cH16Pk4wfGAzXjgvVV1+aU11IltubiJSNTFLPWpgV2RIbyVYR1tdSSMuW0s7IywjU15ySX1+dSsyZnFZb3s3WCtFNVhHKFd+Y31ZI3J9PVJIV1RpZE8+dFI7ImlMSXM6ZnBUcisz''@;'; put 'put ''WlRMQ2Y1ak01PStda2V9UThucF4kVmh7QDlYdClvWTJkOk1TNzBtNmI3R0IzJS4/S2V1dmlUKUxdfDxTdXRNVyhETTlsJX1JMSF8VH1RQWdkTT5nbjFdWjNAIyx9aj4yVWRlL19eejpAZGA3aH1CZzNra1hqWTRTNSt6PHxLfCl+WT9sdThoNnVVYS9oYUhrI1JWbnRpR047Yj9yNV9xYGw3YG9o''@;'; put 'put ''REk8OzNoSlEsKEJXU3QjXkc5THhHeDJpUVo0K1JXd3pXVm5gMnJ6VkluVXA7bVh7OXBqcWgldDcxMEk6dmdCME5wTzJVdkpqd3NuS346akM6bl9XOTJ6OjReKiF+OjhIXWRIMSx3e3Qxc3hrRTRzQEMrVnEyaC9KQkFDS3BKIVNDfVI1OTw4WXA4Jk8kb0J3ZDR4QkBpV2RbfWJifjF3RHpLMEZ9''@;'; put 'put ''aEBRekhlKUwxfDluMGhXcSx7KCFsbGAmPDgjZnA0ZUtUKFpgMWBwXmskaGF3Zm12PHRyJTN1PiY1WStfRTZVPTB1XkljVWM4QSRiVToqVCpHbGFMPVBnTUxxKUcwXS4ofFl2fnJTQVt8SixXIk58ayZaIUYuTFdjNzg8UllRNnkzcyFmfXVRXVg0eCRWVldpfkY+bGlmIjE1VUl9YSZhc2VzcEI+''@;'; put 'put ''aFttfD1ET3ZgKkJjYEwlMndZdDBUX2QvQi8wJkJiXUx9XyN8RilxeTs/blIvQXJWbH1vbDQ3dixyXmlwfUdxQzJadFEuWGRvOmQkZ0dzSW5KZXhbYkhSMjJZMCVxeDBEXnd8bDM/aEpzckNRZCpdMm5gdTdONjRTJlY4TjJ4fXJBbD8uJHY4aF9ISExgSCQ9JHtVQE4pfkhYa1Y4U0xqcENKTStP''@;'; put 'put ''b20rMGA4Q2FQa1g5QTRDaXVoYi5zNi8uJXkoTnx4XitTbWpGdjordjdIZj1pZCp3cHYvdWh4d3tgVGBqXygyNUFIPGxsJkB7TiMqWiMoZEBSNmVYWFVmSCJHW2cvQEJTUVhYWnIsJG9WMjF4d3w8SjsySyFja1JhPG52cnNqbyV7U1lNPnNTUUw1W3AoSXY0PDpqYn1sdnhOJTdeL3lFVXhPNHha''@;'; put 'put ''LyV8eDVGYGshRmE7NE9nQChrdC9aKitXR2czTkJRUiFvd2p+PDlIK0VlRFkvfmplLlBPQ1pRVSRHY2hDbn15fmwyb0FoYHFlUyx8OVV8bzEmeEd6PHJsIV8zMnFYaX1dSzFZMXFVRUoxejVTMUN7RkpfdTQ9emxyaUJafVR8bSY8bDQ/WTAmZV1XNiQ+d2N3Zjp0SHZGWy9LbnI7Wz8+PyFWYzI2''@;'; put 'put ''S3omMiM9R0R0SEw8RjpaJSFPclhyTmdySU4sUEJKM1NmQEQpd2I7O1NMI04yfVBURm17bXs5dEQ1JnprN2gvdk8hcGBiPS8lS1ReSjY7amM+V19MPDlCe1NEOTNifHxlPj5tTCxialQxX1o+JUhUbSNmQUUoYi9RQ2lbdDZwNjJfYX0jRXVddE9KZHY/bURtdngyeC5sVjVJLjpSPVQjbCkoKGIi''@;'; put 'put ''aDhjeytqaElBUk8xJjEwb1taVHY+aWY4XWEyKmxqTzxjaD1JJDNzaE01VGVuemNZa2JkazBZZER7ZHYjSFsyYVNJOmZ6VURuXzxOTk5bdm1dYUhCLmp7RCFwNiVOZzFMallsYnpsa0UzZyJ+RTM7cEhkYzM5X1ZCUiR0SEkkeWsvZ11+NGxbV0FjOnFKWUczfCkzJDpXUXlxR2RnYzFJSFRYZENH''@;'; put 'put ''KSkqcGx8U21oZGd8JH0vYXhzcz4wVGNrXTFwTlJ1Nkl1aWF8THdKZld1VElUJExPMyY6Ml1YPExLcC5yYTU6aDU6ZVFIJm5+SihZY0E2U0JDXSZfZnRPKXdvVWd6SSYxU056P0grL0A+OCIsIT59OyUqPWFvbipYNll0PTMvS0ZLZixRKl8qU2JMYThWamxOPSNVOnd0Ymx9Q3RvYWVAISM/ZHUy''@;'; put 'put ''PThOMjFFUnVga18+bT4vUUMxYF83fVpVLjFVKjV3MGQpbXRZeW17VEchNGQ/WlA3THxTPCN8UzMrYzkxSTVJMFZme3o3blhSNykuenMvPSlsYi5DbE1nMktda11gPTZuL3t5TTdqKlUlSVd3NjEwdSoxOzRAOlpHRVkxMSkpTV5ARGBYT0teYll7Q217VWBKWUlHKVpXRCJ4OyhYZ1dRJHEpMHMh''@;'; put 'put ''ajIkdSFKS3Bmbz1rOSxSdTssQixZaUFnV1RgSlp2cX1gXWtCfn5YIj5BYTxZL2lRPCMsaTE/WHooKD5pc1MxLyFxOD8vSVNpdkpjPjt4XiZOXjxxRlJPJWt6YEBUdGNBd2EuIlRuS091V1NMNSVGb2BaWCgoLD0iUiJ7MGdFKlo8VHZ9L09NOThKQzBsayowYzBzZz5IOjRlLldLNHVpNGZSX1F4''@;'; put 'put ''di5vKnxTWysjVERaRG5xQjlJOlEqaHM5eyM1bVYzdFtCekw8UFoxKGtWM3E1O2pkVCpuS20pXlsrUisjYTZxdHpMVF0lVzAiR3x0XmR6WSZlV3xfYSpieyp8Z0gjZW19Wk4qU2AjalZ6VldLQkoleEAwY20pfTkvck8vKit5R1pnWyxTaUAlTkBibD4ofihVMiUoXT9lMmt8eU0vI19yb1A/fVFn''@;'; put 'put ''QDJlX0FiYUslenpbR2YuR2hRUTIrYHtJfnFfOThtfHw4XW92KE55Nmw3UlEzZC8jOFNbIWpaQjpROCRTYkxJRnk5UWUwfHY6djdqWm8/YlFAQCM7S3QhQkssYU0kMEIwLD0lSi4jYi96SFAqSV1uQ04ub2s3ck9GTmxjeVNOWDkhWilZVClQO0xORW1gKE8qcXBkfmo7I1hfMz4pRnMlT1Buem9O''@;'; put 'put ''UDIuRCtNKUlgRlRxOShyfjsiRENVWEo8PztjJnVzT1d8Z1tgejJVKGtFVlksSmAyWl1MRTYjR3xmQipdWjY+LnpoZFRYa3tMemdNVjpeQGtFbEJ+KSY8en0jXXVsaW9bVDVoUF0uOUpROFFTJWxHRllfS19sJDRmOU02M1oiY35gVlBfOHZFKXphWHQ2eVd3e192W1FwZCQvXTR3KE9tL3gvdD9d''@;'; put 'put ''NkV2TXEyQz99UTZ0PUlNOkZLcnkjU14lan1uKUJ0d0kjS2xlc053U0BBYUckK3F1IyNUPy43cjM0JDJmV1RSOXlaIyMvL0pEQEJLPmMxSz9hWFR2M15PRFtaZiQuUEo7Rl1nXXklOjJPKmdXfXV0MExaWD1Xb1JxRjtVI2VfaHhtdy98YkI+MFYpaWtubCJQIllbRnN5KmY6TCYqZjVxVUFEM1VV''@;'; put 'put ''eXxBYm1vQCtsdyIyL18wZ1l2bShXMltFeHZoTG1Wa0oyfXMmdGoxNj0uVH1MLj1ocHMrKT4zRWdRSS5RVTcjMjpIYGVCX2s8VnhLIW0wUiFBZk5HdFBiOGBeWGJjKzBZU2l9P145WzdyeiQ5SlsxZyFFPDt3fnV+dExWTz89UEpQU1B6O0kyT3s2M3E2Y05VNSF2OkYmb2k+XjYxPGVbZUUmV2ZT''@;'; put 'put ''LHlpUWlxN1s2b3NPRl8xbHB8JTJeWkdDbFpmfmNoZy51WWNFT2JVUHpCSzY6fXs6JURBaURSe258cztAMztTKisrQCt9PzdaViQpTVpvb2ZyaVF8dUBDPW5geH1nSGtQW1htPzg7TzFNP183UVQuJTVJMjRGbHRFMTxWZVoxc0xiP2FPU1k3SjtYXUZ0e0w3VSEwMi5zVWdgSD0uN1diOXtZWlRn''@;'; put 'put ''Mn5UNENRfl00Ny8oZF4xbzd0O0B7bXlPYTF+RzQ5NXkoNGppOW1WVn0ic0BpRHVmLiVGNShraUZOUVpVN0lYVlR1VFhIamBSMG10eERQbXRfQ1tsOH5uRVp7ZH5nbFpXMkBvJmZWd1U4NFQxUVM/LCEzVzF9P0IuN3J9RndRPiR0L2hETENFVyFzWmIxQTE5PUxyODFfVXFjWkVWaG49WVZPcnBA''@;'; put 'put ''aSV7fWVmUW5kY0Jaay8/cj9qODVTKTZoOnxKeXxKcnVNUyE2djFXa3ZaVG5dbSNPezFoPHR5SzZzUXZONzNPQChma0hZMW5IV2tSMXdgVFBuMnlndz4iNlkoT14sZzs3PEgvNGNhVDkufGl5WVY7K0Q4WTYiOixdNHYrPWoyP2I1Sk0+LmZ4OFkpOy9EVFlELj1uaG1zWHtLaT9FeW0zSmpyeXhf''@;'; put 'put ''aj5wJEBMc218KFZCSnRSVkl0Yz8qe3hFdmN1SltZPXN1UGpvazZAMlMicFFDfkBfS0ROTz95VyNze3gzT0pubzYmczBQZlpwTEB4ZVFoWSU3SnpeLnJZWSt0K2VTI2tyeDA0UXFUJmUxbFk/UCJqUkZUM0clUl5BRnl+KlkoQEppRjdTcHJxbjh2XmMvQ3FKK0R+T3J5dGlBbTtrcm5IOTU2YVdK''@;'; put 'put ''RnV1fCt9Wi9UYlo2XnVKNCk7bFNQfUxAXXlwcSJNeDVeP2kwT3BePUF4RjkuOj8oTytLKH4pJlAuREY5N0FPXzdTdltIcUosQ0x8UTBZfGdgXURmSyRAdiNlLmssdyg7U2B7fDdFVjNOVkIsMlNWJSJUeU83W2RfSUJKMS9RdUpiVjw/eXJ2TT8wVi9aMWRRQG47bn5tMjVKOzZgYGhmQF4mWHZ0''@;'; put 'put ''bW1nNkwmR25KX218Ik0pVXhTN31tX11RR2NbSTlgTyNCSSphUGlgVnJ+dFpfUHU3ai56R1FrUHFFRWxvR3pjMHg9QzVzNnYhXy9Te1p5Uzp+eTBFUmF0JTlTOlY8TTVdNTRqZXNTUEpDczR2JWciallLT1tNeSEiL1tyZlBNR2NNbXhkSGJSMV1JZ3JjciVWcE9xNF4xQXFCTl9RemFLUChFcHhY''@;'; put 'put ''blddamM2PTd+bVsyY2E6Jj9geWxuOnIufS98ckdbKyQ9SzdLLi99ITVwInx3cGNOdlIxUWs+L3QzIjAvYHUzajwuYU9XKSg/QG9QRkphXip+SiVlM3g6fTs0R0pYQ2NgIUJUUiMxdl0zST97KzFkc3A9JCRTTSJgaW46RTRZXlpXNkpsXyY3ZFhnRU1ON3c3fU59KVA6a0Nja0tDWE4wYHd7eiV+''@;'; put 'put ''byxiaFl3QldnQn5UdzFLS2d9aFFJLiUhWSEuXWdoeCQvYUklISZ8Lz9dNCNxVEAqIVptK1oudERJLHdGcl9KRmZrIXNwaldmSUB1TjNwPz0rZGpfNDF6djljc1tNXUVQKWRqdnlydFljYDtJJV4jfXw4aFRfN1AhQmUqW15NJktvJjlWNUM+RWYkbEpfc0crSj9qVnZCW059JG1pZXpYSSFLWT04''@;'; put 'put ''QV1rfEF6a2dxPXRCM1A9U11RW3QsYER3TlYqQXE1PTNBXmNddEx9eCVhSSRfRjNKQ143Pk9wXXc3Z05PTWJ6dT1vZW5iP3tgZWlBUUljTGZ6cCZOdjBfYWM4OXF8dF1NTmBNOitZcXprZlhseyZyNHNWaj8pOF4yJSZSRWJOLGg9NzVYbVNyZyR6OUpjQVRxd1tMdXxxaE8mMlRNT3hIbVBgOWtr''@;'; put 'put ''MFZodUBofDU0MTE8JD5oU1A8PExyPDgsbU4vWlYsPldCdTdSWl9FbjpqWlFjIUk3TmcxUW9bakVRWUdPMFNJZXspT1FDbUV0VGUoLFBzcSliRiMoRkcrJWJOI0xKcTMlaE4vazB7Vy4xOGhReypGfVd0U0Q5ejg9aDAhMGJ7ezhGeHMiJEg4fG1zfDVuWXE1ektHNXZ2bnppZm42N0I0Zz9kaTw6''@;'; put 'put ''JWd0ZiZ4TktwNSFjcWQ6Sn1XVkpDdE02SmUmY1E6Wi5ORWpEfF9YLHU7Q3UyTUQlPDhCS0tBNEldeyM7SlhXQzRQRWJ3ZUY2JDNdb1tVZkx4M09GSGZmZlUyUF58dkhCMSQ+ZCI/S1JdTE9WT1ByMiNZbGd9YzpWXXdfPyU2bkUxdW4lfjpMazhzZH02YFEvSWx8KWU/WklkX1lESH59ZkFKZGMx''@;'; put 'put ''fDJwdGFhaC4qN2NoaTFidCp5STcqUiNKPnt7Ymo3RTplbztpQXBISWwqdX1WcnBWS3dVP2ZvU0xFMD1IW0s2YEliRj8mPFlgSXJ9OlFyY2RzLzcjfn5JK0ptY2R2S2sjKFBKJGcxLjwkM1J3KkwqSjtUMXV2PH1gMUhYTiFtIkw1KWU7Vnc6Q2dqPU8rPWtHdVQlJltBKCx0WD49PGZZJVltK1Bl''@;'; put 'put ''c05YMShub3FbUDRIPXd8LEJfRlFTOzU0dlloU0FmN3Z0PF57PClHcn1ARVJXeUVnbSsvKXIlUHA7fnpNakcuLDxreCp9bDtURjZxPzMuIyZQUi9WNSRuNlN7eE58RHlSTXZyeCZFQTBHNGl0O2x9fCVNc05PeSFRbFEpITgyeTMvTXV2OH5hQCJtQjRFSnp1cDBDRzMwQSoyZ3d6c1pNdCU+aHlY''@;'; put 'put ''M3dIYS5OVkU+fVo/UClwRHgxN2ViTll4QzR8PTlKVWN6SW08aVgrYHBTN3ddP0t5aylLc0kuVFQ/Q0VDSVdEdUp4e3VfZ3h8VSN7W2V2Xys+U0J7IWcxUVErOikqK0ldMlMuS2J3K1Y7ODgqQC9YVzRIUW0sd2dSXmJvVXopQ1R6JVZ4c0wrZSV6a2lkYzxGWiMlZHFFO3JtaF4wL2Q2OFZre2Na''@;'; put 'put ''UXBQW3thcD1MRF48QFVxT3JpMiluTCZSY0Q1ZFZHaTYhOEV2bGJdK0xrOUo2PV5pKGhMZXcjVF91PVdyQ1tOeERZVFBnPXVYSF4hTUMqNHhYLk54IiN4NSE7c3JGJS41bkB2Nm1LPHQjVCJDZEx3QSNNdkdSQ3o+fHVZOXBBcXshNVhKTEh9SiNHI1plRXNnUCNdbmcpPitoSzRnPH1hOWZtWV5A''@;'; put 'put ''TDlIeDF0ai5MaTlIfmt5W1JiSmloY1R3b2pJNzZLSVdMci5RQiJCOUgiR2VdfkJZfCUuKSFuVjYkXmovZ2JjOXskL2FXQVojbTFRRFBneT9LL1F5WTQ/Mn4yOS9aN3YrUkkiJDJzSEhkTXpzRytzRVR+MitgNUB2RmlCOWRXPERwIy9Eb09XZ3pnVz85OjN5Jk5+RixdQkBELCs6SlgiP3dGS2RL''@;'; put 'put ''d31nL3RndSRubmw3N25udkJLeiRTSjIrI0NXWks4KSxXaX5PK0wqSEtGaXk2ezAyR2Jza3gqXjQ8fkg+Kko8Y2Y9WWo0ZVMsd1VaN2VLcW1ReSEydVddYXV2XyF3OndaUUxTYHB0b3huNG02flEhWFZkQ2k9KFRteWBTc2tfbkxEUFM2Tz1oNjszbUhtcFRKUjB0Q1ZkNWR5O0FUPV4vYUksfWEm''@;'; put 'put ''dGpUekkyeFBbNStKbF9vKFlCVCxKOzxnNj5lKG5LIltqSkhKX3dpJHUqbHpfSm99Yld6blszUyxoPV5rfj8hKWMyeXdJRzhKQE8kOGI1YUR3fCVncyxWUE9gMys2SSh2KFZ0STlHdjBnclRnZFpadSRwSS92W2tfZmI7cEo/Tlk+QUpbZ35UUCEsOU0rNGwwZ1BkUG5FaDt1MzsxO1d+ekVSYTB+''@;'; put 'put ''UD4zaiI3e04xP0A/LlUiLnNVaWMlVUtMcC5KWkohV1BeLFIoXnhkSy5EW3tuRlZReSFmIlRDdyU7ZGEvNE82cmNnIzB+SXtzXV1ANntGfTIwcXo+VHRqIj4yL1dfW0FrOz5LWVppYCtiNXdFeXdpTHJAaHo4ZCg9byolVj8zP3U3UTc6ZyFAZCF2RnZwI2lWPCN8WkUyQEQ+WEZsYFJuI2g1NVts''@;'; put 'put ''IzAhRyM2LkMldzIsRnlxc2ZdJiM3WnRuenovT2Q6MFpie2x1TjtTc2RHdDRtJlRrT1V6SiVdLiFSQFVXJkIqPiU0ZmE1Ti9NXkNvN3lyOSNLKTYoTy47USZeSWIxL2VLZyhDL1ZmLmFydzVgZWFbLjYkU3RRR3MrWFhDakhiVUJ0REJ5RzpXOSNWNVVqI1dZIWpiODV6QzFPI20zSy5yWkpLbkgh''@;'; put 'put ''dGVAMkMlTkckUV8qRzp3OjwrVTh4PEtpS3FERyxfeTRCLE50STgxX1M4UG8sQnQ8MEVRTmUiJnkscHtQX11lVnklW2ByJXJ5KzlNKUNxWVVUREV4fStjYFF0VmN6Zj1xRCxHX0QvekUwOkpmeDteT0RjRDFPQHtGJHciKmxSSCNEZVBTJldAPmopTSZte0wiWCh2RH4rJXx3TEdiLDU8TFhMOHxz''@;'; put 'put ''fUk5YkpSdUo5KF5STlRdQFV8Ty8rVyo8PCV6TUhAbi9KKXxYM1opdjZ2ODwqcjNxW09UWDh4X084TWcpL0pQSWkxfGc8REBJIj1UYzRTVXM/PW9+Yl0qYl1bcyh8bixkX3lOcmM5QlE5dC8iNE9FPEdmVnM2Nnl9RyxBMSh8TWZ7WnIhY1FreWooWntUVz99SHR0ekx9QS42YDkuVkc0WGkwY0JQ''@;'; put 'put ''YWF3ME45YC5rR3ExaCo8K0AqOGNpfXpKa3c0KyFNO19PSjdJfUppRW1pTnAjIUY1ey8jV18sbzN6RFg0X3wzfV4hKylzTkJQW0tKaXNWMn5fYSNWR0Q9Nnc/YytWaTJHZF1GbGBoWnh0V0RMdDEjfiQsZzdGPU9fV3xwMjw5L2w/QHdMe1Y1fn1pbDBVU1V+Q2NJflk0fFouaFBtPDl1ejdJZCJI''@;'; put 'put ''UHEiZHNyQl9FL3gvUjlCJUY/JSx8W1NkJURJVUREejt8N2B6OFg5X35RXWQ5cVhFcXFHYCJRU1hIb0kqTkYrYlVWMm18REsqeUBoeUNWUzJDdGxwJFJZbCIiPzVXREdlLHJ8LGRoMi9IJXdDaVU2Z2pVbDt8U2NgTTNQTWlvLFhbTGRmPyZlMXx3I0VYN09hXy8mL1JGS08oXlgqRkFoZmhwRzZ1''@;'; put 'put ''PHtkcylUeU1dODVlWnBIMXN3YU1iWC5VWD92bj1jfEcmaD1jdVBHXWdxeldeYlNQYiNSeGtlImMvOGg8fF1qZjhRUX09Sis3b0dKR3RlPVtHaGtqWGBbQFZhKDk/dW5BYzFobi5zKHMzL2BQJSpFaSMsWkY1ck5aelhqWWsiRXF6Sih8cl1Wb3cwXkkmUyN4Pk10RXFbQFFbRmJnKEVHWk1vYEVA''@;'; put 'put ''PDYra2RxalVwK15ZPDF1ZWRrcVVGeVA/M3huakg9d0g3QjBFM2A2dGhmOWw+RDxaRD1UXSE3WCI8PHUzQ1UiZn58e3c7b01eUSRac0pNWDh7YWtKXlV8LE9GV21AfG5LSCJ3KVVeQiFKTio3NFNgd3oxalJHTWczcnU+cTtJTVBdcXUxfHhEP1lnayxxdyhUSFtvcUY6YGRMZntQX1gxQCNubH1j''@;'; put 'put ''ez1HK3A2NFNFNTYhYDM1LiwqX0t9cEJRUXkyOCh5emJlLkR3ZC57TmltdE1XIWU6eyNQMVE4PSRjTV1NODk1SU9LeWw1YF5GJFNjMzc+ekJ6TVczclc0USVSWig9JFF5eG5rajpTfCFYJX0xOzdKbTdgOS8xYlE5ZjJBIkFGMFtMYCRhUytfcmcrfk1IRm5GSzU1elNZczkhal9GMnRyNi5gNjxH''@;'; put 'put ''XUkhNCgxd2pEb1FqU04hI1Zybil9OXkreW1fbEFFejdkOShaekp0fmhPYD04X1JASnZfM0dJezYwWGBvSiUxIXJodTJ2PnE0dzVfW24hQ1UobURZVVtgSjtsfnIxNWRgP11gNUFEXyFRUVszZ0hRNmwhNGNOYTlAWnxSL2Z3PkJhb2hbbHtJUCopQCZDPiw2WDpYbjJXL3BmIn47KEY7cDJ+TVRC''@;'; put 'put ''Y2xxQChha2Q2MSFJRFt0dD4vZnB5bHcoOG8pXWBvO3tEUWUzTGsoRDcyX18qcy5fO091ZSw0PnhvVXlWSD0rakJJLCR3NHM3c20mQWklQFNrXjBbPzF0SSI0JVRCQHQxeUpBNF9IdF9zb0M/R3gpNVo4fTZJO0FrUllzOSE6IXk4NUR2bUM/VVA/NzVkWm98RD9pXjlEfEx2enxSLDg2aiY0Kmll''@;'; put 'put ''Lj1kdltnNEMwYXNabjBuK0IjRVY4XTBtSFhMNl5BJCNlKUBAMUxeK3goYXFiaFJjU0FXWyx5a2ZpQVpqK1Q4Ynh2U1Y0QSN+MUZGSHs+OGJTMH0/PV92M3NqLjE4JT8kKXZrWk5wfGs4ZWkpSSJlRC9NUjlBTlp9TldTSHhpcit1TDtRQF82Zn1wajV7LD10XmlmaFM3NjNTfDkkdUMoZF05cyUm''@;'; put 'put ''Yz1zPUdyeGt+V1puMXB+TSg1KnY3SXVWL1I8cTVUXz5lZ0xBNTB8PV57R2Q6YSRvMDdQc0dub282M09QRWI6eSNvO0lbWVl1PzI8fGtdaVJvZUo9Z10oWClUaFNBUHNtNnVjPDdDMkpiSHllfjUwZEhtMXY9V1ZkQTVSP3FLNjZbKjJraUt7bmYqXVgqUER6Ll53ckN0LH0wa2dHbDp4P3ssODVG''@;'; put 'put ''VDRTUVBmWzhhIV8kZSlGWGkxazRTN0dNdS9yLEheeGVlYmIxfUh7blg3bmQvbDBkZVdnflt0fHxgTFsvZF5dfEM7LGZpZCxXQ1R3R3xHLG9nfFdlM0tzXl4zdSg6TWwiRC5UaEN9YHwsKlhdc1kkWT0mYSZgZHlMbi82U2Q8ZSN+a2NJZDlXbVBjdTUreypVPDpxZmwwMkNgO3xoQ0NMQkF1N35v''@;'; put 'put ''JFk5d1QhVC9+S0h7TkUuO2x8cW9OVjF7eHZkUCQ/dyFSWHAvLD8sOUguJW04I28qPzdzd2p3LlFBYCRrJnFqeHVKUWpKNS4+SDB4Szh0fTxSJmg5WE9+ZFlZMD8zdUM0Xyl0alBjN0lLflJNM1Q6KnlNNXYxYlN7MikjeFp0MD8jQ0dCOnlkdT99XlchbGN2Xm4pXiF6KSFwL1hPdjNkWGtUUWo4''@;'; put 'put ''MEEsJlhgO3hFOWc1L2ZTPHZ3UmNmcCVDM3teM05pXzh5Sy9KZX5KLE5DNUV5VERyK1JNSnRnVilFKkUwd1RWUigyWzpzcVFwdD00bn5ZMyFqT0xyMDZ1ZUQpWGkzKWVVSGBXUV1ddHNWaXBkOyFjdGpPJlRRODskSm1KYEVBIl0iNj9OdDEsTC9aOmh7Q0BkMUsjXWJseTo2PH55OHEza09Oe1Ru''@;'; put 'put ''cyZSe3QqcFt9aW5GLDNeMXh8RmkiWjU8LltBcmNkUjZ5dXw0Lk9OfD5ENH0vLk58QyxSQ1tBbi4/Z11KQGYkQk01WUxLOVJgb0ZKLDVVSV9JMkJnMigoe0s7VkxjcDNFI18rOnIiIVY4ODZ8aDRRIj0mUWtWOSg4QF5ST2N7V1FNSSJGZ11vMUEyZkxnPXgzTig+Y05+K3hFR3Vwc3pbLjtFamc/''@;'; put 'put ''RHNrdWV5MSZwZSs3YmgwLENTLGw7NnZ9JG9VUGsuM1EzJXdgdTtCSDpHS0VTT0tzQV1oPGlzejlObj1WRURHKE9RLEVTWyUlUEY2JjR9NXlbPUJKSnc8LkVXVzB5bFAyczIuQ1ArYzNqKWx0YXVjbH4vTHE2RTRyNmZrbjlKZDNCLjd1cEo1aDRFY0l3NThmNnN3OGRyP3BPYixdN3JOPj1Sdl1R''@;'; put 'put ''VFN8dlpAKWBKcFojOTI1PEh8K2I/WCI/ZnQ5NUo1LmtUMDxNYyxuczdUOz9gKiYrVFhmdmMwMVdIeVVIUU0rI1lQW1M1QE5UZD1CWSYsTGl0LjB4WUUxOkpaPVUlbixMa1N6eW92cnEwUHgzckF0ZSxua1ddeiRPWVJ4Ln1+fTZdYz8xW10xK2JUZFZ2SHskalleYUM6REhHQHk4OypAMjsxJD9X''@;'; put 'put ''Mz9DajNBTzZCJW4vbj4xSCh+YXghQ2Q+Q1pYVCJjOCwxL3VCZTFNd3NxZWMsOS96UygwZ203dU42WD44XjAqJERDSEEvN3Z2UG9kcjdMakdCeyUvaVRgUypRcG5yXnY5UEtxODNMWG1EVTdrfjQoQ2leWT1NK3ApdS9MY3JCMFpOPyhiOHVTT2VoPnRVfGpwdVFYXkQ7eXg6JD5+dSNGP2lNbXdj''@;'; put 'put ''dCxPIik2MFkxMmA7QE0icGV5VnwkRm8sdyZxQmwjbTE2IltCdVpyTykuVkVdQmRbMTg6RSR5NWp9ayxbbnVrUD8hcj07eHhec19IRW13S2szfSUsT1RxT0ZtNysrTWhYKVBxPV83WEg4KF45MUwiZ1E4MT52M2NEQCQ2SzhGSTpnbWA9SUgkPHp0R0k/UWx6KXdUa0pVbmg6K3lAYGJKLjBPfjxD''@;'; put 'put ''W3BGSXp5RVhuez07TWloOzZUOjorYHgzI0ZiKX41WEJFbGVMXTNbQ0lqNVpkcUkzJmVPcXVyfjp0fEZfMCpBQ3w2W35xJWFtWUY5Mlo+U2BxOnVdVEJnV1h2MT5qTU9BZHchd0R3YH1JXiZ0OyssbDlTNUdoeEpTSVRKcylZW2VlWnlJSmkhJktYZnpvZFYlQ1RYYSsmbmA3Oyx3NTEmVlZdPDM5''@;'; put 'put ''NTs1X0pXaUlJVUJlRWtlNFNnImA5fnZ4PUJaRmQzRjc6O30veCZDXTluZ0xUT2ZAcmxHRGF6U3xKcCJyPl5UfWVHSH1nIilXO3pFUnJ4Y1VxUGh7Y1BeSlZpSGYiKyI9UkJkJGxGelJXNU95XzEoMSROOEtgWlUmPHMxRGU1UnFAd3V8LGJmfGljMG0sKDE7TCghWHxRXy5bZGhPYTNJRTgsbilQ''@;'; put 'put ''OCJBciVQdz1kOnRrXklteyt8Yip3d1tGZmJNSWdQY21uNWZVW192KHAoMXRbUTx7NUdaaig2Lk9jTU5UcXkkTy9qRnltVGM+XzpMU1FBP0ckKDU8NHg3IiNhNkE8WzBpYXxHRjxHZ1pSL3JjbGFLZmVhOkYqTU9qNTtCTiRhUj4xLEsxKkN9S2lJYHswT1E5JHpDbzJQZGlJVHtfLlVVW2gvXXR4''@;'; put 'put ''VDVPQiVabHRCIVNXZ1UjV01gPzNBOXBLdmZlQlNFKTdReVNUbGtJQnVFVHlYPixjQCgibTkoJXlyNmZAfnIqWl4wbj9hdExxaFdhJipJQD0qKVhIU1B7cElfWF0pdnI2NEhRSnZYS2JlMnovfXVGYUQkUWslRyp3fUxfcjJXNnJDXy83Yn1CamNnRVQ3NX1lI3dQe216NWl+TDZjUS92XyRXNzxJ''@;'; put 'put ''I0cvY1VKWSJJaztFKiVmRit9VHJUYXRjUl9tL0QsVipJWHowQ1lnQ2NDYCY2XVhNW1pEZz1CV3xMSVtLIW5lb1F5W2lFMj47KE57RCZ9clIjOSgwe3IkNVF3amRjMTtMYlVLYSxPT2JjO2RBWG53NEV6VEM7I0trT3JvVkRATUZgOD95RWBvZWBfKGVPTU88LGYzNktHWU8mMXB8JnV7JCouTm5o''@;'; put 'put ''bj9Jc35GI29+dDxHX3xvPVtraSQuYmo0X2x0OG5QaHFlOVEzWz09SDJ7WnhzXys+MFlhYDVQOmcmLHcqLiozVF90bkYraS5GJjZDaW1bN0U9R3x9KWlAI3srKSRIO1k1KVdtZ3AvQ0YyYWRCW2M0YFFAXk48WGdRVSZlTEQsWlZCQz5xdjFxXlBqYFRUdmpMKHlqZnVbdVs+S0dgcGojR21VVk9z''@;'; put 'put ''N1IhRUVnfC9XW0NZOSlGRihKIU8kWi5uKyhlJVNdbUpIa2Rydn4rdTRVaXJoJGlXSC8/ek4yaUcpYkhYXmUpaVI5QXh9M0JIWH1rJjkucEEiflZOfmllTSVHVEZwfUBwYVhYaTZ3Kk5vd199d1o0UlBqJVJIfTIkSiUwfXN9SDU+Y3U6VH10MVFWKztiOTA5SDlWR0ZCVCsoIV1wOSE1STN3eiRv''@;'; put 'put ''NlhVNzkxeipwNilxO2tdXVtjYmlnUHlrQDBXa3t+O3d3SnpCQFhgND4/IkZhW2IrUig2UWIjJDJgXXd8KmU/aGdTfihLYG9IUkkhL3xMUHBwa0dsdGs5fDY0MS5pUHx1MCFPSSVxN290NHlvJXQ1OSw2U2ZZSTM2JFg4e2QjRkNQNERLQisrakhVVT5rTiQ7NVZbSjsyeEVfQV95NUxIPylLIXUq''@;'; put 'put ''cVlqMDd2RGchcUJRZm02Zz1LVU1HfHVkNFNFODtYOj8yIkExLz9NUlpIXXteYHYwfHx7MDxoL0ZtMmJfQjBVNktba0UuV05eI09tN3g9YCVhNTNZJXdGTCFwMC9jYDFlQmE7RFEreDYwZiRrdmUsOU18PTYoOitRMC5bUUNra31jQExiaXA6ITdDeFF2VUIxJUMsZnw9c3s6KitKdn1wYntlMFhY''@;'; put 'put ''ZEtpUCImOzhLM3k0OjxSYyZNJTlwUGFCbVlgS3p7MF8uWGE2ay5hIjJjSDMsOVZhcD4vKzAqaWBsZVQ6M2RoR3JQPXd6TXA8dUQuSUtwYEJoP3VDaWlLeytLQkMiP2RgWzJOfkc2R1pFaSleYi5MNXBVIk9aSzJ5Jk1PSEppKEA0R0x+Jko1RC9PMFo+ZDFZXVNMSUA0NmgqNHJ6TUNmNX5uN2Fr''@;'; put 'put ''X1h4M2w4bS9pPEcqa088V1tsbDI3YCEmXmw6RT9WY3UhZT9hanE7TXdNLyx2YnNtImZuWUglJChmQGJkIzJkaDBGdnhCYnIzaDxCe0k4ezVaWWxRKFYkQkQhZyMkOSh9eHBWUj1hUytsMkpaKiJOdXk3P0U/UEtPcWBAKi5wTnNAT2MiVWlLYll0QnEjTWJdIVFPPyxPaFFuK2t5UUR1c1hCNlox''@;'; put 'put ''LlQyIz54YT8ieGRkXSwyeCg6SW5IcyIkQ094dGVeRVl2ZHdnKmpuND1GPWUjODViPUYiakx2Om4yclY6ZERHRE0jW2xdUkdfKHxELztSZkRpQlNHRH4kTDBhXWRGMnE2bDJJO2pkQyZDLGh6XmFxRmA5TTRpb0B0TCRoa0JbLEhzNVFybl5gekVFX3gqZVhJUE89fmpaK0cleWpUYWJFcz0mdT9w''@;'; put 'put ''O35XOCtfJGllO3lEdEk1PEI4SWZFcWNLNFI0NnM4TDFgVnVgekZOcSlISEsqbDteZjVTZVFZTUlXdSY8aVEzeW9bTnIrJHNfSVB7eDAvRzM9ajtEZWlxd1p7TiRKZlc4VGthNXx6bHtDMFdMfTlIKmgpTSFEeCtLSTxLb0FyJn1HbHpBY0VOUHc8P05CT0wwLCRFJUxNNnR4RnJoLlVVVnZqelY/''@;'; put 'put ''cW8+NitqNkpdX0crfF5SQE8mOEVOX3B6K09SdGJUOVYlZnB+S3VWX3Bfe3p0NTslUStEaSNaPU1vVTdEcXZreFBza3hEZzhabWRvXiNMJjIpTldoL0hafSRNY0ZeTXBDYFgmNUcqbDpDNnVrfVdLOE9WSDU2LkkoaGppdGBecnMpIltwcUN5U1NKMTJvMytJXy5tQl1bKjR4QzRuQnZqRHBYYiEp''@;'; put 'put ''R3FXcl9aOXphXWBIXkIlbiFsK3g8ZHpxKG5dSnl8ZXZXdjskdStyeEdldmp6K2N6OGdGOENAYj1JfTZjPG14VXwjfVJ+SWYiYl9OQD4yekd0TWBUMmpGaC8kKCx0dXAuUSh0SmNITjR7RiRpT3JkMylOOmRmSTtZelFNMjw+U0tRUDNdLGAjR2pAPmtseiozbkFiUyowRkFGbiJvRHdRNSt7Nkom''@;'; put 'put ''NzwvcSR+byZXRCM1Rnc3VURsMXluTFVsP2IjUVBEd3M6UDIsbFk4JVoxPjAub14sQ3c3UGlkOGdhciI5KWxzY3cuWk8hQmMkenspVDlzLCsqI0wmWCxtPyVDQTJedV8jW1l6Nll8N3BefFFzM0pqS2poe3AjN01UfW0obC9IZWhiblE6anYuUDp5MCtJbkhXOjdKIj9UbEpIdEE/Slo2RnFpUEtE''@;'; put 'put ''UDNfUEhBNUA8XjE0enpYL0lORVN+cjJqcWZ2TmdXcExYckpSaDZ2YkgzXmZLaUxVfWM8bkh1bl5jdSoqR1FKQ3dWPWRZVT5iTE5hJWd6W15SLF8yRitCXzx2bl01P352UFtgME8uTm9hbnwrRSUrNX1ta3x+ZjdsZTVCe2pMXVkpJlZPYEs5NXExLGt1UEYsfEFFb3RjTGBETkhmMGByTTReZFhK''@;'; put 'put ''OlRFRzh8RHIsJjRjbFh3TSJ3Qn1QflFkblhJbilVSi9TY0lsTHVDZHJnIjZpPShua2FjY2Ihen00JXd9X3l0fCtCWWMvSDl7XU0zPXg/ZShWJF9uSHkoTDJKfUFFSHxWbVgwPW99W2tnL0BJRmlEaHBwdCgwW0F7ZyVAVSxiVDsrMFNPckdqKHFlRWAyckdgXTxXfGpNYEltUlJRMF4kPipNSm0j''@;'; put 'put ''WSNwfjQuJls4SiRhRS9MZSpGQF1jUWo8TmsoYjtwOytrd3hxSFNiK0xxQStkSj18ZD1QYyVjVHU5SSxjWitQNEV9ellybUIkLE9AJTxqP0IpZXgoeFtYeTwjTEFBa01QfjI6VXh8Ql16YEMxRT5HIWghNWg0UUQ3OVYmKkl3PSEiYEp8SlQ1RyE7RGMsK2BoYXNBKUZeUzsyIms+UX50THdDJWFn''@;'; put 'put ''PyZOY0x2VVJdcX5daVNpbFl9UitOKzJRRlEyOElzW05nJXAqPCFzXlBkMUx7anNqPjFjY2o1UmRYemosZCZHc0Q2IUZCNEU1T20zMXFWaW5sI2cuOipXIW5DfUIyV0peWW5YZmVGcGJ6ZmxlNG5GIixbZjlxIktPZzQwZDhnd2J9SG43ZlkpZ21EWTN9PFBfckwpOXZqWlk1MihvYj9iZzRhZShk''@;'; put 'put ''OkpqRlovbmpZL3FRRT1EWWx6QF9aVCI9K1I8bnhua2R+UV1EM04mVHtVck16MntuKiFSLyglYkg4I18iS2JgO3M/XXw/Kl5KUlpvQkxKMSVKNTYxIz9oJVoiQFRBX1AwOTY5Qnl7QyEwckJgXnlkUVdsbXk0cl0veWEsS08kK09BMHRsfExMIVl9SV0vRXhCfUdLQXFlayxMcWB9d19zV31TPiFL''@;'; put 'put ''JSF8ZlkxN3x5Zzh9VnI9Wm0kPm1JbFF3NiQrc1JuVTJbZjZyYWElfndGb3VAZThsMmV+bl5edlhbdEolLE0kP2trdnd1YzhiQGc3dUgjdHZdMFtCYD9iY3gkJUNmPjlqbkozV35XbzdEU3ZvbVZYVUtLJFJIJEVUSHUhISgjeHI7KkhQbjlQI3g0MV1iT0NEOVkrYmZkVn5MOmA+VXdJbVJ0LE5s''@;'; put 'put ''fShNdlkoZ2puMSlUP2RgLmAoeD1XbXw/PmBheGNdUT1zUWBjQ3MqRFI2fkxgYUdjKk0kRDVuMEBFUS8yTVducHFuZl8jSjo5TVcrUWFXamNieUY9Iy9hdnVPX34vMkRBLEdNOSQvej1wOzApUUM5dylpUSo/Zn1+eF9rLnJOcmN3PHN5Ym1xbytxWFdbSjw5eXQ4a1Zqej9jR1AyYlZwKXpPOnFA''@;'; put 'put ''TEYuKzE+Nj9LLzp7Jmc0ZDpnYFJ9SXVAemtMSzQ7U1dndyxITldtUWVnTm9qbzFqZnpSUVI6cTxafEFGQkVbPi9ydjYzc15mPUxMLEJPQXE3Uz1GJHRgQGouRikwayFCNU54aSltZSh7KyY4MD5BZ1ReKEgzRShRVig0TFR9RHpIcyJGLHRMNVY6SHssT0BXK2ZiZDQpOzNAQVpsSHEySz9jfipb''@;'; put 'put ''XmdGMnlAPjE2QWJnYikxQkklbHhnQGlNajdWJjdZVnc6VUVjS2J3eW9PMXtfQztMV09vInsiamRzMHtER2ReLkJIPkRNVWt4QixrISVYMjhveWtHKUspditeWXdVd257PipmPkJ1TEVobmdESUo/dlN6RytjNG40clFFfig0b0JOYUdrS0hsK0JTUGU2W3k4PjYyRFp0TVdUZy9yVHcsbi5aLHcr''@;'; put 'put ''NnA7L3Z2dl86fVBhTS9OJTI9QCRSVG9oREJpQ2BOUSopK1clc0B7Jl9XfT49ZmJUenA9e25CKntLMG5NXnhtYVVlUmN6SSlycT17PTFxTFlKang3fXs/QWEjbHJgSlFnO206N010XltHXnA7O3ROSFFOVUcqdHNpb1IoWX16ZFRSZ2RbNXUrWndOTmBdVigzX15PPUdhTHAseU5uaDl7aER8S2lJ''@;'; put 'put ''RUlgMmZ1S0VMMChmZnMlZ3Z8alI+T204WEYlaEU8YCwkcjZFVHImUlVJRD90d3lYcFc4bmlALHNMUXAjL3s2OyQzfExqTztzMkNMZiZvIT9ocjs4b0lHc1ZCaGVlNVd9PmhXQF9hMCZae2hwfCRrU1hTfWR3T359VEovUHd1SUcie2d1MVpEeCs/fjlOc2tLY31sUkhYS0h2cmM5I0lVPX57Yj4w''@;'; put 'put ''P014STsxQTFMY0dmMSFOInxTfXNNNHRzY3xYPkhMSjosdCpeNG9rbSIhL2xhVDMiMSEwNSlsUFBgTG94O3lIYX5SPD0jT0JYWWI+JD40YFlLaypUe1dPQyVjUntIP1pJUWshVldfbWxpYVs2LChjMDt2VXNKPWl3QGwoUCJoOkdZPEFzbjVKYUEmRGRrdl9iI35XMVlyNHxzL0U1bkl3Ol8hNXcx''@;'; put 'put ''KT1mXXg0Mkh9XnQyWjMyWzJlVzd5anVjemNPdi5CclZuTyo5WWssWV1oa1s2Q2UoKzo1WFBYUk5fPnh+KywjNU1VPzFHJUxfcXd5cF4rOmMkKkN6dmViMW52VU1PSTFzLnZTbyFmPTxeY2lSfEBKcDdkbEp0THQxWEM2KzRHOy42VCl8VC43UnU4ZnhJQjw6OCVbMyNyP3hCPCVec2NrVlN4TSZ1''@;'; put 'put ''bDtkaUFleysoayZNSyEjVWtLSXB3RV1xTVt1VH0wQVY6MkhKbGRJNkNMW01PYFd4cF9UL24+bjg3Tlt4XntbPmVHVzEuWzdVOU41PWs9QnV6dH1eMjowcSxbZCRgNipfaixUOHZUSnE7dEwmJFZOYSZJTWk4Vm84fSRMKlNUcEhJZUR8KF1aKlNncSMmLDtxMmV0Wm8/ayEiQXYrZFk2ViJUVW1+''@;'; put 'put ''QmRZQDJETz8hXUpjTGF7e2RPJT96fSl8eipCODZXYlF9ZkNjKSFYbTIzZVNAcilFUkRRO2IjST8xM1NtSW9NMHdiR0ttPkpVWVBoRH1DLyJbOGVxeWRdUG9gUVV0eVVvfWc9InxjIV9aZkdpVEBYVl5Nfl1GNTlBKykhKE9saEQxZzNPPm9XK3hqbkJQRSQ9Ojw9ZzE+Pls9alp6QFtzRkkhdlE1''@;'; put 'put ''NEVqPEkxQjdRSjxteSEiWG1jRE5BKWBdWHsmfVZlZm48SlNRLDs9UCxNXlY7K1s1aitGXz1YdmFDR2R8OyQzQ0N1SGxVKj9lKHRPWT94MlQrMjdQP21saGk0Uy9qdmJIK0k9JWEsR3MiP0UsYnZrIzlkJkdUPERwOXNqZFF7IlteeGJlcHNAWXZUOE1kdVVRdnZpbkZJJTlZP1h3eSQleiNgKzVn''@;'; put 'put ''UURuYDQudGNPYmAiaDpHQSxnXTtQJiF3ZjNKJTp+I25oJmolbXpWQTdjLGlaKWQ7fTdvQCx6SmRDOkZ+Tno6U0NQelE5NGk0fmU0KWVbLDpJWzdyeTosUGFpP1NLanxOOU1zVmJASj8oWWdXQTQ2YF1rYDMrZEAmaVsjYExPfXA1W0ZJIVcubl5AKzt6YWl3e2JdYFJ1Z1tsLkFBQFsxXms3OiVL''@;'; put 'put ''MWcvRzt5UGJEXS9QRkBSQywycyozY35NJFRVWiZEL1dFZHJscC8lPntWciR3Z0NkQmxkbyw1Xlh2d2A2I241M09fUyM4NCVkVDlEZ1teRzx7SWtbVk9bPVUmJWRCXTZROHFlLnIwLzFEQG4qIyMxSk9xWVl0YmpPcEQ0SmxbSF1eOV9XMXdVQntQaDFmTmEiWT8+LGkrbT5zZkdPaVArJjpxcXV5''@;'; put 'put ''bkxSOSEjNHJVU1UsbmclVDghNExJJlpQPy8xRi9CaEhxJXgsV0BjaSFJJlQ8cUhiPzQ4W3BKejA+anlISDF4UlZoLEl4MFpSQSFNLDBNQnF8dz17NTIxUD07MXEoRGlobWR7Kk9BRHVtSD9seGkkMztUNUlHclsrKGFpMnZxWXFqSSFobl0lPXleYmssUFVaZWQjMVMyPFMuYld+P1txTGZQbHVF''@;'; put 'put ''RyROIj00dChQY05ESGAkUktVTm9IeXo0UkdEVno2b2FXcVhuPClmeW1IMD5YJCNQL1Z2dmhELGolZEAhXTIoV3MvMj57TTt7d1gxc24pIjt2LzE3bDkxKG49UGlCaEhvTFMldXZRZnV+U3t9eiZbZ0g/PWRLKW5aXiYqWylyfHZra0QhVWNFbDJ0SW8lN3EiQFI9eGMxUmYpY2VmMnVVfWxkJCgo''@;'; put 'put ''ZUlAN3NZTEdXXXhqV3psKjN8QCwvWyxmV2dDMmNbSFMibXMrfkVOJmU8SnlNWShVOSI6KCV3NEtOTGE2M2B2RWRtbjdsOiU1TlQ5JmdXeFhCQHB0VHM+bXc5XThpN1E+Z0o4cl9Ma2RdeDc1SFRaLHloQSxDTCt4ZF58cHtxSnsyKUZiTElHZSYwKWx3eW55KSJtQlpHS2dZOGtdfVBmTW4wSUNL''@;'; put 'put ''KWhmbTRlLjc2cnEoNkZnMnksVHQmMltSdlY2Rmh7Nzl8Ryo4SyVld0QwLHF7eHZbTE09O2ImZUFbJXJAOkBHPXBkbzkkJCxJe1MxSU4rXUtEcVVCRFN9Mm9fczxVTUgzJEMhYUpvSi9ZYzhifDV6e095bGlhLCIpZ212MXgrQVZOWV1+MjckIi5EPDIrSWI6N2lUc1hMZzsyI1pEI1AlfjJtYk5X''@;'; put 'put ''P3J5MXZBTEMqLl90e2lMPlJMN2w7bTFdPyZAOV9SX2gzJD5wdnt9amF6cHtJOGRnJCUuKnglbjtsXWhaZkEoWz1CSDVWX3QrI3dUfk9xezxMWjdbYCtsVjphdlRSdS8jJStpUzA5TDo2LypEPFRrW2Y1NzJqQlcuSCVMMGQ/My5kVXQ6XmN8dUdYX2lTS29uUyxUKT9TTG1ob2AoRjYwWFpKaD1w''@;'; put 'put ''SCNNOmI7fnVwcF5JKXBvPWl8bWFZaVFKRCxgUzxUJHk+UGdTQ08jXTx2NTRjVjx3O3VFcHh1VGU9JltNJWVQSzJpbzBuPTpkJnNkTVRFSCFjTntII3k3XnlFPGMybjV5fDtJQztxblJRUX4rR00wJGFGelFWWyRicChsb2FZamhfMjIkcUthWWh8OXlLeWt7JndNQkd4ZH5PYnYvR1IhX2YhU2NI''@;'; put 'put ''Qmszb2FvYGx7LFRoYlJgUWA8VSxjOEpRXVRpczQ5cmhoQD87TywrJllAYDYjU3FXSyNbOTRrYWJqNX53ai90eFldaChfXjViQWpJcyZOU2grRERhOm1+cVltXU1OcFtYakQva3loIztCTFN6Rk4qR002L3ovIzw9e1skOGx9WTpXVDEzTUA0RGokb21jTlpkJmtXUFUxPj9jNGMiPmQkYTA/OUo+''@;'; put 'put ''ODUoWFNJdkF1Lm1zVFJVOHVBSlM6QUBjamN4fTkuaW9tcH5uKip4bCMhblpfRTljWkFCP1g1O01tVFJQJU8kcCYkb18vW0xsaD1XU0c9RDdtcCV0VCFXWXcxXUVscXJNMGdZJlMyOUleRSF4VlAuTT0oV21FQy5Jakl+RD5mXn1bKEoyb2tVbXtaIzRmNUA/Q2c6KzJgWTZxJj8lO3t2eWB7Rz9G''@;'; put 'put ''JT5BUzpfRmFZIzVgOU9gUTsqaWJiaGNgaltzOHxAJlEoJVFrfm5AeHwsMTklLDR9ZFtMSVk4c2pDYERnUGxKQWdbWVE0K21tNGJ8PH1TJG1mPElFV05DKElMYFJ5JTZNLH4sJS5CKClySl16KHU0SSVjPFAlP2RDX1QmeHV9NkQoRlMsV3AkYmVCakplcHghNDNuRGFMLj1KelNUKUB8WSluaT4+''@;'; put 'put ''IjNLd1RaaTx2dV5OZ2EoUERiVTZZIj1WWnxtbnttOH1SVj98OV5fRE1HLDZOLGw0QkFOR3Y/KylLSCo3Y2lVe2NScDBxV3tNTXcoUCteOyNUfHpWPjFIenw0YE15byI2aytgTkUpPG9nRFZ+ODkvK01SMldGPiU7bVpJJDg8UU1vUTJ5OUgsIkxPUF4rbkwiVExjZT1iJllfKVc8U1FkPy5vdSh0''@;'; put 'put ''blYhSjBKU3A/fDZmTEsybiI6MVBAfSpuPGJ4aHN3YVtycn5VQ2svPnh6ZV5uOChePWhuUnk7eHNtRGBrLzI/bilCQnQ6RFhRPFgrdm1YQzphTXBidk1eTkhEdHhCbnRkclZdUjVJayNVLHpRTUJ9QXk3Rm5xYEtLOWEyMU46UkFMajhAZn4+JXtFaT1vYzlTZWlEUzxoYWI6S1o2RDIhbkldQC5p''@;'; put 'put ''XiN5bEdLczc3UT1nIkUsOiZVQFNnL19DTn4sXzlZSVYiKF1JNmZESnE6JHxXWDwvJGZoOihRS2lESjBXZSkjPzJaKyllOyhuVCJlOiU0I2UlbChaIW1IKGJYUnQ/fis3dTkpPDtIYFNiN2sve3FENXpnN2YwSls8cFRGeG1Ie0Npdnp5e3ZvPGAsQzlrUCJQeThqSFE+fCs7bD04K0lKOVMvR0gl''@;'; put 'put ''RD9AfTVoXXR0Vk1ZNXE8PWNHaWBpN35lMk93dlFEO1tWMXYsTz1GMjJqUTdqaEJONTJweFt9VjN+LixhJXQ6ajp8L11zKiQpRkx0O1ZiL3B6ejY5MHVXVzAxa1cqKG9pbihpQnZaOH1kP048eyZZVld7Q041eSM2Z3xxK1hHRSFucn5yZTV1VDRBPU5vIjsofHtUXU5wQDZdOnM/RkNpYDBqPnUm''@;'; put 'put ''cUxHUiFLaCxgT3tPYkhUa3ZEbHtCdDQpPixKWnpAPHJuOHdiQ344Xk0uXkB+aClIOmlGT2tETE9JVmtWXVRPJEMhZS5JLlQ8dillZVdQciRWLFRpX3VicitWQktQTzJGeU17NV9YaE57LGgiTnRDOENsLD9LPjo7UCEkMEcxLjR2clA8T0grKX40YkpFcS5iO1pDWG9OIiJDTk4sMnc/LjArTDc3''@;'; put 'put ''TkJHWmkpflRRPltOeF1qUHwhJGM4bDw8TFMyI15YcUk3dDxqRERgNUNNSkhdVylxMlpDSXBrVS93W0EpfCNuPlc+TThUcDFFXkIkN193UjtWREAvVkVJSEN8UiNCPipLTVM/T3l4UXhTKE05MXxhQCQoYmxXKjV2dChCPkddJX5FQX1iZT5PVnN3MHc6STpvVHV6IldEeEpgc2lFIT9XUCtEdlo+''@;'; put 'put ''NkViNyh8Y0N8d2RGQ1tbYllfSE8sak9rb3RPcXUxWFsiaWUlZEc7MnU+a3orcWxCb1ZSPlltX09ZOENMSShlMTNFJmAyJj9uLzU1aTorXVJZZ0lnZWxrTW9hZ1R3fmtbcz9MMjZvfnJYYm8xPyN1YUsmb15LeS5IelZDUHVwd1V8YmUhPk9IRy9wb3gkZWRjQSVWaGYrXzgqJCs7XXZXUSIhdGRM''@;'; put 'put ''SWpqVFRxWFpLYlYlKUk8SHVCWmh5fnx1S19rU2VFZlAxMEp2WHNXXmRJZ3xYVH5TJlQsSiR+KkZwSjkxUFNMXURMKls4LDBmJUVmZTZmdXp0UXcsNEJCQSo7ckRjWjFRNUAiPkgkPCRnVXpXVHRMTTpUNmIicyliXzNFU293ZFQ2PF9yMkBZcnwicHtXODhuKjlXJWQsW2AmMXs9SmY0blJVZCNx''@;'; put 'put ''InI3S21McisqJmBAUyo3Klh4KnUhdFhobS43RlJ0fH5MRCZXb3BALntFMDYoKl8wTik4WG9YVl8kPHc9QEtxO1ppdXcmbD5wUzY/OCh+NypGSXksPFZtaj8yIld4dHZfPiJJPiZVLlVeelprKFE4RW8wdk5yZHsuciUrTyxbQTQ+NF8kOjFnXVZXV3lpSV49a2NmKD9ibjRSN018KXV+YURMa0wx''@;'; put 'put ''d0x4akc9QVpIQUF+QCU1Zjw+Wm98YXdTLms8OUJXO153LyRuY080TV9PM2lKfF9ePCtNcXVGIWN3YzE0OSQjLkB8bUludXZsU2AhTko8aGNrUW5mQG5mKT0lWmlbMFcpNjwjXUhUVjEscFtPMFRvSl5pT3l7WHc6SSQlMSF9ekMmX1kkUH4lfD5OT14zQVFgcUE5dSVRVSxjaENIJFJlQDtpNCxA''@;'; put 'put ''fTBOY1piY3FraF5QJSgwb1k5NlNGS10xezBYelRSJSl0Tlt2TVYpY0FAdXV4JnhXUWZlNSRNeG9hSD1IYXEvXjZCJVdpd1txYyZ1NV8/KVBNU0cpek4lJiE6YHBoPlg4VHl5X3xFODRGZ2B2eEp3dS5hJFs/QE58O25eMVRvK35UQEtkeGohPEMoMz0jOi9PJDhCWTtiK1FJPFs4ZTVXT0RXMHc3''@;'; put 'put ''U3hVcjR6WyVrWjFOemB4IWYxYTUzR1RLaixpUE0kbyw/O1NiX0I+Um9SSkAwPl86V3VHOmt5fU5RLEpjMD1TTVkmd2dbMUcueGVNRWxCUF1XMXxgW1s/VV4/Qk9RQnx1NVB1MzZvTypIYiNheDpgfU1OZTdQN2hDY3tNSGhGc3F+d0pNNCJ7T2F+YixPUiEyWkV+cSlMK019NXV8c0Y7dF5wdEVV''@;'; put 'put ''Qz87WCk4cDs/SEs3JnksaU4kZzdCKlZhRjd3ejhkX1dgTV5XQVEmMm1NS1dhWVReISgyLCx0emdbaDlERFNXVEM3V3RoTFY2UTdpJiomSytFRyhnI2Jdc2JMQl4mQlo0Qzw5TVJ8bz5YKU90KzBoRV10OjFLb10ob1VZKHxgOCw7cXssJnM8Q1RadjElZUtbViQyMnNdLDBjQmpEXyxDKkgpZ3p+''@;'; put 'put ''U1hyRFdEQWN8Sz1be29hcVI0emFiP1BdcSJLZGd2PT9JdzlUcShFV0k6PEIyVD8+LFU+cTY3dERlJlteNkdbQmNRYVEhK1JrQ2cwYUpKVypDUHw4em8qNjBjWntMeXFQVzskdmxLW315VHl3TXliKnRCNm5TfEU2L1laTHh7OSskKzQ8M1laTXM8QjxJN115OCsoSGA5UE9be0MvMSIoV25rZV5y''@;'; put 'put ''XWBEbyZGfFg2T1cmTzsrYEN2IjxWYTkmOEldJlJMS3A+WVAvWFcuNlcmVWBnI1RKT042WlJUUDFKQE9SJkw3fG00IW9jW2RjdHhRIyhHWVhUMlVaLlMsQlJTYFBmbGB4ZnJoImQ9V0FwXjZRNlhPKygrdjtsSjkmQ0M/Yk42LldNcC5ARFZHfFMjcWt5M3oqc0xXW2dsTSF9bUNRT15NaVBbNkhR''@;'; put 'put ''e0VYbnhrayRZPV1sRWNSXnM5R2hoNGZqNCVPNTwsQldRSCNRMFBwPVFbbzBDZCh8alJWZyh2NShtODxjdVgiUTRFdSVKcDNzTGhxNlB9KEFBSXRdXno2M3VbS1BPdF0vPnIkRH1NX3xaOkhOeSkxdDQ/Skc+dEA8RHM+LFJnIT4wXUN3cTJdIyxaaixxKUEhaU09KlNUMnAjVGxbKVtbRyFZPkNe''@;'; put 'put ''eih+REV4cmJ+MzhqIX05SXFtbH1aWkxlZX10WTU6fm9TK3t1X2M2LjdQKj1uKGBiejt8I0QxSEFhRD99PHZEUllzNzpqWnolRXM+fmdHXldsSmEwZWAhWlpvUnw/JUVze1dpL11aPi9DJlUzSEZhaX47OmRtbHIkUiJDcCRubHIkdnddY2MsRWBKJUlhTU1ObVFAZFUvcytDY2VzNV1tNXxoZFIs''@;'; put 'put ''KHVpTCRyOj0jI0Z4WjJKSXdkTz9bS35WcGk1REU2K19JTEJId3FXYU0vaG58UlVSbH5XX0UpTTQrIkYxOUU2dDFOKUtFbCs8MXskIklUMmJqVWYiaVBWKkwzOEtOIXlFUjJwblsjSGteIlA8KXxJVVlufC9jZihsPSVbUCFfbF9VWE1DfnFxMjxrN3FxKD5kKUw1UUVWIXhDZ0J3OGI2aCkrVWh9''@;'; put 'put ''MWh0Ky9wN2x6TXtkZjAlYnRpOGNZXzNeJjplL25IbyRtUDdQaSh4OjRpKnJQX3Aua0MrWDB+YnIyJCNqU0daO20qPXwle0g5ck1fdzdOTTRVJUcocCxoN0I1ZURVR15YSW51PyN7a2E1SSVoZ0ZxVTBYVyt5Ji9SZ2JpYWxWWnVjeVEkfGE3ITBGRypQdmZ6Pz1RaDxpaTleZ1h9KlU4RGlXVWpb''@;'; put 'put ''IyZFJnd0NSR5cnVnY1lURUoxenhNc08/RERJUF56MTBpRCRXd1E3QGRNVnx4aHV4RWsxZDVYKjh3U2RdNmV6VmZXJTZQSHRbRl1bV1clOzdvNkg4M29obnhNWVRObDFpK0d5bnMsVyhfNW98KDpqQ2k+RzVodkI9flErKH1UJC5wPnosfHQrUUtSSytJWExmPF9fUnxyPlpEQHg1dV1QNEcsWUAp''@;'; put 'put ''RSI6fGVPV2F2Xz1tQjlDRnsxSVtQIVpYQXIlMEpjTVRydWIlQzJYRkMuUmNzbk1MamImP3Q+RGpWRE02dlNdV3g4fndkMixSbVJAU0t+YFNUaTBuTjxdXXR5fUJDVkJ6SURUQlNvVSYmWnFdSVZIYlQvOHZnNUw7eW5tcSh+Sj1hVVFBbntuWGdHbEQ2X0dibmRnOXssZmsiKEVjcHJBLFpKalMu''@;'; put 'put ''OFE9U0ZHIXdZQDdSTFpeWkNEOzQuRD8wTlBzNiU0MF0yaktvT1AlZD05RmwrYCRfU1hgUCl+Y3pBNGtWbX4wWX1FcH0ufXtEJVFfKzZyaU1fbilYPFo5bThfJWZPcV1lY0c8blA+MHlkUmZifTI4aFsoRHJ6blkwfFlWRE08Wl9lUyt9bjlqPHNVXiFaZHg5eENJZHt3Q0kvLy5gMm9gJTl3PDtJ''@;'; put 'put ''ZUsmdzRoIX0yXlNhcHxXYjclX0dBP29iIWFKJEIuOmUze04heSZAbE1AVGE/RDc4SGl5QnNLeWtXQmRfbXA1X2I5fkk7KE1AIm5TTUxYYEtlNUY/Km4oTTRKKF16dS9uOCQjaGx0YSVvJTg3dk45L01+R0tneUQ8ZVJAbkAocjNuVUNBeCsmJUhtc1AoNisyaGU5XjFqTkJ1WyJxNmJWakl7SDoi''@;'; put 'put ''flpCTDYsUFtkX2xCTmFlKnNoKkFMNHRgPHtvJTJ0RnN0TXE4aWIzSkI5TklDS016QzE3QG9kUCVFdz49ImRpaXxfPzRwL2w1Y3hyJk5VfDgqI20sXnNGKnA8Yyx0UylYdCJMZ2p7ZUthcng/bD92Tyk5LjVLIl1lW0RhT09XMEF8XSxnbU57XlJUL293SE9lfkIvcT1MfGF9XVlXRU1JXWRtdDNB''@;'; put 'put ''P2YsRlc+RUxiKXEhJitrUmd6OX0zTTptNzFeOVpwI1QiXSo9XTM1cWZPeGJIQGpLO1EzV30sdGUzUEB6U1pOWDxLeXdja3UyVFJsaUZjYy9ZJVhAXkwhZVtoNUtVOE9Ha09RbiQudnJxXTAsS1k0c0oqQ1VIS2I8ZkdzcVdYa2JBLnVPREJXUztqT3hxKEdARyRnbSlsdEJfJCR+fX19VFVkb2p9''@;'; put 'put ''bykhWTRDMTNyWSNnfjxkMVVxRnczaDFybjImaHRBYl1WTD8/UH44MGU4Oip1QlBaOSxkOiRzP3wmMlBWLEV0LyYoZUE+Im0mIS5hU1kiXSQ6cWJ+cV5WZE1rV3lbUUV+R3QwUkF2Q18yOylLezU8dnc6L1B6RUgwJnNRdjpMPHRWbStBMzsvUVhvYnhJREN9W3VMRUZwNElJUlAuUlFkSWF3Ln4u''@;'; put 'put ''MmVAYz8hXmdwSTFQfDErWk17JUkxWCsuSXAhRnRadEJdS0pRfCpETUJwZCVnNT54SVlKe2YldFdtX3BjTHFIN2pXUnR7eShGNCxWPSUudyR5JkRLT2BFRCZbOFZzWm9WQGE0LHtyI29GL0l9VHpoPnw2KD9iYyZ2YHNlUz9tMX0zJSsvRCZacUFbMnlnMzI4IXFVMi9dTTQzLEBkLiNwVTh6blNn''@;'; put 'put ''biFRTHUoS1FufUM2M21DNVNBSE0xKGkxcUoxPEkkeVE3aENJOVY/bWFrdWJjfXUiZT1sIkRIX1lHVD9rVTsoV0pkS1ZSaGklamhzc1VAOWtMS1dFQnY1aj9UQkFUU3lSV35lTSt8PH4rXmFXIjRYcjw/UTJNLnpxO3N6ZXxuYEFla3VSNV12dlc5QWtlOVl8fjxyfE02Sm4lW11hPDBHO3F7NUlU''@;'; put 'put ''I3BIYmspQWlRKUksOWRme0d8SV5XJkh9eVosLEMkSHAje1oyXygufksoIjV1Kl1qIk5rfVpaSHo6elRBNiY6QHx9PWNFVXY1N09efTM9dFIhL25MRVFpKVphWD12cjx7O2ZJTmZbYmg5R0c/QzNOeXQlL21LQzNLJTxlfXtnTEVgfUMqck8sQj4wJTc6Vzh0Ols6Z2R5TnB7UD5JT3tJe1NVVSsx''@;'; put 'put ''S2orK0QwOVshMT0iOFUlUGZlLDZZKHhGT1M6PiVdWGVvVVlLNyZee0ptMjE2b0dBU15SPlByQ24pcVE8dXVQd04kR0l5RUQucnhxIlt3SnteI0xvLk5KWFAlSHpIeVJDZjBkdj8hWC9NNWcyR2VZNF40XU95PTN6dGRGUUhSIyxKb2xkentmU25HX3RVWnk+L1BGNkxvZHgzKnN7RkBbJkVEJDdv''@;'; put 'put ''WCVGcDlFbSY0OmQuU0d1OXE5SSROSmBCWzI+JSRRcUdxX1VIU3M5RXZ9amFiQngiclVlTG0hRzZdQGxgeVJGX0Y4JlpldF1gV0BCfms8bE4/K3w5aThFPCl0TFksbysqSm4zZEoyYS8xJVM6c0l2dnZqVEpUanAsdHBnUjkvI0pNcyU3IUl3OWtBJnN6REIxfit9OUx7d25ZRTorOE5pKFFxNCF7''@;'; put 'put ''MDU+NDE0cyxAM3U7MzpAVzk/QFhUOztKMi4zPDl8R1FxWFtBOi88dSlaIW92QiZ8Z0d5VGxdNk0icUF7azFfXzVxSWNOUTVndXkmM0E7Q05aN2JdWU0jV3VLfGUkSDBzdy9ZWiNsdW5zUk9vbj9URkdvTkhORUdHYlVSMHs2fkwzX2h+Y35ecGksdUU9Yn1AWiEpPF18S2NrbiE7di5jSz41K15a''@;'; put 'put ''d1ZUNkFzT2NlVmRfPVpXdmk5KUBESj5tKDFCLDgqczFZZSU5Z0tyJWJKXUpNa21TUFFQPC9fNHNSY3ZYX2BnQFZEN1Z2YXNJTnlxbT9JXTxmTCwwP0QiSihuVk9+LD5EYE02WHUldXFtaWd6P15COCE0TGVFPEZCYH1rYHtqSjgyITlAOGlXUSVIdjldTW4qV2twa3kmSEF8b11IbUkkP3pIclt3''@;'; put 'put ''fVRleTFbSWBwTlgmayRqcFc/eTltK2ZdKUV9K1Z9ezkxcjQoX2RLPXNlOWMzXnE2YCt1Xjtydm9iI1JFVTIvekRaTFdIWT07IWpXKltWYlhzL0MhI3RrUzF+TCgqMG5oJHt0d0Q6eF8zbXROOnZEWkQiXXcoKUNbMiEoZ3MrUWpFfj1JbDhEMHNWWDo1KXJqRFA+a1NUWDN6ZE0kfXUjfSRMPiRY''@;'; put 'put ''ZkxkfCphOkluPU5Ob2F4dyNhUlE6ZGVPeCpzW15zUDAheUUrbTdXLGRwOG4vNmI5TnBwczIiUkJBaF4+Rl1VOkU1aEw4X0Ndd3dPLF4pM0JXWzs9M0NyJU1ZcFRRWE5Na1EmUmp8KjZeUmYkcTR3d3Ixc1Y1I2dmMkx9UjpvcHc2VH1lLkNBP1ttY31eZDYlcC9rc1AlVCNrSXEjKj5URGY+aGpU''@;'; put 'put ''X3pPeXosZklERlooUDhTe3w5fTdgVU44V21gM3FOMSRseXBERzwmJV9MSz9YflBncHNlbXl1UlFab1M5Tn5RfGJAbkRydUNqXnpmJVJIYC9TaSxzMmNvRTg5JTcmMFA5XltnYGBJcXMlWjFiantoPyZAMXNzaVdkZ25hc18oY0M4WldEelE5bipuVkg9T1NBI2hGcCohSXBsXjxhfDEuJTVlc20o''@;'; put 'put ''bnJjQz5AYzExSXEseF43MTtGV257U0RvezRUXlBDLDxeZnQ3Y1AhQlhTclt+NWMhI1Z9JWkmNiJAcW8sNzklZX5gSWNSdzVHUyhXOnVjOGF+YVQ9LlUsZkImaXBlNmI6dCo5eD97YlJPZ3VndVlLK2c6JmVCW180KXJ1Q0VRPGY1aHQsaGFoVGFFRkNIUUthU25RKmZ3VEUwYSEsIzFYJEZKR1d4''@;'; put 'put ''W25xM11dXWZ4I0lbbjJpXVZOYU9hWWwoW0NOWGtHJUw/NFQ+TGRxI2FfQC9fSm1iMklLXiRMP0lpbHZjcG9hPz9uczQ2bnNpUUU/M2g4V21HfCxTZFAyc3tka10qViNfeWI2VSUiRDxQNzwvc0ZDeSVrZ0VNUipma34rekx3QkY8XTcodHI4aXp+JjYiSlVTR2NJQDA2OEdGe2pKRz07XS9ONmAm''@;'; put 'put ''MERkd2U1b19nZ1kwMHoiUyU0SVJxd0BAQHdDNmNtS2YmSm9vVG5QeklaZUA6dztva2dgSEY1OCFCSzpoKG9ER1lhTkRodSpnOEc+clhPQ1UyXSVCSj9ZQllwY1lEUC5mMStDVW5PXWxbRU1TfTk4W0hQdyhwL3B6IThmZWp0WzQjU1JwcGI9MGRJQERJIW0+e1R8cjssYl1ba3VGKCwxRVhCI3Ai''@;'; put 'put ''O3Y4bXp+ZSxxXVc4cyR4Nis4Q3hdQEAubyxGY2tBVTUvRkt5UF1JV3oyfF4zRlRPZDg9aXM9WUhtIzclXTd4IXFYRF94IXFDZyU5fFYzWmlXX3ZXVnUlPXkiJGsyP1B3KEZ0NEs4VGhOaTZIQXZNWVMvUTttcFQ9JkYzI3VdZ3VrWVVpUFo4UEFEWjtqTE5yMSFmIUxLM1RvUXFhTnZfUllvb3tx''@;'; put 'put ''SX11Nz06IlcxTSkhYCpBbGF8Vn0rZ3t2O19kJkQ2KmM8Ml4lbHpPMXcxK25CdFhHb1BecF9MIyo9Jl0wTzciODxkS0c2fWNwfEdEPm5bZF1UVXlbe2Z6XmpjPlt5JTBQTjNsLDdlVUtzOUF+XlpdLCo2YkRpfG1La0lOOH5aS2VdZD0oVFI5R2Q7PiYxSXNlQks0bW1YPUtCVXhwOUt3a1MhNiIi''@;'; put 'put ''TTQsJnpgISRxfHJzVWc5N3RYRzFZIy8+ZXk9bSZ0OGdlbTNYYDI9ZlY/IXJ4Wzoxb21VIkxqJXJDVk5HKSVzK0pGPHZjZ3xlWWNrVGM/XmJJZlZ+UGVqTW1mdT1ZTDglTzlaO0MuW2BTWlFzJl5ocCN5LGNfc3x1MTF1RilHLGo8bjp3Yn14Wm9fMk59TDg1dHFwWGdNJXNnOyo/aVZsNDN3Onlu''@;'; put 'put ''WHJ3eDRRRntdRXx7Z3V7RWEmO0d2XywpXzZhfmw6NzpAPyk6XT9bXmgyKlA0LCV7di8qUEcxbV5Uen4uZXV5KVErSW58Ll9tOypiOkpiJFJPXTV6LjtuLGA/VDIjZSNmZEAkWlVwZzM+OjVxQ2J1OyxtUE09OlYzYzpNNzspTl17dTpbNGdZSz1yUCFvQE9dI2o7OTtaWVVCT2RYNFE+NztxaFtU''@;'; put 'put ''cDFsfm9aVV1PNERDeSFpUE5hK2JkaTl3Y0Z+bCU6Vy81SSZVWW9vUn5DdE4pM0F3NXohNEJvb3xEUUdGKDp9TiNvdXd2XV9tOmhNP31aXjtgNW8hO0VEYmchSzZ6eCRbP346WS5AbVUjfDFKZkdlOj9QclBGSTVxSCRNKTs+VWg5YikxO1k5YC9UO0VMeX5JYi5QX2EkUlFmPz9LU2JKYXZPMVZD''@;'; put 'put ''R0VRMkw3MXU7d3VWY3MlTyV4KzNLZzg3SzpDMCV7OmZ8X0ZLZ1daUVJ3NVVVVUYoP3BIIT1kW3dYZFNOVi9hZHZHRkhQbVdmS1U+K10/Zy9OaU50Ni9ZeUJ4UkciJCIyaXM+cy90SC9RaGhKRXhBLz46OltaWzhnVDE4YEFMV2s8UzcqLzF+UEElIjJZW1AzQDpkWXI3O1chTlQ4Nk1QOCt3Q2VG''@;'; put 'put ''ITB+VmNbNmVOdXJkK0xoSH55bTo4M3BvaU9UYyg5QnlbKktEO0tIXUc9O1plWUR9Mlpld3Yqd2lXeXpqMVJKfG1rXkx7R2VwejNYfHwiTXE5RXw6S2k7OEozVz8pfXl0W1clSm4iSDtpMDhmJCtNWzF0ej5wOjlmeTB2NjxpWlFadVZrOmlORis/ZX5JN0h8IWY1cXs/JEM0L3BzVjBhXWdkeWpg''@;'; put 'put ''T3toVjcqYzhqWypAcEk7aUQscnskKU4qezVRQHgpbmZVLkEmbFJqbG0uZU1NJXN3KGlrQHkpWyVnaFdZQC5BJjUxLyxaaSRhcGUpMWxOP2dPIWNxPExEXl5mR2U0dk06PCNHQjlCRk45Rl9FeUA4Q2xyZUJMRU1SIVl5OExmfEx6S0UwZDwiQnxIdEBoUDo+bE94eiZxIk4jLix9U3pxelBMPE19''@;'; put 'put ''WCw0LylXO1R7NHB3N0tWbEx1TF9NVXhYfUhXb2xgYURQKl5XISlKVTZpJjRxaGVXM19uTWsqfnB8czlLPG1fVTtrYV09Km1TO1opaXhRemNIQSZfRjpRQlg2bTlhQTozZzdQaFYyYThXW2ZfNDI2ViRQMVVhWUtxVHQhSjpxW1JqVHEvQH5AeWdsYHNvNlc4MT1td2VNdGNucXg+ZiFMXjtePD0z''@;'; put 'put ''bGA6RHtUL1BpeVdmLnw0fGlxPndvOXFwJiVMPyhtLCNnVlFyfXpCQDhxfXomVn1DZm4kUGJ7XyozaW4+a2JNYTdhOXosUiglPmdCXzRdWzVfdjwsY1JycWVsQGFDall6K1ImWV5dYyYxOUcrZnAiX2JvSWQpZUxgZTlVMSQ4JEt6RkR1L1k6O2I7b3JDQzxAN3JjLEcwVH0+VipGYHIlMilJdllu''@;'; put 'put ''PUFxMylCalgvbltiQGFBLEglbjwxTEtgfTIwUWZTWGdGKSxfb2A8TWNRKF5bKzA6SHQlTEVVTFdpUiU+ZyVmOUFKfHolWjRiWGR8JjNnPThyYz0+YGQxVVUkVnVoIzAyQjk7Im5VK0ZbMXg4fkNrNyIoJEZFfEo6S2BGY2xvbyZEIzs5aTF7Sk96ezRSJENWaUB9bD1CbFF5XVVoent7UnVqYHZ6''@;'; put 'put ''akc+dktOaXt0OnQ9ZT5yNEc/PjRyNHQ/b2x6P09qZl5ESjk8JHQqdjEsb1d4TlhXLilfV2p9VGNzLytXc1IlPXBUW1cvS3NvYmwmPXZCNUVyck1gUy9oRT5dODlZck1UfjpyJmw6RUx2QkZIZlJzZWNvR2VPXi4/PEt+SD1dbzlsJV1CSUVCVTVVZGgiej46RExJP1llPil1MSFhdil1bmBkQ0lB''@;'; put 'put ''fVMkVEhDWF47SENRNzNodHVdQF5iTVpmRnZbZzB0OSl9d3Y8JHN3SV15fCZJaTRKP0owUjh8UD9yInZHJWM8JXxSfGhlLkAmRnBQdEVvWTxwaHR7P2NkNF9UKWdGe2A5JT51W30wc0BENWgkS0NvdykzWyl+Sy9kbFUjcXdIT3pEI31PUFYhYW5gJENebiElfTlMQmxwQ3VfQS9vKk93NT1sQmZD''@;'; put 'put ''SD1TaEA/WGNdc0IvU3BHUkVbLGhnNlo/PS55RDQja1E6QGxdbmhyL20rKn11SmZWWyFackB8PWcuQ2BdZl5lb2kvSENKPUF6ZEptO1lXa3VhfmEmPmdiMVVoUFJXMX4zWSRJPE0kQ0JMTGFbYC42IkR+YTQsNFVWWDhWe0BdR2VZdHFzVV9OOFZgUUNCUXJoTFM/Tls6NjBQbF1yeCMsQzJdRDxN''@;'; put 'put ''PTFbfTgrVT1JRmR+MyUySWZmdFR4M0U9TFYvXil4UDs8X25vR0Y9cj5kdHMkMXBvLD9aKTgkUjwjUilqcyVoZT4xMCg2fmh1NHs0Yz9wVEQ2KCxiUUYmWmoxLEFePERQfm1gb0BqWSI3aHwvKmwlbCI6L1hKQ1Q5JUxTbFV1NTI7RGErLyRwQVF3SUE5O29KYlpmdklDWj05YWM1KF1lbG1jU1Us''@;'; put 'put ''a31+eGIvdjpbX3E+OmM2NF9zQl4jIV5xcVhgVzBacVB8N0RIWzs/b2lCaE06LyZYWjRnaS9JaSZQdmA3OTxoOGguJkchPVZVLzxDOTZrOSs4Z10xVStzfl4rMzlzPFszVmJpWjx5bT5EKDFmNHtxRVZ3Imk2ODxgL1M9ezpVb0UjQSZ7QDZzJlQzcSZUTF0ueURwdX5RQU09UEYwY2Z1TjBkPU51''@;'; put 'put ''QnVGZCl9RTFDLzJSbElYMj9ZZTE/WWVQOTdbelJVWzhWUmN5IiVvRT40PElhVShuJnt1UmNkW3o3VXJRQDFNUSRkaF5ieWRmNGAiNCZFPDhzRywqN1ksbnZTZ2xGZXN4d0VqRFB6dj5udSZjNmNTUyhXUyRQI1tTcHEoTDlgQ3p1XjhxTlBMWmQwQXg6TkBZdFlWR2MuVCVmNiZ3SWxAKlhBKS8/''@;'; put 'put ''PF1oYmgxLHZsVnVVa2cjaTsqNj8zdlR4JThLaGY0MD1wK15ye1peRTs5d1ZDZTZUaW5admE0Z1VsVkUwN29LIVdxOCw4S01zTXxPRXpualIvbz18Vkp3I1g1Lk9VITl8Tk5TZygrb3M8djhvOGRKTjtASFBxMEpKUWF9XSU3RDkmU3s2XmJuYEVLWE5mKUBlO1s+ZTpLLHkkTD9eNyk2d21YK3VH''@;'; put 'put ''YihsL0hEIzYmJipJT1oyZShwaHQufjdhKyFpRV46ZEI7bGZ5U1ZldHthK29vWnBORDohOWRJajxMTzNZcGtmTk9qJmsrZmQyLDZ1b0BBUU1bencwNjJVN3xaWUAoM2ZWXjBweGw0bjozd3c9XXNOdUNeenF2N2B1eDUzTyl8Y2VtRk8jXV1PZSEjTUJyYCpiNWBtdjQ3ZkJqXiJuYFtVUTheZShr''@;'; put 'put ''d1V0Uk8hWnczaW0zS3taWWxBW0BMRnc4fWkqIXN5RWU0NnJUUml4ITA+KXspOy8iRjtLWks7P2Z4N2FNO28zfXs8RmVCcSF6MmtaYSlwRyxjbiZTS1B+dml8YFZRM1g4ZDJ5W2o7NFRDODJUUXNhaHsic3k7M2tAOSxNNmQjdyguZGU0eFtiT00oSkZifkl+TTh1ZTYmYnRITXRJfHRdQi8ya08k''@;'; put 'put ''bkhmZ2ZHQktLImk6SylJS2Q0UDJrXlpMQ3tgS21CPCM4dmZdUGo0TUt7dytkOkY3TXxIVj9uOW48RyF+KlE4endycUwjKShObD5GfDI3ZVE2eTVgITMvbXNvZ11JZmBsM0AkL1JGUDBkNWZhRVt1aW9hZS9zN0BHTitaTTgpYzJHPDJwQypEV25BSypYanFYODtmZT5NcmFwcDNxQzJPU14wPSR2''@;'; put 'put ''IjgrT2I8QXJHUnVENF5eTklUSTdKXXVmLik9QVBdeFR0a1YxNnRUYEJSL040KiRLRyxsN0dhTEJvW1RvbEErcGNuPkBATT8+b0JJNDZ0MHNxUXhucTw6ZEo2QiZLTl9iPk0lQWN5YSpxMnQjZENIU0N7P3J1fWh0dyYlT2dyfmBITm1GWkx7fTk7P1huZjxKVWFVXlVwMyY5Ykt0a2tVdCp2V31D''@;'; put 'put ''S1UyLHY9dDdpMC41LCN8VGlocztufXA7Zm1bO2Q5eStbcVh9Lm8lenhoRjpqeUZmaV9ROm5HUW94dGhMMS8zUTBHUjRfMj9wO1RVOTRQVzo4d3EkQy5Ec307al45a0lWWFpSN1lCN3MkKURQWFJQVCwrRCYyUkVITk4uOTAjJVd+PT0kZiYxbTswLHtHIWdwVDRCZj0hQjxfOCVRTWZFYml1UChI''@;'; put 'put ''YylmSEF9I2JsRHQsP009dFc7V0IiLnFTOktbKzFSUytkKjBFeHpgcV53fmh1NHl0NDJKdSp8QyRfaSxpXTo0bUh5SnU9W109TjVOSkdYSzEsWWJTXmB5cUt4QjUlPnRJXTRyY35RZEROU3NMcCM4U3ZsfUYvT00zVDRoNVovREpHMnpYelFwUkpoW2h6cFJmU2phckJfZmg8YDNnYWNUUDQuYFte''@;'; put 'put ''PX1oS1BvQ1RaKEt3MnhHKSZhQ2VGfjRicUA0fH1GLHlFNmtALmRQcGB0fkhKeyVoWFpZVmYpZU0kfUJLMVJGZHBDZCJVOndfeVN4OXlxVjZHaCkoM2NwYlRmTEBfeyxlWlsvUkNfU2YqQFlWUms1SUZyQ1hCP0o2S180MmJjUFZlOUZfJStXTEUlMFA1PDxgaFpEVXI5PCImRFtKLipGWXxKMH1y''@;'; put 'put ''QEc4fjsmK2BMO3h3UDo6MD0+SkMrUExNb2NVQGMoN2p5dC85Sk96d3J7UChWZWskYWtyRXwrRXBga0A6aldjdWslUi9ASDNqMSZ3ITYiTj1hTnIsMmI8UDZ8Y09sekdPT1FbdiwxYTsuP3VlYyw6Mkplfi5rJiVnfV5eM1FJfUJFXVlNL05mNFlWOiE5dlo7emJmTjI7R1JlNCguZj4oKlpjQG9p''@;'; put 'put ''Vy5JPlQoVHxHXlhtaWlASkhbdURGOWEhNSVdTWdNPSJnWy5yP2NbbEQ3WzFeIklZMDFTXSUqKjJKY1RBbCp9fUpNJml+dF89RCZCQ35PT0Zha1g8XkNyMng4UT1EeUQsb3pKUU9zNklPLFhydFs/cFR+RzRAYUQ1c2BGPmpRPVJmS0ksWmRzN11LUjx9aypIMj1nKy5FXTU1NHA8RjxDMGcpPitR''@;'; put 'put ''QDtoeS8qfmk6UlJpMmJmVkBNIltJKHp6Ql1sISN+azpOPWJGeUI8VF06Tj1uQnpHY2t3NFNUPTQxRUxte2lCMm0vVHZQW3kyVjxNazdSJjw2NnBNQlNIVVFKO3hePjl2MTgrU2pMeVI0MX1gSG1TO1N4JixwXTJVdEA5OEQxSkNLQkxZZntEWWhYQjU0NEBQJCtNPHNEInwqUXVMOEdWRGJuLENm''@;'; put 'put ''a3VzckAjLntMNEopT1s5YmQmImRKc1hyfFhtJCV9S2ZoVmt3a0M8O21dZ3N4VEAwbUhwOFc4czghIiwrfDVUK3dheFducEtfZ0t2am5JJCU6XT9fPSV+R0BNK1FjdT51OUdMTElRc1htP3IpU0x6W2BFTXtzT3lpc2NDOlI8JTc4JTAwdkJVaXl5fFNkYXtNcy5RNmpFcnh2dyM4S0Q8fXAyLD9D''@;'; put 'put ''OW9NTEApZG5OWC40MjtgVl9AS1F1THVmdzVeSyxQVHVGSTwqWURPbT99Sjc3R3h2RSFQOTAxW1dVaWNoelgoOE1DV0U3bXkhZitaKFcqWGU7JnFmPip2e2JkRFN4Mj1FclV8bi5wRGJ7UkEvRzMlNyxYQlgrcTQ4cyM0YTBGW29BMCY5LnVROE0zM211WFspbTt6fH10KnxRSG4+YXl6eUdleE5F''@;'; put 'put ''MHxAODxCdnFARUZeUH5OWUJBVCJ5SjRYIyZCJUUpciltQUopeF1HVFRmOUYicENrX2FteHM+Zk1JJk8oY3hnYCUvNkZEanNbR0NrdylIPFJRc2xjWTxPS0FeWnA8UEVOXVZeL1EjX0dGRk4xZXNsUlE7V1RgYkIqRW59cj1tVXQvXSFkWDhXbT8qVG1JNUIkWSxCMVF7VSs+SWFPeHpWa192KER1''@;'; put 'put ''I29tSEJBSnlKQ0tQXmQ4ZDhURDIob2JkdFlNK2I6VWJrO1Y1fHBLYFEvJWhUNVk0dDsyJlFKKztFREg3PytnXWY0bldWKytTLHMyUXk1RDY1Mi5kRDFIcSx8azoqVSlpLHl3OmhQLn5lTEwyP3dONDElcGh5VWpyemMlZVkwfSohZFkwekBaKWxrdzN8eUIrPkJ3R2V0UmJtcD83I04sZ2M+PTAo''@;'; put 'put ''RllhJFU8IU1bYGJjeSZWWixUdTBwL0BXXl03KnV5QGxROltJZGVwYXwjNGJuV1R3TSF8PD0iJiZUbTBYQGd5IyVAdXg3ZTYyeSlAQDFgRF0sN2kxZyhINTUjfFA+VXUyKVRseFJJMTBwVFd8b1UoLDU4Zm1vYHkxSX1kYzBvUkArek1SKD8mSHwxcihgX2Mrb05EVVZ1Q3c4NENqR3d8WntULjo/''@;'; put 'put ''Nil3UERoR05sM11PNkZ6fVEvVU8zcEhxXX1Sd2xMVTdtLzphUTRQLjVNTHkzb212dkR2S0t5fHc4enxsQVVdMCt2b1V9XTx3Nj59RkNHemcmPW1zVlAuKyFkRmRGSVY4UXJxSGt7VHlVZVIzbTY+TTpgQmM3YzJRek4wXnpaWztHOzpJaztNaWNtUyNiNWQ5ZzdgPVokPHdIO1slLEUzKW5SKnE3''@;'; put 'put ''KUNTUjUlR1lXRDRONVpbKnV+emZrUko4eHE0dnMqYztwUmFTb2l5Qileb1Q9PXgkKWFqLztiNyltYUldKjo9Z1k5N0I+OmBkJiZTRDJWKFtSUGRJTjg8M2U9eCZDXWZoNWljYWpta3RLOjYhSltZNi9zSEdeIXdeNyt0endxZSJXdUdOX19FOkpGbF5bdz85IXVCXSJ6d2RCYSk6N1dXaUlZV2pK''@;'; put 'put ''JC9qZWBqYF1qfC4ieFg2dWVeVmhRP2FMVSpRImRVU2pzI19EOiR9RFFQdXhZXUZdZ3s1e09IYz1VZShxaTtSMWQkZ3RrSy9FZzR4aFY3MGh9Q3MqIismfGxgOChiUSNzMXhTa0cwP2dSfXYxWVkzQ11JNnZhbmxgMC52WCt8fEtTYWBlaShpT0E0ZFQ7bXV3N11tKS96P3ZXbmxMTEsiYjFPQ2ol''@;'; put 'put ''ODEuOyJYJTZpcys7Ik84X1I+eUpbVWAhfWNHZjgiYmt7MS5MS2x8ZHwyMk5NdyM0RD47Li9oXUddQFtba1JwOUslMUFNN2lGSDdSYkptUiQ3PjttcFo1MTZQMEF6cE8pXVREQEBAQENLRyFgVE96c0hLVE5HZWJsVEBAfXdpc29lbiJLKjV4SlZnc0Zje1BSJTBZOC5EJkQyT3ojZT0xOSx6dUEs''@;'; put 'put ''SmZycDlLJDs4Z1RNfk86a3laZiJgZSpRclpyMCpoSCp8dDM9LHIzQXZNMHk1VlFySDo+XXAkYCNAKU1ja2ZwXVM6T3tHUiElYHlYT0VhWFBZYWFHXzB7bUY1SytCZ2pjRU1ddU57R1t6d0c4fFZ0KF9NWmlvV0V+b3c7VFJdaSN7Z0N3aWp2fl5hWjhkdWE9cF0kJll4L1hIcWFpNlZ3QH5jc3NC''@;'; put 'put ''OU53Qiljd0F1blcqNXJNcmF3ME5pTlFCNm4xRjUzRnUjR3s+VExdKHVXW1NSdzMyb3p5KSMpemw6a2k2ZylpaHBHe0gqS11fRlo+WE9HZ0RWcDVaWHY+Sj09Kl5Qc2FwI3pQPnc9WnZLZGNnNnpNTjtWR3cmWiFDfXg/THl8YHBlWThbN1hYK34zSENObFNEYU1aOmZkb1NtSDxCR11URUhqeXl8''@;'; put 'put ''VjRhaUldcmM5MiJvNm9KckV+IWYqaSR8M2UqaUJ+L2Reb11vbUlzR3RhI1khcyZOSHFqdnEzWDYwNVhxS2pKckZtTTYoKU0+eHx2Jj5QPSpLXVQhZUpuNjspJSNVSGYuL2BPbnguM04lfS9VZk81aC5bOD1PXyFldj5nfXxgSn1BeVU2MDUoOlZHWVo4Um5hPn10KkU3PVlCTGY2YWJeITooMUwm''@;'; put 'put ''ZU5fQC4sIW43ek1FczUhV05rdmpsdHElekIwfitubzg8fn1HV3B7alkkWjR2TG53LkY1cTNGWUlTdl47V2VyVik5PTlJfVE9dG1hSCpFPCVHXnl4fC5MR2A8VlZyTUBTWiVTKy9RYks8dEN9O29fPmhgaDR7TFJTYkNUUSppWEovWXI7I2xeS2hxWWM5dCplJEhRUGllPkEmYWpJKWRURGcwSFUr''@;'; put 'put ''OlJOaU5GS2p5IntwPFFeKjU9b1Z7KkBOQWMoflBuQVtYKHg1eHsrKXE4XzpWKU8rMThyfVNPIVAsYWNyMGZsYzx8VVV9LzhsZVEvd08wbFgrUXdYUTh5NlYxK1svd1JIRiZsZjBGTyMqfCZ+TlBfMU5PS2t9VGMsPjBATD5MK1p6OC9JKTNXV3d6bSVmNUdqbG98Jl1IbHVefnU/Zj5JUSt3O3VY''@;'; put 'put ''KHRRdkhbdTtgfm42TG1TIiVeXj1JQkhVK1pVXU92SGtZX3pmVkoodVE8JHpDMGc5YFJPQ2VDdkh5VHBOIUN2QCFWJVY7Qi5YI2NkNHliPGcvZCZsWTBpPUs3QHE5WWUoIUR9SlB3e1tuOHtTIXNRN2tFMTxDWCRMIWVMUi5QNnBoSGYlJmRwbEkoejZOekVtbCYuUWsybz1eSiVIcGQpQCtFL09d''@;'; put 'put ''cTlBKSE3dmA6ZE0raVghbDpERiZBPlM1TFNUYXxjc3s0JE1ke1pMVzJJP08zJm8weXNLKVhERCl+cU0kWVhgRUZ2IlZebEl9XUNYdSNrSmVBaE17NVZTeV1COFczYiZDPl4xQkZ0Rl94e3w/cTV5QCgvWj55ZEtCMWpvSHZIRnN9WVMzdlg5TXFbME9jZm4vSl00ISlbOlMiWzR8c3MhYDoqQkhj''@;'; put 'put ''STl9UkZTKHVCODY0LkFNZG5NUnpGTSxMKTY2VX5qbiVHT3VYUE5ZeyNXeSJCNj50LHFARUwqMDpIeyY/Ol5eQX1pZk01MXUsT25gR0Ahe3FFVDMqN1BQPTsqMyN4Iz1FflgwUV47Kl83Q1clbj0qPm88flVnciUjWnxfUk1QXnJxYmZFKTYxZFVzeDxaZ2pDT0didTspI2hNOFojeDQlXjdPaHA+''@;'; put 'put ''I0JHPHQsW1ZzU00xeCR4JV9Je14mZ1thZDo3XUYjYTxFIygyUVVuNi5VMmFAMSJgNUg0UEU4Vmkoe1NGeyNTI15EQmUyZmU+aCw8YSZNS05aUkBXJSl9P31uVzxja2pRU2JWMkNFS0JLSnQjNiZdQ3k4Y1MyeGksNiY2WjAjVWtoU3cvVTlWX1BpXlV+ZWM9NnVpRVZUYF4/VUpabmtad0c1XVcu''@;'; put 'put ''UTtXJGkqZT1vMUhfbGV0UTo5UXx3OCUqViI4PiF3MUhUbkU6RzIkWi48dmtSO3cock0jPVRoclZmR2U3bUEpcko6PW9RNC86eHZQaFQ4LDY9QyFCXjwjQU9HOzBoP3dtfDYmenZIaUJ7WiJuencxO2ArPngpUlAjSnM0WFVBN3hTNmJoIyY3K3ZgSyM2dF5nL1ZjUWw8UHdAIWksbWlPP2Y9eDN2''@;'; put 'put ''WV9OOHdtSWI8ZEw3clVLaklmOUk4bE8hL0ljYV1WeHVAZjhXTWY+JFhiaHh4b3ZOSkBvKC8vcHNHV1tMNF88KWxQMXBjcS9AIiplRmArJWBta1BDJHg1TT5tQTksYHpmSGQwe2lAe3dJM3p6QDA8LCRiRFBmMHUhOX0xPUpkRFBkUlFfOUhaUzgyWXloIVZ0a3V9UiZqKSs8KSV8O2RiRm9YNmlF''@;'; put 'put ''OEsjWnhLRGRibFRWcVhyNz1eeltJZUwxVjovXzNaZmB5NUUiRnJxQzM2YSIsMEdud1c9P0I5fX0xPGxici93SEQ+VFFHOGtfdmBYXjBvb3hOaGB3b0ozeyslV044VCVGZjhkQHVYYWNQZmFsZXVHL3F2MmJUZjNUPmdWdkJfYjpycmhFW2ZpfTEwaEhee1tzNyJMfURDOE4xPiRsZ0U4SltBaVM1''@;'; put 'put ''Q3BOOFdLOGE0MWU2L113bTUzTmMpdTYlWVdSaUtSUz8uRyFxVkJiRlBuK3xjJFQ2fD9uQkwkZkcjcSYiaGB3b3JtaDwwbVhfP1lVMn0qLHdHKTJofGxxZFBaKjtZLHVSdFQ4ekdlO0krU2lsVWlscVkvZD0oelEvcW1WaThKPFQ3I1RtUVJsVF1qbDFsdXNgTEZTP10+TyFCTE1PSE5xZldZMDh4''@;'; put 'put ''UWV4a3AoWlRFZilMfUUrbEF6LDBnQ31eN3VIL3RhQCM3Mkd2KERAall+RndiPzY9fHgxflB+WDpwKFAxeFFLZyl6dzJoMnRyYGVjS21EamJ7NWJKMldzbFNzMlpDWEVgTm5vYik0UyMkb2BGUCorRWZqK2lEfWUrI3F5LztMbzYuXUBMS0ZdYzYrZH17VDZ9cyFDUG0manl2dWgpfT1AWmkvJFZg''@;'; put 'put ''NTI6Pz1kY3d4LlM9PXRBfC87dntRXUBAfmtQUkNlITt+MHVpX3FNVFl5cEU7I01PJitgc256IXZmb1BQdkhLUkAqW2BqM2BDezRYIklXY0peeiJ4azBDM1ghOWZLVlpybykrSWB2LyZ6V0kzO0wqKkokTlBQbnx5cSoiYVIrPl98dm1yL2cxXmZWaSlbM1VVQ3d8dysxTVs+e05JZ1tvaVo3QEA2''@;'; put 'put ''dH0jI1FAckhSYzNWMX5ldC4lbE84V2FdR0RYfG9SWlAjMy9GOjk9OVk+Xi5PXms/aWZOXlVzI3BDOyhWP1oxbn1WMXJpTyF3X0YsRmZxeDhqVkp7Uyw2QTRWVUdlWk1DZUs8anQvImV9TWlPXldyaCUrWH5xLnlrPyEmWEIiekZgQTFdUFBVO2E3RCtbIjR3WGAlKEJ7SW1jVHBaQD8+RlhFRyZZ''@;'; put 'put ''Myg8TGFMNDhITSNma2kwJDxnQG1lajdoM2EhXShkaiJSSDkmSSgwKGtpPkkrY2xjd3p4USxqS3k/SUZ0dEElQUBYUlphRUFnczg1aXArak9aaWMhXUtGPDBfbEVwR3s5aDspfkl8WG5Jc1YvbmcqMSssPkZpVmB2Jig3UlJ+RXEzLEJVaGc7aF1MKHF2SChOKngreXdxbFExOFRvJiR8dnBmfikz''@;'; put 'put ''V0x1NWhSemdeeV15ZzNhQHVlZXdYJUJyamZyPGdqOVJ9enAhUm0vQyhDZEVKLE51Q08meW9KWDdvfjxyZnZbVnN4Kk1RYyFzfCZ1KSEhIkU+eUZvaT1sJSw+ajJsOkt7YUNSKX1WUUJkSyxIVTlaZkA5KjwqP1c3JnJsOkNCOTtTVXN4b3p2fm0kKkdDO3VDaEtSOUkvMjZVRlVHYy4yOWslaEBa''@;'; put 'put ''a3pgLkJBSl1FUWZWSVAiaTpDKn1OYSxUQyM4MD02b18/TUpfc1AuUSUpL2o/QFBqSk8oRSlTPiRoJSMsSTdAJkQ9eUNpMmEkVDlSb1lbL3pYO1M/QUtsZV8/Qm4jRSNMKnFuMl83cDVjUztvQXE7cV80JV1FZT14WC9ZLyZ8VDtramY4aTgrIW9kSjxWXSx3a1U9WUZMWS97P1Iue2VkOjVyKXV8''@;'; put 'put ''eCs+TUlwLz1veix+TyE9Rz08YmZGbCVPaV0qeVY7dlNickdpN0dgaWNxcENPQzJoS3RDK0txa3F9dD1CU0FKb0Z2MHszcH1HcTdqdHhGJnVJK0FKRnFUeWJFL0kvcGRVck9XYDc7bXchQ3NnPWgpMy86IUVlJT81XUtGMjg6fkQyIStsKD8xRjw4Tit+NVVUIW8vKjJdQ1tMSiFKXiMsVHNbK2gv''@;'; put 'put ''d3Y9K2pDKz5HO2x0IylZcVpuaWZeW0tQMkElLGB6ZUYldj0vR35JKz5yRSgmQW06SUlVIXAzfTxadzpsMHtsZloxaXYlMGpiZ3NYKCY4fn0qUjxlY3lOOC98Ll1IYDRgKjxqdUh9VSlnISM0SzNGUWZRUGdOOFFlQW9eT0lQOTltKnBuRy4+ak1KZkA6cW1RLnBMIXlvZjVhZFlyLn5yelplVlVs''@;'; put 'put ''MGJKZCs8YkRaeF5iaWZpOVdDMXFuPSk2aHZGTE5vaFlEdTg1e2Ysaj1bQmIrRGhwQC9sdSt8clRzek8pJW1zTXBzNjFDUzlUOiVxW0NCUEZxL0ZaZUR1QU1dd044WCUpaypMRmxAaVo5PUg2TGdBb0pgaWBePUkmQldSOFU/O0BPcEA+LFQoOUhZcnhTRktxVGNwQExNQ3xKeW9Ycj8xMCEkcT1i''@;'; put 'put ''WXY1Ml0/KW9tLCs2K3hAJWJUREtJOl5tQGV7MW9TOHpvWVJhPjhFK1E7USErejVdRWNja1NbNVZ0XW1dNkgySWUrajZFK3RkVEllNWBeSjBxMi5kZWhlfFI4TDt9PGhwVTVjQHhkTE4+OGtGdDpHeFFCUChwaF0xMC5IW2A0LDpuVTJNcX0lQHNQMGY1Z25rfmEkYkAxTixmcGVhOi9tLEY2ZTsh''@;'; put 'put ''ZmFIMF9CJkh2YCEqI0deJHpSemtlYFN1VDosYVJVWz45IXIhbzdAVWlDWGd1dl1jS3heKVhlPipMQXhgSUlqaUlNSkMveUVjan5SKjZrYV4/QjJsRS5mSEUqPz8pVFJsZWcxJVIldmE9WXA1VkRMWzY3Ln1ebGFOODAieUN2MHZdTFAzYS9SYl9EQyYub2lfW1lLbGNMaWxvR0xUSjN6ZjlhdFE4''@;'; put 'put ''ViFPMDU/SHhSc0lII3R8WiEzejJXISV1UktVYUk+TlJzVXNkRyF7QGwlckBeYTZOaDY0KFUlISt2R0dgX058fVZsanMiTT9NfV1FS3dnJEFJWS5bKEJ8MmhmZihLdW1FRiokVmFnd2k5UFghdk5fR2Y4c0Z8WzZeOWQ9aV88I0Nee3dAQGAyNDZWbDUlV2hAMjROPC5LbjNBRGl3SDk3a3kjI0Ni''@;'; put 'put ''V2xGNHtOX0hEViMjQ1RXJUNNVGxhUiEyTk4pcz0/MT1YWy4mWWQxfV0mZi8sUH1NemRmYXBdVzchWC9VSHpdSSR0ejlJcHRjV09Afl17fmxgUz4yNEZNVjQrI1Ixd1pbNjg1ViR1OiszSml0WUQ4LnJeREVAfExZXTB2YHEleSJxfEBLX2MmIT1tUXg+KThRc0NeT2QpOyNxMCleTmEvR11XZ3Nz''@;'; put 'put ''Tih+dTpfdkhqRFl1P3dHYDY4JGt+cl11W1FmNG8qTyJJNk55cEc1OlViaGVddlVVIS5aMSJqPzRQazB1Yml4RVUqQkJDeEZIQ29YciJtbntrKSpKPik3fWFrbjF3Ki57e1Z8QVYpdjcyVyswIyRvUHZIJElJVVBIZk8vam14JnFAeFBIUDpoPlBNSHdHcUdRO15FRFNaW29wLzM8TWlMZTI2MS8v''@;'; put 'put ''dTwwR0JQSFMhWHZjYXNUOkAjL3p1bH1mWTNnYklxYHo9fSNUJV5iekk5XWJwUk1jaSw3Oyk1JHh2RSZPeUlxSVVkJjNTbTpjeDlkQk1PditZMndmbCp3NSkjenV2WXlCWURWfGRXPHxDe2BqW04vXzxlMHo9VTg/a2ZkVm1JanwsdTNhViNjX1ZbalckO1AhIzMkR2oobEVWNHFnZGVzT0hlZ0de''@;'; put 'put ''SSsrR10/bzhXbUAmK2F9eHx1Q2phNUF9bFFSN1BvZnpXWzk4aFQjZ1deaXAsdF90K3c1KTFbXj1iS0UhYEdsMjcmWWgpMlo8JWNTTXE0Pm51WjZ2fEV3M3pocnM3by4/fjZDSDsyQzd4OmslOjJReEBzTlArRi9UQHNKKHp5QHNSO1BfKERgTmNaZz00UDJiZk50ZDx4Rm9ZSExIRXE3Zngod2pJ''@;'; put 'put ''NTEkZVI3VT80WCRdJWk3SnNJWHR1dl45L2RVezYvNUIwK2dtbFtSJWNHOFRDKTIpeV4sMEw/PHt8On5vMDJbc2NaZGgkSEBPdks2d3wvKX5fe3w3VkNQbkh6ZVghQ2NkeG4vbHtFOHFnP3dbXWQ/QFM8Qz9bZk8oRnFyR2BgRTZlU2ppTUF3QEJXMXJuclB1TW1pQTx4bjdnOUZeYVlXYSpGSkMz''@;'; put 'put ''LHV0KVl2LmtnfVNRen1wVDFlfWFUPCNdazxmTXVgYzlJIyJXZW1QZyFXdHtZc0RWT3MhfFlrWXI1cUhAV2lMTURIdGl9VjNucn17Nng6KD1RM0pwZHV+Xm1lM15EVGh3K0o1elU5YiNRTWBbMkJ1NHg8TDFlR0xQKEdyY2tebXUwSytBb0wqOmcuZSNebW0mU208Q0puJXl9LyVpe2JaJll5MTd2''@;'; put 'put ''TGdZR085XmlVMjVxZntQcXZLInlRd1d0OENEWipDRC55KzR8en5xImBOXmFWQHo2MyY0QntHKklifVMrJGBXJGJJO3goJnlBfX0yfF13clNfO1d6Zj4wOERLKkJ0bFkxYWRoRzdnWV5yYlVgbWdlOVd0PWd5ekpEKkQvPi4/MnVILHB2YDw2WUJfezRrYmpNRzUscntFIUgvUksvLlheUlFFfVJb''@;'; put 'put ''ZyxjbiZTXkVASFtPO08sT09kYzZMbzFOZURwOyU0QkhyRVRYOmAxLGJReUJUSVZmTlAzNSxYLHVbLGg0Jk86Nl06cC8mel06YmR3PDcpPCtvd1dIKXJCNEdXTGl5XX5qRl0rITZUSDh6OTQsdDNraUc1N15ZR05TdW45dmtScmBeLjg8LCZtTFpLWkJrXk5fSXNUXV4zKy4pJm1ZWVhKYlFMYVdN''@;'; put 'put ''M1hzaihbSWdeLFJ8W0VYLHZgTFpObUV3Qm9fQDU1TSxmZHpXSyxYMix3dyZnUHhuI11jWkxdaGt0aGoiO2ZDJCZFZE47N1NQX21XMVs1UzosW1p8QERQQFoicDY9cHRXXyJXSn1mT1dgcDI+W21laTxpNXNgOTJQOEppVDhKaU5ZKTVgSG1ESDN+cT1gOyo1MTBKIkIyR3VkUk5oTTFsWT4uYUhW''@;'; put 'put ''RFkrWzpJRnhKUkI1bXVBJX5QbmZWaHEyLjRBQFJhVUdUXiUhYjUjcjlXX1hObVYvLzA0UWl4dFYxYHA0bHk1cyM7eSpiLCJCNj5CUDMsIkI1aGYxQyI1Ny85JWBON0h8S0FSVz5dNi5HM3h3bDxuSyt1SSE7QjZlZEx3Z0wqM2MsTjNIKko8S2FAJjR3e1sxdkQqaXVUPUZpNENSQSNaYDJiKlBa''@;'; put 'put ''JE9qe0txYFZkaDlqdFF3aGApWShdN3VLaUlhYSgwNG8qekhESTx9KnhPYzh2PmlXb2tYTiFFZkNKQ1p7TGJ8LEUvY0V0QmRnQkApbnRyaX58Q21ZZSZbcCRfQ29pfWhCfDE3VUZ6bHNIeERdP11JeH50NyJ8e21FRGx5e1lmOCRKbFBZbE4vUj5nTVp8OU1zJjdeKjExeChbcmIudXIlcXVZPkYw''@;'; put 'put ''VW1Ta1hoOjE1Vnp4OVA9bVZjQGFqWHR1KE53emVGQ35gYSFLU295RTVYd2swZzo5ZVFKYkRmc3AjLCZFVUtVVXVyVF1pS0Bnd2ZbNllxSU59Lm9YMmljQ3RbeCxALiFdQl1wRiV1V1V8eXYhaSFRTz85PEtPV0VQXyRPWCVNSC5hPHA8Qitvb0JzMWJxOTdPbHpJXUIpTzFRZm8hMnpEfT5pNjgw''@;'; put 'put ''K1NXRCYqeSJkUGsoTGZfV21YMjRaPV16Zi83OWgidG4lPlckb3pNPkk0e3ReeUd3PEhINHs0NDx0fnx8dl5iJT9CNS9JaylfcHlGPlQuLEZAX0U9OyJXdz1CTGV0ajZ+PWdZWWYxXVBGe3lnal9xP1hWR1JfMiZQNz49bXRUTH1UV3Q7V2BeRVhiXnFgI2kpay9+RUBmPEZAWnNVLkBlP14uOXxq''@;'; put 'put ''dzg6TVpKUj0iVUVhXVhkL3ExPFMxeGRmUGNkayFgeGplcHA6XUxdRGs8Ij0mKVhCT1U2W1FxWS9pZTF1bHIwT3ZqLlBNNV9KZ1t2Qm1GYmdHQF9jbSVwZlEvUjVzYHwoIncmcV5PRSYhaXhFaSFNaCxpPHhwY115ZnJkaC9LOTwoZE1NaTl0Q1JmKUt6KjNQMlF4YTs5emVxOSJbYSlfWXhsbkNo''@;'; put 'put ''SU9wbU81a3I7OCJxOHgkOXQwd3Yha0c9QDQ9T09aQ11CPW9hey97bGQhb3JbcTJDOnpVPlRNN0guLm1kNEpGPmo5R3JrPithNXlEZTFCe2FCK1omOiErOV5oX0lHa15DYWs6fGdkTFkrR2xeYnpEQn49LF9AT2Z0NEEpP0BMRm1LKHxiO3VgO2d7RHd3R1E/Zj5ZJXZjRHNaL0wkMSFKfjYzbWVC''@;'; put 'put ''RTwpSiE3TD9zen16RVBtKzwkd3glLlJbSyl3LExJMW1VIyNxWyVvUWNMRVBPcUUxR15+bWtgTltwQERKaVZmTUR3aFhnVEU8PiRSWz1IXS5nUE97LlE2amt0YVluZUFxKCI4bWIwMWsvSz04Ojk5LDx2LFgsKjNsUEhWdlFrciNaNkJSP2AicmttTW4kRilXc1ZYMXYxeVR8LGNddEs3N2smYnAm''@;'; put 'put ''Ij93OHkucz1jJElOIXpjUTlXPlIzJEkoOF5gcXhwSlc/Mil4XnpHVHozOihAKEdGRisjek40Z19ydChTVTd1TWQ8eCI/JlFNTj5qKWJBJlJlN1hZVS42dGYwKyxjSStMd1k3S2N7akxLW088PXF4VDhyY2FmSWBqODwifEl+W3R8PyExQ0hydDtKVypCREtpcUFofikiIWhDb1U4dDopWGFAcC50''@;'; put 'put ''aC5pYHY7RjtRcnMkMXsmZ3o4fW1iR0ZmaG0pTTpnI3dtZ3JKeCg5dSZLQzsjMF1rfUBNUl5VYjtJO3BmUTVjZnxDPiF8QmloOEYzW0k4aiJgIUFDcGBpOTgqWGU3MjQjU3dLczdRZXROREMvUWheeHlzWnpEOSlfZns4a3JzbUdmbGguKipHc2BjJX5Fdnx3ZT1hKXg0TH5lP2osbiVeYiEuPHI6''@;'; put 'put ''byRtSzRnQGg4WkclTFgre3ksRVokKlB5SkI5O1M+WSlLYDY1WFYoKHQiS2BpNThJTHo5ejkhVzVmeV1gdjtxencyM0tmWEt3UlBJfmppOzwvT0ksUnFxe2lmLH14XU5pfGV+eU1MTHNbOEtucF5md0ckOFEvYVdmdiooNmV7OSVxY3s2RH50ZH1xNk93NSkkUVd3Oz57WCpXcXgiMmoxd3BhdyJV''@;'; put 'put ''MDp1alk6JmI1KWBYTnt1JHdkfGc4V1F9cXd8TUhLMUI0LERqMDMqKlhvcmQyendgW1cqNkFML0lEMHN8bGx3LH5WPlJlcSM1eGtCOyV8PWRJKmxzUy43XlFFYHkjYW1KZWU9OGMsamU8OGwsLjRlKXk6Kz9peUUhK2pQZ2crZm1hbXgxTWs4PEIsK0lxVm5gQjo9ISNbOCYvU2JETTdqTWs8TFdq''@;'; put 'put ''I1ZDZlA4T3t7IWhmWCUrOiRFRXQ6Q34zaFA5RWxoNmhrcGw1ZmIxQHVTb0txUShZeCRnQXlPX2AxMVkyJHZ7ZWpTZUlDVk5jW1BrQSxiayhNNHw3VkczKUYzKzt6MmtPaF9WLHwlKExpNVorLCFCI0RNTExhKVt4aD9oXTBjZ2wvYntVKmd7WnY/bi9YciFWKGhyZT5VKDI6OUVkYyxYKG5LYEFb''@;'; put 'put ''NTZMLER4MERmaGUxXXNqYEdSZ2tlW35YKkRqVyRdVGhkQ1NeQFQyTWFSQGBLZlRlWmVKOEoiWlgkPXA5Lz5bYVVEP3d2cHE5MDJ4NGNRIklrN0VMeGQ4RXohZUEsfjdTTHo1YypCZXNFW3VmIy5vSzl1JmxtK3VMPV0rND0ySmVaOzQsKnlGJileeHZWZmp9QENubFloWWVNcWppSzN5aG5RSUNG''@;'; put 'put ''MiV9TlJNZ2NwSVgjaXFzTzZFY0VzdVszcDc9aXBnV2MhTFttMlosXnhRL1c5OCZOMTx3IV0hZ04sQjNjYGEkfjAwPDIuP3g8bURadGFPeCNPXnlFRnIyPnl4azZoLG0pNjNYL3xqSiFOeV9QL2VVQlhQYj8xSmIxLl1PdH1IcDd8T0NRL0VqVCFadDQhLlpRJCFZeCpWZypSLE11ZHVMbjJiOntd''@;'; put 'put ''NHw6KVZqMzpsPmxZMSxSdW8yeXE9LGBWJlhGc29DaDd2IUcxQU80JTFAJHUpRERxPXlCRkNaVm5pc3Y2WlhqQFI8OWZZJFpFTFk3YV1OaG1jPjBQIWNjPjJKa3JvTjR6RFQqYV1ZV109bG1nXztTUTpFNCVzQDYmemc/VUp+RzgpS2Voc25QLll2fSN9WWRvdlNvXWghMFUuOm4lZDIyM1VpMGBz''@;'; put 'put ''QGxSXTFVT2YxYWx3RG5vQGUoN3NmZ1NOJC47cCpaVEJyNzY6N0tiKDxaTF5NYWslUE83RVRHTjpIdTR8VTIuI0pJU09mcmY9YmwlT1FaL2BKKk1qWG1yYTFVMSg4Lm9FaFRqVFMlQFtvVk1jSzhRJTcicX1CMlY8UWR9Z2M/RnI/O2hDcERQe1dgKTpmQEk/TENhW1RpK2F9WEhuYH0lUSlLN1hY''@;'; put 'put ''T1d1a3lDOjgpS2ZFZzlAX3VmfjE9Q3drWGFSakVoc1hFOkw4PFdTMVV+Ij1YSG5gaSIhWElJUTpLJXM9bT5qbEdebipeUXV4cXxTNUdSLi5mYSwiRDxWNU1DU0tZfkJRYWt8SFBuSmIyfW5gaHNNKiojbXJXTFIrYXxZPFUoQWZgQGkjOWYlNDpELixGSFVPKW0/R18pWSU4KFk1RFY7eTxDZytX''@;'; put 'put ''OToobXVMZk0hR0RSNmgkJiFlViQwaG02MXFxKTRKRn5dQjZkSl1iX3wwfkk2cDErO35oeEU/fXEkVncxSCRYN2pvSF5lPjl6ZkpSOkJpJiZXUyg5S3JmeDE/b0YwNmxVT3JUVDN1OE9YWmFOcz02Z2NkeWp+TExEanI1STxSdzVWJF1tQ0ZGS0ovLGgkNHhkYDs+LGwpNG15X3h+QT5OSlYmMHdC''@;'; put 'put ''XzsiOy4vQygibC50RUNTKkp3eC4qWUF5OipAP0Q6LHh2QH1uOm1YSFJafnc0bXtTPVl9bkc/V29ycXVuSXlmdWNhbFVDL1lnUGJYZT06VzJDSXNsczFpdjliVGgqNmJdcy9XTXFzQmpHNEczYklYdTp5aiZTOz10NjhTOEwvbV1Mel1WaVRpSil2dD18M1hdaUhwQH5uPmE9LitQIWdKS3IrfEYp''@;'; put 'put ''OT9wKng9OmBxZFM5aGReJH4sd29BcGc7InBaLj4lRk1QWiVQRFdBOkF7RTdTPVh8Z2R4Pmo8ViwyYzNeYWJKOHhAVFohO0NMNy4pPV9CKEpeciZSSVRVbGdmQDkxYlRUcEpkVD1mUCx+Qls4Uj1SfFM9d3U6alUxVWEwdislKjY/OGc+VSoqVm9Ia0pwM0VPXzZdTXtEUkdiTmU1Q0d8SyspK1Be''@;'; put 'put ''LmRVcEFAO3wuVD1YKF1bNSxiUWZXVWxqYExkO0o+LkxUXyJLVDpnTS9jWUIybEhPOT0zZ31heC9dajhpRHJzJCw/S05mM18zZylvVnYvImplQl1FbFtINSpHcylINGdpdkRsOUlQaylPaWh+LGNMbnVBOFNCRG03KCReUThmNmRpPS5ZXkV9I3FwLnc1Ul9eY3VaUHcrV31ZNlVnKGhxazp2Wy8m''@;'; put 'put ''UGNfdUVMS1lhMTclZXBLdmZqR2w4ciRgSipXMFpPXik2eVdyJHBiakV5O0YkW2l2PF04SG41NkR7VS5jaEo8NSU+NHg5ISM3R2Y0bzpbVGBbN0p9fUM2WHJ3Q0Y5YDU2aX1dSFdfblshTmcpR1I4YUAqKSZNc3NiUWR0P0YjUk9nY2U/aTpbcnh7dEBSQzhtZ21sYzp6TiIwVHUmKlZhWm1lOnMh''@;'; put 'put ''K3h6SiFucyEjdV8rNy9SKn5ebT4vP2g+fUpNOU9IOVZDS1UwZFo7OU1LRV03UUw8MyY0TU1OY2Q4KHgsPXIkRTtmKFhgZl9GI0tRSiRWSVdePHdWKCVCPll2XltBb2orYXI8IlR4Sl1nSm9vL3d1JVlfaTtKSEt5aF5KaVUpKDJed1QhZFtLUVgxQ0tUX3lYZnw5JX1KKFgvcjgscDUoSjldMHtq''@;'; put 'put ''cGxDenZpJnRFPzR5VF5Ubj9YciZLaHVHYH5WbEYkQ0xAdHFOIU49JltOYn5qcDlVPHtDNixTKlFXIntSd1MrTV4wLDV+QEV7YHFkcXVDaERfKFJ1PjBpUTdNNzJRXWxAd2BlQkU/UlhbMWwhcGBHWGd8XTBsUW5iSyhlWF95JFBzO0BFaztNaFtyPGRpTztZVyMqWWVGU1t1YkhQaykiaW4+WUlx''@;'; put 'put ''djooNThURCw6V013X3pyMnlEUzU8fG10UjI0ODxhQTRaYE9YSUhyQHFCbXMuUHohP1VAbHpDWDVNXyxwUn1QT31pckUmb3BGdUR0e3BbOEtRSk0pc2BLZGNqUjY+PT1IMG9CMWVtd0ZSOn1va1VEaDR6T1o6LDoycEAoMiFXVzMkeG52dGBpeTV8UytoYmc0JEglMj43WGh2bD5ZK3ciYiRiV25r''@;'; put 'put ''W0VRUHgiX3R+eW48MytRIk4vXVBOX3hHRGtUSnpiWyg9aTJ3UzwybW84bl4hbnBMSzN5NkBsXUBNTnFoY0o8eWxiRlBKKjB2SF9YRFYsbFE4R1V1YVpgK3ZGRzZLeSFudFNWPUxRJEVGZ24rIVtmL3d8QHJpfUhUT1ArIkciVSxKVD10QiNbKnxGeUBKPmtxaGooWjxWXVprXV9EVlgkeHJQSSh6''@;'; put 'put ''fSgqLHR7RDs+UjF7T2hZXUJVKjNjV107bzViOk5sXy8qT3M7IWRUZEJHe3syQlFZey84VlFDfElgKCwwP0dfNCl4NS9pWm4/XiRlczt1Uz98ZyFze0ckQXpFeTc+L2tFRVEhbzdFJE8jRURlY2p7S2pdZndrS147PyklIlVqOVpocUQvIj5SPm01JSYvRnR7K3tnRDhyViVrenYqRGksKEh0TXYr''@;'; put 'put ''T3UiR2Y/Ky9EVChEN147YlVYTVd2cnwrOVorNm54K2J8UzBDa0FONlpkK184L3JfUyEjLnE0S1N3X009YUlMdy8qYkJ4UzFIcTY6cUQ/OGFqNyFgL1l5JXhZUGQ5fFZBOnkkLkNbVTosb3wqUTBidXlhbjQ9R2xHek4/MUl2O0p6aks5d19kZUo8a2oyJiszVFkoNlFXclI6RH5sTix+UThTNXtR''@;'; put 'put ''Inc8bC41dzRfakhUc3kwNyJZKip5YEVkd0g3NzJ0JXdZVX44fFI/UzhjNGJEMnQwY3VpUSxbRDEoX0J9UkVuIl81O0xDMWMpMl17XSh8QTRdWytMUHhJeXVXfFghT1pgbHluIURZPmNeOypNdUFoXnlBQUwlSVUzfkJAQmw3QXpNKWNEMXFLTEpSVy9HZmg4LkMsQ15AI3IrVyRjUStORUJHRTN3''@;'; put 'put ''d3diSWdkb3R2Lj8icntLJjlfd2R0VUgrP1hpZXdvUSJjUCMxKyZ8NFFvM0xqend1I2F9amY/eFE8N3omR0BWe2NjeGQ7YHRROz1FUCY8UEJ9JFtBbWx6JWxEUFNofjcjXWMvNFZ6L0tpRElaPnE9MnNHLEpBSz8zZzJGRV1CTWFab1c7Kzd2cDQ3TWpRWjdBeGdEeTs1c1NhWGU8QGt9QCtjL2kz''@;'; put 'put ''OCFMRFhXayR5YWtOX0RjMUxGT3ZbbzRPL0Q1KEtNSHVROz1FUCZeOiolMzQvcyVnXjtuezhbaF1nI043UyF8Si9xInswZGtfUkBPfWVmdUN0e0p8L2xJckl9R3ouZz1hUXk3TVN3UD9pUGorU0tmRVZmVEc2eFsofFhwYFplV2EhMVFXUWVeSClNSVF2S29pP3BzKHdrS0FiSTtWMWNmeEFZUEhE''@;'; put 'put ''P1VGRW5jODxycnlJTXtYLjtxYG1TbWgkTX07al0/a0ldX0ZSKGJKOWxeO1FWankwbihYVHdMSDwyb3U9KVtDRylHYk8vdnIlImJ8PkZrKTUmTExqWGZJPWk2PmVGQkpYYD9fO09xYTciaXk3MTtzJkZHQDdgRXtGWWBXS2U8VHBEN3xFTX11KSVTLHJ8c3I8QnFgdTlFfmQ0OEVMUiR3TUcoR3oh''@;'; put 'put ''NltNJkh1I3Y1IXBvWilgW3Z1NC9kZisjOF9Ge35hOzBDP1J5fmUrTlllLGkxJF5IdHt8W0hpMzZNeCF8IWAzTEtpYnt+eygvLHkhczhIXkUkSl80SH1nVkVIQzgmaG02QXZXbHZ7QnY3bSN7a24hZT1PTzVDbkVYV21lSnR7T3hYL15fZDpkbzI6M3ZDP11vW2RSLCQ2N2wrYWAkejldalFiPS8k''@;'; put 'put ''OUp8Yy9kcywmcWJIT0ksW1ZMKjM8OkwuJWNkZ1EvMnBBYG9jY2Vze2A1eGxNOXhHbCN9SEd2WEpHenVuIVlUdX19JVJ5W2dVZ0ttREpRd3hLbGcxaDowTz9XcTQ0JCxsKVdjODpFcHxPWEJ8Sl47V3pQNTdCQWRiKkA9YUJEQ187KktqMF1ObUtkfGRzJG4xSXJ5WDN7ITZod0ZvaTgqeF9ENG1g''@;'; put 'put ''Lmloc3NsYjFlczlnQTB7QEcoMklENlMjTDVgelcudSZdVGRZL0p3Yml1Ml9ma21nYTRnQUMpMT5dSkhDfS4qLClNInd4UT9XLlEmLFdFTT99PVQ6MzxuMVhGZUQwKTlrR189WmdBM3p4ZFZQU2EkRWZuQGgsQkN8RUgxemFTIkQ3Kj9nWnwxJCRXSmVLVmNfJW1ZTDdWO29OYVFpVS93T0tCSz9G''@;'; put 'put ''V2NCJnhEaHcoMDBQWS83fUlyciNyd1tKZ35geUwhdVRebHxhWVUwdXAkZ2NzdjpAaEZjel1nWj4pWTJmeV5iMl9QX0tGOFpufXJPNkJqai9iYj1vdkYzS096clp8KlFCL250aTtLdHA3YHBUaSV9eFhoejleflc5fFV3PlQoWmJoMEBfWnhGQjBsc0gmNEtwWClHPHUoVW40cGJgYCtQImI8R30p''@;'; put 'put ''bTQ1VWxgQ10zLGhLb09yJHBzSjRHfHR1NmlAdTIqM2MxdH1MRSlmWnU7dSoyIXBgZ1ZjTFZTX2VgLjl2Y15HdGtrQ1hPVmlEdj9SdTYhQnpQe0d0TjV0SXU/OGg1eHYvZVFxYnt7ZGludyZLTCxsKCY2ZnlbNSVxRHxObSRMMH1KQXUvcSp7JCNCLl8uZSRnKFN4Si8sWko4aVRjaW5uNDg/OHRB''@;'; put 'put ''KzUmVS9SX2VlMmhIWSg9aGEsT11DQ3MwRX1dfjJaUVMqc0VrQWx8WW5OLkNpSUNwfFEjcnZSI21URypVa180fS9gQnw0ZkxBUilbel41Z3R+UVdbajM+OzNmWnNwWVFLQGVQR0N6WndOaXNjTS9Oc1FNaXdwclRbZX5+fU86NEpkZDl5VXxadzR2dGI9ZHNYazxGOzJPcVd2M1dKUiQ0a0lkISpp''@;'; put 'put ''aWduPkpPSEhNPyRWR1hMRSkmIU1PR00+ZCkrdV54SSloSyFFNHsuTDh9LEpoNEw1bE54bm45N301VEFmYVIkXSI0bmZsMWo8R1FneC9uNWhkRzxvcz9BMm1Pb0VKMGNQLiJOQ0IhNCFGeDo5MnZOfUJyJVZ5dzFoMnQ8byEvM242T1NDcilMYlIqc2djSFtCW3ZzP0NZKG51UDdTckJoSGFZQnhs''@;'; put 'put ''IyhXZDArR3lhP31nQ1E1QSo1XzduTWZMTDFyMjlVMl47TEBCPGdCcGJuR0RsMHt6ZlVFfV0sP0coJlpvUmd9ZlJJVFs9JV90WXdnRFY4TnM/V2IwIzQhRUV1NHZpWVl5NF45cVNfdUQ/R2pMKjRWbXNddFh9dkJSdVp8VCt9UU11aWtFUl9ueEBhfCpRU0cvbihYeGV7R3NqMmhxQXElcS9aZC85''@;'; put 'put ''MCVeWEMmRS5QWnAsLltpS21geHA/d3t6V3JfaDt1YENjZlQqNn1VITBaRHVUP2Q+d1pfZkJFeV9pTGFhV0g3fVB4JClILGkzV2o0X0Y8XUtwOERmSCkjNGhzfHVDP3teKk9Je3NlRy5VYC9YQmwiQnVYM2hHOSVwYixIOHoxSWU5dyZxKVdtcigoMmtdUk1+djhqcCN7NGk8O20/YyZ4cmEzRClQ''@;'; put 'put ''fChycl4pPyljVU45blM/dTFWWlRFMHVmJDdsZ2pNem06SkRGdXwoclFbYDA2cSIqW3hSJEBHKHRzNWhlS0BVTXhKd3hnOSpnVVBITXZ1OFZaXkkhdl05bTFzVmAkZFpzcGVSRzp+ZylZIiwlTGV8U1p+VzhofFRANHhSMSp9LzN3JGE6a2h5TVB0e25mTXNVSD5qeSIzaHA6JGQvKjkyPkMhMUZW''@;'; put 'put ''UjdecTJlbWU3WWdoNndkVm94PF9MQVBobSUuJk0zdWYrdSVLZT43VnJ4VjlAYXdTZHQhKTJbOCY1Snk0dkVBK3g0fkEoXzE/KXopJSpqTCZxSV9CYz4qUm08akYuQHxiYDM1VlJpREBYckRpa1NQRWV+eW4sM3dEcGMxMTA4JEd7eDpGTU45RiFxbEIhM0YzViV3OD16I05bbVhycnFCe0dATThZ''@;'; put 'put ''VSRKRVdGUzpvTzR9d3cseT8/b3lCM194U3o4eXdnSH48JVdec1I7ZiN8UTBHe00mJXRNdUw8cC41TDw0SlBXSkhKRHBEbk1SdGJDbnBQM3g3MCVyQGtlfURfXVhyUz1KXn1CV257X2hrMTc0UStkXVhEc1lDIW9EK1hhOGVTdHBiS1BmWj4pJGdlXnBJMT8+WEFoLHRYbHs+N30kbUouPEhISEM7''@;'; put 'put ''ZV5aLyVFXy46OEpFN2VANCxZLmIwaWJwV3UmZ3EjdFAhYXgpIVAiXm9jPlV1Q3FNNVd8UDRHXnZrTjJQamxCYkp3UlpvbDIoSD9vWUQmPUwvRSVbbFdtcTh5SSI7JD0uaVV7NjoxaTNoLjg4JXY5eCsveixbU2dMKUtWLEFxVTgrclRCK1hWVUN6aWRYQGN1XU9CX24zSTpYeUhQQStlOmltKFdz''@;'; put 'put ''JmlQP1VpYERIKkQkT01gOixeQSt+ajJCfjBnaz4yZlI8IXZdMFpmT1hVaSohVHAsMF8vYT9zRTwjQSpgKzZsInZuLkZVXkZUIUllLitncklOfUZkZVQ1b0ImS0VsS0MsaEtLZ3hjZD1vLF5EbDw9NTBdcEQ6MVtJSjVsRjN8Wkd9LkRpKkY4dz1WIyUyV2o3bCIoK3lIcUxvflheOjM8TEcmc29v''@;'; put 'put ''W3YqTUVnIio2Jm97TXI4RWlqOUQ0cl5QYEJjPT49ajdGMlIuZ3c6S2xBVDIzW357R1J3KGZIblRaclhKcXluSEpzdkJYYiI0RD95Qzhye0doeEBgRi5UejtNVWIpTGBwdypIZiNMKXBaTHBwSDpJaUVSK0hpLm4lKFsxMFNRcjp5Pj1SOzA+Kj5hQWhCTSwqWXA3ZXkpeHhCOGE2JnFzPjswekd3''@;'; put 'put ''cmgxS35AQzw/OGwvXVdfUD5ObGQ5Ql9VPHd2Zmx+KGFtW1cickIsJltIUjt6XzJuJWNtYlVYZDBBfF1SLiQkYkFBU1RiIWNnRFNTMjdXQTRHI0k/Xi9lLjgvKk9nYXxsS2tyJkclP3EoVjRmUkduXlUwRDl5ajpSTDBJVXk/MldTZ1BhRV5hKkI3c01+fk9vXUBkL0lfKFBqeDdHRGczQl59ZEFs''@;'; put 'put ''ejlmU3Zrc3BzZXw8UDcmOWIkMXg0fElHZUglbHhQU147I3U0JnQxTVg5VTZnYnlTNCpkZzYveHtVb2gzImRYYztIe0VEPEJtPjhfRipESVs4VXV4KnchVl5MZlZkdEY7d0VOOFBQa0lmMVVUMXpUVShuMCI4dStkLmUsKyw8QnR+P1BURyR3V0k/LkA7fGwqVXhQfFhyaWlrWEJdRHFQL1RHZUkr''@;'; put 'put ''blY1SU1RSXA3YE5kVldUJihWL0MvNF5WL0MveyhaclN3azBLPEZNRUhacWAyOVIsXj56fkIuTjksZyxjRX4rWWAsXjhtSC5YdSlETiQhQj55OUtFWm1gU105dmkpR3NBUl9baFFbNXxvUTJxeTJJc0lsRDJfSCpSaVYkL0huSkQ/UUxCVTQ8UDNGeV9tIjVjKlNre1N9X3l4THNse1k0LHFnT0hH''@;'; put 'put ''PDpmM3xVYmtWWzBsZS8uazRvUTpIZE9oI3g9OXcxcVQ8WE9sIjh8ZDlbbV0oTSxxfVQ5b0Axd2EkeEdlNHFYbiYyOU41NH06RXRscmdrNC59XzhpT3ExTTFZXkh5fE5WclJBe2k5TH1jLmV5YkkkNEdLOFR0X2JGM315ISYscHtvOW97KW5VdGlXRWp+eV0+eUdvakErJT0vaSkicjZQfHJTUi8q''@;'; put 'put ''M2cqbXJrV31IPl1Oa2wlY21YL1EjKFN4YlRoOUFvOmRSZ2JeeEtKYntbOXRDZWs9ZWRGITIvLyt8X2MzZElSN1dSeXY4WVd+fTdgaVZqJXk4O2AjM0Y0LlREZ0NKS3Z1TltBKXFXdXJyTiFRKTQ8OTFgbGEhO2hPPCIsd1BObXIpdTdQWFRVSWs1N3EvVmRsS0FhRkZYQ1lCS0AjKGRLUyFuVHBT''@;'; put 'put ''emRwZUtJPTt0KXp3JUBofTh9OCw+MTUwcTRSKFc7dCsmO2wrN2UlQ2N8UXxGWiJHM34wOnFCI3hOYVdhRXdOVyZ4aHhkRFtjRzpMbjh8NWtQYTFoXUVNdmoyYi5tTlQjejwoZys1PW18bCJZRnp0aFtJcSw+KjA0XnI1QUlvTjg5Xj1yN19hY2RSMiJ6SFRFVy9ie2ZMLiwwaHg5a1VOW11zYmok''@;'; put 'put ''MldTKk15W3kwdU5SUVZlZUNhNn5lJXFhIS5lcGJmPTBSfStpWEgvLl9yPlJNJXlGNUBaNDBFJHNrZi9LNEc1TjRUcG9NN0RhR09BdXNJJVFBUT9fWihEbGZmPXw0MD9DU3NuTms9SVtNPTgja0cvbSJiMTwiVykpS0xgYCtMfTtqQ281SnVjVUM6bXt6JUZwMjREJUxjX1psOjhMOXBHcz8mPyRM''@;'; put 'put ''aFsiJF98Kl9VK2xOeigwTD9FZWhQXm1aQlhtKE5UfFJIRSM7Pzw1WVpeUCIvITpraU1RT1QhNWspdjdXI2N9ci9vRFV2P04hR0g4cSE+Vmk3ODNLZiN8QHMvdT06bzN9SU8pRDtKe1E9L1d6UWc/aj5DVno3fWg4KHVJaXc9Q15fbi5XazBBdWI7L1JgT2AjQy5MIi5VVmNsSjI5PFdLSjdFUi8u''@;'; put 'put ''WEBXR1UxV3hZJTFfJVFjeCExN1IxRDJyNEMxZW09e1hybzhWL3g0M0YvZT8wQSExMyNrVW5XSVUpSDRzQ0h4OEpOKS5kcSREXmNfY29Fc3JKLFVxb3B2QEN2RW1NOTlOODElQFQ1WXBCcnVYN3djeGxCfmc8aSh9WDRXIV5tampYVFl5dXJ7Uk1YKGUxQGB6NFc+aVhzfC9ObXlBQys/VzNsRF86''@;'; put 'put ''akQ1cSpfZUQuSn07eiQ7L09kQXtzaVQhelZ3ME08LFVqcWVHc2VaWDNxRF5dPVYmVlpHektjTy53QiRGTl8kKV93fG9UUjtgcFMveV9tJkouRSg1NE15X0Qhe3xhL21JInxNX35kKWNFe2opazBUMCZrRF5aQXpGeCxgcSJEel9LRkN2MWk9RnwoY3AyZWFWR2UoQVBXVjBAdURSJGttci9nM0lo''@;'; put 'put ''I0QkNV04PlJHNkMrd305NixTaiZzfFg1NW9aPEhwQWlzY01jWWgjW2lgfGMoZD10VUooVHEyPj47enxJWS9CMCJ+LzEhL28rRnlke3VmfnVXWmFMSEkmNXd7aEhtciokKiFlQDI1NXd4KF8oS1dkPjRzL00/aGUyNDM/eHl3OGRIUVdIcm5UYGM7WGIwQGA/YEFIKVtxeXgycEEzQmNTcmRneilb''@;'; put 'put ''LiJjZT0oPEhiczY0Wit4WFheRVJ8Ujd0bCFwWHc0bVksKGMhYng2Kyl9Zk5ZT0x3dV9vJXxsU0VEbSJXZDxANVlKLmhheUApIUtaO0VHfCE7MGFpPSxHbEZiMnYjXTklfChuRC56Ukh9Q0ZLc3BtMSYlO1hmYzI3Ij5lRHt8VXUoWCtUckJsb1JWZlFhfmZ7KCY3Mj8pVEtwL155MU9pdFdmTyhk''@;'; put 'put ''OUBKa2VDOEBKS29NcjFieWlxW2xGXytKI2VLT1d3aEYxfUJoTjdwcTE2N3EvVT5nXn08VWxoTm5OSkZ5TjB1O1UiI09pVVZxImZHUHU7YThINXo7UCZaWGVHQ2tRZWVtNnFZZTB+Tl9ZVnBJflBjIU9pYFFfQTFbSm5pfkghYWNNR2dEdlgoS01DZXgvaXxwTFVZYGN6SDh+SE9uSC5fcyQuO3oq''@;'; put 'put ''Pn0/eHJ2SnM5SD84djElMVpsZlosR0IpTmZFYXZEX01dTno/V142eD9vVlIjd1pMdE4lLEE2dkQ2KGM0c00hOlBQVTB2NCxURUhvd3krK09MSGNSNll8ImBYOEhBWTJuM1JDNl9RJXpKMDRZIjJMSH5DI3VEaTV8JSg7LFBZZTRjZyE/fXJVbDAuVUE6JWopbDE5ezs5YC44cyFSd0AmPyNQKltj''@;'; put 'put ''KHxMNkdtYHt8VHRzQkY4O3F5RGRVbSVUUlZlUi9JIlp5OCY6aiV9aUVud3R1S3RMKlFGSiE5diRLITV2TUxvaSpFWElCTkl5bXx1SDUjKj5ZYDU+b2lTU0FBQXpiQ0F3NFZCeERJSCJRLDFDdUs9dkZAQXRCOj9SRDJ6MU4jT1VqaHguTEFBQUFBQUFBQUFBQVRYKDQiOXB3YU4uJV5maHBYJV1o''@;'; put 'put ''bWNBSUMxRGlNSENqIjc0M2NhKjpvaUVnT3Q9YSIsS2Y1Oyo4WCQsTVVfLEtva0NLUkpQPkxrbiRwX3tbbVJ1RzZPQHBxI3NYUT4jKCtzSkBsQnRUdDxuYGpIPXY2Q3NdRG83JF1Hcz9MfW1KTjNgaG5JcHdNWHxkV3A5V1BMMjBacD4uMU5DOCxmaVluKDN0NUZgQ3xdMmdiLmg+YDNALl4jLk5e''@;'; put 'put ''I1hNNVQ4N29dRlVpRVg0RTx6aUBILH5YVn4uWih+Y2VCbk1kVD9UMHdWTm86SDA0ODJ+NkJ6OiQxPEBiZ3t3NyxCQkBEIzBmNy5sN25mbSRCclh3QzdePF4zQk5aUl47cUouWz9ka0koUU90V2dTaEp3YS80VkBXPk9mVVFveF43ZD15ZFo1e2U+KTt3Iz46bW1LcmJ4MnpNR3dlYW4yVjprVURZ''@;'; put 'put ''YGBtYSpaMVRNKTUuWClfUyldOGs4MFl9cGg7NGI6fjZURTFVNFN5ZzJ7SGEkKz59UUd5a0thZ1Nwa3BpKVVGUnc0I0pCaERWUmx9MXcjYU9weWNwTXlNbDgrP20uXi54enVNMkt6PntkcSlhck5iMXNJTzhxKWlfQkIpSyNYVFRMN3N1XkRWMUlZSnxCTW5aRzRVal4pfHlfe11kekBESit1eEFr''@;'; put 'put ''NXJTPG9UaCRCcSJ+PDMhKnp+XWRadzg3VWBRRCN4NEJMODBkQkxzV2YwQE5EI21ITVdKc3A9alB1dHd8P09ZZiZJaHY5dD9bPGszO3hpb2o+Lk9Ecl4rbGhCWFM2PjlOI1NvRzs4JXpoQTthWjgiUnRdOk5scDcmLCR2W05qPlIySj0oS2A4ZD9leXtGMlNSK1NYMlU9L2YyXWk+MlkramhSLzp3''@;'; put 'put ''VFZScnZIRStIPWA8dmUxYmAvM0ZVKURWdjdqfEZ6VkZkRGcuQX47KExaKmhIelJofnk7V1VUWiY9YjclfCsmY2B+WVN+eHZBTksjRVtUWT85aTwvT2xuVDx3QCFaPUBPZU0ifF9CQENNMzUqeWwqTXleZEI8UkovVDZfTXhPdHE0Yj9KWUdHUy54S0cqUnpye184elFGIlNrWlFCKl9acmF1WH0+''@;'; put 'put ''KHx9K2QmdE9LIXk9M1F+d3VIUzNBYixGelk4OVNgRl5UWHZtXSZaMXR9Wno4REVIKnRwRDY9I15jWld6PlBhKzRbW1ZLJmgpNjM7WihwOU9PfERbZ2xnbjl7MlU5TEVZSzRkdzVATG9HMm1HPW5KaEAkVVlqbCFmanlGaCxYPiFkTX0mQjg4dlNRZCo7KWMzTyxTWWZxPTtEKykoeEEycG01UW9P''@;'; put 'put ''Qk1tNW8yR11fc2BpM2Y5KWRDOzVlKkgocFpQNUNOZUtXJXxDOEYmWChXdk4rNFlGODtJWiw5U3ZMRiNFeHUiPjhxdDRnSndHYD9MeWZgIjBjaTx5JGVWRnp1KWUvOFNKX2VPQlZYNiV3THYxL3hnVkhCTk5UajdoIiV9SyYlZGkuJmFjTlVkT3xzVHBUZVc6dXAzPEV9VTczZ0BNKGdDU29heGg/''@;'; put 'put ''YUBoVWh+d053OnI9WXhJTCFWQHRLNUs8fWJZVV1FXmxNZnduKCVQODU8WjR9Ln1RTjg0MElIUj5YUntkN3RxY3VSSiolPnUzanwpWG9YZ2xYeE88QVExWjhOJE5ZNFFEXiRVUSR0I1grbz1KSExYZVNBUE00cGNpfT18ZHhsfVhLJVtOaUdHfEY4blpDNS4sZW5qRmovYC5rMCslfi9uQFA9YEJS''@;'; put 'put ''OnQkYzRdV2d8OSJ+Wk5RUyl1WElrU0htKl9RRV91ZzR9Ij1zOCo8RkFwPCFJM3wiL3BTV05Xcy5qUmlUeGMxKEo0cGxoL1ZAP0xePU1JRl80VX1lJGhiM0VDPiE4JTYxX0wmT0UxL1NeKHQoKjZkUkJQby8mezVdKHNfYkE+dl01L15tNGl2eFt7SCo0VWsjJEAveWFCYng9bXB8NSh4ZUQ1dTJv''@;'; put 'put ''YTl7KjI7KnJaTH4lMV50TFRaVixePkJDd0IiSzwze0Bsb2BxUyY8KF54Y2o2TVo/eFZiU2o6M0o4XnNFJDZ7TkdAKC59W19hXUJHekBeWH1iLFs7SjxIKFpTdmcoOUhaQyE4NFl3RD5PW3NVMFFYZyRVWWN+Y0hlL1hQVE55KTEmJmVERnY0SFF3VHt+d0hmKjZOMGFDXTR0NnJjW3tRIytxam5Q''@;'; put 'put ''NDEpYjFTdjc7d319NlE4ejBHdlJuODZxXl4sJl4hQDtsekg4UV5kPUFHeio/aXt4OyFLdGRbU0ImZjNdX2pOUDB4MiVCZUVMaWROSjxxPmlnNlAwZXo8dnpRQjRUOkVpbHRAUUhjcWd0KyFGPHhIY302aENATE1MJGAzaigzdl9zcGhbUGNIN3BVYl1jIXdDIXRwKylobGBhZDV+KT1yNXd6cUdA''@;'; put 'put ''V3BPOkJkbnEqMGpTL0Iuenh1QFtCJF1wWCs7XSI0JTdPT2cxY3laZnxOWjBDVVkpOlZKJn0iX2drPE5vNG9pWnEzb3xPW3V5PENuVmxQJV5tXTtUUiMqNkt8ZVImK307SGFKLzt1VjBAaTxpK0kqQ1owS11nPVhNY0FgTG5jIV85aC9Hcj5FPkd+N0VrJHZ9PC9xNFBtZm8oakRKaHFTIVspaEQ2''@;'; put 'put ''W2VpfCE2UHU5TFMhSTkvZWo9VmpTPltnRiw8USQqZDExYWpONGp1NTN2XyswV2ZifSsmcnxCNFtxQjZaZGQwRHcoTHNBIyRNSjgwSHAxTmdlWFZTLkNMPilrUixUZy5DWTQqdVp5Ql16VWYzWDZwVE5YI0EjXnN8T0psXk9jRGBXbExKYiRIV2BgNz59b21bPUEwKFtkZTQ6XXY0TFE+MVFRNlBl''@;'; put 'put ''eDdjJW5HdG5iWn5yKWZ8cmNqZik0RmwlPnFfbyldMUA6RDVdK0dOPF9GT09hXTZJel5ASHV+OklmPz5qPTo+ZXJPeXoxQWhkbGlXVGJHV3Z3MytSLldFJWJbSGtxUCxUZ1AhU3pMeSlpWEs4bGA/RmEqMlRgcWY9ci9heWowP20hLk4zUjVWdmkhSVpRMlJfNzR7bVA5cDdnY3VMfjReaFhFMGtT''@;'; put 'put ''UElZQmVJb0BTYUBpKnByT2h8TTAuTDg1UiFfYz9DfjU2amsmMmJhXUQpRGtnRTk2bCUrVjU3SHIsOCJNK0l7LFlSNEZvYT52bHtqe2Mifnx0enZfam90dVl7SkoqMUN4RlQ+ISlEcnYqamwlWjJ1bGtWLE1dfmZWaGdTZzBPK1FRdio4YzxPJTk+bkcyZDEoN3VbX0h5SW8yRGk/QXBySTB2M2Ri''@;'; put 'put ''dFQjfXIjOGZJM3BHKywsYG51e01bRThoRG9nRFAya3M6SmkmVSRfLF9gTWZaaD5UPUtMYUdybyxvYjNsNjJRTiVvU1olYTw7WD5+S1pSUVpnMVBgQzIyRXIlLD0mb0k4ZGt+RDxPOVpHdEtEbGxZcD54eUswJVh4aF9Zc2V7aCU4XiZMPkdocHpRJnkoN1tEdUVdVCVsRn1tPzM4M0ZiJSFYN2hE''@;'; put 'put ''LFlOQ2B0Z3lkc34+ZXBCTV1JaCg2e3AwNXxDVCNHXklLNDp0eG58Rk9JJCp0KC4lNlZmc0BnI2FdVW9YKXRRKlA6OjJdMUZHJU11fDxWZXUieWNacHpTdkJPOjF7YTtJNEQ6fHxURTw5YXIrJmpAQiVXYylvKnZxV3dpKSlQOSZEMH5AIzhaNHdLQTBEMVAucVhEXm5JdDxZJV4rVDRVJnttZEtk''@;'; put 'put ''a1d1ZHcxfSJNUHJEdnQ5R2ldX3o9d0sub01hW2BnVSlCfTVBRUlgR3wxRm4kblBXYWg3Pno8TXt4OUZnaj8kMzt4ejBpTGpbOUA/Yl5NSC5ZTzJyfSROYmNYOyNqfD0sVTc/PDt3X1RHKmhOU1ZfWlImWklTcj4uV2MzWFt+Lm9fIkBeV2FZSH4kZng9UXtCPFAobV84dGg4cyxPR0EmJm91ZG1T''@;'; put 'put ''Kz14X180KkNgVW03Ll9GISk1ZCpXTHx+YHUyWjw0JHQ7V0gqdi9wOG1dKjxyaVZtRnJhJC82PFtvNyp9VXBYb2BpbmQkWntSeFNzKUpqISlUVjkoNVgmPzRqOkBtczlLdjJra1AhP0MkOyZEeCM0dExEMjFWMT5GfnVAYnMyfFBjWUxfT1dbPGovPCg1SSRTfFJzYEJ4XSFnWDRkTjg/QCM4S2cw''@;'; put 'put ''MncsPEgxKFAlTSUrcmQ5OVs/LDFCNDJORjQzWlBVQnswfFVBXiVtWU5kfWc1WjpgPiMpKmQoU1BmNUpvbEgpOVBGPktIfHZORCNMW0ZAaDZUX2hvIlJrJDtYVyYyPD5INmdCM0RmKG1KN1YxYlJLQ1l5PH4ib2p+SiZCfnZMTUQ/dHAvcll7eWRRV3pOQTs/QylDYjRoO04vQkd+ekYjfF80dmEu''@;'; put 'put ''NSY6ZUA4NFJIWlMzNmlXaE5rITlbP0UyP147M1E0QlZMbnt0JE9HLyo/fGFtfFpDXi9zS3xgVUYkWVpaNn5ZQUhKNmxtK1B7UlZaRyY6Ln0uNCo2Yk0/NV9uZ3BndyNNP0NoI0hmOXRzTHwrV1NLbEdFajx+cnJpTUc1PklVO2dFPz17OlZ6K05WNG1OO29QVFlHVElIOGRqTEsudWJgZldSMzIk''@;'; put 'put ''YiYpeTRPZVo7KUN3ZDF+allTXyV2PmU/TU5DU19edWwpRFU6S0B+LzR1Yzw5MWtiOl1hM2swX3UlVzpgNjQ+R1lVOUVaJnNTR2Q5PmQ5Ols6eSZIRUxfN0VWMlo/Inwqfis0ODFmeUZTeXZASEMzKls6WjNuOCtBcGM7Si8malp1dndWPz1TInNFc3FfKFYkal9WYURHXkhZZmFBR0hxeXhTP3Fy''@;'; put 'put ''SH15O3xUQD5URjMqPTh5O2s6fCRwPkRWZzBTWGJPVHxYO1ZVZT9tU3ZuOFBwek5bL05jJDckSjgyW11AMGwqZERZRXcxMy9JSi5dWHYkRFopcT8/SXhbSiROLkwoRVo4LmlgW0Y4V3hNe080bF9xbCwhXXdCTU1gLE1yM0MhaE1SdmIhIz1+UntePlV8YXZrPXN8fiVpVj9rcXA2T3EpYG9+V3Bi''@;'; put 'put ''SVpuQEVJLlBwRkxGOTEldTFHPz8+aDY/L3hgQmFxcURSdTY8Y29QPmFlY1orajtFPEMlXWhsXVVlM19hVm9fdWNJJSU0X3VZeTFrImQsW0FXKGlwXVB5QV8yTn1aJThRaTo+QntYclJPQX5jOCZTdiR+ejsmQEppUXdWMzcqdkg1W3ohPU9ZJWR3Sz8je2BKW3JCQmdtXmZkcV5xYShrJWJlPXlO''@;'; put 'put ''R0JJU0BQY3FVcyt3e0xSKWpGInJQfjdEPiR+aCJHMjQlZkBPI2lxaFV3PXE9S0NibXJ2fDJCU0hMfFczKE4qKnVFMzdvJkY7ZlI0JjZOQWsjU0E6a3xLaHBYWTtBRTxrPytiY2pbY3JDWE5ZfkhsVUJEJmFbdENXSHlHJlhhY2VOIWo7LlUhT00hVFcqRExuWFE4cU5DIWtXWkw+ZUBifD5ne0kh''@;'; put 'put ''cz8jPl5MMFQofCVKMnx3QGtWQll1fjN4N2ZbKjNjMzxneTBXS3BNRXRSLDlzY0Bid0sxX1FvcCFaVGYpJFM/bVMsLlgpWDVsd01gTzcsTEFrRVVgaX1DSSlPZDZkeDYkQUZ6fnpBTGA4T3xVVDZuS1JBSSU1ZX5UKFFdXTNIQmZ5ZkklaipCbm9kKUtsZUMsRXRqTHMwZ0UuJm8+WSQxOHsjbi4z''@;'; put 'put ''WTdpOD9xelJTMEUwNnsiXlBfeVNhNEZZQTlwRlRrPmleKCRoaGJ5djlpIjBOdnxSOzdRSFRZcnkxI3s2dmEiJThYOUtrcWlGdCZPOjJXV0RiazNfOjs8cjgkTkZXWU8zTE0pcmRdOEdsOCwpZTYsQUoxXlFJRG9tbj5LSUM5KUs9X1JTVSk7ZHl5Q0ljfGpuO0MqZ2NpK0hsWERaWE91NDs2Ym02''@;'; put 'put ''e2ZBN0I4IjFxQEBUci9iQzRQWSJGNEdLTWM6dEQ0Pj9SRm1GR1FJenE9TlRESGBhPFVqb2N0MUt8elldbC9pa0w2N01XU1VvJCkybiMrUV06RTR7Z2VRbkVqcSFucD8+bFhyQS4kVStzaUMqSEIqLFUrfWNmcylwIWZDJmlFL1soU0p0Y090Zl0wUF96REI3QjdWOz5uPFpFXWNwOmk5WFYkYzN+''@;'; put 'put ''X3oibUw5UmIpcFh6e3ZBWyhSQGRzbDNiVSU+Ry5ob0h6YT41elRiOy86dmVzOWkibDhzUjs2bT1ebD5KVWl0dnJFK2dfMWdicCxVeGNDW1siYVp2SjVZWUpZMlQic0tEbDFBQXZIM1BvLEJxYXVSSmVeI2JHaEB5Sj07T11QaD8hQCwzO2BmRlYrfXxSXmp9XTJRezJvR0k7QnJ6dyxXT0VhcFBk''@;'; put 'put ''ez5VMSZZMVc/eFszTWVhanMuO3smUHA7ZDtMQ2V+aiRQK2krRXhpLHJHIzl4Y19WVl16a35aRn4sPEA3Tm1jPXRubix3Vmc6eEMvVFFOQ15JYnsyJVlOUSpLXVg2Zl1SeHhUX202ez1wdUk1bT90ZWZEQ3Z6LmF2K25Ke0o0UUUpXld1OUI9XUIyeDw8NFopK20+Mytzb3RxV0YmV0UjfDcoKWNj''@;'; put 'put ''VHR2I3VUI3FoLyljV35HbFJBNHcvdkMhPj5eYXd9VmorWGR5dExsbmY/WFkmdiwqWXpaRSk3anwucFo4RDdJSjU/dEtGJUhYOlkjeTc1OixxPDp0U3U5djUqeThwSHpufHBATyNfYSQ6JDBnWDA5bm51InJXRStGbX5+TyJWVVp0NVpsdnpHfG9LJVMzNDxxLzpOL3lFQ1FubGl0PHJ3fU8vdzpF''@;'; put 'put ''NCFHVG08RTpDTEo7MkNUV2hwRmdlQ3FKMV94Z0JIS048T3xJbkVKeUIrW3F3PF44U3tZcVd5KW1aIXxqNGNidXp1Vi5STERUY3ZiM1luKl8rM04yM0pIKkVxR2puITYqRUYxajcwZXJIeT9RazRla05pQFJbbCwyMyYyV259SVdsSEIwblFuYnA9cVYvZlJaMzdNMmQ5dlpKKCYyLmtLVjg/aiJX''@;'; put 'put ''KVk4cWsjakwrISgyYk19PkFzP3diQF5deyxgPFVKTnhjXnlLLD1kS0xVZ1UpSFp4dllAUEo0ciV4TW47LnIhJnI+VHt5RHkqWkI2Lkw3aVZpdlB1ZXF5X2JwKSRlZ2YrP2pBQlN5SCZRJlF2bjVeRF1FMkVGYV5QSGM7cDg9aSUhV3AqdHg6N11oJF9bVmZTYGBIZ3NKRVImNnl6dV40RSwqKWos''@;'; put 'put ''KjJBJlRJLD8xIlIoMnY0RCxeVWtKPGw1WF42Z0svNiltaUhUa1YjNEc/TnZ7XzVfMSx8STFhYVYxdTtfWGVlVnhMQWxEcWs/OWQ8VlBQJWNeO1A5Ui4rL3kmTXVMWC9xZSFjZTZyTXAjOj9SQktpRD48SCx3V10xY1ozVHpzPUFKcVtoKjkjOiYxTmJqcz1GUEVqZi9KdmteKSFkbUUsKm5ZQFVI''@;'; put 'put ''QER3cVdFQi9mTDZkWFUlYDYpVFFsdjp9Pmg8QnFUXVVJQDd7U3UpXVd4KjI+dGslOSskXWxFc005diZleTNvLzdvMjI1cG0sUnpeQGxBZTByQGwsQTIyVkFuMjdacUZIQXVMfUZCUjAhLzpOLGpBd0NjU2ohfXZENHlofmVENzkzZ3dnO0QsfUI6JVZ2QE51TC5lPjxyI2hTVVpvPmAvYW12QktJ''@;'; put 'put ''RiIqe0RfJFVRWCg3JWUwNmVgT0E0NUp5Wls3eSxpYXZwcnE5K25qSHlSRj5NJCE1NVR1VmwycVkiWXE/TGRXIjFbMCRWIVs4VGhyUjMkbC5Md3F8OHszZzR3PjN2MnU0LkZVO2lhdmphXm5kVERWKkIjPCRkPmp6V2R5aUVVZ0Z5MCYuYko8X21DTSZGJU83VnA4N2osMU5aSVVkTVRoW0k0UTM4''@;'; put 'put ''MnpobFV9SlE2PVY7bjo+I3lUPDV5dndYNXNJOmU/QD40MFJaZnooc1ZRSDw9SFYxcUptWjBIO2BULjRIV28/aXFhc04ieXZRJmBAUmJ9dDR2Sjk0TTl+WmpbPHtvZ0Y6Qj8sSyhfKC9UNmQ2IVRUbl94SyFiYUB2TkErckhTdns+M0hpKnhUc0kscl5HUUJtdWJHbW9QOyU2ZFJrJFY8bz9XWjgw''@;'; put 'put ''Qmd8Q34pey8udEVoTHdtTmJoSnwlQ3gweVJ8fi40RHpoQ1RYQFAmfllFIk9IbkZdOyZIdVh9YnB2W3RLcj5bVmYjXjlMLnFTTn4zXWh2M0N9bj1tbmgqVG8yfG1nJHlbJTBuOGdKNHZvUDJOSUV1LntgUkNSKEpMRHtYQUpzZzBmXXAjOHRUY0xqYVJjSk0vQyEpekZaU3gxbFF2RDF+ISlZbjFK''@;'; put 'put ''biluekpITD9UbV1VWTZ7ensuTVk8LkNXIyRlOyUkV0Y5JTxYMVVrMCFNL3FuaHtTQkBfbV46QXxVdHI4USN4OnVnUGwrMmpJYFNAJlJJLzg8aHEvJlVjRi9hQGdHdlJkeE49LkB6OVRUYTtCd3JbfVN+a11fMlJwZyQ+JnExeUQzaTR1XkVnYiY0bkZkY1hgcypkKzgjRTl1PnxhdWtmcV5kMUxS''@;'; put 'put ''Y0lpN3g7biViOSo1TTM8SDpYWWxRL1hmanxfamZzYyFIdTUoSEAkcmxtbW1lcE5kRXhjIXM9K1dHO1d8fnFlTj1VNj9yb0AoRm4rREFmfHAkLlFsRihxRERYRGhVdCRGSCh2RjFYYD81NkZ4JTtpck9ENT4mVWFYKT1sUkwmL3Rya3gqdCNvYS47Sz18SzhpOiF9U3VmdVhXPlVmSWFAWHI6eXNl''@;'; put 'put ''YWFbL3x2TSMlWzI2azNndF5jR2NVcyYjc2RSNU9nbUY5ajdHTF1WXl5WdjtgRX1oPm4xOjFDOHQ0cCRUcDRKYVJ0YDVuRSNYOF54JFFeIzB6PW5UbyNSVW1LK083Yiw2fjtVSj1jKyJed186MndVIWZeX20hYVtLOCh7dnYlQzZHZm5aQUYqTTJ1VF5OJWZBRSRgaD84KT4oUX1GbzdmW3V6azdH''@;'; put 'put ''JF1xV21HZHxES3BoSSg1W1tLZGQpZStbNSNqa31GTTBreilCcDw6PUE/eiVrfTE+VV9iW04vJjl0ej01R0ZXLDZuaXVTfGRSNG1vSlA/Sm8xLkAhTDZhcW0iKXImQ1R1KTFmT3pIeHh7SVVuLCVUKj15TDR9Y3MvbmdNITo6Y1QuQEska3E+Qyg7LFh0SjtiVlZgRlI/I3hNT3kodFtrO2lxek12''@;'; put 'put ''Xih3XSlxPFtFaTF7V3AuY2l0PkBQaTF2RVJhOWBpQmRqL0s4YTM7YXM9dXZeeDx3czBzJkBMYDJvYk4sdkYxZGs0L3xQMiVAfjR3Q1kuPiV9SDVEQ3EiSFVRMzxofnlDMG5jQnVwUFREYUxJPnxFIzVGU2ljUUkqI0MhX3tsJVtyVHMkVkAyOyI1MkQ5NTBfQSR0eTpnfDJ7bDo+SVpBdXg3N0JK''@;'; put 'put ''IT5PT0lsWGdMeXBOZGV3XSU+cDdmfk0rJTZaNF81Zkh8SEZfazhYciQ4YS8wcHg+L0FldCE4Qzw0MzEkYUBddGwkVFovUl1aJVlmMW9GYF1OYSE2LDtKL21CR2tUKytlMTlec1NzWyhOXnQyKUxIUUUuNEVmZz1+O2RmbDc2T3Z2fnImTSguZWZUekRWNihbcWhxJU46czdJMEUjLilsYmpuLzoz''@;'; put 'put ''T24kK2gkZiJdUz0vdFY8dmNZbytAQEc3XXFffGZ+OH0+QFJvbWJXKFBDfERfeDJUcjApdChBQG4uR2wmK203KFRMXWpyYjhOVjEvNGhAVERoU0B5N3tSK3ZLRSNUN1RPaHB8TTtaKiY2RCpjMDg0U0gjN1RRVlJ9eS4wTHspXUFLfD55VHJiZmY8JU1lYX0xMl4pTlRJWTs3L3BKTTYpc0BkVTta''@;'; put 'put ''ZFR0P1p1RkA4KFMkcnklL0VMfD1JdjNERSZzLmF4PyRVZldBeSNTSDdQImhGc3tNL3RQQlJdbF84SGw3LkdZIzgxQDZ3aVMzZXI3aDs1OmxbMz84MV1rOzF8eG1PRUVMYml3PllKMGo8aTQxTSpDV2YzMWcoJmNjRz4oellqcyo/VyYpMyJ8ZmhoUSs1NnE8OGh9Z3ZIMmkoOD0pJVRkLmIlaj1u''@;'; put 'put ''fltMW2JPMCMqPndrUHJ2dXkkbXZSUlYuXzJLdytBWDN1OElYcHt0ZUdqdGpoYDpXK0RDeiQ3RHddNT1iKkcvVWJwfisyPz52OEdjbl5bJmp5b3d2XzhZS3JJTHNzQnEsZGtiOlk/UG8qLFdHbFh4PGNLUlVtTl1CP193VCtbQUYzUmRBU0B1Y3JuOjUkMCg0S1d5aD8weigoTW1kOGNMUEUkVHpJ''@;'; put 'put ''RVlpLEtLaWw3OkRnSVdbfkQ5PHJFaiUoPnROT1lDenRPemNXQmEqQlNZO0xqZik+Tkc6Ti47cVtqITxGb1FKNkpFdCF6OFY0S0xMck5pYmtEUW9mVXdkfjpMZCJfVWJGOmNZfHwmImchc15GNip4Vk5WXyVXJk9gb0F3MnlRaU4laWJpQm5kREd5QDZvQTRMfmgyLy5jekUpSn5YK0BpU0U6eCJL''@;'; put 'put ''SmFtfSVGfS90PCRhNkZoXmA6SlklQit5bEs2aGJ4UDdUWV5HeEVJJitxJjdPZCVgelhCVT9+YkZIZE9IdVEmUFZaNmJXUXMpY0UrY1pgakxBUVdPWHxxWyhlc09pMD5pKC5hQ2Z3LDEmcnhFTFAoOj5VN31wM0Fzd1I5fVUqYzJ1PzkyQChHaURJPzpeJkFOOH1Mb2ZGTGhALEowaGNsPX1XO1F4''@;'; put 'put ''PXhfJExkPkNffUBySThZOXRlNUt9WiMrU2ZOWXExLHdIdzM/ZXtIJlkvX0ZIJnZufV4wenR+OXIzfEVbW2dFfH5LO106YyNWNyFmciF9YnpUTlR8Jm5hMX1kdnMiemZpSG4+X2c3LmdVU0hlWms0MTR4PGRJajBnPHI/XThwMGpDQiUyJG5RW104dm4hRi97VU9neDp1bDtxTDwxZkFrW2RXbWRX''@;'; put 'put ''L3ZRV0FUam18IS9tQEZzPCl1VUNXa20leFIkQjkqbm5wWShObW58TFB7XkgkKVF2JTpUd1VwQ089W1YqMF87RiJ4T2dSdVpnZ1IibVZPPz1pSWlKWnVIJXVQMykkSyJDKTo8eiZkKXgsQmhbL1ZJO19xTFBmQ0wxdVBKLGRsLnZleEZQRGEwNChIOFlKNXZzRS56bjM2NHs+WiMsd3JLWyMqbTp7''@;'; put 'put ''VGYyQFBNYl9jTFdgaDl1VyFWMDEwT2NTOm9hWX09fjlLRi5oO0xyZUlifjRaT0dGZ2o5R0UvOCgifWZme19ZZi5ZLkg/YlNLUGddd1FIfGdEX3NDMCo1TSkwUGpGVzo3MWReTmBocGpJLyRsM306VklVJjBXXzgudDR4X3hGVCo7VzBEKVVzMF4hVHpkKlJ0KUlFaEZaUDZUY2FPSkEkd0UiRVIz''@;'; put 'put ''cUNzNzVBVVhEJlteXiljXVR3MlpmbiElbTsrbiMyUX4wXS5uVXB9Wz5+YjNFVnRifG0hcDwvQithMDNDKkklO3QuLyE5Uit+SDhVVyY2aW0yJnc/dTwrTG4ofCFNeFJ1KCE6VV9IMD1yXiE+NnU4cm1KXjlYMko9TlprXV1GMSxBb3JqMEpyTH5+b11tT1VldVRyXWo2LmI7dVExQWtvKHNyTXpY''@;'; put 'put ''M0JPLz06Xn1RZU5YZz8zWk5TKW4qbz1qVDE4bkJWNFc4RFNpfVVKaTQseHEqMHZSc286VD0lMj1LPTA4SzV2YT8jeDxkbGRSLC4seUhHbXFbMjJYPCImNlh1M1tNaDVsKjxlbXE0bD9QRlJ5JmkvYT8rZXRZQzh3TkpvZWEuKSNzfjd4V3p3fHY2ISUqVUhaUyU5Wkg+NHE1MFhDRGd7ajJ2R2J+''@;'; put 'put ''Z2Y+bVRRWWVaMlQhajh8ZElkX1FzNnxCO0M5YT4rXSYzeDd4WVVRTj4zaHNkVFMmRVleWnQ5aH1IQkIjZ1JkI0NUOmkhISJ8U0tCdkEjVnlyOChZPnVbLkZPfSwubGAoOip3djhqOj9kR3FnMFo/dCR1MWJkZjE3SDxbNFssNiV9OVRRUVU3OT1ETVt+OHsvYW08Nj5CL1NyemVEXyElXkc4Y0wj''@;'; put 'put ''aFo7QXVxfCZtSW4qRjxUXy92QiQuMTtMdm9Pa2E+Pm06TEdhPE5neHpkfWhIdnxrQmFDQykhPm5bQ095S2hEYWwlTkc0RDNXQnslcjxRRnxoUFRbR0UlUHtYcHV7YFVXdyx9TDV2Q0JbJWY8TUU7YkQ2NlVJRnR3Tkx1RWovYD58KjI4RT9CdCF3QzZfYVhsMjFFQHhPRDxYcCNIdEByaVhdQzBQ''@;'; put 'put ''XnFWIz1wQyhhTypzR2dAUiJDbEp5amxBYUVeSns3KUU2Sj03VyxrPzQsUUF7SXZrZ1I6KmddQk5fKVojMlFkZGNjZUQhbXpfck8mKVMyZ2x5Yk5HSkQrLG12TToxUGF5cztrMC9yd2BbJHAvTVBkZT4peSJBPzVvcDA8Y2pDbGN6O2FIXzcofmkvZjRBNjU/RTZbPEsuTk0ven5PVE5QTUFlPHkv''@;'; put 'put ''XWh+XWRRKDJvWSxSdDs3aCEuJlBlPn4zXlkwQiJ6T2QhRGxhVnZGV0c2aGByZ2NrIyxhZ21sfHIjXylwVDwjVUdYRmQ4KTBURj1fXjJkY0dSaEk3QTRkJU93e1JJUHEmS001IjhRdipra0pGKGRiakBOWkFxOj8oRGQlXiE0KGx2ezhveWFIcEpeVjAzMCk9NWIlWk5mM0ZtKz1yZzhmc182cT8w''@;'; put 'put ''fW1sbVVrQVdNTXNLfWhCZCledXxKKXxQVDVadllWe2ZuSSFdOzZ0Xl11OXl6b1hRSDRRX2x2OFEuSzMqd0M7ZDBOWlpHUCYkbk1YOGc/dXh9NVM8LC8xJGI+UTQyTHdpcGs9LDFAcDpiL3Ilc2cqMT0+M3p0KWBwaV1yTTtadCpBPmFLMkliWVUkKUhwJUQqay93TWdJa3B8bDVlfHBZOUMyV2R9''@;'; put 'put ''MXN8NjojZTt5R1ZMXU9hdVVfZ2s5InZzS3xLeGNrfjhrWCp8YXJBcDZgYW9rJW8zTlp6PXVoVGNAPTY5LipINltNVC82ImZuOnlITlE2U1AvSl97a1hdUGx+Jm1KMHtxKVhgPGF+MSJAfnU8SFhkPGM3V1ZeSyEvL0FbPCxiKjJianM3dCNTVXZsajtTeE1bdEJiUihaPWRxcl1Cak88O19ZL09C''@;'; put 'put ''LkAhVkBZKigxWVYqPFRwOiUpQXA0OzVuJlF9e3wzT3pnJlBTKiRmRiNEUXEjZnVHd0k5NThlbkRET2xvZmFweHdAfiU4LyR5Ly56YWNlcXVaV11lSFZQO0J3STghci9bc2YraTFtOn07UmBeQHFAQDVeJW4lJEVXJGd6RSpwSUJrZ1dWOVl2NUZfanZUPnVlfUJPVk9INFRWTUxvYU1jRiZ7XilA''@;'; put 'put ''O1tyeVR9SCR7X1hlVEI7fGlueFpJR3VNXlpPS15VY2VgWiFaI0tnKGZ0eFcvam94Zj91VUUqZDx+X247KCFgZSRxO28yWTtbVEdPNUB5bD1gekB0Tngwa0hWYD5Pd2tHbT8+d21Ob2g+MSR3elBYdnVMcSt9YCNDYHh0fVQxJk5EY2I6UkBjT1YpenpVdnFKMG5SVEphMHt0ZT1RMWJkOThjN1lp''@;'; put 'put ''QWh5Jiw2dkZeQmVIT2AxN35UPWx9eXh+SEU3OWo6RHxvUE4yYCxDVzZvaGFRaylmY3s9bl41IXFNbyQuQHNWWHtPJF59fWVvOiZUSjF3PVVsIVE4Wlh6TkxRJSt2bWxpJmJ4Zn51UEN+W3FXRGopbGlLZm1gSG07ImtXTmglPTxMa0J2eWNFclgwbnlqZjFjVFh4dD46YGt2K1prPUwvKUUiYjpS''@;'; put 'put ''LFhKRmMmIVYpN1VrS1t2IjIiL1FbJWBlSUwrNnFYTWNqWiZmLkt6PVRXUEk4VzxKb1lPJl0vNUx5VWxlNWEqNlssJCV1OXxQWmZMVERsIi5fNEx9YCJWJmdbZl5KP3FYWTVNNFdRN2xpZ3dua2svOVplX35vaUVQckFFUm9obCRvVHNkUTVreWQ2dTpoYXROZnIqTk9MblUjOHcjIWUvUGpDSjYl''@;'; put 'put ''I19kWzcza2ZlRi8uaiV8S2lmSzJbdlV3eklxaHBDdl0mZSRTKzVnMV9jTmJ2V1JmNTw0Kms1QjFeVk8wR3JzJCtMd0g4SEAoXVd1NUFGVnQybl9PQExMKUlJTVlSPll4WmslTEUrNCt3K2VMbF08XUVDbDZ0QytGXksmRF5DJWsoKElkMkJhRlFIPmVLQTQ0Vkp7TDtWdF0kQ2JTaj9JZDtweHQ/''@;'; put 'put ''Vl4zWjkmQjtTLyN0bCI1ZXBDNFdqUlZWRVZObnhTIWMjZXUoJn4oKVgqXnVWVFFgNCpTZ0NtOS8xRy5DW0QuX2N1c3RGIXohUSJqTE0xND1obkwzbUVUTlEiSWRPaTdFN2oieU1aXm80Xlg6bzM7TVZUS1pAW0BgIW9kXz1hJCVwfloqYmw/YVJnfFAvLz9BKzFffilxajl7ZGNFMSRvZz5edzNJ''@;'; put 'put ''JDM1NHMpa3NXalZAalUibzYrJmgocSQofnFeUzN0Vzc3ME16azR1KHxRek5TQjc+QDQ7M3RmRVdia1toR3A1ZWQqV3VsNUA1Q3tGRDY1Pnw3aHVoPzI4MncuR3tlJnBCQSZ9azhiQzFkP216aVI/NVgxQDBrTGNZVUAzK21WdlY0OD9DXXFfSll3NXlBcEdRMTMsJTVaTV5fbzUqeWUhcTxwP2ZV''@;'; put 'put ''QWhxRExFV05+PjVCJXl6cEpJUTxieTNlciFmWj9SeEU1STdefHNFJCFPdFh2bmNiaCVsN2dsdThhYmJxJCt0NVdAQnc8Z2BibSQ2OVBATj43NFNkUExkckVweEZGUk5NdD1GWkdjcVJGI35bK05bR0VHKHk8JE1pb3J8a0JeK1deZT47UXAjUFdtOXBPbTJBRmlWe2MwO149fFQ1RjgvMyJ1fjJo''@;'; put 'put ''dGNLUyphMklDV1REcS9de1VfMjp3ZipsJSV2bCshYztYa04wN1ozKWB6Pk9Cdis2eXBXWVNnQFI8VShoUFk5P2YsbUt3VFokTn0xdFVRazBodyhqYHgrcClnPmo5X2o4b1pTU31VPmJKTEdkOUpwSXphcDh3eWJRKVlsW1U3XSQiKFY7WDdiZ0NnSnNvam1iKEgzZlN6fmQ2cnxHNCQ6K31PMj4z''@;'; put 'put ''aXYxc3ojUUBbZSZJKUNWVytYJS9jJDtnXyNdVWFBMXshfn1HTnM1SD90MjR7alcmS2J4M1h4WEdfel95USkuM3wxXkwzRyFkZktadFlYZ0tSSVdpRSI8YVR3P0VaaXxCR0w+eHxsRHhVSGo7UFpbcFM1XiVoPn4rL3B3ZEl6ZW1xPVg1b1k4JDtzRzpzOmp4OU5BIXQ+Zk9yXWtOQWtxMnhnRSpw''@;'; put 'put ''UlNMUXM9Smk0e1MpWyRfMzo5MndiVmRidUlCZjtsJjR3ImdrYz1OUGwuKkwme1J9cTkpT0YoJGdNcXVrK1glQHBCVHY0fDQsWWlBMEU3NEQreEhTVnhNYlEkMmF3bEFKJGYpb2tAZ3Q1MXE2P25ATHIrdlF1ZU1DbE1UKS9dZlh4RlRLQ0NRdXlRXUJBKnBFayw0R1tCckdCYTI8NFFnOSRJU1hp''@;'; put 'put ''QDNkWkRgYWpybk1Qb3NfP1VZRT9HT3VoQiRaM2g6PkVHfDkvfUBpfmt2NHhkIlMpPmp8InVwc0liM256YjY2dkw9PX44fFl7aGVJUT5CO29CdjhINypEfEQ8QU1gV3ZwPHdwNiE+Vk4yQSFGTklrW2wwUllYMy5xKU4rT3olTSxvLGg9cnFyImN0ZDZGQS4hcH53YHl4NlJNdnRDSzF1S1RNKGd8''@;'; put 'put ''Mmp9LzJbakVvMFdiJml2d3dHSzA/JlliLzwsOHFzbGg+RnEwT3MjRFhGMTIzPTgpM3ZGMkJOX0MiaVFFcHZrdjxNIWVMYE4rN1p7aTxRPDxoKDAoUkhdXTUmeDIuIVM2P2YhUFpaLk5kOFN0ODx3eiRTJEoiNmpqfG5fNTVTcWYmei5aInxPWXVXQ052I1Y9Zj1peSZBZSk2aHpOZkl0X3Isdmoq''@;'; put 'put ''UittRyJaT0AmcH1iQ1VGRS5+Yl9KYio0Y3dCc3lzcG4ofFl7Zn48fjIrKHk/TCZkTFdFXlZIdjUuc29MdV1rQ19LTEVyY0VtX0pFe1kiTmZxOWd6PkhPMX1kNloyIXVFNEoiOFNaUUBrTmdiVn1WaERiJkp5Jk5lPThZKlhIIWB6MVZnQFN0O1Vee0BZVGR6OG17Jnc7N0lyaXBgdzZ0NEcsW0dA''@;'; put 'put ''ZX4sPzxKWSEiTGVDcWxMYEVzb0xpbUY1KllZaVdXJmg/TiJpOSNoVjh2RWpLTU5CVEhVcFBGJCVwfF10JWlvKU45OFdTZVovXTY1VihCWGhJVCZXZ3w+UEByU2RsZixVaSZ0RyJVOz5tSFhIITdkNH1dOG1jRXFYJkp+WEkzPDZLVHxROCpAeWNHeSEiT0VHK0tKbEZ4R0V5OCpuT14mZkpXJGZL''@;'; put 'put ''PVFLPDtPUk9QNHxfODQkazBgUSRGSzVTXywiK0Y8TiNSSGdeb14xMWY1KUF6NUEsM2wkYEZUPnwxLHldfkcsLCIyPVF3Z20zO2IkZ3oyazpXfT5jKVlefFJnRlcvPSN9SF51KTFffFtfO1Z7aTgjb2l3UEojUUQueCtrMVJZWEFRb0pRS1IsZkFVUGh3OFRsQ05DQ0lUTHlUZU5uZSt7JCM8OnUl''@;'; put 'put ''dUZSenZ3ND14RFB9bF1QcFtEaW8pMF14JHM1PnI2VWgibCQocGx2U3JuTjB5MmV3QCY5PDgocS4rc3hWY3FXXTs1Rj8hSXN4bTkkbEQwPkFwTkRoN0hsKEpUdXtCU0ZjQlU2cU0mQC92YlFKZEwyeVVhKncsYytYeGpMczEyJWZbajZRWmN7dX1VNWIxQHVHdUc/YU17S0J4MFJ8Lih9Sj92OlEw''@;'; put 'put ''X3YweCNkNFh0aGBuWnNpMj0rVVR9TUs9TyFsP1hYMl9qbTIibGBERmpYI0FQXiMjJTIpQFRnbmFNfnImT1Rte3N7YEMuWmBGTDU+NkdUbzU+Wzg0U1dacTMuKiNLNUJhX0RXaGFQW21YUltdcy41TXBTSmdaSlJUUUQhTzMxPGVLPHg/YyNkY2dEe251KGsucWgjcC9lLFU/NkMvIXVlJHVyIXFG''@;'; put 'put ''dWFDZ3h1Km1xanNrUiNHNW51YmBJdkA9XmczakEvQ30pIzFBTW9XM00xWHJkUmNFOjYiSFp1WSZsQFl8Wl1jXW1uai9gTCFIRjJiOmw5Pl4hQUlzM2JtMlQ+fi4pW2pfTGFVITpUNHEpbUY2SXlnRE9PPElRd11nTnF8bTFraVZ9Zi9tNj8wWHMyPHtYLHRjcmFtWCQxaitxSGo4RyQ3UVJGSEMx''@;'; put 'put ''ckFQY0YyNVl4SjRdb3BPR2w8fCZIMVFzaEUpaFFodkJNOzF9aGVgYUM4Okg0QHApYTloL1ImIUZ3SCNdSiUmK3JFUldRfSwpcj9ANGN8en54NDRqISRIZFl6cnluRDNxTFo+Yz1lOThoaEBwSFhmQTUvbnBaWXFiKi5YKHRaV2hhdEshVX40dyZjcTZTa3kiJTU2dzN9c3N1X2phOHkreTlGZj8w''@;'; put 'put ''Sk03Zy8yTXxDXlpFTHhOLDRNNkgrbVRbdTxPUD87LC5oQV5idDBWXWYsK2MjRXYiUUEsK1o5XnxXNmg9L2g9Pn5kRGZ1Nkg1Qzw3Vn0/U3M7a1d8P3A2I19HSHYuT1YvekkoKDQ0SmJqPWIoZUVZYlEpT28wSkgjNzFKMXp1alReflFvS1QwdjQpSClPU0I7ZXZ1VXtAZFUjUzM5aGpuelM/NGBL''@;'; put 'put ''KFsmOzdpZ0J9Kmh5KHRxRzJ8XjBwem1GdHlhUmpxYiN2alVXMEZLQXVjc05sTTdpaCtYNCRzXSZwLDFzLkphMyxqZkZtP2c3QU1JImI1M3pGayNQVXU6cWojbiIwQkREaW1XS3RKTTs+Y3FZOi9CQFkiaVQraUh2XS99V30wOFFbeHNNRWxTO3ltIntSYCRUPkIlQiRrczFIZ3gvP3U8ZTdZRVlW''@;'; put 'put ''c2BLImhVUVsvRzgmZzxmOW5fOzF4RSM1KG5Tb1p7NkJqdXJFbVNDTCJoMUhTVlo6VypufUMxfDRyclgmcUk4b216Yyo9RGtabnxebDVVUzg+dDpOfX50OFZbZX1TKDx2eiwuRmEiWyx9Wk5FPyU5ZXtsJSNzeVV8cnpyfC92S2h1eTo5dyZYcUo6W1Z7PUFyZC5reWchLmNjWkpoaVN+bD09ZSF8''@;'; put 'put ''XnM4RGNYZENVT2BMKy94Z1gvcDJ7Om9tcVFeWUN3MDA/UnJhPyM0PkB4MDQwalZpNDEyNTx3SmlXVF9xWCNNcCNxUlhoaX5lYzhJK1IhfV9GKFlWc0xdTFEjfmZ8RXUrbTNddSkiYjAqKzJtUkM2KjUkMFZralQ9bV9EUCw+VXBXSltYTSolPmlJTTdPI2M2XjxsI3FfMF8/bVIwZSI+THkmcnpb''@;'; put 'put ''Uy9MRmxbYkA4KSt3R1graWApaztlZz9CQThnTUNsUF54bW5FOTo8VmQlNC8/MEB+R1ZtQXc6NG1nM0QyblNnaWQ/Jj5kZGFCJXMqfk1MQjBGQFZwUkNfSGUlT2dDKHdRXmghR0dAST1DWF9YRSpTTHJ1VjJFV0UpQnBZbEVjSDFXUz9pT1M1P010fXZoe2Z8ZChfRkgrJTpLVE9kd1o7JCs0K15a''@;'; put 'put ''WHgoakxUemxEdT9tUXFfVlM0SDMofjlxVzpzaXxmSjxVWzdIZl43VUByY0crWmlEMldOPil4VWhrfUxmYkwxbyx2WlAhP2ApSD80QD9IX1E0Ylc3WWQ4NGZkMWFMRik+cjdHK3hNYVU/fUNaeUNwJnRBT10wYSV0KkspX2hTLDMsZj5TO0Z7cnY7R3NKeW5INnlMdnhBW3Uyc0phI3hLS0dTSGVW''@;'; put 'put ''Tll5YHh0SmdRRDBKaWY3KWNXYEZzbGc5aCNJQlRMNm1FbG5MfGl1az4oX2VnKXFwIVRWWnspIXYyT3FfbWJ5K19eVG5HbSohJENudjlpVSs7LHQ4YXJfQipGY1I7Rit4dExkYX0+OEdGRHUybGQje1IoPEpOLE9QZCxWe2YjdVBqTDNQMFMveWEoPVVFNDpbPF8qWVdUV2Z7IkV1UjdYZWZIeGQq''@;'; put 'put ''VSw9PVghMmBmZXdqNEd7WzAiWHgsWUs3TjU9aUZmS0J+fkhRTmpMX0VCZnNQZ014O1FvQ0ZNQmBIZ2x9X2pMPlQ+O2B6YGBjPVtFOkBIQyIqcG5sQjZYSXpoRzA/RW5ORUVRSTIpOXY0L3tCP3FjYCs6XmJeUVckVXd1S1pQP2RFeTp6dktgL2sxfXdtOExBN0UwUEtsbSE5LCp2USJHTiN9eCgl''@;'; put 'put ''Ji93IyEzcjshU1lKPTsuQm01dU8iPWorQ2Vnb1JfJXloLDx5IjFrZzcwXlpOclthNV5VS2VkKiRBTVI8Im5zV05pXWtvflY2WHE+OFYxajNmd3N3clModCR6Oil1KnFrVXFpNyZeJj84cndhKkIvWGolR3JZcnU+c09sKlNvcWNEQSpSJFVVT1NqeVpUITxCJmBgUSUoTUBAYXBrPjxfUn1NcyNu''@;'; put 'put ''PFA0UVlPQnBGTlk0U3kzYmk9akxobkA8XilhQyZNXSpae31bPD9gaExfNzE2UTApRWRTam8hL3x7NC5LbDMmTkV5Zl4peWJkLnAoVDdZRVgpfD40dW98fiwpTEtFSXovXlhuSls+YDV9PDdHJjFuTWJEMW9TaHpUdyVUQyNxXWFAOng4OGgoUz1bXzRLKGdnLzticHxfczxDJCZ5e35HZmNQLihH''@;'; put 'put ''bk8jVmtpKSluXzI7Kl4lWSZNI2xoaTNJcWkuU0d7cFJ7YG5DejQ1ZD8sJFV+eW1INmwmTDQlJHYqd2BWIm5RJktOMGA+V0B+TEJoZjU4dztrd1dwUFR5d1MuRCh4dDxxMmBlTDIwIj18Tk9yIkd8T1Fva1ZQJXpONXFVX14yd3JaZmU6UyV5PF5ddU1Gc3Vjb1NYaFBGeEtwO15zMGY0WHBNVWBU''@;'; put 'put ''JTYpTj1WdUtgKSNDNWJaU2Q2ZHBCYltjZVVJR09DUH49IyNpdz1LekFZV3R8YTFjQG1SITx+VyNuWjxVVGQ/czh4PlBZPE9Qfn5fV3ZtW0ZnTS8jTCojXm9KWCUyPEZ1QDFQX1JgfDArXzJYenswOHAhKEJPPlhyU1UkOi9jem51cCwmJF9LJSFNMldCJClMcn5rPGZGYzxJdFo/T1Z4bDNIIyMv''@;'; put 'put ''bHA7KGlidjdiV1AuXzN2Nnc2cGdiT0V3JWhEOXA4VSg2U3A0OXYhb3dJQy4kTjNlW25jVCxZeGV7Tjp4bnhtRVdeMCxJS09zKXkzdThzLm9tVVU5QSx8eEAwbiRqImFvKkMsOV1FXjxWY1AyN0FhejZ+JDtJWG5tcj94U2xkSko/YThnJE9nY0wxSjF3QDJPZXFnUltPKlgjQThhLCFtT2xCfnVP''@;'; put 'put ''amZ8Zzt7bXU+Y3hldWkxR104RjsjVSpOVWNjZFIwOGFKT2RuMCQ/cTooIU1GazhafS9rTTt2P18pKyldPFJ6WiVfO2R9anUkQlc9SVJVQjRdN1gvQDsjdTRENDcvOm9MRX16cDVzIUZdJFBrYyQvPkVtIk1rJiE3I0FFVHQ2Y0chPStmZ2x1YWlvJCFuRlFBQCl+eGlQU3VvWDgkO2JNamRrMlBw''@;'; put 'put ''JV4jbTxPODpaNil1KSl1T1BgYiVHPUUyKlY3RkcmKXYke1pIejxFN0cvS0tNK15FMEEuUm8+LyZuZEE0TmwpbHhyVnwsOTY4WT5GO1NNbWh+ajppaT05TCg1dkA4WWZNPCM0S3RvdEVZeXd6USQ0bklFeFt3Vi9baWMjVFJGRVpYKXBfNikja2JSU09LLHc9XzRrLiZuSlFhUl5hUFJCJUdWflsh''@;'; put 'put ''MlJKe1BgODtHQWQ6On5nV1gxOGokP1E5emIkTn5QfHxxWn4ldFt4P1lEPCZnLzdXLzp9e1QiM0Vpc2syM2hEJl9eYEdUTS41fWt7Rjd1KyowO1M5ZyNuTldvTFl+aiRGZ1U2MHV8SSNvb3ZfLDl3RFhQSTJ0OH5DZnAjV08qdyF2MiYpSi5kXUxMTUB+NGkoYX11UkFaZkRgOk9OenJuOCQ6fkI5''@;'; put 'put ''PjEpK2peeGZKOUsyeE1bY2ZIdy8iVTU9R0c1WU53XUpaXm8yJTgqRG19YVtTZTI4QUR1NXg9dENERnFjUHg3MD1SOkVVemFoIlFOPzRVd2lXMlVqcUclQDhoZ280THddeG9RMUJWbWIzTytmVlFXejd0Y1VKMzB7L0RjJTcoMFlubVNnME0/SyhEOy9nPDBSMF0hKFl4Tng2ZlF3Mi40Ny46fUx6''@;'; put 'put ''JDJbMTJrVTpyeGVkNm4xZTQmfT1EVDthSzdySzUwdyxOXm5mW31gYDp7Q1N3WjJlcTJ6YVguJmV8cDIzbiNnI0xzJVQ1KCxHdzN3Ujk9UG47OkB7T2Q1ajxYTzdGTFtKRXY9ZldwYkYvR04vTFdLKyxJVjRMVilkSUo+ZXQlJkY6blZxUEN0VmgpYCV5I3p4Sn5NYzNXKXZ1dnQ8emEvbkUmLER7''@;'; put 'put ''fltve3tIWEVkK1NJUE07diJHPmQsZTJsInxDeGEqKWtrImlKUi5CaygjZUIzdnM/dFRFa1olTGI5bHVsL3BZQy9MaWlXb0NEW31sK3FYa05haSpCeTt6Vz9RSj5JOlg8I3JAXjwuVVNFVWNLMVYyZUczJi93O3x5djNedndvXVV9aWR9aDlLaStXLGhVRFkxR1BwTiVHaisqbz09RXFxXTVma3tK''@;'; put 'put ''WnE9blAmWXJDJkBFVXAwcSl8dmYxP0tTPj4pMl84SU0lVngoWVNwamtlSD1rOW9qR2YjMnxyI0VMbjFDY204ekF+TEtbdWlMSC5naUtzVzQyMGptbmlyO3RiTmAsQChiMztMZWU6ciwkTHgxVUljYkM7Iz44akpeMlJNfnJIIWs3KEcpX2dCPU1jKHhyeGxJLmwxODAoLltIT2IkaHlxTVdgQFNx''@;'; put 'put ''T3FEVn5rUnpxeHVtdU1XaE88Ll8vJWxkVWAxR149XXlgUmd3eEwuOFlGTF9uNk5RYj5SWTUoJntVZGZEeCU9aXBjIy4lYUcvfCwzMSxATj9rXUd3OEV1PF5UdlRbakp6VlA7QG91Q2c3Y29kM142TzVTLlhTQGoqfHpYTjRWSyklVV07TDwzaFJNO21+RH0+c2R2PXZme3wvM3JTVjd3WWNjUDI0''@;'; put 'put ''cjJYclNMZks9KHhEQi9KcnFxQS45N2JbSE4+RCxLYG5FJT80b1tQIl1FOis3W01Jc0BDU0d1WVppR2lUZ1ViZGJmQ1VYOEYyP2gqK0ZqWkRfJUZ3OltlVSVVKTk5QVRfR0g1dX56a1huLjZSJX1hKE8yNmBeTkZUQXdKZExXUXZMMFMiNnhvSWU3ZFlFV285Zj87SyN1OD53IyhhYiVwKypUOyRa''@;'; put 'put ''VmMoQ21rNDBEa3ErcnVoJTZWKEtMYGZkX3BdXXp+Q3NvXTdFel47S0RIJTZ5SCtGVnpbKH0hd3UzTChCSzhkfjNRMCsrcEVhVC99VERoUDkybDczOmxzdUU2dnw8ezFdY280blA9MixXdGtvdShYVUVPcUouUUE+UEgrWiV5UHhDQHNHViYlRC9lcFB8KUxaI08wZEwiJipne08hUGkmcVQ0Wks9''@;'; put 'put ''cGQoNVZyU2owYWNpUGlzJEI/aHA1dUVbRlhqbWs6eV8oLCI4bWB7Lm1PW14xalI9aFR4I1NtKy9qc3s+dE9GIyt0T2hLbkhsJXpOWVl9a3dpO1g9UWtkaHhuQ1dNe2lmcVg5bU5waF07UXElZjJRRUw5ZEd2eXlRXkhbb0MmNjxYc1JoKC4jVnlLY3BvTEZHYilBd0VoL2lWOnxCZnMhSUNkW2FP''@;'; put 'put ''amkqNHIpVWt6VzUmMDQxblBNNFNeO0wqWkx8KSVrKksvbTVwO1lbYEgyXVR4JiZAUC9gJC9ATkw6Iko4NnVuNHpxXVJ3JSw0KFQ1M3Y/Vn5NRzloTytsRTt2QzF6VnIkM0AhTThfSWg/N0dNVFJBJF8iY0wiS2o6Im87RXpud0A0KV1IdXc7bER9IS5IMGx3YmlqXWhUPSIzX2swSmpaaD5ranpR''@;'; put 'put ''TUJWXip2PVEldDN1dEd4Zi5bLmV1PUUhZ2o9PUJMaiZoPEFWJGZyK2N2IkVpaWQkWTVveiUhJm5MdipSWCY0dEZHSF5YfGNBRDtHJHJHKT9yOXdoLzV2Ryx9OllAYkxUVn1YfEwqd1JOPG9hY0NzTmU9cmZ7e1J3eDA8VEsufXJmW3lkWjduTG8rdW8uYTd2PCQzVkcxYTI4VjhsM2dxVjlXNEBN''@;'; put 'put ''PEA2NyV4IzB6Sj1eKUg6Pll9MDI2U1tgTDR4PGdfIXhaamBxKyE4I0c6XkZrYVQ4cUNBTiMme1NGVXFMa1BUajtUY0B0Q0ZmbWskQk9DQEYheDVXWXExcDQoLkE8a1J9QDVEPmhQUzRvZldjQ0dmN0NPMjB6andZZmlKREUyQX5QJlhGXzlIUiEkMlZ2N2dUalU/NHVnKyY0ZGdhc3ErM3s6eWxu''@;'; put 'put ''eG9MSHIrbmkpP2I5ITlNJntGP3FUJV1HTCw0XnJnKyVLXzhPSz9TTjd9bjhJQko8XXAvbWZtPURTMS47aGg2UypYNGp8QkpFKjk1cHcraEBTcGole08rbSx8Ril9UjVYYzh7WHA/OD5zPFcyW0pURCJqMiYqRjFPdChlP3U2VmRhNUVnO3hNOWZIIzc3aXRHLC5NLmFdUHJLbGx0ZkowRzUwa0As''@;'; put 'put ''MzZ2Mj4vXU8xR2pxVmEob2p8cDRbJXZhUkw7aGQ9YjlsL0VSblYmXmh8TE80UG82TDBxKDIzK1lCQ21dWWQodlhnKig9ZGlZcztPXXAhaFo/e0ZnRStOJUR0TG4qTXxwI0AoeCV2VUcoenNOXyN6UGg6cnFZYTlbbEFXWTQ/cXVbOVE+JG96OF5qWiFPaXVxQ2xALltyTD5ZK140bFZOa0tOeWM9''@;'; put 'put ''YG91SSt+P0c6bVpESWZ9SG5Yc10zVVhaaUd+KU4+T0UkfFQ8Yy5LXnVJQUUhcngySDclbVZBPFt2KURTS11yPHNib1tQSVI+KS9bQXheJkpgUW9mZGQzVkNNdW9WIU9FR0gpQHU9KG4lSWJudW8lOiooazZYM2dxaEpsYjkwTEI5TjJLQjB6M31vMHwvWndiajxneWM7X1YpNHRBU1ZEZSl1bzI3''@;'; put 'put ''ajFeOXpvT3shRVleMm8zeStxTn5XaVErfkUsfmpEQ0R6fjErKC5jLzxrZEVvdiZCKDN7VGN5dGcoT3glXlEvazRlai9AaHl2Ykw5MH5pJiV1QGAjd00xbj9rQkQoJUEjPkB7RmhnVyE5PCZRLk5TQTtjOVc3dyhuQWc2P35aSSp5QV98NVVtR1FWNSR0NGBoWj1KdDk5bkUkbilHTyZOKn01YSpQ''@;'; put 'put ''ZXx0Nz1xVUUuX1tQfj4+aF1RNHxZa007Q2wkJER+bik4cWBlKVJgbEV5R0tYaHR1OjJAPkNdek1YPywvTER+Wnd9NWBKcDFeRUk5YGo0M1FiKTlpYyFzRDxhMVdYPFYlSlBsaTwkXXIsWiV6Tm41ej9AdlU/U0IvbWNqe2l2bz5yWVY1NkFAa0RSXyFmTUttQD87cmp2TjorNVR5aSoyZzIlUUlK''@;'; put 'put ''Tj9YYGhyUzdoW1lqcGQxPC5wTmZgSVs7amRyNjZEK1BqXmo5KlRoUzw9W1lgOEpSfnt7P3M/b0N8T0N0ITUrWT9AVlhFcVtJbGg3QytyfTdRSjEqbzxdWU5IX3ByRV0uIUZPaX56ZFl9VWIkU0llTjkxXnVuWSJ9L1ckWW4pZStKcEA1OilALyZLc2Iia3Y+TDV5dGVVSmBSSjJFOk9YbEE/XXtC''@;'; put 'put ''KF58S2poOXg4PzRSMSViNn1bblQ4Y2N8TEFjRlQ3d0x2UWJBdVp2Y05laF5zfD1XdFA6K0s3LmllYXB3dixHZV1GN2k+aSpWdiVkQkFdJHJxb0dYJD1RJSg2Xj1eS01SaXkySEk2cmc7TnpPal1OVmxzPTx9JnN6MmFFX0F7W25dO3k6ajFRUUUzSDpOUj1zNGhuM3F6R1c8Lz1hckd2aFAsSVRU''@;'; put 'put ''WzchUXNXWk5BK141ZT4ye203b0NvVUlSRmpdaWZ6Nm9IclpUMWFQdTcrdSw1UT4mZyVxTmU3dzxOJm51YjQyfERFTkNNUz00VT9XPT1qWkJsMDF3c3EuNSp9anpJQUJSKFIkP2BhdVoheVkyQ29ORmN1eSN0cVdmfFIzKk0jQ1FLKXpMZWgzUD5YX3BuJSR+ak5NNXNmQ2UqYF9RP3JNIzxLVHk/''@;'; put 'put ''fDg2YUNgdWVSKjFUMzVGZFF4PzE/el5JVlI/L3N9UT5IbH4ueFhpJltfVCEkWEUmRElUdGY7Yj5Acz1qS0QkcCFhZFUvVSFRKTdhKlk0Z1Z+Ok0vKlJPQy5NKCReVWxsPW1CdCsxKFV0U0NPOCVRNnJJbnFRZXpXSmxsaXsqNG9gQ0VbSSJTdjhfS3U5RktnamklbTxyNDFDQ2BRX0JuenNdPj04''@;'; put 'put ''cEVdUTpYKnBaUkUrYUNieSo3PkJSITA7V2hlX3JrfEoxSW1zMiJlTkI1Wys5Sl4qR2wvRHZdaER7Q3ZnJDF5YmA/eFd6PWA1b2h9TXVRMHg1NDA/SmE3RXtNQDY4YDI2aVdVOH1FUnVFaHpILDMkdDtrcSR9eT9AUlsjZ00rZEMpYjMvVltZfWxdYktwQngrZSVEW0E+KjRgSmlPS3V+Q2ZhNDQ5''@;'; put 'put ''XlBdKSp6NXB5Ozs/KlpaOmBPKVJfXntSLGdLaUddQmdHU3UsUmVJaDMsdURiQXZmVFdBRnVNIXlfSTI0QGU1OERqLFBLY2R8dzt+Yl08bzgzR3o/amo3OHlMNWYuKWJhQ3gjYFJsZztoSDQlJG5kSEQiLFIubzxHXUYmYHBCV1dNPyR7SXJ1W3tbRXppSmxxLEw7KG1bdnN0VzMydjBxKG02T1Q0''@;'; put 'put ''QDNjaSp5WixIc28laUkwfm4oJFN8KlYzVVVvTiRLeUdkdnV1ci86PjtNOih3JXE4aTxRbE9vX0RwUiFscFJFIyV3Iylmd2ZHczpAYVBoI0pPU1hhT2F3bENGWmNVTmczYkR8Viklb3MsPG9xaFJfbnJeTU5wLDkiNW8vOVN8RkNUYDVaa1lTNHd0fkJ+R2NrOUU0cHleRWh+dXcoOTtlfjRecVNI''@;'; put 'put ''VHoyN3cjckdjbExdLiExaixjP310R0JheTNpYXxVYURhdDRKXXJuODxnbEgvbDpsL2Rjb3l7KEJ4VUxeUF5dbzRiOztPXjU8UTRYUzg5OCYiKmY4MTlTKzswMWQ0emozR2VmdWZHUERPcUBjdkUxZmFgVFZhc2o2VERfRT1zclokY35ZUy9YXnBnPkBuVzMxSzUmWUhkN2xXV3RxY3dvRi49aUZ8''@;'; put 'put ''X087K0IjSFlpQDpWenhDJmhEcGhTNzxyfEVFVl1MWylDQj9TO0lPNmNvLiR+dG0qN1VtXV9tLFhHUixePT9nQGV6SGdoUExNUStfJm0/SGd9MlZAPE45WkMiTkxuOWlOfndXSEBRLzRbTGxPdmVZfVNuOWsvWjVFUlAmVVooeHVBVmMpdzltQzY4bU9zYHJsND0jJGwvMHksM1JhTCwyZEN3OyMq''@;'; put 'put ''RSVscl42IkNycWVUYFB4LF86KHIkZntzRW9JVSxGWSE9NjBrNSFrJVQraWtqLEJlaTtiPElvc0NTUGNlXyFXWEZjLjhDZ3RkZk5CPG1yQktxajxueHQxaGpAdTp8MD52IzRQUlU2OEk7cEdpSmwsenRvfElCbzwoZ0BxbWwxZk86K3MjZ3gmVUxhenF9VDlnKX0oP146PFtPYXNiMXl0aEBzYDg8''@;'; put 'put ''bWN9KVZ2cGNKdkw3QklNKkxBfDkhcUx4TUM7Tm1xW1FwRnk9VkI/V05QV1FAPmNUIn5KPmxBYFhkNHlZdzJJb2ZtIlVXQ1Y5PkxKK1pKcU4iXWF5PSVffU1nfXJ7RFpEXzM9a3ZaXSMxVSkpQU8odiV1RS9YU3FjNWEvJjwsViVfaEl+O15lQzdjZGR5YXJXLCFwLm1XMTwzSTtAIXdUZn1xS2kq''@;'; put 'put ''L3t9Ty90MXtgU3NaWDc2TEdWanBwUGo8SU9jRX1vWWojOj0xMntFYnw2VUpPYlNQNmB6SnwzQ0g3fmB7T1FHXSRXKmdPQDEhTFVRakt4YlNNdnN5Unk8TG1tay5WWE4uNVkvc2R6Qz9jb0pQTVEoTWM/eUJEb1ZQfl4ufnlMajJnOXh3UzZgMW86eX1nTEsrLlgxOy9sI0tYInd+UDl1N0pURGl9''@;'; put 'put ''YGV+eVUkeV0+R10sTS42VmxJbGNeUD8rc3NTK1pCPk1tInlIR3hxZi4vUDdvU3tNUGZHJT1pPSxJN3BiTzI6VDsqeyxUelN5P1lwJl8+UXxMU3YxJWNOMH1FbXRZO0paMHQ1Q0dPKmxlYCh1PXopVTxwaFVwe3xzLzx9ayJPKERpXXlRXzRXcFJaRHlqa1RTdilyfCJuRVN8e2trblloTzokfGhU''@;'; put 'put ''M0Npc198QSR6fXBWTnpvWj0+LlRwJC5MNG1jS1p3NkZdJFh9SDpHQiYlRDxnTHlFK0pmdSlHW3ZFfnh4X3xtN2cjMXp4PkpjPTU1eGVDKzZVLGZCeUZLbGJ1K0dFITQsVShCOTc+WnssImMvQktPWj8uV0FVXnV0e1I9PVI2bnRsOSJSLiJHamw8VmZec310UUMzLnVQJnMkVCxhWi9rMXNjUSYm''@;'; put 'put ''bWVHMl9wbnlrLlZIcUZiLzR4YyNlNl9tXVd5NlouXzssN3lpO3sxYmJZeWF9UFF6UCU0KyNyWURAfXJmcyZuZHtaemthajlIVXtGZlhoNG19W2FEMkhiW3JPc0QvXUA5SGpaajNHd2VYJmtaTF1aWWFQfDpuLmxBZHpeK2ppP0c/ZDRnWjQoT3d7IV1SY30mO2QrTz9KSjFnJnpnTTNdZzI2Q0Rl''@;'; put 'put ''S2RBZDk/SDhoTCs4K1Ypal1Iaio/bnZATWRtU0IjS2Y4clQvJFV3VkorbTdFMTd6NG9wZ3JadT95VFhZZVg8NDd1KkJue3RRQFVAJjsvY2ZTQjorS1VoJUVKNzptenV5YFVXTDpULzZMfCl1ITsqfWhjWGl+bm0lODssLjYmaCI5aWlIVUtYOyQ+TiZERGt9YmImb0BLVTAveGFSOCFzaU47Kjdt''@;'; put 'put ''Tkl7dC5mPnAlVX0jdWlyazZNR0RFdFI8NV8+WypFK1RfWyg7JmVCKWhmQF88LiU5WjFKV2lKZV8jP15uXV4wYjVtKTNpc0BdJENGN1NbNCo6Pm8vfjlFOl12LENqYGtFejpKZWs5Pk9+UVVNPV86aUU8OVQvNmA3M0YjfG5wbHRwPWVVZzxNNWB2Ny86NWhIRUNMT0koKHRaR3dqPzVLZWN0Kj9N''@;'; put 'put ''eyZzYF1Ae2JeOjd6Z25UYktlLCQvKksrNDtNRCN2PVVyX2VeY2o3W29qb3BQekA0YC5UXkBLX1RWbSooK1t8eTNoI1JMREVTJSQrTVNRUW9tR2kzem4kY2whQnVfbGxLR3lkc2pYRVpGPGYycjNmLn5MPlEyNjJgWElqYUhHUkJSZlAreUJJZlFRdU1XYDVXWGRZRihmc3VARypXIXtmWF5eZ1df''@;'; put 'put ''a3tOMkpIb2lxUDwwRE1HLGNzTTZIaFkyQSVrR1hGXWJWRFpqeFBdTjVdYEc9NldlZnd2NHhrKEJKOUJ2R00jbytMeE1Kc2ZrKl5dcldYTVsjZyNyYSNoTFlVQGA8TkwzZThNbHNHR2FBM0FGWWlAJEUkJDN8fklkY2BCbXJ1RWo2UXdsKk9Ddm83bjkyZjpkTHJzPDc+WzZsXWs8Y0hIaUR4Iz1T''@;'; put 'put ''ZXs/LjlYPSQoS3VgUkhRYl5sLHUhVHc9NixCMyp1czUkZXlle3J1QSRlUCFdN2lVTj9eNl5TdF5tK20kM2pUR1lDIll0WDkkT29fZlV4eEFdKE5gcmhiaXR7I04rYFpkcVdQQlM9bH5iWjg+cFtzQV01akVeKiROcGNvJTgjS3kiNVVsLz02OkBgKEJ0M1RqWVpjVnppW15OQC8+VGEsNExxNUM0''@;'; put 'put ''eV9XLmhVQDNjdkVhdW5IOjBPfj9xKT1NZiomJnlZcE42KGM2Xz9NNV51QX5kVDtESit7Ml9JfjZWL0YhcUs1W15XP1kjV0R4NkdJKD5KOnpGYT5CPUR6RmFrRzNgWFs9XT9pM11AVnh4akN8MUIoWjtgZ2IrPyEjLkQud2k5Rj0kQDxuX3R9Sz1tMjhHaDl5VnFpamwxKFRHQ1N1RzN9U1dhJjRo''@;'; put 'put ''P2IkWzQ4X0pHTVt7RTRQY1lXJVlZR0h1OCg/cipjQyY2PGM6Uk0+SGNvPWxjRUVFaEJ8ZCRmK3lrKUc9cilAOGFYRkNiKjAsbSVCMG1zano3YH1fKW5FI3xeZHlDdjI/bix5d3NEWUojWikpK2UhP2NeKnklWk9YU0BVQEVAUnZDUCxyOXo2VWMja1ckRUppQXxma3VuUjxkI006TnB1JnVnbkJk''@;'; put 'put ''YTlxPiRLaSMhe3pFXW1KYTpdaixGQCE8VXhUYFZSPmQhPnJGP3AscHwpfnE5Sy9RJlghN3ZkZzlVe0BtW0hQXi5UZl1WL19dbiNjTGgoPkZLeUhyezUkZVZXRWN9TXZ3aGMoM1VpeFdQZFF1TUlQMzxeUy9JcjhUMURwQFdSYz5BLzZNTCIwfmZjMFdYcntPX31LbFhBblJrYCZnO0ZEV159eTZF''@;'; put 'put ''aXsoTHNhVSpvUkxOY3VKNktAZX1OR3RTRD12YDU1Smo2QHNzX2QmfCt1eEVVVDZea18pJV48OlRMdHwrZiZmP2FyUnU+cjRxJSQ3cXFBTzpuKSZ5RD1FYGFMVUVpUj8qV0M3Jk8wLlFgKkoyJnBHMnVWMnB0SDxHS1txOSQ5LFYhMk9ZWDpSR2R3aTJRcHF+TzpPWW9iUVkpTHpzL0BWJnZYfHJe''@;'; put 'put ''Ilcwfj86Wi9lXWk2Rz1dd2hqMiZRfSFMR01LbkhIZEdKbWMvM3oxWWRtKVtIa0YhPFloWVU0e254SEE4LGFtUigveVZtL1sscj0od3hEYkclam03S31aaHhUa2xqe0dvRFt9eE4+UmNuSEB7PkVbaUZgZW9OcHldKyNrRSp4ISY4aDgiXTtMXyhXfW44Y24iTEohfiElOkpJO19GOXtYbFJaPzlP''@;'; put 'put ''UGcxLlYvOFI3JV1de20lQy86OSJ9RTUrMTRreShhOW9CYSx4I3teJHBPWX09JkM4JlhEM1thY2d2RiNKT2RxW285L3FNSnFNe09bYGhUW19TYjc5LlgqZD03JEgxfCQ1QTd3RFc5b0oyfSYiQX4hJlQoRzYhfjU1RV9ETWRMRlVVRks/KkZFLCFEWVQ4ME4hcDhnS1t5WkEzNkksVzFXSiIuW0hp''@;'; put 'put ''PGBjZWdmUStQRlVgajh1YlFoekw0SSlIfD44XmpzRX1pYForJjpkOH1hVjx+d11pa2o+aCxsW00ySl9UdTp7Onxre3c6VTFzRFk0a2IxcjVGcy5iQm4iV1NueDpIPUhIZlM3Kik1bSZQUzIoL19FNl0vQWkxZzBudSxLbGhdQylwUDJOa0hRZG00eTRuVDU8MG89a2Y3KSVWbzI6YWQ+TWNMdUM/''@;'; put 'put ''eFt+Z0grcTN6KFUsNVF3JVZje2BYblN4X0o0Uy88bTpqPyZFYHpvN19ZRVlBNVZNbzZiTFAjOjdpJml8fkY4VWROTmAyanYzJFtJcCs5XkBUVmcpT1pgZyM/cjBja2dOZ3t9OEY+OG5zLExXKVg5dD10PklnSDRNQ0JNfmBedmlCVDEyTUlpV35QZFBVWFRTS2BldC8vaCVnTUtJLjZ0TkM7P1Rl''@;'; put 'put ''W002IlFyc2NiKiJ1Wm5iIUNaTlMxOjRiY2V4WUkvU0RwYDlGVVk3RWdAe3ZNUF1KYmwxK09gfT9hdTY8Kn5xS1lAQnwyISZzKGpITn19VUp+fVB1IjhgK31mPT0wUHFmLEJ4aGFMYHJ+RlJLPihoJWdrZSkyWl9dRGQ4c31uSHhCQEF9IVpMVzhzKFFnRmdkWzI+N2R6bH05TF5KXmFuMWYzNSl5''@;'; put 'put ''ZmRwUVRbeGxVTVJANyQ/RVlrPDUpZ1JddkdQZSViPzFZLkAhRExSaD1pWVMoeEEuNSZuKHIsWmZ0SmMiSXtGbkFxNGF3e35Ibz51aT9jQXdgU09pSV5uSXRwOzwqPTA2LFt1WT9YIWhxX0FTI2hkYj80N1NnKm90NWtCNXszXTJkcSZIemY+U2xQKUhSZGdIdnJnKWBfO1BRcHVbNnViZlAyeX4o''@;'; put 'put ''ZCs/ZGFJaGNiVmQ1PmFMbz5rQ2M+MTBOOjtKRHQ6PSFQN0NEKmF9WiZ9bF5TU09eW0BBWTlpdmsqIWV3MnRSSEJUb0haXywuU0x2LmhwUFVRMU5aLytzOl1Wb0hdL09QYzZVPmM0NDU7NVhoeHReaEpyQnpke15fL0lXaWl4cGk1Iyk6Ii48c2lGYyJbVkxxIXNhcHtDW19HdUVJTiM7JnhxLn46''@;'; put 'put ''S2YkRm09XWovIT13K0BibEZbOWpofTljUmVFTUl4PEg4eF8sYjtOJkQqPl07NEQkSUVbWWhBLyV5ajU3MklwQy9uciV2fHEmUyhaezVKe0xLTyVLNTY8fH1CSSNKYGcvYXFWXXQsRCgqIy9qVVZUbDo1U29PTzhpIjBSVHI1PHJuV0ksbUNCLCpyMS84KHN7NjsscDpKMDJQfTRZMDM9dWZ9dzxq''@;'; put 'put ''QWIvaW10RHRvdDFqOTcvd10/Qk9ETkQlc29VaWVlcUhDU3UmWEB2MmdRUS90XmEwciFZWkY/LkJGdHRncWZ2YH4wN0dzfiJHZVJSUXAoOUdXYkM7QzRlLGszTVZmJUJjdjBLWDZLNFcxNSxmMyk/WUczbyt0UmY8SHYuSFJoXnhwejhjU148RTgmdzdUPCQ3e1k3LFBDPzNnfGEmdytTb1pEQFdp''@;'; put 'put ''OkReQCh9ajo6eS9ESmp4WmklaCE5K3omdDhXaWtbfGVxP24uRj0+TCx+YjZ1cEF4OUVxRz8jeC5MSFtJNn10ZGEuSUR8S3lCO1dJVjFdJFRsIiNNVXokSk81MyJVOTleemIzREpsQEJ9PUMhfD1PJiEqY01QJmM5JkZxS3N8RyZFRVtDRm9lSS9kNjYuT2trP21LXiV+N2RgeVt1UzJPSk0jd0BG''@;'; put 'put ''OXM7alAscD9gJTtbbWAsay9mZGwpPHEpPm5qb0xKRUp6M0IuMnR5SlM7S0AyT05Gc2kwfSR9OT5vQU9YYlQ3bilte0QzUiN3aiR0YzgyV0BsV2hiUXx2dXErdWs+djZnIys5OCxyWkw5MEt0byspRnQ9QzopWSNYY0lYVFBqTjc9W084WExmJVE4KmNqOUxkQzlRXTFLLHQrIlc6WltJImB0SjBD''@;'; put 'put ''OCtTXk0/PXlDZHNZc2AiSTtjSnV4eiEvbUpNOENkQlFvIyV2Q1BNTTtJTHVIPXdEXlA/UStvaHEkXys8TH4ofjljR3JSKUohajNeOjw5UnFwZi57fmY6YWdONEJ0WV1qTXBlNFhtRWFNLnNYaE1YSVMrPkFXLkdPbEJsbEhTYjl+V2MxUH1FfU1aYSl2NmcxWFtbRComT0VBSEgjYHJOQyldbmI4''@;'; put 'put ''ZUc9ISJnPDwvaHQ4SCwyO29KUTdJNVd0TT1ZamtSY2g+fiw3WnYlXnYoMSN3MEdPXllRcHxkVSJYQ0p6UDo0KmM4NnNXSTZKa2MmaHQwMTNCYj1qTUU7M1ciTGx9bFRrP2lid3pTNk19X3xFfihIOGwkJXRCOzZtfGE9QDFWQEU9Mnl2RlAjQiw+JVM/bFU0ZUI4cTZTdU8mOkExfTxSP1Uwem1N''@;'; put 'put ''RDNHYnddd0NdKzNUOmx5ZDltNCZwdmZAOUlsZ3pHYiQlWDZdIkI5MENUSVhKQXdxfjRySTdnRVtqIlZQLGJbM1dDIl5XMyk8aGQ8M256W1dwMX5lYGN0K254IW1yUzpoeTY0OEgjIiQ1MjA5b1c+OCpoNFBCODY/TntDIkNkaHB5WEldPTFQanRHOWFDJCtPajlIVDNpZ2V4aksvOXNlYSp4Syop''@;'; put 'put ''QDldTno0eUcrZzRJdUklXUExRWFATXArUC56XTJOdihPa3xEL21mTTNaI2R8SyYoMmsuaFQ8PCwhST8kc3dUVlE6bSZrYSZra2dyTFNxcTQwe3JFX317Iz0peWpvdVJpUT84PVVsKnsuY2MuQn0hRn5Yfnc4PF8oQl9wW00vK0g0Nlp6eFJEMXViXWxHXm1lV1UkelpBfC5gbXVeK2h2b0lWRVB8''@;'; put 'put ''TypaXig/aSRkKig4dUBZdUZtRWJYfGwvNl8yQlBeb25oWkI1eTx7QUk6bm4xO08lP0o7MDA0c2A8TCY8KDExTV5TUC8xaWVBPzN9X0Fke05iIn07XTt0MUBjakh5VGcpXV1sdTEjQkQ/d3QzMVMuRWB0O05xOXxbQEh+TCZTKiZZMGZYZ0tqZkImejBsRSRtekQ0SE1KeExfQEZzeSsvJkxTcyVP''@;'; put 'put ''VChEW2M9QlFeYSRSQUE1SmNZLnVGYmw/aXQwUCw1dDFoJDE8fm4uSCN7QkNlQzBIakxve1hjMXt+Z15vS1VLMmRsZ10yN2ZdeDxQMzg+TGNkUVk/NFBoRmd0SkVfen0wTlNuKHxrflZyTXxFNC8vdEVRJUNCOD5WZHpRdVcxbUBkNkw5U21idikhaDlRQndJayxAUCssJHlDX1h4aUtoVmtobjNr''@;'; put 'put ''c1J1Ml9JZSp8Xn4ieiRMQWJHbU9EX0s5PU9ydyhLQntTblhAVHtlYEA7MHw9P0xAaU1YVnIhekYweUlVflVoSkMkRFYoQ09iJUFZajVrYTksU3N1dEVpLGNxdS5KZUg0Qz4xdXFFN0N2KWB5NDdveDUiUGlYSTNWPkFraXQkXzprZ20qaXJSPiM8U34zZH52TStUWlZhXl8lV356ZHlfXWxIKlMx''@;'; put 'put ''cVFPWlI3NHFrQE8sYEM4IlpRTGkyensvd01RMnFvPWl5cXNhQ3JYb0xOUkgzWCV3IXVONDYqOEY0W3cxQHlofXhZNG5TdHJjW3hGPi9FViEqWD1fUE5kc0tTTjklN1tfOkZbOExlJEMpeylIeGs8UXo7IlJmQ1IwNm9JQ3lzfHdqbWtjYlkpUjVSKV9dN1VTM00oVnVIeVpFL1Y2NEdUOWRqMzdZ''@;'; put 'put ''RFh0fE9ZY1B7cXxoLnl1MCJ+bSIiOEwlV2FCZmx4Tz9+cjY2MC5jYEBRT35pOElPYTVjOigycn12VlRJd2cmIktAIWRgTTpVdUNMelFGWkA+MzhxP2BxV1pqIW8veTpSPltjWVM1R14pam5VIUZNODYoeiR5Oy9ub000dCNXfHFQJjVVWzFoXUZPfV5BX0s/d1FkZEslKiZpZH1OTCRDN0o4TW5R''@;'; put 'put ''KVo8YkFGLjBoRW49eml8dV44I1M/NyJ3RUslJiZZK0wlXk06b2BeeXQjWVhUWT9ucHNFL2ZiQkc7b15jNGtualZvRj5dJS4yOHdZRkAjdzhaNnJnWktQZFlVRUtiJFE5Slt+QDIuRG1HLmNpInRYaCI6Kk1YTEslVW4jdXE7aDxZTmdWLGIoeSw2YzYmMkdESExlMV80KFlMfW9ZLEVTQkVVVS4s''@;'; put 'put ''cGV1PiF9NixxTC9QNWdAamAvelRfcC83PU5ZKlpqOnNhUjciKzFNYjYiODxGWy5MNnMoUmJORkR6PWI+Yno4a18mVHthNU5AYysoVW8vNTkmN0FLeE9pelo6fXooVXtOY0dgJTNgUmp5NHlxWTMkXnVfT1Axa0g9QE9BJXI+U0AwJlUrLnEzYWZOOj1bJFtuUXNeSV4kKFpTYzlIZSFEY2QiakIi''@;'; put 'put ''NFFlVHJ1VGhMdTxNZ1g1c0gjI3w1NiV6eXohfTZdNWhDSH1UI1Jybz45QUN5PlVQY0xZPDVoJGZPJSU8ISl6IzI/dFhqZyY4NHNyQ1cvazJzYj5XVTtyYjVYaF9yeF9SdkUheFNHRSlgOD4mU3EwaVgrK2R3YF9YaXc+Vy87Pix4a2VVSkd5ZCU3SEglSiFGRWtwKHlXd1p2bXUuXXNvKVhkTzg2''@;'; put 'put ''T1ZZUkxFS3FaInpDMnZ9eHRfW0JPa0gxKyVWXzZWbWMqbld2UFFHdDdpfGp6Ok00UDxiO1lZQDY8STIhNVNEOzsyd0M0PW5fKFNPI15mfkUmR21kSGlvNlo3WnopY0RGQ01XKSQ7Q2UlUjM6Y045VTJ6JDU5eHxgJX4+OlpBXUA0WTx8SGhOVnpYL0h9anZIYnldPDNfUmo8XjhUZk10b1hJWDl4''@;'; put 'put ''QWVsRmRRYyJMTl4xbEwrOD4iVy59WmtQcTtec0BEciVRXyErPCw9PHcqPXU5bWNAR3Fua2V4Zi8jUDBNVF44dGBjTG1vdiluK346QnYvLnpbQFJ2MDpLZ3Q/JTtoO3Mlekp4LEhQX0JHPDpZciNHMWU+cnFeYSxbbXZZY2lNcCh5OFI3cn09VD9SJGJdMSpqeTRQKTJxWHYuaiRMS2VXWGVUVzpf''@;'; put 'put ''d0p5M0JRWXo6Nj9QPTFmOmhOYkZvSiwhaExVO1hxK103JVV4Q0IhYXNWTyE5d2MxdGcjMlYlbjFSQFdCNTE/d1YhZ31ZJH5HWFBxcnAjNlIueFBkWFtQW2k4fjl2cEw+PnVid25TR2orTkhbYVFAVzQmXiMyU2NZe3p8RVZoeVpIamwmW09laWJrWjV1KmU6P31eNk0vbXsoOkw/aHthRzIkOXJv''@;'; put 'put ''L21RPXA6Lmswa1clMyIwSDYkXzkqLzN3MmdHPFFUKlsqd3BGS1VhKmNXQSRGW20qOzk+OkByU1VKJTgoPm9nQE1BJStEfnM8c1YpcVBLY19CVG42TCppLF98PS4jaCsrWUxGREVeUXcjSng+Y0hgREcoI2owJi8xJV1wPn1GQURUUVQqWX4/UnRPLkRva2Q0aislJFY8MXpiNFgrNGldQktlbksl''@;'; put 'put ''MlM1czUuOHZISDx4ZChmaUo8SWIvN0NmO3dCPz8/VD11VyZmLGQhcjxSY0xvZUhBeUNWUy89R0N5QyNRPn1RM24qYmcoZkIybzA+OG0oMD8kTStmWVk7TUxSY1UuR286XnFdVGlZckNobEpOQTlZe08yJU5EaWY2SlEoNCFgKnVbeiQ9KDZUJjE1UHhiQ2gjbUh1Z3NCNUA+O1M4K011ZzBuREU/''@;'; put 'put ''ISg+XzJbMHBMRnRGbExtSXpiUHU6TiZLRyErZShoNjgrRV40cFloYSxHfG8peCliMyQ1L0M0THp4K1E1bH5ZZ2VDLGAuVls7OzU0c3pofmg2PzBiWFA8bXFIPH4+biF0QFlNc0VUeDZKdSkjNCxPR3MsOX5EcUprQFVbaD0pM0xseTg7QGV2Ry82NWU2fUhDY0MxV0BoeFV+TX5LPSQwdXlibDpX''@;'; put 'put ''US9SSkE8I317Oj84ZFoyPVNSNnQwUWh2cEppSElaXVl6R3dTWF8xREsjVkhPfT4uNXkjWUBFfTB8Y0E3eV9MeU90LnhEUWFPZlhINjhZY3lyVmZqXlt2bkxeYEJYcjVeZl1jJWBoN1ZpSmBjd1o0eVFsKltqLG84X3U9S35+SWgmaXlnNTwwN0UqbjI8bkRoMGoqUFNfV3ZXfHFeXzg7eiZwT1E6''@;'; put 'put ''UX5zIXMkZ0JHUng1K1tgJSpgY3BCcCtUImFzQV5ON1puUShDI0w1Vl1XTC93WyIjYnQ1YD5HM0tAYWkjdUQrPjs2XV5oPEo4WTxjazBkUF0zeX5mL3ddYEkkNTZAUnspWntpdnBPM086US9oPWFDL24idHFeKVBbaGJbI2I9UW99PXR7W0Y3NkdFSzNXZThCT1NZJklXYC83aXpMJiRGS3MxLjd8''@;'; put 'put ''ZmxKOztQZz5WZF03aiVHdih7aWUqLlpDfjosRWRIcD9zfjBscGV+XS8lUSIhLyZyVmJAVWp+LlNGS1dSeyxiTS5tTUdWM0BBRTtGIkJWRERLMSgqYlQ5KkZMQV1DaiskcT5gaz8xdTIsJk4zPEElVm95blU5SG9oKFoyJmVUSFBTdEU/MVohdW4jXWVEKUsscWE6c0dRcDRwVVYpSWU4L3Q/SEVO''@;'; put 'put ''LnZHbylPPzo2N2RXIVldb1tCUFo6ZEl+OnFib0Y5MkR3SHI6LzV5Uk44YWZARzNOQjlrX01rUkBMSl80IlpNNiE/MHpUSTEyQXVNeEk0a304STtmKSQoU0VLakIxVEZPWmUoN314VH1BaVJ6YEBiN0lDIiJCTTRCIWJZM0JwSnI4IVJESXxgdjx2KGRzfWtpbU15cS5bMWlhKFF3KXFqYTVmQXhC''@;'; put 'put ''WSlUcnxXXkFEWC4zUjZCWy9nRzt3LnIjX1NuNW5CJFpsMWQ0W083WU0wOjxUczJqYS59bWwoND80YyFOPVhjdGNELiQhVC8vVEU5UyFbbHJ0Omd6dzxrYVdabjwxSW91ZHc6d05gO2s6KD1hMUdzUmNUVDVgeHNmfjNtUVVkaXxnfFBeKilbYDw3NW5hUztSeGNHZFE+KFt0dWpWaXQrZFVBYW9k''@;'; put 'put ''TVNzJGNULlM+dkFBS0I5ekFCXWtePn5NO1BOSXlsKi8+JVtWSG9tZUF3bzw4PUhPdjdTVHokTXshVm5UYj19S1c+UDRXMj9oX21xWUdnKnBiMCN9R1oueGE8W2hCTm93O2ZQXjY1dn07VEAzNldnTiJ1WzVWQDxWJFlnNm9iQlJzJD86KHspLnBaaCU0QjteekVOWy93JkkuOWM7SUpPbkJbR0pu''@;'; put 'put ''TkIoVEdRPXxMPWt0R2dSaEspYXJxYVMma25PKDEkR2NOMn5UP153Jjx5KTJRU0ZnPUpQcysuUlF7XzNVQGYpY1hTfWdKU3VCPFlyXm9PXjB2TSx9XlFmTjxYWTAkejpvOElTQFIhJXd0RyxWVFhLcHUjLEhUYjhpdUx3Ln1rbilwSSRxbGl0Xjx9cm41S2VvNXBKczhpYTBWaHc2TmJ6WkgxbEEw''@;'; put 'put ''Y0NMMGMoY2N4I3RhLHNTTH1WWGt0a31Jfn1sb2Y3SjpnRz59NWQmX2Q0cDVJVUorNXo3OkFpWDVIRkhuMHVMPytAPjFKWVQxV1ReNVE0P3k1QG1kNjNXTS40UjxFcWk5UUJgfFdSVnxdOTdJU1sseUgwXiRWcmZFTng8Nj80Nk09Rk1NSEE+YSxja10sRTBtWTFDenpkeGNNR3lAaz0jdXYqQGNY''@;'; put 'put ''NmssOTMkbiY2aXAmLGZ6b3J5OkJ9YVNAXiI2W2Z4SG53Zn5DIihDQVJBP1ppZHd9SX18SCM0KHZXQjBEZjk9QDl6TTduMmEmQHVaNC5HOSZnWExnRWN5bD0/ViY8JUV4MUp9fWhwbyFUUzdfZipoKnBWTXxeVkxsdmc3R256ME57ZTpFI2JgVnJbeWZ2JT5CeXRYRUhBTDVUaCFRMEVCNXh6cExC''@;'; put 'put ''ejo1XyU2TytEbyhXQ0xnYmtWYHx+QXVLYSwyeGxOOGA+QXRFJE5RZVBMcGcjL3UkJWI0X0xaSE9yVCs6Ql9veFJMO1hOfFIweUgjYHFmMHZUaiRlYXlqc0JgRjppdHNaYmI5WmpmSDRpSnApd2RoOEp5ZUpoOERaKjRuK1d8YUdLOlI8K0o6QkJ0N20uUzpqP3ZGMjgwQSJ1NSVnZyE0Zn5tcXxr''@;'; put 'put ''Nyk3alBpZHRDVk1CJF8iTDQxQkMjPTFgY3s5V2l7OCg4TV4jcWBgUj5UaytIZXAiJDgoUHpbdiY7MDJfYkttUXp6dzZdMyQlJHFxO3R0Xmo0M3tqdHV4MlN5YTlNdGcreSlLK3t4QFJbOm18VDJTUDssUXU3diw5M1k5QC9BZWs9ezM1JVdhPUVWeD40RGVAYWs0NlJPVkVbODttQDZiezBRVjUz''@;'; put 'put ''aGF2QWM2RVM5UCZPMXRjUCp4azxIflJfYkRFNCRRY1NATkwoQyZhekordkZNUyxHWXt2VkVLbVosZ2VNYC81QUgoLkNeQkxVLj4oQ01kaERJPjY2T0ddW0dCd2s7Vz9lb3hnb1ZWUyleXjlvK35MSF5eS0UqMG5PMH1QbGBUR0d9c1s0UkYxMzU6SUB5IVFiYyZtQE14QU94QDYpJiRrczpfPHRs''@;'; put 'put ''bV4+ekkxQlplaGxmZX0wVUJ1RCtsN2tqayJ5KFp1Uzo3WmV2cEdPczwpOjxkflIpMDdqdXBaOm1yJSIsbzU3VygmUCxQKSgzSih7MF1QU0V8ekw5eUo0XiVCNVJSY3woXm57bkIqK3xoZjpQSjEpcHM4X0ZZMjYjfmMsSTAuaWZ6L109aWpxOyk+VltobHw7Q1g8PXtdRV1PeT1vdVlsXTVJRiFN''@;'; put 'put ''SVdZSD5tbD11OXI0OHcyLl1TOGpRNSw5Z2dydE4/WldeOjZfPXlnb1c5IjVuRk57K1BTXWprWGUzKE5xQE5feDtNVW9pUGxoS1FfK2xnZTBTVn06dXdtOyEoSz9wOVYhfTpzbnEpMU9aRCwrbCNtTy9oMls1KTtsfXEwRjNPbjowOilURFBJOkwhN1RFeEE0d3Jndig8Lzp8eT57cEZOTkMvTl9Y''@;'; put 'put ''STxbV0pyL014OW5be1dFcGJKX3JbPUAqNUhgfDowNk81ZlpoNFozQ3toT0RkNlJyfTY3ZUMkOD03TiNsdEFUO0srfHVeSklPeD1NeVdCeF9dLCtzN1ohL31TMk52Jk97PmpvfWMjQmNkalhkcTVhTD9tNTxIbDpOKnlVS01jViNuQVF5OjUjOS8md3NhKEZ8cjhgSz5XcXtlaGQvP0N7bnM7MD0y''@;'; put 'put ''dnIvQj5ofis9Y2kxWlBzMzUlcm8iODI+dypEXVtVdFRXakVaYyNFUyMsRFppfCRjKFUpL3ZESzd8az90PXxdK244WSp6TUNjd1opZFs+UFRaPD9UPXxke0ZpUyR2dGRVZnJ3QGpDZ20xTmdzMihxXns1RW96KXQiIV5kZ2glYWF7OzxmeGhnfWlrcDVgPT4oQ09HQ0NQcG15NT0rM2h1Ij5zOmEk''@;'; put 'put ''Rm53WU5eYm9CTUJoT1Z6bnskcF1RO0wvdERUNnVCdyIuXWR4UyJyLjZIYE5udl5Wc0hDYD8xZVJsPH0zK3FmZF1eI18jJUZrX1VeKGwhUVZ4W1N+KlBeeDlUSXJBPmk+QHtoW19uSWZXeDlxaHtReCw5VlQ7JiNFNlF6eHNsMW9zcCNqImhzLngqQGdsZCRJaDhSTjg4KH4zTlpqVE0qPFR3eTEp''@;'; put 'put ''KEw9aHFjTit6akMvYD5vKE1TNlIrbjtxQldTNDMkTGxENmQ0VVQldGhTMDsvUkREPCQ6JmYhWitQRio2aCNlNT4jakI7N0NkQ0RtalRGSDJDM1BaQW1nTCNuVnFVaT9gU2xocXpXY3dfUXU+OWs9b2src1hjM3lLSzVoTEVKLj1lLzVKUyMkYjhuRUkoPFVaclZLNy5JcXlUK2k3OHs+SWt8SjZP''@;'; put 'put ''fkptK3RxYUhXe209TmovOFtnNHFZYkd+SmRAVlZuJHVfSnksW1dVQTpWKGR+fTspVygpTUQ0PU4pYWM3fHgzaHJJeV86NWBnSis+bjMxJCJ2XS4oNWdXe3opJDJPRzB3MUxrQmAvZk50NFJPampkYCM5NWZ2el9gU3xfeSF+YHd2Yn41fSpMNj9sJDdCUUckM0k2Lzd8R2JDOSs2KHM2UGZ8eG4m''@;'; put 'put ''MyZvb3JqIS9pYng/LD5QPyp3e0VTSGg0fjh2NnFmQ2dATT8yRXJtIWZbVixSRUd4Xyx1V0RwWG5oSltaSHpXS0k7O3Z5NixNLkg2Y11wT3A5Y35NPkVZVThGSiZAdSQvbXohIT1nVjVETypST1JEOlRDZFhrJHddLmFmdnZwTmBuW05JODt0XTUjSWtBIStER15pIyU3MUo8Nz9WTT9mcEI8MT9O''@;'; put 'put ''TzFVUTBeK2Vxe3x0ez8lNUxjWmomRVFqfVklfmMybnBmY3tnbiNUX1cobilTYDRAYGg1SW1jPVJ1JjVoU2NvbG4sXVF4MEV9UCNGPmRoNUg/VXg/KE5yR0AmVCQqQikuSTEsR1JtR01JSUJJNEVndkUvPHUhR0gjYiFARV9nX097bF98KXZnaUtpai5CNnlgRyQzPExucHBZU28rIjRCbWA9SktT''@;'; put 'put ''bGt0eUI3Kng/JTE9MFFxQyp3anZuTnJzeFpWMF5wMnhWdnZwMHQuZjQyOW5jZUBmY1h5bVQjKk8lOURiO2M0dllwMFRwSUhGKnc3NWNFWDRaNi9qVG8xPiUxJltWbCtCQ0JWNyMpOERaMTV5VSVyb096NSgqWUVsZnpmenh6ZWF9SSpHdnshUmwjRTNHcXJoInlxQDJSfncrPUhDSiEhOiZfVndY''@;'; put 'put ''KEBPdlIkfWArYV9EPzI7KzZFKVpqQlJrdWl6RC98UntVXUdnUT4pJkMrRTwkXlFpOGdqQWVNIz9xWUoqMlN3X3JBdzNTNkgsRV1RbzxUQTNjKW5uQFVqbkY6bXR6ZT0zIWI2JjB9Rnk2S0VvVDNFTEd4bjZGL18vSUBTMWNiVzhNK3ZzbGxLaS9iQkc3KktRdGM1NnFWfVAsJU9BZltKZTwiYk8+''@;'; put 'put ''XXdrOE43PS4sSUM7SitKP0M5XV51VyxpYHw+OEZQVz1GOn5tODcwcH5Md3dqeVBeJGFLbl5BUVU/ZDVtWGRWYiRKNFZ5JGh8W3ZKWSFKa2t2b1BVRXRQVF80QVplfH1uP1BUUW9GPWYkdHk6L2tFZzpmaTBlQkMrTTx9KHpOMjwzQVlOdTI9aEgyTSY9eUB7WX5MPGEmVkVab3FNdyVzei90ZFU0''@;'; put 'put ''blBYPElbRC42NSNKKDtsM0NzV04sejFVSHRbZVAzZSk6M1IqUnwoeVk4MDRKJmZwYT0jTUVTan5aVEpHdiR2REBwfiV0L3I4cnwiRTBkPUBZJCp8JjZecz93Zzlwa3FaYWEieD5gdTlObEplSWUiXVtSfDkvd3picSMrfVhPYTt0Lj10R2EmM2IubTt+PXBvOX07KT94diIkLy51QzUxKUI1bysz''@;'; put 'put ''XywoRW49bT8lSkxeR2VXZzVwb2puMCVwP2o6NU5dQDN4eT19SigyU1B7O1padjxoRmgwRGIve1QrYjNHMGdhKFdaXWwxYEM/T3I0aCxsXl5oU2c/Ryh9QzEufGB3SmF3M20jZV02XiMicW9fUDRtYENPfSFeVzghXkt9Pkcycm0wPDVWS0JZNDMreVM7VGR0WFFsNXZLIl5fe3pgL0oqMm92OFVS''@;'; put 'put ''eHopQTtNeSljOVJUfEcxWzAmcWVEP247WHYrMGxafl4wI0g/Ny89YmdqTWRaQ2BxNyhRQSQzXmFpKGpKb2R2dixTQ200cFVpcEc2bDVUXmVUOzNHOjxOQW9dZXNwdytnQloxQTV8OENuKGYkX0ZJISQrK3lGUTdbPng/d2g1a1N9WD4+NXAwOiU6YFpAR3tHQC8kWiRTOyFQbyooQDsyN09PPzxr''@;'; put 'put ''Qm96PT4jLDRWPVFQXVY7UX52MWB7aHguWGR8NUF4ZFlSUElZVXFBS30zQWRKO3xDIWxvSHxiekhOWVRufUNscEgwMFtDQ0hpOnxpPytnK0NhJjJNL0JOaUprLCh4M3xYPis6fUNHUHUiJExrR1RaWH1oaWQ3SC9zPTxVUVF9NmFmNUhMaDN5UHkwfkN1N0c6ZXxebSVsSzhSXSV3Q2soazJSWCxa''@;'; put 'put ''fWo0W3xARTg6Uj1sUlR7KzYqUSNsUEw1eD0kSTNUUyM8ITN1RTBnd20sOTxDLiJJdElRamoyezwjaGZBNy9QYmlFfXQ5eTtFJHA7VThfNzc9SU1SeHM4W1Y8ezhuLDBPRz0qb0MhdiwqYX5vbkw7fjl0Z1Yjd1glQkEjTiksPUpKKTZbUyZudkgud2AhRlMqW30rY1c0ZktaQmkkYUVPM1lXQjFT''@;'; put 'put ''JWQiQ09xbS97cC8oUSQ/RSkya1lyY2okSDRMViVkaTgrKjwkbFhSR0M5S1EhLzk0NzFKbjpEUXp2ZT87WSNiOithciZwW0FUQlF+cW9TN045SC4wY2ZAayVMYCthT0dpImZVTDwwKT9acX1KQ0IpVXJtfFtqK3h9Ong1VSk5fD15SFh6W0J0SXdEfU14cm90b0twblpLZ1I/Tjx7eFIkYn45PXlW''@;'; put 'put ''PWs5SjNPajdfN2ltRUZFaTZtR0RVbGtzfUljRVlzTGVbZ2c2MFllP3xPOlFmWzFkTVVWPWpUOSF2N3xBMFdtJX5BZlNrfCshWXk+Yjd0P2JnaUxZU3YxVXNLTHYlND56MDVUcnZxOWI0dllFIy5ocWFFenpPUzFrejY5LFk1S3VdNHg9Q1BwdmYrUE1jbHdCdXJSIl9tY3JwY0RoYURNakxHe1RP''@;'; put 'put ''YypkYmMyW3s6M18xRlJOPVo3dklBfXx0VE5bdmN2S1Q0VF1gSTBkeVRTRE1XMFRfeWBxQjp5Ijc/UzR1eUMoKkJbW3ZKJTF5aDZ5K0BWUnZxPHhIN0U2MjdTNTUkZDVYeEpMc0JvLHt0SzxEVnEzSFNZTCJnQSUmPiY1UE4zPlpiMmJWQCl3Okd2Kll2P3k+OENaN1hQdVAoIkh9UXdjaXVyfUty''@;'; put 'put ''Q314NUxkb051KD5afit+O2xee1R3YS9KSitlLkROMFBucC9TT31penF6Sjt+RzdSRF53dntfb3pmU2F+MkU1Pmp2MFJSMVssOjk0ZGA9aTROOWMjYHVSXUpGZF9jMH1YWVFKLCp4OlE5ajxeVWsrT0IwRUxhXTNhOE5sNXIpWFMkNVBDbiVTbWRxQ0c8Zy9ib0ZpdXZrJmB5QkBJLCpZcE9FMzs4''@;'; put 'put ''WHxedE55OVtlWWJ5aFksImk8WyoubmUyZWtSQHpBdyxrY3R3NmAlRCYiQWZrSFd5ZWxAJmswUmF7dnxNfCxLK3g7QjUiMHgkKlRvbXJ6WCxfTyJEfHBVfGovRl8jOWokPUZSV29pPlVAaWUyXzcoWDApNihtTVEmPmBIfHtKP1o3Uip0ITo4L1ZXRS8yVzlrS3U8anRidUxTOUpJRjZpdXtkQD1v''@;'; put 'put ''Z3UlKDtBUSVFaWEvKmsocU0hVzEuYWZSOGcmZnpTMU5wdjJ4OzZnbUd7WTEkV1Q0S3RaRCpgOkJeLHZwKCJXTXFOXzomSDlwak9kI31iQmlAQ0krYDNaXzdzU05+ST18Uyt4bDlZYGV6b3I8U2FvS0dYKjw4LkliUzQiXlYwKi86ay8lWUBNO2JJZzJ+b1V6dCEvc2Irem50Qj5RNV51fVYzWEtg''@;'; put 'put ''P2VjPGkwO1BBNz9ORTpKTiE1NiJ+PEJESyFFUmVJMVE6VHVJP0pSKjFOVjAjcHhoc2I2Kk1mXTkoI2VFSGhSeWBdTEYpTnhneGE+ND0mVTVZVG51d1hiWExXWjFnNkUmKUlBSk5YI2ROMVosP3xtK2ldOVhub0N+aD1UR1lRS2o4L15SQGRxYn1mLlUifVdjP3JyUmk9WGpjOC5Xa0Fja2hIbltn''@;'; put 'put ''bF1CMlQuaWx6ZSVIPCN5UEt3UlNpLGl6R0tGcTc9cjxnXSJHQit+L0d+Pn1NM0Z1bTJyck9ydzxmfjomWF99Zlh5O1ZKRkFwUz82JUN+aThmUSE5aEp8VCtgJG5ZNG9ZelQseXU4W31QX30icm1BOlRtZmEyZ20hUlpGcFFiczl0bUlAeDR4amBJNmBaV3QzaGEvfUxafiFzcjZ6UClFa3RvQmJt''@;'; put 'put ''cDJ2TXM9W2pSbVVROXUlO2dJXlhtdCpTekY1aHNrXV1bW31PYDxaJExmbU01W1thND9sNGc4NGFdNT52IWleInJLcHJFSWZHVHpmd2t1TCFqbnM9RShdUHh1VGR6b1RDMlJ1LDNPTz8kbkR5P3ZjXWhFXktFaSEoMzFFXVg1a3EwQVFFSERIUGo/JmwzWXRdIUtPOm5oPHtqTFVVSU0mTk0pQTdW''@;'; put 'put ''RiZNX2V+Ukh1bExGSFBESDVkOjdwU01JWV87Y002QHspVjQ9Y11qO25zZ2s1TS5jb257Kih2LyZQfio0UHdTbUtMSkZ9d1ZycnhtS0YyMFpIclNxb0tSSTl8aHJpX3RGdSNSZTYpOD9NTmlhZmZsfXNxRi55dE85WWskS3lpY10mcVlVa04wbGA1bXdDeG4lQl8+YFUse3xPVGlwTmo1ZntqaVs8''@;'; put 'put ''PnRwaD9XZ0oveisyfX5aNTpJXl10ODI8Uix1L3xDUilmdUc5RGomUykkMWF1SDchJUdgVDskOnV4dF9NczhbMEZ9TTVjY01DR3VUdV1IPnUmWWxLIlhKTG1RIV1DfFRdP08vRzJROmk0S0JlNERZMmBJYkdISiFTKltlWDVyenY4fW9eaDdrPFMuTTU4OlJMd3xEZCxOb3VVaTdUJVRvUiNbOjpG''@;'; put 'put ''eFJzUWp4KTc5V3oqKUMxIVk/TS4rLkBYYW4lfEQ8ZHN9NEdoZDw2e0YhXVVvPX1vNjNAXnpARWovTkEyOklpW3s8WFYlRTltJG5zaCssUW8kTz5NdFBwW04zPkk4Lz9uZldlKFpRUj0qJjB4USViQE0oPm9PMHh+PzBKK0VkVXNvSi9sU2lqYlk5JGV0aEpiRCJXbW9QQE8jQGJsOSUpLmtjRExg''@;'; put 'put ''e2hjZVZgPiFdMUtrZ1NpNWpoL1ojQFlWXy9ebEBiNF9gRztIOXlraT0uRHFASyNaeUg4eXl4QDwmekMlRk5ueTUpM1ZiMGNseVRyYF0vQUYiXlJIbmZzaURoKUtYVTpeUWd2Q2NYIjl0Sk4la2xTNix7Uyp5MUJbeihGWHYjJEdIS3NTanZycFA6RzFxXzokXW5aNmQve1ErZG5gNSRDU1JrVjM0''@;'; put 'put ''YGRuaWt6S2craXhOQDBTZVBeazh9THQkNT5VNlg3V2NEK2Y3N2J4dlkyM1A4O2cjejZPN0k9UTApbHxzbk0hQGE4JklFP3JAMH1qNDZHPkVlKig2V1QxbEZYMGBpXlhuOGFkOUN5L2lrNm1ESChLTXFvJXU3ZiFTNzFAKTRLKFdzWzxQJTs0eyNgMjNaIiJufSh7QDxEQk1uOC8oKVp1WXw6Q0VE''@;'; put 'put ''ZEdaPlssc1JSVnkrSlE4N3teRiFeMiosck1nZUdpaDJrfiY7Xkg6QHgwaXNAbmN3SWpkdX5HSkhfMlt9fmFFaT1yI1VwaWYuMHRnd0c6WGJGP35Cen1YNnsmLmZQZ3U0V2dmfm07I11ANGRvXlhNZ2pSTnQpfDxtO2YhVG1SbHhhM2pTQEVnUmYwOkp1K2BodURRfSxjKnsjbi9UVHRfRl8rPkRG''@;'; put 'put ''eWhtWUpGeUtwcilXLHI7fEt0InQpaHNAdCtANSY6WnRkPy5QMU5jY0J4MDRuNnVdaVhEYFkmb140JWJdb1IrdGpne2gvOyVwVVBURWZzWmJCN15JQ0VCIn48QDl1Z1hfVXtAVk82K3p8V1h8cX5gaF4zeX5vUFEqJWJpImY2WXU7RlZbTiRoaDZbOiklaSlML1pfIVF1Yms0LFk9Q3J1VCYseD5p''@;'; put 'put ''TUNVRyEsLj9Ka1tFcXBteT9GND00ejg3JWgociJ4M14sZ2xOIkxAa1MuXyQvKTI3ZU1hRjFdXUVhVCk3ZVVWUEhPYG1qOjh7Yz0wZkBCREBuS2IzTyxSVXlNPzp8bmpabFVGSDtgflFyQT9NJGBiKVZyXlNPQDtdZXJHNVE0U3U/JUJLPyhbV2FfYEJCNFdCLklLSy5ET2FXRWhlZy4hLiMwbD9z''@;'; put 'put ''UXMjIVhCc0oqfTdPPT5DfVJxK0swayx5VHo5azlfVCZqfSlJenpmK18jRTl0bGcjJFlUYVlRfDJCLzlwcVR7Kms/LyFqelBpUTQvJE1FNTg9VVhbLjsuUEcxL3N3ZUpFUSV2YWsoVn1dO3tzQz5NU0JjUyx9ZnVRIjwzVUUkPXFpWyY9d3MlKHlONXgrXTkoSjBRTkZWTVBUTiZLOWlaKXEuSX11''@;'; put 'put ''NUxVOUVrfExIYSRHeyxWeEpiOiJ7ZGhITzYqUy5JRTpaa3dQLkshP31JJFkkPDp6bEs1ZGd1U1JUWjFNTSk+RV1Ndj4uLn1WZ2s8SDc3cEhxamBHViUvdF11WCY2czJxQT9xW3gpI0Q5ZHpbU3p+cGhIKCpwelVbXU84fm0iaSklWjFdQnV1TXBpcD5yOiJeYXg3M3JsSGg7XzttfjRHN31xdWB2''@;'; put 'put ''elp8aSgxXj1zIWp0fHI6b05icVsweSIoa01HNkQzW3xIYHA5TUxKbF9+fGNBPmxaQkZsIm92XUJ0TSE2Tkd1P2ZbRXIvP3Y8bFFoNnVGb1pjcVd0ckpUPGZCU28+fUomWFN5IkxzYmBBLzJFdXR0NyJfR15VeSFjJSRKWiNJXTZkNWxvJVtwOGhBbUokbSl9JmVrPTUzSXYhO2pxen12dGBEVjpM''@;'; put 'put ''K0d1diI+QmpLLnJxIitmYDxGXUNVO29sLE9WI09QJmhpbzU/Ol5CIjdSVl13N1JjQUdaaD8yVCh9JlZ9aDZtQjJyYldXe3o4V0A2S2tsKHV6Jm0jRn0rOiRrSTtecHZhdng4dkVFPW9fYEB3cXRoK314K2czXm5aJUpwOl08a3A7eClyeiZwOmFhPTAqdExtbXhSJTVXfnAwLHFkPFlvdUE1LHRQ''@;'; put 'put ''VXVacSNqX35URGV4aUlBdX0sNmhfLClANi9HYj9qO3F+RTFfSFt0LmF1ezF0O106VT8vUFpidUskQGUocEBPb2l6IUBEeDs5fWZJKCo5WHMqMWMmbEdIVn1ZW2hxQWEoeW1ta2VbI3hmdkopMTEpODE4T1A7ZS94VVVgVX4kUT1MO1QxYFBlKWVeLCohI19xXUpiVV9JeTlhR2c1fF1wa0g2eFdV''@;'; put 'put ''WkxCXyhYbS92MVpCNlVjXj9SfC55flM2XXUyRjY7X3kiVzNvPTVsNVphLkN8STY0cFYmXztpfT5sOEc3U0N0ZjB6X2g0KlhyWUc4SVA2QlBUWXojPmFeIyRnYUJjZXJVYzRQLis2cFR0W0ZyKWk1QCZmY2ohRlZeRkhOM2BUREQxc1szT3E2NyFkYmhQRCRpbEU7UT0mQkQuUTptPVdkbz1HZCNp''@;'; put 'put ''fVJjLkFEIXxCKmg6YWc5PDhCVlBuL3JGSFJpNFg7PHNOLjVfaU1mK3RxbTBkTiVhbjVfNzRPbUA9SVpmX2VAKzBgQ0M9WShfWV1ZTkArKHM/ZGI1YnBqd2FvXnh2aVMkT0Z9YHtsQkk3X3A5OHFvdFQmaFU0UyRTIkNOek10cGtsOHEiOVtNUCMhe1Y9dmFjV1JqfDB3WC9lQ0hvaHRmNTk2cEVz''@;'; put 'put ''ZDpra1d2dz0yalFLdEpKfDhiOCxQbEJYZTI2WH1bV1ZjckVVRFMhR2B3JGs/X35YRX1gK0pHaiM0ckEsZyVPVjZfVGkiRygzcjMrJm55ZjJRT2R5Q1IjZHJQfGlvOkdZPD9KLkVHaVopWiMzYiNtOTZNVktJSD5WOWRAe3MkZE9yWWlnV3FgTktWP3wrN3NMfUF1UHNpflphOz03QSpwbld0Rn5S''@;'; put 'put ''NUh9Tk80K0VdWSg5S11XRkk8OEN9OGR2dVd1MXJqdFc4bEtnV2FgSF9ue2BbV2RMMX1ZM25tan5ScTBCLHxzRXxhZGcsLDJ8c3EoPWlrIVp4b0pvJkspaHdWK1drZTAhc347N20haDR7VkU1Ql1TJDMkejMsdDtaTnVUV2omeX5FJHdVcXFrb2ltXmJoQkYoaVVtQkZ2cWYzZWZURylCPHxgfmU3''@;'; put 'put ''VlIlV2Bycm9udC4xZ2hdQkNGMHN4MSZ4dTg+TXAqQ1EsbkcmNk9ZIjcxJnxtTjN8MFBKaSxxLkteMl9kZS9TejM2JDFHUTUucns3IWU+I3l2QCtuYUR6SjwqLCV6Y0toQn0qa01nc3U4bXdUN0RjMG1meX1gQj1VTmlEanxbRTNgOl4qN19bLjdbeihOc258KUV+QlBCYiQxam93UmNeQ2VwfFcz''@;'; put 'put ''Xj4+TFB6Y1YuRVRPUWFJKil7Ono8JSFQVSRGLkx2MSIoOjpTMSYvVFBKXUdPRkg3Q1A4dktneHttK1IjTzRHJjFvSCNzIWckO3phR3NlRSVoOjtAISk0e1NlbDhVelVCOyVUVTZMXyMjb1hYPEpSOSNONnp8OEAwYnp7I19afUVSVyMie1BgflM5ZWgvdUZkMFs7b31MenFUWFNWP2p4TjRDfVpq''@;'; put 'put ''ITJmKVU9TDB9endCRnpVMWpFbHBxUnVISzY4b2VIcDVYOChsT3hpak4uZC5rTDNmbzR0aj0maC85U0hFPEx6KGY9O1A2NE9AUTZwKUk2MTAlTkomW2drQD12eyU1eyowTiVSZllCSnErWihkNUduT24kXlROX0p9TEZEd0M7bStEfXZ1WVB1InBGIj01UXM/N1NkaTxrcCRDRmhsXXgmNEdYQW9V''@;'; put 'put ''YShjZlp4KCReNlhhfHAyZnsvdDhsUSN9fCJyOEs8Z3M1MGlSZk0hQFNXMkNbXUxkNVE4TjdLdEZNSWR6WEo3LD0vTDFkaWEyTD9RZztNeDUwQjNaJWNTOGQrfSgxLyZpeiErb01wL2MzXTBxXX0pL0g/SkRzIUh1TUBnejt6MD5NcS88LzcwRGkpcmxjN2I5fSEyYWk2dWpTbF0kQj93YTNRNjRH''@;'; put 'put ''Zj5LT0kmXl8qOlg1ZHN+akpFZUtVJEpHUmMiWTN9ImxKWCVnYC5ZUzBfa0VuPXJpPXp7c3gmfH5FcSEleTVPTnxqQVNIamN7MVpELjpLTnV9Zn45T00zZ0VLSnc5ZkkyTlFzREdRUTp1RyVBL0opYl53I3VmLyxOfEM6eWtzS3kuZTpycHh6aWJJUC9qJlYxIWlHQjt8PGdLMS9fQGpMXX5vMSY8''@;'; put 'put ''bTB4WEMhUGkxfktVZ1Z8XjE5b0ppI2gxPkpXfFZVXV1AQTByTGkhL2NHeix9dV9YX2tAcmgoP1MuaH05aj56WjhjJilYa30iSDRlM3BPJGV7MCglXVhAL3U1aV1zeFgpPSV+ZHplcj1RYWo2OCEzNjk6VT5aYl9HfH5XPj1YPU5QUWAwRitFelgmMXxzJTNDfFshI34wd353NT5eaEN4fFZWP2gq''@;'; put 'put ''cHFMVSFEUmA3cVpAZmBeNSguOzkjY1o/Ol13WVVPRUReQylbWCxaeHp0fkNWLigqc2R1YlA5WypCP29VcDwrI1M0eixxWUlLLngpdiRaUzJMTzJ9PFAqSmwkbForb0R3PzxBaDYlMTh8NEVoV2FDWUNUTF84Ynl9KXtMPnJRczBZX0txJDxSOTd1PFNLS3R+KUZdT1dZc141UU8wYkVbfXlqJTsy''@;'; put 'put ''VmI8W3J2b35kLDghfn43JGAmOHJuKSFEdUI1Y3NlTSJjaz9jWCtML2FwaTBHIm1zbm9hIj5HeVlpdiooLlAvdzNTc3JfSnIhZDtSVF1meUtHUzMyUV5pU3AyYjR8PiomfigldE1SVWJwZXlPUjljXVFAXURSRylhJFs5JjA5MlVoK2ZpREFCVzlCNk9IajcuKWtrancmL3AjfERCWW44XklHTGky''@;'; put 'put ''S0s8TmRaeD8xbHU7ZUFFUjV2VFhHVUg3YSl+WDwjeGN4aG56ZWpQJFVyTG81bHIrK3B5JClJYTpOIjYrOXldfUBGWl5WT2Bbe2tLa2tfN311VTlyJW9uaj5YJShmIUkpbWBvRWFXJipLZk1reipPJkBSOlM/LGFJUT9ENitzdFMkSmBaNTgyPyw+SlNsVFIpaDhzVzUoNn0+ek5yd0x8cix9b2Bf''@;'; put 'put ''eVE4T0F+bjsyP2chXkRKaGo1aEtqRjNxWTVUUEMhQi8/UCM5TzNhQlV5K1Q9N0x6SSk5ViMjJXN0PzBXLENaJm1tQn1De01wdnI6bXckUlhNb0B9TCU1PkMpcXJxdldERT45eDlgU3lWSmYicn1iWGIkKz5UN3hfTD01UiooTGw7STY2RkNNL0xdMDJAaT0rdncpZFJDKXs0L3gjJFlhWm9JJiks''@;'; put 'put ''NTt1P3BgblEqPXk+YzAsREUlQ2YmPy9TSkEiT19lOTlvQj0vNyk3VH5nJDFAckNKNUhPfDBfP30la0syYi8oUHtNYkVFVn4mOEM9cTNjbV5tc0hoXTkpe21qZ3NnPysuJV9RMmcwQV9uaktwLkBda0BwTE0kO15pLGtyPS5qLmBgZ1Aoc0t1LiVpUU1zQ2U8T0Z5MjcqV3JncUJybnI9OitmN0pN''@;'; put 'put ''O2B8dWYiSyI+RkZDVGgsaCwyPXM/ejxYPzV8XyZuQTZsaVBEaDEvXnFXZW4xJCs2Vn5Da0ZASH1FbzpKJG5QKVRnaEx3ODNEd1VnJEpBPG8rSG1pSnR+LHVYcGVUantubF58YX1bNj5HQyt3RFYhPTZtKDw/b3sicDJCMjB5PlJ4aE1dV3k9XjAkNWNJXTYxUHI3eVs7Qjo3OUUiQlN2WkIoJVoq''@;'; put 'put ''UFNNOHM9P3dbUi9DPn07dlo5NkZEXyh7I0tAYzlCMnxvd0lXQS5fXlVxRk1ldH0+U3JScWxRLDs5aSU6YmY5SmxRPlkmRkYhXktHWyNkO2c/WDJ6WXV1aCwuOHY+XjJKQCxJSFBjP1ZfYE45Pys9d3gmT3k5TXBxNjhFcV1Nd1M0MyZnT3lMLGZrYU93YS9IcF9FMkg7eFgjUGxGOiU9dlR9UCRi''@;'; put 'put ''ZntKWmhyWVMle15TOl00RSRFI3UpRGArUzxtNGk2a0VRcig2MDBNLFRBOmhJJHIvZiVZdCxGbGptc1QyZmxfbUIxYkJZfU1ielgoTyw6cDQ7eVRuYHtdXlpIWShtSjVRXUBDQWQjNGhWJD1wbzVQQHkjVXNWZTZRKmlUdTtPYkBMKVdUSzlDLjo5NTlwOXoieU5JPG1nbWpUVVtZSTNIJWxtMVpC''@;'; put 'put ''fiVLaXYpYC5GN2AkL1NFbT10X1RNeExyVGZye2BMRVpxa3heJHQqOjVvS0pwW09qdFBpbixVbVkrPVNSZV1XRDBOZFtZIjBAa0kpWz5lWFc5RzdeQDsqI0xkPyFsQ1BAPCNGTHF1b21FSTw+emEheyV7LmNfQHYofTs8TXwlN1koZSpiRTJmdlN+cEZXX1twL1A3TEcye25haVFAJU9qbm9LcT5e''@;'; put 'put ''NiJBSTtbLy8mT0xuQl42fldLJC83by5WSUNDUjRkSylRV3ZhcHV+L25rU0c/PVVbK3glWnFxfWt0cGVDUnM2fk8seDV1WjtMR2ZPakQyNEo/PmA1cntrYCgmbzxMYWc3VlVONSJrQkFFfCNqJFpvSVB6SihpXjxtUigvVSZMantOOzVPTTR+QysyMU9EQltASnpjW09zfEZPNml7ZDl1Yzt+O1dn''@;'; put 'put ''bT5HZ35CWzxaR3p0KitDcmMsVCZEQn1UZXs2fCMvV198QFBMYkloeCxgPEZoUSN8Lmlwam1uckUpaHY/LjR2fGR1LyNleUEwdDdkRT1TIl06dUJgIllkNyxrOEhgIk1jTmRLYSFKakYuazdtQnIiVT5IYmtHQ0klQFp6ZiNNUHBReGtNVUdle0pbd0xkUCZIPD8jKkZJRyV7aXV8WSw9ZVluQkh1''@;'; put 'put ''M1NpbV80Xzx6Ij4hXUJRR3ltLzA7akBHMWNtKUVka3BMSzAsInxsc0lCNDRvLk1CbGRnLlskcT1lPzxUe1Vzamxja2BKWlh9KC5ZUyFFamFCV0UrWnJUVDFFTUtoW3ltejc1SGVjUFNxT0JJNCh8NTRAZmYsZ1UrTy96MyVBb0xpZ15vKnR4O0cmV1N3KmdXUTF+KlUxUi5+bXZWWV0xMm54JHdE''@;'; put 'put ''ZklyOC5uNnVXPzRrM0pmaUJ1XjhtYjJZMVIoTlZTcDsyU05BfDxQY2ojfVBedS55X1BSO3htJU8yW1FbOTc6MT9hIlFtc1FKKVAlOzhWLm8jYmpTKENHVGVrUTk9d3A8PFhjWiVOT3BKSFNGZypGdzE4JHtNYW8jc2pZS2YlZWNuMiE8Tm97THtXJDleM3NlP3RlWGM0fDkxbU8kVH1pJTMubSY8''@;'; put 'put ''U1ljMTVBVGolQyp0TEkkSGsyNGVQYTNyZVZCenAxYH1jMXtHNnFxPzxNPkZGOTs7VitnQX4oYlMkXVZuMzshekVyNXVQUlQjMFd2eVQ8Y2ZvQFE8OTI4ZyQ1QDg0fXlFKCMpZVR3SHJwUiMlOS51Yyh7W3hsMFBhM202Q0lXW2c6aXYhSHt8QHdNenRsRVpSbGVsRUQmNktMNyV7L19tLmVqW3Jm''@;'; put 'put ''WEptX1FTMnZKdXgiSig7QnIvSD1yNXlpYDJpOndZYXssXjxdfExYTExRVVNFKlheQ05ZY1BEcjRnYGVKSTozeHFdPmRnTHJnbDQlNFhaOVBjLn5yWXxRL0Z4YkYoTm9tamtGeTw/bDkuQlhzWkZXfERHKj5mI2IyM0k+bldhZCEiTGxvKUY0MUZbVz5hO2YsZUMwZnoqcEVdcDZrIiZfb3kkZVFb''@;'; put 'put ''UiVCR1dDPXMpZkA2MjlpKCw9U3I6Zjgvc3FkYWVyMT99fH5NaWRfbjFQQDBKXWNxO2NKdW9YOSNkPGZdNyE8PDIyMUJ7d0hlLGxmYV97XWtWIz9TdUgsfnYocFJ3SklAND0rR2pJKGQ7UW5tL3tsKiJWdypNMGtpI29BcHFyMS83MncmUEN2MzE6MDklOHRnWFFgPFQlU1gjZVUscTlraU0qNitI''@;'; put 'put ''R2ZvL1J3NFgkWiR4RypGcGleVlBtPUglQzt2fDFiIXB4bFFRU2twT0pSfEJDN01uQ0VBcmpkaSw1NmB6OkZjcnFodlhTRVpOZkRHUU5eRzplQUh1Vng+OWVmKn0+XzUsR3REL3gyUkdaRyR1P0A8X201TEkxYV1XNTU5PE5PUWd6cyNXWkJ9WUZueTE4blE3fiNUbGt1dkIrbVgjYSMpV307TE5s''@;'; put 'put ''SSRCeThbWT9ieyFfcm0jPS5paysxMT4qQGBAXn1pKSZ9VnRRWj1mPFc+d1RMZi5XdSUvV3o0dlpfa2Bad09CUmw2IUZhXnJ1eXsmPWJxWn0vTjU+Y1M6ZGVhaFJDOiReVHEyLnJIIWNRfXEjeD82QUgrTjI0WTA1NFZHIW4lRHxeS0JWKzdYOytVU3ZlXiwpKyl1SD1SZWs5K3hPITE9U0ZoXWxs''@;'; put 'put ''e1ZhXjA4Sz1yXmN4XkslQzAyaWZARFgvbjwzRHsjWmt0TCpVcHdBPU4uJkcrNzheX2o/YHkhL202OG1tQy9uWzdyJkBJWjtQXSZ6RSMrX01kcm84NDl5VSFJZTRDRWNCQ2c/QzN1TEcpQjlJcHM9JDlyQVZYU1hrL2pne24kaGB1eWM5WSxEOGovIiNSKGE/TEZmaXUuWVk5SFJ4e0Fubi51V1pd''@;'; put 'put ''akc9TjJ8e3drc2orWD1pU0YrQHFDUUU+PGxqYjBFR1lWQnhfRndNM0p5QDlmcyFabEp7IWlLZypqYyZCKHludW4xLl9CKENuR2ovJll4O2tncSs4ZkFxNktMfXd0ZGx7elk7JiRaTVhzVzVGeHY2I2BRZ0pafUtGWCJdPyZWTWtSK0NsZE1LNmxfTjJJaFs9amVjLHBkTTQzZUIqUzI9OFoqJEJP''@;'; put 'put ''bEJDO2o2R1J8ODlCNWw2NWlZNElbImtJKGZXTEBkWXR3UChJQVtISU86VU1yfWpfcD5wY0ZkeTRdTVMmPmcjKnRVRlksWHE2aDd2NG56S2dOZ3orKj19Kl81bWV2cENOcyo7VnUzUTVyR28paCpudilLVSloNUJGe0FZb2cxeGwoUXs1JmpaM3BlXzVzKiQ7ZGVaIUV1bmBYMSp0LF8xey88eFJ7''@;'; put 'put ''QFhqITV2XnpbbFp5YVMzYXBvXU9MKWFZWXIoUW5VfTooZGgyVnxaN1hlJUNqcnVCZzRYWS5gK3E4K3QxJHhNZSpnbCNNU1o0S1MzK1BNcD5sJTxedkt6IT0ud31nalN2ZnBDO2RLPT5PT0E9alFIPlEpI2JvfXl5S2BYRWA+UXRmKkV+ejg6WyVNUi8yLEFKZkpRdl1laVk5LkA6SFhNVEZGbmNr''@;'; put 'put ''PlExdTFJKHd4Pi92cEZIcEB9PnMlfTkuOmg/cE90PkErfSUqJStvLjhgcU5BImsvMjMzcTdBVCtdYWc5LEskYW9efFoqQio2KEtmR1BLdzB1WGo/fVhnSDpoXj5KdTZyODZdPF03YSlodiJEZXA3OEg7OnVKPyszOjZRZWdqbll9RFFIVEhtLl1+M3J3PmpxVUxMci51YkAzMFd2OlZQdCF2cV9E''@;'; put 'put ''QjNTOUpzbzo9NVk7RXgrOTxzdCVuMWlvImI/PDIxTzw0WzlUcTUxW0RNaDVWIkpaRTYjOFg6X1d2KGt3UTRVeWhWeFk9KDhOdV51P257aWFyWTR8dUNINW82SmMlJl9+LmosfVFnRk89UCM0XWxMVD5AXyYzTEQ2dC58P3Zea3V9MyhjYlRGdGZJSGw0c0p2MDJSPiUqazd9RmIvNWRRalp3Y1Fy''@;'; put 'put ''em5zXUFCJWI0LCM0SHhvTl1VUGU3JmRaU3NfdWMpMSVgYlRiImtLR0hVMCVtP2xTbF9OKWoweXJZSCRgXSR1IixvbipYPX5lZ1hDI31DWGUlIUByditjNlc+ZGt3YGFmPHBdaz9zJXRDVEUldXphT0RiZk8iaFk1MCkrb3lnb3k3aSE5ZGhOJmF2dnQ9eVJUbXdOSU1GKi4wQXNrTjhSelVGNjou''@;'; put 'put ''WXN7ckMrbnl6ZWRjKyRwNmIrPnV+TjVYTDA/I2c7N3M+fXNgMDlBaztQVmA3U1U/WkJgejl2PjJxOyxeYz1iam85fj85SlBKUCtbSSRsRFEqem84JS55SFcmS300SDFpT0VbdFt0RVNrcCNCR11eJFU4ZUBVKjMpdHJNUXB0akdZdXxXVT5QPnAsJT0zKVAwZGBgQCNJTmRhNypsWCU2JDZwXmxO''@;'; put 'put ''LnhnaUZVNF1ba2JCTXhoXXE3WDAxTU5yV2UwNSE6c09WOHx+X3tERU5BJGNNPTQ1Rlk2KlohXUhRZDoib3ZhMiFwOlgmOCFXKy5kPzJMSU1nKTwjJlF4Pz47OSNCWTlnJilZKSksOUQxTzE+S0NDe2pIO2h0KSkjQk9McVE0cjRVeWRAMzdib0k6RjFvYSEzQERqVlRYPnM8NHU9JXdbNSVKbkI6''@;'; put 'put ''QyJMXUU8an1JS3FLOz1XRllfWTlOOk1oN2BbOGQ/eihTeT80MjpwSz9qeUkuN3QhdWNnMDdLL2tJXT5uSX04N1tbeDlQTGF4PjY9cihpSzZYVHVBbyxAeSguM1hKels2PHRMJUpmLDAoYS8iOjhjNi8vRXNbVUZiNEFFZDE3QDRHRzxEN3BROHR2emEhemxVd2g6TT80ViU4LzVRSD56QFsoc1ha''@;'; put 'put ''cnxZcVszI21fPj00LmhIdSNCWypkSzh3QURfVHd6WH0wWjxafEZBa0w7WFRYNE5pNHFDKnBZMmFEYV1QUU0yWlIhJEZATi89YGlBSHhHRy52cmN6NU8mOWRZI1IpP1chcTpbV2FFN2FWfGF3JkZdP11nQ0ZMSX5XKm8/aH0/XUkjWmZWXmN+bi5BdCtoNT1eQkZEM2JZKU1KcjZlSDNbdS9ZL1gi''@;'; put 'put ''OE4oeWlvMXVlQGgyK1BPVGddUV1QWDBJdSROeX5WbExYTSNMKUwmZGJzd0dOTjtndypEdT5QT1Q4Y1JYaHM6dDchaHZKO0VrU1lEfGMwXXtpYE1oYVs0XSl0OzF2YUF5YXJJbERqYW4qPzk/RWxQU1I6MXwhdFJTciZyR2A/UCplXmJEJFFHZFZYaiVHNzlCSTYzPVZDPy58bVpQdSFlMU9HN0w9''@;'; put 'put ''SGF7bCQqNF1KbUpXZERnKmw5VTEocT48TVVCWSQicEU2QWlnYHB7MWhgaWVULDYqYEg0WnVANDZ5empPS0xdMEUsPjZ7QkA1U1AlTEQvW2QvTGhNSUQkV2FUcS9qK19MRE9sSTlkaXUoKC5yKlo7I0BqKHxLUnIrM0tONjo5elUueFVFbkhtO0QmSz40OmJoaVg7N2FGLDEhMX1mMXp6PixQSHxW''@;'; put 'put ''TzY8JnE5TG5lcnF1ej5nQWEuKjQ6ajBwRTxMcClhXlB5e0l3c2swL153RFljQT5nMy5ARSg/eXBZZWd+NTtXITQxbTUhbmFdRXRNaFRjZjs9KVJoRUtDSEtNVTI6XXdhYCw3e1V0PlF0dGEqalIuU0Y9NCQpJi4kIT49XkZreEI0Zn5JXjdufXZrNH4rdyhYeUFKKVp9Y21EX3ZAezx+RS4wPTlu''@;'; put 'put ''ZVZnZmwvbVNuOFErKEQ/IVJGSVMuNzg9YXgmbzFSMkAkbFpMalkhR3FSUlA8d3NOSCxMRTVzQVlQIzdJMT56NFJzdHx7WCRnQDBnQGwyIVBpeEIkd0dBNEtJe1RkRyY5I1g3PCFlVk92dCZJMDVELm9RaWhSd31GMXZYcXlKO0toKSVJYy9MdnJ0enE8djZHayEmP2hYODU0OnVlKG5pcV0lK3J6''@;'; put 'put ''eyM1W1ByYTc0OnZ6YS5KanpZW35SLGZgTnI9Wm40UClDUkc7bUpeSE5scCJvSm12aUxFdCYqbDN7UkY7eSheRl1rLFd5OGY2TDJwJVJXdko2aDcveSkyNXdBJDwpPWNffGpaKEpvYyojYSU2USh0VlszWnMkeUtaSEA0OVAjPXNnQCh7QjNGKiQ1WzNbdjwubjo2M0UzdUtzJGNeYjIrPl9lY1g+''@;'; put 'put ''MnZQaisrfE91WzQxYW11bDpKQ3tsLltGZzkrPGtwIiUkZyJjMCFDIWtTfX44VnFGN1JUMjhsMS4oJGJsYitBSSl9RVF+cVNDXUdVTHI6IjcjJmNwIjUsUXxLOzZAc3Y/SHgxUU1jMXEuWXJ2X0IrandUSENZaXkxSH13cTc5S2hTLi4qSDhHczZPK0pAJTxVZlpMODN7VmtIamc4M2EzW2ZPVjEx''@;'; put 'put ''TCQyQS8jLEpgJGRuVl1FUmx4TjRFJVhaaFtQandyKlE0T2A3LjlMIXU7YSJqLF42UTw7fHg9Y0JLNHgxXz8seFtbU21tL1U1JCYqTHRKPXc7M0N9VXxFRzthYFZuMllPRn1GS15dMFcjejZaSl59RysrcVlhN1piSSsyOXExQG0icEl2MjxXWiM9K34iMzcvUiordzYwKX5YQUB5TFglUDZlYytD''@;'; put 'put ''TyJiQEo6YiwuUyQ1S1c9NlddU1VWckIhO3U+cD9+ITshdzQ0QURNQkQ1YDcmcyF2fWBoNHc8ZHxFIWRlLGx4LEJiL1puRG9OWzY3TlZdaEhsczJ2a0tmUkciS3FuMWN9I1pvb0NqRTFELGpmPitEZmc3SWEicGFfd2ZIWis/VTM/ZnFSZkxyO2Q5TDRMWmFNN2wpRmo2SCZeeSJJOkdXXjVgcSU/''@;'; put 'put ''VlNncmg1QlckLFJOOHBfI0R4QGR7WHcuQjN2SU8sY2UxcjZQSUNtVX5LMyM3WU1KWFZPcWA5cSJtJks6LFJ7Vm46fn4pdkhvKnBwTXJJYEZkOUtfV0x3KDI4SV5veExZYHxiTV1bfGNpLCtyTHd1eS5LZ3ZIT0pqdWdyTU55XkJYZ10wa0FHazlSZGhaflEuREcjOihaUiF5QVM0d2hJKjhfKGxF''@;'; put 'put ''SUdmKWswXXRpfUVPfVVBc3EsOjFzS28kcDlkfWVoTjB+UilNcTUlejU6OV8yNShLbjlpbl1LO0hlVnFAPj9JMk8hQWMmamhSQkFJdmZQd1Y6N0F4eGBnfCorSVh3PGt5O1ZLNXNtRzhjbjp9OkNdZmxMI1ZIREIwOXpGbzM9O2JjUEFqMH0rRSt1e3soNDljTlRII208I3p2OGl5K2A6XV5DPGpP''@;'; put 'put ''d3ZdS2hLXiZ8cXNLeSIuPTpHbndwVVg1Vy89d0pufWNVLjxwQ0VTcXNHWjtMXXE4dHZOWzJRbnxoQTM+OUIpRTd2VWFxTSVrPmRbTUVwY0Uwd01ucXsmKnQ4VmFtNmREQTJ7IkNjeGtRRlhtNnkxOzx9MkVwSCpHdn18VyxyUHZhPzRDWCRFcHNuMntjdmVJL1F+LHxQK2JnIWY3fSZ9c1pAb35a''@;'; put 'put ''PCk8TWpuNm5ZaDl3SV1xU2Q/XSpqVU1uTHc3V1VgaGVDXWZZc2decXspTTwpVHFqeVBoZ2Z6UkBVLEooN1BoOzB+bEN6P1RYY3h1TFtYaVJ6UE0rbn1UYnwqZk1UWnV4dzdESlNdMldrRXdFYCJGaT0lPDBPZEM+QDJyaTZWQjByQ3YudUsrMCJoN1E+XiNWTl4/NkI1XXkvbVhsWVBXMStUZDoh''@;'; put 'put ''S3lFd19bd3BrJW9Wd2Z4XSx8aDAxImE4PkZGPHdtdFR7PCNJezByQjZHPld8O2ohSEAhO21zZnVaSkI+QyxONmImZWJpT3ssWj9GdElKI2dPcEcjNSpWPitGRyM/ZlhTajpSZ2BTU0h0ZFRkWnJ+OiEjXWFjKy5VXzQ8P2M8W1lycithMS98JDYqWiM7bWIpcEEieiJQPiRjbyM9OCJaU0d6cSFB''@;'; put 'put ''WUUib3VvWVRYTGFsaEF4OVIpKlJ1Q0V1NHk8Vi9VSChGeVNOMFFETXA8ey5nfTNraG5JYkRNOXJPeHo5Y19ISGliaWpCKCRFZzY7bH07Sng/NzlzMzFpIjdqKGFFKiF2Xjl8dTJfZHc2N3pOfjF7bTltJH1yI0JWI1F1SjlqVXljfHhiPUlFWEJydERmcmZUfHYjWU1AI08sSF95Nn4xIytZOW4q''@;'; put 'put ''Tj9yKEQkeH06bjJgdFZaSmNSMkgocDRzPzc6UXw8WlpyfDxIdnV+d0g2aTBSNzx4YjksOkE3LmN6NDUhWy9ucCo9WTdMe3FCXipTfk4wYEFKIU15fVVaeUJVXihxUGIvdHYzeG5zVk9+QnFGR15CdEJwPT1hL2BIdT1+aFh1Vno2PCludmc+ak57Pm0wdH5QdHwrdlJIKSlIL3QzLEs2KTp5b2N3''@;'; put 'put ''QntUSDFYPXRjQXg6UWMsTiY0NDdLd0dPRSN2PmdoIjIlJjNkdjNFNFg7R2RiaHVdMThyQF5dQm8sQ29laFMyRyIiLmg4OjxDcnQ3WEY2M2taRDEmUndQX2I1aSh8WyxGTltuTi8kNXklIzlUP2tqdTdVSCRMITc6e0UrPmJjKXVebVpMKVdxXlIueV1meWBdcD0mU29LIlkjMGVYI3xsNHFeX1o0''@;'; put 'put ''ISxAaz5NZE4sWTBTUTVbVyEpdkp8Ujk4fHw3PG90ZX1dSThmI2Z7ZEJjcn47cFlMWUQvR3VKUGVmYmgzLCNAZ00lUXBQX3B0X2RzQSN7JjRncW98bSFAXnIsS35dQmorMWosZmJ2OzpOIixmXT9bLH1QVGNbTV1KSGkjVE8lN0lsY2c2ZHhKPXouKmZsbjQ/bWQzTV1lcGk0LipXYFpQJENsY25U''@;'; put 'put ''ZSV+UFJEXUZvXVdNSXsuI1dkTSh2cTkifEN0byE9P305Yi9qQl8xeEU9KzFLTWFhXz0rMT0ocmhZdmU9ZUJOS1EueVRuRXx2bUduayolJDxbVWdqQHV5YTExQ3xjS0F7bG9wUUAuVVloJkBYMHc6OFY3aCFZcH45cUA+NiRxKzg9KHddImw+UT56KjNtUVY0KkNjZjJjVDRHRHl9TzsjNG5AaXVE''@;'; put 'put ''d05ZWmBLS1lhRy9TSkN9U0puYCJta0syMT8ra01pRiwzN2c8MEVRRSxHTFRIU3BBXnVvY2ZTJGltYDhCOiNGOzdBd2JFIWUrPUpNVFJtT2NWaGJqV1U0JEssWGteI1YlYU9GW2dNZFZoUUpxYCpDal48bjJGRWhRSnFgRDE7YCouPHA1YEU8RDZiPXt4XyNYTjdxZWlULzN6Z1NBezl0NiFORWRM''@;'; put 'put ''Y1Iwb3chdHojVUJ5WVs1bUlPInoxVmp1PEc+dkBLSzZvYCtQb057THQzfmB9RilibGBLL2lCLFtEMWJqPlZ6NSYzNWoscUlnUnp0NEJfZChKI3g5QWgxRztWQjU3R3NUIjtmS0J6cz5VWTcuKXZNMDUkW0x4SCw4QC9+cn10bkZZZzlLIlU7OVk2PlBjLEImOzpRXjR0QHdfWGclJXZvei9+OEtR''@;'; put 'put ''LktwTWs0ej59WTZtZj4wZ2ZJam9JbCQlXT0lTk9SIXdvbHZQPUUuRXZJYFdTS2VUKSNqcixed1FrTV9DIlB5LFhxdk03fFBvZWM7bS9mVWA0V0RFI3JlXS48YCtzbW1rM0RmMUJjL2RQM3VVd0Rmc3VtKnFpJVA0cFBbMzpQT1NEQSlALj9OJj9IL0lhbHV6IV9iQXtwR0koVyZVSlAuYy5pbW9o''@;'; put 'put ''flkkb3VXd2xmRENQOzxAYEM9dFQsMmJzQTR9LztqfWA7LElPQDl0fEhuX3l2aihVYUdYbkx4ak5uKHJrdVh9cj45UEkwRTl2TCV0NkFVO0pzJnRKXkVFeXdKJF9uZDRVW1ttdSJKOk5JKDs7c307S3lST2JPTCJXNT1eXnxRaXllJWNXOktyJF9CTjUuQCRWaVhuclI1d1JYKj1DT2c5Z2VWPDdN''@;'; put 'put ''XVk/OWhdNjlIMUAsTG05KzxxSCw3YWhCaWArVnlVIVouJkt9NCVrJD9xIz1uOXIqOU9AVktxb097KXkxTk1FRzpCaXgpUmNbdUw2VWExQGFdWDFIVXY1Q3diRU1jL0NJSz5kXlVURm5VST8uUHckaV4sNGNGXlU8Oi8keixCJilyJDsuWWdWYD5+bzgsKzxQK25ka35gMUZ9e2FORDptNm98VDYy''@;'; put 'put ''VHMuXV8pJXMhVWMrZmZHdFRaLCpYRDlwfVgzW15CbkdLYllJUkZXWDVEP2NJQ1N6WS92aSxEZ1ZbZWE0JVVOYzFEbkJxTy5vYTRTUjx1I3F0RDZVfkF6RyJAUTIweWEjczxgM2F4dHM4VFV5JGdQK0lgVTgxZk4+ZktydWtQTXNJdHxtLkRxVmFmN3FTKXFgMiliMS5peDFlTFBNO1dgcil8WyN0''@;'; put 'put ''YCk7cXRVZTpAZ1thUjNubzRqVXtCWWlaSUIpeykmSzJZckUmYE9OO0Z3MERmI0JoIS9PdUN3N155LDlae2xCTXFAYCJ3e0d1V1F3bWQhMGJYNHVJTCMxZWM8PHd3djIlLCF+SHAjO1hmVypocGJ0L3wsNjZ8LEs0UlpnaUdvTyJDKnl6LHd6Mmhhc2dQeX4rOHU/TjlFTV0uJGVwaXkkVDN5VSV3''@;'; put 'put ''V286citYTTNocndAITYkT2hwMGljVDdvdnsjRVRad0ljfjl9SFtvTkFFa3N5WF9+ODdiaztfNn08bHAie2c/Lz5XeVJecFl+RkIzam9JMFd4cWFnalldRkQ5a29qNSp8YHlZYTdMQXJbcjF2ZFkhYE5NZEcxWS5xWltqVlYjSzxVRmJwPHA4WWVeJTc7cHVpXyw+S1toWH5NciMzdG96T1E7MjVa''@;'; put 'put ''ZjN5d11tRTplOUZiKCg0NExmI11kSURpSUtPXlZTL1FGXlUoVjtwPlNufXFfbXVLSGVCSkwvNEQ2YX5lUD10IzU9VjQ2UjUrUHFDbkk0NUl0bmRCZ2RePV9VOEc4QzhMQEsoJURSRCYyMF9iKFdaYj5lM0dPI0gyKXk0KyFXWChzMFhlQmBIeURyI0xYO3AhOGxISz5ofCtPUUlPUzR1cGhqRGk8''@;'; put 'put ''eiJgUU9Wb1VIfEpCeEdidzVIRFdGSEdtZi8jTndIdnd9Xko3dSNaKEpGZTNZQT9bZWp6RDc4LDV3YERQciN5YlttRXw7OVJ6Wzs4Rj5aamdKeEBXSDwwWGAjYlg3KlhBa19FdEdPLExpR29PU3tJaDN1NXh5QTAzTUVodjlJQW08cHc8czFoVjJ2UFNCXipxajhjRGkxKUdJbWVaPjhfdVVUNX1j''@;'; put 'put ''UWtnT01MdmswR05yK205YlhYSFJjcXRKSzhme0MzdWR4aSI5clFBfFdiRUF6RDMrW2tLSCF8REFwSjVYS0BoeWlNen1vektndzVYOilzRXUvS3pEM2FGUVk6TDkocloiSCwmR3pHMUBqN1FnKWsoaSx7OyNgeH17aSFldCguaUhMdFZqMXNGPSNCKFNSPENIOERlIlZ+XSpFNWxudHdrfEA4a098''@;'; put 'put ''O0g1Onx9dEtIPTBmZF58NXQ1OH4weXdAO1M1MVdqVjdnWTRpJl10aXxvOSM1Jmp7T044Q0B2N0paPUhPelI5Vkl9MDNNaUw/V193IX1hTloiJlFBZjZ2QF1mVjV2b0piVzs1N0RmbUY5MWI4UTV1Ujc4aUc+TWZYc1NidyRNVy9NO3BrYCJAdDx2TzN3PD5VanFqZDIscVBjL2VYO3lnPDg8Jkhm''@;'; put 'put ''eX1LP0peRkFjdTtUTzYwNEgrMThwVi5UNTp6RU92cTB3OHYpR3RQazVVT2FnS0tAUy9bTEszYCFYMTBaZCtxdEZYZWIqPDpgPmtIPk1eKD49MypkcC4zX2hhT3dIW3U6OGV3XTNBaUpPMzlWOE47Zlk5JHxAaUdZUmVNVGd1NElPKGtyZX1lLzgyMT40RTRnaS4oemVJYDFDTFZePT1STXNXQil7''@;'; put 'put ''SVRPX013YG9rTnB4VHVNc2dWWyNDYjcrWWkiYTZaSCFJbCFfOEN9ISY6KHApWm01I3V5L0JIL0I/SVVNUkB3dVBOTWk5OGl6KFs6WlJEYGNwYzVoMGU1aHx0T29TRCxGNF94PkRYXUNmISRJTjYkOG85Ikg2X1BfI0c+Q29xUlh5QyZfZ0A7YkRYMHNyKXA1WmxhQzltJWNnc0Q+OVg1V25HW05v''@;'; put 'put ''SXYpcUxqWl47Q3ZaP0ZXcXUoZGVTaXRMbG5xMz5ydDo3RUs4a2BxMTI1M2JrfkZwVilRbkM/e3Y0OHx4W01lVlV3M0ZaPWNUX2tvby9LYSJyNGQ3PkIiSG5mem00NHlZeXxQPVBkeldMK18oI1RWSllGUzZYWitvQz9gfV9IO2gjMVB7QEZ9WGMrZ2NeVnZfOjV2KSM9bVhPVmV9JnVCL3YkPUgu''@;'; put 'put ''Zj5ZVWVeUDBUY3VUQnx9UktlYGkkT3pfd2g0d1YsS05VVkIvVz42KlBNOVdVS1k2XkheO2Z1Z3F6JTdzfEx7UHckUS9UVUkwOSVMJmV0VU9LSkZQRHhbSyJReH1KaitaIih3YG9+cyZWdlchSTxWeTMxSytwenU2cjFpV08wI3dVP0BGcEdhcD1lNXZuQGBpN3xwdW9GRWFHbUlnZm8/TFUpTT9R''@;'; put 'put ''WFhETGlCRSUsTjFSUSgwL0ZXVkk4alNhY1t0IyxjYm9vRFZ4Z2J+emhQSngmcypzWFBXNn55fnMkP3xzfHc6MnNuYCZ8ITtmTTRffjx8dCMpKTlvW15geiV0NlFjW0hbX1h5cllVVmpNQH5FU210VHhIPyI9MSQ4MHZAZSQxOHl5ZzpBViMxfF8jeil3byU4UihgbmtqK1tCNHtZOTosem52UX04''@;'; put 'put ''aUBMVl10UTZxeVY1YUhzNGM+P2BKRUVoLzhXNmJTPzlsREQ3RTA5ZWIoQkY5Xi5NL04xWltRdXRfSHxQMXRVSFA1Yzs0WW0jRy58UEF1e0FLZDNmVVZIfSJbcXphQzNFR2wjLF5NPCMxdGx6KFgzWilhRmFHIWkoYGJqZmI5Mj4rO1EsN11nVjR4e3JQa3k0U0w1SkxPUnFycGZJKnxjQ3JoJUh7''@;'; put 'put ''JlZ4JShzRSh8V18ySU8qeCgkRWwiTlB2ZDNrTHBjQkpqVU0kTUNaInFOaSEvUlBBQkFSRFB5QD5CZyl7UzMiNUxlUjFIJHwrYDRMZTVjNzlLcGdJWWsrYUNtZ0NDV0pdeTlNenRJX1NRPz9qZnxgPyZhQ2hmJkBWSj9ydTVdbkdLOysmUUR6OS9MUipINS8/akptZE1daHAqRGZ5dU9QQUJ4dWFZ''@;'; put 'put ''MGN6RF1oRE53dTF0TUh5d1ZYVXpZT1tBIVkmYSMoYkRdaHhCOUJPQlVOaE49aG91cUlxIlBHeyEyS3kmaCNxIT9QaXhxOXdTPyp0I3BSUlBHbEddZ1Y3fFg2VDYkRnp6fV1JZ19eNilnVTU4fWI9aTQiKngialVXV2pSNjFbckw3ZUR2bnNoPGlLX3sidElqbTRqMGRPbCVreUo/NVNyZls7OFpe''@;'; put 'put ''MD56VnoqSyRpLyFJWk1aMWssdnhaTVpLSCwpKkRMNCh8Qns7LFZVclRfMzVoMUhfOC9PI11RRWVzNls+citVPjliL24+Rig2dX1qbFRFSnp3WEtHTU44Zl8wdmpwSUhdclZ8OWtVVGVlcldhcCEpTkRifFs8Z1ZsQldCNmY9R1o/NlUhNVRjLmxTNVZmWStdL3lyUylZOTNfSVJTN3JEIn0iWExq''@;'; put 'put ''MmFaIVUoYytSLy5YaHQyLltXPmI+NDR2cSI3aDo7Q2JUWndEWC9WNnZ2V35XdSZ9fEU+X0xYOX1oUyhrcy8vLmgjTDwsTEVMaXp1Jj9NY2JUandYM21GUn4uc0ZLdnldUEQkOCF4P180PCEvMjkheCZMMzk5RWhteTkheFtfOXRpJUdfMjp6SGZpPGJdeVF5YSJranNtMi5RYlZMclNRRmQkVDE9''@;'; put 'put ''OzNrdilyU1g/aGxqNzZkQlFKPXx4PSpyU1g/aGw8dyIkNjRjdCNTN2pUW35YNC5GKTouYmUmMDhdOWo3TExlcilicVI/IWI3WHhYemcxaEJLRyxdIUAmS2VBazBHe25TTzAkZWNzVCs+T1I/QE5pZ3NZaipZXlZBUi9QXndWMmpaT11rViJbai5uJVhpYkVLRjlYbT4xezZrVCFaZktwJEUoO296''@;'; put 'put ''XztVQFp1cipNfkF+KDlGekBAQihwSlglO0QpQH0qRlYiSyQsZSUwNGppM11nR0F9dWhYOlFDWFcuUHsmX0lrMiwiTTRjYiRvUUhvO25OJSFYI14lVV1PRmt7TlU9WGFkT3IrI04mJDQ8VSRrVVMxNGI6MXYsfE5MYWlpWzQ2OyJYRiVpKFBVRVlbSnl8eHR7R3xZJE9SdUBEaiU0NXNLZV5uYUhP''@;'; put 'put ''QlR2IyJAYStYMkQ2M29bXnxqVnF1a3paUnFVWG9KZDxJTXQ0TXt1R3owciJdIiY+NDpLNG4pQzpoN2EyYmtbTjFZPmtOYjA/Y3UmLnhXUW1WM2ZPVzJdMXolYVhfc1M9R1lEfFIkUC9baCE2aW9FLylZaXdjPj16MV18SituWD18Y0VieTE8Njo0a0FTekEpal5PbmRtRDBSISQuUzc8LEMvNT0w''@;'; put 'put ''W1lkZTtvdGJOeUxVZXQ1ZjpIVEY9d08qPUMwRz17R3B5T0MzIkdbMU5LZkFeMk9KczQvMWZUeSF5NDwveVt3YjswLzdALHRzKDo9YH5GVVlsKU9hMV9+ezJTOVdxMWBXWEwrRVR4Kmd+Qj42X0EofVRsKVdSKHRUeHcxaHB5X0p3RW9xWippM2taQ3V0XyY7Wlk/RHNwajQ5WWN8I0NvTFhpcEJQ''@;'; put 'put ''TzAxNTQubj04NDc5ZkRYM3R8PnVuQEoqME1jfV0hUWFDQl1pWj1pbDF5IyRNZ1lRJH1JY11aP20jX293OD1bWmROSnhpdHVFS243TSpYL0NySnwyK1AoamgrVXJEbE5iWDwhc3VwdmJQXjs7OFU4M0JeekNmIVhIOiRLPT0+bE07InddQ0lJYWB7WGJIV2lZRX1EfGVpUThFezVqS0lKJXpbU09d''@;'; put 'put ''IzxsMWE3fUg8ZkxgZVMuTGRsbVpOUkYzdjczaVV2WDc4TCh0cnNFRXd1b057QzN1JkNeaVZqa0E7aFR2b29FWWNEZkcmdTJueVFeSHJ2WDc4TGtgYUxDK0A+I2Z7QzN1K0N5eiMrOnRXT3JCQkdFKzg6Oi5AU156cm9wc29tVjhpR0RORERrdGd8NXY1SlltXXhkMGVBaX5hWEQqRWZFekF3Lkwl''@;'; put 'put ''L3RjIiJ7RnNsJTh+WHwmJWVPKSZUIX56TEdHPzl1SDkiM0RKRkk4T3tPWzlNdHZRMzVCeztdeCpjW3RtLiMrcVI9UkBpbCMvbTN7U2NeRSs2SzdId1Ixbm9uZnFvRU0+aXtAZjBgXjJlQ1tWbDcjX050T1IxcDosSzpbMTNvNDh9WTo4Q2tnckdQOTVbSDpxOEd3YkVzMDU5blsvNU1aT3JhWHR8''@;'; put 'put ''cldTezh7b1o9TWU2VVpXJDx5blZNRCF6cT5oSl1eZ3NIJiFCJD9HKGA0UlY8Z2B0aWt1X0pfXldufHk1WGR8TG9gcTJvRyh+Qig2Wmd6PlFpNCR3bHFFK1BTdltxZ2lgZCJdWTNEc35eW1cqa2ZvV3pFV3kzIjskcGVhTD9xMjRdejo4I109Wjh8IV8zKHxoKn12Un1sKz05fjJTUEZ3WHk1ZGNa''@;'; put 'put ''MThTQHNJIyhIREQ2KV12dXA8TTh3bmNRY1d7eiVAb21OWVlTYz5SVkcqdng7SXspO0I1SFBINiVCI2xBQ3VHU2F8eGNRJk1tR2wwJTNRX21CTVVXL1FTK1tuKGBXKEFkdUtQLEl1eVkmJEVmdjI6TnBOZyZSYSV2emdFYENARH0oPVBXaTZSby96bFpIJnNUXXdQY1NKQCpnZ2UrV0pAP2d1NT9A''@;'; put 'put ''VT1hVWZ7a2U+MyIzVlkjVipdRE94XjkwOywlPT9vJEVbKUxGUjtZS3VlMSEjQ31lfWgmWy5bSGRKcDVfS3V7VlVWQ15ybnk2UVBiaiNTV1Qpc3VSN3wlZTlbNSY3bjxEWDxeMzZaeSlRPWM0VjR0IWFaWzZCWStWVWdbdSIqW1BoNG1tZTB3dy9RPkRrKGYyMytxQ0BhSD8iaX14dEVxbjApNio+''@;'; put 'put ''SiQ5T3gmVFN1KlRWQjhbcU47KD5KQDRyQ18+Wk50TXNDfUVEQmh3MF5HaHF3Vmhyc2kxSFFlOU9McXV3IlgxZUxpV3ttWDhIOWBwKXJadXx0SlFPYmVsci8rdSRObyQqd2xKXjhBe1hlRn4sbG05MyYrLHEzJVBTYTRsbDZoRUZmVTUlYVRJRV11fmghTjx+Zn5dans9QklIMz9EY2MqdV81e1Qh''@;'; put 'put ''KylzQ0IqOl5OPUxwen1mOExQVzduVGtzKEowUWU0R1JiSDJ9IyJ9ZVB8SFd3Qj9bUUVsI0lNL1lUa0toUUolPzI1Oyl3e1VdWDtYX3lLUWUya1I8cHtZNDQ1RS88e1IrZEZTT0x3dyJMOypVbjlfMWA9cl8lLmIpcV9ta19wJmB0LD0uTHVxVXU0M290d1pfaTRFWGlGVU5EYShFe2B2NF55cW8+''@;'; put 'put ''bVE3dVh6T3dlVDhRI21RRENsfSs8JDlXT0hNSyRFWSJGIWVtUFV3KkJRREVYd2xCR25hVzZiRFNEV05AUHYmJl5AeT4rVmZHTWwlW0RUNmFDOSxkNEwzKi4iQGdSWmFATjk8engyZk9GX111MCgiQ31eR2dwRnhSOHZqW2klMyt0bW9INzlgb2grMWQ0bz8+YEArLkVrOlt2dzRoIWt8Mio4aTFO''@;'; put 'put ''UTxAU242JlsrJHhwdWNvdUhzZW0+YChGUysvJF5DNiRhcyh0cFBmWzUvO2lwJGI4InN9fVt0JGwldXd7czQ+bn1vfmxJQlZDWilpMzZqUyN1SFZDPD9GQzxEc09ucyVpUiVrMFRmVCVkYzpjZy9jNz59JE95R3FHTzpeSVhfWzFDRFkjZHZjc2pmL0dRPHFoKENOdUBdNzk5OnFjZGtgSlByNVVL''@;'; put 'put ''Nkw4U2d5Qy9VbjlMMDsyZVA2aTZzVH1aL34waUIlN3tCQi9TMzZbO2d8LyRXP1QhJjRkVlBJT0tfQVhDfm46LE8qbzIwcHBBKWU7Wjwha1lWfjMoZCshaGMlX3ozTiN5QH47eENzfS5laHBtJVVTOzkiZkx7IlBrPHp1UlRyJiRlISRBV0QqJSQjazBFXU84UTMqOEMmRCZEJkQmREx3ZkA/Jj0v''@;'; put 'put ''JSYiQzlReD9IbElsPFpEZDlhQl1uT3NOMzwhazBFNWlIdV58XTIvMGU7X2YhcSIrY1Z8Ryo0fDg3bkxmcD1Xa1k7QW1FJCpIWnBIakUkO1ZRR3R4fV0odHFAKHRRdWpYWWJARiYyRit6KTphKyMvek8keS41JjlPSFcvLnpDRi4pYThbNmVgIStdKEt4bG00V2FkTVYoWldhPT5iX3I4b1s4Lntz''@;'; put 'put ''NEByP11GZlhjOm1ISEYsVFV9UUA8ODthbTVbWDpbPCx0bmBtOSF8RWpuOEBCNnFrMGIoPTkhNCN1JHVTOCIoYmhtc1QhYj5KZyVBNWgidTdzIWh9XUJyOWUzXSwvUjZyVWo1alJJKEtNelRIWGRuW1hVJW80TDN7I2gvakJpLiklNmF2MExifnFsNUNUbSUlJSx4JT1mbVhoK1lDY3NrOW9zO15x''@;'; put 'put ''XmVBZHlDRHtqMkk0dC5ZJWIvei5zcmxYN2s5YHlLS0ZXPGYjJjttc31mai8uM258NmhaVVNhIXxZblpVaDk1I0p4P31LcyNgQmdeOl1seyJicC5ZNzRSYSMkNWh1VypEKypfIktFVXkvRmEpVDx1cGh4QF5qZ3RFd0h2JENdbiRDXX5nRXpRfEkrQUJ0PH1APV5SK1FTeCspYEtHWG46WWtLNGhi''@;'; put 'put ''W29bcX5gVjx9YEhdU3Iybm9VIVRTPmowU0t4Njx1cDgqbHBIcHc0V3U/UmVaVTEpJVdve2FwaTNoRElIMEdJfWZFNX4kTy5ncHY/SzIkcG5Vekd2NlIsPi5bUkZRUkRuR1hQM2BybTsmMkxjWTNifEglUHVgYDh2Y3o2clVdPGBLfnIwRyhdfSlLVDlldndlNFR4XyhlfGZ5WiFXLyxUdGh4U0J4''@;'; put 'put ''UWkieDRxU3M9XjhDMkRzVkRrNUN1bW5kNyE7QHZ7YHtOXzExJVtBWl1tfmJVeTVkVnloc19JbUxpTUwzem1tOTx4PCY6PV97Ty91ZlA9M0h2QGROWEpiLCN+KHJXZ0pvUDlTckF5dC59bmEpXyNNWyV0fiRaRDZrJllsaG5rVjtmMTV3QXJYZCR0UnxqO0cxPVlFcE4zeVU0VC5ORktNZWVZRWlY''@;'; put 'put ''d1lzZSYlL0RIPWlDM2ZAUmIqJWUsXT8qXnp7KVNidFpyfVQ0L1hVZncsKmJVRDMlXWFVUnlwRUtjXXJYJVBlOTtJJndtL0R0dj85UzRwKXR0fmIlMz1ndS5WUyZSVSNhODttV18majs9RlBwczN4dkBsS2xTN09kZj9tSDglUCshPXV5Mmc5JCZOTDsodz9lJV5hMWUiWGpVYy9rQmhfPlpSK3oq''@;'; put 'put ''ZiNnOVA4KzFhdiU3M29kUmIiYlIycjx7SHlMVElLXUBgXWJbNHNIbjJDeHJBbklLSSE7OUxPeXNPe3xCbDojfSV0dV5APWs6e3t7USt8Ml1tazglQTQ6XllTRTtfW0k1alZjdX5BOXdZIyZ5Oi4hVWJKZzg5UWU9RFp5KXExbyVRdD0xInRSLmR4W1k2V0cofm12Znh3RmdaZmtocWppLzpbRXhi''@;'; put 'put ''bEBRSnhJYVdPI1FtQC8wWiNyZysvZUR0LnVzI1olfWYvZTEhfCs1fX1lY2UwSjQvaSp9ZWNVR28pcnNDTlY/KX1rSUV1TUl4WypXejF8fWRmJGFQYnJgNGhiLGVEKTclfWtJJj85dTw6OH1rSUt+ZWMmKHhbSHczaGJsZEgsYDVXL1FxVlp3TntzaSRhP2J7KEdyU04lWmd6MGcrLyZ8cl9rYVE5''@;'; put 'put ''MiJxT2hsbzdONFpNbSMudylCNWUwQHsoUHoqV0ZjLExaKUNPXXlFNilCRmEzLEB0b0wkfCs1PExocyNaTGFFMFhZYjEmfCpNKWdGY3pqbDBYWTIwZ0Y6ZTtGTTR0JTouNFslTSMsTE0iQmgjVUU7Kz1QP0BBWCldbHs8aHxEK1dxSUF9cFFBQ1koSTA0Qmx8ZVI+QDl1SFsmfThJbWBlWEJANn04''@;'; put 'put ''SVk1WVgqT0F5fXVpSERnbDE/XmVPUldRdlI8WFIqT043Y0V+fWYvdVdXV1F2a3w5NC80KX0wSXFgZVhwUSFHTUovLC5RJWc2TFp8T1JBe2VYMylufE9SLkA5dVFDQj83KV8wOUdCOz99MElnYGVYMyltfE9SYGBlWDBgOH0wSTk/OXV3YWRzYUU4fDk0ZDYjfE9STiplRFdsbXNieH19Zi9XMTl8''@;'; put 'put ''flE/KmVEOHpNUHVESzAkYTo2bXx+UTxAOXVzR0RPK1c2SXBHbGFCdTY+RUcrV2RuNUU8aXBneyleVzc8KiQyYW54K29FWWBjWldSQ0BNIVs4eFZSNERHY05pWWpHXTh4JFFnTVhXenUqTGdaWWxDbVBHe29NNGEpTFJHY10obCN3Omc0M1I9YDtZOnlzfGxNSEQkfFpRO2loc0h4RGkodEMwcXo+''@;'; put 'put ''QE0lRUV1c0h4MmdGY1QlZFBDMGd4OHU3fFpRbFhvc0h4bXFTMXZARE4xKm1zMGE7ZkBuUzFmJFskNVtse11QO0l4azdfPk0mfHVSIUA5dTU3M0RqVWJ4c1lWJiYrWCh2U3IsK1cmSUF9cFE+QHcjVFdTdmdWbjQyenxgQ2pfa1NPaEVDflZsSDhwUT5AZUJEe3RLUUN1cyxzamYzc2lFU3B7UnlZ''@;'; put 'put ''P3JYRUEsKX1VSWo1eHVjbnolfUl3WGs0PHdlXnNpQzZ7dnZHYmBJMFRIXldiZWBbeCZqSH5XN2UsRHJ3e19ZaDtEUSU0ZVc2aDtFY11uJGY5anclL0olW31DSilHckJRd1g0W2NJa2BabUZyeFEjUUN7MmJWaFQ1VFdJdnBxRDY1XWkmeUZMe0hoPDJnWEIuTShaUUZIZUZvTzI7PXEwM35iR2Rl''@;'; put 'put ''MWtkXUUhInhaI2h5LlZsU0UkS3czJF9DP0QpWXJ8UTloZig4c3hRIjYoO2ZbbXc4MkNJUlo6KC4ubWhTVUlFcyZDVlg8MXBHfk1zRG8le2NFYFd0cF5HS1pzMyZDMC43cCwjLixIZW90OF49eHpAQW48cGAqKE8sXnNAM0NRPjtDcHxIdV8qajo7QyJUKH1TWzxdSkFCM3RUQ19aM2xpRFE1LF1T''@;'; put 'put ''QUYrPkJgZHQ6VkRAOkspa1FLQVV0WjNtZ1UzNVU5eE0lN1pHPmRebzdgUSQ1U1BVI1tvNFQ4dGlkZTcmNys5RSw3PW1iVDtKN3NncXk3WSZoSz13TExZcTE+Xz52dn5DYz0/MiRfbnQ4SjllUG5QbzRBeUMvaFI9OWgwSnVxPUNHUnYuOXdxUSE9Rnc6L2Y6QVhtcSZvfWdvW0JGNXllTCRVWDos''@;'; put 'put ''KUxAPHY+LiZkPXcqTzx4VFV1cTVhKEM5ZSh1eHZPZCN0WXBVOlBZOnRmc0IrZnRpZUFHZDghdE9zZVVtYjxEclU/PXdXTTtgVCNbcW1Cd3xTTDVVbW93Xj9hV1YkV29KYjB4dkFDLl0/aT9eZ2YvLCN9LGZ7YG8iKyV0S1FiI2NUb3srT21hNGl8VSR6JiNOIlB+a1FQT19sWUdtWiZ3NHUzYDxn''@;'; put 'put ''RFloeiwsJW93OGQ3SW1BMGtwRDxCJHBUaz85dCE3Ynp4VzhvdXxQbk4lJihQKD54cjA6b1g8WypZQnNDVXB6MjdOSTRuW0FBKDMyM3FiZ3R2dnpASz5sbz5dfD9tMSNlck8rO3gwQ0FTWnhGWzJVUnBkRSloOj1zfUNyZCQiL1FiY1VoYzgwc3RdflJ8SzNkQU0mblI0aHFzPzNDL1Q8Ml57SWMx''@;'; put 'put ''Zj80RF1YYF5YfXFkRmF7Ok5YPntZZnVVMFMwWWB5PE81Zm5yZz54RU4lbVFlbnBnPSFKSFk4XmZiXkdVdHwqI3U3W3VsYWhmKFpGYkZYail3WDFLdV94KmVtVFBTUlZtT2hyVDVWYjlmIk8iX056MyRCQFY9ekViRiEhKV9iQiZwZFZ0QngkSk9TSFNKXW9RSVU2e183cXJzIWVSRDhIQXU6SU1j''@;'; put 'put ''JlsxWE04ZCY7VzI1KjYzcyFXKENLZkBJdnxeYGtYVF10eWh0YmxHUEFVbUxfT3EjcFRpaWJGO3pVXyUjS0Z5TE8ldSNwVHcjIkRiPXRdbSQoclAsPCU0SzYzIi5wREMzImdJPzQkKX1wREVoY0Y/dmdKTWNrR1VYaVlrPkJfWHslZEw8dH0vLCgpaXVkQik6dCtKL0s7UCVmV0ssdEBlWllXTThX''@;'; put 'put ''MG5vO3JmKlFfSm9YVGkwaztoOlZnTUw2M3EkLH5BM0lUYnxabz5PeUBec2pReUoqR0pFOEpLLDZYWzZqOVFwPzxAOEYsaWR7WFt1M2h5Il4qS0JhNWJUT2Q7e2g6ej5wSEcjbEdZLF5WRnhSM2NwWSk1anxLJHFEWVVock97NztbcmU9KSo/ank7Z1VWMTs0aH1mND11Ln1mVF8rVldmZlQ/XnlA''@;'; put 'put ''TiV4VTpXKT8yNTB9R05aPSh2R3FdPHRWRXlFOnpAJDRZbzxXUVJ6eVFBfnN7bXJzNWBaJWRdM0NgN1Jtfnt5VT09Vk5FMWxpSU5SWiJMJl0uNGoudkhCJUsrQltHSzl4TnlCLiwrRlBwPzE8QkAyXV5VaGQhbGxAQ3l+akVHJGg0X1dlbi43YGZlLHRkVEU+dF4hdT1BTkFwUm4sXypoOkIkSlRT''@;'; put 'put ''XzsjSlRDX3U+SzxmYmB9NHYpcjJ2Yj12MmlJYVViMyhCcyU4Qz1dTzMyb2hfUikqb3w+Si4hWyR4Vy9PN2dESkQ1bV90SEIkR2M2YmN4MDAka1JFP0tlW15Ib2xLT1NQfCFCISRfdT1AI1VtMyRRU3wkU3UvXSV5W0p7b1teNkFgXWI/cjx9e0BvQDEyW34mYCNnV0xoQTVUbXJ3WTNiZTxVeG1r''@;'; put 'put ''ZkAkRjFGOz17Tml7QylSWygjI2I5ezowLl8oazt0QHF5amdzWFN8Sz5nOHw6XVJyYVYieU9GbDltUmZscyJTcyRYe3IvfFUzZnhySi5XTXFOTWc8fnJ9KD0zRFVPSkF9dSQvdDxpRFtna0ZAZk0pSzw5NiFGOzBRQlAvb11yW3Fmc0RMXilEM2hxVC9pSzN4U29xNTBfPCxoLkt1cW9Ea3ldWXMi''@;'; put 'put ''I0tSNXFHcV4zKm8iWFM0bjB6YEhuKEU5OENHVkBbMWRpcHUye14pVW90a3hFSU1MMlpDJkVaKzU9SH0pfEhMYSVdXn17Z35OYWxSKjhkaS8pSjVYYUpLKD1la1A7WXZPRlVsaUN8bWVpLyluVVEsdi9AVyJyUF8oI0tWeXFVKXRZbWlPMmIqNSFSOks9aCRLPDBgaUJqTj8jM0toTG4pRlFwcyhd''@;'; put 'put ''MHlmQnd7JnIzNkNdSnkuczBWT3MjM3B6Qy55alglVXssMCk3Mkx1Q2NFSHQlblVFRUV7Q0tqPS5xMFQ0fkNLMWFhXlEvXVtJMytTQ1ZYMDx6bGY0Mjs4dGRgKyp+Pm1yMTI0fTFdLlVVej8sMmI3SnxVXUA1QjUjfT9rQEJ3KkcqenFOLlIvISt6cjZzTmBhPzFxPjY3XnkyfG06OzZVMVhvXS9x''@;'; put 'put ''ZiElY2l6U2IyZDdJI25mRnFbK0IhcCZmJT5nblFFRzwiVk9qODh9MWxfbD9SMEk/fXJPaHV2ZzwoOS5wLFE5OHtacXdDLCk0cVBbUC9jaGBqTzhUL3xvR2hLUjUjNERIOW5XcD0odnF8P1JOUzEwb3JZNVBvPCJrbWFJIntLaHthOitMa05gISUuOz59NlVmMk5icHVGUjtvc2d3K2JrflRHUz1M''@;'; put 'put ''TDhtUnAsfHA5bzNpUiFYYGQheklhRVd2NSlhaWxKb2lhYD9tPzBObX5RVnxLS3R2VisoWDMpX199U2FFQ1Rfbm56byxjaWttO0dJcU1DWndGL1htNSt1WjdGKEd5aix0b1YsaTZFdF90U1BrTlBOJHxefT8mb3VbL3wpbWAqYS9idmdTPUxlcF58WV4scWJpME5+Tm1Mc2cmKmBgT1t4QmZ+ZD1P''@;'; put 'put ''IWBdenlRYjoyc1U9MkEvZTFGNTxqbmEjZ1ZedjA2W0o8PExUTSNRQ3cweDozMCphcX48K1VbTTtEU29FS01Pd3haKTcwNklhVSZubHA9d2pXdj96OFdLKVZlQkpvPUYoM2hzNUFHLmxBSEQ4QkhEWmFXK0VNNn5Ob10vIUoiP0NjbishfHhKW2orZ21HPWlrb10vWmZMfXk5W1g9VjwhTihLIipy''@;'; put 'put ''QWQ+dy9LfCMvOyleKDF5XSRSdHJbcWM2RE9SQ1JaYldKejkucF5naG1WWVEzQk8oKU9IJSY5Z2hvSX5BMnNqdE9+d0BJYSYqaHcjQ3VWNCs3ezdLW1Y/cnplS243VX4mSyY8e0E+LFpyYCIvODVvTmRpb3VKaEhtVSEvdnxANGx2fVh1LG1ER1huUyRWX31HLyspLnxTQi5vPE15dVtAcCIoRGVe''@;'; put 'put ''JXxaeC5Ffi87YWhJPCpefHJsQyYqdVo3Wy8hRnk1XTApLGA8ej13WnAlP01AZzkwYihHcXtGeV92X3NXc0FnNUVwZXZtRigwbVBeKVpva0JVIkowbl16L3tOWldHLHtPWzpFSXF2bFZ8N3p8fCVdI1ZtTFBtVT0wbTg9cz4wbXM9MG1beHpuLDBLPSRPT2Y+eklbM19hcD1adk9NOzRdb281LFgx''@;'; put 'put ''PUNtLGE/SztuaEhqeng0ZnNRZzlmQTw5SztTKCZvNDQ5JH5TJWgxUXxvXnw0QyN2cCIlLCZac2pueSkwLH1wXj8id04/IjltXUNbXWw2IW8qN24+Z1B5RiZeTmlTc3ZsSyJEX1A5R31HcyxON1VKWlplfX1SOEZ7eEFLMnY4cjE3VV44M0AueGVzIXxVdDtFZCsoZUdeYjh4ezk7WnB0ISF1Mk9e''@;'; put 'put ''a2I4XmcsXnYqdklsJjp9TSl2bzd3V34wNUlGUmd2TVJeKC5Nd2pySF57V2RHYUliRH5fPSM/Pjl3WnB8dDZNXzxCJTg5KzhNK0spL35sckhnLHdCbj5JTGBEZ1A5a2VfL3g6I3M4elc0ej5Cfi99b3A9KGp0V1gic1ZaPXtiPFoxMl9XM305Tz5VTmwwZH4pM2xzNnNsWl5FU2VhIzJealo8OVdW''@;'; put 'put ''flYxKjh3bXpmJjI8WzxTOzgjUkppRkFeZD5BPEdMNkZNPUFoJCEqdjtAXilxYFM7SXpja2M7fUZsRWAxKEMhR1tbYXRGTHcrOFNUUyU9fk4kZywxKTF7bXkzVk1nVCZrbVRqTSVVOj5WZStkekxfe307KyU8cXI/YWMpIyE1NXxge1grQnt9dnNtNldkX3R5OSVrUjFKUGNpXyhDIzFkaT9CW1Vk''@;'; put 'put ''Mn1RMSt8M0UwWDhnfV4qT2FHXix3LDkuendGMmRqRlJGbVJBd2V9TkZ0b3g0YSg/K01jMWBfRCNbbSExXW9VeENea0lGeXwqR0tIOD1vTjU8QkxiQWVvdSQuNmoyMUFtc3BHc31HRlNhZUJ0PHIxb14qW3R+XylpRUI1Ij07N0BmV1s3MCk2V3B+L0M4Z0hyZTwjRWszdGQjOSkuRXhFazxbUzkv''@;'; put 'put ''U25ecGd9e0t6XnVLYDZiRWtWM1NKSWY1ISxyb2R4cFAke0pmZnxqUnt8Z0NJW1s9dzJwbW00LywrJVZvSzxTMSU5RD18dDBbYV13LjQ5YS9IOE89fCRNezp4TGx8b0BhZkIrVnM5ZktYbkRaZGs3YT4uPj9pfHc4JD9xcUpAZCZ3T080UyFKXWA0dmc/JCx3cH1ARCFCU3prRnc4e0w2Kj5hajw3''@;'; put 'put ''XWM6aipSN21be2F0alFuZD9XVUxuT3tGLHtvSzRxfncoVG5hSUtjRlA1cVk+L292SEc0YFo2dmB9fjVwKS89bD5oeDx3LnNmXzBoTzs5O3EyOUMuXUdRPDFFN1d+P3oiJkZAb3xBckwwSFsjVF0zS2VOUmNXcEZZTjQkVWg/a0BOfSwvcUE9dGpfM0tlTDM7PzFiRlAwLnMxQWpMRlgvNTZAZiRw''@;'; put 'put ''L3skS01JLDJIM3FqMStGUnkxMGpJblM8MCNqSz5ATn4kSSNAdl40OyRfeGo/P0pKUkV8fTczOEBTIVAwX30yUjV9fVRiW08pOzoiM3Y8ImtVa0V4azEwLGlDOjMpd0RMdTxXYkFTWGd0QGVQOFdMMnVnOzBQMWhZTGVfTWUmNG1aPGlmXX1ZO1VUZXFlM0ZsQ2teRX0lWGA+KHxyPnwlU3socEs5''@;'; put 'put ''eGA0WGclKXhSRDArLnQzR3F8cnZWOzlYKFZgQUVleXplTFViekdGVDQjLGNwZTNiXndIbl13PVdxNG1TVUhWO10mPU1LYG0qU0MjKUxCLyw4blBRbXFbbDQ5ckZsV2xfeERyLGBIKmA7QiRZV14odHg9KUJQPGxUcE9sTCFYdDpzbDh+ZWJpY2kkQnFgcXBAVEQzYD5GIW1yOFtNWEMsbFVadWlH''@;'; put 'put ''L0tPWCZDN114cmt1Im9ZKihWcFFLTDJ+TjR+QEk3c09UUWU4T2xsUVRja2xMITBsSDhtZn5pN3xEL0dZXn4qcTtgcjg1dERXXnlJL1gwWmhLLyV2W3F4P3JRUX5DMUo0QVVZVVR1JHxJMzo9czhuODpveWp5SC5zaTMlayExQjwmLDovYyxsMWVQVj1XZUlQfSw5cylgMjAiQCw4UkQqREdQI2Ay''@;'; put 'put ''XS5gLlcxdXRRb1I/bHVqPXMsSy9aQUYxTzo2O3NtJGxVez5pKEsrPzhddzJ7NmxZVmtHMDJsdjxBcCpwKlBucykpUH11L1FkOTUkWXAhbyRvT31IZWRrUm97SU1bISVUUmNwcG11K3F5PGdqVysobHJrb0p8Z3d4cDVVMFViaDQvSmlocWFwWFo5ZXlsXltPQH4vR3JHYys3KCpNJV9GUT5ibCpm''@;'; put 'put ''V1hBN01zL3xaNVlHXjY1Szs9N2hyWih+YntTXiNBZnxMJVdaT2JoeHY8ejA9QFReYVVecUMuL1M1PipWZ2F3bVlmNi4ib30mYjZ1VE1bS080SyJLfSZhSlNVWFFVMWdHb3M/ZTpdI1Uqc1h5Y31xfiFPeSo0e08zJkJeT1dqbi4vcSw5PXReUT9AIyFfeGJzcEJRKEVGcW42OHBEPjA9bExaVHVT''@;'; put 'put ''KzAlfUVPPDJIaTI5MjtoeWxuWmNVXTgmejhRPjklR2FXK1Z2N1c7fGFJXURRbEtpM3x3b2BYLCx+alpaJlgjIV0ySC9SNVAzeipMIV1KIjJSXTFKL3E1Rjd9ZXYreWs6MlklJFp2NkArOTsoeCYxYz9EdHZkQGVbfVNweTJ3JVUucTgsZjtFZn5xSC9GXXFBWFE4VFh2az16QlBwdTFUYjZxRVh8''@;'; put 'put ''LDZ5fmlheG8rX158Pj18L0Y6K3Nkalh8VlduWzxTZC5vKDZ0eFgxWyklSmloT3xqX1RwYEJlNGEjK08xc21PRWkvOSomPmsqZWFgcmwhQ3Y2b1FQQS8mMnZwNSV8V1NsIyxrdmA2cl0sUmZKRVs4fDI2fUMoaC9QfTMiJElFeEl8RkUrR2FZVSxOMSxzM3gobDorcnUmJSNpZl9Eb2d2ZDNDJXwm''@;'; put 'put ''ITw9Qy9sZnxMVDRLMlF5dEl+YDpXRC8kZXtQX3xgJkl7WkhpfDl0Wik0e3xMQit6RlFeM29kbTRfS1V4T3VjZTg8Qy9zVSNacFN+MUM2ISNvPkA5N0hVbldzc316TDhSLnUhUWVCe3NbQmo8bXxhV2c8dnR8eW5ibnx2R3lSe3YhQFtwQiImIVJVLzU2X0ZbfU5FPkZWUVcsZDxdfFojPy5DYiIz''@;'; put 'put ''SUgkNjVDUH5KVCFeO05LUF4uY1s+bDwhXUt1SHB6fDtbKmVkdkBwPTQkUHV1eT1Ffm4oJmdUVCEkb2MsNn1QVUJaJms4Z0BdKyV2UUVDO2g9LiF+NWooXzI/ajg1ZVphYyhUfT49W3B7cXxrJThIP1dgaXAxLkk9TyZ0MCV9VzM9T3EjRiNHXnVZUS9ucUQ3bll4Ok5XLEskLk81Jn1yeFE/KHdq''@;'; put 'put ''V0c6VShOZFJjUC4sWWxSfiF4ck5uLFEpVVFpZCM9aSpLPDZTMT44cT8/b3s1d1E3NHN4dV9UVDpwUjluKWMyKFIwPz1VaV8iXVZsZnRVMjxYLEN0Uy8sPWIkSSE9SnZKRklkO3V4LzddPD1XUldtQSovWGtbXm04RDgzcEtTNHMqSmY7OF58JGUxNG59NENYRkteRyhBYFVqdjRsJVgha1Ymb3E4''@;'; put 'put ''Qk9gOjQyRUk5SEApblQ+TTt5RDx9R3R+cU5eOGlBPXlNOVFLXzo6dFY7SGF3YXl1V2YlP1ZsM094dSU0aUZvcXZmQz1HTm06fVFzTXhIfiVFb3hwPShyOihEazwpPypld0QuRVZjLFJ9ZGtVKUJiR2sxOls1VlY9P2NoOWV1fnFTUDtSfEAiNDxndk4hZTZnfnE9JTheVmh5b11eSTtRcjx4O1ds''@;'; put 'put ''NHQ9dmkzcDk8aVV9WEBCcjQjN1dKZzgzL1szTntrOn59WXh7SmBbUW51ez5vQjBSPmY5OEhXaXdIPFZ9XkEhfUdmdWxzaXVYWndGWDR9Tnp+T3shV2hpOENTRFlWKG4wNS48VCwpNEZ0JGtae2RoJGtRTHRObSVOZnMmQHJiNmMlSCV8cEpASWo2SF4uVTNyMTx0Z1ZFV0VgZ3M9KEN6Qk1NPWR1''@;'; put 'put ''aFB5NjpVWCF2Tn1WUWNgZWtCYkxWUiF2XzJgMHo2Jls9RnE0YFspeSpCO2EuSTlLfiJkUHhpZytlRzVCUE9gY3QjJlphbzhyVC9oYEFJU3RGOy4hRmckTUZnciNRL298azQ9TT9XTUhqWHNJRGEydVhkKkFxQCZ2a0NyeSxYR1g3aSw0Zmt4XlkzOEJucDReMjRaPTRlTEBUaXkkc0BJczhFYj95''@;'; put 'put ''NDZ4JjRdWEFKWzQ0emNPJlo2ZEFJTjxyJVA6RTZPaWk3RHBhMSlMMU9DeE16Rk5dbHEleDhKeF5Nfnd4ekV7TEFhX35qNWF6IyldYi5BNUt5cGVBcis6O0IjWyxQT0hfTy9mXUplM2REPDFQYys9LzlgdVMoJHpnZkRwd0peRDh9Q29UI2ldLm9iZSJJK2Z7JSwsSnJtXkNPbk47QDhgMU5TLzlv''@;'; put 'put ''eldBaClbSEV3amszIWpzYjlIekYyWzs9VShae01GWStnSyo5ZF8haEdGel4oTzU5d0whW0hGPWxidntGKWlVVzNPZUNzLyFKZipjfTgxKkgySm9RJER0VkhPMzd+MXoxejFsIzM3UWcoTER4P3V0WSp5KEIoKHYpTVFNUU1RTVEuTWNHYkVUd1o2UyNlTXR3eHxzO1ZNWHgoPzZOZHc7cUtMOUg9''@;'; put 'put ''bnZdW1d1WCRnUHtzIzspc1hmPDdhdmo+RHtOeEQ2Wz94TjVmMXpWTUNkaXl1X18+KSZXVkRmYGcpYWYlaTdxQyVoZ21OOFtkTzsocHRiOTVgKT5uVFh4WTU5Om9ObmkiRERtNiVCeCpHJSw5SDosY3BudixGK0Q/VzNxJk1tb3loNFF8d2lmRjt4c3AlVkZaTV5lL2FhcCJbWD5bIUFmQn5tTjpq''@;'; put 'put ''Ujx8W2VlPileQDl9I3g2PkVGT3lOOjJmVXpDKTQvcWBQX2ZEVVMmekVKXkM4YVdOeXdfIyw0P3JgZzs5OiNgaUpEMmx1c19eaDlMWEhJPGxdaiw4aVJvamJtW1dnYGEsXlloOSlpfV0kIms/UCYyXTVrfkU2UUc5VW9eb3RZYkY3dCNoLzlLQDYzOVc3IyZlTy8jMSsuNlE1OXpER0IocVI/NV0u''@;'; put 'put ''RHMvIUp6eC5vLzQoMzA1dHNqeyQ/czRLRnZ1fXFuOWN6a0IyOFNnPl1dTEZ4RntdfWtUTXFYIlN3RnV1YywrdjxDNUM7VHZbNHdzfn5gbF9YdSQxa3x0IVdieDlCPlA1WWdZbU9qSElHKUEpd1psM1dDTiYxQ2lMJltGNllqTD9DRmd6NDpsfF8+cmBTdVBHW3VFJHU/QCxnMHQ2LitPZlp9THhk''@;'; put 'put ''I1dFRCl3LDdnNHhgd1BHR29ZSXcjbWRKOHchbnRrK3szMUAzS0w8Ly9PTm1LNXgqYkk4djFrVjhaNWJHOChdX2k0NDpiWy42WVd7PFAlWj1hVUhyb2dOSWlbZGIyMVNQb2ViWURZMkhiQGheI1VdXyM/bmV2aTRneE1BVXxXVlV2Z0xmYztqKkw5NiV4NzZVJTwsWD9vc2dnVURLdiolPFpVSTBp''@;'; put 'put ''eHgxO119KWZuMmcxbkksfllFUUkybSM9XXgqSS9RWmZeIjcjZFJMbnFQKzBjOyNSVjcoSDlHd2JFfDdXbnZLfmRbNkUldmMkdldINF93Qi8uQFtrcVdJYHUvIzUpQ3NHOUY7bnRbPXEsPEkjQzs3Sz9gRi4kQ31sQkkkJE9vIi9kXWR2S2hublBMZXZHdSxBKSwwN2QzTDQ1PkVJT09DWEAqbCZw''@;'; put 'put ''IUt7V0p5T2MrKUtXWVdKcDE5SSR7dFluSF5lZldbSHJBSEVuMz1wNFI7fEBwVCVmIUd8ZWIqN25QZlplblYhMnBiamslRzw4cWU7RlglPURHUFBuQiYqUX5EWStWd2w3NlVIO2FkW2R1SFBVMEpeRCVlMj5AYTFXM0NRfjU9eXd2Y0RlRUBNJHU0fiY7cXJVXzpxMmJ9QWJzYmQ0OzRwKVdTS2U/''@;'; put 'put ''LD1HV0I8OmJbdGRQOzU0O3BBJDc/PDo9Ylo4YykqSDJzUVR2aiE7QWo6byouVUQ0bXZTNjRFXVZ5KkZ2bGg4NzJqdyhDUWFFa0kzZlFHemAmMlBUXlJ5byR1JFVtcW9UJVVSVjlvY19FI1sqWEhPYEddOlpPdFhqYTgkZVFlLFNEODY4cDJzRlgkZ1B7aFshfkQ8c3J2RCFULlBaZHk+dHs8bnQu''@;'; put 'put ''PkY0aHEiOH1uTGFXIUROP3d2XXFJMG1bLnVKI106Zm0mNGR8cEhAdWZ9JVtxL2VyZ3FiRCxfJjtYQl5sQHZoKDlCPnJzIzBCPFBmNFc/VTQyckVXXlp3RHQsKSR4UXB+fnFQSWZjVVNPZlMocVJCKCVfKkR2bG0lNn1VOyMmS2RzWVZ1O0RUbV5Vb0ticmhvUHJpTiM9NFdtaH5VI1hMWmg5L2Q5''@;'; put 'put ''XjEwR0hve11ieiNxKj5aQTVZN1ooQldefDBGMDB3K1FxR1BhOFZqRzQxM2RyUU9bYX59bmVfOzd1ZVI0fShvak4qfnlUQGkuJnhYJX1bTEFwMz9ffE0rZVN1PnZOfnQ8RT97b0RfWz8iXktuPGg0ZHtNX3MsQnAmRVF2d3kxUlgjLCVVTyRoZywxWWNxcTxUZyRpb0lkSENLO0w8X0RPOHVvVn5J''@;'; put 'put ''S0xXZU08bVh9M0dCZlJVRTZ5OmJyJm5WZlA7P3tVRFYka09EPz9TRiRoX3t0PD9eSE4mYSFYZjdTQypkJFl2KDFBVDJaRkVneE5ldSU1UXBhby9qWEw7TiMiL2x9QVYlNzxBcmZ6ckY7IVpQVH1VNmQ3RzxedXdoJFpsWkRDN0JFR3M0SUZWIkt4IUdVYWhQVj1qYyYpR10kbiFJYyNmNU9bfGNo''@;'; put 'put ''OUE0XzomdSEidFpgLzhVUUZRT0FSR0c+PGQpW15PczkiPiFlOSt1fEJHSFFVdFgqYysjd0hBRG8rKk1JVSVsVHYpTWFlKTpBcl1MeUpjfSIraF9lKH4zOCVOfSZ8PkRySF1wL19VMjtYckg6eE8/fCF0ZWx1VUNKJl54OyFLQCE/aXRVQzJyYWZ4XT1zK0l9NUokR3ErQStgS2klLF58UlJ6JkQk''@;'; put 'put ''UlElSEhYIXU/ZVtCPUBgbWpnalczanxyblBUUCtgPm5tXyI5MjxKdlt8Z3VpQyR6JSx1TUlRdzNnbi56dDciR3xiKUVqTj1+ci47VnNfKFdyWXF9I21EaltFO2EhT0ZSaUMxczYsJHc6QEwrXiVXdjg6dTlCe2JCTW5YUXxXR05ZRTZVd2hPSmxJfkh3RC93eW56OUZERixvNCFwckRzJCJRIzRQ''@;'; put 'put ''PGJmfldyUW1Lei89dHxBeypQL28sb1VPJlllS2UhcTdbJjBtV3FgUDF0NEVJUHclOjAmYVpjIzpCQkM8byFHN0I2SVI5QV5jTjdEIVQzZHQqcTErdkM3OVc1alg4O2Q2cW9zUksmNVRuRmJuY1d9JGtfVGU0P1MwKGIiTXw1MUkvWEczcF1DeFFNRUEvcnV7SStMRGFET2ArKy9ANjMxKmtTNXxN''@;'; put 'put ''WEspRnhaPlsidERYTl9hV0trd3wrZlJzQTJub2JJKEZgKy5vOEZQUGFwPWouSCJZSWpyPy5RPixhMCZCdio7SDA6SE83W3puZ1dbfGtndWA/KihgKTs3ZUxlLk1GbEVQKVNxSHcraG5sJUVbNTRucXpyZHEpOGxZamt3RkVONyp8NS9uZ1VZe3tvWXViOFRsMTRgaHkrdnR3SFosTVZ6UiR+fVMk''@;'; put 'put ''KmQpTDlweDclY3lJKjZRY1FtVkpYdnxTMF8hN0NfKHYkeEx4RC5FRFZgVnxSdltSL34mdCgiPi4lX35FfEo0TiEyJms0Xk0pTy85dCF4MX1sLCt5YSVHem9RNzl+WXhqZn1zIihaaTA1KmgvRDtCL2VlJjFCdl9kUWl5VCYieyl1XUV0PjBweGE7amo4Rn4weWwyZ0xVRW07JUIwQCklOWgxcTM/''@;'; put 'put ''KFUhaDwxV19xPFhvcGlYX2dzc3QkPj1XJn4lNzJ9V3woT2xrWyhVI3NwRVIuUV5oTHt7O1p9c3oiSE1xR158JkdeSDFLcVtdJFZ0cGJjJWhtXntUM0hxJW5gbF0rW0I+Kn16Ql5MaHNKdT9GYUFXTVlqeChTRElHNk8zWCosQTQjMm5xLG4rOEBXPF5EWjVJekR9OEooU0JLdX5dVn40K3ZIeztI''@;'; put 'put ''e25Nd1YiezFMP2pIP1pqPXNDX1hDdUQ2SGU5X1FfYD9nLn01dn1UYEtwfDBMIlVOQD52c1g/Xj05YCxBNEwyNlluKXVuS29QRHpmPWM8P0dnR1M4fWRdYXxMX11QMCF9eHZAdzFfanxPMi85fk8pMj4oX1F1T14oVj1dX0h3aXArNFQmUGVDTG9AM1creVUkOkMxMltYKnNwdygpeGY/cHwjLlV4''@;'; put 'put ''NSFUI2RzJDJ4fWhweztzcnxefncrYlJkJHJsRiouazR5OV5WQF1OV0g/LiV2cUxHJn5uUDUjWC8wOVgmZU1hMGtfXj0/RTAhN0FSWCtoeGRNfF1dJUFQRC5JeGpKRlFfYlBwR0dvKSpTN2hIeDRPdmhpeHBMQjxUIW15S0w8MmYqWTlyXXgrUm42dTwyLEM+UixBPD1AOX5zS1AoVClaalFBUnEx''@;'; put 'put ''S0wzc34+WWJbai54RzMuST1BW3pDeztdKil4TSQ4cFU3Mi9QUVAyfn1qJURVT2Z3VkFbL0t4RlZFflEmS00ka35bWmBGMHNRRj92MjM+Wz1JbXhDUXB7RWksaDJOYDFhcGxvWFAkYVc/RGZ4ZXohNnM6W2doTzRoOFsyVF1acW4ueH50Z2AqPnZ3cGBWY2UkL2tscmUoeGVGNlN1VD4+ZU1tdW4i''@;'; put 'put ''Uk5NbUk3LnQ+NVI6VnhBc0FwYG8yW1A0QFZMNiNCZyZjfH5HQCVucS8pakx4eF5FdyNreS5tY3VIZEdaYE1sLDtgTSh7dTRyTiMoa3IveWAuUkNNeDB7IVk/JXFmaHEjKGpsVG9ROXJtQzJeQXFbIT9ha1lrJnF1QkhFWXdHYStjbSNPV2dAI1V3TVNCXjFZKXZuaT4hJnYxKWs+YTtwcHhMNyYm''@;'; put 'put ''T0VERjE5OyN5ZDZmU2QremFxR2RMK29yS1V2e2FhZERJNkovS3sxMD8wbUEldT0xXiwmMl5CQEFvcDJgbU5QTFsqVSxgay5VdEhqVHJHQ3pSJlpYMXhoY0BLPTZnb3tCXXVJak0oPmUkMW0+My9gd2s7cHVyLz4wcnVALzVTM1tRIURtfSQyZkA0N01fdX1rUnxja1Vzb0E/fihEMjxTJi9yKjw6''@;'; put 'put ''JFk3UlN6dEUxKjM2JFM4NzlFQSx3ODZFcDF4bHttN1J3KUNHY2BtVC55KmNtcy5qNXgxKWsmRXhrci50dkBScF0/PkBXbGcwZS5lZDRdb31faXd8Ml4vXW4mcGY6MDd6cDUrKHM7XiFiLkI8Q2djRWtOQ1hkeHF6JmhSISZwSSwhKl8hbzxpSmY8KVppJHQkald4UjRNLHImJXdtVTt6UUUzWGhu''@;'; put 'put ''UTtRYlFBMVQkRz1rfTZnJUdLekhVKk1MNik7Mmd6KWtyZCROfSJCc05INkEwbSFYTj0kVFI9JDw6bmpqZz8kQFk1Ynh4WG5DPmV1Im5pVD89PXhBJSFKO0ZvQ0FOO3FXeEt2ISVhaUF5dlUiOTUmaCFSV19EfmpBU2x3P2ttey8qZmxfKzc9KUUxSmdpNFJWWHV8cWRTK11fIj1JOH55QHBoMFgw''@;'; put 'put ''aUY/NUBtS1NVcVJFeG4sdH1EXU1eVCUrLmk+SX1SRHlxekQrTiw9MVQkQSV9a3MiLyt0dVguZEsiTktoZVh2d2x5SzN1U0dKITVUcjpAKE9qTXZnNClCQGNAQ1tCa0FTU3pebkFTfU1yeFpXZjdSVWBiPFdxfGZTI0c2JCw6eHhjc15dYGNoeCNRdGJqeC92UmFOflAoVFhUdjUmX2k3el9JdnBN''@;'; put 'put ''NSosTltUSTxBX19VWDtaSUtrYCQsSm15KTdRYGo5TCRqb2FeXW54cHFbZ15lJUdJfiosIVswLF1XYDZ9WUVuckZJYWpobDNeRDo1PUVZfHBOPiwuISNSVHlEVGFzKCwhPXFkT0xrfGdsRzRhe3phfjs8eXBHQ3lYMFM9V1hzdTR+MGE7LFFOTCZ3WVkqeyFPOzU+e3FaQnFbOjI3b20uQGwyLjBv''@;'; put 'put ''K1lzRUNUbCZFZDdANXF0TWI3aF0uVyFTNis9PCZgXUBsVzRLflMvcU5LOjBjZiNCYik4aThDQU9uOUs6aVA/VV9DPmRsVDEsZD5GPlFmQigmYi4yL0FfW14pal1CXUBOfnM2YXplc1osdH1gMn02OFNyWmdaUUVwcSxePD1IKSteaktqVDFlKEpZZjlWWj5yOGtXO2FSbSVsYGFYNWY7R28oUkB2''@;'; put 'put ''QjVmZTg2LFRZSFZkUHkkRTsxSW4xY1pOaGRuZHpOMGwlbCp1L35tal48Iz4qIShPTmslPXJeQG9saE5WYDJ8V2BvQFImWG5WfE9uRDlVO3ZHa0FrLCpxTXN3QUB1Y3gjfjFLI01VKXBifC89JmJCM0MzUGc5M1BwU1RSUiZvdHFPKF9zcVFTZlZmd1h9dlslWTFaQF9PcVsuPUA2Kj5zQl8pYyMq''@;'; put 'put ''dU9GNlkwKiFKK20rLDA5YygqJnJNLH49KitTZlNvISElaXtdd0kwRkh0YmM1UmRlRSs4YlpCSGF2T25NJCpkIShJKFUydyNMfXB1UmwsNUUkcGcsQGddZjFDYCFAcGNwRzJtNnppUCFYUFdmJVBpO3pPRUo9aU9SZEUvR2A1WHZvLHhmVW1IMnl7dl5Qaz5SIj1uYUY8YmN6YHBHZSlWJEAwcUA+''@;'; put 'put ''bDslbz5LNFUwVEd4RHJHMTZvZjs5bWZaLDVwWndPaF5NeThYOUpmUztCaXBwJiU1LG85VEloeGNoNGwoPX5ieyNgJit1bWAjKSsrTzlncXJFPD8xdjYsQD0uMHNKNmtsLFI+VSg0WHJ8NT11OWgiZj5TaEx7YkJNcWMxIiwve0QrYUlMXjVxNiplZ2J4OSQ8QH1dSl9aV18hJDhHfCxIUDE8e1lE''@;'; put 'put ''Tkd2bUwuMy5oRTFtcm1hO1F2V158dF4sUz5aPUlaKTEudyxJeWBZPmp4Q3pdRmRFKUtIdVddWXxGWyl8T0N2MldSTUU/MG8sXlJedjEpQVFjT0h1NEU6Mz1XOzZUU09MPT1vc09vNUE6UCtfaz80ZmBuaElHLC5TKk9CJkFoLG0sKFluUm1dQ3hRUDE4fURQJjszMCpWZ3k1MWFYUUNkMSpFUD1y''@;'; put 'put ''RDc+WXlORis+R0tMfHl9K0lvTjwhRW02SkYvMm4hNiEke3pqbnh4ZH50VG1ZcCglOFlDLGB5Mis+el5NN102PkR0cjlzfV1zISQzQmpuYEs5dXNyfXNQcTFRJXUzJChAYERaMFE1NVUlJm5VMF5IczR8ckxZRit+XmIlMiFYfUk3TktlLypLYHpVYyh5Qi84djw7RDJRZXJ9cjosTlR+fnhadyZU''@;'; put 'put ''KGpMU0xYUUo8Onk2cV9BKz9FcD9wViN1fllEQU9mWjxDWy9JLiZKcTxMcHMoLDZ8KXxUY3heW2s6eXl6XSlVIXFod3xyezw2IVZYMSYzVFt9cHNyaC5GbU16eXpGbVNeXWJMJDNdOGk4fkJPQj1APzo8JVZpLjs7Pk44OyUrdjxCLkFrdlZOeUIydEVFMkIuQWs4ZSIyNHIiVkUjYSVPO3x7TWEo''@;'; put 'put ''Q24kZCQsXU89MG1yb08jekAwbWNqMltMPUh+UGskJmE4XnMzU3tyZD8wcmBJMyt+UnRVelU4YFc2SnEmYENzQitoWnw/aD5AZnMjV3BxL00lRCtBVV4lRGI3ajcmSTJWLih6cjYmOz5sN1V6O3tSdkBBczEjfT81Qn1TPHAuc053RWNiSmJVLk5PVFYrQkBpLlhpMkJ0YVRhW0A5MDwwKk5jSCpZ''@;'; put 'put ''ZFpDInYoYE5DIndEZUx2WmkhbDU6Kl5EQis8QmVHPndyTmxEfkElYzUxM1IlKltGQ0FBQUFBOkNQajJBQUEuMyVsY3s8NiEhM1QmQTJod0B+bVE/QkM6RmxiPUg8OmEhMnl8aTNPfjU/ZDAyP0p9e1d7PlV2ajdqZENfPXwvfmAzP0B5dWlZfGczR3FUTVp3ZWpQVEhTJWgyMVUkP1N0JkByPVVm''@;'; put 'put ''YTh7UyIjSzMwcmRKa2RMQkRmeGFKLkRHTzpJbGh7Umk1WCh3RXIsVDxYIXclUVFoM0tqcGh3KClPJXIyMWJFb3tVSD5CbDZAQ15AfEBHaEVeNH59Z3NucGNyYjIlJX5AVDoldTNtc280XVRTeCpXTnY0UlVpMmdQWX1ncSkqblckTm9QaTtpUk84V0skUXk5SXlmLztoUTgsXkVOPjhfRlJHPT9r''@;'; put 'put ''InE9XTBQJGJQITdWSCN1UltlfDd1NjxmTls3ZVl2b3ZBSl48cGZZVGJvRU95fTM3bFYzK0IuPik9OWNWYGBxSF1eNDo9R3J2LzovPCZQLDR1PEY6ImE5cjB2RE1CNyg9Yno5eERbeERufFE7PyN9dS9te1grSChrS2t2VEdaWU9LO0cpaWNLPmF4NCE5d29xfSUvRD8mZm9iZ2R8LjFnYilra2Nb''@;'; put 'put ''e2ZrQGpoJUdkJWJkWHs/c1BgLFg/fkohT1QlNW1EPSltLHdiVmBfLkB5MiNDeEM4WWhDNkN5KSpNazppMD1wcyZya112Z1VPNURmajhve0BjRkB6MVFmNmc0TWElMTReaTRVdVJ2dCptKltdcntnR0ZtISNBY31QY3ZHXm47JUBORyQ+PjVhW043S0dUNVFuXlA3PDQpUyQ/b209TnkzfVEvWG96''@;'; put 'put ''R0smSXFpK0QmU1tmW298RjpnYncjLF9DcXtucnAjfDguZ085NENIT15HZW97aj0hendXNktheFZvcSpmelgvKU4mPjJYYVFMX298al5Aa1l7ayYyaHBPKV1fTSlhSmhtVkYwZWU1X3xpZEtOR05pKChUSWBXY1JNLywkIz15UygxZE4uXSNkYGcla0hGUnV9SFF3fFNJcHRwIVMjQHgsSy4yO3db''@;'; put 'put ''PFtEMTpjKDBSJlBxInx0RUBsc31aQjB2XV49aj5oaVtmJUxlVEFFSF09fVprUXY+MGZKfHlIfCs/ekAxcGxpeHNydm05K1g1eG0+MVZ8aktRXSxLdHgvRyReMSs/R35aL0JVM0Fve2B3NWYjNmJOWGpEWVs8X05vTDxlUy92Pz4wO3g6NiZ8d3RrOS9URilHV2s6UzVWbnQ2XUZ4bmEiIWR9cERv''@;'; put 'put ''XXJoVEVWaGZPIz5eL2Z9MCFmKjFTYEw1IV07aG1CaX4iJS9mMzQhJUN2bkF1eGVzUzRNZTJhelI9Zm99Qy5pbWl7N1AxLn4mTkByeFt3PWQ0RDFFeFVPdV1xPD1ucEtadEokYVREU3g1KSNLPWc8eCFISn04dDNMXSolbW9dOHN6SmpTY0ZOLzhOP2F5YlpEUyRNXU97M2o3QksmMCx7TCJgVGJ5''@;'; put 'put ''WTNIYmNwUkJJYlhWNVk8b35GTmN8RiRgaDlnLmNeNmxNd1h6Z1lPYUJGYGZ2ZUltdWpWa1RSbF9qPTYjQEdJfkFReUZOWmcvPTZ7WEp8ZTE3WFAjcGNsK0A2NGhNaj1PTi5OdDAqdHQ0eXRMOiE5NiZZdG05aS9lXV85XVNXVls4IjpgcklPZSNaQnhza2F6W2Y1RUBgLzF7NzNue1hXI0JeSXNd''@;'; put 'put ''Pz9nei5dPkMrUWU1KTE7KmAucjozbzMlZnIiUWowbTlGSkRMcGQmTn5meDhmO0o3U1F2bkttenRTelRSbko2eDIwLGRRVG98JXB0UiVVaWxmUiF5PFhoZVBtUmNWNjlSLD9MZU8rK05baTlCWlppbVgmbSgiNDR9bEdZJnxGd2x3ZXZ0MEZoaHUxYUVUVnU+cDZGSXxJbDREQTo9YlksS1c4TWM/''@;'; put 'put ''ZjReMnRfX35dcnRqX1hHTSkyKGczels3Xjxub0xHW2JkXXUuKFZdZCVeMz9OOlNeQj9fKWsrWnRKKCN3OkxFT2VfZU5DUXl6VkVeJl5nM0ZaIzljeXdHVyt1V0x7JG1rSGJaVEMyI2lxYTtBNm86RkgxTDZVSyhEKStjK3AleWwjaXdWSEI+KF0pUm13ezZvSComISNpOT5xYyZaKnZHQHR9ejsr''@;'; put 'put ''aD43NyxdZSN2cWc1Vkc/OT9ebmZ8M28+I2ZKP08vRG4/YyEvJExxeHBWXmhpPzhGW18ody5lai81dyFwcG0qUCJtUVlDV2YkRDt2djtxa0RFMHtaYHMhdUcldzZaSEEwX25JZSFzKlI2cV92dkNhWG0xUlRXYEQ9eCl5TmFFJVd0V2pwKFZgalFOX1UkPU19a3xTRCskciMzL2k5fWxFbzIxWjZq''@;'; put 'put ''dkttOXt+d246cSUkOHklP1I4Vzlgel0+aG8wUGtxalZGKCJTNEskVEJhezVHYXx7KDg4RiRNV3ddJHEoWW1nKFNsaEt4N3UuSVhFR2tAeCg6aV5UbXFtRiN4MnwoUl10b3Z4OmVuYilsPUlIYm4wO0haP2VzbzEpVEpUTzVkOjQzYEd+M2U0bFlxb2NlInJ7WV15OCtVZXVFZ0ImKW41eGFRPE1n''@;'; put 'put ''JEtlXzNwfipiTmJ0WCZpdjhtbF47Rz1LVj40LzpgKn5qLDpDVDhYVVE4V019NkQ2R0BYOngsXjpxZyZbY1RJfjMrIj9nKT1GUTA6eXVnZjpPUGAuUUAre0VUeTAkUkROI3opInEvfjo4IzRySEBNfGovZEdobFhYaT91ZlVHZiFJZE9lWUEmRCNQIzgvaFArVHB4flpZSzwzdCs7bnwyRitjbzt+''@;'; put 'put ''LjExTX5abHcrRVFtNyJVJHM7YXtAb3tQOU5HRWtLTDF4MmpdUjdnY2BnKH46VipNTkVoIVpudzJpRS4oJixQJEFILGxGfmkydENVW00oOn1AXjRoeUVocDtkflpPezpuZjt6ZD9+Y3lQP1E2QTBNRTxXaE0sV0JteVd3OWQhey4mWXZzQjNLUT43RGtYRXoqM3lYVklOPGFiOnthOmtXLEt5JX1W''@;'; put 'put ''Pjl8dThFRnMxQzo8ZHdJNVBsfmdMeSZsQEYqZmJVOT1mS1VnbXJsbkQyUzhrMXRzVFJXc2E5M2l+Mk8lekFmWm1mUTU+JCwkMUNtL1twaEZibUd0NFgjKmcsL0JkJHNTSUJ6NSpXei9HYj1xIVRAM1BCUEphKkxVTV9gdlVzSU1ic01RcCI2RkVXQkU4VWcvKEpQRUR0czJNfDQ3WTJZYiNGMU9P''@;'; put 'put ''alc1ZXc3RXJVbyZdd1Qsd3BIbVolekMhSEc5bUIxJFVZL1dtZzhIWz5sVyZwQXF+SDV6cHowSnBPXituYmtuOmYvP0NXOEh8bmZxUjBbMzY4TkV7bSUiREFFTmRPWFV4WDRlQiZ1b2I3N1FqOkF2OU56YCFuYHJpdU1+fnREJUpNcVt4aTF4PT5vWXl0d2lmcCVwZUQ1RVBfJkBsOW5ib2YofDd3''@;'; put 'put ''bFtAUH1ZMEs+dFIibmRhc0JtXyo0VSgqZTJzTCRdejNJZmpvZmdtX0hmXlIxKGp5LmMlTGdzMT99WWdAYk1nbWAvTjlzd0huQSpiSENqanVCU0xZdDlBekhuS1B2fnxXM1VoWTtyWkw1WEYmK0Y2ZGI1RUUxKHJZZzR6XiY3XkR1S1ZAP1ZzOF9gaWszdSgkXlUsKTJNNUs1XWVsJGBKVzZAciV8''@;'; put 'put ''dnJIbnlKMUMhdEZPfk96LCMySXF0PC5qTEk7TXhFc2U0XmtzR2ErPWtVal5aWSREQFE2W0l9TXZvJkZmRyVKV1VlJSNJYyEvPjVGUHQ6UStaP1FQVis7VygvI1NBTTE3dTtxaWN7fnw/Nj9AXXE2Tm46Rn45YSNDQmx3Ky4rTXFLMl8rRz9nTHdsTT1CakUzKXlrNDJje19fSlVTVVlHc0VUSD5m''@;'; put 'put ''JUU1e18pJCpQPl9tWkZzPUJ3KW07JHYudzRtS2p8bGQlI1IkQ3QyLzd1Wmh5WEhNRCFYIndYLnJee29iKSthdH00ZXU2WFFvTHlVcD0pWDtOS0wreGdYSVVsYXgsZ05USiRwVi9RIitzaiNHQnU9UDldYVl6aWpbOnVzSTlEKlJIazI+fnQ4IU94RGVkdmk3eSZtWE9obS4uJG8hNUp3STNsMGVE''@;'; put 'put ''MnlNT3E3VjRgUkAsQEE4Y192MGF4PXYhL1h6M1BMPjVoImQydC5KPz9heEV9OFQwYzBuW09MWV55Vl1NZFddfEp1QkEubFt2MDgsUXxqel5ISEBYajMsViZ8cD48R3E/KClgLFsvdl9dZ3prL0NYdiIlT2laMDVfdjA1Zy9GdWQjLzV6e3t4NnxiZEgwWS9ZSSNQSj0+MEBYMVlqP1l4OnglJHhx''@;'; put 'put ''bTVkWDV7L3o7bV88bmpHfmFmSDF7eGgvcFcjT1ckVUdAfk10NUtLTXZbMUZyRHlfTHhbIytbdHthUV8jImB2YUZrJEMhRnhIN0BAeyolQkV7ZTpseGZKND5yaCZ1VUdvbzMyMWtoQjMyWkhiMjMrI1dXJVkzY2peOEExMmpnczgpYXF5dXZ8PyxiSEA+ZjlZQFJBWkZJZmxkRWJTcEZ3KWRbfGdr''@;'; put 'put ''MyNOUkUme0lXUX1gPT8wXilnQytJcG1uMVNPXnZAPGRtKyZeSD9Cc2ZXJX1NLCFWUyZVWy99WWx5VCI/el5WXTZvNy5vdFBoQlg/enBkNigvVntDWHEqLHw2XkhCOU93MGk5JWM6SDlpaDZIWHEoI15sWGVvYVBWY2x6WGZKfD50NlBgInNmKEtIaGl3YDxpZUVARmlOLEEuaFZRUl9KbDd8NXRR''@;'; put 'put ''WjBwQnszfm16WyZXfHYoKi9oMyxLVFtMJGN+ZSwwM3psRWpvU31AdHBzVVhiWERLZX1fMlY5bDt4L3VgVU1HfVpgVFd2fU88Um9vQDRNYXpEPltZKVdSKTtPVjVTJD1UejJpN3s8N1svQko4SlozcCZYUiVaMHZsXU57ZjdWYVJmU3xbOGtuYD1yTEYoQ0o1fjU3YUUyJDxuQ20qTltnZjc3IXwr''@;'; put 'put ''aGZWKSF3bFdkPz4mYS5ZJSNjcyZaJSJBLmgzbTcod2BAQzcofHd1ZkgxaGl0KUowNmE/PG9vPkJnTV5nYSo3UEw2bklzKmhNel5pbiI3fXZOOEZjKjAoe30qXmlbKHY7YzE/Wj1fViFOTSxQbXdaTk47bnNKe34oUylLbCUyS31NMGIuYyY4ZVE8VWUrST5kTylmO3c2T2w/LEh8dEF8c0Z0M341''@;'; put 'put ''JipIR1RXLEk4Jml+P2gpc1ZIc0QvY1Jnbnh9XmVEKmgiSGRPTlosfkJjTnIhSD1yUHNVUlkyVFMoeFV6U310dHw3N1d8RmdIPyFwRlFKaCMjYihdXyouOyt5LjY0KkwwV115Q0tqcDoxRyRkNk5uQl5KS11LME48bSshaGFKL08uV29lR2RnKVZXVks2Sjo4Um4yNSIoMkQ9YzwoSWN8YF9VWHRA''@;'; put 'put ''TWEsYU9hWWYmKCZSOTFaUjc6KjFwIn51ITUsYnc1Xy5lRH0iY2dPdXshVmR3eW1ZZDM3X0NocWZCQGJySXA+eD4pR2cpa3RxVX5CJmI1ejpzT0ovc3V7PzUvYEh7V2lFQF9USFB1ayQrOVB0R2U3MU0yJUpqNzB9ai5bZkN0MkNHUEEscllINkhwKEowI0h+X1s6PXI3NkhrJj9ZYH1+Z3dWNStd''@;'; put 'put ''TCp0YDpoIURdaGEjZzRCKFF6cyNKciNZcGdpOUljLCZlOzErcVE/VDVKLEB7SyNsZyxNdzZ4bzhbcGI5KkkofXNNLmVwQyt6VChfX3pXVEw4cC4mMXJyMD88KEpdSDZPIjRpNUQwW0U8cyFqTW9MR1NmWD8uejJ4Y0wvZDtrU2B5REZTMVBNbiozczBzYVI0fl5uc11oVGEyZ2tWQzx7cmUiJCto''@;'; put 'put ''eTlJbD1qYGlxa3YoOnFsSio3fX5zTGI2eD41TG9FSHpmJmBQKUNFd0VmPFtGfVJwK0FYVkN+UVt1Xl18XSE8NFgvKzpMaDExaFYoRjgqT0UqckxzbEZNdzNfST9eUE5reHQ4T1ByTml5P259aSpoRG1OPyEkMWNuKXdXI2p9OWVMcFtJayswYkQvMSo8SDowUkczSjpXI0YpZGU0XVJPOntYXT95''@;'; put 'put ''JT46ZE9tPU1hPih6dEh6c3Q1VUtpOy5eSCl8ZU02eUo5OTZSb08hKyh4Ql02a041MSxdKCNSLFh3bUldRFZxL3kzfl5ZcSokIklzZjdqWFUmSDxyKyU2WSJgZVV0SSZ0InoiWjIpJHt1VDJuI0A9SGgmX0IiMyNncnBFb0MkZXsmNlZzZHUsazMyd0pyNk9PeGh0Sip6RC8saz1+d1FdKUcrUUtF''@;'; put 'put ''SUk5RX1tSzNRX2gycT1jSWVSNjVmWzFSbj51W3tyUS5RKVF9SDZoMWJtc2FCbHZNYyY+QURkN2lza0ohe2JAaTQ2KjN8Q3VRQFFicDdnQSEwWkA+diZfJkRjdyV4JFl0ZTsqdl1xZEBkdyFKeGJnb0puNjBNb25gTz5pO09jY1BafX1DKzxucTdjQy9bQCFZa05Nbj4hWXhtSHZRSHZebV1EKF0v''@;'; put 'put ''bUJ3e0RxLEI9RWpEPXJTeW40YSVffnIyMVhMWDtuYmFlZFhJPzNvLnpGPzM7RGhSXVpSaUpKdD5nIUwuOko4WUMiP15FJm5XIlY7NjIvXjx5QzEveFpRcXRkWDs6KkZ7SjRpOkBacUxmbmM8QDMhXzpJMTpnJHpkTjgsTTkpYDJ+ajwrQCwqdmUrd1lBdCJpNDRkdzh2UHwpUT1eSmBkeUhZNH1V''@;'; put 'put ''bjxZW2FpQC5bY25yZCElfjx6Pj9UZUckREIiRkdCUHgyTTg6LEgoVzlvZzg/W3svOnk0TlF8WksrIT9waCN1TCxDcVsrcG0ma3N8UVksOCMuZjMzaT08V1NLUThXJSwlKS9wViU2V0BVNk13VWZPPWJ7OiJmdmgyfm5LKWVSUDtmQllkU0FyeDBQSnlJQ1MldXxobEIpY18lSV5ZMG9ScGsqVF45''@;'; put 'put ''Si98bUNhL2srTVZQSD5tNiExQ0E9P1RqbHYoIX10SUQiWUZMeUJWMDd8alpQR3VQQyQ8OSM+KDhrbS9IKS5CbiNpVkVgYiVfazB6NjVoXU16MiNjX0p+UCNRd21nSWhAZl9iOXVdNy5sdSVba2NzRD1WL0MxRkdjNDEsZ0Ela0pgfVRSa1krbnswJUtHNH12elNtUmYuXyx3RkZ7KXhJWjIpWnp4''@;'; put 'put ''VURXTFFmSWoqQXFoPSJ6SFRdRlYwZSlddE4xSTdEUGZES2gwOyIhc1QkImU5VlU9eEhoeEZUMm4hX1NNJDIhY34iLCYkPnpRPk8kKHVvY0YyMlgqYGJSfVtQWmFpMWgyRmhgJEkwLjJiMjBGP2ZnXkxWSXE7SGVFKy83UHJaTy9eIjMoei97RyNBa0YrK2ojJV1UMztgO0gpcHAhdiNGL2gjLCV6''@;'; put 'put ''Ji4kRyVENE8/JS8uKTAlPD9RWWxJYUVaVFJgbmZIUDlTU1I4PzIieFZxX3RJKkxedWcmSWlPVD99c18oIWcmV0BUNmlyYlhgbSwrTys0WzQ4Ik5wOmVRS05PbjVfVEBxV3h2ZEZdI2pxPXQzTTs4Tm80Z0JTXmh4Xj04SG0lSy9BO01fRm5HZyVtMkY9ZkZHUGZKfG5rUHpNbDhzTkRqWURxb3dW''@;'; put 'put ''KlFPM0QpKEo7RFopMlt3X08pTm8xIjBxN0FEOWtTVj5yPkhbOENPYCgjMG8mOj9XWHdJZSpxWDcoXVRUYjxIbTEwQGtRYjN4OkcyRUUlQ01BWHNqeVV2IUBSVSFOaHp+ZzooL3xzUFVgbUxnRlRJM2d1PGtkLHU9bWk/SzJ9TVVQQXZQSyhjMGNXKFVOU1kqfHgsT1JkJntCYVZ+UCx9eWw/TDN+''@;'; put 'put ''IVM+dVBEN3s5LG5RKTpJRFJmQjJsbm1rQkM0P0JTUHZgTDx+NXk3eksxRShWNiZLcCRpWFBYSDAxTi8kY1h4SjhDeUFEcT9NaURuNEIlOndVQ3NjRE9sR2U5UFFHJT1QRj9rdzRVTG5RXj1RLH5bZjdnYkMmTUpVSGswaTEmXXYxUm14fE47ZiNuZDk6NXlTMTo0JStLVX5BbGxeVV5bYSo5b1Yx''@;'; put 'put ''UmBwMG9sMkBKOSt3X3lXX0BJb3A+flNuO315SExxYyJ0YkdLS1VPcXRtMVpDP154NVNLO1Z9KFBmZyFRb3s2VXFUNzJdN1Y9PklXfVFvOUk1XmRwbCFNaSZaMXtDTyF6ZUB0Yyw/RFpaKiRvPXdMU0NHOm5JVEwzTyVHTFYoSEEpSVg0OVB6MWN5el9+XXM3NnI1TGdgaT1PZHBBYmElQ30lKHI0''@;'; put 'put ''Sjc9ZmZbQSNHTjZMeX4peGRDalU9SGNhKT9ZOEdbc2hfTUBLMz57Wnl7QipmRSkwaDlhTSohOXdEYGBHdipCQE1MY2YwVnVCMnF2MWBNSUdzdi4kcHN1X2heX29BKERsSjluWDxOL3U9ZC4+azhFKjdFJG5tSGJtQzJqYSt1PkF6ZDZpOlAlfEtXbkp8MUJXZFp6ayVTfmd3OmpJV1IyUVp6aXlj''@;'; put 'put ''QzNVYUNAfC5rKFt0bD1seTVHbFRETSxlYCRUeHoiLDBwUHU4YVhMMlokblM/aTp2UzRmaFVJIzFvcnslPkx6Und6dUB6LzYreD8jTWhKKGF5amlodnI0cUl+MVE6PE8kT3o/fnpJSzBQVzB1WEBUPzFZJGB3OHRYdiZYInJwMT04bVt9bjZdckwsQE4+eFM6UXxIRD1nP1RtNzZxOj5sXk1BYFsl''@;'; put 'put ''ajZqOXJ+cjZuLCNyaVp0Kz9pP3NuJCNjZU54TEk0KGBJZS9OY0NyWXY0S2VSTmYqK2p0aDR4QEZWcXAmKnl4MGgpQ3glelJQRWJzem17eF5bYEp6KG9hbzFwRih8REZfRGF2a008e0Rxb3pMUVZWWkpecHUrQzV7OE5+cVo4NHs0enNba0M+KGV5RXo0OlRCIXdhYy5qJV1RXltobVVdcX1UPStN''@;'; put 'put ''UVVJMSZPTT4uNkl5M1EweG4yaHQ0NWk7RC48MlE5Z307Vk5fR2J0cDRzTjZJPElNQnxib1J8Qi5xWUZSOiZdOlZFTGxlW096JGptOFRZLlgxe09Van1zejNGd1BUUFVBazpycjd6bVlhdmVjMElrdWdTN31OZ2FnSldFazBNQGtmPWpuaC5yRjJJQ1csQkNVOzo/Tzh9eUBTbnRkNTxYWlUobik4''@;'; put 'put ''bCx6PXAwdWxXL0NUdmFPMn5ZQSYrWktSVHZscGFCUWBDMj5yfXhjRFJ6I3xGbCZuK0RrKHwmOC4qZVF3fEcsQlNEZ3tGMjRyQT4jaUkmJE40YngwRiVgKzJYLmhyckAkRVZXZFJLZnZiSWBeOjdMPkwpfiYzMEdvXjp+OyRINXVeK1kpfiNNeW5JZWRwaEd4QVcsOT9TOiF6QEZHYn5lZkZ+JV15''@;'; put 'put ''NzxfY35wZUF7NHFDciQ4KGFZUTE2ZlghPGc/TS4jfmY8Vzdbe1g0dTFta3VaOU9pJkRSTjp0JFU0In1XdyYqfSMpeFdGQXBxXkZPO0JbOlZpdClRfVQ7JWN3TzFePnF6ZE1SfHI2bEdnLj8wbSpGJDpEP11dbio5Oll3cGxzWlEvZTEydDUjeER1JTxdZUZzLzIpSjdmMXZzb1twZWM0NXtKbjxv''@;'; put 'put ''cTNxcyN2VG0zTndhLiFzZzIxUyFuT3tfM0AqKSNOUlcibVslPCVaPXZCJDQiNEVrJUM8Kj5VOEUxPnxnM3RZK3VkfDxUYDdUd3pIX0VaejpyUUJ5JmkyWFRvI3VhRi9MLFRYaTY9ayYyN29HUEooKzJ5TFNJcGJ6KisoLztJOlFqQ11WLiFecCh3LCtZczF5UG4jd3BVOnR9LFp8REZYYn5CZCVe''@;'; put 'put ''P3hLLz8lek4qUj1AfVcpJC87KUskUDhHe0clTiNSMkRqWShaalc6Yip0LDZOcFZGcFN2N1tkRHtNeUVBKzByZTh7X0c/UFZsX3U6I0JrVmtJPnhiJHYrPis4RGtOWX0xcHkreyw7dXYqdVA4cmx0RU41LFgyPCU3K0FVZztbdiVXPH09bHRbY2lbeV9pQSs8WiV9QTwqak1bUTx3QzE9QTtjRmd3''@;'; put 'put ''UkZAQD9LRkZufkZmOTZRekoibUdsRW59Zl42ejMxdEtvOk1gKjU7c0A0NWAiSj5qTzs8cU1mNnR+V0smYzUlLjJgMihYIlA9Xz4rSTpAY0IhUE5vKGNQTkhGK0tFfGpjTX15TW1sTUNkOCgoclNgREhpMVoieCMySUZlUjg7P047T1dGKURMcDlPdSx4JGF9bklVajluZ150d29UfkAiRjAqRSJL''@;'; put 'put ''IUpfeFRhNktwc3ZDaE12RiNMbnpLV31BU1BqfChHM2QwIm42NEBqZDswfWdWPDwrTTxvXUVkXl50YWltc0dwXiUjfW53LHxiNXpOb0FtMHp0SUczb3tDTEBpREBQd3NsYTJld290WXhrX2IlR003QU43RCFlOSVdUTBUaix3NjhUfnJ0Snt6JmsvPz8pey9OR2s+ZSNBeW1kY3NffDBmKWZiUCxi''@;'; put 'put ''MFNnVSN8e29MZnNzRnFSOTluaHJHbVlvUl5xTWhoOH03JTBMdmpyQyhEdD4ld2ZgdVJjOWBeSXo1dSg4ejBgUU9UXiJVK1dJYUZZYHg7MlpJVGJRQU57SytgT1g+Rmc+QCRQVCJibVVqRExxR3pIdHc2WX11K3dwNHErcixjMVdOO0JyJnQmVXZadGxFSCZoWnpJKjxMOUtuKDxiVT5dQkBEam9I''@;'; put 'put ''TjNyPWVrTSZXeV09WDN4aGNjO310dGtTNDNgYjJ+Jl19ZXFeO15GWVNVezd1RVcjRSpDPEM/a2AhcHttSyU0UGJibH5GNHkwPnQ+RWldUXB8XUF2ZWw6UDRUKEVLdHJwM3dDM29KNF5USk1gTmNoTVAueE1JJV02YSFaKk1rc0I8JlBgQEFienMrR11YfjxtJEJibHRmL3c7eClPYyZ6Tyk/RmNL''@;'; put 'put ''bF5rQyYqUy9tZWQvKk4iaFl1TWk5b1FvLy96RShEampRSzVHL2pQenJpTEtAPCZSd2Z5dnB4TTdFIk0xTDdCI2BaRiVSJWJoRFpNTCo5US9NVWpiSmhlZnVoc25iIVJPfSloTUE1a1lNTFZVZEpDSnZ5Y340QE9reTcyLn1PQnYlcSFdcENFX2QwSF9xcT5ib0lTKDpEJlo0O1tfP0ojS11rKila''@;'; put 'put ''SktlLjhVZF9mI14sQGN6Sl1rT2JIIU0+X1VdLDMkbiRkeEdPI1BpJGVkfEE8V3hRcDg/PWAiYTp2Wk96Ult7TkthQC5PY1t8ITssJnZvRm9MdEJOZDdCLzxkNnJLWDJoYVsleDAkbz0+JS85KGFOcms+V2F1L1RzdTJMdFt7cTYvMHFBQ3Vue3wkVDFTektrSm4xTU51R2whL0guQ3ApMyY+ST5Y''@;'; put 'put ''fEZaKEQhMCxDLHVdcXVrbiNdQGNXUz5iN1kyKyJ5UVgpMk59Tls9VzFESCt3dFd1KFEvUz5KfV5BUDNdNVlwO0VQM3tocD5QemJOb0g/JCt5QVgvVk5vOiJ3RSYodkEqRy4keEZfMUs3L0pIdSw5PmsjXjxiUGBXTD9Rd2JTJTxObjFANmhDe25wL3NjbFZGVkczOE5hM19vRH19cTRXVWYuNHZg''@;'; put 'put ''cWNEZyNAfnpDMmAqez04bkU4c1A1PDEoLHNNRGI4Wm0rUU4wY2AzOWkhQ3Y6KHwlOVRPJGs0MF9sUHp7WDA7REp7VmF8WT9WRXp1NWNUOXthKVJiKko8NHc6P2xXMkV6ZGIhbVh4JU15dyQiQztSLERlfWlbSHQjWylxIkFYaHAkaGslYFhKaVU7dXZgTip0ekFhYzB0SWR7UGNEcXVbOm9bJG1z''@;'; put 'put ''JXVzMWJMbSg7ekJDMkRIS0EjVGI/cEBTQW9raGpgUGVHNk9EQlgibj0ybThLZVhsVEYxWWJBUnY2SXM7anhMNk4pTj8vYmJgMnk2QWM2IXQkO11RRTMmPHhbQFQiL1I/NXIlZ0BsP1N9RnA6Qnp1anxaSWhDRnhGT1ZSanwrfFBWd1JdMltIWzhBYl5DTCZ4VH59RXdUN2leTD9qKjpNbkMvSD59''@;'; put 'put ''ME4hRjQ9cUFLO3dLan5iZHFbQDQmblVXSihwdX0icjJCWTRlaiRtdyslNWV5O3spTzY5PylPZjdAL3x5PWhXMGQzW0sidyRpLilbdXFTMihveH5OT1FCWCV4SjNmMzBkUG82cHY0bTJiRz9IKF08KmBmcDBZWGp7fGFZWjU2cjM3KGRlTmZnbW16M3JGeDo5R3suWHExQ3IsLjB8cGU1Xy4kdj9I''@;'; put 'put ''aUJsc1E8MGteZmp7QjImOk5ZcGBLSnJkXW9JNVYpXnRjWiY+PzI5ai5yRSV+a04ufiFZLi95bCx8JlQ7Q21DSkV6eF85OmV4OWMpTitSSmk4OXhEJixnQyo8S3pRTVl3dHIzLilZVE5mUHk1ZFhWeGNQYz97XnlFIko2akQsaFdLU09lM1YqSkN4NnNwR3dTITNncDRnPFtSUHlxNEs7bVR6ZXhK''@;'; put 'put ''XjBQL29kUE1CVkpxO2Z7OS5iUnpTNFFBIjgwYSFNZiw2aGIjUixscXg7bz1wRHgxWkMxKjcuRHMwXyg/LF12UUxjSWFpOmxIfDp3QXI1OFtTUm5KIkdfJXpNQSNhNWgwJE8mZHQ0UFElWDciMGkxSzYwQkVxVjVTL19dS3c9fXRgXnFzPyEsUTE7cGhpQXR6X35iMiZ3RlRyOn49Q0l0fGBze0A6''@;'; put 'put ''YkBWRCpvP2pxfUdzfWAuNih6ZiRpTl5WZ1Y/eEUxXWosNz5zd2xUdVosbDpDS019PVklSihzLnpNK2dVQDQ6ZT0uNV9bJVM2LEMrK1EvPV9TQltoWGRidjxkR1JrVW48Iy4jKmw/NkxXTk92UWF3SClCVDJgUGBNT1B4OnFJdDJDOk5dJjJCO2ElO2U8UXxYUHBfT3Z8R2BqXzgzZXxiUXxLNSVx''@;'; put 'put ''Pmw9eyp3MWglOi4pW0FYUG9fYFlFU2tUJDtHbDNQXksvIlN3XkJXaHpzUj5eRTZyZGRed2pgPGRxcCVRRmAuIWdhNyhSTytjUVtMOk9HQkZZTXM3RyYvIVY6UEJOQTlZQjk1JDp+OXx6cGpPT3JCdz93Ym9aRGJGaXVrJn49KnpyUSwpPGohYH5zbVooWVI3eiJkbD5GdDBeRCslc3VCdU9vW0p9''@;'; put 'put ''RWspRUlmXnZ+ZixYVWxkXWVLREk4KnhuVlo1RUp3fWc5QDsldGpyaFl+IkApR3E2UmU2OEp1LDZpR01TKzl0WmdUUylTPjtyMEI3Sz5kJn06eCZBL10rS3lSbjVYNzdjPGRxZXpTQU51Zm5+dUVQKyxtcExOTyg8RSFmZmo/PU13JUVFUG4wV3I0IT1DJXxPIkx5NHh2Z09iOWcrTzcjeWJ+SEYs''@;'; put 'put ''JnsoWlFdcDMiTlZvJDFYIV1FOUVib3tQalZYXkN8YWomPy97aEhUTS4sOjhsPFFidHorWmprWilZSV8oUlFzO3Y1SilGej4qLmJ+Sjx1fFt3RkJaNEZMJnNxMmwvRlJNbSZsY0A+fVQ6JElROV4kRCshT3Z6O2dTNFVLWlB6Uis5InxgZXVzY0pSSWVtXktYanZOdD0sVTtqInl8cnRSZ0pqZ3pm''@;'; put 'put ''azZtX1F3PGRRZ0ojb2tgOGJSO29kNn10bWFtMG54JFopUEh4KHlDd2pvRnklI3dIeDQzOylnRFY7KSt7fEMrWUkmfHh0T01DWHhARUV1YFlSeCtXakhwIUNVQG9NfGR9JE9qXzJpSHM9Nn1nVT54bjxaNk8icmNzIU9jWWNHOFpUckh+JDF2OnV7M3JnNGlpRk9kNU80Ji8pWE1vPT1le3kmPVZ9''@;'; put 'put ''MyszT1UvRz1RPlFVLyJDJkMjTDdfMXBVYGxuQ01kTyMuaD5wQkJJQk4hSkExI0hrUlEqN0MuUSE4b0p2UXxGJXwwPSFTNjdyJktfTGlTVixGLENRTmdJVyR+OnokLjdYWnl6Nj1QV3ZpfXQwSns3RnFKeExSOTsmRnQ1XTxxQjhgcmpiJS96NWkuWk5vMjxNOm5JRWdCNENXYzl3dlBnQmg/dmo8''@;'; put 'put ''VyZjZFI9c3NYMypRTnhicGgzcHosTilMaF5ZOyJrK11ER3l0aSJhZT5ucX1bPykwWTc3eFNnL0oofiVNRFZBdm1FfmtUZFdWTDxDM0c9NU9IWFdoJiN6aUA8UzdnRUk5P3lDUGVVNH5JV2hGL1JLRVdaP0kwTH4hSSYvK3A5SjgoVUB1bEJsYl5XIUdadXEreTFkQFYlfGA+dW14WWs4S2hIbSsy''@;'; put 'put ''JjJAe1siakppOV95a0Yodjd9Tjc6d1ghSjdsMFZSPl1jTE9FSCJJZGM6OGB1MnxyMEVnVGRsRl08TyZ4KiM9LiZOS0NmcjshWnpAT198RVcqbGprMXN1bUJifDp4V35eSmpeQEtUMFE8RXU4KTx0WlhyaT0zUDlnKkQjTGpLT3txPl9tKn1WN1FZQHw+OGl1LFJmTUheUCtdVyQ0bXEvalgpJkld''@;'; put 'put ''NFBHcD9kMkAsXiRANTN+WkowJFNnSE0pYjQxOCYkL29ualUvX35fYTB4b0JWUj1bVCw0b0tuN35IMj1iYCNdJnBwXm03WFghayRYfFlPVyQsQ2tDPDNpcyx0OHEpd3I0UjgmJjR2TXReNT96cX5FWURTVmA/bVBKKSRWczR4RCF5K1FRcFl1PG12PHpiYDo5fmpmJjBIPmBtKzNWQ2lhfXFRRiMk''@;'; put 'put ''XVskX0hzaXorS3xHUihjbEdmVW5jSXIyWUIrYEwqdXJnaih+RHAyZ1NKNWQ6IVBjYFVjKUZVcmB9PiRoaGdgfGNTRntQS1BicjBqI2U+Sno5Ml4lOXQ+aWlpdF9fKXI8Si4yOzAkJHlfSXgkbGtLY0w0JH4oT1VkOE5RdllDYn18NjU9XyJORUAmWm9PT3hlPCp4djcrSD1tUSVnKG5XYC5rNkw3''@;'; put 'put ''KDBLJGhzODQkQGQiN0x6cE9bcTlWRHZRMUhCKyRKdiROKyVpZWI6P3dqRm97eHJtPXFsd3UuYzYsXjsyXSFZNWtWWikrWFtxYz0/XUdzdDU0KnZHMzxKKCM7SjoqeU55QXtmUjNER1Qpb0RDdzx0ejxpSF9MQGN9OyJAbUFBYExdaXBRSHg0PDI7UXt3OUgqKkxNLHZ5KVszJWFwdyg8IlFxMX1L''@;'; put 'put ''KGpoa2dtfGN+SyI+bT1pJjw9SCZ6dWZ2LE1NOSo6fGU2IzthSmNibHFGZ3ZaWFM/am9CcSgsKyVDTHk6NEd3NnIlK249OS8xd1Y+Vzxzdkk8L0pfWCNaXkRFIy4uZ1AkdmBUNig1RUg1d0JNPzUlJTlHY0A2T3JSS3ZkPW9MPHp+X0BLRyE0fDhpSGNnRmtqMFdFPWpZYVk1ZytBNDt6bUZieVpT''@;'; put 'put ''Sl5DX2VaI1YqZX58KnlmTmloUWRfOVFYV1k5MVJ4Lz9FTlVfMCgqMjx1cG1VWGc6Y0tDViJAUX4hRTcsNlAkZ0BtZmBlJHtnV2IoKX1RTyw5M3hvQ3kjajB0VDc1WnpYN31oRSZbb1JMVllXRWdtYXpqWm1YYUFxUD5uY3AqSFNWZUQ3ImwmL1ZrRj89R2dLaW9FPU8+OC8kbS5EWTojKz0yZ2RA''@;'; put 'put ''aiQmbXssWWlTcCFtWnhkfGE1Iygjc1pzUlFRSGdOJHZUYihIM3ZBXzt+bVl8RDpPbnBVSShLT0E9ISE5TDdNeztXbE46RDhNfUdaJjtIQDVCbHVvUXw6UWdabjFoejhVU3tPTXIjbCFGfF0yLFNwRDs4MTMiSSs8WVR5WXJjUUd8Z2h+QmNvWCxaOGpRbGU6MHJNQ2lpaDwucDJNXi84MFh6VDAx''@;'; put 'put ''Xi59JjJWY3Q/JCN+fSRFdDY2ej0uMU5hIkVRNDMuLi51PXxlW3ldUml4S1M3Yy8lfjs8SFo/eiVgJD1QMF1QKk5EcCohWio2TFVpcUFeVEgoMiJFUCxZNWtFZkRKUD9YQStJVVQ1Qmh5UjBTNGh5MVAyT0QuSmVlZlpOZFRwJE8kN05XI257UHwmdWRFYmclezlebF0+WiJQMzNbJmkwcDF7Lkko''@;'; put 'put ''LG49ZkpsaF5CbmUuZHE8OHlsfkxkbXxrKj5vRD4yS1pKZU1Ufm4/ejw6TDBgMklpQklKWm9HNnN5Y08+aWQwR2VIWkxXQ243aEh+czpNX3A/PldCbmYqSTJ7TkBOflRHQUh4eXYxPSRVYmJeZkg0OSNaaWZEJS80O0xPRU98fkAxfDAkLHo3OjkhTWB8I2peYXs6cWMzLGpCLzdRTl9LXWozJmNg''@;'; put 'put ''JThSaXF9KjFFN29kcCVXbEpvU0EmOUdUYE1Ac05ERz88aGYvcDkmU3lNU3U7aFV8P0ZyT3lfLypJT2tiPnd+UyE2fTxhLjVhY3A7RnlDKWNPelhPdmZTTjY0XTc3YlshM2RfUzxkJm59eEJWKDJjImFgV1g9PU9eb0pzZXVfbikoTXYycEhKZVYkS18qXig/OVsvRHl3SFp3RlJDaHhrTEhbKyM9''@;'; put 'put ''ZUg3RjF8fStscms1ZkslVk1iJj5SaCY+QGNDQGklN11KOWs/VEtHYjhEWDMldjooWHJhclB5ODkoXzdkWz9LQSVJdlk7PU1HL3ouNmhUc0dDaXw8YmZQQiJ8KStYYzJ4c0AsOlFBMFZAOzJ8Rz1SdHVrUjBBKlMscXUzWkU8LCtjaUR+PSxieSROTmRfey4man0lc11AKyYuJWpkTG1LR31tW3U3''@;'; put 'put ''WnJzfDNGSmprVXY5cjtOImEqJUtuVUs/X0R8VXBYYVN0ZkxHOG45I1QzNUQ/TU95ezltYyY7XiFFNFY5d3phWWJAI15bKXdyaEdkRmM4MzRCeXxwPSpFdGAvaCE6JkMuK0U7QV0oUXIzayZHYT4xOW85QzAoW1dTfjdoUWNTam43Zm1IZUJia2Vlezo4Tlp7eFRNWk46ITNXX3RiUn5ALDZMZjJV''@;'; put 'put ''NG8/eExAalJCIVJoTE4oZ2g+OnlCc056VEAzUkgwc1YkU3BQX34lN0QxTmtXVldGRkl1QTxeOk13TUkvTGJEcDNGTkkzQGJxJXVXZ0gzRnIhXmAmeDVkVltLUiF1QFVGIjZweWpEMndSejUzMyYse3g5JH1OSEw3e3Z5WSIpUyEoJlZIakFgbHFUInI4JHFCVHwxSVlHM3s6K0lZdDw+TiU0TzlD''@;'; put 'put ''R0F+M3JlTSQ+PUpZIyZWRiJpTi5ka0k0Ik5sM0hiVnlCcDNlZ2RmWHE3bzsocmE2TEJxVjV4blohUikkSVUuRz8sXT9lLDVDR3dkVj91aio4eSlTflBTUkF3YWUweXFHUUBBJSgreU0zRGNjLjcyYGU2ZHdKeWRHO005KTl2cip9R3AoMDNqc0ZFZFRCcT5vSVY8dz9Ta1s1V35MQiRncS9TIUxS''@;'; put 'put ''eHRKSGp0fH07V2E5RFJARWUlMm8yXXRidi4kUFUhVmZRK0JAO2I4JGUxcmhseHhISFQpMzRCJTJQQD9DI1o4P0c1eVQlUVJeSzFmaHpAVk1PIUIreUBxKWNPVCJVfTNVKUE7MFQhQmBQJCh+X0svaTpEZiMzXlk4WFFEYjFaekhwfSZ5ZmFxSXlmYmltNy5ZRHFGP0w3Uzw3Lit6eUFMZlRuW15q''@;'; put 'put ''KEkrJVtkIi99eTtjcF8oS0hTc0A4KHRfP1BgcXZGZCZgKSNtPCRDOCMjcXF8PVZ0U117fGk0VjpfTzZjMlJlX3RKcXlIJl53ZyMlY1BjOW5KaVRvKjp4dUV6cC48TDY6enxndSNtKUM2SCNFYCU7dEckOXE1KEd+WVZAX21URjB8JUJTa1tacDBHbXJ8TFlGQGlaMTNlLlI6Q0J3TSg2KmZKWlZK''@;'; put 'put ''W2pDKVUwTX55Qz1ga1VhWFRYdWYsL1tLTT1QLFVSdzYiVElsQ3xOQ1I7TVQ3S0l4aFg4emVVbXJuQkVISihvaz9LVz97ND0pQ3hddWh5cE86TzxycihIbWlBdFlDV3I4Pn1JVSFQVFgkRGcrNDFKe09LbSg2SzhFPXt2JipBNCxvWkx5ZkxDOElOTkQwREF9aiFgUStvTzFvcDdzOERofjFVSFsu''@;'; put 'put ''InVSPXs2a0daeE4+eCE8KUI3L2x+QHBrLjM+fDZjXVNgQDxLTEUlcj1PSkpNVWZDOWI1PEpXa25HQXQlYiM2S0FgYDJLIl5EbzZ9b1Jkdm90SjB3KEJPITt8OlFuPE5oW2Y0cWNLYX04QFRMdmEqfkxnTTEyUC43VUBgd2V6cihHXylUYShMc017aVZtTzBPIiZ2aC5uIyFEPk9eIVp8cCl8TGVO''@;'; put 'put ''fVZKMCxxXjZrLCN7Y1NyS3pZU29+WmhKcS82XTFNNHp1R2k4aWJsQH1uVDUmbncuZCk0RyZZdVBicEs+P0tXNDg2WzchUH5ifnJWbGZaT2YiSWkyK1VtOEgucHFGdUNZaTlsdjIsb1I3b15mQHdXMHJ2Yj8lKXRkZ3RoeFpSdDFNZ0BAdVJaPHRQXVJWakdfd1R1cChJRDcmJCNrLjBtV1E9a0NZ''@;'; put 'put ''eHYrYkpmKFdba0R4SlIlRDMzMyVSZHR4TjMvI0hvXXkiRms3VktdSnZpZ0p7UmppS11pZl54JXtwWU5+RnM7WGhOVHwuLDc4SSlfUmpWUWUvbTQlem8wZDRdQFNldmxYN2hONldRcWdVN2V4WH1Zenxyb05gW0JpUkosXi9yInRkVDlkczZzeEo1SloqTFUpanx8MFIhcFR7YS9FMitvfF97RklT''@;'; put 'put ''YHJSPTNUUDQ3JXhyNEdQPWc0TUkzbGliYWtYWkY3LjwwWlk6fHRvYixVTnBuPixZVyk/IyM6VkQoPVVbM3RCUXNZVm1uXi9mfHV2cnRWe3lyR19LTiZjUXY/OnpvZjk4XmlGT3J4JmlBcVg3PFlVTDZ8QGdzZWhqW3ArQyRRODlvMWVnRitrP35uPyJCc2tgMEJVZE9xYk1COmYkbEtaIUtWfmw3''@;'; put 'put ''WTBeZT1Ocz9COjIqeU8sOF9AeUhDNVEqbCxhOUorKT5pXW5na0MiMCtdSUVnSXU0UzxTREl1THpjZn5lTURYMn4/Vj1uRihrUHMlUS8xQSQoZ3lVQXI5al56S3U3anhHelg3OldeQU1UIiUsRHRRJD1LLEtJJkN1TEBsa0VWcVI+YWkvOzdqSUFmNSsqMGBTSz9McjcoVUVFOTZIWCg8SGo+X0JD''@;'; put 'put ''JXlzdWFWNkVOUE89d2VFRjEqSCF6YD5+dnxlelE7YGkhMVlaVUdxRkcjeHpbJmtXSko3JkIxeEwxPGVjcERQen5xKjh3JCxJcW9pKUA9YW5tfDNCMDNnODlqWWdYVE5DVyxYWns1LCRkTjReZHF6bTE+WnZNTGYxcSpTJFk3bUN9dWcucSFhaHQ6Z1RRZyMxMnB8NXpxXXJbUltQaSpdUjNsZU1D''@;'; put 'put ''VThwaVdVdHxqfGlsbGBsMHphMFpkNzUjRGpINl1oYyY9ZmI4empUQDM6Q1kvXipkdW5qUnBGJVlFe30/MCxkPDJlNUJXdD9nYihLdFFNUiErfiZxMHdhSl9fKEBxY1RlfChNW2UjRF1ITU0vayltM09aS2d9NkdaVTBMcVghJiRzbnQrdjdUPzlraVV7MXtpcThRNUN0KHxOa00lLmMkUkwrImlu''@;'; put 'put ''ITdiV2c+VkBESmJQSjt1MWZzJHl9elhaWVdOQkgzcSojekM/MVVISFAzTWpdTTxbKW5Fd2JiVHZWb2VSbztLeixqPjQlU0hBWlo1XTshR3ksX1dUT1ZlOEdJWGcxcCs/JThpUFtYWmdwYiNtbm0zaWJPUDBHcXMyT3AvaTYoWn1QKHguT0ViRlMwZV83RTpPUFJeRDxTTStxV3lWWj51RU9+XmE5''@;'; put 'put ''XiUiel9AJDR4KmxaVmRYIiYxSixId3VwIkpvYzthUkE5W11+dllIX3tSe0g6ZHdROm5lZFJTMmk7bHhRWXxZOEEzOixkbk9oTktWQ0B2U0pjVD82JVgqUSRPLFcrZXgzWE0rbntQcHhsRFddWCRpZXBVdTJgT1piPzE7bjl3dG1UZ2k5KzZbM0hwInJBRWIhXjgiUUhzNGxvYlJhImp6UzBMRjs3''@;'; put 'put ''aHszPTxOQFU5bnMzN3BPWU98YiRSSGJ8Lil5Y1A8YjtbLlllMSFLa3hJRGchSnIqQ0FLJUxVai99K3tObCw+bmt8cEl7TkVCc0YpcXs2Ky5iMDBAcHJDT18mbX1GYm1MdkpbPiRJMVs7dmF0dXgmYiZJcndxZ1YqTDtgQ0wodT9TJkpTek47aT5fNjhPQj85eWBHdXlQdHVXJVp2PyErcDg7LGZm''@;'; put 'put ''YVl7Y2NkQio3OS5kKFd3YXJfRSh+UjFXb2BjWzFTfFBaPkVpSHA+Oywme1ZhbCE5bEs4PDBOMGtjeVJFeGdQaD16WGtXV09xSFolemsveDlyVno1YzswUWN7K1ZnV2lHV1M6figsLysiR09DcFYsUXthRDl9TF5DS3QqfTokU2FJb0ppbW17TUlZPFtKSmlCeFlUNVdhfTZ+OFs9NmM/QnZQfHcu''@;'; put 'put ''bDNYY3FQI1c/NF8rajE9PF10P1drailPRSFfUFQycW49ZUZWQElfVjF4Nk1xT3FbYnhycV8lZHBAVjZiK3dYYEMpVHh5PkpxNi85VipPRzxoNCEkUSh4YlJvKj5MPzQ9K1tsKnBWPTFTVTQyY2t4T3RQQ1AhWWM6dCRZLlgyJig/RSJ0UCZMbihJajNAJDQ6MVdWREU1NzVLalh5cTJVXVdwfVBo''@;'; put 'put ''PCwpdExTaFREMnQvLGAiQiY3P28vcUgsPSNMakFVXjVMIXg2Wi4vVV5taFhrI3pYbyxffj8xRm1VdU5qVkRGOCVmbl9QNXxHY1coe3teOklTMHEqTFB+RSklKE5kKHtqektAMjQqfSZseEduVT8scURrYFdPKFZ2cmFILyZuN2EiR30sUDApUGJJcy9xVnU7bWkvdmcjXn44Y3M2anJDUDAmaVFk''@;'; put 'put ''PjA8LlsyZncmbiF6ZyZqLmU6dzRlWzw5OmZwSiMyQyIlKG5WYFM6I01KKS8/UilxXik1ZnVQcSkvLz86YCQ8JCE2a1FoOlNYNjZSZjduKzVdflpKU2xOaGlqZTVjYC9bTk1day5mJkY1X2tPNEJDc0k8Wz9Sc0ZtKEt1bD04QEA0ZXdfUWNvZSk5Z0g6Okk+aFEoJCx6WCNQOlgzX01lIzY9WmQr''@;'; put 'put ''JCFbdTpzbygqTXEyfDtJXTRBSTZwVlsvdyNTRjZQWkYwfj8vK3k4YC95bVB5M1ZsUmtmLil3WHhdei9XMDV3SXd9NjZBVjpfbStDcVdRcEcjMyRqKSZiKi46Jkk9Uy5LQiw9V0UweiFlJS5SfWZbSjt3IWpXLHtJRm5aMU4oS19HVUQ1LEQvaDp5ITsvQm19aSEsV2FqWHd8eDQ5L0gkPFsxeWA9''@;'; put 'put ''PE5EJHhtX0dgSEQiZVA8NGZJQDxlRUI5OXwjV30xWCxCQiwmRCQobU4xOVdFUy5gPTBxYzchdDlIWzclSThJdG1WNzVgby9TJDNHPF08dTlYSjY1OnEpXSVoQDo1cXZ3Y2AkTyJJe0d2aWlKLzkuUElPdG9ePHEjTEZYQSZiYiFvTm4yOCZdImQqNCF+Tkp7clJ8K2RGU3RDNG4rSVIxfCpOdVtV''@;'; put 'put ''SS5IeF5PNlRaNDhaTjZMfV1dSUReJCosZSNkUmVwc2hQeStjbVphMlhNbjgqIypCWXxPeCxCbDdCIjx4T0FXKXkwIkNuVzdmczdVd35id3VgTUY6dHJzRzBOMExUb2kwIkZHZTNAMCM/ezI/WTArZyllNlZRZFo4VT5XTSh7RWgsbjA3NmVjaWlOOHhVUz9QOG9teyFST0c2eC9tWVklYFQxdnhi''@;'; put 'put ''XipyWCJSRDdNKG01TlYlX3JjLEwveSN5QmVVeT1vYGt+M0ZlcCUpIitFM0ZPdGN4djVKZkRKLG84KkguTV85RVQwU3MoZkVtejlWQysiIUN6QSN0UFhYOTthZUd9N2goITAyOj15PjNnLzs5MDFHSi9tMjJdYG8kdEV1Lks0P3ZmMCVSNkRjVis3Sm5qKF9rcV96Z0hie0JIUHp1Ki9GZCNWampG''@;'; put 'put ''OHx8ISFVTTdEKW52TEw5QipeVVdBU3d2MzF2OFdYU3ZVbnhuNFRJOX0oSmldMk1nTWEhe3B7QTxoJCpWYnxNLCQ9OGFUYV5WWmB3TWM+QjBZOmchfTpnWDVsWCgqVmFhKjV2d0x8amxDJWNKKHVKakhbZ0JbKHd8JixoWHFDRUNGfFFVN3FhWm0keHk9MVtkIitYJF0vRjJ7OVNzS2pEaFZkSU85''@;'; put 'put ''YVclSTFGJWd0ans4RmswNmE0R05+RlJTOFpYfGJMLEt6QW03Um1peS9ydk5gYjdpQCRmWjg+KUFdQ3FvSFdfbmlJZSZWXXlRbTtvbkQ2QEE3K3pOJWBkJHM9UEg6SDJ8fTswNCNhZWpUNlVoVi5JTXFvJDVAeE1lXklGWy9dVS4hZ2pCcm97VHZJJEdnOXlgIWBvIzYiLjYzZmQ6Olt3IlJNOlsu''@;'; put 'put ''dXxbZ3JFN0V5amNFLDp5Ult6TS5uI3MyNEREZWgjV1A7V2Vvbm9hTj0rIz1iOiZSbDxDOldiY0AhKjJ5d0JTeVBRejwmdU8lRXBDMCVQOEtMfnpKfDIqRXZSdDl8amdEenRUJWAlVCNIVVM1IjA1QEZgd3dhZUUhLFs3THIqYkxmTntbbFUkfHMlRFtBXUBzNWd7ZFBtX1JiUndvT1A4Km1pRk48''@;'; put 'put ''azk0NEx4U2ZwZndDamRPb3QmVSxXaXd8TVBpRTp8Olk7KGopQ31Yejp6YW5aTj8pST15MV0lK0osZWVFeXFmSGF6PVk6djwuQldiclpdO309OFZJSSNSIjlnSiYwaERIXSNxeWl3eTMwXXt8ZEBuY1oxI3JpSGxsbjVuRWNmO3EpT2BPWHlMQCIxclV+V0VLLD5fW0lBS0tKPFJVPU9ydnZxa1tY''@;'; put 'put ''UCR9LmVVeVhORFVxezY/YVkqP3U5dlFtW213RG9OTkBefD9AYz5OclE3QXhvd21HRVIsdygkPD5EdFpVaEpNN0QrRiRHKVdofl9eWVEwKmR2WmYrW3N6bFhdclpDSz5oZ0RwIyQiRUs+S2xKSlBAdyNKenlWM0Z7dzNbL3hGVCRvMCowSDx5eWIzdiJRI14jZz11RTsufDdKVDxZT11BJFcvcmB8''@;'; put 'put ''T0pwQDJxVG9yb1dwKSs2d21HUUZIWWgkNz1oOkk+OHVse3Z1c3tWLyR0NX48Q2U6MmR2Vno8UUdIRmg4S1d7SGxSKTxLTkBRXi9WUCR6Nm8iWkRwYWU2WTF5e1VdQjNiQFFxbmB3akE0YkZZK21lLzlWd19YKStgcTwkJHkidjg2NTJIMEhEQkgsPjx4b3RJfjhMcGtodDFTX2hpMUwofFBUcC5a''@;'; put 'put ''R2cqWj4+bHNAWHNybWxJQ1pDTlBQZTJ0P1pZWl1kMTk0P1tvWEJ1JjhNJVdvOF1GSG92N2c+eT93dU5eND5WcE92WVRbXyJBTVRNdTxWZD9bdTdSOENNdnNfJio+JURYMUc6P3xVfHw+bGdOcmpHQkMzIlt2RXh9aDIsS0JWW11yZSt0VzA6OWk1emo0S0B5TllKbCFARC4qcmpxLmg9YUVKWEhN''@;'; put 'put ''dzUodyZgPjlmKC9OZkVMK09jek5AN0g5QEMlSy5OZDhDUUdXKEIuaT5vZkg5V15YSVYiPDE6Wk57UXQkMFpuYSRBIkxFMiNRcjluRXNtVFt2InZOby4udysxKDcxd3dxMl0oLEtKdiZ1PDdgTm1FYU1nOEopWSJnYjZmLDBYMlhtNUsseUBVcWhjWld+Wj95Ml1xVTheRVQ1UEA+YCxUSDEvN2ow''@;'; put 'put ''Rm9oImsjOih6dF9OYXhUKDNzWStNWnZaTDMxQHcyJlY7Pl5JO0lKXXViSDw3SF8qW1RLSm10TXAzTyhNZ2NQeyJ+PitKblYhTUxuZEdleUJoJkRvZztealh8eGt9djRCQX4jX2lZJXhiVzkyNUBXQTlwUSlvQmt2Z1Isa2YmeyFaKFtzekNYIm5IUm4sO1ltb2QrazQrZCxucXh4Zn52YUlINmEw''@;'; put 'put ''Wnw1U1k3MzJzZjpCNTJNRGlLQCpYZCp2NGAlZmxUdUtQKFB6Si9jWXZOa31IdzxhWm5WPjE7ZWwuTkZUczcjTzRZa3FbPDk3Wm43T309QXtJVSsrUHpnXz9raDxzKTtyME8iZEE9KjRwVWlScis8JCJiQno6PHxQeGB0YHl9Zm9SampnKkNhQmoudUJ1THsmW1kqemE1L2p7LE9id3lCYi8xa04l''@;'; put 'put ''MDYpND5sMFRvSFtTKDQ0TyNnXmgxPVskRDpaR0F8bEspJnUjSS9VPjByKWlXO35ARzRaPnNsZFdZZjkhTShIWSFVT0V7QmZrTD9BQz1JX0B+KyVMKi5WdC9CUGs0a2EvOVI3WSZORTJoO0s/eSh8OntNYi9da3N3Ujg9QGIrWEQqVW44LGZ9cm95T09RWjlFY3pFOzAkTSU1KDRNY3VkZEJaSHI0''@;'; put 'put ''S3I6TkxBfj5fbFZXandCfD1JfnFxYDojSGgmfXprcGkhXnM1MixqOEopP0xSJTRXZi4zeVE9TEVgWmI3Q18zflcmX3wsRF4mYShtZzVSZW4kLjo0XW5gU1A1eGAxeyskSXA9RT5ObXRfNEp1ayU6fE1XK1V6KHxXPkF8elA/QHFsP1ZxRTI+P1tLQ0lLc1I9KDxRb2JdPjN0eW9yXSYqTXhNcUUz''@;'; put 'put ''fWZpTHMudzhDaEQwWXovZ1RoU0JHfTZPOFcqXi99WFkoKjdvO01iRFA9X0BYQyI/cldnPS5QNz1wU109WE05PyQiQ1ttNWdkIyNWOXZrSndOKyFFKS9lMjpORD46dk5XZ2YubnopS0s8YyVlcWcraHp2bis1UUojWkdDOzRScHtmdTslUmJbYGtxc2wwbmF2MHo9RlA/PFN7P1kuK2E+UkQxYVl3''@;'; put 'put ''dip4WFVeVngyKUVrJG5bfEYsM118ZFdjKjpkSGEuRzcqU1s1ektfQ1V4dFtDPGQ7JDFFI0thaFYiOyxfVG58cXV7Q0AoWm5XUTsyWypqSF1PPUNIa30qMSsicCkqOm56QCF+JVpoT3R+QVQjXyJEXXBiWW8hZXtZKiNWTHQjXlpvV15xMDlWUy5yW342SGI5SkxDYVlsbS5aZCxFIysiOV8rTCN5''@;'; put 'put ''L0JNcF99fV9tVS5MU2ZlP0hqejs8V280OlhOI1U2NWxlOiYiPGs2RGljTCZST3pjO0J9L0pJXjokdkN7Y2B9Xl4yY0IkJCtGWD9ddDNZZEFdWiZTY3M9JGRkaEJkITszR3tMSkUwMCVJNE5gQzBKNzFFfXhVcXtwWkwxWVV8eGJ0bElCZ2E/TlNlXUFLYTRxeGYwaiV7RUNEelBdVi9hWSMhKkg5''@;'; put 'put ''ckJycDB4c0pmb0okNyFDMEI6TSZXcSJHNDhMVikmJUojeHc8Z0x8Jk19eGlFMm09cXg/Z0VNTWU8XiFPPEVRZWtnamw8SkZmIjtDOH1hT3Y/R3RqdU5ELHd7PzQmaXpUeEZ3OUlQUzRWT3pWUC4kNnRhcGFQZnB6ajcoTW5vLCkzYEB1QGNLQEdiUE9WNSg2bHxPdDBtTG9kNDFPU0wzREh0NzlW''@;'; put 'put ''dWF4UkVRS2lNKyxdb1sybj5QU3RGK3VUP1slNy81fnpeP1o6KHErND0qTzFHWF1VdklHUnZHTlFIb3t9eXEqaXZHLEsveyU1cl8vK2FzQVBAZTMmeysvN29PMi5ibVZsdGkjOHJ6VXB8N0V6fixfSXl7VSlYWiIsNDc2UX52QV5yOl5sXXtOaCJyPlVxX1NCWDkxTVREb1o6OSo7eWVfMDxeVWQz''@;'; put 'put ''XklQaTZXVz4qJitoRFo3N0sofiI1MWZIaTpfLHxJYXtQXiYjWTg6LjthJl1zNUBMPTdGIVc9eV8peUFyZT1VSiUhNn1kd35YfjZsRkk0Xz9GJiUwd14sZEgoLzpqZ3xiQTJkMy9GNl5RYClMJHEoakhzV285TiRASStYQnRSQWRxem1ob2M0bSZye34mNGg7S3FCIzQ7IVkiUW5vOEs4QlQhNSpI''@;'; put 'put ''S1guKStkREczNXZCRHhkfEhzTiU2QkdzQ0JBK1padC40L3hhaElJRmFOSFY2Z35abWVANiJAZ3xMYWh4QmUjQXUjcm5NLnl8USpjRGQ+cD5qZzMmPnQoay5DSndnaEAqRkJ2XyhQZyZXU1EuRE0vMXE9bUV1eF0sNW9+QEhNfXsxfUppMU5CNUxhe2NmOylVWF4vZXhabD0xaXZAV2tVbWRHKFhM''@;'; put 'put ''eDZ5LGtBLn51LDVCKURuIyV9XXZfW2BuT1V3YmRyRS4oOExyKTFXU3FYJXBCMk1tLGB7NldXemx2MDYyXnk0aEkzP2l4Y0QpJiQ6Y0xhXSpyQmNFemBXOFM0ans9UUttRk5ASnFtVUFPZ2NLe1RYKE45S2ZKMWxyMi9YbSJmVEEkOlszXy95QEghK3JZMztJR3lXekI/WH5Nekt6TUg4N3ZHWmI/''@;'; put 'put ''d3Qsc3YhMH5lIU42W1BJeHBCN2QlfUlBUFRATllMZzJjYD8xYlpEW2RQMHhFLFdSaT4vZG1OLyx0ZEZINWNGY1lrWFpCP2llIyZxVHVmeCZzYUNrcEBQTnQmWTBnPWNWcn1rPWVXckBEWW8zfl5MVEQ6VGgrak0hO3BdM0E8LEFgZjkyOzM5dndGVTVGJGRGUDlKTkZTUnE2aHZPcn5gRHZ+Wk1Y''@;'; put 'put ''W3t7Kjp9MSVoRWFtRz1oYT98dnc5aE59cyFOa1d+Rzl9VXRMdX5ARy89Oz9ob1U0QDJTKWIyT1doSkIvdUF7XVBAb0AqQndgY2QqZXI8QHwrPUdgUGFLaHJGVnN1KStvU0NIdjJ1Jk97Inh6STJxTkk0cms9W2RMOmEjR0ddKn5CSyI9KnpCSj9GbC9BXnA+KyJTPnwqNk4qKUpPNWxQOHhscn0r''@;'; put 'put ''Nz9Ye05FaUZhfS47bU5mOWV+SVJwJChDRmp3PkpHOUE7cjNMcHJeLntORmRoS2IiXnMra20+XSY1VU0pPXtyUilLQD1eJDhaO1tgT2E5OHlyOU5AdX5USFpLOTBQOX4uc2srbmQ1VixYcHJnRzUwd3pJYnQ3MnhbRzVyJWcybEhrUCt9fXAmMFVyOywuYyhJUTdCOSQkfjF+Om0rPXR0byo1Ykw7''@;'; put 'put ''Z3lNOSgjanplM0E0SS8oRnFXdVk/XS5lNFk0cSJWQDltbEtKb2hDMWtZcD9ra1tadjNRYEpBMDJVWCNNWUFkP3pLP0c/KSE1bFtRRVtKa2Yqd25eI2NIe3M8ZmRXS0ZAIipdIkxKOVs7SkIkIVFPKl5QenVWQG5Ld2xfbyh9ZTdKcWJSQjpKaiJRU2RnMmE4JUdURipVUDpTXXNeRkNfO2svd2dZ''@;'; put 'put ''Rm4zKHxRcnBVRHlCKmJhZkh9Tk05anp+RUVdPkMoSTgldik+bWdpU2lWLn48WFpRbyx2R11hWmdhbktCel0zcHd8QiYzZyUzUUV9NVFzIkp5azBfZUB6clIsTUJHYnVoUzRJR1EzMSVQLjQ/WzlmVk86NDM+anVFOEdCcnpqWTt+NkgoIl49Slc/SXtDRUBFZEtXVkNiQ0ElOVJ0W3pBcU5vPmo3''@;'; put 'put ''Vm1TUy8yODpWLDRTZ3ZCZCx1JEE3dX1hVEZyLF0jIXpCNUckP0FjNHgiWEMve2kmUko5YH58N31wQDs9ZSJYW0gxTV9KXyhOQ3soYWBNVntrRjZQQiNxNitmJXBMQmNqYjtTemslfXh7OywxXkdKRVNpfGNGLCkoIzVAU2ZyczNYImVjOUo6RENoR0VvWyR0UDxLVmVQYXFgWEojU3EyIik3YlpR''@;'; put 'put ''ImF5aCJDNCxSV2ZMTEFtdl9HNCNzLl5bT2ApeCpqJUwrPVtOWXxZdlFecjw8e3RndHkheGdfdHJTJTI2QmJEOkNmejhvIzljXjBGN3I7QnFsQnJsejZVRm9+Nns+U0pZckh1N3EsYjZ8PUNYTE5AWH1iJFVNX3s9TUJfdWNPJSNrOlM7ZixHJXVyKSh0aXdCJS8/O0xwUmU2Wi9+WVd0UlchMGpp''@;'; put 'put ''dFghOEpZP31yJUE/Q01sRzpPI21eWTRCRjMpUDxLQDdEcyR9TDdBSUh1WkN2Vy45NCYrbms1UXZeKFF9dzdMS3F+UGtePHV6YmlAQ0lffFl6ZCs0amFjT01vdmx+P1o9XnozQDQsL0EpKyMibzg0M1p6aXUsem17Wj1lMDRES3diP0o9NW5rOnAwMkA3KkhpUmNGQ1UpbiM4c0hAQXZJeS8ke1Al''@;'; put 'put ''L2VIXTQ4e2JaQXYwTX5tOVhEd1tHaUMkP19KLG97MilTZlpbY2lTe3ZUWHBsd11dR1tWM3slVTplQzN8SGgxaWN3OV9RNEEiPVA7Mm91eH0jPyIja31WNmBrIUoua1pQbTY6ZWxyPihSel5eSyJWPmVhSnc3RypoU2cuektqM2dGfUtiJGVrYSUpLmkhfHZfensuK2wlZEZuSTsmNDZrSkgpbSIh''@;'; put 'put ''WEJLR1N2MV9mWlt4Y2NgYGRSWCpEPXpud3skez9HXVFQfElUVSQvcEo2WSU+KFkoTCJzMi47QEkxTXl5L3R0c2V+QEN3TmNdaXI7W1hBSTRYI1NgVEM5aXU6SzhIJTpBSFZ0d0JANSM5dFBTUW1oI2s0WkcoeWJvYWxgZUhrXnZzJTAzTlhYKCU9MlRjXWRTaSh0N3JgaHE5K3J0R0VjKC9nNW0p''@;'; put 'put ''JSEjRjo9OG4yTlRxblhgN3hIR2JAYlErQkdJRmxlJm1MXkRpXTpBal9MZmRlcEI9PUF5UHxFaFdsZ2BgPElAez13fnFNcjFafl4pS2VPfih2SU5dR2hHPGdbOyomK3pASEJ2PzVNPjcyRVIkRi87UDlpS0V1aU9AXT1SdUJfVD1kUnhOYlF2N3tWYz1mX1hASnNuVFFCdU08Y1VwN1pPZz96YG4u''@;'; put 'put ''QiNQZXYjKT5VMmcjS1BFcGdoMl0rPXBVe2xMYXs2fXxiUkd1Ok1+RFdSKWRmZTtOWjhQMFApJmA/fjYjaiM0RTt7WFo5OD9nYmcoVz0/UW1jKUNAJHpMfHlXWDRQfCt+bW5bSjdFVGs9PG5RUW5haGpZT3BdKT1ocTJsb0gqSDZATT1dTl0ubVg9T1QzcVszai4rWHYlSkxXcl9MSjpfMHNpV2d3''@;'; put 'put ''N1RMQ35XVDs2QmsvIUZDVjtEc0k0JkNhan4rY2FocE1GNXN3IVQhbHdAKyVNQD91dngxSWd2KzpdPl1AfjdJXjMmUWlHKXxlQ14/RyEyQHs9ZiIuSiNyYDNwZSFxfS53Q24rQ21MaVYuUztqUypAVm82aFQheTVSRmVxcUtKV3Jua3V+P2RNRzNjcl8uUyo8OmkzOiY2dyYzUEBZMyl0WmJnbDhS''@;'; put 'put ''MmtLRE0/O0tnYEVXTjtLdGguVEJCKWQ3fFszX01yQkN6b2xGKEJiKzU2X0E9eFg3O2BDd0lkLEpYIllZL0F1Lmh7JFclOVhWeGAwIkNrJDJSd3smamdWTmgjZz1tQitDKCJ2WTFoSD1malQ6XjtyImtLcm4/WGdUeHxITmNrJGwyX1QwUGojUGpyLkVyMVdHemM0LHw8PFtbK01USEd1TF9iJm9u''@;'; put 'put ''VzN6ckA4ZDhuaVBpeGteT28lSjNSempIYmQvYEhNTHZ3aGZoMDA0aEV9MktuMVk1ODNwMXBAMWZtR3VDYlBxTmp6PGRLczZRSE4uQGBgPkZYfjl9QDs4IllfdSEhcCtSaC5bdi5dV3IuPVp9MWJxZkUxRTthYDwqVFhiYTlkalhrTFNiVnt1bV0kU2s7fCJyQCxyU20pPkYoOF5pYj9hJUxkLy9O''@;'; put 'put ''P1Z3IUY7ZUdoY0h0SyN8ezg1LEVCV1NbVn18Vml5YEpYUiRLTmlLI3xFOiRdb1sqeSpuWnhBYVhaRm18dURYRShoZktPMUxmJHh1SUh6KyQ7QWgrdSMvQVA3VntSaiZhUTEoWl5eTzVnI3BpQDZhKUoxXjJ4QmlweT4/VUQyNCxlflpPOUElXzJkUHQzbGI8NTAvZjVUc2AhOFM+OiJJPjVAI2ZC''@;'; put 'put ''I0k4b2c9NjgpVzJPfmpZTjRUZm44RUY0JUt2YFJkakAwYmhbI2UkVFJgdFQ6WHIwV1tWbzNMZjw/YHoiW1ooVUgrKj9pNEVRKH5FJVI3azosdFtFImNjS2pmbklNVDlzQ1RWajBTOXI3eGtrUWlSO2Ihfk8xPEopSHUxQ2IyYWhqR0w5RFRUXVVvS3g4ZytPZFVRbWBKZiQqcXRwX2NXJkZ6UG8v''@;'; put 'put ''O05INmN0MGdTalghZUA1VnQ2TDB5ajhVe2tuMFVncHZSO34mZ3ZEe0hrRT93RXFuM3gvYTJSJn1oZ0d3Xzl9JUgwIXRvVzl+YT9+L10zdHF8X2YiISs5OzI3aE9NKyxoekN1XSEkV181a1l7aXo9YzZSd2VNOFY6VFAoO1l+KT8sOCFdNlVCOn1EY3RfblNNRkFuJU5iaEtUZCwkNkEmUE0iXURD''@;'; put 'put ''bkZGMDJ+dStYbGp0JHRHa284SDlvJXMicC5RUDcwfiVkelk6OHcpRXliUGZ3VGhfOWtvUj8wWVtPa25vVihrSHN+Py8qX15GIjQpbnFybitKNCtOVV9kbiFec0kvQH0lZl4qIXI5NGxCZTxMODZPMj8qRyRgQCpbIXgjdF5dclJVX2A/KndEW2NLSG1JYj5NP0RZLmdydXFifGteKVlWcWYoIkRU''@;'; put 'put ''K1dMZXlHRWgzaWIpbU9iaU19XzwxXnVQeDJsOV1jWzpbPjMuU3ROdVReMis2ciN2SDFOTGpTN2p+VUM5Sz8+WW0uVVY1XyE3PSRkLyN1aVArZjQ0TnR1N3tGc25xWmkjaSQvSCRsfEZ5RnRCcDVyLEZlOSM6UGleQ0AwQlQhZHNGYV5fLzY9RjhyS2Q6T24jfEBRM2JXRnswXyNGc3VBcmxwZEw7''@;'; put 'put ''MUksejo9XXtgJGp8VV1OIVFkWUx7IWAhbiY7Wz1RUkkzR3FITkQ3Q2tba3YmVlB0TnY3P01UZFdaPiY5I3l3TW96QCpnQ2o+Ui8hOXleJGhnY055ZTAzaChoInBNUjREJiJmQlY/XkBgRkVjJVQxRXEsPEl1fi9vVjcrSVNrfXF5LD44UHpdLzRyKkg1ImhGfDQhKD5tMG82SmQrYUU3WV9jXjor''@;'; put 'put ''QEttOWZGRStET1VQdERLMFRFdCFEMlU0d1ByZmdJOFYlVnF5Q0E8M1UraWpYJSVwemQ6TiM/eyJ1ZFJVOzBGTEtyZlRjZHJeU35OYEtXITZvS21uNE5ySGgxJUlbKksoWl9bPD8ibH5WT017YVs3ZEVTSkxILCRQQHxocF5sOVVePXtBdSVYSyJFaDRjdi5DXSFSKCF0SW10Wik4andNV0J0QTkx''@;'; put 'put ''bFk4N1JdQSVpfXVlOVp4cU5edkVqVTs+SD12XzIrKGhyRGZIQ054I3AsZW4qS14hIUB9UjduUDhhSSh5fkR+aT5HXUVeO1A0U1lpcCJqOHY0elpEK0twbjgxWzElUjhgMU4oeCN4bjQxWzV3UFd5Omg9Ij5ObWhvKjhDYntSMHp+PEQyVng7MXt0NWJaTSokZkNZZjNIIWopP29tfFRqe0EqQCEx''@;'; put 'put ''eiFsQj8/ekVINVtVbl1HOG4iYEI4USpKd3hhUlVrc19vYEJEezVTamV8KX1yZDlia29+NlNdSXlqVEhYbUdlSyJSTSxZWl5SbnllTEl9LjFLMTxISyJ1cywkcSpyVyh5dWkoeE9zOHgsTmhySm9aZl9qSihgOVRFOyFMNnQ4QkJJZnAyR3F4VDFBX205JGpEO3UrRGBdUls7XVgzZ0pCN2hnNykr''@;'; put 'put ''PktgU254SHpaPEMhIWU7RUJjMEJbKUkvN0QybiRLNDxnMGo5WEZTMU1nY2YvQC54e3ZabkBSPihAKGpkOHUhQUUsMDwrSiRuUU1hSiQ/empVOXRIZHJFM3taS0phcyRtYmw3Oiw0QV5TPSpMWSR5R0ptRChUclRnbFpiYyFKRU5ONCZNQXtaXzhlOiEyfnlRfVl6S1VRMVpCMiVKIXdHJn5vZD9P''@;'; put 'put ''TXQ+Mi50IUFafCVAXXBXO2tPcXdjbGNLO3N4NyxKe2dFQDdoUjNCT3c5OzIpNk9RKm9be0E2KHclVXg0dWo5azprTmRyO0tnPSNuMl9pfjQua0FJakd9UUJpMWskT3txUVlPL2w4dnlNPStPSmhAV2BkRiI4VEc1bnpuJjMkTyFyZSRbbztZOntgNHBJSXRWUi5zKz9idyYlNnpJaUtbfFFeL1dY''@;'; put 'put ''WVoxc0NORWBUKXQhU1A4OEdPKmF7MSxbNUpKUmdROGc8ZW4hS09xb1FGaC5iUmlnOHk5Sn4qTUQ4ZX4rVnEqZXgsbTUoKEovPmtZJUlde2NYRVlxe28/PDhtZ34mWndDa0NbVigvJjN4VilRV1ZFTlZ6PkdVSGljTD0xL2EmWHpGSlFROzYyTmZjZylLNytQMHUzR2hYPlEkSyMsYVY0JC9IR3Us''@;'; put 'put ''OyYqRWI2bnJWYnE8NH1YV2F8P2ZAQFEhJTx6WkksNkMwSGJaRGtsS3pwT2RoQlVtRlIpSEM9SGsrOkNMJjdXKCo/WGdkMHM4aDc5VVVWKFgzYXtNPFNEJjtgTGhyM0hWIjxnSF5kO3Zwd2JHViM8cWBsfkdraHx6IyRHPm1KQ2NGM2l9bnFJQG9HXW5FJk80e0N4LzZjUVBjSVchdmFKfGw8PF0k''@;'; put 'put ''XnFIdjxmL1c5Xm0ofCplUCJoa11IKXlsPGUhWl1DZjdUOUNpbnBNRFV7U1VRMFVjJU43ZSlOe1A+Rmh7PjcmYmswOGBucChRKj0zfjRoVm0jTiZXNXpCMFhmYUs0fWtySXo+NHg/enJ3KT03IVF5e34xazFyUlV3SEZOK0F2a1B2U0dbI2FBMyNhd3dCWWExPlZVSEk/V142YXYqWVhAb31DbTF9''@;'; put 'put ''V344OlR8bFAxODlwZXdlejpUdWRnMWhiLGpJSV1FRUAyWD4hekFnJEJgQnRzclIjRFR3KXIuOl4vVlBAXlM0ZDhXKjYhRjohWFJKZmhAYlshRi9AVD88RSR+a314dFQvISt2JmR6PGxSXVpxYHBNaXNJRihmcWtPPT9HVHJFT0deTjB2OEdOJi9VPFo6RSleMlgzPXlFIUo2ZDhKQmk4WXE3QlAm''@;'; put 'put ''VUB8dmlASzB+WTlFKVN4WzJLYyxQJkhLfjFlUC4xfkpgZEhvSndicTAmWXkmWHJYP2wuLz1uL35RaWw1K2hLQCR0fXsobXJZJmY2Vm0qQF09b29jIjY2Yz0ibkA1M2FAamNzbn47YnlLN0opVn1VQCZ5NiJhcCRpS0kleH5XfVcpZyNjYEArXl9zaisvclBGT1E2LzVUQjE4YmJVaWlGSSJ5byN9''@;'; put 'put ''aCJ8Pl9LOClMblpRNzNyfFp2TF5nXVVnXkFYVD5TT147ZCpQfDxeNjo+RVMhL1JHIk04b1g3XSJDdWNpPTUvVWV3cXVtRnQhXj5wSEtgSkhXSj1LfmtTODF8Ykw+LFJkLmIwMUNoaltpLjVXTCJGeUV1PSZeRiljKzZTVzB+fVQ9TFMwayV9TzpOMyRQRU08MD1dOnkjMCVVckw4NU0sI1ZTV2B6''@;'; put 'put ''L3BgYE99flgzQ3lTIXdBLj9zUS4jZHYweip7MWA/ZTlzKSZpNld8aDFmbHRxMkluZENzNTF+TUs3YWtLQ3JCZCNWWD15LE8xRCpwKGUmPCVZSSMuOjx7W0Q5TmkhPFBtTl5qNytWT1hFI2ZZM2F0OUBubyl9PEYxWDt1Rj5fUVE7LiRxdSJdan16ISRMczBVT2VVK2UpVm89bkJwN3s8MSUiUTYl''@;'; put 'put ''fD0lMzVPdXw3IjwvfjZnJDl0IXl1PFR0MUl6aXJXS0RjTUs3e19ZJEJtek5zMkguJnJTVyY0UnNeJkNGO35nOUszZSlycmVOXTJuZ2Y+SW5kNkZkV0ZNIkNPN3pBMyFZKEs7fE1TfSxBaHlpeEp2Pj07bGduVXQ9OitrPkJscSlQOzRZSV05S3h4d3deM25jM2R6KHQ+Y3NfdWt8LmBMM24mNHxp''@;'; put 'put ''I1hBNHt+e007VlBSc0RbYj56P0U6dV9YWjZIXkdjQ1VwRmszMHpsezI0WWpjITMqJWw2bnN3JER8d2JMKDwhc3BtRDc+akE5ckh8M2F0O1BuMi9vbWM7QDk3RHh+eypiI2p7NGImXTdIOFUwVV9pWjVCb3UzLyJKY3lFdyRVb21nRTsyYnVwd0FwczAmaGImUXs7UEVTM3JfWjJKPFM+fDVNIjpj''@;'; put 'put ''IT8lQzJkPVFTLFUoSVp6JGAjYmRZazcyWXE4fF9oPmx4ITpmcSJjPX5xRk9YWzxbfkNUPHNOPkkyenZ0SG5zImZwVTo5ai5aVHxKeGo8NXBeOHhKZGUqYEx1UyJNMDdEL0VCIWJRUFhsO0hab2RTeDo/XiNoNWxAKUspRmIzWXkvQ018Y1czMGtYQDdhJTYsPFVNZ3hqQ1dJfSVpUCNNLFguXTE4''@;'; put 'put ''QXhNOGdCSyhFaVh3T3IyT0NpQERKaENmJV5rdXA4O2FpS1hOfHlnW14uaSg5TU58enFpI2lEKkBOL0xmUmteTFAyNGh3KWEufl5YeWMwazZRYlBUKyNaYiRAaSZvajJTc2hqQ0FpNCtrWDJdc3lhUzB9V3QwOyM7KTRFciQzV2padCRLVDkxSD8+N0pzem5UbmJLMjhIK3Q7TlV9azt6TjMiYW4p''@;'; put 'put ''XXlOcTJpaWhKWkAyKUpWYVRYRGJ4Rit4VVlrVExVXiRBViomcG54fXo9VWI5fHxbOn0lbnwibSE4e2w8KXY9LFgmaF1PVk4scUBoeUVALlE+Zy9sd3ZPJD9ROWM5MzE6NEdXUkUvUzBxSG1mdGRvSF9xNXk+PV5lODdiIUhyYG86cDE/OExUPU1fU1ssfSYubFJRUnRPTl84cC42fk1yOEwxLFJb''@;'; put 'put ''YiovXn5XNVMoN1NrSzdTRyE0PXJxVy4zOyV5Sis1eHRyNml3VCN1aFl9OUpzYXhNZ1Q+Uk5CP1VsKmU7X255eyk0WSMsNlo2dkZrKC9zLzxDOyZzbnM7QGhNPjRPNy5JWGNZL1dnVDA1RV9jNXZuaGI0Q1U6O2NQPHFJPTxrXTcpViVZaHhaNHhzLHt0TXFyVTpuNFNNOilRaiNUUlJSXiRjPC9g''@;'; put 'put ''PnNAbHwhJFUkT1Z9Nl5qOjNZfUd0dCgyYS9wYmxAO054Tkwrc0s1d1cuO11DVVkuKXwmLHNoUDgvRD0iS3drPkRoOD9SMix7MW8zRXc6aT9HL2VCQ0RBVksoQGFpZGtAbTc3bjNHKFQiR2hlOyNJeE9rcDBUQERgPXpteUdsU2FlPFBbVjNWRl8vLiNCLlIzWkBWTSNkSGJ0cSIxJWkrQHJkQmJH''@;'; put 'put ''O3t6WlgmcUYvY1pjKD02OixAbz5VfEZEPD1EYV1efitvPzpmPXp8a2s2ejYrMmFCLyhXO25jODwzcjVKWjs8dkZEXjhGTTNIJC5neF14N0h5d0oiNU93ZikyYkoyaS4zcGlQa09TJmNtZDgyQVV4LyFSPjd+VStOUmdKa3BCNkxQQlVaTGA0KzUzRng1Qnd2LDpCOFZ1XndpMVBdXXtpOyZSJGAl''@;'; put 'put ''M1QiezdhN3Y4KGFsMFJXWXd2USghR3xeUDkxVGRUZ0thSTRddFQpRFA2W0tnaDUhYnAhU1dad2E5KGladHEhZXpKe1YzIVk/QHwmdlU2U3opVjM2Nk90b3xPJlY/Y18zWW9udTRhTHpxJTR0R3tHTXczdjojJS86dT14QkhUbCxvKEZGcn1jeCZ3M3liPmwjSnB4XkFQb3ojbnh0LH5MQFZncldR''@;'; put 'put ''OWhqK2M3RVtUTXVkJEVhZWB2SXFZOzI2JXN9WSFCeHQ5alFkI3A5cFVEL3UhOG0vRj1ZUzFnQ1lTLl0xNCR0Rzhde2d+bzBWMDpuWzI3LDF0VWI6ZEM5elh8Sz9STHFiNWYrZj5aaGAoe1I4MCZ7OjR1allgd3ElemooNWFTLjZGVGtgWnlvdXxoYyp2SGhFbkl4PlEhdjZJNihnS01+cnp4dnlY''@;'; put 'put ''bUg4XlkvVzFbZGpSXltZZWRyfmx+N3xHU0FQYU59OEsqZW08KyRic1NtTWNuJXU3TjxDPmJKN2IpWjZbVkdQK21wKDhlOXhvNyJ1M2gmYyZtYjVUZTROK3RkNkVHT149MnF4VG48Lzdgdy52LGxzRG5xSz9kSWM1c2h3Q2FyX3shSFEvP301OyNuKWslJjgoWkBVWCkycSkmW3pnUFBxUns8Kkg3''@;'; put 'put ''enhmNFRkIWFgYl9XWy5+bkEyZjU0QHM/fTczOWE2TE9iJDU6b1pyNE9OWCpVJD8ydCYzTTVWY35xYVRnbTlqVnVaaUs6WH5hVj5jO01CX3gxV1g4LHJtMk4mW29DUHsoMGRSd3Yxe2k0bnxSI2UycW57PDsiY1MmXX5wenVHTEg6bmBDIUU+PXw0YzJ3dy42Ujc4Ol4vZnt3UitediRKYHhtI1ZY''@;'; put 'put ''UTRnVUpUNlZ0Vm5WYWcyUitKXS9gNy9rLCpZaGglTGxHSTV6LHoyeCltdWJPT2RhTnZmTEV0fUR0fnk1RDpxcHV6ZWZvQGBMdXxWSCxsbz8qVGowIWNpIjFIMUFqSyEyTH5QUkIyLEUvP0RgYls7V3hPXzFOfkN8KC4yKmdEPyRJbyRbaHFGMF1yaSRIaVZPfio/V2BXYn47UipXensjej43XjdW''@;'; put 'put ''NFdFSzB9VWJVWWZub1pHaVlJIzR3KW1NQFM1M0JfZUZ4YGRgK2o4dlNvLlNJcDhablNGZyVCMUVlWnJjK0BkN3QwWzQ3fHFzbmxYK1l7XUEpOVBAVGBZT2N6JmVya0h0fX55UFl2aU9gYTJtTS5EXik3anh7ZmlaO05hfGtET1ZwKjJscGIrPWA4VE5HT01VKjxZZ0RHSn1Qc18yNGF2W0VJIk5H''@;'; put 'put ''KTReaihne24wVnQ0bXVGW3xQK1I7IyF0TltkNlZQZ1VhaF1aUGtnPmEsYTgjMV1ie2U2djI8VT8ubEVfVjY9Sz1nJG9uNVo6cGE/L3F4MT1CMFlVWXE5UCRDSHtDMlh4KCliNHlOKiQ2a3I0SUFoe3AmIU19WlVyVFtTfjEuOkdKKig2USlSJTs9ZkZRe05ZKVJKX1h8OXY3eWA+YldSQFpvbW9o''@;'; put 'put ''fWs1RmdtVl5VRTkoPkNCSnNnUmNdTFUlOkImX0h0KlJYUVlwPXM5U1A7WV59M2NKIlh1XjJJOmR4I3tdLk93aFd5VnZfQDw9O2N+LFhYdGxUU2tUJXJNND5WL2dQaWN6TWVyfTYubTByXW54VnkxLEZvIVtZNChNOkJeckEzbk15djlnNCIxUjQoeWUpa0goZjl9SD0+SGxFUFlUQnVAeU0+JEZL''@;'; put 'put ''Vy4ucUEvW0xvTi8jZiVUTnNIZGxdQC5qejZXU0ZRJnslVTZxYklJRSMvcldZPjRGSDksM1I2OXVOUnFnUDQvPXZFR1o1eFJ4dSRsWURER25XNExkYWN6Vm4hOFokLCo6PSVUQSFDKmxfcWhiQ3prdlsqNDRUMVcmV3xQSWxQYFNXXSl5ZTk/fipSMHxKe18oYThTZy4yX0Y2ZlgpfE1URkRLL3ha''@;'; put 'put ''NjRFXm5eZENDP0dsNUcmRTFPT2pPVz9eY2ghRCY5PGtZZikjK2BDcWFTP0RmRk9vME0vT3ZwWX1RYTg1MVg1MlVXSn5DaWBCNVt0aF5dRCpPNjgsOyZBWihUXWE9OEkyR0s+YGAsd0dYWVlFTUp6TjUxWy4uTjppNzF6PyE3dSNPRl55NUJ2bW4xZnZia009PDFGUkdCdC97OFBTPHUiaHxxUW8s''@;'; put 'put ''Lzl3LkZFaVV7T2FmOkxnRCQhR3JiRzAvcU1GbXYlSz50dHNjKiVAVEt9TWp5VTNfNkhAblM+RGJgeXp+SjhNIUJTZS5xOmg+c2hDPWxiJXJ0e3c+UElfNEF2ckxIezVOQnBPfUBhfXJsY2ZUc299OjpRKCs6WkkuaCRFXWsyZkBHQVpiT2d3KDA5NldjS0xlSjF3OylTSXBNWXZhZCI8ZyxibnRj''@;'; put 'put ''dHRJUi9WLyUuPE0je2U1Nn1zRGk4Kld0SjtZYlg3aUVSbkE/dSVyVzFKWTZLMissRVpzYSkvYT57JXMhNGYobEQ1bHh+eVRVOW07aD82XlJjVF18VDAvImo5VVY9UG4rOzI6Jj9nb25XPD1NRXxJdWhHWjQ2LGoyenVQb1Embko+Z1dKbFdDI3hZRlh4TC5DKFExQkFqUVJQZ1Eyc29RW2cleVBX''@;'; put 'put ''bF4lZkkkW0EyPHY1fGs9WmwmYkBMTUt6PyNhMHNQOC4xRDJMdFopfCMmbDNTLDtCJmo1XV8/dj1fcCMzXlZXcXt+JWFKS1ZaSUd1LHhpdDlhSU5kNnguaTF8cDUmTkZJezAhdDNpfio7LGhYMGZAWkl6YWVDN2F7IX1mfmd8KGw2VE5kS1pkXTpTIzlvRSp1ZElEQzIhY3oxYGhmXzAsUl1fcEpY''@;'; put 'put ''aVFgRUs2dzdXWFFpeFImZT53XjN+ZTxUXklkfHdEYXtbVmpJLFJecl87fmlSIVUxO1Y0WSY7KXxXX2lFX1lXVDN9UTE1SXJuIUI5cHMpfWRsQ3tlSDB6WX5GVHF4TT0mOWxgKU5xT04jSmRbPjshb25vXyJsclF+Nj5uKmJtSX5qajJ5dl5lQzt5cCwyXT80bzc5aDBnXiUvOXFfRyI/c3RWPjJI''@;'; put 'put ''KC96fERRSE95N3Ixd2lvTDUhMkpzfUQ/ZWZMUVBDRllfNjE5Sl40Yz5BLEhWN2tOcXJVQ0JSJiZLfmdPdSV2aj9SOnBWZHFTI0xKXzdtYklWI209Z0E7S3thb108d147JDEubGdSek4zMTNsK2xkJD99TX5LXzVNTlhAOW5+WXtham5+Zixga3Jrdk9rJXpmP0REb20vZGBkO0g8fXhFRz1lJXhJ''@;'; put 'put ''LntSN1EpNztZQn1ILGowWG58XUVuSGZadFo+TGZRO3JtdTEqNVZRbixLPjspTFB4VHh2S0MmdmVpckd1d2FhL2QiKFlRelt6SVBafVZvS3c4L2hdQnE4QD8wfGkobWB+dTpgOTFRdmVfd2ZsdnhjdWlqOX5MNyUvQFA+ZH0jaylyeDEqe0JmYVUxKSgkYWQlI3V6JkZkOGVhMmQqOF9QSzMyfiM1''@;'; put 'put ''S0k4VD02ZSZyMjljKkYycjB7UGB3QiorQilPd0QjY2R2WztGak4sRWh5IXAmfH06eDJdOHwoIUE4UyJDZVU5cyxxPWVCfWN3Nj9EdDdoUEJlJGdBZD0uXzApNjRaKiwlZmFmRndnYjBgbGxtRHQlVGomSXY0NDVPVUMqQn5CWExxUmlnT34hWnlwamg+Il0hdTY8NGEvJnx1P1RGVUFJQioiN0xq''@;'; put 'put ''VUA6bDlqdlVWbHpxTlhnaUVMMm98QlU0Y3Q4MU8yMjEpU2pnSC4xSndjVjhAOE5LKipTWTAuOi9FbixWMlkyU146KVcvQWE0KHZHKjg5RCQ1KHUzMVs2SDhOI0woQDpQcStwOUAqeTlxdDM4JENTaG4/RztyVTN9OT0mPHFjYl4rWjZEKXxBMzFiTFsyJURJVjZpWSlGS2wrOURuZSk+bi9DTHIh''@;'; put 'put ''azoiaG9AIkd7YGZUS1B1I09QRzFMSypJeiJvOmUwYkkpMz5qUXVVNko1MChCYGw3cnVYYkkoVGk+fC45L0dCUks4Z3h0OntlZUF9LnN5PXs0W195YVcvPm5dKXwlPXBJIU90XUI3ZD45alNyXTwuMCh8LmY9NWVfJjRsYCs2Y2VBKlF1QnFTOG8/c3IlIy9GOmRqal81JjNHXWh0JDdRYDFAT091''@;'; put 'put ''NyVea29Tdix9KjQ3VUM+Pn04PVh5VTQ+LGQ6PT5FeDBdQTJ1cCpHd2M4PTxJViUkWmRmWlBALHh4UGBEaT5gNUZWUUhjYkNpWCNiQzYpZSxfaz96ciREVkhdXTBYK3tMK2ldMV55OSl2VmJjXSl9clVNRl55bnwuRDQvfFZ+Qzh4a3FhdH05YiYsRCRLclU2Kz82YSE6RTN0MEVDYVRsZlJ0MGtJ''@;'; put 'put ''O144NFBOTGBCbmBIO3k5R0R+ISs2Z3t5NCx7SUJtYz1OMCIlS2dKUVQyOzQ4LmBZKVJpbGpRMiJsPFtXPjowMU18XT12bGU4L3wpK2suanpfT3tARDNfS2JIe3gsbXF4QTh0QkMxLCV9WSxuTDNlUzRyJCRXQ1VGPDByeVUjXT1yO2BQRkxPaDp6NVJDPSxRTztHPWYsZGJqXXVednJrKVF5REoq''@;'; put 'put ''UVdRTE4kMX48XUhHNm8+MEZzfCJXLyM5TU5GMkBUSVlgKjROXWU4WHE8ZXhGc0QqN3kzVn0+OixGaXJpeiEoTzE/UWcwRnF5Oj02OWxkU14mOEBvVkVzMWM0PDZ9fTV1c2VFTVouPD0sKnNvU0laekIifnRfTCQ7YHglOGUrRD9RTjh9SX11PkZlQjZmQmYla25AWHw8TEhaZDtQaStUOmBMRH4p''@;'; put 'put ''dkx8cH5sWzZEQkkxcyQ1ZElSVl1MUV1CWiovfHQpT09wVWozflN5OHpDV2M8eGs4MEZdfTNsV0ZkdkdYQ0FsUWojOD1LWCJAYGBiNlJZdSxlVEdLOFZJNVl9PkwzO1lVMWZAeCosVzg2eTw4Z1IlKCRyU3BlWzFmT18mTUBKISFZUSEmeU5TZG9yajU+YmkzOl1DNkN+byN3WDFvYj5DP0p4RCE1''@;'; put 'put ''dUMmVTkoNndZQEdaTSwhd1IwLHs7Yzhje0JEKy4wYHlUVXM3diJGLG94RUUxSjc8JGpyPDFsfm5tU0tFT2xuN2kjIXZbQ1ZFK3heKTJQdiUsLzJER3lRVSlwLEx3M1VCUEl7MkVzfDhINGteaEdDU002ZDVKaiR8fDxIUnx8QDI+cF4vPUd1MC5SYjVya20ucDVhNCpUU3FxQVRLWGksWWh+eylE''@;'; put 'put ''NHEoZTA6bWhjNlgsQXtLUltSL2BNP31uSHlIWkY1JDAzMTBkKFEpOjwsaU5BYSNpO14pRSY5I21mfnddI10sOChAZSlZd09wfDFKaj9YfW47X1lZYXFVWUA1JDohTCp5MzklVV4rLnteUX5iUmIxUnJxZipxTmxPZEtvP2xnUmYoNyNyZVZJZVB9OFs/YiE7ZSF3dUM2VGAlTyhKTjdENldaelN5''@;'; put 'put ''RTt6Kz5wLGRmYX0xZS8yUiE0aUdkcE9ocEU6Kz15OyQvKzJxd2p2S0dfbUsyMF9rIlEmMUlhVmZDe2NidTYhJSRxRHsjXm81PU87X1g8Z3c/P095LGhZdjpQJEEpPUF6XnprVXcrOGRZZyI3MytkKkJyQF0jNTlFJjxJfTA1eHs/JENEUCJuZVpzIyt4bDlfeVlFMl9zWHt6L31IfXV1IVB0LlNW''@;'; put 'put ''IzRFWkY9enArOWZONyMzTiwyeSxPPERffXU6UGo3PmBZeDQ7WCJZSDlhfjRrV0YrP2JZTyVhck8vSTt4TnloPWJTNEtAVW1uc3FeeSxJKnc6ayZCNW5TTE1iS3YvPTtFRk8+WHxGbkAqYy4vbkBZRHIqeXZIfCFPeGZaWEwuNDgqYXFdXXMpNFdIMGg/JDM6fUF+fVRoOFNMOkdMcitRdlApJVt6''@;'; put 'put ''Nz03JWhxUz5qSDZ1QFBMciEhWkQzelY4eUx7NH5Ra2RAUkxBejZXNn0hd2RgQzFrNTRYKy51eHx+KlJiXjFVNyJfRTV9U3Q2dTRteD5HLHJOOlZhNnpIPlI4WHtNS2phODx8O0V7SiohKGEydTxSYX5danQuVyhBI0t+OmNSMUQoOX1UZnBgOnhdNF9RdUd8QHpzY3crNXsqNGk8UDVlOkhAJUs4''@;'; put 'put ''Y298Lz9hZ1h7M1d3NmglaWIxISt3JX1HejVuKEVKPENRMVJtYlBhZCJHLGYlI2N8OHJbUFl1fER4Uy84YDkjKnRMWH5oV1NTW1heeF8zNlNzQElDKz0lbGp8MzklUWE6M1QkN2tWMy8xaE1qT3AyeVpBPTslVHs9Izcie0ZHOShlbGdiUzhpRk1aKE8mQ2pqdithI3ZbbWBVXT9DWGBkZkVRan5K''@;'; put 'put ''TH18X2MhJSNQLElJNiVpUFhtSTJpdzQsdnZKLk06TX0zOzdlUWFmYkE+KjxtYWhgW1smREBKKjo4KU12bE8vbzQoYSFJKD09YlhuTCxZSn0raGBePCouIX5EaTg6T0okQ0REYkhkeEtdWDhLU0AkMCVeTH1MOUFDWlNRP1hoeV12Q2xwfi86NCZ6KCpYJXElMzxgVVN9RVowYixJZ0ZKaG5UVVd7''@;'; put 'put ''UW5CXXM9NUsjdHJ3RVlUU29UNlUzb1EjUGdGaC92fjBteV1XPkguNlVdK3p3Y2smfHZndSlNNE92IzhxWVtxcE43cDJ9d1JvP2ZgIW4qUWNEMHBXd1U2aURQYiFxQj9sKnwpP1ZdJHd5MlAvRkBxeWhuWzRgVmNsb1F5YDRjbDt4JGp6Ri9WMCxxIUVvP3Qja1s6RDgvIU4xO1hpWFlGXSRqbl40''@;'; put 'put ''RS9QXnVJWWQ8aSssc3Rmdn02U095Z2Zid24kcW9wYUV7eC58Sn0lYVljbUhLRHtES2w6VG5Yck5bI3lIWksyQDZeblMwZUY7aV0qS31HZ0hqWyZAZSlPMDtibnVkflNQcUBRUTJde1l6ckg/YWFJTUJkZ0NXI1Qje1tVWT5RKGtDKXsqTGUwanM6UX5abkp0VFskTDNxJDBBdzBjVWEiUFpZZUhe''@;'; put 'put ''bTUjMGFiIjBnKDo7KF0qKEc+T18qK0VzcnZdbzxUeUcyQ2laU3Z+YWk7blg6MHVdc2tgOWhrbmN1U1hoO1BuQTR2VSYmbmA4UjloYDFIRmBNQGwxVHcrc2xTYG08UCRoXUFvI3krYDZsWWxVQ1g/MlE3YFZgV0grPjg6SUpWb0ZddEJxTkdMYD5jRHFfJEpTQXx+cnRzYlJnQVB4Vz4kYTFJMCUo''@;'; put 'put ''PjVvU0pZcGVUSUFtR25pU2hKdy5yfXI2STdEczJlPzdNMDxKcU12ODgpOHlsayluWmZMbXN1WyU1JV5HT195en1zT31sNyNScy5wKEBbe3BjMXcvTkpdRG1KKlNoUjBAeTBEMihbcU1YcCt0OUVTbjk3P0JxJWwpNGFTcThEPXN+UGgzNyNqdGVDTlRQXT5CciVpKjRhUyZRLCRmI1VaNT01TGVC''@;'; put 'put ''R2RsTHwwMl5kTjU8ZEgjfSklNnJ8JF1wPlE3TEdmbC9sODF6ZHQvSjBNZ3spOTYjcitwMXJdWGYqMkU3VSVOLFVuS2xTQUNWQVNqWDp2fEpoKGQ3N2FdYDxTOFc9Tk1JN25aS3BCflJPaylPNEQsIWt5RjptVVkvODBIeXJgOiMkanw+ZWNUNkYhM3wlejgpNjlJb3tMIVh2NXNCMj52b10hOyNy''@;'; put 'put ''clBAUkBRcSV+MmcjWks3X1YkKSpbI2xnfnU4Rm1IWDZhVVFAQlU2OV88Jkp6fVQ8WkZ4e0w6azksdnV2ZnxNXldRLzFncE8jckxxL0FLOG9dI0U5MStTKjVGNGJ7XitObU5ydE9qM3VnRTlCYTV5aHIhOGpWbnxRZU9fUENjbWYvbDtMSEI+ZXxfJkt2UnVWJkVFMyZiZVluM0xCYlArMWgxfSs6''@;'; put 'put ''fD83LjpsXVN6YDFRUmIzMyt+TEljTzRsTi49JF5yVVJMNHNbbHVZTW96SDImU2J7JXkoMjBOWXpEIXYrUT9IY3ZjIi9RMnBvMkFsK0JsKGdwdWEwYl4zbDEhcC9uUXEvXmsyVkJsSH4jIUVRZUh6emhWMT9wfWZXb2QwYT1rKHUwSl5UdE02V1cleEw4KiYzNWorcUFHN0IzdSs7dW9Yc2hSdXFN''@;'; put 'put ''JmMyZUAqTE52V0kwPjpAWnpsbkpxclhtbGlQOnw1PiFmYSlIIzB6bV8rdTFgbzh2ciMlem1IcVtabHo/TjUwJVV1OEghZUEoVWFbTSZnM0YrTUwxT2NscDVjLGxZNUNpMk9DJkRzTVM3Z0ZFaFFBLDUhUEBkZE9yPEc6OEg2ako9QihqQTk2I2cmVjVDfnpOUGR7bHwsXXdlflJiVndlZC5ffWhV''@;'; put 'put ''S18kRFldcFErVH1hPmU1UCw7V2xTQ2tTdEBoNWo2bilLOV5xUXoxe15CSn1qUW56KWRxfXVAdVZpWjtAREk+IVJ4YTBXIXBsNSsya2VpazJkW0xkJTlZUT9ka1MjZ3dVIjw1RCNtaT10fntMejFAK2t4LkpUcEN5THo8LkVSOiFFVF9ARHxkIV9BSExZPi8oMVdTI0ZtUmFSX2FpSCVZYyN+Rzw8''@;'; put 'put ''fGh8aE1EMCMlJmBRQ2x+T0t1K3FuXmokbWg1cUBdfUkyRyUjTntQeChyT0c+MGMve0IiM1BGQm0rNHIiUyM0Z1pLTyZ8WCFTSFkzJndRLERpO1c6VmFeRjMmYzYjJFVxZD8iJmZqNnp+cDtQal5kaFgyfCV0VUc8TTJ9TVg4PV54ayp7PFpTcV5TbjFnbiNtO2VyZmcuSS5zMT1gPVArbGQ9My8/''@;'; put 'put ''PHZSSXpJSHgmWm99dV5XQHA7WyN2XThyMn1EPTJdYn55fHg2Vm9oc2o4Z0BFaX5BX2lyQ1NFWHM1XUQ7RkE2Z1EkUVs3Z181aGY8ZjFmYEVuYm50dG05Z18/NWlWOSVffkxwV1cwYHhOSF5APF9wNGpjMWkqMEwlaHguPHJ+KEtbdTByZyxvcmM5SlQlfUhUfmhUZ0MlPUJPLEUvOnZXT1g3cVFk''@;'; put 'put ''NVllKH43PGJvNHZhKG5ncksvI0duKS5BN0cwdypqUXtrMEIkc0xRdkI/by5McE5PIzFNXlA6Q0VlOXxkUE4yRTIlMz03Rn03V2JMJE8xVzpZZ3F3IVZkY3RoOGhNbGpqZk4wUFZEMngpRTxjel00MUlbcVFSZXZ0OFsjaSJ1eUVQMkNvNXZ2YGtjS0BkQUluKUdFQyMyMUY7bVJHeWNAMnVQQnV1''@;'; put 'put ''VkhiSXV1WUpVVVMyWDUyOEtCLjcqSlRpJHNuImwoeX5vdj5uUVZSMGtlSSlydjZUZSt1KmFhaU49bm1Xcng1XT45MjhYckVCM2NPZmJZVVIxUkReWEJ+XTkvdiorI2VBIzdpRm5MeHNDSFlXelE8SytmQjFPSXRuMyY4QyRiNngiKnp1ST9KZCR8PFomPUxBd2R7KDFSVHR1VDVEM3oocDdbMjRT''@;'; put 'put ''OyYjSVEsZHckJUxlemIsS35GQXU7UVhFfTxOPEo8PVs0R2VldXE7QTAqVjE7OkFSUGZ3b2lWS2UrImZfJDhdSTlrWnRNYFJKQHtiSUs3JHtBcX5JXyFrdnR6UXBiWj9bfUM+TmhyZD8rPmQpfjFFU2tnME5gQHdGejFhTylua1NgV2szLFF0XV9NaHp9IWtsUSR2OGBrcXdMKXJfZilCW100W2xt''@;'; put 'put ''MVhoWmNaOCVwZEA2TXpEbWp2cigyUGF9SXg+Ny9ZTnZsSSJ+OzQwPkozISVRV0B3VVVTPEwiOF44dTBRPlEhY0ZuM1NVODF7aVtdIVs/Kzc1THY2I0JbXXd4ai9mYTZEVn1HUz08flIwKSJZYTlrTShsI2shfklfYDBiQD01Llp9PjpjV2YybU1BXismZX1DQCghQVpzekVDY2pUXTIiUW8rZnYo''@;'; put 'put ''RSVme3A1O0xjfHdKOH5ITUw+Y2I5PUI5P1MyVWdOQW0vI0JxVjIlbUhkYEhBbSFRa0dSYHJIWjUxRyhGUFghRU9OQD4+TkQjaHI5L3NBcU19VDltT3Bje3J1eV9LPWhMdSVGYSgjRjk+WHlYL1YxZGYoSlZwQzd1NmpLdSVETDdefChDe1pxZ04mNVtrVjthW1FKYWo2Sj1yWFR6SHZmemUyOnRq''@;'; put 'put ''Xm1jUF1xNyYrXU5xJGQ6O0IkVzJhYXQ/Yk1YNmUpdysrTVk7NEYhS3RMO0JKVjlQWjJ0PDx8R0ZxJElwMXRDcj9yZHByMVpBSGttRjQqJStPMzIsI2IhbEo8PSpSNGdofmlbeGw6aktdJiFeLEJEZylPMW9lZDFRYV92MnlPU18lMXJ6SGdQMFNjLzt2fThLR29gQmtCRCYiRFN7YFtJcyRUL11d''@;'; put 'put ''UUtUPCZKUGpYb1RiZiwmfTZeejksXnRxZSpdZmJwJUciZ1t3clMqMUlreWteTnM4e3RrUndQb31VWnxeRGV2VDBKPk8mRUA7Uy8yYGA7TiIlU3YzYS5oKENTKWMqdUU4YVJefjddfjMrMChqYlY4dmloVT1pNjgmNFtufWJTVncqYmAmXmd4RGAmSF0yNSZMW11sLjtANDtiO01+NE8/KlRWN1h7''@;'; put 'put ''NXpGWCF4elFGbTsiQ3ZnaH4jPlheRGdsSng5YlB2e0BNQjs5VSM2I1Z5W2x4ZltNe3M+cUxqTUZNSCRpNXddVEtwbGR+IippNGI4T3toTTxIWnFeV1g2Lj1uUjt3MjF4RnpWazZXbEZCRk5hZytTZk9QQFh2JWY/dEl9TUk/Y0FdY09oLklzUSokVllvI1I9MEJsKmJoMkhmNl82N3MlfUxmLyEz''@;'; put 'put ''ZV8lJSl2I0NJIjNKYnZiXl9ndSMsMmVpM3VLRkgka2chVkBbZXdUaGQpZ0s6Xyg4V3gxZmhxcVVNLmluYWFhXUZ9VDluRj9fJV5HWVR7TyJidX5xcElldWc+cGVnWEBPM2szbk95QWd4Y0ElPUUhcXssbU8wMj1sOE80ZkEqfHYuayIhYFlhYDZ3cVIlVTFQQl1vTEZpezhYYyg2M1E2VG9ScFo0''@;'; put 'put ''bl5IKXMrK3xjTCxRIzNXNCR2OFg+akciM3g2czs5YzlaPSxFZV8oKm9xYDFsQXhaNTdDNiM5On1JNlQ4KVl9W3xPVE10ZG9LUmlYflJaNHpYP1pYe2V0dExTTyR1NVAzQ29DL3hLQzVFRE1YIUVyXUlDa0A+MlhLcFdGekhzMm0yajROJlBEYDJSW24jU217PyYoZjBnLnVwVUpRNywjIz5laGg0''@;'; put 'put ''d3QvP35SKXYzZUMoJnF+OyRabVdBaylpPngoWyUyKDdZMmlORzdnUzYrP3drRTN0KFhlSDtnRzcjM2w2czVXdUozK09bYmQsKWx7SjVaNnRxI3U0SEheV3d3fVRJQl47bVo6XT4sdk8vLC5AWDJiKnBkNEk8ckBieDkxW2dCfDNpUT1iPGwkVW9FREkqakdwZXdZfDlbKC5nMH1HOX5sbzJCI2d7''@;'; put 'put ''YT5EKl1NLz5+QXwhRExiN2wzXzVqMyRCQEtKVlNxa354Pjt6bzxWUGx9VytaXyxAaFJyODZObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBT''@;'; put 'put ''YjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpPXTE2MDZiOk5sMFNiMmIlOWEmQkIvLzpzaH4mT2IxNmI6Tmww''@;'; put 'put ''U2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmxCN2I6Tmw2QH57dDApKmQyTmIxNkd5V2w8OiIzRjp3W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIz''@;'; put 'put ''fVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtB''@;'; put 'put ''LyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzMjcyN31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfDtyaj4iM31We3JHeUxXe3JjfjJ9UXxmXzk+''@;'; put 'put ''ZSg3c2N+Mn1RfGZfOT5lKDc3RiFbXkBeL25LTmV8WjYxLHQya34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34y''@;'; put 'put ''fVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoUWRFKyhoPDp0PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+Mn1RfGZfOT5lKDdzY34yfVF8Zl85PmUoN3NjfjJ9UXxmXzk+ZSg3c2N+''@;'; put 'put ''Mn1RfGZfOT5lKDdzY34yfVF8SGMuan5+Mn1RfHJvL35RfFEvRF1tQjxDOUZmTCFXaHQmIiYiJiImIiYiJiJpNkZzMDBveXRUemFnZiwocDA9IiNLYCImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJxdCYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImInF0JiImIiYiJiImIiYiJiIm''@;'; put 'put ''IiYiJiImIiYiJiImIiYicXQmIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiImIiYiJiJhZEUrXmg8OnNofSU3SH5uPjkoJn47aGhCbSM5cGxMWmElR05LW3VvMkM5RCM3OjEsVStlR3k8KEtpTl5xaVZVYkJzKlk8RUhdQFJGOXQleTdIZHJaRjl0''@;'; put 'put ''THpweXJfJiJyX3lLPEVZMV1WNkM9KFZxWkY5dHJfeUtkQmA+S1Y2Qz0oVnFaRlVvKzU4QyJnfEtgcEkjZEJgPld4YD5LVjZDPSg+dj07KXIvMSxVWS41XzdDVnw3I2t1YUo+ODBWNU5We2ZII0NYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlTOkNXYWFVWioyYTY5UEg/VixMdSNLWEV1SUJSQ2lF''@;'; put 'put ''KUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlJDaUUpR3VMQ1hFdUlCUkNpRSlHdUxDWEV1SUJSQ2lFKUd1TENYRXVJQlI6S0NqZDpfe3ZocXI+OSgmfjtoaEJtIzlwbExa''@;'; put 'put ''YSVHTktbdW9sRl9PIzdydkd5UilnUjF7R3VVVSRDcSpZPCsscW9sRl9DQ2p6X0IxJkNMS2h1VVh3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNGswVXtYZShWQT5VUWtqMFgwNzZHUy43NCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2Nb''@;'; put 'put ''dEZIczQqQkxPe1d3RFdjW3RGSHM0KkJMT3tXd0RXY1t0RkhzNCpCTE97V3dEV2NbdEZIczQqQkxPe1d3RFdjU2FMS3AyYiVQfTc9LHM8XikoX3tFaXFyMmR8VVMuek8oU0YyLFUyNjZTTTc6MSxVbDlLS140b3V2IXlEPixqS2xmR3lwY1cpWTxhKlk8K0IsNnV5N2RSNWxIYzdnWTtPMmMldzdk''@;'; put 'put ''UjVsSGM3Z1k7T0RsQkxPNjQ1aWJOZDxIJDpWLGk1alY8TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPMmMldzdkUjVsSGM3Z1k7TzJjJXc3ZFI1bEhjN2dZO08yYyV3N2RSNWxIYzdnWTtPdG8qbFBbNF16b01+YSV+IjxeSilfe1I3XnBpMk1kcmxJUzF7UGJlbDJjNFIxey5nVlVU''@;'; put 'put ''Wj9DQ2pTSCMxYXI6IUtLNDVxdXYhM3d2IT1PUmJnR2JSPEJiNntNck8rWkxhe2N4elcwWzVGTnJPK1pMYXtjeHooZDw6QlNqUEQ0dUtGT04rMWh5Mlg/cDBZKTJLWm03dUNwa3g4PSNqQiYoPzE/VWFNIX0wYVF8Oi5je2N4elcwWzVGTnJPK1pMYXtjeHpXMFs1Rk5yTytaTGF7Y3h6KGQiQHY7''@;'; put 'put ''Yy5VO01bV316b19CYiVoQzg9KDQ3PXFsd2FAN2guWTwjU3M3K1pyK1k8U3BgQG9Rc0xHeU9kJmlOXlYscW9WMTtGJUViNnF1diFrbGtsa2xCKzBqWTBDZHg/YTZRMGgmOTEuJVs1Nz1xeXJ7X11HTmpOYTxZOHJyWUVFaFAlQ0dOazEjMU1lfDVxMXswamk/MCtSVUs4RX1kJkduM15MTjNNR1JQ''@;'; put 'put ''K0dnRXpWaXkyV2lhYVYrVndbTyNHUShIVFEoclQrJmp6fSQ9RThaNiE8SHRyNiEwP1VhNl9WLFZ3SH0sM306Yno5fUFjMGpNbS88aGh7bCM5flM9ZXUyX2xZLiRIUy5rN15wczRuQnpbLDxDN0ZOczdsVENqWzpmdkd5dWQlaU5eJkRdQEdXd1BFKyo3aFIxe1lEcG9FNHlvOHJENzc9cXl+Oj9t''@;'; put 'put ''VlNxPiYmPFlvaDlAUFU2Xyl3NXUsQHgqQGRfJkNAeXwpWz9iTzdbWD9vcV1vJEdkOEglZjcuQzJJX3ttVC4hYXwsRjFXcFI/XVh4aUxwWmQ8OzBkfEpDYHl8OERQb3FXbkIiWSt9cDZdKURLNEZmVnZ8Tm00ZTc7OSY0VWZjd2g/ZXp+ZDw9eHh+Vk96Z0NqZjxuZmFgeFAjWWQ6SSpafixyR3k6''@;'; put 'put ''dmJqK31YQDVhKys+fjg4V3lSVDNGNHEzP0N5L0M3dXowJTl5b3d4KHlaUGY2M3EsZnkkQThqT30/VHs6Ok1kMj1VKzZfYmdHbCJkIntiVl5PVUxVYDc3YTgsPVtiOGFPO3wwMCQpRyMpS0cxX3EpejF8YnhEMFReO2ZiSWtIQHoyTCguUykoIk1OOT0jS1JedWJxI0VLMS8zTyZWJDdIQ01JPiZZ''@;'; put 'put ''UE5OOVo7MVEiRjBlJV5he0g4VmA6UT04dDkoKks0TyY/eT1nRW45NH4wYThoVnk5PFdvaXg3ZVIxe3N2R3lbKWdSMXtIdVVVdkZxKlk8Oixxb0RMblp4NzlFTEs8OW4qWTx5SCwsT35GZkd5XmUoaU5eMUddQDBzYVJOfng3MjZWak5eSm9gQDpLXVdLS2h1QHd2IWtaIzFhciJDcG9eYkxLeCFk''@;'; put 'put ''Klk8O1NgQFN5PExDamU7ITEsVXx0VVVGalt3diFPUEdmN0djMURLbWYpQV9GSitnZXMpSHZFamB3diFsYXgxLFV4IytAezlhZmcsY3lHakVeYmFMS1cjIVNnP205S0tXI291diF7RFFoWk1TO351YEA7MyRQRSsvUExpTl5gPHpkN05RRFA8PiNoODEpOjg9Z1VQTGdzKWBIeSMuTV8ueDt9bzFJ''@;'; put 'put ''bjlGbDZsa01NYFpwbDheLn47aHZMYHR0XWx+Vy9QfklGPD4jI2Y1bEZmeSNxe3BrTV5dMS4lSVlWVUtFVUhDalt5ZVIwcC9JV1VLRThIQ2pbeUtpTl4odGBAb1FmZkd5d1h8WChZKkxXKVk8JjUrZkBGIWpQK0d2VVV2RksxRVcpZyVtaisxaDApWjsxaEAvaE1AL1s4ZHA8LH5XUmouUXxJTjw7''@;'; put 'put ''IW9ZSE5UOkZmPSE7SGg/MnohXTRSeThGVTN1Z3xMISRxbVppJmRwUkQsMEB5VVkrMF5HVjxYNnNMdEpsRDJpWiJRdGxfSF1EPUArNnZYXiNhTmBkZ1NNR3taNj9TNklOPFtTKkZgSUVmZmpZUExnY2w2bGtNMjt3Z3g/bTkvXXc+eDtmajMhWW5jUEVZT1FCR0UxQnd3LEIqKmp1aW9KZyVQVm85''@;'; put 'put ''ZVFgdS4sJWUhO2Q+ZmlYJCNISV8hX0Boej9oTVkxaHYhXVRWaz5oTWFNSSFMRVQmb1lpOEBsIntwKCNIXXNkRS9+NklxOT85JitQeF9ZYnAlKyswanEybExnLkQjSmc7eCNnU0hSd3FXel11Z1B+V3FNTW93L1o7Y2pxVEkhNSsvfVM6WnpIbCtsMWlLb2BuSnc5dVU4MWlMPCxLdExSfXIxLChJ''@;'; put 'put ''JGlHN0s7SzlMYDxlPDshWUBkTS9MP1I0ISNFUzFyeFFFbEYlZTF6MyxlWFRSKUVVakN5cFpwaFFKXUZKbFt3KVl9dUpoYk1VMXkjQlQ2R2BJYTFvSWRQL1oxSCV2TV5hfURLODMjZnBgWztNKihZc3s8TC4oKTBoTUdCIzAiQ2FWJTAsUUgyOVo/ZVkmT1N6NkxkZTZObVBuKE5jUiwyWz15Pncy''@;'; put 'put ''cyl1LG9AaClsTnAiUm1PZFI8T31QUHpaYHo4UDM5cFpvaj9Jd2UpOCYhfisrRGJ7dSpfKy9dbWYlekt6KSV5OVd9S0BYYCVfdSxNWUx+LntifD9LKDl9PzFIeFMjWjJdfGxRK0FpfnlXYkwleHxfXj1ITVcoOT89Y1RnIkZlUCVaXjdASXNmJn11RCt4Si9MSShRPlB9OHE9K2EsVSpNc2YmLkJ3''@;'; put 'put ''aGhNeWZ2fV1TRFNqUCF8czthLFE9P2dGLDlIeF97SnJ3VmlpOGV8VjlCakhRSyp4KyxWUmd2Yjh9XiRMXjMqa18wcWFyYiZWMyVyTVBEK3owPT05QGcmJCtOYGohfl9UI01rIi5dYU1dXnh1ajpSRWZnJkIsTFcpbTA9WG8kTjpyYCE7VVhsZnMmclt6dXFDLD13OiFWYDVqSypTZlJ4V2Z4aHZ9''@;'; put 'put ''MXBhOyleXzxBNGxxO2Q4L1Y1cFkrbjEqVl46JFZvbGFyZ21sST5xJXUsYFhxPHdeXTxUPCxaI2k3QD1hMyoran1MU24xdGNiTSteX29mbVI2bTYwKD9halUsfCEpQGIhIiUxfU4/dipxaFtKNCpiLDkmNnF0UUU9ZF4hIVkzPGJzbCMhWE0zK0RwZlJraF1bKmp0UWtoUCtkeVMjIXhrVV42P2Ei''@;'; put 'put ''NXs9ZlZzLypHUj4/IWdVXSVPelQyPj13b0NQJnouUGVqKHEuSDl7fEAyP1dvaXg0PCIlTF4+RWVeNkA/IWl6e2w+MmNUTiM0WkVfXz05IT9rRGBrU2wuT1FOblV3PD0jU3UzWyVkZjI2bCxfZC93cVRKNWd5QyZiZU8hXnpaaUBwPVtWOzc8XiFKOXk7VCM1K2k4P21ULj9OUShGVFJ3X1kzPDZw''@;'; put 'put ''c3A4cFhzZSxvZmFuWWJFTT4zemVePSJpV145cn5ubVB3ciZ5WjllbGJuR2YheE86fFR1UXskNDg6M292WEMhanU5cFhIJT5JX1ooQH1EOHBmcz9LMV1BXWkmaFZmcSF8WWV0Nzp4SThPJi4lLDg3JFQjRG9iVF8/VC5BPmUsRj02bjpsS31zJGZ8Lm41PFJVbW9gSXJ9IntfZisyNTw4Vj9WeGVU''@;'; put 'put ''PCNaN3p5P2pPSkcxcnpaLml2OVVNa2hwWWZOMXw4KzF8VFJsa3U5O0gyajVtelFISVEoYz9gd0A9X1p5bXcqcXQ+clVWfXAweigmKmptcFZecGZAXitNSn1XPTFOP1lfOzRmNixVWjJIMUd9allxZH0+OCpNZE5sa3opOTNQJjJFfGwzZmJuIUo5OzJUMCwhPlc5aXN8JCQrcnAkTmZAMT9wKURo''@;'; put 'put ''fiVFeVshdmt8aTcsaFR1cTVtTHNfWWU8Mn1xbWNAVixnfCZlaGB6PHFrcDwrJXwjWH57d1hQY35lfUwlaGlZXmJOLmtDYG41cFBVMWJPdlkzOFMqRXFPJnA3I3VAUEkld0c1TGhlcnhaeEhmend6KzMkZ19ZI15nYk1ic3BKY34wISFOXltfdSklWT8lOGBTY245JiYqZSh4ZyRiJX1GditqRGcq''@;'; put 'put ''Sk89IiU1fDEza3EpWnYsWW5fd1I9bz5+JT8lPj1lb2suO0oyNTRwOHI3VEQ5S2xyTnUzPEluMkR8dztdd1UqMjE9eDt4eUdQZE8lPX06NUIlezF+cDl9RiM5dHJ6cksrYmJweTMmITl9aygzM3dfNV47eEQmQVF7U21wUE88PTErJThSZUFLVX51fVh+QSZXIkpzUSUhSWdwVE1ROXxmcHxlLEA/''@;'; put 'put ''YVBmMCkldCR6VHBwUE9XJV1FUFF+ZkRfdm1mbjcsamZBMU8leGdUbXZRK0JQZE9vciFXYG09R0s9K0hWNl9FYCNKcUUpeD5yNHBtJDkkI0g1JDQkbCp7Xis/ZX0jcXdQQj5xJUV4fFk4JkkwPCEhSDhIVHh9X0IwcGs8PTo0RHlJMUMlMDlrYEdmfHtdJTlHdilJMV8qQ3FDUThALEB7XmcmUzxw''@;'; put 'put ''Nzd6OSRkTkJRbmZLOGQkPilGbDdhT2FgXmFfND5iMVc5cHN8SWFfRXpDUHVZflBoITl9ZU47bChRY0BIMS4ldiQ+SCE5UForUW81ZXxAbl5nRFlhUXghNCxkYmdtUmVSbktrUXpEVFAkV3NyQDowIixOKE9yLyZJMElRemFoYHJmamBPPEE+Yn42PGR8LkBFL2QsVzlGfUxKO2p3XjA1eW0sJVht''@;'; put 'put ''NFBKRyglSF9CbEhfO256KUs+NzN5MDE7WjlPZ0BwUGAsZDM2YyRPZTUkbVpFZ1J7dXMicjU/YFlXcjU/YmFbK1E0MTZ7R2txN3IjczU/cyw8eihxQWBIUUJueWUyYkM+dSFBJTRxNUp8WVosNStlc3E5OmpZWlg9PEUiLF1pZXxUSi5kJjhQOyt7fjlmKio7M1RCdkhANEpoQGBZNztePVlAKnIp''@;'; put 'put ''PTFUcnBYJm4hcX1RYHV5QmhHYlJDVyoxeWZ+T2VLazYsTzA0TmokbX4oP2VqUEBlfWd8NUt4eSZ4JngmeDRVOXw0KSFxS35CUXF9M3lNenZHZCs2X1NMLnJeb2k/QCs8L31mWXFlXmRvOzh+X3MlS3o8LzxEfCRdSUZleVlgXUMubWBzJXcsVCg+enNmIVN9cEprYlpIUTtsT1pJOWRxa3pfW01l''@;'; put 'put ''TCU3bG17cyVueVtScHZ8bzFdX2MoKUhNczk1M2wqIl8xP3xvSEk4NWpJR34mMGUxcmBeNUl8dytwa0RWfmckaSVSNztOJG0xJW19M1U8RCVZViZyM2Y0TWZobVdYJVV9MUh5OVRyVHlgJnosalRdJU16KHFyPEBeekkvPEgmO0tHKGR9cio6enFmJDA/XWUxS2hteE8oQF9eL2gxS2gjWl9ZXltz''@;'; put 'put ''bWssKzh5O1Q/c04iUGQmOHFJX1pQX1IsMkxeMT9zTmdOOV5kPikrWyFQZ3RMUGcsOUhRP193LHVTe2ZCI18rNThfKzd7Pj0xcV07UkUuVmJnaDxOZTJZO31NIWEmLGFCeHBKSG4jczdtOEBAUkZPNy95QEB0Y095ZmNQLGV5ZmNQTCpZLCw4QUkvbiVtNFAyWV0kTShFSndtVUllZzxJYSQkUlkl''@;'; put 'put ''Vml5bXteNl5QJXlmTmtPZ3oyRiQoKkYyRElwZiVSWSV9P2FeMHIzNkBIJlU2IXB7JClhXiNhay5QKFRQM2NLOGsueTJyNkEyNE0xR2JNWVY7bCVRUFo/PXF5JSVsJCZlVlpWYmVzeClPel4uQEswPzhQWCUwbEBde0l9aCg/T2skTkhxO2xjQFBtYSxKb0VnQSZVTVBafD1aKTkhckcwZTgrTSEr''@;'; put 'put ''KThaW3ApP35Va0dhTk9aVkRPdjEpRUZlajEsZUtwQD1mOFJiNlJ5VW9mITwxTmREeVVvbntwTjQ9OFIuajNNemcsVkArTzE4Ui5qVGciTkckKm0oejZYNHE8Tyh6O1U/WnxkYnkhYSYhIjk7SWB1V1ZiYHhnTHRNJSYpSSxQPTZlVysxKy9NZFBTZSJOJnI5UFB8SiRFNDVKQmFQP0AxQTBxZmlQ''@;'; put 'put ''PEA3Lnk8d1Y/ZVkmQF9kKVtWfiR4OHs6LDNdIVIwOUBGZk0yL3taUSZkTCUpfU4xXj0zYTZxYS5rOEJoNXxJVHdKV3pQXy87bWFyel82aWBre21gbz5aPHU5eChFWW4sdkIvR1BkQSZvQl0lLHN6c1BxNE5aTUhJQnFIOklQS1ROJjgmUmUmPEEmeGZuLEdRX2Rib2FqMWlBJUwyNHl0JF0vdmFL''@;'; put 'put ''Wyw1YG5oZWQrNWY5cU5vbDZMZENwN1BGSVJ5XWE+N1kkWFoidVE/ODh3UmU4QCswK1kjMCtMaytlbVF3ZT5pWWdBJm88QW5DYCF9KDFdITolZCZlaCtKczN2LENfWD1aUEomaWIhc0EmbnksOyYreSl8LnUkV2BPZ0pfO3giSCZyXypSXzYwKSUqMlcmQGNEJlUlQnwmL1kka1lhbiNKMD8mUSs/''@;'; put 'put ''QHg6IXdQQj5OLC9eS3FbSzxSNixCfHohWkBONmxSWXM1fG8sfiV2KSNRS3ZhLDJoXXAxVkk8TGZ+NCElPkh0USM6ZCxwMHpZbFRjN2IsYz9mb0YxRD5JOWROVm5ARXBha316aEY9YiwrPV9aNztSbCJATShhP11aaFQvKEJ8UCYhSWBdMD5sNyl1O14iVEJJTUdlZzV8WDEuPlgxKiU7QCMyYUsi''@;'; put 'put ''UEJXNG1NeDA+NjV7I2tZO2tsITJ7MUE0WiY4RT9UbTNfTEp9cE1eaF4sYUdTU0V7O0hfRXg6fn1TNG1KJGVqYCs3UDMqbmhAX3B5b2YxbXV4Zm5FP0lgZHFWbSVtOCtGMTJqWCZaUnc7aDAsPU5ZNzs3cVJteTlVKjArWnd1OUV8RW1mSHtaNzs2XyRPZH1+e2E/RD0lfmVzZXhkJGx5WjF8czI5''@;'; put 'put ''XiYzaEs5OmowflBobVlIaDMpOSpBTXQpbH43RzBpPmVfNjYqbUhwcUc6R182d1FeUUJmLHUqUSVsNzx3TyY5e1pQNE5JUDxyQ0ApP14rYixeK1lhbWo6emI5YGM0N3EyQF9vRykvUE5gaW5QTCkhQFNrd2ZkVDdUI2VvTntJaSw5QDY4V3lUbVI2e1VJS3ZZST5bMGZtMW9kbzshNyFBSSs1RDlj''@;'; put 'put ''QFtlPzF2WjRPZ2poLHI3e2FoLDc7XzEuX3JOd3hjaEA7JTBaaTI5blBhLDd1WT1vI2FEYVAhako1bVApTi45TF5HUTpyTzFLaC9AZXxqUHN4YVBnUlNGQXxrWSNLeEQ6WF1jazE1RDpbTkA6QEBeYUAkcERxd15ZVGUzd2FDXiw8cDg8eGBpZks8IUxGaztKOC5YJDRzK2xdeyhFYERkNzckKTpq''@;'; put 'put ''ZnJURntZZTxFeSppPiV1LDlsQyZWYGRLSj54VDdqJiglSHJNNXVBMUgrLiNFP11aZWZUe1EmNDhmLjNOKmEje052Rld5YG86aTYlT2IwTCk5JSk/eCQ5XVM4cEsjcDFoal57S2hNI3twN2NvTmtvIUM5cEgyL3M5LmtiXyRwYlhVeVZ9SCV7azVxbTdJKGlsKUpjSD1VNyxgM0MyOnp1ejBxZTt0''@;'; put 'put ''VHwlRnpGSEJkQTphbyR7cHcoeXIjOnpMcDAlb05iWCViWSY2aF9mWSZYQyFqKDI4dWtLMGBKKmhaT1hUeVg2c3ciJWZNKGVPJn17T3tdXjs2aClCYjFaNW1rUDMlUi5bL3Jad1J2KS87PTFJNCR1KnVuMy9bQCt2MEY9MTBNeixeQCt2MEVgYWpQKyM9elo5JShNal47ZE9RaX0ydW1LdytOIUNj''@;'; put 'put ''PnYlNTpwdiMjMkRWKzxBLiRTN15lc2FqemBVMEFFLyshYXU6PTNMSjAsXmY/ZSpNN0w0dmE+PXlHQFFEbVptKV4lSCRaOTs8SCtTZ15lLGwkPHoxS1t0JEAvOWo2Uld6YHo8aVNiaVo1bS85dXE8VlJEPVUrSX5HbF4jclQ1eFBlOyxTT15VPGxMUUQ+JWdgNjx9NWBiJnYkTSYrd1I8eXIjSldv''@;'; put 'put ''SlB3JTUiNXIsaF14WklKejw5JS5kLDBqJFlgJTUhTFZJWlc/bSxxbnpzJnZnPHIlYj9lNUBVMX0kVmA2ODBqUHNMVz82OGwvOTFVeTw3JGEycEtOOUhQZ3A+cislSE1QbVIwWiRKPU9nMEBZZkM3ZFlyWWZOVlBLUGRZaV5wPEFwcEBYYXltSWRUekkkP1Y1dzNkbGZUeFtSeVZgZ29xZH0pZ29x''@;'; put 'put ''UVBOKyhWIU5KNWRZeG0uclJXPzZDL0AhL2o2Umtwezg3ej9hNHFqc10uRF0lTDUrdFlqM1E7czpdVWlUe1ArPXs2VXIoVn1QTis/JjAwO2R6WTcsQWBWejpwZHc7ZGgsTHokOWYxQzojWjplT2ZxPnVIWE1hLE06KjtwaHxrfUdVXi8lKXgrOE05TklbIV49MUlfIV4/e3dNbzl9aDc0aiNZN0ow''@;'; put 'put ''bDJjVWVzYWtIfT9TOGRZXyVWZjRHXk5DWyRdTjspI1kwXVZBPmhsTzFuZkk5VSxnZn44WDZmcihhVWBLRXowUlc/NnNsOVFKbFVQLzp4VHlTXyV0QHAwfl58MWEuN1Z6Q2k9MDc8WTNWTiY6JTlANjVEUkE0YGJQRSxmNl5zOm1jX3x1eSFdPVVIKTp6fVo0YmQkLzt6T2IwSEBtXiFvPUtud0lK''@;'; put 'put ''eWZpaH1WUyVBSVVgMzhtXipyLnI5czNtdz0mP0RxTVV5IUlobXBqUGxrZ3dSJnFNLjVfOlkmdlpwfGtyalAxLGlUQCl2MHNmayQ4dlNWLD9waiFKJSEjSmt9UG5RRj1HemdSOz4mSHh4WH1TST5IZ2dqZCRIVEJZSCVVVmsuZXMxUVowPnJlcHd9SUA0e0NxWyFKPlk/cj4+V2FzVVZOOWRgNi9M''@;'; put 'put ''XkVueSo1X0AhOFM7bGRxL201Z2NWTVFCPkJNaHFuczpyTVBeS3B2RS9PbTMpcDxOQDZAaCRVLnQ5cEZXRGJzPFMheGVJZHopTUQ5QF5mYF49P1lqVGNQOXZPKFZKVmtGLjshUGtjQG8hL3sxaGw4YVRicV9WXWVbbmVeMDAxS1BWYnI4XyNqYkUidm1pO1godmFGZ1ZlcWNyOF9AIU92cikzS1Em''@;'; put 'put ''JHFoYHtVfjg4N3gjUytWbC5RelU9YjlDbHEyKyZ6YiZaPFArV11GenowYHc9IS88ZHJrLGZ7KUt6JEE4Rno8eiR4c3pNKGddfEBMXShxOXd3clM+OWlbMywxPU9mVlJ6eVIkZChxMHldbGpOeCgrYUpKKm9WSG8qPyp6Wil6bWZJOVk6dlpicjdxaW8hSkR4TWIzS1RgR0BvJFVeJXxSZm9jVmFL''@;'; put 'put ''OHNvMFJrUl1uPlRFfCVWVipZaFtieGJyRFdwVj1WdmEsI2p2XmE8NjN1WkBLUyxhQFg8ZGdMakwxO0guMVtfdDx7S351Tyg+VnVRNjBGXzhWU2tDUF8qUiYlWVUrTFFCaDFqZHEhfC4/TTY7JVpDTitSIXVRIzgpcjEkW2UoMDBUSn1EcWU4bjx7bEk8SF9FZ2MseXl9PTArRnp6MFomQHJCWWJn''@;'; put 'put ''cHxEcXR5c05GZXQseCRmfG9mI0guanYrSVhEJXdQJFZVPUdvMV97P2ZNSVAmQkRtO2w1e109Imh1JFhoT14oeGdWVH15Mk1qYCtFekV4T144bWwkMmgjUztsUSVXPUJMZCQmQEQhanMyPVk5SiQ3OG5ILkZYTUhAMTBkYGJlMCEoZDF5TllRZTl8U0liTXhnaT9CYFpqcnkwOWd3QksoKUJANm4/''@;'; put 'put ''bXJAMT8/bTJQbjBVMXkhLD8hfT4hdTNFb2U7fm0uNT16fWp4K19eS2pZaDUsWWY6PXRgJGpBVnx7WFRZJm1NRS9WelomZWppP1ZeR25vMGE5SUxXdnteN1Y4RzVAWit3JTx6a3hlST5AbiFAPTVNWHMkX0ArckpkJEloPUQ1LH1wbS8ye3trSTh+Uiw8Wjg1KXowYVE4bF11W3dNZ2VhVUsoKVcx''@;'; put 'put ''KyE3XWZxN3FjVEYjLko+QHMmVCVPZSk/RmYvbiI5QHs8RjRsaFBJclVUJjBKbUhXUSY3Z2ImLD87UlZyeSoxSXY9RHguWmA9MG1SZ1VmX1sqakhJQl9iUU0rM2dBRUZ5JXFZMV9qe154XmY8WnNPJjkzXVFIbEQmbCpWdyFuK3t2Wm8+cWt4VDJfV00wLGgxR2oyXkpfOF9AIXlRQSVrcHllMD1d''@;'; put 'put ''WjkmJDl5dXhoLz40WHQoL3B3UGZzVmVWYFQ9RWc+aWcxclF4dURJfEk4LEFxIUpLOSZyeWxZZ35uVVR9JUEwTjFiKSpTREluezptISx1JFtlcEArPzolI181an5wd1BgIS5wd1AwcEhJeDwwO30kZiZ6cHlwfG1bZTgsZndkby9RZDZvbXkyQ0ByKm1mZU5FPWokW08uOXsjVGZXfjIwNj1zemAh''@;'; put 'put ''NFVFYDNoVW1yQFUoe2lndFFhVShgMWUsY1IjVlpQWSpHZCJONjMieDI9P30lalVhJSwpcTo5ISwwaE9lJXw3R2FRRWxfLlQme2RaUXghYFlZaC9qazhta3ted21RfVpOSXJKa0JfUHJNaFd6a11BXSNxSEsjKXdSU2VSLngsKG0+MSJedytpOCMsMWgxQGs4YTEwOWZyYiZ1cWVEa15say8rRG4h''@;'; put 'put ''JnYlPHpKSytqaE0zZ3U9OFEqbTY9eGhnMTMpJnhFfFFePkA3LE0xSWhZJkEwRnlQWW9xOCw3X1kmfXNCLiR8c3hgVHB2RCtIaHVvNHBzOT5PZ05ZVmhgY3VoUmVqZD9aYU9zYTlyPCpRaXYkLGVgJlBIPFBZJCtLeixRO31bXjl1NzAoWUZfO1VUbE0lV3M2fn04Z1dAJUkwVjQzbWEjfGc3PE1O''@;'; put 'put ''OS5KUFpTOV91fGE6Mj4xSHU5Ii8oPEg9L3BJMTcyRVQ+bmIhNGphMSNSV3o0SzlROll3fTk5USZuUztafTAuZDRtZz8pO31mNDh9NVEoYj8meEhQL1NPcyslK1BXX0BecHZIWXRUbXgycFY9JWpudyxtL0wiSHYpSHg1KyghKT1NIXtfI3s/eCN7U1FpOCZsQzlZc1dARUdleWVJUSY7VjhWQmt9''@;'; put 'put ''VlheN09BcnxaKGA9TXxTRi45ens2QCNwU0VieHFBb0NzR2BBQGQ5IyFYMWZ3WDFDI31uWmVObjVhQ2BAKyt8M2x3LDJvWF17JnFYfm04cHJoOi5kYCVSaVZhYm5SWm1GfC4wfjYycWg6dF9wamRQTUAod0xNdVkqN2hZQW97X2wjZipCOiFpVSw3VnRFVHh8Tlo9IiU4fW4zY2d9NmMlZTh3UDBR''@;'; put 'put ''ZD5mLCJnSGhQaFtAXj0hIXJFLzJuPDhfJWpZcj1dbnAmJT5nbzliP1luO1t4LFM9fF5ZNXhlLDhnSV9QWHN1Sjl7NXxtJEw6e2FoVEMueDlzJCNIVjx3X3BqNHA8VmFReCE2Um5gT2hhblc8UGg/PT4mPyFibipQUSZgYXtJbWJVdy5eQmA1VEpZPmdGLDwyWVEwKDxkT1EmKUV4I0BXPSxhQnhm''@;'; put 'put ''ZjR1Q3hWYFZuZVBoajNobGpQPU0xPk84cH4lTHRtRD9nak5DRSwyMj5bcDEsYW5lc207TGg6JSR4Z2QuXUBTNG18bUk5IzIiJX1ffjB5OUJqI3F+MCklfl54ZUs4UShhZ2VhU0BTSUgxNj11JHtfbyE+fW5wIkh8bWpQcipqZUo+RXFkUFNlb15OO2FRWENXYk5uK0o0alZuP210cUA7UkUoOG8k''@;'; put 'put ''cnE7MlNnfV5fbUhoZCRlXT0hdVFBPnckIUo8MjIwLl5ZJXo+NDx9e0grcypHcnssZEApaTdUQHJzTmZzPHJ2I1NQYm84cjU1MFk6YzQpVTFZbzIvXj1AKkFdN3d+LEYxfTUqTyttNGVde1FeaTAod1ssfDBVS0ZxVWlyOnIwaFZOVUtSSllRKzhRZ3k8Yl1vTUBQJUJ9Oz4vNGVAZy5wa1hGJC9d''@;'; put 'put ''aChaT2k1KS5CKlVUL2d6QXt3an1rJjUqL24/SHEjdFl2LHdBc0FJa3BSPXc9LmE1byptcXpmJXQmXzNKKnckRW5mc0ZTPSxtNVp5PCgpdjliVUhUMnUyYkFHMTppMVslWHpnRipWeHxVZDVbY0hiWnpQRjBiZzN0VCFXbVVJUlQ2L1dXRzBQIzZIWWhUem5LY0A+TlZ6TTh4Jl5xMSxMI1syU04z''@;'; put 'put ''Y0cxUDIvVFFWUCU/JDUybWZMRCM4aXpwXXlmIzBVS3shW18kZSpoRXxtcGRiWXh6NT8pbV5ARDFfSyJNUFZRIzxBPmNiVCpkfTJEb2hURyJeY31ZYWx4ZEdrbSsmKUx9O2g4X0VtLDd3KEs/WG56dksoLHZQVz0qOXdNNzQuTl92YiEsMUkzQkBtNUI4Vz5FLFhvMCFtR1pLMCtVfjhwYiQ0ZnUh''@;'; put 'put ''Wj51ZmNWXX4lI0c0TCxhSipbTmRaOU0/UF5PVzkjXy8vV1ZRQDRAQlBvdGhHPVtpNypoNjA9YE5DbHRQUS59P20xaC85alVtX2QrcihgOSx2YmBvbGRzRkQjfmdxe34oIl9lS35XNWxXPEJ0KG8rPTFCIls1flpiOTQ4ZnwpWm1sRV1UJDgwL2hnLGFBYHVkODFDPzBQRjlMPlJ0UGZLK2ZIbyku''@;'; put 'put ''RSFWS1hCVjduVXZNbiRRWip+Mj9TTWZgW2Vdfj1xTi5HTHF+bXpuNGFaYFVBdDE9R0w/fnJ9I1RJYy4oWD4vS0F0VkQrfVh6XX5rcHN8LkJ+fXteaCs9fmV4VkxYZzskR0ooWmppcFZnfjIoU0UlQHc5a34odWZudE1LekdLO2hlP3R9cm13P1RzJlo8ITIwNlI+KH5CeTM6STklPSNJKENCSE5U''@;'; put 'put ''STMrQFMkMFgkc3V7Jl9nY2E9eiowW00uJXk5YHclWS8zfVZSekRPdjgufixdPTI7fVd6cyhTdCMkNXx5aHVgdShvUDR9cFh3P3ElOndkbjRsN0N9O1J5VHx9KiV+dmEpPmtAUFFsc2pJIkptflZ5cihJXlBRYihwODNRPHxedVpbJV1JbXBUInkxPTIrOV9Xfns0SU8iQTRiW0ZtTVFPazdkY1l3''@;'; put 'put ''d0ZzV1hXY3FqT2RjV3F6REhVWW1OVmQvYEN1PjE7e096blJGSzwoeTdGL0JaKnhXN0Mmb3lkWSl3YndXKmZrUiZ+Zzk8fG57ZXNJXTxzall4W3UwI2dbPiplYnxoNlRXQTFKJntAYGVUaFpgVEVpcyJQLG8mKmc5M3xeU11+USVGcVcwQEJVUy8vJCUyfW1wJnNgbX5+WztYNH1RTyVXY012YU43''@;'; put 'put ''ZW0lZnwpMT1YMUJkME1XO0JCIi50Iis2fTtkM2gxVDtaLm1kI2ZxIkprTSRzP1t6eTxPLmNWfmhsb1dFMCR0cl5vRnp8PSlxfit1Y19ISHowYGV7N0BiZyNSLnpzIUUufWkyNnMjeEtjXVpKNHpgQGRmbSs3O2AhdWh8YUIjfiFQYH55alojM0RFeENtaTleeUk1OFlhQExBbjVsUy9YKyQ8aXYo''@;'; put 'put ''fkY3K0V5KG5ZTFNlRkE0bmdZaTQhbT5RPy9qNXRrNVokL21pbFRzOm9yVHx2Pl8lK31zeCZgVVlQNE94ajV1eGFralp4Yl45OV9uYCRlfCR3WUVnNVI7dklBKmtyK2tFPTBgaEBEfldTQDRXM2RAZkY4ZSkzNH56aDJSKntLOi9zVjBNLlp4WVRYZ34jYCNgX0dAYHIzVX5fMmNXXyVtVl8lc3ZK''@;'; put 'put ''Ml01WU1LQz0mYmRkR3g4SX5SQEhyWHRIaDdkcy9pUCRudV9HcilDcjp6fXtiIUpTaSpheWM8VjBpM2Q4WTZidjdtekN1MHBMeiZUOjhXMG9Ca2l8ekYvKz1pX1BEQn5HclM0TXt4NVZGUUpOL2x4O2swSEJ5a18jNC45NE5LPyg2MEBpIldFMkwiJlszcUBNVnooQiJMRj9HS3JAazRpMSlucFs0''@;'; put 'put ''fiJzKHpzW35wOXliRSpdZGxvPnUsIz0sWFhrYzZNT2hsb11WLno0eDEvTlU6MVQlQFA5USgrezA7I1JwOFhdTWVdZEl5Q04saFkrKipGfUlvUio2XnhDeix4ZSw3I0c2O2spSGdSc2BnVTtoQ11sZ35CMzhoVnMqPSxua3YmJHdBaTBIbmsoMVpJTnp8UkAsWXcpV2pWMy4kMzFpeUVFMmBqbDFy''@;'; put 'put ''YntXfVJHTXsvT2lURj1OWD0kdnFFKDFqS002WnR2R0V6RUFJWH1SbkJmW11eKE9UMmspNGRPK04wK20wSnkvV3dJMERCKWZwKnxKflluaCJfZjBNWSVyP291Q1s2ZVFxTzNRTlN3aztMIkkkM11+dHg6VUo/NGp8Uk1LWTk0ZXZ4Pi5+STxeTEwqWXc1KlllUGQuQ1s7bnRfeyRkVlUjbihoSFc7''@;'; put 'put ''Mj9DPnBCRE9qNUByXmpDMm9bc1NMLm1TRF9OU0wuRzV0ZytPUFM8PkVAT0tsZDo2U2FsMDYuWUglN1RnUWduVW09dVc9dVIsQDR5NGRMQlM6ZSNPQ0ZRb0JKO2huO293KyR+VEFCbkolbFQzYyM+b0h1P0oxNDJ0ekluSiVse3V0Z2FTUm95WGIwSVJwS3R6b0xHPyEpSVRjVWdUbW40TFBZTSls''@;'; put 'put ''VW8uWnRDcjRDWkJTS0dPay9aNCMwTHdvLjIuKj10QjZBeCplJTZbZS9DdHhHWkJVa2RbN2loZGhIamcxNDh0Vl4yVysheD0zbnZ1bkU4RUN5WC83QFBbVTZuTU13YjMyUzdvTyV3K1BDbEwzO00lODQiNF90Ky5JcjAzLE82P0ZKR2JbQXtEZy5YQEhYU1VmLDREXiUlJHBVfUJGR0Nre3hxbkp1''@;'; put 'put ''IWZfT1VrTmMsYkkpeypHSl0icHRLNl0idyFSXT4yKyRPL3hVKkJzQ3FifChNRCZXTXdwdC5AS1MlUlFhMmo+OkFAMGRCeUFBPyJGMUFAamcyVz9NRE1jNmMkPF1VM0k/I0JYeUhFVVloUWI5bm5qIktMYHQ2aSVnRkhASnpDP05nJG9BWUMvYG5udVV8VXA+Wz9GRHZZK3orekwpeD1XVVd0KEJE''@;'; put 'put ''eEVFQTZnJGN0eVdNLGYiM0kqYnI/Q3lXL3lubE5eVntaJF5VYzpXMzA7UVhRezZzK3sqLFd4Q11wMC5uZ2g0QVtEdlZQeFNETTAyIkluJjo2ZVpAd145QUkkYygzRnY5PD1vQDJWdWd4S0QkNEJOO29TNy9UPy9GTTo2WnY5ZzxmX3xuYk50ZkUvTl9FYjQ3L305UGMieVVGSjkhbW9uTzA7SVMr''@;'; put 'put ''VEMzNX00e3QjQmB9d0B6PX4+JnVVQzhLbntHRXo9YkBRIj1gUkl7VWo6MGJ7eXhHIkJCYDBVd2dqYyErI0N5SX5WOFJZenAuLD5IQkhGTjFLJTI0JUcuVCxpe3tKb0Nbc113XWROK0Q5YCZnaExXaGZkRUBkI3dub29rUUcxWXphW3FVOnlnSnBjOjYiWThYPixeYWRqdU1PI2hram9TLHRZVVsp''@;'; put 'put ''dXRifFY4bz1UQkI3ZWtuYz88STVafU1GS0U/ZkJIRlZbbmJxL0VMbk9hMztJRVEpKX5NREs+VHwoQlV8KHRBc21gcENgb2JlL3NuOkV3YW52MXhkI1o0eVhyKVRhZkhINyEuSFU0QjNDamZQMyNUZ3Q6QXtJazBHMFIvRitGeW89QWprPVUsLE9NVTBueEpARzcuUWNXWEtOe0R7VUhIWUByWl9K''@;'; put 'put ''OFJ6d0xvTyJHQU9BfVVGJWJ0dGIjZF5TREZQb2V6bCJJJWo/Q0tUVW1vdjNlby9EYFAvPUkuXjpHMCNbdlcpQihHSU5vV3UhZSVYa1czYXpjRjJUcUs5PjFORkcyYUdPdSs4dmQiSGtPZ2ZNUVI4JDw8OGZvOnhuTHUwQ0FlblFwUkZbPUp8PnFDLEEuZzg8TU95NGs/fmRhM1tkJjZHMz90d0Nl''@;'; put 'put ''aVBJJWdQcCUkUFhsQ0pFdGg0czo2YzJ7eD4yTXVLQTFQTV81WlRjP3l7SCJPRlBpV1lrN2twQEpafT0hcDZxZ30yU2w6UkBfVzRDW2QoSy5eVy9pdHljeVVCX3FDPXZ9TWQjJGs4bi9oIWsrcHMzQF5zK2ZIdmpdPztQSUosJEd0U0RQO1pRPFRUdEV1eEdKMXMuVS9NdERCKmRWaFQzQFQ7IkQ0''@;'; put 'put ''P010el1xTy9gNncoPkZPRSEyMVt6V1BBU3hNRl5UOURMI18yRSJpWS5YLlhiVVl3OTBoJE9PXW9SQGtDfjB9PFtwL29tIn1KMyxdVHxWTzE7XnNuVnV3T01SLmtrKXdEcSVMKXR3QDYmayUuOW58cFosPnRfMH1yW3p2YkglQFBzUjh6O1B6LnFudVV8QSpUO1dXdk1GVX0kZ0dPPls0Q0NCfmc0''@;'; put 'put ''O3MuPj5GWDBPMGE6YFlvN1VqRiM0SGJdR3hiKys8RDlBK2kkZ0clJlduTWFId284PG1uRSI0XUJKJSVjMlAyTy9KLDcrRDpxfSNlMmswVz8wQkdNRHZiWktPL2F0cE8vYFFAcnBDLkRTMjxZUWFjZDdrQEtPI0lkVS5ePUprRGJVOHh9TUZIdm4lVVpAWkI4eCpCO289Ti9UbCkrSlh+e1d+aDdg''@;'; put 'put ''aT1PMy4+QUVJdFNEKGpYelI5ZDRsdH06OER0d0wvOVVnLmBFI2szNGp1d0NAc3pCLDYoW1s2QDYoWzM0MzNxIiVESVd+PWIjYy89WzAoJUEyTUJTMDxRU2I0R3U1RE9FI2RoI1ZvYnVXd3FZb1pPTGRbe3tuVVtUZEhjSyp+Vio2YFBvQjBkS3pULyovQHdnWkBpMDd3RjYmJiJub0MwQ08kbiZq''@;'; put 'put ''Omk9QkRhQkE0fU0lTiUkZ2I3cGF1SDdoKyhDQyldVE8kfTRMUnRkUlokT1ZpMChUXUZhRkhWY2lrdWtiNk9KTG9bQG1Ac1Vde2M5Oj4yQWlKK1kqTkpvcEx8QTkwZUc8VXwwakEhNnc2N2VLb1UicDJbZXNHcFZGVSh5cXpPOipacGZ7T0R5VG9XWFVKc1VNeT5vMHpHM0NEImdRdnNWd2clW2hC''@;'; put 'put ''SUg1QiFlOm96em1uN1t6WE83NzRFMHklaD86dSlkcUAmQD1GMDwjTzxvdyw1RUxOczBiXmtVNjw3T3hTYCM8UCRUYzMoXXlnWz5GWH5QXSJEdVtQYUhTXWFdKCRgV0dEWk05Vk4xIllkP3RGLzxSSUd9MGEvbzRiTVhHQnlZRXMkZzI6V0BhTWdaLE87LFRybCVJS1klSWxJN1AzeChPQkxESkZa''@;'; put 'put ''S1g3b0BqWC9LTVh4PWtAX011NUs1VElbUlFRVEBEQnJFcn5SUVsyODVVMWhoSjFrbkU/R3lzQElZaitJdj5nVkIlJEFVWmtkL2Z8W1F3YDJTQ0NiU1VjIldxdDNWSWtSMUZKPUozKDVBSEo0Lnk6WS8zL30sNVF9dyVOKjZ6V0BCREdNd3xyemQ8VFZYZ3ZCdmh0VktDdStPTW9CW1BWNDIhZlRC''@;'; put 'put ''Kk5MT1VPfVtiQixDfmdDSytbRUF7ZGNXKUkiNWFRNWc4ZGM0dCwrQklXfmRefHMlPSg4N2RrTzNwQDZDXVBpVG1nNG5hfTpJN0cxd0dIS1EyYXAvb1lOWUo2UilXRnc+ZVJQdSVHb0gqUElrL2psMG4lbG5nKTYqdEU/Q3hWLDdNNz9bcFspSTE/SiRyWUVRY0U+RWspRCxPL1F3ZiVtbmtYOkJN''@;'; put 'put ''TFRUQGtSY0ksUnd9Q1dhe3t1Q09jPHk8MXt5TjFPTytrby9FVXQwfVI4UkxMJGdGJUJ0fUN5bWpkJWdgPk1BYUphbTRFd2F8eUIycTJhOkhiXXpoayguRVdAa1I5ZC9ZJVgpIUYjUioxYzh8eFQveS95L0N0X2E8UkYrTU1zan1aS09sY2BONjQ+dGV3SE0yYSgoJG46RWJHbEk6ITJvXzB3Zylb''@;'; put 'put ''MShXRlRGZFBgcUlLOD1jQCZBa0RYSCVOLk5kb11AWDV8NHRYLENdSj9mfDckZ0MzJFhHVi5wMV5OPSRYTVNlI2U0ezR4M3FvMV5AVVVROF9fV3RgITo2OmhWW2hrODwwOygydV90dU0xa2wrO081S3hpSXhFeTo+MEM2SjtEbCRLbyZMQ1BZemVHUG9Cdnh4YW1Wa3ArM3V5ZW5iU29+QHtBQkVL''@;'; put 'put ''OUQzaktmSGtnbCtndiw/ZFsjTUhaLmRDUEpRPGxWSylbOVgkcWc4bFUxbk1ZeSo/XnA6ezJaWGxHWkJGS2lvYTp8YWNXUUlvJUBNcCN2bnE/JSwpLHxXM15LU2o9eVVVdHREUUY6XVVrZjNvTGJTfFFJMnk6cW51b3x4dk4rNl56VUA2dS92NkViMjlESGIvbW9uNXQpQz5BO2x4Z2o0Ikw2SDN3''@;'; put 'put ''N28haypUVXBfTzZIXyNjVU83d0AiQXFSIkhnfTlCYW19TSRUNSs0RChWe1orL3ZAQy4jQ3JyO2xFMzxbQnZReU9nSlFqOWMvdG9dLmszVjpeOi52P3QoYkcrSFUmeW4wcTIsbkE4dk59TSZObitEXVREcUhkJS82UC8hQlMrakNOVHJ+ZzgsL2krK1oqRyhYamddNngoMng5ckc8Zkw6e3Y+WURH''@;'; put 'put ''a3luUm90LEZ9W1BBYDVgcy5RP3hwYip3THlmaC49bUFCKzY1blA+LDNebiZeImJnMy4lenFEdEBaUD1Wa0YzTFg2bXBUOi5LVXZAPElXYWkpR0pzLjtibjNPdSh3XmdoZGlkem5eYitiVyVqcW5Fa29We0t7Z0hVbHMueG5PLlhXQDRRZ2ZIWkk0N0h3NFpOeEcyalRjJXJxfF8+bzBDX1l1Mkh3''@;'; put 'put ''bmNaKj98cnpPM252JjIwPSYpJmBqRDMjNT93NlZHOUpAJHJxcytATEAxUWFLMWskQyVxLzZbK29rXVciQSVPJGNVayQhbnMrOEhwSzVeNC5KJWIrSFNtfUB6ZmskLkZ0PF1MRF9wZCVaW142KVQiMyQzImJpdGl6U1RoWD1FciQmYnBVLylaQXl2c0BbR1sydG9YRjpNYCpTUVVRXmp2WHo7UlFz''@;'; put 'put ''LkolSXZIOGE4KGBsViUkdm4pK2BNMW1FdjNeN14xRkpobXV9RW1HWEo2ayVgJVhRQndfMSkrRGA3Yzg6YGhiMnhAXjlFcnI/XiF4a2RdaXJyJTNtJTdrKkZQQihWQjAuSiw/bFY3b2hMJUJWa34yaSJ2ZGVwdm8uSmoobC5RbixgWi98VE1SeE0mZn1Ze1U7YC82cHJoRzN0IVlWKSQ3a2QzVTxC''@;'; put 'put ''bG49NEslSFUhRXBSdHxuM2tkLzZHa092M1F6YCE6eWJkJWQuLlQiS0J5SXJZemA6LF4yezYrK1tPKUJwTnUkeCwuJm5xP1BCQkNRZ0YlXSh0QS5TMWJoJGk2JUJrSi82Yzg2VnQzbSVNJXo8MD1AW1lDQTNaR0VJOnFkciRDQDM0eH1yLCp4eEdKTlNwdjpvRjp4RX1pOXROeXw8JjYsX1RTUDtk''@;'; put 'put ''eF1rPT1UUy82Lypfbk4iIVklOnBaQGs5PUBbPHVveWZkRTVlSEtAOVg5TyM2P14uXlFvPnouSntXJTpYY0NYPUBLMm5rPEBnMGlrLkFhW00zVUpfMiE9bUE7VUlReD1HP2A/SkojNjFibl1aL2okby5HWEMzOlRFWz46VFN7e3R0UVhZWzpNMlReP2k+XXtEWjJ0YGJSbmM4NmBVbz56LkpwUihW''@;'; put 'put ''KCYuXlFvbXovMkJHaD13VyVAPjojT2lXVXB6W00zM3c2WyYzO3FsVDEvUGFSU2l5Q1VmM3ZvPFdUdjYhVERrRFhpcGRVLEZPYHMzfDdNP1Feflp9RiEhVD9+T2BFaE0vXX5UfSNBP1Fkfipddnd+fi59ZTsrZSo+LH5ae3BdaDZzVyx+UHtUKS9DQSI8fnp9RzdScXx+RH5aOjN9YH54fCVLWDQk''@;'; put 'put ''fnh9ZkE1eSR+RXAifiJfNVMic2p+KSpkK19zcnxSNkF0Pn5dX3FQKGgieGZaSG9BPlc+JWRlfjI0Mkghb2ljZi8kKDYpXz1GejxvPG8uNHs8VTA8b3lXYj9SJkdjT2NwWzVDP2BqRUEiRX5aJF0mYmkxK2djcGtuenk2IjEuYklPZHZWRTg1dFc+fjpffntCXUIiNn4kWk89O01rSFdSZXFpV343''@;'; put 'put ''KVpjWCpBWXYrXnB3OkMhfUpAVSRyT1BPMFMhX309NHVKYm12Unl0VzJ8ODV0Vy40PGh5PylofH5LYkEiaXNHNmBzXSQ6cy5UfnM6c3JlX3NpV2g0X3M1fmFmQiJJY3trUGFrM0hINThlcXp8Y2BlLzh9JXltYkt9YVBmZ0YvRzdGL0pHZE4xRUpvOXJSTDMiN3pidiJTSWgqZkF0U0RjMjJoQUll''@;'; put 'put ''JHFwcztmcTl4Z00kV1Z7azhSelEoWj5HJWZ2P1N9OCg6ISFCOjpmWV1eOG9VYnErYnpwYlIpZzo/V19MOzRnezw2OU1lIzM7Zls2ZkBMXTczPXp+PSZ3T2dnKmFedysoPWBUdXl6aGpUJmQ9PSpRcGoyXiIkNXNVKGR9SmZbTypAJlB1ZnBKTHgpWWZwOFl8QllLNW1hLGE/cWtCfDpfeyNHJCFf''@;'; put 'put ''SX5AXUxRYEBRXj19fWFiNnBIeShYZyE4UFAvK3dxUmZjX0BzTytJW0dWd3xUSztjfiV2UElWci9dNFY2YFFJXWg5TSZjbVsmY0ZBXT96Tl5QVDksKF1nMnxXYjx8aUwxazNtUTpYNHBMZTNLYno1dmwxYj54IVk6T1VNV0QlVyZnWlVsQChqMVssU187MUVgVVNeW31EODdpZSZHOUtEcVFJKH1d''@;'; put 'put ''VXZmLmlNe3pfdmZ4cTVpTkBTMWZlSiNCYj42cTpePXI+dC8jP0NOXlVHX2VvOUs9PSNxV0Z2S09eUFRfNk42ZEBsd25nQGwvdyNpcTk7ZFJNWVdBemN4alVFI24/dSFCckkleyQjczVLan52ZE0rRG9ULkkrJXFfQDR2Wyw+LFVGOTlTYlFmTVdIVlpmJCtVRnVON1ZLQHQ8VCRiZGgyXyYjanlm''@;'; put 'put ''NCF7OXpIWmdBVzRtTSh3ITFfSDVnJmQ9VFROOyxmLHApJTx0dmdNcSxmYyZMYldOcj5ROlBkTzF3S2gyTiUpLyV6S2xvTkY9ZWBCKCVHITNhMGpPfT9Cc1o2diQpJDolWV8wTVl5TiRTSllzPTtsKl4hYzxwd2BZNnphM1tSQzFeU2xNelU9Yn4rd2J4JFkmSStrR0xiMD5JXSk9OD58K3diMj4l''@;'; put 'put ''UDJiIi8hL1NNIzolIVpebHpdU3gsPyVpYnche1V8MWwxfWdNIWtbckxZfVp6aWY4SHx8ZlUiPWtdOnAvZkd3YHpwUEAlUT02YU5yLzZGemExUGdCVl9tI1pwSn09XiZTOikhYyZRRTVtQHI3OlIhZ1JbcG9qdy86PC87TSEmUU82PF0jb3F9O3hUWXg3RlZxPnwrZVIhPyk9azJtZCoxPmVvSTE8''@;'; put 'put ''Mz4jTzxHMzFgejxHNjlrW1E8eVZvaHBec0BKW3FAM1ZkJDozOnJ3IUVJMlZFfntNL2hpLHZ+SV1zbC5RVm4qW2kyPW5maH5pRF97Iy48TXVjNXMsQ2JRKW5VUm5AYHQrcGtYbEwlUT02cGo8Lm18JWw9XXs/XWQ6JGBUXXdWI2YodHA+UXxrZDAlTyVNXngsLyN1eU9nJUx6KV49dyprN3JKZCRE''@;'; put 'put ''VjJjQXxuVVZ6XTRfZFdvVSY9OjJSLjFhdUddb1NyKTd2Pmt+bWFoWGckVTJFNFZgXVBaSVJvakNmLFN6MDNxX1siT3RAMz02UUgmSz87aTNieFJmT3owKSpdXml+Y1d3QExMKnJPTEg1e2w1Yi9vW2IxXVYyRyZsT01lZXMrOTFCdl9wbUcmeTkval49aFBaYmxXSW1lVkYjWi5aVk9fMVplekYx''@;'; put 'put ''N01LX2hTcXtpZThhLC5SYmFyZ10vX01FZmwiZCZxcXtpZyYuc2FGYC84QHMvMTBnWTY4amRpOERVNilTdk9iUSpLeFByZzVAe14xNiRTWjBzYTYzaHM3OTozRmVbZyh6bV1qa1dOPHBdPGJhanNPKyhbckhwe10vcDg2QlFoMUdIVkZdUyZjbVZBazdoO2tFRVQpZyVtb1ROX0hqSj5YOnBOTzFI''@;'; put 'put ''Pl09ZGIiL0w6YmRoJmM2TShgdz06JUo4YUhnQjs8eTgzfE81JDVOXSpBYDskWFQ3NltsfCVsKi9kWj9PMXRIJkRgTW4pamt8NkN+MDxqa3xLYVYhWzhJWXkje2pOemBZb1IuImc6WE83TShoYlJwZFBNQEQxUWI4X0FSIXxZQCIlQTh7ZDA3LzYyYVs8YmFPZEIlfk5CLiNxImRwR0kmLzg1QlFo''@;'; put 'put ''T3IyXzZedkgrUWBJJkY1VjlreE11KVN9QDhIcTZVQWFyM3M7Oy56OV1WY3xXRFMjTXFOcjJfY1hhPEouJilzdHdlaHNyMFJrS3xFOiFFYjoibzhAP1J3fSw8Q2wwPWZgS1EhJUxhWUR5MUd7Mz1hITBQOmZ4PjFJRWdjYUZncyo7ZC87XiE+QF9nOnIhTF88PnAsZigvPVVwKjVELjt9b1VQKVlw''@;'; put 'put ''cD00UXEjITBGeS9wentrXk1+XnwxZUs5ZDJiV2xwb3Z2cXhjKDZ6NXNZdzBHQEhpMVBMSDVONk5ZfGtZTkRWT288Tkw6QiglR15PL1FGKDp6V2ZBZV1lcU4kUnkkIk9RaXI6bWwvelBkUWlyOlp7QGxqTklXQi9PfX5WLi8zXTFOIXFnKU1gXTsxcDVsaiNucV9AM0NQIWM2NUBYTmhHZF8kdVgy''@;'; put 'put ''dz5dWiExRyYsaWYqMCp5IVddWEleekxyUWF0XWZvQzlRK1JkVntYNSRQaCxJK1ZsWWZJaEwkWV9JQF8/W2RJOGtbZGJYJUdFNy94MFtnQjVpYFR6U11oOFVkaHM9fV4lNFUzNmRuTisqUEh9T2dsS3pzZGV1bylWbXYsOkAmdlJTLFVeTnw1YyxzZzFOb3csXzZAI0RJYjYuNX06MytVTXJRcT0+''@;'; put 'put ''KzRnKjohcX0rL00lUU82Ukg4JjwrK0BMUiYuUzB1OSVqN2F7a1UmeCk4OWl7OlhNcSFxdyFYZFkmNzohcXBqWjFlbGZWXzdATihAM089YkNiSyNaeUpfMFBkMjI5VFYqU1FEYlFJPlNne3k2PSVSLmViT3xpOT4lQEI4b2owYUlzWks7c3pPUGR1cVdkS2ZUOlA9cG0rWiwoPilrZkk1YFE3alZ3''@;'; put 'put ''OHU9bGojQFNieltuSG1RaCVBaEd8SS47R2p1ckBmNXp6IzklRXhEbyE/O2tafU5eWyxDO1ZiIi8ocTZSXT1hOWxyQ01rbUc5Oyt4ITYwQ3BTXkJsQiR2Z3R7P1BKUlg9eTBNKGhzYHtSayklUiExMUw9XVNXbyIlUG1ydWtZInByRXhVMlFUeCFdXiVueVJxNFo0ZUY9cGs8PUV6cyVCKUU+KWte''@;'; put 'put ''QzY4Yj1DeC9wYCF4IUJ8WT1IJmZxb1Q2PF1VQ0VhRHxJSVZ3M0M+Vl54LHchR2o0OG5kWCN+azFtZ195PHMhWD1IWmFWJG56ey4/S2l2KWhdI3FANyZ8bSk2Z3Q8JX5qPkcpQmIqO35NR1A+X3I9ZihTempNOmZwZiFLKDlVLjl2dDt2YT5JczJ3OGRARSNdWUxwPTw3M3ljNStZaHkzYVZoX002''@;'; put 'put ''VHJPcVBgQHV9NiZKSzhvalMyKnphVklQcXBhOzh3MD1TZzxqOElxQmghJHBxS2RDXXpGXiRPKzxza3s/O3AmQWV2JVVHVl5lPXpmV00lUT0/S3txXyk6bVpzc2VLOGsoViZQJHFNcjZrKFJHOzNscTtkSUo7by9iQ155Yng6YzJOazJiOV5XbV8renpqJHxNSDUsLHt3dmtBYSFwYSx2MHowUGs6''@;'; put 'put ''enpVXiVXbH44QCNWXnwwfnJEenY6QGF+aztObzsjJVIuIiFgTUxNe0koOH1Ac2VeTnJoUigkL1R2ZHdSQyI1fE1neV92Z3NIQCw1PTw8empoZCQ6elIhSzhRKCMqR29BN1EoJTcjTm1rTW9kZTxTbEQ5UWVxYHA/T2w0NjBZJnlsYm59LHFnSEswNlBpZnF4bTs6TW87OHF4JF8pbUcrLDtpaHR2''@;'; put 'put ''aGIiLyFqWm5HKFU9UV1+UDNjRHguY2MlZ21Yc3FOMnZrMUpraWBXTTk6RF94IV0mb1dzOk59PG0jRTpeJTt8YkoyM21aNnpNZER8Tio0KSlBbENoLlssMXRoIlpSdSFsVHZXckBtak5DLj1lXyZXdX5aWytMRVA8OjNSIzIwNjAkPztlP1JZIUFsLHU7ZCpyeGcyOX1MVDJeJkxvS0p9cFB5aFZI''@;'; put 'put ''aU15aFZaPDpTUDw+P29tWm4qWCkyWUYmMVdgaDhFL3ojXm9udzxVKG0scVlGWkA2YzUrd349XjMlI1JTZVkmTnFEOkI3OmRZOHkhKzV2PUF5ajlUPVM8eDdKX20yeVZkITYvTjFiZVglaGZDfmloUn0lT2ksZyhwR3E4eTNkcTdxYTs9dGk/MFo+MUw6eSR4IzxmR2N1ejBLKFZZUEQ+dGJPX1BU''@;'; put 'put ''QnZZPXtXe2dzdkdWQlZnYU9xL2ZfNlg2c0x0SnR8ZXNoRSg9JDhyeiIlbyxiZ1lGTVciREs7MjBZP1soQytlKEVAKmpmcExZa2JrUWghLl5VMTQ4Qj5dYn42eEcxdUpfXmZ4YnZRPWJNWkxlX1pKW1RxbE9OPiw7QXxmJlFKOVEkMmFLM1lkJnNOSDRlTl5CazEwPWwyIiVtdzohcXhbUlIubUtq''@;'; put 'put ''bV1lYF4mbEp6dyxseV9WcH1kN31uTytfNkpfXmY4MzxHZlZ6L0o1Ul5GTHU5PFNscVpkXVpJJT5CL105JkskOS87clokSTRyTkZlTzwkK1gxS2gsWmFfSChbbkcmaSZoVndxN15KRnIvPnBkX0VrVF5CdmVWYXpVLl9eZFAkMjw7R29sSVlWd3FrNVRkQz4rMHkzWGR2UyExam91SyEzcCxDOzwh''@;'; put 'put ''W0lRJkQyTlBPKHZRPWIrfWg7NFU0bUNbX3VBblpucEAiNVsscTsuSjJnbzg6eDEwMWgjcWU7YHRbJX5qLCVYMU0sV281OGZ1PGIwbD9vXV58NTJ9UGhoaTArcWg9aWwkWD1tTW9KKWpJPyRqNTp0bDF8fGxabVZvZURpOyFxIyVdYHpNYXpoPGpSUGc/ZXJNRTFJYnxAZ3wsaWRUZE4wTCwucDhF''@;'; put 'put ''amNSZm9HVmd7aXl3cXM6fns1bS85SUsmfEReUy5xTSEldSw8d1tnNix5PHMhREkrcFRtMk5qZUBaWXk9IXFUY0BjS25ZZHk1S140VjZrKD4sLHgvYldQTyh7MStAcWhfPCtsSWsxR2BvTXEocSttejJoKD4sYDo1UGxeeHBKYX57N3wzYTNxckdwUHE+fE89Ynk+YEApRDl6ZVJGZUVNS3hEb0lS''@;'; put 'put ''eFEyUT1iP29edihwTXloVmpPQnZKXyFTSChtLFttfFs9anI6dW9yKTtkOV5PP35NRVJLWi93YCZFcVZucW1vOEducz5AKy9VWihnez9tLE1lODIldFV7WXskRXkkcipATDFZWnhmMCooWU1IZDI7MFtBeSRwPkw+UVBSO01xRHFkcSYlMFRXMig1LzBwLD15WEkjKWAmN1JgQEw+UiFyXk47QXho''@;'; put 'put ''bG9ta1A3QDQ+TD4uZUk5JF1NKywufFBaYis/eUlIITI+NGVvMFIhPXpiaGhlTWdoI3xeW25BSGk4QSYpL0huOSMjSF8/TXgxJGwxJnB4ZWM7MCohakk5NVB8QDJKNGx0cks7Sk1xOWVdQV0yQDUsRGclen1wZnI2bCxkOUAsaWFuRUkvZmBnOEBqUl1lMHBNKCEqb2YvUWZfOF07a0EycmAoIyh9''@;'; put 'put ''RzFoYjAqdUtqezVhWylKY0g0fVB8MC8pZnloVmYqN14kfVpEc3BIcUFGRl82YXsoI0BUK3FrO2cjNDxqZCRhOkg6VTEhX1VTZEAvbjA7YEdOcTN6eTN+cDRwSElnPz9ZW3AzPjJwSygkIXRUWiR8I0txTWhzPT1rUUVpO2BpLmlAS0d8Qn5KOzRpdTlCQChlUj5me1ElUCZGYiw4WSRWYGNLZSgu''@;'; put 'put ''c0c+YjlrXTZPR1gpWnMsJnhJZ3whIWosaU42UmZpdnxQSStiKVp7Qk9ObE1ze1p8QEgmI0x1WVoobG9fKk16YjE6I306cHYpeiRqenNaS3okTnlyOkNuODN0O0NuXmkyYipWek8vaG0/NjhDZkxwTzZDKDVHWWo4QElLRlM0TkVqTHBFKEBSZ2VSe1dmXz1vPGVgOlghLH5QPWE9O3JlPz1OYHpl''@;'; put 'put ''ZmYqMmkxXzgybHEwT2h2Uz5uKDhuXjBtWjcob2t5OXg2IVQyOnJ1bHxbRT5hMTFmL2pwcihTUDxnfFh5LzoqO1BwQzlQWnVOTns/eWlhNW17XlN7cVQ9Ym5zMmx3TzJ6RjRrYiYpK2JuYHF4WyV3Y0phVyNkJCQwTm81JHIzeGVlO1hdRGxoUEJbMj9AbF82RjZONnt6MEssbVFyMXBQNWlgJFlZ''@;'; put 'put ''cU1oWV19WjhuemVQJSldOUA/Uk1zdE9POlo5WT8jcSZSRFBrKkR8K3B0S14qLDk5S0RxVGckVWheTjs7XmJ2c0owaiNZZmQkYkJhYGEmdlhkdSwvKzZ7Mll9ez46N1E1TnVOKjRaSCRIKmJ+UEhWT1VXc3Q2LjxrZGwhQCtWd0xkRjlfXX07SGs4XStJUTBGOj9mT285UW1kZDJLK0AqTVV8Nj5Y''@;'; put 'put ''an0wJFpib2pbJmZsMi9bJipeNSNuMC84X108OzdRL05NcChrWnsjNXxoRClIWEZ1aVU8O14uQ2w4Y0FUSGVDWFZ7QzIoYCQ3UC5+aDJic0Rsd2IpKSZSM0pqeUB7TTAjUEZSLHlWTjFZKU8sZG5lJmRsPWtPel0mWDooUyM4czpPYUQyfUdtWVAlZDpAXyszd0svay9NZTZhMHZeNjsjIzU9Pml7''@;'; put 'put ''eikqLGV6T3ZSK3BSNUU7N1F0aDgxX11JfFVkNSZSZDgjLmt4XmdZdGE/bT19I2Q3Nz9iJDd4JnpRblMqam1kVnsoakImYVJQZTd3Wkh2fCNkQzJjQG9UQSxpI2FWMi8halswSjhpLFhaMW1KIWdfSzZYV0hqcmcudFIydV8veypsWVQ8Zl1vYmNNXjFWSjZCYigqZ3JvXU5fKD01X1BgPX1rN2JE''@;'; put 'put ''KDB4Sz19VipIa0xkUz43MVEwIWx3Y2lCJl07bjV1KSUiNDI9ZThmP1MlbHc3UUwrcW99I3JnNkJOJnpRLmRRZi5dPGFmd2Z5cSs3UV8/XVMrO21sdn5zclc5Kl42ZTVhNTZNOnNTdFN+MHFndUpeTTg7P2ZgLEYxRXBfNzo1YlRFfTtkRHw2PXcqKWxPMUVpNTY9LGBTdlN2UyExPCNFPztreSRd''@;'; put 'put ''N2lEezdpRCs5TjZ1OS9eXzw7Xm1NWCQvenJwd2dpUHdoKCVDPEQyciwobTFxR2s7bCZMYSwoKVcuXzZiQH1mL103UWVUJmxhcmhVc3xbRys7Q01+XV42dz11OyY5QTkpeHdzQntfels7RyhRJl5ZNk5wVHVofEBdWnxJUCZpJnUsZWxOUTM5KzluQHMsQW8hTmYyRzFyKSJefEYjNiw9em5UOGIh''@;'; put 'put ''dGZKNmp5fHcqdUtSMVZTcEN9O0wsQXNkK2lDN08/IWJ8NG9EJWtmcn1HWjAmQENRTl8uOiU4d1ZTcFs3WEAzKHEhTnZ8NjxCeUY4M0A6Vk4wTHs8ITBIKHV5fHdRI2c2T2lzP3g4X0Y5VHttRHpBeFo5TyxSPU5dZnE6OXBDa0lfMnYmOFBESnBoTGRrajZlPVFQK2FWNU16VXVgXTcrPFc6NE5I''@;'; put 'put ''c2NvVm91dTJmRVRKI2VzImR+K205UTpBdlFkajJMKEF8SSFlNmchUmVnKCJPWFNkM2N8e2RzZnh+fjchdTk6RH1+N3BqZTFhZ3RIPmZVOC9fT0U4YTl6aGpRZGoyZXtCKHEhZndZQEhNfXByTT8hPHo4YTpSdlsySyp3ImlfN2lEWiROZEMkeiZ3TXhhI2k2UVA+fVp0JE8xXSRTJTRnQjt4ZTNs''@;'; put 'put ''M1hPMS9kOCtNZH4wZk5ZZy5qZTYuK0ckYHdIQE5ZZ25nPE8qMU9Kbjxuel8rcSRAfTcvTih6bGxjIWpiPCxOeSxAV3cqUG1xMCF7fHF6cz1aMVBQUVA1KTdANmFOfXswWXsjUy5yMWd1MCgleTkwSzswNWpudihZIlJIUV9hXVJeXTZuMkMyX3JGVltoVWdLSzVvQmZEelV4OXM5UXEpc2IpVDta''@;'; put 'put ''X0pkMHoxaFMoTVZoYEZqUWhVKDpTK3JacTN2L3c3QG5qWjFdPU5RQD1GeE9YPzE0Xl9hTVchODc2WD1TSThOOCUoIThBNXYvd2J3RU1rSls6e3x5VnNAKzZ3cThdSiNrYGNOYjdreUVlVCFNeV8rWjw0ZUl3NTlYWjJeW3NsVmhgQzJoYGJCJmBqLDtJKmBTeTlDdysrPUJVT15+VkkqKyYrXjNr''@;'; put 'put ''K3o8MkhwWClfWn45Myp1M1k+SV5RJkkrK2Z1czJsN2FQcFtSSlFJez9tRyM0ZUA/KWp2UiZYQDYvazQ+N19Me3VTc3pZbFFfVF01NjQ/NHA1Tk1zbkNUXzw7N1EwcmY2JlI+ODRxKGEpbD0zSWw1JlZycntzKWY2cntfXTw7ODljaDEjRnteJlE6UTpQZHVxMU9DaiNRbl0pOSI9PDlPTDY4flM9''@;'; put 'put ''ZXUyX2xZLiRIUy5rN15wQWQiWiIqInpXMGkyRC43JiE3WHtWak5eQ2hWVUp8b3V2ISZ2YEBlPj5IQ2p7YngxYXJaaVNuUV9BfEtJeWUpYXp0MDpmdi88Qi9KZlBlUEpTZEMrRHk7YzpEcTp3c1t6TU5qVEA0Zlo1KGI3e0JwVT9sJXlQZSE8PHZGKjRwKyMlYzNCSGRiTFphL3RyWnJnanojIz9G''@;'; put 'put ''akdRQXlXLyM+bV9TY2tYT2UyX3lUYmtDMDB7UE1JZ1hOSj9gIXh6dTE1PVlzb0F2S0B9S2VBS085eExtckg3TGB8fkRFUF4yPkpsfDdTQz81Uk8rNVJdZj1oWSJLaClrIzpDdW83SEdzelE7Lk9hRHM0aXNQYjlRcWFIKG9Fd2cpTGZSZloxQmFMPWZELjRJTWxeZXArdyhBOihOezZWVC56PS8k''@;'; put 'put ''QF1mNksuWVkwdHhuNHVJcXVoWWRbXWZeUDBja1pXeD1YQ1JheW1xTkVDaCo0UyFJSjFLR3k3PW02TiNOL1M7eERrUTZfd3drY2lScU9JZmhMZjg+b25FLCE8OmU3UENDUkhPTTB6ZzxMK1c1R3MxXzBnPlA3b3U6T0c7KDNgal5AbkRabHM1TiYhdTtbSjhRRGFkbG5yQ3NjbkVONXVOSm1GO2Uy''@;'; put 'put ''aUNedUg3NDQqVEV6dWF1JipTVk5eJD0wJDQ3U1NdMGtSOFIkKlN+QixkOCp3LikjXnljTC9mJVF3bDFKRyI2UGZ1V2N2RSVBaFNPeThnPTR9bkJUVT81cl5QaUVDOl1RbU9GO1lvcUs/Wng7bTdiQyNLYilyT0Y7bjtlNih5VHplN2JDYiV9cmxoY3tLeV91Q2ZxL1VjI0V0elRxPDgoZXNaKnUl''@;'; put 'put ''Z0V3NzR6SmMyWDtCNlE7QTVMRmAxN1BJNXpKVUNCZTIvUzsqIiliRWI1WTo6JikiQ1M2RToyXUNOJSlGKlpkKTolWDtQX0RjIzNdZm1aUSs+N1AsN3guMF9Rel5kUDtHLFtkXVlocTNXVm9gKEh0KEs5P2pGJnhSPDM3UWplMndFRjNhaTRCT3I8VWkreF8qVV5YMW9QVkAiZEhkOFdqTmhyQiJL''@;'; put 'put ''SloxbzxXQVcqNW9nQk1QZmpGT2lwczw8X302Rl80b2h4SElyeyZpUUdmPFlkZWc6T1Z2LFJNXkZFdXFDJD95Oi9OQWs/N3dWLHdoKj1oe3wpOCQ6ZFtAdHUyTGZQZTYhdU0mTEJac1lhcGxCR08lRTVnQk1CIWovNytSZGFwaHQ4KGFJMjl2L25afUo1fF9LcWVOdSZrRGxvKVJNVEY2M0BRVmBm''@;'; put 'put ''SnMrUEIhP0xGeEh2RztTNklHJCNTR2kkVGQ1eV9oODc6RE5BLi4+fURnP0lZcWx9UkYlU1l4S0dKZURAUV5QWnFqK3w+cnBsd0YqMWkyQWg9PGYoW2BSaHQmfGU4dUI/aTppI2VANFlLUixHSil9LkcpLC59P2ROUFBiaFNOPFNmcWAuR3lCT04+eHkxOVMxNHIxaGx3MWwyd28qKkJmSUVjN1NG''@;'; put 'put ''S15bd3YvZjg2ZHZiYyl7MjFSRiNGcTlRUip6MH45cGB5MWMrNDozdjNkLnp+JkhQUkF5O31xQClmNyZCTmklQHJqZkM3T1p0Jkx+THcuTmNnSmdEckxhZHhmYUpqalR5ci97UlBiMmBbUkQ4d2VGdXtBTkIjfCgzNz06YTJpe2pXQjRuOFlGKjl0Jk84I1FSJjNCU3xKWlU6YTJpJEdSMkl7fn5y''@;'; put 'put ''OD54QjFXWD9JIVldSjNPaEE5W3BIPyVxYGdVKyEyWUdGJEdPZiJgUVlFckEiUTl4YnN1fUVrLjZWPHJKcD1ZWlhbYnJJIXwpNjd+YWFDNVVSVS9rIjBXXlB1aVAsaWEkN3YvQS4yZHtYXXVObD1jQjZOI0FaSUdQbWlNek95OXVHaixzK2QjYj8ld0hUWTpMI1djNXhzSEBFd0dxcXhWdFZVSipG''@;'; put 'put ''RmFMSVlSK1FnYVZLJHZ9QGl5Z0VHRGB1QjU5KCFJI2N0KyxtPmMuUm91R3R8WDxFXzdURiR2QHNJeX4sWWUrT2o6Kkh2LHs3e1srLzJMTmNTUXk7TUI3Yng0KFM1UnA6aDQxRT4lJCRmPCFFT0IoUzYhM21JNT4ybFpydStvUCtjKWhKLHhSWSxiczlsWmo2OHcleWBSLDVqLzQxJHZ6OHEwMkAl''@;'; put 'put ''SV9DQEEoY3t2MC5daih2W0NkNklyQkp1b21ZKUw1cWp4U0YjekdRLk1IZ0E/dEI8ZkF9MS90QmZiazFQVVZYN3Y5TG4wfmB4UjQpRndEZjsmOl4hRmplX3ZkOVpMdkQqNSJ0bGZENld7djJkWHkyc0IrKHF1Nk9jTX50bmVxKVhjbit7QDVMWWV9NDF0OTBub2c6fkhMPXBbRlhxMCg1IVowX1hl''@;'; put 'put ''ZltKdD08N1JEX2puOE1+TGNNRU1jLyEiYjdwTWwmZXIsWCN1czRlRWx9fSlIN2Y6SywmVFJIInckK2BKYWlSOUskVVJ4QyZXZ2d7MH5SNkN9UTBDbTV3bUFrWl1FSyRhOEZOJShbdHg9T08zZ1VHTUAlK3F6Ijh0THVPeEpUWFNqdSFrVzJTZkx5PT5Xayk1VmJKeUI1RzJ0IzwrdFBMLDNCJjQo''@;'; put 'put ''eGQ5SnU2NlsvNFd7MGBjYFhIRD5sV29hIX1ST1hZUWZgJE1VR1NacjJML1JKXVFKZ29DRmh8LFVPT3B+YEZWXUJIdjtmW0g2RjZSRTBOWH1SQnVyT3VHLno6b05PVDM8aGldInkxLn1ZOCkhNVVEd1oxWmRMQXVOWHJSNC8yVW1DaCQxLyN3YCgiOV9kc3M/ckhnaGx0IypaOHkrfEMxVTdgWCxO''@;'; put 'put ''Znh2Ryk8R0tpeH1DQzZhY2orQ0ZkbHRCSkROJEFTWX1MSX1Zc0xYUzt5MkxhKV1wYj9VMkBBaTchNWJrJEQ3dCVGbk4/cGFFd0ouUy8qeyYoUWR6cUJ9SmUqY0VKRyNTdStIPTlKbCF9azcoWUBeQ08pW0JQQl0qZlh5Y1ZRJHpddU1BQEdXRGBBLnY7cSZBMVc+JTlQNG9DJHMpTzdhU3Zgakw/''@;'; put 'put ''RCh2IkMkdzhbZ1deKF1PInk3ezJbK0Mke0ZOOSppSnk2SDdQan4hQlVReiVGenRQJTpMWk0rNm9XcGlGTE9sa0MuT3dCTnQmdEtBVnt0K3FXcSlDSyRweTxTb1c6bXdvV3kyOSlbKnpibi94QiFXaFhTNzR5QCxVWFBhYmE7QWZ2dSk0Wj0wWVcoYGJLeCl5U0h0V0UpZlF0JmRNSkIyQG90PDl1''@;'; put 'put ''bkcpWHg0eE4pRXhzc0AmUl13N05vZjlERCJQIl9OeHN7aTFMJVczWzV4bUd+TGxHek9NNzY1YHssKy4xO3luR1dTbEFNQGxsfnk/ZUdTQ0ZQdT1rLEdWQld2aX17K3dYd2I6dWZET0cqW2M8cXg3I05tajtZUnwhYil7MSxAeWkleS9PX1tiNklrVmN5OVZ0X0ZiKXFmLE8weDY9USZLb08/STJD''@;'; put 'put ''QXVaTlZULHViUkhLdGlNTUlMTHp2SUhqZFdacVBJa1JDIz8pMzU3Zkp3Z0Y0LF8xL3UxelltRmpkOGskWWc5Q2NEZlh4NW5+SWRgXkgwKWZLZSVJV0wwTks/Yy9adzN4bjdJem5lODZNeEIjTDc6WnhzSytXKVR4ZD5ASH5odCJGaGxZT0E7bTQzYk5BTD1OfWMzMiMiQzhMYGRLSGhJPVFlJW9X''@;'; put 'put ''WFptXXwvblpHRm1sZVp0bFM7O2NgdlIyWFJ9ZDA0PXlUJTEwSX5iSURaSisxRCxPTHtqSEA0ImBIUHEmYjM3NyU1eTo3IndnfG0wb1d0YyZNYl8vLmMsNnMzLlRkLGBBPnhXVUlAY2RvbTwwVlkpRSZvMnQ8NCRVeVs7T0NSa0gpdXxgMWxzY0tgNT98Uj51TkNpdW1fdVcuU1pgKHYjLk88S31E''@;'; put 'put ''WiZ0dEwqOSl5VUNaWkEqSEdLUmJeLz5oQjVndDQvTFRxNGlXNVNJN3Z9JmoqYTlhY3wycDEsc2BYQkU9fjZDJldicGQvW3RxMXtkemQydDJSdjVzODJdMEVUS2EkfGQ1NTh1fF9CQVUiMl1feVNhSU0yRztjKCJBeHlZfGVROyYvdDU/K1ZIUzVIQnk0dlcrdTFneUoocH5NNjQ0YyNXa3R6dU1+''@;'; put 'put ''bTw2NkdPdUU7KGxsYTp2aWF8OjlHUVtjK2V4RDxFMnR9ekg/W0A6IzJWXm5QMlFqNlNNdFZLZmIlfUw9K008QyNHb1IlI2l3OENIdjdoTmdTPnZuS0xWNVFTOEpRdzNfcG1nQnZscU8yIXk6Olk3ZD8/SW0vI3pPcXlhY05QMDUwRy9SZCk3Vy8jMlZsNUNGZiY4RURtQHY/V1EoYSRmbHlEQVEw''@;'; put 'put ''djw6YFo2VylYZW83dXNNY1h4RktLWDY0REhSTk1iJWRYWFg9THxXUyY2U0xlZkQyZ09QWmFaOU1tWXVNREtbPXYkIVp4TltaRFpFPiFYLGo5ZUl4WnRCcFZzbzd1fnRkWj81WHtlQ1gpdC8yTDo5ZWNMZmc1eTRLYF5QIX01dGNAcFt+RCZaMnthYWhab15gbyM3ZCw6I1J0XmNxQitpTDdwLmgv''@;'; put 'put ''fHpGezFsIkZTNjIpL2xQN3NiXz5OO1JqLyNRJDRFMTZzLi86N1g3KzZpJTgxbDoxL2B8OThFVTV6SlEiI1JPR1dvQXYjdkVKLkFKXlBibmx7IkxzRSY5WEVHWVI5KHZ4NlN1UnNDI0RbYEk4dGNfdlZpIlZdVzFvNENNdFdDRiU5WGBJWERiR1tHPFlTUEZCQVElTndseWk3WFk0NFl3V2FwQSlY''@;'; put 'put ''WURHNWc8TDpxbU9NWSRXOUU8aFtZMlJYJTlYeT9wSHIhKyxeUHcxflllNG1PY3tlMkxeO0ZQQiRTMEx9SyFMQCYyXUZVfDIyTEtvVTg6VUxvTk1uNDllKVsoYSN1cCY0Nm9LS0BYSjd8ZThoUzBkRkJBTU5vJXBtVDVqNXc/empZJjJoQyVFenE9KmpnVmxYMkhbSUc4RExhKGQqdCldIVoifEs2''@;'; put 'put ''OWVBRFVDYSo7JHVXZnFTYT5CQ3pQZSsieD16PVoxV2MyMz1rMT98JkhQUXskelglJk5ybD0pYHBnTTZbUTtZKWRNZnRuWk1NSltRSj1FenpRQC5Hd0h8M3pMUXRJe0VJNGtEN29nSk1ZY15Hbz8xQjI2aWZbajEuWlsuRztDTWlXS2J0ejpsQncrc2VAL0hQQUQpVUxUd1dHR208NnVtXjN6Q0oo''@;'; put 'put ''eyYkXUM5KHFPXWRdeXRvWjtESndXUW52WGFKRUZwdEhKLzNCQSVbSk94PHZUTCxOU3xJLk8xNDB8VVRFR2JsR0AxWFNzOHdCO1ImZkdxY35ZMjpZK1F2a304MF1jTUJhVjQ0Y1kiYyxFZ2R2cE1jZ1pWYTdra3NoJEJNRiNMSVgpOXx3TU19dlRjKS9PRVFfOHZncSt2RmAxQWV2QDArSG1FP2F3''@;'; put 'put ''RnhkPHAoSlRgcTpWR0NfQ15DSjN6SXBEXj5tMEpzQ3UlJGxoY3Upa2xgamdSZHVQVCwuS2VPMWReSFdNaEVkbD9DSUxWUz5PckB4eHE9dSJ4MXtlL3kyLnxlVyxsVGNHQSM+Rm51KT9OaV4qb0J+Ykc9ejE8IzNhLFhTQzdOJSkkLzg0WmI5RixHJlRlY0NJTkomRm5ucTZtMDhqWFhNTyhRXkxT''@;'; put 'put ''aEIqY3FiS0psVyxsRGFAUyZCSUZEcSp5QkZ3R3RaWUc9e1R2eU9jd1pASWQ0aFhGUXk1K0U7Q31EWSlKVjsqdVZKW1N2OUJqNzYyQkRDMHhEPDBoUGs/QXk9dFRtM2omck92SVNvYiwsLk9uIiEyakNULCIweW5SKWNCVGppYSYwamdOQj5XejJTXk5FTSlSRCNwOmh2dCR5OTRULF1NeHRFWnB4''@;'; put 'put ''RkQhbFZCdTZIWjpXejJ5IzJ1c24lNFFzZ0RUek06M2s0amB5VkRzTXwxc1NlREliOC54P1ksJFN6aSIvIVlNLm9HVUUpNCZOS3lLJEJsbWlrMXEpTC4hdVJCOWNxMF9iVXZpOTJiRyFsSip0NSU/P3MweFVtK21aYWs6Q3JZWiZGRlcwbEJUbVJMT21KM0dHenRHYExtMElheEskdzR5cVB0JmRL''@;'; put 'put ''aVVJRXI2NEdhVCw1SHd0SV5BQUU6P2pIeU9HN1dEdGswT052KHJFSUlGWjZxcDM3K182Tjd2LE1iM0kvTj0vP2pBWChQbkdVY348WCNtVW5CcFpkLC4pIVpxQkhBOmdQTU1Fe0M5NCs8YjBwd14xRk1zY0xrQEk9QlUlV0csRzUyZlVMVkQjMDpHOU53Okh2RG82U3htcVQiZSVmTWw5Ry9JdzR6''@;'; put 'put ''cERWKU56YyMjRlZXNWNYJHtqVzgyWHd6aFB8NH5YS0N0dFZjTVsrLGI7Z01rRFY2QEhBYFcwTnAicHcifHE4THZ1eVhAL0EhYTAkOipAPUoiOXo5ey9Mdi4sYzNxIUlJJTt2djxDVSJEfjFkYVMjKChCclNPN281NVlDbC9Mbzp0KmEvREcuZDUlPklmeDZWNXRYKX5bPkN4cHNmMSV1SUBAa1NK''@;'; put 'put ''PUdEWll2UHJGbSFsVWw5KkVuTzcpbmUpPHExZVp3Unp0WjRzbWU5aHgpW0BlbkomeWJmW0xwVVFwWVBMUGRqT0d4WmhHS0hRLGU3dkc+bCRMRGxRdXZFcyM6XytPb0FTQTtYcjI+aD5NfjEyWE1LZnp3bkFBcClQcHBNMXh9JE5KNnV4ekRmTip1K1M2VmJYfC8/L2gzYVpUdG4lRCE2RGs+bEtp''@;'; put 'put ''b2cjQ0h7TD9mWi5iKzRPdD10YCMqcXxVNChkUmVzXkM4UnB3bm4+bEk/VU9XZXJJdiNFKW1oN0FUd1lwIkpUdns+KzI6eVJQYkxTNzxpR0E+bGN0RSp2LHw5VzIza14ic3N6RFZwOGp3TWllbyF7a0J1aT0oN2w9YlA+bC4obzQlWEh3JV4kQXFGWkI4aSU7RSklPSZvOlYxKSVGL3U3K2BqJTtE''@;'; put 'put ''WEUqL298MFtacUYlOi9sMToxJTdSMyY/WGE3ZXM+QilYNnkoWGs3NEolV1BveE1+NWl0OF9EInJ8bSJgIyIxXlgzdDd5ZXZYO0ciUUhrMCRjV1RvYWRHNVJTbC48QWcpMHldTjc0Si9PN2RPaVROamVdNlVpViNkWWw5aEUmRngscGQ6dzkhP3V0Vm0yX1N0ZiRqa3E7Zj0za1lWL2E0NmcyJTdS''@;'; put 'put ''KyhEUDtjQC86Vz5oZ0p8ZVRGPmwrVztUdix8KX5MNXdwIV1BRik6Z1ZDMyVZIS9fSFt+bDZLZ3klWlo3ZDpUWDk1Zm1tOnxCPmFdX2ZXbDUiODdEVkphd2V0aHBHL3BzKnhkSy5nbENUWDEuNkNDbFpNcEJEUGFrZzUoeE4mTUckbUF3YWlNQGBLbzxMN1cuVEAuQURHVkhwQm0uVXxmeFlBUnBF''@;'; put 'put ''TGlPInZaeHR1UWQ5RiZ0YSk9NX5QdzhfRXw+MUlQT2pHOnVJTnZEamQ0Tk52YV01W1pGbVVgaERSMisySTElVUd+amdTT0JIenJCcFh0Qk0sMkcvZ2lER28sSF1dfC9He1dSJEVuWl5hcUpAPi9JbUMwOTA2PlZhQ0VvTkpxYXIyX3lLUzYofUVIW1BpSlYua0tDbDk2eD92ZTV4UjU0Szc7U0VI''@;'; put 'put ''dlZaZDU2NEtYQkxyenZray9pfmVMSDt5Z117PFJaYV5PeS5GN3R0RWdZMEgpN0F4L0klQnVMR0slZ2FBTFZGQnEyJTs2KVd1YD9FTXBCQ00udjVQPTp4PGVHKSEwYTV1PWN6TDVxWUw+dWAjTVh9VTVdfkZpbXoxfCg8Zn1oNDpQXVs9K0YoNjdacEdfPn1YTiosYWw5OHYpND8oIWtNLnQ4P3pr''@;'; put 'put ''PFFUSTcwYEBqWyN4KFVEIShbRnJDeiFdNWAjV2wzSjtbelhMYjJpOFkiOXtSdlh9Zk57Kz40SSJMY0N0b2ErVWlZWWhdI0JJYlglSGlhMktLRndmT3pOZTQoeD9UTEhlVnsyPlNnQXtYTkM+ZTs6V04jSjxTbFJJMHJCMXQ9fUZCPXQ6Z1hNcExBXj4sX3E4MyhTYzM1THhkfD0wZ0Y5fHlgdlI5''@;'; put 'put ''Q0VaTE8+ViwrZ2leMDZJSXNpNDt5Z3lgTmNULDBHWyh+ZVhddXVPZzBBVDw/VGI1d21+RX1JaXRxeiNEZV1APk88IUJUbThjTm88KV9yKWZebV0iVyZFUy5PYkF9QWU8cEZUWGpQKUFqekF9bjdLJGtfRXR9NDJFVkpRYz1jblhRRGE0YS45IWN1YzBhR2QsanwxQigvPXU6ISQjR2heKDlkOCNR''@;'; put 'put ''QVBIX2ExZDohP09yPVZ3d0cmQS5oOVYxNHB1VSx8ZEBoPUJtTGQvSDVOMVpYQzZtMGdYTmp7dmE1cHU/PntGImpPa0k3fD9bO2BIKWI6NTdhI2d7SmJMX0Q6ISxhfS81N0dKJk5uTE1pPDdMVVUsbk5+ejZbN25WSikkJkR3Nmp0KlhGZ15hM1tBMzt1THR3JTNqW1E4N2pyYVlzXXxCR09TaHA1''@;'; put 'put ''M2lTKUNQVG1HZTp5NndLYSs4WHZMQVNCMVc6T1k1OiJJPFVFRXdtZWVrc34+YUlNM2ojMEt0NEtbWkI6S0N4blBiPVRjSW08JShRITJSNUVofTFIanBSSVF3NGpZQmArLkRzT3QjcW44WUtAJmxoWHlKYFF3dT03QUpncj9Kd2czKnN6SlRrTF0mSTJuRWYjfkRHZCo3KixVLCNGYnQhKFdYcXVd''@;'; put 'put ''PmkrTkJGKnVZbTxoWHBMRndYY3dJaU5+MWAob09ANypsWGU6THVJKkhRKE5CQChUKFlHbjBRbnxCbGFoTHB1aFhwJWZgbEVCZV8rfklmQEZNfnk7QlN1QT9NTTtoMWR8PVgyQ29XQl5ER3ZqeFdxSU1pY1okWFFhK3gwOXkrUWJMe2N9dzVvOiFXL2A5UTIlOFB1KE40Y3VwejN5Y0MxfmRKPyR9''@;'; put 'put ''RkhedChfbng1Y2Y4MV59VyVaUkNFa2s4fSFzVnM0OGRXNVtEY3wub1VAbFM9QkBqT2lJTihbTDdKWCtscmhWRXZXfEssZ1V6NjFEPWtqYH5gZU90Ujd1IWNAKlpuQyRHP0VUYFtROz06YTJpW0RmYzJGb1tUUz84bjJwTCRHal42fWswJi5KcD1ZeD8uRkd+QXRFVXoqT21FJTpZQiQzZCR+Vzdp''@;'; put 'put ''JVROIXwyN1Q/T0J7fikjWENSZnt+SmlkdipuP34qSDRMJShufmRhY2V3fkw4KD1XR0lvYEN7L0t4MUVhUE41Y1t4enJRL1heb24zfFYzKEdiLFhbVn4zfV55ZDgwSyxyMX56b0IsSUpCI3xrY012KnVQeFguPUNnS10pPX1KT3BET3pVPFZbcyJiX0BEaSk6dD5tWXM7NXQuNUZYdUM3TU9BS0Vk''@;'; put 'put ''RmgjSFRXI00jO1QrNl1RaTp5d0s+NC5zSlZPKWZNdE4lYDt2K1FneUFLI3d8LHRTIWxjRzpXX15RSnhoJUVSKiYoSllkdFVPa35KNzApSDZiRUZFcElPKXhZfUBnTkgkblB8SE4xaU5RJVNtVCspajl3L2FgYTRGbm4pTmsrJFRsbjpMVjIiW1EoI203P34/Y11LV0VZaFZITyMyWkNzND5+WXoo''@;'; put 'put ''Q3VNaHAjbk12O3xsRkpLV3ZtXWc0Km19TUhQeSpxKU8rQlFIYCt5eWlTSEchSGhEWk5VOG5pIi9DWS9YKGk0OmI9SW9nI1hsW1NTMFc7SktYaWdnZ1YwOXVwbnV2TUt8cUE8RDFadTA3eSQzdUFIYTlKY1N5YXxifDwsKSowd2ZIQi88JGNvZiwuKkkqWFZfPi5RcUJiS3Nha29ObH52T3pMWnFN''@;'; put 'put ''UnQjLlFpQz9wTC9eL3BwWlpRK2Eibk8iIkZuViUvXUdGMD5xRmY0dlJDeU9fNlFEP1RpWmd7fVdzbk8kc0ohT0ZCTj5eQzczZXY6Xyk5NUUzVDVFME19MnElfTIoWDJEYzcoOUp3RFY0ekFVKkNmaExPQD9uTGx6Z0tIQk5LSSpLQGVpVGlYSUxdViM5Qk1zVS9xOlhZPUpWXzArZ2duPXV4OV0o''@;'; put 'put ''NXJwW2JgMlQzaVVgaSlWZkRfYEEpOXN2TjlGMzMxRnFfK24yV0JCVXc0YmgrIz90NHo4WVN6KCZlPzg9JkdUOywvQHgxbExjJj1HKDhFY2J2I19nLyhheXlhdSRuTiV5MTx4ZVhSeS55VHhpQW1namVdInMqTURdNDUoUTNvZlFgKihkeFojQElpKGF5PUsjKm1fVHRHQnZOTVJdTmlLcT5RN3x2''@;'; put 'put ''SXRzTCROYlhpcWFWOHIwKG9ENEYocT5LbUMrX3pjNUkwT0I5Q0V6Oz96L0Y1cGdiMkB2dFtKSGpkNStxaXFAezYoRFtAeH15ZXVwYFlTUCxAbXNVQi86dmpxfGYwKSNoL3c/VkRmO18vbjxDakU4KGJHJUVRM3VhW2c9aG0rJjUvRHtEci9BJjwzVSshWiF7bXd2ajUjbT1McWlhJF4iOzh8YnZ4''@;'; put 'put ''W2NpN1s5SnpLJVVyKyozNkReWzFMRyFgczo2SD5xX1d8e0pCQUZHMEgvQClFLlRsWmpRejw/bSx3ZTlDemE3ak8mQ2NVZytKT21iZXYlIiQ4NE1tbUB6IVo2PVQ3aigkJDM/YD5HRjdHY3dtVmxZT109IkdoNUNfTCNee05kfVJjaDJXenhAbEwwWipjLi5RXzVZbj97NDVraElbRkAyfmN9Sj5K''@;'; put 'put ''PHZJOTw3K2lSeS5aemJiPD15PEVTQ2U/bzV0RldJZkIqJDMjK09CSzI0UihPTTNfcjJXXV96RGF4KlJCQjA5RVZyVXR0dDpEUE5wIzlVKkxScmNuQXd7VDJJQ3ReUnF0fUV8S1lxYHlkSiVDeVVJSXMmS1U1Z2BUakw2Pm1YT0FOWkleYShKdzRnSnlYXmBmPHJyeFIuZGtAdn55MlQoUlUjTUln''@;'; put 'put ''Kz8zR2hhayU1cjl0P0dxejRdMiwkRnxfay4yNCopW1ZZPU56LmRsWFdGQCgkfTUzZz1gWURmNGc/WUdWeHh8TitqV0o7KnJ+SHIlOyQ9PipmSTsxKzRbZUAjdUZKIkIkcVJ7UVFrNUxpSz5YSGxbeiF5UWlFTVltc1drN3B4bjJLREI3amg9ZVNQK05Nd0RjQj9EXzN8TEQ3L2JASj5gJks8eDp8''@;'; put 'put ''Xk5qdWxWfGlZV21CPS5bOiNGW1gwR3FiTmJCKmVCb0x0NXJ1YiUpRmpRPUcyeCw7Y1VXKGdUYl4iKFNTIUQ4QTIzKUF8KD1XanJ6bltLQWsyKU1QMCx8T21PTjJOP1tsI3pEeWJsQihoZ1QzZHUhOSkqMCNET34qI1F7SCg/LG9tOXE3MFdpaExCT2hITnVdPEwoXiUlPUl7JWBKQWNrUUAmU1BL''@;'; put 'put ''P1QpQV48RUF2Mjkyd3VAaTJYQD5VIU1TblIrbVhVdXFNVDwhdnZjQSswa0Y3XV9nfltRTzI+N3lQP3hwdGwzPWc3cHJjaHhXXjhxVFJePkBKOEt9LiFYXlQzVHNFVn06Q1dSUlIwQVYzKjwzdkd2ZXc5KythLGl6TnZRcj86YlRUV0s4ZD5Le3hZLn5XdVM5ZytMOjlDeWpLWEN2dUpDWmNSVzo3''@;'; put 'put ''SCV5dXB3U3xnWk1KTSF3ZHhuRy90KmlramFvP3Z1KSJnS2tsW2t1L0A7ZFpxZz0kay5zWC44TXg3V0ovelhEeW5oU3tbUSZ2d0J+V0hWeEZVJkk3NHc5IiRQfCtiLHxedmNdX3l8OU1NV3xXTl94aiM9KWEydCt2VDpMRV1RTFN6MXlxUWNKKVNOTE1rOCN2fSNFdVZfTWMxW3chWCg3VmBxS0tn''@;'; put 'put ''Xio0Wi9URVk6L0BPJEljeylnVnxQVykoIiIpNWB8RDsmOm89KmkqLGYyentrIj13RVc+ZnMhdVRFPHpCdX1bJG9tIUw+dWN3PWNMIlsmKWZwZSJqOVUlbU54eSNyI3d8eTQ8Kng8cUl3ZGhsZzkoOmxaTEAxZWA7amt6WUl3QVtgQU5zc2deJil3QjBvV1k6aSRtUWksKCx7PGkzMXA9dkU+RjdD''@;'; put 'put ''U0tMW2Z9bH5LM155KisoMV5SNklQKDd1fDJPb1pzI1JAVEpdJVRkdik8e3RneFZzKCFjc3RJRXlgMUduak4ieSlCWiEoWG14clR6NCNxaFpgQHQpYFdhR1p4UzNuc0A0XXZ4dloiO2t8RnJiYj0iS1F+OlQ0fWQqMT9ZYE0seVhySXN5b0R6JS9bel9BIUNnJVhiYThhZnpbbUxPWj8kellCWnkr''@;'; put 'put ''X0puQldRP3BYL3RHWSRpJjlqQzxiWClCdDdjZXxQTXxRKnZeSFlWcEJgRT5MQ356WCYkNVBXenN2RGEwKXF0ODhZZ3VDMzVwLiVydDhhP206dXBvY1JTMjNDSnl7KGdDeWIuclBPKz08ciZDU0Z9Vzx4fSJbQUdDayVCT1FUOTswdjRHaDVrYXI6MUBeX1dtXTtqRmpZPWV7bHM2Uix8cytOU2kz''@;'; put 'put ''VWRQWEciTmgpc3YoTU5nWEcyd0EifUNNZ280ZWosUWooNmp3PShjVThFe3xUPENdKVh8cW1JPlhAe1l2N25QTiZGT0xgOXA+U048cWI0L1ZLV1paej0qck54dENjYjpNI0xzSkZCIl5kbClvXV9wPm4pUTo6WFlIcEZYR0w/S3o7LClCb0lqVSsxL0NfRnszakslZ0xtYStIIUpVNEdKRkJLTERK''@;'; put 'put ''MT1IeV8uL1BXNk0paUd8RkVYS3svSCxFKlhINEZKWk18YEJiKGNrJFUvNWFDTE1uPCVvTGYrSyRUZkRpSHZSUFdnKEB0K1dIPktPKG81NG5CI05md3QrbjZKQ1tGJG1yaWMuMlh+MjZDeUZ7VG8yRSYwbiwpSU5KVmNuIyxlJmgjZC82WF1kJDdvTXtHTU17QEdTRiJlYmRvS1dVaT97R2h9Pk9A''@;'; put 'put ''UEVdZmNze3IxPU8ja0NSS1V3bVtBRDhVYzR7UmJFWWRFX3NQU29GYCQ1Zi47Uz9YelgiMnklWF5zRyU1RW9JdH0lWHo5XzRVKi5RZkBWNUM5cWF0dHQjOGorY2dGRjt8V0N7SmllbV8hX1hydER9Q1ooYGs1VCpDXSU3UFcwT0Q0Jnd0OUxAenlCIlQvMU53cCJyU0hMOXd7Mj01dV09RzdYIWFZ''@;'; put 'put ''ZiZOYjQrZ35fTFZYcW4reE0ueVY3bG4yMy94MTkpMH5wI1ZpKl16R09ORGV9PX4qeCtfJWNtS11INE98YnBjWXxLISJdYCJLRmlmcEloLFJSLy5nV0E/NGl8ZSgwfkZQS2IsMmJmTU8raTcuImlVT3QqXnlXdCVeW2l7Pm41LkV0XTdqLmRIM0ZoQmRxbUg9X0tgNSklIkhET1QhdDBNXVFnOWda''@;'; put 'put ''YltDKV53dSRHZlpDd3VEbWxCZmV3KXV6MGErcVQjN3lGcUk2bXNLWGdsKHRhYElnRTZAbj5ZTkJ0TmpzaVJ5TWU1VlokUFdsW0Mqd0FJWHdpRUVNaTQ0eWpWTD81PT1IPEAlWmFOajFBemJKYjxgTVBTRWJMbzpJfio2JGY5eXEvSzZlPjshaltzMVlhOEUlL31PN0UhdF0qVTM2ayFwXSwmWktl''@;'; put 'put ''ejFDSzw5eGhxMnFjJiRlc3lNXkdyT0Y2ZWE/UXB5JiteaVcjYSQ2Kz1bJkh8RzJsVndLUiJGK3dyJD5+ViNUU3FTcVQmPVY0UldJeiJjUD1RV0lCPkw+bz4uUDk/PF81c2hUYTF8endLSEZxT3FYZlNwcHBLNlpYZ3RUelQpLn5tV3owZ0clYj9HKHtpdlFTcn1fdmtiTWQ4MD0wIX5tX2NzbXJp''@;'; put 'put ''S3FYR2s4RS5HLHZAdjNfOz0rdntWLlVfNSUod3tdRDAifjt9UWA7JSMsNzBLLDtAJXk6RCk7YUkvbDhIXiNjZ11AaT03fUFGS1YiOis3USVqJWNnRFJNQmJzYl9BP0VgaHVadVorIj9DYGpuZT1dU0o5Jk1EKyVQfXh5WyJgbnxyZzB2UCtza2xWdzZaXWJ+Y0JLP1B7LmdJK1YjKkxkfWEmSyt4''@;'; put 'put ''K3BTfmZaIkElUTlLIys7Mn5mayZyYiYvOTVdalR7VS9JMWsmUW5pVDw5fS99WFF6cnFXQEtIQWpufiQoclc5bmhdTlBlfU1zR3tePF9XeW5odjUpY31NNzVfW0poMDVzVkhGcU8qV3JpazhZZ2lPR0kjd3cqTjBZZzlOR0lBZHM9SGpSUntJOHh+ezhnc1E3NUBwcXxBIVh6T0E8eFdQWFNiSj5e''@;'; put 'put ''P2I9UGY9ez9rIXdNPVEsYFhzaUZQKDM+UmwyUzU/Jm1BNG93SiE/R1k0NmsqKm4rY0V8VD9HOm5FYWE/KE5BdWJlZ1lyPTU/KEpyPWkpJm0ubn0vdCR8eXo/byRJcFs0cTM6biNMTlVUKTApTT1ZQSs+aEpwUldYXkIyeSFSSEJLMD9gUCs7JHxESGkwSE0sbkNvR2cuV3owZzYjZ3w8TGBmPTgl''@;'; put 'put ''RT1vTGd7ZjE4cm1MbWwja21ed1ckY097V3RJKkZmTCImUjpbM3NAMU5iUihDT15TeXEvVEtZTFFAWkZxbkddKW0lbFIhQkFZNGZsYUNALHNFSndwSXkiRDYzc3J3ZW5yM3Z3ISRILj5wJl5yWyk+JiltVmc9aVtfJTt7PHBjbXpkcXlzeX15fn19VDlpLHZSbU0uIUpKIlc8SklKYEB3OUNuIyNE''@;'; put 'put ''eStMcSo9VUF7Nlc2Ql0sRHNxfklLempOX09Hfk1FI1RGNWp6JTMzXmV6b31qdS90MlJPJld7YEIuVX5aNEgzNmZCQWVmflcyKEF+Qm5LK1ZoWX0yWUxMeU1Nfm9IUWdlKWQvQlpjVUgmNzNEODRgeElSdkdaMkYrT2VSIjx3dTEmaTdIaiE9UClvW0Q1X1JZe2JPei5PUDUleSZpLGE1Qmg0P15+''@;'; put 'put ''eG99InAvSXljKE5KNTxveWMmJDc0QkZWUSt+TTU6cSk2fjJAbnIqY0g+bmoqfjJBPXg7dVcyOHJtK2xiKShtTGd8PHpscW0mUjppZDtnQylOPT8oSlQmXzx9bUZTXT14O1ckWD0yOCwrYmV9ODt5T2d8PG5KJUVsR2khQFN6KzBiYW9zP1d2eDo9fSN3JEdUInNXcH0mM0tudGF4YjtNdnp+Q2NW''@;'; put 'put ''UTBlTHY3P28mS0x2fTlEOnJaVUY6KGIvdUNHSjdaTVh3bkhMeS86RmxkaXpxaV5KZj1YMDhUdUw4JENRfH5YflhDcU9iVTJKKmJXMD9FVj87aDVgJjgwQFN1cC9OSjgpeElSMyo+P1tfeHV+RElzKE53IVQsXyU2Kn5sWXIoQncjJHx8Jlhbfi9YaW4/YDFlKn56dSRNTyVXR2xuIUNfPmZ8QH5y''@;'; put 'put ''bWlua31QZ3xzejQhVF98REVbfjBXaW4uYFVbKX5Kcyk+dFs5bSR9bUQ+fiNWaW5zP15FJH1gNXJqVDNId3N2UFY4aTczKUw9UmZnU05mPTJoXkU/T20ySDNBJVZFQ29zT3ZJWEJ7UWI/Uk1YcSw+SiJ5NH5JenRneHlaYjkvPFBWQlJyT1dUImhqUDJaYW8sNFpFbklbbnNPZkl8ajQkemZbQnw1''@;'; put 'put ''aGhGQmd+P3cwQHZYbXZZTE5VN19HMDFOMjohKUVyKT5dKT0ydCtAflBWaW5vP194I319PTReQiMwQEF1MkliWjpARU0oTU8xU01RJi41PHYlX1RrN2tvWzdSbHZ6K35+MkpiLlcwXURhU0ovXWNtVGZKJn1WJVdoLklRazV+TU4xeVBlfUtbMHtjNVAjLEk0UVtIZCZKT2sjRnU3ekYxb3U3ekZJ''@;'; put 'put ''I11zNjBkYWI+L3h9fVU9NEVDYk94XjpJSUEiZTI9OGNUQiNqIlJhbF1edmlUcXZxITU3NDc+Iy5gMjFDdDI8bjshMipTRGt3eF59TC5AfnRQIzNJKl9ZbSk8T2tlb1N+Ky5UTSw/dUlSLmM+dXxJSzgsTU8xITxRJiZbKy81Sl1Te3MvKz41TmRXMjlzVWdhb3F0WHZJMV4+K3hmT1V1Xj5kPDQx''@;'; put 'put ''Py5vW0IyQjhCO1RTM2BQSEtubHRlZVZbSU1rdS5ac3BqSTNJOmUxVSYzNylNLCx1IklEJSZgX1lncE0sKHVYUjZtMjJlR2FKOnhbQ0EieWN1YD5xcjUxWi9eaSs5X1VzI0ZZPDxrRy5XV2l5Zz5MdlY3LEpAfHU1PD52TFUyfksiRnBbfV9VdGQrKCt4YGtZWDVGK0MlLHxDM1FSalY0Lz1bYHNS''@;'; put 'put ''W2QrKHEiczZ8IjcjM3Y1cVUsL0dbJmBPTnFPKkclKGVXNmpuVlZHb10yMT8ubVIrJHMvRloiMWwpTTZFeWhWVUZrRVgwYURHU0Vvdz9mLm9bSGE/Lm5rUVgiMWVKKndKLm9bJW99LHR5Pi46NXVgX1l1Pn1jOk1NLl02T0pGWHpRXj81a0VBWCYwRXVTKj86aGFDK01XKjhITkcvTz5pcG5HXWgj''@;'; put 'put ''MjFfRU4vQHd2WkpJUl1gY0hsJWowTSg+eFk7WnB3RFhSXT1+SUspPikpZmdgfSkvYHNPMyFUPHxfJSF+TVRyKGd2IVQhX0hJKX5IU3IocC49MmZ8bXI/c2ZhX1MkMERecmdSfTEwaE00R0t6X0l2IVU2RzldbiZsTyFYIW97X0ksZWl2Jl10KU88fHQyYWtGJWV7JD0jJThiRSxmOkRIPGxbZ2Us''@;'; put 'put ''KDVCL359I2ZzfiVtN2RXVzhfW3pzVF43TXt8OnRaTFF2SVZCfnpjZX5MIXtIL2BJdFJ+I0heS2UzdihATnd8aDAofkY6Rjc4YFJxckxHRlhMIyRZQEkxVHw2SGV+ZHdvKGRJaG5NdmZncT9ISWp8NzBXVylwayUxPyE7JX1lYUo0Sm0rb08vdzlyfGBTI3MkMVFxVF0rOzp9VXJoKEF4UXFxfnFw''@;'; put 'put ''Zl97PSNRRX5iNVAoRnt+fmUwKWhrP05HNn4xfGcoTCxtSX16M1kufUcqOX1rR1coKDplV3NBL3YyLztNdj9iPDFzVTpROXpzQElqKEdPUnFKfUB0MHxQKSJ9Z3QsfiwkfH5yaWB+S2B+fl1xInM1VnRXW0ZdWD9EPC86ezR4NHlvYTwvRnRea0NANkhpMTdNcSs5R1N7PXUoPjlxInMufFV4cn5b''@;'; put 'put ''KD1RcDczWV1zNDdlVz8+Zm4pNlkqXXxCNmh+O3U3VH5sMXI+QlBRLEQuVnoza2hCPz1lanxZNXN+cjwhaCRNUnxdQ0xjW3RCYXF9OzBUV3JdZiRsc2BaVEVGQkomXSt1RF1zbjQycmp1KWhnfj5EQH4wVjxRVkhVeHVdVDx1fmtBPHNNZ0JIVEAubDxRPixVQj8/TUJdYEFCNXMveVMoIWJgfjhM''@;'; put 'put ''dShfQG8xe313PyFzeGdsSWJ3QmFHQGI8VnwqTWgoeDwmfDZ9MShpc3BuZ3MqeTY+V3xjXzRIInNPdCloUj97O2p8RFlqfjpJM2hdT0VPYjoxIXFfeCtrKGVgKDhkczhGY3MmfERFOT8lQ2F+UGR9fiVNdShKW25JfX12aSNzUG1sSVF4QmEwfTpIZHMzeGZuP31dcDI+a19jX0slSEl4Km9GNn1I''@;'; put 'put ''Q2d+KXgifn5EdSgrezBaVHwuNWtzWi5RNHdjZCt+KExNOn1xNWwxWClVQkt7ISxkKCN5Mz5QY1F8QDIpaFlgcjhxfmhLI2hOVm1JWXovaXtzQkQ1eUh1WSpPflo4bDFkKVVCMn1IQ2hzQGhTKFRjMnJrdiloPH49Kz1+N3dtSWo6Yk1WYEtebFdUJjR5I3VZKl5zbEMlLDNgZCIufV8hNj5WfDFy''@;'; put 'put ''Y00vJmZbbzF+fipTfn5uNTNZMn1FKmxzZ0RSNH0pT2o0YGxxJXM/RSUsbT8zQTR8ZU4hPlJqUXxZfXMvcHNzY2goMzNJYy9ZJHRJLipPbXwsKVVMc3U0bD1+OyEoaDsrYjgpXzQxVkw0KyRkcHN9PkRPUHtKeWxfKnUpfSlzbigrM1FkVn1sZzs5NWU8MmFDMnIhYGB7TExkWDc1NEJpc15nYm1i''@;'; put 'put ''OXZeTiJuTl9WKUZfaDhZQmBWVz9NZDxaXn1XTEJmPzxIL1NnQWdNPVZYLjJJMVhnd2p+P1MpfSReNzY2Q3RCcW4+STZdTWxoVjl7VCtfUipROWNydHU0ZEJVbCpSZG1ecGg3d3o1KiNAKnlxWWtgKHRqPDFbe0RAVFJYOyxzRSs3aHgvbXRCSClIZnBfWlJHYD1rZylAVCZnVn5jQV1qdno8V0J0''@;'; put 'put ''NVYrKklKcTk0Li86bFJfLy8xfTsmdFNHY2p9dVNKbkRNXW5ibXVlSjxJUjIlIlJGZy44TW5ydk19Mmh0cER3SkhYXUZUSHk8Skxubl1JeDR5Kl9YS0NBa2xHLEwiOUdReGl6UGpFQzZUTzBGRXNYRj1JZE08RSZ9UTpzUGUyYXx8RUMrPmFra1BDIWw2TFI1MkQ1QkVYSEVfdUR6bTs5TVdDcS9Z''@;'; put 'put ''UlpaN1Z8fV4xPy5dXzZQRTRMOFBHMXFEOjVpKHI2RVY8OFZ9NHV+a1c1ZnROV0dFNWB+Qzo7Vmp3b3NoNVh4PFE5WmlVNX1lR10pbD92UUhgNk5KbGtOOC4/fXFMQFZAdHpWIUJVOmZ+ZGl3W3ohQGokQ2ZFZ19+bFt8ejBeMUIib2d1R1tMc2M7TyJJQTM3KykoaElOUnJCZkQqeVclP3U6R3NZ''@;'; put 'put ''N1BgU3g9e0RBR29bV3RKNCoqKmBrUnxSdShTXjs/WHxJTVptb01+WUQwIylDRz0+e0pbKnBgL1lOOVhPL3Q/anRbTXRySVBHRGkxRmlUYnRFNG8xdUcofjJ6LDU6dUhdO0NqUCEjUCQpM1o8YUZWflI1Qi8kIShINWMmMUYvVUQpb2E0V3hlT2J4ZEdkdH4mVCRmbDMzKX1AaXszQ0hYclUrVm9D''@;'; put 'put ''SFk0My4qSEl3ZjJAXzx0Kl8+UkVjOVN6ZCl9MDReVmA6fE8wekpOVkxOYyMhcUA4d1tWYTFRPzx3MWhQcFtAYkRaTGh0anZgUk1YVUZTN1VFTDQ9Q0dbSlEsP0Axb3xuIy9nRnZNMGNfSkIqYEZZbVN+LjUvO0ZoQWUqdWpdLCorYlZdaDxoVHxgNTtRMS5sQll7R0pCRllSJEdxfDdZXUk0Ll0/''@;'; put 'put ''dmpganl1JX1RPUc2aSN+dGVMRSxMfDUkRyV8VWJqI35ATX0uU1E0WWBgemQmPjZZe3I3ZmNNd2l2Kn5DRCpmfURYIzpXMml+YS8vViV1cnx8YiZiSWNIYjY8JGtJd0RLQHc5RyYrST0vViM6eFZxfHY2c3NoWkdNS2JNNmo/SiFRaGJQPl9HTnZ0KVAjR3goRl4hMVR1UX5yUCtBVTlbYURVWD5z''@;'; put 'put ''P0RAQW9yakBhd2ZiWD1DcElxKyxlQXFDaiMoJXJ4M2clfFU7aTpJV3VFW1ArSF8oMlsxIkJqQj0wKy8wSlBHWVI/fmlIT3NyQlFBWUxUM3g2YlNhQyFfOnY2U1dTb0xgWEF3QiIqVCtvcSpdd0IiOj53W3dmPVNkOkIvK2xMZzR+VGtwdipBakRhSDIoXiQ0cGJQfF8xUUJYKlA2TmBSdl58UjBu''@;'; put 'put ''a1c9UntRUmBKd0d3elBZRy99MlhBNGRnJlF1eGdfdFZBQypvOnJiPywkbmJFT110YDgvWlFCciJ4d0IlXntmOmFMTkpILiZzVFs0MW17Y3gsUkhEU25USH1rZDBJdDtSMy8sYERpa0VHLGVASEk/fDZHfSkoRk9jVn1pdF9yVzRYUmdZK3V6flAiIi5UOm43ZExgKXVEYnxjSFZGKyQiTFh9XldD''@;'; put 'put ''V2tGMkVfWCpMY3NCMkEvR0EkTU8iK0ZrSXI0T2kxTixIeShuRUw6b0koWHkpS0UsamxzeVdeOTFpPE9wYXxlZkJlcSQ9dVl1aVRhYnxreElXRnU3TEZFbys1fVBQWnI4cmgzZi81VTQpVFcpcS9kPjBSL19FS0N+bm9FTmVLNWRBfHIpMn00aXRldWEockk6SVgsTnUqUlUielhwYCIjc2NKWndC''@;'; put 'put ''ZEJMOk9XKW8kW19LQilASG1XeGN6RTNrVEhRITFASTErfDJTWCFvdT5HOn1gaDZyTkxlbFBNOUkpPmFdPy5rRVJqXzJTMXVEInsiTjtibCt+T1B+cExFL1IpfmBrY0ttOFRvUnJ6NyF2PEVNSEN3bnFZaUNhWXVvaiV1LioqJVsqKnNwak1xWkQ5N0tmNCVUIkNGWEgvVlddSzVmeEomLEd7bFA6''@;'; put 'put ''JGh0MEQiTDBBYFZGIiVJKlk2OHBQK3Q8fUMxRVg4TTRYQTRWIiJ8Qi9ffUZjJGY3ekZEXnRjSHVbcTRdISF5cnU+RC8qIjMvJXxVbSNSKGVPWFNxUXR4WGNyX0lGYSlnRjRvOmxIRjQqMVhPPCxHUnd7YGpUbGpIQlN1KyhEQ1ZRZ0RFIn5BWXZZa0d1NlsiLHJgTmtjJVdJd3Z1alAjXkBRWnJm''@;'; put 'put ''c3hBJDl9cTZhU0YsQyQ3eW14Okl0K0dkcllPQTlyfjMrY2BLT0Q1Pkk3S0I0fCZPU2lVRTVGbD9VeGNPW1c7QSEiJWs2U2RtTXYqaXpLc0VHN2gqRis6Q2JOQENrRWhuPTBWPmdKZSkoQjoofkNMTj9WWnVmPHtFL0IhfVlNPVYhdl9neUskTXB+c188Vn55YFtbNHB8ND5hMm9WfmVlO1p+OFpk''@;'; put 'put ''MHc8PVZ4Wj1iT2slWVU1a0kueCxtZmUvMUQhJiIwd1JQX0kraFUpQlNXTVsoc1VvX294LHJRIjJxYCxqfiJjISpQV3pFWXZDU2xeQU5BWylUK086Vz5oYFJ4aUlJZ1NLRHZXdGtjR1JKNGs5a14pbjcvb0gua0BHMyp9cEU8Y0p0fixlQjw0aHhTMzpCKFhjI3I/Kk9ZPzIsR0NvaCFHbXM7WmpV''@;'; put 'put ''dEJmR25CQTgyeSZhe3Iwd3c0K25DZ2huNElNMl9JMk9LN0NgP0EofDtUT1g1cFMiJXNXL30zRURjdk41ai9LNFRAWHohY0BHSnRQSG1bfkBhYjxEYnx7RWBqWk5CWW5OYFMxQmQjfChGWDs/V2puKkVmUHpwejQpZEZJdEVGIkNAQ0ErPnFsT25YM0wrYVUvMmV1VVYwIjltTmkiSCxLdWF2WEJd''@;'; put 'put ''VVZ4XX1nKnJuIVJHMFkjNDhAaXpwLD9GMkw0JnRFZiRHaVluflFjI01rRXAmZilLPDhmXj94Q0FNYyw8bz5ZfS51dV52KlspaCRTPmNLRjUoPnZdMSlGUFN8OE0yb0lKUzcvPH1RbyIzZU5uQl0odjE+czxBNjwzOkxQMnQ/LFhZbnxeTDFbUCJ2NW8oRn0zbUNPdkc7Q2NzZFJfMzVAOX1ITCQ4''@;'; put 'put ''ZygubypvbkVlMmZoVnhFaH4/RnFdLypnaForfmM0fi5zRGE/biN6a30pY1tPRXpJZjBRcURINjwxVkhSaUx0X09ETWNfNlZEIT9hVnhvM0dQTlsmYCo6aGphQE1FVSp4P2pXPzN2JEB9UWdzYHI/diJhTWk0eVc1SUYhUEJEV1h8Pnt6ZlRrfClJLygjaTZDb2B0TyssI2osMnFfXVFVPHVaX1li''@;'; put 'put ''OmJMU0tILi5LSEJdciwsVVJPLF9rI2d4d0lZY0whQ3QoUFgqZn13ZlZiUDRYezM/QS5tJUJCbzl+eSs7OFEvImE0ZGExZmd2W3J9JC5Je0B6P31uTCNyY21HbWtkPyxeRTJAOjtlYV9TT0JoV1ZFdGtWUlRRNUZFdDV9fT5DNEJZenx8TDIpNX1NdSIzblM+a35+PStHRG5ENS9MVHAuVkJxRXEx''@;'; put 'put ''JHgwM2xlJEc4N2p5Jn01P0Q9LnksdD5oNW5hQ3lBPUNrJXkuWyNNenx9I1l+Z0drdkx0NVVVR1hZfDJTS2FNYl52OX4hSHlAciN2fDt2RWkiVj4sPnFzIWt+WURFMTR0d1FTdU5zK0FnaThZJWxmVzJbc2tkdFtQcnZjITFodFAqbykoc0hSbFkhVGsjcGo0IlpZR2JmOV8/SUQzalVffD1FfUA9''@;'; put 'put ''bSF9bUNKYF9wSWF0VVJMS0ohJHRpNU8hfDR2JSpaNmN8cVBmZ2tIMyFEPW9oVzpkYHZnfn4lP15VVj1qIkB8S3U6cFpkRylmPX1yI1Iwc0g/RFUqWnhAdz07UWxXPCshVCFzXjQ7V3Z4YGhEM0pKMytBV3p5an01ZUZqWXwqPntDJjxuaiFdc3xqJFBAQUl8Q0N5LF8qbTN5XXpEVVFHVFhBRW51''@;'; put 'put ''OkQjdVRrQmwvP1R8ZG4zOiNtMmRoZ0p+cFhvYDpEditYNGkvXXk2akFWOTBLL25nO309eGIrPyt3PTp9IU9jbkowJn55WClzKDRAVz07TFVnTV4uTVJfeHUrOCQuT21fPkk3NjE9LGVtMHBCZm5wQlQoaGNvTGVmXW0oTVcoZGMrTUUxbU47SUc6b2tkd18xP0glWWJoYWdELl9tYmJqbWlEaTZT''@;'; put 'put ''YHV2U1dMWkEiZk10TSJvdFZTU2glcD8pWE4xViVMeDhVJjtYTTM/MEdLK0F6RSJkYE5vWE9vXzxdSHU0SCVqVGZVdzgqTTt0SS4kMHN3KU9AP2oqdEd1VyFuQnJMS35rYXordz16c20mYk5sWmVjQDVpXlBES08xJUpGbi9idlg5RSUlRShYbD9idlBRQXdFY0VVS3REVUxHaDQjQEVVS0JEZkUw''@;'; put 'put ''Ti9idmgjMHw/RzlQem4uQnRVe0VLaSE+MVspfl4sKF9jSHlzQ3U7RHRaMUZwNH12TH1Ya01MRDhEVTlzNHNhK3JdKm17Y14pc0NzWWIrYl1YUVBMPT53PWRXfSZFJWlXNCZFJUxVZC5DM2ltMHlWOkMzLH1te3l5ZHlFJXd8ajpJTEpLSG9uP0R0R2JKNHdGJltSV3pdWyRLW3V9aTw3d1JXd2FI''@;'; put 'put ''b0FgKjZQQHw/QUY0fVA7eXk0eEUlLihVdn55IkshNDFFaVI7P3ViWSh2eSJXNnwhYS55LmRDc0pJSG9bX3V8YEZ9Rl1GPilSJjFlUW9idmdTcSF5eTt3RFVvfHphSUxLSEhvO19Ya1Iofi42bi9fTTFMTH09Qkt1czVaYStdW3VibmdjVyhbIj8pOW12VTwqWyZOeHBbRkt9XnVaWzdIcFBvTkt6''@;'; put 'put ''YmohXTRUZGw4JGh6bTNYUDZEbz13PVFMWT1+fnA1Rk9Bfj1MJC5vWytfI2dbfmFHTGMsX0BkW35LR0xjK19HYnxYTS97fCRYWGIsQnRVQDJgSTlUWCFVVGhBMkUlaz9gOlBbfjg0ems0flJtTS9TfnhDcldMTzJ1WHI+Zk15cHZZdjltKiFsRkleZDA1PDxLTDFfJltPMltdfCl+WFdNL1t8WWBg''@;'; put 'put ''c352RzdqfD5eJkZzZCNte0xHWkojT3ZQUTVkbkw4TVhqT0puL2FDaH5Lclc0cT9aXWd+KnFXNCVgZV4hfjdLVzQkYCQ9IX49VVtMeDFRZ31NTURWajlfNSJrRVR9WXY3Kih+VUJuaG11W31wWFhCT2E4IX0oI0A1XzM9IThoMFlzZmYwYWJVcVcqKWEjcn5BcFc0OGBqMEB+QEVMYyNfOzghfldK''@;'; put 'put ''VzRMU0V0Jks7fFMsPX46MjhfTXA1PiFDQVJeclJRcVdPW1JdekNhOiFQSHhYMXJORXBkWWBxVWVsRkVyT01tZmVsdyxLek8+a3VtT1JtJVlOTDZBYld1bSh7ZG0hfl5TTS9SfmlmX3NfdUc3aDdITFk2cm1kfE01PX5yRExjM186UCF+bkdXNDZMcHN9dzh8WXZDJGFlM1AxX1hZQH57Q0xjMF98''@;'; put 'put ''fTl+VFNMY2MvNHIvMX1fOU08aVh1RzdbfW1UX3N+LHdkN31CU19zSEJ7XyhhLno4Um9fcU5ZUiFSVTZ+d2VsXVY+blBzZ3goMTBbWXw6Zj1+W0JMY3VfUzM5fmVScEwoa252MmpBIjMze3xZdnd7a2BSMW5LUU4hOHhTbWZhOndlOE8jSXhCTGNzX3tyOX5PUkxjcl9kbTl+flFNLyZ8R3Jgc3p0''@;'; put 'put ''MFtWfDhwXiJyRGVtN2AjXzJhbUAuP19pOUpaRHFXL0BpP10xU1tXSz91U0pzMi5uMmA9Xz5FJD0/fn0wRk9WfCVLPX4/SCN8VWhjbj4pUUNxVzlANmYmfn5BVzQvUiZ+dk9tYmBPTTB6a0B+fkBDSDp+VSMwWz9+TlUic2Z+Yldidlp1Im9ISCVqMTVnYF1yZ2BTci9wTjRyM2s/ZU9HWl1pNSkq''@;'; put 'put ''dT9+ZGBdfHNXNn4rekxjJX5Ia00vQWxYNGR9RXIxfmt+OHhNLyg+IUNxUkdaTT9XdlBJWE82KkBQXlp+a09zR19MQiJvOUY3aktxUTtpfTBqOnJURDwqTiR6PzBTR1pndEs1fXNAflt9OXsmLG8xdFcic2IsQXQqPiJ+JHM+IyloXn5rfkFgUnE+fiV9VmV5KGI/OTJDVFpOW2t+L0hmZH5XLExj''@;'; put 'put ''YHM8bnpOTjJ+fjp9MnpNfmcxLn1eMD1+UEB7N0RBdChpczArKDYqWjN3aE5mfCs/TS5WdWpRNHp+O3g6a3NbMkc/SyslT118d25Ac1sybHwmUnJ2emsvfVcoO0ppTz8uJmpoVl4wIX42OXprenNASjFRKDJbaCpUfVZsPW1yUldgK1c+SlNLIW0oYlU/P0wqNztIaSxKe3ljbj56OD5SN0xINEgv''@;'; put 'put ''bXIpQCt4OVFQTmJUQ245OSNSKD82V28rbDpDPX58SC99eXY3VF55MVRsfjFUU2BpSD9+ajs+em9iPi5iSSQzM1F7czhdTUpUKFRDNnxVaHJXI31bInFXeX5eOFc0Tn0hRFg0SWBCNntzb10qT11+ITpDSCx+RT8+eipVQSJgNH54ZGJ7SldUL194bTE/dCF1R2c9WlpRVExjOC49RzJgUFlefWls''@;'; put 'put ''P3NXVGV6UFtYdy98JTpWKHNteltQWyg8VVdzbVc0MmAxZWZ+Yi44SjFgREFefUopVVdEIW5XQm0lLHUyMFJOW2JFL3xPKih+QiFkX0FtISR1MjpQTls+RC98e3Rxfn5oS0xCPHFXQVRtYlkuOUcxYFh3cX5aPFpadzJBTk5bZEdefXchUjR4MmxPXn11IWBzMXZaRyhgR0BLOiVrdXx1WitjZlpl''@;'; put 'put ''P0ZNR1pZTTgpfH1FYllHKyhiPyVNR2ZKb2c/ViZFRWsvPjVobU81IX5pJFdLdywwRUhJZmcidXlnfltJZ1RUY2dGMXg1ek8xKX1banpwIzdlUSZxK2x4b3wlaSN5KGhGQX5bKGZXay85PDx8YmZXW2MqQnx+VD8jWl8vXVE8VihtdFV7MF5RIWE8UXZHQX1hI0Z4V0tqInhFOUdZTk1EYCk5XyF5''@;'; put 'put ''LGBudyNZRipndz9LKU5xTUdaSUE2KTBScnJ2fn5bfmA3WTx5Zj1xI1RRd2k5Kl9PK0lleitJUEdwPnlSLmEsLytoZT81dTVKdzszamJgWDBNLDAlbkpoVk9EUVImMzd7cmNjTSJYcj84QiMoRXk0ZUpgX0YvMShVOT92LnN+UX55M0pmJDNsKU0wSTo4bHNBbHNSQCNPQV1qZllrUExTdHxrW2tI''@;'; put 'put ''WnVXZllYfktGe296bzJvdHo9eUdOak8kUjhfKytEYitjTFJiPyhLbFU0azElV0tqYTVJeltnL2hPPjVOaVNGZ358OXxfZktSMTtWbFRHJXloUjd5QCl1ZnRRW1h3YUR7RCxnMFk3NVJ1fUJfWkdKLD01bm4/e3pYRXdFKHUiJj9MVWh5RkcyWEsjVF9YM1ZDKzJnUDNpPypaZ30zO1pbV1M+TmUz''@;'; put 'put ''OC5YM3BvaURTUn1ncFYhSko/RnZTOyt0WFZLVzQuZ2cyPTxAd1M4enlhb3JBLzgpMmVuVVIlYTFVMShiSjloazZvN312d0djNntjbWE7QnxGem92R1A2PTxebF9tJDAjRTNHMXxheCwhbGhNbkBoenowdlFEWXksPnpeWV54SFBDXmdJSGRfIWkhLnl8Z2hiOSN1S0xFaFt3ISRxLDgzVFg9Wig/''@;'; put 'put ''JjNoOWhJPVouYyRTckJoTyYzUCZ8P05lLF8lQytsUCEuLGxDJnIhVV5KIylpaT8iX1M4KXJJfDpsdXF1Nzxwbit8bVtwQF5XTSNFXyVmckZAcj5xayNfRyg5e0ZEOik+SERZLiVKI1JQRlRVPSQrZTwmOEZ+QF0oO2RLcFBuPFNRTT5he3M5Y2pgaWMwMGhScEJRJlE/K2AoeFBJU351SGZ9OEhz''@;'; put 'put ''Z3ZXciJaeD5LJGpsWT04UW84TispKlFSNHBDJmZyel1KOUlLZ05OI0VgOlk4LGwyKWI2MEZfUDY9ent7NkpDKy4ycDleWUlTSFEzJTxua0kueVptTitKTXYpVz9hLGskc0BJSyE3Nkc8MmExZV1gXSltNmVrUDNNNzhXel51RW9CaFFFbjw4fSY4LGpKfkBdcyRuZjY5Xz0+PU1UODJPJnR7MWpR''@;'; put 'put ''cn4wPHB1OXk9XSU1fDhdMD5PfSk7YXZQRFlTIXlFY280N0Q/WjYuUSRpT3UlYmwjX2osX3lAKCkwR043UkhmNyUxKiU4KUVdIzI5TD9vZX50ciwhIVpObVF8Qnc7RDBqK2h2JVpxWH5SZm5xQW1uey8/eXBFIyRibiVMQ1smYCtDaDlwRm90SCVoLyFabGdOKiFwbyFjU3kpLmFCTl9INXd+SUMi''@;'; put 'put ''XURmN2lkcCRNTkdaPWghfVpeKTojTX5qZHlNSyspXX1CTj90I1pgI3FGWDxdQ2UjM05VKSRTa1oiRiN6Sm9ZMClndXxpeT5mQzpbOXM1ZGxKZlEyJFpteHh6PWxgUyIse21MMCV3Lz5ALlJjW2IrWmAjWFcwdjdXK2N5UCQ/R09bPnpXbEVNYU15N1diWDJXVy88W3tCPW5jRVV0SFV5eXh6RGpd''@;'; put 'put ''en4oeXkuNCU9dnhgOGJJeEJjKGkwPzV4MnVFOiM3OFdhbT1feXN1eE4xOnZSRWB8UDp1eHpEajgxeTl2RiFCWE85b1dYdDQ5YilGN0ZGQEdhey9VYmN2XjxGbXJ0OkZsaGhGTDZ7SFpUWHEyWStaTDl2eWRedCp6ODNMckE+TzQjZWVeTmB0eHpVZ1NUR1g2UjlsXnRlVS5HIT9XMHZPdSVjYmRK''@;'; put 'put ''QipZcUdCOC50PCg/bXU2NEBNbkN6eTA9b3doVDFKVTd3NU9DbVkjfXVPdSVtJWU/Tn0wSGtjd1FwQmlXNkBMdllLN1VDZCJvJDU2KVp7NFJDNTtgWUkxOmBRNkB3d0gzYlBOMD81eUx+SUs4ViFBO0YqcDRsY1FXezZvQy80UWptWmJZekVpP3cyYFFqSG9tfTRuTE5gMFkib3spZSMkUV11PVQ5''@;'; put 'put ''X0hyb218OzwsNU1obDk1fEAxTFNRek4oI2J4fDdJKW1oWTBYM1F3QHpTR3BMe21odGMvVGFKPkJHIzxsWHYrTmx2KEJOQmdFSD0qREtNejB5SUo0XVYhc24vb21CKG5mbH41OSIrYUJaK1pFQ2cyeTk0eWRePUpwaFBvPzhISjsoUERVdGtPJloqV3xSU2VefCRES1o8eVt9QHVVTjx0IlgwWSJv''@;'; put 'put ''UGpQditEMlcjZEwhK3xsNipjNFgpRml0VXsjWjZBN0MjNDtpUU9pTlFvdz56LCVUe2VRZG1IQGg1ZDlKVFhoRU5nK0IsZHdPdFVlR0NUX25HSCN6M2JeN3oiKWcqNHxjMS8rZWVaWG94WzZYVzZ4VDs9RysvRnFJIXk6MDYpSERgUXApQFFwKTNoZ08mWmxXRVNUOyRBR1JQVmFCKUlAUWU3SSNk''@;'; put 'put ''T3RnMnlzRS9TODhVazd5QWomYUtDdmhMM1dOUnRiTyZaVldrU1Q7fExrTjkoWzlGTjBXbFF4eFNIPUplZHB6cXNpa2s4ITVGbS48eTZtSHNdRzAsKDpbZEpOcFlJQzxReilTJSJkMFB3N3ljIV0xPj4hUC9jdilDYmssL2ZFM3Z2XixkRTtBT3AyNnZhej16TlhqaHY/Ji53LkYsITU0fXVHekBE''@;'; put 'put ''cEJ6Y3B6S3M/dl83KFghKigjNVhldSlTZEd4TjpBRTZ+W3ZbeERFIjs+c1B2TFs6NF8yPDZGbE8hXzBDZVplM1hiUEJIN1M/XjBiUDh5Q2QibylvNylkSypOenR+bCZLL2pnbEVme1hHaXxgdU90VTpjZT9PRig5RHlSKmQ0YV1edk9XRFp7MnVPdFVjR2U/T0YqM1pVa0hmYEAyfnlsSFAiLiE/''@;'; put 'put ''bU9PIV8lOzs7JFkuRHIrSzx0TXNMcmJwSm1rcD05XyU7OE1VMjlXXTB1Q2M3MEwwLnQqc0U3U0locjJmJlMmcEomPDgjaHhPdVsyYU11JVdSTXY4JUZUITd1MlBHa0szN35SOkdJXWFMTWE1Yk9PIV9tPChSIihZTmxBdTA3ZjdePjIwWjVic19iPzshO0NfPiNHRHV+Rng1VHhkeixuV2VZMFgz''@;'; put 'put ''Y2NlPzshYywpMWV4cF9QV3s4OnUyUC9Aa3pdRyRHZXFUbVN1cXpoWHR0eTkxXnJ6bHIpe0whYlJvdS5HOEFYWF84XmAjdktkMFkib1ZTYyN1WjBGKmhvR1B5OmQ2U1ppTUZHa1doJVp1TDwpK2VsQ3BobEtpTEZGSERCMj1mUWNBSkssWGVZMClnY2MpTnJpfWVhRi8rM09IIjdMVFQ4ZXwoflFi''@;'; put 'put ''TXRVS2l3OFd5QXd3Nl5YKy9jazI2UlFeSE9sIVNKQn0pJEV7SF5De3VFKTw6NXR9TVpAd0p2aXxVfG54Y3N1YWN3YUVMSFBuNFB2dUU6I0VyUlphMmtALGhFSEYiZjJFPFQrPE8vW2lScUJFLmxTZnpdWWp2bzJ8OXtVemxRWVNxMEVEKlFXXzhZRTNDKiwmS0dOfHt8KTt2XmRdKnFOYGlnQXdj''@;'; put 'put ''cUR7bmBkRHN1YjNORE1MSF99cmA2U2gvcVU+aCxUZUo/X3JpJmljcTpdR1pzNnBIN052VUZOYllzb31kamI2Wy9hK1lON151JHlvME4vRjZ+W1BaWXZaYUdtfVMlY2ZaNHV8UDo2d1M3RjJRZylJYXsvZnlzRXowfmBJd1l7Nnl5VixwXjpBdUFLbntaSXsvYUYzSTNsfXJQIUtsMWhvN1FiIyhq''@;'; put 'put ''Xl5xPFlkeS9kKTsodFtfa04pNUZUbmRpNncuZE84eURvMjB6dGtIYUF6OnZYI1tES3VAZGxyaj1BdHRpMCpCJHk8PGRxNFl3dW8jdk91JTFMY2UkTWxOLj5NeThjYDhsNEx6SSI3YzVSb2RINjFuNmxdYV46RkI+ci5JZGVmdm8jYmNsaEgqSmhKW0tVIilJaXFTTWFNeV12OV9+RGp5aUFDQzJS''@;'; put 'put ''c099UyNTRjJzZFl1VSUpOTREKl9SSjJ1S2k/ZlovSE9BT1dAOXh3S0xdbWhHdUt0d2MvMiEoWmsjW081JWN2MElpIXkxTjo3XiwiMHxVQTpybzRDSkVpaSU6fio8MGB0e3xmSm48cmlodm5RQF9edkxBPjw3KHJTS0R7a0V3eXUoNGpZP1NSeHFsSCl7PjMsRzxWRlUqIWV8NWhMWHE8Zm0mbEJq''@;'; put 'put ''VFN4dUVHO35gU3k9W2E6NmomenpXJi93UXY/dU4uSXxxXm1bQmFpe1JTbTQ6ISl7bUEuSm1MWil4KjMjSFRwOUR4PFNLUG80NW1sXylQbzp1THReWElBeDxRJC9GWnFVWStaVV1WUiJjKEdgL2BLZHg7ZiVwMTo0WTNCO3ZkZnMzPyNEYWxnKFhfNzhTNUF4UT5hQ0s8THhHR2d0IlgpKHVxQE91''@;'; put 'put ''NUZ2PzdjcHpTVTssK2Uidms7QlpJdFd4U2dmNVBbKzZESDFFWE8mWl9KLmtrOCk1KX5gZWt2RyoyPkNwUFRkLkJvRExpdW00QE0kbnIzeTl2L0Iic0pfRmBrI11JUnRsdk0jTUVFT05CZCJvTFhZdix3QX1CIixxU04raDIoPCk7Onp2U3Z5P3tRWjBXSyxGZT9STTh5QiI3QHxSfkI6JGBrQThL''@;'; put 'put ''RiZQQERWIUhhey9QeTJFeUhFM35+S1AkMTxQaylxWl9kYG8sakVmKHY1Y3B6YnBpa2s4WUAlfmBld3ZVQTUxIj4sVTl4K30/dlZBOWYrWlI7ZjJ5OUJ6PX0paDQzMW5yQ3QhY0NxZTZYbWtmWkxQTWFqOUgqZXFGd31AQiJFXTpGOEZIel5uOSN2UkRRPCNCNUBNXVsxLytlQndxfm5JOi5wRWEv''@;'; put 'put ''W01UYTxUZl5oQTNbQ2F7LzUueEV5SCJgfn5LUFM8LmI2ISRQSFg8VENld1FidlpPJlpyVUVTVDt8fEIiUnUrWTFDPClCcmZ2IWZjPHhXVWQrWiwvNjF5OUZ6QSJZbEEwWVhDdVlVd0MqQC5JP1daMnd1eHomMmJZSWhKTXp8QXR3bkxmS1UrdVFOfjByLnk2JDh3Y3B6Mm9pa2s4WkAlfkA5Mng3''@;'; put 'put ''VytVaEZlL3QscG8+WTpaYlgrWmkuZjJ5OUZ6PX0/UVNHOUwiXTY6TWZmMl5oITA+YztJWTAqPU13OV8uR18sQiJMPUZMaEw1OiZjJkxpUitCanpqVzNKc2kkR2R5aXdRe0kqZHhlT01mLmRAfCloJiM0TGJSaHc8LDc6cFtCImEsVXZKKkwmdiFyMEMzRjskWWldfUReQX0oVUN0WVJNRD1LVyVM''@;'; put 'put ''OiRMYnFJJksudD5MXzRCem0maCNlTUdsfVJVdz86O3QhZEdhREB+KiFFLiQ6Qj14NkYibGM1di8zZyRyOGlydSZXKXI+QUdeUjdbYENrZWZoVlZKSzM0b2ppKVVJR11sdTQyNHlleExlMkQhJFQ/WCZ3eSYzWXlVYVkvTm5UOElWQ0BPRTY+ZS4ucDFOaUw3U1F0VSpoPDRxY1Z5Z20qRHtrMil4''@;'; put 'put ''UCI+fXp4NyhNOWU1RCVfYGt7UjxCRDJrMHo3KE1dQHUvJVQrTy9CJXRuWHVdfGVfTH0xLHtGdkFhZ0JHU0lPTUVJSFV7Vz4xc2dRU1pZUVRnKFcmJGN3PVhzMndbcTFONUxmfj9ySSN3P3Y9WENoOFhXInR1OkhYT3IqNiJZNHFjcj04ck4/MnVxNHB6QXljTW01XkZQa0NhJUd6WGVPdTdsWFlQ''@;'; put 'put ''fjc+b11qQU1rbklZZEJqKlAsQFo7Q2d2SFt4YDQuSDo2WSJCSk0+SkV3OVheUkt6YlYheG1lJUhHdVpATkpoSmJgPW4/djxFXktzMG1mXyJtZmA6IiY4R3VvYnoxdDY9ZGxuWlJRaEpzOl9ZaHRDZUdrX0VGZzMoSmZdOmNjYFZ1Y291bFo5InhZVjtvLyM6Ymwiem5YSnRfa0BSWiJlJl02Jjpu''@;'; put 'put ''JXBvNlNSejhaUUJlb1UoNCFpZCo0K3F7dnore2t9LndMZ1V0RkF2PkBZP0g3SEhaLFkhTCN3T0hlKjRSUytfPXhaR2ReRVcwKHdiSDtMYGpWXVAsITlbQEBARl1pJns+ZnkmQHAldCVOKUlnUnJJd2lUTkF2OT85NDVGQElUS3JId2ZfRV9NJWRzaV1yWERydmxtS3pHTD5hSkt6Rz5FSXhheSp5''@;'; put 'put ''b3VUZE1iIihkJDtPRDY/ZVdhSk4odHdyJWBtbncwYSZSaFdLayxNPyxoY1lyaStybTJkWDhLKG1HbTxDeyh6Njx3LDRUYXRobndSUiReOGt6OnhCKFk2aVZhP2IueFtGNTpYWDtoKVRtYT9aOzdJMC9iL0R4Qj4vYnYuNk5GQGkhI0xtLnhaRkYqYlgoNGVNe01uUlhYNzJffTtSeE12UzhjQEJn''@;'; put 'put ''fEJabjd2YTU+O3RHXlZOKX5eSDkjb0V6bV5SM2NhKklMeTlYZkBZYEp7SnptOEtrSmxwWilnND5ZNSp4SXljUVtEMl9II3VFOkBXdyNJIylNaXlhJFAuc3V9NCVaNEdxIm80U0pFYDcjVE99SyxwaFQ7bTZjOU8pajZkcyF1Tl9xN04+RmVFXzxbOVlMeEJUbTZvLlc8RnVMUl9pUmAoLmslZHoy''@;'; put 'put ''eDFHWjl7VyIpay9SeXZuO01CM2pjMSxXR0cwSTd4JWApay5BMWFUbWtbT2BBZylHbyJbTEUheVR+NGEuRlMmZ1tReXU0KEJ0alhIZTphRmc1Q3pYbHRfWjo7dVpnKntRJDcjWH5JTzV0dE1sSEEiZXJHe0toY3U7TkxedUkpciNpM1opRHk0OEk3OnoyLC53fihUWDM5RUZ+NEB0X1NHUjp2bDR3''@;'; put 'put ''OChqMTB6V2Z6NCluXUooSFBDKTpHOFhLWU9aQWdYY1BwUl9hV0t0SDcvRiM9Pi8sLE5PUHBTaEhFM11CPEkwfCV9SU11ImU+bGQyaHV2K1pWVjh0UH00PTpNeV9TOTEjKWtaSlJuJWEzQ2llU0Z4Tlg2MnNCRigieVFnXiU4TSFLK2gwQ3guZUJATHhHNGEsOiEyV2ZNdE5YTWlYRjpVU05XYG1x''@;'; put 'put ''eElUSikxTlhvYDooZVArekJQVDUoJEJCP2hiSzBAKHUmZn5YNXpVWTE9JVpuMDBVTmgxIlNZcElVQEtJZzZlYGZxMFV5JiRCKEZlSlNRPkJ3VWUybXRQcEJkPFFfVzFfNEwza1NkTGlNJFR6fVc2Mjx2e2hHMmtFVnQpV0duOkNCUG5UMC5JUj5jPi8oKmNFe3U/R35kRGE1PkVfbk5GUi9IRklO''@;'; put 'put ''NTBXPzd5cUxLeWlkTltDVjYwa1BUS11vTHt0Ky5HSCRTQU1vZn0wTWJidno3KXlMay5jPEZZTExtWiF1dC5pdkx7dDRTPXkjVzdWLk9JSWp2NER0Rzo3NDRzRXJiRkpLOjcoQCQ+Pls1NDdgKWIlTEgiYEAvRDNuKTJzTi9VNy9vXWpISjVQRWx0LnchcFgkImFsUXd+MWIvQmAxblhKMUVNJlBU''@;'; put 'put ''LDUkeSIsLDUxUV5YOUJha0NGbV8yMC5XXlZnZ0BnPi9OM1E1e0NTK2Y3UkAufCRLLER8ekxbTkE/P0chNDpdcTc9Y2tMQkJEUFk/SXpqLFUlYz1DYEBVIT50dnVNNTMwUjNwRi5XY0xlLldQRzAwI2ghQzRvfEU2VmMyWy8sY3VHQSxOfVA3NHEuLitfQU4uPyloZWFMaEVuXkAwNm41SHMiPkA8''@;'; put 'put ''NFNXJFpjMS8uKiM8VmhGcyI7cmtMQEdBRFo2Rms2SzAyKTcvYHw2dEImL0shK2YmQzQobXouNE9jZFdbRFlqcXVta0FHP01uPzVkQ2FkOGVlP1t7MHk6JC9CUSYhTH1sbTROKERDWSI6JHlFRSZXZzlMLzIxa1pJWiUxW1B9NFdEY3c+dkt9RE0wLlNEcmp2U2ohIkkwKWJCOTdQQHVgd2puIis1''@;'; put 'put ''N3Faaz5XclpdQltzKy5SWDdIXXoyUWQ0InApRyI1NHlMazVmLi9WaVFmJDs2eVZbOzpaXS5QfFg4Om0rYmVvb05MPEFWe0FkY0F4QmY+XnZQQzR3VVlDZFs3ViFTaF9RakxgLytATU10YG9ATX09RSF2WXcyWl9rZGAyTHVWLmh+OkI6IWE4WF1YIiQibU43fEp3Y2IrQVtUWDFOMFNkNDBtPk96''@;'; put 'put ''akE7VDBHKEwxdkxNSTg3WG13MX06fiY/PV1uaVo9In58R0hVU0pCTX1OX1NvJmFhTU4xJjRQTXRpWld4czk/VFBhQzZNQkJIIyRaajQ4ayZ7Qz1xV0BMWGtFI05QPVo0d2E0OCM9bWhWPk9sVlEsYTQySzF0emVZWiwsOjVFQk9EN1d1bkpJfkYxUGl9NyxvTUx0e0NsXndZQmRYKXJ0LCNUMDN3''@;'; put 'put ''T1BoMVoleyhaTiVKazdOQC58dklqSExNVjFddlhmPlB2V0Y0UC5eb1U0PkZOLG9NckxPbGRsQjZFY2h0PWh+azAoV2NJREpiUmQpdjFvd0B3K2RYNGM5KTJrNyJSNzRNeEM6aSpMRDpUdFJPQkduP2dUPHJIWz1PaGJNOkk2MVtCMUYzY008cjtqcjVndDJra2dHRF4sNypFMV5Wbn4uZyZYOnl5''@;'; put 'put ''ZHJDMldGbVRIZGBAO0pNdm5SZENDZUNBWSNOOjd1OkRvW1JhRkRmbmJeKDx3dnU5fGQqNGB4RFhkWHUubClgdFZePEVaNVhjL3NQZFhnM0g/eE1YWCplQzcyNT5jTEY3Ok5YRnkvQjYqKHsrQnZveEIrJjcjXmhuYm9MV29Sc3RYM1cyMzxGemQrYypLPWZhdXFecUxqUGt5PD5sMFMwXiwhdzol''@;'; put 'put ''WVdBPj0oVTNMNTFiNjEkdkJmUGVaXTxQNzwwRzNVbEdSKkBUWUBIfl1dNDQrYWVHZltDYW5zeFdmOTB5ZUtOdUZhYVhIS0dpS0VSdC5lYVpJPDd2ai8sTlgsRUg0bntFdy5OfWYyMUlRSilPNkAlQmRQI1hsZ01MelJNQ0g9e0JObjRJTzxDXWM5NHlicVhda001NWx2VCU/dXo0OWUvQyRJIld9''@;'; put 'put ''RlYwbkp3KWMiVyk4ZXprWFB9OFdDSmQ1RU1IRkZ2PzZlMFsjVGhjYDkuYkRsYXl8a1ZKN2dVTGY/XntpTVJ4flR9Yz5pYCtROzEhb1JaNFtDNlh4RT9oKWtLXStEblRjaXJDIWsjZGlpTmN8dzZ5QEJtNnh8ckZIdFY3ZD9ocXZQOThIUDNMNkY9TGJlLDd2bkFUKU1obStEIWVWWmczUD9hXWQi''@;'; put 'put ''REQyUiUsYEF2dTNaIjVdSTl4LmI5WEJ0UiRAQitLeFtESENnTmN7KihhTCszIzJsM0xPdGk3KTNNYzEpTHR0ZlBmUTt3d0J6Tz9CeE9jUVtpIzFfYUhrSjxVLiR2MiExVSRwLlssZy5vOVQvREF1RzJXIl1JfUtvSjl7UkdxMnRGQj5QZ0Jubi43eklYQlE2ITVRO1RYdlAvR0NXQWVhVUZ2UXQ3''@;'; put 'put ''eXVIR0tTPzpIbzY4ZDBebFhxRldve3Q+TWo7W1pxNCU7PkNlfFhaTDhtT0NLJVlKWX1PQGhdRUFSJk5DUF5QPTEkVHhgQTh9S2haO2t7KylEJUx0ZUBpIUViZFpGe0RCLGNwfW9LXXtDcEYpVzBEJE9fSE9pZjhkUyNGVlY8aUpYa0RSLC5CU3tkS2VDUU9hZEtDcjBGdHUvLDEiJk5YZT89TC8q''@;'; put 'put ''IU1lMm9hflEkTXUyO2dpYi95cmo/SmVKOm9yRGB5YixtOSREQyE9TixOV3s6aX1Ba0s4QCU7bixTQ3U0S08xJWZHIUdlJVoubTkyeEtSWGs3cmpIJDVTRkpYaHM+bDdNbW4wKX5yRmRsUis0KiRdZV0qSE00O1ZYWmNldGEvQFFHQ1ElSyRUZDV4NkYpTkBma2tDaXhzVG1adExoLEQhIWoxWXYm''@;'; put 'put ''QG5zVG1KantYdnY7eTdTYFcoOk8iNGw0Wl06dSphcVpsZDkjXj9DOzk6RStBeUNaKkI1JVBQRzt6K3xWJEwre3dDczxXPWdVYW5lNWg3MiFpY0VCRXpLXzhBXldHbG9WKFpUR2xndmppaUlJWHtPRm53QVElWlRnZmxDIzU6YTQycWlUajhZOEBMPXVAPG9XLzFpbl54KDBvbXQ4QEw9emojM2Aj''@;'; put 'put ''QVo4RTNrbUZUSUlvem1tYF9YUHpbfGFsRWliRCVsZSxWJCJ0MUxmK3AqKzoyQV9DKWNDZlE7bXdbTmN3TmN3NSJFWE5sc2o8MWxYPFd1WURnR1R2alZLQ0JCUFBOW0w9eUNqWWttOUppfV9rIU19RS85ZGI5W3w1JCppQ0F2eUtYdHVXOXlwbUE1PTRSMWJhZTJ9UWcrIzQ0aDk0Vkt6S3xCR0dU''@;'; put 'put ''VHBiXnZiTHZoOEw+WzR2VDMlZC9NblR4dSJUUGVzaV1BIU9Fd083N3VEXzpdbitIUG83emM/VjI8ZzJnTG5SZ3Q6YEhQa0hmMjgvMyEuY3FEOj5qeilpN2VfdkNCI20xQGFse1chNC9aXmVeQ2NETyt3U3M0WkgqKE9ObXVLUENOcVNedEcwbzVwSClZS2EoLDhlUE9jY1U1c1N6OjxUYVY+SD92''@;'; put 'put ''W0lRdlkwOzpidm9COVlzQWRTd3FtITBjSlJCM11AWTR2KFo7QmxDWjZ8Z2lwTHJ1a0UuTFJ2MldBQUFBQUF+bGdBRU1RYXU1WzV4RCZJaW9uOVcoPndrcy99Yzs4Tnk0OSo0PV42UiE8dSFTaEZ0Ul5AaHF6KFl+I043PHxObEJGIXoibVk3bjYxa3BYd0h4QFY7ZE91dzJlKThMMU1GUj1zeSNo''@;'; put 'put ''YShfNTQjV3BkUUplQjsrWWYyfUo6MEpuK3hmVENlX2BNbVslMldKRTREUVJKfEV2fS4sajlYZGU+KWhSQlFAZHlkWCZPXUs1fj9tc0pRUHM/VkY/OExfT3lraShhZk5LPmw8aXVGLC82KjZiI0RnJUJ6c04pT15HaWY5dz9fa0VvZSleaCExRSVTenwuZjRdXj1GPiYlflZdNXNXPitgIj9SITgh''@;'; put 'put ''cTJFMD10dDViZDdtK0V4LkA/aT1LLG1ZRC8vU1NGRFYuS0NRTXl1alpzc34zby8vSzpHQjhzSV5SPFJHWXNWbGo6VT5WWXMmYXo5KzokYyttXXVwcllHNExHbnNse1B1d3ZVPWVHam50SlhAb3JGZV54Pnx3YDplKEZTJCtkd1NZcjphTXBTNFk+QkVVSnZ8NWJ1aldwYlU1aDMoU3JOT00xL1RW''@;'; put 'put ''SkMzSSF+ZXc/X3ApbUB8Km1PelR0bDE+cVVwc0Z1Y2lVQlU5NEI8M05Ab2FKK20oMW8mLFFXfTZwQ3cvNlsjazBuWGFsKHIkSkBkWjtvXyNvUSx1fnR7YmVJRyllKFovQCJbRzJCWVQ7diVoMiZtXkZBSE5mRWR0Vm1nSHpTUn1WVnQiPGw1K20yTzV8dy9ifSh+cEVAUX4sdEJ1di9AXnEsfURh''@;'; put 'put ''T2ZdL1twRlQlb1E3bEhLS1RRWXpoMH5LVnRpVSZJe0VpYlViYT9qV294UjZmPDJ4Imh1eUlgSSM7SVRmVnp+aER0Km90VV1fQSxOZH52OHI7L1hnLnpOPXAuQWBETXUzcm59LlArRGl5MjRbX29bfW9GeVtPRSxfc25LU2l0bnM6NlAwRGdlPmBzV2hfNzo1ZGFXQ1UrRmApTCsoP0JMJVIrO2Jk''@;'; put 'put ''czNdOXNlJTZPZ0J7ciNCRTdfP29HdWk9bnVVaEReNmkjU3EmW2Z5bn1vT0J1RWFhOzk8a0lGcnlHaGRWW0ZLbVVUbFk0Nk5zPERNdWp3U1pdI2pvNzRxMiRRQExTYnBUOElGWHlpPHgpIXVQLlBkQHdfSm17fTIpX2BgP29YRUY3KkNzbitVcWM6bGhgXkIjfnh0ZUshOSghUyxzKFNYX3F6NCZ+''@;'; put 'put ''VG53JClBXl5qXmB8TWJnTjNFek4jXmd4SlJAN29bcSo7KnIwRWtkS3hkZiF9KUE0JTIvP3F5Tkh+Xk9bXkNlcT1kdyMzOGRZNiFNQzpsOSZWMGdifmowOltySG1Rd2J6WjJ5blN6NXR1Xlt9O3kwTnpKRXl6LFNsRC5OeDpqNjg2X15Yc0I5QndrYjxUO2RpTjVqRCRnc0Z0JDhUMC9ieW5lTW5I''@;'; put 'put ''OHk5KWR+SStPbU5nU0J8U1tNXz5WOVp3PUo1KH0hJHk6TFNHTHJbWn09KzszPTxDI1JSaWRSXlN+IyQmeHZkIUg0TEl9TD9LMj84QlVzbzNQRVZ3fClwPncjYiUqSmFAVEIkdDpXeW8pLjoyeX1yMlBsN3JyNk9TaXB8Sk9TYl0hUm1VVkY3RDR8U0d6Um19NzQ5anNATTJFcSZbTVNMJXxQJnEw''@;'; put 'put ''akdGLmxANlFJajc0XT56S3FIPmkmKFl0KVEldCtre0k6RyxEJH5nPVIqLmlgJiZUZ0kkdDZhSmopbzJFRHlpXSU0QHBtKXt5PX5lakdgVGdCT2JON1lYR2gjRXdTQFpLbml0WUw5WHVdNFltTEteK317RC8qfmgpSiptcUpbR3Nya2Q/bXhBSV8xLmJGUzo9JXp2WCp+dF46QDhTY1dOcVJHdzl3''@;'; put 'put ''dEhmMUtCTzleMG5lO0EsViV+WiE7SDd5YX5aIW0ufTZNQ1dhZVkwYDttYDJIbDVpZWFCY0RIciF1ei90dTNGWUV4a2V6OnJzJk9rKGxmbHI3KHZRcVRvK0JZKWcmUl1jTUwoZzhqSURWeyg7ITxINlM8PG4memtTSiQwISlqZS8lUiZpTn07V0R2T2tVW0ovdiVJbDUsL2JQKi5qUG1JcmU6Tmd3''@;'; put 'put ''W189YFhaX2A+Nl5CdUVhW3t8Xmd1RW5OJFheKEQ9eSZoIzwzR1YrXXRGRyt6VGkuI1ltckFXcykoeD5RM1JGXUlqXzJBJHt0cVhdTnhlLyQ6c19rUHk2LEt7cjc/MjE7eF5sdHhodEI/W1shempfbTdGYGcqQyE1RnByej87XjxBX1gxODZMKDoucEdCVUJgQ2ZXOUlbTjt5OzEhPXRhci94eT8p''@;'; put 'put ''MWlXWU83MCJqO0QhfVtXIz5VUz47fExveUk+aH4/MiU3MyU3UEJUW0RUYj1hb1ZybFBtQ20mQHwkZ1leYWwreTImOTswMFRYOyVnRlpEKEptdCxKfjZycWdeaW14PzBFOXpHXiNETzFKcTFxJTFmMDcpZG5jXnF5S31TTXRSIntCPDAjaTZNZj14LCM4NTRgKEM1V3RZbHkvTTk+cjJEMTIpXlVm''@;'; put 'put ''b0piL0ZKMD5uQDtnWSNWb2tkM19sX3FAMFR0eSx2QT8rJChDLiUkcnFQcCU6QkwxZyh0PUgocls6SWp3OTciNT5lI2g7WVF3ZktVTyx7YSl2QC54fnZQO184UXJgUT5TWXBSIjNGTVguOGZwSl19PkBIVUN0WjJBQyZMXlZEfDpManJiWHhCLD9benQ5cmBFfl5MR09CSD9GWH5bLiR6U1Mwe1Mz''@;'; put 'put ''ekdrViJ5KHhTNG0mQC5XOi44TypnOE0wIzBVMjAwS3x0JllOVXxsQWFDYGQhTSw9c181bUN+cT9oW1pgUGx7cXQlQCZkUlcuNWNna1YoYSk1OWw+N2pQfU9OSSxmbDdvR2J0SE5TPyoscmRMbEJSa09IU1N1cjVFbCgsbE0raDghem4xJDRuSnw6WiEpYyRLczNhYkt3OlJGajRxSTJJdSwiZW9k''@;'; put 'put ''U0w4PkpzOG99fnVKQHpZbGcrKm04WiNrJHR1ZG5iQX1HYGEudHBzKzhpYiM2dChJQSElWzhuRF56Ui88KU9KSix2V3xNJT9NbjR6OGd5TWRpMTFGT24hOGk2eWhGRmAoLCpNaW1PJCN+UGVROChoUGVAdTE2NTQxKmNtbUsxaFpDRTlUYzdmcyo7Nlg2YXJhVWJxdmBvWz9aKGRLWClgUiNIcWUq''@;'; put 'put ''TC4sfCVmSDNdRSx0bX1ZWiVgQCh+YkAxL3Eje3lpZHtFSS51OmwxXTtLViR1Z1FIUy5qbXdFMWtIQFV8WHEjYVBwLEtWS0NvKzY5R0FnLkFdTEgremxtJjchMSUqe1J+QDV8IWE0WG1nN10sO0hbYWs0YEA1KEZWXkJlKyFhOEBFSjUwRl4vWHNjTk12NC9iR1hOOWUyRGQxXTYjW1Yxajg6MjN3''@;'; put 'put ''cE81LyEpfEx6bWRaPjNzUU4vLyNIN2pXX3ohUmZSSEJHbWZaUTQ2UExmaGJ1em87YHwxT3dVZXpidz1GfilwZCgmYSV+LEl8JiMlc0wxQ3prdkE6PzFJSnhEbiEuVko0I1ZdW1swO21LVUNLWF4/RWxETnw/LnZHNW5dNHAvLCtsOHozZ2BCaHZgVXlIdEhoZXZoVmpgI09MZD4xLEAiLnlzNiQu''@;'; put 'put ''NSU1K1RkNjVvNylyK3wyPDwsXkgqO1VPLkE3M11HQ0VZSi9AOlFAd09wUXlmXmUiW2RQWk5vX2R6QH0wZm4iOk9vd20ibC9GfWJ6Tjg/O3JWaFliYjV2PmhlK0RtP25LMiZURXF8am4rbFMyfi5EWVZ+YHovXl8mOlFJZ2ZjNCI1Yz5mcTM5ZVJbLiZtenE3VCF7XlpiS0xCODBBSXh5VHJdOihv''@;'; put 'put ''N15lNkpSWk43XmN3SykvXi5va19bKWNOcD8rTFV5cUx8Iyh0dVROaTs1bClHP2xYa2x1JSR8Um13LyxYakAlMGpzVmY1UzFbWHMsRj8/S0VRbmxAK3RqXVNbQC9zZlU7Vl8hcTYsSz1JOXl+eGd4fWk9fUBwN3w+fFNaWk9SWHJPZzcrbk9efnpjYUVDZ3Q4R1d3S3ZwXz5FcXAkO1speWhMb2Be''@;'; put 'put ''M2ROVm8yVj92QGtvI3JnXk00PlYwZUdZNUJMTEciempZNUpzW31ZTDh8azxwO2o0ZlV8anRKPDc8KCk1WjVCfWl1cGEofTVALjM/YjBnQmRAe2MyfnZzKzwsVTcme0VtUWFWY0NxUmEwK0YlVzcyPE0zYEpkVn5UNyUxSnZOdnIqY1dYeUxaR05AaiVuUjBaNU40fjN2fG94ayolI1orQUdUcWQm''@;'; put 'put ''Im5NLEtPKSk2SEJncUJRQyh3KG1tN3Y3UW9ac3FJUXFnQ0UhPGQyfWRYfDFKLDdnU29XLCs8aWZEeU9VT1grcis0WkpsZWw0IUI7MDZCXVIzbVkycG9Gb1tqViFNUGh4dUR0eHFSSHx2O0lYPEpZTy5LNm5XWEdHJE0mc1RifWI3QlQ0TU1QdCVhcHMuRlR+RW4wTUpdMDZfd1Y/Wi9ZO3MrRlhB''@;'; put 'put ''QX59ZkRifXxzSTVbe0phI1dIMSNUMTRHODVZOUsmdlJUZzB5WlNxQFBBeSVoPFF1SHsyIVFKQm0zbXloRyNTUEN+ejs2OCtKdDZKT2pyTkBQNnMrK0ZLOmo0KmhmUUI+UFY+UlFwTUx2emhZTmxzej1ARH1EOXg6SG1SYD50LDZjO3pQdVUhNWFoaXF0QWFjYGoyc25OQjU5aGprWjB6MVQlakNY''@;'; put 'put ''c2lta2lEaEApQy52KlJKIlc6SjNeJVhRISQhXXVtSFRsM01tKkY+Zk5lLHs2dVJRVyEwT0IyRlNvd3E1Q2dHRVBwTmJfRkFqZSRCUj4jS3BibSxPPEsxLCJJJTleYnszSCtUYHpjMUBbek8kIXlrVUJNMWEsU05wRj86ZDBxZmlpaHFQWzFpfCRrOldMTjUzODMxNCYhdVkwKStgNHBQSn4lQGJp''@;'; put 'put ''LmF5Xl1aLltQU3xkLltyIlkiZnpQcV1yeGtBcChxX05jVGFtRTE8UkFhN3ppaHYhK24pOzkhbmJOe35xTzV9Xix4X1leKEtMTzhsPHgsPFhDQncsJXkxRi9sQHg3ND1RRSRjTWNOTTpLRi85TmR1LEkvei41XWl5JmlCM3J6RVZ5JU18Z1BzOH48bFg3OHJxLjdBZFQ4JF11VDY4WzIwbEJpSn00''@;'; put 'put ''alQpJngveVR5Y2NwPFp4L2tMIVE0eFhEeiV7Pn5pVz1LNXlxaGYrQzhhKyZ4M0IpakY3IWdaZWszT0hTcFpgJFZ6Kiw+NXwyVmZJRn1ZMEJ6V2hPP1UuTVg9PnJaZmlMd3t7Ly9XP28lLkUrfEl7eyRrO1NSX3pnPGpoUDxLS2hkMjh1TDQ0Mn1sUiVeaUxfUCokPyE1MTE3W1dqZV9GdWpyMGxU''@;'; put 'put ''fSRfP1kmIV5zOHtOfEROT3hTKjdUNE4jcV11Mk5tMjkrNlZLRWgsMlhSKGQ8LzBhMnN0eFRIdHApeCY/PiFuPSlJYDt8TnQ5KURMa3QyTWQubFYqdSM1Qik2YD1tfXJpTSFFe3NycTYpVHNgREhQcUtsZk95ajhZc19hM0kxe3hJbGxMdnlKbDwubTkwcjJGLzYhImRpbXU0ZFooNUIhJVEmMD01''@;'; put 'put ''T0BZVSJiX2Q6dFVQIm5ZZHNSXlhrVTdJX24kP2RCPFk0ajt2RW18TzBuIlk/OTYwWkNyT2RiPGlDVWRXbDpWXn5YOzpsL316UXRlT1U3LCRDRGd0cnYiVkgpezspelZWY1FhWixrW0JpZXlhZSFkYjhqdWNDVE9MNnVYW2d7KzdMR2lwXiNKTiVKJGhuUzFyVyRJXSVbcSgzNms+Qi93RDZHMDZw''@;'; put 'put ''Qy4peT1ZPj5lPEMqVjhaYVk3eT41WEh7dldxc0Zsc3ZScnZRM30qcU9yXTgpMlBKIVc7S20xe0MqK2JFeC82Vz1BbDU2azI8Zkp6e15wYyorbmRhUypNYF9hfkRpImJQWENibH15TH1SWzYkOEEhNSlySCJoTHtrdyVoKXgybGAmKzx0fHFUPFZmYihgW1QqeytjSD4vKD9mMFZrR2ROa305OWdM''@;'; put 'put ''S1JWPisjYzk2MH5jNmhVbj5OOWRYcTl7Rk9scjwpfSIuPlVJai5DZnVUYGIhWVAzODpLWjRPNVZHZjNNWz50X2hTQCk4SEQuOnkoVyN2d09vPlJwJn5fNX1TYn0hTUZEIWEjI2BjSUswTmQ9X19ydSU3ODMqdTR8bVtVNnJHYSlJTFszQj9Vd2koVnZfPEo8M0RnJVFyZU9aLkxHRlUlZG4lKixJ''@;'; put 'put ''UVZ4SzA9X110MXIiRVJ7S0UqK10wZXwkX1tHbj1zTUZqLztjNEZyTl1hIVBCSFhtM3VeQHlETkdmLnZBMGJpYV5DP21VcWxAPlIxb0RTNnElcEczU0c+KlJheUk5e2V6KHp7SEBtRX0wUSR6ZTN5Zz0zXWY+ND09PENzR2FQYCsjW1hiMXY8XT92XktILGYsI3dDPGA5OXt3cFswdFE2Klp9NzZC''@;'; put 'put ''U0wsczNpSzdjOSxWLmtrdXhsOTRdczRZdDxvMiRRUT09Imw2azNHQiNYaE0uJU9OSmh3R2J9Xy9WXTleOVNQdFt8dnpOfGNmU2dCRC82Sy46QT1FMFJxVyYwP1VndGNJbj5JXjN9e0l8c2cidC9rZD1XLnZgO3goNkErKmZSJixAQE5RRzg3azA0aig2V2NXYzZTZHRDKn51Sn1nIlAxejl4PnY5''@;'; put 'put ''Q2ZialYoNCZSc10hZW5+V09wYGI0TV9lTHZPZVl1cyI4Wkl+RzZNY3ZLbDpZZGNLfGopWVtfbTJSVXU4YkcyQS85N0pEXlRRdDtJXTNdIztNL2l+aWJuaX5fdzpEXjw4fHIjeFcrLlJgNktxS3g9RH4uO146VVNjZG17WUFDWCZjUFFgeDM3MjZ8XiopMipZemZHO3hWbTN0YWc5ezQySzhrQm4o''@;'; put 'put ''LG91OXp9Nz04Syt+PzI0OXtgenQsPm5pJTRdIyNbI1RsZWY1bUlRVzp7WHRiU2Z6fk9ZQiopTCZSQTtWeV5KKW9yYUxCSEZMKUNtPDF+XjNMNXosWk5sPF97OFp3QTF+YF88WXxnNltZRkYyWjZidHlkc1tsKCZVR3tQJURya1t9OyFuY0JVPmhFcXsmRCE1ZDlsMW9ldH0vSVZMIz51VloqaXg1''@;'; put 'put ''TX5oW0pgU3dFKXFjIndmeGRdWEkuSipseD9RdT43NVlfWkldUD9FKkN7W1ZrVkZLd3RSM3QyVFlhREpvNFoubW4kY0NQJVs+RURmbE1iYTIiakw0RUU8LlRBUnUrJXQqbFA1RWc+ci5WLHltcE5BUWduU141ZU19eCVgRDxYYnQ+ZjwhXzNfNEMjal1qU2kmWWU2NX03NlFzYlZHVmk6YVNZRn5b''@;'; put 'put ''ZzNZT3tIVl5tb3QzWCY+Kk45V0JwKkklOFQ5PjZqalhASkkuYkR9TDQqVU9yRUs1YFhCb1JyWktVU2piKEEyV11LPTV4cyY8d09WMDUzcjg1eFBtTlpBbkswJTNjK3VPRTJUNllpPnpiP3wpcTQlOGRwRVVZMkplKmc0PSEjTTwlX1Z0WzVyT1c7cyM8TVk8M0tAQDpLRmJecjhKLll+eiFrcXUw''@;'; put 'put ''K2NZIW0peClLSy5fZn4hUigmWHJJJTw7YDNVMnBJbyIscV54eHIhdyRVIzltOzxCS1E0YD9TcTN5Z3V0UDRCaGtWUHRAS2A1VGxJeGtnYzxdKDpOd0JgNE9DOnMlZUtiRD4mXXNUKHtaJkxMb3YoRkhOTiRRPlU8cyRsPHpidXhJTzB3X08mIkw4e24iLExoYWlIWndffmlNPi8ha2cvfURGajND''@;'; put 'put ''RzgqMGN+X1d8SzgzM1d0SUl7RXpUeTNsbypnKzg/ODdNL0g/aHhiZlFWSmwwWCZZYyNeSjNzVVMlTC95fCFCcSYxY2xjVn1nPXlpcndHVWRXN3ohTkJJMVJPfWxyfTYqTCFMPiJJWEwzRnRkPD53Yi9sNn5aOC9EQ01EbEBCK3pGZmQ4V2NSWm57dCsySzNgS3Z+NjA4X0lPQmRgMHd5aHxqWVQv''@;'; put 'put ''Uy4lXWlfZ2o9ZDg2SD5iJjY8dVgsPUJkYj4+OGN5VjFTJEB+JWJLOSNkRltVV2tiOTNWfGI5QXlrP2o4SCh0eUtIODVEdH1tJl5vU1BWZDVoS3lPXiIvMnRsKSVvaTVkZ3ZiW2hDdCFXK2Fqbl5SQkdJUldpRGV1LmUzSHtkUmVhLi8hWjpQOGpAYVloJUFudTdoeCk6TE47WVhtIVosWyhVenQo''@;'; put 'put ''KzU6U1lZSncjd0J9cSk7KFU4Z15OfGx5KmtVOmI7OH5MS0JqbmVqTTRCWmdmczckR0dOcTBfLDdtT0orPWwwZldqOGE3cnk/aG50bipaeGAlbkxSQiZkTzBCPHxRK1ZiW0t2MiRaTnp3KHI1Pkk7dUIjJDFuQ0ZhVGx4RnJ5VCpFVzkkdVd0PlZeIyRvUDJraHdWNEhAR0AvUHNNdDU1LD1DdUow''@;'; put 'put ''Mj97SVA0S2dDKyRNeGRJUXNBfUUzUDBiVUkoJH1+WzlzdXpPa1I4flQ3MURZcmNQeUEmTVIkS0RgPUlYXWlLVyVWQTY2VXVHQzA3KFZPaDdVfms9Zj13JT17V2cjL3hOKkdNezoqTHZlQ3NgQkFAUXRWRU9HYEQzZmhIa1lOSnxGdSlaTGxJUCRYfTJoPjdqb3Y+KkA1ND5qMChHLn5rJnRBR0kk''@;'; put 'put ''UDR3JE4hSUtEPm9lO18mc1soO2YvSW5CRXhtUmdNJE9JYiZwJldRSUk1biMreU9HTkZ0SF9hXlokPWF1dXRoZWd6eGgoUXAqPnpFMXp1ZmdjamBeYlBTYjxCUzJbTC5UKTVsQ31bJilgT3FhbnAkY008ZT9tWn5wP3I0fXRJa2p9aiZTUnZNTjoxRHJXJkc3NEBvan1yL21kL11kSUJiekFTQW94''@;'; put 'put ''ekdZZ25XbDkmI0ZgV3Vib3Z8T3oqVn1+NX11ZTMzOSM5UlMqSTc5aiUseUJ8SGVRZjxtfTREWX1PXmc/cjdLeD9XKnBJQEpFSGt6WzxsWH1CaTE3M2VmTGI6cEE1LF8pdmRJP0ExcWJFbW1ldVs0OCJpdi9ETC5keCQ+VDZLZXxdR1Q8JjN6NlliJSYhM3M4QmspQCQvRTdTenVHMzZbQEx3L11M''@;'; put 'put ''OWBqJS9+VDlVWGlhX0dLNllHMUs+ZUhfQlU6d2ZEZ3ZjMSJ5QnBIbSp+TUhwIk14anVtaH5ZMjRmUlFvIS9lZXI7PlBsdWY7Kl4pUEAhIylUb2Z8W2ZfMTZBeSRGbUBdRjglQnpwVXs0QjFgTXs0JTkhKDhdQk4pTTRKTk1fbWpqRCVhN2BxWTBMcVAhZCowQ19makRPYHhofmdJJmk4IXhPb3tN''@;'; put 'put ''O1Z4dCp0bGFDbElSODxHTDkiWSZWaW12WSozJk9xVVNCfTN3U3FUTk04ZVl8bTUwRFRJUF9KInklUTtDQnI4QWh0czZZRj15TFIqIXkxQio+RXAmUkVhRFF+Ln54S0dHdExEWygrPyVJWikhSmNeVTI1fGtYNXQpfi5XWEVAK3xDSGVDdDZCImAza29RZkleYWRQNG5PczdUM1hkODV6TDxaeWlt''@;'; put 'put ''UT5DWyNGdkZnXTtxcUx6M0hrUnR+UyFXO29uRDUvZylRVj8rOVoiaXQ3TmUjWkJTd242a2hOWnU1YGR3cTVIKSVkU1RGYHJXNV9nPmRUOCouJXZBdHQwelVfdmFpJDU8KDNfPGtXQy5ZZl1oPlQlbkV1Q2ZEJjxDSnBDMWJ1dEtIKDJGbTg7UXRRWWVQNmNiY1UzJXIkRVFsXl1gSk1uUEhqU0pW''@;'; put 'put ''N3txY2RJQWAqaChgPV05Xkpfcn5uTDB9bWlFVStrOmx3PGkqVUVPY31Eay5ZWU1FQytKdSNjLksmd2s0ZzVZbC5HKyQoYCliNXZ8YGBmQ3laZ2dTNmhbdTltVHUwa0YuPGdTbmUjOWB0bVt1SkovJjZTXz9hOiFSP3BlQyRRLCwre040QUBFd2dpWFByJEtXV29FIXRaPn44bkkyeVZ8TThzWEEh''@;'; put 'put ''VnBQWD1VN0JPaWU0WnQxZDc5VkpudiIkKz1Rdz1YIWh5blR0XVpGRDJiXjgxQDVlTDtvQXdlOVtwdWVOY0R6c3E2PWViVE46cm5+NWFLWX1yQ1pZZk5pVlpvMWRjP15CaiU9emJ3UzI1LCN2P0ZVPSlFMnwoZ303SkJBMEw5aUhTREBvKyhnS1Y1RUpLbnVGXiQ1NTN7Uz0kblcqd3UsLi9ncixR''@;'; put 'put ''KzIjdy51RlN9RiVgbXtVMlQ9fUo/cjBaXihPUiQvSFNvP153WngoUmBbSUNXL31KKXBleHVwTzc9Pmh7MnhMei49M2NrVDdWW11IXXB0dWZjRTxLMyY6QjU1MX5pYjNeZERCPXplTXBULiNgWkBudHE3d3IyMEs1fnNvd2tzITo+Nl8hb1ooRiU7XlQyY1l9PjVyTzNBb2g4R3pJcE5wWTVUVVZo''@;'; put 'put ''d0pZRU1TTn5MSm1hZDROazo8YytDRHM0YjdWd2FFIl5PK3pORVMma1J+MGFvJk17ekNxdGQxRH1WMDdobThObDJyPS4+NHsmNXNrRVE4MDh3e0A+bj5eVXlzRkM6JmpgK1A4a3xLWl8iVWFWbW1uKTB5Qi91dyV6WXFWNkU0M0heeGxPQ059QVdhYitzdWQ/UCI4LCg0N19FekomWSo2Mjp0Tzws''@;'; put 'put ''c0Yob1NHd2h4Knc8W2lAJDEuZjtDcm1QamxAPCZUaEZ9V3Z2NV9xbCI2XTdYe1M4PFghSnF7Q1ksPFRrVTMjYmEidnpILkRldHxpZENSOWpsN25XSWJhLzBEMXA3I3F1W1tJcUpNOGApaykkR0g8blpHSHdUYz9MPEc/LDF3bV9KOmRiRTRxcmdgLn1LVC5xJWJwSjtmdjZJL11gYDclPFQ9TUtZ''@;'; put 'put ''PyRpLzs6KHF7KHh7UkVLW3hnY0xYfiFGV0tfTEpkcDFyfT50ITpnUCl2JXF6YjRYeE1+a0hMNGdXJEcoPGAwTFAlW0c+blY4VkB6JU48TlhdbG5hTTxDNyJ4Szw2OFU/V0Qkckd3b1pIZ3N8Z2xEUFdpUlgiKEBfVUA7NUBycypoVCU1RzBfWys9K0lrQD9wQko/Qy5ES1d6cWZOQktVMFA0S3Vq''@;'; put 'put ''UzxZcG04WEpidHU/KDdqQjxgcW9YPDpYbSNyRVs+MmNCLGZtSmEjVUkmRjkjKmE3Kn54Kn5NMWM7SzghYWYuJHQiel1WTDVQQD9wYUN8VVpUdj55Z09IVlF9dEV6Y2wrQyVxKDYjMmRpIi5aU2AvSGYpajIpd1ZMakNNIyJ+dWJMZHRIRk1SLyhhaytUQX1dUnxiYzpxMHxXUmt2SS5rMiNaaDZw''@;'; put 'put ''cX16X1RkU2EkSXg/cSklentpWiw3fnMsM2YqSnQ7b3wjZF0jLmxSIlFMWUBdVXp3eVQrWDN+cU48LntiR19zdTU7S2pzQ0VrMVEzbXR0RXRGfGl8d2w+M0N0KyohKHQ2NUJgNiQjNn1JQHo4eDorfkk7V0FJe14laWM5N25kXmlMZn19Y1F9dzAxamlyMHM+Z2hSY1lXe31OLEMmR0dwKDdCN3ZA''@;'; put 'put ''eiUuPWQsZEd6IyRZRX5EfChyfVZOeGFzPyV9RkxbaEM/PU9NRHU4YGJQVypfUixBdFooeDZRfTo4RjouM1tHZntaZXlqKE9aLlAueVB+ND9+LC5TTnMie3NVS21sOCVCQXR+WldGbU04W0M/PHl4cmU7OT8qemsqVVNxPU9xWn1LcFVrPWhhKmVbRkFWamJbSFRPOFc+aTBKTDVsSClKVjxDfnFh''@;'; put 'put ''NTB0UTF4P0dBJW5NQEZFZCt1clNKISlfW2FiYzRLKH0saUdFbHZxYCwmL3kjUkB0blJTOnk5SnxVdCVYV1tpWDkvX0tEOSt8R018T0xiNEBaPlFgd2dgXSZOZ0UuayJ4SltoPGd6fW9xR3g1N2MlakVEZlBDWzhCWnQiQUsoclVVIiswQ20kNC9XaUo/c113I1JRbU59TlBATzpOYUZnUC9rSzI7''@;'; put 'put ''ZmRaPjQhPUBmcntPVnMyWFNfWm9NX0c/a25JalBEVSkmMVtNJn14WzNjKHZtL1pBJFdiblZtUFR2MWJrM19Ke04xLGF3UXttKiwhX29fUGR1Zn1ucWxAJSYrSV01bCVxOjZWPTwxXXl+eEsmZ1E1cTliY3c8QUJXKC91Q3UwWkJ0NDdRRC9te05xdFdCN2trKnUqKVZLMHtzMWR1b2l0U2kvQHBO''@;'; put 'put ''V3o3U21wODhecCFOIzo6dX1RQjFqNCMjMH1UYiJLOmVfPmt4LFhoenY3ckl+cGo5QlhLWV0rOTRbJF1xOVRhaSFUMlFocSRicWQiUEAmbUMqfnJQeFs9K1RLdzxnWH1sYzRBN2V3e3lYa1RZZiUjIyJwVFJ7OW0/LFhIeH1QXmZnKiY8c2hgSH40dWJxO0dvLztdTiYjQ0o2X1pxTFQ/a34+VFRj''@;'; put 'put ''KUUwTWgjLmRwJk9KO0t9IkhsTnsvQXZiMiZIVn5NWWIuQWB2bFVrOXl1Y3wkLHw8UD8lIkB6OGxUZENXa2JzKHxPZSYwfVdtKyxhZ0tlcEZbd251RD1SXntYQFVjSkxZOFswd2dAQ2ooaGpXR3ojKSRLZ3E/U0Z3P3d4fTEzKCp0YWwwNUZLJCx1X1tDWDttXWM/fTFUdnpeLnZWUmxZcWp5cHk2''@;'; put 'put ''R0Z0aEZFVTlTSlNuMVkqaFBHJDhEc0smPWhhKlM/L1hTYHhwWGRiZkhuWzg1akVxYm1Fa2Y9Z3ohWENbaXUpL1U+bFd+XXgofXdvKFpjI358OEFQUy9mdEN3Tk9rfGJ7fUtYXiM2c0JPOis3c31+c2tUIj5Scj55TiNHTlUhcUB4eHNQOGZxTmskOHh+RzgiRC5XS15hSU0lakYmclUvYlBEW3Zq''@;'; put 'put ''SzAzRnd1blRwQz8vVntIYDBRL0MzPDg/YzN9YWRNLDFfK3pvaS5UcGlAZ3BdWHkmYGxOQUY1bEJ1KExyJitncld8SksyQ3d7bCIvTWBVaiQ+Uk93RShlaV8sX1RBRXd6Ky9NRyVJJH0mOT9FNE0me1k6Vmt9WWF8UElAJUVteVkjWU9PMHtjPFFFWHcjQWskOW87aCFVd1Zaa3g+JiVeOzkhOlhs''@;'; put 'put ''MF9XeU9OcDc5eEFIKF4vNVBsI25IYU1dVWJnL092UEpEIThyelBKVSUhVk0mPWhHeVpzRTNqRDNdPlNZdENnKEl6TFZDcDRjQXE7OEJUTXUhYmpJSEhydTw5XjRKdUFAPW8xZnZtVkpxY0JWZC50XjhVTSxLcj41dUBnJHN2czIvTWk6X2gqKiYuVmYrQmNncCYpfStbbSVwcUx6dDxlRlpNITNb''@;'; put 'put ''Y2J4aWBxLCwhK2JlUlZ7Y2Y4UCJMUCtYXz5CMFhSXX1dR1V5WGEqfTk5aXNbLDhhTEdKPilgOlhLJmBQVE9GP3tRMzJ3dz0hSEpxdm1lL3A4NWtZPDEwYF0zdX45XS89JVhSJEVVTi4yWm4yM3ExaXNhdEt8VCkkVyx3JiJRaTFMZyFtWnN0TFFvTUglKTJVQyMhPiYxbjcubn0sRS9jKngqYk1P''@;'; put 'put ''enNnZDYrXTxxbUUsSCMwbURSLjZUZ0Q8TFdCeys5Mks9WXdfbUosY3VWXSxCSn5bblBRb1M7TjpXM0sxMT4vczxVSTdGX0IkflB7TTc1LypHOj4vSnIvVFVNbzhfZ3cpOTx9ckwlUmVReHhQMDg/Y0RudjV3WX5WIUJNalIqZz49Wmp1aT5GfldHKWpiUXhiUjE5Tjc3P25uelhoeEppOVhZQVlV''@;'; put 'put ''Ni5kOmtJcDptMnxXcD5vMDpFO1FESXkiX2FVbkkpTmVrZXA9UzI4U2xmdHA6VyRJfTEmSWc/WGpUXkRbY1hfNVImI1t3Y01jUyVzKkBQTzQwPX13RztXJFRLISppQ35oTE9HVWw3bTN7WSEuPGYyNGt9PS5Hfj8vZ3Nud2cuXz08JHNPdSRIInUzSGEvInN4NzZuMTdAcjZpdDZ6SzhZIWsiRXFl''@;'; put 'put ''QjdALkltcHRoXmZAb0xPYl59RltCYDV1QDVGdz9BVE04Qio7JVcyYDAzcV1KOm5vKz4vPUtkfTs9T2phSjd1UGE5SipfJSlvME43Z29WUzYjJHJbcT17bTFjeWlyJUhiTzBMM1U4RFMvckM6MzZxL1tgRToyejNMUUQ7OjVsOns3UTFtbGY7e300fD9pIVQ+dn59cU49R2M+SCJdMGo4KGorVFdR''@;'; put 'put ''fG5zO05yWnppazpidiUrayMqbElHK3EjN3s5QEplNGBpQnBaYy9xcC5OYmU5XWQ8NCRTRXNAflc/V1lVbEovLGZVJGlNYkwqPCZoI3lwdj8pQkZJQCw7Tlg+bl1qZUxvY3UkeG12R19Re0s9SlYmXit+WDE6KUBpd2NaYXQ2RXtjY05PQUE8TTFbNmJMM20lKUhZcjRDcjJkSG9kKnkrKlEoSWs3''@;'; put 'put ''ZzwxNEBdakQ2JWR2XnxiUHh4UDZFKi5uV2szKlNDfU82M3VQeXNNOUAhTVg/VG1TPVZNXnNLUzE5XngyZTJDSVlvYyV8RWtHYD8uMnE2THw9UHZEVmssYGtJYlhzWUN+NEJ5dT47fSl7dkVPOHk9TlssIz9mfFl5W3ZyZHckSVtLPmIkTUZ+bihNez9NO1c4KTZ2I2tuNX1RPT5TeVpWeWNzPT5B''@;'; put 'put ''Xm5pPXtGRik4M1s/NUk5SkkzY11PXSNGQSIqVntrcT5FNjUyMGF1RTlsaHhfZGRweXdhbT4mRnJiKGtUb1N0NUk7Ql1MUDtXZyRLLDVMQWUrPlE0RzBGInEoP05ZfSFVXn5HTXk4QSx4SjlEeEZPd0lVI0R1Kyl6KSRAT2VDVFRvZkwxXV9JMGw8Lyp7c2JlKG9sTl5gaitIPGlEMH5vMntzfU5W''@;'; put 'put ''SE0xcCw3PEZEb2YqfXBTWkA0XWR5OWk7UEFtaWBuX15ULHImXUtreHlaYChHUi8rI3YsVFgvR3JPank2RHxufSZLYURgWGFwMTRYYnFkYzAja3dqc2BJVCZzXzM/SHF4cmw8bWQsQyFRa2xGIXM5VW8kY01dQC86ZmVARCRYYENZcWdFbkJpd2FDSE5NSS8qWmFwTi8/eVdOT3IzR2d4YSJLMWVd''@;'; put 'put ''PCEyIVkrPShCcX5oQ3cxXzVqV0BbVCN1NV88LngmbSZqbWUvOEtmeSVyKkdPXT00QGV9OEBRMj1FIiNob2R9JHtUZylrbnNjKHtbSndXSlA0fDNiWGxBJXNzU3A0dHZ7M2IpY0g+VnR3LFlpRmolYnNhXWIlYkZUVD1eOFMxTUcrZEg7ZmdJWy86SjhGSz5aWDJ7bF5LM3NKKCQkWEw2VT1tQTA6''@;'; put 'put ''YG1TQk5IKEJsL0QyNj9afWpLfSRvPUtySUNgJCJJYmBERkFyKkgyKmJmSWg6bj0kU1MzMSFHZzR3M1gra1YlVyFUeEQpU3wmfmckO11ublZRZ1p3eH1+eU0vJCIhY2dAOHVOSm1TLiMpJDhPaSpVRzpdSisrcihtSFFYRUE3anRJcDJqUWNaTyIkKDMhXkloKmB1YHFDZH1oT2tGSEx6NkosW0lr''@;'; put 'put ''bzFvQkNvfVd0dktFMF16TkhHInFFOz5CIzVaUHl+ZTl5UkB2RGhMOE5maDRJUXR6YCFpPkQuckc+UlFMb2FucWJhV2MiKmFGM0IxTjQwUiZOfHBnVnR3eyhyTjdrLj59RFdAX2xnbGthJWxqQjUkPEhMfX5EJWI2PXRmZ3MrVWpzQyNHSHIyMzFPayY3WiRNaD8lTCFnSmhLZ2dmSz5MSmQ1TG4r''@;'; put 'put ''TzJ1bExIVnBfWUQwJHZfRmpPbm4hP2IvUkIiLjdlbmI1QDBtam8kJi57bSZYWDtVanBZQGNWfkY1UHBeN1o/MiJaWDhPWyttUC54Ikw/KGB0dChqWiVYUGA1I2krKltXZiQ9ek03bDFKWUYqbiI+U3xNcE9yTEp3YHpOSShlRH5qREBQQHF5X1FfYiliMCRSO2BmbHhHZy9mUGl1M2FPM247NlNa''@;'; put 'put ''dTs2Kl9BTWpUWzxAQGhdSSNValFdQFN7Okd4VGFAdmhlKV9SbiJXcjNbcVQ6OD1RX11RIUVuNmJgSS4yKy9+N2tPRi9qdSpBaTJ6d2VdY0xCXS4uaigkJS85U3s2akpLNVt+S09JeXw2Z0krbWxVP2NfZlZRNyhOcENpJTRheCZWeDFFfF1wPWw5SFcpKyx5cXJdYzxbL3xqfkVCa3BJJFAxNW9e''@;'; put 'put ''VDNRI0tMMyZaQHM8LyNyL3VLeDB4XnBpcTFALzFEaE5UYzhOTih9Q1Y6SmoxJG14PTIyUyI5RDVAQUowNTg+QClLOm8rcVh8b0w9VTAlMW5eZnZXZlomNUN9ZFN4Pzt8UjwpKixWNGd5XSx0Rm5SfnFhVm5xKmF7YXZUdTE9ZHpxWzlMfj5YVzJBOW03Tn5JYypgbU5CZXlfVk5jRWFFZU9HfT4+''@;'; put 'put ''Lzt+NHdXeW51M08yN1oubExxKyFednF+NWskITBKI0xeJTF+RTRqLkZFejhgY3QqIzZPVkdnXzx7OXxROGNnMFdEQEZpdGUqTHNKdGM9WHJ3RFNUPkpMRmk7IXYlOjFqXmZJViI5XyY+eERXXW5FWE96dFE/amVHbENHeCR6a3NuPCYwPFZvYyghN3xEakxVSEtAeDhgMU9WYUlCJTQ8bmppMkdz''@;'; put 'put ''WWFaVl9EbSghY30seVBMXjF4MXMxcHgmVE1aTE5HX3t6bmV7ZnZDej1KdE9jdyxKciVFVFYhJHIqZ2VoJn51Qi82VjxtQFIlOS42Y2E0LiMiKVJKMnx8TTRMOCtRZF8xbS53QmFTN3Y9WlldOzZIM0k5Y2ZUfXlRMXAkUk0vLFU+K1skRWtHbkpBREJbMS4jTF0kayh5ekllbV5vQzZ3RHpJMlRz''@;'; put 'put ''bmZkV3UzNzFPfW5yfE5TTHttZTNVYHJ9aXdQRmRfVFBNODcqfnk0KVR4TVFdNkc4byNCemQ2cj5ML0c3VDNHUUF5fWVmQjtBP3VWS2ltdzIqa29hbXNQRk1zejt5UDd0UT90Ol45PzRRQkExWG0qdiFhRH5JXipmdlJDWm5KQy9GVSZXbyRsKEduRHspOGxvVnNGMzhaV1ZzKDt6KklRQUI6d3sh''@;'; put 'put ''WFN7ZSFbdWhYYXQjdCtGYzBLcTNMIWlFfi87VmxeNCppWHx0dHYzSzZhNk9ZI08lNVNyOVNPXTJyPWQobGQ5R1IsLjxYS3VSSEUhYiZMSTl6bl96fj13KT5UUUAsbUlILjZ8MDtWeE9eUzhCMkVKQFQ2RzNVdkhieElaUFFfeHJ2LDsiPkA1JFVSM0hZM0tMTEE+bUd0LikvPjVbaTQ7aj42SVhe''@;'; put 'put ''Q0EiKy81WyRJKGF9UnZzSmBjfjd3ayR4NG58dGZRUCVzRHR5Ykl+Un0vQnxKSXc1aGNBVXJsZyNPZmEueTdQZUFqY3ptWT0yXl1NPHxSak44T1FdKHVTKHd3PV9eYW1XKV86QjdYJHdAPEI1V1o+bXRrb3RVUHomVz1MTTlZKjtKPDpbJVI6VjczRk8rbXtnOHV7PyV6aClhMTNpXX5EWXtkMENW''@;'; put 'put ''JHgmfDk2KiZGaXpYTkhYdj84bG1BK0VHTmckdjh8UkNlVGtKaWdNbHF3Zl9EbGZBQUtGYHt3KSw8WDZlWDFnL1AqUDl2VGxNKTBLX01UIVNTbUpDUGJdKGEqMUozSl9EIV4uX0ZsInBYOVdKL05KP11XeT9PM117Nn4vXm1yRTBkYU46fV5pa0pdKEQlR3s1IS4sM1BFLjFRJD9YRywhSEElb14p''@;'; put 'put ''QmEsJXEwUXk1OiMwSDVjO3MpTlBEPWN3UVB3cyxZIl0rKT9SXTw1Jm8iL0JJX3VvdnFqRW8kalsvfC9mZ1tNKm13Q3A9IUolflsrUm89NSF1IWNnbXxrOVNRdXErJCxJfHN+X2AsYi43RC9yb3JWeiZYc1tnbE8xQmRmfE5mO3pWKjApM2NOVnR9RjNIUEN1aTIoYEdCPkNObEdWT35fKX1Yb0cl''@;'; put 'put ''QGIyP3RuPDNXbGJoPltyck9LWlJIV3NnSWI+MUc5WltYJkBPQ3MhJERhKClPLFpMZjdQWmtGOTdvMGZuM1VFKCJ5IllJUHR0T3cuRHghZDl3Uz43Z2dJYUIkZmwpMi4mMmlmL0dZayh8MV17bVB7MT80dFs4NlF1NlglNjV0OiVRaFd1JGF5T3VJSE5jOSUvKDhqUTUlT1Z6U1lYRDBidVdwdXF9''@;'; put 'put ''TSZ9Kmd3ZT98c2tPQGZOJWQ/Yj5KI1BCPVZ+VSw8cGpqVWlBbWYzPG1MO0RjTS5lRX1BW0gzZmZmfiRId2dXY3xPIU4kZWlgQ3xLJmBGeiZOUW9GJWk3fmFfdy40JH55ck8uPj4pK2E7ITRJSEAoSG5GNUdoR1tlRz80cjxYVClYXkBIfGMybS9zenc4Nil5N24lciNZeipoM0tbYW12VmpqPDI5''@;'; put 'put ''WTwmXmhHWz9QbHVfMCJfNWImNWRsRy4oIU03MTx4OyspITczRmAsfUlOeEJhL0g/cE05eklveW1jaixYNC9iWGNDfE4zPDhxRyl5fEkxIklKWFNBUGt7U1pAWkQ1SlNLT3ledyZLKixGKnVrd2U8e3pUTVNoMWtTSk5dVz9VYytfcWpxZmksNH5HVm1LUkRpe31GS2RNTl1JdVE5amRKN0pPfFt6''@;'; put 'put ''bm8vX3pxNUVtTkNYZVs7UUNGczZsTiYsZ3xpLDlbUjF2b0ZfeS94ZDF7KEg2YUV9ZXwuUXRJYTpxbCZCI0V5Uyxha1lTMn1+ZFIybmJqU1NzYyQoPz4oWD5pOSZUfj5VVSNHNUg9TSltfS5+eDJDOFZjbUguKiM4YjV3LHhqaEZmPXVVPXxXOlhrRjs4Qi5rYkRvWkgrWTs0aTp9aXRHNntSJDMl''@;'; put 'put ''TEUlfU13dnkjeFFYVTZBbiokOV9ORm93UjhWZVV8K19NVz9SL2BQemdmJkV5USwsWyxbe3pDb0RGRDpqKWJvPHxoWnkmRTR7M1pvTGB0ZjhYW1J2KHFHdjIqQHVaKWdRM2c7JDllOEVGfDhqYEpXInI3SzI6L2U+fGgkMUIsYFRoRFMvRT1rMVB1OH1IVV82fmhSakUpIWcuc3BfJVdtN1FoVlpN''@;'; put 'put ''N2FsYGx4NXh+dUJlQllmcVVBaWxMYm5hfE83YmN6SitvQXtxUyFEWFI7flEyU3VgSikzdSVSSG84a19IPl83SEVBSl09bGx1NyZXPUxZPlE1VyVAL1k+LylJMmZTRE5ncyY+WFZ8JHIpe0JWNnlCeE97YHdJa1s4eEFjVkA4fUVQQzRkKU90RDU7cF4wNGhJTT5uOi82RGlQfl9GSTd5NktAcF02''@;'; put 'put ''SXguNHIwQ250Nk1scyl4byt4Szp4e1coazdSXVtgLy53PXdPPlA0NEA9Y2VTRSF7XllSUUNCM0owMW1EV28/cmRBQHZwK2ZAdUBvc2FBR3RUVSRbPFdIVzghNiU9d28lVzxwflE3aiVlcD90ViFUQklqaGV1O1E/S0BNcmAyJEVLcChIWFt4YDNdKXJVMUJme3xWRmM7Q3hkSyFIVk8ySlklPmxC''@;'; put 'put ''TXlEXjNxJCpFL1JtaGt8OTRfL1cxVWdpLzJPZGBmVGteanFuUD1xTHpNKTpoajlQM2w3dE8zYSE2QjpCSW1acDE9XV4mJTA0ck5mQDoqVFZrSVkzLnBlQU9wL1FgblBLZVZ4IVIkc3E4XVZjTEYhR1R8VUQ1O2hYcEIwbl1zMT1EP0t9QDkxMEs+I34zPzJJZkwxPzNDPTdSVnc/WklxUm0qdXlD''@;'; put 'put ''MDw4Z3E5c1hUei8uWzhod2ZzWlVdSFhqMSlYekIoQzlGZnJHfnxaaHoqPFREbyspT1R4LGRhRjhEc0JZQjB4LzxzJSFOOlFFSlh9MTxiTkgwQ0lCVUl2Kl5ZZ1g7W2ErN304V09Rblt9UjhxWypvVFpfSV1PMD13aiVqI0dVWU5HbVAzPyRbKmRmV29JPCRhNkhXQDU8L2AjJE4/dW5PJD07d2pN''@;'; put 'put ''MXY1Yy9sbCY4U0ZVT0U0OCM5fW9jSCZOdlpufVI6RUtDSCp6Z2Nzfit0W2QwR2QqKzVKT1pARVdvOl5vdj9dTWpqaCxTWjNTeytTVm9KYCkhdTlIYCVyWDVOa1UzRFRad1h6Uzt8aTxWdHJIZzp3RDVBbE5CMDZ7JH5mZHYwXUV0O3hXPld3OVk2dngzZWZPJmhwcVVKTHwjYCh9dX1QVTprfWUh''@;'; put 'put ''PEppJipreCxZTnklSio5QFgpK1kkJWhyW154eV8hOkllVzBRe2dnYGpuMjVaKzppekprWiJxUUVzbSs4RHdwWykyPDhiT0whUz1gYCJCVGN5cyhWPSUsaG1ARF82OWdjVyIwVVhQPDZON2FdQmpGLzMlWXR3cktrVDtxKElYOG8rJllYbyhmfSpeN3o4VWxDNU1IU2Nae2VZYnVHJmJpNUFLV3p+''@;'; put 'put ''eD8yJC8jY0xIaW9xTkwhQS9LJExOe2lyLmJQIUZec2c5KFlMRXhBMi9bRX5iMTI0OlYrfSNuR2ZnSUQyPksvIWl7MnMvS0lzazJ5KzVCaEgla284bVJxfj5pYk4mSnQ8cDp9X3VYK0tzfS5CUjFZajozfT9VRl5TRF5FeWk5dkAoLktCT0ZZZiFSaUxCUmNxbHJiNHIvM0d+azR5QFJnUipUentR''@;'; put 'put ''YSoxXTNEXjR5UHkxSmN4elhTKlgrNUU4cHh4T2duamgsbFo0L3YhUkY6L3QzS1hASzUuPFt6NDAmR1phbzQ1JHEqPDR6aEVTKF8jNzp5SU1IeFVuKjxZdD9UeDRbRzg7WzVNdGhiOkJqUFFPOzMzYmFfNkBoeClXdGptI2ojRkNMekF6fXFiZn5JXjkjMHNbUmtSXksrI3FrZyQrfWRvNXxDZSku''@;'; put 'put ''bTA5M1RSSmNwWnkqNSJJV217Qzl6JVs3VSY9dFRDcSZtd0RtfDt9YHcwYSFfKVQmVzx6bG41cT1GdncuUWtrLF9EU0tDXSY0fkVlRENOPHpLKTV2WT5oPU1ieHlYUFFvbzV9WGYvWTE5VmtDKHcwdD1Rd0FefTZ4OG9HZFosP35TRzIvKkBfK153WH1oIkNVOlsrNy47VmFCcT9najpMTkNVb0xb''@;'; put 'put ''MT07fmcqUGJ2L0pzajNTOnZVMG0iSj4wVHNmSCxMbyo7LlRXfEksfmFwbVZ+Z2dENXc8Izo9V289VTtDO0Y6O1I5dUw+R1hldTRBNjYrQypjOVUxZlVMaENHSURhJlQoZnBpO0lOUDA5YztKTGNPLkhAMDJaPjZ9MnpOcjJwYz5VYjxoNHpBMS5IfmY7N3kqKWdNXThWX1k4QjlnQ2J8JmlDNzAu''@;'; put 'put ''RnRLen1AfFh0M0U/PCFxKVtFMWAlQldUJF9xWFhLXSM7Xys8RS9yOSNUZjVjaWksKDRWPksoYmhSRH0/WlUqKkhTTj8mRCFuM1REQj4oM2w4bHpmTyw7bD9LUUZMTiVCajwqOlU3JEpPYkooVS5ycHB+IWx2JG1GNFssOylRPEBkVUBmKzlkNiQmZSJONnRydS95WXIze0YvcEZYIlt2LHV5Jll9''@;'; put 'put ''eHd8bkFye3AsRGVJMWVPX0ZKdXQycX1lS28hQHVRe2YqTml5SXJRfD5BUzlFKWs0PkQwPmNOZUBuRHBhKzN5ImxgX1NXODlXWGExPEUzNi96ODd5elZEVH0oUjxPYFl4RDFIJnt9PWFXdUBia1ZpVFVaNj0hPio8bnQ/QXF5ZV5WJj4/YSssJW57NEUybmtxNz5SLj5rMCxPSlNfY0B4W0dycy4j''@;'; put 'put ''eVNiazE3UVM4IlQ+RU57dkAySTdXMz5xeVtMaCtwOUhVZzo7Mml4Zk1wPTRsPWp5RFIiJmxuflAvSXJwWGs/OWo7MitEYjVoPWxGdF94SjZsTlNAVCFjV09bcn1gJSEpOjNEIytKPEBUZE02aiEhPltTc1d5VUpSOGwlMTBePCN4bk5rOz4pemJCWV9KMSo4JUxtYm52OWArXiomYmNJXzt0Pnsi''@;'; put 'put ''Jj9Yb1goNHteX3tQc1Mxd3FZUmBFL2MreXhhcTVLVWRZLD4yTDJ7QVtFRDtGPysma1hDaWQ1TjQlPFs+bltdVSJkR3A2SWBHPktNLDNEYmEmTSl2ckpreH5eJlR+KUUxQzd2M051aVBCSm1PWDM3O2V+dzgmInNRWDBXSXh3Zl1BJCE3QCt8eS8iSU0xfHdqdF8oOENnNmQjfXJPYV85bkM8Qkp9''@;'; put 'put ''SnA6Qi5xOjBAT119SEF5MSpkMyxtRnsqM2QjPGQye0s9fn5TRm4oRDJvezZTc21wVStyPXJKJmI0OzQ2VUpzI0h4WDp+a30rJDZxdFNvYShpa2JpRkBYflYjKC9kNG4jNHdMM0U5KiR9JU5yMkNeIkchSj57WCJYWU9DUV88K3xZL1pQbkdwfjY6eClZcGRaJSJCWzdxJWRUKjVnd1crJXdsIW1H''@;'; put 'put ''b29hM2xYNipHekJQOGxqJUBsSGViXXA/aCQhSXJuS318MD00PUJrfVlnQFF1OzwvMWFtSXxjWDlwbE1+UXYiZH5eaFk9YFtUUXxUdX1admkwI1V4ZV9CRWJ9Z05UfnMwSGk7JDJCUHIoY2BaImkyNkpseXAsaD8qcCFqTCMlIXsyek1sUFlXOSR+MixtRjxWOD89d1AhdzAhITByV2VJIUg2UyR4''@;'; put 'put ''STV3fER0RzBFd1dGXU5BWmU3dXxWb3tBdmBdb25qMUFjP19dck15SFZEV21mSTVKYVc/K0sjUGRsdEYpL3xZSTM1NH5afi55SlBbSS48Izc6Rl1dWnRjUiN2RS58Olk9MUB+PEx4RylANmEjVXAlJilBMEB0V0IlSXJGfnQ3bWFHdjNiOnwzU3lQSHVoPzpmdkZ5IjRCaF14dj5qJFd5OXY4WThi''@;'; put 'put ''ZEhkdy50djZUImNtbHB9c0J2bihYemdJYShVYTxGRDZuTkRwRXJvZyNya20uXyV9MUd8eEBDZiRmOWldSGgkaUJSeyZ5S19mfjJnWXhAKVVUcDYwJlQ7XzFkb2cmd0omSl9PMCZ+cjhAdC51eFM0W2w5NSZxU34mbzAhajJJUlFydGspZjQxaGxFTmR4KD4wVCxkX2t2Lnh2Vi82OkU/d3M4U0sp''@;'; put 'put ''PyYjYUtwMD1LM35xbC9zUm58NW5+MmM6WkdgKVE5SV9OTjIlNj1UJSRgfXphXTY+N3wvdiFTY1U2RXNWUDRSfXlDJXEuXilMOWU+ajZqP1NmeEVrYExdJk0hNllTV2J7PV9KOyI2MXdzNSRofVg5e3ArYV5FRCw2MW4/NTNXMytjOGs5WntkT3FRcDphLnYpU01PVj1sRm0lfDU5RjRbL05dQiFB''@;'; put 'put ''PXt3c0pubnZEUnIuSHtvTk9xZzs9MjdqYWVhMXhLL003aGJVZTM5ciM5fHtELlNebktNazksP1N7cEAlPGdUeXgleEopelVab2ReTTFPODV1XXFiN2hZIVQ3VDtAUCN8dWNjekt9RTAufWF1eUYjSiUvY10uVTk2elk1WD1yRXBNcEgoQiVmZzd0U3pTY0pESnFESmg5Im1ZRitVMVR4ekUycXpT''@;'; put 'put ''aXVBTXcuRmtmSylhWUw3KiQwMCJaW2RlaER9fTcvIip8eG1PKkU6K3pHYS9jfTQqOTtzQThDclJZPjF3VzlOSmRXNllpWXQ0KUpzSzM2N0BOUiwoTGlkcm1ueGh6NytuKDhzJGZfcWtKPUU/W3QvQnphIWJ2Qz1QVC5gSW1eYHAsV3xOOTMlUCExL3k+YUttU20zeGA/QGRrY0srSEJfYDdYPGkm''@;'; put 'put ''MTJ3dyIjd3FxJXE3bHA+dihbaEFaU2hmKHFWKEk4ODtOT21Rdnl9e2RpcyQyMnhnPWR+UzN3VnFwNldzT2tpUWl1WTVIPXBiPks2L1ZkPTNBYUZgPSZvViFISWlqR2g9RXZSPk97PmQ2NDxyXnxTNzpqfTdgRltPYzM8Nl5KIU9eZDMiYXc2QS9TOSlNbF5XV1NJSi9uIXFKTT90eT5LYGZMelBI''@;'; put 'put ''OlQwbVkpY0FrSkVvd3luZWZ6am1DfHRmUmZ0QDg3MCM5WigxdjJTQnksNTx1P2d6OkEmd01XNDtZRmM5JFBwTVdlMU1gVi90M09YMWhTYT9XZ2N2WH5WVUJ8Nmh7a3RNX3h5NClJK2IhIzluQ1hfZVV8azZSWmpKdlVHLzhrdUZ+flt2SDVOWzBFR0F9fVZgay9wamRUY21AMHRMamVxY3xhTzMw''@;'; put 'put ''aGZnZ3EoPUI1SyJnM2Evaj1UQG47amExYHkwUFdmYHdoZ3x5fE4oPzwwXXhbem5bZ11AUnM4azJ9d1E3Qm4pLzxrUiZQRzF8PEZmeTt5MH02WExKfFgmbnlKRl53UV5eeTlWYzdMIlVrTXA5e1YiYHt3UmUwL15nJkFELyxkUmgjLzZFMl5DOGRYQStma0c1X10rK1k5RSQ4e3VEbz0uJTxNbjB3''@;'; put 'put ''UHt8KFIsRFh4QHJiR2g2OngjY0wiT09nPy96Ul9lRTMsVC5AfT9IeEJlMzRPXWFJbU5LPnVady9sK1hKM15QVkF1TU5bMkg8Pkl+c0dxeUQyJk00R0s+dTU4Wz5lRERKbW0hNjsuWGxaXXdWdkElKGF3YDt3d2wpTFJORVsiO1gjO0MzY240ZFowNXVEIyY2MnRfLz1tPCtRcXtrRltJS28oTncr''@;'; put 'put ''Xn4jTkBzNTtUVn1CbFZtfWBHS1ltLHVKaCxiVyYzMWpndkp1L2Q0QHdzQEgheTdoSC9lRSsrKEAyY2RpQzUmbnxyd3VYUClTaSNhJTpGQnV5VnRWVkN3PUQ4Y14zV3QsWEVAOiU9ZHZgV0lIdWM3dV5xQE9uZHgsfmd0dWQpWyU3TF1Hdl1hdVY4dEJIRSZ6NFdHOkoqR15PendDckosbz9eeWF2''@;'; put 'put ''UUFSfV93MVhtTlYzZHUkL3pGamhBQE9CK2QuP1UqLCIvQldTUE5uMjs4WjxlIUZGenlAOGMoaGc0QVVNbmYoXjQhV3sqanBQYkF0e09EKCpQeU5tdEI6dHB1QmF4WiIvfn1pPGBFOnxfbmdbSipOWD0wXntJInBOQmFPPCpKN2I2VFUjPktucEBJdHdzV18iP1J8anhZc2R9YzlqbzYxZ3cqW0JY''@;'; put 'put ''SmJ+PGohZyE0ODQ5bD9ubWxaT3lRKmAzYkpnWkBpIlQ9bSthP11OSVNmOFt5Y09tTE1tVVZwKz1sIj9ibCoueVVLdG90aHZyQVc0PVZqfUU2QHppMyhrKS99LzgmZWBXN3JRYX0xckJfbkRuLzhHNlBHM1UsUU51YjZmYzJOSlpNIV9aIlt3Vl82KmdGSUA+JDIrTTxPdltBRDtJSlU8bithYjdu''@;'; put 'put ''ZSZTTWd2WkBLI2UkVmBoPm19R09YbmB0Ly5PXVRrKzticVErNDZbMitCQjUjPjVqKl09LkkhVygkQkJVNiojOjdOWEZFL1taU2FwNyR7KkVDNyV1Uih4KVI3WkRYN206ZlV8dn4wL2VxMzIuL3tqTj1paU8kVEA1IWpkQWZ+OEgiZ3tWeTssSnNKK2NiK0FRP2pWbjchcmZEJVovKD1vZFZnTDcr''@;'; put 'put ''T25tZExyLHIre1sxeHAxdWlFUHFxfSw/aT5KImcyOVNXbkZhckw3O3s8P2ZDNVJqeX5iM0NzNiZ+MWZEbUZBemAoRWBRZ0B5TW1KOGl0XX4mSnJ9O356X24wQkdfRzN7Tk16XjBPdGNDPEwxKjVeVzFnKVFhbDZ1fjprR3Jpe28pKnFETykwMjk8TThaNChddjc5QlA/dWxJXl5NPihidUlRdy56''@;'; put 'put ''ejxVWG4+W1klP19CWnBdbmFWSmhZTSprRGtSJn4jKUR1PVJpIlNETCpKOzxoUj8pfUtINWRXYFUrfWBTYzooZXNuaEV2XiM2fXhbKCh6eG4vMHk9eyN8S2xzTiZrcUs8WEJQV0A5eXlFVXdwP0UuMmAiblRCIiw7WSE9Uyl2ajUoOiJYTERJRztjUip3Z00hSnNWdUBweztVUURzO3lqSDo7c1RS''@;'; put 'put ''S3dyM353KVl2M3ZmakF1d3NhV0VGTDBDTXokLGttS3YuUkZRb0dQL1FNKms+Pl9xP1VpdFtHc3dCYCh3ZmtnSSxMVWw4JX54OFVPd25TQz5eS0BoVmw5QjI/ekcoVFZ0ST1lVk96MGN7RDhZUn57fiRTPT89JG5ObGd0T080NC9dOiFdN1ksM0BuO2w5ckt4WWc8flc+QEIlPUk5ZmdgNW4wWCoz''@;'; put 'put ''N1RQbChTc0RCc3FYZ3sqUmg+RW85aFZOZkFlNHUzMEYlZipkKUImJDA3WWpiNGZpS0BPZkZNXTVgeX5oWGVIK1NEPVI+UXE0c3NKW3YxSyUuJnVUN1JbTnFAJGxhL0NgI1lNSDkmKV4yUWBPdU9kMWtHNXpDd2ZNb1RoN3w2Xyk2JCE/K1BHNGBxdDB2bSNrTV1iR1hdOnhLPTIxdWlQUDZGNjE7''@;'; put 'put ''NV51TyIiX0tRLnZCfGk5PSMkKmUmcXVYYiVxYmRPamw7VXZBInAzKj1kcXQpMzJzQF5nLlc4S2dpOnQ5Z34qO2dJd0NIO3laRUV4RyM9OS9OQzhuO2JBckNOY2h0bD5JW3dhajtEYmJ8SmMzUSgsdyFYbj9eYypCWzxDQkcicmZ9a14zV2Q5JkpzRVFedm1JIjpbc2l1Rk1ESGlgQkNjUn1LfkJ9''@;'; put 'put ''ZXNfbH03OEhQPTkxYUFPJjM1ITxRW1NrfilCbH44JE5xJnQ+I0BnVy9QPG5YJlRLYDFsWTRJWXYxUHpdS2x6TnNpWyYoQTtFbV9yeiMpbWxFcmwhfktJTVJrR2J3T301d0N8dkJVQ2ZNVVc5cFJQXUtiTy4qM3d0KiJpUXM2WHg2aTRyTTxIPTRSREAuJn4iM0FqP1tPeT1MQXcvU3dqJUwkPEcz''@;'; put 'put ''bVBRbT1bSWF5XmB3UWJ4Yl18NixtdUxAQT5bYnJAIjNIZ3pCUytaO1IiVHwkLGFzXigsUno3WT5neikrdnlkJk4mc3E+QExyOHpddE5TQXNgKiZAcT1CUltMYDwzPHkjXns2P1dVLjMjfS9zRTowWktyL1I3PGRDYUtSQzZOOy5YbW4jREY+L2tFVGckO1o1PT5NVzF1fl1ndzF8OGFAdWFAXShQ''@;'; put 'put ''JmZ7I1UuOGApS0FGdTN0c2JYRHk0dCNTPTQkKUs5elgzOCJOZzQ0UkgzTDAwc2N0TDZCfW9wJWN4JDVrMSxkaF9AX19pNH5vZkEzKyw8SlkwUTVLLj9nQiNBd0lBZ3E9UFhYZDxUUV5jWFtMR2lwQzptSVFaV2ZsXSl+aiM3JihJKk0qX0I5ZzdrRzxFWDtTJV91Y3B+L1NnK0BhMGplZnwkMXpJ''@;'; put 'put ''RGs6ZWZvZn0sNSReZG1zOz9CL1IqLCRDfFZOMlJLKmZVZyFScChQNjtabHZ1XiNxMyNeZypwXXI+TWA/emNCem1uPDgodD01cl98Z0shfDJUdH5pWXg5Omo0V0p0Tll4Z3FRP0x+QEZETDQhTlhiK3l2eS8pbT06PTk7dS5rOTlTTWhGTWFVR2owSmRVPVsxY2JmZUB2JlJKOG1aYWxTV3krdnh6''@;'; put 'put ''O35zMilaaTJjbHU5bm9demVeUFlsZCVYcSE5dHxwekxrLiRseX4zMDglWClHT19jT1BgMSNYKGJbK1pUa10+cXIrcE1+cWlbbEU6UFBmYmxsQ3xeMW5EaSlBOHBVbGF2KDQ3Mz16VlV8YzVPY2lyKlklQzM7Rzg+b3lte2pWTEQwPnIxNEMkU3t3cEEsbkk/c01OZ3JlMn5VM294WVIyTnI1WXww''@;'; put 'put ''Ozt+USVOZFkyIzRjcWk+PC4qJl9pPjtpIkNFYDBOJDVKJiM2aiNkOGQpRz1IRV8wdn0yTHZaZiVWUDFKZkl9QFFOLitZbH0rcEVGa3VjT0hVaC98IixtdEw1Vi42O3RrU2dYfnVuNGpZLmEkcihbYF1vM2VQNWpZQVglLys0SlVdUkFAW3ZJY3UwWWNWUz9LezNoOHgjTTRuNnMlQmErPThydl09''@;'; put 'put ''aCRXeXhzJDZLOjJvbWtIKGVEWGRBNCFAZ2lsfSMhVEQpIm8wY1c+M1BgK01sPEVWd1M7SDlbY3dYb1l8eWYoIjdSTlVMOmRfTCZHVVRJWm53KWYpcyZhLiwhP1BlSWx5dHwrVWZ0Zn5DYHtWPXo/JnNFSXFZS1BYTilFTDpJI2pefHlTVXR2aig7RnYoX21MR2BvSTgqWHIsWU97b0lxR11FNTo7''@;'; put 'put ''eTRCRTB6U1hKPDBKKz0mRlFdZ3k2eENFVVJUSVBCKn49TD1UVUJAW3VPPyZbSG5PSEooUU5JYzZAXiJ4THE0PilYRkx6NTldT3ZNeGBEZSpGJGMpblRyUHtxLFQ1ZGorODV2P2tRR1g7cWoifEk0PnFvWjM2KiF7WUh0QSNoJTB2YEozbU99cCljOmN4Snw5QnpzLE5mNERbQlBCLj1yWTpIbHVg''@;'; put 'put ''b0xEc3NyL0dYYTVJV3RWXSxTQDF0PGRGPmdVXTs5X1R8bFcuYFVLKUxzRE5EcXZ6dipCYG9OSHppSjt3LndkWkNvVGoxYjgqNilXdldUOVJKKkI+MkJlODwycmg0SkhPY2F8PDBNQld4aDtkdEdlal9JRDxjbElLOCx9NzZtKVsxMXc2U3NHZDolMX1pdnRsYWhXVjBbXTYreWx+TjRhayFSJG9k''@;'; put 'put ''Rj9NY2srYj9fSDpbNTZNX1k9YFlrOHt1M0F0ajYzO2JSX2lOJDZPYnN4ZVR5cVkqWkMseUJwKHZ4PUd3QmhmZV49JVFiQFBVdU1Qb2l7UUtoVzg1eUlwUC8oMVMoT1MmWFd3SDY3QyYsaFYqKzUyXUlUMlF7KHI5eVNQWHR0ITdGN3I3QU8uUVhlXW4rbUpxfFYpTU54RW40VzFrUXUyRG1xaSx0''@;'; put 'put ''JDNLKG07am4pTWlrTnBzX3Y4YSZzIit5elkpcllRJkFTIkxSRERPLDxIY0JTImJyI2NfKnZtfGMhRmh8NiJVJEcvUGp8ckIoUS51cjlXTS8veFssNnZscmV+aDxlcyNCJnY9PSsvY086KSoyPV5afTNMJUImKmUwPm1BI1E/OmBLb045c0o3dVFRVWQoTnw5TFNWRnw4bHRCZ3pIeiF4N3kubFlD''@;'; put 'put ''NXhqR2xhVUFfalNvNEQpRThJfjQpMTB3d0w2SS9bVHcucWxOLE01RXosZTRHSmZzaD0xWzMlZm89cFVCQF50dHRaVF85NHM2UG9dOmEoNUROTk9jRz4pfTtie2AxeFBEd007bCxFeVh1T0VCKmVNRU4wMyFkdUpaSXVQdE4oYkVeQ1QmR15ZVSh1fCo5KzEmYjpuNWQsJFkmPm50X0NbQChePXJ+''@;'; put 'put ''aXgwRGwlS0Z1c19pLitGIzJrPyJObnRuUTlQWD9PNlkrVGlDfmVPe2t5ejNWQUQ/blglOjxsNmx3MnZIJTVHY3QuTz5SVXA3bilHQFlreGswYV5ILGltI087aDYkKG09KGNkLHQhM2h4Nnwpek44JTl9SnxtT3Q8bkthU1BtWGpEL0pDMllqVCpCTDZQRGIhQzJTL3c8JEJWczdBJkFGNFY6Y1Fa''@;'; put 'put ''Q0B0biFPPHQrOig6LnpMLCVRczBpY0ZCNV9HJHp2MCZFNmdHeUFtXX4pTz4vcSlLY0ohI2xHZ3FnakRrQEg0TCY+Pz9HTlZseHpSXik3bHQiblEsIThERElpa0AzNnxMTGIjbihzS0hke35wIyk4UW1HNUM3T091WXVBVzt5WEl2R2tPMHY9cmxWbTh+cVJaSFl5K0kxIUMzbj0wKTcydlJHd0pe''@;'; put 'put ''cS52RjV6RHBOW3g0MF59MHdrbXExXXl2Pjk9cyliQTAjLlphfVd3Mk9gP05QMlhtc3VqNFFjcFM6Rml5NDxLP3R4KTxVWkF6KkZVK1Z+UmNZLm1Qe1FkeGpxQ3U9ay5VJkgqWXFHWTpDKzdNJi90a1pCRnt9K09iTWsiX0ZfMCVWYEZzOlc3QUdwYzxDdXp9ZTVqcjVVK1g7Myx1WHFgNzlZNkNX''@;'; put 'put ''K215Ky9QKUhYRD9IWzdWIkdYTmtaPntfKzJzUio5ZEdWJUtkTipDSWt3LDJ+IyFKbnFSJFhzIiE+ejgxSkxPOjhSVH19L1d1VkJrUSEoPG1KVipYUXIla3xrSGYwWj9RZTRQSDJ4ciYoeWNCVkYlJEJXbl8sKzd+cElufGNWd2B6Oiw7SU8xZGRSdStgMm5fP2xRaSx4cVtCJGxPelhBT2sjeyt4''@;'; put 'put ''OUc6UWtRXzBEcUR3LnUreE9aNFM/I1AhVzxSbzhgXXVlWX4vOyxFUSYlVXh0bWZyTW8/bERkVz51eDc+TUpzJDheSHo3NjdpRFVUMClFZzp1UWdGbCRrNm1ZQlBEJEx2X2t1Z1RNe0R0K0xCeklrRTcyIXlibHhffSVfL2wjUS90SFVgPzImWEFZRiVOVE5DciI+ImppMThwUERQT35LK0ZrLndj''@;'; put 'put ''bXh2djNWW0Qhem51NXFFNnE+Uz58KnhFN0xqUVlsa0B8IiFZUGBvJWhuJCtqZzZNe0ZvTjgzZSkoOWguUl9ITWUrbUhJRDNxTWMzTHVuYEZYIXFGTz8lMjx2dFBOSHAhb2lQTHovcE9QKlpFUnZxczppWERfVWhRVkJqV3pVfTBkT21PTWNZTHdyPjUpcWJTIyk7O0VNJVFSXiw/Kyp7dT96LktL''@;'; put 'put ''R3hwOzVuflA/VWA6YX51K3koI0A0WUlfL2pYbWMlem9GQHFpang9NmtmRU1FZDw8Tkh7PzFtJGtXamRnZFksYGQ/dF1zJjsyI1F6OThtRWBPVlMrUFByTzUsbU9zfmIwNFtrTUxvSl5OL0EmTkFvX2pbakV7TThra1BqQHYveD5NfXpGKXFZXTQlUWI7UHo9TW5AbzRRMDh1bTlqay87MWolUnNP''@;'; put 'put ''LGhaMnJgXnw3JV09ZSZLMWx6eiI3PGFpeiZ2OnxLWStqfGpoTWt3VmIjOjtqTk86YVJ1K3k/VyY8ZCNyVSpgcUpTL3lMaD1Hd1YxTGldMHVNPiE8XiFZXnJAPz55c1tnMF9lMlJhQkJBb0cmOWU8aSU6SS5VWk1xc11iLHdjWD5bQ3BoVyxZVVV7W2piWiVbeDhVL0RmfGhhbk9jQ3wmSTJafShd''@;'; put 'put ''NmkkVVpna0trOUUre0M1ekhJfnFgRWRiPX1MSV0+TTh8bnVIfEBOeD8zb1ZbYTdnMW9NKm4xXSo2T2hAMV8yVUlQcWp6cFNyWi5NXiI4MT13NHVhTihPalhvQW1CfFtETkBfOFlvWX1vLj82OypDM2xMRXF7ez9lWVBsNzowWXhHPzowdmddd2pzZlpmZE9aOmltQnArUFlEREl+RlJ7LGlAV0tv''@;'; put 'put ''ZyNhc2NAalpTa296OyQyIXVzWTI2R1hqcj8han5Yd1FfTUwrQ2t+X0l2ST5QbC5lRztsezR2ZkkhezwwVS5RQFEvU19hM1pqP1A+XVhPPTtdT3djKm5KN30xTHJ0ayNLbE93OF1ra10/NnUuKzhKbCg+Om1SQyhDNEVPSnQjNHVMRExZYWc5Rj5XfExnZE4jZCFzUGB6N2VHI1RNbyNxT1E8PTB+''@;'; put 'put ''Nyp5ZT9BVHtvJU89X0QxfVR8ciJpLDV5YT1kbEI/Jntpd0psJnosPmd7dUg+S0N7USNqbEQ0UFM5OzBWKUNaKj8+PnhEN0Q4RWElTipCWmVObEJSdE5EYzFxK2tFfVR2VF0iSU90fkkqVj5GVHMhIjFVQHJnVEdzJjNuOF11dWt+YkMpdCZaYEg2ZTlUWTlXbGhjT3RTQ2Uvdkc3cTtWP25wJX5f''@;'; put 'put ''ZSptY1J6QWZmWishZWtnUEsyQSRPSjV1VTBeOXM3UVkrUTM9WG51X3osSEcjPjNJI3Qsd0c6OlUmQVAvUiElV31lUHJSSmBSTlJ4UTcxfE9gQUMpX3hNe1R2YzxhejcrJiRqc0lMcUxlSlhhJUI1dCFhKm0uVyV5UHwhdEtfUHsyKkAoWD5gQ2NoUmFPU0A6VnE3TXZoM3d7TVN2Sl9UWWI+JTx2''@;'; put 'put ''ZmdwbmhgT29yeXZlZXcwKmdFUnZfVSJNZlROa04iNls+TDJVQDdLIXd1RjI2VVpBTXt4dkhPVzN1QWpKXzQ9bmhCdm5WNHtwTyg1PVpGKiFbOWpGW3VpamssYWJMdlheRCpaa1Z9TGN3V0s1X0UsMmZ8QjBmPUhWI3c7d1J0SjppZ3dXPihmSVE0VCImQkpTQzQuSyw2a0F6aGJJMmdsaVRLVW9P''@;'; put 'put ''Vz1WWH1SR19DbDA2Ym9KKjk+LCRPNU9yMTRgcThNV1c5NEVDaCtVX0JxKE1fbH1BNGlNa3AmWXQ4LC90VWojIzxxTTl5fSF4W1shUDguOEZiPmZvWkJSNnxyT3dzYDouemd6S3hjOjJyIkszalo/VClYXnI8Olo9eDdBOGAkcltUa2E+MTF5MWVLJWBiMzJMQU1sYXVjail3UGpSQFZzZHEyQkFD''@;'; put 'put ''UUROZVhNT1R6PW84bz8mTXJed2FoYmU/SlYjQn12Kk1AWTUsSn1MPHhNSCsvT2MyKSJyZDQwYj8rUGI0elFoPmFwJiNCZHhTWVRaZFdWbHp9KTZYMjw3bz0kJWwvLEZ8O3J2OGA5dnhXIzVEZF1+PjgsdyUhKEhWSnZoQmYuaWAzZilkRkN7N1hJbn0mKGlVM30rZ0orMlQ2TXheOzl4eSlBV3VO''@;'; put 'put ''VGVQQ0thZiY1W1dbYnEvKlIicFpDTnkxSWheNjhINiZnT2lPLklMejZCS1ZZNzorbCVlPzFLSXBPRytuT2ZOKndnUEtHMnRsNFIlUnRPcD18Qm5OI31KdGB5aWc6b353P3xlM0csKko3SGlHTFhdcXFmLlJQdCtnPno4Um41Uzh6SzBuQEtQaFpGOVlvJlMqSSxLVFU5Rzg4RmFGMkQ+KSl0c180''@;'; put 'put ''d1lFNXIkTChXZjJvTiYpYmhvcEpGRWB4NHB5LnE7NlkyeDVgcXhYSD98InwrLkJDQXN+WVErVk1iRnA/aCR9V3cxJGNKO0lHSjJfIz9Jbjp9KjhtSnl1dklhcUFUQCo6MG91b2xPXz1yaXlEJX47fFFhPjpFZ20+WFhZOnFiNktvU2dJP3RDUz48RjlaWUwlZW5WV0ApNXtDR05SNDt9OEh8UVlO''@;'; put 'put ''VlNtKS8iKGJTdEw6TSo9SCEmbWhSISV3e1RATUtOSip4VE5QXVVYT3w0QnN9IUUoRj0reUwiXUFFUV9odD1PcSZtIV0yRipaeEQiIW4/ITRmRS5JfXw7NE5DXWxRaXVTZWZxcjgva04oOmE+ckVtLzgpW2U2QDc5N0hqeWRCb0N7Likic1MyVG9SLEczOVJXbDB0Jj1bKDZIaDhaRjp4aU5fY0I6''@;'; put 'put ''cjo6TTxtR3BuZCNid0hSIzo5NkhoN3lqTDJVREcsYnB2UXZhdTomWXEjXSZwLmpaKHVvO3AqRWFwc1BaczN1NXovcXwkYEdfYGQmTDBeLz44a2lHSkRsXXpKJGQqRCRVd1RmRFYven1rQE1zLmFuej0iK1VWPldLJko6SGNbSVNVNVI7X1ZHPm86ZTBuaDQ+ZXhyfEkuSlJvTk59Pkx8YkIjLE5K''@;'; put 'put ''K0ZKT0c/OXkkOXw4N0BxZy9gUlZeSU9yUWxXPjpHajQyNUY4UUZUSE9VNG90fn5jMjRKTCRKPmNGTWh5I2p6b1shU1B7P2NMNGR6anwvWTRmUGFqZ1FqfCh2O21JdyE9MFdNWT5KLzR+Vk4vXnBfTUNkY29ddGM/UihnUmtJOldJRT15ejZWZWw/ZSZTaTJeX20jUThkZmxdaXo5OFpKeDo/JS9Z''@;'; put 'put ''Ulk+ME9KJSZBRHlFSmV+K1ZPJmZVa0FbYD5HXXE7UEJGZkAwN0cocmJCaVRpIU1HQU4mJDRvSFZOTHl6cjAuM01iQnhweipNaHpQO2phYksjflFBQDF1TCZrQCJhSCpkSiFUMyZlKl9jOkJESHBkJjFXekF3fExmbShLZykrLmhnVltTK35yKUNROnRFJFswQ0FXL2xyYDZtWm1OZ0F9dSFkeWV+''@;'; put 'put ''U0t7azxNa0BWOW9ZX0A8JHIpXVo5eSJPRUs7QUdIeSsuT0lFPyYwKEdnLk13PU5OWC9yLFV3V3h+IzIyMmk2WTdxVlFZUnh2ZWczKVZ0bHlaP2xLNn1tRld8bnh9Q1NLVDJFfEllaTU0a2FAbWxnelV3bVhiRzldX3prbDFhVDpGblt2MDZXPjdSNk8iNz1jPlQ8L3NWb3VMeXg5Ll5KKmdWdiVu''@;'; put 'put ''dHRQLHZOYFl3a0padj4yRk1yfE93Y0lzTG9ELjJvcUxpRVZhRTFGLmgqSDtNdF97YyR4VlA1N24oLylCZUEzd2ZCaVtiVncvU0MvezhvMnhWLChbbGlmIitKISs6dlFJPjI3SVlDKm01RXV5Xz90Im92en5MXjMiYTNvPTFoJm1KdnluVWd6YVk6JDhZK3VwZk43S01EW0ttLFs2NTpmTGVTUkVu''@;'; put 'put ''RHpPZ1BIPDxHRX0hRyhdbWo/bkt9OUFCMHtyRzhPRClxaCMqdHMyamRSOEpNOygjPXY5VndFZDZTXlZCdW1LSDBUeUdMUDZVUzduSWNPYllDMnlUYF8sZEpVeDcwSUQ3d19NeTFmSmVOSmhCfiZZV1suQDFFMF9KPiY5KCRUcUNpXTxoditXT1V2JSo3ZDY7NmhZe3tHRlgzY2wiV1RuTnhVWEtH''@;'; put 'put ''b2Z7K3dwNzw2LiliUVJofklpcGxnUVY7cFQ7Zjh4KS8pRVJDfVE6TWJFZH03aXZBODAmNnshRzMkO11ve1Y3X2s7LFBvQiY8M1YpaC8qU1g2R35lZyR6QVYvWE59bShLZD56JitSOztzfEZxcChOcHtIYyRZcHFKWUdsWihxX2lkR3EsWUE4S3U2UTBKYT97KzlIWzZ3cVpyVVozcEA7Y3NwbHVg''@;'; put 'put ''aVEqZ35UNyYoNV95Nzl2cURYZD1eIztdLzhWLz4sVkI1VF5jVldPQmxDbC9jZmI6dld8dFZERjlQY1JaQF8jekRNTSpLTTkjNkZdUFNvVDJSfC82dmo5cmt3YFQhMDo0ZGYwUFo/aCQjSHhOI2dhRm1II2IxODp5cWdJbitGaC9uQSpoUltdJHJ1RkAsN0wuSzxpPldrLl9tdWY6WE18MDVxUCM2''@;'; put 'put ''eXNNS014azVAdDo8Kk4uUztZLEVefF1QX3hsRUVeTFdoYlhnR0pMTVdIYHJ5OkxScD01UD53Ry4yeDd9T0BmKlZtZFVwdEhIMXg3fU9RI1U1R2FNWXdiaD5ediJDSCElK3Y0dkQmV0tad0JeXTgzIit7SENuODYvPGtRYVBgbD0wOishOH4vKFk3Um5SVW92M1tadFNBcipfXWNjWStNd2ZGSzBx''@;'; put 'put ''TEN7UWV7SCgjOjl4PmtTdkJoc1ltI1tWMEBCTVhYfFhWWDVRd1c6Q2dBaUBOUW5YMmRMbkhqOTRtQFY0XXxoV3RocD88VnRkQSRwcHFDXz5UWEBAUzVsSG98SG4/OmMzRGBFcURbMC5SUnZUNT9yYmBGYXN5VDRgPHVySm4vYnYlP0c+UGxTVGVkSW5AREdmKkplRG1aYylCejRSZShzeypRJVpq''@;'; put 'put ''S2tgSC9ycyxge1ImfFcrQFZ0YztlR3JzOml6PiZCJkI+PzpMayoqPyxSUnFgZnhJdzVJW0VDVmMlaC5RYmUmW3pHM3NAZ18oZTglb3suS2UoIyw+clNGKXFFdjskRng8NWw4JGZzWXh1ajttUGZvN2VnQFY+UV1dSkg/Vls7ZSw1NHcvW1pzXk5ZYDtiMjZiQDhfKXpxTntuIjkjc3B5NitES3J5''@;'; put 'put ''L3F2dV52dStEM2B1XnYiQ2ZHfHFQQGpzYStDYjheKEs6LzVlWD9PRnEvVEtlNUdnaz49eEElK1IlYEh4cmdCQi4lY0JOdFtRVUVpLGtFXnk2Vn5pOFlGKiF1blF3KWxnX18hOV8hP0RBaVBHRmU+dVI3TDNRbHJhWUpqJjpuKE5AIjJRbi9idktVX2BfVyFNfWdaJjVMfkx1aXJfQEU6RiJGO1Yj''@;'; put 'put ''KFcjbTMvOEloel9aRmZ0fDM5em14Ymp0XyYpRW1qdm9xSVhkUzgpXilOL3ZFXnkvST85bSgiSEEpdFA5eEcucTE9ZG04QFBHbCZob1l1Q0VIbStCIVo2KFMxKTt3ZT56SUE4Lkc5cmV2bypxa0o4eElAcXByTik5cGtEMjNIcis+XmUwNjF6SnwrY1VUMltdeG45eH02TGRmaC8wVzJjb2hpNHFT''@;'; put 'put ''OjVIb3doUnoiZH1bSktnJihfN10zWklgMShKR1khNFovQ0pZYz5UVHZMd0huXyojUkQ2QFFdJVUvSCU/Ry9JSUt4V2prYnJAS2V2P0FQT2VXfkQmPi4/XzdUPCk7Jk0pYTJsSEZzMlMyKk1DQWVATFpnIkVuOUJWRVgvV2Z2VUd5VGIyfGt4Kyk3SmBCOER4N05wclB6RiZuKmUsTW9JVnRxTXhI''@;'; put 'put ''PU1vQ1hUUiszYW52Pmo5TCtCeVRfXTouN009YTEldXVyYF4hJW9LSiZMciVrJWtYJFJXOUJOVjYoPGRUYmlRMy9kYVgmLFpVY2E1fnJ0XVJlI3FtUTMvPmJVPn1mPThuT31HOHl0JiNZSHB3KDt3V19mZGxRVHxBXVl5I11FQ14zVE1dMjJFcWZvMChkb2xEVSFxX1gmSk1yaHJnd2Q9UTg8OHJk''@;'; put 'put ''JT5xdDZuJEJOcmhyQVQ3I3A3cEdjLzU7YzkmWjNVMik6RFEmdl99ZHhNOXI8bFZyOS5SOzVJQHFtYFNFOXBOdy5iL2R5WnFhVkZMOCRlXntGX297bnFiY347QigpaXhTUjxHVys0Lz9kTUI4Uiptb1pgYFBpcCsxOktObTxgZGNme0h0WDZfPytdNWVMbnhCfTd5LmJoKFIvPz96aDhhbUdgVj9m''@;'; put 'put ''eTNeRXk2fXQvKThCVCNRZmJCODlFbS44JmJ0I11oYnhfPFhDcVRAQSY5RSl1QWdFfHBSb2VNM2o4ZmRUWXp9MVAwYDJZc0VEYFlLSUIzJUBeNmpMaGx3d1koRykmfU1DaDtPYjhAW3dxOWBPZ04uaEQ1c1t0Lyh0SzB6TmJCRGFQKV8kYV5kXVpOPzIjYzFmd245bkdfM0JTNUNDbFphTj9QTzxF''@;'; put 'put ''Tis6MEhOaVd+UGI1SWJAZldXKFBtOC5Pbjk+YENuJFFYPFdnWChgW3AqNWR4ZyZEdjkmSG40WnxUWC5udkB9L3RsMV9vWEVufn1+ZGZDeFFtVE1+Rzo5SF9odjFgV0BfTmJTMVosdSZBZT9jZU5hbmMrb3B9P2pWcUxnRUZyT05peGJiOXxsZkhiMXEvay8wLHF+V2xKPmxuOD1vYWQ+Wj5lSDIs''@;'; put 'put ''dzhkXm11dT56ST4mZjZdPkUxXyRvSHEpZCJwIkxyRF0jdTA5elJrUHNOakJ3P1ghOEI6e2VaVGFYZ0I+U2RMLiQrTT4wRUFrQDwwLi8kfDgraXM9KzRLNDxOcnZjSXxDLmRMIys9QmxPMjVNN202QX05NUlmaHdSYldCMTdtUj5ga2FlWV4vMkk2c1FqYUs9KzI0OGZPcngqSkVaPEtCbU8jbn4m''@;'; put 'put ''IlczKyRIUFpteCYyZHFmP3hUOHA4QlhecENQbi9kKi9rM30+QmtMJlV6R3pfLFNENVNJe1picF5HdzpLNjhDPnNDYyV2IV4uSFU2TVV2OGM3MUB6ZiU+Y1lCOCZqTyJPRVVMenAwKi8jOEtkciVLYE5jSz4vcGVJdm4+dXM2SD9jKmgjcDkpISwqWzxteWBjZiFEUSNTX1duYHlkZ01FTko+WVZg''@;'; put 'put ''KiVRRzA9aEtpP11XW2xRR1h3Qz05SUZCQDshNEtiR1QoamhYWyR2NFk4IXBMIyxvKWwmOHcuTSxQLy9VKSkqdTlCLk93JXJUZT0xTGxMdUYyJHFVQk5NMXE6SFhsJEB0NF48SkVncWlpLDtYUXosa1o1X2R1VXxWQkAvJFpgKGZlO0Q4dTNPSXYlTGEicHhzX2tANTN9RSRbZ1FXfFQ/djZ0UUIu''@;'; put 'put ''fGxyWz49eVBhS3NIVHh7Ono9RCZdJkdmbTZ0RjBEciwwOi5ePCQuRSUxIWFuWkFFRXd+QUN8Ojo7MT1mKHI1Uz54ZiZwUGBFcFAuKWowZT9QWlc6IXNFUz8/IlRBTWBUekJMfHJGTkd1RkNZMThjPVYuKVY8OlUyWU03S1t0L180eUtXMUZ+O2sxSSgxV0kzMk1nYHhgZ0lfaG9INS9JdzxKLyZ8''@;'; put 'put ''RkIrYWEmYDUxZkF+dk5Od0xBbCxIejFKPmRePlk2VzE3ZWVpR2tTbWFkL2ZHc0okSHs9JkI4VnxNNTRMd1p4SUtWUnUvZ0YxbzphXnZrbj91PytfbEcrVW9zQW1xKDBjP0Q/OXA6MVtzVHB0JSxRcFQ3JTl5SV96MkJuTk01Y0ZORWA/aUdufVlpdD08PCNVSi5XS089cTo7V3AkTz1odTp3LjVX''@;'; put 'put ''LHJqK1oiPClPeF5NKEQ6Zy48KDglOTFzPlJkLnF3XSZLQGA4L0Q8TysmbUAlVWtwd0hpc3RlJDA8WUBTQ2NnVmhMK2VseiJ7UCRRS217VGRMaWs2QGhEN256Zi5KbiFAMUxiP0Q+a08qQixYST53VUNfTTN8O0gpKnFQPCxlbX1oMypWJClaKyteYChmUWRdRiY0Tjp7JHs/QihOIUUrVmlac29X''@;'; put 'put ''Y3VzNChEJngqVlEyLilGTilFbUQ3eD5PWSs7XTxMdVp8LkZjPXxrKjVZakZ8RVUpeHt5UWZ0XzAzdiwibntWOy8qRkZWVSkqQ1F6MkBlQyohZ3EuKG5jMSgkbCNOa0AuMyhCJkYofSRfTHxOa05ueVQ3Z2lzUU9DcWhKX1RAT317OUxFbmQhOzZzR1Z4SyNNcltreyVbX2pGZXNlJDRJQjhbKCUs''@;'; put 'put ''fnFlWiRwRkFeYjVMMGV+N1VyK3UsSW8manU5NldgSWVISTxgPmdqa1JFJlZyPSwyOCE6WWEwSytodVomMFBpcHhFUH49LF5sc258NS9nR11Ma05fbiEpVmRtMGBIKkFuUCYlckJWZyYqKyppSihKTWs+SCNeUzQ1NyssYyxTRyM2NGVzOX1kVG4uND9bV2cmRkA+JTpoZn5pRzcsIzQ0YUdIPWoo''@;'; put 'put ''X3p0PDxQQ1dxRXd6fTJtYGd9K0diTWhmYjlCIU8xPzhCcyZIQihINWM+dTYkezJ4eSJrbk5wLmdWKXlrUFcrRSVjYHIvSHE8enBmfDYzVCQoLmRvaz5gQkZkJlUvRD4pJDhtYUldfCgoYjEjcDlGSDYyNUE9byZ2aE53bnc7PUQoYX4wMlQ0dTZ1QGpPQFZjR01BPWppYDR1b0dTSUhAIXRNPmJf''@;'; put 'put ''TSttXlk+Kl5JU1heRXY3OSFMUDVyME8ybURVZ1pgVC9wZnIxVih9dFlxT0RZandxfHE5R3NyODFSaVRTdWhASz57R0VhXl9tMDN9OHJKQzRQOnM4W0NqJUMma3BiOFJeaDFxdGIwWXdZTyg6QEJ4fFcrQTJtMVZyWT1nLkYlRUpRJk1UXVsoUHRXTDssYy9kazVYNXsmdlBUZUUlWkdjfS9MQlZ1''@;'; put 'put ''JklvLHtXZDEkSEt2fUQrUEFscURVbjVORFAqRDxXJilKQ1pyVWQ8IlhqaCteZCg2e1cvRlZZPW0kPj5ATFZoIkZeZEQ+T1RvcXNbXSVhUyNDMiVSeUorXzsrfThpNjBLbnw7MWZgY21bKzgyVGg6K0hlVFpteTxHbltGXVouUjEpfUJOJlI6QXFiKHgjTEVCISpEbHxGRzRROm4oTkd9eXZmfGFo''@;'; put 'put ''VDZrYXwkb2g1WGhLRSU7UWV8UDw6ZTJpfXoleWt1YzhCJmJFVkNQfGAoYEExPjx7MVRPckN2djlAckpBPXsibH42a10mdFNoKzxUMEx4RGg2X3NHdFZLPTU1TD9rMlNuX1kkJGlOcHI7PnZUYHcyWkhxS252cDRdKHkoQnEqWSZmNDgsR3QxaktnQH1LPHl9YjpLL2pKR0xKWVM6XUtdOCxJTyYy''@;'; put 'put ''R2FHXl4yNyZmQH1ePmJNZihHfmJxfnM7ZW9iKVIkVmI0fSNyWzk2VSghc3x8ckpOfF8+L1ZXaUVSY3FsNEBzNWBxP3JFUGhBazEhMyZxX0NWIjZdI2RJZ3hHRCFWNHovSigsKUZebDYvdHVdfTNgQiEofnx9YXxFYyx+JFQuaSZfX0Z+S2MhL0NjfFVbNio2OWVWZiRic05SN1RLOnJjYSN9fGJd''@;'; put 'put ''I2klUURKMFJTflF7QUcyUU0hT0RocWVwLzk5KTxrfCNsW2BpR2gqYWsucnxBYEZrXnN3c0poJj5oV0IkWDQ+UUxbTUJDSCs+IkJibn4+dTclc1RaSVZKY3MpWDhITDpvK29TNCIvIkQzPjlNeWszNU5fJTZURWh+SXtjUj07WTI5MmpoMnY/QEd+TXs+ND07ZD8yXnkrYFtNOz4ufXJ+ZjZgNExf''@;'; put 'put ''S2gjOzx1JlM8P1gpLipde1YkPDgkaVdWNigwSlA7W3A2UiJ2cX44fXppL3RhfSZ7UV1lYXkxKDB4bkk4YEY6KnVIV0xLZEd9X0xkNGhCO0JheUh+YFdNPFE8KClsMWgiTH5mNn01SFJMKnNkYkE5Y3MucH1zUlpoMn55PlFsW1B9Y1J6OUUoUT1WfF1bbTs/O1EyOTJuaCxzWUZpfT5bIXBtVzV9''@;'; put 'put ''ZXwjPilze2tnTmdue10qQGFuczE0MVBWeVN8I1ZbKiJfc3V+YHF8I0RbYiRVVyJ9UllyVzplVGFDSDFZXixBeDBofEVQVFZXVnwjSTY+dH4jZl1lTEwhSiJmX3plJUQ1Kz5zbz90RSRfemRVTlhgZUB9Ryg4KX4kZFQjWzw/KiwoUk92aS96aUcwQDFTZFI3PyFMdlZIKFI3WWQvP2ZsUkUwPlVY''@;'; put 'put ''bSpIdjgiI0xpdGpESiNbaDQlc1kkKFJxanx8RT95a1I9fSswb19IanB1PFI1Plt2dDc2cS9dK29JJnRhbFExRFlncjFoIUg+LjdlK1thITlvLmo7byNjdDxBYlVFYVI4Z2tHai8jN29JbVhhbFExeT0xOipUXzsjO2F5L1g3bntJQ1ZYbjxVeUdCeGIjfnQuSWBVSzMhVn5ocTI5Q1Bpd0N+bmRE''@;'; put 'put ''blciRHRgNkc5dkBJK102R3VzNTlFSHNKZSFbajlwTEhlUV9EaS95fFpEc18+PGI2bCpffDZnfCNRaSFnPjBzL3IpcH5CPGYlJDhdNHY4a0ZuOU5JOS9Ha1ExK3JJMExnUTFTSD1gOmh+QlJ7LjRZRVBpWio4fSYhIzV+Q2ZmSEV6V0M3YSVZZz9Vc3hwVWhGLkxXUmVGRyxGTVEvfUNIeXQ/NkdS''@;'; put 'put ''ZlUzNVJaWkI5MWEsRD1vV09EblA4MUxJQDlHaltGTnMuQnJXeD9UOXVwVWNrWStwMWhBJihZWyg5YE5NJmVRP3dzR1hETSZlUWcsa0U9KFFGOWdNZSklWmw6YEt7ZiVQUHZSWURTcTlnJCJAKD0oQEpYQmkzdlUiJnFfZiVIUGpYLnQyLEg6VFFpM2M5VjNVcTlnWnpTJHBwSV03WHt0cCUkTWZR''@;'; put 'put ''WSxZN2BQSmJkWFsyXTdnPjFmM2M4ajFbfjlYLylTP2Jle01tLGxuVn5hK2RGWm5iY2tUZz5mUTEoU3Y3RlphRGVRJERWLChUUFlTWkg1WEp3TWFhcWZ3RCZVZ1ZSYylzMUIuVWdWSVgoVFs4YjQ7Oy5qZ1pMeUZoUTElIyFbfjk4W1tSNVVmUGNNNiRrXTg4VmgkNGxwO1p6MSgzOTUiQ05Rd3dY''@;'; put 'put ''SE0sKVtKMHF0VkVbaCpCbXBTVUEheERibWE0YDgyLFRhPG9zSSFWeWo/b2R3ZU1PRXZHIy5kWTJGfno9TFFKZVFJLChbWlFmUXlEfDBaWXBhW3RvVXspYnYxYUJkb1UhTWZRRSwma3lWUX1sVj99PFlCfXA0JVo2NVZbSzRHdzlqP306OUhMKVZrTXJjalFAP1tMMVYjTFpYfWJFI1VEJlJ3U15u''@;'; put 'put ''NDtHbSR6VCpwdyMvUlQwMT9HUSNqR3dlSGRTP2xXOVc6VWwre0tiYzhmaDtnZzZdZkdjTSFWWDJuM2gpRHR7MDopWD94REN0fWoxSGdsJiMrOl9vYlBMejZTSCVEZEpnVEhGO11aYSMuZU5bWTtsbkBoQ21CWGpQTUFgeUckanUvYmw5bVpTIVBQSHVDK0pmQHd7V2FyKkc0WT9IRVBbKGp0SzY+''@;'; put 'put ''Ukhpe307WWl6VSQrbkdTPGlXazhoREh7NE1PSz99JDo0T0d5XVlZbylUUGhZfi4qUUd0N29nYj5YYkUuU2QlMjZsWEMxVltnMjIrNkJRMSR1UDdfMmtsSkxmQlU4eloxaDdLUi8xTHI/Nlsme1QxUURWZmtZa1Y3SCxFdDxXMDZaXnlxdUpPOXl3XjpCJSVsTlF2SSlocTVfeXV6WjNCOn1jfXs5''@;'; put 'put ''WEhUeygpM0VoRU4/Uzl1dWJZSEhhYXJQbUZNNnBaV1l4RCsvPGZWVnkjQ1cvTl09OnA5Z0xkeTR0T2FsdE8xa3RuSGwycEAuUVBrSCEpfjZiOiljQyZBZXRJLHEpJTQmR0g4ZjtDJWZBZ11gYzEiQzpGJj0jRDg7XWgwNjdjXkt3RngiITVAdSRERVIkYFRGXThWaW8pWUZTPnxMez1mN1lJLDNC''@;'; put 'put ''ezB6UVJteGJVLjArZyg3Nkh6cUF2MWRLeFZ7NnB4ciYjP10vYitgMVs7PixwJlssMyp4Q18sYT5NN0dFc1JPYHxZS2w6MjF5SHxxMk4wXS8sUWxIXzJjQD0ofEsyRD5OcmhpKXVLZ35CRGBSXlsvVnRreylYLzJoVEE4b29GaEBGZnB3MyhCNzZPbnFRYjpAaF1lJDdDUG03NlFfXyV1RXF8ImdQ''@;'; put 'put ''e1EsYFs/XVJAZ1toIkdYWm94K1Y5eTc3WyhHb04wVHd4UykkRWVBPEduUF9rTClle2hUKXhxfk9wd2F1MX0yYy5lNz5VN05WYzE6N2lQTURiYVNTWVZ9cV5zaGpicVVXOmFKYCFZczomJnFwNCUiUVp7bCxbO2NOfGg1cVlnMWowNlN9W3sxJGVKImR8PncxKnFRLHI7SHFETTNUJTxZMlFsKldY''@;'; put 'put ''Mmwodz1HOzVmOVM5fUlpe3tRNnlXZDpSfDYsRHFCYVFUL3NDWEtpd1Q8RDJaSnFzaGxnSzhJYFRwQnFsYnI+fGEsamo+bVZuVkQ+JTQiXioueW5TNTlPbUNXMjhyS1AvX0dzSk8qI1FfK05NX3lZcmYpanB5eFNYSXcrLCNRX3ZJP29ufF9hXi9WdG97cSkyVFQyfmRHN0NMIkUoJUIxP11NcCtg''@;'; put 'put ''RihuUn09Wl19RzdSTCYkSnRTS0JhfEJgWmdZd0E4QmouO0xZPWc6KHpLKEU3W1RLQHszJFh7MzpqaWIxR3Z6c3BtZjNrTkomTXJMa0VqeXZsc3lhRWAuMjhTMDZnZ09ANyhkS2hkYEE+cnM8Y0l+QG45Z2dpX2pbZT06cCUkUUVrITtWamJ3O283Ozg/ZWQwd2xZN29ePVNVJU9yWmFPeHhzTFtP''@;'; put 'put ''Wk5fbCw0ODs4eUYwOmg+JSZNYip7dWJMPmBFQWUqeyssciZXIyVdYCNScXhgX3lnXnReQmlhbTw6bCN+ZHd4aXBTaERHODojRjttKGEpNCFELHFFZFN5VHpwfGVgPmVoPGU3cyNibjUscHtXfD5ZKj80OU4+RncjbW5IfUdAK0orbSFBaiFMQjdhNmRxNCVNYkZ1SUxBVkZlLDdVaV9fd3ZHXz5V''@;'; put 'put ''JWVDaU1AX3IlQ1VJdUlsdXJvZElwekxibTVEVyUzR0l+YjVVN2Y9QDp7NHkuOEVsTDs6YlFuK19wUW8jekZ4dkhiRSZmZjA2eEFbZUA7cSgsY1ksSi4jVXAjKHg3Q1omP0lXS1N9dUs6SWFkcWYxJF9LeSxrd1l7aGU7Mkh7Vy4mOGEoRDtoeVY+SDIiXig4fUdFR1VxMTZ3YXlYemg/Q1NlYEFw''@;'; put 'put ''KXg9YlVHPmg4LzgsTEUvZjxCPl85LEx9TnN3P3F4TVB5V2FHQGlUMzllN2I1LitZJm0mQnw2OTJlYCUuVUV1QksqSF8maE18azZRRHt8dEdudCYiZDIqQih7WldiMCxSOzJQK2BmWzVNOnAyKiozV3VRXVBLMDYwR0pxZ2NVVD4oMzxuOU94WSlvbktxOVo+Znc7MCp+ZHxNRnFTOTBgNHVHZXg/''@;'; put 'put ''UWY2JEp4Z3IhfEdrcGhHOVYjalJGNE9iKztMeCFYZ3JCVCFHQ0VaSlIwUUklcVlqfS9LZV9AXzc+N09rZD5td2hwSHlicUsyRWlrWUt3fGdmTkVyUURVZXhbfEs7Y2Fobjt6PHo5SjdocFNoIUYvUG5zJGMhPU1YZ14kNm5ScjdxfD9lTjh3bFgwSn1oc20uOXFgbW4yNmh4Wy9lRz4hPWJecXx8''@;'; put 'put ''RzdaaCYxY3lhfVd+cW1mbjhFK2w3L29YbmoveyNwTiVFeDVWPm0+VmdpVEt5KXVZQi9OMEBqR29aM1VSN0MzU3FzWy43WFpQe0ZCNVFNdzklK2NGfiE9VDt4R29wZ2NDWD9xRllISEVEPzd0anw4fF42JSlTQDArO285fEdaKXx0YklHP2QxfS9ObGNBQz5fZClEImsqYiMlNCYlR29iRjhRbDBa''@;'; put 'put ''aWxEdEtQT2A2QGlUUmJJLkZ5YT4pRFYvLkd4YEJWR3EsV31lJVdLTEZOdlchRnVRMl1LayQ2LGlyNyZbcDhIXls8WnFObklfTzFLcUg2VTk/NFYrKTF2fTV3Lkp5fSVBQVtQaDxbclNBM1gmbUc9N2ZSdl86aU1uNX5uOX5VUnFNSCEiWyZ8Y31rfEpme0d4SHxCcUFlTXdlMWx5a3BRa31mKmhH''@;'; put 'put ''YDh7OHljXlh0UX07Jlk0c2cvN1pxbk1+L3FlcXt8eCVkTGUwe25ddzMqNipWLDJfOiI4TF5GPEpfJFU9ZzZqYih8eCQ2TyU1eHAyRDgoVjZAbD8mJUE6RFZtSml1NlZsYiQ7cU9lLG84cCpZcF10S2dBLmJRWD5KRTwuSlQqcXwjRCZBZXIsQVNTWDQ8Y0k5ajA2dy9eS3VMTkc0WjVVUmpFUk97''@;'; put 'put ''QHlgOC5aKSksLjBCPWtmZU4rZ1FuXXtkVFkoNVl7Q0B6LjRDUDY5P2g7V0opVHBAXlQ/Yj96Z2I4I31Ecix4T3o5SzIhYmxUJkYhMHZXfXpnYm89dVNXVzs6OFkmMnFAdlMqQytUOzpeVHFAQGBRP2ZWOzoxTkIyPkNnLDtiQVNLRiEwVFkxOXc8OXEjYH5SO31oOT5DPGJiUmZHc0QlKGZjIWRo''@;'; put 'put ''L3t4T0Q7PzllZTBGZ3RVMzQzdm9mXk49MnB+eyttNkhYMnpySU0pfkBeVyZnZVI8YjJRWUhmJTdCbVlKQkxHZnE1KWo/dGB2fkkuQEB+QEg2YjZeNDlxeTkidT0hSGg0RCZVMCNCWmZQUz9aMCtlYSlhREJBYj9XOjZJVTMvK2BhcEc8bz4xO3QocUxsMHZeVmpQST9UbStlRykhfDtlX11VXmQs''@;'; put 'put ''Q2AxMEJZNTBZQlk5M2dOSkAxdyNAb29adGpJOlIzdyN7en16JVlyWDl1O2I+SSREcGI+SUlEZmE/MUAxOWQ/P3UvND8ucFRQU2BITnhpQ1pbNVhqO1BDQUAxNDhvJSVEdjcrW31qQ05VWHRHcXpmYGZlIk51diZOWDA1diJNPHIxbnZAO3JEZG54aCgvWVRXUE8jUW8lczBZYFA+YndeX3RVfXpK''@;'; put 'put ''QV9yVm5eRXA6QjQ7ekZ1QCZBT3BAQz9KNFY9XlklTV9wNTdPMj9iVUhBelpMSj9zb2ZKaTk8dWBPKHJzSV1BQU44V3srfjVDNTVxezMveHV6O3ZfTSI0KVpHLHssdSUjPEtvIkFGKExPMUUiSnZOSzVofm9uP3orWmx1dUAjck9NQixYTGdyP2IiKVdEYDMrQyxUdXgxZD9iRmJ9ejJaRllCOlAs''@;'; put 'put ''eyx5aXtxVkgoUiRaK1tMP3JbLHgrREx9RDl2Ol5bJU5TeiV2bipYbz9WT1JofGpUQnRgYVFve3FmSkIsdW1zamdHIzR6QSlLcVZ0RUFORW1zaj8vI2d+Tio0b2I5TDpGIlpXY3RqPy9HMUAxVWlxVm9EOTNeNzt1ZERNSjIiKH1We0opcjZYWmRSKi54Qk5PXmk7X35Xdzd0eGZneUIvSUNIT0dg''@;'; put 'put ''MjB5QHdAKDdoLHNpNjxFdVdfSE5OPT9WQjF+a0FBMFl9e0tMWDZybUVCLExzWGh1akZXREN2QEZjKnxaUUJhS3MlRDBHb3J3TmYwd29NXUdtW1tmciFlQUdkZSpuWlh7XX5SbnV4O0AxTFBYTzoua3cqVEFiQHchZXVjb2IpR01NITBvPTM8PnJzam50XTQ5cS4kdlNVNFVOfV0iITVJTHdkL3pn''@;'; put 'put ''PFgwbj96W1l7Vk1NVXFXSiYjMyFybUZNfk5qez9POnJqQCh6I3smS2BzMEdyaiFjLlsufSNdW2dAMV9gOFtYSmFFMjpycFgla3NuXjs/PE4od3hEdWBWZG9MVTNoRSUzXU84SyEwR1hKfnEkTzg8VEFiPFlpV3FDR3dVZU4rPGIpR1NGZywvfH0rQjVqWD0hL005QDluR3RPfX0rQjVRWG5YYE43''@;'; put 'put ''NnEyZkZ8Rz5FPG5oYyhaYV1nVT1sUX5KMT44clB7NEo+Q15WRkwhVCZOJCgyRHYrTnohTEp6e3t1d206X3ZCV1k1eGRmZXd9cU90JEMpMVg4dVlPMVsxM3s0JD8/KjRPay4lRFRdUmpKeEJsdEEuT0lJbDJRK2QzTCwpbWdlWXB1MiYzS1BRbUo5RjN3Il9VKXZleGQ3WDt3Tjl3Y1I5Kll3MnZt''@;'; put 'put ''IkNJSD5ualM+K1VNL0FlZ0FmMyNXc084dCgjZFAiWkZyamVjdy9uXTI3aF1AQT96Y1hEWU83LihbPmJKKFdyamVjLls9SCVeYGVySGxeM3d7LDk8d1pQI0Qrfm1+b1p9ejxyNm1PbiU9TSlSNltjLytkQisrZD5QWntfenxXSFYieSFlc2E8KkJKaT90YGRabVV1VkdaUXV7LGI0QG9BfUEoV2h9''@;'; put 'put ''RUAxbUIkW29HLjo5dihVdEU4WWZQbitUUDVrbixuRHlXYE5JZCp4UGohW2BmeklLKFh2Q3ZWM3FvdGo9eUpiSDFGXnpLMUwuQHE0VT0lKEt2Oj17OUpNKkZDK0QuKHssTHleJTlDKitQQCZ5e1BYJC5UWVtZd1FoQ0djRVhdSGh9ZDc4Vk0pSWk9ZWE6V14xYlgwUzV4PiskVk1yYmEqQTVZMXY6''@;'; put 'put ''YD5ObipzVz8oKTU+I1shNzltdnM2Nz17PlU6dCI1R2hed3koZ0ViQmtPcUBndC4zS2hII1ZmKSw5RDZeYWxTXkVhYjtCPWd1OHx7ISlRYkM0S2ZWRDF+U2h8eUhJJng/T1Z2Ojw2MmRAMXU6QG99fC5bNFJqREAxKmA4Wyh9JFtiXX0rfDNIWHY0NFtrJTl7KSl+QDRTIn13aFRSUUB9SUchJF8+''@;'; put 'put ''SjF0UyhoUFhJNXR0dkw8QkZ6NHVKWWk8VkQxaG0zSV9WbyN4WXYpN1giaiZtQCZBPGhufF86ek9aIkl6UmRTWz8iSEtxfkl2MiVRO0NHTF1uelF8bFdgXV9jUyw/V1R7S09JI3R3Q1hadzU3RWtRe098QH5SO00lZ3pTVHtjeWVCQG9YOlkuczZsPERZfV0mRy5GYnkxNF4ub1Y0L3ZOcmovYi5b''@;'; put 'put ''IWA2YkAyXU9NRypvRU9gKHI2bEhpOVJKVEpsIm5JKFJOK2kvTlk+UGFEbSsqSSpyc2orLkZfZ0U6QDtUK25xYnsrbUtENWouZVRXYiFibF5sRk9FY1YwI1JXZzhGYzlCQDFuZD9vJn5pYWh+QHdgUV47eUF3d2lDMHx2OGw0Z2pNM34vXU4vfEdXbnA/WktuaDlVNDRlPlFoa0VPSz9zbzpNVTNo''@;'; put 'put ''RWRWTTNXWFdXOVZSL30rT0tDNUVSfXpkVUs1dl9faEAydE5vRyEwTmpSR1VgX3pSWXw0Rl1NWzR7LDpMKChSK05oL2pDNU51Mj5iMkBnWU51RHtSR3JSfDtyNnNAVTNGMGdOfjlLfkspSFNZNnp5VVc5fmJzOH57bkB6fVREWXQ+LyY6O196fVRTdVkmO2JbP2t3TmI/ei5UR1lFSlI/fkYpUyVN''@;'; put 'put ''VktremdiJmJzPkhIJCFifmpgRks+LlcrVGBVeiFxLHBpd2VlKXUzVEZaYmY/YmdAfkBUSz9tU2k5MyFLKUc5LDgkNyQjemBhfXhFLF5zW3VDSCUqYTw5W3U7dU9WK3NiRDBdKSNgd3pNVlhte1ghZTc5cWVqRk4+aXluZWZGbVhMXiIhbl1UNURRdzFAMWU6L2FeWm9qME4+RXdQcC57LFpVNWc7''@;'; put 'put ''WSJLNGhwflh+c313KH5AVCpecT9yMix7LGElbyU3ekAxVWpvWGZYfj5WZGFKaTkhSzZyYSQiPlZkL00lZ0RTU2RSYks6QF92eiRrWWtbW0NNbyswa05bdXpeOyYmfTp9WTApQCQ/e3ZbIVlSN3lTOEY6c2s0aT4ifXJqMW4pW1kycEl+OWIrVlI0YF9+cS5kfEJ1T1JGSjd+X0NWeEhWNnkiZmNM''@;'; put 'put ''anNoWiwlIXxaMFQ0QkIwYyFfflJxeTBVels8aUN+ITM6U2hnJkhJKVE5QWZoKDZqJl9tUFRgPkBGdSl8WG8lKT19SU0jN2lIV11lM0tjemZXfCU5R1huMXBGVH1qQVUjcl9YKVB0TjBmQSRAdkkleF15NEZ9a2lKIVQzN3pFI1BaZUQiK34xRzhfVzpObXBseytETCpTQ2MzQnImb3pAMSNhO28p''@;'; put 'put ''WnRqeUUoNGwiVFMsdVUhWXxNPHBGJjsiWGRoSHM4bXR9XnM6VWRHPmpXYG07JXVWcUxHKnY3dmhDY3xfbnhGblcrM3RlfnJddn0jKChKIiF+O3wueFJMbHlNTz5qJmheLFFCbD5sVX5zOjIwOGl2QXJacTw7VyErREl9Sl14NCpkSzo5K2lmS0xZNjNObC5TXWp7dD47UmwhbHx+KDs7IjQhenh+''@;'; put 'put ''cF9rdHlRN1I1U2h8cVtqNnN+P3xyd3lGNFEzKCNJaWgreWwhWXFWNlB4QCxvKmwmTls4bVJyIkk0VEh6VDwmfSRifCMjKDRCfTxlXWkzMjsxczt8eEgzKixbMy4iTmZASiQiSzFEXkVLe3YyMj5UWFVSU345cip2fF0sWXo5NFhJRiZgLFU0Ri8/cTNPRCpxRCE2QywhTDw5fSZNSExrYCNBMDlW''@;'; put 'put ''a1hGYV0lInBDa35BLmFNenxmNTd2cSpoQ3BfUSJ3a2ZoZ3hgTHA/eXBQV1VHbCFNflFPKnZLKlAudHM8VndCenlzaDFEIlBEfUtCcnVXJlpIQFhvX1F2UExIPC9haH5+ZTEqPH05aTN9ZD1yW2o4NzxwJmwvSkomOjFleUgmYGE7SiIqfTpgSGdUNH5OaU5sIVB+NFsyKlJ8OXo6OyY0QDFwJmpK''@;'; put 'put ''e2xjKUZtRjRPWXhLMTVZLEFsY3MiZXdrW3NMJjRGfThffEBQJmg7ZXZXbCFXc2YwbCFVKFpKdzpSNF5fK1V7TFFAX2p8MyFZViFhfFhMPmk1X1RkVG5IOEExfX1BMi5peV9eUmdfKHM+XyIzeXZqfHh0aUJmelJxSWlSI3J2VVJjfDdXdEY3d3BDTH0mcUsvTj9ATEtWNn1OeFopandjcz8sbHVs''@;'; put 'put ''X1RkLmVMQDosZXMjTWIrbXtVUkZoeHtYRmtdUzNwQ1B9KHF5eVJgaXA6JlBWe1NgL1NYKDkoV2VUXnx2XU9UNFFYOXFmI30+YCFLLDthNDhKWSYkLlNFQUBRdm1oekooRXhfMy9SV3pWIiRmbkB+PGN7O1V4Yn5YeyM0XUs4IWFmalZDMSsmaltKKVRfbjdySnJ8RiEiQmF7Q2cuZVlMIlBAfCpq''@;'; put 'put ''KnY2KkgubHNgfF5JO1Epc2ptL0Nye1BbentsdSNybWs2TUtdbjZwaz1eN1k/LkVIVzRTNGl0Wnl9RkZ7amBXbngyVDwvfXByfmYqYEhpdkZjYDswUkprMHdpeyZvWEZCaERwKXZMVnRzdV1GWGRYO1tRV0VCdExDNDMzRFNANXRnU3ZEbmI9KiRXNW5nZ2REKG42eWdHWlY1W2dBZSFYV2pIfXNV''@;'; put 'put ''MzhiPXxMMWJiWHk8ZGYjUitTL1U3Pks7Rn5TdW43TSE9OCRNcFRlSVdqXj1lRUlYMVsra15ndi9bWz1xPUgka248WTB9Smw+Iz5zKEt7fVd3YktuT042UHg+P1krSlkzVmcjM3pIZnpQK1RVKW4mbDBGPjppakI4Z1s/amdzZ29Md2EvRDhNcz9rOjZAMz4/Vm5ZQ1RZKzRAU29UaTxSVC9FNH5d''@;'; put 'put ''YmxWSi8pSSM4XmJ9Xyh6PjNNWmU0SmdTOiNZP1RhVF0kYWlBV3NAbWlVWFdaKmc7YlJwOGwkXi5pX3p1VnY2MHFZNHphMTFYbzlMellqYF56eToxKGxqb1FIVXlZPGVFeDw8dHg2XSlYXypTKkpSQXM9Wy88Wl9tJWtGa1hseDQoX1ErRmc9el1zalFjN0FpU09Kc2ppWDI6W3JjYS8ySVt8eVtM''@;'; put 'put ''d2E/bzZqKHw/T25zeDAwQFFnVHFnOTdmY0NbMS4vKCE5S0NnMiklKVdgKXghT2ZpSFRWamxPfl9ecD9WL0csMjBabClKSTY9I0FwMG4ycW1qJERCKXpMJkwuTSNpa0BxaHxTfFBFdV8haXtAY2B0LileZTtAPiI7JUArdSYyeHRbRUFTXm9CdVBzMXZvSm9qLzRBJV8jYV4sanozWCghXWhld3ZT''@;'; put 'put ''YF0hK293bnYjMjt5bmJzJEtWU0E4Nz1HOlplMWIvQmIwfiM2cDdDZTtmZFBXNFl9cV0pW0VsNyl1bjp8LD5XX2kwRW1kNSImeyEoSiI7TnFTY208NDR6JjpBQW07dTVRYCg5aFV2P2AkJEY/XzdyRmpwbjdeU2M0ckg2MTFlYylPfUwmRzk1VkEmfDcqRCZ7UjFvO3kzZExxJUAsN11paXQ6LlhQ''@;'; put 'put ''IVt7UExkSFMwJmh9cWJvUVttWV5sL19meylDU012Z3ouUUJEaVs7S1AiQG1FSCNfbCZOJUFlS1ROQ2AudWJfVlI2IypCalc1Pk8yTnIjWjF1LngoMXczKTwvZj0zZDY8ZHBVQHUsOCZJb3M/aSldZiFwKVNvd0hkVT9pLF1LajJdKnd6NiJLOFFndnBAM2JANz8xQjZ3di4rIXtMbWdpck04OyF0''@;'; put 'put ''bz1GIVUmV2guS1RDPT9jb0dCZml5ZGRtZWc3cX4hISFQbCIiRD10XSQ/Y0BbblBTRSVidSxbJE9Ve1cqYHU8VzE+TDA4aXIoWmduL3dCblE6Ky5KJnpEdkZ8TyhLZFRLK0ZFOXg/fGouViUlRypvKXZVJkAhdmB8NzEkJTN2dF5AJG9WKDF9fUlaZT44NDVoV2RXTHZMViU/b29CYUAjdmFDTipm''@;'; put 'put ''d1EvUndKVjNtKyw7dSRUNShKSDtaJHUqcEBZXnsva0pSQTcifnZaJk52TzlZOEpzSG8yL3xAIlM2NCsieF0md2EmeSRoLzZ2LHQsaXcqKCI4R0BbYm9FRGQ9RS9oNUN2MldrSDlbVjZ0Tjd7Z0JCO3pVZFMpQUg0UmlQN3Ehdko6bjcxWyNGJEheYz1hMkdDTXJjfkMrJE0sQiExLGZqW3UzX1M5''@;'; put 'put ''eVQ0QnxEa3R6NUoqPCYuSHc4YH0/LipfKCxoUlJ4UlhfI15kUzRwTFQ4YD8vVjZdMCYpMHNsZltaYHNGUiU6WGBCNkEvVXRVPStedGM5e0cxZismWV1vU012OE90RV4/dHEoMDRZR0IvQFtsUEUsPXJGIkgpRlk2SmxwVy8qJH5EIk45fVpuOXxzPHVgc1pbUkx0VmAhakRxbSx5UWV3WFI+cjJj''@;'; put 'put ''NTYxclZCVV9MVHAoKCthZEdPVk9RUSRZZlpKbiwwYSF2JUBNIWg2O0dOWiM0XlRRaEdLIXw1Pml7MmFjMVgpJGg9NkxuXXVoJkA/LCVyL3B0fGVTZl04ZlkwdDhXUUZXYUN0XjxtOCM6SndCSHR3WT5+TkN3LkpsV3ZZe3E2cDtmPiUiWmtHTjIka3gmNzw4KGk3UT4xe05oTzQ0OVddbmxlQnlw''@;'; put 'put ''WGZ0VGBWVFBfWUhsJTwwNDNXW1N8NkY2I3tIS05uS1gmP0NxdTNqNSQmVCprMjlDKjpOKSZMITo+OCghfDUzNE0vQDlSKkojQWZHcDM2OVRWI2BlV31gaTd4VWk2NChte1pzb1U7QmV2JTheeUt5JVhaQW9xTUhaNFkxT3JhW3t6WyU3e18rLyNaMUZZajBjVXtKRGAhXWVTRGB8L081JC5MLnMz''@;'; put 'put ''fFMsOUc3ISZue3w0ZH1EMTByIjIzYW12d0FDbX5DZUA0WmtYbmVVWT5eVCQzZUgpMz99fjxYWXorKlcwWyw0fEMkVTgjVXk6RlNiOTFhV1ZCQnp3N2BXfDtRbzVNTG9mJXVMaT9MQmhvNzQmXmxgdHlBdzVTKmw6aWo5T2ZPazFCVVlYY1JTeSwsY2x9eGlOb1ZmL0JGLyNmVH5kMFZrW3k9dWRC''@;'; put 'put ''bnZSbTRZRXpXWks0IldrQm56RDVGTzAma01BeGJ5bjAuVUQvNDshcktlMShFNkJ1SX1LSTNXYFd0ITAqVyN5UF91KjpQXX01O3dWRnJyLyFyOExtdzxCKClgJDRAQGVgZTtvM2heZVlZMShwZXVKe282OUtCNTZ2QmtvJERQK096OXQrU3NxY0xgUSpPY3d2KVlxaG0yd11nW2x2Lm06P3BlVSkr''@;'; put 'put ''X3IuPHdQLEk/TGl+P2F8bXhCcjFjOW5EdnZpRF1uKUBEcXtAZy9wcXBdOVhXa2xjel1ValF0W3J7SFgmVUlQWVNHdzcmelJjP2lmNTYjKm4vZV8pPUk3NE5lPipDKyU3NndFNVZfcTcqJTpJNzZWQiF1V29ZZT0rcD9pfDM8UkcqUXwzKTd0Sm0+ODQsW3soVXlwYlJwTzhIOTdXSUY4by89JGV4''@;'; put 'put ''JURFOntON35gdTpiRHBQb0wvNXRlbXZIKF1YM08/JUY7eStqbysxWW1BM1guMDFLITVBJU9IWCJJaz8/dFBtcGB2L2JNbHFqRksrOlkjZ25fYDdKIkdKO3RGMyE+QzRtYXg3bis3P14rUkVAKWFAK2o4QHVtWT1lQWlzNCs6KkZANlcvdGd+amB2Xld4eXBMI3EmdiFjMGYjUVllbXxUJikpTiN1''@;'; put 'put ''c3U5TXFeIWJmbkBWVk97Sl5eRCJfYUN4WlRDcCVMQ1Y9QkJpUXUiL2pjUWQ6MGFPSU8lfHJKMW89ZEM+dTNqXnY7W15MJnVYY0IpKG1sbn5ZUUE1c25GMXdBJWs0SVpYJUV7NE0pe3RQPzJCQnVtcVMkVnZPO3M0fWtGRiEsail9IkdAZ1MxeFo6OXtKWTZBfjxfPygrTXkzWGM7SiIzQ1hLX1pk''@;'; put 'put ''Jn42alB8eSlvZWY1WlgwLlVFeWA9LEooI2doVGx6NDxySVo4Oik8dFk5cEcsNldkRmF0YGVeV19VJjk9RFpuNmVgKW5HeFErQzMsa0Z5SVE8fGRGb3pBXX1gdkJxLGkoUkghTFBIXm5Ib0tINUssbzZ0Iy4sQ3xwP1hxa3wpNXIrOlZbNThoeEAqMllUTDAsYDNZXUQxJmlfdHNKL0dmZktaanIi''@;'; put 'put ''LHx0PEg1UiFeaTooJDYpPDUjRVY3U2h4PUEuRXUreHZ9LF50UGF4ezt+Mi5WVXQ9ZTJga0YhcWkieV1jI3dWOHVTc202LjdoUil5bld7e2R0dX0qTFkydV9gempSP3FhNFs4fENlV0krbih3VGsuMllnKi5iTkJDX3lCO31WMiovcilDI1grKH1IRDlGPUx8PzQ9O2M3eDYlbU5AMzl7UkYxaCIu''@;'; put 'put ''L1lGSmNxVGFtIUpJNDs6KEY8VTRIXU9nLEh0bVVnPTlDQls6O045Q0c3Oy98dUNPajJfSDlUcX5EPHhqd0o/OTJRVFtObDFxWkNwXzU3UFM/fXMjWlc7X3ZtezpfUlpucz9xaHckbTA+KHxaM01JXU89JHNBXU1oSiMwaGNDSz11X0UuUzcqUmUvM3QjeFl5NmxiNG9HIk0pbVMmSVExPWdFMTJ8''@;'; put 'put ''PFdaYUxVLHo1e3xOUT89SWgzaElUMzVQKSxaLEMwcCpoXyJeQldyUjU+WHYoLlY3Yl1fMC8ib1MvOG5LOEdaVng7KXh9I2FWWCl6JmNibkRHSjAofGx1eyVEWmkyUm9reTlTImxFNnBrcTFdUzx8JTBVM1UzXUhtQy9eaUZiNV9dOCgremF3M3lVS0hEZmgvImdgV1dPQWoocCtjMHU6KlhyPC4w''@;'; put 'put ''M1UoLEdBPmUqRmwuWnFWUFpKUVdYTCxaI244OUN+WUVwZkJZPUkyUCZRd0F7cUtqRU8xXiRyRDFgc25vQkpQaDpfMSE1ZyQ+JndneClgdlhaPkAiMkZhUDwqYCF2MFcxIU88c2peQ04zJXFWUX1ELjRlKGRrWlVZXjNXcEtXVUBVK2k9YzwpVHtJQytjJUEpV2svNDk2VFl4fGlTeThQUitDeGUu''@;'; put 'put ''Rj5bd0BgJGsraGQkQU9aPEJyS2A1VDMlbiZzTEQiZUxJUGoiVDZmM3J5ckMsKHtPTF9Hel9jc3t9I31TVjZqZ0JgJmAlY3tBUz5ud05AYmt1ODBnRDp4N1V0RzJUPz52IS4/QDp8Jj1udDBVZGRAfCN0LE1tWFp8RjExWVZYNWRPU0xBTDBebVRaM34xLHZDbiFATFgkaD1GR2JBNkxoNCVeOXpn''@;'; put 'put ''b3NMTE5jbldsNCt5OTozeVpabX5bSWgyX0d2bz5AVlJzWCxUbmBTZTc+X3JGL0giey9bamhhcGl6OVs/K2lsektieXtNKDI+Zl04dXE3eE0qaDRlL11IKnZNUzp5XnhNIlNUXU8sWkdlK2BiLmBxVzluRDpUIjZSW3F2PWwwcDgwQmhgZno1Wz1HRVlNfTEwQnxBM19+NGJoJkxvWTBMNH1uJlQ2''@;'; put 'put ''N0x9b3gvcVJYVHtlKGUoSWJbbnthZCQ2OV1qWiFwaDhPOmtkK2Q9Z1c4SFIyRDsiPzRQdjFwSXtWekhBMD94ZT1PX3ZVXl8zIWpbI1ZYKCUuTGM2c1U+OzF4SSVLbzhjekhfUnk5bmM7MXlNOFkzNzQ8Uk5lWCtQcSJVLCtjfkUub30iVn5TMDh7cWN+NDNEYlA0MUVsVWp8eGJFTGpdWyRATUIv''@;'; put 'put ''YllGNFBvVjZZZjxlKk4hWT87SFpeTjpgI100TTRSKn11ST90QEBJTDcmdXY1cXl0bmhEeW03PE5dIiw0JCQmVUd7N01tfEU+NCJYMnx9blA+aXtUUjlPfHdPP1tPSUN0Y3gzNDohdm99Qz9YJTlqOU50YjtlKG48Mz5pY1VYOEJ9KTRnOUIjfFlgdXpXJS5OTkxTbyR9KE5kTTAybSEoKzUofnBZ''@;'; put 'put ''PndWSXdoSV9wNXxATCFUXWMoPW4yW1lNbm4+VWwwfT1nQjhgVyhvZDk6WTVwamg5P0R2QV8/JiQwLyZseSFnIT1qYCtdPj9sYGQ9YHttSSRLVWh8dXteZVsmOFoyXzRXI305XilNdlh5N2smZU8sLCY5W0FQfXhpSiomTShWIl9wJjBpXztdVDl2JkwzR0NwWTRNKmVRd0QyQGR+S0JXMjVZLlgw''@;'; put 'put ''eG0wfnhfTzN9OW59YTdCNXJDJWhDMk9+REBjVDBeZUNhO35TXyI5QDg9ZX5uISlCaEBVUXJeZXxDVFg0fEBiVDtTZlVOaGxXdnZZbDhpcXJTM2gpUF5mOUA/dztvcjlrZXxWJHdyPHxCT0YuYSFjVSUoOCVzZkMoMTwuSntzLk04KzRndT1aTjI9SEVISnI4d3JDRkEiZz10d3ksXVZna2c0QDY2''@;'; put 'put ''R1lGVGd0MGBdfEdlaDk/N2tXLlskbTQuJExFLGo0cChWRURRcX4uIkI7aVlnTFUuN3VSdF5scSxmM2UlUSxeVHJpZjdyPC40V20yfTMoYGBAKitQSTkoMD9Ke1Aze3ojJGVEQjxmOU86JX1qJSolQ2U+VFo4SSYhLGdCdn07ZHk2dXpsN1pASFoicGI/cjAkZz1IbX1gfGRNYlpYaz16cy5CfWtK''@;'; put 'put ''Y1NmKiMpRDowOEZyNEM8YnJ9ZHs3WFpNVXk6VkJ9NSs3KlNaJl8jWEh8VGJYclZdYU5zVV1vKnFvdCp8YzgpI3ViPTNqNGglemI2XzB1JTBLOVprYEtnWzU7SFEhO0JAXl1IMjl+cGdrJU8uZCZYW3gjUW9eKTldYSp2cFcoQ0ckcSI/Pj5sKEpQQEBpVURvQl90cShwU3o1Ynt1KyYqMix4eDpD''@;'; put 'put ''eipbRFNhXmNXXnJAZVhAUCIjazdMbjhSb29kNFZCNGkya3EsIWtCbTd0V0RAVTo7MV9QI2d9MSo5bHFLZiIqMFQ/KDlGImIiUD1fLndec19YZzFCbFdbO3klOHw8T1RMakd5ZChxeEpnN3hwIUx+ezNzcntaNXFbe0VJcF1UKVVnY2YmJnd9bHUrc2p+S3d4UGxLM29sOms9KWE7M04mRzJeN0w6''@;'; put 'put ''dE1QUHokLzMkfEZwUiZQOWpzfTE1M3dUNHlifW5MRno+IyMlaiRJaDB+UGBCX3gsejhoR08xXmZzMHkjVUMvc1RoMlN+LlsxSCQhJEI1Jk1QeDtCJykpLEN3fHwoQ3c9UkplKHt3YXNtQmluYXJ5OlhVLGxvY2F0ZUZpbGU6dm9pZCAwfSkpLEN3KS50aGVuKGw9Pm5ldyBEVChsKSl9c3RhdGlj''@;'; put 'put ''IHVubG9hZCgpe0N3JiYoQ3c9dm9pZCAwKX12ZXJzaW9uKCl7cmV0dXJuIHRoaXMuX21vZHVsZS5HcmFwaHZpei5wcm90b3R5cGUudmVyc2lvbigpfWxheW91dChsLGE9InN2ZyIsZD0iZG90IixoKXtpZighbClyZXR1cm4iIjtjb25zdCBmPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8u''@;'; put 'put ''eUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKTtsZXQgXz0iIixUPSIiO3RyeXshZnVuY3Rpb24oVyxpZSl7Y29uc3QgZ2U9e2ltYWdlczpbXSxmaWxlczpbXSwuLi5pZX07dmFyIHdlO1suLi5nZS5maWxlcywuLi4od2U9Z2UuaW1hZ2VzLHdlLm1hcChPSmUpKV0uZm9yRWFjaChFZT0+Vy5j''@;'; put 'put ''cmVhdGVGaWxlKEVlLnBhdGgsRWUuZGF0YSkpfShmLGgpO3RyeXtfPWYubGF5b3V0KGwsYSxkKX1jYXRjaChXKXtUPVcubWVzc2FnZX1UPWYubGFzdEVycm9yKCl8fFR9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighXyYmVCl0aHJvdyBuZXcgRXJyb3IoVCk7cmV0dXJuIF99''@;'; put 'put ''Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJmZHAiLGQpfXNmZHAobCxhPSJzdmci''@;'; put 'put ''LGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixkKX1wYXRjaHdvcmsobCxhPSJzdmciLGQp''@;'; put 'put ''e3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX19ZnVuY3Rpb24gSVQoYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYyl9ZnVuY3Rpb24gYzQoYyl7cmV0dXJuIE1hdGgucm91''@;'; put 'put ''bmQoMTAwKmMpLzEwMH1mdW5jdGlvbiBubGUoYyxsKXtpZigicG9seWdvbiI9PWMudGFnKXsoYT1JVChjKSkudGFnPSJwYXRoIjt2YXIgaD1JVChkPWMuYXR0cmlidXRlcyksZj1kLnBvaW50cztpZigicG9seWdvbiI9PWwudGFnKXsoXz1jLmJib3gpLmN4PV8ueCtfLndpZHRoLzIsXy5jeT1f''@;'; put 'put ''LnkrXy5oZWlnaHQvMjtmb3IodmFyIFc9ZC5wb2ludHMuc3BsaXQoIiAiKSxpZT1XLm1hcChmdW5jdGlvbihGbil7dmFyIEZyPUZuLnNwbGl0KCIsIik7cmV0dXJuW0ZyWzBdLV8uY3gsRnJbMV0tXy5jeV19KSxnZT1pZVtpZS5sZW5ndGgtMV1bMF0sd2U9aWVbaWUubGVuZ3RoLTFdWzFdLEVl''@;'; put 'put ''PTA7RWU8aWUubGVuZ3RoO0VlKyssZ2U9WmUsd2U9b3Qpe3ZhciBldD0oWmU9aWVbRWVdWzBdKS1nZTtpZigwIT0oeXQ9KG90PWllW0VlXVsxXSktd2UpJiYwPD0oa3Q9Z2Utd2UqZXQveXQpJiZrdDwxLzAmJihnZTw9a3QmJmt0PD1aZXx8WmU8PWt0JiZrdDw9Z2UpKWJyZWFrfXZhciBTdD1b''@;'; put 'put ''W18uY3gra3QsXy5jeSswXS5qb2luKCIsIildO2Y9KFN0PShTdD1TdC5jb25jYXQoVy5zbGljZShFZSkpKS5jb25jYXQoVy5zbGljZSgwLEVlKSkpLmpvaW4oIiAiKX1oLmQ9Ik0iK2YrInoiLGRlbGV0ZSBoLnBvaW50cyxhLmF0dHJpYnV0ZXM9aH1lbHNle3ZhciBhOyhhPUlUKGMpKS50YWc9''@;'; put 'put ''InBhdGgiLGg9SVQoZD1jLmF0dHJpYnV0ZXMpO3ZhciBkLFplLG90LGt0LFF0PWQuY3gscm49ZC5jeSx2bj1kLnJ4LE5uPWQucnk7aWYoInBvbHlnb24iPT1sLnRhZyl7dmFyIF87KF89bC5iYm94KS5jeD1fLngrXy53aWR0aC8yLF8uY3k9Xy55K18uaGVpZ2h0LzI7dmFyIGNyPWwuYXR0cmli''@;'; put 'put ''dXRlcy5wb2ludHMuc3BsaXQoIiAiKVswXS5zcGxpdCgiLCIpLHl0PShldD1jclswXS1fLmN4LGNyWzFdLV8uY3kpLGxpPU1hdGguc3FydChNYXRoLnBvdyhldCwyKStNYXRoLnBvdyh5dCwyKSksbXI9ZXQvbGksRWk9LXl0L2xpfWVsc2UgbXI9MSxFaT0wO2guZD0iTSAiK1F0KyIgIitybisi''@;'; put 'put ''IG0gIisoWmU9dm4qbXIpKyIsIisob3Q9LU5uKkVpKSsiIGEgIit2bisiLCIrTm4rIiAwIDEsMCAiKyhldD0oa3Q9dm4qLW1yKS1aZSkrIiwiKyh5dD0tTm4qLUVpLW90KSsiIGEgIit2bisiLCIrTm4rIiAwIDEsMCAiKy1ldCsiLCIrLXl0KyJ6IixkZWxldGUgaC5jeCxkZWxldGUgaC5jeSxk''@;'; put 'put ''ZWxldGUgaC5yeCxkZWxldGUgaC5yeSxhLmF0dHJpYnV0ZXM9aH1yZXR1cm4gYX1mdW5jdGlvbiBISmUoKXt0cnl7RFQubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRo''@;'; put 'put ''aXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJbml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEp''@;'; put 'put ''e2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5cL1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLEpVLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6IiIsZW5naW5lOiJk''@;'; put 'put ''b3QiLHZpelVSTDpjfSxmdW5jdGlvbihhKXt9KSxKVS5jYWxsKHRoaXMse3R5cGU6InZlcnNpb24ifSxmdW5jdGlvbihhKXsidmVyc2lvbiI9PT1hLmRhdGEudHlwZSYmKGwuX2dyYXBodml6VmVyc2lvbj1hLmRhdGEudmVyc2lvbixsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKSl9''@;'; put 'put ''KX19ZnVuY3Rpb24gSlUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3JrZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIEJKZShjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29w''@;'; put 'put ''dGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAs''@;'; put 'put ''Xz10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24sXz0hMTt2YXIgVD10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLFc9e30saWU9dGhpcy5fZGljdGlvbmFyeXx8e30sZ2U9e30sd2U9dGhp''@;'; put 'put ''cy5fbm9kZURpY3Rpb25hcnl8fHt9O2Z1bmN0aW9uIGt0KG1yLEVpPTAsWnIpeyhmdW5jdGlvbiBFZShtcixFaSl7dmFyIFpyPW1yLnRhZztpZigiaW5kZXgiPT1hKW1yLmtleT1FaTtlbHNlIGlmKCIjIiE9WnJbMF0paWYoImlkIj09YSltci5rZXk9bXIuYXR0cmlidXRlcy5pZDtlbHNlIGlm''@;'; put 'put ''KCJ0aXRsZSI9PWEpe3ZhciBGbj1tci5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKEZyKXtyZXR1cm4idGl0bGUiPT1Gci50YWd9KTtGbiYmKG1yLmtleT1Gbi5jaGlsZHJlbi5sZW5ndGg+MD9Gbi5jaGlsZHJlblswXS50ZXh0OiIiKX1udWxsPT1tci5rZXkmJihoJiYoImVsbGlwc2UiPT1acnx8''@;'; put 'put ''InBvbHlnb24iPT1acikmJihacj0icGF0aCIpLG1yLmtleT1acisiLSIrRWkpfSkobXIsRWkpLGZ1bmN0aW9uIFplKG1yLEVpKXttci5pZD0oRWk/RWkuaWQrIi4iOiIiKSttci5rZXl9KG1yLFpyKTt2YXIgRnI9aWVbbXIuaWRdOyhmdW5jdGlvbiBvdChtcil7V1ttci5pZF09bXJ9KShtciks''@;'; put 'put ''ZnVuY3Rpb24gZXQobXIsRWkpe2gmJm1yLmlkIGluIGllJiYoInBvbHlnb24iPT1FaS50YWd8fCJlbGxpcHNlIj09RWkudGFnfHwicGF0aCI9PUVpLnRhZykmJihFaS50YWchPW1yLnRhZ3x8InBvbHlnb24iPT1tci50YWcpJiYoInBhdGgiIT1FaS50YWcmJihtci5hbHRlcm5hdGl2ZU9sZD1u''@;'; put 'put ''bGUoRWksbXIpKSwicGF0aCIhPW1yLnRhZyYmKG1yLmFsdGVybmF0aXZlTmV3PW5sZShtcixFaSkpKX0obXIsRnIpLGZ1bmN0aW9uIHl0KG1yLEVpKXtpZihkJiZFaSYmKCJwYXRoIj09RWkudGFnfHxtci5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1tci5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2''@;'; put 'put ''YXIgWnI9KG1yLmFsdGVybmF0aXZlTmV3fHxtcikuYXR0cmlidXRlcy5kO2lmKG1yLmFsdGVybmF0aXZlT2xkKXZhciBGbj1aVShtci5hbHRlcm5hdGl2ZU9sZCk7ZWxzZSBGbj1aVShFaSk7KG1yLmFsdGVybmF0aXZlT2xkfHwobXIuYWx0ZXJuYXRpdmVPbGQ9e30pKS5wb2ludHM9ZnVuY3Rp''@;'; put 'put ''b24gZkplKGMsbCxhLGQpe2NvbnN0IGg9YyxmPWguY2xvbmVOb2RlKCksXz1oLmdldFRvdGFsTGVuZ3RoKCksVD0oZi5zZXRBdHRyaWJ1dGUoImQiLGwpLGYpLmdldFRvdGFsTGVuZ3RoKCksVz1bMF07bGV0IGllPTA7Y29uc3QgZ2U9ZD9hOmEvTWF0aC5tYXgoXyxUKTtmb3IoOyhpZSs9Z2Up''@;'; put 'put ''PDE7KVcucHVzaChpZSk7cmV0dXJuIFcucHVzaCgxKSxXLm1hcChmdW5jdGlvbihFZSl7Y29uc3QgWmU9aC5nZXRQb2ludEF0TGVuZ3RoKEVlKl8pLG90PWYuZ2V0UG9pbnRBdExlbmd0aChFZSpUKTtyZXR1cm5bW1plLngsWmUueV0sW290Lngsb3QueV1dfSl9KEZuLFpyLGYsXyl9fShtcixG''@;'; put 'put ''cik7dmFyIFFuPXt9O21yLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oTXIpe3ZhciBfcj1Nci50YWc7KCJlbGxpcHNlIj09X3J8fCJwb2x5Z29uIj09X3IpJiYoX3I9InBhdGgiKSxudWxsPT1Rbltfcl0mJihRbltfcl09MCksa3QoTXIsUW5bX3JdKyssbXIpfSl9ZnVuY3Rpb24gcm4obXIp''@;'; put 'put ''eyhmdW5jdGlvbiBTdChtcil7aWYoVCYmbXIucGFyZW50JiYibm9kZSI9PW1yLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzJiYidGl0bGUiPT1tci50YWcpe2lmKG1yLmNoaWxkcmVuLmxlbmd0aD4wKXZhciBGbj1tci5jaGlsZHJlblswXS50ZXh0O2Vsc2UgRm49IiI7Z2VbRm5dPW1yLnBhcmVu''@;'; put 'put ''dH19KShtciksZnVuY3Rpb24gUXQobXIpe3ZhciBacj1tci50YWc7aWYoVCYmIWllW21yLmlkXSYmbXIucGFyZW50JiZKYWUobXIpJiYoInBhdGgiPT1acnx8InBvbHlnb24iPT1acikpe2lmKCJwb2x5Z29uIj09WnIpe3ZhciBGcj1tci5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihZ''@;'; put 'put ''cil7cmV0dXJuInBhdGgiPT1Zci50YWd9KTtGciYmKG1yLnRvdGFsTGVuZ3RoPUZyLnRvdGFsTGVuZ3RoKX12YXIgUW49ZnVuY3Rpb24gbUplKGMpe3JldHVybiBmdW5jdGlvbiBnSmUoYyl7cmV0dXJuImVkZ2UiPT1jLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzP2MucGFyZW50OmMucGFyZW50''@;'; put 'put ''LnBhcmVudC5wYXJlbnR9KGMpLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24obCl7cmV0dXJuInRpdGxlIj09bC50YWd9KX0obXIpLE1yPVFuLmNoaWxkcmVuWzBdLF9yPU1yLnRleHQuc3BsaXQoIi0+Iik7MiE9X3IubGVuZ3RoJiYoX3I9TXIudGV4dC5zcGxpdCgiLS0iKSk7dmFyIHZ0PV9yWzBd''@;'; put 'put ''LE90PWdlW3Z0XSxjbj13ZVt2dF07aWYoY24pe2lmKChPbj1PdC5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oWXIsTnIpe3JldHVybiJnIj09WXIudGFnfSkpPj0wKXt2YXIgRW49T3QuY2hpbGRyZW5bT25dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihZcixOcil7cmV0dXJuImEi''@;'; put 'put ''PT1Zci50YWd9KTtPdD1PdC5jaGlsZHJlbltPbl0uY2hpbGRyZW5bRW5dfShPbj1jbi5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oWXIsTnIpe3JldHVybiJnIj09WXIudGFnfSkpPj0wJiYoRW49Y24uY2hpbGRyZW5bT25dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihOcixSaSl7''@;'; put 'put ''cmV0dXJuImEiPT1Oci50YWd9KSxjbj1jbi5jaGlsZHJlbltPbl0uY2hpbGRyZW5bRW5dKTtmb3IodmFyIEpuPU90LmNoaWxkcmVuLE9uPTA7T248Sm4ubGVuZ3RoO09uKyspaWYoInBvbHlnb24iPT1KbltPbl0udGFnfHwiZWxsaXBzZSI9PUpuW09uXS50YWd8fCJwYXRoIj09Sm5bT25dLnRh''@;'; put 'put ''Z3x8InRleHQiPT1KbltPbl0udGFnKXt2YXIgUHI9Sm5bT25dO2JyZWFrfXZhciBPcj1jbi5jaGlsZHJlbjtmb3IoT249MDtPbjxPci5sZW5ndGg7T24rKylpZigicG9seWdvbiI9PU9yW09uXS50YWd8fCJlbGxpcHNlIj09T3JbT25dLnRhZ3x8InBhdGgiPT1PcltPbl0udGFnfHwidGV4dCI9''@;'; put 'put ''PU9yW09uXS50YWcpe3ZhciAkcj1PcltPbl07YnJlYWt9bXIub2Zmc2V0PSRyJiZQcj97eDokci5jZW50ZXIueC1Qci5jZW50ZXIueCx5OiRyLmNlbnRlci55LVByLmNlbnRlci55fTp7eDowLHk6MH19fX0obXIpLG1yLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oRWkpe3JuKEVpKX0pfXRo''@;'; put 'put ''aXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVuZCIsdGhpcyk7dmFyIHZuPWtzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSxjcj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhjLCJpbWFnZS9zdmcreG1sIik7dm4uYXBwZW5k''@;'; put 'put ''KGZ1bmN0aW9uKCl7cmV0dXJuIGNyLmRvY3VtZW50RWxlbWVudH0pO3ZhciBfaT1YZyh2bi5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcyksa3QoX2kpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMp''@;'; put 'put ''LHJuKF9pKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPV9pLHRoaXMuX2RpY3Rpb25hcnk9Vyx0aGlzLl9ub2RlRGljdGlvbmFyeT1nZSx0aGlzLl9leHRyYWN0RGF0YT1mdW5jdGlvbihtcixFaSxacil7dmFyIEZuPVhnKG1yKTty''@;'; put 'put ''ZXR1cm4ga3QoRm4sRWksWnIpLHJuKEZuKSxGbn0sdGhpcy5fYnVzeT0hMSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc0VuZCIsdGhpcyksbCYmbC5jYWxsKHRoaXMpLHRoaXMuX3F1ZXVlLmxlbmd0aD4wJiZ0aGlzLl9xdWV1ZS5zaGlmdCgpLmNhbGwodGhpcyl9ZnVuY3Rpb24g''@;'; put 'put ''TFQoYyxsKXtpZigoYT0oYz1sP2MudG9FeHBvbmVudGlhbChsLTEpOmMudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGEsZD1jLnNsaWNlKDAsYSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2Muc2xpY2UoYSsxKV19dmFyIHJs''@;'; put 'put ''ZSxkUWU9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gUVUoYyl7aWYoIShsPWRRZS5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVy''@;'; put 'put ''biBuZXcgZVooe2ZpbGw6bFsxXSxhbGlnbjpsWzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0sd2lkdGg6bFs2XSxjb21tYTpsWzddLHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gZVooYyl7dGhpcy5maWxsPXZv''@;'; put 'put ''aWQgMD09PWMuZmlsbD8iICI6Yy5maWxsKyIiLHRoaXMuYWxpZ249dm9pZCAwPT09Yy5hbGlnbj8iPiI6Yy5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09Yy5zaWduPyItIjpjLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09Yy5zeW1ib2w/IiI6Yy5zeW1ib2wrIiIsdGhpcy56ZXJv''@;'; put 'put ''PSEhYy56ZXJvLHRoaXMud2lkdGg9dm9pZCAwPT09Yy53aWR0aD92b2lkIDA6K2Mud2lkdGgsdGhpcy5jb21tYT0hIWMuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09Yy5wcmVjaXNpb24/dm9pZCAwOitjLnByZWNpc2lvbix0aGlzLnRyaW09ISFjLnRyaW0sdGhpcy50eXBlPXZvaWQg''@;'; put 'put ''MD09PWMudHlwZT8iIjpjLnR5cGUrIiJ9ZnVuY3Rpb24gaWxlKGMsbCl7dmFyIGE9TFQoYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsxXTtyZXR1cm4gaDwwPyIwLiIrbmV3IEFycmF5KC1oKS5qb2luKCIwIikrZDpkLmxlbmd0aD5oKzE/ZC5zbGljZSgwLGgrMSkrIi4i''@;'; put 'put ''K2Quc2xpY2UoaCsxKTpkK25ldyBBcnJheShoLWQubGVuZ3RoKzIpLmpvaW4oIjAiKX1RVS5wcm90b3R5cGU9ZVoucHJvdG90eXBlLGVaLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMu''@;'; put 'put ''emVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlzLndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0''@;'; put 'put ''aGlzLnR5cGV9O2NvbnN0IG9sZT17IiUiOihjLGwpPT4oMTAwKmMpLnRvRml4ZWQobCksYjpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDIpLGM6Yz0+YysiIixkOmZ1bmN0aW9uIGFRZShjKXtyZXR1cm4gTWF0aC5hYnMoYz1NYXRoLnJvdW5kKGMpKT49MWUyMT9jLnRvTG9jYWxlU3RyaW5n''@;'; put 'put ''KCJlbiIpLnJlcGxhY2UoLywvZywiIik6Yy50b1N0cmluZygxMCl9LGU6KGMsbCk9PmMudG9FeHBvbmVudGlhbChsKSxmOihjLGwpPT5jLnRvRml4ZWQobCksZzooYyxsKT0+Yy50b1ByZWNpc2lvbihsKSxvOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoOCkscDooYyxsKT0+aWxlKDEwMCpj''@;'; put 'put ''LGwpLHI6aWxlLHM6ZnVuY3Rpb24gZlFlKGMsbCl7dmFyIGE9TFQoYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsxXSxmPWgtKHJsZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihoLzMpKSkpKzEsXz1kLmxlbmd0aDtyZXR1cm4gZj09PV8/ZDpmPl8/''@;'; put 'put ''ZCtuZXcgQXJyYXkoZi1fKzEpLmpvaW4oIjAiKTpmPjA/ZC5zbGljZSgwLGYpKyIuIitkLnNsaWNlKGYpOiIwLiIrbmV3IEFycmF5KDEtZikuam9pbigiMCIpK0xUKGMsTWF0aC5tYXgoMCxsK2YtMSkpWzBdfSxYOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCks''@;'; put 'put ''eDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KX07ZnVuY3Rpb24gc2xlKGMpe3JldHVybiBjfXZhciBSVCx3ZCxhbGU9QXJyYXkucHJvdG90eXBlLm1hcCxsbGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZ''@;'; put 'put ''Il07IWZ1bmN0aW9uIG1RZShjKXtSVD1mdW5jdGlvbiBwUWUoYyl7dmFyIGw9dm9pZCAwPT09Yy5ncm91cGluZ3x8dm9pZCAwPT09Yy50aG91c2FuZHM/c2xlOmZ1bmN0aW9uIGNRZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2Zvcih2YXIgaD1hLmxlbmd0aCxmPVtdLF89MCxUPWNbMF0s''@;'; put 'put ''Vz0wO2g+MCYmVD4wJiYoVytUKzE+ZCYmKFQ9TWF0aC5tYXgoMSxkLVcpKSxmLnB1c2goYS5zdWJzdHJpbmcoaC09VCxoK1QpKSwhKChXKz1UKzEpPmQpKTspVD1jW189KF8rMSklYy5sZW5ndGhdO3JldHVybiBmLnJldmVyc2UoKS5qb2luKGwpfX0oYWxlLmNhbGwoYy5ncm91cGluZyxOdW1i''@;'; put 'put ''ZXIpLGMudGhvdXNhbmRzKyIiKSxhPXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVswXSsiIixkPXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVsxXSsiIixoPXZvaWQgMD09PWMuZGVjaW1hbD8iLiI6Yy5kZWNpbWFsKyIiLGY9dm9pZCAwPT09Yy5udW1lcmFscz9z''@;'; put 'put ''bGU6ZnVuY3Rpb24gdVFlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBjWythXX0pfX0oYWxlLmNhbGwoYy5udW1lcmFscyxTdHJpbmcpKSxfPXZvaWQgMD09PWMucGVyY2VudD8iJSI6Yy5wZXJjZW50KyIiLFQ9dm9p''@;'; put 'put ''ZCAwPT09Yy5taW51cz8iXHUyMjEyIjpjLm1pbnVzKyIiLFc9dm9pZCAwPT09Yy5uYW4/Ik5hTiI6Yy5uYW4rIiI7ZnVuY3Rpb24gaWUod2Upe3ZhciBFZT0od2U9UVUod2UpKS5maWxsLFplPXdlLmFsaWduLG90PXdlLnNpZ24sZXQ9d2Uuc3ltYm9sLHl0PXdlLnplcm8sa3Q9d2Uud2lkdGgs''@;'; put 'put ''U3Q9d2UuY29tbWEsUXQ9d2UucHJlY2lzaW9uLHJuPXdlLnRyaW0sdm49d2UudHlwZTsibiI9PT12bj8oU3Q9ITAsdm49ImciKTpvbGVbdm5dfHwodm9pZCAwPT09UXQmJihRdD0xMikscm49ITAsdm49ImciKSwoeXR8fCIwIj09PUVlJiYiPSI9PT1aZSkmJih5dD0hMCxFZT0iMCIsWmU9Ij0i''@;'; put 'put ''KTt2YXIgTm49IiQiPT09ZXQ/YToiIyI9PT1ldCYmL1tib3hYXS8udGVzdCh2bik/IjAiK3ZuLnRvTG93ZXJDYXNlKCk6IiIsY3I9IiQiPT09ZXQ/ZDovWyVwXS8udGVzdCh2bik/XzoiIixEcj1vbGVbdm5dLF9pPS9bZGVmZ3BycyVdLy50ZXN0KHZuKTtmdW5jdGlvbiBsaShtcil7dmFyIEZu''@;'; put 'put ''LEZyLFFuLEVpPU5uLFpyPWNyO2lmKCJjIj09PXZuKVpyPURyKG1yKStacixtcj0iIjtlbHNle3ZhciBNcj0obXI9K21yKTwwfHwxL21yPDA7aWYobXI9aXNOYU4obXIpP1c6RHIoTWF0aC5hYnMobXIpLFF0KSxybiYmKG1yPWZ1bmN0aW9uIGhRZShjKXtlOmZvcih2YXIgaCxsPWMubGVuZ3Ro''@;'; put 'put ''LGE9MSxkPS0xO2E8bDsrK2Epc3dpdGNoKGNbYV0pe2Nhc2UiLiI6ZD1oPWE7YnJlYWs7Y2FzZSIwIjowPT09ZCYmKGQ9YSksaD1hO2JyZWFrO2RlZmF1bHQ6aWYoIStjW2FdKWJyZWFrIGU7ZD4wJiYoZD0wKX1yZXR1cm4gZD4wP2Muc2xpY2UoMCxkKStjLnNsaWNlKGgrMSk6Y30obXIpKSxN''@;'; put 'put ''ciYmMD09K21yJiYiKyIhPT1vdCYmKE1yPSExKSxFaT0oTXI/IigiPT09b3Q/b3Q6VDoiLSI9PT1vdHx8IigiPT09b3Q/IiI6b3QpK0VpLFpyPSgicyI9PT12bj9sbGVbOCtybGUvM106IiIpK1pyKyhNciYmIigiPT09b3Q/IikiOiIiKSxfaSlmb3IoRm49LTEsRnI9bXIubGVuZ3RoOysrRm48''@;'; put 'put ''RnI7KWlmKDQ4PihRbj1tci5jaGFyQ29kZUF0KEZuKSl8fFFuPjU3KXtacj0oNDY9PT1Rbj9oK21yLnNsaWNlKEZuKzEpOm1yLnNsaWNlKEZuKSkrWnIsbXI9bXIuc2xpY2UoMCxGbik7YnJlYWt9fVN0JiYheXQmJihtcj1sKG1yLDEvMCkpO3ZhciBfcj1FaS5sZW5ndGgrbXIubGVuZ3RoK1py''@;'; put 'put ''Lmxlbmd0aCx2dD1fcjxrdD9uZXcgQXJyYXkoa3QtX3IrMSkuam9pbihFZSk6IiI7c3dpdGNoKFN0JiZ5dCYmKG1yPWwodnQrbXIsdnQubGVuZ3RoP2t0LVpyLmxlbmd0aDoxLzApLHZ0PSIiKSxaZSl7Y2FzZSI8Ijptcj1FaSttcitacit2dDticmVhaztjYXNlIj0iOm1yPUVpK3Z0K21yK1py''@;'; put 'put ''O2JyZWFrO2Nhc2UiXiI6bXI9dnQuc2xpY2UoMCxfcj12dC5sZW5ndGg+PjEpK0VpK21yK1pyK3Z0LnNsaWNlKF9yKTticmVhaztkZWZhdWx0Om1yPXZ0K0VpK21yK1pyfXJldHVybiBmKG1yKX1yZXR1cm4gUXQ9dm9pZCAwPT09UXQ/NjovW2dwcnNdLy50ZXN0KHZuKT9NYXRoLm1heCgxLE1h''@;'; put 'put ''dGgubWluKDIxLFF0KSk6TWF0aC5tYXgoMCxNYXRoLm1pbigyMCxRdCkpLGxpLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHdlKyIifSxsaX1yZXR1cm57Zm9ybWF0OmllLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBnZSh3ZSxFZSl7dmFyIFplPWllKCgod2U9UVUod2UpKS50eXBlPSJmIix3''@;'; put 'put ''ZSkpLG90PTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIGxRZShjKXtyZXR1cm4oYz1MVChNYXRoLmFicyhjKSkpP2NbMV06TmFOfShFZSkvMykpKSxldD1NYXRoLnBvdygxMCwtb3QpLHl0PWxsZVs4K290LzNdO3JldHVybiBmdW5jdGlvbihrdCl7cmV0dXJu''@;'; put 'put ''IFplKGV0Kmt0KSt5dH19fX0oYyksd2Q9UlQuZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCB0Wj1NYXRoLlBJLG5aPTIqdFosUWc9MWUtNixiUWU9blotUWc7ZnVuY3Rpb24gY2xlKGMpe3RoaXMuXys9Y1swXTtmb3IobGV0IGw9''@;'; put 'put ''MSxhPWMubGVuZ3RoO2w8YTsrK2wpdGhpcy5fKz1hcmd1bWVudHNbbF0rY1tsXX1jbGFzcyByWntjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9jbGU6ZnVuY3Rpb24geVFlKGMpe2xl''@;'; put 'put ''dCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gY2xlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gp''@;'; put 'put ''dGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlz''@;'; put 'put ''Ll94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwk''@;'; put 'put ''e3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEsZCxoLGYsXyl7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPStffWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93''@;'; put 'put ''IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9YCk7bGV0IF89dGhpcy5feDEsVD10aGlzLl95MSxXPWQtbCxpZT1oLWEsZ2U9Xy1sLHdlPVQtYSxFZT1nZSpnZSt3ZSp3ZTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1g''@;'; put 'put ''O2Vsc2UgaWYoRWU+UWcpaWYoTWF0aC5hYnMod2UqVy1pZSpnZSk+UWcmJmYpe2xldCBaZT1kLV8sb3Q9aC1ULGV0PVcqVytpZSppZSx5dD1aZSpaZStvdCpvdCxrdD1NYXRoLnNxcnQoZXQpLFN0PU1hdGguc3FydChFZSksUXQ9ZipNYXRoLnRhbigodFotTWF0aC5hY29zKChldCtFZS15dCkv''@;'; put 'put ''KDIqa3QqU3QpKSkvMikscm49UXQvU3Qsdm49UXQva3Q7TWF0aC5hYnMocm4tMSk+UWcmJnRoaXMuX2FwcGVuZGBMJHtsK3JuKmdlfSwke2Ercm4qd2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKHdlKlplPmdlKm90KX0sJHt0aGlzLl94MT1sK3ZuKld9LCR7dGhpcy5feTE9''@;'; put 'put ''YSt2bippZX1gfWVsc2UgdGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gfWFyYyhsLGEsZCxoLGYsXyl7aWYobD0rbCxhPSthLF89ISFfLChkPStkKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IFQ9ZCpNYXRoLmNvcyhoKSxX''@;'; put 'put ''PWQqTWF0aC5zaW4oaCksaWU9bCtULGdlPWErVyx3ZT0xXl8sRWU9Xz9oLWY6Zi1oO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7aWV9LCR7Z2V9YDooTWF0aC5hYnModGhpcy5feDEtaWUpPlFnfHxNYXRoLmFicyh0aGlzLl95MS1nZSk+UWcpJiZ0aGlzLl9hcHBlbmRgTCR7aWV9''@;'; put 'put ''LCR7Z2V9YCxkJiYoRWU8MCYmKEVlPUVlJW5aK25aKSxFZT5iUWU/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7d2V9LCR7bC1UfSwke2EtV31BJHtkfSwke2R9LDAsMSwke3dlfSwke3RoaXMuX3gxPWllfSwke3RoaXMuX3kxPWdlfWA6RWU+UWcmJnRoaXMuX2FwcGVuZGBBJHtkfSwk''@;'; put 'put ''e2R9LDAsJHsrKEVlPj10Wil9LCR7d2V9LCR7dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStk''@;'; put 'put ''fXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gdWxlKCl7cmV0dXJuIG5ldyByWn1mdW5jdGlvbiB3UWUoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiBkbGUoYyxsLGEsZCxo''@;'; put 'put ''LGYsXyl7dmFyIFc9WGcoZ2xlLmNhbGwodGhpcyxmKSk7Yy5kYXRhKFtXXSksX3cuY2FsbChjLm5vZGUoKSxXKSxobGUoYyxsLGEsZCxoLGYsXyl9ZnVuY3Rpb24gaGxlKGMsbCxhLGQsaCxmLF8pe3ZhciBUPV8uc2hvcnRlbmluZ3x8MCx3ZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAs''@;'; put 'put ''LTMuNV1dLEVlPWQtbCxaZT1oLWEsb3Q9TWF0aC5zcXJ0KEVlKkVlK1plKlplKTtpZigwPT1vdCl2YXIgZXQ9MSx5dD0wO2Vsc2UgZXQ9RWUvb3QseXQ9WmUvb3Q7aWYoZD1sKyhvdC1ULTEwLS4xKSpldCxoPWErKG90LVQtMTAtLjEpKnl0LGYuVVJMfHxmLnRvb2x0aXApdmFyIGt0PWMuc2Vs''@;'; put 'put ''ZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxTdD1rdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksUXQ9a3Quc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgU3Q9Yy5z''@;'; put 'put ''ZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksUXQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7dmFyIHJuPXVsZSgpO3JuLm1vdmVUbyhsLGEpLHJuLmxpbmVUbyhkLGgpLFN0LmF0dHIoImQiLHJuKSxkPWwrKG90LVQtMTApKmV0LGg9YSsob3Qt''@;'; put 'put ''VC0xMCkqeXQ7Zm9yKHZhciB2bj0wO3ZuPHdlLmxlbmd0aDt2bisrKXdlW3ZuXT13UWUoKE5uPXdlW3ZuXSlbMF0sTm5bMV0sZXQseXQpO2Zvcih2bj0wO3ZuPHdlLmxlbmd0aDt2bisrKXdlW3ZuXT1bZCsoTm49d2Vbdm5dKVswXSxoK05uWzFdXTt2YXIgY3I9W107Zm9yKHZuPTA7dm48d2Uu''@;'; put 'put ''bGVuZ3RoO3ZuKyspe3ZhciBObjtjci5wdXNoKChObj13ZVt2bl0pLmpvaW4oIiwiKSl9dmFyIERyPWNyLmpvaW4oIiAiKTtyZXR1cm4gUXQuYXR0cigicG9pbnRzIixEciksdGhpc31mdW5jdGlvbiBmbGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1v''@;'; put 'put ''dmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uIHBsZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6a3MobnVsbCl9ZnVuY3Rpb24gZ2xlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2Fd''@;'; put 'put ''JiYobCs9JyAiJythKyciPSInK2NbYV0rJyInKTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIitsKyJdfSIsInN2ZyIsImRvdCIpLF89KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBrcyhkb2N1''@;'; put 'put ''bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiBfLmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBtbGUoYyxsLGEsZCxoLGYpe3ZhciBUPVhnKHlsZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbVF0p''@;'; put 'put ''LF93LmNhbGwoYy5ub2RlKCksVCksdmxlKGMsbCxhLGgpLHRoaXN9ZnVuY3Rpb24gdmxlKGMsbCxhLGQsaCl7aWYoZC5VUkx8fGQudG9vbHRpcCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBm''@;'; put 'put ''PWM7dmFyIF89Zi5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT1fLnNpemUoKSl7dmFyIFc9Xy5ub2RlKCkuZ2V0QkJveCgpO1cuY3g9Vy54K1cud2lkdGgvMixXLmN5PVcueStX''@;'; put 'put ''LmhlaWdodC8yfWVsc2UgMCE9VC5zaXplKCkmJihXPXt4OitULmF0dHIoIngiKSx5OitULmF0dHIoInkiKSx3aWR0aDowLGhlaWdodDowLGN4OitULmF0dHIoIngiKSxjeTorVC5hdHRyKCJ5Iil9KTtyZXR1cm4gXy5lYWNoKGZ1bmN0aW9uKGllLGdlKXt2YXIgd2U9a3ModGhpcyk7aWYod2Uu''@;'; put 'put ''YXR0cigiY3giKSl3ZS5hdHRyKCJjeCIsYzQobCkpLmF0dHIoImN5IixjNChhKSk7ZWxzZSBpZih3ZS5hdHRyKCJwb2ludHMiKSl7dmFyIEVlPXdlLmF0dHIoInBvaW50cyIpLnRyaW0oKTt3ZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIFBKZShmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIg''@;'; put 'put ''IikpLm1hcChmdW5jdGlvbihfKXtyZXR1cm4gXy5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuW2M0KCtsKyArXy5zcGxpdCgiLCIpWzBdKSxjNCgrYSsgK18uc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uam9pbigi''@;'; put 'put ''LCIpfSkpLmpvaW4oIiAiKX0oRWUsbC1XLmN4LGEtVy5jeSkpfWVsc2V7dmFyIFplPXdlLmF0dHIoImQiKTt3ZS5hdHRyKCJkIixmdW5jdGlvbiBGSmUoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0''@;'; put 'put ''aW9uKF8pe3JldHVybiBfLnNwbGl0KCIsIil9KSxmLm1hcChmdW5jdGlvbihfKXtyZXR1cm5bYzQoK2wrICtfLnNwbGl0KCIsIilbMF0pLGM0KCthKyArXy5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24oXyl7cmV0dXJuIF8uam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5j''@;'; put 'put ''dGlvbihfLFQsVyl7cmV0dXJuIF8uY29uY2F0KFQsZltXXSl9LFtdKS5qb2luKCIiKX0oWmUsbC1XLmN4LGEtVy5jeSkpfX0pLDAhPVQuc2l6ZSgpJiZULmF0dHIoIngiLGM0KCtULmF0dHIoIngiKStsLVcuY3gpKS5hdHRyKCJ5IixjNCgrVC5hdHRyKCJ5IikrYS1XLmN5KSksdGhpc31mdW5j''@;'; put 'put ''dGlvbiBfbGUoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBibGUoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMu''@;'; put 'put ''X2RyYXduTm9kZS5nOmtzKG51bGwpfWZ1bmN0aW9uIHlsZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwi''@;'; put 'put ''c3ZnIiwiZG90IiksVD0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIGtzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFQuZG9jdW1lbnRFbGVtZW50fSkuc2Vs''@;'; put 'put ''ZWN0KCIubm9kZSIpfWZ1bmN0aW9uIE9UKGMpe3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVS''@;'; put 'put ''TCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToi''@;'; put 'put ''ZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2''@;'; put 'put ''ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0aW9uIERRZSgpe09UKHNlbGYpfWZ1bmN0aW9uIElRZSgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtPVChsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIGlaKGMsbCl7aWYodGhpcy5fb3B0''@;'; put 'put ''aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0bGUiLGZhZGU6ITAsdHdlZW5QYXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRn''@;'; put 'put ''ZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlz''@;'; put 'put ''KGwpKXRoaXMuX29wdGlvbnNbYV09bFthXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlvbnMudXNlV29ya2VyPWwpO3ZhciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihk''@;'; put 'put ''PSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1IiYmKGg9ITEpLGR8fGgpe3ZhciBfPU1VKCJzY3JpcHQiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdC93b3JrZXIiPT1rcyh0aGlzKS5hdHRyKCJ0eXBlIil8fGtzKHRoaXMpLmF0dHIoInNyYyIpJiZrcyh0aGlzKS5hdHRy''@;'; put 'put ''KCJzcmMiKS5tYXRjaCgvLipcL0BocGNjLWpzXC93YXNtLyl9KTswPT1fLnNpemUoKT8oY29uc29sZS53YXJuKCdObyBzY3JpcHQgdGFnIG9mIHR5cGUgImphdmFzY3JpcHQvd29ya2VyIiB3YXMgZm91bmQgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicp''@;'; put 'put ''LGQ9ITEsaD0hMSk6KHRoaXMuX3ZpelVSTD1fLmF0dHIoInNyYyIpLHRoaXMuX3ZpelVSTHx8KGNvbnNvbGUud2FybignTm8gInNyYyIgYXR0cmlidXRlIG9mIHdhcyBmb3VuZCBvbiB0aGUgImphdmFzY3JpcHQvd29ya2VyIiBzY3JpcHQgdGFnIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBO''@;'; put 'put ''b3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9ITEpKX1pZihoKXtjb25zdCBpZT0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2EoT1QudG9TdHJpbmcoKSsiKCIrSVFlLnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNo''@;'; put 'put ''YXJlZFdvcmtlcihpZSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNr''@;'; put 'put ''cz1bXX1lbHNlIGlmKGQpe3ZhciBUPW5ldyBCbG9iKFtPVC50b1N0cmluZygpKyIoIitEUWUudG9TdHJpbmcoKSsiKSgpIl0pLFc9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoVCk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoVyksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhp''@;'; put 'put ''cy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIERULmxvYWQoKS50aGVuKChpZT0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1pZS52ZXJzaW9uKCl9KS5iaW5kKHRoaXMpKTt0aGlz''@;'; put 'put ''Ll9zZWxlY3Rpb249Yyx0aGlzLl9hY3RpdmU9ITEsdGhpcy5fYnVzeT0hMSx0aGlzLl9qb2JzPVtdLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2tleU1vZGVzPW5ldyBTZXQoWyJ0aXRsZSIsImlkIiwidGFnLWluZGV4IiwiaW5kZXgiXSksdGhpcy5faW1hZ2VzPVtdLHRoaXMuX3RyYW5zbGF0aW9u''@;'; put 'put ''PXZvaWQgMCx0aGlzLl9zY2FsZT12b2lkIDAsdGhpcy5fZXZlbnRUeXBlcz1bImluaXRFbmQiLCJzdGFydCIsImxheW91dFN0YXJ0IiwibGF5b3V0RW5kIiwiZGF0YUV4dHJhY3RFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIiwiZGF0YVByb2Nlc3NQYXNzMkVuZCIsImRhdGFQcm9jZXNzRW5k''@;'; put 'put ''IiwicmVuZGVyU3RhcnQiLCJyZW5kZXJFbmQiLCJ0cmFuc2l0aW9uU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwicmVzdG9yZUVuZCIsImVuZCIsInpvb20iXSx0aGlzLl9kaXNwYXRjaD14VSguLi50aGlzLl9ldmVudFR5cGVzKSxISmUuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189''@;'; put 'put ''dGhpc31mdW5jdGlvbiBQVChjLGwpe3JldHVybiBrcyhjKS5ncmFwaHZpeihsKX11bGUucHJvdG90eXBlPXJaLnByb3RvdHlwZSxpWi5wcm90b3R5cGU9UFQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjppWixlbmdpbmU6ZnVuY3Rpb24gS0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2lu''@;'; put 'put ''ZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIFhKZShjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gSkplKGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVn''@;'; put 'put ''YWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gUUplKGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIGVRZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gdFFlKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYm''@;'; put 'put ''KHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBuUWUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIHJRZShjKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIGlRZShjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gc0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25z''@;'; put 'put ''Lnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3I/S2FlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxs''@;'; put 'put ''KSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gYUplKGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhh''@;'; put 'put ''dmlvcjpmdW5jdGlvbiB1SmUoKXtyZXR1cm4gdGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIGRKZSgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gbEplKGMpe3JldHVybiB0aGlzLl9vcHRp''@;'; put 'put ''b25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gY0plKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gdkplKGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1''@;'; put 'put ''ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT9oVChmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249VlUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSks''@;'; put 'put ''UWFlLmNhbGwodGhpcyxjKX0uYmluZCh0aGlzKSwwKTpRYWUuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gTkplKGMsbCxhLGQpe2lmKHRoaXMuX3dvcmtlcilKVS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OmMsZW5naW5lOmwsb3B0aW9uczphfSxmdW5jdGlvbihm''@;'; put 'put ''KXtkLmNhbGwodGhpcyxmLmRhdGEpfSk7ZWxzZSB0cnl7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKGMsInN2ZyIsbCxhKTtkLmNhbGwodGhpcyx7dHlwZToiZG9uZSIsc3ZnOmh9KX1jYXRjaChmKXtkLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmYubWVzc2FnZX0pfX0sZG90OmZ1bmN0''@;'; put 'put ''aW9uIFZKZShjLGwpe3ZhciBhPXRoaXMsaD10aGlzLl9vcHRpb25zLmVuZ2luZSxmPXRoaXMuX2ltYWdlcztyZXR1cm4gdGhpcy5fZGlzcGF0Y2guY2FsbCgic3RhcnQiLHRoaXMpLHRoaXMuX2J1c3k9ITAsdGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0U3RhcnQiLHRoaXMpLHRoaXMuX3dv''@;'; put 'put ''cmtlcnx8bnVsbCE9dGhpcy5sYXlvdXRTeW5jPyh0aGlzLmxheW91dChjLGgse2ltYWdlczpmfSxmdW5jdGlvbihUKXtzd2l0Y2goVC50eXBlKXtjYXNlImVycm9yIjppZighYS5fb25lcnJvcil0aHJvdyBULmVycm9yLm1lc3NhZ2U7YS5fb25lcnJvcihULmVycm9yKTticmVhaztjYXNlImRv''@;'; put 'put ''bmUiOkJKZS5jYWxsKHRoaXMsVC5zdmcsbCl9fSksdGhpcyk6KHRoaXMuX2FmdGVySW5pdD10aGlzLmRvdC5iaW5kKHRoaXMsYyxsKSx0aGlzKX0sZGF0YTpmdW5jdGlvbiBwSmUoKXtyZXR1cm4gdGhpcy5fZGF0YXx8bnVsbH0scmVuZGVyRG90OmZ1bmN0aW9uIGpKZShjLGwpe3ZhciBhPXRo''@;'; put 'put ''aXM7cmV0dXJuIHRoaXMuZG90KGMsZnVuY3Rpb24gZCgpe2EucmVuZGVyKGwpfSksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbiB6SmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLl90cmFuc2l0aW9uRmFjdG9yeT1jOnRoaXMuX3RyYW5zaXRpb249VlUoYyksdGhpc30s''@;'; put 'put ''YWN0aXZlOmZ1bmN0aW9uIFVKZShjKXt2YXIgYT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIFZYZShjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09''@;'; put 'put ''bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgTGgoW1tjXV0sTlhlLGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIFpKZShjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3Np''@;'; put 'put ''Z24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gWUplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIFdKZShjKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBHSmUoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gJEplKGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24g''@;'; put 'put ''cUplKGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gb1FlKGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBzUWUoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rp''@;'; put 'put ''b24gdlFlKGMpe3ZhciBsPURhdGUubm93KCksYT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChXPT5XLmxlbmd0aCkpO2ZvcihsZXQgVz0wO1c8ZC5sZW5ndGg7VysrKXtsZXQgaWU9ZFtXXTthW2llXT1bXTt2YXIgXyxULGY9dGhpczt0aGlzLm9uKGllKyIubG9n''@;'; put 'put ''IixjP2Z1bmN0aW9uKCl7dmFyIGdlPURhdGUubm93KCksd2U9YVtpZV0ubGVuZ3RoO2FbaWVdLnB1c2goZ2UpO3ZhciBFZT0iIjtpZihFZSs9IkV2ZW50ICIsRWUrPXdkKCIgPjIiKShXKSsiICIsRWUrPWllKyIgIi5yZXBlYXQoaC1pZS5sZW5ndGgpLEVlKz13ZCgiID41IikoZ2UtbCkrIiAi''@;'; put 'put ''LCJpbml0RW5kIiE9aWUmJihFZSs9d2QoIiA+NSIpKGdlLWEuc3RhcnRbd2VdKSksImRhdGFQcm9jZXNzRW5kIj09aWUmJihFZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK3dkKCIgPjUiKShnZS1hLmxheW91dEVuZFt3ZV0pKSwicmVuZGVyRW5kIj09aWUmJmYuX3RyYW5zaXRpb24m''@;'; put 'put ''JihFZSs9IiB0cmFuc2l0aW9uIHN0YXJ0IG1hcmdpbiAiK3dkKCIgPjUiKShmLl90cmFuc2l0aW9uLmRlbGF5KCktKGdlLWEucmVuZGVyU3RhcnRbd2VdKSksXz1mLl90cmFuc2l0aW9uLmRlbGF5KCksVD1mLl90cmFuc2l0aW9uLmR1cmF0aW9uKCkpLCJ0cmFuc2l0aW9uU3RhcnQiPT1pZSl7''@;'; put 'put ''dmFyIFplPWdlLWEucmVuZGVyU3RhcnRbd2VdO0VlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrd2QoIiA+NSIpKGdlLWEucmVuZGVyU3RhcnRbd2VdKSxFZSs9IiBleHBlY3RlZCAiK3dkKCIgPjUiKShfKSxFZSs9IiBkaWZmICIrd2QoIiA+NSIpKFplLV8pfWlmKCJ0cmFuc2l0aW9u''@;'; put 'put ''RW5kIj09aWUpe3ZhciBvdD1nZS1hLnRyYW5zaXRpb25TdGFydFt3ZV07RWUrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIit3ZCgiID41Iikob3QpLEVlKz0iIGV4cGVjdGVkICIrd2QoIiA+NSIpKFQpLEVlKz0iIGRpZmYgIit3ZCgiID41Iikob3QtVCl9Y29uc29sZS5sb2coRWUpLGw9''@;'; put 'put ''Z2V9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIF9RZSgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBDUWUoYyxs''@;'; put 'put ''LGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBfPWtzKG51bGwpO2Vsc2V7dmFyIGllPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0''@;'; put 'put ''RGF0YVByb3BhZ2F0aW9uKCJnIiksd2U9WGcoZ2xlLmNhbGwodGhpcyxoKSk7Xz1pZS5hcHBlbmQoImciKS5kYXRhKFt3ZV0pLF93LmNhbGwoXy5ub2RlKCksd2UpLGRsZS5jYWxsKHRoaXMsXyxjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17ZzpfLHgxOmMseTE6bCx4Mjph''@;'; put 'put ''LHkyOmQsYXR0cmlidXRlczpofSx0aGlzfSx1cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24gU1FlKGMsbCxhLGQsaD17fSxmPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIF89dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9''@;'; put 'put ''T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9Yyx0aGlzLl9kcmF3bkVkZ2UueTE9bCx0aGlzLl9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhXy5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVz''@;'; put 'put ''KCJpbnZpcyIpfHwoXz10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPV8pLF8uZW1wdHkoKXx8ZGxlLmNhbGwodGhpcyxfLGMsbCxh''@;'; put 'put ''LGQsaCxmKSx0aGlzfSxtb3ZlRHJhd25FZGdlRW5kUG9pbnQ6ZnVuY3Rpb24gTVFlKGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10''@;'; put 'put ''aGlzLl9kcmF3bkVkZ2UueTEsXz10aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25FZGdlLngyPWMsdGhpcy5fZHJhd25FZGdlLnkyPWwsaGxlKGQsaCxmLGMsbCxfLGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiB4UWUoYyl7aWYoIXRoaXMuX2Ry''@;'; put 'put ''YXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXduRWRnZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgXz10aGlzLl9zZWxlY3Rpb24u''@;'; put 'put ''c2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLFQ9Xy5kYXR1bSgpLFc9dGhpcy5fZXh0cmFjdERhdGEobCxULmNoaWxkcmVuLmxlbmd0aCxfLmRhdHVtKCkpO3JldHVybiBULmNoaWxkcmVuLnB1c2goVyksWVUobCxX''@;'; put 'put ''KSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlzfSxyZW1vdmVEcmF3bkVkZ2U6ZmxlLHJlbW92ZURyYXduRWRnZTpmbGUsZHJhd25FZGdlU2VsZWN0aW9uOnBsZSxkcmF3bkVkZ2VTZWxlY3Rpb246cGxlLGRyYXdOb2RlOmZ1bmN0aW9uIEVRZShjLGwsYSxkPXt9LGg9e30pe2lmKChkPU9iamVj''@;'; put 'put ''dC5hc3NpZ24oe30sZCkpLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBmPWtzKG51bGwpO2Vsc2V7dmFyIFc9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxnZT1Y''@;'; put 'put ''Zyh5bGUuY2FsbCh0aGlzLGEsZCkpO2Y9Vy5hcHBlbmQoImciKS5kYXRhKFtnZV0pLF93LmNhbGwoZi5ub2RlKCksZ2UpLG1sZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpfXJldHVybiB0aGlzLl9kcmF3bk5vZGU9e2c6Zixub2RlSWQ6YSx4OmMseTpsLGF0dHJpYnV0ZXM6ZH0sdGhpc30sdXBk''@;'; put 'put ''YXRlRHJhd25Ob2RlOmZ1bmN0aW9uIGtRZShjLGwsYSxkPXt9LGg9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZj10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5fZHJhd25Ob2RlLm5vZGVJ''@;'; put 'put ''ZCksZD1PYmplY3QuYXNzaWduKHRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzLGQpLHRoaXMuX2RyYXduTm9kZS5ub2RlSWQ9YSx0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsIWYuZW1wdHkoKXx8ZC5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KGY9''@;'; put 'put ''dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bk5vZGUuZz1mKSxmLmVtcHR5KCl8fG1sZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpLHRoaXN9LG1v''@;'; put 'put ''dmVEcmF3bk5vZGU6ZnVuY3Rpb24gQVFlKGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25Ob2RlLmcsaD10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25O''@;'; put 'put ''b2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLGQuZW1wdHkoKXx8dmxlKGQsYyxsLGgpLHRoaXN9LGluc2VydERyYXduTm9kZTpmdW5jdGlvbiBUUWUoYyl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO251bGw9PWMmJihjPXRoaXMu''@;'; put 'put ''X2RyYXduTm9kZS5ub2RlSWQpO3ZhciBsPXRoaXMuX2RyYXduTm9kZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpczt2YXIgYT10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztpZihsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKSxhLlVSTHx8YS50b29s''@;'; put 'put ''dGlwKXZhciBmPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxUPShmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksZi5zZWxlY3RXaXRob3V0RGF0''@;'; put 'put ''YVByb3BhZ2F0aW9uKCJ0ZXh0IikpO2Vsc2UgbC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLFQ9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7VC50ZXh0KGEubGFiZWx8fGMpO3ZhciBnZT10aGlzLl9z''@;'; put 'put ''ZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLHdlPWdlLmRhdHVtKCksRWU9dGhpcy5fZXh0cmFjdERhdGEobCx3ZS5jaGlsZHJlbi5sZW5ndGgsZ2UuZGF0dW0oKSk7cmV0dXJuIHdlLmNoaWxkcmVu''@;'; put 'put ''LnB1c2goRWUpLFlVKGwsRWUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTpfbGUscmVtb3ZlRHJhd25Ob2RlOl9sZSxkcmF3bk5vZGVTZWxlY3Rpb246YmxlLGRyYXduTm9kZVNlbGVjdGlvbjpibGUsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIF9KZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSxZZy5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gTFFlKGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLGhUKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhp''@;'; put 'put ''cyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IGlaKHRoaXMsYyksbH0sWWcucHJvdG90eXBlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb249ZnVuY3Rpb24gUlFlKGMpe3JldHVybiBrcyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciBPUWU9''@;'; put 'put ''Rig4ODcwMCk7ZnVuY3Rpb24gUFFlKGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjgpfWZ1bmN0aW9uIEZRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwyOSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGgubGli''@;'; put 'put ''cmFyaWVzU2VhcmNoPSIiLGp0KGgubGlicmFyeU9uRmlsdGVyKCkpfSkseWUoKX19ZnVuY3Rpb24gSFFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0IiwyNCwyNSkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcmllc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSx5ZSgpLFFlKDQsUFFlLDEsMCwiY2xyLWljb24iLDI2KSxRZSg1LEZRZSwxLDAsImNsci1pY29u''@;'; put 'put ''IiwyNykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBOUWUoYyxs''@;'; put 'put ''KXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gVlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDMpLGY9VmUoMikuJGltcGxpY2l0LF89VmUoKTtyZXR1cm4g''@;'; put 'put ''aC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSkseWUoKX19ZnVuY3Rpb24gQlFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjIpKDEsImRpdiIsMjMpKDIsImlucHV0Iiwz''@;'; put 'put ''NSwzNikseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS4kaW1wbGljaXQuc2VhcmNoU3RyaW5nPWgpfSkoImtleXVwIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVPbkZpbHRlciho''@;'; put 'put ''LCJ0YWJsZXMuVEFCTEVOQU1FIikpfSkseWUoKSxRZSg0LE5RZSwxLDAsImNsci1pY29uIiwyNiksUWUoNSxWUWUsMSwwLCJjbHItaWNvbiIsMjcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5n''@;'; put 'put ''KSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBqUWUoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwyOCl9ZnVuY3Rpb24gelFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWlj''@;'; put 'put ''b24iLDI5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSksVmUoKTtjb25zdCBoPSRpKDMpLGY9VmUoKS4kaW1wbGljaXQsXz1WZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixqdChfLnRyZWVPbkZpbHRlcihmLCJjb2x1bW5zLkNPTE5BTUUiKSl9KSx5ZSgpfX1m''@;'; put 'put ''dW5jdGlvbiBVUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwyMikoMSwiZGl2IiwyMykoMiwiaW5wdXQiLDM5LDM2KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LnNlYXJjaFN0cmlu''@;'; put 'put ''Zz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSkseWUoKSxRZSg0LGpRZSwxLDAsImNsci1pY29uIiwyNiksUWUoNSx6UWUsMSwwLCJjbHItaWNvbiIs''@;'; put 'put ''MjcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgpLiRpbXBsaWNpdDtDZSgyKSxSZSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIFpR''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQwKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgpLiRpbXBsaWNpdCxUPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS5jb2x1''@;'; put 'put ''bW5PbkNsaWNrKGYsVCxfKSl9KSxxdCgyLCJjbHItaWNvbiIsNDEpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSg0KTtDZSgxKSxkcigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxDZSgyKSxncigiICIsYS5DT0xOQU1F''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIFlRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IF89QnQoYSkuJGltcGxpY2l0LFQ9VmUoMikuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnRyZWVOb2RlQ2xpY2tl''@;'; put 'put ''ZChoLF8sVC50YWJsZXMpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIGp0KEJ0KGEpLiRpbXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDM3KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQsXz1WZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQ7cmV0dXJuIGp0KFZlKCkudGFibGVPbkNsaWNrKGYuVEFCTEVVUkksZixfKSl9KSxxdCgyLCJjbHItaWNvbiIsMzgpLE5lKDMpLHllKCksUWUoNCxVUWUsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxRZSg1LFpRZSw0LDMsImNsci10cmVlLW5vZGUiLDIpLHllKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLENlKDEpLFJlKCJpZCIsYS5UQUJMRVVSSSksQ2UoMiksZ3IoIiAiLGEuVEFCTEVOQU1F''@;'; put 'put ''LCIgIiksQ2UoMSksUmUoIm5nSWYiLGEuY29sdW1ucyksQ2UoMSksUmUoIm5nRm9yT2YiLGEuY29sdW1ucyl9fWZ1bmN0aW9uIFdRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDMxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKGgpe0J0KGEpO2NvbnN0IGY9''@;'; put 'put ''VmUoKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBqdChfLnRyZWVOb2RlQ2xpY2tlZChoLGYsXy5saWJyYXJ5TGlzdCkpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwzMikseHQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllJRCxqdChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxxdCgyLCJjbHItaWNvbiIsMzMpLE5lKDMpLHllKCksUWUoNCxCUWUsNiwzLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwxKSxRZSg1LFlRZSw2LDgsImNsci10cmVlLW5vZGUiLDM0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtkcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdU''@;'; put 'put ''YWJsZXMmJiFhLnRhYmxlcyksQ2UoMyksZ3IoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIEdRZShjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsV1FlLDYsNywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsMzApLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uICRRZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIHFRZShjLGwpezEmYyYmKG1lKDAsImRpdiIsNDQpLHF0KDEsImNsci1pY29uIiw0NSksbWUoMiwiaDMiLDQ2KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlIikseWUoKSgpKX1mdW5jdGlvbiBLUWUoYyxsKXtpZigxJmMmJihtZSgwLCJoMyIsNTUpLE5lKDEp''@;'; put 'put ''LHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxncigiICIsYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4/YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSsiLiIrYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW46YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBYUWUoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDUzKSxRZSgxLEtRZSwyLDEsImgzIiw1NCkseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVu''@;'; put 'put ''Y3Rpb24gSlFlKGMsbCl7aWYoMSZjJiYobWUoMCwic3BhbiIpLE5lKDEpLG1lKDIsImEiLDU2KSxOZSgzKSx5ZSgpLE5lKDQpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxncigiICIsYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMF0sIi4iKSxDZSgxKSxSZSgicm91dGVy''@;'; put 'put ''TGluayIsIi92aWV3L2RhdGEvIithLmxpbmVhZ2VUYWJsZU5hbWUpLENlKDEpLG9yKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxDZSgxKSxncigiIixhLmxpbmVhZ2VDb2x1bW5OYW1lLmxlbmd0aD4wPyIuIithLmxpbmVhZ2VDb2x1bW5OYW1lOiIiLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IFFRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZG93bmxvYWRQTkcoKSl9KSxOZSgxLCIgUE5HICIpLHllKCl9fWZ1bmN0aW9uIGVldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp''@;'; put 'put ''O21lKDAsImRpdiIsNjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNCkuZG93bmxvYWRDU1YoKSl9KSxOZSgxLCIgQ1NWICIpLHllKCl9fWZ1bmN0aW9uIHRldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSko''@;'; put 'put ''MSwiZGl2Iiw2NikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5kb3dubG9hZFNWRygpKX0pLE5lKDIsIlNWRyIpLHllKCksUWUoMyxRUWUsMiwwLCJkaXYiLDY3KSxtZSg0LCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0''@;'; put 'put ''KFZlKDMpLmRvd25sb2FkRG90KCkpfSksTmUoNSwiRG90IikseWUoKSxRZSg2LGVldCwyLDAsImRpdiIsNjcpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKDMpO0NlKDMpLFJlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KSxDZSgzKSxSZSgibmdJZiIsYS5mbGF0ZGF0YSl9''@;'; put 'put ''fWZ1bmN0aW9uIG5ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1jaGVja2JveC13cmFwcGVyIiw2OCkoMSwiaW5wdXQiLDY5KSx4dCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5nZW5lcmF0ZUdyYXBoKCkpfSkoIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS5yZWZyZXNoQ2FjaGU9aCl9KSx5ZSgpLG1lKDIsImxhYmVsIiksTmUoMywiUmVmcmVzaCBDYWNoZSIpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksUmUoIm5nTW9kZWwiLGEucmVmcmVzaENhY2hlKX19ZnVuY3Rp''@;'; put 'put ''b24gcmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw1NykoMSwiYnV0dG9uIiw1OCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5saW1pdERvdERlcHRoPSEwKX0pLE5lKDIsIiBMaW1pdCBkZXB0aCAiKSx5ZSgpLG1lKDMsImRpdiIs''@;'; put 'put ''NTkpKDQsImRpdiIsNjApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSExLGp0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xp''@;'; put 'put ''Y2soKSl9KSxxdCg1LCJpbnB1dCIsNjEpLG1lKDYsImxhYmVsIiksTmUoNywiQmFja3dhcmQiKSx5ZSgpKCksbWUoOCwiZGl2Iiw2MCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITAsanQoaC5yb3V0ZXIudXJsLmlu''@;'; put 'put ''Y2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLHF0KDksImlucHV0Iiw2MSksbWUoMTAsImxhYmVsIiksTmUoMTEsIkZvcndhcmQiKSx5ZSgpKCkoKSxtZSgxMiwiY2xyLWRyb3Bkb3duIiw2MikoMTMsImJ1dHRvbiIs''@;'; put 'put ''NjMpLE5lKDE0LCIgRG93bmxvYWQgIikscXQoMTUsImNsci1pY29uIiwxOSkseWUoKSxRZSgxNix0ZXQsNywyLCJjbHItZHJvcGRvd24tbWVudSIsMjApLHllKCksUWUoMTcsbmV0LDQsMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1''@;'; put 'put ''KSxSZSgiY2hlY2tlZCIsIWEuZm9yd2FyZExpbmVhZ2UpLENlKDQpLFJlKCJjaGVja2VkIixhLmZvcndhcmRMaW5lYWdlKSxDZSg0KSxSZSgiZGlzYWJsZWQiLCFhLmNvbHVtbiYmIWEudGFibGUpLENlKDQpLFJlKCJuZ0lmIixhLmNvbHVtbil9fWZ1bmN0aW9uIGlldChjLGwpezEmYyYmKG1l''@;'; put 'put ''KDAsInNwYW4iLDczKSxOZSgxLCIgTG9hZGluZy4uLiAiKSx5ZSgpKX1mdW5jdGlvbiBvZXQoYyxsKXsxJmMmJnF0KDAsInNwYW4iLDQzKX1mdW5jdGlvbiBzZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDc0KSgxLCJkaXYiLDc1KSxRZSgyLG9ldCwxLDAsInNwYW4iLDc2KSx5ZSgpLHF0''@;'; put 'put ''KDMsImRpdiIsNzcpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgyKSxSZSgibmdJZiIsYS5ncmFwaFJlbmRlcmluZyl9fWZ1bmN0aW9uIGFldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImRpdiIsNzApLFFlKDIsaWV0LDIsMCwic3BhbiIsNzEpLFFlKDMsc2V0LDQsMSwiZGl2''@;'; put 'put ''Iiw3MikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7ZHIoIm10LTIiLGEudGFibGVGbGFnKSxDZSgyKSxSZSgibmdJZiIsYS5ncmFwaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBjZXQoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLFhRZSwy''@;'; put 'put ''LDEsImRpdiIsNDcpLG1lKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxRZSg1LEpRZSw1LDQsInNwYW4iLDcpLHllKCksUWUoNixyZXQsMTgsNCwiZGl2Iiw1MSkseWUoKSxRZSg3LGFldCw0LDQsImRpdiIsNTIpLHllKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCk7''@;'; put 'put ''Q2UoMSksUmUoIm5nSWYiLCFhLmdyYXBoQ29udGFpbmVyKSxDZSg0KSxSZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxDZSgxKSxSZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lciksQ2UoMSksUmUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpfX1mdW5jdGlvbiB1ZXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLE5lKDEsIiBQTkcgIikseWUoKX19ZnVuY3Rpb24gZGV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZu''@;'; put 'put ''KCk7bWUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksTmUoMiwiU1ZHIikseWUoKSxRZSgzLHVldCwyLDAsImRpdiIsNjcpLG1lKDQsImRpdiIs''@;'; put 'put ''NjYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCk7cmV0dXJuIGguZG93bmxvYWREb3QoKSxqdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTmUoNSwiIERvdCAiKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoIm5nSWYiLCFhLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuaXNNaWNyb3NvZnQpfX1jb25zdCBoZXQ9RigxNjY3Nik7bGV0IEZUPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfLFQsVyxpZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMu''@;'; put 'put ''bG9jYXRpb249Xyx0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMubG9nZ2VyU2VydmljZT1XLHRoaXMuaGVscGVyU2VydmljZT1pZSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5mb3J3YXJkTGluZWFnZT0hMSx0aGlzLmZsYXRkYXRhPVtdLHRoaXMuZ3JhcGhMb2Fk''@;'; put 'put ''aW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5ncmFwaENvbnRhaW5lcj0hMSx0aGlzLnZpeklucHV0PSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLnRhYmxlQ29sdW1uc1JlZj0i''@;'; put 'put ''Iix0aGlzLmxpbmVhZ2VUYWJsZU5hbWU9IiIsdGhpcy5saW5lYWdlQ29sdW1uTmFtZT0iIix0aGlzLmxpYj1udWxsLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMucmVmcmVzaENhY2hlPSExLHRoaXMuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9IiIsdGhpcy5jdXJyZW50TGluZWFnZVBh''@;'; put 'put ''dGhDb2x1bW49IiIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMubGFyZ2VEb3RGaWxlTGltaXQ9MWUzLHRoaXMubGltaXREb3REZXB0aD0hMSx0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMuZGVib3VuY2VUaW1lPTIwMH1zaG93VGFibGVTZWxlY3QoKXt0aGlz''@;'; put 'put ''LnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9dGFibGVPbkNsaWNrKGEsZCxoLGY9ITEpe3ZhciBfPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2QuY29sdW1ucz8oZC5leHBhbmRlZD0hZC5leHBhbmRlZCwhMD09PWQuZXhwYW5kZWQmJihfLnRhYmxlPWEsZnx8Xy5vbkdlbmVyYXRlR3Jh''@;'; put 'put ''cGhUYWJsZUNsaWNrKCkpKTooZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmxvYWRpbmdDb2x1bW5zPSEwLF8udGFibGU9YSxfLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPWQuTElCTkFNRSsiLiIrZC5UQUJMRU5BTUUseWllbGQgXy5zZWxlY3RUYWJsZShhLGQpLGZ8fF8ub25HZW5lcmF0''@;'; put 'put ''ZUdyYXBoVGFibGVDbGljaygpKSxfLmNvbGxhcHNlVHJlZUl0ZW1zKGgudGFibGVzLGQpfSkoKX1zZWxlY3RUYWJsZShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWll''@;'; put 'put ''bGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4oXz0+e2guY29sdW1uc0xpc3Q9Xy5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxv''@;'; put 'put ''YWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKF89Pl8pLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJy''@;'; put 'put ''YXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9''@;'; put 'put ''PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVz''@;'; put 'put ''PSEwLHlpZWxkIGguc2VsZWN0TGlicmFyeShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxpc3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17''@;'; put 'put ''U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbihfPT57aC50YWJsZXNMaXN0PV8ubWV0YXRhYmxlcyxoLnRhYmxlc0xpc3QmJmgudGFibGVzTGlzdC5sZW5ndGg+MCYmKGQudGFibGVz''@;'; put 'put ''PWgudGFibGVzTGlzdCxkLmV4cGFuZGVkPSEwKSxoLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKF89Pl8pLGQubG9hZGluZ1RhYmxlcz0hMX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJSQVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09M''@;'; put 'put ''VVJJLHRoaXMuc2V0R2xvYmFsRGF0YSgpLHRoaXMub25HZW5lcmF0ZUNsaWNrKCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJy''@;'; put 'put ''YXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMuY29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNv''@;'; put 'put ''bHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1zZXRHbG9iYWxEYXRhKCl7R24ubGluZWFnZS5saWJyYXJ5TGlzdD10aGlzLmxpYnJhcnlMaXN0LEduLmxpbmVhZ2UudGFibGVzTGlzdD10aGlzLnRhYmxlc0xpc3QsR24ubGluZWFnZS5jb2x1bW5z''@;'; put 'put ''TGlzdD10aGlzLmNvbHVtbnNMaXN0LEduLmxpbmVhZ2UubGliPXRoaXMubGliLEduLmxpbmVhZ2UudGFibGU9dGhpcy50YWJsZSxHbi5saW5lYWdlLmNvbHVtbj10aGlzLmNvbHVtbn1sb2FkR2xvYmFsRGF0YSgpe3RoaXMubGlicmFyeUxpc3Q9R24ubGluZWFnZS5saWJyYXJ5TGlzdCx0aGlz''@;'; put 'put ''LnRhYmxlc0xpc3Q9R24ubGluZWFnZS50YWJsZXNMaXN0LHRoaXMuY29sdW1uc0xpc3Q9R24ubGluZWFnZS5jb2x1bW5zTGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaD1Hbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaH1yZXN1Ym1pdFdpdGhNYXhEZXB0aChhKXtsZXQgZDt0aGlzLmNhbmNlbFJl''@;'; put 'put ''bmRlcmluZ0dyYXBoKCksYSYmKGQ9e21heF9kZXB0aDphfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczpkfSl9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9saW5lYWdlIjtsZXQgYT10aGlzLnJv''@;'; put 'put ''dXRlLnNuYXBzaG90LnBhcmFtcy5yZWxvYWQ7aWYodm9pZCAwIT09YSl7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsOyJyZWxvYWQiPT09YT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZmlyc3RMb2FkIik/KGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJmaXJzdExvYWQiKSx0aGlzLmxvY2F0aW9uLnJl''@;'; put 'put ''cGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSkpOihsb2NhbFN0b3JhZ2UuZmlyc3RMb2FkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDJlMykpOnRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxh''@;'; put 'put ''c3RJbmRleE9mKCIvIikpKX10aGlzLmluaXREYXRhKCl9aW5pdERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoR24ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbihfPT57YS5saWJyYXJ5TGlzdD1fLnNhc2xpYnMsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGli''@;'; put 'put ''PWEubGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxhLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKF89Pl8pLGEucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKF89PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZShfPT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9''@;'; put 'put ''KSgpfW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRp''@;'; put 'put ''cmVjdGlvbixoPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsZj10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEs''@;'; put 'put ''ZCxmKSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikmJmgmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250''@;'; put 'put ''ZW50SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVt''@;'; put 'put ''bi5pbmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIitkKyIvIithKX1vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIp''@;'; put 'put ''P3RoaXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrZCsiLyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2xldCBfPXtTQVND''@;'; put 'put ''b250cm9sVGFibGU6W3t0YWJsZV9pZDphLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKX1dfTtyZXR1cm4idW5kZWZpbmVkIj09PV8uU0FTQ29udHJvbFRhYmxlWzBdLnRhYmxlX2lkJiZmLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwo''@;'; put 'put ''KSIsInRhYmxlX2lkIGlzIHVuZGVmaW5lZC4iLHZvaWQgMCwiRnJvbnRlbmQgZXJyb3IiKSxoJiYoXy5TQVNDb250cm9sVGFibGVbMF0ubWF4X2RlcHRoPWgpLGYudGFibGVGbGFnPSExLGYuc3dpdGNoRmxhZz0hMCxmLmdyYXBoQ29udGFpbmVyPSEwLGYuZ3JhcGhMb2FkaW5nPSEwLGYudml6''@;'; put 'put ''SW5wdXQ9IiIsbmV3IFByb21pc2UoKFQsVyk9PntmLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9mZXRjaHRhYmxlbGluZWFnZSIsXykudGhlbihmdW5jdGlvbigpe3ZhciBpZT1maShmdW5jdGlvbiooZ2Upe2lmKGdlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNo''@;'; put 'put ''ZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qg''@;'; put 'put ''c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZ2UpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVh''@;'; put 'put ''Z2VUYWJsZU5hbWU9Z2UuaW5mb1swXS5MSUJSRUYrIi4iK2dlLmluZm9bMF0uVEFCTEVOQU1FO2xldCB3ZT1nZS5maW5hbGZpbmFsLEVlPSIiO2ZvcihsZXQgWmU9MDtaZTx3ZS5sZW5ndGg7WmUrKylFZSs9dW5lc2NhcGUod2VbWmVdLkxJTkUpKyJcbiI7aWYoZi5mbGF0ZGF0YT1nZS5mbGF0''@;'; put 'put ''ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgWmU9Zi5saWJyYXJ5TGlzdC5maW5kKG90PT5nZS5pbmZvWzBdLkxJQlVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKG90LkxJQlJBUllJRC50b1VwcGVyQ2FzZSgpKSk7aWYoWmUpe2xldCBvdDtpZih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFplLkxJ''@;'; put 'put ''QlJBUllJRCxaZSksWmUudGFibGVzJiYob3Q9WmUudGFibGVzLmZpbmQoZXQ9PmV0LlRBQkxFVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoZ2UuaW5mb1swXS5UQUJMRUlELnRvVXBwZXJDYXNlKCkpKSxvdCkpe2lmKGYudGFibGU9b3QuVEFCTEVVUkksZi50YWJsZSl7Y29uc3QgZXQ9Zi50''@;'; put 'put ''YWJsZS5yZXBsYWNlKCJcXCIsIlxcXFwiKTtzZXRUaW1lb3V0KCgpPT57bGV0IHl0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHtldH0nXWApO3l0JiZ5dC5zY3JvbGxJbnRvVmlldygpfSwxZTMpfWYudGFibGVPbkNsaWNrKG90LlRBQkxFVVJJLG90LFplLHZvaWQgMCE9PWQpfVpl''@;'; put 'put ''JiYoWmUuZXhwYW5kZWQ9ITApLG90JiYob3QuZXhwYW5kZWQ9ITApfX1mLnZpeklucHV0PUVlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmlk''@;'; put 'put ''bG9va3VwPWdlLmlkbG9va3VwLGdlLmZpbmFsZmluYWwubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1nZS5maW5hbGZpbmFsLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxUKCl9KTtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBpZS5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9fSgpKS5jYXRjaChpZT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVz''@;'; put 'put ''PW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRjaCh0aGlzLnBlbmRpbmdSZW5kZXJEb3du''@;'; put 'put ''bG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFw''@;'; put 'put ''aCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5j''@;'; put 'put ''b250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgVCxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUiKS5pbm5lckhUTUwsXz1hLmZpbmQoVz0+''@;'; put 'put ''Vy5NRVRBSUQ9PT1mKTtfJiYoVD0iVEFCTEUiPT09Xy5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK18uTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK18uTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixXPT57''@;'; put 'put ''dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChUKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IF89e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVm''@;'; put 'put ''cmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT1fLlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBl''@;'; put 'put ''cnJvciIpLGgmJihfLlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoVCxXKT0+e2Yuc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsXykudGhlbihmdW5jdGlvbigpe3ZhciBpZT1maShmdW5jdGlvbiooZ2Upe2lmKGdlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFnZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZv''@;'; put 'put ''TW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdh''@;'; put 'put ''dGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZ2UpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FTIEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9Z2UuaW5mb1swXS5MSUJSRUYrIi4iK2dlLmluZm9bMF0uVEFC''@;'; put 'put ''TkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPWdlLmluZm9bMF0uQ09MTkFNRSxmLmlkbG9va3VwPWdlLmlkbG9va3VwO2xldCB3ZT1nZS5mcm9tc2FzLEVlPSIiO2ZvcihsZXQgWmU9MDtaZTx3ZS5sZW5ndGg7WmUrKylFZSs9dW5lc2NhcGUod2VbWmVdLlNUUklORykrIlxuIjtpZihmLnZpeklu''@;'; put 'put ''cHV0PUVlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPWdlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBvdCxaZT1mLmxp''@;'; put 'put ''YnJhcnlMaXN0LmZpbmQoZXQ9PmdlLmluZm9bMF0/LkxJQlVSST8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoZXQ/LkxJQlJBUllJRD8udG9VcHBlckNhc2UoKSkpO1plJiYoeWllbGQgZi5saWJyYXJ5T25DbGljayhaZS5MSUJSQVJZSUQsWmUpLFplLnRhYmxlcyYmKG90PVplLnRhYmxlcy5m''@;'; put 'put ''aW5kKGV0PT5ldC5UQUJMRVVSST09PWdlLmluZm9bMF0uVEFCVVJJKSxvdCYmZi50YWJsZU9uQ2xpY2sob3QuVEFCTEVVUkksb3QsWmUsITApLnRoZW4oKCk9PntsZXQgZXQ9b3QuVEFCTEVVUkk7aWYoZXQpe2NvbnN0IHl0PWV0LnJlcGxhY2UoIlxcIiwiXFxcXCIpO2xldCBrdD1kb2N1bWVu''@;'; put 'put ''dC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7eXR9J11gKTtzZXRUaW1lb3V0KCgpPT57a3QmJihmLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLFplKSxrdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksWmUmJihaZS5leHBhbmRlZD0hMCksb3QmJihvdC5leHBhbmRlZD0h''@;'; put 'put ''MCkpfWdlLmZyb21zYXMubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1nZS5mcm9tc2FzLmxlbmd0aDpmLmJ1aWxkR3JhcGgoKSxUKCl9KTtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBpZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChp''@;'; put 'put ''ZT0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyLGg9bmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJp''@;'; put 'put ''bWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWdldFNWR0Jsb2IoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVyO3JldHVybiBuZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6''@;'; put 'put ''ImltYWdlL3N2Zyt4bWwifSl9ZG93bmxvYWRTVkcoKXtpZihQVCgiI2dyYXBoIikucmVzZXRab29tKCksbmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXRTVkdCbG9iKCksdGhpcy5jb25z''@;'; put 'put ''dHJ1Y3ROYW1lKCJzdmciKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50''@;'; put 'put ''LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7UFQoIiNncmFwaCIpLnJlc2V0Wm9vbSgpLE9RZS5zYXZlU3ZnQXNQbmcoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgi''@;'; put 'put ''cG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0oZ2Usd2UpPT5udWxsPT09d2U/IiI6d2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChnZT0+aC5tYXAod2U9PkpTT04uc3RyaW5naWZ5KGdlW3dlXSxkKSkuam9pbigiLCIpKTtmLnVu''@;'; put 'put ''c2hpZnQoaC5qb2luKCIsIikpO2xldCBfPWYuam9pbigiXHJcbiIpO3ZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxXPW5ldyBCbG9iKFtfXSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5k''@;'; put 'put ''b3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoVyx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBpZT13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChXKTtULmhyZWY9aWUsVC5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLFQuY2xpY2soKSx3aW5kb3cuVVJMLnJl''@;'; put 'put ''dm9rZU9iamVjdFVSTChpZSksVC5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlz''@;'; put 'put ''LnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgi''@;'; put 'put ''dHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92''@;'; put 'put ''ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''PntQVCgiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRo''@;'; put 'put ''aXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsXz1oZXQoKS5mb3JtYXQoIllZTU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5''@;'; put 'put ''TGlzdC5sZW5ndGgpe2xldCBUPXRoaXMubGlicmFyeUxpc3QuZmluZChXPT5XLkxJQlJBUllJRD09dGhpcy5saWIpO1QmJihkPWBfJHtULkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IFQ9dGhpcy50YWJsZXNMaXN0LmZpbmQo''@;'; put 'put ''Vz0+Vy5UQUJMRVVSST09dGhpcy50YWJsZSk7VCYmKGg9YF8ke1QuVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgVD10aGlzLmNvbHVtbnNMaXN0LmZpbmQoVz0+Vy5DT0xVUkk9PXRoaXMuY29sdW1uKTtUJiYoZj1gXyR7VC5D''@;'; put 'put ''T0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke199LiR7YX1gfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQob2EpLHR0KFdsKSx0dChEcyksdHQoSmQpLHR0KHZsKSx0dCh3MCksdHQo''@;'; put 'put ''QWMpKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEsY29uc3RzOltbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwi''@;'; put 'put ''bmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRl''@;'; put 'put ''ciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwiY2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWyJtYXhEZXB0aERvdCIsIiJdLFsxLCJtYi0yMCJdLFsxLCJiaWdsaW5lYWdlLXJvdyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwibXQtMy1uZWdhdGl2ZSIsMywiZGlzYWJsZWQiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWyJtYXhEZXB0aCIs''@;'; put 'put ''IiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJz''@;'; put 'put ''ZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIs''@;'; put 'put ''ImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1z''@;'; put 'put ''ZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBs''@;'; put 'put ''ZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImlkIiwiY2xpY2siXSxbInNoYXBlIiwidGFibGUiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1''@;'; put 'put ''bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bp''@;'; put 'put ''bm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIg''@;'; put 'put ''ZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJmb3JtLWJsb2NrIiwic3ciLCJwb3NpdGlvbi1yZWxhdGl2ZSIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJsaW5hZ2UtdGl0bGUtd3JhcHBl''@;'; put 'put ''ciIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciIsImZvbnQtd2VpZ2h0LWJvbGQiLCJwb3NpdGlvbi1hYnNvbHV0ZSJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIiw0LCJuZ0lmIl0sWzMsIm10LTIiLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgcGItMTAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJwYi0xMCJdLFszLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1jb2wtbWQt''@;'; put 'put ''MTIiLCJ0ZXh0LWNlbnRlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1lbmQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJh''@;'; put 'put ''ZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94''@;'; put 'put ''IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJuZ01vZGVsIiwiY2hhbmdlIiwibmdNb2RlbENoYW5nZSJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0s''@;'; put 'put ''WzEsInNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPVZuKCk7''@;'; put 'put ''bWUoMCwiYXBwLXNpZGViYXIiLDApLHh0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiBkLmxvYWRNb3JlTGlicmFyaWVzKCl9KSxtZSgxLCJjbHItdHJlZSIpLFFlKDIsSFFlLDYsMywiY2xyLXRyZWUtbm9kZSIsMSksUWUoMyxHUWUsMiwxLCJuZy1jb250YWluZXIiLDIp''@;'; put 'put ''LHllKCksUWUoNCwkUWUsMywwLCJkaXYiLDMpLHllKCksbWUoNSwiZGl2Iiw0KSg2LCJkaXYiLDUpLFFlKDcscVFlLDQsMCwiZGl2Iiw2KSxRZSg4LGNldCw4LDQsIm5nLWNvbnRhaW5lciIsNykseWUoKSgpLG1lKDksImNsci1tb2RhbCIsOCkoMTAsImgzIiw5KSxOZSgxMSwiTGltaXQgRGVw''@;'; put 'put ''dGgiKSx5ZSgpLG1lKDEyLCJkaXYiLDEwKSgxMywicCIpLE5lKDE0LCJFbnRlciB0aGUgZGVwdGggbnVtYmVyIHlvdSB3b3VsZCBsaWtlIHRvIGxpbWl0IERPVCByZW5kZXJpbmcgdG86IikseWUoKSgpLG1lKDE1LCJkaXYiLDExKSgxNiwiZGl2IiwxMikscXQoMTcsImlucHV0IiwxMywxNCks''@;'; put 'put ''eWUoKSxtZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxNSksTmUoMjAsIlRvIHJlbmRlciB3aXRoIHVubGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IikseWUoKSxtZSgyMSwiZGl2IiwxNikoMjIsImJ1dHRvbiIsMTcpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''ZC5saW1pdERvdERlcHRoPSExfSksTmUoMjMsIiBDYW5jZWwgIikseWUoKSxtZSgyNCwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2NvbnN0IF89JGkoMTgpO3JldHVybiBkLnJlc3VibWl0V2l0aE1heERlcHRoKF8udmFsdWUpLGp0KGQubGltaXREb3REZXB0aD0h''@;'; put 'put ''MSl9KSxOZSgyNSwiIFJlc3VibWl0ICIpLHllKCkoKSgpKCksbWUoMjYsImNsci1tb2RhbCIsOCkoMjcsImgzIiw5KSxOZSgyOCwiV2FybmluZyIpLHllKCksbWUoMjksImRpdiIsMTApKDMwLCJwIiksTmUoMzEpLHllKCkoKSxtZSgzMiwiZGl2IiwxMSkoMzMsImRpdiIsMTYpKDM0LCJwIiks''@;'; put 'put ''TmUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUpIikseWUoKSxtZSgzNiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX0pLE5lKDM3LCIgUmVuZGVyICIpLHllKCkoKSxtZSgzOCwi''@;'; put 'put ''ZGl2IiwxNikoMzksInAiKSxOZSg0MCwiRG93bmxvYWQgdGhlIHJlc3VsdCAoUE5HICYgU1ZHIHJlcXVpcmUgcmVuZGVyaW5nKSIpLHllKCksbWUoNDEsImNsci1kcm9wZG93biIpKDQyLCJidXR0b24iLDE4KSxOZSg0MywiIERvd25sb2FkICIpLHF0KDQ0LCJjbHItaWNvbiIsMTkpLHllKCks''@;'; put 'put ''UWUoNDUsZGV0LDYsMSwiY2xyLWRyb3Bkb3duLW1lbnUiLDIwKSx5ZSgpKCksbWUoNDYsImRpdiIsMTYpKDQ3LCJwIiksTmUoNDgsIlJlc3VibWl0IHdpdGggYSBtYXgtZGVwdGggKHNwZWNpZnkgZGVwdGgpIikseWUoKSxxdCg0OSwiaW5wdXQiLDEzLDIxKSxtZSg1MSwiYnV0dG9uIiwxNyks''@;'; put 'put ''eHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGgpO2NvbnN0IF89JGkoNTApO3JldHVybiBqdChkLnJlc3VibWl0V2l0aE1heERlcHRoKF8udmFsdWUpKX0pLE5lKDUyLCIgUmVzdWJtaXQgIikseWUoKSgpLG1lKDUzLCJkaXYiLDE2KSg1NCwicCIpLE5lKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNz''@;'; put 'put ''aW9uIikseWUoKSxtZSg1NiwiYnV0dG9uIiwxNykseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCl9KSxOZSg1NywiIENhbmNlbCAiKSx5ZSgpKCkoKSgpfTImYSYmKENlKDIpLFJlKCJuZ0lmIixkLmxpYnJhcnlMaXN0KSxDZSgxKSxSZSgibmdG''@;'; put 'put ''b3JPZiIsZC5saWJyYXJ5TGlzdCksQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyaWVzUGFnaW5nKSxDZSgzKSxSZSgibmdJZiIsIWQuY29sdW1uJiYhZC50YWJsZSksQ2UoMSksUmUoIm5nSWYiLGQuY29sdW1ufHxkLnRhYmxlKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLmxpbWl0RG90RGVw''@;'; put 'put ''dGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksQ2UoMTcpLFJlKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1kLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDUpLGdyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixkLmxhcmdlRG90RmlsZUxpbmVzLCIg''@;'; put 'put ''bGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLENlKDExKSxSZSgiZGlzYWJsZWQiLCFkLmNvbHVtbiYmIWQudGFibGUpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxCdSxXYSxTMCxCcyxPcyxkZCxnMSxEcCxrYSxv''@;'; put 'put ''dSxzdSxadSxjMixVcyxIRixEMCxUMCxmMSxOZixhZyxsZyxLOCxuM10sc3R5bGVzOlsiLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVm''@;'; put 'put ''b3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0jZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2hlaWdo''@;'; put 'put ''dDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH0uc2VsZWN0aW9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRo''@;'; put 'put ''OjEwMCU7bWF4LXdpZHRoOjY3MHB4fS5jb2x1bW4tYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNkOGUzZTk7Y29sb3I6IzAwMH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAxMjBweCl9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZFtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17cGFk''@;'; put 'put ''ZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmdyYXBoLXJlbmRlci1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTBweH0uYmlnbGluZWFnZS1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7bWFyZ2luLWJvdHRvbToyMHB4fS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmxpbmVhZ2UtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bGVmdDoxMnB4fS5tYXgtZGVwdGgtaW5wdXRbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVde3dpZHRoOjEwMCV9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsudG9nZ2xlLXN3aXRjaC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MjBweH19Il19KSxjfSkoKTtmdW5jdGlvbiBmZXQoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRpb24iLDEx''@;'; put 'put ''KSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGMoInZhbHVlIixhKSxDZSgxKSxncigiICIsYSwiICIpfX1mdW5jdGlvbiBwZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxOCl9ZnVuY3Rpb24gZ2V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xy''@;'; put 'put ''LWljb24iLDE5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5tZXRhRGF0YVNlYXJjaD0iIixqdChoLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBtZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwxMikoMSwiZGl2IiwxMykoMiwiaW5wdXQiLDE0LDE1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubWV0YURhdGFTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubWV0YUxpc3RPbkZp''@;'; put 'put ''bHRlcigpKX0pLHllKCksUWUoNCxwZXQsMSwwLCJjbHItaWNvbiIsMTYpLFFlKDUsZ2V0LDEsMCwiY2xyLWljb24iLDE3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFs''@;'; put 'put ''dWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxf''@;'; put 'put ''PVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLm1ldGFEYXRhTGlzdCkpfSkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS4kaW1wbGljaXQuZXhwYW5kZWQ9aCl9KSxtZSgxLCJwIiwyMikseHQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQsZj1WZSgpO3JldHVybiBmLm1ldGFEYXRhSWQ9aC5JRCxqdChmLm1ldGFEYXRhT25DbGljayhmLm1ldGFEYXRhSWQsaCkpfSkscXQoMiwiY2xyLWljb24iLDIzKSxOZSgzKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxp''@;'; put 'put ''Y2l0O1JlKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5JRCwiICIpfX1mdW5jdGlvbiBfZXQoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLHZldCw0LDMsImNsci10cmVlLW5vZGUiLDIwKSxV''@;'; put 'put ''cigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGJldChjLGwpezEmYyYmKG1lKDAsImRpdiIsMjQpLHF0KDEsImNsci1pY29uIiwyNSksbWUoMiwiaDMiLDI2KSxOZSgzLCJQbGVhc2Ugc2VsZWN0IGEgdHlwZSIpLHllKCko''@;'; put 'put ''KSl9ZnVuY3Rpb24geWV0KGMsbCl7MSZjJiYobWUoMCwiaDQiKSxOZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIikseWUoKSl9ZnVuY3Rpb24gd2V0KGMsbCl7MSZjJiYobWUoMCwiaDQiKSxOZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSx5ZSgpKX1mdW5jdGlvbiBDZXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihtZSgwLCJkaXYiKSxRZSgxLHlldCwyLDAsImg0IiwyOSksUWUoMix3ZXQsMiwwLCJoNCIsMjkpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxSZSgibmdJZiIsYS5tZXRhdHlwZXNMb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsIWEubWV0YXR5cGVzTG9hZGluZyl9''@;'; put 'put ''fWZ1bmN0aW9uIE1ldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMjcpKDEsInNwYW4iLDI4KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLFFlKDMsQ2V0LDMsMiwiZGl2IiwyOSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoMyksUmUoIm5nSWYiLGEubG9hZGluZyl9fWZ1bmN0aW9u''@;'; put 'put ''IHhldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImRpdiIsMzYpKDEsImlucHV0IiwzNywzOCkseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgyKS5tZXRhT2JqZWN0U2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBC''@;'; put 'put ''dChhKSxqdChWZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gpfX1mdW5jdGlvbiBFZXQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw0Mil9ZnVuY3Rpb24ga2V0KGMs''@;'; put 'put ''bCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMjMpfWZ1bmN0aW9uIEFldChjLGwpe2lmKDEmYyYmKG1lKDAsInAiLDUzKSxOZSgxKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMSksZ3IoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIFRldChjLGwpe2lmKDEmYyYmKG1lKDAs''@;'; put 'put ''ImNsci10cmVlLW5vZGUiLDQ4KSgxLCJkaXYiLDQ5KSxRZSgyLEVldCwxLDAsImNsci1pY29uIiw1MCksUWUoMyxrZXQsMSwwLCJjbHItaWNvbiIsNTEpLE5lKDQpLFFlKDUsQWV0LDIsMSwicCIsNTIpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJjbHJFeHBhbmRhYmxl''@;'; put 'put ''IiwhMCksQ2UoMSksZHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxDZSgxKSxSZSgibmdJZiIsIWEuY291bnQpLENlKDEpLFJlKCJuZ0lmIixhLmNvdW50KSxDZSgxKSxncigiICIsYS5kaXNwbGF5LCIgIiksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gRGV0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUiLDQ2KSxRZSgxLFRldCw2LDcsImNsci10cmVlLW5vZGUiLDQ3KSxiYSgyLCJhc3luYyIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg2KTtSZSgiY2xyTGF6eSIsITApLENlKDEpLFJlKCJjbHJSZWN1cnNpdmVGb3JPZiIsVWwoMiwzLGEucm9vdCQpKSgi''@;'; put 'put ''Y2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBJZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiKSxRZSgxLERldCwzLDUsImNsci10cmVlIiw0NSkseWUoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDEpLFJlKCJu''@;'; put 'put ''Z0lmIixhLnNob3dBY2MpfX1mdW5jdGlvbiBMZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSkseHQoImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZl''@;'; put 'put ''KDMpO3JldHVybiBqdChoP18ucGFuZWxDaGFuZ2UoaCxmKToiIil9KSxtZSgxLCJjbHItYWNjb3JkaW9uLXRpdGxlIikscXQoMiwiY2xyLWljb24iLDQyKSxOZSgzKSxtZSg0LCJwIiw0MyksTmUoNSkseWUoKSgpLFFlKDYsSWV0LDIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0NCkseWUo''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQ7Q2UoMyksZ3IoIiAiLGEuTkFNRSwiICIpLENlKDIpLG9yKGEuSUQpfX1mdW5jdGlvbiBSZXQoYyxsKXtpZigxJmMmJihCcigwKSxRZSgxLExldCw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiLDQwKSxVcigpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIE9ldChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMzkpKDEsImNsci1hY2NvcmRpb24iKSxRZSgyLFJldCwyLDEsIm5nLWNvbnRhaW5lciIsNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMiks''@;'; put 'put ''UmUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gUGV0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsNDIpfWZ1bmN0aW9uIEZldChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDIzKX1mdW5jdGlvbiBIZXQoYyxsKXtpZigxJmMmJihtZSgwLCJwIiw1MyksTmUo''@;'; put 'put ''MSkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLGdyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBOZXQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdHJlZS1ub2RlIiw0OCkoMSwiZGl2Iiw0OSksUWUoMixQZXQsMSwwLCJjbHItaWNvbiIsNTApLFFlKDMsRmV0LDEs''@;'; put 'put ''MCwiY2xyLWljb24iLDUxKSxOZSg0KSxRZSg1LEhldCwyLDEsInAiLDUyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kYWJsZSIsITApLENlKDEpLGRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksQ2UoMSksUmUoIm5nSWYiLCFhLmNvdW50KSxDZSgx''@;'; put 'put ''KSxSZSgibmdJZiIsYS5jb3VudCksQ2UoMSksZ3IoIiAiLGEuZGlzcGxheSwiICIpLENlKDEpLFJlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIFZldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci10cmVlIiw0NiksUWUoMSxOZXQsNiw3LCJjbHItdHJlZS1ub2RlIiw0NyksYmEoMiwiYXN5''@;'; put 'put ''bmMiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9VmUoNCk7UmUoImNsckxhenkiLCEwKSxDZSgxKSxSZSgiY2xyUmVjdXJzaXZlRm9yT2YiLFVsKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxkcmVuKX19ZnVuY3Rpb24gQmV0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''QnIoMCksbWUoMSwiZGl2Iiw1NCkscXQoMiwiY2xyLWljb24iLDQyKSxtZSgzLCJkaXYiLDU1KSg0LCJwIiw1NiksTmUoNSkseWUoKSxtZSg2LCJwIiw1NyksTmUoNykseWUoKSgpKCksUWUoOCxWZXQsMyw1LCJjbHItdHJlZSIsNDUpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxk''@;'; put 'put ''PVZlKDMpO0NlKDUpLGdyKCIgIixhLk5BTUUsIiAiKSxDZSgyKSxncigiICIsYS5JRCwiICIpLENlKDEpLFJlKCJuZ0lmIixkLnNob3dBY2MpfX1mdW5jdGlvbiBqZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDM5KSxRZSgxLEJldCw5LDMsIm5nLWNvbnRhaW5lciIsNCkseWUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIHpldChjLGwpe2lmKDEmYyYmKG1lKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLE5lKDIpLHllKCksbWUoMywiY2xyLWRnLWNlbGwiKSxOZSg0KSx5ZSgpLG1l''@;'; put 'put ''KDUsImNsci1kZy1jZWxsIiksTmUoNikseWUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMiksb3IoYS5UWVBFKSxDZSgyKSxvcihhLk5BTUUpLENlKDIpLG9yKGEuVkFMVUUpfX1jb25zdCBVZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bMTAsMjAsNTAsMTAwXX07ZnVuY3Rpb24gWmV0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLWRhdGFncmlkIiw1OCkoMSwiY2xyLWRnLWNvbHVtbiIpLE5lKDIsIiBUWVBFICIpLHF0KDMsImNsci1kZy1zdHJpbmctZmlsdGVyIiw1OSkseWUoKSxtZSg0LCJjbHItZGctY29sdW1uIiksTmUoNSwiIE5BTUUgIikscXQoNiwiY2xyLWRnLXN0cmlu''@;'; put 'put ''Zy1maWx0ZXIiLDU5KSx5ZSgpLG1lKDcsImNsci1kZy1jb2x1bW4iKSxOZSg4LCIgVkFMVUUgIikscXQoOSwiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDU5KSx5ZSgpLFFlKDEwLHpldCw3LDMsImNsci1kZy1yb3ciLDYwKSxtZSgxMSwiY2xyLWRnLWZvb3RlciIpKDEyLCJjbHItZGctcGFnaW5h''@;'; put 'put ''dGlvbiIsNjEsNjIpKDE0LCJjbHItZGctcGFnZS1zaXplIiw2MyksTmUoMTUsIkF0dHJpYnV0ZXMgcGVyIHBhZ2UiKSx5ZSgpLE5lKDE2KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPSRpKDEzKSxkPVZlKDIpO0NlKDMpLFJlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC50eXBlRmlsdGVyKSxDZSgz''@;'; put 'put ''KSxSZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQubmFtZUZpbHRlciksQ2UoMyksUmUoImNsckRnU3RyaW5nRmlsdGVyIixkLnZhbHVlRmlsdGVyKSxDZSgxKSxSZSgiY2xyRGdJdGVtc09mIixkLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSxDZSgyKSxSZSgiY2xyRGdQYWdlU2l6ZSIsMTApLENlKDIp''@;'; put 'put ''LFJlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCRzKDksVWV0KSksQ2UoMiksYjAoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBZZXQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDMwKSgxLCJk''@;'; put 'put ''aXYiLDMxKSxRZSgyLHhldCwzLDEsImRpdiIsMzIpLHF0KDMsImJyIiksUWUoNCxPZXQsMywxLCJkaXYiLDMzKSxRZSg1LGpldCwyLDEsImRpdiIsMzMpLHllKCksbWUoNiwiZGl2IiwzNCkoNywiaDMiKSxOZSg4KSx5ZSgpLFFlKDksWmV0LDE3LDEwLCJjbHItZGF0YWdyaWQiLDM1KSx5ZSgp''@;'; put 'put ''KCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDIpLFJlKCJuZ0lmIixhLm1ldGFPYmplY3RMaXN0JiYhYS5vYmplY3RSb3V0ZSksQ2UoMiksUmUoIm5nSWYiLCFhLm9iamVjdFZpZXcpLENlKDEpLFJlKCJuZ0lmIixhLm9iamVjdFZpZXcpLENlKDMpLG9yKGEuYXNzb09iamVjdFNlbGVjdGVkKSxD''@;'; put 'put ''ZSgxKSxSZSgibmdJZiIsYS5zaG93VGFibGUpfX1sZXQgb1o9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLF8sVCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmhlbHBlclNlcnZpY2U9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9Xyx0''@;'; put 'put ''aGlzLnJvdXRlPVQsdGhpcy5tZXRhRGF0YVNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPVtdLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YURh''@;'; put 'put ''dGFJZD0iIix0aGlzLmxvYWRpbmc9ITAsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSEwLHRoaXMubWV0YU9iamVjdFNpemU9MjAwLHRoaXMuYXNzb1R5cGVTZWxlY3RlZD0iIix0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIix0aGlzLnJlcG9zaXRvcnk9IiIsdGhpcy5vYmplY3RSb3V0ZT0hMSx0''@;'; put 'put ''aGlzLnNob3dEYXRhPSExLHRoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmdldENoaWxkcmVuPVc9PlcuY291bnQ/V2koVy5kZXRhaWxzKTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTpXLkFTU09DVVJJfV19''@;'; put 'put ''KS50aGVuKGdlPT57dGhpcy5zaG93VGFibGU9ITAsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1nZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPVcuTkFNRTtsZXQgd2U9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9i''@;'; put 'put ''amVjdFJvdXRlP3dlLnNsaWNlKDAsd2UubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrVy5BU1NPQ1VSSS5zbGljZSgxK1cuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSk6d2UrIi9vYmplY3QvIitXLkFTU09DVVJJLnNsaWNlKDErVy5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhp''@;'; put 'put ''cy5nZXRBc3Nvc2lhdGlvbnNDb3VudChnZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5jZT0hMX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYm''@;'; put 'put ''KHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXplPTUsR24ubWV0YWRhdGEubWV0YURhdGFMaXN0JiZHbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzJiYhdGhpcy5vYmplY3RSb3V0ZT8odGhpcy5tZXRhRGF0YUxpc3Q9R24ubWV0YWRhdGEubWV0''@;'; put 'put ''YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPUduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXMsdGhpcy5yZXBvc2l0b3J5PUduLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9''@;'; put 'put ''R24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhdHlwZXMiLG51bGwpLnRoZW4oYT0+e3RoaXMubWV0YURhdGFMaXN0PWEudHlwZXMsR24ubWV0YWRhdGEubWV0YURhdGFMaXN0PXRoaXMubWV0YURhdGFMaXN0LHRoaXMubG9h''@;'; put 'put ''ZGluZz0hMSx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITF9KSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhcmVwb3MiLG51bGwpLnRoZW4oYT0+e2xldCBkPSExO3RoaXMucmVwb3NpdG9yaWVzPVtdO2ZvcihsZXQgaD0wO2g8YS5vdXRyZXBvcy5sZW5ndGg7aCsrKXRoaXMu''@;'; put 'put ''cmVwb3NpdG9yaWVzLnB1c2goYS5vdXRyZXBvc1toXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1hLm91dHJlcG9zW2hdLk5BTUUmJihkPSEwKTtpZih0aGlzLnJlcG9zaXRvcnk9ZD8iRm91bmRhdGlvbiI6YS5vdXRyZXBvc1swXS5OQU1FLEduLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXM9dGhp''@;'; put 'put ''cy5yZXBvc2l0b3JpZXMsR24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeSx0aGlzLm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBoPSIiLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJh''@;'; put 'put ''bXMub2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RMaXN0LnB1c2goe0lEOmYsTkFNRTpofSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9iamVjdFNob3dMaXN0''@;'; put 'put ''WzBdLklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJp''@;'; put 'put ''bmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bWV0YURhdGFPbkNsaWNrKGEsZCl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5sb2FkaW5nPSEw''@;'; put 'put ''LHRoaXMuc2VsZWN0bWV0YURhdGEoYSxkKX1tZXRhT2JqZWN0T25DbGljayhhLGQpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChhLGQpfXNlbGVjdG1ldGFEYXRh''@;'; put 'put ''KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKF89PntoLm1ldGFPYmplY3RMaXN0PV8ub2Jq''@;'; put 'put ''ZWN0cyxoLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGgubWV0YU9iamVjdFNpemUpLGgubG9hZGluZz0hMSxoLmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRhPSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlz''@;'; put 'put ''O3JldHVybiBmaShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKF89PntoLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9Xy5hc3NvY2lhdGlvbnMsaC5yb290JD1XaShoLmdl''@;'; put 'put ''dEFzc29zaWF0aW9uc0NvdW50KF8uYXNzb2NpYXRpb25zKSksaC5zaG93QWNjPSEwLGguc2hvd1RhYmxlPSEwO2xldCBUPV8uYXR0cmlidXRlcy5maW5kKGllPT4iTmFtZSI9PT1pZS5OQU1FKS5WQUxVRTtoLmFzc29PYmplY3RTZWxlY3RlZD1ULGQuTkFNRT1UO2xldCBXPWgucm91dGVyLnVy''@;'; put 'put ''bDtoLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLm9iamVjdFJvdXRlP1cuc2xpY2UoMCxXLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpOlcrIi9vYmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKSksaC5tZXRhT2JqZWN0''@;'; put 'put ''QXR0cmlidXRlcz1fLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJp''@;'; put 'put ''OmF9XX0pLnRoZW4oXz0+e2gubWV0YU9iamVjdEF0dHJpYnV0ZXM9Xy5hdHRyaWJ1dGVzLGguc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGEpe2xldCBkPW5ldyBNYXA7Zm9yKGxldCBmIG9mIGEpe2QuaGFzKGYuQVNTT0MpfHxkLnNldChmLkFTU09DLHtjb3VudDow''@;'; put 'put ''LGRldGFpbHM6W119KTtsZXQgXz1kLmdldChmLkFTU09DKTtfLmNvdW50KyssXy5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmYuQVNTT0NVUkksTkFNRTpmLk5BTUUsZGlzcGxheTpmLk5BTUUsVVJJOmYuQVNTT0NVUkkuc2xpY2UoZi5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaD1b''@;'; put 'put ''XTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGYsXyl7aC5wdXNoKHtBU1NPQzpfLGNvdW50OmYuY291bnQsZGV0YWlsczpmLmRldGFpbHMsZGlzcGxheTpfKyIgKCAiK2YuY291bnQrIiApIn0pfSksaH1zZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB0aGlz''@;'; put 'put ''Lm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaC5BU1NPQz09PWEmJmQucHVzaChoKTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPWQsZH1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGEpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10s''@;'; put 'put ''dGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksR24ubWV0YWRhdGEubWV0''@;'; put 'put ''YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25GaWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5B''@;'; put 'put ''TUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9iamVjdFNpemUpLEduLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3Qm''@;'; put 'put ''JnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBkPTAsaD0tMTtmb3IobGV0IGY9MDtmPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2YrKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRk''@;'; put 'put ''ZW4pJiZkKyssZD09PWEpe2g9ZjticmVha310aGlzLm1ldGFPYmplY3RTaG93TGlzdD0tMSE9PWg/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGgpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hh''@;'; put 'put ''bmdlKGEsZCl7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xpY2soZC5JRCxkKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtHbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9z''@;'; put 'put ''aXRvcnk9dGhpcy5yZXBvc2l0b3J5fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dCh2bCksdHQob2EpLHR0KEFjKSx0dChKZCksdHQoRHMpLHR0KFdsKSl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJd''@;'; put 'put ''XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMywidmFsdWUiLDQs''@;'; put 'put ''Im5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJs''@;'; put 'put ''ZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJ''@;'; put 'put ''bnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJ''@;'; put 'put ''ZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4''@;'; put 'put ''cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwi''@;'; put 'put ''NjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbNCwibmdJZiJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jvdy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3Mi''@;'; put 'put ''LCJzZWFyY2gtaW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0Iiwi''@;'; put 'put ''IiwicGxhY2Vob2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaE9ialRyZWVJbnB1dCIsIiJdLFsxLCJvYmplY3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9w''@;'; put 'put ''ZW5DaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwibmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFu''@;'; put 'put ''ZGFibGUiLDQsImNsclJlY3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbGFzcyIsImZsb2F0LXJpZ2h0IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3JkLWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQi''@;'; put 'put ''LCJtbC0zIl0sWzEsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdXSx0ZW1wbGF0''@;'; put 'put ''ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwwKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTmUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLHllKCksbWUoNSwic2VsZWN0IiwxKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oZil7cmV0dXJuIGQucmVwb3NpdG9yeT1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLFFlKDYsZmV0LDIsMiwib3B0aW9uIiwyKSx5ZSgpKCkoKSxtZSg3LCJjbHItdHJlZSIpLFFlKDgsbWV0LDYsMywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsMyksUWUoOSxfZXQsMiwxLCJuZy1jb250YWluZXIiLDQpLHllKCkoKSxtZSgxMCwiZGl2Iiw1KSgxMSwiZGl2Iiw2KSgxMiwiaDMiLDcpLE5lKDEzKSx5ZSgpLFFlKDE0LGJldCw0LDAsImRpdiIsOCksUWUoMTUsTWV0LDQsMSwiZGl2Iiw5KSxRZSgxNixZZXQsMTAsNSwiZGl2IiwxMCks''@;'; put 'put ''eWUoKSgpKSwyJmEmJihDZSg1KSxSZSgibmdNb2RlbCIsZC5yZXBvc2l0b3J5KSxDZSgxKSxSZSgibmdGb3JPZiIsZC5yZXBvc2l0b3JpZXMpLENlKDIpLFJlKCJuZ0lmIixkLm1ldGFEYXRhTGlzdCksQ2UoMSksUmUoIm5nRm9yT2YiLGQubWV0YURhdGFMaXN0KSxDZSg0KSxvcihkLmFzc29U''@;'; put 'put ''eXBlU2VsZWN0ZWQpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkaW5nJiYhZC5tZXRhT2JqZWN0TGlzdCksQ2UoMSksUmUoIm5nSWYiLGQubG9hZGluZyksQ2UoMSksUmUoIm5nSWYiLGQuc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOlt4cyxaaSxsMSxjMSxXYSxNMCxCcyxPcyxXOCxUcCx0ZyxQ''@;'; put 'put ''RSxVOCxnSCxGRSxuZyxTUSxyZyxpZywkOCxvZyxCOCxrcCx6OCxRRixkZCxnMSxEUSxrYSxadSx6SixVcyxmMSxOOCxIOCxUSixfRSxJSixESixMSixFRixuMyx1eF0sc3R5bGVzOlsiLm9iamVjdHMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NzV2aDtvdmVyZmxvdzpzY3JvbGw7''@;'; put 'put ''Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXJhZGl1czo0cHh9LmNvbHMtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmFmYWZhO2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fS5vYmpl''@;'; put 'put ''Y3QtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9LnJlcG8tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDox''@;'; put 'put ''NXB4O21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5jbHItYWNjb3JkaW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5mbG9hdC1yaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7ZmxvYXQ6cmlnaHR9LmZ1bGwtd2lkdGhbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVde3dpZHRoOjEwMCV9Lm9iamVjdC11cmlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo1cHggMCAwfS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6M3B4O3BhZGRpbmctcmlnaHQ6M3B4fS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7Ym9yZGVyLXJhZGl1czozcHh9LmRhdGFncmlkLWhvc3RbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0iXX0pLGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7ZnVuY3Rpb24gV2V0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIEdldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwxMykseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0''@;'; put 'put ''IGg9VmUoMik7cmV0dXJuIGgucm9sZVNlYXJjaD0iIixqdChoLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiAkZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDkpLHh0KCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5yb2xlU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSx5ZSgpLFFlKDQsV2V0LDEsMCwiY2xyLWljb24iLDEwKSxRZSg1LEdldCwxLDAs''@;'; put 'put ''ImNsci1pY29uIiwxMSkseWUoKSgpfWlmKDImYyl7Y29uc3QgYT0kaSgzKSxkPVZlKCk7Q2UoMiksUmUoIm5nTW9kZWwiLGQucm9sZVNlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gcWV0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLnJvbGVPbkNsaWNrKGgpKX0pLG1lKDEsInAiLDE2KSxxdCgyLCJjbHItaWNvbiIs''@;'; put 'put ''MTcpLE5lKDMpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9VmUoKS4kaW1wbGljaXQsZD1WZSgpO2RyKCJ0YWJsZS1hY3RpdmUiLGEuUk9MRVVSST09PWQucm9sZVVyaSksQ2UoMyksZ3IoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gS2V0KGMsbCl7aWYoMSZjJiYoQnIoMCksUWUoMSxx''@;'; put 'put ''ZXQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBYZXQoYyxsKXsxJmMmJihtZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTmUoMiwiIExvYWRpbmcuLi4gIikseWUoKSgp''@;'; put 'put ''KX1mdW5jdGlvbiBKZXQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIFFldChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIiwzMikoMSwidGQiLDMwKSxOZSgyKSx5ZSgpLG1lKDMsInRkIiwzMCksTmUoNCkseWUoKSxtZSg1LCJ0''@;'; put 'put ''ZCIsMzApLE5lKDYpLHllKCksbWUoNywidGQiLDMwKSxOZSg4KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtSZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksQ2UoMiksb3IoYS5NRU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgy''@;'; put 'put ''KSxvcihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIGV0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLE5lKDUsIk5BTUUiKSx5ZSgpKCksbWUoNiwidGQiLDI5KSg3''@;'; put 'put ''LCJiIiksTmUoOCwiRU1BSUwiKSx5ZSgpKCksbWUoOSwidGQiLDI5KSgxMCwiYiIpLE5lKDExLCJDUkVBVEVEIikseWUoKSgpLG1lKDEyLCJ0ZCIsMzApKDEzLCJiIiksTmUoMTQsIlVQREFURUQiKSx5ZSgpKCkoKSgpLG1lKDE1LCJ0Ym9keSIpLFFlKDE2LFFldCw5LDUsInRyIiwzMSkseWUo''@;'; put 'put ''KSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTYpLFJlKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gdHR0KGMsbCl7MSZjJiYobWUoMCwiaDUiKSxOZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIikseWUoKSl9ZnVuY3Rpb24gbnR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIi''@;'; put 'put ''LDMyKSgxLCJ0ZCIsMzApLE5lKDIpLHllKCksbWUoMywidGQiLDMwKSxOZSg0KSx5ZSgpLG1lKDUsInRkIiwzMCksTmUoNikseWUoKSxtZSg3LCJ0ZCIsMzApLE5lKDgpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1JlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91''@;'; put 'put ''cHMvIithLlVSSU1FTSksQ2UoMiksb3IoYS5NRU1CRVJOQU1FKSxDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLk1FTUJFUkNSRUFURUQpLENlKDIpLG9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHJ0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgy''@;'; put 'put ''LCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLE5lKDUsIk5BTUUiKSx5ZSgpKCksbWUoNiwidGQiLDI5KSg3LCJiIiksTmUoOCwiRU1BSUwiKSx5ZSgpKCksbWUoOSwidGQiLDI5KSgxMCwiYiIpLE5lKDExLCJDUkVBVEVEIikseWUoKSgpLG1lKDEyLCJ0ZCIsMzApKDEzLCJiIiksTmUoMTQsIlVQ''@;'; put 'put ''REFURUQiKSx5ZSgpKCkoKSgpLG1lKDE1LCJ0Ym9keSIpLFFlKDE2LG50dCw5LDUsInRyIiwzMSkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMik7Q2UoMTYpLFJlKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBpdHQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiKSgxLCJkaXYi''@;'; put 'put ''LDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksTmUoOSkseWUoKSgpKCkoKSxtZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLE5lKDEzKSx5ZSgpKCkoKSgpKCkoKSgpLG1lKDE0LCJkaXYiLDIw''@;'; put 'put ''KSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxOZSgxOSkseWUoKSxRZSgyMCxKZXQsMiwwLCJoNSIsNSksbWUoMjEsImRpdiIsMjYpLFFlKDIyLGV0dCwxNywxLCJ0YWJsZSIsMjcpLHllKCkoKSxxdCgyMywiaHIiKSxtZSgyNCwiZGl2IikoMjUsImgzIiks''@;'; put 'put ''TmUoMjYpLHllKCksUWUoMjcsdHR0LDIsMCwiaDUiLDUpLG1lKDI4LCJkaXYiLDI2KSxRZSgyOSxydHQsMTcsMSwidGFibGUiLDI3KSx5ZSgpKCkscXQoMzAsImJyIikseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKCk7Q2UoOSksb3IoYS5yb2xlTmFtZSksQ2UoNCksb3IoYS5yb2xlRGVz''@;'; put 'put ''YyksQ2UoNiksZ3IoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEucm9sZU1lbWJlcnNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEucm9sZU1lbWJlcnNDb3VudCksQ2UoNCksZ3IoIkdyb3VwcyAoIixhLnJvbGVHcm91cHNDb3VudCwi''@;'; put 'put ''KSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnJvbGVHcm91cHNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEucm9sZUdyb3Vwc0NvdW50KX19bGV0IHdsZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQs''@;'; put 'put ''dGhpcy5yb3V0ZXI9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT1fLHRoaXMucm9sZVNlYXJjaD0iIix0aGlzLnJvbGVVcmk9IiIsdGhpcy5yb2xlTmFtZT0iIix0aGlzLnJvbGVEZXNjPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1VUkk9IiIsdGhpcy5sb2FkaW5nPSEx''@;'; put 'put ''fW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9yb2xlcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51''@;'; put 'put ''cmkpLEduLnVzZXJuYXYucm9sZUxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5yb2xlcz1Hbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Hbi51c2VybmF2LnJvbGVTZWFyY2gpOnZvaWQgMD09PUduLnVzZXJuYXYucm9sZUxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlz''@;'; put 'put ''LnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVzPWEucm9sZXMsR24udXNlcm5hdi5yb2xlTGlzdD1hLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQg''@;'; put 'put ''ZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhp''@;'; put 'put ''cy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJp''@;'; put 'put ''PWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKToodGhpcy5yb2xlcz1Hbi51c2VybmF2LnJvbGVMaXN0LHRoaXMucm9sZVNlYXJjaD1Hbi51c2VybmF2LnJvbGVTZWFyY2gsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVz''@;'; put 'put ''ZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLnJvbGVzPWEucm9sZXMsR24udXNlcm5hdi5yb2xlTGlzdD1hLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVS''@;'; put 'put ''SSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1i''@;'; put 'put ''ZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWQuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWQuUk9MRU5BTUUsdGhp''@;'; put 'put ''cy5yb2xlRGVzYz1kLlJPTEVERVNDfSkpfX0pKX1yb2xlTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLnJvbGVzLHRoaXMucm9sZVNlYXJjaCwiUk9MRU5BTUUiKSxHbi51c2VybmF2LnJvbGVTZWFyY2g9dGhpcy5yb2xlU2VhcmNofXJvbGVP''@;'; put 'put ''bkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQgZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlJPTEVVUkkpOmQrIi8iK2VuY29kZVVSSShh''@;'; put 'put ''LlJPTEVVUkkpKSx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOmEuUk9MRVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnND''@;'; put 'put ''b3VudD1mLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWEuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWEuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1hLlJPTEVERVND''@;'; put 'put ''fSl9ZmluZFJvbGUoYSxkKXtsZXQgaD0hMTtyZXR1cm4gYS5mb3JFYWNoKGY9PntmLlJPTEVVUkk9PT1kJiYoaD1mKX0pLGh9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KG9hKSx0dChBYyksdHQoRHMpLHR0KEpkKSx0dChXbCkpfSxjLlx1MDI3''@;'; put 'put ''NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJu''@;'; put 'put ''Z0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgUm9sZXMi''@;'; put 'put ''LCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEs''@;'; put 'put ''ImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xlLWluZm8tdGV4dCJdLFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsi''@;'; put 'put ''Y2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiLDApKDEsImNsci10cmVlIiksUWUoMiwkZXQsNiwzLCJjbHItdHJlZS1ub2RlIiwxKSxRZSgzLEtldCwyLDEsIm5nLWNvbnRhaW5lciIsMikseWUoKSgpLG1lKDQsImRpdiIsMyksUWUoNSxYZXQsMywwLCJkaXYiLDQpLFFlKDYsaXR0LDMxLDgsImRp''@;'; put 'put ''diIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5nSWYiLGQucm9sZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnJvbGVzKSxDZSgyKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC5yb2xlTWVtYmVycyYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1''@;'; put 'put ''LFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5yb2xlLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb1tfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3Rl''@;'; put 'put ''eHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30ucm9sZS1kYXRhW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxl''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1o''@;'; put 'put ''ZWlnaHQ6NzAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pLGN9KSgpLG90dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9d3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7MSZhJiZxdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZnBdfSksY30pKCksc3R0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g''@;'; put 'put ''bmV3KGF8fGMpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJnF0KDAsInJvdXRlci1vdXRsZXQiKX0s''@;'; put 'put ''ZGVwZW5kZW5jaWVzOltmcF19KSxjfSkoKTtmdW5jdGlvbiBhdHQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gbHR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDEzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1W''@;'; put 'put ''ZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLGp0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGN0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsOSkseHQoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLnVzZXJTZWFyY2g9aCl9KSgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxhdHQsMSwwLCJjbHItaWNvbiIsMTApLFFlKDUsbHR0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDExKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC51c2VyU2VhcmNoKSxDZSgyKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiB1dHQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudXNlck9uQ2xpY2soaCkpfSksbWUoMSwicCIsMTYpLHF0KDIsImNsci1pY29uIiwxNyks''@;'; put 'put ''TmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdCxkPVZlKCk7ZHIoInRhYmxlLWFjdGl2ZSIsKG51bGw9PWQudXNlckluZm8/bnVsbDpkLnVzZXJJbmZvLlVSSSk9PT1hLlVSSSksQ2UoMyksZ3IoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBkdHQoYyxsKXtpZigx''@;'; put 'put ''JmMmJihCcigwKSxRZSgxLHV0dCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxVcigpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7Q2UoMSksUmUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGh0dChjLGwpezEmYyYmKG1lKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxOZSgyLCIgTG9h''@;'; put 'put ''ZGluZy4uLiAiKSx5ZSgpKCkpfWZ1bmN0aW9uIGZ0dChjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsInRyIikoMiwidGQiLDI3KSxOZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIiksbWUoNCwiYiIpLE5lKDUpLHllKCkoKSgpLG1lKDYsInRyIikoNywidGQiLDI3KSxOZSg4LCIgTWV0YWRhdGEg''@;'; put 'put ''VXBkYXRlZDogIiksbWUoOSwiYiIpLE5lKDEwKSx5ZSgpKCkoKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoNSksb3IoYS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLENlKDUpLG9yKGEudXNlckluZm8uTUVUQURBVEFVUERBVEVEKX19ZnVuY3Rpb24gcHR0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''bWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI3KSgxMSwicCIsMjgpKDEyLCJiIiksTmUoMTMpLHllKCkoKSgpKCks''@;'; put 'put ''UWUoMTQsZnR0LDExLDIsIm5nLWNvbnRhaW5lciIsNSkseWUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLG9yKGEudXNlckluZm8uTkFNRSksQ2UoNSksb3IoYS51c2VySW5mby5ESVNQTEFZTkFNRSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXM5KX19ZnVuY3Rpb24gZ3R0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLE5lKDgpLHllKCkoKSgpKCksbWUoOSwidHIiKSgxMCwidGQiLDI3KSxO''@;'; put 'put ''ZSgxMSwiIFVzZXIgSUQ6ICIpLG1lKDEyLCJiIiksTmUoMTMpLHllKCkoKSgpLG1lKDE0LCJ0ciIpKDE1LCJ0ZCIsMjcpLE5lKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksbWUoMTcsImIiKSxOZSgxOCkseWUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDgpLG9yKGEu''@;'; put 'put ''dXNlckluZm8uTkFNRSksQ2UoNSksb3IoYS51c2VySW5mby5VUkkpLENlKDUpLG9yKGEudXNlckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBtdHQoYyxsKXsxJmMmJihtZSgwLCJoNSIpLE5lKDEsIk5vIEVtYWlscyBQcmVzZW50IikseWUoKSl9ZnVuY3Rpb24gdnR0KGMsbCl7aWYoMSZjJiYo''@;'; put 'put ''bWUoMCwidHIiKSgxLCJ0ZCIsMzEpLE5lKDIpLHllKCksbWUoMywidGQiLDMxKSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgyKSxvcihhLkVNQUlMKSxDZSgyKSxvcihhLlRZUEUpfX1mdW5jdGlvbiBfdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkp''@;'; put 'put ''KDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxOZSg1LCJFTUFJTCIpLHllKCkoKSxtZSg2LCJ0ZCIsMzEpKDcsImIiKSxOZSg4LCJUWVBFIikseWUoKSgpKCkoKSxtZSg5LCJ0Ym9keSIpLFFlKDEwLHZ0dCw1LDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgz''@;'; put 'put ''KTtDZSgxMCksUmUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9fWZ1bmN0aW9uIGJ0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxRZSgzLG10dCwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI0KSxRZSg1LF90dCwxMSwxLCJ0YWJsZSIsMjUpLHllKCkoKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJFTUFJTFMgKCIsYS51c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJFbWFpbHNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24geXR0KGMsbCl7MSZj''@;'; put 'put ''JiZxdCgwLCJociIpfWZ1bmN0aW9uIHd0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gR3JvdXBzIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBDdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ZCIsMzMpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgi''@;'; put 'put ''cm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLENlKDEpLGdyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBTdHQoYyxsKXtpZigxJmMmJihCcigwKSxtZSgxLCJ0ZCIsMzMpLE5lKDIpLHllKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0''@;'; put 'put ''O0NlKDEpLFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIisoYS5HUk9VUFVSSXx8YS5VUkkpKSxDZSgxKSxncigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gTXR0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSxRZSgxLEN0dCwyLDIsInRkIiwzMiksUWUoMixT''@;'; put 'put ''dHQsMywyLCJuZy1jb250YWluZXIiLDUpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9u''@;'; put 'put ''IHh0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxRZSgyLE10dCwzLDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gRXR0KGMsbCl7MSZjJiZxdCgwLCJociIpfWZ1''@;'; put 'put ''bmN0aW9uIGt0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gUm9sZXMgUHJlc2VudCIpLHllKCkpfWZ1bmN0aW9uIEF0dChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDM0KSxOZSgyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKDQpO0NlKDEp''@;'; put 'put ''LFJlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkpKSxDZSgxKSxncigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBUdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksUWUoMixBdHQsMywyLCJ0''@;'; put 'put ''ciIsMikseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMiksUmUoIm5nRm9yT2YiLGEudXNlclJvbGVzKX19ZnVuY3Rpb24gRHR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IikoMSwiaDMiKSxOZSgyKSx5ZSgpLFFlKDMsa3R0LDIsMCwiaDUiLDUpLG1lKDQsImRpdiIsMjQpLFFlKDUs''@;'; put 'put ''VHR0LDMsMSwidGFibGUiLDI1KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxncigiUk9MRVMgKCIsYS51c2VyUm9sZXNDb3VudHx8IjAiLCIpIiksQ2UoMSksUmUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLENlKDIpLFJlKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50''@;'; put 'put ''KX19ZnVuY3Rpb24gSXR0KGMsbCl7MSZjJiZxdCgwLCJociIpfWZ1bmN0aW9uIEx0dChjLGwpezEmYyYmKG1lKDAsImg1IiksTmUoMSwiTm8gTG9naW5zIFByZXNlbnQiKSx5ZSgpKX1mdW5jdGlvbiBSdHQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwzMSksTmUoMikseWUoKSxt''@;'; put 'put ''ZSgzLCJ0ZCIsMzEpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDIpLG9yKGEuRE9NQUlOKSxDZSgyKSxvcihhLlVTRVJJRCl9fWZ1bmN0aW9uIE90dChjLGwpe2lmKDEmYyYmKG1lKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCko''@;'; put 'put ''NCwiYiIpLE5lKDUsIkRPTUFJTiIpLHllKCkoKSxtZSg2LCJ0ZCIpKDcsImIiKSxOZSg4LCJVU0VSIElEIikseWUoKSgpKCkoKSxtZSg5LCJ0Ym9keSIpLFFlKDEwLFJ0dCw1LDIsInRyIiwyKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgzKTtDZSgxMCksUmUoIm5nRm9yT2YiLGEudXNlckxv''@;'; put 'put ''Z2lucyl9fWZ1bmN0aW9uIFB0dChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIpKDEsImgzIiksTmUoMikseWUoKSxRZSgzLEx0dCwyLDAsImg1Iiw1KSxtZSg0LCJkaXYiLDI0KSxRZSg1LE90dCwxMSwxLCJ0YWJsZSIsMjUpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDIpLGdyKCJM''@;'; put 'put ''T0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJMb2dpbnNDb3VudCksQ2UoMiksUmUoIm5nSWYiLDAhPWEudXNlckxvZ2luc0NvdW50KX19ZnVuY3Rpb24gRnR0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiksUWUoMSxwdHQsMTUs''@;'; put 'put ''MywiZGl2IiwyMCksUWUoMixndHQsMTksMywiZGl2IiwyMCksbWUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMikoNSwiZGl2IiwyMyksUWUoNixidHQsNiwzLCJkaXYiLDUpLFFlKDcseXR0LDEsMCwiaHIiLDUpLG1lKDgsImRpdiIpKDksImgzIiksTmUoMTApLHllKCksUWUoMTEsd3R0LDIsMCwi''@;'; put 'put ''aDUiLDUpLG1lKDEyLCJkaXYiLDI0KSxRZSgxMyx4dHQsMywxLCJ0YWJsZSIsMjUpLHllKCkoKSxRZSgxNCxFdHQsMSwwLCJociIsNSksUWUoMTUsRHR0LDYsMywiZGl2Iiw1KSxRZSgxNixJdHQsMSwwLCJociIsNSksUWUoMTcsUHR0LDYsMywiZGl2Iiw1KSxxdCgxOCwiYnIiKSx5ZSgpKCko''@;'; put 'put ''KSgpKSwyJmMpe2NvbnN0IGE9VmUoKTtDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksQ2UoNCksUmUoIm5nSWYiLGEuc2VydmVy''@;'; put 'put ''VHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDMpLGdyKCJHUk9VUFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLENlKDEpLFJlKCJuZ0lmIiwwPT1hLnVzZXJHcm91cHNDb3VudCksQ2Uo''@;'; put 'put ''MiksUmUoIm5nSWYiLDAhPWEudXNlckdyb3Vwc0NvdW50KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLENlKDEpLFJlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksQ2UoMSksUmUoIm5nSWYiLGEuc2VydmVyVHlwZT09''@;'; put 'put ''PWEuU2VydmVyVHlwZS5TYXM5KSxDZSgxKSxSZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgQ2xlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZixfKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRl''@;'; put 'put ''PWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPV8sdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyByMS5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNl''@;'; put 'put ''cnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPVVjLkQsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZl''@;'; put 'put ''clR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10''@;'; put 'put ''aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEduLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudCl0aGlzLnVzZXJzPUduLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUduLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUduLnVzZXJu''@;'; put 'put ''YXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhl''@;'; put 'put ''bihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURFUjpmLnByb3ZpZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxHbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgi''@;'; put 'put ''dXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS51c2VycyxHbi51c2VybmF2LnVzZXJMaXN0PWEudXNlcnN9KSk6KHRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2Vy''@;'; put 'put ''U2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/''@;'; put 'put ''bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKF89Pih7R1JPVVBOQU1FOl8u''@;'; put 'put ''bmFtZSxVUkk6Xy5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoXz0+Xy5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu''@;'; put 'put ''dXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFVjLkQuU2FzOTp0aGlzLnVzZXJJbmZvPWguaW5mb1swXSx0''@;'; put 'put ''aGlzLnVzZXJFbWFpbHM9aC5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9aC5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWgucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9''@;'; put 'put ''aC5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgVWMuRC5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKGY9PmYuVVJJPT09YSk7ZWxzZXtjb25zdCBmPWguZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlO''@;'; put 'put ''QU1FOmYuTkFNRX19fXRoaXMudXNlckRhdGE9aCx0aGlzLnVzZXJHcm91cHM9aC5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51''@;'; put 'put ''c2VyU2VhcmNoLCJOQU1FIiksR24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJjaH11c2VyT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxk''@;'; put 'put ''Lmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8iK2VuY29kZVVSSShhLlVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2EuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hl''@;'; put 'put ''YWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCBfPWYuaXRlbXMubWFwKFQ9Pih7R1JPVVBOQU1FOlQubmFtZSxVUkk6VC5pZH0p''@;'; put 'put ''KTt0aGlzLnVzZXJHcm91cHM9Xyx0aGlzLnVzZXJHcm91cHNDb3VudD1fLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoVD0+VC5VUkk9PT1hLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVy''@;'; put 'put ''Iix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFVjLkQuU2FzOTp0aGlzLnVzZXJJbmZvPWYuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5lbWFp''@;'; put 'put ''bHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9Zi5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9Zi5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgVWMuRC5TYXNqczppZih0aGlzLnVzZXJz''@;'; put 'put ''KXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKF89Pl8uVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3QgXz1mLmdyb3Vwc1swXTt0aGlzLnVzZXJJbmZvPXtVUkk6Xy5JRCxOQU1FOl8uTkFNRSxESVNQTEFZTkFNRTpfLk5BTUV9fX10aGlzLnVzZXJEYXRhPWYsdGhpcy51c2VyR3JvdXBzPWYu''@;'; put 'put ''Z3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9NU09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFj''@;'; put 'put ''KSx0dChvYSksdHQoV2wpLHR0KEpkKSx0dChEcykpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNz''@;'; put 'put ''Iiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklu''@;'; put 'put ''cHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNlcnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYi''@;'; put 'put ''XSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywidGFibGUtYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0''@;'; put 'put ''LXBhZGRpbmciXSxbInNoYXBlIiwidXNlciJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQsIm5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsInVzZXItZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIi''@;'; put 'put ''XSxbImNsYXNzIiwidGFibGUgdXNlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsInVzZXItaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInVzZXItaW5mby10ZXh0Il0sWzEsInRhYmxlIiwidXNlci10YWJsZSJdLFsxLCJ3aWR0aC01MCJdLFsxLCIiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJh''@;'; put 'put ''Y3RpdmUiLCJjbGFzcyIsIiIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwiIiwzLCJyb3V0ZXJMaW5rIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihtZSgwLCJhcHAtc2lkZWJhciIsMCkoMSwi''@;'; put 'put ''Y2xyLXRyZWUiKSxRZSgyLGN0dCw2LDMsImNsci10cmVlLW5vZGUiLDEpLFFlKDMsZHR0LDIsMSwibmctY29udGFpbmVyIiwyKSx5ZSgpKCksbWUoNCwiZGl2IiwzKSxRZSg1LGh0dCwzLDAsImRpdiIsNCksUWUoNixGdHQsMTksMTEsImRpdiIsNSkseWUoKSksMiZhJiYoQ2UoMiksUmUoIm5n''@;'; put 'put ''SWYiLGQudXNlcnMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLnVzZXJzKSxDZSgyKSxSZSgibmdJZiIsZC5sb2FkaW5nKSxDZSgxKSxSZSgibmdJZiIsZC51c2VyRGF0YSYmIWQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3hzLFppLEJ1LEdfLFdhLEJzLE9zLGRkLGcxLGthLGYxLG4zXSxzdHls''@;'; put 'put ''ZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS51c2VyLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjoj''@;'; put 'put ''ZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS51c2VyLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS51c2VyLWRhdGFbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1dG99LnVzZXIt''@;'; put 'put ''ZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZGFkYWRhfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LndpZHRoLTUwW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCV9LndpZHRoLTMzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMyV9LnRhYmxlLWNvbnRhaW5lcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3JvbGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSksY30pKCksSHR0PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3VhbGlzYXRpb246e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFn''@;'; put 'put ''ZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1zIix2aXN1YWxBbmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpvYkV4ZWN1dGlvbjoiL2pvYkV4ZWN1dGlvbiJ9LERlY2lzaW9uX01h''@;'; put 'put ''bmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2Rh''@;'; put 'put ''dGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50''@;'; put 'put ''aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVs''@;'; put 'put ''YXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIiO2NvbnN0''@;'; put 'put ''IGg9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnNlcnZlclVybD1oPy5zZXJ2ZXJVcmx8fCIiLHRoaXMuZ2V0QnlDb2xsZWN0aW9uKCJqb2JzIikuc3Vic2NyaWJlKGY9Pntjb25zb2xlLmxvZygicmVzIixmKX0pfWdldEFsbENvbGxlY3Rpb25zKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudml5YUFwaXN9Z2V0QnlVcmwoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7''@;'; put 'put ''d2l0aENyZWRlbnRpYWxzOiEwfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGFyKGhQKSxhcihlOCkpfSxjLlx1MDI3NXByb3Y9aHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpO2Z1bmN0aW9u''@;'; put 'put ''IE50dChjLGwpezEmYyYmcXQoMCwiZGl2Iiw5KX1mdW5jdGlvbiBWdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzcGFuIiwxMCkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkub25WYWx1ZUNsaWNrKGgp''@;'; put 'put ''KX0pLE5lKDEpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLG9yKGEuZGVzY3JpcHRpb24pfX1mdW5jdGlvbiBCdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzZWN0aW9uIiwxMSkoMSwibmd4LWpzb24tdmlld2VyIiwxMikseHQoInNlZ21lbnRM''@;'; put 'put ''aW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLm9uU2VnbWVudExpbmtDbGljayhoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0LGQ9VmUoKTtDZSgxKSxSZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgi''@;'; put 'put ''ZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWNvbnN0IGp0dD1mdW5jdGlvbihjKXtyZXR1cm5bInNlZ21lbnQiLGNdfSx6dHQ9ZnVuY3Rpb24oYyxsKXtyZXR1cm57InNlZ21lbnQtbWFpbiI6ITAsZXhwYW5kYWJsZTpjLGV4cGFuZGVkOmx9fTtm''@;'; put 'put ''dW5jdGlvbiBVdHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJzZWN0aW9uIiwyKSgxLCJzZWN0aW9uIiwzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgZj1CdChhKS4kaW1wbGljaXQ7cmV0dXJuIGp0KFZlKCkudG9nZ2xlKGYpKX0pLFFlKDIsTnR0LDEsMCwiZGl2Iiw0''@;'; put 'put ''KSxtZSgzLCJzcGFuIiw1KSxOZSg0KSx5ZSgpLG1lKDUsInNwYW4iLDYpLE5lKDYsIjogIikseWUoKSxRZSg3LFZ0dCwyLDEsInNwYW4iLDcpLHllKCksUWUoOCxCdHQsMiw0LCJzZWN0aW9uIiw4KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVZlKCk7UmUoIm5nQ2xhc3Mi''@;'; put 'put ''LEoyKDYsanR0LCJzZWdtZW50LXR5cGUtIithLnR5cGUpKSxDZSgxKSxSZSgibmdDbGFzcyIsUTIoOCx6dHQsZC5pc0V4cGFuZGFibGUoYSksYS5leHBhbmRlZCkpLENlKDEpLFJlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksQ2UoMiksb3IoYS5rZXkpLENlKDMpLFJlKCJuZ0lmIiwhYS5l''@;'; put 'put ''eHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxDZSgxKSxSZSgibmdJZiIsYS5leHBhbmRlZCYmZC5pc0V4cGFuZGFibGUoYSkpfX1sZXQgWnR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmV4cGFuZGVkPSEwLHRoaXMuZGVwdGg9LTEsdGhpcy5fY3VycmVudERlcHRoPTAs''@;'; put 'put ''dGhpcy5zZWdtZW50TGlua0NsaWNrZWQ9bmV3IEVyLHRoaXMuc2VnbWVudHM9W119bmdPbkNoYW5nZXMoKXt0aGlzLnNlZ21lbnRzPVtdLHRoaXMuanNvbj10aGlzLmRlY3ljbGUodGhpcy5qc29uKSwib2JqZWN0Ij09dHlwZW9mIHRoaXMuanNvbj9PYmplY3Qua2V5cyh0aGlzLmpzb24pLmZv''@;'; put 'put ''ckVhY2goYT0+e3RoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYSx0aGlzLmpzb25bYV0pKX0pOnRoaXMuc2VnbWVudHMucHVzaCh0aGlzLnBhcnNlS2V5VmFsdWUoYCgke3R5cGVvZiB0aGlzLmpzb259KWAsdGhpcy5qc29uKSl9aXNFeHBhbmRhYmxlKGEpe3JldHVybiJv''@;'; put 'put ''YmplY3QiPT09YS50eXBlfHwiYXJyYXkiPT09YS50eXBlfXRvZ2dsZShhKXt0aGlzLmlzRXhwYW5kYWJsZShhKSYmKGEuZXhwYW5kZWQ9IWEuZXhwYW5kZWQpfW9uVmFsdWVDbGljayhhKXsibGluayI9PT1hLnR5cGUmJnRoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYS52YWx1ZSl9b25T''@;'; put 'put ''ZWdtZW50TGlua0NsaWNrKGEpe3RoaXMuc2VnbWVudExpbmtDbGlja2VkLmVtaXQoYSl9cGFyc2VLZXlWYWx1ZShhLGQpe2NvbnN0IGg9e2tleTphLHZhbHVlOmQsdHlwZTp2b2lkIDAsZGVzY3JpcHRpb246IiIrZCxleHBhbmRlZDp0aGlzLmlzRXhwYW5kZWQoKX07c3dpdGNoKHR5cGVvZiBo''@;'; put 'put ''LnZhbHVlKXtjYXNlIm51bWJlciI6aC50eXBlPSJudW1iZXIiO2JyZWFrO2Nhc2UiYm9vbGVhbiI6aC50eXBlPSJib29sZWFuIjticmVhaztjYXNlImZ1bmN0aW9uIjpoLnR5cGU9ImZ1bmN0aW9uIjticmVhaztjYXNlInN0cmluZyI6aWYodGhpcy5pc0xpbmsoaC52YWx1ZSkpe2gudHlwZT0i''@;'; put 'put ''bGluayI7YnJlYWt9aC50eXBlPSJzdHJpbmciLGguZGVzY3JpcHRpb249JyInK2gudmFsdWUrJyInO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpoLnR5cGU9InVuZGVmaW5lZCIsaC5kZXNjcmlwdGlvbj0idW5kZWZpbmVkIjticmVhaztjYXNlIm9iamVjdCI6bnVsbD09PWgudmFsdWU/KGgudHlw''@;'; put 'put ''ZT0ibnVsbCIsaC5kZXNjcmlwdGlvbj0ibnVsbCIpOkFycmF5LmlzQXJyYXkoaC52YWx1ZSk/KGgudHlwZT0iYXJyYXkiLGguZGVzY3JpcHRpb249IkFycmF5WyIraC52YWx1ZS5sZW5ndGgrIl0gIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSk6aC52YWx1ZSBpbnN0YW5jZW9mIERhdGU/aC50''@;'; put 'put ''eXBlPSJkYXRlIjooaC50eXBlPSJvYmplY3QiLGguZGVzY3JpcHRpb249Ik9iamVjdCAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKX1yZXR1cm4gaH1pc0xpbmsoYSl7cmV0dXJuImh0dHBzOi8vIj09PWEuc3Vic3RyaW5nKDAsOCl8fCJodHRwOi8vIj09PWEuc3Vic3RyaW5nKDAsNyl8fCIv''@;'; put 'put ''Ij09PWFbMF19aXNFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkJiYhKHRoaXMuZGVwdGg+LTEmJnRoaXMuX2N1cnJlbnREZXB0aD49dGhpcy5kZXB0aCl9ZGVjeWNsZShhKXtjb25zdCBkPW5ldyBXZWFrTWFwO3JldHVybiBmdW5jdGlvbiBoKGYsXyl7bGV0IFQsVztyZXR1cm4ib2Jq''@;'; put 'put ''ZWN0IiE9dHlwZW9mIGZ8fG51bGw9PT1mfHxmIGluc3RhbmNlb2YgQm9vbGVhbnx8ZiBpbnN0YW5jZW9mIERhdGV8fGYgaW5zdGFuY2VvZiBOdW1iZXJ8fGYgaW5zdGFuY2VvZiBSZWdFeHB8fGYgaW5zdGFuY2VvZiBTdHJpbmc/ZjooVD1kLmdldChmKSx2b2lkIDAhPT1UP3skcmVmOlR9Oihk''@;'; put 'put ''LnNldChmLF8pLEFycmF5LmlzQXJyYXkoZik/KFc9W10sZi5mb3JFYWNoKGZ1bmN0aW9uKGllLGdlKXtXW2dlXT1oKGllLF8rIlsiK2dlKyJdIil9KSk6KFc9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihpZSl7V1tpZV09aChmW2llXSxfKyJbIitKU09OLnN0cmluZ2lmeShp''@;'; put 'put ''ZSkrIl0iKX0pKSxXKSl9KGEsIiQiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPXdyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5neC1qc29uLXZpZXdlciJdXSxpbnB1dHM6e2pzb246Impzb24iLGV4cGFuZGVkOiJleHBhbmRl''@;'; put 'put ''ZCIsZGVwdGg6ImRlcHRoIixfY3VycmVudERlcHRoOiJfY3VycmVudERlcHRoIn0sb3V0cHV0czp7c2VnbWVudExpbmtDbGlja2VkOiJzZWdtZW50TGlua0NsaWNrZWQifSxmZWF0dXJlczpbdmFdLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzEsIm5neC1qc29uLXZpZXdlciJdLFszLCJuZ0Ns''@;'; put 'put ''YXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdDbGFzcyJdLFszLCJuZ0NsYXNzIiwiY2xpY2siXSxbImNsYXNzIiwidG9nZ2xlciIsNCwibmdJZiJdLFsxLCJzZWdtZW50LWtleSJdLFsxLCJzZWdtZW50LXNlcGFyYXRvciJdLFsiY2xhc3MiLCJzZWdtZW50LXZhbHVlIiwzLCJjbGlj''@;'; put 'put ''ayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjaGlsZHJlbiIsNCwibmdJZiJdLFsxLCJ0b2dnbGVyIl0sWzEsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIl0sWzEsImNoaWxkcmVuIl0sWzMsImpzb24iLCJleHBhbmRlZCIsImRlcHRoIiwiX2N1cnJlbnREZXB0aCIsInNlZ21lbnRMaW5rQ2xpY2tl''@;'; put 'put ''ZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKG1lKDAsInNlY3Rpb24iLDApLFFlKDEsVXR0LDksMTEsInNlY3Rpb24iLDEpLHllKCkpLDImYSYmKENlKDEpLFJlKCJuZ0Zvck9mIixkLnNlZ21lbnRzKSl9LGRlcGVuZGVuY2llczpbdWMseHMsWmksY10sc3R5bGVzOlsnQGNoYXJz''@;'; put 'put ''ZXQgIlVURi04Ijsubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LWZhbWlseTp2YXIoLS1uZ3gtanNvbi1mb250LWZhbWlseSwgbW9ub3NwYWNlKTtmb250LXNpemU6dmFyKC0tbmd4LWpzb24tZm9udC1zaXplLCAxZW0pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3Zl''@;'; put 'put ''cmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4O21hcmdpbjoxcHggMXB4IDFweCAxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVu''@;'; put 'put ''dC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDotMTRweDttYXJnaW4tdG9wOjNweDtmb250LXNpemU6LjhlbTtsaW5lLWhlaWdodDoxLjJlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29s''@;'; put 'put ''b3I6dmFyKC0tbmd4LWpzb24tdG9nZ2xlciwgIzc4Nzg3OCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XTphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiJcXDI1YmEiO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xcyBlYXNlLWlufS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWtleSwgIzRFMTg3Qyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWlu''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXNlcGFyYXRvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc2VwYXJhdG9yLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXZhbHVlLCAjMDAwKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5jaGlsZHJlbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtc3RyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXN0cmluZywgI0ZGNkI2Qil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1t''@;'; put 'put ''YWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udW1iZXIsICMwMDk2ODgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1ib29sZWFuW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWJvb2xlYW4sICNCOTM4QTQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21l''@;'; put 'put ''bnQtdHlwZS1kYXRlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWRhdGUsICMwNTY2OEQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1hcnJheSwgIzk5OSl9Lm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1vYmpl''@;'; put 'put ''Y3QsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv''@;'; put 'put ''cjp2YXIoLS1uZ3gtanNvbi1mdW5jdGlvbiwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbGluaywgIzlCNTlCNil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAu''@;'; put 'put ''c2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbC1iZywgcmVkKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50''@;'; put 'put ''LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24t''@;'; put 'put ''dW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpz''@;'; put 'put ''b24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4''@;'; put 'put ''cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9J119KSxjfSkoKSxZdHQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXZpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1taSh7aW1wb3J0czpbb29dfSksY30pKCksV3R0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe2lmKCFhLmluY2x1ZGVzKCIvIikpcmV0dXJuIGE7bGV0IGQ9IiI7Y29uc3QgaD1hLnNwbGl0''@;'; put 'put ''KCIvIik7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspaWYoIiIhPT1oW2ZdKXtjb25zdCBfPWhbZl07ZCs9Ii8iK18saFtmXT1gPGEgaHJlZj0ke2R9PiR7X308L2E+YH1yZXR1cm4gaC5qb2luKCIvIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NXBpcGU9TmEoe25hbWU6ImxpbmtpbnplIix0eXBlOmMscHVyZTohMH0pLGN9KSgpLEd0dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKX0sYy5cdTAyNzVwaXBlPU5hKHtuYW1lOiJwcmV0dHlqc29uIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2Z1bmN0aW9uICR0dChjLGwpe2lmKDEmYyYmKG1lKDAsIm9wdGlvbiIsMjIpLE5lKDEpLHllKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4YygidmFsdWUiLGEudmFsdWUp''@;'; put 'put ''LENlKDEpLGdyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBxdHQoYyxsKXtpZigxJmMmJihtZSgwLCJvcHRncm91cCIsMjApLFFlKDEsJHR0LDIsMiwib3B0aW9uIiwyMSksYmEoMiwia2V5dmFsdWUiKSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1WZSgpO1JlKCJsYWJlbCIs''@;'; put 'put ''YS5rZXkpLENlKDEpLFJlKCJuZ0Zvck9mIixVbCgyLDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gS3R0KGMsbCl7MSZjJiYobWUoMCwicCIsMjMpLE5lKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSx5ZSgpKX1mdW5jdGlvbiBYdHQoYyxsKXsxJmMmJnF0KDAs''@;'; put 'put ''ImNsci1zcGlubmVyIiwyNCl9ZnVuY3Rpb24gSnR0KGMsbCl7MSZjJiZxdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIFF0dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0''@;'; put 'put ''dXJuIGgubGlua3NTZWFyY2g9IiIsanQoaC5saW5rc0xpc3RPbkZpbHRlcigpKX0pLHllKCl9fWZ1bmN0aW9uIGVudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDI1KSgxLCJkaXYiLDI2KSgyLCJpbnB1dCIsMjcsMjgpLHh0KCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saW5rc1NlYXJjaD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5saW5rc0xpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxKdHQsMSwwLCJjbHItaWNvbiIsMjkpLFFlKDUsUXR0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDMwKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saW5rc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdG50KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIsMzQpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmVuZHBvaW50TGlua3MpKX0pKCJjbHJF''@;'; put 'put ''eHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLmxpbmtPbkNsaWNrKGgp''@;'; put 'put ''KX0pLHF0KDIsImNsci1pY29uIiwzNiksTmUoMykseWUoKSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxqYygiICIsYS5tZXRob2QsIiAi''@;'; put 'put ''LGEucmVsLCIgIil9fWZ1bmN0aW9uIG5udChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEsdG50LDQsNCwiY2xyLXRyZWUtbm9kZSIsMzMpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gcm50KGMsbCl7MSZjJiZxdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIGludChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci1pY29uIiwzMikseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoMik7cmV0dXJuIGguaXRlbXNTZWFyY2g9IiIsanQoaC5pdGVtc0xpc3RPbkZpbHRlcigp''@;'; put 'put ''KX0pLHllKCl9fWZ1bmN0aW9uIG9udChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDI1KSgxLCJkaXYiLDI2KSgyLCJpbnB1dCIsMzcsMzgpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pdGVtc1NlYXJj''@;'; put 'put ''aD1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoKS5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLHllKCksUWUoNCxybnQsMSwwLCJjbHItaWNvbiIsMjkpLFFlKDUsaW50LDEsMCwiY2xyLWljb24iLDMwKSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRpKDMpLGQ9VmUo''@;'; put 'put ''KTtDZSgyKSxSZSgibmdNb2RlbCIsZC5pdGVtc1NlYXJjaCksQ2UoMiksUmUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLENlKDEpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gc250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLXRyZWUtbm9kZSIs''@;'; put 'put ''MzQpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdCxfPVZlKCk7cmV0dXJuIGp0KF8udHJlZU5vZGVDbGlja2VkKGgsZixfLmVuZHBvaW50SXRlbXMpKX0pKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZl''@;'; put 'put ''KCkuJGltcGxpY2l0LmV4cGFuZGVkPWgpfSksbWUoMSwicCIsMzUpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKCkuJGltcGxpY2l0O3JldHVybiBqdChWZSgpLml0ZW1PbkNsaWNrKGgpKX0pLHF0KDIsImNsci1pY29uIiwzNiksTmUoMykseWUoKSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1WZSgpLiRpbXBsaWNpdDtSZSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpKCJjbHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIGFudChjLGwpe2lmKDEmYyYmKEJyKDApLFFlKDEs''@;'; put 'put ''c250LDQsMywiY2xyLXRyZWUtbm9kZSIsMzMpLFVyKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtDZSgxKSxSZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gbG50KGMsbCl7MSZjJiZxdCgwLCJjbHItc3Bpbm5lciIsMzkpfWZ1bmN0aW9uIGNudChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1WbigpO21lKDAsIm5neC1qc29uLXZpZXdlciIsNDkpLHh0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgzKS5vbkpzb25MaW5rQ2xpY2soaCkpfSkseWUoKX0yJmMmJlJlKCJqc29uIixWZSgzKS5lbmRwb2ludEpzb24pKCJleHBhbmRlZCIs''@;'; put 'put ''ITEpfWZ1bmN0aW9uIHVudChjLGwpe2lmKDEmYyYmKEJyKDApLE5lKDEpLGJhKDIsInByZXR0eWpzb24iKSxVcigpKSwyJmMpe2NvbnN0IGE9VmUoMyk7Q2UoMSksZ3IoIlxuICAgICAgICAgICAgIixVbCgyLDEsYS5lbmRwb2ludEpzb24pLCJcbiAgICAgICAgICAiKX19ZnVuY3Rpb24gZG50''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoQnIoMCksTmUoMSwiXG4gICAgICAgICAgIiksUWUoMixjbnQsMSwyLCJuZ3gtanNvbi12aWV3ZXIiLDQ4KSxOZSgzLCJcbiAgICAgICAgICAiKSxRZSg0LHVudCwzLDMsIm5nLWNvbnRhaW5lciIsMTkpLE5lKDUsIlxuICAgICAgICAiKSxVcigpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9VmUoMik7Q2UoMiksUmUoIm5nSWYiLCFhLnJhd0pzb24pLENlKDIpLFJlKCJuZ0lmIixhLnJhd0pzb24pfX1mdW5jdGlvbiBobnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTtCcigwKSxtZSgxLCJkaXYiLDQwKSgyLCJzcGFuIiw0MSksTmUoMywiIEdFVCAiKSxtZSg0LCJwIiw0Miks''@;'; put 'put ''eHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSksanQoVmUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGJhKDUsImxpbmtpbnplIikseWUoKSxtZSg2LCJidXR0b24iLDE0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkuY29weUJyZWFkY3J1bXMo''@;'; put 'put ''KSl9KSxxdCg3LCJjbHItaWNvbiIsMTUpLHllKCkoKSxtZSg4LCJkaXYiLDQzKSg5LCJjbHItaW5wdXQtY29udGFpbmVyIiwxMikoMTAsImxhYmVsIiksTmUoMTEsIlN0YXJ0IikseWUoKSxtZSgxMiwiaW5wdXQiLDQ0KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0''@;'; put 'put ''KGEpLGp0KFZlKCkuZW5kcG9pbnQuc3RhcnQ9aCl9KSx5ZSgpKCksbWUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDEyKSgxNCwibGFiZWwiKSxOZSgxNSwiTGltaXQiKSx5ZSgpLG1lKDE2LCJpbnB1dCIsNDQpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gQnQoYSks''@;'; put 'put ''anQoVmUoKS5lbmRwb2ludC5saW1pdD1oKX0pLHllKCkoKSxtZSgxNywiYnV0dG9uIiw0NSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmFwcGx5UXVlcnlQYXJhbXMoKSl9KSxxdCgxOCwiY2xyLWljb24iLDQ2KSx5ZSgpKCkoKSxtZSgxOSwicHJlIiw0Nyks''@;'; put 'put ''TmUoMjAsIiAgICAgICAgIiksUWUoMjEsZG50LDYsMiwibmctY29udGFpbmVyIiwxOSksTmUoMjIsIlxuICAgICAgIikseWUoKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgpO0NlKDQpLFJlKCJpbm5lckhUTUwiLFVsKDUsNyxhLmVuZHBvaW50LnVybCkscTIpLENlKDgpLFJlKCJuZ01vZGVs''@;'; put 'put ''IixhLmVuZHBvaW50LnN0YXJ0KSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLENlKDQpLFJlKCJuZ01vZGVsIixhLmVuZHBvaW50LmxpbWl0KSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQpLENlKDEpLFJlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5l''@;'; put 'put ''bmRwb2ludC5saW1pdCYmdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksQ2UoNCksUmUoIm5nSWYiLGEuZW5kcG9pbnRKc29uKX19bGV0IGZudD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzVml5YVNlcnZpY2U9ZCx0aGlz''@;'; put 'put ''LnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuY29sbGVjdGlvbnM9e30sdGhpcy5jb2xsZWN0aW9uPSIiLHRoaXMuZW5kcG9pbnRMaW5rcz1bXSx0aGlzLmVuZHBvaW50SXRlbXM9W10sdGhpcy5lbmRwb2ludD17dXJsOiIiLHN0YXJ0Oi0xLGxpbWl0Oi0xfSx0aGlzLmVu''@;'; put 'put ''ZHBvaW50TG9hZGluZz0hMSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMucmF3SnNvbj0hMSx0aGlzLmxpbmtzU2VhcmNoPSIiLHRoaXMuaXRlbXNTZWFyY2g9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWd9bmdPbkluaXQoKXt0aGlzLnNhc2pzQ29uZmlnPXRo''@;'; put 'put ''aXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuY29sbGVjdGlvbnM9dGhpcy5zYXNWaXlhU2VydmljZS5nZXRBbGxDb2xsZWN0aW9ucygpfWxpbmtzTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50TGlua3MsdGhp''@;'; put 'put ''cy5saW5rc1NlYXJjaCwicmVsIiksR24udml5YUFwaS5saW5rc3NTZWFyY2g9dGhpcy5saW5rc1NlYXJjaH1pdGVtc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5lbmRwb2ludEl0ZW1zLHRoaXMuaXRlbXNTZWFyY2gsIm5hbWUiKSxHbi52''@;'; put 'put ''aXlhQXBpLml0ZW1zU2VhcmNoPXRoaXMuaXRlbXNTZWFyY2h9bGlua09uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEuaHJlZil9aXRlbU9uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEubGlua3NbMF0uaHJlZil9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0''@;'; put 'put ''bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9dXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl7R24udml5YUFwaS5z''@;'; put 'put ''ZWxlY3RlZENvbGxlY3Rpb249dGhpcy5jb2xsZWN0aW9uLHRoaXMuZW5kcG9pbnQudXJsPXRoaXMuY29sbGVjdGlvbix0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlDb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbikuc3Vic2NyaWJlKGE9Pnt0aGlz''@;'; put 'put ''LmVuZHBvaW50TGlua3M9YS5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9YS5pdGVtcz9hLml0ZW1zOltdLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5lbmRwb2ludEpzb249YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWEuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1hLmxpbWl0fSxh''@;'; put 'put ''PT57dGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMTtsZXQgZD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjthLm1lc3NhZ2UmJihkPWEubWVzc2FnZSksYS5lcnJvciYmKGEuZXJyb3IubWVzc2FnZSYmKGQ9YS5lcnJvci5tZXNzYWdlKSxhLmVycm9yLnJlbWVkaWF0aW9u''@;'; put 'put ''JiYoZD1gJHtkfVxuJHthLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGQsbnVsbCwiSFRUUCBFcnJvciIpfSl9b25Kc29uTGlua0NsaWNrKGEpe3RoaXMubG9hZFVybChhKX1vbkpzb25DbGljayhhKXtpZihhLnByZXZlbnREZWZh''@;'; put 'put ''dWx0KCksIkEiPT09YS5zcmNFbGVtZW50LnRhZ05hbWUpe2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX19b25CcmVhZGN1bXNDbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIWEuc3JjRWxlbWVudC5ocmVm''@;'; put 'put ''KXJldHVybjtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9Y29weUpzb24oKXt0aGlzLmVuZHBvaW50SnNvbiYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5lbmRwb2lu''@;'; put 'put ''dEpzb24sbnVsbCwyKSl9Y29weUJyZWFkY3J1bXMoKXt0aGlzLmVuZHBvaW50JiZ0aGlzLmVuZHBvaW50LnVybCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5lbmRwb2ludC51cmwpfWFwcGx5UXVlcnlQYXJhbXMoKXtjb25zdCBhPXRoaXMuZW5kcG9pbnQuc3RhcnQsZD10''@;'; put 'put ''aGlzLmVuZHBvaW50LmxpbWl0LGg9YD8ke3ZvaWQgMCE9PWE/InN0YXJ0PSIrYToiIn0ke3ZvaWQgMCE9PWQ/IiZsaW1pdD0iK2Q6IiJ9YCxmPWAke3RoaXMuZW5kcG9pbnQudXJsLnNwbGl0KCI/IilbMF19JHtofWA7dGhpcy5sb2FkVXJsKGYpfWxvYWRVcmwoYSl7dGhpcy5lbmRwb2ludExv''@;'; put 'put ''YWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeVVybChhKS5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kcG9pbnRMaW5rcz1kLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1kLml0ZW1zP2QuaXRlbXM6W10sdGhpcy5lbmRwb2ludEpzb249ZCx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0''@;'; put 'put ''aGlzLmVuZHBvaW50LnVybD1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9ZC5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWQubGltaXR9LGQ9Pnt0aGlzLmVuZHBvaW50TG9hZGluZz0hMTtsZXQgaD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtkLm1lc3NhZ2UmJihoPWQu''@;'; put 'put ''bWVzc2FnZSksZC5lcnJvciYmKGQuZXJyb3IubWVzc2FnZSYmKGg9ZC5lcnJvci5tZXNzYWdlKSxkLmVycm9yLnJlbWVkaWF0aW9uJiYoaD1gJHtofVxuJHtkLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGgsbnVsbCwiSFRUUCBF''@;'; put 'put ''cnJvciIpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHR0KEFjKSx0dChIdHQpLHR0KG9hKSx0dCh2bCkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJj''@;'; put 'put ''b250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbMSwiYXBpLWNvbGxlY3Rpb24tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiXSxbMywibGFiZWwiLDQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwi''@;'; put 'put ''bmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImgtMTAwIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJ3LTEwMCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInNpdGlvbi1y''@;'; put 'put ''ZWxhdGl2ZSJdLFsxLCJqc29uLXRvZ2dsZSIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibS0wIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t''@;'; put 'put ''bGluayIsImJ0bi1zbSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbMSwidy0xMDAiLCJsaWdodCJdLFs0LCJuZ0lmIl0sWzMsImxhYmVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2Yi''@;'; put 'put ''XSxbMywidmFsdWUiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRv''@;'; put 'put ''Y29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiXSxbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0s''@;'; put 'put ''WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiXSxbMSwibS0wIiwi''@;'; put 'put ''Y3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSIsImtleXVwIl0sWyJz''@;'; put 'put ''ZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsiY2xyU21hbGwiLCIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwi''@;'; put 'put ''ZW5kcG9pbnQtYnJlYWRjcnVtcyIsMywiaW5uZXJIVE1MIiwiY2xpY2siXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsInF1ZXJ5LXBhcmFtcyJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwzLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiZGlzYWJsZWQiLCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImpzb24tYXJlYSJdLFsiY2xhc3MiLCJkLWJsb2NrIiwzLCJqc29uIiwiZXhwYW5kZWQiLCJzZWdtZW50TGlua0NsaWNrZWQiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobWUoMCwiYXBwLXNpZGViYXIiKSgxLCJkaXYiLDApKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSxOZSg0''@;'; put 'put ''LCJBUEkgQ29sbGVjdGlvbiIpLHllKCksbWUoNSwic2VsZWN0IiwxKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuY29sbGVjdGlvbj1mfSkoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC51cGRhdGVTZWxlY3RlZENvbGxlY3Rpb24oKX0pLFFlKDYscXR0LDMs''@;'; put 'put ''NCwib3B0Z3JvdXAiLDIpLGJhKDcsImtleXZhbHVlIikseWUoKSgpKCksUWUoOCxLdHQsMiwwLCJwIiwzKSxtZSg5LCJkaXYiLDQpLFFlKDEwLFh0dCwxLDAsImNsci1zcGlubmVyIiw1KSx5ZSgpLG1lKDExLCJjbHItdHJlZSIpLFFlKDEyLGVudCw2LDMsImNsci10cmVlLW5vZGUiLDYpLFFl''@;'; put 'put ''KDEzLG5udCwyLDEsIm5nLWNvbnRhaW5lciIsNykseWUoKSxtZSgxNCwiY2xyLXRyZWUiKSxRZSgxNSxvbnQsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSxRZSgxNixhbnQsMiwxLCJuZy1jb250YWluZXIiLDcpLHllKCkoKSxtZSgxNywiZGl2Iiw4KSgxOCwiZGl2Iiw5KSgxOSwiZGl2IiwxMCko''@;'; put 'put ''MjAsImRpdiIsMTEpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTIpKDIyLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgyMywiaW5wdXQiLDEzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQucmF3SnNvbj1mfSkseWUoKSxtZSgyNCwibGFiZWwiKSxOZSgyNSwiUkFX''@;'; put 'put ''IEpzb24iKSx5ZSgpKCkoKSxtZSgyNiwiYnV0dG9uIiwxNCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNvcHlKc29uKCl9KSxxdCgyNywiY2xyLWljb24iLDE1KSx5ZSgpKCksbWUoMjgsImg0IiwxNiksTmUoMjksIiBBUEkgRXhwbG9yZXIgIiksUWUoMzAsbG50LDEsMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDE3KSx5ZSgpKCkscXQoMzEsImhyIiwxOCksUWUoMzIsaG50LDIzLDksIm5nLWNvbnRhaW5lciIsMTkpLHllKCkoKSksMiZhJiYoQ2UoNSksUmUoIm5nTW9kZWwiLGQuY29sbGVjdGlvbiksQ2UoMSksUmUoIm5nRm9yT2YiLFVsKDcsMTEsZC5jb2xsZWN0aW9ucykpLENlKDIp''@;'; put 'put ''LFJlKCJuZ0lmIixkLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFkLmNvbGxlY3Rpb25Mb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5jb2xsZWN0aW9uTG9hZGluZyksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZW5kcG9p''@;'; put 'put ''bnRMaW5rcyksQ2UoMiksUmUoIm5nSWYiLGQuZW5kcG9pbnRJdGVtcy5sZW5ndGg+MCksQ2UoMSksUmUoIm5nRm9yT2YiLGQuZW5kcG9pbnRJdGVtcyksQ2UoNyksUmUoIm5nTW9kZWwiLGQucmF3SnNvbiksQ2UoNyksUmUoIm5nSWYiLGQuZW5kcG9pbnRMb2FkaW5nKSxDZSgyKSxSZSgibmdJ''@;'; put 'put ''ZiIsZC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbeHMsWmksbDEsYzEsV2EsYUUsUzAsTTAsQnMsT3MsZGQsZzEsa2EsWnUsVXMsRDAsRDgsVDAsZjEsakYsTjgsSDgsdTIsbjMsWnR0LGR4LFd0dCxHdHRdLHN0eWxlczpbIi5hcGktY29sbGVjdGlvbi1kcm9wZG93bltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJm''@;'; put 'put ''bG93OmF1dG99Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcntoZWlnaHQ6MTAwJX0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4''@;'; put 'put ''LWpzb24tdmlld2VyPi5uZ3gtanNvbi12aWV3ZXJ7b3ZlcmZsb3c6YXV0b30uanNvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDttYXJnaW46MH0uZW5kcG9pbnQtYnJlYWRjcnVtc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAw''@;'; put 'put ''IDEwcHh9LnF1ZXJ5LXBhcmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NzBweH0iXX0pLGN9KSgpO2NvbnN0IHBudD1uZXcgTWkoIldpbmRvd1Rva2VuIix0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRvY3VtZW50P3twcm92aWRlZElu''@;'; put 'put ''OiJyb290IixmYWN0b3J5OigpPT53aW5kb3d9Ontwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57fX0pO2xldCBnbnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLmRvY3VtZW50PWQsdGhpcy53aW5kb3c9aCx0aGlzLmNvcHlTdWJqZWN0''@;'; put 'put ''PW5ldyBiZSx0aGlzLmNvcHlSZXNwb25zZSQ9dGhpcy5jb3B5U3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLmNvbmZpZz17fX1jb25maWd1cmUoYSl7dGhpcy5jb25maWc9YX1jb3B5KGEpe2lmKCF0aGlzLmlzU3VwcG9ydGVkfHwhYSlyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKHtp''@;'; put 'put ''c1N1Y2Nlc3M6ITEsY29udGVudDphfSk7Y29uc3QgZD10aGlzLmNvcHlGcm9tQ29udGVudChhKTtyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKGQ/e2NvbnRlbnQ6YSxpc1N1Y2Nlc3M6ZH06e2lzU3VjY2VzczohMSxjb250ZW50OmF9KX1nZXQgaXNTdXBwb3J0ZWQoKXtyZXR1cm4hIXRo''@;'; put 'put ''aXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkJiYhIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkKCJjb3B5IikmJiEhdGhpcy53aW5kb3d9aXNUYXJnZXRWYWxpZChhKXtpZihhIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8YSBpbnN0YW5jZW9mIEhUTUxU''@;'; put 'put ''ZXh0QXJlYUVsZW1lbnQpe2lmKGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXRocm93IG5ldyBFcnJvcignSW52YWxpZCAidGFyZ2V0IiBhdHRyaWJ1dGUuIFBsZWFzZSB1c2UgInJlYWRvbmx5IiBpbnN0ZWFkIG9mICJkaXNhYmxlZCIgYXR0cmlidXRlJyk7cmV0dXJuITB9dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJUYXJnZXQgc2hvdWxkIGJlIGlucHV0IG9yIHRleHRhcmVhIil9Y29weUZyb21JbnB1dEVsZW1lbnQoYSxkPSEwKXt0cnl7dGhpcy5zZWxlY3RUYXJnZXQoYSk7Y29uc3QgaD10aGlzLmNvcHlUZXh0KCk7cmV0dXJuIHRoaXMuY2xlYXJTZWxlY3Rpb24oZD9hOnZvaWQgMCx0aGlz''@;'; put 'put ''LndpbmRvdyksaCYmdGhpcy5pc0NvcHlTdWNjZXNzSW5JRTExKCl9Y2F0Y2h7cmV0dXJuITF9fWlzQ29weVN1Y2Nlc3NJbklFMTEoKXtjb25zdCBhPXRoaXMud2luZG93LmNsaXBib2FyZERhdGE7cmV0dXJuIShhJiZhLmdldERhdGEmJiFhLmdldERhdGEoIlRleHQiKSl9Y29weUZyb21Db250''@;'; put 'put ''ZW50KGEsZD10aGlzLmRvY3VtZW50LmJvZHkpe2lmKHRoaXMudGVtcFRleHRBcmVhJiYhZC5jb250YWlucyh0aGlzLnRlbXBUZXh0QXJlYSkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLCF0aGlzLnRlbXBUZXh0QXJlYSl7dGhpcy50ZW1w''@;'; put 'put ''VGV4dEFyZWE9dGhpcy5jcmVhdGVUZW1wVGV4dEFyZWEodGhpcy5kb2N1bWVudCx0aGlzLndpbmRvdyk7dHJ5e2QuYXBwZW5kQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ29udGFpbmVyIHNob3VsZCBiZSBhIERvbSBlbGVtZW50Iil9fXRoaXMudGVt''@;'; put 'put ''cFRleHRBcmVhLnZhbHVlPWE7Y29uc3QgaD10aGlzLmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGVtcFRleHRBcmVhLCExKTtyZXR1cm4gdGhpcy5jb25maWcuY2xlYW5VcEFmdGVyQ29weSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCks''@;'; put 'put ''aH1kZXN0cm95KGE9dGhpcy5kb2N1bWVudC5ib2R5KXt0aGlzLnRlbXBUZXh0QXJlYSYmKGEucmVtb3ZlQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpLHRoaXMudGVtcFRleHRBcmVhPXZvaWQgMCl9c2VsZWN0VGFyZ2V0KGEpe3JldHVybiBhLnNlbGVjdCgpLGEuc2V0U2VsZWN0aW9uUmFuZ2Uo''@;'; put 'put ''MCxhLnZhbHVlLmxlbmd0aCksYS52YWx1ZS5sZW5ndGh9Y29weVRleHQoKXtyZXR1cm4gdGhpcy5kb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNsZWFyU2VsZWN0aW9uKGEsZCl7YSYmYS5mb2N1cygpLGQuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpfWNyZWF0ZVRlbXBU''@;'; put 'put ''ZXh0QXJlYShhLGQpe2NvbnN0IGg9InJ0bCI9PT1hLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRpciIpO2xldCBmO3JldHVybiBmPWEuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxmLnN0eWxlLmZvbnRTaXplPSIxMnB0IixmLnN0eWxlLmJvcmRlcj0iMCIsZi5zdHlsZS5wYWRk''@;'; put 'put ''aW5nPSIwIixmLnN0eWxlLm1hcmdpbj0iMCIsZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGVbaD8icmlnaHQiOiJsZWZ0Il09Ii05OTk5cHgiLGYuc3R5bGUudG9wPShkLnBhZ2VZT2Zmc2V0fHxhLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKyJweCIsZi5zZXRBdHRyaWJ1''@;'; put 'put ''dGUoInJlYWRvbmx5IiwiIiksZn1wdXNoQ29weVJlc3BvbnNlKGEpe3RoaXMuY29weVN1YmplY3Qub2JzZXJ2ZXJzLmxlbmd0aD4wJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNvcHlTdWJqZWN0Lm5leHQoYSl9KX1wdXNoQ29weVJlcG9uc2UoYSl7dGhpcy5wdXNoQ29weVJlc3BvbnNl''@;'; put 'put ''KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShhcihObyksYXIoTHMpLGFyKHBudCw4KSl9LGMuXHUwMjc1cHJvdj1ocih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksbW50PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5uZ1pvbmU9YSx0aGlzLmhvc3Q9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbGlwYm9hcmRTcnY9Zix0aGlzLmNiT25TdWNjZXNzPW5ldyBFcix0aGlzLmNiT25FcnJvcj1uZXcgRXIsdGhpcy5vbkNsaWNrPV89Pnt0aGlzLmNsaXBib2FyZFNy''@;'; put 'put ''di5pc1N1cHBvcnRlZD90aGlzLnRhcmdldEVsbSYmdGhpcy5jbGlwYm9hcmRTcnYuaXNUYXJnZXRWYWxpZCh0aGlzLnRhcmdldEVsbSk/dGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50YXJnZXRFbG0pLHRoaXMudGFyZ2V0RWxt''@;'; put 'put ''LnZhbHVlLF8pOnRoaXMuY2JDb250ZW50JiZ0aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUNvbnRlbnQodGhpcy5jYkNvbnRlbnQsdGhpcy5jb250YWluZXIpLHRoaXMuY2JDb250ZW50LF8pOnRoaXMuaGFuZGxlUmVzdWx0KCExLHZvaWQgMCxfKX19bmdPbklu''@;'; put 'put ''aXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuY2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiY2xpY2siLHRoaXMub25DbGljayl9KX1uZ09uRGVzdHJveSgpe3RoaXMuY2xpY2tMaXN0ZW5lciYmdGhp''@;'; put 'put ''cy5jbGlja0xpc3RlbmVyKCksdGhpcy5jbGlwYm9hcmRTcnYuZGVzdHJveSh0aGlzLmNvbnRhaW5lcil9aGFuZGxlUmVzdWx0KGEsZCxoKXtsZXQgZj17aXNTdWNjZXNzOmEsY29udGVudDpkLHN1Y2Nlc3NNZXNzYWdlOnRoaXMuY2JTdWNjZXNzTXNnLGV2ZW50Omh9O2E/dGhpcy5jYk9uU3Vj''@;'; put 'put ''Y2Vzcy5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uU3VjY2Vzcy5lbWl0KGYpfSk6dGhpcy5jYk9uRXJyb3Iub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPbkVycm9yLmVtaXQoZil9KSx0aGlzLmNsaXBib2FyZFNydi5wdXNoQ29weVJlc3Bv''@;'; put 'put ''bnNlKGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChObyksdHQoTmkpLHR0KEZvKSx0dChnbnQpKX0sYy5cdTAyNzVkaXI9Q3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmd4Q2xpcGJvYXJkIiwiIl1dLGlucHV0czp7dGFyZ2V0RWxtOlsi''@;'; put 'put ''bmd4Q2xpcGJvYXJkIiwidGFyZ2V0RWxtIl0sY29udGFpbmVyOiJjb250YWluZXIiLGNiQ29udGVudDoiY2JDb250ZW50IixjYlN1Y2Nlc3NNc2c6ImNiU3VjY2Vzc01zZyJ9LG91dHB1dHM6e2NiT25TdWNjZXNzOiJjYk9uU3VjY2VzcyIsY2JPbkVycm9yOiJjYk9uRXJyb3IifX0pLGN9KSgp''@;'; put 'put ''LHZudD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltvb119KSxjfSkoKTt2YXIgX250PUYoNTE3MTQpO2xldCBibnQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t0cmFuc2Zvcm0oYSwuLi5kKXtjb25zdCBoPXBhcnNlSW50KGRbMF0pfHwyLGY9Im51bWJlciIhPXR5cGVvZiBhP3BhcnNlSW50KGEpOmE7cmV0dXJuKDAsX250LlIpKGYsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXBp''@;'; put 'put ''cGU9TmEoe25hbWU6ImNvbnZlcnRTaXplIix0eXBlOmMscHVyZTohMH0pLGN9KSgpO2NvbnN0IHludD1bInF1ZXJ5RmlsdGVyIl07ZnVuY3Rpb24gd250KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw1MCkscXQoMSwiY2xyLXNwaW5uZXIiLDUxKSx5ZSgpKX1mdW5jdGlvbiBDbnQoYyxsKXsxJmMm''@;'; put 'put ''JnF0KDAsImNsci1pY29uIiw1OCl9ZnVuY3Rpb24gU250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiY2xyLWljb24iLDU5KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsanQoaC5saWJyYXJ5T25G''@;'; put 'put ''aWx0ZXIoKSl9KSx5ZSgpfX1mdW5jdGlvbiBNbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItdHJlZS1ub2RlIiw1MikoMSwiZGl2Iiw1MykoMiwiaW5wdXQiLDU0LDU1KSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIEJ0KGEpLGp0KFZlKCkubGli''@;'; put 'put ''cmFyaWVzU2VhcmNoPWgpfSkoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLHllKCksUWUoNCxDbnQsMSwwLCJjbHItaWNvbiIsNTYpLFFlKDUsU250LDEsMCwiY2xyLWljb24iLDU3KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBhPSRp''@;'; put 'put ''KDMpLGQ9VmUoKTtDZSgyKSxSZSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLENlKDIpLFJlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHhudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDU4KX1mdW5j''@;'; put 'put ''dGlvbiBFbnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9Vm4oKTttZSgwLCJjbHItaWNvbiIsNTkpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtCdChhKSxWZSgpO2NvbnN0IGg9JGkoMyksZj1WZSgyKS4kaW1wbGljaXQsXz1WZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLGp0''@;'; put 'put ''KF8udHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLHllKCl9fWZ1bmN0aW9uIGtudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21lKDAsImNsci10cmVlLW5vZGUiLDUyKSgxLCJkaXYiLDUzKSgyLCJpbnB1dCIsNjQsNjUpLHh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1''@;'; put 'put ''cm4gQnQoYSksanQoVmUoMikuJGltcGxpY2l0LnNlYXJjaFN0cmluZz1oKX0pKCJrZXl1cCIsZnVuY3Rpb24oKXtCdChhKTtjb25zdCBoPVZlKDIpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSkseWUoKSxRZSg0LHhudCwxLDAsImNsci1pY29u''@;'; put 'put ''Iiw1NiksUWUoNSxFbnQsMSwwLCJjbHItaWNvbiIsNTcpLHllKCkoKX1pZigyJmMpe2NvbnN0IGE9JGkoMyksZD1WZSgyKS4kaW1wbGljaXQ7Q2UoMiksUmUoImlkIiwic2VhcmNoXyIrZC5MSUJSQVJZUkVGKSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLENlKDIpLFJlKCJuZ0lmIixhLnZh''@;'; put 'put ''bHVlLmxlbmd0aDwxKSxDZSgxKSxSZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEFudChjLGwpezEmYyYmcXQoMCwiY2xyLWljb24iLDczKX1mdW5jdGlvbiBUbnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gRG50KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPVZuKCk7bWUoMCwiYnV0dG9uIiw2OSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9VmUoKS5uZ1ZhcixmPVZlKCkuJGltcGxpY2l0LF89VmUoMikuJGltcGxpY2l0LFQ9VmUoKTtyZXR1cm4ganQoaD8iIjpULm9uVGFibGVDbGljayhmLF8pKX0pLEJyKDEsNzApLFFl''@;'; put 'put ''KDIsQW50LDEsMCwiY2xyLWljb24iLDcxKSxRZSgzLFRudCwxLDAsImNsci1pY29uIiw3MiksVXIoKSxOZSg0KSx5ZSgpfWlmKDImYyl7Y29uc3QgYT1WZSgpLm5nVmFyLGQ9VmUoKS4kaW1wbGljaXQsaD1WZSgyKS4kaW1wbGljaXQsZj1WZSgpO2RyKCJkYy1sb2NrZWQtY29udHJvbCIsYSko''@;'; put 'put ''InRhYmxlLWFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxDZSgxKSxSZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdTd2l0Y2hDYXNlIiwhMCksQ2UoMSksUmUoIm5nU3dpdGNoQ2FzZSIsITEpLENlKDEpLGdyKCIgIixkLnJlcGxhY2Uo''@;'; put 'put ''Ii1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIEludChjLGwpezEmYyYmKG1lKDAsInNwYW4iKSxOZSgxLCIgVG8gdW5sb2NrIGFsbCB0YWJsZXMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSx5ZSgpKX1mdW5jdGlvbiBMbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9v''@;'; put 'put ''bHRpcC1jb250ZW50Iiw3NSksUWUoMSxJbnQsMiwwLCJzcGFuIiwzOCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkubmdWYXI7Q2UoMSksUmUoIm5nSWYiLGEpfX1mdW5jdGlvbiBSbnQoYyxsKXtpZigxJmMmJihtZSgwLCJjbHItdG9vbHRpcCIpLFFlKDEsRG50LDUsOCwiYnV0dG9uIiw2Nyks''@;'; put 'put ''UWUoMixMbnQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw2OCkseWUoKSksMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIixhLmxlbmd0aD4wKX19ZnVuY3Rpb24gT250KGMsbCl7aWYoMSZjJiYobWUoMCwiY2xyLXRyZWUtbm9kZSIpLFFlKDEsUm50LDMsMSwi''@;'; put 'put ''Y2xyLXRvb2x0aXAiLDY2KSx5ZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVZlKDMpO0NlKDEpLFJlKCJuZ1ZhciIsYSsxPmQubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gUG50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi''@;'; put 'put ''Y2xyLXRyZWUtbm9kZSIsNjEpLHh0KCJjbGljayIsZnVuY3Rpb24oaCl7QnQoYSk7Y29uc3QgZj1WZSgpLiRpbXBsaWNpdDtyZXR1cm4ganQoVmUoKS50cmVlTm9kZUNsaWNrZWQoaCxmKSl9KSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBCdChhKSxqdChWZSgpLiRp''@;'; put 'put ''bXBsaWNpdC5leHBhbmRlZD1oKX0pLG1lKDEsInAiLDYyKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7QnQoYSk7Y29uc3QgaD1WZSgpLiRpbXBsaWNpdCxmPVZlKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixqdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxxdCgyLCJj''@;'; put 'put ''bHItaWNvbiIsNjMpLE5lKDMpLHllKCksUWUoNCxrbnQsNiw0LCJjbHItdHJlZS1ub2RlIiwyKSxRZSg1LE9udCwyLDEsImNsci10cmVlLW5vZGUiLDMpLHllKCl9aWYoMiZjKXtjb25zdCBhPVZlKCkuJGltcGxpY2l0O2RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFJlKCJjbHJFeHBh''@;'; put 'put ''bmRlZCIsYS5leHBhbmRlZCkoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxDZSgzKSxncigiICIsYS5MSUJSQVJZTkFNRSwiICIpLENlKDEpLFJlKCJuZ0lmIixhLnRhYmxlcyksQ2UoMSksUmUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gRm50KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoQnIoMCksUWUoMSxQbnQsNiw3LCJjbHItdHJlZS1ub2RlIiw2MCksVXIoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O0NlKDEpLFJlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gSG50KGMsbCl7MSZjJiYobWUoMCwiZGl2Iiw3NikoMSwi''@;'; put 'put ''c3BhbiIsNzcpLE5lKDIsIiBMb2FkaW5nLi4uICIpLHllKCkoKSl9ZnVuY3Rpb24gTm50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSkoMiwiZGl2Iiw4MCkoMywiZGl2Iiw4MSkoNCwiYnV0dG9uIiw4MikscXQoNSwiY2xyLWljb24iLDgzKSx5''@;'; put 'put ''ZSgpLG1lKDYsImgzIiw0MyksTmUoNywiRXJyb3IiKSx5ZSgpKCksbWUoOCwiZGl2IiwxMCkoOSwicCIpLE5lKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIikseWUoKSgpLG1lKDExLCJkaXYiLDIxKSgxMiwiYnV0dG9uIiw4NCkseHQoImNsaWNrIixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBCdChhKSxqdChWZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTmUoMTMsIiBPayAiKSx5ZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFZudChjLGwpezEmYyYmcXQoMCwiZGl2Iiw4NSl9ZnVuY3Rpb24gQm50KGMsbCl7MSZjJiZxdCgwLCJhcHAtcXVlcnkiLG51bGwsODYpfWZ1bmN0aW9uIGpu''@;'; put 'put ''dChjLGwpezEmYyYmKG1lKDAsImRpdiIsODcpKDEsInNwYW4iLDg4KSxOZSgyLCIgTG9hZGluZy4uLiAiKSx5ZSgpLG1lKDMsImRpdiIpKDQsImg0IiksTmUoNSwiTG9hZGluZyB0YWJsZSB2aWV3ZXIiKSx5ZSgpKCkoKSl9ZnVuY3Rpb24gem50KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7''@;'; put 'put ''bWUoMCwiY2xyLWljb24iLDExMSkseHQoImNsaWNrIixmdW5jdGlvbigpe0J0KGEpLFZlKCk7Y29uc3QgaD0kaSg1KTtyZXR1cm4ganQoVmUoMikuc2VhcmNoVGFibGUoaCkpfSkseWUoKX19ZnVuY3Rpb24gVW50KGMsbCl7MSZjJiYobWUoMCwic3BhbiIsMTEyKSxOZSgxLCIgTG9hZGluZy4u''@;'; put 'put ''LiAiKSx5ZSgpKX1mdW5jdGlvbiBabnQoYyxsKXsxJmMmJnF0KDAsImNsci1pY29uIiwxMTMpfWZ1bmN0aW9uIFludChjLGwpe2lmKDEmYyYmKG1lKDAsInNwYW4iKSxOZSgxKSxiYSgyLCJ0aG91c2FuZFNlcGFyYXRvciIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSg0KTtDZSgxKSx3NSgiICgi''@;'; put 'put ''LE01KDIsNCxhLm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gV250KGMsbCl7aWYoMSZjKXtj''@;'; put 'put ''b25zdCBhPVZuKCk7bWUoMCwiaDMiLDExNCksTmUoMSksUWUoMixZbnQsMyw3LCJzcGFuIiwzOCksbWUoMywiY2xyLWljb24iLDExNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9KSx5ZSgpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PVZlKDMpO0NlKDEpLGdyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxDZSgxKSxSZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gR250KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwi''@;'; put 'put ''YnV0dG9uIiwxMjEpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gQnQoYSksanQoVmUoNSkuZWRpdFRhYmxlKCkpfSkscXQoMSwiY2xyLWljb24iLDEyOCksbWUoMiwic3BhbiIpLE5lKDMsIkVkaXQiKSx5ZSgpKCl9fWZ1bmN0aW9uICRudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Wbigp''@;'; put 'put ''O21lKDAsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDUpLmdvVG9MaW5lYWdlKCkpfSkscXQoMSwiY2xyLWljb24iLDEyOSksbWUoMiwic3BhbiIpLE5lKDMsIkxpbmVhZ2UiKSx5ZSgpKCl9fWZ1bmN0aW9uIHFudChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1WbigpO21lKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjApKDEsImJ1dHRvbiIsMTIxKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm5ld1ZpZXdib3goKSl9KSxxdCgyLCJjbHItaWNvbiIsMTIyKSxtZSgzLCJzcGFuIiksTmUoNCwiVmlld2Jv''@;'; put 'put ''eGVzIikseWUoKSgpLFFlKDUsR250LDQsMCwiYnV0dG9uIiwxMjMpLFFlKDYsJG50LDQsMCwiYnV0dG9uIiwxMjMpLG1lKDcsImJ1dHRvbiIsMTI0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLm9wZW5RYigpKX0pLHF0KDgsImNsci1pY29uIiwxMjUpLG1l''@;'; put 'put ''KDksInNwYW4iKSxOZSgxMCwiRmlsdGVyIikseWUoKSgpLG1lKDExLCJidXR0b24iLDEyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5vcGVuRG93bmxvYWQ9ITApfSkscXQoMTIsImNsci1pY29uIiwxMjYpLG1lKDEzLCJzcGFuIiksTmUoMTQsIkRvd25s''@;'; put 'put ''b2FkIikseWUoKSgpLG1lKDE1LCJidXR0b24iLDEyMSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxxdCgxNiwiY2xyLWljb24iLDEyNyksbWUoMTcsInNwYW4iKSxOZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLHllKCkoKSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1WZSg0KTtDZSg1KSxSZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksQ2UoMSksUmUoIm5nSWYiLGEudGFibGV1cmkpfX1mdW5jdGlvbiBLbnQoYyxsKXsxJmMmJihtZSgwLCJjbHItZHJvcGRvd24iLDExNikoMSwiYnV0dG9uIiwxMTcpLHF0KDIsImNsci1pY29u''@;'; put 'put ''IiwxMTgpLE5lKDMsIiBvcHRpb25zICIpLHllKCksUWUoNCxxbnQsMTksMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDExOSkseWUoKSksMiZjJiZSZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1mdW5jdGlvbiBYbnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDEzMCkoMSwic3BhbiIp''@;'; put 'put ''LE5lKDIsIkZJTFRFUiA6ICIpLG1lKDMsImIiKSxOZSg0KSx5ZSgpKCkoKSksMiZjKXtjb25zdCBhPVZlKDMpO0NlKDQpLG9yKGEucXVlcnlUZXh0KX19Y29uc3QgSm50PWZ1bmN0aW9uKCl7cmV0dXJuWyIiLCIgIl19O2Z1bmN0aW9uIFFudChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO21l''@;'; put 'put ''KDAsImRpdiIsOTUpKDEsInNlY3Rpb24iLDk2KSgyLCJmb3JtIiw5NykoMywiZGl2Iiw5OCkoNCwiaW5wdXQiLDk5LDEwMCkseHQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe0J0KGEpO2NvbnN0IGg9JGkoNSk7cmV0dXJuIGp0KFZlKDIpLnNlYXJjaFRhYmxlKGgpKX0pLHllKCksUWUoNix6''@;'; put 'put ''bnQsMSwwLCJjbHItaWNvbiIsMTAxKSxRZSg3LFVudCwyLDAsInNwYW4iLDEwMikseWUoKSxtZSg4LCJjbHItY2hlY2tib3gtY29udGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwMykseHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBC''@;'; put 'put ''dChhKSxqdChWZSgyKS5zZWFyY2hOdW1lcmljPWgpfSkseWUoKSxtZSgxMSwibGFiZWwiKSxOZSgxMiwiTnVtZXJpYyIpLHllKCkoKSgpKCkoKSxtZSgxMywiZGl2IiwxMDQpKDE0LCJjbHItaWNvbiIsMTA1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDIpLmRh''@;'; put 'put ''dGFzZXRJbmZvPSEwKX0pLHllKCksUWUoMTUsWm50LDEsMCwiY2xyLWljb24iLDEwNiksUWUoMTYsV250LDQsMiwiaDMiLDEwNykseWUoKSxtZSgxNywiZGl2IiwxMDgpLFFlKDE4LEtudCw1LDEsImNsci1kcm9wZG93biIsMTA5KSx5ZSgpLFFlKDE5LFhudCw1LDEsImRpdiIsMTEwKSx5ZSgp''@;'; put 'put ''fWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg0KSxSZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksQ2UoMiksUmUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLENlKDEpLFJlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLENlKDMpLFJlKCJuZ01vZGVsIixhLnNlYXJj''@;'; put 'put ''aE51bWVyaWMpLENlKDUpLFJlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSxDZSgxKSxSZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLENlKDIpLFJlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFh''@;'; put 'put ''LmFib3J0QWN0aXZlKSxDZSgxKSxSZSgibmdJZiIsIjE9MSIhPT1hLnF1ZXJ5VGV4dCYmISRzKDgsSm50KS5pbmNsdWRlcyhhLnF1ZXJ5VGV4dCkmJiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gZXJ0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxMzEpLHF0KDEsImNsci1pY29uIiwxMzIpLG1l''@;'; put 'put ''KDIsImgzIiwxMzMpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSBsaWJyYXJ5IikseWUoKSgpKX1mdW5jdGlvbiB0cnQoYyxsKXsxJmMmJnF0KDAsImNsci1zcGlubmVyIiw1MSl9ZnVuY3Rpb24gbnJ0KGMsbCl7MSZjJiYobWUoMCwiZGl2IiwxNDEpLHF0KDEsImNsci1pY29uIiwxNDIpLG1lKDIs''@;'; put 'put ''ImgzIiwxMzMpLE5lKDMsIlBsZWFzZSBzZWxlY3QgYSB0YWJsZSIpLHllKCkoKSl9ZnVuY3Rpb24gcnJ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPVZuKCk7bWUoMCwicCIsMTQ1KSxOZSgxLCIgTm8gbGlicmFyeSBpbmZvIGZvdW5kLiBDbGljayAiKSxtZSgyLCJjbHItaWNvbiIsMTQ2KSx4dCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIEJ0KGEpLGp0KFZlKDQpLnJlbG9hZExpYkluZm8oKSl9KSx5ZSgpLE5lKDMsIiBidXR0b24gdG8gcmVmcmVzaC4gIikseWUoKX19ZnVuY3Rpb24gaXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJFTkdJTkU6Iiks''@;'; put 'put ''eWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5FTkdJTkU6IiIsIiAiKX19ZnVuY3Rpb24gb3J0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJM''@;'; put 'put ''SUJJRDoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQklEOiIiLCIgIil9fWZ1bmN0aW9uIHNydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE0Nyks''@;'; put 'put ''TmUoMiwiTElCTkFNRToiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkxJQk5BTUU6IiIsIiAiKX19ZnVuY3Rpb24gYXJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgx''@;'; put 'put ''LCJ0ZCIsMTQ3KSxOZSgyLCJMSUJTSVpFOiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCksYmEoNSwiY29udmVydFNpemUiKSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP1VsKDUsMSxhLmxpYmluZm9bMF0uTElCU0laRSk6IiIsIiAiKX19''@;'; put 'put ''ZnVuY3Rpb24gbHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJPV05FUlM6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5PV05FUlM6''@;'; put 'put ''IiIsIiAiKX19ZnVuY3Rpb24gY3J0KGMsbCl7aWYoMSZjJiYobWUoMCwidHIiKSgxLCJ0ZCIsMTQ3KSxOZSgyLCJQQVRIUzoiKSx5ZSgpLG1lKDMsInRkIiwxNDgpLE5lKDQpLHllKCkoKSksMiZjKXtjb25zdCBhPVZlKDUpO0NlKDQpLGdyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBd''@;'; put 'put ''LlBBVEhTOiIiLCIgIil9fWZ1bmN0aW9uIHVydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE0NyksTmUoMiwiUEVSTVM6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZvWzBdP2EubGli''@;'; put 'put ''aW5mb1swXS5QRVJNUzoiIiwiICIpfX1mdW5jdGlvbiBkcnQoYyxsKXtpZigxJmMmJihtZSgwLCJ0ciIpKDEsInRkIiwxNDcpLE5lKDIsIlNDSEVNQVM6IikseWUoKSxtZSgzLCJ0ZCIsMTQ4KSxOZSg0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSg1KTtDZSg0KSxncigiICIsYS5saWJpbmZv''@;'; put 'put ''WzBdP2EubGliaW5mb1swXS5TQ0hFTUFTOiIiLCIgIil9fWZ1bmN0aW9uIGhydChjLGwpe2lmKDEmYyYmKG1lKDAsInRyIikoMSwidGQiLDE0NyksTmUoMiwiVEFCTEVfQ05UOiIpLHllKCksbWUoMywidGQiLDE0OCksTmUoNCkseWUoKSgpKSwyJmMpe2NvbnN0IGE9VmUoNSk7Q2UoNCksZ3Io''@;'; put 'put ''IiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uVEFCTEVfQ05UOiIiLCIgIil9fWZ1bmN0aW9uIGZydChjLGwpe2lmKDEmYyYmKEJyKDApLG1lKDEsInRhYmxlIiksUWUoMixpcnQsNSwxLCJ0ciIsMzgpLFFlKDMsb3J0LDUsMSwidHIiLDM4KSxRZSg0LHNydCw1LDEsInRyIiwzOCksUWUo''@;'; put 'put ''NSxhcnQsNiwzLCJ0ciIsMzgpLFFlKDYsbHJ0LDUsMSwidHIiLDM4KSxRZSg3LGNydCw1LDEsInRyIiwzOCksUWUoOCx1cnQsNSwxLCJ0ciIsMzgpLFFlKDksZHJ0LDUsMSwidHIiLDM4KSxRZSgxMCxocnQsNSwxLCJ0ciIsMzgpLHllKCksVXIoKSksMiZjKXtjb25zdCBhPVZlKDQpO0NlKDIp''@;'; put 'put ''LFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5FTkdJTkUpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvWzBdLkxJQlNJWkUp''@;'; put 'put ''LENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLENlKDEpLFJlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRIUyksQ2UoMSksUmUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBFUk1TKSxDZSgxKSxSZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1B''@;'; put 'put ''UyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVfQ05UKX19ZnVuY3Rpb24gcHJ0KGMsbCl7aWYoMSZjJiYobWUoMCwiZGl2IiwxNDMpLFFlKDEscnJ0LDQsMCwicCIsMTQ0KSxRZSgyLGZydCwxMSw5LCJuZy1jb250YWluZXIiLDM4KSx5ZSgpKSwyJmMpe2NvbnN0''@;'; put 'put ''IGE9VmUoMyk7Q2UoMSksUmUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg8MSksQ2UoMSksUmUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg+MCl9fWZ1bmN0aW9uIGdydChjLGwpe2lmKDEmYyl7Y29uc3QgYT1WbigpO0JyKDApLG1lKDEsImRpdiIsMTM0KSxxdCgyLCJzZWN0aW9uIiw5NiksbWUo''@;'; put 'put ''MywiZGl2IiwxMzUpKDQsImgzIiwxMzYpLE5lKDUpLHllKCksbWUoNiwiY2xyLWljb24iLDExNSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBCdChhKSxqdChWZSgyKS5yZWxvYWRMaWJJbmZvKCkpfSkseWUoKSgpLHF0KDcsImRpdiIsMTA4KSx5ZSgpLG1lKDgsImRpdiIsMTM3KSxR''@;'; put 'put ''ZSg5LHRydCwxLDAsImNsci1zcGlubmVyIiwxMzgpLHllKCksUWUoMTAsbnJ0LDQsMCwiZGl2IiwxMzkpLFFlKDExLHBydCwzLDIsImRpdiIsMTQwKSxVcigpfWlmKDImYyl7Y29uc3QgYT1WZSgyKTtDZSg1KSxncigiICIsYS5saWIsIiAiKSxDZSg0KSxSZSgibmdJZiIsbnVsbD09PWEubGli''@;'; put 'put ''aW5mbyksQ2UoMSksUmUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pLENlKDEpLFJlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKX19ZnVuY3Rpb24gbXJ0KGMsbCl7MSZjJiYobWUoMCwiaDMiLDEzMyksTmUoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIpLHllKCkp''@;'; put 'put ''fWZ1bmN0aW9uIHZydChjLGwpezEmYyYmKG1lKDAsImgzIiwxMzMpLE5lKDEsIiBObyBkYXRhIGZvdW5kIGR1ZSB0byBzYXMgcmVxdWVzdCBlcnJvciAiKSx5ZSgpKX1mdW5jdGlvbiBfcnQoYyxsKXtpZigxJmMmJihtZSgwLCJkaXYiLDE0OSkscXQoMSwiY2xyLWljb24iLDE1MCksUWUoMixt''@;'; put 'put ''cnQsMiwwLCJoMyIsMTUxKSxRZSgzLHZydCwyLDAsImgzIiwxNTEpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgyKSxSZSgibmdJZiIsYS5ub0RhdGEpLENlKDEpLFJlKCJuZ0lmIixhLm5vRGF0YVJlcUVycil9fWZ1bmN0aW9uIGJydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsMTUy''@;'; put 'put ''KSxxdCgxLCJob3QtdGFibGUiLDE1MykseWUoKSksMiZjKXtjb25zdCBhPVZlKDIpO0NlKDEpLFJlKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5j''@;'; put 'put ''b2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgiY29weVBhc3RlIixhLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixhLmhvdFRhYmxlLmNvbnRleHRNZW51KSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGEuaG90VGFibGUuZHJvcGRvd25NZW51''@;'; put 'put ''KSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hla2VyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5ob3RU''@;'; put 'put ''YWJsZS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJyb3dIZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiB5cnQoYyxsKXtpZigxJmMmJihtZSgw''@;'; put 'put ''LCJwIiwxNTQpLE5lKDEpLHF0KDIsImNvbnRhY3QtbGluayIpLHllKCkpLDImYyl7Y29uc3QgYT1WZSgyKTtDZSgxKSxncigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9u''@;'; put 'put ''IHdydChjLGwpe2lmKDEmYyYmKG1lKDAsImRpdiIsODkpLFFlKDEsUW50LDIwLDksImRpdiIsOTApLFFlKDIsZXJ0LDQsMCwiZGl2Iiw5MSksUWUoMyxncnQsMTIsNCwibmctY29udGFpbmVyIiwzOCksUWUoNCxfcnQsNCwyLCJkaXYiLDkyKSxRZSg1LGJydCwyLDE4LCJkaXYiLDkzKSxtZSg2''@;'; put 'put ''LCJkaXYiKSxRZSg3LHlydCwzLDEsInAiLDk0KSx5ZSgpKCkpLDImYyl7Y29uc3QgYT1WZSgpO0NlKDEpLFJlKCJuZ0lmIixhLnRhYmxlKSxDZSgxKSxSZSgibmdJZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFSZXFFcnJ8fGEubm9EYXRhKSksQ2UoMSksUmUoIm5nSWYiLCFhLm5vRGF0''@;'; put 'put ''YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJsZSYmYS5saWIpLENlKDEpLFJlKCJuZ0lmIixhLm5vRGF0YXx8YS5ub0RhdGFSZXFFcnIpLENlKDEpLFJlKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50YWJsZSksQ2UoMiksUmUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZhLmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5ndGg+YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCBIVD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsXyxU''@;'; put 'put ''LFcsaWUsZ2Usd2Upe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT1fLHRoaXMuZXZlbnRTZXJ2aWNlPVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVcsdGhpcy5oZWxwZXJTZXJ2aWNlPWll''@;'; put 'put ''LHRoaXMubG9jYXRpb249Z2UsdGhpcy5jZGY9d2UsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBlaCx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITEs''@;'; put 'put ''dGhpcy5saWJpbmZvPW51bGwsdGhpcy50YWJsZXVyaT1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyQ29scz1bXSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5hYm9ydEFjdGl2ZT0hMSx0aGlzLnVybEZpbHRlclBrPW51bGwsdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy53ZWJRdWVy''@;'; put 'put ''eVRleHQ9IiIsdGhpcy5xdWVyeUVycj0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITEsdGhpcy5sb2FkaW5nVGFibGVWaWV3PSExLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLm5vRGF0YVJlcUVycj0hMSx0aGlzLnRhYmxlRGlzYWJs''@;'; put 'put ''ZT0hMSx0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5vcGVuRG93bmxvYWQ9ITEsdGhpcy53ZWJRdWVyeT0hMSx0aGlzLndlYlF1ZXJ5VGFiPSExLHRoaXMuZG93bmxvYWRGb3JtYXQ9IkNTViIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgcjEuU0FTanNDb25maWcsdGhpcy5zZWFyY2hMb2FkaW5n''@;'; put 'put ''PSExLHRoaXMuc2VhcmNoTnVtZXJpYz0hMSx0aGlzLm51bWJlck9mUm93cz1udWxsLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5kYXRhc2V0SW5mbz0hMSx0aGlzLmRzbWV0YT1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxp''@;'; put 'put ''Y2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGFmdGVy''@;'; put 'put ''R2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJzOkVlPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0''@;'; put 'put ''ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5m''@;'; put 'put ''bzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooRWUsWmUsb3QsZXQseXQsa3QpPT57Y29uc3QgU3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBRdCxybj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3Qgdm49dGhpcy5ob3RJbnN0YW5jZS5n''@;'; put 'put ''ZXRTZWxlY3RlZCgpfHxbXSxObj12bj92blswXVsxXTotMSxjcj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoTm4pO1F0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2NyXSxRdCYmKHJuPWBMQUJFTDogJHtRdD8ubGFiZWx9PGJyPlRZUEU6ICR7UXQ/LnR5cGV9PGJyPkxFTkdUSDogJHtR''@;'; put 'put ''dD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7UXQ/LmZvcm1hdH1gKX1yZXR1cm4gU3QuaW5uZXJIVE1MPXJuLFN0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVy''@;'; put 'put ''ZXI9bmV3IEFnLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0''@;'; put 'put ''ZXIubmF2aWdhdGUoW0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoR24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZp''@;'; put 'put ''bHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xldCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSxfPXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFy''@;'; put 'put ''YW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLF8pLnRoZW4oVD0+e1Quc2FzcGFyYW1zfHxULnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9VC52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1ULiR2aWV3ZGF0''@;'; put 'put ''YSxkLmRzbWV0YT1ULmRzbWV0YSxkLm51bWJlck9mUm93cz1ULnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PVQuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPVQuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVu''@;'; put 'put ''Z3RoP2Qubm9EYXRhPSEwOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZp''@;'; put 'put ''ZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2VydmljZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBkPWZpKGZ1bmN0aW9u''@;'; put 'put ''KihoKXthLmxpYmluZm89aC5saWJpbmZvLEduLnZpZXdlci5saWJpbmZvPWEubGliaW5mbztjb25zdCBmPWEubGlicmFyaWVzLmZpbmQoXz0+Xy5MSUJSQVJZUkVGPT09YS5saWIpO2YmJihmLmxpYmluZm89YS5saWJpbmZvKX0pO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZC5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cyl9fSgpLGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksbnVsbD09PWEubGliaW5mbyYmKGEubGliaW5mbz1bXSl9KX0pKCl9ZmlsdGVyRm4oYSl7dGhpcy5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXMuZmlsdGVyKGg9Pi0xIT09aC5MSUJSQVJZTkFNRS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpLmluZGV4T2YoYS50b0xvY2FsZUxvd2VyQ2FzZSgpKSl9ZG93bmxvYWREYXRhKCl7bGV0IGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsZD10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IFcsZj0i''@;'; put 'put ''JnR5cGU9Iit0aGlzLmRvd25sb2FkRm9ybWF0LF89IiZ0YWJsZT0iK3RoaXMudGFibGVUaXRsZSxUPSJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIjtXPXR5cGVvZiB0aGlzLnJv''@;'; put 'put ''dXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCksd2luZG93Lm9wZW4oYStoKyIvP19wcm9ncmFtPSIrZCsiL3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhIitmK18rVCsiJmZpbHRlcj0iK1cpLHRo''@;'; put 'put ''aXMub3BlbkRvd25sb2FkPSExfWRvd25sb2FkRERMKCl7bGV0IGE9dGhpcy5saWIsZD10aGlzLnRhYmxlLGg9dGhpcy5kb3dubG9hZEZvcm1hdC5yZXBsYWNlKCJfRERMIiwiIiksZj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCxfPXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IFQ9''@;'; put 'put ''dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihmK1QrIi8/X3Byb2dyYW09IitfKyIvc2VydmljZXMvcHVibGljL2dldGRkbCIrYCZkcz0ke2R9JmxpYnJlZj0ke2F9JmZsYXZvdXI9JHtofSR7IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU''@;'; put 'put ''eXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZX1gOiIifWApLHRoaXMub3BlbkRvd25sb2FkPSExfW9uQ2xpQ29tbWFuZEZvY3VzKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnRhcmdldC5zZWxlY3QoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlci5uYXZp''@;'; put 'put ''Z2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWJUYWIpfXRhYmxlRWRpdEV4aXN0cygpe2xldCBhPXt9O2E9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXM7bGV0IGQ9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVsxXSxoPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMF07cmV0dXJuISFhW2hdJiZhW2hd''@;'; put 'put ''LmluY2x1ZGVzKGQpfWdvVG9MaW5lYWdlKCl7bGV0IGQ9YC92aWV3L2xpbmVhZ2UvJHt0aGlzLnRhYmxldXJpLnNwbGl0KCJcXCIpWzFdfS9SRVZFUlNFYDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGQpfXNob3dXZWJRdWVyeSgpe2xldCBhO3RoaXMud2ViUXVlcnk9ITAsYT10eXBlb2Yg''@;'; put 'put ''dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpO2xldCBkPXdpbmRvdy5sb2NhdGlvbi5wb3J0Lmxlbmd0aD4wPyI6Iit3aW5kb3cubG9jYXRpb24ucG9ydDoiIjtjb25zdCBoPXRoaXMu''@;'; put 'put ''c2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IF89YCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9JHtkfS8ke2h9Lz9fcHJvZ3JhbT0ke3RoaXMuc2FzanNDb25maWcuYXBwTG9jfS9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0''@;'; put 'put ''YSZ0eXBlPVdFQiR7dGhpcy53ZWJRdWVyeVRhYj8iVEFCIjoiQ1NWIn0mdGFibGU9JHt0aGlzLnRhYmxlVGl0bGV9JHsiJmZpbHRlcj0iK2F9YDt0aGlzLndlYlF1ZXJ5VGV4dD1fLnJlcGxhY2UoLyAvZ2ltLCIlMjAiKX1jb3B5VG9DbGlwKCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgidGV4dGFyZWEiKTthLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsYS5zdHlsZS5sZWZ0PSIwIixhLnN0eWxlLnRvcD0iMCIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnZhbHVlPXRoaXMud2ViUXVlcnlUZXh0LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5mb2N1cygpLGEuc2VsZWN0''@;'; put 'put ''KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWNo''@;'; put 'put ''ZWNrRXhwYW5kKGEpe31jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZUkVGIT09ZC5MSUJSQVJZUkVGJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9''@;'; put 'put ''ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJpZXMsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5s''@;'; put 'put ''aWJyYXJpZXMsZCl9bGlicmFyeUV4cGFuZGVkQ2hhbmdlKGEsZCl7YSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0h''@;'; put 'put ''IWh8fCFkLmV4cGFuZGVkOnlpZWxkIGYuc2VsZWN0VGFibGUoYSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNl''@;'; put 'put ''YXJjaElucHV0XSIsXyksXyYmXy5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNl''@;'; put 'put ''cnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNl''@;'; put 'put ''TGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZmko''@;'; put 'put ''ZnVuY3Rpb24qKCl7aC5sb2FkaW5nVGFibGVzPSEwLGYudGFibGU9ITEsZi50YWJsZURpc2FibGU9ITAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hP0duLnZpZXdlci50YWJsZXNTZXQmJmQ/KGYuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITEsZi50YWJsZXM9R24udmlld2Vy''@;'; put 'put ''LnRhYmxlcyxmLmxpYmluZm89R24udmlld2VyLmxpYmluZm8pOihmLmxpYmluZm89bnVsbCx5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4oXz0+e2YuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITE7bGV0IFQ9Xy5tcHRhYmxlcy5tYXAoZnVuY3Rpb24o''@;'; put 'put ''Vyl7cmV0dXJuIFcuTUVNTkFNRX0pO2YubGliaW5mbz1fLmxpYmluZm98fFtdLGYudGFibGVzPVQsaCYmKGgudGFibGVzPVQsaC5saWJpbmZvPWYubGliaW5mbyksR24udmlld2VyLmxpYnJhcmllcz1mLmxpYnJhcmllcyxHbi52aWV3ZXIubGlicmFyeT1mLmxpYixHbi52aWV3ZXIudGFibGVz''@;'; put 'put ''PWYudGFibGVzLEduLnZpZXdlci5saWJpbmZvPWYubGliaW5mbyxHbi52aWV3ZXIudGFibGVzU2V0PSEwfSkuY2F0Y2goXz0+e2YubG9nZ2VyU2VydmljZS5lcnJvcihfKSxmLmFib3J0QWN0aXZlPSEwLGYubm9EYXRhPSEwLGYudGFibGVUaXRsZT0iIixmLnRhYmxlRGlzYWJsZT0hMH0pKTpm''@;'; put 'put ''LnRhYmxlRGlzYWJsZT0hMCxHbi52aWV3ZXIubGlicmFyeT1mLmxpYixkfHxmLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSFoLmV4cGFuZGVkfSkoKX1zZWxlY3RMaWJUYWJsZShhLGQpeyJQbGVhc2Ugc2VsZWN0IHRhYmxlIiE9PWE/KHRoaXMu''@;'; put 'put ''YWN0aW9uRGlzYWJsZT0hMSx0aGlzLmxpYlRhYj10aGlzLmxpYisiLiIrdGhpcy50YWJsZSk6dGhpcy5hY3Rpb25EaXNhYmxlPSEwLEduLnZpZXdlci50YWJsZT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmxpYlRhYil9Y2xlYXJH''@;'; put 'put ''bG9iYWxzRmlsdGVyKCl7R24udmlld2VyLmZpbHRlci5saWJkcz0iIixHbi52aWV3ZXIuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEduLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixHbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sR24udmlld2VyLmZpbHRlci5jb2xzPVtdLEduLnZpZXdl''@;'; put 'put ''ci5maWx0ZXIudmFscz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hIXRoaXMubGliVGFiJiZhKyIuIitkPT09dGhpcy5saWJUYWJ9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24udmlld2VyLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJyYXJ5UmVzZXRGaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UucmVzZXRB''@;'; put 'put ''cnJheUZpbHRlcih0aGlzLmxpYnJhcmllcyl9dmlld0RhdGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7bGV0IGg7aWYoZC5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVvZiBkLmxpYkRhdGFzZXQ+InUiKWg9ZC5saWIrIi4iK2QudGFibGU7ZWxzZSBpZih0eXBlb2YgZC5s''@;'; put 'put ''aWI+InUiJiZ0eXBlb2YgZC50YWJsZT4idSIpe2xldCBUPVtdO2lmKFQ9ZC5saWJEYXRhc2V0LnNwbGl0KCIuIiksR24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9R24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oVz0+e2Qu''@;'; put 'put ''bGlicmFyaWVzPVcuc2FzbGlic30pLmNhdGNoKFc9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVyl9KSxkLmxpYj1UWzBdLEduLnZpZXdlci5zdGFydHVwU2V0KWQudGFibGVzPUduLnZpZXdlci50YWJsZXM7ZWxzZXtsZXQgVz1kLmxpYnJhcmllcy5maW5kKGllPT5pZS5MSUJSQVJZUkVGLnRv''@;'; put 'put ''TG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKGllPT57ZC50YWJsZXM9aWUubXB0YWJsZXMubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UuTUVNTkFNRX0pLFcudGFibGVzPWQudGFibGVzLEdu''@;'; put 'put ''LnZpZXdlci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsR24udmlld2VyLnRhYmxlcz1kLnRhYmxlcyxHbi52aWV3ZXIuc3RhcnR1cFNldD0hMH0pLmNhdGNoKGllPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKGllKX0pfWQudGFibGU9VFsxXSxkLnRhYmxlRmxhZz0hMSxoPWQubGliRGF0YXNldCxk''@;'; put 'put ''LmxpYlRhYj1ofWVsc2UgR24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9R24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oVD0+e2QubGlicmFyaWVzPVQuc2FzbGlic30pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJy''@;'; put 'put ''b3IoVCl9KSx0eXBlb2YgZC50YWJsZTwidSImJihHbi52aWV3ZXIuc3RhcnR1cFNldD9kLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oVD0+e2QudGFibGVzPVQubXB0YWJsZXMubWFwKGZ1bmN0aW9uKFcpe3Jl''@;'; put 'put ''dHVybiBXLk1FTU5BTUV9KX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCksZC5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksZC50YWJsZUZsYWc9ITEsaD1kLmxpYisiLiIrZC50YWJsZSxkLnRhYmxl''@;'; put 'put ''VGl0bGU9aCxkLmxpYlRhYj1oKTtkLnJvdXRlci51cmwuc3BsaXQoIi8iKS5sZW5ndGg+MyYmaCYmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGgsYSkudGhlbihUPT57aWYoVC5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09R24ucm9vdFBhcmFtJiYwPT09R24udmlld2VyLmZp''@;'; put 'put ''bHRlci5jbGF1c2VzLmxlbmd0aCYmKEduLnZpZXdlci5maWx0ZXIucXVlcnk9ZC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShULnF1ZXJ5KSxHbi52aWV3ZXIuZmlsdGVyLmxpYmRzPWQucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxkLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xv''@;'; put 'put ''YmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLFQuY29scykpLGQuYWJvcnRBY3RpdmU9ITEsZC5maWx0ZXJDb2xzPVQuY29scyx6eihkLmZpbHRlckNvbHMsW10sVC4kdmlld2RhdGEpLGQubnVtYmVyT2ZSb3dzPVQuc2FzcGFyYW1zWzBdLk5PQlMsZC5oZWFkZXJQa3M9VC5zYXNwYXJhbXNbMF0u''@;'; put 'put ''UEtfRklFTERTLnNwbGl0KCIgIiksIlNBUzkiPT09ZC5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlKXtsZXQgRWU9VC5zYXNwYXJhbXNbMF0uVEFCTEVVUkk7RWUmJkVlLmxlbmd0aD4wJiYoZC50YWJsZXVyaT1FZSl9ZC5ob3RUYWJsZS5kYXRhPVQudmlld2RhdGEsZC4kZGF0YUZvcm1hdHM9VC4k''@;'; put 'put ''dmlld2RhdGEsZC5kc21ldGE9VC5kc21ldGEsZC5xdWVyeVRleHQ9VC5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IFc9W10saWU9W107Zm9yKGxldCBFZSBpbiBULnZpZXdkYXRhWzBdKUVlJiZpZS5wdXNoKEVlKTtmb3IobGV0IEVlPTA7RWU8aWUubGVuZ3RoO0VlKyspVy5wdXNoKHtk''@;'; put 'put ''YXRhOmllW0VlXX0pO2QuaG90VGFibGUuY29sSGVhZGVycz1pZSxkLmhvdFRhYmxlLmNvbHVtbnM9VyxkLmhvdFRhYmxlLmNlbGxzPWZ1bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX0sZC50YWJsZUZsYWc9ITE7bGV0IHdlPVtdO3dlPWguc3BsaXQoIi4iKSxkLmxpYj13ZVswXSxkLnRh''@;'; put 'put ''YmxlPXdlWzFdLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhkLm5vRGF0YT0hMCxkLnRhYmxlRmxhZz0hMCk6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExKSxkLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKFQ9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCksZC5hYm9ydEFjdGl2ZT0h''@;'; put 'put ''MCxkLm5vRGF0YVJlcUVycj0hMH0pKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmgmJmQucm91dGVyLm5hdmlnYXRlKDAhPT1hP1siL3ZpZXcvZGF0YS8iK2grIi8iK2FdOlsiL3ZpZXcvZGF0YS8iK2hdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgZj1k''@;'; put 'put ''LnRhYmxlLF89ZC5saWJyYXJpZXMuZmluZChUPT5ULkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO18/KEduLnZpZXdlci5saWJyYXJpZXMubGVuZ3RoPjAmJihkLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzLGQubGlicmFyaWVzU2VhcmNoPUdu''@;'; put 'put ''LnZpZXdlci5saWJyYXJpZXNTZWFyY2gpLGQubGlicmFyeU9uQ2xpY2soZC5saWIsXywhMCkpOmQubGliaW5mbz1bXSxkLnRhYmxlPWZ8fGQudGFibGUsZC5saWJyYXJpZXMmJmQuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGQubGlicmFyaWVzKSxkLnJvdXRlci51cmwuaW5jbHVk''@;'; put 'put ''ZXMoIi9kYXRhIikmJmQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQubG9hZGluZ1RhYmxlVmlldz0hMSwhZC5ub0RhdGEmJiFkLm5vRGF0YVJlcUVyciYmaCYmZC5zZXR1cEhvdCgpLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyfHxzZXRUaW1lb3V0KCgpPT57bGV0IFQ9ZG9jdW1l''@;'; put 'put ''bnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7VCYmKFQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixXPT57c2V0VGltZW91dCgoKT0+e2xldCBpZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2llJiZpZS5jbGljaygpfSwx''@;'; put 'put ''MDApfSksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITApfSwyZTMpfSkoKX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1vcGVuUWIoKXt0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlW''@;'; put 'put ''YXJpYWJsZXModGhpcy5saWIrIi4iK3RoaXMudGFibGUsdGhpcy5maWx0ZXJDb2xzKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZmkoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVs''@;'; put 'put ''bFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVy''@;'; put 'put ''LnF1ZXJ5PVtdLEduLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCBfPTA7XzxmLmxlbmd0aDtfKyspe2NvbnN0IFQ9ZltfXS5l''@;'; put 'put ''bGVtZW50cztkPVQuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBudWxsPT09Vy52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goVCl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPXtncm91cExvZ2ljOmEu''@;'; put 'put ''Y2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goVD0+e2NvbnN0IFc9e2ZpbHRlckNsYXVzZXM6W119O1QuZWxlbWVudHMuZm9yRWFjaChpZT0+e1cuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo''@;'; put 'put ''aWUpKX0pLFcuY2xhdXNlTG9naWM9VC5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVykpfSk7Y29uc3QgXz1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNh''@;'; put 'put ''dmVRdWVyeShhLmxpYmRzLF8pLnRoZW4oVD0+e2EucXVlcnlUZXh0PVQucmVzdWx0WzBdLkZJTFRFUl9URVhUO2xldCBXPVQucmVzdWx0WzBdLkZJTFRFUl9SSzthLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzKyIvIitXXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJl''@;'; put 'put ''c2VydmUifSksYS52aWV3RGF0YShXKSxhLmZpbHRlcj0hMX0pLmNhdGNoKFQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoVCl9KSxhLnN1Ym1pdExvYWRpbmc9ITF9fSkoKX1yZW1vdmVRdWVyeSgpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnJlbW92ZUNsYXVzZSgpfXNldHVwSG90KCl7c2V0VGlt''@;'; put 'put ''ZW91dCgoKT0+eyF0aGlzLmxvYWRpbmdUYWJsZVZpZXcmJnRoaXMubGliRGF0YXNldCYmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0''@;'; put 'put ''aW5ncyh7aGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE+NTAwPzUwMDphfSxhZnRlckdldENvbEhlYWRlcjooYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZT8uY29sVG9Qcm9wKGEpO2gmJnRoaXMuaGVhZGVyUGtz''@;'; put 'put ''LmluZGV4T2YoaCk+LTEmJmQuY2xhc3NMaXN0LmFkZCgicHJpbWFyeUtleUhlYWRlclN0eWxlIil9fSkpfSwxZTMpfWxvYWRXaXRoUGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJuIGZpKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0bGU9YS5yb3V0ZS5zbmFwc2hv''@;'; put 'put ''dC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4iKXx8KGEubGliPWgpLHlpZWxk''@;'; put 'put ''IGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5j''@;'; put 'put ''dGlvbiooKXthLnN3aXRjaEZsYWc9ITEsYS5saWJyYXJpZXNMb2FkaW5nPSEwLEduLnZpZXdlci5zdGFydHVwU2V0P3NldFRpbWVvdXQoKCk9PnthLmxpYnJhcmllcz1Hbi52aWV3ZXIubGlicmFyaWVzLGEubGlicmFyaWVzU2VhcmNoPUduLnZpZXdlci5saWJyYXJpZXNTZWFyY2gsYS5saWI9''@;'; put 'put ''R24udmlld2VyLmxpYnJhcnksYS5saWJyYXJpZXNUcmVlRXhwYW5kZWQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0sMTAwKTooYS5ub0RhdGFSZXFFcnI9ITEseWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uudmll''@;'; put 'put ''d0xpYnMoKS50aGVuKGQ9PnthLmxpYnJhcmllcz1kLnNhc2xpYnMsR24udmlld2VyLmxpYnJhcmllcz1hLmxpYnJhcmllcyxHbi52aWV3ZXIuc3RhcnR1cFNldD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSku''@;'; put 'put ''Y2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKSxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5ub0RhdGFSZXFFcnI9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXt2YXIgYT10aGlzO3JldHVybiBmaShmdW5jdGlvbiooKXthLmhvdFRhYmxl''@;'; put 'put ''LmRhdGEubGVuZ3RoPjAmJihhLnRhYmxlRmxhZz0hMCksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9PnthLndoZXJlU3RyaW5nPWQuc3RyaW5nLGEuY2xhdXNlcz1kLm9iaixhLmxpYmRzPWQubGliZHN9KSx0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJh''@;'; put 'put ''bXMubGliTWVtPCJ1Ij9hLmxvYWRXaXRoUGFyYW1ldGVycygpOmEubG9hZFdpdGhvdXRQYXJhbWV0ZXJzKCl9KSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh0dChDMCksdHQoYmQpLHR0KG9hKSx0dChEcyksdHQoV2wpLHR0KHZsKSx0dCh3MCks''@;'; put 'put ''dHQoQWMpLHR0KEpkKSx0dChVYSkpfSxjLlx1MDI3NWNtcD13cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2VyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmUm8oeW50LDUpLDImYSl7bGV0IGg7c2koaD1haSgpKSYmKGQucXVlcnlGaWx0ZXJDb21wTGlzdD1oKX19''@;'; put 'put ''LGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo5NSx2YXJzOjI5LGNvbnN0czpbWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0''@;'; put 'put ''LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1''@;'; put 'put ''ZSIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiY2xyLWNvbC1tZC02Il0s''@;'; put 'put ''WzEsImRvd25sb2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsIiwibmdNb2RlbENoYW5nZSJdLFsidmFsdWUiLCJDU1YiXSxbInZhbHVlIiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUiLCJTQVNfRERMIl0sWyJ2YWx1ZSIsIlRTUUxfRERMIl0sWyJ2''@;'; put 'put ''YWx1ZSIsIkVYQ0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRs''@;'; put 'put ''aW5lIiwzLCJpZCIsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHItY29sLW1kLTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIs''@;'; put 'put ''Imp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImJ0bi1ncm91cCJdLFsxLCJyYWRpbyIsImJ0biIsMywiY2xpY2siXSxbInR5cGUiLCJyYWRpbyIsIm5hbWUiLCJidG4tZ3JvdXAtZGVtby1yYWRpb3MiLDMsImNoZWNrZWQiXSxbMSwiY2FyZC1ibG9jayIsIndvcmQtYnJlYWstYWxsIl0s''@;'; put 'put ''WyJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0Iiwidy0xMDAiLDMsInZhbHVlIiwiZm9jdXMiXSxbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsxLCJjYXJkLWZvb3RlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGlu''@;'; put 'put ''ayIsMywibmd4Q2xpcGJvYXJkIiwiY2xpY2siXSxbImFyaWEtbW9kYWwiLCJ0cnVlIiwxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImJ0bi1zbSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsckxv''@;'; put 'put ''YWRpbmciLCJjbGljayJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbE9wZW5DaGFuZ2UiXSxbMSwibW9kYWwtdGl0bGUiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsNCwibmdJZiJdLFszLCJvcGVuIiwiZHNtZXRhIiwib3BlbkNoYW5nZSJdLFszLCJ2aWV3Ym94TW9kYWwiLCJ2aWV3Ym94TW9kYWxD''@;'; put 'put ''aGFuZ2UiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9j''@;'; put 'put ''b21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbCIsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJz''@;'; put 'put ''aGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2Ui''@;'; put 'put ''XSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJpZCIsIm5nTW9kZWwiLCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIiwia2V5dXAiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImNsci10cmVlbm9kZS1saW5rIiwzLCJkYy1sb2NrZWQtY29udHJvbCIsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJQb3Np''@;'; put 'put ''dGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUi''@;'; put 'put ''LCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwi''@;'; put 'put ''bW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtb2RhbC1jb250ZW50Il0sWzEsIm1vZGFsLWhlYWRlciJdLFsiYXJpYS1sYWJlbCIsIkNsb3NlIiwidHlwZSIsImJ1dHRvbiIsMSwiY2xv''@;'; put 'put ''c2UiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInNoYXBlIiwiY2xvc2UiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCJdLFsicXVlcnlGaWx0ZXIiLCIiXSxb''@;'; put 'put ''MSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwiaGVhZGVyLXJvdyBjbHItcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAw''@;'; put 'put ''IG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItZmxleC0xIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJmb3JtLWJsb2NrIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNs''@;'; put 'put ''ckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywidHlwZSIsImtleXVwLmVudGVyIl0sWyJzZWFyY2hFbCIsIiJdLFsi''@;'; put 'put ''c2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWwiLCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''Il0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQi''@;'; put 'put ''LCJjbGFzcyIsImNvbG9yLXllbGxvdyBtdC01IG1yLTUiLDQsIm5nSWYiXSxbImNsYXNzIiwidmlld2VyVGl0bGUgY2xyLWZsZXgtY29sdW1uIGQtZmxleCBjbHItZmxleC1zbS1yb3cgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wt''@;'; put 'put ''bWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXIt''@;'; put 'put ''aW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIsIm10LTUiLCJtci01Il0sWzEsInZpZXdlclRpdGxlIiwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJyZWZyZXNoIiwx''@;'; put 'put ''LCJyZWZyZXNoLXRhYmxlIiwzLCJjbGljayJdLFsxLCJvcHRpb25zLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJmaWx0ZXJTaWRlIl0s''@;'; put 'put ''WyJzaGFwZSIsImNvZyIsInNpemUiLCIxNSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1z''@;'; put 'put ''dWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24i''@;'; put 'put ''LCJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiZG93bmxvYWQtY2xvdWQiXSxbInNoYXBlIiwicGVuY2lsIl0sWyJz''@;'; put 'put ''aGFwZSIsInN3aXRjaCJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3Jh''@;'; put 'put ''eSJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIl0sWzEsInZpZXdlclRpdGxlIiwibXQtMTciXSxbMSwidGV4dC1jZW50''@;'; put 'put ''ZXIiLCJtdC0xMCJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkLWluZm8gcG9pbnRlci1ldmVudHMtbm9uZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJsaWJpbmZvIG0tMCBjbHItcm93Iiw0LCJuZ0lmIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVk''@;'; put 'put ''LWluZm8iLCJwb2ludGVyLWV2ZW50cy1ub25lIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbMSwibGliaW5mbyIsIm0tMCIsImNsci1yb3ciXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbS0wIHctMTAwIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsInRleHQtY2VudGVyIiwibS0wIiwidy0xMDAiXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsIm0tMCIsMywiY2xpY2siXSxbMSwibS0wIl0sWzEsIm0tMCIsImZvbnQtYm9sZCJdLFsxLCJjYXJkLWJsb2NrIiwibm9EYXRhIl0sWyJzaGFwZSIsIndhcm5pbmct''@;'; put 'put ''c3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVt''@;'; put 'put ''blNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwi''@;'; put 'put ''bWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG1lKDAsImFwcC1zaWRlYmFyIiww''@;'; put 'put ''KSx4dCgic2Nyb2xsZWRUb0JvdHRvbSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5sb2FkTW9yZUxpYnJhcmllcygpfSksUWUoMSx3bnQsMiwwLCJkaXYiLDEpLG1lKDIsImNsci10cmVlIiksUWUoMyxNbnQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSxRZSg0LEZudCwyLDEsIm5nLWNvbnRhaW5lciIs''@;'; put 'put ''MykseWUoKSxRZSg1LEhudCwzLDAsImRpdiIsNCkseWUoKSxtZSg2LCJkaXYiLDUpLFFlKDcsTm50LDE0LDAsImRpdiIsNiksUWUoOCxWbnQsMSwwLCJkaXYiLDcpLG1lKDksImNsci1tb2RhbCIsOCkseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub3BlbkRv''@;'; put 'put ''d25sb2FkPWZ9KSxtZSgxMCwiaDMiLDkpLE5lKDExLCJEb3dubG9hZCIpLHllKCksbWUoMTIsImRpdiIsMTApKDEzLCJkaXYiLDExKSgxNCwiY2xyLXNlbGVjdC1jb250YWluZXIiLDEyKSgxNSwibGFiZWwiKSxOZSgxNiwiUGxlYXNlIGNob29zZSBkb3dubG9hZCBmb3JtYXQiKSx5ZSgpLG1l''@;'; put 'put ''KDE3LCJzZWxlY3QiLDEzKSx4dCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZG93bmxvYWRGb3JtYXQ9Zn0pLG1lKDE4LCJvcHRpb24iLDE0KSxOZSgxOSwiQ1NWIikseWUoKSxtZSgyMCwib3B0aW9uIiwxNSksTmUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSx5''@;'; put 'put ''ZSgpLG1lKDIyLCJvcHRpb24iLDE2KSxOZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLHllKCksbWUoMjQsIm9wdGlvbiIsMTcpLE5lKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLHllKCksbWUoMjYsIm9wdGlvbiIsMTgpLE5lKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSx5ZSgpLG1lKDI4''@;'; put 'put ''LCJvcHRpb24iLDE5KSxOZSgyOSwiRXhjZWwgKC54bHN4KSIpLHllKCksbWUoMzAsIm9wdGlvbiIsMjApLE5lKDMxLCJNYXJrZG93biAoLm1kKSIpLHllKCkoKSgpKCkoKSxtZSgzMiwiZGl2IiwyMSkoMzMsImJ1dHRvbiIsMjIpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vcGVu''@;'; put 'put ''RG93bmxvYWQ9ITF9KSxOZSgzNCwiIENhbmNlbCAiKSx5ZSgpLG1lKDM1LCJidXR0b24iLDIzKSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZG93bmxvYWRGb3JtYXQuaW5jbHVkZXMoIkRETCIpP2QuZG93bmxvYWREREwoKTpkLmRvd25sb2FkRGF0YSgpfSksTmUoMzYsIiBPayAi''@;'; put 'put ''KSx5ZSgpKCkoKSxtZSgzNywiY2xyLW1vZGFsIiw4KSx4dCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC53ZWJRdWVyeT1mfSksbWUoMzgsImgzIiw5KSxOZSgzOSwiIFdlYiBRdWVyeSBVUkwgIikseWUoKSxtZSg0MCwiZGl2IiwyNCkoNDEsImRpdiIsMjUpKDQy''@;'; put 'put ''LCJkaXYiLDI2KSg0MywiZGl2IiwyNykoNDQsImRpdiIsMjgpKDQ1LCJzcGFuIiksTmUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IikseWUoKSxtZSg0NywiZGl2IiwyOSkoNDgsImRpdiIsMzApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZC53ZWJRdWVyeVRhYj0hMCxkLnNob3dXZWJRdWVyeSgpfSkscXQoNDksImlucHV0IiwzMSksbWUoNTAsImxhYmVsIiksTmUoNTEsIlRBQiIpLHllKCkoKSxtZSg1MiwiZGl2IiwzMCkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLndlYlF1ZXJ5VGFiPSExLGQuc2hvd1dlYlF1''@;'; put 'put ''ZXJ5KCl9KSxxdCg1MywiaW5wdXQiLDMxKSxtZSg1NCwibGFiZWwiKSxOZSg1NSwiQ1NWIikseWUoKSgpKCkoKSxtZSg1NiwiZGl2IiwzMikoNTcsInRleHRhcmVhIiwzMywzNCkseHQoImZvY3VzIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkNsaUNvbW1hbmRGb2N1cyhmKX0pLE5lKDU5LCIg''@;'; put 'put ''ICAgICAgICAgICAgICIpLHllKCkoKSxtZSg2MCwiZGl2IiwzNSkoNjEsImJ1dHRvbiIsMzYpLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jb3B5VG9DbGlwKCl9KSxOZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLHllKCkoKSgpKCkoKSgpLG1lKDYzLCJkaXYiLDIxKSg2NCwi''@;'; put 'put ''YnV0dG9uIiwyMikseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLndlYlF1ZXJ5PSExfSksTmUoNjUsIiBjbG9zZSAiKSx5ZSgpKCkoKSxtZSg2NiwiY2xyLW1vZGFsIiwzNykseHQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZmlsdGVyPWZ9KSxtZSg2''@;'; put 'put ''NywiaDMiLDkpLE5lKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxtZSg2OSwic3BhbiIpLE5lKDcwKSx5ZSgpKCksbWUoNzEsImRpdiIsMTApLFFlKDcyLEJudCwyLDAsImFwcC1xdWVyeSIsMzgpLHllKCksbWUoNzMsImRpdiIsMjEpKDc0LCJidXR0b24iLDM5KSx4dCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGQucmVzZXRGaWx0ZXIoKX0pLE5lKDc1LCIgcmVzZXQgZmlsdGVyICIpLHllKCksbWUoNzYsImJ1dHRvbiIsNDApLHh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5maWx0ZXI9ITEsZC5yZW1vdmVRdWVyeSgpfSksTmUoNzcsIiBDYW5jZWwgIikseWUoKSxtZSg3''@;'; put 'put ''OCwiYnV0dG9uIiw0MSkseHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbmRDbGF1c2UoKX0pLE5lKDc5LCIgT2sgIikseWUoKSgpKCksbWUoODAsImNsci1tb2RhbCIsNDIpLHh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnF1ZXJ5RXJyPWZ9KSxt''@;'; put 'put ''ZSg4MSwiaDMiLDQzKSxOZSg4MiwiRXJyb3IiKSx5ZSgpLG1lKDgzLCJkaXYiLDEwKSg4NCwicCIpLE5lKDg1KSx5ZSgpKCksbWUoODYsImRpdiIsMjEpKDg3LCJidXR0b24iLDQ0KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSg4OCwiIENhbmNlbCAi''@;'; put 'put ''KSx5ZSgpLG1lKDg5LCJidXR0b24iLDQ1KSx4dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucXVlcnlFcnI9ITF9KSxOZSg5MCwiIE9rICIpLHllKCkoKSgpLFFlKDkxLGpudCw2LDAsImRpdiIsNDYpLFFlKDkyLHdydCw4LDYsImRpdiIsNDcpLHllKCksbWUoOTMsImFwcC1kYXRhc2V0''@;'; put 'put ''LWluZm8iLDQ4KSx4dCgib3BlbkNoYW5nZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuZGF0YXNldEluZm89Zn0pLHllKCksbWUoOTQsImFwcC12aWV3Ym94ZXMiLDQ5KSx4dCgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gZC52aWV3Ym94T3Blbj1mfSkseWUoKSksMiZh''@;'; put 'put ''KXtjb25zdCBoPSRpKDU4KTtDZSgxKSxSZSgibmdJZiIsZC5saWJyYXJpZXNMb2FkaW5nKSxDZSgyKSxSZSgibmdJZiIsZC5saWJyYXJpZXMpLENlKDEpLFJlKCJuZ0Zvck9mIixkLmxpYnJhcmllcyksQ2UoMSksUmUoIm5nSWYiLGQubGlicmFyaWVzUGFnaW5nKSxDZSgyKSxSZSgibmdJZiIs''@;'; put 'put ''ZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgibmdJZiIsZC5udWxsVmFyaWFibGVzKSxDZSgxKSxSZSgiY2xyTW9kYWxPcGVuIixkLm9wZW5Eb3dubG9hZCkoImNsck1vZGFsU2l6ZSIsIm1kIiksQ2UoOCksUmUoIm5nTW9kZWwiLGQuZG93bmxvYWRGb3JtYXQpLENlKDE4KSxSZSgiaWQiLGQu''@;'; put 'put ''dGFibGVUaXRsZSksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC53ZWJRdWVyeSkoImNsck1vZGFsU2l6ZSIsImxnIiksQ2UoMTIpLFJlKCJjaGVja2VkIixkLndlYlF1ZXJ5VGFiKSxDZSg0KSxSZSgiY2hlY2tlZCIsIWQud2ViUXVlcnlUYWIpLENlKDQpLHhjKCJ2YWx1ZSIsZC53ZWJRdWVy''@;'; put 'put ''eVRleHQpLENlKDQpLFJlKCJuZ3hDbGlwYm9hcmQiLGgpLENlKDUpLFJlKCJjbHJNb2RhbE9wZW4iLGQuZmlsdGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLENlKDQpLGdyKCIgIixkLmxpYlRhYiwiICIpLENlKDIpLFJlKCJuZ0lmIixkLmZpbHRlciks''@;'; put 'put ''Q2UoNiksUmUoImNsckxvYWRpbmciLGQuc3VibWl0TG9hZGluZyksQ2UoMiksUmUoImNsck1vZGFsT3BlbiIsZC5xdWVyeUVyciksQ2UoNSksb3IoZC5xdWVyeUVyck1lc3NhZ2UpLENlKDYpLFJlKCJuZ0lmIixkLmxvYWRpbmdUYWJsZVZpZXcpLENlKDEpLFJlKCJuZ0lmIiwhZC5sb2FkaW5n''@;'; put 'put ''VGFibGVWaWV3KSxDZSgxKSxSZSgib3BlbiIsZC5kYXRhc2V0SW5mbykoImRzbWV0YSIsZC5kc21ldGEpLENlKDEpLFJlKCJ2aWV3Ym94TW9kYWwiLGQudmlld2JveE9wZW4pfX0sZGVwZW5kZW5jaWVzOlt4c2UseHMsWmksbmQsdGgsbW50LENwLGwxLGMxLFdhLFMwLE0wLEJzLHdwLE9zLHIy''@;'; put 'put ''LGRkLGcxLERwLGthLG91LHN1LFp1LGMyLGRoLFVzLFhKLEQwLEQ4LFQwLGYxLE44LEg4LE5mLGFnLGxnLEs4LGpiLFViLHpiLHUyLHh5LG4zLEFzZSxqRSxjVSxVNyxEc2UsYm50XSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1b''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3Jk''@;'; put 'put ''ZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNv''@;'; put 'put ''bFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4O2JhY2tncm91bmQ6''@;'; put 'put ''IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4fS5maWx0ZXJTaWRlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fS5vcHRpb25zLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgICAgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1ib3R0b206MTVweH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTgwcHg7bWFyZ2luLXRvcDotMThweDtw''@;'; put 'put ''YWRkaW5nOjB9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9''@;'; put 'put ''Lm5vRGF0YVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29u''@;'; put 'put ''dGVudDpmbGV4LWVuZH0uZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5idG5WaWV3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCFpbXBvcnRhbnR9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFk''@;'; put 'put ''ZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZG93bmxvYWQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ucmVmcmVzaC10YWJsZVtfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS5saWJpbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMjBweDtvdmVyZmxvdzphdXRvfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dy''@;'; put 'put ''b3VuZDpyZ2JhKDQ4LDEwNywwLC40MzEzNzI1NDkpfS5uby10YWJsZS1zZWxlY3RlZC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LndlYi1xdWVyeVtfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17bWF4LWhlaWdodDozNXZofS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLndlYi1xdWVyeS10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEwMHB4O21heC1oZWlnaHQ6MTAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5m''@;'; put 'put ''aWx0ZXJCdG5bX25nY29udGVudC0lQ09NUCVdLCAuZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LnJvd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjByZW07bWFy''@;'; put 'put ''Z2luLWxlZnQ6MHJlbX19Il19KSxjfSkoKTtjb25zdCBDcnQ9W3twYXRoOiIiLGNvbXBvbmVudDpzdHQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6SFR9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6''@;'; put 'put ''SFR9LHtwYXRoOiJkYXRhLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6SFR9LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDpIVH0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpGVH0se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OkZUfSx7''@;'; put 'put ''cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6RlR9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OkZUfSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDpmbnR9LHtwYXRo''@;'; put 'put ''OiJtZXRhZGF0YSIsY29tcG9uZW50Om9afSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50Om9afSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50Om9afSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50Om90dCxj''@;'; put 'put ''aGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpDbGV9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6Q2xlfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6ZWFlfSx7cGF0aDoiZ3JvdXBzLzp1''@;'; put 'put ''cmkiLGNvbXBvbmVudDplYWV9LHtwYXRoOiJyb2xlcyIsY29tcG9uZW50OndsZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDp3bGV9XX1dfV07bGV0IFNydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9dmkoe3R5cGU6Y30pLGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltkYy5mb3JDaGlsZChDcnQpLGRjXX0pLGN9KSgpLE1ydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5cGU6Y30p''@;'; put 'put ''LGMuXHUwMjc1aW5qPW1pKHtpbXBvcnRzOltGc2Usb28sU3J0LHZudCwkbCxfdSxfNy5mb3JSb290KCksQjcsVjcsdHcsZlUsQzJdfSksY30pKCk7Y29uc3QgRXJ0PWRjLmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0VG86ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixs''@;'; put 'put ''b2FkQ2hpbGRyZW46KCk9Pk1ydH0se3BhdGg6InJldmlldyIsY29tcG9uZW50OlZHZSxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2FkQ2hpbGRyZW46KCk9Pk5HZX1dfSx7cGF0aDoibGljZW5zaW5nIixsb2Fk''@;'; put 'put ''Q2hpbGRyZW46KCk9Pm9XZX0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+aFV9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+bVllfSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+V0dlfSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9Pm8kZX0se3Bh''@;'; put 'put ''dGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5URWV9LHtwYXRoOiIqKiIsY29tcG9uZW50Oll4ZX1dLHt1c2VIYXNoOiEwfSk7bGV0IGtydD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9dmkoe3R5''@;'; put 'put ''cGU6Yyxib290c3RyYXA6W3FTZV19KSxjLlx1MDI3NWluaj1taSh7cHJvdmlkZXJzOltVeCxiZCxwVV0saW1wb3J0czpbWnhlLEVHLCRsLEQ2ZSxGaGUsRXJ0LFY3LF91LEI3LGhVLHR3LEMyLFl0dF19KSxjfSkoKTtMMWUoKS5ib290c3RyYXBNb2R1bGUoa3J0KX0sNTYzMjE6KGF0LEllLEYp''@;'; put 'put ''PT57dmFyIGFlPUYoMTcxNTYpLmRlZmF1bHQ7c2VsZixhdC5leHBvcnRzPSgoKT0+e3ZhciB4PXsyNjU2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVm''@;'; put 'put ''YXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGVjb2RlVG9rZW49Ty5oYXNUb2tlbkV4cGlyZWQ9Ty5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPU8uaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPXZvaWQgMDt2YXIgSz16KFIoNjI0NSkpO2Z1''@;'; put 'put ''bmN0aW9uIEkoayxFKXtyZXR1cm4oMCxLLmRlZmF1bHQpKGspLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PUV9Ty5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24oayxFKXtyZXR1cm4gdm9pZCAwPT09RSYmKEU9MzYwMCksIWt8fEkoayxFKX0sTy5pc1JlZnJlc2hUb2tlbkV4''@;'; put 'put ''cGlyaW5nPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHZvaWQgMD09PUUmJihFPTMwKSwha3x8SShrLEUpfSxPLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbihrKXtyZXR1cm4ha3x8SShrLDApfSxPLmRlY29kZVRva2VuPWZ1bmN0aW9uKGspe3ZhciBFO3RyeXtFPSgwLEsuZGVmYXVsdCkoayl9Y2F0''@;'; put 'put ''Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRva2VuIHN1cHBsaWVkLiIpfXJldHVybiBFfX0sNjc5OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9''@;'; put 'put ''PT1qJiYoaj1FKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxqLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pfTpmdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKSxJW2pdPWtbRV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlv''@;'; put 'put ''bihJLGspe2Zvcih2YXIgRSBpbiBJKSJkZWZhdWx0Ij09PUV8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLEUpfHx6KGssSSxFKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEsoUigyNjU2KSxPKX0sMzI1OTpmdW5jdGlv''@;'; put 'put ''bihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBSPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKHope2Zvcih2YXIgSyxJPTEsaz1hcmd1bWVudHMubGVuZ3RoO0k8aztJKyspZm9yKHZhciBFIGluIEs9YXJndW1lbnRzW0ldKU9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChLLEUpJiYoeltFXT1LW0VdKTtyZXR1cm4gen0sUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnByZWZpeE1lc3NhZ2U9dm9pZCAwLE8ucHJl''@;'; put 'put ''Zml4TWVzc2FnZT1mdW5jdGlvbih6LEspe2lmKCJvYmplY3QiPT10eXBlb2YgeilpZih6Lmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpei5tZXNzYWdlPUsrei5tZXNzYWdlO2Vsc2V7aWYoIXouaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gUihSKHt9LHopLHttZXNzYWdlOkt9KTtp''@;'; put 'put ''Zigib2JqZWN0Ij09dHlwZW9mIHouYm9keSYmKHoubWVzc2FnZT16LmJvZHkubWVzc2FnZT9LK3ouYm9keS5tZXNzYWdlOkspLCJzdHJpbmciPT10eXBlb2Ygei5ib2R5KXt2YXIgST12b2lkIDA7dHJ5e0k9SlNPTi5wYXJzZSh6LmJvZHkpfWNhdGNoe3JldHVybiB6Lm1lc3NhZ2U9Syx6fXJl''@;'; put 'put ''dHVybiBJLm1lc3NhZ2U9SS5tZXNzYWdlP0srSS5tZXNzYWdlOkssei5ib2R5PUksen19cmV0dXJuInN0cmluZyI9PXR5cGVvZiB6JiYoej1LK3opLHp9fSw5Nzc4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3Qu''@;'; put 'put ''Y3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVl''@;'; put 'put ''OiEwfSksSyhSKDMyNTkpLE8pLEsoUigxMDY0KSxPKX0sMTA2NDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKFYsQil7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3Rh''@;'; put 'put ''bmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFksWCl7WS5fX3Byb3RvX189WH18fGZ1bmN0aW9uKFksWCl7Zm9yKHZhciBVIGluIFgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsVSkmJihZW1VdPVhbVV0pfSkoVixCKX0sZnVuY3Rpb24oVixCKXtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgQiYmbnVsbCE9PUIpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhCKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBZKCl7dGhpcy5jb25zdHJ1Y3Rvcj1WfXooVixCKSxWLnByb3RvdHlwZT1udWxsPT09Qj9P''@;'; put 'put ''YmplY3QuY3JlYXRlKEIpOihZLnByb3RvdHlwZT1CLnByb3RvdHlwZSxuZXcgWSl9KSxJPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihWLEIpe3ZhciBZPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlZbU3ltYm9sLml0ZXJhdG9yXTtpZighWSlyZXR1cm4gVjt2YXIgWCxVLHE9WS5j''@;'; put 'put ''YWxsKFYpLGVlPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1CfHxCLS0gPjApJiYhKFg9cS5uZXh0KCkpLmRvbmU7KWVlLnB1c2goWC52YWx1ZSl9Y2F0Y2godGUpe1U9e2Vycm9yOnRlfX1maW5hbGx5e3RyeXtYJiYhWC5kb25lJiYoWT1xLnJldHVybikmJlkuY2FsbChxKX1maW5hbGx5e2lmKFUp''@;'; put 'put ''dGhyb3cgVS5lcnJvcn19cmV0dXJuIGVlfSxrPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oVixCLFkpe2lmKFl8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgWCxVPTAscT1CLmxlbmd0aDtVPHE7VSsrKSFYJiZVIGluIEJ8fChYfHwoWD1BcnJheS5wcm90b3R5cGUu''@;'; put 'put ''c2xpY2UuY2FsbChCLDAsVSkpLFhbVV09QltVXSk7cmV0dXJuIFYuY29uY2F0KFh8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEIpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2VydmVyVHlwZUVycm9yPXZvaWQgMDt2YXIgRT1SKDM5''@;'; put 'put ''MDApLGo9ZnVuY3Rpb24oVil7ZnVuY3Rpb24gQihZKXt2b2lkIDA9PT1ZJiYoWT1bXSk7dmFyIFg9dGhpcyxVPShZPWsoW10sSShuZXcgU2V0KFkpKSwhMSkpLmxlbmd0aD9ZLmpvaW4oIiwgIikudHJpbSgpOltFLlNlcnZlclR5cGUuU2FzVml5YSxFLlNlcnZlclR5cGUuU2FzOSxFLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzanNdLmpvaW4oIiwgIikudHJpbSgpO3JldHVybiBVPVUucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksKFg9Vi5jYWxsKHRoaXMsIkludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiIuY29uY2F0KDEhPT1ZLmxlbmd0aD8icyI6IiIsIiAiKS5jb25jYXQo''@;'; put 'put ''MSE9PVkubGVuZ3RoPyJhcmUiOiJpcyIsIiAiKS5jb25jYXQoVSkpfHx0aGlzKS5uYW1lPSJTZXJ2ZXJUeXBlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihYLEIucHJvdG90eXBlKSxYfXJldHVybiBLKEIsViksQn0oRXJyb3IpO08uU2VydmVyVHlwZUVycm9yPWp9LDM5MDY6ZnVuY3Rp''@;'; put 'put ''b24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5uZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19''@;'; put 'put ''ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Us''@;'; put 'put ''c2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cgZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltd''@;'; put 'put ''LG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''dWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRocm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2Fs''@;'; put 'put ''bChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0s''@;'; put 'put ''ZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZlZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0m''@;'; put 'put ''JjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsxXSxlZT1jZTticmVha31pZihlZSYmb2UubGFi''@;'; put 'put ''ZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFd''@;'; put 'put ''O3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19LEk9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFksWCl7dmFyIFU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmWVtTeW1ib2wuaXRlcmF0b3JdO2lmKCFVKXJldHVybiBZO3ZhciBxLGVl''@;'; put 'put ''LHRlPVUuY2FsbChZKSxvZT1bXTt0cnl7Zm9yKDsodm9pZCAwPT09WHx8WC0tID4wKSYmIShxPXRlLm5leHQoKSkuZG9uZTspb2UucHVzaChxLnZhbHVlKX1jYXRjaChzZSl7ZWU9e2Vycm9yOnNlfX1maW5hbGx5e3RyeXtxJiYhcS5kb25lJiYoVT10ZS5yZXR1cm4pJiZVLmNhbGwodGUpfWZp''@;'; put 'put ''bmFsbHl7aWYoZWUpdGhyb3cgZWUuZXJyb3J9fXJldHVybiBvZX0saz10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKFksWCxVKXtpZihVfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHEsZWU9MCx0ZT1YLmxlbmd0aDtlZTx0ZTtlZSsrKSFxJiZlZSBpbiBYfHwocXx8''@;'; put 'put ''KHE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoWCwwLGVlKSkscVtlZV09WFtlZV0pO3JldHVybiBZLmNvbmNhdChxfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChYKSl9LEU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFkpe3JldHVybiBZJiZZLl9fZXNNb2R1''@;'; put 'put ''bGU/WTp7ZGVmYXVsdDpZfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8udXBkYXRlQ3N2PU8uY3JlYXRlQ3N2PU8ucmVhZENzdj12b2lkIDA7dmFyIGo9UigxNTU5KSxWPUUoUig3NTY1KSk7Ty5yZWFkQ3N2PWZ1bmN0aW9uKFkpe3JldHVybiB6''@;'; put 'put ''KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLGoucmVhZEZpbGUpKFkpXTtjYXNlIDE6cmV0dXJuWzIsWC5zZW50KCkuc3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKFUp''@;'; put 'put ''e3JldHVybiBVLmxlbmd0aH0pLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gVS5zcGxpdCgiLCIpfSldfX0pfSl9LE8uY3JlYXRlQ3N2PWZ1bmN0aW9uKFksWCxVKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oZWUp''@;'; put 'put ''e3N3aXRjaChlZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPSgwLFYuZGVmYXVsdCkoWCx7aGVhZGVyOjE9PT1YLmxlbmd0aCxjb2x1bW5zOlV9KSxbNCwoMCxqLmNyZWF0ZUZpbGUpKFkscSldO2Nhc2UgMTpyZXR1cm4gZWUuc2VudCgpLFsyXX19KX0pfSxPLnVwZGF0ZUNzdj1mdW5jdGlvbihZ''@;'; put 'put ''LFgsVSxxKXtyZXR1cm4geih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlZSx0ZSxvZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxCKFksWCxVLHEpXTtjYXNlIDE6cmV0dXJuIGVlPXNlLnNlbnQoKSxxJiYo''@;'; put 'put ''dGU9MD09PWVlLmxlbmd0aD8xOmVlLmxlbmd0aCwob2U9VS5maW5kSW5kZXgoZnVuY3Rpb24oaGUpe3JldHVybiBoZT09PXF9KSk+LTE/WC5zcGxpY2Uob2UsMCx0ZSk6KFUuc3BsaWNlKDAsMCxxKSxYLnNwbGljZSgwLDAsdGUpKSksZWUucHVzaChYKSxbNCwoMCxPLmNyZWF0ZUNzdikoWSxl''@;'; put 'put ''ZSxVKV07Y2FzZSAyOnJldHVybiBzZS5zZW50KCksWzJdfX0pfSl9O3ZhciBCPWZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lLHNlO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7''@;'; put 'put ''Y2FzZSAwOmlmKFgubGVuZ3RoIT09VS5sZW5ndGgpe2lmKFgubGVuZ3RoPlUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2lmKCFxfHxYLmxlbmd0aCsxIT09VS5sZW5ndGgpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihxJiZVLmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIp''@;'; put 'put ''O3JldHVybls0LCgwLE8ucmVhZENzdikoWSkuY2F0Y2goZnVuY3Rpb24odWUpe3JldHVybltdfSldO2Nhc2UgMTppZihlZT1oZS5zZW50KCksdGU9ZWVbMF0pe2lmKFUubGVuZ3RoPnRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVh''@;'; put 'put ''dGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihVLmxlbmd0aDx0ZS5sZW5ndGgpe2lmKCFxfHxVLmxlbmd0aCsxIT09dGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigibnVtYmVyIG9mIHByb3ZpZGVkIGNvbHVtbnMgYXJlIGxlc3MgdGhhbiBudW1iZXIgb2YgZXhpc3Rp''@;'; put 'put ''bmcgY29sdW1ucyIpO2lmKG9lPXRlLmZpbmRJbmRleChmdW5jdGlvbih1ZSl7cmV0dXJuIHVlPT09cX0pLHNlPWsoW10sSShVKSwhMSksIShvZT4tMSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihzZS5zcGxp''@;'; put 'put ''Y2Uob2UsMCxxKSxKU09OLnN0cmluZ2lmeShVKSE9PUpTT04uc3RyaW5naWZ5KHNlKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpfWVsc2V7aWYoSlNPTi5zdHJpbmdpZnkoVSkhPT1KU09OLnN0cmluZ2lmeSh0ZSkp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihxJiYhVS5pbmNsdWRlcyhxKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBkYXRhIil9fXJldHVyblsyLGVlXX19KX0pfX0s''@;'; put 'put ''MTU1OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihHLGIsRCxIKXt2b2lkIDA9PT1IJiYoSD1EKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRyxILHtlbnVtZXJhYmxlOiEwLGdldDpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBiW0RdfX0pfTpmdW5jdGlvbihHLGIsRCxIKXt2b2lkIDA9PT1IJiYoSD1EKSxHW0hdPWJbRF19KSxLPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihHLGIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShHLCJkZWZh''@;'; put 'put ''dWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpifSl9OmZ1bmN0aW9uKEcsYil7Ry5kZWZhdWx0PWJ9KSxJPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihHKXtpZihHJiZHLl9fZXNNb2R1bGUpcmV0dXJuIEc7dmFyIGI9e307aWYobnVsbCE9Rylmb3IodmFyIEQgaW4gRykiZGVm''@;'; put 'put ''YXVsdCIhPT1EJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxEKSYmeihiLEcsRCk7cmV0dXJuIEsoYixHKSxifSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihHLGIsRCxIKXtyZXR1cm4gbmV3KER8fChEPVByb21pc2UpKShmdW5jdGlvbihOLGcpe2Z1''@;'; put 'put ''bmN0aW9uIEMocCl7dHJ5e3YoSC5uZXh0KHApKX1jYXRjaCh3KXtnKHcpfX1mdW5jdGlvbiBTKHApe3RyeXt2KEgudGhyb3cocCkpfWNhdGNoKHcpe2codyl9fWZ1bmN0aW9uIHYocCl7dmFyIHc7cC5kb25lP04ocC52YWx1ZSk6KHc9cC52YWx1ZSx3IGluc3RhbmNlb2YgRD93Om5ldyBEKGZ1''@;'; put 'put ''bmN0aW9uKEope0oodyl9KSkudGhlbihDLFMpfXYoKEg9SC5hcHBseShHLGJ8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEcsYil7dmFyIEQsSCxOLGcsQz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZOWzBdKXRocm93IE5bMV07cmV0''@;'; put 'put ''dXJuIE5bMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZz17bmV4dDpTKDApLHRocm93OlMoMSkscmV0dXJuOlMoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihnW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGc7ZnVuY3Rpb24gUyh2KXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKHcpe2lmKEQpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7QzspdHJ5e2lmKEQ9MSxIJiYoTj0yJndbMF0/SC5yZXR1cm46d1swXT9ILnRocm93fHwoKE49SC5yZXR1cm4pJiZOLmNh''@;'; put 'put ''bGwoSCksMCk6SC5uZXh0KSYmIShOPU4uY2FsbChILHdbMV0pKS5kb25lKXJldHVybiBOO3N3aXRjaChIPTAsTiYmKHc9WzImd1swXSxOLnZhbHVlXSksd1swXSl7Y2FzZSAwOmNhc2UgMTpOPXc7YnJlYWs7Y2FzZSA0OnJldHVybiBDLmxhYmVsKysse3ZhbHVlOndbMV0sZG9uZTohMX07Y2Fz''@;'; put 'put ''ZSA1OkMubGFiZWwrKyxIPXdbMV0sdz1bMF07Y29udGludWU7Y2FzZSA3Onc9Qy5vcHMucG9wKCksQy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoTj0oTj1DLnRyeXMpLmxlbmd0aD4wJiZOW04ubGVuZ3RoLTFdKXx8NiE9PXdbMF0mJjIhPT13WzBdKSl7Qz0wO2NvbnRpbnVl''@;'; put 'put ''fWlmKDM9PT13WzBdJiYoIU58fHdbMV0+TlswXSYmd1sxXTxOWzNdKSl7Qy5sYWJlbD13WzFdO2JyZWFrfWlmKDY9PT13WzBdJiZDLmxhYmVsPE5bMV0pe0MubGFiZWw9TlsxXSxOPXc7YnJlYWt9aWYoTiYmQy5sYWJlbDxOWzJdKXtDLmxhYmVsPU5bMl0sQy5vcHMucHVzaCh3KTticmVha31O''@;'; put 'put ''WzJdJiZDLm9wcy5wb3AoKSxDLnRyeXMucG9wKCk7Y29udGludWV9dz1iLmNhbGwoRyxDKX1jYXRjaChKKXt3PVs2LEpdLEg9MH1maW5hbGx5e0Q9Tj0wfWlmKDUmd1swXSl0aHJvdyB3WzFdO3JldHVybnt2YWx1ZTp3WzBdP3dbMV06dm9pZCAwLGRvbmU6ITB9fShbdixwXSl9fX0saj10aGlz''@;'; put 'put ''JiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oRyxiKXt2YXIgRD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZHW1N5bWJvbC5pdGVyYXRvcl07aWYoIUQpcmV0dXJuIEc7dmFyIEgsTixnPUQuY2FsbChHKSxDPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1ifHxiLS0gPjApJiYhKEg9Zy5uZXh0KCkp''@;'; put 'put ''LmRvbmU7KUMucHVzaChILnZhbHVlKX1jYXRjaChTKXtOPXtlcnJvcjpTfX1maW5hbGx5e3RyeXtIJiYhSC5kb25lJiYoRD1nLnJldHVybikmJkQuY2FsbChnKX1maW5hbGx5e2lmKE4pdGhyb3cgTi5lcnJvcn19cmV0dXJuIEN9LFY9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlv''@;'; put 'put ''bihHLGIsRCl7aWYoRHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBILE49MCxnPWIubGVuZ3RoO048ZztOKyspIUgmJk4gaW4gYnx8KEh8fChIPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGIsMCxOKSksSFtOXT1iW05dKTtyZXR1cm4gRy5jb25jYXQoSHx8QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNsaWNlLmNhbGwoYikpfSxCPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihHKXtyZXR1cm4gRyYmRy5fX2VzTW9kdWxlP0c6e2RlZmF1bHQ6R319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzVGVzdEZpbGU9Ty50''@;'; put 'put ''ZXN0RmlsZVJlZ0V4cD1PLmNyZWF0ZVJlYWRTdHJlYW09Ty5jcmVhdGVXcml0ZVN0cmVhbT1PLmdldFJlYWxQYXRoPU8uYmFzZTY0RW5jb2RlRmlsZT1PLmJhc2U2NEVuY29kZUltYWdlRmlsZT1PLnBhdGhTZXBFc2NhcGVkPU8uY29weT1PLm1vdmVGaWxlPU8uZ2V0UmVsYXRpdmVQYXRoPU8u''@;'; put 'put ''dW5pZnlGaWxlUGF0aD1PLmRlbGV0ZUZvbGRlcj1PLmRlbGV0ZUZpbGU9Ty5jcmVhdGVGaWxlPU8uY3JlYXRlRm9sZGVyPU8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1PLmxpc3RTYXNGaWxlc0luRm9sZGVyPU8ubGlzdEluaUZpbGVz''@;'; put 'put ''SW5Gb2xkZXI9Ty5saXN0RmlsZXNJbkZvbGRlcj1PLnJlYWRGaWxlQmluYXJ5PU8ucmVhZEZpbGU9Ty5pc0ZvbGRlcj1PLmZvbGRlckV4aXN0cz1PLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBZPUIoUig1Njc0KSksWD1CKFIoOTg0KSksVT1CKFIoMjUyMCkpLHE9Uig2MjY2KSxlZT1JKFIoMjk3''@;'; put 'put ''NSkpO2Z1bmN0aW9uIHRlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFkuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9ZnVuY3Rpb24gb2UoRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUoRyldfSl9''@;'; put 'put ''KX1mdW5jdGlvbiBzZShHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKGZ1bmN0aW9uKEQpe3JldHVybiBE''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihIKXtyZXR1cm4hSC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWV9KX0pXX0pfSl9ZnVuY3Rpb24gaGUoRyxiLEQpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0hMCksdm9pZCAwPT09RCYmKEQ9W10pLGsodGhpcyx2b2lkIDAsdm9p''@;'; put 'put ''ZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE4pe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybiBrKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBDLFM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNlIDA6cmV0dXJuIGImJmcuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiBwLmlzRGlyZWN0b3J5KCl9KS5sZW5ndGg/KEM9W10sWzQsKDAscS5hc3luY0ZvckVhY2gpKGcuZmlsdGVyKGZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBwLmlzRGlyZWN0b3J5KCl9KSxmdW5jdGlvbihwKXtyZXR1cm4gayhTLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdyxKLG5lO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBELmluY2x1ZGVzKHc9cC5u''@;'; put 'put ''YW1lKT9bMywyXTooSj1VLmRlZmF1bHQuam9pbihHLHcpLG5lPVtWKFtdLGooQyksITEpXSxbNCxoZShKLGIsRCldKTtjYXNlIDE6Qz1WLmFwcGx5KHZvaWQgMCxuZS5jb25jYXQoW2ouYXBwbHkodm9pZCAwLFtkZS5zZW50KCkubWFwKGZ1bmN0aW9uKGZlKXtyZXR1cm4gVS5kZWZhdWx0Lmpv''@;'; put 'put ''aW4odyxmZSl9KV0pLCExXSkpLGRlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSldKTpbMywyXTtjYXNlIDE6cmV0dXJuIHYuc2VudCgpLFsyLFYoVihbXSxqKGcuZmlsdGVyKGZ1bmN0aW9uKHApe3JldHVybiFwLmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHAubmFtZX0pKSwhMSksaihDKSwhMSldO2Nhc2UgMjpyZXR1cm5bMixnLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5uYW1lfSldfX0pfSl9KV19KX0pfWZ1bmN0aW9uIHVlKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLm1rZGlyKEcse3JlY3Vyc2l2ZTohMH0pXX0pfSl9ZnVuY3Rpb24gY2UoRyxiLEQpe3ZvaWQgMD09PWImJihiPVUuZGVmYXVsdC5zZXApLHZvaWQgMD09PUQmJihEPSIvIik7dmFyIEg9e3VuaXg6Ii8iLHdpbjoiXFwifSxOPU9iamVjdC5r''@;'; put 'put ''ZXlzKEgpLmZpbmQoZnVuY3Rpb24oQyl7cmV0dXJuIEhbQ109PT1ifSk7aWYoTil7dmFyIGc9SFtPYmplY3Qua2V5cyhIKS5maW5kKGZ1bmN0aW9uKEMpe3JldHVybiBDIT09Tn0pXTtyZXR1cm4gTj1IW05dLEcuc3BsaXQoZykuam9pbihOKX1yZXR1cm4gRy5zcGxpdChEKS5qb2luKGIpfU8u''@;'; put 'put ''ZmlsZUV4aXN0cz1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5hY2Nlc3MoRyxZLmRlZmF1bHQuY29uc3RhbnRzLkZfT0spLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfSxPLmZvbGRlckV4aXN0cz10ZSxPLmlzRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5k''@;'; put 'put ''ZWZhdWx0LnByb21pc2VzLmxzdGF0KEcpLnRoZW4oZnVuY3Rpb24oRCl7cmV0dXJuIEQuaXNEaXJlY3RvcnkoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KV19KX0pfSxPLnJlYWRGaWxlPWZ1bmN0aW9uKEcsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPSJ1dGY4Iiksayh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHLGIpXX0pfSl9LE8ucmVhZEZpbGVCaW5hcnk9b2UsTy5saXN0RmlsZXNJbkZvbGRlcj1zZSxPLmxpc3RJbmlGaWxlc0luRm9sZGVyPWZ1''@;'; put 'put ''bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxzZShHKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4g''@;'; put 'put ''RC5lbmRzV2l0aCgiLmluaSIpfSldfX0pfSl9LE8ubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiB2b2lkIDA9PT1iJiYoYj0hMSksdm9pZCAwPT09RCYmKEQ9W10pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlv''@;'; put 'put ''bihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGhlKEcsYixEKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpLmZpbHRlcihmdW5jdGlvbihnKXtyZXR1cm4gZy5lbmRzV2l0aCgiLnNhcyIpfSldfX0pfSl9LE8ubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbihHKXty''@;'; put 'put ''ZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKEcse3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKGZ1bmN0aW9uKEQpe3JldHVybiBELmZpbHRlcihmdW5jdGlvbihI''@;'; put 'put ''KXtyZXR1cm4gSC5pc0RpcmVjdG9yeSgpfSkubWFwKGZ1bmN0aW9uKEgpe3JldHVybiBILm5hbWV9KX0pXX0pfSl9LE8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWhlLE8uY3JlYXRlRm9sZGVyPXVlLE8uY3JlYXRlRmlsZT1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIGsodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuKEc9Y2UoRykpLnNwbGl0KFUuZGVmYXVsdC5zZXApLmxlbmd0aD4xPygoSD1HLnNwbGl0KFUuZGVmYXVsdC5zZXApKS5wb3AoKSxbNCx0''@;'; put 'put ''ZShOPUguam9pbihVLmRlZmF1bHQuc2VwKSldKTpbMywzXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpP1szLDNdOls0LHVlKE4pXTtjYXNlIDI6Zy5zZW50KCksZy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMixZLmRlZmF1bHQucHJvbWlzZXMud3JpdGVGaWxlKEcsYixEKV19fSl9KX0sTy5kZWxl''@;'; put 'put ''dGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsWS5kZWZhdWx0LnJlbW92ZShHKV19KX0pfSxPLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEQsSCl7KDAsWC5kZWZhdWx0KShHLHt9LGZ1bmN0aW9uKE4pe3JldHVybiBOP0goTik6RCgpfSl9KV19KX0pfSxPLnVuaWZ5RmlsZVBhdGg9Y2UsTy5nZXRS''@;'; put 'put ''ZWxhdGl2ZVBhdGg9ZnVuY3Rpb24oRyxiKXt2YXIgRD1HLnNwbGl0KFUuZGVmYXVsdC5zZXApLEg9Yi5zcGxpdChVLmRlZmF1bHQuc2VwKSxOPVtdLGc9W107RC5mb3JFYWNoKGZ1bmN0aW9uKHAsdyl7dm9pZCAwIT09SFt3XSYmRFt3XT09PUhbd10/Ti5wdXNoKHApOnAmJmcucHVzaChwKX0p''@;'; put 'put ''O3ZhciBDPU4uam9pbihVLmRlZmF1bHQuc2VwKSxTPW5ldyBSZWdFeHAoIl4iLmNvbmNhdChVLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKSkpLHY9bmV3IFJlZ0V4cCgiIi5jb25jYXQoVS5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksIiQiKSk7cmV0dXJuKGcu''@;'; put 'put ''bGVuZ3RoPyIuLiIuY29uY2F0KFUuZGVmYXVsdC5zZXApLnJlcGVhdChnLmxlbmd0aCk6Ii4iLmNvbmNhdChVLmRlZmF1bHQuc2VwKSkrYi5yZXBsYWNlKEMsIiIpLnJlcGxhY2UoUywiIikucmVwbGFjZSh2LCIiKX0sTy5tb3ZlRmlsZT1mdW5jdGlvbihHLGIpe3JldHVybiBrKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShHLGIpXX0pfSl9LE8uY29weT1mdW5jdGlvbihHLGIpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRo''@;'; put 'put ''aXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsWS5kZWZhdWx0LmNvcHkoRyxiKV19KX0pfSxPLnBhdGhTZXBFc2NhcGVkPVUuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLE8uYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQg''@;'; put 'put ''MCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuWzIsb2UoRykudGhlbihmdW5jdGlvbihEKXt2YXIgSD1VLmRlZmF1bHQuZXh0bmFtZShHKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09SCYmKEg9InN2Zyt4bWwiKSwiZGF0YTppbWFnZS8iK0grIjti''@;'; put 'put ''YXNlNjQsIitELnRvU3RyaW5nKCJiYXNlNjQiKX0pXX0pfSl9LE8uYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVyblsyLFkuZGVmYXVsdC5wcm9taXNlcy5yZWFk''@;'; put 'put ''RmlsZShHLHtlbmNvZGluZzoiYmFzZTY0In0pXX0pfSl9LE8uZ2V0UmVhbFBhdGg9ZnVuY3Rpb24oRyl7cmV0dXJuIFkuZGVmYXVsdC5yZWFscGF0aFN5bmMoRyl9LE8uY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24oRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEUodGhpcyxmdW5jdGlvbihiKXtzd2l0Y2goYi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGVlLmZpbGVFeGlzdHMoRyldO2Nhc2UgMTpyZXR1cm4gYi5zZW50KCk/WzIsWS5kZWZhdWx0LmNyZWF0ZVdyaXRlU3RyZWFtKEcse2ZsYWdzOiJhIn0pXTpbNCxlZS5jcmVhdGVGaWxlKEcs''@;'; put 'put ''IiIpXTtjYXNlIDI6cmV0dXJuIGIuc2VudCgpLFsyLFkuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShHLHtmbGFnczoiYSJ9KV19fSl9KX0sTy5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uKEcpe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhp''@;'; put 'put ''cyxmdW5jdGlvbihiKXtyZXR1cm5bMixZLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShHKV19KX0pfSxPLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLE8uaXNUZXN0RmlsZT1mdW5jdGlvbihHKXtyZXR1cm4gTy50ZXN0RmlsZVJlZ0V4cC50ZXN0KEcpfX0sNTYyNjpm''@;'; put 'put ''dW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihrKXtyZXR1cm4gayYmay5fX2VzTW9kdWxlP2s6e2RlZmF1bHQ6a319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdl''@;'; put 'put ''dEFic29sdXRlUGF0aD12b2lkIDA7dmFyIEs9eihSKDI1MjApKSxJPXooUig3NDM1KSk7Ty5nZXRBYnNvbHV0ZVBhdGg9ZnVuY3Rpb24oayxFKXtyZXR1cm4gSy5kZWZhdWx0LmlzQWJzb2x1dGUoayl8fC9efi8uZXhlYyhrKT9LLmRlZmF1bHQubm9ybWFsaXplKGsucmVwbGFjZSgvXn4vLEku''@;'; put 'put ''ZGVmYXVsdC5ob21lZGlyKCkpKTpLLmRlZmF1bHQuam9pbihFLGspfX0sMjk3NTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihFLGosVixCKXt2b2lkIDA9PT1CJiYoQj1WKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoRSxCLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBqW1ZdfX0pfTpmdW5jdGlvbihFLGosVixCKXt2b2lkIDA9PT1CJiYoQj1WKSxFW0JdPWpbVl19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihFLGope2Zvcih2YXIg''@;'; put 'put ''ViBpbiBFKSJkZWZhdWx0Ij09PVZ8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpfHx6KGosRSxWKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucmVhZENzdj1PLmNyZWF0ZUNzdj1PLnVwZGF0ZUNzdj1PLnRlc3RG''@;'; put 'put ''aWxlUmVnRXhwPU8uaXNUZXN0RmlsZT1PLmdldFJlYWxQYXRoPU8uYmFzZTY0RW5jb2RlRmlsZT1PLmJhc2U2NEVuY29kZUltYWdlRmlsZT1PLmNvcHk9Ty5wYXRoU2VwRXNjYXBlZD1PLm1vdmVGaWxlPU8udW5pZnlGaWxlUGF0aD1PLmdldFJlbGF0aXZlUGF0aD1PLmRlbGV0ZUZvbGRlcj1P''@;'; put 'put ''LmRlbGV0ZUZpbGU9Ty5jcmVhdGVXcml0ZVN0cmVhbT1PLmNyZWF0ZVJlYWRTdHJlYW09Ty5jcmVhdGVGb2xkZXI9Ty5jcmVhdGVGaWxlPU8ubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPU8ubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1PLmxpc3RTYXNGaWxlc0luRm9sZGVyPU8ubGlz''@;'; put 'put ''dEluaUZpbGVzSW5Gb2xkZXI9Ty5saXN0RmlsZXNJbkZvbGRlcj1PLnJlYWRGaWxlQmluYXJ5PU8ucmVhZEZpbGU9Ty5pc0ZvbGRlcj1PLmZvbGRlckV4aXN0cz1PLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBJPVIoMTU1OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImZpbGVFeGlzdHMiLHtl''@;'; put 'put ''bnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZm9sZGVyRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShPLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0RmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IEkubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0SW5pRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibGlzdFNh''@;'; put 'put ''c0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0U3ViRm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''SS5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY3JlYXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVh''@;'; put 'put ''dGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZGVsZXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''TywiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0UmVsYXRpdmVQ''@;'; put 'put ''YXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJtb3ZlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIEkubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5wYXRoU2VwRXNjYXBlZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY29weSIse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5iYXNlNjRFbmNvZGVJbWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KE8sImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldFJlYWxQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZXRS''@;'; put 'put ''ZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidGVzdEZpbGVSZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBJLnRlc3RGaWxlUmVnRXhwfX0pO3ZhciBrPVIoMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsudXBkYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJjcmVh''@;'; put 'put ''dGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsucmVhZENzdn19KSxLKFIoNTYyNiksTyl9LDI3Nzc6KE0s''@;'; put 'put ''TyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5uZXdMaW5lPU8uY2FwaXRhbGl6ZUZpcnN0Q2hhcj1PLnNhbml0aXplU3BlY2lhbENoYXJzPU8ucGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIHo9Uig1MzA2KTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoTywicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHoucGFkV2l0aE51bWJlcn19KTt2YXIgSz1SKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6''@;'; put 'put ''ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIEk9''@;'; put 'put ''UigxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubmV3TGluZX19KX0sNTMwNjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksTy5wYWRXaXRoTnVtYmVyPXZvaWQgMCxPLnBhZFdpdGhOdW1iZXI9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdm9pZCAwPT09eiYmKHo9MCksUj45P1I6IiIuY29uY2F0KHopLmNvbmNhdChSKX19LDE2Mjg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm5ld0xpbmU9dm9pZCAwLE8ubmV3TGluZT1mdW5jdGlvbigpe3JldHVybiJ3aW4zMiI9PT16LnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifX0sOTI3NTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5jYXBpdGFsaXplRmlyc3RDaGFyPU8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLE8uc2FuaXRpemVTcGVjaWFsQ2hhcnM9ZnVuY3Rpb24oUil7cmV0dXJuIFIucmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05''@;'; put 'put ''XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIil9LE8uY2FwaXRhbGl6ZUZpcnN0Q2hhcj1mdW5jdGlvbihSKXtyZXR1cm4gUi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStSLnNsaWNlKDEpfX0sNjQ2NzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB6PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihJKXtyZXR1cm4gSSYmSS5fX2VzTW9kdWxlP0k6e2RlZmF1bHQ6SX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzU3BlY2lhbE1pc3Npbmc9Ty5jaG9pY2VWYWxp''@;'; put 'put ''ZGF0b3I9Ty5jb25maXJtYXRpb25WYWxpZGF0b3I9Ty51cmxWYWxpZGF0b3I9dm9pZCAwO3ZhciBLPXooUig0ODEpKTtPLnVybFZhbGlkYXRvcj1mdW5jdGlvbihJLGspe3JldHVybiEhSy5kZWZhdWx0LmlzSHR0cFVyaShJKXx8ISFLLmRlZmF1bHQuaXNIdHRwc1VyaShJKXx8IiI9PT1JfHxr''@;'; put 'put ''fSxPLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihJKXtyZXR1cm4hMD09PUl8fCExPT09SX0sTy5jaG9pY2VWYWxpZGF0b3I9ZnVuY3Rpb24oSSxrLEUpe3JldHVybiBJPjAmJkk8PWt8fEV9LE8uaXNTcGVjaWFsTWlzc2luZz1mdW5jdGlvbihJKXtyZXR1cm4oInN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBJfHwhSS5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEkpfX0sNzc1NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlVGlt''@;'; put 'put ''ZXN0YW1wPU8udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIHo9UigxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHoudGltZXN0YW1wVG9ZWVlZTU1E''@;'; put 'put ''REhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVUaW1lc3RhbXA9Ty50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDt2YXIgej1SKDI3NzcpO08udGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1mdW5jdGlvbihLKXt2b2lkIDA9PT1LJiYoSz1EYXRlLm5vdygpKTt2''@;'; put 'put ''YXIgST1uZXcgRGF0ZShLKTtyZXR1cm5bSS5nZXRGdWxsWWVhcigpLCgwLHoucGFkV2l0aE51bWJlcikoSS5nZXRNb250aCgpKzEpLCgwLHoucGFkV2l0aE51bWJlcikoSS5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCx6LnBhZFdpdGhOdW1iZXIpKEkuZ2V0SG91cnMoKSksKDAsei5w''@;'; put 'put ''YWRXaXRoTnVtYmVyKShJLmdldE1pbnV0ZXMoKSksKDAsei5wYWRXaXRoTnVtYmVyKShJLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0sTy5nZW5lcmF0ZVRpbWVzdGFtcD1mdW5jdGlvbihLLEkpe3ZvaWQgMD09PUsmJihLPSIiKTt2YXIgaz1uZXcgRGF0ZSxFPVtrLmdldFVUQ0Z1bGxZZWFy''@;'; put 'put ''KCksay5nZXRVVENNb250aCgpKzEsay5nZXRVVENEYXRlKCksay5nZXRVVENIb3VycygpLGsuZ2V0VVRDTWludXRlcygpLGsuZ2V0VVRDU2Vjb25kcygpXTtyZXR1cm4gRT1FLm1hcChmdW5jdGlvbihqKXtyZXR1cm4oMCx6LnBhZFdpdGhOdW1iZXIpKGopfSksSSYmSyYmSTxFLmxlbmd0aCYm''@;'; put 'put ''ST49MCYmRS5zcGxpY2UoSSwwLEspLEUuam9pbihJPyIiOkspfX0sODIzOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db25maWdUeXBlcz12b2lkIDAsKFI9Ty5Db25maWdUeXBlc3x8KE8uQ29u''@;'; put 'put ''ZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLFIuU2VydmljZT0ic2VydmljZUNvbmZpZyIsUi5Kb2I9ImpvYkNvbmZpZyIsUi5UZXN0PSJ0ZXN0Q29uZmlnIixSLkRvYz0iZG9jQ29uZmlnIixSLkRlcGxveT0iZGVwbG95Q29uZmlnIixSLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixS''@;'; put 'put ''LkF1dGg9ImF1dGhDb25maWcifSwyNDI3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTg5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KX0sMzY5MjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDY5Mzk6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8u''@;'; put 'put ''TWVtYmVyVHlwZT12b2lkIDAsKFI9Ty5NZW1iZXJUeXBlfHwoTy5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIsUi5maWxlPSJmaWxlIixSLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVs''@;'; put 'put ''ZSIse3ZhbHVlOiEwfSl9LDUxNjU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmpl''@;'; put 'put ''Y3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGose2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSl9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0p''@;'; put 'put ''LEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksSyhSKDgyMzkpLE8pLEsoUigyNDI3KSxPKSxLKFIoMTg5KSxPKSxLKFIoMzY5MiksTyksSyhSKDY5MzkpLE8pLEsoUigzMzI3KSxPKSxLKFIoNTE2NSksTyksSyhSKDQwNjkpLE8pLEsoUig4OTMyKSxPKSxLKFIoNCksTyksSyhSKDIwMTUpLE8pLEsoUig4NTE1KSxPKSxLKFIo''@;'; put 'put ''NTMxMyksTyksSyhSKDg5NzkpLE8pfSw0MDY5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTWFjcm9WYXJzPXZvaWQgMCxPLmlzTWFjcm9WYXJzPWZ1bmN0aW9uKFIpe3JldHVybiBSJiYib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIFIubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShSLm1hY3JvVmFycyl9fSw4OTMyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUjtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoUj1PLlNBU0pzRmlsZVR5cGV8fChPLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixSLmpvYj0iSm9iIixSLnRlc3Q9IlRlc3QiLFIuZmlsZT0iRmlsZSJ9LDIw''@;'; put 'put ''MTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1OihNLE8pPT57InVzZSBzdHJpY3QiO3ZhciBSO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNlcnZlclR5''@;'; put 'put ''cGU9dm9pZCAwLChSPU8uU2VydmVyVHlwZXx8KE8uU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLFIuU2FzOT0iU0FTOSIsUi5TYXNqcz0iU0FTSlMifSw1MzEzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KX0sODk3OTpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIHo9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oail7Zm9yKHZhciBWLEI9MSxZPWFyZ3VtZW50cy5sZW5ndGg7QjxZO0IrKylmb3IodmFyIFgg''@;'; put 'put ''aW4gVj1hcmd1bWVudHNbQl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsWCkmJihqW1hdPVZbWF0pO3JldHVybiBqfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uVGFyZ2V0''@;'; put 'put ''PXZvaWQgMDt2YXIgSz1SKDgyMzkpLEk9Uig4NTE1KSxrPVIoNjc4MSksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGooVixCKXt2YXIgWT10aGlzO3ZvaWQgMD09PUImJihCPXt9KSx0aGlzLl9zZXJ2ZXJUeXBlPUkuU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPWZ1bmN0aW9uKFgs''@;'; put 'put ''VSl7cmV0dXJuIHooeih7fSxZLl9jb25maWdbWF18fHt9KSxVW1hdKX07dHJ5e2lmKCFWKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUIsdGhpcy5fbmFtZT0oMCxrLnZhbGlkYXRlVGFyZ2V0''@;'; put 'put ''TmFtZSkoVi5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAsay52YWxpZGF0ZVNlcnZlclVybCkoVi5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAsay52YWxpZGF0ZVNlcnZlclR5cGUpKFYuc2VydmVyVHlwZSksdGhpcy5faHR0cHNBZ2VudE9wdGlvbnM9KDAsay52YWxpZGF0ZUh0dHBz''@;'; put 'put ''QWdlbnRPcHRpb25zKShWLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsay52YWxpZGF0ZUFwcExvYykoVi5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLGsudmFsaWRhdGVDb250ZXh0TmFtZSkoVi5jb250ZXh0TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2''@;'; put 'put ''ZXJOYW1lPSgwLGsudmFsaWRhdGVTZXJ2ZXJOYW1lKShWLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxrLnZhbGlkYXRlU3luY0ZvbGRlcikoVi5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5TmFtZT0oMCxrLnZhbGlkYXRlUmVwb3NpdG9yeU5h''@;'; put 'put ''bWUpKFYucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksVi5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsay52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5Eb2MsVikpKSxWLmF1dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgw''@;'; put 'put ''LGsudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLkF1dGgsVikpKSxWLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsay52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShWLmF1dGhDb25maWdTYXM5KSksVi5idWlsZENvbmZpZyYm''@;'; put 'put ''KHRoaXMuX2J1aWxkQ29uZmlnPSgwLGsudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5CdWlsZCxWKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLGsudmFsaWRhdGVEZXBsb3lDb25maWcpKFYuZGVwbG95Q29uZmlnP3RoaXMuZ2V0''@;'; put 'put ''Q29uZmlnKEsuQ29uZmlnVHlwZXMuRGVwbG95LFYpOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksVi5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxrLnZhbGlkYXRlU2VydmljZUNvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBl''@;'; put 'put ''cy5TZXJ2aWNlLFYpKSksVi5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsay52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoSy5Db25maWdUeXBlcy5Kb2IsVikpKSxWLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVhbUNvbmZpZz0oMCxrLnZhbGlkYXRlU3RyZWFtQ29u''@;'; put 'put ''ZmlnKSh0aGlzLmdldENvbmZpZyhLLkNvbmZpZ1R5cGVzLlN0cmVhbSxWKSkpLFYudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAsay52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEsuQ29uZmlnVHlwZXMuVGVzdCxWKSkpLFYubWFjcm9Gb2xkZXJzJiZWLm1hY3Jv''@;'; put 'put ''Rm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9Vi5tYWNyb0ZvbGRlcnMpLFYucHJvZ3JhbUZvbGRlcnMmJlYucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9Vi5wcm9ncmFtRm9sZGVycyksVi5iaW5hcnlGb2xkZXJzJiZWLmJpbmFyeUZvbGRl''@;'; put 'put ''cnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1WLmJpbmFyeUZvbGRlcnMpLFYuc3luY0RpcmVjdG9yaWVzJiZWLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsay52YWxpZGF0ZVN5bmNEaXJlY3RvcmllcykoVi5zeW5jRGlyZWN0b3JpZXMp''@;'; put 'put ''KX1jYXRjaChYKXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGFyZ2V0OiAiLmNvbmNhdChYLm1lc3NhZ2UpKX19cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxl''@;'; put 'put ''OiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwic2VydmVyVXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5w''@;'; put 'put ''cm90b3R5cGUsInNlcnZlclR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImh0dHBzQWdlbnRPcHRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYXBwTG9jIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcExvY30sZW51bWVyYWJsZTohMSxjb25maWd1''@;'; put 'put ''cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImRvY0NvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJh''@;'; put 'put ''dXRoQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJhdXRoQ29uZmlnU2FzOSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9h''@;'; put 'put ''dXRoQ29uZmlnU2FzOX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImJ1aWxkQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1aWxkQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiZGVwbG95Q29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInNl''@;'; put 'put ''cnZpY2VDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsImpvYkNvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9q''@;'; put 'put ''b2JDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzdHJlYW1Db25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtQ29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0p''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwibWFjcm9Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInByb2dy''@;'; put 'put ''YW1Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiYmluYXJ5Rm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9iaW5hcnlGb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqLnByb3RvdHlwZSwiY29udGV4dE5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJzZXJ2ZXJOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGoucHJvdG90eXBlLCJyZXBv''@;'; put 'put ''c2l0b3J5TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInRlc3RDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dGVzdENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN5bmNGb2xkZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3luY0ZvbGRlcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoai5wcm90b3R5cGUsInN5bmNEaXJlY3RvcmllcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksai5wcm90b3R5cGUudG9Kc29uPWZ1bmN0aW9uKFYpe3ZhciBC''@;'; put 'put ''LFksWDt2b2lkIDA9PT1WJiYoVj0hMCk7dmFyIFU9e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRpb25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25m''@;'; put 'put ''aWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oQj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUIpJiZCLmxlbmd0aCYmKFUubWFjcm9Gb2xkZXJzPXRoaXMubWFjcm9Gb2xkZXJzKSwhKG51bGw9PT0oWT10aGlzLnBy''@;'; put 'put ''b2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09WSkmJlkubGVuZ3RoJiYoVS5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oWD10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT1YKSYmWC5sZW5ndGgmJihVLmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xk''@;'; put 'put ''ZXJzKSx0aGlzLmF1dGhDb25maWcmJihVLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoVS5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnN5bmNEaXJlY3Rvcmllcz9VLnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJl''@;'; put 'put ''Y3RvcmllczpWJiYoVS5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/VS5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlYmJihVLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixidWlsZE91dHB1dEZpbGVOYW1lOiIiLmNvbmNhdCh0aGlz''@;'; put 'put ''Lm5hbWUsIi5zYXMiKSxidWlsZE91dHB1dEZvbGRlcjoic2FzanNidWlsZCIsYnVpbGRSZXN1bHRzRm9sZGVyOiJzYXNqc3Jlc3VsdHMiLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP1Uuam9iQ29uZmlnPXRoaXMuam9iQ29uZmlnOlYmJihVLmpvYkNvbmZpZz17am9iRm9sZGVyczpb''@;'; put 'put ''XSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/VS5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpWJiYoVS5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3Jh''@;'; put 'put ''bToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9VLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpWJiYoVS5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNlUGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3Nl''@;'; put 'put ''dFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP1UudGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6ViYmKFUudGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9''@;'; put 'put ''PT1JLlNlcnZlclR5cGUuU2FzVml5YT9VLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhczkmJihVLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLFUucmVwb3NpdG9yeU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksVX0san0o''@;'; put 'put ''KTtPLlRhcmdldD1FfSw2NzgxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1''@;'; put 'put ''bGUiLHt2YWx1ZTohMH0pLE8udmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9Ty52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPU8udmFsaWRhdGVTeW5jRm9sZGVyPU8udmFsaWRhdGVTZXJ2ZXJOYW1lPU8udmFsaWRhdGVDb250ZXh0TmFtZT1PLnZhbGlkYXRlU3RyZWFtQ29uZmlnPU8udmFsaWRhdGVE''@;'; put 'put ''ZXBsb3lDb25maWc9Ty52YWxpZGF0ZUpvYkNvbmZpZz1PLnZhbGlkYXRlVGVzdENvbmZpZz1PLnZhbGlkYXRlU2VydmljZUNvbmZpZz1PLnZhbGlkYXRlQnVpbGRDb25maWc9Ty52YWxpZGF0ZUF1dGhDb25maWdTYXM5PU8udmFsaWRhdGVBdXRoQ29uZmlnPU8udmFsaWRhdGVEb2NDb25maWc9''@;'; put 'put ''Ty52YWxpZGF0ZUFwcExvYz1PLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9Ty52YWxpZGF0ZVNlcnZlclVybD1PLnZhbGlkYXRlVGFyZ2V0TmFtZT1PLnZhbGlkYXRlU2VydmVyVHlwZT12b2lkIDA7dmFyIEs9eihSKDQ4MSkpLEk9UigzOTAwKTtPLnZhbGlkYXRlU2VydmVyVHlwZT1mdW5j''@;'; put 'put ''dGlvbihrKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoayE9PUkuU2VydmVyVHlwZS5TYXM5JiZrIT09SS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJmshPT1JLlNlcnZlclR5cGUu''@;'; put 'put ''U2FzanMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBTdXBwb3J0ZWQgdmFsdWVzIGZvciAgYHNlcnZlclR5cGVgIGFyZSAiLmNvbmNhdChJLlNlcnZlclR5cGUuU2FzVml5YSwiLCAiKS5jb25jYXQoSS5TZXJ2ZXJUeXBlLlNhczksIiBhbmQgIikuY29uY2F0KEkuU2Vy''@;'; put 'put ''dmVyVHlwZS5TYXNqcywiLiIpKTtyZXR1cm4ga30sTy52YWxpZGF0ZVRhcmdldE5hbWU9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihrLnRyaW0oKS5p''@;'; put 'put ''bmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNlcy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KGspKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbiBv''@;'; put 'put ''bmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZVNlcnZlclVybD1mdW5jdGlvbihrKXtpZihudWxsPT1rJiYoaz0iIiksIiIhPT1rJiYhSy5kZWZhdWx0LmlzSHR0cFVyaShrKSYmIUsuZGVmYXVsdC5pc0h0dHBzVXJp''@;'; put 'put ''KGspKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4ga30sTy52YWxp''@;'; put 'put ''ZGF0ZUh0dHBzQWdlbnRPcHRpb25zPWZ1bmN0aW9uKGspe2lmKGspe2lmKCJvYmplY3QiIT10eXBlb2Ygayl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBzQWdl''@;'; put 'put ''bnRPcHRpb25zYCIpO2lmKG51bGw9PWsuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKWsuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2Ygay5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2Vu''@;'; put 'put ''dE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygay5jYVBhdGgmJihrLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2Ygay5rZXlQYXRoJiYoay5rZXlQYXRoPXZv''@;'; put 'put ''aWQgMCksInN0cmluZyIhPXR5cGVvZiBrLmNlcnRQYXRoJiYoay5jZXJ0UGF0aD12b2lkIDApLGt9fSxPLnZhbGlkYXRlQXBwTG9jPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBv''@;'; put 'put ''ciB1bmRlZmluZWQuIik7aWYoIWsuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBhIGAvYC4iKTtyZXR1cm4ga30sTy52YWxpZGF0ZURvY0NvbmZpZz1mdW5jdGlvbihrKXtpZihrfHwoaz17fSks''@;'; put 'put ''ImJvb2xlYW4iIT10eXBlb2Ygay5kaXNwbGF5TWFjcm9Db3JlJiYoay5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2Ygay5lbmFibGVMaW5lYWdlJiYoay5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBrLm91dERpcmVjdG9yeSYmKGsub3V0''@;'; put 'put ''RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBrLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PWsuZGF0YUNvbnRyb2xsZXJVcmwmJiFLLmRlZmF1bHQuaXNIdHRwVXJpKGsuZGF0YUNvbnRyb2xsZXJVcmwpJiYhSy5kZWZhdWx0LmlzSHR0cHNVcmkoay5kYXRhQ29udHJvbGxl''@;'; put 'put ''clVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCku''@;'; put 'put ''Iil9ZWxzZSBrLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4ga30sTy52YWxpZGF0ZUF1dGhDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4g''@;'; put 'put ''a30sTy52YWxpZGF0ZUF1dGhDb25maWdTYXM5PWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIWsudXNlck5hbWV8fCFrLnBhc3N3b3JkKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNlck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4ga30sTy52YWxpZGF0ZUJ1aWxkQ29uZmlnPWZ1bmN0aW9uKGssRSl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNv''@;'; put 'put ''bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIGsuYnVpbGRSZXN1bHRzRm9sZGVyfHwoay5idWlsZFJlc3VsdHNGb2xkZXI9InNhc2pzcmVzdWx0cyIpLGsuYnVpbGRPdXRwdXRGb2xkZXJ8fChrLmJ1aWxkT3V0cHV0Rm9sZGVyPSJzYXNqc2J1aWxkIiks''@;'; put 'put ''ay5idWlsZE91dHB1dEZpbGVOYW1lfHwoay5idWlsZE91dHB1dEZpbGVOYW1lPSIiLmNvbmNhdChFLCIuc2FzIikpLGsuaW5pdFByb2dyYW18fChrLmluaXRQcm9ncmFtPSIiKSxrLnRlcm1Qcm9ncmFtfHwoay50ZXJtUHJvZ3JhbT0iIiksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSks''@;'; put 'put ''a30sTy52YWxpZGF0ZVNlcnZpY2VDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsu''@;'; put 'put ''dGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLnNlcnZpY2VGb2xkZXJzfHwoay5zZXJ2aWNlRm9sZGVycz1bXSksay5tYWNyb1ZhcnN8fChrLm1hY3JvVmFycz17fSksa30sTy52YWxpZGF0ZVRlc3RDb25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZh''@;'; put 'put ''bGlkIHRlc3QgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLm1hY3JvVmFyc3x8KGsubWFjcm9WYXJzPXt9KSxrLnRlc3RT''@;'; put 'put ''ZXRVcHx8KGsudGVzdFNldFVwPSIiKSxrLnRlc3RUZWFyRG93bnx8KGsudGVzdFRlYXJEb3duPSIiKSxrfSxPLnZhbGlkYXRlSm9iQ29uZmlnPWZ1bmN0aW9uKGspe2lmKCFrKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVm''@;'; put 'put ''aW5lZC4iKTtyZXR1cm4gay5pbml0UHJvZ3JhbXx8KGsuaW5pdFByb2dyYW09IiIpLGsudGVybVByb2dyYW18fChrLnRlcm1Qcm9ncmFtPSIiKSxrLmpvYkZvbGRlcnN8fChrLmpvYkZvbGRlcnM9W10pLGsubWFjcm9WYXJzfHwoay5tYWNyb1ZhcnM9e30pLGt9LE8udmFsaWRhdGVEZXBsb3lD''@;'; put 'put ''b25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmRlcGxveVNlcnZpY2VQYWNrPSEhay5kZXBsb3lTZXJ2aWNlUGFjayxrLmRlcGxveVNjcmlwdHN8''@;'; put 'put ''fChrLmRlcGxveVNjcmlwdHM9W10pLGt9LE8udmFsaWRhdGVTdHJlYW1Db25maWc9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCEwIT09ay5zdHJlYW1XZWImJiEx''@;'; put 'put ''IT09ay5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKGsuc3RyZWFtV2ViJiYhay5zdHJlYW1XZWJGb2xkZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVh''@;'; put 'put ''bSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKGsuc3RyZWFtV2ViJiYhay53ZWJTb3VyY2VQYXRoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBg''@;'; put 'put ''d2ViU291cmNlUGF0aGAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gay5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIGsuc3RyZWFtTG9nbyYmKGsuc3RyZWFtTG9nbz12b2lkIDApLGsuYXNzZXRQYXRoc3x8KGsuYXNzZXRQYXRocz1bXSksay5zdHJl''@;'; put 'put ''YW1TZXJ2aWNlTmFtZXx8KGsuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxrfSxPLnZhbGlkYXRlQ29udGV4dE5hbWU9ZnVuY3Rpb24oayxFKXtyZXR1cm4gRSE9PUkuU2VydmVyVHlwZS5TYXNWaXlhfHxrP2s6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9LE8udmFs''@;'; put 'put ''aWRhdGVTZXJ2ZXJOYW1lPWZ1bmN0aW9uKGssRSl7cmV0dXJuIEUhPT1JLlNlcnZlclR5cGUuU2FzOXx8az9rOiJTQVNBcHAifSxPLnZhbGlkYXRlU3luY0ZvbGRlcj1mdW5jdGlvbihrKXtpZigic3RyaW5nIj09dHlwZW9mIGsmJmspcmV0dXJuIGt9LE8udmFsaWRhdGVSZXBvc2l0b3J5TmFt''@;'; put 'put ''ZT1mdW5jdGlvbihrLEUpe3JldHVybiBFIT09SS5TZXJ2ZXJUeXBlLlNhczl8fGs/azoiRm91bmRhdGlvbiJ9LE8udmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9ZnVuY3Rpb24oayl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fu''@;'; put 'put ''bm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBrLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoIUUubG9jYWx8fCFFLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3Rl''@;'; put 'put ''IGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxrfX0sMjkyNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEUpe3JldHVybiBFJiZFLl9fZXNNb2R1bGU/RTp7ZGVm''@;'; put 'put ''YXVsdDpFfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZGVjb2RlRnJvbUJhc2U2ND1PLmVuY29kZVRvQmFzZTY0PXZvaWQgMDt2YXIgST1LKFIoNTgzNSkpLGs9IntzYXNqc19lbmNvZGVkfSI7Ty5lbmNvZGVUb0Jhc2U2ND1mdW5jdGlvbihF''@;'; put 'put ''KXt2YXIgaj1JLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4IiksVj16LmZyb20oaitFKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIGsrVn0sTy5kZWNvZGVGcm9tQmFzZTY0PWZ1bmN0aW9uKEUpe3JldHVybiBFLnN0YXJ0c1dpdGgoayk/KEU9RS5yZXBsYWNlKC9e''@;'; put 'put ''e3Nhc2pzX2VuY29kZWR9LywiIiksei5mcm9tKEUsImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIwMCkpOkV9fSw1ODE6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uYnl0ZXNUb1NpemU9dm9pZCAw''@;'; put 'put ''LE8uYnl0ZXNUb1NpemU9ZnVuY3Rpb24oUix6LEspe2lmKHZvaWQgMD09PXomJih6PTEpLHZvaWQgMD09PUsmJihLPTEwOTk1MTE2Mjc3NzYpLDA9PT1SKXJldHVybiIwIEIiO1I9Uj5LP0s6Ujt2YXIgST16PDA/MDp6LGs9TWF0aC5mbG9vcihNYXRoLmxvZyhSKS9NYXRoLmxvZygxMDI0KSk7''@;'; put 'put ''cmV0dXJuKFIvTWF0aC5wb3coMTAyNCxrKSkudG9GaXhlZChJKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtrXX19LDg2NTM6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY2h1bms9dm9pZCAwLE8u''@;'; put 'put ''Y2h1bms9ZnVuY3Rpb24oUix6KXtyZXR1cm4gdm9pZCAwPT09eiYmKHo9MjIwKSxSLmxlbmd0aDw9ej9bUl06KFIubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIreisifSIsImciKSl8fFtdKS5maWx0ZXIoZnVuY3Rpb24oSyl7cmV0dXJuISFLfSl9fSw2NDU3OmZ1bmN0aW9uKE0sTyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihLLEkpe3ZhciBrPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJktbU3ltYm9sLml0ZXJhdG9yXTtpZighaylyZXR1cm4gSzt2YXIgRSxqLFY9ay5jYWxsKEspLEI9W107dHJ5e2Zvcig7KHZvaWQgMD09PUl8fEktLSA+''@;'; put 'put ''MCkmJiEoRT1WLm5leHQoKSkuZG9uZTspQi5wdXNoKEUudmFsdWUpfWNhdGNoKFkpe2o9e2Vycm9yOll9fWZpbmFsbHl7dHJ5e0UmJiFFLmRvbmUmJihrPVYucmV0dXJuKSYmay5jYWxsKFYpfWZpbmFsbHl7aWYoail0aHJvdyBqLmVycm9yfX1yZXR1cm4gQn0sej10aGlzJiZ0aGlzLl9fc3By''@;'; put 'put ''ZWFkQXJyYXl8fGZ1bmN0aW9uKEssSSxrKXtpZihrfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIEUsaj0wLFY9SS5sZW5ndGg7ajxWO2orKykhRSYmaiBpbiBJfHwoRXx8KEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoSSwwLGopKSxFW2pdPUlbal0pO3JldHVybiBLLmNvbmNh''@;'; put 'put ''dChFfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmRpZmY9dm9pZCAwLE8uZGlmZj1mdW5jdGlvbihLLEkpe3ZhciBrPUsuZmlsdGVyKGZ1bmN0aW9uKGope3JldHVybiJvYmplY3QiPT10''@;'; put 'put ''eXBlb2Ygaj8hSlNPTi5zdHJpbmdpZnkoSSkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoaikpOiFJLmluY2x1ZGVzKGopfSksRT1JLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGo/IUpTT04uc3RyaW5naWZ5KEspLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KGop''@;'; put 'put ''KTohSy5pbmNsdWRlcyhqKX0pO3JldHVybiB6KHooW10sUihrKSwhMSksUihFKSwhMSl9fSwxNTI5OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7dmFyIFI9e1NBU1ZJ''@;'; put 'put ''WUE6Ii9TQVNKb2JFeGVjdXRpb24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIn07Ty5nZXRFeGVjdXRvclBhdGg9ZnVuY3Rpb24oeil7cmV0dXJuIHo/KHo9ei50b1VwcGVyQ2FzZSgpLFJbel18fCIiKToiIn19LDMzMTY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRUcmVlRXhhbXBsZT1PLmlzRmlsZVRyZWU9dm9pZCAwO3ZhciB6PVIoMzkwMCk7Ty5pc0ZpbGVUcmVlPWZ1bmN0aW9uKEUpe3JldHVybiBFJiZFLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRS5tZW1iZXJzKSYmMD09PUUu''@;'; put 'put ''bWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIUsoaikmJiFJKGopJiYhayhqKX0pLmxlbmd0aH07dmFyIEs9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJzdHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9PT16Lk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBF''@;'; put 'put ''LmNvZGV9LEk9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJzdHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9PT16Lk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5cGVvZiBFLmNvZGV9LGs9ZnVuY3Rpb24oRSl7cmV0dXJuIEUmJiJzdHJpbmciPT10eXBlb2YgRS5uYW1lJiZFLnR5cGU9''@;'; put 'put ''PT16Lk1lbWJlclR5cGUuZm9sZGVyJiZFLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRS5tZW1iZXJzKSYmMD09PUUubWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oail7cmV0dXJuIUsoaikmJiFJKGopJiYhayhqKX0pLmxlbmd0aH07Ty5nZXRUcmVlRXhhbXBsZT1mdW5jdGlvbigpe3JldHVybntt''@;'; put 'put ''ZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTp6Lk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0eXBlOnouTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTp6Lk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxv''@;'; put 'put ''IFdvcmxkITsifV19XX1dfX19LDYyNjY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oWCxVLHEsZWUpe3ZvaWQgMD09PWVlJiYoZWU9cSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgs''@;'; put 'put ''ZWUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFVbcV19fSl9OmZ1bmN0aW9uKFgsVSxxLGVlKXt2b2lkIDA9PT1lZSYmKGVlPXEpLFhbZWVdPVVbcV19KSxLPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihYLFUpe2Zvcih2YXIgcSBpbiBYKSJkZWZhdWx0''@;'; put 'put ''Ij09PXF8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLHEpfHx6KFUsWCxxKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY2h1bms9Ty5kaWZmPU8uYnl0ZXNUb1NpemU9Ty5nZXRFeGVjdXRvclBhdGg9Ty5kZWNvZGVG''@;'; put 'put ''cm9tQmFzZTY0PU8uZW5jb2RlVG9CYXNlNjQ9Ty51cmxPcmlnaW49Ty5nZW5lcmF0ZVBhdGhGb3JTYXM9Ty5nZXRNYWNyb3NQYXRoPU8uZXNjYXBlV2luU2xhc2hlcz1PLmlzTGludXg9Ty5pc1dpbmRvd3M9Ty51bmlxQXJyYXk9Ty5hc3luY0ZvckVhY2g9Ty51dWlkdjQ9dm9pZCAwO3ZhciBJ''@;'; put 'put ''PVIoMTEzMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBJLmFzeW5jRm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIEkuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJpc0xpbnV4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVy''@;'; put 'put ''YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShPLCJnZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlUGF0aEZvclNhc319KSxLKFIoMzMxNiksTyk7dmFyIGs9Uig5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywidXJsT3JpZ2luIix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay51cmxPcmlnaW59fSk7dmFyIEU9UigyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShPLCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRS5kZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBqPVIoMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGouZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBWPVIoNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWLmJ5dGVzVG9TaXplfX0pO3ZhciBCPVIoNjQ1Nyk7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KE8sImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmRpZmZ9fSk7dmFyIFk9Uig4NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBZLmNodW5rfX0pfSw5''@;'; put 'put ''NjUyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnVybE9yaWdpbj12b2lkIDAsTy51cmxPcmlnaW49ZnVuY3Rpb24oUil7aWYoIiI9PT1SKXJldHVybiBSO3ZhciB6O3RyeXt6PW5ldyBVUkwoUikub3JpZ2lu''@;'; put 'put ''fWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIHp9fSwxMTMxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2Up''@;'; put 'put ''KShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihz''@;'; put 'put ''ZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHkoaixWfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVs''@;'; put 'put ''OjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYoQil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihY''@;'; put 'put ''PTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxzZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9''@;'; put 'put ''c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlz''@;'; put 'put ''KS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxzZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1Y''@;'; put 'put ''WzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYo''@;'; put 'put ''NSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fSxrPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihqKXtyZXR1cm4gaiYmai5fX2VzTW9kdWxlP2o6e2RlZmF1bHQ6an19O09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdlbmVyYXRlUGF0aEZvclNhcz1PLmdldE1hY3Jvc1BhdGg9Ty5lc2NhcGVXaW5TbGFzaGVzPU8uaXNMaW51eD1PLmlzV2luZG93cz1PLnVuaXFBcnJheT1PLnV1aWR2ND1PLmFzeW5jRm9yRWFjaD12b2lkIDA7dmFyIEU9''@;'; put 'put ''ayhSKDI1MjApKTtPLmFzeW5jRm9yRWFjaD1mdW5jdGlvbihqLFYpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oWSl7c3dpdGNoKFkubGFiZWwpe2Nhc2UgMDpCPTAsWS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gQjxq''@;'; put 'put ''Lmxlbmd0aD9bNCxWKGpbQl0sQixqKV06WzMsNF07Y2FzZSAyOlkuc2VudCgpLFkubGFiZWw9MztjYXNlIDM6cmV0dXJuIEIrKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LE8udXVpZHY0PWZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4''@;'; put 'put ''eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGope3ZhciBWPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1qP1Y6MyZWfDgpLnRvU3RyaW5nKDE2KX0pfSxPLnVuaXFBcnJheT1mdW5jdGlvbihqKXtyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGopKX0sTy5pc1dpbmRvd3M9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4id2luMzIiPT09ei5wbGF0Zm9ybX0sTy5pc0xpbnV4PWZ1bmN0aW9uKCl7cmV0dXJuImxpbnV4Ij09PXoucGxhdGZvcm19LE8uZXNjYXBlV2luU2xhc2hlcz1mdW5jdGlvbihqKXtyZXR1cm4oMCxPLmlzV2luZG93cykoKT9qLnJlcGxhY2UoL1xcL2csIlxcXFwiKTpq''@;'; put 'put ''fSxPLmdldE1hY3Jvc1BhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gRS5kZWZhdWx0LmpvaW4oIi8iLCIuLiIsIm1hY3JvcyIpfSxPLmdlbmVyYXRlUGF0aEZvclNhcz1mdW5jdGlvbihqKXtyZXR1cm4gai5yZXBsYWNlKC9cXC9nLCIvIil9fSw5ODA5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29u''@;'; put 'put ''c3Qgej1PO3ouYmlnbnVtPVIoNDU5MCksei5kZWZpbmU9UigyNTAwKS5kZWZpbmUsei5iYXNlPVIoMTk3OSksei5jb25zdGFudHM9Uig2ODI2KSx6LmRlY29kZXJzPVIoODMwNyksei5lbmNvZGVycz1SKDY1NzkpfSwyNTAwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDY1Nzkp''@;'; put 'put ''LEs9Uig4MzA3KSxJPVIoNTcxNyk7ZnVuY3Rpb24gayhFLGope3RoaXMubmFtZT1FLHRoaXMuYm9keT1qLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1PLmRlZmluZT1mdW5jdGlvbihFLGope3JldHVybiBuZXcgayhFLGopfSxrLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVu''@;'; put 'put ''Y3Rpb24oRSl7Y29uc3Qgaj10aGlzLm5hbWU7ZnVuY3Rpb24gVihCKXt0aGlzLl9pbml0TmFtZWQoQixqKX1yZXR1cm4gSShWLEUpLFYucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oQixZKXtFLmNhbGwodGhpcyxCLFkpfSxuZXcgVih0aGlzKX0say5wcm90b3R5cGUuX2dldERlY29k''@;'; put 'put ''ZXI9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoRT1FfHwiZGVyIil8fCh0aGlzLmRlY29kZXJzW0VdPXRoaXMuX2NyZWF0ZU5hbWVkKEtbRV0pKSx0aGlzLmRlY29kZXJzW0VdfSxrLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oRSxqLFYpe3JldHVy''@;'; put 'put ''biB0aGlzLl9nZXREZWNvZGVyKGopLmRlY29kZShFLFYpfSxrLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShFPUV8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbRV09dGhpcy5fY3JlYXRlTmFtZWQoeltFXSkpLHRo''@;'; put 'put ''aXMuZW5jb2RlcnNbRV19LGsucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihFLGosVil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoaikuZW5jb2RlKEUsVil9fSw2NjI1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDU3MTcpLEs9Uig4NDY1KS5iLEk9UigyMzk5KS5CdWZmZXI7''@;'; put 'put ''ZnVuY3Rpb24gayhqLFYpe0suY2FsbCh0aGlzLFYpLEkuaXNCdWZmZXIoaik/KHRoaXMuYmFzZT1qLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9ai5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiBFKGosVil7aWYoQXJyYXkuaXNBcnJheShqKSl0aGlz''@;'; put 'put ''Lmxlbmd0aD0wLHRoaXMudmFsdWU9ai5tYXAoZnVuY3Rpb24oQil7cmV0dXJuIEUuaXNFbmNvZGVyQnVmZmVyKEIpfHwoQj1uZXcgRShCLFYpKSx0aGlzLmxlbmd0aCs9Qi5sZW5ndGgsQn0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGope2lmKCEoMDw9aiYmajw9MjU1KSlyZXR1''@;'; put 'put ''cm4gVi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9aix0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBqKXRoaXMudmFsdWU9aix0aGlzLmxlbmd0aD1JLmJ5dGVMZW5ndGgoaik7ZWxzZXtpZighSS5pc0J1ZmZlcihqKSlyZXR1''@;'; put 'put ''cm4gVi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2Ygaik7dGhpcy52YWx1ZT1qLHRoaXMubGVuZ3RoPWoubGVuZ3RofX16KGssSyksTy5DPWssay5pc0RlY29kZXJCdWZmZXI9ZnVuY3Rpb24oail7cmV0dXJuIGogaW5zdGFuY2VvZiBrfHwib2JqZWN0Ij09dHlwZW9mIGomJkku''@;'; put 'put ''aXNCdWZmZXIoai5iYXNlKSYmIkRlY29kZXJCdWZmZXIiPT09ai5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIGoub2Zmc2V0JiYibnVtYmVyIj09dHlwZW9mIGoubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5zYXZlJiYiZnVuY3Rpb24iPT10eXBlb2Ygai5yZXN0b3Jl''@;'; put 'put ''JiYiZnVuY3Rpb24iPT10eXBlb2Ygai5pc0VtcHR5JiYiZnVuY3Rpb24iPT10eXBlb2Ygai5yZWFkVUludDgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnNraXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLnJhd30say5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5v''@;'; put 'put ''ZmZzZXQscmVwb3J0ZXI6Sy5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0say5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihqKXtjb25zdCBWPW5ldyBrKHRoaXMuYmFzZSk7cmV0dXJuIFYub2Zmc2V0PWoub2Zmc2V0LFYubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PWoub2Zm''@;'; put 'put ''c2V0LEsucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLGoucmVwb3J0ZXIpLFZ9LGsucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0say5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKGope3JldHVybiB0aGlzLm9mZnNl''@;'; put 'put ''dCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3Ioanx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxrLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKGosVil7aWYoISh0aGlzLm9mZnNldCtqPD10aGlzLmxlbmd0aCkpcmV0dXJu''@;'; put 'put ''IHRoaXMuZXJyb3IoVnx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IEI9bmV3IGsodGhpcy5iYXNlKTtyZXR1cm4gQi5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLEIub2Zmc2V0PXRoaXMub2Zmc2V0LEIubGVuZ3RoPXRoaXMub2Zmc2V0K2osdGhpcy5vZmZzZXQr''@;'; put 'put ''PWosQn0say5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmJhc2Uuc2xpY2Uoaj9qLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LE8uUj1FLEUuaXNFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKGope3JldHVybiBqIGluc3RhbmNlb2YgRXx8Im9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBqJiYiRW5jb2RlckJ1ZmZlciI9PT1qLmNvbnN0cnVjdG9yLm5hbWUmJiJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBqLmpvaW59LEUucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oaixWKXtyZXR1cm4ganx8KGo9SS5hbGxvYyh0aGlzLmxlbmd0aCkp''@;'; put 'put ''LFZ8fChWPTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKEIpe0Iuam9pbihqLFYpLFYrPUIubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9qW1ZdPXRoaXMudmFsdWU6InN0cmluZyI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLnZhbHVlP2oud3JpdGUodGhpcy52YWx1ZSxWKTpJLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoaixWKSxWKz10aGlzLmxlbmd0aCkpLGp9fSwxOTc5OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouUmVwb3J0ZXI9Uig4NDY1KS5i''@;'; put 'put ''LHouRGVjb2RlckJ1ZmZlcj1SKDY2MjUpLkMsei5FbmNvZGVyQnVmZmVyPVIoNjYyNSkuUix6Lk5vZGU9UigxOTQ5KX0sMTk0OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4NDY1KS5iLEs9Uig2NjI1KS5SLEk9Uig2NjI1KS5DLGs9Uig5NzQ2KSxFPVsic2VxIiwic2Vxb2Yi''@;'; put 'put ''LCJzZXQiLCJzZXRvZiIsIm9iamlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0''@;'; put 'put ''ciIsInByaW50c3RyIiwidDYxc3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0saj1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KEUpO2Z1bmN0aW9uIFYoWSxY''@;'; put 'put ''LFUpe2NvbnN0IHE9e307dGhpcy5fYmFzZVN0YXRlPXEscS5uYW1lPVUscS5lbmM9WSxxLnBhcmVudD1YfHxudWxsLHEuY2hpbGRyZW49bnVsbCxxLnRhZz1udWxsLHEuYXJncz1udWxsLHEucmV2ZXJzZUFyZ3M9bnVsbCxxLmNob2ljZT1udWxsLHEub3B0aW9uYWw9ITEscS5hbnk9ITEscS5v''@;'; put 'put ''Ymo9ITEscS51c2U9bnVsbCxxLnVzZURlY29kZXI9bnVsbCxxLmtleT1udWxsLHEuZGVmYXVsdD1udWxsLHEuZXhwbGljaXQ9bnVsbCxxLmltcGxpY2l0PW51bGwscS5jb250YWlucz1udWxsLHEucGFyZW50fHwocS5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfU0uZXhwb3J0cz1WO2NvbnN0''@;'; put 'put ''IEI9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtWLnByb3Rv''@;'; put 'put ''dHlwZS5jbG9uZT1mdW5jdGlvbigpe2NvbnN0IFk9dGhpcy5fYmFzZVN0YXRlLFg9e307Qi5mb3JFYWNoKGZ1bmN0aW9uKHEpe1hbcV09WVtxXX0pO2NvbnN0IFU9bmV3IHRoaXMuY29uc3RydWN0b3IoWC5wYXJlbnQpO3JldHVybiBVLl9iYXNlU3RhdGU9WCxVfSxWLnByb3RvdHlwZS5fd3Jh''@;'; put 'put ''cD1mdW5jdGlvbigpe2NvbnN0IFk9dGhpcy5fYmFzZVN0YXRlO2ouZm9yRWFjaChmdW5jdGlvbihYKXt0aGlzW1hdPWZ1bmN0aW9uKCl7Y29uc3QgVT1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gWS5jaGlsZHJlbi5wdXNoKFUpLFVbWF0uYXBwbHkoVSxhcmd1bWVudHMpfX0s''@;'; put 'put ''dGhpcyl9LFYucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO2sobnVsbD09PVgucGFyZW50KSxZLmNhbGwodGhpcyksWC5jaGlsZHJlbj1YLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fYmFzZVN0YXRlLnBhcmVudD09PXRo''@;'; put 'put ''aXN9LHRoaXMpLGsuZXF1YWwoWC5jaGlsZHJlbi5sZW5ndGgsMSwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LFYucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlLFU9WS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEg''@;'; put 'put ''aW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtZPVkuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiEocSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihrKG51bGw9PT1YLmNoaWxkcmVuKSxYLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKHEpe3EuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1ZLmxlbmd0aCYmKGsobnVsbD09PVguYXJncyksWC5hcmdzPVksWC5yZXZlcnNlQXJncz1ZLm1hcChmdW5jdGlvbihxKXtpZigib2JqZWN0IiE9dHlwZW9mIHF8fHEuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0''@;'; put 'put ''dXJuIHE7Y29uc3QgZWU9e307cmV0dXJuIE9iamVjdC5rZXlzKHEpLmZvckVhY2goZnVuY3Rpb24odGUpe3RlPT0oMHx0ZSkmJih0ZXw9MCksZWVbcVt0ZV1dPXRlfSksZWV9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJf''@;'; put 'put ''ZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJv''@;'; put 'put ''b2wiXS5mb3JFYWNoKGZ1bmN0aW9uKFkpe1YucHJvdG90eXBlW1ldPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFkrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLEUuZm9yRWFjaChmdW5jdGlvbihZKXtWLnByb3RvdHlwZVtZXT1m''@;'; put 'put ''dW5jdGlvbigpe2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gayhudWxsPT09WC50YWcpLFgudGFnPVksdGhpcy5fdXNlQXJncyhVKSx0aGlzfX0pLFYucHJvdG90eXBlLnVzZT1mdW5jdGlvbihZKXtrKFkpO2Nv''@;'; put 'put ''bnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLnVzZSksWC51c2U9WSx0aGlzfSxWLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sVi5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKFkpe2NvbnN0''@;'; put 'put ''IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmRlZmF1bHQpLFguZGVmYXVsdD1ZLFgub3B0aW9uYWw9ITAsdGhpc30sVi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguZXhwbGljaXQmJm51''@;'; put 'put ''bGw9PT1YLmltcGxpY2l0KSxYLmV4cGxpY2l0PVksdGhpc30sVi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24oWSl7Y29uc3QgWD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguZXhwbGljaXQmJm51bGw9PT1YLmltcGxpY2l0KSxYLmltcGxpY2l0PVksdGhpc30sVi5wcm90''@;'; put 'put ''b3R5cGUub2JqPWZ1bmN0aW9uKCl7Y29uc3QgWT10aGlzLl9iYXNlU3RhdGUsWD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBZLm9iaj0hMCwwIT09WC5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoWCksdGhpc30sVi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKFkp''@;'; put 'put ''e2NvbnN0IFg9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLmtleSksWC5rZXk9WSx0aGlzfSxWLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxWLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oWSl7Y29uc3QgWD10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGsobnVsbD09PVguY2hvaWNlKSxYLmNob2ljZT1ZLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoWSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBZW1VdfSkpLHRoaXN9LFYucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKFkpe2NvbnN0IFg9dGhpcy5f''@;'; put 'put ''YmFzZVN0YXRlO3JldHVybiBrKG51bGw9PT1YLnVzZSksWC5jb250YWlucz1ZLHRoaXN9LFYucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJuIFkud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9k''@;'; put 'put ''ZWNvZGUoWSxYKSk7bGV0IHEsZWU9VS5kZWZhdWx0LHRlPSEwLG9lPW51bGw7aWYobnVsbCE9PVUua2V5JiYob2U9WS5lbnRlcktleShVLmtleSkpLFUub3B0aW9uYWwpe2xldCBzZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P3NlPVUuZXhwbGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/c2U9''@;'; put 'put ''VS5pbXBsaWNpdDpudWxsIT09VS50YWcmJihzZT1VLnRhZyksbnVsbCE9PXNlfHxVLmFueSl7aWYodGU9dGhpcy5fcGVla1RhZyhZLHNlLFUuYW55KSxZLmlzRXJyb3IodGUpKXJldHVybiB0ZX1lbHNle2NvbnN0IGhlPVkuc2F2ZSgpO3RyeXtudWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2Rl''@;'; put 'put ''R2VuZXJpYyhVLnRhZyxZLFgpOnRoaXMuX2RlY29kZUNob2ljZShZLFgpLHRlPSEwfWNhdGNoe3RlPSExfVkucmVzdG9yZShoZSl9fWlmKFUub2JqJiZ0ZSYmKHE9WS5lbnRlck9iamVjdCgpKSx0ZSl7aWYobnVsbCE9PVUuZXhwbGljaXQpe2NvbnN0IGhlPXRoaXMuX2RlY29kZVRhZyhZLFUu''@;'; put 'put ''ZXhwbGljaXQpO2lmKFkuaXNFcnJvcihoZSkpcmV0dXJuIGhlO1k9aGV9Y29uc3Qgc2U9WS5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Upe2xldCBoZTtVLmFueSYmKGhlPVkuc2F2ZSgpKTtjb25zdCB1ZT10aGlzLl9kZWNvZGVUYWcoWSxudWxsIT09VS5pbXBsaWNp''@;'; put 'put ''dD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihZLmlzRXJyb3IodWUpKXJldHVybiB1ZTtVLmFueT9lZT1ZLnJhdyhoZSk6WT11ZX1pZihYJiZYLnRyYWNrJiZudWxsIT09VS50YWcmJlgudHJhY2soWS5wYXRoKCksc2UsWS5sZW5ndGgsInRhZ2dlZCIpLFgmJlgudHJhY2smJm51bGwhPT1V''@;'; put 'put ''LnRhZyYmWC50cmFjayhZLnBhdGgoKSxZLm9mZnNldCxZLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoZWU9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsWSxYKTp0aGlzLl9kZWNvZGVDaG9pY2UoWSxYKSksWS5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7aWYoVS5h''@;'; put 'put ''bnl8fG51bGwhPT1VLmNob2ljZXx8bnVsbD09PVUuY2hpbGRyZW58fFUuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihoZSl7aGUuX2RlY29kZShZLFgpfSksVS5jb250YWlucyYmKCJvY3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50YWcpKXtjb25zdCBoZT1uZXcgSShlZSk7ZWU9dGhp''@;'; put 'put ''cy5fZ2V0VXNlKFUuY29udGFpbnMsWS5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoaGUsWCl9fXJldHVybiBVLm9iaiYmdGUmJihlZT1ZLmxlYXZlT2JqZWN0KHEpKSxudWxsPT09VS5rZXl8fG51bGw9PT1lZSYmITAhPT10ZT9udWxsIT09b2UmJlkuZXhpdEtleShvZSk6WS5sZWF2ZUtl''@;'; put 'put ''eShvZSxVLmtleSxlZSksZWV9LFYucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKFksWCxVKXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PVl8fCJzZXQiPT09WT9udWxsOiJzZXFvZiI9PT1ZfHwic2V0b2YiPT09WT90aGlzLl9kZWNvZGVMaXN0KFgsWSxx''@;'; put 'put ''LmFyZ3NbMF0sVSk6L3N0ciQvLnRlc3QoWSk/dGhpcy5fZGVjb2RlU3RyKFgsWSxVKToib2JqaWQiPT09WSYmcS5hcmdzP3RoaXMuX2RlY29kZU9iamlkKFgscS5hcmdzWzBdLHEuYXJnc1sxXSxVKToib2JqaWQiPT09WT90aGlzLl9kZWNvZGVPYmppZChYLG51bGwsbnVsbCxVKToiZ2VudGlt''@;'; put 'put ''ZSI9PT1ZfHwidXRjdGltZSI9PT1ZP3RoaXMuX2RlY29kZVRpbWUoWCxZLFUpOiJudWxsXyI9PT1ZP3RoaXMuX2RlY29kZU51bGwoWCxVKToiYm9vbCI9PT1ZP3RoaXMuX2RlY29kZUJvb2woWCxVKToib2JqRGVzYyI9PT1ZP3RoaXMuX2RlY29kZVN0cihYLFksVSk6ImludCI9PT1ZfHwiZW51''@;'; put 'put ''bSI9PT1ZP3RoaXMuX2RlY29kZUludChYLHEuYXJncyYmcS5hcmdzWzBdLFUpOm51bGwhPT1xLnVzZT90aGlzLl9nZXRVc2UocS51c2UsWC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoWCxVKTpYLmVycm9yKCJ1bmtub3duIHRhZzogIitZKX0sVi5wcm90b3R5cGUuX2dldFVzZT1mdW5j''@;'; put 'put ''dGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKFksWCksayhudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sVS5pbXBs''@;'; put 'put ''aWNpdCE9PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUudXNlRGVjb2Rlcn0sVi5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5j''@;'; put 'put ''dGlvbihZLFgpe2NvbnN0IFU9dGhpcy5fYmFzZVN0YXRlO2xldCBxPW51bGwsZWU9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKHRlKXtjb25zdCBvZT1ZLnNhdmUoKSxzZT1VLmNob2ljZVt0ZV07dHJ5e2NvbnN0IGhlPXNlLl9kZWNvZGUoWSxYKTtpZihZ''@;'; put 'put ''LmlzRXJyb3IoaGUpKXJldHVybiExO3E9e3R5cGU6dGUsdmFsdWU6aGV9LGVlPSEwfWNhdGNoe3JldHVybiBZLnJlc3RvcmUob2UpLCExfXJldHVybiEwfSx0aGlzKSxlZT9xOlkuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxWLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1m''@;'; put 'put ''dW5jdGlvbihZKXtyZXR1cm4gbmV3IEsoWSx0aGlzLnJlcG9ydGVyKX0sVi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihZLFgsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbCE9PXEuZGVmYXVsdCYmcS5kZWZhdWx0PT09WSlyZXR1cm47Y29uc3QgZWU9dGhpcy5fZW5jb2Rl''@;'; put 'put ''VmFsdWUoWSxYLFUpO3JldHVybiB2b2lkIDA9PT1lZXx8dGhpcy5fc2tpcERlZmF1bHQoZWUsWCxVKT92b2lkIDA6ZWV9LFYucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihZLFgsVSl7Y29uc3QgcT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXEucGFyZW50KXJldHVybiBxLmNo''@;'; put 'put ''aWxkcmVuWzBdLl9lbmNvZGUoWSxYfHxuZXcgeik7bGV0IGVlPW51bGw7aWYodGhpcy5yZXBvcnRlcj1YLHEub3B0aW9uYWwmJnZvaWQgMD09PVkpe2lmKG51bGw9PT1xLmRlZmF1bHQpcmV0dXJuO1k9cS5kZWZhdWx0fWxldCB0ZT1udWxsLG9lPSExO2lmKHEuYW55KWVlPXRoaXMuX2NyZWF0''@;'; put 'put ''ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZihxLmNob2ljZSllZT10aGlzLl9lbmNvZGVDaG9pY2UoWSxYKTtlbHNlIGlmKHEuY29udGFpbnMpdGU9dGhpcy5fZ2V0VXNlKHEuY29udGFpbnMsVSkuX2VuY29kZShZLFgpLG9lPSEwO2Vsc2UgaWYocS5jaGlsZHJlbil0ZT1xLmNoaWxkcmVuLm1h''@;'; put 'put ''cChmdW5jdGlvbihzZSl7aWYoIm51bGxfIj09PXNlLl9iYXNlU3RhdGUudGFnKXJldHVybiBzZS5fZW5jb2RlKG51bGwsWCxZKTtpZihudWxsPT09c2UuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIFguZXJyb3IoIkNoaWxkIHNob3VsZCBoYXZlIGEga2V5Iik7Y29uc3QgaGU9WC5lbnRlcktleShz''@;'; put 'put ''ZS5fYmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBZKXJldHVybiBYLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTtjb25zdCB1ZT1zZS5fZW5jb2RlKFlbc2UuX2Jhc2VTdGF0ZS5rZXldLFgsWSk7cmV0dXJuIFgubGVhdmVLZXkoaGUp''@;'; put 'put ''LHVlfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24oc2Upe3JldHVybiBzZX0pLHRlPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodGUpO2Vsc2UgaWYoInNlcW9mIj09PXEudGFnfHwic2V0b2YiPT09cS50YWcpe2lmKCFxLmFyZ3N8fDEhPT1xLmFyZ3MubGVuZ3RoKXJldHVybiBYLmVycm9yKCJU''@;'; put 'put ''b28gbWFueSBhcmdzIGZvciA6ICIrcS50YWcpO2lmKCFBcnJheS5pc0FycmF5KFkpKXJldHVybiBYLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7Y29uc3Qgc2U9dGhpcy5jbG9uZSgpO3NlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCx0ZT10aGlzLl9jcmVh''@;'; put 'put ''dGVFbmNvZGVyQnVmZmVyKFkubWFwKGZ1bmN0aW9uKGhlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLFkpLl9lbmNvZGUoaGUsWCl9LHNlKSl9ZWxzZSBudWxsIT09cS51c2U/ZWU9dGhpcy5fZ2V0VXNlKHEudXNlLFUpLl9lbmNvZGUoWSxYKToodGU9dGhp''@;'; put 'put ''cy5fZW5jb2RlUHJpbWl0aXZlKHEudGFnLFkpLG9lPSEwKTtpZighcS5hbnkmJm51bGw9PT1xLmNob2ljZSl7Y29uc3Qgc2U9bnVsbCE9PXEuaW1wbGljaXQ/cS5pbXBsaWNpdDpxLnRhZyxoZT1udWxsPT09cS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXNlP251bGw9''@;'; put 'put ''PT1xLnVzZSYmWC5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PXEudXNlJiYoZWU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHNlLG9lLGhlLHRlKSl9cmV0dXJuIG51bGwhPT1xLmV4cGxpY2l0JiYoZWU9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHEu''@;'; put 'put ''ZXhwbGljaXQsITEsImNvbnRleHQiLGVlKSksZWV9LFYucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZSxxPVUuY2hvaWNlW1kudHlwZV07cmV0dXJuIHF8fGsoITEsWS50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdp''@;'; put 'put ''ZnkoT2JqZWN0LmtleXMoVS5jaG9pY2UpKSkscS5fZW5jb2RlKFkudmFsdWUsWCl9LFYucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oWSxYKXtjb25zdCBVPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChZKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKFgsWSk7aWYo''@;'; put 'put ''Im9iamlkIj09PVkmJlUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoWCxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKFgsbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1ZfHwidXRjdGltZSI9PT1ZKXJldHVy''@;'; put 'put ''biB0aGlzLl9lbmNvZGVUaW1lKFgsWSk7aWYoIm51bGxfIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PVl8fCJlbnVtIj09PVkpcmV0dXJuIHRoaXMuX2VuY29kZUludChYLFUuYXJncyYmVS5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09WSlyZXR1cm4gdGhp''@;'; put 'put ''cy5fZW5jb2RlQm9vbChYKTtpZigib2JqRGVzYyI9PT1ZKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoWCxZKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitZKX0sVi5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKFkpe3JldHVybi9eWzAtOSBdKiQvLnRlc3QoWSl9LFYu''@;'; put 'put ''cHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKFkpe3JldHVybi9eW0EtWmEtejAtOSAnKCkrLC0uLzo9P10qJC8udGVzdChZKX19LDg0NjU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyk7ZnVuY3Rpb24gSyhrKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVs''@;'; put 'put ''bCxwYXRoOltdLG9wdGlvbnM6a3x8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBJKGssRSl7dGhpcy5wYXRoPWssdGhpcy5yZXRocm93KEUpfU8uYj1LLEsucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24oayl7cmV0dXJuIGsgaW5zdGFuY2VvZiBJfSxLLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9u''@;'; put 'put ''KCl7Y29uc3Qgaz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6ay5vYmoscGF0aExlbjprLnBhdGgubGVuZ3RofX0sSy5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGU7RS5vYmo9ay5vYmosRS5wYXRoPUUucGF0aC5zbGljZSgw''@;'; put 'put ''LGsucGF0aExlbil9LEsucHJvdG90eXBlLmVudGVyS2V5PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaChrKX0sSy5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGU7RS5wYXRoPUUucGF0aC5zbGlj''@;'; put 'put ''ZSgwLGstMSl9LEsucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKGssRSxqKXtjb25zdCBWPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KGspLG51bGwhPT1WLm9iaiYmKFYub2JqW0VdPWopfSxLLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9y''@;'; put 'put ''dGVyU3RhdGUucGF0aC5qb2luKCIvIil9LEsucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7Y29uc3Qgaz10aGlzLl9yZXBvcnRlclN0YXRlLEU9ay5vYmo7cmV0dXJuIGsub2JqPXt9LEV9LEsucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5f''@;'; put 'put ''cmVwb3J0ZXJTdGF0ZSxqPUUub2JqO3JldHVybiBFLm9iaj1rLGp9LEsucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKGspe2xldCBFO2NvbnN0IGo9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxWPWsgaW5zdGFuY2VvZiBJO2lmKEU9Vj9rOm5ldyBJKGoucGF0aC5tYXAoZnVuY3Rpb24oQil7cmV0dXJu''@;'; put 'put ''IlsiK0pTT04uc3RyaW5naWZ5KEIpKyJdIn0pLmpvaW4oIiIpLGsubWVzc2FnZXx8ayxrLnN0YWNrKSwhai5vcHRpb25zLnBhcnRpYWwpdGhyb3cgRTtyZXR1cm4gVnx8ai5lcnJvcnMucHVzaChFKSxFfSxLLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5f''@;'; put 'put ''cmVwb3J0ZXJTdGF0ZTtyZXR1cm4gRS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Ioayk/bnVsbDprLGVycm9yczpFLmVycm9yc306a30seihJLEVycm9yKSxJLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKGspe2lmKHRoaXMubWVzc2FnZT1rKyIgYXQ6ICIrKHRoaXMu''@;'; put 'put ''cGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLEkpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChFKXt0aGlzLnN0YWNrPUUuc3RhY2t9cmV0dXJuIHRoaXN9fSwx''@;'; put 'put ''NjA6KE0sTyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUih6KXtjb25zdCBLPXt9O3JldHVybiBPYmplY3Qua2V5cyh6KS5mb3JFYWNoKGZ1bmN0aW9uKEkpeygwfEkpPT1JJiYoSXw9MCksS1t6W0ldXT1JfSksS31PLnRhZ0NsYXNzPXswOiJ1bml2ZXJzYWwiLDE6ImFwcGxpY2F0aW9uIiwy''@;'; put 'put ''OiJjb250ZXh0IiwzOiJwcml2YXRlIn0sTy50YWdDbGFzc0J5TmFtZT1SKE8udGFnQ2xhc3MpLE8udGFnPXswOiJlbmQiLDE6ImJvb2wiLDI6ImludCIsMzoiYml0c3RyIiw0OiJvY3RzdHIiLDU6Im51bGxfIiw2OiJvYmppZCIsNzoib2JqRGVzYyIsODoiZXh0ZXJuYWwiLDk6InJlYWwiLDEw''@;'; put 'put ''OiJlbnVtIiwxMToiZW1iZWQiLDEyOiJ1dGY4c3RyIiwxMzoicmVsYXRpdmVPaWQiLDE2OiJzZXEiLDE3OiJzZXQiLDE4OiJudW1zdHIiLDE5OiJwcmludHN0ciIsMjA6InQ2MXN0ciIsMjE6InZpZGVvc3RyIiwyMjoiaWE1c3RyIiwyMzoidXRjdGltZSIsMjQ6ImdlbnRpbWUiLDI1OiJncmFw''@;'; put 'put ''aHN0ciIsMjY6ImlzbzY0NnN0ciIsMjc6ImdlbnN0ciIsMjg6InVuaXN0ciIsMjk6ImNoYXJzdHIiLDMwOiJibXBzdHIifSxPLnRhZ0J5TmFtZT1SKE8udGFnKX0sNjgyNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6Ll9yZXZlcnNlPWZ1bmN0aW9uKEspe2NvbnN0IEk9e307''@;'; put 'put ''cmV0dXJuIE9iamVjdC5rZXlzKEspLmZvckVhY2goZnVuY3Rpb24oayl7KDB8ayk9PWsmJihrfD0wKSxJW0tba11dPWt9KSxJfSx6LmRlcj1SKDE2MCl9LDE2NzE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDQ1OTApLEk9Uig2NjI1KS5DLGs9UigxOTQ5KSxF''@;'; put 'put ''PVIoMTYwKTtmdW5jdGlvbiBqKFgpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1YLm5hbWUsdGhpcy5lbnRpdHk9WCx0aGlzLnRyZWU9bmV3IFYsdGhpcy50cmVlLl9pbml0KFguYm9keSl9ZnVuY3Rpb24gVihYKXtrLmNhbGwodGhpcywiZGVyIixYKX1mdW5jdGlvbiBCKFgsVSl7bGV0IHE9''@;'; put 'put ''WC5yZWFkVUludDgoVSk7aWYoWC5pc0Vycm9yKHEpKXJldHVybiBxO2NvbnN0IGVlPUUudGFnQ2xhc3NbcT4+Nl0sdGU9MD09KDMyJnEpO2lmKDMxPT0oMzEmcSkpe2xldCBvZT1xO2ZvcihxPTA7MTI4PT0oMTI4Jm9lKTspe2lmKG9lPVgucmVhZFVJbnQ4KFUpLFguaXNFcnJvcihvZSkpcmV0''@;'; put 'put ''dXJuIG9lO3E8PD03LHF8PTEyNyZvZX19ZWxzZSBxJj0zMTtyZXR1cm57Y2xzOmVlLHByaW1pdGl2ZTp0ZSx0YWc6cSx0YWdTdHI6RS50YWdbcV19fWZ1bmN0aW9uIFkoWCxVLHEpe2xldCBlZT1YLnJlYWRVSW50OChxKTtpZihYLmlzRXJyb3IoZWUpKXJldHVybiBlZTtpZighVSYmMTI4PT09''@;'; put 'put ''ZWUpcmV0dXJuIG51bGw7aWYoISgxMjgmZWUpKXJldHVybiBlZTtjb25zdCB0ZT0xMjcmZWU7aWYodGU+NClyZXR1cm4gWC5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO2VlPTA7Zm9yKGxldCBvZT0wO29lPHRlO29lKyspe2VlPDw9ODtjb25zdCBzZT1YLnJlYWRVSW50OChx''@;'; put 'put ''KTtpZihYLmlzRXJyb3Ioc2UpKXJldHVybiBzZTtlZXw9c2V9cmV0dXJuIGVlfU0uZXhwb3J0cz1qLGoucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihYLFUpe3JldHVybiBJLmlzRGVjb2RlckJ1ZmZlcihYKXx8KFg9bmV3IEkoWCxVKSksdGhpcy50cmVlLl9kZWNvZGUoWCxVKX0seihWLGsp''@;'; put 'put ''LFYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKFgsVSxxKXtpZihYLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdCBlZT1YLnNhdmUoKSx0ZT1CKFgsJ0ZhaWxlZCB0byBwZWVrIHRhZzogIicrVSsnIicpO3JldHVybiBYLmlzRXJyb3IodGUpP3RlOihYLnJlc3RvcmUoZWUpLHRlLnRhZz09''@;'; put 'put ''PVV8fHRlLnRhZ1N0cj09PVV8fHRlLnRhZ1N0cisib2YiPT09VXx8cSl9LFYucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oWCxVLHEpe2NvbnN0IGVlPUIoWCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgIicrVSsnIicpO2lmKFguaXNFcnJvcihlZSkpcmV0dXJuIGVlO2xldCB0ZT1Z''@;'; put 'put ''KFgsZWUucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytVKyciJyk7aWYoWC5pc0Vycm9yKHRlKSlyZXR1cm4gdGU7aWYoIXEmJmVlLnRhZyE9PVUmJmVlLnRhZ1N0ciE9PVUmJmVlLnRhZ1N0cisib2YiIT09VSlyZXR1cm4gWC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRh''@;'; put 'put ''ZzogIicrVSsnIicpO2lmKGVlLnByaW1pdGl2ZXx8bnVsbCE9PXRlKXJldHVybiBYLnNraXAodGUsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytVKyciJyk7Y29uc3Qgb2U9WC5zYXZlKCksc2U9dGhpcy5fc2tpcFVudGlsRW5kKFgsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVu''@;'; put 'put ''Z3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIFguaXNFcnJvcihzZSk/c2U6KHRlPVgub2Zmc2V0LW9lLm9mZnNldCxYLnJlc3RvcmUob2UpLFguc2tpcCh0ZSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK1UrJyInKSl9LFYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oWCxVKXtmb3IoOzspe2NvbnN0IHE9QihYLFUpO2lmKFguaXNFcnJvcihxKSlyZXR1cm4gcTtjb25zdCBlZT1ZKFgscS5wcmltaXRpdmUsVSk7aWYoWC5pc0Vycm9yKGVlKSlyZXR1cm4gZWU7bGV0IHRlO2lmKHRlPXEucHJpbWl0aXZlfHxudWxsIT09ZWU/WC5za2lwKGVlKTp0aGlz''@;'; put 'put ''Ll9za2lwVW50aWxFbmQoWCxVKSxYLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZigiZW5kIj09PXEudGFnU3RyKWJyZWFrfX0sVi5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24oWCxVLHEsZWUpe2NvbnN0IHRlPVtdO2Zvcig7IVguaXNFbXB0eSgpOyl7Y29uc3Qgb2U9dGhpcy5fcGVl''@;'; put 'put ''a1RhZyhYLCJlbmQiKTtpZihYLmlzRXJyb3Iob2UpKXJldHVybiBvZTtjb25zdCBzZT1xLmRlY29kZShYLCJkZXIiLGVlKTtpZihYLmlzRXJyb3Ioc2UpJiZvZSlicmVhazt0ZS5wdXNoKHNlKX1yZXR1cm4gdGV9LFYucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oWCxVKXtpZigiYml0''@;'; put 'put ''c3RyIj09PVUpe2NvbnN0IHE9WC5yZWFkVUludDgoKTtyZXR1cm4gWC5pc0Vycm9yKHEpP3E6e3VudXNlZDpxLGRhdGE6WC5yYXcoKX19aWYoImJtcHN0ciI9PT1VKXtjb25zdCBxPVgucmF3KCk7aWYocS5sZW5ndGglMj09MSlyZXR1cm4gWC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5''@;'; put 'put ''cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgZWU9IiI7Zm9yKGxldCB0ZT0wO3RlPHEubGVuZ3RoLzI7dGUrKyllZSs9U3RyaW5nLmZyb21DaGFyQ29kZShxLnJlYWRVSW50MTZCRSgyKnRlKSk7cmV0dXJuIGVlfWlmKCJudW1zdHIiPT09VSl7Y29uc3QgcT1YLnJhdygpLnRvU3Ry''@;'; put 'put ''aW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihxKT9xOlguZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09VXx8Im9iakRlc2MiPT09VSlyZXR1cm4gWC5yYXcoKTtpZigicHJpbnRzdHIi''@;'; put 'put ''PT09VSl7Y29uc3QgcT1YLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKHEpP3E6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdChVKT9YLnJhdygp''@;'; put 'put ''LnRvU3RyaW5nKCk6WC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrVSsiIHVuc3VwcG9ydGVkIil9LFYucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihYLFUscSl7bGV0IGVlO2NvbnN0IHRlPVtdO2xldCBvZT0wLHNlPTA7Zm9yKDshWC5pc0VtcHR5KCk7KXNlPVgu''@;'; put 'put ''cmVhZFVJbnQ4KCksb2U8PD03LG9lfD0xMjcmc2UsISgxMjgmc2UpJiYodGUucHVzaChvZSksb2U9MCk7aWYoMTI4JnNlJiZ0ZS5wdXNoKG9lKSxlZT1xP3RlOlt0ZVswXS80MHwwLHRlWzBdJTQwXS5jb25jYXQodGUuc2xpY2UoMSkpLFUpe2xldCBjZT1VW2VlLmpvaW4oIiAiKV07dm9pZCAw''@;'; put 'put ''PT09Y2UmJihjZT1VW2VlLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWNlJiYoZWU9Y2UpfXJldHVybiBlZX0sVi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oWCxVKXtjb25zdCBxPVgucmF3KCkudG9TdHJpbmcoKTtsZXQgZWUsdGUsb2Usc2UsaGUsdWU7aWYoImdlbnRpbWUiPT09VSll''@;'; put 'put ''ZT0wfHEuc2xpY2UoMCw0KSx0ZT0wfHEuc2xpY2UoNCw2KSxvZT0wfHEuc2xpY2UoNiw4KSxzZT0wfHEuc2xpY2UoOCwxMCksaGU9MHxxLnNsaWNlKDEwLDEyKSx1ZT0wfHEuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09VSlyZXR1cm4gWC5lcnJvcigiRGVjb2RpbmcgIitVKyIg''@;'; put 'put ''dGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpO2VlPTB8cS5zbGljZSgwLDIpLHRlPTB8cS5zbGljZSgyLDQpLG9lPTB8cS5zbGljZSg0LDYpLHNlPTB8cS5zbGljZSg2LDgpLGhlPTB8cS5zbGljZSg4LDEwKSx1ZT0wfHEuc2xpY2UoMTAsMTIpLGVlPWVlPDcwPzJlMytlZToxOTAwK2VlfXJl''@;'; put 'put ''dHVybiBEYXRlLlVUQyhlZSx0ZS0xLG9lLHNlLGhlLHVlLDApfSxWLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxWLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihYKXtjb25zdCBVPVgucmVhZFVJbnQ4KCk7cmV0dXJuIFguaXNFcnJvcihVKT9V''@;'; put 'put ''OjAhPT1VfSxWLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKFgsVSl7Y29uc3QgcT1YLnJhdygpO2xldCBlZT1uZXcgSyhxKTtyZXR1cm4gVSYmKGVlPVVbZWUudG9TdHJpbmcoMTApXXx8ZWUpLGVlfSxWLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKFgsVSl7cmV0dXJuImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFgmJihYPVgoVSkpLFguX2dldERlY29kZXIoImRlciIpLnRyZWV9fSw4MzA3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1PO3ouZGVyPVIoMTY3MSksei5wZW09Uig5NjMxKX0sOTYzMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIo''@;'; put 'put ''MjM5OSkuQnVmZmVyLEk9UigxNjcxKTtmdW5jdGlvbiBrKEUpe0kuY2FsbCh0aGlzLEUpLHRoaXMuZW5jPSJwZW0ifXooayxJKSxNLmV4cG9ydHM9ayxrLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oRSxqKXtjb25zdCBWPUUudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSxCPWoubGFi''@;'; put 'put ''ZWwudG9VcHBlckNhc2UoKSxZPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLztsZXQgWD0tMSxVPS0xO2ZvcihsZXQgdGU9MDt0ZTxWLmxlbmd0aDt0ZSsrKXtjb25zdCBvZT1WW3RlXS5tYXRjaChZKTtpZihudWxsIT09b2UmJm9lWzJdPT09Qil7aWYoLTEhPT1YKXtpZigiRU5E''@;'; put 'put ''IiE9PW9lWzFdKWJyZWFrO1U9dGU7YnJlYWt9aWYoIkJFR0lOIiE9PW9lWzFdKWJyZWFrO1g9dGV9fWlmKC0xPT09WHx8LTE9PT1VKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIitCKTtjb25zdCBxPVYuc2xpY2UoWCsxLFUpLmpvaW4oIiIpO3EucmVwbGFj''@;'; put 'put ''ZSgvW15hLXowLTkrLz1dKy9naSwiIik7Y29uc3QgZWU9Sy5mcm9tKHEsImJhc2U2NCIpO3JldHVybiBJLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGVlLGopfX0sNjk4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig1NzE3KSxLPVIoMjM5OSkuQnVmZmVyLEk9UigxOTQ5''@;'; put 'put ''KSxrPVIoMTYwKTtmdW5jdGlvbiBFKEIpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1CLm5hbWUsdGhpcy5lbnRpdHk9Qix0aGlzLnRyZWU9bmV3IGosdGhpcy50cmVlLl9pbml0KEIuYm9keSl9ZnVuY3Rpb24gaihCKXtJLmNhbGwodGhpcywiZGVyIixCKX1mdW5jdGlvbiBWKEIpe3JldHVy''@;'; put 'put ''biBCPDEwPyIwIitCOkJ9TS5leHBvcnRzPUUsRS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEIsWSkuam9pbigpfSx6KGosSSksai5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihCLFksWCxVKXtjb25zdCBxPWZ1bmN0''@;'; put 'put ''aW9uKG9lLHNlLGhlLHVlKXtsZXQgY2U7aWYoInNlcW9mIj09PW9lP29lPSJzZXEiOiJzZXRvZiI9PT1vZSYmKG9lPSJzZXQiKSxrLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShvZSkpY2U9ay50YWdCeU5hbWVbb2VdO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBvZXx8KDB8b2UpIT09b2Up''@;'; put 'put ''cmV0dXJuIHVlLmVycm9yKCJVbmtub3duIHRhZzogIitvZSk7Y2U9b2V9cmV0dXJuIGNlPj0zMT91ZS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KHNlfHwoY2V8PTMyKSxjZXw9ay50YWdDbGFzc0J5TmFtZVtoZXx8InVuaXZlcnNhbCJdPDw2LGNlKX0o''@;'; put 'put ''QixZLFgsdGhpcy5yZXBvcnRlcik7aWYoVS5sZW5ndGg8MTI4KXtjb25zdCBvZT1LLmFsbG9jKDIpO3JldHVybiBvZVswXT1xLG9lWzFdPVUubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW29lLFVdKX1sZXQgZWU9MTtmb3IobGV0IG9lPVUubGVuZ3RoO29lPj0yNTY7b2U+Pj04''@;'; put 'put ''KWVlKys7Y29uc3QgdGU9Sy5hbGxvYygyK2VlKTt0ZVswXT1xLHRlWzFdPTEyOHxlZTtmb3IobGV0IG9lPTErZWUsc2U9VS5sZW5ndGg7c2U+MDtvZS0tLHNlPj49OCl0ZVtvZV09MjU1JnNlO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFt0ZSxVXSl9LGoucHJvdG90eXBlLl9l''@;'; put 'put ''bmNvZGVTdHI9ZnVuY3Rpb24oQixZKXtpZigiYml0c3RyIj09PVkpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8Qi51bnVzZWQsQi5kYXRhXSk7aWYoImJtcHN0ciI9PT1ZKXtjb25zdCBYPUsuYWxsb2MoMipCLmxlbmd0aCk7Zm9yKGxldCBVPTA7VTxCLmxlbmd0aDtVKysp''@;'; put 'put ''WC53cml0ZVVJbnQxNkJFKEIuY2hhckNvZGVBdChVKSwyKlUpO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFgpfXJldHVybiJudW1zdHIiPT09WT90aGlzLl9pc051bXN0cihCKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29k''@;'; put 'put ''aW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlIik6InByaW50c3RyIj09PVk/dGhpcy5faXNQcmludHN0cihCKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0''@;'; put 'put ''eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBl''@;'; put 'put ''cXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoWSl8fCJvYmpEZXNjIj09PVk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitZKyIgdW5zdXBwb3J0ZWQiKX0sai5wcm90b3R5cGUu''@;'; put 'put ''X2VuY29kZU9iamlkPWZ1bmN0aW9uKEIsWSxYKXtpZigic3RyaW5nIj09dHlwZW9mIEIpe2lmKCFZKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIVkuaGFzT3duUHJvcGVydHkoQikpcmV0dXJuIHRo''@;'; put 'put ''aXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwIik7Qj1ZW0JdLnNwbGl0KC9bXHMuXSsvZyk7Zm9yKGxldCB0ZT0wO3RlPEIubGVuZ3RoO3RlKyspQlt0ZV18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEIpKXtCPUIuc2xpY2UoKTtmb3IobGV0IHRlPTA7''@;'; put 'put ''dGU8Qi5sZW5ndGg7dGUrKylCW3RlXXw9MH1pZighQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEIpKTtpZighWCl7aWYoQlsxXT49NDApcmV0''@;'; put 'put ''dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0Iuc3BsaWNlKDAsMiw0MCpCWzBdK0JbMV0pfWxldCBVPTA7Zm9yKGxldCB0ZT0wO3RlPEIubGVuZ3RoO3RlKyspe2xldCBvZT1CW3RlXTtmb3IoVSsrO29lPj0xMjg7b2U+Pj03KVUrK31jb25z''@;'; put 'put ''dCBxPUsuYWxsb2MoVSk7bGV0IGVlPXEubGVuZ3RoLTE7Zm9yKGxldCB0ZT1CLmxlbmd0aC0xO3RlPj0wO3RlLS0pe2xldCBvZT1CW3RlXTtmb3IocVtlZS0tXT0xMjcmb2U7KG9lPj49Nyk+MDspcVtlZS0tXT0xMjh8MTI3Jm9lfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHEp''@;'; put 'put ''fSxqLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbihCLFkpe2xldCBYO2NvbnN0IFU9bmV3IERhdGUoQik7cmV0dXJuImdlbnRpbWUiPT09WT9YPVtWKFUuZ2V0VVRDRnVsbFllYXIoKSksVihVLmdldFVUQ01vbnRoKCkrMSksVihVLmdldFVUQ0RhdGUoKSksVihVLmdldFVUQ0hvdXJz''@;'; put 'put ''KCkpLFYoVS5nZXRVVENNaW51dGVzKCkpLFYoVS5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6InV0Y3RpbWUiPT09WT9YPVtWKFUuZ2V0VVRDRnVsbFllYXIoKSUxMDApLFYoVS5nZXRVVENNb250aCgpKzEpLFYoVS5nZXRVVENEYXRlKCkpLFYoVS5nZXRVVENIb3VycygpKSxWKFUu''@;'; put 'put ''Z2V0VVRDTWludXRlcygpKSxWKFUuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nICIrWSsiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKSx0aGlzLl9lbmNvZGVTdHIoWCwib2N0c3RyIil9LGoucHJvdG90eXBlLl9lbmNvZGVO''@;'; put 'put ''dWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoIiIpfSxqLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKEIsWSl7aWYoInN0cmluZyI9PXR5cGVvZiBCKXtpZighWSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU3RyaW5nIGludCBvciBlbnVt''@;'; put 'put ''IGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCIpO2lmKCFZLmhhc093blByb3BlcnR5KEIpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogIitKU09OLnN0cmluZ2lmeShCKSk7Qj1ZW0JdfWlmKCJudW1iZXIiIT10eXBlb2YgQiYmIUsuaXNC''@;'; put 'put ''dWZmZXIoQikpe2NvbnN0IHE9Qi50b0FycmF5KCk7IUIuc2lnbiYmMTI4JnFbMF0mJnEudW5zaGlmdCgwKSxCPUsuZnJvbShxKX1pZihLLmlzQnVmZmVyKEIpKXtsZXQgcT1CLmxlbmd0aDswPT09Qi5sZW5ndGgmJnErKztjb25zdCBlZT1LLmFsbG9jKHEpO3JldHVybiBCLmNvcHkoZWUpLDA9''@;'; put 'put ''PT1CLmxlbmd0aCYmKGVlWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoZWUpfWlmKEI8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEIpO2lmKEI8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEJdKTtsZXQgWD0xO2ZvcihsZXQgcT1C''@;'; put 'put ''O3E+PTI1NjtxPj49OClYKys7Y29uc3QgVT1uZXcgQXJyYXkoWCk7Zm9yKGxldCBxPVUubGVuZ3RoLTE7cT49MDtxLS0pVVtxXT0yNTUmQixCPj49ODtyZXR1cm4gMTI4JlVbMF0mJlUudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEsuZnJvbShVKSl9LGoucHJvdG90eXBl''@;'; put 'put ''Ll9lbmNvZGVCb29sPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEI/MjU1OjApfSxqLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEImJihCPUIoWSkpLEIuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LGou''@;'; put 'put ''cHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihCLFksWCl7Y29uc3QgVT10aGlzLl9iYXNlU3RhdGU7bGV0IHE7aWYobnVsbD09PVUuZGVmYXVsdClyZXR1cm4hMTtjb25zdCBlZT1CLmpvaW4oKTtpZih2b2lkIDA9PT1VLmRlZmF1bHRCdWZmZXImJihVLmRlZmF1bHRCdWZmZXI9dGhp''@;'; put 'put ''cy5fZW5jb2RlVmFsdWUoVS5kZWZhdWx0LFksWCkuam9pbigpKSxlZS5sZW5ndGghPT1VLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihxPTA7cTxlZS5sZW5ndGg7cSsrKWlmKGVlW3FdIT09VS5kZWZhdWx0QnVmZmVyW3FdKXJldHVybiExO3JldHVybiEwfX0sNjU3OTooTSxP''@;'; put 'put ''LFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Tzt6LmRlcj1SKDY5ODQpLHoucGVtPVIoMjg4Myl9LDI4ODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNTcxNyksSz1SKDY5ODQpO2Z1bmN0aW9uIEkoayl7Sy5jYWxsKHRoaXMsayksdGhpcy5lbmM9InBlbSJ9eihJLEspLE0u''@;'; put 'put ''ZXhwb3J0cz1JLEkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9Sy5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyxrKS50b1N0cmluZygiYmFzZTY0IiksVj1bIi0tLS0tQkVHSU4gIitFLmxhYmVsKyItLS0tLSJdO2ZvcihsZXQgQj0wO0I8ai5sZW5ndGg7Qis9NjQp''@;'; put 'put ''Vi5wdXNoKGouc2xpY2UoQixCKzY0KSk7cmV0dXJuIFYucHVzaCgiLS0tLS1FTkQgIitFLmxhYmVsKyItLS0tLSIpLFYuam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24oTSxPLFIpeyFmdW5jdGlvbih6LEspeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsQyl7aWYoIWcpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gayhnLEMpe2cuc3VwZXJfPUM7dmFyIFM9ZnVuY3Rpb24oKXt9O1MucHJvdG90eXBlPUMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyBTLGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gRShnLEMsUyl7aWYoRS5p''@;'; put 'put ''c0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PUMmJiJiZSIhPT1DfHwoUz1DLEM9MTApLHRoaXMuX2luaXQoZ3x8MCxDfHwxMCxTfHwiYmUiKSl9dmFyIGo7Im9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiB6P3ouZXhwb3J0cz1FOksuQk49RSxFLkJOPUUsRS53b3JkU2l6ZT0yNjt0cnl7aj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOlIoOTUwKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2Rl''@;'; put 'put ''QXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWlu''@;'; put 'put ''KGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+''@;'; put 'put ''PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRo''@;'; put 'put ''aXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5''@;'; put 'put ''NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0''@;'; put 'put ''aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0''@;'; put 'put ''aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMu''@;'; put 'put ''d29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcs''@;'; put 'put ''QyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0x''@;'; put 'put ''O3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMu''@;'; put 'put ''d29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8''@;'; put 'put ''PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4o''@;'; put 'put ''ZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1T''@;'; put 'put ''aWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYp''@;'; put 'put ''KyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs''@;'; put 'put ''NSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4''@;'; put 'put ''ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtT''@;'; put 'put ''Lm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZl''@;'; put 'put ''PTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsTGU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStM''@;'; put 'put ''ZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8TGUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShn''@;'; put 'put ''PWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0x''@;'; put 'put ''P1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8''@;'; put 'put ''PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStM''@;'; put 'put ''ZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJ''@;'; put 'put ''KCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7''@;'; put 'put ''cmV0dXJuIEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhp''@;'; put 'put ''cy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0kodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxm''@;'; put 'put ''ZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZl''@;'; put 'put ''LmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEz''@;'; put 'put ''LEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMs''@;'; put 'put ''Qz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tD''@;'; put 'put ''XSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhp''@;'; put 'put ''cy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90''@;'; put 'put ''b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUo''@;'; put 'put ''KS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5s''@;'; put 'put ''ZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRo''@;'; put 'put ''aXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3Io''@;'; put 'put ''dmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5p''@;'; put 'put ''eG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYm''@;'; put 'put ''Zz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcx''@;'; put 'put ''MDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5l''@;'; put 'put ''Z2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxD''@;'; put 'put ''Ll9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDsw''@;'; put 'put ''IT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3Io''@;'; put 'put ''O3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRp''@;'; put 'put ''dmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90''@;'; put 'put ''eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0w''@;'; put 'put ''O0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYo''@;'; put 'put ''MD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9''@;'; put 'put ''ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLEplPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEm''@;'; put 'put ''TWUsemU9TWU+Pj4xMyxpdD0wfEpbN10sdXQ9ODE5MSZpdCxNdD1pdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4s''@;'; put 'put ''Zm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4s''@;'; put 'put ''eW49SW4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZl''@;'; put 'put ''Kyh2PU1hdGguaW11bChMZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoTGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbiks''@;'; put 'put ''cD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2Zl''@;'; put 'put ''PSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChKZSxlbil8MCx3PU1hdGguaW11bChKZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkp''@;'; put 'put ''PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKEplLGZ0KXwwLHc9dytNYXRoLmltdWwoSmUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChX''@;'; put 'put ''ZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVp''@;'; put 'put ''Jj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsdz13K01hdGguaW11bChKZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxKdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxKdCl8''@;'; put 'put ''MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZu''@;'; put 'put ''KXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKEplLE50KXwwLHc9dytNYXRoLmltdWwoSmUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxKdCl8MDt2YXIgbm89''@;'; put 'put ''KGZlKyh2PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1h''@;'; put 'put ''dGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4p''@;'; put 'put ''fDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3''@;'; put 'put ''PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsSXQpfDAscD0ocD1wK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLHc9dytNYXRoLmltdWwoSmUsSnQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUs''@;'; put 'put ''eW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChE''@;'; put 'put ''ZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01hdGguaW11bChQZSxKdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsSnQpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsdz13K01hdGguaW11bChKZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+''@;'; put 'put ''MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQp''@;'; put 'put ''fDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLHc9dytNYXRoLmltdWwoSmUseW4pfDAsdj12K01hdGgu''@;'; put 'put ''aW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11''@;'; put 'put ''bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUG4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4p''@;'; put 'put ''LHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13''@;'; put 'put ''K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxKdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQsSnQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKEplLHNuKXwwLHc9dytNYXRoLmltdWwoSmUsQm4pfDAsdj12K01hdGguaW11bChq''@;'; put 'put ''ZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxs''@;'; put 'put ''bil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditN''@;'; put 'put ''YXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLEp0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''UGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLHc9dytNYXRoLmltdWwoSmUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGgu''@;'; put 'put ''aW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3Qp''@;'; put 'put ''LHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwodXQsSXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxKdCl8MCkrTWF0aC5pbXVsKE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsSnQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6''@;'; put 'put ''ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChKZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoSmUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStN''@;'; put 'put ''YXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxKdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLHc9dytNYXRoLmltdWwob24sSnQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUs''@;'; put 'put ''c24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8''@;'; put 'put ''MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEw''@;'; put 'put ''ODg2Myx2PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRoLmltdWwoVXQsSnQpKStNYXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sSnQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6''@;'; put 'put ''ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0''@;'; put 'put ''KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2''@;'; put 'put ''PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11''@;'; put 'put ''bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01h''@;'; put 'put ''dGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwo''@;'; put 'put ''Ym4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFyIExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0''@;'; put 'put ''LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9''@;'; put 'put ''TWF0aC5pbXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+''@;'; put 'put ''PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4y''@;'; put 'put ''Nil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09''@;'; put 'put ''UGksZGVbMTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVl''@;'; put 'put ''KSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9''@;'; put 'put ''dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgu''@;'; put 'put ''bWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYzJihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+''@;'; put 'put ''MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcg''@;'; put 'put ''QXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtw''@;'; put 'put ''PEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMs''@;'; put 'put ''Uyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9''@;'; put 'put ''MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sSmU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPUplKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2Ut''@;'; put 'put ''WWUsT2UhPT1uZSYmKEplPWRlKkxlLWZlKkZlLEZlPWRlKkZlK2ZlKkxlLExlPUplKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0s''@;'; put 'put ''c2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxp''@;'; put 'put ''emUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9''@;'; put 'put ''LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRo''@;'; put 'put ''aXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcu''@;'; put 'put ''d29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0t''@;'; put 'put ''ZGVbT2VdKkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUs''@;'; put 'put ''diksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3Ro''@;'; put 'put ''KSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMm''@;'; put 'put ''dikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1m''@;'; put 'put ''dW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zv''@;'; put 'put ''cih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1m''@;'; put 'put ''dW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNb''@;'; put 'put ''Q109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53''@;'; put 'put ''b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztk''@;'; put 'put ''ZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jk''@;'; put 'put ''c1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxF''@;'; put 'put ''LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhp''@;'; put 'put ''cy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRk''@;'; put 'put ''bihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysx''@;'; put 'put ''XT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigt''@;'; put 'put ''Zyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIg''@;'; put 'put ''bmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEw''@;'; put 'put ''ODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgt''@;'; put 'put ''MV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lz''@;'; put 'put ''aGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1N''@;'; put 'put ''YXRoLm1pbihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsTGUseGUpOzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZK''@;'; put 'put ''LnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUo''@;'; put 'put ''MCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYi''@;'; put 'put ''IT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRp''@;'; put 'put ''dm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYs''@;'; put 'put ''cCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9''@;'; put 'put ''Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2''@;'; put 'put ''YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0p''@;'; put 'put ''e3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rp''@;'; put 'put ''b24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4o''@;'; put 'put ''KSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNo''@;'; put 'put ''cm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihG''@;'; put 'put ''ZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVy''@;'; put 'put ''bnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9''@;'; put 'put ''bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRk''@;'; put 'put ''KEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlz''@;'; put 'put ''dWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhp''@;'; put 'put ''cy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7''@;'; put 'put ''Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndv''@;'; put 'put ''cmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyks''@;'; put 'put ''dGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRo''@;'; put 'put ''aXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09''@;'; put 'put ''dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBu''@;'; put 'put ''KGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJv''@;'; put 'put ''dG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0''@;'; put 'put ''aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVk''@;'; put 'put ''LCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0''@;'; put 'put ''aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJl''@;'; put 'put ''ZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0''@;'; put 'put ''aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJy''@;'; put 'put ''ZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMu''@;'; put 'put ''cmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRO''@;'; put 'put ''ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYh''@;'; put 'put ''Zy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBF''@;'; put 'put ''KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhp''@;'; put 'put ''cywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0''@;'; put 'put ''aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNx''@;'; put 'put ''cigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5''@;'; put 'put ''cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10''@;'; put 'put ''aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlw''@;'; put 'put ''P1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzld''@;'; put 'put ''O2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnBy''@;'; put 'put ''b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02''@;'; put 'put ''NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIg''@;'; put 'put ''Qz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJu''@;'; put 'put ''IGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVb''@;'; put 'put ''Z109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24o''@;'; put 'put ''ZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0s''@;'; put 'put ''SC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3Zlcmlm''@;'; put 'put ''eTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0p''@;'; put 'put ''LFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlz''@;'; put 'put ''Ll92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnky''@;'; put 'put ''KGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcp''@;'; put 'put ''e2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5p''@;'; put 'put ''c1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtJKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpk''@;'; put 'put ''ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBP''@;'; put 'put ''ZT1MZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtJKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxI''@;'; put 'put ''LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFd''@;'; put 'put ''LGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3Fy''@;'; put 'put ''KHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0''@;'; put 'put ''dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihn''@;'; put 'put ''LEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJu''@;'; put 'put ''KHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRo''@;'; put 'put ''aXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0''@;'; put 'put ''aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDkyODI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KTtmdW5jdGlvbiBJKGZlKXtyZXR1cm4oST0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5j''@;'; put 'put ''dGlvbih4ZSl7cmV0dXJuIHR5cGVvZiB4ZX06ZnVuY3Rpb24oeGUpe3JldHVybiB4ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmeGUuY29uc3RydWN0b3I9PT1TeW1ib2wmJnhlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgeGV9KShmZSl9dmFyIGssRSxqPVIoMjEz''@;'; put 'put ''NikuY29kZXMsVj1qLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsQj1qLkVSUl9JTlZBTElEX0FSR19UWVBFLFk9ai5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsWD1qLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxVPWouRVJSX01JU1NJTkdfQVJHUyxxPVIoNTk2MSksZWU9Uig5NTM5KS5pbnNwZWN0''@;'; put 'put ''LHRlPVIoOTUzOSkudHlwZXMsb2U9dGUuaXNQcm9taXNlLHNlPXRlLmlzUmVnRXhwLGhlPU9iamVjdC5hc3NpZ24/T2JqZWN0LmFzc2lnbjpSKDgwOTEpLmFzc2lnbix1ZT1PYmplY3QuaXM/T2JqZWN0LmlzOlIoNjA5KTtmdW5jdGlvbiBjZSgpe3ZhciBmZT1SKDkxNTgpO2s9ZmUuaXNEZWVw''@;'; put 'put ''RXF1YWwsRT1mZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRz0hMSxiPU0uZXhwb3J0cz1nLEQ9e307ZnVuY3Rpb24gSChmZSl7dGhyb3cgZmUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP2ZlLm1lc3NhZ2U6bmV3IHEoZmUpfWZ1bmN0aW9uIE4oZmUseGUsTGUsRmUpe2lmKCFMZSl7dmFyIE9l''@;'; put 'put ''PSExO2lmKDA9PT14ZSlPZT0hMCxGZT0iTm8gdmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYoRmUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBGZTt2YXIgamU9bmV3IHEoe2FjdHVhbDpMZSxleHBlY3RlZDohMCxtZXNzYWdlOkZlLG9wZXJhdG9yOiI9PSIs''@;'; put 'put ''c3RhY2tTdGFydEZuOmZlfSk7dGhyb3cgamUuZ2VuZXJhdGVkTWVzc2FnZT1PZSxqZX19ZnVuY3Rpb24gZygpe2Zvcih2YXIgZmU9YXJndW1lbnRzLmxlbmd0aCx4ZT1uZXcgQXJyYXkoZmUpLExlPTA7TGU8ZmU7TGUrKyl4ZVtMZV09YXJndW1lbnRzW0xlXTtOLmFwcGx5KHZvaWQgMCxbZyx4''@;'; put 'put ''ZS5sZW5ndGhdLmNvbmNhdCh4ZSkpfWIuZmFpbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSxPZSxqZSl7dmFyIFdlLEtlPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PUtlP1dlPSJGYWlsZWQiOjE9PT1LZT8oRmU9eGUseGU9dm9pZCAwKTooITE9PT1HJiYoRz0hMCwoei5lbWl0V2FybmluZz96LmVt''@;'; put 'put ''aXRXYXJuaW5nOksud2Fybi5iaW5kKEspKSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9yIG9ubHkgcGFzcyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJu''@;'; put 'put ''aW5nIiwiREVQMDA5NCIpKSwyPT09S2UmJihPZT0iIT0iKSksRmUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBGZTt2YXIgWWU9e2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxvcGVyYXRvcjp2b2lkIDA9PT1PZT8iZmFpbCI6T2Usc3RhY2tTdGFydEZuOmplfHxmZX07dm9pZCAwIT09RmUmJihZZS5t''@;'; put 'put ''ZXNzYWdlPUZlKTt2YXIgSmU9bmV3IHEoWWUpO3Rocm93IFdlJiYoSmUubWVzc2FnZT1XZSxKZS5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxKZX0sYi5Bc3NlcnRpb25FcnJvcj1xLGIub2s9ZyxiLmVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cg''@;'; put 'put ''bmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7eGUhPUxlJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cg''@;'; put 'put ''bmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7eGU9PUxlJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoiIT0iLHN0YWNrU3RhcnRGbjpmZX0pfSxiLmRlZXBFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93''@;'; put 'put ''IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksayh4ZSxMZSl8fEgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdERlZXBFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxG''@;'; put 'put ''ZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksayh4ZSxMZSkmJkgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3REZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxi''@;'; put 'put ''LmRlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksRSh4ZSxMZSl8fEgoe2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9y''@;'; put 'put ''OiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBVKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PWsmJmNlKCksRSh4ZSxMZSkmJkgo''@;'; put 'put ''e2FjdHVhbDp4ZSxleHBlY3RlZDpMZSxtZXNzYWdlOkZlLG9wZXJhdG9yOiJub3REZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLnN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFUoImFjdHVhbCIsImV4''@;'; put 'put ''cGVjdGVkIik7dWUoeGUsTGUpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoic3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfSxiLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uIGZlKHhlLExlLEZlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cg''@;'; put 'put ''bmV3IFUoImFjdHVhbCIsImV4cGVjdGVkIik7dWUoeGUsTGUpJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsbWVzc2FnZTpGZSxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpmZX0pfTt2YXIgQz1mdW5jdGlvbiBmZSh4ZSxMZSxGZSl7dmFyIE9lPXRoaXM7KGZ1bmN0''@;'; put 'put ''aW9uKGplLFdlKXtpZighKGplIGluc3RhbmNlb2YgV2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxmZSksTGUuZm9yRWFjaChmdW5jdGlvbihqZSl7amUgaW4geGUmJihPZVtqZV09dm9pZCAwIT09RmUmJiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgRmVbamVdJiZzZSh4ZVtqZV0pJiZ4ZVtqZV0udGVzdChGZVtqZV0pP0ZlW2plXTp4ZVtqZV0pfSl9O2Z1bmN0aW9uIFMoZmUseGUsTGUsRmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZSl7aWYoc2UoeGUpKXJldHVybiB4ZS50ZXN0KGZlKTtpZigyPT09YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCl0aHJvdyBuZXcgQigiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSx4ZSk7aWYoIm9iamVjdCIhPT1JKGZlKXx8bnVsbD09PWZlKXt2YXIgT2U9bmV3IHEoe2FjdHVhbDpmZSxleHBlY3RlZDp4ZSxtZXNzYWdlOkxlLG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNr''@;'; put 'put ''U3RhcnRGbjpGZX0pO3Rocm93IE9lLm9wZXJhdG9yPUZlLm5hbWUsT2V9dmFyIGplPU9iamVjdC5rZXlzKHhlKTtpZih4ZSBpbnN0YW5jZW9mIEVycm9yKWplLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09amUubGVuZ3RoKXRocm93IG5ldyBZKCJlcnJvciIseGUsIm1heSBu''@;'; put 'put ''b3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PWsmJmNlKCksamUuZm9yRWFjaChmdW5jdGlvbihXZSl7InN0cmluZyI9PXR5cGVvZiBmZVtXZV0mJnNlKHhlW1dlXSkmJnhlW1dlXS50ZXN0KGZlW1dlXSl8fGZ1bmN0aW9uKEtlLFllLEplLGx0LFBlLGJlKXtpZighKEpl''@;'; put 'put ''IGluIEtlKXx8IUUoS2VbSmVdLFllW0plXSkpe2lmKCFsdCl7dmFyIEFlPW5ldyBDKEtlLFBlKSxUZT1uZXcgQyhZZSxQZSxLZSkscWU9bmV3IHEoe2FjdHVhbDpBZSxleHBlY3RlZDpUZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46YmV9KTt0aHJvdyBxZS5hY3R1''@;'; put 'put ''YWw9S2UscWUuZXhwZWN0ZWQ9WWUscWUub3BlcmF0b3I9YmUubmFtZSxxZX1IKHthY3R1YWw6S2UsZXhwZWN0ZWQ6WWUsbWVzc2FnZTpsdCxvcGVyYXRvcjpiZS5uYW1lLHN0YWNrU3RhcnRGbjpiZX0pfX0oZmUseGUsV2UsTGUsamUsRmUpfSksITB9cmV0dXJuIHZvaWQgMCE9PXhlLnByb3Rv''@;'; put 'put ''dHlwZSYmZmUgaW5zdGFuY2VvZiB4ZXx8IUVycm9yLmlzUHJvdG90eXBlT2YoeGUpJiYhMD09PXhlLmNhbGwoe30sZmUpfWZ1bmN0aW9uIHYoZmUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmZSl0aHJvdyBuZXcgQigiZm4iLCJGdW5jdGlvbiIsZmUpO3RyeXtmZSgpfWNhdGNoKHhlKXtyZXR1''@;'; put 'put ''cm4geGV9cmV0dXJuIER9ZnVuY3Rpb24gcChmZSl7cmV0dXJuIG9lKGZlKXx8bnVsbCE9PWZlJiYib2JqZWN0Ij09PUkoZmUpJiYiZnVuY3Rpb24iPT10eXBlb2YgZmUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIGZlLmNhdGNofWZ1bmN0aW9uIHcoZmUpe3JldHVybiBQcm9taXNlLnJlc29s''@;'; put 'put ''dmUoKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHhlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmZSl7aWYoIXAoeGU9ZmUoKSkpdGhyb3cgbmV3IFgoImluc3RhbmNlIG9mIFByb21pc2UiLCJwcm9taXNlRm4iLHhlKX1lbHNle2lmKCFwKGZlKSl0aHJvdyBuZXcgQigicHJvbWlzZUZuIixbIkZ1bmN0''@;'; put 'put ''aW9uIiwiUHJvbWlzZSJdLGZlKTt4ZT1mZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiB4ZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gRH0pLmNhdGNoKGZ1bmN0aW9uKExlKXtyZXR1cm4gTGV9KX0pfWZ1bmN0aW9uIEooZmUseGUsTGUsRmUpe2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgTGUpe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBCKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sTGUpO2lmKCJvYmplY3QiPT09SSh4ZSkmJm51bGwhPT14ZSl7aWYoeGUubWVzc2FnZT09PUxlKXRocm93''@;'; put 'put ''IG5ldyBWKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KHhlLm1lc3NhZ2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKX1lbHNlIGlmKHhlPT09TGUpdGhyb3cgbmV3IFYoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KHhl''@;'; put 'put ''LCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7RmU9TGUsTGU9dm9pZCAwfWVsc2UgaWYobnVsbCE9TGUmJiJvYmplY3QiIT09SShMZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBMZSl0aHJvdyBuZXcgQigiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4''@;'; put 'put ''cCJdLExlKTtpZih4ZT09PUQpe3ZhciBPZT0iIjtMZSYmTGUubmFtZSYmKE9lKz0iICgiLmNvbmNhdChMZS5uYW1lLCIpIikpLE9lKz1GZT8iOiAiLmNvbmNhdChGZSk6Ii4iLEgoe2FjdHVhbDp2b2lkIDAsZXhwZWN0ZWQ6TGUsb3BlcmF0b3I6ZmUubmFtZSxtZXNzYWdlOiJNaXNzaW5nIGV4''@;'; put 'put ''cGVjdGVkICIuY29uY2F0KCJyZWplY3RzIj09PWZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChPZSksc3RhY2tTdGFydEZuOmZlfSl9aWYoTGUmJiFTKHhlLExlLEZlLGZlKSl0aHJvdyB4ZX1mdW5jdGlvbiBuZShmZSx4ZSxMZSxGZSl7aWYoeGUhPT1EKXtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9dm9pZCAwKSwhTGV8fFMoeGUsTGUpKXt2YXIgT2U9RmU/IjogIi5jb25jYXQoRmUpOiIuIjtIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6TGUsb3BlcmF0b3I6ZmUubmFtZSxtZXNzYWdlOiJHb3QgdW53YW50ZWQgIi5jb25jYXQoImRvZXNOb3RSZWpl''@;'; put 'put ''Y3QiPT09ZmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KE9lLCJcbiIpKydBY3R1YWwgbWVzc2FnZTogIicuY29uY2F0KHhlJiZ4ZS5tZXNzYWdlLCciJyksc3RhY2tTdGFydEZuOmZlfSl9dGhyb3cgeGV9fWZ1bmN0aW9uIGRlKCl7Zm9yKHZhciBmZT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLHhlPW5ldyBBcnJheShmZSksTGU9MDtMZTxmZTtMZSsrKXhlW0xlXT1hcmd1bWVudHNbTGVdO04uYXBwbHkodm9pZCAwLFtkZSx4ZS5sZW5ndGhdLmNvbmNhdCh4ZSkpfWIudGhyb3dzPWZ1bmN0aW9uIGZlKHhlKXtmb3IodmFyIExlPWFyZ3VtZW50cy5sZW5ndGgsRmU9bmV3IEFy''@;'; put 'put ''cmF5KExlPjE/TGUtMTowKSxPZT0xO09lPExlO09lKyspRmVbT2UtMV09YXJndW1lbnRzW09lXTtKLmFwcGx5KHZvaWQgMCxbZmUsdih4ZSldLmNvbmNhdChGZSkpfSxiLnJlamVjdHM9ZnVuY3Rpb24gZmUoeGUpe2Zvcih2YXIgTGU9YXJndW1lbnRzLmxlbmd0aCxGZT1uZXcgQXJyYXkoTGU+''@;'; put 'put ''MT9MZS0xOjApLE9lPTE7T2U8TGU7T2UrKylGZVtPZS0xXT1hcmd1bWVudHNbT2VdO3JldHVybiB3KHhlKS50aGVuKGZ1bmN0aW9uKGplKXtyZXR1cm4gSi5hcHBseSh2b2lkIDAsW2ZlLGplXS5jb25jYXQoRmUpKX0pfSxiLmRvZXNOb3RUaHJvdz1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBM''@;'; put 'put ''ZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShMZT4xP0xlLTE6MCksT2U9MTtPZTxMZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07bmUuYXBwbHkodm9pZCAwLFtmZSx2KHhlKV0uY29uY2F0KEZlKSl9LGIuZG9lc05vdFJlamVjdD1mdW5jdGlvbiBmZSh4ZSl7Zm9yKHZhciBM''@;'; put 'put ''ZT1hcmd1bWVudHMubGVuZ3RoLEZlPW5ldyBBcnJheShMZT4xP0xlLTE6MCksT2U9MTtPZTxMZTtPZSsrKUZlW09lLTFdPWFyZ3VtZW50c1tPZV07cmV0dXJuIHcoeGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBuZS5hcHBseSh2b2lkIDAsW2ZlLGplXS5jb25jYXQoRmUpKX0pfSxiLmlm''@;'; put 'put ''RXJyb3I9ZnVuY3Rpb24gZmUoeGUpe2lmKG51bGwhPXhlKXt2YXIgTGU9ImlmRXJyb3IgZ290IHVud2FudGVkIGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PUkoeGUpJiYic3RyaW5nIj09dHlwZW9mIHhlLm1lc3NhZ2U/TGUrPTA9PT14ZS5tZXNzYWdlLmxlbmd0aCYmeGUuY29uc3RydWN0b3I/''@;'; put 'put ''eGUuY29uc3RydWN0b3IubmFtZTp4ZS5tZXNzYWdlOkxlKz1lZSh4ZSk7dmFyIEZlPW5ldyBxKHthY3R1YWw6eGUsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpMZSxzdGFja1N0YXJ0Rm46ZmV9KSxPZT14ZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIE9lKXt2''@;'; put 'put ''YXIgamU9T2Uuc3BsaXQoIlxuIik7amUuc2hpZnQoKTtmb3IodmFyIFdlPUZlLnN0YWNrLnNwbGl0KCJcbiIpLEtlPTA7S2U8amUubGVuZ3RoO0tlKyspe3ZhciBZZT1XZS5pbmRleE9mKGplW0tlXSk7aWYoLTEhPT1ZZSl7V2U9V2Uuc2xpY2UoMCxZZSk7YnJlYWt9fUZlLnN0YWNrPSIiLmNv''@;'; put 'put ''bmNhdChXZS5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChqZS5qb2luKCJcbiIpKX10aHJvdyBGZX19LGIuc3RyaWN0PWhlKGRlLGIse2VxdWFsOmIuc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmIuZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmIubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmIu''@;'; put 'put ''bm90RGVlcFN0cmljdEVxdWFsfSksYi5zdHJpY3Quc3RyaWN0PWIuc3RyaWN0fSw1OTYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKE4sZyxDKXtyZXR1cm4gZyBpbiBOP09iamVjdC5kZWZpbmVQcm9wZXJ0eShOLGcse3ZhbHVlOkMsZW51bWVyYWJs''@;'; put 'put ''ZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpOW2ddPUMsTn1mdW5jdGlvbiBrKE4sZyl7cmV0dXJuIWd8fCJvYmplY3QiIT09WChnKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGc/RShOKTpnfWZ1bmN0aW9uIEUoTil7aWYodm9pZCAwPT09Til0aHJvdyBuZXcgUmVmZXJlbmNlRXJy''@;'; put 'put ''b3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBOfWZ1bmN0aW9uIGooTil7dmFyIGc9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gaj1mdW5jdGlvbihDKXtpZihudWxsPT09Q3x8''@;'; put 'put ''LTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEMpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSlyZXR1cm4gQztpZigiZnVuY3Rpb24iIT10eXBlb2YgQyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lm''@;'; put 'put ''KHZvaWQgMCE9PWcpe2lmKGcuaGFzKEMpKXJldHVybiBnLmdldChDKTtnLnNldChDLHYpfWZ1bmN0aW9uIHYoKXtyZXR1cm4gVihDLGFyZ3VtZW50cyxZKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gdi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShDLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6''@;'; put 'put ''e3ZhbHVlOnYsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksQih2LEMpfSxqKE4pfWZ1bmN0aW9uIFYoTixnLEMpe3JldHVybihWPWZ1bmN0aW9uKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0''@;'; put 'put ''LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKT9SZWZsZWN0LmNv''@;'; put 'put ''bnN0cnVjdDpmdW5jdGlvbihTLHYscCl7dmFyIHc9W251bGxdO3cucHVzaC5hcHBseSh3LHYpO3ZhciBKPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KFMsdykpO3JldHVybiBwJiZCKEoscC5wcm90b3R5cGUpLEp9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQihOLGcpe3JldHVy''@;'; put 'put ''bihCPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oQyxTKXtyZXR1cm4gQy5fX3Byb3RvX189UyxDfSkoTixnKX1mdW5jdGlvbiBZKE4pe3JldHVybihZPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuX19wcm90''@;'; put 'put ''b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZyl9KShOKX1mdW5jdGlvbiBYKE4pe3JldHVybihYPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGcpe3JldHVybiB0eXBlb2YgZ306ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmcuY29uc3RydWN0b3I9PT1TeW1ib2wmJmchPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBnfSkoTil9dmFyIFU9Uig5NTM5KS5pbnNwZWN0LHE9UigyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlv''@;'; put 'put ''biBlZShOLGcsQyl7cmV0dXJuKHZvaWQgMD09PUN8fEM+Ti5sZW5ndGgpJiYoQz1OLmxlbmd0aCksTi5zdWJzdHJpbmcoQy1nLmxlbmd0aCxDKT09PWd9dmFyIHRlPSIiLG9lPSIiLHNlPSIiLGhlPSIiLHVlPXtkZWVwU3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3Rs''@;'; put 'put ''eSBkZWVwLWVxdWFsOiIsc3RyaWN0RXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBzdHJpY3RseSBlcXVhbDoiLHN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLGRlZXBFcXVhbDoiRXhwZWN0ZWQgdmFs''@;'; put 'put ''dWVzIHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbDoiLGVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBlcXVhbDoiLG5vdERlZXBTdHJpY3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbDon''@;'; put 'put ''RXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgc3RyaWN0bHkgdW5lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsT2JqZWN0OidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6Jyxub3REZWVwRXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0''@;'; put 'put ''byBiZSBsb29zZWx5IGRlZXAtZXF1YWwgdG86Jyxub3RFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgbG9vc2VseSB1bmVxdWFsIHRvOicsbm90SWRlbnRpY2FsOiJWYWx1ZXMgaWRlbnRpY2FsIGJ1dCBub3QgcmVmZXJlbmNlLWVxdWFsOiJ9O2Z1bmN0aW9uIEcoTil7dmFyIGc9T2Jq''@;'; put 'put ''ZWN0LmtleXMoTiksQz1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihOKSk7cmV0dXJuIGcuZm9yRWFjaChmdW5jdGlvbihTKXtDW1NdPU5bU119KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQywibWVzc2FnZSIse3ZhbHVlOk4ubWVzc2FnZX0pLEN9ZnVuY3Rpb24gYihOKXty''@;'; put 'put ''ZXR1cm4gVShOLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgSD1mdW5jdGlvbihOKXtmdW5jdGlvbiBnKHAp''@;'; put 'put ''e3ZhciB3O2lmKGZ1bmN0aW9uKFllLEplKXtpZighKFllIGluc3RhbmNlb2YgSmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGcpLCJvYmplY3QiIT09WChwKXx8bnVsbD09PXApdGhyb3cgbmV3IHEoIm9wdGlvbnMiLCJP''@;'; put 'put ''YmplY3QiLHApO3ZhciBKPXAubWVzc2FnZSxuZT1wLm9wZXJhdG9yLGRlPXAuc3RhY2tTdGFydEZuLGZlPXAuYWN0dWFsLHhlPXAuZXhwZWN0ZWQsTGU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0wLG51bGwhPUopdz1rKHRoaXMsWShnKS5jYWxsKHRo''@;'; put 'put ''aXMsU3RyaW5nKEopKSk7ZWxzZSBpZih6LnN0ZGVyciYmei5zdGRlcnIuaXNUVFkmJih6LnN0ZGVyciYmei5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PXouc3RkZXJyLmdldENvbG9yRGVwdGgoKT8odGU9Ilx4MWJbMzRtIixvZT0iXHgxYlszMm0iLGhlPSJceDFiWzM5bSIsc2U9Ilx4MWJb''@;'; put 'put ''MzFtIik6KHRlPSIiLG9lPSIiLGhlPSIiLHNlPSIiKSksIm9iamVjdCI9PT1YKGZlKSYmbnVsbCE9PWZlJiYib2JqZWN0Ij09PVgoeGUpJiZudWxsIT09eGUmJiJzdGFjayJpbiBmZSYmZmUgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImluIHhlJiZ4ZSBpbnN0YW5jZW9mIEVycm9yJiYoZmU9''@;'; put 'put ''RyhmZSkseGU9Ryh4ZSkpLCJkZWVwU3RyaWN0RXF1YWwiPT09bmV8fCJzdHJpY3RFcXVhbCI9PT1uZSl3PWsodGhpcyxZKGcpLmNhbGwodGhpcyxmdW5jdGlvbiBEKE4sZyxDKXt2YXIgUz0iIix2PSIiLHA9MCx3PSIiLEo9ITEsbmU9YihOKSxkZT1uZS5zcGxpdCgiXG4iKSxmZT1iKGcpLnNw''@;'; put 'put ''bGl0KCJcbiIpLHhlPTAsTGU9IiI7aWYoInN0cmljdEVxdWFsIj09PUMmJiJvYmplY3QiPT09WChOKSYmIm9iamVjdCI9PT1YKGcpJiZudWxsIT09TiYmbnVsbCE9PWcmJihDPSJzdHJpY3RFcXVhbE9iamVjdCIpLDE9PT1kZS5sZW5ndGgmJjE9PT1mZS5sZW5ndGgmJmRlWzBdIT09ZmVbMF0p''@;'; put 'put ''e3ZhciBGZT1kZVswXS5sZW5ndGgrZmVbMF0ubGVuZ3RoO2lmKEZlPD0xMCl7aWYoISgib2JqZWN0Ij09PVgoTikmJm51bGwhPT1OfHwib2JqZWN0Ij09PVgoZykmJm51bGwhPT1nfHwwPT09TiYmMD09PWcpKXJldHVybiIiLmNvbmNhdCh1ZVtDXSwiXG5cbiIpKyIiLmNvbmNhdChkZVswXSwi''@;'; put 'put ''ICE9PSAiKS5jb25jYXQoZmVbMF0sIlxuIil9ZWxzZSBpZigic3RyaWN0RXF1YWxPYmplY3QiIT09QyYmRmU8KHouc3RkZXJyJiZ6LnN0ZGVyci5pc1RUWT96LnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDtkZVswXVt4ZV09PT1mZVswXVt4ZV07KXhlKys7eGU+MiYmKExlPSJcbiAgIi5jb25j''@;'; put 'put ''YXQoZnVuY3Rpb24ocWUsWGUpe2lmKFhlPU1hdGguZmxvb3IoWGUpLDA9PXFlLmxlbmd0aHx8MD09WGUpcmV0dXJuIiI7dmFyIFVlPXFlLmxlbmd0aCpYZTtmb3IoWGU9TWF0aC5mbG9vcihNYXRoLmxvZyhYZSkvTWF0aC5sb2coMikpO1hlOylxZSs9cWUsWGUtLTtyZXR1cm4gcWUrcWUuc3Vi''@;'; put 'put ''c3RyaW5nKDAsVWUtcWUubGVuZ3RoKX0oIiAiLHhlKSwiXiIpLHhlPTApfX1mb3IodmFyIE9lPWRlW2RlLmxlbmd0aC0xXSxqZT1mZVtmZS5sZW5ndGgtMV07T2U9PT1qZSYmKHhlKys8Mj93PSJcbiAgIi5jb25jYXQoT2UpLmNvbmNhdCh3KTpTPU9lLGRlLnBvcCgpLGZlLnBvcCgpLDAhPT1k''@;'; put 'put ''ZS5sZW5ndGgmJjAhPT1mZS5sZW5ndGgpOylPZT1kZVtkZS5sZW5ndGgtMV0samU9ZmVbZmUubGVuZ3RoLTFdO3ZhciBXZT1NYXRoLm1heChkZS5sZW5ndGgsZmUubGVuZ3RoKTtpZigwPT09V2Upe3ZhciBLZT1uZS5zcGxpdCgiXG4iKTtpZihLZS5sZW5ndGg+MzApZm9yKEtlWzI2XT0iIi5j''@;'; put 'put ''b25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSk7S2UubGVuZ3RoPjI3OylLZS5wb3AoKTtyZXR1cm4iIi5jb25jYXQodWUubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KEtlLmpvaW4oIlxuIiksIlxuIil9eGU+MyYmKHc9IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSkuY29uY2F0''@;'; put 'put ''KHcpLEo9ITApLCIiIT09UyYmKHc9IlxuICAiLmNvbmNhdChTKS5jb25jYXQodyksUz0iIik7dmFyIFllPTAsSmU9dWVbQ10rIlxuIi5jb25jYXQob2UsIisgYWN0dWFsIikuY29uY2F0KGhlLCIgIikuY29uY2F0KHNlLCItIGV4cGVjdGVkIikuY29uY2F0KGhlKSxsdD0iICIuY29uY2F0KHRl''@;'; put 'put ''LCIuLi4iKS5jb25jYXQoaGUsIiBMaW5lcyBza2lwcGVkIik7Zm9yKHhlPTA7eGU8V2U7eGUrKyl7dmFyIFBlPXhlLXA7aWYoZGUubGVuZ3RoPHhlKzEpUGU+MSYmeGU+MiYmKFBlPjQ/KHYrPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoaGUpLEo9ITApOlBlPjMmJih2Kz0iXG4gICIu''@;'; put 'put ''Y29uY2F0KGZlW3hlLTJdKSxZZSsrKSx2Kz0iXG4gICIuY29uY2F0KGZlW3hlLTFdKSxZZSsrKSxwPXhlLFMrPSJcbiIuY29uY2F0KHNlLCItIikuY29uY2F0KGhlLCIgIikuY29uY2F0KGZlW3hlXSksWWUrKztlbHNlIGlmKGZlLmxlbmd0aDx4ZSsxKVBlPjEmJnhlPjImJihQZT40Pyh2Kz0i''@;'; put 'put ''XG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKSxKPSEwKTpQZT4zJiYodis9IlxuICAiLmNvbmNhdChkZVt4ZS0yXSksWWUrKyksdis9IlxuICAiLmNvbmNhdChkZVt4ZS0xXSksWWUrKykscD14ZSx2Kz0iXG4iLmNvbmNhdChvZSwiKyIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChkZVt4''@;'; put 'put ''ZV0pLFllKys7ZWxzZXt2YXIgYmU9ZmVbeGVdLEFlPWRlW3hlXSxUZT1BZSE9PWJlJiYoIWVlKEFlLCIsIil8fEFlLnNsaWNlKDAsLTEpIT09YmUpO1RlJiZlZShiZSwiLCIpJiZiZS5zbGljZSgwLC0xKT09PUFlJiYoVGU9ITEsQWUrPSIsIiksVGU/KFBlPjEmJnhlPjImJihQZT40Pyh2Kz0i''@;'; put 'put ''XG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKSxKPSEwKTpQZT4zJiYodis9IlxuICAiLmNvbmNhdChkZVt4ZS0yXSksWWUrKyksdis9IlxuICAiLmNvbmNhdChkZVt4ZS0xXSksWWUrKykscD14ZSx2Kz0iXG4iLmNvbmNhdChvZSwiKyIpLmNvbmNhdChoZSwiICIpLmNvbmNhdChBZSks''@;'; put 'put ''Uys9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoYmUpLFllKz0yKToodis9UyxTPSIiLDEhPT1QZSYmMCE9PXhlfHwodis9IlxuICAiLmNvbmNhdChBZSksWWUrKykpfWlmKFllPjIwJiZ4ZTxXZS0yKXJldHVybiIiLmNvbmNhdChKZSkuY29uY2F0KGx0LCJcbiIp''@;'; put 'put ''LmNvbmNhdCh2LCJcbiIpLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGhlKS5jb25jYXQoUywiXG4iKSsiIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSl9cmV0dXJuIiIuY29uY2F0KEplKS5jb25jYXQoSj9sdDoiIiwiXG4iKS5jb25jYXQodikuY29uY2F0KFMpLmNvbmNhdCh3KS5jb25j''@;'; put 'put ''YXQoTGUpfShmZSx4ZSxuZSkpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09bmV8fCJub3RTdHJpY3RFcXVhbCI9PT1uZSl7dmFyIEZlPXVlW25lXSxPZT1iKGZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09bmUmJiJvYmplY3QiPT09WChmZSkmJm51bGwhPT1m''@;'; put 'put ''ZSYmKEZlPXVlLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxPZS5sZW5ndGg+MzApZm9yKE9lWzI2XT0iIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChoZSk7T2UubGVuZ3RoPjI3OylPZS5wb3AoKTt3PWsodGhpcywxPT09T2UubGVuZ3RoP1koZykuY2FsbCh0aGlzLCIiLmNvbmNhdChGZSwiICIp''@;'; put 'put ''LmNvbmNhdChPZVswXSkpOlkoZykuY2FsbCh0aGlzLCIiLmNvbmNhdChGZSwiXG5cbiIpLmNvbmNhdChPZS5qb2luKCJcbiIpLCJcbiIpKSl9ZWxzZXt2YXIgamU9YihmZSksV2U9IiIsS2U9dWVbbmVdOyJub3REZWVwRXF1YWwiPT09bmV8fCJub3RFcXVhbCI9PT1uZT8oamU9IiIuY29uY2F0''@;'; put 'put ''KHVlW25lXSwiXG5cbiIpLmNvbmNhdChqZSkpLmxlbmd0aD4xMDI0JiYoamU9IiIuY29uY2F0KGplLnNsaWNlKDAsMTAyMSksIi4uLiIpKTooV2U9IiIuY29uY2F0KGIoeGUpKSxqZS5sZW5ndGg+NTEyJiYoamU9IiIuY29uY2F0KGplLnNsaWNlKDAsNTA5KSwiLi4uIikpLFdlLmxlbmd0aD41''@;'; put 'put ''MTImJihXZT0iIi5jb25jYXQoV2Uuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1uZXx8ImVxdWFsIj09PW5lP2plPSIiLmNvbmNhdChLZSwiXG5cbiIpLmNvbmNhdChqZSwiXG5cbnNob3VsZCBlcXVhbFxuXG4iKTpXZT0iICIuY29uY2F0KG5lLCIgIikuY29uY2F0KFdlKSks''@;'; put 'put ''dz1rKHRoaXMsWShnKS5jYWxsKHRoaXMsIiIuY29uY2F0KGplKS5jb25jYXQoV2UpKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1MZSx3LmdlbmVyYXRlZE1lc3NhZ2U9IUosT2JqZWN0LmRlZmluZVByb3BlcnR5KEUodyksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VS''@;'; put 'put ''Ul9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHcuY29kZT0iRVJSX0FTU0VSVElPTiIsdy5hY3R1YWw9ZmUsdy5leHBlY3RlZD14ZSx3Lm9wZXJhdG9yPW5lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tU''@;'; put 'put ''cmFjZShFKHcpLGRlKSx3Lm5hbWU9IkFzc2VydGlvbkVycm9yIixrKHcpfXZhciBTO3JldHVybiBmdW5jdGlvbihwLHcpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3JiZudWxsIT09dyl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3Ig''@;'; put 'put ''YSBmdW5jdGlvbiIpO3AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodyYmdy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx3JiZCKHAsdyl9KGcsTiksUz1be2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6VS5jdXN0b20sdmFsdWU6ZnVuY3Rpb24ocCx3KXtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKEope2Zvcih2YXIgbmU9MTtuZTxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''O25lKyspe3ZhciBkZT1udWxsIT1hcmd1bWVudHNbbmVdP2FyZ3VtZW50c1tuZV06e30sZmU9T2JqZWN0LmtleXMoZGUpOyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYoZmU9ZmUuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZGUp''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbih4ZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGUseGUpLmVudW1lcmFibGV9KSkpLGZlLmZvckVhY2goZnVuY3Rpb24oeGUpe0soSix4ZSxkZVt4ZV0pfSl9cmV0dXJuIEp9KHt9LHcse2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0p''@;'; put 'put ''KX19XSxTJiZmdW5jdGlvbiBJKE4sZyl7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspe3ZhciBTPWdbQ107Uy5lbnVtZXJhYmxlPVMuZW51bWVyYWJsZXx8ITEsUy5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFMmJihTLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixT''@;'; put 'put ''LmtleSxTKX19KGcucHJvdG90eXBlLFMpLGd9KGooRXJyb3IpKTtNLmV4cG9ydHM9SH0sMjEzNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooWCl7cmV0dXJuKHo9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVu''@;'; put 'put ''Y3Rpb24oVSl7cmV0dXJuIHR5cGVvZiBVfTpmdW5jdGlvbihVKXtyZXR1cm4gVSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmVS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmVSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIFV9KShYKX1mdW5jdGlvbiBJKFgpe3JldHVybihJ''@;'; put 'put ''PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oVSl7cmV0dXJuIFUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVSl9KShYKX1mdW5jdGlvbiBrKFgsVSl7cmV0dXJuKGs9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihx''@;'; put 'put ''LGVlKXtyZXR1cm4gcS5fX3Byb3RvX189ZWUscX0pKFgsVSl9dmFyIEUsaixWPXt9O2Z1bmN0aW9uIEIoWCxVLHEpe3F8fChxPUVycm9yKTt2YXIgZWU9ZnVuY3Rpb24odGUpe2Z1bmN0aW9uIG9lKHNlLGhlLHVlKXt2YXIgY2U7cmV0dXJuIGZ1bmN0aW9uKEcsYil7aWYoIShHIGluc3RhbmNl''@;'; put 'put ''b2YgYikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsb2UpLGNlPWZ1bmN0aW9uIEsoWCxVKXtyZXR1cm4hVXx8Im9iamVjdCIhPT16KFUpJiYiZnVuY3Rpb24iIT10eXBlb2YgVT9mdW5jdGlvbihxKXtpZih2b2lkIDA9PT1x''@;'; put 'put ''KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHF9KFgpOlV9KHRoaXMsSShvZSkuY2FsbCh0aGlzLCJzdHJpbmciPT10eXBlb2YgVT9VOlUoc2UsaGUsdWUpKSksY2UuY29k''@;'; put 'put ''ZT1YLGNlfXJldHVybiBmdW5jdGlvbihzZSxoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhlJiZudWxsIT09aGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtzZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0''@;'; put 'put ''ZShoZSYmaGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGhlJiZrKHNlLGhlKX0ob2UsdGUpLG9lfShxKTtWW1hdPWVlfWZ1bmN0aW9uIFkoWCxVKXtpZihBcnJheS5pc0FycmF5KFgpKXt2YXIgcT1YLmxlbmd0aDtyZXR1''@;'; put 'put ''cm4gWD1YLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIFN0cmluZyhlZSl9KSxxPjI/Im9uZSBvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFguc2xpY2UoMCxxLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrWFtxLTFdOjI9PT1xPyJvbmUgb2YgIi5jb25jYXQoVSwiICIpLmNvbmNhdChYWzBdLCIg''@;'; put 'put ''b3IgIikuY29uY2F0KFhbMV0pOiJvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFhbMF0pfXJldHVybiJvZiAiLmNvbmNhdChVLCIgIikuY29uY2F0KFN0cmluZyhYKSl9QigiRVJSX0FNQklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVF''@;'; put 'put ''cnJvciksQigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFgsVSxxKXt2YXIgZWUsc2UsdWUsRztpZih2b2lkIDA9PT1FJiYoRT1SKDkyODIpKSxFKCJzdHJpbmciPT10eXBlb2YgWCwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmciKSwic3RyaW5nIj09dHlwZW9mIFUmJiJub3QgIj09''@;'; put 'put ''PVUuc3Vic3RyKDAsNCk/KGVlPSJtdXN0IG5vdCBiZSIsVT1VLnJlcGxhY2UoL15ub3QgLywiIikpOmVlPSJtdXN0IGJlIix1ZT1YLCh2b2lkIDA9PT1HfHxHPnVlLmxlbmd0aCkmJihHPXVlLmxlbmd0aCksIiBhcmd1bWVudCI9PT11ZS5zdWJzdHJpbmcoRy05LEcpKXNlPSJUaGUgIi5jb25j''@;'; put 'put ''YXQoWCwiICIpLmNvbmNhdChlZSwiICIpLmNvbmNhdChZKFUsInR5cGUiKSk7ZWxzZXt2YXIgaGU9ZnVuY3Rpb24odWUsY2UsRyl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBHJiYoRz0wKSwhKEcrMT51ZS5sZW5ndGgpJiYtMSE9PXVlLmluZGV4T2YoIi4iLEcpfShYKT8icHJvcGVydHkiOiJh''@;'; put 'put ''cmd1bWVudCI7c2U9J1RoZSAiJy5jb25jYXQoWCwnIiAnKS5jb25jYXQoaGUsIiAiKS5jb25jYXQoZWUsIiAiKS5jb25jYXQoWShVLCJ0eXBlIikpfXJldHVybiBzZSsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KHoocSkpfSxUeXBlRXJyb3IpLEIoIkVSUl9JTlZBTElEX0FSR19WQUxVRSIs''@;'; put 'put ''ZnVuY3Rpb24oWCxVKXt2YXIgcT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06ImlzIGludmFsaWQiO3ZvaWQgMD09PWomJihqPVIoOTUzOSkpO3ZhciBlZT1qLmluc3BlY3QoVSk7cmV0dXJuIGVlLmxlbmd0aD4xMjgmJihlZT0iIi5jb25j''@;'; put 'put ''YXQoZWUuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQoWCwiJyAiKS5jb25jYXQocSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoZWUpfSxUeXBlRXJyb3IsUmFuZ2VFcnJvciksQigiRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFIixmdW5jdGlvbihYLFUscSl7dmFy''@;'; put 'put ''IGVlO3JldHVybiBlZT1xJiZxLmNvbnN0cnVjdG9yJiZxLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KHEuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoeihxKSksIkV4cGVjdGVkICIuY29uY2F0KFgsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJyku''@;'; put 'put ''Y29uY2F0KFUsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoZWUsIi4iKX0sVHlwZUVycm9yKSxCKCJFUlJfTUlTU0lOR19BUkdTIixmdW5jdGlvbigpe2Zvcih2YXIgWD1hcmd1bWVudHMubGVuZ3RoLFU9bmV3IEFycmF5KFgpLHE9MDtxPFg7cSsrKVVbcV09YXJndW1lbnRzW3Fd''@;'; put 'put ''O3ZvaWQgMD09PUUmJihFPVIoOTI4MikpLEUoVS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgZWU9IlRoZSAiLHRlPVUubGVuZ3RoO3N3aXRjaChVPVUubWFwKGZ1bmN0aW9uKG9lKXtyZXR1cm4nIicuY29uY2F0KG9lLCciJyl9KSx0ZSl7''@;'; put 'put ''Y2FzZSAxOmVlKz0iIi5jb25jYXQoVVswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOmVlKz0iIi5jb25jYXQoVVswXSwiIGFuZCAiKS5jb25jYXQoVVsxXSwiIGFyZ3VtZW50cyIpO2JyZWFrO2RlZmF1bHQ6ZWUrPVUuc2xpY2UoMCx0ZS0xKS5qb2luKCIsICIpLGVlKz0iLCBhbmQgIi5j''@;'; put 'put ''b25jYXQoVVt0ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChlZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksTS5leHBvcnRzLmNvZGVzPVZ9LDkxNTg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KGJlLEFlKXtyZXR1cm4gZnVuY3Rpb24oVGUp''@;'; put 'put ''e2lmKEFycmF5LmlzQXJyYXkoVGUpKXJldHVybiBUZX0oYmUpfHxmdW5jdGlvbihUZSxxZSl7dmFyIFhlPVtdLFVlPSEwLGh0PSExLE1lPXZvaWQgMDt0cnl7Zm9yKHZhciBEZSx6ZT1UZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShVZT0oRGU9emUubmV4dCgpKS5kb25lKSYmKFhlLnB1c2goRGUu''@;'; put 'put ''dmFsdWUpLCFxZXx8WGUubGVuZ3RoIT09cWUpO1VlPSEwKTt9Y2F0Y2goaXQpe2h0PSEwLE1lPWl0fWZpbmFsbHl7dHJ5e1VlfHxudWxsPT16ZS5yZXR1cm58fHplLnJldHVybigpfWZpbmFsbHl7aWYoaHQpdGhyb3cgTWV9fXJldHVybiBYZX0oYmUsQWUpfHxmdW5jdGlvbigpe3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBLKGJlKXtyZXR1cm4oSz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihB''@;'; put 'put ''ZSl7cmV0dXJuIHR5cGVvZiBBZX06ZnVuY3Rpb24oQWUpe3JldHVybiBBZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmQWUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkFlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgQWV9KShiZSl9dmFyIEk9dm9pZCAwIT09L2EvZy5m''@;'; put 'put ''bGFncyxrPWZ1bmN0aW9uKGJlKXt2YXIgQWU9W107cmV0dXJuIGJlLmZvckVhY2goZnVuY3Rpb24oVGUpe3JldHVybiBBZS5wdXNoKFRlKX0pLEFlfSxFPWZ1bmN0aW9uKGJlKXt2YXIgQWU9W107cmV0dXJuIGJlLmZvckVhY2goZnVuY3Rpb24oVGUscWUpe3JldHVybiBBZS5wdXNoKFtxZSxU''@;'; put 'put ''ZV0pfSksQWV9LGo9T2JqZWN0LmlzP09iamVjdC5pczpSKDYwOSksVj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP09iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oKXtyZXR1cm5bXX0sQj1OdW1iZXIuaXNOYU4/TnVtYmVyLmlzTmFOOlIoMzYwKTtmdW5jdGlvbiBZ''@;'; put 'put ''KGJlKXtyZXR1cm4gYmUuY2FsbC5iaW5kKGJlKX12YXIgWD1ZKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLFU9WShPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlKSxxPVkoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksZWU9Uig5NTM5KS50eXBlcyx0ZT1l''@;'; put 'put ''ZS5pc0FueUFycmF5QnVmZmVyLG9lPWVlLmlzQXJyYXlCdWZmZXJWaWV3LHNlPWVlLmlzRGF0ZSxoZT1lZS5pc01hcCx1ZT1lZS5pc1JlZ0V4cCxjZT1lZS5pc1NldCxHPWVlLmlzTmF0aXZlRXJyb3IsYj1lZS5pc0JveGVkUHJpbWl0aXZlLEQ9ZWUuaXNOdW1iZXJPYmplY3QsSD1lZS5pc1N0''@;'; put 'put ''cmluZ09iamVjdCxOPWVlLmlzQm9vbGVhbk9iamVjdCxnPWVlLmlzQmlnSW50T2JqZWN0LEM9ZWUuaXNTeW1ib2xPYmplY3QsUz1lZS5pc0Zsb2F0MzJBcnJheSx2PWVlLmlzRmxvYXQ2NEFycmF5O2Z1bmN0aW9uIHAoYmUpe2lmKDA9PT1iZS5sZW5ndGh8fGJlLmxlbmd0aD4xMClyZXR1cm4h''@;'; put 'put ''MDtmb3IodmFyIEFlPTA7QWU8YmUubGVuZ3RoO0FlKyspe3ZhciBUZT1iZS5jaGFyQ29kZUF0KEFlKTtpZihUZTw0OHx8VGU+NTcpcmV0dXJuITB9cmV0dXJuIDEwPT09YmUubGVuZ3RoJiZiZT49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gdyhiZSl7cmV0dXJuIE9iamVjdC5rZXlzKGJlKS5m''@;'; put 'put ''aWx0ZXIocCkuY29uY2F0KFYoYmUpLmZpbHRlcihPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmJpbmQoYmUpKSl9ZnVuY3Rpb24gSihiZSxBZSl7aWYoYmU9PT1BZSlyZXR1cm4gMDtmb3IodmFyIFRlPWJlLmxlbmd0aCxxZT1BZS5sZW5ndGgsWGU9MCxVZT1NYXRoLm1p''@;'; put 'put ''bihUZSxxZSk7WGU8VWU7KytYZSlpZihiZVtYZV0hPT1BZVtYZV0pe1RlPWJlW1hlXSxxZT1BZVtYZV07YnJlYWt9cmV0dXJuIFRlPHFlPy0xOnFlPFRlPzE6MH12YXIgZmU9MCx4ZT0xLExlPTIsRmU9MztmdW5jdGlvbiBPZShiZSxBZSxUZSxxZSl7aWYoYmU9PT1BZSlyZXR1cm4gMCE9PWJl''@;'; put 'put ''fHwhVGV8fGooYmUsQWUpO2lmKFRlKXtpZigib2JqZWN0IiE9PUsoYmUpKXJldHVybiJudW1iZXIiPT10eXBlb2YgYmUmJkIoYmUpJiZCKEFlKTtpZigib2JqZWN0IiE9PUsoQWUpfHxudWxsPT09YmV8fG51bGw9PT1BZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGJlKSE9PU9iamVjdC5nZXRQ''@;'; put 'put ''cm90b3R5cGVPZihBZSkpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09YmV8fCJvYmplY3QiIT09SyhiZSkpcmV0dXJuKG51bGw9PT1BZXx8Im9iamVjdCIhPT1LKEFlKSkmJmJlPT1BZTtpZihudWxsPT09QWV8fCJvYmplY3QiIT09SyhBZSkpcmV0dXJuITF9dmFyIFhlLFVlLGh0LE1lLEh0LFB0''@;'; put 'put ''LERlPXEoYmUpO2lmKERlIT09cShBZSkpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShiZSkpe2lmKGJlLmxlbmd0aCE9PUFlLmxlbmd0aClyZXR1cm4hMTt2YXIgemU9dyhiZSksaXQ9dyhBZSk7cmV0dXJuIHplLmxlbmd0aD09PWl0Lmxlbmd0aCYmV2UoYmUsQWUsVGUscWUseGUsemUpfWlm''@;'; put 'put ''KCJbb2JqZWN0IE9iamVjdF0iPT09RGUmJighaGUoYmUpJiZoZShBZSl8fCFjZShiZSkmJmNlKEFlKSkpcmV0dXJuITE7aWYoc2UoYmUpKXtpZighc2UoQWUpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoYmUpIT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKEFlKSlyZXR1cm4h''@;'; put 'put ''MX1lbHNlIGlmKHVlKGJlKSl7aWYoIXVlKEFlKXx8KGh0PWJlLE1lPUFlLCEoST9odC5zb3VyY2U9PT1NZS5zb3VyY2UmJmh0LmZsYWdzPT09TWUuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGh0KT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChNZSkpKSly''@;'; put 'put ''ZXR1cm4hMX1lbHNlIGlmKEcoYmUpfHxiZSBpbnN0YW5jZW9mIEVycm9yKXtpZihiZS5tZXNzYWdlIT09QWUubWVzc2FnZXx8YmUubmFtZSE9PUFlLm5hbWUpcmV0dXJuITF9ZWxzZXtpZihvZShiZSkpe2lmKFRlfHwhUyhiZSkmJiF2KGJlKSl7aWYoKEh0PWJlKS5ieXRlTGVuZ3RoIT09KFB0''@;'; put 'put ''PUFlKS5ieXRlTGVuZ3RofHwwIT09SihuZXcgVWludDhBcnJheShIdC5idWZmZXIsSHQuYnl0ZU9mZnNldCxIdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShQdC5idWZmZXIsUHQuYnl0ZU9mZnNldCxQdC5ieXRlTGVuZ3RoKSkpcmV0dXJuITF9ZWxzZSBpZighZnVuY3Rpb24oSHQsUHQp''@;'; put 'put ''e2lmKEh0LmJ5dGVMZW5ndGghPT1QdC5ieXRlTGVuZ3RoKXJldHVybiExO2Zvcih2YXIgb249MDtvbjxIdC5ieXRlTGVuZ3RoO29uKyspaWYoSHRbb25dIT09UHRbb25dKXJldHVybiExO3JldHVybiEwfShiZSxBZSkpcmV0dXJuITE7dmFyIHV0PXcoYmUpLE10PXcoQWUpO3JldHVybiB1dC5s''@;'; put 'put ''ZW5ndGg9PT1NdC5sZW5ndGgmJldlKGJlLEFlLFRlLHFlLGZlLHV0KX1pZihjZShiZSkpcmV0dXJuISghY2UoQWUpfHxiZS5zaXplIT09QWUuc2l6ZSkmJldlKGJlLEFlLFRlLHFlLExlKTtpZihoZShiZSkpcmV0dXJuISghaGUoQWUpfHxiZS5zaXplIT09QWUuc2l6ZSkmJldlKGJlLEFlLFRl''@;'; put 'put ''LHFlLEZlKTtpZih0ZShiZSkpe2lmKChYZT1iZSkuYnl0ZUxlbmd0aCE9PShVZT1BZSkuYnl0ZUxlbmd0aHx8MCE9PUoobmV3IFVpbnQ4QXJyYXkoWGUpLG5ldyBVaW50OEFycmF5KFVlKSkpcmV0dXJuITF9ZWxzZSBpZihiKGJlKSYmIWZ1bmN0aW9uKEh0LFB0KXtyZXR1cm4gRChIdCk/RChQ''@;'; put 'put ''dCkmJmooTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpLE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KSk6SChIdCk/SChQdCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpOKEh0KT9O''@;'; put 'put ''KFB0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PUJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChQdCk6ZyhIdCk/ZyhQdCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEh0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFB0KTpDKFB0''@;'; put 'put ''KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoSHQpPT09U3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUHQpfShiZSxBZSkpcmV0dXJuITF9cmV0dXJuIFdlKGJlLEFlLFRlLHFlLGZlKX1mdW5jdGlvbiBqZShiZSxBZSl7cmV0dXJuIEFlLmZpbHRlcihmdW5jdGlvbihUZSl7''@;'; put 'put ''cmV0dXJuIFUoYmUsVGUpfSl9ZnVuY3Rpb24gV2UoYmUsQWUsVGUscWUsWGUsVWUpe2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXtVZT1PYmplY3Qua2V5cyhiZSk7dmFyIGh0PU9iamVjdC5rZXlzKEFlKTtpZihVZS5sZW5ndGghPT1odC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBNZT0wO01l''@;'; put 'put ''PFVlLmxlbmd0aDtNZSsrKWlmKCFYKEFlLFVlW01lXSkpcmV0dXJuITE7aWYoVGUmJjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgRGU9VihiZSk7aWYoMCE9PURlLmxlbmd0aCl7dmFyIHplPTA7Zm9yKE1lPTA7TWU8RGUubGVuZ3RoO01lKyspe3ZhciBpdD1EZVtNZV07aWYoVShiZSxpdCkp''@;'; put 'put ''e2lmKCFVKEFlLGl0KSlyZXR1cm4hMTtVZS5wdXNoKGl0KSx6ZSsrfWVsc2UgaWYoVShBZSxpdCkpcmV0dXJuITF9dmFyIHV0PVYoQWUpO2lmKERlLmxlbmd0aCE9PXV0Lmxlbmd0aCYmamUoQWUsdXQpLmxlbmd0aCE9PXplKXJldHVybiExfWVsc2V7dmFyIE10PVYoQWUpO2lmKDAhPT1NdC5s''@;'; put 'put ''ZW5ndGgmJjAhPT1qZShBZSxNdCkubGVuZ3RoKXJldHVybiExfX1pZigwPT09VWUubGVuZ3RoJiYoWGU9PT1mZXx8WGU9PT14ZSYmMD09PWJlLmxlbmd0aHx8MD09PWJlLnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXFlKXFlPXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9u''@;'; put 'put ''OjB9O2Vsc2V7dmFyIEh0PXFlLnZhbDEuZ2V0KGJlKTtpZih2b2lkIDAhPT1IdCl7dmFyIFB0PXFlLnZhbDIuZ2V0KEFlKTtpZih2b2lkIDAhPT1QdClyZXR1cm4gSHQ9PT1QdH1xZS5wb3NpdGlvbisrfXFlLnZhbDEuc2V0KGJlLHFlLnBvc2l0aW9uKSxxZS52YWwyLnNldChBZSxxZS5wb3Np''@;'; put 'put ''dGlvbik7dmFyIG9uPWZ1bmN0aW9uKENuLFV0LGJuLFduLGVuLCRuKXt2YXIgSG49MDtpZigkbj09PUxlKXtpZighZnVuY3Rpb24od3QsWHQsX3QsTnQpe2Zvcih2YXIgbW49bnVsbCxydD1rKHd0KSxJdD0wO0l0PHJ0Lmxlbmd0aDtJdCsrKXt2YXIgSnQ9cnRbSXRdO2lmKCJvYmplY3QiPT09''@;'; put 'put ''SyhKdCkmJm51bGwhPT1KdCludWxsPT09bW4mJihtbj1uZXcgU2V0KSxtbi5hZGQoSnQpO2Vsc2UgaWYoIVh0LmhhcyhKdCkpe2lmKF90fHwhSmUod3QsWHQsSnQpKXJldHVybiExO251bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChKdCl9fWlmKG51bGwhPT1tbil7Zm9yKHZhciBEdD1r''@;'; put 'put ''KFh0KSxwdD0wO3B0PER0Lmxlbmd0aDtwdCsrKXt2YXIgWXQ9RHRbcHRdO2lmKCJvYmplY3QiPT09SyhZdCkmJm51bGwhPT1ZdCl7aWYoIUtlKG1uLFl0LF90LE50KSlyZXR1cm4hMX1lbHNlIGlmKCFfdCYmIXd0LmhhcyhZdCkmJiFLZShtbixZdCxfdCxOdCkpcmV0dXJuITF9cmV0dXJuIDA9''@;'; put 'put ''PT1tbi5zaXplfXJldHVybiEwfShDbixVdCxibixlbikpcmV0dXJuITF9ZWxzZSBpZigkbj09PUZlKXtpZighZnVuY3Rpb24od3QsWHQsX3QsTnQpe2Zvcih2YXIgbW49bnVsbCxydD1FKHd0KSxJdD0wO0l0PHJ0Lmxlbmd0aDtJdCsrKXt2YXIgSnQ9eihydFtJdF0sMiksRHQ9SnRbMF0scHQ9''@;'; put 'put ''SnRbMV07aWYoIm9iamVjdCI9PT1LKER0KSYmbnVsbCE9PUR0KW51bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChEdCk7ZWxzZXt2YXIgWXQ9WHQuZ2V0KER0KTtpZih2b2lkIDA9PT1ZdCYmIVh0LmhhcyhEdCl8fCFPZShwdCxZdCxfdCxOdCkpe2lmKF90fHwhbHQod3QsWHQsRHQscHQs''@;'; put 'put ''TnQpKXJldHVybiExO251bGw9PT1tbiYmKG1uPW5ldyBTZXQpLG1uLmFkZChEdCl9fX1pZihudWxsIT09bW4pe2Zvcih2YXIgSW49RShYdCksenQ9MDt6dDxJbi5sZW5ndGg7enQrKyl7dmFyIHluPXooSW5benRdLDIpLHhuPShEdD15blswXSx5blsxXSk7aWYoIm9iamVjdCI9PT1LKER0KSYm''@;'; put 'put ''bnVsbCE9PUR0KXtpZighUGUobW4sd3QsRHQseG4sX3QsTnQpKXJldHVybiExfWVsc2UgaWYoIShfdHx8d3QuaGFzKER0KSYmT2Uod3QuZ2V0KER0KSx4biwhMSxOdCl8fFBlKG1uLHd0LER0LHhuLCExLE50KSkpcmV0dXJuITF9cmV0dXJuIDA9PT1tbi5zaXplfXJldHVybiEwfShDbixVdCxi''@;'; put 'put ''bixlbikpcmV0dXJuITF9ZWxzZSBpZigkbj09PXhlKWZvcig7SG48Q24ubGVuZ3RoO0huKyspe2lmKCFYKENuLEhuKSl7aWYoWChVdCxIbikpcmV0dXJuITE7Zm9yKHZhciBmdD1PYmplY3Qua2V5cyhDbik7SG48ZnQubGVuZ3RoO0huKyspe3ZhciBmbj1mdFtIbl07aWYoIVgoVXQsZm4pfHwh''@;'; put 'put ''T2UoQ25bZm5dLFV0W2ZuXSxibixlbikpcmV0dXJuITF9cmV0dXJuIGZ0Lmxlbmd0aD09PU9iamVjdC5rZXlzKFV0KS5sZW5ndGh9aWYoIVgoVXQsSG4pfHwhT2UoQ25bSG5dLFV0W0huXSxibixlbikpcmV0dXJuITF9Zm9yKEhuPTA7SG48V24ubGVuZ3RoO0huKyspe3ZhciBobj1XbltIbl07''@;'; put 'put ''aWYoIU9lKENuW2huXSxVdFtobl0sYm4sZW4pKXJldHVybiExfXJldHVybiEwfShiZSxBZSxUZSxVZSxxZSxYZSk7cmV0dXJuIHFlLnZhbDEuZGVsZXRlKGJlKSxxZS52YWwyLmRlbGV0ZShBZSksb259ZnVuY3Rpb24gS2UoYmUsQWUsVGUscWUpe2Zvcih2YXIgWGU9ayhiZSksVWU9MDtVZTxY''@;'; put 'put ''ZS5sZW5ndGg7VWUrKyl7dmFyIGh0PVhlW1VlXTtpZihPZShBZSxodCxUZSxxZSkpcmV0dXJuIGJlLmRlbGV0ZShodCksITB9cmV0dXJuITF9ZnVuY3Rpb24gWWUoYmUpe3N3aXRjaChLKGJlKSl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBudWxsO2Nhc2Uib2JqZWN0IjpyZXR1cm47Y2FzZSJz''@;'; put 'put ''eW1ib2wiOnJldHVybiExO2Nhc2Uic3RyaW5nIjpiZT0rYmU7Y2FzZSJudW1iZXIiOmlmKEIoYmUpKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIEplKGJlLEFlLFRlKXt2YXIgcWU9WWUoVGUpO3JldHVybiBxZT8/KEFlLmhhcyhxZSkmJiFiZS5oYXMocWUpKX1mdW5jdGlvbiBsdChiZSxB''@;'; put 'put ''ZSxUZSxxZSxYZSl7dmFyIFVlPVllKFRlKTtpZihudWxsIT1VZSlyZXR1cm4gVWU7dmFyIGh0PUFlLmdldChVZSk7cmV0dXJuISh2b2lkIDA9PT1odCYmIUFlLmhhcyhVZSl8fCFPZShxZSxodCwhMSxYZSkpJiYhYmUuaGFzKFVlKSYmT2UocWUsaHQsITEsWGUpfWZ1bmN0aW9uIFBlKGJlLEFl''@;'; put 'put ''LFRlLHFlLFhlLFVlKXtmb3IodmFyIGh0PWsoYmUpLE1lPTA7TWU8aHQubGVuZ3RoO01lKyspe3ZhciBEZT1odFtNZV07aWYoT2UoVGUsRGUsWGUsVWUpJiZPZShxZSxBZS5nZXQoRGUpLFhlLFVlKSlyZXR1cm4gYmUuZGVsZXRlKERlKSwhMH1yZXR1cm4hMX1NLmV4cG9ydHM9e2lzRGVlcEVx''@;'; put 'put ''dWFsOmZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gT2UoYmUsQWUsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbihiZSxBZSl7cmV0dXJuIE9lKGJlLEFlLCEwKX19fSw4MjI0Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPfX0sOTY2OTooTSxPLFIp''@;'; put 'put ''PT57TS5leHBvcnRzPVIoMTYwOSl9LDU0NDg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpLEs9Uig2MDI2KSxJPVIoNDM3Miksaz1SKDUzMjcpLEU9Uig0MDk3KSxqPVIoNDEwOSksVj1SKDc5ODUpLEI9Uig3ODc0KSxZPVIoMjY0OCksWD1SKDY0NCksVT1SKDIwNSk7TS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKHEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlZSx0ZSl7dmFyIG9lLHNlPXEuZGF0YSxoZT1xLmhlYWRlcnMsdWU9cS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gY2UoKXtxLmNhbmNlbFRva2VuJiZxLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9lKSxxLnNp''@;'; put 'put ''Z25hbCYmcS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG9lKX16LmlzRm9ybURhdGEoc2UpJiZ6LmlzU3RhbmRhcmRCcm93c2VyRW52KCkmJmRlbGV0ZSBoZVsiQ29udGVudC1UeXBlIl07dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHEuYXV0aCl7dmFyIGI9cS5hdXRo''@;'; put 'put ''LnVzZXJuYW1lfHwiIixEPXEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocS5hdXRoLnBhc3N3b3JkKSk6IiI7aGUuQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKGIrIjoiK0QpfXZhciBIPUUocS5iYXNlVVJMLHEudXJsKTtmdW5jdGlvbiBOKCl7aWYoRyl7''@;'; put 'put ''dmFyIFM9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBHP2ooRy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbDtLKGZ1bmN0aW9uKHApe2VlKHApLGNlKCl9LGZ1bmN0aW9uKHApe3RlKHApLGNlKCl9LHtkYXRhOnVlJiYidGV4dCIhPT11ZSYmImpzb24iIT09dWU/Ry5yZXNwb25zZTpH''@;'; put 'put ''LnJlc3BvbnNlVGV4dCxzdGF0dXM6Ry5zdGF0dXMsc3RhdHVzVGV4dDpHLnN0YXR1c1RleHQsaGVhZGVyczpTLGNvbmZpZzpxLHJlcXVlc3Q6R30pLEc9bnVsbH19aWYoRy5vcGVuKHEubWV0aG9kLnRvVXBwZXJDYXNlKCksayhILHEucGFyYW1zLHEucGFyYW1zU2VyaWFsaXplciksITApLEcu''@;'; put 'put ''dGltZW91dD1xLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBHP0cub25sb2FkZW5kPU46Ry5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtHJiY0PT09Ry5yZWFkeVN0YXRlJiYoMCE9PUcuc3RhdHVzfHxHLnJlc3BvbnNlVVJMJiYwPT09Ry5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIp''@;'; put 'put ''KSYmc2V0VGltZW91dChOKX0sRy5vbmFib3J0PWZ1bmN0aW9uKCl7RyYmKHRlKG5ldyBZKCJSZXF1ZXN0IGFib3J0ZWQiLFkuRUNPTk5BQk9SVEVELHEsRykpLEc9bnVsbCl9LEcub25lcnJvcj1mdW5jdGlvbigpe3RlKG5ldyBZKCJOZXR3b3JrIEVycm9yIixZLkVSUl9ORVRXT1JLLHEsRyxH''@;'; put 'put ''KSksRz1udWxsfSxHLm9udGltZW91dD1mdW5jdGlvbigpe3ZhciBTPXEudGltZW91dD8idGltZW91dCBvZiAiK3EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtxLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihTPXEudGltZW91dEVycm9yTWVzc2FnZSksdGUobmV3IFko''@;'; put 'put ''UywocS50cmFuc2l0aW9uYWx8fEIpLmNsYXJpZnlUaW1lb3V0RXJyb3I/WS5FVElNRURPVVQ6WS5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsfSx6LmlzU3RhbmRhcmRCcm93c2VyRW52KCkpe3ZhciBnPShxLndpdGhDcmVkZW50aWFsc3x8VihIKSkmJnEueHNyZkNvb2tpZU5hbWU/SS5yZWFk''@;'; put 'put ''KHEueHNyZkNvb2tpZU5hbWUpOnZvaWQgMDtnJiYoaGVbcS54c3JmSGVhZGVyTmFtZV09Zyl9InNldFJlcXVlc3RIZWFkZXIiaW4gRyYmei5mb3JFYWNoKGhlLGZ1bmN0aW9uKFMsdil7dm9pZCAwPT09c2UmJiJjb250ZW50LXR5cGUiPT09di50b0xvd2VyQ2FzZSgpP2RlbGV0ZSBoZVt2XTpH''@;'; put 'put ''LnNldFJlcXVlc3RIZWFkZXIodixTKX0pLHouaXNVbmRlZmluZWQocS53aXRoQ3JlZGVudGlhbHMpfHwoRy53aXRoQ3JlZGVudGlhbHM9ISFxLndpdGhDcmVkZW50aWFscyksdWUmJiJqc29uIiE9PXVlJiYoRy5yZXNwb25zZVR5cGU9cS5yZXNwb25zZVR5cGUpLCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBxLm9uRG93bmxvYWRQcm9ncmVzcyYmRy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscS5vbkRvd25sb2FkUHJvZ3Jlc3MpLCJmdW5jdGlvbiI9PXR5cGVvZiBxLm9uVXBsb2FkUHJvZ3Jlc3MmJkcudXBsb2FkJiZHLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscS5v''@;'; put 'put ''blVwbG9hZFByb2dyZXNzKSwocS5jYW5jZWxUb2tlbnx8cS5zaWduYWwpJiYob2U9ZnVuY3Rpb24oUyl7RyYmKHRlKCFTfHxTJiZTLnR5cGU/bmV3IFg6UyksRy5hYm9ydCgpLEc9bnVsbCl9LHEuY2FuY2VsVG9rZW4mJnEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9lKSxxLnNpZ25hbCYmKHEu''@;'; put 'put ''c2lnbmFsLmFib3J0ZWQ/b2UoKTpxLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsb2UpKSksc2V8fChzZT1udWxsKTt2YXIgQz1VKEgpO0MmJi0xPT09WyJodHRwIiwiaHR0cHMiLCJmaWxlIl0uaW5kZXhPZihDKT90ZShuZXcgWSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitDKyI6''@;'; put 'put ''IixZLkVSUl9CQURfUkVRVUVTVCxxKSk6Ry5zZW5kKHNlKX0pfX0sMTYwOTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDE4NDkpLEk9UigzMjEpLGs9Uig3MTg1KSxFPWZ1bmN0aW9uIGooVil7dmFyIEI9bmV3IEkoViksWT1LKEkucHJvdG90eXBlLnJlcXVlc3Qs''@;'; put 'put ''Qik7cmV0dXJuIHouZXh0ZW5kKFksSS5wcm90b3R5cGUsQiksei5leHRlbmQoWSxCKSxZLmNyZWF0ZT1mdW5jdGlvbihYKXtyZXR1cm4gaihrKFYsWCkpfSxZfShSKDU1NDYpKTtFLkF4aW9zPUksRS5DYW5jZWxlZEVycm9yPVIoNjQ0KSxFLkNhbmNlbFRva2VuPVIoNDk3MiksRS5pc0NhbmNl''@;'; put 'put ''bD1SKDY1MDIpLEUuVkVSU0lPTj1SKDcyODgpLnZlcnNpb24sRS50b0Zvcm1EYXRhPVIoNzY3NSksRS5BeGlvc0Vycm9yPVIoMjY0OCksRS5DYW5jZWw9RS5DYW5jZWxlZEVycm9yLEUuYWxsPWZ1bmN0aW9uKGope3JldHVybiBQcm9taXNlLmFsbChqKX0sRS5zcHJlYWQ9Uig4NzEzKSxFLmlz''@;'; put 'put ''QXhpb3NFcnJvcj1SKDYyNjgpLE0uZXhwb3J0cz1FLE0uZXhwb3J0cy5kZWZhdWx0PUV9LDQ5NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0NCk7ZnVuY3Rpb24gSyhJKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0''@;'; put 'put ''IGJlIGEgZnVuY3Rpb24uIik7dmFyIGs7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGope2s9an0pO3ZhciBFPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oail7aWYoRS5fbGlzdGVuZXJzKXt2YXIgVixCPUUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKFY9MDtWPEI7''@;'; put 'put ''VisrKUUuX2xpc3RlbmVyc1tWXShqKTtFLl9saXN0ZW5lcnM9bnVsbH19KSx0aGlzLnByb21pc2UudGhlbj1mdW5jdGlvbihqKXt2YXIgVixCPW5ldyBQcm9taXNlKGZ1bmN0aW9uKFkpe0Uuc3Vic2NyaWJlKFkpLFY9WX0pLnRoZW4oaik7cmV0dXJuIEIuY2FuY2VsPWZ1bmN0aW9uKCl7RS51''@;'; put 'put ''bnN1YnNjcmliZShWKX0sQn0sSShmdW5jdGlvbihqKXtFLnJlYXNvbnx8KEUucmVhc29uPW5ldyB6KGopLGsoRS5yZWFzb24pKX0pfUsucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQ9ZnVuY3Rpb24oKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn0sSy5wcm90b3R5cGUuc3Vi''@;'; put 'put ''c2NyaWJlPWZ1bmN0aW9uKEkpe3RoaXMucmVhc29uP0kodGhpcy5yZWFzb24pOnRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChJKTp0aGlzLl9saXN0ZW5lcnM9W0ldfSxLLnByb3RvdHlwZS51bnN1YnNjcmliZT1mdW5jdGlvbihJKXtpZih0aGlzLl9saXN0ZW5lcnMpe3Zh''@;'; put 'put ''ciBrPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEkpOy0xIT09ayYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShrLDEpfX0sSy5zb3VyY2U9ZnVuY3Rpb24oKXt2YXIgSTtyZXR1cm57dG9rZW46bmV3IEsoZnVuY3Rpb24oayl7ST1rfSksY2FuY2VsOkl9fSxNLmV4cG9ydHM9S30sNjQ0OihNLE8s''@;'; put 'put ''Uik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyNjQ4KTtmdW5jdGlvbiBLKEkpe3ouY2FsbCh0aGlzLEk/PyJjYW5jZWxlZCIsei5FUlJfQ0FOQ0VMRUQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Uig0ODY3KS5pbmhlcml0cyhLLHose19fQ0FOQ0VMX186ITB9KSxNLmV4cG9ydHM9S30s''@;'; put 'put ''NjUwMjpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4hKCFPfHwhTy5fX0NBTkNFTF9fKX19LDMyMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDUzMjcpLEk9Uig3ODIpLGs9UigzNTcyKSxFPVIoNzE4NSksaj1SKDQwOTcpLFY9''@;'; put 'put ''Uig0ODc1KSxCPVYudmFsaWRhdG9ycztmdW5jdGlvbiBZKFgpe3RoaXMuZGVmYXVsdHM9WCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSSxyZXNwb25zZTpuZXcgSX19WS5wcm90b3R5cGUucmVxdWVzdD1mdW5jdGlvbihYLFUpeyJzdHJpbmciPT10eXBlb2YgWD8oVT1VfHx7fSku''@;'; put 'put ''dXJsPVg6VT1YfHx7fSxVLm1ldGhvZD0oVT1FKHRoaXMuZGVmYXVsdHMsVSkpLm1ldGhvZD9VLm1ldGhvZC50b0xvd2VyQ2FzZSgpOnRoaXMuZGVmYXVsdHMubWV0aG9kP3RoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk6ImdldCI7dmFyIHE9VS50cmFuc2l0aW9uYWw7dm9pZCAw''@;'; put 'put ''IT09cSYmVi5hc3NlcnRPcHRpb25zKHEse3NpbGVudEpTT05QYXJzaW5nOkIudHJhbnNpdGlvbmFsKEIuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Qi50cmFuc2l0aW9uYWwoQi5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOkIudHJhbnNpdGlvbmFsKEIuYm9vbGVhbil9LCExKTt2''@;'; put 'put ''YXIgZWU9W10sdGU9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGIpeyJmdW5jdGlvbiI9PXR5cGVvZiBiLnJ1bldoZW4mJiExPT09Yi5ydW5XaGVuKFUpfHwodGU9dGUmJmIuc3luY2hyb25vdXMsZWUudW5zaGlmdChiLmZ1bGZpbGxlZCxiLnJlamVjdGVk''@;'; put 'put ''KSl9KTt2YXIgb2Usc2U9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihiKXtzZS5wdXNoKGIuZnVsZmlsbGVkLGIucmVqZWN0ZWQpfSksIXRlKXt2YXIgaGU9W2ssdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBwbHkoaGUsZWUp''@;'; put 'put ''LGhlPWhlLmNvbmNhdChzZSksb2U9UHJvbWlzZS5yZXNvbHZlKFUpO2hlLmxlbmd0aDspb2U9b2UudGhlbihoZS5zaGlmdCgpLGhlLnNoaWZ0KCkpO3JldHVybiBvZX1mb3IodmFyIHVlPVU7ZWUubGVuZ3RoOyl7dmFyIGNlPWVlLnNoaWZ0KCksRz1lZS5zaGlmdCgpO3RyeXt1ZT1jZSh1ZSl9''@;'; put 'put ''Y2F0Y2goYil7RyhiKTticmVha319dHJ5e29lPWsodWUpfWNhdGNoKGIpe3JldHVybiBQcm9taXNlLnJlamVjdChiKX1mb3IoO3NlLmxlbmd0aDspb2U9b2UudGhlbihzZS5zaGlmdCgpLHNlLnNoaWZ0KCkpO3JldHVybiBvZX0sWS5wcm90b3R5cGUuZ2V0VXJpPWZ1bmN0aW9uKFgpe1g9RSh0''@;'; put 'put ''aGlzLmRlZmF1bHRzLFgpO3ZhciBVPWooWC5iYXNlVVJMLFgudXJsKTtyZXR1cm4gSyhVLFgucGFyYW1zLFgucGFyYW1zU2VyaWFsaXplcil9LHouZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oWCl7WS5wcm90b3R5cGVbWF09ZnVuY3Rpb24oVSxx''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEUocXx8e30se21ldGhvZDpYLHVybDpVLGRhdGE6KHF8fHt9KS5kYXRhfSkpfX0pLHouZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKFgpe2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlLHRlLG9lKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZXF1ZXN0KEUob2V8fHt9LHttZXRob2Q6WCxoZWFkZXJzOnE/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmVlLGRhdGE6dGV9KSl9fVkucHJvdG90eXBlW1hdPVUoKSxZLnByb3RvdHlwZVtYKyJGb3JtIl09VSghMCl9KSxNLmV4cG9ydHM9WX0sMjY0''@;'; put 'put ''ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2Nyk7ZnVuY3Rpb24gSyhFLGosVixCLFkpe0Vycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPUUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixqJiYodGhpcy5jb2RlPWopLFYmJih0aGlzLmNvbmZpZz1WKSxCJiYodGhpcy5yZXF1''@;'; put 'put ''ZXN0PUIpLFkmJih0aGlzLnJlc3BvbnNlPVkpfXouaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1l''@;'; put 'put ''OnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1''@;'; put 'put ''cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgST1LLnByb3RvdHlwZSxrPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIs''@;'; put 'put ''IkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCJdLmZvckVhY2goZnVuY3Rpb24oRSl7a1tFXT17dmFsdWU6RX19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLGspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJpc0F4''@;'; put 'put ''aW9zRXJyb3IiLHt2YWx1ZTohMH0pLEsuZnJvbT1mdW5jdGlvbihFLGosVixCLFksWCl7dmFyIFU9T2JqZWN0LmNyZWF0ZShJKTtyZXR1cm4gei50b0ZsYXRPYmplY3QoRSxVLGZ1bmN0aW9uKHEpe3JldHVybiBxIT09RXJyb3IucHJvdG90eXBlfSksSy5jYWxsKFUsRS5tZXNzYWdlLGosVixC''@;'; put 'put ''LFkpLFUubmFtZT1FLm5hbWUsWCYmT2JqZWN0LmFzc2lnbihVLFgpLFV9LE0uZXhwb3J0cz1LfSw3ODI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQ4NjcpO2Z1bmN0aW9uIEsoKXt0aGlzLmhhbmRsZXJzPVtdfUsucHJvdG90eXBlLnVzZT1mdW5jdGlvbihJLGssRSl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkkscmVqZWN0ZWQ6ayxzeW5jaHJvbm91czohIUUmJkUuc3luY2hyb25vdXMscnVuV2hlbjpFP0UucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sSy5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oSSl7dGhpcy5oYW5k''@;'; put 'put ''bGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9LEsucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oSSl7ei5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oayl7bnVsbCE9PWsmJkkoayl9KX0sTS5leHBvcnRzPUt9LDQwOTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg''@;'; put 'put ''ej1SKDE3OTMpLEs9Uig3MzAzKTtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSSYmIXooayk/SyhJLGspOmt9fSwzNTcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVIoODUyNyksST1SKDY1MDIpLGs9Uig1NTQ2KSxFPVIoNjQ0KTtmdW5jdGlvbiBqKFYp''@;'; put 'put ''e2lmKFYuY2FuY2VsVG9rZW4mJlYuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFYuc2lnbmFsJiZWLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBFfU0uZXhwb3J0cz1mdW5jdGlvbihWKXtyZXR1cm4gaihWKSxWLmhlYWRlcnM9Vi5oZWFkZXJzfHx7fSxWLmRhdGE9Sy5jYWxsKFYs''@;'; put 'put ''Vi5kYXRhLFYuaGVhZGVycyxWLnRyYW5zZm9ybVJlcXVlc3QpLFYuaGVhZGVycz16Lm1lcmdlKFYuaGVhZGVycy5jb21tb258fHt9LFYuaGVhZGVyc1tWLm1ldGhvZF18fHt9LFYuaGVhZGVycyksei5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIs''@;'; put 'put ''ImNvbW1vbiJdLGZ1bmN0aW9uKEIpe2RlbGV0ZSBWLmhlYWRlcnNbQl19KSwoVi5hZGFwdGVyfHxrLmFkYXB0ZXIpKFYpLnRoZW4oZnVuY3Rpb24oQil7cmV0dXJuIGooViksQi5kYXRhPUsuY2FsbChWLEIuZGF0YSxCLmhlYWRlcnMsVi50cmFuc2Zvcm1SZXNwb25zZSksQn0sZnVuY3Rpb24o''@;'; put 'put ''Qil7cmV0dXJuIEkoQil8fChqKFYpLEImJkIucmVzcG9uc2UmJihCLnJlc3BvbnNlLmRhdGE9Sy5jYWxsKFYsQi5yZXNwb25zZS5kYXRhLEIucmVzcG9uc2UuaGVhZGVycyxWLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KEIpfSl9fSw3MTg1OihNLE8sUik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJKXtJPUl8fHt9O3ZhciBrPXt9O2Z1bmN0aW9uIEUoVSxxKXtyZXR1cm4gei5pc1BsYWluT2JqZWN0KFUpJiZ6LmlzUGxhaW5PYmplY3QocSk/ei5tZXJnZShVLHEpOnouaXNQbGFpbk9iamVjdChxKT96Lm1lcmdlKHt9''@;'; put 'put ''LHEpOnouaXNBcnJheShxKT9xLnNsaWNlKCk6cX1mdW5jdGlvbiBqKFUpe3JldHVybiB6LmlzVW5kZWZpbmVkKElbVV0pP3ouaXNVbmRlZmluZWQoS1tVXSk/dm9pZCAwOkUodm9pZCAwLEtbVV0pOkUoS1tVXSxJW1VdKX1mdW5jdGlvbiBWKFUpe2lmKCF6LmlzVW5kZWZpbmVkKElbVV0pKXJl''@;'; put 'put ''dHVybiBFKHZvaWQgMCxJW1VdKX1mdW5jdGlvbiBCKFUpe3JldHVybiB6LmlzVW5kZWZpbmVkKElbVV0pP3ouaXNVbmRlZmluZWQoS1tVXSk/dm9pZCAwOkUodm9pZCAwLEtbVV0pOkUodm9pZCAwLElbVV0pfWZ1bmN0aW9uIFkoVSl7cmV0dXJuIFUgaW4gST9FKEtbVV0sSVtVXSk6VSBpbiBL''@;'; put 'put ''P0Uodm9pZCAwLEtbVV0pOnZvaWQgMH12YXIgWD17dXJsOlYsbWV0aG9kOlYsZGF0YTpWLGJhc2VVUkw6Qix0cmFuc2Zvcm1SZXF1ZXN0OkIsdHJhbnNmb3JtUmVzcG9uc2U6QixwYXJhbXNTZXJpYWxpemVyOkIsdGltZW91dDpCLHRpbWVvdXRNZXNzYWdlOkIsd2l0aENyZWRlbnRpYWxzOkIs''@;'; put 'put ''YWRhcHRlcjpCLHJlc3BvbnNlVHlwZTpCLHhzcmZDb29raWVOYW1lOkIseHNyZkhlYWRlck5hbWU6QixvblVwbG9hZFByb2dyZXNzOkIsb25Eb3dubG9hZFByb2dyZXNzOkIsZGVjb21wcmVzczpCLG1heENvbnRlbnRMZW5ndGg6QixtYXhCb2R5TGVuZ3RoOkIsYmVmb3JlUmVkaXJlY3Q6Qix0''@;'; put 'put ''cmFuc3BvcnQ6QixodHRwQWdlbnQ6QixodHRwc0FnZW50OkIsY2FuY2VsVG9rZW46Qixzb2NrZXRQYXRoOkIscmVzcG9uc2VFbmNvZGluZzpCLHZhbGlkYXRlU3RhdHVzOll9O3JldHVybiB6LmZvckVhY2goT2JqZWN0LmtleXMoSykuY29uY2F0KE9iamVjdC5rZXlzKEkpKSxmdW5jdGlvbihV''@;'; put 'put ''KXt2YXIgcT1YW1VdfHxqLGVlPXEoVSk7ei5pc1VuZGVmaW5lZChlZSkmJnEhPT1ZfHwoa1tVXT1lZSl9KSxrfX0sNjAyNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjY0OCk7TS5leHBvcnRzPWZ1bmN0aW9uKEssSSxrKXt2YXIgRT1rLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztr''@;'; put 'put ''LnN0YXR1cyYmRSYmIUUoay5zdGF0dXMpP0kobmV3IHooIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitrLnN0YXR1cyxbei5FUlJfQkFEX1JFUVVFU1Qsei5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKGsuc3RhdHVzLzEwMCktNF0say5jb25maWcsay5yZXF1ZXN0LGsp''@;'; put 'put ''KTpLKGspfX0sODUyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDg2NyksSz1SKDU1NDYpO00uZXhwb3J0cz1mdW5jdGlvbihJLGssRSl7dmFyIGo9dGhpc3x8SztyZXR1cm4gei5mb3JFYWNoKEUsZnVuY3Rpb24oVil7ST1WLmNhbGwoaixJLGspfSksSX19LDU1NDY6KE0sTyxS''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9Uig0ODY3KSxJPVIoNjAxNiksaz1SKDI2NDgpLEU9Uig3ODc0KSxqPVIoNzY3NSksVj17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIEIoVSxxKXshSy5pc1VuZGVmaW5l''@;'; put 'put ''ZChVKSYmSy5pc1VuZGVmaW5lZChVWyJDb250ZW50LVR5cGUiXSkmJihVWyJDb250ZW50LVR5cGUiXT1xKX12YXIgWSxYPXt0cmFuc2l0aW9uYWw6RSxhZGFwdGVyOigodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Inx8dm9pZCAwIT09eiYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKHopKSYmKFk9Uig1NDQ4KSksWSksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oVSxxKXtpZihJKHEsIkFjY2VwdCIpLEkocSwiQ29udGVudC1UeXBlIiksSy5pc0Zvcm1EYXRhKFUpfHxLLmlzQXJyYXlCdWZmZXIoVSl8fEsuaXNCdWZmZXIoVSl8fEsu''@;'; put 'put ''aXNTdHJlYW0oVSl8fEsuaXNGaWxlKFUpfHxLLmlzQmxvYihVKSlyZXR1cm4gVTtpZihLLmlzQXJyYXlCdWZmZXJWaWV3KFUpKXJldHVybiBVLmJ1ZmZlcjtpZihLLmlzVVJMU2VhcmNoUGFyYW1zKFUpKXJldHVybiBCKHEsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFy''@;'; put 'put ''c2V0PXV0Zi04IiksVS50b1N0cmluZygpO3ZhciBlZSx0ZT1LLmlzT2JqZWN0KFUpLG9lPXEmJnFbIkNvbnRlbnQtVHlwZSJdO2lmKChlZT1LLmlzRmlsZUxpc3QoVSkpfHx0ZSYmIm11bHRpcGFydC9mb3JtLWRhdGEiPT09b2Upe3ZhciBzZT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7''@;'; put 'put ''cmV0dXJuIGooZWU/eyJmaWxlc1tdIjpVfTpVLHNlJiZuZXcgc2UpfXJldHVybiB0ZXx8ImFwcGxpY2F0aW9uL2pzb24iPT09b2U/KEIocSwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGhlLHVlLGNlKXtpZihLLmlzU3RyaW5nKGhlKSl0cnl7cmV0dXJuKDAsSlNPTi5wYXJzZSkoaGUp''@;'; put 'put ''LEsudHJpbShoZSl9Y2F0Y2goRyl7aWYoIlN5bnRheEVycm9yIiE9PUcubmFtZSl0aHJvdyBHfXJldHVybigwLEpTT04uc3RyaW5naWZ5KShoZSl9KFUpKTpVfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKFUpe3ZhciBxPXRoaXMudHJhbnNpdGlvbmFsfHxYLnRyYW5zaXRpb25hbCxv''@;'; put 'put ''ZT0hKHEmJnEuc2lsZW50SlNPTlBhcnNpbmcpJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihvZXx8cSYmcS5mb3JjZWRKU09OUGFyc2luZyYmSy5pc1N0cmluZyhVKSYmVS5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKFUpfWNhdGNoKHNlKXtpZihvZSl0aHJvdyJTeW50YXhF''@;'; put 'put ''cnJvciI9PT1zZS5uYW1lP2suZnJvbShzZSxrLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnNlfXJldHVybiBVfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVu''@;'; put 'put ''Z3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpSKDE2MjMpfSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihVKXtyZXR1cm4gVT49MjAwJiZVPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07Sy5mb3JF''@;'; put 'put ''YWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKFUpe1guaGVhZGVyc1tVXT17fX0pLEsuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKFUpe1guaGVhZGVyc1tVXT1LLm1lcmdlKFYpfSksTS5leHBvcnRzPVh9LDc4NzQ6TT0+eyJ1c2Ugc3RyaWN0IjtN''@;'; put 'put ''LmV4cG9ydHM9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9fSw3Mjg4Ok09PntNLmV4cG9ydHM9e3ZlcnNpb246IjAuMjcuMiJ9fSwxODQ5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8sUil7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB6PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxLPTA7Szx6Lmxlbmd0aDtLKyspeltLXT1hcmd1bWVudHNbS107cmV0dXJuIE8uYXBwbHkoUix6KX19fSw1MzI3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtmdW5jdGlvbiBL''@;'; put 'put ''KEkpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoSSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfU0uZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihJLGssRSl7aWYoIWspcmV0dXJuIEk7dmFyIGo7aWYoRSlqPUUoayk7ZWxzZSBpZih6LmlzVVJMU2VhcmNoUGFyYW1zKGspKWo9ay50b1N0cmluZygpO2Vsc2V7dmFyIFY9W107ei5mb3JFYWNoKGssZnVuY3Rpb24oWSxYKXtudWxsIT1ZJiYoei5pc0FycmF5KFkpP1grPSJb''@;'; put 'put ''XSI6WT1bWV0sei5mb3JFYWNoKFksZnVuY3Rpb24oVSl7ei5pc0RhdGUoVSk/VT1VLnRvSVNPU3RyaW5nKCk6ei5pc09iamVjdChVKSYmKFU9SlNPTi5zdHJpbmdpZnkoVSkpLFYucHVzaChLKFgpKyI9IitLKFUpKX0pKX0pLGo9Vi5qb2luKCImIil9aWYoail7dmFyIEI9SS5pbmRleE9mKCIj''@;'; put 'put ''Iik7LTEhPT1CJiYoST1JLnNsaWNlKDAsQikpLEkrPSgtMT09PUkuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2p9cmV0dXJuIEl9fSw3MzAzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8sUil7cmV0dXJuIFI/Ty5yZXBsYWNlKC9cLyskLywiIikrIi8iK1IucmVwbGFjZSgv''@;'; put 'put ''XlwvKy8sIiIpOk99fSw0MzcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ei5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihLLEksayxFLGosVil7dmFyIEI9W107Qi5wdXNoKEsrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJKSks''@;'; put 'put ''ei5pc051bWJlcihrKSYmQi5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoaykudG9HTVRTdHJpbmcoKSksei5pc1N0cmluZyhFKSYmQi5wdXNoKCJwYXRoPSIrRSksei5pc1N0cmluZyhqKSYmQi5wdXNoKCJkb21haW49IitqKSwhMD09PVYmJkIucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29v''@;'; put 'put ''a2llPUIuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihLKXt2YXIgST1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrSysiKT0oW147XSopIikpO3JldHVybiBJP2RlY29kZVVSSUNvbXBvbmVudChJWzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oSyl7dGhp''@;'; put 'put ''cy53cml0ZShLLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSwxNzkzOk09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybi9eKFthLXpdW2Et''@;'; put 'put ''elxkK1wtLl0qOik/XC9cLy9pLnRlc3QoTyl9fSw2MjY4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNPYmplY3QoSykmJiEwPT09Sy5pc0F4aW9zRXJyb3J9fSw3OTg1OihNLE8sUik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9Uig0ODY3KTtNLmV4cG9ydHM9ei5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIEssST0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIEUoail7dmFyIFY9ajty''@;'; put 'put ''ZXR1cm4gSSYmKGsuc2V0QXR0cmlidXRlKCJocmVmIixWKSxWPWsuaHJlZiksay5zZXRBdHRyaWJ1dGUoImhyZWYiLFYpLHtocmVmOmsuaHJlZixwcm90b2NvbDprLnByb3RvY29sP2sucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OmsuaG9zdCxzZWFyY2g6ay5zZWFyY2g/ay5z''@;'; put 'put ''ZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDprLmhhc2g/ay5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6ay5ob3N0bmFtZSxwb3J0OmsucG9ydCxwYXRobmFtZToiLyI9PT1rLnBhdGhuYW1lLmNoYXJBdCgwKT9rLnBhdGhuYW1lOiIvIitrLnBhdGhuYW1lfX1yZXR1''@;'; put 'put ''cm4gSz1FKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihqKXt2YXIgVj16LmlzU3RyaW5nKGopP0Uoaik6ajtyZXR1cm4gVi5wcm90b2NvbD09PUsucHJvdG9jb2wmJlYuaG9zdD09PUsuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LDYwMTY6KE0sTyxSKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgej1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihLLEkpe3ouZm9yRWFjaChLLGZ1bmN0aW9uKGssRSl7RSE9PUkmJkUudG9VcHBlckNhc2UoKT09PUkudG9VcHBlckNhc2UoKSYmKEtbSV09ayxkZWxldGUgS1tFXSl9KX19LDE2MjM6TT0+e00uZXhwb3J0cz1udWxsfSw0MTA5''@;'; put 'put ''OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0ODY3KSxLPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5j''@;'; put 'put ''ZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il07TS5leHBvcnRzPWZ1bmN0aW9uKEkpe3ZhciBrLEUsaixWPXt9O3JldHVybiBJJiZ6LmZvckVhY2goSS5z''@;'; put 'put ''cGxpdCgiXG4iKSxmdW5jdGlvbihCKXtpZihqPUIuaW5kZXhPZigiOiIpLGs9ei50cmltKEIuc3Vic3RyKDAsaikpLnRvTG93ZXJDYXNlKCksRT16LnRyaW0oQi5zdWJzdHIoaisxKSksayl7aWYoVltrXSYmSy5pbmRleE9mKGspPj0wKXJldHVybjtWW2tdPSJzZXQtY29va2llIj09PWs/KFZb''@;'; put 'put ''a10/VltrXTpbXSkuY29uY2F0KFtFXSk6VltrXT9WW2tdKyIsICIrRTpFfX0pLFZ9fSwyMDU6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIFI9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoTyk7cmV0dXJuIFImJlJbMV18fCIifX0sODcxMzpNPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gZnVuY3Rpb24oUil7cmV0dXJuIE8uYXBwbHkobnVsbCxSKX19fSw3Njc1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDQ4NjcpO00uZXhwb3J0cz1mdW5jdGlvbihJLGspe2s9''@;'; put 'put ''a3x8bmV3IEZvcm1EYXRhO3ZhciBFPVtdO2Z1bmN0aW9uIGooVil7cmV0dXJuIG51bGw9PT1WPyIiOksuaXNEYXRlKFYpP1YudG9JU09TdHJpbmcoKTpLLmlzQXJyYXlCdWZmZXIoVil8fEsuaXNUeXBlZEFycmF5KFYpPyJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFtWXSk6ei5m''@;'; put 'put ''cm9tKFYpOlZ9cmV0dXJuIGZ1bmN0aW9uIFYoQixZKXtpZihLLmlzUGxhaW5PYmplY3QoQil8fEsuaXNBcnJheShCKSl7aWYoLTEhPT1FLmluZGV4T2YoQikpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK1kpO0UucHVzaChCKSxLLmZvckVhY2goQixmdW5j''@;'; put 'put ''dGlvbihYLFUpe2lmKCFLLmlzVW5kZWZpbmVkKFgpKXt2YXIgcSxlZT1ZP1krIi4iK1U6VTtpZihYJiYhWSYmIm9iamVjdCI9PXR5cGVvZiBYKWlmKEsuZW5kc1dpdGgoVSwie30iKSlYPUpTT04uc3RyaW5naWZ5KFgpO2Vsc2UgaWYoSy5lbmRzV2l0aChVLCJbXSIpJiYocT1LLnRvQXJyYXko''@;'; put 'put ''WCkpKXJldHVybiB2b2lkIHEuZm9yRWFjaChmdW5jdGlvbih0ZSl7IUsuaXNVbmRlZmluZWQodGUpJiZrLmFwcGVuZChlZSxqKHRlKSl9KTtWKFgsZWUpfX0pLEUucG9wKCl9ZWxzZSBrLmFwcGVuZChZLGooQikpfShJKSxrfX0sNDg3NTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIo''@;'; put 'put ''NTEwOCksSz1SKDcyODgpLnZlcnNpb24sST1SKDI2NDgpLGs9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKGosVil7a1tqXT1mdW5jdGlvbihCKXtyZXR1cm4gdHlwZW9mIEI9PT1qfHwiYSIrKFY8''@;'; put 'put ''MT8ibiAiOiIgIikran19KTt2YXIgRT17fTtrLnRyYW5zaXRpb25hbD1mdW5jdGlvbihqLFYsQil7ZnVuY3Rpb24gWShYLFUpe3JldHVybiJbQXhpb3MgdiIrSysiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK1grIiciK1UrKEI/Ii4gIitCOiIiKX1yZXR1cm4gZnVuY3Rpb24oWCxVLHEpe2lm''@;'; put 'put ''KCExPT09ail0aHJvdyBuZXcgSShZKFUsIiBoYXMgYmVlbiByZW1vdmVkIisoVj8iIGluICIrVjoiIikpLEkuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBWJiYhRVtVXSYmKEVbVV09ITAsei53YXJuKFkoVSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrVisiIGFuZCB3aWxsIGJlIHJl''@;'; put 'put ''bW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhanx8aihYLFUscSl9fSxNLmV4cG9ydHM9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oaixWLEIpe2lmKCJvYmplY3QiIT10eXBlb2Ygail0aHJvdyBuZXcgSSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsSS5FUlJfQkFEX09QVElPTl9W''@;'; put 'put ''QUxVRSk7Zm9yKHZhciBZPU9iamVjdC5rZXlzKGopLFg9WS5sZW5ndGg7WC0tID4wOyl7dmFyIFU9WVtYXSxxPVZbVV07aWYocSl7dmFyIGVlPWpbVV0sdGU9dm9pZCAwPT09ZWV8fHEoZWUsVSxqKTtpZighMCE9PXRlKXRocm93IG5ldyBJKCJvcHRpb24gIitVKyIgbXVzdCBiZSAiK3RlLEku''@;'; put 'put ''RVJSX0JBRF9PUFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1CKXRocm93IG5ldyBJKCJVbmtub3duIG9wdGlvbiAiK1UsSS5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOmt9fSw0ODY3OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDE4NDkpLEk9T2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZyxrPSh6PU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oRyl7dmFyIGI9SS5jYWxsKEcpO3JldHVybiB6W2JdfHwoeltiXT1iLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSk7ZnVuY3Rpb24gRShHKXtyZXR1cm4gRz1HLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oYil7''@;'; put 'put ''cmV0dXJuIGsoYik9PT1HfX1mdW5jdGlvbiBqKEcpe3JldHVybiBBcnJheS5pc0FycmF5KEcpfWZ1bmN0aW9uIFYoRyl7cmV0dXJuIHZvaWQgMD09PUd9dmFyIEI9RSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBZKEcpe3JldHVybiBudWxsIT09RyYmIm9iamVjdCI9PXR5cGVvZiBHfWZ1bmN0''@;'; put 'put ''aW9uIFgoRyl7aWYoIm9iamVjdCIhPT1rKEcpKXJldHVybiExO3ZhciBiPU9iamVjdC5nZXRQcm90b3R5cGVPZihHKTtyZXR1cm4gbnVsbD09PWJ8fGI9PT1PYmplY3QucHJvdG90eXBlfXZhciBVPUUoIkRhdGUiKSxxPUUoIkZpbGUiKSxlZT1FKCJCbG9iIiksdGU9RSgiRmlsZUxpc3QiKTtm''@;'; put 'put ''dW5jdGlvbiBvZShHKXtyZXR1cm4iW29iamVjdCBGdW5jdGlvbl0iPT09SS5jYWxsKEcpfXZhciBzZT1FKCJVUkxTZWFyY2hQYXJhbXMiKTtmdW5jdGlvbiBoZShHLGIpe2lmKG51bGwhPUcpaWYoIm9iamVjdCIhPXR5cGVvZiBHJiYoRz1bR10pLGooRykpZm9yKHZhciBEPTAsSD1HLmxlbmd0''@;'; put 'put ''aDtEPEg7RCsrKWIuY2FsbChudWxsLEdbRF0sRCxHKTtlbHNlIGZvcih2YXIgTiBpbiBHKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLE4pJiZiLmNhbGwobnVsbCxHW05dLE4sRyl9dmFyIHVlLGNlPSh1ZT10eXBlb2YgVWludDhBcnJheTwidSImJk9iamVjdC5nZXRQ''@;'; put 'put ''cm90b3R5cGVPZihVaW50OEFycmF5KSxmdW5jdGlvbihHKXtyZXR1cm4gdWUmJkcgaW5zdGFuY2VvZiB1ZX0pO00uZXhwb3J0cz17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6Qixpc0J1ZmZlcjpmdW5jdGlvbihHKXtyZXR1cm4gbnVsbCE9PUcmJiFWKEcpJiZudWxsIT09Ry5jb25zdHJ1Y3Rv''@;'; put 'put ''ciYmIVYoRy5jb25zdHJ1Y3RvcikmJiJmdW5jdGlvbiI9PXR5cGVvZiBHLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZHLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEcpfSxpc0Zvcm1EYXRhOmZ1bmN0aW9uKEcpe3ZhciBiPSJbb2JqZWN0IEZvcm1EYXRhXSI7cmV0dXJuIEcmJigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgRm9ybURhdGEmJkcgaW5zdGFuY2VvZiBGb3JtRGF0YXx8SS5jYWxsKEcpPT09Ynx8b2UoRy50b1N0cmluZykmJkcudG9TdHJpbmcoKT09PWIpfSxpc0FycmF5QnVmZmVyVmlldzpmdW5jdGlvbihHKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNW''@;'; put 'put ''aWV3P0FycmF5QnVmZmVyLmlzVmlldyhHKTpHJiZHLmJ1ZmZlciYmQihHLmJ1ZmZlcil9LGlzU3RyaW5nOmZ1bmN0aW9uKEcpe3JldHVybiJzdHJpbmciPT10eXBlb2YgR30saXNOdW1iZXI6ZnVuY3Rpb24oRyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBHfSxpc09iamVjdDpZLGlzUGxhaW5P''@;'; put 'put ''YmplY3Q6WCxpc1VuZGVmaW5lZDpWLGlzRGF0ZTpVLGlzRmlsZTpxLGlzQmxvYjplZSxpc0Z1bmN0aW9uOm9lLGlzU3RyZWFtOmZ1bmN0aW9uKEcpe3JldHVybiBZKEcpJiZvZShHLnBpcGUpfSxpc1VSTFNlYXJjaFBhcmFtczpzZSxpc1N0YW5kYXJkQnJvd3NlckVudjpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybih0eXBlb2YgbmF2aWdhdG9yPiJ1Inx8IlJlYWN0TmF0aXZlIiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTmF0aXZlU2NyaXB0IiE9PW5hdmlnYXRvci5wcm9kdWN0JiYiTlMiIT09bmF2aWdhdG9yLnByb2R1Y3QpJiZ0eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1In0s''@;'; put 'put ''Zm9yRWFjaDpoZSxtZXJnZTpmdW5jdGlvbiBHKCl7dmFyIGI9e307ZnVuY3Rpb24gRChnLEMpe2JbQ109WChiW0NdKSYmWChnKT9HKGJbQ10sZyk6WChnKT9HKHt9LGcpOmooZyk/Zy5zbGljZSgpOmd9Zm9yKHZhciBIPTAsTj1hcmd1bWVudHMubGVuZ3RoO0g8TjtIKyspaGUoYXJndW1lbnRz''@;'; put 'put ''W0hdLEQpO3JldHVybiBifSxleHRlbmQ6ZnVuY3Rpb24oRyxiLEQpe3JldHVybiBoZShiLGZ1bmN0aW9uKEgsTil7R1tOXT1EJiYiZnVuY3Rpb24iPT10eXBlb2YgSD9LKEgsRCk6SH0pLEd9LHRyaW06ZnVuY3Rpb24oRyl7cmV0dXJuIEcudHJpbT9HLnRyaW0oKTpHLnJlcGxhY2UoL15ccyt8''@;'; put 'put ''XHMrJC9nLCIiKX0sc3RyaXBCT006ZnVuY3Rpb24oRyl7cmV0dXJuIDY1Mjc5PT09Ry5jaGFyQ29kZUF0KDApJiYoRz1HLnNsaWNlKDEpKSxHfSxpbmhlcml0czpmdW5jdGlvbihHLGIsRCxIKXtHLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGIucHJvdG90eXBlLEgpLEcucHJvdG90eXBlLmNv''@;'; put 'put ''bnN0cnVjdG9yPUcsRCYmT2JqZWN0LmFzc2lnbihHLnByb3RvdHlwZSxEKX0sdG9GbGF0T2JqZWN0OmZ1bmN0aW9uKEcsYixEKXt2YXIgSCxOLGcsQz17fTtiPWJ8fHt9O2Rve2ZvcihOPShIPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEcpKS5sZW5ndGg7Ti0tID4wOylDW2c9SFtOXV18''@;'; put 'put ''fChiW2ddPUdbZ10sQ1tnXT0hMCk7Rz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRyl9d2hpbGUoRyYmKCFEfHxEKEcsYikpJiZHIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGJ9LGtpbmRPZjprLGtpbmRPZlRlc3Q6RSxlbmRzV2l0aDpmdW5jdGlvbihHLGIsRCl7Rz1TdHJpbmcoRyksKHZv''@;'; put 'put ''aWQgMD09PUR8fEQ+Ry5sZW5ndGgpJiYoRD1HLmxlbmd0aCk7dmFyIEg9Ry5pbmRleE9mKGIsRC09Yi5sZW5ndGgpO3JldHVybi0xIT09SCYmSD09PUR9LHRvQXJyYXk6ZnVuY3Rpb24oRyl7aWYoIUcpcmV0dXJuIG51bGw7dmFyIGI9Ry5sZW5ndGg7aWYoVihiKSlyZXR1cm4gbnVsbDtmb3Io''@;'; put 'put ''dmFyIEQ9bmV3IEFycmF5KGIpO2ItLSA+MDspRFtiXT1HW2JdO3JldHVybiBEfSxpc1R5cGVkQXJyYXk6Y2UsaXNGaWxlTGlzdDp0ZX19LDU2MjM6TT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBPKEssSSxrKXtLIGluc3RhbmNlb2YgUmVnRXhwJiYoSz1SKEssaykpLEkgaW5zdGFuY2VvZiBS''@;'; put 'put ''ZWdFeHAmJihJPVIoSSxrKSk7dmFyIEU9eihLLEksayk7cmV0dXJuIEUmJntzdGFydDpFWzBdLGVuZDpFWzFdLHByZTprLnNsaWNlKDAsRVswXSksYm9keTprLnNsaWNlKEVbMF0rSy5sZW5ndGgsRVsxXSkscG9zdDprLnNsaWNlKEVbMV0rSS5sZW5ndGgpfX1mdW5jdGlvbiBSKEssSSl7dmFy''@;'; put 'put ''IGs9SS5tYXRjaChLKTtyZXR1cm4gaz9rWzBdOm51bGx9ZnVuY3Rpb24geihLLEksayl7dmFyIEUsaixWLEIsWSxYPWsuaW5kZXhPZihLKSxVPWsuaW5kZXhPZihJLFgrMSkscT1YO2lmKFg+PTAmJlU+MCl7aWYoSz09PUkpcmV0dXJuW1gsVV07Zm9yKEU9W10sVj1rLmxlbmd0aDtxPj0wJiYh''@;'; put 'put ''WTspcT09WD8oRS5wdXNoKHEpLFg9ay5pbmRleE9mKEsscSsxKSk6MT09RS5sZW5ndGg/WT1bRS5wb3AoKSxVXTooKGo9RS5wb3AoKSk8ViYmKFY9aixCPVUpLFU9ay5pbmRleE9mKEkscSsxKSkscT1YPFUmJlg+PTA/WDpVO0UubGVuZ3RoJiYoWT1bVixCXSl9cmV0dXJuIFl9TS5leHBvcnRz''@;'; put 'put ''PU8sTy5yYW5nZT16fSw5NzQyOihNLE8pPT57InVzZSBzdHJpY3QiO08uYnl0ZUxlbmd0aD1mdW5jdGlvbihCKXt2YXIgWT1qKEIpLFU9WVsxXTtyZXR1cm4gMyooWVswXStVKS80LVV9LE8udG9CeXRlQXJyYXk9ZnVuY3Rpb24oQil7dmFyIFksWCxjZSxVPWooQikscT1VWzBdLGVlPVVbMV0s''@;'; put 'put ''dGU9bmV3IEsoMyoocSsoY2U9ZWUpKS80LWNlKSxvZT0wLHNlPWVlPjA/cS00OnE7Zm9yKFg9MDtYPHNlO1grPTQpWT16W0IuY2hhckNvZGVBdChYKV08PDE4fHpbQi5jaGFyQ29kZUF0KFgrMSldPDwxMnx6W0IuY2hhckNvZGVBdChYKzIpXTw8Nnx6W0IuY2hhckNvZGVBdChYKzMpXSx0ZVtv''@;'; put 'put ''ZSsrXT1ZPj4xNiYyNTUsdGVbb2UrK109WT4+OCYyNTUsdGVbb2UrK109MjU1Jlk7cmV0dXJuIDI9PT1lZSYmKFk9eltCLmNoYXJDb2RlQXQoWCldPDwyfHpbQi5jaGFyQ29kZUF0KFgrMSldPj40LHRlW29lKytdPTI1NSZZKSwxPT09ZWUmJihZPXpbQi5jaGFyQ29kZUF0KFgpXTw8MTB8eltC''@;'; put 'put ''LmNoYXJDb2RlQXQoWCsxKV08PDR8eltCLmNoYXJDb2RlQXQoWCsyKV0+PjIsdGVbb2UrK109WT4+OCYyNTUsdGVbb2UrK109MjU1JlkpLHRlfSxPLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24oQil7Zm9yKHZhciBZLFg9Qi5sZW5ndGgsVT1YJTMscT1bXSx0ZT0wLG9lPVgtVTt0ZTxvZTt0ZSs9''@;'; put 'put ''MTYzODMpcS5wdXNoKFYoQix0ZSx0ZSsxNjM4Mz5vZT9vZTp0ZSsxNjM4MykpO3JldHVybiAxPT09VT9xLnB1c2goUlsoWT1CW1gtMV0pPj4yXStSW1k8PDQmNjNdKyI9PSIpOjI9PT1VJiZxLnB1c2goUlsoWT0oQltYLTJdPDw4KStCW1gtMV0pPj4xMF0rUltZPj40JjYzXStSW1k8PDImNjNd''@;'; put 'put ''KyI9IikscS5qb2luKCIiKX07Zm9yKHZhciBSPVtdLHo9W10sSz10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxJPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixrPTA7azw2NDsrK2spUltrXT1J''@;'; put 'put ''W2tdLHpbSS5jaGFyQ29kZUF0KGspXT1rO2Z1bmN0aW9uIGooQil7dmFyIFk9Qi5sZW5ndGg7aWYoWSU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFg9Qi5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1YJiYo''@;'; put 'put ''WD1ZKSxbWCxYPT09WT8wOjQtWCU0XX1mdW5jdGlvbiBWKEIsWSxYKXtmb3IodmFyIHEsZWU9W10sdGU9WTt0ZTxYO3RlKz0zKWVlLnB1c2goUlsocT0oQlt0ZV08PDE2JjE2NzExNjgwKSsoQlt0ZSsxXTw8OCY2NTI4MCkrKDI1NSZCW3RlKzJdKSk+PjE4JjYzXStSW3E+PjEyJjYzXStSW3E+''@;'; put 'put ''PjYmNjNdK1JbNjMmcV0pO3JldHVybiBlZS5qb2luKCIiKX16WyItIi5jaGFyQ29kZUF0KDApXT02Mix6WyJfIi5jaGFyQ29kZUF0KDApXT02M30sMzU1MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkodixwKXtpZighdil0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKHYscCl7di5zdXBlcl89cDt2YXIgdz1mdW5jdGlvbigpe307dy5wcm90b3R5cGU9cC5wcm90b3R5cGUsdi5wcm90b3R5cGU9bmV3IHcsdi5wcm90b3R5cGUuY29uc3RydWN0b3I9dn1mdW5jdGlvbiBFKHYscCx3KXtpZihF''@;'; put 'put ''LmlzQk4odikpcmV0dXJuIHY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXYmJigibGUiIT09cCYmImJlIiE9PXB8fCh3PXAscD0xMCksdGhpcy5faW5pdCh2fHwwLHB8fDEwLHd8fCJiZSIpKX12YXIgajsib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig2NjAxKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYodixwKXt2YXIgdz12LmNoYXJD''@;'; put 'put ''b2RlQXQocCk7cmV0dXJuIHc+PTQ4JiZ3PD01Nz93LTQ4Onc+PTY1JiZ3PD03MD93LTU1Onc+PTk3JiZ3PD0xMDI/dy04Nzp2b2lkIEkoITEsIkludmFsaWQgY2hhcmFjdGVyIGluICIrdil9ZnVuY3Rpb24gQih2LHAsdyl7dmFyIEo9Vih2LHcpO3JldHVybiB3LTE+PXAmJihKfD1WKHYsdy0x''@;'; put 'put ''KTw8NCksSn1mdW5jdGlvbiBZKHYscCx3LEope2Zvcih2YXIgbmU9MCxkZT0wLGZlPU1hdGgubWluKHYubGVuZ3RoLHcpLHhlPXA7eGU8ZmU7eGUrKyl7dmFyIExlPXYuY2hhckNvZGVBdCh4ZSktNDg7bmUqPUosZGU9TGU+PTQ5P0xlLTQ5KzEwOkxlPj0xNz9MZS0xNysxMDpMZSxJKExlPj0w''@;'; put 'put ''JiZkZTxKLCJJbnZhbGlkIGNoYXJhY3RlciIpLG5lKz1kZX1yZXR1cm4gbmV9ZnVuY3Rpb24gWCh2LHApe3Yud29yZHM9cC53b3Jkcyx2Lmxlbmd0aD1wLmxlbmd0aCx2Lm5lZ2F0aXZlPXAubmVnYXRpdmUsdi5yZWQ9cC5yZWR9aWYoRS5pc0JOPWZ1bmN0aW9uKHYpe3JldHVybiB2IGluc3Rh''@;'; put 'put ''bmNlb2YgRXx8bnVsbCE9PXYmJiJvYmplY3QiPT10eXBlb2YgdiYmdi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PUUud29yZFNpemUmJkFycmF5LmlzQXJyYXkodi53b3Jkcyl9LEUubWF4PWZ1bmN0aW9uKHYscCl7cmV0dXJuIHYuY21wKHApPjA/djpwfSxFLm1pbj1mdW5jdGlvbih2LHApe3Jl''@;'; put 'put ''dHVybiB2LmNtcChwKTwwP3Y6cH0sRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odixwLHcpe2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdGhpcy5faW5pdE51bWJlcih2LHAsdyk7aWYoIm9iamVjdCI9PXR5cGVvZiB2KXJldHVybiB0aGlzLl9pbml0QXJyYXkodixwLHcpOyJoZXgi''@;'; put 'put ''PT09cCYmKHA9MTYpLEkocD09PSgwfHApJiZwPj0yJiZwPD0zNik7dmFyIEo9MDsiLSI9PT0odj12LnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEorKyx0aGlzLm5lZ2F0aXZlPTEpLEo8di5sZW5ndGgmJigxNj09PXA/dGhpcy5fcGFyc2VIZXgodixKLHcpOih0aGlzLl9w''@;'; put 'put ''YXJzZUJhc2UodixwLEopLCJsZSI9PT13JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCkscCx3KSkpfSxFLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih2LHAsdyl7djwwJiYodGhpcy5uZWdhdGl2ZT0xLHY9LXYpLHY8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYz''@;'; put 'put ''JnZdLHRoaXMubGVuZ3RoPTEpOnY8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdix2LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSSh2PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnYsdi82NzEwODg2NCY2NzEwODg2Mywx''@;'; put 'put ''XSx0aGlzLmxlbmd0aD0zKSwibGUiPT09dyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLHAsdyl9LEUucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odixwLHcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiB2Lmxlbmd0aCksdi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9''@;'; put 'put ''WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgSj0wO0o8dGhpcy5sZW5ndGg7SisrKXRoaXMud29yZHNbSl09MDt2YXIgbmUsZGUsZmU9MDtpZigiYmUiPT09dylm''@;'; put 'put ''b3IoSj12Lmxlbmd0aC0xLG5lPTA7Sj49MDtKLT0zKXRoaXMud29yZHNbbmVdfD0oZGU9dltKXXx2W0otMV08PDh8dltKLTJdPDwxNik8PGZlJjY3MTA4ODYzLHRoaXMud29yZHNbbmUrMV09ZGU+Pj4yNi1mZSY2NzEwODg2MywoZmUrPTI0KT49MjYmJihmZS09MjYsbmUrKyk7ZWxzZSBpZigi''@;'; put 'put ''bGUiPT09dylmb3IoSj0wLG5lPTA7Sjx2Lmxlbmd0aDtKKz0zKXRoaXMud29yZHNbbmVdfD0oZGU9dltKXXx2W0orMV08PDh8dltKKzJdPDwxNik8PGZlJjY3MTA4ODYzLHRoaXMud29yZHNbbmUrMV09ZGU+Pj4yNi1mZSY2NzEwODg2MywoZmUrPTI0KT49MjYmJihmZS09MjYsbmUrKyk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih2LHAsdyl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh2Lmxlbmd0aC1wKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBKPTA7Sjx0aGlzLmxlbmd0aDtKKyspdGhpcy53''@;'; put 'put ''b3Jkc1tKXT0wO3ZhciBuZSxkZT0wLGZlPTA7aWYoImJlIj09PXcpZm9yKEo9di5sZW5ndGgtMTtKPj1wO0otPTIpbmU9Qih2LHAsSik8PGRlLHRoaXMud29yZHNbZmVdfD02NzEwODg2MyZuZSxkZT49MTg/KGRlLT0xOCx0aGlzLndvcmRzW2ZlKz0xXXw9bmU+Pj4yNik6ZGUrPTg7ZWxzZSBm''@;'; put 'put ''b3IoSj0odi5sZW5ndGgtcCklMj09MD9wKzE6cDtKPHYubGVuZ3RoO0orPTIpbmU9Qih2LHAsSik8PGRlLHRoaXMud29yZHNbZmVdfD02NzEwODg2MyZuZSxkZT49MTg/KGRlLT0xOCx0aGlzLndvcmRzW2ZlKz0xXXw9bmU+Pj4yNik6ZGUrPTg7dGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''X3BhcnNlQmFzZT1mdW5jdGlvbih2LHAsdyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEo9MCxuZT0xO25lPD02NzEwODg2MztuZSo9cClKKys7Si0tLG5lPW5lL3B8MDtmb3IodmFyIGRlPXYubGVuZ3RoLXcsZmU9ZGUlSix4ZT1NYXRoLm1pbihkZSxkZS1mZSkrdyxM''@;'; put 'put ''ZT0wLEZlPXc7RmU8eGU7RmUrPUopTGU9WSh2LEZlLEZlK0oscCksdGhpcy5pbXVsbihuZSksdGhpcy53b3Jkc1swXStMZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1MZTp0aGlzLl9pYWRkbihMZSk7aWYoMCE9PWZlKXt2YXIgT2U9MTtmb3IoTGU9WSh2LEZlLHYubGVuZ3RoLHApLEZlPTA7''@;'; put 'put ''RmU8ZmU7RmUrKylPZSo9cDt0aGlzLmltdWxuKE9lKSx0aGlzLndvcmRzWzBdK0xlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPUxlOnRoaXMuX2lhZGRuKExlKX10aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHYpe3Yud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9dGhpcy5sZW5ndGgsdi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHYucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih2KXtYKHYsdGhpcyl9LEUucHJv''@;'; put 'put ''dG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHY9bmV3IEUobnVsbCk7cmV0dXJuIHRoaXMuY29weSh2KSx2fSxFLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHYpe2Zvcig7dGhpcy5sZW5ndGg8djspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5fc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdHlwZW9mIFN5bWJvbDwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yKXRyeXtFLnByb3RvdHlwZVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1VfWNhdGNoe0Uu''@;'; put 'put ''cHJvdG90eXBlLmluc3BlY3Q9VX1lbHNlIEUucHJvdG90eXBlLmluc3BlY3Q9VTtmdW5jdGlvbiBVKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9dmFyIHE9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sZWU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sdGU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2''@;'; put 'put ''NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4''@;'; put 'put ''MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gb2UodixwLHcpe3cubmVnYXRpdmU9cC5uZWdhdGl2ZV52Lm5lZ2F0aXZlO3ZhciBKPXYubGVuZ3RoK3AubGVu''@;'; put 'put ''Z3RofDA7dy5sZW5ndGg9SixKPUotMXwwO3ZhciBuZT0wfHYud29yZHNbMF0sZGU9MHxwLndvcmRzWzBdLGZlPW5lKmRlLExlPWZlLzY3MTA4ODY0fDA7dy53b3Jkc1swXT02NzEwODg2MyZmZTtmb3IodmFyIEZlPTE7RmU8SjtGZSsrKXtmb3IodmFyIE9lPUxlPj4+MjYsamU9NjcxMDg4NjMm''@;'; put 'put ''TGUsV2U9TWF0aC5taW4oRmUscC5sZW5ndGgtMSksS2U9TWF0aC5tYXgoMCxGZS12Lmxlbmd0aCsxKTtLZTw9V2U7S2UrKylPZSs9KGZlPShuZT0wfHYud29yZHNbRmUtS2V8MF0pKihkZT0wfHAud29yZHNbS2VdKStqZSkvNjcxMDg4NjR8MCxqZT02NzEwODg2MyZmZTt3LndvcmRzW0ZlXT0w''@;'; put 'put ''fGplLExlPTB8T2V9cmV0dXJuIDAhPT1MZT93LndvcmRzW0ZlXT0wfExlOncubGVuZ3RoLS0sdy5fc3RyaXAoKX1FLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih2LHApe3ZhciB3O2lmKHA9MHxwfHwxLDE2PT09KHY9dnx8MTApfHwiaGV4Ij09PXYpe3c9IiI7Zm9yKHZhciBKPTAsbmU9''@;'; put 'put ''MCxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspe3ZhciBmZT10aGlzLndvcmRzW2RlXSx4ZT0oMTY3NzcyMTUmKGZlPDxKfG5lKSkudG9TdHJpbmcoMTYpO25lPWZlPj4+MjQtSiYxNjc3NzIxNSwoSis9Mik+PTI2JiYoSi09MjYsZGUtLSksdz0wIT09bmV8fGRlIT09dGhpcy5sZW5ndGgtMT9x''@;'; put 'put ''WzYteGUubGVuZ3RoXSt4ZSt3OnhlK3d9Zm9yKDAhPT1uZSYmKHc9bmUudG9TdHJpbmcoMTYpK3cpO3cubGVuZ3RoJXAhPTA7KXc9IjAiK3c7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYodz0iLSIrdyksd31pZih2PT09KDB8dikmJnY+PTImJnY8PTM2KXt2YXIgTGU9ZWVbdl0sRmU9dGVb''@;'; put 'put ''dl07dz0iIjt2YXIgT2U9dGhpcy5jbG9uZSgpO2ZvcihPZS5uZWdhdGl2ZT0wOyFPZS5pc1plcm8oKTspe3ZhciBqZT1PZS5tb2RybihGZSkudG9TdHJpbmcodik7dz0oT2U9T2UuaWRpdm4oRmUpKS5pc1plcm8oKT9qZSt3OnFbTGUtamUubGVuZ3RoXStqZSt3fWZvcih0aGlzLmlzWmVybygp''@;'; put 'put ''JiYodz0iMCIrdyk7dy5sZW5ndGglcCE9MDspdz0iMCIrdztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih3PSItIit3KSx3fUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdj10aGlzLndvcmRzWzBd''@;'; put 'put ''O3JldHVybiAyPT09dGhpcy5sZW5ndGg/dis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3YrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkg''@;'; put 'put ''c2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdjp2fSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNiwyKX0saiYmKEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHYscCl7cmV0dXJuIHRoaXMudG9B''@;'; put 'put ''cnJheUxpa2Uoaix2LHApfSksRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih2LHApe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHYscCl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHYscCx3KXt0aGlzLl9zdHJpcCgpO3ZhciBKPXRoaXMuYnl0ZUxlbmd0aCgp''@;'; put 'put ''LG5lPXd8fE1hdGgubWF4KDEsSik7SShKPD1uZSwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkobmU+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIik7dmFyIGZlLHhlLGRlPSh4ZT1uZSwoZmU9dikuYWxsb2NVbnNhZmU/ZmUuYWxsb2NVbnNhZmUoeGUp''@;'; put 'put ''Om5ldyBmZSh4ZSkpO3JldHVybiB0aGlzWyJfdG9BcnJheUxpa2UiKygibGUiPT09cD8iTEUiOiJCRSIpXShkZSxKKSxkZX0sRS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24odixwKXtmb3IodmFyIHc9MCxKPTAsbmU9MCxkZT0wO25lPHRoaXMubGVuZ3RoO25lKyspe3ZhciBm''@;'; put 'put ''ZT10aGlzLndvcmRzW25lXTw8ZGV8Sjt2W3crK109MjU1JmZlLHc8di5sZW5ndGgmJih2W3crK109ZmU+PjgmMjU1KSx3PHYubGVuZ3RoJiYodlt3KytdPWZlPj4xNiYyNTUpLDY9PT1kZT8odzx2Lmxlbmd0aCYmKHZbdysrXT1mZT4+MjQmMjU1KSxKPTAsZGU9MCk6KEo9ZmU+Pj4yNCxkZSs9''@;'; put 'put ''Mil9aWYodzx2Lmxlbmd0aClmb3Iodlt3KytdPUo7dzx2Lmxlbmd0aDspdlt3KytdPTB9LEUucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKHYscCl7Zm9yKHZhciB3PXYubGVuZ3RoLTEsSj0wLG5lPTAsZGU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXt2YXIgZmU9dGhpcy53b3Jk''@;'; put 'put ''c1tuZV08PGRlfEo7dlt3LS1dPTI1NSZmZSx3Pj0wJiYodlt3LS1dPWZlPj44JjI1NSksdz49MCYmKHZbdy0tXT1mZT4+MTYmMjU1KSw2PT09ZGU/KHc+PTAmJih2W3ctLV09ZmU+PjI0JjI1NSksSj0wLGRlPTApOihKPWZlPj4+MjQsZGUrPTIpfWlmKHc+PTApZm9yKHZbdy0tXT1KO3c+PTA7''@;'; put 'put ''KXZbdy0tXT0wfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24odil7cmV0dXJuIDMyLU1hdGguY2x6MzIodil9OmZ1bmN0aW9uKHYpe3ZhciBwPXYsdz0wO3JldHVybiBwPj00MDk2JiYodys9MTMscD4+Pj0xMykscD49NjQmJih3Kz03LHA+Pj49NykscD49OCYm''@;'; put 'put ''KHcrPTQscD4+Pj00KSxwPj0yJiYodys9MixwPj4+PTIpLHcrcH0sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHYpe2lmKDA9PT12KXJldHVybiAyNjt2YXIgcD12LHc9MDtyZXR1cm4hKDgxOTEmcCkmJih3Kz0xMyxwPj4+PTEzKSwhKDEyNyZwKSYmKHcrPTcscD4+Pj03KSwhKDE1''@;'; put 'put ''JnApJiYodys9NCxwPj4+PTQpLCEoMyZwKSYmKHcrPTIscD4+Pj0yKSwhKDEmcCkmJncrKyx3fSxFLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStw''@;'; put 'put ''fSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB2PTAscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW3BdKTtpZih2Kz13LDI2IT09dylicmVha31yZXR1cm4gdn0sRS5w''@;'; put 'put ''cm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sRS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHYpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHYpLmlhZGRuKDEpOnRoaXMuY2xvbmUo''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMudGVzdG4odi0xKT90aGlzLm5vdG4odikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90''@;'; put 'put ''eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHYpe2Zvcig7dGhpcy5sZW5n''@;'; put 'put ''dGg8di5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIHA9MDtwPHYubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcF18di53b3Jkc1twXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHYpe3JldHVybiBJ''@;'; put 'put ''KDA9PSh0aGlzLm5lZ2F0aXZlfHYubmVnYXRpdmUpKSx0aGlzLml1b3Iodil9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHYpOnYuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3Iodik6di5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHYpe3ZhciBwO3A9dGhpcy5sZW5ndGg+di5sZW5ndGg/djp0aGlzO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7''@;'; put 'put ''dysrKXRoaXMud29yZHNbd109dGhpcy53b3Jkc1t3XSZ2LndvcmRzW3ddO3JldHVybiB0aGlzLmxlbmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHYpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfHYubmVnYXRpdmUpKSx0aGlzLml1YW5k''@;'; put 'put ''KHYpfSxFLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHYpOnYuY2xvbmUoKS5pYW5kKHRoaXMpfSxFLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlz''@;'; put 'put ''LmNsb25lKCkuaXVhbmQodik6di5jbG9uZSgpLml1YW5kKHRoaXMpfSxFLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih2KXt2YXIgcCx3O3RoaXMubGVuZ3RoPnYubGVuZ3RoPyhwPXRoaXMsdz12KToocD12LHc9dGhpcyk7Zm9yKHZhciBKPTA7Sjx3Lmxlbmd0aDtKKyspdGhpcy53b3Jkc1tK''@;'; put 'put ''XT1wLndvcmRzW0pdXncud29yZHNbSl07aWYodGhpcyE9PXApZm9yKDtKPHAubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPXAud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPXAubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09''@;'; put 'put ''KHRoaXMubmVnYXRpdmV8di5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Iodil9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5sZW5ndGg+di5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3Iodik6di5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rp''@;'; put 'put ''b24odil7cmV0dXJuIHRoaXMubGVuZ3RoPnYubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih2KTp2LmNsb25lKCkuaXV4b3IodGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHYpe0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKTt2YXIgcD0wfE1hdGguY2VpbCh2LzI2KSx3PXYl''@;'; put 'put ''MjY7dGhpcy5fZXhwYW5kKHApLHc+MCYmcC0tO2Zvcih2YXIgSj0wO0o8cDtKKyspdGhpcy53b3Jkc1tKXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tKXTtyZXR1cm4gdz4wJiYodGhpcy53b3Jkc1tKXT1+dGhpcy53b3Jkc1tKXSY2NzEwODg2Mz4+MjYtdyksdGhpcy5fc3RyaXAoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUubm90bj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHYpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHYscCl7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciB3PXYvMjZ8MCxKPXYlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh3KzEpLHRoaXMud29y''@;'; put 'put ''ZHNbd109cD90aGlzLndvcmRzW3ddfDE8PEo6dGhpcy53b3Jkc1t3XSZ+KDE8PEopLHRoaXMuX3N0cmlwKCl9LEUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odil7dmFyIHAsdyxKO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09di5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHA9''@;'; put 'put ''dGhpcy5pc3ViKHYpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmUpcmV0dXJuIHYubmVnYXRpdmU9MCxwPXRoaXMuaXN1Yih2KSx2Lm5lZ2F0aXZlPTEscC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD52Lmxlbmd0''@;'; put 'put ''aD8odz10aGlzLEo9dik6KHc9dixKPXRoaXMpO2Zvcih2YXIgbmU9MCxkZT0wO2RlPEoubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09NjcxMDg4NjMmKHA9KDB8dy53b3Jkc1tkZV0pKygwfEoud29yZHNbZGVdKStuZSksbmU9cD4+PjI2O2Zvcig7MCE9PW5lJiZkZTx3Lmxlbmd0aDtkZSsr''@;'; put 'put ''KXRoaXMud29yZHNbZGVdPTY3MTA4ODYzJihwPSgwfHcud29yZHNbZGVdKStuZSksbmU9cD4+PjI2O2lmKHRoaXMubGVuZ3RoPXcubGVuZ3RoLDAhPT1uZSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1uZSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYodyE9PXRoaXMpZm9yKDtkZTx3Lmxlbmd0aDtk''@;'; put 'put ''ZSsrKXRoaXMud29yZHNbZGVdPXcud29yZHNbZGVdO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odil7dmFyIHA7cmV0dXJuIDAhPT12Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odi5uZWdhdGl2ZT0wLHA9dGhpcy5zdWIodiksdi5uZWdhdGl2ZV49MSxwKTow''@;'; put 'put ''PT09di5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxwPXYuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxwKTp0aGlzLmxlbmd0aD52Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh2KTp2LmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1m''@;'; put 'put ''dW5jdGlvbih2KXtpZigwIT09di5uZWdhdGl2ZSl7di5uZWdhdGl2ZT0wO3ZhciBwPXRoaXMuaWFkZCh2KTtyZXR1cm4gdi5uZWdhdGl2ZT0xLHAuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodiksdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHcsSixuZT10aGlzLmNtcCh2KTtpZigwPT09bmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO25lPjA/KHc9dGhpcyxKPXYpOih3PXYsSj10aGlzKTtmb3IodmFyIGRlPTAsZmU9MDtmZTxK''@;'; put 'put ''Lmxlbmd0aDtmZSsrKWRlPShwPSgwfHcud29yZHNbZmVdKS0oMHxKLndvcmRzW2ZlXSkrZGUpPj4yNix0aGlzLndvcmRzW2ZlXT02NzEwODg2MyZwO2Zvcig7MCE9PWRlJiZmZTx3Lmxlbmd0aDtmZSsrKWRlPShwPSgwfHcud29yZHNbZmVdKStkZSk+PjI2LHRoaXMud29yZHNbZmVdPTY3MTA4''@;'; put 'put ''ODYzJnA7aWYoMD09PWRlJiZmZTx3Lmxlbmd0aCYmdyE9PXRoaXMpZm9yKDtmZTx3Lmxlbmd0aDtmZSsrKXRoaXMud29yZHNbZmVdPXcud29yZHNbZmVdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxmZSksdyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMu''@;'; put 'put ''X3N0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodil9O3ZhciBzZT1mdW5jdGlvbih2LHAsdyl7dmFyIEosbmUsZGUsZmU9di53b3Jkcyx4ZT1wLndvcmRzLExlPXcud29yZHMsRmU9MCxPZT0wfGZlWzBdLGplPTgxOTEmT2UsV2U9''@;'; put 'put ''T2U+Pj4xMyxLZT0wfGZlWzFdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfGZlWzJdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfGZlWzNdLFRlPTgxOTEmQWUscWU9QWU+Pj4xMyxYZT0wfGZlWzRdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfGZlWzVdLERlPTgxOTEmTWUsemU9''@;'; put 'put ''TWU+Pj4xMyxpdD0wfGZlWzZdLHV0PTgxOTEmaXQsTXQ9aXQ+Pj4xMyxIdD0wfGZlWzddLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfGZlWzhdLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfGZlWzldLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfHhlWzBdLGZ0PTgxOTEmSG4sZm49''@;'; put 'put ''SG4+Pj4xMyxobj0wfHhlWzFdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfHhlWzJdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfHhlWzNdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfHhlWzRdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfHhlWzVdLHp0PTgxOTEmSW4seW49''@;'; put 'put ''SW4+Pj4xMyx4bj0wfHhlWzZdLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfHhlWzddLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfHhlWzhdLGxuPTgxOTEmbmksam49bmk+Pj4xMyxxcj0wfHhlWzldLGdpPTgxOTEmcXIseHI9cXI+Pj4xMzt3Lm5lZ2F0aXZlPXYubmVnYXRpdmVecC5u''@;'; put 'put ''ZWdhdGl2ZSx3Lmxlbmd0aD0xOTt2YXIgVWk9KEZlKyhKPU1hdGguaW11bChqZSxmdCkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChqZSxmbikpK01hdGguaW11bChXZSxmdCl8MCkpPDwxMyl8MDtGZT0oKGRlPU1hdGguaW11bChXZSxmbikpKyhuZT4+PjEzKXwwKSsoVWk+Pj4yNil8''@;'; put 'put ''MCxVaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoWWUsZnQpLG5lPShuZT1NYXRoLmltdWwoWWUsZm4pKStNYXRoLmltdWwoSmUsZnQpfDAsZGU9TWF0aC5pbXVsKEplLGZuKTt2YXIgS3I9KEZlKyhKPUorTWF0aC5pbXVsKGplLHd0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwo''@;'; put 'put ''amUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxYdCl8MCkrKG5lPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2MyxKPU1hdGguaW11bChQZSxmdCksbmU9KG5lPU1hdGguaW11bChQZSxmbikpK01hdGguaW11bChiZSxm''@;'; put 'put ''dCl8MCxkZT1NYXRoLmltdWwoYmUsZm4pLEo9SitNYXRoLmltdWwoWWUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxYdCl8MCkrTWF0aC5pbXVsKEplLHd0KXwwLGRlPWRlK01hdGguaW11bChKZSxYdCl8MDt2YXIgbm89KEZlKyhKPUorTWF0aC5pbXVsKGplLE50KXwwKXwwKSsoKDgx''@;'; put 'put ''OTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxtbil8MCkrKG5lPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxKPU1hdGguaW11bChUZSxmdCksbmU9KG5lPU1hdGguaW11''@;'; put 'put ''bChUZSxmbikpK01hdGguaW11bChxZSxmdCl8MCxkZT1NYXRoLmltdWwocWUsZm4pLEo9SitNYXRoLmltdWwoUGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVsKGJlLHd0KXwwLGRlPWRlK01hdGguaW11bChiZSxYdCl8MCxKPUorTWF0aC5pbXVsKFllLE50''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsbW4pfDApK01hdGguaW11bChKZSxOdCl8MCxkZT1kZStNYXRoLmltdWwoSmUsbW4pfDA7dmFyIEhyPShGZSsoSj1KK01hdGguaW11bChqZSxJdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''V2UsSXQpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsSnQpfDApKyhuZT4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsSj1NYXRoLmltdWwoVWUsZnQpLG5lPShuZT1NYXRoLmltdWwoVWUsZm4pKStNYXRoLmltdWwoaHQsZnQpfDAsZGU9TWF0aC5pbXVsKGh0''@;'; put 'put ''LGZuKSxKPUorTWF0aC5pbXVsKFRlLHd0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCxkZT1kZStNYXRoLmltdWwocWUsWHQpfDAsSj1KK01hdGguaW11bChQZSxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLG1uKXwwKStNYXRoLmltdWwo''@;'; put 'put ''YmUsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLG1uKXwwLEo9SitNYXRoLmltdWwoWWUsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLGRlPWRlK01hdGguaW11bChKZSxKdCl8MDt2YXIgcWk9KEZlKyhKPUorTWF0aC5pbXVsKGplLHB0KXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxZdCl8MCkrKG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxKPU1hdGguaW11bChEZSxmdCksbmU9KG5l''@;'; put 'put ''PU1hdGguaW11bChEZSxmbikpK01hdGguaW11bCh6ZSxmdCl8MCxkZT1NYXRoLmltdWwoemUsZm4pLEo9SitNYXRoLmltdWwoVWUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxYdCl8MCkrTWF0aC5pbXVsKGh0LHd0KXwwLGRlPWRlK01hdGguaW11bChodCxYdCl8MCxKPUorTWF0aC5p''@;'; put 'put ''bXVsKFRlLE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCxkZT1kZStNYXRoLmltdWwocWUsbW4pfDAsSj1KK01hdGguaW11bChQZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsZGU9ZGUr''@;'; put 'put ''TWF0aC5pbXVsKGJlLEp0KXwwLEo9SitNYXRoLmltdWwoWWUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxZdCl8MCkrTWF0aC5pbXVsKEplLHB0KXwwLGRlPWRlK01hdGguaW11bChKZSxZdCl8MDt2YXIgSmk9KEZlKyhKPUorTWF0aC5pbXVsKGplLHp0KXwwKXwwKSsoKDgxOTEmKG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSx5bil8MCkrKG5lPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxKPU1hdGguaW11bCh1dCxmdCksbmU9KG5lPU1hdGguaW11bCh1dCxm''@;'; put 'put ''bikpK01hdGguaW11bChNdCxmdCl8MCxkZT1NYXRoLmltdWwoTXQsZm4pLEo9SitNYXRoLmltdWwoRGUsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLGRlPWRlK01hdGguaW11bCh6ZSxYdCl8MCxKPUorTWF0aC5pbXVsKFVlLE50KXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoVWUsbW4pfDApK01hdGguaW11bChodCxOdCl8MCxkZT1kZStNYXRoLmltdWwoaHQsbW4pfDAsSj1KK01hdGguaW11bChUZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKHFlLEp0''@;'; put 'put ''KXwwLEo9SitNYXRoLmltdWwoUGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLGRlPWRlK01hdGguaW11bChiZSxZdCl8MCxKPUorTWF0aC5pbXVsKFllLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUseW4pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSx6dCl8MCxkZT1kZStNYXRoLmltdWwoSmUseW4pfDA7dmFyIGFvPShGZSsoSj1KK01hdGguaW11bChqZSxzbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2UsQm4p''@;'; put 'put ''fDApKyhuZT4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoUHQsZnQpLG5lPShuZT1NYXRoLmltdWwoUHQsZm4pKStNYXRoLmltdWwob24sZnQpfDAsZGU9TWF0aC5pbXVsKG9uLGZuKSxKPUorTWF0aC5pbXVsKHV0LHd0KXwwLG5lPShuZT1uZStNYXRoLmlt''@;'; put 'put ''dWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCxkZT1kZStNYXRoLmltdWwoTXQsWHQpfDAsSj1KK01hdGguaW11bChEZSxOdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLG1uKXwwKStNYXRoLmltdWwoemUsTnQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLG1uKXwwLEo9SitNYXRoLmlt''@;'; put 'put ''dWwoVWUsSXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxKdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLGRlPWRlK01hdGguaW11bChodCxKdCl8MCxKPUorTWF0aC5pbXVsKFRlLHB0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8MCxkZT1kZStN''@;'; put 'put ''YXRoLmltdWwocWUsWXQpfDAsSj1KK01hdGguaW11bChQZSx6dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFBlLHluKXwwKStNYXRoLmltdWwoYmUsenQpfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLHluKXwwLEo9SitNYXRoLmltdWwoWWUsc24pfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxCbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLHNuKXwwLGRlPWRlK01hdGguaW11bChKZSxCbil8MDt2YXIgcm89KEZlKyhKPUorTWF0aC5pbXVsKGplLCR0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsUG4pfDApK01hdGguaW11bChXZSwkdCl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01h''@;'; put 'put ''dGguaW11bChXZSxQbil8MCkrKG5lPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2MyxKPU1hdGguaW11bChVdCxmdCksbmU9KG5lPU1hdGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCxkZT1NYXRoLmltdWwoYm4sZm4pLEo9SitNYXRoLmltdWwoUHQsd3QpfDAsbmU9''@;'; put 'put ''KG5lPW5lK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLGRlPWRlK01hdGguaW11bChvbixYdCl8MCxKPUorTWF0aC5pbXVsKHV0LE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCxkZT1kZStNYXRoLmltdWwoTXQsbW4p''@;'; put 'put ''fDAsSj1KK01hdGguaW11bChEZSxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLEp0KXwwKStNYXRoLmltdWwoemUsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKHplLEp0KXwwLEo9SitNYXRoLmltdWwoVWUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0''@;'; put 'put ''LHB0KXwwLGRlPWRlK01hdGguaW11bChodCxZdCl8MCxKPUorTWF0aC5pbXVsKFRlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCxkZT1kZStNYXRoLmltdWwocWUseW4pfDAsSj1KK01hdGguaW11bChQZSxzbil8MCxuZT0obmU9bmUrTWF0''@;'; put 'put ''aC5pbXVsKFBlLEJuKXwwKStNYXRoLmltdWwoYmUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKGJlLEJuKXwwLEo9SitNYXRoLmltdWwoWWUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLGRlPWRlK01hdGguaW11bChKZSxQbil8MDt2YXIgaW89''@;'; put 'put ''KEZlKyhKPUorTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChXZSxqbil8MCkrKG5lPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2''@;'; put 'put ''MyxKPU1hdGguaW11bChlbixmdCksbmU9KG5lPU1hdGguaW11bChlbixmbikpK01hdGguaW11bCgkbixmdCl8MCxkZT1NYXRoLmltdWwoJG4sZm4pLEo9SitNYXRoLmltdWwoVXQsd3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxYdCl8MCkrTWF0aC5pbXVsKGJuLHd0KXwwLGRlPWRlK01h''@;'; put 'put ''dGguaW11bChibixYdCl8MCxKPUorTWF0aC5pbXVsKFB0LE50KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCxkZT1kZStNYXRoLmltdWwob24sbW4pfDAsSj1KK01hdGguaW11bCh1dCxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LEp0KXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKE10LEp0KXwwLEo9SitNYXRoLmltdWwoRGUscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxZdCl8MCkrTWF0aC5pbXVsKHplLHB0KXwwLGRlPWRlK01hdGguaW11bCh6ZSxZdCl8MCxKPUorTWF0aC5pbXVsKFVlLHp0KXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCxkZT1kZStNYXRoLmltdWwoaHQseW4pfDAsSj1KK01hdGguaW11bChUZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKHFl''@;'; put 'put ''LEJuKXwwLEo9SitNYXRoLmltdWwoUGUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChQZSxQbil8MCkrTWF0aC5pbXVsKGJlLCR0KXwwLGRlPWRlK01hdGguaW11bChiZSxQbil8MCxKPUorTWF0aC5pbXVsKFllLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11''@;'; put 'put ''bChKZSxsbil8MCxkZT1kZStNYXRoLmltdWwoSmUsam4pfDA7dmFyIEdpPShGZSsoSj1KK01hdGguaW11bChqZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKGplLHhyKXwwKStNYXRoLmltdWwoV2UsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoV2Us''@;'; put 'put ''eHIpfDApKyhuZT4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sd3QpLG5lPShuZT1NYXRoLmltdWwoZW4sWHQpKStNYXRoLmltdWwoJG4sd3QpfDAsZGU9TWF0aC5pbXVsKCRuLFh0KSxKPUorTWF0aC5pbXVsKFV0LE50KXwwLG5lPShuZT1uZStNYXRo''@;'; put 'put ''LmltdWwoVXQsbW4pfDApK01hdGguaW11bChibixOdCl8MCxkZT1kZStNYXRoLmltdWwoYm4sbW4pfDAsSj1KK01hdGguaW11bChQdCxJdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLEp0KXwwLEo9SitNYXRo''@;'; put 'put ''LmltdWwodXQscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxZdCl8MCkrTWF0aC5pbXVsKE10LHB0KXwwLGRlPWRlK01hdGguaW11bChNdCxZdCl8MCxKPUorTWF0aC5pbXVsKERlLHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCxkZT1k''@;'; put 'put ''ZStNYXRoLmltdWwoemUseW4pfDAsSj1KK01hdGguaW11bChVZSxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LEJuKXwwLEo9SitNYXRoLmltdWwoVGUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxQ''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKHFlLCR0KXwwLGRlPWRlK01hdGguaW11bChxZSxQbil8MCxKPUorTWF0aC5pbXVsKFBlLGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCxkZT1kZStNYXRoLmltdWwoYmUsam4pfDA7dmFyIGhvPShGZSsoSj1KK01h''@;'; put 'put ''dGguaW11bChZZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFllLHhyKXwwKStNYXRoLmltdWwoSmUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoSmUseHIpfDApKyhuZT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsSj1NYXRoLmlt''@;'; put 'put ''dWwoZW4sTnQpLG5lPShuZT1NYXRoLmltdWwoZW4sbW4pKStNYXRoLmltdWwoJG4sTnQpfDAsZGU9TWF0aC5pbXVsKCRuLG1uKSxKPUorTWF0aC5pbXVsKFV0LEl0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsSnQpfDApK01hdGguaW11bChibixJdCl8MCxkZT1kZStNYXRoLmltdWwoYm4s''@;'; put 'put ''SnQpfDAsSj1KK01hdGguaW11bChQdCxwdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLFl0KXwwLEo9SitNYXRoLmltdWwodXQsenQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCx5bil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KE10LHp0KXwwLGRlPWRlK01hdGguaW11bChNdCx5bil8MCxKPUorTWF0aC5pbXVsKERlLHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCxkZT1kZStNYXRoLmltdWwoemUsQm4pfDAsSj1KK01hdGguaW11bChVZSwkdCl8MCxuZT0obmU9bmUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsZGU9ZGUrTWF0aC5pbXVsKGh0LFBuKXwwLEo9SitNYXRoLmltdWwoVGUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxqbil8MCkrTWF0aC5pbXVsKHFlLGxuKXwwLGRlPWRlK01hdGguaW11bChxZSxqbil8MDt2YXIg''@;'; put 'put ''eXI9KEZlKyhKPUorTWF0aC5pbXVsKFBlLGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUGUseHIpfDApK01hdGguaW11bChiZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChiZSx4cil8MCkrKG5lPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEw''@;'; put 'put ''ODg2MyxKPU1hdGguaW11bChlbixJdCksbmU9KG5lPU1hdGguaW11bChlbixKdCkpK01hdGguaW11bCgkbixJdCl8MCxkZT1NYXRoLmltdWwoJG4sSnQpLEo9SitNYXRoLmltdWwoVXQscHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxZdCl8MCkrTWF0aC5pbXVsKGJuLHB0KXwwLGRlPWRl''@;'; put 'put ''K01hdGguaW11bChibixZdCl8MCxKPUorTWF0aC5pbXVsKFB0LHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCxkZT1kZStNYXRoLmltdWwob24seW4pfDAsSj1KK01hdGguaW11bCh1dCxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHV0LEJu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsc24pfDAsZGU9ZGUrTWF0aC5pbXVsKE10LEJuKXwwLEo9SitNYXRoLmltdWwoRGUsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxQbil8MCkrTWF0aC5pbXVsKHplLCR0KXwwLGRlPWRlK01hdGguaW11bCh6ZSxQbil8MCxKPUorTWF0aC5pbXVsKFVlLGxu''@;'; put 'put ''KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCxkZT1kZStNYXRoLmltdWwoaHQsam4pfDA7dmFyIFBpPShGZSsoSj1KK01hdGguaW11bChUZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFRlLHhyKXwwKStNYXRoLmltdWwo''@;'; put 'put ''cWUsZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwocWUseHIpfDApKyhuZT4+PjEzKXwwKSsoUGk+Pj4yNil8MCxQaSY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4scHQpLG5lPShuZT1NYXRoLmltdWwoZW4sWXQpKStNYXRoLmltdWwoJG4scHQpfDAsZGU9TWF0aC5pbXVsKCRu''@;'; put 'put ''LFl0KSxKPUorTWF0aC5pbXVsKFV0LHp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQseW4pfDApK01hdGguaW11bChibix6dCl8MCxkZT1kZStNYXRoLmltdWwoYm4seW4pfDAsSj1KK01hdGguaW11bChQdCxzbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LEJuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''b24sc24pfDAsZGU9ZGUrTWF0aC5pbXVsKG9uLEJuKXwwLEo9SitNYXRoLmltdWwodXQsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxQbil8MCkrTWF0aC5pbXVsKE10LCR0KXwwLGRlPWRlK01hdGguaW11bChNdCxQbil8MCxKPUorTWF0aC5pbXVsKERlLGxuKXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCxkZT1kZStNYXRoLmltdWwoemUsam4pfDA7dmFyIExvPShGZSsoSj1KK01hdGguaW11bChVZSxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFVlLHhyKXwwKStNYXRoLmltdWwoaHQsZ2kpfDApKTw8MTMp''@;'; put 'put ''fDA7RmU9KChkZT1kZStNYXRoLmltdWwoaHQseHIpfDApKyhuZT4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4senQpLG5lPShuZT1NYXRoLmltdWwoZW4seW4pKStNYXRoLmltdWwoJG4senQpfDAsZGU9TWF0aC5pbXVsKCRuLHluKSxKPUorTWF0aC5p''@;'; put 'put ''bXVsKFV0LHNuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsQm4pfDApK01hdGguaW11bChibixzbil8MCxkZT1kZStNYXRoLmltdWwoYm4sQm4pfDAsSj1KK01hdGguaW11bChQdCwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwob24sJHQpfDAsZGU9ZGUr''@;'; put 'put ''TWF0aC5pbXVsKG9uLFBuKXwwLEo9SitNYXRoLmltdWwodXQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh1dCxqbil8MCkrTWF0aC5pbXVsKE10LGxuKXwwLGRlPWRlK01hdGguaW11bChNdCxqbil8MDt2YXIgaHM9KEZlKyhKPUorTWF0aC5pbXVsKERlLGdpKXwwKXwwKSsoKDgxOTEmKG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoRGUseHIpfDApK01hdGguaW11bCh6ZSxnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bCh6ZSx4cil8MCkrKG5lPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2MyxKPU1hdGguaW11bChlbixzbiksbmU9KG5lPU1hdGguaW11bChlbixC''@;'; put 'put ''bikpK01hdGguaW11bCgkbixzbil8MCxkZT1NYXRoLmltdWwoJG4sQm4pLEo9SitNYXRoLmltdWwoVXQsJHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVdCxQbil8MCkrTWF0aC5pbXVsKGJuLCR0KXwwLGRlPWRlK01hdGguaW11bChibixQbil8MCxKPUorTWF0aC5pbXVsKFB0LGxuKXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCxkZT1kZStNYXRoLmltdWwob24sam4pfDA7dmFyIHJzPShGZSsoSj1KK01hdGguaW11bCh1dCxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHV0LHhyKXwwKStNYXRoLmltdWwoTXQsZ2kp''@;'; put 'put ''fDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwoTXQseHIpfDApKyhuZT4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sJHQpLG5lPShuZT1NYXRoLmltdWwoZW4sUG4pKStNYXRoLmltdWwoJG4sJHQpfDAsZGU9TWF0aC5pbXVsKCRuLFBuKSxK''@;'; put 'put ''PUorTWF0aC5pbXVsKFV0LGxuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVXQsam4pfDApK01hdGguaW11bChibixsbil8MCxkZT1kZStNYXRoLmltdWwoYm4sam4pfDA7dmFyIExjPShGZSsoSj1KK01hdGguaW11bChQdCxnaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFB0''@;'; put 'put ''LHhyKXwwKStNYXRoLmltdWwob24sZ2kpfDApKTw8MTMpfDA7RmU9KChkZT1kZStNYXRoLmltdWwob24seHIpfDApKyhuZT4+PjEzKXwwKSsoTGM+Pj4yNil8MCxMYyY9NjcxMDg4NjMsSj1NYXRoLmltdWwoZW4sbG4pLG5lPShuZT1NYXRoLmltdWwoZW4sam4pKStNYXRoLmltdWwoJG4sbG4p''@;'; put 'put ''fDAsZGU9TWF0aC5pbXVsKCRuLGpuKTt2YXIgdWw9KEZlKyhKPUorTWF0aC5pbXVsKFV0LGdpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVXQseHIpfDApK01hdGguaW11bChibixnaSl8MCkpPDwxMyl8MDtGZT0oKGRlPWRlK01hdGguaW11bChibix4cil8MCkrKG5lPj4+''@;'; put 'put ''MTMpfDApKyh1bD4+PjI2KXwwLHVsJj02NzEwODg2Mzt2YXIgUmM9KEZlKyhKPU1hdGguaW11bChlbixnaSkpfDApKygoODE5MSYobmU9KG5lPU1hdGguaW11bChlbix4cikpK01hdGguaW11bCgkbixnaSl8MCkpPDwxMyl8MDtyZXR1cm4gRmU9KChkZT1NYXRoLmltdWwoJG4seHIpKSsobmU+''@;'; put 'put ''Pj4xMyl8MCkrKFJjPj4+MjYpfDAsUmMmPTY3MTA4ODYzLExlWzBdPVVpLExlWzFdPUtyLExlWzJdPW5vLExlWzNdPUhyLExlWzRdPXFpLExlWzVdPUppLExlWzZdPWFvLExlWzddPXJvLExlWzhdPWlvLExlWzldPUdpLExlWzEwXT1obyxMZVsxMV09eXIsTGVbMTJdPVBpLExlWzEzXT1MbyxM''@;'; put 'put ''ZVsxNF09aHMsTGVbMTVdPXJzLExlWzE2XT1MYyxMZVsxN109dWwsTGVbMThdPVJjLDAhPT1GZSYmKExlWzE5XT1GZSx3Lmxlbmd0aCsrKSx3fTtmdW5jdGlvbiBoZSh2LHAsdyl7dy5uZWdhdGl2ZT1wLm5lZ2F0aXZlXnYubmVnYXRpdmUsdy5sZW5ndGg9di5sZW5ndGgrcC5sZW5ndGg7Zm9y''@;'; put 'put ''KHZhciBKPTAsbmU9MCxkZT0wO2RlPHcubGVuZ3RoLTE7ZGUrKyl7dmFyIGZlPW5lO25lPTA7Zm9yKHZhciB4ZT02NzEwODg2MyZKLExlPU1hdGgubWluKGRlLHAubGVuZ3RoLTEpLEZlPU1hdGgubWF4KDAsZGUtdi5sZW5ndGgrMSk7RmU8PUxlO0ZlKyspe3ZhciBqZT0oMHx2LndvcmRzW2Rl''@;'; put 'put ''LUZlXSkqKDB8cC53b3Jkc1tGZV0pLFdlPTY3MTA4ODYzJmplO3hlPTY3MTA4ODYzJihXZT1XZSt4ZXwwKSxuZSs9KGZlPShmZT1mZSsoamUvNjcxMDg4NjR8MCl8MCkrKFdlPj4+MjYpfDApPj4+MjYsZmUmPTY3MTA4ODYzfXcud29yZHNbZGVdPXhlLEo9ZmUsZmU9bmV9cmV0dXJuIDAhPT1K''@;'; put 'put ''P3cud29yZHNbZGVdPUo6dy5sZW5ndGgtLSx3Ll9zdHJpcCgpfWZ1bmN0aW9uIHVlKHYscCx3KXtyZXR1cm4gaGUodixwLHcpfWZ1bmN0aW9uIGNlKHYscCl7dGhpcy54PXYsdGhpcy55PXB9TWF0aC5pbXVsfHwoc2U9b2UpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHYscCl7dmFyIHc9''@;'; put 'put ''dGhpcy5sZW5ndGgrdi5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09di5sZW5ndGg/c2UodGhpcyx2LHApOnc8NjM/b2UodGhpcyx2LHApOnc8MTAyND9oZSh0aGlzLHYscCk6dWUodGhpcyx2LHApfSxjZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih2KXtmb3IodmFy''@;'; put 'put ''IHA9bmV3IEFycmF5KHYpLHc9RS5wcm90b3R5cGUuX2NvdW50Qml0cyh2KS0xLEo9MDtKPHY7SisrKXBbSl09dGhpcy5yZXZCaW4oSix3LHYpO3JldHVybiBwfSxjZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHYscCx3KXtpZigwPT09dnx8dj09PXctMSlyZXR1cm4gdjtmb3IodmFyIEo9''@;'; put 'put ''MCxuZT0wO25lPHA7bmUrKylKfD0oMSZ2KTw8cC1uZS0xLHY+Pj0xO3JldHVybiBKfSxjZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih2LHAsdyxKLG5lLGRlKXtmb3IodmFyIGZlPTA7ZmU8ZGU7ZmUrKylKW2ZlXT1wW3ZbZmVdXSxuZVtmZV09d1t2W2ZlXV19LGNlLnByb3RvdHlwZS50''@;'; put 'put ''cmFuc2Zvcm09ZnVuY3Rpb24odixwLHcsSixuZSxkZSl7dGhpcy5wZXJtdXRlKGRlLHYscCx3LEosbmUpO2Zvcih2YXIgZmU9MTtmZTxuZTtmZTw8PTEpZm9yKHZhciB4ZT1mZTw8MSxMZT1NYXRoLmNvcygyKk1hdGguUEkveGUpLEZlPU1hdGguc2luKDIqTWF0aC5QSS94ZSksT2U9MDtPZTxu''@;'; put 'put ''ZTtPZSs9eGUpZm9yKHZhciBqZT1MZSxXZT1GZSxLZT0wO0tlPGZlO0tlKyspe3ZhciBZZT13W09lK0tlXSxKZT1KW09lK0tlXSxsdD13W09lK0tlK2ZlXSxQZT1KW09lK0tlK2ZlXSxiZT1qZSpsdC1XZSpQZTtQZT1qZSpQZStXZSpsdCx3W09lK0tlXT1ZZSsobHQ9YmUpLEpbT2UrS2VdPUpl''@;'; put 'put ''K1BlLHdbT2UrS2UrZmVdPVllLWx0LEpbT2UrS2UrZmVdPUplLVBlLEtlIT09eGUmJihiZT1MZSpqZS1GZSpXZSxXZT1MZSpXZStGZSpqZSxqZT1iZSl9fSxjZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odixwKXt2YXIgdz0xfE1hdGgubWF4KHAsdiksSj0xJncsbmU9MDtmb3Io''@;'; put 'put ''dz13LzJ8MDt3O3c+Pj49MSluZSsrO3JldHVybiAxPDxuZSsxK0p9LGNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odixwLHcpe2lmKCEodzw9MSkpZm9yKHZhciBKPTA7Sjx3LzI7SisrKXt2YXIgbmU9dltKXTt2W0pdPXZbdy1KLTFdLHZbdy1KLTFdPW5lLG5lPXBbSl0scFtKXT0t''@;'; put 'put ''cFt3LUotMV0scFt3LUotMV09LW5lfX0sY2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz0wLEo9MDtKPHAvMjtKKyspe3ZhciBuZT04MTkyKk1hdGgucm91bmQodlsyKkorMV0vcCkrTWF0aC5yb3VuZCh2WzIqSl0vcCkrdzt2W0pdPTY3MTA4ODYzJm5l''@;'; put 'put ''LHc9bmU8NjcxMDg4NjQ/MDpuZS82NzEwODg2NHwwfXJldHVybiB2fSxjZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih2LHAsdyxKKXtmb3IodmFyIG5lPTAsZGU9MDtkZTxwO2RlKyspd1syKmRlXT04MTkxJihuZSs9MHx2W2RlXSksd1syKmRlKzFdPTgxOTEmKG5lPj4+PTEzKSxu''@;'; put 'put ''ZT4+Pj0xMztmb3IoZGU9MipwO2RlPEo7KytkZSl3W2RlXT0wO0koMD09PW5lKSxJKDA9PSgtODE5MiZuZSkpfSxjZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih2KXtmb3IodmFyIHA9bmV3IEFycmF5KHYpLHc9MDt3PHY7dysrKXBbd109MDtyZXR1cm4gcH0sY2UucHJvdG90eXBlLm11bHA9''@;'; put 'put ''ZnVuY3Rpb24odixwLHcpe3ZhciBKPTIqdGhpcy5ndWVzc0xlbjEzYih2Lmxlbmd0aCxwLmxlbmd0aCksbmU9dGhpcy5tYWtlUkJUKEopLGRlPXRoaXMuc3R1YihKKSxmZT1uZXcgQXJyYXkoSikseGU9bmV3IEFycmF5KEopLExlPW5ldyBBcnJheShKKSxGZT1uZXcgQXJyYXkoSiksT2U9bmV3''@;'; put 'put ''IEFycmF5KEopLGplPW5ldyBBcnJheShKKSxXZT13LndvcmRzO1dlLmxlbmd0aD1KLHRoaXMuY29udmVydDEzYih2LndvcmRzLHYubGVuZ3RoLGZlLEopLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLEZlLEopLHRoaXMudHJhbnNmb3JtKGZlLGRlLHhlLExlLEosbmUpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKEZlLGRlLE9lLGplLEosbmUpO2Zvcih2YXIgS2U9MDtLZTxKO0tlKyspe3ZhciBZZT14ZVtLZV0qT2VbS2VdLUxlW0tlXSpqZVtLZV07TGVbS2VdPXhlW0tlXSpqZVtLZV0rTGVbS2VdKk9lW0tlXSx4ZVtLZV09WWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHhlLExlLEopLHRo''@;'; put 'put ''aXMudHJhbnNmb3JtKHhlLExlLFdlLGRlLEosbmUpLHRoaXMuY29uanVnYXRlKFdlLGRlLEopLHRoaXMubm9ybWFsaXplMTNiKFdlLEopLHcubmVnYXRpdmU9di5uZWdhdGl2ZV5wLm5lZ2F0aXZlLHcubGVuZ3RoPXYubGVuZ3RoK3AubGVuZ3RoLHcuX3N0cmlwKCl9LEUucHJvdG90eXBlLm11''@;'; put 'put ''bD1mdW5jdGlvbih2KXt2YXIgcD1uZXcgRShudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdi5sZW5ndGgpLHRoaXMubXVsVG8odixwKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih2KXt2YXIgcD1uZXcgRShudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkodGhpcy5sZW5ndGgrdi5sZW5ndGgpLHVlKHRoaXMsdixwKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHYsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHYpe3ZhciBwPXY8MDtwJiYodj0tdiksSSgibnVtYmVyIj09''@;'; put 'put ''dHlwZW9mIHYpLEkodjw2NzEwODg2NCk7Zm9yKHZhciB3PTAsSj0wO0o8dGhpcy5sZW5ndGg7SisrKXt2YXIgbmU9KDB8dGhpcy53b3Jkc1tKXSkqdixkZT0oNjcxMDg4NjMmbmUpKyg2NzEwODg2MyZ3KTt3Pj49MjYsdys9bmUvNjcxMDg4NjR8MCx3Kz1kZT4+PjI2LHRoaXMud29yZHNbSl09''@;'; put 'put ''NjcxMDg4NjMmZGV9cmV0dXJuIDAhPT13JiYodGhpcy53b3Jkc1tKXT13LHRoaXMubGVuZ3RoKyspLHA/dGhpcy5pbmVnKCk6dGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHYpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbih2KXt2YXIgcD1mdW5jdGlvbihkZSl7Zm9yKHZhciBmZT1uZXcgQXJyYXkoZGUuYml0TGVuZ3RoKCkp''@;'; put 'put ''LHhlPTA7eGU8ZmUubGVuZ3RoO3hlKyspZmVbeGVdPWRlLndvcmRzW3hlLzI2fDBdPj4+eGUlMjYmMTtyZXR1cm4gZmV9KHYpO2lmKDA9PT1wLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciB3PXRoaXMsSj0wO0o8cC5sZW5ndGgmJjA9PT1wW0pdO0orKyx3PXcuc3FyKCkpO2lmKCsr''@;'; put 'put ''SjxwLmxlbmd0aClmb3IodmFyIG5lPXcuc3FyKCk7SjxwLmxlbmd0aDtKKyssbmU9bmUuc3FyKCkpMCE9PXBbSl0mJih3PXcubXVsKG5lKSk7cmV0dXJuIHd9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih2KXtJKCJudW1iZXIiPT10eXBlb2YgdiYmdj49MCk7dmFyIHAsdz12JTI2LEo9''@;'; put 'put ''KHYtdykvMjYsbmU9NjcxMDg4NjM+Pj4yNi13PDwyNi13O2lmKDAhPT13KXt2YXIgZGU9MDtmb3IocD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgZmU9dGhpcy53b3Jkc1twXSZuZTt0aGlzLndvcmRzW3BdPSgwfHRoaXMud29yZHNbcF0pLWZlPDx3fGRlLGRlPWZlPj4+MjYtd31kZSYmKHRo''@;'; put 'put ''aXMud29yZHNbcF09ZGUsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUope2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MDtwLS0pdGhpcy53b3Jkc1twK0pdPXRoaXMud29yZHNbcF07Zm9yKHA9MDtwPEo7cCsrKXRoaXMud29yZHNbcF09MDt0aGlzLmxlbmd0aCs9Sn1yZXR1cm4gdGhpcy5fc3RyaXAo''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odil7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHYpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odixwLHcpe3ZhciBKO0koIm51bWJlciI9PXR5cGVvZiB2JiZ2Pj0wKSxKPXA/KHAtcCUyNikvMjY6MDt2''@;'; put 'put ''YXIgbmU9diUyNixkZT1NYXRoLm1pbigodi1uZSkvMjYsdGhpcy5sZW5ndGgpLGZlPTY3MTA4ODYzXjY3MTA4ODYzPj4+bmU8PG5lLHhlPXc7aWYoSi09ZGUsSj1NYXRoLm1heCgwLEopLHhlKXtmb3IodmFyIExlPTA7TGU8ZGU7TGUrKyl4ZS53b3Jkc1tMZV09dGhpcy53b3Jkc1tMZV07eGUu''@;'; put 'put ''bGVuZ3RoPWRlfWlmKDAhPT1kZSlpZih0aGlzLmxlbmd0aD5kZSlmb3IodGhpcy5sZW5ndGgtPWRlLExlPTA7TGU8dGhpcy5sZW5ndGg7TGUrKyl0aGlzLndvcmRzW0xlXT10aGlzLndvcmRzW0xlK2RlXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBGZT0wO2ZvcihM''@;'; put 'put ''ZT10aGlzLmxlbmd0aC0xO0xlPj0wJiYoMCE9PUZlfHxMZT49Sik7TGUtLSl7dmFyIE9lPTB8dGhpcy53b3Jkc1tMZV07dGhpcy53b3Jkc1tMZV09RmU8PDI2LW5lfE9lPj4+bmUsRmU9T2UmZmV9cmV0dXJuIHhlJiYwIT09RmUmJih4ZS53b3Jkc1t4ZS5sZW5ndGgrK109RmUpLDA9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxFLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih2LHAsdyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHYscCx3KX0sRS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih2''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHYpfSxFLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih2KX0sRS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHYpfSxFLnByb3RvdHlwZS51''@;'; put 'put ''c2hybj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih2KX0sRS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPXYlMjYsdz0odi1wKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD13fHwhKHRoaXMud29yZHNb''@;'; put 'put ''d10mMTw8cCkpfSxFLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYmJnY+PTApO3ZhciBwPXYlMjYsdz0odi1wKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5sZW5ndGg8PXc/dGhpczooMCE9PXAmJncrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih3LHRoaXMubGVuZ3RoKSwwIT09cCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCksdGhpcy5fc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0''@;'; put 'put ''aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHYpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih2KXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIHYpLEkodjw2NzEwODg2NCksdjwwP3RoaXMuaXN1Ym4oLXYpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''KDB8dGhpcy53b3Jkc1swXSk8PXY/KHRoaXMud29yZHNbMF09di0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih2KX0sRS5wcm90b3R5cGUuX2lhZGRu''@;'; put 'put ''PWZ1bmN0aW9uKHYpe3RoaXMud29yZHNbMF0rPXY7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1twXT49NjcxMDg4NjQ7cCsrKXRoaXMud29yZHNbcF0tPTY3MTA4ODY0LHA9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbcCsxXT0xOnRoaXMud29yZHNbcCsxXSsrO3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxwKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHYpe2lmKEkoIm51bWJlciI9PXR5cGVvZiB2KSxJKHY8NjcxMDg4NjQpLHY8MClyZXR1cm4gdGhpcy5pYWRkbigtdik7aWYoMCE9PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHYpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXYsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3Io''@;'; put 'put ''dmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPDA7cCsrKXRoaXMud29yZHNbcF0rPTY3MTA4ODY0LHRoaXMud29yZHNbcCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sRS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHYp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odil9LEUucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LEUucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aWFicygpfSxFLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odixwLHcpe3ZhciBKLG5lO3RoaXMuX2V4cGFuZCh2Lmxlbmd0aCt3KTt2YXIgZmU9MDtmb3IoSj0wO0o8di5sZW5ndGg7SisrKXtuZT0oMHx0aGlzLndvcmRzW0ord10pK2ZlO3ZhciB4ZT0oMHx2LndvcmRzW0pdKSpw''@;'; put 'put ''O2ZlPSgobmUtPTY3MTA4ODYzJnhlKT4+MjYpLSh4ZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0ord109NjcxMDg4NjMmbmV9Zm9yKDtKPHRoaXMubGVuZ3RoLXc7SisrKWZlPShuZT0oMHx0aGlzLndvcmRzW0ord10pK2ZlKT4+MjYsdGhpcy53b3Jkc1tKK3ddPTY3MTA4ODYzJm5lO2lmKDA9''@;'; put 'put ''PT1mZSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IoSSgtMT09PWZlKSxmZT0wLEo9MDtKPHRoaXMubGVuZ3RoO0orKylmZT0obmU9LSgwfHRoaXMud29yZHNbSl0pK2ZlKT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZuZTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9''@;'; put 'put ''LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHYscCl7dmFyIHcsSj10aGlzLmNsb25lKCksbmU9dixkZT0wfG5lLndvcmRzW25lLmxlbmd0aC0xXTswIT0odz0yNi10aGlzLl9jb3VudEJpdHMoZGUpKSYmKG5lPW5lLnVzaGxuKHcpLEouaXVzaGxuKHcpLGRlPTB8bmUud29yZHNbbmUu''@;'; put 'put ''bGVuZ3RoLTFdKTt2YXIgZmUseGU9Si5sZW5ndGgtbmUubGVuZ3RoO2lmKCJtb2QiIT09cCl7KGZlPW5ldyBFKG51bGwpKS5sZW5ndGg9eGUrMSxmZS53b3Jkcz1uZXcgQXJyYXkoZmUubGVuZ3RoKTtmb3IodmFyIExlPTA7TGU8ZmUubGVuZ3RoO0xlKyspZmUud29yZHNbTGVdPTB9dmFyIEZl''@;'; put 'put ''PUouY2xvbmUoKS5faXNobG5zdWJtdWwobmUsMSx4ZSk7MD09PUZlLm5lZ2F0aXZlJiYoSj1GZSxmZSYmKGZlLndvcmRzW3hlXT0xKSk7Zm9yKHZhciBPZT14ZS0xO09lPj0wO09lLS0pe3ZhciBqZT02NzEwODg2NCooMHxKLndvcmRzW25lLmxlbmd0aCtPZV0pKygwfEoud29yZHNbbmUubGVu''@;'; put 'put ''Z3RoK09lLTFdKTtmb3IoamU9TWF0aC5taW4oamUvZGV8MCw2NzEwODg2MyksSi5faXNobG5zdWJtdWwobmUsamUsT2UpOzAhPT1KLm5lZ2F0aXZlOylqZS0tLEoubmVnYXRpdmU9MCxKLl9pc2hsbnN1Ym11bChuZSwxLE9lKSxKLmlzWmVybygpfHwoSi5uZWdhdGl2ZV49MSk7ZmUmJihmZS53''@;'; put 'put ''b3Jkc1tPZV09amUpfXJldHVybiBmZSYmZmUuX3N0cmlwKCksSi5fc3RyaXAoKSwiZGl2IiE9PXAmJjAhPT13JiZKLml1c2hybih3KSx7ZGl2OmZlfHxudWxsLG1vZDpKfX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHYscCx3KXtyZXR1cm4gSSghdi5pc1plcm8oKSksdGhpcy5pc1pl''@;'; put 'put ''cm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT12Lm5lZ2F0aXZlPyhkZT10aGlzLm5lZygpLmRpdm1vZCh2LHApLCJtb2QiIT09cCYmKEo9ZGUuZGl2Lm5lZygpKSwiZGl2IiE9PXAmJihuZT1kZS5tb2QubmVnKCksdyYmMCE9PW5lLm5lZ2F0''@;'; put 'put ''aXZlJiZuZS5pYWRkKHYpKSx7ZGl2OkosbW9kOm5lfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT12Lm5lZ2F0aXZlPyhkZT10aGlzLmRpdm1vZCh2Lm5lZygpLHApLCJtb2QiIT09cCYmKEo9ZGUuZGl2Lm5lZygpKSx7ZGl2OkosbW9kOmRlLm1vZH0pOnRoaXMubmVnYXRpdmUmdi5uZWdhdGl2''@;'; put 'put ''ZT8oZGU9dGhpcy5uZWcoKS5kaXZtb2Qodi5uZWcoKSxwKSwiZGl2IiE9PXAmJihuZT1kZS5tb2QubmVnKCksdyYmMCE9PW5lLm5lZ2F0aXZlJiZuZS5pc3ViKHYpKSx7ZGl2OmRlLmRpdixtb2Q6bmV9KTp2Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodik8MD97ZGl2Om5ldyBFKDAp''@;'; put 'put ''LG1vZDp0aGlzfToxPT09di5sZW5ndGg/ImRpdiI9PT1wP3tkaXY6dGhpcy5kaXZuKHYud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PXA/e2RpdjpudWxsLG1vZDpuZXcgRSh0aGlzLm1vZHJuKHYud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odi53b3Jkc1swXSksbW9kOm5ldyBFKHRo''@;'; put 'put ''aXMubW9kcm4odi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHYscCk7dmFyIEosbmUsZGV9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuZGl2bW9k''@;'; put 'put ''KHYsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5kaXZtb2QodiwibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih2KXt2YXIgcD10aGlzLmRpdm1vZCh2KTtpZihwLm1vZC5pc1plcm8oKSlyZXR1cm4gcC5k''@;'; put 'put ''aXY7dmFyIHc9MCE9PXAuZGl2Lm5lZ2F0aXZlP3AubW9kLmlzdWIodik6cC5tb2QsSj12LnVzaHJuKDEpLG5lPXYuYW5kbG4oMSksZGU9dy5jbXAoSik7cmV0dXJuIGRlPDB8fDE9PT1uZSYmMD09PWRlP3AuZGl2OjAhPT1wLmRpdi5uZWdhdGl2ZT9wLmRpdi5pc3VibigxKTpwLmRpdi5pYWRk''@;'; put 'put ''bigxKX0sRS5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxJKHY8PTY3MTA4ODYzKTtmb3IodmFyIHc9NjcxMDg4NjQldixKPTAsbmU9dGhpcy5sZW5ndGgtMTtuZT49MDtuZS0tKUo9KHcqSisoMHx0aGlzLndvcmRzW25lXSkpJXY7cmV0dXJuIHA/LUo6''@;'; put 'put ''Sn0sRS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5tb2Rybih2KX0sRS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odil7dmFyIHA9djwwO3AmJih2PS12KSxJKHY8PTY3MTA4ODYzKTtmb3IodmFyIHc9MCxKPXRoaXMubGVuZ3RoLTE7Sj49MDtKLS0pe3ZhciBuZT0o''@;'; put 'put ''MHx0aGlzLndvcmRzW0pdKSs2NzEwODg2NCp3O3RoaXMud29yZHNbSl09bmUvdnwwLHc9bmUldn1yZXR1cm4gdGhpcy5fc3RyaXAoKSxwP3RoaXMuaW5lZygpOnRoaXN9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih2KX0sRS5wcm90b3R5''@;'; put 'put ''cGUuZWdjZD1mdW5jdGlvbih2KXtJKDA9PT12Lm5lZ2F0aXZlKSxJKCF2LmlzWmVybygpKTt2YXIgcD10aGlzLHc9di5jbG9uZSgpO3A9MCE9PXAubmVnYXRpdmU/cC51bW9kKHYpOnAuY2xvbmUoKTtmb3IodmFyIEo9bmV3IEUoMSksbmU9bmV3IEUoMCksZGU9bmV3IEUoMCksZmU9bmV3IEUo''@;'; put 'put ''MSkseGU9MDtwLmlzRXZlbigpJiZ3LmlzRXZlbigpOylwLml1c2hybigxKSx3Lml1c2hybigxKSwrK3hlO2Zvcih2YXIgTGU9dy5jbG9uZSgpLEZlPXAuY2xvbmUoKTshcC5pc1plcm8oKTspe2Zvcih2YXIgT2U9MCxqZT0xOyEocC53b3Jkc1swXSZqZSkmJk9lPDI2OysrT2UsamU8PD0xKTtp''@;'; put 'put ''ZihPZT4wKWZvcihwLml1c2hybihPZSk7T2UtLSA+MDspKEouaXNPZGQoKXx8bmUuaXNPZGQoKSkmJihKLmlhZGQoTGUpLG5lLmlzdWIoRmUpKSxKLml1c2hybigxKSxuZS5pdXNocm4oMSk7Zm9yKHZhciBXZT0wLEtlPTE7ISh3LndvcmRzWzBdJktlKSYmV2U8MjY7KytXZSxLZTw8PTEpO2lm''@;'; put 'put ''KFdlPjApZm9yKHcuaXVzaHJuKFdlKTtXZS0tID4wOykoZGUuaXNPZGQoKXx8ZmUuaXNPZGQoKSkmJihkZS5pYWRkKExlKSxmZS5pc3ViKEZlKSksZGUuaXVzaHJuKDEpLGZlLml1c2hybigxKTtwLmNtcCh3KT49MD8ocC5pc3ViKHcpLEouaXN1YihkZSksbmUuaXN1YihmZSkpOih3LmlzdWIo''@;'; put 'put ''cCksZGUuaXN1YihKKSxmZS5pc3ViKG5lKSl9cmV0dXJue2E6ZGUsYjpmZSxnY2Q6dy5pdXNobG4oeGUpfX0sRS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHYpe0koMD09PXYubmVnYXRpdmUpLEkoIXYuaXNaZXJvKCkpO3ZhciBwPXRoaXMsdz12LmNsb25lKCk7cD0wIT09cC5uZWdhdGl2''@;'; put 'put ''ZT9wLnVtb2Qodik6cC5jbG9uZSgpO2Zvcih2YXIgSixuZT1uZXcgRSgxKSxkZT1uZXcgRSgwKSxmZT13LmNsb25lKCk7cC5jbXBuKDEpPjAmJncuY21wbigxKT4wOyl7Zm9yKHZhciB4ZT0wLExlPTE7IShwLndvcmRzWzBdJkxlKSYmeGU8MjY7Kyt4ZSxMZTw8PTEpO2lmKHhlPjApZm9yKHAu''@;'; put 'put ''aXVzaHJuKHhlKTt4ZS0tID4wOyluZS5pc09kZCgpJiZuZS5pYWRkKGZlKSxuZS5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7ISh3LndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKHcuaXVzaHJuKEZlKTtGZS0tID4wOylkZS5pc09kZCgpJiZkZS5pYWRk''@;'; put 'put ''KGZlKSxkZS5pdXNocm4oMSk7cC5jbXAodyk+PTA/KHAuaXN1Yih3KSxuZS5pc3ViKGRlKSk6KHcuaXN1YihwKSxkZS5pc3ViKG5lKSl9cmV0dXJuKEo9MD09PXAuY21wbigxKT9uZTpkZSkuY21wbigwKTwwJiZKLmlhZGQodiksSn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHYpe2lmKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkpcmV0dXJuIHYuYWJzKCk7aWYodi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgcD10aGlzLmNsb25lKCksdz12LmNsb25lKCk7cC5uZWdhdGl2ZT0wLHcubmVnYXRpdmU9MDtmb3IodmFyIEo9MDtwLmlzRXZlbigpJiZ3LmlzRXZlbigpO0orKylwLml1c2hybigx''@;'; put 'put ''KSx3Lml1c2hybigxKTtmb3IoOzspe2Zvcig7cC5pc0V2ZW4oKTspcC5pdXNocm4oMSk7Zm9yKDt3LmlzRXZlbigpOyl3Lml1c2hybigxKTt2YXIgbmU9cC5jbXAodyk7aWYobmU8MCl7dmFyIGRlPXA7cD13LHc9ZGV9ZWxzZSBpZigwPT09bmV8fDA9PT13LmNtcG4oMSkpYnJlYWs7cC5pc3Vi''@;'; put 'put ''KHcpfXJldHVybiB3Lml1c2hsbihKKX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5lZ2NkKHYpLmEudW1vZCh2KX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMud29yZHNbMF0mdn0sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odil7SSgibnVtYmVyIj09dHlwZW9mIHYpO3ZhciBwPXYlMjYsdz0odi1wKS8yNixK''@;'; put 'put ''PTE8PHA7aWYodGhpcy5sZW5ndGg8PXcpcmV0dXJuIHRoaXMuX2V4cGFuZCh3KzEpLHRoaXMud29yZHNbd118PUosdGhpcztmb3IodmFyIG5lPUosZGU9dzswIT09bmUmJmRlPHRoaXMubGVuZ3RoO2RlKyspe3ZhciBmZT0wfHRoaXMud29yZHNbZGVdO25lPShmZSs9bmUpPj4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tkZV09ZmUmPTY3MTA4ODYzfXJldHVybiAwIT09bmUmJih0aGlzLndvcmRzW2RlXT1uZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21w''@;'; put 'put ''bj1mdW5jdGlvbih2KXt2YXIgcCx3PXY8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXcpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJncpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXA9MTtlbHNle3cmJih2PS12KSxJKHY8PTY3MTA4ODYzLCJOdW1iZXIg''@;'; put 'put ''aXMgdG9vIGJpZyIpO3ZhciBKPTB8dGhpcy53b3Jkc1swXTtwPUo9PT12PzA6Sjx2Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXA6cH0sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHYpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09di5uZWdhdGl2ZSlyZXR1cm4tMTtpZigw''@;'; put 'put ''PT09dGhpcy5uZWdhdGl2ZSYmMCE9PXYubmVnYXRpdmUpcmV0dXJuIDE7dmFyIHA9dGhpcy51Y21wKHYpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1wOnB9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odil7aWYodGhpcy5sZW5ndGg+di5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5s''@;'; put 'put ''ZW5ndGg8di5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBwPTAsdz10aGlzLmxlbmd0aC0xO3c+PTA7dy0tKXt2YXIgSj0wfHRoaXMud29yZHNbd10sbmU9MHx2LndvcmRzW3ddO2lmKEohPT1uZSl7SjxuZT9wPS0xOko+bmUmJihwPTEpO2JyZWFrfX1yZXR1cm4gcH0sRS5wcm90b3R5cGUuZ3Ru''@;'; put 'put ''PWZ1bmN0aW9uKHYpe3JldHVybiAxPT09dGhpcy5jbXBuKHYpfSxFLnByb3RvdHlwZS5ndD1mdW5jdGlvbih2KXtyZXR1cm4gMT09PXRoaXMuY21wKHYpfSxFLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmNtcG4odik+PTB9LEUucHJvdG90eXBlLmd0ZT1mdW5jdGlv''@;'; put 'put ''bih2KXtyZXR1cm4gdGhpcy5jbXAodik+PTB9LEUucHJvdG90eXBlLmx0bj1mdW5jdGlvbih2KXtyZXR1cm4tMT09PXRoaXMuY21wbih2KX0sRS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odil7cmV0dXJuLTE9PT10aGlzLmNtcCh2KX0sRS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih2KXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbXBuKHYpPD0wfSxFLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuY21wKHYpPD0wfSxFLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odil7cmV0dXJuIDA9PT10aGlzLmNtcG4odil9LEUucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHYpe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5jbXAodil9LEUucmVkPWZ1bmN0aW9uKHYpe3JldHVybiBuZXcgQyh2KX0sRS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odil7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSx2LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodil9LEUucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMu''@;'; put 'put ''cmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxFLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMucmVkPXYsdGhpc30sRS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odil7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBj''@;'; put 'put ''b250ZXh0IiksdGhpcy5fZm9yY2VSZWQodil9LEUucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9u''@;'; put 'put ''KHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsdil9LEUucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rp''@;'; put 'put ''b24odil7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHYpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx2KSx0aGlzLnJlZC5tdWwodGhpcyx2KX0sRS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMs''@;'; put 'put ''diksdGhpcy5yZWQuaW11bCh0aGlzLHYpfSxFLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sRS5wcm90b3R5''@;'; put 'put ''cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sRS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0''@;'; put 'put ''aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LEUucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih2KXtyZXR1cm4gSSh0aGlzLnJlZCYmIXYucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHYpfTt2YXIgRz17azI1NjpudWxs''@;'; put 'put ''LHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGIodixwKXt0aGlzLm5hbWU9dix0aGlzLnA9bmV3IEUocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMu''@;'; put 'put ''X3RtcCgpfWZ1bmN0aW9uIEQoKXtiLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gSCgpe2IuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBOKCl7Yi5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGcoKXtiLmNhbGwodGhpcywiMjU1''@;'; put 'put ''MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gQyh2KXtpZigic3RyaW5nIj09dHlwZW9mIHYpe3ZhciBwPUUuX3ByaW1lKHYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgSSh2Lmd0''@;'; put 'put ''bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPXYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIFModil7Qy5jYWxsKHRoaXMsdiksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hp''@;'; put 'put ''ZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1iLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHY9bmV3IEUobnVsbCk7cmV0dXJuIHYud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx2fSxiLnByb3RvdHlw''@;'; put 'put ''ZS5pcmVkdWNlPWZ1bmN0aW9uKHYpe3ZhciBwLHc9djtkb3t0aGlzLnNwbGl0KHcsdGhpcy50bXApLHA9KHc9KHc9dGhpcy5pbXVsSyh3KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHA+dGhpcy5uKTt2YXIgSj1wPHRoaXMubj8tMTp3LnVjbXAodGhpcy5wKTtyZXR1cm4g''@;'; put 'put ''MD09PUo/KHcud29yZHNbMF09MCx3Lmxlbmd0aD0xKTpKPjA/dy5pc3ViKHRoaXMucCk6dm9pZCAwIT09dy5zdHJpcD93LnN0cmlwKCk6dy5fc3RyaXAoKSx3fSxiLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih2LHApe3YuaXVzaHJuKHRoaXMubiwwLHApfSxiLnByb3RvdHlwZS5pbXVsSz1m''@;'; put 'put ''dW5jdGlvbih2KXtyZXR1cm4gdi5pbXVsKHRoaXMuayl9LGsoRCxiKSxELnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih2LHApe2Zvcih2YXIgdz00MTk0MzAzLEo9TWF0aC5taW4odi5sZW5ndGgsOSksbmU9MDtuZTxKO25lKyspcC53b3Jkc1tuZV09di53b3Jkc1tuZV07aWYocC5sZW5ndGg9''@;'; put 'put ''Six2Lmxlbmd0aDw9OSlyZXR1cm4gdi53b3Jkc1swXT0wLHZvaWQodi5sZW5ndGg9MSk7dmFyIGRlPXYud29yZHNbOV07Zm9yKHAud29yZHNbcC5sZW5ndGgrK109ZGUmdyxuZT0xMDtuZTx2Lmxlbmd0aDtuZSsrKXt2YXIgZmU9MHx2LndvcmRzW25lXTt2LndvcmRzW25lLTEwXT0oZmUmdyk8''@;'; put 'put ''PDR8ZGU+Pj4yMixkZT1mZX12LndvcmRzW25lLTEwXT1kZT4+Pj0yMix2Lmxlbmd0aC09MD09PWRlJiZ2Lmxlbmd0aD4xMD8xMDo5fSxELnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih2KXt2LndvcmRzW3YubGVuZ3RoXT0wLHYud29yZHNbdi5sZW5ndGgrMV09MCx2Lmxlbmd0aCs9Mjtmb3Io''@;'; put 'put ''dmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3Kyspe3ZhciBKPTB8di53b3Jkc1t3XTt2LndvcmRzW3ddPTY3MTA4ODYzJihwKz05NzcqSikscD02NCpKKyhwLzY3MTA4ODY0fDApfXJldHVybiAwPT09di53b3Jkc1t2Lmxlbmd0aC0xXSYmKHYubGVuZ3RoLS0sMD09PXYud29yZHNbdi5sZW5ndGgt''@;'; put 'put ''MV0mJnYubGVuZ3RoLS0pLHZ9LGsoSCxiKSxrKE4sYiksayhnLGIpLGcucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHYpe2Zvcih2YXIgcD0wLHc9MDt3PHYubGVuZ3RoO3crKyl7dmFyIEo9MTkqKDB8di53b3Jkc1t3XSkrcCxuZT02NzEwODg2MyZKO0o+Pj49MjYsdi53b3Jkc1t3XT1uZSxw''@;'; put 'put ''PUp9cmV0dXJuIDAhPT1wJiYodi53b3Jkc1t2Lmxlbmd0aCsrXT1wKSx2fSxFLl9wcmltZT1mdW5jdGlvbih2KXtpZihHW3ZdKXJldHVybiBHW3ZdO3ZhciBwO2lmKCJrMjU2Ij09PXYpcD1uZXcgRDtlbHNlIGlmKCJwMjI0Ij09PXYpcD1uZXcgSDtlbHNlIGlmKCJwMTkyIj09PXYpcD1uZXcg''@;'; put 'put ''TjtlbHNle2lmKCJwMjU1MTkiIT09dil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit2KTtwPW5ldyBnfXJldHVybiBHW3ZdPXAscH0sQy5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odil7SSgwPT09di5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMi''@;'; put 'put ''KSxJKHYucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEMucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHYscCl7SSgwPT0odi5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKHYucmVkJiZ2LnJlZD09PXAucmVk''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEMucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHYpLl9mb3JjZVJlZCh0aGlzKTooWCh2LHYudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksdil9LEMu''@;'; put 'put ''cHJvdG90eXBlLm5lZz1mdW5jdGlvbih2KXtyZXR1cm4gdi5pc1plcm8oKT92LmNsb25lKCk6dGhpcy5tLnN1Yih2KS5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmFkZD1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12LmFkZChwKTtyZXR1cm4gdy5jbXAodGhp''@;'; put 'put ''cy5tKT49MCYmdy5pc3ViKHRoaXMubSksdy5fZm9yY2VSZWQodGhpcyl9LEMucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9di5pYWRkKHApO3JldHVybiB3LmNtcCh0aGlzLm0pPj0wJiZ3LmlzdWIodGhpcy5tKSx3fSxDLnByb3RvdHlwZS5z''@;'; put 'put ''dWI9ZnVuY3Rpb24odixwKXt0aGlzLl92ZXJpZnkyKHYscCk7dmFyIHc9di5zdWIocCk7cmV0dXJuIHcuY21wbigwKTwwJiZ3LmlhZGQodGhpcy5tKSx3Ll9mb3JjZVJlZCh0aGlzKX0sQy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih2LHApe3RoaXMuX3ZlcmlmeTIodixwKTt2YXIgdz12Lmlz''@;'; put 'put ''dWIocCk7cmV0dXJuIHcuY21wbigwKTwwJiZ3LmlhZGQodGhpcy5tKSx3fSxDLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh2KSx0aGlzLmltb2Qodi51c2hsbihwKSl9LEMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dmVyaWZ5Mih2LHApLHRoaXMuaW1vZCh2LmltdWwocCkpfSxDLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odixwKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih2LHApLHRoaXMuaW1vZCh2Lm11bChwKSl9LEMucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW11bCh2LHYuY2xv''@;'; put 'put ''bmUoKSl9LEMucHJvdG90eXBlLnNxcj1mdW5jdGlvbih2KXtyZXR1cm4gdGhpcy5tdWwodix2KX0sQy5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih2KXtpZih2LmlzWmVybygpKXJldHVybiB2LmNsb25lKCk7dmFyIHA9dGhpcy5tLmFuZGxuKDMpO2lmKEkocCUyPT0xKSwzPT09cCl7dmFyIHc9''@;'; put 'put ''dGhpcy5tLmFkZChuZXcgRSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh2LHcpfWZvcih2YXIgSj10aGlzLm0uc3VibigxKSxuZT0wOyFKLmlzWmVybygpJiYwPT09Si5hbmRsbigxKTspbmUrKyxKLml1c2hybigxKTtJKCFKLmlzWmVybygpKTt2YXIgZGU9bmV3IEUoMSkudG9SZWQo''@;'; put 'put ''dGhpcyksZmU9ZGUucmVkTmVnKCkseGU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLExlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoTGU9bmV3IEUoMipMZSpMZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KExlLHhlKS5jbXAoZmUpOylMZS5yZWRJQWRkKGZlKTtmb3IodmFyIEZlPXRoaXMu''@;'; put 'put ''cG93KExlLEopLE9lPXRoaXMucG93KHYsSi5hZGRuKDEpLml1c2hybigxKSksamU9dGhpcy5wb3codixKKSxXZT1uZTswIT09amUuY21wKGRlKTspe2Zvcih2YXIgS2U9amUsWWU9MDswIT09S2UuY21wKGRlKTtZZSsrKUtlPUtlLnJlZFNxcigpO0koWWU8V2UpO3ZhciBKZT10aGlzLnBvdyhG''@;'; put 'put ''ZSxuZXcgRSgxKS5pdXNobG4oV2UtWWUtMSkpO09lPU9lLnJlZE11bChKZSksRmU9SmUucmVkU3FyKCksamU9amUucmVkTXVsKEZlKSxXZT1ZZX1yZXR1cm4gT2V9LEMucHJvdG90eXBlLmludm09ZnVuY3Rpb24odil7dmFyIHA9di5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PXAubmVnYXRp''@;'; put 'put ''dmU/KHAubmVnYXRpdmU9MCx0aGlzLmltb2QocCkucmVkTmVnKCkpOnRoaXMuaW1vZChwKX0sQy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHYscCl7aWYocC5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PXAuY21wbigxKSlyZXR1cm4gdi5jbG9uZSgpO3ZhciB3''@;'; put 'put ''PW5ldyBBcnJheSgxNik7d1swXT1uZXcgRSgxKS50b1JlZCh0aGlzKSx3WzFdPXY7Zm9yKHZhciBKPTI7Sjx3Lmxlbmd0aDtKKyspd1tKXT10aGlzLm11bCh3W0otMV0sdik7dmFyIG5lPXdbMF0sZGU9MCxmZT0wLHhlPXAuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT14ZSYmKHhlPTI2KSxKPXAu''@;'; put 'put ''bGVuZ3RoLTE7Sj49MDtKLS0pe2Zvcih2YXIgTGU9cC53b3Jkc1tKXSxGZT14ZS0xO0ZlPj0wO0ZlLS0pe3ZhciBPZT1MZT4+RmUmMTtuZSE9PXdbMF0mJihuZT10aGlzLnNxcihuZSkpLDAhPT1PZXx8MCE9PWRlPyhkZTw8PTEsZGV8PU9lLCg0PT0rK2ZlfHwwPT09SiYmMD09PUZlKSYmKG5l''@;'; put 'put ''PXRoaXMubXVsKG5lLHdbZGVdKSxmZT0wLGRlPTApKTpmZT0wfXhlPTI2fXJldHVybiBuZX0sQy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHYpe3ZhciBwPXYudW1vZCh0aGlzLm0pO3JldHVybiBwPT09dj9wLmNsb25lKCk6cH0sQy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rp''@;'; put 'put ''b24odil7dmFyIHA9di5jbG9uZSgpO3JldHVybiBwLnJlZD1udWxsLHB9LEUubW9udD1mdW5jdGlvbih2KXtyZXR1cm4gbmV3IFModil9LGsoUyxDKSxTLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odil7cmV0dXJuIHRoaXMuaW1vZCh2LnVzaGxuKHRoaXMuc2hpZnQpKX0sUy5wcm90''@;'; put 'put ''b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odil7dmFyIHA9dGhpcy5pbW9kKHYubXVsKHRoaXMucmludikpO3JldHVybiBwLnJlZD1udWxsLHB9LFMucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odixwKXtpZih2LmlzWmVybygpfHxwLmlzWmVybygpKXJldHVybiB2LndvcmRzWzBdPTAsdi5s''@;'; put 'put ''ZW5ndGg9MSx2O3ZhciB3PXYuaW11bChwKSxKPXcubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLG5lPXcuaXN1YihKKS5pdXNocm4odGhpcy5zaGlmdCksZGU9bmU7cmV0dXJuIG5lLmNtcCh0aGlzLm0pPj0wP2RlPW5lLmlz''@;'; put 'put ''dWIodGhpcy5tKTpuZS5jbXBuKDApPDAmJihkZT1uZS5pYWRkKHRoaXMubSkpLGRlLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHYscCl7aWYodi5pc1plcm8oKXx8cC5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB3PXYubXVs''@;'; put 'put ''KHApLEo9dy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9dy5pc3ViKEopLml1c2hybih0aGlzLnNoaWZ0KSxkZT1uZTtyZXR1cm4gbmUuY21wKHRoaXMubSk+PTA/ZGU9bmUuaXN1Yih0aGlzLm0pOm5lLmNtcG4oMCk8''@;'; put 'put ''MCYmKGRlPW5lLmlhZGQodGhpcy5tKSksZGUuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHYpe3JldHVybiB0aGlzLmltb2Qodi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDM2NDQ6KE0s''@;'; put 'put ''TyxSKT0+e3ZhciB6PVIoMTA0OCksSz1SKDU2MjMpO00uZXhwb3J0cz1mdW5jdGlvbihzZSl7cmV0dXJuIHNlPygie30iPT09c2Uuc3Vic3RyKDAsMikmJihzZT0iXFx7XFx9IitzZS5zdWJzdHIoMikpLG9lKChoZT1zZSxoZS5zcGxpdCgiXFxcXCIpLmpvaW4oSSkuc3BsaXQoIlxceyIpLmpv''@;'; put 'put ''aW4oaykuc3BsaXQoIlxcfSIpLmpvaW4oRSkuc3BsaXQoIlxcLCIpLmpvaW4oaikuc3BsaXQoIlxcLiIpLmpvaW4oVikpLCEwKS5tYXAoWSkpOltdO3ZhciBoZX07dmFyIEk9IlwwU0xBU0giK01hdGgucmFuZG9tKCkrIlwwIixrPSJcME9QRU4iK01hdGgucmFuZG9tKCkrIlwwIixFPSJcMENM''@;'; put 'put ''T1NFIitNYXRoLnJhbmRvbSgpKyJcMCIsaj0iXDBDT01NQSIrTWF0aC5yYW5kb20oKSsiXDAiLFY9IlwwUEVSSU9EIitNYXRoLnJhbmRvbSgpKyJcMCI7ZnVuY3Rpb24gQihzZSl7cmV0dXJuIHBhcnNlSW50KHNlLDEwKT09c2U/cGFyc2VJbnQoc2UsMTApOnNlLmNoYXJDb2RlQXQoMCl9ZnVu''@;'; put 'put ''Y3Rpb24gWShzZSl7cmV0dXJuIHNlLnNwbGl0KEkpLmpvaW4oIlxcIikuc3BsaXQoaykuam9pbigieyIpLnNwbGl0KEUpLmpvaW4oIn0iKS5zcGxpdChqKS5qb2luKCIsIikuc3BsaXQoVikuam9pbigiLiIpfWZ1bmN0aW9uIFgoc2Upe2lmKCFzZSlyZXR1cm5bIiJdO3ZhciBoZT1bXSx1ZT1L''@;'; put 'put ''KCJ7IiwifSIsc2UpO2lmKCF1ZSlyZXR1cm4gc2Uuc3BsaXQoIiwiKTt2YXIgRz11ZS5ib2R5LGI9dWUucG9zdCxEPXVlLnByZS5zcGxpdCgiLCIpO0RbRC5sZW5ndGgtMV0rPSJ7IitHKyJ9Ijt2YXIgSD1YKGIpO3JldHVybiBiLmxlbmd0aCYmKERbRC5sZW5ndGgtMV0rPUguc2hpZnQoKSxE''@;'; put 'put ''LnB1c2guYXBwbHkoRCxIKSksaGUucHVzaC5hcHBseShoZSxEKSxoZX1mdW5jdGlvbiBVKHNlKXtyZXR1cm4ieyIrc2UrIn0ifWZ1bmN0aW9uIHEoc2Upe3JldHVybi9eLT8wXGQvLnRlc3Qoc2UpfWZ1bmN0aW9uIGVlKHNlLGhlKXtyZXR1cm4gc2U8PWhlfWZ1bmN0aW9uIHRlKHNlLGhlKXty''@;'; put 'put ''ZXR1cm4gc2U+PWhlfWZ1bmN0aW9uIG9lKHNlLGhlKXt2YXIgdWU9W10sY2U9SygieyIsIn0iLHNlKTtpZighY2V8fC9cJCQvLnRlc3QoY2UucHJlKSlyZXR1cm5bc2VdO3ZhciBHLGI9L14tP1xkK1wuXC4tP1xkKyg/OlwuXC4tP1xkKyk/JC8udGVzdChjZS5ib2R5KSxEPS9eW2EtekEtWl1c''@;'; put 'put ''LlwuW2EtekEtWl0oPzpcLlwuLT9cZCspPyQvLnRlc3QoY2UuYm9keSksSD1ifHxELE49Y2UuYm9keS5pbmRleE9mKCIsIik+PTA7aWYoIUgmJiFOKXJldHVybiBjZS5wb3N0Lm1hdGNoKC8sLipcfS8pP29lKHNlPWNlLnByZSsieyIrY2UuYm9keStFK2NlLnBvc3QpOltzZV07aWYoSClHPWNl''@;'; put 'put ''LmJvZHkuc3BsaXQoL1wuXC4vKTtlbHNlIGlmKDE9PT0oRz1YKGNlLmJvZHkpKS5sZW5ndGgmJjE9PT0oRz1vZShHWzBdLCExKS5tYXAoVSkpLmxlbmd0aClyZXR1cm4oUz1jZS5wb3N0Lmxlbmd0aD9vZShjZS5wb3N0LCExKTpbIiJdKS5tYXAoZnVuY3Rpb24oS2Upe3JldHVybiBjZS5wcmUr''@;'; put 'put ''R1swXStLZX0pO3ZhciBnLEM9Y2UucHJlLFM9Y2UucG9zdC5sZW5ndGg/b2UoY2UucG9zdCwhMSk6WyIiXTtpZihIKXt2YXIgdj1CKEdbMF0pLHA9QihHWzFdKSx3PU1hdGgubWF4KEdbMF0ubGVuZ3RoLEdbMV0ubGVuZ3RoKSxKPTM9PUcubGVuZ3RoP01hdGguYWJzKEIoR1syXSkpOjEsbmU9''@;'; put 'put ''ZWU7cDx2JiYoSio9LTEsbmU9dGUpO3ZhciBkZT1HLnNvbWUocSk7Zz1bXTtmb3IodmFyIGZlPXY7bmUoZmUscCk7ZmUrPUope3ZhciB4ZTtpZihEKSJcXCI9PT0oeGU9U3RyaW5nLmZyb21DaGFyQ29kZShmZSkpJiYoeGU9IiIpO2Vsc2UgaWYoeGU9U3RyaW5nKGZlKSxkZSl7dmFyIExlPXct''@;'; put 'put ''eGUubGVuZ3RoO2lmKExlPjApe3ZhciBGZT1uZXcgQXJyYXkoTGUrMSkuam9pbigiMCIpO3hlPWZlPDA/Ii0iK0ZlK3hlLnNsaWNlKDEpOkZlK3hlfX1nLnB1c2goeGUpfX1lbHNlIGc9eihHLGZ1bmN0aW9uKEtlKXtyZXR1cm4gb2UoS2UsITEpfSk7Zm9yKHZhciBPZT0wO09lPGcubGVuZ3Ro''@;'; put 'put ''O09lKyspZm9yKHZhciBqZT0wO2plPFMubGVuZ3RoO2plKyspe3ZhciBXZT1DK2dbT2VdK1NbamVdOyghaGV8fEh8fFdlKSYmdWUucHVzaChXZSl9cmV0dXJuIHVlfX0sOTkzMTooTSxPLFIpPT57dmFyIHo7ZnVuY3Rpb24gSyhrKXt0aGlzLnJhbmQ9a31pZihNLmV4cG9ydHM9ZnVuY3Rpb24o''@;'; put 'put ''ayl7cmV0dXJuIHp8fCh6PW5ldyBLKG51bGwpKSx6LmdlbmVyYXRlKGspfSxNLmV4cG9ydHMuUmFuZD1LLEsucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLl9yYW5kKGspfSxLLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihrKXtpZih0aGlzLnJhbmQuZ2V0Qnl0''@;'; put 'put ''ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhrKTtmb3IodmFyIEU9bmV3IFVpbnQ4QXJyYXkoayksaj0wO2o8RS5sZW5ndGg7aisrKUVbal09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gRX0sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRS''@;'; put 'put ''YW5kb21WYWx1ZXM/Sy5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oayl7dmFyIEU9bmV3IFVpbnQ4QXJyYXkoayk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhFKSxFfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9LLnByb3RvdHlwZS5f''@;'; put 'put ''cmFuZD1mdW5jdGlvbihrKXt2YXIgRT1uZXcgVWludDhBcnJheShrKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoRSksRX06Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihLLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxl''@;'; put 'put ''bWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIEk9Uig5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSS5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtLLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihrKXtyZXR1cm4gSS5yYW5kb21CeXRlcyhrKX19Y2F0''@;'; put 'put ''Y2h7fX0sNDQ5NzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSyhCKXt6LmlzQnVmZmVyKEIpfHwoQj16LmZyb20oQikpO2Zvcih2YXIgWT1CLmxlbmd0aC80fDAsWD1uZXcgQXJyYXkoWSksVT0wO1U8WTtVKyspWFtVXT1CLnJlYWRVSW50MzJCRSg0KlUpO3JldHVy''@;'; put 'put ''biBYfWZ1bmN0aW9uIEkoQil7Zm9yKDswPEIubGVuZ3RoO0IrKylCWzBdPTB9ZnVuY3Rpb24gayhCLFksWCxVLHEpe2Zvcih2YXIgZWUsdGUsb2Usc2UsaGU9WFswXSx1ZT1YWzFdLGNlPVhbMl0sRz1YWzNdLGI9QlswXV5ZWzBdLEQ9QlsxXV5ZWzFdLEg9QlsyXV5ZWzJdLE49QlszXV5ZWzNd''@;'; put 'put ''LGc9NCxDPTE7QzxxO0MrKyllZT1oZVtiPj4+MjRdXnVlW0Q+Pj4xNiYyNTVdXmNlW0g+Pj44JjI1NV1eR1syNTUmTl1eWVtnKytdLHRlPWhlW0Q+Pj4yNF1edWVbSD4+PjE2JjI1NV1eY2VbTj4+PjgmMjU1XV5HWzI1NSZiXV5ZW2crK10sb2U9aGVbSD4+PjI0XV51ZVtOPj4+MTYmMjU1XV5j''@;'; put 'put ''ZVtiPj4+OCYyNTVdXkdbMjU1JkRdXllbZysrXSxzZT1oZVtOPj4+MjRdXnVlW2I+Pj4xNiYyNTVdXmNlW0Q+Pj44JjI1NV1eR1syNTUmSF1eWVtnKytdLGI9ZWUsRD10ZSxIPW9lLE49c2U7cmV0dXJuIGVlPShVW2I+Pj4yNF08PDI0fFVbRD4+PjE2JjI1NV08PDE2fFVbSD4+PjgmMjU1XTw8''@;'; put 'put ''OHxVWzI1NSZOXSleWVtnKytdLHRlPShVW0Q+Pj4yNF08PDI0fFVbSD4+PjE2JjI1NV08PDE2fFVbTj4+PjgmMjU1XTw8OHxVWzI1NSZiXSleWVtnKytdLG9lPShVW0g+Pj4yNF08PDI0fFVbTj4+PjE2JjI1NV08PDE2fFVbYj4+PjgmMjU1XTw8OHxVWzI1NSZEXSleWVtnKytdLHNlPShVW04+''@;'; put 'put ''Pj4yNF08PDI0fFVbYj4+PjE2JjI1NV08PDE2fFVbRD4+PjgmMjU1XTw8OHxVWzI1NSZIXSleWVtnKytdLFtlZT4+Pj0wLHRlPj4+PTAsb2U+Pj49MCxzZT4+Pj0wXX12YXIgRT1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0saj1mdW5jdGlvbigpe2Zvcih2YXIgQj1uZXcgQXJyYXko''@;'; put 'put ''MjU2KSxZPTA7WTwyNTY7WSsrKUJbWV09WTwxMjg/WTw8MTpZPDwxXjI4Mztmb3IodmFyIFg9W10sVT1bXSxxPVtbXSxbXSxbXSxbXV0sZWU9W1tdLFtdLFtdLFtdXSx0ZT0wLG9lPTAsc2U9MDtzZTwyNTY7KytzZSl7dmFyIGhlPW9lXm9lPDwxXm9lPDwyXm9lPDwzXm9lPDw0O1hbdGVdPWhl''@;'; put 'put ''PWhlPj4+OF4yNTUmaGVeOTksVVtoZV09dGU7dmFyIHVlPUJbdGVdLGNlPUJbdWVdLEc9QltjZV0sYj0yNTcqQltoZV1eMTY4NDMwMDgqaGU7cVswXVt0ZV09Yjw8MjR8Yj4+PjgscVsxXVt0ZV09Yjw8MTZ8Yj4+PjE2LHFbMl1bdGVdPWI8PDh8Yj4+PjI0LHFbM11bdGVdPWIsZWVbMF1baGVd''@;'; put 'put ''PShiPTE2ODQzMDA5KkdeNjU1MzcqY2VeMjU3KnVlXjE2ODQzMDA4KnRlKTw8MjR8Yj4+PjgsZWVbMV1baGVdPWI8PDE2fGI+Pj4xNixlZVsyXVtoZV09Yjw8OHxiPj4+MjQsZWVbM11baGVdPWIsMD09PXRlP3RlPW9lPTE6KHRlPXVlXkJbQltCW0dedWVdXV0sb2VePUJbQltvZV1dKX1yZXR1''@;'; put 'put ''cm57U0JPWDpYLElOVl9TQk9YOlUsU1VCX01JWDpxLElOVl9TVUJfTUlYOmVlfX0oKTtmdW5jdGlvbiBWKEIpe3RoaXMuX2tleT1LKEIpLHRoaXMuX3Jlc2V0KCl9Vi5ibG9ja1NpemU9MTYsVi5rZXlTaXplPTMyLFYucHJvdG90eXBlLmJsb2NrU2l6ZT1WLmJsb2NrU2l6ZSxWLnByb3RvdHlw''@;'; put 'put ''ZS5rZXlTaXplPVYua2V5U2l6ZSxWLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIEI9dGhpcy5fa2V5LFk9Qi5sZW5ndGgsWD1ZKzYsVT00KihYKzEpLHE9W10sZWU9MDtlZTxZO2VlKyspcVtlZV09QltlZV07Zm9yKGVlPVk7ZWU8VTtlZSsrKXt2YXIgdGU9cVtlZS0xXTtl''@;'; put 'put ''ZSVZPT0wPyh0ZT1qLlNCT1hbKHRlPXRlPDw4fHRlPj4+MjQpPj4+MjRdPDwyNHxqLlNCT1hbdGU+Pj4xNiYyNTVdPDwxNnxqLlNCT1hbdGU+Pj44JjI1NV08PDh8ai5TQk9YWzI1NSZ0ZV0sdGVePUVbZWUvWXwwXTw8MjQpOlk+NiYmZWUlWT09NCYmKHRlPWouU0JPWFt0ZT4+PjI0XTw8MjR8''@;'; put 'put ''ai5TQk9YW3RlPj4+MTYmMjU1XTw8MTZ8ai5TQk9YW3RlPj4+OCYyNTVdPDw4fGouU0JPWFsyNTUmdGVdKSxxW2VlXT1xW2VlLVldXnRlfWZvcih2YXIgb2U9W10sc2U9MDtzZTxVO3NlKyspe3ZhciBoZT1VLXNlLHVlPXFbaGUtKHNlJTQ/MDo0KV07b2Vbc2VdPXNlPDR8fGhlPD00P3VlOmou''@;'; put 'put ''SU5WX1NVQl9NSVhbMF1bai5TQk9YW3VlPj4+MjRdXV5qLklOVl9TVUJfTUlYWzFdW2ouU0JPWFt1ZT4+PjE2JjI1NV1dXmouSU5WX1NVQl9NSVhbMl1bai5TQk9YW3VlPj4+OCYyNTVdXV5qLklOVl9TVUJfTUlYWzNdW2ouU0JPWFsyNTUmdWVdXX10aGlzLl9uUm91bmRzPVgsdGhpcy5fa2V5''@;'; put 'put ''U2NoZWR1bGU9cSx0aGlzLl9pbnZLZXlTY2hlZHVsZT1vZX0sVi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKEIpe3JldHVybiBrKEI9SyhCKSx0aGlzLl9rZXlTY2hlZHVsZSxqLlNVQl9NSVgsai5TQk9YLHRoaXMuX25Sb3VuZHMpfSxWLnByb3RvdHlwZS5lbmNyeXB0Qmxv''@;'; put 'put ''Y2s9ZnVuY3Rpb24oQil7dmFyIFk9dGhpcy5lbmNyeXB0QmxvY2tSYXcoQiksWD16LmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gWC53cml0ZVVJbnQzMkJFKFlbMF0sMCksWC53cml0ZVVJbnQzMkJFKFlbMV0sNCksWC53cml0ZVVJbnQzMkJFKFlbMl0sOCksWC53cml0ZVVJbnQzMkJFKFlbM10s''@;'; put 'put ''MTIpLFh9LFYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihCKXt2YXIgWT0oQj1LKEIpKVsxXTtCWzFdPUJbM10sQlszXT1ZO3ZhciBYPWsoQix0aGlzLl9pbnZLZXlTY2hlZHVsZSxqLklOVl9TVUJfTUlYLGouSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksVT16LmFsbG9jVW5zYWZl''@;'; put 'put ''KDE2KTtyZXR1cm4gVS53cml0ZVVJbnQzMkJFKFhbMF0sMCksVS53cml0ZVVJbnQzMkJFKFhbM10sNCksVS53cml0ZVVJbnQzMkJFKFhbMl0sOCksVS53cml0ZVVJbnQzMkJFKFhbMV0sMTIpLFV9LFYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7SSh0aGlzLl9rZXlTY2hlZHVsZSksSSh0''@;'; put 'put ''aGlzLl9pbnZLZXlTY2hlZHVsZSksSSh0aGlzLl9rZXkpfSxNLmV4cG9ydHMuQUVTPVZ9LDQ4NDg6KE0sTyxSKT0+e3ZhciB6PVIoNDQ5NyksSz1SKDk1MDkpLkJ1ZmZlcixJPVIoMTAyNyksaz1SKDU3MTcpLEU9UigzMjg4KSxqPVIoNzI5NSksVj1SKDY4NSk7ZnVuY3Rpb24gQihZLFgsVSxx''@;'; put 'put ''KXtJLmNhbGwodGhpcyk7dmFyIGVlPUsuYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IHouQUVTKFgpO3ZhciB0ZT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGVlKTt0aGlzLl9naGFzaD1uZXcgRSh0ZSksVT1mdW5jdGlvbihvZSxzZSxoZSl7aWYoMTI9PT1zZS5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IG9lLl9maW5JRD1LLmNvbmNhdChbc2UsSy5mcm9tKFswLDAsMCwxXSldKSxLLmNvbmNhdChbc2UsSy5mcm9tKFswLDAsMCwyXSldKTt2YXIgdWU9bmV3IEUoaGUpLGNlPXNlLmxlbmd0aCxHPWNlJTE2O3VlLnVwZGF0ZShzZSksRyYmdWUudXBkYXRlKEsuYWxsb2MoRz0xNi1HLDApKSx1ZS51''@;'; put 'put ''cGRhdGUoSy5hbGxvYyg4LDApKTt2YXIgYj04KmNlLEQ9Sy5hbGxvYyg4KTtELndyaXRlVUludEJFKGIsMCw4KSx1ZS51cGRhdGUoRCksb2UuX2ZpbklEPXVlLnN0YXRlO3ZhciBIPUsuZnJvbShvZS5fZmluSUQpO3JldHVybiBWKEgpLEh9KHRoaXMsVSx0ZSksdGhpcy5fcHJldj1LLmZyb20o''@;'; put 'put ''VSksdGhpcy5fY2FjaGU9Sy5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9cSx0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsdGhpcy5fbW9kZT1ZLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ayhCLEkpLEIucHJv''@;'; put 'put ''dG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWSl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIFg9MTYtdGhpcy5fYWxlbiUxNjtYPDE2JiYoWD1LLmFsbG9jKFgsMCksdGhpcy5fZ2hhc2gudXBkYXRlKFgpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIFU9dGhpcy5fbW9kZS5lbmNyeXB0''@;'; put 'put ''KHRoaXMsWSk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P1k6VSksdGhpcy5fbGVuKz1ZLmxlbmd0aCxVfSxCLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9y''@;'; put 'put ''dGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBZPWoodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24oWCxV''@;'; put 'put ''KXt2YXIgcT0wO1gubGVuZ3RoIT09VS5sZW5ndGgmJnErKztmb3IodmFyIGVlPU1hdGgubWluKFgubGVuZ3RoLFUubGVuZ3RoKSx0ZT0wO3RlPGVlOysrdGUpcSs9WFt0ZV1eVVt0ZV07cmV0dXJuIHF9KFksdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0''@;'; put 'put ''ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPVksdGhpcy5fY2lwaGVyLnNjcnViKCl9LEIucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwhSy5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LEIucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oWSl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBh''@;'; put 'put ''dXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9WX0sQi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKFkpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2do''@;'; put 'put ''YXNoLnVwZGF0ZShZKSx0aGlzLl9hbGVuKz1ZLmxlbmd0aH0sTS5leHBvcnRzPUJ9LDQ2OTY6KE0sTyxSKT0+e3ZhciB6PVIoMTQ5NCksSz1SKDYxOTMpLEk9Uig0OTQ2KTtPLmNyZWF0ZUNpcGhlcj1PLkNpcGhlcj16LmNyZWF0ZUNpcGhlcixPLmNyZWF0ZUNpcGhlcml2PU8uQ2lwaGVyaXY9''@;'; put 'put ''ei5jcmVhdGVDaXBoZXJpdixPLmNyZWF0ZURlY2lwaGVyPU8uRGVjaXBoZXI9Sy5jcmVhdGVEZWNpcGhlcixPLmNyZWF0ZURlY2lwaGVyaXY9Ty5EZWNpcGhlcml2PUsuY3JlYXRlRGVjaXBoZXJpdixPLmxpc3RDaXBoZXJzPU8uZ2V0Q2lwaGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qu''@;'; put 'put ''a2V5cyhJKX19LDYxOTM6KE0sTyxSKT0+e3ZhciB6PVIoNDg0OCksSz1SKDk1MDkpLkJ1ZmZlcixJPVIoNDUpLGs9Uig1OTY5KSxFPVIoMTAyNyksaj1SKDQ0OTcpLFY9UigzMDQ4KTtmdW5jdGlvbiBCKFUscSxlZSl7RS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBZLHRoaXMuX2xhc3Q9''@;'; put 'put ''dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgai5BRVMocSksdGhpcy5fcHJldj1LLmZyb20oZWUpLHRoaXMuX21vZGU9VSx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBZKCl7dGhpcy5jYWNoZT1LLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIFgoVSxxLGVlKXt2YXIgdGU9SVtVLnRvTG93''@;'; put 'put ''ZXJDYXNlKCldO2lmKCF0ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIGVlJiYoZWU9Sy5mcm9tKGVlKSksIkdDTSIhPT10ZS5tb2RlJiZlZS5sZW5ndGghPT10ZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2''@;'; put 'put ''IGxlbmd0aCAiK2VlLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBxJiYocT1LLmZyb20ocSkpLHEubGVuZ3RoIT09dGUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrcS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09dGUudHlwZT9uZXcgayh0ZS5t''@;'; put 'put ''b2R1bGUscSxlZSwhMCk6ImF1dGgiPT09dGUudHlwZT9uZXcgeih0ZS5tb2R1bGUscSxlZSwhMCk6bmV3IEIodGUubW9kdWxlLHEsZWUpfVIoNTcxNykoQixFKSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUpe3ZhciBxLGVlO3RoaXMuX2NhY2hlLmFkZChVKTtmb3IodmFyIHRlPVtd''@;'; put 'put ''O3E9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspZWU9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMscSksdGUucHVzaChlZSk7cmV0dXJuIEsuY29uY2F0KHRlKX0sQi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFU9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlz''@;'; put 'put ''Ll9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24ocSl7dmFyIGVlPXFbMTVdO2lmKGVlPDF8fGVlPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgdGU9LTE7Kyt0ZTxlZTspaWYocVt0ZSsoMTYtZWUpXSE9PWVlKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''dW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09ZWUpcmV0dXJuIHEuc2xpY2UoMCwxNi1lZSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFUpKTtpZihVKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEIucHJvdG90eXBlLnNldEF1''@;'; put 'put ''dG9QYWRkaW5nPWZ1bmN0aW9uKFUpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVUsdGhpc30sWS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFUpe3RoaXMuY2FjaGU9Sy5jb25jYXQoW3RoaXMuY2FjaGUsVV0pfSxZLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oVSl7dmFyIHE7aWYoVSl7aWYo''@;'; put 'put ''dGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHF9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMu''@;'; put 'put ''Y2FjaGUuc2xpY2UoMTYpLHE7cmV0dXJuIG51bGx9LFkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LE8uY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24oVSxxKXt2YXIgZWU9SVtVLnRvTG93ZXJDYXNlKCldO2lmKCFlZSl0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgdGU9VihxLCExLGVlLmtleSxlZS5pdik7cmV0dXJuIFgoVSx0ZS5rZXksdGUuaXYpfSxPLmNyZWF0ZURlY2lwaGVyaXY9WH0sMTQ5NDooTSxPLFIpPT57dmFyIHo9Uig0NSksSz1SKDQ4NDgpLEk9Uig5NTA5KS5C''@;'; put 'put ''dWZmZXIsaz1SKDU5NjkpLEU9UigxMDI3KSxqPVIoNDQ5NyksVj1SKDMwNDgpO2Z1bmN0aW9uIEIocSxlZSx0ZSl7RS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBYLHRoaXMuX2NpcGhlcj1uZXcgai5BRVMoZWUpLHRoaXMuX3ByZXY9SS5mcm9tKHRlKSx0aGlzLl9tb2RlPXEsdGhpcy5f''@;'; put 'put ''YXV0b3BhZGRpbmc9ITB9Uig1NzE3KShCLEUpLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7dmFyIGVlLHRlO3RoaXMuX2NhY2hlLmFkZChxKTtmb3IodmFyIG9lPVtdO2VlPXRoaXMuX2NhY2hlLmdldCgpOyl0ZT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxlZSksb2UucHVzaCh0''@;'; put 'put ''ZSk7cmV0dXJuIEkuY29uY2F0KG9lKX07dmFyIFk9SS5hbGxvYygxNiwxNik7ZnVuY3Rpb24gWCgpe3RoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBVKHEsZWUsdGUpe3ZhciBvZT16W3EudG9Mb3dlckNhc2UoKV07aWYoIW9lKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFs''@;'; put 'put ''aWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgZWUmJihlZT1JLmZyb20oZWUpKSxlZS5sZW5ndGghPT1vZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitlZS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgdGUmJih0ZT1JLmZyb20o''@;'; put 'put ''dGUpKSwiR0NNIiE9PW9lLm1vZGUmJnRlLmxlbmd0aCE9PW9lLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrdGUubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PW9lLnR5cGU/bmV3IGsob2UubW9kdWxlLGVlLHRlKToiYXV0aCI9PT1vZS50eXBlP25ldyBLKG9l''@;'; put 'put ''Lm1vZHVsZSxlZSx0ZSk6bmV3IEIob2UubW9kdWxlLGVlLHRlKX1CLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBxPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHEpLHRoaXMuX2NpcGhlci5z''@;'; put 'put ''Y3J1YigpLHE7aWYoIXEuZXF1YWxzKFkpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEIucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0h''@;'; put 'put ''IXEsdGhpc30sWC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHEpe3RoaXMuY2FjaGU9SS5jb25jYXQoW3RoaXMuY2FjaGUscV0pfSxYLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhp''@;'; put 'put ''cy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxfXJldHVybiBudWxsfSxYLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgcT0xNi10aGlzLmNhY2hlLmxlbmd0aCxlZT1JLmFsbG9jVW5zYWZlKHEpLHRlPS0xOysrdGU8cTspZWUud3JpdGVVSW50OChxLHRlKTtyZXR1cm4g''@;'; put 'put ''SS5jb25jYXQoW3RoaXMuY2FjaGUsZWVdKX0sTy5jcmVhdGVDaXBoZXJpdj1VLE8uY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uKHEsZWUpe3ZhciB0ZT16W3EudG9Mb3dlckNhc2UoKV07aWYoIXRlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBvZT1WKGVlLCEx''@;'; put 'put ''LHRlLmtleSx0ZS5pdik7cmV0dXJuIFUocSxvZS5rZXksb2UuaXYpfX0sMzI4ODooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz16LmFsbG9jKDE2LDApO2Z1bmN0aW9uIEkoRSl7dmFyIGo9ei5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGoud3JpdGVVSW50MzJCRShFWzBdPj4+MCww''@;'; put 'put ''KSxqLndyaXRlVUludDMyQkUoRVsxXT4+PjAsNCksai53cml0ZVVJbnQzMkJFKEVbMl0+Pj4wLDgpLGoud3JpdGVVSW50MzJCRShFWzNdPj4+MCwxMiksan1mdW5jdGlvbiBrKEUpe3RoaXMuaD1FLHRoaXMuc3RhdGU9ei5hbGxvYygxNiwwKSx0aGlzLmNhY2hlPXouYWxsb2NVbnNhZmUoMCl9''@;'; put 'put ''ay5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oRSl7Zm9yKHZhciBqPS0xOysrajxFLmxlbmd0aDspdGhpcy5zdGF0ZVtqXV49RVtqXTt0aGlzLl9tdWx0aXBseSgpfSxrLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIEUsaixWLEI9WyhFPXRoaXMuaCkucmVhZFVJbnQz''@;'; put 'put ''MkJFKDApLEUucmVhZFVJbnQzMkJFKDQpLEUucmVhZFVJbnQzMkJFKDgpLEUucmVhZFVJbnQzMkJFKDEyKV0sWT1bMCwwLDAsMF0sWD0tMTsrK1g8MTI4Oyl7Zm9yKHRoaXMuc3RhdGVbfn4oWC84KV0mMTw8Ny1YJTgmJihZWzBdXj1CWzBdLFlbMV1ePUJbMV0sWVsyXV49QlsyXSxZWzNdXj1C''@;'; put 'put ''WzNdKSxWPTAhPSgxJkJbM10pLGo9MztqPjA7ai0tKUJbal09QltqXT4+PjF8KDEmQltqLTFdKTw8MzE7QlswXT1CWzBdPj4+MSxWJiYoQlswXT0tNTIwMDkzNjk2XkJbMF0pfXRoaXMuc3RhdGU9SShZKX0say5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEUpe3ZhciBqO2Zvcih0aGlzLmNh''@;'; put 'put ''Y2hlPXouY29uY2F0KFt0aGlzLmNhY2hlLEVdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KWo9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goail9LGsucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEUsail7cmV0dXJuIHRo''@;'; put 'put ''aXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKHouY29uY2F0KFt0aGlzLmNhY2hlLEtdLDE2KSksdGhpcy5naGFzaChJKFswLEUsMCxqXSkpLHRoaXMuc3RhdGV9LE0uZXhwb3J0cz1rfSw2ODU6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihPKXtmb3IodmFyIFIsej1PLmxlbmd0aDt6LS07KXtp''@;'; put 'put ''ZigyNTUhPT0oUj1PLnJlYWRVSW50OCh6KSkpe1IrKyxPLndyaXRlVUludDgoUix6KTticmVha31PLndyaXRlVUludDgoMCx6KX19fSw1MjkyOihNLE8sUik9Pnt2YXIgej1SKDcyOTUpO08uZW5jcnlwdD1mdW5jdGlvbihLLEkpe3ZhciBrPXooSSxLLl9wcmV2KTtyZXR1cm4gSy5fcHJldj1L''@;'; put 'put ''Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGspLEsuX3ByZXZ9LE8uZGVjcnlwdD1mdW5jdGlvbihLLEkpe3ZhciBrPUsuX3ByZXY7Sy5fcHJldj1JO3ZhciBFPUsuX2NpcGhlci5kZWNyeXB0QmxvY2soSSk7cmV0dXJuIHooRSxrKX19LDYzMTE6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVy''@;'; put 'put ''LEs9Uig3Mjk1KTtmdW5jdGlvbiBJKGssRSxqKXt2YXIgVj1FLmxlbmd0aCxCPUsoRSxrLl9jYWNoZSk7cmV0dXJuIGsuX2NhY2hlPWsuX2NhY2hlLnNsaWNlKFYpLGsuX3ByZXY9ei5jb25jYXQoW2suX3ByZXYsaj9FOkJdKSxCfU8uZW5jcnlwdD1mdW5jdGlvbihrLEUsail7Zm9yKHZhciBW''@;'; put 'put ''LEI9ei5hbGxvY1Vuc2FmZSgwKTtFLmxlbmd0aDspe2lmKDA9PT1rLl9jYWNoZS5sZW5ndGgmJihrLl9jYWNoZT1rLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGsuX3ByZXYpLGsuX3ByZXY9ei5hbGxvY1Vuc2FmZSgwKSksIShrLl9jYWNoZS5sZW5ndGg8PUUubGVuZ3RoKSl7Qj16LmNvbmNhdChb''@;'; put 'put ''QixJKGssRSxqKV0pO2JyZWFrfUI9ei5jb25jYXQoW0IsSShrLEUuc2xpY2UoMCxWPWsuX2NhY2hlLmxlbmd0aCksaildKSxFPUUuc2xpY2UoVil9cmV0dXJuIEJ9fSwxNTEwOihNLE8sUik9Pnt2YXIgej1SKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBLKGssRSxqKXtmb3IodmFyIFYsQixZPS0x''@;'; put 'put ''LFg9MDsrK1k8ODspVj1FJjE8PDctWT8xMjg6MCxYKz0oMTI4JihCPWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldilbMF1eVikpPj5ZJTgsay5fcHJldj1JKGsuX3ByZXYsaj9WOkIpO3JldHVybiBYfWZ1bmN0aW9uIEkoayxFKXt2YXIgaj1rLmxlbmd0aCxWPS0xLEI9ei5hbGxvY1Vu''@;'; put 'put ''c2FmZShrLmxlbmd0aCk7Zm9yKGs9ei5jb25jYXQoW2ssei5mcm9tKFtFXSldKTsrK1Y8ajspQltWXT1rW1ZdPDwxfGtbVisxXT4+NztyZXR1cm4gQn1PLmVuY3J5cHQ9ZnVuY3Rpb24oayxFLGope2Zvcih2YXIgVj1FLmxlbmd0aCxCPXouYWxsb2NVbnNhZmUoViksWT0tMTsrK1k8VjspQltZ''@;'; put 'put ''XT1LKGssRVtZXSxqKTtyZXR1cm4gQn19LDE5NjQ6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoSSxrLEUpe3ZhciBqPUkuX2NpcGhlci5lbmNyeXB0QmxvY2soSS5fcHJldilbMF1eaztyZXR1cm4gSS5fcHJldj16LmNvbmNhdChbSS5fcHJldi5zbGljZSgxKSx6''@;'; put 'put ''LmZyb20oW0U/azpqXSldKSxqfU8uZW5jcnlwdD1mdW5jdGlvbihJLGssRSl7Zm9yKHZhciBqPWsubGVuZ3RoLFY9ei5hbGxvY1Vuc2FmZShqKSxCPS0xOysrQjxqOylWW0JdPUsoSSxrW0JdLEUpO3JldHVybiBWfX0sNjAwOTooTSxPLFIpPT57dmFyIHo9Uig3Mjk1KSxLPVIoOTUwOSkuQnVm''@;'; put 'put ''ZmVyLEk9Uig2ODUpO2Z1bmN0aW9uIGsoRSl7dmFyIGo9RS5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhFLl9wcmV2KTtyZXR1cm4gSShFLl9wcmV2KSxqfU8uZW5jcnlwdD1mdW5jdGlvbihFLGope3ZhciBWPU1hdGguY2VpbChqLmxlbmd0aC8xNiksQj1FLl9jYWNoZS5sZW5ndGg7RS5fY2Fj''@;'; put 'put ''aGU9Sy5jb25jYXQoW0UuX2NhY2hlLEsuYWxsb2NVbnNhZmUoMTYqVildKTtmb3IodmFyIFk9MDtZPFY7WSsrKXt2YXIgWD1rKEUpLFU9QisxNipZO0UuX2NhY2hlLndyaXRlVUludDMyQkUoWFswXSxVKzApLEUuX2NhY2hlLndyaXRlVUludDMyQkUoWFsxXSxVKzQpLEUuX2NhY2hlLndyaXRl''@;'; put 'put ''VUludDMyQkUoWFsyXSxVKzgpLEUuX2NhY2hlLndyaXRlVUludDMyQkUoWFszXSxVKzEyKX12YXIgcT1FLl9jYWNoZS5zbGljZSgwLGoubGVuZ3RoKTtyZXR1cm4gRS5fY2FjaGU9RS5fY2FjaGUuc2xpY2Uoai5sZW5ndGgpLHooaixxKX19LDEwODQ6KE0sTyk9PntPLmVuY3J5cHQ9ZnVuY3Rp''@;'; put 'put ''b24oUix6KXtyZXR1cm4gUi5fY2lwaGVyLmVuY3J5cHRCbG9jayh6KX0sTy5kZWNyeXB0PWZ1bmN0aW9uKFIseil7cmV0dXJuIFIuX2NpcGhlci5kZWNyeXB0QmxvY2soeil9fSw0NTooTSxPLFIpPT57dmFyIHo9e0VDQjpSKDEwODQpLENCQzpSKDUyOTIpLENGQjpSKDYzMTEpLENGQjg6Uigx''@;'; put 'put ''OTY0KSxDRkIxOlIoMTUxMCksT0ZCOlIoODg2MSksQ1RSOlIoNjAwOSksR0NNOlIoNjAwOSl9LEs9Uig0OTQ2KTtmb3IodmFyIEkgaW4gSylLW0ldLm1vZHVsZT16W0tbSV0ubW9kZV07TS5leHBvcnRzPUt9LDg4NjE6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig3Mjk1KTtm''@;'; put 'put ''dW5jdGlvbiBJKGspe3JldHVybiBrLl9wcmV2PWsuX2NpcGhlci5lbmNyeXB0QmxvY2soay5fcHJldiksay5fcHJldn1PLmVuY3J5cHQ9ZnVuY3Rpb24oayxFKXtmb3IoO2suX2NhY2hlLmxlbmd0aDxFLmxlbmd0aDspay5fY2FjaGU9ei5jb25jYXQoW2suX2NhY2hlLEkoayldKTt2YXIgaj1r''@;'; put 'put ''Ll9jYWNoZS5zbGljZSgwLEUubGVuZ3RoKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoRS5sZW5ndGgpLEsoRSxqKX19LDU5Njk6KE0sTyxSKT0+e3ZhciB6PVIoNDQ5NyksSz1SKDk1MDkpLkJ1ZmZlcixJPVIoMTAyNyk7ZnVuY3Rpb24gayhFLGosVixCKXtJLmNhbGwodGhpcyks''@;'; put 'put ''dGhpcy5fY2lwaGVyPW5ldyB6LkFFUyhqKSx0aGlzLl9wcmV2PUsuZnJvbShWKSx0aGlzLl9jYWNoZT1LLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPUsuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1CLHRoaXMuX21vZGU9RX1SKDU3MTcpKGssSSksay5wcm90b3R5cGUuX3Vw''@;'; put 'put ''ZGF0ZT1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsRSx0aGlzLl9kZWNyeXB0KX0say5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LE0uZXhwb3J0cz1rfSwzNjE0OihNLE8sUik9Pnt2YXIgej1SKDc2NjcpLEs9Uig0''@;'; put 'put ''Njk2KSxJPVIoNDUpLGs9Uig5NzE1KSxFPVIoMzA0OCk7ZnVuY3Rpb24gaihCLFksWCl7aWYoQj1CLnRvTG93ZXJDYXNlKCksSVtCXSlyZXR1cm4gSy5jcmVhdGVDaXBoZXJpdihCLFksWCk7aWYoa1tCXSlyZXR1cm4gbmV3IHooe2tleTpZLGl2OlgsbW9kZTpCfSk7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gVihCLFksWCl7aWYoQj1CLnRvTG93ZXJDYXNlKCksSVtCXSlyZXR1cm4gSy5jcmVhdGVEZWNpcGhlcml2KEIsWSxYKTtpZihrW0JdKXJldHVybiBuZXcgeih7a2V5OlksaXY6WCxtb2RlOkIsZGVjcnlwdDohMH0pO3Rocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfU8uY3JlYXRlQ2lwaGVyPU8uQ2lwaGVyPWZ1bmN0aW9uKEIsWSl7dmFyIFgsVTtpZihCPUIudG9Mb3dlckNhc2UoKSxJW0JdKVg9SVtCXS5rZXksVT1JW0JdLml2O2Vsc2V7aWYoIWtbQl0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52''@;'; put 'put ''YWxpZCBzdWl0ZSB0eXBlIik7WD04KmtbQl0ua2V5LFU9a1tCXS5pdn12YXIgcT1FKFksITEsWCxVKTtyZXR1cm4gaihCLHEua2V5LHEuaXYpfSxPLmNyZWF0ZUNpcGhlcml2PU8uQ2lwaGVyaXY9aixPLmNyZWF0ZURlY2lwaGVyPU8uRGVjaXBoZXI9ZnVuY3Rpb24oQixZKXt2YXIgWCxVO2lm''@;'; put 'put ''KEI9Qi50b0xvd2VyQ2FzZSgpLElbQl0pWD1JW0JdLmtleSxVPUlbQl0uaXY7ZWxzZXtpZigha1tCXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtYPTgqa1tCXS5rZXksVT1rW0JdLml2fXZhciBxPUUoWSwhMSxYLFUpO3JldHVybiBWKEIscS5rZXkscS5pdil9''@;'; put 'put ''LE8uY3JlYXRlRGVjaXBoZXJpdj1PLkRlY2lwaGVyaXY9VixPLmxpc3RDaXBoZXJzPU8uZ2V0Q2lwaGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhrKS5jb25jYXQoSy5nZXRDaXBoZXJzKCkpfX0sNzY2NzooTSxPLFIpPT57dmFyIHo9UigxMDI3KSxLPVIoNTI1MSksST1SKDU3''@;'; put 'put ''MTcpLGs9Uig5NTA5KS5CdWZmZXIsRT17ImRlcy1lZGUzLWNiYyI6Sy5DQkMuaW5zdGFudGlhdGUoSy5FREUpLCJkZXMtZWRlMyI6Sy5FREUsImRlcy1lZGUtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShLLkVERSksImRlcy1lZGUiOksuRURFLCJkZXMtY2JjIjpLLkNCQy5pbnN0YW50aWF0ZShL''@;'; put 'put ''LkRFUyksImRlcy1lY2IiOksuREVTfTtmdW5jdGlvbiBqKFYpe3ouY2FsbCh0aGlzKTt2YXIgQixZPVYubW9kZS50b0xvd2VyQ2FzZSgpLFg9RVtZXTtCPVYuZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciBVPVYua2V5O2suaXNCdWZmZXIoVSl8fChVPWsuZnJvbShVKSksImRlcy1l''@;'; put 'put ''ZGUiIT09WSYmImRlcy1lZGUtY2JjIiE9PVl8fChVPWsuY29uY2F0KFtVLFUuc2xpY2UoMCw4KV0pKTt2YXIgcT1WLml2O2suaXNCdWZmZXIocSl8fChxPWsuZnJvbShxKSksdGhpcy5fZGVzPVguY3JlYXRlKHtrZXk6VSxpdjpxLHR5cGU6Qn0pfUUuZGVzPUVbImRlcy1jYmMiXSxFLmRlczM9''@;'; put 'put ''RVsiZGVzLWVkZTMtY2JjIl0sTS5leHBvcnRzPWosSShqLHopLGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIGsuZnJvbSh0aGlzLl9kZXMudXBkYXRlKFYpKX0sai5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIGsuZnJvbSh0aGlzLl9kZXMuZmluYWwo''@;'; put 'put ''KSl9fSw5NzE1OihNLE8pPT57T1siZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxPWyJkZXMtY2JjIl09Ty5kZXM9e2tleTo4LGl2Ojh9LE9bImRlcy1lZGUzLWNiYyJdPU8uZGVzMz17a2V5OjI0LGl2Ojh9LE9bImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxPWyJkZXMtZWRlLWNiYyJdPXtrZXk6''@;'; put 'put ''MTYsaXY6OH0sT1siZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9UigzNTUwKSxJPVIoMTc5OCk7ZnVuY3Rpb24gayhqKXt2YXIgVixCPWoubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97Vj1uZXcgSyhJKEIpKX13aGlsZShWLmNt''@;'; put 'put ''cChqLm1vZHVsdXMpPj0wfHwhVi51bW9kKGoucHJpbWUxKXx8IVYudW1vZChqLnByaW1lMikpO3JldHVybiBWfWZ1bmN0aW9uIEUoaixWKXt2YXIgY2UsRyxCPXtibGluZGVyOihHPWsoY2U9VikpLnRvUmVkKEsubW9udChjZS5tb2R1bHVzKSkucmVkUG93KG5ldyBLKGNlLnB1YmxpY0V4cG9u''@;'; put 'put ''ZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpHLmludm0oY2UubW9kdWx1cyl9LFk9Vi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxYPW5ldyBLKGopLm11bChCLmJsaW5kZXIpLnVtb2QoVi5tb2R1bHVzKSxVPVgudG9SZWQoSy5tb250KFYucHJpbWUxKSkscT1YLnRvUmVkKEsubW9udChWLnByaW1l''@;'; put 'put ''MikpLGVlPVYuY29lZmZpY2llbnQsdGU9Vi5wcmltZTEsb2U9Vi5wcmltZTIsc2U9VS5yZWRQb3coVi5leHBvbmVudDEpLmZyb21SZWQoKSxoZT1xLnJlZFBvdyhWLmV4cG9uZW50MikuZnJvbVJlZCgpLHVlPXNlLmlzdWIoaGUpLmltdWwoZWUpLnVtb2QodGUpLmltdWwob2UpO3JldHVybiBo''@;'; put 'put ''ZS5pYWRkKHVlKS5pbXVsKEIudW5ibGluZGVyKS51bW9kKFYubW9kdWx1cykudG9BcnJheUxpa2UoeiwiYmUiLFkpfUUuZ2V0cj1rLE0uZXhwb3J0cz1FfSw2MDQyOihNLE8sUik9PntNLmV4cG9ydHM9Uig1MjA3KX0sNDc0MzooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDM0''@;'; put 'put ''ODIpLEk9Uig4NDczKSxrPVIoNTcxNyksRT1SKDI5NTcpLGo9Uig3NzUzKSxWPVIoNTIwNyk7ZnVuY3Rpb24gQihxKXtJLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGVlPVZbcV07aWYoIWVlKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBl''@;'; put 'put ''PWVlLmhhc2gsdGhpcy5faGFzaD1LKGVlLmhhc2gpLHRoaXMuX3RhZz1lZS5pZCx0aGlzLl9zaWduVHlwZT1lZS5zaWdufWZ1bmN0aW9uIFkocSl7SS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBlZT1WW3FdO2lmKCFlZSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3Qi''@;'; put 'put ''KTt0aGlzLl9oYXNoPUsoZWUuaGFzaCksdGhpcy5fdGFnPWVlLmlkLHRoaXMuX3NpZ25UeXBlPWVlLnNpZ259ZnVuY3Rpb24gWChxKXtyZXR1cm4gbmV3IEIocSl9ZnVuY3Rpb24gVShxKXtyZXR1cm4gbmV3IFkocSl9T2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbihxKXtWW3FdLmlk''@;'; put 'put ''PXouZnJvbShWW3FdLmlkLCJoZXgiKSxWW3EudG9Mb3dlckNhc2UoKV09VltxXX0pLGsoQixJLldyaXRhYmxlKSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24ocSxlZSx0ZSl7dGhpcy5faGFzaC51cGRhdGUocSksdGUoKX0sQi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHEsZWUpe3Jl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgcSYmKHE9ei5mcm9tKHEsZWUpKSx0aGlzLl9oYXNoLnVwZGF0ZShxKSx0aGlzfSxCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHEsZWUpe3RoaXMuZW5kKCk7dmFyIHRlPXRoaXMuX2hhc2guZGlnZXN0KCksb2U9RSh0ZSxxLHRoaXMuX2hhc2hUeXBlLHRo''@;'; put 'put ''aXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIGVlP29lLnRvU3RyaW5nKGVlKTpvZX0sayhZLEkuV3JpdGFibGUpLFkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLGVlLHRlKXt0aGlzLl9oYXNoLnVwZGF0ZShxKSx0ZSgpfSxZLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24ocSxl''@;'; put 'put ''ZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxJiYocT16LmZyb20ocSxlZSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LFkucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihxLGVlLHRlKXsic3RyaW5nIj09dHlwZW9mIGVlJiYoZWU9ei5mcm9tKGVlLHRlKSksdGhpcy5lbmQoKTt2YXIg''@;'; put 'put ''b2U9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gaihlZSxvZSxxLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LE0uZXhwb3J0cz17U2lnbjpYLFZlcmlmeTpVLGNyZWF0ZVNpZ246WCxjcmVhdGVWZXJpZnk6VX19LDI5NTc6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9Uig4''@;'; put 'put ''MzU1KSxJPVIoMzY2Myksaz1SKDY5NDgpLmVjLEU9UigzNTUwKSxqPVIoOTgwKSxWPVIoMTMwOCk7ZnVuY3Rpb24gQihxLGVlLHRlLG9lKXtpZigocT16LmZyb20ocS50b0FycmF5KCkpKS5sZW5ndGg8ZWUuYnl0ZUxlbmd0aCgpKXt2YXIgc2U9ei5hbGxvYyhlZS5ieXRlTGVuZ3RoKCktcS5s''@;'; put 'put ''ZW5ndGgpO3E9ei5jb25jYXQoW3NlLHFdKX12YXIgaGU9dGUubGVuZ3RoLHVlPWZ1bmN0aW9uKGIsRCl7Yj0oYj1ZKGIsRCkpLm1vZChEKTt2YXIgSD16LmZyb20oYi50b0FycmF5KCkpO2lmKEgubGVuZ3RoPEQuYnl0ZUxlbmd0aCgpKXt2YXIgTj16LmFsbG9jKEQuYnl0ZUxlbmd0aCgpLUgu''@;'; put 'put ''bGVuZ3RoKTtIPXouY29uY2F0KFtOLEhdKX1yZXR1cm4gSH0odGUsZWUpLGNlPXouYWxsb2MoaGUpO2NlLmZpbGwoMSk7dmFyIEc9ei5hbGxvYyhoZSk7cmV0dXJuIEc9SyhvZSxHKS51cGRhdGUoY2UpLnVwZGF0ZSh6LmZyb20oWzBdKSkudXBkYXRlKHEpLnVwZGF0ZSh1ZSkuZGlnZXN0KCks''@;'; put 'put ''Y2U9SyhvZSxHKS51cGRhdGUoY2UpLmRpZ2VzdCgpLHtrOkc9SyhvZSxHKS51cGRhdGUoY2UpLnVwZGF0ZSh6LmZyb20oWzFdKSkudXBkYXRlKHEpLnVwZGF0ZSh1ZSkuZGlnZXN0KCksdjpjZT1LKG9lLEcpLnVwZGF0ZShjZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFkocSxlZSl7dmFyIHRlPW5l''@;'; put 'put ''dyBFKHEpLG9lPShxLmxlbmd0aDw8MyktZWUuYml0TGVuZ3RoKCk7cmV0dXJuIG9lPjAmJnRlLmlzaHJuKG9lKSx0ZX1mdW5jdGlvbiBYKHEsZWUsdGUpe3ZhciBvZSxzZTtkb3tmb3Iob2U9ei5hbGxvYygwKTs4Km9lLmxlbmd0aDxxLmJpdExlbmd0aCgpOyllZS52PUsodGUsZWUuaykudXBk''@;'; put 'put ''YXRlKGVlLnYpLmRpZ2VzdCgpLG9lPXouY29uY2F0KFtvZSxlZS52XSk7c2U9WShvZSxxKSxlZS5rPUsodGUsZWUuaykudXBkYXRlKGVlLnYpLnVwZGF0ZSh6LmZyb20oWzBdKSkuZGlnZXN0KCksZWUudj1LKHRlLGVlLmspLnVwZGF0ZShlZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PXNlLmNt''@;'; put 'put ''cChxKSk7cmV0dXJuIHNlfWZ1bmN0aW9uIFUocSxlZSx0ZSxvZSl7cmV0dXJuIHEudG9SZWQoRS5tb250KHRlKSkucmVkUG93KGVlKS5mcm9tUmVkKCkubW9kKG9lKX1NLmV4cG9ydHM9ZnVuY3Rpb24ocSxlZSx0ZSxvZSxzZSl7dmFyIGhlPWooZWUpO2lmKGhlLmN1cnZlKXtpZigiZWNkc2Ei''@;'; put 'put ''IT09b2UmJiJlY2RzYS9yc2EiIT09b2UpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKGIsRCl7dmFyIEg9VltELmN1cnZlLmpvaW4oIi4iKV07aWYoIUgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrRC5jdXJ2ZS5qb2lu''@;'; put 'put ''KCIuIikpO3ZhciBnPW5ldyBrKEgpLmtleUZyb21Qcml2YXRlKEQucHJpdmF0ZUtleSkuc2lnbihiKTtyZXR1cm4gei5mcm9tKGcudG9ERVIoKSl9KHEsaGUpfWlmKCJkc2EiPT09aGUudHlwZSl7aWYoImRzYSIhPT1vZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUi''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24oYixELEgpe2Zvcih2YXIgTixnPUQucGFyYW1zLnByaXZfa2V5LEM9RC5wYXJhbXMucCxTPUQucGFyYW1zLnEsdj1ELnBhcmFtcy5nLHA9bmV3IEUoMCksdz1ZKGIsUykubW9kKFMpLEo9ITEsbmU9QihnLFMsYixIKTshMT09PUo7KXA9VSh2LE49WChTLG5lLEgp''@;'; put 'put ''LEMsUyksMD09PShKPU4uaW52bShTKS5pbXVsKHcuYWRkKGcubXVsKHApKSkubW9kKFMpKS5jbXBuKDApJiYoSj0hMSxwPW5ldyBFKDApKTtyZXR1cm4gZnVuY3Rpb24oZGUsZmUpe2RlPWRlLnRvQXJyYXkoKSxmZT1mZS50b0FycmF5KCksMTI4JmRlWzBdJiYoZGU9WzBdLmNvbmNhdChkZSkp''@;'; put 'put ''LDEyOCZmZVswXSYmKGZlPVswXS5jb25jYXQoZmUpKTt2YXIgTGU9WzQ4LGRlLmxlbmd0aCtmZS5sZW5ndGgrNCwyLGRlLmxlbmd0aF07cmV0dXJuIExlPUxlLmNvbmNhdChkZSxbMixmZS5sZW5ndGhdLGZlKSx6LmZyb20oTGUpfShwLEopfShxLGhlLHRlKX1pZigicnNhIiE9PW9lJiYiZWNk''@;'; put 'put ''c2EvcnNhIiE9PW9lKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3E9ei5jb25jYXQoW3NlLHFdKTtmb3IodmFyIHVlPWhlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGNlPVswLDFdO3EubGVuZ3RoK2NlLmxlbmd0aCsxPHVlOyljZS5wdXNoKDI1NSk7Y2UucHVzaCgw''@;'; put 'put ''KTtmb3IodmFyIEc9LTE7KytHPHEubGVuZ3RoOyljZS5wdXNoKHFbR10pO3JldHVybiBJKGNlLGhlKX0sTS5leHBvcnRzLmdldEtleT1CLE0uZXhwb3J0cy5tYWtlS2V5PVh9LDc3NTM6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9UigzNTUwKSxJPVIoNjk0OCkuZWMsaz1SKDk4''@;'; put 'put ''MCksRT1SKDEzMDgpO2Z1bmN0aW9uIGooVixCKXtpZihWLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKFYuY21wKEIpPj1CKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1NLmV4cG9ydHM9ZnVuY3Rpb24oVixCLFksWCxVKXt2YXIgcT1rKFkpO2lm''@;'; put 'put ''KCJlYyI9PT1xLnR5cGUpe2lmKCJlY2RzYSIhPT1YJiYiZWNkc2EvcnNhIiE9PVgpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD1FW2IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighRCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitiLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBJKEQpLnZlcmlmeShHLGNlLGIuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oVixCLHEpfWlmKCJkc2EiPT09cS50eXBlKXtpZigiZHNhIiE9PVgpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyxiKXt2YXIgRD1iLmRhdGEucCxIPWIuZGF0YS5xLE49Yi5kYXRhLmcsZz1iLmRhdGEucHViX2tleSxDPWsuc2lnbmF0dXJlLmRlY29kZShjZSwiZGVyIiksUz1DLnMsdj1DLnI7aihTLEgp''@;'; put 'put ''LGoodixIKTt2YXIgcD1LLm1vbnQoRCksdz1TLmludm0oSCk7cmV0dXJuIDA9PT1OLnRvUmVkKHApLnJlZFBvdyhuZXcgSyhHKS5tdWwodykubW9kKEgpKS5mcm9tUmVkKCkubXVsKGcudG9SZWQocCkucmVkUG93KHYubXVsKHcpLm1vZChIKSkuZnJvbVJlZCgpKS5tb2QoRCkubW9kKEgpLmNt''@;'; put 'put ''cCh2KX0oVixCLHEpfWlmKCJyc2EiIT09WCYmImVjZHNhL3JzYSIhPT1YKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7Qj16LmNvbmNhdChbVSxCXSk7Zm9yKHZhciBlZT1xLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHRlPVsxXSxvZT0wO0IubGVuZ3RoK3RlLmxlbmd0''@;'; put 'put ''aCsyPGVlOyl0ZS5wdXNoKDI1NSksb2UrKzt0ZS5wdXNoKDApO2Zvcih2YXIgc2U9LTE7KytzZTxCLmxlbmd0aDspdGUucHVzaChCW3NlXSk7dGU9ei5mcm9tKHRlKTt2YXIgaGU9Sy5tb250KHEubW9kdWx1cyk7Vj0oVj1uZXcgSyhWKS50b1JlZChoZSkpLnJlZFBvdyhuZXcgSyhxLnB1Ymxp''@;'; put 'put ''Y0V4cG9uZW50KSksVj16LmZyb20oVi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdWU9b2U8OD8xOjA7Zm9yKGVlPU1hdGgubWluKFYubGVuZ3RoLHRlLmxlbmd0aCksVi5sZW5ndGghPT10ZS5sZW5ndGgmJih1ZT0xKSxzZT0tMTsrK3NlPGVlOyl1ZXw9VltzZV1edGVbc2VdO3JldHVybiAw''@;'; put 'put ''PT09dWV9fSw3Mjk1OihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oSyxJKXtmb3IodmFyIGs9TWF0aC5taW4oSy5sZW5ndGgsSS5sZW5ndGgpLEU9bmV3IHooayksaj0wO2o8azsrK2opRVtqXT1LW2pdXklbal07cmV0dXJuIEV9fSw4NzY0OihNLE8s''@;'; put 'put ''Uik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MTA4KTtjb25zdCBLPVIoOTc0MiksST1SKDY0NSksaz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7Ty5C''@;'; put 'put ''dWZmZXI9VixPLlNsb3dCdWZmZXI9ZnVuY3Rpb24oTWUpe3JldHVybitNZSE9TWUmJihNZT0wKSxWLmFsbG9jKCtNZSl9LE8uSU5TUEVDVF9NQVhfQllURVM9NTA7Y29uc3QgRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIGooTWUpe2lmKE1lPkUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1''@;'; put 'put ''ZSAiJytNZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7Y29uc3QgRGU9bmV3IFVpbnQ4QXJyYXkoTWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRGUsVi5wcm90b3R5cGUpLERlfWZ1bmN0aW9uIFYoTWUsRGUsemUpe2lmKCJudW1iZXIiPT10eXBlb2YgTWUpe2lm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgRGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7cmV0dXJuIFgoTWUpfXJldHVybiBCKE1lLERlLHplKX1mdW5jdGlvbiBCKE1lLERlLHplKXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIE1lKXJldHVybiBmdW5jdGlvbihNdCxIdCl7aWYoInN0cmluZyI9PXR5cGVvZiBIdCYmIiIhPT1IdHx8KEh0PSJ1dGY4IiksIVYuaXNFbmNvZGluZyhIdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitIdCk7Y29uc3QgUHQ9MHx0''@;'; put 'put ''ZShNdCxIdCk7bGV0IG9uPWooUHQpO2NvbnN0IENuPW9uLndyaXRlKE10LEh0KTtyZXR1cm4gQ24hPT1QdCYmKG9uPW9uLnNsaWNlKDAsQ24pKSxvbn0oTWUsRGUpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhNZSkpcmV0dXJuIGZ1bmN0aW9uKE10KXtpZihUZShNdCxVaW50OEFycmF5KSl7Y29u''@;'; put 'put ''c3QgSHQ9bmV3IFVpbnQ4QXJyYXkoTXQpO3JldHVybiBxKEh0LmJ1ZmZlcixIdC5ieXRlT2Zmc2V0LEh0LmJ5dGVMZW5ndGgpfXJldHVybiBVKE10KX0oTWUpO2lmKG51bGw9PU1lKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0''@;'; put 'put ''cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE1lKTtpZihUZShNZSxBcnJheUJ1ZmZlcil8fE1lJiZUZShNZS5idWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUi''@;'; put 'put ''JiYoVGUoTWUsU2hhcmVkQXJyYXlCdWZmZXIpfHxNZSYmVGUoTWUuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHEoTWUsRGUsemUpO2lmKCJudW1iZXIiPT10eXBlb2YgTWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2Yg''@;'; put 'put ''dHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7Y29uc3QgaXQ9TWUudmFsdWVPZiYmTWUudmFsdWVPZigpO2lmKG51bGwhPWl0JiZpdCE9PU1lKXJldHVybiBWLmZyb20oaXQsRGUsemUpO2NvbnN0IHV0PWZ1bmN0aW9uKE10KXtpZihWLmlzQnVmZmVyKE10KSl7Y29uc3QgSHQ9''@;'; put 'put ''MHxlZShNdC5sZW5ndGgpLFB0PWooSHQpO3JldHVybiAwPT09UHQubGVuZ3RofHxNdC5jb3B5KFB0LDAsMCxIdCksUHR9cmV0dXJuIHZvaWQgMCE9PU10Lmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIE10Lmxlbmd0aHx8cWUoTXQubGVuZ3RoKT9qKDApOlUoTXQpOiJCdWZmZXIiPT09TXQudHlw''@;'; put 'put ''ZSYmQXJyYXkuaXNBcnJheShNdC5kYXRhKT9VKE10LmRhdGEpOnZvaWQgMH0oTWUpO2lmKHV0KXJldHVybiB1dDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgTWVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gVi5m''@;'; put 'put ''cm9tKE1lW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLERlLHplKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVj''@;'; put 'put ''ZWl2ZWQgdHlwZSAiK3R5cGVvZiBNZSl9ZnVuY3Rpb24gWShNZSl7aWYoIm51bWJlciIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKE1lPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAi''@;'; put 'put ''JytNZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gWChNZSl7cmV0dXJuIFkoTWUpLGooTWU8MD8wOjB8ZWUoTWUpKX1mdW5jdGlvbiBVKE1lKXtjb25zdCBEZT1NZS5sZW5ndGg8MD8wOjB8ZWUoTWUubGVuZ3RoKSx6ZT1qKERlKTtmb3IobGV0IGl0PTA7aXQ8''@;'; put 'put ''RGU7aXQrPTEpemVbaXRdPTI1NSZNZVtpdF07cmV0dXJuIHplfWZ1bmN0aW9uIHEoTWUsRGUsemUpe2lmKERlPDB8fE1lLmJ5dGVMZW5ndGg8RGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKE1lLmJ5dGVMZW5ndGg8RGUr''@;'; put 'put ''KHplfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7bGV0IGl0O3JldHVybiBpdD12b2lkIDA9PT1EZSYmdm9pZCAwPT09emU/bmV3IFVpbnQ4QXJyYXkoTWUpOnZvaWQgMD09PXplP25ldyBVaW50OEFycmF5KE1lLERlKTpu''@;'; put 'put ''ZXcgVWludDhBcnJheShNZSxEZSx6ZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGl0LFYucHJvdG90eXBlKSxpdH1mdW5jdGlvbiBlZShNZSl7aWYoTWU+PUUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTog''@;'; put 'put ''MHgiK0UudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxNZX1mdW5jdGlvbiB0ZShNZSxEZSl7aWYoVi5pc0J1ZmZlcihNZSkpcmV0dXJuIE1lLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoTWUpfHxUZShNZSxBcnJheUJ1ZmZlcikpcmV0dXJuIE1lLmJ5dGVMZW5ndGg7aWYo''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBNZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTWUpO2NvbnN0IHplPU1lLmxlbmd0aCxpdD1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFpdCYmMD09PXplKXJldHVybiAwO2xldCB1dD0hMTtmb3IoOzspc3dpdGNoKERlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB6ZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVy''@;'; put 'put ''biBQZShNZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMip6ZTtjYXNlImhleCI6cmV0dXJuIHplPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIGJlKE1lKS5sZW5ndGg7ZGVmYXVsdDppZih1dClyZXR1cm4gaXQ/LTE6''@;'; put 'put ''UGUoTWUpLmxlbmd0aDtEZT0oIiIrRGUpLnRvTG93ZXJDYXNlKCksdXQ9ITB9fWZ1bmN0aW9uIG9lKE1lLERlLHplKXtsZXQgaXQ9ITE7aWYoKHZvaWQgMD09PURlfHxEZTwwKSYmKERlPTApLERlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PXplfHx6ZT50aGlzLmxlbmd0aCkmJih6ZT10aGlz''@;'; put 'put ''Lmxlbmd0aCksemU8PTApfHwoemU+Pj49MCk8PShEZT4+Pj0wKSlyZXR1cm4iIjtmb3IoTWV8fChNZT0idXRmOCIpOzspc3dpdGNoKE1lKXtjYXNlImhleCI6cmV0dXJuIHAodGhpcyxEZSx6ZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gZyh0aGlzLERlLHplKTtjYXNlImFzY2lp''@;'; put 'put ''IjpyZXR1cm4gUyh0aGlzLERlLHplKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB2KHRoaXMsRGUsemUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTih0aGlzLERlLHplKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHco''@;'; put 'put ''dGhpcyxEZSx6ZSk7ZGVmYXVsdDppZihpdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK01lKTtNZT0oTWUrIiIpLnRvTG93ZXJDYXNlKCksaXQ9ITB9fWZ1bmN0aW9uIHNlKE1lLERlLHplKXtjb25zdCBpdD1NZVtEZV07TWVbRGVdPU1lW3plXSxNZVt6ZV09aXR9''@;'; put 'put ''ZnVuY3Rpb24gaGUoTWUsRGUsemUsaXQsdXQpe2lmKDA9PT1NZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiB6ZT8oaXQ9emUsemU9MCk6emU+MjE0NzQ4MzY0Nz96ZT0yMTQ3NDgzNjQ3OnplPC0yMTQ3NDgzNjQ4JiYoemU9LTIxNDc0ODM2NDgpLHFlKHplPSt6ZSkmJih6''@;'; put 'put ''ZT11dD8wOk1lLmxlbmd0aC0xKSx6ZTwwJiYoemU9TWUubGVuZ3RoK3plKSx6ZT49TWUubGVuZ3RoKXtpZih1dClyZXR1cm4tMTt6ZT1NZS5sZW5ndGgtMX1lbHNlIGlmKHplPDApe2lmKCF1dClyZXR1cm4tMTt6ZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgRGUmJihEZT1WLmZyb20oRGUsaXQp''@;'; put 'put ''KSxWLmlzQnVmZmVyKERlKSlyZXR1cm4gMD09PURlLmxlbmd0aD8tMTp1ZShNZSxEZSx6ZSxpdCx1dCk7aWYoIm51bWJlciI9PXR5cGVvZiBEZSlyZXR1cm4gRGUmPTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj91dD9VaW50OEFycmF5LnByb3Rv''@;'; put 'put ''dHlwZS5pbmRleE9mLmNhbGwoTWUsRGUsemUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoTWUsRGUsemUpOnVlKE1lLFtEZV0semUsaXQsdXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9u''@;'; put 'put ''IHVlKE1lLERlLHplLGl0LHV0KXtsZXQgTXQsSHQ9MSxQdD1NZS5sZW5ndGgsb249RGUubGVuZ3RoO2lmKHZvaWQgMCE9PWl0JiYoInVjczIiPT09KGl0PVN0cmluZyhpdCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT1pdHx8InV0ZjE2bGUiPT09aXR8fCJ1dGYtMTZsZSI9PT1pdCkpe2lm''@;'; put 'put ''KE1lLmxlbmd0aDwyfHxEZS5sZW5ndGg8MilyZXR1cm4tMTtIdD0yLFB0Lz0yLG9uLz0yLHplLz0yfWZ1bmN0aW9uIENuKFV0LGJuKXtyZXR1cm4gMT09PUh0P1V0W2JuXTpVdC5yZWFkVUludDE2QkUoYm4qSHQpfWlmKHV0KXtsZXQgVXQ9LTE7Zm9yKE10PXplO010PFB0O010KyspaWYoQ24o''@;'; put 'put ''TWUsTXQpPT09Q24oRGUsLTE9PT1VdD8wOk10LVV0KSl7aWYoLTE9PT1VdCYmKFV0PU10KSxNdC1VdCsxPT09b24pcmV0dXJuIFV0Kkh0fWVsc2UtMSE9PVV0JiYoTXQtPU10LVV0KSxVdD0tMX1lbHNlIGZvcih6ZStvbj5QdCYmKHplPVB0LW9uKSxNdD16ZTtNdD49MDtNdC0tKXtsZXQgVXQ9''@;'; put 'put ''ITA7Zm9yKGxldCBibj0wO2JuPG9uO2JuKyspaWYoQ24oTWUsTXQrYm4pIT09Q24oRGUsYm4pKXtVdD0hMTticmVha31pZihVdClyZXR1cm4gTXR9cmV0dXJuLTF9ZnVuY3Rpb24gY2UoTWUsRGUsemUsaXQpe3plPU51bWJlcih6ZSl8fDA7Y29uc3QgdXQ9TWUubGVuZ3RoLXplO2l0PyhpdD1O''@;'; put 'put ''dW1iZXIoaXQpKT51dCYmKGl0PXV0KTppdD11dDtjb25zdCBNdD1EZS5sZW5ndGg7bGV0IEh0O2ZvcihpdD5NdC8yJiYoaXQ9TXQvMiksSHQ9MDtIdDxpdDsrK0h0KXtjb25zdCBQdD1wYXJzZUludChEZS5zdWJzdHIoMipIdCwyKSwxNik7aWYocWUoUHQpKXJldHVybiBIdDtNZVt6ZStIdF09''@;'; put 'put ''UHR9cmV0dXJuIEh0fWZ1bmN0aW9uIEcoTWUsRGUsemUsaXQpe3JldHVybiBBZShQZShEZSxNZS5sZW5ndGgtemUpLE1lLHplLGl0KX1mdW5jdGlvbiBiKE1lLERlLHplLGl0KXtyZXR1cm4gQWUoZnVuY3Rpb24odXQpe2NvbnN0IE10PVtdO2ZvcihsZXQgSHQ9MDtIdDx1dC5sZW5ndGg7KytI''@;'; put 'put ''dClNdC5wdXNoKDI1NSZ1dC5jaGFyQ29kZUF0KEh0KSk7cmV0dXJuIE10fShEZSksTWUsemUsaXQpfWZ1bmN0aW9uIEQoTWUsRGUsemUsaXQpe3JldHVybiBBZShiZShEZSksTWUsemUsaXQpfWZ1bmN0aW9uIEgoTWUsRGUsemUsaXQpe3JldHVybiBBZShmdW5jdGlvbih1dCxNdCl7bGV0IEh0''@;'; put 'put ''LFB0LG9uO2NvbnN0IENuPVtdO2ZvcihsZXQgVXQ9MDtVdDx1dC5sZW5ndGgmJiEoKE10LT0yKTwwKTsrK1V0KUh0PXV0LmNoYXJDb2RlQXQoVXQpLFB0PUh0Pj44LG9uPUh0JTI1NixDbi5wdXNoKG9uKSxDbi5wdXNoKFB0KTtyZXR1cm4gQ259KERlLE1lLmxlbmd0aC16ZSksTWUsemUsaXQp''@;'; put 'put ''fWZ1bmN0aW9uIE4oTWUsRGUsemUpe3JldHVybiBLLmZyb21CeXRlQXJyYXkoMD09PURlJiZ6ZT09PU1lLmxlbmd0aD9NZTpNZS5zbGljZShEZSx6ZSkpfWZ1bmN0aW9uIGcoTWUsRGUsemUpe3plPU1hdGgubWluKE1lLmxlbmd0aCx6ZSk7Y29uc3QgaXQ9W107bGV0IHV0PURlO2Zvcig7dXQ8''@;'; put 'put ''emU7KXtjb25zdCBNdD1NZVt1dF07bGV0IEh0PW51bGwsUHQ9TXQ+MjM5PzQ6TXQ+MjIzPzM6TXQ+MTkxPzI6MTtpZih1dCtQdDw9emUpe2xldCBvbixDbixVdCxibjtzd2l0Y2goUHQpe2Nhc2UgMTpNdDwxMjgmJihIdD1NdCk7YnJlYWs7Y2FzZSAyOm9uPU1lW3V0KzFdLDEyOD09KDE5MiZv''@;'; put 'put ''bikmJihibj0oMzEmTXQpPDw2fDYzJm9uLGJuPjEyNyYmKEh0PWJuKSk7YnJlYWs7Y2FzZSAzOm9uPU1lW3V0KzFdLENuPU1lW3V0KzJdLDEyOD09KDE5MiZvbikmJjEyOD09KDE5MiZDbikmJihibj0oMTUmTXQpPDwxMnwoNjMmb24pPDw2fDYzJkNuLGJuPjIwNDcmJihibjw1NTI5Nnx8Ym4+''@;'; put 'put ''NTczNDMpJiYoSHQ9Ym4pKTticmVhaztjYXNlIDQ6b249TWVbdXQrMV0sQ249TWVbdXQrMl0sVXQ9TWVbdXQrM10sMTI4PT0oMTkyJm9uKSYmMTI4PT0oMTkyJkNuKSYmMTI4PT0oMTkyJlV0KSYmKGJuPSgxNSZNdCk8PDE4fCg2MyZvbik8PDEyfCg2MyZDbik8PDZ8NjMmVXQsYm4+NjU1MzUm''@;'; put 'put ''JmJuPDExMTQxMTImJihIdD1ibikpfX1udWxsPT09SHQ/KEh0PTY1NTMzLFB0PTEpOkh0PjY1NTM1JiYoSHQtPTY1NTM2LGl0LnB1c2goSHQ+Pj4xMCYxMDIzfDU1Mjk2KSxIdD01NjMyMHwxMDIzJkh0KSxpdC5wdXNoKEh0KSx1dCs9UHR9cmV0dXJuIGZ1bmN0aW9uKE10KXtjb25zdCBIdD1N''@;'; put 'put ''dC5sZW5ndGg7aWYoSHQ8PUMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLE10KTtsZXQgUHQ9IiIsb249MDtmb3IoO29uPEh0OylQdCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsTXQuc2xpY2Uob24sb24rPUMpKTtyZXR1cm4gUHR9KGl0KX1PLmtN''@;'; put 'put ''YXhMZW5ndGg9RSwoVi5UWVBFRF9BUlJBWV9TVVBQT1JUPWZ1bmN0aW9uKCl7dHJ5e2NvbnN0IE1lPW5ldyBVaW50OEFycmF5KDEpLERlPXtmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKERlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmpl''@;'; put 'put ''Y3Quc2V0UHJvdG90eXBlT2YoTWUsRGUpLDQyPT09TWUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKXx8dm9pZCAwPT09enx8ImZ1bmN0aW9uIiE9dHlwZW9mIHouZXJyb3J8fHouZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGlj''@;'; put 'put ''aCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihW''@;'; put 'put ''LmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoVi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFYucG9vbFNp''@;'; put 'put ''emU9ODE5MixWLmZyb209ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBCKE1lLERlLHplKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKFYucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoVixVaW50OEFycmF5KSxWLmFsbG9jPWZ1bmN0aW9uKE1l''@;'; put 'put ''LERlLHplKXtyZXR1cm4gdXQ9RGUsTXQ9emUsWShpdD1NZSksaXQ8PTA/aihpdCk6dm9pZCAwIT09dXQ/InN0cmluZyI9PXR5cGVvZiBNdD9qKGl0KS5maWxsKHV0LE10KTpqKGl0KS5maWxsKHV0KTpqKGl0KTt2YXIgaXQsdXQsTXR9LFYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oTWUpe3JldHVy''@;'; put 'put ''biBYKE1lKX0sVi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oTWUpe3JldHVybiBYKE1lKX0sVi5pc0J1ZmZlcj1mdW5jdGlvbihNZSl7cmV0dXJuIG51bGwhPU1lJiYhMD09PU1lLl9pc0J1ZmZlciYmTWUhPT1WLnByb3RvdHlwZX0sVi5jb21wYXJlPWZ1bmN0aW9uKE1lLERlKXtpZihUZShN''@;'; put 'put ''ZSxVaW50OEFycmF5KSYmKE1lPVYuZnJvbShNZSxNZS5vZmZzZXQsTWUuYnl0ZUxlbmd0aCkpLFRlKERlLFVpbnQ4QXJyYXkpJiYoRGU9Vi5mcm9tKERlLERlLm9mZnNldCxEZS5ieXRlTGVuZ3RoKSksIVYuaXNCdWZmZXIoTWUpfHwhVi5pc0J1ZmZlcihEZSkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoTWU9PT1EZSlyZXR1cm4gMDtsZXQgemU9TWUubGVuZ3RoLGl0PURlLmxlbmd0aDtmb3IobGV0IHV0PTAsTXQ9TWF0aC5taW4oemUsaXQpO3V0PE10Oysr''@;'; put 'put ''dXQpaWYoTWVbdXRdIT09RGVbdXRdKXt6ZT1NZVt1dF0saXQ9RGVbdXRdO2JyZWFrfXJldHVybiB6ZTxpdD8tMTppdDx6ZT8xOjB9LFYuaXNFbmNvZGluZz1mdW5jdGlvbihNZSl7c3dpdGNoKFN0cmluZyhNZSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYt''@;'; put 'put ''OCI6Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSxWLmNvbmNhdD1mdW5jdGlvbihNZSxEZSl7aWYoIUFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09TWUubGVuZ3RoKXJldHVybiBWLmFsbG9jKDApO2xldCB6ZTtpZih2b2lkIDA9PT1EZSlmb3IoRGU9MCx6ZT0wO3plPE1lLmxlbmd0''@;'; put 'put ''aDsrK3plKURlKz1NZVt6ZV0ubGVuZ3RoO2NvbnN0IGl0PVYuYWxsb2NVbnNhZmUoRGUpO2xldCB1dD0wO2Zvcih6ZT0wO3plPE1lLmxlbmd0aDsrK3plKXtsZXQgTXQ9TWVbemVdO2lmKFRlKE10LFVpbnQ4QXJyYXkpKXV0K010Lmxlbmd0aD5pdC5sZW5ndGg/KFYuaXNCdWZmZXIoTXQpfHwo''@;'; put 'put ''TXQ9Vi5mcm9tKE10KSksTXQuY29weShpdCx1dCkpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGl0LE10LHV0KTtlbHNle2lmKCFWLmlzQnVmZmVyKE10KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7TXQu''@;'; put 'put ''Y29weShpdCx1dCl9dXQrPU10Lmxlbmd0aH1yZXR1cm4gaXR9LFYuYnl0ZUxlbmd0aD10ZSxWLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsVi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7aWYoTWUlMiE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVm''@;'; put 'put ''ZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTIpc2UodGhpcyxEZSxEZSsxKTtyZXR1cm4gdGhpc30sVi5wcm90b3R5cGUuc3dhcDMyPWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7aWYoTWUlNCE9MCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IobGV0IERlPTA7RGU8TWU7RGUrPTQpc2UodGhpcyxEZSxEZSszKSxzZSh0aGlzLERlKzEsRGUrMik7cmV0dXJuIHRoaXN9LFYucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe2Nv''@;'; put 'put ''bnN0IE1lPXRoaXMubGVuZ3RoO2lmKE1lJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKGxldCBEZT0wO0RlPE1lO0RlKz04KXNlKHRoaXMsRGUsRGUrNyksc2UodGhpcyxEZSsxLERlKzYpLHNlKHRoaXMs''@;'; put 'put ''RGUrMixEZSs1KSxzZSh0aGlzLERlKzMsRGUrNCk7cmV0dXJuIHRoaXN9LFYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPVYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7Y29uc3QgTWU9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1NZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9nKHRo''@;'; put 'put ''aXMsMCxNZSk6b2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxWLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24oTWUpe2lmKCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1NZXx8MD09PVYuY29tcGFy''@;'; put 'put ''ZSh0aGlzLE1lKX0sVi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe2xldCBNZT0iIjtjb25zdCBEZT1PLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBNZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsRGUpLnJlcGxhY2UoLyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+RGUm''@;'; put 'put ''JihNZSs9IiAuLi4gIiksIjxCdWZmZXIgIitNZSsiPiJ9LGsmJihWLnByb3RvdHlwZVtrXT1WLnByb3RvdHlwZS5pbnNwZWN0KSxWLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKE1lLERlLHplLGl0LHV0KXtpZihUZShNZSxVaW50OEFycmF5KSYmKE1lPVYuZnJvbShNZSxNZS5vZmZzZXQs''@;'; put 'put ''TWUuYnl0ZUxlbmd0aCkpLCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBNZSk7aWYodm9pZCAwPT09RGUmJihEZT0w''@;'; put 'put ''KSx2b2lkIDA9PT16ZSYmKHplPU1lP01lLmxlbmd0aDowKSx2b2lkIDA9PT1pdCYmKGl0PTApLHZvaWQgMD09PXV0JiYodXQ9dGhpcy5sZW5ndGgpLERlPDB8fHplPk1lLmxlbmd0aHx8aXQ8MHx8dXQ+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRl''@;'; put 'put ''eCIpO2lmKGl0Pj11dCYmRGU+PXplKXJldHVybiAwO2lmKGl0Pj11dClyZXR1cm4tMTtpZihEZT49emUpcmV0dXJuIDE7aWYodGhpcz09PU1lKXJldHVybiAwO2xldCBNdD0odXQ+Pj49MCktKGl0Pj4+PTApLEh0PSh6ZT4+Pj0wKS0oRGU+Pj49MCk7Y29uc3QgUHQ9TWF0aC5taW4oTXQsSHQp''@;'; put 'put ''LG9uPXRoaXMuc2xpY2UoaXQsdXQpLENuPU1lLnNsaWNlKERlLHplKTtmb3IobGV0IFV0PTA7VXQ8UHQ7KytVdClpZihvbltVdF0hPT1DbltVdF0pe010PW9uW1V0XSxIdD1DbltVdF07YnJlYWt9cmV0dXJuIE10PEh0Py0xOkh0PE10PzE6MH0sVi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rp''@;'; put 'put ''b24oTWUsRGUsemUpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKE1lLERlLHplKX0sVi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIGhlKHRoaXMsTWUsRGUsemUsITApfSxWLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJu''@;'; put 'put ''IGhlKHRoaXMsTWUsRGUsemUsITEpfSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNZSxEZSx6ZSxpdCl7aWYodm9pZCAwPT09RGUpaXQ9InV0ZjgiLHplPXRoaXMubGVuZ3RoLERlPTA7ZWxzZSBpZih2b2lkIDA9PT16ZSYmInN0cmluZyI9PXR5cGVvZiBEZSlpdD1EZSx6ZT10aGlzLmxl''@;'; put 'put ''bmd0aCxEZT0wO2Vsc2V7aWYoIWlzRmluaXRlKERlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7RGU+Pj49MCxpc0Zpbml0ZSh6ZSk/KHplPj4+PTAsdm9pZCAwPT09aXQm''@;'; put 'put ''JihpdD0idXRmOCIpKTooaXQ9emUsemU9dm9pZCAwKX1jb25zdCB1dD10aGlzLmxlbmd0aC1EZTtpZigodm9pZCAwPT09emV8fHplPnV0KSYmKHplPXV0KSxNZS5sZW5ndGg+MCYmKHplPDB8fERlPDApfHxEZT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3''@;'; put 'put ''cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtpdHx8KGl0PSJ1dGY4Iik7bGV0IE10PSExO2Zvcig7Oylzd2l0Y2goaXQpe2Nhc2UiaGV4IjpyZXR1cm4gY2UodGhpcyxNZSxEZSx6ZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRyh0aGlzLE1lLERlLHplKTtjYXNlImFzY2lp''@;'; put 'put ''IjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBiKHRoaXMsTWUsRGUsemUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRCh0aGlzLE1lLERlLHplKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEgodGhpcyxNZSxEZSx6ZSk7''@;'; put 'put ''ZGVmYXVsdDppZihNdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2l0KTtpdD0oIiIraXQpLnRvTG93ZXJDYXNlKCksTXQ9ITB9fSxWLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5z''@;'; put 'put ''bGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2NvbnN0IEM9NDA5NjtmdW5jdGlvbiBTKE1lLERlLHplKXtsZXQgaXQ9IiI7emU9TWF0aC5taW4oTWUubGVuZ3RoLHplKTtmb3IobGV0IHV0PURlO3V0PHplOysrdXQpaXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3Jk1lW3V0XSk7cmV0''@;'; put 'put ''dXJuIGl0fWZ1bmN0aW9uIHYoTWUsRGUsemUpe2xldCBpdD0iIjt6ZT1NYXRoLm1pbihNZS5sZW5ndGgsemUpO2ZvcihsZXQgdXQ9RGU7dXQ8emU7Kyt1dClpdCs9U3RyaW5nLmZyb21DaGFyQ29kZShNZVt1dF0pO3JldHVybiBpdH1mdW5jdGlvbiBwKE1lLERlLHplKXtjb25zdCBpdD1NZS5s''@;'; put 'put ''ZW5ndGg7KCFEZXx8RGU8MCkmJihEZT0wKSwoIXplfHx6ZTwwfHx6ZT5pdCkmJih6ZT1pdCk7bGV0IHV0PSIiO2ZvcihsZXQgTXQ9RGU7TXQ8emU7KytNdCl1dCs9WGVbTWVbTXRdXTtyZXR1cm4gdXR9ZnVuY3Rpb24gdyhNZSxEZSx6ZSl7Y29uc3QgaXQ9TWUuc2xpY2UoRGUsemUpO2xldCB1''@;'; put 'put ''dD0iIjtmb3IobGV0IE10PTA7TXQ8aXQubGVuZ3RoLTE7TXQrPTIpdXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaXRbTXRdKzI1NippdFtNdCsxXSk7cmV0dXJuIHV0fWZ1bmN0aW9uIEooTWUsRGUsemUpe2lmKE1lJTEhPTB8fE1lPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBu''@;'; put 'put ''b3QgdWludCIpO2lmKE1lK0RlPnplKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gbmUoTWUsRGUsemUsaXQsdXQsTXQpe2lmKCFWLmlzQnVmZmVyKE1lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBh''@;'; put 'put ''cmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoRGU+dXR8fERlPE10KXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZih6ZStpdD5NZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiBy''@;'; put 'put ''YW5nZSIpfWZ1bmN0aW9uIGRlKE1lLERlLHplLGl0LHV0KXtLZShEZSxpdCx1dCxNZSx6ZSw3KTtsZXQgTXQ9TnVtYmVyKERlJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7TWVbemUrK109TXQsTXQ+Pj04LE1lW3plKytdPU10LE10Pj49OCxNZVt6ZSsrXT1NdCxNdD4+PTgsTWVbemUrK109TXQ7bGV0''@;'; put 'put ''IEh0PU51bWJlcihEZT4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiBNZVt6ZSsrXT1IdCxIdD4+PTgsTWVbemUrK109SHQsSHQ+Pj04LE1lW3plKytdPUh0LEh0Pj49OCxNZVt6ZSsrXT1IdCx6ZX1mdW5jdGlvbiBmZShNZSxEZSx6ZSxpdCx1dCl7S2UoRGUsaXQsdXQs''@;'; put 'put ''TWUsemUsNyk7bGV0IE10PU51bWJlcihEZSZCaWdJbnQoNDI5NDk2NzI5NSkpO01lW3plKzddPU10LE10Pj49OCxNZVt6ZSs2XT1NdCxNdD4+PTgsTWVbemUrNV09TXQsTXQ+Pj04LE1lW3plKzRdPU10O2xldCBIdD1OdW1iZXIoRGU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTty''@;'; put 'put ''ZXR1cm4gTWVbemUrM109SHQsSHQ+Pj04LE1lW3plKzJdPUh0LEh0Pj49OCxNZVt6ZSsxXT1IdCxIdD4+PTgsTWVbemVdPUh0LHplKzh9ZnVuY3Rpb24geGUoTWUsRGUsemUsaXQsdXQsTXQpe2lmKHplK2l0Pk1lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJh''@;'; put 'put ''bmdlIik7aWYoemU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gTGUoTWUsRGUsemUsaXQsdXQpe3JldHVybiBEZT0rRGUsemU+Pj49MCx1dHx8eGUoTWUsMCx6ZSw0KSxJLndyaXRlKE1lLERlLHplLGl0LDIzLDQpLHplKzR9ZnVuY3Rpb24g''@;'; put 'put ''RmUoTWUsRGUsemUsaXQsdXQpe3JldHVybiBEZT0rRGUsemU+Pj49MCx1dHx8eGUoTWUsMCx6ZSw4KSxJLndyaXRlKE1lLERlLHplLGl0LDUyLDgpLHplKzh9Vi5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oTWUsRGUpe2NvbnN0IHplPXRoaXMubGVuZ3RoOyhNZT1+fk1lKTwwPyhNZSs9emUp''@;'; put 'put ''PDAmJihNZT0wKTpNZT56ZSYmKE1lPXplKSwoRGU9dm9pZCAwPT09RGU/emU6fn5EZSk8MD8oRGUrPXplKTwwJiYoRGU9MCk6RGU+emUmJihEZT16ZSksRGU8TWUmJihEZT1NZSk7Y29uc3QgaXQ9dGhpcy5zdWJhcnJheShNZSxEZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihpdCxW''@;'; put 'put ''LnByb3RvdHlwZSksaXR9LFYucHJvdG90eXBlLnJlYWRVaW50TEU9Vi5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbihNZSxEZSx6ZSl7TWU+Pj49MCxEZT4+Pj0wLHplfHxKKE1lLERlLHRoaXMubGVuZ3RoKTtsZXQgaXQ9dGhpc1tNZV0sdXQ9MSxNdD0wO2Zvcig7KytNdDxEZSYmKHV0''@;'; put 'put ''Kj0yNTYpOylpdCs9dGhpc1tNZStNdF0qdXQ7cmV0dXJuIGl0fSxWLnByb3RvdHlwZS5yZWFkVWludEJFPVYucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IGl0PXRoaXNbTWUrLS1EZV0s''@;'; put 'put ''dXQ9MTtmb3IoO0RlPjAmJih1dCo9MjU2KTspaXQrPXRoaXNbTWUrLS1EZV0qdXQ7cmV0dXJuIGl0fSxWLnByb3RvdHlwZS5yZWFkVWludDg9Vi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSwxLHRoaXMubGVuZ3RoKSx0aGlzW01l''@;'; put 'put ''XX0sVi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPVYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCksdGhpc1tNZV18dGhpc1tNZSsxXTw8OH0sVi5wcm90b3R5cGUucmVhZFVpbnQxNkJFPVYucHJvdG90''@;'; put 'put ''eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsMix0aGlzLmxlbmd0aCksdGhpc1tNZV08PDh8dGhpc1tNZSsxXX0sVi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPVYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihNZSxEZSl7cmV0''@;'; put 'put ''dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksKHRoaXNbTWVdfHRoaXNbTWUrMV08PDh8dGhpc1tNZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbTWUrM119LFYucHJvdG90eXBlLnJlYWRVaW50MzJCRT1WLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oTWUsRGUpe3Jl''@;'; put 'put ''dHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbTWVdKyh0aGlzW01lKzFdPDwxNnx0aGlzW01lKzJdPDw4fHRoaXNbTWUrM10pfSxWLnByb3RvdHlwZS5yZWFkQmlnVUludDY0TEU9VWUoZnVuY3Rpb24oTWUpe1llKE1lPj4+PTAsIm9mZnNldCIpO2Nv''@;'; put 'put ''bnN0IERlPXRoaXNbTWVdLHplPXRoaXNbTWUrN107dm9pZCAwIT09RGUmJnZvaWQgMCE9PXplfHxKZShNZSx0aGlzLmxlbmd0aC04KTtjb25zdCBpdD1EZSsyNTYqdGhpc1srK01lXSs2NTUzNip0aGlzWysrTWVdK3RoaXNbKytNZV0qMioqMjQsdXQ9dGhpc1srK01lXSsyNTYqdGhpc1srK01l''@;'; put 'put ''XSs2NTUzNip0aGlzWysrTWVdK3plKjIqKjI0O3JldHVybiBCaWdJbnQoaXQpKyhCaWdJbnQodXQpPDxCaWdJbnQoMzIpKX0pLFYucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tNZV0semU9dGhpc1tN''@;'; put 'put ''ZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fEplKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IGl0PURlKjIqKjI0KzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0rdGhpc1srK01lXSx1dD10aGlzWysrTWVdKjIqKjI0KzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0r''@;'; put 'put ''emU7cmV0dXJuKEJpZ0ludChpdCk8PEJpZ0ludCgzMikpK0JpZ0ludCh1dCl9KSxWLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUpe01lPj4+PTAsRGU+Pj49MCx6ZXx8SihNZSxEZSx0aGlzLmxlbmd0aCk7bGV0IGl0PXRoaXNbTWVdLHV0PTEsTXQ9MDtmb3IoOysrTXQ8''@;'; put 'put ''RGUmJih1dCo9MjU2KTspaXQrPXRoaXNbTWUrTXRdKnV0O3JldHVybiB1dCo9MTI4LGl0Pj11dCYmKGl0LT1NYXRoLnBvdygyLDgqRGUpKSxpdH0sVi5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKE1lLERlLHplKXtNZT4+Pj0wLERlPj4+PTAsemV8fEooTWUsRGUsdGhpcy5sZW5ndGgp''@;'; put 'put ''O2xldCBpdD1EZSx1dD0xLE10PXRoaXNbTWUrLS1pdF07Zm9yKDtpdD4wJiYodXQqPTI1Nik7KU10Kz10aGlzW01lKy0taXRdKnV0O3JldHVybiB1dCo9MTI4LE10Pj11dCYmKE10LT1NYXRoLnBvdygyLDgqRGUpKSxNdH0sVi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oTWUsRGUpe3Jl''@;'; put 'put ''dHVybiBNZT4+Pj0wLERlfHxKKE1lLDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW01lXT8tMSooMjU1LXRoaXNbTWVdKzEpOnRoaXNbTWVdfSxWLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihNZSxEZSl7TWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKTtjb25zdCB6ZT10aGlz''@;'; put 'put ''W01lXXx0aGlzW01lKzFdPDw4O3JldHVybiAzMjc2OCZ6ZT80Mjk0OTAxNzYwfHplOnplfSxWLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihNZSxEZSl7TWU+Pj49MCxEZXx8SihNZSwyLHRoaXMubGVuZ3RoKTtjb25zdCB6ZT10aGlzW01lKzFdfHRoaXNbTWVdPDw4O3JldHVybiAz''@;'; put 'put ''Mjc2OCZ6ZT80Mjk0OTAxNzYwfHplOnplfSxWLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksdGhpc1tNZV18dGhpc1tNZSsxXTw8OHx0aGlzW01lKzJdPDwxNnx0aGlzW01lKzNdPDwyNH0sVi5wcm90''@;'; put 'put ''b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24oTWUsRGUpe3JldHVybiBNZT4+Pj0wLERlfHxKKE1lLDQsdGhpcy5sZW5ndGgpLHRoaXNbTWVdPDwyNHx0aGlzW01lKzFdPDwxNnx0aGlzW01lKzJdPDw4fHRoaXNbTWUrM119LFYucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPVVlKGZ1bmN0aW9u''@;'; put 'put ''KE1lKXtZZShNZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBEZT10aGlzW01lXSx6ZT10aGlzW01lKzddO3JldHVybiB2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fEplKE1lLHRoaXMubGVuZ3RoLTgpLChCaWdJbnQodGhpc1tNZSs0XSsyNTYqdGhpc1tNZSs1XSs2NTUzNip0aGlzW01lKzZdKyh6''@;'; put 'put ''ZTw8MjQpKTw8QmlnSW50KDMyKSkrQmlnSW50KERlKzI1Nip0aGlzWysrTWVdKzY1NTM2KnRoaXNbKytNZV0rMTY3NzcyMTYqdGhpc1srK01lXSl9KSxWLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRT1VZShmdW5jdGlvbihNZSl7WWUoTWU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgRGU9dGhpc1tN''@;'; put 'put ''ZV0semU9dGhpc1tNZSs3XTt2b2lkIDAhPT1EZSYmdm9pZCAwIT09emV8fEplKE1lLHRoaXMubGVuZ3RoLTgpO2NvbnN0IGl0PShEZTw8MjQpKzY1NTM2KnRoaXNbKytNZV0rMjU2KnRoaXNbKytNZV0rdGhpc1srK01lXTtyZXR1cm4oQmlnSW50KGl0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2''@;'; put 'put ''Nzc3MjE2KnRoaXNbKytNZV0rNjU1MzYqdGhpc1srK01lXSsyNTYqdGhpc1srK01lXSt6ZSl9KSxWLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihNZSxEZSl7cmV0dXJuIE1lPj4+PTAsRGV8fEooTWUsNCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsTWUsITAsMjMsNCl9LFYucHJv''@;'; put 'put ''dG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw0LHRoaXMubGVuZ3RoKSxJLnJlYWQodGhpcyxNZSwhMSwyMyw0KX0sVi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw4''@;'; put 'put ''LHRoaXMubGVuZ3RoKSxJLnJlYWQodGhpcyxNZSwhMCw1Miw4KX0sVi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKE1lLERlKXtyZXR1cm4gTWU+Pj49MCxEZXx8SihNZSw4LHRoaXMubGVuZ3RoKSxJLnJlYWQodGhpcyxNZSwhMSw1Miw4KX0sVi5wcm90b3R5cGUud3JpdGVVaW50''@;'; put 'put ''TEU9Vi5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oTWUsRGUsemUsaXQpe01lPStNZSxEZT4+Pj0wLHplPj4+PTAsIWl0JiZuZSh0aGlzLE1lLERlLHplLE1hdGgucG93KDIsOCp6ZSktMSwwKTtsZXQgdXQ9MSxNdD0wO2Zvcih0aGlzW0RlXT0yNTUmTWU7KytNdDx6ZSYmKHV0Kj0y''@;'; put 'put ''NTYpOyl0aGlzW0RlK010XT1NZS91dCYyNTU7cmV0dXJuIERlK3plfSxWLnByb3RvdHlwZS53cml0ZVVpbnRCRT1WLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihNZSxEZSx6ZSxpdCl7TWU9K01lLERlPj4+PTAsemU+Pj49MCwhaXQmJm5lKHRoaXMsTWUsRGUsemUsTWF0aC5wb3co''@;'; put 'put ''Miw4KnplKS0xLDApO2xldCB1dD16ZS0xLE10PTE7Zm9yKHRoaXNbRGUrdXRdPTI1NSZNZTstLXV0Pj0wJiYoTXQqPTI1Nik7KXRoaXNbRGUrdXRdPU1lL010JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndyaXRlVWludDg9Vi5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihN''@;'; put 'put ''ZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDEsMjU1LDApLHRoaXNbRGVdPTI1NSZNZSxEZSsxfSxWLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPVYucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUs''@;'; put 'put ''RGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDY1NTM1LDApLHRoaXNbRGVdPTI1NSZNZSx0aGlzW0RlKzFdPU1lPj4+OCxEZSsyfSxWLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPVYucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+''@;'; put 'put ''Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDY1NTM1LDApLHRoaXNbRGVdPU1lPj4+OCx0aGlzW0RlKzFdPTI1NSZNZSxEZSsyfSxWLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPVYucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49''@;'; put 'put ''MCx6ZXx8bmUodGhpcyxNZSxEZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tEZSszXT1NZT4+PjI0LHRoaXNbRGUrMl09TWU+Pj4xNix0aGlzW0RlKzFdPU1lPj4+OCx0aGlzW0RlXT0yNTUmTWUsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1WLnByb3RvdHlwZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGVdPU1lPj4+MjQsdGhpc1tEZSsxXT1NZT4+PjE2LHRoaXNbRGUrMl09TWU+Pj44LHRoaXNbRGUrM109MjU1Jk1lLERlKzR9LFYucHJvdG90eXBl''@;'; put 'put ''LndyaXRlQmlnVUludDY0TEU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGRlKHRoaXMsTWUsRGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksVi5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1VZShmdW5jdGlvbihNZSxEZT0wKXtyZXR1cm4gZmUodGhp''@;'; put 'put ''cyxNZSxEZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZihNZT0rTWUsRGU+Pj49MCwhaXQpe2NvbnN0IFB0PU1hdGgucG93KDIsOCp6ZS0xKTtuZSh0aGlzLE1lLERlLHplLFB0''@;'; put 'put ''LTEsLVB0KX1sZXQgdXQ9MCxNdD0xLEh0PTA7Zm9yKHRoaXNbRGVdPTI1NSZNZTsrK3V0PHplJiYoTXQqPTI1Nik7KU1lPDAmJjA9PT1IdCYmMCE9PXRoaXNbRGUrdXQtMV0mJihIdD0xKSx0aGlzW0RlK3V0XT0oTWUvTXQ+PjApLUh0JjI1NTtyZXR1cm4gRGUremV9LFYucHJvdG90eXBlLndy''@;'; put 'put ''aXRlSW50QkU9ZnVuY3Rpb24oTWUsRGUsemUsaXQpe2lmKE1lPStNZSxEZT4+Pj0wLCFpdCl7Y29uc3QgUHQ9TWF0aC5wb3coMiw4KnplLTEpO25lKHRoaXMsTWUsRGUsemUsUHQtMSwtUHQpfWxldCB1dD16ZS0xLE10PTEsSHQ9MDtmb3IodGhpc1tEZSt1dF09MjU1Jk1lOy0tdXQ+PTAmJihN''@;'; put 'put ''dCo9MjU2KTspTWU8MCYmMD09PUh0JiYwIT09dGhpc1tEZSt1dCsxXSYmKEh0PTEpLHRoaXNbRGUrdXRdPShNZS9NdD4+MCktSHQmMjU1O3JldHVybiBEZSt6ZX0sVi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRo''@;'; put 'put ''aXMsTWUsRGUsMSwxMjcsLTEyOCksTWU8MCYmKE1lPTI1NStNZSsxKSx0aGlzW0RlXT0yNTUmTWUsRGUrMX0sVi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsMiwzMjc2NywtMzI3NjgpLHRo''@;'; put 'put ''aXNbRGVdPTI1NSZNZSx0aGlzW0RlKzFdPU1lPj4+OCxEZSsyfSxWLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBNZT0rTWUsRGU+Pj49MCx6ZXx8bmUodGhpcyxNZSxEZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tEZV09TWU+Pj44LHRoaXNbRGUrMV09''@;'; put 'put ''MjU1Jk1lLERlKzJ9LFYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIE1lPStNZSxEZT4+Pj0wLHplfHxuZSh0aGlzLE1lLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tEZV09MjU1Jk1lLHRoaXNbRGUrMV09TWU+Pj44LHRoaXNbRGUr''@;'; put 'put ''Ml09TWU+Pj4xNix0aGlzW0RlKzNdPU1lPj4+MjQsRGUrNH0sVi5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTWU9K01lLERlPj4+PTAsemV8fG5lKHRoaXMsTWUsRGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxNZTwwJiYoTWU9NDI5NDk2NzI5''@;'; put 'put ''NStNZSsxKSx0aGlzW0RlXT1NZT4+PjI0LHRoaXNbRGUrMV09TWU+Pj4xNix0aGlzW0RlKzJdPU1lPj4+OCx0aGlzW0RlKzNdPTI1NSZNZSxEZSs0fSxWLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGRlKHRoaXMsTWUsRGUsLUJpZ0ludCgi''@;'; put 'put ''MHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9VWUoZnVuY3Rpb24oTWUsRGU9MCl7cmV0dXJuIGZlKHRoaXMsTWUsRGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZmYiKSl9KSxWLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBMZSh0aGlzLE1lLERlLCEwLHplKX0sVi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKE1lLERlLHplKXtyZXR1cm4gTGUodGhpcyxNZSxEZSwhMSx6ZSl9''@;'; put 'put ''LFYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiBGZSh0aGlzLE1lLERlLCEwLHplKX0sVi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihNZSxEZSx6ZSl7cmV0dXJuIEZlKHRoaXMsTWUsRGUsITEsemUpfSxWLnByb3RvdHlwZS5jb3B5''@;'; put 'put ''PWZ1bmN0aW9uKE1lLERlLHplLGl0KXtpZighVi5pc0J1ZmZlcihNZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoemV8fCh6ZT0wKSxpdHx8MD09PWl0fHwoaXQ9dGhpcy5sZW5ndGgpLERlPj1NZS5sZW5ndGgmJihEZT1NZS5sZW5ndGgp''@;'; put 'put ''LERlfHwoRGU9MCksaXQ+MCYmaXQ8emUmJihpdD16ZSksaXQ9PT16ZXx8MD09PU1lLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAwO2lmKERlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMiKTtpZih6ZTwwfHx6ZT49dGhpcy5sZW5ndGgp''@;'; put 'put ''dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKGl0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzIik7aXQ+dGhpcy5sZW5ndGgmJihpdD10aGlzLmxlbmd0aCksTWUubGVuZ3RoLURlPGl0LXplJiYoaXQ9TWUubGVuZ3Ro''@;'; put 'put ''LURlK3plKTtjb25zdCB1dD1pdC16ZTtyZXR1cm4gdGhpcz09PU1lJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oRGUsemUsaXQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKE1lLHRoaXMuc3ViYXJyYXko''@;'; put 'put ''emUsaXQpLERlKSx1dH0sVi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihNZSxEZSx6ZSxpdCl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZT8oaXQ9RGUsRGU9MCx6ZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiB6ZSYmKGl0PXplLHplPXRoaXMu''@;'; put 'put ''bGVuZ3RoKSx2b2lkIDAhPT1pdCYmInN0cmluZyIhPXR5cGVvZiBpdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBpdCYmIVYuaXNFbmNvZGluZyhpdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNv''@;'; put 'put ''ZGluZzogIitpdCk7aWYoMT09PU1lLmxlbmd0aCl7Y29uc3QgTXQ9TWUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09aXQmJk10PDEyOHx8ImxhdGluMSI9PT1pdCkmJihNZT1NdCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIE1lP01lJj0yNTU6ImJvb2xlYW4iPT10eXBlb2YgTWUmJihNZT1OdW1i''@;'; put 'put ''ZXIoTWUpKTtpZihEZTwwfHx0aGlzLmxlbmd0aDxEZXx8dGhpcy5sZW5ndGg8emUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHplPD1EZSlyZXR1cm4gdGhpcztsZXQgdXQ7aWYoRGU+Pj49MCx6ZT12b2lkIDA9PT16ZT90aGlzLmxlbmd0aDp6ZT4+PjAs''@;'; put 'put ''TWV8fChNZT0wKSwibnVtYmVyIj09dHlwZW9mIE1lKWZvcih1dD1EZTt1dDx6ZTsrK3V0KXRoaXNbdXRdPU1lO2Vsc2V7Y29uc3QgTXQ9Vi5pc0J1ZmZlcihNZSk/TWU6Vi5mcm9tKE1lLGl0KSxIdD1NdC5sZW5ndGg7aWYoMD09PUh0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSAi''@;'; put 'put ''JytNZSsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKHV0PTA7dXQ8emUtRGU7Kyt1dCl0aGlzW3V0K0RlXT1NdFt1dCVIdF19cmV0dXJuIHRoaXN9O2NvbnN0IE9lPXt9O2Z1bmN0aW9uIGplKE1lLERlLHplKXtPZVtNZV09Y2xhc3MgZXh0ZW5kcyB6ZXtjb25zdHJ1''@;'; put 'put ''Y3Rvcigpe3N1cGVyKCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIm1lc3NhZ2UiLHt2YWx1ZTpEZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdGhpcy5uYW1lPWAke3RoaXMubmFtZX0gWyR7TWV9XWAsZGVsZXRlIHRoaXMubmFtZX1n''@;'; put 'put ''ZXQgY29kZSgpe3JldHVybiBNZX1zZXQgY29kZShpdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNvZGUiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTppdCx3cml0YWJsZTohMH0pfXRvU3RyaW5nKCl7cmV0dXJuYCR7dGhpcy5uYW1lfSBbJHtNZX1dOiAke3Ro''@;'; put 'put ''aXMubWVzc2FnZX1gfX19ZnVuY3Rpb24gV2UoTWUpe2xldCBEZT0iIix6ZT1NZS5sZW5ndGg7Y29uc3QgaXQ9Ii0iPT09TWVbMF0/MTowO2Zvcig7emU+PWl0KzQ7emUtPTMpRGU9YF8ke01lLnNsaWNlKHplLTMsemUpfSR7RGV9YDtyZXR1cm5gJHtNZS5zbGljZSgwLHplKX0ke0RlfWB9ZnVu''@;'; put 'put ''Y3Rpb24gS2UoTWUsRGUsemUsaXQsdXQsTXQpe2lmKE1lPnplfHxNZTxEZSl7Y29uc3QgSHQ9ImJpZ2ludCI9PXR5cGVvZiBEZT8ibiI6IiI7bGV0IFB0O3Rocm93IFB0PU10PjM/MD09PURlfHxEZT09PUJpZ0ludCgwKT9gPj0gMCR7SHR9IGFuZCA8IDIke0h0fSAqKiAkezgqKE10KzEpfSR7''@;'; put 'put ''SHR9YDpgPj0gLSgyJHtIdH0gKiogJHs4KihNdCsxKS0xfSR7SHR9KSBhbmQgPCAyICoqICR7OCooTXQrMSktMX0ke0h0fWA6YD49ICR7RGV9JHtIdH0gYW5kIDw9ICR7emV9JHtIdH1gLG5ldyBPZS5FUlJfT1VUX09GX1JBTkdFKCJ2YWx1ZSIsUHQsTWUpfXZhciBIdCxQdCxvbjtIdD1pdCxv''@;'; put 'put ''bj1NdCxZZShQdD11dCwib2Zmc2V0Iiksdm9pZCAwIT09SHRbUHRdJiZ2b2lkIDAhPT1IdFtQdCtvbl18fEplKFB0LEh0Lmxlbmd0aC0ob24rMSkpfWZ1bmN0aW9uIFllKE1lLERlKXtpZigibnVtYmVyIiE9dHlwZW9mIE1lKXRocm93IG5ldyBPZS5FUlJfSU5WQUxJRF9BUkdfVFlQRShEZSwi''@;'; put 'put ''bnVtYmVyIixNZSl9ZnVuY3Rpb24gSmUoTWUsRGUsemUpe3Rocm93IE1hdGguZmxvb3IoTWUpIT09TWU/KFllKE1lLHplKSxuZXcgT2UuRVJSX09VVF9PRl9SQU5HRSh6ZXx8Im9mZnNldCIsImFuIGludGVnZXIiLE1lKSk6RGU8MD9uZXcgT2UuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5l''@;'; put 'put ''dyBPZS5FUlJfT1VUX09GX1JBTkdFKHplfHwib2Zmc2V0IixgPj0gJHt6ZT8xOjB9IGFuZCA8PSAke0RlfWAsTWUpfWplKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKE1lKXtyZXR1cm4gTWU/YCR7TWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQg''@;'; put 'put ''dG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMifSxSYW5nZUVycm9yKSxqZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKE1lLERlKXtyZXR1cm5gVGhlICIke01lfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5''@;'; put 'put ''cGVvZiBEZX1gfSxUeXBlRXJyb3IpLGplKCJFUlJfT1VUX09GX1JBTkdFIixmdW5jdGlvbihNZSxEZSx6ZSl7bGV0IGl0PWBUaGUgdmFsdWUgb2YgIiR7TWV9IiBpcyBvdXQgb2YgcmFuZ2UuYCx1dD16ZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih6ZSkmJk1hdGguYWJzKHplKT40Mjk0OTY3''@;'; put 'put ''Mjk2P3V0PVdlKFN0cmluZyh6ZSkpOiJiaWdpbnQiPT10eXBlb2YgemUmJih1dD1TdHJpbmcoemUpLCh6ZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fHplPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJih1dD1XZSh1dCkpLHV0Kz0ibiIpLGl0Kz1gIEl0IG11c3QgYmUgJHtEZX0uIFJlY2Vp''@;'; put 'put ''dmVkICR7dXR9YCxpdH0sUmFuZ2VFcnJvcik7Y29uc3QgbHQ9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBQZShNZSxEZSl7bGV0IHplO0RlPURlfHwxLzA7Y29uc3QgaXQ9TWUubGVuZ3RoO2xldCB1dD1udWxsO2NvbnN0IE10PVtdO2ZvcihsZXQgSHQ9MDtIdDxpdDsrK0h0KXtpZih6''@;'; put 'put ''ZT1NZS5jaGFyQ29kZUF0KEh0KSx6ZT41NTI5NSYmemU8NTczNDQpe2lmKCF1dCl7aWYoemU+NTYzMTkpeyhEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKEh0KzE9PT1pdCl7KERlLT0zKT4tMSYmTXQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9dXQ9emU7''@;'; put 'put ''Y29udGludWV9aWYoemU8NTYzMjApeyhEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpLHV0PXplO2NvbnRpbnVlfXplPTY1NTM2Kyh1dC01NTI5Njw8MTB8emUtNTYzMjApfWVsc2UgdXQmJihEZS09Myk+LTEmJk10LnB1c2goMjM5LDE5MSwxODkpO2lmKHV0PW51bGwsemU8MTI4KXtp''@;'; put 'put ''ZigoRGUtPTEpPDApYnJlYWs7TXQucHVzaCh6ZSl9ZWxzZSBpZih6ZTwyMDQ4KXtpZigoRGUtPTIpPDApYnJlYWs7TXQucHVzaCh6ZT4+NnwxOTIsNjMmemV8MTI4KX1lbHNlIGlmKHplPDY1NTM2KXtpZigoRGUtPTMpPDApYnJlYWs7TXQucHVzaCh6ZT4+MTJ8MjI0LHplPj42JjYzfDEyOCw2''@;'; put 'put ''MyZ6ZXwxMjgpfWVsc2V7aWYoISh6ZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChEZS09NCk8MClicmVhaztNdC5wdXNoKHplPj4xOHwyNDAsemU+PjEyJjYzfDEyOCx6ZT4+NiY2M3wxMjgsNjMmemV8MTI4KX19cmV0dXJuIE10fWZ1bmN0aW9u''@;'; put 'put ''IGJlKE1lKXtyZXR1cm4gSy50b0J5dGVBcnJheShmdW5jdGlvbihEZSl7aWYoKERlPShEZT1EZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShsdCwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7RGUubGVuZ3RoJTQhPTA7KURlKz0iPSI7cmV0dXJuIERlfShNZSkpfWZ1bmN0aW9u''@;'; put 'put ''IEFlKE1lLERlLHplLGl0KXtsZXQgdXQ7Zm9yKHV0PTA7dXQ8aXQmJiEodXQremU+PURlLmxlbmd0aHx8dXQ+PU1lLmxlbmd0aCk7Kyt1dClEZVt1dCt6ZV09TWVbdXRdO3JldHVybiB1dH1mdW5jdGlvbiBUZShNZSxEZSl7cmV0dXJuIE1lIGluc3RhbmNlb2YgRGV8fG51bGwhPU1lJiZudWxs''@;'; put 'put ''IT1NZS5jb25zdHJ1Y3RvciYmbnVsbCE9TWUuY29uc3RydWN0b3IubmFtZSYmTWUuY29uc3RydWN0b3IubmFtZT09PURlLm5hbWV9ZnVuY3Rpb24gcWUoTWUpe3JldHVybiBNZSE9TWV9Y29uc3QgWGU9ZnVuY3Rpb24oKXtjb25zdCBNZT0iMDEyMzQ1Njc4OWFiY2RlZiIsRGU9bmV3IEFycmF5''@;'; put 'put ''KDI1Nik7Zm9yKGxldCB6ZT0wO3plPDE2OysremUpe2NvbnN0IGl0PTE2KnplO2ZvcihsZXQgdXQ9MDt1dDwxNjsrK3V0KURlW2l0K3V0XT1NZVt6ZV0rTWVbdXRdfXJldHVybiBEZX0oKTtmdW5jdGlvbiBVZShNZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP2h0Ok1lfWZ1bmN0aW9uIGh0''@;'; put 'put ''KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1cHBvcnRlZCIpfX0sMTkyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjEwKSxLPVIoNTU1OSksST1LKHooIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTtNLmV4cG9ydHM9ZnVuY3Rpb24oayxFKXt2YXIgaj16KGss''@;'; put 'put ''ISFFKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaiYmSShrLCIucHJvdG90eXBlLiIpPi0xP0soaik6an19LDU1NTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg2MTIpLEs9UigyMTApLEk9SygiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiKSxrPUsoIiVGdW5jdGlvbi5w''@;'; put 'put ''cm90b3R5cGUuY2FsbCUiKSxFPUsoIiVSZWZsZWN0LmFwcGx5JSIsITApfHx6LmNhbGwoayxJKSxqPUsoIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSIsITApLFY9SygiJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUiLCEwKSxCPUsoIiVNYXRoLm1heCUiKTtpZihWKXRyeXtWKHt9''@;'; put 'put ''LCJhIix7dmFsdWU6MX0pfWNhdGNoe1Y9bnVsbH1NLmV4cG9ydHM9ZnVuY3Rpb24oWCl7dmFyIFU9RSh6LGssYXJndW1lbnRzKTtyZXR1cm4gaiYmViYmaihVLCJsZW5ndGgiKS5jb25maWd1cmFibGUmJlYoVSwibGVuZ3RoIix7dmFsdWU6MStCKDAsWC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgtMSkpfSksVX07dmFyIFk9ZnVuY3Rpb24oKXtyZXR1cm4gRSh6LEksYXJndW1lbnRzKX07Vj9WKE0uZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTpZfSk6TS5leHBvcnRzLmFwcGx5PVl9LDEwMjc6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyLEs9UigyODMwKS5UcmFuc2Zvcm0sST1S''@;'; put 'put ''KDI1NTMpLlN0cmluZ0RlY29kZXI7ZnVuY3Rpb24gayhFKXtLLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIEUsdGhpcy5oYXNoTW9kZT90aGlzW0VdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFs''@;'; put 'put ''JiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfVIoNTcxNykoayxLKSxrLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oRSxqLFYpeyJzdHJpbmciPT10eXBlb2YgRSYmKEU9ei5mcm9tKEUs''@;'; put 'put ''aikpO3ZhciBCPXRoaXMuX3VwZGF0ZShFKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihWJiYoQj10aGlzLl90b1N0cmluZyhCLFYpKSxCKX0say5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LGsucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0say5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxrLnByb3RvdHlw''@;'; put 'put ''ZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LGsucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRSxqLFYpe3ZhciBCO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZShFKTp0aGlzLnB1''@;'; put 'put ''c2godGhpcy5fdXBkYXRlKEUpKX1jYXRjaChZKXtCPVl9ZmluYWxseXtWKEIpfX0say5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKEUpe3ZhciBqO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKFYpe2o9Vn1FKGopfSxrLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbihFKXt2YXIgaj10aGlzLl9fZmluYWwoKXx8ei5hbGxvYygwKTtyZXR1cm4gRSYmKGo9dGhpcy5fdG9TdHJpbmcoaixFLCEwKSksan0say5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKEUsaixWKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgSShqKSx0aGlz''@;'; put 'put ''Ll9lbmNvZGluZz1qKSx0aGlzLl9lbmNvZGluZyE9PWopdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEI9dGhpcy5fZGVjb2Rlci53cml0ZShFKTtyZXR1cm4gViYmKEIrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEJ9LE0uZXhwb3J0cz1rfSwxMDQ4Ok09PntN''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtmb3IodmFyIEs9W10sST0wO0k8Ui5sZW5ndGg7SSsrKXt2YXIgaz16KFJbSV0sSSk7TyhrKT9LLnB1c2guYXBwbHkoSyxrKTpLLnB1c2goayl9cmV0dXJuIEt9O3ZhciBPPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKFIpe3JldHVybiJbb2JqZWN0IEFy''@;'; put 'put ''cmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUil9fSw1MTA4OihNLE8sUik9Pnt2YXIgej1SKDk1MzkpLEs9Uig5MjgyKTtmdW5jdGlvbiBJKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9dmFyIGssRT1BcnJheS5wcm90b3R5cGUuc2xpY2Usaj17fTtrPXZvaWQg''@;'; put 'put ''MCE9PVIuZyYmUi5nLmNvbnNvbGU/Ui5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgVj1bW2Z1bmN0aW9uKCl7fSwibG9nIl0sW2Z1bmN0aW9uKCl7ay5sb2cuYXBwbHkoayxhcmd1bWVudHMpfSwiaW5mbyJdLFtm''@;'; put 'put ''dW5jdGlvbigpe2subG9nLmFwcGx5KGssYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24oKXtrLndhcm4uYXBwbHkoayxhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24ocSl7altxXT1JKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uKHEpe3ZhciBlZT1qW3FdO2lmKCFlZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrcSk7ZGVsZXRlIGpbcV07dmFyIHRlPUkoKS1lZTtrLmxvZyhxKyI6ICIrdGUrIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9uKCl7dmFyIHE9bmV3IEVycm9yO3EubmFtZT0iVHJhY2UiLHEubWVzc2FnZT16LmZvcm1hdC5hcHBseShudWxsLGFyZ3Vt''@;'; put 'put ''ZW50cyksay5lcnJvcihxLnN0YWNrKX0sInRyYWNlIl0sW2Z1bmN0aW9uKHEpe2subG9nKHouaW5zcGVjdChxKSsiXG4iKX0sImRpciJdLFtmdW5jdGlvbihxKXtpZighcSl7dmFyIGVlPUUuY2FsbChhcmd1bWVudHMsMSk7Sy5vayghMSx6LmZvcm1hdC5hcHBseShudWxsLGVlKSl9fSwiYXNz''@;'; put 'put ''ZXJ0Il1dLEI9MDtCPFYubGVuZ3RoO0IrKyl7dmFyIFk9VltCXSxVPVlbMV07a1tVXXx8KGtbVV09WVswXSl9TS5leHBvcnRzPWt9LDYzOTM6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVmZmVyLEs9Uig2OTQ4KSxJPVIoNjQyNik7TS5leHBvcnRzPWZ1bmN0aW9uKFYpe3JldHVybiBuZXcg''@;'; put 'put ''RShWKX07dmFyIGs9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5n''@;'; put 'put ''dGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gRShWKXt0aGlzLmN1cnZlVHlwZT1rW1ZdLHRoaXMuY3Vy''@;'; put 'put ''dmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6Vn0pLHRoaXMuY3VydmU9bmV3IEsuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBqKFYsQixZKXtBcnJheS5pc0FycmF5KFYpfHwoVj1WLnRvQXJyYXkoKSk7dmFyIFg9bmV3IHooVik7aWYoWSYm''@;'; put 'put ''WC5sZW5ndGg8WSl7dmFyIFU9bmV3IHooWS1YLmxlbmd0aCk7VS5maWxsKDApLFg9ei5jb25jYXQoW1UsWF0pfXJldHVybiBCP1gudG9TdHJpbmcoQik6WH1rLnAyMjQ9ay5zZWNwMjI0cjEsay5wMjU2PWsuc2VjcDI1NnIxPWsucHJpbWUyNTZ2MSxrLnAxOTI9ay5zZWNwMTkycjE9ay5wcmlt''@;'; put 'put ''ZTE5MnYxLGsucDM4ND1rLnNlY3AzODRyMSxrLnA1MjE9ay5zZWNwNTIxcjEsRS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKFYsQil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShWLEIpfSxFLnByb3RvdHlwZS5jb21w''@;'; put 'put ''dXRlU2VjcmV0PWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gQj1CfHwidXRmOCIsei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSksaih0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoVikuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxZLHRoaXMuY3VydmVU''@;'; put 'put ''eXBlLmJ5dGVMZW5ndGgpfSxFLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oVixCKXt2YXIgWT10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PUIsITApO3JldHVybiJoeWJyaWQiPT09QiYmKFlbMF09WVtZLmxlbmd0aC0xXSUyPzc6NiksaihZLFYpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFYpe3JldHVybiBqKHRoaXMua2V5cy5nZXRQcml2YXRlKCksVil9LEUucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihWLEIpe3JldHVybiBCPUJ8fCJ1dGY4Iix6LmlzQnVmZmVyKFYpfHwoVj1uZXcgeihWLEIpKSx0aGlzLmtleXMu''@;'; put 'put ''X2ltcG9ydFB1YmxpYyhWKSx0aGlzfSxFLnByb3RvdHlwZS5zZXRQcml2YXRlS2V5PWZ1bmN0aW9uKFYsQil7Qj1CfHwidXRmOCIsei5pc0J1ZmZlcihWKXx8KFY9bmV3IHooVixCKSk7dmFyIFk9bmV3IEkoVik7cmV0dXJuIFk9WS50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUu''@;'; put 'put ''Z2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShZKSx0aGlzfX0sNjQyNjpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlv''@;'; put 'put ''biBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49''@;'; put 'put ''RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+''@;'; put 'put ''PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9''@;'; put 'put ''Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXpl''@;'; put 'put ''PT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9T''@;'; put 'put ''dHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMp''@;'; put 'put ''KSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZn''@;'; put 'put ''LGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxT''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlz''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxn''@;'; put 'put ''W3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisy''@;'; put 'put ''XTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVu''@;'; put 'put ''Z3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29y''@;'; put 'put ''ZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4''@;'; put 'put ''LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zv''@;'; put 'put ''cih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAh''@;'; put 'put ''PT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29w''@;'; put 'put ''eT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5w''@;'; put 'put ''cm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJv''@;'; put 'put ''dG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIw''@;'; put 'put ''MDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3''@;'; put 'put ''NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3''@;'; put 'put ''OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2''@;'; put 'put ''YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYs''@;'; put 'put ''TGU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStMZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29y''@;'; put 'put ''ZHNbZmVdPTB8TGUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIg''@;'; put 'put ''dj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+''@;'; put 'put ''PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFy''@;'; put 'put ''IHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStMZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7''@;'; put 'put ''Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09''@;'; put 'put ''dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3Jl''@;'; put 'put ''IHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5''@;'; put 'put ''TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYp''@;'; put 'put ''O0kodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZl''@;'; put 'put ''LmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0x''@;'; put 'put ''XT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+''@;'; put 'put ''PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49Nyks''@;'; put 'put ''ISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgt''@;'; put 'put ''MSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9''@;'; put 'put ''LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNs''@;'; put 'put ''b25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMu''@;'; put 'put ''bGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5n''@;'; put 'put ''dGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVh''@;'; put 'put ''bmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRz''@;'; put 'put ''W3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9''@;'; put 'put ''PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1n''@;'; put 'put ''JTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29y''@;'; put 'put ''ZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10''@;'; put 'put ''aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3Ro''@;'; put 'put ''PyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3''@;'; put 'put ''XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53''@;'; put 'put ''b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVn''@;'; put 'put ''YXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3Zh''@;'; put 'put ''ciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tK''@;'; put 'put ''XSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7''@;'; put 'put ''SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04''@;'; put 'put ''MTkxJktlLEplPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxpdD0wfEpbN10sdXQ9ODE5MSZp''@;'; put 'put ''dCxNdD1pdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4s''@;'; put 'put ''WHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4seW49SW4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4s''@;'; put 'put ''Qm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChMZSxlbikpfDApKygoODE5MSYo''@;'; put 'put ''cD0ocD1NYXRoLmltdWwoTGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwo''@;'; put 'put ''V2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4x''@;'; put 'put ''Myl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChKZSxlbil8MCx3PU1hdGguaW11bChKZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQp''@;'; put 'put ''fDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxm''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKEplLGZ0KXwwLHc9dytNYXRoLmltdWwoSmUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVs''@;'; put 'put ''KExlLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0o''@;'; put 'put ''cD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZ''@;'; put 'put ''ZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsdz13K01hdGguaW11bChKZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1u''@;'; put 'put ''KXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxKdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxKdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3''@;'; put 'put ''MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLE50KXwwLHc9dytNYXRoLmltdWwoSmUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxKdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUs''@;'; put 'put ''JG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoWWUsSXQpfDAscD0ocD1wK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLHc9dytNYXRoLmltdWwoSmUsSnQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChX''@;'; put 'put ''ZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhy''@;'; put 'put ''Jj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGgu''@;'; put 'put ''aW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01hdGguaW11bChQZSxKdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsSnQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFllLFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsdz13K01hdGguaW11bChKZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditN''@;'; put 'put ''YXRoLmltdWwoTGUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0''@;'; put 'put ''LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChi''@;'; put 'put ''ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLHc9dytNYXRoLmltdWwoSmUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGpl''@;'; put 'put ''LEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRo''@;'; put 'put ''LmltdWwoRmUsUG4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxKdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQs''@;'; put 'put ''SnQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKEplLHNuKXwwLHc9dytNYXRoLmltdWwoSmUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXww''@;'; put 'put ''KStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''RmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLEp0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLHc9dytNYXRoLmltdWwoSmUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVs''@;'; put 'put ''KGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsSXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxK''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsSnQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01h''@;'; put 'put ''dGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGgu''@;'; put 'put ''aW11bChKZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoSmUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4s''@;'; put 'put ''bW4pLHY9ditNYXRoLmltdWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxKdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLHc9dytNYXRoLmltdWwob24sSnQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRo''@;'; put 'put ''LmltdWwoVXQsSnQpKStNYXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sSnQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStN''@;'; put 'put ''YXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVs''@;'; put 'put ''KGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStN''@;'; put 'put ''YXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKHV0LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFyIExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMp''@;'; put 'put ''fDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYr''@;'; put 'put ''TWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2''@;'; put 'put ''PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09''@;'; put 'put ''Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMs''@;'; put 'put ''MCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMp''@;'; put 'put ''e3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAu''@;'; put 'put ''bGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKysp''@;'; put 'put ''e3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYzJihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5l''@;'; put 'put ''PXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRz''@;'; put 'put ''KGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1''@;'; put 'put ''cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixw''@;'; put 'put ''KTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12''@;'; put 'put ''W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sSmU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPUplKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKEplPWRlKkxlLWZlKkZlLEZlPWRl''@;'; put 'put ''KkZlK2ZlKkxlLExlPUplKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihn''@;'; put 'put ''LEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2''@;'; put 'put ''PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2''@;'; put 'put ''KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zv''@;'; put 'put ''cih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5l''@;'; put 'put ''dyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQx''@;'; put 'put ''M2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09l''@;'; put 'put ''XStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRp''@;'; put 'put ''dmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11''@;'; put 'put ''bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4''@;'; put 'put ''ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5z''@;'; put 'put ''cXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcu''@;'; put 'put ''Yml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09''@;'; put 'put ''Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYm''@;'; put 'put ''Zz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+''@;'; put 'put ''PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0''@;'; put 'put ''aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMl''@;'; put 'put ''MjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtu''@;'; put 'put ''ZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10''@;'; put 'put ''aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0''@;'; put 'put ''aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxD''@;'; put 'put ''KSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0''@;'; put 'put ''aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMu''@;'; put 'put ''d29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtD''@;'; put 'put ''PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90''@;'; put 'put ''eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUu''@;'; put 'put ''cHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4''@;'; put 'put ''NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCk7Zm9yKEkoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u''@;'; put 'put ''KGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lm''@;'; put 'put ''KCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZl''@;'; put 'put ''JiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1pbihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxu''@;'; put 'put ''c3VibXVsKHAsTGUseGUpOzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9''@;'; put 'put ''PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdh''@;'; put 'put ''dGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3''@;'; put 'put ''PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVn''@;'; put 'put ''YXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09''@;'; put 'put ''Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0s''@;'; put 'put ''RS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2''@;'; put 'put ''KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0''@;'; put 'put ''KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1pl''@;'; put 'put ''cm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNo''@;'; put 'put ''cm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNP''@;'; put 'put ''ZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgp''@;'; put 'put ''KSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnBy''@;'; put 'put ''b3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtD''@;'; put 'put ''LmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0x''@;'; put 'put ''OyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1''@;'; put 'put ''cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNs''@;'; put 'put ''b25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIg''@;'; put 'put ''cD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJv''@;'; put 'put ''dG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9''@;'; put 'put ''LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAh''@;'; put 'put ''PT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3Ry''@;'; put 'put ''aXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1''@;'; put 'put ''bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBl''@;'; put 'put ''LnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9''@;'; put 'put ''PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09''@;'; put 'put ''PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1i''@;'; put 'put ''ZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9t''@;'; put 'put ''UmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRN''@;'; put 'put ''dWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZElu''@;'; put 'put ''dm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwi''@;'; put 'put ''cmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5y''@;'; put 'put ''ZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCks''@;'; put 'put ''dGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZm''@;'; put 'put ''ZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlm''@;'; put 'put ''dD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51''@;'; put 'put ''bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0''@;'; put 'put ''TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3Rv''@;'; put 'put ''dHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1h''@;'; put 'put ''dGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEw''@;'; put 'put ''O3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRz''@;'; put 'put ''W2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53''@;'; put 'put ''b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkq''@;'; put 'put ''KDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcg''@;'; put 'put ''Y2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5j''@;'; put 'put ''dGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUp''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2Zv''@;'; put 'put ''cmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhp''@;'; put 'put ''cy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMu''@;'; put 'put ''Y21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5p''@;'; put 'put ''c3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMp''@;'; put 'put ''KX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90''@;'; put 'put ''b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2''@;'; put 'put ''YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1''@;'; put 'put ''c2hybigxKTtJKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5l''@;'; put 'put ''KS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBPZT1MZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1P''@;'; put 'put ''ZS5yZWRTcXIoKTtJKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBD''@;'; put 'put ''PWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lm''@;'; put 'put ''KDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExl''@;'; put 'put ''bmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwo''@;'; put 'put ''ND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlw''@;'; put 'put ''ZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4o''@;'; put 'put ''dGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0''@;'; put 'put ''dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhp''@;'; put 'put ''cy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2''@;'; put 'put ''YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4o''@;'; put 'put ''MCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDM0ODI6KE0s''@;'; put 'put ''TyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9UigyMzE4KSxJPVIoOTc4NSksaz1SKDkwNzIpLEU9UigxMDI3KTtmdW5jdGlvbiBqKFYpe0UuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPVZ9eihqLEUpLGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhp''@;'; put 'put ''cy5faGFzaC51cGRhdGUoVil9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxNLmV4cG9ydHM9ZnVuY3Rpb24oVil7cmV0dXJuIm1kNSI9PT0oVj1WLnRvTG93ZXJDYXNlKCkpP25ldyBLOiJybWQxNjAiPT09Vnx8InJpcGVtZDE2MCI9''@;'; put 'put ''PT1WP25ldyBJOm5ldyBqKGsoVikpfX0sODAyODooTSxPLFIpPT57dmFyIHo9UigyMzE4KTtNLmV4cG9ydHM9ZnVuY3Rpb24oSyl7cmV0dXJuKG5ldyB6KS51cGRhdGUoSykuZGlnZXN0KCl9fSw4MzU1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1NzE3KSxLPVIoMTAzMSksST1S''@;'; put 'put ''KDEwMjcpLGs9Uig5NTA5KS5CdWZmZXIsRT1SKDgwMjgpLGo9Uig5Nzg1KSxWPVIoOTA3MiksQj1rLmFsbG9jKDEyOCk7ZnVuY3Rpb24gWShYLFUpe0kuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIFUmJihVPWsuZnJvbShVKSk7dmFyIHE9InNoYTUxMiI9PT1YfHwic2hh''@;'; put 'put ''Mzg0Ij09PVg/MTI4OjY0O3RoaXMuX2FsZz1YLHRoaXMuX2tleT1VLFUubGVuZ3RoPnE/VT0oInJtZDE2MCI9PT1YP25ldyBqOlYoWCkpLnVwZGF0ZShVKS5kaWdlc3QoKTpVLmxlbmd0aDxxJiYoVT1rLmNvbmNhdChbVSxCXSxxKSk7Zm9yKHZhciBlZT10aGlzLl9pcGFkPWsuYWxsb2NVbnNh''@;'; put 'put ''ZmUocSksdGU9dGhpcy5fb3BhZD1rLmFsbG9jVW5zYWZlKHEpLG9lPTA7b2U8cTtvZSsrKWVlW29lXT01NF5VW29lXSx0ZVtvZV09OTJeVVtvZV07dGhpcy5faGFzaD0icm1kMTYwIj09PVg/bmV3IGo6VihYKSx0aGlzLl9oYXNoLnVwZGF0ZShlZSl9eihZLEkpLFkucHJvdG90eXBlLl91cGRh''@;'; put 'put ''dGU9ZnVuY3Rpb24oWCl7dGhpcy5faGFzaC51cGRhdGUoWCl9LFkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBYPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBqOlYodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0''@;'; put 'put ''ZShYKS5kaWdlc3QoKX0sTS5leHBvcnRzPWZ1bmN0aW9uKFgsVSl7cmV0dXJuInJtZDE2MCI9PT0oWD1YLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PVg/bmV3IFkoInJtZDE2MCIsVSk6Im1kNSI9PT1YP25ldyBLKEUsVSk6bmV3IFkoWCxVKX19LDEwMzE6KE0sTyxSKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgej1SKDU3MTcpLEs9Uig5NTA5KS5CdWZmZXIsST1SKDEwMjcpLGs9Sy5hbGxvYygxMjgpLEU9NjQ7ZnVuY3Rpb24gaihWLEIpe0kuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIEImJihCPUsuZnJvbShCKSksdGhpcy5fYWxnPVYsdGhpcy5fa2V5PUIs''@;'; put 'put ''Qi5sZW5ndGg+RT9CPVYoQik6Qi5sZW5ndGg8RSYmKEI9Sy5jb25jYXQoW0Isa10sRSkpO2Zvcih2YXIgWT10aGlzLl9pcGFkPUsuYWxsb2NVbnNhZmUoRSksWD10aGlzLl9vcGFkPUsuYWxsb2NVbnNhZmUoRSksVT0wO1U8RTtVKyspWVtVXT01NF5CW1VdLFhbVV09OTJeQltVXTt0aGlzLl9o''@;'; put 'put ''YXNoPVtZXX16KGosSSksai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWKXt0aGlzLl9oYXNoLnB1c2goVil9LGoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2FsZyhLLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhLLmNvbmNhdChbdGhp''@;'; put 'put ''cy5fb3BhZCxWXSkpfSxNLmV4cG9ydHM9an0sNTgzNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08ucmFuZG9tQnl0ZXM9Ty5ybmc9Ty5wc2V1ZG9SYW5kb21CeXRlcz1PLnBybmc9UigxNzk4KSxPLmNyZWF0ZUhhc2g9Ty5IYXNoPVIoMzQ4MiksTy5jcmVhdGVIbWFjPU8uSG1hYz1SKDgzNTUp''@;'; put 'put ''O3ZhciB6PVIoNjA0MiksSz1PYmplY3Qua2V5cyh6KSxJPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChLKTtPLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBJfTt2YXIgaz1SKDU2MzIpO08ucGJrZGYyPWsucGJr''@;'; put 'put ''ZGYyLE8ucGJrZGYyU3luYz1rLnBia2RmMlN5bmM7dmFyIEU9UigzNjE0KTtPLkNpcGhlcj1FLkNpcGhlcixPLmNyZWF0ZUNpcGhlcj1FLmNyZWF0ZUNpcGhlcixPLkNpcGhlcml2PUUuQ2lwaGVyaXYsTy5jcmVhdGVDaXBoZXJpdj1FLmNyZWF0ZUNpcGhlcml2LE8uRGVjaXBoZXI9RS5EZWNp''@;'; put 'put ''cGhlcixPLmNyZWF0ZURlY2lwaGVyPUUuY3JlYXRlRGVjaXBoZXIsTy5EZWNpcGhlcml2PUUuRGVjaXBoZXJpdixPLmNyZWF0ZURlY2lwaGVyaXY9RS5jcmVhdGVEZWNpcGhlcml2LE8uZ2V0Q2lwaGVycz1FLmdldENpcGhlcnMsTy5saXN0Q2lwaGVycz1FLmxpc3RDaXBoZXJzO3ZhciBqPVIo''@;'; put 'put ''MjYwNyk7Ty5EaWZmaWVIZWxsbWFuR3JvdXA9ai5EaWZmaWVIZWxsbWFuR3JvdXAsTy5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9ai5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsTy5nZXREaWZmaWVIZWxsbWFuPWouZ2V0RGlmZmllSGVsbG1hbixPLmNyZWF0ZURpZmZpZUhlbGxtYW49ai5j''@;'; put 'put ''cmVhdGVEaWZmaWVIZWxsbWFuLE8uRGlmZmllSGVsbG1hbj1qLkRpZmZpZUhlbGxtYW47dmFyIFY9Uig0NzQzKTtPLmNyZWF0ZVNpZ249Vi5jcmVhdGVTaWduLE8uU2lnbj1WLlNpZ24sTy5jcmVhdGVWZXJpZnk9Vi5jcmVhdGVWZXJpZnksTy5WZXJpZnk9Vi5WZXJpZnksTy5jcmVhdGVFQ0RI''@;'; put 'put ''PVIoNjM5Myk7dmFyIEI9Uig3OTAwKTtPLnB1YmxpY0VuY3J5cHQ9Qi5wdWJsaWNFbmNyeXB0LE8ucHJpdmF0ZUVuY3J5cHQ9Qi5wcml2YXRlRW5jcnlwdCxPLnB1YmxpY0RlY3J5cHQ9Qi5wdWJsaWNEZWNyeXB0LE8ucHJpdmF0ZURlY3J5cHQ9Qi5wcml2YXRlRGVjcnlwdDt2YXIgWT1SKDc5''@;'; put 'put ''NjMpO08ucmFuZG9tRmlsbD1ZLnJhbmRvbUZpbGwsTy5yYW5kb21GaWxsU3luYz1ZLnJhbmRvbUZpbGxTeW5jLE8uY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWyJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldCIsIndl''@;'; put 'put ''IGFjY2VwdCBwdWxsIHJlcXVlc3RzIiwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Il0uam9pbigiXG4iKSl9LE8uY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFC''@;'; put 'put ''TEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxS''@;'; put 'put ''U0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sNTA1NjooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZm''@;'; put 'put ''ZXI7Y29uc3R7VHJhbnNmb3JtOkt9PVIoMjgzMCksST16LmZyb20oWzIzOSwxODcsMTkxXSk7Y2xhc3MgayBleHRlbmRzIEt7Y29uc3RydWN0b3IoY2U9e30pe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6ITAsLi4uY2V9KTtjb25zdCBHPXt9O2xldCBiO2ZvcihsZXQgRCBpbiBjZSlHW0Io''@;'; put 'put ''RCldPWNlW0RdO2lmKGI9dGhpcy5ub3JtYWxpemUoRykpdGhyb3cgYjtzd2l0Y2goRy5yZWNvcmRfZGVsaW1pdGVyKXtjYXNlImF1dG8iOkcucmVjb3JkX2RlbGltaXRlcj1udWxsO2JyZWFrO2Nhc2UidW5peCI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcbiI7YnJlYWs7Y2FzZSJtYWMiOkcucmVj''@;'; put 'put ''b3JkX2RlbGltaXRlcj0iXHIiO2JyZWFrO2Nhc2Uid2luZG93cyI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcclxuIjticmVhaztjYXNlImFzY2lpIjpHLnJlY29yZF9kZWxpbWl0ZXI9Ilx4MWUiO2JyZWFrO2Nhc2UidW5pY29kZSI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcdTIwMjgifXRoaXMub3B0''@;'; put 'put ''aW9ucz1HLHRoaXMuc3RhdGU9e3N0b3A6ITF9LHRoaXMuaW5mbz17cmVjb3JkczowfX1ub3JtYWxpemUoY2Upe2lmKG51bGw9PWNlLmJvbXx8ITE9PT1jZS5ib20pY2UuYm9tPSExO2Vsc2UgaWYoITAhPT1jZS5ib20pcmV0dXJuIG5ldyBqKCJDU1ZfT1BUSU9OX0JPT0xFQU5fSU5WQUxJRF9U''@;'; put 'put ''WVBFIixbIm9wdGlvbiBgYm9tYCBpcyBvcHRpb25hbCBhbmQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuYm9tKX1gXSk7aWYobnVsbD09Y2UuZGVsaW1pdGVyKWNlLmRlbGltaXRlcj0iLCI7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLmRlbGltaXRl''@;'; put 'put ''cikpY2UuZGVsaW1pdGVyPWNlLmRlbGltaXRlci50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5kZWxpbWl0ZXIpcmV0dXJuIG5ldyBqKCJDU1ZfT1BUSU9OX0RFTElNSVRFUl9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBkZWxpbWl0ZXJgIG11c3QgYmUgYSBidWZmZXIg''@;'; put 'put ''b3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZGVsaW1pdGVyKX1gXSk7aWYobnVsbD09Y2UucXVvdGUpY2UucXVvdGU9JyInO2Vsc2UgaWYoITA9PT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMT09PWNlLnF1b3RlKWNlLnF1b3RlPSIiO2Vsc2UgaWYoei5p''@;'; put 'put ''c0J1ZmZlcihjZS5xdW90ZSkpY2UucXVvdGU9Y2UucXVvdGUudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10eXBlb2YgY2UucXVvdGUpcmV0dXJuIG5ldyBqKCJDU1ZfT1BUSU9OX1FVT1RFX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYHF1b3RlYCBtdXN0IGJlIGEgYm9vbGVhbiwgYSBi''@;'; put 'put ''dWZmZXIgb3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UucXVvdGUpfWBdKTtpZihudWxsIT1jZS5xdW90ZWR8fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLnF1b3RlZF9lbXB0eXx8KGNlLnF1b3RlZF9lbXB0eT12b2lkIDApLG51bGw9PWNlLnF1b3RlZF9tYXRjaHx8ITE9''@;'; put 'put ''PT1jZS5xdW90ZWRfbWF0Y2g/Y2UucXVvdGVkX21hdGNoPW51bGw6QXJyYXkuaXNBcnJheShjZS5xdW90ZWRfbWF0Y2gpfHwoY2UucXVvdGVkX21hdGNoPVtjZS5xdW90ZWRfbWF0Y2hdKSxjZS5xdW90ZWRfbWF0Y2gpZm9yKGxldCBHIG9mIGNlLnF1b3RlZF9tYXRjaCl7Y29uc3QgYj1HIGlu''@;'; put 'put ''c3RhbmNlb2YgUmVnRXhwO2lmKCJzdHJpbmciIT10eXBlb2YgRyYmIWIpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogcXVvdGVkX21hdGNoIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoRyl9YCl9aWYobnVsbCE9Y2UucXVvdGVkX3N0cmlu''@;'; put 'put ''Z3x8KGNlLnF1b3RlZF9zdHJpbmc9ITEpLG51bGwhPWNlLmVvZnx8KGNlLmVvZj0hMCksbnVsbD09Y2UuZXNjYXBlKWNlLmVzY2FwZT0nIic7ZWxzZSBpZih6LmlzQnVmZmVyKGNlLmVzY2FwZSkpY2UuZXNjYXBlPWNlLmVzY2FwZS50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiBjZS5lc2NhcGUpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNjYXBlIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmVzY2FwZSl9YCk7aWYoY2UuZXNjYXBlLmxlbmd0aD4xKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246''@;'; put 'put ''IGVzY2FwZSBtdXN0IGJlIG9uZSBjaGFyYWN0ZXIsIGdvdCAke2NlLmVzY2FwZS5sZW5ndGh9IGNoYXJhY3RlcnNgKTtpZihudWxsIT1jZS5oZWFkZXJ8fChjZS5oZWFkZXI9ITEpLGNlLmNvbHVtbnM9dGhpcy5ub3JtYWxpemVfY29sdW1ucyhjZS5jb2x1bW5zKSxudWxsIT1jZS5xdW90ZWR8''@;'; put 'put ''fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLmNhc3R8fChjZS5jYXN0PXt9KSxudWxsIT1jZS5jYXN0LmJpZ2ludHx8KGNlLmNhc3QuYmlnaW50PUc9PiIiK0cpLG51bGwhPWNlLmNhc3QuYm9vbGVhbnx8KGNlLmNhc3QuYm9vbGVhbj1HPT5HPyIxIjoiIiksbnVsbCE9Y2UuY2FzdC5kYXRlfHwo''@;'; put 'put ''Y2UuY2FzdC5kYXRlPUc9PiIiK0cuZ2V0VGltZSgpKSxudWxsIT1jZS5jYXN0Lm51bWJlcnx8KGNlLmNhc3QubnVtYmVyPUc9PiIiK0cpLG51bGwhPWNlLmNhc3Qub2JqZWN0fHwoY2UuY2FzdC5vYmplY3Q9Rz0+SlNPTi5zdHJpbmdpZnkoRykpLG51bGwhPWNlLmNhc3Quc3RyaW5nfHwoY2Uu''@;'; put 'put ''Y2FzdC5zdHJpbmc9ZnVuY3Rpb24oRyl7cmV0dXJuIEd9KSxudWxsPT1jZS5yZWNvcmRfZGVsaW1pdGVyKWNlLnJlY29yZF9kZWxpbWl0ZXI9IlxuIjtlbHNlIGlmKHouaXNCdWZmZXIoY2UucmVjb3JkX2RlbGltaXRlcikpY2UucmVjb3JkX2RlbGltaXRlcj1jZS5yZWNvcmRfZGVsaW1pdGVy''@;'; put 'put ''LnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLnJlY29yZF9kZWxpbWl0ZXIpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogcmVjb3JkX2RlbGltaXRlciBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5yZWNvcmRf''@;'; put 'put ''ZGVsaW1pdGVyKX1gKX1fdHJhbnNmb3JtKGNlLEcsYil7aWYoITA9PT10aGlzLnN0YXRlLnN0b3ApcmV0dXJuO2lmKCFBcnJheS5pc0FycmF5KGNlKSYmIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLGIoRXJyb3IoYEludmFsaWQgUmVjb3JkOiBleHBlY3Qg''@;'; put 'put ''YW4gYXJyYXkgb3IgYW4gb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZSl9YCkpO2lmKDA9PT10aGlzLmluZm8ucmVjb3JkcylpZihBcnJheS5pc0FycmF5KGNlKSl7aWYoITA9PT10aGlzLm9wdGlvbnMuaGVhZGVyJiYhdGhpcy5vcHRpb25zLmNvbHVtbnMpcmV0dXJuIHRoaXMuc3Rh''@;'; put 'put ''dGUuc3RvcD0hMCxiKEVycm9yKCJVbmRpc2NvdmVyYWJsZSBDb2x1bW5zOiBoZWFkZXIgb3B0aW9uIHJlcXVpcmVzIGNvbHVtbiBvcHRpb24gb3Igb2JqZWN0IHJlY29yZHMiKSl9ZWxzZSBudWxsIT10aGlzLm9wdGlvbnMuY29sdW1uc3x8KHRoaXMub3B0aW9ucy5jb2x1bW5zPXRoaXMubm9y''@;'; put 'put ''bWFsaXplX2NvbHVtbnMoT2JqZWN0LmtleXMoY2UpKSk7MD09PXRoaXMuaW5mby5yZWNvcmRzJiYodGhpcy5ib20oKSx0aGlzLmhlYWRlcnMoKSk7dHJ5e3RoaXMuZW1pdCgicmVjb3JkIixjZSx0aGlzLmluZm8ucmVjb3Jkcyl9Y2F0Y2goSCl7cmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCx0''@;'; put 'put ''aGlzLmVtaXQoImVycm9yIixIKX1sZXQgRDtpZih0aGlzLm9wdGlvbnMuZW9mKXtpZihEPXRoaXMuc3RyaW5naWZ5KGNlKSx2b2lkIDA9PT1EKXJldHVybjtEKz10aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcn1lbHNle2lmKEQ9dGhpcy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUQpcmV0''@;'; put 'put ''dXJuOyh0aGlzLm9wdGlvbnMuaGVhZGVyfHx0aGlzLmluZm8ucmVjb3JkcykmJihEPXRoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyK0QpfXRoaXMuaW5mby5yZWNvcmRzKyssdGhpcy5wdXNoKEQpLGIoKX1fZmx1c2goY2UpezA9PT10aGlzLmluZm8ucmVjb3JkcyYmKHRoaXMuYm9tKCks''@;'; put 'put ''dGhpcy5oZWFkZXJzKCkpLGNlKCl9c3RyaW5naWZ5KGNlLEc9ITEpe2lmKCJvYmplY3QiIT10eXBlb2YgY2UpcmV0dXJuIGNlO2NvbnN0e2NvbHVtbnM6Yn09dGhpcy5vcHRpb25zLEg9W107aWYoQXJyYXkuaXNBcnJheShjZSkpe2ImJmNlLnNwbGljZShiLmxlbmd0aCk7Zm9yKGxldCBnPTA7''@;'; put 'put ''ZzxjZS5sZW5ndGg7ZysrKXtjb25zdCBDPWNlW2ddLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmcsY29sdW1uOmcscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKFMpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsUyk7SFtnXT1bdixDXX19ZWxzZSBpZihi''@;'; put 'put ''KWZvcihsZXQgZz0wO2c8Yi5sZW5ndGg7ZysrKXtjb25zdCBDPWhlKGNlLGJbZ10ua2V5KSxbUyx2XT10aGlzLl9fY2FzdChDLHtpbmRleDpnLGNvbHVtbjpiW2ddLmtleSxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoUylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVy''@;'; put 'put ''cm9yIixTKTtIW2ddPVt2LENdfWVsc2UgZm9yKGxldCBnIG9mIGNlKXtjb25zdCBDPWNlW2ddLFtTLHZdPXRoaXMuX19jYXN0KEMse2luZGV4OmksY29sdW1uOmJbaV0ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZihTKXJldHVybiB2b2lkIHRoaXMuZW1pdCgi''@;'; put 'put ''ZXJyb3IiLFMpO0gucHVzaChbdixDXSl9bGV0IE49IiI7Zm9yKGxldCBnPTA7ZzxILmxlbmd0aDtnKyspe2xldCBDLFMsW3YscF09SFtnXTtpZigic3RyaW5nIj09dHlwZW9mIHYpQz10aGlzLm9wdGlvbnM7ZWxzZSBpZihWKHYpKXtpZihDPXYsdj1DLnZhbHVlLGRlbGV0ZSBDLnZhbHVlLCJz''@;'; put 'put ''dHJpbmciIT10eXBlb2YgdiYmbnVsbCE9dilyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgSW52YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5lZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0cmluZywgbnVsbCBvciB1bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHYp''@;'; put 'put ''fWApKTtpZihDPXsuLi50aGlzLm9wdGlvbnMsLi4uQ30sUz10aGlzLm5vcm1hbGl6ZShDKSlyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixTKX1lbHNle2lmKG51bGwhPXYpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoYEludmFsaWQgQ2FzdGluZyBWYWx1ZTogcmV0''@;'; put 'put ''dXJuZWQgdmFsdWUgbXVzdCByZXR1cm4gYSBzdHJpbmcsIGFuIG9iamVjdCwgbnVsbCBvciB1bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KHYpfWApKTtDPXRoaXMub3B0aW9uc31jb25zdHtkZWxpbWl0ZXI6dyxlc2NhcGU6SixxdW90ZTpuZSxxdW90ZWQ6ZGUscXVvdGVkX2VtcHR5''@;'; put 'put ''OmZlLHF1b3RlZF9zdHJpbmc6eGUscXVvdGVkX21hdGNoOkxlLHJlY29yZF9kZWxpbWl0ZXI6RmV9PUM7aWYodil7aWYoInN0cmluZyIhPXR5cGVvZiB2KXJldHVybiB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgRm9ybWF0dGVyIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVm''@;'; put 'put ''aW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkodil9YCkpLG51bGw7Y29uc3QgT2U9dy5sZW5ndGgmJnYuaW5kZXhPZih3KT49MCxqZT0iIiE9PW5lJiZ2LmluZGV4T2YobmUpPj0wLFdlPXYuaW5kZXhPZihKKT49MCYmSiE9PW5lLEtlPXYuaW5kZXhPZihGZSk+PTAsWWU9eGUmJiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgcDtsZXQgSmU9TGUmJkxlLmZpbHRlcihQZT0+InN0cmluZyI9PXR5cGVvZiBQZT8tMSE9PXYuaW5kZXhPZihQZSk6UGUudGVzdCh2KSk7SmU9SmUmJkplLmxlbmd0aD4wO2NvbnN0IGx0PSEwPT09amV8fE9lfHxLZXx8ZGV8fFllfHxKZTtpZighMD09PWx0JiYhMD09PVdlKXtj''@;'; put 'put ''b25zdCBQZT0iXFwiPT09Sj9uZXcgUmVnRXhwKEorSiwiZyIpOm5ldyBSZWdFeHAoSiwiZyIpO3Y9di5yZXBsYWNlKFBlLEorSil9aWYoITA9PT1qZSl7Y29uc3QgUGU9bmV3IFJlZ0V4cChuZSwiZyIpO3Y9di5yZXBsYWNlKFBlLEorbmUpfSEwPT09bHQmJih2PW5lK3YrbmUpLE4rPXZ9ZWxz''@;'; put 'put ''ZSghMD09PWZlfHwiIj09PXAmJiEwPT09eGUmJiExIT09ZmUpJiYoTis9bmUrbmUpO2chPT1ILmxlbmd0aC0xJiYoTis9dyl9cmV0dXJuIE59Ym9tKCl7ITA9PT10aGlzLm9wdGlvbnMuYm9tJiZ0aGlzLnB1c2goSSl9aGVhZGVycygpe2lmKCExPT09dGhpcy5vcHRpb25zLmhlYWRlcnx8dm9p''@;'; put 'put ''ZCAwPT09dGhpcy5vcHRpb25zLmNvbHVtbnMpcmV0dXJuO2xldCBjZT10aGlzLm9wdGlvbnMuY29sdW1ucy5tYXAoRz0+Ry5oZWFkZXIpO2NlPXRoaXMub3B0aW9ucy5lb2Y/dGhpcy5zdHJpbmdpZnkoY2UsITApK3RoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyOnRoaXMuc3RyaW5naWZ5''@;'; put 'put ''KGNlKSx0aGlzLnB1c2goY2UpfV9fY2FzdChjZSxHKXtjb25zdCBiPXR5cGVvZiBjZTt0cnl7cmV0dXJuInN0cmluZyI9PT1iP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Quc3RyaW5nKGNlLEcpXToiYmlnaW50Ij09PWI/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5iaWdpbnQoY2UsRyld''@;'; put 'put ''OiJudW1iZXIiPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0Lm51bWJlcihjZSxHKV06ImJvb2xlYW4iPT09Yj9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmJvb2xlYW4oY2UsRyldOmNlIGluc3RhbmNlb2YgRGF0ZT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmRhdGUoY2UsRyld''@;'; put 'put ''OiJvYmplY3QiPT09YiYmbnVsbCE9PWNlP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Qub2JqZWN0KGNlLEcpXTpbdm9pZCAwLGNlLGNlXX1jYXRjaChEKXtyZXR1cm5bRF19fW5vcm1hbGl6ZV9jb2x1bW5zKGNlKXtpZihudWxsIT1jZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBjZSl0aHJvdyBF''@;'; put 'put ''cnJvcignSW52YWxpZCBvcHRpb24gImNvbHVtbnMiOiBleHBlY3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0Jyk7aWYoQXJyYXkuaXNBcnJheShjZSkpe2NvbnN0IEc9W107Zm9yKGxldCBiIG9mIGNlKWlmKCJzdHJpbmciPT10eXBlb2YgYilHLnB1c2goe2tleTpiLGhlYWRlcjpifSk7ZWxzZXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGJ8fHZvaWQgMD09PWJ8fEFycmF5LmlzQXJyYXkoYikpdGhyb3cgRXJyb3IoIkludmFsaWQgY29sdW1uIGRlZmluaXRpb246IGV4cGVjdCBhIHN0cmluZyBvciBhbiBvYmplY3QiKTtpZighYi5rZXkpdGhyb3cgRXJyb3IoJ0ludmFsaWQgY29sdW1uIGRlZmlu''@;'; put 'put ''aXRpb246IHByb3BlcnR5ICJrZXkiIGlzIHJlcXVpcmVkJyk7dm9pZCAwPT09Yi5oZWFkZXImJihiLmhlYWRlcj1iLmtleSksRy5wdXNoKGIpfWNlPUd9ZWxzZXtjb25zdCBHPVtdO2ZvcihsZXQgYiBpbiBjZSlHLnB1c2goe2tleTpiLGhlYWRlcjpjZVtiXX0pO2NlPUd9cmV0dXJuIGNlfX19''@;'; put 'put ''Y29uc3QgRT1mdW5jdGlvbigpe2xldCB1ZSxjZSxHO2ZvcihsZXQgRCBpbiBhcmd1bWVudHMpe2NvbnN0IEg9YXJndW1lbnRzW0RdLE49dHlwZW9mIEg7aWYodm9pZCAwPT09dWUmJkFycmF5LmlzQXJyYXkoSCkpdWU9SDtlbHNlIGlmKHZvaWQgMD09PWNlJiZWKEgpKWNlPUg7ZWxzZXtpZih2''@;'; put 'put ''b2lkIDAhPT1HfHwiZnVuY3Rpb24iIT09Til0aHJvdyBuZXcgaigiQ1NWX0lOVkFMSURfQVJHVU1FTlQiLFsiSW52YWxpZCBhcmd1bWVudDoiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShIKX0gYXQgaW5kZXggJHtEfWBdKTtHPUh9fWNvbnN0IGI9bmV3IGsoY2UpO2lmKEcpe2NvbnN0IEQ9W107''@;'; put 'put ''Yi5vbigicmVhZGFibGUiLGZ1bmN0aW9uKCl7bGV0IEg7Zm9yKDtudWxsIT09KEg9dGhpcy5yZWFkKCkpOylELnB1c2goSCl9KSxiLm9uKCJlcnJvciIsZnVuY3Rpb24oSCl7RyhIKX0pLGIub24oImVuZCIsZnVuY3Rpb24oKXtHKHZvaWQgMCxELmpvaW4oIiIpKX0pfWlmKHZvaWQgMCE9PXVl''@;'; put 'put ''KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUpc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCl7Zm9yKGxldCBEIG9mIHVlKWIud3JpdGUoRCk7Yi5lbmQoKX0pO2Vsc2V7Zm9yKGxldCBEIG9mIHVlKWIud3JpdGUoRCk7Yi5lbmQoKX1yZXR1cm4gYn07Y2xhc3MgaiBleHRlbmRzIEVy''@;'; put 'put ''cm9ye2NvbnN0cnVjdG9yKGNlLEcsLi4uYil7QXJyYXkuaXNBcnJheShHKSYmKEc9Ry5qb2luKCIgIikpLHN1cGVyKEcpLHZvaWQgMCE9PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGopLHRoaXMuY29kZT1jZTtmb3IoY29uc3QgRCBvZiBi''@;'; put 'put ''KWZvcihjb25zdCBIIGluIEQpe2NvbnN0IE49RFtIXTt0aGlzW0hdPXouaXNCdWZmZXIoTik/Ti50b1N0cmluZygpOm51bGw9PU4/TjpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KE4pKX19fUUuU3RyaW5naWZpZXI9ayxFLkNzdkVycm9yPWosTS5leHBvcnRzPUU7Y29uc3QgVj1mdW5jdGlv''@;'; put 'put ''bih1ZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB1ZSYmbnVsbCE9PXVlJiYhQXJyYXkuaXNBcnJheSh1ZSl9LEI9ZnVuY3Rpb24odWUpe3JldHVybiB1ZS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oY2UsRyl7cmV0dXJuIl8iK0cudG9Mb3dlckNhc2UoKX0pfSxZPSIuIi5jaGFyQ29k''@;'; put 'put ''ZUF0KDApLFg9L1xcKFxcKT8vZyxVPVJlZ0V4cCgiW14uW1xcXV0rfFxcWyg/OihbXlwiJ11bXltdKil8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkiLCJnIikscT0vXC58XFsoPzpbXltcXV0qfChb''@;'; put 'put ''IiddKSg/Oig/IVwxKVteXFxdfFxcLikqP1wxKVxdLyxlZT0vXlx3KiQvLHRlPWZ1bmN0aW9uKHVlKXtjb25zdCBjZT10eXBlb2YgdWU7cmV0dXJuInN5bWJvbCI9PT1jZXx8Im9iamVjdCI9PT1jZSYmdWUmJiJbb2JqZWN0IFN5bWJvbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j''@;'; put 'put ''YWxsKHVlKX0sc2U9ZnVuY3Rpb24odWUpe2lmKCJzdHJpbmciPT10eXBlb2YgdWV8fHRlKHVlKSlyZXR1cm4gdWU7Y29uc3QgY2U9YCR7dWV9YDtyZXR1cm4iMCI9PWNlJiYxL3VlPT0tSU5GSU5JVFk/Ii0wIjpjZX0saGU9ZnVuY3Rpb24odWUsY2Upe2xldCBHPTA7Y29uc3QgYj0oY2U9ZnVu''@;'; put 'put ''Y3Rpb24odWUsY2Upe3JldHVybiBBcnJheS5pc0FycmF5KHVlKT91ZTpmdW5jdGlvbihHLGIpe2lmKEFycmF5LmlzQXJyYXkoRykpcmV0dXJuITE7Y29uc3QgRD10eXBlb2YgRztyZXR1cm4hKCJudW1iZXIiIT09RCYmInN5bWJvbCIhPT1EJiYiYm9vbGVhbiIhPT1EJiZHJiYhdGUoRykpfHxl''@;'; put 'put ''ZS50ZXN0KEcpfHwhcS50ZXN0KEcpfHxudWxsIT1iJiZHIGluIE9iamVjdChiKX0odWUsY2UpP1t1ZV06ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXTtyZXR1cm4gRy5jaGFyQ29kZUF0KDApPT09WSYmYi5wdXNoKCIiKSxHLnJlcGxhY2UoVSxmdW5jdGlvbihELEgsTixnKXtsZXQgQz1EO04/Qz1n''@;'; put 'put ''LnJlcGxhY2UoWCwiJDEiKTpIJiYoQz1ILnRyaW0oKSksYi5wdXNoKEMpfSksYn0odWUpfShjZSx1ZSkpLmxlbmd0aDtmb3IoO251bGwhPXVlJiZHPGI7KXVlPXVlW3NlKGNlW0crK10pXTtyZXR1cm4gRyYmRz09PWI/dWU6dm9pZCAwfX0sNzU2NTooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5C''@;'; put 'put ''dWZmZXI7Y29uc3QgSz1SKDUwNTYpLHtTdHJpbmdEZWNvZGVyOkl9PVIoMjU1Myk7TS5leHBvcnRzPWZ1bmN0aW9uKGssRT17fSl7Y29uc3Qgaj1bXTtmdW5jdGlvbiBWKFkpe1kmJmoucHVzaChZLnRvU3RyaW5nKCkpfXouaXNCdWZmZXIoaykmJihrPShuZXcgSSkud3JpdGUoaykpO2xldCBC''@;'; put 'put ''PW5ldyBLLlN0cmluZ2lmaWVyKEUpO0Iub24oImRhdGEiLFYpO2ZvcihsZXQgWSBvZiBrKUIud3JpdGUoWSk7cmV0dXJuIEIuZW5kKCksQi5vZmYoImRhdGEiLFYpLGouam9pbigiIil9fSw0Mjg5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMjE1KSxLPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaz1BcnJheS5wcm90b3R5cGUuY29uY2F0LEU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGo9UigxMDQ0KSgpLFY9RSYmaixCPWZ1bmN0aW9uKFgsVSxxLGVlKXtpZihV''@;'; put 'put ''IGluIFgpaWYoITA9PT1lZSl7aWYoWFtVXT09PXEpcmV0dXJufWVsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mKHRlPWVlKXx8IltvYmplY3QgRnVuY3Rpb25dIiE9PUkuY2FsbCh0ZSl8fCFlZSgpKXJldHVybjt2YXIgdGU7Vj9FKFgsVSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEs''@;'; put 'put ''dmFsdWU6cSx3cml0YWJsZTohMH0pOlhbVV09cX0sWT1mdW5jdGlvbihYLFUpe3ZhciBxPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06e30sZWU9eihVKTtLJiYoZWU9ay5jYWxsKGVlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoVSkpKTtmb3IodmFyIHRlPTA7dGU8ZWUu''@;'; put 'put ''bGVuZ3RoO3RlKz0xKUIoWCxlZVt0ZV0sVVtlZVt0ZV1dLHFbZWVbdGVdXSl9O1kuc3VwcG9ydHNEZXNjcmlwdG9ycz0hIVYsTS5leHBvcnRzPVl9LDUyNTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPLnV0aWxzPVIoMTI3OCksTy5DaXBoZXI9Uig1NzU2KSxPLkRFUz1SKDMyNyksTy5DQkM9''@;'; put 'put ''Uig5MDUxKSxPLkVERT1SKDY1MSl9LDkwNTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk3NDYpLEs9Uig1NzE3KSxJPXt9O2Z1bmN0aW9uIGsoRSl7ei5lcXVhbChFLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgaj0w''@;'; put 'put ''O2o8dGhpcy5pdi5sZW5ndGg7aisrKXRoaXMuaXZbal09RVtqXX1PLmluc3RhbnRpYXRlPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIGooWCl7RS5jYWxsKHRoaXMsWCksdGhpcy5fY2JjSW5pdCgpfUsoaixFKTtmb3IodmFyIFY9T2JqZWN0LmtleXMoSSksQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIg''@;'; put 'put ''WT1WW0JdO2oucHJvdG90eXBlW1ldPUlbWV19cmV0dXJuIGouY3JlYXRlPWZ1bmN0aW9uKFgpe3JldHVybiBuZXcgaihYKX0san0sSS5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBFPW5ldyBrKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9RX0sSS5fdXBkYXRlPWZ1bmN0aW9uKEUs''@;'; put 'put ''aixWLEIpe3ZhciBYPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspVVtxXV49RVtqK3FdO2ZvcihYLl91cGRhdGUuY2FsbCh0aGlzLFUs''@;'; put 'put ''MCxWLEIpLHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdPVZbQitxXX1lbHNle2ZvcihYLl91cGRhdGUuY2FsbCh0aGlzLEUsaixWLEIpLHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylWW0IrcV1ePVVbcV07Zm9yKHE9MDtxPHRoaXMuYmxvY2tTaXplO3ErKylVW3FdPUVbaitxXX19fSw1''@;'; put 'put ''NzU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KTtmdW5jdGlvbiBLKEkpe3RoaXMub3B0aW9ucz1JLHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUp''@;'; put 'put ''LHRoaXMuYnVmZmVyT2ZmPTB9TS5leHBvcnRzPUssSy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LEsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihJKXtyZXR1cm4gMD09PUkubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEkpOnRoaXMu''@;'; put 'put ''X3VwZGF0ZUVuY3J5cHQoSSl9LEsucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEU9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEkubGVuZ3RoLWspLGo9MDtqPEU7aisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK2pdPUlbaytq''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPUUsRX0sSy5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEksayl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEksayksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sSy5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5''@;'; put 'put ''cHQ9ZnVuY3Rpb24oSSl7dmFyIGs9MCxFPTAsVj1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitJLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKGsrPXRoaXMuX2J1ZmZlcihJLGspLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5i''@;'; put 'put ''dWZmZXIubGVuZ3RoJiYoRSs9dGhpcy5fZmx1c2hCdWZmZXIoVixFKSkpO2Zvcih2YXIgQj1JLmxlbmd0aC0oSS5sZW5ndGgtaykldGhpcy5ibG9ja1NpemU7azxCO2srPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShJLGssVixFKSxFKz10aGlzLmJsb2NrU2l6ZTtmb3IoO2s8SS5sZW5n''@;'; put 'put ''dGg7aysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUlba107cmV0dXJuIFZ9LEsucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEkpe2Zvcih2YXIgaz0wLEU9MCxqPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrSS5sZW5ndGgpL3RoaXMu''@;'; put 'put ''YmxvY2tTaXplKS0xLFY9bmV3IEFycmF5KGoqdGhpcy5ibG9ja1NpemUpO2o+MDtqLS0pays9dGhpcy5fYnVmZmVyKEksayksRSs9dGhpcy5fZmx1c2hCdWZmZXIoVixFKTtyZXR1cm4gays9dGhpcy5fYnVmZmVyKEksayksVn0sSy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oSSl7dmFyIGss''@;'; put 'put ''RTtyZXR1cm4gSSYmKGs9dGhpcy51cGRhdGUoSSkpLEU9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLGs/ay5jb25jYXQoRSk6RX0sSy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihJLGspe2lmKDA9PT1rKXJldHVybiExO2Zv''@;'; put 'put ''cig7azxJLmxlbmd0aDspSVtrKytdPTA7cmV0dXJuITB9LEsucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgST1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlz''@;'; put 'put ''Ll91cGRhdGUodGhpcy5idWZmZXIsMCxJLDApLEl9LEsucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihJKXtyZXR1cm4gSX0sSy5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe3ouZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0''@;'; put 'put ''byBkZWNyeXB0Iik7dmFyIEk9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoSSwwKSx0aGlzLl91bnBhZChJKX19LDMyNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpLEk9UigxMjc4KSxrPVIoNTc1Nik7ZnVu''@;'; put 'put ''Y3Rpb24gRSgpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVsbH1mdW5jdGlvbiBqKEIpe2suY2FsbCh0aGlzLEIpO3ZhciBZPW5ldyBFO3RoaXMuX2Rlc1N0YXRlPVksdGhpcy5kZXJpdmVLZXlzKFksQi5rZXkpfUsoaixrKSxNLmV4cG9ydHM9aixqLmNyZWF0ZT1mdW5jdGlv''@;'; put 'put ''bihCKXtyZXR1cm4gbmV3IGooQil9O3ZhciBWPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtqLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKEIsWSl7Qi5rZXlzPW5ldyBBcnJheSgzMiksei5lcXVhbChZLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwiSW52YWxpZCBrZXkg''@;'; put 'put ''bGVuZ3RoIik7dmFyIFg9SS5yZWFkVUludDMyQkUoWSwwKSxVPUkucmVhZFVJbnQzMkJFKFksNCk7SS5wYzEoWCxVLEIudG1wLDApLFg9Qi50bXBbMF0sVT1CLnRtcFsxXTtmb3IodmFyIHE9MDtxPEIua2V5cy5sZW5ndGg7cSs9Mil7dmFyIGVlPVZbcT4+PjFdO1g9SS5yMjhzaGwoWCxlZSks''@;'; put 'put ''VT1JLnIyOHNobChVLGVlKSxJLnBjMihYLFUsQi5rZXlzLHEpfX0sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihCLFksWCxVKXt2YXIgcT10aGlzLl9kZXNTdGF0ZSxlZT1JLnJlYWRVSW50MzJCRShCLFkpLHRlPUkucmVhZFVJbnQzMkJFKEIsWSs0KTtJLmlwKGVlLHRlLHEudG1wLDAp''@;'; put 'put ''LGVlPXEudG1wWzBdLHRlPXEudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KHEsZWUsdGUscS50bXAsMCk6dGhpcy5fZGVjcnlwdChxLGVlLHRlLHEudG1wLDApLHRlPXEudG1wWzFdLEkud3JpdGVVSW50MzJCRShYLGVlPXEudG1wWzBdLFUpLEkud3JpdGVVSW50''@;'; put 'put ''MzJCRShYLHRlLFUrNCl9LGoucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oQixZKXtmb3IodmFyIFg9Qi5sZW5ndGgtWSxVPVk7VTxCLmxlbmd0aDtVKyspQltVXT1YO3JldHVybiEwfSxqLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oQil7Zm9yKHZhciBZPUJbQi5sZW5ndGgtMV0sWD1CLmxl''@;'; put 'put ''bmd0aC1ZO1g8Qi5sZW5ndGg7WCsrKXouZXF1YWwoQltYXSxZKTtyZXR1cm4gQi5zbGljZSgwLEIubGVuZ3RoLVkpfSxqLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihCLFksWCxVLHEpe2Zvcih2YXIgZWU9WSx0ZT1YLG9lPTA7b2U8Qi5rZXlzLmxlbmd0aDtvZSs9Mil7dmFyIHNlPUIu''@;'; put 'put ''a2V5c1tvZV0saGU9Qi5rZXlzW29lKzFdO0kuZXhwYW5kKHRlLEIudG1wLDApO3ZhciB1ZT1JLnN1YnN0aXR1dGUoc2VePUIudG1wWzBdLGhlXj1CLnRtcFsxXSksY2U9dGU7dGU9KGVlXkkucGVybXV0ZSh1ZSkpPj4+MCxlZT1jZX1JLnJpcCh0ZSxlZSxVLHEpfSxqLnByb3RvdHlwZS5fZGVj''@;'; put 'put ''cnlwdD1mdW5jdGlvbihCLFksWCxVLHEpe2Zvcih2YXIgZWU9WCx0ZT1ZLG9lPUIua2V5cy5sZW5ndGgtMjtvZT49MDtvZS09Mil7dmFyIHNlPUIua2V5c1tvZV0saGU9Qi5rZXlzW29lKzFdO0kuZXhwYW5kKGVlLEIudG1wLDApO3ZhciB1ZT1JLnN1YnN0aXR1dGUoc2VePUIudG1wWzBdLGhl''@;'; put 'put ''Xj1CLnRtcFsxXSksY2U9ZWU7ZWU9KHRlXkkucGVybXV0ZSh1ZSkpPj4+MCx0ZT1jZX1JLnJpcChlZSx0ZSxVLHEpfX0sNjUxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NzQ2KSxLPVIoNTcxNyksST1SKDU3NTYpLGs9UigzMjcpO2Z1bmN0aW9uIEUoVixCKXt6LmVxdWFsKEIu''@;'; put 'put ''bGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgWT1CLnNsaWNlKDAsOCksWD1CLnNsaWNlKDgsMTYpLFU9Qi5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PVY/W2suY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6WX0pLGsuY3JlYXRlKHt0eXBlOiJkZWNy''@;'; put 'put ''eXB0IixrZXk6WH0pLGsuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6VX0pXTpbay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpVfSksay5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpYfSksay5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpZfSldfWZ1bmN0aW9uIGooVil7SS5j''@;'; put 'put ''YWxsKHRoaXMsVik7dmFyIEI9bmV3IEUodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPUJ9SyhqLEkpLE0uZXhwb3J0cz1qLGouY3JlYXRlPWZ1bmN0aW9uKFYpe3JldHVybiBuZXcgaihWKX0sai5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihWLEIsWSxYKXt2''@;'; put 'put ''YXIgVT10aGlzLl9lZGVTdGF0ZTtVLmNpcGhlcnNbMF0uX3VwZGF0ZShWLEIsWSxYKSxVLmNpcGhlcnNbMV0uX3VwZGF0ZShZLFgsWSxYKSxVLmNpcGhlcnNbMl0uX3VwZGF0ZShZLFgsWSxYKX0sai5wcm90b3R5cGUuX3BhZD1rLnByb3RvdHlwZS5fcGFkLGoucHJvdG90eXBlLl91bnBhZD1r''@;'; put 'put ''LnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KE0sTyk9PnsidXNlIHN0cmljdCI7Ty5yZWFkVUludDMyQkU9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oSVswK2tdPDwyNHxJWzEra108PDE2fElbMitrXTw8OHxJWzMra10pPj4+MH0sTy53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKEksayxFKXtJWzArRV09''@;'; put 'put ''az4+PjI0LElbMStFXT1rPj4+MTYmMjU1LElbMitFXT1rPj4+OCYyNTUsSVszK0VdPTI1NSZrfSxPLmlwPWZ1bmN0aW9uKEksayxFLGope2Zvcih2YXIgVj0wLEI9MCxZPTY7WT49MDtZLT0yKXtmb3IodmFyIFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+Pj5YK1kmMTtmb3IoWD0wO1g8PTI0''@;'; put 'put ''O1grPTgpVjw8PTEsVnw9ST4+PlgrWSYxfWZvcihZPTY7WT49MDtZLT0yKXtmb3IoWD0xO1g8PTI1O1grPTgpQjw8PTEsQnw9az4+PlgrWSYxO2ZvcihYPTE7WDw9MjU7WCs9OClCPDw9MSxCfD1JPj4+WCtZJjF9RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5yaXA9ZnVuY3Rpb24oSSxr''@;'; put 'put ''LEUsail7Zm9yKHZhciBWPTAsQj0wLFk9MDtZPDQ7WSsrKWZvcih2YXIgWD0yNDtYPj0wO1gtPTgpVjw8PTEsVnw9az4+PlgrWSYxLFY8PD0xLFZ8PUk+Pj5YK1kmMTtmb3IoWT00O1k8ODtZKyspZm9yKFg9MjQ7WD49MDtYLT04KUI8PD0xLEJ8PWs+Pj5YK1kmMSxCPDw9MSxCfD1JPj4+WCtZ''@;'; put 'put ''JjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5wYzE9ZnVuY3Rpb24oSSxrLEUsail7Zm9yKHZhciBWPTAsQj0wLFk9NztZPj01O1ktLSl7Zm9yKHZhciBYPTA7WDw9MjQ7WCs9OClWPDw9MSxWfD1rPj5YK1kmMTtmb3IoWD0wO1g8PTI0O1grPTgpVjw8PTEsVnw9ST4+WCtZJjF9Zm9y''@;'; put 'put ''KFg9MDtYPD0yNDtYKz04KVY8PD0xLFZ8PWs+PlgrWSYxO2ZvcihZPTE7WTw9MztZKyspe2ZvcihYPTA7WDw9MjQ7WCs9OClCPDw9MSxCfD1rPj5YK1kmMTtmb3IoWD0wO1g8PTI0O1grPTgpQjw8PTEsQnw9ST4+WCtZJjF9Zm9yKFg9MDtYPD0yNDtYKz04KUI8PD0xLEJ8PUk+PlgrWSYxO0Vb''@;'; put 'put ''aiswXT1WPj4+MCxFW2orMV09Qj4+PjB9LE8ucjI4c2hsPWZ1bmN0aW9uKEksayl7cmV0dXJuIEk8PGsmMjY4NDM1NDU1fEk+Pj4yOC1rfTt2YXIgUj1bMTQsMTEsMTcsNCwyNywyMywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwx''@;'; put 'put ''LDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtPLnBjMj1mdW5jdGlvbihJLGssRSxqKXtmb3IodmFyIFY9MCxCPTAsWT1SLmxlbmd0aD4+PjEsWD0wO1g8WTtYKyspVjw8PTEsVnw9ST4+PlJbWF0mMTtmb3IoWD1ZO1g8Ui5sZW5ndGg7WCsrKUI8PD0x''@;'; put 'put ''LEJ8PWs+Pj5SW1hdJjE7RVtqKzBdPVY+Pj4wLEVbaisxXT1CPj4+MH0sTy5leHBhbmQ9ZnVuY3Rpb24oSSxrLEUpe3ZhciBqPTAsVj0wO2o9KDEmSSk8PDV8ST4+PjI3O2Zvcih2YXIgQj0yMztCPj0xNTtCLT00KWo8PD02LGp8PUk+Pj5CJjYzO2ZvcihCPTExO0I+PTM7Qi09NClWfD1JPj4+''@;'; put 'put ''QiY2MyxWPDw9NjtWfD0oMzEmSSk8PDF8ST4+PjMxLGtbRSswXT1qPj4+MCxrW0UrMV09Vj4+PjB9O3ZhciB6PVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQs''@;'; put 'put ''Niw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEs''@;'; put 'put ''Miw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0''@;'; put 'put ''LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIs''@;'; put 'put ''Miw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMs''@;'; put 'put ''MTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwx''@;'; put 'put ''MSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1''@;'; put 'put ''LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO08uc3Vic3RpdHV0ZT1mdW5jdGlvbihJLGspe2Zvcih2YXIgRT0w''@;'; put 'put ''LGo9MDtqPDQ7aisrKUU8PD00LEV8PXpbNjQqaisoST4+PjE4LTYqaiY2MyldO2ZvcihqPTA7ajw0O2orKylFPDw9NCxFfD16WzI1Nis2NCpqKyhrPj4+MTgtNipqJjYzKV07cmV0dXJuIEU+Pj4wfTt2YXIgSz1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMw''@;'; put 'put ''LDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107Ty5wZXJtdXRlPWZ1bmN0aW9uKEkpe2Zvcih2YXIgaz0wLEU9MDtFPEsubGVuZ3RoO0UrKylrPDw9MSxrfD1JPj4+S1tFXSYxO3JldHVybiBrPj4+MH0sTy5wYWRTcGxpdD1mdW5jdGlvbihJLGssRSl7Zm9yKHZhciBq''@;'; put 'put ''PUkudG9TdHJpbmcoMik7ai5sZW5ndGg8azspaj0iMCIrajtmb3IodmFyIFY9W10sQj0wO0I8aztCKz1FKVYucHVzaChqLnNsaWNlKEIsQitFKSk7cmV0dXJuIFYuam9pbigiICIpfX0sMjYwNzooTSxPLFIpPT57dmFyIHo9Uig4NzY0KS5CdWZmZXIsSz1SKDM1OTApLEk9Uig5Nzk5KSxrPVIo''@;'; put 'put ''NzQyNiksRT17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O08uRGlmZmllSGVsbG1hbkdyb3VwPU8uY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPU8uZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbihqKXt2YXIgVj1uZXcgeihJW2pdLnByaW1lLCJoZXgiKSxCPW5ldyB6KElbal0uZ2VuLCJo''@;'; put 'put ''ZXgiKTtyZXR1cm4gbmV3IGsoVixCKX0sTy5jcmVhdGVEaWZmaWVIZWxsbWFuPU8uRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBqKFYsQixZLFgpe3JldHVybiB6LmlzQnVmZmVyKEIpfHx2b2lkIDA9PT1FW0JdP2ooViwiYmluYXJ5IixCLFkpOihCPUJ8fCJiaW5hcnkiLFg9WHx8ImJpbmFyeSIs''@;'; put 'put ''WT1ZfHxuZXcgeihbMl0pLHouaXNCdWZmZXIoWSl8fChZPW5ldyB6KFksWCkpLCJudW1iZXIiPT10eXBlb2YgVj9uZXcgayhLKFYsWSksWSwhMCk6KHouaXNCdWZmZXIoVil8fChWPW5ldyB6KFYsQikpLG5ldyBrKFYsWSwhMCkpKX19LDc0MjY6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCkuQnVm''@;'; put 'put ''ZmVyLEs9UigzNjIwKSxJPW5ldyhSKDMwNDcpKSxrPW5ldyBLKDI0KSxFPW5ldyBLKDExKSxqPW5ldyBLKDEwKSxWPW5ldyBLKDMpLEI9bmV3IEsoNyksWT1SKDM1OTApLFg9UigxNzk4KTtmdW5jdGlvbiBVKHNlLGhlKXtyZXR1cm4gaGU9aGV8fCJ1dGY4Iix6LmlzQnVmZmVyKHNlKXx8KHNl''@;'; put 'put ''PW5ldyB6KHNlLGhlKSksdGhpcy5fcHViPW5ldyBLKHNlKSx0aGlzfWZ1bmN0aW9uIHEoc2UsaGUpe3JldHVybiBoZT1oZXx8InV0ZjgiLHouaXNCdWZmZXIoc2UpfHwoc2U9bmV3IHooc2UsaGUpKSx0aGlzLl9wcml2PW5ldyBLKHNlKSx0aGlzfU0uZXhwb3J0cz10ZTt2YXIgZWU9e307ZnVu''@;'; put 'put ''Y3Rpb24gdGUoc2UsaGUsdWUpe3RoaXMuc2V0R2VuZXJhdG9yKGhlKSx0aGlzLl9fcHJpbWU9bmV3IEsoc2UpLHRoaXMuX3ByaW1lPUsubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPXNlLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3By''@;'; put 'put ''aW1lQ29kZT12b2lkIDAsdWU/KHRoaXMuc2V0UHVibGljS2V5PVUsdGhpcy5zZXRQcml2YXRlS2V5PXEpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIG9lKHNlLGhlKXt2YXIgdWU9bmV3IHooc2UudG9BcnJheSgpKTtyZXR1cm4gaGU/dWUudG9TdHJpbmcoaGUpOnVlfU9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh0ZS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbihzZSxoZSl7dmFyIHVlPWhlLnRvU3RyaW5nKCJoZXgi''@;'; put 'put ''KSxjZT1bdWUsc2UudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoY2UgaW4gZWUpcmV0dXJuIGVlW2NlXTt2YXIgRyxiPTA7aWYoc2UuaXNFdmVuKCl8fCFZLnNpbXBsZVNpZXZlfHwhWS5mZXJtYXRUZXN0KHNlKXx8IUkudGVzdChzZSkpcmV0dXJuIGIrPTEsZWVbY2VdPWIrPSIwMiI9PT11''@;'; put 'put ''ZXx8IjA1Ij09PXVlPzg6NCxiO3N3aXRjaChJLnRlc3Qoc2Uuc2hybigxKSl8fChiKz0yKSx1ZSl7Y2FzZSIwMiI6c2UubW9kKGspLmNtcChFKSYmKGIrPTgpO2JyZWFrO2Nhc2UiMDUiOihHPXNlLm1vZChqKSkuY21wKFYpJiZHLmNtcChCKSYmKGIrPTgpO2JyZWFrO2RlZmF1bHQ6Yis9NH1y''@;'; put 'put ''ZXR1cm4gZWVbY2VdPWIsYn0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksdGUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgSyhYKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1''@;'; put 'put ''Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sdGUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oc2Upe3ZhciBoZT0oc2U9KHNlPW5ldyBLKHNlKSkudG9SZWQodGhpcy5fcHJpbWUp''@;'; put 'put ''KS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHVlPW5ldyB6KGhlLnRvQXJyYXkoKSksY2U9dGhpcy5nZXRQcmltZSgpO2lmKHVlLmxlbmd0aDxjZS5sZW5ndGgpe3ZhciBHPW5ldyB6KGNlLmxlbmd0aC11ZS5sZW5ndGgpO0cuZmlsbCgwKSx1ZT16LmNvbmNhdChbRyx1ZV0pfXJldHVy''@;'; put 'put ''biB1ZX0sdGUucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihzZSl7cmV0dXJuIG9lKHRoaXMuX3B1YixzZSl9LHRlLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gb2UodGhpcy5fcHJpdixzZSl9LHRlLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlv''@;'; put 'put ''bihzZSl7cmV0dXJuIG9lKHRoaXMuX19wcmltZSxzZSl9LHRlLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oc2Upe3JldHVybiBvZSh0aGlzLl9nZW4sc2UpfSx0ZS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHNlLGhlKXtyZXR1cm4gaGU9aGV8fCJ1dGY4Iix6Lmlz''@;'; put 'put ''QnVmZmVyKHNlKXx8KHNlPW5ldyB6KHNlLGhlKSksdGhpcy5fX2dlbj1zZSx0aGlzLl9nZW49bmV3IEsoc2UpLHRoaXN9fSwzNTkwOihNLE8sUik9Pnt2YXIgej1SKDE3OTgpO00uZXhwb3J0cz1zZSxzZS5zaW1wbGVTaWV2ZT10ZSxzZS5mZXJtYXRUZXN0PW9lO3ZhciBLPVIoMzYyMCksST1u''@;'; put 'put ''ZXcgSygyNCksaz1uZXcoUigzMDQ3KSksRT1uZXcgSygxKSxqPW5ldyBLKDIpLFY9bmV3IEsoNSksQj0obmV3IEsoMTYpLG5ldyBLKDgpLG5ldyBLKDEwKSksWT1uZXcgSygzKSxYPShuZXcgSyg3KSxuZXcgSygxMSkpLFU9bmV3IEsoNCkscT0obmV3IEsoMTIpLG51bGwpO2Z1bmN0aW9uIHRl''@;'; put 'put ''KGhlKXtmb3IodmFyIHVlPWZ1bmN0aW9uIGVlKCl7aWYobnVsbCE9PXEpcmV0dXJuIHE7dmFyIGhlPVtdO2hlWzBdPTI7Zm9yKHZhciB1ZT0xLGNlPTM7Y2U8MTA0ODU3NjtjZSs9Mil7Zm9yKHZhciBHPU1hdGguY2VpbChNYXRoLnNxcnQoY2UpKSxiPTA7Yjx1ZSYmaGVbYl08PUcmJmNlJWhl''@;'; put 'put ''W2JdIT0wO2IrKyk7dWUhPT1iJiZoZVtiXTw9R3x8KGhlW3VlKytdPWNlKX1yZXR1cm4gcT1oZSxoZX0oKSxjZT0wO2NlPHVlLmxlbmd0aDtjZSsrKWlmKDA9PT1oZS5tb2RuKHVlW2NlXSkpcmV0dXJuIDA9PT1oZS5jbXBuKHVlW2NlXSk7cmV0dXJuITB9ZnVuY3Rpb24gb2UoaGUpe3ZhciB1''@;'; put 'put ''ZT1LLm1vbnQoaGUpO3JldHVybiAwPT09ai50b1JlZCh1ZSkucmVkUG93KGhlLnN1Ym4oMSkpLmZyb21SZWQoKS5jbXBuKDEpfWZ1bmN0aW9uIHNlKGhlLHVlKXtpZihoZTwxNilyZXR1cm4gbmV3IEsoMj09PXVlfHw1PT09dWU/WzE0MCwxMjNdOlsxNDAsMzldKTt2YXIgY2UsRztmb3IodWU9''@;'; put 'put ''bmV3IEsodWUpOzspe2ZvcihjZT1uZXcgSyh6KE1hdGguY2VpbChoZS84KSkpO2NlLmJpdExlbmd0aCgpPmhlOyljZS5pc2hybigxKTtpZihjZS5pc0V2ZW4oKSYmY2UuaWFkZChFKSxjZS50ZXN0bigxKXx8Y2UuaWFkZChqKSx1ZS5jbXAoaikpe2lmKCF1ZS5jbXAoVikpZm9yKDtjZS5tb2Qo''@;'; put 'put ''QikuY21wKFkpOyljZS5pYWRkKFUpfWVsc2UgZm9yKDtjZS5tb2QoSSkuY21wKFgpOyljZS5pYWRkKFUpO2lmKHRlKEc9Y2Uuc2hybigxKSkmJnRlKGNlKSYmb2UoRykmJm9lKGNlKSYmay50ZXN0KEcpJiZrLnRlc3QoY2UpKXJldHVybiBjZX19fSwzNjIwOmZ1bmN0aW9uKE0sTyxSKXshZnVu''@;'; put 'put ''Y3Rpb24oeixLKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEMpe2lmKCFnKXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGsoZyxDKXtnLnN1cGVyXz1DO3ZhciBTPWZ1bmN0aW9uKCl7fTtTLnByb3RvdHlwZT1DLnByb3RvdHlwZSxnLnByb3RvdHlw''@;'; put 'put ''ZT1uZXcgUyxnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nfWZ1bmN0aW9uIEUoZyxDLFMpe2lmKEUuaXNCTihnKSlyZXR1cm4gZzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ZyYmKCJsZSIhPT1DJiYiYmUiIT09Q3x8''@;'; put 'put ''KFM9QyxDPTEwKSx0aGlzLl9pbml0KGd8fDAsQ3x8MTAsU3x8ImJlIikpfXZhciBqOyJvYmplY3QiPT10eXBlb2Ygej96LmV4cG9ydHM9RTpLLkJOPUUsRS5CTj1FLEUud29yZFNpemU9MjY7dHJ5e2o9dHlwZW9mIHdpbmRvdzwidSImJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1''@;'; put 'put ''ZmZlcjpSKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gVihnLEMpe3ZhciBTPWcuY2hhckNvZGVBdChDKTtyZXR1cm4gUz49NjUmJlM8PTcwP1MtNTU6Uz49OTcmJlM8PTEwMj9TLTg3OlMtNDgmMTV9ZnVuY3Rpb24gQihnLEMsUyl7dmFyIHY9VihnLFMpO3JldHVybiBTLTE+PUMmJih2''@;'; put 'put ''fD1WKGcsUy0xKTw8NCksdn1mdW5jdGlvbiBZKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9TWF0aC5taW4oZy5sZW5ndGgsUyksSj1DO0o8dztKKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSiktNDg7cCo9dixwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3KzEwOm5lfXJldHVybiBwfUUu''@;'; put 'put ''aXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIEV8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1FLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxFLm1heD1mdW5jdGlvbihnLEMpe3JldHVybiBnLmNtcChD''@;'; put 'put ''KT4wP2c6Q30sRS5taW49ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk8MD9nOkN9LEUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsQyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxDLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgZylyZXR1''@;'; put 'put ''cm4gdGhpcy5faW5pdEFycmF5KGcsQyxTKTsiaGV4Ij09PUMmJihDPTE2KSxJKEM9PT0oMHxDKSYmQz49MiYmQzw9MzYpO3ZhciB2PTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih2KyssdGhpcy5uZWdhdGl2ZT0xKSx2PGcubGVuZ3RoJiYoMTY9PT1D''@;'; put 'put ''P3RoaXMuX3BhcnNlSGV4KGcsdixTKToodGhpcy5fcGFyc2VCYXNlKGcsQyx2KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEMsUykpKX0sRS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxDLFMpe2c8MCYmKHRoaXMubmVnYXRpdmU9MSxnPS1nKSxn''@;'; put 'put ''PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2''@;'; put 'put ''NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpfSxFLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsQyxTKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZy5sZW5ndGgp''@;'; put 'put ''LGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3Zd''@;'; put 'put ''PTA7dmFyIHAsdyxKPTA7aWYoImJlIj09PVMpZm9yKHY9Zy5sZW5ndGgtMSxwPTA7dj49MDt2LT0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2LTFdPDw4fGdbdi0yXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEot''@;'; put 'put ''PTI2LHArKyk7ZWxzZSBpZigibGUiPT09Uylmb3Iodj0wLHA9MDt2PGcubGVuZ3RoO3YrPTMpdGhpcy53b3Jkc1twXXw9KHc9Z1t2XXxnW3YrMV08PDh8Z1t2KzJdPDwxNik8PEomNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPXc+Pj4yNi1KJjY3MTA4ODYzLChKKz0yNCk+PTI2JiYoSi09MjYs''@;'; put 'put ''cCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxDLFMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtQykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgdj0wO3Y8dGhpcy5sZW5ndGg7disr''@;'; put 'put ''KXRoaXMud29yZHNbdl09MDt2YXIgcCx3PTAsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTE7dj49Qzt2LT0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O2Vsc2UgZm9yKHY9''@;'; put 'put ''KGcubGVuZ3RoLUMpJTI9PTA/QysxOkM7djxnLmxlbmd0aDt2Kz0yKXA9QihnLEMsdik8PHcsdGhpcy53b3Jkc1tKXXw9NjcxMDg4NjMmcCx3Pj0xOD8ody09MTgsdGhpcy53b3Jkc1tKKz0xXXw9cD4+PjI2KTp3Kz04O3RoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5j''@;'; put 'put ''dGlvbihnLEMsUyl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIHY9MCxwPTE7cDw9NjcxMDg4NjM7cCo9Qyl2Kys7di0tLHA9cC9DfDA7Zm9yKHZhciB3PWcubGVuZ3RoLVMsSj13JXYsbmU9TWF0aC5taW4odyx3LUopK1MsZGU9MCxmZT1TO2ZlPG5lO2ZlKz12KWRlPVko''@;'; put 'put ''ZyxmZSxmZSt2LEMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSk7aWYoMCE9PUope3ZhciB4ZT0xO2ZvcihkZT1ZKGcsZmUsZy5sZW5ndGgsQyksZmU9MDtmZTxKO2ZlKyspeGUqPUM7dGhpcy5pbXVsbih4''@;'; put 'put ''ZSksdGhpcy53b3Jkc1swXStkZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1kZTp0aGlzLl9pYWRkbihkZSl9dGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0Mr''@;'; put 'put ''KylnLndvcmRzW0NdPXRoaXMud29yZHNbQ107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxFLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiB0aGlzLmNvcHkoZyksZ30sRS5wcm90''@;'; put 'put ''b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFd''@;'; put 'put ''Oyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxFLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sRS5wcm90b3R5cGUuaW5zcGVjdD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgWD1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEs''@;'; put 'put ''MTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgs''@;'; put 'put ''NjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQz''@;'; put 'put ''MiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoZyxDLFMpe1MubmVnYXRpdmU9Qy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciB2PWcubGVuZ3RoK0MubGVuZ3RofDA7Uy5sZW5ndGg9dix2PXYtMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSx3PTB8Qy53b3Jk''@;'; put 'put ''c1swXSxKPXAqdyxkZT1KLzY3MTA4ODY0fDA7Uy53b3Jkc1swXT02NzEwODg2MyZKO2Zvcih2YXIgZmU9MTtmZTx2O2ZlKyspe2Zvcih2YXIgeGU9ZGU+Pj4yNixMZT02NzEwODg2MyZkZSxGZT1NYXRoLm1pbihmZSxDLmxlbmd0aC0xKSxPZT1NYXRoLm1heCgwLGZlLWcubGVuZ3RoKzEpO09l''@;'; put 'put ''PD1GZTtPZSsrKXhlKz0oSj0ocD0wfGcud29yZHNbZmUtT2V8MF0pKih3PTB8Qy53b3Jkc1tPZV0pK0xlKS82NzEwODg2NHwwLExlPTY3MTA4ODYzJko7Uy53b3Jkc1tmZV09MHxMZSxkZT0wfHhlfXJldHVybiAwIT09ZGU/Uy53b3Jkc1tmZV09MHxkZTpTLmxlbmd0aC0tLFMuc3RyaXAoKX1F''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLEMpe3ZhciBTO2lmKEM9MHxDfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe1M9IiI7Zm9yKHZhciB2PTAscD0wLHc9MDt3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9dGhpcy53b3Jkc1t3XSxuZT0oMTY3NzcyMTUmKEo8PHZ8cCkp''@;'; put 'put ''LnRvU3RyaW5nKDE2KTtTPTAhPShwPUo+Pj4yNC12JjE2Nzc3MjE1KXx8dyE9PXRoaXMubGVuZ3RoLTE/WFs2LW5lLmxlbmd0aF0rbmUrUzpuZStTLCh2Kz0yKT49MjYmJih2LT0yNix3LS0pfWZvcigwIT09cCYmKFM9cC50b1N0cmluZygxNikrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUzty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciBkZT1VW2ddLGZlPXFbZ107Uz0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBMZT14ZS5tb2RuKGZlKS50b1N0''@;'; put 'put ''cmluZyhnKTtTPSh4ZT14ZS5pZGl2bihmZSkpLmlzWmVybygpP0xlK1M6WFtkZS1MZS5sZW5ndGhdK0xlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVDIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9SSghMSwiQmFzZSBz''@;'; put 'put ''aG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxFLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/''@;'; put 'put ''Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LEUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sRS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gSSh2b2lkIDAhPT1qKSx0aGlzLnRvQXJyYXlMaWtlKGosZyxDKX0sRS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFy''@;'; put 'put ''cmF5LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdj10aGlzLmJ5dGVMZW5ndGgoKSxwPVN8fE1hdGgubWF4KDEsdik7SSh2PD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBs''@;'; put 'put ''ZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdyxKLG5lPSJsZSI9PT1DLGRlPW5ldyBnKHApLGZlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbSl09dztmb3IoO0o8cDtKKyspZGVbSl09MH1l''@;'; put 'put ''bHNle2ZvcihKPTA7SjxwLXY7SisrKWRlW0pdPTA7Zm9yKEo9MDshZmUuaXNaZXJvKCk7SisrKXc9ZmUuYW5kbG4oMjU1KSxmZS5pdXNocm4oOCksZGVbcC1KLTFdPXd9cmV0dXJuIGRlfSxFLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1h''@;'; put 'put ''dGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBDPWcsUz0wO3JldHVybiBDPj00MDk2JiYoUys9MTMsQz4+Pj0xMyksQz49NjQmJihTKz03LEM+Pj49NyksQz49OCYmKFMrPTQsQz4+Pj00KSxDPj0yJiYoUys9MixDPj4+PTIpLFMrQ30sRS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9u''@;'; put 'put ''KGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgQz1nLFM9MDtyZXR1cm4hKDgxOTEmQykmJihTKz0xMyxDPj4+PTEzKSwhKDEyNyZDKSYmKFMrPTcsQz4+Pj03KSwhKDE1JkMpJiYoUys9NCxDPj4+PTQpLCEoMyZDKSYmKFMrPTIsQz4+Pj0yKSwhKDEmQykmJlMrKyxTfSxFLnByb3RvdHlwZS5i''@;'; put 'put ''aXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStDfSxFLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBn''@;'; put 'put ''PTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0NdKTtpZihnKz1TLDI2IT09UylicmVha31yZXR1cm4gZ30sRS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0s''@;'; put 'put ''RS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4o''@;'; put 'put ''ZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sRS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LEUucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxFLnByb3RvdHlwZS5pbmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxFLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ118Zy53b3Jkc1tDXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0sRS5wcm90b3R5cGUub3I9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0sRS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpnLmNsb25lKCkuaXVvcih0''@;'; put 'put ''aGlzKX0sRS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIEM7Qz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciBTPTA7UzxDLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmcud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPUMubGVuZ3Ro''@;'; put 'put ''LHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT0odGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0sRS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25l''@;'; put 'put ''KCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0sRS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0sRS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7''@;'; put 'put ''dmFyIEMsUzt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oQz10aGlzLFM9Zyk6KEM9ZyxTPXRoaXMpO2Zvcih2YXIgdj0wO3Y8Uy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XV5TLndvcmRzW3ZdO2lmKHRoaXMhPT1DKWZvcig7djxDLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT1D''@;'; put 'put ''LndvcmRzW3ZdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LEUucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LEUucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3Io''@;'; put 'put ''dGhpcyl9LEUucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz0wfE1hdGguY2VpbChnLzI2KSxTPWclMjY7dGhpcy5fZXhwYW5kKEMpLFM+MCYmQy0tO2Zvcih2YXIgdj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT02NzEwODg2MyZ+''@;'; put 'put ''dGhpcy53b3Jkc1t2XTtyZXR1cm4gUz4wJiYodGhpcy53b3Jkc1t2XT1+dGhpcy53b3Jkc1t2XSY2NzEwODg2Mz4+MjYtUyksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9LEUucHJvdG90eXBlLnNldG49ZnVu''@;'; put 'put ''Y3Rpb24oZyxDKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9Zy8yNnwwLHY9ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKFMrMSksdGhpcy53b3Jkc1tTXT1DP3RoaXMud29yZHNbU118MTw8djp0aGlzLndvcmRzW1NdJn4oMTw8diksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBDLFMsdjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxDPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1n''@;'; put 'put ''Lm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02''@;'; put 'put ''NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKSsoMHx2LndvcmRzW3ddKStwKSxwPUM+Pj4yNjtmb3IoOzAhPT1wJiZ3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPTY3MTA4ODYzJihDPSgwfFMud29yZHNbd10pK3ApLHA9Qz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1wKXRo''@;'; put 'put ''aXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT1TLndvcmRzW3ddO3JldHVybiB0aGlzfSxFLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFyIEM7cmV0dXJuIDAhPT1nLm5lZ2F0''@;'; put 'put ''aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLEM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxDKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxDPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxDKTp0aGlzLmxlbmd0aD5n''@;'; put 'put ''Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0sRS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBDPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdhdGl2ZT0xLEMuX25vcm1TaWduKCl9''@;'; put 'put ''aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndv''@;'; put 'put ''cmRzWzBdPTAsdGhpcztwPjA/KFM9dGhpcyx2PWcpOihTPWcsdj10aGlzKTtmb3IodmFyIHc9MCxKPTA7Sjx2Lmxlbmd0aDtKKyspdz0oQz0oMHxTLndvcmRzW0pdKS0oMHx2LndvcmRzW0pdKSt3KT4+MjYsdGhpcy53b3Jkc1tKXT02NzEwODg2MyZDO2Zvcig7MCE9PXcmJko8Uy5sZW5ndGg7''@;'; put 'put ''SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztpZigwPT09dyYmSjxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDtKPFMubGVuZ3RoO0orKyl0aGlzLndvcmRzW0pdPVMud29yZHNbSl07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu''@;'; put 'put ''bGVuZ3RoLEopLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLEMsUyl7dmFyIHYscCx3LEo9Zy53b3JkcyxuZT1DLndvcmRzLGRl''@;'; put 'put ''PVMud29yZHMsZmU9MCx4ZT0wfEpbMF0sTGU9ODE5MSZ4ZSxGZT14ZT4+PjEzLE9lPTB8SlsxXSxqZT04MTkxJk9lLFdlPU9lPj4+MTMsS2U9MHxKWzJdLFllPTgxOTEmS2UsSmU9S2U+Pj4xMyxsdD0wfEpbM10sUGU9ODE5MSZsdCxiZT1sdD4+PjEzLEFlPTB8Sls0XSxUZT04MTkxJkFlLHFl''@;'; put 'put ''PUFlPj4+MTMsWGU9MHxKWzVdLFVlPTgxOTEmWGUsaHQ9WGU+Pj4xMyxNZT0wfEpbNl0sRGU9ODE5MSZNZSx6ZT1NZT4+PjEzLGl0PTB8Sls3XSx1dD04MTkxJml0LE10PWl0Pj4+MTMsSHQ9MHxKWzhdLFB0PTgxOTEmSHQsb249SHQ+Pj4xMyxDbj0wfEpbOV0sVXQ9ODE5MSZDbixibj1Dbj4+''@;'; put 'put ''PjEzLFduPTB8bmVbMF0sZW49ODE5MSZXbiwkbj1Xbj4+PjEzLEhuPTB8bmVbMV0sZnQ9ODE5MSZIbixmbj1Ibj4+PjEzLGhuPTB8bmVbMl0sd3Q9ODE5MSZobixYdD1obj4+PjEzLF90PTB8bmVbM10sTnQ9ODE5MSZfdCxtbj1fdD4+PjEzLHJ0PTB8bmVbNF0sSXQ9ODE5MSZydCxKdD1ydD4+''@;'; put 'put ''PjEzLER0PTB8bmVbNV0scHQ9ODE5MSZEdCxZdD1EdD4+PjEzLEluPTB8bmVbNl0senQ9ODE5MSZJbix5bj1Jbj4+PjEzLHhuPTB8bmVbN10sc249ODE5MSZ4bixCbj14bj4+PjEzLFJuPTB8bmVbOF0sJHQ9ODE5MSZSbixQbj1Sbj4+PjEzLG5pPTB8bmVbOV0sbG49ODE5MSZuaSxqbj1uaT4+''@;'; put 'put ''PjEzO1MubmVnYXRpdmU9Zy5uZWdhdGl2ZV5DLm5lZ2F0aXZlLFMubGVuZ3RoPTE5O3ZhciBxcj0oZmUrKHY9TWF0aC5pbXVsKExlLGVuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChMZSwkbikpK01hdGguaW11bChGZSxlbil8MCkpPDwxMyl8MDtmZT0oKHc9TWF0aC5pbXVsKEZlLCRu''@;'; put 'put ''KSkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGplLGVuKSxwPShwPU1hdGguaW11bChqZSwkbikpK01hdGguaW11bChXZSxlbil8MCx3PU1hdGguaW11bChXZSwkbik7dmFyIGdpPShmZSsodj12K01hdGguaW11bChMZSxmdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoRmUsZnQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLGZuKXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWWUsZW4pLHA9KHA9TWF0aC5pbXVsKFllLCRuKSkr''@;'; put 'put ''TWF0aC5pbXVsKEplLGVuKXwwLHc9TWF0aC5pbXVsKEplLCRuKSx2PXYrTWF0aC5pbXVsKGplLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChXZSxmdCl8MCx3PXcrTWF0aC5pbXVsKFdlLGZuKXwwO3ZhciB4cj0oZmUrKHY9ditNYXRoLmltdWwoTGUsd3QpfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxYdCl8MCkrTWF0aC5pbXVsKEZlLHd0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxYdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFBlLGVuKSxwPShwPU1hdGguaW11''@;'; put 'put ''bChQZSwkbikpK01hdGguaW11bChiZSxlbil8MCx3PU1hdGguaW11bChiZSwkbiksdj12K01hdGguaW11bChZZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLGZuKXwwKStNYXRoLmltdWwoSmUsZnQpfDAsdz13K01hdGguaW11bChKZSxmbil8MCx2PXYrTWF0aC5pbXVsKGplLHd0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoamUsWHQpfDApK01hdGguaW11bChXZSx3dCl8MCx3PXcrTWF0aC5pbXVsKFdlLFh0KXwwO3ZhciBVaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsTnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxtbil8MCkrTWF0aC5pbXVsKEZlLE50KXwwKSk8PDEz''@;'; put 'put ''KXwwO2ZlPSgodz13K01hdGguaW11bChGZSxtbil8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFRlLGVuKSxwPShwPU1hdGguaW11bChUZSwkbikpK01hdGguaW11bChxZSxlbil8MCx3PU1hdGguaW11bChxZSwkbiksdj12K01hdGguaW11bChQ''@;'; put 'put ''ZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLGZuKXwwKStNYXRoLmltdWwoYmUsZnQpfDAsdz13K01hdGguaW11bChiZSxmbil8MCx2PXYrTWF0aC5pbXVsKFllLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWHQpfDApK01hdGguaW11bChKZSx3dCl8MCx3PXcrTWF0aC5pbXVsKEplLFh0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoamUsTnQpfDAscD0ocD1wK01hdGguaW11bChqZSxtbil8MCkrTWF0aC5pbXVsKFdlLE50KXwwLHc9dytNYXRoLmltdWwoV2UsbW4pfDA7dmFyIEtyPShmZSsodj12K01hdGguaW11bChMZSxJdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEp0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRmUsSXQpfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEp0KXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVWUsZW4pLHA9KHA9TWF0aC5pbXVsKFVlLCRuKSkrTWF0aC5pbXVsKGh0LGVuKXwwLHc9TWF0''@;'; put 'put ''aC5pbXVsKGh0LCRuKSx2PXYrTWF0aC5pbXVsKFRlLGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsZm4pfDApK01hdGguaW11bChxZSxmdCl8MCx3PXcrTWF0aC5pbXVsKHFlLGZuKXwwLHY9ditNYXRoLmltdWwoUGUsd3QpfDAscD0ocD1wK01hdGguaW11bChQZSxYdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGJlLHd0KXwwLHc9dytNYXRoLmltdWwoYmUsWHQpfDAsdj12K01hdGguaW11bChZZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLG1uKXwwKStNYXRoLmltdWwoSmUsTnQpfDAsdz13K01hdGguaW11bChKZSxtbil8MCx2PXYrTWF0aC5pbXVsKGplLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''amUsSnQpfDApK01hdGguaW11bChXZSxJdCl8MCx3PXcrTWF0aC5pbXVsKFdlLEp0KXwwO3ZhciBubz0oZmUrKHY9ditNYXRoLmltdWwoTGUscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKEZlLHB0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01h''@;'; put 'put ''dGguaW11bChGZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKERlLGVuKSxwPShwPU1hdGguaW11bChEZSwkbikpK01hdGguaW11bCh6ZSxlbil8MCx3PU1hdGguaW11bCh6ZSwkbiksdj12K01hdGguaW11bChVZSxmdCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoaHQsZnQpfDAsdz13K01hdGguaW11bChodCxmbil8MCx2PXYrTWF0aC5pbXVsKFRlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWHQpfDApK01hdGguaW11bChxZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHFlLFh0KXwwLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoUGUsTnQpfDAscD0ocD1wK01hdGguaW11bChQZSxtbil8MCkrTWF0aC5pbXVsKGJlLE50KXwwLHc9dytNYXRoLmltdWwoYmUsbW4pfDAsdj12K01hdGguaW11bChZZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLEp0KXwwKStNYXRoLmltdWwoSmUsSXQpfDAsdz13K01hdGguaW11bChK''@;'; put 'put ''ZSxKdCl8MCx2PXYrTWF0aC5pbXVsKGplLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsWXQpfDApK01hdGguaW11bChXZSxwdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFl0KXwwO3ZhciBIcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsenQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChM''@;'; put 'put ''ZSx5bil8MCkrTWF0aC5pbXVsKEZlLHp0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSx5bil8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHV0LGVuKSxwPShwPU1hdGguaW11bCh1dCwkbikpK01hdGguaW11bChNdCxlbil8MCx3''@;'; put 'put ''PU1hdGguaW11bChNdCwkbiksdj12K01hdGguaW11bChEZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGZuKXwwKStNYXRoLmltdWwoemUsZnQpfDAsdz13K01hdGguaW11bCh6ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFVlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWHQpfDApK01hdGgu''@;'; put 'put ''aW11bChodCx3dCl8MCx3PXcrTWF0aC5pbXVsKGh0LFh0KXwwLHY9ditNYXRoLmltdWwoVGUsTnQpfDAscD0ocD1wK01hdGguaW11bChUZSxtbil8MCkrTWF0aC5pbXVsKHFlLE50KXwwLHc9dytNYXRoLmltdWwocWUsbW4pfDAsdj12K01hdGguaW11bChQZSxJdCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFBlLEp0KXwwKStNYXRoLmltdWwoYmUsSXQpfDAsdz13K01hdGguaW11bChiZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFllLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoWWUsWXQpfDApK01hdGguaW11bChKZSxwdCl8MCx3PXcrTWF0aC5pbXVsKEplLFl0KXwwLHY9ditNYXRoLmltdWwoamUs''@;'; put 'put ''enQpfDAscD0ocD1wK01hdGguaW11bChqZSx5bil8MCkrTWF0aC5pbXVsKFdlLHp0KXwwLHc9dytNYXRoLmltdWwoV2UseW4pfDA7dmFyIHFpPShmZSsodj12K01hdGguaW11bChMZSxzbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLEJuKXwwKStNYXRoLmltdWwoRmUsc24p''@;'; put 'put ''fDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKEZlLEJuKXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoUHQsZW4pLHA9KHA9TWF0aC5pbXVsKFB0LCRuKSkrTWF0aC5pbXVsKG9uLGVuKXwwLHc9TWF0aC5pbXVsKG9uLCRuKSx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKHV0LGZ0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsZm4pfDApK01hdGguaW11bChNdCxmdCl8MCx3PXcrTWF0aC5pbXVsKE10LGZuKXwwLHY9ditNYXRoLmltdWwoRGUsd3QpfDAscD0ocD1wK01hdGguaW11bChEZSxYdCl8MCkrTWF0aC5pbXVsKHplLHd0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoemUsWHQpfDAsdj12K01hdGguaW11bChVZSxOdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLG1uKXwwKStNYXRoLmltdWwoaHQsTnQpfDAsdz13K01hdGguaW11bChodCxtbil8MCx2PXYrTWF0aC5pbXVsKFRlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsSnQpfDApK01hdGguaW11bChx''@;'; put 'put ''ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHFlLEp0KXwwLHY9ditNYXRoLmltdWwoUGUscHQpfDAscD0ocD1wK01hdGguaW11bChQZSxZdCl8MCkrTWF0aC5pbXVsKGJlLHB0KXwwLHc9dytNYXRoLmltdWwoYmUsWXQpfDAsdj12K01hdGguaW11bChZZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFll''@;'; put 'put ''LHluKXwwKStNYXRoLmltdWwoSmUsenQpfDAsdz13K01hdGguaW11bChKZSx5bil8MCx2PXYrTWF0aC5pbXVsKGplLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoamUsQm4pfDApK01hdGguaW11bChXZSxzbil8MCx3PXcrTWF0aC5pbXVsKFdlLEJuKXwwO3ZhciBKaT0oZmUrKHY9ditNYXRoLmlt''@;'; put 'put ''dWwoTGUsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKEZlLCR0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxQbil8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGVuKSxw''@;'; put 'put ''PShwPU1hdGguaW11bChVdCwkbikpK01hdGguaW11bChibixlbil8MCx3PU1hdGguaW11bChibiwkbiksdj12K01hdGguaW11bChQdCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LGZuKXwwKStNYXRoLmltdWwob24sZnQpfDAsdz13K01hdGguaW11bChvbixmbil8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KHV0LHd0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWHQpfDApK01hdGguaW11bChNdCx3dCl8MCx3PXcrTWF0aC5pbXVsKE10LFh0KXwwLHY9ditNYXRoLmltdWwoRGUsTnQpfDAscD0ocD1wK01hdGguaW11bChEZSxtbil8MCkrTWF0aC5pbXVsKHplLE50KXwwLHc9dytNYXRoLmltdWwoemUs''@;'; put 'put ''bW4pfDAsdj12K01hdGguaW11bChVZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEp0KXwwKStNYXRoLmltdWwoaHQsSXQpfDAsdz13K01hdGguaW11bChodCxKdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsWXQpfDApK01hdGguaW11bChxZSxwdCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKHFlLFl0KXwwLHY9ditNYXRoLmltdWwoUGUsenQpfDAscD0ocD1wK01hdGguaW11bChQZSx5bil8MCkrTWF0aC5pbXVsKGJlLHp0KXwwLHc9dytNYXRoLmltdWwoYmUseW4pfDAsdj12K01hdGguaW11bChZZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFllLEJuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSmUsc24pfDAsdz13K01hdGguaW11bChKZSxCbil8MCx2PXYrTWF0aC5pbXVsKGplLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsUG4pfDApK01hdGguaW11bChXZSwkdCl8MCx3PXcrTWF0aC5pbXVsKFdlLFBuKXwwO3ZhciBhbz0oZmUrKHY9ditNYXRoLmltdWwoTGUs''@;'; put 'put ''bG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxqbil8MCkrTWF0aC5pbXVsKEZlLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LGZ0KSxwPShwPU1h''@;'; put 'put ''dGguaW11bChVdCxmbikpK01hdGguaW11bChibixmdCl8MCx3PU1hdGguaW11bChibixmbiksdj12K01hdGguaW11bChQdCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFh0KXwwKStNYXRoLmltdWwob24sd3QpfDAsdz13K01hdGguaW11bChvbixYdCl8MCx2PXYrTWF0aC5pbXVsKHV0LE50''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsbW4pfDApK01hdGguaW11bChNdCxOdCl8MCx3PXcrTWF0aC5pbXVsKE10LG1uKXwwLHY9ditNYXRoLmltdWwoRGUsSXQpfDAscD0ocD1wK01hdGguaW11bChEZSxKdCl8MCkrTWF0aC5pbXVsKHplLEl0KXwwLHc9dytNYXRoLmltdWwoemUsSnQpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoaHQscHQpfDAsdz13K01hdGguaW11bChodCxZdCl8MCx2PXYrTWF0aC5pbXVsKFRlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUseW4pfDApK01hdGguaW11bChxZSx6dCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKHFlLHluKXwwLHY9ditNYXRoLmltdWwoUGUsc24pfDAscD0ocD1wK01hdGguaW11bChQZSxCbil8MCkrTWF0aC5pbXVsKGJlLHNuKXwwLHc9dytNYXRoLmltdWwoYmUsQm4pfDAsdj12K01hdGguaW11bChZZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFBuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsJHQpfDAsdz13K01hdGguaW11bChKZSxQbil8MDt2YXIgcm89KGZlKyh2PXYrTWF0aC5pbXVsKGplLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoamUsam4pfDApK01hdGguaW11bChXZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoV2Usam4p''@;'; put 'put ''fDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx3dCkscD0ocD1NYXRoLmltdWwoVXQsWHQpKStNYXRoLmltdWwoYm4sd3QpfDAsdz1NYXRoLmltdWwoYm4sWHQpLHY9ditNYXRoLmltdWwoUHQsTnQpfDAscD0ocD1wK01hdGguaW11bChQdCxt''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKG9uLE50KXwwLHc9dytNYXRoLmltdWwob24sbW4pfDAsdj12K01hdGguaW11bCh1dCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LEp0KXwwKStNYXRoLmltdWwoTXQsSXQpfDAsdz13K01hdGguaW11bChNdCxKdCl8MCx2PXYrTWF0aC5pbXVsKERlLHB0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoRGUsWXQpfDApK01hdGguaW11bCh6ZSxwdCl8MCx3PXcrTWF0aC5pbXVsKHplLFl0KXwwLHY9ditNYXRoLmltdWwoVWUsenQpfDAscD0ocD1wK01hdGguaW11bChVZSx5bil8MCkrTWF0aC5pbXVsKGh0LHp0KXwwLHc9dytNYXRoLmltdWwoaHQseW4pfDAsdj12K01h''@;'; put 'put ''dGguaW11bChUZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJuKXwwKStNYXRoLmltdWwocWUsc24pfDAsdz13K01hdGguaW11bChxZSxCbil8MCx2PXYrTWF0aC5pbXVsKFBlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsUG4pfDApK01hdGguaW11bChiZSwkdCl8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGJlLFBuKXwwO3ZhciBpbz0oZmUrKHY9ditNYXRoLmltdWwoWWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChZZSxqbil8MCkrTWF0aC5pbXVsKEplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChKZSxqbil8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYp''@;'; put 'put ''fDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LE50KSxwPShwPU1hdGguaW11bChVdCxtbikpK01hdGguaW11bChibixOdCl8MCx3PU1hdGguaW11bChibixtbiksdj12K01hdGguaW11bChQdCxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LEp0KXwwKStNYXRoLmltdWwob24sSXQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChvbixKdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsWXQpfDApK01hdGguaW11bChNdCxwdCl8MCx3PXcrTWF0aC5pbXVsKE10LFl0KXwwLHY9ditNYXRoLmltdWwoRGUsenQpfDAscD0ocD1wK01hdGguaW11bChEZSx5bil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKHplLHp0KXwwLHc9dytNYXRoLmltdWwoemUseW4pfDAsdj12K01hdGguaW11bChVZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLEJuKXwwKStNYXRoLmltdWwoaHQsc24pfDAsdz13K01hdGguaW11bChodCxCbil8MCx2PXYrTWF0aC5pbXVsKFRlLCR0KXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoVGUsUG4pfDApK01hdGguaW11bChxZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHFlLFBuKXwwO3ZhciBHaT0oZmUrKHY9ditNYXRoLmltdWwoUGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQZSxqbil8MCkrTWF0aC5pbXVsKGJlLGxuKXwwKSk8PDEzKXwwO2Zl''@;'; put 'put ''PSgodz13K01hdGguaW11bChiZSxqbil8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LEl0KSxwPShwPU1hdGguaW11bChVdCxKdCkpK01hdGguaW11bChibixJdCl8MCx3PU1hdGguaW11bChibixKdCksdj12K01hdGguaW11bChQdCxwdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFB0LFl0KXwwKStNYXRoLmltdWwob24scHQpfDAsdz13K01hdGguaW11bChvbixZdCl8MCx2PXYrTWF0aC5pbXVsKHV0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQseW4pfDApK01hdGguaW11bChNdCx6dCl8MCx3PXcrTWF0aC5pbXVsKE10LHluKXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoRGUsc24pfDAscD0ocD1wK01hdGguaW11bChEZSxCbil8MCkrTWF0aC5pbXVsKHplLHNuKXwwLHc9dytNYXRoLmltdWwoemUsQm4pfDAsdj12K01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoaHQsJHQpfDAsdz13K01h''@;'; put 'put ''dGguaW11bChodCxQbil8MDt2YXIgaG89KGZlKyh2PXYrTWF0aC5pbXVsKFRlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsam4pfDApK01hdGguaW11bChxZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwocWUsam4pfDApKyhwPj4+MTMpfDApKyhobz4+''@;'; put 'put ''PjI2KXwwLGhvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxwdCkscD0ocD1NYXRoLmltdWwoVXQsWXQpKStNYXRoLmltdWwoYm4scHQpfDAsdz1NYXRoLmltdWwoYm4sWXQpLHY9ditNYXRoLmltdWwoUHQsenQpfDAscD0ocD1wK01hdGguaW11bChQdCx5bil8MCkrTWF0aC5pbXVsKG9uLHp0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwob24seW4pfDAsdj12K01hdGguaW11bCh1dCxzbil8MCxwPShwPXArTWF0aC5pbXVsKHV0LEJuKXwwKStNYXRoLmltdWwoTXQsc24pfDAsdz13K01hdGguaW11bChNdCxCbil8MCx2PXYrTWF0aC5pbXVsKERlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsUG4p''@;'; put 'put ''fDApK01hdGguaW11bCh6ZSwkdCl8MCx3PXcrTWF0aC5pbXVsKHplLFBuKXwwO3ZhciB5cj0oZmUrKHY9ditNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxqbil8MCkrTWF0aC5pbXVsKGh0LGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11''@;'; put 'put ''bChodCxqbil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0LHp0KSxwPShwPU1hdGguaW11bChVdCx5bikpK01hdGguaW11bChibix6dCl8MCx3PU1hdGguaW11bChibix5biksdj12K01hdGguaW11bChQdCxzbil8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFB0LEJuKXwwKStNYXRoLmltdWwob24sc24pfDAsdz13K01hdGguaW11bChvbixCbil8MCx2PXYrTWF0aC5pbXVsKHV0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwodXQsUG4pfDApK01hdGguaW11bChNdCwkdCl8MCx3PXcrTWF0aC5pbXVsKE10LFBuKXwwO3ZhciBQaT0oZmUrKHY9ditN''@;'; put 'put ''YXRoLmltdWwoRGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChEZSxqbil8MCkrTWF0aC5pbXVsKHplLGxuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bCh6ZSxqbil8MCkrKHA+Pj4xMyl8MCkrKFBpPj4+MjYpfDAsUGkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFV0''@;'; put 'put ''LHNuKSxwPShwPU1hdGguaW11bChVdCxCbikpK01hdGguaW11bChibixzbil8MCx3PU1hdGguaW11bChibixCbiksdj12K01hdGguaW11bChQdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFB0LFBuKXwwKStNYXRoLmltdWwob24sJHQpfDAsdz13K01hdGguaW11bChvbixQbil8MDt2YXIgTG89''@;'; put 'put ''KGZlKyh2PXYrTWF0aC5pbXVsKHV0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwodXQsam4pfDApK01hdGguaW11bChNdCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoTXQsam4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Myx2PU1h''@;'; put 'put ''dGguaW11bChVdCwkdCkscD0ocD1NYXRoLmltdWwoVXQsUG4pKStNYXRoLmltdWwoYm4sJHQpfDAsdz1NYXRoLmltdWwoYm4sUG4pO3ZhciBocz0oZmUrKHY9ditNYXRoLmltdWwoUHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChQdCxqbil8MCkrTWF0aC5pbXVsKG9uLGxu''@;'; put 'put ''KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChvbixqbil8MCkrKHA+Pj4xMyl8MCkrKGhzPj4+MjYpfDAsaHMmPTY3MTA4ODYzO3ZhciBycz0oZmUrKHY9TWF0aC5pbXVsKFV0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChVdCxqbikpK01hdGguaW11bChibixsbil8MCkp''@;'; put 'put ''PDwxMyl8MDtyZXR1cm4gZmU9KCh3PU1hdGguaW11bChibixqbikpKyhwPj4+MTMpfDApKyhycz4+PjI2KXwwLHJzJj02NzEwODg2MyxkZVswXT1xcixkZVsxXT1naSxkZVsyXT14cixkZVszXT1VaSxkZVs0XT1LcixkZVs1XT1ubyxkZVs2XT1IcixkZVs3XT1xaSxkZVs4XT1KaSxkZVs5XT1h''@;'; put 'put ''byxkZVsxMF09cm8sZGVbMTFdPWlvLGRlWzEyXT1HaSxkZVsxM109aG8sZGVbMTRdPXlyLGRlWzE1XT1QaSxkZVsxNl09TG8sZGVbMTddPWhzLGRlWzE4XT1ycywwIT09ZmUmJihkZVsxOV09ZmUsUy5sZW5ndGgrKyksU307ZnVuY3Rpb24gb2UoZyxDLFMpe3JldHVybihuZXcgc2UpLm11bHAo''@;'; put 'put ''ZyxDLFMpfWZ1bmN0aW9uIHNlKGcsQyl7dGhpcy54PWcsdGhpcy55PUN9TWF0aC5pbXVsfHwodGU9ZWUpLEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsQyl7dmFyIHY9dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhp''@;'; put 'put ''cyxnLEMpOnY8NjM/ZWUodGhpcyxnLEMpOnY8MTAyND9mdW5jdGlvbihwLHcsSil7Si5uZWdhdGl2ZT13Lm5lZ2F0aXZlXnAubmVnYXRpdmUsSi5sZW5ndGg9cC5sZW5ndGgrdy5sZW5ndGg7Zm9yKHZhciBuZT0wLGRlPTAsZmU9MDtmZTxKLmxlbmd0aC0xO2ZlKyspe3ZhciB4ZT1kZTtkZT0w''@;'; put 'put ''O2Zvcih2YXIgTGU9NjcxMDg4NjMmbmUsRmU9TWF0aC5taW4oZmUsdy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1wLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl7dmFyIFdlPSgwfHAud29yZHNbZmUtT2VdKSooMHx3LndvcmRzW09lXSksS2U9NjcxMDg4NjMmV2U7TGU9NjcxMDg4NjMmKEtl''@;'; put 'put ''PUtlK0xlfDApLGRlKz0oeGU9KHhlPXhlKyhXZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Si53b3Jkc1tmZV09TGUsbmU9eGUseGU9ZGV9cmV0dXJuIDAhPT1uZT9KLndvcmRzW2ZlXT1uZTpKLmxlbmd0aC0tLEouc3RyaXAoKX0odGhpcyxnLEMpOm9l''@;'; put 'put ''KHRoaXMsZyxDKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPUUucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSx2PTA7djxnO3YrKylDW3ZdPXRoaXMucmV2QmluKHYsUyxnKTtyZXR1cm4gQ30sc2UucHJvdG90eXBlLnJldkJpbj1m''@;'; put 'put ''dW5jdGlvbihnLEMsUyl7aWYoMD09PWd8fGc9PT1TLTEpcmV0dXJuIGc7Zm9yKHZhciB2PTAscD0wO3A8QztwKyspdnw9KDEmZyk8PEMtcC0xLGc+Pj0xO3JldHVybiB2fSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7Zm9yKHZhciBKPTA7Sjx3O0orKyl2W0pd''@;'; put 'put ''PUNbZ1tKXV0scFtKXT1TW2dbSl1dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsQyxTLHYscCx3KXt0aGlzLnBlcm11dGUodyxnLEMsUyx2LHApO2Zvcih2YXIgSj0xO0o8cDtKPDw9MSlmb3IodmFyIG5lPUo8PDEsZGU9TWF0aC5jb3MoMipNYXRoLlBJL25lKSxmZT1NYXRo''@;'; put 'put ''LnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBMZT1kZSxGZT1mZSxPZT0wO09lPEo7T2UrKyl7dmFyIGplPVNbeGUrT2VdLFdlPXZbeGUrT2VdLEtlPVNbeGUrT2UrSl0sWWU9dlt4ZStPZStKXSxKZT1MZSpLZS1GZSpZZTtZZT1MZSpZZStGZSpLZSxTW3hlK09l''@;'; put 'put ''XT1qZSsoS2U9SmUpLHZbeGUrT2VdPVdlK1llLFNbeGUrT2UrSl09amUtS2Usdlt4ZStPZStKXT1XZS1ZZSxPZSE9PW5lJiYoSmU9ZGUqTGUtZmUqRmUsRmU9ZGUqRmUrZmUqTGUsTGU9SmUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsQyl7dmFyIFM9MXxNYXRoLm1h''@;'; put 'put ''eChDLGcpLHY9MSZTLHA9MDtmb3IoUz1TLzJ8MDtTO1M+Pj49MSlwKys7cmV0dXJuIDE8PHArMSt2fSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsQyxTKXtpZighKFM8PTEpKWZvcih2YXIgdj0wO3Y8Uy8yO3YrKyl7dmFyIHA9Z1t2XTtnW3ZdPWdbUy12LTFdLGdbUy12LTFd''@;'; put 'put ''PXAscD1DW3ZdLENbdl09LUNbUy12LTFdLENbUy12LTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz0wLHY9MDt2PEMvMjt2Kyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqdisxXS9DKStNYXRoLnJvdW5kKGdbMip2XS9DKStTO2db''@;'; put 'put ''dl09NjcxMDg4NjMmcCxTPXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsQyxTLHYpe2Zvcih2YXIgcD0wLHc9MDt3PEM7dysrKVNbMip3XT04MTkxJihwKz0wfGdbd10pLFNbMip3KzFdPTgxOTEmKHA+Pj49MTMp''@;'; put 'put ''LHA+Pj49MTM7Zm9yKHc9MipDO3c8djsrK3cpU1t3XT0wO0koMD09PXApLEkoMD09KC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPW5ldyBBcnJheShnKSxTPTA7UzxnO1MrKylDW1NdPTA7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0''@;'; put 'put ''aW9uKGcsQyxTKXt2YXIgdj0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsQy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKHYpLHc9dGhpcy5zdHViKHYpLEo9bmV3IEFycmF5KHYpLG5lPW5ldyBBcnJheSh2KSxkZT1uZXcgQXJyYXkodiksZmU9bmV3IEFycmF5KHYpLHhlPW5ldyBBcnJheSh2''@;'; put 'put ''KSxMZT1uZXcgQXJyYXkodiksRmU9Uy53b3JkcztGZS5sZW5ndGg9dix0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxKLHYpLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLGZlLHYpLHRoaXMudHJhbnNmb3JtKEosdyxuZSxkZSx2LHApLHRoaXMudHJhbnNmb3JtKGZl''@;'; put 'put ''LHcseGUsTGUsdixwKTtmb3IodmFyIE9lPTA7T2U8djtPZSsrKXt2YXIgamU9bmVbT2VdKnhlW09lXS1kZVtPZV0qTGVbT2VdO2RlW09lXT1uZVtPZV0qTGVbT2VdK2RlW09lXSp4ZVtPZV0sbmVbT2VdPWplfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSxkZSx2KSx0aGlzLnRyYW5zZm9ybShu''@;'; put 'put ''ZSxkZSxGZSx3LHYscCksdGhpcy5jb25qdWdhdGUoRmUsdyx2KSx0aGlzLm5vcm1hbGl6ZTEzYihGZSx2KSxTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD1nLmxlbmd0aCtDLmxlbmd0aCxTLnN0cmlwKCl9LEUucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''Qz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxDKX0sRS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgQz1uZXcgRShudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5s''@;'; put 'put ''ZW5ndGgpLG9lKHRoaXMsZyxDKX0sRS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LEUucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgQz0wLFM9''@;'; put 'put ''MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkqZyxwPSg2NzEwODg2MyZ2KSsoNjcxMDg4NjMmQyk7Qz4+PTI2LEMrPXYvNjcxMDg4NjR8MCxDKz1wPj4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZwfXJldHVybiAwIT09QyYmKHRoaXMud29yZHNbU109Qyx0''@;'; put 'put ''aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LEUucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sRS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sRS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBDPWZ1bmN0aW9uKHcpe2Zvcih2YXIgSj1uZXcgQXJyYXkody5iaXRMZW5ndGgoKSksbmU9MDtuZTxKLmxlbmd0aDtuZSsrKXt2YXIgZmU9bmUlMjY7SltuZV09KHcud29yZHNbbmUvMjZ8MF0m''@;'; put 'put ''MTw8ZmUpPj4+ZmV9cmV0dXJuIEp9KGcpO2lmKDA9PT1DLmxlbmd0aClyZXR1cm4gbmV3IEUoMSk7Zm9yKHZhciBTPXRoaXMsdj0wO3Y8Qy5sZW5ndGgmJjA9PT1DW3ZdO3YrKyxTPVMuc3FyKCkpO2lmKCsrdjxDLmxlbmd0aClmb3IodmFyIHA9Uy5zcXIoKTt2PEMubGVuZ3RoO3YrKyxwPXAu''@;'; put 'put ''c3FyKCkpMCE9PUNbdl0mJihTPVMubXVsKHApKTtyZXR1cm4gU30sRS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQyxTPWclMjYsdj0oZy1TKS8yNixwPTY3MTA4ODYzPj4+MjYtUzw8MjYtUztpZigwIT09Uyl7dmFyIHc9MDtm''@;'; put 'put ''b3IoQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSj10aGlzLndvcmRzW0NdJnA7dGhpcy53b3Jkc1tDXT0oMHx0aGlzLndvcmRzW0NdKS1KPDxTfHcsdz1KPj4+MjYtU313JiYodGhpcy53b3Jkc1tDXT13LHRoaXMubGVuZ3RoKyspfWlmKDAhPT12KXtmb3IoQz10aGlzLmxlbmd0aC0xO0M+''@;'; put 'put ''PTA7Qy0tKXRoaXMud29yZHNbQyt2XT10aGlzLndvcmRzW0NdO2ZvcihDPTA7Qzx2O0MrKyl0aGlzLndvcmRzW0NdPTA7dGhpcy5sZW5ndGgrPXZ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRo''@;'; put 'put ''aXMuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxDLFMpe3ZhciB2O0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSx2PUM/KEMtQyUyNikvMjY6MDt2YXIgcD1nJTI2LHc9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEo9NjcxMDg4NjNeNjcxMDg4NjM+''@;'; put 'put ''Pj5wPDxwLG5lPVM7aWYodi09dyx2PU1hdGgubWF4KDAsdiksbmUpe2Zvcih2YXIgZGU9MDtkZTx3O2RlKyspbmUud29yZHNbZGVdPXRoaXMud29yZHNbZGVdO25lLmxlbmd0aD13fWlmKDAhPT13KWlmKHRoaXMubGVuZ3RoPncpZm9yKHRoaXMubGVuZ3RoLT13LGRlPTA7ZGU8dGhpcy5sZW5n''@;'; put 'put ''dGg7ZGUrKyl0aGlzLndvcmRzW2RlXT10aGlzLndvcmRzW2RlK3ddO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGZlPTA7Zm9yKGRlPXRoaXMubGVuZ3RoLTE7ZGU+PTAmJigwIT09ZmV8fGRlPj12KTtkZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW2RlXTt0aGlzLndv''@;'; put 'put ''cmRzW2RlXT1mZTw8MjYtcHx4ZT4+PnAsZmU9eGUmSn1yZXR1cm4gbmUmJjAhPT1mZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1mZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaXNocm49ZnVuY3Rp''@;'; put 'put ''b24oZyxDLFMpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLEMsUyl9LEUucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0sRS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pdXNobG4oZyl9LEUucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0sRS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LEUucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0ko''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2LFM9KGctQykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PEMpKX0sRS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgQz1nJTI2''@;'; put 'put ''LFM9KGctQykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1DJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0aCksMCE9PUMmJih0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkM8PEMpLHRoaXMuc3RyaXAoKSl9LEUucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxFLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxFLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPj02NzEwODg2NDtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXS09NjcxMDg4NjQsQz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tDKzFdPTE6dGhpcy53b3Jkc1tDKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMrMSksdGhpc30sRS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYo''@;'; put 'put ''SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbQ108MDtDKyspdGhpcy53b3Jkc1tDXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tDKzFd''@;'; put 'put ''LT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0sRS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxFLnByb3RvdHlwZS5pYWJzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxFLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sRS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdixwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCtTKTt2''@;'; put 'put ''YXIgSj0wO2Zvcih2PTA7djxnLmxlbmd0aDt2Kyspe3A9KDB8dGhpcy53b3Jkc1t2K1NdKStKO3ZhciBuZT0oMHxnLndvcmRzW3ZdKSpDO0o9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnB9Zm9yKDt2PHRoaXMubGVuZ3Ro''@;'; put 'put ''LVM7disrKUo9KHA9KDB8dGhpcy53b3Jkc1t2K1NdKStKKT4+MjYsdGhpcy53b3Jkc1t2K1NdPTY3MTA4ODYzJnA7aWYoMD09PUopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUopLEo9MCx2PTA7djx0aGlzLmxlbmd0aDt2KyspSj0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrSik+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxDKXt2YXIgUyx2PXRoaXMuY2xvbmUoKSxwPWcsdz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KFM9MjYtdGhpcy5fY291''@;'; put 'put ''bnRCaXRzKHcpKSYmKHA9cC51c2hsbihTKSx2Lml1c2hsbihTKSx3PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEosbmU9di5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1DKXsoSj1uZXcgRShudWxsKSkubGVuZ3RoPW5lKzEsSi53b3Jkcz1uZXcgQXJyYXkoSi5sZW5ndGgpO2Zvcih2''@;'; put 'put ''YXIgZGU9MDtkZTxKLmxlbmd0aDtkZSsrKUoud29yZHNbZGVdPTB9dmFyIGZlPXYuY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09ZmUubmVnYXRpdmUmJih2PWZlLEomJihKLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBMZT02NzEwODg2NCoo''@;'; put 'put ''MHx2LndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8di53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKExlPU1hdGgubWluKExlL3d8MCw2NzEwODg2Myksdi5faXNobG5zdWJtdWwocCxMZSx4ZSk7MCE9PXYubmVnYXRpdmU7KUxlLS0sdi5uZWdhdGl2ZT0wLHYuX2lzaGxuc3VibXVsKHAsMSx4ZSks''@;'; put 'put ''di5pc1plcm8oKXx8KHYubmVnYXRpdmVePTEpO0omJihKLndvcmRzW3hlXT1MZSl9cmV0dXJuIEomJkouc3RyaXAoKSx2LnN0cmlwKCksImRpdiIhPT1DJiYwIT09UyYmdi5pdXNocm4oUykse2RpdjpKfHxudWxsLG1vZDp2fX0sRS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsQyxTKXty''@;'; put 'put ''ZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBFKDApLG1vZDpuZXcgRSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcsQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSksImRpdiIhPT1DJiYocD13''@;'; put 'put ''Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2OnYsbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KHc9dGhpcy5kaXZtb2QoZy5uZWcoKSxDKSwibW9kIiE9PUMmJih2PXcuZGl2Lm5lZygpKSx7ZGl2OnYsbW9kOncubW9kfSk6dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyh3PXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksQyksImRpdiIhPT1DJiYocD13Lm1vZC5uZWcoKSxTJiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OncuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/''@;'; put 'put ''e2RpdjpuZXcgRSgwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Qz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1DP3tkaXY6bnVsbCxtb2Q6bmV3IEUodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSks''@;'; put 'put ''bW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxDKTt2YXIgdixwLHd9LEUucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxFLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0sRS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxFLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmRpdm1vZChnKTtpZihDLm1vZC5pc1plcm8oKSly''@;'; put 'put ''ZXR1cm4gQy5kaXY7dmFyIFM9MCE9PUMuZGl2Lm5lZ2F0aXZlP0MubW9kLmlzdWIoZyk6Qy5tb2Qsdj1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSx3PVMuY21wKHYpO3JldHVybiB3PDB8fDE9PT1wJiYwPT09dz9DLmRpdjowIT09Qy5kaXYubmVnYXRpdmU/Qy5kaXYuaXN1Ym4oMSk6Qy5kaXYu''@;'; put 'put ''aWFkZG4oMSl9LEUucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBDPTY3MTA4ODY0JWcsUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJWc7cmV0dXJuIFN9LEUucHJvdG90eXBlLmlkaXZuPWZ1bmN0''@;'; put 'put ''aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz0wLFM9dGhpcy5sZW5ndGgtMTtTPj0wO1MtLSl7dmFyIHY9KDB8dGhpcy53b3Jkc1tTXSkrNjcxMDg4NjQqQzt0aGlzLndvcmRzW1NdPXYvZ3wwLEM9diVnfXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmRpdm49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0sRS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFy''@;'; put 'put ''IHY9bmV3IEUoMSkscD1uZXcgRSgwKSx3PW5ldyBFKDApLEo9bmV3IEUoMSksbmU9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpOylDLml1c2hybigxKSxTLml1c2hybigxKSwrK25lO2Zvcih2YXIgZGU9Uy5jbG9uZSgpLGZlPUMuY2xvbmUoKTshQy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxM''@;'; put 'put ''ZT0xOyEoQy53b3Jkc1swXSZMZSkmJnhlPDI2OysreGUsTGU8PD0xKTtpZih4ZT4wKWZvcihDLml1c2hybih4ZSk7eGUtLSA+MDspKHYuaXNPZGQoKXx8cC5pc09kZCgpKSYmKHYuaWFkZChkZSkscC5pc3ViKGZlKSksdi5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBGZT0wLE9lPTE7''@;'; put 'put ''IShTLndvcmRzWzBdJk9lKSYmRmU8MjY7KytGZSxPZTw8PTEpO2lmKEZlPjApZm9yKFMuaXVzaHJuKEZlKTtGZS0tID4wOykody5pc09kZCgpfHxKLmlzT2RkKCkpJiYody5pYWRkKGRlKSxKLmlzdWIoZmUpKSx3Lml1c2hybigxKSxKLml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMp''@;'; put 'put ''LHYuaXN1Yih3KSxwLmlzdWIoSikpOihTLmlzdWIoQyksdy5pc3ViKHYpLEouaXN1YihwKSl9cmV0dXJue2E6dyxiOkosZ2NkOlMuaXVzaGxuKG5lKX19LEUucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgQz10aGlzLFM9''@;'; put 'put ''Zy5jbG9uZSgpO0M9MCE9PUMubmVnYXRpdmU/Qy51bW9kKGcpOkMuY2xvbmUoKTtmb3IodmFyIHYscD1uZXcgRSgxKSx3PW5ldyBFKDApLEo9Uy5jbG9uZSgpO0MuY21wbigxKT4wJiZTLmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUs''@;'; put 'put ''ZGU8PD0xKTtpZihuZT4wKWZvcihDLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSikscC5pdXNocm4oMSk7Zm9yKHZhciBmZT0wLHhlPTE7IShTLndvcmRzWzBdJnhlKSYmZmU8MjY7KytmZSx4ZTw8PTEpO2lmKGZlPjApZm9yKFMuaXVzaHJuKGZlKTtmZS0tID4wOyl3''@;'; put 'put ''LmlzT2RkKCkmJncuaWFkZChKKSx3Lml1c2hybigxKTtDLmNtcChTKT49MD8oQy5pc3ViKFMpLHAuaXN1Yih3KSk6KFMuaXN1YihDKSx3LmlzdWIocCkpfXJldHVybih2PTA9PT1DLmNtcG4oMSk/cDp3KS5jbXBuKDApPDAmJnYuaWFkZChnKSx2fSxFLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBDPXRoaXMuY2xvbmUoKSxTPWcuY2xvbmUoKTtDLm5lZ2F0aXZlPTAsUy5uZWdhdGl2ZT0wO2Zvcih2YXIgdj0wO0MuaXNFdmVuKCkmJlMuaXNFdmVuKCk7disrKUMu''@;'; put 'put ''aXVzaHJuKDEpLFMuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO3ZhciBwPUMuY21wKFMpO2lmKHA8MCl7dmFyIHc9QztDPVMsUz13fWVsc2UgaWYoMD09PXB8fDA9PT1TLmNtcG4oMSkpYnJlYWs7Qy5p''@;'; put 'put ''c3ViKFMpfXJldHVybiBTLml1c2hsbih2KX0sRS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0sRS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxFLnByb3RvdHlwZS5pc09kZD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30sRS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBDPWclMjYsUz0oZy1DKS8y''@;'; put 'put ''Nix2PTE8PEM7aWYodGhpcy5sZW5ndGg8PVMpcmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXYsdGhpcztmb3IodmFyIHA9dix3PVM7MCE9PXAmJnc8dGhpcy5sZW5ndGg7dysrKXt2YXIgSj0wfHRoaXMud29yZHNbd107cD0oSis9cCk+Pj4yNix0aGlzLndvcmRzW3dd''@;'; put 'put ''PUomPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbd109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxFLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sRS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihn''@;'; put 'put ''KXt2YXIgQyxTPWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVMpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlMpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpQz0xO2Vsc2V7UyYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7''@;'; put 'put ''dmFyIHY9MHx0aGlzLndvcmRzWzBdO0M9dj09PWc/MDp2PGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtQzpDfSxFLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgQz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0''@;'; put 'put ''aClyZXR1cm4tMTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PTB8dGhpcy53b3Jkc1tTXSxwPTB8Zy53b3Jkc1tTXTtpZih2IT09cCl7djxwP0M9LTE6dj5wJiYoQz0xKTticmVha319cmV0dXJuIEN9LEUucHJvdG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gMT09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0sRS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxFLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y21wKGcpPj0wfSxFLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9''@;'; put 'put ''MH0sRS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0sRS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wKGcpfSxFLnJlZD1m''@;'; put 'put ''dW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LEUucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRp''@;'; put 'put ''dmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxFLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0''@;'; put 'put ''aGlzKX0sRS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LEUucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2Zv''@;'; put 'put ''cmNlUmVkKGcpfSxFLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlz''@;'; put 'put ''LnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1''@;'; put 'put ''Yih0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRo''@;'; put 'put ''aXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwo''@;'; put 'put ''dGhpcyxnKX0sRS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LEUucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sRS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRo''@;'; put 'put ''aXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LEUucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVn''@;'; put 'put ''KHRoaXMpfSxFLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGhlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6''@;'; put 'put ''bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gdWUoZyxDKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IEUoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IEUoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9u''@;'; put 'put ''IGNlKCl7dWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7dWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBiKCl7dWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBEKCl7dWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIEM9RS5fcHJpbWUoZyk7dGhpcy5tPUMucCx0aGlzLnByaW1lPUN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1''@;'; put 'put ''bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhp''@;'; put 'put ''cy5yPW5ldyBFKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5t''@;'; put 'put ''aW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IEUobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSx1ZS5wcm90b3R5cGUuaXJlZHVj''@;'; put 'put ''ZT1mdW5jdGlvbihnKXt2YXIgQyxTPWc7ZG97dGhpcy5zcGxpdChTLHRoaXMudG1wKSxDPShTPShTPXRoaXMuaW11bEsoUykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShDPnRoaXMubik7dmFyIHY9Qzx0aGlzLm4/LTE6Uy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT12PyhT''@;'; put 'put ''LndvcmRzWzBdPTAsUy5sZW5ndGg9MSk6dj4wP1MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVMuc3RyaXA/Uy5zdHJpcCgpOlMuX3N0cmlwKCksU30sdWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsQyl7Zy5pdXNocm4odGhpcy5uLDAsQyl9LHVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlv''@;'; put 'put ''bihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LGsoY2UsdWUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2Zvcih2YXIgUz00MTk0MzAzLHY9TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8djtwKyspQy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKEMubGVuZ3RoPXYsZy5sZW5n''@;'; put 'put ''dGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciB3PWcud29yZHNbOV07Zm9yKEMud29yZHNbQy5sZW5ndGgrK109dyZTLHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBKPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShKJlMpPDw0fHc+Pj4yMix3PUp9Zy53''@;'; put 'put ''b3Jkc1twLTEwXT13Pj4+PTIyLGcubGVuZ3RoLT0wPT09dyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3Ro''@;'; put 'put ''O1MrKyl7dmFyIHY9MHxnLndvcmRzW1NdO2cud29yZHNbU109NjcxMDg4NjMmKEMrPTk3Nyp2KSxDPTY0KnYrKEMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sayhH''@;'; put 'put ''LHVlKSxrKGIsdWUpLGsoRCx1ZSksRC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKXt2YXIgdj0xOSooMHxnLndvcmRzW1NdKStDLHA9NjcxMDg4NjMmdjt2Pj4+PTI2LGcud29yZHNbU109cCxDPXZ9cmV0dXJuIDAhPT1DJiYoZy53''@;'; put 'put ''b3Jkc1tnLmxlbmd0aCsrXT1DKSxnfSxFLl9wcmltZT1mdW5jdGlvbihnKXtpZihoZVtnXSlyZXR1cm4gaGVbZ107dmFyIEM7aWYoImsyNTYiPT09ZylDPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpQz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpQz1uZXcgYjtlbHNle2lmKCJwMjU1MTki''@;'; put 'put ''IT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtDPW5ldyBEfXJldHVybiBoZVtnXT1DLEN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLEMpe0koMD09KGcubmVnYXRpdmV8Qy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1DLnJlZCwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5hZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFMu''@;'; put 'put ''X2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaWFkZChDKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksU30sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVy''@;'; put 'put ''aWZ5MihnLEMpO3ZhciBTPWcuc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYmUy5pYWRkKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxDKXt0aGlzLl92ZXJpZnkyKGcsQyk7dmFyIFM9Zy5pc3ViKEMpO3JldHVybiBTLmNtcG4oMCk8MCYm''@;'; put 'put ''Uy5pYWRkKHRoaXMubSksU30sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oQykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5p''@;'; put 'put ''bXVsKEMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxDKSx0aGlzLmltb2QoZy5tdWwoQykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBDPXRoaXMubS5hbmRsbigzKTtpZihJKEMlMj09MSksMz09PUMpe3ZhciBTPXRoaXMubS5hZGQobmV3IEUoMSkpLml1c2hy''@;'; put 'put ''bigyKTtyZXR1cm4gdGhpcy5wb3coZyxTKX1mb3IodmFyIHY9dGhpcy5tLnN1Ym4oMSkscD0wOyF2LmlzWmVybygpJiYwPT09di5hbmRsbigxKTspcCsrLHYuaXVzaHJuKDEpO0koIXYuaXNaZXJvKCkpO3ZhciB3PW5ldyBFKDEpLnRvUmVkKHRoaXMpLEo9dy5yZWROZWcoKSxuZT10aGlzLm0u''@;'; put 'put ''c3VibigxKS5pdXNocm4oMSksZGU9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihkZT1uZXcgRSgyKmRlKmRlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coZGUsbmUpLmNtcChKKTspZGUucmVkSUFkZChKKTtmb3IodmFyIGZlPXRoaXMucG93KGRlLHYpLHhlPXRoaXMucG93KGcsdi5hZGRuKDEp''@;'; put 'put ''Lml1c2hybigxKSksTGU9dGhpcy5wb3coZyx2KSxGZT1wOzAhPT1MZS5jbXAodyk7KXtmb3IodmFyIE9lPUxlLGplPTA7MCE9PU9lLmNtcCh3KTtqZSsrKU9lPU9lLnJlZFNxcigpO0koamU8RmUpO3ZhciBXZT10aGlzLnBvdyhmZSxuZXcgRSgxKS5pdXNobG4oRmUtamUtMSkpO3hlPXhlLnJl''@;'; put 'put ''ZE11bChXZSksZmU9V2UucmVkU3FyKCksTGU9TGUucmVkTXVsKGZlKSxGZT1qZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIEM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUMubmVnYXRpdmU/KEMubmVnYXRpdmU9MCx0aGlzLmltb2QoQykucmVkTmVn''@;'; put 'put ''KCkpOnRoaXMuaW1vZChDKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsQyl7aWYoQy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMSkudG9SZWQodGhpcyk7aWYoMD09PUMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPW5ldyBBcnJheSgxNik7U1swXT1uZXcgRSgxKS50b1JlZCh0''@;'; put 'put ''aGlzKSxTWzFdPWc7Zm9yKHZhciB2PTI7djxTLmxlbmd0aDt2KyspU1t2XT10aGlzLm11bChTW3YtMV0sZyk7dmFyIHA9U1swXSx3PTAsSj0wLG5lPUMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSx2PUMubGVuZ3RoLTE7dj49MDt2LS0pe2Zvcih2YXIgZGU9Qy53b3Jkc1t2''@;'; put 'put ''XSxmZT1uZS0xO2ZlPj0wO2ZlLS0pe3ZhciB4ZT1kZT4+ZmUmMTtwIT09U1swXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PXc/KHc8PD0xLHd8PXhlLCg0PT0rK0p8fDA9PT12JiYwPT09ZmUpJiYocD10aGlzLm11bChwLFNbd10pLEo9MCx3PTApKTpKPTB9bmU9MjZ9cmV0dXJuIHB9''@;'; put 'put ''LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgQz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gQz09PWc/Qy5jbG9uZSgpOkN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPWcuY2xvbmUoKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxFLm1vbnQ9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7cmV0dXJuIG5ldyBOKGcpfSxrKE4sSCksTi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LE4ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBDPXRoaXMuaW1vZChnLm11bCh0''@;'; put 'put ''aGlzLnJpbnYpKTtyZXR1cm4gQy5yZWQ9bnVsbCxDfSxOLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgUz1nLmltdWwoQyksdj1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0''@;'; put 'put ''aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPVMuaXN1Yih2KS5pdXNocm4odGhpcy5zaGlmdCksdz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP3c9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJih3PXAuaWFkZCh0aGlzLm0pKSx3Ll9mb3JjZVJlZCh0aGlz''@;'; put 'put ''KX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsQyl7aWYoZy5pc1plcm8oKXx8Qy5pc1plcm8oKSlyZXR1cm4gbmV3IEUoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWcubXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oTT1SLm5tZChNKSx0aGlzKX0sNjk0ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PU87ei52ZXJzaW9uPVIoODU5NykuaTgsei51dGlscz1SKDk1Myksei5yYW5kPVIo''@;'; put 'put ''OTkzMSksei5jdXJ2ZT1SKDgyNTQpLHouY3VydmVzPVIoNTQyNyksei5lYz1SKDc5NTQpLHouZWRkc2E9Uig1OTgwKX0sNDkxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MyksST1LLmdldE5BRixrPUsuZ2V0SlNGLEU9Sy5hc3NlcnQ7ZnVuY3Rpb24gaihC''@;'; put 'put ''LFkpe3RoaXMudHlwZT1CLHRoaXMucD1uZXcgeihZLnAsMTYpLHRoaXMucmVkPVkucHJpbWU/ei5yZWQoWS5wcmltZSk6ei5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyB6KDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgeigxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3''@;'; put 'put ''IHooMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1ZLm4mJm5ldyB6KFkubiwxNiksdGhpcy5nPVkuZyYmdGhpcy5wb2ludEZyb21KU09OKFkuZyxZLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5''@;'; put 'put ''KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgWD10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshWHx8WC5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRo''@;'; put 'put ''aXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBWKEIsWSl7dGhpcy5jdXJ2ZT1CLHRoaXMudHlwZT1ZLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH1NLmV4cG9ydHM9aixqLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVu''@;'; put 'put ''dGVkIil9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sai5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKEIsWSl7RShCLnByZWNvbXB1dGVkKTt2YXIgWD1CLl9nZXREb3VibGVzKCksVT1JKFksMSx0aGlz''@;'; put 'put ''Ll9iaXRMZW5ndGgpLHE9KDE8PFguc3RlcCsxKS0oWC5zdGVwJTI9PTA/MjoxKTtxLz0zO3ZhciBlZSx0ZSxvZT1bXTtmb3IoZWU9MDtlZTxVLmxlbmd0aDtlZSs9WC5zdGVwKXt0ZT0wO2Zvcih2YXIgc2U9ZWUrWC5zdGVwLTE7c2U+PWVlO3NlLS0pdGU9KHRlPDwxKStVW3NlXTtvZS5wdXNo''@;'; put 'put ''KHRlKX1mb3IodmFyIGhlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx1ZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksY2U9cTtjZT4wO2NlLS0pe2ZvcihlZT0wO2VlPG9lLmxlbmd0aDtlZSsrKSh0ZT1vZVtlZV0pPT09Y2U/dWU9dWUubWl4ZWRBZGQoWC5wb2ludHNbZWVdKTp0''@;'; put 'put ''ZT09PS1jZSYmKHVlPXVlLm1peGVkQWRkKFgucG9pbnRzW2VlXS5uZWcoKSkpO2hlPWhlLmFkZCh1ZSl9cmV0dXJuIGhlLnRvUCgpfSxqLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbihCLFkpe2Zvcih2YXIgWD00LFU9Qi5fZ2V0TkFGUG9pbnRzKFgpLHE9VS5wb2ludHMsZWU9SShZLFg9''@;'; put 'put ''VS53bmQsdGhpcy5fYml0TGVuZ3RoKSx0ZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksb2U9ZWUubGVuZ3RoLTE7b2U+PTA7b2UtLSl7Zm9yKHZhciBzZT0wO29lPj0wJiYwPT09ZWVbb2VdO29lLS0pc2UrKztpZihvZT49MCYmc2UrKyx0ZT10ZS5kYmxwKHNlKSxvZTwwKWJyZWFrO3Zh''@;'; put 'put ''ciBoZT1lZVtvZV07RSgwIT09aGUpLHRlPSJhZmZpbmUiPT09Qi50eXBlP3RlLm1peGVkQWRkKGhlPjA/cVtoZS0xPj4xXTpxWy1oZS0xPj4xXS5uZWcoKSk6dGUuYWRkKGhlPjA/cVtoZS0xPj4xXTpxWy1oZS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1CLnR5cGU/dGUudG9QKCk6''@;'; put 'put ''dGV9LGoucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKEIsWSxYLFUscSl7dmFyIGVlLHRlLG9lLHNlPXRoaXMuX3duYWZUMSxoZT10aGlzLl93bmFmVDIsdWU9dGhpcy5fd25hZlQzLGNlPTA7Zm9yKGVlPTA7ZWU8VTtlZSsrKXt2YXIgRz0ob2U9WVtlZV0pLl9nZXROQUZQb2ludHMo''@;'; put 'put ''Qik7c2VbZWVdPUcud25kLGhlW2VlXT1HLnBvaW50c31mb3IoZWU9VS0xO2VlPj0xO2VlLT0yKXt2YXIgYj1lZS0xLEQ9ZWU7aWYoMT09PXNlW2JdJiYxPT09c2VbRF0pe3ZhciBIPVtZW2JdLG51bGwsbnVsbCxZW0RdXTswPT09WVtiXS55LmNtcChZW0RdLnkpPyhIWzFdPVlbYl0uYWRkKFlb''@;'; put 'put ''RF0pLEhbMl09WVtiXS50b0ooKS5taXhlZEFkZChZW0RdLm5lZygpKSk6MD09PVlbYl0ueS5jbXAoWVtEXS55LnJlZE5lZygpKT8oSFsxXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0pLEhbMl09WVtiXS5hZGQoWVtEXS5uZWcoKSkpOihIWzFdPVlbYl0udG9KKCkubWl4ZWRBZGQoWVtEXSks''@;'; put 'put ''SFsyXT1ZW2JdLnRvSigpLm1peGVkQWRkKFlbRF0ubmVnKCkpKTt2YXIgTj1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxnPWsoWFtiXSxYW0RdKTtmb3IoY2U9TWF0aC5tYXgoZ1swXS5sZW5ndGgsY2UpLHVlW2JdPW5ldyBBcnJheShjZSksdWVbRF09bmV3IEFycmF5KGNlKSx0ZT0wO3RlPGNl''@;'; put 'put ''O3RlKyspdWVbYl1bdGVdPU5bMyooMSsoMHxnWzBdW3RlXSkpKygxKygwfGdbMV1bdGVdKSldLHVlW0RdW3RlXT0wLGhlW2JdPUh9ZWxzZSB1ZVtiXT1JKFhbYl0sc2VbYl0sdGhpcy5fYml0TGVuZ3RoKSx1ZVtEXT1JKFhbRF0sc2VbRF0sdGhpcy5fYml0TGVuZ3RoKSxjZT1NYXRoLm1heCh1''@;'; put 'put ''ZVtiXS5sZW5ndGgsY2UpLGNlPU1hdGgubWF4KHVlW0RdLmxlbmd0aCxjZSl9dmFyIHY9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHA9dGhpcy5fd25hZlQ0O2ZvcihlZT1jZTtlZT49MDtlZS0tKXtmb3IodmFyIHc9MDtlZT49MDspe3ZhciBKPSEwO2Zvcih0ZT0wO3RlPFU7dGUrKylw''@;'; put 'put ''W3RlXT0wfHVlW3RlXVtlZV0sMCE9PXBbdGVdJiYoSj0hMSk7aWYoIUopYnJlYWs7dysrLGVlLS19aWYoZWU+PTAmJncrKyx2PXYuZGJscCh3KSxlZTwwKWJyZWFrO2Zvcih0ZT0wO3RlPFU7dGUrKyl7dmFyIG5lPXBbdGVdOzAhPT1uZSYmKG5lPjA/b2U9aGVbdGVdW25lLTE+PjFdOm5lPDAm''@;'; put 'put ''JihvZT1oZVt0ZV1bLW5lLTE+PjFdLm5lZygpKSx2PSJhZmZpbmUiPT09b2UudHlwZT92Lm1peGVkQWRkKG9lKTp2LmFkZChvZSkpfX1mb3IoZWU9MDtlZTxVO2VlKyspaGVbZWVdPW51bGw7cmV0dXJuIHE/djp2LnRvUCgpfSxqLkJhc2VQb2ludD1WLFYucHJvdG90eXBlLmVxPWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sVi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sai5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oQixZKXtCPUsudG9BcnJheShCLFkpO3ZhciBY''@;'; put 'put ''PXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT1CWzBdfHw2PT09QlswXXx8Nz09PUJbMF0pJiZCLmxlbmd0aC0xPT0yKlgpcmV0dXJuIDY9PT1CWzBdP0UoQltCLmxlbmd0aC0xXSUyPT0wKTo3PT09QlswXSYmRShCW0IubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoQi5zbGljZSgxLDEr''@;'; put 'put ''WCksQi5zbGljZSgxK1gsMSsyKlgpKTtpZigoMj09PUJbMF18fDM9PT1CWzBdKSYmQi5sZW5ndGgtMT09PVgpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChCLnNsaWNlKDEsMStYKSwzPT09QlswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxWLnByb3RvdHlwZS5l''@;'; put 'put ''bmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmVuY29kZShCLCEwKX0sVi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihCKXt2YXIgWT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLFg9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLFkpO3JldHVybiBCP1t0aGlzLmdl''@;'; put 'put ''dFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChYKTpbNF0uY29uY2F0KFgsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLFkpKX0sVi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsuZW5jb2RlKHRoaXMuX2VuY29kZShZKSxCKX0sVi5wcm90b3R5cGUucHJlY29tcHV0ZT1m''@;'; put 'put ''dW5jdGlvbihCKXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBZPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gWS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLFkuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsQiksWS5iZXRhPXRoaXMuX2dl''@;'; put 'put ''dEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPVksdGhpc30sVi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oQil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIFk9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhWSYmWS5wb2ludHMubGVuZ3RoPj1NYXRoLmNl''@;'; put 'put ''aWwoKEIuYml0TGVuZ3RoKCkrMSkvWS5zdGVwKX0sVi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oQixZKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIFg9W3RoaXNdLFU9''@;'; put 'put ''dGhpcyxxPTA7cTxZO3ErPUIpe2Zvcih2YXIgZWU9MDtlZTxCO2VlKyspVT1VLmRibCgpO1gucHVzaChVKX1yZXR1cm57c3RlcDpCLHBvaW50czpYfX0sVi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihCKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5h''@;'; put 'put ''ZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBZPVt0aGlzXSxYPSgxPDxCKS0xLFU9MT09PVg/bnVsbDp0aGlzLmRibCgpLHE9MTtxPFg7cSsrKVlbcV09WVtxLTFdLmFkZChVKTtyZXR1cm57d25kOkIscG9pbnRzOll9fSxWLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBudWxsfSxWLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKEIpe2Zvcih2YXIgWT10aGlzLFg9MDtYPEI7WCsrKVk9WS5kYmwoKTtyZXR1cm4gWX19LDExMzg6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MyksSz1SKDM3ODUpLEk9Uig1NzE3KSxrPVIoNDkxOCks''@;'; put 'put ''RT16LmFzc2VydDtmdW5jdGlvbiBqKEIpe3RoaXMudHdpc3RlZD0xIT0oMHxCLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Qi5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsay5jYWxsKHRoaXMsImVkd2FyZHMiLEIpLHRoaXMuYT1uZXcgSyhCLmEsMTYpLnVtb2QodGhp''@;'; put 'put ''cy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBLKEIuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgSyhCLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5k''@;'; put 'put ''KSxFKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxCLmMpfWZ1bmN0aW9uIFYoQixZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsQiwicHJvamVjdGl2ZSIpLG51bGw9PT1ZJiZudWxsPT09WCYmbnVsbD09PVU/KHRoaXMu''@;'; put 'put ''eD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgSyhZLDE2KSx0aGlzLnk9bmV3IEsoWCwxNiksdGhpcy56PVU/bmV3IEsoVSwxNik6dGhpcy5j''@;'; put 'put ''dXJ2ZS5vbmUsdGhpcy50PXEmJm5ldyBLKHEsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0''@;'; put 'put ''aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlz''@;'; put 'put ''LnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfUkoaixrKSxNLmV4cG9ydHM9aixqLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5tT25lQT9CLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoQil9LGoucHJvdG90eXBl''@;'; put 'put ''Ll9tdWxDPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLm9uZUM/Qjp0aGlzLmMucmVkTXVsKEIpfSxqLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIHRoaXMucG9pbnQoQixZLFgsVSl9LGoucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oQixZKXsoQj1uZXcg''@;'; put 'put ''SyhCLDE2KSkucmVkfHwoQj1CLnRvUmVkKHRoaXMucmVkKSk7dmFyIFg9Qi5yZWRTcXIoKSxVPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoWCkpLHE9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKFgpKSxlZT1VLnJlZE11bChxLnJlZEludm0oKSks''@;'; put 'put ''dGU9ZWUucmVkU3FydCgpO2lmKDAhPT10ZS5yZWRTcXIoKS5yZWRTdWIoZWUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBvZT10ZS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oWSYmIW9lfHwhWSYmb2UpJiYodGU9dGUucmVkTmVnKCkpLHRo''@;'; put 'put ''aXMucG9pbnQoQix0ZSl9LGoucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oQixZKXsoQj1uZXcgSyhCLDE2KSkucmVkfHwoQj1CLnRvUmVkKHRoaXMucmVkKSk7dmFyIFg9Qi5yZWRTcXIoKSxVPVgucmVkU3ViKHRoaXMuYzIpLHE9WC5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5j''@;'; put 'put ''MikucmVkU3ViKHRoaXMuYSksZWU9VS5yZWRNdWwocS5yZWRJbnZtKCkpO2lmKDA9PT1lZS5jbXAodGhpcy56ZXJvKSl7aWYoWSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sQil9dmFyIHRlPWVlLnJlZFNxcnQoKTtpZigwIT09''@;'; put 'put ''dGUucmVkU3FyKCkucmVkU3ViKGVlKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGUuZnJvbVJlZCgpLmlzT2RkKCkhPT1ZJiYodGU9dGUucmVkTmVnKCkpLHRoaXMucG9pbnQodGUsQil9LGoucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0''@;'; put 'put ''aW9uKEIpe2lmKEIuaXNJbmZpbml0eSgpKXJldHVybiEwO0Iubm9ybWFsaXplKCk7dmFyIFk9Qi54LnJlZFNxcigpLFg9Qi55LnJlZFNxcigpLFU9WS5yZWRNdWwodGhpcy5hKS5yZWRBZGQoWCkscT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChZKS5yZWRN''@;'; put 'put ''dWwoWCkpKTtyZXR1cm4gMD09PVUuY21wKHEpfSxJKFYsay5CYXNlUG9pbnQpLGoucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oQil7cmV0dXJuIFYuZnJvbUpTT04odGhpcyxCKX0sai5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIG5ldyBWKHRoaXMs''@;'; put 'put ''QixZLFgsVSl9LFYuZnJvbUpTT049ZnVuY3Rpb24oQixZKXtyZXR1cm4gbmV3IFYoQixZWzBdLFlbMV0sWVsyXSl9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlz''@;'; put 'put ''LnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sVi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNt''@;'; put 'put ''cG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxWLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIEI9dGhpcy54LnJlZFNxcigpLFk9dGhpcy55LnJlZFNxcigpLFg9dGhpcy56LnJlZFNxcigpO1g9''@;'; put 'put ''WC5yZWRJQWRkKFgpO3ZhciBVPXRoaXMuY3VydmUuX211bEEoQikscT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFkpLGVlPVUucmVkQWRkKFkpLHRlPWVlLnJlZFN1YihYKSxvZT1VLnJlZFN1YihZKSxzZT1xLnJlZE11bCh0ZSksaGU9ZWUucmVk''@;'; put 'put ''TXVsKG9lKSx1ZT1xLnJlZE11bChvZSksY2U9dGUucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzZSxoZSxjZSx1ZSl9LFYucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksb2U9''@;'; put 'put ''dGhpcy54LnJlZFNxcigpLHNlPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBoZT0oVT10aGlzLmN1cnZlLl9tdWxBKG9lKSkucmVkQWRkKHNlKTt0aGlzLnpPbmU/KEI9dGUucmVkU3ViKG9lKS5yZWRTdWIoc2UpLnJlZE11bChoZS5yZWRTdWIodGhpcy5jdXJ2''@;'; put 'put ''ZS50d28pKSxZPWhlLnJlZE11bChVLnJlZFN1YihzZSkpLFg9aGUucmVkU3FyKCkucmVkU3ViKGhlKS5yZWRTdWIoaGUpKToocT10aGlzLnoucmVkU3FyKCksZWU9aGUucmVkU3ViKHEpLnJlZElTdWIocSksQj10ZS5yZWRTdWIob2UpLnJlZElTdWIoc2UpLnJlZE11bChlZSksWT1oZS5yZWRN''@;'; put 'put ''dWwoVS5yZWRTdWIoc2UpKSxYPWhlLnJlZE11bChlZSkpfWVsc2UgVT1vZS5yZWRBZGQoc2UpLHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLGVlPVUucmVkU3ViKHEpLnJlZFN1YihxKSxCPXRoaXMuY3VydmUuX211bEModGUucmVkSVN1YihVKSkucmVkTXVsKGVlKSxZPXRo''@;'; put 'put ''aXMuY3VydmUuX211bEMoVSkucmVkTXVsKG9lLnJlZElTdWIoc2UpKSxYPVUucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChCLFksWCl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/''@;'; put 'put ''dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxWLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKEIpe3ZhciBZPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoQi55LnJlZFN1YihCLngpKSxYPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoQi55LnJlZEFkZChCLngpKSxV''@;'; put 'put ''PXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKEIudCkscT10aGlzLnoucmVkTXVsKEIuei5yZWRBZGQoQi56KSksZWU9WC5yZWRTdWIoWSksdGU9cS5yZWRTdWIoVSksb2U9cS5yZWRBZGQoVSksc2U9WC5yZWRBZGQoWSksaGU9ZWUucmVkTXVsKHRlKSx1ZT1vZS5yZWRNdWwo''@;'; put 'put ''c2UpLGNlPWVlLnJlZE11bChzZSksRz10ZS5yZWRNdWwob2UpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGhlLHVlLEcsY2UpfSxWLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihCKXt2YXIgWSxYLFU9dGhpcy56LnJlZE11bChCLnopLHE9VS5yZWRTcXIoKSxlZT10aGlzLngucmVkTXVs''@;'; put 'put ''KEIueCksdGU9dGhpcy55LnJlZE11bChCLnkpLG9lPXRoaXMuY3VydmUuZC5yZWRNdWwoZWUpLnJlZE11bCh0ZSksc2U9cS5yZWRTdWIob2UpLGhlPXEucmVkQWRkKG9lKSx1ZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKEIueC5yZWRBZGQoQi55KSkucmVkSVN1YihlZSkucmVkSVN1''@;'; put 'put ''Yih0ZSksY2U9VS5yZWRNdWwoc2UpLnJlZE11bCh1ZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oWT1VLnJlZE11bChoZSkucmVkTXVsKHRlLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKGVlKSkpLFg9c2UucmVkTXVsKGhlKSk6KFk9VS5yZWRNdWwoaGUpLnJlZE11bCh0ZS5yZWRTdWIo''@;'; put 'put ''ZWUpKSxYPXRoaXMuY3VydmUuX211bEMoc2UpLnJlZE11bChoZSkpLHRoaXMuY3VydmUucG9pbnQoY2UsWSxYKX0sVi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9COkIuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlz''@;'; put 'put ''Ll9leHRBZGQoQik6dGhpcy5fcHJvakFkZChCKX0sVi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKEIpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsQik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEIpfSxWLnByb3RvdHlwZS5tdWxBZGQ9''@;'; put 'put ''ZnVuY3Rpb24oQixZLFgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsWV0sW0IsWF0sMiwhMSl9LFYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oQixZLFgpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsWV0sW0IsWF0sMiwhMCl9LFYucHJv''@;'; put 'put ''dG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgQj10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bChCKSx0aGlzLnk9dGhpcy55LnJlZE11bChCKSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bChCKSks''@;'; put 'put ''dGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxWLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LFYucHJvdG90eXBlLmdldFg9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0sVi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXM9PT1C''@;'; put 'put ''fHwwPT09dGhpcy5nZXRYKCkuY21wKEIuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcChCLmdldFkoKSl9LFYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihCKXt2YXIgWT1CLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChZKSlyZXR1''@;'; put 'put ''cm4hMDtmb3IodmFyIFg9Qi5jbG9uZSgpLFU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKFguaWFkZCh0aGlzLmN1cnZlLm4pLFguY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoWS5yZWRJQWRkKFUpLDA9PT10aGlzLnguY21wKFkpKXJldHVybiEwfX0sVi5w''@;'; put 'put ''cm90b3R5cGUudG9QPVYucHJvdG90eXBlLm5vcm1hbGl6ZSxWLnByb3RvdHlwZS5taXhlZEFkZD1WLnByb3RvdHlwZS5hZGR9LDgyNTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1PO3ouYmFzZT1SKDQ5MTgpLHouc2hvcnQ9Uig2NjczKSx6Lm1vbnQ9UigyODgxKSx6LmVkd2FyZHM9''@;'; put 'put ''UigxMTM4KX0sMjg4MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDU3MTcpLEk9Uig0OTE4KSxrPVIoOTUzKTtmdW5jdGlvbiBFKFYpe0kuY2FsbCh0aGlzLCJtb250IixWKSx0aGlzLmE9bmV3IHooVi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyB6''@;'; put 'put ''KFYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IHooNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgeigyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGooVixC''@;'; put 'put ''LFkpe0kuQmFzZVBvaW50LmNhbGwodGhpcyxWLCJwcm9qZWN0aXZlIiksbnVsbD09PUImJm51bGw9PT1ZPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgeihCLDE2KSx0aGlzLno9bmV3IHooWSwxNiksdGhpcy54LnJlZHx8KHRoaXMu''@;'; put 'put ''eD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1LKEUsSSksTS5leHBvcnRzPUUsRS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oVil7dmFyIEI9Vi5ub3JtYWxpemUoKS54LFk9Qi5yZWRT''@;'; put 'put ''cXIoKSxYPVkucmVkTXVsKEIpLnJlZEFkZChZLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoQik7cmV0dXJuIDA9PT1YLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoWCl9LEsoaixJLkJhc2VQb2ludCksRS5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oVixCKXtyZXR1cm4gdGhpcy5wb2lu''@;'; put 'put ''dChrLnRvQXJyYXkoVixCKSwxKX0sRS5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oVixCKXtyZXR1cm4gbmV3IGoodGhpcyxWLEIpfSxFLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFYpe3JldHVybiBqLmZyb21KU09OKHRoaXMsVil9LGoucHJvdG90eXBlLnByZWNvbXB1dGU9''@;'; put 'put ''ZnVuY3Rpb24oKXt9LGoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxqLmZyb21KU09OPWZ1bmN0aW9uKFYsQil7cmV0dXJuIG5ldyBqKFYsQlswXSxCWzFdfHxWLm9uZSl9LGou''@;'; put 'put ''cHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+''@;'; put 'put ''In0sai5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LGoucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciBWPXRoaXMueC5yZWRBZGQodGhpcy56KS5yZWRTcXIoKSxCPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxZPVYu''@;'; put 'put ''cmVkU3ViKEIpLFg9Vi5yZWRNdWwoQiksVT1ZLnJlZE11bChCLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoWSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLFUpfSxqLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9u''@;'; put 'put ''dGdvbWVyeSBjdXJ2ZSIpfSxqLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKFYsQil7dmFyIFk9dGhpcy54LnJlZEFkZCh0aGlzLnopLFg9dGhpcy54LnJlZFN1Yih0aGlzLnopLFU9Vi54LnJlZEFkZChWLnopLHE9Vi54LnJlZFN1YihWLnopLnJlZE11bChZKSxlZT1VLnJlZE11bChYKSx0''@;'; put 'put ''ZT1CLnoucmVkTXVsKHEucmVkQWRkKGVlKS5yZWRTcXIoKSksb2U9Qi54LnJlZE11bChxLnJlZElTdWIoZWUpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0ZSxvZSl9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihWKXtmb3IodmFyIEI9Vi5jbG9uZSgpLFk9dGhpcyxYPXRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxVPVtdOzAhPT1CLmNtcG4oMCk7Qi5pdXNocm4oMSkpVS5wdXNoKEIuYW5kbG4oMSkpO2Zvcih2YXIgcT1VLmxlbmd0aC0xO3E+PTA7cS0tKTA9PT1VW3FdPyhZPVkuZGlmZkFkZChYLHRoaXMpLFg9WC5kYmwoKSk6KFg9WS5kaWZmQWRkKFgsdGhp''@;'; put 'put ''cyksWT1ZLmRibCgpKTtyZXR1cm4gWH0sai5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sai5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBv''@;'; put 'put ''cnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LGoucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFYpe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKFYuZ2V0WCgpKX0sai5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJ''@;'; put 'put ''bnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxqLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY2NzM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MyksSz1SKDM3ODUpLEk9Uig1NzE3''@;'; put 'put ''KSxrPVIoNDkxOCksRT16LmFzc2VydDtmdW5jdGlvbiBqKFkpe2suY2FsbCh0aGlzLCJzaG9ydCIsWSksdGhpcy5hPW5ldyBLKFkuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSyhZLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRo''@;'; put 'put ''aXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKFkpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2Vu''@;'; put 'put ''ZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIFYoWSxYLFUscSl7ay5CYXNlUG9pbnQuY2FsbCh0aGlzLFksImFmZmluZSIpLG51bGw9PT1YJiZudWxsPT09VT8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IEsoWCwxNiksdGhpcy55PW5ldyBL''@;'; put 'put ''KFUsMTYpLHEmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5j''@;'; put 'put ''dXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gQihZLFgsVSxxKXtrLkJhc2VQb2ludC5jYWxsKHRoaXMsWSwiamFjb2JpYW4iKSxudWxsPT09WCYmbnVsbD09PVUmJm51bGw9PT1xPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcg''@;'; put 'put ''SygwKSk6KHRoaXMueD1uZXcgSyhYLDE2KSx0aGlzLnk9bmV3IEsoVSwxNiksdGhpcy56PW5ldyBLKHEsMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSks''@;'; put 'put ''dGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9SShqLGspLE0uZXhwb3J0cz1qLGoucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oWSl7aWYodGhpcy56ZXJvQSYmdGhpcy5n''@;'; put 'put ''JiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIFgsVTtpZihZLmJldGEpWD1uZXcgSyhZLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBxPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO1g9KFg9cVswXS5jbXAocVsxXSk8MD9xWzBdOnFbMV0pLnRvUmVkKHRoaXMu''@;'; put 'put ''cmVkKX1pZihZLmxhbWJkYSlVPW5ldyBLKFkubGFtYmRhLDE2KTtlbHNle3ZhciBlZT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChlZVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKFgpKT9VPWVlWzBdOkUoMD09PXRoaXMuZy5tdWwoVT1lZVsxXSkueC5jbXAo''@;'; put 'put ''dGhpcy5nLngucmVkTXVsKFgpKSl9cmV0dXJue2JldGE6WCxsYW1iZGE6VSxiYXNpczpZLmJhc2lzP1kuYmFzaXMubWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm57YTpuZXcgSyh0ZS5hLDE2KSxiOm5ldyBLKHRlLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhVKX19fSxqLnByb3RvdHlwZS5f''@;'; put 'put ''Z2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKFkpe3ZhciBYPVk9PT10aGlzLnA/dGhpcy5yZWQ6Sy5tb250KFkpLFU9bmV3IEsoMikudG9SZWQoWCkucmVkSW52bSgpLHE9VS5yZWROZWcoKSxlZT1uZXcgSygzKS50b1JlZChYKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKFUpO3JldHVybltxLnJl''@;'; put 'put ''ZEFkZChlZSkuZnJvbVJlZCgpLHEucmVkU3ViKGVlKS5mcm9tUmVkKCldfSxqLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWCxVLHEsZWUsdGUsb2Usc2UsaGUsdWUsY2U9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxH''@;'; put 'put ''PVksYj10aGlzLm4uY2xvbmUoKSxEPW5ldyBLKDEpLEg9bmV3IEsoMCksTj1uZXcgSygwKSxnPW5ldyBLKDEpLEM9MDswIT09Ry5jbXBuKDApOyl7dmFyIFM9Yi5kaXYoRyk7aGU9Yi5zdWIoUy5tdWwoRykpLHVlPU4uc3ViKFMubXVsKEQpKTt2YXIgdj1nLnN1YihTLm11bChIKSk7aWYoIXEm''@;'; put 'put ''JmhlLmNtcChjZSk8MClYPXNlLm5lZygpLFU9RCxxPWhlLm5lZygpLGVlPXVlO2Vsc2UgaWYocSYmMj09KytDKWJyZWFrO3NlPWhlLGI9RyxHPWhlLE49RCxEPXVlLGc9SCxIPXZ9dGU9aGUubmVnKCksb2U9dWU7dmFyIHA9cS5zcXIoKS5hZGQoZWUuc3FyKCkpO3JldHVybiB0ZS5zcXIoKS5h''@;'; put 'put ''ZGQob2Uuc3FyKCkpLmNtcChwKT49MCYmKHRlPVgsb2U9VSkscS5uZWdhdGl2ZSYmKHE9cS5uZWcoKSxlZT1lZS5uZWcoKSksdGUubmVnYXRpdmUmJih0ZT10ZS5uZWcoKSxvZT1vZS5uZWcoKSksW3thOnEsYjplZX0se2E6dGUsYjpvZX1dfSxqLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0''@;'; put 'put ''aW9uKFkpe3ZhciBYPXRoaXMuZW5kby5iYXNpcyxVPVhbMF0scT1YWzFdLGVlPXEuYi5tdWwoWSkuZGl2Um91bmQodGhpcy5uKSx0ZT1VLmIubmVnKCkubXVsKFkpLmRpdlJvdW5kKHRoaXMubiksb2U9ZWUubXVsKFUuYSksc2U9dGUubXVsKHEuYSksaGU9ZWUubXVsKFUuYiksdWU9dGUubXVs''@;'; put 'put ''KHEuYik7cmV0dXJue2sxOlkuc3ViKG9lKS5zdWIoc2UpLGsyOmhlLmFkZCh1ZSkubmVnKCl9fSxqLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFksWCl7KFk9bmV3IEsoWSwxNikpLnJlZHx8KFk9WS50b1JlZCh0aGlzLnJlZCkpO3ZhciBVPVkucmVkU3FyKCkucmVkTXVsKFkpLnJl''@;'; put 'put ''ZElBZGQoWS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLHE9VS5yZWRTcXJ0KCk7aWYoMCE9PXEucmVkU3FyKCkucmVkU3ViKFUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBlZT1xLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihY''@;'; put 'put ''JiYhZWV8fCFYJiZlZSkmJihxPXEucmVkTmVnKCkpLHRoaXMucG9pbnQoWSxxKX0sai5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oWSl7aWYoWS5pbmYpcmV0dXJuITA7dmFyIFg9WS54LFU9WS55LHE9dGhpcy5hLnJlZE11bChYKSxlZT1YLnJlZFNxcigpLnJlZE11bChYKS5yZWRJQWRk''@;'; put 'put ''KHEpLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PVUucmVkU3FyKCkucmVkSVN1YihlZSkuY21wbigwKX0sai5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKFksWCxVKXtmb3IodmFyIHE9dGhpcy5fZW5kb1duYWZUMSxlZT10aGlzLl9lbmRvV25hZlQyLHRlPTA7dGU8WS5s''@;'; put 'put ''ZW5ndGg7dGUrKyl7dmFyIG9lPXRoaXMuX2VuZG9TcGxpdChYW3RlXSksc2U9WVt0ZV0saGU9c2UuX2dldEJldGEoKTtvZS5rMS5uZWdhdGl2ZSYmKG9lLmsxLmluZWcoKSxzZT1zZS5uZWcoITApKSxvZS5rMi5uZWdhdGl2ZSYmKG9lLmsyLmluZWcoKSxoZT1oZS5uZWcoITApKSxxWzIqdGVd''@;'; put 'put ''PXNlLHFbMip0ZSsxXT1oZSxlZVsyKnRlXT1vZS5rMSxlZVsyKnRlKzFdPW9lLmsyfWZvcih2YXIgdWU9dGhpcy5fd25hZk11bEFkZCgxLHEsZWUsMip0ZSxVKSxjZT0wO2NlPDIqdGU7Y2UrKylxW2NlXT1udWxsLGVlW2NlXT1udWxsO3JldHVybiB1ZX0sSShWLGsuQmFzZVBvaW50KSxqLnBy''@;'; put 'put ''b3RvdHlwZS5wb2ludD1mdW5jdGlvbihZLFgsVSl7cmV0dXJuIG5ldyBWKHRoaXMsWSxYLFUpfSxqLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKFksWCl7cmV0dXJuIFYuZnJvbUpTT04odGhpcyxZLFgpfSxWLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMu''@;'; put 'put ''Y3VydmUuZW5kbyl7dmFyIFk9dGhpcy5wcmVjb21wdXRlZDtpZihZJiZZLmJldGEpcmV0dXJuIFkuYmV0YTt2YXIgWD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoWSl7dmFyIFU9dGhpcy5jdXJ2ZSxxPWZ1bmN0aW9uKGVl''@;'; put 'put ''KXtyZXR1cm4gVS5wb2ludChlZS54LnJlZE11bChVLmVuZG8uYmV0YSksZWUueSl9O1kuYmV0YT1YLFgucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpZLm5hZi5wb2ludHMubWFwKHEpfSxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5k''@;'; put 'put ''b3VibGVzLnN0ZXAscG9pbnRzOlkuZG91Ymxlcy5wb2ludHMubWFwKHEpfX19cmV0dXJuIFh9fSxWLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1''@;'; put 'put ''dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlz''@;'; put 'put ''LnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxWLmZyb21KU09OPWZ1bmN0aW9uKFksWCxVKXsic3RyaW5nIj09dHlwZW9mIFgmJihYPUpTT04ucGFyc2UoWCkpO3ZhciBxPVkucG9pbnQoWFswXSxYWzFdLFUpO2lmKCFYWzJdKXJldHVybiBxO2Z1''@;'; put 'put ''bmN0aW9uIGVlKG9lKXtyZXR1cm4gWS5wb2ludChvZVswXSxvZVsxXSxVKX12YXIgdGU9WFsyXTtyZXR1cm4gcS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6dGUuZG91YmxlcyYme3N0ZXA6dGUuZG91Ymxlcy5zdGVwLHBvaW50czpbcV0uY29uY2F0KHRlLmRvdWJsZXMucG9pbnRz''@;'; put 'put ''Lm1hcChlZSkpfSxuYWY6dGUubmFmJiZ7d25kOnRlLm5hZi53bmQscG9pbnRzOltxXS5jb25jYXQodGUubmFmLnBvaW50cy5tYXAoZWUpKX19LHF9LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8''@;'; put 'put ''RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sVi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sVi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9u''@;'; put 'put ''KFkpe2lmKHRoaXMuaW5mKXJldHVybiBZO2lmKFkuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoWSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShZKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKFkueCkpcmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWD10aGlzLnkucmVkU3ViKFkueSk7MCE9PVguY21wbigwKSYmKFg9WC5yZWRNdWwodGhpcy54LnJlZFN1YihZLngpLnJlZEludm0oKSkpO3ZhciBVPVgucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoWS54KSxxPVgucmVkTXVs''@;'; put 'put ''KHRoaXMueC5yZWRTdWIoVSkpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLHEpfSxWLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgWT10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PVkuY21wbigwKSlyZXR1''@;'; put 'put ''cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBYPXRoaXMuY3VydmUuYSxVPXRoaXMueC5yZWRTcXIoKSxxPVkucmVkSW52bSgpLGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZChYKS5yZWRNdWwocSksdGU9ZWUucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRk''@;'; put 'put ''KHRoaXMueCkpLG9lPWVlLnJlZE11bCh0aGlzLngucmVkU3ViKHRlKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRlLG9lKX0sVi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxWLnByb3RvdHlwZS5nZXRZPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LFYucHJvdG90eXBlLm11bD1mdW5jdGlvbihZKXtyZXR1cm4gWT1uZXcgSyhZLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoWSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxZKTp0aGlzLmN1cnZl''@;'; put 'put ''LmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtZXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLFkpfSxWLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe3ZhciBxPVt0aGlzLFhdLGVlPVtZLFVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2''@;'; put 'put ''ZS5fZW5kb1duYWZNdWxBZGQocSxlZSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsZWUsMil9LFYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oWSxYLFUpe3ZhciBxPVt0aGlzLFhdLGVlPVtZLFVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxB''@;'; put 'put ''ZGQocSxlZSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsZWUsMiwhMCl9LFYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFkpe3JldHVybiB0aGlzPT09WXx8dGhpcy5pbmY9PT1ZLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChZLngpJiYwPT09dGhpcy55LmNtcChZLnkpKX0s''@;'; put 'put ''Vi5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKFkpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBYPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoWSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIFU9dGhpcy5wcmVjb21wdXRlZCxxPWZ1bmN0aW9uKGVlKXtyZXR1''@;'; put 'put ''cm4gZWUubmVnKCl9O1gucHJlY29tcHV0ZWQ9e25hZjpVLm5hZiYme3duZDpVLm5hZi53bmQscG9pbnRzOlUubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6VS5kb3VibGVzJiZ7c3RlcDpVLmRvdWJsZXMuc3RlcCxwb2ludHM6VS5kb3VibGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gWH0s''@;'; put 'put ''Vi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sSShCLGsuQmFzZVBvaW50KSxqLnByb3RvdHlwZS5qcG9pbnQ9ZnVu''@;'; put 'put ''Y3Rpb24oWSxYLFUpe3JldHVybiBuZXcgQih0aGlzLFksWCxVKX0sQi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWT10aGlzLnoucmVkSW52bSgpLFg9WS5yZWRTcXIoKSxVPXRoaXMu''@;'; put 'put ''eC5yZWRNdWwoWCkscT10aGlzLnkucmVkTXVsKFgpLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLHEpfSxCLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxCLnByb3RvdHlw''@;'; put 'put ''ZS5hZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFk7aWYoWS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIFg9WS56LnJlZFNxcigpLFU9dGhpcy56LnJlZFNxcigpLHE9dGhpcy54LnJlZE11bChYKSxlZT1ZLngucmVkTXVsKFUpLHRlPXRoaXMueS5yZWRN''@;'; put 'put ''dWwoWC5yZWRNdWwoWS56KSksb2U9WS55LnJlZE11bChVLnJlZE11bCh0aGlzLnopKSxzZT1xLnJlZFN1YihlZSksaGU9dGUucmVkU3ViKG9lKTtpZigwPT09c2UuY21wbigwKSlyZXR1cm4gMCE9PWhlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJs''@;'; put 'put ''KCk7dmFyIHVlPXNlLnJlZFNxcigpLGNlPXVlLnJlZE11bChzZSksRz1xLnJlZE11bCh1ZSksYj1oZS5yZWRTcXIoKS5yZWRJQWRkKGNlKS5yZWRJU3ViKEcpLnJlZElTdWIoRyksRD1oZS5yZWRNdWwoRy5yZWRJU3ViKGIpKS5yZWRJU3ViKHRlLnJlZE11bChjZSkpLEg9dGhpcy56LnJlZE11''@;'; put 'put ''bChZLnopLnJlZE11bChzZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGIsRCxIKX0sQi5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24oWSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFkudG9KKCk7aWYoWS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIFg9dGhpcy56LnJl''@;'; put 'put ''ZFNxcigpLFU9dGhpcy54LHE9WS54LnJlZE11bChYKSxlZT10aGlzLnksdGU9WS55LnJlZE11bChYKS5yZWRNdWwodGhpcy56KSxvZT1VLnJlZFN1YihxKSxzZT1lZS5yZWRTdWIodGUpO2lmKDA9PT1vZS5jbXBuKDApKXJldHVybiAwIT09c2UuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChu''@;'; put 'put ''dWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgaGU9b2UucmVkU3FyKCksdWU9aGUucmVkTXVsKG9lKSxjZT1VLnJlZE11bChoZSksRz1zZS5yZWRTcXIoKS5yZWRJQWRkKHVlKS5yZWRJU3ViKGNlKS5yZWRJU3ViKGNlKSxiPXNlLnJlZE11bChjZS5yZWRJU3ViKEcpKS5yZWRJU3ViKGVl''@;'; put 'put ''LnJlZE11bCh1ZSkpLEQ9dGhpcy56LnJlZE11bChvZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcsYixEKX0sQi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihZKXtpZigwPT09WSlyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighWSlyZXR1cm4gdGhp''@;'; put 'put ''cy5kYmwoKTt2YXIgWDtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIFU9dGhpcztmb3IoWD0wO1g8WTtYKyspVT1VLmRibCgpO3JldHVybiBVfXZhciBxPXRoaXMuY3VydmUuYSxlZT10aGlzLmN1cnZlLnRpbnYsdGU9dGhpcy54LG9lPXRoaXMueSxzZT10aGlz''@;'; put 'put ''LnosaGU9c2UucmVkU3FyKCkucmVkU3FyKCksdWU9b2UucmVkQWRkKG9lKTtmb3IoWD0wO1g8WTtYKyspe3ZhciBjZT10ZS5yZWRTcXIoKSxHPXVlLnJlZFNxcigpLGI9Ry5yZWRTcXIoKSxEPWNlLnJlZEFkZChjZSkucmVkSUFkZChjZSkucmVkSUFkZChxLnJlZE11bChoZSkpLEg9dGUucmVk''@;'; put 'put ''TXVsKEcpLE49RC5yZWRTcXIoKS5yZWRJU3ViKEgucmVkQWRkKEgpKSxnPUgucmVkSVN1YihOKSxDPUQucmVkTXVsKGcpO0M9Qy5yZWRJQWRkKEMpLnJlZElTdWIoYik7dmFyIFM9dWUucmVkTXVsKHNlKTtYKzE8WSYmKGhlPWhlLnJlZE11bChiKSksdGU9TixzZT1TLHVlPUN9cmV0dXJuIHRo''@;'; put 'put ''aXMuY3VydmUuanBvaW50KHRlLHVlLnJlZE11bChlZSksc2UpfSxCLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRo''@;'; put 'put ''aXMuX2RibCgpfSxCLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBZLFgsVTtpZih0aGlzLnpPbmUpe3ZhciBxPXRoaXMueC5yZWRTcXIoKSxlZT10aGlzLnkucmVkU3FyKCksdGU9ZWUucmVkU3FyKCksb2U9dGhpcy54LnJlZEFkZChlZSkucmVkU3FyKCkucmVkSVN1YihxKS5y''@;'; put 'put ''ZWRJU3ViKHRlKTtvZT1vZS5yZWRJQWRkKG9lKTt2YXIgc2U9cS5yZWRBZGQocSkucmVkSUFkZChxKSxoZT1zZS5yZWRTcXIoKS5yZWRJU3ViKG9lKS5yZWRJU3ViKG9lKSx1ZT10ZS5yZWRJQWRkKHRlKTt1ZT0odWU9dWUucmVkSUFkZCh1ZSkpLnJlZElBZGQodWUpLFk9aGUsWD1zZS5yZWRN''@;'; put 'put ''dWwob2UucmVkSVN1YihoZSkpLnJlZElTdWIodWUpLFU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGNlPXRoaXMueC5yZWRTcXIoKSxHPXRoaXMueS5yZWRTcXIoKSxiPUcucmVkU3FyKCksRD10aGlzLngucmVkQWRkKEcpLnJlZFNxcigpLnJlZElTdWIoY2UpLnJlZElTdWIoYik7''@;'; put 'put ''RD1ELnJlZElBZGQoRCk7dmFyIEg9Y2UucmVkQWRkKGNlKS5yZWRJQWRkKGNlKSxOPUgucmVkU3FyKCksZz1iLnJlZElBZGQoYik7Zz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZyksWT1OLnJlZElTdWIoRCkucmVkSVN1YihEKSxYPUgucmVkTXVsKEQucmVkSVN1YihZKSkucmVkSVN1Yihn''@;'; put 'put ''KSxVPShVPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChVKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxYLFUpfSxCLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgWSxYLFU7aWYodGhpcy56T25lKXt2YXIgcT10aGlzLngucmVkU3FyKCksZWU9dGhpcy55LnJl''@;'; put 'put ''ZFNxcigpLHRlPWVlLnJlZFNxcigpLG9lPXRoaXMueC5yZWRBZGQoZWUpLnJlZFNxcigpLnJlZElTdWIocSkucmVkSVN1Yih0ZSk7b2U9b2UucmVkSUFkZChvZSk7dmFyIHNlPXEucmVkQWRkKHEpLnJlZElBZGQocSkucmVkSUFkZCh0aGlzLmN1cnZlLmEpLGhlPXNlLnJlZFNxcigpLnJlZElT''@;'; put 'put ''dWIob2UpLnJlZElTdWIob2UpO1k9aGU7dmFyIHVlPXRlLnJlZElBZGQodGUpO3VlPSh1ZT11ZS5yZWRJQWRkKHVlKSkucmVkSUFkZCh1ZSksWD1zZS5yZWRNdWwob2UucmVkSVN1YihoZSkpLnJlZElTdWIodWUpLFU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGNlPXRoaXMuei5y''@;'; put 'put ''ZWRTcXIoKSxHPXRoaXMueS5yZWRTcXIoKSxiPXRoaXMueC5yZWRNdWwoRyksRD10aGlzLngucmVkU3ViKGNlKS5yZWRNdWwodGhpcy54LnJlZEFkZChjZSkpO0Q9RC5yZWRBZGQoRCkucmVkSUFkZChEKTt2YXIgSD1iLnJlZElBZGQoYiksTj0oSD1ILnJlZElBZGQoSCkpLnJlZEFkZChIKTtZ''@;'; put 'put ''PUQucmVkU3FyKCkucmVkSVN1YihOKSxVPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKEcpLnJlZElTdWIoY2UpO3ZhciBnPUcucmVkU3FyKCk7Zz0oZz0oZz1nLnJlZElBZGQoZykpLnJlZElBZGQoZykpLnJlZElBZGQoZyksWD1ELnJlZE11bChILnJlZElTdWIoWSkp''@;'; put 'put ''LnJlZElTdWIoZyl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFksWCxVKX0sQi5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciBZPXRoaXMuY3VydmUuYSxYPXRoaXMueCxVPXRoaXMueSxxPXRoaXMueixlZT1xLnJlZFNxcigpLnJlZFNxcigpLHRlPVgucmVkU3FyKCksb2U9VS5yZWRT''@;'; put 'put ''cXIoKSxzZT10ZS5yZWRBZGQodGUpLnJlZElBZGQodGUpLnJlZElBZGQoWS5yZWRNdWwoZWUpKSxoZT1YLnJlZEFkZChYKSx1ZT0oaGU9aGUucmVkSUFkZChoZSkpLnJlZE11bChvZSksY2U9c2UucmVkU3FyKCkucmVkSVN1Yih1ZS5yZWRBZGQodWUpKSxHPXVlLnJlZElTdWIoY2UpLGI9b2Uu''@;'; put 'put ''cmVkU3FyKCk7Yj0oYj0oYj1iLnJlZElBZGQoYikpLnJlZElBZGQoYikpLnJlZElBZGQoYik7dmFyIEQ9c2UucmVkTXVsKEcpLnJlZElTdWIoYiksSD1VLnJlZEFkZChVKS5yZWRNdWwocSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGNlLEQsSCl9LEIucHJvdG90eXBlLnRycGw9ZnVuY3Rp''@;'; put 'put ''b24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIFk9dGhpcy54LnJlZFNxcigpLFg9dGhpcy55LnJlZFNxcigpLFU9dGhpcy56LnJlZFNxcigpLHE9WC5yZWRTcXIoKSxlZT1ZLnJlZEFkZChZKS5yZWRJQWRkKFkpLHRlPWVlLnJlZFNxcigp''@;'; put 'put ''LG9lPXRoaXMueC5yZWRBZGQoWCkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKHEpLHNlPShvZT0ob2U9KG9lPW9lLnJlZElBZGQob2UpKS5yZWRBZGQob2UpLnJlZElBZGQob2UpKS5yZWRJU3ViKHRlKSkucmVkU3FyKCksaGU9cS5yZWRJQWRkKHEpO2hlPShoZT0oaGU9aGUucmVkSUFk''@;'; put 'put ''ZChoZSkpLnJlZElBZGQoaGUpKS5yZWRJQWRkKGhlKTt2YXIgdWU9ZWUucmVkSUFkZChvZSkucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihzZSkucmVkSVN1YihoZSksY2U9WC5yZWRNdWwodWUpO2NlPShjZT1jZS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSk7dmFyIEc9dGhpcy54LnJl''@;'; put 'put ''ZE11bChzZSkucmVkSVN1YihjZSk7Rz0oRz1HLnJlZElBZGQoRykpLnJlZElBZGQoRyk7dmFyIGI9dGhpcy55LnJlZE11bCh1ZS5yZWRNdWwoaGUucmVkSVN1Yih1ZSkpLnJlZElTdWIob2UucmVkTXVsKHNlKSkpO2I9KGI9KGI9Yi5yZWRJQWRkKGIpKS5yZWRJQWRkKGIpKS5yZWRJQWRkKGIp''@;'; put 'put ''O3ZhciBEPXRoaXMuei5yZWRBZGQob2UpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihzZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcsYixEKX0sQi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFksWCl7cmV0dXJuIFk9bmV3IEsoWSxYKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMs''@;'; put 'put ''WSl9LEIucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFkpe2lmKCJhZmZpbmUiPT09WS50eXBlKXJldHVybiB0aGlzLmVxKFkudG9KKCkpO2lmKHRoaXM9PT1ZKXJldHVybiEwO3ZhciBYPXRoaXMuei5yZWRTcXIoKSxVPVkuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChVKS5yZWRJU3Vi''@;'; put 'put ''KFkueC5yZWRNdWwoWCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIHE9WC5yZWRNdWwodGhpcy56KSxlZT1VLnJlZE11bChZLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChlZSkucmVkSVN1YihZLnkucmVkTXVsKHEpKS5jbXBuKDApfSxCLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oWSl7''@;'; put 'put ''dmFyIFg9dGhpcy56LnJlZFNxcigpLFU9WS50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKFgpO2lmKDA9PT10aGlzLnguY21wKFUpKXJldHVybiEwO2Zvcih2YXIgcT1ZLmNsb25lKCksZWU9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChYKTs7KXtpZihxLmlhZGQodGhpcy5jdXJ2ZS5uKSxx''@;'; put 'put ''LmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKFUucmVkSUFkZChlZSksMD09PXRoaXMueC5jbXAoVSkpcmV0dXJuITB9fSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9p''@;'; put 'put ''bnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sQi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3OihNLE8s''@;'; put 'put ''Uik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1PLEk9UigzNzE1KSxrPVIoODI1NCksRT1SKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIGooQil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09Qi50eXBlP25ldyBrLnNob3J0KEIpOiJlZHdhcmRzIj09PUIudHlwZT9uZXcgay5lZHdhcmRzKEIpOm5ldyBrLm1v''@;'; put 'put ''bnQoQiksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD1CLmhhc2gsRSh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLEUodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5j''@;'; put 'put ''dGlvbiBWKEIsWSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEssQix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIFg9bmV3IGooWSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShLLEIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOlh9KSxYfX0pfUsuUHJlc2V0Q3VydmU9aixWKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgw''@;'; put 'put ''ZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxWKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIz''@;'; put 'put ''OTQzIDIzNTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVj''@;'; put 'put ''MWQyMSIsImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxWKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2Qy''@;'; put 'put ''NjA0YiIsbjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRh''@;'; put 'put ''MTM5NDUgZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksVigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAw''@;'; put 'put ''MCAwMDAwMDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOkkuc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0''@;'; put 'put ''MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLFYo''@;'; put 'put ''InA1MjEiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZi''@;'; put 'put ''NTAzZjAwIixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIs''@;'; put 'put ''aGFzaDpJLnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdl''@;'; put 'put ''N2UzMSBjMmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2''@;'; put 'put ''NjUwIl19KSxWKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksVigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNk''@;'; put 'put ''NiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NjY2NjU4Il19KTt0cnl7ej1SKDEwMzcpfWNhdGNoe3o9dm9pZCAwfVYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6''@;'; put 'put ''IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOkkuc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2''@;'; put 'put ''YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZl''@;'; put 'put ''NGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4''@;'; put 'put ''M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLHpdfSl9LDc5NTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM3ODUpLEs9UigyMTU2KSxJPVIoOTUzKSxrPVIoNTQyNyksRT1SKDk5MzEpLGo9SS5hc3NlcnQsVj1S''@;'; put 'put ''KDEyNTEpLEI9Uig2MTEpO2Z1bmN0aW9uIFkoWCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWSkpcmV0dXJuIG5ldyBZKFgpOyJzdHJpbmciPT10eXBlb2YgWCYmKGooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssWCksIlVua25vd24gY3VydmUgIitYKSxYPWtbWF0pLFgg''@;'; put 'put ''aW5zdGFuY2VvZiBrLlByZXNldEN1cnZlJiYoWD17Y3VydmU6WH0pLHRoaXMuY3VydmU9WC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPVguY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShY''@;'; put 'put ''LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPVguaGFzaHx8WC5jdXJ2ZS5oYXNofU0uZXhwb3J0cz1ZLFkucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBWKHRoaXMsWCl9LFkucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKFgsVSl7cmV0''@;'; put 'put ''dXJuIFYuZnJvbVByaXZhdGUodGhpcyxYLFUpfSxZLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKFgsVSl7cmV0dXJuIFYuZnJvbVB1YmxpYyh0aGlzLFgsVSl9LFkucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oWCl7WHx8KFg9e30pO2Zvcih2YXIgVT1uZXcgSyh7aGFz''@;'; put 'put ''aDp0aGlzLmhhc2gscGVyczpYLnBlcnMscGVyc0VuYzpYLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OlguZW50cm9weXx8RSh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOlguZW50cm9weSYmWC5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHE9''@;'; put 'put ''dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT10aGlzLm4uc3ViKG5ldyB6KDIpKTs7KXt2YXIgdGU9bmV3IHooVS5nZW5lcmF0ZShxKSk7aWYoISh0ZS5jbXAoZWUpPjApKXJldHVybiB0ZS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKHRlKX19LFkucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1m''@;'; put 'put ''dW5jdGlvbihYLFUpe3ZhciBxPTgqWC5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihYPVgudXNocm4ocSkpLCFVJiZYLmNtcCh0aGlzLm4pPj0wP1guc3ViKHRoaXMubik6WH0sWS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihYLFUscSxlZSl7Im9iamVjdCI9''@;'; put 'put ''PXR5cGVvZiBxJiYoZWU9cSxxPW51bGwpLGVlfHwoZWU9e30pLFU9dGhpcy5rZXlGcm9tUHJpdmF0ZShVLHEpLFg9dGhpcy5fdHJ1bmNhdGVUb04obmV3IHooWCwxNikpO2Zvcih2YXIgdGU9dGhpcy5uLmJ5dGVMZW5ndGgoKSxvZT1VLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIsdGUpLHNl''@;'; put 'put ''PVgudG9BcnJheSgiYmUiLHRlKSxoZT1uZXcgSyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpvZSxub25jZTpzZSxwZXJzOmVlLnBlcnMscGVyc0VuYzplZS5wZXJzRW5jfHwidXRmOCJ9KSx1ZT10aGlzLm4uc3ViKG5ldyB6KDEpKSxjZT0wOztjZSsrKXt2YXIgRz1lZS5rP2VlLmsoY2UpOm5l''@;'; put 'put ''dyB6KGhlLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChHPXRoaXMuX3RydW5jYXRlVG9OKEcsITApKS5jbXBuKDEpPD0wfHxHLmNtcCh1ZSk+PTApKXt2YXIgYj10aGlzLmcubXVsKEcpO2lmKCFiLmlzSW5maW5pdHkoKSl7dmFyIEQ9Yi5nZXRYKCksSD1ELnVtb2QodGhp''@;'; put 'put ''cy5uKTtpZigwIT09SC5jbXBuKDApKXt2YXIgTj1HLmludm0odGhpcy5uKS5tdWwoSC5tdWwoVS5nZXRQcml2YXRlKCkpLmlhZGQoWCkpO2lmKDAhPT0oTj1OLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIGc9KGIuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PUQuY21wKEgpPzI6MCk7cmV0''@;'; put 'put ''dXJuIGVlLmNhbm9uaWNhbCYmTi5jbXAodGhpcy5uaCk+MCYmKE49dGhpcy5uLnN1YihOKSxnXj0xKSxuZXcgQih7cjpILHM6TixyZWNvdmVyeVBhcmFtOmd9KX19fX19fSxZLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oWCxVLHEsZWUpe1g9dGhpcy5fdHJ1bmNhdGVUb04obmV3IHooWCwx''@;'; put 'put ''NikpLHE9dGhpcy5rZXlGcm9tUHVibGljKHEsZWUpO3ZhciB0ZT0oVT1uZXcgQihVLCJoZXgiKSkucixvZT1VLnM7aWYodGUuY21wbigxKTwwfHx0ZS5jbXAodGhpcy5uKT49MHx8b2UuY21wbigxKTwwfHxvZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgc2UsaGU9b2UuaW52bSh0aGlz''@;'; put 'put ''Lm4pLHVlPWhlLm11bChYKS51bW9kKHRoaXMubiksY2U9aGUubXVsKHRlKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKHNlPXRoaXMuZy5qbXVsQWRkKHVlLHEuZ2V0UHVibGljKCksY2UpKS5pc0luZmluaXR5KCkmJnNlLmVxWFRvUCh0ZSk6IShzZT10''@;'; put 'put ''aGlzLmcubXVsQWRkKHVlLHEuZ2V0UHVibGljKCksY2UpKS5pc0luZmluaXR5KCkmJjA9PT1zZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcCh0ZSl9LFkucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24oWCxVLHEsZWUpe2ooKDMmcSk9PT1xLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMg''@;'; put 'put ''bW9yZSB0aGFuIHR3byBiaXRzIiksVT1uZXcgQihVLGVlKTt2YXIgdGU9dGhpcy5uLG9lPW5ldyB6KFgpLHNlPVUucixoZT1VLnMsdWU9MSZxLGNlPXE+PjE7aWYoc2UuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZjZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0''@;'; put 'put ''byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO3NlPXRoaXMuY3VydmUucG9pbnRGcm9tWChjZT9zZS5hZGQodGhpcy5jdXJ2ZS5uKTpzZSx1ZSk7dmFyIEc9VS5yLmludm0odGUpLGI9dGUuc3ViKG9lKS5tdWwoRykudW1vZCh0ZSksRD1oZS5tdWwoRykudW1vZCh0ZSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuZy5tdWxBZGQoYixzZSxEKX0sWS5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihYLFUscSxlZSl7aWYobnVsbCE9PShVPW5ldyBCKFUsZWUpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBVLnJlY292ZXJ5UGFyYW07Zm9yKHZhciB0ZT0wO3RlPDQ7dGUrKyl7dmFyIG9l''@;'; put 'put ''O3RyeXtvZT10aGlzLnJlY292ZXJQdWJLZXkoWCxVLHRlKX1jYXRjaHtjb250aW51ZX1pZihvZS5lcShxKSlyZXR1cm4gdGV9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1S''@;'; put 'put ''KDM3ODUpLEs9Uig5NTMpLmFzc2VydDtmdW5jdGlvbiBJKGssRSl7dGhpcy5lYz1rLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsRS5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKEUucHJpdixFLnByaXZFbmMpLEUucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoRS5wdWIsRS5wdWJFbmMp''@;'; put 'put ''fU0uZXhwb3J0cz1JLEkuZnJvbVB1YmxpYz1mdW5jdGlvbihrLEUsail7cmV0dXJuIEUgaW5zdGFuY2VvZiBJP0U6bmV3IEkoayx7cHViOkUscHViRW5jOmp9KX0sSS5mcm9tUHJpdmF0ZT1mdW5jdGlvbihrLEUsail7cmV0dXJuIEUgaW5zdGFuY2VvZiBJP0U6bmV3IEkoayx7cHJpdjpFLHBy''@;'; put 'put ''aXZFbmM6an0pfSxJLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBrPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIGsuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTprLnZhbGlkYXRlKCk/ay5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5p''@;'; put 'put ''c0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxJLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oayxFKXtyZXR1''@;'; put 'put ''cm4ic3RyaW5nIj09dHlwZW9mIGsmJihFPWssaz1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRT90aGlzLnB1Yi5lbmNvZGUoRSxrKTp0aGlzLnB1Yn0sSS5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/''@;'; put 'put ''dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sSS5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oayxFKXt0aGlzLnByaXY9bmV3IHooayxFfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LEkucHJvdG90eXBlLl9pbXBvcnRQ''@;'; put 'put ''dWJsaWM9ZnVuY3Rpb24oayxFKXtpZihrLnh8fGsueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/SyhrLngsIk5lZWQgeCBjb29yZGluYXRlIik6InNob3J0IiE9PXRoaXMuZWMuY3VydmUudHlwZSYmImVkd2FyZHMiIT09dGhpcy5lYy5jdXJ2ZS50eXBlfHxLKGsueCYmay55''@;'; put 'put ''LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KGsueCxrLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KGssRSl9LEkucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihrKXtyZXR1cm4gay52YWxpZGF0''@;'; put 'put ''ZSgpfHxLKGsudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxrLm11bCh0aGlzLnByaXYpLmdldFgoKX0sSS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihrLEUsail7cmV0dXJuIHRoaXMuZWMuc2lnbihrLHRoaXMsRSxqKX0sSS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0''@;'; put 'put ''aW9uKGssRSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KGssRSx0aGlzKX0sSS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3Bl''@;'; put 'put ''Y3QoKSkrIiA+In19LDYxMTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzc4NSksSz1SKDk1MyksST1LLmFzc2VydDtmdW5jdGlvbiBrKFksWCl7aWYoWSBpbnN0YW5jZW9mIGspcmV0dXJuIFk7dGhpcy5faW1wb3J0REVSKFksWCl8fChJKFkuciYmWS5zLCJTaWduYXR1cmUgd2l0''@;'; put 'put ''aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IHooWS5yLDE2KSx0aGlzLnM9bmV3IHooWS5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09WS5yZWNvdmVyeVBhcmFtP251bGw6WS5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiBFKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIGooWSxYKXt2''@;'; put 'put ''YXIgVT1ZW1gucGxhY2UrK107aWYoISgxMjgmVSkpcmV0dXJuIFU7dmFyIHE9MTUmVTtpZigwPT09cXx8cT40KXJldHVybiExO2Zvcih2YXIgZWU9MCx0ZT0wLG9lPVgucGxhY2U7dGU8cTt0ZSsrLG9lKyspZWU8PD04LGVlfD1ZW29lXSxlZT4+Pj0wO3JldHVybiEoZWU8PTEyNykmJihYLnBs''@;'; put 'put ''YWNlPW9lLGVlKX1mdW5jdGlvbiBWKFkpe2Zvcih2YXIgWD0wLFU9WS5sZW5ndGgtMTshWVtYXSYmISgxMjgmWVtYKzFdKSYmWDxVOylYKys7cmV0dXJuIDA9PT1YP1k6WS5zbGljZShYKX1mdW5jdGlvbiBCKFksWCl7aWYoWDwxMjgpWS5wdXNoKFgpO2Vsc2V7dmFyIFU9MSsoTWF0aC5sb2co''@;'; put 'put ''WCkvTWF0aC5MTjI+Pj4zKTtmb3IoWS5wdXNoKDEyOHxVKTstLVU7KVkucHVzaChYPj4+KFU8PDMpJjI1NSk7WS5wdXNoKFgpfX1NLmV4cG9ydHM9ayxrLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKFksWCl7WT1LLnRvQXJyYXkoWSxYKTt2YXIgVT1uZXcgRTtpZig0OCE9PVlbVS5w''@;'; put 'put ''bGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1qKFksVSk7aWYoITE9PT1xfHxxK1UucGxhY2UhPT1ZLmxlbmd0aHx8MiE9PVlbVS5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgZWU9aihZLFUpO2lmKCExPT09ZWUpcmV0dXJuITE7dmFyIHRlPVkuc2xpY2UoVS5wbGFjZSxlZStVLnBsYWNlKTtpZihVLnBs''@;'; put 'put ''YWNlKz1lZSwyIT09WVtVLnBsYWNlKytdKXJldHVybiExO3ZhciBvZT1qKFksVSk7aWYoITE9PT1vZXx8WS5sZW5ndGghPT1vZStVLnBsYWNlKXJldHVybiExO3ZhciBzZT1ZLnNsaWNlKFUucGxhY2Usb2UrVS5wbGFjZSk7aWYoMD09PXRlWzBdKXtpZighKDEyOCZ0ZVsxXSkpcmV0dXJuITE7''@;'; put 'put ''dGU9dGUuc2xpY2UoMSl9aWYoMD09PXNlWzBdKXtpZighKDEyOCZzZVsxXSkpcmV0dXJuITE7c2U9c2Uuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgeih0ZSksdGhpcy5zPW5ldyB6KHNlKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0say5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24o''@;'; put 'put ''WSl7dmFyIFg9dGhpcy5yLnRvQXJyYXkoKSxVPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZYWzBdJiYoWD1bMF0uY29uY2F0KFgpKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksWD1WKFgpLFU9VihVKTshKFVbMF18fDEyOCZVWzFdKTspVT1VLnNsaWNlKDEpO3ZhciBxPVsyXTtCKHEs''@;'; put 'put ''WC5sZW5ndGgpLChxPXEuY29uY2F0KFgpKS5wdXNoKDIpLEIocSxVLmxlbmd0aCk7dmFyIGVlPXEuY29uY2F0KFUpLHRlPVs0OF07cmV0dXJuIEIodGUsZWUubGVuZ3RoKSx0ZT10ZS5jb25jYXQoZWUpLEsuZW5jb2RlKHRlLFkpfX0sNTk4MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6''@;'; put 'put ''PVIoMzcxNSksSz1SKDU0MjcpLEk9Uig5NTMpLGs9SS5hc3NlcnQsRT1JLnBhcnNlQnl0ZXMsaj1SKDkwODcpLFY9UigzNjIyKTtmdW5jdGlvbiBCKFkpe2lmKGsoImVkMjU1MTkiPT09WSwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIEIpKXJl''@;'; put 'put ''dHVybiBuZXcgQihZKTt0aGlzLmN1cnZlPVk9S1tZXS5jdXJ2ZSx0aGlzLmc9WS5nLHRoaXMuZy5wcmVjb21wdXRlKFkubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9WS5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKFkubi5iaXRMZW5n''@;'; put 'put ''dGgoKS84KSx0aGlzLmhhc2g9ei5zaGE1MTJ9TS5leHBvcnRzPUIsQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihZLFgpe1k9RShZKTt2YXIgVT10aGlzLmtleUZyb21TZWNyZXQoWCkscT10aGlzLmhhc2hJbnQoVS5tZXNzYWdlUHJlZml4KCksWSksZWU9dGhpcy5nLm11bChxKSx0ZT10aGlz''@;'; put 'put ''LmVuY29kZVBvaW50KGVlKSxvZT10aGlzLmhhc2hJbnQodGUsVS5wdWJCeXRlcygpLFkpLm11bChVLnByaXYoKSksc2U9cS5hZGQob2UpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOmVlLFM6c2UsUmVuY29kZWQ6dGV9KX0sQi5wcm90b3R5cGUudmVy''@;'; put 'put ''aWZ5PWZ1bmN0aW9uKFksWCxVKXtZPUUoWSksWD10aGlzLm1ha2VTaWduYXR1cmUoWCk7dmFyIHE9dGhpcy5rZXlGcm9tUHVibGljKFUpLGVlPXRoaXMuaGFzaEludChYLlJlbmNvZGVkKCkscS5wdWJCeXRlcygpLFkpLHRlPXRoaXMuZy5tdWwoWC5TKCkpO3JldHVybiBYLlIoKS5hZGQocS5w''@;'; put 'put ''dWIoKS5tdWwoZWUpKS5lcSh0ZSl9LEIucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIFk9dGhpcy5oYXNoKCksWD0wO1g8YXJndW1lbnRzLmxlbmd0aDtYKyspWS51cGRhdGUoYXJndW1lbnRzW1hdKTtyZXR1cm4gSS5pbnRGcm9tTEUoWS5kaWdlc3QoKSkudW1vZCh0aGlz''@;'; put 'put ''LmN1cnZlLm4pfSxCLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKFkpe3JldHVybiBqLmZyb21QdWJsaWModGhpcyxZKX0sQi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihZKXtyZXR1cm4gai5mcm9tU2VjcmV0KHRoaXMsWSl9LEIucHJvdG90eXBlLm1ha2VTaWdu''@;'; put 'put ''YXR1cmU9ZnVuY3Rpb24oWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBWP1k6bmV3IFYodGhpcyxZKX0sQi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oWSl7dmFyIFg9WS5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBYW3RoaXMuZW5jb2RpbmdM''@;'; put 'put ''ZW5ndGgtMV18PVkuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsWH0sQi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oWSl7dmFyIFg9KFk9SS5wYXJzZUJ5dGVzKFkpKS5sZW5ndGgtMSxVPVkuc2xpY2UoMCxYKS5jb25jYXQoLTEyOSZZW1hdKSxxPTAhPSgxMjgmWVtYXSksZWU9SS5pbnRG''@;'; put 'put ''cm9tTEUoVSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShlZSxxKX0sQi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKFkpe3JldHVybiBZLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sQi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKFkpe3JldHVybiBJ''@;'; put 'put ''LmludEZyb21MRShZKX0sQi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDkwODc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MyksSz16LmFzc2VydCxJPXoucGFyc2VCeXRlcyxrPXouY2FjaGVkUHJv''@;'; put 'put ''cGVydHk7ZnVuY3Rpb24gRShqLFYpe3RoaXMuZWRkc2E9aix0aGlzLl9zZWNyZXQ9SShWLnNlY3JldCksai5pc1BvaW50KFYucHViKT90aGlzLl9wdWI9Vi5wdWI6dGhpcy5fcHViQnl0ZXM9SShWLnB1Yil9RS5mcm9tUHVibGljPWZ1bmN0aW9uKGosVil7cmV0dXJuIFYgaW5zdGFuY2VvZiBF''@;'; put 'put ''P1Y6bmV3IEUoaix7cHViOlZ9KX0sRS5mcm9tU2VjcmV0PWZ1bmN0aW9uKGosVil7cmV0dXJuIFYgaW5zdGFuY2VvZiBFP1Y6bmV3IEUoaix7c2VjcmV0OlZ9KX0sRS5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sayhFLCJwdWJCeXRlcyIsZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLGsoRSwicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLGso''@;'; put 'put ''RSwicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBqPXRoaXMuZWRkc2EsVj10aGlzLmhhc2goKSxCPWouZW5jb2RpbmdMZW5ndGgtMSxZPVYuc2xpY2UoMCxqLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gWVswXSY9MjQ4LFlbQl0mPTEyNyxZW0JdfD02NCxZfSksayhFLCJwcml2IixmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLGsoRSwiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksayhFLCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLEUucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oail7cmV0dXJuIEsodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihqLHRoaXMpfSxFLnByb3RvdHlw''@;'; put 'put ''ZS52ZXJpZnk9ZnVuY3Rpb24oaixWKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoaixWLHRoaXMpfSxFLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oail7cmV0dXJuIEsodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5Iiksei5lbmNvZGUodGhpcy5zZWNyZXQoKSxq''@;'; put 'put ''KX0sRS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKGope3JldHVybiB6LmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksail9LE0uZXhwb3J0cz1FfSwzNjIyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigzNzg1KSxLPVIoOTUzKSxJPUsuYXNzZXJ0LGs9Sy5jYWNoZWRQcm9wZXJ0''@;'; put 'put ''eSxFPUsucGFyc2VCeXRlcztmdW5jdGlvbiBqKFYsQil7dGhpcy5lZGRzYT1WLCJvYmplY3QiIT10eXBlb2YgQiYmKEI9RShCKSksQXJyYXkuaXNBcnJheShCKSYmKEI9e1I6Qi5zbGljZSgwLFYuZW5jb2RpbmdMZW5ndGgpLFM6Qi5zbGljZShWLmVuY29kaW5nTGVuZ3RoKX0pLEkoQi5SJiZC''@;'; put 'put ''LlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLFYuaXNQb2ludChCLlIpJiYodGhpcy5fUj1CLlIpLEIuUyBpbnN0YW5jZW9mIHomJih0aGlzLl9TPUIuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShCLlIpP0IuUjpCLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5Lmlz''@;'; put 'put ''QXJyYXkoQi5TKT9CLlM6Qi5TZW5jb2RlZH1rKGosIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxrKGosIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLGsoaiwi''@;'; put 'put ''UmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksayhqLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksai5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LGoucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIEsuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxNLmV4cG9ydHM9an0sMTAzNzpNPT57TS5leHBvcnRzPXtkb3VibGVz''@;'; put 'put ''OntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxIl0sWyI4MjgyMjYzMjEy''@;'; put 'put ''YzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5Mzgz''@;'; put 'put ''M2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDAiLCI0''@;'; put 'put ''ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEw''@;'; put 'put ''NGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIz''@;'; put 'put ''OWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0NGRhNjk2ZTcxNjcyNzkx''@;'; put 'put ''ZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUy''@;'; put 'put ''YzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZCIsImU1N2M2YjZjOTdk''@;'; put 'put ''Y2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1''@;'; put 'put ''MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOCJdLFsi''@;'; put 'put ''OGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5Yjgx''@;'; put 'put ''YmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNm''@;'; put 'put ''YWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3OTdlOTY2NGVmNWJmYjAx''@;'; put 'put ''OWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4''@;'; put 'put ''ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODkiXSxbIjYyNjBjZTdmNDYx''@;'; put 'put ''ODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1''@;'; put 'put ''NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNSIsIjdh''@;'; put 'put ''OTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5''@;'; put 'put ''MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2Rj''@;'; put 'put ''YWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0MTEzZjY3N2NmMGUxMGEy''@;'; put 'put ''NTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUz''@;'; put 'put ''YWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YiIsImZlYmZhYTM4ZjJi''@;'; put 'put ''YzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRk''@;'; put 'put ''OTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OCJdLFsi''@;'; put 'put ''YTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4''@;'; put 'put ''ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVj''@;'; put 'put ''NGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYzM2FkMGVmNGYxYzE2NjFh''@;'; put 'put ''NmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3''@;'; put 'put ''ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxIl0sWyJiNjQ1OWUwZWUz''@;'; put 'put ''NjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2''@;'; put 'put ''N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZCIsIjY0''@;'; put 'put ''OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRi''@;'; put 'put ''NWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5''@;'; put 'put ''OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5''@;'; put 'put ''YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3''@;'; put 'put ''NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIsImMyNTYyMTAwM2QzZjQy''@;'; put 'put ''YTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3''@;'; put 'put ''NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwNyJdLFsiODI3''@;'; put 'put ''ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIx''@;'; put 'put ''N2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRk''@;'; put 'put ''MjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1''@;'; put 'put ''OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIy''@;'; put 'put ''OTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJdLFsiZGExZDYxZDBjYTcy''@;'; put 'put ''MWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0''@;'; put 'put ''NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjIiwiY2Nj''@;'; put 'put ''OWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0''@;'; put 'put ''OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5''@;'; put 'put ''NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0''@;'; put 'put ''NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJj''@;'; put 'put ''ZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2IiwiZDNhODFjYTZlNzg1''@;'; put 'put ''YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1''@;'; put 'put ''MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NSJdLFsiZGQz''@;'; put 'put ''NjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4Zjdm''@;'; put 'put ''ZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1''@;'; put 'put ''ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNCIsImQ4''@;'; put 'put ''YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRk''@;'; put 'put ''YmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRm''@;'; put 'put ''OWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3M2MyZDk3NTI4OGJjN2Qx''@;'; put 'put ''ZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0''@;'; put 'put ''YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0IiwiNDIxMWFiMDY5NDYz''@;'; put 'put ''NTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1''@;'; put 'put ''MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjIl0sWyIy''@;'; put 'put ''ZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4''@;'; put 'put ''MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVl''@;'; put 'put ''ODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5''@;'; put 'put ''MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1''@;'; put 'put ''ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYiXSxbIjYwNWJkYjAxOTk4''@;'; put 'put ''MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0''@;'; put 'put ''OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmIiwiMWMz''@;'; put 'put ''ODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZi''@;'; put 'put ''ZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5''@;'; put 'put ''MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkz''@;'; put 'put ''MGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4''@;'; put 'put ''NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIsIjVlZDQzMGQ3OGMyOTZj''@;'; put 'put ''MzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1''@;'; put 'put ''Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NiJdLFsiMjYw''@;'; put 'put ''MGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJj''@;'; put 'put ''MDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNj''@;'; put 'put ''MTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgz''@;'; put 'put ''NzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3''@;'; put 'put ''Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxbIjVlZGQ1Y2MyM2M1MWU4''@;'; put 'put ''N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1''@;'; put 'put ''NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NSIsImY5OGEz''@;'; put 'put ''ZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3''@;'; put 'put ''NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2''@;'; put 'put ''ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdh''@;'; put 'put ''MmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgy''@;'; put 'put ''OGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIsIjEwMGI2MTBlYzRmZmI0''@;'; put 'put ''NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVj''@;'; put 'put ''MjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNCJdLFsiMTYy''@;'; put 'put ''NGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4''@;'; put 'put ''NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMw''@;'; put 'put ''NDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDcz''@;'; put 'put ''NzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2Qw''@;'; put 'put ''NmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0sWyIzNGMxZmQwNGQzMDFi''@;'; put 'put ''ZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNk''@;'; put 'put ''MDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OCIsImZhNzc5''@;'; put 'put ''NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJl''@;'; put 'put ''NmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZm''@;'; put 'put ''NiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgz''@;'; put 'put ''MDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5''@;'; put 'put ''NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwiZjNlMDMxOTE2OWViOWI4''@;'; put 'put ''NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3''@;'; put 'put ''ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiIl0sWyJjNDE5''@;'; put 'put ''MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1Yjky''@;'; put 'put ''YTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1''@;'; put 'put ''IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1''@;'; put 'put ''YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2Fi''@;'; put 'put ''ZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIxZTMzZjFhNzQ2YzljNTc3''@;'; put 'put ''ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNm''@;'; put 'put ''Y2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MSIsImI0YzRmZTk5''@;'; put 'put ''Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRh''@;'; put 'put ''MTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2MiXSxb''@;'; put 'put ''ImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5''@;'; put 'put ''OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4''@;'; put 'put ''Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3''@;'; put 'put ''ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVl''@;'; put 'put ''ZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0Il0sWyIzYzVkMmExYmEz''@;'; put 'put ''OWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVh''@;'; put 'put ''ZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTciLCI2''@;'; put 'put ''ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4''@;'; put 'put ''NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5''@;'; put 'put ''YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1ZDIxODFkYjhkOTgzZjdk''@;'; put 'put ''Y2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5''@;'; put 'put ''ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyIiwiNzU3MWQ3NGVlNWUw''@;'; put 'put ''ZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2Jm''@;'; put 'put ''N2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkIl0sWyJi''@;'; put 'put ''NGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMw''@;'; put 'put ''Y2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3''@;'; put 'put ''NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcwNTZjZjFkZTA0MmY5NDIw''@;'; put 'put ''YmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3''@;'; put 'put ''NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1Il0sWyJlYjk4NjYwZjRj''@;'; put 'put ''NGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2''@;'; put 'put ''OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGEiLCIx''@;'; put 'put ''YWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVl''@;'; put 'put ''MDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2Vk''@;'; put 'put ''MWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRiMGI1Mzg0ZGZiZjA1YmZh''@;'; put 'put ''OWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZm''@;'; put 'put ''ZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5MyIsImNhNWVmN2Q0YjIz''@;'; put 'put ''MWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBk''@;'; put 'put ''NjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjIl0sWyJl''@;'; put 'put ''MmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1''@;'; put 'put ''NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcx''@;'; put 'put ''MWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNh''@;'; put 'put ''NjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5''@;'; put 'put ''ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODciXSxbIjMwZTRlNjcwNDM1''@;'; put 'put ''Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEw''@;'; put 'put ''YjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YSIsIjdj''@;'; put 'put ''MTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVm''@;'; put 'put ''ODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3''@;'; put 'put ''NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2UyNzYzZDg4NWY5NThmYzY2''@;'; put 'put ''Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4''@;'; put 'put ''M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOSIsImNjNjE1N2VmMThj''@;'; put 'put ''OWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUw''@;'; put 'put ''ZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczIl0sWyIx''@;'; put 'put ''NzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0''@;'; put 'put ''N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2''@;'; put 'put ''MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVkYzkzMWE2MGFlODg5MzUz''@;'; put 'put ''Zjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1PLEs9UigzNzg1KSxJPVIoOTc0Niksaz1SKDQ1MDQpO3ouYXNzZXJ0PUksei50b0FycmF5PWsudG9BcnJheSx6Lnplcm8yPWsuemVybzIsei50''@;'; put 'put ''b0hleD1rLnRvSGV4LHouZW5jb2RlPWsuZW5jb2RlLHouZ2V0TkFGPWZ1bmN0aW9uKEUsaixWKXt2YXIgQj1uZXcgQXJyYXkoTWF0aC5tYXgoRS5iaXRMZW5ndGgoKSxWKSsxKTtCLmZpbGwoMCk7Zm9yKHZhciBZPTE8PGorMSxYPUUuY2xvbmUoKSxVPTA7VTxCLmxlbmd0aDtVKyspe3ZhciBx''@;'; put 'put ''LGVlPVguYW5kbG4oWS0xKTtYLmlzT2RkKCk/WC5pc3VibihxPWVlPihZPj4xKS0xPyhZPj4xKS1lZTplZSk6cT0wLEJbVV09cSxYLml1c2hybigxKX1yZXR1cm4gQn0sei5nZXRKU0Y9ZnVuY3Rpb24oRSxqKXt2YXIgVj1bW10sW11dO0U9RS5jbG9uZSgpLGo9ai5jbG9uZSgpO2Zvcih2YXIg''@;'; put 'put ''QixZPTAsWD0wO0UuY21wbigtWSk+MHx8ai5jbXBuKC1YKT4wOyl7dmFyIFUscSxlZT1FLmFuZGxuKDMpK1kmMyx0ZT1qLmFuZGxuKDMpK1gmMzszPT09ZWUmJihlZT0tMSksMz09PXRlJiYodGU9LTEpLFU9MSZlZT8zIT0oQj1FLmFuZGxuKDcpK1kmNykmJjUhPT1CfHwyIT09dGU/ZWU6LWVl''@;'; put 'put ''OjAsVlswXS5wdXNoKFUpLHE9MSZ0ZT8zIT0oQj1qLmFuZGxuKDcpK1gmNykmJjUhPT1CfHwyIT09ZWU/dGU6LXRlOjAsVlsxXS5wdXNoKHEpLDIqWT09PVUrMSYmKFk9MS1ZKSwyKlg9PT1xKzEmJihYPTEtWCksRS5pdXNocm4oMSksai5pdXNocm4oMSl9cmV0dXJuIFZ9LHouY2FjaGVkUHJv''@;'; put 'put ''cGVydHk9ZnVuY3Rpb24oRSxqLFYpe3ZhciBCPSJfIitqO0UucHJvdG90eXBlW2pdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbQl0/dGhpc1tCXTp0aGlzW0JdPVYuY2FsbCh0aGlzKX19LHoucGFyc2VCeXRlcz1mdW5jdGlvbihFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEU/''@;'; put 'put ''ei50b0FycmF5KEUsImhleCIpOkV9LHouaW50RnJvbUxFPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgSyhFLCJoZXgiLCJsZSIpfX0sMzc4NTpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8''@;'; put 'put ''IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykp''@;'; put 'put ''cmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig1NTY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7''@;'; put 'put ''cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVu''@;'; put 'put ''Z3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8''@;'; put 'put ''PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2lu''@;'; put 'put ''aXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3Mzcw''@;'; put 'put ''NDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndv''@;'; put 'put ''cmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNb''@;'; put 'put ''cF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0''@;'; put 'put ''aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7''@;'; put 'put ''di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNb''@;'; put 'put ''Sl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4''@;'; put 'put ''ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1sw''@;'; put 'put ''XSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRo''@;'; put 'put ''aXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVu''@;'; put 'put ''Z3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07''@;'; put 'put ''dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxx''@;'; put 'put ''PVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRl''@;'; put 'put ''Niw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0''@;'; put 'put ''aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8''@;'; put 'put ''djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsTGU9NjcxMDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStMZSkvNjcx''@;'; put 'put ''MDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8TGUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEw''@;'; put 'put ''KXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1u''@;'; put 'put ''ZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2''@;'; put 'put ''YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStMZStTfWZv''@;'; put 'put ''cih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''Zz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJO''@;'; put 'put ''dW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJu''@;'; put 'put ''IEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRl''@;'; put 'put ''TGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0kodjw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlz''@;'; put 'put ''LmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxu''@;'; put 'put ''KDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49''@;'; put 'put ''MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0x''@;'; put 'put ''MyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgt''@;'; put 'put ''MV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYo''@;'; put 'put ''Zys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMo''@;'; put 'put ''KS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUu''@;'; put 'put ''aXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90''@;'; put 'put ''b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3Io''@;'; put 'put ''dGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/''@;'; put 'put ''Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVn''@;'; put 'put ''YXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9''@;'; put 'put ''MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5p''@;'; put 'put ''eG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRo''@;'; put 'put ''aXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7''@;'; put 'put ''dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+''@;'; put 'put ''PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZl''@;'; put 'put ''KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3Jt''@;'; put 'put ''U2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYm''@;'; put 'put ''dzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5s''@;'; put 'put ''ZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEs''@;'; put 'put ''Qyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlz''@;'; put 'put ''dWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5s''@;'; put 'put ''ZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcm''@;'; put 'put ''Jko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5z''@;'; put 'put ''dWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZP''@;'; put 'put ''ZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLEplPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9''@;'; put 'put ''TWU+Pj4xMyxpdD0wfEpbN10sdXQ9ODE5MSZpdCxNdD1pdD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+''@;'; put 'put ''Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4seW49SW4+''@;'; put 'put ''Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1h''@;'; put 'put ''dGguaW11bChMZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoTGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1N''@;'; put 'put ''YXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13''@;'; put 'put ''K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChKZSxlbil8MCx3PU1hdGguaW11bChKZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8''@;'; put 'put ''MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUs''@;'; put 'put ''ZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVsKEplLGZ0KXwwLHc9dytNYXRoLmltdWwoSmUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8''@;'; put 'put ''MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLE50KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEw''@;'; put 'put ''ODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsdz13K01hdGguaW11bChKZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChX''@;'; put 'put ''ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxKdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxKdCl8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStN''@;'; put 'put ''YXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKEplLE50KXwwLHc9dytNYXRoLmltdWwoSmUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxKdCl8MDt2YXIgbm89KGZlKyh2''@;'; put 'put ''PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11''@;'; put 'put ''bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsSXQpfDAscD0ocD1wK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLHc9dytNYXRoLmltdWwoSmUsSnQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmlt''@;'; put 'put ''dWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDAp''@;'; put 'put ''KyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01hdGguaW11bChQZSxKdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsSnQpfDAsdj12K01hdGgu''@;'; put 'put ''aW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsdz13K01hdGguaW11bChKZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAs''@;'; put 'put ''cWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13''@;'; put 'put ''K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLHc9dytNYXRoLmltdWwoSmUseW4pfDAsdj12K01hdGguaW11bChq''@;'; put 'put ''ZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChGZSwk''@;'; put 'put ''dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUG4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditN''@;'; put 'put ''YXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxKdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQsSnQpfDAsdj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''UGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKEplLHNuKXwwLHc9dytNYXRoLmltdWwoSmUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXwwKStNYXRoLmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkp''@;'; put 'put ''PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChN''@;'; put 'put ''dCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLEp0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4p''@;'; put 'put ''fDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLHc9dytNYXRoLmltdWwoSmUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChq''@;'; put 'put ''ZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9''@;'; put 'put ''TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQs''@;'; put 'put ''SXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxKdCl8MCkrTWF0aC5pbXVsKE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsSnQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChKZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoSmUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmlt''@;'; put 'put ''dWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmltdWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxKdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLHc9dytNYXRoLmltdWwob24sSnQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0''@;'; put 'put ''LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8MDt2YXIg''@;'; put 'put ''R2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2''@;'; put 'put ''PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRoLmltdWwoVXQsSnQpKStNYXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sSnQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24s''@;'; put 'put ''WXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihw''@;'; put 'put ''PShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0''@;'; put 'put ''aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6''@;'; put 'put ''dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGgu''@;'; put 'put ''aW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11''@;'; put 'put ''bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4p''@;'; put 'put ''LHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFyIExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXww''@;'; put 'put ''KStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5p''@;'; put 'put ''bXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXww''@;'; put 'put ''LGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxy''@;'; put 'put ''cyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVb''@;'; put 'put ''MTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnBy''@;'; put 'put ''b3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdh''@;'; put 'put ''dGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAs''@;'; put 'put ''ZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYzJihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUm''@;'; put 'put ''PTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5lPXhlLHhlPWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXko''@;'; put 'put ''ZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsr''@;'; put 'put ''KXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAs''@;'; put 'put ''dyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9MDtPZTxK''@;'; put 'put ''O09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sSmU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPUplKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2Uh''@;'; put 'put ''PT1uZSYmKEplPWRlKkxlLWZlKkZlLEZlPWRlKkZlK2ZlKkxlLExlPUplKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJv''@;'; put 'put ''dG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9''@;'; put 'put ''ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LHNlLnBy''@;'; put 'put ''b3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFr''@;'; put 'put ''ZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMs''@;'; put 'put ''Zy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2Vd''@;'; put 'put ''KkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09lXStkZVtPZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5u''@;'; put 'put ''ZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlz''@;'; put 'put ''Lm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3''@;'; put 'put ''MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlv''@;'; put 'put ''bih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIg''@;'; put 'put ''Uz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlv''@;'; put 'put ''bihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8''@;'; put 'put ''dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tD''@;'; put 'put ''XT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5l''@;'; put 'put ''LndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5s''@;'; put 'put ''ZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3Rv''@;'; put 'put ''dHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNo''@;'; put 'put ''cm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5n''@;'; put 'put ''dGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBv''@;'; put 'put ''c2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnBy''@;'; put 'put ''b3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRo''@;'; put 'put ''aXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYo''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8''@;'; put 'put ''Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZw''@;'; put 'put ''O2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUu''@;'; put 'put ''cHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3Zh''@;'; put 'put ''ciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3Vi''@;'; put 'put ''bXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1p''@;'; put 'put ''bihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsTGUseGUpOzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZKLnN0cmlw''@;'; put 'put ''KCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMu''@;'; put 'put ''bmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYm''@;'; put 'put ''KHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53''@;'; put 'put ''b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxF''@;'; put 'put ''LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hy''@;'; put 'put ''bigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02''@;'; put 'put ''NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2''@;'; put 'put ''PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7''@;'; put 'put ''SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5p''@;'; put 'put ''c0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUp''@;'; put 'put ''O3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUt''@;'; put 'put ''LSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncs''@;'; put 'put ''YjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUo''@;'; put 'put ''MSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAu''@;'; put 'put ''aXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykp''@;'; put 'put ''OihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMo''@;'; put 'put ''KTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtT''@;'; put 'put ''LmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1Nd''@;'; put 'put ''fD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30s''@;'; put 'put ''RS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''PzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29y''@;'; put 'put ''ZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5j''@;'; put 'put ''bXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxF''@;'; put 'put ''LnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBl''@;'; put 'put ''LmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''SSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxF''@;'; put 'put ''LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRB''@;'; put 'put ''ZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVk''@;'; put 'put ''SVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcp''@;'; put 'put ''fSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNx''@;'; put 'put ''cnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQs''@;'; put 'put ''InJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYp''@;'; put 'put ''LHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5''@;'; put 'put ''MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9''@;'; put 'put ''ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4o''@;'; put 'put ''Zyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0''@;'; put 'put ''aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3Rt''@;'; put 'put ''cD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmlt''@;'; put 'put ''dWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3Ry''@;'; put 'put ''aXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24o''@;'; put 'put ''ZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihD''@;'; put 'put ''LndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlw''@;'; put 'put ''ZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhD''@;'; put 'put ''LzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9''@;'; put 'put ''MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2dd''@;'; put 'put ''O3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxD''@;'; put 'put ''fSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJ''@;'; put 'put ''KDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmlt''@;'; put 'put ''ZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90''@;'; put 'put ''b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxD''@;'; put 'put ''KTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2Zv''@;'; put 'put ''cmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJp''@;'; put 'put ''ZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyks''@;'; put 'put ''dGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8o''@;'; put 'put ''KSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtJKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9S''@;'; put 'put ''ZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBPZT1MZSxq''@;'; put 'put ''ZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtJKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3Rv''@;'; put 'put ''dHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0''@;'; put 'put ''dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3Zh''@;'; put 'put ''ciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSww''@;'; put 'put ''IT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9''@;'; put 'put ''PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lm''@;'; put 'put ''KGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMu''@;'; put 'put ''c2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+''@;'; put 'put ''PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19''@;'; put 'put ''KE09Ui5ubWQoTSksdGhpcyl9LDgwOTE6TT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBPKFIseil7aWYobnVsbD09Uil0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBmaXJzdCBhcmd1bWVudCB0byBvYmplY3QiKTtmb3IodmFyIEs9T2JqZWN0KFIpLEk9MTtJPGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg7SSsrKXt2YXIgaz1hcmd1bWVudHNbSV07aWYobnVsbCE9aylmb3IodmFyIEU9T2JqZWN0LmtleXMoT2JqZWN0KGspKSxqPTAsVj1FLmxlbmd0aDtqPFY7aisrKXt2YXIgQj1FW2pdLFk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihrLEIpO3ZvaWQgMCE9PVkmJlku''@;'; put 'put ''ZW51bWVyYWJsZSYmKEtbQl09a1tCXSl9fXJldHVybiBLfU0uZXhwb3J0cz17YXNzaWduOk8scG9seWZpbGw6ZnVuY3Rpb24oKXtPYmplY3QuYXNzaWdufHxPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LCJhc3NpZ24iLHtlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMCx2YWx1ZTpPfSl9fX0sNzE4NzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig1MTA4KSxJPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsaz1JJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5hcHBseT9JLmFwcGx5OmZ1bmN0aW9uKGhlLHVlLGNlKXtyZXR1''@;'; put 'put ''cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoaGUsdWUsY2UpfTt6PUkmJiJmdW5jdGlvbiI9PXR5cGVvZiBJLm93bktleXM/SS5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oaGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyho''@;'; put 'put ''ZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaGUpKX06ZnVuY3Rpb24oaGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhoZSl9O3ZhciBFPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oaGUpe3JldHVybiBoZSE9aGV9O2Z1bmN0aW9uIGooKXtqLmluaXQu''@;'; put 'put ''Y2FsbCh0aGlzKX1NLmV4cG9ydHM9aixNLmV4cG9ydHMub25jZT1mdW5jdGlvbihoZSx1ZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoSCl7aGUucmVtb3ZlTGlzdGVuZXIodWUsRCksRyhIKX1mdW5jdGlvbiBEKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGhl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyJiZoZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGIpLGNlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9dmFyIEg7c2UoaGUsdWUsRCx7b25jZTohMH0pLCJlcnJvciIhPT11ZSYmImZ1bmN0aW9uIj09dHlwZW9mKEg9aGUpLm9uJiZzZShILCJlcnJvciIsYix7b25j''@;'; put 'put ''ZTohMH0pfSl9LGouRXZlbnRFbWl0dGVyPWosai5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsai5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsai5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIFY9MTA7ZnVuY3Rpb24gQihoZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGhlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBoZSl9ZnVuY3Rpb24gWShoZSl7cmV0dXJuIHZvaWQgMD09PWhlLl9tYXhMaXN0ZW5lcnM/ai5kZWZhdWx0TWF4TGlzdGVuZXJz''@;'; put 'put ''OmhlLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gWChoZSx1ZSxjZSxHKXt2YXIgYixELEg7aWYoQihjZSksdm9pZCAwPT09KEQ9aGUuX2V2ZW50cyk/KEQ9aGUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLGhlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09RC5uZXdMaXN0ZW5lciYmKGhl''@;'; put 'put ''LmVtaXQoIm5ld0xpc3RlbmVyIix1ZSxjZS5saXN0ZW5lcj9jZS5saXN0ZW5lcjpjZSksRD1oZS5fZXZlbnRzKSxIPURbdWVdKSx2b2lkIDA9PT1IKUg9RFt1ZV09Y2UsKytoZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgSD9IPURbdWVdPUc/W2NlLEhdOltILGNl''@;'; put 'put ''XTpHP0gudW5zaGlmdChjZSk6SC5wdXNoKGNlKSwoYj1ZKGhlKSk+MCYmSC5sZW5ndGg+YiYmIUgud2FybmVkKXtILndhcm5lZD0hMDt2YXIgZz1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitILmxlbmd0aCsiICIrU3RyaW5nKHVlKSsi''@;'; put 'put ''IGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtnLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsZy5lbWl0dGVyPWhlLGcudHlwZT11ZSxnLmNvdW50PUgubGVuZ3RoLEsmJksud2FybiYmSy53YXJuKGcp''@;'; put 'put ''fXJldHVybiBoZX1mdW5jdGlvbiBVKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRo''@;'; put 'put ''aXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBxKGhlLHVlLGNlKXt2YXIgRz17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6aGUsdHlwZTp1ZSxsaXN0ZW5lcjpjZX0sYj1VLmJpbmQoRyk7cmV0dXJuIGIubGlzdGVuZXI9Y2UsRy53cmFwRm49''@;'; put 'put ''YixifWZ1bmN0aW9uIGVlKGhlLHVlLGNlKXt2YXIgRz1oZS5fZXZlbnRzO2lmKHZvaWQgMD09PUcpcmV0dXJuW107dmFyIGI9R1t1ZV07cmV0dXJuIHZvaWQgMD09PWI/W106ImZ1bmN0aW9uIj09dHlwZW9mIGI/Y2U/W2IubGlzdGVuZXJ8fGJdOltiXTpjZT9mdW5jdGlvbihEKXtmb3IodmFy''@;'; put 'put ''IEg9bmV3IEFycmF5KEQubGVuZ3RoKSxOPTA7TjxILmxlbmd0aDsrK04pSFtOXT1EW05dLmxpc3RlbmVyfHxEW05dO3JldHVybiBIfShiKTpvZShiLGIubGVuZ3RoKX1mdW5jdGlvbiB0ZShoZSl7dmFyIHVlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT11ZSl7dmFyIGNlPXVlW2hlXTtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgY2UpcmV0dXJuIDE7aWYodm9pZCAwIT09Y2UpcmV0dXJuIGNlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBvZShoZSx1ZSl7Zm9yKHZhciBjZT1uZXcgQXJyYXkodWUpLEc9MDtHPHVlOysrRyljZVtHXT1oZVtHXTtyZXR1cm4gY2V9ZnVuY3Rpb24gc2UoaGUs''@;'; put 'put ''dWUsY2UsRyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGhlLm9uKUcub25jZT9oZS5vbmNlKHVlLGNlKTpoZS5vbih1ZSxjZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgaGUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11''@;'; put 'put ''c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgaGUpO2hlLmFkZEV2ZW50TGlzdGVuZXIodWUsZnVuY3Rpb24gYihEKXtHLm9uY2UmJmhlLnJlbW92ZUV2ZW50TGlzdGVuZXIodWUsYiksY2UoRCl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGosImRl''@;'; put 'put ''ZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBWfSxzZXQ6ZnVuY3Rpb24oaGUpe2lmKCJudW1iZXIiIT10eXBlb2YgaGV8fGhlPDB8fEUoaGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5l''@;'; put 'put ''cnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcraGUrIi4iKTtWPWhlfX0pLGouaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMp''@;'; put 'put ''Ll9ldmVudHN8fCh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LGoucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihoZSl7aWYoIm51bWJlciIh''@;'; put 'put ''PXR5cGVvZiBoZXx8aGU8MHx8RShoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytoZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9aGUsdGhp''@;'; put 'put ''c30sai5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFkodGhpcyl9LGoucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oaGUpe2Zvcih2YXIgdWU9W10sY2U9MTtjZTxhcmd1bWVudHMubGVuZ3RoO2NlKyspdWUucHVzaChhcmd1bWVudHNbY2VdKTt2YXIgRz0iZXJy''@;'; put 'put ''b3IiPT09aGUsYj10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09YilHPUcmJnZvaWQgMD09PWIuZXJyb3I7ZWxzZSBpZighRylyZXR1cm4hMTtpZihHKXt2YXIgRDtpZih1ZS5sZW5ndGg+MCYmKEQ9dWVbMF0pLEQgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBEO3ZhciBIPW5ldyBFcnJvcigiVW5o''@;'; put 'put ''YW5kbGVkIGVycm9yLiIrKEQ/IiAoIitELm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgSC5jb250ZXh0PUQsSH12YXIgTj1iW2hlXTtpZih2b2lkIDA9PT1OKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBOKWsoTix0aGlzLHVlKTtlbHNle3ZhciBnPU4ubGVuZ3RoLEM9b2UoTixnKTtm''@;'; put 'put ''b3IoY2U9MDtjZTxnOysrY2UpayhDW2NlXSx0aGlzLHVlKX1yZXR1cm4hMH0sai5wcm90b3R5cGUub249ai5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oaGUsdWUpe3JldHVybiBYKHRoaXMsaGUsdWUsITEpfSxqLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oaGUs''@;'; put 'put ''dWUpe3JldHVybiBYKHRoaXMsaGUsdWUsITApfSxqLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gQih1ZSksdGhpcy5vbihoZSxxKHRoaXMsaGUsdWUpKSx0aGlzfSxqLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4gQih1''@;'; put 'put ''ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoaGUscSh0aGlzLGhlLHVlKSksdGhpc30sai5wcm90b3R5cGUub2ZmPWoucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGhlLHVlKXt2YXIgY2UsRyxiLEQsSDtpZihCKHVlKSx2b2lkIDA9PT0oRz10aGlzLl9ldmVudHMpKXJldHVybiB0''@;'; put 'put ''aGlzO2lmKHZvaWQgMD09PShjZT1HW2hlXSkpcmV0dXJuIHRoaXM7aWYoY2U9PT11ZXx8Y2UubGlzdGVuZXI9PT11ZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgR1toZV0sRy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0''@;'; put 'put ''KCJyZW1vdmVMaXN0ZW5lciIsaGUsY2UubGlzdGVuZXJ8fHVlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgY2Upe2ZvcihiPS0xLEQ9Y2UubGVuZ3RoLTE7RD49MDtELS0paWYoY2VbRF09PT11ZXx8Y2VbRF0ubGlzdGVuZXI9PT11ZSl7SD1jZVtEXS5saXN0ZW5lcixiPUQ7YnJlYWt9''@;'; put 'put ''aWYoYjwwKXJldHVybiB0aGlzOzA9PT1iP2NlLnNoaWZ0KCk6ZnVuY3Rpb24oTixnKXtmb3IoO2crMTxOLmxlbmd0aDtnKyspTltnXT1OW2crMV07Ti5wb3AoKX0oY2UsYiksMT09PWNlLmxlbmd0aCYmKEdbaGVdPWNlWzBdKSx2b2lkIDAhPT1HLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQo''@;'; put 'put ''InJlbW92ZUxpc3RlbmVyIixoZSxIfHx1ZSl9cmV0dXJuIHRoaXN9LGoucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihoZSl7dmFyIHVlLGNlLEc7aWYodm9pZCAwPT09KGNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09Y2UucmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1jZVtoZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0''@;'; put 'put ''ZSBjZVtoZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBiLEQ9T2JqZWN0LmtleXMoY2UpO2ZvcihHPTA7RzxELmxlbmd0aDsrK0cpInJlbW92ZUxpc3RlbmVyIiE9PShiPURbR10pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhiKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxM''@;'; put 'put ''aXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZih1ZT1jZVtoZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoaGUsdWUpO2Vsc2UgaWYodm9pZCAwIT09dWUp''@;'; put 'put ''Zm9yKEc9dWUubGVuZ3RoLTE7Rz49MDtHLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihoZSx1ZVtHXSk7cmV0dXJuIHRoaXN9LGoucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihoZSl7cmV0dXJuIGVlKHRoaXMsaGUsITApfSxqLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oaGUp''@;'; put 'put ''e3JldHVybiBlZSh0aGlzLGhlLCExKX0sai5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKGhlLHVlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgaGUubGlzdGVuZXJDb3VudD9oZS5saXN0ZW5lckNvdW50KHVlKTp0ZS5jYWxsKGhlLHVlKX0sai5wcm90b3R5cGUubGlzdGVuZXJDb3VudD10ZSxq''@;'; put 'put ''LnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/eih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODooTSxPLFIpPT57dmFyIHo9Uig5NTA5KS5CdWZmZXIsSz1SKDIzMTgpO00uZXhwb3J0cz1mdW5jdGlvbihJLGssRSxqKXtpZih6LmlzQnVm''@;'; put 'put ''ZmVyKEkpfHwoST16LmZyb20oSSwiYmluYXJ5IikpLGsmJih6LmlzQnVmZmVyKGspfHwoaz16LmZyb20oaywiYmluYXJ5IikpLDghPT1rLmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIFY9RS84''@;'; put 'put ''LEI9ei5hbGxvYyhWKSxZPXouYWxsb2Moanx8MCksWD16LmFsbG9jKDApO1Y+MHx8aj4wOyl7dmFyIFU9bmV3IEs7VS51cGRhdGUoWCksVS51cGRhdGUoSSksayYmVS51cGRhdGUoayksWD1VLmRpZ2VzdCgpO3ZhciBxPTA7aWYoVj4wKXt2YXIgZWU9Qi5sZW5ndGgtVjtxPU1hdGgubWluKFYs''@;'; put 'put ''WC5sZW5ndGgpLFguY29weShCLGVlLDAscSksVi09cX1pZihxPFgubGVuZ3RoJiZqPjApe3ZhciB0ZT1ZLmxlbmd0aC1qLG9lPU1hdGgubWluKGosWC5sZW5ndGgtcSk7WC5jb3B5KFksdGUscSxxK29lKSxqLT1vZX19cmV0dXJuIFguZmlsbCgwKSx7a2V5OkIsaXY6WX19fSw0MDI5OihNLE8s''@;'; put 'put ''Uik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1MzIwKSxLPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O00uZXhwb3J0cz1mdW5jdGlvbihrLEUsail7aWYoIXooRSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBi''@;'; put 'put ''ZSBhIGZ1bmN0aW9uIik7dmFyIFY7YXJndW1lbnRzLmxlbmd0aD49MyYmKFY9aiksIltvYmplY3QgQXJyYXldIj09PUsuY2FsbChrKT9mdW5jdGlvbihCLFksWCl7Zm9yKHZhciBVPTAscT1CLmxlbmd0aDtVPHE7VSsrKUkuY2FsbChCLFUpJiYobnVsbD09WD9ZKEJbVV0sVSxCKTpZLmNhbGwo''@;'; put 'put ''WCxCW1VdLFUsQikpfShrLEUsVik6InN0cmluZyI9PXR5cGVvZiBrP2Z1bmN0aW9uKEIsWSxYKXtmb3IodmFyIFU9MCxxPUIubGVuZ3RoO1U8cTtVKyspbnVsbD09WD9ZKEIuY2hhckF0KFUpLFUsQik6WS5jYWxsKFgsQi5jaGFyQXQoVSksVSxCKX0oayxFLFYpOmZ1bmN0aW9uKEIsWSxYKXtm''@;'; put 'put ''b3IodmFyIFUgaW4gQilJLmNhbGwoQixVKSYmKG51bGw9PVg/WShCW1VdLFUsQik6WS5jYWxsKFgsQltVXSxVLEIpKX0oayxFLFYpfX0sNjIzMDpNPT57TS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmLkZvcm1EYXRhOndpbmRvdy5Gb3JtRGF0YX0sNTMwMjooTSxPLFIpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2NvbnN0IEk9Uig3Nyksaz1SKDI1MjApLEU9UigxMzgxKS5ta2RpcnNTeW5jLGo9UigzMTgpLnV0aW1lc01pbGxpc1N5bmMsVj1SKDI3MzMpO2Z1bmN0aW9uIEIocSxlZSx0ZSxvZSl7Y29uc3Qgc2U9KG9lLmRlcmVmZXJlbmNl''@;'; put 'put ''P0kuc3RhdFN5bmM6SS5sc3RhdFN5bmMpKGVlKTtpZihzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBoZT1zZSxjZT1lZSxHPXRlLGI9b2UscT9VKGNlLEcsYik6KEQ9aGUubW9kZSxIPWNlLGc9YixJLm1rZGlyU3luYyhOPUcpLFUoSCxOLGcpLFgoTixEKSk7dmFyIGhlLGNlLEcsYixELEgsTixn''@;'; put 'put ''O2lmKHNlLmlzRmlsZSgpfHxzZS5pc0NoYXJhY3RlckRldmljZSgpfHxzZS5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlLGNlLEcsYil7cmV0dXJuIHVlP2Z1bmN0aW9uKEQsSCxOLGcpe2lmKGcub3ZlcndyaXRlKXJldHVybiBJLnVubGlua1N5bmMoTiksWShELEgsTixn''@;'; put 'put ''KTtpZihnLmVycm9yT25FeGlzdCl0aHJvdyBuZXcgRXJyb3IoYCcke059JyBhbHJlYWR5IGV4aXN0c2ApfShoZSxjZSxHLGIpOlkoaGUsY2UsRyxiKX0oc2UscSxlZSx0ZSxvZSk7aWYoc2UuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2UsRyl7bGV0IGI9SS5yZWFk''@;'; put 'put ''bGlua1N5bmModWUpO2lmKEcuZGVyZWZlcmVuY2UmJihiPWsucmVzb2x2ZSh6LmN3ZCgpLGIpKSxoZSl7bGV0IEQ7dHJ5e0Q9SS5yZWFkbGlua1N5bmMoY2UpfWNhdGNoKEgpe2lmKCJFSU5WQUwiPT09SC5jb2RlfHwiVU5LTk9XTiI9PT1ILmNvZGUpcmV0dXJuIEkuc3ltbGlua1N5bmMoYixj''@;'; put 'put ''ZSk7dGhyb3cgSH1pZihHLmRlcmVmZXJlbmNlJiYoRD1rLnJlc29sdmUoei5jd2QoKSxEKSksVi5pc1NyY1N1YmRpcihiLEQpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Yn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7RH0nLmApO2lmKEkuc3RhdFN5bmMoY2Up''@;'; put 'put ''LmlzRGlyZWN0b3J5KCkmJlYuaXNTcmNTdWJkaXIoRCxiKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7RH0nIHdpdGggJyR7Yn0nLmApO3JldHVybiBmdW5jdGlvbihILE4pe3JldHVybiBJLnVubGlua1N5bmMoTiksSS5zeW1saW5rU3luYyhILE4pfShiLGNlKX1yZXR1''@;'; put 'put ''cm4gSS5zeW1saW5rU3luYyhiLGNlKX0ocSxlZSx0ZSxvZSk7dGhyb3cgc2UuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7ZWV9YCk6c2UuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtlZX1gKTpuZXcgRXJy''@;'; put 'put ''b3IoYFVua25vd24gZmlsZTogJHtlZX1gKX1mdW5jdGlvbiBZKHEsZWUsdGUsb2Upe3JldHVybiBJLmNvcHlGaWxlU3luYyhlZSx0ZSksb2UucHJlc2VydmVUaW1lc3RhbXBzJiYoaGU9ZWUsdWU9dGUsMD09KDEyOCYoc2U9cS5tb2RlKSkmJlgodWUsMTI4fHNlKSxmdW5jdGlvbihjZSxHKXtj''@;'; put 'put ''b25zdCBiPUkuc3RhdFN5bmMoY2UpO2ooRyxiLmF0aW1lLGIubXRpbWUpfShoZSx1ZSkpLFgodGUscS5tb2RlKTt2YXIgc2UsaGUsdWV9ZnVuY3Rpb24gWChxLGVlKXtyZXR1cm4gSS5jaG1vZFN5bmMocSxlZSl9ZnVuY3Rpb24gVShxLGVlLHRlKXtJLnJlYWRkaXJTeW5jKHEpLmZvckVhY2go''@;'; put 'put ''b2U9PmZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjb25zdCBHPWsuam9pbihoZSxzZSksYj1rLmpvaW4odWUsc2UpLHtkZXN0U3RhdDpEfT1WLmNoZWNrUGF0aHNTeW5jKEcsYiwiY29weSIsY2UpO3JldHVybiBmdW5jdGlvbihILE4sZyxDKXtpZighQy5maWx0ZXJ8fEMuZmlsdGVyKE4sZykpcmV0''@;'; put 'put ''dXJuIEIoSCxOLGcsQyl9KEQsRyxiLGNlKX0ob2UscSxlZSx0ZSkpfU0uZXhwb3J0cz1mdW5jdGlvbihxLGVlLHRlKXsiZnVuY3Rpb24iPT10eXBlb2YgdGUmJih0ZT17ZmlsdGVyOnRlfSksKHRlPXRlfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImluIHRlKXx8ISF0ZS5jbG9iYmVyLHRlLm92''@;'; put 'put ''ZXJ3cml0ZT0ib3ZlcndyaXRlImluIHRlPyEhdGUub3ZlcndyaXRlOnRlLmNsb2JiZXIsdGUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT16LmFyY2gmJksud2FybigiZnMtZXh0cmE6IFVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5v''@;'; put 'put ''dCByZWNvbW1lbmRlZDtcblxuICAgIHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIpO2NvbnN0e3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9PVYuY2hlY2tQYXRoc1N5bmMocSxlZSwiY29weSIsdGUpO3JldHVybiBWLmNoZWNrUGFy''@;'; put 'put ''ZW50UGF0aHNTeW5jKHEsb2UsZWUsImNvcHkiKSxmdW5jdGlvbihoZSx1ZSxjZSxHKXtpZihHLmZpbHRlciYmIUcuZmlsdGVyKHVlLGNlKSlyZXR1cm47Y29uc3QgYj1rLmRpcm5hbWUoY2UpO3JldHVybiBJLmV4aXN0c1N5bmMoYil8fEUoYiksQihoZSx1ZSxjZSxHKX0oc2UscSxlZSx0ZSl9''@;'; put 'put ''fSw4NjkwOihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXtjb3B5U3luYzpSKDUzMDIpfX0sNzE4OTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO2NvbnN0IEk9Uig3Nyksaz1SKDI1MjApLEU9UigxMzgxKS5ta2RpcnMsaj1SKDkyNTcpLnBh''@;'; put 'put ''dGhFeGlzdHMsVj1SKDMxOCkudXRpbWVzTWlsbGlzLEI9UigyNzMzKTtmdW5jdGlvbiBZKHVlLGNlLEcsYixEKXtjb25zdCBIPWsuZGlybmFtZShHKTtqKEgsKE4sZyk9Pk4/RChOKTpnP1UodWUsY2UsRyxiLEQpOnZvaWQgRShILEM9PkM/RChDKTpVKHVlLGNlLEcsYixEKSkpfWZ1bmN0aW9u''@;'; put 'put ''IFgodWUsY2UsRyxiLEQsSCl7UHJvbWlzZS5yZXNvbHZlKEQuZmlsdGVyKEcsYikpLnRoZW4oTj0+Tj91ZShjZSxHLGIsRCxIKTpIKCksTj0+SChOKSl9ZnVuY3Rpb24gVSh1ZSxjZSxHLGIsRCl7KGIuZGVyZWZlcmVuY2U/SS5zdGF0OkkubHN0YXQpKGNlLChILE4pPT57cmV0dXJuIEg/RChI''@;'; put 'put ''KTpOLmlzRGlyZWN0b3J5KCk/KGc9TixTPWNlLHY9RyxwPWIsdz1ELHVlP29lKFMsdixwLHcpOihKPWcubW9kZSxuZT1TLGZlPXAseGU9dyx2b2lkIEkubWtkaXIoZGU9dixMZT0+e2lmKExlKXJldHVybiB4ZShMZSk7b2UobmUsZGUsZmUsRmU9PkZlP3hlKEZlKTp0ZShkZSxKLHhlKSl9KSkp''@;'; put 'put ''Ok4uaXNGaWxlKCl8fE4uaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Ti5pc0Jsb2NrRGV2aWNlKCk/ZnVuY3Rpb24oZyxDLFMsdixwLHcpe3JldHVybiBDP2Z1bmN0aW9uKEosbmUsZGUsZmUseGUpe2lmKCFmZS5vdmVyd3JpdGUpcmV0dXJuIGZlLmVycm9yT25FeGlzdD94ZShuZXcgRXJyb3IoYCck''@;'; put 'put ''e2RlfScgYWxyZWFkeSBleGlzdHNgKSk6eGUoKTtJLnVubGluayhkZSxMZT0+TGU/eGUoTGUpOnEoSixuZSxkZSxmZSx4ZSkpfShnLFMsdixwLHcpOnEoZyxTLHYscCx3KX0oTix1ZSxjZSxHLGIsRCk6Ti5pc1N5bWJvbGljTGluaygpP2Z1bmN0aW9uIGhlKHVlLGNlLEcsYixEKXtJLnJlYWRs''@;'; put 'put ''aW5rKGNlLChILE4pPT5IP0QoSCk6KGIuZGVyZWZlcmVuY2UmJihOPWsucmVzb2x2ZSh6LmN3ZCgpLE4pKSx1ZT92b2lkIEkucmVhZGxpbmsoRywoZyxDKT0+Zz8iRUlOVkFMIj09PWcuY29kZXx8IlVOS05PV04iPT09Zy5jb2RlP0kuc3ltbGluayhOLEcsRCk6RChnKTooYi5kZXJlZmVyZW5j''@;'; put 'put ''ZSYmKEM9ay5yZXNvbHZlKHouY3dkKCksQykpLEIuaXNTcmNTdWJkaXIoTixDKT9EKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Tn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Q30nLmApKTp1ZS5pc0RpcmVjdG9yeSgpJiZCLmlzU3JjU3ViZGlyKEMsTik/RChuZXcgRXJy''@;'; put 'put ''b3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7Q30nIHdpdGggJyR7Tn0nLmApKTpmdW5jdGlvbihTLHYscCl7SS51bmxpbmsodix3PT53P3Aodyk6SS5zeW1saW5rKFMsdixwKSl9KE4sRyxEKSkpOkkuc3ltbGluayhOLEcsRCkpKX0odWUsY2UsRyxiLEQpOk4uaXNTb2NrZXQoKT9EKG5ldyBFcnJv''@;'; put 'put ''cihgQ2Fubm90IGNvcHkgYSBzb2NrZXQgZmlsZTogJHtjZX1gKSk6Ti5pc0ZJRk8oKT9EKG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7Y2V9YCkpOkQobmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7Y2V9YCkpO3ZhciBnLFMsdixwLHcsSixuZSxkZSxmZSx4ZX0pfWZ1''@;'; put 'put ''bmN0aW9uIHEodWUsY2UsRyxiLEQpe0kuY29weUZpbGUoY2UsRyxIPT57cmV0dXJuIEg/RChIKTpiLnByZXNlcnZlVGltZXN0YW1wcz8oZz1jZSxDPUcsUz1ELDA9PSgxMjgmKE49dWUubW9kZSkpP3RlKEMsMTI4fE4sdj0+dj9TKHYpOmVlKE4sZyxDLFMpKTplZShOLGcsQyxTKSk6dGUoRyx1''@;'; put 'put ''ZS5tb2RlLEQpO3ZhciBOLGcsQyxTfSl9ZnVuY3Rpb24gZWUodWUsY2UsRyxiKXt2YXIgSCxOO0g9RyxOPUQ9PkQ/YihEKTp0ZShHLHVlLGIpLEkuc3RhdChjZSwoZyxDKT0+Zz9OKGcpOlYoSCxDLmF0aW1lLEMubXRpbWUsTikpfWZ1bmN0aW9uIHRlKHVlLGNlLEcpe3JldHVybiBJLmNobW9k''@;'; put 'put ''KHVlLGNlLEcpfWZ1bmN0aW9uIG9lKHVlLGNlLEcsYil7SS5yZWFkZGlyKHVlLChELEgpPT5EP2IoRCk6c2UoSCx1ZSxjZSxHLGIpKX1mdW5jdGlvbiBzZSh1ZSxjZSxHLGIsRCl7Y29uc3QgSD11ZS5wb3AoKTtyZXR1cm4gSD9mdW5jdGlvbihOLGcsQyxTLHYscCl7Y29uc3Qgdz1rLmpvaW4o''@;'; put 'put ''QyxnKSxKPWsuam9pbihTLGcpO0IuY2hlY2tQYXRocyh3LEosImNvcHkiLHYsKG5lLGRlKT0+e2lmKG5lKXJldHVybiBwKG5lKTtjb25zdHtkZXN0U3RhdDpmZX09ZGU7dmFyIHhlLExlLEZlLE9lLGplO3hlPWZlLExlPXcsRmU9SixqZT14ZT0+eGU/cCh4ZSk6c2UoTixDLFMsdixwKSwoT2U9''@;'; put 'put ''dikuZmlsdGVyP1goVSx4ZSxMZSxGZSxPZSxqZSk6VSh4ZSxMZSxGZSxPZSxqZSl9KX0odWUsSCxjZSxHLGIsRCk6RCgpfU0uZXhwb3J0cz1mdW5jdGlvbih1ZSxjZSxHLGIpeyJmdW5jdGlvbiIhPXR5cGVvZiBHfHxiPyJmdW5jdGlvbiI9PXR5cGVvZiBHJiYoRz17ZmlsdGVyOkd9KTooYj1H''@;'; put 'put ''LEc9e30pLGI9Ynx8ZnVuY3Rpb24oKXt9LChHPUd8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gRyl8fCEhRy5jbG9iYmVyLEcub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gRz8hIUcub3ZlcndyaXRlOkcuY2xvYmJlcixHLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09ei5hcmNoJiZL''@;'; put 'put ''Lndhcm4oImZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9wdGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiKSxCLmNoZWNr''@;'; put 'put ''UGF0aHModWUsY2UsImNvcHkiLEcsKEQsSCk9PntpZihEKXJldHVybiBiKEQpO2NvbnN0e3NyY1N0YXQ6TixkZXN0U3RhdDpnfT1IO0IuY2hlY2tQYXJlbnRQYXRocyh1ZSxOLGNlLCJjb3B5IixDPT5DP2IoQyk6Ry5maWx0ZXI/WChZLGcsdWUsY2UsRyxiKTpZKGcsdWUsY2UsRyxiKSl9KX19''@;'; put 'put ''LDY0NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrO00uZXhwb3J0cz17Y29weTp6KFIoNzE4OSkpfX0sNTU5MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSxLPVIoNzc0OSksST1SKDI1MjApLGs9''@;'; put 'put ''UigxMzgxKSxFPVIoNDU0Miksaj16KGZ1bmN0aW9uKCl7dmFyIEI9YWUoZnVuY3Rpb24qKFkpe2xldCBYO3RyeXtYPXlpZWxkIEsucmVhZGRpcihZKX1jYXRjaHtyZXR1cm4gay5ta2RpcnMoWSl9cmV0dXJuIFByb21pc2UuYWxsKFgubWFwKFU9PkUucmVtb3ZlKEkuam9pbihZLFUpKSkpfSk7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKFkpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIFYoQil7bGV0IFk7dHJ5e1k9Sy5yZWFkZGlyU3luYyhCKX1jYXRjaHtyZXR1cm4gay5ta2RpcnNTeW5jKEIpfVkuZm9yRWFjaChYPT57WD1JLmpvaW4oQixYKSxFLnJlbW92ZVN5''@;'; put 'put ''bmMoWCl9KX1NLmV4cG9ydHM9e2VtcHR5RGlyU3luYzpWLGVtcHR5ZGlyU3luYzpWLGVtcHR5RGlyOmosZW1wdHlkaXI6an19LDY1MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9UigyNTIwKSxJPVIoNzcpLGs9UigxMzgxKTtNLmV4cG9y''@;'; put 'put ''dHM9e2NyZWF0ZUZpbGU6eihmdW5jdGlvbihFLGope2Z1bmN0aW9uIFYoKXtJLndyaXRlRmlsZShFLCIiLEI9PntpZihCKXJldHVybiBqKEIpO2ooKX0pfUkuc3RhdChFLChCLFkpPT57aWYoIUImJlkuaXNGaWxlKCkpcmV0dXJuIGooKTtjb25zdCBYPUsuZGlybmFtZShFKTtJLnN0YXQoWCwo''@;'; put 'put ''VSxxKT0+e2lmKFUpcmV0dXJuIkVOT0VOVCI9PT1VLmNvZGU/ay5ta2RpcnMoWCxlZT0+e2lmKGVlKXJldHVybiBqKGVlKTtWKCl9KTpqKFUpO3EuaXNEaXJlY3RvcnkoKT9WKCk6SS5yZWFkZGlyKFgsZWU9PntpZihlZSlyZXR1cm4gaihlZSl9KX0pfSl9KSxjcmVhdGVGaWxlU3luYzpmdW5j''@;'; put 'put ''dGlvbihFKXtsZXQgajt0cnl7aj1JLnN0YXRTeW5jKEUpfWNhdGNoe31pZihqJiZqLmlzRmlsZSgpKXJldHVybjtjb25zdCBWPUsuZGlybmFtZShFKTt0cnl7SS5zdGF0U3luYyhWKS5pc0RpcmVjdG9yeSgpfHxJLnJlYWRkaXJTeW5jKFYpfWNhdGNoKEIpe2lmKCFCfHwiRU5PRU5UIiE9PUIu''@;'; put 'put ''Y29kZSl0aHJvdyBCO2subWtkaXJzU3luYyhWKX1JLndyaXRlRmlsZVN5bmMoRSwiIil9fX0sMTcyMDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig2NTMwKSxLPVIoNDE0NyksST1SKDM2MzUpO00uZXhwb3J0cz17Y3JlYXRlRmlsZTp6LmNyZWF0ZUZpbGUsY3JlYXRlRmlsZVN5''@;'; put 'put ''bmM6ei5jcmVhdGVGaWxlU3luYyxlbnN1cmVGaWxlOnouY3JlYXRlRmlsZSxlbnN1cmVGaWxlU3luYzp6LmNyZWF0ZUZpbGVTeW5jLGNyZWF0ZUxpbms6Sy5jcmVhdGVMaW5rLGNyZWF0ZUxpbmtTeW5jOksuY3JlYXRlTGlua1N5bmMsZW5zdXJlTGluazpLLmNyZWF0ZUxpbmssZW5zdXJlTGlu''@;'; put 'put ''a1N5bmM6Sy5jcmVhdGVMaW5rU3luYyxjcmVhdGVTeW1saW5rOkkuY3JlYXRlU3ltbGluayxjcmVhdGVTeW1saW5rU3luYzpJLmNyZWF0ZVN5bWxpbmtTeW5jLGVuc3VyZVN5bWxpbms6SS5jcmVhdGVTeW1saW5rLGVuc3VyZVN5bWxpbmtTeW5jOkkuY3JlYXRlU3ltbGlua1N5bmN9fSw0MTQ3''@;'; put 'put ''OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoMjUyMCksST1SKDc3KSxrPVIoMTM4MSksRT1SKDkyNTcpLnBhdGhFeGlzdHMse2FyZUlkZW50aWNhbDpqfT1SKDI3MzMpO00uZXhwb3J0cz17Y3JlYXRlTGluazp6KGZ1bmN0aW9uKFYsQixZ''@;'; put 'put ''KXtmdW5jdGlvbiBYKFUscSl7SS5saW5rKFUscSxlZT0+e2lmKGVlKXJldHVybiBZKGVlKTtZKG51bGwpfSl9SS5sc3RhdChCLChVLHEpPT57SS5sc3RhdChWLChlZSx0ZSk9PntpZihlZSlyZXR1cm4gZWUubWVzc2FnZT1lZS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIp''@;'; put 'put ''LFkoZWUpO2lmKHEmJmoodGUscSkpcmV0dXJuIFkobnVsbCk7Y29uc3Qgb2U9Sy5kaXJuYW1lKEIpO0Uob2UsKHNlLGhlKT0+c2U/WShzZSk6aGU/WChWLEIpOnZvaWQgay5ta2RpcnMob2UsdWU9PntpZih1ZSlyZXR1cm4gWSh1ZSk7WChWLEIpfSkpfSl9KX0pLGNyZWF0ZUxpbmtTeW5jOmZ1''@;'; put 'put ''bmN0aW9uKFYsQil7bGV0IFk7dHJ5e1k9SS5sc3RhdFN5bmMoQil9Y2F0Y2h7fXRyeXtjb25zdCBVPUkubHN0YXRTeW5jKFYpO2lmKFkmJmooVSxZKSlyZXR1cm59Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxVfWNvbnN0''@;'; put 'put ''IFg9Sy5kaXJuYW1lKEIpO3JldHVybiBJLmV4aXN0c1N5bmMoWCl8fGsubWtkaXJzU3luYyhYKSxJLmxpbmtTeW5jKFYsQil9fX0sNjA3MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9UigyNTIwKSxLPVIoNzcpLEk9Uig5MjU3KS5wYXRoRXhpc3RzO00uZXhwb3J0cz17c3ltbGlu''@;'; put 'put ''a1BhdGhzOmZ1bmN0aW9uKGssRSxqKXtpZih6LmlzQWJzb2x1dGUoaykpcmV0dXJuIEsubHN0YXQoayxWPT5WPyhWLm1lc3NhZ2U9Vi5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLGooVikpOmoobnVsbCx7dG9Dd2Q6ayx0b0RzdDprfSkpO3tjb25zdCBWPXouZGly''@;'; put 'put ''bmFtZShFKSxCPXouam9pbihWLGspO3JldHVybiBJKEIsKFksWCk9Plk/aihZKTpYP2oobnVsbCx7dG9Dd2Q6Qix0b0RzdDprfSk6Sy5sc3RhdChrLFU9PlU/KFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksaihVKSk6aihudWxsLHt0b0N3ZDpr''@;'; put 'put ''LHRvRHN0OnoucmVsYXRpdmUoVixrKX0pKSl9fSxzeW1saW5rUGF0aHNTeW5jOmZ1bmN0aW9uKGssRSl7bGV0IGo7aWYoei5pc0Fic29sdXRlKGspKXtpZihqPUsuZXhpc3RzU3luYyhrKSwhail0aHJvdyBuZXcgRXJyb3IoImFic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1''@;'; put 'put ''cm57dG9Dd2Q6ayx0b0RzdDprfX17Y29uc3QgVj16LmRpcm5hbWUoRSksQj16LmpvaW4oVixrKTtpZihqPUsuZXhpc3RzU3luYyhCKSxqKXJldHVybnt0b0N3ZDpCLHRvRHN0Omt9O2lmKGo9Sy5leGlzdHNTeW5jKGspLCFqKXRocm93IG5ldyBFcnJvcigicmVsYXRpdmUgc3JjcGF0aCBkb2Vz''@;'; put 'put ''IG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDprLHRvRHN0OnoucmVsYXRpdmUoVixrKX19fX19LDkyNTk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNzcpO00uZXhwb3J0cz17c3ltbGlua1R5cGU6ZnVuY3Rpb24oSyxJLGspe2lmKGs9ImZ1bmN0aW9uIj09dHlwZW9mIEk/STpr''@;'; put 'put ''LEk9ImZ1bmN0aW9uIiE9dHlwZW9mIEkmJkkpcmV0dXJuIGsobnVsbCxJKTt6LmxzdGF0KEssKEUsaik9PntpZihFKXJldHVybiBrKG51bGwsImZpbGUiKTtJPWomJmouaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSIsayhudWxsLEkpfSl9LHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbihLLEkp''@;'; put 'put ''e2xldCBrO2lmKEkpcmV0dXJuIEk7dHJ5e2s9ei5sc3RhdFN5bmMoSyl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBrJiZrLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uigy''@;'; put 'put ''NTIwKSxJPVIoNzc0OSksaz1SKDEzODEpLEU9ay5ta2RpcnMsaj1rLm1rZGlyc1N5bmMsVj1SKDYwNzIpLEI9Vi5zeW1saW5rUGF0aHMsWT1WLnN5bWxpbmtQYXRoc1N5bmMsWD1SKDkyNTkpLFU9WC5zeW1saW5rVHlwZSxxPVguc3ltbGlua1R5cGVTeW5jLGVlPVIoOTI1NykucGF0aEV4aXN0''@;'; put 'put ''cyx7YXJlSWRlbnRpY2FsOnRlfT1SKDI3MzMpO2Z1bmN0aW9uIG9lKHNlLGhlLHVlLGNlKXtCKHNlLGhlLChHLGIpPT57aWYoRylyZXR1cm4gY2UoRyk7c2U9Yi50b0RzdCxVKGIudG9Dd2QsdWUsKEQsSCk9PntpZihEKXJldHVybiBjZShEKTtjb25zdCBOPUsuZGlybmFtZShoZSk7ZWUoTiwo''@;'; put 'put ''ZyxDKT0+Zz9jZShnKTpDP0kuc3ltbGluayhzZSxoZSxILGNlKTp2b2lkIEUoTixTPT57aWYoUylyZXR1cm4gY2UoUyk7SS5zeW1saW5rKHNlLGhlLEgsY2UpfSkpfSl9KX1NLmV4cG9ydHM9e2NyZWF0ZVN5bWxpbms6eihmdW5jdGlvbihzZSxoZSx1ZSxjZSl7Y2U9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIHVlP3VlOmNlLHVlPSJmdW5jdGlvbiIhPXR5cGVvZiB1ZSYmdWUsSS5sc3RhdChoZSwoRyxiKT0+eyFHJiZiLmlzU3ltYm9saWNMaW5rKCk/UHJvbWlzZS5hbGwoW0kuc3RhdChzZSksSS5zdGF0KGhlKV0pLnRoZW4oKFtELEhdKT0+e2lmKHRlKEQsSCkpcmV0dXJuIGNlKG51bGwpO29l''@;'; put 'put ''KHNlLGhlLHVlLGNlKX0pOm9lKHNlLGhlLHVlLGNlKX0pfSksY3JlYXRlU3ltbGlua1N5bmM6ZnVuY3Rpb24oc2UsaGUsdWUpe2xldCBjZTt0cnl7Y2U9SS5sc3RhdFN5bmMoaGUpfWNhdGNoe31pZihjZSYmY2UuaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgRD1JLnN0YXRTeW5jKHNlKSxIPUku''@;'; put 'put ''c3RhdFN5bmMoaGUpO2lmKHRlKEQsSCkpcmV0dXJufWNvbnN0IEc9WShzZSxoZSk7c2U9Ry50b0RzdCx1ZT1xKEcudG9Dd2QsdWUpO2NvbnN0IGI9Sy5kaXJuYW1lKGhlKTtyZXR1cm4gSS5leGlzdHNTeW5jKGIpfHxqKGIpLEkuc3ltbGlua1N5bmMoc2UsaGUsdWUpfX19LDc3NDk6KE0sTyxS''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoODk4MSkuZnJvbUNhbGxiYWNrLEs9Uig3NyksST1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3duIiwiY2xvc2UiLCJjb3B5RmlsZSIsImZjaG1vZCIsImZjaG93biIsImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1''@;'; put 'put ''bmNhdGUiLCJmdXRpbWVzIiwibGNobW9kIiwibGNob3duIiwibGluayIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwib3BlbiIsIm9wZW5kaXIiLCJyZWFkZGlyIiwicmVhZEZpbGUiLCJyZWFkbGluayIsInJlYWxwYXRoIiwicmVuYW1lIiwicm0iLCJybWRpciIsInN0YXQiLCJzeW1saW5r''@;'; put 'put ''IiwidHJ1bmNhdGUiLCJ1bmxpbmsiLCJ1dGltZXMiLCJ3cml0ZUZpbGUiXS5maWx0ZXIoaz0+ImZ1bmN0aW9uIj09dHlwZW9mIEtba10pO09iamVjdC5hc3NpZ24oTyxLKSxJLmZvckVhY2goaz0+e09ba109eihLW2tdKX0pLE8ucmVhbHBhdGgubmF0aXZlPXooSy5yZWFscGF0aC5uYXRpdmUp''@;'; put 'put ''LE8uZXhpc3RzPWZ1bmN0aW9uKGssRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEU/Sy5leGlzdHMoayxFKTpuZXcgUHJvbWlzZShqPT5LLmV4aXN0cyhrLGopKX0sTy5yZWFkPWZ1bmN0aW9uKGssRSxqLFYsQixZKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWT9LLnJlYWQoayxFLGos''@;'; put 'put ''VixCLFkpOm5ldyBQcm9taXNlKChYLFUpPT57Sy5yZWFkKGssRSxqLFYsQiwocSxlZSx0ZSk9PntpZihxKXJldHVybiBVKHEpO1goe2J5dGVzUmVhZDplZSxidWZmZXI6dGV9KX0pfSl9LE8ud3JpdGU9ZnVuY3Rpb24oayxFLC4uLmope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqW2oubGVu''@;'; put 'put ''Z3RoLTFdP0sud3JpdGUoayxFLC4uLmopOm5ldyBQcm9taXNlKChWLEIpPT57Sy53cml0ZShrLEUsLi4uaiwoWSxYLFUpPT57aWYoWSlyZXR1cm4gQihZKTtWKHtieXRlc1dyaXR0ZW46WCxidWZmZXI6VX0pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIEsud3JpdGV2JiYoTy53cml0ZXY9ZnVu''@;'; put 'put ''Y3Rpb24oayxFLC4uLmope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBqW2oubGVuZ3RoLTFdP0sud3JpdGV2KGssRSwuLi5qKTpuZXcgUHJvbWlzZSgoVixCKT0+e0sud3JpdGV2KGssRSwuLi5qLChZLFgsVSk9PntpZihZKXJldHVybiBCKFkpO1Yoe2J5dGVzV3JpdHRlbjpYLGJ1ZmZlcnM6''@;'; put 'put ''VX0pfSl9KX0pfSw1Njc0OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXsuLi5SKDc3NDkpLC4uLlIoODY5MCksLi4uUig2NDY0KSwuLi5SKDU1OTApLC4uLlIoMTcyMCksLi4uUig2NTczKSwuLi5SKDEzODEpLC4uLlIoNDAyNiksLi4uUig1MzApLC4uLlIoMTMxNSksLi4uUig5''@;'; put 'put ''MjU3KSwuLi5SKDQ1NDIpfX0sNjU3MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSxLPVIoNzE4Myk7Sy5vdXRwdXRKc29uPXooUigzNTA4KSksSy5vdXRwdXRKc29uU3luYz1SKDk1NzgpLEsub3V0cHV0SlNPTj1LLm91dHB1dEpzb24sSy5vdXRw''@;'; put 'put ''dXRKU09OU3luYz1LLm91dHB1dEpzb25TeW5jLEsud3JpdGVKU09OPUsud3JpdGVKc29uLEsud3JpdGVKU09OU3luYz1LLndyaXRlSnNvblN5bmMsSy5yZWFkSlNPTj1LLnJlYWRKc29uLEsucmVhZEpTT05TeW5jPUsucmVhZEpzb25TeW5jLE0uZXhwb3J0cz1LfSw3MTgzOihNLE8sUik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7Y29uc3Qgej1SKDY4MTMpO00uZXhwb3J0cz17cmVhZEpzb246ei5yZWFkRmlsZSxyZWFkSnNvblN5bmM6ei5yZWFkRmlsZVN5bmMsd3JpdGVKc29uOnoud3JpdGVGaWxlLHdyaXRlSnNvblN5bmM6ei53cml0ZUZpbGVTeW5jfX0sOTU3ODooTSxPLFIpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2NvbnN0e3N0cmluZ2lmeTp6fT1SKDY3ODApLHtvdXRwdXRGaWxlU3luYzpLfT1SKDEzMTUpO00uZXhwb3J0cz1mdW5jdGlvbihJLGssRSl7Y29uc3Qgaj16KGssRSk7SyhJLGosRSl9fSwzNTA4OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Onp9PVIoNjc4MCks''@;'; put 'put ''e291dHB1dEZpbGU6S309UigxMzE1KTtNLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1hZShmdW5jdGlvbiooayxFLGo9e30pe2NvbnN0IFY9eihFLGopO3lpZWxkIEsoayxWLGopfSk7cmV0dXJuIGZ1bmN0aW9uKGssRSl7cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sMTM4''@;'; put 'put ''MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig4OTgxKS5mcm9tUHJvbWlzZSx7bWFrZURpcjpLLG1ha2VEaXJTeW5jOkl9PVIoODIzMyksaz16KEspO00uZXhwb3J0cz17bWtkaXJzOmssbWtkaXJzU3luYzpJLG1rZGlycDprLG1rZGlycFN5bmM6SSxlbnN1cmVEaXI6ayxlbnN1''@;'; put 'put ''cmVEaXJTeW5jOkl9fSw4MjMzOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3NDkpLHtjaGVja1BhdGg6S309UigzNDY4KSxJPWs9PiJudW1iZXIiPT10eXBlb2Ygaz9rOnttb2RlOjUxMSwuLi5rfS5tb2RlO00uZXhwb3J0cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIGs9YWUo''@;'; put 'put ''ZnVuY3Rpb24qKEUsail7cmV0dXJuIEsoRSksei5ta2RpcihFLHttb2RlOkkoaikscmVjdXJzaXZlOiEwfSl9KTtyZXR1cm4gZnVuY3Rpb24oRSxqKXtyZXR1cm4gay5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLE0uZXhwb3J0cy5tYWtlRGlyU3luYz0oayxFKT0+KEsoayksei5ta2RpclN5''@;'; put 'put ''bmMoayx7bW9kZTpJKEUpLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7Y29uc3QgSz1SKDI1MjApO00uZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oSSl7aWYoIndpbjMyIj09PXoucGxhdGZvcm0mJi9bPD46Inw/Kl0vLnRlc3Qo''@;'; put 'put ''SS5yZXBsYWNlKEsucGFyc2UoSSkucm9vdCwiIikpKXtjb25zdCBrPW5ldyBFcnJvcihgUGF0aCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM6ICR7SX1gKTt0aHJvdyBrLmNvZGU9IkVJTlZBTCIsa319fSw0MDI2OihNLE8sUik9PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPXttb3ZlU3lu''@;'; put 'put ''YzpSKDYwMDYpfX0sNjAwNjooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NyksSz1SKDI1MjApLEk9Uig4NjkwKS5jb3B5U3luYyxrPVIoNDU0MikucmVtb3ZlU3luYyxFPVIoMTM4MSkubWtkaXJwU3luYyxqPVIoMjczMyk7ZnVuY3Rpb24gVihCLFksWCl7dHJ5e3oucmVuYW1l''@;'; put 'put ''U3luYyhCLFkpfWNhdGNoKFUpe2lmKCJFWERFViIhPT1VLmNvZGUpdGhyb3cgVTtyZXR1cm4gSShxPUIsWSx7b3ZlcndyaXRlOlgsZXJyb3JPbkV4aXN0OiEwfSksayhxKX12YXIgcX1NLmV4cG9ydHM9ZnVuY3Rpb24oQixZLFgpe2NvbnN0IFU9KFg9WHx8e30pLm92ZXJ3cml0ZXx8WC5jbG9i''@;'; put 'put ''YmVyfHwhMSx7c3JjU3RhdDpxLGlzQ2hhbmdpbmdDYXNlOmVlPSExfT1qLmNoZWNrUGF0aHNTeW5jKEIsWSwibW92ZSIsWCk7cmV0dXJuIGouY2hlY2tQYXJlbnRQYXRoc1N5bmMoQixxLFksIm1vdmUiKSxmdW5jdGlvbih0ZSl7Y29uc3Qgb2U9Sy5kaXJuYW1lKHRlKTtyZXR1cm4gSy5wYXJz''@;'; put 'put ''ZShvZSkucm9vdD09PW9lfShZKXx8RShLLmRpcm5hbWUoWSkpLGZ1bmN0aW9uKHRlLG9lLHNlLGhlKXtpZihoZSlyZXR1cm4gVih0ZSxvZSxzZSk7aWYoc2UpcmV0dXJuIGsob2UpLFYodGUsb2Usc2UpO2lmKHouZXhpc3RzU3luYyhvZSkpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkg''@;'; put 'put ''ZXhpc3RzLiIpO3JldHVybiBWKHRlLG9lLHNlKX0oQixZLFUsZWUpfX0sNTMwOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjaztNLmV4cG9ydHM9e21vdmU6eihSKDQzNikpfX0sNDM2OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3''@;'; put 'put ''KSxLPVIoMjUyMCksST1SKDY0NjQpLmNvcHksaz1SKDQ1NDIpLnJlbW92ZSxFPVIoMTM4MSkubWtkaXJwLGo9Uig5MjU3KS5wYXRoRXhpc3RzLFY9UigyNzMzKTtmdW5jdGlvbiBCKFgsVSxxLGVlLHRlKXtyZXR1cm4gZWU/WShYLFUscSx0ZSk6cT9rKFUsb2U9Pm9lP3RlKG9lKTpZKFgsVSxx''@;'; put 'put ''LHRlKSk6dm9pZCBqKFUsKG9lLHNlKT0+b2U/dGUob2UpOnNlP3RlKG5ldyBFcnJvcigiZGVzdCBhbHJlYWR5IGV4aXN0cy4iKSk6WShYLFUscSx0ZSkpfWZ1bmN0aW9uIFkoWCxVLHEsZWUpe3oucmVuYW1lKFgsVSx0ZT0+e3JldHVybiB0ZT8iRVhERVYiIT09dGUuY29kZT9lZSh0ZSk6KHVl''@;'; put 'put ''PWVlLHZvaWQgSShvZT1YLFUse292ZXJ3cml0ZTpxLGVycm9yT25FeGlzdDohMH0sRz0+Rz91ZShHKTprKG9lLHVlKSkpOmVlKCk7dmFyIG9lLHVlfSl9TS5leHBvcnRzPWZ1bmN0aW9uKFgsVSxxLGVlKXsiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT17fSk7Y29uc3QgdGU9cS5vdmVy''@;'; put 'put ''d3JpdGV8fHEuY2xvYmJlcnx8ITE7Vi5jaGVja1BhdGhzKFgsVSwibW92ZSIscSwob2Usc2UpPT57aWYob2UpcmV0dXJuIGVlKG9lKTtjb25zdHtzcmNTdGF0OmhlLGlzQ2hhbmdpbmdDYXNlOnVlPSExfT1zZTtWLmNoZWNrUGFyZW50UGF0aHMoWCxoZSxVLCJtb3ZlIixjZT0+Y2U/ZWUoY2Up''@;'; put 'put ''OmZ1bmN0aW9uKEcpe2NvbnN0IGI9Sy5kaXJuYW1lKEcpO3JldHVybiBLLnBhcnNlKGIpLnJvb3Q9PT1ifShVKT9CKFgsVSx0ZSx1ZSxlZSk6dm9pZCBFKEsuZGlybmFtZShVKSxHPT5HP2VlKEcpOkIoWCxVLHRlLHVlLGVlKSkpfSl9fSwxMzE1OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29u''@;'; put 'put ''c3Qgej1SKDg5ODEpLmZyb21DYWxsYmFjayxLPVIoNzcpLEk9UigyNTIwKSxrPVIoMTM4MSksRT1SKDkyNTcpLnBhdGhFeGlzdHM7TS5leHBvcnRzPXtvdXRwdXRGaWxlOnooZnVuY3Rpb24oaixWLEIsWSl7ImZ1bmN0aW9uIj09dHlwZW9mIEImJihZPUIsQj0idXRmOCIpO2NvbnN0IFg9SS5k''@;'; put 'put ''aXJuYW1lKGopO0UoWCwoVSxxKT0+VT9ZKFUpOnE/Sy53cml0ZUZpbGUoaixWLEIsWSk6dm9pZCBrLm1rZGlycyhYLGVlPT57aWYoZWUpcmV0dXJuIFkoZWUpO0sud3JpdGVGaWxlKGosVixCLFkpfSkpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24oaiwuLi5WKXtjb25zdCBCPUkuZGlybmFt''@;'; put 'put ''ZShqKTtpZihLLmV4aXN0c1N5bmMoQikpcmV0dXJuIEsud3JpdGVGaWxlU3luYyhqLC4uLlYpO2subWtkaXJzU3luYyhCKSxLLndyaXRlRmlsZVN5bmMoaiwuLi5WKX19fSw5MjU3OihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDg5ODEpLmZyb21Qcm9taXNlLEs9Uig3NzQ5KTtN''@;'; put 'put ''LmV4cG9ydHM9e3BhdGhFeGlzdHM6eihmdW5jdGlvbihJKXtyZXR1cm4gSy5hY2Nlc3MoSSkudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzpLLmV4aXN0c1N5bmN9fSw0NTQyOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3Qgej1SKDc3KSxLPVIoODk4MSku''@;'; put 'put ''ZnJvbUNhbGxiYWNrLEk9UigzNDU2KTtNLmV4cG9ydHM9e3JlbW92ZTpLKGZ1bmN0aW9uKGssRSl7aWYoei5ybSlyZXR1cm4gei5ybShrLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LEUpO0koayxFKX0pLHJlbW92ZVN5bmM6ZnVuY3Rpb24oayl7aWYoei5ybVN5bmMpcmV0dXJuIHoucm1TeW5j''@;'; put 'put ''KGsse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pO0kuc3luYyhrKX19fSwzNDU2OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtjb25zdCBLPVIoNzcpLEk9UigyNTIwKSxrPVIoOTI4MiksRT0id2luMzIiPT09ei5wbGF0Zm9ybTtmdW5jdGlvbiBqKHRlKXtbInVubGluayIs''@;'; put 'put ''ImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFkZGlyIl0uZm9yRWFjaChvZT0+e3RlW29lXT10ZVtvZV18fEtbb2VdLHRlW29lKz0iU3luYyJdPXRlW29lXXx8S1tvZV19KSx0ZS5tYXhCdXN5VHJpZXM9dGUubWF4QnVzeVRyaWVzfHwzfWZ1bmN0aW9uIFYodGUsb2Usc2Upe2xl''@;'; put 'put ''dCBoZT0wOyJmdW5jdGlvbiI9PXR5cGVvZiBvZSYmKHNlPW9lLG9lPXt9KSxrKHRlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIHRlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksay5zdHJpY3RFcXVhbCh0eXBlb2Ygc2Us''@;'; put 'put ''ImZ1bmN0aW9uIiwicmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCIpLGsob2UsInJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3VtZW50IHByb3ZpZGVkIiksay5zdHJpY3RFcXVhbCh0eXBlb2Ygb2UsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0''@;'; put 'put ''IiksaihvZSksQih0ZSxvZSxmdW5jdGlvbiB1ZShjZSl7aWYoY2Upe2lmKCgiRUJVU1kiPT09Y2UuY29kZXx8IkVOT1RFTVBUWSI9PT1jZS5jb2RlfHwiRVBFUk0iPT09Y2UuY29kZSkmJmhlPG9lLm1heEJ1c3lUcmllcylyZXR1cm4gaGUrKyxzZXRUaW1lb3V0KCgpPT5CKHRlLG9lLHVlKSwx''@;'; put 'put ''MDAqaGUpOyJFTk9FTlQiPT09Y2UuY29kZSYmKGNlPW51bGwpfXNlKGNlKX0pfWZ1bmN0aW9uIEIodGUsb2Usc2Upe2sodGUpLGsob2UpLGsoImZ1bmN0aW9uIj09dHlwZW9mIHNlKSxvZS5sc3RhdCh0ZSwoaGUsdWUpPT5oZSYmIkVOT0VOVCI9PT1oZS5jb2RlP3NlKG51bGwpOmhlJiYiRVBF''@;'; put 'put ''Uk0iPT09aGUuY29kZSYmRT9ZKHRlLG9lLGhlLHNlKTp1ZSYmdWUuaXNEaXJlY3RvcnkoKT9VKHRlLG9lLGhlLHNlKTp2b2lkIG9lLnVubGluayh0ZSxjZT0+e2lmKGNlKXtpZigiRU5PRU5UIj09PWNlLmNvZGUpcmV0dXJuIHNlKG51bGwpO2lmKCJFUEVSTSI9PT1jZS5jb2RlKXJldHVybiBF''@;'; put 'put ''P1kodGUsb2UsY2Usc2UpOlUodGUsb2UsY2Usc2UpO2lmKCJFSVNESVIiPT09Y2UuY29kZSlyZXR1cm4gVSh0ZSxvZSxjZSxzZSl9cmV0dXJuIHNlKGNlKX0pKX1mdW5jdGlvbiBZKHRlLG9lLHNlLGhlKXtrKHRlKSxrKG9lKSxrKCJmdW5jdGlvbiI9PXR5cGVvZiBoZSksb2UuY2htb2QodGUs''@;'; put 'put ''NDM4LHVlPT57dWU/aGUoIkVOT0VOVCI9PT11ZS5jb2RlP251bGw6c2UpOm9lLnN0YXQodGUsKGNlLEcpPT57Y2U/aGUoIkVOT0VOVCI9PT1jZS5jb2RlP251bGw6c2UpOkcuaXNEaXJlY3RvcnkoKT9VKHRlLG9lLHNlLGhlKTpvZS51bmxpbmsodGUsaGUpfSl9KX1mdW5jdGlvbiBYKHRlLG9l''@;'; put 'put ''LHNlKXtsZXQgaGU7ayh0ZSksayhvZSk7dHJ5e29lLmNobW9kU3luYyh0ZSw0MzgpfWNhdGNoKHVlKXtpZigiRU5PRU5UIj09PXVlLmNvZGUpcmV0dXJuO3Rocm93IHNlfXRyeXtoZT1vZS5zdGF0U3luYyh0ZSl9Y2F0Y2godWUpe2lmKCJFTk9FTlQiPT09dWUuY29kZSlyZXR1cm47dGhyb3cg''@;'; put 'put ''c2V9aGUuaXNEaXJlY3RvcnkoKT9lZSh0ZSxvZSxzZSk6b2UudW5saW5rU3luYyh0ZSl9ZnVuY3Rpb24gVSh0ZSxvZSxzZSxoZSl7ayh0ZSksayhvZSksaygiZnVuY3Rpb24iPT10eXBlb2YgaGUpLG9lLnJtZGlyKHRlLHVlPT57dmFyIGNlLEcsYjshdWV8fCJFTk9URU1QVFkiIT09dWUuY29k''@;'; put 'put ''ZSYmIkVFWElTVCIhPT11ZS5jb2RlJiYiRVBFUk0iIT09dWUuY29kZT9oZSh1ZSYmIkVOT1RESVIiPT09dWUuY29kZT9zZTp1ZSk6KEc9b2UsYj1oZSxrKGNlPXRlKSxrKEcpLGsoImZ1bmN0aW9uIj09dHlwZW9mIGIpLEcucmVhZGRpcihjZSwoRCxIKT0+e2lmKEQpcmV0dXJuIGIoRCk7bGV0''@;'; put 'put ''IE4sZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4gRy5ybWRpcihjZSxiKTtILmZvckVhY2goQz0+e1YoSS5qb2luKGNlLEMpLEcsUz0+e2lmKCFOKXJldHVybiBTP2IoTj1TKTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSxiKSl9KX0pfSkpfSl9ZnVuY3Rpb24gcSh0ZSxvZSl7bGV0IHNlO2oo''@;'; put 'put ''b2U9b2V8fHt9KSxrKHRlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLGsuc3RyaWN0RXF1YWwodHlwZW9mIHRlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksayhvZSwicmltcmFmOiBtaXNzaW5nIG9wdGlvbnMiKSxrLnN0cmljdEVxdWFsKHR5cGVvZiBvZSwi''@;'; put 'put ''b2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKTt0cnl7c2U9b2UubHN0YXRTeW5jKHRlKX1jYXRjaChoZSl7aWYoIkVOT0VOVCI9PT1oZS5jb2RlKXJldHVybjsiRVBFUk0iPT09aGUuY29kZSYmRSYmWCh0ZSxvZSxoZSl9dHJ5e3NlJiZzZS5pc0RpcmVjdG9yeSgp''@;'; put 'put ''P2VlKHRlLG9lLG51bGwpOm9lLnVubGlua1N5bmModGUpfWNhdGNoKGhlKXtpZigiRU5PRU5UIj09PWhlLmNvZGUpcmV0dXJuO2lmKCJFUEVSTSI9PT1oZS5jb2RlKXJldHVybiBFP1godGUsb2UsaGUpOmVlKHRlLG9lLGhlKTtpZigiRUlTRElSIiE9PWhlLmNvZGUpdGhyb3cgaGU7ZWUodGUs''@;'; put 'put ''b2UsaGUpfX1mdW5jdGlvbiBlZSh0ZSxvZSxzZSl7ayh0ZSksayhvZSk7dHJ5e29lLnJtZGlyU3luYyh0ZSl9Y2F0Y2goaGUpe2lmKCJFTk9URElSIj09PWhlLmNvZGUpdGhyb3cgc2U7aWYoIkVOT1RFTVBUWSI9PT1oZS5jb2RlfHwiRUVYSVNUIj09PWhlLmNvZGV8fCJFUEVSTSI9PT1oZS5j''@;'; put 'put ''b2RlKSFmdW5jdGlvbih1ZSxjZSl7aWYoayh1ZSksayhjZSksY2UucmVhZGRpclN5bmModWUpLmZvckVhY2goRz0+cShJLmpvaW4odWUsRyksY2UpKSwhRSlyZXR1cm4gY2Uucm1kaXJTeW5jKHVlLGNlKTt7Y29uc3QgRz1EYXRlLm5vdygpO2Rve3RyeXtyZXR1cm4gY2Uucm1kaXJTeW5jKHVl''@;'; put 'put ''LGNlKX1jYXRjaHt9fXdoaWxlKERhdGUubm93KCktRzw1MDApfX0odGUsb2UpO2Vsc2UgaWYoIkVOT0VOVCIhPT1oZS5jb2RlKXRocm93IGhlfX1NLmV4cG9ydHM9VixWLnN5bmM9cX0sMjczMzooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NzQ5KSxLPVIoMjUyMCksST1SKDk1''@;'; put 'put ''MzkpO2Z1bmN0aW9uIGsoQixZLFgpe2NvbnN0IFU9WC5kZXJlZmVyZW5jZT9xPT56LnN0YXQocSx7YmlnaW50OiEwfSk6cT0+ei5sc3RhdChxLHtiaWdpbnQ6ITB9KTtyZXR1cm4gUHJvbWlzZS5hbGwoW1UoQiksVShZKS5jYXRjaChxPT57aWYoIkVOT0VOVCI9PT1xLmNvZGUpcmV0dXJuIG51''@;'; put 'put ''bGw7dGhyb3cgcX0pXSkudGhlbigoW3EsZWVdKT0+KHtzcmNTdGF0OnEsZGVzdFN0YXQ6ZWV9KSl9ZnVuY3Rpb24gRShCLFkpe3JldHVybiBZLmlubyYmWS5kZXYmJlkuaW5vPT09Qi5pbm8mJlkuZGV2PT09Qi5kZXZ9ZnVuY3Rpb24gaihCLFkpe2NvbnN0IFg9Sy5yZXNvbHZlKEIpLnNwbGl0''@;'; put 'put ''KEsuc2VwKS5maWx0ZXIocT0+cSksVT1LLnJlc29sdmUoWSkuc3BsaXQoSy5zZXApLmZpbHRlcihxPT5xKTtyZXR1cm4gWC5yZWR1Y2UoKHEsZWUsdGUpPT5xJiZVW3RlXT09PWVlLCEwKX1mdW5jdGlvbiBWKEIsWSxYKXtyZXR1cm5gQ2Fubm90ICR7WH0gJyR7Qn0nIHRvIGEgc3ViZGlyZWN0''@;'; put 'put ''b3J5IG9mIGl0c2VsZiwgJyR7WX0nLmB9TS5leHBvcnRzPXtjaGVja1BhdGhzOmZ1bmN0aW9uKEIsWSxYLFUscSl7SS5jYWxsYmFja2lmeShrKShCLFksVSwoZWUsdGUpPT57aWYoZWUpcmV0dXJuIHEoZWUpO2NvbnN0e3NyY1N0YXQ6b2UsZGVzdFN0YXQ6c2V9PXRlO2lmKHNlKXtpZihFKG9l''@;'; put 'put ''LHNlKSl7Y29uc3QgaGU9Sy5iYXNlbmFtZShCKSx1ZT1LLmJhc2VuYW1lKFkpO3JldHVybiJtb3ZlIj09PVgmJmhlIT09dWUmJmhlLnRvTG93ZXJDYXNlKCk9PT11ZS50b0xvd2VyQ2FzZSgpP3EobnVsbCx7c3JjU3RhdDpvZSxkZXN0U3RhdDpzZSxpc0NoYW5naW5nQ2FzZTohMH0pOnEobmV3''@;'; put 'put ''IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpKX1pZihvZS5pc0RpcmVjdG9yeSgpJiYhc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtZfScgd2l0aCBkaXJlY3Rv''@;'; put 'put ''cnkgJyR7Qn0nLmApKTtpZighb2UuaXNEaXJlY3RvcnkoKSYmc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1l9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Qn0nLmApKX1yZXR1cm4gb2UuaXNEaXJlY3RvcnkoKSYmaihC''@;'; put 'put ''LFkpP3EobmV3IEVycm9yKFYoQixZLFgpKSk6cShudWxsLHtzcmNTdGF0Om9lLGRlc3RTdGF0OnNlfSl9KX0sY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24oQixZLFgsVSl7Y29uc3R7c3JjU3RhdDpxLGRlc3RTdGF0OmVlfT1mdW5jdGlvbih0ZSxvZSxzZSl7bGV0IGhlO2NvbnN0IHVlPXNlLmRl''@;'; put 'put ''cmVmZXJlbmNlP0c9Pnouc3RhdFN5bmMoRyx7YmlnaW50OiEwfSk6Rz0+ei5sc3RhdFN5bmMoRyx7YmlnaW50OiEwfSksY2U9dWUodGUpO3RyeXtoZT11ZShvZSl9Y2F0Y2goRyl7aWYoIkVOT0VOVCI9PT1HLmNvZGUpcmV0dXJue3NyY1N0YXQ6Y2UsZGVzdFN0YXQ6bnVsbH07dGhyb3cgR31y''@;'; put 'put ''ZXR1cm57c3JjU3RhdDpjZSxkZXN0U3RhdDpoZX19KEIsWSxVKTtpZihlZSl7aWYoRShxLGVlKSl7Y29uc3QgdGU9Sy5iYXNlbmFtZShCKSxvZT1LLmJhc2VuYW1lKFkpO2lmKCJtb3ZlIj09PVgmJnRlIT09b2UmJnRlLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2VyQ2FzZSgpKXJldHVybntz''@;'; put 'put ''cmNTdGF0OnEsZGVzdFN0YXQ6ZWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihxLmlzRGlyZWN0b3J5KCkmJiFlZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90''@;'; put 'put ''IG92ZXJ3cml0ZSBub24tZGlyZWN0b3J5ICcke1l9JyB3aXRoIGRpcmVjdG9yeSAnJHtCfScuYCk7aWYoIXEuaXNEaXJlY3RvcnkoKSYmZWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1l9JyB3aXRoIG5vbi1kaXJlY3Rvcnkg''@;'; put 'put ''JyR7Qn0nLmApfWlmKHEuaXNEaXJlY3RvcnkoKSYmaihCLFkpKXRocm93IG5ldyBFcnJvcihWKEIsWSxYKSk7cmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDplZX19LGNoZWNrUGFyZW50UGF0aHM6ZnVuY3Rpb24gQihZLFgsVSxxLGVlKXtjb25zdCB0ZT1LLnJlc29sdmUoSy5kaXJuYW1lKFkp''@;'; put 'put ''KSxvZT1LLnJlc29sdmUoSy5kaXJuYW1lKFUpKTtpZihvZT09PXRlfHxvZT09PUsucGFyc2Uob2UpLnJvb3QpcmV0dXJuIGVlKCk7ei5zdGF0KG9lLHtiaWdpbnQ6ITB9LChzZSxoZSk9PnNlPyJFTk9FTlQiPT09c2UuY29kZT9lZSgpOmVlKHNlKTpFKFgsaGUpP2VlKG5ldyBFcnJvcihWKFks''@;'; put 'put ''VSxxKSkpOkIoWSxYLG9lLHEsZWUpKX0sY2hlY2tQYXJlbnRQYXRoc1N5bmM6ZnVuY3Rpb24gQihZLFgsVSxxKXtjb25zdCBlZT1LLnJlc29sdmUoSy5kaXJuYW1lKFkpKSx0ZT1LLnJlc29sdmUoSy5kaXJuYW1lKFUpKTtpZih0ZT09PWVlfHx0ZT09PUsucGFyc2UodGUpLnJvb3QpcmV0dXJu''@;'; put 'put ''O2xldCBvZTt0cnl7b2U9ei5zdGF0U3luYyh0ZSx7YmlnaW50OiEwfSl9Y2F0Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm47dGhyb3cgc2V9aWYoRShYLG9lKSl0aHJvdyBuZXcgRXJyb3IoVihZLFUscSkpO3JldHVybiBCKFksWCx0ZSxxKX0saXNTcmNTdWJkaXI6aixhcmVJ''@;'; put 'put ''ZGVudGljYWw6RX19LDMxODooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3Nyk7TS5leHBvcnRzPXt1dGltZXNNaWxsaXM6ZnVuY3Rpb24oSyxJLGssRSl7ei5vcGVuKEssInIrIiwoaixWKT0+e2lmKGopcmV0dXJuIEUoaik7ei5mdXRpbWVzKFYsSSxrLEI9Pnt6LmNsb3NlKFYs''@;'; put 'put ''WT0+e0UmJkUoQnx8WSl9KX0pfSl9LHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24oSyxJLGspe2NvbnN0IEU9ei5vcGVuU3luYyhLLCJyKyIpO3JldHVybiB6LmZ1dGltZXNTeW5jKEUsSSxrKSx6LmNsb3NlU3luYyhFKX19fSw3MzM0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO00uZXhwb3J0''@;'; put 'put ''cz1ZLFkucmVhbHBhdGg9WSxZLnN5bmM9WCxZLnJlYWxwYXRoU3luYz1YLFkubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtLLnJlYWxwYXRoPVksSy5yZWFscGF0aFN5bmM9WH0sWS51bm1vbmtleXBhdGNoPWZ1bmN0aW9uKCl7Sy5yZWFscGF0aD1JLEsucmVhbHBhdGhTeW5jPWt9O3ZhciBLPVIo''@;'; put 'put ''MjUzNSksST1LLnJlYWxwYXRoLGs9Sy5yZWFscGF0aFN5bmMsaj0vXnZbMC01XVwuLy50ZXN0KHoudmVyc2lvbiksVj1SKDcwNTkpO2Z1bmN0aW9uIEIoVSl7cmV0dXJuIFUmJiJyZWFscGF0aCI9PT1VLnN5c2NhbGwmJigiRUxPT1AiPT09VS5jb2RlfHwiRU5PTUVNIj09PVUuY29kZXx8IkVO''@;'; put 'put ''QU1FVE9PTE9ORyI9PT1VLmNvZGUpfWZ1bmN0aW9uIFkoVSxxLGVlKXtpZihqKXJldHVybiBJKFUscSxlZSk7ImZ1bmN0aW9uIj09dHlwZW9mIHEmJihlZT1xLHE9bnVsbCksSShVLHEsZnVuY3Rpb24odGUsb2Upe0IodGUpP1YucmVhbHBhdGgoVSxxLGVlKTplZSh0ZSxvZSl9KX1mdW5jdGlv''@;'; put 'put ''biBYKFUscSl7aWYoailyZXR1cm4gayhVLHEpO3RyeXtyZXR1cm4gayhVLHEpfWNhdGNoKGVlKXtpZihCKGVlKSlyZXR1cm4gVi5yZWFscGF0aFN5bmMoVSxxKTt0aHJvdyBlZX19fSw3MDU5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPVIoMjUyMCksaz0id2luMzIiPT09''@;'; put 'put ''ei5wbGF0Zm9ybSxFPVIoMjUzNSksaj16LmVudi5OT0RFX0RFQlVHJiYvZnMvLnRlc3Qoei5lbnYuTk9ERV9ERUJVRyk7aWYoayl2YXIgQj0vKC4qPykoPzpbXC9cXF0rfCQpL2c7ZWxzZSBCPS8oLio/KSg/OltcL10rfCQpL2c7aWYoayl2YXIgWT0vXig/OlthLXpBLVpdOnxbXFxcL117Mn1b''@;'; put 'put ''XlxcXC9dK1tcXFwvXVteXFxcL10rKT9bXFxcL10qLztlbHNlIFk9L15bXC9dKi87Ty5yZWFscGF0aFN5bmM9ZnVuY3Rpb24oWCxVKXtpZihYPUkucmVzb2x2ZShYKSxVJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxYKSlyZXR1cm4gVVtYXTt2YXIgcSxlZSx0ZSxv''@;'; put 'put ''ZSxzZT1YLGhlPXt9LHVlPXt9O2Z1bmN0aW9uIGNlKCl7dmFyIGc9WS5leGVjKFgpO3E9Z1swXS5sZW5ndGgsZWU9Z1swXSx0ZT1nWzBdLG9lPSIiLGsmJiF1ZVt0ZV0mJihFLmxzdGF0U3luYyh0ZSksdWVbdGVdPSEwKX1mb3IoY2UoKTtxPFgubGVuZ3RoOyl7Qi5sYXN0SW5kZXg9cTt2YXIg''@;'; put 'put ''Rz1CLmV4ZWMoWCk7aWYob2U9ZWUsZWUrPUdbMF0scT1CLmxhc3RJbmRleCwhKHVlW3RlPW9lK0dbMV1dfHxVJiZVW3RlXT09PXRlKSl7dmFyIGI7aWYoVSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsdGUpKWI9VVt0ZV07ZWxzZXt2YXIgRD1FLmxzdGF0U3luYyh0''@;'; put 'put ''ZSk7aWYoIUQuaXNTeW1ib2xpY0xpbmsoKSl7dWVbdGVdPSEwLFUmJihVW3RlXT10ZSk7Y29udGludWV9dmFyIEg9bnVsbDtpZighayl7dmFyIE49RC5kZXYudG9TdHJpbmcoMzIpKyI6IitELmluby50b1N0cmluZygzMik7aGUuaGFzT3duUHJvcGVydHkoTikmJihIPWhlW05dKX1udWxsPT09''@;'; put 'put ''SCYmKEUuc3RhdFN5bmModGUpLEg9RS5yZWFkbGlua1N5bmModGUpKSxiPUkucmVzb2x2ZShvZSxIKSxVJiYoVVt0ZV09Yiksa3x8KGhlW05dPUgpfVg9SS5yZXNvbHZlKGIsWC5zbGljZShxKSksY2UoKX19cmV0dXJuIFUmJihVW3NlXT1YKSxYfSxPLnJlYWxwYXRoPWZ1bmN0aW9uKFgsVSxx''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSYmKHE9ZnVuY3Rpb24gVihYKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWD9YOmZ1bmN0aW9uKCl7dmFyIFU7aWYoail7dmFyIHE9bmV3IEVycm9yO1U9ZnVuY3Rpb24odGUpe3RlJiYocS5tZXNzYWdlPXRlLm1lc3NhZ2UsZWUodGU9cSkpfX1l''@;'; put 'put ''bHNlIFU9ZWU7cmV0dXJuIFU7ZnVuY3Rpb24gZWUodGUpe2lmKHRlKXtpZih6LnRocm93RGVwcmVjYXRpb24pdGhyb3cgdGU7aWYoIXoubm9EZXByZWNhdGlvbil7dmFyIG9lPSJmczogbWlzc2luZyBjYWxsYmFjayAiKyh0ZS5zdGFja3x8dGUubWVzc2FnZSk7ei50cmFjZURlcHJlY2F0aW9u''@;'; put 'put ''P0sudHJhY2Uob2UpOksuZXJyb3Iob2UpfX19fSgpfShVKSxVPW51bGwpLFg9SS5yZXNvbHZlKFgpLFUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLFgpKXJldHVybiB6Lm5leHRUaWNrKHEuYmluZChudWxsLG51bGwsVVtYXSkpO3ZhciBlZSx0ZSxvZSxzZSxoZT1Y''@;'; put 'put ''LHVlPXt9LGNlPXt9O2Z1bmN0aW9uIEcoKXt2YXIgZz1ZLmV4ZWMoWCk7ZWU9Z1swXS5sZW5ndGgsdGU9Z1swXSxvZT1nWzBdLHNlPSIiLGsmJiFjZVtvZV0/RS5sc3RhdChvZSxmdW5jdGlvbihDKXtpZihDKXJldHVybiBxKEMpO2NlW29lXT0hMCxiKCl9KTp6Lm5leHRUaWNrKGIpfWZ1bmN0''@;'; put 'put ''aW9uIGIoKXtpZihlZT49WC5sZW5ndGgpcmV0dXJuIFUmJihVW2hlXT1YKSxxKG51bGwsWCk7Qi5sYXN0SW5kZXg9ZWU7dmFyIGc9Qi5leGVjKFgpO3JldHVybiBzZT10ZSx0ZSs9Z1swXSxlZT1CLmxhc3RJbmRleCxjZVtvZT1zZStnWzFdXXx8VSYmVVtvZV09PT1vZT96Lm5leHRUaWNrKGIp''@;'; put 'put ''OlUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLG9lKT9OKFVbb2VdKTpFLmxzdGF0KG9lLEQpfWZ1bmN0aW9uIEQoZyxDKXtpZihnKXJldHVybiBxKGcpO2lmKCFDLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGNlW29lXT0hMCxVJiYoVVtvZV09b2UpLHoubmV4dFRp''@;'; put 'put ''Y2soYik7aWYoIWspe3ZhciBTPUMuZGV2LnRvU3RyaW5nKDMyKSsiOiIrQy5pbm8udG9TdHJpbmcoMzIpO2lmKHVlLmhhc093blByb3BlcnR5KFMpKXJldHVybiBIKG51bGwsdWVbU10sb2UpfUUuc3RhdChvZSxmdW5jdGlvbih2KXtpZih2KXJldHVybiBxKHYpO0UucmVhZGxpbmsob2UsZnVu''@;'; put 'put ''Y3Rpb24ocCx3KXtrfHwodWVbU109dyksSChwLHcpfSl9KX1mdW5jdGlvbiBIKGcsQyxTKXtpZihnKXJldHVybiBxKGcpO3ZhciB2PUkucmVzb2x2ZShzZSxDKTtVJiYoVVtTXT12KSxOKHYpfWZ1bmN0aW9uIE4oZyl7WD1JLnJlc29sdmUoZyxYLnNsaWNlKGVlKSksRygpfUcoKX19LDc2NDg6''@;'; put 'put ''TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz1BcnJheS5wcm90b3R5cGUuc2xpY2UsUj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO00uZXhwb3J0cz1mdW5jdGlvbih6KXt2YXIgSz10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLfHwiW29iamVjdCBGdW5jdGlvbl0iIT09Ui5jYWxsKEspKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitLKTtmb3IodmFyIEksaz1PLmNhbGwoYXJndW1lbnRzLDEpLEU9TWF0aC5tYXgoMCxLLmxlbmd0aC1rLmxlbmd0aCksaj1bXSxWPTA7VjxFO1YrKylqLnB1c2goIiQiK1Yp''@;'; put 'put ''O2lmKEk9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitqLmpvaW4oIiwiKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBJKXt2YXIgWT1LLmFwcGx5KHRoaXMsay5jb25jYXQoTy5j''@;'; put 'put ''YWxsKGFyZ3VtZW50cykpKTtyZXR1cm4gT2JqZWN0KFkpPT09WT9ZOnRoaXN9cmV0dXJuIEsuYXBwbHkoeixrLmNvbmNhdChPLmNhbGwoYXJndW1lbnRzKSkpfSksSy5wcm90b3R5cGUpe3ZhciBCPWZ1bmN0aW9uKCl7fTtCLnByb3RvdHlwZT1LLnByb3RvdHlwZSxJLnByb3RvdHlwZT1uZXcg''@;'; put 'put ''QixCLnByb3RvdHlwZT1udWxsfXJldHVybiBJfX0sODYxMjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNzY0OCk7TS5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHx6fSwyMTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVN5bnRheEVycm9yLEk9RnVuY3Rp''@;'; put 'put ''b24saz1UeXBlRXJyb3IsRT1mdW5jdGlvbihTKXt0cnl7cmV0dXJuIEkoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK1MrIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxqPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7aWYoail0cnl7aih7fSwiIil9Y2F0Y2h7aj1udWxsfXZh''@;'; put 'put ''ciBWPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IGt9LEI9aj9mdW5jdGlvbigpe3RyeXtyZXR1cm4gVn1jYXRjaHt0cnl7cmV0dXJuIGooYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIFZ9fX0oKTpWLFk9UigxNDA1KSgpLFg9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlv''@;'; put 'put ''bihTKXtyZXR1cm4gUy5fX3Byb3RvX199LFU9e30scT10eXBlb2YgVWludDhBcnJheT4idSI/ejpYKFVpbnQ4QXJyYXkpLGVlPXsiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPiJ1Ij96OkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVy''@;'; put 'put ''JSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij96OkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOlk/WChbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOnosIiVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjp6LCIlQXN5bmNGdW5jdGlvbiUiOlUsIiVBc3luY0dlbmVy''@;'; put 'put ''YXRvciUiOlUsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6VSwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpVLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij96OkF0b21pY3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij96OkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0''@;'; put 'put ''eXBlb2YgQmlnSW50NjRBcnJheT4idSI/ejpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP3o6QmlnVWludDY0QXJyYXksIiVCb29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij96OkRhdGFWaWV3''@;'; put 'put ''LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkksIiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOkVycm9yLCIl''@;'; put 'put ''ZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpFdmFsRXJyb3IsIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij96OkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP3o6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVn''@;'; put 'put ''aXN0cnklIjp0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnk+InUiP3o6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOkksIiVHZW5lcmF0b3JGdW5jdGlvbiUiOlUsIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij96OkludDhBcnJheSwiJUludDE2QXJyYXklIjp0''@;'; put 'put ''eXBlb2YgSW50MTZBcnJheT4idSI/ejpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQzMkFycmF5PiJ1Ij96OkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6WT9YKFgoW11bU3ltYm9sLml0ZXJh''@;'; put 'put ''dG9yXSgpKSk6eiwiJUpTT04lIjoib2JqZWN0Ij09dHlwZW9mIEpTT04/SlNPTjp6LCIlTWFwJSI6dHlwZW9mIE1hcD4idSI/ejpNYXAsIiVNYXBJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBNYXA8InUiJiZZP1goKG5ldyBNYXApW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJU1hdGglIjpN''@;'; put 'put ''YXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6T2JqZWN0LCIlcGFyc2VGbG9hdCUiOnBhcnNlRmxvYXQsIiVwYXJzZUludCUiOnBhcnNlSW50LCIlUHJvbWlzZSUiOnR5cGVvZiBQcm9taXNlPiJ1Ij96OlByb21pc2UsIiVQcm94eSUiOnR5cGVvZiBQcm94eT4idSI/ejpQcm94eSwi''@;'; put 'put ''JVJhbmdlRXJyb3IlIjpSYW5nZUVycm9yLCIlUmVmZXJlbmNlRXJyb3IlIjpSZWZlcmVuY2VFcnJvciwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/ejpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/ejpTZXQsIiVTZXRJdGVyYXRvclByb3Rv''@;'; put 'put ''dHlwZSUiOnR5cGVvZiBTZXQ8InUiJiZZP1goKG5ldyBTZXQpW1N5bWJvbC5pdGVyYXRvcl0oKSk6eiwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij96OlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5nLCIlU3RyaW5nSXRlcmF0b3JQ''@;'; put 'put ''cm90b3R5cGUlIjpZP1goIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTp6LCIlU3ltYm9sJSI6WT9TeW1ib2w6eiwiJVN5bnRheEVycm9yJSI6SywiJVRocm93VHlwZUVycm9yJSI6QiwiJVR5cGVkQXJyYXklIjpxLCIlVHlwZUVycm9yJSI6aywiJVVpbnQ4QXJyYXklIjp0eXBlb2YgVWludDhBcnJh''@;'; put 'put ''eT4idSI/ejpVaW50OEFycmF5LCIlVWludDhDbGFtcGVkQXJyYXklIjp0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk+InUiP3o6VWludDhDbGFtcGVkQXJyYXksIiVVaW50MTZBcnJheSUiOnR5cGVvZiBVaW50MTZBcnJheT4idSI/ejpVaW50MTZBcnJheSwiJVVpbnQzMkFycmF5JSI6dHlwZW9m''@;'; put 'put ''IFVpbnQzMkFycmF5PiJ1Ij96OlVpbnQzMkFycmF5LCIlVVJJRXJyb3IlIjpVUklFcnJvciwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/ejpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij96OldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUi''@;'; put 'put ''P3o6V2Vha1NldH07dHJ5e251bGwuZXJyb3J9Y2F0Y2goUyl7dmFyIHRlPVgoWChTKSk7ZWVbIiVFcnJvci5wcm90b3R5cGUlIl09dGV9dmFyIG9lPWZ1bmN0aW9uIFModil7dmFyIHA7aWYoIiVBc3luY0Z1bmN0aW9uJSI9PT12KXA9RSgiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlm''@;'; put 'put ''KCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PXYpcD1FKCJmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiPT09dilwPUUoImFzeW5jIGZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvciUiPT09dil7dmFyIHc9UygiJUFzeW5j''@;'; put 'put ''R2VuZXJhdG9yRnVuY3Rpb24lIik7dyYmKHA9dy5wcm90b3R5cGUpfWVsc2UgaWYoIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSI9PT12KXt2YXIgSj1TKCIlQXN5bmNHZW5lcmF0b3IlIik7SiYmKHA9WChKLnByb3RvdHlwZSkpfXJldHVybiBlZVt2XT1wLHB9LHNlPXsiJUFycmF5QnVmZmVy''@;'; put 'put ''UHJvdG90eXBlJSI6WyJBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJdLCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJh''@;'; put 'put ''eSIsInByb3RvdHlwZSIsImZvckVhY2giXSwiJUFycmF5UHJvdG9fa2V5cyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVu''@;'; put 'put ''Y3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVh''@;'; put 'put ''blByb3RvdHlwZSUiOlsiQm9vbGVhbiIsInByb3RvdHlwZSJdLCIlRGF0YVZpZXdQcm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3RvdHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwi''@;'; put 'put ''JUV2YWxFcnJvclByb3RvdHlwZSUiOlsiRXZhbEVycm9yIiwicHJvdG90eXBlIl0sIiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0''@;'; put 'put ''aW9uUHJvdG90eXBlJSI6WyJGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFy''@;'; put 'put ''cmF5UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDE2QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIs''@;'; put 'put ''InBhcnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6WyJKU09OIiwic3RyaW5naWZ5Il0sIiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVjdFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90''@;'; put 'put ''eXBlIl0sIiVPYmpQcm90b190b1N0cmluZyUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUlIjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVBy''@;'; put 'put ''b21pc2VQcm90b190aGVuJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIiwidGhlbiJdLCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jlc29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0s''@;'; put 'put ''IiVSYW5nZUVycm9yUHJvdG90eXBlJSI6WyJSYW5nZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVnRXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5''@;'; put 'put ''cGUlIjpbIlNldCIsInByb3RvdHlwZSJdLCIlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIlU3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJw''@;'; put 'put ''cm90b3R5cGUiXSwiJVN5bnRheEVycm9yUHJvdG90eXBlJSI6WyJTeW50YXhFcnJvciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBlJSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwi''@;'; put 'put ''JVVpbnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBl''@;'; put 'put ''Il0sIiVVaW50MzJBcnJheVByb3RvdHlwZSUiOlsiVWludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIsInByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlw''@;'; put 'put ''ZSUiOlsiV2Vha1NldCIsInByb3RvdHlwZSJdfSxoZT1SKDg2MTIpLHVlPVIoNzY0MiksY2U9aGUuY2FsbChGdW5jdGlvbi5jYWxsLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLEc9aGUuY2FsbChGdW5jdGlvbi5hcHBseSxBcnJheS5wcm90b3R5cGUuc3BsaWNlKSxiPWhlLmNhbGwoRnVuY3Rp''@;'; put 'put ''b24uY2FsbCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEQ9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUuc2xpY2UpLEg9aGUuY2FsbChGdW5jdGlvbi5jYWxsLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksTj0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8''@;'; put 'put ''KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLGc9L1xcKFxcKT8vZyxDPWZ1bmN0aW9uKFMsdil7dmFyIHAsdz1TO2lmKHVlKHNlLHcpJiYodz0iJSIrKHA9c2Vbd10pWzBdKyIlIiksdWUoZWUsdykpe3ZhciBKPWVlW3dd''@;'; put 'put ''O2lmKEo9PT1VJiYoSj1vZSh3KSksdm9pZCAwPT09SiYmIXYpdGhyb3cgbmV3IGsoImludHJpbnNpYyAiK1MrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6cCxuYW1lOncsdmFsdWU6Sn19dGhyb3cgbmV3IEsoImlu''@;'; put 'put ''dHJpbnNpYyAiK1MrIiBkb2VzIG5vdCBleGlzdCEiKX07TS5leHBvcnRzPWZ1bmN0aW9uKFMsdil7aWYoInN0cmluZyIhPXR5cGVvZiBTfHwwPT09Uy5sZW5ndGgpdGhyb3cgbmV3IGsoImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiB2KXRocm93IG5ldyBrKCciYWxsb3dNaXNzaW5nIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO2lmKG51bGw9PT1IKC9eJT9bXiVdKiU/JC8sUykpdGhyb3cgbmV3IEsoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0''@;'; put 'put ''IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgcD1mdW5jdGlvbihZZSl7dmFyIEplPUQoWWUsMCwxKSxsdD1EKFllLC0xKTtpZigiJSI9PT1KZSYmIiUiIT09bHQpdGhyb3cgbmV3IEsoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQg''@;'; put 'put ''Y2xvc2luZyBgJWAiKTtpZigiJSI9PT1sdCYmIiUiIT09SmUpdGhyb3cgbmV3IEsoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAiKTt2YXIgUGU9W107cmV0dXJuIGIoWWUsTixmdW5jdGlvbihiZSxBZSxUZSxxZSl7UGVbUGUubGVuZ3RoXT1UZT9iKHFl''@;'; put 'put ''LGcsIiQxIik6QWV8fGJlfSksUGV9KFMpLHc9cC5sZW5ndGg+MD9wWzBdOiIiLEo9QygiJSIrdysiJSIsdiksbmU9Si5uYW1lLGRlPUoudmFsdWUsZmU9ITEseGU9Si5hbGlhczt4ZSYmKHc9eGVbMF0sRyhwLGNlKFswLDFdLHhlKSkpO2Zvcih2YXIgTGU9MSxGZT0hMDtMZTxwLmxlbmd0aDtM''@;'; put 'put ''ZSs9MSl7dmFyIE9lPXBbTGVdLGplPUQoT2UsMCwxKSxXZT1EKE9lLC0xKTtpZigoJyInPT09amV8fCInIj09PWplfHwiYCI9PT1qZXx8JyInPT09V2V8fCInIj09PVdlfHwiYCI9PT1XZSkmJmplIT09V2UpdGhyb3cgbmV3IEsoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2''@;'; put 'put ''ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigiY29uc3RydWN0b3IiIT09T2UmJkZlfHwoZmU9ITApLHVlKGVlLG5lPSIlIisodys9Ii4iK09lKSsiJSIpKWRlPWVlW25lXTtlbHNlIGlmKG51bGwhPWRlKXtpZighKE9lIGluIGRlKSl7aWYoIXYpdGhyb3cgbmV3IGsoImJhc2UgaW50cmluc2ljIGZv''@;'; put 'put ''ciAiK1MrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1cm59aWYoaiYmTGUrMT49cC5sZW5ndGgpe3ZhciBLZT1qKGRlLE9lKTtkZT0oRmU9ISFLZSkmJiJnZXQiaW4gS2UmJiEoIm9yaWdpbmFsVmFsdWUiaW4gS2UuZ2V0KT9LZS5nZXQ6ZGVbT2Vd''@;'; put 'put ''fWVsc2UgRmU9dWUoZGUsT2UpLGRlPWRlW09lXTtGZSYmIWZlJiYoZWVbbmVdPWRlKX19cmV0dXJuIGRlfX0sNjc3MjooTSxPLFIpPT57dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKHEsZWUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxlZSl9Ty5zZXRv''@;'; put 'put ''cHRzPWZ1bmN0aW9uKHEsZWUsdGUpe2lmKHRlfHwodGU9e30pLHRlLm1hdGNoQmFzZSYmLTE9PT1lZS5pbmRleE9mKCIvIikpe2lmKHRlLm5vZ2xvYnN0YXIpdGhyb3cgbmV3IEVycm9yKCJiYXNlIG1hdGNoaW5nIHJlcXVpcmVzIGdsb2JzdGFyIik7ZWU9IioqLyIrZWV9dmFyIHNlO3Euc2ls''@;'; put 'put ''ZW50PSEhdGUuc2lsZW50LHEucGF0dGVybj1lZSxxLnN0cmljdD0hMSE9PXRlLnN0cmljdCxxLnJlYWxwYXRoPSEhdGUucmVhbHBhdGgscS5yZWFscGF0aENhY2hlPXRlLnJlYWxwYXRoQ2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5mb2xsb3c9ISF0ZS5mb2xsb3cscS5kb3Q9ISF0ZS5k''@;'; put 'put ''b3QscS5tYXJrPSEhdGUubWFyayxxLm5vZGlyPSEhdGUubm9kaXIscS5ub2RpciYmKHEubWFyaz0hMCkscS5zeW5jPSEhdGUuc3luYyxxLm5vdW5pcXVlPSEhdGUubm91bmlxdWUscS5ub251bGw9ISF0ZS5ub251bGwscS5ub3NvcnQ9ISF0ZS5ub3NvcnQscS5ub2Nhc2U9ISF0ZS5ub2Nhc2Us''@;'; put 'put ''cS5zdGF0PSEhdGUuc3RhdCxxLm5vcHJvY2Vzcz0hIXRlLm5vcHJvY2VzcyxxLmFic29sdXRlPSEhdGUuYWJzb2x1dGUscS5mcz10ZS5mc3x8SSxxLm1heExlbmd0aD10ZS5tYXhMZW5ndGh8fDEvMCxxLmNhY2hlPXRlLmNhY2hlfHxPYmplY3QuY3JlYXRlKG51bGwpLHEuc3RhdENhY2hlPXRl''@;'; put 'put ''LnN0YXRDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLnN5bWxpbmtzPXRlLnN5bWxpbmtzfHxPYmplY3QuY3JlYXRlKG51bGwpLChzZT1xKS5pZ25vcmU9dGUuaWdub3JlfHxbXSxBcnJheS5pc0FycmF5KHNlLmlnbm9yZSl8fChzZS5pZ25vcmU9W3NlLmlnbm9yZV0pLHNlLmlnbm9yZS5s''@;'; put 'put ''ZW5ndGgmJihzZS5pZ25vcmU9c2UuaWdub3JlLm1hcChZKSkscS5jaGFuZ2VkQ3dkPSExO3ZhciBvZT16LmN3ZCgpO0sodGUsImN3ZCIpPyhxLmN3ZD1rLnJlc29sdmUodGUuY3dkKSxxLmNoYW5nZWRDd2Q9cS5jd2QhPT1vZSk6cS5jd2Q9b2UscS5yb290PXRlLnJvb3R8fGsucmVzb2x2ZShx''@;'; put 'put ''LmN3ZCwiLyIpLHEucm9vdD1rLnJlc29sdmUocS5yb290KSwid2luMzIiPT09ei5wbGF0Zm9ybSYmKHEucm9vdD1xLnJvb3QucmVwbGFjZSgvXFwvZywiLyIpKSxxLmN3ZEFicz1qKHEuY3dkKT9xLmN3ZDpYKHEscS5jd2QpLCJ3aW4zMiI9PT16LnBsYXRmb3JtJiYocS5jd2RBYnM9cS5jd2RB''@;'; put 'put ''YnMucmVwbGFjZSgvXFwvZywiLyIpKSxxLm5vbW91bnQ9ISF0ZS5ub21vdW50LHRlLm5vbmVnYXRlPSEwLHRlLm5vY29tbWVudD0hMCx0ZS5hbGxvd1dpbmRvd3NFc2NhcGU9ITEscS5taW5pbWF0Y2g9bmV3IFYoZWUsdGUpLHEub3B0aW9ucz1xLm1pbmltYXRjaC5vcHRpb25zfSxPLm93blBy''@;'; put 'put ''b3A9SyxPLm1ha2VBYnM9WCxPLmZpbmlzaD1mdW5jdGlvbihxKXtmb3IodmFyIGVlPXEubm91bmlxdWUsdGU9ZWU/W106T2JqZWN0LmNyZWF0ZShudWxsKSxvZT0wLHNlPXEubWF0Y2hlcy5sZW5ndGg7b2U8c2U7b2UrKyl7dmFyIGhlPXEubWF0Y2hlc1tvZV07aWYoaGUmJjAhPT1PYmplY3Qu''@;'; put 'put ''a2V5cyhoZSkubGVuZ3RoKXt2YXIgdWU9T2JqZWN0LmtleXMoaGUpO2VlP3RlLnB1c2guYXBwbHkodGUsdWUpOnVlLmZvckVhY2goZnVuY3Rpb24oRyl7dGVbR109ITB9KX1lbHNlIGlmKHEubm9udWxsKXt2YXIgY2U9cS5taW5pbWF0Y2guZ2xvYlNldFtvZV07ZWU/dGUucHVzaChjZSk6dGVb''@;'; put 'put ''Y2VdPSEwfX1pZihlZXx8KHRlPU9iamVjdC5rZXlzKHRlKSkscS5ub3NvcnR8fCh0ZT10ZS5zb3J0KEIpKSxxLm1hcmspe2ZvcihvZT0wO29lPHRlLmxlbmd0aDtvZSsrKXRlW29lXT1xLl9tYXJrKHRlW29lXSk7cS5ub2RpciYmKHRlPXRlLmZpbHRlcihmdW5jdGlvbihHKXt2YXIgYj0hL1wv''@;'; put 'put ''JC8udGVzdChHKSxEPXEuY2FjaGVbR118fHEuY2FjaGVbWChxLEcpXTtyZXR1cm4gYiYmRCYmKGI9IkRJUiIhPT1EJiYhQXJyYXkuaXNBcnJheShEKSksYn0pKX1xLmlnbm9yZS5sZW5ndGgmJih0ZT10ZS5maWx0ZXIoZnVuY3Rpb24oRyl7cmV0dXJuIVUocSxHKX0pKSxxLmZvdW5kPXRlfSxP''@;'; put 'put ''Lm1hcms9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPVgocSxlZSksb2U9cS5jYWNoZVt0ZV0sc2U9ZWU7aWYob2Upe3ZhciBoZT0iRElSIj09PW9lfHxBcnJheS5pc0FycmF5KG9lKSx1ZT0iLyI9PT1lZS5zbGljZSgtMSk7aWYoaGUmJiF1ZT9zZSs9Ii8iOiFoZSYmdWUmJihzZT1zZS5zbGljZSgw''@;'; put 'put ''LC0xKSksc2UhPT1lZSl7dmFyIGNlPVgocSxzZSk7cS5zdGF0Q2FjaGVbY2VdPXEuc3RhdENhY2hlW3RlXSxxLmNhY2hlW2NlXT1xLmNhY2hlW3RlXX19cmV0dXJuIHNlfSxPLmlzSWdub3JlZD1VLE8uY2hpbGRyZW5JZ25vcmVkPWZ1bmN0aW9uKHEsZWUpe3JldHVybiEhcS5pZ25vcmUubGVu''@;'; put 'put ''Z3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4hKCF0ZS5nbWF0Y2hlcnx8IXRlLmdtYXRjaGVyLm1hdGNoKGVlKSl9KX07dmFyIEk9UigzNzEwKSxrPVIoMjUyMCksRT1SKDExNzEpLGo9Uig0MDk1KSxWPUUuTWluaW1hdGNoO2Z1bmN0aW9uIEIocSxlZSl7cmV0dXJuIHEu''@;'; put 'put ''bG9jYWxlQ29tcGFyZShlZSwiZW4iKX1mdW5jdGlvbiBZKHEpe3ZhciBlZT1udWxsO2lmKCIvKioiPT09cS5zbGljZSgtMykpe3ZhciB0ZT1xLnJlcGxhY2UoLyhcL1wqXCopKyQvLCIiKTtlZT1uZXcgVih0ZSx7ZG90OiEwfSl9cmV0dXJue21hdGNoZXI6bmV3IFYocSx7ZG90OiEwfSksZ21h''@;'; put 'put ''dGNoZXI6ZWV9fWZ1bmN0aW9uIFgocSxlZSl7dmFyIHRlPWVlO3JldHVybiB0ZT0iLyI9PT1lZS5jaGFyQXQoMCk/ay5qb2luKHEucm9vdCxlZSk6aihlZSl8fCIiPT09ZWU/ZWU6cS5jaGFuZ2VkQ3dkP2sucmVzb2x2ZShxLmN3ZCxlZSk6ay5yZXNvbHZlKGVlKSwid2luMzIiPT09ei5wbGF0''@;'; put 'put ''Zm9ybSYmKHRlPXRlLnJlcGxhY2UoL1xcL2csIi8iKSksdGV9ZnVuY3Rpb24gVShxLGVlKXtyZXR1cm4hIXEuaWdub3JlLmxlbmd0aCYmcS5pZ25vcmUuc29tZShmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLm1hdGNoZXIubWF0Y2goZWUpfHwhKCF0ZS5nbWF0Y2hlcnx8IXRlLmdtYXRjaGVyLm1h''@;'; put 'put ''dGNoKGVlKSl9KX19LDI4ODQ6KE0sTyxSKT0+e3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpO00uZXhwb3J0cz11ZTt2YXIgST1SKDczMzQpLGs9UigxMTcxKSxFPVIoNTcxNyksaj1SKDcxODcpLkV2ZW50RW1pdHRlcixWPVIoMjUyMCksQj1SKDkyODIpLFk9Uig0MDk1KSxYPVIoNDc1MSksVT1S''@;'; put 'put ''KDY3NzIpLHE9VS5zZXRvcHRzLGVlPVUub3duUHJvcCx0ZT1SKDc4NDQpLG9lPShSKDk1MzkpLFUuY2hpbGRyZW5JZ25vcmVkKSxzZT1VLmlzSWdub3JlZCxoZT1SKDc3OCk7ZnVuY3Rpb24gdWUoYixELEgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEJiYoSD1ELEQ9e30pLER8fChEPXt9KSxE''@;'; put 'put ''LnN5bmMpe2lmKEgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iIik7cmV0dXJuIFgoYixEKX1yZXR1cm4gbmV3IEcoYixELEgpfXVlLnN5bmM9WDt2YXIgY2U9dWUuR2xvYlN5bmM9WC5HbG9iU3luYztmdW5jdGlvbiBHKGIsRCxIKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgRCYmKEg9RCxEPW51bGwpLEQmJkQuc3luYyl7aWYoSCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gbmV3IGNlKGIsRCl9aWYoISh0aGlzIGluc3RhbmNlb2YgRykpcmV0dXJuIG5ldyBHKGIsRCxIKTtx''@;'; put 'put ''KHRoaXMsYixEKSx0aGlzLl9kaWRSZWFsUGF0aD0hMTt2YXIgTj10aGlzLm1pbmltYXRjaC5zZXQubGVuZ3RoO3RoaXMubWF0Y2hlcz1uZXcgQXJyYXkoTiksImZ1bmN0aW9uIj09dHlwZW9mIEgmJihIPWhlKEgpLHRoaXMub24oImVycm9yIixIKSx0aGlzLm9uKCJlbmQiLGZ1bmN0aW9uKHAp''@;'; put 'put ''e0gobnVsbCxwKX0pKTt2YXIgZz10aGlzO2lmKHRoaXMuX3Byb2Nlc3Npbmc9MCx0aGlzLl9lbWl0UXVldWU9W10sdGhpcy5fcHJvY2Vzc1F1ZXVlPVtdLHRoaXMucGF1c2VkPSExLHRoaXMubm9wcm9jZXNzKXJldHVybiB0aGlzO2lmKDA9PT1OKXJldHVybiB2KCk7Zm9yKHZhciBDPSEwLFM9''@;'; put 'put ''MDtTPE47UysrKXRoaXMuX3Byb2Nlc3ModGhpcy5taW5pbWF0Y2guc2V0W1NdLFMsITEsdik7ZnVuY3Rpb24gdigpey0tZy5fcHJvY2Vzc2luZyxnLl9wcm9jZXNzaW5nPD0wJiYoQz96Lm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5fZmluaXNoKCl9KTpnLl9maW5pc2goKSl9Qz0hMX11ZS5nbG9i''@;'; put 'put ''PXVlLHVlLmhhc01hZ2ljPWZ1bmN0aW9uKGIsRCl7dmFyIEg9ZnVuY3Rpb24oQyxTKXtpZihudWxsPT09U3x8Im9iamVjdCIhPXR5cGVvZiBTKXJldHVybiBDO2Zvcih2YXIgdj1PYmplY3Qua2V5cyhTKSxwPXYubGVuZ3RoO3AtLTspQ1t2W3BdXT1TW3ZbcF1dO3JldHVybiBDfSh7fSxEKTtI''@;'; put 'put ''Lm5vcHJvY2Vzcz0hMDt2YXIgTj1uZXcgRyhiLEgpLm1pbmltYXRjaC5zZXQ7aWYoIWIpcmV0dXJuITE7aWYoTi5sZW5ndGg+MSlyZXR1cm4hMDtmb3IodmFyIGc9MDtnPE5bMF0ubGVuZ3RoO2crKylpZigic3RyaW5nIiE9dHlwZW9mIE5bMF1bZ10pcmV0dXJuITA7cmV0dXJuITF9LHVlLkds''@;'; put 'put ''b2I9RyxFKEcsaiksRy5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe2lmKEIodGhpcyBpbnN0YW5jZW9mIEcpLCF0aGlzLmFib3J0ZWQpe2lmKHRoaXMucmVhbHBhdGgmJiF0aGlzLl9kaWRSZWFscGF0aClyZXR1cm4gdGhpcy5fcmVhbHBhdGgoKTtVLmZpbmlzaCh0aGlzKSx0aGlzLmVt''@;'; put 'put ''aXQoImVuZCIsdGhpcy5mb3VuZCl9fSxHLnByb3RvdHlwZS5fcmVhbHBhdGg9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGlkUmVhbHBhdGgpe3RoaXMuX2RpZFJlYWxwYXRoPSEwO3ZhciBiPXRoaXMubWF0Y2hlcy5sZW5ndGg7aWYoMD09PWIpcmV0dXJuIHRoaXMuX2ZpbmlzaCgpO2Zvcih2YXIg''@;'; put 'put ''RD10aGlzLEg9MDtIPHRoaXMubWF0Y2hlcy5sZW5ndGg7SCsrKXRoaXMuX3JlYWxwYXRoU2V0KEgsTil9ZnVuY3Rpb24gTigpezA9PS0tYiYmRC5fZmluaXNoKCl9fSxHLnByb3RvdHlwZS5fcmVhbHBhdGhTZXQ9ZnVuY3Rpb24oYixEKXt2YXIgSD10aGlzLm1hdGNoZXNbYl07aWYoIUgpcmV0''@;'; put 'put ''dXJuIEQoKTt2YXIgTj1PYmplY3Qua2V5cyhIKSxnPXRoaXMsQz1OLmxlbmd0aDtpZigwPT09QylyZXR1cm4gRCgpO3ZhciBTPXRoaXMubWF0Y2hlc1tiXT1PYmplY3QuY3JlYXRlKG51bGwpO04uZm9yRWFjaChmdW5jdGlvbih2LHApe3Y9Zy5fbWFrZUFicyh2KSxJLnJlYWxwYXRoKHYsZy5y''@;'; put 'put ''ZWFscGF0aENhY2hlLGZ1bmN0aW9uKHcsSil7dz8ic3RhdCI9PT13LnN5c2NhbGw/U1t2XT0hMDpnLmVtaXQoImVycm9yIix3KTpTW0pdPSEwLDA9PS0tQyYmKGcubWF0Y2hlc1tiXT1TLEQoKSl9KX0pfSxHLnByb3RvdHlwZS5fbWFyaz1mdW5jdGlvbihiKXtyZXR1cm4gVS5tYXJrKHRoaXMs''@;'; put 'put ''Yil9LEcucHJvdG90eXBlLl9tYWtlQWJzPWZ1bmN0aW9uKGIpe3JldHVybiBVLm1ha2VBYnModGhpcyxiKX0sRy5wcm90b3R5cGUuYWJvcnQ9ZnVuY3Rpb24oKXt0aGlzLmFib3J0ZWQ9ITAsdGhpcy5lbWl0KCJhYm9ydCIpfSxHLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMucGF1''@;'; put 'put ''c2VkfHwodGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0KCJwYXVzZSIpKX0sRy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5wYXVzZWQpe2lmKHRoaXMuZW1pdCgicmVzdW1lIiksdGhpcy5wYXVzZWQ9ITEsdGhpcy5fZW1pdFF1ZXVlLmxlbmd0aCl7dmFyIGI9dGhpcy5fZW1p''@;'; put 'put ''dFF1ZXVlLnNsaWNlKDApO3RoaXMuX2VtaXRRdWV1ZS5sZW5ndGg9MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIEg9YltEXTt0aGlzLl9lbWl0TWF0Y2goSFswXSxIWzFdKX19aWYodGhpcy5fcHJvY2Vzc1F1ZXVlLmxlbmd0aCl7dmFyIE49dGhpcy5fcHJvY2Vzc1F1ZXVlLnNs''@;'; put 'put ''aWNlKDApO2Zvcih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoPTAsRD0wO0Q8Ti5sZW5ndGg7RCsrKXt2YXIgZz1OW0RdO3RoaXMuX3Byb2Nlc3NpbmctLSx0aGlzLl9wcm9jZXNzKGdbMF0sZ1sxXSxnWzJdLGdbM10pfX19fSxHLnByb3RvdHlwZS5fcHJvY2Vzcz1mdW5jdGlvbihiLEQsSCxO''@;'; put 'put ''KXtpZihCKHRoaXMgaW5zdGFuY2VvZiBHKSxCKCJmdW5jdGlvbiI9PXR5cGVvZiBOKSwhdGhpcy5hYm9ydGVkKWlmKHRoaXMuX3Byb2Nlc3NpbmcrKyx0aGlzLnBhdXNlZCl0aGlzLl9wcm9jZXNzUXVldWUucHVzaChbYixELEgsTl0pO2Vsc2V7Zm9yKHZhciBnLEM9MDsic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGJbQ107KUMrKztzd2l0Y2goQyl7Y2FzZSBiLmxlbmd0aDpyZXR1cm4gdm9pZCB0aGlzLl9wcm9jZXNzU2ltcGxlKGIuam9pbigiLyIpLEQsTik7Y2FzZSAwOmc9bnVsbDticmVhaztkZWZhdWx0Omc9Yi5zbGljZSgwLEMpLmpvaW4oIi8iKX12YXIgUyx2PWIuc2xpY2UoQyk7bnVsbD09''@;'; put 'put ''PWc/Uz0iLiI6KChZKGcpfHxZKGIubWFwKGZ1bmN0aW9uKHcpe3JldHVybiJzdHJpbmciPT10eXBlb2Ygdz93OiJbKl0ifSkuam9pbigiLyIpKSkmJihnJiZZKGcpfHwoZz0iLyIrZykpLFM9Zyk7dmFyIHA9dGhpcy5fbWFrZUFicyhTKTtpZihvZSh0aGlzLFMpKXJldHVybiBOKCk7dlswXT09''@;'; put 'put ''PWsuR0xPQlNUQVI/dGhpcy5fcHJvY2Vzc0dsb2JTdGFyKGcsUyxwLHYsRCxILE4pOnRoaXMuX3Byb2Nlc3NSZWFkZGlyKGcsUyxwLHYsRCxILE4pfX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMpe3ZhciB2PXRoaXM7dGhpcy5fcmVhZGRpcihI''@;'; put 'put ''LEMsZnVuY3Rpb24ocCx3KXtyZXR1cm4gdi5fcHJvY2Vzc1JlYWRkaXIyKGIsRCxILE4sZyxDLHcsUyl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NSZWFkZGlyMj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTLHYpe2lmKCFTKXJldHVybiB2KCk7Zm9yKHZhciBwPU5bMF0sdz0hIXRoaXMubWluaW1h''@;'; put 'put ''dGNoLm5lZ2F0ZSxuZT10aGlzLmRvdHx8Ii4iPT09cC5fZ2xvYi5jaGFyQXQoMCksZGU9W10sZmU9MDtmZTxTLmxlbmd0aDtmZSsrKSgiLiIhPT0oTGU9U1tmZV0pLmNoYXJBdCgwKXx8bmUpJiYodyYmIWI/IUxlLm1hdGNoKHApOkxlLm1hdGNoKHApKSYmZGUucHVzaChMZSk7dmFyIHhlPWRl''@;'; put 'put ''Lmxlbmd0aDtpZigwPT09eGUpcmV0dXJuIHYoKTtpZigxPT09Ti5sZW5ndGgmJiF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpe2Zvcih0aGlzLm1hdGNoZXNbZ118fCh0aGlzLm1hdGNoZXNbZ109T2JqZWN0LmNyZWF0ZShudWxsKSksZmU9MDtmZTx4ZTtmZSsrKXt2YXIgTGU9ZGVbZmVdO2ImJihM''@;'; put 'put ''ZT0iLyIhPT1iP2IrIi8iK0xlOmIrTGUpLCIvIiE9PUxlLmNoYXJBdCgwKXx8dGhpcy5ub21vdW50fHwoTGU9Vi5qb2luKHRoaXMucm9vdCxMZSkpLHRoaXMuX2VtaXRNYXRjaChnLExlKX1yZXR1cm4gdigpfWZvcihOLnNoaWZ0KCksZmU9MDtmZTx4ZTtmZSsrKUxlPWRlW2ZlXSxiJiYoTGU9''@;'; put 'put ''Ii8iIT09Yj9iKyIvIitMZTpiK0xlKSx0aGlzLl9wcm9jZXNzKFtMZV0uY29uY2F0KE4pLGcsQyx2KTt2KCl9LEcucHJvdG90eXBlLl9lbWl0TWF0Y2g9ZnVuY3Rpb24oYixEKXtpZighdGhpcy5hYm9ydGVkJiYhc2UodGhpcyxEKSlpZih0aGlzLnBhdXNlZCl0aGlzLl9lbWl0UXVldWUucHVz''@;'; put 'put ''aChbYixEXSk7ZWxzZXt2YXIgSD1ZKEQpP0Q6dGhpcy5fbWFrZUFicyhEKTtpZih0aGlzLm1hcmsmJihEPXRoaXMuX21hcmsoRCkpLHRoaXMuYWJzb2x1dGUmJihEPUgpLCF0aGlzLm1hdGNoZXNbYl1bRF0pe2lmKHRoaXMubm9kaXIpe3ZhciBOPXRoaXMuY2FjaGVbSF07aWYoIkRJUiI9PT1O''@;'; put 'put ''fHxBcnJheS5pc0FycmF5KE4pKXJldHVybn10aGlzLm1hdGNoZXNbYl1bRF09ITA7dmFyIGc9dGhpcy5zdGF0Q2FjaGVbSF07ZyYmdGhpcy5lbWl0KCJzdGF0IixELGcpLHRoaXMuZW1pdCgibWF0Y2giLEQpfX19LEcucHJvdG90eXBlLl9yZWFkZGlySW5HbG9iU3Rhcj1mdW5jdGlvbihiLEQp''@;'; put 'put ''e2lmKCF0aGlzLmFib3J0ZWQpe2lmKHRoaXMuZm9sbG93KXJldHVybiB0aGlzLl9yZWFkZGlyKGIsITEsRCk7dmFyIEg9dGhpcyxOPXRlKCJsc3RhdFwwIitiLGZ1bmN0aW9uKGcsQyl7aWYoZyYmIkVOT0VOVCI9PT1nLmNvZGUpcmV0dXJuIEQoKTt2YXIgUz1DJiZDLmlzU3ltYm9saWNMaW5r''@;'; put 'put ''KCk7SC5zeW1saW5rc1tiXT1TLFN8fCFDfHxDLmlzRGlyZWN0b3J5KCk/SC5fcmVhZGRpcihiLCExLEQpOihILmNhY2hlW2JdPSJGSUxFIixEKCkpfSk7TiYmSC5mcy5sc3RhdChiLE4pfX0sRy5wcm90b3R5cGUuX3JlYWRkaXI9ZnVuY3Rpb24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQmJihI''@;'; put 'put ''PXRlKCJyZWFkZGlyXDAiK2IrIlwwIitELEgpKSl7aWYoRCYmIWVlKHRoaXMuc3ltbGlua3MsYikpcmV0dXJuIHRoaXMuX3JlYWRkaXJJbkdsb2JTdGFyKGIsSCk7aWYoZWUodGhpcy5jYWNoZSxiKSl7dmFyIE49dGhpcy5jYWNoZVtiXTtpZighTnx8IkZJTEUiPT09TilyZXR1cm4gSCgpO2lm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkoTikpcmV0dXJuIEgobnVsbCxOKX10aGlzLmZzLnJlYWRkaXIoYiwoZz10aGlzLEM9YixTPUgsZnVuY3Rpb24odixwKXt2P2cuX3JlYWRkaXJFcnJvcihDLHYsUyk6Zy5fcmVhZGRpckVudHJpZXMoQyxwLFMpfSkpfXZhciBnLEMsU30sRy5wcm90b3R5cGUuX3JlYWRk''@;'; put 'put ''aXJFbnRyaWVzPWZ1bmN0aW9uKGIsRCxIKXtpZighdGhpcy5hYm9ydGVkKXtpZighdGhpcy5tYXJrJiYhdGhpcy5zdGF0KWZvcih2YXIgTj0wO048RC5sZW5ndGg7TisrKXt2YXIgZz1EW05dO3RoaXMuY2FjaGVbZz0iLyI9PT1iP2IrZzpiKyIvIitnXT0hMH1yZXR1cm4gdGhpcy5jYWNoZVti''@;'; put 'put ''XT1ELEgobnVsbCxEKX19LEcucHJvdG90eXBlLl9yZWFkZGlyRXJyb3I9ZnVuY3Rpb24oYixELEgpe2lmKCF0aGlzLmFib3J0ZWQpe3N3aXRjaChELmNvZGUpe2Nhc2UiRU5PVFNVUCI6Y2FzZSJFTk9URElSIjp2YXIgTj10aGlzLl9tYWtlQWJzKGIpO2lmKHRoaXMuY2FjaGVbTl09IkZJTEUi''@;'; put 'put ''LE49PT10aGlzLmN3ZEFicyl7dmFyIGc9bmV3IEVycm9yKEQuY29kZSsiIGludmFsaWQgY3dkICIrdGhpcy5jd2QpO2cucGF0aD10aGlzLmN3ZCxnLmNvZGU9RC5jb2RlLHRoaXMuZW1pdCgiZXJyb3IiLGcpLHRoaXMuYWJvcnQoKX1icmVhaztjYXNlIkVOT0VOVCI6Y2FzZSJFTE9PUCI6Y2Fz''@;'; put 'put ''ZSJFTkFNRVRPT0xPTkciOmNhc2UiVU5LTk9XTiI6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGIpXT0hMTticmVhaztkZWZhdWx0OnRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhiKV09ITEsdGhpcy5zdHJpY3QmJih0aGlzLmVtaXQoImVycm9yIixEKSx0aGlzLmFib3J0KCkpLHRoaXMuc2ls''@;'; put 'put ''ZW50fHxLLmVycm9yKCJnbG9iIGVycm9yIixEKX1yZXR1cm4gSCgpfX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3Rhcj1mdW5jdGlvbihiLEQsSCxOLGcsQyxTKXt2YXIgdj10aGlzO3RoaXMuX3JlYWRkaXIoSCxDLGZ1bmN0aW9uKHAsdyl7di5fcHJvY2Vzc0dsb2JTdGFyMihiLEQsSCxO''@;'; put 'put ''LGcsQyx3LFMpfSl9LEcucHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXIyPWZ1bmN0aW9uKGIsRCxILE4sZyxDLFMsdil7aWYoIVMpcmV0dXJuIHYoKTt2YXIgcD1OLnNsaWNlKDEpLHc9Yj9bYl06W10sSj13LmNvbmNhdChwKTt0aGlzLl9wcm9jZXNzKEosZywhMSx2KTt2YXIgZGU9Uy5sZW5n''@;'; put 'put ''dGg7aWYodGhpcy5zeW1saW5rc1tIXSYmQylyZXR1cm4gdigpO2Zvcih2YXIgZmU9MDtmZTxkZTtmZSsrKWlmKCIuIiE9PVNbZmVdLmNoYXJBdCgwKXx8dGhpcy5kb3Qpe3ZhciB4ZT13LmNvbmNhdChTW2ZlXSxwKTt0aGlzLl9wcm9jZXNzKHhlLGcsITAsdik7dmFyIExlPXcuY29uY2F0KFNb''@;'; put 'put ''ZmVdLE4pO3RoaXMuX3Byb2Nlc3MoTGUsZywhMCx2KX12KCl9LEcucHJvdG90eXBlLl9wcm9jZXNzU2ltcGxlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzO3RoaXMuX3N0YXQoYixmdW5jdGlvbihnLEMpe04uX3Byb2Nlc3NTaW1wbGUyKGIsRCxnLEMsSCl9KX0sRy5wcm90b3R5cGUuX3By''@;'; put 'put ''b2Nlc3NTaW1wbGUyPWZ1bmN0aW9uKGIsRCxILE4sZyl7aWYodGhpcy5tYXRjaGVzW0RdfHwodGhpcy5tYXRjaGVzW0RdPU9iamVjdC5jcmVhdGUobnVsbCkpLCFOKXJldHVybiBnKCk7aWYoYiYmWShiKSYmIXRoaXMubm9tb3VudCl7dmFyIEM9L1tcL1xcXSQvLnRlc3QoYik7Ii8iPT09Yi5j''@;'; put 'put ''aGFyQXQoMCk/Yj1WLmpvaW4odGhpcy5yb290LGIpOihiPVYucmVzb2x2ZSh0aGlzLnJvb3QsYiksQyYmKGIrPSIvIikpfSJ3aW4zMiI9PT16LnBsYXRmb3JtJiYoYj1iLnJlcGxhY2UoL1xcL2csIi8iKSksdGhpcy5fZW1pdE1hdGNoKEQsYiksZygpfSxHLnByb3RvdHlwZS5fc3RhdD1mdW5j''@;'; put 'put ''dGlvbihiLEQpe3ZhciBIPXRoaXMuX21ha2VBYnMoYiksTj0iLyI9PT1iLnNsaWNlKC0xKTtpZihiLmxlbmd0aD50aGlzLm1heExlbmd0aClyZXR1cm4gRCgpO2lmKCF0aGlzLnN0YXQmJmVlKHRoaXMuY2FjaGUsSCkpe3ZhciBnPXRoaXMuY2FjaGVbSF07aWYoQXJyYXkuaXNBcnJheShnKSYm''@;'; put 'put ''KGc9IkRJUiIpLCFOfHwiRElSIj09PWcpcmV0dXJuIEQobnVsbCxnKTtpZihOJiYiRklMRSI9PT1nKXJldHVybiBEKCl9dmFyIEM9dGhpcy5zdGF0Q2FjaGVbSF07aWYodm9pZCAwIT09Qyl7aWYoITE9PT1DKXJldHVybiBEKG51bGwsQyk7dmFyIFM9Qy5pc0RpcmVjdG9yeSgpPyJESVIiOiJG''@;'; put 'put ''SUxFIjtyZXR1cm4gTiYmIkZJTEUiPT09Uz9EKCk6RChudWxsLFMsQyl9dmFyIHY9dGhpcyxwPXRlKCJzdGF0XDAiK0gsZnVuY3Rpb24odyxKKXtpZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIHYuZnMuc3RhdChILGZ1bmN0aW9uKG5lLGRlKXtuZT92Ll9zdGF0MihiLEgsbnVsbCxK''@;'; put 'put ''LEQpOnYuX3N0YXQyKGIsSCxuZSxkZSxEKX0pO3YuX3N0YXQyKGIsSCx3LEosRCl9KTtwJiZ2LmZzLmxzdGF0KEgscCl9LEcucHJvdG90eXBlLl9zdGF0Mj1mdW5jdGlvbihiLEQsSCxOLGcpe2lmKEgmJigiRU5PRU5UIj09PUguY29kZXx8IkVOT1RESVIiPT09SC5jb2RlKSlyZXR1cm4gdGhp''@;'; put 'put ''cy5zdGF0Q2FjaGVbRF09ITEsZygpO3ZhciBDPSIvIj09PWIuc2xpY2UoLTEpO2lmKHRoaXMuc3RhdENhY2hlW0RdPU4sIi8iPT09RC5zbGljZSgtMSkmJk4mJiFOLmlzRGlyZWN0b3J5KCkpcmV0dXJuIGcobnVsbCwhMSxOKTt2YXIgUz0hMDtyZXR1cm4gTiYmKFM9Ti5pc0RpcmVjdG9yeSgp''@;'; put 'put ''PyJESVIiOiJGSUxFIiksdGhpcy5jYWNoZVtEXT10aGlzLmNhY2hlW0RdfHxTLEMmJiJGSUxFIj09PVM/ZygpOmcobnVsbCxTLE4pfX0sNDc1MTooTSxPLFIpPT57dmFyIHo9Uig1MTA4KSxLPVIoNDE1NSk7TS5leHBvcnRzPWVlLGVlLkdsb2JTeW5jPXRlO3ZhciBJPVIoNzMzNCksaz1SKDEx''@;'; put 'put ''NzEpLEU9KFIoMjg4NCksUig5NTM5KSxSKDI1MjApKSxqPVIoOTI4MiksVj1SKDQwOTUpLEI9Uig2NzcyKSxZPUIuc2V0b3B0cyxYPUIub3duUHJvcCxVPUIuY2hpbGRyZW5JZ25vcmVkLHE9Qi5pc0lnbm9yZWQ7ZnVuY3Rpb24gZWUob2Usc2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXx8''@;'; put 'put ''Mz09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgcHJvdmlkZWQgdG8gc3luYyBnbG9iXG5TZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pc2FhY3Mvbm9kZS1nbG9iL2lzc3Vlcy8xNjciKTtyZXR1cm4gbmV3IHRlKG9lLHNlKS5mb3VuZH1mdW5jdGlvbiB0''@;'; put 'put ''ZShvZSxzZSl7aWYoIW9lKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIHBhdHRlcm4iKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fDM9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYlxuU2VlOiBodHRw''@;'; put 'put ''czovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvMTY3Iik7aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVybiBuZXcgdGUob2Usc2UpO2lmKFkodGhpcyxvZSxzZSksdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7dmFyIGhlPXRoaXMubWluaW1hdGNoLnNldC5sZW5n''@;'; put 'put ''dGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShoZSk7Zm9yKHZhciB1ZT0wO3VlPGhlO3VlKyspdGhpcy5fcHJvY2Vzcyh0aGlzLm1pbmltYXRjaC5zZXRbdWVdLHVlLCExKTt0aGlzLl9maW5pc2goKX10ZS5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe2lmKGoub2sodGhpcyBpbnN0YW5j''@;'; put 'put ''ZW9mIHRlKSx0aGlzLnJlYWxwYXRoKXt2YXIgb2U9dGhpczt0aGlzLm1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbihzZSxoZSl7dmFyIHVlPW9lLm1hdGNoZXNbaGVdPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBjZSBpbiBzZSl0cnl7Y2U9b2UuX21ha2VBYnMoY2UpLHVlW0kucmVhbHBh''@;'; put 'put ''dGhTeW5jKGNlLG9lLnJlYWxwYXRoQ2FjaGUpXT0hMH1jYXRjaChHKXtpZigic3RhdCIhPT1HLnN5c2NhbGwpdGhyb3cgRzt1ZVtvZS5fbWFrZUFicyhjZSldPSEwfX0pfUIuZmluaXNoKHRoaXMpfSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3M9ZnVuY3Rpb24ob2Usc2UsaGUpe2oub2sodGhpcyBp''@;'; put 'put ''bnN0YW5jZW9mIHRlKTtmb3IodmFyIHVlLGNlPTA7InN0cmluZyI9PXR5cGVvZiBvZVtjZV07KWNlKys7c3dpdGNoKGNlKXtjYXNlIG9lLmxlbmd0aDpyZXR1cm4gdm9pZCB0aGlzLl9wcm9jZXNzU2ltcGxlKG9lLmpvaW4oIi8iKSxzZSk7Y2FzZSAwOnVlPW51bGw7YnJlYWs7ZGVmYXVsdDp1''@;'; put 'put ''ZT1vZS5zbGljZSgwLGNlKS5qb2luKCIvIil9dmFyIEcsYj1vZS5zbGljZShjZSk7bnVsbD09PXVlP0c9Ii4iOigoVih1ZSl8fFYob2UubWFwKGZ1bmN0aW9uKEgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgSD9IOiJbKl0ifSkuam9pbigiLyIpKSkmJih1ZSYmVih1ZSl8fCh1ZT0iLyIrdWUp''@;'; put 'put ''KSxHPXVlKTt2YXIgRD10aGlzLl9tYWtlQWJzKEcpO1UodGhpcyxHKXx8KGJbMF09PT1rLkdMT0JTVEFSP3RoaXMuX3Byb2Nlc3NHbG9iU3Rhcih1ZSxHLEQsYixzZSxoZSk6dGhpcy5fcHJvY2Vzc1JlYWRkaXIodWUsRyxELGIsc2UsaGUpKX0sdGUucHJvdG90eXBlLl9wcm9jZXNzUmVhZGRp''@;'; put 'put ''cj1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXt2YXIgYj10aGlzLl9yZWFkZGlyKGhlLEcpO2lmKGIpe2Zvcih2YXIgRD11ZVswXSxIPSEhdGhpcy5taW5pbWF0Y2gubmVnYXRlLGc9dGhpcy5kb3R8fCIuIj09PUQuX2dsb2IuY2hhckF0KDApLEM9W10sUz0wO1M8Yi5sZW5ndGg7UysrKSgi''@;'; put 'put ''LiIhPT0odz1iW1NdKS5jaGFyQXQoMCl8fGcpJiYoSCYmIW9lPyF3Lm1hdGNoKEQpOncubWF0Y2goRCkpJiZDLnB1c2godyk7dmFyIHY9Qy5sZW5ndGg7aWYoMCE9PXYpaWYoMSE9PXVlLmxlbmd0aHx8dGhpcy5tYXJrfHx0aGlzLnN0YXQpZm9yKHVlLnNoaWZ0KCksUz0wO1M8djtTKyspdz1D''@;'; put 'put ''W1NdLHRoaXMuX3Byb2Nlc3MoKG9lP1tvZSx3XTpbd10pLmNvbmNhdCh1ZSksY2UsRyk7ZWxzZSBmb3IodGhpcy5tYXRjaGVzW2NlXXx8KHRoaXMubWF0Y2hlc1tjZV09T2JqZWN0LmNyZWF0ZShudWxsKSksUz0wO1M8djtTKyspe3ZhciB3PUNbU107b2UmJih3PSIvIiE9PW9lLnNsaWNlKC0x''@;'; put 'put ''KT9vZSsiLyIrdzpvZSt3KSwiLyIhPT13LmNoYXJBdCgwKXx8dGhpcy5ub21vdW50fHwodz1FLmpvaW4odGhpcy5yb290LHcpKSx0aGlzLl9lbWl0TWF0Y2goY2Usdyl9fX0sdGUucHJvdG90eXBlLl9lbWl0TWF0Y2g9ZnVuY3Rpb24ob2Usc2Upe2lmKCFxKHRoaXMsc2UpKXt2YXIgaGU9dGhp''@;'; put 'put ''cy5fbWFrZUFicyhzZSk7aWYodGhpcy5tYXJrJiYoc2U9dGhpcy5fbWFyayhzZSkpLHRoaXMuYWJzb2x1dGUmJihzZT1oZSksIXRoaXMubWF0Y2hlc1tvZV1bc2VdKXtpZih0aGlzLm5vZGlyKXt2YXIgdWU9dGhpcy5jYWNoZVtoZV07aWYoIkRJUiI9PT11ZXx8QXJyYXkuaXNBcnJheSh1ZSkp''@;'; put 'put ''cmV0dXJufXRoaXMubWF0Y2hlc1tvZV1bc2VdPSEwLHRoaXMuc3RhdCYmdGhpcy5fc3RhdChzZSl9fX0sdGUucHJvdG90eXBlLl9yZWFkZGlySW5HbG9iU3Rhcj1mdW5jdGlvbihvZSl7aWYodGhpcy5mb2xsb3cpcmV0dXJuIHRoaXMuX3JlYWRkaXIob2UsITEpO3ZhciBzZSxoZTt0cnl7aGU9''@;'; put 'put ''dGhpcy5mcy5sc3RhdFN5bmMob2UpfWNhdGNoKGNlKXtpZigiRU5PRU5UIj09PWNlLmNvZGUpcmV0dXJuIG51bGx9dmFyIHVlPWhlJiZoZS5pc1N5bWJvbGljTGluaygpO3JldHVybiB0aGlzLnN5bWxpbmtzW29lXT11ZSx1ZXx8IWhlfHxoZS5pc0RpcmVjdG9yeSgpP3NlPXRoaXMuX3JlYWRk''@;'; put 'put ''aXIob2UsITEpOnRoaXMuY2FjaGVbb2VdPSJGSUxFIixzZX0sdGUucHJvdG90eXBlLl9yZWFkZGlyPWZ1bmN0aW9uKG9lLHNlKXtpZihzZSYmIVgodGhpcy5zeW1saW5rcyxvZSkpcmV0dXJuIHRoaXMuX3JlYWRkaXJJbkdsb2JTdGFyKG9lKTtpZihYKHRoaXMuY2FjaGUsb2UpKXt2YXIgaGU9''@;'; put 'put ''dGhpcy5jYWNoZVtvZV07aWYoIWhlfHwiRklMRSI9PT1oZSlyZXR1cm4gbnVsbDtpZihBcnJheS5pc0FycmF5KGhlKSlyZXR1cm4gaGV9dHJ5e3JldHVybiB0aGlzLl9yZWFkZGlyRW50cmllcyhvZSx0aGlzLmZzLnJlYWRkaXJTeW5jKG9lKSl9Y2F0Y2godWUpe3JldHVybiB0aGlzLl9yZWFk''@;'; put 'put ''ZGlyRXJyb3Iob2UsdWUpLG51bGx9fSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJFbnRyaWVzPWZ1bmN0aW9uKG9lLHNlKXtpZighdGhpcy5tYXJrJiYhdGhpcy5zdGF0KWZvcih2YXIgaGU9MDtoZTxzZS5sZW5ndGg7aGUrKyl7dmFyIHVlPXNlW2hlXTt0aGlzLmNhY2hlW3VlPSIvIj09PW9lP29l''@;'; put 'put ''K3VlOm9lKyIvIit1ZV09ITB9cmV0dXJuIHRoaXMuY2FjaGVbb2VdPXNlLHNlfSx0ZS5wcm90b3R5cGUuX3JlYWRkaXJFcnJvcj1mdW5jdGlvbihvZSxzZSl7c3dpdGNoKHNlLmNvZGUpe2Nhc2UiRU5PVFNVUCI6Y2FzZSJFTk9URElSIjp2YXIgaGU9dGhpcy5fbWFrZUFicyhvZSk7aWYodGhp''@;'; put 'put ''cy5jYWNoZVtoZV09IkZJTEUiLGhlPT09dGhpcy5jd2RBYnMpe3ZhciB1ZT1uZXcgRXJyb3Ioc2UuY29kZSsiIGludmFsaWQgY3dkICIrdGhpcy5jd2QpO3Rocm93IHVlLnBhdGg9dGhpcy5jd2QsdWUuY29kZT1zZS5jb2RlLHVlfWJyZWFrO2Nhc2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNl''@;'; put 'put ''IkVOQU1FVE9PTE9ORyI6Y2FzZSJVTktOT1dOIjp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMob2UpXT0hMTticmVhaztkZWZhdWx0OmlmKHRoaXMuY2FjaGVbdGhpcy5fbWFrZUFicyhvZSldPSExLHRoaXMuc3RyaWN0KXRocm93IHNlO3RoaXMuc2lsZW50fHx6LmVycm9yKCJnbG9iIGVycm9y''@;'; put 'put ''IixzZSl9fSx0ZS5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3Rhcj1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHKXt2YXIgYj10aGlzLl9yZWFkZGlyKGhlLEcpO2lmKGIpe3ZhciBEPXVlLnNsaWNlKDEpLEg9b2U/W29lXTpbXSxOPUguY29uY2F0KEQpO3RoaXMuX3Byb2Nlc3MoTixjZSwhMSk7''@;'; put 'put ''dmFyIGc9Yi5sZW5ndGg7aWYoIXRoaXMuc3ltbGlua3NbaGVdfHwhRylmb3IodmFyIEM9MDtDPGc7QysrKWlmKCIuIiE9PWJbQ10uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIFM9SC5jb25jYXQoYltDXSxEKTt0aGlzLl9wcm9jZXNzKFMsY2UsITApO3ZhciB2PUguY29uY2F0KGJbQ10sdWUp''@;'; put 'put ''O3RoaXMuX3Byb2Nlc3ModixjZSwhMCl9fX0sdGUucHJvdG90eXBlLl9wcm9jZXNzU2ltcGxlPWZ1bmN0aW9uKG9lLHNlKXt2YXIgaGU9dGhpcy5fc3RhdChvZSk7aWYodGhpcy5tYXRjaGVzW3NlXXx8KHRoaXMubWF0Y2hlc1tzZV09T2JqZWN0LmNyZWF0ZShudWxsKSksaGUpe2lmKG9lJiZW''@;'; put 'put ''KG9lKSYmIXRoaXMubm9tb3VudCl7dmFyIHVlPS9bXC9cXF0kLy50ZXN0KG9lKTsiLyI9PT1vZS5jaGFyQXQoMCk/b2U9RS5qb2luKHRoaXMucm9vdCxvZSk6KG9lPUUucmVzb2x2ZSh0aGlzLnJvb3Qsb2UpLHVlJiYob2UrPSIvIikpfSJ3aW4zMiI9PT1LLnBsYXRmb3JtJiYob2U9b2UucmVw''@;'; put 'put ''bGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goc2Usb2UpfX0sdGUucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9uKG9lKXt2YXIgc2U9dGhpcy5fbWFrZUFicyhvZSksaGU9Ii8iPT09b2Uuc2xpY2UoLTEpO2lmKG9lLmxlbmd0aD50aGlzLm1heExlbmd0aClyZXR1cm4hMTtpZighdGhp''@;'; put 'put ''cy5zdGF0JiZYKHRoaXMuY2FjaGUsc2UpKXt2YXIgdWU9dGhpcy5jYWNoZVtzZV07aWYoQXJyYXkuaXNBcnJheSh1ZSkmJih1ZT0iRElSIiksIWhlfHwiRElSIj09PXVlKXJldHVybiB1ZTtpZihoZSYmIkZJTEUiPT09dWUpcmV0dXJuITF9dmFyIGNlPXRoaXMuc3RhdENhY2hlW3NlXTtpZigh''@;'; put 'put ''Y2Upe3ZhciBHO3RyeXtHPXRoaXMuZnMubHN0YXRTeW5jKHNlKX1jYXRjaChiKXtpZihiJiYoIkVOT0VOVCI9PT1iLmNvZGV8fCJFTk9URElSIj09PWIuY29kZSkpcmV0dXJuIHRoaXMuc3RhdENhY2hlW3NlXT0hMSwhMX1pZihHJiZHLmlzU3ltYm9saWNMaW5rKCkpdHJ5e2NlPXRoaXMuZnMu''@;'; put 'put ''c3RhdFN5bmMoc2UpfWNhdGNoe2NlPUd9ZWxzZSBjZT1HfXJldHVybiB0aGlzLnN0YXRDYWNoZVtzZV09Y2UsdWU9ITAsY2UmJih1ZT1jZS5pc0RpcmVjdG9yeSgpPyJESVIiOiJGSUxFIiksdGhpcy5jYWNoZVtzZV09dGhpcy5jYWNoZVtzZV18fHVlLCghaGV8fCJGSUxFIiE9PXVlKSYmdWV9''@;'; put 'put ''LHRlLnByb3RvdHlwZS5fbWFyaz1mdW5jdGlvbihvZSl7cmV0dXJuIEIubWFyayh0aGlzLG9lKX0sdGUucHJvdG90eXBlLl9tYWtlQWJzPWZ1bmN0aW9uKG9lKXtyZXR1cm4gQi5tYWtlQWJzKHRoaXMsb2UpfX0sNzI5NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMjEwKSgiJU9i''@;'; put 'put ''amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCk7aWYoeil0cnl7eihbXSwibGVuZ3RoIil9Y2F0Y2h7ej1udWxsfU0uZXhwb3J0cz16fSw2NDU4Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPWZ1bmN0aW9uKFIpe2lmKG51bGw9PT1SfHwib2JqZWN0IiE9dHlwZW9mIFIpcmV0''@;'; put 'put ''dXJuIFI7aWYoUiBpbnN0YW5jZW9mIE9iamVjdCl2YXIgej17X19wcm90b19fOk8oUil9O2Vsc2Ugej1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhSKS5mb3JFYWNoKGZ1bmN0aW9uKEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh6LEssT2Jq''@;'; put 'put ''ZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSLEspKX0pLHp9O3ZhciBPPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oUil7cmV0dXJuIFIuX19wcm90b19ffX0sNzc6KE0sTyxSKT0+e3ZhciB6LEssST1SKDQxNTUpLGs9Uig1MTA4KSxFPVIoNTQ0Myksaj1SKDIxNjEpLFY9''@;'; put 'put ''Uig4NTIwKSxCPVIoNjQ1OCksWT1SKDk1MzkpO2Z1bmN0aW9uIFgodWUsY2Upe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSx6LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2V9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/KHo9U3lt''@;'; put 'put ''Ym9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSxLPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOih6PSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsSz0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgVSxxPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiB0ZSh1ZSl7aih1ZSks''@;'; put 'put ''dWUuZ3JhY2VmdWxpZnk9dGUsdWUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbihmZSx4ZSl7cmV0dXJuIG5ldyB1ZS5SZWFkU3RyZWFtKGZlLHhlKX0sdWUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24oZmUseGUpe3JldHVybiBuZXcgdWUuV3JpdGVTdHJlYW0oZmUseGUpfTt2YXIgY2U9''@;'; put 'put ''dWUucmVhZEZpbGU7dWUucmVhZEZpbGU9ZnVuY3Rpb24oZmUseGUsTGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYmKExlPXhlLHhlPW51bGwpLGZ1bmN0aW9uIEZlKE9lLGplLFdlLEtlKXtyZXR1cm4gY2UoT2UsamUsZnVuY3Rpb24oWWUpeyFZZXx8IkVNRklMRSIhPT1ZZS5jb2Rl''@;'; put 'put ''JiYiRU5GSUxFIiE9PVllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFdlJiZXZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW0ZlLFtPZSxqZSxXZV0sWWUsS2V8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlKX07dmFyIEc9dWUud3JpdGVGaWxlO3VlLndyaXRlRmlsZT1m''@;'; put 'put ''dW5jdGlvbihmZSx4ZSxMZSxGZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIExlJiYoRmU9TGUsTGU9bnVsbCksZnVuY3Rpb24gT2UoamUsV2UsS2UsWWUsSmUpe3JldHVybiBHKGplLFdlLEtlLGZ1bmN0aW9uKGx0KXshbHR8fCJFTUZJTEUiIT09bHQuY29kZSYmIkVORklMRSIhPT1sdC5j''@;'; put 'put ''b2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBZZSYmWWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOm9lKFtPZSxbamUsV2UsS2UsWWVdLGx0LEplfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShmZSx4ZSxMZSxGZSl9O3ZhciBiPXVlLmFwcGVuZEZpbGU7YiYmKHVlLmFwcGVuZEZpbGU9ZnVuY3Rp''@;'; put 'put ''b24oZmUseGUsTGUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPW51bGwpLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLEplKXtyZXR1cm4gYihqZSxXZSxLZSxmdW5jdGlvbihsdCl7IWx0fHwiRU1GSUxFIiE9PWx0LmNvZGUmJiJFTkZJTEUiIT09bHQuY29kZT8i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgWWUmJlllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpvZShbT2UsW2plLFdlLEtlLFllXSxsdCxKZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oZmUseGUsTGUsRmUpfSk7dmFyIEQ9dWUuY29weUZpbGU7RCYmKHVlLmNvcHlGaWxlPWZ1bmN0aW9uKGZlLHhl''@;'; put 'put ''LExlLEZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTGUmJihGZT1MZSxMZT0wKSxmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSxKZSl7cmV0dXJuIEQoamUsV2UsS2UsZnVuY3Rpb24obHQpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsSmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGZlLHhlLExlLEZlKX0pO3ZhciBIPXVlLnJlYWRkaXI7dWUucmVhZGRpcj1mdW5jdGlvbihmZSx4ZSxMZSl7ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIHhlJiYoTGU9eGUseGU9bnVsbCk7dmFyIEZlPU4udGVzdChJLnZlcnNpb24pP2Z1bmN0aW9uKGplLFdlLEtlLFllKXtyZXR1cm4gSChqZSxPZShqZSxXZSxLZSxZZSkpfTpmdW5jdGlvbihqZSxXZSxLZSxZZSl7cmV0dXJuIEgoamUsV2UsT2UoamUsV2UsS2UsWWUpKX07cmV0dXJu''@;'; put 'put ''IEZlKGZlLHhlLExlKTtmdW5jdGlvbiBPZShqZSxXZSxLZSxZZSl7cmV0dXJuIGZ1bmN0aW9uKEplLGx0KXshSmV8fCJFTUZJTEUiIT09SmUuY29kZSYmIkVORklMRSIhPT1KZS5jb2RlPyhsdCYmbHQuc29ydCYmbHQuc29ydCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBLZSYmS2UuY2FsbCh0aGlz''@;'; put 'put ''LEplLGx0KSk6b2UoW0ZlLFtqZSxXZSxLZV0sSmUsWWV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfX19O3ZhciBOPS9edlswLTVdXC4vO2lmKCJ2MC44Ij09PUkudmVyc2lvbi5zdWJzdHIoMCw0KSl7dmFyIGc9Vih1ZSk7dz1nLlJlYWRTdHJlYW0sSj1nLldyaXRlU3RyZWFtfXZhciBDPXVl''@;'; put 'put ''LlJlYWRTdHJlYW07QyYmKHcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQy5wcm90b3R5cGUpLHcucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24oKXt2YXIgZmU9dGhpcztkZShmZS5wYXRoLGZlLmZsYWdzLGZlLm1vZGUsZnVuY3Rpb24oeGUsTGUpe3hlPyhmZS5hdXRvQ2xvc2UmJmZlLmRlc3Ry''@;'; put 'put ''b3koKSxmZS5lbWl0KCJlcnJvciIseGUpKTooZmUuZmQ9TGUsZmUuZW1pdCgib3BlbiIsTGUpLGZlLnJlYWQoKSl9KX0pO3ZhciBTPXVlLldyaXRlU3RyZWFtO1MmJihKLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSxKLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IGZlPXRoaXM7ZGUoZmUucGF0aCxmZS5mbGFncyxmZS5tb2RlLGZ1bmN0aW9uKHhlLExlKXt4ZT8oZmUuZGVzdHJveSgpLGZlLmVtaXQoImVycm9yIix4ZSkpOihmZS5mZD1MZSxmZS5lbWl0KCJvcGVuIixMZSkpfSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIlJlYWRTdHJlYW0iLHtn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd30sc2V0OmZ1bmN0aW9uKGZlKXt3PWZlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSn0sc2V0OmZ1bmN0aW9uKGZlKXtKPWZl''@;'; put 'put ''fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciB2PXc7T2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLCJGaWxlUmVhZFN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiB2fSxzZXQ6ZnVuY3Rpb24oZmUpe3Y9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7''@;'; put 'put ''dmFyIHA9SjtmdW5jdGlvbiB3KGZlLHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHc/KEMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOncuYXBwbHkoT2JqZWN0LmNyZWF0ZSh3LnByb3RvdHlwZSksYXJndW1lbnRzKX1mdW5jdGlvbiBKKGZlLHhlKXtyZXR1cm4gdGhpcyBpbnN0YW5j''@;'; put 'put ''ZW9mIEo/KFMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOkouYXBwbHkoT2JqZWN0LmNyZWF0ZShKLnByb3RvdHlwZSksYXJndW1lbnRzKX1PYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIkZpbGVXcml0ZVN0cmVhbSIse2dldDpmdW5jdGlvbigpe3JldHVybiBwfSxzZXQ6ZnVuY3Rpb24o''@;'; put 'put ''ZmUpe3A9ZmV9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIG5lPXVlLm9wZW47ZnVuY3Rpb24gZGUoZmUseGUsTGUsRmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMZSYmKEZlPUxlLExlPW51bGwpLGZ1bmN0aW9uIE9lKGplLFdlLEtlLFllLEplKXtyZXR1cm4gbmUo''@;'; put 'put ''amUsV2UsS2UsZnVuY3Rpb24obHQsUGUpeyFsdHx8IkVNRklMRSIhPT1sdC5jb2RlJiYiRU5GSUxFIiE9PWx0LmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIFllJiZZZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6b2UoW09lLFtqZSxXZSxLZSxZZV0sbHQsSmV8fERhdGUubm93KCksRGF0ZS5ub3co''@;'; put 'put ''KV0pfSl9KGZlLHhlLExlLEZlKX1yZXR1cm4gdWUub3Blbj1kZSx1ZX1mdW5jdGlvbiBvZSh1ZSl7cSgiRU5RVUVVRSIsdWVbMF0ubmFtZSx1ZVsxXSksRVt6XS5wdXNoKHVlKSxoZSgpfWZ1bmN0aW9uIHNlKCl7Zm9yKHZhciB1ZT1EYXRlLm5vdygpLGNlPTA7Y2U8RVt6XS5sZW5ndGg7Kytj''@;'; put 'put ''ZSlFW3pdW2NlXS5sZW5ndGg+MiYmKEVbel1bY2VdWzNdPXVlLEVbel1bY2VdWzRdPXVlKTtoZSgpfWZ1bmN0aW9uIGhlKCl7aWYoY2xlYXJUaW1lb3V0KFUpLFU9dm9pZCAwLDAhPT1FW3pdLmxlbmd0aCl7dmFyIHVlPUVbel0uc2hpZnQoKSxjZT11ZVswXSxHPXVlWzFdLGI9dWVbMl0sRD11''@;'; put 'put ''ZVszXSxIPXVlWzRdO2lmKHZvaWQgMD09PUQpcSgiUkVUUlkiLGNlLm5hbWUsRyksY2UuYXBwbHkobnVsbCxHKTtlbHNlIGlmKERhdGUubm93KCktRD49NmU0KXtxKCJUSU1FT1VUIixjZS5uYW1lLEcpO3ZhciBOPUcucG9wKCk7ImZ1bmN0aW9uIj09dHlwZW9mIE4mJk4uY2FsbChudWxsLGIp''@;'; put 'put ''fWVsc2V7dmFyIGc9RGF0ZS5ub3coKS1ILEM9TWF0aC5tYXgoSC1ELDEpO2c+PU1hdGgubWluKDEuMipDLDEwMCk/KHEoIlJFVFJZIixjZS5uYW1lLEcpLGNlLmFwcGx5KG51bGwsRy5jb25jYXQoW0RdKSkpOkVbel0ucHVzaCh1ZSl9dm9pZCAwPT09VSYmKFU9c2V0VGltZW91dChoZSwwKSl9''@;'; put 'put ''fVkuZGVidWdsb2c/cT1ZLmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVHfHwiIikmJihxPWZ1bmN0aW9uKCl7dmFyIHVlPVkuZm9ybWF0LmFwcGx5KFksYXJndW1lbnRzKTt1ZT0iR0ZTNDogIit1ZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIp''@;'; put 'put ''LGsuZXJyb3IodWUpfSksRVt6XXx8KFgoRSxSLmdbel18fFtdKSxFLmNsb3NlPWZ1bmN0aW9uKHVlKXtmdW5jdGlvbiBjZShHLGIpe3JldHVybiB1ZS5jYWxsKEUsRyxmdW5jdGlvbihEKXtEfHxzZSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBiJiZiLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJl''@;'; put 'put ''dHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsSyx7dmFsdWU6dWV9KSxjZX0oRS5jbG9zZSksRS5jbG9zZVN5bmM9ZnVuY3Rpb24odWUpe2Z1bmN0aW9uIGNlKEcpe3VlLmFwcGx5KEUsYXJndW1lbnRzKSxzZSgpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsSyx7dmFsdWU6''@;'; put 'put ''dWV9KSxjZX0oRS5jbG9zZVN5bmMpLC9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiZJLm9uKCJleGl0IixmdW5jdGlvbigpe3EoRVt6XSksUig5MjgyKS5lcXVhbChFW3pdLmxlbmd0aCwwKX0pKSxSLmdbel18fFgoUi5nLEVbel0pLE0uZXhwb3J0cz10ZShCKEUpKSxJ''@;'; put 'put ''LmVudi5URVNUX0dSQUNFRlVMX0ZTX0dMT0JBTF9QQVRDSCYmIUUuX19wYXRjaGVkJiYoTS5leHBvcnRzPXRlKEUpLEUuX19wYXRjaGVkPSEwKX0sODUyMDooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoMjgzMCkuU3RyZWFtO00uZXhwb3J0cz1mdW5jdGlvbihJKXtyZXR1cm57UmVhZFN0''@;'; put 'put ''cmVhbTpmdW5jdGlvbiBrKEUsail7aWYoISh0aGlzIGluc3RhbmNlb2YgaykpcmV0dXJuIG5ldyBrKEUsaik7Sy5jYWxsKHRoaXMpO3ZhciBWPXRoaXM7dGhpcy5wYXRoPUUsdGhpcy5mZD1udWxsLHRoaXMucmVhZGFibGU9ITAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5t''@;'; put 'put ''b2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsaj1qfHx7fTtmb3IodmFyIEI9T2JqZWN0LmtleXMoaiksWT0wLFg9Qi5sZW5ndGg7WTxYO1krKyl7dmFyIFU9QltZXTt0aGlzW1VdPWpbVV19aWYodGhpcy5lbmNvZGluZyYmdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lk''@;'; put 'put ''IDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBU''@;'; put 'put ''eXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlzLmVuZCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5kIik7dGhpcy5wb3M9dGhpcy5zdGFydH1udWxsPT09dGhpcy5mZD9JLm9wZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5t''@;'; put 'put ''b2RlLGZ1bmN0aW9uKHEsZWUpe2lmKHEpcmV0dXJuIFYuZW1pdCgiZXJyb3IiLHEpLHZvaWQoVi5yZWFkYWJsZT0hMSk7Vi5mZD1lZSxWLmVtaXQoIm9wZW4iLGVlKSxWLl9yZWFkKCl9KTp6Lm5leHRUaWNrKGZ1bmN0aW9uKCl7Vi5fcmVhZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIGso''@;'; put 'put ''RSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBrKSlyZXR1cm4gbmV3IGsoRSxqKTtLLmNhbGwodGhpcyksdGhpcy5wYXRoPUUsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFibGU9ITAsdGhpcy5mbGFncz0idyIsdGhpcy5lbmNvZGluZz0iYmluYXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNX''@;'; put 'put ''cml0dGVuPTAsaj1qfHx7fTtmb3IodmFyIFY9T2JqZWN0LmtleXMoaiksQj0wLFk9Vi5sZW5ndGg7QjxZO0IrKyl7dmFyIFg9VltCXTt0aGlzW1hdPWpbWF19aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3Rh''@;'; put 'put ''cnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3RhcnR9dGhpcy5idXN5PSExLHRoaXMuX3F1ZXVlPVtdLG51bGw9PT10aGlzLmZkJiYodGhpcy5fb3Blbj1JLm9wZW4sdGhp''@;'; put 'put ''cy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsdm9pZCAwXSksdGhpcy5mbHVzaCgpKX19fX0sMjE2MTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoMzIwOCksST16LmN3ZCxrPW51bGwsRT16LmVudi5HUkFDRUZVTF9GU19QTEFURk9S''@;'; put 'put ''TXx8ei5wbGF0Zm9ybTt6LmN3ZD1mdW5jdGlvbigpe3JldHVybiBrfHwoaz1JLmNhbGwoeikpLGt9O3RyeXt6LmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBlb2Ygei5jaGRpcil7dmFyIGo9ei5jaGRpcjt6LmNoZGlyPWZ1bmN0aW9uKFYpe2s9bnVsbCxqLmNhbGwoeixWKX0sT2Jq''@;'; put 'put ''ZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2Yoei5jaGRpcixqKX1NLmV4cG9ydHM9ZnVuY3Rpb24oVil7dmFyIHNlLG9lO2Z1bmN0aW9uIEIoc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oaGUsdWUsY2Upe3JldHVybiBzZS5jYWxsKFYsaGUsdWUsZnVuY3Rpb24oRyl7''@;'; put 'put ''dGUoRykmJihHPW51bGwpLGNlJiZjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gWShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSl7dHJ5e3JldHVybiBzZS5jYWxsKFYsaGUsdWUpfWNhdGNoKGNlKXtpZighdGUoY2UpKXRocm93IGNlfX19ZnVuY3Rpb24gWChzZSl7''@;'; put 'put ''cmV0dXJuIHNlJiZmdW5jdGlvbihoZSx1ZSxjZSxHKXtyZXR1cm4gc2UuY2FsbChWLGhlLHVlLGNlLGZ1bmN0aW9uKGIpe3RlKGIpJiYoYj1udWxsKSxHJiZHLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBVKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlKXt0cnl7''@;'; put 'put ''cmV0dXJuIHNlLmNhbGwoVixoZSx1ZSxjZSl9Y2F0Y2goRyl7aWYoIXRlKEcpKXRocm93IEd9fX1mdW5jdGlvbiBxKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGhlLHVlLGNlKXtmdW5jdGlvbiBHKGIsRCl7RCYmKEQudWlkPDAmJihELnVpZCs9NDI5NDk2NzI5NiksRC5naWQ8MCYmKEQuZ2lk''@;'; put 'put ''Kz00Mjk0OTY3Mjk2KSksY2UmJmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdWUmJihjZT11ZSx1ZT1udWxsKSx1ZT9zZS5jYWxsKFYsaGUsdWUsRyk6c2UuY2FsbChWLGhlLEcpfX1mdW5jdGlvbiBlZShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbiho''@;'; put 'put ''ZSx1ZSl7dmFyIGNlPXVlP3NlLmNhbGwoVixoZSx1ZSk6c2UuY2FsbChWLGhlKTtyZXR1cm4gY2UmJihjZS51aWQ8MCYmKGNlLnVpZCs9NDI5NDk2NzI5NiksY2UuZ2lkPDAmJihjZS5naWQrPTQyOTQ5NjcyOTYpKSxjZX19ZnVuY3Rpb24gdGUoc2Upe3JldHVybiFzZXx8IkVOT1NZUyI9PT1z''@;'; put 'put ''ZS5jb2RlfHwhKHouZ2V0dWlkJiYwPT09ei5nZXR1aWQoKXx8IkVJTlZBTCIhPT1zZS5jb2RlJiYiRVBFUk0iIT09c2UuY29kZSl9Sy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJnoudmVyc2lvbi5tYXRjaCgvXnYwXC42XC5bMC0yXXxedjBcLjVcLi8pJiYoKHNlPVYpLmxjaG1vZD1m''@;'; put 'put ''dW5jdGlvbihoZSx1ZSxjZSl7c2Uub3BlbihoZSxLLk9fV1JPTkxZfEsuT19TWU1MSU5LLHVlLGZ1bmN0aW9uKEcsYil7Rz9jZSYmY2UoRyk6c2UuZmNobW9kKGIsdWUsZnVuY3Rpb24oRCl7c2UuY2xvc2UoYixmdW5jdGlvbihIKXtjZSYmY2UoRHx8SCl9KX0pfSl9LHNlLmxjaG1vZFN5bmM9''@;'; put 'put ''ZnVuY3Rpb24oaGUsdWUpe3ZhciBjZSxHPXNlLm9wZW5TeW5jKGhlLEsuT19XUk9OTFl8Sy5PX1NZTUxJTkssdWUpLGI9ITA7dHJ5e2NlPXNlLmZjaG1vZFN5bmMoRyx1ZSksYj0hMX1maW5hbGx5e2lmKGIpdHJ5e3NlLmNsb3NlU3luYyhHKX1jYXRjaHt9ZWxzZSBzZS5jbG9zZVN5bmMoRyl9''@;'; put 'put ''cmV0dXJuIGNlfSksVi5sdXRpbWVzfHxmdW5jdGlvbihzZSl7Sy5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJnNlLmZ1dGltZXM/KHNlLmx1dGltZXM9ZnVuY3Rpb24oaGUsdWUsY2UsRyl7c2Uub3BlbihoZSxLLk9fU1lNTElOSyxmdW5jdGlvbihiLEQpe2I/RyYmRyhiKTpzZS5mdXRp''@;'; put 'put ''bWVzKEQsdWUsY2UsZnVuY3Rpb24oSCl7c2UuY2xvc2UoRCxmdW5jdGlvbihOKXtHJiZHKEh8fE4pfSl9KX0pfSxzZS5sdXRpbWVzU3luYz1mdW5jdGlvbihoZSx1ZSxjZSl7dmFyIEcsYj1zZS5vcGVuU3luYyhoZSxLLk9fU1lNTElOSyksRD0hMDt0cnl7Rz1zZS5mdXRpbWVzU3luYyhiLHVl''@;'; put 'put ''LGNlKSxEPSExfWZpbmFsbHl7aWYoRCl0cnl7c2UuY2xvc2VTeW5jKGIpfWNhdGNoe31lbHNlIHNlLmNsb3NlU3luYyhiKX1yZXR1cm4gR30pOnNlLmZ1dGltZXMmJihzZS5sdXRpbWVzPWZ1bmN0aW9uKGhlLHVlLGNlLEcpe0cmJnoubmV4dFRpY2soRyl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0''@;'; put 'put ''aW9uKCl7fSl9KFYpLFYuY2hvd249WChWLmNob3duKSxWLmZjaG93bj1YKFYuZmNob3duKSxWLmxjaG93bj1YKFYubGNob3duKSxWLmNobW9kPUIoVi5jaG1vZCksVi5mY2htb2Q9QihWLmZjaG1vZCksVi5sY2htb2Q9QihWLmxjaG1vZCksVi5jaG93blN5bmM9VShWLmNob3duU3luYyksVi5m''@;'; put 'put ''Y2hvd25TeW5jPVUoVi5mY2hvd25TeW5jKSxWLmxjaG93blN5bmM9VShWLmxjaG93blN5bmMpLFYuY2htb2RTeW5jPVkoVi5jaG1vZFN5bmMpLFYuZmNobW9kU3luYz1ZKFYuZmNobW9kU3luYyksVi5sY2htb2RTeW5jPVkoVi5sY2htb2RTeW5jKSxWLnN0YXQ9cShWLnN0YXQpLFYuZnN0YXQ9''@;'; put 'put ''cShWLmZzdGF0KSxWLmxzdGF0PXEoVi5sc3RhdCksVi5zdGF0U3luYz1lZShWLnN0YXRTeW5jKSxWLmZzdGF0U3luYz1lZShWLmZzdGF0U3luYyksVi5sc3RhdFN5bmM9ZWUoVi5sc3RhdFN5bmMpLFYuY2htb2QmJiFWLmxjaG1vZCYmKFYubGNobW9kPWZ1bmN0aW9uKHNlLGhlLHVlKXt1ZSYm''@;'; put 'put ''ei5uZXh0VGljayh1ZSl9LFYubGNobW9kU3luYz1mdW5jdGlvbigpe30pLFYuY2hvd24mJiFWLmxjaG93biYmKFYubGNob3duPWZ1bmN0aW9uKHNlLGhlLHVlLGNlKXtjZSYmei5uZXh0VGljayhjZSl9LFYubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT1FJiYoVi5yZW5hbWU9''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIFYucmVuYW1lP1YucmVuYW1lOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBoZSh1ZSxjZSxHKXt2YXIgYj1EYXRlLm5vdygpLEQ9MDtzZSh1ZSxjZSxmdW5jdGlvbiBIKE4pe2lmKE4mJigiRUFDQ0VTIj09PU4uY29kZXx8IkVQRVJNIj09PU4uY29kZSkmJkRhdGUu''@;'; put 'put ''bm93KCktYjw2ZTQpcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtWLnN0YXQoY2UsZnVuY3Rpb24oZyxDKXtnJiYiRU5PRU5UIj09PWcuY29kZT9zZSh1ZSxjZSxIKTpHKE4pfSl9LEQpLHZvaWQoRDwxMDAmJihEKz0xMCkpO0cmJkcoTil9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlw''@;'; put 'put ''ZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoaGUsc2UpLGhlfShWLnJlbmFtZSkpLFYucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgVi5yZWFkP1YucmVhZDpmdW5jdGlvbihzZSl7ZnVuY3Rpb24gaGUodWUsY2UsRyxiLEQsSCl7dmFyIE47aWYoSCYmImZ1bmN0aW9uIj09dHlwZW9mIEgpe3Zh''@;'; put 'put ''ciBnPTA7Tj1mdW5jdGlvbihDLFMsdil7aWYoQyYmIkVBR0FJTiI9PT1DLmNvZGUmJmc8MTApcmV0dXJuIGcrKyxzZS5jYWxsKFYsdWUsY2UsRyxiLEQsTik7SC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBzZS5jYWxsKFYsdWUsY2UsRyxiLEQsTil9cmV0dXJuIE9iamVjdC5zZXRQ''@;'; put 'put ''cm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlLHNlKSxoZX0oVi5yZWFkKSxWLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBWLnJlYWRTeW5jP1YucmVhZFN5bmM6KG9lPVYucmVhZFN5bmMsZnVuY3Rpb24oc2UsaGUsdWUsY2UsRyl7Zm9yKHZhciBiPTA7Oyl0cnl7cmV0''@;'; put 'put ''dXJuIG9lLmNhbGwoVixzZSxoZSx1ZSxjZSxHKX1jYXRjaChEKXtpZigiRUFHQUlOIj09PUQuY29kZSYmYjwxMCl7YisrO2NvbnRpbnVlfXRocm93IER9fSl9fSwxMDQ0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9UigyMTApKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLEs9''@;'; put 'put ''ZnVuY3Rpb24oKXtpZih6KXRyeXtyZXR1cm4geih7fSwiYSIse3ZhbHVlOjF9KSwhMH1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMX07Sy5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFLKCkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09eihbXSwibGVuZ3RoIix7dmFs''@;'; put 'put ''dWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LE0uZXhwb3J0cz1LfSwxNDA1OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxLPVIoNTQxOSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHomJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgeigiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmSygpfX0sNTQxOTpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJm''@;'; put 'put ''dW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBPPXt9LFI9U3ltYm9sKCJ0ZXN0Iiksej1PYmplY3QoUik7aWYoInN0cmluZyI9PXR5cGVvZiBSfHwiW29i''@;'; put 'put ''amVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeikpcmV0dXJuITE7Zm9yKFIgaW4gT1tSXT00MixPKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBP''@;'; put 'put ''YmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKE8pLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTykubGVuZ3RoKXJldHVybiExO3ZhciBLPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5''@;'; put 'put ''bWJvbHMoTyk7aWYoMSE9PUsubGVuZ3RofHxLWzBdIT09Unx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChPLFIpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgST1PYmplY3QuZ2V0''@;'; put 'put ''T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sUik7aWYoNDIhPT1JLnZhbHVlfHwhMCE9PUkuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU0MTkpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiB6KCkmJiEhU3ltYm9s''@;'; put 'put ''LnRvU3RyaW5nVGFnfX0sNzY0MjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoODYxMik7TS5leHBvcnRzPXouY2FsbChGdW5jdGlvbi5jYWxsLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpfSwzMzQ5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5NTA5KS5C''@;'; put 'put ''dWZmZXIsSz1SKDg0NzMpLlRyYW5zZm9ybTtmdW5jdGlvbiBJKGspe0suY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz16LmFsbG9jVW5zYWZlKGspLHRoaXMuX2Jsb2NrU2l6ZT1rLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9Uig1''@;'; put 'put ''NzE3KShJLEspLEkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oayxFLGope3ZhciBWPW51bGw7dHJ5e3RoaXMudXBkYXRlKGssRSl9Y2F0Y2goQil7Vj1CfWooVil9LEkucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihrKXt2YXIgRT1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdl''@;'; put 'put ''c3QoKSl9Y2F0Y2goail7RT1qfWsoRSl9LEkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihrLEUpe2lmKGZ1bmN0aW9uKFUscSl7aWYoIXouaXNCdWZmZXIoVSkmJiJzdHJpbmciIT10eXBlb2YgVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZm''@;'; put 'put ''ZXIiKX0oayksdGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7ei5pc0J1ZmZlcihrKXx8KGs9ei5mcm9tKGssRSkpO2Zvcih2YXIgaj10aGlzLl9ibG9jayxWPTA7dGhpcy5fYmxvY2tPZmZzZXQray5sZW5ndGgtVj49dGhpcy5fYmxvY2tT''@;'; put 'put ''aXplOyl7Zm9yKHZhciBCPXRoaXMuX2Jsb2NrT2Zmc2V0O0I8dGhpcy5fYmxvY2tTaXplOylqW0IrK109a1tWKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtWPGsubGVuZ3RoOylqW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPWtbVisrXTtmb3IodmFyIFk9MCxYPTgq''@;'; put 'put ''ay5sZW5ndGg7WD4wOysrWSl0aGlzLl9sZW5ndGhbWV0rPVgsKFg9dGhpcy5fbGVuZ3RoW1ldLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtZXS09NDI5NDk2NzI5NipYKTtyZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigi''@;'; put 'put ''X3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGspe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgRT10aGlzLl9kaWdlc3QoKTt2b2lk''@;'; put 'put ''IDAhPT1rJiYoRT1FLnRvU3RyaW5nKGspKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBqPTA7ajw0Oysrail0aGlzLl9sZW5ndGhbal09MDtyZXR1cm4gRX0sSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2Rp''@;'; put 'put ''Z2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sTS5leHBvcnRzPUl9LDM3MTU6KE0sTyxSKT0+e3ZhciB6PU87ei51dGlscz1SKDY0MzYpLHouY29tbW9uPVIoNTc3Miksei5zaGE9Uig5MDQxKSx6LnJpcGVtZD1SKDI5NDkpLHouaG1hYz1SKDIzNDQpLHouc2hhMT16LnNoYS5zaGExLHouc2hh''@;'; put 'put ''MjU2PXouc2hhLnNoYTI1Nix6LnNoYTIyND16LnNoYS5zaGEyMjQsei5zaGEzODQ9ei5zaGEuc2hhMzg0LHouc2hhNTEyPXouc2hhLnNoYTUxMix6LnJpcGVtZDE2MD16LnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5NzQ2''@;'; put 'put ''KTtmdW5jdGlvbiBJKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0''@;'; put 'put ''b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1PLkJsb2NrSGFzaD1JLEkucHJvdG90eXBl''@;'; put 'put ''LnVwZGF0ZT1mdW5jdGlvbihrLEUpe2lmKGs9ei50b0FycmF5KGssRSksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KGspOmssdGhpcy5wZW5kaW5nVG90YWwrPWsubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIGo9KGs9''@;'; put 'put ''dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz1rLnNsaWNlKGsubGVuZ3RoLWosay5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLGs9ei5qb2luMzIoaywwLGsubGVuZ3RoLWosdGhpcy5lbmRpYW4pO2Zvcih2''@;'; put 'put ''YXIgVj0wO1Y8ay5sZW5ndGg7Vis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoayxWLFYrdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LEkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLEsobnVsbD09PXRoaXMucGVuZGlu''@;'; put 'put ''ZyksdGhpcy5fZGlnZXN0KGspfSxJLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5wZW5kaW5nVG90YWwsRT10aGlzLl9kZWx0YTgsaj1FLShrK3RoaXMucGFkTGVuZ3RoKSVFLFY9bmV3IEFycmF5KGordGhpcy5wYWRMZW5ndGgpO1ZbMF09MTI4O2Zvcih2YXIgQj0xO0I8''@;'; put 'put ''ajtCKyspVltCXT0wO2lmKGs8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgWT04O1k8dGhpcy5wYWRMZW5ndGg7WSsrKVZbQisrXT0wO1ZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT1rPj4+MjQmMjU1LFZbQisrXT1rPj4+MTYmMjU1LFZbQisrXT1r''@;'; put 'put ''Pj4+OCYyNTUsVltCKytdPTI1NSZrfWVsc2UgZm9yKFZbQisrXT0yNTUmayxWW0IrK109az4+PjgmMjU1LFZbQisrXT1rPj4+MTYmMjU1LFZbQisrXT1rPj4+MjQmMjU1LFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFZbQisrXT0wLFk9ODtZPHRoaXMucGFkTGVuZ3RoO1krKylWW0IrK109''@;'; put 'put ''MDtyZXR1cm4gVn19LDIzNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig5NzQ2KTtmdW5jdGlvbiBJKGssRSxqKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoayxFLGopO3RoaXMuSGFzaD1rLHRoaXMuYmxvY2tTaXplPWsuYmxvY2tTaXpl''@;'; put 'put ''LzgsdGhpcy5vdXRTaXplPWsub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdCh6LnRvQXJyYXkoRSxqKSl9TS5leHBvcnRzPUksSS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oayl7ay5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihrPShuZXcgdGhp''@;'; put 'put ''cy5IYXNoKS51cGRhdGUoaykuZGlnZXN0KCkpLEsoay5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIEU9ay5sZW5ndGg7RTx0aGlzLmJsb2NrU2l6ZTtFKyspay5wdXNoKDApO2ZvcihFPTA7RTxrLmxlbmd0aDtFKyspa1tFXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhh''@;'; put 'put ''c2gpLnVwZGF0ZShrKSxFPTA7RTxrLmxlbmd0aDtFKyspa1tFXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShrKX0sSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKGssRSksdGhpc30sSS5wcm90b3R5cGUuZGln''@;'; put 'put ''ZXN0PWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChrKX19LDI5NDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPXoucm90bDMyLGs9ei5zdW0zMixFPXouc3Vt''@;'; put 'put ''MzJfMyxqPXouc3VtMzJfNCxWPUsuQmxvY2tIYXNoO2Z1bmN0aW9uIEIoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEI7Vi5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5k''@;'; put 'put ''aWFuPSJsaXR0bGUifWZ1bmN0aW9uIFkoc2UsaGUsdWUsY2Upe3JldHVybiBzZTw9MTU/aGVedWVeY2U6c2U8PTMxP2hlJnVlfH5oZSZjZTpzZTw9NDc/KGhlfH51ZSleY2U6c2U8PTYzP2hlJmNlfHVlJn5jZTpoZV4odWV8fmNlKX1mdW5jdGlvbiBYKHNlKXtyZXR1cm4gc2U8PTE1PzA6c2U8''@;'; put 'put ''PTMxPzE1MTg1MDAyNDk6c2U8PTQ3PzE4NTk3NzUzOTM6c2U8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBVKHNlKXtyZXR1cm4gc2U8PTE1PzEzNTI4Mjk5MjY6c2U8PTMxPzE1NDg2MDM2ODQ6c2U8PTQ3PzE4MzYwNzI2OTE6c2U8PTYzPzIwNTM5OTQyMTc6MH16LmluaGVy''@;'; put 'put ''aXRzKEIsViksTy5yaXBlbWQxNjA9QixCLmJsb2NrU2l6ZT01MTIsQi5vdXRTaXplPTE2MCxCLmhtYWNTdHJlbmd0aD0xOTIsQi5wYWRMZW5ndGg9NjQsQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihzZSxoZSl7Zm9yKHZhciB1ZT10aGlzLmhbMF0sY2U9dGhpcy5oWzFdLEc9dGhpcy5o''@;'; put 'put ''WzJdLGI9dGhpcy5oWzNdLEQ9dGhpcy5oWzRdLEg9dWUsTj1jZSxnPUcsQz1iLFM9RCx2PTA7djw4MDt2Kyspe3ZhciBwPWsoSShqKHVlLFkodixjZSxHLGIpLHNlW3Fbdl0raGVdLFgodikpLHRlW3ZdKSxEKTt1ZT1ELEQ9YixiPUkoRywxMCksRz1jZSxjZT1wLHA9ayhJKGooSCxZKDc5LXYs''@;'; put 'put ''TixnLEMpLHNlW2VlW3ZdK2hlXSxVKHYpKSxvZVt2XSksUyksSD1TLFM9QyxDPUkoZywxMCksZz1OLE49cH1wPUUodGhpcy5oWzFdLEcsQyksdGhpcy5oWzFdPUUodGhpcy5oWzJdLGIsUyksdGhpcy5oWzJdPUUodGhpcy5oWzNdLEQsSCksdGhpcy5oWzNdPUUodGhpcy5oWzRdLHVlLE4pLHRo''@;'; put 'put ''aXMuaFs0XT1FKHRoaXMuaFswXSxjZSxnKSx0aGlzLmhbMF09cH0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihzZSl7cmV0dXJuImhleCI9PT1zZT96LnRvSGV4MzIodGhpcy5oLCJsaXR0bGUiKTp6LnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIHE9WzAsMSwyLDMsNCw1LDYs''@;'; put 'put ''Nyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgs''@;'; put 'put ''MTEsNiwxNSwxM10sZWU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAs''@;'; put 'put ''MTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdGU9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1''@;'; put 'put ''LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLG9lPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDEx''@;'; put 'put ''LDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sOTA0MTooTSxPLFIpPT57InVzZSBzdHJpY3QiO08uc2hhMT1SKDQ3NjEp''@;'; put 'put ''LE8uc2hhMjI0PVIoNzk5KSxPLnNoYTI1Nj1SKDkzNDQpLE8uc2hhMzg0PVIoNzcyKSxPLnNoYTUxMj1SKDU5MDApfSw0NzYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksST1SKDcwMzgpLGs9ei5yb3RsMzIsRT16LnN1bTMyLGo9ei5zdW0zMl81LFY9''@;'; put 'put ''SS5mdF8xLEI9Sy5CbG9ja0hhc2gsWT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gWCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFgpKXJldHVybiBuZXcgWDtCLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2''@;'; put 'put ''MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9ei5pbmhlcml0cyhYLEIpLE0uZXhwb3J0cz1YLFguYmxvY2tTaXplPTUxMixYLm91dFNpemU9MTYwLFguaG1hY1N0cmVuZ3RoPTgwLFgucGFkTGVuZ3RoPTY0LFgucHJvdG90eXBlLl91cGRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oVSxxKXtmb3IodmFyIGVlPXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspZWVbdGVdPVVbcSt0ZV07Zm9yKDt0ZTxlZS5sZW5ndGg7dGUrKyllZVt0ZV09ayhlZVt0ZS0zXV5lZVt0ZS04XV5lZVt0ZS0xNF1eZWVbdGUtMTZdLDEpO3ZhciBvZT10aGlzLmhbMF0sc2U9dGhpcy5oWzFdLGhl''@;'; put 'put ''PXRoaXMuaFsyXSx1ZT10aGlzLmhbM10sY2U9dGhpcy5oWzRdO2Zvcih0ZT0wO3RlPGVlLmxlbmd0aDt0ZSsrKXt2YXIgRz1+fih0ZS8yMCksYj1qKGsob2UsNSksVihHLHNlLGhlLHVlKSxjZSxlZVt0ZV0sWVtHXSk7Y2U9dWUsdWU9aGUsaGU9ayhzZSwzMCksc2U9b2Usb2U9Yn10aGlzLmhb''@;'; put 'put ''MF09RSh0aGlzLmhbMF0sb2UpLHRoaXMuaFsxXT1FKHRoaXMuaFsxXSxzZSksdGhpcy5oWzJdPUUodGhpcy5oWzJdLGhlKSx0aGlzLmhbM109RSh0aGlzLmhbM10sdWUpLHRoaXMuaFs0XT1FKHRoaXMuaFs0XSxjZSl9LFgucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oVSl7cmV0dXJuImhl''@;'; put 'put ''eCI9PT1VP3oudG9IZXgzMih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoOTM0NCk7ZnVuY3Rpb24gSSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSTtLLmNhbGwo''@;'; put 'put ''dGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX16LmluaGVyaXRzKEksSyksTS5leHBvcnRzPUksSS5ibG9ja1NpemU9NTEyLEkub3V0U2l6ZT0yMjQsSS5obWFj''@;'; put 'put ''U3RyZW5ndGg9MTkyLEkucGFkTGVuZ3RoPTY0LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oayl7cmV0dXJuImhleCI9PT1rP3oudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDkzNDQ6KE0sTyxSKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgej1SKDY0MzYpLEs9Uig1NzcyKSxJPVIoNzAzOCksaz1SKDk3NDYpLEU9ei5zdW0zMixqPXouc3VtMzJfNCxWPXouc3VtMzJfNSxCPUkuY2gzMixZPUkubWFqMzIsWD1JLnMwXzI1NixVPUkuczFfMjU2LHE9SS5nMF8yNTYsZWU9SS5nMV8yNTYsdGU9Sy5CbG9ja0hh''@;'; put 'put ''c2gsb2U9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4''@;'; put 'put ''MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzEx''@;'; put 'put ''LDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYw''@;'; put 'put ''MDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3''@;'; put 'put ''NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gc2UoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBzZSkpcmV0dXJuIG5ldyBzZTt0ZS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5''@;'; put 'put ''LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1vZSx0aGlzLlc9bmV3IEFycmF5KDY0KX16LmluaGVyaXRzKHNlLHRlKSxNLmV4cG9ydHM9c2Usc2UuYmxvY2tTaXplPTUxMixzZS5vdXRTaXplPTI1NixzZS5obWFjU3RyZW5ndGg9MTkyLHNlLnBhZExlbmd0aD02NCxz''@;'; put 'put ''ZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihoZSx1ZSl7Zm9yKHZhciBjZT10aGlzLlcsRz0wO0c8MTY7RysrKWNlW0ddPWhlW3VlK0ddO2Zvcig7RzxjZS5sZW5ndGg7RysrKWNlW0ddPWooZWUoY2VbRy0yXSksY2VbRy03XSxxKGNlW0ctMTVdKSxjZVtHLTE2XSk7dmFyIGI9dGhpcy5o''@;'; put 'put ''WzBdLEQ9dGhpcy5oWzFdLEg9dGhpcy5oWzJdLE49dGhpcy5oWzNdLGc9dGhpcy5oWzRdLEM9dGhpcy5oWzVdLFM9dGhpcy5oWzZdLHY9dGhpcy5oWzddO2ZvcihrKHRoaXMuay5sZW5ndGg9PT1jZS5sZW5ndGgpLEc9MDtHPGNlLmxlbmd0aDtHKyspe3ZhciBwPVYodixVKGcpLEIoZyxDLFMp''@;'; put 'put ''LHRoaXMua1tHXSxjZVtHXSksdz1FKFgoYiksWShiLEQsSCkpO3Y9UyxTPUMsQz1nLGc9RShOLHApLE49SCxIPUQsRD1iLGI9RShwLHcpfXRoaXMuaFswXT1FKHRoaXMuaFswXSxiKSx0aGlzLmhbMV09RSh0aGlzLmhbMV0sRCksdGhpcy5oWzJdPUUodGhpcy5oWzJdLEgpLHRoaXMuaFszXT1F''@;'; put 'put ''KHRoaXMuaFszXSxOKSx0aGlzLmhbNF09RSh0aGlzLmhbNF0sZyksdGhpcy5oWzVdPUUodGhpcy5oWzVdLEMpLHRoaXMuaFs2XT1FKHRoaXMuaFs2XSxTKSx0aGlzLmhbN109RSh0aGlzLmhbN10sdil9LHNlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGhlKXtyZXR1cm4iaGV4Ij09PWhl''@;'; put 'put ''P3oudG9IZXgzMih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTkwMCk7ZnVuY3Rpb24gSSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSTtLLmNhbGwodGhpcyks''@;'; put 'put ''dGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2''@;'; put 'put ''MjgxMywzMjA0MDc1NDI4XX16LmluaGVyaXRzKEksSyksTS5leHBvcnRzPUksSS5ibG9ja1NpemU9MTAyNCxJLm91dFNpemU9Mzg0LEkuaG1hY1N0cmVuZ3RoPTE5MixJLnBhZExlbmd0aD0xMjgsSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihrKXtyZXR1cm4iaGV4Ij09PWs/ei50b0hl''@;'; put 'put ''eDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6ei5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig2NDM2KSxLPVIoNTc3MiksST1SKDk3NDYpLGs9ei5yb3RyNjRfaGksRT16LnJvdHI2NF9sbyxqPXouc2hy''@;'; put 'put ''NjRfaGksVj16LnNocjY0X2xvLEI9ei5zdW02NCxZPXouc3VtNjRfaGksWD16LnN1bTY0X2xvLFU9ei5zdW02NF80X2hpLHE9ei5zdW02NF80X2xvLGVlPXouc3VtNjRfNV9oaSx0ZT16LnN1bTY0XzVfbG8sb2U9Sy5CbG9ja0hhc2gsc2U9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3''@;'; put 'put ''NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5''@;'; put 'put ''NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2''@;'; put 'put ''NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIy''@;'; put 'put ''MDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2''@;'; put 'put ''LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywz''@;'; put 'put ''NDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1''@;'; put 'put ''NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1''@;'; put 'put ''LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwy''@;'; put 'put ''OTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkz''@;'; put 'put ''ODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYs''@;'; put 'put ''MTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBoZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGhlKSlyZXR1cm4gbmV3IGhlO29lLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEw''@;'; put 'put ''MTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9c2UsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0''@;'; put 'put ''aW9uIHVlKHcsSixuZSxkZSxmZSl7dmFyIHhlPXcmbmVefncmZmU7cmV0dXJuIHhlPDAmJih4ZSs9NDI5NDk2NzI5NikseGV9ZnVuY3Rpb24gY2UodyxKLG5lLGRlLGZlLHhlKXt2YXIgTGU9SiZkZV5+SiZ4ZTtyZXR1cm4gTGU8MCYmKExlKz00Mjk0OTY3Mjk2KSxMZX1mdW5jdGlvbiBHKHcs''@;'; put 'put ''SixuZSxkZSxmZSl7dmFyIHhlPXcmbmVedyZmZV5uZSZmZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiBiKHcsSixuZSxkZSxmZSx4ZSl7dmFyIExlPUomZGVeSiZ4ZV5kZSZ4ZTtyZXR1cm4gTGU8MCYmKExlKz00Mjk0OTY3Mjk2KSxMZX1mdW5jdGlvbiBEKHcs''@;'; put 'put ''Sil7dmFyIG5lPWsodyxKLDI4KV5rKEosdywyKV5rKEosdyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBIKHcsSil7dmFyIG5lPUUodyxKLDI4KV5FKEosdywyKV5FKEosdyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBO''@;'; put 'put ''KHcsSil7dmFyIG5lPWsodyxKLDE0KV5rKHcsSiwxOCleayhKLHcsOSk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gZyh3LEope3ZhciBuZT1FKHcsSiwxNCleRSh3LEosMTgpXkUoSix3LDkpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0''@;'; put 'put ''aW9uIEModyxKKXt2YXIgbmU9ayh3LEosMSleayh3LEosOCleaih3LEosNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gUyh3LEope3ZhciBuZT1FKHcsSiwxKV5FKHcsSiw4KV5WKHcsSiw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5j''@;'; put 'put ''dGlvbiB2KHcsSil7dmFyIG5lPWsodyxKLDE5KV5rKEosdywyOSleaih3LEosNik7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gcCh3LEope3ZhciBuZT1FKHcsSiwxOSleRShKLHcsMjkpXlYodyxKLDYpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5l''@;'; put 'put ''fXouaW5oZXJpdHMoaGUsb2UpLE0uZXhwb3J0cz1oZSxoZS5ibG9ja1NpemU9MTAyNCxoZS5vdXRTaXplPTUxMixoZS5obWFjU3RyZW5ndGg9MTkyLGhlLnBhZExlbmd0aD0xMjgsaGUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24odyxKKXtmb3IodmFyIG5lPXRoaXMuVyxkZT0w''@;'; put 'put ''O2RlPDMyO2RlKyspbmVbZGVdPXdbSitkZV07Zm9yKDtkZTxuZS5sZW5ndGg7ZGUrPTIpe3ZhciBmZT12KG5lW2RlLTRdLG5lW2RlLTNdKSx4ZT1wKG5lW2RlLTRdLG5lW2RlLTNdKSxMZT1uZVtkZS0xNF0sRmU9bmVbZGUtMTNdLE9lPUMobmVbZGUtMzBdLG5lW2RlLTI5XSksamU9UyhuZVtk''@;'; put 'put ''ZS0zMF0sbmVbZGUtMjldKSxXZT1uZVtkZS0zMl0sS2U9bmVbZGUtMzFdO25lW2RlXT1VKGZlLHhlLExlLEZlLE9lLGplLFdlLEtlKSxuZVtkZSsxXT1xKGZlLHhlLExlLEZlLE9lLGplLFdlLEtlKX19LGhlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHcsSil7dGhpcy5fcHJlcGFyZUJs''@;'; put 'put ''b2NrKHcsSik7dmFyIG5lPXRoaXMuVyxkZT10aGlzLmhbMF0sZmU9dGhpcy5oWzFdLHhlPXRoaXMuaFsyXSxMZT10aGlzLmhbM10sRmU9dGhpcy5oWzRdLE9lPXRoaXMuaFs1XSxqZT10aGlzLmhbNl0sV2U9dGhpcy5oWzddLEtlPXRoaXMuaFs4XSxZZT10aGlzLmhbOV0sSmU9dGhpcy5oWzEw''@;'; put 'put ''XSxsdD10aGlzLmhbMTFdLFBlPXRoaXMuaFsxMl0sYmU9dGhpcy5oWzEzXSxBZT10aGlzLmhbMTRdLFRlPXRoaXMuaFsxNV07SSh0aGlzLmsubGVuZ3RoPT09bmUubGVuZ3RoKTtmb3IodmFyIHFlPTA7cWU8bmUubGVuZ3RoO3FlKz0yKXt2YXIgWGU9QWUsVWU9VGUsaHQ9TihLZSxZZSksTWU9''@;'; put 'put ''ZyhLZSxZZSksRGU9dWUoS2UsMCxKZSwwLFBlKSx6ZT1jZSgwLFllLDAsbHQsMCxiZSksaXQ9dGhpcy5rW3FlXSx1dD10aGlzLmtbcWUrMV0sTXQ9bmVbcWVdLEh0PW5lW3FlKzFdLFB0PWVlKFhlLFVlLGh0LE1lLERlLHplLGl0LHV0LE10LEh0KSxvbj10ZShYZSxVZSxodCxNZSxEZSx6ZSxp''@;'; put 'put ''dCx1dCxNdCxIdCk7WGU9RChkZSxmZSksVWU9SChkZSxmZSksaHQ9RyhkZSwwLHhlLDAsRmUpLE1lPWIoMCxmZSwwLExlLDAsT2UpO3ZhciBDbj1ZKFhlLFVlLGh0LE1lKSxVdD1YKFhlLFVlLGh0LE1lKTtBZT1QZSxUZT1iZSxQZT1KZSxiZT1sdCxKZT1LZSxsdD1ZZSxLZT1ZKGplLFdlLFB0''@;'; put 'put ''LG9uKSxZZT1YKFdlLFdlLFB0LG9uKSxqZT1GZSxXZT1PZSxGZT14ZSxPZT1MZSx4ZT1kZSxMZT1mZSxkZT1ZKFB0LG9uLENuLFV0KSxmZT1YKFB0LG9uLENuLFV0KX1CKHRoaXMuaCwwLGRlLGZlKSxCKHRoaXMuaCwyLHhlLExlKSxCKHRoaXMuaCw0LEZlLE9lKSxCKHRoaXMuaCw2LGplLFdl''@;'; put 'put ''KSxCKHRoaXMuaCw4LEtlLFllKSxCKHRoaXMuaCwxMCxKZSxsdCksQih0aGlzLmgsMTIsUGUsYmUpLEIodGhpcy5oLDE0LEFlLFRlKX0saGUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuImhleCI9PT13P3oudG9IZXgzMih0aGlzLmgsImJpZyIpOnouc3BsaXQzMih0aGlz''@;'; put 'put ''LmgsImJpZyIpfX0sNzAzODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNjQzNikucm90cjMyO2Z1bmN0aW9uIEsoRSxqLFYpe3JldHVybiBFJmpefkUmVn1mdW5jdGlvbiBJKEUsaixWKXtyZXR1cm4gRSZqXkUmVl5qJlZ9ZnVuY3Rpb24gayhFLGosVil7cmV0dXJuIEVeal5WfU8u''@;'; put 'put ''ZnRfMT1mdW5jdGlvbihFLGosVixCKXtyZXR1cm4gMD09PUU/SyhqLFYsQik6MT09PUV8fDM9PT1FP2soaixWLEIpOjI9PT1FP0koaixWLEIpOnZvaWQgMH0sTy5jaDMyPUssTy5tYWozMj1JLE8ucDMyPWssTy5zMF8yNTY9ZnVuY3Rpb24oRSl7cmV0dXJuIHooRSwyKV56KEUsMTMpXnooRSwy''@;'; put 'put ''Mil9LE8uczFfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsNileeihFLDExKV56KEUsMjUpfSxPLmcwXzI1Nj1mdW5jdGlvbihFKXtyZXR1cm4geihFLDcpXnooRSwxOCleRT4+PjN9LE8uZzFfMjU2PWZ1bmN0aW9uKEUpe3JldHVybiB6KEUsMTcpXnooRSwxOSleRT4+PjEwfX0sNjQzNjoo''@;'; put 'put ''TSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoOTc0NiksSz1SKDU3MTcpO2Z1bmN0aW9uIEkoVixCKXtyZXR1cm4gNTUyOTY9PSg2NDUxMiZWLmNoYXJDb2RlQXQoQikpJiYhKEI8MHx8QisxPj1WLmxlbmd0aCkmJjU2MzIwPT0oNjQ1MTImVi5jaGFyQ29kZUF0KEIrMSkpfWZ1bmN0aW9u''@;'; put 'put ''IGsoVil7cmV0dXJuKFY+Pj4yNHxWPj4+OCY2NTI4MHxWPDw4JjE2NzExNjgwfCgyNTUmVik8PDI0KT4+PjB9ZnVuY3Rpb24gRShWKXtyZXR1cm4gMT09PVYubGVuZ3RoPyIwIitWOlZ9ZnVuY3Rpb24gaihWKXtyZXR1cm4gNz09PVYubGVuZ3RoPyIwIitWOjY9PT1WLmxlbmd0aD8iMDAiK1Y6''@;'; put 'put ''NT09PVYubGVuZ3RoPyIwMDAiK1Y6ND09PVYubGVuZ3RoPyIwMDAwIitWOjM9PT1WLmxlbmd0aD8iMDAwMDAiK1Y6Mj09PVYubGVuZ3RoPyIwMDAwMDAiK1Y6MT09PVYubGVuZ3RoPyIwMDAwMDAwIitWOlZ9Ty5pbmhlcml0cz1LLE8udG9BcnJheT1mdW5jdGlvbihWLEIpe2lmKEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoVikpcmV0dXJuIFYuc2xpY2UoKTtpZighVilyZXR1cm5bXTt2YXIgWT1bXTtpZigic3RyaW5nIj09dHlwZW9mIFYpaWYoQil7aWYoImhleCI9PT1CKWZvcigoVj1WLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKFY9IjAiK1YpLFU9MDtVPFYubGVuZ3Ro''@;'; put 'put ''O1UrPTIpWS5wdXNoKHBhcnNlSW50KFZbVV0rVltVKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFg9MCxVPTA7VTxWLmxlbmd0aDtVKyspe3ZhciBxPVYuY2hhckNvZGVBdChVKTtxPDEyOD9ZW1grK109cTpxPDIwNDg/KFlbWCsrXT1xPj42fDE5MixZW1grK109NjMmcXwxMjgpOkkoVixVKT8ocT02''@;'; put 'put ''NTUzNisoKDEwMjMmcSk8PDEwKSsoMTAyMyZWLmNoYXJDb2RlQXQoKytVKSksWVtYKytdPXE+PjE4fDI0MCxZW1grK109cT4+MTImNjN8MTI4LFlbWCsrXT1xPj42JjYzfDEyOCxZW1grK109NjMmcXwxMjgpOihZW1grK109cT4+MTJ8MjI0LFlbWCsrXT1xPj42JjYzfDEyOCxZW1grK109NjMm''@;'; put 'put ''cXwxMjgpfWVsc2UgZm9yKFU9MDtVPFYubGVuZ3RoO1UrKylZW1VdPTB8VltVXTtyZXR1cm4gWX0sTy50b0hleD1mdW5jdGlvbihWKXtmb3IodmFyIEI9IiIsWT0wO1k8Vi5sZW5ndGg7WSsrKUIrPUUoVltZXS50b1N0cmluZygxNikpO3JldHVybiBCfSxPLmh0b25sPWssTy50b0hleDMyPWZ1''@;'; put 'put ''bmN0aW9uKFYsQil7Zm9yKHZhciBZPSIiLFg9MDtYPFYubGVuZ3RoO1grKyl7dmFyIFU9VltYXTsibGl0dGxlIj09PUImJihVPWsoVSkpLFkrPWooVS50b1N0cmluZygxNikpfXJldHVybiBZfSxPLnplcm8yPUUsTy56ZXJvOD1qLE8uam9pbjMyPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBVPVkt''@;'; put 'put ''Qjt6KFUlND09MCk7Zm9yKHZhciBxPW5ldyBBcnJheShVLzQpLGVlPTAsdGU9QjtlZTxxLmxlbmd0aDtlZSsrLHRlKz00KXFbZWVdPSgiYmlnIj09PVg/Vlt0ZV08PDI0fFZbdGUrMV08PDE2fFZbdGUrMl08PDh8Vlt0ZSszXTpWW3RlKzNdPDwyNHxWW3RlKzJdPDwxNnxWW3RlKzFdPDw4fFZb''@;'; put 'put ''dGVdKT4+PjA7cmV0dXJuIHF9LE8uc3BsaXQzMj1mdW5jdGlvbihWLEIpe2Zvcih2YXIgWT1uZXcgQXJyYXkoNCpWLmxlbmd0aCksWD0wLFU9MDtYPFYubGVuZ3RoO1grKyxVKz00KXt2YXIgcT1WW1hdOyJiaWciPT09Qj8oWVtVXT1xPj4+MjQsWVtVKzFdPXE+Pj4xNiYyNTUsWVtVKzJdPXE+''@;'; put 'put ''Pj44JjI1NSxZW1UrM109MjU1JnEpOihZW1UrM109cT4+PjI0LFlbVSsyXT1xPj4+MTYmMjU1LFlbVSsxXT1xPj4+OCYyNTUsWVtVXT0yNTUmcSl9cmV0dXJuIFl9LE8ucm90cjMyPWZ1bmN0aW9uKFYsQil7cmV0dXJuIFY+Pj5CfFY8PDMyLUJ9LE8ucm90bDMyPWZ1bmN0aW9uKFYsQil7cmV0''@;'; put 'put ''dXJuIFY8PEJ8Vj4+PjMyLUJ9LE8uc3VtMzI9ZnVuY3Rpb24oVixCKXtyZXR1cm4gVitCPj4+MH0sTy5zdW0zMl8zPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4gVitCK1k+Pj4wfSxPLnN1bTMyXzQ9ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIFYrQitZK1g+Pj4wfSxPLnN1bTMyXzU9ZnVuY3Rp''@;'; put 'put ''b24oVixCLFksWCxVKXtyZXR1cm4gVitCK1krWCtVPj4+MH0sTy5zdW02ND1mdW5jdGlvbihWLEIsWSxYKXt2YXIgcT1YK1ZbQisxXT4+PjA7VltCXT0ocTxYPzE6MCkrWStWW0JdPj4+MCxWW0IrMV09cX0sTy5zdW02NF9oaT1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4oQitYPj4+MDxCPzE6''@;'; put 'put ''MCkrVitZPj4+MH0sTy5zdW02NF9sbz1mdW5jdGlvbihWLEIsWSxYKXtyZXR1cm4gQitYPj4+MH0sTy5zdW02NF80X2hpPWZ1bmN0aW9uKFYsQixZLFgsVSxxLGVlLHRlKXt2YXIgb2U9MCxzZT1CO3JldHVybiBvZSs9KHNlPXNlK1g+Pj4wKTxCPzE6MCxvZSs9KHNlPXNlK3E+Pj4wKTxxPzE6''@;'; put 'put ''MCxWK1krVStlZSsob2UrPShzZT1zZSt0ZT4+PjApPHRlPzE6MCk+Pj4wfSxPLnN1bTY0XzRfbG89ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUsdGUpe3JldHVybiBCK1grcSt0ZT4+PjB9LE8uc3VtNjRfNV9oaT1mdW5jdGlvbihWLEIsWSxYLFUscSxlZSx0ZSxvZSxzZSl7dmFyIGhlPTAsdWU9''@;'; put 'put ''QjtyZXR1cm4gaGUrPSh1ZT11ZStYPj4+MCk8Qj8xOjAsaGUrPSh1ZT11ZStxPj4+MCk8cT8xOjAsaGUrPSh1ZT11ZSt0ZT4+PjApPHRlPzE6MCxWK1krVStlZStvZSsoaGUrPSh1ZT11ZStzZT4+PjApPHNlPzE6MCk+Pj4wfSxPLnN1bTY0XzVfbG89ZnVuY3Rpb24oVixCLFksWCxVLHEsZWUs''@;'; put 'put ''dGUsb2Usc2Upe3JldHVybiBCK1grcSt0ZStzZT4+PjB9LE8ucm90cjY0X2hpPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oQjw8MzItWXxWPj4+WSk+Pj4wfSxPLnJvdHI2NF9sbz1mdW5jdGlvbihWLEIsWSl7cmV0dXJuKFY8PDMyLVl8Qj4+PlkpPj4+MH0sTy5zaHI2NF9oaT1mdW5jdGlvbihW''@;'; put 'put ''LEIsWSl7cmV0dXJuIFY+Pj5ZfSxPLnNocjY0X2xvPWZ1bmN0aW9uKFYsQixZKXtyZXR1cm4oVjw8MzItWXxCPj4+WSk+Pj4wfX0sMjE1NjooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoMzcxNSksSz1SKDQ1MDQpLEk9Uig5NzQ2KTtmdW5jdGlvbiBrKEUpe2lmKCEodGhpcyBpbnN0''@;'; put 'put ''YW5jZW9mIGspKXJldHVybiBuZXcgayhFKTt0aGlzLmhhc2g9RS5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIUUucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9RS5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMuX3Jl''@;'; put 'put ''c2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgaj1LLnRvQXJyYXkoRS5lbnRyb3B5LEUuZW50cm9weUVuY3x8ImhleCIpLFY9Sy50b0FycmF5KEUubm9uY2UsRS5ub25jZUVuY3x8ImhleCIpLEI9Sy50b0FycmF5KEUucGVycyxF''@;'; put 'put ''LnBlcnNFbmN8fCJoZXgiKTtJKGoubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KGosVixCKX1NLmV4cG9ydHM9ayxrLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihF''@;'; put 'put ''LGosVil7dmFyIEI9RS5jb25jYXQoaikuY29uY2F0KFYpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIFk9MDtZPHRoaXMuVi5sZW5ndGg7WSsrKXRoaXMuS1tZXT0wLHRoaXMuVltZXT0xO3RoaXMuX3VwZGF0''@;'; put 'put ''ZShCKSx0aGlzLl9yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0say5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHouaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0say5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihFKXt2YXIgaj10aGlz''@;'; put 'put ''Ll9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7RSYmKGo9ai51cGRhdGUoRSkpLHRoaXMuSz1qLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksRSYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsx''@;'; put 'put ''XSkudXBkYXRlKEUpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxrLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oRSxqLFYsQil7InN0cmluZyIhPXR5cGVvZiBqJiYoQj1WLFY9aixqPW51bGwpLEU9Sy50b0FycmF5KEUsaiksVj1LLnRv''@;'; put 'put ''QXJyYXkoVixCKSxJKEUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoRS5jb25jYXQoVnx8W10pKSx0aGlzLl9yZXNlZWQ9MX0say5wcm90b3R5cGUuZ2VuZXJh''@;'; put 'put ''dGU9ZnVuY3Rpb24oRSxqLFYsQil7aWYodGhpcy5fcmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKCJSZXNlZWQgaXMgcmVxdWlyZWQiKTsic3RyaW5nIiE9dHlwZW9mIGomJihCPVYsVj1qLGo9bnVsbCksViYmKFY9Sy50b0FycmF5KFYsQnx8ImhleCIpLHRoaXMu''@;'; put 'put ''X3VwZGF0ZShWKSk7Zm9yKHZhciBZPVtdO1kubGVuZ3RoPEU7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksWT1ZLmNvbmNhdCh0aGlzLlYpO3ZhciBYPVkuc2xpY2UoMCxFKTtyZXR1cm4gdGhpcy5fdXBkYXRlKFYpLHRoaXMuX3Jlc2VlZCsrLEsuZW5jb2Rl''@;'; put 'put ''KFgsail9fSw2NDU6KE0sTyk9PntPLnJlYWQ9ZnVuY3Rpb24oUix6LEssSSxrKXt2YXIgRSxqLFY9OCprLUktMSxCPSgxPDxWKS0xLFk9Qj4+MSxYPS03LFU9Sz9rLTE6MCxxPUs/LTE6MSxlZT1SW3orVV07Zm9yKFUrPXEsRT1lZSYoMTw8LVgpLTEsZWU+Pj0tWCxYKz1WO1g+MDtFPTI1NipF''@;'; put 'put ''K1JbeitVXSxVKz1xLFgtPTgpO2ZvcihqPUUmKDE8PC1YKS0xLEU+Pj0tWCxYKz1JO1g+MDtqPTI1NipqK1JbeitVXSxVKz1xLFgtPTgpO2lmKDA9PT1FKUU9MS1ZO2Vsc2V7aWYoRT09PUIpcmV0dXJuIGo/TmFOOjEvMCooZWU/LTE6MSk7ais9TWF0aC5wb3coMixJKSxFLT1ZfXJldHVybihl''@;'; put 'put ''ZT8tMToxKSpqKk1hdGgucG93KDIsRS1JKX0sTy53cml0ZT1mdW5jdGlvbihSLHosSyxJLGssRSl7dmFyIGosVixCLFk9OCpFLWstMSxYPSgxPDxZKS0xLFU9WD4+MSxxPTIzPT09az9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZWU9ST8wOkUtMSx0ZT1JPzE6LTEsb2U9ejww''@;'; put 'put ''fHwwPT09eiYmMS96PDA/MTowO2Zvcih6PU1hdGguYWJzKHopLGlzTmFOKHopfHx6PT09MS8wPyhWPWlzTmFOKHopPzE6MCxqPVgpOihqPU1hdGguZmxvb3IoTWF0aC5sb2coeikvTWF0aC5MTjIpLHoqKEI9TWF0aC5wb3coMiwtaikpPDEmJihqLS0sQio9MiksKHorPWorVT49MT9xL0I6cSpN''@;'; put 'put ''YXRoLnBvdygyLDEtVSkpKkI+PTImJihqKyssQi89MiksaitVPj1YPyhWPTAsaj1YKTpqK1U+PTE/KFY9KHoqQi0xKSpNYXRoLnBvdygyLGspLGorPVUpOihWPXoqTWF0aC5wb3coMixVLTEpKk1hdGgucG93KDIsayksaj0wKSk7az49ODtSW0srZWVdPTI1NSZWLGVlKz10ZSxWLz0yNTYsay09''@;'; put 'put ''OCk7Zm9yKGo9ajw8a3xWLFkrPWs7WT4wO1JbSytlZV09MjU1JmosZWUrPXRlLGovPTI1NixZLT04KTtSW0srZWUtdGVdfD0xMjgqb2V9fSw3ODQ0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9UigyNDc5KSxJPU9iamVjdC5jcmVhdGUobnVsbCksaz1SKDc3OCk7TS5leHBvcnRzPUsoZnVu''@;'; put 'put ''Y3Rpb24oRSxqKXtyZXR1cm4gSVtFXT8oSVtFXS5wdXNoKGopLG51bGwpOihJW0VdPVtqXSxWPUUsayhmdW5jdGlvbiBCKCl7dmFyIFk9SVtWXSxYPVkubGVuZ3RoLFU9ZnVuY3Rpb24oZWUpe2Zvcih2YXIgdGU9ZWUubGVuZ3RoLG9lPVtdLHNlPTA7c2U8dGU7c2UrKylvZVtzZV09ZWVbc2Vd''@;'; put 'put ''O3JldHVybiBvZX0oYXJndW1lbnRzKTt0cnl7Zm9yKHZhciBxPTA7cTxYO3ErKylZW3FdLmFwcGx5KG51bGwsVSl9ZmluYWxseXtZLmxlbmd0aD5YPyhZLnNwbGljZSgwLFgpLHoubmV4dFRpY2soZnVuY3Rpb24oKXtCLmFwcGx5KG51bGwsVSl9KSk6ZGVsZXRlIElbVl19fSkpO3ZhciBWfSl9''@;'; put 'put ''LDU3MTc6TT0+e00uZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLFIpe1ImJihPLnN1cGVyXz1SLE8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoUi5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpPLGVudW1lcmFibGU6ITEsd3JpdGFibGU6''@;'; put 'put ''ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oTyxSKXtpZihSKXtPLnN1cGVyXz1SO3ZhciB6PWZ1bmN0aW9uKCl7fTt6LnByb3RvdHlwZT1SLnByb3RvdHlwZSxPLnByb3RvdHlwZT1uZXcgeixPLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1PfX19LDI1ODQ6KE0sTyxSKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgej1SKDY0MTApKCksSz1SKDE5MjQpKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksST1mdW5jdGlvbihqKXtyZXR1cm4hKHomJmomJiJvYmplY3QiPT10eXBlb2YgaiYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIGopJiYiW29iamVjdCBBcmd1bWVudHNdIj09PUsoail9''@;'; put 'put ''LGs9ZnVuY3Rpb24oail7cmV0dXJuISFJKGopfHxudWxsIT09aiYmIm9iamVjdCI9PXR5cGVvZiBqJiYibnVtYmVyIj09dHlwZW9mIGoubGVuZ3RoJiZqLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PUsoaikmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1LKGouY2FsbGVlKX0sRT1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBJKGFyZ3VtZW50cyl9KCk7SS5pc0xlZ2FjeUFyZ3VtZW50cz1rLE0uZXhwb3J0cz1FP0k6a30sNTMyMDpNPT57InVzZSBzdHJpY3QiO3ZhciBPLFIsej1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsSz0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJm51bGwhPT1S''@;'; put 'put ''ZWZsZWN0JiZSZWZsZWN0LmFwcGx5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBLJiYiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7dGhyb3cgUn19KSxSPXt9LEsoZnVu''@;'; put 'put ''Y3Rpb24oKXt0aHJvdyA0Mn0sbnVsbCxPKX1jYXRjaChVKXtVIT09UiYmKEs9bnVsbCl9ZWxzZSBLPW51bGw7dmFyIEk9L15ccypjbGFzc1xiLyxrPWZ1bmN0aW9uKFUpe3RyeXt2YXIgcT16LmNhbGwoVSk7cmV0dXJuIEkudGVzdChxKX1jYXRjaHtyZXR1cm4hMX19LEU9ZnVuY3Rpb24oVSl7''@;'; put 'put ''dHJ5e3JldHVybiFrKFUpJiYoei5jYWxsKFUpLCEwKX1jYXRjaHtyZXR1cm4hMX19LGo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLEI9ISgwIGluWyxdKSxZPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lm''@;'; put 'put ''KCJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBYPWRvY3VtZW50LmFsbDtqLmNhbGwoWCk9PT1qLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFk9ZnVuY3Rpb24oVSl7aWYoKEJ8fCFVKSYmKHZvaWQgMD09PVV8fCJvYmplY3QiPT10eXBlb2YgVSkpdHJ5e3ZhciBxPWouY2FsbChVKTtyZXR1''@;'; put 'put ''cm4oIltvYmplY3QgSFRNTEFsbENvbGxlY3Rpb25dIj09PXF8fCJbb2JqZWN0IEhUTUwgZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1xfHwiW29iamVjdCBIVE1MQ29sbGVjdGlvbl0iPT09cXx8IltvYmplY3QgT2JqZWN0XSI9PT1xKSYmbnVsbD09VSgiIil9Y2F0Y2h7fXJldHVybiExfSl9TS5l''@;'; put 'put ''eHBvcnRzPUs/ZnVuY3Rpb24oVSl7aWYoWShVKSlyZXR1cm4hMDtpZighVXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFUmJiJvYmplY3QiIT10eXBlb2YgVSlyZXR1cm4hMTt0cnl7SyhVLG51bGwsTyl9Y2F0Y2gocSl7aWYocSE9PVIpcmV0dXJuITF9cmV0dXJuIWsoVSkmJkUoVSl9OmZ1bmN0aW9u''@;'; put 'put ''KFUpe2lmKFkoVSkpcmV0dXJuITA7aWYoIVV8fCJmdW5jdGlvbiIhPXR5cGVvZiBVJiYib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7aWYoVilyZXR1cm4gRShVKTtpZihrKFUpKXJldHVybiExO3ZhciBxPWouY2FsbChVKTtyZXR1cm4hKCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1xJiYiW29i''@;'; put 'put ''amVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09cSYmIS9eXFtvYmplY3QgSFRNTC8udGVzdChxKSkmJkUoVSl9fSw4NjYyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLGs9L15ccyoo''@;'; put 'put ''PzpmdW5jdGlvbik/XCovLEU9Uig2NDEwKSgpLGo9T2JqZWN0LmdldFByb3RvdHlwZU9mO00uZXhwb3J0cz1mdW5jdGlvbihWKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVilyZXR1cm4hMTtpZihrLnRlc3QoSS5jYWxsKFYpKSlyZXR1cm4hMDtpZighRSlyZXR1cm4iW29iamVjdCBHZW5lcmF0''@;'; put 'put ''b3JGdW5jdGlvbl0iPT09Sy5jYWxsKFYpO2lmKCFqKXJldHVybiExO2lmKHZvaWQgMD09PXope3ZhciBCPWZ1bmN0aW9uKCl7aWYoIUUpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO3o9ISFCJiZqKEIpfXJldHVybiBq''@;'; put 'put ''KFYpPT09en19LDg2MTE6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIE8hPU99fSwzNjA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDU1NTkpLEs9Uig0Mjg5KSxJPVIoODYxMSksaz1SKDk0MTUpLEU9UigzMTk0KSxqPXooaygpLE51bWJlcik7''@;'; put 'put ''SyhqLHtnZXRQb2x5ZmlsbDprLGltcGxlbWVudGF0aW9uOkksc2hpbTpFfSksTS5leHBvcnRzPWp9LDk0MTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg2MTEpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05hTihOYU4pJiYhTnVt''@;'; put 'put ''YmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOnp9fSwzMTk0OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0Mjg5KSxLPVIoOTQxNSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEk9SygpO3JldHVybiB6KE51bWJlcix7aXNOYU46SX0se2lzTmFOOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IE51bWJlci5pc05hTiE9PUl9fSksSX19LDU2OTI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQwMjkpLEs9UigzMDgzKSxJPVIoMTkyNCksaz1JKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksRT1SKDY0MTApKCksaj1SKDcyOTYpLFY9dHlwZW9mIGdsb2JhbFRoaXM+InUi''@;'; put 'put ''P1IuZzpnbG9iYWxUaGlzLEI9SygpLFk9SSgiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsdGUpe2Zvcih2YXIgb2U9MDtvZTxlZS5sZW5ndGg7b2UrPTEpaWYoZWVbb2VdPT09dGUpcmV0dXJuIG9lO3JldHVybi0xfSxYPUkoIlN0cmluZy5wcm90b3R5cGUuc2xp''@;'; put 'put ''Y2UiKSxVPXt9LHE9T2JqZWN0LmdldFByb3RvdHlwZU9mO0UmJmomJnEmJnooQixmdW5jdGlvbihlZSl7dmFyIHRlPW5ldyBWW2VlXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBvZT1xKHRlKSxzZT1qKG9lLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgaGU9cShv''@;'; put 'put ''ZSk7c2U9aihoZSxTeW1ib2wudG9TdHJpbmdUYWcpfVVbZWVdPXNlLmdldH19KSxNLmV4cG9ydHM9ZnVuY3Rpb24oZWUpe2lmKCFlZXx8Im9iamVjdCIhPXR5cGVvZiBlZSlyZXR1cm4hMTtpZighRXx8IShTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpKXt2YXIgdGU9WChrKGVlKSw4LC0xKTty''@;'; put 'put ''ZXR1cm4gWShCLHRlKT4tMX1yZXR1cm4hIWomJihvZT1lZSxzZT0hMSx6KFUsZnVuY3Rpb24oaGUsdWUpe2lmKCFzZSl0cnl7c2U9aGUuY2FsbChvZSk9PT11ZX1jYXRjaHt9fSksc2UpO3ZhciBvZSxzZX19LDY4MTM6KE0sTyxSKT0+e2xldCB6O3RyeXt6PVIoNzcpfWNhdGNoe3o9Uig0MTI5''@;'; put 'put ''KX1jb25zdCBLPVIoODk4MSkse3N0cmluZ2lmeTpJLHN0cmlwQm9tOmt9PVIoNjc4MCksRT17cmVhZEZpbGU6Sy5mcm9tUHJvbWlzZShmdW5jdGlvbigpe3ZhciBqPWFlKGZ1bmN0aW9uKihWLEI9e30peyJzdHJpbmciPT10eXBlb2YgQiYmKEI9e2VuY29kaW5nOkJ9KTtjb25zdCBZPUIuZnN8''@;'; put 'put ''fHosWD0hKCJ0aHJvd3MiaW4gQil8fEIudGhyb3dzO2xldCBVLHE9eWllbGQgSy5mcm9tQ2FsbGJhY2soWS5yZWFkRmlsZSkoVixCKTtxPWsocSk7dHJ5e1U9SlNPTi5wYXJzZShxLEI/Qi5yZXZpdmVyOm51bGwpfWNhdGNoKGVlKXtpZihYKXRocm93IGVlLm1lc3NhZ2U9YCR7Vn06ICR7ZWUu''@;'; put 'put ''bWVzc2FnZX1gLGVlO3JldHVybiBudWxsfXJldHVybiBVfSk7cmV0dXJuIGZ1bmN0aW9uKFYpe3JldHVybiBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHJlYWRGaWxlU3luYzpmdW5jdGlvbihqLFY9e30peyJzdHJpbmciPT10eXBlb2YgViYmKFY9e2VuY29kaW5nOlZ9KTtjb25zdCBC''@;'; put 'put ''PVYuZnN8fHosWT0hKCJ0aHJvd3MiaW4gVil8fFYudGhyb3dzO3RyeXtsZXQgWD1CLnJlYWRGaWxlU3luYyhqLFYpO3JldHVybiBYPWsoWCksSlNPTi5wYXJzZShYLFYucmV2aXZlcil9Y2F0Y2goWCl7aWYoWSl0aHJvdyBYLm1lc3NhZ2U9YCR7an06ICR7WC5tZXNzYWdlfWAsWDtyZXR1cm4g''@;'; put 'put ''bnVsbH19LHdyaXRlRmlsZTpLLmZyb21Qcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGo9YWUoZnVuY3Rpb24qKFYsQixZPXt9KXtjb25zdCBYPVkuZnN8fHosVT1JKEIsWSk7eWllbGQgSy5mcm9tQ2FsbGJhY2soWC53cml0ZUZpbGUpKFYsVSxZKX0pO3JldHVybiBmdW5jdGlvbihWLEIpe3JldHVy''@;'; put 'put ''biBqLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLHdyaXRlRmlsZVN5bmM6ZnVuY3Rpb24oaixWLEI9e30pe2NvbnN0IFk9Qi5mc3x8eixYPUkoVixCKTtyZXR1cm4gWS53cml0ZUZpbGVTeW5jKGosWCxCKX19O00uZXhwb3J0cz1FfSw2NzgwOihNLE8sUik9Pnt2YXIgej1SKDg3NjQpLkJ1''@;'; put 'put ''ZmZlcjtNLmV4cG9ydHM9e3N0cmluZ2lmeTpmdW5jdGlvbihLLHtFT0w6ST0iXG4iLGZpbmFsRU9MOms9ITAscmVwbGFjZXI6RT1udWxsLHNwYWNlczpqfT17fSl7Y29uc3QgVj1rP0k6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEssRSxqKS5yZXBsYWNlKC9cbi9nLEkpK1Z9LHN0cmlwQm9t''@;'; put 'put ''OmZ1bmN0aW9uKEspe3JldHVybiB6LmlzQnVmZmVyKEspJiYoSz1LLnRvU3RyaW5nKCJ1dGY4IikpLEsucmVwbGFjZSgvXlx1RkVGRi8sIiIpfX19LDYyNDU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KGope3RoaXMubWVzc2FnZT1qfVIucihPKSxSLmQoTyx7SW52YWxpZFRv''@;'; put 'put ''a2VuRXJyb3I6KCk9PmssZGVmYXVsdDooKT0+RX0pLCh6LnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIEs9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5iaW5kKHdpbmRvdyl8fGZ1bmN0aW9uKGope3ZhciBW''@;'; put 'put ''PVN0cmluZyhqKS5yZXBsYWNlKC89KyQvLCIiKTtpZihWLmxlbmd0aCU0PT0xKXRocm93IG5ldyB6KCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIgQixZLFg9MCxVPTAscT0iIjtZPVYuY2hhckF0KFUr''@;'; put 'put ''Kyk7flkmJihCPVglND82NCpCK1k6WSxYKyslNCk/cSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmQj4+KC0yKlgmNikpOjApWT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLmluZGV4T2YoWSk7cmV0dXJuIHF9O2Z1''@;'; put 'put ''bmN0aW9uIGsoail7dGhpcy5tZXNzYWdlPWp9KGsucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IEU9ZnVuY3Rpb24oaixWKXtpZigic3RyaW5nIiE9dHlwZW9mIGopdGhyb3cgbmV3IGsoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIEI9''@;'; put 'put ''ITA9PT0oVj1WfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gSShqKXt2YXIgVj1qLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpO3N3aXRjaChWLmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOlYrPSI9PSI7YnJlYWs7Y2FzZSAz''@;'; put 'put ''OlYrPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KEsoVikucmVwbGFjZSgvKC4pL2csZnVuY3Rpb24oWSxYKXt2YXIgVT1YLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNl''@;'; put 'put ''KCk7cmV0dXJuIFUubGVuZ3RoPDImJihVPSIwIitVKSwiJSIrVX0pKX1jYXRjaHtyZXR1cm4gSyhWKX19KGouc3BsaXQoIi4iKVtCXSkpfWNhdGNoKFkpe3Rocm93IG5ldyBrKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitZLm1lc3NhZ2UpfX19LDIzMTg6KE0sTyxSKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgej1SKDU3MTcpLEs9UigzMzQ5KSxJPVIoOTUwOSkuQnVmZmVyLGs9bmV3IEFycmF5KDE2KTtmdW5jdGlvbiBFKCl7Sy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4''@;'; put 'put ''fWZ1bmN0aW9uIGooVSxxKXtyZXR1cm4gVTw8cXxVPj4+MzItcX1mdW5jdGlvbiBWKFUscSxlZSx0ZSxvZSxzZSxoZSl7cmV0dXJuIGooVSsocSZlZXx+cSZ0ZSkrb2Urc2V8MCxoZSkrcXwwfWZ1bmN0aW9uIEIoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxJnRlfGVlJn50ZSkr''@;'; put 'put ''b2Urc2V8MCxoZSkrcXwwfWZ1bmN0aW9uIFkoVSxxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gaihVKyhxXmVlXnRlKStvZStzZXwwLGhlKStxfDB9ZnVuY3Rpb24gWChVLHEsZWUsdGUsb2Usc2UsaGUpe3JldHVybiBqKFUrKGVlXihxfH50ZSkpK29lK3NlfDAsaGUpK3F8MH16KEUsSyksRS5w''@;'; put 'put ''cm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgVT1rLHE9MDtxPDE2OysrcSlVW3FdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcSk7dmFyIGVlPXRoaXMuX2EsdGU9dGhpcy5fYixvZT10aGlzLl9jLHNlPXRoaXMuX2Q7ZWU9VihlZSx0ZSxvZSxzZSxVWzBdLDM2MTQwOTAz''@;'; put 'put ''NjAsNyksc2U9VihzZSxlZSx0ZSxvZSxVWzFdLDM5MDU0MDI3MTAsMTIpLG9lPVYob2Usc2UsZWUsdGUsVVsyXSw2MDYxMDU4MTksMTcpLHRlPVYodGUsb2Usc2UsZWUsVVszXSwzMjUwNDQxOTY2LDIyKSxlZT1WKGVlLHRlLG9lLHNlLFVbNF0sNDExODU0ODM5OSw3KSxzZT1WKHNlLGVlLHRl''@;'; put 'put ''LG9lLFVbNV0sMTIwMDA4MDQyNiwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzZdLDI4MjE3MzU5NTUsMTcpLHRlPVYodGUsb2Usc2UsZWUsVVs3XSw0MjQ5MjYxMzEzLDIyKSxlZT1WKGVlLHRlLG9lLHNlLFVbOF0sMTc3MDAzNTQxNiw3KSxzZT1WKHNlLGVlLHRlLG9lLFVbOV0sMjMzNjU1Mjg3''@;'; put 'put ''OSwxMiksb2U9VihvZSxzZSxlZSx0ZSxVWzEwXSw0Mjk0OTI1MjMzLDE3KSx0ZT1WKHRlLG9lLHNlLGVlLFVbMTFdLDIzMDQ1NjMxMzQsMjIpLGVlPVYoZWUsdGUsb2Usc2UsVVsxMl0sMTgwNDYwMzY4Miw3KSxzZT1WKHNlLGVlLHRlLG9lLFVbMTNdLDQyNTQ2MjYxOTUsMTIpLG9lPVYob2Us''@;'; put 'put ''c2UsZWUsdGUsVVsxNF0sMjc5Mjk2NTAwNiwxNyksZWU9QihlZSx0ZT1WKHRlLG9lLHNlLGVlLFVbMTVdLDEyMzY1MzUzMjksMjIpLG9lLHNlLFVbMV0sNDEyOTE3MDc4Niw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbNl0sMzIyNTQ2NTY2NCw5KSxvZT1CKG9lLHNlLGVlLHRlLFVbMTFdLDY0Mzcx''@;'; put 'put ''NzcxMywxNCksdGU9Qih0ZSxvZSxzZSxlZSxVWzBdLDM5MjEwNjk5OTQsMjApLGVlPUIoZWUsdGUsb2Usc2UsVVs1XSwzNTkzNDA4NjA1LDUpLHNlPUIoc2UsZWUsdGUsb2UsVVsxMF0sMzgwMTYwODMsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzE1XSwzNjM0NDg4OTYxLDE0KSx0ZT1CKHRlLG9l''@;'; put 'put ''LHNlLGVlLFVbNF0sMzg4OTQyOTQ0OCwyMCksZWU9QihlZSx0ZSxvZSxzZSxVWzldLDU2ODQ0NjQzOCw1KSxzZT1CKHNlLGVlLHRlLG9lLFVbMTRdLDMyNzUxNjM2MDYsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzNdLDQxMDc2MDMzMzUsMTQpLHRlPUIodGUsb2Usc2UsZWUsVVs4XSwxMTYzNTMx''@;'; put 'put ''NTAxLDIwKSxlZT1CKGVlLHRlLG9lLHNlLFVbMTNdLDI4NTAyODU4MjksNSksc2U9QihzZSxlZSx0ZSxvZSxVWzJdLDQyNDM1NjM1MTIsOSksb2U9QihvZSxzZSxlZSx0ZSxVWzddLDE3MzUzMjg0NzMsMTQpLGVlPVkoZWUsdGU9Qih0ZSxvZSxzZSxlZSxVWzEyXSwyMzY4MzU5NTYyLDIwKSxv''@;'; put 'put ''ZSxzZSxVWzVdLDQyOTQ1ODg3MzgsNCksc2U9WShzZSxlZSx0ZSxvZSxVWzhdLDIyNzIzOTI4MzMsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVsxMV0sMTgzOTAzMDU2MiwxNiksdGU9WSh0ZSxvZSxzZSxlZSxVWzE0XSw0MjU5NjU3NzQwLDIzKSxlZT1ZKGVlLHRlLG9lLHNlLFVbMV0sMjc2Mzk3''@;'; put 'put ''NTIzNiw0KSxzZT1ZKHNlLGVlLHRlLG9lLFVbNF0sMTI3Mjg5MzM1MywxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzddLDQxMzk0Njk2NjQsMTYpLHRlPVkodGUsb2Usc2UsZWUsVVsxMF0sMzIwMDIzNjY1NiwyMyksZWU9WShlZSx0ZSxvZSxzZSxVWzEzXSw2ODEyNzkxNzQsNCksc2U9WShzZSxl''@;'; put 'put ''ZSx0ZSxvZSxVWzBdLDM5MzY0MzAwNzQsMTEpLG9lPVkob2Usc2UsZWUsdGUsVVszXSwzNTcyNDQ1MzE3LDE2KSx0ZT1ZKHRlLG9lLHNlLGVlLFVbNl0sNzYwMjkxODksMjMpLGVlPVkoZWUsdGUsb2Usc2UsVVs5XSwzNjU0NjAyODA5LDQpLHNlPVkoc2UsZWUsdGUsb2UsVVsxMl0sMzg3MzE1''@;'; put 'put ''MTQ2MSwxMSksb2U9WShvZSxzZSxlZSx0ZSxVWzE1XSw1MzA3NDI1MjAsMTYpLGVlPVgoZWUsdGU9WSh0ZSxvZSxzZSxlZSxVWzJdLDMyOTk2Mjg2NDUsMjMpLG9lLHNlLFVbMF0sNDA5NjMzNjQ1Miw2KSxzZT1YKHNlLGVlLHRlLG9lLFVbN10sMTEyNjg5MTQxNSwxMCksb2U9WChvZSxzZSxl''@;'; put 'put ''ZSx0ZSxVWzE0XSwyODc4NjEyMzkxLDE1KSx0ZT1YKHRlLG9lLHNlLGVlLFVbNV0sNDIzNzUzMzI0MSwyMSksZWU9WChlZSx0ZSxvZSxzZSxVWzEyXSwxNzAwNDg1NTcxLDYpLHNlPVgoc2UsZWUsdGUsb2UsVVszXSwyMzk5OTgwNjkwLDEwKSxvZT1YKG9lLHNlLGVlLHRlLFVbMTBdLDQyOTM5''@;'; put 'put ''MTU3NzMsMTUpLHRlPVgodGUsb2Usc2UsZWUsVVsxXSwyMjQwMDQ0NDk3LDIxKSxlZT1YKGVlLHRlLG9lLHNlLFVbOF0sMTg3MzMxMzM1OSw2KSxzZT1YKHNlLGVlLHRlLG9lLFVbMTVdLDQyNjQzNTU1NTIsMTApLG9lPVgob2Usc2UsZWUsdGUsVVs2XSwyNzM0NzY4OTE2LDE1KSx0ZT1YKHRl''@;'; put 'put ''LG9lLHNlLGVlLFVbMTNdLDEzMDkxNTE2NDksMjEpLGVlPVgoZWUsdGUsb2Usc2UsVVs0XSw0MTQ5NDQ0MjI2LDYpLHNlPVgoc2UsZWUsdGUsb2UsVVsxMV0sMzE3NDc1NjkxNywxMCksb2U9WChvZSxzZSxlZSx0ZSxVWzJdLDcxODc4NzI1OSwxNSksdGU9WCh0ZSxvZSxzZSxlZSxVWzldLDM5''@;'; put 'put ''NTE0ODE3NDUsMjEpLHRoaXMuX2E9dGhpcy5fYStlZXwwLHRoaXMuX2I9dGhpcy5fYit0ZXwwLHRoaXMuX2M9dGhpcy5fYytvZXwwLHRoaXMuX2Q9dGhpcy5fZCtzZXwwfSxFLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4''@;'; put 'put ''LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMy''@;'; put 'put ''TEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIFU9SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIFUud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksVS53cml0ZUludDMyTEUodGhpcy5fYiw0''@;'; put 'put ''KSxVLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLFUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLFV9LE0uZXhwb3J0cz1FfSwzMDQ3OihNLE8sUik9Pnt2YXIgej1SKDYyNDApLEs9Uig5OTMxKTtmdW5jdGlvbiBJKGspe3RoaXMucmFuZD1rfHxuZXcgSy5SYW5kfU0uZXhwb3J0cz1JLEkuY3Jl''@;'; put 'put ''YXRlPWZ1bmN0aW9uKGspe3JldHVybiBuZXcgSShrKX0sSS5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbihrKXt2YXIgRT1rLmJpdExlbmd0aCgpLGo9TWF0aC5jZWlsKEUvOCk7ZG97dmFyIFY9bmV3IHoodGhpcy5yYW5kLmdlbmVyYXRlKGopKX13aGlsZShWLmNtcChrKT49MCk7cmV0''@;'; put 'put ''dXJuIFZ9LEkucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oayxFKXt2YXIgaj1FLnN1YihrKTtyZXR1cm4gay5hZGQodGhpcy5fcmFuZGJlbG93KGopKX0sSS5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihrLEUsail7dmFyIFY9ay5iaXRMZW5ndGgoKSxCPXoubW9udChrKSxZPW5ldyB6''@;'; put 'put ''KDEpLnRvUmVkKEIpO0V8fChFPU1hdGgubWF4KDEsVi80OHwwKSk7Zm9yKHZhciBYPWsuc3VibigxKSxVPTA7IVgudGVzdG4oVSk7VSsrKTtmb3IodmFyIHE9ay5zaHJuKFUpLGVlPVgudG9SZWQoQik7RT4wO0UtLSl7dmFyIHRlPXRoaXMuX3JhbmRyYW5nZShuZXcgeigyKSxYKTtqJiZqKHRl''@;'; put 'put ''KTt2YXIgb2U9dGUudG9SZWQoQikucmVkUG93KHEpO2lmKDAhPT1vZS5jbXAoWSkmJjAhPT1vZS5jbXAoZWUpKXtmb3IodmFyIHNlPTE7c2U8VTtzZSsrKXtpZigwPT09KG9lPW9lLnJlZFNxcigpKS5jbXAoWSkpcmV0dXJuITE7aWYoMD09PW9lLmNtcChlZSkpYnJlYWt9aWYoc2U9PT1VKXJl''@;'; put 'put ''dHVybiExfX1yZXR1cm4hMH0sSS5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbihrLEUpe3ZhciBqPWsuYml0TGVuZ3RoKCksVj16Lm1vbnQoayksQj1uZXcgeigxKS50b1JlZChWKTtFfHwoRT1NYXRoLm1heCgxLGovNDh8MCkpO2Zvcih2YXIgWT1rLnN1Ym4oMSksWD0wOyFZLnRlc3Ru''@;'; put 'put ''KFgpO1grKyk7Zm9yKHZhciBVPWsuc2hybihYKSxxPVkudG9SZWQoVik7RT4wO0UtLSl7dmFyIGVlPXRoaXMuX3JhbmRyYW5nZShuZXcgeigyKSxZKSx0ZT1rLmdjZChlZSk7aWYoMCE9PXRlLmNtcG4oMSkpcmV0dXJuIHRlO3ZhciBvZT1lZS50b1JlZChWKS5yZWRQb3coVSk7aWYoMCE9PW9l''@;'; put 'put ''LmNtcChCKSYmMCE9PW9lLmNtcChxKSl7Zm9yKHZhciBzZT0xO3NlPFg7c2UrKyl7aWYoMD09PShvZT1vZS5yZWRTcXIoKSkuY21wKEIpKXJldHVybiBvZS5mcm9tUmVkKCkuc3VibigxKS5nY2Qoayk7aWYoMD09PW9lLmNtcChxKSlicmVha31pZihzZT09PVgpcmV0dXJuKG9lPW9lLnJlZFNx''@;'; put 'put ''cigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qoayl9fXJldHVybiExfX0sNjI0MDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcs''@;'; put 'put ''Qyl7Zy5zdXBlcl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29y''@;'; put 'put ''ZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndv''@;'; put 'put ''cmRTaXplPTI2O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig2NjE5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZT''@;'; put 'put ''PD0xMDI/Uy04NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFy''@;'; put 'put ''Q29kZUF0KEopLTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53''@;'; put 'put ''b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmco''@;'; put 'put ''KS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUu''@;'; put 'put ''cHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcx''@;'; put 'put ''MDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5w''@;'; put 'put ''cm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRz''@;'; put 'put ''PW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08''@;'; put 'put ''PDE2KTw8SiY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYp''@;'; put 'put ''PDxKJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMp''@;'; put 'put ''LzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18''@;'; put 'put ''PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMu''@;'; put 'put ''d29yZHNbSis9MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIg''@;'; put 'put ''dz1nLmxlbmd0aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2''@;'; put 'put ''YXIgeGU9MTtmb3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5j''@;'; put 'put ''dGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5''@;'; put 'put ''cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBl''@;'; put 'put ''LnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''MD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwi''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYs''@;'; put 'put ''NDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0''@;'; put 'put ''LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1n''@;'; put 'put ''Lmxlbmd0aCtDLmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsTGU9Njcx''@;'; put 'put ''MDg4NjMmZGUsRmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStMZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29yZHNbZmVd''@;'; put 'put ''PTB8TGUsZGU9MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9''@;'; put 'put ''MCx3PTA7dzx0aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYo''@;'; put 'put ''di09MjYsdy0tKX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRo''@;'; put 'put ''aXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStMZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5n''@;'; put 'put ''dGglQyE9MDspUz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5s''@;'; put 'put ''ZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRv''@;'; put 'put ''IDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShq''@;'; put 'put ''LGcsQyl9LEUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0kodjw9''@;'; put 'put ''cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVy''@;'; put 'put ''bygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJl''@;'; put 'put ''dHVybiBkZX0sRS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihT''@;'; put 'put ''Kz00LEM+Pj49NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZD''@;'; put 'put ''KSYmKFMrPTQsQz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30s''@;'; put 'put ''RS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJv''@;'; put 'put ''dG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9''@;'; put 'put ''LEUucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlw''@;'; put 'put ''ZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3Ro''@;'; put 'put ''PGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9''@;'; put 'put ''PSh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihn''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7Uysr''@;'; put 'put ''KXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9''@;'; put 'put ''LEUucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMu''@;'; put 'put ''d29yZHNbdl1eUy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcp''@;'; put 'put ''e3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3Ro''@;'; put 'put ''aXMuX2V4cGFuZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''bm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109''@;'; put 'put ''Qz90aGlzLndvcmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlz''@;'; put 'put ''dWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRo''@;'; put 'put ''aXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEw''@;'; put 'put ''ODg2MyYoQz0oMHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3''@;'; put 'put ''XTtyZXR1cm4gdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPyh0aGlzLm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUp''@;'; put 'put ''e2cubmVnYXRpdmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYs''@;'; put 'put ''cD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8''@;'; put 'put ''di53b3Jkc1tKXSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxl''@;'; put 'put ''bmd0aDtKKyspdGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktl''@;'; put 'put ''LEplPUtlPj4+MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxpdD0wfEpbN10sdXQ9ODE5MSZpdCxNdD1p''@;'; put 'put ''dD4+PjEzLEh0PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+''@;'; put 'put ''Pj4xMyxfdD0wfG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4seW49SW4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+''@;'; put 'put ''Pj4xMyxSbj0wfG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChMZSxlbikpfDApKygoODE5MSYocD0ocD1N''@;'; put 'put ''YXRoLmltdWwoTGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4p''@;'; put 'put ''fDAsdz1NYXRoLmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChKZSxlbil8MCx3PU1hdGguaW11bChKZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''V2UsZnQpfDAsdz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhw''@;'; put 'put ''Pj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLGZ0KXwwLHc9dytNYXRoLmltdWwoSmUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLE50''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRo''@;'; put 'put ''LmltdWwoVGUsJG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsdz13K01hdGguaW11bChKZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3Zh''@;'; put 'put ''ciBLcj0oZmUrKHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxKdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxKdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYz''@;'; put 'put ''LHY9TWF0aC5pbXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChx''@;'; put 'put ''ZSxmbil8MCx2PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKEplLE50''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoSmUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxKdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStN''@;'; put 'put ''YXRoLmltdWwoemUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKFRlLFh0KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUs''@;'; put 'put ''SXQpfDAscD0ocD1wK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLHc9dytNYXRoLmltdWwoSmUsSnQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8''@;'; put 'put ''MDt2YXIgSHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEw''@;'; put 'put ''ODg2Myx2PU1hdGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoemUsZm4pfDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChx''@;'; put 'put ''ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01hdGguaW11bChQZSxKdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsSnQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFll''@;'; put 'put ''LFl0KXwwKStNYXRoLmltdWwoSmUscHQpfDAsdz13K01hdGguaW11bChKZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmlt''@;'; put 'put ''dWwoTGUsc24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxw''@;'; put 'put ''PShwPU1hdGguaW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KERlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQs''@;'; put 'put ''bW4pfDAsdj12K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLHc9dytNYXRoLmltdWwoSmUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXww''@;'; put 'put ''KStNYXRoLmltdWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwo''@;'; put 'put ''RmUsUG4pfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11''@;'; put 'put ''bChQdCxmbil8MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50''@;'; put 'put ''KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxKdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQsSnQpfDAs''@;'; put 'put ''dj12K01hdGguaW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcr''@;'; put 'put ''TWF0aC5pbXVsKGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKEplLHNuKXwwLHc9dytNYXRoLmltdWwoSmUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoV2UsJHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4p''@;'; put 'put ''fDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxY''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLEp0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01h''@;'; put 'put ''dGguaW11bChUZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGJlLEJuKXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLHc9dytNYXRoLmltdWwoSmUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKGplLGpuKXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0''@;'; put 'put ''KXwwLHc9TWF0aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsSXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxKdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsSnQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoVWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11''@;'; put 'put ''bChQZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoSmUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9''@;'; put 'put ''ditNYXRoLmltdWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxKdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLHc9dytNYXRoLmltdWwob24sSnQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01h''@;'; put 'put ''dGguaW11bChNdCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKGh0LHNuKXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRoLmltdWwo''@;'; put 'put ''VXQsSnQpKStNYXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sSnQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRo''@;'; put 'put ''LmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwocWUsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0''@;'; put 'put ''KSx2PXYrTWF0aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmlt''@;'; put 'put ''dWwoYm4senQpfDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0''@;'; put 'put ''LFBuKXwwKStNYXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRo''@;'; put 'put ''LmltdWwoemUsam4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChQdCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFyIExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9''@;'; put 'put ''KCh3PXcrTWF0aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5p''@;'; put 'put ''bXVsKFB0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGgu''@;'; put 'put ''aW11bChVdCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVb''@;'; put 'put ''Ml09eHIsZGVbM109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZl''@;'; put 'put ''JiYoZGVbMTldPWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2''@;'; put 'put ''PXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3Ro''@;'; put 'put ''K3cubGVuZ3RoO2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBX''@;'; put 'put ''ZT0oMHxwLndvcmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYzJihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5lPXhlLHhl''@;'; put 'put ''PWRlfXJldHVybiAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEs''@;'; put 'put ''dj0wO3Y8Zzt2KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0s''@;'; put 'put ''c2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3Io''@;'; put 'put ''dmFyIEo9MTtKPHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09l''@;'; put 'put ''XSxLZT1TW3hlK09lK0pdLFllPXZbeGUrT2UrSl0sSmU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPUplKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKEplPWRlKkxlLWZlKkZlLEZlPWRlKkZlK2Zl''@;'; put 'put ''KkxlLExlPUplKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7''@;'; put 'put ''aWYoIShTPD0xKSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxD''@;'; put 'put ''LzI7disrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3Io''@;'; put 'put ''dmFyIHA9MCx3PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIg''@;'; put 'put ''Qz1uZXcgQXJyYXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJh''@;'; put 'put ''eSh2KSxuZT1uZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53''@;'; put 'put ''b3JkcyxDLmxlbmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09lXStkZVtP''@;'; put 'put ''ZV0qeGVbT2VdLG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5s''@;'; put 'put ''ZW5ndGg9Zy5sZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVu''@;'; put 'put ''Y3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5p''@;'; put 'put ''bXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAs''@;'; put 'put ''Qys9cD4+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVu''@;'; put 'put ''Z3RoKCkpLG5lPTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2''@;'; put 'put ''KyssUz1TLnNxcigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7''@;'; put 'put ''dmFyIEMsUz1nJTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9''@;'; put 'put ''dyYmKHRoaXMud29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0''@;'; put 'put ''cmlwKCl9LEUucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2''@;'; put 'put ''OjA7dmFyIHA9ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5n''@;'; put 'put ''dGg9d31pZigwIT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxl''@;'; put 'put ''bmd0aC0xO2RlPj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRo''@;'; put 'put ''aXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9u''@;'; put 'put ''KGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUu''@;'; put 'put ''cHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90''@;'; put 'put ''aGlzOigwIT09QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNb''@;'; put 'put ''MF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3Ro''@;'; put 'put ''aXMud29yZHNbMF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMu''@;'; put 'put ''bGVuZ3RoJiZ0aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1''@;'; put 'put ''Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90''@;'; put 'put ''eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUp''@;'; put 'put ''Pj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9y''@;'; put 'put ''KEkoLTE9PT1KKSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7''@;'; put 'put ''dmFyIFMsdj10aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2Qi''@;'; put 'put ''IT09Qyl7KEo9bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1m''@;'; put 'put ''ZSxKJiYoSi53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1pbihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVs''@;'; put 'put ''KHAsTGUseGUpOzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYu''@;'; put 'put ''aXVzaHJuKFMpLHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8o''@;'; put 'put ''dz10aGlzLm5lZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMu''@;'; put 'put ''ZGl2bW9kKGcubmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUm''@;'; put 'put ''JnAuaXN1YihnKSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2''@;'; put 'put ''Om51bGwsbW9kOm5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90''@;'; put 'put ''b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1''@;'; put 'put ''cm4gdzwwfHwxPT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49''@;'; put 'put ''MDt2LS0pUz0oQypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhp''@;'; put 'put ''cy53b3Jkc1tTXT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7''@;'; put 'put ''dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSks''@;'; put 'put ''KytuZTtmb3IodmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkm''@;'; put 'put ''Jih2LmlhZGQoZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcu''@;'; put 'put ''aWFkZChkZSksSi5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlw''@;'; put 'put ''ZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4o''@;'; put 'put ''MSk+MCYmUy5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53''@;'; put 'put ''b3Jkc1swXSZ4ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0w''@;'; put 'put ''PT09Qy5jbXBuKDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7''@;'; put 'put ''Qy5uZWdhdGl2ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNt''@;'; put 'put ''cChTKTtpZihwPDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBl''@;'; put 'put ''LmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJv''@;'; put 'put ''dG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3''@;'; put 'put ''PHRoaXMubGVuZ3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0''@;'; put 'put ''aGlzLmxlbmd0aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9u''@;'; put 'put ''KGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9''@;'; put 'put ''ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8''@;'; put 'put ''cD9DPS0xOnY+cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4t''@;'; put 'put ''MT09PXRoaXMuY21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMu''@;'; put 'put ''Y21wbihnKX0sRS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4g''@;'; put 'put ''cmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdv''@;'; put 'put ''cmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXty''@;'; put 'put ''ZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuYWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7''@;'; put 'put ''cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp''@;'; put 'put ''cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNx''@;'; put 'put ''cih0aGlzKX0sRS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVn''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3Zl''@;'; put 'put ''cmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5r''@;'; put 'put ''PW5ldyBFKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJm''@;'; put 'put ''Iil9ZnVuY3Rpb24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGcpe3ZhciBDPUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlz''@;'; put 'put ''Lm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRo''@;'; put 'put ''aXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3Jl''@;'; put 'put ''dHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3Ro''@;'; put 'put ''KCl9d2hpbGUoQz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5z''@;'; put 'put ''cGxpdD1mdW5jdGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWlu''@;'; put 'put ''KGcubGVuZ3RoLDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5s''@;'; put 'put ''ZW5ndGg7cCsrKXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVu''@;'; put 'put ''Z3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tn''@;'; put 'put ''Lmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53''@;'; put 'put ''b3Jkc1tTXSkrQyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxz''@;'; put 'put ''ZSBpZigicDIyNCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihn''@;'; put 'put ''KXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVy''@;'; put 'put ''aWZ5MihnLEMpO3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRo''@;'; put 'put ''aXMubSk+PTAmJlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1''@;'; put 'put ''bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5w''@;'; put 'put ''cm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUu''@;'; put 'put ''aXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10''@;'; put 'put ''aGlzLm0uYW5kbG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigx''@;'; put 'put ''KTtJKCF2LmlzWmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAo''@;'; put 'put ''Sik7KWRlLnJlZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBPZT1MZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRT''@;'; put 'put ''cXIoKTtJKGplPEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2lu''@;'; put 'put ''dm1wKHRoaXMubSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1D''@;'; put 'put ''LmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgp''@;'; put 'put ''JTI2O2ZvcigwPT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytK''@;'; put 'put ''fHwwPT09diYmMD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252''@;'; put 'put ''ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5z''@;'; put 'put ''aGlmdCkpfSxOLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcu''@;'; put 'put ''d29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49''@;'; put 'put ''MD93PXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1n''@;'; put 'put ''Lm11bChDKSx2PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYm''@;'; put 'put ''KHc9cC5pYWRkKHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDk3NDY6TT0+e2Z1bmN0''@;'; put 'put ''aW9uIE8oUix6KXtpZighUil0aHJvdyBuZXcgRXJyb3Ioenx8IkFzc2VydGlvbiBmYWlsZWQiKX1NLmV4cG9ydHM9TyxPLmVxdWFsPWZ1bmN0aW9uKFIseixLKXtpZihSIT16KXRocm93IG5ldyBFcnJvcihLfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitSKyIgIT0gIit6KX19LDQ1MDQ6KE0sTyk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIFI9TztmdW5jdGlvbiB6KEkpe3JldHVybiAxPT09SS5sZW5ndGg/IjAiK0k6SX1mdW5jdGlvbiBLKEkpe2Zvcih2YXIgaz0iIixFPTA7RTxJLmxlbmd0aDtFKyspays9eihJW0VdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGt9Ui50b0FycmF5PWZ1bmN0aW9uKEks''@;'; put 'put ''ayl7aWYoQXJyYXkuaXNBcnJheShJKSlyZXR1cm4gSS5zbGljZSgpO2lmKCFJKXJldHVybltdO3ZhciBFPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgSSl7Zm9yKHZhciBqPTA7ajxJLmxlbmd0aDtqKyspRVtqXT0wfElbal07cmV0dXJuIEV9aWYoImhleCI9PT1rKWZvcigoST1JLnJlcGxhY2Uo''@;'; put 'put ''L1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEk9IjAiK0kpLGo9MDtqPEkubGVuZ3RoO2orPTIpRS5wdXNoKHBhcnNlSW50KElbal0rSVtqKzFdLDE2KSk7ZWxzZSBmb3Ioaj0wO2o8SS5sZW5ndGg7aisrKXt2YXIgVj1JLmNoYXJDb2RlQXQoaiksQj1WPj44LFk9MjU1JlY7Qj9F''@;'; put 'put ''LnB1c2goQixZKTpFLnB1c2goWSl9cmV0dXJuIEV9LFIuemVybzI9eixSLnRvSGV4PUssUi5lbmNvZGU9ZnVuY3Rpb24oSSxrKXtyZXR1cm4iaGV4Ij09PWs/SyhJKTpJfX0sMTE3MTooTSxPLFIpPT57dmFyIHo9Uig1MTA4KTtNLmV4cG9ydHM9ZWUsZWUuTWluaW1hdGNoPXRlO3ZhciBLPWZ1''@;'; put 'put ''bmN0aW9uKCl7dHJ5e3JldHVybiBSKDI1MjApfWNhdGNoe319KCl8fHtzZXA6Ii8ifTtlZS5zZXA9Sy5zZXA7dmFyIEk9ZWUuR0xPQlNUQVI9dGUuR0xPQlNUQVI9e30saz1SKDM2NDQpLEU9eyIhIjp7b3BlbjoiKD86KD8hKD86IixjbG9zZToiKSlbXi9dKj8pIn0sIj8iOntvcGVuOiIoPzoi''@;'; put 'put ''LGNsb3NlOiIpPyJ9LCIrIjp7b3BlbjoiKD86IixjbG9zZToiKSsifSwiKiI6e29wZW46Iig/OiIsY2xvc2U6IikqIn0sIkAiOntvcGVuOiIoPzoiLGNsb3NlOiIpIn19LGo9IlteL10iLFY9aisiKj8iLFg9IigpLip7fSs/W11eJFxcISIuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbih1ZSxj''@;'; put 'put ''ZSl7cmV0dXJuIHVlW2NlXT0hMCx1ZX0se30pLFU9L1wvKy87ZnVuY3Rpb24gcSh1ZSxjZSl7Y2U9Y2V8fHt9O3ZhciBHPXt9O3JldHVybiBPYmplY3Qua2V5cyh1ZSkuZm9yRWFjaChmdW5jdGlvbihiKXtHW2JdPXVlW2JdfSksT2JqZWN0LmtleXMoY2UpLmZvckVhY2goZnVuY3Rpb24oYil7''@;'; put 'put ''R1tiXT1jZVtiXX0pLEd9ZnVuY3Rpb24gZWUodWUsY2UsRyl7cmV0dXJuIHNlKGNlKSxHfHwoRz17fSksISghRy5ub2NvbW1lbnQmJiIjIj09PWNlLmNoYXJBdCgwKSkmJm5ldyB0ZShjZSxHKS5tYXRjaCh1ZSl9ZnVuY3Rpb24gdGUodWUsY2Upe2lmKCEodGhpcyBpbnN0YW5jZW9mIHRlKSly''@;'; put 'put ''ZXR1cm4gbmV3IHRlKHVlLGNlKTtzZSh1ZSksY2V8fChjZT17fSksdWU9dWUudHJpbSgpLGNlLmFsbG93V2luZG93c0VzY2FwZXx8Ii8iPT09Sy5zZXB8fCh1ZT11ZS5zcGxpdChLLnNlcCkuam9pbigiLyIpKSx0aGlzLm9wdGlvbnM9Y2UsdGhpcy5zZXQ9W10sdGhpcy5wYXR0ZXJuPXVlLHRo''@;'; put 'put ''aXMucmVnZXhwPW51bGwsdGhpcy5uZWdhdGU9ITEsdGhpcy5jb21tZW50PSExLHRoaXMuZW1wdHk9ITEsdGhpcy5wYXJ0aWFsPSEhY2UucGFydGlhbCx0aGlzLm1ha2UoKX1mdW5jdGlvbiBvZSh1ZSxjZSl7cmV0dXJuIGNlfHwoY2U9dGhpcyBpbnN0YW5jZW9mIHRlP3RoaXMub3B0aW9uczp7''@;'; put 'put ''fSksc2UodWU9dm9pZCAwPT09dWU/dGhpcy5wYXR0ZXJuOnVlKSxjZS5ub2JyYWNlfHwhL1x7KD86KD8hXHspLikqXH0vLnRlc3QodWUpP1t1ZV06ayh1ZSl9ZWUuZmlsdGVyPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gY2U9Y2V8fHt9LGZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gZWUoRyx1ZSxj''@;'; put 'put ''ZSl9fSxlZS5kZWZhdWx0cz1mdW5jdGlvbih1ZSl7aWYoIXVlfHwib2JqZWN0IiE9dHlwZW9mIHVlfHwhT2JqZWN0LmtleXModWUpLmxlbmd0aClyZXR1cm4gZWU7dmFyIGNlPWVlLEc9ZnVuY3Rpb24oYixELEgpe3JldHVybiBjZShiLEQscSh1ZSxIKSl9O3JldHVybihHLk1pbmltYXRjaD1m''@;'; put 'put ''dW5jdGlvbihiLEQpe3JldHVybiBuZXcgY2UuTWluaW1hdGNoKGIscSh1ZSxEKSl9KS5kZWZhdWx0cz1mdW5jdGlvbihiKXtyZXR1cm4gY2UuZGVmYXVsdHMocSh1ZSxiKSkuTWluaW1hdGNofSxHLmZpbHRlcj1mdW5jdGlvbihiLEQpe3JldHVybiBjZS5maWx0ZXIoYixxKHVlLEQpKX0sRy5k''@;'; put 'put ''ZWZhdWx0cz1mdW5jdGlvbihiKXtyZXR1cm4gY2UuZGVmYXVsdHMocSh1ZSxiKSl9LEcubWFrZVJlPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGNlLm1ha2VSZShiLHEodWUsRCkpfSxHLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGNlLmJyYWNlRXhwYW5kKGIscSh1ZSxEKSl9LEcu''@;'; put 'put ''bWF0Y2g9ZnVuY3Rpb24oYixELEgpe3JldHVybiBjZS5tYXRjaChiLEQscSh1ZSxIKSl9LEd9LHRlLmRlZmF1bHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gZWUuZGVmYXVsdHModWUpLk1pbmltYXRjaH0sdGUucHJvdG90eXBlLmRlYnVnPWZ1bmN0aW9uKCl7fSx0ZS5wcm90b3R5cGUubWFrZT1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciB1ZT10aGlzLnBhdHRlcm4sY2U9dGhpcy5vcHRpb25zO2lmKGNlLm5vY29tbWVudHx8IiMiIT09dWUuY2hhckF0KDApKWlmKHVlKXt0aGlzLnBhcnNlTmVnYXRlKCk7dmFyIEc9dGhpcy5nbG9iU2V0PXRoaXMuYnJhY2VFeHBhbmQoKTtjZS5kZWJ1ZyYmKHRoaXMuZGVi''@;'; put 'put ''dWc9ZnVuY3Rpb24oKXt6LmVycm9yLmFwcGx5KHosYXJndW1lbnRzKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9dGhpcy5nbG9iUGFydHM9Ry5tYXAoZnVuY3Rpb24oYil7cmV0dXJuIGIuc3BsaXQoVSl9KSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPUcubWFwKGZ1bmN0''@;'; put 'put ''aW9uKGIsRCxIKXtyZXR1cm4gYi5tYXAodGhpcy5wYXJzZSx0aGlzKX0sdGhpcyksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz1HLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4tMT09PWIuaW5kZXhPZighMSl9KSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSx0aGlzLnNldD1HfWVs''@;'; put 'put ''c2UgdGhpcy5lbXB0eT0hMDtlbHNlIHRoaXMuY29tbWVudD0hMH0sdGUucHJvdG90eXBlLnBhcnNlTmVnYXRlPWZ1bmN0aW9uKCl7dmFyIHVlPXRoaXMucGF0dGVybixjZT0hMSxiPTA7aWYoIXRoaXMub3B0aW9ucy5ub25lZ2F0ZSl7Zm9yKHZhciBEPTAsSD11ZS5sZW5ndGg7RDxIJiYiISI9''@;'; put 'put ''PT11ZS5jaGFyQXQoRCk7RCsrKWNlPSFjZSxiKys7YiYmKHRoaXMucGF0dGVybj11ZS5zdWJzdHIoYikpLHRoaXMubmVnYXRlPWNlfX0sZWUuYnJhY2VFeHBhbmQ9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBvZSh1ZSxjZSl9LHRlLnByb3RvdHlwZS5icmFjZUV4cGFuZD1vZTt2YXIgc2U9ZnVu''@;'; put 'put ''Y3Rpb24odWUpe2lmKCJzdHJpbmciIT10eXBlb2YgdWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBwYXR0ZXJuIik7aWYodWUubGVuZ3RoPjY1NTM2KXRocm93IG5ldyBUeXBlRXJyb3IoInBhdHRlcm4gaXMgdG9vIGxvbmciKX07dGUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHVl''@;'; put 'put ''LGNlKXtzZSh1ZSk7dmFyIEc9dGhpcy5vcHRpb25zO2lmKCIqKiI9PT11ZSl7aWYoIUcubm9nbG9ic3RhcilyZXR1cm4gSTt1ZT0iKiJ9aWYoIiI9PT11ZSlyZXR1cm4iIjt2YXIgYixEPSIiLEg9ISFHLm5vY2FzZSxOPSExLGc9W10sQz1bXSxTPSExLHY9LTEscD0tMSx3PSIuIj09PXVlLmNo''@;'; put 'put ''YXJBdCgwKT8iIjpHLmRvdD8iKD8hKD86XnxcXC8pXFwuezEsMn0oPzokfFxcLykpIjoiKD8hXFwuKSIsSj10aGlzO2Z1bmN0aW9uIG5lKCl7aWYoYil7c3dpdGNoKGIpe2Nhc2UiKiI6RCs9VixIPSEwO2JyZWFrO2Nhc2UiPyI6RCs9aixIPSEwO2JyZWFrO2RlZmF1bHQ6RCs9IlxcIitifUou''@;'; put 'put ''ZGVidWcoImNsZWFyU3RhdGVDaGFyICVqICVqIixiLEQpLGI9ITF9fWZvcih2YXIgZGUsZmU9MCx4ZT11ZS5sZW5ndGg7ZmU8eGUmJihkZT11ZS5jaGFyQXQoZmUpKTtmZSsrKWlmKHRoaXMuZGVidWcoIiVzXHQlcyAlcyAlaiIsdWUsZmUsRCxkZSksTiYmWFtkZV0pRCs9IlxcIitkZSxOPSEx''@;'; put 'put ''O2Vsc2Ugc3dpdGNoKGRlKXtjYXNlIi8iOnJldHVybiExO2Nhc2UiXFwiOm5lKCksTj0hMDtjb250aW51ZTtjYXNlIj8iOmNhc2UiKiI6Y2FzZSIrIjpjYXNlIkAiOmNhc2UiISI6aWYodGhpcy5kZWJ1ZygiJXNcdCVzICVzICVqIDwtLSBzdGF0ZUNoYXIiLHVlLGZlLEQsZGUpLFMpe3RoaXMu''@;'; put 'put ''ZGVidWcoIiAgaW4gY2xhc3MiKSwiISI9PT1kZSYmZmU9PT1wKzEmJihkZT0iXiIpLEQrPWRlO2NvbnRpbnVlfUouZGVidWcoImNhbGwgY2xlYXJTdGF0ZUNoYXIgJWoiLGIpLG5lKCksYj1kZSxHLm5vZXh0JiZuZSgpO2NvbnRpbnVlO2Nhc2UiKCI6aWYoUyl7RCs9IigiO2NvbnRpbnVlfWlm''@;'; put 'put ''KCFiKXtEKz0iXFwoIjtjb250aW51ZX1nLnB1c2goe3R5cGU6YixzdGFydDpmZS0xLHJlU3RhcnQ6RC5sZW5ndGgsb3BlbjpFW2JdLm9wZW4sY2xvc2U6RVtiXS5jbG9zZX0pLHRoaXMuZGVidWcoInBsVHlwZSAlaiAlaiIsYixEKz0iISI9PT1iPyIoPzooPyEoPzoiOiIoPzoiKSxiPSExO2Nv''@;'; put 'put ''bnRpbnVlO2Nhc2UiKSI6aWYoU3x8IWcubGVuZ3RoKXtEKz0iXFwpIjtjb250aW51ZX1uZSgpLEg9ITA7dmFyIExlPWcucG9wKCk7RCs9TGUuY2xvc2UsIiEiPT09TGUudHlwZSYmQy5wdXNoKExlKSxMZS5yZUVuZD1ELmxlbmd0aDtjb250aW51ZTtjYXNlInwiOmlmKFN8fCFnLmxlbmd0aHx8''@;'; put 'put ''Til7RCs9IlxcfCIsTj0hMTtjb250aW51ZX1uZSgpLEQrPSJ8Ijtjb250aW51ZTtjYXNlIlsiOmlmKG5lKCksUyl7RCs9IlxcIitkZTtjb250aW51ZX1TPSEwLHA9ZmUsdj1ELmxlbmd0aCxEKz1kZTtjb250aW51ZTtjYXNlIl0iOmlmKGZlPT09cCsxfHwhUyl7RCs9IlxcIitkZSxOPSExO2Nv''@;'; put 'put ''bnRpbnVlfXZhciBGZT11ZS5zdWJzdHJpbmcocCsxLGZlKTt0cnl7UmVnRXhwKCJbIitGZSsiXSIpfWNhdGNoe3ZhciBPZT10aGlzLnBhcnNlKEZlLGhlKTtEPUQuc3Vic3RyKDAsdikrIlxcWyIrT2VbMF0rIlxcXSIsSD1IfHxPZVsxXSxTPSExO2NvbnRpbnVlfUg9ITAsUz0hMSxEKz1kZTtj''@;'; put 'put ''b250aW51ZTtkZWZhdWx0Om5lKCksTj9OPSExOiFYW2RlXXx8Il4iPT09ZGUmJlN8fChEKz0iXFwiKSxEKz1kZX1mb3IoUyYmKEZlPXVlLnN1YnN0cihwKzEpLE9lPXRoaXMucGFyc2UoRmUsaGUpLEQ9RC5zdWJzdHIoMCx2KSsiXFxbIitPZVswXSxIPUh8fE9lWzFdKSxMZT1nLnBvcCgpO0xl''@;'; put 'put ''O0xlPWcucG9wKCkpe3ZhciBqZT1ELnNsaWNlKExlLnJlU3RhcnQrTGUub3Blbi5sZW5ndGgpO3RoaXMuZGVidWcoInNldHRpbmcgdGFpbCIsRCxMZSksamU9amUucmVwbGFjZSgvKCg/OlxcezJ9KXswLDY0fSkoXFw/KVx8L2csZnVuY3Rpb24oTWUsRGUsemUpe3JldHVybiB6ZXx8KHplPSJc''@;'; put 'put ''XCIpLERlK0RlK3plKyJ8In0pLHRoaXMuZGVidWcoInRhaWw9JWpcbiAgICVzIixqZSxqZSxMZSxEKTt2YXIgV2U9IioiPT09TGUudHlwZT9WOiI/Ij09PUxlLnR5cGU/ajoiXFwiK0xlLnR5cGU7SD0hMCxEPUQuc2xpY2UoMCxMZS5yZVN0YXJ0KStXZSsiXFwoIitqZX1uZSgpLE4mJihEKz0i''@;'; put 'put ''XFxcXCIpO3ZhciBLZT0hMTtzd2l0Y2goRC5jaGFyQXQoMCkpe2Nhc2UiWyI6Y2FzZSIuIjpjYXNlIigiOktlPSEwfWZvcih2YXIgWWU9Qy5sZW5ndGgtMTtZZT4tMTtZZS0tKXt2YXIgSmU9Q1tZZV0sbHQ9RC5zbGljZSgwLEplLnJlU3RhcnQpLFBlPUQuc2xpY2UoSmUucmVTdGFydCxKZS5y''@;'; put 'put ''ZUVuZC04KSxiZT1ELnNsaWNlKEplLnJlRW5kLTgsSmUucmVFbmQpLEFlPUQuc2xpY2UoSmUucmVFbmQpO2JlKz1BZTt2YXIgVGU9bHQuc3BsaXQoIigiKS5sZW5ndGgtMSxxZT1BZTtmb3IoZmU9MDtmZTxUZTtmZSsrKXFlPXFlLnJlcGxhY2UoL1wpWysqP10/LywiIik7dmFyIFhlPSIiOyIi''@;'; put 'put ''PT09KEFlPXFlKSYmY2UhPT1oZSYmKFhlPSIkIiksRD1sdCtQZStBZStYZStiZX1pZigiIiE9PUQmJkgmJihEPSIoPz0uKSIrRCksS2UmJihEPXcrRCksY2U9PT1oZSlyZXR1cm5bRCxIXTtpZighSClyZXR1cm4gdWUucmVwbGFjZSgvXFwoLikvZywiJDEiKTt2YXIgVWU9Ry5ub2Nhc2U/Imki''@;'; put 'put ''OiIiO3RyeXt2YXIgaHQ9bmV3IFJlZ0V4cCgiXiIrRCsiJCIsVWUpfWNhdGNoe3JldHVybiBuZXcgUmVnRXhwKCIkLiIpfXJldHVybiBodC5fZ2xvYj11ZSxodC5fc3JjPUQsaHR9O3ZhciBoZT17fTtlZS5tYWtlUmU9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBuZXcgdGUodWUsY2V8fHt9KS5t''@;'; put 'put ''YWtlUmUoKX0sdGUucHJvdG90eXBlLm1ha2VSZT1mdW5jdGlvbigpe2lmKHRoaXMucmVnZXhwfHwhMT09PXRoaXMucmVnZXhwKXJldHVybiB0aGlzLnJlZ2V4cDt2YXIgdWU9dGhpcy5zZXQ7aWYoIXVlLmxlbmd0aClyZXR1cm4gdGhpcy5yZWdleHA9ITEsdGhpcy5yZWdleHA7dmFyIGNlPXRo''@;'; put 'put ''aXMub3B0aW9ucyxHPWNlLm5vZ2xvYnN0YXI/VjpjZS5kb3Q/Iig/Oig/ISg/OlxcL3xeKSg/OlxcLnsxLDJ9KSgkfFxcLykpLikqPyI6Iig/Oig/ISg/OlxcL3xeKVxcLikuKSo/IixiPWNlLm5vY2FzZT8iaSI6IiIsRD11ZS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubWFwKGZ1bmN0aW9u''@;'; put 'put ''KE4pe3JldHVybiBOPT09ST9HOiJzdHJpbmciPT10eXBlb2YgTj9OLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXHNdL2csIlxcJCYiKTpOLl9zcmN9KS5qb2luKCJcXC8iKX0pLmpvaW4oInwiKTtEPSJeKD86IitEKyIpJCIsdGhpcy5uZWdhdGUmJihEPSJeKD8hIitEKyIpLiokIik7''@;'; put 'put ''dHJ5e3RoaXMucmVnZXhwPW5ldyBSZWdFeHAoRCxiKX1jYXRjaHt0aGlzLnJlZ2V4cD0hMX1yZXR1cm4gdGhpcy5yZWdleHB9LGVlLm1hdGNoPWZ1bmN0aW9uKHVlLGNlLEcpe3ZhciBiPW5ldyB0ZShjZSxHPUd8fHt9KTtyZXR1cm4gdWU9dWUuZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBi''@;'; put 'put ''Lm1hdGNoKEQpfSksYi5vcHRpb25zLm5vbnVsbCYmIXVlLmxlbmd0aCYmdWUucHVzaChjZSksdWV9LHRlLnByb3RvdHlwZS5tYXRjaD1mdW5jdGlvbih1ZSxjZSl7aWYodm9pZCAwPT09Y2UmJihjZT10aGlzLnBhcnRpYWwpLHRoaXMuZGVidWcoIm1hdGNoIix1ZSx0aGlzLnBhdHRlcm4pLHRo''@;'; put 'put ''aXMuY29tbWVudClyZXR1cm4hMTtpZih0aGlzLmVtcHR5KXJldHVybiIiPT09dWU7aWYoIi8iPT09dWUmJmNlKXJldHVybiEwO3ZhciBHPXRoaXMub3B0aW9uczsiLyIhPT1LLnNlcCYmKHVlPXVlLnNwbGl0KEsuc2VwKS5qb2luKCIvIikpLHVlPXVlLnNwbGl0KFUpLHRoaXMuZGVidWcodGhp''@;'; put 'put ''cy5wYXR0ZXJuLCJzcGxpdCIsdWUpO3ZhciBiLEQsSD10aGlzLnNldDtmb3IodGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sInNldCIsSCksRD11ZS5sZW5ndGgtMTtEPj0wJiYhKGI9dWVbRF0pO0QtLSk7Zm9yKEQ9MDtEPEgubGVuZ3RoO0QrKyl7dmFyIE49SFtEXSxnPXVlO2lmKEcubWF0Y2hC''@;'; put 'put ''YXNlJiYxPT09Ti5sZW5ndGgmJihnPVtiXSksdGhpcy5tYXRjaE9uZShnLE4sY2UpKXJldHVybiEhRy5mbGlwTmVnYXRlfHwhdGhpcy5uZWdhdGV9cmV0dXJuIUcuZmxpcE5lZ2F0ZSYmdGhpcy5uZWdhdGV9LHRlLnByb3RvdHlwZS5tYXRjaE9uZT1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYj10''@;'; put 'put ''aGlzLm9wdGlvbnM7dGhpcy5kZWJ1ZygibWF0Y2hPbmUiLHt0aGlzOnRoaXMsZmlsZTp1ZSxwYXR0ZXJuOmNlfSksdGhpcy5kZWJ1ZygibWF0Y2hPbmUiLHVlLmxlbmd0aCxjZS5sZW5ndGgpO2Zvcih2YXIgRD0wLEg9MCxOPXVlLmxlbmd0aCxnPWNlLmxlbmd0aDtEPE4mJkg8ZztEKyssSCsr''@;'; put 'put ''KXt0aGlzLmRlYnVnKCJtYXRjaE9uZSBsb29wIik7dmFyIEMsUz1jZVtIXSx2PXVlW0RdO2lmKHRoaXMuZGVidWcoY2UsUyx2KSwhMT09PVMpcmV0dXJuITE7aWYoUz09PUkpe3RoaXMuZGVidWcoIkdMT0JTVEFSIixbY2UsUyx2XSk7dmFyIHA9RCx3PUgrMTtpZih3PT09Zyl7Zm9yKHRoaXMu''@;'; put 'put ''ZGVidWcoIioqIGF0IHRoZSBlbmQiKTtEPE47RCsrKWlmKCIuIj09PXVlW0RdfHwiLi4iPT09dWVbRF18fCFiLmRvdCYmIi4iPT09dWVbRF0uY2hhckF0KDApKXJldHVybiExO3JldHVybiEwfWZvcig7cDxOOyl7dmFyIEo9dWVbcF07aWYodGhpcy5kZWJ1ZygiXG5nbG9ic3RhciB3aGlsZSIs''@;'; put 'put ''dWUscCxjZSx3LEopLHRoaXMubWF0Y2hPbmUodWUuc2xpY2UocCksY2Uuc2xpY2UodyksRykpcmV0dXJuIHRoaXMuZGVidWcoImdsb2JzdGFyIGZvdW5kIG1hdGNoISIscCxOLEopLCEwO2lmKCIuIj09PUp8fCIuLiI9PT1KfHwhYi5kb3QmJiIuIj09PUouY2hhckF0KDApKXt0aGlzLmRlYnVn''@;'; put 'put ''KCJkb3QgZGV0ZWN0ZWQhIix1ZSxwLGNlLHcpO2JyZWFrfXRoaXMuZGVidWcoImdsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUiKSxwKyt9cmV0dXJuISghR3x8KHRoaXMuZGVidWcoIlxuPj4+IG5vIG1hdGNoLCBwYXJ0aWFsPyIsdWUscCxjZSx3KSxwIT09TikpfWlm''@;'; put 'put ''KCJzdHJpbmciPT10eXBlb2YgUz90aGlzLmRlYnVnKCJzdHJpbmcgbWF0Y2giLFMsdixDPXY9PT1TKTooQz12Lm1hdGNoKFMpLHRoaXMuZGVidWcoInBhdHRlcm4gbWF0Y2giLFMsdixDKSksIUMpcmV0dXJuITF9aWYoRD09PU4mJkg9PT1nKXJldHVybiEwO2lmKEQ9PT1OKXJldHVybiBHO2lm''@;'; put 'put ''KEg9PT1nKXJldHVybiBEPT09Ti0xJiYiIj09PXVlW0RdO3Rocm93IG5ldyBFcnJvcigid3RmPyIpfX0sNDI0NDpNPT57InVzZSBzdHJpY3QiO3ZhciBPPWZ1bmN0aW9uKFIpe3JldHVybiBSIT1SfTtNLmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtyZXR1cm4gMD09PVImJjA9PT16PzEvUj09MS96''@;'; put 'put ''OlI9PT16fHwhKCFPKFIpfHwhTyh6KSl9fSw2MDk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODkpLEs9Uig1NTU5KSxJPVIoNDI0NCksaz1SKDU2MjQpLEU9UigyMjgxKSxqPUsoaygpLE9iamVjdCk7eihqLHtnZXRQb2x5ZmlsbDprLGltcGxlbWVudGF0aW9uOkksc2hpbTpF''@;'; put 'put ''fSksTS5leHBvcnRzPWp9LDU2MjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyNDQpO00uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOnp9fSwyMjgxOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1''@;'; put 'put ''NjI0KSxLPVIoNDI4OSk7TS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEk9eigpO3JldHVybiBLKE9iamVjdCx7aXM6SX0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PUl9fSksSX19LDg5ODc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgejtpZighT2JqZWN0LmtleXMpe3Zh''@;'; put 'put ''ciBLPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGs9UigxNDE0KSxFPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsaj0hRS5jYWxsKHt0b1N0cmluZzpudWxsfSwidG9TdHJpbmciKSxWPUUuY2FsbChmdW5j''@;'; put 'put ''dGlvbigpe30sInByb3RvdHlwZSIpLEI9WyJ0b1N0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwidmFsdWVPZiIsImhhc093blByb3BlcnR5IiwiaXNQcm90b3R5cGVPZiIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY29uc3RydWN0b3IiXSxZPWZ1bmN0aW9uKHEpe3ZhciBlZT1xLmNvbnN0cnVj''@;'; put 'put ''dG9yO3JldHVybiBlZSYmZWUucHJvdG90eXBlPT09cX0sWD17JGFwcGxpY2F0aW9uQ2FjaGU6ITAsJGNvbnNvbGU6ITAsJGV4dGVybmFsOiEwLCRmcmFtZTohMCwkZnJhbWVFbGVtZW50OiEwLCRmcmFtZXM6ITAsJGlubmVySGVpZ2h0OiEwLCRpbm5lcldpZHRoOiEwLCRvbm1vemZ1bGxzY3Jl''@;'; put 'put ''ZW5jaGFuZ2U6ITAsJG9ubW96ZnVsbHNjcmVlbmVycm9yOiEwLCRvdXRlckhlaWdodDohMCwkb3V0ZXJXaWR0aDohMCwkcGFnZVhPZmZzZXQ6ITAsJHBhZ2VZT2Zmc2V0OiEwLCRwYXJlbnQ6ITAsJHNjcm9sbExlZnQ6ITAsJHNjcm9sbFRvcDohMCwkc2Nyb2xsWDohMCwkc2Nyb2xsWTohMCwk''@;'; put 'put ''c2VsZjohMCwkd2Via2l0SW5kZXhlZERCOiEwLCR3ZWJraXRTdG9yYWdlSW5mbzohMCwkd2luZG93OiEwfSxVPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuITE7Zm9yKHZhciBxIGluIHdpbmRvdyl0cnl7aWYoIVhbIiQiK3FdJiZLLmNhbGwod2luZG93LHEpJiZudWxs''@;'; put 'put ''IT09d2luZG93W3FdJiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvd1txXSl0cnl7WSh3aW5kb3dbcV0pfWNhdGNoe3JldHVybiEwfX1jYXRjaHtyZXR1cm4hMH1yZXR1cm4hMX0oKTt6PWZ1bmN0aW9uKHEpe3ZhciBlZT1udWxsIT09cSYmIm9iamVjdCI9PXR5cGVvZiBxLHRlPSJbb2JqZWN0IEZ1''@;'; put 'put ''bmN0aW9uXSI9PT1JLmNhbGwocSksb2U9ayhxKSxzZT1lZSYmIltvYmplY3QgU3RyaW5nXSI9PT1JLmNhbGwocSksaGU9W107aWYoIWVlJiYhdGUmJiFvZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Iik7dmFyIHVlPVYmJnRlO2lmKHNl''@;'; put 'put ''JiZxLmxlbmd0aD4wJiYhSy5jYWxsKHEsMCkpZm9yKHZhciBjZT0wO2NlPHEubGVuZ3RoOysrY2UpaGUucHVzaChTdHJpbmcoY2UpKTtpZihvZSYmcS5sZW5ndGg+MClmb3IodmFyIEc9MDtHPHEubGVuZ3RoOysrRyloZS5wdXNoKFN0cmluZyhHKSk7ZWxzZSBmb3IodmFyIGIgaW4gcSl1ZSYm''@;'; put 'put ''InByb3RvdHlwZSI9PT1ifHwhSy5jYWxsKHEsYil8fGhlLnB1c2goU3RyaW5nKGIpKTtpZihqKWZvcih2YXIgRD1mdW5jdGlvbihOKXtpZih0eXBlb2Ygd2luZG93PiJ1Inx8IVUpcmV0dXJuIFkoTik7dHJ5e3JldHVybiBZKE4pfWNhdGNoe3JldHVybiExfX0ocSksSD0wO0g8Qi5sZW5ndGg7''@;'; put 'put ''KytIKUQmJiJjb25zdHJ1Y3RvciI9PT1CW0hdfHwhSy5jYWxsKHEsQltIXSl8fGhlLnB1c2goQltIXSk7cmV0dXJuIGhlfX1NLmV4cG9ydHM9en0sMjIxNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PUFycmF5LnByb3RvdHlwZS5zbGljZSxLPVIoMTQxNCksST1PYmplY3Qua2V5cyxr''@;'; put 'put ''PUk/ZnVuY3Rpb24oail7cmV0dXJuIEkoail9OlIoODk4NyksRT1PYmplY3Qua2V5cztrLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIGo9ZnVuY3Rpb24oKXt2YXIgVj1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVybiBWJiZWLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGh9KDEsMik7anx8KE9iamVjdC5rZXlzPWZ1bmN0aW9uKFYpe3JldHVybiBLKFYpP0Uoei5jYWxsKFYpKTpFKFYpfSl9ZWxzZSBPYmplY3Qua2V5cz1rO3JldHVybiBPYmplY3Qua2V5c3x8a30sTS5leHBvcnRzPWt9LDE0MTQ6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz1PYmplY3QucHJvdG90''@;'; put 'put ''eXBlLnRvU3RyaW5nO00uZXhwb3J0cz1mdW5jdGlvbihSKXt2YXIgej1PLmNhbGwoUiksSz0iW29iamVjdCBBcmd1bWVudHNdIj09PXo7cmV0dXJuIEt8fChLPSJbb2JqZWN0IEFycmF5XSIhPT16JiZudWxsIT09UiYmIm9iamVjdCI9PXR5cGVvZiBSJiYibnVtYmVyIj09dHlwZW9mIFIubGVu''@;'; put 'put ''Z3RoJiZSLmxlbmd0aD49MCYmIltvYmplY3QgRnVuY3Rpb25dIj09PU8uY2FsbChSLmNhbGxlZSkpLEt9fSw3Nzg6KE0sTyxSKT0+e3ZhciB6PVIoMjQ3OSk7ZnVuY3Rpb24gSyhrKXt2YXIgRT1mdW5jdGlvbigpe3JldHVybiBFLmNhbGxlZD9FLnZhbHVlOihFLmNhbGxlZD0hMCxFLnZhbHVl''@;'; put 'put ''PWsuYXBwbHkodGhpcyxhcmd1bWVudHMpKX07cmV0dXJuIEUuY2FsbGVkPSExLEV9ZnVuY3Rpb24gSShrKXt2YXIgRT1mdW5jdGlvbigpe2lmKEUuY2FsbGVkKXRocm93IG5ldyBFcnJvcihFLm9uY2VFcnJvcik7cmV0dXJuIEUuY2FsbGVkPSEwLEUudmFsdWU9ay5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9O3JldHVybiBFLm9uY2VFcnJvcj0oay5uYW1lfHwiRnVuY3Rpb24gd3JhcHBlZCB3aXRoIGBvbmNlYCIpKyIgc2hvdWxkbid0IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSIsRS5jYWxsZWQ9ITEsRX1NLmV4cG9ydHM9eihLKSxNLmV4cG9ydHMuc3RyaWN0PXooSSksSy5wcm90bz1L''@;'; put 'put ''KGZ1bmN0aW9uKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwib25jZSIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyl9LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGdW5jdGlvbi5wcm90b3R5cGUsIm9uY2VTdHJpY3Qi''@;'; put 'put ''LHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBJKHRoaXMpfSxjb25maWd1cmFibGU6ITB9KX0pfSw3NDM1OihNLE8pPT57Ty5lbmRpYW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIkxFIn0sTy5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9uLmhv''@;'; put 'put ''c3RuYW1lOiIifSxPLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sTy51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0sTy5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LE8udG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0s''@;'; put 'put ''Ty5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LE8udHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0sTy5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxPLm5ldHdvcmtJbnRlcmZhY2VzPU8uZ2V0TmV0''@;'; put 'put ''d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sTy5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxPLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxPLnRtcGRpcj1PLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0sTy5FT0w9Ilxu''@;'; put 'put ''IixPLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig5ODA5KTtPLmNlcnRpZmljYXRlPVIoMTkzNCk7dmFyIEs9ei5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXko''@;'; put 'put ''InZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMu''@;'; put 'put ''a2V5KCJleHBvbmVudDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7Ty5SU0FQcml2YXRlS2V5PUs7dmFyIEk9ei5kZWZpbmUoIlJTQVB1YmxpY0tleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpKX0pO08uUlNBUHVibGljS2V5PUk7dmFyIGs9ei5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoRSks''@;'; put 'put ''dGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtPLlB1YmxpY0tleT1rO3ZhciBFPXouZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIiku''@;'; put 'put ''bnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLGo9ei5k''@;'; put 'put ''ZWZpbmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtPLlByaXZhdGVLZXk9ajt2YXIg''@;'; put 'put ''Vj16LmRlZmluZSgiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJkZWNyeXB0Iikuc2VxKCkub2JqKHRoaXMua2V5KCJrZGUiKS5z''@;'; put 'put ''ZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgia2RlcGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJzYWx0Iikub2N0c3RyKCksdGhpcy5rZXkoIml0ZXJzIikuaW50KCkpKSx0aGlzLmtleSgiY2lwaGVyIikuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvIikub2Jq''@;'; put 'put ''aWQoKSx0aGlzLmtleSgiaXYiKS5vY3RzdHIoKSkpKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtPLkVuY3J5cHRlZFByaXZhdGVLZXk9Vjt2YXIgQj16LmRlZmluZSgiRFNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgi''@;'; put 'put ''dmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpLHRoaXMua2V5KCJwdWJfa2V5IikuaW50KCksdGhpcy5rZXkoInByaXZfa2V5IikuaW50KCkpfSk7Ty5EU0FQcml2YXRlS2V5PUIsTy5EU0FwYXJhbT16LmRl''@;'; put 'put ''ZmluZSgiRFNBcGFyYW0iLGZ1bmN0aW9uKCl7dGhpcy5pbnQoKX0pO3ZhciBZPXouZGVmaW5lKCJFQ1ByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUtleSIpLm9jdHN0cigpLHRoaXMua2V5KCJw''@;'; put 'put ''YXJhbWV0ZXJzIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoWCksdGhpcy5rZXkoInB1YmxpY0tleSIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7Ty5FQ1ByaXZhdGVLZXk9WTt2YXIgWD16LmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hv''@;'; put 'put ''aWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSk7Ty5zaWduYXR1cmU9ei5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDE5MzQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgej1SKDk4MDkpLEs9ei5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLEk9ei5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9i''@;'; put 'put ''aih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksaz16LmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIp''@;'; put 'put ''Lm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLEU9ei5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoayksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNL''@;'; put 'put ''ZXkiKS5iaXRzdHIoKSl9KSxqPXouZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YoSSl9KSxWPXouZGVmaW5lKCJSRE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKGopfSksQj16LmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoVil9KX0pLFk9ei5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoSyksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKEspKX0pLFg9ei5kZWZpbmUoIkV4dGVu''@;'; put 'put ''c2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksVT16LmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQoKSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKGspLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoQiksdGhpcy5rZXkoInZh''@;'; put 'put ''bGlkaXR5IikudXNlKFkpLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZShFKSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVl''@;'; put 'put ''SUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoWCkub3B0aW9uYWwoKSl9KSxxPXouZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0Nl''@;'; put 'put ''cnRpZmljYXRlIikudXNlKFUpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoayksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7TS5leHBvcnRzPXF9LDc2MzE6KE0sTyxSKT0+e3ZhciB6PS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEW1xuXHJdK0RFSy1J''@;'; put 'put ''bmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylbXG5ccl0rKFswLTlBLXpcblxyKy89XSspW1xuXHJdKy9tLEs9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJUSUZJQ0FURSktLS0tLS9tLEk9L14tLS0tLUJFR0lOICgoPzouKj8gS0VZKXxDRVJU''@;'; put 'put ''SUZJQ0FURSktLS0tLShbMC05QS16XG5ccisvPV0rKS0tLS0tRU5EIFwxLS0tLS0kL20saz1SKDMwNDgpLEU9Uig0Njk2KSxqPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihWLEIpe3ZhciBZLFg9Vi50b1N0cmluZygpLFU9WC5tYXRjaCh6KTtpZihVKXt2YXIgcT0iYWVzIitV''@;'; put 'put ''WzFdLGVlPWouZnJvbShVWzJdLCJoZXgiKSx0ZT1qLmZyb20oVVszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLG9lPWsoQixlZS5zbGljZSgwLDgpLHBhcnNlSW50KFVbMV0sMTApKS5rZXksc2U9W10saGU9RS5jcmVhdGVEZWNpcGhlcml2KHEsb2UsZWUpO3NlLnB1c2goaGUu''@;'; put 'put ''dXBkYXRlKHRlKSksc2UucHVzaChoZS5maW5hbCgpKSxZPWouY29uY2F0KHNlKX1lbHNle3ZhciB1ZT1YLm1hdGNoKEkpO1k9ai5mcm9tKHVlWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9cmV0dXJue3RhZzpYLm1hdGNoKEspWzFdLGRhdGE6WX19fSw5ODA6KE0sTyxSKT0+''@;'; put 'put ''e3ZhciB6PVIoMjgxOCksSz1SKDI1NjIpLEk9Uig3NjMxKSxrPVIoNDY5NiksRT1SKDU2MzIpLGo9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gVihCKXt2YXIgWTsib2JqZWN0IiE9dHlwZW9mIEJ8fGouaXNCdWZmZXIoQil8fChZPUIucGFzc3BocmFzZSxCPUIua2V5KSwic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEImJihCPWouZnJvbShCKSk7dmFyIFgsVSxvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4sZyxxPUkoQixZKSxlZT1xLnRhZyx0ZT1xLmRhdGE7c3dpdGNoKGVlKXtjYXNlIkNFUlRJRklDQVRFIjpVPXouY2VydGlmaWNhdGUuZGVjb2RlKHRlLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJq''@;'; put 'put ''ZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChVfHwoVT16LlB1YmxpY0tleS5kZWNvZGUodGUsImRlciIpKSxYPVUuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiB6LlJTQVB1YmxpY0tleS5kZWNv''@;'; put 'put ''ZGUoVS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBVLnN1YmplY3RQcml2YXRlS2V5PVUuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6VX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFUuYWxnb3JpdGht''@;'; put 'put ''LnBhcmFtcy5wdWJfa2V5PXouRFNBcGFyYW0uZGVjb2RlKFUuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlUuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrWCl9Y2FzZSJFTkNSWVBURUQgUFJJ''@;'; put 'put ''VkFURSBLRVkiOnNlPVksaGU9KG9lPXRlPXouRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsdWU9cGFyc2VJbnQob2UuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygp''@;'; put 'put ''LDEwKSxjZT1LW29lLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sRz1vZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsYj1vZS5zdWJqZWN0UHJpdmF0ZUtleSxEPXBhcnNlSW50KGNlLnNwbGl0KCItIilbMV0sMTApLzgsSD1FLnBia2RmMlN5bmMoc2UsaGUs''@;'; put 'put ''dWUsRCwic2hhMSIpLE49ay5jcmVhdGVEZWNpcGhlcml2KGNlLEgsRyksKGc9W10pLnB1c2goTi51cGRhdGUoYikpLGcucHVzaChOLmZpbmFsKCkpLHRlPWouY29uY2F0KGcpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChYPShVPXouUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5hbGdv''@;'; put 'put ''cml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIHouUlNBUHJpdmF0ZUtleS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlUuYWxnb3JpdGhtLmN1cnZl''@;'; put 'put ''LHByaXZhdGVLZXk6ei5FQ1ByaXZhdGVLZXkuZGVjb2RlKFUuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBVLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9ei5EU0FwYXJhbS5kZWNvZGUoVS5zdWJqZWN0UHJpdmF0''@;'; put 'put ''ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlUuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrWCl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIHouUlNBUHVibGljS2V5LmRlY29kZSh0ZSwiZGVyIik7Y2FzZSJSU0Eg''@;'; put 'put ''UFJJVkFURSBLRVkiOnJldHVybiB6LlJTQVByaXZhdGVLZXkuZGVjb2RlKHRlLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOnouRFNBUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3Vy''@;'; put 'put ''dmU6KHRlPXouRUNQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTp0ZS5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK2VlKX19TS5leHBvcnRzPVYsVi5zaWduYXR1cmU9ei5zaWduYXR1''@;'; put 'put ''cmV9LDQwOTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoayl7cmV0dXJuIi8iPT09ay5jaGFyQXQoMCl9ZnVuY3Rpb24gSShrKXt2YXIgRT0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNc''@;'; put 'put ''U10qPykkLy5leGVjKGspLGo9RVsxXXx8IiIsVj0hKCFqfHwiOiI9PT1qLmNoYXJBdCgxKSk7cmV0dXJuISghRVsyXSYmIVYpfU0uZXhwb3J0cz0id2luMzIiPT09ei5wbGF0Zm9ybT9JOkssTS5leHBvcnRzLnBvc2l4PUssTS5leHBvcnRzLndpbjMyPUl9LDE3MjU6TT0+e00uZXhwb3J0cz0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihPLFIpe08uc3VwZXJfPVIsTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShSLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOk8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmZ1''@;'; put 'put ''bmN0aW9uKE8sUil7Ty5zdXBlcl89Ujt2YXIgej1mdW5jdGlvbigpe307ei5wcm90b3R5cGU9Ui5wcm90b3R5cGUsTy5wcm90b3R5cGU9bmV3IHosTy5wcm90b3R5cGUuY29uc3RydWN0b3I9T319LDI5NzQ6TT0+e00uZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gTyYmIm9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBPJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgTy5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5yZWFkVUludDh9fSw4MDU5OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpLEs9Uig1MTA4KSxJPS8lW3NkaiVdL2c7Ty5mb3JtYXQ9ZnVuY3Rpb24o''@;'; put 'put ''Uyl7aWYoIXNlKFMpKXtmb3IodmFyIHY9W10scD0wO3A8YXJndW1lbnRzLmxlbmd0aDtwKyspdi5wdXNoKGooYXJndW1lbnRzW3BdKSk7cmV0dXJuIHYuam9pbigiICIpfXA9MTtmb3IodmFyIHc9YXJndW1lbnRzLEo9dy5sZW5ndGgsbmU9U3RyaW5nKFMpLnJlcGxhY2UoSSxmdW5jdGlvbihm''@;'; put 'put ''ZSl7aWYoIiUlIj09PWZlKXJldHVybiIlIjtpZihwPj1KKXJldHVybiBmZTtzd2l0Y2goZmUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcod1twKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKHdbcCsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh3W3ArK10pfWNhdGNo''@;'; put 'put ''e3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBmZX19KSxkZT13W3BdO3A8SjtkZT13WysrcF0pdGUoZGUpfHwhY2UoZGUpP25lKz0iICIrZGU6bmUrPSIgIitqKGRlKTtyZXR1cm4gbmV9LE8uZGVwcmVjYXRlPWZ1bmN0aW9uKFMsdil7aWYoaGUoUi5nLnByb2Nlc3MpKXJldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBPLmRlcHJlY2F0ZShTLHYpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT16Lm5vRGVwcmVjYXRpb24pcmV0dXJuIFM7dmFyIHA9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIXApe2lmKHoudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''dik7ei50cmFjZURlcHJlY2F0aW9uP0sudHJhY2Uodik6Sy5lcnJvcih2KSxwPSEwfXJldHVybiBTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBrLEU9e307ZnVuY3Rpb24gaihTLHYpe3ZhciBwPXtzZWVuOltdLHN0eWxpemU6Qn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihw''@;'; put 'put ''LmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKHAuY29sb3JzPWFyZ3VtZW50c1szXSksZWUodik/cC5zaG93SGlkZGVuPXY6diYmTy5fZXh0ZW5kKHAsdiksaGUocC5zaG93SGlkZGVuKSYmKHAuc2hvd0hpZGRlbj0hMSksaGUocC5kZXB0aCkmJihwLmRlcHRoPTIp''@;'; put 'put ''LGhlKHAuY29sb3JzKSYmKHAuY29sb3JzPSExKSxoZShwLmN1c3RvbUluc3BlY3QpJiYocC5jdXN0b21JbnNwZWN0PSEwKSxwLmNvbG9ycyYmKHAuc3R5bGl6ZT1WKSxZKHAsUyxwLmRlcHRoKX1mdW5jdGlvbiBWKFMsdil7dmFyIHA9ai5zdHlsZXNbdl07cmV0dXJuIHA/Ilx4MWJbIitqLmNv''@;'; put 'put ''bG9yc1twXVswXSsibSIrUysiXHgxYlsiK2ouY29sb3JzW3BdWzFdKyJtIjpTfWZ1bmN0aW9uIEIoUyx2KXtyZXR1cm4gU31mdW5jdGlvbiBZKFMsdixwKXtpZihTLmN1c3RvbUluc3BlY3QmJnYmJkQodi5pbnNwZWN0KSYmdi5pbnNwZWN0IT09Ty5pbnNwZWN0JiYoIXYuY29uc3RydWN0b3J8''@;'; put 'put ''fHYuY29uc3RydWN0b3IucHJvdG90eXBlIT09dikpe3ZhciB3PXYuaW5zcGVjdChwLFMpO3JldHVybiBzZSh3KXx8KHc9WShTLHcscCkpLHd9dmFyIEo9ZnVuY3Rpb24oamUsV2Upe2lmKGhlKFdlKSlyZXR1cm4gamUuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoc2UoV2Up''@;'; put 'put ''KXt2YXIgS2U9IiciK0pTT04uc3RyaW5naWZ5KFdlKS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBqZS5zdHlsaXplKEtlLCJzdHJpbmciKX1yZXR1cm4gb2UoV2UpP2plLnN0eWxpemUoIiIrV2UsIm51bWJl''@;'; put 'put ''ciIpOmVlKFdlKT9qZS5zdHlsaXplKCIiK1dlLCJib29sZWFuIik6dGUoV2UpP2plLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShTLHYpO2lmKEopcmV0dXJuIEo7dmFyIFdlLG5lPU9iamVjdC5rZXlzKHYpLGRlPShXZT17fSxuZS5mb3JFYWNoKGZ1bmN0aW9uKEtlLFllKXtXZVtL''@;'; put 'put ''ZV09ITB9KSxXZSk7aWYoUy5zaG93SGlkZGVuJiYobmU9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModikpLGIodikmJihuZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG5lLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBYKHYpO2lmKDA9PT1uZS5sZW5ndGgpe2lmKEQodikp''@;'; put 'put ''cmV0dXJuIFMuc3R5bGl6ZSgiW0Z1bmN0aW9uIisodi5uYW1lPyI6ICIrdi5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZih1ZSh2KSlyZXR1cm4gUy5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2KSwicmVnZXhwIik7aWYoRyh2KSlyZXR1cm4gUy5zdHlsaXplKERh''@;'; put 'put ''dGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodiksImRhdGUiKTtpZihiKHYpKXJldHVybiBYKHYpfXZhciB4ZSxMZT0iIixGZT0hMSxPZT1bInsiLCJ9Il07cmV0dXJuIHEodikmJihGZT0hMCxPZT1bIlsiLCJdIl0pLEQodikmJihMZT0iIFtGdW5jdGlvbiIrKHYubmFtZT8iOiAiK3YubmFt''@;'; put 'put ''ZToiIikrIl0iKSx1ZSh2KSYmKExlPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodikpLEcodikmJihMZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh2KSksYih2KSYmKExlPSIgIitYKHYpKSwwIT09bmUubGVuZ3RofHxGZSYmMCE9di5sZW5ndGg/cDww''@;'; put 'put ''P3VlKHYpP1Muc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodiksInJlZ2V4cCIpOlMuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KFMuc2Vlbi5wdXNoKHYpLHhlPUZlP2Z1bmN0aW9uKGplLFdlLEtlLFllLEplKXtmb3IodmFyIGx0PVtdLFBlPTAsYmU9V2Uu''@;'; put 'put ''bGVuZ3RoO1BlPGJlOysrUGUpQyhXZSxTdHJpbmcoUGUpKT9sdC5wdXNoKFUoamUsV2UsS2UsWWUsU3RyaW5nKFBlKSwhMCkpOmx0LnB1c2goIiIpO3JldHVybiBKZS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtBZS5tYXRjaCgvXlxkKyQvKXx8bHQucHVzaChVKGplLFdlLEtlLFllLEFlLCEwKSl9''@;'; put 'put ''KSxsdH0oUyx2LHAsZGUsbmUpOm5lLm1hcChmdW5jdGlvbihqZSl7cmV0dXJuIFUoUyx2LHAsZGUsamUsRmUpfSksUy5zZWVuLnBvcCgpLGZ1bmN0aW9uKGplLFdlLEtlKXtyZXR1cm4gamUucmVkdWNlKGZ1bmN0aW9uKEplLGx0KXtyZXR1cm4gbHQuaW5kZXhPZigiXG4iKSxKZStsdC5yZXBs''@;'; put 'put ''YWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjA/S2VbMF0rKCIiPT09V2U/IiI6V2UrIlxuICIpKyIgIitqZS5qb2luKCIsXG4gICIpKyIgIitLZVsxXTpLZVswXStXZSsiICIramUuam9pbigiLCAiKSsiICIrS2VbMV19KHhlLExlLE9lKSk6T2VbMF0rTGUrT2VbMV19''@;'; put 'put ''ZnVuY3Rpb24gWChTKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUykrIl0ifWZ1bmN0aW9uIFUoUyx2LHAsdyxKLG5lKXt2YXIgZGUsZmUseGU7aWYoKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodixKKXx8e3ZhbHVlOnZbSl19KS5nZXQ/ZmU9''@;'; put 'put ''Uy5zdHlsaXplKHhlLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6eGUuc2V0JiYoZmU9Uy5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksQyh3LEopfHwoZGU9IlsiK0orIl0iKSxmZXx8KFMuc2Vlbi5pbmRleE9mKHhlLnZhbHVlKTwwPyhmZT10ZShw''@;'; put 'put ''KT9ZKFMseGUudmFsdWUsbnVsbCk6WShTLHhlLnZhbHVlLHAtMSkpLmluZGV4T2YoIlxuIik+LTEmJihmZT1uZT9mZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oTGUpe3JldHVybiIgICIrTGV9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK2ZlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlv''@;'; put 'put ''bihMZSl7cmV0dXJuIiAgICIrTGV9KS5qb2luKCJcbiIpKTpmZT1TLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGhlKGRlKSl7aWYobmUmJkoubWF0Y2goL15cZCskLykpcmV0dXJuIGZlOyhkZT1KU09OLnN0cmluZ2lmeSgiIitKKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpB''@;'; put 'put ''LVpfMC05XSopIiQvKT8oZGU9ZGUuc3Vic3RyKDEsZGUubGVuZ3RoLTIpLGRlPVMuc3R5bGl6ZShkZSwibmFtZSIpKTooZGU9ZGUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLGRlPVMuc3R5bGl6ZShkZSwic3RyaW5nIikp''@;'; put 'put ''fXJldHVybiBkZSsiOiAiK2ZlfWZ1bmN0aW9uIHEoUyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoUyl9ZnVuY3Rpb24gZWUoUyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgU31mdW5jdGlvbiB0ZShTKXtyZXR1cm4gbnVsbD09PVN9ZnVuY3Rpb24gb2UoUyl7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBTfWZ1bmN0aW9uIHNlKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgU31mdW5jdGlvbiBoZShTKXtyZXR1cm4gdm9pZCAwPT09U31mdW5jdGlvbiB1ZShTKXtyZXR1cm4gY2UoUykmJiJbb2JqZWN0IFJlZ0V4cF0iPT09SChTKX1mdW5jdGlvbiBjZShTKXtyZXR1cm4ib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIFMmJm51bGwhPT1TfWZ1bmN0aW9uIEcoUyl7cmV0dXJuIGNlKFMpJiYiW29iamVjdCBEYXRlXSI9PT1IKFMpfWZ1bmN0aW9uIGIoUyl7cmV0dXJuIGNlKFMpJiYoIltvYmplY3QgRXJyb3JdIj09PUgoUyl8fFMgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gRChTKXtyZXR1cm4iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU31mdW5jdGlvbiBIKFMpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUyl9ZnVuY3Rpb24gTihTKXtyZXR1cm4gUzwxMD8iMCIrUy50b1N0cmluZygxMCk6Uy50b1N0cmluZygxMCl9Ty5kZWJ1Z2xvZz1mdW5jdGlvbihTKXtpZihoZShrKSYm''@;'; put 'put ''KGs9ei5lbnYuTk9ERV9ERUJVR3x8IiIpLFM9Uy50b1VwcGVyQ2FzZSgpLCFFW1NdKWlmKG5ldyBSZWdFeHAoIlxcYiIrUysiXFxiIiwiaSIpLnRlc3Qoaykpe3ZhciB2PXoucGlkO0VbU109ZnVuY3Rpb24oKXt2YXIgcD1PLmZvcm1hdC5hcHBseShPLGFyZ3VtZW50cyk7Sy5lcnJvcigiJXMg''@;'; put 'put ''JWQ6ICVzIixTLHYscCl9fWVsc2UgRVtTXT1mdW5jdGlvbigpe307cmV0dXJuIEVbU119LE8uaW5zcGVjdD1qLGouY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6''@;'; put 'put ''WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxqLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5''@;'; put 'put ''IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LE8uaXNBcnJheT1xLE8uaXNCb29sZWFuPWVlLE8uaXNOdWxsPXRlLE8uaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24oUyl7cmV0dXJuIG51bGw9PVN9LE8uaXNOdW1iZXI9b2UsTy5pc1N0''@;'; put 'put ''cmluZz1zZSxPLmlzU3ltYm9sPWZ1bmN0aW9uKFMpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgU30sTy5pc1VuZGVmaW5lZD1oZSxPLmlzUmVnRXhwPXVlLE8uaXNPYmplY3Q9Y2UsTy5pc0RhdGU9RyxPLmlzRXJyb3I9YixPLmlzRnVuY3Rpb249RCxPLmlzUHJpbWl0aXZlPWZ1bmN0aW9uKFMp''@;'; put 'put ''e3JldHVybiBudWxsPT09U3x8ImJvb2xlYW4iPT10eXBlb2YgU3x8Im51bWJlciI9PXR5cGVvZiBTfHwic3RyaW5nIj09dHlwZW9mIFN8fCJzeW1ib2wiPT10eXBlb2YgU3x8dm9pZCAwPT09U30sTy5pc0J1ZmZlcj1SKDI5NzQpO3ZhciBnPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5''@;'; put 'put ''IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gQyhTLHYpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyx2KX1PLmxvZz1mdW5jdGlvbigpe3ZhciBTLHY7Sy5sb2coIiVzIC0gJXMiLCh2PVtOKChTPW5ldyBE''@;'; put 'put ''YXRlKS5nZXRIb3VycygpKSxOKFMuZ2V0TWludXRlcygpKSxOKFMuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpLFtTLmdldERhdGUoKSxnW1MuZ2V0TW9udGgoKV0sdl0uam9pbigiICIpKSxPLmZvcm1hdC5hcHBseShPLGFyZ3VtZW50cykpfSxPLmluaGVyaXRzPVIoMTcyNSksTy5fZXh0ZW5k''@;'; put 'put ''PWZ1bmN0aW9uKFMsdil7aWYoIXZ8fCFjZSh2KSlyZXR1cm4gUztmb3IodmFyIHA9T2JqZWN0LmtleXModiksdz1wLmxlbmd0aDt3LS07KVNbcFt3XV09dltwW3ddXTtyZXR1cm4gU319LDI1MjA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUpLEs9IndpbjMyIj09PXoucGxh''@;'; put 'put ''dGZvcm0sST1SKDgwNTkpO2Z1bmN0aW9uIGsob2Usc2Upe2Zvcih2YXIgaGU9W10sdWU9MDt1ZTxvZS5sZW5ndGg7dWUrKyl7dmFyIGNlPW9lW3VlXTtjZSYmIi4iIT09Y2UmJigiLi4iPT09Y2U/aGUubGVuZ3RoJiYiLi4iIT09aGVbaGUubGVuZ3RoLTFdP2hlLnBvcCgpOnNlJiZoZS5wdXNo''@;'; put 'put ''KCIuLiIpOmhlLnB1c2goY2UpKX1yZXR1cm4gaGV9ZnVuY3Rpb24gRShvZSl7Zm9yKHZhciBzZT1vZS5sZW5ndGgtMSxoZT0wO2hlPD1zZSYmIW9lW2hlXTtoZSsrKTtmb3IodmFyIHVlPXNlO3VlPj0wJiYhb2VbdWVdO3VlLS0pO3JldHVybiAwPT09aGUmJnVlPT09c2U/b2U6aGU+dWU/W106''@;'; put 'put ''b2Uuc2xpY2UoaGUsdWUrMSl9dmFyIGo9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10rKT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sVj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sQj17fTtm''@;'; put 'put ''dW5jdGlvbiBZKG9lKXt2YXIgc2U9ai5leGVjKG9lKSxoZT0oc2VbMV18fCIiKSsoc2VbMl18fCIiKSxjZT1WLmV4ZWMoc2VbM118fCIiKTtyZXR1cm5baGUsY2VbMV0sY2VbMl0sY2VbM11dfWZ1bmN0aW9uIFgob2Upe3ZhciBzZT1qLmV4ZWMob2UpLGhlPXNlWzFdfHwiIix1ZT0hIWhlJiYi''@;'; put 'put ''OiIhPT1oZVsxXTtyZXR1cm57ZGV2aWNlOmhlLGlzVW5jOnVlLGlzQWJzb2x1dGU6dWV8fCEhc2VbMl0sdGFpbDpzZVszXX19ZnVuY3Rpb24gVShvZSl7cmV0dXJuIlxcXFwiK29lLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVwbGFjZSgvW1xcXC9dKy9nLCJcXCIpfUIucmVzb2x2ZT1mdW5j''@;'; put 'put ''dGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9IiIsaGU9ITEsdWU9YXJndW1lbnRzLmxlbmd0aC0xO3VlPj0tMTt1ZS0tKXt2YXIgY2U7aWYodWU+PTA/Y2U9YXJndW1lbnRzW3VlXTpvZT8oY2U9ei5lbnZbIj0iK29lXSkmJmNlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk9PT1vZS50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpKyJcXCJ8fChjZT1vZSsiXFwiKTpjZT16LmN3ZCgpLCFJLmlzU3RyaW5nKGNlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO2lmKGNlKXt2YXIgRz1YKGNlKSxiPUcuZGV2aWNlLEQ9Ry5pc1VuYyxIPUcuaXNB''@;'; put 'put ''YnNvbHV0ZSxOPUcudGFpbDtpZigoIWJ8fCFvZXx8Yi50b0xvd2VyQ2FzZSgpPT09b2UudG9Mb3dlckNhc2UoKSkmJihvZXx8KG9lPWIpLGhlfHwoc2U9TisiXFwiK3NlLGhlPUgpLG9lJiZoZSkpYnJlYWt9fXJldHVybiBEJiYob2U9VShvZSkpLG9lKyhoZT8iXFwiOiIiKSsoc2U9ayhzZS5z''@;'; put 'put ''cGxpdCgvW1xcXC9dKy8pLCFoZSkuam9pbigiXFwiKSl8fCIuIn0sQi5ub3JtYWxpemU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1YKG9lKSxoZT1zZS5kZXZpY2UsdWU9c2UuaXNVbmMsY2U9c2UuaXNBYnNvbHV0ZSxHPXNlLnRhaWwsYj0vW1xcXC9dJC8udGVzdChHKTtyZXR1cm4oRz1rKEcuc3Bs''@;'; put 'put ''aXQoL1tcXFwvXSsvKSwhY2UpLmpvaW4oIlxcIikpfHxjZXx8KEc9Ii4iKSxHJiZiJiYoRys9IlxcIiksdWUmJihoZT1VKGhlKSksaGUrKGNlPyJcXCI6IiIpK0d9LEIuaXNBYnNvbHV0ZT1mdW5jdGlvbihvZSl7cmV0dXJuIFgob2UpLmlzQWJzb2x1dGV9LEIuam9pbj1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgb2U9W10sc2U9MDtzZTxhcmd1bWVudHMubGVuZ3RoO3NlKyspe3ZhciBoZT1hcmd1bWVudHNbc2VdO2lmKCFJLmlzU3RyaW5nKGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2hlJiZvZS5wdXNoKGhlKX12YXIg''@;'; put 'put ''dWU9b2Uuam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVteXFxcL10vLnRlc3Qob2VbMF0pfHwodWU9dWUucmVwbGFjZSgvXltcXFwvXXsyLH0vLCJcXCIpKSxCLm5vcm1hbGl6ZSh1ZSl9LEIucmVsYXRpdmU9ZnVuY3Rpb24ob2Usc2Upe29lPUIucmVzb2x2ZShvZSksc2U9Qi5yZXNvbHZl''@;'; put 'put ''KHNlKTtmb3IodmFyIGhlPW9lLnRvTG93ZXJDYXNlKCksdWU9c2UudG9Mb3dlckNhc2UoKSxjZT1FKHNlLnNwbGl0KCJcXCIpKSxHPUUoaGUuc3BsaXQoIlxcIikpLGI9RSh1ZS5zcGxpdCgiXFwiKSksRD1NYXRoLm1pbihHLmxlbmd0aCxiLmxlbmd0aCksSD1ELE49MDtOPEQ7TisrKWlmKEdb''@;'; put 'put ''Tl0hPT1iW05dKXtIPU47YnJlYWt9aWYoMD09SClyZXR1cm4gc2U7dmFyIGc9W107Zm9yKE49SDtOPEcubGVuZ3RoO04rKylnLnB1c2goIi4uIik7cmV0dXJuKGc9Zy5jb25jYXQoY2Uuc2xpY2UoSCkpKS5qb2luKCJcXCIpfSxCLl9tYWtlTG9uZz1mdW5jdGlvbihvZSl7aWYoIUkuaXNTdHJp''@;'; put 'put ''bmcob2UpKXJldHVybiBvZTtpZighb2UpcmV0dXJuIiI7dmFyIHNlPUIucmVzb2x2ZShvZSk7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3Qoc2UpPyJcXFxcP1xcIitzZTovXlxcXFxbXj8uXS8udGVzdChzZSk/IlxcXFw/XFxVTkNcXCIrc2Uuc3Vic3RyaW5nKDIpOm9lfSxCLmRpcm5hbWU9''@;'; put 'put ''ZnVuY3Rpb24ob2Upe3ZhciBzZT1ZKG9lKSxoZT1zZVswXSx1ZT1zZVsxXTtyZXR1cm4gaGV8fHVlPyh1ZSYmKHVlPXVlLnN1YnN0cigwLHVlLmxlbmd0aC0xKSksaGUrdWUpOiIuIn0sQi5iYXNlbmFtZT1mdW5jdGlvbihvZSxzZSl7dmFyIGhlPVkob2UpWzJdO3JldHVybiBzZSYmaGUuc3Vi''@;'; put 'put ''c3RyKC0xKnNlLmxlbmd0aCk9PT1zZSYmKGhlPWhlLnN1YnN0cigwLGhlLmxlbmd0aC1zZS5sZW5ndGgpKSxoZX0sQi5leHRuYW1lPWZ1bmN0aW9uKG9lKXtyZXR1cm4gWShvZSlbM119LEIuZm9ybWF0PWZ1bmN0aW9uKG9lKXtpZighSS5pc09iamVjdChvZSkpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIG9lKTtpZighSS5pc1N0cmluZyhvZS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAi''@;'; put 'put ''K3R5cGVvZiBvZS5yb290KTt2YXIgaGU9b2UuZGlyLHVlPW9lLmJhc2V8fCIiO3JldHVybiBoZT9oZVtoZS5sZW5ndGgtMV09PT1CLnNlcD9oZSt1ZTpoZStCLnNlcCt1ZTp1ZX0sQi5wYXJzZT1mdW5jdGlvbihvZSl7aWYoIUkuaXNTdHJpbmcob2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBh''@;'; put 'put ''cmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIG9lKTt2YXIgc2U9WShvZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitvZSsiJyIpO3JldHVybntyb290OnNlWzBdLGRpcjpzZVswXStz''@;'; put 'put ''ZVsxXS5zbGljZSgwLC0xKSxiYXNlOnNlWzJdLGV4dDpzZVszXSxuYW1lOnNlWzJdLnNsaWNlKDAsc2VbMl0ubGVuZ3RoLXNlWzNdLmxlbmd0aCl9fSxCLnNlcD0iXFwiLEIuZGVsaW1pdGVyPSI7Ijt2YXIgcT0vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5c''@;'; put 'put ''L10qfCkpKD86W1wvXSopJC8sZWU9e307ZnVuY3Rpb24gdGUob2Upe3JldHVybiBxLmV4ZWMob2UpLnNsaWNlKDEpfWVlLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIG9lPSIiLHNlPSExLGhlPWFyZ3VtZW50cy5sZW5ndGgtMTtoZT49LTEmJiFzZTtoZS0tKXt2YXIgdWU9aGU+PTA/YXJn''@;'; put 'put ''dW1lbnRzW2hlXTp6LmN3ZCgpO2lmKCFJLmlzU3RyaW5nKHVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO3VlJiYob2U9dWUrIi8iK29lLHNlPSIvIj09PXVlWzBdKX1yZXR1cm4oc2U/Ii8iOiIiKSsob2U9ayhvZS5z''@;'; put 'put ''cGxpdCgiLyIpLCFzZSkuam9pbigiLyIpKXx8Ii4ifSxlZS5ub3JtYWxpemU9ZnVuY3Rpb24ob2Upe3ZhciBzZT1lZS5pc0Fic29sdXRlKG9lKSxoZT1vZSYmIi8iPT09b2Vbb2UubGVuZ3RoLTFdO3JldHVybihvZT1rKG9lLnNwbGl0KCIvIiksIXNlKS5qb2luKCIvIikpfHxzZXx8KG9lPSIu''@;'; put 'put ''Iiksb2UmJmhlJiYob2UrPSIvIiksKHNlPyIvIjoiIikrb2V9LGVlLmlzQWJzb2x1dGU9ZnVuY3Rpb24ob2Upe3JldHVybiIvIj09PW9lLmNoYXJBdCgwKX0sZWUuam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgb2U9IiIsc2U9MDtzZTxhcmd1bWVudHMubGVuZ3RoO3NlKyspe3ZhciBoZT1hcmd1''@;'; put 'put ''bWVudHNbc2VdO2lmKCFJLmlzU3RyaW5nKGhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2hlJiYob2UrPW9lPyIvIitoZTpoZSl9cmV0dXJuIGVlLm5vcm1hbGl6ZShvZSl9LGVlLnJlbGF0aXZlPWZ1bmN0aW9uKG9lLHNl''@;'; put 'put ''KXtvZT1lZS5yZXNvbHZlKG9lKS5zdWJzdHIoMSksc2U9ZWUucmVzb2x2ZShzZSkuc3Vic3RyKDEpO2Zvcih2YXIgaGU9RShvZS5zcGxpdCgiLyIpKSx1ZT1FKHNlLnNwbGl0KCIvIikpLGNlPU1hdGgubWluKGhlLmxlbmd0aCx1ZS5sZW5ndGgpLEc9Y2UsYj0wO2I8Y2U7YisrKWlmKGhlW2Jd''@;'; put 'put ''IT09dWVbYl0pe0c9YjticmVha312YXIgRD1bXTtmb3IoYj1HO2I8aGUubGVuZ3RoO2IrKylELnB1c2goIi4uIik7cmV0dXJuKEQ9RC5jb25jYXQodWUuc2xpY2UoRykpKS5qb2luKCIvIil9LGVlLl9tYWtlTG9uZz1mdW5jdGlvbihvZSl7cmV0dXJuIG9lfSxlZS5kaXJuYW1lPWZ1bmN0aW9u''@;'; put 'put ''KG9lKXt2YXIgc2U9dGUob2UpLGhlPXNlWzBdLHVlPXNlWzFdO3JldHVybiBoZXx8dWU/KHVlJiYodWU9dWUuc3Vic3RyKDAsdWUubGVuZ3RoLTEpKSxoZSt1ZSk6Ii4ifSxlZS5iYXNlbmFtZT1mdW5jdGlvbihvZSxzZSl7dmFyIGhlPXRlKG9lKVsyXTtyZXR1cm4gc2UmJmhlLnN1YnN0cigt''@;'; put 'put ''MSpzZS5sZW5ndGgpPT09c2UmJihoZT1oZS5zdWJzdHIoMCxoZS5sZW5ndGgtc2UubGVuZ3RoKSksaGV9LGVlLmV4dG5hbWU9ZnVuY3Rpb24ob2Upe3JldHVybiB0ZShvZSlbM119LGVlLmZvcm1hdD1mdW5jdGlvbihvZSl7aWYoIUkuaXNPYmplY3Qob2UpKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBvZSk7aWYoIUkuaXNTdHJpbmcob2Uucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0''@;'; put 'put ''eXBlb2Ygb2Uucm9vdCk7cmV0dXJuKG9lLmRpcj9vZS5kaXIrZWUuc2VwOiIiKSsob2UuYmFzZXx8IiIpfSxlZS5wYXJzZT1mdW5jdGlvbihvZSl7aWYoIUkuaXNTdHJpbmcob2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywg''@;'; put 'put ''bm90ICIrdHlwZW9mIG9lKTt2YXIgc2U9dGUob2UpO2lmKCFzZXx8NCE9PXNlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrb2UrIiciKTtyZXR1cm4gc2VbMV09c2VbMV18fCIiLHNlWzJdPXNlWzJdfHwiIixzZVszXT1zZVszXXx8IiIse3Jvb3Q6c2VbMF0s''@;'; put 'put ''ZGlyOnNlWzBdK3NlWzFdLnNsaWNlKDAsLTEpLGJhc2U6c2VbMl0sZXh0OnNlWzNdLG5hbWU6c2VbMl0uc2xpY2UoMCxzZVsyXS5sZW5ndGgtc2VbM10ubGVuZ3RoKX19LGVlLnNlcD0iLyIsZWUuZGVsaW1pdGVyPSI6IixNLmV4cG9ydHM9Sz9COmVlLE0uZXhwb3J0cy5wb3NpeD1lZSxNLmV4''@;'; put 'put ''cG9ydHMud2luMzI9Qn0sNTYzMjooTSxPLFIpPT57Ty5wYmtkZjI9Uig4NjM4KSxPLnBia2RmMlN5bmM9UigxMjU3KX0sODYzODooTSxPLFIpPT57dmFyIHosSyxJPVIoOTUwOSkuQnVmZmVyLGs9Uig3MzU3KSxFPVIoMjM2OCksaj1SKDEyNTcpLFY9Uig3Nzc3KSxCPVIuZy5jcnlwdG8mJlIu''@;'; put 'put ''Zy5jcnlwdG8uc3VidGxlLFk9e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hB''@;'; put 'put ''LTUxMiJ9LFg9W107ZnVuY3Rpb24gVSgpe3JldHVybiBLfHwoSz1SLmcucHJvY2VzcyYmUi5nLnByb2Nlc3MubmV4dFRpY2s/Ui5nLnByb2Nlc3MubmV4dFRpY2s6Ui5nLnF1ZXVlTWljcm90YXNrP1IuZy5xdWV1ZU1pY3JvdGFzazpSLmcuc2V0SW1tZWRpYXRlP1IuZy5zZXRJbW1lZGlhdGU6''@;'; put 'put ''Ui5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIHEoZWUsdGUsb2Usc2UsaGUpe3JldHVybiBCLmltcG9ydEtleSgicmF3IixlZSx7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBCLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDp0''@;'; put 'put ''ZSxpdGVyYXRpb25zOm9lLGhhc2g6e25hbWU6aGV9fSx1ZSxzZTw8Myl9KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gSS5mcm9tKHVlKX0pfU0uZXhwb3J0cz1mdW5jdGlvbihlZSx0ZSxvZSxzZSxoZSx1ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGhlJiYodWU9aGUsaGU9dm9pZCAwKTt2YXIg''@;'; put 'put ''RyxiLGNlPVlbKGhlPWhlfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGNlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5nLlByb21pc2Upe2lmKGsob2Usc2UpLGVlPVYoZWUsRSwiUGFzc3dvcmQiKSx0ZT1WKHRlLEUsIlNhbHQiKSwiZnVuY3Rpb24iIT10eXBlb2YgdWUpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjIiKTtHPWZ1bmN0aW9uKEcpe2lmKFIuZy5wcm9jZXNzJiYhUi5nLnByb2Nlc3MuYnJvd3Nlcnx8IUJ8fCFCLmltcG9ydEtleXx8IUIuZGVyaXZlQml0cylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCExKTtpZih2b2lkIDAhPT1YW0dd''@;'; put 'put ''KXJldHVybiBYW0ddO3ZhciBiPXEoej16fHxJLmFsbG9jKDgpLHosMTAsMTI4LEcpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuITF9KTtyZXR1cm4gWFtHXT1iLGJ9KGNlKS50aGVuKGZ1bmN0aW9uKEcpe3JldHVybiBHP3EoZWUsdGUsb2Usc2Us''@;'; put 'put ''Y2UpOmooZWUsdGUsb2Usc2UsaGUpfSksYj11ZSxHLnRoZW4oZnVuY3Rpb24oRCl7VSgpKGZ1bmN0aW9uKCl7YihudWxsLEQpfSl9LGZ1bmN0aW9uKEQpe1UoKShmdW5jdGlvbigpe2IoRCl9KX0pfWVsc2UgVSgpKGZ1bmN0aW9uKCl7dmFyIEc7dHJ5e0c9aihlZSx0ZSxvZSxzZSxoZSl9Y2F0''@;'; put 'put ''Y2goYil7cmV0dXJuIHVlKGIpfXVlKG51bGwsRyl9KX19LDIzNjg6KE0sTyxSKT0+e3ZhciB6LEs9Uig0MTU1KTt6PVIuZy5wcm9jZXNzJiZSLmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Ui5nLnByb2Nlc3MmJlIuZy5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQoSy52ZXJzaW9uLnNwbGl0''@;'; put 'put ''KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04IixNLmV4cG9ydHM9en0sNzM1NzpNPT57dmFyIE89TWF0aC5wb3coMiwzMCktMTtNLmV4cG9ydHM9ZnVuY3Rpb24oUix6KXtpZigibnVtYmVyIiE9dHlwZW9mIFIpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRl''@;'; put 'put ''cmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihSPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIHopdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3QgYSBudW1iZXIiKTtpZih6PDB8fHo+T3x8eiE9eil0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzooTSxPLFIpPT57dmFyIHo9Uig4MDI4KSxLPVIoOTc4NSksST1SKDkwNzIpLGs9Uig5NTA5KS5CdWZmZXIsRT1SKDczNTcpLGo9UigyMzY4KSxWPVIoNzc3NyksQj1rLmFsbG9jKDEyOCksWT17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0''@;'; put 'put ''OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJtZDE2MDoyMCxyaXBlbWQxNjA6MjB9O2Z1bmN0aW9uIFgoVSxxLGVlKXt2YXIgRyx0ZT0icm1kMTYwIj09PShHPVUpfHwicmlwZW1kMTYwIj09PUc/ZnVuY3Rpb24gRChIKXtyZXR1cm4obmV3IEspLnVwZGF0ZShIKS5kaWdlc3Qo''@;'; put 'put ''KX06Im1kNSI9PT1HP3o6ZnVuY3Rpb24gYihIKXtyZXR1cm4gSShHKS51cGRhdGUoSCkuZGlnZXN0KCl9LG9lPSJzaGE1MTIiPT09VXx8InNoYTM4NCI9PT1VPzEyODo2NDtxLmxlbmd0aD5vZT9xPXRlKHEpOnEubGVuZ3RoPG9lJiYocT1rLmNvbmNhdChbcSxCXSxvZSkpO2Zvcih2YXIgc2U9''@;'; put 'put ''ay5hbGxvY1Vuc2FmZShvZStZW1VdKSxoZT1rLmFsbG9jVW5zYWZlKG9lK1lbVV0pLHVlPTA7dWU8b2U7dWUrKylzZVt1ZV09NTRecVt1ZV0saGVbdWVdPTkyXnFbdWVdO3ZhciBjZT1rLmFsbG9jVW5zYWZlKG9lK2VlKzQpO3NlLmNvcHkoY2UsMCwwLG9lKSx0aGlzLmlwYWQxPWNlLHRoaXMu''@;'; put 'put ''aXBhZDI9c2UsdGhpcy5vcGFkPWhlLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9b2UsdGhpcy5oYXNoPXRlLHRoaXMuc2l6ZT1ZW1VdfVgucHJvdG90eXBlLnJ1bj1mdW5jdGlvbihVLHEpe3JldHVybiBVLmNvcHkocSx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHEpLmNvcHkodGhpcy5v''@;'; put 'put ''cGFkLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2godGhpcy5vcGFkKX0sTS5leHBvcnRzPWZ1bmN0aW9uKFUscSxlZSx0ZSxvZSl7RShlZSx0ZSk7dmFyIHNlPW5ldyBYKG9lPW9lfHwic2hhMSIsVT1WKFUsaiwiUGFzc3dvcmQiKSwocT1WKHEsaiwiU2FsdCIpKS5sZW5ndGgpLGhlPWsuYWxs''@;'; put 'put ''b2NVbnNhZmUodGUpLHVlPWsuYWxsb2NVbnNhZmUocS5sZW5ndGgrNCk7cS5jb3B5KHVlLDAsMCxxLmxlbmd0aCk7Zm9yKHZhciBjZT0wLEc9WVtvZV0sYj1NYXRoLmNlaWwodGUvRyksRD0xO0Q8PWI7RCsrKXt1ZS53cml0ZVVJbnQzMkJFKEQscS5sZW5ndGgpO2Zvcih2YXIgSD1zZS5ydW4o''@;'; put 'put ''dWUsc2UuaXBhZDEpLE49SCxnPTE7ZzxlZTtnKyspe049c2UucnVuKE4sc2UuaXBhZDIpO2Zvcih2YXIgQz0wO0M8RztDKyspSFtDXV49TltDXX1ILmNvcHkoaGUsY2UpLGNlKz1HfXJldHVybiBoZX19LDc3Nzc6KE0sTyxSKT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihLLEksayl7aWYoei5pc0J1ZmZlcihLKSlyZXR1cm4gSztpZigic3RyaW5nIj09dHlwZW9mIEspcmV0dXJuIHouZnJvbShLLEkpO2lmKEFycmF5QnVmZmVyLmlzVmlldyhLKSlyZXR1cm4gei5mcm9tKEsuYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKGsrIiBtdXN0IGJlIGEgc3Ry''@;'; put 'put ''aW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw0MTU1Ok09Pnt2YXIgTyxSLHo9TS5leHBvcnRzPXt9O2Z1bmN0aW9uIEsoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBJKCl7dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBrKGVlKXtpZihPPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChlZSwwKTtpZigoTz09PUt8fCFPKSYmc2V0VGltZW91dClyZXR1cm4gTz1zZXRUaW1lb3V0LHNldFRpbWVvdXQoZWUsMCk7''@;'; put 'put ''dHJ5e3JldHVybiBPKGVlLDApfWNhdGNoe3RyeXtyZXR1cm4gTy5jYWxsKG51bGwsZWUsMCl9Y2F0Y2h7cmV0dXJuIE8uY2FsbCh0aGlzLGVlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e089ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpLfWNhdGNoe089S310cnl7Uj0i''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpJfWNhdGNoe1I9SX19KCk7dmFyIEUsaj1bXSxWPSExLEI9LTE7ZnVuY3Rpb24gWSgpe1YmJkUmJihWPSExLEUubGVuZ3RoP2o9RS5jb25jYXQoaik6Qj0tMSxqLmxlbmd0aCYmWCgpKX1mdW5jdGlvbiBYKCl7aWYo''@;'; put 'put ''IVYpe3ZhciBlZT1rKFkpO1Y9ITA7Zm9yKHZhciB0ZT1qLmxlbmd0aDt0ZTspe2ZvcihFPWosaj1bXTsrK0I8dGU7KUUmJkVbQl0ucnVuKCk7Qj0tMSx0ZT1qLmxlbmd0aH1FPW51bGwsVj0hMSxmdW5jdGlvbihvZSl7aWYoUj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KG9l''@;'; put 'put ''KTtpZigoUj09PUl8fCFSKSYmY2xlYXJUaW1lb3V0KXJldHVybiBSPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQob2UpO3RyeXtyZXR1cm4gUihvZSl9Y2F0Y2h7dHJ5e3JldHVybiBSLmNhbGwobnVsbCxvZSl9Y2F0Y2h7cmV0dXJuIFIuY2FsbCh0aGlzLG9lKX19fShlZSl9fWZ1bmN0aW9u''@;'; put 'put ''IFUoZWUsdGUpe3RoaXMuZnVuPWVlLHRoaXMuYXJyYXk9dGV9ZnVuY3Rpb24gcSgpe316Lm5leHRUaWNrPWZ1bmN0aW9uKGVlKXt2YXIgdGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgb2U9MTtvZTxhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''O29lKyspdGVbb2UtMV09YXJndW1lbnRzW29lXTtqLnB1c2gobmV3IFUoZWUsdGUpKSwxIT09ai5sZW5ndGh8fFZ8fGsoWCl9LFUucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHoudGl0bGU9ImJyb3dzZXIiLHouYnJvd3Nlcj0hMCx6''@;'; put 'put ''LmVudj17fSx6LmFyZ3Y9W10sei52ZXJzaW9uPSIiLHoudmVyc2lvbnM9e30sei5vbj1xLHouYWRkTGlzdGVuZXI9cSx6Lm9uY2U9cSx6Lm9mZj1xLHoucmVtb3ZlTGlzdGVuZXI9cSx6LnJlbW92ZUFsbExpc3RlbmVycz1xLHouZW1pdD1xLHoucHJlcGVuZExpc3RlbmVyPXEsei5wcmVwZW5k''@;'; put 'put ''T25jZUxpc3RlbmVyPXEsei5saXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3JldHVybltdfSx6LmJpbmRpbmc9ZnVuY3Rpb24oZWUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQiKX0sei5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9LHouY2hkaXI9ZnVu''@;'; put 'put ''Y3Rpb24oZWUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHoudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDYyNDQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDM2ODkpLEs9e307Sy5ydWxlcz1SKDM3MDQpLm1hcChmdW5jdGlv''@;'; put 'put ''bihJKXtyZXR1cm57cnVsZTpJLHN1ZmZpeDpJLnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxwdW55U3VmZml4Oi0xLHdpbGRjYXJkOiIqIj09PUkuY2hhckF0KDApLGV4Y2VwdGlvbjoiISI9PT1JLmNoYXJBdCgwKX19KSxLLmVuZHNXaXRoPWZ1bmN0aW9uKEksayl7cmV0dXJuLTEhPT1JLmlu''@;'; put 'put ''ZGV4T2YoayxJLmxlbmd0aC1rLmxlbmd0aCl9LEsuZmluZFJ1bGU9ZnVuY3Rpb24oSSl7dmFyIGs9ei50b0FTQ0lJKEkpO3JldHVybiBLLnJ1bGVzLnJlZHVjZShmdW5jdGlvbihFLGope3JldHVybi0xPT09ai5wdW55U3VmZml4JiYoai5wdW55U3VmZml4PXoudG9BU0NJSShqLnN1ZmZpeCkp''@;'; put 'put ''LEsuZW5kc1dpdGgoaywiLiIrai5wdW55U3VmZml4KXx8az09PWoucHVueVN1ZmZpeD9qOkV9LG51bGwpfSxPLmVycm9yQ29kZXM9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9ydC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3Vs''@;'; put 'put ''ZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4i''@;'; put 'put ''LExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRv''@;'; put 'put ''bWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LEsudmFsaWRhdGU9ZnVuY3Rpb24oSSl7dmFyIGs9ei50b0FTQ0lJKEkpO2lmKGsubGVuZ3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKGsubGVuZ3RoPjI1''@;'; put 'put ''NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtmb3IodmFyIEUsaj1rLnNwbGl0KCIuIiksVj0wO1Y8ai5sZW5ndGg7KytWKXtpZighKEU9altWXSkubGVuZ3RoKXJldHVybiJMQUJFTF9UT09fU0hPUlQiO2lmKEUubGVuZ3RoPjYzKXJldHVybiJMQUJFTF9UT09fTE9ORyI7aWYoIi0iPT09RS5j''@;'; put 'put ''aGFyQXQoMCkpcmV0dXJuIkxBQkVMX1NUQVJUU19XSVRIX0RBU0giO2lmKCItIj09PUUuY2hhckF0KEUubGVuZ3RoLTEpKXJldHVybiJMQUJFTF9FTkRTX1dJVEhfREFTSCI7aWYoIS9eW2EtejAtOVwtXSskLy50ZXN0KEUpKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19LE8ucGFyc2U9''@;'; put 'put ''ZnVuY3Rpb24oSSl7aWYoInN0cmluZyIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGs9SS5zbGljZSgwKS50b0xvd2VyQ2FzZSgpOyIuIj09PWsuY2hhckF0KGsubGVuZ3RoLTEpJiYoaz1rLnNsaWNlKDAsay5sZW5n''@;'; put 'put ''dGgtMSkpO3ZhciBFPUsudmFsaWRhdGUoayk7aWYoRSlyZXR1cm57aW5wdXQ6SSxlcnJvcjp7bWVzc2FnZTpPLmVycm9yQ29kZXNbRV0sY29kZTpFfX07dmFyIGo9e2lucHV0OkksdGxkOm51bGwsc2xkOm51bGwsZG9tYWluOm51bGwsc3ViZG9tYWluOm51bGwsbGlzdGVkOiExfSxWPWsuc3Bs''@;'; put 'put ''aXQoIi4iKTtpZigibG9jYWwiPT09VltWLmxlbmd0aC0xXSlyZXR1cm4gajt2YXIgQj1mdW5jdGlvbigpe3JldHVybi94bi0tLy50ZXN0KGspJiYoai5kb21haW4mJihqLmRvbWFpbj16LnRvQVNDSUkoai5kb21haW4pKSxqLnN1YmRvbWFpbiYmKGouc3ViZG9tYWluPXoudG9BU0NJSShqLnN1''@;'; put 'put ''YmRvbWFpbikpKSxqfSxZPUsuZmluZFJ1bGUoayk7aWYoIVkpcmV0dXJuIFYubGVuZ3RoPDI/ajooai50bGQ9Vi5wb3AoKSxqLnNsZD1WLnBvcCgpLGouZG9tYWluPVtqLnNsZCxqLnRsZF0uam9pbigiLiIpLFYubGVuZ3RoJiYoai5zdWJkb21haW49Vi5wb3AoKSksQigpKTtqLmxpc3RlZD0h''@;'; put 'put ''MDt2YXIgWD1ZLnN1ZmZpeC5zcGxpdCgiLiIpLFU9Vi5zbGljZSgwLFYubGVuZ3RoLVgubGVuZ3RoKTtyZXR1cm4gWS5leGNlcHRpb24mJlUucHVzaChYLnNoaWZ0KCkpLGoudGxkPVguam9pbigiLiIpLFUubGVuZ3RoPyhZLndpbGRjYXJkJiYoWC51bnNoaWZ0KFUucG9wKCkpLGoudGxkPVgu''@;'; put 'put ''am9pbigiLiIpKSxVLmxlbmd0aCYmKGouc2xkPVUucG9wKCksai5kb21haW49W2ouc2xkLGoudGxkXS5qb2luKCIuIiksVS5sZW5ndGgmJihqLnN1YmRvbWFpbj1VLmpvaW4oIi4iKSkpLEIoKSk6QigpfSxPLmdldD1mdW5jdGlvbihJKXtyZXR1cm4gSSYmTy5wYXJzZShJKS5kb21haW58fG51''@;'; put 'put ''bGx9LE8uaXNWYWxpZD1mdW5jdGlvbihJKXt2YXIgaz1PLnBhcnNlKEkpO3JldHVybiEoIWsuZG9tYWlufHwhay5saXN0ZWQpfX0sNzkwMDooTSxPLFIpPT57Ty5wdWJsaWNFbmNyeXB0PVIoNjU1OSksTy5wcml2YXRlRGVjcnlwdD1SKDYxMzgpLE8ucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24o''@;'; put 'put ''eixLKXtyZXR1cm4gTy5wdWJsaWNFbmNyeXB0KHosSywhMCl9LE8ucHVibGljRGVjcnlwdD1mdW5jdGlvbih6LEspe3JldHVybiBPLnByaXZhdGVEZWNyeXB0KHosSywhMCl9fSw5MTk5OihNLE8sUik9Pnt2YXIgej1SKDM0ODIpLEs9Uig5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gSShrKXt2YXIg''@;'; put 'put ''RT1LLmFsbG9jVW5zYWZlKDQpO3JldHVybiBFLndyaXRlVUludDMyQkUoaywwKSxFfU0uZXhwb3J0cz1mdW5jdGlvbihrLEUpe2Zvcih2YXIgaixWPUsuYWxsb2MoMCksQj0wO1YubGVuZ3RoPEU7KWo9SShCKyspLFY9Sy5jb25jYXQoW1Yseigic2hhMSIpLnVwZGF0ZShrKS51cGRhdGUoaiku''@;'; put 'put ''ZGlnZXN0KCldKTtyZXR1cm4gVi5zbGljZSgwLEUpfX0sMjE0NDpmdW5jdGlvbihNLE8sUil7IWZ1bmN0aW9uKHosSyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxDKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBrKGcsQyl7Zy5zdXBl''@;'; put 'put ''cl89Qzt2YXIgUz1mdW5jdGlvbigpe307Uy5wcm90b3R5cGU9Qy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IFMsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBFKGcsQyxTKXtpZihFLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0''@;'; put 'put ''aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09QyYmImJlIiE9PUN8fChTPUMsQz0xMCksdGhpcy5faW5pdChnfHwwLEN8fDEwLFN8fCJiZSIpKX12YXIgajsib2JqZWN0Ij09dHlwZW9mIHo/ei5leHBvcnRzPUU6Sy5CTj1FLEUuQk49RSxFLndvcmRTaXplPTI2''@;'; put 'put ''O3RyeXtqPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6Uig3MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFYoZyxDKXt2YXIgUz1nLmNoYXJDb2RlQXQoQyk7cmV0dXJuIFM+PTY1JiZTPD03MD9TLTU1OlM+PTk3JiZTPD0xMDI/Uy04''@;'; put 'put ''NzpTLTQ4JjE1fWZ1bmN0aW9uIEIoZyxDLFMpe3ZhciB2PVYoZyxTKTtyZXR1cm4gUy0xPj1DJiYodnw9VihnLFMtMSk8PDQpLHZ9ZnVuY3Rpb24gWShnLEMsUyx2KXtmb3IodmFyIHA9MCx3PU1hdGgubWluKGcubGVuZ3RoLFMpLEo9QztKPHc7SisrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEop''@;'; put 'put ''LTQ4O3AqPXYscCs9bmU+PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1FLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBFfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09RS53b3JkU2l6ZSYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShnLndvcmRzKX0sRS5tYXg9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gZy5jbXAoQyk+MD9nOkN9LEUubWluPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIGcuY21wKEMpPDA/ZzpDfSxFLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLEMsUyl7aWYoIm51bWJlciI9PXR5cGVvZiBn''@;'; put 'put ''KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsQyxTKTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLEMsUyk7ImhleCI9PT1DJiYoQz0xNiksSShDPT09KDB8QykmJkM+PTImJkM8PTM2KTt2YXIgdj0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNl''@;'; put 'put ''KC9ccysvZywiIikpWzBdJiYodisrLHRoaXMubmVnYXRpdmU9MSksdjxnLmxlbmd0aCYmKDE2PT09Qz90aGlzLl9wYXJzZUhleChnLHYsUyk6KHRoaXMuX3BhcnNlQmFzZShnLEMsdiksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxDLFMpKSl9LEUucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsQyxTKXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcx''@;'; put 'put ''MDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1TJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksQyxTKX0sRS5wcm90b3R5cGUu''@;'; put 'put ''X2luaXRBcnJheT1mdW5jdGlvbihnLEMsUyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciB2PTA7djx0aGlzLmxlbmd0aDt2KyspdGhpcy53b3Jkc1t2XT0wO3ZhciBwLHcsSj0wO2lmKCJiZSI9PT1TKWZvcih2PWcubGVuZ3RoLTEscD0wO3Y+PTA7di09Myl0aGlzLndvcmRzW3BdfD0odz1nW3ZdfGdbdi0xXTw8OHxnW3YtMl08PDE2KTw8SiY2''@;'; put 'put ''NzEwODg2Myx0aGlzLndvcmRzW3ArMV09dz4+PjI2LUomNjcxMDg4NjMsKEorPTI0KT49MjYmJihKLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PVMpZm9yKHY9MCxwPTA7djxnLmxlbmd0aDt2Kz0zKXRoaXMud29yZHNbcF18PSh3PWdbdl18Z1t2KzFdPDw4fGdbdisyXTw8MTYpPDxKJjY3MTA4''@;'; put 'put ''ODYzLHRoaXMud29yZHNbcCsxXT13Pj4+MjYtSiY2NzEwODg2MywoSis9MjQpPj0yNiYmKEotPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsQyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLUMpLzYpLHRoaXMu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPTA7dmFyIHAsdz0wLEo9MDtpZigiYmUiPT09Uylmb3Iodj1nLmxlbmd0aC0xO3Y+PUM7di09MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYz''@;'; put 'put ''JnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9MV18PXA+Pj4yNik6dys9ODtlbHNlIGZvcih2PShnLmxlbmd0aC1DKSUyPT0wP0MrMTpDO3Y8Zy5sZW5ndGg7dis9MilwPUIoZyxDLHYpPDx3LHRoaXMud29yZHNbSl18PTY3MTA4ODYzJnAsdz49MTg/KHctPTE4LHRoaXMud29yZHNbSis9''@;'; put 'put ''MV18PXA+Pj4yNik6dys9ODt0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxDLFMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciB2PTAscD0xO3A8PTY3MTA4ODYzO3AqPUMpdisrO3YtLSxwPXAvQ3wwO2Zvcih2YXIgdz1nLmxlbmd0''@;'; put 'put ''aC1TLEo9dyV2LG5lPU1hdGgubWluKHcsdy1KKStTLGRlPTAsZmU9UztmZTxuZTtmZSs9dilkZT1ZKGcsZmUsZmUrdixDKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpO2lmKDAhPT1KKXt2YXIgeGU9MTtm''@;'; put 'put ''b3IoZGU9WShnLGZlLGcubGVuZ3RoLEMpLGZlPTA7ZmU8SjtmZSsrKXhlKj1DO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rZGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9ZGU6dGhpcy5faWFkZG4oZGUpfXRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtn''@;'; put 'put ''LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspZy53b3Jkc1tDXT10aGlzLndvcmRzW0NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0sRS5wcm90b3R5cGUuY2xvbmU9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgZz1uZXcgRShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LEUucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LEUucHJvdG90eXBlLnN0cmlwPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sRS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMu''@;'; put 'put ''d29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LEUucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFg9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sVT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUs''@;'; put 'put ''NjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUs''@;'; put 'put ''MTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIGVlKGcsQyxTKXtTLm5lZ2F0aXZlPUMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgdj1nLmxlbmd0aCtD''@;'; put 'put ''Lmxlbmd0aHwwO1MubGVuZ3RoPXYsdj12LTF8MDt2YXIgcD0wfGcud29yZHNbMF0sdz0wfEMud29yZHNbMF0sSj1wKncsZGU9Si82NzEwODg2NHwwO1Mud29yZHNbMF09NjcxMDg4NjMmSjtmb3IodmFyIGZlPTE7ZmU8djtmZSsrKXtmb3IodmFyIHhlPWRlPj4+MjYsTGU9NjcxMDg4NjMmZGUs''@;'; put 'put ''RmU9TWF0aC5taW4oZmUsQy5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxmZS1nLmxlbmd0aCsxKTtPZTw9RmU7T2UrKyl4ZSs9KEo9KHA9MHxnLndvcmRzW2ZlLU9lfDBdKSoodz0wfEMud29yZHNbT2VdKStMZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZKO1Mud29yZHNbZmVdPTB8TGUsZGU9''@;'; put 'put ''MHx4ZX1yZXR1cm4gMCE9PWRlP1Mud29yZHNbZmVdPTB8ZGU6Uy5sZW5ndGgtLSxTLnN0cmlwKCl9RS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxDKXt2YXIgUztpZihDPTB8Q3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXtTPSIiO2Zvcih2YXIgdj0wLHA9MCx3PTA7dzx0''@;'; put 'put ''aGlzLmxlbmd0aDt3Kyspe3ZhciBKPXRoaXMud29yZHNbd10sbmU9KDE2Nzc3MjE1JihKPDx2fHApKS50b1N0cmluZygxNik7Uz0wIT0ocD1KPj4+MjQtdiYxNjc3NzIxNSl8fHchPT10aGlzLmxlbmd0aC0xP1hbNi1uZS5sZW5ndGhdK25lK1M6bmUrUywodis9Mik+PTI2JiYodi09MjYsdy0t''@;'; put 'put ''KX1mb3IoMCE9PXAmJihTPXAudG9TdHJpbmcoMTYpK1MpO1MubGVuZ3RoJUMhPTA7KVM9IjAiK1M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoUz0iLSIrUyksU31pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgZGU9VVtnXSxmZT1xW2ddO1M9IiI7dmFyIHhlPXRoaXMuY2xvbmUo''@;'; put 'put ''KTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgTGU9eGUubW9kbihmZSkudG9TdHJpbmcoZyk7Uz0oeGU9eGUuaWRpdm4oZmUpKS5pc1plcm8oKT9MZStTOlhbZGUtTGUubGVuZ3RoXStMZStTfWZvcih0aGlzLmlzWmVybygpJiYoUz0iMCIrUyk7Uy5sZW5ndGglQyE9MDsp''@;'; put 'put ''Uz0iMCIrUztyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihTPSItIitTKSxTfUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sRS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9''@;'; put 'put ''NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMi''@;'; put 'put ''KSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxFLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LEUucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsQyl7cmV0dXJuIEkodm9pZCAwIT09aiksdGhpcy50b0FycmF5TGlrZShqLGcsQyl9LEUu''@;'; put 'put ''cHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxDKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLEMpfSxFLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLEMsUyl7dmFyIHY9dGhpcy5ieXRlTGVuZ3RoKCkscD1TfHxNYXRoLm1heCgxLHYpO0kodjw9cCwiYnl0ZSBh''@;'; put 'put ''cnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHcsSixuZT0ibGUiPT09QyxkZT1uZXcgZyhwKSxmZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3''@;'; put 'put ''PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW0pdPXc7Zm9yKDtKPHA7SisrKWRlW0pdPTB9ZWxzZXtmb3IoSj0wO0o8cC12O0orKylkZVtKXT0wO2ZvcihKPTA7IWZlLmlzWmVybygpO0orKyl3PWZlLmFuZGxuKDI1NSksZmUuaXVzaHJuKDgpLGRlW3AtSi0xXT13fXJldHVybiBkZX0s''@;'; put 'put ''RS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgQz1nLFM9MDtyZXR1cm4gQz49NDA5NiYmKFMrPTEzLEM+Pj49MTMpLEM+PTY0JiYoUys9NyxDPj4+PTcpLEM+PTgmJihTKz00LEM+Pj49''@;'; put 'put ''NCksQz49MiYmKFMrPTIsQz4+Pj0yKSxTK0N9LEUucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIEM9ZyxTPTA7cmV0dXJuISg4MTkxJkMpJiYoUys9MTMsQz4+Pj0xMyksISgxMjcmQykmJihTKz03LEM+Pj49NyksISgxNSZDKSYmKFMrPTQs''@;'; put 'put ''Qz4+Pj00KSwhKDMmQykmJihTKz0yLEM+Pj49MiksISgxJkMpJiZTKyssU30sRS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrQ30sRS5wcm90b3R5''@;'; put 'put ''cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tDXSk7aWYoZys9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGd9LEUucHJvdG90eXBlLmJ5''@;'; put 'put ''dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LEUucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LEUucHJvdG90''@;'; put 'put ''eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LEUucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxFLnByb3RvdHlwZS5uZWc9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sRS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sRS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3Ro''@;'; put 'put ''Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBDPTA7QzxnLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT10aGlzLndvcmRzW0NdfGcud29yZHNbQ107cmV0dXJuIHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5l''@;'; put 'put ''Z2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9LEUucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LEUucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LEUucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBDO0M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29y''@;'; put 'put ''ZHNbU109dGhpcy53b3Jkc1tTXSZnLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1DLmxlbmd0aCx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09KHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LEUucHJvdG90''@;'; put 'put ''eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LEUucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFu''@;'; put 'put ''ZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LEUucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGcpe3ZhciBDLFM7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KEM9dGhpcyxTPWcpOihDPWcsUz10aGlzKTtmb3IodmFyIHY9MDt2PFMubGVuZ3RoO3YrKyl0aGlzLndvcmRzW3ZdPUMud29yZHNbdl1e''@;'; put 'put ''Uy53b3Jkc1t2XTtpZih0aGlzIT09Qylmb3IoO3Y8Qy5sZW5ndGg7disrKXRoaXMud29yZHNbdl09Qy53b3Jkc1t2XTtyZXR1cm4gdGhpcy5sZW5ndGg9Qy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PSh0aGlzLm5lZ2F0aXZl''@;'; put 'put ''fGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxFLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxFLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxFLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9MHxNYXRoLmNlaWwoZy8yNiksUz1nJTI2O3RoaXMuX2V4cGFu''@;'; put 'put ''ZChDKSxTPjAmJkMtLTtmb3IodmFyIHY9MDt2PEM7disrKXRoaXMud29yZHNbdl09NjcxMDg4NjMmfnRoaXMud29yZHNbdl07cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbdl09fnRoaXMud29yZHNbdl0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUubm90bj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxFLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsQyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWcvMjZ8MCx2PWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU109Qz90aGlzLndv''@;'; put 'put ''cmRzW1NdfDE8PHY6dGhpcy53b3Jkc1tTXSZ+KDE8PHYpLHRoaXMuc3RyaXAoKX0sRS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgQyxTLHY7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsQz10aGlzLmlzdWIoZyksdGhp''@;'; put 'put ''cy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLEM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMsdj1nKToo''@;'; put 'put ''Uz1nLHY9dGhpcyk7Zm9yKHZhciBwPTAsdz0wO3c8di5sZW5ndGg7dysrKXRoaXMud29yZHNbd109NjcxMDg4NjMmKEM9KDB8Uy53b3Jkc1t3XSkrKDB8di53b3Jkc1t3XSkrcCkscD1DPj4+MjY7Zm9yKDswIT09cCYmdzxTLmxlbmd0aDt3KyspdGhpcy53b3Jkc1t3XT02NzEwODg2MyYoQz0o''@;'; put 'put ''MHxTLndvcmRzW3ddKStwKSxwPUM+Pj4yNjtpZih0aGlzLmxlbmd0aD1TLmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihTIT09dGhpcylmb3IoO3c8Uy5sZW5ndGg7dysrKXRoaXMud29yZHNbd109Uy53b3Jkc1t3XTtyZXR1cm4g''@;'; put 'put ''dGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBDO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxDPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsQyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsQz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsQyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LEUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRp''@;'; put 'put ''dmU9MDt2YXIgQz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxDLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBTLHYscD10aGlzLmNt''@;'; put 'put ''cChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyhTPXRoaXMsdj1nKTooUz1nLHY9dGhpcyk7Zm9yKHZhciB3PTAsSj0wO0o8di5sZW5ndGg7SisrKXc9KEM9KDB8Uy53b3Jkc1tKXSktKDB8di53b3Jkc1tK''@;'; put 'put ''XSkrdyk+PjI2LHRoaXMud29yZHNbSl09NjcxMDg4NjMmQztmb3IoOzAhPT13JiZKPFMubGVuZ3RoO0orKyl3PShDPSgwfFMud29yZHNbSl0pK3cpPj4yNix0aGlzLndvcmRzW0pdPTY3MTA4ODYzJkM7aWYoMD09PXcmJko8Uy5sZW5ndGgmJlMhPT10aGlzKWZvcig7SjxTLmxlbmd0aDtKKysp''@;'; put 'put ''dGhpcy53b3Jkc1tKXT1TLndvcmRzW0pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxKKSxTIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcp''@;'; put 'put ''fTt2YXIgdGU9ZnVuY3Rpb24oZyxDLFMpe3ZhciB2LHAsdyxKPWcud29yZHMsbmU9Qy53b3JkcyxkZT1TLndvcmRzLGZlPTAseGU9MHxKWzBdLExlPTgxOTEmeGUsRmU9eGU+Pj4xMyxPZT0wfEpbMV0samU9ODE5MSZPZSxXZT1PZT4+PjEzLEtlPTB8SlsyXSxZZT04MTkxJktlLEplPUtlPj4+''@;'; put 'put ''MTMsbHQ9MHxKWzNdLFBlPTgxOTEmbHQsYmU9bHQ+Pj4xMyxBZT0wfEpbNF0sVGU9ODE5MSZBZSxxZT1BZT4+PjEzLFhlPTB8Sls1XSxVZT04MTkxJlhlLGh0PVhlPj4+MTMsTWU9MHxKWzZdLERlPTgxOTEmTWUsemU9TWU+Pj4xMyxpdD0wfEpbN10sdXQ9ODE5MSZpdCxNdD1pdD4+PjEzLEh0''@;'; put 'put ''PTB8Sls4XSxQdD04MTkxJkh0LG9uPUh0Pj4+MTMsQ249MHxKWzldLFV0PTgxOTEmQ24sYm49Q24+Pj4xMyxXbj0wfG5lWzBdLGVuPTgxOTEmV24sJG49V24+Pj4xMyxIbj0wfG5lWzFdLGZ0PTgxOTEmSG4sZm49SG4+Pj4xMyxobj0wfG5lWzJdLHd0PTgxOTEmaG4sWHQ9aG4+Pj4xMyxfdD0w''@;'; put 'put ''fG5lWzNdLE50PTgxOTEmX3QsbW49X3Q+Pj4xMyxydD0wfG5lWzRdLEl0PTgxOTEmcnQsSnQ9cnQ+Pj4xMyxEdD0wfG5lWzVdLHB0PTgxOTEmRHQsWXQ9RHQ+Pj4xMyxJbj0wfG5lWzZdLHp0PTgxOTEmSW4seW49SW4+Pj4xMyx4bj0wfG5lWzddLHNuPTgxOTEmeG4sQm49eG4+Pj4xMyxSbj0w''@;'; put 'put ''fG5lWzhdLCR0PTgxOTEmUm4sUG49Um4+Pj4xMyxuaT0wfG5lWzldLGxuPTgxOTEmbmksam49bmk+Pj4xMztTLm5lZ2F0aXZlPWcubmVnYXRpdmVeQy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgcXI9KGZlKyh2PU1hdGguaW11bChMZSxlbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwo''@;'; put 'put ''TGUsJG4pKStNYXRoLmltdWwoRmUsZW4pfDApKTw8MTMpfDA7ZmU9KCh3PU1hdGguaW11bChGZSwkbikpKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChqZSxlbikscD0ocD1NYXRoLmltdWwoamUsJG4pKStNYXRoLmltdWwoV2UsZW4pfDAsdz1NYXRo''@;'; put 'put ''LmltdWwoV2UsJG4pO3ZhciBnaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsZnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKEZlLGZ0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxmbil8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYp''@;'; put 'put ''fDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFllLGVuKSxwPShwPU1hdGguaW11bChZZSwkbikpK01hdGguaW11bChKZSxlbil8MCx3PU1hdGguaW11bChKZSwkbiksdj12K01hdGguaW11bChqZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoV2UsZnQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChXZSxmbil8MDt2YXIgeHI9KGZlKyh2PXYrTWF0aC5pbXVsKExlLHd0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsWHQpfDApK01hdGguaW11bChGZSx3dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWHQpfDApKyhwPj4+MTMpfDAp''@;'; put 'put ''Kyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChQZSxlbikscD0ocD1NYXRoLmltdWwoUGUsJG4pKStNYXRoLmltdWwoYmUsZW4pfDAsdz1NYXRoLmltdWwoYmUsJG4pLHY9ditNYXRoLmltdWwoWWUsZnQpfDAscD0ocD1wK01hdGguaW11bChZZSxmbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLGZ0KXwwLHc9dytNYXRoLmltdWwoSmUsZm4pfDAsdj12K01hdGguaW11bChqZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFh0KXwwKStNYXRoLmltdWwoV2Usd3QpfDAsdz13K01hdGguaW11bChXZSxYdCl8MDt2YXIgVWk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLE50KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbW4pfDApK01hdGguaW11bChGZSxOdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsbW4pfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChUZSxlbikscD0ocD1NYXRoLmltdWwoVGUs''@;'; put 'put ''JG4pKStNYXRoLmltdWwocWUsZW4pfDAsdz1NYXRoLmltdWwocWUsJG4pLHY9ditNYXRoLmltdWwoUGUsZnQpfDAscD0ocD1wK01hdGguaW11bChQZSxmbil8MCkrTWF0aC5pbXVsKGJlLGZ0KXwwLHc9dytNYXRoLmltdWwoYmUsZm4pfDAsdj12K01hdGguaW11bChZZSx3dCl8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKFllLFh0KXwwKStNYXRoLmltdWwoSmUsd3QpfDAsdz13K01hdGguaW11bChKZSxYdCl8MCx2PXYrTWF0aC5pbXVsKGplLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoamUsbW4pfDApK01hdGguaW11bChXZSxOdCl8MCx3PXcrTWF0aC5pbXVsKFdlLG1uKXwwO3ZhciBLcj0oZmUr''@;'; put 'put ''KHY9ditNYXRoLmltdWwoTGUsSXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxKdCl8MCkrTWF0aC5pbXVsKEZlLEl0KXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxKdCl8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5p''@;'; put 'put ''bXVsKFVlLGVuKSxwPShwPU1hdGguaW11bChVZSwkbikpK01hdGguaW11bChodCxlbil8MCx3PU1hdGguaW11bChodCwkbiksdj12K01hdGguaW11bChUZSxmdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGZuKXwwKStNYXRoLmltdWwocWUsZnQpfDAsdz13K01hdGguaW11bChxZSxmbil8MCx2''@;'; put 'put ''PXYrTWF0aC5pbXVsKFBlLHd0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWHQpfDApK01hdGguaW11bChiZSx3dCl8MCx3PXcrTWF0aC5pbXVsKGJlLFh0KXwwLHY9ditNYXRoLmltdWwoWWUsTnQpfDAscD0ocD1wK01hdGguaW11bChZZSxtbil8MCkrTWF0aC5pbXVsKEplLE50KXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoSmUsbW4pfDAsdj12K01hdGguaW11bChqZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLEp0KXwwKStNYXRoLmltdWwoV2UsSXQpfDAsdz13K01hdGguaW11bChXZSxKdCl8MDt2YXIgbm89KGZlKyh2PXYrTWF0aC5pbXVsKExlLHB0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChGZSxwdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsWXQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChEZSxlbikscD0ocD1NYXRoLmltdWwoRGUsJG4pKStNYXRoLmltdWwo''@;'; put 'put ''emUsZW4pfDAsdz1NYXRoLmltdWwoemUsJG4pLHY9ditNYXRoLmltdWwoVWUsZnQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKGh0LGZ0KXwwLHc9dytNYXRoLmltdWwoaHQsZm4pfDAsdj12K01hdGguaW11bChUZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFh0''@;'; put 'put ''KXwwKStNYXRoLmltdWwocWUsd3QpfDAsdz13K01hdGguaW11bChxZSxYdCl8MCx2PXYrTWF0aC5pbXVsKFBlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsbW4pfDApK01hdGguaW11bChiZSxOdCl8MCx3PXcrTWF0aC5pbXVsKGJlLG1uKXwwLHY9ditNYXRoLmltdWwoWWUsSXQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChZZSxKdCl8MCkrTWF0aC5pbXVsKEplLEl0KXwwLHc9dytNYXRoLmltdWwoSmUsSnQpfDAsdj12K01hdGguaW11bChqZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFl0KXwwKStNYXRoLmltdWwoV2UscHQpfDAsdz13K01hdGguaW11bChXZSxZdCl8MDt2YXIgSHI9''@;'; put 'put ''KGZlKyh2PXYrTWF0aC5pbXVsKExlLHp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUseW4pfDApK01hdGguaW11bChGZSx6dCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUseW4pfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1h''@;'; put 'put ''dGguaW11bCh1dCxlbikscD0ocD1NYXRoLmltdWwodXQsJG4pKStNYXRoLmltdWwoTXQsZW4pfDAsdz1NYXRoLmltdWwoTXQsJG4pLHY9ditNYXRoLmltdWwoRGUsZnQpfDAscD0ocD1wK01hdGguaW11bChEZSxmbil8MCkrTWF0aC5pbXVsKHplLGZ0KXwwLHc9dytNYXRoLmltdWwoemUsZm4p''@;'; put 'put ''fDAsdj12K01hdGguaW11bChVZSx3dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFh0KXwwKStNYXRoLmltdWwoaHQsd3QpfDAsdz13K01hdGguaW11bChodCxYdCl8MCx2PXYrTWF0aC5pbXVsKFRlLE50KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsbW4pfDApK01hdGguaW11bChxZSxOdCl8MCx3''@;'; put 'put ''PXcrTWF0aC5pbXVsKHFlLG1uKXwwLHY9ditNYXRoLmltdWwoUGUsSXQpfDAscD0ocD1wK01hdGguaW11bChQZSxKdCl8MCkrTWF0aC5pbXVsKGJlLEl0KXwwLHc9dytNYXRoLmltdWwoYmUsSnQpfDAsdj12K01hdGguaW11bChZZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFllLFl0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoSmUscHQpfDAsdz13K01hdGguaW11bChKZSxZdCl8MCx2PXYrTWF0aC5pbXVsKGplLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoamUseW4pfDApK01hdGguaW11bChXZSx6dCl8MCx3PXcrTWF0aC5pbXVsKFdlLHluKXwwO3ZhciBxaT0oZmUrKHY9ditNYXRoLmltdWwoTGUsc24p''@;'; put 'put ''fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxCbil8MCkrTWF0aC5pbXVsKEZlLHNuKXwwKSk8PDEzKXwwO2ZlPSgodz13K01hdGguaW11bChGZSxCbil8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFB0LGVuKSxwPShwPU1hdGgu''@;'; put 'put ''aW11bChQdCwkbikpK01hdGguaW11bChvbixlbil8MCx3PU1hdGguaW11bChvbiwkbiksdj12K01hdGguaW11bCh1dCxmdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LGZuKXwwKStNYXRoLmltdWwoTXQsZnQpfDAsdz13K01hdGguaW11bChNdCxmbil8MCx2PXYrTWF0aC5pbXVsKERlLHd0KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoRGUsWHQpfDApK01hdGguaW11bCh6ZSx3dCl8MCx3PXcrTWF0aC5pbXVsKHplLFh0KXwwLHY9ditNYXRoLmltdWwoVWUsTnQpfDAscD0ocD1wK01hdGguaW11bChVZSxtbil8MCkrTWF0aC5pbXVsKGh0LE50KXwwLHc9dytNYXRoLmltdWwoaHQsbW4pfDAsdj12''@;'; put 'put ''K01hdGguaW11bChUZSxJdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEp0KXwwKStNYXRoLmltdWwocWUsSXQpfDAsdz13K01hdGguaW11bChxZSxKdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsWXQpfDApK01hdGguaW11bChiZSxwdCl8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKGJlLFl0KXwwLHY9ditNYXRoLmltdWwoWWUsenQpfDAscD0ocD1wK01hdGguaW11bChZZSx5bil8MCkrTWF0aC5pbXVsKEplLHp0KXwwLHc9dytNYXRoLmltdWwoSmUseW4pfDAsdj12K01hdGguaW11bChqZSxzbil8MCxwPShwPXArTWF0aC5pbXVsKGplLEJuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoV2Usc24pfDAsdz13K01hdGguaW11bChXZSxCbil8MDt2YXIgSmk9KGZlKyh2PXYrTWF0aC5pbXVsKExlLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChGZSwkdCl8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsUG4pfDAp''@;'; put 'put ''KyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxlbikscD0ocD1NYXRoLmltdWwoVXQsJG4pKStNYXRoLmltdWwoYm4sZW4pfDAsdz1NYXRoLmltdWwoYm4sJG4pLHY9ditNYXRoLmltdWwoUHQsZnQpfDAscD0ocD1wK01hdGguaW11bChQdCxmbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKG9uLGZ0KXwwLHc9dytNYXRoLmltdWwob24sZm4pfDAsdj12K01hdGguaW11bCh1dCx3dCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFh0KXwwKStNYXRoLmltdWwoTXQsd3QpfDAsdz13K01hdGguaW11bChNdCxYdCl8MCx2PXYrTWF0aC5pbXVsKERlLE50KXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoRGUsbW4pfDApK01hdGguaW11bCh6ZSxOdCl8MCx3PXcrTWF0aC5pbXVsKHplLG1uKXwwLHY9ditNYXRoLmltdWwoVWUsSXQpfDAscD0ocD1wK01hdGguaW11bChVZSxKdCl8MCkrTWF0aC5pbXVsKGh0LEl0KXwwLHc9dytNYXRoLmltdWwoaHQsSnQpfDAsdj12K01hdGgu''@;'; put 'put ''aW11bChUZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFl0KXwwKStNYXRoLmltdWwocWUscHQpfDAsdz13K01hdGguaW11bChxZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFBlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUGUseW4pfDApK01hdGguaW11bChiZSx6dCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KGJlLHluKXwwLHY9ditNYXRoLmltdWwoWWUsc24pfDAscD0ocD1wK01hdGguaW11bChZZSxCbil8MCkrTWF0aC5pbXVsKEplLHNuKXwwLHc9dytNYXRoLmltdWwoSmUsQm4pfDAsdj12K01hdGguaW11bChqZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGplLFBuKXwwKStNYXRoLmltdWwoV2Us''@;'; put 'put ''JHQpfDAsdz13K01hdGguaW11bChXZSxQbil8MDt2YXIgYW89KGZlKyh2PXYrTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsam4pfDApK01hdGguaW11bChGZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoRmUsam4pfDApKyhwPj4+''@;'; put 'put ''MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxmdCkscD0ocD1NYXRoLmltdWwoVXQsZm4pKStNYXRoLmltdWwoYm4sZnQpfDAsdz1NYXRoLmltdWwoYm4sZm4pLHY9ditNYXRoLmltdWwoUHQsd3QpfDAscD0ocD1wK01hdGguaW11bChQdCxYdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKG9uLHd0KXwwLHc9dytNYXRoLmltdWwob24sWHQpfDAsdj12K01hdGguaW11bCh1dCxOdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LG1uKXwwKStNYXRoLmltdWwoTXQsTnQpfDAsdz13K01hdGguaW11bChNdCxtbil8MCx2PXYrTWF0aC5pbXVsKERlLEl0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoRGUsSnQpfDApK01hdGguaW11bCh6ZSxJdCl8MCx3PXcrTWF0aC5pbXVsKHplLEp0KXwwLHY9ditNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKGh0LHB0KXwwLHc9dytNYXRoLmltdWwoaHQsWXQpfDAsdj12K01hdGguaW11bChU''@;'; put 'put ''ZSx6dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLHluKXwwKStNYXRoLmltdWwocWUsenQpfDAsdz13K01hdGguaW11bChxZSx5bil8MCx2PXYrTWF0aC5pbXVsKFBlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoUGUsQm4pfDApK01hdGguaW11bChiZSxzbil8MCx3PXcrTWF0aC5pbXVsKGJlLEJu''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoWWUsJHQpfDAscD0ocD1wK01hdGguaW11bChZZSxQbil8MCkrTWF0aC5pbXVsKEplLCR0KXwwLHc9dytNYXRoLmltdWwoSmUsUG4pfDA7dmFyIHJvPShmZSsodj12K01hdGguaW11bChqZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGplLGpu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoV2UsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKFdlLGpuKXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsd3QpLHA9KHA9TWF0aC5pbXVsKFV0LFh0KSkrTWF0aC5pbXVsKGJuLHd0KXwwLHc9TWF0''@;'; put 'put ''aC5pbXVsKGJuLFh0KSx2PXYrTWF0aC5pbXVsKFB0LE50KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQsbW4pfDApK01hdGguaW11bChvbixOdCl8MCx3PXcrTWF0aC5pbXVsKG9uLG1uKXwwLHY9ditNYXRoLmltdWwodXQsSXQpfDAscD0ocD1wK01hdGguaW11bCh1dCxKdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KE10LEl0KXwwLHc9dytNYXRoLmltdWwoTXQsSnQpfDAsdj12K01hdGguaW11bChEZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFl0KXwwKStNYXRoLmltdWwoemUscHQpfDAsdz13K01hdGguaW11bCh6ZSxZdCl8MCx2PXYrTWF0aC5pbXVsKFVlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''VWUseW4pfDApK01hdGguaW11bChodCx6dCl8MCx3PXcrTWF0aC5pbXVsKGh0LHluKXwwLHY9ditNYXRoLmltdWwoVGUsc24pfDAscD0ocD1wK01hdGguaW11bChUZSxCbil8MCkrTWF0aC5pbXVsKHFlLHNuKXwwLHc9dytNYXRoLmltdWwocWUsQm4pfDAsdj12K01hdGguaW11bChQZSwkdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKFBlLFBuKXwwKStNYXRoLmltdWwoYmUsJHQpfDAsdz13K01hdGguaW11bChiZSxQbil8MDt2YXIgaW89KGZlKyh2PXYrTWF0aC5pbXVsKFllLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWWUsam4pfDApK01hdGguaW11bChKZSxsbil8MCkp''@;'; put 'put ''PDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoSmUsam4pfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxOdCkscD0ocD1NYXRoLmltdWwoVXQsbW4pKStNYXRoLmltdWwoYm4sTnQpfDAsdz1NYXRoLmltdWwoYm4sbW4pLHY9ditNYXRoLmlt''@;'; put 'put ''dWwoUHQsSXQpfDAscD0ocD1wK01hdGguaW11bChQdCxKdCl8MCkrTWF0aC5pbXVsKG9uLEl0KXwwLHc9dytNYXRoLmltdWwob24sSnQpfDAsdj12K01hdGguaW11bCh1dCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFl0KXwwKStNYXRoLmltdWwoTXQscHQpfDAsdz13K01hdGguaW11bChN''@;'; put 'put ''dCxZdCl8MCx2PXYrTWF0aC5pbXVsKERlLHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUseW4pfDApK01hdGguaW11bCh6ZSx6dCl8MCx3PXcrTWF0aC5pbXVsKHplLHluKXwwLHY9ditNYXRoLmltdWwoVWUsc24pfDAscD0ocD1wK01hdGguaW11bChVZSxCbil8MCkrTWF0aC5pbXVsKGh0LHNu''@;'; put 'put ''KXwwLHc9dytNYXRoLmltdWwoaHQsQm4pfDAsdj12K01hdGguaW11bChUZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLFBuKXwwKStNYXRoLmltdWwocWUsJHQpfDAsdz13K01hdGguaW11bChxZSxQbil8MDt2YXIgR2k9KGZlKyh2PXYrTWF0aC5pbXVsKFBlLGxuKXwwKXwwKSsoKDgxOTEm''@;'; put 'put ''KHA9KHA9cCtNYXRoLmltdWwoUGUsam4pfDApK01hdGguaW11bChiZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoYmUsam4pfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxJdCkscD0ocD1NYXRoLmltdWwoVXQsSnQpKStN''@;'; put 'put ''YXRoLmltdWwoYm4sSXQpfDAsdz1NYXRoLmltdWwoYm4sSnQpLHY9ditNYXRoLmltdWwoUHQscHQpfDAscD0ocD1wK01hdGguaW11bChQdCxZdCl8MCkrTWF0aC5pbXVsKG9uLHB0KXwwLHc9dytNYXRoLmltdWwob24sWXQpfDAsdj12K01hdGguaW11bCh1dCx6dCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKHV0LHluKXwwKStNYXRoLmltdWwoTXQsenQpfDAsdz13K01hdGguaW11bChNdCx5bil8MCx2PXYrTWF0aC5pbXVsKERlLHNuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsQm4pfDApK01hdGguaW11bCh6ZSxzbil8MCx3PXcrTWF0aC5pbXVsKHplLEJuKXwwLHY9ditNYXRoLmltdWwoVWUs''@;'; put 'put ''JHQpfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKGh0LCR0KXwwLHc9dytNYXRoLmltdWwoaHQsUG4pfDA7dmFyIGhvPShmZSsodj12K01hdGguaW11bChUZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLGpuKXwwKStNYXRoLmltdWwocWUsbG4p''@;'; put 'put ''fDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0aC5pbXVsKHFlLGpuKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQscHQpLHA9KHA9TWF0aC5pbXVsKFV0LFl0KSkrTWF0aC5pbXVsKGJuLHB0KXwwLHc9TWF0aC5pbXVsKGJuLFl0KSx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFB0LHp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUHQseW4pfDApK01hdGguaW11bChvbix6dCl8MCx3PXcrTWF0aC5pbXVsKG9uLHluKXwwLHY9ditNYXRoLmltdWwodXQsc24pfDAscD0ocD1wK01hdGguaW11bCh1dCxCbil8MCkrTWF0aC5pbXVsKE10LHNuKXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoTXQsQm4pfDAsdj12K01hdGguaW11bChEZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLFBuKXwwKStNYXRoLmltdWwoemUsJHQpfDAsdz13K01hdGguaW11bCh6ZSxQbil8MDt2YXIgeXI9KGZlKyh2PXYrTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoVWUsam4pfDApK01hdGguaW11bChodCxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoaHQsam4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2Myx2PU1hdGguaW11bChVdCx6dCkscD0ocD1NYXRoLmltdWwoVXQseW4pKStNYXRoLmltdWwoYm4senQp''@;'; put 'put ''fDAsdz1NYXRoLmltdWwoYm4seW4pLHY9ditNYXRoLmltdWwoUHQsc24pfDAscD0ocD1wK01hdGguaW11bChQdCxCbil8MCkrTWF0aC5pbXVsKG9uLHNuKXwwLHc9dytNYXRoLmltdWwob24sQm4pfDAsdj12K01hdGguaW11bCh1dCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKHV0LFBuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTXQsJHQpfDAsdz13K01hdGguaW11bChNdCxQbil8MDt2YXIgUGk9KGZlKyh2PXYrTWF0aC5pbXVsKERlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsam4pfDApK01hdGguaW11bCh6ZSxsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwoemUs''@;'; put 'put ''am4pfDApKyhwPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2Myx2PU1hdGguaW11bChVdCxzbikscD0ocD1NYXRoLmltdWwoVXQsQm4pKStNYXRoLmltdWwoYm4sc24pfDAsdz1NYXRoLmltdWwoYm4sQm4pLHY9ditNYXRoLmltdWwoUHQsJHQpfDAscD0ocD1wK01hdGguaW11bChQ''@;'; put 'put ''dCxQbil8MCkrTWF0aC5pbXVsKG9uLCR0KXwwLHc9dytNYXRoLmltdWwob24sUG4pfDA7dmFyIExvPShmZSsodj12K01hdGguaW11bCh1dCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHV0LGpuKXwwKStNYXRoLmltdWwoTXQsbG4pfDApKTw8MTMpfDA7ZmU9KCh3PXcrTWF0''@;'; put 'put ''aC5pbXVsKE10LGpuKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoVXQsJHQpLHA9KHA9TWF0aC5pbXVsKFV0LFBuKSkrTWF0aC5pbXVsKGJuLCR0KXwwLHc9TWF0aC5pbXVsKGJuLFBuKTt2YXIgaHM9KGZlKyh2PXYrTWF0aC5pbXVsKFB0LGxu''@;'; put 'put ''KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUHQsam4pfDApK01hdGguaW11bChvbixsbil8MCkpPDwxMyl8MDtmZT0oKHc9dytNYXRoLmltdWwob24sam4pfDApKyhwPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2Mzt2YXIgcnM9KGZlKyh2PU1hdGguaW11bChVdCxs''@;'; put 'put ''bikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoVXQsam4pKStNYXRoLmltdWwoYm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGZlPSgodz1NYXRoLmltdWwoYm4sam4pKSsocD4+PjEzKXwwKSsocnM+Pj4yNil8MCxycyY9NjcxMDg4NjMsZGVbMF09cXIsZGVbMV09Z2ksZGVbMl09eHIsZGVb''@;'; put 'put ''M109VWksZGVbNF09S3IsZGVbNV09bm8sZGVbNl09SHIsZGVbN109cWksZGVbOF09SmksZGVbOV09YW8sZGVbMTBdPXJvLGRlWzExXT1pbyxkZVsxMl09R2ksZGVbMTNdPWhvLGRlWzE0XT15cixkZVsxNV09UGksZGVbMTZdPUxvLGRlWzE3XT1ocyxkZVsxOF09cnMsMCE9PWZlJiYoZGVbMTld''@;'; put 'put ''PWZlLFMubGVuZ3RoKyspLFN9O2Z1bmN0aW9uIG9lKGcsQyxTKXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsQyxTKX1mdW5jdGlvbiBzZShnLEMpe3RoaXMueD1nLHRoaXMueT1DfU1hdGguaW11bHx8KHRlPWVlKSxFLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLEMpe3ZhciB2PXRoaXMubGVu''@;'; put 'put ''Z3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVuZ3RoP3RlKHRoaXMsZyxDKTp2PDYzP2VlKHRoaXMsZyxDKTp2PDEwMjQ/ZnVuY3Rpb24ocCx3LEope0oubmVnYXRpdmU9dy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEoubGVuZ3RoPXAubGVuZ3RoK3cubGVuZ3Ro''@;'; put 'put ''O2Zvcih2YXIgbmU9MCxkZT0wLGZlPTA7ZmU8Si5sZW5ndGgtMTtmZSsrKXt2YXIgeGU9ZGU7ZGU9MDtmb3IodmFyIExlPTY3MTA4ODYzJm5lLEZlPU1hdGgubWluKGZlLHcubGVuZ3RoLTEpLE9lPU1hdGgubWF4KDAsZmUtcC5sZW5ndGgrMSk7T2U8PUZlO09lKyspe3ZhciBXZT0oMHxwLndv''@;'; put 'put ''cmRzW2ZlLU9lXSkqKDB8dy53b3Jkc1tPZV0pLEtlPTY3MTA4ODYzJldlO0xlPTY3MTA4ODYzJihLZT1LZStMZXwwKSxkZSs9KHhlPSh4ZT14ZSsoV2UvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUoud29yZHNbZmVdPUxlLG5lPXhlLHhlPWRlfXJldHVy''@;'; put 'put ''biAwIT09bmU/Si53b3Jkc1tmZV09bmU6Si5sZW5ndGgtLSxKLnN0cmlwKCl9KHRoaXMsZyxDKTpvZSh0aGlzLGcsQyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJyYXkoZyksUz1FLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsdj0wO3Y8Zzt2''@;'; put 'put ''KyspQ1t2XT10aGlzLnJldkJpbih2LFMsZyk7cmV0dXJuIEN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxDLFMpe2lmKDA9PT1nfHxnPT09Uy0xKXJldHVybiBnO2Zvcih2YXIgdj0wLHA9MDtwPEM7cCsrKXZ8PSgxJmcpPDxDLXAtMSxnPj49MTtyZXR1cm4gdn0sc2UucHJvdG90''@;'; put 'put ''eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxDLFMsdixwLHcpe2Zvcih2YXIgSj0wO0o8dztKKyspdltKXT1DW2dbSl1dLHBbSl09U1tnW0pdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLEMsUyx2LHAsdyl7dGhpcy5wZXJtdXRlKHcsZyxDLFMsdixwKTtmb3IodmFyIEo9MTtK''@;'; put 'put ''PHA7Sjw8PTEpZm9yKHZhciBuZT1KPDwxLGRlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksZmU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgTGU9ZGUsRmU9ZmUsT2U9MDtPZTxKO09lKyspe3ZhciBqZT1TW3hlK09lXSxXZT12W3hlK09lXSxLZT1TW3hl''@;'; put 'put ''K09lK0pdLFllPXZbeGUrT2UrSl0sSmU9TGUqS2UtRmUqWWU7WWU9TGUqWWUrRmUqS2UsU1t4ZStPZV09amUrKEtlPUplKSx2W3hlK09lXT1XZStZZSxTW3hlK09lK0pdPWplLUtlLHZbeGUrT2UrSl09V2UtWWUsT2UhPT1uZSYmKEplPWRlKkxlLWZlKkZlLEZlPWRlKkZlK2ZlKkxlLExlPUpl''@;'; put 'put ''KX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihnLEMpe3ZhciBTPTF8TWF0aC5tYXgoQyxnKSx2PTEmUyxwPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpcCsrO3JldHVybiAxPDxwKzErdn0sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLEMsUyl7aWYoIShTPD0x''@;'; put 'put ''KSlmb3IodmFyIHY9MDt2PFMvMjt2Kyspe3ZhciBwPWdbdl07Z1t2XT1nW1Mtdi0xXSxnW1Mtdi0xXT1wLHA9Q1t2XSxDW3ZdPS1DW1Mtdi0xXSxDW1Mtdi0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9MCx2PTA7djxDLzI7disrKXt2''@;'; put 'put ''YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKnYrMV0vQykrTWF0aC5yb3VuZChnWzIqdl0vQykrUztnW3ZdPTY3MTA4ODYzJnAsUz1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLEMsUyx2KXtmb3IodmFyIHA9MCx3''@;'; put 'put ''PTA7dzxDO3crKylTWzIqd109ODE5MSYocCs9MHxnW3ddKSxTWzIqdysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2Zvcih3PTIqQzt3PHY7Kyt3KVNbd109MDtJKDA9PT1wKSxJKDA9PSgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz1uZXcgQXJy''@;'; put 'put ''YXkoZyksUz0wO1M8ZztTKyspQ1tTXT0wO3JldHVybiBDfSxzZS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihnLEMsUyl7dmFyIHY9Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLEMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVCh2KSx3PXRoaXMuc3R1Yih2KSxKPW5ldyBBcnJheSh2KSxuZT1u''@;'; put 'put ''ZXcgQXJyYXkodiksZGU9bmV3IEFycmF5KHYpLGZlPW5ldyBBcnJheSh2KSx4ZT1uZXcgQXJyYXkodiksTGU9bmV3IEFycmF5KHYpLEZlPVMud29yZHM7RmUubGVuZ3RoPXYsdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSix2KSx0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxl''@;'; put 'put ''bmd0aCxmZSx2KSx0aGlzLnRyYW5zZm9ybShKLHcsbmUsZGUsdixwKSx0aGlzLnRyYW5zZm9ybShmZSx3LHhlLExlLHYscCk7Zm9yKHZhciBPZT0wO09lPHY7T2UrKyl7dmFyIGplPW5lW09lXSp4ZVtPZV0tZGVbT2VdKkxlW09lXTtkZVtPZV09bmVbT2VdKkxlW09lXStkZVtPZV0qeGVbT2Vd''@;'; put 'put ''LG5lW09lXT1qZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsZGUsdiksdGhpcy50cmFuc2Zvcm0obmUsZGUsRmUsdyx2LHApLHRoaXMuY29uanVnYXRlKEZlLHcsdiksdGhpcy5ub3JtYWxpemUxM2IoRmUsdiksUy5uZWdhdGl2ZT1nLm5lZ2F0aXZlXkMubmVnYXRpdmUsUy5sZW5ndGg9Zy5s''@;'; put 'put ''ZW5ndGgrQy5sZW5ndGgsUy5zdHJpcCgpfSxFLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyl7dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsQyl9LEUucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7''@;'; put 'put ''dmFyIEM9bmV3IEUobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSxvZSh0aGlzLGcsQyl9LEUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxFLnByb3RvdHlwZS5pbXVsbj1mdW5j''@;'; put 'put ''dGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFyIEM9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKmcscD0oNjcxMDg4NjMmdikrKDY3MTA4ODYzJkMpO0M+Pj0yNixDKz12LzY3MTA4ODY0fDAsQys9cD4+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbU109NjcxMDg4NjMmcH1yZXR1cm4gMCE9PUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxFLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tdWwodGhpcyl9LEUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LEUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgQz1mdW5jdGlvbih3KXtmb3IodmFyIEo9bmV3IEFycmF5KHcuYml0TGVuZ3RoKCkpLG5l''@;'; put 'put ''PTA7bmU8Si5sZW5ndGg7bmUrKyl7dmFyIGZlPW5lJTI2O0pbbmVdPSh3LndvcmRzW25lLzI2fDBdJjE8PGZlKT4+PmZlfXJldHVybiBKfShnKTtpZigwPT09Qy5sZW5ndGgpcmV0dXJuIG5ldyBFKDEpO2Zvcih2YXIgUz10aGlzLHY9MDt2PEMubGVuZ3RoJiYwPT09Q1t2XTt2KyssUz1TLnNx''@;'; put 'put ''cigpKTtpZigrK3Y8Qy5sZW5ndGgpZm9yKHZhciBwPVMuc3FyKCk7djxDLmxlbmd0aDt2KysscD1wLnNxcigpKTAhPT1DW3ZdJiYoUz1TLm11bChwKSk7cmV0dXJuIFN9LEUucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEMsUz1n''@;'; put 'put ''JTI2LHY9KGctUykvMjYscD02NzEwODg2Mz4+PjI2LVM8PDI2LVM7aWYoMCE9PVMpe3ZhciB3PTA7Zm9yKEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEo9dGhpcy53b3Jkc1tDXSZwO3RoaXMud29yZHNbQ109KDB8dGhpcy53b3Jkc1tDXSktSjw8U3x3LHc9Sj4+PjI2LVN9dyYmKHRoaXMu''@;'; put 'put ''d29yZHNbQ109dyx0aGlzLmxlbmd0aCsrKX1pZigwIT09dil7Zm9yKEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl0aGlzLndvcmRzW0Mrdl09dGhpcy53b3Jkc1tDXTtmb3IoQz0wO0M8djtDKyspdGhpcy53b3Jkc1tDXT0wO3RoaXMubGVuZ3RoKz12fXJldHVybiB0aGlzLnN0cmlwKCl9LEUu''@;'; put 'put ''cHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihnKX0sRS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsQyxTKXt2YXIgdjtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksdj1DPyhDLUMlMjYpLzI2OjA7dmFyIHA9''@;'; put 'put ''ZyUyNix3PU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxKPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCxuZT1TO2lmKHYtPXcsdj1NYXRoLm1heCgwLHYpLG5lKXtmb3IodmFyIGRlPTA7ZGU8dztkZSsrKW5lLndvcmRzW2RlXT10aGlzLndvcmRzW2RlXTtuZS5sZW5ndGg9d31pZigw''@;'; put 'put ''IT09dylpZih0aGlzLmxlbmd0aD53KWZvcih0aGlzLmxlbmd0aC09dyxkZT0wO2RlPHRoaXMubGVuZ3RoO2RlKyspdGhpcy53b3Jkc1tkZV09dGhpcy53b3Jkc1tkZSt3XTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBmZT0wO2ZvcihkZT10aGlzLmxlbmd0aC0xO2Rl''@;'; put 'put ''Pj0wJiYoMCE9PWZlfHxkZT49dik7ZGUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1tkZV07dGhpcy53b3Jkc1tkZV09ZmU8PDI2LXB8eGU+Pj5wLGZlPXhlJkp9cmV0dXJuIG5lJiYwIT09ZmUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109ZmUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGcsQyxTKXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxDLFMpfSxFLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXNobG4oZyl9LEUucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGcpfSxFLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LEUucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxFLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PVN8fCEodGhpcy53b3Jkc1tTXSYxPDxDKSl9LEUucHJvdG90eXBl''@;'; put 'put ''LmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIEM9ZyUyNixTPShnLUMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9Uz90aGlzOigwIT09''@;'; put 'put ''QyYmUysrLHRoaXMubGVuZ3RoPU1hdGgubWluKFMsdGhpcy5sZW5ndGgpLDAhPT1DJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5DPDxDKSx0aGlzLnN0cmlwKCkpfSxFLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmltYXNrbihnKX0sRS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRo''@;'; put 'put ''aXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0sRS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNb''@;'; put 'put ''MF0rPWc7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tDXT49NjcxMDg4NjQ7QysrKXRoaXMud29yZHNbQ10tPTY3MTA4ODY0LEM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbQysxXT0xOnRoaXMud29yZHNbQysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLmxlbmd0aCxDKzEpLHRoaXN9LEUucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLndvcmRzW0NdPDA7QysrKXRoaXMud29yZHNbQ10rPTY3MTA4ODY0LHRoaXMud29yZHNbQysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LEUucHJvdG90eXBlLnN1Ym49ZnVuY3Rp''@;'; put 'put ''b24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0sRS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sRS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LEUucHJvdG90eXBlLl9pc2hs''@;'; put 'put ''bnN1Ym11bD1mdW5jdGlvbihnLEMsUyl7dmFyIHYscDt0aGlzLl9leHBhbmQoZy5sZW5ndGgrUyk7dmFyIEo9MDtmb3Iodj0wO3Y8Zy5sZW5ndGg7disrKXtwPSgwfHRoaXMud29yZHNbditTXSkrSjt2YXIgbmU9KDB8Zy53b3Jkc1t2XSkqQztKPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5l''@;'; put 'put ''LzY3MTA4ODY0fDApLHRoaXMud29yZHNbditTXT02NzEwODg2MyZwfWZvcig7djx0aGlzLmxlbmd0aC1TO3YrKylKPShwPSgwfHRoaXMud29yZHNbditTXSkrSik+PjI2LHRoaXMud29yZHNbditTXT02NzEwODg2MyZwO2lmKDA9PT1KKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9PT1K''@;'; put 'put ''KSxKPTAsdj0wO3Y8dGhpcy5sZW5ndGg7disrKUo9KHA9LSgwfHRoaXMud29yZHNbdl0pK0opPj4yNix0aGlzLndvcmRzW3ZdPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LEUucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsQyl7dmFyIFMsdj10''@;'; put 'put ''aGlzLmNsb25lKCkscD1nLHc9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPShTPTI2LXRoaXMuX2NvdW50Qml0cyh3KSkmJihwPXAudXNobG4oUyksdi5pdXNobG4oUyksdz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBKLG5lPXYubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Qyl7KEo9''@;'; put 'put ''bmV3IEUobnVsbCkpLmxlbmd0aD1uZSsxLEoud29yZHM9bmV3IEFycmF5KEoubGVuZ3RoKTtmb3IodmFyIGRlPTA7ZGU8Si5sZW5ndGg7ZGUrKylKLndvcmRzW2RlXT0wfXZhciBmZT12LmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWZlLm5lZ2F0aXZlJiYodj1mZSxKJiYoSi53''@;'; put 'put ''b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8di53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfHYud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1pbihMZS93fDAsNjcxMDg4NjMpLHYuX2lzaGxuc3VibXVsKHAsTGUseGUp''@;'; put 'put ''OzAhPT12Lm5lZ2F0aXZlOylMZS0tLHYubmVnYXRpdmU9MCx2Ll9pc2hsbnN1Ym11bChwLDEseGUpLHYuaXNaZXJvKCl8fCh2Lm5lZ2F0aXZlXj0xKTtKJiYoSi53b3Jkc1t4ZV09TGUpfXJldHVybiBKJiZKLnN0cmlwKCksdi5zdHJpcCgpLCJkaXYiIT09QyYmMCE9PVMmJnYuaXVzaHJuKFMp''@;'; put 'put ''LHtkaXY6Snx8bnVsbCxtb2Q6dn19LEUucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihnLEMsUyl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgRSgwKSxtb2Q6bmV3IEUoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8odz10aGlzLm5l''@;'; put 'put ''ZygpLmRpdm1vZChnLEMpLCJtb2QiIT09QyYmKHY9dy5kaXYubmVnKCkpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2Rpdjp2LG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyh3PXRoaXMuZGl2bW9kKGcu''@;'; put 'put ''bmVnKCksQyksIm1vZCIhPT1DJiYodj13LmRpdi5uZWcoKSkse2Rpdjp2LG1vZDp3Lm1vZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8odz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLEMpLCJkaXYiIT09QyYmKHA9dy5tb2QubmVnKCksUyYmMCE9PXAubmVnYXRpdmUmJnAuaXN1Yihn''@;'; put 'put ''KSkse2Rpdjp3LmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChnKTwwP3tkaXY6bmV3IEUoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PUM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Qz97ZGl2Om51bGwsbW9k''@;'; put 'put ''Om5ldyBFKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpuZXcgRSh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsQyk7dmFyIHYscCx3fSxFLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2''@;'; put 'put ''bW9kKGcsImRpdiIsITEpLmRpdn0sRS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LEUucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0sRS5wcm90b3R5cGUuZGl2''@;'; put 'put ''Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIEM9dGhpcy5kaXZtb2QoZyk7aWYoQy5tb2QuaXNaZXJvKCkpcmV0dXJuIEMuZGl2O3ZhciBTPTAhPT1DLmRpdi5uZWdhdGl2ZT9DLm1vZC5pc3ViKGcpOkMubW9kLHY9Zy51c2hybigxKSxwPWcuYW5kbG4oMSksdz1TLmNtcCh2KTtyZXR1cm4gdzwwfHwx''@;'; put 'put ''PT09cCYmMD09PXc/Qy5kaXY6MCE9PUMuZGl2Lm5lZ2F0aXZlP0MuZGl2LmlzdWJuKDEpOkMuZGl2LmlhZGRuKDEpfSxFLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgQz02NzEwODg2NCVnLFM9MCx2PXRoaXMubGVuZ3RoLTE7dj49MDt2LS0pUz0o''@;'; put 'put ''QypTKygwfHRoaXMud29yZHNbdl0pKSVnO3JldHVybiBTfSxFLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tT''@;'; put 'put ''XT12L2d8MCxDPXYlZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxFLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LEUucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhp''@;'; put 'put ''cyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2PW5ldyBFKDEpLHA9bmV3IEUoMCksdz1uZXcgRSgwKSxKPW5ldyBFKDEpLG5lPTA7Qy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTspQy5pdXNocm4oMSksUy5pdXNocm4oMSksKytuZTtmb3Io''@;'; put 'put ''dmFyIGRlPVMuY2xvbmUoKSxmZT1DLmNsb25lKCk7IUMuaXNaZXJvKCk7KXtmb3IodmFyIHhlPTAsTGU9MTshKEMud29yZHNbMF0mTGUpJiZ4ZTwyNjsrK3hlLExlPDw9MSk7aWYoeGU+MClmb3IoQy5pdXNocm4oeGUpO3hlLS0gPjA7KSh2LmlzT2RkKCl8fHAuaXNPZGQoKSkmJih2LmlhZGQo''@;'; put 'put ''ZGUpLHAuaXN1YihmZSkpLHYuaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgRmU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJkZlPDI2OysrRmUsT2U8PD0xKTtpZihGZT4wKWZvcihTLml1c2hybihGZSk7RmUtLSA+MDspKHcuaXNPZGQoKXx8Si5pc09kZCgpKSYmKHcuaWFkZChkZSks''@;'; put 'put ''Si5pc3ViKGZlKSksdy5pdXNocm4oMSksSi5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSx2LmlzdWIodykscC5pc3ViKEopKTooUy5pc3ViKEMpLHcuaXN1Yih2KSxKLmlzdWIocCkpfXJldHVybnthOncsYjpKLGdjZDpTLml1c2hsbihuZSl9fSxFLnByb3RvdHlwZS5faW52bXA9''@;'; put 'put ''ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIEM9dGhpcyxTPWcuY2xvbmUoKTtDPTAhPT1DLm5lZ2F0aXZlP0MudW1vZChnKTpDLmNsb25lKCk7Zm9yKHZhciB2LHA9bmV3IEUoMSksdz1uZXcgRSgwKSxKPVMuY2xvbmUoKTtDLmNtcG4oMSk+MCYmUy5j''@;'; put 'put ''bXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsZGU9MTshKEMud29yZHNbMF0mZGUpJiZuZTwyNjsrK25lLGRlPDw9MSk7aWYobmU+MClmb3IoQy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEopLHAuaXVzaHJuKDEpO2Zvcih2YXIgZmU9MCx4ZT0xOyEoUy53b3Jkc1swXSZ4''@;'; put 'put ''ZSkmJmZlPDI2OysrZmUseGU8PD0xKTtpZihmZT4wKWZvcihTLml1c2hybihmZSk7ZmUtLSA+MDspdy5pc09kZCgpJiZ3LmlhZGQoSiksdy5pdXNocm4oMSk7Qy5jbXAoUyk+PTA/KEMuaXN1YihTKSxwLmlzdWIodykpOihTLmlzdWIoQyksdy5pc3ViKHApKX1yZXR1cm4odj0wPT09Qy5jbXBu''@;'; put 'put ''KDEpP3A6dykuY21wbigwKTwwJiZ2LmlhZGQoZyksdn0sRS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgQz10aGlzLmNsb25lKCksUz1nLmNsb25lKCk7Qy5uZWdhdGl2''@;'; put 'put ''ZT0wLFMubmVnYXRpdmU9MDtmb3IodmFyIHY9MDtDLmlzRXZlbigpJiZTLmlzRXZlbigpO3YrKylDLml1c2hybigxKSxTLml1c2hybigxKTtmb3IoOzspe2Zvcig7Qy5pc0V2ZW4oKTspQy5pdXNocm4oMSk7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTt2YXIgcD1DLmNtcChTKTtpZihw''@;'; put 'put ''PDApe3ZhciB3PUM7Qz1TLFM9d31lbHNlIGlmKDA9PT1wfHwwPT09Uy5jbXBuKDEpKWJyZWFrO0MuaXN1YihTKX1yZXR1cm4gUy5pdXNobG4odil9LEUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LEUucHJvdG90eXBlLmlzRXZlbj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sRS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LEUucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LEUucHJvdG90eXBlLmJp''@;'; put 'put ''bmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgQz1nJTI2LFM9KGctQykvMjYsdj0xPDxDO2lmKHRoaXMubGVuZ3RoPD1TKXJldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdfD12LHRoaXM7Zm9yKHZhciBwPXYsdz1TOzAhPT1wJiZ3PHRoaXMubGVu''@;'; put 'put ''Z3RoO3crKyl7dmFyIEo9MHx0aGlzLndvcmRzW3ddO3A9KEorPXApPj4+MjYsdGhpcy53b3Jkc1t3XT1KJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW3ddPXAsdGhpcy5sZW5ndGgrKyksdGhpc30sRS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LEUucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIEMsUz1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFTKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZTKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0''@;'; put 'put ''aD4xKUM9MTtlbHNle1MmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB2PTB8dGhpcy53b3Jkc1swXTtDPXY9PT1nPzA6djxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUM6Q30sRS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LEUucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24o''@;'; put 'put ''Zyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBDPTAsUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgdj0wfHRoaXMud29yZHNbU10scD0wfGcud29yZHNbU107aWYodiE9PXApe3Y8cD9DPS0xOnY+''@;'; put 'put ''cCYmKEM9MSk7YnJlYWt9fXJldHVybiBDfSxFLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LEUucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LEUucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY21wbihnKT49MH0sRS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0sRS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxFLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMu''@;'; put 'put ''Y21wKGcpfSxFLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LEUucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LEUucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0s''@;'; put 'put ''RS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0sRS5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxFLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9u''@;'; put 'put ''IGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LEUucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxFLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSgh''@;'; put 'put ''dGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0sRS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu''@;'; put 'put ''YWRkKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEko''@;'; put 'put ''dGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0sRS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5pc3ViKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEko''@;'; put 'put ''dGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxFLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LEUucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl''@;'; put 'put ''cmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxFLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0s''@;'; put 'put ''RS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LEUucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxFLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sRS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp''@;'; put 'put ''cyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBoZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHVlKGcsQyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBFKEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBFKDEp''@;'; put 'put ''Lml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe3VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rp''@;'; put 'put ''b24gRygpe3VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gYigpe3VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gRCgpe3VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBD''@;'; put 'put ''PUUuX3ByaW1lKGcpO3RoaXMubT1DLnAsdGhpcy5wcmltZT1DfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIE4oZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVu''@;'; put 'put ''Z3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgRSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10''@;'; put 'put ''aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX11ZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBFKG51bGwpO3JldHVybiBnLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sdWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIEMsUz1nO2Rve3RoaXMuc3BsaXQoUyx0aGlzLnRtcCksQz0oUz0oUz10aGlzLmltdWxLKFMpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUo''@;'; put 'put ''Qz50aGlzLm4pO3ZhciB2PUM8dGhpcy5uPy0xOlMudWNtcCh0aGlzLnApO3JldHVybiAwPT09dj8oUy53b3Jkc1swXT0wLFMubGVuZ3RoPTEpOnY+MD9TLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1TLnN0cmlwP1Muc3RyaXAoKTpTLl9zdHJpcCgpLFN9LHVlLnByb3RvdHlwZS5zcGxpdD1mdW5j''@;'; put 'put ''dGlvbihnLEMpe2cuaXVzaHJuKHRoaXMubiwwLEMpfSx1ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxrKGNlLHVlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxDKXtmb3IodmFyIFM9NDE5NDMwMyx2PU1hdGgubWluKGcubGVuZ3Ro''@;'; put 'put ''LDkpLHA9MDtwPHY7cCsrKUMud29yZHNbcF09Zy53b3Jkc1twXTtpZihDLmxlbmd0aD12LGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgdz1nLndvcmRzWzldO2ZvcihDLndvcmRzW0MubGVuZ3RoKytdPXcmUyxwPTEwO3A8Zy5sZW5ndGg7cCsr''@;'; put 'put ''KXt2YXIgSj0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSiZTKTw8NHx3Pj4+MjIsdz1KfWcud29yZHNbcC0xMF09dz4+Pj0yMixnLmxlbmd0aC09MD09PXcmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcu''@;'; put 'put ''d29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB2PTB8Zy53b3Jkc1tTXTtnLndvcmRzW1NdPTY3MTA4ODYzJihDKz05NzcqdiksQz02NCp2KyhDLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0x''@;'; put 'put ''XSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LGsoRyx1ZSksayhiLHVlKSxrKEQsdWUpLEQucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKyl7dmFyIHY9MTkqKDB8Zy53b3Jkc1tTXSkr''@;'; put 'put ''QyxwPTY3MTA4ODYzJnY7dj4+Pj0yNixnLndvcmRzW1NdPXAsQz12fXJldHVybiAwIT09QyYmKGcud29yZHNbZy5sZW5ndGgrK109QyksZ30sRS5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoaGVbZ10pcmV0dXJuIGhlW2ddO3ZhciBDO2lmKCJrMjU2Ij09PWcpQz1uZXcgY2U7ZWxzZSBpZigicDIy''@;'; put 'put ''NCI9PT1nKUM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKUM9bmV3IGI7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Qz1uZXcgRH1yZXR1cm4gaGVbZ109QyxDfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1n''@;'; put 'put ''Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxDKXtJKDA9PShnLm5lZ2F0aXZlfEMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Qy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcu''@;'; put 'put ''dW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsQyl7dGhpcy5fdmVyaWZ5MihnLEMp''@;'; put 'put ''O3ZhciBTPWcuYWRkKEMpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLmlhZGQoQyk7cmV0dXJuIFMuY21wKHRoaXMubSk+PTAm''@;'; put 'put ''JlMuaXN1Yih0aGlzLm0pLFN9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLEMpe3RoaXMuX3ZlcmlmeTIoZyxDKTt2YXIgUz1nLnN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFMuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcs''@;'; put 'put ''Qyl7dGhpcy5fdmVyaWZ5MihnLEMpO3ZhciBTPWcuaXN1YihDKTtyZXR1cm4gUy5jbXBuKDApPDAmJlMuaWFkZCh0aGlzLm0pLFN9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKEMpKX0sSC5wcm90b3R5cGUu''@;'; put 'put ''aW11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcuaW11bChDKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsQyksdGhpcy5pbW9kKGcubXVsKEMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgQz10aGlzLm0uYW5k''@;'; put 'put ''bG4oMyk7aWYoSShDJTI9PTEpLDM9PT1DKXt2YXIgUz10aGlzLm0uYWRkKG5ldyBFKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcsUyl9Zm9yKHZhciB2PXRoaXMubS5zdWJuKDEpLHA9MDshdi5pc1plcm8oKSYmMD09PXYuYW5kbG4oMSk7KXArKyx2Lml1c2hybigxKTtJKCF2Lmlz''@;'; put 'put ''WmVybygpKTt2YXIgdz1uZXcgRSgxKS50b1JlZCh0aGlzKSxKPXcucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoZGU9bmV3IEUoMipkZSpkZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGRlLG5lKS5jbXAoSik7KWRlLnJl''@;'; put 'put ''ZElBZGQoSik7Zm9yKHZhciBmZT10aGlzLnBvdyhkZSx2KSx4ZT10aGlzLnBvdyhnLHYuYWRkbigxKS5pdXNocm4oMSkpLExlPXRoaXMucG93KGcsdiksRmU9cDswIT09TGUuY21wKHcpOyl7Zm9yKHZhciBPZT1MZSxqZT0wOzAhPT1PZS5jbXAodyk7amUrKylPZT1PZS5yZWRTcXIoKTtJKGpl''@;'; put 'put ''PEZlKTt2YXIgV2U9dGhpcy5wb3coZmUsbmV3IEUoMSkuaXVzaGxuKEZlLWplLTEpKTt4ZT14ZS5yZWRNdWwoV2UpLGZlPVdlLnJlZFNxcigpLExlPUxlLnJlZE11bChmZSksRmU9amV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBDPWcuX2ludm1wKHRoaXMu''@;'; put 'put ''bSk7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEMpLnJlZE5lZygpKTp0aGlzLmltb2QoQyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1DLmNtcG4oMSkp''@;'; put 'put ''cmV0dXJuIGcuY2xvbmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IEUoMSkudG9SZWQodGhpcyksU1sxXT1nO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLGcpO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1DLmJpdExlbmd0aCgpJTI2O2Zvcigw''@;'; put 'put ''PT09bmUmJihuZT0yNiksdj1DLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPUMud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYm''@;'; put 'put ''MD09PWZlKSYmKHA9dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIEM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIEM9PT1nP0MuY2xvbmUoKTpDfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1m''@;'; put 'put ''dW5jdGlvbihnKXt2YXIgQz1nLmNsb25lKCk7cmV0dXJuIEMucmVkPW51bGwsQ30sRS5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgTihnKX0sayhOLEgpLE4ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxO''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgQz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEMucmVkPW51bGwsQ30sTi5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09''@;'; put 'put ''MCxnLmxlbmd0aD0xLGc7dmFyIFM9Zy5pbXVsKEMpLHY9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD1TLmlzdWIodikuaXVzaHJuKHRoaXMuc2hpZnQpLHc9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD93PXAuaXN1''@;'; put 'put ''Yih0aGlzLm0pOnAuY21wbigwKTwwJiYodz1wLmlhZGQodGhpcy5tKSksdy5fZm9yY2VSZWQodGhpcyl9LE4ucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLEMpe2lmKGcuaXNaZXJvKCl8fEMuaXNaZXJvKCkpcmV0dXJuIG5ldyBFKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgUz1nLm11bChDKSx2''@;'; put 'put ''PVMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9Uy5pc3ViKHYpLml1c2hybih0aGlzLnNoaWZ0KSx3PXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/dz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKHc9cC5pYWRk''@;'; put 'put ''KHRoaXMubSkpLHcuX2ZvcmNlUmVkKHRoaXMpfSxOLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KE09Ui5ubWQoTSksdGhpcyl9LDYxMzg6KE0sTyxSKT0+e3ZhciB6PVIo''@;'; put 'put ''OTgwKSxLPVIoOTE5OSksST1SKDc4NTkpLGs9UigyMTQ0KSxFPVIoMzY2Myksaj1SKDM0ODIpLFY9Uig0ODE4KSxCPVIoOTUwOSkuQnVmZmVyO00uZXhwb3J0cz1mdW5jdGlvbihZLFgsVSl7dmFyIHE7cT1ZLnBhZGRpbmc/WS5wYWRkaW5nOlU/MTo0O3ZhciBlZSx0ZT16KFkpLG9lPXRlLm1v''@;'; put 'put ''ZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFgubGVuZ3RoPm9lfHxuZXcgayhYKS5jbXAodGUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7ZWU9VT9WKG5ldyBrKFgpLHRlKTpFKFgsdGUpO3ZhciBzZT1CLmFsbG9jKG9lLWVlLmxlbmd0aCk7aWYoZWU9Qi5j''@;'; put 'put ''b25jYXQoW3NlLGVlXSxvZSksND09PXEpcmV0dXJuIGZ1bmN0aW9uKGhlLHVlKXt2YXIgY2U9aGUubW9kdWx1cy5ieXRlTGVuZ3RoKCksRz1qKCJzaGExIikudXBkYXRlKEIuYWxsb2MoMCkpLmRpZ2VzdCgpLGI9Ry5sZW5ndGg7aWYoMCE9PXVlWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlw''@;'; put 'put ''dGlvbiBlcnJvciIpO3ZhciBEPXVlLnNsaWNlKDEsYisxKSxIPXVlLnNsaWNlKGIrMSksTj1JKEQsSyhILGIpKSxnPUkoSCxLKE4sY2UtYi0xKSk7aWYoZnVuY3Rpb24oUyx2KXtTPUIuZnJvbShTKSx2PUIuZnJvbSh2KTt2YXIgcD0wLHc9Uy5sZW5ndGg7Uy5sZW5ndGghPT12Lmxlbmd0aCYm''@;'; put 'put ''KHArKyx3PU1hdGgubWluKFMubGVuZ3RoLHYubGVuZ3RoKSk7Zm9yKHZhciBKPS0xOysrSjx3OylwKz1TW0pdXnZbSl07cmV0dXJuIHB9KEcsZy5zbGljZSgwLGIpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIEM9YjswPT09Z1tDXTspQysrO2lmKDEhPT1n''@;'; put 'put ''W0MrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGcuc2xpY2UoQyl9KHRlLGVlKTtpZigxPT09cSlyZXR1cm4gZnVuY3Rpb24oaGUsdWUsY2Upe2Zvcih2YXIgRz11ZS5zbGljZSgwLDIpLGI9MixEPTA7MCE9PXVlW2IrK107KWlmKGI+PXVlLmxlbmd0aCl7''@;'; put 'put ''RCsrO2JyZWFrfXZhciBIPXVlLnNsaWNlKDIsYi0xKTtpZigoIjAwMDIiIT09Ry50b1N0cmluZygiaGV4IikmJiFjZXx8IjAwMDEiIT09Ry50b1N0cmluZygiaGV4IikmJmNlKSYmRCsrLEgubGVuZ3RoPDgmJkQrKyxEKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVy''@;'; put 'put ''biB1ZS5zbGljZShiKX0oMCxlZSxVKTtpZigzPT09cSlyZXR1cm4gZWU7dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKX19LDY1NTk6KE0sTyxSKT0+e3ZhciB6PVIoOTgwKSxLPVIoMTc5OCksST1SKDM0ODIpLGs9Uig5MTk5KSxFPVIoNzg1OSksaj1SKDIxNDQpLFY9Uig0ODE4''@;'; put 'put ''KSxCPVIoMzY2MyksWT1SKDk1MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oWCxVLHEpe3ZhciBlZTtlZT1YLnBhZGRpbmc/WC5wYWRkaW5nOnE/MTo0O3ZhciB0ZSxvZT16KFgpO2lmKDQ9PT1lZSl0ZT1mdW5jdGlvbihzZSxoZSl7dmFyIHVlPXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgp''@;'; put 'put ''LGNlPWhlLmxlbmd0aCxHPUkoInNoYTEiKS51cGRhdGUoWS5hbGxvYygwKSkuZGlnZXN0KCksYj1HLmxlbmd0aCxEPTIqYjtpZihjZT51ZS1ELTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIEg9WS5hbGxvYyh1ZS1jZS1ELTIpLE49dWUtYi0xLGc9SyhiKSxDPUUo''@;'; put 'put ''WS5jb25jYXQoW0csSCxZLmFsbG9jKDEsMSksaGVdLE4pLGsoZyxOKSksUz1FKGcsayhDLGIpKTtyZXR1cm4gbmV3IGooWS5jb25jYXQoW1kuYWxsb2MoMSksUyxDXSx1ZSkpfShvZSxVKTtlbHNlIGlmKDE9PT1lZSl0ZT1mdW5jdGlvbihzZSxoZSx1ZSl7dmFyIGNlLEc9aGUubGVuZ3RoLGI9''@;'; put 'put ''c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoRz5iLTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBjZT11ZT9ZLmFsbG9jKGItRy0zLDI1NSk6ZnVuY3Rpb24oRCl7Zm9yKHZhciBILE49WS5hbGxvY1Vuc2FmZShEKSxnPTAsQz1LKDIqRCksUz0wO2c8RDsp''@;'; put 'put ''Uz09PUMubGVuZ3RoJiYoQz1LKDIqRCksUz0wKSwoSD1DW1MrK10pJiYoTltnKytdPUgpO3JldHVybiBOfShiLUctMyksbmV3IGooWS5jb25jYXQoW1kuZnJvbShbMCx1ZT8xOjJdKSxjZSxZLmFsbG9jKDEpLGhlXSxiKSl9KG9lLFUscSk7ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJ1bmtub3duIHBhZGRpbmciKTtpZigodGU9bmV3IGooVSkpLmNtcChvZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9CKHRlLG9lKTpWKHRlLG9lKX19LDQ4MTg6KE0sTyxSKT0+e3ZhciB6PVIoMjE0NCksSz1SKDk1''@;'; put 'put ''MDkpLkJ1ZmZlcjtNLmV4cG9ydHM9ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSy5mcm9tKEkudG9SZWQoei5tb250KGsubW9kdWx1cykpLnJlZFBvdyhuZXcgeihrLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtm''@;'; put 'put ''b3IodmFyIHo9Ty5sZW5ndGgsSz0tMTsrK0s8ejspT1tLXV49UltLXTtyZXR1cm4gT319LDM2ODk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtSLnIoTyksUi5kKE8se2RlY29kZTooKT0+b2UsZGVmYXVsdDooKT0+Y2UsZW5jb2RlOigpPT5zZSx0b0FTQ0lJOigpPT51ZSx0b1VuaWNvZGU6KCk9''@;'; put 'put ''PmhlLHVjczJkZWNvZGU6KCk9PlUsdWNzMmVuY29kZTooKT0+cX0pO2NvbnN0IHo9MjE0NzQ4MzY0NyxLPTM2LEk9L154bi0tLyxrPS9bXlwwLVx4N0ZdLyxFPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0vZyxqPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVn''@;'; put 'put ''ZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxWPU1hdGguZmxvb3IsQj1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFkoRyl7dGhyb3cg''@;'; put 'put ''bmV3IFJhbmdlRXJyb3IoaltHXSl9ZnVuY3Rpb24gWChHLGIpe2NvbnN0IEQ9Ry5zcGxpdCgiQCIpO2xldCBIPSIiO3JldHVybiBELmxlbmd0aD4xJiYoSD1EWzBdKyJAIixHPURbMV0pLEgrZnVuY3Rpb24oZyxDKXtjb25zdCBTPVtdO2xldCB2PWcubGVuZ3RoO2Zvcig7di0tOylTW3ZdPUMo''@;'; put 'put ''Z1t2XSk7cmV0dXJuIFN9KChHPUcucmVwbGFjZShFLCIuIikpLnNwbGl0KCIuIiksYikuam9pbigiLiIpfWZ1bmN0aW9uIFUoRyl7Y29uc3QgYj1bXTtsZXQgRD0wO2NvbnN0IEg9Ry5sZW5ndGg7Zm9yKDtEPEg7KXtjb25zdCBOPUcuY2hhckNvZGVBdChEKyspO2lmKE4+PTU1Mjk2JiZOPD01''@;'; put 'put ''NjMxOSYmRDxIKXtjb25zdCBnPUcuY2hhckNvZGVBdChEKyspOzU2MzIwPT0oNjQ1MTImZyk/Yi5wdXNoKCgoMTAyMyZOKTw8MTApKygxMDIzJmcpKzY1NTM2KTooYi5wdXNoKE4pLEQtLSl9ZWxzZSBiLnB1c2goTil9cmV0dXJuIGJ9Y29uc3QgcT1HPT5TdHJpbmcuZnJvbUNvZGVQb2ludCgu''@;'; put 'put ''Li5HKSxlZT1mdW5jdGlvbihHLGIpe3JldHVybiBHKzIyKzc1KihHPDI2KS0oKDAhPWIpPDw1KX0sdGU9ZnVuY3Rpb24oRyxiLEQpe2xldCBIPTA7Zm9yKEc9RD9WKEcvNzAwKTpHPj4xLEcrPVYoRy9iKTtHPjQ1NTtIKz1LKUc9VihHLzM1KTtyZXR1cm4gVihIKzM2KkcvKEcrMzgpKX0sb2U9''@;'; put 'put ''ZnVuY3Rpb24oRyl7Y29uc3QgYj1bXSxEPUcubGVuZ3RoO2xldCBIPTAsTj0xMjgsZz03MixDPUcubGFzdEluZGV4T2YoIi0iKTtDPDAmJihDPTApO2ZvcihsZXQgdj0wO3Y8QzsrK3YpRy5jaGFyQ29kZUF0KHYpPj0xMjgmJlkoIm5vdC1iYXNpYyIpLGIucHVzaChHLmNoYXJDb2RlQXQodikp''@;'; put 'put ''O2ZvcihsZXQgdj1DPjA/QysxOjA7djxEOyl7Y29uc3QgcD1IO2ZvcihsZXQgSj0xLG5lPUs7O25lKz1LKXt2Pj1EJiZZKCJpbnZhbGlkLWlucHV0Iik7Y29uc3QgZGU9KFM9Ry5jaGFyQ29kZUF0KHYrKykpPj00OCYmUzw1OD9TLTQ4KzI2OlM+PTY1JiZTPDkxP1MtNjU6Uz49OTcmJlM8MTIz''@;'; put 'put ''P1MtOTc6SztkZT49SyYmWSgiaW52YWxpZC1pbnB1dCIpLGRlPlYoKHotSCkvSikmJlkoIm92ZXJmbG93IiksSCs9ZGUqSjtjb25zdCBmZT1uZTw9Zz8xOm5lPj1nKzI2PzI2Om5lLWc7aWYoZGU8ZmUpYnJlYWs7Y29uc3QgeGU9Sy1mZTtKPlYoei94ZSkmJlkoIm92ZXJmbG93IiksSio9eGV9''@;'; put 'put ''Y29uc3Qgdz1iLmxlbmd0aCsxO2c9dGUoSC1wLHcsMD09cCksVihIL3cpPnotTiYmWSgib3ZlcmZsb3ciKSxOKz1WKEgvdyksSCU9dyxiLnNwbGljZShIKyssMCxOKX12YXIgUztyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYil9LHNlPWZ1bmN0aW9uKEcpe2NvbnN0IGI9W10sRD0o''@;'; put 'put ''Rz1VKEcpKS5sZW5ndGg7bGV0IEg9MTI4LE49MCxnPTcyO2Zvcihjb25zdCB2IG9mIEcpdjwxMjgmJmIucHVzaChCKHYpKTtjb25zdCBDPWIubGVuZ3RoO2xldCBTPUM7Zm9yKEMmJmIucHVzaCgiLSIpO1M8RDspe2xldCB2PXo7Zm9yKGNvbnN0IHcgb2YgRyl3Pj1IJiZ3PHYmJih2PXcpO2Nv''@;'; put 'put ''bnN0IHA9UysxO3YtSD5WKCh6LU4pL3ApJiZZKCJvdmVyZmxvdyIpLE4rPSh2LUgpKnAsSD12O2Zvcihjb25zdCB3IG9mIEcpaWYodzxIJiYrK04+eiYmWSgib3ZlcmZsb3ciKSx3PT09SCl7bGV0IEo9Tjtmb3IobGV0IG5lPUs7O25lKz1LKXtjb25zdCBkZT1uZTw9Zz8xOm5lPj1nKzI2PzI2''@;'; put 'put ''Om5lLWc7aWYoSjxkZSlicmVhaztjb25zdCBmZT1KLWRlLHhlPUstZGU7Yi5wdXNoKEIoZWUoZGUrZmUleGUsMCkpKSxKPVYoZmUveGUpfWIucHVzaChCKGVlKEosMCkpKSxnPXRlKE4scCxTPT09QyksTj0wLCsrU30rK04sKytIfXJldHVybiBiLmpvaW4oIiIpfSxoZT1mdW5jdGlvbihHKXty''@;'; put 'put ''ZXR1cm4gWChHLGZ1bmN0aW9uKGIpe3JldHVybiBJLnRlc3QoYik/b2UoYi5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTpifSl9LHVlPWZ1bmN0aW9uKEcpe3JldHVybiBYKEcsZnVuY3Rpb24oYil7cmV0dXJuIGsudGVzdChiKT8ieG4tLSIrc2UoYik6Yn0pfSxjZT17dmVyc2lvbjoiMi4xLjAi''@;'; put 'put ''LHVjczI6e2RlY29kZTpVLGVuY29kZTpxfSxkZWNvZGU6b2UsZW5jb2RlOnNlLHRvQVNDSUk6dWUsdG9Vbmljb2RlOmhlfX0sNzEyOTooTSxPKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHooSSl7dHJ5e3JldHVybiBkZWNv''@;'; put 'put ''ZGVVUklDb21wb25lbnQoSS5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBLKEkpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEkpfWNhdGNoe3JldHVybiBudWxsfX1PLnN0cmluZ2lmeT1mdW5jdGlvbihJLGspe2s9a3x8IiI7dmFyIEUsaixW''@;'; put 'put ''PVtdO2ZvcihqIGluInN0cmluZyIhPXR5cGVvZiBrJiYoaz0iPyIpLEkpaWYoUi5jYWxsKEksaikpe2lmKChFPUlbal0pfHxudWxsIT1FJiYhaXNOYU4oRSl8fChFPSIiKSxqPUsoaiksRT1LKEUpLG51bGw9PT1qfHxudWxsPT09RSljb250aW51ZTtWLnB1c2goaisiPSIrRSl9cmV0dXJuIFYu''@;'; put 'put ''bGVuZ3RoP2srVi5qb2luKCImIik6IiJ9LE8ucGFyc2U9ZnVuY3Rpb24oSSl7Zm9yKHZhciBrLEU9LyhbXj0/IyZdKyk9PyhbXiZdKikvZyxqPXt9O2s9RS5leGVjKEkpOyl7dmFyIFY9eihrWzFdKSxCPXooa1syXSk7bnVsbD09PVZ8fG51bGw9PT1CfHxWIGluIGp8fChqW1ZdPUIpfXJldHVy''@;'; put 'put ''biBqfX0sMTc5ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz02NTUzNixrPVIoOTUwOSkuQnVmZmVyLEU9Ui5nLmNyeXB0b3x8Ui5nLm1zQ3J5cHRvO00uZXhwb3J0cz1FJiZFLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbihqLFYpe2lmKGo+NDI5NDk2NzI5NSl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBCPWsuYWxsb2NVbnNhZmUoaik7aWYoaj4wKWlmKGo+Sylmb3IodmFyIFk9MDtZPGo7WSs9SylFLmdldFJhbmRvbVZhbHVlcyhCLnNsaWNlKFksWStLKSk7ZWxzZSBFLmdldFJhbmRvbVZhbHVl''@;'; put 'put ''cyhCKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVj96Lm5leHRUaWNrKGZ1bmN0aW9uKCl7VihudWxsLEIpfSk6Qn06ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5V''@;'; put 'put ''c2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw3OTYzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KTtmdW5jdGlvbiBLKCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQg''@;'; put 'put ''YnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIEk9Uig5NTA5KSxrPVIoMTc5OCksRT1JLkJ1ZmZlcixqPUkua01heExlbmd0aCxWPVIuZy5jcnlwdG98fFIuZy5tc0NyeXB0byxCPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rp''@;'; put 'put ''b24gWShxLGVlKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHEhPXEpdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSBudW1iZXIiKTtpZihxPkJ8fHE8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHE+anx8cT5lZSl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFgocSxlZSx0ZSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxIT1xKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Qnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNp''@;'; put 'put ''emUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHErZWU+dGV8fHE+ail0aHJvdyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIFUocSxlZSx0ZSxvZSl7aWYoei5icm93c2VyKXt2YXIgaGU9bmV3IFVpbnQ4QXJyYXkocS5idWZmZXIsZWUsdGUpO3JldHVybiBWLmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcyhoZSksb2U/dm9pZCB6Lm5leHRUaWNrKGZ1bmN0aW9uKCl7b2UobnVsbCxxKX0pOnF9aWYoIW9lKXJldHVybiBrKHRlKS5jb3B5KHEsZWUpLHE7ayh0ZSxmdW5jdGlvbih1ZSxjZSl7aWYodWUpcmV0dXJuIG9lKHVlKTtjZS5jb3B5KHEsZWUpLG9lKG51bGwscSl9KX1W''@;'; put 'put ''JiZWLmdldFJhbmRvbVZhbHVlc3x8IXouYnJvd3Nlcj8oTy5yYW5kb21GaWxsPWZ1bmN0aW9uKHEsZWUsdGUsb2Upe2lmKCEoRS5pc0J1ZmZlcihxKXx8cSBpbnN0YW5jZW9mIFIuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVm''@;'; put 'put ''ZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZWUpb2U9ZWUsZWU9MCx0ZT1xLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0ZSlvZT10ZSx0ZT1xLmxlbmd0aC1lZTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBvZSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiBZKGVlLHEubGVuZ3RoKSxYKHRlLGVlLHEubGVuZ3RoKSxVKHEsZWUsdGUsb2UpfSxPLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uKHEsZWUsdGUpe2lmKHZvaWQgMD09PWVlJiYoZWU9MCksIShFLmlzQnVmZmVy''@;'; put 'put ''KHEpfHxxIGluc3RhbmNlb2YgUi5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiBZKGVlLHEubGVuZ3RoKSx2b2lkIDA9PT10ZSYmKHRlPXEubGVuZ3RoLWVlKSxYKHRlLGVlLHEu''@;'; put 'put ''bGVuZ3RoKSxVKHEsZWUsdGUpfSk6KE8ucmFuZG9tRmlsbD1LLE8ucmFuZG9tRmlsbFN5bmM9Syl9LDQyODE6TT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTz17fTtmdW5jdGlvbiBSKEssSSxrKXtrfHwoaz1FcnJvcik7dmFyIEU9ZnVuY3Rpb24oail7dmFyIFYsQjtmdW5jdGlvbiBZKFgsVSxxKXty''@;'; put 'put ''ZXR1cm4gai5jYWxsKHRoaXMsInN0cmluZyI9PXR5cGVvZiBJP0k6SShYLFUscSkpfHx0aGlzfXJldHVybiBCPWosKFY9WSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQi5wcm90b3R5cGUpLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVYsVi5fX3Byb3RvX189QixZfShrKTtFLnByb3RvdHlw''@;'; put 'put ''ZS5uYW1lPWsubmFtZSxFLnByb3RvdHlwZS5jb2RlPUssT1tLXT1FfWZ1bmN0aW9uIHooSyxJKXtpZihBcnJheS5pc0FycmF5KEspKXt2YXIgaz1LLmxlbmd0aDtyZXR1cm4gSz1LLm1hcChmdW5jdGlvbihFKXtyZXR1cm4gU3RyaW5nKEUpfSksaz4yPyJvbmUgb2YgIi5jb25jYXQoSSwiICIp''@;'; put 'put ''LmNvbmNhdChLLnNsaWNlKDAsay0xKS5qb2luKCIsICIpLCIsIG9yICIpK0tbay0xXToyPT09az8ib25lIG9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoS1swXSwiIG9yICIpLmNvbmNhdChLWzFdKToib2YgIi5jb25jYXQoSSwiICIpLmNvbmNhdChLWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQo''@;'; put 'put ''SSwiICIpLmNvbmNhdChTdHJpbmcoSykpfVIoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oSyxJKXtyZXR1cm4nVGhlIHZhbHVlICInK0krJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK0srJyInfSxUeXBlRXJyb3IpLFIoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlv''@;'; put 'put ''bihLLEksayl7dmFyIEUsQixYLHE7aWYoInN0cmluZyI9PXR5cGVvZiBJJiYibm90ICI9PT1JLnN1YnN0cigwLDQpPyhFPSJtdXN0IG5vdCBiZSIsST1JLnJlcGxhY2UoL15ub3QgLywiIikpOkU9Im11c3QgYmUiLFg9Sywodm9pZCAwPT09cXx8cT5YLmxlbmd0aCkmJihxPVgubGVuZ3RoKSwi''@;'; put 'put ''IGFyZ3VtZW50Ij09PVguc3Vic3RyaW5nKHEtOSxxKSlCPSJUaGUgIi5jb25jYXQoSywiICIpLmNvbmNhdChFLCIgIikuY29uY2F0KHooSSwidHlwZSIpKTtlbHNle3ZhciBZPWZ1bmN0aW9uKFgsVSxxKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHEmJihxPTApLCEocSsxPlgubGVuZ3RoKSYm''@;'; put 'put ''LTEhPT1YLmluZGV4T2YoIi4iLHEpfShLKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Qj0nVGhlICInLmNvbmNhdChLLCciICcpLmNvbmNhdChZLCIgIikuY29uY2F0KEUsIiAiKS5jb25jYXQoeihJLCJ0eXBlIikpfXJldHVybiBCKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIGsp''@;'; put 'put ''fSxUeXBlRXJyb3IpLFIoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLFIoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlvbihLKXtyZXR1cm4iVGhlICIrSysiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksUigiRVJS''@;'; put 'put ''X1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxSKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oSyl7cmV0dXJuIkNhbm5vdCBjYWxsICIrSysiIGFmdGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksUigiRVJSX01VTFRJUExFX0NBTExCQUNLIiwi''@;'; put 'put ''Q2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksUigiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxSKCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLFIoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMi''@;'; put 'put ''LCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxSKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oSyl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrS30sVHlwZUVycm9yKSxSKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5U''@;'; put 'put ''Iiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSxNLmV4cG9ydHMucT1PfSw2NzUzOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPU9iamVjdC5rZXlzfHxmdW5jdGlvbihVKXt2YXIgcT1bXTtmb3IodmFyIGVlIGluIFUpcS5wdXNoKGVlKTtyZXR1cm4g''@;'; put 'put ''cX07TS5leHBvcnRzPUI7dmFyIEk9Uig5NDgxKSxrPVIoNDIyOSk7Uig1NzE3KShCLEkpO2Zvcih2YXIgRT1LKGsucHJvdG90eXBlKSxqPTA7ajxFLmxlbmd0aDtqKyspe3ZhciBWPUVbal07Qi5wcm90b3R5cGVbVl18fChCLnByb3RvdHlwZVtWXT1rLnByb3RvdHlwZVtWXSl9ZnVuY3Rpb24g''@;'; put 'put ''QihVKXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoVSk7SS5jYWxsKHRoaXMsVSksay5jYWxsKHRoaXMsVSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLFUmJighMT09PVUucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PVUud3JpdGFibGUmJih0aGlzLndyaXRh''@;'; put 'put ''YmxlPSExKSwhMT09PVUuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsWSkpKX1mdW5jdGlvbiBZKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ei5uZXh0VGljayhYLHRoaXMpfWZ1bmN0aW9uIFgoVSl7VS5lbmQoKX1PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoQi5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsIndyaXRhYmxl''@;'; put 'put ''QnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZToh''@;'; put 'put ''MSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''JiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihVKXt2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9VSx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1VKX19KX0sMjcyNTooTSxPLFIpPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1LO3ZhciB6PVIoNDYwNSk7ZnVuY3Rpb24gSyhJKXtpZighKHRoaXMgaW5zdGFuY2VvZiBL''@;'; put 'put ''KSlyZXR1cm4gbmV3IEsoSSk7ei5jYWxsKHRoaXMsSSl9Uig1NzE3KShLLHopLEsucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oSSxrLEUpe0UobnVsbCxJKX19LDk0ODE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSk7TS5leHBvcnRzPUgsSC5SZWFkYWJsZVN0''@;'; put 'put ''YXRlPUQsUig3MTg3KTt2YXIgVixJPWZ1bmN0aW9uKFdlLEtlKXtyZXR1cm4gV2UubGlzdGVuZXJzKEtlKS5sZW5ndGh9LGs9UigyNTAzKSxFPVIoODc2NCkuQnVmZmVyLGo9KHZvaWQgMCE9PVIuZz9SLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9''@;'; put 'put ''KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sQj1SKDQ2MTYpO1Y9QiYmQi5kZWJ1Z2xvZz9CLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIFksWCxVLHE9Uig3MzI3KSxlZT1SKDExOTUpLHRlPVIoMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxvZT1SKDQyODEpLnEsc2U9b2Uu''@;'; put 'put ''RVJSX0lOVkFMSURfQVJHX1RZUEUsaGU9b2UuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRix1ZT1vZS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxjZT1vZS5FUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UO1IoNTcxNykoSCxrKTt2YXIgRz1lZS5lcnJvck9yRGVzdHJveSxi''@;'; put 'put ''PVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIEQoV2UsS2UsWWUpe3o9enx8Uig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBZZSYmKFllPUtlIGluc3RhbmNlb2YgeiksdGhpcy5vYmplY3RNb2RlPSEhKFdlPVdlfHx7fSkub2JqZWN0TW9kZSxZ''@;'; put 'put ''ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhV2UucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9dGUodGhpcyxXZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixZZSksdGhpcy5idWZmZXI9bmV3IHEsdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51''@;'; put 'put ''bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVu''@;'; put 'put ''aW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09V2UuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFXZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1XZS5kZWZhdWx0RW5j''@;'; put 'put ''b2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxXZS5lbmNvZGluZyYmKFl8fChZPVIoMjU1MykuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBZKFdlLmVuY29kaW5nKSx0''@;'; put 'put ''aGlzLmVuY29kaW5nPVdlLmVuY29kaW5nKX1mdW5jdGlvbiBIKFdlKXtpZih6PXp8fFIoNjc1MyksISh0aGlzIGluc3RhbmNlb2YgSCkpcmV0dXJuIG5ldyBIKFdlKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBEKFdlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIHopLHRoaXMucmVhZGFibGU9ITAs''@;'; put 'put ''V2UmJigiZnVuY3Rpb24iPT10eXBlb2YgV2UucmVhZCYmKHRoaXMuX3JlYWQ9V2UucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIFdlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PVdlLmRlc3Ryb3kpKSxrLmNhbGwodGhpcyl9ZnVuY3Rpb24gTihXZSxLZSxZZSxKZSxsdCl7VigicmVhZGFibGVB''@;'; put 'put ''ZGRDaHVuayIsS2UpO3ZhciBQZSxBZSxUZSxxZSxYZSxiZT1XZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09S2UpYmUucmVhZGluZz0hMSxmdW5jdGlvbihBZSxUZSl7aWYoVigib25Fb2ZDaHVuayIpLCFUZS5lbmRlZCl7aWYoVGUuZGVjb2Rlcil7dmFyIHFlPVRlLmRlY29kZXIuZW5kKCk7''@;'; put 'put ''cWUmJnFlLmxlbmd0aCYmKFRlLmJ1ZmZlci5wdXNoKHFlKSxUZS5sZW5ndGgrPVRlLm9iamVjdE1vZGU/MTpxZS5sZW5ndGgpfVRlLmVuZGVkPSEwLFRlLnN5bmM/dihBZSk6KFRlLm5lZWRSZWFkYWJsZT0hMSxUZS5lbWl0dGVkUmVhZGFibGV8fChUZS5lbWl0dGVkUmVhZGFibGU9ITAscChB''@;'; put 'put ''ZSkpKX19KFdlLGJlKTtlbHNlIGlmKGx0fHwoQWU9YmUsRS5pc0J1ZmZlcihYZT1UZT1LZSl8fFhlIGluc3RhbmNlb2Yganx8InN0cmluZyI9PXR5cGVvZiBUZXx8dm9pZCAwPT09VGV8fEFlLm9iamVjdE1vZGV8fChxZT1uZXcgc2UoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4''@;'; put 'put ''QXJyYXkiXSxUZSkpLFBlPXFlKSxQZSlHKFdlLFBlKTtlbHNlIGlmKGJlLm9iamVjdE1vZGV8fEtlJiZLZS5sZW5ndGg+MClpZigic3RyaW5nIj09dHlwZW9mIEtlfHxiZS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoS2UpPT09RS5wcm90b3R5cGV8fChLZT1mdW5jdGlvbihB''@;'; put 'put ''ZSl7cmV0dXJuIEUuZnJvbShBZSl9KEtlKSksSmUpYmUuZW5kRW1pdHRlZD9HKFdlLG5ldyBjZSk6ZyhXZSxiZSxLZSwhMCk7ZWxzZSBpZihiZS5lbmRlZClHKFdlLG5ldyBoZSk7ZWxzZXtpZihiZS5kZXN0cm95ZWQpcmV0dXJuITE7YmUucmVhZGluZz0hMSxiZS5kZWNvZGVyJiYhWWU/KEtl''@;'; put 'put ''PWJlLmRlY29kZXIud3JpdGUoS2UpLGJlLm9iamVjdE1vZGV8fDAhPT1LZS5sZW5ndGg/ZyhXZSxiZSxLZSwhMSk6dyhXZSxiZSkpOmcoV2UsYmUsS2UsITEpfWVsc2UgSmV8fChiZS5yZWFkaW5nPSExLHcoV2UsYmUpKTtyZXR1cm4hYmUuZW5kZWQmJihiZS5sZW5ndGg8YmUuaGlnaFdhdGVy''@;'; put 'put ''TWFya3x8MD09PWJlLmxlbmd0aCl9ZnVuY3Rpb24gZyhXZSxLZSxZZSxKZSl7S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCYmIUtlLnN5bmM/KEtlLmF3YWl0RHJhaW49MCxXZS5lbWl0KCJkYXRhIixZZSkpOihLZS5sZW5ndGgrPUtlLm9iamVjdE1vZGU/MTpZZS5sZW5ndGgsSmU/S2UuYnVm''@;'; put 'put ''ZmVyLnVuc2hpZnQoWWUpOktlLmJ1ZmZlci5wdXNoKFllKSxLZS5uZWVkUmVhZGFibGUmJnYoV2UpKSx3KFdlLEtlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMu''@;'; put 'put ''X3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oV2Upe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1XZSl9fSksSC5wcm90b3R5cGUuZGVzdHJveT1lZS5kZXN0cm95LEgucHJvdG90eXBl''@;'; put 'put ''Ll91bmRlc3Ryb3k9ZWUudW5kZXN0cm95LEgucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKFdlLEtlKXtLZShXZSl9LEgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oV2UsS2Upe3ZhciBZZSxKZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBKZS5vYmplY3RNb2RlP1llPSEwOiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgV2UmJigoS2U9S2V8fEplLmRlZmF1bHRFbmNvZGluZykhPT1KZS5lbmNvZGluZyYmKFdlPUUuZnJvbShXZSxLZSksS2U9IiIpLFllPSEwKSxOKHRoaXMsV2UsS2UsITEsWWUpfSxILnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKFdlKXtyZXR1cm4gTih0aGlzLFdlLG51''@;'; put 'put ''bGwsITAsITEpfSxILnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxILnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihXZSl7WXx8KFk9UigyNTUzKS5TdHJpbmdEZWNvZGVyKTt2YXIgS2U9bmV3IFkoV2Up''@;'; put 'put ''O3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1LZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIFllPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsSmU9IiI7bnVsbCE9PVllOylKZSs9S2Uu''@;'; put 'put ''d3JpdGUoWWUuZGF0YSksWWU9WWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PUplJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKEplKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1KZS5sZW5ndGgsdGhpc307dmFyIEM9MTA3''@;'; put 'put ''Mzc0MTgyNDtmdW5jdGlvbiBTKFdlLEtlKXtyZXR1cm4gV2U8PTB8fDA9PT1LZS5sZW5ndGgmJktlLmVuZGVkPzA6S2Uub2JqZWN0TW9kZT8xOldlIT1XZT9LZS5mbG93aW5nJiZLZS5sZW5ndGg/S2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6S2UubGVuZ3RoOihXZT5LZS5oaWdoV2F0ZXJN''@;'; put 'put ''YXJrJiYoS2UuaGlnaFdhdGVyTWFyaz0oKFllPVdlKT49Qz9ZZT1DOihZZS0tLFllfD1ZZT4+PjEsWWV8PVllPj4+MixZZXw9WWU+Pj40LFllfD1ZZT4+PjgsWWV8PVllPj4+MTYsWWUrKyksWWUpKSxXZTw9S2UubGVuZ3RoP1dlOktlLmVuZGVkP0tlLmxlbmd0aDooS2UubmVlZFJlYWRhYmxl''@;'; put 'put ''PSEwLDApKTt2YXIgWWV9ZnVuY3Rpb24gdihXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVtaXRSZWFkYWJsZSIsS2UubmVlZFJlYWRhYmxlLEtlLmVtaXR0ZWRSZWFkYWJsZSksS2UubmVlZFJlYWRhYmxlPSExLEtlLmVtaXR0ZWRSZWFkYWJsZXx8KFYoImVtaXRSZWFkYWJsZSIs''@;'; put 'put ''S2UuZmxvd2luZyksS2UuZW1pdHRlZFJlYWRhYmxlPSEwLEsubmV4dFRpY2socCxXZSkpfWZ1bmN0aW9uIHAoV2Upe3ZhciBLZT1XZS5fcmVhZGFibGVTdGF0ZTtWKCJlbWl0UmVhZGFibGVfIixLZS5kZXN0cm95ZWQsS2UubGVuZ3RoLEtlLmVuZGVkKSxLZS5kZXN0cm95ZWR8fCFLZS5sZW5n''@;'; put 'put ''dGgmJiFLZS5lbmRlZHx8KFdlLmVtaXQoInJlYWRhYmxlIiksS2UuZW1pdHRlZFJlYWRhYmxlPSExKSxLZS5uZWVkUmVhZGFibGU9IUtlLmZsb3dpbmcmJiFLZS5lbmRlZCYmS2UubGVuZ3RoPD1LZS5oaWdoV2F0ZXJNYXJrLHhlKFdlKX1mdW5jdGlvbiB3KFdlLEtlKXtLZS5yZWFkaW5nTW9y''@;'; put 'put ''ZXx8KEtlLnJlYWRpbmdNb3JlPSEwLEsubmV4dFRpY2soSixXZSxLZSkpfWZ1bmN0aW9uIEooV2UsS2Upe2Zvcig7IUtlLnJlYWRpbmcmJiFLZS5lbmRlZCYmKEtlLmxlbmd0aDxLZS5oaWdoV2F0ZXJNYXJrfHxLZS5mbG93aW5nJiYwPT09S2UubGVuZ3RoKTspe3ZhciBZZT1LZS5sZW5ndGg7''@;'; put 'put ''aWYoVigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxXZS5yZWFkKDApLFllPT09S2UubGVuZ3RoKWJyZWFrfUtlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIG5lKFdlKXt2YXIgS2U9V2UuX3JlYWRhYmxlU3RhdGU7S2UucmVhZGFibGVMaXN0ZW5pbmc9V2UubGlzdGVuZXJDb3VudCgicmVhZGFi''@;'; put 'put ''bGUiKT4wLEtlLnJlc3VtZVNjaGVkdWxlZCYmIUtlLnBhdXNlZD9LZS5mbG93aW5nPSEwOldlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZXZS5yZXN1bWUoKX1mdW5jdGlvbiBkZShXZSl7VigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksV2UucmVhZCgwKX1mdW5jdGlvbiBmZShXZSxL''@;'; put 'put ''ZSl7VigicmVzdW1lIixLZS5yZWFkaW5nKSxLZS5yZWFkaW5nfHxXZS5yZWFkKDApLEtlLnJlc3VtZVNjaGVkdWxlZD0hMSxXZS5lbWl0KCJyZXN1bWUiKSx4ZShXZSksS2UuZmxvd2luZyYmIUtlLnJlYWRpbmcmJldlLnJlYWQoMCl9ZnVuY3Rpb24geGUoV2Upe3ZhciBLZT1XZS5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTtmb3IoVigiZmxvdyIsS2UuZmxvd2luZyk7S2UuZmxvd2luZyYmbnVsbCE9PVdlLnJlYWQoKTspO31mdW5jdGlvbiBMZShXZSxLZSl7cmV0dXJuIDA9PT1LZS5sZW5ndGg/bnVsbDooS2Uub2JqZWN0TW9kZT9ZZT1LZS5idWZmZXIuc2hpZnQoKTohV2V8fFdlPj1LZS5sZW5ndGg/''@;'; put 'put ''KFllPUtlLmRlY29kZXI/S2UuYnVmZmVyLmpvaW4oIiIpOjE9PT1LZS5idWZmZXIubGVuZ3RoP0tlLmJ1ZmZlci5maXJzdCgpOktlLmJ1ZmZlci5jb25jYXQoS2UubGVuZ3RoKSxLZS5idWZmZXIuY2xlYXIoKSk6WWU9S2UuYnVmZmVyLmNvbnN1bWUoV2UsS2UuZGVjb2RlciksWWUpO3ZhciBZ''@;'; put 'put ''ZX1mdW5jdGlvbiBGZShXZSl7dmFyIEtlPVdlLl9yZWFkYWJsZVN0YXRlO1YoImVuZFJlYWRhYmxlIixLZS5lbmRFbWl0dGVkKSxLZS5lbmRFbWl0dGVkfHwoS2UuZW5kZWQ9ITAsSy5uZXh0VGljayhPZSxLZSxXZSkpfWZ1bmN0aW9uIE9lKFdlLEtlKXtpZihWKCJlbmRSZWFkYWJsZU5UIixX''@;'; put 'put ''ZS5lbmRFbWl0dGVkLFdlLmxlbmd0aCksIVdlLmVuZEVtaXR0ZWQmJjA9PT1XZS5sZW5ndGgmJihXZS5lbmRFbWl0dGVkPSEwLEtlLnJlYWRhYmxlPSExLEtlLmVtaXQoImVuZCIpLFdlLmF1dG9EZXN0cm95KSl7dmFyIFllPUtlLl93cml0YWJsZVN0YXRlOyghWWV8fFllLmF1dG9EZXN0cm95''@;'; put 'put ''JiZZZS5maW5pc2hlZCkmJktlLmRlc3Ryb3koKX19ZnVuY3Rpb24gamUoV2UsS2Upe2Zvcih2YXIgWWU9MCxKZT1XZS5sZW5ndGg7WWU8SmU7WWUrKylpZihXZVtZZV09PT1LZSlyZXR1cm4gWWU7cmV0dXJuLTF9SC5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihXZSl7VigicmVhZCIsV2UpLFdl''@;'; put 'put ''PXBhcnNlSW50KFdlLDEwKTt2YXIgS2U9dGhpcy5fcmVhZGFibGVTdGF0ZSxZZT1XZTtpZigwIT09V2UmJihLZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1XZSYmS2UubmVlZFJlYWRhYmxlJiYoKDAhPT1LZS5oaWdoV2F0ZXJNYXJrP0tlLmxlbmd0aD49S2UuaGlnaFdhdGVyTWFyazpLZS5s''@;'; put 'put ''ZW5ndGg+MCl8fEtlLmVuZGVkKSlyZXR1cm4gVigicmVhZDogZW1pdFJlYWRhYmxlIixLZS5sZW5ndGgsS2UuZW5kZWQpLDA9PT1LZS5sZW5ndGgmJktlLmVuZGVkP0ZlKHRoaXMpOnYodGhpcyksbnVsbDtpZigwPT09KFdlPVMoV2UsS2UpKSYmS2UuZW5kZWQpcmV0dXJuIDA9PT1LZS5sZW5n''@;'; put 'put ''dGgmJkZlKHRoaXMpLG51bGw7dmFyIEplLGx0PUtlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVigibmVlZCByZWFkYWJsZSIsbHQpLCgwPT09S2UubGVuZ3RofHxLZS5sZW5ndGgtV2U8S2UuaGlnaFdhdGVyTWFyaykmJlYoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixsdD0hMCksS2UuZW5k''@;'; put 'put ''ZWR8fEtlLnJlYWRpbmc/VigicmVhZGluZyBvciBlbmRlZCIsbHQ9ITEpOmx0JiYoVigiZG8gcmVhZCIpLEtlLnJlYWRpbmc9ITAsS2Uuc3luYz0hMCwwPT09S2UubGVuZ3RoJiYoS2UubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEtlLmhpZ2hXYXRlck1hcmspLEtlLnN5bmM9ITEsS2Uu''@;'; put 'put ''cmVhZGluZ3x8KFdlPVMoWWUsS2UpKSksbnVsbD09PShKZT1XZT4wP0xlKFdlLEtlKTpudWxsKT8oS2UubmVlZFJlYWRhYmxlPUtlLmxlbmd0aDw9S2UuaGlnaFdhdGVyTWFyayxXZT0wKTooS2UubGVuZ3RoLT1XZSxLZS5hd2FpdERyYWluPTApLDA9PT1LZS5sZW5ndGgmJihLZS5lbmRlZHx8''@;'; put 'put ''KEtlLm5lZWRSZWFkYWJsZT0hMCksWWUhPT1XZSYmS2UuZW5kZWQmJkZlKHRoaXMpKSxudWxsIT09SmUmJnRoaXMuZW1pdCgiZGF0YSIsSmUpLEplfSxILnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihXZSl7Ryh0aGlzLG5ldyB1ZSgiX3JlYWQoKSIpKX0sSC5wcm90b3R5cGUucGlwZT1mdW5j''@;'; put 'put ''dGlvbihXZSxLZSl7dmFyIFllPXRoaXMsSmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goSmUucGlwZXNDb3VudCl7Y2FzZSAwOkplLnBpcGVzPVdlO2JyZWFrO2Nhc2UgMTpKZS5waXBlcz1bSmUucGlwZXMsV2VdO2JyZWFrO2RlZmF1bHQ6SmUucGlwZXMucHVzaChXZSl9SmUucGlwZXND''@;'; put 'put ''b3VudCs9MSxWKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLEplLnBpcGVzQ291bnQsS2UpO3ZhciBsdD1LZSYmITE9PT1LZS5lbmR8fFdlPT09Sy5zdGRvdXR8fFdlPT09Sy5zdGRlcnI/TWU6YmU7ZnVuY3Rpb24gYmUoKXtWKCJvbmVuZCIpLFdlLmVuZCgpfUplLmVuZEVtaXR0ZWQ/Sy5uZXh0''@;'; put 'put ''VGljayhsdCk6WWUub25jZSgiZW5kIixsdCksV2Uub24oInVucGlwZSIsZnVuY3Rpb24gUGUoRGUsemUpe1YoIm9udW5waXBlIiksRGU9PT1ZZSYmemUmJiExPT09emUuaGFzVW5waXBlZCYmKHplLmhhc1VucGlwZWQ9ITAsVigiY2xlYW51cCIpLFdlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIs''@;'; put 'put ''VWUpLFdlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGh0KSxXZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLEFlKSxXZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFhlKSxXZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixQZSksWWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsYmUpLFllLnJlbW92ZUxp''@;'; put 'put ''c3RlbmVyKCJlbmQiLE1lKSxZZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIscWUpLFRlPSEwLCFKZS5hd2FpdERyYWlufHxXZS5fd3JpdGFibGVTdGF0ZSYmIVdlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8QWUoKSl9KTt2YXIgRGUsQWU9KERlPVllLGZ1bmN0aW9uKCl7dmFyIHplPURlLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlO1YoInBpcGVPbkRyYWluIix6ZS5hd2FpdERyYWluKSx6ZS5hd2FpdERyYWluJiZ6ZS5hd2FpdERyYWluLS0sMD09PXplLmF3YWl0RHJhaW4mJkkoRGUsImRhdGEiKSYmKHplLmZsb3dpbmc9ITAseGUoRGUpKX0pO1dlLm9uKCJkcmFpbiIsQWUpO3ZhciBUZT0hMTtmdW5j''@;'; put 'put ''dGlvbiBxZShEZSl7Vigib25kYXRhIik7dmFyIHplPVdlLndyaXRlKERlKTtWKCJkZXN0LndyaXRlIix6ZSksITE9PT16ZSYmKCgxPT09SmUucGlwZXNDb3VudCYmSmUucGlwZXM9PT1XZXx8SmUucGlwZXNDb3VudD4xJiYtMSE9PWplKEplLnBpcGVzLFdlKSkmJiFUZSYmKFYoImZhbHNlIHdy''@;'; put 'put ''aXRlIHJlc3BvbnNlLCBwYXVzZSIsSmUuYXdhaXREcmFpbiksSmUuYXdhaXREcmFpbisrKSxZZS5wYXVzZSgpKX1mdW5jdGlvbiBYZShEZSl7Vigib25lcnJvciIsRGUpLE1lKCksV2UucmVtb3ZlTGlzdGVuZXIoImVycm9yIixYZSksMD09PUkoV2UsImVycm9yIikmJkcoV2UsRGUpfWZ1bmN0''@;'; put 'put ''aW9uIFVlKCl7V2UucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaHQpLE1lKCl9ZnVuY3Rpb24gaHQoKXtWKCJvbmZpbmlzaCIpLFdlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVWUpLE1lKCl9ZnVuY3Rpb24gTWUoKXtWKCJ1bnBpcGUiKSxZZS51bnBpcGUoV2UpfXJldHVybiBZZS5vbigiZGF0''@;'; put 'put ''YSIscWUpLGZ1bmN0aW9uKERlLHplLGl0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoemUsaXQpO0RlLl9ldmVudHMmJkRlLl9ldmVudHNbemVdP0FycmF5LmlzQXJyYXkoRGUuX2V2ZW50c1t6ZV0pP0RlLl9ldmVu''@;'; put 'put ''dHNbemVdLnVuc2hpZnQoaXQpOkRlLl9ldmVudHNbemVdPVtpdCxEZS5fZXZlbnRzW3plXV06RGUub24oemUsaXQpfShXZSwiZXJyb3IiLFhlKSxXZS5vbmNlKCJjbG9zZSIsVWUpLFdlLm9uY2UoImZpbmlzaCIsaHQpLFdlLmVtaXQoInBpcGUiLFllKSxKZS5mbG93aW5nfHwoVigicGlwZSBy''@;'; put 'put ''ZXN1bWUiKSxZZS5yZXN1bWUoKSksV2V9LEgucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihXZSl7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1LZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1LZS5waXBlc0NvdW50KXJldHVybiBX''@;'; put 'put ''ZSYmV2UhPT1LZS5waXBlc3x8KFdlfHwoV2U9S2UucGlwZXMpLEtlLnBpcGVzPW51bGwsS2UucGlwZXNDb3VudD0wLEtlLmZsb3dpbmc9ITEsV2UmJldlLmVtaXQoInVucGlwZSIsdGhpcyxZZSkpLHRoaXM7aWYoIVdlKXt2YXIgSmU9S2UucGlwZXMsbHQ9S2UucGlwZXNDb3VudDtLZS5waXBl''@;'; put 'put ''cz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExO2Zvcih2YXIgUGU9MDtQZTxsdDtQZSsrKUplW1BlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgYmU9amUoS2UucGlwZXMsV2UpO3JldHVybi0xPT09YmV8fChLZS5waXBlcy5z''@;'; put 'put ''cGxpY2UoYmUsMSksS2UucGlwZXNDb3VudC09MSwxPT09S2UucGlwZXNDb3VudCYmKEtlLnBpcGVzPUtlLnBpcGVzWzBdKSxXZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWWUpKSx0aGlzfSxILnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1ILnByb3RvdHlwZS5vbj1mdW5jdGlvbihXZSxLZSl7dmFyIFll''@;'; put 'put ''PWsucHJvdG90eXBlLm9uLmNhbGwodGhpcyxXZSxLZSksSmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1XZT8oSmUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1KZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVh''@;'; put 'put ''ZGFibGUiPT09V2UmJihKZS5lbmRFbWl0dGVkfHxKZS5yZWFkYWJsZUxpc3RlbmluZ3x8KEplLnJlYWRhYmxlTGlzdGVuaW5nPUplLm5lZWRSZWFkYWJsZT0hMCxKZS5mbG93aW5nPSExLEplLmVtaXR0ZWRSZWFkYWJsZT0hMSxWKCJvbiByZWFkYWJsZSIsSmUubGVuZ3RoLEplLnJlYWRpbmcp''@;'; put 'put ''LEplLmxlbmd0aD92KHRoaXMpOkplLnJlYWRpbmd8fEsubmV4dFRpY2soZGUsdGhpcykpKSxZZX0sSC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oV2UsS2Upe3ZhciBZZT1rLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsV2UsS2UpO3JldHVybiJyZWFkYWJs''@;'; put 'put ''ZSI9PT1XZSYmSy5uZXh0VGljayhuZSx0aGlzKSxZZX0sSC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKFdlKXt2YXIgS2U9ay5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4icmVhZGFibGUiIT09V2UmJnZvaWQg''@;'; put 'put ''MCE9PVdlfHxLLm5leHRUaWNrKG5lLHRoaXMpLEtlfSxILnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgWWUsV2U9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gV2UuZmxvd2luZ3x8KFYoInJlc3VtZSIpLFdlLmZsb3dpbmc9IVdlLnJlYWRhYmxlTGlzdGVuaW5nLChZZT1XZSku''@;'; put 'put ''cmVzdW1lU2NoZWR1bGVkfHwoWWUucmVzdW1lU2NoZWR1bGVkPSEwLEsubmV4dFRpY2soZmUsdGhpcyxZZSkpKSxXZS5wYXVzZWQ9ITEsdGhpc30sSC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRl''@;'; put 'put ''LmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoVigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxILnByb3RvdHlwZS53cmFwPWZ1bmN0''@;'; put 'put ''aW9uKFdlKXt2YXIgS2U9dGhpcyxZZT10aGlzLl9yZWFkYWJsZVN0YXRlLEplPSExO2Zvcih2YXIgbHQgaW4gV2Uub24oImVuZCIsZnVuY3Rpb24oKXtpZihWKCJ3cmFwcGVkIGVuZCIpLFllLmRlY29kZXImJiFZZS5lbmRlZCl7dmFyIGJlPVllLmRlY29kZXIuZW5kKCk7YmUmJmJlLmxlbmd0''@;'; put 'put ''aCYmS2UucHVzaChiZSl9S2UucHVzaChudWxsKX0pLFdlLm9uKCJkYXRhIixmdW5jdGlvbihiZSl7Vigid3JhcHBlZCBkYXRhIiksWWUuZGVjb2RlciYmKGJlPVllLmRlY29kZXIud3JpdGUoYmUpKSxZZS5vYmplY3RNb2RlJiZudWxsPT1iZXx8KFllLm9iamVjdE1vZGV8fGJlJiZiZS5sZW5n''@;'; put 'put ''dGgpJiYoS2UucHVzaChiZSl8fChKZT0hMCxXZS5wYXVzZSgpKSl9KSxXZSl2b2lkIDA9PT10aGlzW2x0XSYmImZ1bmN0aW9uIj09dHlwZW9mIFdlW2x0XSYmKHRoaXNbbHRdPWZ1bmN0aW9uKGJlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gV2VbYmVdLmFwcGx5KFdlLGFyZ3VtZW50cyl9''@;'; put 'put ''fShsdCkpO2Zvcih2YXIgUGU9MDtQZTxiLmxlbmd0aDtQZSsrKVdlLm9uKGJbUGVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsYltQZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihiZSl7Vigid3JhcHBlZCBfcmVhZCIsYmUpLEplJiYoSmU9ITEsV2UucmVzdW1lKCkpfSx0aGlzfSwiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PVgmJihYPVIoNTg1MCkpLFgodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFy''@;'; put 'put ''ayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dp''@;'; put 'put ''bmd9LHNldDpmdW5jdGlvbihXZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1XZSl9fSksSC5fZnJvbUxpc3Q9TGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihILmZyb209ZnVuY3Rpb24oV2UsS2Upe3JldHVybiB2b2lkIDA9PT1VJiYoVT1SKDUxNjcpKSxVKEgsV2UsS2UpfSl9LDQ2MDU6KE0sTyxSKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtNLmV4cG9ydHM9Qjt2YXIgej1SKDQyODEpLnEsSz16LkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELEk9ei5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssaz16LkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsRT16LkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxqPVIo''@;'; put 'put ''Njc1Myk7ZnVuY3Rpb24gVihVLHEpe3ZhciBlZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtlZS50cmFuc2Zvcm1pbmc9ITE7dmFyIHRlPWVlLndyaXRlY2I7aWYobnVsbD09PXRlKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgSSk7ZWUud3JpdGVjaHVuaz1udWxsLGVlLndyaXRlY2I9bnVs''@;'; put 'put ''bCxudWxsIT1xJiZ0aGlzLnB1c2gocSksdGUoVSk7dmFyIG9lPXRoaXMuX3JlYWRhYmxlU3RhdGU7b2UucmVhZGluZz0hMSwob2UubmVlZFJlYWRhYmxlfHxvZS5sZW5ndGg8b2UuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQob2UuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gQihVKXtpZigh''@;'; put 'put ''KHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIoVSk7ai5jYWxsKHRoaXMsVSksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOlYuYmluZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdy''@;'; put 'put ''aXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLFUmJigiZnVuY3Rpb24iPT10eXBlb2YgVS50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09VS50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBVLmZsdXNoJiYodGhpcy5fZmx1c2g9VS5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIsWSl9ZnVuY3Rpb24gWSgpe3ZhciBVPXRoaXM7ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9YKHRoaXMsbnVsbCxudWxsKTp0aGlz''@;'; put 'put ''Ll9mbHVzaChmdW5jdGlvbihxLGVlKXtYKFUscSxlZSl9KX1mdW5jdGlvbiBYKFUscSxlZSl7aWYocSlyZXR1cm4gVS5lbWl0KCJlcnJvciIscSk7aWYobnVsbCE9ZWUmJlUucHVzaChlZSksVS5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IEU7aWYoVS5fdHJhbnNmb3JtU3RhdGUu''@;'; put 'put ''dHJhbnNmb3JtaW5nKXRocm93IG5ldyBrO3JldHVybiBVLnB1c2gobnVsbCl9Uig1NzE3KShCLGopLEIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oVSxxKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxqLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxVLHEp''@;'; put 'put ''fSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKFUscSxlZSl7ZWUobmV3IEsoIl90cmFuc2Zvcm0oKSIpKX0sQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUscSxlZSl7dmFyIHRlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKHRlLndyaXRlY2I9ZWUsdGUud3JpdGVjaHVuaz1V''@;'; put 'put ''LHRlLndyaXRlZW5jb2Rpbmc9cSwhdGUudHJhbnNmb3JtaW5nKXt2YXIgb2U9dGhpcy5fcmVhZGFibGVTdGF0ZTsodGUubmVlZFRyYW5zZm9ybXx8b2UubmVlZFJlYWRhYmxlfHxvZS5sZW5ndGg8b2UuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQob2UuaGlnaFdhdGVyTWFyayl9fSxCLnBy''@;'; put 'put ''b3RvdHlwZS5fcmVhZD1mdW5jdGlvbihVKXt2YXIgcT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09cS53cml0ZWNodW5rfHxxLnRyYW5zZm9ybWluZz9xLm5lZWRUcmFuc2Zvcm09ITA6KHEudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShxLndyaXRlY2h1bmsscS53cml0ZWVu''@;'; put 'put ''Y29kaW5nLHEuYWZ0ZXJUcmFuc2Zvcm0pKX0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oVSxxKXtqLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsVSxmdW5jdGlvbihlZSl7cShlZSl9KX19LDQyMjk6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPVIoNDE1NSk7ZnVu''@;'; put 'put ''Y3Rpb24gSSh3KXt2YXIgSj10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbihuZSxkZSxmZSl7dmFyIHhlPW5lLmVudHJ5O2ZvcihuZS5lbnRyeT1udWxsO3hlOyl7dmFyIExlPXhlLmNhbGxiYWNrO2RlLnBlbmRpbmdj''@;'; put 'put ''Yi0tLExlKHZvaWQgMCkseGU9eGUubmV4dH1kZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1uZX0oSix3KX19TS5leHBvcnRzPUgsSC5Xcml0YWJsZVN0YXRlPUQ7dmFyIEIsaz17ZGVwcmVjYXRlOlIoNDkyNyl9LEU9UigyNTAzKSxqPVIoODc2NCkuQnVmZmVyLFY9KHZvaWQgMCE9PVIuZz9S''@;'; put 'put ''Lmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sWT1SKDExOTUpLFg9UigyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFU9Uig0MjgxKS5xLHE9VS5FUlJfSU5WQUxJRF9BUkdfVFlQRSxlZT1VLkVSUl9NRVRI''@;'; put 'put ''T0RfTk9UX0lNUExFTUVOVEVELHRlPVUuRVJSX01VTFRJUExFX0NBTExCQUNLLG9lPVUuRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxzZT1VLkVSUl9TVFJFQU1fREVTVFJPWUVELGhlPVUuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyx1ZT1VLkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5ELGNlPVUu''@;'; put 'put ''RVJSX1VOS05PV05fRU5DT0RJTkcsRz1ZLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gRCh3LEosbmUpe3o9enx8Uig2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBuZSYmKG5lPUogaW5zdGFuY2VvZiB6KSx0aGlzLm9iamVjdE1vZGU9ISEodz13fHx7fSkub2JqZWN0TW9k''@;'; put 'put ''ZSxuZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdy53cml0YWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1YKHRoaXMsdywid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixuZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVu''@;'; put 'put ''ZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT13LmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPXcuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5sZW5ndGg9MCx0aGlz''@;'; put 'put ''LndyaXRpbmc9ITEsdGhpcy5jb3JrZWQ9MCx0aGlzLnN5bmM9ITAsdGhpcy5idWZmZXJQcm9jZXNzaW5nPSExLHRoaXMub253cml0ZT1mdW5jdGlvbihmZSl7IWZ1bmN0aW9uKHhlLExlKXt2YXIgS2UsRmU9eGUuX3dyaXRhYmxlU3RhdGUsT2U9RmUuc3luYyxqZT1GZS53cml0ZWNiO2lmKCJm''@;'; put 'put ''dW5jdGlvbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgdGU7aWYoKEtlPUZlKS53cml0aW5nPSExLEtlLndyaXRlY2I9bnVsbCxLZS5sZW5ndGgtPUtlLndyaXRlbGVuLEtlLndyaXRlbGVuPTAsTGUpIWZ1bmN0aW9uKEtlLFllLEplLGx0LFBlKXstLVllLnBlbmRpbmdjYixKZT8oSy5uZXh0VGlj''@;'; put 'put ''ayhQZSxsdCksSy5uZXh0VGljayhwLEtlLFllKSxLZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRyhLZSxsdCkpOihQZShsdCksS2UuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEcoS2UsbHQpLHAoS2UsWWUpKX0oeGUsRmUsT2UsTGUsamUpO2Vsc2V7dmFyIFdlPVMo''@;'; put 'put ''RmUpfHx4ZS5kZXN0cm95ZWQ7V2V8fEZlLmNvcmtlZHx8RmUuYnVmZmVyUHJvY2Vzc2luZ3x8IUZlLmJ1ZmZlcmVkUmVxdWVzdHx8Qyh4ZSxGZSksT2U/Sy5uZXh0VGljayhnLHhlLEZlLFdlLGplKTpnKHhlLEZlLFdlLGplKX19KEosZmUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRl''@;'; put 'put ''bGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT13LmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0''@;'; put 'put ''cm95PSEhdy5hdXRvRGVzdHJveSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEkodGhpcyl9ZnVuY3Rpb24gSCh3KXt2YXIgSj10aGlzIGluc3RhbmNlb2Yoej16fHxSKDY3NTMpKTtpZighSiYmIUIuY2FsbChILHRoaXMpKXJldHVybiBu''@;'; put 'put ''ZXcgSCh3KTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBEKHcsdGhpcyxKKSx0aGlzLndyaXRhYmxlPSEwLHcmJigiZnVuY3Rpb24iPT10eXBlb2Ygdy53cml0ZSYmKHRoaXMuX3dyaXRlPXcud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB3LndyaXRldiYmKHRoaXMuX3dyaXRldj13LndyaXRl''@;'; put 'put ''diksImZ1bmN0aW9uIj09dHlwZW9mIHcuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9dy5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2Ygdy5maW5hbCYmKHRoaXMuX2ZpbmFsPXcuZmluYWwpKSxFLmNhbGwodGhpcyl9ZnVuY3Rpb24gTih3LEosbmUsZGUsZmUseGUsTGUpe0oud3JpdGVsZW49''@;'; put 'put ''ZGUsSi53cml0ZWNiPUxlLEoud3JpdGluZz0hMCxKLnN5bmM9ITAsSi5kZXN0cm95ZWQ/Si5vbndyaXRlKG5ldyBzZSgid3JpdGUiKSk6bmU/dy5fd3JpdGV2KGZlLEoub253cml0ZSk6dy5fd3JpdGUoZmUseGUsSi5vbndyaXRlKSxKLnN5bmM9ITF9ZnVuY3Rpb24gZyh3LEosbmUsZGUpe3Zh''@;'; put 'put ''ciBmZSx4ZTtuZXx8KGZlPXcsMD09PSh4ZT1KKS5sZW5ndGgmJnhlLm5lZWREcmFpbiYmKHhlLm5lZWREcmFpbj0hMSxmZS5lbWl0KCJkcmFpbiIpKSksSi5wZW5kaW5nY2ItLSxkZSgpLHAodyxKKX1mdW5jdGlvbiBDKHcsSil7Si5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBuZT1KLmJ1ZmZl''@;'; put 'put ''cmVkUmVxdWVzdDtpZih3Ll93cml0ZXYmJm5lJiZuZS5uZXh0KXt2YXIgZmU9bmV3IEFycmF5KEouYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHhlPUouY29ya2VkUmVxdWVzdHNGcmVlO3hlLmVudHJ5PW5lO2Zvcih2YXIgTGU9MCxGZT0hMDtuZTspZmVbTGVdPW5lLG5lLmlzQnVmfHwoRmU9ITEp''@;'; put 'put ''LG5lPW5lLm5leHQsTGUrPTE7ZmUuYWxsQnVmZmVycz1GZSxOKHcsSiwhMCxKLmxlbmd0aCxmZSwiIix4ZS5maW5pc2gpLEoucGVuZGluZ2NiKyssSi5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwseGUubmV4dD8oSi5jb3JrZWRSZXF1ZXN0c0ZyZWU9eGUubmV4dCx4ZS5uZXh0PW51bGwpOkou''@;'; put 'put ''Y29ya2VkUmVxdWVzdHNGcmVlPW5ldyBJKEopLEouYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7bmU7KXt2YXIgT2U9bmUuY2h1bms7aWYoTih3LEosITEsSi5vYmplY3RNb2RlPzE6T2UubGVuZ3RoLE9lLG5lLmVuY29kaW5nLG5lLmNhbGxiYWNrKSxuZT1uZS5uZXh0LEouYnVm''@;'; put 'put ''ZmVyZWRSZXF1ZXN0Q291bnQtLSxKLndyaXRpbmcpYnJlYWt9bnVsbD09PW5lJiYoSi5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfUouYnVmZmVyZWRSZXF1ZXN0PW5lLEouYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBTKHcpe3JldHVybiB3LmVuZGluZyYmMD09PXcubGVuZ3RoJiZu''@;'; put 'put ''dWxsPT09dy5idWZmZXJlZFJlcXVlc3QmJiF3LmZpbmlzaGVkJiYhdy53cml0aW5nfWZ1bmN0aW9uIHYodyxKKXt3Ll9maW5hbChmdW5jdGlvbihuZSl7Si5wZW5kaW5nY2ItLSxuZSYmRyh3LG5lKSxKLnByZWZpbmlzaGVkPSEwLHcuZW1pdCgicHJlZmluaXNoIikscCh3LEopfSl9ZnVuY3Rp''@;'; put 'put ''b24gcCh3LEope3ZhciBmZSx4ZSxuZT1TKEopO2lmKG5lJiYoZmU9dywoeGU9SikucHJlZmluaXNoZWR8fHhlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIGZlLl9maW5hbHx8eGUuZGVzdHJveWVkPyh4ZS5wcmVmaW5pc2hlZD0hMCxmZS5lbWl0KCJwcmVmaW5pc2giKSk6KHhl''@;'; put 'put ''LnBlbmRpbmdjYisrLHhlLmZpbmFsQ2FsbGVkPSEwLEsubmV4dFRpY2sodixmZSx4ZSkpKSwwPT09Si5wZW5kaW5nY2ImJihKLmZpbmlzaGVkPSEwLHcuZW1pdCgiZmluaXNoIiksSi5hdXRvRGVzdHJveSkpKXt2YXIgZGU9dy5fcmVhZGFibGVTdGF0ZTsoIWRlfHxkZS5hdXRvRGVzdHJveSYm''@;'; put 'put ''ZGUuZW5kRW1pdHRlZCkmJncuZGVzdHJveSgpfXJldHVybiBuZX1SKDU3MTcpKEgsRSksRC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB3PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LEo9W107dzspSi5wdXNoKHcpLHc9dy5uZXh0O3JldHVybiBKfSxmdW5jdGlvbigpe3Ry''@;'; put 'put ''eXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsImJ1ZmZlciIse2dldDprLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIg''@;'; put 'put ''aW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhCPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1i''@;'; put 'put ''b2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24odyl7cmV0dXJuISFCLmNhbGwodGhpcyx3KXx8dGhpcz09PUgmJncmJncuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBEfX0pKTpCPWZ1bmN0aW9uKHcpe3Jl''@;'; put 'put ''dHVybiB3IGluc3RhbmNlb2YgdGhpc30sSC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe0codGhpcyxuZXcgb2UpfSxILnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3LEosbmUpe3ZhciBkZSxGZSxPZSxqZSxmZT10aGlzLl93cml0YWJsZVN0YXRlLHhlPSExLExlPSFmZS5vYmplY3RNb2Rl''@;'; put 'put ''JiYoai5pc0J1ZmZlcihkZT13KXx8ZGUgaW5zdGFuY2VvZiBWKTtyZXR1cm4gTGUmJiFqLmlzQnVmZmVyKHcpJiYodz1qLmZyb20odykpLCJmdW5jdGlvbiI9PXR5cGVvZiBKJiYobmU9SixKPW51bGwpLExlP0o9ImJ1ZmZlciI6Snx8KEo9ZmUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgbmUmJihuZT1iKSxmZS5lbmRpbmc/KEZlPXRoaXMsT2U9bmUsamU9bmV3IHVlLEcoRmUsamUpLEsubmV4dFRpY2soT2UsamUpKTooTGV8fGZ1bmN0aW9uKEZlLE9lLGplLFdlKXt2YXIgS2U7cmV0dXJuIG51bGw9PT1qZT9LZT1uZXcgaGU6InN0cmluZyI9PXR5cGVvZiBqZXx8''@;'; put 'put ''T2Uub2JqZWN0TW9kZXx8KEtlPW5ldyBxKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiXSxqZSkpLCFLZXx8KEcoRmUsS2UpLEsubmV4dFRpY2soV2UsS2UpLCExKX0odGhpcyxmZSx3LG5lKSkmJihmZS5wZW5kaW5nY2IrKyx4ZT1mdW5jdGlvbihGZSxPZSxqZSxXZSxLZSxZZSl7aWYoIWpl''@;'; put 'put ''KXt2YXIgSmU9KFRlPVdlLChBZT1PZSkub2JqZWN0TW9kZXx8ITE9PT1BZS5kZWNvZGVTdHJpbmdzfHwic3RyaW5nIiE9dHlwZW9mIFRlfHwoVGU9ai5mcm9tKFRlLEtlKSksVGUpO1dlIT09SmUmJihqZT0hMCxLZT0iYnVmZmVyIixXZT1KZSl9dmFyIEFlLFRlLGx0PU9lLm9iamVjdE1vZGU/''@;'; put 'put ''MTpXZS5sZW5ndGg7T2UubGVuZ3RoKz1sdDt2YXIgUGU9T2UubGVuZ3RoPE9lLmhpZ2hXYXRlck1hcms7aWYoUGV8fChPZS5uZWVkRHJhaW49ITApLE9lLndyaXRpbmd8fE9lLmNvcmtlZCl7dmFyIGJlPU9lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1''@;'; put 'put ''bms6V2UsZW5jb2Rpbmc6S2UsaXNCdWY6amUsY2FsbGJhY2s6WWUsbmV4dDpudWxsfSxiZT9iZS5uZXh0PU9lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6T2UuYnVmZmVyZWRSZXF1ZXN0PU9lLmxhc3RCdWZmZXJlZFJlcXVlc3QsT2UuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBOKEZlLE9l''@;'; put 'put ''LCExLGx0LFdlLEtlLFllKTtyZXR1cm4gUGV9KHRoaXMsZmUsTGUsdyxKLG5lKSkseGV9LEgucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxILnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl93cml0YWJsZVN0YXRl''@;'; put 'put ''O3cuY29ya2VkJiYody5jb3JrZWQtLSx3LndyaXRpbmd8fHcuY29ya2VkfHx3LmJ1ZmZlclByb2Nlc3Npbmd8fCF3LmJ1ZmZlcmVkUmVxdWVzdHx8Qyh0aGlzLHcpKX0sSC5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHcpe2lmKCJzdHJpbmciPT10eXBlb2YgdyYmKHc9''@;'; put 'put ''dy50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKCh3KyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IGNlKHcpO3JldHVy''@;'; put 'put ''biB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz13LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0''@;'; put 'put ''YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEgucHJvdG90''@;'; put 'put ''eXBlLl93cml0ZT1mdW5jdGlvbih3LEosbmUpe25lKG5ldyBlZSgiX3dyaXRlKCkiKSl9LEgucHJvdG90eXBlLl93cml0ZXY9bnVsbCxILnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odyxKLG5lKXt2YXIgeGUsTGUsZGU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2Ygdz8obmU9dyx3PW51bGwsSj1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgSiYmKG5lPUosSj1udWxsKSxudWxsIT13JiZ0aGlzLndyaXRlKHcsSiksZGUuY29ya2VkJiYoZGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksZGUuZW5kaW5nfHwoTGU9bmUsKHhlPWRlKS5lbmRpbmc9ITAscCh0''@;'; put 'put ''aGlzLHhlKSxMZSYmKHhlLmZpbmlzaGVkP0submV4dFRpY2soTGUpOnRoaXMub25jZSgiZmluaXNoIixMZSkpLHhlLmVuZGVkPSEwLHRoaXMud3JpdGFibGU9ITEpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''JnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odyl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXcpfX0pLEgucHJvdG90eXBlLmRlc3Ryb3k9WS5kZXN0cm95LEgucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRl''@;'; put 'put ''c3Ryb3ksSC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odyxKKXtKKHcpfX0sNTg1MDooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6LEs9Uig0MTU1KTtmdW5jdGlvbiBJKGhlLHVlLGNlKXtyZXR1cm4odWU9InN5bWJvbCI9PXR5cGVvZihiPWZ1bmN0aW9uKEQsSCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBEfHxudWxsPT09RClyZXR1cm4gRDt2YXIgTj1EW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09Til7dmFyIGc9Ti5jYWxsKEQsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgZylyZXR1cm4gZzt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl''@;'; put 'put ''IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoRCl9KHVlKSk/YjpTdHJpbmcoYikpaW4gaGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGhlLHVlLHt2YWx1ZTpjZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmhlW3VlXT1j''@;'; put 'put ''ZSxoZTt2YXIgYn12YXIgaz1SKDg2MTApLEU9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLGo9U3ltYm9sKCJsYXN0UmVqZWN0IiksVj1TeW1ib2woImVycm9yIiksQj1TeW1ib2woImVuZGVkIiksWT1TeW1ib2woImxhc3RQcm9taXNlIiksWD1TeW1ib2woImhhbmRsZVByb21pc2UiKSxVPVN5bWJv''@;'; put 'put ''bCgic3RyZWFtIik7ZnVuY3Rpb24gcShoZSx1ZSl7cmV0dXJue3ZhbHVlOmhlLGRvbmU6dWV9fWZ1bmN0aW9uIGVlKGhlKXt2YXIgdWU9aGVbRV07aWYobnVsbCE9PXVlKXt2YXIgY2U9aGVbVV0ucmVhZCgpO251bGwhPT1jZSYmKGhlW1ldPW51bGwsaGVbRV09bnVsbCxoZVtqXT1udWxsLHVl''@;'; put 'put ''KHEoY2UsITEpKSl9fWZ1bmN0aW9uIHRlKGhlKXtLLm5leHRUaWNrKGVlLGhlKX12YXIgb2U9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSksc2U9T2JqZWN0LnNldFByb3RvdHlwZU9mKChJKHo9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tVXX0sbmV4dDpmdW5jdGlvbigp''@;'; put 'put ''e3ZhciBoZT10aGlzLHVlPXRoaXNbVl07aWYobnVsbCE9PXVlKXJldHVybiBQcm9taXNlLnJlamVjdCh1ZSk7aWYodGhpc1tCXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEQsSCl7''@;'; put 'put ''Sy5uZXh0VGljayhmdW5jdGlvbigpe2hlW1ZdP0goaGVbVl0pOkQocSh2b2lkIDAsITApKX0pfSk7dmFyIGNlLEQsSCxHPXRoaXNbWV07aWYoRyljZT1uZXcgUHJvbWlzZSgoRD1HLEg9dGhpcyxmdW5jdGlvbihOLGcpe0QudGhlbihmdW5jdGlvbigpe0hbQl0/TihxKHZvaWQgMCwhMCkpOkhb''@;'; put 'put ''WF0oTixnKX0sZyl9KSk7ZWxzZXt2YXIgYj10aGlzW1VdLnJlYWQoKTtpZihudWxsIT09YilyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHEoYiwhMSkpO2NlPW5ldyBQcm9taXNlKHRoaXNbWF0pfXJldHVybiB0aGlzW1ldPWNlLGNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpc30pLEkoeiwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBoZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih1ZSxjZSl7aGVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKEcpe0c/Y2UoRyk6dWUocSh2b2lkIDAsITApKX0pfSl9KSx6KSxvZSk7TS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGhlKXt2YXIgdWUsY2U9T2JqZWN0LmNyZWF0ZShzZSwoSSh1ZT17fSxVLHt2YWx1ZTpoZSx3cml0YWJsZTohMH0pLEkodWUsRSx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEkodWUsaix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLEkodWUsVix7dmFsdWU6bnVsbCx3cml0YWJs''@;'; put 'put ''ZTohMH0pLEkodWUsQix7dmFsdWU6aGUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLEkodWUsWCx7dmFsdWU6ZnVuY3Rpb24oRyxiKXt2YXIgRD1jZVtVXS5yZWFkKCk7RD8oY2VbWV09bnVsbCxjZVtFXT1udWxsLGNlW2pdPW51bGwsRyhxKEQsITEpKSk6KGNlW0Vd''@;'; put 'put ''PUcsY2Vbal09Yil9LHdyaXRhYmxlOiEwfSksdWUpKTtyZXR1cm4gY2VbWV09bnVsbCxrKGhlLGZ1bmN0aW9uKEcpe2lmKEcmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1HLmNvZGUpe3ZhciBiPWNlW2pdO3JldHVybiBudWxsIT09YiYmKGNlW1ldPW51bGwsY2VbRV09bnVsbCxj''@;'; put 'put ''ZVtqXT1udWxsLGIoRykpLHZvaWQoY2VbVl09Ryl9dmFyIEQ9Y2VbRV07bnVsbCE9PUQmJihjZVtZXT1udWxsLGNlW0VdPW51bGwsY2Vbal09bnVsbCxEKHEodm9pZCAwLCEwKSkpLGNlW0JdPSEwfSksaGUub24oInJlYWRhYmxlIix0ZS5iaW5kKG51bGwsY2UpKSxjZX19LDczMjc6KE0sTyxS''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KFksWCl7dmFyIFU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHE9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhZKTtYJiYocT1xLmZpbHRlcihmdW5jdGlvbihlZSl7cmV0dXJuIE9iamVj''@;'; put 'put ''dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxlZSkuZW51bWVyYWJsZX0pKSxVLnB1c2guYXBwbHkoVSxxKX1yZXR1cm4gVX1mdW5jdGlvbiBLKFkpe2Zvcih2YXIgWD0xO1g8YXJndW1lbnRzLmxlbmd0aDtYKyspe3ZhciBVPW51bGwhPWFyZ3VtZW50c1tYXT9hcmd1bWVudHNbWF06e307''@;'; put 'put ''WCUyP3ooT2JqZWN0KFUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe0koWSxxLFVbcV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhVKSk6eihPYmplY3QoVSkpLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24ocSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFkscSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFUscSkpfSl9cmV0dXJuIFl9ZnVuY3Rpb24gSShZLFgsVSl7cmV0dXJuKFg9RShYKSlpbiBZP09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLFgse3ZhbHVlOlUs''@;'; put 'put ''ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpZW1hdPVUsWX1mdW5jdGlvbiBFKFkpe3ZhciBYPWZ1bmN0aW9uKFUscSl7aWYoIm9iamVjdCIhPXR5cGVvZiBVfHxudWxsPT09VSlyZXR1cm4gVTt2YXIgZWU9VVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWVlKXt2YXIgdGU9ZWUuY2FsbChVLCJzdHJpbmciKTtpZigib2JqZWN0IiE9dHlwZW9mIHRlKXJldHVybiB0ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoVSl9KFkpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgWD9YOlN0cmluZyhYKX12YXIgaj1SKDg3NjQpLkJ1ZmZlcixWPVIoMjM2MSkuaW5zcGVjdCxCPVYmJlYuY3VzdG9tfHwiaW5zcGVjdCI7TS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWSgpeyhmdW5jdGlvbihlZSx0ZSl7aWYoIShlZSBpbnN0YW5jZW9mIHRl''@;'; put 'put ''KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH12YXIgWCxVO3JldHVybiBYPVksKFU9W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVl''@;'; put 'put ''KXt2YXIgdGU9e2RhdGE6ZWUsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PXRlOnRoaXMuaGVhZD10ZSx0aGlzLnRhaWw9dGUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgdGU9e2RhdGE6ZWUsbmV4dDp0aGlzLmhl''@;'; put 'put ''YWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10ZSksdGhpcy5oZWFkPXRlLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBlZT10aGlzLmhlYWQuZGF0YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxl''@;'; put 'put ''bmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLGVlfX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10''@;'; put 'put ''aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHRlPXRoaXMuaGVhZCxvZT0iIit0ZS5kYXRhO3RlPXRlLm5leHQ7KW9lKz1lZSt0ZS5kYXRhO3JldHVybiBvZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gai5hbGxvYygwKTtm''@;'; put 'put ''b3IodmFyIGhlPWouYWxsb2NVbnNhZmUoZWU+Pj4wKSx1ZT10aGlzLmhlYWQsY2U9MDt1ZTspai5wcm90b3R5cGUuY29weS5jYWxsKHVlLmRhdGEsaGUsY2UpLGNlKz11ZS5kYXRhLmxlbmd0aCx1ZT11ZS5uZXh0O3JldHVybiBoZX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVl''@;'; put 'put ''LHRlKXt2YXIgb2U7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ob2U9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpvZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6dGU/dGhp''@;'; put 'put ''cy5fZ2V0U3RyaW5nKGVlKTp0aGlzLl9nZXRCdWZmZXIoZWUpLG9lfX0se2tleToiZmlyc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVhZC5kYXRhfX0se2tleToiX2dldFN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT10aGlzLmhlYWQsb2U9MSxzZT10ZS5kYXRh''@;'; put 'put ''O2ZvcihlZS09c2UubGVuZ3RoO3RlPXRlLm5leHQ7KXt2YXIgaGU9dGUuZGF0YSx1ZT1lZT5oZS5sZW5ndGg/aGUubGVuZ3RoOmVlO2lmKHNlKz11ZT09PWhlLmxlbmd0aD9oZTpoZS5zbGljZSgwLGVlKSwwPT0oZWUtPXVlKSl7dWU9PT1oZS5sZW5ndGg/KCsrb2UsdGhpcy5oZWFkPXRlLm5l''@;'; put 'put ''eHQ/dGUubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD10ZSx0ZS5kYXRhPWhlLnNsaWNlKHVlKSk7YnJlYWt9KytvZX1yZXR1cm4gdGhpcy5sZW5ndGgtPW9lLHNlfX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciB0ZT1qLmFsbG9jVW5zYWZlKGVlKSxv''@;'; put 'put ''ZT10aGlzLmhlYWQsc2U9MTtmb3Iob2UuZGF0YS5jb3B5KHRlKSxlZS09b2UuZGF0YS5sZW5ndGg7b2U9b2UubmV4dDspe3ZhciBoZT1vZS5kYXRhLHVlPWVlPmhlLmxlbmd0aD9oZS5sZW5ndGg6ZWU7aWYoaGUuY29weSh0ZSx0ZS5sZW5ndGgtZWUsMCx1ZSksMD09KGVlLT11ZSkpe3VlPT09''@;'; put 'put ''aGUubGVuZ3RoPygrK3NlLHRoaXMuaGVhZD1vZS5uZXh0P29lLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9b2Usb2UuZGF0YT1oZS5zbGljZSh1ZSkpO2JyZWFrfSsrc2V9cmV0dXJuIHRoaXMubGVuZ3RoLT1zZSx0ZX19LHtrZXk6Qix2YWx1ZTpmdW5jdGlvbihlZSx0ZSl7cmV0''@;'; put 'put ''dXJuIFYodGhpcyxLKEsoe30sdGUpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pJiZmdW5jdGlvbiBrKFksWCl7Zm9yKHZhciBVPTA7VTxYLmxlbmd0aDtVKyspe3ZhciBxPVhbVV07cS5lbnVtZXJhYmxlPXEuZW51bWVyYWJsZXx8ITEscS5jb25maWd1cmFibGU9ITAsInZh''@;'; put 'put ''bHVlImluIHEmJihxLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxFKHEua2V5KSxxKX19KFgucHJvdG90eXBlLFUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFl9KCl9LDExOTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgej1SKDQxNTUpO2Z1bmN0aW9uIEsoRSxqKXtrKEUsaiksSShFKX1mdW5jdGlvbiBJKEUpe0UuX3dyaXRhYmxlU3RhdGUmJiFFLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8RS5fcmVhZGFibGVTdGF0ZSYmIUUuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxFLmVtaXQoImNsb3NlIil9''@;'; put 'put ''ZnVuY3Rpb24gayhFLGope0UuZW1pdCgiZXJyb3IiLGopfU0uZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihFLGope3ZhciBWPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oaj9qKEUpOkUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsei5uZXh0VGljayhrLHRoaXMsRSkpOnoubmV4dFRpY2soayx0aGlz''@;'; put 'put ''LEUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koRXx8bnVsbCxmdW5jdGlvbihYKXshaiYmWD9W''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlP1YuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3oubmV4dFRpY2soSSxWKTooVi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsei5uZXh0VGljayhLLFYsWCkpOnoubmV4dFRpY2soSyxWLFgpOmo/KHoubmV4dFRpY2soSSxWKSxqKFgpKTp6Lm5leHRU''@;'; put 'put ''aWNrKEksVil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENh''@;'; put 'put ''bGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbihFLGope3ZhciBWPUUuX3JlYWRhYmxlU3RhdGUs''@;'; put 'put ''Qj1FLl93cml0YWJsZVN0YXRlO1YmJlYuYXV0b0Rlc3Ryb3l8fEImJkIuYXV0b0Rlc3Ryb3k/RS5kZXN0cm95KGopOkUuZW1pdCgiZXJyb3IiLGopfX19LDg2MTA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rp''@;'; put 'put ''b24gSygpe31NLmV4cG9ydHM9ZnVuY3Rpb24gSShrLEUsail7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEUpcmV0dXJuIEkoayxudWxsLEUpO3ZhciBoZSx1ZTtFfHwoRT17fSksaGU9anx8Syx1ZT0hMSxqPWZ1bmN0aW9uKCl7aWYoIXVlKXt1ZT0hMDtmb3IodmFyIGNlPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGgsRz1uZXcgQXJyYXkoY2UpLGI9MDtiPGNlO2IrKylHW2JdPWFyZ3VtZW50c1tiXTtoZS5hcHBseSh0aGlzLEcpfX07dmFyIFY9RS5yZWFkYWJsZXx8ITEhPT1FLnJlYWRhYmxlJiZrLnJlYWRhYmxlLEI9RS53cml0YWJsZXx8ITEhPT1FLndyaXRhYmxlJiZrLndyaXRhYmxlLFk9ZnVuY3Rp''@;'; put 'put ''b24oKXtrLndyaXRhYmxlfHxVKCl9LFg9ay5fd3JpdGFibGVTdGF0ZSYmay5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Qj0hMSxYPSEwLFZ8fGouY2FsbChrKX0scT1rLl9yZWFkYWJsZVN0YXRlJiZrLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsZWU9ZnVuY3Rpb24o''@;'; put 'put ''KXtWPSExLHE9ITAsQnx8ai5jYWxsKGspfSx0ZT1mdW5jdGlvbihoZSl7ai5jYWxsKGssaGUpfSxvZT1mdW5jdGlvbigpe3ZhciBoZTtyZXR1cm4gViYmIXE/KGsuX3JlYWRhYmxlU3RhdGUmJmsuX3JlYWRhYmxlU3RhdGUuZW5kZWR8fChoZT1uZXcgeiksai5jYWxsKGssaGUpKTpCJiYhWD8o''@;'; put 'put ''ay5fd3JpdGFibGVTdGF0ZSYmay5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KGhlPW5ldyB6KSxqLmNhbGwoayxoZSkpOnZvaWQgMH0sc2U9ZnVuY3Rpb24oKXtrLnJlcS5vbigiZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgaGUuYWJvcnR9KGspPyhrLm9uKCJjb21wbGV0ZSIsVSksay5vbigiYWJvcnQiLG9lKSxrLnJlcT9zZSgpOmsub24oInJlcXVlc3QiLHNlKSk6QiYmIWsuX3dyaXRhYmxlU3RhdGUmJihrLm9uKCJlbmQiLFkpLGsub24oImNsb3NlIixZKSksay5vbigiZW5kIixlZSksay5vbigiZmlu''@;'; put 'put ''aXNoIixVKSwhMSE9PUUuZXJyb3ImJmsub24oImVycm9yIix0ZSksay5vbigiY2xvc2UiLG9lKSxmdW5jdGlvbigpe2sucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsb2UpLGsucmVtb3ZlTGlzdGVuZXIoInJlcXVlc3QiLHNlKSxrLnJlcSYm''@;'; put 'put ''ay5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksay5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxrLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWSksay5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxrLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGVlKSxrLnJlbW92ZUxpc3RlbmVyKCJlcnJv''@;'; put 'put ''ciIsdGUpLGsucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixvZSl9fX0sNTE2NzpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJSZWFkYWJsZS5mcm9tIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIiKX19LDk5NDY6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgeixLPVIoNDI4MSkucSxJPUsuRVJSX01JU1NJTkdfQVJHUyxrPUsuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gRShCKXtpZihCKXRocm93IEJ9ZnVuY3Rpb24gaihCKXtCKCl9ZnVuY3Rpb24gVihCLFkpe3JldHVybiBCLnBpcGUoWSl9TS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBCPWFyZ3VtZW50cy5sZW5ndGgsWT1uZXcgQXJyYXkoQiksWD0wO1g8QjtYKyspWVtYXT1hcmd1bWVudHNbWF07dmFyIFUsdGUscT0odGU9WSkubGVuZ3RoPyJmdW5jdGlvbiIhPXR5cGVvZiB0ZVt0ZS5sZW5ndGgtMV0/RTp0ZS5wb3AoKTpFO2lmKEFycmF5LmlzQXJyYXkoWVswXSkm''@;'; put 'put ''JihZPVlbMF0pLFkubGVuZ3RoPDIpdGhyb3cgbmV3IEkoInN0cmVhbXMiKTt2YXIgZWU9WS5tYXAoZnVuY3Rpb24odGUsb2Upe3ZhciBzZT1vZTxZLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihoZSx1ZSxjZSxHKXt2YXIgSCxOO0g9RyxOPSExLEc9ZnVuY3Rpb24oKXtOfHwoTj0hMCxILmFw''@;'; put 'put ''cGx5KHZvaWQgMCxhcmd1bWVudHMpKX07dmFyIGI9ITE7aGUub24oImNsb3NlIixmdW5jdGlvbigpe2I9ITB9KSx2b2lkIDA9PT16JiYoej1SKDg2MTApKSx6KGhlLHtyZWFkYWJsZTp1ZSx3cml0YWJsZTpjZX0sZnVuY3Rpb24oSCl7aWYoSClyZXR1cm4gRyhIKTtiPSEwLEcoKX0pO3ZhciBE''@;'; put 'put ''PSExO3JldHVybiBmdW5jdGlvbihIKXtpZighYiYmIUQpcmV0dXJuIEQ9ITAsZnVuY3Rpb24oTil7cmV0dXJuIE4uc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgTi5hYm9ydH0oaGUpP2hlLmFib3J0KCk6ImZ1bmN0aW9uIj09dHlwZW9mIGhlLmRlc3Ryb3k/aGUuZGVzdHJveSgpOnZv''@;'; put 'put ''aWQgRyhIfHxuZXcgaygicGlwZSIpKX19KHRlLHNlLG9lPjAsZnVuY3Rpb24oaGUpe1V8fChVPWhlKSxoZSYmZWUuZm9yRWFjaChqKSxzZXx8KGVlLmZvckVhY2goaikscShVKSl9KX0pO3JldHVybiBZLnJlZHVjZShWKX19LDI0NTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQy''@;'; put 'put ''ODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO00uZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihLLEksayxFKXt2YXIgVixqPW51bGwhPShWPUkpLmhpZ2hXYXRlck1hcms/Vi5oaWdoV2F0ZXJNYXJrOkU/VltrXTpudWxsO2lmKG51bGwhPWope2lmKCFpc0Zpbml0ZShqKXx8''@;'; put 'put ''TWF0aC5mbG9vcihqKSE9PWp8fGo8MCl0aHJvdyBuZXcgeihFP2s6ImhpZ2hXYXRlck1hcmsiLGopO3JldHVybiBNYXRoLmZsb29yKGopfXJldHVybiBLLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzooTSxPLFIpPT57TS5leHBvcnRzPVIoNzE4NykuRXZlbnRFbWl0dGVyfSw4NDczOihN''@;'; put 'put ''LE8sUik9PnsoTz1NLmV4cG9ydHM9Uig5NDgxKSkuU3RyZWFtPU8sTy5SZWFkYWJsZT1PLE8uV3JpdGFibGU9Uig0MjI5KSxPLkR1cGxleD1SKDY3NTMpLE8uVHJhbnNmb3JtPVIoNDYwNSksTy5QYXNzVGhyb3VnaD1SKDI3MjUpLE8uZmluaXNoZWQ9Uig4NjEwKSxPLnBpcGVsaW5lPVIoOTk0''@;'; put 'put ''Nil9LDc0MTg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9ZnVuY3Rpb24oTyxSKXtpZihSPVIuc3BsaXQoIjoiKVswXSwhKE89K08pKXJldHVybiExO3N3aXRjaChSKXtjYXNlImh0dHAiOmNhc2Uid3MiOnJldHVybiA4MCE9PU87Y2FzZSJodHRwcyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMh''@;'; put 'put ''PT1PO2Nhc2UiZnRwIjpyZXR1cm4gMjEhPT1PO2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT1PO2Nhc2UiZmlsZSI6cmV0dXJuITF9cmV0dXJuIDAhPT1PfX0sOTg0OihNLE8sUik9Pnt2YXIgej1SKDQxNTUpO2NvbnN0IEs9Uig5MjgyKSxJPVIoMjUyMCksaz1SKDcyMTcpO2xldCBFO3RyeXtF''@;'; put 'put ''PVIoMjg4NCl9Y2F0Y2h7fWNvbnN0IGo9e25vc29ydDohMCxzaWxlbnQ6ITB9O2xldCBWPTA7Y29uc3QgQj0id2luMzIiPT09ei5wbGF0Zm9ybSxZPWNlPT57aWYoWyJ1bmxpbmsiLCJjaG1vZCIsInN0YXQiLCJsc3RhdCIsInJtZGlyIiwicmVhZGRpciJdLmZvckVhY2goRz0+e2NlW0ddPWNl''@;'; put 'put ''W0ddfHxrW0ddLGNlW0crPSJTeW5jIl09Y2VbR118fGtbR119KSxjZS5tYXhCdXN5VHJpZXM9Y2UubWF4QnVzeVRyaWVzfHwzLGNlLmVtZmlsZVdhaXQ9Y2UuZW1maWxlV2FpdHx8MWUzLCExPT09Y2UuZ2xvYiYmKGNlLmRpc2FibGVHbG9iPSEwKSwhMCE9PWNlLmRpc2FibGVHbG9iJiZ2b2lk''@;'; put 'put ''IDA9PT1FKXRocm93IEVycm9yKCJnbG9iIGRlcGVuZGVuY3kgbm90IGZvdW5kLCBzZXQgYG9wdGlvbnMuZGlzYWJsZUdsb2IgPSB0cnVlYCBpZiBpbnRlbnRpb25hbCIpO2NlLmRpc2FibGVHbG9iPWNlLmRpc2FibGVHbG9ifHwhMSxjZS5nbG9iPWNlLmdsb2J8fGp9LFg9KGNlLEcsYik9Pnsi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgRyYmKGI9RyxHPXt9KSxLKGNlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLEsuZXF1YWwodHlwZW9mIGNlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksSy5lcXVhbCh0eXBlb2YgYiwiZnVuY3Rpb24iLCJyaW1yYWY6IGNhbGxi''@;'; put 'put ''YWNrIGZ1bmN0aW9uIHJlcXVpcmVkIiksSyhHLCJyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCIpLEsuZXF1YWwodHlwZW9mIEcsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IiksWShHKTtsZXQgRD0wLEg9bnVsbCxOPTA7Y29uc3Qg''@;'; put 'put ''Zz0oQyxTKT0+Qz9iKEMpOihOPVMubGVuZ3RoLDA9PT1OP2IoKTp2b2lkIFMuZm9yRWFjaCh2PT57Y29uc3QgcD13PT57aWYodyl7aWYoKCJFQlVTWSI9PT13LmNvZGV8fCJFTk9URU1QVFkiPT09dy5jb2RlfHwiRVBFUk0iPT09dy5jb2RlKSYmRDxHLm1heEJ1c3lUcmllcylyZXR1cm4gRCsr''@;'; put 'put ''LHNldFRpbWVvdXQoKCk9PlUodixHLHApLDEwMCpEKTtpZigiRU1GSUxFIj09PXcuY29kZSYmVjxHLmVtZmlsZVdhaXQpcmV0dXJuIHNldFRpbWVvdXQoKCk9PlUodixHLHApLFYrKyk7IkVOT0VOVCI9PT13LmNvZGUmJih3PW51bGwpfVY9MCxIPUh8fHcsMD09LS1OJiZiKEgpfTtVKHYsRyxw''@;'; put 'put ''KX0pKTtpZihHLmRpc2FibGVHbG9ifHwhRS5oYXNNYWdpYyhjZSkpcmV0dXJuIGcobnVsbCxbY2VdKTtHLmxzdGF0KGNlLChDLFMpPT57aWYoIUMpcmV0dXJuIGcobnVsbCxbY2VdKTtFKGNlLEcuZ2xvYixnKX0pfSxVPShjZSxHLGIpPT57SyhjZSksSyhHKSxLKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBiKSxHLmxzdGF0KGNlLChELEgpPT5EJiYiRU5PRU5UIj09PUQuY29kZT9iKG51bGwpOihEJiYiRVBFUk0iPT09RC5jb2RlJiZCJiZxKGNlLEcsRCxiKSxIJiZILmlzRGlyZWN0b3J5KCk/dGUoY2UsRyxELGIpOnZvaWQgRy51bmxpbmsoY2UsTj0+e2lmKE4pe2lmKCJFTk9FTlQiPT09Ti5j''@;'; put 'put ''b2RlKXJldHVybiBiKG51bGwpO2lmKCJFUEVSTSI9PT1OLmNvZGUpcmV0dXJuIEI/cShjZSxHLE4sYik6dGUoY2UsRyxOLGIpO2lmKCJFSVNESVIiPT09Ti5jb2RlKXJldHVybiB0ZShjZSxHLE4sYil9cmV0dXJuIGIoTil9KSkpfSxxPShjZSxHLGIsRCk9PntLKGNlKSxLKEcpLEsoImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEQpLEcuY2htb2QoY2UsNDM4LEg9PntIP0QoIkVOT0VOVCI9PT1ILmNvZGU/bnVsbDpiKTpHLnN0YXQoY2UsKE4sZyk9PntOP0QoIkVOT0VOVCI9PT1OLmNvZGU/bnVsbDpiKTpnLmlzRGlyZWN0b3J5KCk/dGUoY2UsRyxiLEQpOkcudW5saW5rKGNlLEQpfSl9KX0sZWU9''@;'; put 'put ''KGNlLEcsYik9PntLKGNlKSxLKEcpO3RyeXtHLmNobW9kU3luYyhjZSw0MzgpfWNhdGNoKEgpe2lmKCJFTk9FTlQiPT09SC5jb2RlKXJldHVybjt0aHJvdyBifWxldCBEO3RyeXtEPUcuc3RhdFN5bmMoY2UpfWNhdGNoKEgpe2lmKCJFTk9FTlQiPT09SC5jb2RlKXJldHVybjt0aHJvdyBifUQu''@;'; put 'put ''aXNEaXJlY3RvcnkoKT9oZShjZSxHLGIpOkcudW5saW5rU3luYyhjZSl9LHRlPShjZSxHLGIsRCk9PntLKGNlKSxLKEcpLEsoImZ1bmN0aW9uIj09dHlwZW9mIEQpLEcucm1kaXIoY2UsSD0+eyFIfHwiRU5PVEVNUFRZIiE9PUguY29kZSYmIkVFWElTVCIhPT1ILmNvZGUmJiJFUEVSTSIhPT1I''@;'; put 'put ''LmNvZGU/RChIJiYiRU5PVERJUiI9PT1ILmNvZGU/YjpIKTpvZShjZSxHLEQpfSl9LG9lPShjZSxHLGIpPT57SyhjZSksSyhHKSxLKCJmdW5jdGlvbiI9PXR5cGVvZiBiKSxHLnJlYWRkaXIoY2UsKEQsSCk9PntpZihEKXJldHVybiBiKEQpO2xldCBOLGc9SC5sZW5ndGg7aWYoMD09PWcpcmV0''@;'; put 'put ''dXJuIEcucm1kaXIoY2UsYik7SC5mb3JFYWNoKEM9PntYKEkuam9pbihjZSxDKSxHLFM9PntpZighTilyZXR1cm4gUz9iKE49Uyk6dm9pZCgwPT0tLWcmJkcucm1kaXIoY2UsYikpfSl9KX0pfSxzZT0oY2UsRyk9PntsZXQgYjtpZihZKEc9R3x8e30pLEsoY2UsInJpbXJhZjogbWlzc2luZyBw''@;'; put 'put ''YXRoIiksSy5lcXVhbCh0eXBlb2YgY2UsInN0cmluZyIsInJpbXJhZjogcGF0aCBzaG91bGQgYmUgYSBzdHJpbmciKSxLKEcsInJpbXJhZjogbWlzc2luZyBvcHRpb25zIiksSy5lcXVhbCh0eXBlb2YgRywib2JqZWN0IiwicmltcmFmOiBvcHRpb25zIHNob3VsZCBiZSBvYmplY3QiKSxHLmRp''@;'; put 'put ''c2FibGVHbG9ifHwhRS5oYXNNYWdpYyhjZSkpYj1bY2VdO2Vsc2UgdHJ5e0cubHN0YXRTeW5jKGNlKSxiPVtjZV19Y2F0Y2h7Yj1FLnN5bmMoY2UsRy5nbG9iKX1pZihiLmxlbmd0aClmb3IobGV0IEQ9MDtEPGIubGVuZ3RoO0QrKyl7Y29uc3QgSD1iW0RdO2xldCBOO3RyeXtOPUcubHN0YXRT''@;'; put 'put ''eW5jKEgpfWNhdGNoKGcpe2lmKCJFTk9FTlQiPT09Zy5jb2RlKXJldHVybjsiRVBFUk0iPT09Zy5jb2RlJiZCJiZlZShILEcsZyl9dHJ5e04mJk4uaXNEaXJlY3RvcnkoKT9oZShILEcsbnVsbCk6Ry51bmxpbmtTeW5jKEgpfWNhdGNoKGcpe2lmKCJFTk9FTlQiPT09Zy5jb2RlKXJldHVybjtp''@;'; put 'put ''ZigiRVBFUk0iPT09Zy5jb2RlKXJldHVybiBCP2VlKEgsRyxnKTpoZShILEcsZyk7aWYoIkVJU0RJUiIhPT1nLmNvZGUpdGhyb3cgZztoZShILEcsZyl9fX0saGU9KGNlLEcsYik9PntLKGNlKSxLKEcpO3RyeXtHLnJtZGlyU3luYyhjZSl9Y2F0Y2goRCl7aWYoIkVOT0VOVCI9PT1ELmNvZGUp''@;'; put 'put ''cmV0dXJuO2lmKCJFTk9URElSIj09PUQuY29kZSl0aHJvdyBiOyJFTk9URU1QVFkiIT09RC5jb2RlJiYiRUVYSVNUIiE9PUQuY29kZSYmIkVQRVJNIiE9PUQuY29kZXx8dWUoY2UsRyl9fSx1ZT0oY2UsRyk9PntLKGNlKSxLKEcpLEcucmVhZGRpclN5bmMoY2UpLmZvckVhY2goSD0+c2UoSS5q''@;'; put 'put ''b2luKGNlLEgpLEcpKTtjb25zdCBiPUI/MTAwOjE7bGV0IEQ9MDtmb3IoOzspe2xldCBIPSEwO3RyeXtjb25zdCBOPUcucm1kaXJTeW5jKGNlLEcpO3JldHVybiBIPSExLE59ZmluYWxseXtpZigrK0Q8YiYmSCljb250aW51ZX19fTtNLmV4cG9ydHM9WCxYLnN5bmM9c2V9LDk3ODU6KE0sTyxS''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDg3NjQpLkJ1ZmZlcixLPVIoNTcxNyksST1SKDMzNDkpLGs9bmV3IEFycmF5KDE2KSxFPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDks''@;'; put 'put ''MTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGo9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0''@;'; put 'put ''LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwx''@;'; put 'put ''NSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4''@;'; put 'put ''LDUsNl0sQj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwx''@;'; put 'put ''NSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sWT1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxYPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIFUoKXtJLmNhbGwo''@;'; put 'put ''dGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHEodWUsY2Upe3JldHVybiB1ZTw8Y2V8dWU+Pj4zMi1jZX1mdW5jdGlvbiBlZSh1ZSxjZSxH''@;'; put 'put ''LGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlXkdeYikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIHRlKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoY2UmR3x+Y2UmYikrSCtOfDAsZykrRHwwfWZ1bmN0aW9uIG9lKHVlLGNlLEcsYixELEgsTixnKXtyZXR1cm4gcSh1ZSsoKGNlfH5H''@;'; put 'put ''KV5iKStIK058MCxnKStEfDB9ZnVuY3Rpb24gc2UodWUsY2UsRyxiLEQsSCxOLGcpe3JldHVybiBxKHVlKyhjZSZifEcmfmIpK0grTnwwLGcpK0R8MH1mdW5jdGlvbiBoZSh1ZSxjZSxHLGIsRCxILE4sZyl7cmV0dXJuIHEodWUrKGNlXihHfH5iKSkrSCtOfDAsZykrRHwwfUsoVSxJKSxVLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB1ZT1rLGNlPTA7Y2U8MTY7KytjZSl1ZVtjZV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpjZSk7Zm9yKHZhciBHPTB8dGhpcy5fYSxiPTB8dGhpcy5fYixEPTB8dGhpcy5fYyxIPTB8dGhpcy5fZCxOPTB8dGhpcy5fZSxnPTB8''@;'; put 'put ''dGhpcy5fYSxDPTB8dGhpcy5fYixTPTB8dGhpcy5fYyx2PTB8dGhpcy5fZCxwPTB8dGhpcy5fZSx3PTA7dzw4MDt3Kz0xKXt2YXIgSixuZTt3PDE2PyhKPWVlKEcsYixELEgsTix1ZVtFW3ddXSxZWzBdLFZbd10pLG5lPWhlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzBdLEJbd10pKTp3PDMyPyhK''@;'; put 'put ''PXRlKEcsYixELEgsTix1ZVtFW3ddXSxZWzFdLFZbd10pLG5lPXNlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzFdLEJbd10pKTp3PDQ4PyhKPW9lKEcsYixELEgsTix1ZVtFW3ddXSxZWzJdLFZbd10pLG5lPW9lKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzJdLEJbd10pKTp3PDY0PyhKPXNlKEcsYixE''@;'; put 'put ''LEgsTix1ZVtFW3ddXSxZWzNdLFZbd10pLG5lPXRlKGcsQyxTLHYscCx1ZVtqW3ddXSxYWzNdLEJbd10pKTooSj1oZShHLGIsRCxILE4sdWVbRVt3XV0sWVs0XSxWW3ddKSxuZT1lZShnLEMsUyx2LHAsdWVbalt3XV0sWFs0XSxCW3ddKSksRz1OLE49SCxIPXEoRCwxMCksRD1iLGI9SixnPXAs''@;'; put 'put ''cD12LHY9cShTLDEwKSxTPUMsQz1uZX12YXIgZGU9dGhpcy5fYitEK3Z8MDt0aGlzLl9iPXRoaXMuX2MrSCtwfDAsdGhpcy5fYz10aGlzLl9kK04rZ3wwLHRoaXMuX2Q9dGhpcy5fZStHK0N8MCx0aGlzLl9lPXRoaXMuX2ErYitTfDAsdGhpcy5fYT1kZX0sVS5wcm90b3R5cGUuX2RpZ2VzdD1m''@;'; put 'put ''dW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgw''@;'; put 'put ''LHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciB1ZT16LmFsbG9jP3ouYWxsb2MoMjApOm5ldyB6KDIw''@;'; put 'put ''KTtyZXR1cm4gdWUud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksdWUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLHVlLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSx1ZX0sTS5leHBvcnRzPVV9LDk1''@;'; put 'put ''MDk6KE0sTyxSKT0+e3ZhciB6PVIoODc2NCksSz16LkJ1ZmZlcjtmdW5jdGlvbiBJKEUsail7Zm9yKHZhciBWIGluIEUpaltWXT1FW1ZdfWZ1bmN0aW9uIGsoRSxqLFYpe3JldHVybiBLKEUsaixWKX1LLmZyb20mJksuYWxsb2MmJksuYWxsb2NVbnNhZmUmJksuYWxsb2NVbnNhZmVTbG93P00u''@;'; put 'put ''ZXhwb3J0cz16OihJKHosTyksTy5CdWZmZXI9ayksay5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShLLnByb3RvdHlwZSksSShLLGspLGsuZnJvbT1mdW5jdGlvbihFLGosVil7aWYoIm51bWJlciI9PXR5cGVvZiBFKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEg''@;'; put 'put ''bnVtYmVyIik7cmV0dXJuIEsoRSxqLFYpfSxrLmFsbG9jPWZ1bmN0aW9uKEUsaixWKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBCPUsoRSk7cmV0dXJuIHZvaWQgMCE9PWo/InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBWP0IuZmlsbChqLFYpOkIuZmlsbChqKTpCLmZpbGwoMCksQn0say5hbGxvY1Vuc2FmZT1mdW5jdGlvbihFKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBLKEUpfSxrLmFsbG9jVW5zYWZlU2xv''@;'; put 'put ''dz1mdW5jdGlvbihFKXtpZigibnVtYmVyIiE9dHlwZW9mIEUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiB6LlNsb3dCdWZmZXIoRSl9fSwyMzk5OihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHosSz1SKDQxNTUpLEk9Uig4NzY0KSxr''@;'; put 'put ''PUkuQnVmZmVyLEU9e307Zm9yKHogaW4gSSlJLmhhc093blByb3BlcnR5KHopJiYiU2xvd0J1ZmZlciIhPT16JiYiQnVmZmVyIiE9PXomJihFW3pdPUlbel0pO3ZhciBqPUUuQnVmZmVyPXt9O2Zvcih6IGluIGspay5oYXNPd25Qcm9wZXJ0eSh6KSYmImFsbG9jVW5zYWZlIiE9PXomJiJhbGxv''@;'; put 'put ''Y1Vuc2FmZVNsb3ciIT09eiYmKGpbel09a1t6XSk7aWYoRS5CdWZmZXIucHJvdG90eXBlPWsucHJvdG90eXBlLGouZnJvbSYmai5mcm9tIT09VWludDhBcnJheS5mcm9tfHwoai5mcm9tPWZ1bmN0aW9uKFYsQixZKXtpZigibnVtYmVyIj09dHlwZW9mIFYpdGhyb3cgbmV3IFR5cGVFcnJvcign''@;'; put 'put ''VGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVik7aWYoViYmdm9pZCAwPT09Vi5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5n''@;'; put 'put ''LCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVik7cmV0dXJuIGsoVixCLFkpfSksai5hbGxvY3x8KGouYWxsb2M9ZnVuY3Rpb24oVixCLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgVil0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVik7aWYoVjwwfHxWPj0yMTQ3NDgzNjQ4KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNp''@;'; put 'put ''emUiJyk7dmFyIFg9ayhWKTtyZXR1cm4gQiYmMCE9PUIubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgWT9YLmZpbGwoQixZKTpYLmZpbGwoQik6WC5maWxsKDApLFh9KSwhRS5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtFLmtTdHJpbmdNYXhMZW5ndGg9Sy5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5n''@;'; put 'put ''TWF4TGVuZ3RofWNhdGNoe31FLmNvbnN0YW50c3x8KEUuY29uc3RhbnRzPXtNQVhfTEVOR1RIOkUua01heExlbmd0aH0sRS5rU3RyaW5nTWF4TGVuZ3RoJiYoRS5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9RS5rU3RyaW5nTWF4TGVuZ3RoKSksTS5leHBvcnRzPUV9LDQxODk6KE0sTyxS''@;'; put 'put ''KT0+e3ZhciB6PVIoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEsoSSxrKXt0aGlzLl9ibG9jaz16LmFsbG9jKEkpLHRoaXMuX2ZpbmFsU2l6ZT1rLHRoaXMuX2Jsb2NrU2l6ZT1JLHRoaXMuX2xlbj0wfUsucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihJLGspeyJzdHJpbmciPT10eXBlb2YgSSYm''@;'; put 'put ''KEk9ei5mcm9tKEksaz1rfHwidXRmOCIpKTtmb3IodmFyIEU9dGhpcy5fYmxvY2ssaj10aGlzLl9ibG9ja1NpemUsVj1JLmxlbmd0aCxCPXRoaXMuX2xlbixZPTA7WTxWOyl7Zm9yKHZhciBYPUIlaixVPU1hdGgubWluKFYtWSxqLVgpLHE9MDtxPFU7cSsrKUVbWCtxXT1JW1krcV07WSs9VSwo''@;'; put 'put ''Qis9VSklaj09MCYmdGhpcy5fdXBkYXRlKEUpfXJldHVybiB0aGlzLl9sZW4rPVYsdGhpc30sSy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEkpe3ZhciBrPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tba109MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxrKzEpLGs+PXRo''@;'; put 'put ''aXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIEU9OCp0aGlzLl9sZW47aWYoRTw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKEUsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIGo9KDQyOTQ5Njcy''@;'; put 'put ''OTUmRSk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKEUtaikvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShqLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBCPXRoaXMuX2hhc2goKTty''@;'; put 'put ''ZXR1cm4gST9CLnRvU3RyaW5nKEkpOkJ9LEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSxNLmV4cG9ydHM9S30sOTA3MjooTSxPLFIpPT57dmFyIHo9TS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKEspe0s9Sy50b0xvd2VyQ2FzZSgpO3ZhciBJPXpbS107aWYoIUkpdGhyb3cgbmV3IEVycm9yKEsrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEl9O3ouc2hhPVIoNDQ0OCksei5zaGExPVIoODMzNiksei5zaGEyMjQ9Uig4NDMy''@;'; put 'put ''KSx6LnNoYTI1Nj1SKDc0OTkpLHouc2hhMzg0PVIoMTY4Niksei5zaGE1MTI9Uig3ODE2KX0sNDQ0ODooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sRT1uZXcg''@;'; put 'put ''QXJyYXkoODApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFYoWSl7cmV0dXJuIFk8PDMwfFk+Pj4yfWZ1bmN0aW9uIEIoWSxYLFUscSl7cmV0dXJuIDA9PT1ZP1gmVXx+WCZxOjI9PT1ZP1gmVXxYJnF8VSZxOlheVV5xfXoo''@;'; put 'put ''aixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxqLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0''@;'; put 'put ''aW9uKFkpe2Zvcih2YXIgWCxVPXRoaXMuX3cscT0wfHRoaXMuX2EsZWU9MHx0aGlzLl9iLHRlPTB8dGhpcy5fYyxvZT0wfHRoaXMuX2Qsc2U9MHx0aGlzLl9lLGhlPTA7aGU8MTY7KytoZSlVW2hlXT1ZLnJlYWRJbnQzMkJFKDQqaGUpO2Zvcig7aGU8ODA7KytoZSlVW2hlXT1VW2hlLTNdXlVb''@;'; put 'put ''aGUtOF1eVVtoZS0xNF1eVVtoZS0xNl07Zm9yKHZhciB1ZT0wO3VlPDgwOysrdWUpe3ZhciBjZT1+fih1ZS8yMCksRz0wfCgoWD1xKTw8NXxYPj4+MjcpK0IoY2UsZWUsdGUsb2UpK3NlK1VbdWVdK2tbY2VdO3NlPW9lLG9lPXRlLHRlPVYoZWUpLGVlPXEscT1HfXRoaXMuX2E9cSt0aGlzLl9h''@;'; put 'put ''fDAsdGhpcy5fYj1lZSt0aGlzLl9ifDAsdGhpcy5fYz10ZSt0aGlzLl9jfDAsdGhpcy5fZD1vZSt0aGlzLl9kfDAsdGhpcy5fZT1zZSt0aGlzLl9lfDB9LGoucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFk9SS5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIFkud3JpdGVJbnQzMkJFKDB8''@;'; put 'put ''dGhpcy5fYSwwKSxZLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksWS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLFkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksWS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxZfSxNLmV4cG9ydHM9an0sODMzNjooTSxPLFIpPT57dmFyIHo9Uig1''@;'; put 'put ''NzE3KSxLPVIoNDE4OSksST1SKDk1MDkpLkJ1ZmZlcixrPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sRT1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFYoWCl7''@;'; put 'put ''cmV0dXJuIFg8PDV8WD4+PjI3fWZ1bmN0aW9uIEIoWCl7cmV0dXJuIFg8PDMwfFg+Pj4yfWZ1bmN0aW9uIFkoWCxVLHEsZWUpe3JldHVybiAwPT09WD9VJnF8flUmZWU6Mj09PVg/VSZxfFUmZWV8cSZlZTpVXnFeZWV9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCl7Zm9yKHZhciBVLHE9dGhpcy5fdyxlZT0wfHRoaXMuX2Es''@;'; put 'put ''dGU9MHx0aGlzLl9iLG9lPTB8dGhpcy5fYyxzZT0wfHRoaXMuX2QsaGU9MHx0aGlzLl9lLHVlPTA7dWU8MTY7Kyt1ZSlxW3VlXT1YLnJlYWRJbnQzMkJFKDQqdWUpO2Zvcig7dWU8ODA7Kyt1ZSlxW3VlXT0oVT1xW3VlLTNdXnFbdWUtOF1ecVt1ZS0xNF1ecVt1ZS0xNl0pPDwxfFU+Pj4zMTtm''@;'; put 'put ''b3IodmFyIGNlPTA7Y2U8ODA7KytjZSl7dmFyIEc9fn4oY2UvMjApLGI9VihlZSkrWShHLHRlLG9lLHNlKStoZStxW2NlXStrW0ddfDA7aGU9c2Usc2U9b2Usb2U9Qih0ZSksdGU9ZWUsZWU9Yn10aGlzLl9hPWVlK3RoaXMuX2F8MCx0aGlzLl9iPXRlK3RoaXMuX2J8MCx0aGlzLl9jPW9lK3Ro''@;'; put 'put ''aXMuX2N8MCx0aGlzLl9kPXNlK3RoaXMuX2R8MCx0aGlzLl9lPWhlK3RoaXMuX2V8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWD1JLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gWC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLFgud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0''@;'; put 'put ''KSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksWC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxYLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFh9LE0uZXhwb3J0cz1qfSw4NDMyOihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig3NDk5KSxJPVIoNDE4OSksaz1SKDk1MDkpLkJ1''@;'; put 'put ''ZmZlcixFPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9RSxJLmNhbGwodGhpcyw2NCw1Nil9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEy''@;'; put 'put ''NzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVj1rLmFsbG9jVW5zYWZlKDI4KTtyZXR1''@;'; put 'put ''cm4gVi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxWLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFYud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVi53''@;'; put 'put ''cml0ZUludDMyQkUodGhpcy5fZywyNCksVn0sTS5leHBvcnRzPWp9LDc0OTk6KE0sTyxSKT0+e3ZhciB6PVIoNTcxNyksSz1SKDQxODkpLEk9Uig5NTA5KS5CdWZmZXIsaz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5Mywy''@;'; put 'put ''NDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1''@;'; put 'put ''MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAw''@;'; put 'put ''LDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgx''@;'; put 'put ''Mzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxFPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gaigpe3RoaXMuaW5p''@;'; put 'put ''dCgpLHRoaXMuX3c9RSxLLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gVihxLGVlLHRlKXtyZXR1cm4gdGVecSYoZWVedGUpfWZ1bmN0aW9uIEIocSxlZSx0ZSl7cmV0dXJuIHEmZWV8dGUmKHF8ZWUpfWZ1bmN0aW9uIFkocSl7cmV0dXJuKHE+Pj4yfHE8PDMwKV4ocT4+PjEzfHE8PDE5KV4o''@;'; put 'put ''cT4+PjIyfHE8PDEwKX1mdW5jdGlvbiBYKHEpe3JldHVybihxPj4+NnxxPDwyNileKHE+Pj4xMXxxPDwyMSleKHE+Pj4yNXxxPDw3KX1mdW5jdGlvbiBVKHEpe3JldHVybihxPj4+N3xxPDwyNSleKHE+Pj4xOHxxPDwxNClecT4+PjN9eihqLEspLGoucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9''@;'; put 'put ''LGoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7Zm9yKHZhciBlZSx0ZT10aGlzLl93LG9lPTB8dGhpcy5fYSxzZT0wfHRoaXMuX2IsaGU9MHx0aGlzLl9jLHVlPTB8dGhpcy5fZCxjZT0wfHRoaXMuX2UsRz0wfHRoaXMuX2YsYj0wfHRoaXMuX2csRD0wfHRoaXMuX2gsSD0wO0g8MTY7''@;'; put 'put ''KytIKXRlW0hdPXEucmVhZEludDMyQkUoNCpIKTtmb3IoO0g8NjQ7KytIKXRlW0hdPTB8KCgoZWU9dGVbSC0yXSk+Pj4xN3xlZTw8MTUpXihlZT4+PjE5fGVlPDwxMyleZWU+Pj4xMCkrdGVbSC03XStVKHRlW0gtMTVdKSt0ZVtILTE2XTtmb3IodmFyIE49MDtOPDY0OysrTil7dmFyIGc9RCtY''@;'; put 'put ''KGNlKStWKGNlLEcsYikra1tOXSt0ZVtOXXwwLEM9WShvZSkrQihvZSxzZSxoZSl8MDtEPWIsYj1HLEc9Y2UsY2U9dWUrZ3wwLHVlPWhlLGhlPXNlLHNlPW9lLG9lPWcrQ3wwfXRoaXMuX2E9b2UrdGhpcy5fYXwwLHRoaXMuX2I9c2UrdGhpcy5fYnwwLHRoaXMuX2M9aGUrdGhpcy5fY3wwLHRo''@;'; put 'put ''aXMuX2Q9dWUrdGhpcy5fZHwwLHRoaXMuX2U9Y2UrdGhpcy5fZXwwLHRoaXMuX2Y9Ryt0aGlzLl9mfDAsdGhpcy5fZz1iK3RoaXMuX2d8MCx0aGlzLl9oPUQrdGhpcy5faHwwfSxqLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBxPUkuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBxLndy''@;'; put 'put ''aXRlSW50MzJCRSh0aGlzLl9hLDApLHEud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCkscS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxxLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxxLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxxLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxxLndyaXRlSW50''@;'; put 'put ''MzJCRSh0aGlzLl9nLDI0KSxxLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxxfSxNLmV4cG9ydHM9an0sMTY4NjooTSxPLFIpPT57dmFyIHo9Uig1NzE3KSxLPVIoNzgxNiksST1SKDQxODkpLGs9Uig5NTA5KS5CdWZmZXIsRT1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBqKCl7dGhpcy5pbml0''@;'; put 'put ''KCksdGhpcy5fdz1FLEkuY2FsbCh0aGlzLDEyOCwxMTIpfXooaixLKSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0x''@;'; put 'put ''NzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4''@;'; put 'put ''NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVj1rLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBCKFksWCxVKXtWLndyaXRlSW50MzJCRShZLFUpLFYud3Jp''@;'; put 'put ''dGVJbnQzMkJFKFgsVSs0KX1yZXR1cm4gQih0aGlzLl9haCx0aGlzLl9hbCwwKSxCKHRoaXMuX2JoLHRoaXMuX2JsLDgpLEIodGhpcy5fY2gsdGhpcy5fY2wsMTYpLEIodGhpcy5fZGgsdGhpcy5fZGwsMjQpLEIodGhpcy5fZWgsdGhpcy5fZWwsMzIpLEIodGhpcy5fZmgsdGhpcy5fZmwsNDAp''@;'; put 'put ''LFZ9LE0uZXhwb3J0cz1qfSw3ODE2OihNLE8sUik9Pnt2YXIgej1SKDU3MTcpLEs9Uig0MTg5KSxJPVIoOTUwOSkuQnVmZmVyLGs9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2''@;'; put 'put ''MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAz''@;'; put 'put ''MDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4''@;'; put 'put ''LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwz''@;'; put 'put ''MjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgw''@;'; put 'put ''NTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMw''@;'; put 'put ''ODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2''@;'; put 'put ''NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1''@;'; put 'put ''NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2''@;'; put 'put ''NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUy''@;'; put 'put ''MTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxFPW5ldyBBcnJheSgxNjAp''@;'; put 'put ''O2Z1bmN0aW9uIGooKXt0aGlzLmluaXQoKSx0aGlzLl93PUUsSy5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gVihzZSxoZSx1ZSl7cmV0dXJuIHVlXnNlJihoZV51ZSl9ZnVuY3Rpb24gQihzZSxoZSx1ZSl7cmV0dXJuIHNlJmhlfHVlJihzZXxoZSl9ZnVuY3Rpb24gWShzZSxoZSl7cmV0''@;'; put 'put ''dXJuKHNlPj4+Mjh8aGU8PDQpXihoZT4+PjJ8c2U8PDMwKV4oaGU+Pj43fHNlPDwyNSl9ZnVuY3Rpb24gWChzZSxoZSl7cmV0dXJuKHNlPj4+MTR8aGU8PDE4KV4oc2U+Pj4xOHxoZTw8MTQpXihoZT4+Pjl8c2U8PDIzKX1mdW5jdGlvbiBVKHNlLGhlKXtyZXR1cm4oc2U+Pj4xfGhlPDwzMSle''@;'; put 'put ''KHNlPj4+OHxoZTw8MjQpXnNlPj4+N31mdW5jdGlvbiBxKHNlLGhlKXtyZXR1cm4oc2U+Pj4xfGhlPDwzMSleKHNlPj4+OHxoZTw8MjQpXihzZT4+Pjd8aGU8PDI1KX1mdW5jdGlvbiBlZShzZSxoZSl7cmV0dXJuKHNlPj4+MTl8aGU8PDEzKV4oaGU+Pj4yOXxzZTw8Mylec2U+Pj42fWZ1bmN0''@;'; put 'put ''aW9uIHRlKHNlLGhlKXtyZXR1cm4oc2U+Pj4xOXxoZTw8MTMpXihoZT4+PjI5fHNlPDwzKV4oc2U+Pj42fGhlPDwyNil9ZnVuY3Rpb24gb2Uoc2UsaGUpe3JldHVybiBzZT4+PjA8aGU+Pj4wPzE6MH16KGosSyksai5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0x''@;'; put 'put ''Nzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1''@;'; put 'put ''NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LGoucHJvdG90eXBlLl91cGRh''@;'; put 'put ''dGU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgaGU9dGhpcy5fdyx1ZT0wfHRoaXMuX2FoLGNlPTB8dGhpcy5fYmgsRz0wfHRoaXMuX2NoLGI9MHx0aGlzLl9kaCxEPTB8dGhpcy5fZWgsSD0wfHRoaXMuX2ZoLE49MHx0aGlzLl9naCxnPTB8dGhpcy5faGgsQz0wfHRoaXMuX2FsLFM9MHx0aGlzLl9i''@;'; put 'put ''bCx2PTB8dGhpcy5fY2wscD0wfHRoaXMuX2RsLHc9MHx0aGlzLl9lbCxKPTB8dGhpcy5fZmwsbmU9MHx0aGlzLl9nbCxkZT0wfHRoaXMuX2hsLGZlPTA7ZmU8MzI7ZmUrPTIpaGVbZmVdPXNlLnJlYWRJbnQzMkJFKDQqZmUpLGhlW2ZlKzFdPXNlLnJlYWRJbnQzMkJFKDQqZmUrNCk7Zm9yKDtm''@;'; put 'put ''ZTwxNjA7ZmUrPTIpe3ZhciB4ZT1oZVtmZS0zMF0sTGU9aGVbZmUtMzArMV0sRmU9VSh4ZSxMZSksT2U9cShMZSx4ZSksamU9ZWUoeGU9aGVbZmUtNF0sTGU9aGVbZmUtNCsxXSksV2U9dGUoTGUseGUpLEplPWhlW2ZlLTMyXSxsdD1oZVtmZS0zMisxXSxQZT1PZStoZVtmZS0xNCsxXXwwLGJl''@;'; put 'put ''PUZlK2hlW2ZlLTE0XStvZShQZSxPZSl8MDtiZT0oYmU9YmUramUrb2UoUGU9UGUrV2V8MCxXZSl8MCkrSmUrb2UoUGU9UGUrbHR8MCxsdCl8MCxoZVtmZV09YmUsaGVbZmUrMV09UGV9Zm9yKHZhciBBZT0wO0FlPDE2MDtBZSs9Mil7YmU9aGVbQWVdLFBlPWhlW0FlKzFdO3ZhciBUZT1CKHVl''@;'; put 'put ''LGNlLEcpLHFlPUIoQyxTLHYpLFhlPVkodWUsQyksVWU9WShDLHVlKSxodD1YKEQsdyksTWU9WCh3LEQpLERlPWtbQWVdLHplPWtbQWUrMV0saXQ9VihELEgsTiksdXQ9Vih3LEosbmUpLE10PWRlK01lfDAsSHQ9ZytodCtvZShNdCxkZSl8MDtIdD0oSHQ9KEh0PUh0K2l0K29lKE10PU10K3V0''@;'; put 'put ''fDAsdXQpfDApK0RlK29lKE10PU10K3plfDAsemUpfDApK2JlK29lKE10PU10K1BlfDAsUGUpfDA7dmFyIFB0PVVlK3FlfDAsb249WGUrVGUrb2UoUHQsVWUpfDA7Zz1OLGRlPW5lLE49SCxuZT1KLEg9RCxKPXcsRD1iK0h0K29lKHc9cCtNdHwwLHApfDAsYj1HLHA9dixHPWNlLHY9UyxjZT11''@;'; put 'put ''ZSxTPUMsdWU9SHQrb24rb2UoQz1NdCtQdHwwLE10KXwwfXRoaXMuX2FsPXRoaXMuX2FsK0N8MCx0aGlzLl9ibD10aGlzLl9ibCtTfDAsdGhpcy5fY2w9dGhpcy5fY2wrdnwwLHRoaXMuX2RsPXRoaXMuX2RsK3B8MCx0aGlzLl9lbD10aGlzLl9lbCt3fDAsdGhpcy5fZmw9dGhpcy5fZmwrSnww''@;'; put 'put ''LHRoaXMuX2dsPXRoaXMuX2dsK25lfDAsdGhpcy5faGw9dGhpcy5faGwrZGV8MCx0aGlzLl9haD10aGlzLl9haCt1ZStvZSh0aGlzLl9hbCxDKXwwLHRoaXMuX2JoPXRoaXMuX2JoK2NlK29lKHRoaXMuX2JsLFMpfDAsdGhpcy5fY2g9dGhpcy5fY2grRytvZSh0aGlzLl9jbCx2KXwwLHRoaXMu''@;'; put 'put ''X2RoPXRoaXMuX2RoK2Irb2UodGhpcy5fZGwscCl8MCx0aGlzLl9laD10aGlzLl9laCtEK29lKHRoaXMuX2VsLHcpfDAsdGhpcy5fZmg9dGhpcy5fZmgrSCtvZSh0aGlzLl9mbCxKKXwwLHRoaXMuX2doPXRoaXMuX2doK04rb2UodGhpcy5fZ2wsbmUpfDAsdGhpcy5faGg9dGhpcy5faGgrZytv''@;'; put 'put ''ZSh0aGlzLl9obCxkZSl8MH0sai5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgc2U9SS5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24gaGUodWUsY2UsRyl7c2Uud3JpdGVJbnQzMkJFKHVlLEcpLHNlLndyaXRlSW50MzJCRShjZSxHKzQpfXJldHVybiBoZSh0aGlzLl9haCx0aGlzLl9h''@;'; put 'put ''bCwwKSxoZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxoZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksaGUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGhlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxoZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksaGUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGhlKHRoaXMuX2ho''@;'; put 'put ''LHRoaXMuX2hsLDU2KSxzZX0sTS5leHBvcnRzPWp9LDI4MzA6KE0sTyxSKT0+e00uZXhwb3J0cz1LO3ZhciB6PVIoNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIEsoKXt6LmNhbGwodGhpcyl9Uig1NzE3KShLLHopLEsuUmVhZGFibGU9Uig5NDgxKSxLLldyaXRhYmxlPVIoNDIyOSksSy5E''@;'; put 'put ''dXBsZXg9Uig2NzUzKSxLLlRyYW5zZm9ybT1SKDQ2MDUpLEsuUGFzc1Rocm91Z2g9UigyNzI1KSxLLmZpbmlzaGVkPVIoODYxMCksSy5waXBlbGluZT1SKDk5NDYpLEsuU3RyZWFtPUssSy5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihJLGspe3ZhciBFPXRoaXM7ZnVuY3Rpb24gaihlZSl7SS53''@;'; put 'put ''cml0YWJsZSYmITE9PT1JLndyaXRlKGVlKSYmRS5wYXVzZSYmRS5wYXVzZSgpfWZ1bmN0aW9uIFYoKXtFLnJlYWRhYmxlJiZFLnJlc3VtZSYmRS5yZXN1bWUoKX1FLm9uKCJkYXRhIixqKSxJLm9uKCJkcmFpbiIsViksSS5faXNTdGRpb3x8ayYmITE9PT1rLmVuZHx8KEUub24oImVuZCIsWSks''@;'; put 'put ''RS5vbigiY2xvc2UiLFgpKTt2YXIgQj0hMTtmdW5jdGlvbiBZKCl7Qnx8KEI9ITAsSS5lbmQoKSl9ZnVuY3Rpb24gWCgpe0J8fChCPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBJLmRlc3Ryb3kmJkkuZGVzdHJveSgpKX1mdW5jdGlvbiBVKGVlKXtpZihxKCksMD09PXoubGlzdGVuZXJDb3VudCh0''@;'; put 'put ''aGlzLCJlcnJvciIpKXRocm93IGVlfWZ1bmN0aW9uIHEoKXtFLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixqKSxJLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsViksRS5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxFLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsWCksRS5yZW1vdmVMaXN0ZW5lcigiZXJy''@;'; put 'put ''b3IiLFUpLEkucmVtb3ZlTGlzdGVuZXIoImVycm9yIixVKSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHEpLEUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixxKSxJLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscSl9cmV0dXJuIEUub24oImVycm9yIixVKSxJLm9uKCJlcnJvciIsVSksRS5vbigiZW5k''@;'; put 'put ''IixxKSxFLm9uKCJjbG9zZSIscSksSS5vbigiY2xvc2UiLHEpLEkuZW1pdCgicGlwZSIsRSksSX19LDI1NTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDk1MDkpLkJ1ZmZlcixLPXouaXNFbmNvZGluZ3x8ZnVuY3Rpb24ocSl7c3dpdGNoKChxPSIiK3EpJiZxLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX07''@;'; put 'put ''ZnVuY3Rpb24gSShxKXt2YXIgZWU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24odGUpe3ZhciBvZT1mdW5jdGlvbihzZSl7aWYoIXNlKXJldHVybiJ1dGY4Ijtmb3IodmFyIGhlOzspc3dpdGNoKHNlKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIi''@;'; put 'put ''OmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gc2U7ZGVmYXVsdDppZihoZSlyZXR1cm47''@;'; put 'put ''c2U9KCIiK3NlKS50b0xvd2VyQ2FzZSgpLGhlPSEwfX0odGUpO2lmKCJzdHJpbmciIT10eXBlb2Ygb2UmJih6LmlzRW5jb2Rpbmc9PT1LfHwhSyh0ZSkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0ZSk7cmV0dXJuIG9lfHx0ZX0ocSksdGhpcy5lbmNvZGluZyl7Y2Fz''@;'; put 'put ''ZSJ1dGYxNmxlIjp0aGlzLnRleHQ9aix0aGlzLmVuZD1WLGVlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PUUsZWU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PUIsdGhpcy5lbmQ9WSxlZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRo''@;'; put 'put ''aXMuZW5kPVUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9ei5hbGxvY1Vuc2FmZShlZSl9ZnVuY3Rpb24gayhxKXtyZXR1cm4gcTw9MTI3PzA6cT4+NT09Nj8yOnE+PjQ9PTE0PzM6cT4+Mz09MzA/NDpxPj42PT0yPy0xOi0yfWZ1bmN0aW9uIEUocSl7''@;'; put 'put ''dmFyIGVlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsdGU9ZnVuY3Rpb24ob2Usc2UsaGUpe2lmKDEyOCE9KDE5MiZzZVswXSkpcmV0dXJuIG9lLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYob2UubGFzdE5lZWQ+MSYmc2UubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZzZVsxXSkpcmV0dXJu''@;'; put 'put ''IG9lLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYob2UubGFzdE5lZWQ+MiYmc2UubGVuZ3RoPjImJjEyOCE9KDE5MiZzZVsyXSkpcmV0dXJuIG9lLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLHEpO3JldHVybiB2b2lkIDAhPT10ZT90ZTp0aGlzLmxhc3ROZWVkPD1xLmxlbmd0aD8ocS5jb3B5''@;'; put 'put ''KHRoaXMubGFzdENoYXIsZWUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihxLmNvcHkodGhpcy5sYXN0Q2hhcixlZSwwLHEubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXEubGVuZ3RoKSl9ZnVuY3Rp''@;'; put 'put ''b24gaihxLGVlKXtpZigocS5sZW5ndGgtZWUpJTI9PTApe3ZhciB0ZT1xLnRvU3RyaW5nKCJ1dGYxNmxlIixlZSk7aWYodGUpe3ZhciBvZT10ZS5jaGFyQ29kZUF0KHRlLmxlbmd0aC0xKTtpZihvZT49NTUyOTYmJm9lPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRv''@;'; put 'put ''dGFsPTQsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09cVtxLmxlbmd0aC0xXSx0ZS5zbGljZSgwLC0xKX1yZXR1cm4gdGV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0xXSxx''@;'; put 'put ''LnRvU3RyaW5nKCJ1dGYxNmxlIixlZSxxLmxlbmd0aC0xKX1mdW5jdGlvbiBWKHEpe3ZhciBlZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP2VlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5s''@;'; put 'put ''YXN0TmVlZCk6ZWV9ZnVuY3Rpb24gQihxLGVlKXt2YXIgdGU9KHEubGVuZ3RoLWVlKSUzO3JldHVybiAwPT09dGU/cS50b1N0cmluZygiYmFzZTY0IixlZSk6KHRoaXMubGFzdE5lZWQ9My10ZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT10ZT90aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMV06''@;'; put 'put ''KHRoaXMubGFzdENoYXJbMF09cVtxLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPXFbcS5sZW5ndGgtMV0pLHEudG9TdHJpbmcoImJhc2U2NCIsZWUscS5sZW5ndGgtdGUpKX1mdW5jdGlvbiBZKHEpe3ZhciBlZT1xJiZxLmxlbmd0aD90aGlzLndyaXRlKHEpOiIiO3JldHVybiB0aGlzLmxh''@;'; put 'put ''c3ROZWVkP2VlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOmVlfWZ1bmN0aW9uIFgocSl7cmV0dXJuIHEudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gVShxKXtyZXR1cm4gcSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIn1PLlN0''@;'; put 'put ''cmluZ0RlY29kZXI9SSxJLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtpZigwPT09cS5sZW5ndGgpcmV0dXJuIiI7dmFyIGVlLHRlO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShlZT10aGlzLmZpbGxMYXN0KHEpKSlyZXR1cm4iIjt0ZT10aGlzLmxhc3ROZWVkLHRoaXMubGFz''@;'; put 'put ''dE5lZWQ9MH1lbHNlIHRlPTA7cmV0dXJuIHRlPHEubGVuZ3RoP2VlP2VlK3RoaXMudGV4dChxLHRlKTp0aGlzLnRleHQocSx0ZSk6ZWV8fCIifSxJLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24ocSl7dmFyIGVlPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5l''@;'; put 'put ''ZWQ/ZWUrIlx1ZmZmZCI6ZWV9LEkucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24ocSxlZSl7dmFyIHRlPWZ1bmN0aW9uKHNlLGhlLHVlKXt2YXIgY2U9aGUubGVuZ3RoLTE7aWYoY2U8dWUpcmV0dXJuIDA7dmFyIEc9ayhoZVtjZV0pO3JldHVybiBHPj0wPyhHPjAmJihzZS5sYXN0TmVlZD1HLTEp''@;'; put 'put ''LEcpOi0tY2U8dWV8fC0yPT09Rz8wOihHPWsoaGVbY2VdKSk+PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMiksRyk6LS1jZTx1ZXx8LTI9PT1HPzA6KEc9ayhoZVtjZV0pKT49MD8oRz4wJiYoMj09PUc/Rz0wOnNlLmxhc3ROZWVkPUctMyksRyk6MH0odGhpcyxxLGVlKTtpZighdGhpcy5sYXN0''@;'; put 'put ''TmVlZClyZXR1cm4gcS50b1N0cmluZygidXRmOCIsZWUpO3RoaXMubGFzdFRvdGFsPXRlO3ZhciBvZT1xLmxlbmd0aC0odGUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLDAsb2UpLHEudG9TdHJpbmcoInV0ZjgiLGVlLG9lKX0sSS5wcm90b3R5cGUuZmlsbExh''@;'; put 'put ''c3Q9ZnVuY3Rpb24ocSl7aWYodGhpcy5sYXN0TmVlZDw9cS5sZW5ndGgpcmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RU''@;'; put 'put ''b3RhbCk7cS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHEubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1xLmxlbmd0aH19LDc4NTc6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoMzY4OSksSz1SKDQ1NjQpLEk9Uig3NTIpLGs9UigyMjI0''@;'; put 'put ''KS55LEU9Uig1NzYxKS5tLGo9Uig4OTcxKS5VLFY9Uig3NjUyKSxCPVIoNDU2KSx7ZnJvbUNhbGxiYWNrOll9PVIoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6WH09UigxMjY5KSxVPS9eW1x4MjFceDIzLVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLHE9L1tceDAw''@;'; put 'put ''LVx4MUZdLyxlZT1bIlxuIiwiXHIiLCJcMCJdLHRlPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLG9lPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLHNlPXtqYW46MCxmZWI6MSxtYXI6MixhcHI6MyxtYXk6NCxqdW46NSxqdWw6NixhdWc6NyxzZXA6OCxvY3Q6''@;'; put 'put ''OSxub3Y6MTAsZGVjOjExfSxoZT0yMTQ3NDgzNjQ3ZTMsdWU9J0ludmFsaWQgc2FtZVNpdGVDb250ZXh0IG9wdGlvbiBmb3IgZ2V0Q29va2llcygpOyBleHBlY3RlZCBvbmUgb2YgInN0cmljdCIsICJsYXgiLCBvciAibm9uZSInO2Z1bmN0aW9uIGNlKEplKXtWLnZhbGlkYXRlKFYuaXNOb25F''@;'; put 'put ''bXB0eVN0cmluZyhKZSksSmUpO2NvbnN0IGx0PVN0cmluZyhKZSkudG9Mb3dlckNhc2UoKTtyZXR1cm4ibm9uZSI9PT1sdHx8ImxheCI9PT1sdHx8InN0cmljdCI9PT1sdD9sdDpudWxsfWNvbnN0IEc9T2JqZWN0LmZyZWV6ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNB''@;'; put 'put ''QkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLGI9Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwo''@;'; put 'put ''PzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1c''@;'; put 'put ''ZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxb''@;'; put 'put ''MS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxk''@;'; put 'put ''KSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86''@;'; put 'put ''MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwy''@;'; put 'put ''WzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQp''@;'; put 'put ''KXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDopKSkkKS8sRD0iXG5cXFs/KD86XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7N30oPzpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxc''@;'; put 'put ''XGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXw6W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVd''@;'; put 'put ''fDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDJ9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezR9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQp''@;'; put 'put ''KD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwzfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXszfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRc''@;'; put 'put ''XGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwzfTooPzoyNVswLTVd''@;'; put 'put ''fDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDV9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezF9KD86KD86OlthLWZBLUZcXGRdezEsNH0p''@;'; put 'put ''ezAsNH06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw2fXw6KXxcbig/OjooPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw1''@;'; put 'put ''fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDd9fDopKVxuKSg/OiVbMC05YS16QS1aXXsxLH0pP1xcXT9cbiIucmVwbGFj''@;'; put 'put ''ZSgvXHMqXC9cLy4qJC9nbSwiIikucmVwbGFjZSgvXG4vZywiIikudHJpbSgpLEg9bmV3IFJlZ0V4cChgXiR7RH0kYCk7ZnVuY3Rpb24gTihKZSxsdCxQZSxiZSl7bGV0IEFlPTA7Zm9yKDtBZTxKZS5sZW5ndGg7KXtjb25zdCBUZT1KZS5jaGFyQ29kZUF0KEFlKTtpZihUZTw9NDd8fFRlPj01''@;'; put 'put ''OClicmVhaztBZSsrfXJldHVybiBBZTxsdHx8QWU+UGU/bnVsbDpiZXx8QWU9PUplLmxlbmd0aD9wYXJzZUludChKZS5zdWJzdHIoMCxBZSksMTApOm51bGx9ZnVuY3Rpb24gZyhKZSl7Y29uc3QgbHQ9SmUuc3BsaXQoIjoiKSxQZT1bMCwwLDBdO2lmKDMhPT1sdC5sZW5ndGgpcmV0dXJuIG51''@;'; put 'put ''bGw7Zm9yKGxldCBiZT0wO2JlPDM7YmUrKyl7Y29uc3QgVGU9TihsdFtiZV0sMSwyLDI9PWJlKTtpZihudWxsPT09VGUpcmV0dXJuIG51bGw7UGVbYmVdPVRlfXJldHVybiBQZX1mdW5jdGlvbiBDKEplKXtKZT1TdHJpbmcoSmUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3QgbHQ9''@;'; put 'put ''c2VbSmVdO3JldHVybiBsdD49MD9sdDpudWxsfWZ1bmN0aW9uIFMoSmUpe2lmKCFKZSlyZXR1cm47Y29uc3QgbHQ9SmUuc3BsaXQob2UpO2lmKCFsdClyZXR1cm47bGV0IFBlPW51bGwsYmU9bnVsbCxBZT1udWxsLFRlPW51bGwscWU9bnVsbCxYZT1udWxsO2ZvcihsZXQgVWU9MDtVZTxsdC5s''@;'; put 'put ''ZW5ndGg7VWUrKyl7Y29uc3QgaHQ9bHRbVWVdLnRyaW0oKTtpZighaHQubGVuZ3RoKWNvbnRpbnVlO2xldCBNZTtudWxsPT09QWUmJihNZT1nKGh0KSxNZSk/KFBlPU1lWzBdLGJlPU1lWzFdLEFlPU1lWzJdKTpudWxsIT09VGV8fChNZT1OKGh0LDEsMiwhMCksbnVsbD09PU1lKT9udWxsIT09''@;'; put 'put ''cWV8fChNZT1DKGh0KSxudWxsPT09TWUpP251bGw9PT1YZSYmKE1lPU4oaHQsMiw0LCEwKSxudWxsIT09TWUmJihYZT1NZSxYZT49NzAmJlhlPD05OT9YZSs9MTkwMDpYZT49MCYmWGU8PTY5JiYoWGUrPTJlMykpKTpxZT1NZTpUZT1NZX1yZXR1cm4gbnVsbD09PVRlfHxudWxsPT09cWV8fG51''@;'; put 'put ''bGw9PT1YZXx8bnVsbD09PUFlfHxUZTwxfHxUZT4zMXx8WGU8MTYwMXx8UGU+MjN8fGJlPjU5fHxBZT41OT92b2lkIDA6bmV3IERhdGUoRGF0ZS5VVEMoWGUscWUsVGUsUGUsYmUsQWUpKX1mdW5jdGlvbiB2KEplKXtyZXR1cm4gVi52YWxpZGF0ZShWLmlzRGF0ZShKZSksSmUpLEplLnRvVVRD''@;'; put 'put ''U3RyaW5nKCl9ZnVuY3Rpb24gcChKZSl7cmV0dXJuIG51bGw9PUplP251bGw6KEplPUplLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKSxILnRlc3QoSmUpJiYoSmU9SmUucmVwbGFjZSgiWyIsIiIpLnJlcGxhY2UoIl0iLCIiKSkseiYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoSmUpJiYoSmU9''@;'; put 'put ''ei50b0FTQ0lJKEplKSksSmUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gdyhKZSxsdCxQZSl7aWYobnVsbD09SmV8fG51bGw9PWx0KXJldHVybiBudWxsO2lmKCExIT09UGUmJihKZT1wKEplKSxsdD1wKGx0KSksSmU9PWx0KXJldHVybiEwO2NvbnN0IGJlPUplLmxhc3RJbmRleE9mKGx0KTty''@;'; put 'put ''ZXR1cm4hKGJlPD0wfHxKZS5sZW5ndGghPT1sdC5sZW5ndGgrYmV8fCIuIiE9PUplLnN1YnN0cihiZS0xLDEpfHxiLnRlc3QoSmUpKX1mdW5jdGlvbiBKKEplKXtpZighSmV8fCIvIiE9PUplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT1KZSlyZXR1cm4gSmU7Y29uc3QgbHQ9SmUu''@;'; put 'put ''bGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gMD09PWx0PyIvIjpKZS5zbGljZSgwLGx0KX1mdW5jdGlvbiBkZShKZSxsdCl7aWYobHQmJiJvYmplY3QiPT10eXBlb2YgbHR8fChsdD17fSksVi5pc0VtcHR5U3RyaW5nKEplKXx8IVYuaXNTdHJpbmcoSmUpKXJldHVybiBudWxsO2NvbnN0IFBlPShK''@;'; put 'put ''ZT1KZS50cmltKCkpLmluZGV4T2YoIjsiKSxiZT1mdW5jdGlvbiBuZShKZSxsdCl7SmU9ZnVuY3Rpb24ocWUpe2lmKFYuaXNFbXB0eVN0cmluZyhxZSkpcmV0dXJuIHFlO2ZvcihsZXQgWGU9MDtYZTxlZS5sZW5ndGg7WGUrKyl7Y29uc3QgVWU9cWUuaW5kZXhPZihlZVtYZV0pOy0xIT09VWUm''@;'; put 'put ''JihxZT1xZS5zdWJzdHIoMCxVZSkpfXJldHVybiBxZX0oSmUpLFYudmFsaWRhdGUoVi5pc1N0cmluZyhKZSksSmUpO2xldCBQZSxiZSxBZT1KZS5pbmRleE9mKCI9Iik7aWYobHQpMD09PUFlJiYoQWU9KEplPUplLnN1YnN0cigxKSkuaW5kZXhPZigiPSIpKTtlbHNlIGlmKEFlPD0wKXJldHVy''@;'; put 'put ''bjtpZihBZTw9MD8oUGU9IiIsYmU9SmUudHJpbSgpKTooUGU9SmUuc3Vic3RyKDAsQWUpLnRyaW0oKSxiZT1KZS5zdWJzdHIoQWUrMSkudHJpbSgpKSxxLnRlc3QoUGUpfHxxLnRlc3QoYmUpKXJldHVybjtjb25zdCBUZT1uZXcgamU7cmV0dXJuIFRlLmtleT1QZSxUZS52YWx1ZT1iZSxUZX0o''@;'; put 'put ''LTE9PT1QZT9KZTpKZS5zdWJzdHIoMCxQZSksISFsdC5sb29zZSk7aWYoIWJlKXJldHVybjtpZigtMT09PVBlKXJldHVybiBiZTtjb25zdCBBZT1KZS5zbGljZShQZSsxKS50cmltKCk7aWYoMD09PUFlLmxlbmd0aClyZXR1cm4gYmU7Y29uc3QgVGU9QWUuc3BsaXQoIjsiKTtmb3IoO1RlLmxl''@;'; put 'put ''bmd0aDspe2NvbnN0IHFlPVRlLnNoaWZ0KCkudHJpbSgpO2lmKDA9PT1xZS5sZW5ndGgpY29udGludWU7Y29uc3QgWGU9cWUuaW5kZXhPZigiPSIpO2xldCBVZSxodDtzd2l0Y2goLTE9PT1YZT8oVWU9cWUsaHQ9bnVsbCk6KFVlPXFlLnN1YnN0cigwLFhlKSxodD1xZS5zdWJzdHIoWGUrMSkp''@;'; put 'put ''LFVlPVVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGh0JiYoaHQ9aHQudHJpbSgpKSxVZSl7Y2FzZSJleHBpcmVzIjppZihodCl7Y29uc3QgTWU9UyhodCk7TWUmJihiZS5leHBpcmVzPU1lKX1icmVhaztjYXNlIm1heC1hZ2UiOmlmKGh0JiYvXi0/WzAtOV0rJC8udGVzdChodCkpe2NvbnN0IE1l''@;'; put 'put ''PXBhcnNlSW50KGh0LDEwKTtiZS5zZXRNYXhBZ2UoTWUpfWJyZWFrO2Nhc2UiZG9tYWluIjppZihodCl7Y29uc3QgTWU9aHQudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpO01lJiYoYmUuZG9tYWluPU1lLnRvTG93ZXJDYXNlKCkpfWJyZWFrO2Nhc2UicGF0aCI6YmUucGF0aD1odCYmIi8iPT09''@;'; put 'put ''aHRbMF0/aHQ6bnVsbDticmVhaztjYXNlInNlY3VyZSI6YmUuc2VjdXJlPSEwO2JyZWFrO2Nhc2UiaHR0cG9ubHkiOmJlLmh0dHBPbmx5PSEwO2JyZWFrO2Nhc2Uic2FtZXNpdGUiOnN3aXRjaChodD9odC50b0xvd2VyQ2FzZSgpOiIiKXtjYXNlInN0cmljdCI6YmUuc2FtZVNpdGU9InN0cmlj''@;'; put 'put ''dCI7YnJlYWs7Y2FzZSJsYXgiOmJlLnNhbWVTaXRlPSJsYXgiO2JyZWFrO2Nhc2Uibm9uZSI6YmUuc2FtZVNpdGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6YmUuc2FtZVNpdGU9dm9pZCAwfWJyZWFrO2RlZmF1bHQ6YmUuZXh0ZW5zaW9ucz1iZS5leHRlbnNpb25zfHxbXSxiZS5leHRlbnNpb25z''@;'; put 'put ''LnB1c2gocWUpfX1yZXR1cm4gYmV9ZnVuY3Rpb24gZmUoSmUpe2xldCBsdDt0cnl7bHQ9SlNPTi5wYXJzZShKZSl9Y2F0Y2goUGUpe3JldHVybiBQZX1yZXR1cm4gbHR9ZnVuY3Rpb24geGUoSmUpe2lmKCFKZXx8Vi5pc0VtcHR5U3RyaW5nKEplKSlyZXR1cm4gbnVsbDtsZXQgbHQ7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBKZSl7aWYobHQ9ZmUoSmUpLGx0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIG51bGx9ZWxzZSBsdD1KZTtjb25zdCBQZT1uZXcgamU7Zm9yKGxldCBiZT0wO2JlPGplLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVuZ3RoO2JlKyspe2NvbnN0IEFlPWplLnNlcmlhbGl6''@;'; put 'put ''YWJsZVByb3BlcnRpZXNbYmVdO3ZvaWQgMCE9PWx0W0FlXSYmbHRbQWVdIT09T2VbQWVdJiYoUGVbQWVdPSJleHBpcmVzIj09PUFlfHwiY3JlYXRpb24iPT09QWV8fCJsYXN0QWNjZXNzZWQiPT09QWU/bnVsbD09PWx0W0FlXT9udWxsOiJJbmZpbml0eSI9PWx0W0FlXT8iSW5maW5pdHkiOm5l''@;'; put 'put ''dyBEYXRlKGx0W0FlXSk6bHRbQWVdKX1yZXR1cm4gUGV9ZnVuY3Rpb24gTGUoSmUsbHQpe1YudmFsaWRhdGUoVi5pc09iamVjdChKZSksSmUpLFYudmFsaWRhdGUoVi5pc09iamVjdChsdCksbHQpO2xldCBQZT0wO3JldHVybiBQZT0obHQucGF0aD9sdC5wYXRoLmxlbmd0aDowKS0oSmUucGF0''@;'; put 'put ''aD9KZS5wYXRoLmxlbmd0aDowKSwwIT09UGV8fChQZT0oSmUuY3JlYXRpb24/SmUuY3JlYXRpb24uZ2V0VGltZSgpOmhlKS0obHQuY3JlYXRpb24/bHQuY3JlYXRpb24uZ2V0VGltZSgpOmhlKSwwIT09UGV8fChQZT1KZS5jcmVhdGlvbkluZGV4LWx0LmNyZWF0aW9uSW5kZXgpKSxQZX1mdW5j''@;'; put 'put ''dGlvbiBGZShKZSl7aWYoSmUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIEplO3RyeXtKZT1kZWNvZGVVUkkoSmUpfWNhdGNoe31yZXR1cm4gSyhKZSl9Y29uc3QgT2U9e2tleToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxs''@;'; put 'put ''LHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIGple2NvbnN0cnVjdG9yKGx0PXt9KXtjb25zdCBQZT1YKCk7UGUm''@;'; put 'put ''Jih0aGlzW1BlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxPZSxsdCksdGhpcy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdy''@;'; put 'put ''aXRhYmxlOiEwLHZhbHVlOisramUuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgbHQ9RGF0ZS5ub3coKSxQZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9zdE9ubHk6Ij8iLGJlPXRoaXMuY3JlYXRpb24/bHQtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsQWU9''@;'; put 'put ''dGhpcy5sYXN0QWNjZXNzZWQ/bHQtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9ubHk9JHtQZX07IGFBZ2U9JHtBZX07IGNBZ2U9JHtiZX0iYH10b0pTT04oKXtjb25zdCBsdD17fTtmb3IoY29uc3Qg''@;'; put 'put ''UGUgb2YgamUuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW1BlXSE9PU9lW1BlXSYmKCJleHBpcmVzIj09PVBlfHwiY3JlYXRpb24iPT09UGV8fCJsYXN0QWNjZXNzZWQiPT09UGU/bHRbUGVdPW51bGw9PT10aGlzW1BlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNbUGVdPyJJbmZpbml0eSI6''@;'; put 'put ''dGhpc1tQZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PVBlP251bGwhPT10aGlzW1BlXSYmKGx0W1BlXT10aGlzW1BlXT09MS8wfHx0aGlzW1BlXT09LTEvMD90aGlzW1BlXS50b1N0cmluZygpOnRoaXNbUGVdKTp0aGlzW1BlXSE9PU9lW1BlXSYmKGx0W1BlXT10aGlzW1BlXSkpO3JldHVy''@;'; put 'put ''biBsdH1jbG9uZSgpe3JldHVybiB4ZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCFVLnRlc3QodGhpcy52YWx1ZSl8fCEodGhpcy5leHBpcmVzPT0xLzB8fHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGV8fFModGhpcy5leHBpcmVzKSl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlz''@;'; put 'put ''Lm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhdGUudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IGx0PXRoaXMuY2RvbWFpbigpO3JldHVybiEobHQmJihsdC5tYXRjaCgvXC4kLyl8fG51bGw9PUkuZ2V0UHVibGljU3VmZml4KGx0KSkpfXNldEV4cGlyZXMobHQpe3RoaXMuZXhw''@;'; put 'put ''aXJlcz1sdCBpbnN0YW5jZW9mIERhdGU/bHQ6UyhsdCl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKGx0KXt0aGlzLm1heEFnZT1sdD09PTEvMHx8bHQ9PT0tMS8wP2x0LnRvU3RyaW5nKCk6bHR9Y29va2llU3RyaW5nKCl7bGV0IGx0PXRoaXMudmFsdWU7cmV0dXJuIG51bGw9PWx0JiYobHQ9IiIp''@;'; put 'put ''LCIiPT09dGhpcy5rZXk/bHQ6YCR7dGhpcy5rZXl9PSR7bHR9YH10b1N0cmluZygpe2xldCBsdD10aGlzLmNvb2tpZVN0cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYodGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9sdCs9YDsgRXhwaXJlcz0ke3YodGhpcy5leHBpcmVzKX1gOmx0''@;'; put 'put ''Kz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYobHQrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1gKSx0aGlzLmRvbWFpbiYmIXRoaXMuaG9zdE9ubHkmJihsdCs9YDsgRG9tYWluPSR7dGhpcy5kb21haW59YCksdGhp''@;'; put 'put ''cy5wYXRoJiYobHQrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihsdCs9IjsgU2VjdXJlIiksdGhpcy5odHRwT25seSYmKGx0Kz0iOyBIdHRwT25seSIpLHRoaXMuc2FtZVNpdGUmJiJub25lIiE9PXRoaXMuc2FtZVNpdGUpe2NvbnN0IFBlPWplLnNhbWVTaXRlQ2Fub25p''@;'; put 'put ''Y2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07bHQrPWA7IFNhbWVTaXRlPSR7UGV8fHRoaXMuc2FtZVNpdGV9YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlzLmV4dGVuc2lvbnMuZm9yRWFjaChQZT0+e2x0Kz1gOyAke1BlfWB9KSxsdH1UVEwobHQpe2lmKG51bGwhPXRoaXMu''@;'; put 'put ''bWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgUGU9dGhpcy5leHBpcmVzO3JldHVybiBQZSE9MS8wPyhQZSBpbnN0YW5jZW9mIERhdGV8fChQZT1TKFBlKXx8MS8wKSxQZT09MS8wPzEvMDpQZS5nZXRUaW1lKCktKGx0fHxEYXRlLm5vdygpKSk6MS8w''@;'; put 'put ''fWV4cGlyeVRpbWUobHQpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBiZT10aGlzLm1heEFnZTw9MD8tMS8wOjFlMyp0aGlzLm1heEFnZTtyZXR1cm4obHR8fHRoaXMuY3JlYXRpb258fG5ldyBEYXRlKS5nZXRUaW1lKCkrYmV9cmV0dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEvMDp0aGlz''@;'; put 'put ''LmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUobHQpe2NvbnN0IFBlPXRoaXMuZXhwaXJ5VGltZShsdCk7cmV0dXJuIFBlPT0xLzA/bmV3IERhdGUoaGUpOlBlPT0tMS8wP25ldyBEYXRlKDApOm5ldyBEYXRlKFBlKX1pc1BlcnNpc3RlbnQoKXtyZXR1cm4gbnVsbCE9dGhpcy5tYXhBZ2V8''@;'; put 'put ''fHRoaXMuZXhwaXJlcyE9MS8wfWNhbm9uaWNhbGl6ZWREb21haW4oKXtyZXR1cm4gbnVsbD09dGhpcy5kb21haW4/bnVsbDpwKHRoaXMuZG9tYWluKX1jZG9tYWluKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsaXplZERvbWFpbigpfX1mdW5jdGlvbiBXZShKZSl7aWYobnVsbCE9SmUpe2NvbnN0''@;'; put 'put ''IGx0PUplLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGx0KXtjYXNlIEcuU1RSSUNUOmNhc2UgRy5TSUxFTlQ6Y2FzZSBHLkRJU0FCTEVEOnJldHVybiBsdH19cmV0dXJuIEcuU0lMRU5UfWplLmNvb2tpZXNDcmVhdGVkPTAsamUucGFyc2U9ZGUsamUuZnJvbUpTT049eGUsamUuc2VyaWFsaXphYmxl''@;'; put 'put ''UHJvcGVydGllcz1PYmplY3Qua2V5cyhPZSksamUuc2FtZVNpdGVMZXZlbD17c3RyaWN0OjMsbGF4OjIsbm9uZToxfSxqZS5zYW1lU2l0ZUNhbm9uaWNhbD17c3RyaWN0OiJTdHJpY3QiLGxheDoiTGF4In07Y2xhc3MgS2V7Y29uc3RydWN0b3IobHQsUGU9e3JlamVjdFB1YmxpY1N1ZmZpeGVz''@;'; put 'put ''OiEwfSl7ImJvb2xlYW4iPT10eXBlb2YgUGUmJihQZT17cmVqZWN0UHVibGljU3VmZml4ZXM6UGV9KSxWLnZhbGlkYXRlKFYuaXNPYmplY3QoUGUpLFBlKSx0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzPVBlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLHRoaXMuZW5hYmxlTG9vc2VNb2RlPSEhUGUu''@;'; put 'put ''bG9vc2VNb2RlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluPSJib29sZWFuIiE9dHlwZW9mIFBlLmFsbG93U3BlY2lhbFVzZURvbWFpbnx8UGUuYWxsb3dTcGVjaWFsVXNlRG9tYWluLHRoaXMuc3RvcmU9bHR8fG5ldyBFLHRoaXMucHJlZml4U2VjdXJpdHk9V2UoUGUucHJlZml4U2VjdXJp''@;'; put 'put ''dHkpLHRoaXMuX2Nsb25lU3luYz1ZZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3luYz1ZZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPVllKCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdTeW5jPVllKCJnZXRDb29raWVTdHJpbmciKSx0aGlz''@;'; put 'put ''LmdldFNldENvb2tpZVN0cmluZ3NTeW5jPVllKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhpcy5yZW1vdmVBbGxDb29raWVzU3luYz1ZZSgicmVtb3ZlQWxsQ29va2llcyIpLHRoaXMuc2V0Q29va2llU3luYz1ZZSgic2V0Q29va2llIiksdGhpcy5zZXJpYWxpemVTeW5jPVllKCJzZXJpYWxp''@;'; put 'put ''emUiKX1zZXRDb29raWUobHQsUGUsYmUsQWUpe2xldCBUZTtpZihWLnZhbGlkYXRlKFYuaXNOb25FbXB0eVN0cmluZyhQZSksQWUsYmUpLFYuaXNGdW5jdGlvbihQZSkpcmV0dXJuKEFlPVBlKShuZXcgRXJyb3IoIk5vIFVSTCB3YXMgc3BlY2lmaWVkIikpO2NvbnN0IHFlPUZlKFBlKTtpZihW''@;'; put 'put ''LmlzRnVuY3Rpb24oYmUpJiYoQWU9YmUsYmU9e30pLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKEFlKSxBZSksIVYuaXNOb25FbXB0eVN0cmluZyhsdCkmJiFWLmlzT2JqZWN0KGx0KSYmbHQgaW5zdGFuY2VvZiBTdHJpbmcmJjA9PWx0Lmxlbmd0aClyZXR1cm4gQWUobnVsbCk7Y29uc3QgWGU9''@;'; put 'put ''cChxZS5ob3N0bmFtZSksVWU9YmUubG9vc2V8fHRoaXMuZW5hYmxlTG9vc2VNb2RlO2xldCBodD1udWxsO2lmKGJlLnNhbWVTaXRlQ29udGV4dCYmKGh0PWNlKGJlLnNhbWVTaXRlQ29udGV4dCksIWh0KSlyZXR1cm4gQWUobmV3IEVycm9yKHVlKSk7aWYoInN0cmluZyI9PXR5cGVvZiBsdHx8''@;'; put 'put ''bHQgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKCEobHQ9amUucGFyc2UobHQse2xvb3NlOlVlfSkpKXJldHVybiBUZT1uZXcgRXJyb3IoIkNvb2tpZSBmYWlsZWQgdG8gcGFyc2UiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKX1lbHNlIGlmKCEobHQgaW5zdGFuY2VvZiBqZSkpcmV0dXJuIFRl''@;'; put 'put ''PW5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gc2V0Q29va2llIG11c3QgYmUgYSBDb29raWUgb2JqZWN0IG9yIHN0cmluZyIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2NvbnN0IE1lPWJlLm5vd3x8bmV3IERhdGU7aWYodGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyYmbHQuZG9t''@;'; put 'put ''YWluJiZudWxsPT1JLmdldFB1YmxpY1N1ZmZpeChsdC5jZG9tYWluKCkse2FsbG93U3BlY2lhbFVzZURvbWFpbjp0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixpZ25vcmVFcnJvcjpiZS5pZ25vcmVFcnJvcn0pJiYhSC50ZXN0KGx0LmRvbWFpbikpcmV0dXJuIFRlPW5ldyBFcnJvcigiQ29v''@;'; put 'put ''a2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUpO2lmKGx0LmRvbWFpbil7aWYoIXcoWGUsbHQuY2RvbWFpbigpLCExKSlyZXR1cm4gVGU9bmV3IEVycm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29v''@;'; put 'put ''a2llOiR7bHQuY2RvbWFpbigpfSBSZXF1ZXN0OiR7WGV9YCksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDpUZSk7bnVsbD09bHQuaG9zdE9ubHkmJihsdC5ob3N0T25seT0hMSl9ZWxzZSBsdC5ob3N0T25seT0hMCxsdC5kb21haW49WGU7aWYobHQucGF0aCYmIi8iPT09bHQucGF0aFswXXx8KGx0''@;'; put 'put ''LnBhdGg9SihxZS5wYXRobmFtZSksbHQucGF0aElzRGVmYXVsdD0hMCksITE9PT1iZS5odHRwJiZsdC5odHRwT25seSlyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxBZShiZS5pZ25vcmVFcnJvcj9udWxsOlRlKTtp''@;'; put 'put ''Zigibm9uZSIhPT1sdC5zYW1lU2l0ZSYmdm9pZCAwIT09bHQuc2FtZVNpdGUmJmh0JiYibm9uZSI9PT1odClyZXR1cm4gVGU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRoaXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCIpLEFlKGJlLmlnbm9yZUVycm9yP251bGw6VGUp''@;'; put 'put ''O2NvbnN0IERlPXRoaXMucHJlZml4U2VjdXJpdHk9PT1HLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09Ry5ESVNBQkxFRCl7bGV0IGl0LHV0PSExO2lmKFYudmFsaWRhdGUoVi5pc09iamVjdChNdD1sdCksTXQpLCFNdC5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fE10LnNl''@;'; put 'put ''Y3VyZT9mdW5jdGlvbihNdCl7cmV0dXJuIFYudmFsaWRhdGUoVi5pc09iamVjdChNdCkpLCFNdC5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxNdC5zZWN1cmUmJk10Lmhvc3RPbmx5JiZudWxsIT1NdC5wYXRoJiYiLyI9PT1NdC5wYXRofShsdCl8fCh1dD0hMCxpdD0iQ29va2llIGhhcyBf''@;'; put 'put ''X0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOih1dD0hMCxpdD0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLHV0KXJldHVy''@;'; put 'put ''biBBZShiZS5pZ25vcmVFcnJvcnx8RGU/bnVsbDpuZXcgRXJyb3IoaXQpKX12YXIgTXQ7Y29uc3QgemU9dGhpcy5zdG9yZTt6ZS51cGRhdGVDb29raWV8fCh6ZS51cGRhdGVDb29raWU9ZnVuY3Rpb24oaXQsdXQsTXQpe3RoaXMucHV0Q29va2llKHV0LE10KX0pLHplLmZpbmRDb29raWUobHQu''@;'; put 'put ''ZG9tYWluLGx0LnBhdGgsbHQua2V5LGZ1bmN0aW9uKGl0LHV0KXtpZihpdClyZXR1cm4gQWUoaXQpO2NvbnN0IE10PWZ1bmN0aW9uKEh0KXtpZihIdClyZXR1cm4gQWUoSHQpO0FlKG51bGwsbHQpfTtpZih1dCl7aWYoITE9PT1iZS5odHRwJiZ1dC5odHRwT25seSlyZXR1cm4gaXQ9bmV3IEVy''@;'; put 'put ''cm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksQWUoYmUuaWdub3JlRXJyb3I/bnVsbDppdCk7bHQuY3JlYXRpb249dXQuY3JlYXRpb24sbHQuY3JlYXRpb25JbmRleD11dC5jcmVhdGlvbkluZGV4LGx0Lmxhc3RBY2Nlc3NlZD1NZSx6ZS51''@;'; put 'put ''cGRhdGVDb29raWUodXQsbHQsTXQpfWVsc2UgbHQuY3JlYXRpb249bHQubGFzdEFjY2Vzc2VkPU1lLHplLnB1dENvb2tpZShsdCxNdCl9KX1nZXRDb29raWVzKGx0LFBlLGJlKXtWLnZhbGlkYXRlKFYuaXNOb25FbXB0eVN0cmluZyhsdCksYmUsbHQpO2NvbnN0IEFlPUZlKGx0KTtWLmlzRnVu''@;'; put 'put ''Y3Rpb24oUGUpJiYoYmU9UGUsUGU9e30pLFYudmFsaWRhdGUoVi5pc09iamVjdChQZSksYmUsUGUpLFYudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGJlKSxiZSk7Y29uc3QgVGU9cChBZS5ob3N0bmFtZSkscWU9QWUucGF0aG5hbWV8fCIvIjtsZXQgWGU9UGUuc2VjdXJlO251bGwhPVhlfHwhQWUu''@;'; put 'put ''cHJvdG9jb2x8fCJodHRwczoiIT1BZS5wcm90b2NvbCYmIndzczoiIT1BZS5wcm90b2NvbHx8KFhlPSEwKTtsZXQgVWU9MDtpZihQZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IE10PWNlKFBlLnNhbWVTaXRlQ29udGV4dCk7aWYoVWU9amUuc2FtZVNpdGVMZXZlbFtNdF0sIVVlKXJldHVybiBi''@;'; put 'put ''ZShuZXcgRXJyb3IodWUpKX1sZXQgaHQ9UGUuaHR0cDtudWxsPT1odCYmKGh0PSEwKTtjb25zdCBNZT1QZS5ub3d8fERhdGUubm93KCksRGU9ITEhPT1QZS5leHBpcmUsemU9ISFQZS5hbGxQYXRocyxpdD10aGlzLnN0b3JlO2Z1bmN0aW9uIHV0KE10KXtpZihNdC5ob3N0T25seSl7aWYoTXQu''@;'; put 'put ''ZG9tYWluIT1UZSlyZXR1cm4hMX1lbHNlIGlmKCF3KFRlLE10LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghemUmJiFqKHFlLE10LnBhdGgpfHxNdC5zZWN1cmUmJiFYZXx8TXQuaHR0cE9ubHkmJiFodHx8VWUmJmplLnNhbWVTaXRlTGV2ZWxbTXQuc2FtZVNpdGV8fCJub25lIl0+VWV8''@;'; put 'put ''fERlJiZNdC5leHBpcnlUaW1lKCk8PU1lJiYoaXQucmVtb3ZlQ29va2llKE10LmRvbWFpbixNdC5wYXRoLE10LmtleSwoKT0+e30pLDEpKX1pdC5maW5kQ29va2llcyhUZSx6ZT9udWxsOnFlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChNdCxIdCk9PntpZihNdClyZXR1cm4gYmUoTXQp''@;'; put 'put ''O0h0PUh0LmZpbHRlcih1dCksITEhPT1QZS5zb3J0JiYoSHQ9SHQuc29ydChMZSkpO2NvbnN0IFB0PW5ldyBEYXRlO2Zvcihjb25zdCBvbiBvZiBIdClvbi5sYXN0QWNjZXNzZWQ9UHQ7YmUobnVsbCxIdCl9KX1nZXRDb29raWVTdHJpbmcoLi4ubHQpe2NvbnN0IFBlPWx0LnBvcCgpO1YudmFs''@;'; put 'put ''aWRhdGUoVi5pc0Z1bmN0aW9uKFBlKSxQZSksbHQucHVzaChmdW5jdGlvbihiZSxBZSl7YmU/UGUoYmUpOlBlKG51bGwsQWUuc29ydChMZSkubWFwKFRlPT5UZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxsdCl9Z2V0U2V0Q29va2ll''@;'; put 'put ''U3RyaW5ncyguLi5sdCl7Y29uc3QgUGU9bHQucG9wKCk7Vi52YWxpZGF0ZShWLmlzRnVuY3Rpb24oUGUpLFBlKSxsdC5wdXNoKGZ1bmN0aW9uKGJlLEFlKXtiZT9QZShiZSk6UGUobnVsbCxBZS5tYXAoVGU9PlRlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGx0''@;'; put 'put ''KX1zZXJpYWxpemUobHQpe1YudmFsaWRhdGUoVi5pc0Z1bmN0aW9uKGx0KSxsdCk7bGV0IFBlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtWLmlzT2JqZWN0KFBlKSYmKFBlPW51bGwpO2NvbnN0IGJlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtCfWAsc3RvcmVUeXBlOlBlLHJlamVj''@;'; put 'put ''dFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpXZSh0aGlzLnByZWZpeFNl''@;'; put 'put ''Y3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBsdChuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJl''@;'; put 'put ''IHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChBZSxUZSk9PkFlP2x0KEFlKTooYmUuY29va2llcz1UZS5tYXAocWU9PihkZWxldGUocWU9cWUgaW5zdGFuY2VvZiBqZT9xZS50b0pTT04oKTpxZSkuY3JlYXRpb25JbmRleCxxZSkpLGx0KG51bGwsYmUpKSl9dG9KU09O''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKGx0LFBlKXtsZXQgYmU9bHQuY29va2llcztpZighYmV8fCFBcnJheS5pc0FycmF5KGJlKSlyZXR1cm4gUGUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtiZT1iZS5z''@;'; put 'put ''bGljZSgpO2NvbnN0IEFlPVRlPT57aWYoVGUpcmV0dXJuIFBlKFRlKTtpZighYmUubGVuZ3RoKXJldHVybiBQZShUZSx0aGlzKTtsZXQgcWU7dHJ5e3FlPXhlKGJlLnNoaWZ0KCkpfWNhdGNoKFhlKXtyZXR1cm4gUGUoWGUpfWlmKG51bGw9PT1xZSlyZXR1cm4gQWUobnVsbCk7dGhpcy5zdG9y''@;'; put 'put ''ZS5wdXRDb29raWUocWUsQWUpfTtBZSgpfWNsb25lKGx0LFBlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKFBlPWx0LGx0PW51bGwpLHRoaXMuc2VyaWFsaXplKChiZSxBZSk9PntpZihiZSlyZXR1cm4gUGUoYmUpO0tlLmRlc2VyaWFsaXplKEFlLGx0LFBlKX0pfWNsb25lU3luYyhsdCl7aWYo''@;'; put 'put ''MD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFsdC5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fY2xvbmVTeW5jKGx0KX1yZW1vdmVBbGxDb29raWVzKGx0KXtWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihsdCksbHQpO2NvbnN0IFBlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFBlLnJlbW92ZUFsbENvb2tpZXMmJlBlLnJlbW92ZUFsbENvb2tpZXMhPT1rLnBy''@;'; put 'put ''b3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBQZS5yZW1vdmVBbGxDb29raWVzKGx0KTtQZS5nZXRBbGxDb29raWVzKChiZSxBZSk9PntpZihiZSlyZXR1cm4gbHQoYmUpO2lmKDA9PT1BZS5sZW5ndGgpcmV0dXJuIGx0KG51bGwpO2xldCBUZT0wO2NvbnN0IHFlPVtdO2Z1bmN0aW9u''@;'; put 'put ''IFhlKFVlKXtpZihVZSYmcWUucHVzaChVZSksVGUrKyxUZT09PUFlLmxlbmd0aClyZXR1cm4gbHQocWUubGVuZ3RoP3FlWzBdOm51bGwpfUFlLmZvckVhY2goVWU9PntQZS5yZW1vdmVDb29raWUoVWUuZG9tYWluLFVlLnBhdGgsVWUua2V5LFhlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKGx0''@;'; put 'put ''LFBlLGJlKXtsZXQgQWU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihiZT1QZSxQZT1udWxsKSxWLnZhbGlkYXRlKFYuaXNGdW5jdGlvbihiZSksYmUpLCJzdHJpbmciPT10eXBlb2YgbHQpe2lmKEFlPWZlKGx0KSxBZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBiZShBZSl9ZWxzZSBBZT1s''@;'; put 'put ''dDtjb25zdCBUZT1uZXcgS2UoUGUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkFlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpBZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkFlLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpBZS5wcmVm''@;'; put 'put ''aXhTZWN1cml0eX0pO1RlLl9pbXBvcnRDb29raWVzKEFlLHFlPT57aWYocWUpcmV0dXJuIGJlKHFlKTtiZShudWxsLFRlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMobHQsUGUpe2NvbnN0IGJlPSJzdHJpbmciPT10eXBlb2YgbHQ/SlNPTi5wYXJzZShsdCk6bHQsQWU9bmV3IEtlKFBlLHty''@;'; put 'put ''ZWplY3RQdWJsaWNTdWZmaXhlczpiZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6YmUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIUFlLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQ''@;'; put 'put ''SSBpbnN0ZWFkLiIpO3JldHVybiBBZS5faW1wb3J0Q29va2llc1N5bmMoYmUpLEFlfX1mdW5jdGlvbiBZZShKZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmx0KXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25v''@;'; put 'put ''dXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgUGUsYmU7aWYodGhpc1tKZV0oLi4ubHQsKEFlLFRlKT0+e1BlPUFlLGJlPVRlfSksUGUpdGhyb3cgUGU7cmV0dXJuIGJlfX1LZS5mcm9tSlNPTj1LZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0''@;'; put 'put ''Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChKZT0+e0tlLnByb3RvdHlwZVtKZV09WShLZS5wcm90b3R5cGVbSmVdKX0pLEtlLmRlc2VyaWFsaXplPVkoS2Uu''@;'; put 'put ''ZGVzZXJpYWxpemUpLE8udmVyc2lvbj1CLE8uQ29va2llSmFyPUtlLE8uQ29va2llPWplLE8uU3RvcmU9ayxPLk1lbW9yeUNvb2tpZVN0b3JlPUUsTy5wYXJzZURhdGU9UyxPLmZvcm1hdERhdGU9dixPLnBhcnNlPWRlLE8uZnJvbUpTT049eGUsTy5kb21haW5NYXRjaD13LE8uZGVmYXVsdFBh''@;'; put 'put ''dGg9SixPLnBhdGhNYXRjaD1qLE8uZ2V0UHVibGljU3VmZml4PUkuZ2V0UHVibGljU3VmZml4LE8uY29va2llQ29tcGFyZT1MZSxPLnBlcm11dGVEb21haW49Uig3MzI0KS5wZXJtdXRlRG9tYWluLE8ucGVybXV0ZVBhdGg9ZnVuY3Rpb24oSmUpe2lmKFYudmFsaWRhdGUoVi5pc1N0cmluZyhK''@;'; put 'put ''ZSkpLCIvIj09PUplKXJldHVyblsiLyJdO2NvbnN0IGx0PVtKZV07Zm9yKDtKZS5sZW5ndGg+MTspe2NvbnN0IFBlPUplLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PVBlKWJyZWFrO0plPUplLnN1YnN0cigwLFBlKSxsdC5wdXNoKEplKX1yZXR1cm4gbHQucHVzaCgiLyIpLGx0fSxPLmNhbm9u''@;'; put 'put ''aWNhbERvbWFpbj1wLE8uUHJlZml4U2VjdXJpdHlFbnVtPUcsTy5QYXJhbWV0ZXJFcnJvcj1WLlBhcmFtZXRlckVycm9yfSw1NzYxOihNLE8sUik9PnsidXNlIHN0cmljdCI7Y29uc3R7ZnJvbUNhbGxiYWNrOnp9PVIoNzA0MSksSz1SKDIyMjQpLnksST1SKDczMjQpLnBlcm11dGVEb21haW4s''@;'; put 'put ''az1SKDg5NzEpLlUse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6RSxnZXRVdGlsSW5zcGVjdDpqfT1SKDEyNjkpO2NsYXNzIFYgZXh0ZW5kcyBLe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLnN5bmNocm9ub3VzPSEwLHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgWD1FKCk7''@;'; put 'put ''WCYmKHRoaXNbWF09dGhpcy5pbnNwZWN0KX1pbnNwZWN0KCl7cmV0dXJuYHsgaWR4OiAke2ooQikodGhpcy5pZHgsITEsMil9IH1gfWZpbmRDb29raWUoWCxVLHEsZWUpe3JldHVybiBlZShudWxsLHRoaXMuaWR4W1hdJiZ0aGlzLmlkeFtYXVtVXT90aGlzLmlkeFtYXVtVXVtxXXx8bnVsbDp2''@;'; put 'put ''b2lkIDApfWZpbmRDb29raWVzKFgsVSxxLGVlKXtjb25zdCB0ZT1bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcSYmKGVlPXEscT0hMCksIVgpcmV0dXJuIGVlKG51bGwsW10pO2xldCBvZTtvZT1VP2Z1bmN0aW9uKHVlKXtPYmplY3Qua2V5cyh1ZSkuZm9yRWFjaChjZT0+e2lmKGsoVSxjZSkp''@;'; put 'put ''e2NvbnN0IEc9dWVbY2VdO2Zvcihjb25zdCBiIGluIEcpdGUucHVzaChHW2JdKX19KX06ZnVuY3Rpb24odWUpe2Zvcihjb25zdCBjZSBpbiB1ZSl7Y29uc3QgRz11ZVtjZV07Zm9yKGNvbnN0IGIgaW4gRyl0ZS5wdXNoKEdbYl0pfX07Y29uc3Qgc2U9SShYLHEpfHxbWF0saGU9dGhpcy5pZHg7''@;'; put 'put ''c2UuZm9yRWFjaCh1ZT0+e2NvbnN0IGNlPWhlW3VlXTtjZSYmb2UoY2UpfSksZWUobnVsbCx0ZSl9cHV0Q29va2llKFgsVSl7dGhpcy5pZHhbWC5kb21haW5dfHwodGhpcy5pZHhbWC5kb21haW5dPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1guZG9tYWluXVtYLnBhdGhdfHwodGhp''@;'; put 'put ''cy5pZHhbWC5kb21haW5dW1gucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbWC5kb21haW5dW1gucGF0aF1bWC5rZXldPVgsVShudWxsKX11cGRhdGVDb29raWUoWCxVLHEpe3RoaXMucHV0Q29va2llKFUscSl9cmVtb3ZlQ29va2llKFgsVSxxLGVlKXt0aGlzLmlkeFtYXSYm''@;'; put 'put ''dGhpcy5pZHhbWF1bVV0mJnRoaXMuaWR4W1hdW1VdW3FdJiZkZWxldGUgdGhpcy5pZHhbWF1bVV1bcV0sZWUobnVsbCl9cmVtb3ZlQ29va2llcyhYLFUscSl7cmV0dXJuIHRoaXMuaWR4W1hdJiYoVT9kZWxldGUgdGhpcy5pZHhbWF1bVV06ZGVsZXRlIHRoaXMuaWR4W1hdKSxxKG51bGwpfXJl''@;'; put 'put ''bW92ZUFsbENvb2tpZXMoWCl7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksWChudWxsKX1nZXRBbGxDb29raWVzKFgpe2NvbnN0IFU9W10scT10aGlzLmlkeDtPYmplY3Qua2V5cyhxKS5mb3JFYWNoKGVlPT57T2JqZWN0LmtleXMocVtlZV0pLmZvckVhY2godGU9PntPYmpl''@;'; put 'put ''Y3Qua2V5cyhxW2VlXVt0ZV0pLmZvckVhY2gob2U9PntudWxsIT09b2UmJlUucHVzaChxW2VlXVt0ZV1bb2VdKX0pfSl9KSxVLnNvcnQoKGVlLHRlKT0+KGVlLmNyZWF0aW9uSW5kZXh8fDApLSh0ZS5jcmVhdGlvbkluZGV4fHwwKSksWChudWxsLFUpfX1mdW5jdGlvbiBCKFkpe2NvbnN0IFg9''@;'; put 'put ''T2JqZWN0LmtleXMoWSk7aWYoMD09PVgubGVuZ3RoKXJldHVybiJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge30iO2xldCBVPSJbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuIjtyZXR1cm4gT2JqZWN0LmtleXMoWSkuZm9yRWFjaCgocSxlZSk9PntVKz1mdW5jdGlvbih0ZSxvZSl7bGV0''@;'; put 'put ''IGhlPWAgICcke3RlfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhvZSkuZm9yRWFjaCgodWUsY2UsRyk9PntoZSs9ZnVuY3Rpb24oYixEKXtjb25zdCBIPSIgICAgIjtsZXQgTj1gJHtIfScke2J9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVd''@;'; put 'put ''IHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKEQpLmZvckVhY2goKGcsQyxTKT0+e04rPWAgICAgICAke2d9OiAke0RbZ10uaW5zcGVjdCgpfWAsQzxTLmxlbmd0aC0xJiYoTis9IiwiKSxOKz0iXG4ifSksTis9YCR7SH19YCxOfSh1ZSxvZVt1ZV0pLGNlPEcubGVuZ3RoLTEmJihoZSs9IiwiKSxo''@;'; put 'put ''ZSs9IlxuIn0pLGhlKz0iICB9IixoZX0ocSxZW3FdKSxlZTxYLmxlbmd0aC0xJiYoVSs9IiwiKSxVKz0iXG4ifSksVSs9In0iLFV9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1vdmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwicmVt''@;'; put 'put ''b3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKFk9PntWLnByb3RvdHlwZVtZXT16KFYucHJvdG90eXBlW1ldKX0pLE8ubT1WfSw4OTcxOihNLE8pPT57InVzZSBzdHJpY3QiO08uVT1mdW5jdGlvbihSLHope3JldHVybiB6PT09Unx8MD09PVIuaW5kZXhPZih6KSYmKCIv''@;'; put 'put ''Ij09PXouc3Vic3RyKC0xKXx8Ii8iPT09Ui5zdWJzdHIoei5sZW5ndGgsMSkpfX0sNzMyNDooTSxPLFIpPT57InVzZSBzdHJpY3QiO2NvbnN0IHo9Uig3NTIpO08ucGVybXV0ZURvbWFpbj1mdW5jdGlvbihLLEkpe2NvbnN0IGs9ei5nZXRQdWJsaWNTdWZmaXgoSyx7YWxsb3dTcGVjaWFsVXNl''@;'; put 'put ''RG9tYWluOkl9KTtpZighaylyZXR1cm4gbnVsbDtpZihrPT1LKXJldHVybltLXTsiLiI9PUsuc2xpY2UoLTEpJiYoSz1LLnNsaWNlKDAsLTEpKTtjb25zdCBFPUsuc2xpY2UoMCwtKGsubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJldmVyc2UoKTtsZXQgaj1rO2NvbnN0IFY9W2pdO2Zvcig7RS5s''@;'; put 'put ''ZW5ndGg7KWo9YCR7RS5zaGlmdCgpfS4ke2p9YCxWLnB1c2goaik7cmV0dXJuIFZ9fSw3NTI6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCB6PVIoNjI0NCksSz1bImxvY2FsIiwiZXhhbXBsZSIsImludmFsaWQiLCJsb2NhbGhvc3QiLCJ0ZXN0Il0sST1bImxvY2FsaG9zdCIsImludmFs''@;'; put 'put ''aWQiXTtPLmdldFB1YmxpY1N1ZmZpeD1mdW5jdGlvbihrLEU9e30pe2NvbnN0IGo9ay5zcGxpdCgiLiIpLFY9altqLmxlbmd0aC0xXSxZPSEhRS5pZ25vcmVFcnJvcjtpZihFLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmSy5pbmNsdWRlcyhWKSl7aWYoai5sZW5ndGg+MSlyZXR1cm5gJHtqW2ou''@;'; put 'put ''bGVuZ3RoLTJdfS4ke1Z9YDtpZihJLmluY2x1ZGVzKFYpKXJldHVybmAke1Z9YH1pZighWSYmSy5pbmNsdWRlcyhWKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZpeCAiJHtWfSIgd2hpY2ggaXMgYSBzcGVjaWFsIHVzZSBkb21haW4u''@;'; put 'put ''IFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gei5nZXQoayl9fSwyMjI0OihNLE8pPT57InVzZSBzdHJpY3QiO08ueT1jbGFzc3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZShSLHosSyxJKXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoUix6LEssSSl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50''@;'; put 'put ''ZWQiKX1wdXRDb29raWUoUix6KXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoUix6LEspe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZShSLHosSyxJKXt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKFIseixLKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQWxsQ29va2llcyhSKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFs''@;'; put 'put ''bENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyhSKXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBzZXJpYWxpemVkKSIpfX19LDEyNjk6KE0sTyxSKT0+e2Z1bmN0aW9uIHoo''@;'; put 'put ''KXt0cnl7cmV0dXJuIFIoOTUzOSl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEsoKXtyZXR1cm4gU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKX1PLmdldFV0aWxJbnNwZWN0PWZ1bmN0aW9uKEksaz17fSl7Y29uc3QgRT0oay5yZXF1aXJlVXRpbHx8eikoKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oaixWLEIpe3JldHVybiBFP0UuaW5zcGVjdChqLFYsQik6SShqKX19LE8uZ2V0Q3VzdG9tSW5zcGVjdFN5bWJvbD1mdW5jdGlvbihJPXt9KXtyZXR1cm4oSS5sb29rdXBDdXN0b21JbnNwZWN0U3ltYm9sfHxLKSgpfHxmdW5jdGlvbihrKXtjb25zdCBFPShrLnJlcXVp''@;'; put 'put ''cmVVdGlsfHx6KSgpO3JldHVybiBFP0UuaW5zcGVjdC5jdXN0b206bnVsbH0oSSl9fSw3NjUyOihNLE8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFIoayl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGt9ZnVuY3Rpb24geihrKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGt8fGsgaW5zdGFu''@;'; put 'put ''Y2VvZiBTdHJpbmd9ZnVuY3Rpb24gSyhrKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PXRvU3RyaW5nLmNhbGwoayl9Y2xhc3MgSSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKC4uLkUpe3N1cGVyKC4uLkUpfX1PLlBhcmFtZXRlckVycm9yPUksTy5pc0Z1bmN0aW9uPVIsTy5pc05vbkVt''@;'; put 'put ''cHR5U3RyaW5nPWZ1bmN0aW9uKGspe3JldHVybiB6KGspJiYiIiE9PWt9LE8uaXNEYXRlPWZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbihFLGope3RyeXtyZXR1cm4gRSBpbnN0YW5jZW9mIGp9Y2F0Y2h7cmV0dXJuITF9fShrLERhdGUpJiYibnVtYmVyIj09dHlwZW9mKEU9ay5nZXRUaW1l''@;'; put 'put ''KCkpJiZFJTE9PTA7dmFyIEV9LE8uaXNFbXB0eVN0cmluZz1mdW5jdGlvbihrKXtyZXR1cm4iIj09PWt8fGsgaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09ay50b1N0cmluZygpfSxPLmlzU3RyaW5nPXosTy5pc09iamVjdD1LLE8udmFsaWRhdGU9ZnVuY3Rpb24oayxFLGope2lmKFIoRSl8fChq''@;'; put 'put ''PUUsRT1udWxsKSxLKGopfHwoaj17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhayl7aWYoIUUpdGhyb3cgbmV3IEkoaik7RShuZXcgSShqKSl9fX0sNDU2Ok09PntNLmV4cG9ydHM9IjQuMS4zIn0sNzA0MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLmZyb21DYWxsYmFjaz1mdW5jdGlvbihSKXty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoeixLKT0+e2FyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoXT0oSSxrKT0+e2lmKEkpcmV0dXJu''@;'; put 'put ''IEsoSSk7eihrKX0sYXJndW1lbnRzLmxlbmd0aCsrLFIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7Ui5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9LE8uZnJvbVByb21pc2U9ZnVuY3Rpb24oUil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5j''@;'; put 'put ''dGlvbigpe2NvbnN0IHo9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHopcmV0dXJuIFIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxhcmd1bWVudHMubGVuZ3RoLS0sUi5hcHBseSh0''@;'; put 'put ''aGlzLGFyZ3VtZW50cykudGhlbihLPT56KG51bGwsSykseil9LCJuYW1lIix7dmFsdWU6Ui5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9u''@;'; put 'put ''KFYpe2Zvcih2YXIgQixZPTEsWD1hcmd1bWVudHMubGVuZ3RoO1k8WDtZKyspZm9yKHZhciBVIGluIEI9YXJndW1lbnRzW1ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLFUpJiYoVltVXT1CW1VdKTtyZXR1cm4gVn0sei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEs9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsQixZLFgpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKFUscSl7ZnVuY3Rpb24gZWUoc2Upe3RyeXtvZShYLm5leHQoc2UpKX1jYXRjaChoZSl7cShoZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7b2UoWC50aHJvdyhz''@;'; put 'put ''ZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gb2Uoc2Upe3ZhciBoZTtzZS5kb25lP1Uoc2UudmFsdWUpOihoZT1zZS52YWx1ZSxoZSBpbnN0YW5jZW9mIFk/aGU6bmV3IFkoZnVuY3Rpb24odWUpe3VlKGhlKX0pKS50aGVuKGVlLHRlKX1vZSgoWD1YLmFwcGx5KFYsQnx8W10pKS5uZXh0''@;'; put 'put ''KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVixCKXt2YXIgWSxYLFUscSxlZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZVWzBdKXRocm93IFVbMV07cmV0dXJuIFVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gcT17bmV4dDp0ZSgwKSx0aHJvdzp0''@;'; put 'put ''ZSgxKSxyZXR1cm46dGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihxW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHE7ZnVuY3Rpb24gdGUob2Upe3JldHVybiBmdW5jdGlvbihzZSl7cmV0dXJuIGZ1bmN0aW9uKGhlKXtpZihZKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2VlOyl0cnl7aWYoWT0xLFgmJihVPTImaGVbMF0/WC5yZXR1cm46aGVbMF0/WC50aHJvd3x8KChVPVgucmV0dXJuKSYmVS5jYWxsKFgpLDApOlgubmV4dCkmJiEoVT1VLmNhbGwoWCxoZVsxXSkpLmRvbmUp''@;'; put 'put ''cmV0dXJuIFU7c3dpdGNoKFg9MCxVJiYoaGU9WzImaGVbMF0sVS52YWx1ZV0pLGhlWzBdKXtjYXNlIDA6Y2FzZSAxOlU9aGU7YnJlYWs7Y2FzZSA0OnJldHVybiBlZS5sYWJlbCsrLHt2YWx1ZTpoZVsxXSxkb25lOiExfTtjYXNlIDU6ZWUubGFiZWwrKyxYPWhlWzFdLGhlPVswXTtjb250aW51''@;'; put 'put ''ZTtjYXNlIDc6aGU9ZWUub3BzLnBvcCgpLGVlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChVPShVPWVlLnRyeXMpLmxlbmd0aD4wJiZVW1UubGVuZ3RoLTFdKXx8NiE9PWhlWzBdJiYyIT09aGVbMF0pKXtlZT0wO2NvbnRpbnVlfWlmKDM9PT1oZVswXSYmKCFVfHxoZVsxXT5V''@;'; put 'put ''WzBdJiZoZVsxXTxVWzNdKSl7ZWUubGFiZWw9aGVbMV07YnJlYWt9aWYoNj09PWhlWzBdJiZlZS5sYWJlbDxVWzFdKXtlZS5sYWJlbD1VWzFdLFU9aGU7YnJlYWt9aWYoVSYmZWUubGFiZWw8VVsyXSl7ZWUubGFiZWw9VVsyXSxlZS5vcHMucHVzaChoZSk7YnJlYWt9VVsyXSYmZWUub3BzLnBv''@;'; put 'put ''cCgpLGVlLnRyeXMucG9wKCk7Y29udGludWV9aGU9Qi5jYWxsKFYsZWUpfWNhdGNoKHVlKXtoZT1bNix1ZV0sWD0wfWZpbmFsbHl7WT1VPTB9aWYoNSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm57dmFsdWU6aGVbMF0/aGVbMV06dm9pZCAwLGRvbmU6ITB9fShbb2Usc2VdKX19fTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Db250ZXh0TWFuYWdlcj12b2lkIDA7dmFyIGs9Uig1OTI4KSxFPVIoOTc3OCksaj1mdW5jdGlvbigpe2Z1bmN0aW9uIFYoQixZKXt0aGlzLnNlcnZlclVybD1CLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuZGVm''@;'; put 'put ''YXVsdENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMg''@;'; put 'put ''TW9kZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29u''@;'; put 'put ''dGV4dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdl''@;'; put 'put ''ciBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sQiYmKDAsay5pc1VybCkoQil9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwiZ2V0RGVmYXVsdENv''@;'; put 'put ''bXB1dGVDb250ZXh0cyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJnZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cyIse2dl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLFYucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihCKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgWTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIiksQikuY2F0Y2goZnVuY3Rpb24oVSl7''@;'; put 'put ''dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0cy4gIil9KV07Y2FzZSAxOnJldHVyblsyLCgoWT1YLnNlbnQoKS5yZXN1bHQpJiZZLml0ZW1zP1kuaXRlbXM6W10pLm1hcChmdW5jdGlvbihVKXtyZXR1cm57Y3JlYXRlZEJ5OlUu''@;'; put 'put ''Y3JlYXRlZEJ5LGlkOlUuaWQsbmFtZTpVLm5hbWUsdmVyc2lvbjpVLnZlcnNpb24sYXR0cmlidXRlczp7fX19KV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbihCKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWTtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMCIpLEIpLmNhdGNoKGZ1bmN0aW9uKFUpe3Rocm93KDAs''@;'; put 'put ''RS5wcmVmaXhNZXNzYWdlKShVLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsKChZPVguc2VudCgpLnJlc3VsdCkmJlkuaXRlbXM/WS5pdGVtczpbXSkubWFwKGZ1bmN0aW9uKFUpe3JldHVybntjcmVhdGVkQnk6VS5jcmVhdGVk''@;'; put 'put ''QnksaWQ6VS5pZCxuYW1lOlUubmFtZSx2ZXJzaW9uOlUudmVyc2lvbixhdHRyaWJ1dGVzOnt9fX0pXX19KX0pfSxWLnByb3RvdHlwZS5jcmVhdGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihCLFksWCxVLHEsZWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0''@;'; put 'put ''ZSxvZSxzZSxoZSx1ZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEIpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiQ29tcHV0ZSBjb250''@;'; put 'put ''ZXh0ICciLmNvbmNhdChCLCInIGFscmVhZHkgZXhpc3RzLiIpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0cyhxKV07Y2FzZSAxOmlmKGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3JldHVybiBHLm5hbWU9PT1CfSkpdGhyb3cgbmV3IEVycm9yKCJDb21wdXRlIGNvbnRleHQgJyIuY29u''@;'; put 'put ''Y2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBZP3RoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoWSk/WzMsNF06WzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHEpXTpbMyw0XTtjYXNlIDI6cmV0dXJuIGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3Jl''@;'; put 'put ''dHVybiBHLm5hbWU9PT1ZfSk/WzMsNF06KHRlPSJUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgIi5jb25jYXQoWSksWzQsdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQoWSx0ZSwiZGlyZWN0IixxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0''@;'; put 'put ''aW5nIGxhdW5jaGVyIGNvbnRleHQuICIuY29uY2F0KEcpKX0pXSk7Y2FzZSAzOmlmKCEob2U9Y2Uuc2VudCgpKXx8IW9lLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO1k9b2UubmFtZSxjZS5sYWJlbD00O2Nhc2UgNDpyZXR1''@;'; put 'put ''cm4gc2U9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0scSYmKHNlLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChxKSksaGU9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfSxYJiYoaGU9eih6KHt9LGhlKSx7cnVuU2VydmVyQXM6WH0pKSx1ZT17bmFtZTpCLGxhdW5j''@;'; put 'put ''aENvbnRleHQ6e2NvbnRleHROYW1lOll8fCIifSxhdHRyaWJ1dGVzOmhlfSxlZSYmZWUubGVuZ3RoP3VlLmF1dGhvcml6ZWRVc2Vycz1lZTp1ZS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAsVSYmKHVlLmVudmlyb25tZW50PXthdXRvRXhlY0xpbmVzOlV9KSxbNCx0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzIiksdWUscSkuY2F0Y2goZnVuY3Rpb24oRyl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKEcsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGNvbXB1dGUgY29udGV4dC4gIil9KV07Y2FzZSA1''@;'; put 'put ''OnJldHVyblsyLGNlLnNlbnQoKS5yZXN1bHRdfX0pfSl9LFYucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1mdW5jdGlvbihCLFksWCxVKXtyZXR1cm4gdm9pZCAwPT09WCYmKFg9ImRpcmVjdCIpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWU7cmV0dXJu''@;'; put 'put ''IEkodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6aWYoIUIpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsIkxhdW5jaGVy''@;'; put 'put ''IGNvbnRleHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpLFs0LHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhVKV07Y2FzZSAxOmlmKHRlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKG9lKXtyZXR1cm4gb2UubmFtZT09PUJ9KSl0aHJvdyBuZXcgRXJyb3IoIkxhdW5jaGVyIGNvbnRl''@;'; put 'put ''eHQgJyIuY29uY2F0KEIsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBxPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LFUmJihxLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChVKSksZWU9e25hbWU6QixkZXNjcmlwdGlvbjpZLGxhdW5jaFR5cGU6WH0sWzQs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvbGF1bmNoZXIvY29udGV4dHMiKSxlZSxVKS5jYXRjaChmdW5jdGlvbihvZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKG9lLCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiAi''@;'; put 'put ''KX0pXTtjYXNlIDI6cmV0dXJuWzIsdGUuc2VudCgpLnJlc3VsdF19fSl9KX0sVi5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKEIsWSxYKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVSxxLGVlLHRlO3JldHVybiBJKHRoaXMsZnVuY3Rp''@;'; put 'put ''b24ob2Upe3N3aXRjaChvZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoQiksdGhpcy5pc0RlZmF1bHRDb250ZXh0KEIsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFs''@;'; put 'put ''bG93ZWQuIiwhMCksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShCLFgpXTtjYXNlIDE6cmV0dXJuKFU9b2Uuc2VudCgpKT9bMywzXTpbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChZLmlkLFgpXTtjYXNlIDI6VT1vZS5zZW50KCksb2UubGFiZWw9MztjYXNlIDM6cmV0dXJu''@;'; put 'put ''WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxYKS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3cgc2UmJjQwND09PXNlLnN0YXR1cz9uZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNh''@;'; put 'put ''dChCLCInIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuIikpOnNlfSldO2Nhc2UgNDpyZXR1cm4gcT1vZS5zZW50KCksdGU9cS5ldGFnLFs0LHRoaXMucmVxdWVzdENsaWVudC5wdXQoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0KChlZT1xLnJlc3VsdCkuaWQpLHooeih6KHt9LGVl''@;'; put 'put ''KSxZKSx7YXR0cmlidXRlczp6KHooe30sZWUuYXR0cmlidXRlcyksWS5hdHRyaWJ1dGVzKX0pLFgseyJJZi1NYXRjaCI6dGV9KV07Y2FzZSA1OnJldHVyblsyLG9lLnNlbnQoKV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24oQixZKXtyZXR1cm4g''@;'; put 'put ''Syh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWDtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFUpe3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsJy9jb21wdXRlL2NvbnRleHRzP2Zp''@;'; put 'put ''bHRlcj1lcShuYW1lLCAiJykuY29uY2F0KEIsJyIpJyksWSkuY2F0Y2goZnVuY3Rpb24ocSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKHEsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IG5hbWUuICIpfSldO2Nhc2UgMTppZighKFg9VS5zZW50KCkucmVzdWx0KXx8''@;'; put 'put ''IVguaXRlbXN8fCFYLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdChCLCInIHdhcyBub3QgZm91bmQgYXQgJyIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiJy4iKSk7cmV0dXJuWzIsWC5pdGVtc1swXV19fSl9KX0sVi5wcm90b3R5cGUuZ2V0Q29t''@;'; put 'put ''cHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKEIsWSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMu''@;'; put 'put ''c2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cy8iKS5jb25jYXQoQiksWSkuY2F0Y2goZnVuY3Rpb24oVSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKFUsIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsWC5zZW50KCku''@;'; put 'put ''cmVzdWx0XX19KX0pfSxWLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWCxVLHEsZWUsdGUsb2Usc2UsdWUsY2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5s''@;'; put 'put ''YWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLFk/LmFjY2Vzc190b2tlbikuY2F0Y2goZnVuY3Rpb24oYil7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGIs''@;'; put 'put ''IkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KV07Y2FzZSAxOlg9Ry5zZW50KCkucmVzdWx0LHE9W10sZWU9KFU9WC5pdGVtc3x8W10pLm1hcChmdW5jdGlvbihiKXt2YXIgRD1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEIo''@;'; put 'put ''InRlc3QtIi5jb25jYXQoYi5uYW1lKSxELGIubmFtZSxZLG51bGwsITEsITAsITApLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBIfSl9fSksdGU9W10sb2U9MCxzZT1lZSxHLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBvZTxzZS5sZW5ndGg/KGNlPSh1ZT10ZSkucHVzaCxbNCwoMCxzZVtvZV0p''@;'; put 'put ''KCldKTpbMyw1XTtjYXNlIDM6Y2UuYXBwbHkodWUsW0cuc2VudCgpXSksRy5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gb2UrKyxbMywyXTtjYXNlIDU6cmV0dXJuIHRlLmZvckVhY2goZnVuY3Rpb24oYixEKXtpZihiJiZiLmxvZyl0cnl7dmFyIE49IiIsZz1iLmxvZy5zcGxpdCgiXG4iKS5maW5k''@;'; put 'put ''KGZ1bmN0aW9uKEMpe3JldHVybiBDLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKX0pO2cmJihOPWcucmVwbGFjZSgiU1lTVVNFUklEPSIsIiIpLHEucHVzaCh7Y3JlYXRlZEJ5OlVbRF0uY3JlYXRlZEJ5LGlkOlVbRF0uaWQsbmFtZTpVW0RdLm5hbWUsdmVyc2lvbjpVW0RdLnZlcnNpb24sYXR0''@;'; put 'put ''cmlidXRlczp7c3lzVXNlcklkOk59fSkpfWNhdGNoKEMpe3Rocm93IEN9fSksWzIscV19fSl9KX0sVi5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oQixZKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgWCxVO3JldHVybiBJKHRoaXMs''@;'; put 'put ''ZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKEIpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChCLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBu''@;'; put 'put ''b3QgYWxsb3dlZC4iLCEwKSxYPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LFkmJihYLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChZKSksWzQsdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShCLFkpXTtjYXNlIDE6cmV0dXJuIFU9cS5zZW50KCksWzQsdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZSgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChVLmlkKSxZKV07Y2FzZSAyOnJldHVyblsyLHEuc2VudCgpXX19KX0pfSxWLnByb3RvdHlwZS52YWxpZGF0ZUNvbnRleHROYW1lPWZ1bmN0aW9uKEIpe2lm''@;'; put 'put ''KCFCKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpfSxWLnByb3RvdHlwZS5pc0RlZmF1bHRDb250ZXh0PWZ1bmN0aW9uKEIsWSxYLFUpe2lmKHZvaWQgMD09PVkmJihZPXRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cyksdm9pZCAwPT09WCYmKFg9IiIpLHZv''@;'; put 'put ''aWQgMD09PVUmJihVPSExKSxZLmluY2x1ZGVzKEIpKXRocm93IG5ldyBFcnJvcigiIi5jb25jYXQoWCkuY29uY2F0KFU/IlxuRGVmYXVsdCBjb250ZXh0czoiK1kubWFwKGZ1bmN0aW9uKHEsZWUpe3JldHVybiJcbiIuY29uY2F0KGVlKzEsIi4gIikuY29uY2F0KHEpfSk6IiIpKX0sVn0oKTtP''@;'; put 'put ''LkNvbnRleHRNYW5hZ2VyPWp9LDgzMDY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3Vl''@;'; put 'put ''KGVlLm5leHQoY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5j''@;'; put 'put ''dGlvbihiKXtiKEcpfSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cg''@;'; put 'put ''dGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0''@;'; put 'put ''aW9uIGhlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRo''@;'; put 'put ''cm93fHwoKHRlPWVlLnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1bMiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1''@;'; put 'put ''cm4gc2UubGFiZWwrKyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0''@;'; put 'put ''ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJl''@;'; put 'put ''YWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1sw''@;'; put 'put ''XSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fSxJPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWCxVLHEpe2lmKHF8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgZWUsdGU9MCxvZT1VLmxlbmd0aDt0''@;'; put 'put ''ZTxvZTt0ZSsrKSFlZSYmdGUgaW4gVXx8KGVlfHwoZWU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVSwwLHRlKSksZWVbdGVdPVVbdGVdKTtyZXR1cm4gWC5jb25jYXQoZWV8fEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFUpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNN''@;'; put 'put ''b2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTOUFwaUNsaWVudD12b2lkIDA7dmFyIGs9Uig3NzU3KSxFPVIoNjIzMCksaj1SKDc5NSksVj1SKDU5MjgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBYKFUscSxlZSl7dGhpcy5zZXJ2ZXJVcmw9VSx0aGlzLmpvYnNQYXRoPXEsVSYmKDAsVi5pc1VybCko''@;'; put 'put ''VSksdGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyBqLlNhczlSZXF1ZXN0Q2xpZW50KFUsZWUpfXJldHVybiBYLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX0sWC5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKFUpe1UmJih0''@;'; put 'put ''aGlzLnNlcnZlclVybD1VKX0sWC5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbihVLHEsZWUpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxvZSxzZSxoZSx1ZSxjZSxHO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwp''@;'; put 'put ''e2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQubG9naW4ocSxlZSx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBiLnNlbnQoKSx0ZT1bImRhdGEgX251bGxfOyIsImZpbGUgX3dlYm91dDsiLCJwdXQgJ0V4ZWN1dGVkIHNhc2pzIHJ1bic7IiwicnVuOyJdLG9lPVkoSShJ''@;'; put 'put ''KFtdLFUsITApLHRlLCEwKS5qb2luKCJcbiIpKSxzZT0iL1VzZXIgRm9sZGVycy8iLmNvbmNhdChxLCIvTXkgRm9sZGVyL3Nhc2pzL3J1bm5lciIpLGhlPSJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK29lLmdldEJvdW5kYXJ5KCksdWU9b2UuZ2V0TGVuZ3RoU3luYygpLGNlPXsi''@;'; put 'put ''Y2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6aGUsIkNvbnRlbnQtTGVuZ3RoIjp1ZSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0sRz0iIi5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrc2UrIiZfZGVidWc9''@;'; put 'put ''bG9nIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoRyxvZSx2b2lkIDAsaGUsY2UpXTtjYXNlIDI6cmV0dXJuWzIsYi5zZW50KCkucmVzdWx0XX19KX0pfSxYfSgpO08uU0FTOUFwaUNsaWVudD1CO3ZhciBZPWZ1bmN0aW9uKFgpe3ZhciBVPW5ldyBFLHE9InNhc2pzLWV4ZWN1dGUtc2Fz''@;'; put 'put ''OS0iLmNvbmNhdCgoMCxrLmdlbmVyYXRlVGltZXN0YW1wKSgiIiksIi5zYXMiKTtyZXR1cm4gVS5hcHBlbmQocSxYLHtmaWxlbmFtZTpxLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLFV9fSw5ODIxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEw''@;'; put 'put ''OCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oY2UsRyxiLEQpe3JldHVybiBuZXcoYnx8KGI9UHJvbWlzZSkpKGZ1bmN0aW9uKEgsTil7ZnVuY3Rpb24gZyh2KXt0cnl7UyhELm5leHQodikpfWNhdGNoKHApe04ocCl9fWZ1bmN0aW9uIEModil7dHJ5e1MoRC50aHJvdyh2KSl9''@;'; put 'put ''Y2F0Y2gocCl7TihwKX19ZnVuY3Rpb24gUyh2KXt2YXIgcDt2LmRvbmU/SCh2LnZhbHVlKToocD12LnZhbHVlLHAgaW5zdGFuY2VvZiBiP3A6bmV3IGIoZnVuY3Rpb24odyl7dyhwKX0pKS50aGVuKGcsQyl9UygoRD1ELmFwcGx5KGNlLEd8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMu''@;'; put 'put ''X19nZW5lcmF0b3J8fGZ1bmN0aW9uKGNlLEcpe3ZhciBiLEQsSCxOLGc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmSFswXSl0aHJvdyBIWzFdO3JldHVybiBIWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIE49e25leHQ6QygwKSx0aHJvdzpDKDEpLHJldHVybjpDKDIpfSwiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoTltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOO2Z1bmN0aW9uIEMoUyl7cmV0dXJuIGZ1bmN0aW9uKHYpe3JldHVybiBmdW5jdGlvbihwKXtpZihiKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJl''@;'; put 'put ''YWR5IGV4ZWN1dGluZy4iKTtmb3IoO2c7KXRyeXtpZihiPTEsRCYmKEg9MiZwWzBdP0QucmV0dXJuOnBbMF0/RC50aHJvd3x8KChIPUQucmV0dXJuKSYmSC5jYWxsKEQpLDApOkQubmV4dCkmJiEoSD1ILmNhbGwoRCxwWzFdKSkuZG9uZSlyZXR1cm4gSDtzd2l0Y2goRD0wLEgmJihwPVsyJnBb''@;'; put 'put ''MF0sSC52YWx1ZV0pLHBbMF0pe2Nhc2UgMDpjYXNlIDE6SD1wO2JyZWFrO2Nhc2UgNDpyZXR1cm4gZy5sYWJlbCsrLHt2YWx1ZTpwWzFdLGRvbmU6ITF9O2Nhc2UgNTpnLmxhYmVsKyssRD1wWzFdLHA9WzBdO2NvbnRpbnVlO2Nhc2UgNzpwPWcub3BzLnBvcCgpLGcudHJ5cy5wb3AoKTtjb250''@;'; put 'put ''aW51ZTtkZWZhdWx0OmlmKCEoKEg9KEg9Zy50cnlzKS5sZW5ndGg+MCYmSFtILmxlbmd0aC0xXSl8fDYhPT1wWzBdJiYyIT09cFswXSkpe2c9MDtjb250aW51ZX1pZigzPT09cFswXSYmKCFIfHxwWzFdPkhbMF0mJnBbMV08SFszXSkpe2cubGFiZWw9cFsxXTticmVha31pZig2PT09cFswXSYm''@;'; put 'put ''Zy5sYWJlbDxIWzFdKXtnLmxhYmVsPUhbMV0sSD1wO2JyZWFrfWlmKEgmJmcubGFiZWw8SFsyXSl7Zy5sYWJlbD1IWzJdLGcub3BzLnB1c2gocCk7YnJlYWt9SFsyXSYmZy5vcHMucG9wKCksZy50cnlzLnBvcCgpO2NvbnRpbnVlfXA9Ry5jYWxsKGNlLGcpfWNhdGNoKHcpe3A9WzYsd10sRD0w''@;'; put 'put ''fWZpbmFsbHl7Yj1IPTB9aWYoNSZwWzBdKXRocm93IHBbMV07cmV0dXJue3ZhbHVlOnBbMF0/cFsxXTp2b2lkIDAsZG9uZTohMH19KFtTLHZdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNWaXlhQXBpQ2xpZW50PXZvaWQgMDt2YXIg''@;'; put 'put ''RT1SKDU5MjgpLGo9Uig2MjMwKSxWPVIoMTM5NSksQj1SKDY5MDMpLFk9Uig2NzIpLFg9Uig5MDk3KSxVPVIoOTc3OCkscT1SKDEzNDMpLGVlPVIoNzA0KSx0ZT1SKDY0OTYpLG9lPVIoMTYyMiksc2U9UigzNTY5KSxoZT1SKDM2NiksdWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjZShHLGIsRCxI''@;'; put 'put ''KXt0aGlzLnNlcnZlclVybD1HLHRoaXMucm9vdEZvbGRlck5hbWU9Yix0aGlzLmNvbnRleHROYW1lPUQsdGhpcy5yZXF1ZXN0Q2xpZW50PUgsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgQi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHRO''@;'; put 'put ''YW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgWS5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsRyYmKDAsRS5pc1VybCkoRyl9cmV0dXJuIGNlLnByb3RvdHlwZS5hcHBl''@;'; put 'put ''bmRSZXF1ZXN0PWZ1bmN0aW9uKEcsYixEKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChHLGIsRCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oRyl7dGhp''@;'; put 'put ''cy5fZGVidWc9Ryx0aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1HKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxjZS5wcm90b3R5cGUuZ2V0Sm9ic0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbigpe3ZhciBiO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7c3dpdGNoKEQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChHKTpHLHRoaXMuZm9sZGVyTWFwLmdldChi''@;'; put 'put ''KT9bMix0aGlzLmZvbGRlck1hcC5nZXQoYildOls0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoYildO2Nhc2UgMTpyZXR1cm4gRC5zZW50KCksWzIsdGhpcy5mb2xkZXJNYXAuZ2V0KGIpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue3NlcnZlclVybDp0''@;'; put 'put ''aGlzLnNlcnZlclVybCxyb290Rm9sZGVyTmFtZTp0aGlzLnJvb3RGb2xkZXJOYW1lfX0sY2UucHJvdG90eXBlLnNldENvbmZpZz1mdW5jdGlvbihHLGIpe0cmJih0aGlzLnNlcnZlclVybD1HKSxiJiYodGhpcy5yb290Rm9sZGVyTmFtZT1iKX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250''@;'; put 'put ''ZXh0cz1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dHMoRyldO2Nhc2UgMTpy''@;'; put 'put ''ZXR1cm5bMixiLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0TWFuYWdlci5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxjZS5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5j''@;'; put 'put ''dGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRMYXVuY2hlckNvbnRleHRzKEcpXTtjYXNlIDE6cmV0dXJuWzIs''@;'; put 'put ''Yi5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGI7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBi''@;'; put 'put ''PXRoaXMuZXhlY3V0ZVNjcmlwdC5iaW5kKHRoaXMpLFs0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGIsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZVNlc3Npb249ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxILE47cmV0dXJuIGsodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGImJihELkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNv''@;'; put 'put ''bmNhdChiKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLGIpXTtjYXNlIDE6aWYoSD1nLnNlbnQoKS5yZXN1bHQsIShOPUguaXRlbXMmJkguaXRlbXMubGVuZ3RoP0guaXRlbXMuZmluZChmdW5jdGlvbihDKXtyZXR1cm4gQy5uYW1l''@;'; put 'put ''PT09R30pOm51bGwpKXRocm93IG5ldyBFcnJvcigiRXhlY3V0aW9uIGNvbnRleHQgIi5jb25jYXQoRywiIG5vdCBmb3VuZC4iKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0KE4uaWQsIi9zZXNzaW9ucyIpLHt9LGIpXTtjYXNl''@;'; put 'put ''IDI6cmV0dXJuWzIsZy5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyxiLEQsSCxOLGcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oQyl7c3dpdGNoKEMu''@;'; put 'put ''bGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KEcsYixELEgsTixnKV07Y2FzZSAxOnJldHVyblsyLEMuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKEcsYixELEgpe3Jl''@;'; put 'put ''dHVybiB2b2lkIDA9PT1EJiYoRD0iZGlyZWN0IiksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoRyxi''@;'; put 'put ''LEQsSCldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJl''@;'; put 'put ''bCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KEcsYixEKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChHLGIpXTtjYXNlIDE6cmV0dXJuWzIsRC5zZW50KCldfX0pfSl9LGNlLnByb3Rv''@;'; put 'put ''dHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKEcsYixELEgsTixnLEMsUyx2LHAsdyl7cmV0dXJuIHZvaWQgMD09PU4mJihOPW51bGwpLHZvaWQgMD09PWcmJihnPSExKSx2b2lkIDA9PT1DJiYoQz0hMSksdm9pZCAwPT09UyYmKFM9ITApLHZvaWQgMD09PXAmJihwPSExKSxJKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSil7cmV0dXJuWzIsKDAsb2UuZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxHLGIsRCxILE4sZyxDLFMsdixwLHcp''@;'; put 'put ''XX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgi''@;'; put 'put ''L2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KEcpLGIpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIEgucmVzdWx0fSldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oRyxiLEQsSCxOKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDppZighRCYmIUgpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1''@;'; put 'put ''cm4gSHx8IUQ/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoRCxOKV07Y2FzZSAxOkg9Uy5zZW50KCksUy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gZz17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOidmaWxlbmFtZT0iJy5jb25j''@;'; put 'put ''YXQoRywnIjsnKX0sKEM9bmV3IGopLmFwcGVuZCgiZmlsZSIsYixHKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0iLmNvbmNhdChILCImdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWQiKSxDLE4sIm11bHRpcGFydC9mb3JtLWRhdGE7''@;'; put 'put ''IGJvdW5kYXJ5PSIrQy5fYm91bmRhcnksZyldO2Nhc2UgMzpyZXR1cm5bMixTLnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24oRyxiLEQsSCxOKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdix3''@;'; put 'put ''O3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSil7c3dpdGNoKEoubGFiZWwpe2Nhc2UgMDppZihnPXoubG9nZ2VyfHxLLCFiJiYhRCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBEfHwhYj9bMyw2XTpbNCx0aGlz''@;'; put 'put ''LmdldEZvbGRlclVyaShiLEgpXTtjYXNlIDE6aWYoRD1KLnNlbnQoKSlyZXR1cm5bMywzXTtpZihnLmluZm8oIlBhcmVudCBmb2xkZXIgYXQgcGF0aCAnIi5jb25jYXQoYiwiJyBpcyBub3QgcHJlc2VudC4iKSksQz1iLnN1YnN0cmluZygwLGIubGFzdEluZGV4T2YoIi8iKSksUz0iIi5jb25j''@;'; put 'put ''YXQoYi5zcGxpdCgiLyIpLnBvcCgpKSwiIj09PUMpdGhyb3cgbmV3IFYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IoYix0aGlzLnNlcnZlclVybCxIKTtyZXR1cm4gZy5pbmZvKCJDcmVhdGluZyBwYXJlbnQgZm9sZGVyOlxuJyIuY29uY2F0KFMsIicgaW4gJyIpLmNvbmNhdChDLCInIikpLFs0''@;'; put 'put ''LHRoaXMuY3JlYXRlRm9sZGVyKFMsQyx2b2lkIDAsSCldO2Nhc2UgMjpyZXR1cm4gdj1KLnNlbnQoKSxnLmluZm8oIlBhcmVudCBmb2xkZXIgJyIuY29uY2F0KFMsIicgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIikpLEQ9Ii9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQodi5pZCks''@;'; put 'put ''WzMsNl07Y2FzZSAzOnJldHVybiBOP1s0LHRoaXMuZ2V0Rm9sZGVyVXJpKGIrIi8iK0csSCldOlszLDZdO2Nhc2UgNDpyZXR1cm4gSi5zZW50KCk/WzQsdGhpcy5kZWxldGVGb2xkZXIoYisiLyIrRyxIKV06WzMsNl07Y2FzZSA1Okouc2VudCgpLEoubGFiZWw9NjtjYXNlIDY6cmV0dXJuWzQs''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEQpLHtuYW1lOkcsdHlwZToiZm9sZGVyIn0sSCkuY2F0Y2goZnVuY3Rpb24obmUpe3ZhciBkZT1uZS5tZXNzYWdlLGZlPW5lLnJlc3BvbnNlO2lmKGRlJiZmZSYmZmUuZGF0''@;'; put 'put ''YSYmZmUuZGF0YS5tZXNzYWdlKXt2YXIgeGU9ZmUuc3RhdHVzLExlPVtkZSxmZS5kYXRhLm1lc3NhZ2VdLm1hcChmdW5jdGlvbihGZSl7cmV0dXJuL1wuJC8udGVzdChGZSk/RmU6IiIuY29uY2F0KEZlLCIuIil9KTt0aHJvdyBOfHw0MDkhPT14ZXx8TGUucHVzaCgnVG8gb3ZlcnJpZGUsIHBs''@;'; put 'put ''ZWFzZSBzZXQgImlzRm9yY2VkIiB0byAidHJ1ZSIuJyksTGUuam9pbigiICIpfXRocm93IG5lfSldO2Nhc2UgNzpyZXR1cm4gdz1KLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCgiIi5jb25jYXQoYiwiLyIpLmNvbmNhdChHKSxIKV07Y2FzZSA4OnJldHVybiBKLnNl''@;'; put 'put ''bnQoKSxbMix3XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbihHLGIsRCxILE4pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZighRCYm''@;'; put 'put ''IUgpdGhyb3cgbmV3IEVycm9yKCJQYXRoIHRvIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gSHx8IUQ/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoRCxOKV07Y2FzZSAxOkg9Zy5zZW50KCksZy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCx0aGlz''@;'; put 'put ''LnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9IikuY29uY2F0KEgpLHtuYW1lOkcscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFD''@;'; put 'put ''VEVSIixkZWZhdWx0VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6Yn0sTildO2Nhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBiLEQ9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIGI9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0iKS5jb25jYXQoRywiJnJlc3BvbnNlX3R5cGU9Y29kZSIp''@;'; put 'put ''LFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoYix2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKE4pe3JldHVybiBOLnJlc3VsdH0pLnRoZW4oZnVuY3Rpb24oTil7cmV0dXJuIEkoRCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQyxTLHY7cmV0dXJuIGsodGhpcyxm''@;'; put 'put ''dW5jdGlvbihwKXtzd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBnPSIiLCgwLFguaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKE4pP1s0LHRoaXMucmVxdWVzdENsaWVudC5hdXRob3JpemUoTildOlszLDJdO2Nhc2UgMTpyZXR1cm4gQz1wLnNlbnQoKSxTPUMuc3BsaXQoIjxib2R5PiIp''@;'; put 'put ''WzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLFsyLGc9di5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dF07Y2FzZSAyOnJldHVybiBTPU4uc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2Jv''@;'; put 'put ''ZHk+IilbMF0sKHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLHYmJihnPXYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQpLFsyLGddfX0pfSl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBudWxsfSldO2Nhc2UgMTpyZXR1cm5bMixI''@;'; put 'put ''LnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKEcsYixEKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLHNlLmdldEFjY2Vzc1Rva2VuRm9yVml5YSkodGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LEcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihHLGIsRCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXtyZXR1cm5bMiwoMCxoZS5yZWZyZXNoVG9rZW5z''@;'; put 'put ''Rm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xpZW50LEcsYixEKV19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsSDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxh''@;'; put 'put ''YmVsKXtjYXNlIDA6cmV0dXJuIEQ9dGhpcy5zZXJ2ZXJVcmwrIi9vYXV0aC9jbGllbnRzLyIuY29uY2F0KEcpLEg9e30sYiYmKEguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGIpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKEQsYildO2Nhc2UgMTpyZXR1cm5bMixOLnNl''@;'; put 'put ''bnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlQ29tcHV0ZUpvYj1mdW5jdGlvbihHLGIsRCxILE4sZyxDLFMsdixwKXtyZXR1cm4gdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PUMmJihDPSExKSx2b2lkIDA9PT12JiYodj0hMSksSSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgdyxKLG5lLGRlLGZlLHhlLExlLEZlLE9lLGplLFdlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB3PShOfHx7fSkuYWNjZXNzX3Rva2VuLE4/WzQsKDAsZWUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGll''@;'; put 'put ''bnQsTildOlszLDJdO2Nhc2UgMTp3PUtlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sS2UubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoRykmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91''@;'; put 'put ''dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZSIpO3JldHVybiBKPUcuc3BsaXQoIi8iKSxuZT1KLnBvcCgpLGRlPUouam9pbigiLyIpLGZlPSgwLEUuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KGRlKTpkZSxbNCx0aGlz''@;'; put 'put ''LnBvcHVsYXRlRm9sZGVyTWFwKGZlLHcpLmNhdGNoKGZ1bmN0aW9uKFllKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWWUsIkVycm9yIHdoaWxlIHBvcHVsYXRpbmcgZm9sZGVyIG1hcC4gIil9KV07Y2FzZSAzOmlmKEtlLnNlbnQoKSwhKHhlPXRoaXMuZm9sZGVyTWFwLmdldChmZSkpKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiVGhlIGZvbGRlciAnIi5jb25jYXQoZmUsIicgd2FzIG5vdCBmb3VuZCBvbiAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInIikpO2lmKCEoTGU9eGU/LmZpbmQoZnVuY3Rpb24oWWUpe3JldHVybiBZZS5uYW1lPT09bmV9KSkpdGhyb3cgbmV3IEVycm9yKCJKb2Ig''@;'; put 'put ''d2FzIG5vdCBmb3VuZC4iKTtpZihGZT1MZT8uY29kZSlyZXR1cm5bMyw1XTtpZighKE9lPUxlPy5saW5rcy5maW5kKGZ1bmN0aW9uKFllKXtyZXR1cm4iZ2V0UmVzb3VyY2UiPT09WWUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiVVJJIG9mIGpvYiBkZWZpbml0aW9uIHdhcyBub3QgZm91bmQu''@;'; put 'put ''Iik7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChPZS5ocmVmKSx3KS5jYXRjaChmdW5jdGlvbihZZSl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKFllLCJFcnJvciB3aGlsZSBnZXR0aW5nIGpvYiBkZWZpbml0aW9uLiAi''@;'; put 'put ''KX0pXTtjYXNlIDQ6amU9S2Uuc2VudCgpLnJlc3VsdCxMZS5jb2RlPUZlPWplLmNvZGUsS2UubGFiZWw9NTtjYXNlIDU6cmV0dXJuIEZlfHwoRmU9IiIpLFdlPUZlLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5zcGxpdCgiXG4iKSxbNCx0aGlzLmV4ZWN1dGVTY3JpcHQoRyxXZSxiLE4sSCxELEMs''@;'; put 'put ''ZyxTLHYscCldO2Nhc2UgNjpyZXR1cm5bMixLZS5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKEcsYixELEgsTil7dmFyIGcsQyxTO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB2LHAsdyxKLG5lLGRlLGZlLHhlLExlLEZl''@;'; put 'put ''LE9lLGplLFdlLEtlLFllLEplLGx0LFBlLGJlLEFlLFRlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ocWUpe3N3aXRjaChxZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB2PShOfHx7fSkuYWNjZXNzX3Rva2VuLE4/WzQsKDAsZWUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsTildOlszLDJd''@;'; put 'put ''O2Nhc2UgMTp2PXFlLnNlbnQoKS5hY2Nlc3NfdG9rZW4scWUubGFiZWw9MjtjYXNlIDI6aWYoKDAsRS5pc1JlbGF0aXZlUGF0aCkoRykmJiF0aGlzLnJvb3RGb2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5n''@;'; put 'put ''IGEgcm9vdCBmb2xkZXIgbmFtZS4iKTtyZXR1cm4gcD1HLnNwbGl0KCIvIiksdz1wLnBvcCgpLEo9cC5qb2luKCIvIiksbmU9KDAsRS5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQoSik6SixbNCx0aGlzLnBvcHVsYXRlRm9sZGVy''@;'; put 'put ''TWFwKG5lLHYpXTtjYXNlIDM6aWYocWUuc2VudCgpLCEoZGU9dGhpcy5mb2xkZXJNYXAuZ2V0KG5lKSkpdGhyb3cgbmV3IEVycm9yKCJUaGUgZm9sZGVyICciLmNvbmNhdChuZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIicuIikpO3JldHVybiBmZT1k''@;'; put 'put ''ZT8uZmluZChmdW5jdGlvbihYZSl7cmV0dXJuIFhlLm5hbWU9PT13fSkseGU9W10sSCYmT2JqZWN0LmtleXMoSCkubGVuZ3RoP1s0LHRoaXMudXBsb2FkVGFibGVzKEgsdildOlszLDVdO2Nhc2UgNDp4ZT1xZS5zZW50KCkscWUubGFiZWw9NTtjYXNlIDU6aWYoIWZlKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiSm9iIHdhcyBub3QgZm91bmQuIik7cmV0dXJuIExlPW51bGw9PT0oZz1mZT8ubGlua3MuZmluZChmdW5jdGlvbihYZSl7cmV0dXJuImdldFJlc291cmNlIj09PVhlLnJlbH0pKXx8dm9pZCAwPT09Zz92b2lkIDA6Zy5ocmVmLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0''@;'; put 'put ''KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoTGUpLHYpXTtjYXNlIDY6cmV0dXJuIEZlPXFlLnNlbnQoKS5yZXN1bHQsT2U9e19jb250ZXh0TmFtZTpiLF9wcm9ncmFtOiIiLmNvbmNhdChuZSwiLyIpLmNvbmNhdCh3KSxfd2ViaW5fZmlsZV9jb3VudDp4ZS5sZW5ndGgsX09NSVRKU09OTElTVElO''@;'; put 'put ''RzohMCxfT01JVEpTT05MT0c6ITAsX09NSVRTRVNTSU9OUkVTVUxUUzohMCxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH0sRCYmKE9lLl9PTUlUVEVYVExPRz0iZmFsc2UiLE9lLl9PTUlUU0VTU0lPTlJFU1VMVFM9ImZhbHNlIixPZS5fREVCVUc9MTMxKSx4ZS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFhlLFVlKXtPZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChVZSsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdChYZS5maWxlLmlkKSxPZVsiX3dlYmluX25hbWUiLmNvbmNhdChVZSsxKV09WGUudGFibGVOYW1lfSksamU9e25hbWU6ImV4ZWMtIi5jb25jYXQodyksZGVzY3Jp''@;'; put 'put ''cHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGpvYkRlZmluaXRpb246RmUsYXJndW1lbnRzOk9lfSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icz9fYWN0aW9uPXdhaXQiKSxqZSx2KV07Y2FzZSA3OnJldHVybiBX''@;'; put 'put ''ZT1xZS5zZW50KCkucmVzdWx0LFs0LHRoaXMucG9sbEpvYlN0YXRlKFdlLE4pLmNhdGNoKGZ1bmN0aW9uKFhlKXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkoWGUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KV07Y2FzZSA4OnJldHVybiBLZT1xZS5zZW50KCksWzQsdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JFeGVjdXRpb24vam9icy8iKS5jb25jYXQoV2UuaWQpLHYpXTtjYXNlIDk6cmV0dXJuIFllPXFlLnNlbnQoKS5yZXN1bHQsUGU9WWUucmVzdWx0c1siX3dlYm91dC5qc29uIl0sYmU9WWUubGlua3MuZmlu''@;'; put 'put ''ZChmdW5jdGlvbihYZSl7cmV0dXJuImxvZyI9PT1YZS5yZWx9KSxQZT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KFBlLCIvY29udGVudCIpLHYsInRleHQvcGxhaW4iKV06WzMsMTFdO2Nhc2UgMTA6SmU9cWUuc2VudCgpLHFlLmxh''@;'; put 'put ''YmVsPTExO2Nhc2UgMTE6cmV0dXJuIEQmJmJlP1s0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoYmUuaHJlZiwiL2NvbnRlbnQiKSx2KS50aGVuKGZ1bmN0aW9uKFhlKXtyZXR1cm4gWGUucmVzdWx0Lml0ZW1zLm1hcChmdW5jdGlvbihV''@;'; put 'put ''ZSl7cmV0dXJuIFVlLmxpbmV9KS5qb2luKCJcbiIpfSldOlszLDEzXTtjYXNlIDEyOmx0PXFlLnNlbnQoKSxxZS5sYWJlbD0xMztjYXNlIDEzOmlmKCJmYWlsZWQiPT09S2UpdGhyb3cgbmV3IFYuSm9iRXhlY3V0aW9uRXJyb3IobnVsbD09PShDPVllLmVycm9yKXx8dm9pZCAwPT09Qz92b2lk''@;'; put 'put ''IDA6Qy5lcnJvckNvZGUsbnVsbD09PShTPVllLmVycm9yKXx8dm9pZCAwPT09Uz92b2lkIDA6Uy5tZXNzYWdlLGx0KTtyZXR1cm4gQWU9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzpsdH0sKFRlPVllLmVycm9yKSYmKEFlLmVycm9yPVRlKSxbMixBZV19fSl9KX0sY2UucHJvdG90eXBlLnBvcHVs''@;'; put 'put ''YXRlRm9sZGVyTWFwPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEQsTixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD0oMCxFLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25j''@;'; put 'put ''YXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChHKTpHLHRoaXMuZm9sZGVyTWFwLmdldChEKT9bMl06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQoIi9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK0QpLGIpLmNhdGNoKGZ1bmN0aW9uKHYpe3Rocm93KDAs''@;'; put 'put ''VS5wcmVmaXhNZXNzYWdlKSh2LCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KV07Y2FzZSAxOmlmKCEoTj1TLnNlbnQoKS5yZXN1bHQpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhdGggIi5jb25jYXQoRCwiIGRvZXMgbm90IGV4aXN0IG9uICIpLmNvbmNhdCh0aGlzLnNlcnZlclVy''@;'; put 'put ''bCkpO3JldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoTi5pZCwiL21lbWJlcnM/bGltaXQ9IikuY29uY2F0KE4ubWVtYmVyQ291bnQ8NTAwPzUwMDpOLm1lbWJlckNvdW50KSxiKS5jYXRjaChmdW5jdGlvbih2KXt0aHJvdygwLFUucHJl''@;'; put 'put ''Zml4TWVzc2FnZSkodiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBtZW1iZXJzLiAiKX0pXTtjYXNlIDI6cmV0dXJuIGc9Uy5zZW50KCkucmVzdWx0LHRoaXMuZm9sZGVyTWFwLnNldChELGcuaXRlbXMpLFsyXX19KX0pfSxjZS5wcm90b3R5cGUucG9sbEpvYlN0YXRlPWZ1bmN0aW9uKEcsYixEKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLHEucG9sbEpvYlN0YXRlKSh0aGlzLnJlcXVlc3RDbGllbnQsRyx0aGlzLmRlYnVnLGIsRCldfSl9KX0sY2UucHJvdG90eXBlLnVwbG9hZFRhYmxlcz1mdW5j''@;'; put 'put ''dGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuWzIsKDAsdGUudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsRyxiKV19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Rm9sZGVyRGV0YWlscz1m''@;'; put 'put ''dW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBELEg7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEPSgwLEUuaXNVcmkpKEcpP0c6Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0i''@;'; put 'put ''LmNvbmNhdChHKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEQpLGIpLmNhdGNoKGZ1bmN0aW9uKGcpe2lmKGcgaW5zdGFuY2VvZiBWLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgZztyZXR1cm57cmVzdWx0Om51bGx9fSldO2Nhc2Ug''@;'; put 'put ''MTpyZXR1cm4oSD1OLnNlbnQoKS5yZXN1bHQpP1syLEhdOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlclVyaT1mdW5jdGlvbihHLGIpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBEO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oSCl7c3dp''@;'; put 'put ''dGNoKEgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmdldEZvbGRlckRldGFpbHMoRyxiKV07Y2FzZSAxOnJldHVybihEPUguc2VudCgpKT9bMiwiL2ZvbGRlcnMvZm9sZGVycy8iLmNvbmNhdChELmlkKV06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0UmVjeWNsZUJpblVy''@;'; put 'put ''aT1mdW5jdGlvbihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwp''@;'; put 'put ''LmNvbmNhdCgiL2ZvbGRlcnMvZm9sZGVycy9AbXlSZWN5Y2xlQmluIiksRykuY2F0Y2goZnVuY3Rpb24oSCl7aWYoSCBpbnN0YW5jZW9mIFYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBIO3JldHVybntyZXN1bHQ6bnVsbH19KV07Y2FzZSAxOnJldHVybihiPUQuc2VudCgpLnJlc3VsdCk/WzIs''@;'; put 'put ''Ii9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoYi5pZCldOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlOYW1lPWZ1bmN0aW9uKEcsYil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihE''@;'; put 'put ''KXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkPWZ1bmN0aW9uKEcsYil7''@;'; put 'put ''cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKEcsYildO2Nhc2UgMTpyZXR1cm5bMixELnNl''@;'; put 'put ''bnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmxpc3RGb2xkZXI9ZnVuY3Rpb24oRyxiLEQpe3JldHVybiB2b2lkIDA9PT1EJiYoRD0yMCksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxOLGc7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2Fz''@;'; put 'put ''ZSAwOnJldHVybigwLEUuaXNVcmkpKEcpPyhOPUcsWzMsM10pOlszLDFdO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmdldEZvbGRlclVyaShHLGIpXTtjYXNlIDI6Tj1DLnNlbnQoKSxDLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBIPU4sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQo''@;'; put 'put ''dGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChILCIvbWVtYmVycz9saW1pdD0iKS5jb25jYXQoRCksYildO2Nhc2UgNDpyZXR1cm4oZz1DLnNlbnQoKS5yZXN1bHQpJiZnLml0ZW1zP1syLGcuaXRlbXMubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBTLm5hbWV9KV06WzIsW11dfX0pfSl9LGNlLnByb3Rv''@;'; put 'put ''dHlwZS5tb3ZlRm9sZGVyPWZ1bmN0aW9uKEcsYixELEgpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOLGcsQyxTLHYscDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHcpe3N3aXRjaCh3LmxhYmVsKXtjYXNlIDA6cmV0dXJuIE49Ry5zcGxpdCgiLyIpLnBvcCgp''@;'; put 'put ''LFs0LHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhiLEgpXTtjYXNlIDE6cmV0dXJuIHcuc2VudCgpP0Q9TjooKGc9Yi5zcGxpdCgiLyIpKS5zcGxpY2UoZy5sZW5ndGgtMSwxKSxiPWcuam9pbigiLyIpKSxbNCx0aGlzLmdldEZvbGRlclVyaShHLEgpXTtjYXNlIDI6cmV0dXJuIEM9dy5zZW50KCks''@;'; put 'put ''WzQsdGhpcy5nZXRGb2xkZXJVcmkoYixIKV07Y2FzZSAzOnJldHVybiBTPXcuc2VudCgpLEM/KHY9Qz8uc3BsaXQoIi8iKS5wb3AoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoQykse2lkOnYsbmFtZTpELHBhcmVudEZvbGRl''@;'; put 'put ''clVyaTpTfSxIKS5jYXRjaChmdW5jdGlvbihKKXt0aHJvdyBKLmNvZGUmJiJFTk9URk9VTkQiPT09Si5jb2RlP3tib2R5OnttZXNzYWdlOiJGb2xkZXIgJyIuY29uY2F0KEcuc3BsaXQoIi8iKS5wb3AoKSwiJyB3YXMgbm90IGZvdW5kLiIpfX06Sn0pXSk6WzIsdm9pZCAwXTtjYXNlIDQ6cmV0''@;'; put 'put ''dXJuKHA9dy5zZW50KCkucmVzdWx0KT9bMixwXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5kZWxldGVGb2xkZXI9ZnVuY3Rpb24oRyxiKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxILE4sZztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3''@;'; put 'put ''aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRSZWN5Y2xlQmluVXJpKGIpXTtjYXNlIDE6cmV0dXJuIEQ9Uy5zZW50KCksSD1HLnNwbGl0KCIvIikucG9wKCl8fCIiLGc9KE49bmV3IERhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitOLnRvTG9jYWxlVGltZVN0cmlu''@;'; put 'put ''ZygpLFs0LHRoaXMubW92ZUZvbGRlcihHLEQsSCsiICIrZyxiKV07Y2FzZSAyOnJldHVyblsyLFMuc2VudCgpXX19KX0pfSxjZX0oKTtPLlNBU1ZpeWFBcGlDbGllbnQ9dWV9LDU5NTY6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGhlKXtmb3IodmFyIHVlLGNlPTEsRz1hcmd1bWVudHMubGVuZ3RoO2NlPEc7Y2UrKylmb3IodmFyIGIgaW4gdWU9YXJndW1lbnRzW2NlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodWUsYikmJiho''@;'; put 'put ''ZVtiXT11ZVtiXSk7cmV0dXJuIGhlfSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaGUsdWUsY2UsRyl7cmV0dXJuIG5ldyhjZXx8KGNlPVByb21pc2UpKShmdW5jdGlvbihiLEQpe2Z1bmN0aW9uIEgoQyl7dHJ5e2coRy5uZXh0KEMp''@;'; put 'put ''KX1jYXRjaChTKXtEKFMpfX1mdW5jdGlvbiBOKEMpe3RyeXtnKEcudGhyb3coQykpfWNhdGNoKFMpe0QoUyl9fWZ1bmN0aW9uIGcoQyl7dmFyIFM7Qy5kb25lP2IoQy52YWx1ZSk6KFM9Qy52YWx1ZSxTIGluc3RhbmNlb2YgY2U/UzpuZXcgY2UoZnVuY3Rpb24odil7dihTKX0pKS50aGVuKEgs''@;'; put 'put ''Til9ZygoRz1HLmFwcGx5KGhlLHVlfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihoZSx1ZSl7dmFyIGNlLEcsYixELEg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmYlswXSl0aHJvdyBiWzFdO3JldHVybiBiWzFdfSx0cnlzOltdLG9w''@;'; put 'put ''czpbXX07cmV0dXJuIEQ9e25leHQ6TigwKSx0aHJvdzpOKDEpLHJldHVybjpOKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoRFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxEO2Z1bmN0aW9uIE4oZyl7cmV0dXJuIGZ1bmN0aW9uKEMpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbihTKXtpZihjZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtIOyl0cnl7aWYoY2U9MSxHJiYoYj0yJlNbMF0/Ry5yZXR1cm46U1swXT9HLnRocm93fHwoKGI9Ry5yZXR1cm4pJiZiLmNhbGwoRyksMCk6Ry5uZXh0KSYm''@;'; put 'put ''IShiPWIuY2FsbChHLFNbMV0pKS5kb25lKXJldHVybiBiO3N3aXRjaChHPTAsYiYmKFM9WzImU1swXSxiLnZhbHVlXSksU1swXSl7Y2FzZSAwOmNhc2UgMTpiPVM7YnJlYWs7Y2FzZSA0OnJldHVybiBILmxhYmVsKysse3ZhbHVlOlNbMV0sZG9uZTohMX07Y2FzZSA1OkgubGFiZWwrKyxHPVNb''@;'; put 'put ''MV0sUz1bMF07Y29udGludWU7Y2FzZSA3OlM9SC5vcHMucG9wKCksSC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoYj0oYj1ILnRyeXMpLmxlbmd0aD4wJiZiW2IubGVuZ3RoLTFdKXx8NiE9PVNbMF0mJjIhPT1TWzBdKSl7SD0wO2NvbnRpbnVlfWlmKDM9PT1TWzBdJiYoIWJ8''@;'; put 'put ''fFNbMV0+YlswXSYmU1sxXTxiWzNdKSl7SC5sYWJlbD1TWzFdO2JyZWFrfWlmKDY9PT1TWzBdJiZILmxhYmVsPGJbMV0pe0gubGFiZWw9YlsxXSxiPVM7YnJlYWt9aWYoYiYmSC5sYWJlbDxiWzJdKXtILmxhYmVsPWJbMl0sSC5vcHMucHVzaChTKTticmVha31iWzJdJiZILm9wcy5wb3AoKSxI''@;'; put 'put ''LnRyeXMucG9wKCk7Y29udGludWV9Uz11ZS5jYWxsKGhlLEgpfWNhdGNoKHYpe1M9WzYsdl0sRz0wfWZpbmFsbHl7Y2U9Yj0wfWlmKDUmU1swXSl0aHJvdyBTWzFdO3JldHVybnt2YWx1ZTpTWzBdP1NbMV06dm9pZCAwLGRvbmU6ITB9fShbZyxDXSl9fX0saz10aGlzJiZ0aGlzLl9fc3ByZWFk''@;'; put 'put ''QXJyYXl8fGZ1bmN0aW9uKGhlLHVlLGNlKXtpZihjZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBHLGI9MCxEPXVlLmxlbmd0aDtiPEQ7YisrKSFHJiZiIGluIHVlfHwoR3x8KEc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodWUsMCxiKSksR1tiXT11ZVtiXSk7cmV0dXJuIGhl''@;'; put 'put ''LmNvbmNhdChHfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh1ZSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEU9Uig1OTI4KSxqPVIoMTIzMCksVj1SKDk4MjEpLEI9Uig4MzA2KSxZPVIoMzQ2NyksWD1SKDE1MjcpLFU9UigzOTAw''@;'; put 'put ''KSxxPVIoNDU4OCksZWU9UigzNjAyKSx0ZT1SKDgyMTcpLG9lPXtzZXJ2ZXJVcmw6IiIscGF0aFNBU0pTOiIvU0FTanNBcGkvc3RwL2V4ZWN1dGUiLHBhdGhTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyIscGF0aFNBU1ZpeWE6Ii9TQVNKb2JFeGVjdXRpb24iLGFwcExvYzoiL1B1YmxpYy9z''@;'; put 'put ''ZWVkYXBwIixzZXJ2ZXJUeXBlOlUuU2VydmVyVHlwZS5TYXNWaXlhLGRlYnVnOiExLGNvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLHVzZUNvbXB1dGVBcGk6bnVsbCxsb2dpbk1lY2hhbmlzbTpqLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHR9LHNlPWZ1bmN0''@;'; put 'put ''aW9uKCl7ZnVuY3Rpb24gaGUodWUpe3ZhciBjZT10aGlzO3RoaXMuc2FzanNDb25maWc9bmV3IGouU0FTanNDb25maWcsdGhpcy5qb2JzUGF0aD0iIix0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bnVsbCx0aGlzLnNhczlBcGlDbGllbnQ9bnVsbCx0aGlzLnNhc0pTQXBpQ2xpZW50PW51bGwsdGhp''@;'; put 'put ''cy5maWxlVXBsb2FkZXI9bnVsbCx0aGlzLmF1dGhNYW5hZ2VyPW51bGwsdGhpcy5yZXF1ZXN0Q2xpZW50PW51bGwsdGhpcy53ZWJKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1udWxsLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5qZXNKb2JFeGVjdXRv''@;'; put 'put ''cj1udWxsLHRoaXMuc2FzOUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gSyhjZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYixELEgsTjtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuWzQsbnVsbD09PShHPXRoaXMud2ViSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oYj10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWI/''@;'; put 'put ''dm9pZCAwOmIucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMjpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShEPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1EP3ZvaWQgMDpELnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDM6cmV0dXJuIGcuc2VudCgpLFs0LG51''@;'; put 'put ''bGw9PT0oSD10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PUg/dm9pZCAwOkgucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNDpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShOPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PU4/dm9pZCAwOk4ucmVzZW5kV2FpdGlu''@;'; put 'put ''Z1JlcXVlc3RzKCldO2Nhc2UgNTpyZXR1cm4gZy5zZW50KCksWzJdfX0pfSl9LHRoaXMuc2V0VmVyYm9zZU1vZGU9ZnVuY3Rpb24oRyl7dmFyIGI7bnVsbD09PShiPWNlLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1ifHxiLnNldFZlcmJvc2VNb2RlKEcpfSx0aGlzLnNhc2pzQ29uZmlnPXoo''@;'; put 'put ''eih7fSxvZSksdWUpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCl9cmV0dXJuIGhlLnByb3RvdHlwZS5nZXRDc3JmVG9rZW49ZnVuY3Rpb24odWUpe3ZhciBjZTtyZXR1cm4gdm9pZCAwPT09dWUmJih1ZT0iZ2VuZXJhbCIpLG51bGw9PT0oY2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAw''@;'; put 'put ''PT09Y2U/dm9pZCAwOmNlLmdldENzcmZUb2tlbih1ZSl9LGhlLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKHVlKXt2YXIgY2UsRyxiPXVlLmxpbmVzT2ZDb2RlLEQ9dWUuZmlsZU5hbWUsSD11ZS5jb250ZXh0TmFtZSxOPXVlLnJ1blRpbWUsZz11ZS5hdXRoQ29uZmlnLEM9dWUu''@;'; put 'put ''YXV0aENvbmZpZ1NhczksUz11ZS5kZWJ1ZztyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHYpe3N3aXRjaCh2LmxhYmVsKXtjYXNlIDA6aWYodGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW1UuU2VydmVy''@;'; put 'put ''VHlwZS5TYXM5LFUuU2VydmVyVHlwZS5TYXNqcyxVLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXM5KXJldHVyblszLDJdO2lmKCFDKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9yIHNhczkgaXMgbm90IHBy''@;'; put 'put ''b3ZpZGVkIik7cmV0dXJuWzQsbnVsbD09PShjZT10aGlzLnNhczlBcGlDbGllbnQpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZXhlY3V0ZVNjcmlwdChiLEMudXNlck5hbWUsQy5wYXNzd29yZCldO2Nhc2UgMTpjYXNlIDM6Y2FzZSA1OnJldHVyblsyLHYuc2VudCgpXTtjYXNlIDI6cmV0dXJu''@;'; put 'put ''IHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMyw0XTpbNCxudWxsPT09KEc9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZXhlY3V0ZVNjcmlwdChiLmpvaW4oIlxuIiksTixnKV07Y2FzZSA0OmlmKHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDZdO2lmKCEoSD1IfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGlu''@;'; put 'put ''IHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFEKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhl''@;'; put 'put ''Y3V0ZVNjcmlwdChELGIsSCxnLG51bGwsU3x8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyldO2Nhc2UgNjpyZXR1cm5bMl19fSl9KX0saGUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24odWUsY2UsRyl7dmFyIGI7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEkodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbVS5TZXJ2ZXJUeXBlLlNhc2pzXSksWzQsbnVsbD09PShiPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1iP3ZvaWQg''@;'; put 'put ''MDpiLmV4ZWN1dGVKb2IodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbih1ZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihj''@;'; put 'put ''ZSl7c3dpdGNoKGNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0cyh1ZSldO2Nhc2UgMTpyZXR1cm5b''@;'; put 'put ''MixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhp''@;'; put 'put ''cy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHModWUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0''@;'; put 'put ''RGVmYXVsdENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygp''@;'; put 'put ''fSxoZS5wcm90b3R5cGUuZ2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv''@;'; put 'put ''cnRlZCgiZ2V0RXhlY3V0YWJsZUNvbnRleHRzIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHVlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVD''@;'; put 'put ''b250ZXh0PWZ1bmN0aW9uKHVlLGNlLEcsYixELEgpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNv''@;'; put 'put ''bnRleHQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dCh1ZSxjZSxHLGIsRCxIKV07Y2FzZSAxOnJldHVyblsyLE4uc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0''@;'; put 'put ''aW9uKHVlLGNlLEcsYil7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hlckNvbnRleHQiLFtVLlNlcnZl''@;'; put 'put ''clR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVMYXVuY2hlckNvbnRleHQodWUsY2UsRyxiKV07Y2FzZSAxOnJldHVyblsyLEQuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBL''@;'; put 'put ''KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KHVlLGNlLEcpXTtjYXNlIDE6cmV0dXJuWzIsYi5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDb21wdXRlQ29udGV4dCIsW1UuU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVD''@;'; put 'put ''b250ZXh0KHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7''@;'; put 'put ''c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZSh1ZSxjZSldO2Nhc2Ug''@;'; put 'put ''MTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAw''@;'; put 'put ''OnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5SWQodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9''@;'; put 'put ''LGhlLnByb3RvdHlwZS5jcmVhdGVTZXNzaW9uPWZ1bmN0aW9uKHVlLGNlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNy''@;'; put 'put ''ZWF0ZVNlc3Npb24iLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVTZXNzaW9uKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlRm9sZGVyPWZ1bmN0aW9uKHVlLGNlLEcsYixELEgp''@;'; put 'put ''e3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gRD9bNCxELmNyZWF0ZUZvbGRlcih1ZSxjZSxHLGIsSCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsTi5zZW50''@;'; put 'put ''KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRm9sZGVyKHVlLGNlLEcsYixIKV19fSl9KX0saGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBIP1s0LEguY3JlYXRlRmlsZSh1ZSxjZSxHLGIsRCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsTi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3Jl''@;'; put 'put ''YXRlRmlsZSh1ZSxjZSxHLGIsRCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24odWUsY2Upe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhp''@;'; put 'put ''cy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuZGVsZXRlRm9sZGVyPWZ1bmN0aW9u''@;'; put 'put ''KHVlLGNlKXt2YXIgRztyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUZvbGRlciIsW1UuU2VydmVyVHlwZS5TYXNW''@;'; put 'put ''aXlhXSksWzQsbnVsbD09PShHPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZGVsZXRlRm9sZGVyKHVlLGNlKV07Y2FzZSAxOnJldHVyblsyLGIuc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUubGlzdEZvbGRlcj1mdW5jdGlvbih1ZSxjZSxHKXt2YXIgYjty''@;'; put 'put ''ZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0o''@;'; put 'put ''Yj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiLmxpc3RGb2xkZXIodWUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixELnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLm1vdmVGb2xkZXI9ZnVuY3Rpb24odWUsY2UsRyxiKXt2YXIgRDtyZXR1cm4gSyh0aGlzLHZv''@;'; put 'put ''aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0oRD10aGlzLnNhc1ZpeWFB''@;'; put 'put ''cGlDbGllbnQpfHx2b2lkIDA9PT1EP3ZvaWQgMDpELm1vdmVGb2xkZXIodWUsY2UsRyxiKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxoZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbih1ZSxjZSxHLGIsRCxIKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2''@;'; put 'put ''b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKE4pe3N3aXRjaChOLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLEg/WzQsSC5jcmVhdGVKb2JEZWZpbml0''@;'; put 'put ''aW9uKHVlLGNlLEcsYixEKV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixOLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKHVlLGNlLEcsYixEKV19fSl9KX0saGUucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0''@;'; put 'put ''aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0p''@;'; put 'put ''LFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZSh1ZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbih1ZSxjZSxHKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gSSh0aGlzLGZ1bmN0aW9uKGIpe3N3aXRjaChiLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEFjY2Vzc1Rva2VuIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVS5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09''@;'; put 'put ''VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4odWUsRyldO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsYi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4odWUsY2UsRyld''@;'; put 'put ''fX0pfSl9LGhlLnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKHVlLGNlLEcpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv''@;'; put 'put ''cnRlZCgicmVmcmVzaFRva2VucyIsW1UuU2VydmVyVHlwZS5TYXNWaXlhLFUuU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PVUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoRyldO2Nhc2Ug''@;'; put 'put ''MTpjYXNlIDM6cmV0dXJuWzIsYi5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2Vucyh1ZSxjZSxHKV19fSl9KX0saGUucHJvdG90eXBlLmRlbGV0ZUNsaWVudD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFtVLlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGll''@;'; put 'put ''bnQodWUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGhlLnByb3RvdHlwZS5nZXRTYXNqc0NvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfSxoZS5wcm90b3R5cGUuZ2V0VXNlck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdl''@;'; put 'put ''ci51c2VyTmFtZX0saGUucHJvdG90eXBlLnNldFNBU2pzQ29uZmlnPWZ1bmN0aW9uKHVlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZz16KHooe30sdGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''ZyksdWUpLHRoaXMuc2V0dXBDb25maWd1cmF0aW9uKCksWzJdfSl9KX0saGUucHJvdG90eXBlLnNldERlYnVnU3RhdGU9ZnVuY3Rpb24odWUpe3RoaXMuc2FzanNDb25maWcuZGVidWc9dWUsdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXVlKX0s''@;'; put 'put ''aGUucHJvdG90eXBlLmNoZWNrU2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24odWUpe3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCldfSl9KX0saGUucHJvdG90eXBlLmxv''@;'; put 'put ''Z0luPWZ1bmN0aW9uKHVlLGNlLEcsYil7cmV0dXJuIHZvaWQgMD09PWImJihiPXt9KSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PWouTG9naW5NZWNoYW5pc20uRGVm''@;'; put 'put ''YXVsdCl7aWYoIXVlfHwhY2UpdGhyb3cgbmV3IEVycm9yKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBsb2dpbiBtZWNoYW5pc20uIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5sb2dJbih1ZSxjZSldfWlmKHR5cGVvZiB3''@;'; put 'put ''aW5kb3c+InUiKXRocm93IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oYildfSl9KX0saGUucHJvdG90eXBl''@;'; put 'put ''LmxvZ091dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ091dCgpfSxoZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbih1ZSxjZSxHLGIsRCl7cmV0dXJuIHZvaWQgMD09PWImJihiPXt9KSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJ''@;'; put 'put ''KHRoaXMsZnVuY3Rpb24oTil7c3dpdGNoKE4ubGFiZWwpe2Nhc2UgMDpyZXR1cm4gYj16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksYiksWzQsdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZSh1ZSx7ZmlsZXM6Y2UscGFyYW1zOkd9LGIsRCldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9''@;'; put 'put ''KX0saGUucHJvdG90eXBlLnJlcXVlc3Q9ZnVuY3Rpb24odWUsY2UsRyxiLEQsSCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSx2b2lkIDA9PT1IJiYoSD1bXSksSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTjtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChn''@;'; put 'put ''LmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9eih6KHt9LHRoaXMuc2FzanNDb25maWcpLEcpLChOPSgwLEUudmFsaWRhdGVJbnB1dCkoY2UpKS5zdGF0dXM/Ry5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNl''@;'; put 'put ''LEcsYixELEgpXTpbMywxMl07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6Y2FzZSA4OmNhc2UgMTA6cmV0dXJuWzIsZy5zZW50KCldO2Nhc2UgMjpyZXR1cm4gRy5zZXJ2ZXJUeXBlIT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fG51bGw9PUcudXNlQ29tcHV0ZUFwaT9bMyw3XTpHLnVzZUNvbXB1dGVB''@;'; put 'put ''cGk/WzQsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3IuZXhlY3V0ZSh1ZSxjZSxHLGIsRCldOlszLDRdO2Nhc2UgNDpyZXR1cm4gRy5jb250ZXh0TmFtZXx8KEc9eih6KHt9LEcpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSxbNCx0aGlzLmplc0pv''@;'; put 'put ''YkV4ZWN1dG9yLmV4ZWN1dGUodWUsY2UsRyxiLEQsSCldO2Nhc2UgNjpyZXR1cm5bMywxMV07Y2FzZSA3OnJldHVybiBHLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmRy51c2VybmFtZSYmRy5wYXNzd29yZD9bNCx0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcp''@;'; put 'put ''XTpbMyw5XTtjYXNlIDk6cmV0dXJuWzQsdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKHVlLGNlLEcsYixELEgpXTtjYXNlIDExOnJldHVyblszLDEzXTtjYXNlIDEyOnJldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBqLkVycm9yUmVzcG9uc2UoTi5tc2cpKV07Y2FzZSAxMzpyZXR1cm5b''@;'; put 'put ''Ml19fSl9KX0saGUucHJvdG90eXBlLmRlcGxveVNlcnZpY2VQYWNrPWZ1bmN0aW9uKHVlLGNlLEcsYixEKXtyZXR1cm4gdm9pZCAwPT09RCYmKEQ9ITEpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsTjtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxh''@;'; put 'put ''YmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxIPW51bGwsR3x8Y2U/KEd8fChHPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxjZXx8KGNlPXRoaXMuc2FzanNDb25maWcuYXBwTG9j''@;'; put 'put ''KSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzVml5YT8oSD1uZXcgVi5TQVNWaXlhQXBpQ2xpZW50KEcsY2UsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpKS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnOnRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXM5JiYoSD1uZXcgQi5TQVM5QXBpQ2xpZW50KEcsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSkpOihOPW51bGwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5T''@;'; put 'put ''ZXJ2ZXJUeXBlLlNhc1ZpeWE/Tj10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhczkmJihOPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksRz1OLnNlcnZlclVybCxjZT1OLnJvb3RGb2xk''@;'; put 'put ''ZXJOYW1lKSx1ZS5tZW1iZXJzWzBdLm1lbWJlcnMmJnVlLm1lbWJlcnNbMF0ubWVtYmVycy5zb3J0KGZ1bmN0aW9uKFMpe3JldHVybiJmb2xkZXIiPT09Uy50eXBlPy0xOjF9KSxbNCx0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhjZSx1ZS5tZW1iZXJzLGIsSCxEKV07Y2FzZSAxOnJl''@;'; put 'put ''dHVybiBDLnNlbnQoKSxbMl19fSl9KX0saGUucHJvdG90eXBlLnN0YXJ0Q29tcHV0ZUpvYj1mdW5jdGlvbih1ZSxjZSxHLGIsRCxILE4sZyxDKXt2YXIgUyx2LHAsdztyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PU4mJihOPSExKSxLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oSil7aWYoRz16KHooe30sdGhpcy5zYXNqc0NvbmZpZyksRyksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbVS5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhRy5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNv''@;'; put 'put ''bnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO3JldHVybiBDPyhudWxsPT09KFM9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09U3x8Uy5zZXRWZXJib3NlTW9kZShDKSxudWxs''@;'; put 'put ''PT09KHY9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09dnx8di5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PUMmJihudWxsPT09KHA9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cHx8cC5kaXNhYmxlVmVyYm9zZU1vZGUoKSksWzIsbnVsbD09PSh3PXRoaXMuc2FzVml5YUFw''@;'; put 'put ''aUNsaWVudCl8fHZvaWQgMD09PXc/dm9pZCAwOncuZXhlY3V0ZUNvbXB1dGVKb2IodWUsRy5jb250ZXh0TmFtZSxHLmRlYnVnLGNlLGIsISFELCExLEgsTixnKV19KX0pfSxoZS5wcm90b3R5cGUuZmV0Y2hMb2dGaWxlQ29udGVudD1mdW5jdGlvbih1ZSxjZSl7cmV0dXJuIEsodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodWUsY2UpLnRoZW4oZnVuY3Rpb24oYil7aWYoIWIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBqLkVycm9y''@;'; put 'put ''UmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShiLnJlc3VsdCl9Y2F0Y2goRCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBqLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxl''@;'; put 'put ''IGZldGNoaW5nIGxvZy4gVGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixEKSl9fSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0saGUucHJvdG90eXBlLmdldFNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIGsoW10sdGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCks''@;'; put 'put ''ITApLnNvcnQoRS5jb21wYXJlVGltZXN0YW1wcyl9LGhlLnByb3RvdHlwZS5jbGVhclNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX0saGUucHJvdG90eXBlLnNldHVwQ29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRo''@;'; put 'put ''aXMuc2FzanNDb25maWcuc2VydmVyVXJsfHwiIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKWlmKHR5cGVvZiBsb2NhdGlvbjwidSIpe3ZhciB1ZT0iIi5jb25jYXQobG9jYXRpb24ucHJvdG9jb2wsIi8vIikuY29uY2F0KGxvY2F0aW9uLmhvc3RuYW1lKTtsb2NhdGlvbi5wb3J0JiYo''@;'; put 'put ''dWU9IiIuY29uY2F0KHVlLCI6IikuY29uY2F0KGxvY2F0aW9uLnBvcnQpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD11ZX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25z''@;'; put 'put ''KTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PVUuU2VydmVyVHlwZS5TYXNqcz9lZS5TYXNqc1JlcXVlc3RDbGllbnQ6cS5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdl''@;'; put 'put ''bnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMuam9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5''@;'; put 'put ''YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRoaXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IFguQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmws''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09VS5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBp''@;'; put 'put ''Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNWaXlhQXBpQ2xpZW50PW5ldyBWLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2Ms''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNs''@;'; put 'put ''aWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGllbnQ9bmV3IEIuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNB''@;'; put 'put ''Z2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1VLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBpQ2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgWS5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2Fk''@;'; put 'put ''ZXI9bmV3IHRlLkZpbGVVcGxvYWRlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMud2ViSm9iRXhlY3V0b3I9bmV3IHRlLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanND''@;'; put 'put ''b25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1uZXcgdGUuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNl''@;'; put 'put ''cnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IHRlLlNhczlKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVl''@;'; put 'put ''c3RDbGllbnQsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyksdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bmV3IHRlLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9''@;'; put 'put ''bmV3IHRlLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9LGhlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXM9ZnVuY3Rpb24odWUsY2UsRyxiLEQpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLEUuYXN5bmNGb3JFYWNoKShjZSxmdW5jdGlvbihnKXtyZXR1cm4gSyhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0''@;'; put 'put ''aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6c3dpdGNoKGcudHlwZSl7Y2FzZSJmb2xkZXIiOnJldHVyblszLDFdO2Nhc2UiZmlsZSI6cmV0dXJuWzMsM107Y2FzZSJzZXJ2aWNlIjpyZXR1cm5bMyw1XX1yZXR1cm5bMyw3XTtjYXNlIDE6cmV0dXJuWzQsdGhpcy5jcmVhdGVGb2xkZXIo''@;'; put 'put ''Zy5uYW1lLHVlLHZvaWQgMCxHLGIsRCldO2Nhc2UgMjpyZXR1cm4gQy5zZW50KCksWzMsOF07Y2FzZSAzOnJldHVybls0LHRoaXMuY3JlYXRlRmlsZShnLm5hbWUsZy5jb2RlLHVlLHZvaWQgMCxHLGIpXTtjYXNlIDQ6cmV0dXJuIEMuc2VudCgpLFszLDhdO2Nhc2UgNTpyZXR1cm5bNCx0aGlz''@;'; put 'put ''LmNyZWF0ZUpvYkRlZmluaXRpb24oZy5uYW1lLGcuY29kZSx1ZSx2b2lkIDAsRyxiKV07Y2FzZSA2OnJldHVybiBDLnNlbnQoKSxbMyw4XTtjYXNlIDc6dGhyb3cgbmV3IEVycm9yKCJVbmlkZW50aWZpZWQgbWVtYmVyICciLmNvbmNhdChnLm5hbWUsIicgcHJvdmlkZWQuIikpO2Nhc2UgODpy''@;'; put 'put ''ZXR1cm4iZm9sZGVyIj09PWcudHlwZSYmZy5tZW1iZXJzJiZnLm1lbWJlcnMubGVuZ3RoP1s0LHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKCIiLmNvbmNhdCh1ZSwiLyIpLmNvbmNhdChnLm5hbWUpLGcubWVtYmVycyxHLGIsRCldOlszLDEwXTtjYXNlIDk6Qy5zZW50KCksQy5sYWJl''@;'; put 'put ''bD0xMDtjYXNlIDEwOnJldHVyblsyXX19KX0pfSldO2Nhc2UgMTpyZXR1cm4gTi5zZW50KCksWzJdfX0pfSl9LGhlLnByb3RvdHlwZS5pc01ldGhvZFN1cHBvcnRlZD1mdW5jdGlvbih1ZSxjZSl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IWNlLmluY2x1ZGVzKHRoaXMuc2Fz''@;'; put 'put ''anNDb25maWcuc2VydmVyVHlwZSkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJyIuY29uY2F0KHVlLCInIGlzIG9ubHkgc3VwcG9ydGVkIG9uICIpLmNvbmNhdChjZS5qb2luKCIsICIpLCIgc2VydmVycy4iKSl9LGhlLnByb3RvdHlwZS5lbmFibGVWZXJib3NlTW9kZT1mdW5jdGlvbih1ZSxj''@;'; put 'put ''ZSl7dmFyIEc7bnVsbD09PShHPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PUd8fEcuZW5hYmxlVmVyYm9zZU1vZGUodWUsY2UpfSxoZS5wcm90b3R5cGUuZGlzYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKCl7dmFyIHVlO251bGw9PT0odWU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9p''@;'; put 'put ''ZCAwPT09dWV8fHVlLmRpc2FibGVWZXJib3NlTW9kZSgpfSxoZX0oKTtPLmRlZmF1bHQ9c2V9LDM0Njc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiB6PU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKFUpe2Zv''@;'; put 'put ''cih2YXIgcSxlZT0xLHRlPWFyZ3VtZW50cy5sZW5ndGg7ZWU8dGU7ZWUrKylmb3IodmFyIG9lIGluIHE9YXJndW1lbnRzW2VlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxvZSkmJihVW29lXT1xW29lXSk7cmV0dXJuIFV9LHouYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihVLHEsZWUsdGUpe3JldHVybiBuZXcoZWV8fChlZT1Qcm9taXNlKSkoZnVuY3Rpb24ob2Usc2Upe2Z1bmN0aW9uIGhlKEcpe3RyeXtjZSh0ZS5uZXh0KEcpKX1jYXRjaChiKXtzZShiKX19ZnVuY3Rpb24gdWUoRyl7dHJ5e2NlKHRl''@;'; put 'put ''LnRocm93KEcpKX1jYXRjaChiKXtzZShiKX19ZnVuY3Rpb24gY2UoRyl7dmFyIGI7Ry5kb25lP29lKEcudmFsdWUpOihiPUcudmFsdWUsYiBpbnN0YW5jZW9mIGVlP2I6bmV3IGVlKGZ1bmN0aW9uKEQpe0QoYil9KSkudGhlbihoZSx1ZSl9Y2UoKHRlPXRlLmFwcGx5KFUscXx8W10pKS5uZXh0''@;'; put 'put ''KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVSxxKXt2YXIgZWUsdGUsb2Usc2UsaGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmb2VbMF0pdGhyb3cgb2VbMV07cmV0dXJuIG9lWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHNlPXtuZXh0OnVlKDAp''@;'; put 'put ''LHRocm93OnVlKDEpLHJldHVybjp1ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHNlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHNlO2Z1bmN0aW9uIHVlKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7cmV0dXJuIGZ1bmN0aW9uKGIpe2lmKGVlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2hlOyl0cnl7aWYoZWU9MSx0ZSYmKG9lPTImYlswXT90ZS5yZXR1cm46YlswXT90ZS50aHJvd3x8KChvZT10ZS5yZXR1cm4pJiZvZS5jYWxsKHRlKSwwKTp0ZS5uZXh0KSYmIShvZT1vZS5j''@;'; put 'put ''YWxsKHRlLGJbMV0pKS5kb25lKXJldHVybiBvZTtzd2l0Y2godGU9MCxvZSYmKGI9WzImYlswXSxvZS52YWx1ZV0pLGJbMF0pe2Nhc2UgMDpjYXNlIDE6b2U9YjticmVhaztjYXNlIDQ6cmV0dXJuIGhlLmxhYmVsKysse3ZhbHVlOmJbMV0sZG9uZTohMX07Y2FzZSA1OmhlLmxhYmVsKyssdGU9''@;'; put 'put ''YlsxXSxiPVswXTtjb250aW51ZTtjYXNlIDc6Yj1oZS5vcHMucG9wKCksaGUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKG9lPShvZT1oZS50cnlzKS5sZW5ndGg+MCYmb2Vbb2UubGVuZ3RoLTFdKXx8NiE9PWJbMF0mJjIhPT1iWzBdKSl7aGU9MDtjb250aW51ZX1pZigzPT09''@;'; put 'put ''YlswXSYmKCFvZXx8YlsxXT5vZVswXSYmYlsxXTxvZVszXSkpe2hlLmxhYmVsPWJbMV07YnJlYWt9aWYoNj09PWJbMF0mJmhlLmxhYmVsPG9lWzFdKXtoZS5sYWJlbD1vZVsxXSxvZT1iO2JyZWFrfWlmKG9lJiZoZS5sYWJlbDxvZVsyXSl7aGUubGFiZWw9b2VbMl0saGUub3BzLnB1c2goYik7''@;'; put 'put ''YnJlYWt9b2VbMl0mJmhlLm9wcy5wb3AoKSxoZS50cnlzLnBvcCgpO2NvbnRpbnVlfWI9cS5jYWxsKFUsaGUpfWNhdGNoKEQpe2I9WzYsRF0sdGU9MH1maW5hbGx5e2VlPW9lPTB9aWYoNSZiWzBdKXRocm93IGJbMV07cmV0dXJue3ZhbHVlOmJbMF0/YlsxXTp2b2lkIDAsZG9uZTohMH19KFtj''@;'; put 'put ''ZSxHXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU0FTanNBcGlDbGllbnQ9dm9pZCAwO3ZhciBrPVIoNjIzMCksRT1SKDM5MDApLGo9Uig5Nzc4KSxWPVIoNTcpLEI9UigyNDkpLFk9Uig3MDQpLFg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBV''@;'; put 'put ''KHEpe3RoaXMucmVxdWVzdENsaWVudD1xfXJldHVybiBVLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3Q9ZnVuY3Rpb24ocSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtj''@;'; put 'put ''YXNlIDA6cmV0dXJuIHE/WzQsKDAsWS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxxLEUuU2VydmVyVHlwZS5TYXNqcyldOlszLDJdO2Nhc2UgMTpyZXR1cm5bMixlZS5zZW50KCkuYWNjZXNzX3Rva2VuXTtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9LFUucHJvdG90eXBlLmRlcGxveT1m''@;'; put 'put ''dW5jdGlvbihxLGVlLHRlKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNl''@;'; put 'put ''IDE6cmV0dXJuIG9lPWhlLnNlbnQoKSxxLmFwcExvYz1xLmFwcExvY3x8ZWUsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveSIscSxvZSx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSldO2Nhc2UgMjpyZXR1''@;'; put 'put ''cm4gc2U9aGUuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoc2UpXX19KX0pfSxVLnByb3RvdHlwZS5kZXBsb3laaXBGaWxlPWZ1bmN0aW9uKHEsZWUpe3JldHVybiBLKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxvZSxzZSxoZSx1ZSxjZTtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPVIoMjk3NSkuY3JlYXRlUmVhZFN0cmVhbSxbNCx0aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdChlZSldO2Nhc2UgMTpyZXR1cm4gb2U9Ry5zZW50KCksWzQsdGUocSldO2Nhc2UgMjpyZXR1cm4gc2U9''@;'; put 'put ''Ry5zZW50KCksKGhlPW5ldyBrKS5hcHBlbmQoImZpbGUiLHNlKSx1ZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoaGUuZ2V0Qm91bmRhcnkoKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLGhlLG9lLHVl''@;'; put 'put ''LHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pXTtjYXNlIDM6cmV0dXJuIGNlPUcuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoY2UpXX19KX0pfSxVLnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKHEsZWUsdGUpe3JldHVybiBLKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxzZSxoZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHVlKXtzd2l0Y2godWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gb2U9dGU/dGUuYWNjZXNzX3Rva2VuOnZvaWQgMCxzZT1xLl9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT9xLl9wcm9ncmFt''@;'; put 'put ''OiIiLmNvbmNhdChlZSwiLyIpLmNvbmNhdChxLl9wcm9ncmFtKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLHooeih7X2RlYnVnOjEzMX0scSkse19wcm9ncmFtOnNlfSksb2UpXTtjYXNlIDE6cmV0dXJuWzIse3Jlc3VsdDooaGU9dWUuc2VudCgp''@;'; put 'put ''KS5yZXN1bHQsbG9nOmhlLmxvZ31dfX0pfSl9LFUucHJvdG90eXBlLmV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24ocSxlZSx0ZSl7cmV0dXJuIHZvaWQgMD09PWVlJiYoZWU9InNhcyIpLEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlO3JldHVybiBJKHRoaXMsZnVuY3Rp''@;'; put 'put ''b24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KHRlKV07Y2FzZSAxOnJldHVybiBvZT1oZS5zZW50KCksc2U9e2xvZzoiIn0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIs''@;'; put 'put ''e2NvZGU6cSxydW5UaW1lOmVlfSxvZSkudGhlbihmdW5jdGlvbih1ZSl7dmFyIEc9dWUucHJpbnRPdXRwdXQsYj11ZS5yZXN1bHQ7c2UubG9nPXVlLmxvZyxHJiYoc2UucHJpbnRPdXRwdXQ9RyksYiYmKHNlLndlYm91dD1iKX0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdygwLGoucHJlZml4''@;'; put 'put ''TWVzc2FnZSkodWUsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KV07Y2FzZSAyOnJldHVybiBoZS5zZW50KCksWzIsc2VdfX0pfSl9LFUucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHEsZWUpe3JldHVybiBLKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24odGUpe3JldHVyblsyLCgwLFYuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsZWUpXX0pfSl9LFUucHJvdG90eXBlLnJlZnJlc2hUb2tlbnM9ZnVuY3Rpb24ocSl7cmV0dXJuIEso''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihlZSl7cmV0dXJuWzIsKDAsQi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxxKV19KX0pfSxVfSgpO08uU0FTanNBcGlDbGllbnQ9WH0sNjkwMzpmdW5jdGlvbihNLE8s''@;'; put 'put ''Uil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFgsVSxxLGVlKXtyZXR1cm4gbmV3KHF8fChxPVByb21pc2UpKShmdW5jdGlvbih0ZSxvZSl7ZnVuY3Rpb24gc2UoY2Upe3RyeXt1ZShlZS5uZXh0KGNlKSl9Y2F0''@;'; put 'put ''Y2goRyl7b2UoRyl9fWZ1bmN0aW9uIGhlKGNlKXt0cnl7dWUoZWUudGhyb3coY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gdWUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBxP0c6bmV3IHEoZnVuY3Rpb24oYil7YihHKX0pKS50''@;'; put 'put ''aGVuKHNlLGhlKX11ZSgoZWU9ZWUuYXBwbHkoWCxVfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihYLFUpe3ZhciBxLGVlLHRlLG9lLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsx''@;'; put 'put ''XX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBvZT17bmV4dDpoZSgwKSx0aHJvdzpoZSgxKSxyZXR1cm46aGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihvZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvZTtmdW5jdGlvbiBoZSh1ZSl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYocSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxlZSYmKHRlPTImR1swXT9lZS5yZXR1cm46R1swXT9lZS50aHJvd3x8KCh0ZT1lZS5yZXR1''@;'; put 'put ''cm4pJiZ0ZS5jYWxsKGVlKSwwKTplZS5uZXh0KSYmISh0ZT10ZS5jYWxsKGVlLEdbMV0pKS5kb25lKXJldHVybiB0ZTtzd2l0Y2goZWU9MCx0ZSYmKEc9WzImR1swXSx0ZS52YWx1ZV0pLEdbMF0pe2Nhc2UgMDpjYXNlIDE6dGU9RzticmVhaztjYXNlIDQ6cmV0dXJuIHNlLmxhYmVsKysse3Zh''@;'; put 'put ''bHVlOkdbMV0sZG9uZTohMX07Y2FzZSA1OnNlLmxhYmVsKyssZWU9R1sxXSxHPVswXTtjb250aW51ZTtjYXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9''@;'; put 'put ''PUdbMF0mJjIhPT1HWzBdKSl7c2U9MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8R1sxXT50ZVswXSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10ZVsxXSx0ZT1HO2JyZWFrfWlmKHRlJiZzZS5sYWJl''@;'; put 'put ''bDx0ZVsyXSl7c2UubGFiZWw9dGVbMl0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0mJnNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9VS5jYWxsKFgsc2UpfWNhdGNoKGIpe0c9WzYsYl0sZWU9MH1maW5hbGx5e3E9dGU9MH1pZig1JkdbMF0pdGhyb3cgR1sxXTtyZXR1''@;'; put 'put ''cm57dmFsdWU6R1swXT9HWzFdOnZvaWQgMCxkb25lOiEwfX0oW3VlLGNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO3ZhciBFPVIoMTIzMCksaj1SKDEzOTUpLFY9Uig1OTI4KSxCPVIoOTc3OCks''@;'; put 'put ''WT1mdW5jdGlvbigpe2Z1bmN0aW9uIFgoVSxxLGVlKXt0aGlzLnNlcnZlclVybD1VLHRoaXMuY29udGV4dE5hbWU9cSx0aGlzLnJlcXVlc3RDbGllbnQ9ZWUsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lv''@;'; put 'put ''biBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0YXRlOkUuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LFUm''@;'; put 'put ''JigwLFYuaXNVcmwpKFUpfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oVSl7dGhpcy5fZGVidWc9VX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxY''@;'; put 'put ''LnByb3RvdHlwZS5pc1Nlc3Npb25WYWxpZD1mdW5jdGlvbihVKXtpZighVSlyZXR1cm4hMTt2YXIgcT0oKG5ldyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoVS5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghVS5hdHRyaWJ1dGVzfHxxPj1VLmF0dHJpYnV0ZXMu''@;'; put 'put ''c2Vzc2lvbkluYWN0aXZlVGltZW91dCl9LFgucHJvdG90eXBlLnJlbW92ZVNlc3Npb25Gcm9tUG9vbD1mdW5jdGlvbihVKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLmlkIT09VS5pZH0pfSxYLnByb3RvdHlwZS5yZW1vdmVFeHBpcmVk''@;'; put 'put ''U2Vzc2lvbnM9ZnVuY3Rpb24oKXt2YXIgVT10aGlzO3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIFUuaXNTZXNzaW9uVmFsaWQocSl9KX0sWC5wcm90b3R5cGUudGhyb3dFcnJvcnM9ZnVuY3Rpb24oVSxxKXt0aHJvdyBxPygwLEIucHJlZml4''@;'; put 'put ''TWVzc2FnZSkobmV3IEVycm9yKFUuam9pbigiLiAiKSkscSk6bmV3IEVycm9yKFUubWFwKGZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUubWVzc2FnZT9lZS5tZXNzYWdlOmVlfSkuam9pbigiLiAiKSl9LFgucHJvdG90eXBlLmdldFNlc3Npb249ZnVuY3Rpb24oVSl7cmV0dXJuIEkodGhpcyx2b2lk''@;'; put 'put ''IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2U9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGhlKXtzd2l0Y2goaGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT1bXSxlZT0hMSx0ZT1mdW5jdGlvbigpe3EubGVuZ3RoJiYhZWUmJihlZT0hMCxzZS50aHJvd0Vycm9ycyhx''@;'; put 'put ''KSl9LHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGg/KHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKG9lPXRoaXMuc2Vzc2lvbnNbMF0pLHRoaXMuY3JlYXRlU2Vzc2lvbnMoVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KSx0aGlzLmNy''@;'; put 'put ''ZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKFUpLmNhdGNoKGZ1bmN0aW9uKHVlKXtxLnB1c2godWUpfSksdGUoKSxbMixvZV0pOlszLDFdO2Nhc2UgMTpyZXR1cm4gdGhpcy5jcmVhdGVTZXNzaW9ucyhVKS5jYXRjaChmdW5jdGlvbih1ZSl7cS5wdXNoKHVlKX0pLFs0LHRoaXMuY3JlYXRlQW5kV2Fp''@;'; put 'put ''dEZvclNlc3Npb24oVSkuY2F0Y2goZnVuY3Rpb24odWUpe3EucHVzaCh1ZSl9KV07Y2FzZSAyOnJldHVybiBoZS5zZW50KCksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSxvZT10aGlzLnNlc3Npb25zLnBvcCgpLHRoaXMucmVtb3ZlU2Vzc2lvbkZyb21Qb29sKG9lKSx0ZSgpLFsyLG9l''@;'; put 'put ''XX19KX0pfSxYLnByb3RvdHlwZS5nZXRFcnJvck1lc3NhZ2U9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4iIi5jb25jYXQoZWUsIiByZXF1ZXN0IHRvICIpLmNvbmNhdChxLCIgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIikuY29uY2F0KFUucmVzcG9uc2Uuc3RhdHVzfHwidW5rbm93biIsIi4g''@;'; put 'put ''IikrVS5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8fCIifSxYLnByb3RvdHlwZS5jbGVhclNlc3Npb249ZnVuY3Rpb24oVSxxKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFi''@;'; put 'put ''ZWwpe2Nhc2UgMDpyZXR1cm4gZWU9Ii9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KFUpLFs0LHRoaXMucmVxdWVzdENsaWVudC5kZWxldGUoZWUscSkudGhlbihmdW5jdGlvbigpe3RlLnNlc3Npb25zPXRlLnNlc3Npb25zLmZpbHRlcihmdW5jdGlvbihzZSl7cmV0dXJuIHNlLmlkIT09VX0p''@;'; put 'put ''fSkuY2F0Y2goZnVuY3Rpb24oc2Upe3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKSh0ZS5nZXRFcnJvck1lc3NhZ2Uoc2UsZWUsIkRFTEVURSIpLCJFcnJvciB3aGlsZSBkZWxldGluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxYLnByb3RvdHlwZS5j''@;'; put 'put ''cmVhdGVTZXNzaW9ucz1mdW5jdGlvbihVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPVtdLHRoaXMuc2Vzc2lvbnMubGVuZ3RoP1sz''@;'; put 'put ''LDJdOls0LCgwLFYuYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksZnVuY3Rpb24oKXtyZXR1cm4gSShlZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jcmVhdGVBbmRXYWl0''@;'; put 'put ''Rm9yU2Vzc2lvbihVKS5jYXRjaChmdW5jdGlvbihzZSl7cS5wdXNoKHNlKX0pXTtjYXNlIDE6cmV0dXJuIG9lLnNlbnQoKSxbMl19fSl9KX0pXTtjYXNlIDE6dGUuc2VudCgpLHRlLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBxLmxlbmd0aCYmdGhpcy50aHJvd0Vycm9ycyhxLCJFcnJvciB3aGls''@;'; put 'put ''ZSBjcmVhdGluZyBzZXNzaW9uLiAiKSxbMl19fSl9KX0sWC5wcm90b3R5cGUud2FpdEZvckN1cnJlbnRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHEpe3JldHVyblsyLG5l''@;'; put 'put ''dyBQcm9taXNlKGZ1bmN0aW9uKGVlKXt2YXIgdGU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtVLmN1cnJlbnRDb250ZXh0JiYoVS5zZXR0aW5nQ29udGV4dD0hMSxjbGVhckludGVydmFsKHRlKSxlZSgpKX0sMTAwKX0pXX0pfSl9LFgucHJvdG90eXBlLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9u''@;'; put 'put ''PWZ1bmN0aW9uKFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLHRlLG9lLHNlLGhlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuY3VycmVudENvbnRleHQ/WzMsNF06dGhp''@;'; put 'put ''cy5zZXR0aW5nQ29udGV4dD9bMywyXTpbNCx0aGlzLnNldEN1cnJlbnRDb250ZXh0KFUpXTtjYXNlIDE6cmV0dXJuIHVlLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuWzQsdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKV07Y2FzZSAzOnVlLnNlbnQoKSx1ZS5sYWJlbD00O2Nhc2UgNDpy''@;'; put 'put ''ZXR1cm4gcT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdCh0aGlzLmN1cnJlbnRDb250ZXh0LmlkLCIvc2Vzc2lvbnMiKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdChxLHt9LFUpLmNhdGNoKGZ1bmN0aW9uKGNlKXt0aHJvdygwLEIucHJl''@;'; put 'put ''Zml4TWVzc2FnZSkoaGUuZ2V0RXJyb3JNZXNzYWdlKGNlLHEsIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSA1OmlmKGVlPXVlLnNlbnQoKSwodGU9ZWUucmVzdWx0KS5ldGFnPW9lPWVlLmV0YWcsIShzZT10ZS5saW5rcy5maW5kKGZ1bmN0aW9uKGNl''@;'; put 'put ''KXtyZXR1cm4ic3RhdGUiPT09Y2UucmVsfSkpKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiB0ZS5zdGF0ZVVybD1zZS5ocmVmLFs0LHRoaXMud2FpdEZvclNlc3Npb24odGUsb2UsVSldO2Nhc2UgNjpyZXR1cm4gdWUuc2VudCgpLHRoaXMuc2Vzc2lvbnMucHVzaCh0''@;'; put 'put ''ZSksWzIsdGVdfX0pfSl9LFgucHJvdG90eXBlLnNldEN1cnJlbnRDb250ZXh0PWZ1bmN0aW9uKFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLGVlLG9lLHNlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNl''@;'; put 'put ''IDA6cmV0dXJuIHRoaXMuY3VycmVudENvbnRleHQ/WzMsMl06KHE9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMCIpLHRoaXMuc2V0dGluZ0NvbnRleHQ9ITAsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChxLFUpLmNhdGNoKGZ1bmN0aW9u''@;'; put 'put ''KHVlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoc2UuZ2V0RXJyb3JNZXNzYWdlKHVlLHEsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxpc3Qgb2YgY29udGV4dHMuICIpfSldKTtjYXNlIDE6aWYoZWU9aGUuc2VudCgpLnJlc3VsdCwhKG9lPShlZSYmZWUuaXRlbXMmJmVlLml0ZW1z''@;'; put 'put ''Lmxlbmd0aD9lZS5pdGVtczpbXSkuZmluZChmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLm5hbWU9PT1zZS5jb250ZXh0TmFtZX0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBjb250ZXh0ICciLmNvbmNhdCh0aGlzLmNvbnRleHROYW1lLCInIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAiKS5j''@;'; put 'put ''b25jYXQodGhpcy5zZXJ2ZXJVcmwsIi4iKSk7dGhpcy5jdXJyZW50Q29udGV4dD1vZSxQcm9taXNlLnJlc29sdmUoKSxoZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9KX0sWC5wcm90b3R5cGUud2FpdEZvclNlc3Npb249ZnVuY3Rpb24oVSxxLGVlKXt2YXIgdGU7cmV0dXJuIEkodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlLGhlLHVlLGNlLGIsRDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHNlPVUuc3RhdGVVcmwsaGU9ei5sb2dnZXJ8fEssKG9lPVUuc3RhdGUpIT09RS5TZXNzaW9uU3RhdGUu''@;'; put 'put ''UGVuZGluZyYmb2UhPT1FLlNlc3Npb25TdGF0ZS5SdW5uaW5nJiZvZSE9PUUuU2Vzc2lvblN0YXRlLk5vU3RhdGU/WzMsNl06c2U/KHRoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKGhlLmluZm8oIlBvbGxpbmc6ICIuY29uY2F0KHRoaXMuc2VydmVyVXJs''@;'; put 'put ''K3NlKSksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITApLHVlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KHNlLCI/d2FpdD0zMCIpLFs0LHRoaXMuZ2V0U2Vzc2lvblN0YXRlKHVlLHEsZWUpLmNhdGNoKGZ1bmN0aW9uKE4pe3Rocm93KDAsQi5wcmVmaXhNZXNz''@;'; put 'put ''YWdlKShOLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pXSk6WzMsNF07Y2FzZSAxOnJldHVybiBjZT1ILnNlbnQoKSxiPWNlLnJlc3BvbnNlU3RhdHVzLG9lPWNlLnJlc3VsdC50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09''@;'; put 'put ''b2UmJihoZS5pbmZvKCJDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyIuY29uY2F0KG9lLCInIikpLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1vZSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksb2U/WzMsM106KEQ9bmV3IGouTm9TZXNzaW9uU3RhdGVFcnJv''@;'; put 'put ''cihiLHRoaXMuc2VydmVyVXJsK3NlLG51bGw9PT0odGU9VS5saW5rcy5maW5kKGZ1bmN0aW9uKE4pe3JldHVybiJsb2ciPT09Ti5yZWx9KSl8fHZvaWQgMD09PXRlP3ZvaWQgMDp0ZS5ocmVmKSx0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGZ1bmN0aW9uKE4pe3JldHVybiBOLnNlcnZlclJlc3Bv''@;'; put 'put ''bnNlU3RhdHVzPT09RC5zZXJ2ZXJSZXNwb25zZVN0YXR1c30pfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChEKSxoZS5pbmZvKEQubWVzc2FnZSkpLFs0LHRoaXMud2FpdEZvclNlc3Npb24oVSxxLGVlKV0pO2Nhc2UgMjpyZXR1cm5bMixILnNlbnQoKV07Y2FzZSAzOmNhc2UgNjpyZXR1cm4g''@;'; put 'put ''dGhpcy5sb2dnZWRFcnJvcnM9W10sWzIsb2VdO2Nhc2UgNDp0aHJvdyB0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcjtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA3OnJldHVyblsyXX19KX0pfSxYLnByb3RvdHlwZS5nZXRTZXNzaW9uU3RhdGU9ZnVuY3Rpb24oVSxxLGVlKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKG9lKXtzd2l0Y2gob2UubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFUsZWUsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6cX0pLnRo''@;'; put 'put ''ZW4oZnVuY3Rpb24oc2Upe3JldHVybntyZXN1bHQ6c2UucmVzdWx0LHJlc3BvbnNlU3RhdHVzOnNlLnN0YXR1c319KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxVLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBz''@;'; put 'put ''ZXNzaW9uIHN0YXRlLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsb2Uuc2VudCgpXX19KX0pfSxYLnByb3RvdHlwZS5nZXRWYXJpYWJsZT1mdW5jdGlvbihVLHEsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxvZT10aGlzO3JldHVybiBrKHRoaXMsZnVu''@;'; put 'put ''Y3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0ZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL3Nlc3Npb25zLyIpLmNvbmNhdChVLCIvdmFyaWFibGVzLyIpLmNvbmNhdChxKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRlLGVlKS5jYXRjaChm''@;'; put 'put ''dW5jdGlvbihoZSl7dGhyb3coMCxCLnByZWZpeE1lc3NhZ2UpKG9lLmdldEVycm9yTWVzc2FnZShoZSx0ZSwiR0VUIiksIkVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFyaWFibGUgJyIuY29uY2F0KHEsIicuICIpKX0pXTtjYXNlIDE6cmV0dXJuWzIsc2Uuc2VudCgpXX19KX0pfSxY''@;'; put 'put ''fSgpO08uU2Vzc2lvbk1hbmFnZXI9WX0sMTYyMjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbih0ZSl7Zm9yKHZhciBvZSxz''@;'; put 'put ''ZT0xLGhlPWFyZ3VtZW50cy5sZW5ndGg7c2U8aGU7c2UrKylmb3IodmFyIHVlIGluIG9lPWFyZ3VtZW50c1tzZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9lLHVlKSYmKHRlW3VlXT1vZVt1ZV0pO3JldHVybiB0ZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHRlLG9lLHNlLGhlKXtyZXR1cm4gbmV3KHNlfHwoc2U9UHJvbWlzZSkpKGZ1bmN0aW9uKHVlLGNlKXtmdW5jdGlvbiBHKEgpe3RyeXtEKGhlLm5leHQoSCkpfWNhdGNoKE4pe2NlKE4pfX1mdW5jdGlvbiBiKEgpe3RyeXtEKGhlLnRocm93''@;'; put 'put ''KEgpKX1jYXRjaChOKXtjZShOKX19ZnVuY3Rpb24gRChIKXt2YXIgTjtILmRvbmU/dWUoSC52YWx1ZSk6KE49SC52YWx1ZSxOIGluc3RhbmNlb2Ygc2U/TjpuZXcgc2UoZnVuY3Rpb24oZyl7ZyhOKX0pKS50aGVuKEcsYil9RCgoaGU9aGUuYXBwbHkodGUsb2V8fFtdKSkubmV4dCgpKX0pfSxF''@;'; put 'put ''PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKHRlLG9lKXt2YXIgc2UsaGUsdWUsY2UsRz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm4gdWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gY2U9e25leHQ6YigwKSx0aHJvdzpi''@;'; put 'put ''KDEpLHJldHVybjpiKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoY2VbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksY2U7ZnVuY3Rpb24gYihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7cmV0dXJuIGZ1bmN0aW9uKE4pe2lmKHNlKXRocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0c7KXRyeXtpZihzZT0xLGhlJiYodWU9MiZOWzBdP2hlLnJldHVybjpOWzBdP2hlLnRocm93fHwoKHVlPWhlLnJldHVybikmJnVlLmNhbGwoaGUpLDApOmhlLm5leHQpJiYhKHVlPXVlLmNhbGwoaGUsTlsxXSkp''@;'; put 'put ''LmRvbmUpcmV0dXJuIHVlO3N3aXRjaChoZT0wLHVlJiYoTj1bMiZOWzBdLHVlLnZhbHVlXSksTlswXSl7Y2FzZSAwOmNhc2UgMTp1ZT1OO2JyZWFrO2Nhc2UgNDpyZXR1cm4gRy5sYWJlbCsrLHt2YWx1ZTpOWzFdLGRvbmU6ITF9O2Nhc2UgNTpHLmxhYmVsKyssaGU9TlsxXSxOPVswXTtjb250''@;'; put 'put ''aW51ZTtjYXNlIDc6Tj1HLm9wcy5wb3AoKSxHLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh1ZT0odWU9Ry50cnlzKS5sZW5ndGg+MCYmdWVbdWUubGVuZ3RoLTFdKXx8NiE9PU5bMF0mJjIhPT1OWzBdKSl7Rz0wO2NvbnRpbnVlfWlmKDM9PT1OWzBdJiYoIXVlfHxOWzFdPnVl''@;'; put 'put ''WzBdJiZOWzFdPHVlWzNdKSl7Ry5sYWJlbD1OWzFdO2JyZWFrfWlmKDY9PT1OWzBdJiZHLmxhYmVsPHVlWzFdKXtHLmxhYmVsPXVlWzFdLHVlPU47YnJlYWt9aWYodWUmJkcubGFiZWw8dWVbMl0pe0cubGFiZWw9dWVbMl0sRy5vcHMucHVzaChOKTticmVha311ZVsyXSYmRy5vcHMucG9wKCks''@;'; put 'put ''Ry50cnlzLnBvcCgpO2NvbnRpbnVlfU49b2UuY2FsbCh0ZSxHKX1jYXRjaChnKXtOPVs2LGddLGhlPTB9ZmluYWxseXtzZT11ZT0wfWlmKDUmTlswXSl0aHJvdyBOWzFdO3JldHVybnt2YWx1ZTpOWzBdP05bMV06dm9pZCAwLGRvbmU6ITB9fShbRCxIXSl9fX07T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZXhlY3V0ZU9uQ29tcHV0ZUFwaT12b2lkIDA7dmFyIGo9Uig3NzU3KSxWPVIoOTc3OCksQj1SKDM2MDcpLFk9Uig3MDQpLFg9Uig1OTI4KSxVPVIoNzE0KSxxPVIoMTM0MyksZWU9Uig2NDk2KTtPLmV4ZWN1dGVPbkNvbXB1dGVBcGk9''@;'; put 'put ''ZnVuY3Rpb24gdGUob2Usc2UsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHYpe3ZhciBwLHc7cmV0dXJuIHZvaWQgMD09PUQmJihEPW51bGwpLHZvaWQgMD09PUgmJihIPSExKSx2b2lkIDA9PT1OJiYoTj0hMSksdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PVMmJihTPSExKSxrKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBKLG5lLGRlLGZlLHhlLExlLEZlLE9lLGplLFdlLEtlLFllLEplLGx0LFBlLGJlLEFlLFRlLHFlLFhlLFVlLGh0LE1lPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEZSl7c3dpdGNoKERlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEo9KGJ8''@;'; put 'put ''fHt9KS5hY2Nlc3NfdG9rZW4sYj9bNCwoMCxZLmdldFRva2Vucykob2UsYildOlszLDJdO2Nhc2UgMTpKPURlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sRGUubGFiZWw9MjtjYXNlIDI6bmU9ei5sb2dnZXJ8fEssRGUubGFiZWw9MztjYXNlIDM6cmV0dXJuIERlLnRyeXMucHVzaChbMywxOSwsMjBd''@;'; put 'put ''KSxkZT12b2lkIDAsWzQsc2UuZ2V0U2Vzc2lvbihKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24uICIpfSldO2Nhc2UgNDpyZXR1cm4gZmU9RGUuc2VudCgpLGRlPWZlLmlkLFM/WzQsc2UuZ2V0VmFy''@;'; put 'put ''aWFibGUoZGUsIlNZU0pPQklEIixKKS5jYXRjaChmdW5jdGlvbih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gdmFyaWFibGUuICIpfSldOlszLDZdO2Nhc2UgNTooeGU9RGUuc2VudCgpLnJlc3VsdCkmJnhlLnZhbHVlJiYoTGU9''@;'; put 'put ''aGU/dWUuc3BsaXQoaGUpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOnVlLCh6LmxvZ2dlcnx8SykuaW5mbygiVHJpZ2dlcmluZyAnIi5jb25jYXQoTGUsIicgd2l0aCBQSUQgIikuY29uY2F0KHhlLnZhbHVlLCIgYXQgIikuY29uY2F0KCgwLGoudGltZXN0YW1wVG9ZWVlZTU1EREhITU1T''@;'; put 'put ''UykoKSkpKSxEZS5sYWJlbD02O2Nhc2UgNjpyZXR1cm4gRmU9dm9pZCAwLCgwLFguaXNSZWxhdGl2ZVBhdGgpKHVlKT9GZT0iZXhlYy0iLmNvbmNhdCh1ZS5pbmNsdWRlcygiLyIpP3VlLnNwbGl0KCIvIilbMV06dWUpOihPZT11ZS5zcGxpdCgiLyIpLEZlPU9lLnBvcCgpKSxqZT17U1lTX0pF''@;'; put 'put ''U19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFguaXNSZWxhdGl2ZVBhdGgpKHVlKT9oZSsiLyIrdWU6dWV9LHYmJihqZT1JKEkoe30samUpLHYpKSxIJiYoamU9SShJKHt9LGplKSx7X0RFQlVHOjEzMX0pKSxXZT1bXSxEP0pTT04uc3RyaW5naWZ5KEQpLmluY2x1ZGVzKCI7Iik/WzQsKDAsZWUu''@;'; put 'put ''dXBsb2FkVGFibGVzKShvZSxELEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSldOlszLDhdOlszLDldO2Nhc2UgNzpyZXR1cm4gV2U9RGUuc2VudCgpLGplLl93ZWJpbl9maWxlX2NvdW50''@;'; put 'put ''PVdlLmxlbmd0aCxXZS5mb3JFYWNoKGZ1bmN0aW9uKHplLGl0KXtqZVsiX3dlYmluX2ZpbGV1cmkiLmNvbmNhdChpdCsxKV09Ii9maWxlcy9maWxlcy8iLmNvbmNhdCh6ZS5maWxlLmlkKSxqZVsiX3dlYmluX25hbWUiLmNvbmNhdChpdCsxKV09emUudGFibGVOYW1lfSksWzMsOV07Y2FzZSA4''@;'; put 'put ''OmplPUkoSSh7fSxqZSksKDAsVS5mb3JtYXREYXRhRm9yUmVxdWVzdCkoRCkpLERlLmxhYmVsPTk7Y2FzZSA5OnJldHVybiBLZT17bmFtZTpGZXx8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixjb2RlOmNlLHZhcmlhYmxlczpqZSx2ZXJzaW9uOjJ9''@;'; put 'put ''LFs0LG9lLnBvc3QoIi9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KGRlLCIvam9icyIpLEtlLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIHBvc3Rpbmcgam9iLiAiKX0pXTtjYXNlIDEwOnJldHVybiBZZT1EZS5zZW50KCks''@;'; put 'put ''SmU9WWUucmVzdWx0LGc/KEgmJihuZS5pbmZvKCJKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnIi5jb25jYXQoRmUsIicuIikpLG5lLmluZm8oIllvdSBjYW4gbW9uaXRvciB0aGUgam9iIHByb2dyZXNzIGF0ICciLmNvbmNhdChvZS5nZXRCYXNlVXJsKCkpLmNvbmNhdChKZS5saW5rcy5m''@;'; put 'put ''aW5kKGZ1bmN0aW9uKHplKXtyZXR1cm4ic3RhdGUiPT09emUucmVsfSkuaHJlZiwiJy4iKSkpLFs0LCgwLHEucG9sbEpvYlN0YXRlKShvZSxKZSxILGIsQyx7c2Vzc2lvbjpmZSxzZXNzaW9uTWFuYWdlcjpzZX0pLmNhdGNoKGZ1bmN0aW9uKHplKXtyZXR1cm4gayhNZSx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKCl7dmFyIGl0LHV0LE10LEh0LFB0LG9uO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oQ24pe3N3aXRjaChDbi5sYWJlbCl7Y2FzZSAwOnJldHVybiBpdD1udWxsPT09KFB0PXplPy5yZXNwb25zZSl8fHZvaWQgMD09PVB0P3ZvaWQgMDpQdC5kYXRhLHV0PS9lcnI9WzAtOV0qLC8u''@;'; put 'put ''ZXhlYyhpdCksIjUxMTMiIT09KG51bGw9PT0ob249dXQ/LlswXSl8fHZvaWQgMD09PW9uP3ZvaWQgMDpvbi5zbGljZSg0LC0xKSk/WzMsMl06KE10PUplLmxpbmtzLmZpbmQoZnVuY3Rpb24oVXQpe3JldHVybiJ1cCI9PT1VdC5yZWx9KS5ocmVmKyIvbG9nIixIdD16ZSxbNCwoMCxYLmZldGNo''@;'; put 'put ''TG9nQnlDaHVua3MpKG9lLEosTXQsMWU2KV0pO2Nhc2UgMTpIdC5sb2c9Q24uc2VudCgpLENuLmxhYmVsPTI7Y2FzZSAyOnRocm93KDAsVi5wcmVmaXhNZXNzYWdlKSh6ZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX19KX0pfSldKTpbMixmZV07Y2FzZSAxMTpyZXR1cm4g''@;'; put 'put ''bHQ9RGUuc2VudCgpLGI/WzQsKDAsWS5nZXRUb2tlbnMpKG9lLGIpXTpbMywxM107Y2FzZSAxMjpKPURlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sRGUubGFiZWw9MTM7Y2FzZSAxMzpyZXR1cm5bNCxvZS5nZXQoIi9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KGRlLCIvam9icy8iKS5jb25jYXQo''@;'; put 'put ''SmUuaWQpLEopLmNhdGNoKGZ1bmN0aW9uKHplKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoemUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pXTtjYXNlIDE0OnJldHVybiBQZT1EZS5zZW50KCkucmVzdWx0LGJlPXZvaWQgMCxBZT0iIixUZT1QZS5saW5rcy5maW5kKGZ1bmN0aW9u''@;'; put 'put ''KHplKXtyZXR1cm4ibG9nIj09PXplLnJlbH0pLEgmJlRlPyhxZT0iIi5jb25jYXQoVGUuaHJlZiwiL2NvbnRlbnQiKSxYZT1udWxsIT09KHc9bnVsbD09PShwPVBlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLmxpbmVDb3VudCkmJnZvaWQgMCE9PXc/dzoxZTYsWzQsKDAs''@;'; put 'put ''WC5mZXRjaExvZ0J5Q2h1bmtzKShvZSxKLHFlLFhlKV0pOlszLDE2XTtjYXNlIDE1OkFlPURlLnNlbnQoKSxEZS5sYWJlbD0xNjtjYXNlIDE2OmlmKGx0PT09cS5Kb2JTdGF0ZS5GYWlsZWR8fGx0PT09cS5Kb2JTdGF0ZS5FcnJvcil0aHJvdyBuZXcgQi5Db21wdXRlSm9iRXhlY3V0aW9uRXJy''@;'; put 'put ''b3IoUGUsQWUpO3JldHVybiBOPyhVZT0iL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQoZGUsIi9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnQiKSxbNCxvZS5nZXQoVWUsSiwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKHplKXtyZXR1cm4gayhNZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGl0LHV0LE10LEh0O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUHQpe3N3aXRjaChQdC5sYWJlbCl7Y2FzZSAwOnJldHVybiB6ZSBpbnN0YW5jZW9mIEIuTm90Rm91bmRFcnJvciYmVGU/KGl0PSIiLmNvbmNhdChUZS5ocmVmLCIvY29udGVudCIpLHV0PW51bGwhPT0oSHQ9bnVsbD09''@;'; put 'put ''PShNdD1QZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09TXQ/dm9pZCAwOk10LmxpbmVDb3VudCkmJnZvaWQgMCE9PUh0P0h0OjFlNixbNCwoMCxYLmZldGNoTG9nQnlDaHVua3MpKG9lLEosaXQsdXQpXSk6WzMsMl07Y2FzZSAxOnJldHVybiBBZT1QdC5zZW50KCksWzIsUHJvbWlzZS5yZWpl''@;'; put 'put ''Y3Qoe3N0YXR1czo1MDAsbG9nOkFlfSldO2Nhc2UgMjpyZXR1cm5bMix7cmVzdWx0OkpTT04uc3RyaW5naWZ5KHplKX1dfX0pfSl9KV0pOlsyLHtqb2I6UGUsbG9nOkFlfV07Y2FzZSAxNzpyZXR1cm4gYmU9RGUuc2VudCgpLFs0LHNlLmNsZWFyU2Vzc2lvbihkZSxKKS5jYXRjaChmdW5jdGlv''@;'; put 'put ''bih6ZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHplLCJFcnJvciB3aGlsZSBjbGVhcmluZyBzZXNzaW9uLiAiKX0pXTtjYXNlIDE4OnJldHVybiBEZS5zZW50KCksWzIse3Jlc3VsdDpiZT8ucmVzdWx0LGxvZzpBZX1dO2Nhc2UgMTk6aWYoNDA0PT09KGh0PURlLnNlbnQoKSkuc3RhdHVz''@;'; put 'put ''KXJldHVyblsyLHRlKG9lLHNlLGhlLHVlLGNlLEcsYixELEgsITEsITApXTt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoaHQsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBzY3JpcHQuICIpO2Nhc2UgMjA6cmV0dXJuWzJdfX0pfSl9fSw3NDU4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9Uig0MTU1KSxLPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihYLFUpe2Z1bmN0aW9uIHEob2Upe3RyeXt0ZShZLm5leHQob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIGVlKG9lKXt0''@;'; put 'put ''cnl7dGUoWS50aHJvdyhvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gdGUob2Upe3ZhciBzZTtvZS5kb25lP1gob2UudmFsdWUpOihzZT1vZS52YWx1ZSxzZSBpbnN0YW5jZW9mIEI/c2U6bmV3IEIoZnVuY3Rpb24oaGUpe2hlKHNlKX0pKS50aGVuKHEsZWUpfXRlKChZPVkuYXBwbHko''@;'; put 'put ''aixWfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihqLFYpe3ZhciBCLFksWCxVLHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWFswXSl0aHJvdyBYWzFdO3JldHVybiBYWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFU9e25leHQ6''@;'; put 'put ''ZWUoMCksdGhyb3c6ZWUoMSkscmV0dXJuOmVlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxVO2Z1bmN0aW9uIGVlKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe3JldHVybiBmdW5jdGlvbihzZSl7aWYo''@;'; put 'put ''Qil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoQj0xLFkmJihYPTImc2VbMF0/WS5yZXR1cm46c2VbMF0/WS50aHJvd3x8KChYPVkucmV0dXJuKSYmWC5jYWxsKFkpLDApOlkubmV4dCkmJiEoWD1YLmNhbGwoWSxz''@;'; put 'put ''ZVsxXSkpLmRvbmUpcmV0dXJuIFg7c3dpdGNoKFk9MCxYJiYoc2U9WzImc2VbMF0sWC52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlg9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBxLmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWT1zZVsxXSxzZT1b''@;'; put 'put ''MF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFg9KFg9cS50cnlzKS5sZW5ndGg+MCYmWFtYLmxlbmd0aC0xXSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFYfHxz''@;'; put 'put ''ZVsxXT5YWzBdJiZzZVsxXTxYWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8WFsxXSl7cS5sYWJlbD1YWzFdLFg9c2U7YnJlYWt9aWYoWCYmcS5sYWJlbDxYWzJdKXtxLmxhYmVsPVhbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9WFsyXSYmcS5vcHMucG9w''@;'; put 'put ''KCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPVYuY2FsbChqLHEpfWNhdGNoKGhlKXtzZT1bNixoZV0sWT0wfWZpbmFsbHl7Qj1YPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsb2VdKX19fTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRGaWxlU3RyZWFtPXZvaWQgMDt2YXIgaz1SKDI5NzUpLEU9Uig3NzU3KTtPLmdldEZpbGVTdHJlYW09ZnVuY3Rpb24oaixWKXtyZXR1cm4gSyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLFks''@;'; put 'put ''WCxVLHE7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihlZSl7c3dpdGNoKGVlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEI9UigyOTc1KS5jcmVhdGVXcml0ZVN0cmVhbSxZPVZ8fHouY3dkKCksWzQsKDAsay5pc0ZvbGRlcikoWSldO2Nhc2UgMTpyZXR1cm4gZWUuc2VudCgpPyhYPSIiLmNvbmNhdChq''@;'; put 'put ''Lm5hbWV8fCJqb2IiLCItIikuY29uY2F0KCgwLEUuZ2VuZXJhdGVUaW1lc3RhbXApKCksIi5sb2ciKSxVPVIoMjUyMCkscT1VLmpvaW4oVnx8ei5jd2QoKSxYKSxbNCxCKHEpXSk6WzMsM107Y2FzZSAyOmNhc2UgNDpyZXR1cm5bMixlZS5zZW50KCldO2Nhc2UgMzpyZXR1cm5bNCxCKFkpXX19''@;'; put 'put ''KX0pfX0sMTM0MzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSksSz1SKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihvZSl7Zm9yKHZhciBzZSxoZT0xLHVlPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg7aGU8dWU7aGUrKylmb3IodmFyIGNlIGluIHNlPWFyZ3VtZW50c1toZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGNlKSYmKG9lW2NlXT1zZVtjZV0pO3JldHVybiBvZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0''@;'; put 'put ''ZXJ8fGZ1bmN0aW9uKG9lLHNlLGhlLHVlKXtyZXR1cm4gbmV3KGhlfHwoaGU9UHJvbWlzZSkpKGZ1bmN0aW9uKGNlLEcpe2Z1bmN0aW9uIGIoTil7dHJ5e0godWUubmV4dChOKSl9Y2F0Y2goZyl7RyhnKX19ZnVuY3Rpb24gRChOKXt0cnl7SCh1ZS50aHJvdyhOKSl9Y2F0Y2goZyl7RyhnKX19''@;'; put 'put ''ZnVuY3Rpb24gSChOKXt2YXIgZztOLmRvbmU/Y2UoTi52YWx1ZSk6KGc9Ti52YWx1ZSxnIGluc3RhbmNlb2YgaGU/ZzpuZXcgaGUoZnVuY3Rpb24oQyl7QyhnKX0pKS50aGVuKGIsRCl9SCgodWU9dWUuYXBwbHkob2Usc2V8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0''@;'; put 'put ''b3J8fGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUsdWUsY2UsRyxiPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmNlWzBdKXRocm93IGNlWzFdO3JldHVybiBjZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBHPXtuZXh0OkQoMCksdGhyb3c6RCgxKSxyZXR1cm46RCgyKX0sImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmKEdbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksRztmdW5jdGlvbiBEKEgpe3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oZyl7aWYoaGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVh''@;'; put 'put ''ZHkgZXhlY3V0aW5nLiIpO2Zvcig7YjspdHJ5e2lmKGhlPTEsdWUmJihjZT0yJmdbMF0/dWUucmV0dXJuOmdbMF0/dWUudGhyb3d8fCgoY2U9dWUucmV0dXJuKSYmY2UuY2FsbCh1ZSksMCk6dWUubmV4dCkmJiEoY2U9Y2UuY2FsbCh1ZSxnWzFdKSkuZG9uZSlyZXR1cm4gY2U7c3dpdGNoKHVl''@;'; put 'put ''PTAsY2UmJihnPVsyJmdbMF0sY2UudmFsdWVdKSxnWzBdKXtjYXNlIDA6Y2FzZSAxOmNlPWc7YnJlYWs7Y2FzZSA0OnJldHVybiBiLmxhYmVsKysse3ZhbHVlOmdbMV0sZG9uZTohMX07Y2FzZSA1OmIubGFiZWwrKyx1ZT1nWzFdLGc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpnPWIub3BzLnBvcCgp''@;'; put 'put ''LGIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGNlPShjZT1iLnRyeXMpLmxlbmd0aD4wJiZjZVtjZS5sZW5ndGgtMV0pfHw2IT09Z1swXSYmMiE9PWdbMF0pKXtiPTA7Y29udGludWV9aWYoMz09PWdbMF0mJighY2V8fGdbMV0+Y2VbMF0mJmdbMV08Y2VbM10pKXtiLmxhYmVs''@;'; put 'put ''PWdbMV07YnJlYWt9aWYoNj09PWdbMF0mJmIubGFiZWw8Y2VbMV0pe2IubGFiZWw9Y2VbMV0sY2U9ZzticmVha31pZihjZSYmYi5sYWJlbDxjZVsyXSl7Yi5sYWJlbD1jZVsyXSxiLm9wcy5wdXNoKGcpO2JyZWFrfWNlWzJdJiZiLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWV9Zz1z''@;'; put 'put ''ZS5jYWxsKG9lLGIpfWNhdGNoKEMpe2c9WzYsQ10sdWU9MH1maW5hbGx5e2hlPWNlPTB9aWYoNSZnWzBdKXRocm93IGdbMV07cmV0dXJue3ZhbHVlOmdbMF0/Z1sxXTp2b2lkIDAsZG9uZTohMH19KFtILE5dKX19fSxqPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24ob2Usc2Us''@;'; put 'put ''aGUpe2lmKGhlfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIHVlLGNlPTAsRz1zZS5sZW5ndGg7Y2U8RztjZSsrKSF1ZSYmY2UgaW4gc2V8fCh1ZXx8KHVlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHNlLDAsY2UpKSx1ZVtjZV09c2VbY2VdKTtyZXR1cm4gb2UuY29uY2F0KHVl''@;'; put 'put ''fHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChzZSkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kb1BvbGw9Ty5wb2xsSm9iU3RhdGU9Ty5Kb2JTdGF0ZT12b2lkIDA7dmFyIFYsb2UsQj1SKDcwNCksWT1SKDEzOTUpLFg9UigxMjMwKSxV''@;'; put 'put ''PVIoNTkyOCk7KG9lPVY9Ty5Kb2JTdGF0ZXx8KE8uSm9iU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsb2UuUnVubmluZz0icnVubmluZyIsb2UuUGVuZGluZz0icGVuZGluZyIsb2UuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixvZS5Ob1N0YXRlPSIiLG9lLkZhaWxlZD0iZmFp''@;'; put 'put ''bGVkIixvZS5FcnJvcj0iZXJyb3IiLE8ucG9sbEpvYlN0YXRlPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQsSCxOLGcsQyxTLHYscCx3LEo7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihuZSl7c3dpdGNoKG5l''@;'; put 'put ''LmxhYmVsKXtjYXNlIDA6aWYoYj16LmxvZ2dlcnx8SyxEPWNlPy5zdHJlYW1Mb2d8fCExLEg9W3ttYXhQb2xsQ291bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xsQ291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHtt''@;'; put 'put ''YXhQb2xsQ291bnQ6MzQwMCxwb2xsSW50ZXJ2YWw6NmU0fV0sdm9pZCAwIT09Y2U/KE49W2NlXSx2b2lkIDAhPT0oZz1jZS5wb2xsU3RyYXRlZ3kpPyh0ZShnKSxnPWcuc29ydChmdW5jdGlvbihkZSxmZSl7cmV0dXJuIGRlLm1heFBvbGxDb3VudC1mZS5tYXhQb2xsQ291bnR9KSxOPWooaihb''@;'; put 'put ''XSxOLCEwKSxnLCEwKSk6Tj1qKGooW10sTiwhMCksSCwhMCkpOk49SCxDPU4uc3BsaWNlKDAsMSlbMF0sY2U9SShJKHt9LEMpLGNlfHx7fSksIShTPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oZGUpe3JldHVybiJzdGF0ZSI9PT1kZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJKb2Igc3RhdGUg''@;'; put 'put ''bGluayB3YXMgbm90IGZvdW5kLiIpO3JldHVybls0LHEob2Usc2UsVi5Ob1N0YXRlLGhlLHVlKS5jYXRjaChmdW5jdGlvbihkZSl7cmV0dXJuIGIuZXJyb3IoIkVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICIuY29uY2F0KFMuaHJlZiwiLiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBq''@;'; put 'put ''b2IgdG8gYmUgcnVubmluZy4iKSxkZSksVi5VbmF2YWlsYWJsZX0pXTtjYXNlIDE6cmV0dXJuIHY9bmUuc2VudCgpLHA9MCx2PT09Vi5Db21wbGV0ZWQ/WzIsUHJvbWlzZS5yZXNvbHZlKHYpXTpEJiYoMCxVLmlzTm9kZSkoKT9bNCwoMCxSKDc0NTgpLmdldEZpbGVTdHJlYW0pKHNlLGNlLmxv''@;'; put 'put ''Z0ZvbGRlclBhdGgpXTpbMywzXTtjYXNlIDI6dz1uZS5zZW50KCksbmUubGFiZWw9MztjYXNlIDM6cmV0dXJuWzQsKDAsTy5kb1BvbGwpKG9lLHNlLHYsaGUscCxjZSx1ZSxELHcsRyldO2Nhc2UgNDppZihKPW5lLnNlbnQoKSxwPUoucG9sbENvdW50LCFlZSh2PUouc3RhdGUpfHxwPj1jZS5t''@;'; put 'put ''YXhQb2xsQ291bnQmJiFOLmxlbmd0aClyZXR1cm5bMix2XTtuZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gTi5sZW5ndGgmJmVlKHYpPyhDPU4uc3BsaWNlKDAsMSlbMF0sY2UmJihDLmxvZ0ZvbGRlclBhdGg9Y2UubG9nRm9sZGVyUGF0aCksWzQsKDAsTy5kb1BvbGwpKG9lLHNlLHYsaGUscCxD''@;'; put 'put ''LHVlLEQsdyxHKV0pOlszLDddO2Nhc2UgNjpyZXR1cm4gSj1uZS5zZW50KCksdj1KLnN0YXRlLHA9Si5wb2xsQ291bnQsWzMsNV07Y2FzZSA3OnJldHVybiB3JiZ3LmVuZCgpLFsyLHZdfX0pfSl9O3ZhciBxPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlKXtyZXR1cm4gayh2b2lkIDAsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbigpe3ZhciBHLGI7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihEKXtzd2l0Y2goRC5sYWJlbCl7Y2FzZSAwOnJldHVybiBHPXNlLmxpbmtzLmZpbmQoZnVuY3Rpb24oSCl7cmV0dXJuInN0YXRlIj09PUgucmVsfSksZWUoaGUpPyhiPXZvaWQgMCxjZT9bNCwoMCxCLmdl''@;'; put 'put ''dFRva2Vucykob2UsY2UpXTpbMywyXSk6WzMsNF07Y2FzZSAxOmI9RC5zZW50KCksRC5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCxvZS5nZXQoIiIuY29uY2F0KEcuaHJlZiwiP19hY3Rpb249d2FpdCZ3YWl0PTMwMCIpLGI/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sdWUpLmNhdGNo''@;'; put 'put ''KGZ1bmN0aW9uKEgpe3Rocm93IG5ldyBZLkpvYlN0YXRlUG9sbEVycm9yKHNlLmlkLEgpfSldO2Nhc2UgMzpyZXR1cm5bMixELnNlbnQoKS5yZXN1bHQudHJpbSgpXTtjYXNlIDQ6cmV0dXJuWzIsaGVdfX0pfSl9LGVlPWZ1bmN0aW9uKG9lKXtyZXR1cm4gb2U9PT1WLlJ1bm5pbmd8fG9lPT09''@;'; put 'put ''Vi5Ob1N0YXRlfHxvZT09PVYuUGVuZGluZ3x8b2U9PT1WLlVuYXZhaWxhYmxlfTtPLmRvUG9sbD1mdW5jdGlvbihvZSxzZSxoZSx1ZSxjZSxHLGIsRCxILE4pe3JldHVybiBrKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsQyxTLHYscCx3LEosbmUsZGUsZmUseGU7cmV0''@;'; put 'put ''dXJuIEUodGhpcyxmdW5jdGlvbihMZSl7c3dpdGNoKExlLmxhYmVsKXtjYXNlIDA6Zz1HLm1heFBvbGxDb3VudCxDPUcucG9sbEludGVydmFsLFM9ei5sb2dnZXJ8fEssdj1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKEZlKXtyZXR1cm4ic3RhdGUiPT09RmUucmVsfSkscD0wLHc9aGUsSj1WLk5v''@;'; put 'put ''U3RhdGUsbmU9MCxkZT1mdW5jdGlvbigpe3ZhciBGZSxPZSxLZSxZZSxKZSxsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodDtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKE1lKXtzd2l0Y2goTWUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTiYmY2UmJmNlJTEwPT0wJiZiPyhLZT0oRmU9Ti5zZXNzaW9u''@;'; put 'put ''KS5pZCxKZT1zZS5pZCxbNCwoT2U9Ti5zZXNzaW9uTWFuYWdlcikuZ2V0U2Vzc2lvblN0YXRlKEZlLnN0YXRlVXJsLEZlLmV0YWcsWWU9Yi5hY2Nlc3NfdG9rZW4pLmNhdGNoKGZ1bmN0aW9uKERlKXt0aHJvdyBuZXcgWS5Kb2JTdGF0ZVBvbGxFcnJvcihKZSxEZSl9KV0pOlszLDJdO2Nhc2Ug''@;'; put 'put ''MTppZihsdD1NZS5zZW50KCksYmU9bHQucmVzcG9uc2VTdGF0dXMsIShBZT1mdW5jdGlvbihEZSl7cmV0dXJuW1guU2Vzc2lvblN0YXRlLlJ1bm5pbmcsWC5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVkZXMoRGUpfSkoUGU9bHQucmVzdWx0KXx8MjAwIT09YmUpdGhyb3cgT2UuY2xlYXJTZXNz''@;'; put 'put ''aW9uKEtlLFllKSxUZT1BZShQZSk/IlNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICIuY29uY2F0KGJlLCIuIik6IlNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBz''@;'; put 'put ''dGF0ZSBpcyAnIi5jb25jYXQoUGUsIiciKSxuZXcgWS5Kb2JTdGF0ZVBvbGxFcnJvcihKZSxuZXcgRXJyb3IoVGUpKTtNZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCxxKG9lLHNlLHcsdWUsYikuY2F0Y2goZnVuY3Rpb24oRGUpe2lmKHArKyxjZT49Z3x8cD49NSl0aHJvdyBEZTtyZXR1cm4g''@;'; put 'put ''Uy5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQodi5ocmVmLCIuIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLiIpLERlKSxWLlVuYXZhaWxhYmxlfSldO2Nhc2UgMzpyZXR1cm4gdz1NZS5zZW50KCksY2UrKyxxZT1zZS5saW5r''@;'; put 'put ''cy5maW5kKGZ1bmN0aW9uKERlKXtyZXR1cm4ic2VsZiI9PT1EZS5yZWx9KS5ocmVmLEQ/WzQsb2UuZ2V0KHFlLGI/LmFjY2Vzc190b2tlbildOlszLDddO2Nhc2UgNDpyZXR1cm4gWGU9TWUuc2VudCgpLnJlc3VsdCxVZT1udWxsIT09KHhlPW51bGw9PT0oZmU9WGUubG9nU3RhdGlzdGljcyl8''@;'; put 'put ''fHZvaWQgMD09PWZlP3ZvaWQgMDpmZS5saW5lQ291bnQpJiZ2b2lkIDAhPT14ZT94ZToxZTYsKGh0PSgoMCxVLmlzTm9kZSkoKT9SKDIwODApOntzYXZlTG9nOm51bGx9KS5zYXZlTG9nKT9bNCxodChzZSxvZSxuZSxVZSxILGI/LmFjY2Vzc190b2tlbildOlszLDZdO2Nhc2UgNTpNZS5zZW50''@;'; put 'put ''KCksTWUubGFiZWw9NjtjYXNlIDY6bmUrPVVlLE1lLmxhYmVsPTc7Y2FzZSA3OnJldHVybiB1ZSYmSiE9PXcmJihTLmluZm8oIlBvbGxpbmc6ICIuY29uY2F0KG9lLmdldEJhc2VVcmwoKStxZSwiL3N0YXRlIikpLFMuaW5mbygiQ3VycmVudCBqb2Igc3RhdGU6ICIuY29uY2F0KHcpKSxKPXcp''@;'; put 'put ''LHchPT1WLlVuYXZhaWxhYmxlJiZwPjAmJihwPTApLHc9PT1WLkNvbXBsZXRlZD9bMyw5XTpbNCwoMCxVLmRlbGF5KShDKV07Y2FzZSA4Ok1lLnNlbnQoKSxNZS5sYWJlbD05O2Nhc2UgOTpyZXR1cm5bMl19fSl9LExlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBlZSh3KSYmY2U8PWc/WzUsZGUo''@;'; put 'put ''KV06WzMsM107Y2FzZSAyOnJldHVybiBMZS5zZW50KCksWzMsMV07Y2FzZSAzOnJldHVyblsyLHtzdGF0ZTp3LHBvbGxDb3VudDpjZX1dfX0pfSl9O3ZhciB0ZT1mdW5jdGlvbihvZSl7dmFyIHNlPWZ1bmN0aW9uKGhlLHVlKXt0aHJvdyBuZXcgRXJyb3IoIlBvbGwgc3RyYXRlZ2llcyBhcmUg''@;'; put 'put ''bm90IHZhbGlkLiIuY29uY2F0KGhlPyIgIi5jb25jYXQoaGUpOiIiKS5jb25jYXQodWU/IiBJbnZhbGlkIHBvbGwgc3RyYXRlZ3k6IFxuIi5jb25jYXQoSlNPTi5zdHJpbmdpZnkodWUsbnVsbCwyKSk6IiIpKX07b2UuZm9yRWFjaChmdW5jdGlvbihoZSx1ZSl7dmFyIGNlPWhlLm1heFBvbGxD''@;'; put 'put ''b3VudCxHPWhlLnBvbGxJbnRlcnZhbDtjZTwxP3NlKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixoZSk6MCE9PXVlP2NlPD1vZVt1ZS0xXS5tYXhQb2xsQ291bnQmJnNlKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuICdtYXhQb2xsQ291''@;'; put 'put ''bnQnIGluIHByZXZpb3VzIHBvbGwgc3RyYXRlZ3kuIixoZSk6RzwxJiZzZSgiJ3BvbGxJbnRlcnZhbCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIsaGUpfSl9fSwyMDgwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlz''@;'; put 'put ''Ll9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUoc2Upe3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2go''@;'; put 'put ''aGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVguYXBwbHkoVixCfHxbXSkpLm5leHQoKSl9KX0saz10''@;'; put 'put ''aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVy''@;'; put 'put ''bjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''R2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUuY2FsbChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtz''@;'; put 'put ''d2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9aGVbMV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpo''@;'; put 'put ''ZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09PWhlWzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFd''@;'; put 'put ''PFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTticmVha31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5''@;'; put 'put ''cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19KFtvZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNhdmVMb2c9dm9pZCAwO3ZhciBFPVIoNTkyOCksaj1SKDYxMzEpO08uc2F2ZUxvZz1mdW5jdGlvbihWLEIsWSxYLFUscSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGVlLHRlLG9lO3JldHVybiBr''@;'; put 'put ''KHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOmlmKCFxKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KFYuaWQsIiBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNzIHRva2VuLiIpKTtpZighVSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkxvZ3MgZm9yIGpvYiAiLmNvbmNhdChWLmlkLCIgY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS4iKSk7aWYoZWU9ei5sb2dnZXJ8fEssISh0ZT1WLmxpbmtzLmZpbmQoZnVuY3Rpb24oaGUpe3JldHVybiJsb2ciPT09aGUucmVsfSkpKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiTG9nIFVSTCBmb3Igam9iICIuY29uY2F0KFYuaWQsIiB3YXMgbm90IGZvdW5kLiIpKTtyZXR1cm5bNCwoMCxFLmZldGNoTG9nKShCLHEsIiIuY29uY2F0KHRlLmhyZWYsIi9jb250ZW50IiksWSxYKV07Y2FzZSAxOnJldHVybiBvZT1zZS5zZW50KCksZWUuaW5mbygiV3JpdGlu''@;'; put 'put ''ZyBsb2dzIHRvICIuY29uY2F0KFUucGF0aCkpLFs0LCgwLGoud3JpdGVTdHJlYW0pKFUsb2V8fCIiKV07Y2FzZSAyOnJldHVybiBzZS5zZW50KCksWzJdfX0pfSl9fSw2NDk2OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9u''@;'; put 'put ''KEUsaixWLEIpe3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gVSh0ZSl7dHJ5e2VlKEIubmV4dCh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e2VlKEIudGhyb3codGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIGVl''@;'; put 'put ''KHRlKXt2YXIgb2U7dGUuZG9uZT9ZKHRlLnZhbHVlKToob2U9dGUudmFsdWUsb2UgaW5zdGFuY2VvZiBWP29lOm5ldyBWKGZ1bmN0aW9uKHNlKXtzZShvZSl9KSkudGhlbihVLHEpfWVlKChCPUIuYXBwbHkoRSxqfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxm''@;'; put 'put ''dW5jdGlvbihFLGope3ZhciBWLEIsWSxYLFU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWVswXSl0aHJvdyBZWzFdO3JldHVybiBZWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFg9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJldHVybjpxKDIpfSwiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U3ltYm9sJiYoWFtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxYO2Z1bmN0aW9uIHEoZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGlu''@;'; put 'put ''Zy4iKTtmb3IoO1U7KXRyeXtpZihWPTEsQiYmKFk9MiZvZVswXT9CLnJldHVybjpvZVswXT9CLnRocm93fHwoKFk9Qi5yZXR1cm4pJiZZLmNhbGwoQiksMCk6Qi5uZXh0KSYmIShZPVkuY2FsbChCLG9lWzFdKSkuZG9uZSlyZXR1cm4gWTtzd2l0Y2goQj0wLFkmJihvZT1bMiZvZVswXSxZLnZh''@;'; put 'put ''bHVlXSksb2VbMF0pe2Nhc2UgMDpjYXNlIDE6WT1vZTticmVhaztjYXNlIDQ6cmV0dXJuIFUubGFiZWwrKyx7dmFsdWU6b2VbMV0sZG9uZTohMX07Y2FzZSA1OlUubGFiZWwrKyxCPW9lWzFdLG9lPVswXTtjb250aW51ZTtjYXNlIDc6b2U9VS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRp''@;'; put 'put ''bnVlO2RlZmF1bHQ6aWYoISgoWT0oWT1VLnRyeXMpLmxlbmd0aD4wJiZZW1kubGVuZ3RoLTFdKXx8NiE9PW9lWzBdJiYyIT09b2VbMF0pKXtVPTA7Y29udGludWV9aWYoMz09PW9lWzBdJiYoIVl8fG9lWzFdPllbMF0mJm9lWzFdPFlbM10pKXtVLmxhYmVsPW9lWzFdO2JyZWFrfWlmKDY9PT1v''@;'; put 'put ''ZVswXSYmVS5sYWJlbDxZWzFdKXtVLmxhYmVsPVlbMV0sWT1vZTticmVha31pZihZJiZVLmxhYmVsPFlbMl0pe1UubGFiZWw9WVsyXSxVLm9wcy5wdXNoKG9lKTticmVha31ZWzJdJiZVLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWV9b2U9ai5jYWxsKEUsVSl9Y2F0Y2goc2Upe29l''@;'; put 'put ''PVs2LHNlXSxCPTB9ZmluYWxseXtWPVk9MH1pZig1Jm9lWzBdKXRocm93IG9lWzFdO3JldHVybnt2YWx1ZTpvZVswXT9vZVsxXTp2b2lkIDAsZG9uZTohMH19KFtlZSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnVwbG9hZFRhYmxl''@;'; put 'put ''cz12b2lkIDA7dmFyIEk9Uig5Nzc4KSxrPVIoMjQwMik7Ty51cGxvYWRUYWJsZXM9ZnVuY3Rpb24oRSxqLFYpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBCLFksWCxVLHEsZWUsdGU7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihvZSl7c3dpdGNoKG9lLmxhYmVs''@;'; put 'put ''KXtjYXNlIDA6Zm9yKFggaW4gQj1bXSxZPVtdLGopWS5wdXNoKFgpO1U9MCxvZS5sYWJlbD0xO2Nhc2UgMTppZighKFU8WS5sZW5ndGgpKXJldHVyblszLDRdO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT0oZWU9KDAsay5jb252ZXJ0VG9DU1YpKGoscT1ZW1VdKSkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO3JldHVybls0LEUudXBsb2FkRmlsZSgiL2ZpbGVzL2ZpbGVzI3Jhd1VwbG9hZCIsZWUsVikuY2F0Y2goZnVuY3Rpb24oc2Upe3Rocm93KDAsSS5wcmVmaXhN''@;'; put 'put ''ZXNzYWdlKShzZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGUuICIpfSldO2Nhc2UgMjp0ZT1vZS5zZW50KCksQi5wdXNoKHt0YWJsZU5hbWU6cSxmaWxlOnRlLnJlc3VsdH0pLG9lLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBVKyssWzMsMV07Y2FzZSA0OnJldHVyblsyLEJdfX0pfSl9fSw2''@;'; put 'put ''MTMxOmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihLLEksayxFKXtyZXR1cm4gbmV3KGt8fChrPVByb21pc2UpKShmdW5jdGlvbihqLFYpe2Z1bmN0aW9uIEIoVSl7dHJ5e1goRS5uZXh0KFUpKX1jYXRjaChxKXtWKHEpfX1m''@;'; put 'put ''dW5jdGlvbiBZKFUpe3RyeXtYKEUudGhyb3coVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFgoVSl7dmFyIHE7VS5kb25lP2ooVS52YWx1ZSk6KHE9VS52YWx1ZSxxIGluc3RhbmNlb2Ygaz9xOm5ldyBrKGZ1bmN0aW9uKGVlKXtlZShxKX0pKS50aGVuKEIsWSl9WCgoRT1FLmFwcGx5KEss''@;'; put 'put ''SXx8W10pKS5uZXh0KCkpfSl9LHo9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oSyxJKXt2YXIgayxFLGosVixCPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmpbMF0pdGhyb3cgalsxXTtyZXR1cm4galsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBWPXtuZXh0Olko''@;'; put 'put ''MCksdGhyb3c6WSgxKSxyZXR1cm46WSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFZbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksVjtmdW5jdGlvbiBZKFgpe3JldHVybiBmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSl7aWYoayl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtCOyl0cnl7aWYoaz0xLEUmJihqPTImcVswXT9FLnJldHVybjpxWzBdP0UudGhyb3d8fCgoaj1FLnJldHVybikmJmouY2FsbChFKSwwKTpFLm5leHQpJiYhKGo9ai5jYWxsKEUscVsxXSkpLmRvbmUp''@;'; put 'put ''cmV0dXJuIGo7c3dpdGNoKEU9MCxqJiYocT1bMiZxWzBdLGoudmFsdWVdKSxxWzBdKXtjYXNlIDA6Y2FzZSAxOmo9cTticmVhaztjYXNlIDQ6cmV0dXJuIEIubGFiZWwrKyx7dmFsdWU6cVsxXSxkb25lOiExfTtjYXNlIDU6Qi5sYWJlbCsrLEU9cVsxXSxxPVswXTtjb250aW51ZTtjYXNlIDc6''@;'; put 'put ''cT1CLm9wcy5wb3AoKSxCLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChqPShqPUIudHJ5cykubGVuZ3RoPjAmJmpbai5sZW5ndGgtMV0pfHw2IT09cVswXSYmMiE9PXFbMF0pKXtCPTA7Y29udGludWV9aWYoMz09PXFbMF0mJighanx8cVsxXT5qWzBdJiZxWzFdPGpbM10pKXtC''@;'; put 'put ''LmxhYmVsPXFbMV07YnJlYWt9aWYoNj09PXFbMF0mJkIubGFiZWw8alsxXSl7Qi5sYWJlbD1qWzFdLGo9cTticmVha31pZihqJiZCLmxhYmVsPGpbMl0pe0IubGFiZWw9alsyXSxCLm9wcy5wdXNoKHEpO2JyZWFrfWpbMl0mJkIub3BzLnBvcCgpLEIudHJ5cy5wb3AoKTtjb250aW51ZX1xPUku''@;'; put 'put ''Y2FsbChLLEIpfWNhdGNoKGVlKXtxPVs2LGVlXSxFPTB9ZmluYWxseXtrPWo9MH1pZig1JnFbMF0pdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX0oW1gsVV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9''@;'; put 'put ''KSxPLndyaXRlU3RyZWFtPXZvaWQgMCxPLndyaXRlU3RyZWFtPWZ1bmN0aW9uKEssSSl7cmV0dXJuIFIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGspe3JldHVyblsyLEsud3JpdGUoSSsiXG4iLGZ1bmN0aW9uKEUpe3JldHVybiBFP1By''@;'; put 'put ''b21pc2UucmVqZWN0KEUpOlByb21pc2UucmVzb2x2ZSgpfSldfSl9KX19LDI4NTE6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpLEs9Uig0MTU1KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihvZSxzZSxoZSx1ZSl7cmV0dXJuIG5ldyhoZXx8KGhl''@;'; put 'put ''PVByb21pc2UpKShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiBiKE4pe3RyeXtIKHVlLm5leHQoTikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEQoTil7dHJ5e0godWUudGhyb3coTikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEgoTil7dmFyIGc7Ti5kb25lP2NlKE4udmFsdWUpOihnPU4u''@;'; put 'put ''dmFsdWUsZyBpbnN0YW5jZW9mIGhlP2c6bmV3IGhlKGZ1bmN0aW9uKEMpe0MoZyl9KSkudGhlbihiLEQpfUgoKHVlPXVlLmFwcGx5KG9lLHNlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihvZSxzZSl7dmFyIGhlLHVlLGNlLEcsYj17bGFiZWw6''@;'; put 'put ''MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm4gY2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRz17bmV4dDpEKDApLHRocm93OkQoMSkscmV0dXJuOkQoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihHW1N5bWJvbC5pdGVyYXRvcl09ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gRChIKXtyZXR1cm4gZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKGcpe2lmKGhlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2I7KXRyeXtpZihoZT0xLHVlJiYoY2U9''@;'; put 'put ''MiZnWzBdP3VlLnJldHVybjpnWzBdP3VlLnRocm93fHwoKGNlPXVlLnJldHVybikmJmNlLmNhbGwodWUpLDApOnVlLm5leHQpJiYhKGNlPWNlLmNhbGwodWUsZ1sxXSkpLmRvbmUpcmV0dXJuIGNlO3N3aXRjaCh1ZT0wLGNlJiYoZz1bMiZnWzBdLGNlLnZhbHVlXSksZ1swXSl7Y2FzZSAwOmNh''@;'; put 'put ''c2UgMTpjZT1nO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYi5sYWJlbCsrLHt2YWx1ZTpnWzFdLGRvbmU6ITF9O2Nhc2UgNTpiLmxhYmVsKyssdWU9Z1sxXSxnPVswXTtjb250aW51ZTtjYXNlIDc6Zz1iLm9wcy5wb3AoKSxiLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChjZT0oY2U9''@;'; put 'put ''Yi50cnlzKS5sZW5ndGg+MCYmY2VbY2UubGVuZ3RoLTFdKXx8NiE9PWdbMF0mJjIhPT1nWzBdKSl7Yj0wO2NvbnRpbnVlfWlmKDM9PT1nWzBdJiYoIWNlfHxnWzFdPmNlWzBdJiZnWzFdPGNlWzNdKSl7Yi5sYWJlbD1nWzFdO2JyZWFrfWlmKDY9PT1nWzBdJiZiLmxhYmVsPGNlWzFdKXtiLmxh''@;'; put 'put ''YmVsPWNlWzFdLGNlPWc7YnJlYWt9aWYoY2UmJmIubGFiZWw8Y2VbMl0pe2IubGFiZWw9Y2VbMl0sYi5vcHMucHVzaChnKTticmVha31jZVsyXSYmYi5vcHMucG9wKCksYi50cnlzLnBvcCgpO2NvbnRpbnVlfWc9c2UuY2FsbChvZSxiKX1jYXRjaChDKXtnPVs2LENdLHVlPTB9ZmluYWxseXto''@;'; put 'put ''ZT1jZT0wfWlmKDUmZ1swXSl0aHJvdyBnWzFdO3JldHVybnt2YWx1ZTpnWzBdP2dbMV06dm9pZCAwLGRvbmU6ITB9fShbSCxOXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQXV0aE1hbmFnZXI9dm9pZCAwO3ZhciBFPVIoMzkwMCksaj1S''@;'; put 'put ''KDEzOTUpLFY9Uig1OTI4KSxCPVIoMTE3MCksWT1SKDU0MTgpLFg9Uig0NTgyKSxVPVIoNjU0NykscT1mdW5jdGlvbigpe2Z1bmN0aW9uIG9lKHNlLGhlLHVlLGNlKXt2YXIgRz10aGlzO3RoaXMuc2VydmVyVXJsPXNlLHRoaXMuc2VydmVyVHlwZT1oZSx0aGlzLnJlcXVlc3RDbGllbnQ9dWUs''@;'; put 'put ''dGhpcy5sb2dpbkNhbGxiYWNrPWNlLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9ZnVuY3Rpb24oYil7c3dpdGNoKEcuc2VydmVyVHlwZSl7Y2FzZSBFLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzVml5YTpyZXR1cm4gYj8uaWQ7Y2FzZSBFLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIEUuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gYj8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gei5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBm''@;'; put 'put ''dW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPWZ1bmN0aW9uKGIpe3N3aXRjaChHLnNlcnZlclR5cGUpe2Nhc2UgRS5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIGI/Lm5hbWU7Y2FzZSBFLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxCLmV4dHJhY3RVc2VyTG9uZ05h''@;'; put 'put ''bWVTYXM5KShiKTtjYXNlIEUuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gYj8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gei5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dpblVybD1mdW5jdGlvbihi''@;'; put 'put ''KXt2YXIgRD1iWzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1EWzBdKXtEPUQuc3Vic3RyKDEpO3ZhciBIPUcuc2VydmVyVXJsPyIiLmNvbmNhdChHLnNlcnZlclVybCwiLyIpLmNvbmNhdChEKToiIi5jb25jYXQoRCk7Ry5sb2dpblVybD1HLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5''@;'; put 'put ''cGUuU2FzVml5YT9IOkgucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FTTG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXM5PyIvU0FTTG9nb24vbG9nb3V0''@;'; put 'put ''PyI6dGhpcy5zZXJ2ZXJUeXBlPT09RS5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCJ9cmV0dXJuIG9lLnByb3RvdHlwZS5yZWRpcmVjdGVkTG9nSW49ZnVuY3Rpb24oc2Upe3ZhciBoZT1zZS5vbkxvZ2dlZE91dDtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsRyxiLEQsSCxOLGcsQyxTO3JldHVybiBrKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUoKV07Y2FzZSAxOnJldHVybiB1ZT12LnNlbnQoKSxHPXVlLnVz''@;'; put 'put ''ZXJOYW1lLGI9dWUudXNlckxvbmdOYW1lLHVlLmlzTG9nZ2VkSW4/KChLLmxvZ2dlcnx8eikubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4g''@;'; put 'put ''di5zZW50KCksWzIse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6Ryx1c2VyTG9uZ05hbWU6Yn1dO2Nhc2UgMzpyZXR1cm5bNCwoMCxZLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0saGUpXTtjYXNlIDQ6cmV0dXJu''@;'; put 'put ''KEQ9di5zZW50KCkpP3RoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXNWaXlhP1szLDZdOls0LCgwLFUudmVyaWZ5U2FzVml5YUxvZ2luKShEKV06WzIse2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV07Y2FzZSA1OnJldHVybiBOPXYuc2VudCgpLFsz''@;'; put 'put ''LDhdO2Nhc2UgNjpyZXR1cm5bNCwoMCxYLnZlcmlmeVNhczlMb2dpbikoRCldO2Nhc2UgNzpOPXYuc2VudCgpLHYubGFiZWw9ODtjYXNlIDg6cmV0dXJuIEg9Ti5pc0xvZ2dlZEluLEQuY2xvc2UoKSxIP3RoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXM5P1szLDEwXTpbNCx0aGlz''@;'; put 'put ''LnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCldOlszLDEzXTtjYXNlIDk6di5zZW50KCksdi5sYWJlbD0xMDtjYXNlIDEwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDExOnJldHVybiBnPXYuc2VudCgpLEM9Zy51c2VyTmFtZSxTPWcudXNlckxvbmdOYW1lLFs0LHRoaXMu''@;'; put 'put ''bG9naW5DYWxsYmFjaygpXTtjYXNlIDEyOnJldHVybiB2LnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpDLHVzZXJMb25nTmFtZTpTfV07Y2FzZSAxMzpyZXR1cm5bMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XX19KX0pfSxvZS5wcm90b3R5''@;'; put 'put ''cGUubG9nSW49ZnVuY3Rpb24oc2UsaGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxjZSxiLEQsSCxOLGcsQztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHVlPXtfc2VydmljZToiZGVmYXVsdCIs''@;'; put 'put ''dXNlcm5hbWU6c2UscGFzc3dvcmQ6aGV9LHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07Y2FzZSAxOnJldHVybiBjZT1TLnNlbnQoKSxiPWNlLmxvZ2luRm9ybSxEPWNlLnVzZXJMb25nTmFtZSxjZS5pc0xvZ2dlZEluPygoSy5s''@;'; put 'put ''b2dnZXJ8fHopLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIiksWzQsdGhpcy5sb2dpbkNhbGxiYWNrKCldKTpbMywzXTtjYXNlIDI6cmV0dXJuIFMuc2VudCgpLHRoaXMudXNlck5hbWU9dWUudXNlcm5hbWUsdGhpcy51c2Vy''@;'; put 'put ''TG9uZ05hbWU9RCxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoYix1ZSldO2Nhc2UgNDpyZXR1cm4gSD1TLnNlbnQoKSwoTj10ZSh0aGlz''@;'; put 'put ''LnNlcnZlclR5cGUsSCkpP1szLDldOmVlKEgpP1s0LHRoaXMuZ2V0TG9naW5Gb3JtKEgpXTpbMyw3XTtjYXNlIDU6cmV0dXJuIGc9Uy5zZW50KCksWzQsdGhpcy5zZW5kTG9naW5SZXF1ZXN0KGcsdWUpXTtjYXNlIDY6SD1TLnNlbnQoKSxTLmxhYmVsPTc7Y2FzZSA3OnJldHVybls0LHRoaXMu''@;'; put 'put ''Y2hlY2tTZXNzaW9uKCldO2Nhc2UgODpDPVMuc2VudCgpLE49Qy5pc0xvZ2dlZEluLHRoaXMudXNlckxvbmdOYW1lPUMudXNlckxvbmdOYW1lLFMubGFiZWw9OTtjYXNlIDk6cmV0dXJuIE4/dGhpcy5zZXJ2ZXJUeXBlIT09RS5TZXJ2ZXJUeXBlLlNhczk/WzMsMTFdOls0LHRoaXMucGVyZm9y''@;'; put 'put ''bUNBU1NlY3VyaXR5Q2hlY2soKV06WzMsMTJdO2Nhc2UgMTA6Uy5zZW50KCksUy5sYWJlbD0xMTtjYXNlIDExOnRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9dWUudXNlcm5hbWUsUy5sYWJlbD0xMjtjYXNlIDEyOnJldHVyblsyLHtpc0xvZ2dlZEluOk4sdXNlck5hbWU6dGhp''@;'; put 'put ''cy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9XX19KX0pfSxvZS5wcm90b3R5cGUucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2s9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2U7cmV0dXJuIGsodGhpcyxmdW5jdGlv''@;'; put 'put ''bihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHNlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL1NBU1N0b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3NlY3VyaXR5X2NoZWNrIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9''@;'; put 'put ''Ii5jb25jYXQoc2UpLHZvaWQgMCkuY2F0Y2goZnVuY3Rpb24odWUpe2lmKCEodWUgaW5zdGFuY2VvZiBqLk5vdEZvdW5kRXJyb3IpKXRocm93IHVlfSldO2Nhc2UgMTpyZXR1cm4gaGUuc2VudCgpLFsyXX19KX0pfSxvZS5wcm90b3R5cGUuc2VuZExvZ2luUmVxdWVzdD1mdW5jdGlvbihzZSxo''@;'; put 'put ''ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcsYjtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChELmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuc2VydmVyVHlwZSE9PUUuU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnJlcXVlc3RD''@;'; put 'put ''bGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLHt1c2VybmFtZTpoZS51c2VybmFtZSxwYXNzd29yZDpoZS5wYXNzd29yZH0sdm9pZCAwKV07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixELnNlbnQoKS5yZXN1bHRdO2Nhc2UgMjpmb3IoRyBpbiBzZSloZVtHXT1zZVtHXTtyZXR1cm4gYj0oMCxWLnNl''@;'; put 'put ''cmlhbGl6ZSkoaGUpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsYix2b2lkIDAsInRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9KV19fSl9KX0sb2UucHJvdG90eXBlLmNo''@;'; put 'put ''ZWNrU2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZSxoZSx1ZSxjZSxHO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oYil7c3dpdGNoKGIubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUoKV07Y2FzZSAx''@;'; put 'put ''OnJldHVybiBzZT1iLnNlbnQoKSx1ZT1zZS51c2VyTmFtZSxjZT1zZS51c2VyTG9uZ05hbWUsRz1udWxsLChoZT1zZS5pc0xvZ2dlZEluKT9bMyw0XTpbNCx0aGlzLmxvZ091dCgpXTtjYXNlIDI6cmV0dXJuIGIuc2VudCgpLFs0LHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCldO2Nhc2UgMzpHPWIu''@;'; put 'put ''c2VudCgpLGIubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIsUHJvbWlzZS5yZXNvbHZlKHtpc0xvZ2dlZEluOmhlLHVzZXJOYW1lOnVlLHVzZXJMb25nTmFtZTpjZSxsb2dpbkZvcm06R30pXX19KX0pfSxvZS5wcm90b3R5cGUuZ2V0TmV3TG9naW5Gb3JtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oaGUpe3N3aXRjaChoZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnNlcnZlclR5cGU9PT1FLlNlcnZlclR5cGUuU2FzanM/WzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiLyIsdm9pZCAw''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKHVlKXt2YXIgY2UsYj1udWxsPT09KGNlPS88c2NyaXB0PmRvY3VtZW50LmNvb2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyh1ZS5yZXN1bHQpKXx8dm9pZCAwPT09''@;'; put 'put ''Y2U/dm9pZCAwOmNlWzFdO2ImJihkb2N1bWVudC5jb29raWU9Yil9KV06WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ2luVXJsLnJlcGxhY2UoIi9TQVNMb2dvbi9sb2dpbi5kbyIsIi9TQVNMb2dvbi9sb2dpbiIpLHZvaWQgMCwidGV4dC9wbGFpbiIpXTtjYXNlIDE6cmV0dXJu''@;'; put 'put ''IHNlPWhlLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5nZXRMb2dpbkZvcm0oc2UpXTtjYXNlIDI6cmV0dXJuWzIsaGUuc2VudCgpXX19KX0pfSxvZS5wcm90b3R5cGUuZmV0Y2hVc2VyTmFtZT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZSxo''@;'; put 'put ''ZSx1ZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLHRoaXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXNWaXlhPyIvaWRlbnRpdGllcy91c2Vycy9AY3VycmVudFVzZXIiOnRo''@;'; put 'put ''aXMuc2VydmVyVHlwZT09PUUuU2VydmVyVHlwZS5TYXM5PyIvU0FTU3RvcmVkUHJvY2VzcyI6Ii9TQVNqc0FwaS9zZXNzaW9uIiksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChzZSx2b2lkIDAsInRleHQvcGxhaW4iKS5jYXRjaChmdW5jdGlvbihHKXtyZXR1cm57cmVzdWx0OiJhdXRoRXJy''@;'; put 'put ''In19KV07Y2FzZSAxOnJldHVybiBoZT1jZS5zZW50KCkucmVzdWx0LCh1ZT0iYXV0aEVyciIhPT1oZSk/WzMsM106WzQsdGhpcy5sb2dPdXQoKV07Y2FzZSAyOnJldHVybiBjZS5zZW50KCksWzIse2lzTG9nZ2VkSW46dWUsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV07Y2FzZSAzOnJl''@;'; put 'put ''dHVyblsyLHtpc0xvZ2dlZEluOnVlLHVzZXJOYW1lOnRoaXMuZXh0cmFjdFVzZXJOYW1lKGhlKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNlckxvbmdOYW1lKGhlKX1dfX0pfSl9LG9lLnByb3RvdHlwZS5nZXRMb2dpbkZvcm09ZnVuY3Rpb24oc2Upe3ZhciBoZT0vPGZvcm0uK2FjdGlv''@;'; put 'put ''bj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhzZSksdWU9e307aWYoaGUmJmhlLmxlbmd0aCl7dGhpcy5zZXRMb2dpblVybChoZSk7dmFyIGNlPShzZT1zZS5yZXBsYWNlKC88aW5wdXQvZywiXG48aW5wdXQiKSkubWF0Y2goLzxpbnB1dC4qImhpZGRlbiJbXj5dKj4vZyk7Y2Um''@;'; put 'put ''JmNlLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIGI9Ry5tYXRjaCgvbmFtZT0iKFteIl0qKSJcc3ZhbHVlPSIoW14iXSopLyk7YiYmYi5sZW5ndGgmJih1ZVtiWzFdXT1iWzJdKX0pfXJldHVybiBPYmplY3Qua2V5cyh1ZSkubGVuZ3RoP3VlOm51bGx9LG9lLnByb3RvdHlwZS5sb2dPdXQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHNlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyQ3NyZlRva2VucygpLFsyLHRoaXMucmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dvdXRVcmwsdm9pZCAw''@;'; put 'put ''KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KV19KX0pfSxvZX0oKTtPLkF1dGhNYW5hZ2VyPXE7dmFyIGVlPWZ1bmN0aW9uKG9lKXtyZXR1cm4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFzZSBlbnRlciB5''@;'; put 'put ''b3VyIGNyZWRlbnRpYWxzIGFnYWluLi9nbS50ZXN0KG9lKX0sdGU9ZnVuY3Rpb24ob2Usc2Upe3JldHVybiBvZT09PUUuU2VydmVyVHlwZS5TYXNqcz9zZT8ubG9nZ2VkaW46L1lvdSBoYXZlIHNpZ25lZCBpbi9nbS50ZXN0KHNlKX19LDU3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0ZShZLnRo''@;'; put 'put ''cm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8fFtdKSku''@;'; put 'put ''bmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgwKSx0aHJv''@;'; put 'put ''dzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFdKSkuZG9u''@;'; put 'put ''ZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtjb250aW51''@;'; put 'put ''ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFdPlhbMF0m''@;'; put 'put ''JnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMu''@;'; put 'put ''cG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO3ZhciBJPVIoOTc3OCksaz1SKDkwMTcpLEU9UigzOTAwKTtPLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24oaixWLEIpe3JldHVybiB6KHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbigpe3ZhciBYO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVSl7c3dpdGNoKFUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxqLnBvc3QoIi9TQVNqc0FwaS9hdXRoL3Rva2VuIixYPXtjbGllbnRJZDpWLGNvZGU6Qn0sdm9pZCAwKS50aGVuKGZ1bmN0aW9uKHEpe3ZhciBlZT1xLnJlc3Vs''@;'; put 'put ''dDtyZXR1cm57YWNjZXNzX3Rva2VuOmVlLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46ZWUucmVmcmVzaFRva2VufX0pLmNhdGNoKGZ1bmN0aW9uKHEpe3Rocm93KDAsSS5wcmVmaXhNZXNzYWdlKShxLCgwLGsuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3Mg''@;'; put 'put ''dG9rZW4iLCJnZXRBY2Nlc3NUb2tlbkZvclNhc2pzIixFLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRoL3Rva2VuIixYLFYpKX0pXTtjYXNlIDE6cmV0dXJuWzIsVS5zZW50KCldfX0pfSl9fSwzNTY5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig4NzY0KS5C''@;'; put 'put ''dWZmZXIsSz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixZLFgsVSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocSxlZSl7ZnVuY3Rpb24gdGUoaGUpe3RyeXtzZShVLm5leHQoaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBvZShoZSl7dHJ5e3Nl''@;'; put 'put ''KFUudGhyb3coaGUpKX1jYXRjaCh1ZSl7ZWUodWUpfX1mdW5jdGlvbiBzZShoZSl7dmFyIHVlO2hlLmRvbmU/cShoZS52YWx1ZSk6KHVlPWhlLnZhbHVlLHVlIGluc3RhbmNlb2YgWD91ZTpuZXcgWChmdW5jdGlvbihjZSl7Y2UodWUpfSkpLnRoZW4odGUsb2UpfXNlKChVPVUuYXBwbHkoQixZ''@;'; put 'put ''fHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihCLFkpe3ZhciBYLFUscSxlZSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZWU9e25leHQ6''@;'; put 'put ''b2UoMCksdGhyb3c6b2UoMSkscmV0dXJuOm9lKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoZWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksZWU7ZnVuY3Rpb24gb2Uoc2Upe3JldHVybiBmdW5jdGlvbihoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtp''@;'; put 'put ''ZihYKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoWD0xLFUmJihxPTImdWVbMF0/VS5yZXR1cm46dWVbMF0/VS50aHJvd3x8KChxPVUucmV0dXJuKSYmcS5jYWxsKFUpLDApOlUubmV4dCkmJiEocT1xLmNhbGwo''@;'; put 'put ''VSx1ZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKFU9MCxxJiYodWU9WzImdWVbMF0scS52YWx1ZV0pLHVlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9dWU7YnJlYWs7Y2FzZSA0OnJldHVybiB0ZS5sYWJlbCsrLHt2YWx1ZTp1ZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyxVPXVlWzFd''@;'; put 'put ''LHVlPVswXTtjb250aW51ZTtjYXNlIDc6dWU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPXRlLnRyeXMpLmxlbmd0aD4wJiZxW3EubGVuZ3RoLTFdKXx8NiE9PXVlWzBdJiYyIT09dWVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT11ZVsw''@;'; put 'put ''XSYmKCFxfHx1ZVsxXT5xWzBdJiZ1ZVsxXTxxWzNdKSl7dGUubGFiZWw9dWVbMV07YnJlYWt9aWYoNj09PXVlWzBdJiZ0ZS5sYWJlbDxxWzFdKXt0ZS5sYWJlbD1xWzFdLHE9dWU7YnJlYWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaCh1ZSk7YnJlYWt9''@;'; put 'put ''cVsyXSYmdGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9dWU9WS5jYWxsKEIsdGUpfWNhdGNoKGNlKXt1ZT1bNixjZV0sVT0wfWZpbmFsbHl7WD1xPTB9aWYoNSZ1ZVswXSl0aHJvdyB1ZVsxXTtyZXR1cm57dmFsdWU6dWVbMF0/dWVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2Us''@;'; put 'put ''aGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO3ZhciBrPVIoMzkwMCksRT1SKDk3NzgpLGo9UigxMzk1KSxWPVIoOTAxNyk7Ty5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24o''@;'; put 'put ''QixZLFgsVSl7cmV0dXJuIEsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsZWUsdGUsb2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9dm9pZCAwPT09ej9idG9hKFkrIjoiK1gpOnouZnJvbShZKyI6IitY''@;'; put 'put ''KS50b1N0cmluZygiYmFzZTY0IiksZWU9Ii9TQVNMb2dvbi9vYXV0aC90b2tlbiIsdGU9e0F1dGhvcml6YXRpb246IkJhc2ljICIrcSxBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxvZT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6''@;'; put 'put ''VX0pLHNlPW5ldyBVUkxTZWFyY2hQYXJhbXMob2UpLFs0LEIucG9zdChlZSxzZSx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsdGUpLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiB1ZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbih1ZSl7dGhyb3cgdWUgaW5zdGFu''@;'; put 'put ''Y2VvZiBqLkNlcnRpZmljYXRlRXJyb3I/dWU6KDAsRS5wcmVmaXhNZXNzYWdlKSh1ZSwoMCxWLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixrLlNlcnZlclR5cGUuU2FzVml5YSxlZSxvZSx0ZSxZLFgp''@;'; put 'put ''KX0pXTtjYXNlIDE6cmV0dXJuWzIsaGUuc2VudCgpXX19KX0pfX0sOTAxNzooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9Ty5nZXRUb2tlblJl''@;'; put 'put ''cXVlc3RFcnJvclByZWZpeD12b2lkIDA7dmFyIHo9UigzOTAwKSxLPWZ1bmN0aW9uKEkpe3JldHVybiJSZXNwb25zZSBmcm9tICIuY29uY2F0KEk9PT16LlNlcnZlclR5cGUuU2FzVml5YT8iVml5YSI6IlNhc2pzIiwiIGlzIGJlbG93LiIpfTtPLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4''@;'; put 'put ''PWZ1bmN0aW9uKEksayxFLGosVixCLFksWCl7dmFyIFU9ZnVuY3Rpb24oZWUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlZSxudWxsLDIpfSxxPVsiRXJyb3Igd2hpbGUgIi5jb25jYXQoSSwiIGZyb20gIikuY29uY2F0KGopLCJUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICIuY29uY2F0''@;'; put 'put ''KGssIiBmdW5jdGlvbi4iKV07cmV0dXJuIFYmJihxLnB1c2goIlBheWxvYWQ6IikscS5wdXNoKFUoVikpKSxCJiYocS5wdXNoKCJIZWFkZXJzOiIpLHEucHVzaChVKEIpKSksWSYmcS5wdXNoKCJDbGllbnRJZDogIi5jb25jYXQoWSkpLFgmJnEucHVzaCgiQ2xpZW50U2VjcmV0OiAiLmNvbmNh''@;'; put 'put ''dChYKSkscS5wdXNoKCIiKSxxLnB1c2goIiIuY29uY2F0KEsoRSkpKSxxLnB1c2goIiIpLHEuam9pbigiXG4iKX0sTy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPWZ1bmN0aW9uKEksayl7cmV0dXJuIEkuc3BsaXQoIiIuY29uY2F0KEsoayksIlxuIikpLnBvcCgpfX0sNzA0''@;'; put 'put ''OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWSxYLFUscSl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oZWUsdGUpe2Z1bmN0aW9uIG9lKHVlKXt0cnl7aGUocS5u''@;'; put 'put ''ZXh0KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gc2UodWUpe3RyeXtoZShxLnRocm93KHVlKSl9Y2F0Y2goY2Upe3RlKGNlKX19ZnVuY3Rpb24gaGUodWUpe3ZhciBjZTt1ZS5kb25lP2VlKHVlLnZhbHVlKTooY2U9dWUudmFsdWUsY2UgaW5zdGFuY2VvZiBVP2NlOm5ldyBVKGZ1''@;'; put 'put ''bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4ob2Usc2UpfWhlKChxPXEuYXBwbHkoWSxYfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihZLFgpe3ZhciBVLHEsZWUsdGUsb2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZWVbMF0pdGhyb3cg''@;'; put 'put ''ZWVbMV07cmV0dXJuIGVlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0''@;'; put 'put ''aW9uIHNlKGhlKXtyZXR1cm4gZnVuY3Rpb24odWUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoVSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtvZTspdHJ5e2lmKFU9MSxxJiYoZWU9MiZjZVswXT9xLnJldHVybjpjZVswXT9xLnRo''@;'; put 'put ''cm93fHwoKGVlPXEucmV0dXJuKSYmZWUuY2FsbChxKSwwKTpxLm5leHQpJiYhKGVlPWVlLmNhbGwocSxjZVsxXSkpLmRvbmUpcmV0dXJuIGVlO3N3aXRjaChxPTAsZWUmJihjZT1bMiZjZVswXSxlZS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOmVlPWNlO2JyZWFrO2Nhc2UgNDpyZXR1''@;'; put 'put ''cm4gb2UubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1Om9lLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPW9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZWU9KGVlPW9lLnRyeXMpLmxlbmd0aD4wJiZl''@;'; put 'put ''ZVtlZS5sZW5ndGgtMV0pfHw2IT09Y2VbMF0mJjIhPT1jZVswXSkpe29lPTA7Y29udGludWV9aWYoMz09PWNlWzBdJiYoIWVlfHxjZVsxXT5lZVswXSYmY2VbMV08ZWVbM10pKXtvZS5sYWJlbD1jZVsxXTticmVha31pZig2PT09Y2VbMF0mJm9lLmxhYmVsPGVlWzFdKXtvZS5sYWJlbD1lZVsx''@;'; put 'put ''XSxlZT1jZTticmVha31pZihlZSYmb2UubGFiZWw8ZWVbMl0pe29lLmxhYmVsPWVlWzJdLG9lLm9wcy5wdXNoKGNlKTticmVha31lZVsyXSYmb2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWV9Y2U9WC5jYWxsKFksb2UpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e1U9''@;'; put 'put ''ZWU9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtoZSx1ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldFRva2Vucz12b2lkIDA7dmFyIEU9Uig2Nzk5KSxq''@;'; put 'put ''PVIoMzkwMCksVj1SKDM2NiksQj1SKDI0OSk7Ty5nZXRUb2tlbnM9ZnVuY3Rpb24oWSxYLFUpe3JldHVybiB2b2lkIDA9PT1VJiYoVT1qLlNlcnZlclR5cGUuU2FzVml5YSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxlZSx0ZSxvZSxzZSx1ZSxjZTtyZXR1cm4gayh0''@;'; put 'put ''aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6aWYocT16LmxvZ2dlcnx8Syx0ZT1YLnJlZnJlc2hfdG9rZW4sb2U9WC5jbGllbnQsc2U9WC5zZWNyZXQsISgwLEUuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nKShlZT1YLmFjY2Vzc190b2tlbikmJiEoMCxFLmlzUmVmcmVzaFRv''@;'; put 'put ''a2VuRXhwaXJpbmcpKHRlKSlyZXR1cm5bMyw1XTtpZigoMCxFLmhhc1Rva2VuRXhwaXJlZCkodGUpKXRocm93IHEuZXJyb3IoIlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiIpLG5ldyBFcnJvcigiVW5hYmxlIHRvIG9i''@;'; put 'put ''dGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIik7cmV0dXJuIHEuaW5mbygiUmVmcmVzaGluZyBhY2Nlc3MgYW5kIHJlZnJlc2ggdG9rZW5zLiIpLFUhPT1qLlNlcnZlclR5cGUuU2FzVml5YT9bMywyXTpbNCwoMCxWLnJlZnJlc2hUb2tlbnNG''@;'; put 'put ''b3JWaXlhKShZLG9lLHNlLHRlKV07Y2FzZSAxOnJldHVybiBjZT1HLnNlbnQoKSxbMyw0XTtjYXNlIDI6cmV0dXJuWzQsKDAsQi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKFksdGUpXTtjYXNlIDM6Y2U9Ry5zZW50KCksRy5sYWJlbD00O2Nhc2UgNDplZT0odWU9Y2UpLmFjY2Vzc190b2tlbix0''@;'; put 'put ''ZT11ZS5yZWZyZXNoX3Rva2VuLEcubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzIse2FjY2Vzc190b2tlbjplZSxyZWZyZXNoX3Rva2VuOnRlLGNsaWVudDpvZSxzZWNyZXQ6c2V9XX19KX0pfX0sMTUyNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVh''@;'; put 'put ''dGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01vZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChW''@;'; put 'put ''PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGosVil9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7''@;'; put 'put ''Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksSyhSKDI4NTEpLE8pLEsoUig5MDk3KSxPKSxLKFIoOTE2''@;'; put 'put ''NiksTyl9LDkwOTc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9dm9pZCAwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQ9ZnVuY3Rpb24oUil7cmV0dXJuLzxmb3Jt''@;'; put 'put ''LithY3Rpb249IiguKkxvZ29uXC9vYXV0aFwvYXV0aG9yaXplW14iXSopLio+L2dtLnRlc3QoUil9fSw5MTY2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzTG9nSW5SZXF1aXJlZD12b2lkIDAsTy5pc0xv''@;'; put 'put ''Z0luUmVxdWlyZWQ9ZnVuY3Rpb24oUil7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKihMb2dvbil8KGxvZ2luKVteIl0qKS4qPi9nbS50ZXN0KFIpfX0sNTQxODpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGosVixC''@;'; put 'put ''KXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIFUodGUpe3RyeXtlZShCLm5leHQodGUpKX1jYXRjaChvZSl7WChvZSl9fWZ1bmN0aW9uIHEodGUpe3RyeXtlZShCLnRocm93KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBlZSh0ZSl7dmFy''@;'; put 'put ''IG9lO3RlLmRvbmU/WSh0ZS52YWx1ZSk6KG9lPXRlLnZhbHVlLG9lIGluc3RhbmNlb2YgVj9vZTpuZXcgVihmdW5jdGlvbihzZSl7c2Uob2UpfSkpLnRoZW4oVSxxKX1lZSgoQj1CLmFwcGx5KEUsanx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24o''@;'; put 'put ''RSxqKXt2YXIgVixCLFksWCxVPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJllbMF0pdGhyb3cgWVsxXTtyZXR1cm4gWVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBYPXtuZXh0OnEoMCksdGhyb3c6cSgxKSxyZXR1cm46cSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm''@;'; put 'put ''KFhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWDtmdW5jdGlvbiBxKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihvZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9y''@;'; put 'put ''KDtVOyl0cnl7aWYoVj0xLEImJihZPTImb2VbMF0/Qi5yZXR1cm46b2VbMF0/Qi50aHJvd3x8KChZPUIucmV0dXJuKSYmWS5jYWxsKEIpLDApOkIubmV4dCkmJiEoWT1ZLmNhbGwoQixvZVsxXSkpLmRvbmUpcmV0dXJuIFk7c3dpdGNoKEI9MCxZJiYob2U9WzImb2VbMF0sWS52YWx1ZV0pLG9l''@;'; put 'put ''WzBdKXtjYXNlIDA6Y2FzZSAxOlk9b2U7YnJlYWs7Y2FzZSA0OnJldHVybiBVLmxhYmVsKysse3ZhbHVlOm9lWzFdLGRvbmU6ITF9O2Nhc2UgNTpVLmxhYmVsKyssQj1vZVsxXSxvZT1bMF07Y29udGludWU7Y2FzZSA3Om9lPVUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZh''@;'; put 'put ''dWx0OmlmKCEoKFk9KFk9VS50cnlzKS5sZW5ndGg+MCYmWVtZLmxlbmd0aC0xXSl8fDYhPT1vZVswXSYmMiE9PW9lWzBdKSl7VT0wO2NvbnRpbnVlfWlmKDM9PT1vZVswXSYmKCFZfHxvZVsxXT5ZWzBdJiZvZVsxXTxZWzNdKSl7VS5sYWJlbD1vZVsxXTticmVha31pZig2PT09b2VbMF0mJlUu''@;'; put 'put ''bGFiZWw8WVsxXSl7VS5sYWJlbD1ZWzFdLFk9b2U7YnJlYWt9aWYoWSYmVS5sYWJlbDxZWzJdKXtVLmxhYmVsPVlbMl0sVS5vcHMucHVzaChvZSk7YnJlYWt9WVsyXSYmVS5vcHMucG9wKCksVS50cnlzLnBvcCgpO2NvbnRpbnVlfW9lPWouY2FsbChFLFUpfWNhdGNoKHNlKXtvZT1bNixzZV0s''@;'; put 'put ''Qj0wfWZpbmFsbHl7Vj1ZPTB9aWYoNSZvZVswXSl0aHJvdyBvZVsxXTtyZXR1cm57dmFsdWU6b2VbMF0/b2VbMV06dm9pZCAwLGRvbmU6ITB9fShbZWUsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5vcGVuV2ViUGFnZT12b2lkIDA7''@;'; put 'put ''dmFyIEk9UigxMjEwKSxrPXt3aWR0aDo1MDAsaGVpZ2h0OjYwMH07Ty5vcGVuV2ViUGFnZT1mdW5jdGlvbihFLGosVixCKXtyZXR1cm4gdm9pZCAwPT09aiYmKGo9IiIpLHZvaWQgMD09PVYmJihWPWspLHoodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFksWCxVLHEsZWU7cmV0''@;'; put 'put ''dXJuIEsodGhpcyxmdW5jdGlvbih0ZSl7c3dpdGNoKHRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIFk9Vi53aWR0aCxYPVYuaGVpZ2h0LFU9c2NyZWVuLndpZHRoLzItWS8yLHE9c2NyZWVuLmhlaWdodC8yLVgvMiwoZWU9d2luZG93Lm9wZW4oRSxqLCJ0b29sYmFyPTAsbG9jYXRpb249MCxtZW51''@;'; put 'put ''YmFyPTAsd2lkdGg9Ii5jb25jYXQoWSwiLGhlaWdodD0iKS5jb25jYXQoWCwiLGxlZnQ9IikuY29uY2F0KFUsIix0b3A9IikuY29uY2F0KHEpKSk/WzMsMl06WzQsKEI/P0kub3BlbkxvZ2luUHJvbXB0KSgpXTtjYXNlIDE6cmV0dXJuWzIsdGUuc2VudCgpP3dpbmRvdy5vcGVuKEUsaiwidG9v''@;'; put 'put ''bGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSIuY29uY2F0KFksIixoZWlnaHQ9IikuY29uY2F0KFgsIixsZWZ0PSIpLmNvbmNhdChVLCIsdG9wPSIpLmNvbmNhdChxKSk6bnVsbF07Y2FzZSAyOnJldHVyblsyLGVlXX19KX0pfX0sMjQ5OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGosVixCLFkpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsVSl7ZnVuY3Rpb24gcShvZSl7dHJ5e3RlKFkubmV4dChvZSkpfWNhdGNoKHNlKXtVKHNlKX19ZnVuY3Rpb24gZWUob2Upe3RyeXt0''@;'; put 'put ''ZShZLnRocm93KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiB0ZShvZSl7dmFyIHNlO29lLmRvbmU/WChvZS52YWx1ZSk6KHNlPW9lLnZhbHVlLHNlIGluc3RhbmNlb2YgQj9zZTpuZXcgQihmdW5jdGlvbihoZSl7aGUoc2UpfSkpLnRoZW4ocSxlZSl9dGUoKFk9WS5hcHBseShqLFZ8''@;'; put 'put ''fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGosVil7dmFyIEIsWSxYLFUscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZYWzBdKXRocm93IFhbMV07cmV0dXJuIFhbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVT17bmV4dDplZSgw''@;'; put 'put ''KSx0aHJvdzplZSgxKSxyZXR1cm46ZWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihVW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFU7ZnVuY3Rpb24gZWUodGUpe3JldHVybiBmdW5jdGlvbihvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihCKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihCPTEsWSYmKFg9MiZzZVswXT9ZLnJldHVybjpzZVswXT9ZLnRocm93fHwoKFg9WS5yZXR1cm4pJiZYLmNhbGwoWSksMCk6WS5uZXh0KSYmIShYPVguY2FsbChZLHNlWzFd''@;'; put 'put ''KSkuZG9uZSlyZXR1cm4gWDtzd2l0Y2goWT0wLFgmJihzZT1bMiZzZVswXSxYLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6WD1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxZPXNlWzFdLHNlPVswXTtj''@;'; put 'put ''b250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoWD0oWD1xLnRyeXMpLmxlbmd0aD4wJiZYW1gubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVh8fHNlWzFd''@;'; put 'put ''PlhbMF0mJnNlWzFdPFhbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxYWzFdKXtxLmxhYmVsPVhbMV0sWD1zZTticmVha31pZihYJiZxLmxhYmVsPFhbMl0pe3EubGFiZWw9WFsyXSxxLm9wcy5wdXNoKHNlKTticmVha31YWzJdJiZxLm9wcy5wb3AoKSxx''@;'; put 'put ''LnRyeXMucG9wKCk7Y29udGludWV9c2U9Vi5jYWxsKGoscSl9Y2F0Y2goaGUpe3NlPVs2LGhlXSxZPTB9ZmluYWxseXtCPVg9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxvZV0pfX19O09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7dmFyIEk9Uig5Nzc4KSxrPVIoOTAxNyksRT1SKDM5MDApO08ucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1bmN0aW9uKGosVil7cmV0dXJuIHoodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihYKXtzd2l0Y2goWC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LGoucG9zdCgiL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsdm9pZCAwLHZvaWQgMCx2b2lkIDAse0F1dGhvcml6YXRpb246IkJlYXJlciAiK1Z9KS50aGVuKGZ1bmN0aW9u''@;'; put 'put ''KFUpe3ZhciBxPVUucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46cS5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOnEucmVmcmVzaFRva2VufX0pLmNhdGNoKGZ1bmN0aW9uKFUpe3Rocm93KDAsSS5wcmVmaXhNZXNzYWdlKShVLCgwLGsuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJy''@;'; put 'put ''ZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsRS5TZXJ2ZXJUeXBlLlNhc2pzLCIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIikpfSldO2Nhc2UgMTpyZXR1cm5bMixYLnNlbnQoKV19fSl9KX19LDM2NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PVIo''@;'; put 'put ''ODc2NCkuQnVmZmVyLEs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFksWCxVLHEpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKGVlLHRlKXtmdW5jdGlvbiBvZSh1ZSl7dHJ5e2hlKHEubmV4dCh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKHVl''@;'; put 'put ''KXt0cnl7aGUocS50aHJvdyh1ZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGhlKHVlKXt2YXIgY2U7dWUuZG9uZT9lZSh1ZS52YWx1ZSk6KGNlPXVlLnZhbHVlLGNlIGluc3RhbmNlb2YgVT9jZTpuZXcgVShmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKG9lLHNlKX1oZSgocT1xLmFw''@;'; put 'put ''cGx5KFksWHx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWSxYKXt2YXIgVSxxLGVlLHRlLG9lPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmVlWzBdKXRocm93IGVlWzFdO3JldHVybiBlZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVy''@;'; put 'put ''biB0ZT17bmV4dDpzZSgwKSx0aHJvdzpzZSgxKSxyZXR1cm46c2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih0ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx0ZTtmdW5jdGlvbiBzZShoZSl7cmV0dXJuIGZ1bmN0aW9uKHVlKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24oY2Upe2lmKFUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7b2U7KXRyeXtpZihVPTEscSYmKGVlPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChlZT1xLnJldHVybikmJmVlLmNhbGwocSksMCk6cS5uZXh0''@;'; put 'put ''KSYmIShlZT1lZS5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBlZTtzd2l0Y2gocT0wLGVlJiYoY2U9WzImY2VbMF0sZWUudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTplZT1jZTticmVhaztjYXNlIDQ6cmV0dXJuIG9lLmxhYmVsKysse3ZhbHVlOmNlWzFdLGRvbmU6ITF9O2Nhc2Ug''@;'; put 'put ''NTpvZS5sYWJlbCsrLHE9Y2VbMV0sY2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpjZT1vZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGVlPShlZT1vZS50cnlzKS5sZW5ndGg+MCYmZWVbZWUubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXtv''@;'; put 'put ''ZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFlZXx8Y2VbMV0+ZWVbMF0mJmNlWzFdPGVlWzNdKSl7b2UubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZvZS5sYWJlbDxlZVsxXSl7b2UubGFiZWw9ZWVbMV0sZWU9Y2U7YnJlYWt9aWYoZWUmJm9lLmxhYmVsPGVlWzJdKXtvZS5s''@;'; put 'put ''YWJlbD1lZVsyXSxvZS5vcHMucHVzaChjZSk7YnJlYWt9ZWVbMl0mJm9lLm9wcy5wb3AoKSxvZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVguY2FsbChZLG9lKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXtVPWVlPTB9aWYoNSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm57dmFsdWU6''@;'; put 'put ''Y2VbMF0/Y2VbMV06dm9pZCAwLGRvbmU6ITB9fShbaGUsdWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7dmFyIGs9UigzOTAwKSxFPVIoOTc3OCksaj1SKDYyMzApLFY9Uig1OTI4KSxC''@;'; put 'put ''PVIoOTAxNyk7Ty5yZWZyZXNoVG9rZW5zRm9yVml5YT1mdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gSyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZWUsdGUsb2Usc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihoZSl7c3dpdGNoKGhlLmxhYmVsKXtjYXNlIDA6aWYoISgwLFYu''@;'; put 'put ''aXNOb2RlKSgpKXRocm93IG5ldyBFcnJvcigiTWV0aG9kICdyZWZyZXNoVG9rZW5zRm9yVml5YScgY2FuIG9ubHkgYmUgdXNlZCBieSBOb2RlLiIpO3JldHVybiBlZT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZT12b2lkIDA9PT16P2J0b2EoWCsiOiIrVSk6ei5mcm9tKFgrIjoiK1UpLnRv''@;'; put 'put ''U3RyaW5nKCJiYXNlNjQiKSxvZT17QXV0aG9yaXphdGlvbjoiQmFzaWMgIit0ZX0sKHNlPW5ldyBqKS5hcHBlbmQoImdyYW50X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksc2UuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixxKSxbNCxZLnBvc3QoZWUsc2Usdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1k''@;'; put 'put ''YXRhOyBib3VuZGFyeT0iK3NlLl9ib3VuZGFyeSxvZSkudGhlbihmdW5jdGlvbih1ZSl7cmV0dXJuIHVlLnJlc3VsdH0pLmNhdGNoKGZ1bmN0aW9uKHVlKXt0aHJvdygwLEUucHJlZml4TWVzc2FnZSkodWUsKDAsQi5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9r''@;'; put 'put ''ZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLGsuU2VydmVyVHlwZS5TYXNWaXlhLGVlLHNlLG9lLFgsVSkpfSldO2Nhc2UgMTpyZXR1cm5bMixoZS5zZW50KCldfX0pfSl9fSw0NTgyOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1''@;'; put 'put ''bmN0aW9uKGssRSxqLFYpe3JldHVybiBuZXcoanx8KGo9UHJvbWlzZSkpKGZ1bmN0aW9uKEIsWSl7ZnVuY3Rpb24gWChlZSl7dHJ5e3EoVi5uZXh0KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlvbiBVKGVlKXt0cnl7cShWLnRocm93KGVlKSl9Y2F0Y2godGUpe1kodGUpfX1mdW5jdGlv''@;'; put 'put ''biBxKGVlKXt2YXIgdGU7ZWUuZG9uZT9CKGVlLnZhbHVlKToodGU9ZWUudmFsdWUsdGUgaW5zdGFuY2VvZiBqP3RlOm5ldyBqKGZ1bmN0aW9uKG9lKXtvZSh0ZSl9KSkudGhlbihYLFUpfXEoKFY9Vi5hcHBseShrLEV8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8''@;'; put 'put ''fGZ1bmN0aW9uKGssRSl7dmFyIGosVixCLFksWD17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZCWzBdKXRocm93IEJbMV07cmV0dXJuIEJbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWT17bmV4dDpVKDApLHRocm93OlUoMSkscmV0dXJuOlUoMil9LCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wmJihZW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFk7ZnVuY3Rpb24gVShxKXtyZXR1cm4gZnVuY3Rpb24oZWUpe3JldHVybiBmdW5jdGlvbih0ZSl7aWYoail0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp''@;'; put 'put ''bmcuIik7Zm9yKDtYOyl0cnl7aWYoaj0xLFYmJihCPTImdGVbMF0/Vi5yZXR1cm46dGVbMF0/Vi50aHJvd3x8KChCPVYucmV0dXJuKSYmQi5jYWxsKFYpLDApOlYubmV4dCkmJiEoQj1CLmNhbGwoVix0ZVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKFY9MCxCJiYodGU9WzImdGVbMF0sQi52''@;'; put 'put ''YWx1ZV0pLHRlWzBdKXtjYXNlIDA6Y2FzZSAxOkI9dGU7YnJlYWs7Y2FzZSA0OnJldHVybiBYLmxhYmVsKysse3ZhbHVlOnRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpYLmxhYmVsKyssVj10ZVsxXSx0ZT1bMF07Y29udGludWU7Y2FzZSA3OnRlPVgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtjb250''@;'; put 'put ''aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9WC50cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT10ZVswXSYmMiE9PXRlWzBdKSl7WD0wO2NvbnRpbnVlfWlmKDM9PT10ZVswXSYmKCFCfHx0ZVsxXT5CWzBdJiZ0ZVsxXTxCWzNdKSl7WC5sYWJlbD10ZVsxXTticmVha31pZig2PT09''@;'; put 'put ''dGVbMF0mJlgubGFiZWw8QlsxXSl7WC5sYWJlbD1CWzFdLEI9dGU7YnJlYWt9aWYoQiYmWC5sYWJlbDxCWzJdKXtYLmxhYmVsPUJbMl0sWC5vcHMucHVzaCh0ZSk7YnJlYWt9QlsyXSYmWC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlfXRlPUUuY2FsbChrLFgpfWNhdGNoKG9lKXt0''@;'; put 'put ''ZT1bNixvZV0sVj0wfWZpbmFsbHl7aj1CPTB9aWYoNSZ0ZVswXSl0aHJvdyB0ZVsxXTtyZXR1cm57dmFsdWU6dGVbMF0/dGVbMV06dm9pZCAwLGRvbmU6ITB9fShbcSxlZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnZlcmlmeVNhczlM''@;'; put 'put ''b2dpbj12b2lkIDA7dmFyIEk9Uig1OTI4KTtPLnZlcmlmeVNhczlMb2dpbj1mdW5jdGlvbihrKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRSxqLFY7cmV0dXJuIEsodGhpcyxmdW5jdGlvbihCKXtzd2l0Y2goQi5sYWJlbCl7Y2FzZSAwOkU9ITEsaj1uZXcg''@;'; put 'put ''RGF0ZSxWPTAsQi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm5bNCwoMCxJLmRlbGF5KSgxZTMpXTtjYXNlIDI6aWYoQi5zZW50KCksay5jbG9zZWQpcmV0dXJuWzMsNF07RT1rLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpJiZrLndpbmRvdy5kb2N1bWVudC5ib2R5Lmlu''@;'; put 'put ''bmVyVGV4dC5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpLFY9KChuZXcgRGF0ZSkudmFsdWVPZigpLWoudmFsdWVPZigpKS8xZTMsQi5sYWJlbD0zO2Nhc2UgMzppZighRSYmVjwzMDApcmV0dXJuWzMsMV07Qi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMix7aXNMb2dnZWRJbjpFfV19''@;'; put 'put ''fSl9KX19LDY1NDc6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oayxFLGosVil7cmV0dXJuIG5ldyhqfHwoaj1Qcm9taXNlKSkoZnVuY3Rpb24oQixZKXtmdW5jdGlvbiBYKGVlKXt0cnl7cShWLm5leHQoZWUpKX1jYXRj''@;'; put 'put ''aCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIFUoZWUpe3RyeXtxKFYudGhyb3coZWUpKX1jYXRjaCh0ZSl7WSh0ZSl9fWZ1bmN0aW9uIHEoZWUpe3ZhciB0ZTtlZS5kb25lP0IoZWUudmFsdWUpOih0ZT1lZS52YWx1ZSx0ZSBpbnN0YW5jZW9mIGo/dGU6bmV3IGooZnVuY3Rpb24ob2Upe29lKHRlKX0p''@;'; put 'put ''KS50aGVuKFgsVSl9cSgoVj1WLmFwcGx5KGssRXx8W10pKS5uZXh0KCkpfSl9LEs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWSxYPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cgQlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpb''@;'; put 'put ''XSxvcHM6W119O3JldHVybiBZPXtuZXh0OlUoMCksdGhyb3c6VSgxKSxyZXR1cm46VSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFlbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksWTtmdW5jdGlvbiBVKHEpe3JldHVybiBmdW5jdGlvbihlZSl7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKHRlKXtpZihqKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1g7KXRyeXtpZihqPTEsViYmKEI9MiZ0ZVswXT9WLnJldHVybjp0ZVswXT9WLnRocm93fHwoKEI9Vi5yZXR1cm4pJiZCLmNhbGwoViksMCk6Vi5u''@;'; put 'put ''ZXh0KSYmIShCPUIuY2FsbChWLHRlWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goVj0wLEImJih0ZT1bMiZ0ZVswXSxCLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Qj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFgubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1Olgu''@;'; put 'put ''bGFiZWwrKyxWPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9WC5vcHMucG9wKCksWC50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoQj0oQj1YLnRyeXMpLmxlbmd0aD4wJiZCW0IubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtYPTA7Y29udGludWV9''@;'; put 'put ''aWYoMz09PXRlWzBdJiYoIUJ8fHRlWzFdPkJbMF0mJnRlWzFdPEJbM10pKXtYLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmWC5sYWJlbDxCWzFdKXtYLmxhYmVsPUJbMV0sQj10ZTticmVha31pZihCJiZYLmxhYmVsPEJbMl0pe1gubGFiZWw9QlsyXSxYLm9wcy5wdXNoKHRlKTti''@;'; put 'put ''cmVha31CWzJdJiZYLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWV9dGU9RS5jYWxsKGssWCl9Y2F0Y2gob2Upe3RlPVs2LG9lXSxWPTB9ZmluYWxseXtqPUI9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtx''@;'; put 'put ''LGVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNMb2dnZWRJblNBU1ZJWUE9Ty52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO3ZhciBJPVIoNTkyOCk7Ty52ZXJpZnlTYXNWaXlhTG9naW49ZnVuY3Rpb24oayl7dmFyIEUsajtyZXR1''@;'; put 'put ''cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVixCLFksWDtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFUpe3N3aXRjaChVLmxhYmVsKXtjYXNlIDA6Vj0hMSxCPW5ldyBEYXRlLFk9MCxVLmxhYmVsPTE7Y2FzZSAxOnJldHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2Ug''@;'; put 'put ''MjppZihVLnNlbnQoKSxrLmNsb3NlZClyZXR1cm5bMyw0XTtWPSgwLE8uaXNMb2dnZWRJblNBU1ZJWUEpKCksWT0oKG5ldyBEYXRlKS52YWx1ZU9mKCktQi52YWx1ZU9mKCkpLzFlMyxVLmxhYmVsPTM7Y2FzZSAzOmlmKCFWJiZZPDMwMClyZXR1cm5bMywxXTtVLmxhYmVsPTQ7Y2FzZSA0Olg9''@;'; put 'put ''ITEsQj1uZXcgRGF0ZSxVLmxhYmVsPTU7Y2FzZSA1OnJldHVybls0LCgwLEkuZGVsYXkpKDFlMyldO2Nhc2UgNjppZihVLnNlbnQoKSxrLmNsb3NlZClyZXR1cm5bMyw4XTtYPWsud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIil8fChudWxsPT09KGo9bnVsbD09PShF''@;'; put 'put ''PWsud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1FP3ZvaWQgMDpFLmlubmVyVGV4dCl8fHZvaWQgMD09PWo/dm9pZCAwOmouaW5jbHVkZXMoIllvdSBoYXZlIHNpZ25lZCBpbi4iKSksWT0oKG5ldyBEYXRlKS52YWx1ZU9mKCktQi52YWx1ZU9mKCkpLzFlMyxVLmxhYmVsPTc7Y2Fz''@;'; put 'put ''ZSA3OmlmKCFYJiZZPDMwMClyZXR1cm5bMyw1XTtVLmxhYmVsPTg7Y2FzZSA4OnJldHVyblsyLHtpc0xvZ2dlZEluOlYmJlh9XX19KX0pfSxPLmlzTG9nZ2VkSW5TQVNWSVlBPWZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygiQ3VycmVudC1Vc2VyIikmJmRvY3Vt''@;'; put 'put ''ZW50LmNvb2tpZS5pbmNsdWRlcygidXNlcklkIil9fSw0MDM3OihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNTkyOCk7''@;'; put 'put ''Ty5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPWZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIGspaWYoQXJyYXkuaXNBcnJheShrW0VdKSl7dmFyIGo9RSxWPSgwLHouY29udmVydFRvQ1NWKShrLEUpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1WKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''VGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZigoMCxLLmlzTm9kZSkoKSlJLmFwcGVuZChqLFYse2ZpbGVuYW1lOiIiLmNvbmNhdChqLCIuY3N2IiksY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtlbHNle3Zh''@;'; put 'put ''ciBCPW5ldyBCbG9iKFtWXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO0kuYXBwZW5kKGosQiwiIi5jb25jYXQoaiwiLmNzdiIpKX19cmV0dXJuIEl9fSwyMTcwOihNLE8sUik9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p''@;'; put 'put ''LE8uZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09dm9pZCAwO3ZhciB6PVIoMjQwMiksSz1SKDQ3OTkpO08uZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm09ZnVuY3Rpb24oSSxrKXt2YXIgRT1bXSxqPXt9LFY9MDtmb3IodmFyIEIgaW4gayl7VisrLCgwLHouaXNGb3JtYXRzVGFibGUpKEIpfHxFLnB1''@;'; put 'put ''c2goQik7dmFyIFk9KDAsei5jb252ZXJ0VG9DU1YpKGssQik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PVkpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO1kubGVuZ3RoPjE2''@;'; put 'put ''ZTM/KDAsSy5zcGxpdENodW5rcykoWSkubWFwKGZ1bmN0aW9uKFgpe0kuYXBwZW5kKCJzYXNqcyIuY29uY2F0KFYsImRhdGEiKSxYKX0pOmpbInNhc2pzIi5jb25jYXQoViwiZGF0YSIpXT1ZfXJldHVybiBqLnNhc2pzX3RhYmxlcz1FLmpvaW4oIiAiKSx7Zm9ybURhdGE6SSxyZXF1ZXN0UGFy''@;'; put 'put ''YW1zOmp9fX0sMzYwNzpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihrLEUsaixWKXt2b2lkIDA9PT1WJiYoVj1qKTt2YXIgQj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y''@;'; put 'put ''KEUsaik7QiYmISgiZ2V0ImluIEI/IUUuX19lc01vZHVsZTpCLndyaXRhYmxlfHxCLmNvbmZpZ3VyYWJsZSl8fChCPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFW2pdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLFYsQil9OmZ1bmN0aW9uKGssRSxqLFYpe3ZvaWQg''@;'; put 'put ''MD09PVYmJihWPWopLGtbVl09RVtqXX0pLEs9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGssRSl7Zm9yKHZhciBqIGluIGspImRlZmF1bHQiPT09anx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsail8fHooRSxrLGopfTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIEk9Uig1OTU2KTtLKFIoMTIzMCksTyksSyhSKDEzOTUpLE8pLEsoUig5ODIxKSxPKSxLKFIoODMwNiksTyksSyhSKDM0NjcpLE8pLEsoUigzNjAyKSxPKSxPLmRlZmF1bHQ9SS5kZWZhdWx0fSwxNTcwOmZ1bmN0aW9uKE0sTyxS''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oQixZKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oWCxVKXtYLl9fcHJvdG9fXz1VfXx8ZnVuY3Rpb24o''@;'; put 'put ''WCxVKXtmb3IodmFyIHEgaW4gVSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxxKSYmKFhbcV09VVtxXSl9KShCLFkpfSxmdW5jdGlvbihCLFkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBZJiZudWxsIT09WSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRz''@;'; put 'put ''IHZhbHVlICIrU3RyaW5nKFkpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFgoKXt0aGlzLmNvbnN0cnVjdG9yPUJ9eihCLFkpLEIucHJvdG90eXBlPW51bGw9PT1ZP09iamVjdC5jcmVhdGUoWSk6KFgucHJvdG90eXBlPVkucHJvdG90eXBlLG5ldyBYKX0pLEk9''@;'; put 'put ''dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsWSxYLFUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsZWUpe2Z1bmN0aW9uIHRlKGhlKXt0cnl7c2UoVS5uZXh0KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gb2UoaGUpe3RyeXtzZShVLnRocm93''@;'; put 'put ''KGhlKSl9Y2F0Y2godWUpe2VlKHVlKX19ZnVuY3Rpb24gc2UoaGUpe3ZhciB1ZTtoZS5kb25lP3EoaGUudmFsdWUpOih1ZT1oZS52YWx1ZSx1ZSBpbnN0YW5jZW9mIFg/dWU6bmV3IFgoZnVuY3Rpb24oY2Upe2NlKHVlKX0pKS50aGVuKHRlLG9lKX1zZSgoVT1VLmFwcGx5KEIsWXx8W10pKS5u''@;'; put 'put ''ZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oQixZKXt2YXIgWCxVLHEsZWUsdGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmcVswXSl0aHJvdyBxWzFdO3JldHVybiBxWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGVlPXtuZXh0Om9lKDApLHRo''@;'; put 'put ''cm93Om9lKDEpLHJldHVybjpvZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGVlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGVlO2Z1bmN0aW9uIG9lKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7aWYoWCl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt0ZTspdHJ5e2lmKFg9MSxVJiYocT0yJnVlWzBdP1UucmV0dXJuOnVlWzBdP1UudGhyb3d8fCgocT1VLnJldHVybikmJnEuY2FsbChVKSwwKTpVLm5leHQpJiYhKHE9cS5jYWxsKFUsdWVbMV0p''@;'; put 'put ''KS5kb25lKXJldHVybiBxO3N3aXRjaChVPTAscSYmKHVlPVsyJnVlWzBdLHEudmFsdWVdKSx1ZVswXSl7Y2FzZSAwOmNhc2UgMTpxPXVlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gdGUubGFiZWwrKyx7dmFsdWU6dWVbMV0sZG9uZTohMX07Y2FzZSA1OnRlLmxhYmVsKyssVT11ZVsxXSx1ZT1bMF07''@;'; put 'put ''Y29udGludWU7Y2FzZSA3OnVlPXRlLm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgocT0ocT10ZS50cnlzKS5sZW5ndGg+MCYmcVtxLmxlbmd0aC0xXSl8fDYhPT11ZVswXSYmMiE9PXVlWzBdKSl7dGU9MDtjb250aW51ZX1pZigzPT09dWVbMF0mJighcXx8''@;'; put 'put ''dWVbMV0+cVswXSYmdWVbMV08cVszXSkpe3RlLmxhYmVsPXVlWzFdO2JyZWFrfWlmKDY9PT11ZVswXSYmdGUubGFiZWw8cVsxXSl7dGUubGFiZWw9cVsxXSxxPXVlO2JyZWFrfWlmKHEmJnRlLmxhYmVsPHFbMl0pe3RlLmxhYmVsPXFbMl0sdGUub3BzLnB1c2godWUpO2JyZWFrfXFbMl0mJnRl''@;'; put 'put ''Lm9wcy5wb3AoKSx0ZS50cnlzLnBvcCgpO2NvbnRpbnVlfXVlPVkuY2FsbChCLHRlKX1jYXRjaChjZSl7dWU9WzYsY2VdLFU9MH1maW5hbGx5e1g9cT0wfWlmKDUmdWVbMF0pdGhyb3cgdWVbMV07cmV0dXJue3ZhbHVlOnVlWzBdP3VlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3NlLGhlXSl9fX07''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29tcHV0ZUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgRT1SKDM5MDApLGo9UigxMzk1KSxWPWZ1bmN0aW9uKEIpe2Z1bmN0aW9uIFkoWCxVKXt2YXIgcT1CLmNhbGwodGhpcyxYLEUuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhKXx8dGhpcztyZXR1cm4gcS5zYXNWaXlhQXBpQ2xpZW50PVUscX1yZXR1cm4gSyhZLEIpLFkucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oWCxVLHEsZWUsdGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBvZSxoZT10aGlzO3JldHVybiBrKHRo''@;'; put 'put ''aXMsZnVuY3Rpb24odWUpe3JldHVybiBvZT1lZXx8ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGNlLEcpe3ZhciBiO251bGw9PT0oYj1oZS5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Ynx8Yi5leGVjdXRlQ29tcHV0ZUpv''@;'; put 'put ''YihYLHEuY29udGV4dE5hbWUscS5kZWJ1ZyxVLHRlLCEwLCEwKS50aGVuKGZ1bmN0aW9uKEQpe2hlLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChELFgscS5kZWJ1ZyksY2UoRC5yZXN1bHQpfSkuY2F0Y2goZnVuY3Rpb24oRCl7cmV0dXJuIEkoaGUsdm9pZCAwLHZvaWQgMCxmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybiBEIGluc3RhbmNlb2Ygai5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChELFgscS5kZWJ1Zyks''@;'; put 'put ''RyhuZXcgai5FcnJvclJlc3BvbnNlKEQ/Lm1lc3NhZ2UsRCkpKSxEIGluc3RhbmNlb2Ygai5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gSC5leGVjdXRlKFgsVSxxLGVlKS50aGVuKGZ1bmN0aW9uKGcpe2NlKGcpfSxmdW5j''@;'; put 'put ''dGlvbihnKXtHKGcpfSl9KSxbNCxvZSgpXSk6WzMsMl07Y2FzZSAxOnJldHVybiBOLnNlbnQoKSxbMywzXTtjYXNlIDI6RyhuZXcgai5FcnJvclJlc3BvbnNlKEQ/Lm1lc3NhZ2UsRCkpLE4ubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJdfX0pfSl9KX0pXX0pfSl9LFl9KFIoNjExOCkuQmFzZUpv''@;'; put 'put ''YkV4ZWN1dG9yKTtPLkNvbXB1dGVKb2JFeGVjdXRvcj1WfSwzNDkxOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oWSxYKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5z''@;'; put 'put ''dGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oVSxxKXtVLl9fcHJvdG9fXz1xfXx8ZnVuY3Rpb24oVSxxKXtmb3IodmFyIGVlIGluIHEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsZWUpJiYoVVtlZV09cVtlZV0pfSkoWSxYKX0sZnVuY3Rpb24oWSxYKXtpZigiZnVuY3Rp''@;'; put 'put ''b24iIT10eXBlb2YgWCYmbnVsbCE9PVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhYKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBVKCl7dGhpcy5jb25zdHJ1Y3Rvcj1ZfXooWSxYKSxZLnByb3RvdHlwZT1udWxs''@;'; put 'put ''PT09WD9PYmplY3QuY3JlYXRlKFgpOihVLnByb3RvdHlwZT1YLnByb3RvdHlwZSxuZXcgVSl9KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihZLFgsVSxxKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihlZSx0ZSl7ZnVuY3Rpb24gb2UodWUpe3RyeXtoZShx''@;'; put 'put ''Lm5leHQodWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZSh1ZSl7dHJ5e2hlKHEudGhyb3codWUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBoZSh1ZSl7dmFyIGNlO3VlLmRvbmU/ZWUodWUudmFsdWUpOihjZT11ZS52YWx1ZSxjZSBpbnN0YW5jZW9mIFU/Y2U6bmV3IFUo''@;'; put 'put ''ZnVuY3Rpb24oRyl7RyhjZSl9KSkudGhlbihvZSxzZSl9aGUoKHE9cS5hcHBseShZLFh8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFksWCl7dmFyIFUscSxlZSx0ZSxvZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZlZVswXSl0aHJv''@;'; put 'put ''dyBlZVsxXTtyZXR1cm4gZWVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2UoMSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVu''@;'; put 'put ''Y3Rpb24gc2UoaGUpe3JldHVybiBmdW5jdGlvbih1ZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZihVKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO29lOyl0cnl7aWYoVT0xLHEmJihlZT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3Eu''@;'; put 'put ''dGhyb3d8fCgoZWU9cS5yZXR1cm4pJiZlZS5jYWxsKHEpLDApOnEubmV4dCkmJiEoZWU9ZWUuY2FsbChxLGNlWzFdKSkuZG9uZSlyZXR1cm4gZWU7c3dpdGNoKHE9MCxlZSYmKGNlPVsyJmNlWzBdLGVlLnZhbHVlXSksY2VbMF0pe2Nhc2UgMDpjYXNlIDE6ZWU9Y2U7YnJlYWs7Y2FzZSA0OnJl''@;'; put 'put ''dHVybiBvZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6b2UubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51ZTtjYXNlIDc6Y2U9b2Uub3BzLnBvcCgpLG9lLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChlZT0oZWU9b2UudHJ5cykubGVuZ3RoPjAm''@;'; put 'put ''JmVlW2VlLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7b2U9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighZWV8fGNlWzFdPmVlWzBdJiZjZVsxXTxlZVszXSkpe29lLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmb2UubGFiZWw8ZWVbMV0pe29lLmxhYmVsPWVl''@;'; put 'put ''WzFdLGVlPWNlO2JyZWFrfWlmKGVlJiZvZS5sYWJlbDxlZVsyXSl7b2UubGFiZWw9ZWVbMl0sb2Uub3BzLnB1c2goY2UpO2JyZWFrfWVlWzJdJiZvZS5vcHMucG9wKCksb2UudHJ5cy5wb3AoKTtjb250aW51ZX1jZT1YLmNhbGwoWSxvZSl9Y2F0Y2goRyl7Y2U9WzYsR10scT0wfWZpbmFsbHl7''@;'; put 'put ''VT1lZT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2hlLHVlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uRmlsZVVwbG9hZGVyPXZvaWQgMDt2YXIgRT1SKDU5''@;'; put 'put ''MjgpLGo9UigxMzk1KSxWPVIoMzkwMCksQj1mdW5jdGlvbihZKXtmdW5jdGlvbiBYKFUscSxlZSx0ZSl7dmFyIG9lPVkuY2FsbCh0aGlzLFUscSl8fHRoaXM7cmV0dXJuIG9lLmpvYnNQYXRoPWVlLG9lLnJlcXVlc3RDbGllbnQ9dGUsb2V9cmV0dXJuIEsoWCxZKSxYLnByb3RvdHlwZS5leGVj''@;'; put 'put ''dXRlPWZ1bmN0aW9uKFUscSxlZSx0ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLEMsUyxwPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih3KXtpZihvZT1xLmZpbGVzLHNlPXEucGFyYW1zLGhlPXRlfHxm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sIW9lPy5sZW5ndGgpdGhyb3cgbmV3IGouRXJyb3JSZXNwb25zZSgiQXQgbGVhc3Qgb25lIGZpbGUgbXVzdCBiZSBwcm92aWRlZC4iKTtpZighVXx8IiI9PT1VKXRocm93IG5ldyBqLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0''@;'; put 'put ''IGJlIHByb3ZpZGVkLiIpO2ZvcihjZSBpbiB1ZT0iIixzZSlzZS5oYXNPd25Qcm9wZXJ0eShjZSkmJih1ZSs9IiYiLmNvbmNhdChjZSwiPSIpLmNvbmNhdChzZVtjZV0pKTtmb3IoRz1lZS5hcHBMb2M/ZWUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrVS5yZXBsYWNlKC9eXC8vLCIiKTpV''@;'; put 'put ''LGI9IiIuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK0cpLmNvbmNhdCh1ZSksRD1uZXcgRm9ybURhdGEsSD0wLE49b2U7SDxOLmxlbmd0aDtIKyspRC5hcHBlbmQoImZpbGUiLChnPU5bSF0pLmZpbGUsZy5maWxlTmFtZSk7cmV0dXJuKEM9dGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LmdldENzcmZUb2tlbigiZmlsZSIpKSYmRC5hcHBlbmQoIl9jc3JmIixDLnZhbHVlKSxlZS5kZWJ1ZyYmRC5hcHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLGVlLnNlcnZlclR5cGU9PT1WLlNlcnZlclR5cGUuU2FzVml5YSYmZWUuY29udGV4dE5hbWUmJkQuYXBwZW5kKCJfY29udGV4''@;'; put 'put ''dG5hbWUiLGVlLmNvbnRleHROYW1lKSxTPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihKLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChiLEQsdm9pZCAwLCJhcHBsaWNh''@;'; put 'put ''dGlvbi9qc29uIixTKS50aGVuKGZ1bmN0aW9uKGRlKXtyZXR1cm4gSShwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZmU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoZGUs''@;'; put 'put ''VSxlZS5kZWJ1ZyksZmU9ZGUucmVzdWx0LCFlZS5kZWJ1ZylyZXR1cm5bMyw2XTtzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFYuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVyblszLDFdO2Nhc2UgVi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuWzMsM107Y2FzZSBWLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''anM6cmV0dXJuWzMsNF19cmV0dXJuWzMsNV07Y2FzZSAxOnJldHVybls0LCgwLEUucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoZGUucmVzdWx0LHRoaXMucmVxdWVzdENsaWVudCxlZS5zZXJ2ZXJVcmwpXTtjYXNlIDI6cmV0dXJuIGZlPXhlLnNlbnQoKSxbMyw1XTtjYXNlIDM6cmV0dXJu''@;'; put 'put ''IGZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUucGFyc2VXZWJvdXRSZXNwb25zZSkoZGUucmVzdWx0LGIpOmRlLnJlc3VsdCxbMyw1XTtjYXNlIDQ6cmV0dXJuIGZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUuZ2V0VmFsaWRKc29uKShkZS5yZXN1bHQpOmRlLnJl''@;'; put 'put ''c3VsdCxbMyw1XTtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA2OmZlPSJzdHJpbmciPT10eXBlb2YgZGUucmVzdWx0PygwLEUuZ2V0VmFsaWRKc29uKShkZS5yZXN1bHQpOmRlLnJlc3VsdCx4ZS5sYWJlbD03O2Nhc2UgNzpyZXR1cm4gSihmZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbihk''@;'; put 'put ''ZSl7cmV0dXJuIEkocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGRlIGluc3RhbmNlb2Ygai5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5h''@;'; put 'put ''cHBlbmRSZXF1ZXN0KGRlLFUsZWUuZGVidWcpLG5lKG5ldyBqLkVycm9yUmVzcG9uc2UoZGU/Lm1lc3NhZ2UsZGUpKSksZGUgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBmZS5leGVjdXRlKFUscSxl''@;'; put 'put ''ZSx0ZSkudGhlbihmdW5jdGlvbihMZSl7SihMZSl9LGZ1bmN0aW9uKExlKXtuZShMZSl9KX0pLFs0LGhlKCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIHhlLnNlbnQoKSxbMywzXTtjYXNlIDI6bmUobmV3IGouRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixkZSkp''@;'; put 'put ''LHhlLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxYfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7Ty5GaWxlVXBsb2FkZXI9Qn0sNDQ0NjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9u''@;'; put 'put ''KFgsVSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHEsZWUpe3EuX19wcm90b19fPWVlfXx8ZnVuY3Rpb24ocSxlZSl7Zm9yKHZhciB0ZSBpbiBlZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5''@;'; put 'put ''LmNhbGwoZWUsdGUpJiYocVt0ZV09ZWVbdGVdKX0pKFgsVSl9LGZ1bmN0aW9uKFgsVSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFUmJm51bGwhPT1VKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoVSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBu''@;'; put 'put ''dWxsIik7ZnVuY3Rpb24gcSgpe3RoaXMuY29uc3RydWN0b3I9WH16KFgsVSksWC5wcm90b3R5cGU9bnVsbD09PVU/T2JqZWN0LmNyZWF0ZShVKToocS5wcm90b3R5cGU9VS5wcm90b3R5cGUsbmV3IHEpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWCxVLHEsZWUpe3JldHVy''@;'; put 'put ''biBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLG9lKXtmdW5jdGlvbiBzZShjZSl7dHJ5e3VlKGVlLm5leHQoY2UpKX1jYXRjaChHKXtvZShHKX19ZnVuY3Rpb24gaGUoY2Upe3RyeXt1ZShlZS50aHJvdyhjZSkpfWNhdGNoKEcpe29lKEcpfX1mdW5jdGlvbiB1ZShjZSl7dmFyIEc7''@;'; put 'put ''Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/RzpuZXcgcShmdW5jdGlvbihiKXtiKEcpfSkpLnRoZW4oc2UsaGUpfXVlKChlZT1lZS5hcHBseShYLFV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKFgsVSl7''@;'; put 'put ''dmFyIHEsZWUsdGUsb2Usc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIG9lPXtuZXh0OmhlKDApLHRocm93OmhlKDEpLHJldHVybjpoZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5''@;'; put 'put ''bWJvbCYmKG9lW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLG9lO2Z1bmN0aW9uIGhlKHVlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGlu''@;'; put 'put ''Zy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLGVlJiYodGU9MiZHWzBdP2VlLnJldHVybjpHWzBdP2VlLnRocm93fHwoKHRlPWVlLnJldHVybikmJnRlLmNhbGwoZWUpLDApOmVlLm5leHQpJiYhKHRlPXRlLmNhbGwoZWUsR1sxXSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChlZT0wLHRlJiYoRz1b''@;'; put 'put ''MiZHWzBdLHRlLnZhbHVlXSksR1swXSl7Y2FzZSAwOmNhc2UgMTp0ZT1HO2JyZWFrO2Nhc2UgNDpyZXR1cm4gc2UubGFiZWwrKyx7dmFsdWU6R1sxXSxkb25lOiExfTtjYXNlIDU6c2UubGFiZWwrKyxlZT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlz''@;'; put 'put ''LnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sx''@;'; put 'put ''XTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJlYWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9''@;'; put 'put ''Rz1VLmNhbGwoWCxzZSl9Y2F0Y2goYil7Rz1bNixiXSxlZT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbdWUsY2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSksTy5KZXNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEU9UigzOTAwKSxqPVIoMTM5NSksVj1SKDYxMTgpLEI9Uig1OTI4KSxZPWZ1bmN0aW9uKFgpe2Z1bmN0aW9uIFUocSxlZSl7dmFyIHRlPVguY2FsbCh0aGlzLHEsRS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfHx0aGlzO3JldHVybiB0''@;'; put 'put ''ZS5zYXNWaXlhQXBpQ2xpZW50PWVlLHRlfXJldHVybiBLKFUsWCksVS5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbihxLGVlLHRlLG9lLHNlLGhlKXtyZXR1cm4gdm9pZCAwPT09aGUmJihoZT1bXSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdWUsRz10aGlzO3JldHVy''@;'; put 'put ''biBrKHRoaXMsZnVuY3Rpb24oYil7cmV0dXJuIHVlPW9lfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oRCxIKXt2YXIgTjtudWxsPT09KE49Ry5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09Tnx8Ti5leGVjdXRlSm9iKHEs''@;'; put 'put ''dGUuY29udGV4dE5hbWUsdGUuZGVidWcsZWUsc2UpLnRoZW4oZnVuY3Rpb24oZyl7Ry5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QoZyxxLHRlLmRlYnVnKTt2YXIgQz0oMCxCLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShnLGhlKTtEKEMpfSkuY2F0Y2goZnVuY3Rpb24o''@;'; put 'put ''Zyl7cmV0dXJuIEkoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEM9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGcgaW5zdGFuY2VvZiBqLkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFw''@;'; put 'put ''cGVuZFJlcXVlc3QoZyxxLHRlLmRlYnVnKSxIKG5ldyBqLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSkpLGcgaW5zdGFuY2VvZiBqLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBDLmV4ZWN1dGUocSxlZSx0ZSxvZSxz''@;'; put 'put ''ZSxoZSkudGhlbihmdW5jdGlvbih2KXtEKHYpfSxmdW5jdGlvbih2KXtIKHYpfSl9KSxbNCx1ZSgpXSk6WzMsMl07Y2FzZSAxOnJldHVybiBTLnNlbnQoKSxbMywzXTtjYXNlIDI6SChuZXcgai5FcnJvclJlc3BvbnNlKGc/Lm1lc3NhZ2UsZykpLFMubGFiZWw9MztjYXNlIDM6cmV0dXJuWzJd''@;'; put 'put ''fX0pfSl9KX0pXX0pfSl9LFV9KFYuQmFzZUpvYkV4ZWN1dG9yKTtPLkplc0pvYkV4ZWN1dG9yPVl9LDYxMTg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxqLFYsQil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSko''@;'; put 'put ''ZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBVKHRlKXt0cnl7ZWUoQi5uZXh0KHRlKSl9Y2F0Y2gob2Upe1gob2UpfX1mdW5jdGlvbiBxKHRlKXt0cnl7ZWUoQi50aHJvdyh0ZSkpfWNhdGNoKG9lKXtYKG9lKX19ZnVuY3Rpb24gZWUodGUpe3ZhciBvZTt0ZS5kb25lP1kodGUudmFsdWUpOihvZT10''@;'; put 'put ''ZS52YWx1ZSxvZSBpbnN0YW5jZW9mIFY/b2U6bmV3IFYoZnVuY3Rpb24oc2Upe3NlKG9lKX0pKS50aGVuKFUscSl9ZWUoKEI9Qi5hcHBseShFLGp8fFtdKSkubmV4dCgpKX0pfSxLPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVT17bGFiZWw6MCxz''@;'; put 'put ''ZW50OmZ1bmN0aW9uKCl7aWYoMSZZWzBdKXRocm93IFlbMV07cmV0dXJuIFlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWD17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihYW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpc30pLFg7ZnVuY3Rpb24gcShlZSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24ob2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VTspdHJ5e2lmKFY9MSxCJiYoWT0yJm9lWzBd''@;'; put 'put ''P0IucmV0dXJuOm9lWzBdP0IudGhyb3d8fCgoWT1CLnJldHVybikmJlkuY2FsbChCKSwwKTpCLm5leHQpJiYhKFk9WS5jYWxsKEIsb2VbMV0pKS5kb25lKXJldHVybiBZO3N3aXRjaChCPTAsWSYmKG9lPVsyJm9lWzBdLFkudmFsdWVdKSxvZVswXSl7Y2FzZSAwOmNhc2UgMTpZPW9lO2JyZWFr''@;'; put 'put ''O2Nhc2UgNDpyZXR1cm4gVS5sYWJlbCsrLHt2YWx1ZTpvZVsxXSxkb25lOiExfTtjYXNlIDU6VS5sYWJlbCsrLEI9b2VbMV0sb2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpvZT1VLm9wcy5wb3AoKSxVLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChZPShZPVUudHJ5cykubGVuZ3Ro''@;'; put 'put ''PjAmJllbWS5sZW5ndGgtMV0pfHw2IT09b2VbMF0mJjIhPT1vZVswXSkpe1U9MDtjb250aW51ZX1pZigzPT09b2VbMF0mJighWXx8b2VbMV0+WVswXSYmb2VbMV08WVszXSkpe1UubGFiZWw9b2VbMV07YnJlYWt9aWYoNj09PW9lWzBdJiZVLmxhYmVsPFlbMV0pe1UubGFiZWw9WVsxXSxZPW9l''@;'; put 'put ''O2JyZWFrfWlmKFkmJlUubGFiZWw8WVsyXSl7VS5sYWJlbD1ZWzJdLFUub3BzLnB1c2gob2UpO2JyZWFrfVlbMl0mJlUub3BzLnBvcCgpLFUudHJ5cy5wb3AoKTtjb250aW51ZX1vZT1qLmNhbGwoRSxVKX1jYXRjaChzZSl7b2U9WzYsc2VdLEI9MH1maW5hbGx5e1Y9WT0wfWlmKDUmb2VbMF0p''@;'; put 'put ''dGhyb3cgb2VbMV07cmV0dXJue3ZhbHVlOm9lWzBdP29lWzFdOnZvaWQgMCxkb25lOiEwfX0oW2VlLHRlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgST1SKDU5MjgpLGs9ZnVuY3Rpb24o''@;'; put 'put ''KXtmdW5jdGlvbiBFKGosVil7dmFyIEI9dGhpczt0aGlzLnNlcnZlclVybD1qLHRoaXMuc2VydmVyVHlwZT1WLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIHooQix2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy''@;'; put 'put ''IFk9dGhpcztyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKFgpe3N3aXRjaChYLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsSS5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLGZ1bmN0aW9uKFUpe3JldHVybiB6KFksdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBLKHRo''@;'; put 'put ''aXMsZnVuY3Rpb24ocSl7c3dpdGNoKHEubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCxVKCldO2Nhc2UgMTpyZXR1cm4gcS5zZW50KCksWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBYLnNlbnQoKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSxbMl19fSl9KX19cmV0dXJuIEUucHJvdG90eXBlLmFw''@;'; put 'put ''cGVuZFdhaXRpbmdSZXF1ZXN0PWZ1bmN0aW9uKGope3RoaXMud2FpdGluZ1JlcXVlc3RzLnB1c2goail9LEUucHJvdG90eXBlLmdldFJlcXVlc3RQYXJhbXM9ZnVuY3Rpb24oail7dmFyIFY9e307cmV0dXJuIGouZGVidWcmJihWLl9vbWl0dGV4dGxvZz0iZmFsc2UiLFYuX29taXRzZXNzaW9u''@;'; put 'put ''cmVzdWx0cz0iZmFsc2UiLFYuX2RlYnVnPTEzMSksVn0sRX0oKTtPLkJhc2VKb2JFeGVjdXRvcj1rfSwyNjkzOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oZWUsdGUpe3JldHVybih6PU9iamVjdC5zZXRQcm90''@;'; put 'put ''b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihvZSxzZSl7b2UuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24ob2Usc2Upe2Zvcih2YXIgaGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLGhlKSYmKG9lW2hlXT1zZVto''@;'; put 'put ''ZV0pfSkoZWUsdGUpfSxmdW5jdGlvbihlZSx0ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gb2Uo''@;'; put 'put ''KXt0aGlzLmNvbnN0cnVjdG9yPWVlfXooZWUsdGUpLGVlLnByb3RvdHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KG9lLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IG9lKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdu''@;'; put 'put ''fHxmdW5jdGlvbihlZSl7Zm9yKHZhciB0ZSxvZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7b2U8c2U7b2UrKylmb3IodmFyIGhlIGluIHRlPWFyZ3VtZW50c1tvZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGhlKSYmKGVlW2hlXT10ZVtoZV0pO3JldHVybiBlZX0s''@;'; put 'put ''SS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGVlLHRlLG9lLHNlKXtyZXR1cm4gbmV3KG9lfHwob2U9UHJvbWlzZSkpKGZ1bmN0aW9uKGhlLHVlKXtmdW5jdGlvbiBjZShEKXt0cnl7YihzZS5uZXh0KEQpKX1jYXRjaChIKXt1ZShIKX19''@;'; put 'put ''ZnVuY3Rpb24gRyhEKXt0cnl7YihzZS50aHJvdyhEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIGIoRCl7dmFyIEg7RC5kb25lP2hlKEQudmFsdWUpOihIPUQudmFsdWUsSCBpbnN0YW5jZW9mIG9lP0g6bmV3IG9lKGZ1bmN0aW9uKE4pe04oSCl9KSkudGhlbihjZSxHKX1iKChzZT1zZS5h''@;'; put 'put ''cHBseShlZSx0ZXx8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZWUsdGUpe3ZhciBvZSxzZSxoZSx1ZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZoZVswXSl0aHJvdyBoZVsxXTtyZXR1cm4gaGVbMV19LHRyeXM6W10sb3BzOltd''@;'; put 'put ''fTtyZXR1cm4gdWU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodWVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWU7ZnVuY3Rpb24gRyhiKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKEgpe2lmKG9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYob2U9MSxzZSYmKGhlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChoZT1zZS5yZXR1cm4pJiZoZS5jYWxsKHNlKSwwKTpz''@;'; put 'put ''ZS5uZXh0KSYmIShoZT1oZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBoZTtzd2l0Y2goc2U9MCxoZSYmKEg9WzImSFswXSxoZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6aGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2Fz''@;'; put 'put ''ZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGhlPShoZT1jZS50cnlzKS5sZW5ndGg+MCYmaGVbaGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9''@;'; put 'put ''MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFoZXx8SFsxXT5oZVswXSYmSFsxXTxoZVszXSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGhlWzFdKXtjZS5sYWJlbD1oZVsxXSxoZT1IO2JyZWFrfWlmKGhlJiZjZS5sYWJlbDxoZVsyXSl7Y2UubGFiZWw9aGVb''@;'; put 'put ''Ml0sY2Uub3BzLnB1c2goSCk7YnJlYWt9aGVbMl0mJmNlLm9wcy5wb3AoKSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChlZSxjZSl9Y2F0Y2goTil7SD1bNixOXSxzZT0wfWZpbmFsbHl7b2U9aGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFsdWU6SFswXT9IWzFd''@;'; put 'put ''OnZvaWQgMCxkb25lOiEwfX0oW2IsRF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMTM5NSksQj1SKDU5MjgpLFk9Uig2MTE4KSxYPVIoNzk1KSxVPWZ1bmN0aW9u''@;'; put 'put ''KGVlKXtmdW5jdGlvbiB0ZShvZSxzZSxoZSx1ZSxjZSl7dmFyIEc9ZWUuY2FsbCh0aGlzLG9lLHNlKXx8dGhpcztyZXR1cm4gRy5qb2JzUGF0aD1oZSxHLnJlcXVlc3RDbGllbnQ9dWUsRy5zYXM5UmVxdWVzdENsaWVudD1uZXcgWC5TYXM5UmVxdWVzdENsaWVudChvZSxjZSksR31yZXR1cm4g''@;'; put 'put ''Syh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Usc2UsaGUpe3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB1ZSxjZSxHLGIsRCxILE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6aWYo''@;'; put 'put ''dWU9KDAsQi5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2UucmVwbGFjZSgvXlwvLywiIik6b2UsY2U9IiIuY29uY2F0KGhlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIj8iKS5jb25jYXQoIl9wcm9ncmFtPSIr''@;'; put 'put ''dWUpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGhlLnVzZXJuYW1lJiZoZS5wYXNzd29yZD8iJl91c2VybmFtZT0iK2hlLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIraGUucGFzc3dvcmQ6IiIpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGhlLmRlYnVnPyImX2RlYnVnPTEzMSI6IiIpLEc9SSh7''@;'; put 'put ''fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoaGUpKSxiPW5ldyBqLHNlKXRyeXtiPXEoYixzZSl9Y2F0Y2goQyl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShDPy5tZXNzYWdlLEMpKV19ZWxzZSBzZT0iIjtmb3IoRCBpbiBHKUcuaGFzT3duUHJvcGVydHkoRCkm''@;'; put 'put ''JmIuYXBwZW5kKEQsR1tEXSk7cmV0dXJuWzQsdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihoZS51c2VybmFtZSxoZS5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBnLnNlbnQoKSxIPXNlJiZPYmplY3Qua2V5cyhzZSkubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1k''@;'; put 'put ''YXRhOyBib3VuZGFyeT0iK2IuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIixbMixuZXcgUHJvbWlzZShmdW5jdGlvbihDLFMpe3JldHVybiBOLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoY2UsYix2b2lkIDAsSCx7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSkudGhlbihmdW5j''@;'; put 'put ''dGlvbih2KXtOLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdCh2LG9lLGhlLmRlYnVnKSxDKHYpfSkuY2F0Y2goZnVuY3Rpb24odil7dmFyIHA9djt2LnJlc3VsdCYmIiIhPT12LnJlc3VsdD9wPXYucmVzdWx0OnYubWVzc2FnZSYmKHA9di5tZXNzYWdlKSxOLnJlcXVlc3RDbGllbnQuYXBw''@;'; put 'put ''ZW5kUmVxdWVzdChwLG9lLGhlLmRlYnVnKSxTKG5ldyBWLkVycm9yUmVzcG9uc2Uodj8ubWVzc2FnZSx2KSl9KX0pXX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihvZSl7dmFyIHNlPXt9O3JldHVybiBvZS5kZWJ1ZyYmKHNlLl9kZWJ1Zz0xMzEpLHNlfSx0''@;'; put 'put ''ZX0oWS5CYXNlSm9iRXhlY3V0b3IpO08uU2FzOUpvYkV4ZWN1dG9yPVU7dmFyIHE9ZnVuY3Rpb24oZWUsdGUpe2Zvcih2YXIgb2UgaW4gdGUpe3ZhciBzZT1vZSxoZT0oMCxCLmNvbnZlcnRUb0NTVikodGUsb2UpO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT1oZSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7ZWUuYXBwZW5kKHNlLGhlLHtmaWxlbmFtZToiIi5jb25jYXQoc2UsIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBlZX19''@;'; put 'put ''LDEwNjU6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgeixLPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoej1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKG9lLHNlKXtv''@;'; put 'put ''ZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihvZSxzZSl7Zm9yKHZhciBoZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsaGUpJiYob2VbaGVdPXNlW2hlXSl9KShlZSx0ZSl9LGZ1bmN0aW9uKGVlLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUmJm51''@;'; put 'put ''bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBvZSgpe3RoaXMuY29uc3RydWN0b3I9ZWV9eihlZSx0ZSksZWUucHJvdG90eXBlPW51bGw9PT10ZT9PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKHRlKToob2UucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgb2UpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGVlKXtmb3IodmFyIHRlLG9lPTEsc2U9YXJndW1lbnRzLmxlbmd0aDtvZTxzZTtv''@;'; put 'put ''ZSsrKWZvcih2YXIgaGUgaW4gdGU9YXJndW1lbnRzW29lXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsaGUpJiYoZWVbaGVdPXRlW2hlXSk7cmV0dXJuIGVlfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24o''@;'; put 'put ''ZWUsdGUsb2Usc2Upe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24oaGUsdWUpe2Z1bmN0aW9uIGNlKEQpe3RyeXtiKHNlLm5leHQoRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBHKEQpe3RyeXtiKHNlLnRocm93KEQpKX1jYXRjaChIKXt1ZShIKX19ZnVuY3Rpb24g''@;'; put 'put ''YihEKXt2YXIgSDtELmRvbmU/aGUoRC52YWx1ZSk6KEg9RC52YWx1ZSxIIGluc3RhbmNlb2Ygb2U/SDpuZXcgb2UoZnVuY3Rpb24oTil7TihIKX0pKS50aGVuKGNlLEcpfWIoKHNlPXNlLmFwcGx5KGVlLHRlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5j''@;'; put 'put ''dGlvbihlZSx0ZSl7dmFyIG9lLHNlLGhlLHVlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmhlWzBdKXRocm93IGhlWzFdO3JldHVybiBoZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB1ZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBTeW1ib2wmJih1ZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx1ZTtmdW5jdGlvbiBHKGIpe3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYob2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkg''@;'; put 'put ''ZXhlY3V0aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihvZT0xLHNlJiYoaGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93fHwoKGhlPXNlLnJldHVybikmJmhlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGhlPWhlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGhlO3N3aXRjaChzZT0w''@;'; put 'put ''LGhlJiYoSD1bMiZIWzBdLGhlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpoZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3Ao''@;'; put 'put ''KSxjZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaGU9KGhlPWNlLnRyeXMpLmxlbmd0aD4wJiZoZVtoZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWhlfHxIWzFdPmhlWzBdJiZIWzFdPGhlWzNdKSl7Y2Uu''@;'; put 'put ''bGFiZWw9SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8aGVbMV0pe2NlLmxhYmVsPWhlWzFdLGhlPUg7YnJlYWt9aWYoaGUmJmNlLmxhYmVsPGhlWzJdKXtjZS5sYWJlbD1oZVsyXSxjZS5vcHMucHVzaChIKTticmVha31oZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7''@;'; put 'put ''Y29udGludWV9SD10ZS5jYWxsKGVlLGNlKX1jYXRjaChOKXtIPVs2LE5dLHNlPTB9ZmluYWxseXtvZT1oZT0wfWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbYixEXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNN''@;'; put 'put ''b2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzanNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMzkwMCksQj1SKDEzOTUpLFk9Uig0MDM3KSxYPVIoNTkyOCksVT1SKDU5MjgpLHE9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9uIHRlKG9lLHNlLGhlKXt2YXIgdWU9ZWUuY2FsbCh0aGlz''@;'; put 'put ''LG9lLFYuU2VydmVyVHlwZS5TYXNqcyl8fHRoaXM7cmV0dXJuIHVlLmpvYnNQYXRoPXNlLHVlLnJlcXVlc3RDbGllbnQ9aGUsdWV9cmV0dXJuIEsodGUsZWUpLHRlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKG9lLHNlLGhlLHVlLGNlLEcpe3JldHVybiB2b2lkIDA9PT1HJiYoRz1bXSks''@;'; put 'put ''ayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYixELEgsTixnLEMsUyxwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih3KXtpZihiPXVlLEQ9KDAsVS5pc1JlbGF0aXZlUGF0aCkob2UpJiZoZS5hcHBMb2M/aGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrb2UucmVw''@;'; put 'put ''bGFjZSgvXlwvLywiIik6b2UsSD0iIi5jb25jYXQoaGUuc2VydmVyVXJsKS5jb25jYXQodGhpcy5qb2JzUGF0aCwiLz8iKS5jb25jYXQoIl9wcm9ncmFtPSIrRCksTj1JKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLGc9KDAsWC5nZXRGb3JtRGF0YSkoKSxzZSl0cnl7Zz0oMCxZLmdl''@;'; put 'put ''bmVyYXRlRmlsZVVwbG9hZEZvcm0pKGcsc2UpfWNhdGNoKEope3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoSj8ubWVzc2FnZSxKKSldfWZvcihDIGluIE4pTi5oYXNPd25Qcm9wZXJ0eShDKSYmZy5hcHBlbmQoQyxOW0NdKTtyZXR1cm4gUz1nIGluc3RhbmNl''@;'; put 'put ''b2YgaiYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij8ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoZy5nZXRCb3VuZGFyeSgpKTp2b2lkIDAsWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oSixuZSl7cC5yZXF1ZXN0Q2xpZW50LnBvc3QoSCxnLGNlPy5hY2Nlc3NfdG9rZW4sUyku''@;'; put 'put ''dGhlbihmdW5jdGlvbihkZSl7cmV0dXJuIGsocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGZlLHhlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTGUpe2lmKE9iamVjdC5lbnRyaWVzKGRlLnJlc3VsdCkubGVuZ3RoPDEpdGhyb3cgbmV3IEIuSm9iRXhlY3V0aW9uRXJyb3IoMCwiTm8g''@;'; put 'put ''d2Vib3V0IHdhcyByZXR1cm5lZCBieSBqb2IgIi5jb25jYXQoRCwiLiAgUGxlYXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBtb3JlIGluZm8uIiksZGUubG9nKTtyZXR1cm4oZmU9ZGUucmVzdWx0KSYmInN0cmluZyI9PXR5cGVvZiBmZSYmZmUudHJpbSgpJiYoZGUucmVzdWx0PSgwLFUuZ2V0''@;'; put 'put ''VmFsaWRKc29uKShmZSkpLHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KGRlLG9lLGhlLmRlYnVnKSx4ZT0oMCxVLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShkZSxHKSxKKHhlKSxbMl19KX0pfSkuY2F0Y2goZnVuY3Rpb24oZGUpe3JldHVybiBrKHAsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbigpe3ZhciBmZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oeGUpe3N3aXRjaCh4ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBkZSBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChkZSxvZSxoZS5k''@;'; put 'put ''ZWJ1ZyksbmUobmV3IEIuRXJyb3JSZXNwb25zZShkZT8ubWVzc2FnZSxkZSkpKSxkZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh1ZXx8bmUobmV3IEIuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlz''@;'; put 'put ''dHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLGRlKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBmZS5leGVjdXRlKG9lLHNlLGhlLHVlLGNlLEcpLnRoZW4oZnVuY3Rpb24oTGUpe0ooTGUpfSxmdW5jdGlvbihMZSl7bmUoTGUpfSl9KSxiP1s0LGIoKV06''@;'; put 'put ''WzMsMl0pOlszLDNdO2Nhc2UgMTp4ZS5zZW50KCkseGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAzOm5lKG5ldyBCLkVycm9yUmVzcG9uc2UoZGU/Lm1lc3NhZ2UsZGUpKSx4ZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sdGV9KFIoNjExOCkuQmFz''@;'; put 'put ''ZUpvYkV4ZWN1dG9yKTtPLlNhc2pzSm9iRXhlY3V0b3I9cX0sNjA4NDpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119''@;'; put 'put ''aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24ob2Usc2Upe29lLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKG9lLHNlKXtmb3IodmFyIGhlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxoZSkmJihvZVtoZV09c2VbaGVdKX0pKGVlLHRlKX0sZnVuY3Rpb24o''@;'; put 'put ''ZWUsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIG9lKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lZX16''@;'; put 'put ''KGVlLHRlKSxlZS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihvZS5wcm90b3R5cGU9dGUucHJvdG90eXBlLG5ldyBvZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZWUpe2Zvcih2YXIg''@;'; put 'put ''dGUsb2U9MSxzZT1hcmd1bWVudHMubGVuZ3RoO29lPHNlO29lKyspZm9yKHZhciBoZSBpbiB0ZT1hcmd1bWVudHNbb2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxoZSkmJihlZVtoZV09dGVbaGVdKTtyZXR1cm4gZWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fSxrPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihlZSx0ZSxvZSxzZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbihoZSx1ZSl7ZnVuY3Rpb24gY2UoRCl7dHJ5e2Ioc2UubmV4dChEKSl9Y2F0Y2goSCl7dWUoSCl9fWZ1bmN0aW9uIEcoRCl7dHJ5e2Ioc2Uu''@;'; put 'put ''dGhyb3coRCkpfWNhdGNoKEgpe3VlKEgpfX1mdW5jdGlvbiBiKEQpe3ZhciBIO0QuZG9uZT9oZShELnZhbHVlKTooSD1ELnZhbHVlLEggaW5zdGFuY2VvZiBvZT9IOm5ldyBvZShmdW5jdGlvbihOKXtOKEgpfSkpLnRoZW4oY2UsRyl9Yigoc2U9c2UuYXBwbHkoZWUsdGV8fFtdKSkubmV4dCgp''@;'; put 'put ''KX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmaGVbMF0pdGhyb3cgaGVbMV07cmV0dXJuIGhlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHVlPXtuZXh0OkcoMCks''@;'; put 'put ''dGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHVlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHVlO2Z1bmN0aW9uIEcoYil7cmV0dXJuIGZ1bmN0aW9uKEQpe3JldHVybiBmdW5jdGlvbihIKXtpZihvZSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKG9lPTEsc2UmJihoZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoaGU9c2UucmV0dXJuKSYmaGUuY2FsbChzZSksMCk6c2UubmV4dCkmJiEoaGU9aGUuY2FsbChz''@;'; put 'put ''ZSxIWzFdKSkuZG9uZSlyZXR1cm4gaGU7c3dpdGNoKHNlPTAsaGUmJihIPVsyJkhbMF0saGUudmFsdWVdKSxIWzBdKXtjYXNlIDA6Y2FzZSAxOmhlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFdLGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0s''@;'; put 'put ''SD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChoZT0oaGU9Y2UudHJ5cykubGVuZ3RoPjAmJmhlW2hlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYyIT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0m''@;'; put 'put ''JighaGV8fEhbMV0+aGVbMF0mJkhbMV08aGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJlbDxoZVsxXSl7Y2UubGFiZWw9aGVbMV0saGU9SDticmVha31pZihoZSYmY2UubGFiZWw8aGVbMl0pe2NlLmxhYmVsPWhlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFr''@;'; put 'put ''fWhlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoZWUsY2UpfWNhdGNoKE4pe0g9WzYsTl0sc2U9MH1maW5hbGx5e29lPWhlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFtiLERd''@;'; put 'put ''KX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5XZWJKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGo9Uig2MjMwKSxWPVIoMzkwMCksQj1SKDEzOTUpLFk9Uig0MDM3KSxYPVIoMjE3MCksVT1SKDU5MjgpLHE9ZnVuY3Rpb24oZWUpe2Z1bmN0aW9u''@;'; put 'put ''IHRlKG9lLHNlLGhlLHVlLGNlKXt2YXIgRz1lZS5jYWxsKHRoaXMsb2Usc2UpfHx0aGlzO3JldHVybiBHLmpvYnNQYXRoPWhlLEcucmVxdWVzdENsaWVudD11ZSxHLnNhc1ZpeWFBcGlDbGllbnQ9Y2UsR31yZXR1cm4gSyh0ZSxlZSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ob2Us''@;'; put 'put ''c2UsaGUsdWUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBiLEQsSCxOLGcsQyxTLHYscCxKLG5lLGRlLHhlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihMZSl7c3dpdGNoKExlLmxhYmVsKXtjYXNlIDA6aWYo''@;'; put 'put ''Yj11ZSxEPSgwLFUuaXNSZWxhdGl2ZVBhdGgpKG9lKSYmaGUuYXBwTG9jP2hlLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK29lLnJlcGxhY2UoL15cLy8sIiIpOm9lLEg9IiIuY29uY2F0KGhlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3Jh''@;'; put 'put ''bT0iK0QpLGhlLnNlcnZlclR5cGUhPT1WLlNlcnZlclR5cGUuU2FzVml5YSlyZXR1cm5bMyw1XTtOPXZvaWQgMCxMZS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gTGUudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmdldEpvYlVyaShvZSldO2Nhc2UgMjpyZXR1cm4gTj1MZS5zZW50KCksWzMs''@;'; put 'put ''NF07Y2FzZSAzOnJldHVybiBnPUxlLnNlbnQoKSxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihGZSxPZSl7cmV0dXJuIGsoeGUsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBqZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oV2Upe3N3aXRjaChXZS5sYWJlbCl7Y2FzZSAwOnJldHVy''@;'; put 'put ''biBnIGluc3RhbmNlb2YgQi5Mb2dpblJlcXVpcmVkRXJyb3I/KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gamUuZXhlY3V0ZShvZSxzZSxoZSx1ZSxjZSxHKS50aGVuKGZ1bmN0aW9uKEtlKXtGZShLZSl9LGZ1bmN0aW9uKEtlKXtPZShLZSl9KX0pLGI/WzQs''@;'; put 'put ''YigpXTpbMywyXSk6WzMsM107Y2FzZSAxOldlLnNlbnQoKSxXZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6T2UobmV3IEIuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSxXZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0pXTtjYXNlIDQ6SCs9Ti5sZW5ndGg+''@;'; put 'put ''MD8iJl9qb2I9IitOOiIiLE4ubGVuZ3RoPjAmJihIPShIKz0iJl9qb2I9IitOKS5yZXBsYWNlKCJfcHJvZ3JhbT0iLCJfX3Byb2dyYW09IikpLEgrPWhlLmNvbnRleHROYW1lJiYhL1xzLy50ZXN0KGhlLmNvbnRleHROYW1lKT8iJl9jb250ZXh0bmFtZT0iLmNvbmNhdChoZS5jb250ZXh0TmFt''@;'; put 'put ''ZSk6IiIsTGUubGFiZWw9NTtjYXNlIDU6aWYoQz1JKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhoZSkpLFM9KDAsVS5nZXRGb3JtRGF0YSkoKSxzZSlpZih2PUpTT04uc3RyaW5naWZ5KHNlKSxoZS5zZXJ2ZXJUeXBlPT09Vi5TZXJ2ZXJUeXBlLlNhczl8fHYubGVuZ3RoPjVlNXx8di5pbmNs''@;'; put 'put ''dWRlcygiOyIpKXRyeXtTPSgwLFkuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkoUyxzZSl9Y2F0Y2goRmUpe3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoRmU/Lm1lc3NhZ2UsRmUpKV19ZWxzZSB0cnl7cD0oMCxYLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShT''@;'; put 'put ''LHNlKSxKPXAucmVxdWVzdFBhcmFtcyxTPXAuZm9ybURhdGEsQz1JKEkoe30sQyksSil9Y2F0Y2goRmUpe3JldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoRmU/Lm1lc3NhZ2UsRmUpKV19Zm9yKG5lIGluIEMpQy5oYXNPd25Qcm9wZXJ0eShuZSkmJlMuYXBwZW5k''@;'; put 'put ''KG5lLENbbmVdKTtyZXR1cm4gZGU9UyBpbnN0YW5jZW9mIGomJnR5cGVvZiBGb3JtRGF0YT4idSI/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIuY29uY2F0KFMuZ2V0Qm91bmRhcnkoKSk6dm9pZCAwLFsyLG5ldyBQcm9taXNlKGZ1bmN0aW9uKEZlLE9lKXt4ZS5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LnBvc3QoSCxTLGNlPy5hY2Nlc3NfdG9rZW4sZGUpLnRoZW4oZnVuY3Rpb24oamUpe3JldHVybiBrKHhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgV2UsS2U7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihZZSl7c3dpdGNoKFllLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5yZXF1ZXN0''@;'; put 'put ''Q2xpZW50LmFwcGVuZFJlcXVlc3QoamUsb2UsaGUuZGVidWcpLFdlPWplLnJlc3VsdCwhaGUuZGVidWcpcmV0dXJuWzMsNF07c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBWLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm5bMywxXTtjYXNlIFYuU2VydmVyVHlwZS5TYXM5OnJldHVyblsz''@;'; put 'put ''LDNdfXJldHVyblszLDRdO2Nhc2UgMTpyZXR1cm5bNCwoMCxVLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKGplLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpXTtjYXNlIDI6cmV0dXJuIFdlPVllLnNlbnQoKSxbMyw0XTtjYXNlIDM6cmV0dXJuIFdlPSJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgamUucmVzdWx0PygwLFUucGFyc2VXZWJvdXRSZXNwb25zZSkoamUucmVzdWx0LEgpOmplLnJlc3VsdCxbMyw0XTtjYXNlIDQ6cmV0dXJuIEtlPSgwLFUuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHtyZXN1bHQ6V2UsbG9nOmplLmxvZ30sRyksRmUoS2UpLFsy''@;'; put 'put ''XX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oamUpe3JldHVybiBrKHhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgV2U9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEtlKXtzd2l0Y2goS2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gamUgaW5zdGFuY2VvZiBCLkpvYkV4ZWN1dGlvbkVy''@;'; put 'put ''cm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoamUsb2UsaGUuZGVidWcpLE9lKG5ldyBCLkVycm9yUmVzcG9uc2UoamU/Lm1lc3NhZ2UsamUpKSksamUgaW5zdGFuY2VvZiBCLkxvZ2luUmVxdWlyZWRFcnJvcj8odWV8fE9lKG5ldyBCLkVycm9yUmVzcG9uc2UoIlJlcXVl''@;'; put 'put ''c3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixqZSkpLHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoZnVuY3Rpb24oKXtyZXR1cm4gV2UuZXhlY3V0ZShvZSxzZSxoZSx1ZSxjZSxHKS50aGVuKGZ1bmN0''@;'; put 'put ''aW9uKFllKXtGZShZZSl9LGZ1bmN0aW9uKFllKXtPZShZZSl9KX0pLGI/WzQsYigpXTpbMywyXSk6WzMsM107Y2FzZSAxOktlLnNlbnQoKSxLZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6T2UobmV3IEIuRXJyb3JSZXNwb25zZShqZT8ubWVzc2FnZSxqZSkpLEtlLmxhYmVs''@;'; put 'put ''PTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19fSl9KX0sdGUucHJvdG90eXBlLmdldEpvYlVyaT1mdW5jdGlvbihvZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGhlLHVlLGNlLEcsYjtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEQpe3N3aXRjaChE''@;'; put 'put ''LmxhYmVsKXtjYXNlIDA6aWYoIXRoaXMuc2FzVml5YUFwaUNsaWVudClyZXR1cm5bMiwiIl07aWYoc2U9IiIsKDAsVS5pc1JlbGF0aXZlUGF0aCkob2UpPyhjZT1vZS5zcGxpdCgiLyIpLGhlPWNlLmxlbmd0aD4xP2NlWzBdOiIiLHVlPWNlLmxlbmd0aD4xP2NlWzFdOiIiKTooY2U9b2Uuc3Bs''@;'; put 'put ''aXQoIi8iKSx1ZT1jZS5wb3AoKXx8IiIsaGU9Y2Uuam9pbigiLyIpKSwhdWUpdGhyb3cgbmV3IEVycm9yKCJKb2IgbmFtZSBpcyBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihoZSldO2Nhc2UgMTpyZXR1''@;'; put 'put ''cm4oRz1ELnNlbnQoKSkmJihiPUcuZmluZChmdW5jdGlvbihIKXtyZXR1cm4gSC5uYW1lPT09dWUmJiJqb2JEZWZpbml0aW9uIj09PUguY29udGVudFR5cGV9KSkmJihzZT1iLnVyaSksWzIsc2VdfX0pfSl9LHRlfShSKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7Ty5XZWJKb2JFeGVjdXRvcj1x''@;'; put 'put ''fSw4MjE3OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtW''@;'; put 'put ''JiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYm''@;'; put 'put ''KGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShP''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMTU3MCksTyksSyhSKDM0OTEpLE8pLEsoUig0NDQ2KSxPKSxLKFIoNjExOCksTyksSyhSKDI2OTMpLE8pLEsoUig2MDg0KSxPKSxLKFIoMTA2NSksTyl9LDQ1ODg6ZnVuY3Rpb24oTSxPLFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQxNTUp''@;'; put 'put ''LEs9Uig1MTA4KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odWUpe2Zvcih2YXIgY2UsRz0xLGI9YXJndW1lbnRzLmxlbmd0aDtHPGI7RysrKWZvcih2YXIgRCBpbiBjZT1hcmd1bWVudHNbR10pT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNlLEQpJiYodWVbRF09Y2VbRF0pO3JldHVybiB1ZX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHVlLGNlLEcsYil7cmV0dXJuIG5ldyhHfHwoRz1Qcm9taXNlKSkoZnVuY3Rpb24oRCxI''@;'; put 'put ''KXtmdW5jdGlvbiBOKFMpe3RyeXtDKGIubmV4dChTKSl9Y2F0Y2godil7SCh2KX19ZnVuY3Rpb24gZyhTKXt0cnl7QyhiLnRocm93KFMpKX1jYXRjaCh2KXtIKHYpfX1mdW5jdGlvbiBDKFMpe3ZhciB2O1MuZG9uZT9EKFMudmFsdWUpOih2PVMudmFsdWUsdiBpbnN0YW5jZW9mIEc/djpuZXcg''@;'; put 'put ''RyhmdW5jdGlvbihwKXtwKHYpfSkpLnRoZW4oTixnKX1DKChiPWIuYXBwbHkodWUsY2V8fFtdKSkubmV4dCgpKX0pfSxFPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKHVlLGNlKXt2YXIgRyxiLEQsSCxOPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkRbMF0pdGhyb3cg''@;'; put 'put ''RFsxXTtyZXR1cm4gRFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBIPXtuZXh0OmcoMCksdGhyb3c6ZygxKSxyZXR1cm46ZygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEhbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksSDtmdW5jdGlvbiBnKEMp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24odil7aWYoRyl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtOOyl0cnl7aWYoRz0xLGImJihEPTImdlswXT9iLnJldHVybjp2WzBdP2IudGhyb3d8fCgoRD1iLnJldHVy''@;'; put 'put ''bikmJkQuY2FsbChiKSwwKTpiLm5leHQpJiYhKEQ9RC5jYWxsKGIsdlsxXSkpLmRvbmUpcmV0dXJuIEQ7c3dpdGNoKGI9MCxEJiYodj1bMiZ2WzBdLEQudmFsdWVdKSx2WzBdKXtjYXNlIDA6Y2FzZSAxOkQ9djticmVhaztjYXNlIDQ6cmV0dXJuIE4ubGFiZWwrKyx7dmFsdWU6dlsxXSxkb25l''@;'; put 'put ''OiExfTtjYXNlIDU6Ti5sYWJlbCsrLGI9dlsxXSx2PVswXTtjb250aW51ZTtjYXNlIDc6dj1OLm9wcy5wb3AoKSxOLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChEPShEPU4udHJ5cykubGVuZ3RoPjAmJkRbRC5sZW5ndGgtMV0pfHw2IT09dlswXSYmMiE9PXZbMF0pKXtOPTA7''@;'; put 'put ''Y29udGludWV9aWYoMz09PXZbMF0mJighRHx8dlsxXT5EWzBdJiZ2WzFdPERbM10pKXtOLmxhYmVsPXZbMV07YnJlYWt9aWYoNj09PXZbMF0mJk4ubGFiZWw8RFsxXSl7Ti5sYWJlbD1EWzFdLEQ9djticmVha31pZihEJiZOLmxhYmVsPERbMl0pe04ubGFiZWw9RFsyXSxOLm9wcy5wdXNoKHYp''@;'; put 'put ''O2JyZWFrfURbMl0mJk4ub3BzLnBvcCgpLE4udHJ5cy5wb3AoKTtjb250aW51ZX12PWNlLmNhbGwodWUsTil9Y2F0Y2gocCl7dj1bNixwXSxiPTB9ZmluYWxseXtHPUQ9MH1pZig1JnZbMF0pdGhyb3cgdlsxXTtyZXR1cm57dmFsdWU6dlswXT92WzFdOnZvaWQgMCxkb25lOiEwfX0oW0MsU10p''@;'; put 'put ''fX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnRocm93SWZFcnJvcj1PLlJlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBqPVIoOTY2OSksVj1SKDgzNzMpLEI9UigxNTI3KSxZPVIoMTM5NSksWD1SKDI4MTMpLFU9Uig5Nzc4KSxxPVIoOTUyNiks''@;'; put 'put ''ZWU9Uig1OTI4KSx0ZT1SKDEwMDUpLG9lPVIoOTUzOSksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiB1ZShjZSxHLGIsRCl7dmFyIEg9dGhpczt0aGlzLmJhc2VVcmw9Y2UsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZU''@;'; put 'put ''b2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBILnJlcXVlc3RzfSx0aGlzLmNsZWFyUmVxdWVzdHM9ZnVuY3Rpb24oKXtILnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1mdW5jdGlvbihOKXtyZXR1cm4gayhILHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDLFMsdixwLHcsSixuZSxkZSxmZSx4ZSxMZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEZlKXtzd2l0Y2goRmUubGFiZWwpe2Nhc2UgMDpmb3IoQz17fSxTPU4uc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKHY9ZG9jdW1l''@;'; put 'put ''bnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD1TLHA9di5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpLGc9cD90aGlzLmJhc2VVcmwrcC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGwsdz1wPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpLEo9''@;'; put 'put ''MCxuZT13O0o8bmUubGVuZ3RoO0orKykidXNlcl9vYXV0aF9hcHByb3ZhbCI9PT0oZGU9bmVbSl0pLm5hbWUmJihkZS52YWx1ZT0idHJ1ZSIpLENbZGUubmFtZV09ZGUudmFsdWU7Zm9yKExlIGluKGZlPU9iamVjdC5rZXlzKEMpLmZpbmQoZnVuY3Rpb24oT2Upe3JldHVybiBPZT8udG9Mb3dl''@;'; put 'put ''ckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpfSkpJiYodGhpcy5jc3JmVG9rZW4udmFsdWU9Q1tmZV0sdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZT10aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lfHwieC1jc3JmLXRva2VuIikseGU9bmV3IEZvcm1EYXRhLEMpQy5oYXNPd25Qcm9wZXJ0eShMZSkm''@;'; put 'put ''JnhlLmFwcGVuZChMZSxDW0xlXSk7aWYoIWcpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybls0LHRoaXMuaHR0cENsaWVudC5wb3N0KGcseGUse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiIqLyoiLCJDb250''@;'; put 'put ''ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn19KS50aGVuKGZ1bmN0aW9uKE9lKXtyZXR1cm4gT2UuZGF0YX0pLmNhdGNoKGZ1bmN0aW9uKE9lKXsoei5sb2dnZXJ8fEspLmVycm9yKE9lKX0pXTtjYXNlIDE6cmV0dXJuWzIsRmUuc2VudCgpXX19KX0pfSx0aGlzLnByZXR0aWZ5U3RyaW5nPWZ1bmN0''@;'; put 'put ''aW9uKE4pe3JldHVybigwLG9lLmluc3BlY3QpKE4se2NvbG9yczoiYmxlYWNoZWQiIT09SC52ZXJib3NlTW9kZX0pfSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PWZ1bmN0aW9uKE4pe2lmKCFOKXJldHVybiIiO3ZhciBnO2lmKCJzdHJpbmciPT10eXBlb2YgTil0cnl7Zz1KU09OLnBhcnNl''@;'; put 'put ''KE4pfWNhdGNoe2c9Tn1lbHNlIGc9Tjt2YXIgQz1ILnByZXR0aWZ5U3RyaW5nKGcpLnNwbGl0KCJcbiIpO3JldHVybiBDLmxlbmd0aD41MSYmKEMuc3BsaWNlKDUwKSxDLnB1c2goIi4uLiIpKSxDLmpvaW4oIlxuIil9LHRoaXMuZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrPWZ1bmN0aW9u''@;'; put 'put ''KE4pe3ZhciBnLEM9Ik5vdCBwcm92aWRlZCIsUz17X2hlYWRlcjoiIi5jb25jYXQoQywiXG4iKSxyZXM6e3Jhd0hlYWRlcnM6W0NdfX0sdj1OO2lmKGouZGVmYXVsdC5pc0F4aW9zRXJyb3IoTikpe3ZhciBwPU4ucmVzcG9uc2Usdz1OLnJlcXVlc3QsSj1OLmNvbmZpZztpZihwKXY9cDtlbHNl''@;'; put 'put ''e2lmKHcpe3ZhciBuZT13Ll9oZWFkZXIsZGU9dy5fY3VycmVudFJlcXVlc3Q7bmU/Uy5faGVhZGVyPW5lOmRlJiZkZS5faGVhZGVyJiYoUy5faGVhZGVyPWRlLl9oZWFkZXIpO3ZhciBmZT13LnJlcztmZSYmZmUucmF3SGVhZGVycyYmKFMucmVzLnJhd0hlYWRlcnM9ZmUucmF3SGVhZGVycyl9''@;'; put 'put ''dj17c3RhdHVzOkMscmVxdWVzdDpTLGNvbmZpZzpKfHx7ZGF0YTpDfSxkYXRhOkN9fX12YXIgeGU9di5zdGF0dXMsT2U9di5kYXRhLGplPXYuY29uZmlnLmRhdGEsV2U9di5yZXF1ZXN0fHxTLEtlPVdlLl9oZWFkZXIsWWU9V2UucmVzLnJhd0hlYWRlcnMucmVkdWNlKGZ1bmN0aW9uKGx0LFBl''@;'; put 'put ''LGJlKXtyZXR1cm4gbHQrKGJlJTI9PTA/IiIuY29uY2F0KDA9PT1iZT8iIjoiXG4iKS5jb25jYXQoUGUpOiI6ICIuY29uY2F0KFBlKSl9LCIiKSxKZT1ILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KE9lKTtyZXR1cm4gbnVsbD09PShnPXoubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5pbmZvKCJIVFRQ''@;'; put 'put ''IFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiIuY29uY2F0KEtlKS5jb25jYXQoSC5wYXJzZUludGVyY2VwdGVkQm9keShqZSksIlxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICIpLmNvbmNhdChILnByZXR0aWZ5U3RyaW5nKHhlKSwiXG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVz''@;'; put 'put ''KTpcbiIpLmNvbmNhdChZZSkuY29uY2F0KEplPyJcblxuIi5jb25jYXQoSmUpOiIiLCJcbiIpKSxOfSx0aGlzLnNldFZlcmJvc2VNb2RlPWZ1bmN0aW9uKE4pe0gudmVyYm9zZU1vZGU9TixILnZlcmJvc2VNb2RlP0guZW5hYmxlVmVyYm9zZU1vZGUoKTpILmRpc2FibGVWZXJib3NlTW9kZSgp''@;'; put 'put ''fSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKE4sZyl7dm9pZCAwPT09TiYmKE49SC5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2spLHZvaWQgMD09PWcmJihnPUguZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrKSxILmh0dHBJbnRlcmNlcHRvcj1ILmh0dHBDbGllbnQuaW50''@;'; put 'put ''ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShOLGcpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT1mdW5jdGlvbigpe0guaHR0cEludGVyY2VwdG9yJiZILmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KEguaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPWZ1bmN0''@;'; put 'put ''aW9uKE4sZyl7dmFyIEM9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1nJiYoQ1siQ29udGVudC1UeXBlIl09ZyksQy5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09Zz8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsTiYmKEMuQXV0aG9yaXphdGlvbj0i''@;'; put 'put ''QmVhcmVyICIuY29uY2F0KE4pKSxILmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZILmNzcmZUb2tlbi52YWx1ZSYmKENbSC5jc3JmVG9rZW4uaGVhZGVyTmFtZV09SC5jc3JmVG9rZW4udmFsdWUpLEN9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPWZ1bmN0aW9uKE4pe3ZhciBn''@;'; put 'put ''PUgucGFyc2VDc3JmVG9rZW4oTik7ZyYmKEguZmlsZVVwbG9hZENzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbj1mdW5jdGlvbihOKXt2YXIgZz1ILnBhcnNlQ3NyZlRva2VuKE4pO2cmJihILmNzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1mdW5jdGlvbihO''@;'; put 'put ''KXt2YXIgZyxDPW51bGw9PT0oZz1OLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PWc/dm9pZCAwOmcudG9Mb3dlckNhc2UoKTtpZihDKXJldHVybntoZWFkZXJOYW1lOkMsdmFsdWU6Ti5oZWFkZXJzW0NdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oTixnLEMp''@;'; put 'put ''e3JldHVybiB2b2lkIDA9PT1DJiYoQz0hMSksayhILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUyx2O3JldHVybiBFKHRoaXMsZnVuY3Rpb24ocCl7c3dpdGNoKHAubGFiZWwpe2Nhc2UgMDpyZXR1cm4gUz1OLnJlc3BvbnNlLE4gaW5zdGFuY2VvZiBZLkF1dGhvcml6ZUVycm9yP1s0''@;'; put 'put ''LHRoaXMuaHR0cENsaWVudC5nZXQoTi5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxl''@;'; put 'put ''IGdldHRpbmcgZXJyb3IgY29uZmlybVVybC4gIil9KV06WzMsNV07Y2FzZSAxOnJldHVybiB2PXAuc2VudCgpLCgwLEIuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHY/LmRhdGEpP1s0LHRoaXMuYXV0aG9yaXplKHYuZGF0YSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1l''@;'; put 'put ''c3NhZ2UpKHcsIkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSldOlszLDNdO2Nhc2UgMjpwLnNlbnQoKSxwLmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LGcoKS5jYXRjaChmdW5jdGlvbih3KXt0aHJvdygwLFUucHJlZml4TWVzc2FnZSkodywiRXJyb3Igd2hpbGUgZXhlY3V0''@;'; put 'put ''aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pXTtjYXNlIDQ6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgNTppZihOIGluc3RhbmNlb2YgWS5Mb2dpblJlcXVpcmVkRXJyb3IpdGhyb3cgdGhpcy5jbGVhckNzcmZUb2tlbnMoKSxOO3JldHVybiBOIGluc3RhbmNlb2YgdGUuSW52YWxp''@;'; put 'put ''ZFNBU2pzQ3NyZkVycm9yP1s0LHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKHcpe3ZhciBKLG5lPW51bGw9PT0oSj0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVT''@;'; put 'put ''aXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMody5kYXRhKSl8fHZvaWQgMD09PUo/dm9pZCAwOkpbMV07bmUmJihkb2N1bWVudC5jb29raWU9bmUpfSkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIHJlLWZldGNo''@;'; put 'put ''aW5nIENTUkYgdG9rZW4uIil9KV06WzMsOF07Y2FzZSA2OnJldHVybiBwLnNlbnQoKSxbNCxnKCkuY2F0Y2goZnVuY3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV07Y2FzZSA3OnJl''@;'; put 'put ''dHVyblsyLHAuc2VudCgpXTtjYXNlIDg6cmV0dXJuIDQwMyE9PVM/LnN0YXR1cyYmNDQ5IT09Uz8uc3RhdHVzP1szLDExXToodGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbihTKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZT9bNCxnKCkuY2F0Y2goZnVu''@;'; put 'put ''Y3Rpb24odyl7dGhyb3coMCxVLnByZWZpeE1lc3NhZ2UpKHcsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV06WzMsMTBdKTtjYXNlIDk6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgMTA6dGhyb3cgTjtjYXNlIDExOmlmKDQwND09PVM/LnN0YXR1''@;'; put 'put ''cyl0aHJvdyBuZXcgWS5Ob3RGb3VuZEVycm9yKFMuY29uZmlnLnVybCk7aWYoNTAyPT09Uz8uc3RhdHVzKXtpZihDKXRocm93IG5ldyBZLkludGVybmFsU2VydmVyRXJyb3I7cmV0dXJuWzJdfXAubGFiZWw9MTI7Y2FzZSAxMjp0aHJvdyBOLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJ''@;'; put 'put ''RllfTEVBRl9TSUdOQVRVUkUiPT09Ti5jb2RlP25ldyBZLkNlcnRpZmljYXRlRXJyb3IoTi5tZXNzYWdlKTpOLm1lc3NhZ2U/TjooMCxVLnByZWZpeE1lc3NhZ2UpKE4sIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX19KX0pfSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoY2UsRyksYiYm''@;'; put 'put ''KHRoaXMucmVxdWVzdHNMaW1pdD1iKSxEJiYodGhpcy5zZXRWZXJib3NlTW9kZShEKSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCkpfXJldHVybiB1ZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKGNlLEcpe3RoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKX0sdWUucHJvdG90eXBlLnNh''@;'; put 'put ''dmVMb2NhbFN0b3JhZ2VUb2tlbj1mdW5jdGlvbihjZSxHKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLGNlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixHKX0sdWUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbihjZSl7cmV0dXJuIHZvaWQg''@;'; put 'put ''MD09PWNlJiYoY2U9ImdlbmVyYWwiKSwiZmlsZSI9PT1jZT90aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW46dGhpcy5jc3JmVG9rZW59LHVlLnByb3RvdHlwZS5jbGVhckNzcmZUb2tlbnM9ZnVuY3Rpb24oKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxl''@;'; put 'put ''VXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifX0sdWUucHJvdG90eXBlLmNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zPWZ1bmN0aW9uKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIs''@;'; put 'put ''IiIpfSx1ZS5wcm90b3R5cGUuZ2V0QmFzZVVybD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9LHVlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ9IiIsSD0iIixOPW51bGw7YiYmKGNlPy5sb2c/KEQ9''@;'; put 'put ''KDAsZWUucGFyc2VTb3VyY2VDb2RlKShjZS5sb2cpLEg9KDAsZWUucGFyc2VHZW5lcmF0ZWRDb2RlKShjZS5sb2cpLE49Y2U/LnJlc3VsdD9jZS5yZXN1bHQuV09SSzpjZS5sb2cpOmNlPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9mIGNlLnJlc3VsdCYmKEQ9KDAsZWUucGFyc2VTb3VyY2VD''@;'; put 'put ''b2RlKShjZS5yZXN1bHQpLEg9KDAsZWUucGFyc2VHZW5lcmF0ZWRDb2RlKShjZS5yZXN1bHQpKSxOPWNlLnJlc3VsdC5XT1JLKSk7dmFyIGc9InN0cmluZyI9PXR5cGVvZiBjZT8ucmVzdWx0P2NlPy5yZXN1bHQ6SlNPTi5zdHJpbmdpZnkoY2U/LnJlc3VsdCxudWxsLDIpO3RoaXMucmVxdWVz''@;'; put 'put ''dHMucHVzaCh7bG9nRmlsZTpjZT8ubG9nfHxnfHxjZSxzZXJ2aWNlTGluazpHLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOkQsZ2VuZXJhdGVkQ29kZTpILFNBU1dPUks6Tn0pLHRoaXMucmVxdWVzdHMubGVuZ3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxp''@;'; put 'put ''Y2UoMCwxKX0sdWUucHJvdG90eXBlLmdldD1mdW5jdGlvbihjZSxHLGIsRCxIKXtyZXR1cm4gdm9pZCAwPT09YiYmKGI9ImFwcGxpY2F0aW9uL2pzb24iKSx2b2lkIDA9PT1EJiYoRD17fSksdm9pZCAwPT09SCYmKEg9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE4s''@;'; put 'put ''ZyxDPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihTKXtyZXR1cm4gTj1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKEcsYikpLEQpLGc9e2hlYWRlcnM6TixyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Yj8idGV4dCI6Impzb24iLHdpdGhDcmVkZW50aWFsczohMH0sInRleHQvcGxhaW4i''@;'; put 'put ''PT09YiYmKGcudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSxbMix0aGlzLmh0dHBDbGllbnQuZ2V0KGNlLGcpLnRoZW4oZnVuY3Rpb24odil7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKHYpLEMucGFyc2VSZXNwb25zZSh2KX0pLmNhdGNoKGZ1bmN0aW9uKHYpe3JldHVybiBrKEMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbigpe3ZhciBwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih3KXtzd2l0Y2gody5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IodixmdW5jdGlvbigpe3JldHVybiBwLmdldChjZSxHLGIsRCkuY2F0Y2goZnVuY3Rpb24oSil7dGhyb3co''@;'; put 'put ''MCxVLnByZWZpeE1lc3NhZ2UpKEosIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSl9LEgpXTtjYXNlIDE6cmV0dXJuWzIsdy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUucG9zdD1mdW5jdGlvbihjZSxHLGIsRCxILE4pe3JldHVybiB2''@;'; put 'put ''b2lkIDA9PT1EJiYoRD0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PUgmJihIPXt9KSx2b2lkIDA9PT1OJiYoTj17fSksayh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxDPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihTKXtyZXR1cm4gZz1JKEkoe30sdGhpcy5n''@;'; put 'put ''ZXRIZWFkZXJzKGIsRCkpLEgpLFsyLHRoaXMuaHR0cENsaWVudC5wb3N0KGNlLEcsSSh7aGVhZGVyczpnLHdpdGhDcmVkZW50aWFsczohMH0sTikpLnRoZW4oZnVuY3Rpb24odil7cmV0dXJuKDAsTy50aHJvd0lmRXJyb3IpKHYpLEMucGFyc2VSZXNwb25zZSh2KX0pLmNhdGNoKGZ1bmN0aW9u''@;'; put 'put ''KHYpe3JldHVybiBrKEMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih3KXtzd2l0Y2gody5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IodixmdW5jdGlvbigpe3JldHVybiBwLnBvc3QoY2UsRyxiLEQsSCl9''@;'; put 'put ''KV07Y2FzZSAxOnJldHVyblsyLHcuc2VudCgpXX19KX0pfSldfSl9KX0sdWUucHJvdG90eXBlLnB1dD1mdW5jdGlvbihjZSxHLGIsRCl7cmV0dXJuIHZvaWQgMD09PUQmJihEPXt9KSxrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE49dGhpcztyZXR1cm4gRSh0aGlzLGZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiBIPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpKSxEKSxbMix0aGlzLmh0dHBDbGllbnQucHV0KGNlLEcse2hlYWRlcnM6SCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKEMpe3JldHVybigwLE8udGhyb3dJZkVy''@;'; put 'put ''cm9yKShDKSxOLnBhcnNlUmVzcG9uc2UoQyl9KS5jYXRjaChmdW5jdGlvbihDKXtyZXR1cm4gayhOLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odil7c3dpdGNoKHYubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVy''@;'; put 'put ''cm9yKEMsZnVuY3Rpb24oKXtyZXR1cm4gUy5wdXQoY2UsRyxiLEQpfSldO2Nhc2UgMTpyZXR1cm5bMix2LnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oY2UsRyl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGIsRD10''@;'; put 'put ''aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oSCl7cmV0dXJuIGI9dGhpcy5nZXRIZWFkZXJzKEcsImFwcGxpY2F0aW9uL2pzb24iKSxbMix0aGlzLmh0dHBDbGllbnQuZGVsZXRlKGNlLHtoZWFkZXJzOmIsd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihOKXtyZXR1cm4oMCxP''@;'; put 'put ''LnRocm93SWZFcnJvcikoTiksRC5wYXJzZVJlc3BvbnNlKE4pfSkuY2F0Y2goZnVuY3Rpb24oTil7cmV0dXJuIGsoRCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGc9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhp''@;'; put 'put ''cy5oYW5kbGVFcnJvcihOLGZ1bmN0aW9uKCl7cmV0dXJuIGcuZGVsZXRlKGNlLEcpfSldO2Nhc2UgMTpyZXR1cm5bMixDLnNlbnQoKV19fSl9KX0pXX0pfSl9LHVlLnByb3RvdHlwZS5wYXRjaD1mdW5jdGlvbihjZSxHLGIpe3JldHVybiB2b2lkIDA9PT1HJiYoRz17fSksayh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRCxIPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihOKXtyZXR1cm4gRD10aGlzLmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5wYXRjaChjZSxHLHtoZWFkZXJzOkQsd2l0aENyZWRlbnRpYWxzOiEw''@;'; put 'put ''fSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4oMCxPLnRocm93SWZFcnJvcikoZyksSC5wYXJzZVJlc3BvbnNlKGcpfSkuY2F0Y2goZnVuY3Rpb24oZyl7cmV0dXJuIGsoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEM9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRj''@;'; put 'put ''aChTLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihnLGZ1bmN0aW9uKCl7cmV0dXJuIEMucGF0Y2goY2UsRyxiKX0pXTtjYXNlIDE6cmV0dXJuWzIsUy5zZW50KCldfX0pfSl9KV19KX0pfSx1ZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbihjZSxHLGIpe3Zh''@;'; put 'put ''ciBEO3JldHVybiBrKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBILE4sZztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6SD10aGlzLmdldEhlYWRlcnMoYiwiYXBwbGljYXRpb24vanNvbiIpLCEobnVsbD09PShEPXRoaXMuZmlsZVVw''@;'; put 'put ''bG9hZENzcmZUb2tlbil8fHZvaWQgMD09PUQpJiZELnZhbHVlJiYoSFt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVyTmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKSxDLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBDLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5o''@;'; put 'put ''dHRwQ2xpZW50LnBvc3QoY2UsRyx7aGVhZGVyczpILHRyYW5zZm9ybVJlcXVlc3Q6ZnVuY3Rpb24oUyl7cmV0dXJuIFN9fSldO2Nhc2UgMjpyZXR1cm5bMix7cmVzdWx0OihnPUMuc2VudCgpKS5kYXRhLGV0YWc6Zy5oZWFkZXJzLmV0YWd9XTtjYXNlIDM6aWYoTj1DLnNlbnQoKSw0MDM9PT0o''@;'; put 'put ''bnVsbD09KGc9Ti5yZXNwb25zZSk/dm9pZCAwOmcuc3RhdHVzKXx8NDQ5PT09Zz8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbihnKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJuWzIsdGhpcy51cGxvYWRGaWxlKGNlLEcsYildO3Rocm93IE59''@;'; put 'put ''dGhyb3cgTjtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9LHVlLnByb3RvdHlwZS5wYXJzZVJlc3BvbnNlPWZ1bmN0aW9uKGNlKXt2YXIgRyxiPWNlPy5oZWFkZXJzP2NlLmhlYWRlcnMuZXRhZzoiIixEPSExO3RyeXtHPSJzdHJpbmciPT10eXBlb2YgY2UuZGF0YT9KU09OLnBhcnNlKGNlLmRhdGEp''@;'; put 'put ''OmNlLmRhdGF9Y2F0Y2h7dHJ5e0c9SlNPTi5wYXJzZSgoMCxYLnBhcnNlV2Vib3V0UmVzcG9uc2UpKGNlLmRhdGEpKX1jYXRjaHtHPWNlLmRhdGF9RD0hMH12YXIgSD17cmVzdWx0OkcsZXRhZzpiLHN0YXR1czpjZS5zdGF0dXN9O3JldHVybiBEJiYoSC5sb2c9Y2UuZGF0YSksSH0sdWUucHJv''@;'; put 'put ''dG90eXBlLmNyZWF0ZUh0dHBDbGllbnQ9ZnVuY3Rpb24oY2UsRyl7dmFyIGI9Rz9uZXcgVi5BZ2VudChHKTp2b2lkIDA7dGhpcy5odHRwQ2xpZW50PSgwLGVlLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGNlLGIpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlv''@;'; put 'put ''bihEKXtyZXR1cm4gRD49MjAwJiZEPD00MDF9fSx1ZX0oKTtPLlJlcXVlc3RDbGllbnQ9c2UsTy50aHJvd0lmRXJyb3I9ZnVuY3Rpb24odWUpe3ZhciBjZSxHLGIsRCxILE4sZztzd2l0Y2godWUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHVlLmRhdGEmJiJpbnZhbGlk''@;'; put 'put ''X2dyYW50Ij09PXVlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IFkuTG9naW5SZXF1aXJlZEVycm9yKHVlLmRhdGEpO2lmKCJzdHJpbmciPT10eXBlb2YgdWUuZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09dWUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyB0ZS5JbnZhbGlkU0FTanND''@;'; put 'put ''c3JmRXJyb3I7YnJlYWs7Y2FzZSA0MDE6dGhyb3cib2JqZWN0Ij09dHlwZW9mIHVlLmRhdGE/bmV3IFkuTG9naW5SZXF1aXJlZEVycm9yKHVlLmRhdGEpOm5ldyBZLkxvZ2luUmVxdWlyZWRFcnJvcn1pZihudWxsIT09KEc9bnVsbD09PShjZT11ZS5kYXRhKXx8dm9pZCAwPT09Y2U/dm9pZCAw''@;'; put 'put ''OmNlLmVudGl0eUlEKSYmdm9pZCAwIT09RyYmRy5pbmNsdWRlcygibG9naW4iKSl0aHJvdyBuZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3I7aWYoInN0cmluZyI9PXR5cGVvZiB1ZS5kYXRhJiYoMCxCLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkKSh1ZS5kYXRhKSl0aHJvdyBuZXcgWS5BdXRob3Jp''@;'; put 'put ''emVFcnJvcigiQXV0aG9yaXphdGlvbiByZXF1aXJlZCIsdWUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYoInN0cmluZyI9PXR5cGVvZiB1ZS5kYXRhJiYoMCxCLmlzTG9nSW5SZXF1aXJlZCkodWUuZGF0YSkmJihudWxsPT09KEQ9bnVsbD09PShiPXVlLmNvbmZpZyl8fHZvaWQgMD09PWI/dm9p''@;'; put 'put ''ZCAwOmIudXJsKXx8dm9pZCAwPT09RHx8IUQuaW5jbHVkZXMoIi9TQVNMb2dvbi9sb2dpbiIpKSl0aHJvdyBuZXcgWS5Mb2dpblJlcXVpcmVkRXJyb3I7aWYobnVsbCE9PShIPXVlLmRhdGEpJiZ2b2lkIDAhPT1IJiZILmF1dGhfcmVxdWVzdCl0aHJvdyBuZXcgWS5BdXRob3JpemVFcnJvcih1''@;'; put 'put ''ZS5kYXRhLm1lc3NhZ2UsdWUucmVxdWVzdC5yZXNwb25zZVVSTCk7aWYobnVsbCE9PShnPW51bGw9PT0oTj11ZS5jb25maWcpfHx2b2lkIDA9PT1OP3ZvaWQgMDpOLnVybCkmJnZvaWQgMCE9PWcmJmcuaW5jbHVkZXMoInNhc0F1dGhFcnJvciIpKXRocm93IG5ldyBxLlNBUzlBdXRoRXJyb3I7''@;'; put 'put ''dmFyIFM9aGUodWUuZGF0YSk7aWYoUyl0aHJvdyBTfTt2YXIgaGU9ZnVuY3Rpb24odWUpe2lmKCF1ZSlyZXR1cm4gbnVsbDt0cnl7dmFyIGNlPUpTT04ucGFyc2UodWU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKGNlLmVycm9yQ29kZSYmY2UubWVzc2FnZSlyZXR1cm4gbmV3IFkuSm9i''@;'; put 'put ''RXhlY3V0aW9uRXJyb3IoY2UuZXJyb3JDb2RlLGNlLm1lc3NhZ2UsdWU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNoe310cnl7aWYodWU/LmluY2x1ZGVzKCd7ImVycm9yQ29kZScpJiYoTj11ZS5zcGxpdCgneyJlcnJvckNvZGUnKSkubGVuZ3RoPjEpe3ZhciBHPSd7ImVycm9yQ29k''@;'; put 'put ''ZScrTlsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLGI9SlNPTi5wYXJzZShHLnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcihiLmVycm9yQ29kZSxiLm1lc3NhZ2UsdWU/LnJlcGxhY2UoL1tcblxyXS9nLCJcbiIpKX19Y2F0Y2h7fXRyeXtpZih1''@;'; put 'put ''ZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpJiYoTj11ZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpLmxlbmd0aD4xKXt2YXIgRD1OWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLEg9RC5lbmRzV2l0aCgicnVubmVyIik/IlNB''@;'; put 'put ''U0pTIHJ1bm5lciBub3QgZm91bmQuIEhlcmUncyB0aGUgbGluayAoaHR0cHM6Ly9jbGkuc2FzanMuaW8vYXV0aC8jc2FzanMtcnVubmVyKSB0byB0aGUgU0FTIGNvZGUgZm9yIHJlZ2lzdGVyaW5nIHRoZSBTQVNqcyBydW5uZXIiOiJTdG9yZWQgcHJvY2VzcyBub3QgZm91bmQ6ICIuY29uY2F0''@;'; put 'put ''KEQpO3JldHVybiBuZXcgWS5Kb2JFeGVjdXRpb25FcnJvcig1MDAsSCwiIil9fWNhdGNoe310cnl7dmFyIE47aWYoIXVlPy5tYXRjaCgvPj53ZWJvdXRCRUdJTjw8LykmJnVlPy5tYXRjaCgvU3RvcmVkIFByb2Nlc3MgRXJyb3IvaSkmJnVlPy5tYXRjaCgvVGhpcyByZXF1ZXN0IGNvbXBsZXRl''@;'; put 'put ''ZCB3aXRoIGVycm9ycy4vaSkmJihOPXVlLnNwbGl0KCI8aDI+U0FTIExvZzwvaDI+IikpLmxlbmd0aD4xKXt2YXIgZz1OWzFdLnNwbGl0KCI8cHJlPiIpWzFdLnNwbGl0KCI8L3ByZT4iKVswXTtyZXR1cm4gbmV3IFkuSm9iRXhlY3V0aW9uRXJyb3IoNTAwLEg9IlRoaXMgcmVxdWVzdCBjb21w''@;'; put 'put ''bGV0ZWQgd2l0aCBlcnJvcnMuIixnKX19Y2F0Y2h7fXJldHVybiBudWxsfX0sNzk1OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24ocSxlZSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90''@;'; put 'put ''b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHRlLG9lKXt0ZS5fX3Byb3RvX189b2V9fHxmdW5jdGlvbih0ZSxvZSl7Zm9yKHZhciBzZSBpbiBvZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2Usc2UpJiYodGVbc2VdPW9lW3NlXSl9KShxLGVlKX0sZnVu''@;'; put 'put ''Y3Rpb24ocSxlZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlJiZudWxsIT09ZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhlZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gdGUoKXt0aGlzLmNvbnN0cnVjdG9y''@;'; put 'put ''PXF9eihxLGVlKSxxLnByb3RvdHlwZT1udWxsPT09ZWU/T2JqZWN0LmNyZWF0ZShlZSk6KHRlLnByb3RvdHlwZT1lZS5wcm90b3R5cGUsbmV3IHRlKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihxKXtmb3IodmFy''@;'; put 'put ''IGVlLHRlPTEsb2U9YXJndW1lbnRzLmxlbmd0aDt0ZTxvZTt0ZSsrKWZvcih2YXIgc2UgaW4gZWU9YXJndW1lbnRzW3RlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZWUsc2UpJiYocVtzZV09ZWVbc2VdKTtyZXR1cm4gcX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9''@;'; put 'put ''LGs9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHEsZWUsdGUsb2Upe3JldHVybiBuZXcodGV8fCh0ZT1Qcm9taXNlKSkoZnVuY3Rpb24oc2UsaGUpe2Z1bmN0aW9uIHVlKGIpe3RyeXtHKG9lLm5leHQoYikpfWNhdGNoKEQpe2hlKEQpfX1mdW5jdGlvbiBjZShiKXt0cnl7RyhvZS50''@;'; put 'put ''aHJvdyhiKSl9Y2F0Y2goRCl7aGUoRCl9fWZ1bmN0aW9uIEcoYil7dmFyIEQ7Yi5kb25lP3NlKGIudmFsdWUpOihEPWIudmFsdWUsRCBpbnN0YW5jZW9mIHRlP0Q6bmV3IHRlKGZ1bmN0aW9uKEgpe0goRCl9KSkudGhlbih1ZSxjZSl9Rygob2U9b2UuYXBwbHkocSxlZXx8W10pKS5uZXh0KCkp''@;'; put 'put ''fSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ocSxlZSl7dmFyIHRlLG9lLHNlLGhlLHVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnNlWzBdKXRocm93IHNlWzFdO3JldHVybiBzZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBoZT17bmV4dDpjZSgwKSx0''@;'; put 'put ''aHJvdzpjZSgxKSxyZXR1cm46Y2UoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihoZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxoZTtmdW5jdGlvbiBjZShHKXtyZXR1cm4gZnVuY3Rpb24oYil7cmV0dXJuIGZ1bmN0aW9uKEQpe2lmKHRlKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3VlOyl0cnl7aWYodGU9MSxvZSYmKHNlPTImRFswXT9vZS5yZXR1cm46RFswXT9vZS50aHJvd3x8KChzZT1vZS5yZXR1cm4pJiZzZS5jYWxsKG9lKSwwKTpvZS5uZXh0KSYmIShzZT1zZS5jYWxs''@;'; put 'put ''KG9lLERbMV0pKS5kb25lKXJldHVybiBzZTtzd2l0Y2gob2U9MCxzZSYmKEQ9WzImRFswXSxzZS52YWx1ZV0pLERbMF0pe2Nhc2UgMDpjYXNlIDE6c2U9RDticmVhaztjYXNlIDQ6cmV0dXJuIHVlLmxhYmVsKysse3ZhbHVlOkRbMV0sZG9uZTohMX07Y2FzZSA1OnVlLmxhYmVsKyssb2U9RFsx''@;'; put 'put ''XSxEPVswXTtjb250aW51ZTtjYXNlIDc6RD11ZS5vcHMucG9wKCksdWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHNlPShzZT11ZS50cnlzKS5sZW5ndGg+MCYmc2Vbc2UubGVuZ3RoLTFdKXx8NiE9PURbMF0mJjIhPT1EWzBdKSl7dWU9MDtjb250aW51ZX1pZigzPT09RFsw''@;'; put 'put ''XSYmKCFzZXx8RFsxXT5zZVswXSYmRFsxXTxzZVszXSkpe3VlLmxhYmVsPURbMV07YnJlYWt9aWYoNj09PURbMF0mJnVlLmxhYmVsPHNlWzFdKXt1ZS5sYWJlbD1zZVsxXSxzZT1EO2JyZWFrfWlmKHNlJiZ1ZS5sYWJlbDxzZVsyXSl7dWUubGFiZWw9c2VbMl0sdWUub3BzLnB1c2goRCk7YnJl''@;'; put 'put ''YWt9c2VbMl0mJnVlLm9wcy5wb3AoKSx1ZS50cnlzLnBvcCgpO2NvbnRpbnVlfUQ9ZWUuY2FsbChxLHVlKX1jYXRjaChIKXtEPVs2LEhdLG9lPTB9ZmluYWxseXt0ZT1zZT0wfWlmKDUmRFswXSl0aHJvdyBEWzFdO3JldHVybnt2YWx1ZTpEWzBdP0RbMV06dm9pZCAwLGRvbmU6ITB9fShbRyxi''@;'; put 'put ''XSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2FzOVJlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBqPVIoODIyNCksVj1SKDc4NTcpLEI9Uig5Nzc4KSxZPVIoNDU4OCksWD1SKDEzOTUpLFU9ZnVuY3Rpb24ocSl7ZnVuY3Rpb24gZWUodGUs''@;'; put 'put ''b2Upe3ZhciBzZT1xLmNhbGwodGhpcyx0ZSxvZSl8fHRoaXM7cmV0dXJuIHNlLmh0dHBDbGllbnQuZGVmYXVsdHMubWF4UmVkaXJlY3RzPTAsc2UuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlvbihoZSl7cmV0dXJuIGhlPj0yMDAmJmhlPDMwM30sai5kZWZhdWx0''@;'; put 'put ''JiYoKDAsai5kZWZhdWx0KShzZS5odHRwQ2xpZW50KSxzZS5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgVi5Db29raWVKYXIpLHNlfXJldHVybiBLKGVlLHEpLGVlLnByb3RvdHlwZS5sb2dpbj1mdW5jdGlvbih0ZSxvZSxzZSl7cmV0dXJuIGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGhlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24odWUpe3N3aXRjaCh1ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBoZT0iL1VzZXIgRm9sZGVycy8iLmNvbmNhdCh0ZSwiL015IEZvbGRlci9zYXNqcy9ydW5uZXIiKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPyh0aGlzLmh0''@;'; put 'put ''dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tpZXMoKSxbNCx0aGlzLmdldCgiIi5jb25jYXQoc2UsIj9fcHJvZ3JhbT0iKS5jb25jYXQoaGUsIiZfdXNlcm5hbWU9IikuY29uY2F0KHRlLCImX3Bhc3N3b3JkPSIpLmNvbmNhdChvZSksdm9pZCAwLCJ0ZXh0L3BsYWluIildKTpb''@;'; put 'put ''MywyXTtjYXNlIDE6dWUuc2VudCgpLHVlLmxhYmVsPTI7Y2FzZSAyOnJldHVyblsyXX19KX0pfSxlZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gdm9pZCAwPT09c2UmJihzZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PWhlJiYoaGU9e30pLHZv''@;'; put 'put ''aWQgMD09PXVlJiYodWU9ITEpLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGNlLEcsYj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRCl7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMob2Usc2UpKSxoZSksRz17aGVhZGVyczpjZSxyZXNwb25zZVR5cGU6''@;'; put 'put ''InRleHQvcGxhaW4iPT09c2U/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6ITB9LCJ0ZXh0L3BsYWluIj09PXNlJiYoRy50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQodGUsRykudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gMzAyPT09SC5zdGF0''@;'; put 'put ''dXM/Yi5nZXQoSC5oZWFkZXJzLmxvY2F0aW9uLG9lLHNlKTooKDAsWS50aHJvd0lmRXJyb3IpKEgpLGIucGFyc2VSZXNwb25zZShIKSl9KS5jYXRjaChmdW5jdGlvbihIKXtyZXR1cm4gayhiLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTj10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rp''@;'; put 'put ''b24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZihIIGluc3RhbmNlb2YgWC5Kb2JFeGVjdXRpb25FcnJvcil0aHJvdyBIO3JldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoSCxmdW5jdGlvbigpe3JldHVybiBOLmdldCh0ZSxvZSxzZSxoZSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCxC''@;'; put 'put ''LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSl9LHVlKS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSldO2Nhc2UgMTpyZXR1''@;'; put 'put ''cm5bMixnLnNlbnQoKV19fSl9KX0pXX0pfSl9LGVlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKHRlLG9lLHNlLGhlLHVlKXtyZXR1cm4gdm9pZCAwPT09aGUmJihoZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PXVlJiYodWU9e30pLGsodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''KCl7dmFyIGNlLEc9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGIpe3JldHVybiBjZT1JKEkoe30sdGhpcy5nZXRIZWFkZXJzKHNlLGhlKSksdWUpLFsyLHRoaXMuaHR0cENsaWVudC5wb3N0KHRlLG9lLHtoZWFkZXJzOmNlLHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''RCl7cmV0dXJuIGsoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJldHVybiAzMDIhPT1ELnN0YXR1cz9bMywyXTpbNCx0aGlzLmdldChELmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLGhlLHVlKV07Y2Fz''@;'; put 'put ''ZSAxOnJldHVyblsyLEguc2VudCgpXTtjYXNlIDI6cmV0dXJuKDAsWS50aHJvd0lmRXJyb3IpKEQpLFsyLHRoaXMucGFyc2VSZXNwb25zZShEKV19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKEQpe3JldHVybiBrKEcsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBIPXRoaXM7cmV0dXJuIEUo''@;'; put 'put ''dGhpcyxmdW5jdGlvbihOKXtzd2l0Y2goTi5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoRCxmdW5jdGlvbigpe3JldHVybiBILnBvc3QodGUsb2Usc2UsaGUsdWUpfSldO2Nhc2UgMTpyZXR1cm5bMixOLnNlbnQoKV19fSl9KX0pXX0pfSl9LGVlfShZLlJlcXVlc3RD''@;'; put 'put ''bGllbnQpO08uU2FzOVJlcXVlc3RDbGllbnQ9VX0sMzYwMjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJpY3QiO3ZhciB6LEs9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fCh6PWZ1bmN0aW9uKGssRSl7cmV0dXJuKHo9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNl''@;'; put 'put ''b2YgQXJyYXkmJmZ1bmN0aW9uKGosVil7ai5fX3Byb3RvX189Vn18fGZ1bmN0aW9uKGosVil7Zm9yKHZhciBCIGluIFYpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYsQikmJihqW0JdPVZbQl0pfSkoayxFKX0sZnVuY3Rpb24oayxFKXtpZigiZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBqKCl7dGhpcy5jb25zdHJ1Y3Rvcj1rfXooayxFKSxrLnByb3RvdHlwZT1udWxsPT09RT9PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKEUpOihqLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgail9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5TQVNKU19MT0dTX1NFUEFSQVRPUj1PLlNhc2pzUmVxdWVzdENsaWVudD12b2lkIDA7dmFyIEk9ZnVuY3Rpb24oayl7''@;'; put 'put ''ZnVuY3Rpb24gRSgpe3ZhciBqPW51bGwhPT1rJiZrLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gai5nZXRIZWFkZXJzPWZ1bmN0aW9uKFYsQil7dmFyIFksWD17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PUImJihYWyJDb250ZW50LVR5''@;'; put 'put ''cGUiXT1CKSxYLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1CP0I6IiovKiIsVnx8dHlwZW9mIHdpbmRvdz4idSJ8fChWPW51bGwhPT0oWT1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVk/WTp2b2lkIDApLFYmJihYLkF1dGhvcml6YXRpb249IkJl''@;'; put 'put ''YXJlciAiLmNvbmNhdChWKSksWH0san1yZXR1cm4gSyhFLGspLEUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oail7dmFyIFYsQixZLFg9aj8uaGVhZGVycz9qLmhlYWRlcnMuZXRhZzoiIixVPXt9O3RyeXtVPSJzdHJpbmciPT10eXBlb2Ygai5kYXRhP0pTT04ucGFyc2Uoai5k''@;'; put 'put ''YXRhKTpqLmRhdGF9Y2F0Y2h7aWYoai5kYXRhLmluY2x1ZGVzKE8uU0FTSlNfTE9HU19TRVBBUkFUT1IpKXt2YXIgcT1qLmRhdGEsZWU9cS5zcGxpdChPLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTt2b2lkIDAhPT0oVj1lZS5zcGxpY2UoMCwxKVswXSkmJihVPVYpO3ZhciB0ZT1lZS5zcGxpY2Uo''@;'; put 'put ''MCxlZS5sZW5ndGgtMSksb2U9bmV3IFJlZ0V4cCgiIi5jb25jYXQoTy5TQVNKU19MT0dTX1NFUEFSQVRPUiwiJCIpKSxzZT1lZVswXTtzZSYmKG9lLnRlc3QocSk/dGUubGVuZ3RoPjEmJnRlLnB1c2goc2UpOlk9c2UpLEI9dGUuam9pbihPLlNBU0pTX0xPR1NfU0VQQVJBVE9SKX1lbHNlIFU9''@;'; put 'put ''ai5kYXRhfXZhciBoZT17cmVzdWx0OlUsbG9nOkJ8fCIiLGV0YWc6WCxzdGF0dXM6ai5zdGF0dXN9O3JldHVybiBZJiYoaGUucHJpbnRPdXRwdXQ9WSksaGV9LEV9KFIoNDU4OCkuUmVxdWVzdENsaWVudCk7Ty5TYXNqc1JlcXVlc3RDbGllbnQ9SSxPLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJT''@;'; put 'put ''QVNKU19MT0dTX1NFUEFSQVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ2NjY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''TywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ5NzU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUi''@;'; put 'put ''LHt2YWx1ZTohMH0pfSw0NzgyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDE2ODooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9''@;'; put 'put ''LDg1MTY6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzE1MzooTSxPKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOihNLE8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBSLEs7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uTG9naW5NZWNoYW5pc209Ty5TQVNqc0NvbmZpZz12b2lkIDAsTy5TQVNqc0NvbmZpZz1mdW5jdGlvbigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIiLHRoaXMucGF0''@;'; put 'put ''aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5pc209Ui5EZWZh''@;'; put 'put ''dWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH0sKEs9Uj1PLkxvZ2luTWVjaGFuaXNtfHwoTy5Mb2dpbk1lY2hhbmlzbT17fSkpLkRlZmF1bHQ9IkRlZmF1bHQiLEsuUmVkaXJlY3RlZD0iUmVkaXJlY3RlZCJ9LDYwMzg6KE0sTyk9PnsidXNlIHN0cmljdCI7dmFyIFI7T2JqZWN0LmRl''@;'; put 'put ''ZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uU2Vzc2lvblN0YXRlPXZvaWQgMCwoUj1PLlNlc3Npb25TdGF0ZXx8KE8uU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLFIuUnVubmluZz0icnVubmluZyIsUi5QZW5kaW5nPSJwZW5kaW5nIixS''@;'; put 'put ''LklkbGU9ImlkbGUiLFIuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixSLk5vU3RhdGU9IiIsUi5GYWlsZWQ9ImZhaWxlZCIsUi5FcnJvcj0iZXJyb3IifSw5NDkzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s''@;'; put 'put ''ODY1MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDEyNDpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9i''@;'; put 'put ''amVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1Zd''@;'; put 'put ''KX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29u''@;'; put 'put ''c3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQXV0aG9yaXplRXJyb3I9dm9pZCAwO3Zh''@;'; put 'put ''ciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1JLmNhbGwodGhpcyxFKXx8dGhpcztyZXR1cm4gVi5tZXNzYWdlPUUsVi5jb25maXJtVXJsPWosVi5uYW1lPSJBdXRob3JpemVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9cmV0dXJuIHoo''@;'; put 'put ''ayxJKSxrfShFcnJvcik7Ty5BdXRob3JpemVFcnJvcj1LfSw5NDY1OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3Rh''@;'; put 'put ''bmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9P''@;'; put 'put ''YmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5DZXJ0aWZpY2F0ZUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUpe3ZhciBqPUku''@;'; put 'put ''Y2FsbCh0aGlzLCIiLmNvbmNhdChFLCJcblBsZWFzZSB2aXNpdCB0aGUgbGluayBiZWxvdyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBvbiB0aGlzIGlzc3VlOlxuLSAiKS5jb25jYXQoImh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzExODEjaXNzdWVjb21tZW50LTEwOTA2''@;'; put 'put ''Mzg1ODQiLCJcbiIpKXx8dGhpcztyZXR1cm4gai5uYW1lPSJDZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkNlcnRpZmljYXRlRXJyb3I9S30sNTI2NzpmdW5jdGlvbihNLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2''@;'; put 'put ''YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitT''@;'; put 'put ''dHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUsail7dmFyIFY9SS5jYWxsKHRoaXMsIkVycm9yOiBKb2IgZXhlY3V0aW9uIGZhaWxlZCIpfHx0aGlzO3JldHVy''@;'; put 'put ''biBWLmpvYj1FLFYubG9nPWosVi5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihWLGsucHJvdG90eXBlKSxWfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPUt9LDkyMzI6KE0sTyk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uRXJyb3JSZXNwb25zZT12b2lkIDAsTy5FcnJvclJlc3BvbnNlPWZ1bmN0aW9uKHosSyxJKXt2YXIgaz1LO2lmKCJvYmplY3QiIT10eXBlb2YgSyl0cnl7az1KU09OLnBhcnNlKEspfWNhdGNo''@;'; put 'put ''e0k9SyxrPSIifXRoaXMuZXJyb3I9e21lc3NhZ2U6eixkZXRhaWxzOmsscmF3Okl9fX0sNTEwOTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19f''@;'; put 'put ''cHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7''@;'; put 'put ''aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90''@;'; put 'put ''b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVu''@;'; put 'put ''Y3Rpb24gaygpe3ZhciBFPUkuY2FsbCh0aGlzLCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkludGVybmFsU2VydmVyRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3Ip''@;'; put 'put ''O08uSW50ZXJuYWxTZXJ2ZXJFcnJvcj1LfSw1NTE4OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJy''@;'; put 'put ''YXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYm''@;'; put 'put ''bnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3Jl''@;'; put 'put ''YXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9SS5jYWxsKHRoaXMs''@;'; put 'put ''IkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSW52YWxpZEpzb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5JbnZhbGlkSnNvbkVycm9yPUt9LDEwMDU6ZnVuY3Rp''@;'; put 'put ''b24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVu''@;'; put 'put ''Y3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBl''@;'; put 'put ''eHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBF''@;'; put 'put ''KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gaygpe3ZhciBFPXRoaXM7cmV0dXJuKEU9SS5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29u''@;'; put 'put ''Y2F0KCJJbnZhbGlkIENTUkYgdG9rZW4hIikpfHx0aGlzKS5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihFLGsucHJvdG90eXBlKSxFfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uSW52YWxpZFNBU2pzQ3NyZkVycm9yPUt9LDg1MzE6ZnVuY3Rp''@;'; put 'put ''b24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVu''@;'; put 'put ''Y3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBl''@;'; put 'put ''eHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBF''@;'; put 'put ''KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUsaixWKXt2YXIgQj1JLmNhbGwodGhpcywiRXJyb3IgQ29kZSAiLmNvbmNhdChFLCI6ICIpLmNv''@;'; put 'put ''bmNhdChqKSl8fHRoaXM7cmV0dXJuIEIuZXJyb3JDb2RlPUUsQi5lcnJvck1lc3NhZ2U9aixCLnJlc3VsdD1WLEIubmFtZT0iSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihCLGsucHJvdG90eXBlKSxCfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uSm9iRXhlY3V0''@;'; put 'put ''aW9uRXJyb3I9S30sOTA3OTpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihF''@;'; put 'put ''LGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90''@;'; put 'put ''b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uSm9iU3RhdGVQb2xsRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSxqKXt2YXIgVj1JLmNhbGwodGhpcywiRXJyb3Igd2hp''@;'; put 'put ''bGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpvYiAiLmNvbmNhdChFLCI6ICIpLmNvbmNhdChqLm1lc3NhZ2V8fGopKXx8dGhpcztyZXR1cm4gVi5vcmlnaW5hbEVycm9yPWosVi5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsay5wcm90b3R5cGUpLFZ9''@;'; put 'put ''cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Kb2JTdGF0ZVBvbGxFcnJvcj1LfSwzMDk2OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90''@;'; put 'put ''b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlw''@;'; put 'put ''ZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Kc29uUGFyc2VBcnJheUVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlv''@;'; put 'put ''biBrKCl7dmFyIEU9SS5jYWxsKHRoaXMsIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIil8fHRoaXM7cmV0dXJuIEUubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEUsay5wcm90b3R5cGUpLEV9cmV0dXJuIHooayxJKSxrfShFcnJv''@;'; put 'put ''cik7Ty5Kc29uUGFyc2VBcnJheUVycm9yPUt9LDY3NDM6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBB''@;'; put 'put ''cnJheSYmZnVuY3Rpb24oRSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBr''@;'; put 'put ''JiZudWxsIT09ayl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5j''@;'; put 'put ''cmVhdGUoayk6KEUucHJvdG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLkxvZ2luUmVxdWlyZWRFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj10aGlzLFY9''@;'; put 'put ''RT9KU09OLnN0cmluZ2lmeShFLG51bGwsMik6IllvdSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSI7cmV0dXJuKGo9SS5jYWxsKHRoaXMsIkF1dGggZXJyb3I6ICIuY29uY2F0KFYpKXx8dGhpcykubmFtZT0iTG9naW5SZXF1aXJlZEVycm9yIixPYmplY3Quc2V0''@;'; put 'put ''UHJvdG90eXBlT2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLkxvZ2luUmVxdWlyZWRFcnJvcj1LfSw3ODY0OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9''@;'; put 'put ''T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpb''@;'; put 'put ''Vl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5j''@;'; put 'put ''b25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZv''@;'; put 'put ''aWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKEUsaixWKXt2YXIgQj1JLmNhbGwodGhpcywiQ291bGQgbm90IGdldCBzZXNzaW9uIHN0YXRlLiBTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggIi5jb25jYXQoRSwiIHdoaWxzdCBjaGVja2luZyBzdGF0ZTogIikuY29uY2F0KGopKXx8dGhp''@;'; put 'put ''cztyZXR1cm4gQi5zZXJ2ZXJSZXNwb25zZVN0YXR1cz1FLEIuc2Vzc2lvblN0YXRlVXJsPWosQi5sb2dVcmw9VixCLm5hbWU9Ik5vU2Vzc2lvblN0YXR1cyIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsay5wcm90b3R5cGUpLEJ9cmV0dXJuIHooayxJKSxrfShFcnJvcik7Ty5Ob1Nlc3Npb25T''@;'; put 'put ''dGF0ZUVycm9yPUt9LDk1Nzc6ZnVuY3Rpb24oTSxPKXsidXNlIHN0cmljdCI7dmFyIFIsej10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFI9ZnVuY3Rpb24oSSxrKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24o''@;'; put 'put ''RSxqKXtFLl9fcHJvdG9fXz1qfXx8ZnVuY3Rpb24oRSxqKXtmb3IodmFyIFYgaW4gailPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaixWKSYmKEVbVl09altWXSl9KShJLGspfSxmdW5jdGlvbihJLGspe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBrJiZudWxsIT09ayl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGspKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIEUoKXt0aGlzLmNvbnN0cnVjdG9yPUl9UihJLGspLEkucHJvdG90eXBlPW51bGw9PT1rP09iamVjdC5jcmVhdGUoayk6KEUucHJv''@;'; put 'put ''dG90eXBlPWsucHJvdG90eXBlLG5ldyBFKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLk5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBLPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIGsoRSl7dmFyIGo9SS5jYWxsKHRoaXMsIkVycm9yOiBSZXNvdXJj''@;'; put 'put ''ZSBhdCAiLmNvbmNhdChFLCIgd2FzIG5vdCBmb3VuZCIpKXx8dGhpcztyZXR1cm4gai51cmw9RSxqLm5hbWU9Ik5vdEZvdW5kRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihqLGsucHJvdG90eXBlKSxqfXJldHVybiB6KGssSSksa30oRXJyb3IpO08uTm90Rm91bmRFcnJvcj1LfSw5Mjc5''@;'; put 'put ''OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHosSz10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KHo9ZnVuY3Rpb24oRSxqKXtyZXR1cm4oej1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oVixCKXtWLl9fcHJvdG9f''@;'; put 'put ''Xz1CfXx8ZnVuY3Rpb24oVixCKXtmb3IodmFyIFkgaW4gQilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixZKSYmKFZbWV09QltZXSl9KShFLGopfSxmdW5jdGlvbihFLGope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqJiZudWxsIT09ail0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKGopKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIFYoKXt0aGlzLmNvbnN0cnVjdG9yPUV9eihFLGopLEUucHJvdG90eXBlPW51bGw9PT1qP09iamVjdC5jcmVhdGUoaik6KFYucHJvdG90eXBlPWoucHJvdG90''@;'; put 'put ''eXBlLG5ldyBWKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXZvaWQgMDt2YXIgST1SKDY3OTkpLGs9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gaihWLEIsWSl7dmFyIFg9dGhpcyxVPSJSb290IGZvbGRl''@;'; put 'put ''ciAiLmNvbmNhdChWLCIgd2FzIG5vdCBmb3VuZC4iKSsiXG5QbGVhc2UgY2hlY2sgIi5jb25jYXQoQiwiL1NBU0RyaXZlLiIpKyJcbklmIHRoZSBmb2xkZXIgRE9FUyBleGlzdCB0aGVuIGl0IGlzIGxpa2VseSBhIHBlcm1pc3Npb24gcHJvYmxlbS5cbiI7aWYoWSl7dmFyIHE9KDAsSS5kZWNv''@;'; put 'put ''ZGVUb2tlbikoWSkuc2NvcGU7VSs9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIisocT1xLm1hcChmdW5jdGlvbihlZSl7cmV0dXJuIiogIitlZX0pKS5qb2luKCJcbiIpfXJldHVybihYPUUuY2FsbCh0aGlzLFUpfHx0aGlzKS5uYW1lPSJSb290''@;'; put 'put ''Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFgsai5wcm90b3R5cGUpLFh9cmV0dXJuIEsoaixFKSxqfShFcnJvcik7Ty5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1rfSw5NTI2OmZ1bmN0aW9uKE0sTyl7InVzZSBzdHJpY3QiO3ZhciBSLHo9dGhpcyYmdGhpcy5f''@;'; put 'put ''X2V4dGVuZHN8fChSPWZ1bmN0aW9uKEksayl7cmV0dXJuKFI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKEUsail7RS5fX3Byb3RvX189an18fGZ1bmN0aW9uKEUsail7Zm9yKHZhciBWIGluIGopT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGosVikmJihFW1ZdPWpbVl0pfSkoSSxrKX0sZnVuY3Rpb24oSSxrKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgayYmbnVsbCE9PWspdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhrKSsiIGlzIG5vdCBhIGNvbnN0''@;'; put 'put ''cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBFKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfVIoSSxrKSxJLnByb3RvdHlwZT1udWxsPT09az9PYmplY3QuY3JlYXRlKGspOihFLnByb3RvdHlwZT1rLnByb3RvdHlwZSxuZXcgRSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksTy5TQVM5QXV0aEVycm9yPXZvaWQgMDt2YXIgSz1mdW5jdGlvbihJKXtmdW5jdGlvbiBrKCl7dmFyIEU9SS5jYWxsKHRoaXMsIlRoZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0''@;'; put 'put ''IG9mIGNyZWRlbnRpYWxzLiIpfHx0aGlzO3JldHVybiBFLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoRSxrLnByb3RvdHlwZSksRX1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLlNBUzlBdXRoRXJyb3I9S30sODg3NTpmdW5jdGlvbihNLE8peyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgUix6PXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUj1mdW5jdGlvbihJLGspe3JldHVybihSPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihFLGope0UuX19wcm90b19fPWp9fHxmdW5jdGlvbihFLGope2Zvcih2''@;'; put 'put ''YXIgViBpbiBqKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChqLFYpJiYoRVtWXT1qW1ZdKX0pKEksayl9LGZ1bmN0aW9uKEksayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitT''@;'; put 'put ''dHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gRSgpe3RoaXMuY29uc3RydWN0b3I9SX1SKEksayksSS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooRS5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEUpfSk7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lkIDA7dmFyIEs9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gayhFKXt2YXIgaj1JLmNhbGwodGhpcywiRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAiLmNvbmNh''@;'; put 'put ''dChFKSl8fHRoaXM7cmV0dXJuIGoudXJsPUUsai5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoaixrLnByb3RvdHlwZSksan1yZXR1cm4geihrLEkpLGt9KEVycm9yKTtPLldlYm91dFJlc3BvbnNlRXJyb3I9S30sMTM5NTpmdW5jdGlvbihNLE8sUil7''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciB6PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLGssRSxqKXt2b2lkIDA9PT1qJiYoaj1FKTt2YXIgVj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGssRSk7ViYmISgiZ2V0ImluIFY/IWsuX19lc01v''@;'; put 'put ''ZHVsZTpWLndyaXRhYmxlfHxWLmNvbmZpZ3VyYWJsZSl8fChWPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBrW0VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLGosVil9OmZ1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpLElbal09a1tFXX0pLEs9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksayl7Zm9yKHZhciBFIGluIEkpImRlZmF1bHQiPT09RXx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGssRSl8fHooayxJLEUpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEw''@;'; put 'put ''fSksSyhSKDEyNCksTyksSyhSKDk0NjUpLE8pLEsoUig1MjY3KSxPKSxLKFIoOTIzMiksTyksSyhSKDUxMDkpLE8pLEsoUig1NTE4KSxPKSxLKFIoODUzMSksTyksSyhSKDkwNzkpLE8pLEsoUigzMDk2KSxPKSxLKFIoNjc0MyksTyksSyhSKDc4NjQpLE8pLEsoUig5NTc3KSxPKSxLKFIoOTI3''@;'; put 'put ''OSksTyksSyhSKDg4NzUpLE8pfSwxMjMwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxr''@;'; put 'put ''LEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoNDcwKSxPKSxLKFIoNDY2NiksTyksSyhSKDQ5NzUpLE8pLEsoUig1NzY2KSxPKSxLKFIoMjE1KSxPKSxLKFIoNDc4MiksTyksSyhSKDQxNjgpLE8pLEsoUig4NTE2KSxPKSxLKFIoMzg0MCksTyksSyhSKDU4''@;'; put 'put ''NDEpLE8pLEsoUigxNDI4KSxPKSxLKFIoNjAzOCksTyksSyhSKDk0OTMpLE8pLEsoUigzMTUzKSxPKSxLKFIoODY1MCksTyksSyhSKDYxNzcpLE8pLEsoUigxMzk1KSxPKX0sMzMwMjpmdW5jdGlvbihNLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgUj10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBSPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKEkpe2Zvcih2YXIgayxFPTEsaj1hcmd1bWVudHMubGVuZ3RoO0U8ajtFKyspZm9yKHZhciBWIGluIGs9YXJndW1lbnRzW0VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChrLFYpJiYoSVtWXT1rW1ZdKTty''@;'; put 'put ''ZXR1cm4gSX0sUi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHo9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEksayxFLGope3JldHVybiBuZXcoRXx8KEU9UHJvbWlzZSkpKGZ1bmN0aW9uKFYsQil7ZnVuY3Rpb24gWShxKXt0cnl7VShqLm5leHQocSkpfWNhdGNoKGVlKXtCKGVlKX19''@;'; put 'put ''ZnVuY3Rpb24gWChxKXt0cnl7VShqLnRocm93KHEpKX1jYXRjaChlZSl7QihlZSl9fWZ1bmN0aW9uIFUocSl7dmFyIGVlO3EuZG9uZT9WKHEudmFsdWUpOihlZT1xLnZhbHVlLGVlIGluc3RhbmNlb2YgRT9lZTpuZXcgRShmdW5jdGlvbih0ZSl7dGUoZWUpfSkpLnRoZW4oWSxYKX1VKChqPWou''@;'; put 'put ''YXBwbHkoSSxrfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihJLGspe3ZhciBFLGosVixCLFk9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmVlswXSl0aHJvdyBWWzFdO3JldHVybiBWWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIEI9''@;'; put 'put ''e25leHQ6WCgwKSx0aHJvdzpYKDEpLHJldHVybjpYKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxCO2Z1bmN0aW9uIFgoVSl7cmV0dXJuIGZ1bmN0aW9uKHEpe3JldHVybiBmdW5jdGlvbihlZSl7aWYo''@;'; put 'put ''RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtZOyl0cnl7aWYoRT0xLGomJihWPTImZWVbMF0/ai5yZXR1cm46ZWVbMF0/ai50aHJvd3x8KChWPWoucmV0dXJuKSYmVi5jYWxsKGopLDApOmoubmV4dCkmJiEoVj1WLmNhbGwoaixl''@;'; put 'put ''ZVsxXSkpLmRvbmUpcmV0dXJuIFY7c3dpdGNoKGo9MCxWJiYoZWU9WzImZWVbMF0sVi52YWx1ZV0pLGVlWzBdKXtjYXNlIDA6Y2FzZSAxOlY9ZWU7YnJlYWs7Y2FzZSA0OnJldHVybiBZLmxhYmVsKysse3ZhbHVlOmVlWzFdLGRvbmU6ITF9O2Nhc2UgNTpZLmxhYmVsKyssaj1lZVsxXSxlZT1b''@;'; put 'put ''MF07Y29udGludWU7Y2FzZSA3OmVlPVkub3BzLnBvcCgpLFkudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFY9KFY9WS50cnlzKS5sZW5ndGg+MCYmVltWLmxlbmd0aC0xXSl8fDYhPT1lZVswXSYmMiE9PWVlWzBdKSl7WT0wO2NvbnRpbnVlfWlmKDM9PT1lZVswXSYmKCFWfHxl''@;'; put 'put ''ZVsxXT5WWzBdJiZlZVsxXTxWWzNdKSl7WS5sYWJlbD1lZVsxXTticmVha31pZig2PT09ZWVbMF0mJlkubGFiZWw8VlsxXSl7WS5sYWJlbD1WWzFdLFY9ZWU7YnJlYWt9aWYoViYmWS5sYWJlbDxWWzJdKXtZLmxhYmVsPVZbMl0sWS5vcHMucHVzaChlZSk7YnJlYWt9VlsyXSYmWS5vcHMucG9w''@;'; put 'put ''KCksWS50cnlzLnBvcCgpO2NvbnRpbnVlfWVlPWsuY2FsbChJLFkpfWNhdGNoKHRlKXtlZT1bNix0ZV0saj0wfWZpbmFsbHl7RT1WPTB9aWYoNSZlZVswXSl0aHJvdyBlZVsxXTtyZXR1cm57dmFsdWU6ZWVbMF0/ZWVbMV06dm9pZCAwLGRvbmU6ITB9fShbVSxxXSl9fX07T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24oSSxrKXtyZXR1cm4geih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''RSxqO3JldHVybiBLKHRoaXMsZnVuY3Rpb24oVil7cmV0dXJuIEU9e30saz8ubGVuZ3RoPyhqPWsucmVkdWNlKGZ1bmN0aW9uKEIsWSl7cmV0dXJuIEJbWV09SVtZXSxCfSx7fSksRT1SKHtyZXN1bHQ6SS5yZXN1bHR9LGopKTpFPUkucmVzdWx0LFsyLEVdfSl9KX19LDc5MjI6ZnVuY3Rpb24o''@;'; put 'put ''TSxPKXsidXNlIHN0cmljdCI7dmFyIFI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiBuZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKGosVil7ZnVuY3Rpb24gQihVKXt0cnl7WChFLm5leHQoVSkpfWNhdGNoKHEpe1YocSl9fWZ1bmN0aW9uIFkoVSl7''@;'; put 'put ''dHJ5e1goRS50aHJvdyhVKSl9Y2F0Y2gocSl7VihxKX19ZnVuY3Rpb24gWChVKXt2YXIgcTtVLmRvbmU/aihVLnZhbHVlKToocT1VLnZhbHVlLHEgaW5zdGFuY2VvZiBrP3E6bmV3IGsoZnVuY3Rpb24oZWUpe2VlKHEpfSkpLnRoZW4oQixZKX1YKChFPUUuYXBwbHkoSyxJfHxbXSkpLm5leHQo''@;'; put 'put ''KSl9KX0sej10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihLLEkpe3ZhciBrLEUsaixWLEI9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmalswXSl0aHJvdyBqWzFdO3JldHVybiBqWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFY9e25leHQ6WSgwKSx0aHJvdzpZKDEp''@;'; put 'put ''LHJldHVybjpZKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFkoWCl7cmV0dXJuIGZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxKXtpZihrKXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO0I7KXRyeXtpZihrPTEsRSYmKGo9MiZxWzBdP0UucmV0dXJuOnFbMF0/RS50aHJvd3x8KChqPUUucmV0dXJuKSYmai5jYWxsKEUpLDApOkUubmV4dCkmJiEoaj1qLmNhbGwoRSxxWzFdKSkuZG9uZSlyZXR1cm4gajtzd2l0''@;'; put 'put ''Y2goRT0wLGomJihxPVsyJnFbMF0sai52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6aj1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gQi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpCLmxhYmVsKyssRT1xWzFdLHE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpxPUIub3BzLnBvcCgp''@;'; put 'put ''LEIudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGo9KGo9Qi50cnlzKS5sZW5ndGg+MCYmaltqLmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe0I9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFqfHxxWzFdPmpbMF0mJnFbMV08alszXSkpe0IubGFiZWw9cVsxXTti''@;'; put 'put ''cmVha31pZig2PT09cVswXSYmQi5sYWJlbDxqWzFdKXtCLmxhYmVsPWpbMV0saj1xO2JyZWFrfWlmKGomJkIubGFiZWw8alsyXSl7Qi5sYWJlbD1qWzJdLEIub3BzLnB1c2gocSk7YnJlYWt9alsyXSYmQi5vcHMucG9wKCksQi50cnlzLnBvcCgpO2NvbnRpbnVlfXE9SS5jYWxsKEssQil9Y2F0''@;'; put 'put ''Y2goZWUpe3E9WzYsZWVdLEU9MH1maW5hbGx5e2s9aj0wfWlmKDUmcVswXSl0aHJvdyBxWzFdO3JldHVybnt2YWx1ZTpxWzBdP3FbMV06dm9pZCAwLGRvbmU6ITB9fShbWCxVXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uYXN5bmNGb3JF''@;'; put 'put ''YWNoPXZvaWQgMCxPLmFzeW5jRm9yRWFjaD1mdW5jdGlvbihLLEkpe3JldHVybiBSKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBrO3JldHVybiB6KHRoaXMsZnVuY3Rpb24oRSl7c3dpdGNoKEUubGFiZWwpe2Nhc2UgMDprPTAsRS5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gazxL''@;'; put 'put ''Lmxlbmd0aD9bNCxJKEtba10sayxLKV06WzMsNF07Y2FzZSAyOkUuc2VudCgpLEUubGFiZWw9MztjYXNlIDM6cmV0dXJuIGsrKyxbMywxXTtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9fSwzNzkzOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KSxPLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxPLmNvbXBhcmVUaW1lc3RhbXBzPWZ1bmN0aW9uKFIseil7cmV0dXJuIHoudGltZXN0YW1wLmdldFRpbWUoKS1SLnRpbWVzdGFtcC5nZXRUaW1lKCl9fSwyNDAyOihNLE8sUik9PnsidXNlIHN0cmljdCI7dmFyIHo9Uig1''@;'; put 'put ''MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5pc0Zvcm1hdHNUYWJsZT1PLmNvbnZlcnRUb0NTVj12b2lkIDA7dmFyIEs9Uig2NDY3KSxJPVIoOTc3OCk7Ty5jb252ZXJ0VG9DU1Y9ZnVuY3Rpb24oRSxqKXt2YXIgVjtpZighRVtqXSl0aHJv''@;'; put 'put ''dygwLEkucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1YuIiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3ZhciBCPUVbal07aWYoIUFycmF5LmlzQXJyYXkoQikpcmV0dXJuIiI7dmFyIFksWD1udWxsPT09KFY9RVsiJCIu''@;'; put 'put ''Y29uY2F0KGopXSl8fHZvaWQgMD09PVY/dm9pZCAwOlYuZm9ybWF0cyxVPVtdLHE9ITE7WCYmKFU9T2JqZWN0LmtleXMoWCkubWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm4iIi5jb25jYXQodGUsIjoiKS5jb25jYXQoWFt0ZV0pfSkpO3ZhciBlZT1PYmplY3Qua2V5cyhCWzBdKTtyZXR1cm4gZWUu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbih0ZSl7aWYoIVh8fCFPYmplY3Qua2V5cyhYKS5pbmNsdWRlcyh0ZSkpe3ZhciBvZT0hMSxzZT0hMTtpZihCLmZvckVhY2goZnVuY3Rpb24oYil7bnVsbD09PWJbdGVdfHwibnVtYmVyIj09dHlwZW9mIGJbdGVdP29lPSEwOiJzdHJpbmciPT10eXBlb2YgYlt0ZV0m''@;'; put 'put ''JigwLEsuaXNTcGVjaWFsTWlzc2luZykoYlt0ZV0pJiYoc2U9ITApfSksb2UmJnNlKVUucHVzaCgiIi5jb25jYXQodGUsIjpiZXN0LiIpKSxYfHwoWD17fSksWFt0ZV09ImJlc3QuIjtlbHNle3ZhciBoZT1udWxsLHVlPSExLGNlPS0xLEc9Qi5tYXAoZnVuY3Rpb24oYixEKXtpZihiW3RlXXx8''@;'; put 'put ''IiI9PT1iW3RlXSl7aGU/dWV8fChjZT0odWU9KCIiPT09Ylt0ZV18fCJzdHJpbmciPT10eXBlb2YgYlt0ZV0/ImNoYXJzIjoibnVtYmVyIikhPT1oZSk/RCsxOi0xKTpoZT0iIj09PWJbdGVdfHwic3RyaW5nIj09dHlwZW9mIGJbdGVdPyJjaGFycyI6Im51bWJlciI7dmFyIE49dm9pZCAwO3Jl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgYlt0ZV0mJihOPWsoYlt0ZV0pKSxOfX0pLnNvcnQoZnVuY3Rpb24oYixEKXtyZXR1cm4gRC1ifSlbMF07RyYmRz4zMjc2NSYmKHE9ITApLHVlJiZ6LmVycm9yKCJSb3cgKCIuY29uY2F0KGNlLCIpLCBDb2x1bW4gKCIpLmNvbmNhdCh0ZSwiKSBoYXMgbWl4''@;'; put 'put ''ZWQgdHlwZXM6IEVSUk9SIikpLFUucHVzaCgiIi5jb25jYXQodGUsIjoiKS5jb25jYXQoImNoYXJzIj09PWhlPyIkY2hhciI6IiIpLmNvbmNhdChHfHwoImNoYXJzIj09PWhlPyIxIjoiYmVzdCIpLCIuIikpfX19KSxYJiYoVT1VLnNvcnQoZnVuY3Rpb24odGUsb2Upe3JldHVybiBlZS5pbmRl''@;'; put 'put ''eE9mKHRlLnJlcGxhY2UoLzouKi8sIiIpKS1lZS5pbmRleE9mKG9lLnJlcGxhY2UoLzouKi8sIiIpKX0pKSxxPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFk9Qi5tYXAoZnVuY3Rpb24odGUpe3JldHVybiBPYmplY3Qua2V5cyh0ZSkubWFwKGZ1bmN0aW9uKG9lLHNlKXt2YXIgaGUs''@;'; put 'put ''dWU9dGVbb2VdO2lmKCJudW1iZXIiPT10eXBlb2YgdWUpcmV0dXJuIHVlO2lmKGhlPW51bGw9PT11ZT8iIjp1ZSxYJiYiYmVzdC4iPT09WFtvZV0pe2lmKGhlJiYhKDAsSy5pc1NwZWNpYWxNaXNzaW5nKShoZSkpdGhyb3cgbmV3IEVycm9yKCJBIFNwZWNpYWwgbWlzc2luZyB2YWx1ZSBjYW4g''@;'; put 'put ''b25seSBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSAnQScgdG8gJ1onLCAnXycsICcuW2Etel0nLCAnLl8nIik7dmFyIGNlPWhlLmluY2x1ZGVzKCIuIik/IiI6Ii4iO3JldHVybiIiLmNvbmNhdChjZSkuY29uY2F0KGhlLnRvTG93ZXJDYXNlKCkpfXJldHVybiBoZT1oZS5yZXBsYWNlKC8i''@;'; put 'put ''L2csJyIiJyksKGhlPSciJy5jb25jYXQoaGUsJyInKSkuc3Vic3RyaW5nKDEsaGUubGVuZ3RoLTEpLnNlYXJjaCgvKFx0fFxufFxyfCx8XCd8XCIpL2dtKTwwJiYoaGU9aGUuc3Vic3RyaW5nKDEsaGUubGVuZ3RoLTEpKSwiIj09PShoZT1oZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpKSYmVVtz''@;'; put 'put ''ZV0uaW5jbHVkZXMoImJlc3QiKSYmKGhlPSIuIiksaGV9KS5qb2luKCIsIil9KSxVLmpvaW4oIiwiKS5yZXBsYWNlKC8sL2csIiAiKSsiXHJcbiIrWS5qb2luKCJcclxuIikpfSxPLmlzRm9ybWF0c1RhYmxlPWZ1bmN0aW9uKEUpe3JldHVybi9eXCQuKi8udGVzdChFKX07dmFyIGs9ZnVuY3Rp''@;'; put 'put ''b24oRSl7Zm9yKHZhciBqPUUubGVuZ3RoLFY9RS5sZW5ndGgtMTtWPj0wO1YtLSl7dmFyIEI9RS5jaGFyQ29kZUF0KFYpO0I+MTI3JiZCPD0yMDQ3P2orKzpCPjIwNDcmJkI8PTY1NTM1JiYoais9MiksQj49NTYzMjAmJkI8PTU3MzQzJiZWLS19cmV0dXJuIGp9fSw2MTE2OihNLE8sUik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uY3JlYXRlQXhpb3NJbnN0YW5jZT12b2lkIDA7dmFyIHo9Uig5NjY5KTtPLmNyZWF0ZUF4aW9zSW5zdGFuY2U9ZnVuY3Rpb24oSyxJKXtyZXR1cm4gei5kZWZhdWx0LmNyZWF0ZSh7''@;'; put 'put ''YmFzZVVSTDpLLGh0dHBzQWdlbnQ6SX0pfX0sOTgyNTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5kZWxheT12b2lkIDAsTy5kZWxheT1mdW5jdGlvbihSKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24o''@;'; put 'put ''eil7cmV0dXJuIHNldFRpbWVvdXQoeixSKX0pfX0sOTkwOmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oaixWLEIsWSl7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24o''@;'; put 'put ''WCxVKXtmdW5jdGlvbiBxKG9lKXt0cnl7dGUoWS5uZXh0KG9lKSl9Y2F0Y2goc2Upe1Uoc2UpfX1mdW5jdGlvbiBlZShvZSl7dHJ5e3RlKFkudGhyb3cob2UpKX1jYXRjaChzZSl7VShzZSl9fWZ1bmN0aW9uIHRlKG9lKXt2YXIgc2U7b2UuZG9uZT9YKG9lLnZhbHVlKTooc2U9b2UudmFsdWUs''@;'; put 'put ''c2UgaW5zdGFuY2VvZiBCP3NlOm5ldyBCKGZ1bmN0aW9uKGhlKXtoZShzZSl9KSkudGhlbihxLGVlKX10ZSgoWT1ZLmFwcGx5KGosVnx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oaixWKXt2YXIgQixZLFgsVSxxPXtsYWJlbDowLHNlbnQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtpZigxJlhbMF0pdGhyb3cgWFsxXTtyZXR1cm4gWFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBVPXtuZXh0OmVlKDApLHRocm93OmVlKDEpLHJldHVybjplZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB0aGlzfSksVTtmdW5jdGlvbiBlZSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKG9lKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKEI9MSxZJiYoWD0yJnNlWzBdP1ku''@;'; put 'put ''cmV0dXJuOnNlWzBdP1kudGhyb3d8fCgoWD1ZLnJldHVybikmJlguY2FsbChZKSwwKTpZLm5leHQpJiYhKFg9WC5jYWxsKFksc2VbMV0pKS5kb25lKXJldHVybiBYO3N3aXRjaChZPTAsWCYmKHNlPVsyJnNlWzBdLFgudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpYPXNlO2JyZWFrO2Nh''@;'; put 'put ''c2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFk9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChYPShYPXEudHJ5cykubGVuZ3RoPjAm''@;'; put 'put ''JlhbWC5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighWHx8c2VbMV0+WFswXSYmc2VbMV08WFszXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFhbMV0pe3EubGFiZWw9WFsxXSxYPXNlO2Jy''@;'; put 'put ''ZWFrfWlmKFgmJnEubGFiZWw8WFsyXSl7cS5sYWJlbD1YWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVhbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1WLmNhbGwoaixxKX1jYXRjaChoZSl7c2U9WzYsaGVdLFk9MH1maW5hbGx5e0I9WD0wfWlmKDUmc2VbMF0pdGhy''@;'; put 'put ''b3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLG9lXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uZmV0Y2hMb2c9Ty5mZXRjaExvZ0J5Q2h1bmtzPXZvaWQgMDt2YXIgRT1SKDk3NzgpO08u''@;'; put 'put ''ZmV0Y2hMb2dCeUNodW5rcz1mdW5jdGlvbihqLFYsQixZKXtyZXR1cm4gSSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oWCl7c3dpdGNoKFgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxPLmZldGNoTG9nKShqLFYsQiwwLFkpXTtjYXNl''@;'; put 'put ''IDE6cmV0dXJuWzIsWC5zZW50KCldfX0pfSl9LE8uZmV0Y2hMb2c9ZnVuY3Rpb24oaixWLEIsWSxYKXtyZXR1cm4gSSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBVLHEsZWUsdGUsb2U7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNl''@;'; put 'put ''IDA6VT16LmxvZ2dlcnx8SyxxPSIiLGVlPVg8MWU0P1g6MWU0LHNlLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBVLmluZm8oIkZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAiLmNvbmNhdChZKzEsIiB0byAiKS5jb25jYXQoWStlZSwiIG9mICIpLmNvbmNhdChYLCIuIikpLFs0LGouZ2V0KCIi''@;'; put 'put ''LmNvbmNhdChCLCI/c3RhcnQ9IikuY29uY2F0KFksIiZsaW1pdD0iKS5jb25jYXQoZWUpLFYpLnRoZW4oZnVuY3Rpb24oaGUpe3JldHVybiBoZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihoZSl7dGhyb3coMCxFLnByZWZpeE1lc3NhZ2UpKGhlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4g''@;'; put 'put ''Iil9KV07Y2FzZSAyOmlmKDA9PT0odGU9c2Uuc2VudCgpKS5pdGVtcy5sZW5ndGgpcmV0dXJuWzMsNF07b2U9dGUuaXRlbXMubWFwKGZ1bmN0aW9uKGhlKXtyZXR1cm4gaGUubGluZX0pLmpvaW4oIlxuIikscSs9b2UsWSs9ZWUsc2UubGFiZWw9MztjYXNlIDM6aWYoWTxYKXJldHVyblszLDFd''@;'; put 'put ''O3NlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyLHFdfX0pfSl9fSw3MTQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5mb3JtYXREYXRhRm9yUmVxdWVzdD12b2lkIDA7dmFyIHo9UigyNDAyKSxLPVIoNDc5''@;'; put 'put ''OSk7Ty5mb3JtYXREYXRhRm9yUmVxdWVzdD1mdW5jdGlvbihJKXt2YXIgaz1bXSxFPTAsaj17fTtmb3IodmFyIFYgaW4gSSlpZighKDAsei5pc0Zvcm1hdHNUYWJsZSkoVil8fCFPYmplY3Qua2V5cyhJKS5pbmNsdWRlcyhWLnJlcGxhY2UoL15cJC8sIiIpKSl7RSsrLCgwLHouaXNGb3JtYXRz''@;'; put 'put ''VGFibGUpKFYpfHxrLnB1c2goVik7dmFyIEI9KDAsei5jb252ZXJ0VG9DU1YpKEksVik7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PUIpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJz''@;'; put 'put ''LiIpO2lmKEIubGVuZ3RoPjE2ZTMpe3ZhciBZPSgwLEsuc3BsaXRDaHVua3MpKEIpO2pbInNhc2pzIi5jb25jYXQoRSwiZGF0YTAiKV09WS5sZW5ndGgsWS5mb3JFYWNoKGZ1bmN0aW9uKFgsVSl7alsic2FzanMiLmNvbmNhdChFLCJkYXRhIikuY29uY2F0KFUrMSldPVh9KX1lbHNlIGpbInNh''@;'; put 'put ''c2pzIi5jb25jYXQoRSwiZGF0YSIpXT1CfXJldHVybiBqLnNhc2pzX3RhYmxlcz1rLmpvaW4oIiAiKSxqfX0sODQ1ODooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLmdldEZvcm1EYXRhPXZvaWQgMDt2YXIg''@;'; put 'put ''ej1SKDU5MjgpLEs9Uig2MjMwKTtPLmdldEZvcm1EYXRhPWZ1bmN0aW9uKCl7cmV0dXJuKDAsei5pc05vZGUpKCk/bmV3IEs6bmV3IEZvcm1EYXRhfX0sMTg4NDooTSxPLFIpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxP''@;'; put 'put ''LmdldFZhbGlkSnNvbj12b2lkIDA7dmFyIHo9UigxMzk1KTtPLmdldFZhbGlkSnNvbj1mdW5jdGlvbihLKXt0cnl7aWYobnVsbD09Syl0aHJvdyBuZXcgei5JbnZhbGlkSnNvbkVycm9yO2lmKEFycmF5LmlzQXJyYXkoSykpdGhyb3cgbmV3IHouSnNvblBhcnNlQXJyYXlFcnJvcjtyZXR1cm4i''@;'; put 'put ''b2JqZWN0Ij09dHlwZW9mIEs/SzoiIj09PUs/e306SlNPTi5wYXJzZShLKX1jYXRjaChJKXt0aHJvdyBJIGluc3RhbmNlb2Ygei5Kc29uUGFyc2VBcnJheUVycm9yP0k6bmV3IHouSW52YWxpZEpzb25FcnJvcn19fSw1OTI4OmZ1bmN0aW9uKE0sTyxSKXsidXNlIHN0cmljdCI7dmFyIHo9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksayxFLGope3ZvaWQgMD09PWomJihqPUUpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxFKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYuY29u''@;'; put 'put ''ZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbRV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksaixWKX06ZnVuY3Rpb24oSSxrLEUsail7dm9pZCAwPT09aiYmKGo9RSksSVtqXT1rW0VdfSksSz10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8''@;'; put 'put ''ZnVuY3Rpb24oSSxrKXtmb3IodmFyIEUgaW4gSSkiZGVmYXVsdCI9PT1FfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxFKXx8eihrLEksRSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxLKFIoMzMwMiksTyksSyhSKDc5''@;'; put 'put ''MjIpLE8pLEsoUigzNzkzKSxPKSxLKFIoMjQwMiksTyksSyhSKDYxMTYpLE8pLEsoUig5ODI1KSxPKSxLKFIoOTkwKSxPKSxLKFIoMTg4NCksTyksSyhSKDQyNDMpLE8pLEsoUigyNTcpLE8pLEsoUigyKSxPKSxLKFIoMjYxNSksTyksSyhSKDI5MjApLE8pLEsoUigyNDIyKSxPKSxLKFIoMzEp''@;'; put 'put ''LE8pLEsoUig2NTE1KSxPKSxLKFIoNjQxNiksTyksSyhSKDI4MTMpLE8pLEsoUig5ODk2KSxPKSxLKFIoNDc5OSksTyksSyhSKDQ1MTYpLE8pLEsoUig4NDU4KSxPKX0sNDI0MzooTSxPLFIpPT57InVzZSBzdHJpY3QiO3ZhciB6PVIoNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9f''@;'; put 'put ''ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNOb2RlPXZvaWQgMCxPLmlzTm9kZT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT16JiZudWxsIT16LnZlcnNpb25zJiZudWxsIT16LnZlcnNpb25zLm5vZGV9fSwyNTc6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8uaXNSZWxhdGl2ZVBhdGg9dm9pZCAwLE8uaXNSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24oUil7cmV0dXJuISFSJiYhUi5zdGFydHNXaXRoKCIvIil9fSwyOihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxPLmlzVXJpPXZvaWQgMCxPLmlzVXJpPWZ1bmN0aW9uKFIpe3JldHVybi9eXC9mb2xkZXJzXC9mb2xkZXJzXC8vLnRlc3QoUil9fSwyNjE1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KSxPLmlzVXJsPXZvaWQgMCxPLmlzVXJsPWZ1bmN0aW9uKFIpe3RyeXt2YXIgej1uZXcgVVJMKFIpO2lmKCFbImh0dHA6IiwiaHR0cHM6Il0uaW5jbHVkZXMoei5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKE0sTyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBSLFYsej10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixCLFksWCl7cmV0dXJuIG5ldyhZfHwoWT1Qcm9taXNlKSkoZnVuY3Rpb24oVSxxKXtmdW5jdGlvbiBlZShzZSl7dHJ5e29lKFgubmV4dChzZSkpfWNhdGNoKGhlKXtxKGhlKX19ZnVuY3Rpb24gdGUoc2Up''@;'; put 'put ''e3RyeXtvZShYLnRocm93KHNlKSl9Y2F0Y2goaGUpe3EoaGUpfX1mdW5jdGlvbiBvZShzZSl7dmFyIGhlO3NlLmRvbmU/VShzZS52YWx1ZSk6KGhlPXNlLnZhbHVlLGhlIGluc3RhbmNlb2YgWT9oZTpuZXcgWShmdW5jdGlvbih1ZSl7dWUoaGUpfSkpLnRoZW4oZWUsdGUpfW9lKChYPVguYXBw''@;'; put 'put ''bHkoVixCfHxbXSkpLm5leHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLEIpe3ZhciBZLFgsVSxxLGVlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlVbMF0pdGhyb3cgVVsxXTtyZXR1cm4gVVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtu''@;'; put 'put ''ZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShvZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oaGUp''@;'; put 'put ''e2lmKFkpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ZWU7KXRyeXtpZihZPTEsWCYmKFU9MiZoZVswXT9YLnJldHVybjpoZVswXT9YLnRocm93fHwoKFU9WC5yZXR1cm4pJiZVLmNhbGwoWCksMCk6WC5uZXh0KSYmIShVPVUuY2Fs''@;'; put 'put ''bChYLGhlWzFdKSkuZG9uZSlyZXR1cm4gVTtzd2l0Y2goWD0wLFUmJihoZT1bMiZoZVswXSxVLnZhbHVlXSksaGVbMF0pe2Nhc2UgMDpjYXNlIDE6VT1oZTticmVhaztjYXNlIDQ6cmV0dXJuIGVlLmxhYmVsKysse3ZhbHVlOmhlWzFdLGRvbmU6ITF9O2Nhc2UgNTplZS5sYWJlbCsrLFg9aGVb''@;'; put 'put ''MV0saGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpoZT1lZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFU9KFU9ZWUudHJ5cykubGVuZ3RoPjAmJlVbVS5sZW5ndGgtMV0pfHw2IT09aGVbMF0mJjIhPT1oZVswXSkpe2VlPTA7Y29udGludWV9aWYoMz09PWhl''@;'; put 'put ''WzBdJiYoIVV8fGhlWzFdPlVbMF0mJmhlWzFdPFVbM10pKXtlZS5sYWJlbD1oZVsxXTticmVha31pZig2PT09aGVbMF0mJmVlLmxhYmVsPFVbMV0pe2VlLmxhYmVsPVVbMV0sVT1oZTticmVha31pZihVJiZlZS5sYWJlbDxVWzJdKXtlZS5sYWJlbD1VWzJdLGVlLm9wcy5wdXNoKGhlKTticmVh''@;'; put 'put ''a31VWzJdJiZlZS5vcHMucG9wKCksZWUudHJ5cy5wb3AoKTtjb250aW51ZX1oZT1CLmNhbGwoVixlZSl9Y2F0Y2godWUpe2hlPVs2LHVlXSxYPTB9ZmluYWxseXtZPVU9MH1pZig1JmhlWzBdKXRocm93IGhlWzFdO3JldHVybnt2YWx1ZTpoZVswXT9oZVsxXTp2b2lkIDAsZG9uZTohMH19KFtv''@;'; put 'put ''ZSxzZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLm9wZW5Mb2dpblByb21wdD12b2lkIDAsKFY9Unx8KFI9e30pKS5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsVi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixW''@;'; put 'put ''LmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiO3ZhciBJPSJzYXNqcy1hZGFwdGVyIixrPXtwb3BVcDoiIi5jb25jYXQoSSwicG9wVXAiKSxwb3BVcEJHOiIiLmNvbmNhdChJLCJwb3BVcEJHIil9O08ub3BlbkxvZ2luUHJvbXB0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKFYpe3JldHVybiB6KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEIsWSxYLFUscSxlZSx0ZSxvZTtyZXR1cm4gSyh0aGlzLGZ1bmN0aW9uKHNlKXtyZXR1cm4oQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpKS5pZD1SLnN0eWxlcyxCLmlubmVy''@;'; put 'put ''VGV4dD1qLChZPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pZD1SLm92ZXJsYXksWS5jbGFzc0xpc3QuYWRkKGsucG9wVXBCRyksKFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPVIuZGlhbG9nLFguY2xhc3NMaXN0LmFkZChrLnBvcFVwKSwoVT1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJoMSIpKS5pbm5lclRleHQ9IlNlc3Npb24gRXhwaXJlZCEiLFguYXBwZW5kQ2hpbGQoVSkscT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwoZWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4s''@;'; put 'put ''IGNsaWNrIE9LIHRvIGxvZ2luLiIscS5hcHBlbmRDaGlsZChlZSksWC5hcHBlbmRDaGlsZChxKSwodGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlzdC5hZGQoImNhbmNlbCIpLHRlLmlubmVyVGV4dD0iQ2FuY2VsIix0ZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgp''@;'; put 'put ''LFYoITEpfSxYLmFwcGVuZENoaWxkKHRlKSwob2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIikpLmNsYXNzTGlzdC5hZGQoImNvbmZpcm0iKSxvZS5pbm5lclRleHQ9Ik9rIixvZS5vbmNsaWNrPWZ1bmN0aW9uKCl7RSgpLFYoITApfSxYLmFwcGVuZENoaWxkKG9lKSxkb2N1bWVu''@;'; put 'put ''dC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChZKSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFgpLFsyXX0pfSl9KX07dmFyIEU9ZnVuY3Rpb24oKXtPYmplY3QudmFsdWVzKFIpLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oVil7dmFyIEIsWT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChWKTtudWxsPT09KEI9WT8ucGFyZW50Tm9kZSl8fHZvaWQgMD09PUJ8fEIucmVtb3ZlQ2hpbGQoWSl9KSxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJhdXRvIn0saj0iXG4uIi5jb25jYXQoay5w''@;'; put 'put ''b3BVcEJHLCIgLFxuLiIpLmNvbmNhdChrLnBvcFVwLCIge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJv''@;'; put 'put ''cmRlci1ib3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7''@;'; put 'put ''XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztc''@;'; put 'put ''biAgbWF4LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gt''@;'; put 'put ''c2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFu''@;'; put 'put ''c3BhcmVudDtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdp''@;'; put 'put ''bjogMDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3Jk''@;'; put 'put ''ZXItd2lkdGg6IDFweDtcbiAgYm9yZGVyLWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4iKS5jb25jYXQoay5wb3BVcCwiID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJv''@;'; put 'put ''eC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwt''@;'; put 'put ''YWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uIikuY29uY2F0KGsucG9wVXAs''@;'; put 'put ''IiA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjog''@;'; put 'put ''MXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiIpLmNvbmNhdChrLnBvcFVwLCIgPiBidXR0b246aG92''@;'; put 'put ''ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uIikuY29uY2F0KGsucG9wVXBCRywiIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xu''@;'; put 'put ''ICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWltYWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG4iKX0sMjkyMDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5uZWVkc1JldHJ5PXZvaWQgMCxPLm5lZWRzUmV0cnk9ZnVuY3Rpb24oUil7cmV0dXJuISFSJiYoUi5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJlIuaW5jbHVkZXMoIl9jc3JmIikmJlIuaW5jbHVkZXMoIlgtQ1NSRi1U''@;'; put 'put ''T0tFTiIpfHxSLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmUi5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxSLmluY2x1ZGVzKCcic3RhdHVzIjo0NDknKSYmUi5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX19LDI0''@;'; put 'put ''MjI6KE0sTyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE8ucGFyc2VHZW5lcmF0ZWRDb2RlPXZvaWQgMCxPLnBhcnNlR2VuZXJhdGVkQ29kZT1mdW5jdGlvbihSKXtyZXR1cm4gUi5zcGxpdCgiXG4iKS5maWx0ZXIoZnVu''@;'; put 'put ''Y3Rpb24oeil7cmV0dXJuIHoudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIpfSkuam9pbigiXHJcbiIpfX0sMzE6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU2FzVml5''@;'; put 'put ''YUxvZz12b2lkIDAsTy5wYXJzZVNhc1ZpeWFMb2c9ZnVuY3Rpb24oSyl7dmFyIEk7dHJ5e0k9Sy5pdGVtcz9LLml0ZW1zLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gay5saW5lfSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShLKX1jYXRjaChrKXt6LmVycm9yKCJBbiBlcnJvciBoYXMgb2Nj''@;'; put 'put ''dXJyZWQgd2hpbGUgcGFyc2luZyB0aGUgbG9nIHJlc3BvbnNlIixrKSxJPUt9cmV0dXJuIEl9fSw2NTE1OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlU291cmNlQ29kZT12b2lkIDAsTy5wYXJzZVNv''@;'; put 'put ''dXJjZUNvZGU9ZnVuY3Rpb24oUil7cmV0dXJuIFIuc3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKHope3JldHVybiB6LnRyaW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0KCkubWF0Y2goL15cZC8pfSkuam9pbigiXHJcbiIpfX0sNjQxNjpmdW5jdGlvbihNLE8sUil7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciB6PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEUsaixWKXtyZXR1cm4gbmV3KGp8fChqPVByb21pc2UpKShmdW5jdGlvbihCLFkpe2Z1bmN0aW9uIFgoZWUpe3RyeXtxKFYubmV4dChlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gVShlZSl7dHJ5e3EoVi50''@;'; put 'put ''aHJvdyhlZSkpfWNhdGNoKHRlKXtZKHRlKX19ZnVuY3Rpb24gcShlZSl7dmFyIHRlO2VlLmRvbmU/QihlZS52YWx1ZSk6KHRlPWVlLnZhbHVlLHRlIGluc3RhbmNlb2Ygaj90ZTpuZXcgaihmdW5jdGlvbihvZSl7b2UodGUpfSkpLnRoZW4oWCxVKX1xKChWPVYuYXBwbHkoayxFfHxbXSkpLm5l''@;'; put 'put ''eHQoKSl9KX0sSz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEUpe3ZhciBqLFYsQixZLFg9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFk9e25leHQ6VSgwKSx0aHJvdzpV''@;'; put 'put ''KDEpLHJldHVybjpVKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoWVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxZO2Z1bmN0aW9uIFUocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKGopdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7WDspdHJ5e2lmKGo9MSxWJiYoQj0yJnRlWzBdP1YucmV0dXJuOnRlWzBdP1YudGhyb3d8fCgoQj1WLnJldHVybikmJkIuY2FsbChWKSwwKTpWLm5leHQpJiYhKEI9Qi5jYWxsKFYsdGVbMV0pKS5kb25lKXJldHVy''@;'; put 'put ''biBCO3N3aXRjaChWPTAsQiYmKHRlPVsyJnRlWzBdLEIudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpCPXRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWC5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6WC5sYWJlbCsrLFY9dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2Ug''@;'; put 'put ''Nzp0ZT1YLm9wcy5wb3AoKSxYLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVgudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1g9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighQnx8dGVbMV0+QlswXSYmdGVbMV08''@;'; put 'put ''QlszXSkpe1gubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZYLmxhYmVsPEJbMV0pe1gubGFiZWw9QlsxXSxCPXRlO2JyZWFrfWlmKEImJlgubGFiZWw8QlsyXSl7WC5sYWJlbD1CWzJdLFgub3BzLnB1c2godGUpO2JyZWFrfUJbMl0mJlgub3BzLnBvcCgpLFgudHJ5cy5wb3AoKTtj''@;'; put 'put ''b250aW51ZX10ZT1FLmNhbGwoayxYKX1jYXRjaChvZSl7dGU9WzYsb2VdLFY9MH1maW5hbGx5e2o9Qj0wfWlmKDUmdGVbMF0pdGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsZWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksTy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDt2YXIgST1SKDU5MjgpO08ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT1mdW5jdGlvbihrLEUsail7cmV0dXJuIHoodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVixCO3Jl''@;'; put 'put ''dHVybiBLKHRoaXMsZnVuY3Rpb24oWSl7aWYoVj1rLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSwh''@;'; put 'put ''KEI9Vj9WLnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lmcmFtZT4vKVswXTpudWxsKSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm5bMixFLmdldChqK0Isdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihmdW5jdGlvbihYKXtyZXR1cm4o''@;'; put 'put ''MCxJLmdldFZhbGlkSnNvbikoWC5yZXN1bHQpfSldfSl9KX19LDI4MTM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO3ZhciBLPVIo''@;'; put 'put ''MTM5NSk7Ty5wYXJzZVdlYm91dFJlc3BvbnNlPWZ1bmN0aW9uKEksayl7dmFyIEU9IiI7aWYoSS5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e0U9SS5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChqKXtpZihrKXRocm93''@;'; put 'put ''IG5ldyBLLldlYm91dFJlc3BvbnNlRXJyb3Ioayk7RT0iIix6LmVycm9yKGopfXJldHVybiBFfX0sMTE3MDooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7''@;'; put 'put ''dmFyIFI9WyJMb2cgT2ZmIl07Ty5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1mdW5jdGlvbih6KXt2YXIgSz16Py5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pLEk9Sz8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLGs9ST8uaW5kZXhPZigiICIpO3JldHVybiBJPyhSLm1hcChmdW5jdGlvbihF''@;'; put 'put ''KXt2YXIgaj1JPy5pbmRleE9mKEUpfHwtMTtqPi0xJiYoaz1qK0UubGVuZ3RoKX0pLEkuc2xpY2UoaywtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnNlcmlh''@;'; put 'put ''bGl6ZT12b2lkIDAsTy5zZXJpYWxpemU9ZnVuY3Rpb24oUil7dmFyIHo9W107Zm9yKHZhciBLIGluIFIpaWYoUi5oYXNPd25Qcm9wZXJ0eShLKSlpZihSW0tdaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIEk9MCxrPVJbS10ubGVuZ3RoO0k8aztJKyspei5wdXNoKGVuY29kZVVSSUNvbXBvbmVu''@;'; put 'put ''dChLKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFJbS11bSV0pKTtlbHNlIHoucHVzaChlbmNvZGVVUklDb21wb25lbnQoSykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChSW0tdKSk7cmV0dXJuIHouam9pbigiJiIpfX0sNDc5OTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoTywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksTy5zcGxpdENodW5rcz12b2lkIDAsTy5zcGxpdENodW5rcz1mdW5jdGlvbihSKXtmb3IodmFyIHo9MTZlMyxLPU1hdGguY2VpbChSLmxlbmd0aC96KSxJPW5ldyBBcnJheShLKSxrPTAsRT0wO2s8SzsrK2ssRSs9eilJW2tdPVIuc3Vi''@;'; put 'put ''c3RyKEUseik7cmV0dXJuIEl9fSw0NTE2OihNLE8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxPLnZhbGlkYXRlSW5wdXQ9Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1PLk1PUkVfSU5GTz12b2lkIDAsTy5NT1JFX0lO''@;'; put 'put ''Rk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsTy5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT0iUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICIuY29uY2F0KE8uTU9SRV9J''@;'; put 'put ''TkZPKSxPLnZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24oeil7aWYobnVsbD09PXopcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09Uih6KSlyZXR1cm57c3RhdHVzOiExLG1zZzpPLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTt2YXIgSz1mdW5jdGlvbihYKXtyZXR1cm4gWC5t''@;'; put 'put ''YXRjaCgvXlwkLiovKSYmT2JqZWN0LmtleXMoeikuaW5jbHVkZXMoWC5yZXBsYWNlKC9eXCQvLCIiKSl9O2Zvcih2YXIgSSBpbiB6KXtpZighSS5tYXRjaCgvXlthLXpBLVpfXS8pJiYhSyhJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBh''@;'; put 'put ''bHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIUsoSSkpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihJLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1z''@;'; put 'put ''ZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09Uih6W0ldKSYmIUsoSSkpcmV0dXJue3N0YXR1czohMSxtc2c6Ty5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Zm9yKHZhciBrPTAsRT16W0ldO2s8RS5sZW5ndGg7''@;'; put 'put ''aysrKXt2YXIgaj1FW2tdO2lmKCJvYmplY3QiIT09UihqKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgIi5jb25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAiKS5jb25jYXQoTy5NT1JFX0lORk8pfTtmb3IodmFyIFY9MCxCPU9iamVjdC5rZXlzKGopO1Y8Qi5sZW5n''@;'; put 'put ''dGg7VisrKXt2YXIgWT1CW1ZdO2lmKHZvaWQgMD09PWpbWV0pcmV0dXJue3N0YXR1czohMSxtc2c6IkEgcm93IGluIHRhYmxlICIuY29uY2F0KEksIiBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICIpLmNvbmNhdChZLCIuIil9fX19cmV0dXJue3N0''@;'; put 'put ''YXR1czohMCxtc2c6IiJ9fTt2YXIgUj1mdW5jdGlvbih6KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh6KT8iQXJyYXkiOnR5cGVvZiB6fX0sODk4MTooTSxPKT0+eyJ1c2Ugc3RyaWN0IjtPLmZyb21DYWxsYmFjaz1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0''@;'; put 'put ''aW9uKC4uLnope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6W3oubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoSyxJKT0+e1IuY2FsbCh0aGlzLC4uLnosKGssRSk9Pm51bGwhPWs/SShrKTpLKEUpKX0pO1IuYXBwbHkodGhpcyx6KX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX0sTy5mcm9t''@;'; put 'put ''UHJvbWlzZT1mdW5jdGlvbihSKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLnope2NvbnN0IEs9elt6Lmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSylyZXR1cm4gUi5hcHBseSh0aGlzLHopO1IuYXBwbHkodGhpcyx6LnNsaWNlKDAsLTEpKS50aGVu''@;'; put 'put ''KEk9PksobnVsbCxJKSxLKX0sIm5hbWUiLHt2YWx1ZTpSLm5hbWV9KX19LDQ1NjQ6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDc0MTgpLEs9Uig3MTI5KSxJPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIwMmZcdTIwNWZcdTMwMDBc''@;'; put 'put ''dWZlZmZdKy8saz0vW1xuXHJcdF0vZyxFPS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8saj0vOlxkKyQvLFY9L14oW2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksQj0vXlthLXpBLVpdOi87ZnVuY3Rpb24gWShzZSl7cmV0dXJuKHNlfHwiIiku''@;'; put 'put ''dG9TdHJpbmcoKS5yZXBsYWNlKEksIiIpfXZhciBYPVtbIiMiLCJoYXNoIl0sWyI/IiwicXVlcnkiXSxmdW5jdGlvbihzZSxoZSl7cmV0dXJuIGVlKGhlLnByb3RvY29sKT9zZS5yZXBsYWNlKC9cXC9nLCIvIik6c2V9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9z''@;'; put 'put ''dCIsdm9pZCAwLDEsMV0sWy86KFxkKikkLywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0sVT17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIHEoc2Upe3ZhciBoZSx1ZT0odHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PVIuZz9SLmc6dHlwZW9m''@;'; put 'put ''IHNlbGY8InUiP3NlbGY6e30pLmxvY2F0aW9ufHx7fSxjZT17fSxHPXR5cGVvZihzZT1zZXx8dWUpO2lmKCJibG9iOiI9PT1zZS5wcm90b2NvbCljZT1uZXcgb2UodW5lc2NhcGUoc2UucGF0aG5hbWUpLHt9KTtlbHNlIGlmKCJzdHJpbmciPT09Rylmb3IoaGUgaW4gY2U9bmV3IG9lKHNlLHt9''@;'; put 'put ''KSxVKWRlbGV0ZSBjZVtoZV07ZWxzZSBpZigib2JqZWN0Ij09PUcpe2ZvcihoZSBpbiBzZSloZSBpbiBVfHwoY2VbaGVdPXNlW2hlXSk7dm9pZCAwPT09Y2Uuc2xhc2hlcyYmKGNlLnNsYXNoZXM9RS50ZXN0KHNlLmhyZWYpKX1yZXR1cm4gY2V9ZnVuY3Rpb24gZWUoc2Upe3JldHVybiJmaWxl''@;'; put 'put ''OiI9PT1zZXx8ImZ0cDoiPT09c2V8fCJodHRwOiI9PT1zZXx8Imh0dHBzOiI9PT1zZXx8IndzOiI9PT1zZXx8IndzczoiPT09c2V9ZnVuY3Rpb24gdGUoc2UsaGUpe3NlPShzZT1ZKHNlKSkucmVwbGFjZShrLCIiKSxoZT1oZXx8e307dmFyIHVlLGNlPVYuZXhlYyhzZSksRz1jZVsxXT9jZVsx''@;'; put 'put ''XS50b0xvd2VyQ2FzZSgpOiIiLGI9ISFjZVsyXSxEPSEhY2VbM10sSD0wO3JldHVybiBiP0Q/KHVlPWNlWzJdK2NlWzNdK2NlWzRdLEg9Y2VbMl0ubGVuZ3RoK2NlWzNdLmxlbmd0aCk6KHVlPWNlWzJdK2NlWzRdLEg9Y2VbMl0ubGVuZ3RoKTpEPyh1ZT1jZVszXStjZVs0XSxIPWNlWzNdLmxl''@;'; put 'put ''bmd0aCk6dWU9Y2VbNF0sImZpbGU6Ij09PUc/SD49MiYmKHVlPXVlLnNsaWNlKDIpKTplZShHKT91ZT1jZVs0XTpHP2ImJih1ZT11ZS5zbGljZSgyKSk6SD49MiYmZWUoaGUucHJvdG9jb2wpJiYodWU9Y2VbNF0pLHtwcm90b2NvbDpHLHNsYXNoZXM6Ynx8ZWUoRyksc2xhc2hlc0NvdW50Okgs''@;'; put 'put ''cmVzdDp1ZX19ZnVuY3Rpb24gb2Uoc2UsaGUsdWUpe2lmKHNlPShzZT1ZKHNlKSkucmVwbGFjZShrLCIiKSwhKHRoaXMgaW5zdGFuY2VvZiBvZSkpcmV0dXJuIG5ldyBvZShzZSxoZSx1ZSk7dmFyIGNlLEcsYixELEgsTixnPVguc2xpY2UoKSxDPXR5cGVvZiBoZSxTPXRoaXMsdj0wO2Zvcigi''@;'; put 'put ''b2JqZWN0IiE9PUMmJiJzdHJpbmciIT09QyYmKHVlPWhlLGhlPW51bGwpLHVlJiYiZnVuY3Rpb24iIT10eXBlb2YgdWUmJih1ZT1LLnBhcnNlKSxjZT0hKEc9dGUoc2V8fCIiLGhlPXEoaGUpKSkucHJvdG9jb2wmJiFHLnNsYXNoZXMsUy5zbGFzaGVzPUcuc2xhc2hlc3x8Y2UmJmhlLnNsYXNo''@;'; put 'put ''ZXMsUy5wcm90b2NvbD1HLnByb3RvY29sfHxoZS5wcm90b2NvbHx8IiIsc2U9Ry5yZXN0LCgiZmlsZToiPT09Ry5wcm90b2NvbCYmKDIhPT1HLnNsYXNoZXNDb3VudHx8Qi50ZXN0KHNlKSl8fCFHLnNsYXNoZXMmJihHLnByb3RvY29sfHxHLnNsYXNoZXNDb3VudDwyfHwhZWUoUy5wcm90b2Nv''@;'; put 'put ''bCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7djxnLmxlbmd0aDt2KyspImZ1bmN0aW9uIiE9dHlwZW9mKEQ9Z1t2XSk/KE49RFsxXSwoYj1EWzBdKSE9Yj9TW05dPXNlOiJzdHJpbmciPT10eXBlb2YgYj9+KEg9IkAiPT09Yj9zZS5sYXN0SW5kZXhPZihiKTpzZS5pbmRleE9mKGIp''@;'; put 'put ''KSYmKCJudW1iZXIiPT10eXBlb2YgRFsyXT8oU1tOXT1zZS5zbGljZSgwLEgpLHNlPXNlLnNsaWNlKEgrRFsyXSkpOihTW05dPXNlLnNsaWNlKEgpLHNlPXNlLnNsaWNlKDAsSCkpKTooSD1iLmV4ZWMoc2UpKSYmKFNbTl09SFsxXSxzZT1zZS5zbGljZSgwLEguaW5kZXgpKSxTW05dPVNbTl18''@;'; put 'put ''fGNlJiZEWzNdJiZoZVtOXXx8IiIsRFs0XSYmKFNbTl09U1tOXS50b0xvd2VyQ2FzZSgpKSk6c2U9RChzZSxTKTt1ZSYmKFMucXVlcnk9dWUoUy5xdWVyeSkpLGNlJiZoZS5zbGFzaGVzJiYiLyIhPT1TLnBhdGhuYW1lLmNoYXJBdCgwKSYmKCIiIT09Uy5wYXRobmFtZXx8IiIhPT1oZS5wYXRo''@;'; put 'put ''bmFtZSkmJihTLnBhdGhuYW1lPWZ1bmN0aW9uKHAsdyl7aWYoIiI9PT1wKXJldHVybiB3O2Zvcih2YXIgSj0od3x8Ii8iKS5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChwLnNwbGl0KCIvIikpLG5lPUoubGVuZ3RoLGRlPUpbbmUtMV0sZmU9ITEseGU9MDtuZS0tOykiLiI9PT1KW25l''@;'; put 'put ''XT9KLnNwbGljZShuZSwxKToiLi4iPT09SltuZV0/KEouc3BsaWNlKG5lLDEpLHhlKyspOnhlJiYoMD09PW5lJiYoZmU9ITApLEouc3BsaWNlKG5lLDEpLHhlLS0pO3JldHVybiBmZSYmSi51bnNoaWZ0KCIiKSwiLiIhPT1kZSYmIi4uIiE9PWRlfHxKLnB1c2goIiIpLEouam9pbigiLyIpfShT''@;'; put 'put ''LnBhdGhuYW1lLGhlLnBhdGhuYW1lKSksIi8iIT09Uy5wYXRobmFtZS5jaGFyQXQoMCkmJmVlKFMucHJvdG9jb2wpJiYoUy5wYXRobmFtZT0iLyIrUy5wYXRobmFtZSkseihTLnBvcnQsUy5wcm90b2NvbCl8fChTLmhvc3Q9Uy5ob3N0bmFtZSxTLnBvcnQ9IiIpLFMudXNlcm5hbWU9Uy5wYXNz''@;'; put 'put ''d29yZD0iIixTLmF1dGgmJih+KEg9Uy5hdXRoLmluZGV4T2YoIjoiKSk/KFMudXNlcm5hbWU9Uy5hdXRoLnNsaWNlKDAsSCksUy51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KFMudXNlcm5hbWUpKSxTLnBhc3N3b3JkPVMuYXV0aC5zbGljZShIKzEpLFMu''@;'; put 'put ''cGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChTLnBhc3N3b3JkKSkpOlMudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChTLmF1dGgpKSxTLmF1dGg9Uy5wYXNzd29yZD9TLnVzZXJuYW1lKyI6IitTLnBhc3N3b3JkOlMu''@;'; put 'put ''dXNlcm5hbWUpLFMub3JpZ2luPSJmaWxlOiIhPT1TLnByb3RvY29sJiZlZShTLnByb3RvY29sKSYmUy5ob3N0P1MucHJvdG9jb2wrIi8vIitTLmhvc3Q6Im51bGwiLFMuaHJlZj1TLnRvU3RyaW5nKCl9b2UucHJvdG90eXBlPXtzZXQ6ZnVuY3Rpb24oc2UsaGUsdWUpe3ZhciBjZT10aGlzO3N3''@;'; put 'put ''aXRjaChzZSl7Y2FzZSJxdWVyeSI6InN0cmluZyI9PXR5cGVvZiBoZSYmaGUubGVuZ3RoJiYoaGU9KHVlfHxLLnBhcnNlKShoZSkpLGNlW3NlXT1oZTticmVhaztjYXNlInBvcnQiOmNlW3NlXT1oZSx6KGhlLGNlLnByb3RvY29sKT9oZSYmKGNlLmhvc3Q9Y2UuaG9zdG5hbWUrIjoiK2hlKToo''@;'; put 'put ''Y2UuaG9zdD1jZS5ob3N0bmFtZSxjZVtzZV09IiIpO2JyZWFrO2Nhc2UiaG9zdG5hbWUiOmNlW3NlXT1oZSxjZS5wb3J0JiYoaGUrPSI6IitjZS5wb3J0KSxjZS5ob3N0PWhlO2JyZWFrO2Nhc2UiaG9zdCI6Y2Vbc2VdPWhlLGoudGVzdChoZSk/KGhlPWhlLnNwbGl0KCI6IiksY2UucG9ydD1o''@;'; put 'put ''ZS5wb3AoKSxjZS5ob3N0bmFtZT1oZS5qb2luKCI6IikpOihjZS5ob3N0bmFtZT1oZSxjZS5wb3J0PSIiKTticmVhaztjYXNlInByb3RvY29sIjpjZS5wcm90b2NvbD1oZS50b0xvd2VyQ2FzZSgpLGNlLnNsYXNoZXM9IXVlO2JyZWFrO2Nhc2UicGF0aG5hbWUiOmNhc2UiaGFzaCI6aWYoaGUp''@;'; put 'put ''e3ZhciBHPSJwYXRobmFtZSI9PT1zZT8iLyI6IiMiO2NlW3NlXT1oZS5jaGFyQXQoMCkhPT1HP0craGU6aGV9ZWxzZSBjZVtzZV09aGU7YnJlYWs7Y2FzZSJ1c2VybmFtZSI6Y2FzZSJwYXNzd29yZCI6Y2Vbc2VdPWVuY29kZVVSSUNvbXBvbmVudChoZSk7YnJlYWs7Y2FzZSJhdXRoIjp2YXIg''@;'; put 'put ''Yj1oZS5pbmRleE9mKCI6Iik7fmI/KGNlLnVzZXJuYW1lPWhlLnNsaWNlKDAsYiksY2UudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChjZS51c2VybmFtZSkpLGNlLnBhc3N3b3JkPWhlLnNsaWNlKGIrMSksY2UucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9u''@;'; put 'put ''ZW50KGRlY29kZVVSSUNvbXBvbmVudChjZS5wYXNzd29yZCkpKTpjZS51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGhlKSl9Zm9yKHZhciBEPTA7RDxYLmxlbmd0aDtEKyspe3ZhciBIPVhbRF07SFs0XSYmKGNlW0hbMV1dPWNlW0hbMV1dLnRvTG93ZXJD''@;'; put 'put ''YXNlKCkpfXJldHVybiBjZS5hdXRoPWNlLnBhc3N3b3JkP2NlLnVzZXJuYW1lKyI6IitjZS5wYXNzd29yZDpjZS51c2VybmFtZSxjZS5vcmlnaW49ImZpbGU6IiE9PWNlLnByb3RvY29sJiZlZShjZS5wcm90b2NvbCkmJmNlLmhvc3Q/Y2UucHJvdG9jb2wrIi8vIitjZS5ob3N0OiJudWxsIixj''@;'; put 'put ''ZS5ocmVmPWNlLnRvU3RyaW5nKCksY2V9LHRvU3RyaW5nOmZ1bmN0aW9uKHNlKXtzZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwoc2U9Sy5zdHJpbmdpZnkpO3ZhciBoZSx1ZT10aGlzLGNlPXVlLmhvc3QsRz11ZS5wcm90b2NvbDtHJiYiOiIhPT1HLmNoYXJBdChHLmxlbmd0aC0xKSYmKEcr''@;'; put 'put ''PSI6Iik7dmFyIGI9RysodWUucHJvdG9jb2wmJnVlLnNsYXNoZXN8fGVlKHVlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gdWUudXNlcm5hbWU/KGIrPXVlLnVzZXJuYW1lLHVlLnBhc3N3b3JkJiYoYis9IjoiK3VlLnBhc3N3b3JkKSxiKz0iQCIpOnVlLnBhc3N3b3JkPyhiKz0iOiIrdWUu''@;'; put 'put ''cGFzc3dvcmQsYis9IkAiKToiZmlsZToiIT09dWUucHJvdG9jb2wmJmVlKHVlLnByb3RvY29sKSYmIWNlJiYiLyIhPT11ZS5wYXRobmFtZSYmKGIrPSJAIiksKCI6Ij09PWNlW2NlLmxlbmd0aC0xXXx8ai50ZXN0KHVlLmhvc3RuYW1lKSYmIXVlLnBvcnQpJiYoY2UrPSI6IiksYis9Y2UrdWUu''@;'; put 'put ''cGF0aG5hbWUsKGhlPSJvYmplY3QiPT10eXBlb2YgdWUucXVlcnk/c2UodWUucXVlcnkpOnVlLnF1ZXJ5KSYmKGIrPSI/IiE9PWhlLmNoYXJBdCgwKT8iPyIraGU6aGUpLHVlLmhhc2gmJihiKz11ZS5oYXNoKSxifX0sb2UuZXh0cmFjdFByb3RvY29sPXRlLG9lLmxvY2F0aW9uPXEsb2UudHJp''@;'; put 'put ''bUxlZnQ9WSxvZS5xcz1LLE0uZXhwb3J0cz1vZX0sNDkyNzooTSxPLFIpPT57dmFyIHo9Uig1MTA4KTtmdW5jdGlvbiBLKEkpe3RyeXtpZighUi5nLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgaz1SLmcubG9jYWxTdG9yYWdlW0ldO3JldHVybiBudWxsIT1rJiYi''@;'; put 'put ''dHJ1ZSI9PT1TdHJpbmcoaykudG9Mb3dlckNhc2UoKX1NLmV4cG9ydHM9ZnVuY3Rpb24oSSxrKXtpZihLKCJub0RlcHJlY2F0aW9uIikpcmV0dXJuIEk7dmFyIEU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUUpe2lmKEsoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Ioayk7''@;'; put 'put ''SygidHJhY2VEZXByZWNhdGlvbiIpP3oudHJhY2Uoayk6ei53YXJuKGspLEU9ITB9cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LDM4NDpNPT57TS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiBPJiYib2JqZWN0Ij09dHlwZW9mIE8mJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNv''@;'; put 'put ''cHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBPLnJlYWRVSW50OH19LDU5NTU6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDI1ODQpLEs9Uig4NjYyKSxJPVIoNjQzMCksaz1SKDU2OTIpO2Z1bmN0aW9uIEUoSil7cmV0dXJuIEouY2FsbC5i''@;'; put 'put ''aW5kKEopfXZhciBqPXR5cGVvZiBCaWdJbnQ8InUiLFY9dHlwZW9mIFN5bWJvbDwidSIsQj1FKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpLFk9RShOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLFg9RShTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLFU9RShCb29sZWFuLnByb3RvdHlwZS52''@;'; put 'put ''YWx1ZU9mKTtpZihqKXZhciBxPUUoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihWKXZhciBlZT1FKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gdGUoSixuZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO3RyeXtyZXR1cm4gbmUoSiksITB9Y2F0Y2h7cmV0''@;'; put 'put ''dXJuITF9fWZ1bmN0aW9uIG9lKEope3JldHVybiJbb2JqZWN0IE1hcF0iPT09QihKKX1mdW5jdGlvbiBzZShKKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PUIoSil9ZnVuY3Rpb24gaGUoSil7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09QihKKX1mdW5jdGlvbiB1ZShKKXtyZXR1cm4iW29i''@;'; put 'put ''amVjdCBXZWFrU2V0XSI9PT1CKEopfWZ1bmN0aW9uIGNlKEope3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1CKEopfWZ1bmN0aW9uIEcoSil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihjZS53b3JraW5nP2NlKEopOkogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVu''@;'; put 'put ''Y3Rpb24gYihKKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09QihKKX1mdW5jdGlvbiBEKEope3JldHVybiB0eXBlb2YgRGF0YVZpZXc8InUiJiYoYi53b3JraW5nP2IoSik6SiBpbnN0YW5jZW9mIERhdGFWaWV3KX1PLmlzQXJndW1lbnRzT2JqZWN0PXosTy5pc0dlbmVyYXRvckZ1bmN0''@;'; put 'put ''aW9uPUssTy5pc1R5cGVkQXJyYXk9ayxPLmlzUHJvbWlzZT1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZKIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PUomJiJvYmplY3QiPT10eXBlb2YgSiYmImZ1bmN0aW9uIj09dHlwZW9mIEoudGhlbiYmImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIEouY2F0Y2h9LE8uaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoSik6ayhKKXx8RChKKX0sTy5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJu''@;'; put 'put ''IlVpbnQ4QXJyYXkiPT09SShKKX0sTy5pc1VpbnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT1JKEopfSxPLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIlVpbnQxNkFycmF5Ij09PUkoSil9LE8uaXNVaW50MzJBcnJheT1mdW5j''@;'; put 'put ''dGlvbihKKXtyZXR1cm4iVWludDMyQXJyYXkiPT09SShKKX0sTy5pc0ludDhBcnJheT1mdW5jdGlvbihKKXtyZXR1cm4iSW50OEFycmF5Ij09PUkoSil9LE8uaXNJbnQxNkFycmF5PWZ1bmN0aW9uKEope3JldHVybiJJbnQxNkFycmF5Ij09PUkoSil9LE8uaXNJbnQzMkFycmF5PWZ1bmN0aW9u''@;'; put 'put ''KEope3JldHVybiJJbnQzMkFycmF5Ij09PUkoSil9LE8uaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24oSil7cmV0dXJuIkZsb2F0MzJBcnJheSI9PT1JKEopfSxPLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJGbG9hdDY0QXJyYXkiPT09SShKKX0sTy5pc0JpZ0ludDY0QXJyYXk9''@;'; put 'put ''ZnVuY3Rpb24oSil7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09SShKKX0sTy5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uKEope3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1JKEopfSxvZS53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZvZShuZXcgTWFwKSxPLmlzTWFwPWZ1bmN0aW9uKEope3Jl''@;'; put 'put ''dHVybiB0eXBlb2YgTWFwPCJ1IiYmKG9lLndvcmtpbmc/b2UoSik6SiBpbnN0YW5jZW9mIE1hcCl9LHNlLndvcmtpbmc9dHlwZW9mIFNldDwidSImJnNlKG5ldyBTZXQpLE8uaXNTZXQ9ZnVuY3Rpb24oSil7cmV0dXJuIHR5cGVvZiBTZXQ8InUiJiYoc2Uud29ya2luZz9zZShKKTpKIGluc3Rh''@;'; put 'put ''bmNlb2YgU2V0KX0saGUud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJmhlKG5ldyBXZWFrTWFwKSxPLmlzV2Vha01hcD1mdW5jdGlvbihKKXtyZXR1cm4gdHlwZW9mIFdlYWtNYXA8InUiJiYoaGUud29ya2luZz9oZShKKTpKIGluc3RhbmNlb2YgV2Vha01hcCl9LHVlLndvcmtpbmc9dHlw''@;'; put 'put ''ZW9mIFdlYWtTZXQ8InUiJiZ1ZShuZXcgV2Vha1NldCksTy5pc1dlYWtTZXQ9ZnVuY3Rpb24oSil7cmV0dXJuIHVlKEopfSxjZS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmNlKG5ldyBBcnJheUJ1ZmZlciksTy5pc0FycmF5QnVmZmVyPUcsYi53b3JraW5nPXR5cGVvZiBBcnJh''@;'; put 'put ''eUJ1ZmZlcjwidSImJnR5cGVvZiBEYXRhVmlldzwidSImJmIobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxPLmlzRGF0YVZpZXc9RDt2YXIgSD10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFycmF5QnVmZmVyOnZvaWQgMDtmdW5jdGlvbiBOKEope3Jl''@;'; put 'put ''dHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1CKEopfWZ1bmN0aW9uIGcoSil7cmV0dXJuIHZvaWQgMCE9PUgmJih2b2lkIDA9PT1OLndvcmtpbmcmJihOLndvcmtpbmc9TihuZXcgSCkpLE4ud29ya2luZz9OKEopOkogaW5zdGFuY2VvZiBIKX1mdW5jdGlvbiBDKEope3JldHVy''@;'; put 'put ''biB0ZShKLFkpfWZ1bmN0aW9uIFMoSil7cmV0dXJuIHRlKEosWCl9ZnVuY3Rpb24gdihKKXtyZXR1cm4gdGUoSixVKX1mdW5jdGlvbiBwKEope3JldHVybiBqJiZ0ZShKLHEpfWZ1bmN0aW9uIHcoSil7cmV0dXJuIFYmJnRlKEosZWUpfU8uaXNTaGFyZWRBcnJheUJ1ZmZlcj1nLE8uaXNBc3lu''@;'; put 'put ''Y0Z1bmN0aW9uPWZ1bmN0aW9uKEope3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PUIoSil9LE8uaXNNYXBJdGVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBNYXAgSXRlcmF0b3JdIj09PUIoSil9LE8uaXNTZXRJdGVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4iW29i''@;'; put 'put ''amVjdCBTZXQgSXRlcmF0b3JdIj09PUIoSil9LE8uaXNHZW5lcmF0b3JPYmplY3Q9ZnVuY3Rpb24oSil7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSI9PT1CKEopfSxPLmlzV2ViQXNzZW1ibHlDb21waWxlZE1vZHVsZT1mdW5jdGlvbihKKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5N''@;'; put 'put ''b2R1bGVdIj09PUIoSil9LE8uaXNOdW1iZXJPYmplY3Q9QyxPLmlzU3RyaW5nT2JqZWN0PVMsTy5pc0Jvb2xlYW5PYmplY3Q9dixPLmlzQmlnSW50T2JqZWN0PXAsTy5pc1N5bWJvbE9iamVjdD13LE8uaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbihKKXtyZXR1cm4gQyhKKXx8UyhKKXx8dihK''@;'; put 'put ''KXx8cChKKXx8dyhKKX0sTy5pc0FueUFycmF5QnVmZmVyPWZ1bmN0aW9uKEope3JldHVybiB0eXBlb2YgVWludDhBcnJheTwidSImJihHKEopfHxnKEopKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihKKXtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoTyxKLHtlbnVtZXJhYmxlOiExLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEorIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOTooTSxPLFIpPT57dmFyIHo9Uig0MTU1KSxLPVIoNTEwOCksST1PYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24oSil7Zm9yKHZhciBuZT1PYmplY3Qua2V5cyhKKSxkZT17fSxmZT0wO2ZlPG5lLmxlbmd0aDtmZSsrKWRlW25lW2ZlXV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKLG5lW2ZlXSk7cmV0dXJuIGRlfSxrPS8lW3NkaiVdL2c7''@;'; put 'put ''Ty5mb3JtYXQ9ZnVuY3Rpb24oSil7aWYoIXVlKEopKXtmb3IodmFyIG5lPVtdLGRlPTA7ZGU8YXJndW1lbnRzLmxlbmd0aDtkZSsrKW5lLnB1c2goQihhcmd1bWVudHNbZGVdKSk7cmV0dXJuIG5lLmpvaW4oIiAiKX1kZT0xO2Zvcih2YXIgZmU9YXJndW1lbnRzLHhlPWZlLmxlbmd0aCxMZT1T''@;'; put 'put ''dHJpbmcoSikucmVwbGFjZShrLGZ1bmN0aW9uKE9lKXtpZigiJSUiPT09T2UpcmV0dXJuIiUiO2lmKGRlPj14ZSlyZXR1cm4gT2U7c3dpdGNoKE9lKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKGZlW2RlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKGZlW2RlKytdKTtjYXNlIiVqIjp0cnl7''@;'; put 'put ''cmV0dXJuIEpTT04uc3RyaW5naWZ5KGZlW2RlKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gT2V9fSksRmU9ZmVbZGVdO2RlPHhlO0ZlPWZlWysrZGVdKXNlKEZlKXx8IWIoRmUpP0xlKz0iICIrRmU6TGUrPSIgIitCKEZlKTtyZXR1cm4gTGV9LE8uZGVwcmVj''@;'; put 'put ''YXRlPWZ1bmN0aW9uKEosbmUpe2lmKHZvaWQgMCE9PXomJiEwPT09ei5ub0RlcHJlY2F0aW9uKXJldHVybiBKO2lmKHZvaWQgMD09PXopcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE8uZGVwcmVjYXRlKEosbmUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07dmFyIGRlPSExO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbigpe2lmKCFkZSl7aWYoei50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihuZSk7ei50cmFjZURlcHJlY2F0aW9uP0sudHJhY2UobmUpOksuZXJyb3IobmUpLGRlPSEwfXJldHVybiBKLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciBFPXt9LGo9L14kLztpZih6LmVudi5O''@;'; put 'put ''T0RFX0RFQlVHKXt2YXIgVj16LmVudi5OT0RFX0RFQlVHO1Y9Vi5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksaj1uZXcgUmVnRXhwKCJeIitWKyIkIiwiaSIpfWZ1bmN0aW9u''@;'; put 'put ''IEIoSixuZSl7dmFyIGRlPXtzZWVuOltdLHN0eWxpemU6WH07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihkZS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihkZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxvZShuZSk/ZGUuc2hvd0hpZGRlbj1uZTpuZSYmTy5f''@;'; put 'put ''ZXh0ZW5kKGRlLG5lKSxjZShkZS5zaG93SGlkZGVuKSYmKGRlLnNob3dIaWRkZW49ITEpLGNlKGRlLmRlcHRoKSYmKGRlLmRlcHRoPTIpLGNlKGRlLmNvbG9ycykmJihkZS5jb2xvcnM9ITEpLGNlKGRlLmN1c3RvbUluc3BlY3QpJiYoZGUuY3VzdG9tSW5zcGVjdD0hMCksZGUuY29sb3JzJiYo''@;'; put 'put ''ZGUuc3R5bGl6ZT1ZKSxVKGRlLEosZGUuZGVwdGgpfWZ1bmN0aW9uIFkoSixuZSl7dmFyIGRlPUIuc3R5bGVzW25lXTtyZXR1cm4gZGU/Ilx4MWJbIitCLmNvbG9yc1tkZV1bMF0rIm0iK0orIlx4MWJbIitCLmNvbG9yc1tkZV1bMV0rIm0iOkp9ZnVuY3Rpb24gWChKLG5lKXtyZXR1cm4gSn1m''@;'; put 'put ''dW5jdGlvbiBVKEosbmUsZGUpe2lmKEouY3VzdG9tSW5zcGVjdCYmbmUmJk4obmUuaW5zcGVjdCkmJm5lLmluc3BlY3QhPT1PLmluc3BlY3QmJighbmUuY29uc3RydWN0b3J8fG5lLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW5lKSl7dmFyIGZlPW5lLmluc3BlY3QoZGUsSik7cmV0dXJuIHVl''@;'; put 'put ''KGZlKXx8KGZlPVUoSixmZSxkZSkpLGZlfXZhciB4ZT1mdW5jdGlvbihKZSxsdCl7aWYoY2UobHQpKXJldHVybiBKZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih1ZShsdCkpe3ZhciBQZT0iJyIrSlNPTi5zdHJpbmdpZnkobHQpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJl''@;'; put 'put ''cGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIEplLnN0eWxpemUoUGUsInN0cmluZyIpfXJldHVybiBoZShsdCk/SmUuc3R5bGl6ZSgiIitsdCwibnVtYmVyIik6b2UobHQpP0plLnN0eWxpemUoIiIrbHQsImJvb2xlYW4iKTpzZShsdCk/SmUuc3R5bGl6''@;'; put 'put ''ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KEosbmUpO2lmKHhlKXJldHVybiB4ZTt2YXIgbHQsTGU9T2JqZWN0LmtleXMobmUpLEZlPShsdD17fSxMZS5mb3JFYWNoKGZ1bmN0aW9uKFBlLGJlKXtsdFtQZV09ITB9KSxsdCk7aWYoSi5zaG93SGlkZGVuJiYoTGU9T2JqZWN0LmdldE93blByb3Bl''@;'; put 'put ''cnR5TmFtZXMobmUpKSxIKG5lKSYmKExlLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8TGUuaW5kZXhPZigiZGVzY3JpcHRpb24iKT49MCkpcmV0dXJuIHEobmUpO2lmKDA9PT1MZS5sZW5ndGgpe2lmKE4obmUpKXJldHVybiBKLnN0eWxpemUoIltGdW5jdGlvbiIrKG5lLm5hbWU/IjogIituZS5u''@;'; put 'put ''YW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihHKG5lKSlyZXR1cm4gSi5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZSksInJlZ2V4cCIpO2lmKEQobmUpKXJldHVybiBKLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZSksImRhdGUiKTtpZihI''@;'; put 'put ''KG5lKSlyZXR1cm4gcShuZSl9dmFyIGplLFdlPSIiLEtlPSExLFllPVsieyIsIn0iXTtyZXR1cm4gdGUobmUpJiYoS2U9ITAsWWU9WyJbIiwiXSJdKSxOKG5lKSYmKFdlPSIgW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25lLm5hbWU6IiIpKyJdIiksRyhuZSkmJihXZT0iICIrUmVnRXhwLnBy''@;'; put 'put ''b3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSksRChuZSkmJihXZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChuZSkpLEgobmUpJiYoV2U9IiAiK3EobmUpKSwwIT09TGUubGVuZ3RofHxLZSYmMCE9bmUubGVuZ3RoP2RlPDA/RyhuZSk/Si5zdHlsaXplKFJlZ0V4cC5wcm90''@;'; put 'put ''b3R5cGUudG9TdHJpbmcuY2FsbChuZSksInJlZ2V4cCIpOkouc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KEouc2Vlbi5wdXNoKG5lKSxqZT1LZT9mdW5jdGlvbihKZSxsdCxQZSxiZSxBZSl7Zm9yKHZhciBUZT1bXSxxZT0wLFhlPWx0Lmxlbmd0aDtxZTxYZTsrK3FlKXYobHQsU3Ry''@;'; put 'put ''aW5nKHFlKSk/VGUucHVzaChlZShKZSxsdCxQZSxiZSxTdHJpbmcocWUpLCEwKSk6VGUucHVzaCgiIik7cmV0dXJuIEFlLmZvckVhY2goZnVuY3Rpb24oVWUpe1VlLm1hdGNoKC9eXGQrJC8pfHxUZS5wdXNoKGVlKEplLGx0LFBlLGJlLFVlLCEwKSl9KSxUZX0oSixuZSxkZSxGZSxMZSk6TGUu''@;'; put 'put ''bWFwKGZ1bmN0aW9uKEplKXtyZXR1cm4gZWUoSixuZSxkZSxGZSxKZSxLZSl9KSxKLnNlZW4ucG9wKCksZnVuY3Rpb24oSmUsbHQsUGUpe3JldHVybiBKZS5yZWR1Y2UoZnVuY3Rpb24oQWUsVGUpe3JldHVybiBUZS5pbmRleE9mKCJcbiIpLEFlK1RlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9t''@;'; put 'put ''L2csIiIpLmxlbmd0aCsxfSwwKT42MD9QZVswXSsoIiI9PT1sdD8iIjpsdCsiXG4gIikrIiAiK0plLmpvaW4oIixcbiAgIikrIiAiK1BlWzFdOlBlWzBdK2x0KyIgIitKZS5qb2luKCIsICIpKyIgIitQZVsxXX0oamUsV2UsWWUpKTpZZVswXStXZStZZVsxXX1mdW5jdGlvbiBxKEope3JldHVy''@;'; put 'put ''biJbIitFcnJvci5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChKKSsiXSJ9ZnVuY3Rpb24gZWUoSixuZSxkZSxmZSx4ZSxMZSl7dmFyIEZlLE9lLGplO2lmKChqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5lLHhlKXx8e3ZhbHVlOm5lW3hlXX0pLmdldD9PZT1KLnN0eWxpemUo''@;'; put 'put ''amUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpqZS5zZXQmJihPZT1KLnN0eWxpemUoIltTZXR0ZXJdIiwic3BlY2lhbCIpKSx2KGZlLHhlKXx8KEZlPSJbIit4ZSsiXSIpLE9lfHwoSi5zZWVuLmluZGV4T2YoamUudmFsdWUpPDA/KE9lPXNlKGRlKT9VKEos''@;'; put 'put ''amUudmFsdWUsbnVsbCk6VShKLGplLnZhbHVlLGRlLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoT2U9TGU/T2Uuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFdlKXtyZXR1cm4iICAiK1dlfSkuam9pbigiXG4iKS5zbGljZSgyKToiXG4iK09lLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihXZSl7''@;'; put 'put ''cmV0dXJuIiAgICIrV2V9KS5qb2luKCJcbiIpKTpPZT1KLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLGNlKEZlKSl7aWYoTGUmJnhlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBPZTsoRmU9SlNPTi5zdHJpbmdpZnkoIiIreGUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8w''@;'; put 'put ''LTldKikiJC8pPyhGZT1GZS5zbGljZSgxLC0xKSxGZT1KLnN0eWxpemUoRmUsIm5hbWUiKSk6KEZlPUZlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIiciKSxGZT1KLnN0eWxpemUoRmUsInN0cmluZyIpKX1yZXR1cm4gRmUrIjog''@;'; put 'put ''IitPZX1mdW5jdGlvbiB0ZShKKXtyZXR1cm4gQXJyYXkuaXNBcnJheShKKX1mdW5jdGlvbiBvZShKKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBKfWZ1bmN0aW9uIHNlKEope3JldHVybiBudWxsPT09Sn1mdW5jdGlvbiBoZShKKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEp9ZnVuY3Rpb24g''@;'; put 'put ''dWUoSil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBKfWZ1bmN0aW9uIGNlKEope3JldHVybiB2b2lkIDA9PT1KfWZ1bmN0aW9uIEcoSil7cmV0dXJuIGIoSikmJiJbb2JqZWN0IFJlZ0V4cF0iPT09ZyhKKX1mdW5jdGlvbiBiKEope3JldHVybiJvYmplY3QiPT10eXBlb2YgSiYmbnVsbCE9PUp9''@;'; put 'put ''ZnVuY3Rpb24gRChKKXtyZXR1cm4gYihKKSYmIltvYmplY3QgRGF0ZV0iPT09ZyhKKX1mdW5jdGlvbiBIKEope3JldHVybiBiKEopJiYoIltvYmplY3QgRXJyb3JdIj09PWcoSil8fEogaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gTihKKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgSn1m''@;'; put 'put ''dW5jdGlvbiBnKEope3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoSil9ZnVuY3Rpb24gQyhKKXtyZXR1cm4gSjwxMD8iMCIrSi50b1N0cmluZygxMCk6Si50b1N0cmluZygxMCl9Ty5kZWJ1Z2xvZz1mdW5jdGlvbihKKXtpZihKPUoudG9VcHBlckNhc2UoKSwhRVtKXSlp''@;'; put 'put ''ZihqLnRlc3QoSikpe3ZhciBuZT16LnBpZDtFW0pdPWZ1bmN0aW9uKCl7dmFyIGRlPU8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKTtLLmVycm9yKCIlcyAlZDogJXMiLEosbmUsZGUpfX1lbHNlIEVbSl09ZnVuY3Rpb24oKXt9O3JldHVybiBFW0pdfSxPLmluc3BlY3Q9QixCLmNvbG9ycz17''@;'; put 'put ''Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5''@;'; put 'put ''XSx5ZWxsb3c6WzMzLDM5XX0sQi5zdHlsZXM9e3NwZWNpYWw6ImN5YW4iLG51bWJlcjoieWVsbG93Iixib29sZWFuOiJ5ZWxsb3ciLHVuZGVmaW5lZDoiZ3JleSIsbnVsbDoiYm9sZCIsc3RyaW5nOiJncmVlbiIsZGF0ZToibWFnZW50YSIscmVnZXhwOiJyZWQifSxPLnR5cGVzPVIoNTk1NSks''@;'; put 'put ''Ty5pc0FycmF5PXRlLE8uaXNCb29sZWFuPW9lLE8uaXNOdWxsPXNlLE8uaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24oSil7cmV0dXJuIG51bGw9PUp9LE8uaXNOdW1iZXI9aGUsTy5pc1N0cmluZz11ZSxPLmlzU3ltYm9sPWZ1bmN0aW9uKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSn0s''@;'; put 'put ''Ty5pc1VuZGVmaW5lZD1jZSxPLmlzUmVnRXhwPUcsTy50eXBlcy5pc1JlZ0V4cD1HLE8uaXNPYmplY3Q9YixPLmlzRGF0ZT1ELE8udHlwZXMuaXNEYXRlPUQsTy5pc0Vycm9yPUgsTy50eXBlcy5pc05hdGl2ZUVycm9yPUgsTy5pc0Z1bmN0aW9uPU4sTy5pc1ByaW1pdGl2ZT1mdW5jdGlvbihK''@;'; put 'put ''KXtyZXR1cm4gbnVsbD09PUp8fCJib29sZWFuIj09dHlwZW9mIEp8fCJudW1iZXIiPT10eXBlb2YgSnx8InN0cmluZyI9PXR5cGVvZiBKfHwic3ltYm9sIj09dHlwZW9mIEp8fHZvaWQgMD09PUp9LE8uaXNCdWZmZXI9UigzODQpO3ZhciBTPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5''@;'; put 'put ''IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gdihKLG5lKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEosbmUpfU8ubG9nPWZ1bmN0aW9uKCl7dmFyIEosbmU7Sy5sb2coIiVzIC0gJXMiLChuZT1bQygoSj1u''@;'; put 'put ''ZXcgRGF0ZSkuZ2V0SG91cnMoKSksQyhKLmdldE1pbnV0ZXMoKSksQyhKLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKSxbSi5nZXREYXRlKCksU1tKLmdldE1vbnRoKCldLG5lXS5qb2luKCIgIikpLE8uZm9ybWF0LmFwcGx5KE8sYXJndW1lbnRzKSl9LE8uaW5oZXJpdHM9Uig1NzE3KSxPLl9l''@;'; put 'put ''eHRlbmQ9ZnVuY3Rpb24oSixuZSl7aWYoIW5lfHwhYihuZSkpcmV0dXJuIEo7Zm9yKHZhciBkZT1PYmplY3Qua2V5cyhuZSksZmU9ZGUubGVuZ3RoO2ZlLS07KUpbZGVbZmVdXT1uZVtkZVtmZV1dO3JldHVybiBKfTt2YXIgcD10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2woInV0aWwucHJvbWlz''@;'; put 'put ''aWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiB3KEosbmUpe2lmKCFKKXt2YXIgZGU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtkZS5yZWFzb249SixKPWRlfXJldHVybiBuZShKKX1PLnByb21pc2lmeT1mdW5jdGlvbihKKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgSil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtpZihwJiZKW3BdKXt2YXIgbmU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKG5lPUpbcF0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAi''@;'; put 'put ''dXRpbC5wcm9taXNpZnkuY3VzdG9tIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLHAse3ZhbHVlOm5lLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksbmV9ZnVuY3Rpb24gbmUoKXtm''@;'; put 'put ''b3IodmFyIGRlLGZlLHhlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKE9lLGplKXtkZT1PZSxmZT1qZX0pLExlPVtdLEZlPTA7RmU8YXJndW1lbnRzLmxlbmd0aDtGZSsrKUxlLnB1c2goYXJndW1lbnRzW0ZlXSk7TGUucHVzaChmdW5jdGlvbihPZSxqZSl7T2U/ZmUoT2UpOmRlKGplKX0pO3RyeXtK''@;'; put 'put ''LmFwcGx5KHRoaXMsTGUpfWNhdGNoKE9lKXtmZShPZSl9cmV0dXJuIHhlfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsT2JqZWN0LmdldFByb3RvdHlwZU9mKEopKSxwJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobmUscCx7dmFsdWU6bmUsZW51bWVyYWJsZTohMSx3cml0YWJsZToh''@;'; put 'put ''MSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZSxJKEopKX0sTy5wcm9taXNpZnkuY3VzdG9tPXAsTy5jYWxsYmFja2lmeT1mdW5jdGlvbihKKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgSil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1''@;'; put 'put ''bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiBuZSgpe2Zvcih2YXIgZGU9W10sZmU9MDtmZTxhcmd1bWVudHMubGVuZ3RoO2ZlKyspZGUucHVzaChhcmd1bWVudHNbZmVdKTt2YXIgeGU9ZGUucG9wKCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHhlKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBMZT10aGlzLEZlPWZ1bmN0aW9uKCl7cmV0dXJuIHhlLmFwcGx5KExlLGFyZ3VtZW50cyl9O0ouYXBwbHkodGhpcyxkZSkudGhlbihmdW5jdGlvbihPZSl7ei5uZXh0VGljayhGZS5iaW5k''@;'; put 'put ''KG51bGwsbnVsbCxPZSkpfSxmdW5jdGlvbihPZSl7ei5uZXh0VGljayh3LmJpbmQobnVsbCxPZSxGZSkpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZSxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG5lLEkoSikpLG5lfX0sNDgxOihN''@;'; put 'put ''LE8sUik9PnshZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO3ouZXhwb3J0cy5pc191cmk9SSx6LmV4cG9ydHMuaXNfaHR0cF91cmk9ayx6LmV4cG9ydHMuaXNfaHR0cHNfdXJpPUUsei5leHBvcnRzLmlzX3dlYl91cmk9aix6LmV4cG9ydHMuaXNVcmk9SSx6LmV4cG9ydHMuaXNIdHRwVXJpPWss''@;'; put 'put ''ei5leHBvcnRzLmlzSHR0cHNVcmk9RSx6LmV4cG9ydHMuaXNXZWJVcmk9ajt2YXIgSz1mdW5jdGlvbihWKXtyZXR1cm4gVi5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKikoPzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gSShWKXtp''@;'; put 'put ''ZihWJiYhL1teYS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KFYpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KFYpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwkKS9pLnRlc3QoVikpe3ZhciBCLFksWCxVLHEsZWU9IiIsdGU9IiI7aWYo''@;'; put 'put ''ZWU9KEI9SyhWKSlbMV0sWT1CWzJdLFg9QlszXSxVPUJbNF0scT1CWzVdLGVlJiZlZS5sZW5ndGgmJlgubGVuZ3RoPj0wKXtpZihZJiZZLmxlbmd0aCl7aWYoMCE9PVgubGVuZ3RoJiYhL15cLy8udGVzdChYKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoWCkpcmV0dXJuO2lmKC9eW2Et''@;'; put 'put ''el1bYS16MC05XCtcLVwuXSokLy50ZXN0KGVlLnRvTG93ZXJDYXNlKCkpKXJldHVybiB0ZSs9ZWUrIjoiLFkmJlkubGVuZ3RoJiYodGUrPSIvLyIrWSksdGUrPVgsVSYmVS5sZW5ndGgmJih0ZSs9Ij8iK1UpLHEmJnEubGVuZ3RoJiYodGUrPSIjIitxKSx0ZX19fWZ1bmN0aW9uIGsoVixCKXtp''@;'; put 'put ''ZihJKFYpKXt2YXIgWSxYLFUscSxlZT0iIix0ZT0iIixvZT0iIixzZT0iIjtpZihlZT0oWT1LKFYpKVsxXSx0ZT1ZWzJdLFg9WVszXSxVPVlbNF0scT1ZWzVdLGVlKXtpZihCKXtpZigiaHR0cHMiIT1lZS50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9ZWUudG9Mb3dlckNh''@;'; put 'put ''c2UoKSlyZXR1cm47aWYodGUpcmV0dXJuLzooXGQrKSQvLnRlc3QodGUpJiYob2U9dGUubWF0Y2goLzooXGQrKSQvKVswXSx0ZT10ZS5yZXBsYWNlKC86XGQrJC8sIiIpKSxzZSs9ZWUrIjoiLHNlKz0iLy8iK3RlLG9lJiYoc2UrPW9lKSxzZSs9WCxVJiZVLmxlbmd0aCYmKHNlKz0iPyIrVSks''@;'; put 'put ''cSYmcS5sZW5ndGgmJihzZSs9IiMiK3EpLHNlfX19ZnVuY3Rpb24gRShWKXtyZXR1cm4gayhWLCEwKX1mdW5jdGlvbiBqKFYpe3JldHVybiBrKFYpfHxFKFYpfX0oTT1SLm5tZChNKSl9LDY0MzA6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1SKDQwMjkpLEs9UigzMDgzKSxJPVIoMTky''@;'; put 'put ''NCksaz1SKDcyOTYpLEU9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLGo9Uig2NDEwKSgpLFY9dHlwZW9mIGdsb2JhbFRoaXM+InUiP1IuZzpnbG9iYWxUaGlzLEI9SygpLFk9SSgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLFg9e30sVT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7aiYm''@;'; put 'put ''ayYmVSYmeihCLGZ1bmN0aW9uKGVlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVltlZV0pe3ZhciB0ZT1uZXcgVltlZV07aWYoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHRlKXt2YXIgb2U9VSh0ZSksc2U9ayhvZSxTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFzZSl7dmFyIGhlPVUob2UpO3NlPWso''@;'; put 'put ''aGUsU3ltYm9sLnRvU3RyaW5nVGFnKX1YW2VlXT1zZS5nZXR9fX0pO3ZhciBxPVIoNTY5Mik7TS5leHBvcnRzPWZ1bmN0aW9uKGVlKXtyZXR1cm4hIXEoZWUpJiYoaiYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIGVlPyh0ZT1lZSxvZT0hMSx6KFgsZnVuY3Rpb24oc2UsaGUpe2lmKCFvZSl0cnl7''@;'; put 'put ''dmFyIHVlPXNlLmNhbGwodGUpO3VlPT09aGUmJihvZT11ZSl9Y2F0Y2h7fX0pLG9lKTpZKEUoZWUpLDgsLTEpKTt2YXIgdGUsb2V9fSwyNDc5Ok09PntNLmV4cG9ydHM9ZnVuY3Rpb24gTyhSLHope2lmKFImJnopcmV0dXJuIE8oUikoeik7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFIpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigibmVlZCB3cmFwcGVyIGZ1bmN0aW9uIik7cmV0dXJuIE9iamVjdC5rZXlzKFIpLmZvckVhY2goZnVuY3Rpb24oSSl7S1tJXT1SW0ldfSksSztmdW5jdGlvbiBLKCl7Zm9yKHZhciBJPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxrPTA7azxJLmxlbmd0aDtrKysp''@;'; put 'put ''SVtrXT1hcmd1bWVudHNba107dmFyIEU9Ui5hcHBseSh0aGlzLEkpLGo9SVtJLmxlbmd0aC0xXTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRSYmRSE9PWomJk9iamVjdC5rZXlzKGopLmZvckVhY2goZnVuY3Rpb24oVil7RVtWXT1qW1ZdfSksRX19fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9''@;'; put 'put ''LDkyMTQ6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDI1MzU6KCk9Pnt9LDM3MTA6KCk9Pnt9LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDcyMTc6KCk9Pnt9LDgzNzM6KCk9''@;'; put 'put ''Pnt9LDMwODM6KE0sTyxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgej1bIkJpZ0ludDY0QXJyYXkiLCJCaWdVaW50NjRBcnJheSIsIkZsb2F0MzJBcnJheSIsIkZsb2F0NjRBcnJheSIsIkludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiSW50OEFycmF5IiwiVWludDE2QXJyYXkiLCJVaW50MzJBcnJh''@;'; put 'put ''eSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSJdLEs9dHlwZW9mIGdsb2JhbFRoaXM+InUiP1IuZzpnbG9iYWxUaGlzO00uZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgST1bXSxrPTA7azx6Lmxlbmd0aDtrKyspImZ1bmN0aW9uIj09dHlwZW9mIEtbeltrXV0mJihJW0kubGVu''@;'; put 'put ''Z3RoXT16W2tdKTtyZXR1cm4gSX19LDQ5NDY6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVy''@;'; put 'put ''IjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXki''@;'; put 'put ''OjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2Ijox''@;'; put 'put ''NiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUi''@;'; put 'put ''OiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgi''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNp''@;'; put 'put ''cGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMi''@;'; put 'put ''LCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1''@;'; put 'put ''NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2''@;'; put 'put ''LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoi''@;'; put 'put ''R0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoi''@;'; put 'put ''YXV0aCJ9fScpfSw1MjA3Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sIlJTQS1T''@;'; put 'put ''SEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2''@;'; put 'put ''MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwi''@;'; put 'put ''aGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwic2hhNTEy''@;'; put 'put ''V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYw''@;'; put 'put ''ODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sInNo''@;'; put 'put ''YTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUxMiI6eyJzaWduIjoi''@;'; put 'put ''ZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQi''@;'; put 'put ''OiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlk''@;'; put 'put ''IjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIi''@;'; put 'put ''fSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IiJ9''@;'; put 'put ''LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1''@;'; put 'put ''MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4''@;'; put 'put ''ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDEzMDg6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMuMTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMu''@;'; put 'put ''MS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVH''@;'; put 'put ''IjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJTX0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwi''@;'; put 'put ''T19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lOQyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1''@;'; put 'put ''NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lST1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJF''@;'; put 'put ''QUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6''@;'; put 'put ''MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlT''@;'; put 'put ''RElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAsIkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5P''@;'; put 'put ''REFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3NywiRU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09O''@;'; put 'put ''TiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAiOjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JU''@;'; put 'put ''Ijo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwiRVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQi''@;'; put 'put ''OjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9UIjo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lH''@;'; put 'put ''VEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAiOjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoy''@;'; put 'put ''OCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1BfQUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNU''@;'; put 'put ''IjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJW''@;'; put 'put ''RVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09Q''@;'; put 'put ''X05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9f''@;'; put 'put ''UVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3Yx''@;'; put 'put ''Ijo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3YxXzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdM''@;'; put 'put ''RV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgsIlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RM''@;'; put 'put ''U19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVUSE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0''@;'; put 'put ''LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9O''@;'; put 'put ''T05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklNRSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJS''@;'; put 'put ''U0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9QQURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9V''@;'; put 'put ''TkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09LIjo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5Ok09PnsidXNlIHN0cmljdCI7TS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoi''@;'; put 'put ''MDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2''@;'; put 'put ''NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQw''@;'; put 'put ''NGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9''@;'; put 'put ''LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2''@;'; put 'put ''ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2Ez''@;'; put 'put ''YWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2Qx''@;'; put 'put ''MjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYy''@;'; put 'put ''NDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJl''@;'; put 'put ''MzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUi''@;'; put 'put ''OiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0''@;'; put 'put ''YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3''@;'; put 'put ''NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFj''@;'; put 'put ''NDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUy''@;'; put 'put ''MWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRh''@;'; put 'put ''YTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQw''@;'; put 'put ''NmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0''@;'; put 'put ''ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUy''@;'; put 'put ''MWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1Nzdh''@;'; put 'put ''NjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVm''@;'; put 'put ''OTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk''@;'; put 'put ''ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRj''@;'; put 'put ''ZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5''@;'; put 'put ''OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIy''@;'; put 'put ''NjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJh''@;'; put 'put ''NWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNk''@;'; put 'put ''MDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3''@;'; put 'put ''YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAw''@;'; put 'put ''YjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVj''@;'; put 'put ''ZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2''@;'; put 'put ''NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1''@;'; put 'put ''YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIx''@;'; put 'put ''N2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNm''@;'; put 'put ''Yjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMw''@;'; put 'put ''YmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVj''@;'; put 'put ''YWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMx''@;'; put 'put ''ZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQw''@;'; put 'put ''MTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4''@;'; put 'put ''ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3''@;'; put 'put ''NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJl''@;'; put 'put ''MDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0''@;'; put 'put ''Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcx''@;'; put 'put ''NjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sODU5NzpNPT57InVzZSBzdHJpY3QiO00uZXhwb3J0cz17aTg6IjYuNS40In19LDI1NjI6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1l''@;'; put 'put ''Y2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4x''@;'; put 'put ''Ni44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQw''@;'; put 'put ''LjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9LDM3MDQ6TT0+eyJ1c2Ugc3RyaWN0IjtNLmV4cG9ydHM9SlNPTi5wYXJzZSgnWyJhYyIs''@;'; put 'put ''ImNvbS5hYyIsImVkdS5hYyIsImdvdi5hYyIsIm5ldC5hYyIsIm1pbC5hYyIsIm9yZy5hYyIsImFkIiwibm9tLmFkIiwiYWUiLCJjby5hZSIsIm5ldC5hZSIsIm9yZy5hZSIsInNjaC5hZSIsImFjLmFlIiwiZ292LmFlIiwibWlsLmFlIiwiYWVybyIsImFjY2lkZW50LWludmVzdGlnYXRpb24u''@;'; put 'put ''YWVybyIsImFjY2lkZW50LXByZXZlbnRpb24uYWVybyIsImFlcm9iYXRpYy5hZXJvIiwiYWVyb2NsdWIuYWVybyIsImFlcm9kcm9tZS5hZXJvIiwiYWdlbnRzLmFlcm8iLCJhaXJjcmFmdC5hZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWlyLXN1cnZlaWxsYW5jZS5hZXJv''@;'; put 'put ''IiwiYWlydHJhZmZpYy5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYW1idWxhbmNlLmFlcm8iLCJhbXVzZW1lbnQuYWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5h''@;'; put 'put ''ZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJvIiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwi''@;'; put 'put ''Y29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRvci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVy''@;'; put 'put ''byIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIs''@;'; put 'put ''ImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIs''@;'; put 'put ''Im1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8iLCJwYXNzZW5nZXItYXNzb2NpYXRpb24uYWVybyIsInBpbG90LmFlcm8iLCJwcmVzcy5hZXJvIiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwi''@;'; put 'put ''cmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8iLCJzY2llbnRpc3QuYWVybyIsInNlcnZpY2VzLmFlcm8iLCJzaG93LmFlcm8iLCJza3lkaXZpbmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8i''@;'; put 'put ''LCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAuYWVybyIsIndvcmtzLmFlcm8iLCJhZiIsImdvdi5hZiIsImNvbS5hZiIsIm9yZy5hZiIsIm5ldC5hZiIsImVkdS5hZiIsImFnIiwiY29tLmFnIiwib3JnLmFnIiwi''@;'; put 'put ''bmV0LmFnIiwiY28uYWciLCJub20uYWciLCJhaSIsIm9mZi5haSIsImNvbS5haSIsIm5ldC5haSIsIm9yZy5haSIsImFsIiwiY29tLmFsIiwiZWR1LmFsIiwiZ292LmFsIiwibWlsLmFsIiwibmV0LmFsIiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQu''@;'; put 'put ''YW0iLCJvcmcuYW0iLCJhbyIsImVkLmFvIiwiZ3YuYW8iLCJvZy5hbyIsImNvLmFvIiwicGIuYW8iLCJpdC5hbyIsImFxIiwiYXIiLCJiZXQuYXIiLCJjb20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0''@;'; put 'put ''dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFyIiwiYXJwYSIsImUxNjQuYXJwYSIsImluLWFkZHIuYXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJjby5h''@;'; put 'put ''dCIsImd2LmF0Iiwib3IuYXQiLCJzdGguYWMuYXQiLCJhdSIsImNvbS5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImVkdS5hdSIsImdvdi5hdSIsImFzbi5hdSIsImlkLmF1IiwiaW5mby5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2Eu''@;'; put 'put ''YXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNh''@;'; put 'put ''Lmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiY29tLmF6IiwibmV0LmF6IiwiaW50LmF6IiwiZ292LmF6Iiwib3JnLmF6IiwiZWR1LmF6IiwiaW5mby5heiIsInBwLmF6Iiwi''@;'; put 'put ''bWlsLmF6IiwibmFtZS5heiIsInByby5heiIsImJpei5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJv''@;'; put 'put ''cmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiYS5iZyIsImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsuYmciLCJsLmJnIiwibS5iZyIsIm4uYmciLCJv''@;'; put 'put ''LmJnIiwicC5iZyIsInEuYmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5iZyIsInouYmciLCIwLmJnIiwiMS5iZyIsIjIuYmciLCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYmgiLCJjb20uYmgi''@;'; put 'put ''LCJlZHUuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJnb3YuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFzc28uYmoiLCJiYXJyZWF1LmJqIiwiZ291di5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0''@;'; put 'put ''LmJtIiwib3JnLmJtIiwiYm4iLCJjb20uYm4iLCJlZHUuYm4iLCJnb3YuYm4iLCJuZXQuYm4iLCJvcmcuYm4iLCJibyIsImNvbS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm9yZy5ibyIsIm5ldC5ibyIsIm1pbC5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJh''@;'; put 'put ''Z3JvLmJvIiwiYXJ0ZS5ibyIsImJsb2cuYm8iLCJib2xpdmlhLmJvIiwiY2llbmNpYS5ibyIsImNvb3BlcmF0aXZhLmJvIiwiZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlh''@;'; put 'put ''LmJvIiwiaW5mby5ibyIsIm1lZGljaW5hLmJvIiwibW92aW1pZW50by5ibyIsIm11c2ljYS5ibyIsIm5hdHVyYWwuYm8iLCJub21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBvbGl0aWNhLmJvIiwicHJvZmVzaW9uYWwuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicHVlYmxv''@;'; put 'put ''LmJvIiwicmV2aXN0YS5ibyIsInNhbHVkLmJvIiwidGVjbm9sb2dpYS5ibyIsInRrc2F0LmJvIiwidHJhbnNwb3J0ZS5ibyIsIndpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJh''@;'; put 'put ''cGFyZWNpZGEuYnIiLCJhcHAuYnIiLCJhcnEuYnIiLCJhcnQuYnIiLCJhdG8uYnIiLCJiLmJyIiwiYmFydWVyaS5iciIsImJlbGVtLmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5i''@;'; put 'put ''ciIsImNhbXBpbmFzLmJyIiwiY2F4aWFzLmJyIiwiY2ltLmJyIiwiY25nLmJyIiwiY250LmJyIiwiY29tLmJyIiwiY29udGFnZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYu''@;'; put 'put ''YnIiLCJlY24uYnIiLCJlY28uYnIiLCJlZHUuYnIiLCJlbXAuYnIiLCJlbmYuYnIiLCJlbmcuYnIiLCJlc3AuYnIiLCJldGMuYnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIi''@;'; put 'put ''LCJmb3ouYnIiLCJmc3QuYnIiLCJnMTIuYnIiLCJnZW8uYnIiLCJnZ2YuYnIiLCJnb2lhbmlhLmJyIiwiZ292LmJyIiwiYWMuZ292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwi''@;'; put 'put ''Z28uZ292LmJyIiwibWEuZ292LmJyIiwibWcuZ292LmJyIiwibXMuZ292LmJyIiwibXQuZ292LmJyIiwicGEuZ292LmJyIiwicGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJy''@;'; put 'put ''IiwicnMuZ292LmJyIiwic2MuZ292LmJyIiwic2UuZ292LmJyIiwic3AuZ292LmJyIiwidG8uZ292LmJyIiwiZ3J1LmJyIiwiaW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcu''@;'; put 'put ''YnIiLCJsZWwuYnIiLCJsb2cuYnIiLCJsb25kcmluYS5iciIsIm1hY2FwYS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIsIm1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0''@;'; put 'put ''ZXJvaS5iciIsIioubm9tLmJyIiwibm90LmJyIiwibnRyLmJyIiwib2RvLmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2NvLmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJy''@;'; put 'put ''ZWMuYnIiLCJyZWNpZmUuYnIiLCJyZXAuYnIiLCJyaWJlaXJhby5iciIsInJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3ByZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5i''@;'; put 'put ''ciIsInNlZy5iciIsInNqYy5iciIsInNsZy5iciIsInNsei5iciIsInNvcm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIsInRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXgu''@;'; put 'put ''YnIiLCJ2bG9nLmJyIiwid2lraS5iciIsInpsZy5iciIsImJzIiwiY29tLmJzIiwibmV0LmJzIiwib3JnLmJzIiwiZWR1LmJzIiwiZ292LmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIs''@;'; put 'put ''Imdvdi5ieSIsIm1pbC5ieSIsImNvbS5ieSIsIm9mLmJ5IiwiYnoiLCJjb20uYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIsIm5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9u''@;'; put 'put ''LmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsIm9yZy5jaSIsIm9yLmNpIiwiY29tLmNpIiwiY28uY2kiLCJlZHUuY2kiLCJlZC5jaSIsImFjLmNpIiwibmV0LmNpIiwiZ28uY2ki''@;'; put 'put ''LCJhc3NvLmNpIiwiYVx4ZTlyb3BvcnQuY2kiLCJpbnQuY2kiLCJwcmVzc2UuY2kiLCJtZC5jaSIsImdvdXYuY2kiLCIqLmNrIiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwi''@;'; put 'put ''Y24iLCJhYy5jbiIsImNvbS5jbiIsImVkdS5jbiIsImdvdi5jbiIsIm5ldC5jbiIsIm9yZy5jbiIsIm1pbC5jbiIsIlx1NTE2Y1x1NTNmOC5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5j''@;'; put 'put ''biIsImd6LmNuIiwiZ3guY24iLCJoYS5jbiIsImhiLmNuIiwiaGUuY24iLCJoaS5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm5tLmNuIiwibnguY24iLCJxaC5jbiIsInNjLmNuIiwic2QuY24iLCJzaC5jbiIsInNuLmNuIiwic3guY24iLCJ0''@;'; put 'put ''ai5jbiIsInhqLmNuIiwieHouY24iLCJ5bi5jbiIsInpqLmNuIiwiaGsuY24iLCJtby5jbiIsInR3LmNuIiwiY28iLCJhcnRzLmNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZmlybS5jbyIsImdvdi5jbyIsImluZm8uY28iLCJpbnQuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcu''@;'; put 'put ''Y28iLCJyZWMuY28iLCJ3ZWIuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5jciIsImdvLmNyIiwib3IuY3IiLCJzYS5jciIsImN1IiwiY29tLmN1IiwiZWR1LmN1Iiwib3JnLmN1IiwibmV0LmN1IiwiZ292LmN1IiwiaW5mLmN1IiwiY3YiLCJjb20u''@;'; put 'put ''Y3YiLCJlZHUuY3YiLCJpbnQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwiY3ciLCJjb20uY3ciLCJlZHUuY3ciLCJuZXQuY3ciLCJvcmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5''@;'; put 'put ''IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJwcm8uY3kiLCJ0bS5jeSIsImN6IiwiZGUiLCJkaiIsImRrIiwiZG0iLCJjb20uZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5kbyIsImdvYi5kbyIsImdvdi5k''@;'; put 'put ''byIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm9yZy5keiIsIm5ldC5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMiLCJjb20uZWMiLCJpbmZvLmVj''@;'; put 'put ''IiwibmV0LmVjIiwiZmluLmVjIiwiazEyLmVjIiwibWVkLmVjIiwicHJvLmVjIiwib3JnLmVjIiwiZWR1LmVjIiwiZ292LmVjIiwiZ29iLmVjIiwibWlsLmVjIiwiZWR1IiwiZWUiLCJlZHUuZWUiLCJnb3YuZWUiLCJyaWlrLmVlIiwibGliLmVlIiwibWVkLmVlIiwiY29tLmVlIiwicHJpLmVl''@;'; put 'put ''IiwiYWlwLmVlIiwib3JnLmVlIiwiZmllLmVlIiwiZWciLCJjb20uZWciLCJlZHUuZWciLCJldW4uZWciLCJnb3YuZWciLCJtaWwuZWciLCJuYW1lLmVnIiwibmV0LmVnIiwib3JnLmVnIiwic2NpLmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZ29iLmVzIiwi''@;'; put 'put ''ZWR1LmVzIiwiZXQiLCJjb20uZXQiLCJnb3YuZXQiLCJvcmcuZXQiLCJlZHUuZXQiLCJiaXouZXQiLCJuYW1lLmV0IiwiaW5mby5ldCIsIm5ldC5ldCIsImV1IiwiZmkiLCJhbGFuZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZq''@;'; put 'put ''IiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJjb20uZm0iLCJlZHUuZm0iLCJuZXQuZm0iLCJvcmcuZm0iLCJmbSIsImZvIiwiZnIiLCJhc3NvLmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYWVyb3BvcnQuZnIi''@;'; put 'put ''LCJhdm9jYXQuZnIiLCJhdm91ZXMuZnIiLCJjY2kuZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJnZW9tZXRyZS1leHBlcnQuZnIiLCJncmV0YS5mciIsImh1aXNzaWVyLWp1c3RpY2UuZnIiLCJtZWRlY2luLmZy''@;'; put 'put ''Iiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIsInZldGVyaW5haXJlLmZyIiwiZ2EiLCJnYiIsImVkdS5nZCIsImdvdi5nZCIsImdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3YuZ2UiLCJvcmcuZ2UiLCJtaWwuZ2UiLCJuZXQuZ2UiLCJwdnQuZ2UiLCJnZiIs''@;'; put 'put ''ImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm9yZy5naCIsIm1pbC5naCIsImdpIiwiY29tLmdpIiwibHRkLmdpIiwiZ292LmdpIiwibW9kLmdpIiwiZWR1LmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVk''@;'; put 'put ''dS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm9yZy5nbiIsIm5ldC5nbiIsImdvdiIsImdwIiwiY29tLmdwIiwibmV0LmdwIiwibW9iaS5ncCIsImVkdS5ncCIsIm9yZy5ncCIsImFzc28uZ3AiLCJncSIsImdyIiwi''@;'; put 'put ''Y29tLmdyIiwiZWR1LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ292LmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIsImd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8u''@;'; put 'put ''Z3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIsImdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NTE2Y1x1NTNm''@;'; put 'put ''OC5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NGUyYVx1ZmZmZFx1ZmZmZC5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2Y1MVx1N2VkYy5oayIsIlx1N2VjNFx1''@;'; put 'put ''N2U1NC5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUuaG4iLCJvcmcuaG4iLCJuZXQuaG4iLCJtaWwuaG4iLCJnb2IuaG4iLCJo''@;'; put 'put ''ciIsIml6LmhyIiwiZnJvbS5ociIsIm5hbWUuaHIiLCJjb20uaHIiLCJodCIsImNvbS5odCIsInNob3AuaHQiLCJmaXJtLmh0IiwiaW5mby5odCIsImFkdWx0Lmh0IiwibmV0Lmh0IiwicHJvLmh0Iiwib3JnLmh0IiwibWVkLmh0IiwiYXJ0Lmh0IiwiY29vcC5odCIsInBvbC5odCIsImFzc28u''@;'; put 'put ''aHQiLCJlZHUuaHQiLCJyZWwuaHQiLCJnb3V2Lmh0IiwicGVyc28uaHQiLCJodSIsImNvLmh1IiwiaW5mby5odSIsIm9yZy5odSIsInByaXYuaHUiLCJzcG9ydC5odSIsInRtLmh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJlcm90aWNh''@;'; put 'put ''Lmh1IiwiZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmdhdGxhbi5odSIsImpvZ2Fzei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJyZWtsYW0uaHUiLCJzZXguaHUiLCJzaG9wLmh1Iiwi''@;'; put 'put ''c3VsaS5odSIsInN6ZXguaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQi''@;'; put 'put ''LCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJpbSIsImFjLmltIiwiY28uaW0iLCJjb20uaW0iLCJsdGQuY28uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJwbGMuY28uaW0iLCJ0''@;'; put 'put ''dC5pbSIsInR2LmltIiwiaW4iLCJjby5pbiIsImZpcm0uaW4iLCJuZXQuaW4iLCJvcmcuaW4iLCJnZW4uaW4iLCJpbmQuaW4iLCJuaWMuaW4iLCJhYy5pbiIsImVkdS5pbiIsInJlcy5pbiIsImdvdi5pbiIsIm1pbC5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvbS5pbyIsImlx''@;'; put 'put ''IiwiZ292LmlxIiwiZWR1LmlxIiwibWlsLmlxIiwiY29tLmlxIiwib3JnLmlxIiwibmV0LmlxIiwiaXIiLCJhYy5pciIsImNvLmlyIiwiZ292LmlyIiwiaWQuaXIiLCJuZXQuaXIiLCJvcmcuaXIiLCJzY2guaXIiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJcdTA2Mjdc''@;'; put 'put ''dTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYuaXIiLCJpcyIsIm5ldC5pcyIsImNvbS5pcyIsImVkdS5pcyIsImdvdi5pcyIsIm9yZy5pcyIsImludC5pcyIsIml0IiwiZ292Lml0IiwiZWR1Lml0IiwiYWJyLml0IiwiYWJydXp6by5pdCIsImFvc3RhLXZhbGxleS5pdCIsImFvc3RhdmFsbGV5Lml0''@;'; put 'put ''IiwiYmFzLml0IiwiYmFzaWxpY2F0YS5pdCIsImNhbC5pdCIsImNhbGFicmlhLml0IiwiY2FtLml0IiwiY2FtcGFuaWEuaXQiLCJlbWlsaWEtcm9tYWduYS5pdCIsImVtaWxpYXJvbWFnbmEuaXQiLCJlbXIuaXQiLCJmcml1bGktdi1naXVsaWEuaXQiLCJmcml1bGktdmUtZ2l1bGlhLml0Iiwi''@;'; put 'put ''ZnJpdWxpLXZlZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpLXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGktdmdpdWxpYS5pdCIsImZyaXVsaXYtZ2l1bGlhLml0IiwiZnJpdWxpdmUtZ2l1bGlhLml0IiwiZnJpdWxpdmVnaXVsaWEuaXQiLCJmcml1bGl2ZW5l''@;'; put 'put ''emlhLWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWFnaXVsaWEuaXQiLCJmcml1bGl2Z2l1bGlhLml0IiwiZnZnLml0IiwibGF6Lml0IiwibGF6aW8uaXQiLCJsaWcuaXQiLCJsaWd1cmlhLml0IiwibG9tLml0IiwibG9tYmFyZGlhLml0IiwibG9tYmFyZHkuaXQiLCJsdWNhbmlhLml0IiwibWFy''@;'; put 'put ''Lml0IiwibWFyY2hlLml0IiwibW9sLml0IiwibW9saXNlLml0IiwicGllZG1vbnQuaXQiLCJwaWVtb250ZS5pdCIsInBtbi5pdCIsInB1Zy5pdCIsInB1Z2xpYS5pdCIsInNhci5pdCIsInNhcmRlZ25hLml0Iiwic2FyZGluaWEuaXQiLCJzaWMuaXQiLCJzaWNpbGlhLml0Iiwic2ljaWx5Lml0''@;'; put 'put ''IiwidGFhLml0IiwidG9zLml0IiwidG9zY2FuYS5pdCIsInRyZW50aW4tc3VkLXRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZHRpcm9sLml0IiwidHJlbnRpbi1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW4tc3VlZC10aXJvbC5pdCIsInRyZW50aW4tc3Vl''@;'; put 'put ''ZHRpcm9sLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2UuaXQiLCJ0cmVudGluby1zLXRpcm9sLml0IiwidHJlbnRpbm8tc3Rpcm9sLml0IiwidHJlbnRpbm8tc3VkLXRpcm9s''@;'; put 'put ''Lml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vYS1hZGlnZS5pdCIs''@;'; put 'put ''InRyZW50aW5vYWFkaWdlLml0IiwidHJlbnRpbm9hbHRvLWFkaWdlLml0IiwidHJlbnRpbm9hbHRvYWRpZ2UuaXQiLCJ0cmVudGlub3MtdGlyb2wuaXQiLCJ0cmVudGlub3N0aXJvbC5pdCIsInRyZW50aW5vc3VkLXRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGlu''@;'; put 'put ''b3N1ZHRpcm9sLml0IiwidHJlbnRpbm9zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vc3VlZC10aXJvbC5pdCIsInRyZW50aW5vc3VlZHRpcm9sLml0IiwidHJlbnRpbnN1ZC10aXJvbC5pdCIsInRyZW50aW5zXHhmY2QtdGlyb2wuaXQiLCJ0cmVudGluc3VkdGlyb2wuaXQiLCJ0cmVudGluc1x4''@;'; put 'put ''ZmNkdGlyb2wuaXQiLCJ0cmVudGluc3VlZC10aXJvbC5pdCIsInRyZW50aW5zdWVkdGlyb2wuaXQiLCJ0dXNjYW55Lml0IiwidW1iLml0IiwidW1icmlhLml0IiwidmFsLWQtYW9zdGEuaXQiLCJ2YWwtZGFvc3RhLml0IiwidmFsZC1hb3N0YS5pdCIsInZhbGRhb3N0YS5pdCIsInZhbGxlLWFv''@;'; put 'put ''c3RhLml0IiwidmFsbGUtZC1hb3N0YS5pdCIsInZhbGxlLWRhb3N0YS5pdCIsInZhbGxlYW9zdGEuaXQiLCJ2YWxsZWQtYW9zdGEuaXQiLCJ2YWxsZWRhb3N0YS5pdCIsInZhbGxlZS1hb3N0ZS5pdCIsInZhbGxceGU5ZS1hb3N0ZS5pdCIsInZhbGxlZS1kLWFvc3RlLml0IiwidmFsbFx4ZTll''@;'; put 'put ''LWQtYW9zdGUuaXQiLCJ2YWxsZWVhb3N0ZS5pdCIsInZhbGxceGU5ZWFvc3RlLml0IiwidmFsbGVlZGFvc3RlLml0IiwidmFsbFx4ZTllZGFvc3RlLml0IiwidmFvLml0IiwidmRhLml0IiwidmVuLml0IiwidmVuZXRvLml0IiwiYWcuaXQiLCJhZ3JpZ2VudG8uaXQiLCJhbC5pdCIsImFsZXNz''@;'; put 'put ''YW5kcmlhLml0IiwiYWx0by1hZGlnZS5pdCIsImFsdG9hZGlnZS5pdCIsImFuLml0IiwiYW5jb25hLml0IiwiYW5kcmlhLWJhcmxldHRhLXRyYW5pLml0IiwiYW5kcmlhLXRyYW5pLWJhcmxldHRhLml0IiwiYW5kcmlhYmFybGV0dGF0cmFuaS5pdCIsImFuZHJpYXRyYW5pYmFybGV0dGEuaXQi''@;'; put 'put ''LCJhby5pdCIsImFvc3RhLml0IiwiYW9zdGUuaXQiLCJhcC5pdCIsImFxLml0IiwiYXF1aWxhLml0IiwiYXIuaXQiLCJhcmV6em8uaXQiLCJhc2NvbGktcGljZW5vLml0IiwiYXNjb2xpcGljZW5vLml0IiwiYXN0aS5pdCIsImF0Lml0IiwiYXYuaXQiLCJhdmVsbGluby5pdCIsImJhLml0Iiwi''@;'; put 'put ''YmFsc2FuLXN1ZHRpcm9sLml0IiwiYmFsc2FuLXNceGZjZHRpcm9sLml0IiwiYmFsc2FuLXN1ZWR0aXJvbC5pdCIsImJhbHNhbi5pdCIsImJhcmkuaXQiLCJiYXJsZXR0YS10cmFuaS1hbmRyaWEuaXQiLCJiYXJsZXR0YXRyYW5pYW5kcmlhLml0IiwiYmVsbHVuby5pdCIsImJlbmV2ZW50by5p''@;'; put 'put ''dCIsImJlcmdhbW8uaXQiLCJiZy5pdCIsImJpLml0IiwiYmllbGxhLml0IiwiYmwuaXQiLCJibi5pdCIsImJvLml0IiwiYm9sb2duYS5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm9semFuby5pdCIsImJvemVuLXN1ZHRpcm9sLml0IiwiYm96ZW4tc1x4ZmNkdGlyb2wuaXQiLCJib3pl''@;'; put 'put ''bi1zdWVkdGlyb2wuaXQiLCJib3plbi5pdCIsImJyLml0IiwiYnJlc2NpYS5pdCIsImJyaW5kaXNpLml0IiwiYnMuaXQiLCJidC5pdCIsImJ1bHNhbi1zdWR0aXJvbC5pdCIsImJ1bHNhbi1zXHhmY2R0aXJvbC5pdCIsImJ1bHNhbi1zdWVkdGlyb2wuaXQiLCJidWxzYW4uaXQiLCJiei5pdCIs''@;'; put 'put ''ImNhLml0IiwiY2FnbGlhcmkuaXQiLCJjYWx0YW5pc3NldHRhLml0IiwiY2FtcGlkYW5vLW1lZGlvLml0IiwiY2FtcGlkYW5vbWVkaW8uaXQiLCJjYW1wb2Jhc3NvLml0IiwiY2FyYm9uaWEtaWdsZXNpYXMuaXQiLCJjYXJib25pYWlnbGVzaWFzLml0IiwiY2FycmFyYS1tYXNzYS5pdCIsImNh''@;'; put 'put ''cnJhcmFtYXNzYS5pdCIsImNhc2VydGEuaXQiLCJjYXRhbmlhLml0IiwiY2F0YW56YXJvLml0IiwiY2IuaXQiLCJjZS5pdCIsImNlc2VuYS1mb3JsaS5pdCIsImNlc2VuYS1mb3JsXHhlYy5pdCIsImNlc2VuYWZvcmxpLml0IiwiY2VzZW5hZm9ybFx4ZWMuaXQiLCJjaC5pdCIsImNoaWV0aS5p''@;'; put 'put ''dCIsImNpLml0IiwiY2wuaXQiLCJjbi5pdCIsImNvLml0IiwiY29tby5pdCIsImNvc2VuemEuaXQiLCJjci5pdCIsImNyZW1vbmEuaXQiLCJjcm90b25lLml0IiwiY3MuaXQiLCJjdC5pdCIsImN1bmVvLml0IiwiY3ouaXQiLCJkZWxsLW9nbGlhc3RyYS5pdCIsImRlbGxvZ2xpYXN0cmEuaXQi''@;'; put 'put ''LCJlbi5pdCIsImVubmEuaXQiLCJmYy5pdCIsImZlLml0IiwiZmVybW8uaXQiLCJmZXJyYXJhLml0IiwiZmcuaXQiLCJmaS5pdCIsImZpcmVuemUuaXQiLCJmbG9yZW5jZS5pdCIsImZtLml0IiwiZm9nZ2lhLml0IiwiZm9ybGktY2VzZW5hLml0IiwiZm9ybFx4ZWMtY2VzZW5hLml0IiwiZm9y''@;'; put 'put ''bGljZXNlbmEuaXQiLCJmb3JsXHhlY2Nlc2VuYS5pdCIsImZyLml0IiwiZnJvc2lub25lLml0IiwiZ2UuaXQiLCJnZW5vYS5pdCIsImdlbm92YS5pdCIsImdvLml0IiwiZ29yaXppYS5pdCIsImdyLml0IiwiZ3Jvc3NldG8uaXQiLCJpZ2xlc2lhcy1jYXJib25pYS5pdCIsImlnbGVzaWFzY2Fy''@;'; put 'put ''Ym9uaWEuaXQiLCJpbS5pdCIsImltcGVyaWEuaXQiLCJpcy5pdCIsImlzZXJuaWEuaXQiLCJrci5pdCIsImxhLXNwZXppYS5pdCIsImxhcXVpbGEuaXQiLCJsYXNwZXppYS5pdCIsImxhdGluYS5pdCIsImxjLml0IiwibGUuaXQiLCJsZWNjZS5pdCIsImxlY2NvLml0IiwibGkuaXQiLCJsaXZv''@;'; put 'put ''cm5vLml0IiwibG8uaXQiLCJsb2RpLml0IiwibHQuaXQiLCJsdS5pdCIsImx1Y2NhLml0IiwibWFjZXJhdGEuaXQiLCJtYW50b3ZhLml0IiwibWFzc2EtY2FycmFyYS5pdCIsIm1hc3NhY2FycmFyYS5pdCIsIm1hdGVyYS5pdCIsIm1iLml0IiwibWMuaXQiLCJtZS5pdCIsIm1lZGlvLWNhbXBp''@;'; put 'put ''ZGFuby5pdCIsIm1lZGlvY2FtcGlkYW5vLml0IiwibWVzc2luYS5pdCIsIm1pLml0IiwibWlsYW4uaXQiLCJtaWxhbm8uaXQiLCJtbi5pdCIsIm1vLml0IiwibW9kZW5hLml0IiwibW9uemEtYnJpYW56YS5pdCIsIm1vbnphLWUtZGVsbGEtYnJpYW56YS5pdCIsIm1vbnphLml0IiwibW9uemFi''@;'; put 'put ''cmlhbnphLml0IiwibW9uemFlYnJpYW56YS5pdCIsIm1vbnphZWRlbGxhYnJpYW56YS5pdCIsIm1zLml0IiwibXQuaXQiLCJuYS5pdCIsIm5hcGxlcy5pdCIsIm5hcG9saS5pdCIsIm5vLml0Iiwibm92YXJhLml0IiwibnUuaXQiLCJudW9yby5pdCIsIm9nLml0Iiwib2dsaWFzdHJhLml0Iiwi''@;'; put 'put ''b2xiaWEtdGVtcGlvLml0Iiwib2xiaWF0ZW1waW8uaXQiLCJvci5pdCIsIm9yaXN0YW5vLml0Iiwib3QuaXQiLCJwYS5pdCIsInBhZG92YS5pdCIsInBhZHVhLml0IiwicGFsZXJtby5pdCIsInBhcm1hLml0IiwicGF2aWEuaXQiLCJwYy5pdCIsInBkLml0IiwicGUuaXQiLCJwZXJ1Z2lhLml0''@;'; put 'put ''IiwicGVzYXJvLXVyYmluby5pdCIsInBlc2Fyb3VyYmluby5pdCIsInBlc2NhcmEuaXQiLCJwZy5pdCIsInBpLml0IiwicGlhY2VuemEuaXQiLCJwaXNhLml0IiwicGlzdG9pYS5pdCIsInBuLml0IiwicG8uaXQiLCJwb3JkZW5vbmUuaXQiLCJwb3RlbnphLml0IiwicHIuaXQiLCJwcmF0by5p''@;'; put 'put ''dCIsInB0Lml0IiwicHUuaXQiLCJwdi5pdCIsInB6Lml0IiwicmEuaXQiLCJyYWd1c2EuaXQiLCJyYXZlbm5hLml0IiwicmMuaXQiLCJyZS5pdCIsInJlZ2dpby1jYWxhYnJpYS5pdCIsInJlZ2dpby1lbWlsaWEuaXQiLCJyZWdnaW9jYWxhYnJpYS5pdCIsInJlZ2dpb2VtaWxpYS5pdCIsInJn''@;'; put 'put ''Lml0IiwicmkuaXQiLCJyaWV0aS5pdCIsInJpbWluaS5pdCIsInJtLml0Iiwicm4uaXQiLCJyby5pdCIsInJvbWEuaXQiLCJyb21lLml0Iiwicm92aWdvLml0Iiwic2EuaXQiLCJzYWxlcm5vLml0Iiwic2Fzc2FyaS5pdCIsInNhdm9uYS5pdCIsInNpLml0Iiwic2llbmEuaXQiLCJzaXJhY3Vz''@;'; put 'put ''YS5pdCIsInNvLml0Iiwic29uZHJpby5pdCIsInNwLml0Iiwic3IuaXQiLCJzcy5pdCIsInN1ZWR0aXJvbC5pdCIsInNceGZjZHRpcm9sLml0Iiwic3YuaXQiLCJ0YS5pdCIsInRhcmFudG8uaXQiLCJ0ZS5pdCIsInRlbXBpby1vbGJpYS5pdCIsInRlbXBpb29sYmlhLml0IiwidGVyYW1vLml0''@;'; put 'put ''IiwidGVybmkuaXQiLCJ0bi5pdCIsInRvLml0IiwidG9yaW5vLml0IiwidHAuaXQiLCJ0ci5pdCIsInRyYW5pLWFuZHJpYS1iYXJsZXR0YS5pdCIsInRyYW5pLWJhcmxldHRhLWFuZHJpYS5pdCIsInRyYW5pYW5kcmlhYmFybGV0dGEuaXQiLCJ0cmFuaWJhcmxldHRhYW5kcmlhLml0IiwidHJh''@;'; put 'put ''cGFuaS5pdCIsInRyZW50by5pdCIsInRyZXZpc28uaXQiLCJ0cmllc3RlLml0IiwidHMuaXQiLCJ0dXJpbi5pdCIsInR2Lml0IiwidWQuaXQiLCJ1ZGluZS5pdCIsInVyYmluby1wZXNhcm8uaXQiLCJ1cmJpbm9wZXNhcm8uaXQiLCJ2YS5pdCIsInZhcmVzZS5pdCIsInZiLml0IiwidmMuaXQi''@;'; put 'put ''LCJ2ZS5pdCIsInZlbmV6aWEuaXQiLCJ2ZW5pY2UuaXQiLCJ2ZXJiYW5pYS5pdCIsInZlcmNlbGxpLml0IiwidmVyb25hLml0IiwidmkuaXQiLCJ2aWJvLXZhbGVudGlhLml0Iiwidmlib3ZhbGVudGlhLml0IiwidmljZW56YS5pdCIsInZpdGVyYm8uaXQiLCJ2ci5pdCIsInZzLml0IiwidnQu''@;'; put 'put ''aXQiLCJ2di5pdCIsImplIiwiY28uamUiLCJuZXQuamUiLCJvcmcuamUiLCIqLmptIiwiam8iLCJjb20uam8iLCJvcmcuam8iLCJuZXQuam8iLCJlZHUuam8iLCJzY2guam8iLCJnb3Yuam8iLCJtaWwuam8iLCJuYW1lLmpvIiwiam9icyIsImpwIiwiYWMuanAiLCJhZC5qcCIsImNvLmpwIiwi''@;'; put 'put ''ZWQuanAiLCJnby5qcCIsImdyLmpwIiwibGcuanAiLCJuZS5qcCIsIm9yLmpwIiwiYWljaGkuanAiLCJha2l0YS5qcCIsImFvbW9yaS5qcCIsImNoaWJhLmpwIiwiZWhpbWUuanAiLCJmdWt1aS5qcCIsImZ1a3Vva2EuanAiLCJmdWt1c2hpbWEuanAiLCJnaWZ1LmpwIiwiZ3VubWEuanAiLCJo''@;'; put 'put ''aXJvc2hpbWEuanAiLCJob2trYWlkby5qcCIsImh5b2dvLmpwIiwiaWJhcmFraS5qcCIsImlzaGlrYXdhLmpwIiwiaXdhdGUuanAiLCJrYWdhd2EuanAiLCJrYWdvc2hpbWEuanAiLCJrYW5hZ2F3YS5qcCIsImtvY2hpLmpwIiwia3VtYW1vdG8uanAiLCJreW90by5qcCIsIm1pZS5qcCIsIm1p''@;'; put 'put ''eWFnaS5qcCIsIm1peWF6YWtpLmpwIiwibmFnYW5vLmpwIiwibmFnYXNha2kuanAiLCJuYXJhLmpwIiwibmlpZ2F0YS5qcCIsIm9pdGEuanAiLCJva2F5YW1hLmpwIiwib2tpbmF3YS5qcCIsIm9zYWthLmpwIiwic2FnYS5qcCIsInNhaXRhbWEuanAiLCJzaGlnYS5qcCIsInNoaW1hbmUuanAi''@;'; put 'put ''LCJzaGl6dW9rYS5qcCIsInRvY2hpZ2kuanAiLCJ0b2t1c2hpbWEuanAiLCJ0b2t5by5qcCIsInRvdHRvcmkuanAiLCJ0b3lhbWEuanAiLCJ3YWtheWFtYS5qcCIsInlhbWFnYXRhLmpwIiwieWFtYWd1Y2hpLmpwIiwieWFtYW5hc2hpLmpwIiwiXHU2ODAzXHU2NzI4LmpwIiwiXHU2MTFiXHU3''@;'; put 'put ''N2U1LmpwIiwiXHU2MTFiXHU1YTliLmpwIiwiXHU1MTc1XHU1ZWFiLmpwIiwiXHU3MThhXHU2NzJjLmpwIiwiXHU4MzI4XHU1N2NlLmpwIiwiXHU1MzE3XHU2ZDc3XHU5MDUzLmpwIiwiXHU1MzQzXHU4NDQ5LmpwIiwiXHU1NDhjXHU2YjRjXHU1YzcxLmpwIiwiXHU5NTc3XHU1ZDBlLmpwIiwi''@;'; put 'put ''XHU5NTc3XHU5MWNlLmpwIiwiXHU2NWIwXHU2ZjVmLmpwIiwiXHU5NzUyXHU2OGVlLmpwIiwiXHU5NzU5XHU1Y2ExLmpwIiwiXHU2NzcxXHU0ZWFjLmpwIiwiXHU3N2YzXHU1ZGRkLmpwIiwiXHU1N2ZjXHU3Mzg5LmpwIiwiXHU0ZTA5XHU5MWNkLmpwIiwiXHU0ZWFjXHU5MGZkLmpwIiwiXHU0''@;'; put 'put ''ZjUwXHU4Y2MwLmpwIiwiXHU1OTI3XHU1MjA2LmpwIiwiXHU1OTI3XHU5NjJhLmpwIiwiXHU1OTQ4XHU4MjZmLmpwIiwiXHU1YmFlXHU1N2NlLmpwIiwiXHU1YmFlXHU1ZDBlLmpwIiwiXHU1YmNjXHU1YzcxLmpwIiwiXHU1YzcxXHU1M2UzLmpwIiwiXHU1YzcxXHU1ZjYyLmpwIiwiXHU1Yzcx''@;'; put 'put ''XHU2OGE4LmpwIiwiXHU1Y2E5XHU2MjRiLmpwIiwiXHU1YzkwXHU5NjFjLmpwIiwiXHU1Y2ExXHU1YzcxLmpwIiwiXHU1Y2Y2XHU2ODM5LmpwIiwiXHU1ZTgzXHU1Y2Y2LmpwIiwiXHU1ZmIzXHU1Y2Y2LmpwIiwiXHU2Yzk2XHU3ZTA0LmpwIiwiXHU2ZWNiXHU4Y2MwLmpwIiwiXHU3OTVlXHU1''@;'; put 'put ''OTQ4XHU1ZGRkLmpwIiwiXHU3OThmXHU0ZTk1LmpwIiwiXHU3OThmXHU1Y2ExLmpwIiwiXHU3OThmXHU1Y2Y2LmpwIiwiXHU3OWNiXHU3NTMwLmpwIiwiXHU3ZmE0XHU5OWFjLmpwIiwiXHU5OTk5XHU1ZGRkLmpwIiwiXHU5YWQ4XHU3N2U1LmpwIiwiXHU5Y2U1XHU1M2Q2LmpwIiwiXHU5ZTdm''@;'; put 'put ''XHU1MTUwXHU1Y2Y2LmpwIiwiKi5rYXdhc2FraS5qcCIsIioua2l0YWt5dXNodS5qcCIsIioua29iZS5qcCIsIioubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIqLnlva29oYW1hLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwi''@;'; put 'put ''IWNpdHkua29iZS5qcCIsIiFjaXR5Lm5hZ295YS5qcCIsIiFjaXR5LnNhcHBvcm8uanAiLCIhY2l0eS5zZW5kYWkuanAiLCIhY2l0eS55b2tvaGFtYS5qcCIsImFpc2FpLmFpY2hpLmpwIiwiYW1hLmFpY2hpLmpwIiwiYW5qby5haWNoaS5qcCIsImFzdWtlLmFpY2hpLmpwIiwiY2hpcnl1LmFp''@;'; put 'put ''Y2hpLmpwIiwiY2hpdGEuYWljaGkuanAiLCJmdXNvLmFpY2hpLmpwIiwiZ2FtYWdvcmkuYWljaGkuanAiLCJoYW5kYS5haWNoaS5qcCIsImhhenUuYWljaGkuanAiLCJoZWtpbmFuLmFpY2hpLmpwIiwiaGlnYXNoaXVyYS5haWNoaS5qcCIsImljaGlub21peWEuYWljaGkuanAiLCJpbmF6YXdh''@;'; put 'put ''LmFpY2hpLmpwIiwiaW51eWFtYS5haWNoaS5qcCIsImlzc2hpa2kuYWljaGkuanAiLCJpd2FrdXJhLmFpY2hpLmpwIiwia2FuaWUuYWljaGkuanAiLCJrYXJpeWEuYWljaGkuanAiLCJrYXN1Z2FpLmFpY2hpLmpwIiwia2lyYS5haWNoaS5qcCIsImtpeW9zdS5haWNoaS5qcCIsImtvbWFraS5h''@;'; put 'put ''aWNoaS5qcCIsImtvbmFuLmFpY2hpLmpwIiwia290YS5haWNoaS5qcCIsIm1paGFtYS5haWNoaS5qcCIsIm1peW9zaGkuYWljaGkuanAiLCJuaXNoaW8uYWljaGkuanAiLCJuaXNzaGluLmFpY2hpLmpwIiwib2J1LmFpY2hpLmpwIiwib2d1Y2hpLmFpY2hpLmpwIiwib2hhcnUuYWljaGkuanAi''@;'; put 'put ''LCJva2F6YWtpLmFpY2hpLmpwIiwib3dhcmlhc2FoaS5haWNoaS5qcCIsInNldG8uYWljaGkuanAiLCJzaGlrYXRzdS5haWNoaS5qcCIsInNoaW5zaGlyby5haWNoaS5qcCIsInNoaXRhcmEuYWljaGkuanAiLCJ0YWhhcmEuYWljaGkuanAiLCJ0YWthaGFtYS5haWNoaS5qcCIsInRvYmlzaGlt''@;'; put 'put ''YS5haWNoaS5qcCIsInRvZWkuYWljaGkuanAiLCJ0b2dvLmFpY2hpLmpwIiwidG9rYWkuYWljaGkuanAiLCJ0b2tvbmFtZS5haWNoaS5qcCIsInRveW9ha2UuYWljaGkuanAiLCJ0b3lvaGFzaGkuYWljaGkuanAiLCJ0b3lva2F3YS5haWNoaS5qcCIsInRveW9uZS5haWNoaS5qcCIsInRveW90''@;'; put 'put ''YS5haWNoaS5qcCIsInRzdXNoaW1hLmFpY2hpLmpwIiwieWF0b21pLmFpY2hpLmpwIiwiYWtpdGEuYWtpdGEuanAiLCJkYWlzZW4uYWtpdGEuanAiLCJmdWppc2F0by5ha2l0YS5qcCIsImdvam9tZS5ha2l0YS5qcCIsImhhY2hpcm9nYXRhLmFraXRhLmpwIiwiaGFwcG91LmFraXRhLmpwIiwi''@;'; put 'put ''aGlnYXNoaW5hcnVzZS5ha2l0YS5qcCIsImhvbmpvLmFraXRhLmpwIiwiaG9uanlvLmFraXRhLmpwIiwiaWthd2EuYWtpdGEuanAiLCJrYW1pa29hbmkuYWtpdGEuanAiLCJrYW1pb2thLmFraXRhLmpwIiwia2F0YWdhbWkuYWtpdGEuanAiLCJrYXp1bm8uYWtpdGEuanAiLCJraXRhYWtpdGEu''@;'; put 'put ''YWtpdGEuanAiLCJrb3Nha2EuYWtpdGEuanAiLCJreW93YS5ha2l0YS5qcCIsIm1pc2F0by5ha2l0YS5qcCIsIm1pdGFuZS5ha2l0YS5qcCIsIm1vcml5b3NoaS5ha2l0YS5qcCIsIm5pa2Foby5ha2l0YS5qcCIsIm5vc2hpcm8uYWtpdGEuanAiLCJvZGF0ZS5ha2l0YS5qcCIsIm9nYS5ha2l0''@;'; put 'put ''YS5qcCIsIm9nYXRhLmFraXRhLmpwIiwic2VtYm9rdS5ha2l0YS5qcCIsInlva290ZS5ha2l0YS5qcCIsInl1cmlob25qby5ha2l0YS5qcCIsImFvbW9yaS5hb21vcmkuanAiLCJnb25vaGUuYW9tb3JpLmpwIiwiaGFjaGlub2hlLmFvbW9yaS5qcCIsImhhc2hpa2FtaS5hb21vcmkuanAiLCJo''@;'; put 'put ''aXJhbmFpLmFvbW9yaS5qcCIsImhpcm9zYWtpLmFvbW9yaS5qcCIsIml0YXlhbmFnaS5hb21vcmkuanAiLCJrdXJvaXNoaS5hb21vcmkuanAiLCJtaXNhd2EuYW9tb3JpLmpwIiwibXV0c3UuYW9tb3JpLmpwIiwibmFrYWRvbWFyaS5hb21vcmkuanAiLCJub2hlamkuYW9tb3JpLmpwIiwib2ly''@;'; put 'put ''YXNlLmFvbW9yaS5qcCIsIm93YW5pLmFvbW9yaS5qcCIsInJva3Vub2hlLmFvbW9yaS5qcCIsInNhbm5vaGUuYW9tb3JpLmpwIiwic2hpY2hpbm9oZS5hb21vcmkuanAiLCJzaGluZ28uYW9tb3JpLmpwIiwidGFra28uYW9tb3JpLmpwIiwidG93YWRhLmFvbW9yaS5qcCIsInRzdWdhcnUuYW9t''@;'; put 'put ''b3JpLmpwIiwidHN1cnV0YS5hb21vcmkuanAiLCJhYmlrby5jaGliYS5qcCIsImFzYWhpLmNoaWJhLmpwIiwiY2hvbmFuLmNoaWJhLmpwIiwiY2hvc2VpLmNoaWJhLmpwIiwiY2hvc2hpLmNoaWJhLmpwIiwiY2h1by5jaGliYS5qcCIsImZ1bmFiYXNoaS5jaGliYS5qcCIsImZ1dHRzdS5jaGli''@;'; put 'put ''YS5qcCIsImhhbmFtaWdhd2EuY2hpYmEuanAiLCJpY2hpaGFyYS5jaGliYS5qcCIsImljaGlrYXdhLmNoaWJhLmpwIiwiaWNoaW5vbWl5YS5jaGliYS5qcCIsImluemFpLmNoaWJhLmpwIiwiaXN1bWkuY2hpYmEuanAiLCJrYW1hZ2F5YS5jaGliYS5qcCIsImthbW9nYXdhLmNoaWJhLmpwIiwi''@;'; put 'put ''a2FzaGl3YS5jaGliYS5qcCIsImthdG9yaS5jaGliYS5qcCIsImthdHN1dXJhLmNoaWJhLmpwIiwia2ltaXRzdS5jaGliYS5qcCIsImtpc2FyYXp1LmNoaWJhLmpwIiwia296YWtpLmNoaWJhLmpwIiwia3VqdWt1cmkuY2hpYmEuanAiLCJreW9uYW4uY2hpYmEuanAiLCJtYXRzdWRvLmNoaWJh''@;'; put 'put ''LmpwIiwibWlkb3JpLmNoaWJhLmpwIiwibWloYW1hLmNoaWJhLmpwIiwibWluYW1pYm9zby5jaGliYS5qcCIsIm1vYmFyYS5jaGliYS5qcCIsIm11dHN1emF3YS5jaGliYS5qcCIsIm5hZ2FyYS5jaGliYS5qcCIsIm5hZ2FyZXlhbWEuY2hpYmEuanAiLCJuYXJhc2hpbm8uY2hpYmEuanAiLCJu''@;'; put 'put ''YXJpdGEuY2hpYmEuanAiLCJub2RhLmNoaWJhLmpwIiwib2FtaXNoaXJhc2F0by5jaGliYS5qcCIsIm9taWdhd2EuY2hpYmEuanAiLCJvbmp1a3UuY2hpYmEuanAiLCJvdGFraS5jaGliYS5qcCIsInNha2FlLmNoaWJhLmpwIiwic2FrdXJhLmNoaWJhLmpwIiwic2hpbW9mdXNhLmNoaWJhLmpw''@;'; put 'put ''Iiwic2hpcmFrby5jaGliYS5qcCIsInNoaXJvaS5jaGliYS5qcCIsInNoaXN1aS5jaGliYS5qcCIsInNvZGVnYXVyYS5jaGliYS5qcCIsInNvc2EuY2hpYmEuanAiLCJ0YWtvLmNoaWJhLmpwIiwidGF0ZXlhbWEuY2hpYmEuanAiLCJ0b2dhbmUuY2hpYmEuanAiLCJ0b2hub3Noby5jaGliYS5q''@;'; put 'put ''cCIsInRvbWlzYXRvLmNoaWJhLmpwIiwidXJheWFzdS5jaGliYS5qcCIsInlhY2hpbWF0YS5jaGliYS5qcCIsInlhY2hpeW8uY2hpYmEuanAiLCJ5b2thaWNoaWJhLmNoaWJhLmpwIiwieW9rb3NoaWJhaGlrYXJpLmNoaWJhLmpwIiwieW90c3VrYWlkby5jaGliYS5qcCIsImFpbmFuLmVoaW1l''@;'; put 'put ''LmpwIiwiaG9uYWkuZWhpbWUuanAiLCJpa2F0YS5laGltZS5qcCIsImltYWJhcmkuZWhpbWUuanAiLCJpeW8uZWhpbWUuanAiLCJrYW1pamltYS5laGltZS5qcCIsImtpaG9rdS5laGltZS5qcCIsImt1bWFrb2dlbi5laGltZS5qcCIsIm1hc2FraS5laGltZS5qcCIsIm1hdHN1bm8uZWhpbWUu''@;'; put 'put ''anAiLCJtYXRzdXlhbWEuZWhpbWUuanAiLCJuYW1pa2F0YS5laGltZS5qcCIsIm5paWhhbWEuZWhpbWUuanAiLCJvenUuZWhpbWUuanAiLCJzYWlqby5laGltZS5qcCIsInNlaXlvLmVoaW1lLmpwIiwic2hpa29rdWNodW8uZWhpbWUuanAiLCJ0b2JlLmVoaW1lLmpwIiwidG9vbi5laGltZS5q''@;'; put 'put ''cCIsInVjaGlrby5laGltZS5qcCIsInV3YWppbWEuZWhpbWUuanAiLCJ5YXdhdGFoYW1hLmVoaW1lLmpwIiwiZWNoaXplbi5mdWt1aS5qcCIsImVpaGVpamkuZnVrdWkuanAiLCJmdWt1aS5mdWt1aS5qcCIsImlrZWRhLmZ1a3VpLmpwIiwia2F0c3V5YW1hLmZ1a3VpLmpwIiwibWloYW1hLmZ1''@;'; put 'put ''a3VpLmpwIiwibWluYW1pZWNoaXplbi5mdWt1aS5qcCIsIm9iYW1hLmZ1a3VpLmpwIiwib2hpLmZ1a3VpLmpwIiwib25vLmZ1a3VpLmpwIiwic2FiYWUuZnVrdWkuanAiLCJzYWthaS5mdWt1aS5qcCIsInRha2FoYW1hLmZ1a3VpLmpwIiwidHN1cnVnYS5mdWt1aS5qcCIsIndha2FzYS5mdWt1''@;'; put 'put ''aS5qcCIsImFzaGl5YS5mdWt1b2thLmpwIiwiYnV6ZW4uZnVrdW9rYS5qcCIsImNoaWt1Z28uZnVrdW9rYS5qcCIsImNoaWt1aG8uZnVrdW9rYS5qcCIsImNoaWt1am8uZnVrdW9rYS5qcCIsImNoaWt1c2hpbm8uZnVrdW9rYS5qcCIsImNoaWt1emVuLmZ1a3Vva2EuanAiLCJjaHVvLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJkYXphaWZ1LmZ1a3Vva2EuanAiLCJmdWt1Y2hpLmZ1a3Vva2EuanAiLCJoYWthdGEuZnVrdW9rYS5qcCIsImhpZ2FzaGkuZnVrdW9rYS5qcCIsImhpcm9rYXdhLmZ1a3Vva2EuanAiLCJoaXNheWFtYS5mdWt1b2thLmpwIiwiaWl6dWthLmZ1a3Vva2EuanAiLCJpbmF0c3VraS5m''@;'; put 'put ''dWt1b2thLmpwIiwia2Foby5mdWt1b2thLmpwIiwia2FzdWdhLmZ1a3Vva2EuanAiLCJrYXN1eWEuZnVrdW9rYS5qcCIsImthd2FyYS5mdWt1b2thLmpwIiwia2Vpc2VuLmZ1a3Vva2EuanAiLCJrb2dhLmZ1a3Vva2EuanAiLCJrdXJhdGUuZnVrdW9rYS5qcCIsImt1cm9naS5mdWt1b2thLmpw''@;'; put 'put ''Iiwia3VydW1lLmZ1a3Vva2EuanAiLCJtaW5hbWkuZnVrdW9rYS5qcCIsIm1peWFrby5mdWt1b2thLmpwIiwibWl5YW1hLmZ1a3Vva2EuanAiLCJtaXlhd2FrYS5mdWt1b2thLmpwIiwibWl6dW1ha2kuZnVrdW9rYS5qcCIsIm11bmFrYXRhLmZ1a3Vva2EuanAiLCJuYWthZ2F3YS5mdWt1b2th''@;'; put 'put ''LmpwIiwibmFrYW1hLmZ1a3Vva2EuanAiLCJuaXNoaS5mdWt1b2thLmpwIiwibm9nYXRhLmZ1a3Vva2EuanAiLCJvZ29yaS5mdWt1b2thLmpwIiwib2thZ2FraS5mdWt1b2thLmpwIiwib2thd2EuZnVrdW9rYS5qcCIsIm9raS5mdWt1b2thLmpwIiwib211dGEuZnVrdW9rYS5qcCIsIm9uZ2Eu''@;'; put 'put ''ZnVrdW9rYS5qcCIsIm9ub2pvLmZ1a3Vva2EuanAiLCJvdG8uZnVrdW9rYS5qcCIsInNhaWdhd2EuZnVrdW9rYS5qcCIsInNhc2FndXJpLmZ1a3Vva2EuanAiLCJzaGluZ3UuZnVrdW9rYS5qcCIsInNoaW55b3NoaXRvbWkuZnVrdW9rYS5qcCIsInNob25haS5mdWt1b2thLmpwIiwic29lZGEu''@;'; put 'put ''ZnVrdW9rYS5qcCIsInN1ZS5mdWt1b2thLmpwIiwidGFjaGlhcmFpLmZ1a3Vva2EuanAiLCJ0YWdhd2EuZnVrdW9rYS5qcCIsInRha2F0YS5mdWt1b2thLmpwIiwidG9oby5mdWt1b2thLmpwIiwidG95b3RzdS5mdWt1b2thLmpwIiwidHN1aWtpLmZ1a3Vva2EuanAiLCJ1a2loYS5mdWt1b2th''@;'; put 'put ''LmpwIiwidW1pLmZ1a3Vva2EuanAiLCJ1c3VpLmZ1a3Vva2EuanAiLCJ5YW1hZGEuZnVrdW9rYS5qcCIsInlhbWUuZnVrdW9rYS5qcCIsInlhbmFnYXdhLmZ1a3Vva2EuanAiLCJ5dWt1aGFzaGkuZnVrdW9rYS5qcCIsImFpenViYW5nZS5mdWt1c2hpbWEuanAiLCJhaXp1bWlzYXRvLmZ1a3Vz''@;'; put 'put ''aGltYS5qcCIsImFpenV3YWthbWF0c3UuZnVrdXNoaW1hLmpwIiwiYXNha2F3YS5mdWt1c2hpbWEuanAiLCJiYW5kYWkuZnVrdXNoaW1hLmpwIiwiZGF0ZS5mdWt1c2hpbWEuanAiLCJmdWt1c2hpbWEuZnVrdXNoaW1hLmpwIiwiZnVydWRvbm8uZnVrdXNoaW1hLmpwIiwiZnV0YWJhLmZ1a3Vz''@;'; put 'put ''aGltYS5qcCIsImhhbmF3YS5mdWt1c2hpbWEuanAiLCJoaWdhc2hpLmZ1a3VzaGltYS5qcCIsImhpcmF0YS5mdWt1c2hpbWEuanAiLCJoaXJvbm8uZnVrdXNoaW1hLmpwIiwiaWl0YXRlLmZ1a3VzaGltYS5qcCIsImluYXdhc2hpcm8uZnVrdXNoaW1hLmpwIiwiaXNoaWthd2EuZnVrdXNoaW1h''@;'; put 'put ''LmpwIiwiaXdha2kuZnVrdXNoaW1hLmpwIiwiaXp1bWl6YWtpLmZ1a3VzaGltYS5qcCIsImthZ2FtaWlzaGkuZnVrdXNoaW1hLmpwIiwia2FuZXlhbWEuZnVrdXNoaW1hLmpwIiwia2F3YW1hdGEuZnVrdXNoaW1hLmpwIiwia2l0YWthdGEuZnVrdXNoaW1hLmpwIiwia2l0YXNoaW9iYXJhLmZ1''@;'; put 'put ''a3VzaGltYS5qcCIsImtvb3JpLmZ1a3VzaGltYS5qcCIsImtvcml5YW1hLmZ1a3VzaGltYS5qcCIsImt1bmltaS5mdWt1c2hpbWEuanAiLCJtaWhhcnUuZnVrdXNoaW1hLmpwIiwibWlzaGltYS5mdWt1c2hpbWEuanAiLCJuYW1pZS5mdWt1c2hpbWEuanAiLCJuYW5nby5mdWt1c2hpbWEuanAi''@;'; put 'put ''LCJuaXNoaWFpenUuZnVrdXNoaW1hLmpwIiwibmlzaGlnby5mdWt1c2hpbWEuanAiLCJva3VtYS5mdWt1c2hpbWEuanAiLCJvbW90ZWdvLmZ1a3VzaGltYS5qcCIsIm9uby5mdWt1c2hpbWEuanAiLCJvdGFtYS5mdWt1c2hpbWEuanAiLCJzYW1lZ2F3YS5mdWt1c2hpbWEuanAiLCJzaGltb2dv''@;'; put 'put ''LmZ1a3VzaGltYS5qcCIsInNoaXJha2F3YS5mdWt1c2hpbWEuanAiLCJzaG93YS5mdWt1c2hpbWEuanAiLCJzb21hLmZ1a3VzaGltYS5qcCIsInN1a2FnYXdhLmZ1a3VzaGltYS5qcCIsInRhaXNoaW4uZnVrdXNoaW1hLmpwIiwidGFtYWthd2EuZnVrdXNoaW1hLmpwIiwidGFuYWd1cmEuZnVr''@;'; put 'put ''dXNoaW1hLmpwIiwidGVuZWkuZnVrdXNoaW1hLmpwIiwieWFidWtpLmZ1a3VzaGltYS5qcCIsInlhbWF0by5mdWt1c2hpbWEuanAiLCJ5YW1hdHN1cmkuZnVrdXNoaW1hLmpwIiwieWFuYWl6dS5mdWt1c2hpbWEuanAiLCJ5dWdhd2EuZnVrdXNoaW1hLmpwIiwiYW5wYWNoaS5naWZ1LmpwIiwi''@;'; put 'put ''ZW5hLmdpZnUuanAiLCJnaWZ1LmdpZnUuanAiLCJnaW5hbi5naWZ1LmpwIiwiZ29kby5naWZ1LmpwIiwiZ3Vqby5naWZ1LmpwIiwiaGFzaGltYS5naWZ1LmpwIiwiaGljaGlzby5naWZ1LmpwIiwiaGlkYS5naWZ1LmpwIiwiaGlnYXNoaXNoaXJha2F3YS5naWZ1LmpwIiwiaWJpZ2F3YS5naWZ1''@;'; put 'put ''LmpwIiwiaWtlZGEuZ2lmdS5qcCIsImtha2FtaWdhaGFyYS5naWZ1LmpwIiwia2FuaS5naWZ1LmpwIiwia2FzYWhhcmEuZ2lmdS5qcCIsImthc2FtYXRzdS5naWZ1LmpwIiwia2F3YXVlLmdpZnUuanAiLCJraXRhZ2F0YS5naWZ1LmpwIiwibWluby5naWZ1LmpwIiwibWlub2thbW8uZ2lmdS5q''@;'; put 'put ''cCIsIm1pdGFrZS5naWZ1LmpwIiwibWl6dW5hbWkuZ2lmdS5qcCIsIm1vdG9zdS5naWZ1LmpwIiwibmFrYXRzdWdhd2EuZ2lmdS5qcCIsIm9nYWtpLmdpZnUuanAiLCJzYWthaG9naS5naWZ1LmpwIiwic2VraS5naWZ1LmpwIiwic2VraWdhaGFyYS5naWZ1LmpwIiwic2hpcmFrYXdhLmdpZnUu''@;'; put 'put ''anAiLCJ0YWppbWkuZ2lmdS5qcCIsInRha2F5YW1hLmdpZnUuanAiLCJ0YXJ1aS5naWZ1LmpwIiwidG9raS5naWZ1LmpwIiwidG9taWthLmdpZnUuanAiLCJ3YW5vdWNoaS5naWZ1LmpwIiwieWFtYWdhdGEuZ2lmdS5qcCIsInlhb3RzdS5naWZ1LmpwIiwieW9yby5naWZ1LmpwIiwiYW5uYWth''@;'; put 'put ''Lmd1bm1hLmpwIiwiY2hpeW9kYS5ndW5tYS5qcCIsImZ1amlva2EuZ3VubWEuanAiLCJoaWdhc2hpYWdhdHN1bWEuZ3VubWEuanAiLCJpc2VzYWtpLmd1bm1hLmpwIiwiaXRha3VyYS5ndW5tYS5qcCIsImthbm5hLmd1bm1hLmpwIiwia2FucmEuZ3VubWEuanAiLCJrYXRhc2hpbmEuZ3VubWEu''@;'; put 'put ''anAiLCJrYXdhYmEuZ3VubWEuanAiLCJraXJ5dS5ndW5tYS5qcCIsImt1c2F0c3UuZ3VubWEuanAiLCJtYWViYXNoaS5ndW5tYS5qcCIsIm1laXdhLmd1bm1hLmpwIiwibWlkb3JpLmd1bm1hLmpwIiwibWluYWthbWkuZ3VubWEuanAiLCJuYWdhbm9oYXJhLmd1bm1hLmpwIiwibmFrYW5vam8u''@;'; put 'put ''Z3VubWEuanAiLCJuYW5tb2t1Lmd1bm1hLmpwIiwibnVtYXRhLmd1bm1hLmpwIiwib2l6dW1pLmd1bm1hLmpwIiwib3JhLmd1bm1hLmpwIiwib3RhLmd1bm1hLmpwIiwic2hpYnVrYXdhLmd1bm1hLmpwIiwic2hpbW9uaXRhLmd1bm1hLmpwIiwic2hpbnRvLmd1bm1hLmpwIiwic2hvd2EuZ3Vu''@;'; put 'put ''bWEuanAiLCJ0YWthc2FraS5ndW5tYS5qcCIsInRha2F5YW1hLmd1bm1hLmpwIiwidGFtYW11cmEuZ3VubWEuanAiLCJ0YXRlYmF5YXNoaS5ndW5tYS5qcCIsInRvbWlva2EuZ3VubWEuanAiLCJ0c3VraXlvbm8uZ3VubWEuanAiLCJ0c3VtYWdvaS5ndW5tYS5qcCIsInVlbm8uZ3VubWEuanAi''@;'; put 'put ''LCJ5b3NoaW9rYS5ndW5tYS5qcCIsImFzYW1pbmFtaS5oaXJvc2hpbWEuanAiLCJkYWl3YS5oaXJvc2hpbWEuanAiLCJldGFqaW1hLmhpcm9zaGltYS5qcCIsImZ1Y2h1Lmhpcm9zaGltYS5qcCIsImZ1a3V5YW1hLmhpcm9zaGltYS5qcCIsImhhdHN1a2FpY2hpLmhpcm9zaGltYS5qcCIsImhp''@;'; put 'put ''Z2FzaGloaXJvc2hpbWEuaGlyb3NoaW1hLmpwIiwiaG9uZ28uaGlyb3NoaW1hLmpwIiwiamluc2VraWtvZ2VuLmhpcm9zaGltYS5qcCIsImthaXRhLmhpcm9zaGltYS5qcCIsImt1aS5oaXJvc2hpbWEuanAiLCJrdW1hbm8uaGlyb3NoaW1hLmpwIiwia3VyZS5oaXJvc2hpbWEuanAiLCJtaWhh''@;'; put 'put ''cmEuaGlyb3NoaW1hLmpwIiwibWl5b3NoaS5oaXJvc2hpbWEuanAiLCJuYWthLmhpcm9zaGltYS5qcCIsIm9ub21pY2hpLmhpcm9zaGltYS5qcCIsIm9zYWtpa2FtaWppbWEuaGlyb3NoaW1hLmpwIiwib3Rha2UuaGlyb3NoaW1hLmpwIiwic2FrYS5oaXJvc2hpbWEuanAiLCJzZXJhLmhpcm9z''@;'; put 'put ''aGltYS5qcCIsInNlcmFuaXNoaS5oaXJvc2hpbWEuanAiLCJzaGluaWNoaS5oaXJvc2hpbWEuanAiLCJzaG9iYXJhLmhpcm9zaGltYS5qcCIsInRha2VoYXJhLmhpcm9zaGltYS5qcCIsImFiYXNoaXJpLmhva2thaWRvLmpwIiwiYWJpcmEuaG9ra2FpZG8uanAiLCJhaWJldHN1Lmhva2thaWRv''@;'; put 'put ''LmpwIiwiYWthYmlyYS5ob2trYWlkby5qcCIsImFra2VzaGkuaG9ra2FpZG8uanAiLCJhc2FoaWthd2EuaG9ra2FpZG8uanAiLCJhc2hpYmV0c3UuaG9ra2FpZG8uanAiLCJhc2hvcm8uaG9ra2FpZG8uanAiLCJhc3NhYnUuaG9ra2FpZG8uanAiLCJhdHN1bWEuaG9ra2FpZG8uanAiLCJiaWJh''@;'; put 'put ''aS5ob2trYWlkby5qcCIsImJpZWkuaG9ra2FpZG8uanAiLCJiaWZ1a2EuaG9ra2FpZG8uanAiLCJiaWhvcm8uaG9ra2FpZG8uanAiLCJiaXJhdG9yaS5ob2trYWlkby5qcCIsImNoaXBwdWJldHN1Lmhva2thaWRvLmpwIiwiY2hpdG9zZS5ob2trYWlkby5qcCIsImRhdGUuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJlYmV0c3UuaG9ra2FpZG8uanAiLCJlbWJldHN1Lmhva2thaWRvLmpwIiwiZW5pd2EuaG9ra2FpZG8uanAiLCJlcmltby5ob2trYWlkby5qcCIsImVzYW4uaG9ra2FpZG8uanAiLCJlc2FzaGkuaG9ra2FpZG8uanAiLCJmdWthZ2F3YS5ob2trYWlkby5qcCIsImZ1a3VzaGltYS5ob2trYWlk''@;'; put 'put ''by5qcCIsImZ1cmFuby5ob2trYWlkby5qcCIsImZ1cnViaXJhLmhva2thaWRvLmpwIiwiaGFib3JvLmhva2thaWRvLmpwIiwiaGFrb2RhdGUuaG9ra2FpZG8uanAiLCJoYW1hdG9uYmV0c3UuaG9ra2FpZG8uanAiLCJoaWRha2EuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2FndXJhLmhva2thaWRv''@;'; put 'put ''LmpwIiwiaGlnYXNoaWthd2EuaG9ra2FpZG8uanAiLCJoaXJvby5ob2trYWlkby5qcCIsImhva3VyeXUuaG9ra2FpZG8uanAiLCJob2t1dG8uaG9ra2FpZG8uanAiLCJob25iZXRzdS5ob2trYWlkby5qcCIsImhvcm9rYW5haS5ob2trYWlkby5qcCIsImhvcm9ub2JlLmhva2thaWRvLmpwIiwi''@;'; put 'put ''aWtlZGEuaG9ra2FpZG8uanAiLCJpbWFrYW5lLmhva2thaWRvLmpwIiwiaXNoaWthcmkuaG9ra2FpZG8uanAiLCJpd2FtaXphd2EuaG9ra2FpZG8uanAiLCJpd2FuYWkuaG9ra2FpZG8uanAiLCJrYW1pZnVyYW5vLmhva2thaWRvLmpwIiwia2FtaWthd2EuaG9ra2FpZG8uanAiLCJrYW1pc2hp''@;'; put 'put ''aG9yby5ob2trYWlkby5qcCIsImthbWlzdW5hZ2F3YS5ob2trYWlkby5qcCIsImthbW9lbmFpLmhva2thaWRvLmpwIiwia2F5YWJlLmhva2thaWRvLmpwIiwia2VtYnVjaGkuaG9ra2FpZG8uanAiLCJraWtvbmFpLmhva2thaWRvLmpwIiwia2ltb2JldHN1Lmhva2thaWRvLmpwIiwia2l0YWhp''@;'; put 'put ''cm9zaGltYS5ob2trYWlkby5qcCIsImtpdGFtaS5ob2trYWlkby5qcCIsImtpeW9zYXRvLmhva2thaWRvLmpwIiwia29zaGltaXp1Lmhva2thaWRvLmpwIiwia3VubmVwcHUuaG9ra2FpZG8uanAiLCJrdXJpeWFtYS5ob2trYWlkby5qcCIsImt1cm9tYXRzdW5haS5ob2trYWlkby5qcCIsImt1''@;'; put 'put ''c2hpcm8uaG9ra2FpZG8uanAiLCJrdXRjaGFuLmhva2thaWRvLmpwIiwia3lvd2EuaG9ra2FpZG8uanAiLCJtYXNoaWtlLmhva2thaWRvLmpwIiwibWF0c3VtYWUuaG9ra2FpZG8uanAiLCJtaWthc2EuaG9ra2FpZG8uanAiLCJtaW5hbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJtb21iZXRzdS5o''@;'; put 'put ''b2trYWlkby5qcCIsIm1vc2V1c2hpLmhva2thaWRvLmpwIiwibXVrYXdhLmhva2thaWRvLmpwIiwibXVyb3Jhbi5ob2trYWlkby5qcCIsIm5haWUuaG9ra2FpZG8uanAiLCJuYWthZ2F3YS5ob2trYWlkby5qcCIsIm5ha2FzYXRzdW5haS5ob2trYWlkby5qcCIsIm5ha2F0b21iZXRzdS5ob2tr''@;'; put 'put ''YWlkby5qcCIsIm5hbmFlLmhva2thaWRvLmpwIiwibmFucG9yby5ob2trYWlkby5qcCIsIm5heW9yby5ob2trYWlkby5qcCIsIm5lbXVyby5ob2trYWlkby5qcCIsIm5paWthcHB1Lmhva2thaWRvLmpwIiwibmlraS5ob2trYWlkby5qcCIsIm5pc2hpb2tvcHBlLmhva2thaWRvLmpwIiwibm9i''@;'; put 'put ''b3JpYmV0c3UuaG9ra2FpZG8uanAiLCJudW1hdGEuaG9ra2FpZG8uanAiLCJvYmloaXJvLmhva2thaWRvLmpwIiwib2JpcmEuaG9ra2FpZG8uanAiLCJva2V0by5ob2trYWlkby5qcCIsIm9rb3BwZS5ob2trYWlkby5qcCIsIm90YXJ1Lmhva2thaWRvLmpwIiwib3RvYmUuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJvdG9mdWtlLmhva2thaWRvLmpwIiwib3RvaW5lcHB1Lmhva2thaWRvLmpwIiwib3VtdS5ob2trYWlkby5qcCIsIm96b3JhLmhva2thaWRvLmpwIiwicGlwcHUuaG9ra2FpZG8uanAiLCJyYW5rb3NoaS5ob2trYWlkby5qcCIsInJlYnVuLmhva2thaWRvLmpwIiwicmlrdWJldHN1Lmhva2th''@;'; put 'put ''aWRvLmpwIiwicmlzaGlyaS5ob2trYWlkby5qcCIsInJpc2hpcmlmdWppLmhva2thaWRvLmpwIiwic2Fyb21hLmhva2thaWRvLmpwIiwic2FydWZ1dHN1Lmhva2thaWRvLmpwIiwic2hha290YW4uaG9ra2FpZG8uanAiLCJzaGFyaS5ob2trYWlkby5qcCIsInNoaWJlY2hhLmhva2thaWRvLmpw''@;'; put 'put ''Iiwic2hpYmV0c3UuaG9ra2FpZG8uanAiLCJzaGlrYWJlLmhva2thaWRvLmpwIiwic2hpa2FvaS5ob2trYWlkby5qcCIsInNoaW1hbWFraS5ob2trYWlkby5qcCIsInNoaW1penUuaG9ra2FpZG8uanAiLCJzaGltb2thd2EuaG9ra2FpZG8uanAiLCJzaGluc2hpbm90c3UuaG9ra2FpZG8uanAi''@;'; put 'put ''LCJzaGludG9rdS5ob2trYWlkby5qcCIsInNoaXJhbnVrYS5ob2trYWlkby5qcCIsInNoaXJhb2kuaG9ra2FpZG8uanAiLCJzaGlyaXVjaGkuaG9ra2FpZG8uanAiLCJzb2JldHN1Lmhva2thaWRvLmpwIiwic3VuYWdhd2EuaG9ra2FpZG8uanAiLCJ0YWlraS5ob2trYWlkby5qcCIsInRha2Fz''@;'; put 'put ''dS5ob2trYWlkby5qcCIsInRha2lrYXdhLmhva2thaWRvLmpwIiwidGFraW5vdWUuaG9ra2FpZG8uanAiLCJ0ZXNoaWthZ2EuaG9ra2FpZG8uanAiLCJ0b2JldHN1Lmhva2thaWRvLmpwIiwidG9obWEuaG9ra2FpZG8uanAiLCJ0b21ha29tYWkuaG9ra2FpZG8uanAiLCJ0b21hcmkuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJ0b3lhLmhva2thaWRvLmpwIiwidG95YWtvLmhva2thaWRvLmpwIiwidG95b3RvbWkuaG9ra2FpZG8uanAiLCJ0b3lvdXJhLmhva2thaWRvLmpwIiwidHN1YmV0c3UuaG9ra2FpZG8uanAiLCJ0c3VraWdhdGEuaG9ra2FpZG8uanAiLCJ1cmFrYXdhLmhva2thaWRvLmpwIiwidXJh''@;'; put 'put ''dXN1Lmhva2thaWRvLmpwIiwidXJ5dS5ob2trYWlkby5qcCIsInV0YXNoaW5haS5ob2trYWlkby5qcCIsIndha2thbmFpLmhva2thaWRvLmpwIiwid2Fzc2FtdS5ob2trYWlkby5qcCIsInlha3Vtby5ob2trYWlkby5qcCIsInlvaWNoaS5ob2trYWlkby5qcCIsImFpb2kuaHlvZ28uanAiLCJh''@;'; put 'put ''a2FzaGkuaHlvZ28uanAiLCJha28uaHlvZ28uanAiLCJhbWFnYXNha2kuaHlvZ28uanAiLCJhb2dha2kuaHlvZ28uanAiLCJhc2Fnby5oeW9nby5qcCIsImFzaGl5YS5oeW9nby5qcCIsImF3YWppLmh5b2dvLmpwIiwiZnVrdXNha2kuaHlvZ28uanAiLCJnb3NoaWtpLmh5b2dvLmpwIiwiaGFy''@;'; put 'put ''aW1hLmh5b2dvLmpwIiwiaGltZWppLmh5b2dvLmpwIiwiaWNoaWthd2EuaHlvZ28uanAiLCJpbmFnYXdhLmh5b2dvLmpwIiwiaXRhbWkuaHlvZ28uanAiLCJrYWtvZ2F3YS5oeW9nby5qcCIsImthbWlnb3JpLmh5b2dvLmpwIiwia2FtaWthd2EuaHlvZ28uanAiLCJrYXNhaS5oeW9nby5qcCIs''@;'; put 'put ''Imthc3VnYS5oeW9nby5qcCIsImthd2FuaXNoaS5oeW9nby5qcCIsIm1pa2kuaHlvZ28uanAiLCJtaW5hbWlhd2FqaS5oeW9nby5qcCIsIm5pc2hpbm9taXlhLmh5b2dvLmpwIiwibmlzaGl3YWtpLmh5b2dvLmpwIiwib25vLmh5b2dvLmpwIiwic2FuZGEuaHlvZ28uanAiLCJzYW5uYW4uaHlv''@;'; put 'put ''Z28uanAiLCJzYXNheWFtYS5oeW9nby5qcCIsInNheW8uaHlvZ28uanAiLCJzaGluZ3UuaHlvZ28uanAiLCJzaGlub25zZW4uaHlvZ28uanAiLCJzaGlzby5oeW9nby5qcCIsInN1bW90by5oeW9nby5qcCIsInRhaXNoaS5oeW9nby5qcCIsInRha2EuaHlvZ28uanAiLCJ0YWthcmF6dWthLmh5''@;'; put 'put ''b2dvLmpwIiwidGFrYXNhZ28uaHlvZ28uanAiLCJ0YWtpbm8uaHlvZ28uanAiLCJ0YW1iYS5oeW9nby5qcCIsInRhdHN1bm8uaHlvZ28uanAiLCJ0b3lvb2thLmh5b2dvLmpwIiwieWFidS5oeW9nby5qcCIsInlhc2hpcm8uaHlvZ28uanAiLCJ5b2thLmh5b2dvLmpwIiwieW9rYXdhLmh5b2dv''@;'; put 'put ''LmpwIiwiYW1pLmliYXJha2kuanAiLCJhc2FoaS5pYmFyYWtpLmpwIiwiYmFuZG8uaWJhcmFraS5qcCIsImNoaWt1c2VpLmliYXJha2kuanAiLCJkYWlnby5pYmFyYWtpLmpwIiwiZnVqaXNoaXJvLmliYXJha2kuanAiLCJoaXRhY2hpLmliYXJha2kuanAiLCJoaXRhY2hpbmFrYS5pYmFyYWtp''@;'; put 'put ''LmpwIiwiaGl0YWNoaW9taXlhLmliYXJha2kuanAiLCJoaXRhY2hpb3RhLmliYXJha2kuanAiLCJpYmFyYWtpLmliYXJha2kuanAiLCJpbmEuaWJhcmFraS5qcCIsImluYXNoaWtpLmliYXJha2kuanAiLCJpdGFrby5pYmFyYWtpLmpwIiwiaXdhbWEuaWJhcmFraS5qcCIsImpvc28uaWJhcmFr''@;'; put 'put ''aS5qcCIsImthbWlzdS5pYmFyYWtpLmpwIiwia2FzYW1hLmliYXJha2kuanAiLCJrYXNoaW1hLmliYXJha2kuanAiLCJrYXN1bWlnYXVyYS5pYmFyYWtpLmpwIiwia29nYS5pYmFyYWtpLmpwIiwibWloby5pYmFyYWtpLmpwIiwibWl0by5pYmFyYWtpLmpwIiwibW9yaXlhLmliYXJha2kuanAi''@;'; put 'put ''LCJuYWthLmliYXJha2kuanAiLCJuYW1lZ2F0YS5pYmFyYWtpLmpwIiwib2FyYWkuaWJhcmFraS5qcCIsIm9nYXdhLmliYXJha2kuanAiLCJvbWl0YW1hLmliYXJha2kuanAiLCJyeXVnYXNha2kuaWJhcmFraS5qcCIsInNha2FpLmliYXJha2kuanAiLCJzYWt1cmFnYXdhLmliYXJha2kuanAi''@;'; put 'put ''LCJzaGltb2RhdGUuaWJhcmFraS5qcCIsInNoaW1vdHN1bWEuaWJhcmFraS5qcCIsInNoaXJvc2F0by5pYmFyYWtpLmpwIiwic293YS5pYmFyYWtpLmpwIiwic3VpZnUuaWJhcmFraS5qcCIsInRha2FoYWdpLmliYXJha2kuanAiLCJ0YW1hdHN1a3VyaS5pYmFyYWtpLmpwIiwidG9rYWkuaWJh''@;'; put 'put ''cmFraS5qcCIsInRvbW9iZS5pYmFyYWtpLmpwIiwidG9uZS5pYmFyYWtpLmpwIiwidG9yaWRlLmliYXJha2kuanAiLCJ0c3VjaGl1cmEuaWJhcmFraS5qcCIsInRzdWt1YmEuaWJhcmFraS5qcCIsInVjaGloYXJhLmliYXJha2kuanAiLCJ1c2hpa3UuaWJhcmFraS5qcCIsInlhY2hpeW8uaWJh''@;'; put 'put ''cmFraS5qcCIsInlhbWFnYXRhLmliYXJha2kuanAiLCJ5YXdhcmEuaWJhcmFraS5qcCIsInl1a2kuaWJhcmFraS5qcCIsImFuYW1penUuaXNoaWthd2EuanAiLCJoYWt1aS5pc2hpa2F3YS5qcCIsImhha3VzYW4uaXNoaWthd2EuanAiLCJrYWdhLmlzaGlrYXdhLmpwIiwia2Fob2t1LmlzaGlr''@;'; put 'put ''YXdhLmpwIiwia2FuYXphd2EuaXNoaWthd2EuanAiLCJrYXdha2l0YS5pc2hpa2F3YS5qcCIsImtvbWF0c3UuaXNoaWthd2EuanAiLCJuYWthbm90by5pc2hpa2F3YS5qcCIsIm5hbmFvLmlzaGlrYXdhLmpwIiwibm9taS5pc2hpa2F3YS5qcCIsIm5vbm9pY2hpLmlzaGlrYXdhLmpwIiwibm90''@;'; put 'put ''by5pc2hpa2F3YS5qcCIsInNoaWthLmlzaGlrYXdhLmpwIiwic3V6dS5pc2hpa2F3YS5qcCIsInRzdWJhdGEuaXNoaWthd2EuanAiLCJ0c3VydWdpLmlzaGlrYXdhLmpwIiwidWNoaW5hZGEuaXNoaWthd2EuanAiLCJ3YWppbWEuaXNoaWthd2EuanAiLCJmdWRhaS5pd2F0ZS5qcCIsImZ1amlz''@;'; put 'put ''YXdhLml3YXRlLmpwIiwiaGFuYW1ha2kuaXdhdGUuanAiLCJoaXJhaXp1bWkuaXdhdGUuanAiLCJoaXJvbm8uaXdhdGUuanAiLCJpY2hpbm9oZS5pd2F0ZS5qcCIsImljaGlub3Nla2kuaXdhdGUuanAiLCJpd2FpenVtaS5pd2F0ZS5qcCIsIml3YXRlLml3YXRlLmpwIiwiam9ib2ppLml3YXRl''@;'; put 'put ''LmpwIiwia2FtYWlzaGkuaXdhdGUuanAiLCJrYW5lZ2FzYWtpLml3YXRlLmpwIiwia2FydW1haS5pd2F0ZS5qcCIsImthd2FpLml3YXRlLmpwIiwia2l0YWthbWkuaXdhdGUuanAiLCJrdWppLml3YXRlLmpwIiwia3Vub2hlLml3YXRlLmpwIiwia3V6dW1ha2kuaXdhdGUuanAiLCJtaXlha28u''@;'; put 'put ''aXdhdGUuanAiLCJtaXp1c2F3YS5pd2F0ZS5qcCIsIm1vcmlva2EuaXdhdGUuanAiLCJuaW5vaGUuaXdhdGUuanAiLCJub2RhLml3YXRlLmpwIiwib2Z1bmF0by5pd2F0ZS5qcCIsIm9zaHUuaXdhdGUuanAiLCJvdHN1Y2hpLml3YXRlLmpwIiwicmlrdXplbnRha2F0YS5pd2F0ZS5qcCIsInNo''@;'; put 'put ''aXdhLml3YXRlLmpwIiwic2hpenVrdWlzaGkuaXdhdGUuanAiLCJzdW1pdGEuaXdhdGUuanAiLCJ0YW5vaGF0YS5pd2F0ZS5qcCIsInRvbm8uaXdhdGUuanAiLCJ5YWhhYmEuaXdhdGUuanAiLCJ5YW1hZGEuaXdhdGUuanAiLCJheWFnYXdhLmthZ2F3YS5qcCIsImhpZ2FzaGlrYWdhd2Eua2Fn''@;'; put 'put ''YXdhLmpwIiwia2Fub25qaS5rYWdhd2EuanAiLCJrb3RvaGlyYS5rYWdhd2EuanAiLCJtYW5uby5rYWdhd2EuanAiLCJtYXJ1Z2FtZS5rYWdhd2EuanAiLCJtaXRveW8ua2FnYXdhLmpwIiwibmFvc2hpbWEua2FnYXdhLmpwIiwic2FudWtpLmthZ2F3YS5qcCIsInRhZG90c3Uua2FnYXdhLmpw''@;'; put 'put ''IiwidGFrYW1hdHN1LmthZ2F3YS5qcCIsInRvbm9zaG8ua2FnYXdhLmpwIiwidWNoaW5vbWkua2FnYXdhLmpwIiwidXRhenUua2FnYXdhLmpwIiwiemVudHN1amkua2FnYXdhLmpwIiwiYWt1bmUua2Fnb3NoaW1hLmpwIiwiYW1hbWkua2Fnb3NoaW1hLmpwIiwiaGlva2kua2Fnb3NoaW1hLmpw''@;'; put 'put ''IiwiaXNhLmthZ29zaGltYS5qcCIsImlzZW4ua2Fnb3NoaW1hLmpwIiwiaXp1bWkua2Fnb3NoaW1hLmpwIiwia2Fnb3NoaW1hLmthZ29zaGltYS5qcCIsImthbm95YS5rYWdvc2hpbWEuanAiLCJrYXdhbmFiZS5rYWdvc2hpbWEuanAiLCJraW5rby5rYWdvc2hpbWEuanAiLCJrb3V5YW1hLmth''@;'; put 'put ''Z29zaGltYS5qcCIsIm1ha3VyYXpha2kua2Fnb3NoaW1hLmpwIiwibWF0c3Vtb3RvLmthZ29zaGltYS5qcCIsIm1pbmFtaXRhbmUua2Fnb3NoaW1hLmpwIiwibmFrYXRhbmUua2Fnb3NoaW1hLmpwIiwibmlzaGlub29tb3RlLmthZ29zaGltYS5qcCIsInNhdHN1bWFzZW5kYWkua2Fnb3NoaW1h''@;'; put 'put ''LmpwIiwic29vLmthZ29zaGltYS5qcCIsInRhcnVtaXp1LmthZ29zaGltYS5qcCIsInl1c3VpLmthZ29zaGltYS5qcCIsImFpa2F3YS5rYW5hZ2F3YS5qcCIsImF0c3VnaS5rYW5hZ2F3YS5qcCIsImF5YXNlLmthbmFnYXdhLmpwIiwiY2hpZ2FzYWtpLmthbmFnYXdhLmpwIiwiZWJpbmEua2Fu''@;'; put 'put ''YWdhd2EuanAiLCJmdWppc2F3YS5rYW5hZ2F3YS5qcCIsImhhZGFuby5rYW5hZ2F3YS5qcCIsImhha29uZS5rYW5hZ2F3YS5qcCIsImhpcmF0c3VrYS5rYW5hZ2F3YS5qcCIsImlzZWhhcmEua2FuYWdhd2EuanAiLCJrYWlzZWkua2FuYWdhd2EuanAiLCJrYW1ha3VyYS5rYW5hZ2F3YS5qcCIs''@;'; put 'put ''ImtpeW9rYXdhLmthbmFnYXdhLmpwIiwibWF0c3VkYS5rYW5hZ2F3YS5qcCIsIm1pbmFtaWFzaGlnYXJhLmthbmFnYXdhLmpwIiwibWl1cmEua2FuYWdhd2EuanAiLCJuYWthaS5rYW5hZ2F3YS5qcCIsIm5pbm9taXlhLmthbmFnYXdhLmpwIiwib2Rhd2FyYS5rYW5hZ2F3YS5qcCIsIm9pLmth''@;'; put 'put ''bmFnYXdhLmpwIiwib2lzby5rYW5hZ2F3YS5qcCIsInNhZ2FtaWhhcmEua2FuYWdhd2EuanAiLCJzYW11a2F3YS5rYW5hZ2F3YS5qcCIsInRzdWt1aS5rYW5hZ2F3YS5qcCIsInlhbWFraXRhLmthbmFnYXdhLmpwIiwieWFtYXRvLmthbmFnYXdhLmpwIiwieW9rb3N1a2Eua2FuYWdhd2EuanAi''@;'; put 'put ''LCJ5dWdhd2FyYS5rYW5hZ2F3YS5qcCIsInphbWEua2FuYWdhd2EuanAiLCJ6dXNoaS5rYW5hZ2F3YS5qcCIsImFraS5rb2NoaS5qcCIsImdlaXNlaS5rb2NoaS5qcCIsImhpZGFrYS5rb2NoaS5qcCIsImhpZ2FzaGl0c3Vuby5rb2NoaS5qcCIsImluby5rb2NoaS5qcCIsImthZ2FtaS5rb2No''@;'; put 'put ''aS5qcCIsImthbWkua29jaGkuanAiLCJraXRhZ2F3YS5rb2NoaS5qcCIsImtvY2hpLmtvY2hpLmpwIiwibWloYXJhLmtvY2hpLmpwIiwibW90b3lhbWEua29jaGkuanAiLCJtdXJvdG8ua29jaGkuanAiLCJuYWhhcmkua29jaGkuanAiLCJuYWthbXVyYS5rb2NoaS5qcCIsIm5hbmtva3Uua29j''@;'; put 'put ''aGkuanAiLCJuaXNoaXRvc2Eua29jaGkuanAiLCJuaXlvZG9nYXdhLmtvY2hpLmpwIiwib2NoaS5rb2NoaS5qcCIsIm9rYXdhLmtvY2hpLmpwIiwib3RveW8ua29jaGkuanAiLCJvdHN1a2kua29jaGkuanAiLCJzYWthd2Eua29jaGkuanAiLCJzdWt1bW8ua29jaGkuanAiLCJzdXNha2kua29j''@;'; put 'put ''aGkuanAiLCJ0b3NhLmtvY2hpLmpwIiwidG9zYXNoaW1penUua29jaGkuanAiLCJ0b3lvLmtvY2hpLmpwIiwidHN1bm8ua29jaGkuanAiLCJ1bWFqaS5rb2NoaS5qcCIsInlhc3VkYS5rb2NoaS5qcCIsInl1c3VoYXJhLmtvY2hpLmpwIiwiYW1ha3VzYS5rdW1hbW90by5qcCIsImFyYW8ua3Vt''@;'; put 'put ''YW1vdG8uanAiLCJhc28ua3VtYW1vdG8uanAiLCJjaG95by5rdW1hbW90by5qcCIsImd5b2t1dG8ua3VtYW1vdG8uanAiLCJrYW1pYW1ha3VzYS5rdW1hbW90by5qcCIsImtpa3VjaGkua3VtYW1vdG8uanAiLCJrdW1hbW90by5rdW1hbW90by5qcCIsIm1hc2hpa2kua3VtYW1vdG8uanAiLCJt''@;'; put 'put ''aWZ1bmUua3VtYW1vdG8uanAiLCJtaW5hbWF0YS5rdW1hbW90by5qcCIsIm1pbmFtaW9ndW5pLmt1bWFtb3RvLmpwIiwibmFnYXN1Lmt1bWFtb3RvLmpwIiwibmlzaGloYXJhLmt1bWFtb3RvLmpwIiwib2d1bmkua3VtYW1vdG8uanAiLCJvenUua3VtYW1vdG8uanAiLCJzdW1vdG8ua3VtYW1v''@;'; put 'put ''dG8uanAiLCJ0YWthbW9yaS5rdW1hbW90by5qcCIsInVraS5rdW1hbW90by5qcCIsInV0by5rdW1hbW90by5qcCIsInlhbWFnYS5rdW1hbW90by5qcCIsInlhbWF0by5rdW1hbW90by5qcCIsInlhdHN1c2hpcm8ua3VtYW1vdG8uanAiLCJheWFiZS5reW90by5qcCIsImZ1a3VjaGl5YW1hLmt5''@;'; put 'put ''b3RvLmpwIiwiaGlnYXNoaXlhbWEua3lvdG8uanAiLCJpZGUua3lvdG8uanAiLCJpbmUua3lvdG8uanAiLCJqb3lvLmt5b3RvLmpwIiwia2FtZW9rYS5reW90by5qcCIsImthbW8ua3lvdG8uanAiLCJraXRhLmt5b3RvLmpwIiwia2l6dS5reW90by5qcCIsImt1bWl5YW1hLmt5b3RvLmpwIiwi''@;'; put 'put ''a3lvdGFtYmEua3lvdG8uanAiLCJreW90YW5hYmUua3lvdG8uanAiLCJreW90YW5nby5reW90by5qcCIsIm1haXp1cnUua3lvdG8uanAiLCJtaW5hbWkua3lvdG8uanAiLCJtaW5hbWl5YW1hc2hpcm8ua3lvdG8uanAiLCJtaXlhenUua3lvdG8uanAiLCJtdWtvLmt5b3RvLmpwIiwibmFnYW9r''@;'; put 'put ''YWt5by5reW90by5qcCIsIm5ha2FneW8ua3lvdG8uanAiLCJuYW50YW4ua3lvdG8uanAiLCJveWFtYXpha2kua3lvdG8uanAiLCJzYWt5by5reW90by5qcCIsInNlaWthLmt5b3RvLmpwIiwidGFuYWJlLmt5b3RvLmpwIiwidWppLmt5b3RvLmpwIiwidWppdGF3YXJhLmt5b3RvLmpwIiwid2F6''@;'; put 'put ''dWthLmt5b3RvLmpwIiwieWFtYXNoaW5hLmt5b3RvLmpwIiwieWF3YXRhLmt5b3RvLmpwIiwiYXNhaGkubWllLmpwIiwiaW5hYmUubWllLmpwIiwiaXNlLm1pZS5qcCIsImthbWV5YW1hLm1pZS5qcCIsImthd2Fnb2UubWllLmpwIiwia2loby5taWUuanAiLCJraXNvc2FraS5taWUuanAiLCJr''@;'; put 'put ''aXdhLm1pZS5qcCIsImtvbW9uby5taWUuanAiLCJrdW1hbm8ubWllLmpwIiwia3V3YW5hLm1pZS5qcCIsIm1hdHN1c2FrYS5taWUuanAiLCJtZWl3YS5taWUuanAiLCJtaWhhbWEubWllLmpwIiwibWluYW1paXNlLm1pZS5qcCIsIm1pc3VnaS5taWUuanAiLCJtaXlhbWEubWllLmpwIiwibmFi''@;'; put 'put ''YXJpLm1pZS5qcCIsInNoaW1hLm1pZS5qcCIsInN1enVrYS5taWUuanAiLCJ0YWRvLm1pZS5qcCIsInRhaWtpLm1pZS5qcCIsInRha2kubWllLmpwIiwidGFtYWtpLm1pZS5qcCIsInRvYmEubWllLmpwIiwidHN1Lm1pZS5qcCIsInVkb25vLm1pZS5qcCIsInVyZXNoaW5vLm1pZS5qcCIsIndh''@;'; put 'put ''dGFyYWkubWllLmpwIiwieW9ra2FpY2hpLm1pZS5qcCIsImZ1cnVrYXdhLm1peWFnaS5qcCIsImhpZ2FzaGltYXRzdXNoaW1hLm1peWFnaS5qcCIsImlzaGlub21ha2kubWl5YWdpLmpwIiwiaXdhbnVtYS5taXlhZ2kuanAiLCJrYWt1ZGEubWl5YWdpLmpwIiwia2FtaS5taXlhZ2kuanAiLCJr''@;'; put 'put ''YXdhc2FraS5taXlhZ2kuanAiLCJtYXJ1bW9yaS5taXlhZ2kuanAiLCJtYXRzdXNoaW1hLm1peWFnaS5qcCIsIm1pbmFtaXNhbnJpa3UubWl5YWdpLmpwIiwibWlzYXRvLm1peWFnaS5qcCIsIm11cmF0YS5taXlhZ2kuanAiLCJuYXRvcmkubWl5YWdpLmpwIiwib2dhd2FyYS5taXlhZ2kuanAi''@;'; put 'put ''LCJvaGlyYS5taXlhZ2kuanAiLCJvbmFnYXdhLm1peWFnaS5qcCIsIm9zYWtpLm1peWFnaS5qcCIsInJpZnUubWl5YWdpLmpwIiwic2VtaW5lLm1peWFnaS5qcCIsInNoaWJhdGEubWl5YWdpLmpwIiwic2hpY2hpa2FzaHVrdS5taXlhZ2kuanAiLCJzaGlrYW1hLm1peWFnaS5qcCIsInNoaW9n''@;'; put 'put ''YW1hLm1peWFnaS5qcCIsInNoaXJvaXNoaS5taXlhZ2kuanAiLCJ0YWdham8ubWl5YWdpLmpwIiwidGFpd2EubWl5YWdpLmpwIiwidG9tZS5taXlhZ2kuanAiLCJ0b21peWEubWl5YWdpLmpwIiwid2FrdXlhLm1peWFnaS5qcCIsIndhdGFyaS5taXlhZ2kuanAiLCJ5YW1hbW90by5taXlhZ2ku''@;'; put 'put ''anAiLCJ6YW8ubWl5YWdpLmpwIiwiYXlhLm1peWF6YWtpLmpwIiwiZWJpbm8ubWl5YXpha2kuanAiLCJnb2thc2UubWl5YXpha2kuanAiLCJoeXVnYS5taXlhemFraS5qcCIsImthZG9nYXdhLm1peWF6YWtpLmpwIiwia2F3YW1pbmFtaS5taXlhemFraS5qcCIsImtpam8ubWl5YXpha2kuanAi''@;'; put 'put ''LCJraXRhZ2F3YS5taXlhemFraS5qcCIsImtpdGFrYXRhLm1peWF6YWtpLmpwIiwia2l0YXVyYS5taXlhemFraS5qcCIsImtvYmF5YXNoaS5taXlhemFraS5qcCIsImt1bml0b21pLm1peWF6YWtpLmpwIiwia3VzaGltYS5taXlhemFraS5qcCIsIm1pbWF0YS5taXlhemFraS5qcCIsIm1peWFr''@;'; put 'put ''b25vam8ubWl5YXpha2kuanAiLCJtaXlhemFraS5taXlhemFraS5qcCIsIm1vcm90c3VrYS5taXlhemFraS5qcCIsIm5pY2hpbmFuLm1peWF6YWtpLmpwIiwibmlzaGltZXJhLm1peWF6YWtpLmpwIiwibm9iZW9rYS5taXlhemFraS5qcCIsInNhaXRvLm1peWF6YWtpLmpwIiwic2hpaWJhLm1p''@;'; put 'put ''eWF6YWtpLmpwIiwic2hpbnRvbWkubWl5YXpha2kuanAiLCJ0YWthaGFydS5taXlhemFraS5qcCIsInRha2FuYWJlLm1peWF6YWtpLmpwIiwidGFrYXpha2kubWl5YXpha2kuanAiLCJ0c3Vuby5taXlhemFraS5qcCIsImFjaGkubmFnYW5vLmpwIiwiYWdlbWF0c3UubmFnYW5vLmpwIiwiYW5h''@;'; put 'put ''bi5uYWdhbm8uanAiLCJhb2tpLm5hZ2Fuby5qcCIsImFzYWhpLm5hZ2Fuby5qcCIsImF6dW1pbm8ubmFnYW5vLmpwIiwiY2hpa3Vob2t1Lm5hZ2Fuby5qcCIsImNoaWt1bWEubmFnYW5vLmpwIiwiY2hpbm8ubmFnYW5vLmpwIiwiZnVqaW1pLm5hZ2Fuby5qcCIsImhha3ViYS5uYWdhbm8uanAi''@;'; put 'put ''LCJoYXJhLm5hZ2Fuby5qcCIsImhpcmF5YS5uYWdhbm8uanAiLCJpaWRhLm5hZ2Fuby5qcCIsImlpamltYS5uYWdhbm8uanAiLCJpaXlhbWEubmFnYW5vLmpwIiwiaWl6dW5hLm5hZ2Fuby5qcCIsImlrZWRhLm5hZ2Fuby5qcCIsImlrdXNha2EubmFnYW5vLmpwIiwiaW5hLm5hZ2Fuby5qcCIs''@;'; put 'put ''ImthcnVpemF3YS5uYWdhbm8uanAiLCJrYXdha2FtaS5uYWdhbm8uanAiLCJraXNvLm5hZ2Fuby5qcCIsImtpc29mdWt1c2hpbWEubmFnYW5vLmpwIiwia2l0YWFpa2kubmFnYW5vLmpwIiwia29tYWdhbmUubmFnYW5vLmpwIiwia29tb3JvLm5hZ2Fuby5qcCIsIm1hdHN1a2F3YS5uYWdhbm8u''@;'; put 'put ''anAiLCJtYXRzdW1vdG8ubmFnYW5vLmpwIiwibWlhc2EubmFnYW5vLmpwIiwibWluYW1pYWlraS5uYWdhbm8uanAiLCJtaW5hbWltYWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1pbm93YS5uYWdhbm8uanAiLCJtaW5vd2EubmFnYW5vLmpwIiwibWl5YWRhLm5hZ2Fuby5qcCIsIm1peW90YS5uYWdh''@;'; put 'put ''bm8uanAiLCJtb2NoaXp1a2kubmFnYW5vLmpwIiwibmFnYW5vLm5hZ2Fuby5qcCIsIm5hZ2F3YS5uYWdhbm8uanAiLCJuYWdpc28ubmFnYW5vLmpwIiwibmFrYWdhd2EubmFnYW5vLmpwIiwibmFrYW5vLm5hZ2Fuby5qcCIsIm5vemF3YW9uc2VuLm5hZ2Fuby5qcCIsIm9idXNlLm5hZ2Fuby5q''@;'; put 'put ''cCIsIm9nYXdhLm5hZ2Fuby5qcCIsIm9rYXlhLm5hZ2Fuby5qcCIsIm9tYWNoaS5uYWdhbm8uanAiLCJvbWkubmFnYW5vLmpwIiwib29rdXdhLm5hZ2Fuby5qcCIsIm9vc2hpa2EubmFnYW5vLmpwIiwib3Rha2kubmFnYW5vLmpwIiwib3RhcmkubmFnYW5vLmpwIiwic2FrYWUubmFnYW5vLmpw''@;'; put 'put ''Iiwic2FrYWtpLm5hZ2Fuby5qcCIsInNha3UubmFnYW5vLmpwIiwic2FrdWhvLm5hZ2Fuby5qcCIsInNoaW1vc3V3YS5uYWdhbm8uanAiLCJzaGluYW5vbWFjaGkubmFnYW5vLmpwIiwic2hpb2ppcmkubmFnYW5vLmpwIiwic3V3YS5uYWdhbm8uanAiLCJzdXpha2EubmFnYW5vLmpwIiwidGFr''@;'; put 'put ''YWdpLm5hZ2Fuby5qcCIsInRha2Ftb3JpLm5hZ2Fuby5qcCIsInRha2F5YW1hLm5hZ2Fuby5qcCIsInRhdGVzaGluYS5uYWdhbm8uanAiLCJ0YXRzdW5vLm5hZ2Fuby5qcCIsInRvZ2FrdXNoaS5uYWdhbm8uanAiLCJ0b2d1cmEubmFnYW5vLmpwIiwidG9taS5uYWdhbm8uanAiLCJ1ZWRhLm5h''@;'; put 'put ''Z2Fuby5qcCIsIndhZGEubmFnYW5vLmpwIiwieWFtYWdhdGEubmFnYW5vLmpwIiwieWFtYW5vdWNoaS5uYWdhbm8uanAiLCJ5YXNha2EubmFnYW5vLmpwIiwieWFzdW9rYS5uYWdhbm8uanAiLCJjaGlqaXdhLm5hZ2FzYWtpLmpwIiwiZnV0c3UubmFnYXNha2kuanAiLCJnb3RvLm5hZ2FzYWtp''@;'; put 'put ''LmpwIiwiaGFzYW1pLm5hZ2FzYWtpLmpwIiwiaGlyYWRvLm5hZ2FzYWtpLmpwIiwiaWtpLm5hZ2FzYWtpLmpwIiwiaXNhaGF5YS5uYWdhc2FraS5qcCIsImthd2F0YW5hLm5hZ2FzYWtpLmpwIiwia3VjaGlub3RzdS5uYWdhc2FraS5qcCIsIm1hdHN1dXJhLm5hZ2FzYWtpLmpwIiwibmFnYXNh''@;'; put 'put ''a2kubmFnYXNha2kuanAiLCJvYmFtYS5uYWdhc2FraS5qcCIsIm9tdXJhLm5hZ2FzYWtpLmpwIiwib3NldG8ubmFnYXNha2kuanAiLCJzYWlrYWkubmFnYXNha2kuanAiLCJzYXNlYm8ubmFnYXNha2kuanAiLCJzZWloaS5uYWdhc2FraS5qcCIsInNoaW1hYmFyYS5uYWdhc2FraS5qcCIsInNo''@;'; put 'put ''aW5rYW1pZ290by5uYWdhc2FraS5qcCIsInRvZ2l0c3UubmFnYXNha2kuanAiLCJ0c3VzaGltYS5uYWdhc2FraS5qcCIsInVuemVuLm5hZ2FzYWtpLmpwIiwiYW5kby5uYXJhLmpwIiwiZ29zZS5uYXJhLmpwIiwiaGVndXJpLm5hcmEuanAiLCJoaWdhc2hpeW9zaGluby5uYXJhLmpwIiwiaWth''@;'; put 'put ''cnVnYS5uYXJhLmpwIiwiaWtvbWEubmFyYS5qcCIsImthbWlraXRheWFtYS5uYXJhLmpwIiwia2FubWFraS5uYXJhLmpwIiwia2FzaGliYS5uYXJhLmpwIiwia2FzaGloYXJhLm5hcmEuanAiLCJrYXRzdXJhZ2kubmFyYS5qcCIsImthd2FpLm5hcmEuanAiLCJrYXdha2FtaS5uYXJhLmpwIiwi''@;'; put 'put ''a2F3YW5pc2hpLm5hcmEuanAiLCJrb3J5by5uYXJhLmpwIiwia3Vyb3Rha2kubmFyYS5qcCIsIm1pdHN1ZS5uYXJhLmpwIiwibWl5YWtlLm5hcmEuanAiLCJuYXJhLm5hcmEuanAiLCJub3NlZ2F3YS5uYXJhLmpwIiwib2ppLm5hcmEuanAiLCJvdWRhLm5hcmEuanAiLCJveW9kby5uYXJhLmpw''@;'; put 'put ''Iiwic2FrdXJhaS5uYXJhLmpwIiwic2FuZ28ubmFyYS5qcCIsInNoaW1vaWNoaS5uYXJhLmpwIiwic2hpbW9raXRheWFtYS5uYXJhLmpwIiwic2hpbmpvLm5hcmEuanAiLCJzb25pLm5hcmEuanAiLCJ0YWthdG9yaS5uYXJhLmpwIiwidGF3YXJhbW90by5uYXJhLmpwIiwidGVua2F3YS5uYXJh''@;'; put 'put ''LmpwIiwidGVucmkubmFyYS5qcCIsInVkYS5uYXJhLmpwIiwieWFtYXRva29yaXlhbWEubmFyYS5qcCIsInlhbWF0b3Rha2FkYS5uYXJhLmpwIiwieWFtYXpvZS5uYXJhLmpwIiwieW9zaGluby5uYXJhLmpwIiwiYWdhLm5paWdhdGEuanAiLCJhZ2Fuby5uaWlnYXRhLmpwIiwiZ29zZW4ubmlp''@;'; put 'put ''Z2F0YS5qcCIsIml0b2lnYXdhLm5paWdhdGEuanAiLCJpenVtb3pha2kubmlpZ2F0YS5qcCIsImpvZXRzdS5uaWlnYXRhLmpwIiwia2Ftby5uaWlnYXRhLmpwIiwia2FyaXdhLm5paWdhdGEuanAiLCJrYXNoaXdhemFraS5uaWlnYXRhLmpwIiwibWluYW1pdW9udW1hLm5paWdhdGEuanAiLCJt''@;'; put 'put ''aXRzdWtlLm5paWdhdGEuanAiLCJtdWlrYS5uaWlnYXRhLmpwIiwibXVyYWthbWkubmlpZ2F0YS5qcCIsIm15b2tvLm5paWdhdGEuanAiLCJuYWdhb2thLm5paWdhdGEuanAiLCJuaWlnYXRhLm5paWdhdGEuanAiLCJvaml5YS5uaWlnYXRhLmpwIiwib21pLm5paWdhdGEuanAiLCJzYWRvLm5p''@;'; put 'put ''aWdhdGEuanAiLCJzYW5qby5uaWlnYXRhLmpwIiwic2Vpcm8ubmlpZ2F0YS5qcCIsInNlaXJvdS5uaWlnYXRhLmpwIiwic2VraWthd2EubmlpZ2F0YS5qcCIsInNoaWJhdGEubmlpZ2F0YS5qcCIsInRhZ2FtaS5uaWlnYXRhLmpwIiwidGFpbmFpLm5paWdhdGEuanAiLCJ0b2NoaW8ubmlpZ2F0''@;'; put 'put ''YS5qcCIsInRva2FtYWNoaS5uaWlnYXRhLmpwIiwidHN1YmFtZS5uaWlnYXRhLmpwIiwidHN1bmFuLm5paWdhdGEuanAiLCJ1b251bWEubmlpZ2F0YS5qcCIsInlhaGlrby5uaWlnYXRhLmpwIiwieW9pdGEubmlpZ2F0YS5qcCIsInl1emF3YS5uaWlnYXRhLmpwIiwiYmVwcHUub2l0YS5qcCIs''@;'; put 'put ''ImJ1bmdvb25vLm9pdGEuanAiLCJidW5nb3Rha2FkYS5vaXRhLmpwIiwiaGFzYW1hLm9pdGEuanAiLCJoaWppLm9pdGEuanAiLCJoaW1lc2hpbWEub2l0YS5qcCIsImhpdGEub2l0YS5qcCIsImthbWl0c3VlLm9pdGEuanAiLCJrb2tvbm9lLm9pdGEuanAiLCJrdWp1Lm9pdGEuanAiLCJrdW5p''@;'; put 'put ''c2FraS5vaXRhLmpwIiwia3VzdS5vaXRhLmpwIiwib2l0YS5vaXRhLmpwIiwic2Fpa2kub2l0YS5qcCIsInRha2V0YS5vaXRhLmpwIiwidHN1a3VtaS5vaXRhLmpwIiwidXNhLm9pdGEuanAiLCJ1c3VraS5vaXRhLmpwIiwieXVmdS5vaXRhLmpwIiwiYWthaXdhLm9rYXlhbWEuanAiLCJhc2Fr''@;'; put 'put ''dWNoaS5va2F5YW1hLmpwIiwiYml6ZW4ub2theWFtYS5qcCIsImhheWFzaGltYS5va2F5YW1hLmpwIiwiaWJhcmEub2theWFtYS5qcCIsImthZ2FtaW5vLm9rYXlhbWEuanAiLCJrYXNhb2thLm9rYXlhbWEuanAiLCJraWJpY2h1by5va2F5YW1hLmpwIiwia3VtZW5hbi5va2F5YW1hLmpwIiwi''@;'; put 'put ''a3VyYXNoaWtpLm9rYXlhbWEuanAiLCJtYW5pd2Eub2theWFtYS5qcCIsIm1pc2FraS5va2F5YW1hLmpwIiwibmFnaS5va2F5YW1hLmpwIiwibmlpbWkub2theWFtYS5qcCIsIm5pc2hpYXdha3VyYS5va2F5YW1hLmpwIiwib2theWFtYS5va2F5YW1hLmpwIiwic2F0b3Noby5va2F5YW1hLmpw''@;'; put 'put ''Iiwic2V0b3VjaGkub2theWFtYS5qcCIsInNoaW5qby5va2F5YW1hLmpwIiwic2hvby5va2F5YW1hLmpwIiwic29qYS5va2F5YW1hLmpwIiwidGFrYWhhc2hpLm9rYXlhbWEuanAiLCJ0YW1hbm8ub2theWFtYS5qcCIsInRzdXlhbWEub2theWFtYS5qcCIsIndha2Uub2theWFtYS5qcCIsInlh''@;'; put 'put ''a2FnZS5va2F5YW1hLmpwIiwiYWd1bmkub2tpbmF3YS5qcCIsImdpbm93YW4ub2tpbmF3YS5qcCIsImdpbm96YS5va2luYXdhLmpwIiwiZ3VzaGlrYW1pLm9raW5hd2EuanAiLCJoYWViYXJ1Lm9raW5hd2EuanAiLCJoaWdhc2hpLm9raW5hd2EuanAiLCJoaXJhcmEub2tpbmF3YS5qcCIsImlo''@;'; put 'put ''ZXlhLm9raW5hd2EuanAiLCJpc2hpZ2FraS5va2luYXdhLmpwIiwiaXNoaWthd2Eub2tpbmF3YS5qcCIsIml0b21hbi5va2luYXdhLmpwIiwiaXplbmEub2tpbmF3YS5qcCIsImthZGVuYS5va2luYXdhLmpwIiwia2luLm9raW5hd2EuanAiLCJraXRhZGFpdG8ub2tpbmF3YS5qcCIsImtpdGFu''@;'; put 'put ''YWthZ3VzdWt1Lm9raW5hd2EuanAiLCJrdW1lamltYS5va2luYXdhLmpwIiwia3VuaWdhbWkub2tpbmF3YS5qcCIsIm1pbmFtaWRhaXRvLm9raW5hd2EuanAiLCJtb3RvYnUub2tpbmF3YS5qcCIsIm5hZ28ub2tpbmF3YS5qcCIsIm5haGEub2tpbmF3YS5qcCIsIm5ha2FndXN1a3Uub2tpbmF3''@;'; put 'put ''YS5qcCIsIm5ha2lqaW4ub2tpbmF3YS5qcCIsIm5hbmpvLm9raW5hd2EuanAiLCJuaXNoaWhhcmEub2tpbmF3YS5qcCIsIm9naW1pLm9raW5hd2EuanAiLCJva2luYXdhLm9raW5hd2EuanAiLCJvbm5hLm9raW5hd2EuanAiLCJzaGltb2ppLm9raW5hd2EuanAiLCJ0YWtldG9taS5va2luYXdh''@;'; put 'put ''LmpwIiwidGFyYW1hLm9raW5hd2EuanAiLCJ0b2thc2hpa2kub2tpbmF3YS5qcCIsInRvbWlndXN1a3Uub2tpbmF3YS5qcCIsInRvbmFraS5va2luYXdhLmpwIiwidXJhc29lLm9raW5hd2EuanAiLCJ1cnVtYS5va2luYXdhLmpwIiwieWFlc2Uub2tpbmF3YS5qcCIsInlvbWl0YW4ub2tpbmF3''@;'; put 'put ''YS5qcCIsInlvbmFiYXJ1Lm9raW5hd2EuanAiLCJ5b25hZ3VuaS5va2luYXdhLmpwIiwiemFtYW1pLm9raW5hd2EuanAiLCJhYmVuby5vc2FrYS5qcCIsImNoaWhheWFha2FzYWthLm9zYWthLmpwIiwiY2h1by5vc2FrYS5qcCIsImRhaXRvLm9zYWthLmpwIiwiZnVqaWlkZXJhLm9zYWthLmpw''@;'; put 'put ''IiwiaGFiaWtpbm8ub3Nha2EuanAiLCJoYW5uYW4ub3Nha2EuanAiLCJoaWdhc2hpb3Nha2Eub3Nha2EuanAiLCJoaWdhc2hpc3VtaXlvc2hpLm9zYWthLmpwIiwiaGlnYXNoaXlvZG9nYXdhLm9zYWthLmpwIiwiaGlyYWthdGEub3Nha2EuanAiLCJpYmFyYWtpLm9zYWthLmpwIiwiaWtlZGEu''@;'; put 'put ''b3Nha2EuanAiLCJpenVtaS5vc2FrYS5qcCIsIml6dW1pb3RzdS5vc2FrYS5qcCIsIml6dW1pc2Fuby5vc2FrYS5qcCIsImthZG9tYS5vc2FrYS5qcCIsImthaXp1a2Eub3Nha2EuanAiLCJrYW5hbi5vc2FrYS5qcCIsImthc2hpd2FyYS5vc2FrYS5qcCIsImthdGFuby5vc2FrYS5qcCIsImth''@;'; put 'put ''d2FjaGluYWdhbm8ub3Nha2EuanAiLCJraXNoaXdhZGEub3Nha2EuanAiLCJraXRhLm9zYWthLmpwIiwia3VtYXRvcmkub3Nha2EuanAiLCJtYXRzdWJhcmEub3Nha2EuanAiLCJtaW5hdG8ub3Nha2EuanAiLCJtaW5vaC5vc2FrYS5qcCIsIm1pc2FraS5vc2FrYS5qcCIsIm1vcmlndWNoaS5v''@;'; put 'put ''c2FrYS5qcCIsIm5leWFnYXdhLm9zYWthLmpwIiwibmlzaGkub3Nha2EuanAiLCJub3NlLm9zYWthLmpwIiwib3Nha2FzYXlhbWEub3Nha2EuanAiLCJzYWthaS5vc2FrYS5qcCIsInNheWFtYS5vc2FrYS5qcCIsInNlbm5hbi5vc2FrYS5qcCIsInNldHRzdS5vc2FrYS5qcCIsInNoaWpvbmF3''@;'; put 'put ''YXRlLm9zYWthLmpwIiwic2hpbWFtb3RvLm9zYWthLmpwIiwic3VpdGEub3Nha2EuanAiLCJ0YWRhb2thLm9zYWthLmpwIiwidGFpc2hpLm9zYWthLmpwIiwidGFqaXJpLm9zYWthLmpwIiwidGFrYWlzaGkub3Nha2EuanAiLCJ0YWthdHN1a2kub3Nha2EuanAiLCJ0b25kYWJheWFzaGkub3Nh''@;'; put 'put ''a2EuanAiLCJ0b3lvbmFrYS5vc2FrYS5qcCIsInRveW9uby5vc2FrYS5qcCIsInlhby5vc2FrYS5qcCIsImFyaWFrZS5zYWdhLmpwIiwiYXJpdGEuc2FnYS5qcCIsImZ1a3Vkb21pLnNhZ2EuanAiLCJnZW5rYWkuc2FnYS5qcCIsImhhbWF0YW1hLnNhZ2EuanAiLCJoaXplbi5zYWdhLmpwIiwi''@;'; put 'put ''aW1hcmkuc2FnYS5qcCIsImthbWltaW5lLnNhZ2EuanAiLCJrYW56YWtpLnNhZ2EuanAiLCJrYXJhdHN1LnNhZ2EuanAiLCJrYXNoaW1hLnNhZ2EuanAiLCJraXRhZ2F0YS5zYWdhLmpwIiwia2l0YWhhdGEuc2FnYS5qcCIsImtpeWFtYS5zYWdhLmpwIiwia291aG9rdS5zYWdhLmpwIiwia3l1''@;'; put 'put ''cmFnaS5zYWdhLmpwIiwibmlzaGlhcml0YS5zYWdhLmpwIiwib2dpLnNhZ2EuanAiLCJvbWFjaGkuc2FnYS5qcCIsIm91Y2hpLnNhZ2EuanAiLCJzYWdhLnNhZ2EuanAiLCJzaGlyb2lzaGkuc2FnYS5qcCIsInRha3Uuc2FnYS5qcCIsInRhcmEuc2FnYS5qcCIsInRvc3Uuc2FnYS5qcCIsInlv''@;'; put 'put ''c2hpbm9nYXJpLnNhZ2EuanAiLCJhcmFrYXdhLnNhaXRhbWEuanAiLCJhc2FrYS5zYWl0YW1hLmpwIiwiY2hpY2hpYnUuc2FpdGFtYS5qcCIsImZ1amltaS5zYWl0YW1hLmpwIiwiZnVqaW1pbm8uc2FpdGFtYS5qcCIsImZ1a2F5YS5zYWl0YW1hLmpwIiwiaGFubm8uc2FpdGFtYS5qcCIsImhh''@;'; put 'put ''bnl1LnNhaXRhbWEuanAiLCJoYXN1ZGEuc2FpdGFtYS5qcCIsImhhdG9nYXlhLnNhaXRhbWEuanAiLCJoYXRveWFtYS5zYWl0YW1hLmpwIiwiaGlkYWthLnNhaXRhbWEuanAiLCJoaWdhc2hpY2hpY2hpYnUuc2FpdGFtYS5qcCIsImhpZ2FzaGltYXRzdXlhbWEuc2FpdGFtYS5qcCIsImhvbmpv''@;'; put 'put ''LnNhaXRhbWEuanAiLCJpbmEuc2FpdGFtYS5qcCIsImlydW1hLnNhaXRhbWEuanAiLCJpd2F0c3VraS5zYWl0YW1hLmpwIiwia2FtaWl6dW1pLnNhaXRhbWEuanAiLCJrYW1pa2F3YS5zYWl0YW1hLmpwIiwia2FtaXNhdG8uc2FpdGFtYS5qcCIsImthc3VrYWJlLnNhaXRhbWEuanAiLCJrYXdh''@;'; put 'put ''Z29lLnNhaXRhbWEuanAiLCJrYXdhZ3VjaGkuc2FpdGFtYS5qcCIsImthd2FqaW1hLnNhaXRhbWEuanAiLCJrYXpvLnNhaXRhbWEuanAiLCJraXRhbW90by5zYWl0YW1hLmpwIiwia29zaGlnYXlhLnNhaXRhbWEuanAiLCJrb3Vub3N1LnNhaXRhbWEuanAiLCJrdWtpLnNhaXRhbWEuanAiLCJr''@;'; put 'put ''dW1hZ2F5YS5zYWl0YW1hLmpwIiwibWF0c3VidXNoaS5zYWl0YW1hLmpwIiwibWluYW5vLnNhaXRhbWEuanAiLCJtaXNhdG8uc2FpdGFtYS5qcCIsIm1peWFzaGlyby5zYWl0YW1hLmpwIiwibWl5b3NoaS5zYWl0YW1hLmpwIiwibW9yb3lhbWEuc2FpdGFtYS5qcCIsIm5hZ2F0b3JvLnNhaXRh''@;'; put 'put ''bWEuanAiLCJuYW1lZ2F3YS5zYWl0YW1hLmpwIiwibmlpemEuc2FpdGFtYS5qcCIsIm9nYW5vLnNhaXRhbWEuanAiLCJvZ2F3YS5zYWl0YW1hLmpwIiwib2dvc2Uuc2FpdGFtYS5qcCIsIm9rZWdhd2Euc2FpdGFtYS5qcCIsIm9taXlhLnNhaXRhbWEuanAiLCJvdGFraS5zYWl0YW1hLmpwIiwi''@;'; put 'put ''cmFuemFuLnNhaXRhbWEuanAiLCJyeW9rYW1pLnNhaXRhbWEuanAiLCJzYWl0YW1hLnNhaXRhbWEuanAiLCJzYWthZG8uc2FpdGFtYS5qcCIsInNhdHRlLnNhaXRhbWEuanAiLCJzYXlhbWEuc2FpdGFtYS5qcCIsInNoaWtpLnNhaXRhbWEuanAiLCJzaGlyYW9rYS5zYWl0YW1hLmpwIiwic29r''@;'; put 'put ''YS5zYWl0YW1hLmpwIiwic3VnaXRvLnNhaXRhbWEuanAiLCJ0b2RhLnNhaXRhbWEuanAiLCJ0b2tpZ2F3YS5zYWl0YW1hLmpwIiwidG9rb3JvemF3YS5zYWl0YW1hLmpwIiwidHN1cnVnYXNoaW1hLnNhaXRhbWEuanAiLCJ1cmF3YS5zYWl0YW1hLmpwIiwid2FyYWJpLnNhaXRhbWEuanAiLCJ5''@;'; put 'put ''YXNoaW8uc2FpdGFtYS5qcCIsInlva296ZS5zYWl0YW1hLmpwIiwieW9uby5zYWl0YW1hLmpwIiwieW9yaWkuc2FpdGFtYS5qcCIsInlvc2hpZGEuc2FpdGFtYS5qcCIsInlvc2hpa2F3YS5zYWl0YW1hLmpwIiwieW9zaGltaS5zYWl0YW1hLmpwIiwiYWlzaG8uc2hpZ2EuanAiLCJnYW1vLnNo''@;'; put 'put ''aWdhLmpwIiwiaGlnYXNoaW9taS5zaGlnYS5qcCIsImhpa29uZS5zaGlnYS5qcCIsImtva2Euc2hpZ2EuanAiLCJrb25hbi5zaGlnYS5qcCIsImtvc2VpLnNoaWdhLmpwIiwia290by5zaGlnYS5qcCIsImt1c2F0c3Uuc2hpZ2EuanAiLCJtYWliYXJhLnNoaWdhLmpwIiwibW9yaXlhbWEuc2hp''@;'; put 'put ''Z2EuanAiLCJuYWdhaGFtYS5zaGlnYS5qcCIsIm5pc2hpYXphaS5zaGlnYS5qcCIsIm5vdG9nYXdhLnNoaWdhLmpwIiwib21paGFjaGltYW4uc2hpZ2EuanAiLCJvdHN1LnNoaWdhLmpwIiwicml0dG8uc2hpZ2EuanAiLCJyeXVvaC5zaGlnYS5qcCIsInRha2FzaGltYS5zaGlnYS5qcCIsInRh''@;'; put 'put ''a2F0c3VraS5zaGlnYS5qcCIsInRvcmFoaW1lLnNoaWdhLmpwIiwidG95b3NhdG8uc2hpZ2EuanAiLCJ5YXN1LnNoaWdhLmpwIiwiYWthZ2kuc2hpbWFuZS5qcCIsImFtYS5zaGltYW5lLmpwIiwiZ290c3Uuc2hpbWFuZS5qcCIsImhhbWFkYS5zaGltYW5lLmpwIiwiaGlnYXNoaWl6dW1vLnNo''@;'; put 'put ''aW1hbmUuanAiLCJoaWthd2Euc2hpbWFuZS5qcCIsImhpa2ltaS5zaGltYW5lLmpwIiwiaXp1bW8uc2hpbWFuZS5qcCIsImtha2lub2tpLnNoaW1hbmUuanAiLCJtYXN1ZGEuc2hpbWFuZS5qcCIsIm1hdHN1ZS5zaGltYW5lLmpwIiwibWlzYXRvLnNoaW1hbmUuanAiLCJuaXNoaW5vc2hpbWEu''@;'; put 'put ''c2hpbWFuZS5qcCIsIm9oZGEuc2hpbWFuZS5qcCIsIm9raW5vc2hpbWEuc2hpbWFuZS5qcCIsIm9rdWl6dW1vLnNoaW1hbmUuanAiLCJzaGltYW5lLnNoaW1hbmUuanAiLCJ0YW1heXUuc2hpbWFuZS5qcCIsInRzdXdhbm8uc2hpbWFuZS5qcCIsInVubmFuLnNoaW1hbmUuanAiLCJ5YWt1bW8u''@;'; put 'put ''c2hpbWFuZS5qcCIsInlhc3VnaS5zaGltYW5lLmpwIiwieWF0c3VrYS5zaGltYW5lLmpwIiwiYXJhaS5zaGl6dW9rYS5qcCIsImF0YW1pLnNoaXp1b2thLmpwIiwiZnVqaS5zaGl6dW9rYS5qcCIsImZ1amllZGEuc2hpenVva2EuanAiLCJmdWppa2F3YS5zaGl6dW9rYS5qcCIsImZ1amlub21p''@;'; put 'put ''eWEuc2hpenVva2EuanAiLCJmdWt1cm9pLnNoaXp1b2thLmpwIiwiZ290ZW1iYS5zaGl6dW9rYS5qcCIsImhhaWJhcmEuc2hpenVva2EuanAiLCJoYW1hbWF0c3Uuc2hpenVva2EuanAiLCJoaWdhc2hpaXp1LnNoaXp1b2thLmpwIiwiaXRvLnNoaXp1b2thLmpwIiwiaXdhdGEuc2hpenVva2Eu''@;'; put 'put ''anAiLCJpenUuc2hpenVva2EuanAiLCJpenVub2t1bmkuc2hpenVva2EuanAiLCJrYWtlZ2F3YS5zaGl6dW9rYS5qcCIsImthbm5hbWkuc2hpenVva2EuanAiLCJrYXdhbmVob24uc2hpenVva2EuanAiLCJrYXdhenUuc2hpenVva2EuanAiLCJraWt1Z2F3YS5zaGl6dW9rYS5qcCIsImtvc2Fp''@;'; put 'put ''LnNoaXp1b2thLmpwIiwibWFraW5vaGFyYS5zaGl6dW9rYS5qcCIsIm1hdHN1emFraS5zaGl6dW9rYS5qcCIsIm1pbmFtaWl6dS5zaGl6dW9rYS5qcCIsIm1pc2hpbWEuc2hpenVva2EuanAiLCJtb3JpbWFjaGkuc2hpenVva2EuanAiLCJuaXNoaWl6dS5zaGl6dW9rYS5qcCIsIm51bWF6dS5z''@;'; put 'put ''aGl6dW9rYS5qcCIsIm9tYWV6YWtpLnNoaXp1b2thLmpwIiwic2hpbWFkYS5zaGl6dW9rYS5qcCIsInNoaW1penUuc2hpenVva2EuanAiLCJzaGltb2RhLnNoaXp1b2thLmpwIiwic2hpenVva2Euc2hpenVva2EuanAiLCJzdXNvbm8uc2hpenVva2EuanAiLCJ5YWl6dS5zaGl6dW9rYS5qcCIs''@;'; put 'put ''Inlvc2hpZGEuc2hpenVva2EuanAiLCJhc2hpa2FnYS50b2NoaWdpLmpwIiwiYmF0by50b2NoaWdpLmpwIiwiaGFnYS50b2NoaWdpLmpwIiwiaWNoaWthaS50b2NoaWdpLmpwIiwiaXdhZnVuZS50b2NoaWdpLmpwIiwia2FtaW5va2F3YS50b2NoaWdpLmpwIiwia2FudW1hLnRvY2hpZ2kuanAi''@;'; put 'put ''LCJrYXJhc3V5YW1hLnRvY2hpZ2kuanAiLCJrdXJvaXNvLnRvY2hpZ2kuanAiLCJtYXNoaWtvLnRvY2hpZ2kuanAiLCJtaWJ1LnRvY2hpZ2kuanAiLCJtb2thLnRvY2hpZ2kuanAiLCJtb3RlZ2kudG9jaGlnaS5qcCIsIm5hc3UudG9jaGlnaS5qcCIsIm5hc3VzaGlvYmFyYS50b2NoaWdpLmpw''@;'; put 'put ''Iiwibmlra28udG9jaGlnaS5qcCIsIm5pc2hpa2F0YS50b2NoaWdpLmpwIiwibm9naS50b2NoaWdpLmpwIiwib2hpcmEudG9jaGlnaS5qcCIsIm9odGF3YXJhLnRvY2hpZ2kuanAiLCJveWFtYS50b2NoaWdpLmpwIiwic2FrdXJhLnRvY2hpZ2kuanAiLCJzYW5vLnRvY2hpZ2kuanAiLCJzaGlt''@;'; put 'put ''b3RzdWtlLnRvY2hpZ2kuanAiLCJzaGlveWEudG9jaGlnaS5qcCIsInRha2FuZXphd2EudG9jaGlnaS5qcCIsInRvY2hpZ2kudG9jaGlnaS5qcCIsInRzdWdhLnRvY2hpZ2kuanAiLCJ1amlpZS50b2NoaWdpLmpwIiwidXRzdW5vbWl5YS50b2NoaWdpLmpwIiwieWFpdGEudG9jaGlnaS5qcCIs''@;'; put 'put ''ImFpenVtaS50b2t1c2hpbWEuanAiLCJhbmFuLnRva3VzaGltYS5qcCIsImljaGliYS50b2t1c2hpbWEuanAiLCJpdGFuby50b2t1c2hpbWEuanAiLCJrYWluYW4udG9rdXNoaW1hLmpwIiwia29tYXRzdXNoaW1hLnRva3VzaGltYS5qcCIsIm1hdHN1c2hpZ2UudG9rdXNoaW1hLmpwIiwibWlt''@;'; put 'put ''YS50b2t1c2hpbWEuanAiLCJtaW5hbWkudG9rdXNoaW1hLmpwIiwibWl5b3NoaS50b2t1c2hpbWEuanAiLCJtdWdpLnRva3VzaGltYS5qcCIsIm5ha2FnYXdhLnRva3VzaGltYS5qcCIsIm5hcnV0by50b2t1c2hpbWEuanAiLCJzYW5hZ29jaGkudG9rdXNoaW1hLmpwIiwic2hpc2hpa3VpLnRv''@;'; put 'put ''a3VzaGltYS5qcCIsInRva3VzaGltYS50b2t1c2hpbWEuanAiLCJ3YWppa2kudG9rdXNoaW1hLmpwIiwiYWRhY2hpLnRva3lvLmpwIiwiYWtpcnVuby50b2t5by5qcCIsImFraXNoaW1hLnRva3lvLmpwIiwiYW9nYXNoaW1hLnRva3lvLmpwIiwiYXJha2F3YS50b2t5by5qcCIsImJ1bmt5by50''@;'; put 'put ''b2t5by5qcCIsImNoaXlvZGEudG9reW8uanAiLCJjaG9mdS50b2t5by5qcCIsImNodW8udG9reW8uanAiLCJlZG9nYXdhLnRva3lvLmpwIiwiZnVjaHUudG9reW8uanAiLCJmdXNzYS50b2t5by5qcCIsImhhY2hpam8udG9reW8uanAiLCJoYWNoaW9qaS50b2t5by5qcCIsImhhbXVyYS50b2t5''@;'; put 'put ''by5qcCIsImhpZ2FzaGlrdXJ1bWUudG9reW8uanAiLCJoaWdhc2hpbXVyYXlhbWEudG9reW8uanAiLCJoaWdhc2hpeWFtYXRvLnRva3lvLmpwIiwiaGluby50b2t5by5qcCIsImhpbm9kZS50b2t5by5qcCIsImhpbm9oYXJhLnRva3lvLmpwIiwiaW5hZ2kudG9reW8uanAiLCJpdGFiYXNoaS50''@;'; put 'put ''b2t5by5qcCIsImthdHN1c2hpa2EudG9reW8uanAiLCJraXRhLnRva3lvLmpwIiwia2l5b3NlLnRva3lvLmpwIiwia29kYWlyYS50b2t5by5qcCIsImtvZ2FuZWkudG9reW8uanAiLCJrb2t1YnVuamkudG9reW8uanAiLCJrb21hZS50b2t5by5qcCIsImtvdG8udG9reW8uanAiLCJrb3V6dXNo''@;'; put 'put ''aW1hLnRva3lvLmpwIiwia3VuaXRhY2hpLnRva3lvLmpwIiwibWFjaGlkYS50b2t5by5qcCIsIm1lZ3Vyby50b2t5by5qcCIsIm1pbmF0by50b2t5by5qcCIsIm1pdGFrYS50b2t5by5qcCIsIm1penVoby50b2t5by5qcCIsIm11c2FzaGltdXJheWFtYS50b2t5by5qcCIsIm11c2FzaGluby50''@;'; put 'put ''b2t5by5qcCIsIm5ha2Fuby50b2t5by5qcCIsIm5lcmltYS50b2t5by5qcCIsIm9nYXNhd2FyYS50b2t5by5qcCIsIm9rdXRhbWEudG9reW8uanAiLCJvbWUudG9reW8uanAiLCJvc2hpbWEudG9reW8uanAiLCJvdGEudG9reW8uanAiLCJzZXRhZ2F5YS50b2t5by5qcCIsInNoaWJ1eWEudG9r''@;'; put 'put ''eW8uanAiLCJzaGluYWdhd2EudG9reW8uanAiLCJzaGluanVrdS50b2t5by5qcCIsInN1Z2luYW1pLnRva3lvLmpwIiwic3VtaWRhLnRva3lvLmpwIiwidGFjaGlrYXdhLnRva3lvLmpwIiwidGFpdG8udG9reW8uanAiLCJ0YW1hLnRva3lvLmpwIiwidG9zaGltYS50b2t5by5qcCIsImNoaXp1''@;'; put 'put ''LnRvdHRvcmkuanAiLCJoaW5vLnRvdHRvcmkuanAiLCJrYXdhaGFyYS50b3R0b3JpLmpwIiwia29nZS50b3R0b3JpLmpwIiwia290b3VyYS50b3R0b3JpLmpwIiwibWlzYXNhLnRvdHRvcmkuanAiLCJuYW5idS50b3R0b3JpLmpwIiwibmljaGluYW4udG90dG9yaS5qcCIsInNha2FpbWluYXRv''@;'; put 'put ''LnRvdHRvcmkuanAiLCJ0b3R0b3JpLnRvdHRvcmkuanAiLCJ3YWthc2EudG90dG9yaS5qcCIsInlhenUudG90dG9yaS5qcCIsInlvbmFnby50b3R0b3JpLmpwIiwiYXNhaGkudG95YW1hLmpwIiwiZnVjaHUudG95YW1hLmpwIiwiZnVrdW1pdHN1LnRveWFtYS5qcCIsImZ1bmFoYXNoaS50b3lh''@;'; put 'put ''bWEuanAiLCJoaW1pLnRveWFtYS5qcCIsImltaXp1LnRveWFtYS5qcCIsImluYW1pLnRveWFtYS5qcCIsImpvaGFuYS50b3lhbWEuanAiLCJrYW1paWNoaS50b3lhbWEuanAiLCJrdXJvYmUudG95YW1hLmpwIiwibmFrYW5paWthd2EudG95YW1hLmpwIiwibmFtZXJpa2F3YS50b3lhbWEuanAi''@;'; put 'put ''LCJuYW50by50b3lhbWEuanAiLCJueXV6ZW4udG95YW1hLmpwIiwib3lhYmUudG95YW1hLmpwIiwidGFpcmEudG95YW1hLmpwIiwidGFrYW9rYS50b3lhbWEuanAiLCJ0YXRleWFtYS50b3lhbWEuanAiLCJ0b2dhLnRveWFtYS5qcCIsInRvbmFtaS50b3lhbWEuanAiLCJ0b3lhbWEudG95YW1h''@;'; put 'put ''LmpwIiwidW5henVraS50b3lhbWEuanAiLCJ1b3p1LnRveWFtYS5qcCIsInlhbWFkYS50b3lhbWEuanAiLCJhcmlkYS53YWtheWFtYS5qcCIsImFyaWRhZ2F3YS53YWtheWFtYS5qcCIsImdvYm8ud2FrYXlhbWEuanAiLCJoYXNoaW1vdG8ud2FrYXlhbWEuanAiLCJoaWRha2Eud2FrYXlhbWEu''@;'; put 'put ''anAiLCJoaXJvZ2F3YS53YWtheWFtYS5qcCIsImluYW1pLndha2F5YW1hLmpwIiwiaXdhZGUud2FrYXlhbWEuanAiLCJrYWluYW4ud2FrYXlhbWEuanAiLCJrYW1pdG9uZGEud2FrYXlhbWEuanAiLCJrYXRzdXJhZ2kud2FrYXlhbWEuanAiLCJraW1pbm8ud2FrYXlhbWEuanAiLCJraW5va2F3''@;'; put 'put ''YS53YWtheWFtYS5qcCIsImtpdGF5YW1hLndha2F5YW1hLmpwIiwia295YS53YWtheWFtYS5qcCIsImtvemEud2FrYXlhbWEuanAiLCJrb3phZ2F3YS53YWtheWFtYS5qcCIsImt1ZG95YW1hLndha2F5YW1hLmpwIiwia3VzaGltb3RvLndha2F5YW1hLmpwIiwibWloYW1hLndha2F5YW1hLmpw''@;'; put 'put ''IiwibWlzYXRvLndha2F5YW1hLmpwIiwibmFjaGlrYXRzdXVyYS53YWtheWFtYS5qcCIsInNoaW5ndS53YWtheWFtYS5qcCIsInNoaXJhaGFtYS53YWtheWFtYS5qcCIsInRhaWppLndha2F5YW1hLmpwIiwidGFuYWJlLndha2F5YW1hLmpwIiwid2FrYXlhbWEud2FrYXlhbWEuanAiLCJ5dWFz''@;'; put 'put ''YS53YWtheWFtYS5qcCIsInl1cmEud2FrYXlhbWEuanAiLCJhc2FoaS55YW1hZ2F0YS5qcCIsImZ1bmFnYXRhLnlhbWFnYXRhLmpwIiwiaGlnYXNoaW5lLnlhbWFnYXRhLmpwIiwiaWlkZS55YW1hZ2F0YS5qcCIsImthaG9rdS55YW1hZ2F0YS5qcCIsImthbWlub3lhbWEueWFtYWdhdGEuanAi''@;'; put 'put ''LCJrYW5leWFtYS55YW1hZ2F0YS5qcCIsImthd2FuaXNoaS55YW1hZ2F0YS5qcCIsIm1hbXVyb2dhd2EueWFtYWdhdGEuanAiLCJtaWthd2EueWFtYWdhdGEuanAiLCJtdXJheWFtYS55YW1hZ2F0YS5qcCIsIm5hZ2FpLnlhbWFnYXRhLmpwIiwibmFrYXlhbWEueWFtYWdhdGEuanAiLCJuYW55''@;'; put 'put ''by55YW1hZ2F0YS5qcCIsIm5pc2hpa2F3YS55YW1hZ2F0YS5qcCIsIm9iYW5hemF3YS55YW1hZ2F0YS5qcCIsIm9lLnlhbWFnYXRhLmpwIiwib2d1bmkueWFtYWdhdGEuanAiLCJvaGt1cmEueWFtYWdhdGEuanAiLCJvaXNoaWRhLnlhbWFnYXRhLmpwIiwic2FnYWUueWFtYWdhdGEuanAiLCJz''@;'; put 'put ''YWthdGEueWFtYWdhdGEuanAiLCJzYWtlZ2F3YS55YW1hZ2F0YS5qcCIsInNoaW5qby55YW1hZ2F0YS5qcCIsInNoaXJhdGFrYS55YW1hZ2F0YS5qcCIsInNob25haS55YW1hZ2F0YS5qcCIsInRha2FoYXRhLnlhbWFnYXRhLmpwIiwidGVuZG8ueWFtYWdhdGEuanAiLCJ0b3phd2EueWFtYWdh''@;'; put 'put ''dGEuanAiLCJ0c3VydW9rYS55YW1hZ2F0YS5qcCIsInlhbWFnYXRhLnlhbWFnYXRhLmpwIiwieWFtYW5vYmUueWFtYWdhdGEuanAiLCJ5b25lemF3YS55YW1hZ2F0YS5qcCIsInl1emEueWFtYWdhdGEuanAiLCJhYnUueWFtYWd1Y2hpLmpwIiwiaGFnaS55YW1hZ3VjaGkuanAiLCJoaWthcmku''@;'; put 'put ''eWFtYWd1Y2hpLmpwIiwiaG9mdS55YW1hZ3VjaGkuanAiLCJpd2FrdW5pLnlhbWFndWNoaS5qcCIsImt1ZGFtYXRzdS55YW1hZ3VjaGkuanAiLCJtaXRvdS55YW1hZ3VjaGkuanAiLCJuYWdhdG8ueWFtYWd1Y2hpLmpwIiwib3NoaW1hLnlhbWFndWNoaS5qcCIsInNoaW1vbm9zZWtpLnlhbWFn''@;'; put 'put ''dWNoaS5qcCIsInNodW5hbi55YW1hZ3VjaGkuanAiLCJ0YWJ1c2UueWFtYWd1Y2hpLmpwIiwidG9rdXlhbWEueWFtYWd1Y2hpLmpwIiwidG95b3RhLnlhbWFndWNoaS5qcCIsInViZS55YW1hZ3VjaGkuanAiLCJ5dXUueWFtYWd1Y2hpLmpwIiwiY2h1by55YW1hbmFzaGkuanAiLCJkb3NoaS55''@;'; put 'put ''YW1hbmFzaGkuanAiLCJmdWVmdWtpLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhLnlhbWFuYXNoaS5qcCIsImZ1amlrYXdhZ3VjaGlrby55YW1hbmFzaGkuanAiLCJmdWppeW9zaGlkYS55YW1hbmFzaGkuanAiLCJoYXlha2F3YS55YW1hbmFzaGkuanAiLCJob2t1dG8ueWFtYW5hc2hpLmpwIiwi''@;'; put 'put ''aWNoaWthd2FtaXNhdG8ueWFtYW5hc2hpLmpwIiwia2FpLnlhbWFuYXNoaS5qcCIsImtvZnUueWFtYW5hc2hpLmpwIiwia29zaHUueWFtYW5hc2hpLmpwIiwia29zdWdlLnlhbWFuYXNoaS5qcCIsIm1pbmFtaS1hbHBzLnlhbWFuYXNoaS5qcCIsIm1pbm9idS55YW1hbmFzaGkuanAiLCJuYWth''@;'; put 'put ''bWljaGkueWFtYW5hc2hpLmpwIiwibmFuYnUueWFtYW5hc2hpLmpwIiwibmFydXNhd2EueWFtYW5hc2hpLmpwIiwibmlyYXNha2kueWFtYW5hc2hpLmpwIiwibmlzaGlrYXRzdXJhLnlhbWFuYXNoaS5qcCIsIm9zaGluby55YW1hbmFzaGkuanAiLCJvdHN1a2kueWFtYW5hc2hpLmpwIiwic2hv''@;'; put 'put ''d2EueWFtYW5hc2hpLmpwIiwidGFiYXlhbWEueWFtYW5hc2hpLmpwIiwidHN1cnUueWFtYW5hc2hpLmpwIiwidWVub2hhcmEueWFtYW5hc2hpLmpwIiwieWFtYW5ha2Frby55YW1hbmFzaGkuanAiLCJ5YW1hbmFzaGkueWFtYW5hc2hpLmpwIiwia2UiLCJhYy5rZSIsImNvLmtlIiwiZ28ua2Ui''@;'; put 'put ''LCJpbmZvLmtlIiwibWUua2UiLCJtb2JpLmtlIiwibmUua2UiLCJvci5rZSIsInNjLmtlIiwia2ciLCJvcmcua2ciLCJuZXQua2ciLCJjb20ua2ciLCJlZHUua2ciLCJnb3Yua2ciLCJtaWwua2ciLCIqLmtoIiwia2kiLCJlZHUua2kiLCJiaXoua2kiLCJuZXQua2kiLCJvcmcua2kiLCJnb3Yu''@;'; put 'put ''a2kiLCJpbmZvLmtpIiwiY29tLmtpIiwia20iLCJvcmcua20iLCJub20ua20iLCJnb3Yua20iLCJwcmQua20iLCJ0bS5rbSIsImVkdS5rbSIsIm1pbC5rbSIsImFzcy5rbSIsImNvbS5rbSIsImNvb3Aua20iLCJhc3NvLmttIiwicHJlc3NlLmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmtt''@;'; put 'put ''IiwicGhhcm1hY2llbnMua20iLCJ2ZXRlcmluYWlyZS5rbSIsImdvdXYua20iLCJrbiIsIm5ldC5rbiIsIm9yZy5rbiIsImVkdS5rbiIsImdvdi5rbiIsImtwIiwiY29tLmtwIiwiZWR1LmtwIiwiZ292LmtwIiwib3JnLmtwIiwicmVwLmtwIiwidHJhLmtwIiwia3IiLCJhYy5rciIsImNvLmty''@;'; put 'put ''IiwiZXMua3IiLCJnby5rciIsImhzLmtyIiwia2cua3IiLCJtaWwua3IiLCJtcy5rciIsIm5lLmtyIiwib3Iua3IiLCJwZS5rciIsInJlLmtyIiwic2Mua3IiLCJidXNhbi5rciIsImNodW5nYnVrLmtyIiwiY2h1bmduYW0ua3IiLCJkYWVndS5rciIsImRhZWplb24ua3IiLCJnYW5nd29uLmty''@;'; put 'put ''IiwiZ3dhbmdqdS5rciIsImd5ZW9uZ2J1ay5rciIsImd5ZW9uZ2dpLmtyIiwiZ3llb25nbmFtLmtyIiwiaW5jaGVvbi5rciIsImplanUua3IiLCJqZW9uYnVrLmtyIiwiamVvbm5hbS5rciIsInNlb3VsLmtyIiwidWxzYW4ua3IiLCJrdyIsImNvbS5rdyIsImVkdS5rdyIsImVtYi5rdyIsImdv''@;'; put 'put ''di5rdyIsImluZC5rdyIsIm5ldC5rdyIsIm9yZy5rdyIsImt5IiwiY29tLmt5IiwiZWR1Lmt5IiwibmV0Lmt5Iiwib3JnLmt5Iiwia3oiLCJvcmcua3oiLCJlZHUua3oiLCJuZXQua3oiLCJnb3Yua3oiLCJtaWwua3oiLCJjb20ua3oiLCJsYSIsImludC5sYSIsIm5ldC5sYSIsImluZm8ubGEi''@;'; put 'put ''LCJlZHUubGEiLCJnb3YubGEiLCJwZXIubGEiLCJjb20ubGEiLCJvcmcubGEiLCJsYiIsImNvbS5sYiIsImVkdS5sYiIsImdvdi5sYiIsIm5ldC5sYiIsIm9yZy5sYiIsImxjIiwiY29tLmxjIiwibmV0LmxjIiwiY28ubGMiLCJvcmcubGMiLCJlZHUubGMiLCJnb3YubGMiLCJsaSIsImxrIiwi''@;'; put 'put ''Z292LmxrIiwic2NoLmxrIiwibmV0LmxrIiwiaW50LmxrIiwiY29tLmxrIiwib3JnLmxrIiwiZWR1LmxrIiwibmdvLmxrIiwic29jLmxrIiwid2ViLmxrIiwibHRkLmxrIiwiYXNzbi5sayIsImdycC5sayIsImhvdGVsLmxrIiwiYWMubGsiLCJsciIsImNvbS5sciIsImVkdS5sciIsImdvdi5s''@;'; put 'put ''ciIsIm9yZy5sciIsIm5ldC5sciIsImxzIiwiYWMubHMiLCJiaXoubHMiLCJjby5scyIsImVkdS5scyIsImdvdi5scyIsImluZm8ubHMiLCJuZXQubHMiLCJvcmcubHMiLCJzYy5scyIsImx0IiwiZ292Lmx0IiwibHUiLCJsdiIsImNvbS5sdiIsImVkdS5sdiIsImdvdi5sdiIsIm9yZy5sdiIs''@;'; put 'put ''Im1pbC5sdiIsImlkLmx2IiwibmV0Lmx2IiwiYXNuLmx2IiwiY29uZi5sdiIsImx5IiwiY29tLmx5IiwibmV0Lmx5IiwiZ292Lmx5IiwicGxjLmx5IiwiZWR1Lmx5Iiwic2NoLmx5IiwibWVkLmx5Iiwib3JnLmx5IiwiaWQubHkiLCJtYSIsImNvLm1hIiwibmV0Lm1hIiwiZ292Lm1hIiwib3Jn''@;'; put 'put ''Lm1hIiwiYWMubWEiLCJwcmVzcy5tYSIsIm1jIiwidG0ubWMiLCJhc3NvLm1jIiwibWQiLCJtZSIsImNvLm1lIiwibmV0Lm1lIiwib3JnLm1lIiwiZWR1Lm1lIiwiYWMubWUiLCJnb3YubWUiLCJpdHMubWUiLCJwcml2Lm1lIiwibWciLCJvcmcubWciLCJub20ubWciLCJnb3YubWciLCJwcmQu''@;'; put 'put ''bWciLCJ0bS5tZyIsImVkdS5tZyIsIm1pbC5tZyIsImNvbS5tZyIsImNvLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsIm9yZy5tayIsIm5ldC5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3Yu''@;'; put 'put ''bWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVzc2UubWwiLCIqLm1tIiwibW4iLCJnb3YubW4iLCJlZHUubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5t''@;'; put 'put ''cyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5tcyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJjb20ubXUiLCJuZXQubXUiLCJvcmcubXUiLCJnb3YubXUiLCJhYy5tdSIsImNvLm11Iiwib3IubXUiLCJtdXNldW0iLCJhY2FkZW15Lm11''@;'; put 'put ''c2V1bSIsImFncmljdWx0dXJlLm11c2V1bSIsImFpci5tdXNldW0iLCJhaXJndWFyZC5tdXNldW0iLCJhbGFiYW1hLm11c2V1bSIsImFsYXNrYS5tdXNldW0iLCJhbWJlci5tdXNldW0iLCJhbWJ1bGFuY2UubXVzZXVtIiwiYW1lcmljYW4ubXVzZXVtIiwiYW1lcmljYW5hLm11c2V1bSIsImFt''@;'; put 'put ''ZXJpY2FuYW50aXF1ZXMubXVzZXVtIiwiYW1lcmljYW5hcnQubXVzZXVtIiwiYW1zdGVyZGFtLm11c2V1bSIsImFuZC5tdXNldW0iLCJhbm5lZnJhbmsubXVzZXVtIiwiYW50aHJvLm11c2V1bSIsImFudGhyb3BvbG9neS5tdXNldW0iLCJhbnRpcXVlcy5tdXNldW0iLCJhcXVhcml1bS5tdXNl''@;'; put 'put ''dW0iLCJhcmJvcmV0dW0ubXVzZXVtIiwiYXJjaGFlb2xvZ2ljYWwubXVzZXVtIiwiYXJjaGFlb2xvZ3kubXVzZXVtIiwiYXJjaGl0ZWN0dXJlLm11c2V1bSIsImFydC5tdXNldW0iLCJhcnRhbmRkZXNpZ24ubXVzZXVtIiwiYXJ0Y2VudGVyLm11c2V1bSIsImFydGRlY28ubXVzZXVtIiwiYXJ0''@;'; put 'put ''ZWR1Y2F0aW9uLm11c2V1bSIsImFydGdhbGxlcnkubXVzZXVtIiwiYXJ0cy5tdXNldW0iLCJhcnRzYW5kY3JhZnRzLm11c2V1bSIsImFzbWF0YXJ0Lm11c2V1bSIsImFzc2Fzc2luYXRpb24ubXVzZXVtIiwiYXNzaXNpLm11c2V1bSIsImFzc29jaWF0aW9uLm11c2V1bSIsImFzdHJvbm9teS5t''@;'; put 'put ''dXNldW0iLCJhdGxhbnRhLm11c2V1bSIsImF1c3Rpbi5tdXNldW0iLCJhdXN0cmFsaWEubXVzZXVtIiwiYXV0b21vdGl2ZS5tdXNldW0iLCJhdmlhdGlvbi5tdXNldW0iLCJheGlzLm11c2V1bSIsImJhZGFqb3oubXVzZXVtIiwiYmFnaGRhZC5tdXNldW0iLCJiYWhuLm11c2V1bSIsImJhbGUu''@;'; put 'put ''bXVzZXVtIiwiYmFsdGltb3JlLm11c2V1bSIsImJhcmNlbG9uYS5tdXNldW0iLCJiYXNlYmFsbC5tdXNldW0iLCJiYXNlbC5tdXNldW0iLCJiYXRocy5tdXNldW0iLCJiYXVlcm4ubXVzZXVtIiwiYmVhdXhhcnRzLm11c2V1bSIsImJlZWxkZW5nZWx1aWQubXVzZXVtIiwiYmVsbGV2dWUubXVz''@;'; put 'put ''ZXVtIiwiYmVyZ2JhdS5tdXNldW0iLCJiZXJrZWxleS5tdXNldW0iLCJiZXJsaW4ubXVzZXVtIiwiYmVybi5tdXNldW0iLCJiaWJsZS5tdXNldW0iLCJiaWxiYW8ubXVzZXVtIiwiYmlsbC5tdXNldW0iLCJiaXJkYXJ0Lm11c2V1bSIsImJpcnRocGxhY2UubXVzZXVtIiwiYm9ubi5tdXNldW0i''@;'; put 'put ''LCJib3N0b24ubXVzZXVtIiwiYm90YW5pY2FsLm11c2V1bSIsImJvdGFuaWNhbGdhcmRlbi5tdXNldW0iLCJib3RhbmljZ2FyZGVuLm11c2V1bSIsImJvdGFueS5tdXNldW0iLCJicmFuZHl3aW5ldmFsbGV5Lm11c2V1bSIsImJyYXNpbC5tdXNldW0iLCJicmlzdG9sLm11c2V1bSIsImJyaXRp''@;'; put 'put ''c2gubXVzZXVtIiwiYnJpdGlzaGNvbHVtYmlhLm11c2V1bSIsImJyb2FkY2FzdC5tdXNldW0iLCJicnVuZWwubXVzZXVtIiwiYnJ1c3NlbC5tdXNldW0iLCJicnVzc2Vscy5tdXNldW0iLCJicnV4ZWxsZXMubXVzZXVtIiwiYnVpbGRpbmcubXVzZXVtIiwiYnVyZ2hvZi5tdXNldW0iLCJidXMu''@;'; put 'put ''bXVzZXVtIiwiYnVzaGV5Lm11c2V1bSIsImNhZGFxdWVzLm11c2V1bSIsImNhbGlmb3JuaWEubXVzZXVtIiwiY2FtYnJpZGdlLm11c2V1bSIsImNhbi5tdXNldW0iLCJjYW5hZGEubXVzZXVtIiwiY2FwZWJyZXRvbi5tdXNldW0iLCJjYXJyaWVyLm11c2V1bSIsImNhcnRvb25hcnQubXVzZXVt''@;'; put 'put ''IiwiY2FzYWRlbGFtb25lZGEubXVzZXVtIiwiY2FzdGxlLm11c2V1bSIsImNhc3RyZXMubXVzZXVtIiwiY2VsdGljLm11c2V1bSIsImNlbnRlci5tdXNldW0iLCJjaGF0dGFub29nYS5tdXNldW0iLCJjaGVsdGVuaGFtLm11c2V1bSIsImNoZXNhcGVha2ViYXkubXVzZXVtIiwiY2hpY2Fnby5t''@;'; put 'put ''dXNldW0iLCJjaGlsZHJlbi5tdXNldW0iLCJjaGlsZHJlbnMubXVzZXVtIiwiY2hpbGRyZW5zZ2FyZGVuLm11c2V1bSIsImNoaXJvcHJhY3RpYy5tdXNldW0iLCJjaG9jb2xhdGUubXVzZXVtIiwiY2hyaXN0aWFuc2J1cmcubXVzZXVtIiwiY2luY2lubmF0aS5tdXNldW0iLCJjaW5lbWEubXVz''@;'; put 'put ''ZXVtIiwiY2lyY3VzLm11c2V1bSIsImNpdmlsaXNhdGlvbi5tdXNldW0iLCJjaXZpbGl6YXRpb24ubXVzZXVtIiwiY2l2aWx3YXIubXVzZXVtIiwiY2xpbnRvbi5tdXNldW0iLCJjbG9jay5tdXNldW0iLCJjb2FsLm11c2V1bSIsImNvYXN0YWxkZWZlbmNlLm11c2V1bSIsImNvZHkubXVzZXVt''@;'; put 'put ''IiwiY29sZHdhci5tdXNldW0iLCJjb2xsZWN0aW9uLm11c2V1bSIsImNvbG9uaWFsd2lsbGlhbXNidXJnLm11c2V1bSIsImNvbG9yYWRvcGxhdGVhdS5tdXNldW0iLCJjb2x1bWJpYS5tdXNldW0iLCJjb2x1bWJ1cy5tdXNldW0iLCJjb21tdW5pY2F0aW9uLm11c2V1bSIsImNvbW11bmljYXRp''@;'; put 'put ''b25zLm11c2V1bSIsImNvbW11bml0eS5tdXNldW0iLCJjb21wdXRlci5tdXNldW0iLCJjb21wdXRlcmhpc3RvcnkubXVzZXVtIiwiY29tdW5pY2FceGU3XHhmNWVzLm11c2V1bSIsImNvbnRlbXBvcmFyeS5tdXNldW0iLCJjb250ZW1wb3JhcnlhcnQubXVzZXVtIiwiY29udmVudC5tdXNldW0i''@;'; put 'put ''LCJjb3BlbmhhZ2VuLm11c2V1bSIsImNvcnBvcmF0aW9uLm11c2V1bSIsImNvcnJlaW9zLWUtdGVsZWNvbXVuaWNhXHhlN1x4ZjVlcy5tdXNldW0iLCJjb3J2ZXR0ZS5tdXNldW0iLCJjb3N0dW1lLm11c2V1bSIsImNvdW50cnllc3RhdGUubXVzZXVtIiwiY291bnR5Lm11c2V1bSIsImNyYWZ0''@;'; put 'put ''cy5tdXNldW0iLCJjcmFuYnJvb2subXVzZXVtIiwiY3JlYXRpb24ubXVzZXVtIiwiY3VsdHVyYWwubXVzZXVtIiwiY3VsdHVyYWxjZW50ZXIubXVzZXVtIiwiY3VsdHVyZS5tdXNldW0iLCJjeWJlci5tdXNldW0iLCJjeW1ydS5tdXNldW0iLCJkYWxpLm11c2V1bSIsImRhbGxhcy5tdXNldW0i''@;'; put 'put ''LCJkYXRhYmFzZS5tdXNldW0iLCJkZHIubXVzZXVtIiwiZGVjb3JhdGl2ZWFydHMubXVzZXVtIiwiZGVsYXdhcmUubXVzZXVtIiwiZGVsbWVuaG9yc3QubXVzZXVtIiwiZGVubWFyay5tdXNldW0iLCJkZXBvdC5tdXNldW0iLCJkZXNpZ24ubXVzZXVtIiwiZGV0cm9pdC5tdXNldW0iLCJkaW5v''@;'; put 'put ''c2F1ci5tdXNldW0iLCJkaXNjb3ZlcnkubXVzZXVtIiwiZG9sbHMubXVzZXVtIiwiZG9ub3N0aWEubXVzZXVtIiwiZHVyaGFtLm11c2V1bSIsImVhc3RhZnJpY2EubXVzZXVtIiwiZWFzdGNvYXN0Lm11c2V1bSIsImVkdWNhdGlvbi5tdXNldW0iLCJlZHVjYXRpb25hbC5tdXNldW0iLCJlZ3lw''@;'; put 'put ''dGlhbi5tdXNldW0iLCJlaXNlbmJhaG4ubXVzZXVtIiwiZWxidXJnLm11c2V1bSIsImVsdmVuZHJlbGwubXVzZXVtIiwiZW1icm9pZGVyeS5tdXNldW0iLCJlbmN5Y2xvcGVkaWMubXVzZXVtIiwiZW5nbGFuZC5tdXNldW0iLCJlbnRvbW9sb2d5Lm11c2V1bSIsImVudmlyb25tZW50Lm11c2V1''@;'; put 'put ''bSIsImVudmlyb25tZW50YWxjb25zZXJ2YXRpb24ubXVzZXVtIiwiZXBpbGVwc3kubXVzZXVtIiwiZXNzZXgubXVzZXVtIiwiZXN0YXRlLm11c2V1bSIsImV0aG5vbG9neS5tdXNldW0iLCJleGV0ZXIubXVzZXVtIiwiZXhoaWJpdGlvbi5tdXNldW0iLCJmYW1pbHkubXVzZXVtIiwiZmFybS5t''@;'; put 'put ''dXNldW0iLCJmYXJtZXF1aXBtZW50Lm11c2V1bSIsImZhcm1lcnMubXVzZXVtIiwiZmFybXN0ZWFkLm11c2V1bSIsImZpZWxkLm11c2V1bSIsImZpZ3VlcmVzLm11c2V1bSIsImZpbGF0ZWxpYS5tdXNldW0iLCJmaWxtLm11c2V1bSIsImZpbmVhcnQubXVzZXVtIiwiZmluZWFydHMubXVzZXVt''@;'; put 'put ''IiwiZmlubGFuZC5tdXNldW0iLCJmbGFuZGVycy5tdXNldW0iLCJmbG9yaWRhLm11c2V1bSIsImZvcmNlLm11c2V1bSIsImZvcnRtaXNzb3VsYS5tdXNldW0iLCJmb3J0d29ydGgubXVzZXVtIiwiZm91bmRhdGlvbi5tdXNldW0iLCJmcmFuY2Fpc2UubXVzZXVtIiwiZnJhbmtmdXJ0Lm11c2V1''@;'; put 'put ''bSIsImZyYW56aXNrYW5lci5tdXNldW0iLCJmcmVlbWFzb25yeS5tdXNldW0iLCJmcmVpYnVyZy5tdXNldW0iLCJmcmlib3VyZy5tdXNldW0iLCJmcm9nLm11c2V1bSIsImZ1bmRhY2lvLm11c2V1bSIsImZ1cm5pdHVyZS5tdXNldW0iLCJnYWxsZXJ5Lm11c2V1bSIsImdhcmRlbi5tdXNldW0i''@;'; put 'put ''LCJnYXRld2F5Lm11c2V1bSIsImdlZWx2aW5jay5tdXNldW0iLCJnZW1vbG9naWNhbC5tdXNldW0iLCJnZW9sb2d5Lm11c2V1bSIsImdlb3JnaWEubXVzZXVtIiwiZ2llc3Nlbi5tdXNldW0iLCJnbGFzLm11c2V1bSIsImdsYXNzLm11c2V1bSIsImdvcmdlLm11c2V1bSIsImdyYW5kcmFwaWRz''@;'; put 'put ''Lm11c2V1bSIsImdyYXoubXVzZXVtIiwiZ3Vlcm5zZXkubXVzZXVtIiwiaGFsbG9mZmFtZS5tdXNldW0iLCJoYW1idXJnLm11c2V1bSIsImhhbmRzb24ubXVzZXVtIiwiaGFydmVzdGNlbGVicmF0aW9uLm11c2V1bSIsImhhd2FpaS5tdXNldW0iLCJoZWFsdGgubXVzZXVtIiwiaGVpbWF0dW5k''@;'; put 'put ''dWhyZW4ubXVzZXVtIiwiaGVsbGFzLm11c2V1bSIsImhlbHNpbmtpLm11c2V1bSIsImhlbWJ5Z2RzZm9yYnVuZC5tdXNldW0iLCJoZXJpdGFnZS5tdXNldW0iLCJoaXN0b2lyZS5tdXNldW0iLCJoaXN0b3JpY2FsLm11c2V1bSIsImhpc3RvcmljYWxzb2NpZXR5Lm11c2V1bSIsImhpc3Rvcmlj''@;'; put 'put ''aG91c2VzLm11c2V1bSIsImhpc3RvcmlzY2gubXVzZXVtIiwiaGlzdG9yaXNjaGVzLm11c2V1bSIsImhpc3RvcnkubXVzZXVtIiwiaGlzdG9yeW9mc2NpZW5jZS5tdXNldW0iLCJob3JvbG9neS5tdXNldW0iLCJob3VzZS5tdXNldW0iLCJodW1hbml0aWVzLm11c2V1bSIsImlsbHVzdHJhdGlv''@;'; put 'put ''bi5tdXNldW0iLCJpbWFnZWFuZHNvdW5kLm11c2V1bSIsImluZGlhbi5tdXNldW0iLCJpbmRpYW5hLm11c2V1bSIsImluZGlhbmFwb2xpcy5tdXNldW0iLCJpbmRpYW5tYXJrZXQubXVzZXVtIiwiaW50ZWxsaWdlbmNlLm11c2V1bSIsImludGVyYWN0aXZlLm11c2V1bSIsImlyYXEubXVzZXVt''@;'; put 'put ''IiwiaXJvbi5tdXNldW0iLCJpc2xlb2ZtYW4ubXVzZXVtIiwiamFtaXNvbi5tdXNldW0iLCJqZWZmZXJzb24ubXVzZXVtIiwiamVydXNhbGVtLm11c2V1bSIsImpld2VscnkubXVzZXVtIiwiamV3aXNoLm11c2V1bSIsImpld2lzaGFydC5tdXNldW0iLCJqZmsubXVzZXVtIiwiam91cm5hbGlz''@;'; put 'put ''bS5tdXNldW0iLCJqdWRhaWNhLm11c2V1bSIsImp1ZHlnYXJsYW5kLm11c2V1bSIsImp1ZWRpc2NoZXMubXVzZXVtIiwianVpZi5tdXNldW0iLCJrYXJhdGUubXVzZXVtIiwia2FyaWthdHVyLm11c2V1bSIsImtpZHMubXVzZXVtIiwia29lYmVuaGF2bi5tdXNldW0iLCJrb2Vsbi5tdXNldW0i''@;'; put 'put ''LCJrdW5zdC5tdXNldW0iLCJrdW5zdHNhbW1sdW5nLm11c2V1bSIsImt1bnN0dW5kZGVzaWduLm11c2V1bSIsImxhYm9yLm11c2V1bSIsImxhYm91ci5tdXNldW0iLCJsYWpvbGxhLm11c2V1bSIsImxhbmNhc2hpcmUubXVzZXVtIiwibGFuZGVzLm11c2V1bSIsImxhbnMubXVzZXVtIiwibFx4''@;'; put 'put ''ZTRucy5tdXNldW0iLCJsYXJzc29uLm11c2V1bSIsImxld2lzbWlsbGVyLm11c2V1bSIsImxpbmNvbG4ubXVzZXVtIiwibGluei5tdXNldW0iLCJsaXZpbmcubXVzZXVtIiwibGl2aW5naGlzdG9yeS5tdXNldW0iLCJsb2NhbGhpc3RvcnkubXVzZXVtIiwibG9uZG9uLm11c2V1bSIsImxvc2Fu''@;'; put 'put ''Z2VsZXMubXVzZXVtIiwibG91dnJlLm11c2V1bSIsImxveWFsaXN0Lm11c2V1bSIsImx1Y2VybmUubXVzZXVtIiwibHV4ZW1ib3VyZy5tdXNldW0iLCJsdXplcm4ubXVzZXVtIiwibWFkLm11c2V1bSIsIm1hZHJpZC5tdXNldW0iLCJtYWxsb3JjYS5tdXNldW0iLCJtYW5jaGVzdGVyLm11c2V1''@;'; put 'put ''bSIsIm1hbnNpb24ubXVzZXVtIiwibWFuc2lvbnMubXVzZXVtIiwibWFueC5tdXNldW0iLCJtYXJidXJnLm11c2V1bSIsIm1hcml0aW1lLm11c2V1bSIsIm1hcml0aW1vLm11c2V1bSIsIm1hcnlsYW5kLm11c2V1bSIsIm1hcnlsaHVyc3QubXVzZXVtIiwibWVkaWEubXVzZXVtIiwibWVkaWNh''@;'; put 'put ''bC5tdXNldW0iLCJtZWRpemluaGlzdG9yaXNjaGVzLm11c2V1bSIsIm1lZXJlcy5tdXNldW0iLCJtZW1vcmlhbC5tdXNldW0iLCJtZXNhdmVyZGUubXVzZXVtIiwibWljaGlnYW4ubXVzZXVtIiwibWlkYXRsYW50aWMubXVzZXVtIiwibWlsaXRhcnkubXVzZXVtIiwibWlsbC5tdXNldW0iLCJt''@;'; put 'put ''aW5lcnMubXVzZXVtIiwibWluaW5nLm11c2V1bSIsIm1pbm5lc290YS5tdXNldW0iLCJtaXNzaWxlLm11c2V1bSIsIm1pc3NvdWxhLm11c2V1bSIsIm1vZGVybi5tdXNldW0iLCJtb21hLm11c2V1bSIsIm1vbmV5Lm11c2V1bSIsIm1vbm1vdXRoLm11c2V1bSIsIm1vbnRpY2VsbG8ubXVzZXVt''@;'; put 'put ''IiwibW9udHJlYWwubXVzZXVtIiwibW9zY293Lm11c2V1bSIsIm1vdG9yY3ljbGUubXVzZXVtIiwibXVlbmNoZW4ubXVzZXVtIiwibXVlbnN0ZXIubXVzZXVtIiwibXVsaG91c2UubXVzZXVtIiwibXVuY2llLm11c2V1bSIsIm11c2VldC5tdXNldW0iLCJtdXNldW1jZW50ZXIubXVzZXVtIiwi''@;'; put 'put ''bXVzZXVtdmVyZW5pZ2luZy5tdXNldW0iLCJtdXNpYy5tdXNldW0iLCJuYXRpb25hbC5tdXNldW0iLCJuYXRpb25hbGZpcmVhcm1zLm11c2V1bSIsIm5hdGlvbmFsaGVyaXRhZ2UubXVzZXVtIiwibmF0aXZlYW1lcmljYW4ubXVzZXVtIiwibmF0dXJhbGhpc3RvcnkubXVzZXVtIiwibmF0dXJh''@;'; put 'put ''bGhpc3RvcnltdXNldW0ubXVzZXVtIiwibmF0dXJhbHNjaWVuY2VzLm11c2V1bSIsIm5hdHVyZS5tdXNldW0iLCJuYXR1cmhpc3RvcmlzY2hlcy5tdXNldW0iLCJuYXR1dXJ3ZXRlbnNjaGFwcGVuLm11c2V1bSIsIm5hdW1idXJnLm11c2V1bSIsIm5hdmFsLm11c2V1bSIsIm5lYnJhc2thLm11''@;'; put 'put ''c2V1bSIsIm5ldWVzLm11c2V1bSIsIm5ld2hhbXBzaGlyZS5tdXNldW0iLCJuZXdqZXJzZXkubXVzZXVtIiwibmV3bWV4aWNvLm11c2V1bSIsIm5ld3BvcnQubXVzZXVtIiwibmV3c3BhcGVyLm11c2V1bSIsIm5ld3lvcmsubXVzZXVtIiwibmllcGNlLm11c2V1bSIsIm5vcmZvbGsubXVzZXVt''@;'; put 'put ''Iiwibm9ydGgubXVzZXVtIiwibnJ3Lm11c2V1bSIsIm55Yy5tdXNldW0iLCJueW55Lm11c2V1bSIsIm9jZWFub2dyYXBoaWMubXVzZXVtIiwib2NlYW5vZ3JhcGhpcXVlLm11c2V1bSIsIm9tYWhhLm11c2V1bSIsIm9ubGluZS5tdXNldW0iLCJvbnRhcmlvLm11c2V1bSIsIm9wZW5haXIubXVz''@;'; put 'put ''ZXVtIiwib3JlZ29uLm11c2V1bSIsIm9yZWdvbnRyYWlsLm11c2V1bSIsIm90YWdvLm11c2V1bSIsIm94Zm9yZC5tdXNldW0iLCJwYWNpZmljLm11c2V1bSIsInBhZGVyYm9ybi5tdXNldW0iLCJwYWxhY2UubXVzZXVtIiwicGFsZW8ubXVzZXVtIiwicGFsbXNwcmluZ3MubXVzZXVtIiwicGFu''@;'; put 'put ''YW1hLm11c2V1bSIsInBhcmlzLm11c2V1bSIsInBhc2FkZW5hLm11c2V1bSIsInBoYXJtYWN5Lm11c2V1bSIsInBoaWxhZGVscGhpYS5tdXNldW0iLCJwaGlsYWRlbHBoaWFhcmVhLm11c2V1bSIsInBoaWxhdGVseS5tdXNldW0iLCJwaG9lbml4Lm11c2V1bSIsInBob3RvZ3JhcGh5Lm11c2V1''@;'; put 'put ''bSIsInBpbG90cy5tdXNldW0iLCJwaXR0c2J1cmdoLm11c2V1bSIsInBsYW5ldGFyaXVtLm11c2V1bSIsInBsYW50YXRpb24ubXVzZXVtIiwicGxhbnRzLm11c2V1bSIsInBsYXphLm11c2V1bSIsInBvcnRhbC5tdXNldW0iLCJwb3J0bGFuZC5tdXNldW0iLCJwb3J0bGxpZ2F0Lm11c2V1bSIs''@;'; put 'put ''InBvc3RzLWFuZC10ZWxlY29tbXVuaWNhdGlvbnMubXVzZXVtIiwicHJlc2VydmF0aW9uLm11c2V1bSIsInByZXNpZGlvLm11c2V1bSIsInByZXNzLm11c2V1bSIsInByb2plY3QubXVzZXVtIiwicHVibGljLm11c2V1bSIsInB1Ym9sLm11c2V1bSIsInF1ZWJlYy5tdXNldW0iLCJyYWlscm9h''@;'; put 'put ''ZC5tdXNldW0iLCJyYWlsd2F5Lm11c2V1bSIsInJlc2VhcmNoLm11c2V1bSIsInJlc2lzdGFuY2UubXVzZXVtIiwicmlvZGVqYW5laXJvLm11c2V1bSIsInJvY2hlc3Rlci5tdXNldW0iLCJyb2NrYXJ0Lm11c2V1bSIsInJvbWEubXVzZXVtIiwicnVzc2lhLm11c2V1bSIsInNhaW50bG91aXMu''@;'; put 'put ''bXVzZXVtIiwic2FsZW0ubXVzZXVtIiwic2FsdmFkb3JkYWxpLm11c2V1bSIsInNhbHpidXJnLm11c2V1bSIsInNhbmRpZWdvLm11c2V1bSIsInNhbmZyYW5jaXNjby5tdXNldW0iLCJzYW50YWJhcmJhcmEubXVzZXVtIiwic2FudGFjcnV6Lm11c2V1bSIsInNhbnRhZmUubXVzZXVtIiwic2Fz''@;'; put 'put ''a2F0Y2hld2FuLm11c2V1bSIsInNhdHgubXVzZXVtIiwic2F2YW5uYWhnYS5tdXNldW0iLCJzY2hsZXNpc2NoZXMubXVzZXVtIiwic2Nob2VuYnJ1bm4ubXVzZXVtIiwic2Nob2tvbGFkZW4ubXVzZXVtIiwic2Nob29sLm11c2V1bSIsInNjaHdlaXoubXVzZXVtIiwic2NpZW5jZS5tdXNldW0i''@;'; put 'put ''LCJzY2llbmNlYW5kaGlzdG9yeS5tdXNldW0iLCJzY2llbmNlYW5kaW5kdXN0cnkubXVzZXVtIiwic2NpZW5jZWNlbnRlci5tdXNldW0iLCJzY2llbmNlY2VudGVycy5tdXNldW0iLCJzY2llbmNlLWZpY3Rpb24ubXVzZXVtIiwic2NpZW5jZWhpc3RvcnkubXVzZXVtIiwic2NpZW5jZXMubXVz''@;'; put 'put ''ZXVtIiwic2NpZW5jZXNuYXR1cmVsbGVzLm11c2V1bSIsInNjb3RsYW5kLm11c2V1bSIsInNlYXBvcnQubXVzZXVtIiwic2V0dGxlbWVudC5tdXNldW0iLCJzZXR0bGVycy5tdXNldW0iLCJzaGVsbC5tdXNldW0iLCJzaGVyYnJvb2tlLm11c2V1bSIsInNpYmVuaWsubXVzZXVtIiwic2lsay5t''@;'; put 'put ''dXNldW0iLCJza2kubXVzZXVtIiwic2tvbGUubXVzZXVtIiwic29jaWV0eS5tdXNldW0iLCJzb2xvZ25lLm11c2V1bSIsInNvdW5kYW5kdmlzaW9uLm11c2V1bSIsInNvdXRoY2Fyb2xpbmEubXVzZXVtIiwic291dGh3ZXN0Lm11c2V1bSIsInNwYWNlLm11c2V1bSIsInNweS5tdXNldW0iLCJz''@;'; put 'put ''cXVhcmUubXVzZXVtIiwic3RhZHQubXVzZXVtIiwic3RhbGJhbnMubXVzZXVtIiwic3Rhcm5iZXJnLm11c2V1bSIsInN0YXRlLm11c2V1bSIsInN0YXRlb2ZkZWxhd2FyZS5tdXNldW0iLCJzdGF0aW9uLm11c2V1bSIsInN0ZWFtLm11c2V1bSIsInN0ZWllcm1hcmsubXVzZXVtIiwic3Rqb2hu''@;'; put 'put ''Lm11c2V1bSIsInN0b2NraG9sbS5tdXNldW0iLCJzdHBldGVyc2J1cmcubXVzZXVtIiwic3R1dHRnYXJ0Lm11c2V1bSIsInN1aXNzZS5tdXNldW0iLCJzdXJnZW9uc2hhbGwubXVzZXVtIiwic3VycmV5Lm11c2V1bSIsInN2aXp6ZXJhLm11c2V1bSIsInN3ZWRlbi5tdXNldW0iLCJzeWRuZXku''@;'; put 'put ''bXVzZXVtIiwidGFuay5tdXNldW0iLCJ0Y20ubXVzZXVtIiwidGVjaG5vbG9neS5tdXNldW0iLCJ0ZWxla29tbXVuaWthdGlvbi5tdXNldW0iLCJ0ZWxldmlzaW9uLm11c2V1bSIsInRleGFzLm11c2V1bSIsInRleHRpbGUubXVzZXVtIiwidGhlYXRlci5tdXNldW0iLCJ0aW1lLm11c2V1bSIs''@;'; put 'put ''InRpbWVrZWVwaW5nLm11c2V1bSIsInRvcG9sb2d5Lm11c2V1bSIsInRvcmluby5tdXNldW0iLCJ0b3VjaC5tdXNldW0iLCJ0b3duLm11c2V1bSIsInRyYW5zcG9ydC5tdXNldW0iLCJ0cmVlLm11c2V1bSIsInRyb2xsZXkubXVzZXVtIiwidHJ1c3QubXVzZXVtIiwidHJ1c3RlZS5tdXNldW0i''@;'; put 'put ''LCJ1aHJlbi5tdXNldW0iLCJ1bG0ubXVzZXVtIiwidW5kZXJzZWEubXVzZXVtIiwidW5pdmVyc2l0eS5tdXNldW0iLCJ1c2EubXVzZXVtIiwidXNhbnRpcXVlcy5tdXNldW0iLCJ1c2FydHMubXVzZXVtIiwidXNjb3VudHJ5ZXN0YXRlLm11c2V1bSIsInVzY3VsdHVyZS5tdXNldW0iLCJ1c2Rl''@;'; put 'put ''Y29yYXRpdmVhcnRzLm11c2V1bSIsInVzZ2FyZGVuLm11c2V1bSIsInVzaGlzdG9yeS5tdXNldW0iLCJ1c2h1YWlhLm11c2V1bSIsInVzbGl2aW5naGlzdG9yeS5tdXNldW0iLCJ1dGFoLm11c2V1bSIsInV2aWMubXVzZXVtIiwidmFsbGV5Lm11c2V1bSIsInZhbnRhYS5tdXNldW0iLCJ2ZXJz''@;'; put 'put ''YWlsbGVzLm11c2V1bSIsInZpa2luZy5tdXNldW0iLCJ2aWxsYWdlLm11c2V1bSIsInZpcmdpbmlhLm11c2V1bSIsInZpcnR1YWwubXVzZXVtIiwidmlydHVlbC5tdXNldW0iLCJ2bGFhbmRlcmVuLm11c2V1bSIsInZvbGtlbmt1bmRlLm11c2V1bSIsIndhbGVzLm11c2V1bSIsIndhbGxvbmll''@;'; put 'put ''Lm11c2V1bSIsIndhci5tdXNldW0iLCJ3YXNoaW5ndG9uZGMubXVzZXVtIiwid2F0Y2hhbmRjbG9jay5tdXNldW0iLCJ3YXRjaC1hbmQtY2xvY2subXVzZXVtIiwid2VzdGVybi5tdXNldW0iLCJ3ZXN0ZmFsZW4ubXVzZXVtIiwid2hhbGluZy5tdXNldW0iLCJ3aWxkbGlmZS5tdXNldW0iLCJ3''@;'; put 'put ''aWxsaWFtc2J1cmcubXVzZXVtIiwid2luZG1pbGwubXVzZXVtIiwid29ya3Nob3AubXVzZXVtIiwieW9yay5tdXNldW0iLCJ5b3Jrc2hpcmUubXVzZXVtIiwieW9zZW1pdGUubXVzZXVtIiwieW91dGgubXVzZXVtIiwiem9vbG9naWNhbC5tdXNldW0iLCJ6b29sb2d5Lm11c2V1bSIsIlx1MDVk''@;'; put 'put ''OVx1MDVlOFx1MDVkNVx1MDVlOVx1MDVkY1x1MDVkOVx1MDVkZC5tdXNldW0iLCJcdTA0MzhcdTA0M2FcdTA0M2VcdTA0M2MubXVzZXVtIiwibXYiLCJhZXJvLm12IiwiYml6Lm12IiwiY29tLm12IiwiY29vcC5tdiIsImVkdS5tdiIsImdvdi5tdiIsImluZm8ubXYiLCJpbnQubXYiLCJtaWwu''@;'; put 'put ''bXYiLCJtdXNldW0ubXYiLCJuYW1lLm12IiwibmV0Lm12Iiwib3JnLm12IiwicHJvLm12IiwibXciLCJhYy5tdyIsImJpei5tdyIsImNvLm13IiwiY29tLm13IiwiY29vcC5tdyIsImVkdS5tdyIsImdvdi5tdyIsImludC5tdyIsIm11c2V1bS5tdyIsIm5ldC5tdyIsIm9yZy5tdyIsIm14Iiwi''@;'; put 'put ''Y29tLm14Iiwib3JnLm14IiwiZ29iLm14IiwiZWR1Lm14IiwibmV0Lm14IiwibXkiLCJiaXoubXkiLCJjb20ubXkiLCJlZHUubXkiLCJnb3YubXkiLCJtaWwubXkiLCJuYW1lLm15IiwibmV0Lm15Iiwib3JnLm15IiwibXoiLCJhYy5teiIsImFkdi5teiIsImNvLm16IiwiZWR1Lm16IiwiZ292''@;'; put 'put ''Lm16IiwibWlsLm16IiwibmV0Lm16Iiwib3JnLm16IiwibmEiLCJpbmZvLm5hIiwicHJvLm5hIiwibmFtZS5uYSIsInNjaG9vbC5uYSIsIm9yLm5hIiwiZHIubmEiLCJ1cy5uYSIsIm14Lm5hIiwiY2EubmEiLCJpbi5uYSIsImNjLm5hIiwidHYubmEiLCJ3cy5uYSIsIm1vYmkubmEiLCJjby5u''@;'; put 'put ''YSIsImNvbS5uYSIsIm9yZy5uYSIsIm5hbWUiLCJuYyIsImFzc28ubmMiLCJub20ubmMiLCJuZSIsIm5ldCIsIm5mIiwiY29tLm5mIiwibmV0Lm5mIiwicGVyLm5mIiwicmVjLm5mIiwid2ViLm5mIiwiYXJ0cy5uZiIsImZpcm0ubmYiLCJpbmZvLm5mIiwib3RoZXIubmYiLCJzdG9yZS5uZiIs''@;'; put 'put ''Im5nIiwiY29tLm5nIiwiZWR1Lm5nIiwiZ292Lm5nIiwiaS5uZyIsIm1pbC5uZyIsIm1vYmkubmciLCJuYW1lLm5nIiwibmV0Lm5nIiwib3JnLm5nIiwic2NoLm5nIiwibmkiLCJhYy5uaSIsImJpei5uaSIsImNvLm5pIiwiY29tLm5pIiwiZWR1Lm5pIiwiZ29iLm5pIiwiaW4ubmkiLCJpbmZv''@;'; put 'put ''Lm5pIiwiaW50Lm5pIiwibWlsLm5pIiwibmV0Lm5pIiwibm9tLm5pIiwib3JnLm5pIiwid2ViLm5pIiwibmwiLCJubyIsImZocy5ubyIsInZncy5ubyIsImZ5bGtlc2JpYmwubm8iLCJmb2xrZWJpYmwubm8iLCJtdXNldW0ubm8iLCJpZHJldHQubm8iLCJwcml2Lm5vIiwibWlsLm5vIiwic3Rh''@;'; put 'put ''dC5ubyIsImRlcC5ubyIsImtvbW11bmUubm8iLCJoZXJhZC5ubyIsImFhLm5vIiwiYWgubm8iLCJidS5ubyIsImZtLm5vIiwiaGwubm8iLCJobS5ubyIsImphbi1tYXllbi5ubyIsIm1yLm5vIiwibmwubm8iLCJudC5ubyIsIm9mLm5vIiwib2wubm8iLCJvc2xvLm5vIiwicmwubm8iLCJzZi5u''@;'; put 'put ''byIsInN0Lm5vIiwic3ZhbGJhcmQubm8iLCJ0bS5ubyIsInRyLm5vIiwidmEubm8iLCJ2Zi5ubyIsImdzLmFhLm5vIiwiZ3MuYWgubm8iLCJncy5idS5ubyIsImdzLmZtLm5vIiwiZ3MuaGwubm8iLCJncy5obS5ubyIsImdzLmphbi1tYXllbi5ubyIsImdzLm1yLm5vIiwiZ3Mubmwubm8iLCJn''@;'; put 'put ''cy5udC5ubyIsImdzLm9mLm5vIiwiZ3Mub2wubm8iLCJncy5vc2xvLm5vIiwiZ3Mucmwubm8iLCJncy5zZi5ubyIsImdzLnN0Lm5vIiwiZ3Muc3ZhbGJhcmQubm8iLCJncy50bS5ubyIsImdzLnRyLm5vIiwiZ3MudmEubm8iLCJncy52Zi5ubyIsImFrcmVoYW1uLm5vIiwiXHhlNWtyZWhhbW4u''@;'; put 'put ''bm8iLCJhbGdhcmQubm8iLCJceGU1bGdceGU1cmQubm8iLCJhcm5hLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiYnJvbm5veXN1bmQubm8iLCJiclx4Zjhublx4Zjh5c3VuZC5ubyIsImRyb2Jhay5ubyIsImRyXHhmOGJhay5ubyIsImVnZXJzdW5kLm5vIiwiZmV0c3VuZC5ubyIs''@;'; put 'put ''ImZsb3JvLm5vIiwiZmxvclx4Zjgubm8iLCJmcmVkcmlrc3RhZC5ubyIsImhva2tzdW5kLm5vIiwiaG9uZWZvc3Mubm8iLCJoXHhmOG5lZm9zcy5ubyIsImplc3NoZWltLm5vIiwiam9ycGVsYW5kLm5vIiwialx4ZjhycGVsYW5kLm5vIiwia2lya2VuZXMubm8iLCJrb3BlcnZpay5ubyIsImty''@;'; put 'put ''b2tzdGFkZWx2YS5ubyIsImxhbmdldmFnLm5vIiwibGFuZ2V2XHhlNWcubm8iLCJsZWlydmlrLm5vIiwibWpvbmRhbGVuLm5vIiwibWpceGY4bmRhbGVuLm5vIiwibW8taS1yYW5hLm5vIiwibW9zam9lbi5ubyIsIm1vc2pceGY4ZW4ubm8iLCJuZXNvZGR0YW5nZW4ubm8iLCJvcmthbmdlci5u''@;'; put 'put ''byIsIm9zb3lyby5ubyIsIm9zXHhmOHlyby5ubyIsInJhaG9sdC5ubyIsInJceGU1aG9sdC5ubyIsInNhbmRuZXNzam9lbi5ubyIsInNhbmRuZXNzalx4Zjhlbi5ubyIsInNrZWRzbW9rb3JzZXQubm8iLCJzbGF0dHVtLm5vIiwic3BqZWxrYXZpay5ubyIsInN0YXRoZWxsZS5ubyIsInN0YXZl''@;'; put 'put ''cm4ubm8iLCJzdGpvcmRhbHNoYWxzZW4ubm8iLCJzdGpceGY4cmRhbHNoYWxzZW4ubm8iLCJ0YW5hbmdlci5ubyIsInRyYW5ieS5ubyIsInZvc3NldmFuZ2VuLm5vIiwiYWZqb3JkLm5vIiwiXHhlNWZqb3JkLm5vIiwiYWdkZW5lcy5ubyIsImFsLm5vIiwiXHhlNWwubm8iLCJhbGVzdW5kLm5v''@;'; put 'put ''IiwiXHhlNWxlc3VuZC5ubyIsImFsc3RhaGF1Zy5ubyIsImFsdGEubm8iLCJceGUxbHRceGUxLm5vIiwiYWxhaGVhZGp1Lm5vIiwiXHhlMWxhaGVhZGp1Lm5vIiwiYWx2ZGFsLm5vIiwiYW1saS5ubyIsIlx4ZTVtbGkubm8iLCJhbW90Lm5vIiwiXHhlNW1vdC5ubyIsImFuZGVidS5ubyIsImFu''@;'; put 'put ''ZG95Lm5vIiwiYW5kXHhmOHkubm8iLCJhbmRhc3VvbG8ubm8iLCJhcmRhbC5ubyIsIlx4ZTVyZGFsLm5vIiwiYXJlbWFyay5ubyIsImFyZW5kYWwubm8iLCJceGU1cy5ubyIsImFzZXJhbC5ubyIsIlx4ZTVzZXJhbC5ubyIsImFza2VyLm5vIiwiYXNraW0ubm8iLCJhc2t2b2xsLm5vIiwiYXNr''@;'; put 'put ''b3kubm8iLCJhc2tceGY4eS5ubyIsImFzbmVzLm5vIiwiXHhlNXNuZXMubm8iLCJhdWRuZWRhbG4ubm8iLCJhdWtyYS5ubyIsImF1cmUubm8iLCJhdXJsYW5kLm5vIiwiYXVyc2tvZy1ob2xhbmQubm8iLCJhdXJza29nLWhceGY4bGFuZC5ubyIsImF1c3Rldm9sbC5ubyIsImF1c3RyaGVpbS5u''@;'; put 'put ''byIsImF2ZXJveS5ubyIsImF2ZXJceGY4eS5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxhdC5ubyIsImJceGUxbFx4ZTF0Lm5vIiwiYmFsc2Zqb3JkLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFtYmxlLm5vIiwiYmFyZHUubm8i''@;'; put 'put ''LCJiZWFyZHUubm8iLCJiZWlhcm4ubm8iLCJiYWpkZGFyLm5vIiwiYlx4ZTFqZGRhci5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhl''@;'; put 'put ''MWhraS5ubyIsImJpbmRhbC5ubyIsImJpcmtlbmVzLm5vIiwiYmphcmtveS5ubyIsImJqYXJrXHhmOHkubm8iLCJiamVya3JlaW0ubm8iLCJianVnbi5ubyIsImJvZG8ubm8iLCJib2RceGY4Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJ1ZGVqanUubm8iLCJi''@;'; put 'put ''b2tuLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHkubm8iLCJieWdsYW5kLm5vIiwiYnlrbGUubm8iLCJiYXJ1bS5ubyIsImJceGU2cnVtLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsImJvLm5vcmRsYW5kLm5vIiwiYlx4Zjgu''@;'; put 'put ''bm9yZGxhbmQubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5n''@;'; put 'put ''ZWRhbC5ubyIsImR5cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZWlkLm5vIiwiZWlkZmpvcmQubm8iLCJlaWRzYmVyZy5ubyIsImVpZHNrb2cubm8iLCJlaWRzdm9sbC5ubyIsImVpZ2Vyc3VuZC5ubyIsImVsdmVydW0ubm8iLCJlbmViYWtrLm5vIiwi''@;'; put 'put ''ZW5nZXJkYWwubm8iLCJldG5lLm5vIiwiZXRuZWRhbC5ubyIsImV2ZW5lcy5ubyIsImV2ZW5hc3NpLm5vIiwiZXZlblx4ZTFcdTAxNjFcdTAxNjFpLm5vIiwiZXZqZS1vZy1ob3JubmVzLm5vIiwiZmFyc3VuZC5ubyIsImZhdXNrZS5ubyIsImZ1b3Nza28ubm8iLCJmdW9pc2t1Lm5vIiwiZmVk''@;'; put 'put ''amUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIubm8iLCJmamVsbC5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZmxhLm5vIiwiZmxceGU1''@;'; put 'put ''Lm5vIiwiZm9sbGRhbC5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmcmVpLm5vIiwiZnJvZ24ubm8iLCJmcm9sYW5kLm5vIiwiZnJvc3RhLm5vIiwiZnJhbmEubm8iLCJmclx4ZTZuYS5ubyIsImZyb3lhLm5vIiwiZnJceGY4eWEubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJm''@;'; put 'put ''b3JkZS5ubyIsImZceGY4cmRlLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1''@;'; put 'put ''bS5ubyIsImdqZXJzdGFkLm5vIiwiZ2plc2RhbC5ubyIsImdqb3Zpay5ubyIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8iLCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImtyYWFuZ2hr''@;'; put 'put ''ZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImdydWUubm8iLCJndWxlbi5ubyIsImhhZHNlbC5ubyIsImhhbGRlbi5ubyIsImhhbHNhLm5vIiwiaGFtYXIubm8iLCJoYW1hcm95Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFtbWVy''@;'; put 'put ''ZmVzdC5ubyIsImhhbW1hcmZlYXN0YS5ubyIsImhceGUxbW1ceGUxcmZlYXN0YS5ubyIsImhhcmFtLm5vIiwiaGFyZWlkLm5vIiwiaGFyc3RhZC5ubyIsImhhc3Zpay5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJhYXJib3J0''@;'; put 'put ''ZS5ubyIsImhhdWdlc3VuZC5ubyIsImhlbW5lLm5vIiwiaGVtbmVzLm5vIiwiaGVtc2VkYWwubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJoZXJveS5ub3JkbGFuZC5ubyIsImhlclx4Zjh5Lm5vcmRsYW5kLm5vIiwiaGl0''@;'; put 'put ''cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5vIiwiaG9mLm5vIiwiaG9sLm5vIiwiaG9sZS5ubyIsImhvbG1lc3RyYW5kLm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIs''@;'; put 'put ''Imh1cmRhbC5ubyIsImh1cnVtLm5vIiwiaHZhbGVyLm5vIiwiaHlsbGVzdGFkLm5vIiwiaGFnZWJvc3RhZC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaGEubm8iLCJoXHhlNS5u''@;'; put 'put ''byIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJqZXZuYWtlci5ubyIsImpvbmRhbC5ubyIsImpvbHN0ZXIubm8iLCJqXHhmOGxzdGVyLm5vIiwia2FyYXNqb2subm8iLCJrYXJhc2pvaGthLm5vIiwia1x4ZTFyXHhlMVx1MDE2MWpvaGth''@;'; put 'put ''Lm5vIiwia2FybHNveS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEubm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwiZ3VvdmRhZ2VhaWRudS5ubyIsImtsZXBwLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtvbmdzYmVyZy5ubyIsImtvbmdz''@;'; put 'put ''dmluZ2VyLm5vIiwia3JhZ2Vyby5ubyIsImtyYWdlclx4Zjgubm8iLCJrcmlzdGlhbnNhbmQubm8iLCJrcmlzdGlhbnN1bmQubm8iLCJrcm9kc2hlcmFkLm5vIiwia3JceGY4ZHNoZXJhZC5ubyIsImt2YWxzdW5kLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIs''@;'; put 'put ''Imt2YW0ubm8iLCJrdmluZXNkYWwubm8iLCJrdmlubmhlcmFkLm5vIiwia3ZpdGVzZWlkLm5vIiwia3ZpdHNveS5ubyIsImt2aXRzXHhmOHkubm8iLCJrdmFmam9yZC5ubyIsImt2XHhlNmZqb3JkLm5vIiwiZ2llaHRhdnVvYXRuYS5ubyIsImt2YW5hbmdlbi5ubyIsImt2XHhlNm5hbmdlbi5u''@;'; put 'put ''byIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImdhaXZ1b3RuYS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImxhcnZpay5ubyIsImxhdmFuZ2VuLm5vIiwibGF2YWdpcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxl''@;'; put 'put ''YmVzYnkubm8iLCJkYXZ2ZXNpaWRhLm5vIiwibGVpa2FuZ2VyLm5vIiwibGVpcmZqb3JkLm5vIiwibGVrYS5ubyIsImxla3N2aWsubm8iLCJsZW52aWsubm8iLCJsZWFuZ2F2aWlrYS5ubyIsImxlYVx1MDE0Ymdhdmlpa2Eubm8iLCJsZXNqYS5ubyIsImxldmFuZ2VyLm5vIiwibGllci5ubyIs''@;'; put 'put ''ImxpZXJuZS5ubyIsImxpbGxlaGFtbWVyLm5vIiwibGlsbGVzYW5kLm5vIiwibGluZGVzbmVzLm5vIiwibGluZGFzLm5vIiwibGluZFx4ZTVzLm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsYWhwcGkubm8iLCJsXHhlMWhwcGkubm8iLCJsdW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8i''@;'; put 'put ''LCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJpdmd1Lm5vIiwibGFyZGFsLm5vIiwibGVyZGFsLm5vIiwibFx4ZTZyZGFsLm5vIiwibG9kaW5nZW4ubm8iLCJsXHhmOGRpbmdlbi5ubyIsImxvcmVuc2tvZy5ubyIsImxceGY4cmVuc2tvZy5ubyIs''@;'; put 'put ''ImxvdGVuLm5vIiwibFx4Zjh0ZW4ubm8iLCJtYWx2aWsubm8iLCJtYXNveS5ubyIsIm1ceGU1c1x4Zjh5Lm5vIiwibXVvc2F0Lm5vIiwibXVvc1x4ZTF0Lm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1lbGFuZC5ubyIsIm1lbGRh''@;'; put 'put ''bC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUu''@;'; put 'put ''bm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtYWxzZWx2Lm5vIiwibVx4ZTVsc2Vsdi5ubyIsIm1hbGF0dnVvcG1pLm5vIiwibVx4ZTFsYXR2dW9wbWkubm8iLCJuYW1kYWxzZWlkLm5vIiwiYWVqcmllLm5vIiwibmFtc29zLm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5h''@;'; put 'put ''YW1lc2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJsYWFrZXN2dWVtaWUubm8iLCJuYW5uZXN0YWQubm8iLCJuYXJ2aWsubm8iLCJuYXJ2aWlrYS5ubyIsIm5hdXN0ZGFsLm5vIiwibmVkcmUtZWlrZXIubm8iLCJuZXMuYWtlcnNodXMubm8iLCJuZXMuYnVza2VydWQu''@;'; put 'put ''bm8iLCJuZXNuYS5ubyIsIm5lc29kZGVuLm5vIiwibmVzc2VieS5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRh''@;'; put 'put ''bC5ubyIsIm5vcmRrYXBwLm5vIiwiZGF2dmVuamFyZ2Eubm8iLCJkYXZ2ZW5qXHhlMXJnYS5ubyIsIm5vcmRyZS1sYW5kLm5vIiwibm9yZHJlaXNhLm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5hcm95Lm5vIiwiblx4ZTZy''@;'; put 'put ''XHhmOHkubm8iLCJub3R0ZXJveS5ubyIsIm5ceGY4dHRlclx4Zjh5Lm5vIiwib2RkYS5ubyIsIm9rc25lcy5ubyIsIlx4Zjhrc25lcy5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJv''@;'; put 'put ''cnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3MuaGVkbWFyay5ubyIsIm9zLmhvcmRhbGFuZC5ubyIsIm9zZW4ubm8iLCJvc3Rlcm95Lm5vIiwib3N0ZXJceGY4eS5ubyIsIm9zdHJlLXRvdGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVy''@;'; put 'put ''aGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3lnYXJkZW4ubm8iLCJceGY4eWdhcmRlbi5ubyIsIm95c3RyZS1zbGlkcmUubm8iLCJceGY4eXN0cmUtc2xpZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uu''@;'; put 'put ''bm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJha2tlc3RhZC5ubyIsInJhbmEubm8iLCJydW92YXQubm8iLCJyYW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295''@;'; put 'put ''Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzc2Eubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicm9hbi5ubyIsInJvbGxhZy5ubyIsInJ5Z2dlLm5vIiwicmFsaW5nZW4ubm8iLCJyXHhl''@;'; put 'put ''Nmxpbmdlbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb21za29nLm5vIiwiclx4Zjhtc2tvZy5ubyIsInJvcm9zLm5vIiwiclx4Zjhyb3Mubm8iLCJyb3N0Lm5vIiwiclx4ZjhzdC5ubyIsInJveWtlbi5ubyIsInJceGY4eWtlbi5ubyIsInJveXJ2aWsubm8iLCJyXHhmOHly''@;'; put 'put ''dmlrLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJzYWxhbmdlbi5ubyIsInNpZWxsYWsubm8iLCJzYWx0ZGFsLm5vIiwic2FsYXQubm8iLCJzXHhlMWxceGUxdC5ubyIsInNceGUxbGF0Lm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGUubW9yZS1vZy1yb21zZGFsLm5vIiwic2FuZGUubVx4''@;'; put 'put ''ZjhyZS1vZy1yb21zZGFsLm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJzYW5kZWZqb3JkLm5vIiwic2FuZG5lcy5ubyIsInNhbmRveS5ubyIsInNhbmRceGY4eS5ubyIsInNhcnBzYm9yZy5ubyIsInNhdWRhLm5vIiwic2F1aGVyYWQubm8iLCJzZWwubm8iLCJzZWxidS5ubyIsInNlbGplLm5v''@;'; put 'put ''Iiwic2Vsam9yZC5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5ubyIsInNrYXVuLm5vIiwic2tlZHNtby5ubyIsInNraS5ubyIsInNraWVuLm5vIiwic2tpcHR2ZXQubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEu''@;'; put 'put ''bm8iLCJza2phay5ubyIsInNralx4ZTVrLm5vIiwic2tvZGplLm5vIiwic2thbmxhbmQubm8iLCJza1x4ZTVubGFuZC5ubyIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmlsbGZqb3JkLm5vIiwic25hc2Eubm8iLCJzblx4ZTVzYS5ubyIs''@;'; put 'put ''InNub2FzYS5ubyIsInNuYWFzZS5ubyIsInNuXHhlNWFzZS5ubyIsInNvZ25kYWwubm8iLCJzb2tuZGFsLm5vIiwic29sYS5ubyIsInNvbHVuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvcnRsYW5kLm5vIiwic3B5ZGViZXJnLm5vIiwic3RhbmdlLm5vIiwic3RhdmFuZ2VyLm5vIiwic3RlaWdl''@;'; put 'put ''bi5ubyIsInN0ZWlua2plci5ubyIsInN0am9yZGFsLm5vIiwic3RqXHhmOHJkYWwubm8iLCJzdG9ra2Uubm8iLCJzdG9yLWVsdmRhbC5ubyIsInN0b3JkLm5vIiwic3RvcmRhbC5ubyIsInN0b3Jmam9yZC5ubyIsIm9tYXN2dW90bmEubm8iLCJzdHJhbmQubm8iLCJzdHJhbmRhLm5vIiwic3Ry''@;'; put 'put ''eW4ubm8iLCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlvLm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxh''@;'; put 'put ''bmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHItYXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJt''@;'; put 'put ''YXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwic29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJ0YW5hLm5vIiwiZGVhdG51Lm5vIiwidGltZS5ubyIsInRpbmd2''@;'; put 'put ''b2xsLm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRvcnNrZW4ubm8iLCJ0cmFub3kubm8iLCJ0cmFuXHhmOHkubm8iLCJ0cm9tc28ubm8iLCJ0cm9tc1x4Zjgubm8i''@;'; put 'put ''LCJ0cm9tc2Eubm8iLCJyb21zYS5ubyIsInRyb25kaGVpbS5ubyIsInRyb2FuZGluLm5vIiwidHJ5c2lsLm5vIiwidHJhbmEubm8iLCJ0clx4ZTZuYS5ubyIsInRyb2dzdGFkLm5vIiwidHJceGY4Z3N0YWQubm8iLCJ0dmVkZXN0cmFuZC5ubyIsInR5ZGFsLm5vIiwidHluc2V0Lm5vIiwidHlz''@;'; put 'put ''ZmpvcmQubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwidHlzbmVzLm5vIiwidHlzdmFyLm5vIiwidHlzdlx4ZTZyLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwidWx2aWsubm8iLCJ1dHNp''@;'; put 'put ''cmEubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIsInZha3NkYWwubm8iLCJ2YWxsZS5ubyIsInZhbmcubm8iLCJ2YW55bHZlbi5ubyIsInZhcmRvLm5vIiwidmFyZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFy''@;'; put 'put ''Z2dceGUxdC5ubyIsInZlZnNuLm5vIiwidmFhcHN0ZS5ubyIsInZlZ2Eubm8iLCJ2ZWdhcnNoZWkubm8iLCJ2ZWdceGU1cnNoZWkubm8iLCJ2ZW5uZXNsYS5ubyIsInZlcmRhbC5ubyIsInZlcnJhbi5ubyIsInZlc3RieS5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVz''@;'; put 'put ''dHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5vIiwidmlrbmEubm8iLCJ2aW5kYWZqb3JkLm5vIiwidm9sZGEubm8iLCJ2b3NzLm5vIiwidmFyb3kubm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2FuLm5vIiwidlx4''@;'; put 'put ''ZTVnYW4ubm8iLCJ2b2FnYXQubm8iLCJ2YWdzb3kubm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhbGVyLm9zdGZvbGQubm8iLCJ2XHhlNWxlci5ceGY4c3Rmb2xkLm5vIiwidmFsZXIuaGVkbWFyay5ubyIsInZceGU1bGVyLmhlZG1hcmsubm8iLCIq''@;'; put 'put ''Lm5wIiwibnIiLCJiaXoubnIiLCJpbmZvLm5yIiwiZ292Lm5yIiwiZWR1Lm5yIiwib3JnLm5yIiwibmV0Lm5yIiwiY29tLm5yIiwibnUiLCJueiIsImFjLm56IiwiY28ubnoiLCJjcmkubnoiLCJnZWVrLm56IiwiZ2VuLm56IiwiZ292dC5ueiIsImhlYWx0aC5ueiIsIml3aS5ueiIsImtpd2ku''@;'; put 'put ''bnoiLCJtYW9yaS5ueiIsIm1pbC5ueiIsIm1cdTAxMDFvcmkubnoiLCJuZXQubnoiLCJvcmcubnoiLCJwYXJsaWFtZW50Lm56Iiwic2Nob29sLm56Iiwib20iLCJjby5vbSIsImNvbS5vbSIsImVkdS5vbSIsImdvdi5vbSIsIm1lZC5vbSIsIm11c2V1bS5vbSIsIm5ldC5vbSIsIm9yZy5vbSIs''@;'; put 'put ''InByby5vbSIsIm9uaW9uIiwib3JnIiwicGEiLCJhYy5wYSIsImdvYi5wYSIsImNvbS5wYSIsIm9yZy5wYSIsInNsZC5wYSIsImVkdS5wYSIsIm5ldC5wYSIsImluZy5wYSIsImFiby5wYSIsIm1lZC5wYSIsIm5vbS5wYSIsInBlIiwiZWR1LnBlIiwiZ29iLnBlIiwibm9tLnBlIiwibWlsLnBl''@;'; put 'put ''Iiwib3JnLnBlIiwiY29tLnBlIiwibmV0LnBlIiwicGYiLCJjb20ucGYiLCJvcmcucGYiLCJlZHUucGYiLCIqLnBnIiwicGgiLCJjb20ucGgiLCJuZXQucGgiLCJvcmcucGgiLCJnb3YucGgiLCJlZHUucGgiLCJuZ28ucGgiLCJtaWwucGgiLCJpLnBoIiwicGsiLCJjb20ucGsiLCJuZXQucGsi''@;'; put 'put ''LCJlZHUucGsiLCJvcmcucGsiLCJmYW0ucGsiLCJiaXoucGsiLCJ3ZWIucGsiLCJnb3YucGsiLCJnb2IucGsiLCJnb2sucGsiLCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJpbmZvLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhaWQucGwiLCJhZ3JvLnBsIiwiYXRt''@;'; put 'put ''LnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwiZ3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtaWFzdGEucGwiLCJtZWRpYS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJy''@;'; put 'put ''ZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNrbGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJpYy5nb3YucGwi''@;'; put 'put ''LCJpcy5nb3YucGwiLCJ1cy5nb3YucGwiLCJrbXBzcC5nb3YucGwiLCJrcHBzcC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJwc3AuZ292LnBsIiwid3Nrci5nb3YucGwiLCJrd3AuZ292LnBsIiwibXcuZ292LnBsIiwidWcuZ292LnBsIiwidW0uZ292LnBsIiwidW1pZy5nb3YucGwiLCJ1Z2lt''@;'; put 'put ''Lmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXcuZ292LnBsIiwic3Rhcm9zdHdvLmdvdi5wbCIsInBhLmdvdi5wbCIsInBvLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic28uZ292LnBsIiwic3IuZ292LnBsIiwid3NhLmdvdi5w''@;'; put 'put ''bCIsInNrby5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsInBpbmIuZ292LnBsIiwid2lvcy5nb3YucGwiLCJ3aXRkLmdvdi5wbCIsInd6bWl1dy5nb3YucGwiLCJwaXcuZ292LnBsIiwid2l3Lmdvdi5wbCIsImdyaXcuZ292LnBsIiwid2lmLmdvdi5w''@;'; put 'put ''bCIsIm91bS5nb3YucGwiLCJzZG4uZ292LnBsIiwienAuZ292LnBsIiwidXBwby5nb3YucGwiLCJtdXAuZ292LnBsIiwid3Vvei5nb3YucGwiLCJrb25zdWxhdC5nb3YucGwiLCJvaXJtLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIsImJlZHppbi5wbCIsImJlc2tpZHku''@;'; put 'put ''cGwiLCJiaWFsb3dpZXphLnBsIiwiYmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xhd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIsImRsdWdvbGVrYS5wbCIsImVsYmxh''@;'; put 'put ''Zy5wbCIsImVsay5wbCIsImdsb2dvdy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdhLnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthemltaWVyei1kb2xueS5wbCIsImthcnBhY3oucGwi''@;'; put 'put ''LCJrYXJ0dXp5LnBsIiwia2FzenVieS5wbCIsImthdG93aWNlLnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHprby5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5wbCIsImxhcHkucGwiLCJsZWJvcmsu''@;'; put 'put ''cGwiLCJsZWduaWNhLnBsIiwibGV6YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJpbi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIsIm1pZWxlYy5wbCIsIm1pZWxuby5w''@;'; put 'put ''bCIsIm1yYWdvd28ucGwiLCJuYWtsby5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBsIiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xla2EucGwiLCJvc3Ryb3dpZWMucGwi''@;'; put 'put ''LCJvc3Ryb3d3bGtwLnBsIiwicGlsYS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dpY2UucGwiLCJwb21vcnplLnBsIiwicG9tb3Jza2llLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdvcnNrLnBsIiwicHVsYXd5LnBsIiwi''@;'; put 'put ''cmFkb20ucGwiLCJyYXdhLW1hei5wbCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwic2xhc2sucGwiLCJzbHVwc2sucGwiLCJzb3Nub3dpZWMucGwiLCJzdGFsb3dhLXdvbGEucGwiLCJza29jem93LnBsIiwic3RhcmFjaG93aWNlLnBsIiwic3Rhcmdh''@;'; put 'put ''cmQucGwiLCJzdXdhbGtpLnBsIiwic3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIsInVzdGthLnBsIiwid2FsYnJ6eWNo''@;'; put 'put ''LnBsIiwid2FybWlhLnBsIiwid2Fyc3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5wbCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBsIiwiemFnYW4ucGwiLCJ6YXJvdy5w''@;'; put 'put ''bCIsInpnb3JhLnBsIiwiemdvcnplbGVjLnBsIiwicG0iLCJwbiIsImdvdi5wbiIsImNvLnBuIiwib3JnLnBuIiwiZWR1LnBuIiwibmV0LnBuIiwicG9zdCIsInByIiwiY29tLnByIiwibmV0LnByIiwib3JnLnByIiwiZ292LnByIiwiZWR1LnByIiwiaXNsYS5wciIsInByby5wciIsImJpei5w''@;'; put 'put ''ciIsImluZm8ucHIiLCJuYW1lLnByIiwiZXN0LnByIiwicHJvZi5wciIsImFjLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5wcm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3LnBybyIsIm1lZC5wcm8iLCJyZWNo''@;'; put 'put ''dC5wcm8iLCJwcyIsImVkdS5wcyIsImdvdi5wcyIsInNlYy5wcyIsInBsby5wcyIsImNvbS5wcyIsIm9yZy5wcyIsIm5ldC5wcyIsInB0IiwibmV0LnB0IiwiZ292LnB0Iiwib3JnLnB0IiwiZWR1LnB0IiwiaW50LnB0IiwicHVibC5wdCIsImNvbS5wdCIsIm5vbWUucHQiLCJwdyIsImNvLnB3''@;'; put 'put ''IiwibmUucHciLCJvci5wdyIsImVkLnB3IiwiZ28ucHciLCJiZWxhdS5wdyIsInB5IiwiY29tLnB5IiwiY29vcC5weSIsImVkdS5weSIsImdvdi5weSIsIm1pbC5weSIsIm5ldC5weSIsIm9yZy5weSIsInFhIiwiY29tLnFhIiwiZWR1LnFhIiwiZ292LnFhIiwibWlsLnFhIiwibmFtZS5xYSIs''@;'; put 'put ''Im5ldC5xYSIsIm9yZy5xYSIsInNjaC5xYSIsInJlIiwiYXNzby5yZSIsImNvbS5yZSIsIm5vbS5yZSIsInJvIiwiYXJ0cy5ybyIsImNvbS5ybyIsImZpcm0ucm8iLCJpbmZvLnJvIiwibm9tLnJvIiwibnQucm8iLCJvcmcucm8iLCJyZWMucm8iLCJzdG9yZS5ybyIsInRtLnJvIiwid3d3LnJv''@;'; put 'put ''IiwicnMiLCJhYy5ycyIsImNvLnJzIiwiZWR1LnJzIiwiZ292LnJzIiwiaW4ucnMiLCJvcmcucnMiLCJydSIsInJ3IiwiYWMucnciLCJjby5ydyIsImNvb3AucnciLCJnb3YucnciLCJtaWwucnciLCJuZXQucnciLCJvcmcucnciLCJzYSIsImNvbS5zYSIsIm5ldC5zYSIsIm9yZy5zYSIsImdv''@;'; put 'put ''di5zYSIsIm1lZC5zYSIsInB1Yi5zYSIsImVkdS5zYSIsInNjaC5zYSIsInNiIiwiY29tLnNiIiwiZWR1LnNiIiwiZ292LnNiIiwibmV0LnNiIiwib3JnLnNiIiwic2MiLCJjb20uc2MiLCJnb3Yuc2MiLCJuZXQuc2MiLCJvcmcuc2MiLCJlZHUuc2MiLCJzZCIsImNvbS5zZCIsIm5ldC5zZCIs''@;'; put 'put ''Im9yZy5zZCIsImVkdS5zZCIsIm1lZC5zZCIsInR2LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsInNlIiwiYS5zZSIsImFjLnNlIiwiYi5zZSIsImJkLnNlIiwiYnJhbmQuc2UiLCJjLnNlIiwiZC5zZSIsImUuc2UiLCJmLnNlIiwiZmguc2UiLCJmaHNrLnNlIiwiZmh2LnNlIiwiZy5zZSIsImgu''@;'; put 'put ''c2UiLCJpLnNlIiwiay5zZSIsImtvbWZvcmIuc2UiLCJrb21tdW5hbGZvcmJ1bmQuc2UiLCJrb212dXguc2UiLCJsLnNlIiwibGFuYmliLnNlIiwibS5zZSIsIm4uc2UiLCJuYXR1cmJydWtzZ3ltbi5zZSIsIm8uc2UiLCJvcmcuc2UiLCJwLnNlIiwicGFydGkuc2UiLCJwcC5zZSIsInByZXNz''@;'; put 'put ''LnNlIiwici5zZSIsInMuc2UiLCJ0LnNlIiwidG0uc2UiLCJ1LnNlIiwidy5zZSIsInguc2UiLCJ5LnNlIiwiei5zZSIsInNnIiwiY29tLnNnIiwibmV0LnNnIiwib3JnLnNnIiwiZ292LnNnIiwiZWR1LnNnIiwicGVyLnNnIiwic2giLCJjb20uc2giLCJuZXQuc2giLCJnb3Yuc2giLCJvcmcu''@;'; put 'put ''c2giLCJtaWwuc2giLCJzaSIsInNqIiwic2siLCJzbCIsImNvbS5zbCIsIm5ldC5zbCIsImVkdS5zbCIsImdvdi5zbCIsIm9yZy5zbCIsInNtIiwic24iLCJhcnQuc24iLCJjb20uc24iLCJlZHUuc24iLCJnb3V2LnNuIiwib3JnLnNuIiwicGVyc28uc24iLCJ1bml2LnNuIiwic28iLCJjb20u''@;'; put 'put ''c28iLCJlZHUuc28iLCJnb3Yuc28iLCJtZS5zbyIsIm5ldC5zbyIsIm9yZy5zbyIsInNyIiwic3MiLCJiaXouc3MiLCJjb20uc3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8uc3Qi''@;'; put 'put ''LCJlZHUuc3QiLCJlbWJhaXhhZGEuc3QiLCJtaWwuc3QiLCJuZXQuc3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3RvbWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5Iiwi''@;'; put 'put ''ZWR1LnN5IiwiZ292LnN5IiwibmV0LnN5IiwibWlsLnN5IiwiY29tLnN5Iiwib3JnLnN5Iiwic3oiLCJjby5zeiIsImFjLnN6Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgiLCJv''@;'; put 'put ''ci50aCIsInRqIiwiYWMudGoiLCJiaXoudGoiLCJjby50aiIsImNvbS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwiaW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRsIiwi''@;'; put 'put ''dG0iLCJjb20udG0iLCJjby50bSIsIm9yZy50bSIsIm5ldC50bSIsIm5vbS50bSIsImdvdi50bSIsIm1pbC50bSIsImVkdS50bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQudG4i''@;'; put 'put ''LCJuZXQudG4iLCJvcmcudG4iLCJwZXJzby50biIsInRvdXJpc20udG4iLCJ0byIsImNvbS50byIsImdvdi50byIsIm5ldC50byIsIm9yZy50byIsImVkdS50byIsIm1pbC50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVkdS50''@;'; put 'put ''ciIsImdlbi50ciIsImdvdi50ciIsImluZm8udHIiLCJtaWwudHIiLCJrMTIudHIiLCJrZXAudHIiLCJuYW1lLnRyIiwibmV0LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiY28udHQiLCJj''@;'; put 'put ''b20udHQiLCJvcmcudHQiLCJuZXQudHQiLCJiaXoudHQiLCJpbmZvLnR0IiwicHJvLnR0IiwiaW50LnR0IiwiY29vcC50dCIsImpvYnMudHQiLCJtb2JpLnR0IiwidHJhdmVsLnR0IiwibXVzZXVtLnR0IiwiYWVyby50dCIsIm5hbWUudHQiLCJnb3YudHQiLCJlZHUudHQiLCJ0diIsInR3Iiwi''@;'; put 'put ''ZWR1LnR3IiwiZ292LnR3IiwibWlsLnR3IiwiY29tLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwiaWR2LnR3IiwiZ2FtZS50dyIsImViaXoudHciLCJjbHViLnR3IiwiXHU3ZGIyXHU4ZGVmLnR3IiwiXHU3ZDQ0XHU3ZTU0LnR3IiwiXHU1NTQ2XHU2OTZkLnR3IiwidHoiLCJhYy50eiIsImNvLnR6''@;'; put 'put ''IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJj''@;'; put 'put ''aGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVhIiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEi''@;'; put 'put ''LCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIsImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51''@;'; put 'put ''YSIsImtyLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2sudWEiLCJsdXRzay51YSIsImx2LnVhIiwibHZpdi51YSIsIm1rLnVhIiwibXlrb2xhaXYudWEiLCJuaWtvbGFldi51YSIsIm9kLnVhIiwib2Rlc2EudWEiLCJvZGVz''@;'; put 'put ''c2EudWEiLCJwbC51YSIsInBvbHRhdmEudWEiLCJyaXZuZS51YSIsInJvdm5vLnVhIiwicnYudWEiLCJzYi51YSIsInNlYmFzdG9wb2wudWEiLCJzZXZhc3RvcG9sLnVhIiwic20udWEiLCJzdW15LnVhIiwidGUudWEiLCJ0ZXJub3BpbC51YSIsInV6LnVhIiwidXpoZ29yb2QudWEiLCJ2aW5u''@;'; put 'put ''aWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiY28udWciLCJvci51ZyIsImFjLnVnIiwic2Mu''@;'; put 'put ''dWciLCJnby51ZyIsIm5lLnVnIiwiY29tLnVnIiwib3JnLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVz''@;'; put 'put ''IiwiaXNhLnVzIiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMi''@;'; put 'put ''LCJpbi51cyIsImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gu''@;'; put 'put ''dXMiLCJvay51cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZpLnVzIiwidnQudXMiLCJ2YS51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwi''@;'; put 'put ''azEyLmFyLnVzIiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmRlLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVz''@;'; put 'put ''IiwiazEyLmluLnVzIiwiazEyLmtzLnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5l''@;'; put 'put ''LnVzIiwiazEyLm5oLnVzIiwiazEyLm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEy''@;'; put 'put ''LnV0LnVzIiwiazEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLnZhLnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiazEyLnd5LnVzIiwiY2MuYWsudXMiLCJjYy5hbC51cyIsImNjLmFyLnVzIiwiY2MuYXMudXMiLCJjYy5hei51cyIsImNjLmNhLnVzIiwiY2MuY28udXMiLCJjYy5jdC51''@;'; put 'put ''cyIsImNjLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMiLCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51''@;'; put 'put ''cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMiLCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51''@;'; put 'put ''cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMiLCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmkudXMiLCJjYy52dC51cyIsImNjLnZhLnVzIiwiY2Mud2EudXMiLCJjYy53aS51''@;'; put 'put ''cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJsaWIuYWsudXMiLCJsaWIuYWwudXMiLCJsaWIuYXIudXMiLCJsaWIuYXMudXMiLCJsaWIuYXoudXMiLCJsaWIuY2EudXMiLCJsaWIuY28udXMiLCJsaWIuY3QudXMiLCJsaWIuZGMudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3Uu''@;'; put 'put ''dXMiLCJsaWIuaGkudXMiLCJsaWIuaWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIu''@;'; put 'put ''bW8udXMiLCJsaWIubXMudXMiLCJsaWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJs''@;'; put 'put ''aWIucGEudXMiLCJsaWIucHIudXMiLCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIudmEudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMi''@;'; put 'put ''LCJwdnQuazEyLm1hLnVzIiwiY2h0ci5rMTIubWEudXMiLCJwYXJvY2guazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1''@;'; put 'put ''eSIsImNvbS51eSIsImVkdS51eSIsImd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwibmV0LnZjIiwib3JnLnZjIiwiZ292LnZjIiwibWlsLnZjIiwiZWR1LnZjIiwidmUi''@;'; put 'put ''LCJhcnRzLnZlIiwiYmliLnZlIiwiY28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZl''@;'; put 'put ''IiwidGVjLnZlIiwid2ViLnZlIiwidmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJjb20udm4iLCJuZXQudm4iLCJvcmcudm4iLCJlZHUudm4iLCJnb3Yudm4iLCJpbnQudm4iLCJhYy52biIsImJpei52biIsImluZm8udm4iLCJuYW1l''@;'; put 'put ''LnZuIiwicHJvLnZuIiwiaGVhbHRoLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwibmV0LndzIiwib3JnLndzIiwiZ292LndzIiwiZWR1LndzIiwieXQiLCJcdTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEi''@;'; put 'put ''LCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVcdTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIi''@;'; put 'put ''LCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEw''@;'; put 'put ''ZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTU5XHU4MGIyLlx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU3ZGIyXHU3ZDYxLlx1OTk5''@;'; put 'put ''OVx1NmUyZiIsIlx1N2Q0NFx1N2U1NC5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRc''@;'; put 'put ''dTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFc''@;'; put 'put ''dTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdcdTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUi''@;'; put 'put ''LCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0''@;'; put 'put ''MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2MjgiLCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2Vc''@;'; put 'put ''dTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2''@;'; put 'put ''NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1''@;'; put 'put ''MDQzZVx1MDQzMVx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzQuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2''@;'; put 'put ''NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2''@;'; put 'put ''YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJc''@;'; put 'put ''dTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBlMzIuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4''@;'; put 'put ''XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTQwXHUwZTE5XHUw''@;'; put 'put ''ZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMiLCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0''@;'; put 'put ''NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm5ldC55ZSIsIm1pbC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMuemEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56''@;'; put 'put ''YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0iLCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIs''@;'; put 'put ''Imdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJhcnRoIiwiYWJiIiwiYWJib3R0IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFi''@;'; put 'put ''b2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkYWMiLCJhZHMiLCJhZHVsdCIsImFlZyIsImFldG5hIiwiYWZsIiwiYWZyaWNhIiwiYWdha2hhbiIsImFnZW5jeSIsImFpZyIsImFpcmJ1cyIs''@;'; put 'put ''ImFpcmZvcmNlIiwiYWlydGVsIiwiYWtkbiIsImFsZmFyb21lbyIsImFsaWJhYmEiLCJhbGlwYXkiLCJhbGxmaW5hbnoiLCJhbGxzdGF0ZSIsImFsbHkiLCJhbHNhY2UiLCJhbHN0b20iLCJhbWF6b24iLCJhbWVyaWNhbmV4cHJlc3MiLCJhbWVyaWNhbmZhbWlseSIsImFtZXgiLCJhbWZhbSIs''@;'; put 'put ''ImFtaWNhIiwiYW1zdGVyZGFtIiwiYW5hbHl0aWNzIiwiYW5kcm9pZCIsImFucXVhbiIsImFueiIsImFvbCIsImFwYXJ0bWVudHMiLCJhcHAiLCJhcHBsZSIsImFxdWFyZWxsZSIsImFyYWIiLCJhcmFtY28iLCJhcmNoaSIsImFybXkiLCJhcnQiLCJhcnRlIiwiYXNkYSIsImFzc29jaWF0ZXMi''@;'; put 'put ''LCJhdGhsZXRhIiwiYXR0b3JuZXkiLCJhdWN0aW9uIiwiYXVkaSIsImF1ZGlibGUiLCJhdWRpbyIsImF1c3Bvc3QiLCJhdXRob3IiLCJhdXRvIiwiYXV0b3MiLCJhdmlhbmNhIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuYW5hcmVwdWJsaWMiLCJi''@;'; put 'put ''YW5kIiwiYmFuayIsImJhciIsImJhcmNlbG9uYSIsImJhcmNsYXljYXJkIiwiYmFyY2xheXMiLCJiYXJlZm9vdCIsImJhcmdhaW5zIiwiYmFzZWJhbGwiLCJiYXNrZXRiYWxsIiwiYmF1aGF1cyIsImJheWVybiIsImJiYyIsImJidCIsImJidmEiLCJiY2ciLCJiY24iLCJiZWF0cyIsImJlYXV0''@;'; put 'put ''eSIsImJlZXIiLCJiZW50bGV5IiwiYmVybGluIiwiYmVzdCIsImJlc3RidXkiLCJiZXQiLCJiaGFydGkiLCJiaWJsZSIsImJpZCIsImJpa2UiLCJiaW5nIiwiYmluZ28iLCJiaW8iLCJibGFjayIsImJsYWNrZnJpZGF5IiwiYmxvY2tidXN0ZXIiLCJibG9nIiwiYmxvb21iZXJnIiwiYmx1ZSIs''@;'; put 'put ''ImJtcyIsImJtdyIsImJucHBhcmliYXMiLCJib2F0cyIsImJvZWhyaW5nZXIiLCJib2ZhIiwiYm9tIiwiYm9uZCIsImJvbyIsImJvb2siLCJib29raW5nIiwiYm9zY2giLCJib3N0aWsiLCJib3N0b24iLCJib3QiLCJib3V0aXF1ZSIsImJveCIsImJyYWRlc2NvIiwiYnJpZGdlc3RvbmUiLCJi''@;'; put 'put ''cm9hZHdheSIsImJyb2tlciIsImJyb3RoZXIiLCJicnVzc2VscyIsImJ1Z2F0dGkiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVzaW5lc3MiLCJidXkiLCJidXp6IiwiYnpoIiwiY2FiIiwiY2FmZSIsImNhbCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5j''@;'; put 'put ''ZXJyZXNlYXJjaCIsImNhbm9uIiwiY2FwZXRvd24iLCJjYXBpdGFsIiwiY2FwaXRhbG9uZSIsImNhciIsImNhcmF2YW4iLCJjYXJkcyIsImNhcmUiLCJjYXJlZXIiLCJjYXJlZXJzIiwiY2FycyIsImNhc2EiLCJjYXNlIiwiY2FzaCIsImNhc2lubyIsImNhdGVyaW5nIiwiY2F0aG9saWMiLCJj''@;'; put 'put ''YmEiLCJjYm4iLCJjYnJlIiwiY2JzIiwiY2VudGVyIiwiY2VvIiwiY2VybiIsImNmYSIsImNmZCIsImNoYW5lbCIsImNoYW5uZWwiLCJjaGFyaXR5IiwiY2hhc2UiLCJjaGF0IiwiY2hlYXAiLCJjaGludGFpIiwiY2hyaXN0bWFzIiwiY2hyb21lIiwiY2h1cmNoIiwiY2lwcmlhbmkiLCJjaXJj''@;'; put 'put ''bGUiLCJjaXNjbyIsImNpdGFkZWwiLCJjaXRpIiwiY2l0aWMiLCJjaXR5IiwiY2l0eWVhdHMiLCJjbGFpbXMiLCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwi''@;'; put 'put ''Y29sbGVnZSIsImNvbG9nbmUiLCJjb21jYXN0IiwiY29tbWJhbmsiLCJjb21tdW5pdHkiLCJjb21wYW55IiwiY29tcGFyZSIsImNvbXB1dGVyIiwiY29tc2VjIiwiY29uZG9zIiwiY29uc3RydWN0aW9uIiwiY29uc3VsdGluZyIsImNvbnRhY3QiLCJjb250cmFjdG9ycyIsImNvb2tpbmciLCJj''@;'; put 'put ''b29raW5nY2hhbm5lbCIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3JlZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVs''@;'; put 'put ''bGEiLCJjeW1ydSIsImN5b3UiLCJkYWJ1ciIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4iLCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxsIiwiZGVsb2l0dGUiLCJkZWx0YSIsImRl''@;'; put 'put ''bW9jcmF0IiwiZGVudGFsIiwiZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQiLCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJkbnAiLCJkb2NzIiwiZG9jdG9yIiwiZG9n''@;'; put 'put ''IiwiZG9tYWlucyIsImRvdCIsImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJlbWVyY2siLCJlbmVyZ3kiLCJlbmdpbmVl''@;'; put 'put ''ciIsImVuZ2luZWVyaW5nIiwiZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVzcSIsImVzdGF0ZSIsImV0aXNhbGF0IiwiZXVyb3Zpc2lvbiIsImV1cyIsImV2ZW50cyIsImV4Y2hhbmdlIiwiZXhwZXJ0IiwiZXhwb3NlZCIsImV4cHJlc3MiLCJl''@;'; put 'put ''eHRyYXNwYWNlIiwiZmFnZSIsImZhaWwiLCJmYWlyd2luZHMiLCJmYWl0aCIsImZhbWlseSIsImZhbiIsImZhbnMiLCJmYXJtIiwiZmFybWVycyIsImZhc2hpb24iLCJmYXN0IiwiZmVkZXgiLCJmZWVkYmFjayIsImZlcnJhcmkiLCJmZXJyZXJvIiwiZmlhdCIsImZpZGVsaXR5IiwiZmlkbyIs''@;'; put 'put ''ImZpbG0iLCJmaW5hbCIsImZpbmFuY2UiLCJmaW5hbmNpYWwiLCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNoIiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwiZm9vZCIs''@;'; put 'put ''ImZvb2RuZXR3b3JrIiwiZm9vdGJhbGwiLCJmb3JkIiwiZm9yZXgiLCJmb3JzYWxlIiwiZm9ydW0iLCJmb3VuZGF0aW9uIiwiZm94IiwiZnJlZSIsImZyZXNlbml1cyIsImZybCIsImZyb2dhbnMiLCJmcm9udGRvb3IiLCJmcm9udGllciIsImZ0ciIsImZ1aml0c3UiLCJmdW4iLCJmdW5kIiwi''@;'; put 'put ''ZnVybml0dXJlIiwiZnV0Ym9sIiwiZnlpIiwiZ2FsIiwiZ2FsbGVyeSIsImdhbGxvIiwiZ2FsbHVwIiwiZ2FtZSIsImdhbWVzIiwiZ2FwIiwiZ2FyZGVuIiwiZ2F5IiwiZ2JpeiIsImdkbiIsImdlYSIsImdlbnQiLCJnZW50aW5nIiwiZ2VvcmdlIiwiZ2dlZSIsImdpZnQiLCJnaWZ0cyIsImdp''@;'; put 'put ''dmVzIiwiZ2l2aW5nIiwiZ2xhc3MiLCJnbGUiLCJnbG9iYWwiLCJnbG9ibyIsImdtYWlsIiwiZ21iaCIsImdtbyIsImdteCIsImdvZGFkZHkiLCJnb2xkIiwiZ29sZHBvaW50IiwiZ29sZiIsImdvbyIsImdvb2R5ZWFyIiwiZ29vZyIsImdvb2dsZSIsImdvcCIsImdvdCIsImdyYWluZ2VyIiwi''@;'; put 'put ''Z3JhcGhpY3MiLCJncmF0aXMiLCJncmVlbiIsImdyaXBlIiwiZ3JvY2VyeSIsImdyb3VwIiwiZ3VhcmRpYW4iLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJoZGZjYmFuayIsImhl''@;'; put 'put ''YWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGd0diIsImhpcGhvcCIsImhpc2FtaXRzdSIsImhpdGFjaGkiLCJoaXYiLCJoa3QiLCJob2NrZXkiLCJob2xkaW5ncyIsImhvbGlkYXkiLCJob21lZGVwb3QiLCJob21lZ29vZHMiLCJob21lcyIs''@;'; put 'put ''ImhvbWVzZW5zZSIsImhvbmRhIiwiaG9yc2UiLCJob3NwaXRhbCIsImhvc3QiLCJob3N0aW5nIiwiaG90IiwiaG90ZWxlcyIsImhvdGVscyIsImhvdG1haWwiLCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1Iiwi''@;'; put 'put ''aWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1vYmlsaWVuIiwiaW5jIiwiaW5kdXN0cmllcyIsImluZmluaXRpIiwiaW5nIiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1l''@;'; put 'put ''bnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1bCIsIml0YXUiLCJpdHYiLCJqYWd1YXIiLCJqYXZhIiwiamNiIiwiamVlcCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2Fu''@;'; put 'put ''IiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vycnlob3RlbHMiLCJrZXJyeWxvZ2lzdGljcyIsImtlcnJ5cHJvcGVydGllcyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kZXIiLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29t''@;'; put 'put ''YXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lvdG8iLCJsYWNhaXhhIiwibGFtYm9yZ2hpbmkiLCJsYW1lciIsImxhbmNhc3RlciIsImxhbmNpYSIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlu''@;'; put 'put ''byIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdhbCIsImxlZ28iLCJsZXh1cyIsImxnYnQiLCJsaWRsIiwibGlmZSIsImxpZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0''@;'; put 'put ''ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmRlIiwibGluayIsImxpcHN5IiwibGl2ZSIsImxpdmluZyIsImxsYyIsImxscCIsImxvYW4iLCJsb2FucyIsImxvY2tlciIsImxvY3VzIiwibG9mdCIsImxvbCIsImxvbmRvbiIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5j''@;'; put 'put ''aWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hY3lzIiwibWFkcmlkIiwibWFpZiIsIm1haXNvbiIsIm1ha2V1cCIsIm1hbiIsIm1hbmFnZW1lbnQiLCJtYW5nbyIsIm1hcCIsIm1hcmtldCIsIm1hcmtldGluZyIsIm1hcmtldHMiLCJtYXJyaW90dCIsIm1h''@;'; put 'put ''cnNoYWxscyIsIm1hc2VyYXRpIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRpYSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2ttc2QiLCJtaWFtaSIsIm1pY3Jvc29mdCIsIm1pbmkiLCJtaW50IiwibWl0IiwibWl0''@;'; put 'put ''c3ViaXNoaSIsIm1sYiIsIm1scyIsIm1tYSIsIm1vYmlsZSIsIm1vZGEiLCJtb2UiLCJtb2kiLCJtb20iLCJtb25hc2giLCJtb25leSIsIm1vbnN0ZXIiLCJtb3Jtb24iLCJtb3J0Z2FnZSIsIm1vc2NvdyIsIm1vdG8iLCJtb3RvcmN5Y2xlcyIsIm1vdiIsIm1vdmllIiwibXNkIiwibXRuIiwi''@;'; put 'put ''bXRyIiwibXVzaWMiLCJtdXR1YWwiLCJuYWIiLCJuYWdveWEiLCJuYXR1cmEiLCJuYXZ5IiwibmJhIiwibmVjIiwibmV0YmFuayIsIm5ldGZsaXgiLCJuZXR3b3JrIiwibmV1c3RhciIsIm5ldyIsIm5ld3MiLCJuZXh0IiwibmV4dGRpcmVjdCIsIm5leHVzIiwibmZsIiwibmdvIiwibmhrIiwi''@;'; put 'put ''bmljbyIsIm5pa2UiLCJuaWtvbiIsIm5pbmphIiwibmlzc2FuIiwibmlzc2F5Iiwibm9raWEiLCJub3J0aHdlc3Rlcm5tdXR1YWwiLCJub3J0b24iLCJub3ciLCJub3dydXoiLCJub3d0diIsIm5yYSIsIm5ydyIsIm50dCIsIm55YyIsIm9iaSIsIm9ic2VydmVyIiwib2ZmaWNlIiwib2tpbmF3''@;'; put 'put ''YSIsIm9sYXlhbiIsIm9sYXlhbmdyb3VwIiwib2xkbmF2eSIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9ubGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3RzdWthIiwib3R0Iiwib3ZoIiwicGFnZSIs''@;'; put 'put ''InBhbmFzb25pYyIsInBhcmlzIiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBhc3NhZ2VucyIsInBheSIsInBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJwaG90b3MiLCJwaHlz''@;'; put 'put ''aW8iLCJwaWNzIiwicGljdGV0IiwicGljdHVyZXMiLCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIsInBvcm4iLCJwcmFt''@;'; put 'put ''ZXJpY2EiLCJwcmF4aSIsInByZXNzIiwicHJpbWUiLCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUiLCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBvbiIsInF1ZWJlYyIs''@;'; put 'put ''InF1ZXN0IiwicmFjaW5nIiwicmFkaW8iLCJyZWFkIiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVzIiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4iLCJyZW50IiwicmVu''@;'; put 'put ''dGFscyIsInJlcGFpciIsInJlcG9ydCIsInJlcHVibGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmlld3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9jaGVyIiwicm9ja3MiLCJyb2RlbyIsInJvZ2VycyIs''@;'; put 'put ''InJvb20iLCJyc3ZwIiwicnVnYnkiLCJydWhyIiwicnVuIiwicndlIiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2FmZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNhcCIs''@;'; put 'put ''InNhcmwiLCJzYXMiLCJzYXZlIiwic2F4byIsInNiaSIsInNicyIsInNjYSIsInNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3Vy''@;'; put 'put ''aXR5Iiwic2VlayIsInNlbGVjdCIsInNlbmVyIiwic2VydmljZXMiLCJzZXMiLCJzZXZlbiIsInNldyIsInNleCIsInNleHkiLCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoYXciLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMiLCJzaG9wIiwic2hvcHBpbmciLCJzaG91amki''@;'; put 'put ''LCJzaG93Iiwic2hvd3RpbWUiLCJzaWxrIiwic2luYSIsInNpbmdsZXMiLCJzaXRlIiwic2tpIiwic2tpbiIsInNreSIsInNreXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJz''@;'; put 'put ''b2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNveSIsInNwYSIsInNwYWNlIiwic3BvcnQiLCJzcG90Iiwic3JsIiwic3RhZGEiLCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3Ry''@;'; put 'put ''ZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHlsZSIsInN1Y2tzIiwic3VwcGxpZXMiLCJzdXBwbHkiLCJzdXBwb3J0Iiwic3VyZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFy''@;'; put 'put ''Z2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwidGF0dG9vIiwidGF4IiwidGF4aSIsInRjaSIsInRkayIsInRlYW0iLCJ0ZWNoIiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIs''@;'; put 'put ''InRpZmZhbnkiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUiLCJ0cmFk''@;'; put 'put ''aW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxjaGFubmVsIiwidHJhdmVsZXJzIiwidHJhdmVsZXJzaW5zdXJhbmNlIiwidHJ1c3QiLCJ0cnYiLCJ0dWJlIiwidHVpIiwidHVuZXMiLCJ0dXNodSIsInR2cyIsInViYW5rIiwidWJzIiwidW5pY29tIiwidW5pdmVyc2l0eSIsInVubyIs''@;'; put 'put ''InVvbCIsInVwcyIsInZhY2F0aW9ucyIsInZhbmEiLCJ2YW5ndWFyZCIsInZlZ2FzIiwidmVudHVyZXMiLCJ2ZXJpc2lnbiIsInZlcnNpY2hlcnVuZyIsInZldCIsInZpYWplcyIsInZpZGVvIiwidmlnIiwidmlraW5nIiwidmlsbGFzIiwidmluIiwidmlwIiwidmlyZ2luIiwidmlzYSIsInZp''@;'; put 'put ''c2lvbiIsInZpdmEiLCJ2aXZvIiwidmxhYW5kZXJlbiIsInZvZGthIiwidm9sa3N3YWdlbiIsInZvbHZvIiwidm90ZSIsInZvdGluZyIsInZvdG8iLCJ2b3lhZ2UiLCJ2dWVsb3MiLCJ3YWxlcyIsIndhbG1hcnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIs''@;'; put 'put ''IndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZGRpbmciLCJ3ZWlibyIsIndlaXIiLCJ3aG9zd2hvIiwid2llbiIsIndpa2kiLCJ3aWxsaWFtaGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNr''@;'; put 'put ''bHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhlcm94IiwieGZpbml0eSIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1''@;'; put 'put ''NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIsIlx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1''@;'; put 'put ''NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIsIlx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQz''@;'; put 'put ''MFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBm''@;'; put 'put ''MyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZm''@;'; put 'put ''Ylx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIsIlx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1''@;'; put 'put ''MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1OGJmYVx1NTdmYVx1NGU5YSIsIlx1OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1''@;'; put 'put ''MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDYyYVx1MDYzNVx1MDYyN1x1MDY0NFx1MDYyN1x1MDYyYSIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIsIlx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0''@;'; put 'put ''OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1Njcz''@;'; put 'put ''YVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIsIlx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIs''@;'; put 'put ''Ilx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1ceGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1''@;'; put 'put ''NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlhaG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlv''@;'; put 'put ''dXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY2MudWEiLCJpbmYudWEiLCJsdGQudWEiLCI2MTEudG8iLCJncmFwaG94LnVzIiwiKi5kZXZjZG5hY2Nlc3NvLmNvbSIsImFkb2JlYWVtY2xvdWQuY29tIiwiKi5kZXYuYWRvYmVhZW1j''@;'; put 'put ''bG91ZC5jb20iLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiaGx4LnBhZ2UiLCJobHgzLnBhZ2UiLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImJhcnN5LmNhIiwiKi5jb21wdXRl''@;'; put 'put ''LmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEubmV0IiwiY2xvdWRmcm9udC5uZXQiLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUuYW1hem9u''@;'; put 'put ''YXdzLmNvbS5jbiIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiY24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5j''@;'; put 'put ''b20iLCJhcC1ub3J0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0''@;'; put 'put ''LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJjYS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJl''@;'; put 'put ''dS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3Ytd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29t''@;'; put 'put ''IiwidXMtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCJhd3NnbG9iYWxhY2NlbGVyYXRvci5jb20iLCJzMy5hbWF6b25hd3MuY29tIiwiczMt''@;'; put 'put ''YXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LWNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1leHRlcm5hbC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz''@;'; put 'put ''aXRlLXVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRo''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMi5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ0M2wzcDBydC5uZXQiLCJ0ZWxlLmFtdW5lLm9yZyIsImFwaWdlZS5pbyIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3Bh''@;'; put 'put ''Y2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24tYXB0aWJsZS5jb20iLCJ1c2VyLmFzZWluZXQubmUuanAiLCJndi52YyIsImQuZ3YudmMiLCJ1c2VyLnBhcnR5LmV1cyIsInBpbWllbnRhLm9yZyIsInBvaXZyb24ub3JnIiwicG90YWdlci5vcmciLCJzd2VldHBlcHBlci5vcmci''@;'; put 'put ''LCJteWFzdXN0b3IuY29tIiwiY2RuLnByb2QuYXRsYXNzaWFuLWRldi5uZXQiLCJ0cmFuc2xhdGVkLnBhZ2UiLCJteWZyaXR6Lm5ldCIsIm9uYXZzdGFjay5uZXQiLCIqLmF3ZGV2LmNhIiwiKi5hZHZpc29yLndzIiwiZWNvbW1lcmNlLXNob3AucGwiLCJiLWRhdGEuaW8iLCJiYWNrcGxhbmVh''@;'; put 'put ''cHAuaW8iLCJiYWxlbmEtZGV2aWNlcy5jb20iLCJycy5iYSIsIiouYmFuemFpLmNsb3VkIiwiYXBwLmJhbnphaWNsb3VkLmlvIiwiKi5iYWNreWFyZHMuYmFuemFpY2xvdWQuaW8iLCJiYXNlLmVjIiwib2ZmaWNpYWwuZWMiLCJidXlzaG9wLmpwIiwiZmFzaGlvbnN0b3JlLmpwIiwiaGFuZGNy''@;'; put 'put ''YWZ0ZWQuanAiLCJrYXdhaWlzaG9wLmpwIiwic3VwZXJzYWxlLmpwIiwidGhlc2hvcC5qcCIsInNob3BzZWxlY3QubmV0IiwiYmFzZS5zaG9wIiwiKi5iZWdldC5hcHAiLCJiZXRhaW5hYm94LmNvbSIsImJuci5sYSIsImJpdGJ1Y2tldC5pbyIsImJsYWNrYmF1ZGNkbi5uZXQiLCJvZi5qZSIs''@;'; put 'put ''ImJsdWViaXRlLmlvIiwiYm9vbWxhLm5ldCIsImJvdXRpci5jb20iLCJib3hmdXNlLmlvIiwic3F1YXJlNy5jaCIsImJwbGFjZWQuY29tIiwiYnBsYWNlZC5kZSIsInNxdWFyZTcuZGUiLCJicGxhY2VkLm5ldCIsInNxdWFyZTcubmV0Iiwic2hvcC5icmVuZGx5LnJzIiwiYnJvd3NlcnNhZmV0''@;'; put 'put ''eW1hcmsuaW8iLCJ1azAuYmlndi5pbyIsImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJteWNkLmV1IiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFlLm9yZyIsImJyLmNvbSIsImNuLmNvbSIsImNvbS5k''@;'; put 'put ''ZSIsImNvbS5zZSIsImRlLmNvbSIsImV1LmNvbSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsImpwbi5jb20iLCJtZXguY29tIiwicnUuY29tIiwic2EuY29tIiwic2UubmV0IiwidWsuY29tIiwidWsubmV0IiwidXMuY29tIiwiemEuYnoiLCJ6YS5jb20iLCJhci5jb20iLCJodS5jb20i''@;'; put 'put ''LCJrci5jb20iLCJuby5jb20iLCJxYy5jb20iLCJ1eS5jb20iLCJhZnJpY2EuY29tIiwiZ3IuY29tIiwiaW4ubmV0Iiwid2ViLmluIiwidXMub3JnIiwiY28uY29tIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsImMubGEiLCJjZXJ0bWdy''@;'; put 'put ''Lm9yZyIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0iLCJjbGV2ZXJhcHBzLmlvIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xpY2tyaXNpbmcu''@;'; put 'put ''bmV0IiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVlc2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiY2xvdWRjb250cm9sbGVkLmNvbSIsImNsb3VkY29udHJvbGFw''@;'; put 'put ''cC5jb20iLCIqLmNsb3VkZXJhLnNpdGUiLCJwYWdlcy5kZXYiLCJ0cnljbG91ZGZsYXJlLmNvbSIsIndvcmtlcnMuZGV2Iiwid25leHQuYXBwIiwiY28uY2EiLCIqLm90YXAuY28iLCJjby5jeiIsImMuY2RuNzcub3JnIiwiY2RuNzctc3NsLm5ldCIsInIuY2RuNzcubmV0IiwicnNjLmNkbjc3''@;'; put 'put ''Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsImNsb3VkbnMuYXNpYSIsImNsb3VkbnMuYml6IiwiY2xvdWRucy5jbHViIiwiY2xvdWRucy5jYyIsImNsb3VkbnMuZXUiLCJjbG91ZG5zLmluIiwiY2xvdWRucy5pbmZvIiwiY2xvdWRucy5vcmciLCJjbG91ZG5zLnBybyIsImNs''@;'; put 'put ''b3VkbnMucHciLCJjbG91ZG5zLnVzIiwiY25weS5nZG4iLCJjb2RlYmVyZy5wYWdlIiwiY28ubmwiLCJjby5ubyIsIndlYmhvc3RpbmcuYmUiLCJob3N0aW5nLWNsdXN0ZXIubmwiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImludC5ydSIsIm1pbC5ydSIsInRlc3QucnUiLCJkeW4uY29z''@;'; put 'put ''aWRucy5kZSIsImR5bmFtaXNjaGVzLWRucy5kZSIsImRuc3VwZGF0ZXIuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1pLW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJzdGF0aWMtYWNjZXNzLm5ldCIsInJlYWxtLmN6IiwiKi5j''@;'; put 'put ''cnlwdG9ub21pYy5uZXQiLCJjdXBjYWtlLmlzIiwiY3Vydi5kZXYiLCIqLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jaS5jdXN0b21lci1vY2kuY29tIiwiKi5vY3AuY3VzdG9tZXItb2NpLmNvbSIsIioub2NzLmN1c3RvbWVyLW9jaS5jb20iLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJmbndr''@;'; put 'put ''LnNpdGUiLCJmb2xpb25ldHdvcmsuc2l0ZSIsInBsYXRmb3JtMC5hcHAiLCJkYXBsaWUubWUiLCJsb2NhbGhvc3QuZGFwbGllLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRv''@;'; put 'put ''Lm5ldCIsImJpei5kayIsImNvLmRrIiwiZmlybS5kayIsInJlZy5kayIsInN0b3JlLmRrIiwiZHluZG5zLmRhcHBub2RlLmlvIiwiKi5kYXBwcy5lYXJ0aCIsIiouYnp6LmRhcHBzLmVhcnRoIiwiYnVpbHR3aXRoZGFyay5jb20iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0''@;'; put 'put ''YWRldGVjdC5jb20iLCJlZGdlc3RhY2subWUiLCJkZG5zNS5jb20iLCJkZWJpYW4ubmV0IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiKi5yc3MubXkuaWQiLCIqLmRpaGVyLnNvbHV0aW9ucyIsImRpc2NvcmRzYXlzLmNv''@;'; put 'put ''bSIsImRpc2NvcmRzZXouY29tIiwiam96aS5iaXoiLCJkbnNob21lLmRlIiwib25saW5lLnRoIiwic2hvcC50aCIsImRyYXlkZG5zLmNvbSIsInNob3BhcmVuYS5wbCIsImRyZWFtaG9zdGVycy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5vcmciLCJi''@;'; put 'put ''aXAuc2giLCJiaXRicmlkZ2UubmV0IiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy1hdC1ob21lLmNvbSIsImR5bmRucy1hdC13b3JrLmNvbSIsImR5bmRucy1ibG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFp''@;'; put 'put ''bC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRucy1yZW1vdGUuY29tIiwiZHluZG5zLXNlcnZlci5jb20iLCJkeW5kbnMtd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImR5bmRucy5iaXoiLCJkeW5kbnMuaW5mbyIs''@;'; put 'put ''ImR5bmRucy5vcmciLCJkeW5kbnMudHYiLCJhdC1iYW5kLWNhbXAubmV0IiwiYXRoLmN4IiwiYmFycmVsLW9mLWtub3dsZWRnZS5pbmZvIiwiYmFycmVsbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJldHRlci10aGFuLnR2IiwiYmxvZ2Rucy5jb20iLCJibG9nZG5zLm5ldCIsImJsb2dkbnMub3Jn''@;'; put 'put ''IiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9yZyIsImJyb2tlLWl0Lm5ldCIsImJ1eXNob3VzZXMubmV0IiwiY2VjaGlyZS5jb20iLCJkbnNhbGlhcy5jb20iLCJkbnNhbGlhcy5uZXQiLCJkbnNhbGlhcy5vcmciLCJkbnNkb2pvLmNvbSIsImRuc2Rvam8ubmV0IiwiZG5z''@;'; put 'put ''ZG9qby5vcmciLCJkb2VzLWl0Lm5ldCIsImRvZXNudGV4aXN0LmNvbSIsImRvZXNudGV4aXN0Lm9yZyIsImRvbnRleGlzdC5jb20iLCJkb250ZXhpc3QubmV0IiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMuY29tIiwiZG9vbWRucy5vcmciLCJkdnJkbnMub3JnIiwiZHluLW8tc2F1ci5jb20i''@;'; put 'put ''LCJkeW5hbGlhcy5jb20iLCJkeW5hbGlhcy5uZXQiLCJkeW5hbGlhcy5vcmciLCJkeW5hdGhvbWUubmV0IiwiZHluZG5zLndzIiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZXN0LWEtbGEtbWFpc29uLmNvbSIsImVzdC1h''@;'; put 'put ''LWxhLW1hc2lvbi5jb20iLCJlc3QtbGUtcGF0cm9uLmNvbSIsImVzdC1tb24tYmxvZ3VldXIuY29tIiwiZm9yLWJldHRlci5iaXoiLCJmb3ItbW9yZS5iaXoiLCJmb3Itb3VyLmluZm8iLCJmb3Itc29tZS5iaXoiLCJmb3ItdGhlLmJpeiIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMu''@;'; put 'put ''bmFtZSIsImZyb20tYWsuY29tIiwiZnJvbS1hbC5jb20iLCJmcm9tLWFyLmNvbSIsImZyb20tYXoubmV0IiwiZnJvbS1jYS5jb20iLCJmcm9tLWNvLm5ldCIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwiZnJvbS1nYS5jb20iLCJmcm9t''@;'; put 'put ''LWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbGEubmV0IiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWUub3JnIiwiZnJvbS1taS5jb20iLCJm''@;'; put 'put ''cm9tLW1uLmNvbSIsImZyb20tbW8uY29tIiwiZnJvbS1tcy5jb20iLCJmcm9tLW10LmNvbSIsImZyb20tbmMuY29tIiwiZnJvbS1uZC5jb20iLCJmcm9tLW5lLmNvbSIsImZyb20tbmguY29tIiwiZnJvbS1uai5jb20iLCJmcm9tLW5tLmNvbSIsImZyb20tbnYuY29tIiwiZnJvbS1ueS5uZXQi''@;'; put 'put ''LCJmcm9tLW9oLmNvbSIsImZyb20tb2suY29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5j''@;'; put 'put ''b20iLCJmcm9tLXZ0LmNvbSIsImZyb20td2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZnRwYWNjZXNzLmNjIiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiZ2FtZS1ob3N0Lm9yZyIsImdhbWUtc2VydmVyLmNjIiwiZ2V0bXlpcC5jb20iLCJnZXRzLWl0''@;'; put 'put ''Lm5ldCIsImdvLmR5bmRucy5vcmciLCJnb3RkbnMuY29tIiwiZ290ZG5zLm9yZyIsImdyb2tzLXRoZS5pbmZvIiwiZ3Jva3MtdGhpcy5pbmZvIiwiaGFtLXJhZGlvLW9wLm5ldCIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImhvYmJ5LXNpdGUuY29tIiwiaG9iYnktc2l0ZS5vcmciLCJob21lLmR5''@;'; put 'put ''bmRucy5vcmciLCJob21lZG5zLm9yZyIsImhvbWVmdHAubmV0IiwiaG9tZWZ0cC5vcmciLCJob21laXAubmV0IiwiaG9tZWxpbnV4LmNvbSIsImhvbWVsaW51eC5uZXQiLCJob21lbGludXgub3JnIiwiaG9tZXVuaXguY29tIiwiaG9tZXVuaXgubmV0IiwiaG9tZXVuaXgub3JnIiwiaWFtYWxs''@;'; put 'put ''YW1hLmNvbSIsImluLXRoZS1iYW5kLm5ldCIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlzLWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1icnVpbnNmYW4ub3JnIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jYXRlcmVy''@;'; put 'put ''LmNvbSIsImlzLWEtY2VsdGljc2Zhbi5vcmciLCJpcy1hLWNoZWYuY29tIiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtY2hlZi5vcmciLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1kZW1vY3JhdC5jb20iLCJpcy1h''@;'; put 'put ''LWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1nZWVrLm5ldCIsImlzLWEtZ2Vlay5vcmciLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIs''@;'; put 'put ''ImlzLWEtaHVudGVyLmNvbSIsImlzLWEta25pZ2h0Lm9yZyIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5jb20iLCJpcy1hLWxpYmVyYWwuY29tIiwiaXMtYS1saWJlcnRhcmlhbi5jb20iLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11''@;'; put 'put ''c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMtYS1wYWludGVyLmNvbSIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXBlcnNvbmFsdHJhaW5lci5jb20iLCJpcy1hLXBob3RvZ3JhcGhlci5jb20iLCJpcy1hLXBsYXllci5jb20iLCJpcy1hLXJl''@;'; put 'put ''cHVibGljYW4uY29tIiwiaXMtYS1yb2Nrc3Rhci5jb20iLCJpcy1hLXNvY2lhbGlzdC5jb20iLCJpcy1hLXNveGZhbi5vcmciLCJpcy1hLXN0dWRlbnQuY29tIiwiaXMtYS10ZWFjaGVyLmNvbSIsImlzLWEtdGVjaGllLmNvbSIsImlzLWEtdGhlcmFwaXN0LmNvbSIsImlzLWFuLWFjY291bnRh''@;'; put 'put ''bnQuY29tIiwiaXMtYW4tYWN0b3IuY29tIiwiaXMtYW4tYWN0cmVzcy5jb20iLCJpcy1hbi1hbmFyY2hpc3QuY29tIiwiaXMtYW4tYXJ0aXN0LmNvbSIsImlzLWFuLWVuZ2luZWVyLmNvbSIsImlzLWFuLWVudGVydGFpbmVyLmNvbSIsImlzLWJ5LnVzIiwiaXMtY2VydGlmaWVkLmNvbSIsImlz''@;'; put 'put ''LWZvdW5kLm9yZyIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQuY29tIiwiaXMtbG9zdC5vcmciLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNh''@;'; put 'put ''dmVkLm9yZyIsImlzLXNsaWNrLmNvbSIsImlzLXViZXJsZWV0LmNvbSIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXMtd2l0aC10aGViYW5kLmNvbSIsImlzYS1n''@;'; put 'put ''ZWVrLmNvbSIsImlzYS1nZWVrLm5ldCIsImlzYS1nZWVrLm9yZyIsImlzYS1ob2NrZXludXQuY29tIiwiaXNzbWFydGVydGhhbnlvdS5jb20iLCJpc3RlaW5nZWVrLmRlIiwiaXN0bWVpbi5kZSIsImtpY2tzLWFzcy5uZXQiLCJraWNrcy1hc3Mub3JnIiwia25vd3NpdGFsbC5pbmZvIiwibGFu''@;'; put 'put ''ZC00LXNhbGUudXMiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2NhbmR5LmNvbSIsIm1lcnNlaW5lLm51IiwibWluZS5udSIsIm1pc2NvbmZ1c2VkLm9yZyIsIm15cGV0cy53cyIsIm15cGhvdG9zLmNjIiwibmVhdC11cmwuY29tIiwib2Zm''@;'; put 'put ''aWNlLW9uLXRoZS5uZXQiLCJvbi10aGUtd2ViLnR2IiwicG9kem9uZS5uZXQiLCJwb2R6b25lLm9yZyIsInJlYWRteWJsb2cub3JnIiwic2F2ZXMtdGhlLXdoYWxlcy5jb20iLCJzY3JhcHBlci1zaXRlLm5ldCIsInNjcmFwcGluZy5jYyIsInNlbGZpcC5iaXoiLCJzZWxmaXAuY29tIiwic2Vs''@;'; put 'put ''ZmlwLmluZm8iLCJzZWxmaXAubmV0Iiwic2VsZmlwLm9yZyIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlbGxzLWl0Lm5ldCIsInNlbGxzeW91cmhvbWUub3JnIiwic2VydmViYnMuY29tIiwic2VydmViYnMubmV0Iiwic2VydmViYnMub3JnIiwic2VydmVmdHAu''@;'; put 'put ''bmV0Iiwic2VydmVmdHAub3JnIiwic2VydmVnYW1lLm9yZyIsInNoYWNrbmV0Lm51Iiwic2ltcGxlLXVybC5jb20iLCJzcGFjZS10by1yZW50LmNvbSIsInN0dWZmLTQtc2FsZS5vcmciLCJzdHVmZi00LXNhbGUudXMiLCJ0ZWFjaGVzLXlvZ2EuY29tIiwidGhydWhlcmUubmV0IiwidHJhZXVt''@;'; put 'put ''dGdlcmFkZS5kZSIsIndlYmhvcC5iaXoiLCJ3ZWJob3AuaW5mbyIsIndlYmhvcC5uZXQiLCJ3ZWJob3Aub3JnIiwid29yc2UtdGhhbi50diIsIndyaXRlc3RoaXNibG9nLmNvbSIsImRkbnNzLmRlIiwiZHluLmRkbnNzLmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluZG5zMS5kZSIsImR5bi1p''@;'; put 'put ''cDI0LmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGVmaW5pbWEubmV0IiwiZGVmaW5pbWEuaW8iLCJvbmRpZ2l0YWxvY2Vhbi5hcHAiLCIqLmRpZ2l0YWxvY2VhbnNwYWNlcy5jb20iLCJiY2ku''@;'; put 'put ''ZG5zdHJhY2UucHJvIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtvem93LmNvbSIsImxvc2V5b3VyaXAuY29tIiwib29ndXkuY29tIiwidGhld29ya3BjLmNvbSIsImNhc2FjYW0ubmV0IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3Jn''@;'; put 'put ''IiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9ja3MiLCJibG9nc2l0ZS54eXoiLCJkeW52Ni5uZXQiLCJlNC5jeiIsImVlcm8ub25saW5lIiwiZWVyby1zdGFnZS5vbmxpbmUiLCJlbGVtZW50b3IuY2xvdWQiLCJl''@;'; put 'put ''bGVtZW50b3IuY29vbCIsImVuLXJvb3QuZnIiLCJteXR1bGVhcC5jb20iLCJ0dWxlYXAtcGFydG5lcnMuY29tIiwiZW5jci5hcHAiLCJlbmNvcmVhcGkuY29tIiwib25yZWQub25lIiwic3RhZ2luZy5vbnJlZC5vbmUiLCJldS5lbmNvd2F5LmNsb3VkIiwiZXUub3JnIiwiYWwuZXUub3JnIiwi''@;'; put 'put ''YXNzby5ldS5vcmciLCJhdC5ldS5vcmciLCJhdS5ldS5vcmciLCJiZS5ldS5vcmciLCJiZy5ldS5vcmciLCJjYS5ldS5vcmciLCJjZC5ldS5vcmciLCJjaC5ldS5vcmciLCJjbi5ldS5vcmciLCJjeS5ldS5vcmciLCJjei5ldS5vcmciLCJkZS5ldS5vcmciLCJkay5ldS5vcmciLCJlZHUuZXUu''@;'; put 'put ''b3JnIiwiZWUuZXUub3JnIiwiZXMuZXUub3JnIiwiZmkuZXUub3JnIiwiZnIuZXUub3JnIiwiZ3IuZXUub3JnIiwiaHIuZXUub3JnIiwiaHUuZXUub3JnIiwiaWUuZXUub3JnIiwiaWwuZXUub3JnIiwiaW4uZXUub3JnIiwiaW50LmV1Lm9yZyIsImlzLmV1Lm9yZyIsIml0LmV1Lm9yZyIsImpw''@;'; put 'put ''LmV1Lm9yZyIsImtyLmV1Lm9yZyIsImx0LmV1Lm9yZyIsImx1LmV1Lm9yZyIsImx2LmV1Lm9yZyIsIm1jLmV1Lm9yZyIsIm1lLmV1Lm9yZyIsIm1rLmV1Lm9yZyIsIm10LmV1Lm9yZyIsIm15LmV1Lm9yZyIsIm5ldC5ldS5vcmciLCJuZy5ldS5vcmciLCJubC5ldS5vcmciLCJuby5ldS5vcmci''@;'; put 'put ''LCJuei5ldS5vcmciLCJwYXJpcy5ldS5vcmciLCJwbC5ldS5vcmciLCJwdC5ldS5vcmciLCJxLWEuZXUub3JnIiwicm8uZXUub3JnIiwicnUuZXUub3JnIiwic2UuZXUub3JnIiwic2kuZXUub3JnIiwic2suZXUub3JnIiwidHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVy''@;'; put 'put ''b2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1LTQuZXZlbm5vZGUuY29tIiwidXMtMS5ldmVubm9kZS5jb20iLCJ1cy0yLmV2ZW5ub2RlLmNvbSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5j''@;'; put 'put ''b20iLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsIm9uZmFicmljYS5jb20iLCJhcHBzLmZic2J4LmNvbSIsInJ1Lm5ldCIsImFkeWdleWEucnUiLCJiYXNoa2lyaWEucnUiLCJiaXIucnUiLCJjYmcucnUiLCJjb20ucnUi''@;'; put 'put ''LCJkYWdlc3Rhbi5ydSIsImdyb3pueS5ydSIsImthbG15a2lhLnJ1Iiwia3VzdGFuYWkucnUiLCJtYXJpbmUucnUiLCJtb3Jkb3ZpYS5ydSIsIm1zay5ydSIsIm15dGlzLnJ1IiwibmFsY2hpay5ydSIsIm5vdi5ydSIsInB5YXRpZ29yc2sucnUiLCJzcGIucnUiLCJ2bGFkaWthdmthei5ydSIs''@;'; put 'put ''InZsYWRpbWlyLnJ1IiwiYWJraGF6aWEuc3UiLCJhZHlnZXlhLnN1IiwiYWt0eXViaW5zay5zdSIsImFya2hhbmdlbHNrLnN1IiwiYXJtZW5pYS5zdSIsImFzaGdhYmFkLnN1IiwiYXplcmJhaWphbi5zdSIsImJhbGFzaG92LnN1IiwiYmFzaGtpcmlhLnN1IiwiYnJ5YW5zay5zdSIsImJ1a2hh''@;'; put 'put ''cmEuc3UiLCJjaGlta2VudC5zdSIsImRhZ2VzdGFuLnN1IiwiZWFzdC1rYXpha2hzdGFuLnN1IiwiZXhuZXQuc3UiLCJnZW9yZ2lhLnN1IiwiZ3Jvem55LnN1IiwiaXZhbm92by5zdSIsImphbWJ5bC5zdSIsImthbG15a2lhLnN1Iiwia2FsdWdhLnN1Iiwia2FyYWNvbC5zdSIsImthcmFnYW5k''@;'; put 'put ''YS5zdSIsImthcmVsaWEuc3UiLCJraGFrYXNzaWEuc3UiLCJrcmFzbm9kYXIuc3UiLCJrdXJnYW4uc3UiLCJrdXN0YW5haS5zdSIsImxlbnVnLnN1IiwibWFuZ3lzaGxhay5zdSIsIm1vcmRvdmlhLnN1IiwibXNrLnN1IiwibXVybWFuc2suc3UiLCJuYWxjaGlrLnN1IiwibmF2b2kuc3UiLCJu''@;'; put 'put ''b3J0aC1rYXpha2hzdGFuLnN1Iiwibm92LnN1Iiwib2JuaW5zay5zdSIsInBlbnphLnN1IiwicG9rcm92c2suc3UiLCJzb2NoaS5zdSIsInNwYi5zdSIsInRhc2hrZW50LnN1IiwidGVybWV6LnN1IiwidG9nbGlhdHRpLnN1IiwidHJvaXRzay5zdSIsInRzZWxpbm9ncmFkLnN1IiwidHVsYS5z''@;'; put 'put ''dSIsInR1dmEuc3UiLCJ2bGFkaWthdmthei5zdSIsInZsYWRpbWlyLnN1Iiwidm9sb2dkYS5zdSIsImNoYW5uZWxzZHZyLm5ldCIsInUuY2hhbm5lbHNkdnIubmV0IiwiZWRnZWNvbXB1dGUuYXBwIiwiZmFzdGx5LXRlcnJhcml1bS5jb20iLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIu''@;'; put 'put ''bmV0IiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5wcm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0IiwiYi5zc2wuZmFzdGx5Lm5ldCIsImdsb2JhbC5zc2wuZmFzdGx5Lm5ldCIsImZhc3R2cHMtc2VydmVy''@;'; put 'put ''LmNvbSIsImZhc3R2cHMuaG9zdCIsIm15ZmFzdC5ob3N0IiwiZmFzdHZwcy5zaXRlIiwibXlmYXN0LnNwYWNlIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAu''@;'; put 'put ''b3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwiY29ubi51ayIsImNvcHJvLnVrIiwiaG9zcC51ayIsIm15ZG9iaXNzLmNvbSIsImZoLW11ZW5zdGVyLmlvIiwiZmlsZWdlYXIubWUiLCJmaWxlZ2Vhci1hdS5tZSIsImZpbGVnZWFyLWRlLm1lIiwiZmlsZWdlYXItZ2IubWUiLCJmaWxlZ2Vhci1p''@;'; put 'put ''ZS5tZSIsImZpbGVnZWFyLWpwLm1lIiwiZmlsZWdlYXItc2cubWUiLCJmaXJlYmFzZWFwcC5jb20iLCJmaXJld2ViLmFwcCIsImZsYXAuaWQiLCJvbmZsYXNoZHJpdmUuYXBwIiwiZmxkcnYuY29tIiwiZmx5LmRldiIsImVkZ2VhcHAubmV0Iiwic2h3LmlvIiwiZmx5bm5ob3N0aW5nLm5ldCIs''@;'; put 'put ''ImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiKi5mcnVza3kuZGUiLCJyYXZwYWdlLmNvLmlsIiwiMGUudmMiLCJmcmVlYm94LW9zLmNvbSIsImZyZWVib3hvcy5jb20iLCJmYngtb3MuZnIiLCJmYnhvcy5mciIsImZy''@;'; put 'put ''ZWVib3gtb3MuZnIiLCJmcmVlYm94b3MuZnIiLCJmcmVlZGVza3RvcC5vcmciLCJmcmVlbXlpcC5jb20iLCJ3aWVuLmZ1bmtmZXVlci5hdCIsIiouZnV0dXJlY21zLmF0IiwiKi5leC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVt''@;'; put 'put ''YWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiaW5kZXBlbmRlbnQtY29tbWlzc2lvbi51ayIsImluZGVwZW5kZW50LWlucXVlc3QudWsiLCJpbmRlcGVuZGVudC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFu''@;'; put 'put ''ZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsiLCJjYW1wYWlnbi5nb3YudWsiLCJzZXJ2aWNlLmdvdi51ayIsImFwaS5nb3YudWsiLCJnZWhpcm4ubmUuanAiLCJ1c2VyY29udGVudC5qcCIsImdlbnRhcHBzLmNv''@;'; put 'put ''bSIsImdlbnRsZW50YXBpcy5jb20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwiZ2hvc3QuaW8iLCJnc2ouYnoiLCJnaXRodWJ1c2VyY29udGVudC5jb20iLCJnaXRodWJwcmV2aWV3LmRldiIsImdpdGh1Yi5pbyIsImdpdGxhYi5pbyIsImdpdGFwcC5zaSIsImdpdHBhZ2Uuc2kiLCJnbGl0''@;'; put 'put ''Y2gubWUiLCJub2cuY29tbXVuaXR5IiwiY28ucm8iLCJzaG9wLnJvIiwibG9saXBvcC5pbyIsImFuZ3J5LmpwIiwiYmFieWJsdWUuanAiLCJiYWJ5bWlsay5qcCIsImJhY2tkcm9wLmpwIiwiYmFtYmluYS5qcCIsImJpdHRlci5qcCIsImJsdXNoLmpwIiwiYm9vLmpwIiwiYm95LmpwIiwiYm95''@;'; put 'put ''ZnJpZW5kLmpwIiwiYnV0LmpwIiwiY2FuZHlwb3AuanAiLCJjYXBvby5qcCIsImNhdGZvb2QuanAiLCJjaGVhcC5qcCIsImNoaWNhcHBhLmpwIiwiY2hpbGxvdXQuanAiLCJjaGlwcy5qcCIsImNob3dkZXIuanAiLCJjaHUuanAiLCJjaWFvLmpwIiwiY29jb3R0ZS5qcCIsImNvb2xibG9nLmpw''@;'; put 'put ''IiwiY3Jhbmt5LmpwIiwiY3V0ZWdpcmwuanAiLCJkYWEuanAiLCJkZWNhLmpwIiwiZGVjaS5qcCIsImRpZ2ljay5qcCIsImVnb2lzbS5qcCIsImZha2VmdXIuanAiLCJmZW0uanAiLCJmbGllci5qcCIsImZsb3BweS5qcCIsImZvb2wuanAiLCJmcmVuY2hraXNzLmpwIiwiZ2lybGZyaWVuZC5q''@;'; put 'put ''cCIsImdpcmx5LmpwIiwiZ2xvb215LmpwIiwiZ29ubmEuanAiLCJncmVhdGVyLmpwIiwiaGFjY2EuanAiLCJoZWF2eS5qcCIsImhlci5qcCIsImhpaG8uanAiLCJoaXBweS5qcCIsImhvbHkuanAiLCJodW5ncnkuanAiLCJpY3VydXMuanAiLCJpdGlnby5qcCIsImplbGx5YmVhbi5qcCIsImtp''@;'; put 'put ''a2lyYXJhLmpwIiwia2lsbC5qcCIsImtpbG8uanAiLCJrdXJvbi5qcCIsImxpdHRsZXN0YXIuanAiLCJsb2xpcG9wbWMuanAiLCJsb2xpdGFwdW5rLmpwIiwibG9tby5qcCIsImxvdmVwb3AuanAiLCJsb3Zlc2ljay5qcCIsIm1haW4uanAiLCJtb2RzLmpwIiwibW9uZC5qcCIsIm1vbmdvbGlh''@;'; put 'put ''bi5qcCIsIm1vby5qcCIsIm5hbWFzdGUuanAiLCJuaWtpdGEuanAiLCJub2J1c2hpLmpwIiwibm9vci5qcCIsIm9vcHMuanAiLCJwYXJhbGxlbC5qcCIsInBhcmFzaXRlLmpwIiwicGVjb3JpLmpwIiwicGVld2VlLmpwIiwicGVubmUuanAiLCJwZXBwZXIuanAiLCJwZXJtYS5qcCIsInBpZ2Jv''@;'; put 'put ''YXQuanAiLCJwaW5va28uanAiLCJwdW55dS5qcCIsInB1cHUuanAiLCJwdXNzeWNhdC5qcCIsInB5YS5qcCIsInJhaW5kcm9wLmpwIiwicmVhZHltYWRlLmpwIiwic2FkaXN0LmpwIiwic2Nob29sYnVzLmpwIiwic2VjcmV0LmpwIiwic3RhYmEuanAiLCJzdHJpcHBlci5qcCIsInN1Yi5qcCIs''@;'; put 'put ''InN1bm55ZGF5LmpwIiwidGhpY2suanAiLCJ0b25rb3RzdS5qcCIsInVuZGVyLmpwIiwidXBwZXIuanAiLCJ2ZWx2ZXQuanAiLCJ2ZXJzZS5qcCIsInZlcnN1cy5qcCIsInZpdmlhbi5qcCIsIndhdHNvbi5qcCIsIndlYmxpa2UuanAiLCJ3aGl0ZXNub3cuanAiLCJ6b21iaWUuanAiLCJoZXRl''@;'; put 'put ''bWwubmV0IiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJweW1udC51ayIsImhvbWVvZmZpY2UuZ292LnVrIiwicm8uaW0iLCJnb2lwLmRlIiwicnVuLmFwcCIsImEucnVuLmFwcCIsIndlYi5hcHAiLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIq''@;'; put 'put ''LnIuYXBwc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFnZXNwZWVkbW9iaWxpemVyLmNvbSIsInB1Ymxpc2hwcm94eS5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsIiouZ2F0ZXdheS5kZXYiLCJjbG91''@;'; put 'put ''ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3QuYW0iLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIs''@;'; put 'put ''ImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jby5pZCIsImJsb2dzcG90LmNvLmlsIiwiYmxvZ3Nwb3QuY28ua2UiLCJibG9nc3BvdC5jby5ueiIsImJsb2dzcG90LmNvLnVrIiwiYmxvZ3Nw''@;'; put 'put ''b3QuY28uemEiLCJibG9nc3BvdC5jb20iLCJibG9nc3BvdC5jb20uYXIiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5jb20uYnIiLCJibG9nc3BvdC5jb20uYnkiLCJibG9nc3BvdC5jb20uY28iLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jb20uZWUiLCJibG9nc3BvdC5jb20u''@;'; put 'put ''ZWciLCJibG9nc3BvdC5jb20uZXMiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC5jdiIsImJsb2dzcG90LmN6IiwiYmxvZ3Nwb3QuZGUiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmZpIiwi''@;'; put 'put ''YmxvZ3Nwb3QuZnIiLCJibG9nc3BvdC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmllIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5rciIsImJsb2dzcG90Lmxp''@;'; put 'put ''IiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5tciIsImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90''@;'; put 'put ''LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIsImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC50dyIsImJsb2dz''@;'; put 'put ''cG90LnVnIiwiYmxvZ3Nwb3Qudm4iLCJnb3VwaWxlLmZyIiwiZ292Lm5sIiwiYXdzbXBwbC5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaHMuem9uZSIsImhz''@;'; put 'put ''LnJ1biIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsInJhdmVuZGIuY2xvdWQiLCJteXJhdmVuZGIuY29tIiwicmF2ZW5kYi5j''@;'; put 'put ''b21tdW5pdHkiLCJyYXZlbmRiLm1lIiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJjb2wubmciLCJmaXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwiZWR1''@;'; put 'put ''LnNjb3QiLCJzY2guc28iLCJob3N0eWhvc3RpbmcuaW8iLCJoXHhlNGtraW5lbi5maSIsIioubW9vbnNjYWxlLmlvIiwibW9vbnNjYWxlLm5ldCIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5pdCIsImltcGVydHJpeGNkbi5jb20iLCJpbXBlcnRyaXguY29tIiwic211c2hjZG4u''@;'; put 'put ''Y29tIiwid3Bob3N0ZWRtYWlsLmNvbSIsIndwbXVjZG4uY29tIiwidGVtcHVybC5ob3N0Iiwid3BtdWRldi5ob3N0IiwiZHluLWJlcmxpbi5kZSIsImluLWJlcmxpbi5kZSIsImluLWJyYi5kZSIsImluLWJ1dHRlci5kZSIsImluLWRzbC5kZSIsImluLWRzbC5uZXQiLCJpbi1kc2wub3JnIiwi''@;'; put 'put ''aW4tdnBuLmRlIiwiaW4tdnBuLm5ldCIsImluLXZwbi5vcmciLCJiaXouYXQiLCJpbmZvLmF0IiwiaW5mby5jeCIsImFjLmxlZy5iciIsImFsLmxlZy5iciIsImFtLmxlZy5iciIsImFwLmxlZy5iciIsImJhLmxlZy5iciIsImNlLmxlZy5iciIsImRmLmxlZy5iciIsImVzLmxlZy5iciIsImdv''@;'; put 'put ''LmxlZy5iciIsIm1hLmxlZy5iciIsIm1nLmxlZy5iciIsIm1zLmxlZy5iciIsIm10LmxlZy5iciIsInBhLmxlZy5iciIsInBiLmxlZy5iciIsInBlLmxlZy5iciIsInBpLmxlZy5iciIsInByLmxlZy5iciIsInJqLmxlZy5iciIsInJuLmxlZy5iciIsInJvLmxlZy5iciIsInJyLmxlZy5iciIs''@;'; put 'put ''InJzLmxlZy5iciIsInNjLmxlZy5iciIsInNlLmxlZy5iciIsInNwLmxlZy5iciIsInRvLmxlZy5iciIsInBpeG9saW5vLmNvbSIsIm5hNHUucnUiLCJpb3BzeXMuc2UiLCJpcGlmb255Lm5ldCIsImlzZXJ2c2NodWxlLmRlIiwibWVpbi1pc2Vydi5kZSIsInNjaHVscGxhdHRmb3JtLmRlIiwi''@;'; put 'put ''c2NodWxzZXJ2ZXIuZGUiLCJ0ZXN0LWlzZXJ2LmRlIiwiaXNlcnYuZGV2IiwiaW9iYi5uZXQiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsInVzZXJzLnNjYWxlLnZpcnR1YWxjbG91ZC5jb20uYnIiLCJteWNsb3VkLmJ5IiwiYWxwMS5hZS5m''@;'; put 'put ''bG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2aXAuamVsYXN0aWMuY2xvdWQiLCJqZWxlLmNsb3VkIiwiaXQxLmV1ci5hcnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNs''@;'; put 'put ''b3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIsInByaW1ldGVsLmNsb3VkIiwidWsucHJpbWV0ZWwuY2xvdWQiLCJjYS5yZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50''@;'; put 'put ''cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJhbXNjb21wdXRlLmNvbSIsImNsaWNrZXRjbG91ZC5jb20iLCJkb3BhYXMuY29tIiwiaGlkb3JhLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVy''@;'; put 'put ''LmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMuaWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwia2lsYXRpcm9uLmNvbSIsInBhYXMubWFzc2l2ZWdyaWQuY29tIiwiamVkLndhZmFpY2xvdWQuY29t''@;'; put 'put ''IiwibG9uLndhZmFpY2xvdWQuY29tIiwicnlkLndhZmFpY2xvdWQuY29tIiwiai5zY2FsZWZvcmNlLmNvbS5jeSIsImplbGFzdGljLmRvZ2Fkby5ldSIsImZpLmNsb3VkcGxhdGZvcm0uZmkiLCJkZW1vLmRhdGFjZW50ZXIuZmkiLCJwYWFzLmRhdGFjZW50ZXIuZmkiLCJqZWxlLmhvc3QiLCJt''@;'; put 'put ''aXJjbG91ZC5ob3N0IiwicGFhcy5iZWVieXRlLmlvIiwic2VrZDEuYmVlYnl0ZWFwcC5pbyIsImplbGUuaW8iLCJjbG91ZC1mcjEudW5pc3BhY2UuaW8iLCJqYy5uZWVuLml0IiwiY2xvdWQuamVsYXN0aWMub3Blbi50aW0uaXQiLCJqY2xvdWQua3oiLCJ1cGFhcy5rYXp0ZWxlcG9ydC5reiIs''@;'; put 'put ''ImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnkubmV0IiwiamxzLXN0bzEuZWxhc3R4Lm5ldCIsImpscy1zdG8yLmVsYXN0eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZmFzdHN0YWNrcy5uZXQiLCJmci0xLnBhYXMubWFz''@;'; put 'put ''c2l2ZWdyaWQubmV0IiwibG9uLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0yLnBhYXMubWFzc2l2ZWdyaWQubmV0Iiwic2ctMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImplbGFzdGlj''@;'; put 'put ''LnNhdmVpbmNsb3VkLm5ldCIsIm5vcmRlc3RlLWlkYy5zYXZlaW5jbG91ZC5uZXQiLCJqLnNjYWxlZm9yY2UubmV0IiwiamVsYXN0aWMudHN1a2FlcnUubmV0Iiwic2RzY2xvdWQucGwiLCJ1bmljbG91ZC5wbCIsIm1pcmNsb3VkLnJ1IiwiamVsYXN0aWMucmVncnVob3N0aW5nLnJ1IiwiZW5z''@;'; put 'put ''Y2FsZWQuc2ciLCJqZWxlLnNpdGUiLCJqZWxhc3RpYy50ZWFtIiwib3JhbmdlY2xvdWQudG4iLCJqLmxheWVyc2hpZnQuY28udWsiLCJwaHguZW5zY2FsZWQudXMiLCJtaXJjbG91ZC51cyIsIm15amluby5ydSIsIiouaG9zdGluZy5teWppbm8ucnUiLCIqLmxhbmRpbmcubXlqaW5vLnJ1Iiwi''@;'; put 'put ''Ki5zcGVjdHJ1bS5teWppbm8ucnUiLCIqLnZwcy5teWppbm8ucnUiLCJqb3RlbHVsdS5jbG91ZCIsIioudHJpdG9uLnpvbmUiLCIqLmNucy5qb3llbnQuY29tIiwianMub3JnIiwia2Fhcy5nZyIsImtocGxheS5ubCIsImt0aXN0b3J5LmNvbSIsImthcHNpLmZpIiwia2V5bWFjaGluZS5kZSIs''@;'; put 'put ''Imtpbmdob3N0Lm5ldCIsInVuaTUubmV0Iiwia25pZ2h0cG9pbnQuc3lzdGVtcyIsImtvb2Jpbi5ldmVudHMiLCJveWEudG8iLCJrdWxldXZlbi5jbG91ZCIsImV6cHJveHkua3VsZXV2ZW4uYmUiLCJjby5rcmQiLCJlZHUua3JkIiwia3JlbGxpYW4ubmV0Iiwid2VidGhpbmdzLmlvIiwiZ2l0''@;'; put 'put ''LXJlcG9zLmRlIiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwibHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwiY28uYnVzaW5lc3MiLCJjby5lZHVjYXRpb24iLCJjby5ldmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5u''@;'; put 'put ''ZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwiYXBwLmxtcG0uY29tIiwibGlua3lhcmQuY2xvdWQiLCJsaW5reWFyZC1jbG91ZC5jaCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIioubm9kZWJhbGFuY2VyLmxpbm9kZS5jb20iLCIqLmxpbm9kZW9iamVjdHMuY29tIiwiaXAubGlu''@;'; put 'put ''b2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCIqLnVzZXIubG9jYWxjZXJ0LmRldiIsImxvY2Fsem9uZS54eXoiLCJsb2dpbmxpbmUuYXBwIiwibG9naW5saW5lLmRldiIsImxvZ2lubGluZS5pbyIsImxvZ2lubGluZS5zZXJ2aWNlcyIsImxvZ2lubGluZS5zaXRlIiwic2VydmVycy5ydW4i''@;'; put 'put ''LCJsb2htdXMubWUiLCJrcmFzbmlrLnBsIiwibGVjem5hLnBsIiwibHViYXJ0b3cucGwiLCJsdWJsaW4ucGwiLCJwb25pYXRvd2EucGwiLCJzd2lkbmlrLnBsIiwiZ2x1Zy5vcmcudWsiLCJsdWcub3JnLnVrIiwibHVncy5vcmcudWsiLCJiYXJzeS5iZyIsImJhcnN5LmNvLnVrIiwiYmFyc3lv''@;'; put 'put ''bmxpbmUuY28udWsiLCJiYXJzeWNlbnRlci5jb20iLCJiYXJzeW9ubGluZS5jb20iLCJiYXJzeS5jbHViIiwiYmFyc3kuZGUiLCJiYXJzeS5ldSIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5l''@;'; put 'put ''dCIsImJhcnN5Lm9ubGluZSIsImJhcnN5Lm9yZyIsImJhcnN5LnBybyIsImJhcnN5LnB1YiIsImJhcnN5LnJvIiwiYmFyc3kuc2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCIqLm1hZ2VudG9zaXRlLmNsb3VkIiwibWF5Zmlyc3QuaW5mbyIsIm1heWZpcnN0''@;'; put 'put ''Lm9yZyIsImhiLmNsZG1haWwucnUiLCJjbi52dSIsIm1hemVwbGF5LmNvbSIsIm1jcGUubWUiLCJtY2Rpci5tZSIsIm1jZGlyLnJ1IiwibWNwcmUucnUiLCJ2cHMubWNkaXIucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1pbmlzZXJ2ZXIuY29tIiwi''@;'; put 'put ''bWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsIiouY2xvdWQubWV0YWNlbnRydW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0uY3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1''@;'; put 'put ''cmVjb250YWluZXIuaW8iLCJhenVyZXdlYnNpdGVzLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJjbG91ZGFwcC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0''@;'; put 'put ''YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiY3N4LmNjIiwibWludGVyZS5zaXRlIiwiZm9ydGUuaWQiLCJtb3ppbGxhLWlvdC5vcmciLCJibW9h''@;'; put 'put ''dHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUiLCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImN1c3RvbWVyLm15dGhpYy1iZWFzdHMuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNv''@;'; put 'put ''bSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9uY2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRo''@;'; put 'put ''aWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNvLnVrIiwidWkubmFidS5jYXNhIiwicG9ueS5jbHViIiwib2YuZmFzaGlvbiIsImluLmxvbmRvbiIsIm9mLmxvbmRvbiIsImZyb20ubWFya2V0aW5nIiwid2l0aC5tYXJrZXRpbmciLCJmb3IubWVuIiwicmVwYWlyLm1lbiIsImFuZC5t''@;'; put 'put ''b20iLCJmb3IubW9tIiwiZm9yLm9uZSIsInVuZGVyLm9uZSIsImZvci5zYWxlIiwidGhhdC53aW4iLCJmcm9tLndvcmsiLCJ0by53b3JrIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZ3Jvay5pbyIsIm5oLXNlcnYuY28udWsiLCJuZnNob3N0LmNv''@;'; put 'put ''bSIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2RlLnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90aWNlYWJsZS5uZXdzIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIw''@;'; put 'put ''MDF3d3cuY29tIiwiZGRuc2xpdmUuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCIxNi1iLml0IiwiMzItYi5pdCIsIjY0LWIuaXQiLCJzb3VuZGNhc3QubWUiLCJ0Y3A0Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5k''@;'; put 'put ''bnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwiY3JhZnRpbmcueHl6IiwiemFwdG8ueHl6IiwibnN1cGRhdGUuaW5mbyIsIm5lcmRwb2wub3ZoIiwiYmxvZ3N5dGUuY29tIiwiYnJhc2ls''@;'; put 'put ''aWEubWUiLCJjYWJsZS1tb2RlbS5vcmciLCJjaXNjb2ZyZWFrLmNvbSIsImNvbGxlZ2VmYW4ub3JnIiwiY291Y2hwb3RhdG9mcmllcy5vcmciLCJkYW1uc2VydmVyLmNvbSIsImRkbnMubWUiLCJkaXRjaHlvdXJpcC5jb20iLCJkbnNmb3IubWUiLCJkbnNpc2tpbmt5LmNvbSIsImR2cmNhbS5p''@;'; put 'put ''bmZvIiwiZHlubnMuY29tIiwiZWF0aW5nLW9yZ2FuaWMubmV0IiwiZmFudGFzeWxlYWd1ZS5jYyIsImdlZWtnYWxheHkuY29tIiwiZ29sZmZhbi51cyIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJob3B0by5tZSIs''@;'; put 'put ''Imlsb3ZlY29sbGVnZS5pbmZvIiwibG9naW50by5tZSIsIm1sYmZhbi5vcmciLCJtbWFmYW4uYml6IiwibXlhY3RpdmVkaXJlY3RvcnkuY29tIiwibXlkaXNzZW50Lm5ldCIsIm15ZWZmZWN0Lm5ldCIsIm15bWVkaWFwYy5uZXQiLCJteXBzeC5uZXQiLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIs''@;'; put 'put ''Im15c2VjdXJpdHljYW1lcmEubmV0IiwibXlzZWN1cml0eWNhbWVyYS5vcmciLCJuZXQtZnJlYWtzLmNvbSIsIm5mbGZhbi5vcmciLCJuaGxmYW4ubmV0Iiwibm8taXAuY2EiLCJuby1pcC5jby51ayIsIm5vLWlwLm5ldCIsIm5vaXAudXMiLCJvbnRoZXdpZmkuY29tIiwicGdhZmFuLm5ldCIs''@;'; put 'put ''InBvaW50MnRoaXMuY29tIiwicG9pbnR0by51cyIsInByaXZhdGl6ZWhlYWx0aGluc3VyYW5jZS5uZXQiLCJxdWlja3N5dGVzLmNvbSIsInJlYWQtYm9va3Mub3JnIiwic2VjdXJpdHl0YWN0aWNzLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVodW1vdXIuY29tIiwic2VydmVwMnAu''@;'; put 'put ''Y29tIiwic2VydmVzYXJjYXNtLmNvbSIsInN0dWZmdG9yZWFkLmNvbSIsInVmY2Zhbi5vcmciLCJ1bnVzdWFscGVyc29uLmNvbSIsIndvcmtpc2JvcmluZy5jb20iLCIzdXRpbGl0aWVzLmNvbSIsImJvdW5jZW1lLm5ldCIsImRkbnMubmV0IiwiZGRuc2tpbmcuY29tIiwiZ290ZG5zLmNoIiwi''@;'; put 'put ''aG9wdG8ub3JnIiwibXlmdHAuYml6IiwibXlmdHAub3JnIiwibXl2bmMuY29tIiwibm8taXAuYml6Iiwibm8taXAuaW5mbyIsIm5vLWlwLm9yZyIsIm5vaXAubWUiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmVlci5jb20iLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVjb3VudGVyc3RyaWtlLmNv''@;'; put 'put ''bSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzeXRlcy5uZXQi''@;'; put 'put ''LCJ3ZWJob3AubWUiLCJ6YXB0by5vcmciLCJzdGFnZS5ub2RlYXJ0LmlvIiwicGNsb3VkLmhvc3QiLCJueWMubW4iLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsImN5YS5nZyIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwic2VydmljZS5v''@;'; put 'put ''bmUiLCJuaWQuaW8iLCJvcGVuc29jaWFsLnNpdGUiLCJvcGVuY3JhZnQuaG9zdGluZyIsIm9yc2l0ZXMuY29tIiwib3BlcmF1bml0ZS5jb20iLCJ0ZWNoLm9yYW5nZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdlYXJhcHBzLmNvbSIsInNreWdlYXJhcHAuY29tIiwib3V0c3lzdGVt''@;'; put 'put ''c2Nsb3VkLmNvbSIsIioud2VicGFhcy5vdmgubmV0IiwiKi5ob3N0aW5nLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJvd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdlZnJvbnRhcHAuY29tIiwicGFnZXhsLmNvbSIsIioucGF5d2hpcmwu''@;'; put 'put ''Y29tIiwiYmFyMC5uZXQiLCJiYXIxLm5ldCIsImJhcjIubmV0IiwicmR2LnRvIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImtyYWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5wbCIsInBhbnRoZW9uc2l0ZS5pbyIsImdvdHBhbnRoZW9uLmNvbSIsIm15cGVwLmxpbmsi''@;'; put 'put ''LCJwZXJzcGVjdGEuY2xvdWQiLCJsazMucnUiLCJvbi13ZWIuZnIiLCJiYy5wbGF0Zm9ybS5zaCIsImVudC5wbGF0Zm9ybS5zaCIsImV1LnBsYXRmb3JtLnNoIiwidXMucGxhdGZvcm0uc2giLCIqLnBsYXRmb3Jtc2guc2l0ZSIsIioudHN0LnNpdGUiLCJwbGF0dGVyLWFwcC5jb20iLCJwbGF0''@;'; put 'put ''dGVyLWFwcC5kZXYiLCJwbGF0dGVycC51cyIsInBkbnMucGFnZSIsInBsZXNrLnBhZ2UiLCJwbGVza25zLmNvbSIsImR5bjUzLmlvIiwib25wb3J0ZXIucnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVx''@;'; put 'put ''dWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInBydmN5LnBhZ2UiLCIqLmR3ZWIubGluayIsInByb3RvbmV0LmlvIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLWVuLWZyYW5jZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20i''@;'; put 'put ''LCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9hcHAuY29tIiwicWJ1c2VyLmNvbSIsImNsb3Vkc2l0ZS5idWlsZGVycyIsImluc3RhbmNlcy5zcGF3bi5jYyIsImluc3RhbnRjbG91ZC5jbiIsInJhcy5ydSIsInFhMi5jb20iLCJxY3guaW8iLCIqLnN5cy5xY3gu''@;'; put 'put ''aW8iLCJkZXYtbXlxbmFwY2xvdWQuY29tIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwibXlxbmFwY2xvdWQuY29tIiwiKi5xdWlwZWxlbWVudHMuY29tIiwidmFwb3IuY2xvdWQiLCJ2YXBvcmNsb3VkLmlvIiwicmFja21hemUuY29tIiwicmFja21hemUubmV0IiwiZy52YnJwbHNieC5pbyIs''@;'; put 'put ''Iioub24tazNzLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1yaW8uaW8iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xvdWQuY29tIiwiYXBwLnJlbmRlci5jb20iLCJvbnJlbmRlci5jb20iLCJyZXBsLmNvIiwiaWQucmVwbC5jbyIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJk''@;'; put 'put ''ZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsIndlbGxiZWluZ3pvbmUuZXUiLCJ3ZWxsYmVpbmd6b25lLmNvLnVrIiwiYWRpbW8uY28udWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJcdTA0MzFcdTA0MzhcdTA0MzcuXHUwNDQw''@;'; put 'put ''XHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDNlXHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQ0MFx1MDQ0Ylx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0MzhcdTA0NDAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDQxXHUwNDNhLlx1MDQ0''@;'; put 'put ''MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0MzBcdTA0M2NcdTA0MzBcdTA0NDBcdTA0MzAuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNlXHUwNDQ3XHUwNDM4Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0''@;'; put 'put ''MVx1MDQzZlx1MDQzMS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NGYuXHUwNDQwXHUwNDQzXHUwNDQxIiwiKi5idWlsZGVyLmNvZGUuY29tIiwiKi5kZXYtYnVpbGRlci5jb2RlLmNvbSIsIiouc3RnLWJ1aWxkZXIuY29kZS5jb20iLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5kZSIsImxvZ29p''@;'; put 'put ''cC5jb20iLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1w''@;'; put 'put ''YXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5mci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5j''@;'; put 'put ''bG91ZCIsIms4cy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVzLms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cu''@;'; put 'put ''Y2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQi''@;'; put 'put ''LCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292LnNjb3QiLCJzY3J5c2VjLmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQi''@;'; put 'put ''LCJteS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJzZW5zZWVyaW5nLm5ldCIsIm1pbmlzaXRlLm1zIiwibWFnbmV0LnBhZ2UiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwic2hpZnRjcnlwdG8uZGV2Iiwi''@;'; put 'put ''c2hpZnRjcnlwdG8uaW8iLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwibXlzaG9waWZ5LmNvbSIsInNob3BpdHNpdGUuY29tIiwic2hvcHdhcmUuc3RvcmUiLCJtby1zaWVtZW5zLmlvIiwiMWthcHAuY29tIiwiYXBwY2hpemkuY29tIiwiYXBwbGluemkuY29tIiwic2luYWFw''@;'; put 'put ''cC5jb20iLCJ2aXBzaW5hYXBwLmNvbSIsInNpdGVsZWFmLm5ldCIsImJvdW50eS1mdWxsLmNvbSIsImFscGhhLmJvdW50eS1mdWxsLmNvbSIsImJldGEuYm91bnR5LWZ1bGwuY29tIiwic21hbGwtd2ViLm9yZyIsInZwNC5tZSIsInRyeS1zbm93cGxvdy5jb20iLCJzcmh0LnNpdGUiLCJzdGFj''@;'; put 'put ''a2hlcm8tbmV0d29yay5jb20iLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJzdGF0aWMubGFuZCIsImRldi5zdGF0aWMubGFuZCIsInNpdGVzLnN0YXRpYy5sYW5kIiwic3RvcmViYXNlLnN0b3JlIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5q''@;'; put 'put ''cy5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0IiwicGxheXN0YXRpb24tY2xvdWQuY29tIiwiYXBwcy5sYWlyLmlvIiwiKi5zdG9sb3MuaW8iLCJzcGFjZWtpdC5pbyIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIs''@;'; put 'put ''Im15c3ByZWFkc2hvcC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZp''@;'; put 'put ''IiwibXlzcHJlYWRzaG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51''@;'; put 'put ''ayIsImFwaS5zdGRsaWIuY29tIiwic3RvcmouZmFybSIsInV0d2VudGUuaW8iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2YubmV0IiwidGVtcC1kbnMuY29tIiwic3VwYWJhc2UuY28iLCJzdXBhYmFzZS5pbiIsInN1cGFiYXNlLm5ldCIsInN1LnBhYmEuc2UiLCIqLnM1eS5pbyIsIiouc2Vu''@;'; put 'put ''c2lvc2l0ZS5jbG91ZCIsInN5bmNsb3VkLml0IiwiZHNjbG91ZC5iaXoiLCJkaXJlY3QucXVpY2tjb25uZWN0LmNuIiwiZHNteW5hcy5jb20iLCJmYW1pbHlkcy5jb20iLCJkaXNrc3RhdGlvbi5tZSIsImRzY2xvdWQubWUiLCJpMjM0Lm1lIiwibXlkcy5tZSIsInN5bm9sb2d5Lm1lIiwiZHNj''@;'; put 'put ''bG91ZC5tb2JpIiwiZHNteW5hcy5uZXQiLCJmYW1pbHlkcy5uZXQiLCJkc215bmFzLm9yZyIsImZhbWlseWRzLm9yZyIsInZwbnBsdXMudG8iLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidGFiaXRvcmRlci5jby5pbCIsInRhaWZ1bi1kbnMuZGUiLCJiZXRhLnRhaWxzY2FsZS5uZXQiLCJ0''@;'; put 'put ''cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCJnd2lkZGxlLmNv''@;'; put 'put ''LnVrIiwiKi5maXJlbmV0LmNoIiwiKi5zdmMuZmlyZW5ldC5jaCIsInJlc2VydmQuY29tIiwidGhpbmdkdXN0ZGF0YS5jb20iLCJjdXN0LmRldi50aGluZ2R1c3QuaW8iLCJjdXN0LmRpc3JlYy50aGluZ2R1c3QuaW8iLCJjdXN0LnByb2QudGhpbmdkdXN0LmlvIiwiY3VzdC50ZXN0aW5nLnRo''@;'; put 'put ''aW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQudGVzdGluZy50aGluZ2R1c3QuaW8iLCJ0aWNrZXRzLmlvIiwiYXJ2by5uZXR3b3JrIiwiYXppbXV0aC5uZXR3b3JrIiwidGxvbi5uZXR3b3JrIiwidG9y''@;'; put 'put ''cHJvamVjdC5uZXQiLCJwYWdlcy50b3Jwcm9qZWN0Lm5ldCIsImJsb3hjbXMuY29tIiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCJ0Yml0cy5tZSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIyaXguY2giLCI0bGltYS5jaCIsImxpbWEt''@;'; put 'put ''Y2l0eS5jaCIsInRyYWZmaWNwbGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxpbWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJvY2tzIiwibGltYS56b25lIiwiKi50cmFu''@;'; put 'put ''c3VybC5iZSIsIioudHJhbnN1cmwuZXUiLCIqLnRyYW5zdXJsLm5sIiwic2l0ZS50cmFuc2lwLm1lIiwidHV4ZmFtaWx5Lm9yZyIsImRkLWRucy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwiZHJheS1kbnMuZGUiLCJkcmF5ZG5zLmRlIiwiZHluLXZwbi5kZSIsImR5''@;'; put 'put ''bnZwbi5kZSIsIm1laW4tdmlnb3IuZGUiLCJteS12aWdvci5kZSIsIm15LXdhbi5kZSIsInN5bm8tZHMuZGUiLCJzeW5vbG9neS1kaXNrc3RhdGlvbi5kZSIsInN5bm9sb2d5LWRzLmRlIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20iLCJ1YmVyLnNwYWNlIiwiKi51YmVyc3Bh''@;'; put 'put ''Y2UuZGUiLCJoay5jb20iLCJoay5vcmciLCJsdGQuaGsiLCJpbmMuaGsiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwidmlydHVhbHVzZXIuZGUiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ1cGxpLmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIs''@;'; put 'put ''ImxpYi5kZS51cyIsIjIwMzguaW8iLCJ2ZXJjZWwuYXBwIiwidmVyY2VsLmRldiIsIm5vdy5zaCIsInJvdXRlci5tYW5hZ2VtZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCJuZWtvLmFtIiwibnlhYS5hbSIsImJlLmF4IiwiY2F0LmF4IiwiZXMuYXgiLCJldS5heCIsImdn''@;'; put 'put ''LmF4IiwibWMuYXgiLCJ1cy5heCIsInh5LmF4IiwibmwuY2kiLCJ4eC5nbCIsImFwcC5ncCIsImJsb2cuZ3QiLCJkZS5ndCIsInRvLmd0IiwiYmUuZ3kiLCJjYy5obiIsImJsb2cua2ciLCJpby5rZyIsImpwLmtnIiwidHYua2ciLCJ1ay5rZyIsInVzLmtnIiwiZGUubHMiLCJhdC5tZCIsImRl''@;'; put 'put ''Lm1kIiwianAubWQiLCJ0by5tZCIsImluZGllLnBvcm4iLCJ2eGwuc2giLCJjaC50YyIsIm1lLnRjIiwid2UudGMiLCJueWFuLnRvIiwiYXQudmciLCJibG9nLnZ1IiwiZGV2LnZ1IiwibWUudnUiLCJ2LnVhIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5jb20iLCIqLndlYmhh''@;'; put 'put ''cmUuZGV2IiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwiYm9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwid2VkZXBsb3kuaW8iLCJ3ZWRlcGxveS5tZSIsIndlZGVwbG95LnNoIiwicmVtb3Rld2QuY29tIiwicGFnZXMud2lhcmR3ZWIuY29t''@;'; put 'put ''Iiwid21mbGFicy5vcmciLCJ0b29sZm9yZ2Uub3JnIiwid21jbG91ZC5vcmciLCJwYW5lbC5nZyIsImRhZW1vbi5wYW5lbC5nZyIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2Jl''@;'; put 'put ''cmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5ldCIsIm1laW5mb3J1bS5uZXQiLCJhZmZpbml0eWxvdHRlcnkub3JnLnVrIiwicmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsIndp''@;'; put 'put ''eHNpdGUuY29tIiwiZWRpdG9yeC5pbyIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhuYmF5LmNvbSIsInUyLWxvY2FsLnhuYmF5LmNvbSIsImNpc3Ryb24ubmwiLCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0''@;'; put 'put ''Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNpdGUuY29tIiwieWJvLmZhaXRoIiwieW9tYm8ubWUiLCJob21lbGluay5vbmUiLCJ5Ym8ucGFydHkiLCJ5Ym8ucmV2aWV3IiwieWJvLnNjaWVuY2UiLCJ5Ym8udHJhZGUiLCJ5bmguZnIiLCJub2hv''@;'; put 'put ''c3QubWUiLCJub2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiYnNzLmRlc2lnbiIsImJhc2ljc2VydmVyLmlvIiwidmlydHVhbHNlcnZlci5pbyIsImVudGVycHJpc2VjbG91ZC5udSJdJyl9fSxtPXt9O2Z1bmN0aW9uIGxlKE0pe3ZhciBPPW1bTV07aWYodm9pZCAwIT09TylyZXR1cm4gTy5l''@;'; put 'put ''eHBvcnRzO3ZhciBSPW1bTV09e2lkOk0sbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiB4W01dLmNhbGwoUi5leHBvcnRzLFIsUi5leHBvcnRzLGxlKSxSLmxvYWRlZD0hMCxSLmV4cG9ydHN9cmV0dXJuIGxlLmQ9KE0sTyk9Pntmb3IodmFyIFIgaW4gTylsZS5vKE8sUikmJiFsZS5vKE0s''@;'; put 'put ''UikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLFIse2VudW1lcmFibGU6ITAsZ2V0Ok9bUl19KX0sbGUuZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMi''@;'; put 'put ''KSgpfWNhdGNoe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLGxlLm89KE0sTyk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChNLE8pLGxlLnI9TT0+e3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShNLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGxlLm5tZD1NPT4oTS5wYXRocz1bXSxNLmNoaWxkcmVufHwoTS5jaGlsZHJlbj1bXSksTSksbGUoMzYwNyl9''@;'; put 'put ''KSgpfSwxMjA3MDpmdW5jdGlvbihhdCxJZSxGKXsidXNlIHN0cmljdCI7dmFyIGFlPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihSKXtyZXR1cm4gUiYmUi5fX2VzTW9kdWxlP1I6e2RlZmF1bHQ6Un19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShJZSwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksSWUuaXNTcGVjaWFsTWlzc2luZz1JZS5jaG9pY2VWYWxpZGF0b3I9SWUuY29uZmlybWF0aW9uVmFsaWRhdG9yPUllLnVybFZhbGlkYXRvcj12b2lkIDA7dmFyIHg9YWUoRig3ODUzMikpO0llLnVybFZhbGlkYXRvcj1mdW5jdGlvbihSLHope3JldHVybiEheC5kZWZhdWx0''@;'; put 'put ''LmlzSHR0cFVyaShSKXx8ISF4LmRlZmF1bHQuaXNIdHRwc1VyaShSKXx8IiI9PT1SfHx6fSxJZS5jb25maXJtYXRpb25WYWxpZGF0b3I9ZnVuY3Rpb24oUil7cmV0dXJuITA9PT1SfHwhMT09PVJ9LEllLmNob2ljZVZhbGlkYXRvcj1mdW5jdGlvbihSLHosSyl7cmV0dXJuIFI+MCYmUjw9enx8''@;'; put 'put ''S30sSWUuaXNTcGVjaWFsTWlzc2luZz1mdW5jdGlvbihSKXtyZXR1cm4oInN0cmluZyIhPXR5cGVvZiBSfHwhUi5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KFIpfX0sNzY3NzE6KGF0LEllKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeDtJ''@;'; put 'put ''ZS5EPXZvaWQgMCwoeD1JZS5EfHwoSWUuRD17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLHguU2FzOT0iU0FTOSIseC5TYXNqcz0iU0FTSlMifSw1MTcxNDooYXQsSWUpPT57InVzZSBzdHJpY3QiO0llLlI9dm9pZCAwLEllLlI9ZnVuY3Rpb24oeCxtLGxlKXtpZih2b2lkIDA9PT1tJiYobT0xKSx2''@;'; put 'put ''b2lkIDA9PT1sZSYmKGxlPTEwOTk1MTE2Mjc3NzYpLDA9PT14KXJldHVybiIwIEIiO3g9eD5sZT9sZTp4O3ZhciBSPW08MD8wOm0sej1NYXRoLmZsb29yKE1hdGgubG9nKHgpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oeC9NYXRoLnBvdygxMDI0LHopKS50b0ZpeGVkKFIpKyIgIitbIkIiLCJL''@;'; put 'put ''QiIsIk1CIiwiR0IiLCJUQiJdW3pdfX0sODA3ODg6ZnVuY3Rpb24oYXQpe3ZhciBJZT17dmVyc2lvbjoiMS4xNS4wIn07SWVbNDM3XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEz''@;'; put 'put ''XHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUy''@;'; put 'put ''XHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhi''@;'; put 'put ''ZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1''@;'; put 'put ''NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUw''@;'; put 'put ''M2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxt''@;'; put 'put ''PTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRc''@;'; put 'put ''blx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJz''@;'; put 'put ''dHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUwMTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTky''@;'; put 'put ''XHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAxN2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUy''@;'; put 'put ''NTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4''@;'; put 'put ''XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhm''@;'; put 'put ''N1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs3''@;'; put 'put ''MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3''@;'; put 'put ''ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5''@;'; put 'put ''Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1''@;'; put 'put ''MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUz''@;'; put 'put ''Y1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1''@;'; put 'put ''MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUy''@;'; put 'put ''NWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg1MF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAz''@;'; put 'put ''XHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1e''@;'; put 'put ''X2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5''@;'; put 'put ''Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1''@;'; put 'put ''MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhk''@;'; put 'put ''Mlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0''@;'; put 'put ''KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgx''@;'; put 'put ''NFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhl''@;'; put 'put ''NFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0''@;'; put 'put ''XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRc''@;'; put 'put ''dTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZl''@;'; put 'put ''XHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVh''@;'; put 'put ''MFx4YTAiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4''@;'; put 'put ''MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9g''@;'; put 'put ''YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVc''@;'; put 'put ''dTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1''@;'; put 'put ''MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhk''@;'; put 'put ''Zlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYu''@;'; put 'put ''Y2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzg2MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFc''@;'; put 'put ''eDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNc''@;'; put 'put ''eGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEw''@;'; put 'put ''XHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUy''@;'; put 'put ''NTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1''@;'; put 'put ''MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGFlPVtd''@;'; put 'put ''LHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4''@;'; put 'put ''MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamts''@;'; put 'put ''bW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhm''@;'; put 'put ''M1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1''@;'; put 'put ''MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4''@;'; put 'put ''Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1''@;'; put 'put ''MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''Rj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1O''@;'; put 'put ''T1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0''@;'; put 'put ''MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2Rc''@;'; put 'put ''dTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1''@;'; put 'put ''NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRc''@;'; put 'put ''dTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixhZT1bXSx4PXt9''@;'; put 'put ''LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODc0XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc''@;'; put 'put ''dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx''@;'; put 'put ''cnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUw''@;'; put 'put ''ZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJm''@;'; put 'put ''XHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUw''@;'; put 'put ''ZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFy''@;'; put 'put ''Q29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbODk1XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJc''@;'; put 'put ''eDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhl''@;'; put 'put ''OVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZh''@;'; put 'put ''XHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRc''@;'; put 'put ''dTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1''@;'; put 'put ''ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIx''@;'; put 'put ''OVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzkzMl09ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgbSxGPVtdLGFlPXt9LHg9W107Zm9yKHhbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEy''@;'; put 'put ''MzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjY0XHVmZjY1XHVmZjY2XHVmZjY3XHVmZjY4XHVm''@;'; put 'put ''ZjY5XHVmZjZhXHVmZjZiXHVmZjZjXHVmZjZkXHVmZjZlXHVmZjZmXHVmZjcwXHVmZjcxXHVmZjcyXHVmZjczXHVmZjc0XHVmZjc1XHVmZjc2XHVmZjc3XHVmZjc4XHVmZjc5XHVmZjdhXHVmZjdiXHVmZjdjXHVmZjdkXHVmZjdlXHVmZjdmXHVmZjgwXHVmZjgxXHVmZjgyXHVmZjgzXHVmZjg0''@;'; put 'put ''XHVmZjg1XHVmZjg2XHVmZjg3XHVmZjg4XHVmZjg5XHVmZjhhXHVmZjhiXHVmZjhjXHVmZjhkXHVmZjhlXHVmZjhmXHVmZjkwXHVmZjkxXHVmZjkyXHVmZjkzXHVmZjk0XHVmZjk1XHVmZjk2XHVmZjk3XHVmZjk4XHVmZjk5XHVmZjlhXHVmZjliXHVmZjljXHVmZjlkXHVmZjllXHVmZjlmXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRc''@;'; put 'put ''dTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMw''@;'; put 'put ''MGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVm''@;'; put 'put ''ZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1''@;'; put 'put ''MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1''@;'; put 'put ''MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTI5XVttXV09MzMwMjQrbSxGWzMzMDI0K21dPXhbMTI5XVttXSk7Zm9yKHhbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4''@;'; put 'put ''XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVm''@;'; put 'put ''ZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRl''@;'; put 'put ''XHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUz''@;'; put 'put ''MDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3''@;'; put 'put ''XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUz''@;'; put 'put ''MDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMF1bbV1dPTMzMjgwK20sRlszMzI4MCttXT14WzEzMF1bbV0pO2Zvcih4WzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBi''@;'; put 'put ''Nlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1''@;'; put 'put ''MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1ZmZmZFx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBl''@;'; put 'put ''Y1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1''@;'; put 'put ''MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNi''@;'; put 'put ''NVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzFdW21dXT0zMzUzNittLEZbMzM1MzYrbV09eFsxMzFdW21dKTtmb3IoeFsxMzJdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0''@;'; put 'put ''MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0''@;'; put 'put ''NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNc''@;'; put 'put ''dTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMyXVttXV09MzM3OTIrbSxGWzMzNzkyK21dPXhbMTMyXVttXSk7Zm9yKHhb''@;'; put 'put ''MTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUy''@;'; put 'put ''NDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJi''@;'; put 'put ''XHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUz''@;'; put 'put ''MmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNV1bbV1dPTM0NTYwK20sRlszNDU2MCttXT14WzEz''@;'; put 'put ''NV1bbV0pO2Zvcih4WzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU5Y1x1NTUxNlx1NWEw''@;'; put 'put ''M1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1''@;'; put 'put ''NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0''@;'; put 'put ''Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1''@;'; put 'put ''NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzZdW21dXT0zNDgxNittLEZb''@;'; put 'put ''MzQ4MTYrbV09eFsxMzZdW21dKTtmb3IoeFsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNc''@;'; put 'put ''dTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4''@;'; put 'put ''MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRc''@;'; put 'put ''dTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYy''@;'; put 'put ''YmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJc''@;'; put 'put ''dTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgz''@;'; put 'put ''MDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVc''@;'; put 'put ''dTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM3XVtt''@;'; put 'put ''XV09MzUwNzIrbSxGWzM1MDcyK21dPXhbMTM3XVttXSk7Zm9yKHhbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThi''@;'; put 'put ''XHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1''@;'; put 'put ''ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2''@;'; put 'put ''XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4''@;'; put 'put ''MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYy''@;'; put 'put ''XHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5''@;'; put 'put ''NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3''@;'; put 'put ''XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzhdW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzEzOF1bbV1dPTM1MzI4K20sRlszNTMyOCttXT14WzEzOF1bbV0pO2Zvcih4WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2Ew''@;'; put 'put ''MFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1''@;'; put 'put ''NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1ZmZm''@;'; put 'put ''ZFx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1''@;'; put 'put ''OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJj''@;'; put 'put ''Mlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1''@;'; put 'put ''NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTlj''@;'; put 'put ''OFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM5XVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsxMzldW21dXT0zNTU4NCttLEZbMzU1ODQrbV09eFsxMzldW21dKTtmb3IoeFsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcx''@;'; put 'put ''OGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRc''@;'; put 'put ''dTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThm''@;'; put 'put ''Y2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVc''@;'; put 'put ''dTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUz''@;'; put 'put ''OWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBc''@;'; put 'put ''dTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThh''@;'; put 'put ''YTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDBdLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQwXVttXV09MzU4NDArbSxGWzM1ODQwK21dPXhbMTQwXVttXSk7Zm9yKHhbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1''@;'; put 'put ''OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5''@;'; put 'put ''XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3''@;'; put 'put ''ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0''@;'; put 'put ''XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0''@;'; put 'put ''ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNk''@;'; put 'put ''XHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1''@;'; put 'put ''N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQxXS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsxNDFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MV1bbV1dPTM2MDk2K20sRlszNjA5NittXT14WzE0MV1bbV0pO2Zvcih4WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJkZlx1NjJmNlx1''@;'; put 'put ''NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4''@;'; put 'put ''M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1''@;'; put 'put ''NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1ZmZmZFx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThm''@;'; put 'put ''Y1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1''@;'; put 'put ''OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMw''@;'; put 'put ''NFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1''@;'; put 'put ''NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDJdW21dXT0zNjM1MittLEZbMzYzNTIrbV09eFsxNDJdW21dKTtmb3IoeFsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUx''@;'; put 'put ''NDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNc''@;'; put 'put ''dTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1''@;'; put 'put ''YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFc''@;'; put 'put ''dTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4''@;'; put 'put ''NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhc''@;'; put 'put ''dTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsxNDNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQzXVttXV09MzY2MDgrbSxGWzM2NjA4K21dPXhbMTQzXVttXSk7Zm9yKHhbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2''@;'; put 'put ''OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRl''@;'; put 'put ''XHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3''@;'; put 'put ''NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3''@;'; put 'put ''XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5''@;'; put 'put ''NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2''@;'; put 'put ''XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NF1bbV1dPTM2ODY0K20sRlszNjg2NCttXT14WzE0NF1bbV0pO2Zvcih4WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1''@;'; put 'put ''N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVh''@;'; put 'put ''YVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1ZmZmZFx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1''@;'; put 'put ''N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1''@;'; put 'put ''Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1''@;'; put 'put ''NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4''@;'; put 'put ''YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1''@;'; put 'put ''NTNlYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDVdW21dXT0zNzEyMCttLEZbMzcxMjArbV09eFsxNDVdW21dKTtmb3IoeFsxNDZdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJc''@;'; put 'put ''dTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYw''@;'; put 'put ''NjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2Nc''@;'; put 'put ''dTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYz''@;'; put 'put ''MTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNc''@;'; put 'put ''dTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkx''@;'; put 'put ''ZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJc''@;'; put 'put ''dThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ2XVttXV09MzczNzYrbSxGWzM3Mzc2K21dPXhbMTQ2XVttXSk7Zm9yKHhbMTQ3XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVk''@;'; put 'put ''XHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2''@;'; put 'put ''ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJj''@;'; put 'put ''XHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4''@;'; put 'put ''ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDlj''@;'; put 'put ''XHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2''@;'; put 'put ''NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5''@;'; put 'put ''XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0N11bbV1dPTM3NjMyK20sRlszNzYzMittXT14WzE0N11bbV0pO2Zv''@;'; put 'put ''cih4WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3''@;'; put 'put ''Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1''@;'; put 'put ''N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1ZmZmZFx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAx''@;'; put 'put ''OVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1''@;'; put 'put ''ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNk''@;'; put 'put ''Ylx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1''@;'; put 'put ''NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5''@;'; put 'put ''OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDhdW21dXT0zNzg4OCttLEZbMzc4ODgrbV09''@;'; put 'put ''eFsxNDhdW21dKTtmb3IoeFsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkw''@;'; put 'put ''M2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFc''@;'; put 'put ''dTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgx''@;'; put 'put ''NTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlc''@;'; put 'put ''dTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVl''@;'; put 'put ''NjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlc''@;'; put 'put ''dTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTVi''@;'; put 'put ''OWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ5XVttXV09MzgxNDQr''@;'; put 'put ''bSxGWzM4MTQ0K21dPXhbMTQ5XVttXSk7Zm9yKHhbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4''@;'; put 'put ''YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5Mjdl''@;'; put 'put ''XHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5''@;'; put 'put ''ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgw''@;'; put 'put ''XHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1''@;'; put 'put ''YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3''@;'; put 'put ''XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3''@;'; put 'put ''ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1''@;'; put 'put ''MF1bbV1dPTM4NDAwK20sRlszODQwMCttXT14WzE1MF1bbV0pO2Zvcih4WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1''@;'; put 'put ''NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJi''@;'; put 'put ''OVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1ZmZmZFx1NmM4M1x1''@;'; put 'put ''NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1Njhh''@;'; put 'put ''OFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1''@;'; put 'put ''ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFk''@;'; put 'put ''MFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1''@;'; put 'put ''NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUxXVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsxNTFdW21dXT0zODY1NittLEZbMzg2NTYrbV09eFsxNTFdW21dKTtmb3IoeFsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJc''@;'; put 'put ''dThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZi''@;'; put 'put ''NmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBc''@;'; put 'put ''dTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRm''@;'; put 'put ''NmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFc''@;'; put 'put ''dTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1Ml1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUyXVttXV09Mzg5MTIrbSxGWzM4OTEyK21dPXhbMTUyXVttXSk7Zm9yKHhbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRl''@;'; put 'put ''XHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1''@;'; put 'put ''MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1''@;'; put 'put ''XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1''@;'; put 'put ''MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBk''@;'; put 'put ''XHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1''@;'; put 'put ''M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVm''@;'; put 'put ''XHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUzXS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1M11bbV1dPTM5MTY4K20sRlszOTE2OCttXT14WzE1M11bbV0pO2Zvcih4WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTRjMlx1NTRhNFx1NTRi''@;'; put 'put ''ZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1''@;'; put 'put ''NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFk''@;'; put 'put ''Zlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1ZmZmZFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1''@;'; put 'put ''NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2''@;'; put 'put ''MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1''@;'; put 'put ''NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkw''@;'; put 'put ''YVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NF0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTRdW21dXT0zOTQyNCttLEZbMzk0MjQrbV09eFsxNTRdW21dKTtmb3IoeFsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5''@;'; put 'put ''ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVc''@;'; put 'put ''dTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTVi''@;'; put 'put ''NzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhc''@;'; put 'put ''dTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVj''@;'; put 'put ''YjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNc''@;'; put 'put ''dTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVl''@;'; put 'put ''MzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU1XVttXV09Mzk2ODArbSxGWzM5NjgwK21dPXhbMTU1XVttXSk7Zm9yKHhbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQx''@;'; put 'put ''XHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1''@;'; put 'put ''ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2''@;'; put 'put ''XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2''@;'; put 'put ''MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQy''@;'; put 'put ''XHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2''@;'; put 'put ''MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMTU2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Nl1bbV1dPTM5OTM2K20sRlszOTkzNittXT14WzE1Nl1bbV0pO2Zvcih4WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJk''@;'; put 'put ''N1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1''@;'; put 'put ''NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1ZmZmZFx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQz''@;'; put 'put ''Nlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1''@;'; put 'put ''NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1''@;'; put 'put ''ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1''@;'; put 'put ''NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiY1x1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTddW21dXT00MDE5MittLEZbNDAxOTIrbV09eFsxNTddW21dKTtmb3IoeFsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3''@;'; put 'put ''MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJc''@;'; put 'put ''dTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZh''@;'; put 'put ''YWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4Zjlc''@;'; put 'put ''dTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5''@;'; put 'put ''YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdc''@;'; put 'put ''dTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZh''@;'; put 'put ''YTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU4XVttXV09NDA0NDgrbSxGWzQwNDQ4K21dPXhbMTU4XVttXSk7Zm9yKHhbMTU5XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5''@;'; put 'put ''YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFh''@;'; put 'put ''XHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2''@;'; put 'put ''YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2''@;'; put 'put ''XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2''@;'; put 'put ''ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0''@;'; put 'put ''XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2''@;'; put 'put ''ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1OV1bbV1dPTQwNzA0K20sRls0MDcwNCttXT14WzE1OV1bbV0pO2Zvcih4WzIyNF09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1''@;'; put 'put ''NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAx''@;'; put 'put ''OFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1ZmZmZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1''@;'; put 'put ''NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIy''@;'; put 'put ''OFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1''@;'; put 'put ''NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNj''@;'; put 'put ''OFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1''@;'; put 'put ''NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21d''@;'; put 'put ''KTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRc''@;'; put 'put ''dTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1''@;'; put 'put ''OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJc''@;'; put 'put ''dTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2''@;'; put 'put ''N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdc''@;'; put 'put ''dTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3''@;'; put 'put ''YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFc''@;'; put 'put ''dTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAw''@;'; put 'put ''K21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVm''@;'; put 'put ''XHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3''@;'; put 'put ''YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgz''@;'; put 'put ''XHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3''@;'; put 'put ''YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNm''@;'; put 'put ''XHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3''@;'; put 'put ''YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4''@;'; put 'put ''XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3''@;'; put 'put ''ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3''@;'; put 'put ''M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1''@;'; put 'put ''N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1ZmZmZFx1N2UzMlx1N2UzYVx1N2U2''@;'; put 'put ''N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1''@;'; put 'put ''N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2Zh''@;'; put 'put ''Zlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1''@;'; put 'put ''ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBk''@;'; put 'put ''OVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgx''@;'; put 'put ''NjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhc''@;'; put 'put ''dTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgy''@;'; put 'put ''NjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZc''@;'; put 'put ''dTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgz''@;'; put 'put ''YjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFc''@;'; put 'put ''dTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0''@;'; put 'put ''YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4''@;'; put 'put ''NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2''@;'; put 'put ''XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4''@;'; put 'put ''NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRl''@;'; put 'put ''XHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4''@;'; put 'put ''ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1''@;'; put 'put ''XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4''@;'; put 'put ''OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy''@;'; put 'put ''MjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1''@;'; put 'put ''ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEw''@;'; put 'put ''Y1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1''@;'; put 'put ''OGFlYlx1OGFmM1x1OGFlN1x1ZmZmZFx1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0''@;'; put 'put ''Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1''@;'; put 'put ''OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNm''@;'; put 'put ''ZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1''@;'; put 'put ''OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNc''@;'; put 'put ''dThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThl''@;'; put 'put ''YmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNc''@;'; put 'put ''dThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkw''@;'; put 'put ''MjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFc''@;'; put 'put ''dTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkx''@;'; put 'put ''ODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdc''@;'; put 'put ''dTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy''@;'; put 'put ''MzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5''@;'; put 'put ''XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5''@;'; put 'put ''NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdm''@;'; put 'put ''XHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5''@;'; put 'put ''NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2''@;'; put 'put ''XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5''@;'; put 'put ''NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2Mz''@;'; put 'put ''XHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1''@;'; put 'put ''OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEw''@;'; put 'put ''Zlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1ZmZmZFx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1''@;'; put 'put ''OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIy''@;'; put 'put ''Zlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1''@;'; put 'put ''OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1''@;'; put 'put ''YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJc''@;'; put 'put ''dTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTll''@;'; put 'put ''Y2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFc''@;'; put 'put ''dTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0Zjlh''@;'; put 'put ''XHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1''@;'; put 'put ''M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJm''@;'; put 'put ''XHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2''@;'; put 'put ''MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBl''@;'; put 'put ''XHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2''@;'; put 'put ''ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMx''@;'; put 'put ''XHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzN11bbV1dPTYwNjcyK20sRls2MDY3MittXT14WzIzN11bbV0pO2Zvcih4WzIzOF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2''@;'; put 'put ''Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1''@;'; put 'put ''N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ZmZmZFx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFh''@;'; put 'put ''N1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1''@;'; put 'put ''OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMx''@;'; put 'put ''ZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1''@;'; put 'put ''ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3''@;'; put 'put ''OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzhdW21dXT02MDkyOCttLEZbNjA5MjgrbV09eFsyMzhdW21dKTtmb3IoeFsy''@;'; put 'put ''NTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIx''@;'; put 'put ''NjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNc''@;'; put 'put ''dTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUy''@;'; put 'put ''ZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNc''@;'; put 'put ''dTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYw''@;'; put 'put ''ZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlc''@;'; put 'put ''dTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZj''@;'; put 'put ''NWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1b''@;'; put 'put ''bV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAw''@;'; put 'put ''N1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1''@;'; put 'put ''NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmEx''@;'; put 'put ''Y1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1''@;'; put 'put ''ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFl''@;'; put 'put ''ZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1''@;'; put 'put ''OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1''@;'; put 'put ''N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQy''@;'; put 'put ''NTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09''@;'; put 'put ''NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7cmV0dXJue2VuYzphZSxkZWM6Rn19KCksSWVbOTM2XT1mdW5jdGlvbigpe3ZhciBtLEY9W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4''@;'; put 'put ''MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFswXS5sZW5ndGg7KyttKTY1NTMzIT09eFswXVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFswXVttXV09MCttLEZbMCttXT14WzBdW21dKTtmb3IoeFsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNc''@;'; put 'put ''dTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRl''@;'; put 'put ''NmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRlN2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZc''@;'; put 'put ''dTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRl''@;'; put 'put ''ZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVc''@;'; put 'put ''dTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRm''@;'; put 'put ''NGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFc''@;'; put 'put ''dTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEyOV1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTI5XVttXV09MzMwMjQrbSxGWzMzMDI0K21dPXhbMTI5XVttXSk7Zm9yKHhbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwXHU0ZmIxXHU0ZmIyXHU0ZmIzXHU0ZmI0XHU0ZmI2''@;'; put 'put ''XHU0ZmI3XHU0ZmI4XHU0ZmI5XHU0ZmJhXHU0ZmJiXHU0ZmJjXHU0ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyXHU0ZmQzXHU0ZmQ0XHU0ZmQ1XHU0ZmQ2XHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0''@;'; put 'put ''ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDAyXHU1MDAzXHU1MDA0XHU1MDA1XHU1MDA2XHU1MDA3XHU1MDA4XHU1MDA5XHU1MDBhXHVmZmZk''@;'; put 'put ''XHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmXHU1MDMwXHU1MDMxXHU1MDMyXHU1MDMzXHU1MDM0XHU1MDM1XHU1MDM2XHU1MDM3XHU1MDM4XHU1''@;'; put 'put ''MDM5XHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU0XHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkXHU1MDVlXHU1MDVmXHU1MDYw''@;'; put 'put ''XHU1MDYxXHU1MDYyXHU1MDYzXHU1MDY0XHU1MDY2XHU1MDY3XHU1MDY4XHU1MDY5XHU1MDZhXHU1MDZiXHU1MDZkXHU1MDZlXHU1MDZmXHU1MDcwXHU1MDcxXHU1MDcyXHU1MDczXHU1MDc0XHU1MDc1XHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1''@;'; put 'put ''MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlXHU1MDhmXHU1MDkwXHU1MDkxXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk1XHU1MDk2XHU1MDk3XHU1MDk4XHU1MDk5XHU1MDlhXHU1MDliXHU1MDljXHU1MDlkXHU1MDllXHU1MDlmXHU1MGEwXHU1MGExXHU1MGEy''@;'; put 'put ''XHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkXHU1MGFlXHU1MGFmXHU1MGIwXHU1MGIxXHU1MGIzXHU1MGI0XHU1MGI1XHU1MGI2XHU1MGI3XHU1MGI4XHU1MGI5XHU1MGJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzBdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzEzMF1bbV1dPTMzMjgwK20sRlszMzI4MCttXT14WzEzMF1bbV0pO2Zvcih4WzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBj''@;'; put 'put ''M1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1''@;'; put 'put ''NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEw''@;'; put 'put ''NVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1''@;'; put 'put ''NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0''@;'; put 'put ''N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1''@;'; put 'put ''NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFi''@;'; put 'put ''OFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMV0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzFdW21dXT0zMzUzNittLEZbMzM1MzYrbV09eFsxMzFdW21dKTtmb3IoeFsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUx''@;'; put 'put ''ZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNc''@;'; put 'put ''dTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUy''@;'; put 'put ''NTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhc''@;'; put 'put ''dTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUyOGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUy''@;'; put 'put ''OWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2Rc''@;'; put 'put ''dTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUyZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUy''@;'; put 'put ''ZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzJdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMyXVttXV09MzM3OTIrbSxGWzMzNzkyK21dPXhbMTMyXVttXSk7Zm9yKHhbMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzExXHU1MzEyXHU1''@;'; put 'put ''MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmXHU1MzMwXHU1MzMxXHU1MzMyXHU1MzMzXHU1MzM0XHU1MzM1XHU1MzM2XHU1MzM3XHU1MzM4XHU1MzNjXHU1MzNk''@;'; put 'put ''XHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1''@;'; put 'put ''MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmXHVmZmZkXHU1MzkwXHU1MzkxXHU1MzkyXHU1MzkzXHU1Mzk0XHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmXHU1M2Iw''@;'; put 'put ''XHU1M2IxXHU1M2IyXHU1M2IzXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzXHU1M2M0XHU1M2M1XHU1M2M2XHU1M2M3XHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1''@;'; put 'put ''M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2ZlXHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNk''@;'; put 'put ''XHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkXHU1NDVlXHU1NDVmXHU1NDYwXHU1NDYxXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5XHU1NDZhXHU1NDZiXHU1NDZjXHU1NDZkXHU1NDZlXHU1''@;'; put 'put ''NDZmXHU1NDcwXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzM11bbV1dPTM0MDQ4K20sRlszNDA0OCttXT14WzEzM11bbV0pO2Zvcih4WzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRm''@;'; put 'put ''MFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1''@;'; put 'put ''NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0''@;'; put 'put ''Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1''@;'; put 'put ''NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVh''@;'; put 'put ''OVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1''@;'; put 'put ''NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzEzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzRdW21dXT0zNDMwNCttLEZbMzQzMDQrbV09eFsxMzRdW21dKTtmb3IoeFsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2''@;'; put 'put ''MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJc''@;'; put 'put ''dTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2''@;'; put 'put ''N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRc''@;'; put 'put ''dTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2''@;'; put 'put ''YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNc''@;'; put 'put ''dTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3''@;'; put 'put ''MTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM1XVttXV09MzQ1NjArbSxGWzM0NTYwK21dPXhbMTM1XVttXSk7Zm9yKHhbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzEyXHU1NzEzXHU1NzE0XHU1NzE1XHU1NzE2XHU1NzE3XHU1NzE4XHU1NzE5XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0XHU1''@;'; put 'put ''NzM1XHU1NzM2XHU1NzM3XHU1NzM4XHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyXHU1NzUzXHU1NzU0XHU1NzU1XHU1NzU2XHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZl''@;'; put 'put ''XHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwXHVmZmZkXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkXHU1NzhlXHU1NzhmXHU1NzkwXHU1NzkxXHU1Nzk0XHU1Nzk1XHU1Nzk2XHU1Nzk3XHU1''@;'; put 'put ''Nzk4XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5XHU1N2JhXHU1N2JiXHU1N2JjXHU1N2JkXHU1N2JlXHU1N2JmXHU1N2MwXHU1N2MxXHU1N2M0''@;'; put 'put ''XHU1N2M1XHU1N2M2XHU1N2M3XHU1N2M4XHU1N2M5XHU1N2NhXHU1N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1XHU1N2U2XHU1N2U3XHU1N2U4XHU1N2U5XHU1N2VhXHU1N2ViXHU1N2VjXHU1''@;'; put 'put ''N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3''@;'; put 'put ''XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1XHU1ODI2XHU1ODI3XHU1ODI4XHU1ODI5XHU1ODJiXHU1ODJjXHU1ODJkXHU1ODJlXHU1ODJmXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2XHU1ODM3XHU1ODM4XHU1ODM5XHU1ODNhXHU1''@;'; put 'put ''ODNiXHU1ODNjXHU1ODNkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzNl1bbV1dPTM0ODE2K20sRlszNDgxNittXT14WzEzNl1bbV0pO2Zvcih4WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1''@;'; put 'put ''NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3''@;'; put 'put ''OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1''@;'; put 'put ''NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1NThiYlx1NThi''@;'; put 'put ''ZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThkYlx1NThkY1x1''@;'; put 'put ''NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1NThmZlx1NTkw''@;'; put 'put ''MFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1''@;'; put 'put ''NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzddW21dXT0zNTA3MittLEZbMzUwNzIrbV09eFsxMzddW21dKTtmb3IoeFsxMzhdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZc''@;'; put 'put ''dTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5''@;'; put 'put ''OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5Yjdc''@;'; put 'put ''dTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5''@;'; put 'put ''ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVc''@;'; put 'put ''dTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVh''@;'; put 'put ''MzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThc''@;'; put 'put ''dTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM4XVttXV09MzUzMjgrbSxGWzM1MzI4K21dPXhbMTM4XVttXSk7Zm9y''@;'; put 'put ''KHhbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiXHU1YTZjXHU1YTZkXHU1YTZlXHU1YTZmXHU1YTcwXHU1YTcxXHU1YTcyXHU1YTczXHU1YTc4''@;'; put 'put ''XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwXHU1YTgxXHU1YTgyXHU1YTgzXHU1YTg0XHU1YTg1XHU1YTg2XHU1YTg3XHU1YTg4XHU1YTg5XHU1YThhXHU1YThiXHU1YThjXHU1YThkXHU1YThlXHU1YThmXHU1YTkwXHU1YTkxXHU1YTkzXHU1YTk0XHU1YTk1XHU1YTk2XHU1''@;'; put 'put ''YTk3XHU1YTk4XHU1YTk5XHU1YTljXHU1YTlkXHU1YTllXHU1YTlmXHU1YWEwXHU1YWExXHU1YWEyXHU1YWEzXHU1YWE0XHU1YWE1XHU1YWE2XHU1YWE3XHU1YWE4XHU1YWE5XHU1YWFiXHU1YWFjXHVmZmZkXHU1YWFkXHU1YWFlXHU1YWFmXHU1YWIwXHU1YWIxXHU1YWI0XHU1YWI2XHU1YWI3''@;'; put 'put ''XHU1YWI5XHU1YWJhXHU1YWJiXHU1YWJjXHU1YWJkXHU1YWJmXHU1YWMwXHU1YWMzXHU1YWM0XHU1YWM1XHU1YWM2XHU1YWM3XHU1YWM4XHU1YWNhXHU1YWNiXHU1YWNkXHU1YWNlXHU1YWNmXHU1YWQwXHU1YWQxXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1''@;'; put 'put ''YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4XHU1YWVhXHU1YWVjXHU1YWVkXHU1YWVlXHU1YWVmXHU1YWYwXHU1YWYyXHU1YWYzXHU1YWY0XHU1YWY1XHU1YWY2XHU1YWY3XHU1YWY4XHU1YWY5XHU1YWZhXHU1YWZiXHU1YWZjXHU1YWZkXHU1YWZlXHU1YWZmXHU1YjAw''@;'; put 'put ''XHU1YjAxXHU1YjAyXHU1YjAzXHU1YjA0XHU1YjA1XHU1YjA2XHU1YjA3XHU1YjA4XHU1YjBhXHU1YjBiXHU1YjBjXHU1YjBkXHU1YjBlXHU1YjBmXHU1YjEwXHU1YjExXHU1YjEyXHU1YjEzXHU1YjE0XHU1YjE1XHU1YjE4XHU1YjE5XHU1YjFhXHU1YjFiXHU1YjFjXHU1YjFkXHU1YjFlXHU1''@;'; put 'put ''YjFmXHU1YjIwXHU1YjIxXHU1YjIyXHU1YjIzXHU1YjI0XHU1YjI1XHU1YjI2XHU1YjI3XHU1YjI4XHU1YjI5XHU1YjJhXHU1YjJiXHU1YjJjXHU1YjJkXHU1YjJlXHU1YjJmXHU1YjMwXHU1YjMxXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4XHU1YjM5XHU1YjNhXHU1YjNiXHU1YjNjXHU1YjNk''@;'; put 'put ''XHU1YjNlXHU1YjNmXHU1YjQxXHU1YjQyXHU1YjQzXHU1YjQ0XHU1YjQ1XHU1YjQ2XHU1YjQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzOV1bbV1dPTM1NTg0K20sRlszNTU4NCttXT14''@;'; put 'put ''WzEzOV1bbV0pO2Zvcih4WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2''@;'; put 'put ''OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1''@;'; put 'put ''NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJkN1x1NWJk''@;'; put 'put ''OFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1''@;'; put 'put ''NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMz''@;'; put 'put ''Mlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1NWM2YVx1''@;'; put 'put ''NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5''@;'; put 'put ''M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDBdW21dXT0zNTg0MCtt''@;'; put 'put ''LEZbMzU4NDArbV09eFsxNDBdW21dKTtmb3IoeFsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVj''@;'; put 'put ''YzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBc''@;'; put 'put ''dTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVk''@;'; put 'put ''MDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNc''@;'; put 'put ''dTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVk''@;'; put 'put ''NTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNc''@;'; put 'put ''dTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVk''@;'; put 'put ''OTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQx''@;'; put 'put ''XVttXV09MzYwOTYrbSxGWzM2MDk2K21dPXhbMTQxXVttXSk7Zm9yKHhbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGExXHU1ZGEyXHU1ZGEzXHU1ZGE0XHU1ZGE1XHU1ZGE2XHU1ZGE3XHU1ZGE4XHU1ZGE5XHU1ZGFhXHU1''@;'; put 'put ''ZGFiXHU1ZGFjXHU1ZGFkXHU1ZGFlXHU1ZGFmXHU1ZGIwXHU1ZGIxXHU1ZGIyXHU1ZGIzXHU1ZGI0XHU1ZGI1XHU1ZGI2XHU1ZGI4XHU1ZGI5XHU1ZGJhXHU1ZGJiXHU1ZGJjXHU1ZGJkXHU1ZGJlXHU1ZGJmXHU1ZGMwXHU1ZGMxXHU1ZGMyXHU1ZGMzXHU1ZGM0XHU1ZGM2XHU1ZGM3XHU1ZGM4''@;'; put 'put ''XHU1ZGM5XHU1ZGNhXHU1ZGNiXHU1ZGNjXHU1ZGNlXHU1ZGNmXHU1ZGQwXHU1ZGQxXHU1ZGQyXHU1ZGQzXHU1ZGQ0XHU1ZGQ1XHU1ZGQ2XHU1ZGQ3XHU1ZGQ4XHU1ZGQ5XHU1ZGRhXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkXHVmZmZkXHU1ZGYwXHU1''@;'; put 'put ''ZGY1XHU1ZGY2XHU1ZGY4XHU1ZGY5XHU1ZGZhXHU1ZGZiXHU1ZGZjXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlXHU1ZTFmXHU1ZTIwXHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTI0XHU1ZTI1XHU1ZTI4''@;'; put 'put ''XHU1ZTI5XHU1ZTJhXHU1ZTJiXHU1ZTJjXHU1ZTJmXHU1ZTMwXHU1ZTMyXHU1ZTMzXHU1ZTM0XHU1ZTM1XHU1ZTM2XHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2XHU1ZTQ3XHU1ZTQ4XHU1ZTQ5XHU1ZTRhXHU1ZTRiXHU1ZTRkXHU1ZTRlXHU1ZTRmXHU1''@;'; put 'put ''ZTUwXHU1ZTUxXHU1ZTUyXHU1ZTUzXHU1ZTU2XHU1ZTU3XHU1ZTU4XHU1ZTU5XHU1ZTVhXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzXHU1ZTY0XHU1ZTY1XHU1ZTY2XHU1ZTY3XHU1ZTY4XHU1ZTY5XHU1ZTZhXHU1ZTZiXHU1ZTZjXHU1ZTZkXHU1ZTZlXHU1ZTZmXHU1ZTcwXHU1ZTcx''@;'; put 'put ''XHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4XHU1ZWE5XHU1ZWFhXHU1ZWFiXHU1ZWFjXHU1ZWFlXHU1''@;'; put 'put ''ZWFmXHU1ZWIwXHU1ZWIxXHU1ZWIyXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmXHU1ZWMwXHU1ZWMxXHU1ZWMyXHU1ZWMzXHU1ZWM0XHU1ZWM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDJdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzE0Ml1bbV1dPTM2MzUyK20sRlszNjM1MittXT14WzE0Ml1bbV0pO2Zvcih4WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVjZlx1''@;'; put 'put ''NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1NWVm''@;'; put 'put ''Mlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1''@;'; put 'put ''ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1NWY0''@;'; put 'put ''Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1''@;'; put 'put ''NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1NWZi''@;'; put 'put ''MFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1''@;'; put 'put ''NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQzXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDNdW21dXT0zNjYwOCttLEZbMzY2MDgrbV09eFsxNDNdW21dKTtmb3IoeFsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFc''@;'; put 'put ''dTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYw''@;'; put 'put ''NDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdc''@;'; put 'put ''dTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYw''@;'; put 'put ''YTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNc''@;'; put 'put ''dTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYx''@;'; put 'put ''MGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFc''@;'; put 'put ''dTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDRdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ0XVttXV09MzY4NjQrbSxGWzM2ODY0K21dPXhbMTQ0XVttXSk7Zm9yKHhbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRk''@;'; put 'put ''XHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XHU2MTU3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTViXHU2MTVjXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5XHU2MTZhXHU2MTZiXHU2MTZjXHU2MTZkXHU2MTZlXHU2MTZmXHU2''@;'; put 'put ''MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4XHU2MTc5XHU2MTdhXHU2MTdiXHU2MTdjXHU2MTdkXHU2MTdlXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgyXHU2MTgzXHU2MTg0XHU2MTg1XHU2MTg2XHU2MTg3XHU2MTg4XHU2MTg5XHU2MThhXHU2MThjXHU2MThkXHU2MThmXHU2MTkw''@;'; put 'put ''XHU2MTkxXHU2MTkyXHU2MTkzXHU2MTk1XHVmZmZkXHU2MTk2XHU2MTk3XHU2MTk4XHU2MTk5XHU2MTlhXHU2MTliXHU2MTljXHU2MTllXHU2MTlmXHU2MWEwXHU2MWExXHU2MWEyXHU2MWEzXHU2MWE0XHU2MWE1XHU2MWE2XHU2MWFhXHU2MWFiXHU2MWFkXHU2MWFlXHU2MWFmXHU2MWIwXHU2''@;'; put 'put ''MWIxXHU2MWIyXHU2MWIzXHU2MWI0XHU2MWI1XHU2MWI2XHU2MWI4XHU2MWI5XHU2MWJhXHU2MWJiXHU2MWJjXHU2MWJkXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzXHU2MWM0XHU2MWM1XHU2MWM2XHU2MWM3XHU2MWM5XHU2MWNjXHU2MWNkXHU2MWNlXHU2MWNmXHU2MWQwXHU2MWQzXHU2MWQ1''@;'; put 'put ''XHU2MWQ2XHU2MWQ3XHU2MWQ4XHU2MWQ5XHU2MWRhXHU2MWRiXHU2MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUwXHU2MWUxXHU2MWUyXHU2MWUzXHU2MWU0XHU2MWU1XHU2MWU3XHU2MWU4XHU2MWU5XHU2MWVhXHU2MWViXHU2MWVjXHU2MWVkXHU2MWVlXHU2MWVmXHU2MWYwXHU2MWYxXHU2''@;'; put 'put ''MWYyXHU2MWYzXHU2MWY0XHU2MWY2XHU2MWY3XHU2MWY4XHU2MWY5XHU2MWZhXHU2MWZiXHU2MWZjXHU2MWZkXHU2MWZlXHU2MjAwXHU2MjAxXHU2MjAyXHU2MjAzXHU2MjA0XHU2MjA1XHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIz''@;'; put 'put ''XHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4XHU2MjM5XHU2MjNhXHU2MjNiXHU2MjNjXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ1XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsxNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0NV1bbV1dPTM3MTIwK20sRlszNzEyMCttXT14WzE0NV1bbV0pO2Zvcih4WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1''@;'; put 'put ''MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1''@;'; put 'put ''NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJi''@;'; put 'put ''Nlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1''@;'; put 'put ''NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMz''@;'; put 'put ''NFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1''@;'; put 'put ''NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5''@;'; put 'put ''M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDZdW21dXT0zNzM3NittLEZbMzczNzYrbV09eFsxNDZdW21dKTtmb3IoeFsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThc''@;'; put 'put ''dTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0''@;'; put 'put ''MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2Nc''@;'; put 'put ''dTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0''@;'; put 'put ''NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFc''@;'; put 'put ''dTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0''@;'; put 'put ''YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsxNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ3XVttXV09Mzc2MzIrbSxGWzM3NjMyK21dPXhbMTQ3XVttXSk7Zm9yKHhbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRmXHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3XHU2NGU4XHU2NGU5XHU2NGVhXHU2NGViXHU2NGVjXHU2NGVkXHU2NGVlXHU2NGVmXHU2NGYwXHU2NGYxXHU2NGYyXHU2NGYzXHU2NGY0XHU2NGY1XHU2NGY2XHU2NGY3''@;'; put 'put ''XHU2NGY4XHU2NGY5XHU2NGZhXHU2NGZiXHU2NGZjXHU2NGZkXHU2NGZlXHU2NGZmXHU2NTAxXHU2NTAyXHU2NTAzXHU2NTA0XHU2NTA1XHU2NTA2XHU2NTA3XHU2NTA4XHU2NTBhXHU2NTBiXHU2NTBjXHU2NTBkXHU2NTBlXHU2NTBmXHU2NTEwXHU2NTExXHU2NTEzXHU2NTE0XHU2NTE1XHU2''@;'; put 'put ''NTE2XHU2NTE3XHU2NTE5XHU2NTFhXHU2NTFiXHU2NTFjXHU2NTFkXHU2NTFlXHU2NTFmXHU2NTIwXHU2NTIxXHVmZmZkXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2XHU2NTI3XHU2NTI4XHU2NTI5XHU2NTJhXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNh''@;'; put 'put ''XHU2NTNjXHU2NTNkXHU2NTQwXHU2NTQxXHU2NTQyXHU2NTQzXHU2NTQ0XHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2''@;'; put 'put ''NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcxXHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4XHU2NTc5XHU2NTdhXHU2NTdiXHU2NTdjXHU2NTdkXHU2NTdlXHU2NTdmXHU2NTgwXHU2NTgxXHU2NTgyXHU2NTgzXHU2NTg0XHU2NTg1XHU2NTg2XHU2NTg4XHU2NTg5XHU2NThh''@;'; put 'put ''XHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWI1XHU2NWI2XHU2NWI3XHU2NWI4XHU2''@;'; put 'put ''NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4XHU2NWQ5XHU2NWRhXHU2NWRiXHU2NWRjXHU2NWRkXHU2NWRlXHU2NWRmXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVh''@;'; put 'put ''XHU2NWViXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OF1bbV1dPTM3ODg4K20sRlszNzg4OCttXT14WzE0OF1bbV0pO2Zvcih4WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYx''@;'; put 'put ''Nlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1''@;'; put 'put ''NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2''@;'; put 'put ''Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1''@;'; put 'put ''NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZi''@;'; put 'put ''N1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1''@;'; put 'put ''NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZm''@;'; put 'put ''ZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDldW21dXT0zODE0NCttLEZbMzgxNDQrbV09eFsxNDldW21dKTtmb3IoeFsxNTBdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3''@;'; put 'put ''MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThc''@;'; put 'put ''dTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3''@;'; put 'put ''OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRc''@;'; put 'put ''dTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3''@;'; put 'put ''ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVc''@;'; put 'put ''dTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4''@;'; put 'put ''NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUwXVttXV09Mzg0MDArbSxGWzM4NDAwK21dPXhbMTUwXVttXSk7Zm9yKHhbMTUxXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVmXHU2ODZhXHU2ODZjXHU2ODZkXHU2ODZlXHU2ODZmXHU2ODcwXHU2ODcxXHU2ODcyXHU2ODczXHU2ODc1XHU2ODc4XHU2ODc5XHU2ODdhXHU2ODdiXHU2''@;'; put 'put ''ODdjXHU2ODdkXHU2ODdlXHU2ODdmXHU2ODgwXHU2ODgyXHU2ODg0XHU2ODg3XHU2ODg4XHU2ODg5XHU2ODhhXHU2ODhiXHU2ODhjXHU2ODhkXHU2ODhlXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XHU2ODk5XHU2ODlhXHU2ODliXHU2ODljXHU2ODlkXHU2ODll''@;'; put 'put ''XHU2ODlmXHU2OGEwXHU2OGExXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4XHVmZmZkXHU2OGI5XHU2OGJhXHU2OGJiXHU2OGJjXHU2OGJkXHU2OGJlXHU2OGJmXHU2OGMxXHU2OGMzXHU2''@;'; put 'put ''OGM0XHU2OGM1XHU2OGM2XHU2OGM3XHU2OGM4XHU2OGNhXHU2OGNjXHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiXHU2OGRjXHU2OGRkXHU2OGRlXHU2OGRmXHU2OGUxXHU2OGUyXHU2OGU0XHU2OGU1XHU2OGU2XHU2OGU3XHU2OGU4''@;'; put 'put ''XHU2OGU5XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGVmXHU2OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2XHU2OTA3XHU2OTA4XHU2OTA5XHU2OTBhXHU2OTBjXHU2OTBmXHU2''@;'; put 'put ''OTExXHU2OTEzXHU2OTE0XHU2OTE1XHU2OTE2XHU2OTE3XHU2OTE4XHU2OTE5XHU2OTFhXHU2OTFiXHU2OTFjXHU2OTFkXHU2OTFlXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1XHU2OTI2XHU2OTI3XHU2OTI4XHU2OTI5XHU2OTJhXHU2OTJiXHU2OTJjXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMy''@;'; put 'put ''XHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzXHU2OTQ0XHU2OTQ1XHU2OTQ2XHU2OTQ3XHU2OTQ4XHU2OTQ5XHU2OTRhXHU2OTRiXHU2OTRjXHU2OTRkXHU2OTRlXHU2OTRmXHU2OTUwXHU2OTUxXHU2OTUyXHU2''@;'; put 'put ''OTUzXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1MV1bbV1dPTM4NjU2K20sRlszODY1NittXT14WzE1MV1bbV0p''@;'; put 'put ''O2Zvcih4WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1''@;'; put 'put ''Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1Njlh''@;'; put 'put ''Mlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1''@;'; put 'put ''NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1Njll''@;'; put 'put ''OVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1''@;'; put 'put ''NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEy''@;'; put 'put ''Ylx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1''@;'; put 'put ''NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTJdW21dXT0zODkxMittLEZbMzg5MTIr''@;'; put 'put ''bV09eFsxNTJdW21dKTtmb3IoeFsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJc''@;'; put 'put ''dTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZh''@;'; put 'put ''OGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVc''@;'; put 'put ''dTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZh''@;'; put 'put ''Y2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVc''@;'; put 'put ''dTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZi''@;'; put 'put ''MDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNc''@;'; put 'put ''dTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUzXVttXV09Mzkx''@;'; put 'put ''NjgrbSxGWzM5MTY4K21dPXhbMTUzXVttXSk7Zm9yKHhbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNm''@;'; put 'put ''XHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkXHU2YjRlXHU2YjRmXHU2YjUwXHU2YjUxXHU2YjUyXHU2YjUzXHU2YjU0XHU2YjU1XHU2YjU2XHU2YjU3XHU2YjU4XHU2YjVhXHU2YjViXHU2YjVjXHU2YjVkXHU2YjVlXHU2YjVmXHU2YjYwXHU2''@;'; put 'put ''YjYxXHU2YjY4XHU2YjY5XHU2YjZiXHU2YjZjXHU2YjZkXHU2YjZlXHU2YjZmXHU2YjcwXHU2YjcxXHU2YjcyXHU2YjczXHU2Yjc0XHU2Yjc1XHU2Yjc2XHU2Yjc3XHU2Yjc4XHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4XHVmZmZkXHU2YjhjXHU2YjhlXHU2Yjhm''@;'; put 'put ''XHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2Yjk5XHU2YjljXHU2YjlkXHU2YjllXHU2YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE0XHU2YmE1XHU2YmE2XHU2YmE3XHU2YmE4XHU2YmE5XHU2YmFiXHU2YmFjXHU2YmFkXHU2YmFlXHU2YmFmXHU2YmIwXHU2YmIxXHU2''@;'; put 'put ''YmIyXHU2YmI2XHU2YmI4XHU2YmI5XHU2YmJhXHU2YmJiXHU2YmJjXHU2YmJkXHU2YmJlXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2XHU2YmM3XHU2YmM4XHU2YmM5XHU2YmNhXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjXHU2YmRkXHU2YmRlXHU2YmRmXHU2YmUw''@;'; put 'put ''XHU2YmUyXHU2YmUzXHU2YmU0XHU2YmU1XHU2YmU2XHU2YmU3XHU2YmU4XHU2YmU5XHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlXHU2YmZmXHU2YzAwXHU2YzAxXHU2YzAyXHU2YzAzXHU2''@;'; put 'put ''YzA0XHU2YzA4XHU2YzA5XHU2YzBhXHU2YzBiXHU2YzBjXHU2YzBlXHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNm''@;'; put 'put ''XHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiXHU2YzRjXHU2YzRkXHU2YzRlXHU2YzRmXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzE1NF1bbV1dPTM5NDI0K20sRlszOTQyNCttXT14WzE1NF1bbV0pO2Zvcih4WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2''@;'; put 'put ''ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1''@;'; put 'put ''NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNk''@;'; put 'put ''OVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1''@;'; put 'put ''NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0''@;'; put 'put ''NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1''@;'; put 'put ''NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRi''@;'; put 'put ''MVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU1XVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsxNTVdW21dXT0zOTY4MCttLEZbMzk2ODArbV09eFsxNTVdW21dKTtmb3IoeFsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZk''@;'; put 'put ''ZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJc''@;'; put 'put ''dTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZl''@;'; put 'put ''MzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlc''@;'; put 'put ''dTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZl''@;'; put 'put ''NzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVc''@;'; put 'put ''dTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZl''@;'; put 'put ''Y2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1''@;'; put 'put ''Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU2XVttXV09Mzk5MzYrbSxGWzM5OTM2K21dPXhbMTU2XVttXSk7Zm9yKHhbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2''@;'; put 'put ''ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhXHU2ZWZiXHU2ZWZjXHU2ZWZkXHU2ZWZlXHU2ZWZmXHU2ZjAwXHU2ZjAxXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhXHU2ZjBiXHU2ZjBjXHU2ZjBkXHU2ZjBlXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2XHU2ZjE3XHU2ZjE4XHU2ZjE5''@;'; put 'put ''XHU2ZjFhXHU2ZjFiXHU2ZjFjXHU2ZjFkXHU2ZjFlXHU2ZjFmXHU2ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3XHU2ZjM4XHU2ZjM5XHU2ZjNhXHU2ZjNiXHU2ZjNjXHU2ZjNkXHU2ZjNmXHU2''@;'; put 'put ''ZjQwXHU2ZjQxXHU2ZjQyXHVmZmZkXHU2ZjQzXHU2ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlXHU2ZjRmXHU2ZjUwXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU0XHU2ZjU1XHU2ZjU2XHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYx''@;'; put 'put ''XHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3XHU2ZjY4XHU2ZjY5XHU2ZjZhXHU2ZjZiXHU2ZjZjXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkXHU2ZjdlXHU2ZjdmXHU2ZjgwXHU2ZjgxXHU2ZjgyXHU2ZjgzXHU2Zjg1XHU2Zjg2XHU2''@;'; put 'put ''Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmXHU2ZjkwXHU2ZjkxXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk1XHU2Zjk2XHU2Zjk3XHU2Zjk4XHU2Zjk5XHU2ZjlhXHU2ZjliXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyXHU2ZmEzXHU2ZmE0XHU2ZmE1XHU2ZmE2XHU2ZmE4XHU2ZmE5XHU2ZmFh''@;'; put 'put ''XHU2ZmFiXHU2ZmFjXHU2ZmFkXHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmIxXHU2ZmIyXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhXHU2ZmJiXHU2ZmJjXHU2ZmJkXHU2ZmJlXHU2ZmJmXHU2ZmMxXHU2ZmMzXHU2ZmM0XHU2ZmM1XHU2ZmM2XHU2ZmM3XHU2ZmM4XHU2ZmNhXHU2ZmNiXHU2''@;'; put 'put ''ZmNjXHU2ZmNkXHU2ZmNlXHU2ZmNmXHU2ZmQwXHU2ZmQzXHU2ZmQ0XHU2ZmQ1XHU2ZmQ2XHU2ZmQ3XHU2ZmQ4XHU2ZmQ5XHU2ZmRhXHU2ZmRiXHU2ZmRjXHU2ZmRkXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU3XS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1N11bbV1dPTQwMTkyK20sRls0MDE5MittXT14WzE1N11bbV0pO2Zvcih4WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1''@;'; put 'put ''NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAw''@;'; put 'put ''Nlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1''@;'; put 'put ''NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0''@;'; put 'put ''Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1''@;'; put 'put ''NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4''@;'; put 'put ''Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1''@;'; put 'put ''NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1''@;'; put 'put ''OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNThdW21dXT00MDQ0OCttLEZbNDA0NDgrbV09eFsxNThdW21dKTtmb3IoeFsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNc''@;'; put 'put ''dTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJcdTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcx''@;'; put 'put ''MDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFc''@;'; put 'put ''dTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlcdTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcx''@;'; put 'put ''NGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcxNTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZc''@;'; put 'put ''dTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBcdTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcx''@;'; put 'put ''OTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcxYTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdc''@;'; put 'put ''dTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVcdTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU5XVttXV09NDA3MDQrbSxGWzQwNzA0K21dPXhbMTU5XVttXSk7Zm9yKHhbMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3MWQ2XHU3MWQ3XHU3MWQ4XHU3MWQ5XHU3MWRhXHU3MWRiXHU3MWRjXHU3MWRkXHU3MWRlXHU3MWRmXHU3MWUxXHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4XHU3MWU5XHU3MWVhXHU3MWViXHU3MWVjXHU3MWVkXHU3MWVmXHU3MWYwXHU3MWYxXHU3MWYyXHU3MWYzXHU3''@;'; put 'put ''MWY0XHU3MWY1XHU3MWY2XHU3MWY3XHU3MWY4XHU3MWZhXHU3MWZiXHU3MWZjXHU3MWZkXHU3MWZlXHU3MWZmXHU3MjAwXHU3MjAxXHU3MjAyXHU3MjAzXHU3MjA0XHU3MjA1XHU3MjA3XHU3MjA4XHU3MjA5XHU3MjBhXHU3MjBiXHU3MjBjXHU3MjBkXHU3MjBlXHU3MjBmXHU3MjEwXHU3MjEx''@;'; put 'put ''XHU3MjEyXHU3MjEzXHU3MjE0XHU3MjE1XHU3MjE2XHU3MjE3XHU3MjE4XHU3MjE5XHU3MjFhXHVmZmZkXHU3MjFiXHU3MjFjXHU3MjFlXHU3MjFmXHU3MjIwXHU3MjIxXHU3MjIyXHU3MjIzXHU3MjI0XHU3MjI1XHU3MjI2XHU3MjI3XHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3''@;'; put 'put ''MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQwXHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ0XHU3MjQ1XHU3MjQ2XHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVl''@;'; put 'put ''XHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1XHU3Mjg2XHU3Mjg3XHU3Mjg4XHU3Mjg5XHU3MjhjXHU3''@;'; put 'put ''MjhlXHU3MjkwXHU3MjkxXHU3MjkzXHU3Mjk0XHU3Mjk1XHU3Mjk2XHU3Mjk3XHU3Mjk4XHU3Mjk5XHU3MjlhXHU3MjliXHU3MjljXHU3MjlkXHU3MjllXHU3MmEwXHU3MmExXHU3MmEyXHU3MmEzXHU3MmE0XHU3MmE1XHU3MmE2XHU3MmE3XHU3MmE4XHU3MmE5XHU3MmFhXHU3MmFiXHU3MmFl''@;'; put 'put ''XHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhXHU3MmJiXHU3MmJjXHU3MmJkXHU3MmJlXHU3MmJmXHU3MmMwXHU3MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MF1bbV1dPTQwOTYwK20sRls0MDk2MCttXT14WzE2MF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVm''@;'; put 'put ''ZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBm''@;'; put 'put ''XHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhi''@;'; put 'put ''MFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMTYxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2MV1bbV1dPTQxMjE2K20sRls0MTIxNittXT14WzE2MV1bbV0pO2Zvcih4WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3''@;'; put 'put ''NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1''@;'; put 'put ''MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhc''@;'; put 'put ''dWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZm''@;'; put 'put ''MjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2Zc''@;'; put 'put ''dWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZm''@;'; put 'put ''NWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2''@;'; put 'put ''XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUz''@;'; put 'put ''MDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdk''@;'; put 'put ''XHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBh''@;'; put 'put ''NFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1''@;'; put 'put ''MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBk''@;'; put 'put ''Ylx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21d''@;'; put 'put ''KTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAz''@;'; put 'put ''OTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDRcdWZmZmRcdWZmZmRcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzFcdWZmZmRcdWZlMzNc''@;'; put 'put ''dWZlMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2''@;'; put 'put ''K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQy''@;'; put 'put ''NzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5''@;'; put 'put ''OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1''@;'; put 'put ''MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4''@;'; put 'put ''YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0''@;'; put 'put ''NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1''@;'; put 'put ''MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMw''@;'; put 'put ''MDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMz''@;'; put 'put ''OWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTRcdWZmZmRcdTIxMjFcdTMyMzFcdWZmZmRcdTIwMTBcdWZmZmRcdWZmZmRcdWZmZmRcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDlc''@;'; put 'put ''dWZlNGFcdWZlNGJcdWZlNGNcdWZlNGRcdWZlNGVcdWZlNGZcdWZlNTBcdWZlNTFcdWZlNTJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTlcdWZlNWFcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdWZlNWZcdWZlNjBcdWZlNjFcdWZmZmRcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZl''@;'; put 'put ''NjZcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1''@;'; put 'put ''MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJc''@;'; put 'put ''dTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY5XVttXV09''@;'; put 'put ''NDMyNjQrbSxGWzQzMjY0K21dPXhbMTY5XVttXSk7Zm9yKHhbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3''@;'; put 'put ''MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIz''@;'; put 'put ''XHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3''@;'; put 'put ''MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZi''@;'; put 'put ''XHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzBdW21dLmNoYXJDb2RlQXQoMCkmJihh''@;'; put 'put ''ZVt4WzE3MF1bbV1dPTQzNTIwK20sRls0MzUyMCttXT14WzE3MF1bbV0pO2Zvcih4WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1''@;'; put 'put ''NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNh''@;'; put 'put ''MFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1''@;'; put 'put ''NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNm''@;'; put 'put ''MVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcxXVttXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoYWVbeFsxNzFdW21dXT00Mzc3NittLEZbNDM3NzYrbV09eFsxNzFdW21dKTtmb3IoeFsxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczZjhcdTczZjlcdTczZmFcdTczZmJcdTczZmNcdTczZmRcdTczZmVc''@;'; put 'put ''dTczZmZcdTc0MDBcdTc0MDFcdTc0MDJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTFcdTc0MTJcdTc0MTNcdTc0MTRcdTc0MTVcdTc0MTZcdTc0MTdcdTc0MThcdTc0MTlcdTc0MWNcdTc0MWRcdTc0MWVcdTc0MWZcdTc0MjBcdTc0MjFcdTc0MjNcdTc0''@;'; put 'put ''MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFcdTc0MzJcdTc0MzdcdTc0MzhcdTc0MzlcdTc0M2FcdTc0M2JcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDJcdTc0NDNcdTc0NDRcdTc0NDVcdTc0NDZcdTc0NDdcdTc0NDhcdTc0NDlcdTc0NGFcdTc0NGJcdTc0NGNc''@;'; put 'put ''dTc0NGRcdWZmZmRcdTc0NGVcdTc0NGZcdTc0NTBcdTc0NTFcdTc0NTJcdTc0NTNcdTc0NTRcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjBcdTc0NjFcdTc0NjJcdTc0NjNcdTc0NjRcdTc0NjVcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NjlcdTc0NmFcdTc0NmJcdTc0NmNcdTc0NmVcdTc0NmZcdTc0''@;'; put 'put ''NzFcdTc0NzJcdTc0NzNcdTc0NzRcdTc0NzVcdTc0NzhcdTc0NzlcdTc0N2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzJdLmxlbmd0aDsrK20pNjU1MzMhPT14''@;'; put 'put ''WzE3Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcyXVttXV09NDQwMzIrbSxGWzQ0MDMyK21dPXhbMTcyXVttXSk7Zm9yKHhbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgy''@;'; put 'put ''XHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3''@;'; put 'put ''NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0''@;'; put 'put ''XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3''@;'; put 'put ''NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTczXS5sZW5ndGg7''@;'; put 'put ''KyttKTY1NTMzIT09eFsxNzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3M11bbV1dPTQ0Mjg4K20sRls0NDI4OCttXT14WzE3M11bbV0pO2Zvcih4WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRm''@;'; put 'put ''OFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1''@;'; put 'put ''NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1''@;'; put 'put ''Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1''@;'; put 'put ''NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14''@;'; put 'put ''WzE3NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzRdW21dXT00NDU0NCttLEZbNDQ1NDQrbV09eFsxNzRdW21dKTtmb3IoeFsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1''@;'; put 'put ''ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTZcdTc1YTdcdTc1YThcdTc1YTlcdTc1YWFcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZc''@;'; put 'put ''dTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1''@;'; put 'put ''ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZcdTc2MDdcdWZmZmRcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2Mjhc''@;'; put 'put ''dTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxtPTA7bSE9eFsxNzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc1XVttXV09NDQ4MDArbSxGWzQ0ODAwK21dPXhbMTc1XVttXSk7Zm9yKHhbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1''@;'; put 'put ''XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3''@;'; put 'put ''NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFk''@;'; put 'put ''XHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4''@;'; put 'put ''MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUy''@;'; put 'put ''XHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4''@;'; put 'put ''MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3Nl1bbV1dPTQ1MDU2K20sRls0NTA1NittXT14WzE3Nl1bbV0pO2Zvcih4WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZl''@;'; put 'put ''Y1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1''@;'; put 'put ''NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0''@;'; put 'put ''NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1''@;'; put 'put ''OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZm''@;'; put 'put ''OFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1''@;'; put 'put ''OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1Nzlj''@;'; put 'put ''OVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzddW21dXT00NTMxMittLEZbNDUzMTIrbV09eFsxNzddW21dKTtmb3IoeFsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmRcdTc3NmVcdTc3NmZcdTc3NzBcdTc3NzFcdTc3NzJcdTc3NzNcdTc3NzRcdTc3NzVcdTc3NzZcdTc3NzdcdTc3NzhcdTc3N2FcdTc3''@;'; put 'put ''N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODZcdTc3ODdcdTc3ODhcdTc3ODlcdTc3OGFcdTc3OGJcdTc3OGZcdTc3OTBcdTc3OTNcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OTdcdTc3OThcdTc3OTlcdTc3OWFcdTc3OWJcdTc3OWNcdTc3OWRcdTc3OWVcdTc3YTFcdTc3YTNcdTc3YTRc''@;'; put 'put ''dTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjZcdTc3YjdcdTc3YjhcdTc3YjlcdTc3YmFcdWZmZmRcdTc3YmNcdTc3YmVcdTc3YzBcdTc3YzFcdTc3YzJcdTc3YzNcdTc3YzRcdTc3YzVcdTc3YzZcdTc3YzdcdTc3YzhcdTc3YzlcdTc3''@;'; put 'put ''Y2FcdTc3Y2JcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3ZDBcdTc3ZDFcdTc3ZDJcdTc3ZDNcdTc3ZDRcdTc3ZDVcdTc3ZDZcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGRcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTFcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVc''@;'; put 'put ''dTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4''@;'; put 'put ''YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVc''@;'; put 'put ''dTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRl''@;'; put 'put ''YTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc4XVttXV09NDU1NjgrbSxGWzQ1NTY4K21dPXhbMTc4XVttXSk7Zm9yKHhbMTc5XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3''@;'; put 'put ''ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQx''@;'; put 'put ''XHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3''@;'; put 'put ''ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdm''@;'; put 'put ''XHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2''@;'; put 'put ''Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNi''@;'; put 'put ''XHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1''@;'; put 'put ''M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OV1bbV1dPTQ1ODI0K20sRls0NTgyNCttXT14WzE3OV1bbV0pO2Zvcih4''@;'; put 'put ''WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1''@;'; put 'put ''NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1Nzhj''@;'; put 'put ''ZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1''@;'; put 'put ''NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1Nzdk''@;'; put 'put ''N1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1''@;'; put 'put ''N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3''@;'; put 'put ''Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1''@;'; put 'put ''NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODBdW21dXT00NjA4MCttLEZbNDYwODArbV09eFsx''@;'; put 'put ''ODBdW21dKTtmb3IoeFsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MGRcdTc5MGVcdTc5MGZcdTc5MTBcdTc5MTFcdTc5MTJcdTc5MTRcdTc5MTVcdTc5MTZcdTc5MTdcdTc5MThcdTc5MTlcdTc5MWFcdTc5MWJcdTc5MWNc''@;'; put 'put ''dTc5MWRcdTc5MWZcdTc5MjBcdTc5MjFcdTc5MjJcdTc5MjNcdTc5MjVcdTc5MjZcdTc5MjdcdTc5MjhcdTc5MjlcdTc5MmFcdTc5MmJcdTc5MmNcdTc5MmRcdTc5MmVcdTc5MmZcdTc5MzBcdTc5MzFcdTc5MzJcdTc5MzNcdTc5MzVcdTc5MzZcdTc5MzdcdTc5MzhcdTc5MzlcdTc5M2RcdTc5''@;'; put 'put ''M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGFcdTc5NGJcdTc5NGNcdTc5NGRcdTc5NGVcdTc5NGZcdTc5NTBcdTc5NTFcdTc5NTJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcdWZmZmRcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNc''@;'; put 'put ''dTc5NmVcdTc5NzBcdTc5NzFcdTc5NzJcdTc5NzNcdTc5NzRcdTc5NzVcdTc5NzZcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2RcdTc5N2VcdTc5N2ZcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYw''@;'; put 'put ''MjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNc''@;'; put 'put ''dTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3''@;'; put 'put ''MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFc''@;'; put 'put ''dTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgxXVttXV09NDYzMzYrbSxG''@;'; put 'put ''WzQ2MzM2K21dPXhbMTgxXVttXSk7Zm9yKHhbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEw''@;'; put 'put ''XHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3''@;'; put 'put ''OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYy''@;'; put 'put ''XHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3''@;'; put 'put ''YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3''@;'; put 'put ''XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1''@;'; put 'put ''NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2''@;'; put 'put ''XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Ml1b''@;'; put 'put ''bV1dPTQ2NTkyK20sRls0NjU5MittXT14WzE4Ml1bbV0pO2Zvcih4WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2Ey''@;'; put 'put ''YVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1''@;'; put 'put ''N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2''@;'; put 'put ''YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1''@;'; put 'put ''N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJh''@;'; put 'put ''Zlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1''@;'; put 'put ''NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFl''@;'; put 'put ''NFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgzXVttXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoYWVbeFsxODNdW21dXT00Njg0OCttLEZbNDY4NDgrbV09eFsxODNdW21dKTtmb3IoeFsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWVcdTdhYWZcdTdh''@;'; put 'put ''YjBcdTdhYjFcdTdhYjJcdTdhYjRcdTdhYjVcdTdhYjZcdTdhYjdcdTdhYjhcdTdhYjlcdTdhYmFcdTdhYmJcdTdhYmNcdTdhYmRcdTdhYmVcdTdhYzBcdTdhYzFcdTdhYzJcdTdhYzNcdTdhYzRcdTdhYzVcdTdhYzZcdTdhYzdcdTdhYzhcdTdhYzlcdTdhY2FcdTdhY2NcdTdhY2RcdTdhY2Vc''@;'; put 'put ''dTdhY2ZcdTdhZDBcdTdhZDFcdTdhZDJcdTdhZDNcdTdhZDRcdTdhZDVcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTdcdTdhZThcdTdhZTlcdTdhZWFcdTdhZWJcdTdhZWNcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjNcdWZm''@;'; put 'put ''ZmRcdTdhZjRcdTdhZjVcdTdhZjZcdTdhZjdcdTdhZjhcdTdhZmJcdTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZc''@;'; put 'put ''dTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRl''@;'; put 'put ''ZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZc''@;'; put 'put ''dTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1''@;'; put 'put ''OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NF1bbV0u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKGFlW3hbMTg0XVttXV09NDcxMDQrbSxGWzQ3MTA0K21dPXhbMTg0XVttXSk7Zm9yKHhbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3''@;'; put 'put ''YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3''@;'; put 'put ''XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3''@;'; put 'put ''YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJi''@;'; put 'put ''XHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1''@;'; put 'put ''MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRj''@;'; put 'put ''XHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5''@;'; put 'put ''NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg1XS5sZW5ndGg7KyttKTY1NTMz''@;'; put 'put ''IT09eFsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NV1bbV1dPTQ3MzYwK20sRls0NzM2MCttXT14WzE4NV1bbV0pO2Zvcih4WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1''@;'; put 'put ''N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2Jm''@;'; put 'put ''Mlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1''@;'; put 'put ''N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2Mz''@;'; put 'put ''NFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1''@;'; put 'put ''N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4''@;'; put 'put ''Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1''@;'; put 'put ''NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Nl0ubGVu''@;'; put 'put ''Z3RoOysrbSk2NTUzMyE9PXhbMTg2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODZdW21dXT00NzYxNittLEZbNDc2MTYrbV09eFsxODZdW21dKTtmb3IoeFsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjNDNcdTdjNDRc''@;'; put 'put ''dTdjNDVcdTdjNDZcdTdjNDdcdTdjNDhcdTdjNDlcdTdjNGFcdTdjNGJcdTdjNGNcdTdjNGVcdTdjNGZcdTdjNTBcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTRcdTdjNTVcdTdjNTZcdTdjNTdcdTdjNThcdTdjNTlcdTdjNWFcdTdjNWJcdTdjNWNcdTdjNWRcdTdjNWVcdTdjNWZcdTdjNjBcdTdj''@;'; put 'put ''NjFcdTdjNjJcdTdjNjNcdTdjNjRcdTdjNjVcdTdjNjZcdTdjNjdcdTdjNjhcdTdjNjlcdTdjNmFcdTdjNmJcdTdjNmNcdTdjNmRcdTdjNmVcdTdjNmZcdTdjNzBcdTdjNzFcdTdjNzJcdTdjNzVcdTdjNzZcdTdjNzdcdTdjNzhcdTdjNzlcdTdjN2FcdTdjN2VcdTdjN2ZcdTdjODBcdTdjODFc''@;'; put 'put ''dTdjODJcdTdjODNcdTdjODRcdTdjODVcdTdjODZcdTdjODdcdWZmZmRcdTdjODhcdTdjOGFcdTdjOGJcdTdjOGNcdTdjOGRcdTdjOGVcdTdjOGZcdTdjOTBcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdj''@;'; put 'put ''YTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjRcdTdjYjVcdTdjYjZcdTdjYjdcdTdjYjhcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZc''@;'; put 'put ''dThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUx''@;'; put 'put ''ZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhc''@;'; put 'put ''dTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7''@;'; put 'put ''bSE9eFsxODddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg3XVttXV09NDc4NzIrbSxGWzQ3ODcyK21dPXhbMTg3XVttXSk7Zm9yKHhbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3''@;'; put 'put ''Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3''@;'; put 'put ''XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3''@;'; put 'put ''ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4Zjkx''@;'; put 'put ''XHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1''@;'; put 'put ''ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0''@;'; put 'put ''XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksbT0wO20hPXhbMTg4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OF1bbV1dPTQ4MTI4K20sRls0ODEyOCttXT14WzE4OF1bbV0pO2Zvcih4WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1''@;'; put 'put ''N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2''@;'; put 'put ''Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1''@;'; put 'put ''N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMw''@;'; put 'put ''Nlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1''@;'; put 'put ''ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODll''@;'; put 'put ''M1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1''@;'; put 'put ''NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODldW21dXT00ODM4NCttLEZbNDgzODQrbV09eFsxODldW21dKTtmb3IoeFsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkOTlcdTdkOWFcdTdkOWJcdTdkOWNcdTdkOWRcdTdkOWVcdTdkOWZcdTdkYTBcdTdkYTFcdTdkYTJcdTdkYTNcdTdkYTRcdTdkYTVcdTdkYTdcdTdkYThcdTdkYTlcdTdkYWFcdTdkYWJcdTdkYWNcdTdkYWRcdTdkYWZcdTdkYjBcdTdkYjFc''@;'; put 'put ''dTdkYjJcdTdkYjNcdTdkYjRcdTdkYjVcdTdkYjZcdTdkYjdcdTdkYjhcdTdkYjlcdTdkYmFcdTdkYmJcdTdkYmNcdTdkYmRcdTdkYmVcdTdkYmZcdTdkYzBcdTdkYzFcdTdkYzJcdTdkYzNcdTdkYzRcdTdkYzVcdTdkYzZcdTdkYzdcdTdkYzhcdTdkYzlcdTdkY2FcdTdkY2JcdTdkY2NcdTdk''@;'; put 'put ''Y2RcdTdkY2VcdTdkY2ZcdTdkZDBcdTdkZDFcdTdkZDJcdTdkZDNcdTdkZDRcdTdkZDVcdTdkZDZcdTdkZDdcdTdkZDhcdTdkZDlcdWZmZmRcdTdkZGFcdTdkZGJcdTdkZGNcdTdkZGRcdTdkZGVcdTdkZGZcdTdkZTBcdTdkZTFcdTdkZTJcdTdkZTNcdTdkZTRcdTdkZTVcdTdkZTZcdTdkZTdc''@;'; put 'put ''dTdkZThcdTdkZTlcdTdkZWFcdTdkZWJcdTdkZWNcdTdkZWRcdTdkZWVcdTdkZWZcdTdkZjBcdTdkZjFcdTdkZjJcdTdkZjNcdTdkZjRcdTdkZjVcdTdkZjZcdTdkZjdcdTdkZjhcdTdkZjlcdTdkZmFcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRl''@;'; put 'put ''YWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhc''@;'; put 'put ''dTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThk''@;'; put 'put ''ZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdc''@;'; put 'put ''dTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkwXVttXV09NDg2NDArbSxGWzQ4NjQwK21dPXhbMTkwXVttXSk7Zm9yKHhbMTkxXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBm''@;'; put 'put ''XHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3''@;'; put 'put ''ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4''@;'; put 'put ''XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1''@;'; put 'put ''NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2Vm''@;'; put 'put ''XHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1''@;'; put 'put ''NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2Jm''@;'; put 'put ''XHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5MV1bbV1dPTQ4ODk2K20sRls0ODg5NittXT14WzE5MV1bbV0pO2Zvcih4WzE5Ml09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3''@;'; put 'put ''MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1''@;'; put 'put ''N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2Yx''@;'; put 'put ''MFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1''@;'; put 'put ''NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODlj''@;'; put 'put ''OFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1''@;'; put 'put ''NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4''@;'; put 'put ''OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTJdW21dXT00OTE1MittLEZbNDkxNTIrbV09eFsxOTJdW21dKTtm''@;'; put 'put ''b3IoeFsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNjdcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdm''@;'; put 'put ''NzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODJcdTdmODNcdTdmODRcdTdmODVcdTdmODZcdTdmODdcdTdmODhcdTdmODlcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTJcdTdmOTNcdTdmOTVc''@;'; put 'put ''dTdmOTZcdTdmOTdcdTdmOThcdTdmOTlcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYThcdTdmYTlcdTdmYWFcdTdmYWJcdTdmYWNcdTdmYWRcdTdmYWVcdTdmYjFcdWZmZmRcdTdmYjNcdTdmYjRcdTdmYjVcdTdmYjZcdTdmYjdcdTdmYmFcdTdmYmJcdTdm''@;'; put 'put ''YmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdcdTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2ZcdTdmZDBcdTdmZDFcdTdmZDJcdTdmZDNcdTdmZDZcdTdmZDdcdTdmZDlcdTdmZGFcdTdmZGJcdTdmZGNcdTdmZGRcdTdmZGVcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2Jc''@;'; put 'put ''dTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThm''@;'; put 'put ''ODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRc''@;'; put 'put ''dTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUy''@;'; put 'put ''MThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkzXVttXV09NDk0MDgrbSxGWzQ5NDA4K21d''@;'; put 'put ''PXhbMTkzXVttXSk7Zm9yKHhbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3''@;'; put 'put ''ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMw''@;'; put 'put ''XHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4''@;'; put 'put ''MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdk''@;'; put 'put ''XHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1''@;'; put 'put ''ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2''@;'; put 'put ''XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5''@;'; put 'put ''ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NF1bbV1dPTQ5NjY0''@;'; put 'put ''K20sRls0OTY2NCttXT14WzE5NF1bbV0pO2Zvcih4WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1''@;'; put 'put ''ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBk''@;'; put 'put ''M1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1''@;'; put 'put ''ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEz''@;'; put 'put ''Y1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1''@;'; put 'put ''NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMx''@;'; put 'put ''Y1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1''@;'; put 'put ''NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsx''@;'; put 'put ''OTVdW21dXT00OTkyMCttLEZbNDk5MjArbV09eFsxOTVdW21dKTtmb3IoeFsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDBcdTgxNDFcdTgxNDJcdTgxNDNcdTgxNDRcdTgxNDVcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVc''@;'; put 'put ''dTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWJcdTgxNWNcdTgxNWRcdTgxNWVcdTgxNWZcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgx''@;'; put 'put ''ODNcdTgxODRcdTgxODVcdTgxODZcdTgxODdcdTgxODlcdTgxOGJcdTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTJcdTgxOTNcdTgxOTRcdTgxOTVcdTgxOTZcdTgxOTdcdTgxOTlcdTgxOWFcdTgxOWVcdTgxOWZcdTgxYTBcdTgxYTFcdTgxYTJcdTgxYTRcdTgxYTVcdWZmZmRcdTgxYTdc''@;'; put 'put ''dTgxYTlcdTgxYWJcdTgxYWNcdTgxYWRcdTgxYWVcdTgxYWZcdTgxYjBcdTgxYjFcdTgxYjJcdTgxYjRcdTgxYjVcdTgxYjZcdTgxYjdcdTgxYjhcdTgxYjlcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2RcdTgxY2VcdTgx''@;'; put 'put ''Y2ZcdTgxZDBcdTgxZDFcdTgxZDJcdTgxZDNcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZc''@;'; put 'put ''dTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYz''@;'; put 'put ''MjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVc''@;'; put 'put ''dTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5Nl1bbV0uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKGFlW3hbMTk2XVttXV09NTAxNzYrbSxGWzUwMTc2K21dPXhbMTk2XVttXSk7Zm9yKHhbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRi''@;'; put 'put ''XHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4''@;'; put 'put ''MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNm''@;'; put 'put ''XHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4''@;'; put 'put ''MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZh''@;'; put 'put ''XHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1''@;'; put 'put ''M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2Zjhl''@;'; put 'put ''XHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTdd''@;'; put 'put ''W21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5N11bbV1dPTUwNDMyK20sRls1MDQzMittXT14WzE5N11bbV0pO2Zvcih4WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3''@;'; put 'put ''NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1''@;'; put 'put ''ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJm''@;'; put 'put ''NVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1''@;'; put 'put ''ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1Nzdh''@;'; put 'put ''NVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1''@;'; put 'put ''ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODEx''@;'; put 'put ''MFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OF0ubGVuZ3RoOysrbSk2''@;'; put 'put ''NTUzMyE9PXhbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOThdW21dXT01MDY4OCttLEZbNTA2ODgrbV09eFsxOThdW21dKTtmb3IoeFsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzM2VcdTgzM2ZcdTgzNDFcdTgz''@;'; put 'put ''NDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGFcdTgzNGJcdTgzNGNcdTgzNGRcdTgzNGVcdTgzNTNcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNThcdTgzNTlcdTgzNWRcdTgzNjJcdTgzNzBcdTgzNzFcdTgzNzJcdTgzNzNcdTgzNzRcdTgzNzVcdTgzNzZcdTgzNzlcdTgzN2FcdTgzN2VcdTgzN2Zc''@;'; put 'put ''dTgzODBcdTgzODFcdTgzODJcdTgzODNcdTgzODRcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTFcdTgzYTJcdTgzYTNcdTgzYTRcdTgzYTVcdTgz''@;'; put 'put ''YTZcdTgzYTdcdTgzYWNcdTgzYWRcdTgzYWVcdWZmZmRcdTgzYWZcdTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFc''@;'; put 'put ''dTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgzZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZm''@;'; put 'put ''NWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhc''@;'; put 'put ''dTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZj''@;'; put 'put ''MzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTld''@;'; put 'put ''Lmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk5XVttXV09NTA5NDQrbSxGWzUwOTQ0K21dPXhbMTk5XVttXSk7Zm9yKHhbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4''@;'; put 'put ''M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFi''@;'; put 'put ''XHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4''@;'; put 'put ''NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1''@;'; put 'put ''XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1''@;'; put 'put ''MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMx''@;'; put 'put ''XHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1''@;'; put 'put ''YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''bT0wO20hPXhbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwMF1bbV1dPTUxMjAwK20sRls1MTIwMCttXT14WzIwMF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRh''@;'; put 'put ''Mlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1''@;'; put 'put ''ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRm''@;'; put 'put ''MVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1''@;'; put 'put ''NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0''@;'; put 'put ''N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1''@;'; put 'put ''NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTg1MDNcdTg1MDRcdTg1MDVcdTg1MDZcdTg1MDdcdTg1MDhcdTg1MDlcdTg1MGFcdTg1MGJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1''@;'; put 'put ''MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjZcdTg1MjdcdTg1MjhcdTg1MjlcdTg1MmFcdTg1MmRcdTg1MmVcdTg1MmZcdTg1MzBcdTg1MzFcdTg1MzJcdTg1MzNcdTg1MzRcdTg1MzVcdTg1MzZcdTg1M2VcdTg1M2ZcdTg1NDBcdTg1NDFcdTg1NDJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdc''@;'; put 'put ''dTg1NGJcdTg1NGNcdTg1NGRcdTg1NGVcdTg1NGZcdTg1NTBcdTg1NTFcdTg1NTJcdTg1NTNcdTg1NTRcdTg1NTVcdWZmZmRcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWZcdTg1NjBcdTg1NjFcdTg1NjJcdTg1NjNcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjlcdTg1''@;'; put 'put ''NmFcdTg1NmJcdTg1NmNcdTg1NmRcdTg1NmVcdTg1NmZcdTg1NzBcdTg1NzFcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2Zc''@;'; put 'put ''dThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUy''@;'; put 'put ''YmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNc''@;'; put 'put ''dTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1''@;'; put 'put ''NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgzXHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4''@;'; put 'put ''NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMy''@;'; put 'put ''XHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNhXHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4''@;'; put 'put ''NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEz''@;'; put 'put ''XHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1''@;'; put 'put ''NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5''@;'; put 'put ''XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0''@;'; put 'put ''ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1''@;'; put 'put ''ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYy''@;'; put 'put ''Zlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1''@;'; put 'put ''ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJk''@;'; put 'put ''NFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1''@;'; put 'put ''NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1Njhh''@;'; put 'put ''Zlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1''@;'; put 'put ''OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzJcdTg2NzNcdTg2NzRcdTg2NzVcdTg2NzZcdTg2NzdcdTg2NzhcdTg2ODNcdTg2ODRcdTg2ODVcdTg2ODZcdTg2ODdcdTg2ODhcdTg2ODlcdTg2OGVc''@;'; put 'put ''dTg2OGZcdTg2OTBcdTg2OTFcdTg2OTJcdTg2OTRcdTg2OTZcdTg2OTdcdTg2OThcdTg2OTlcdTg2OWFcdTg2OWJcdTg2OWVcdTg2OWZcdTg2YTBcdTg2YTFcdTg2YTJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmJcdTg2''@;'; put 'put ''YmNcdTg2YmRcdTg2YmVcdTg2YmZcdTg2YzFcdTg2YzJcdTg2YzNcdTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGNcdWZmZmRcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThc''@;'; put 'put ''dTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRl''@;'; put 'put ''YWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJc''@;'; put 'put ''dTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0''@;'; put 'put ''YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFc''@;'; put 'put ''dTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVtt''@;'; put 'put ''XSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMy''@;'; put 'put ''XHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4''@;'; put 'put ''NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4Nzgx''@;'; put 'put ''XHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1''@;'; put 'put ''ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEz''@;'; put 'put ''XHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5''@;'; put 'put ''NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0''@;'; put 'put ''XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1Mjcz''@;'; put 'put ''NittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdi''@;'; put 'put ''OVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1''@;'; put 'put ''ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdm''@;'; put 'put ''Zlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1''@;'; put 'put ''ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMy''@;'; put 'put ''M1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1''@;'; put 'put ''NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQx''@;'; put 'put ''MVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01''@;'; put 'put ''Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjRcdTg4MjVcdTg4MjZcdTg4MjdcdTg4MjhcdTg4MjlcdTg4MmFcdTg4MmJcdTg4MmNcdTg4MmRcdTg4MmVcdTg4''@;'; put 'put ''MmZcdTg4MzBcdTg4MzFcdTg4MzNcdTg4MzRcdTg4MzVcdTg4MzZcdTg4MzdcdTg4MzhcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcdTg4NDdcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NGZcdTg4NTBcdTg4NTFcdTg4NTJc''@;'; put 'put ''dTg4NTNcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWJcdTg4NWNcdTg4NWRcdTg4NWVcdTg4NWZcdTg4NjBcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2FcdWZmZmRcdTg4N2JcdTg4N2NcdTg4''@;'; put 'put ''ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTdcdTg4OThcdTg4OTlcdTg4OWFcdTg4OWJcdTg4OWRcdTg4OWVcdTg4OWZcdTg4YTBcdTg4YTFcdTg4YTNcdTg4YTVcdTg4YTZcdTg4YTdc''@;'; put 'put ''dTg4YThcdTg4YTlcdTg4YWFcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZj''@;'; put 'put ''YzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdc''@;'; put 'put ''dTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUz''@;'; put 'put ''ZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFl''@;'; put 'put ''W3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4''@;'; put 'put ''OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUw''@;'; put 'put ''XHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4''@;'; put 'put ''OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJm''@;'; put 'put ''XHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5''@;'; put 'put ''MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5''@;'; put 'put ''XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2''@;'; put 'put ''NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1''@;'; put 'put ''ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1''@;'; put 'put ''Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1''@;'; put 'put ''ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5''@;'; put 'put ''YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1''@;'; put 'put ''NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAx''@;'; put 'put ''YVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1''@;'; put 'put ''NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhb''@;'; put 'put ''MjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5YTJcdTg5YTNcdTg5YTRcdTg5YTVcdTg5YTZc''@;'; put 'put ''dTg5YTdcdTg5YThcdTg5YTlcdTg5YWFcdTg5YWJcdTg5YWNcdTg5YWRcdTg5YWVcdTg5YWZcdTg5YjBcdTg5YjFcdTg5YjJcdTg5YjNcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YjhcdTg5YjlcdTg5YmFcdTg5YmJcdTg5YmNcdTg5YmRcdTg5YmVcdTg5YmZcdTg5YzBcdTg5YzNcdTg5''@;'; put 'put ''Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjRcdTg5ZjVcdTg5ZjZcdTg5Zjdc''@;'; put 'put ''dTg5ZjhcdTg5ZjlcdTg5ZmFcdWZmZmRcdTg5ZmJcdTg5ZmNcdTg5ZmRcdTg5ZmVcdTg5ZmZcdThhMDFcdThhMDJcdThhMDNcdThhMDRcdThhMDVcdThhMDZcdThhMDhcdThhMDlcdThhMGFcdThhMGJcdThhMGNcdThhMGRcdThhMGVcdThhMGZcdThhMTBcdThhMTFcdThhMTJcdThhMTNcdThh''@;'; put 'put ''MTRcdThhMTVcdThhMTZcdThhMTdcdThhMThcdThhMTlcdThhMWFcdThhMWJcdThhMWNcdThhMWRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNc''@;'; put 'put ''dTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZl''@;'; put 'put ''MzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFc''@;'; put 'put ''dTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsr''@;'; put 'put ''K20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjExXVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIw''@;'; put 'put ''XHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4''@;'; put 'put ''YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5''@;'; put 'put ''XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4''@;'; put 'put ''YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVk''@;'; put 'put ''XHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4''@;'; put 'put ''NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5''@;'; put 'put ''XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb''@;'; put 'put ''MjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4''@;'; put 'put ''MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1''@;'; put 'put ''OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFi''@;'; put 'put ''Ylx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1''@;'; put 'put ''OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAz''@;'; put 'put ''YVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1''@;'; put 'put ''NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5''@;'; put 'put ''Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21dXT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdThhZTRcdThhZTVcdThhZTZcdThhZTdcdThhZThcdThhZTlcdThhZWFcdThhZWJcdThhZWNcdThhZWRcdThhZWVcdThhZWZcdThhZjBcdThhZjFcdThhZjJcdThhZjNcdThhZjRcdThhZjVcdThhZjZcdThhZjdcdThhZjhcdThhZjlcdThhZmFcdThhZmJcdThhZmNcdThhZmRc''@;'; put 'put ''dThhZmVcdThhZmZcdThiMDBcdThiMDFcdThiMDJcdThiMDNcdThiMDRcdThiMDVcdThiMDZcdThiMDhcdThiMDlcdThiMGFcdThiMGJcdThiMGNcdThiMGRcdThiMGVcdThiMGZcdThiMTBcdThiMTFcdThiMTJcdThiMTNcdThiMTRcdThiMTVcdThiMTZcdThiMTdcdThiMThcdThiMTlcdThi''@;'; put 'put ''MWFcdThiMWJcdThiMWNcdThiMWRcdThiMWVcdThiMWZcdThiMjBcdThiMjFcdThiMjJcdThiMjNcdWZmZmRcdThiMjRcdThiMjVcdThiMjdcdThiMjhcdThiMjlcdThiMmFcdThiMmJcdThiMmNcdThiMmRcdThiMmVcdThiMmZcdThiMzBcdThiMzFcdThiMzJcdThiMzNcdThiMzRcdThiMzVc''@;'; put 'put ''dThiMzZcdThiMzdcdThiMzhcdThiMzlcdThiM2FcdThiM2JcdThiM2NcdThiM2RcdThiM2VcdThiM2ZcdThiNDBcdThiNDFcdThiNDJcdThiNDNcdThiNDRcdThiNDVcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgx''@;'; put 'put ''MDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2Fc''@;'; put 'put ''dTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVl''@;'; put 'put ''MWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVk''@;'; put 'put ''XHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4''@;'; put 'put ''YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1''@;'; put 'put ''XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4''@;'; put 'put ''ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQw''@;'; put 'put ''XHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2''@;'; put 'put ''M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1''@;'; put 'put ''Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1''@;'; put 'put ''OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5''@;'; put 'put ''OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1''@;'; put 'put ''NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1''@;'; put 'put ''Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1''@;'; put 'put ''NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1''@;'; put 'put ''ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWVcdThjYWZcdThjYjBcdThjYjFcdThjYjJcdThjYjNcdThjYjRcdThjYjVcdThjYjZcdThjYjdcdThjYjhcdThjYjlcdThjYmFcdThjYmJcdThjYmNcdThjYmRcdThjYmVcdThjYmZcdThjYzBcdThj''@;'; put 'put ''YzFcdThjYzJcdThjYzNcdThjYzRcdThjYzVcdThjYzZcdThjYzdcdThjYzhcdThjYzlcdThjY2FcdThjY2JcdThjY2NcdThjY2RcdThjY2VcdThjY2ZcdThjZDBcdThjZDFcdThjZDJcdThjZDNcdThjZDRcdThjZDVcdThjZDZcdThjZDdcdThjZDhcdThjZDlcdThjZGFcdThjZGJcdThjZGNc''@;'; put 'put ''dThjZGRcdThjZGVcdThjZGZcdThjZTBcdThjZTFcdThjZTJcdThjZTNcdThjZTRcdThjZTVcdThjZTZcdThjZTdcdThjZThcdThjZTlcdThjZWFcdThjZWJcdThjZWNcdWZmZmRcdThjZWRcdThjZWVcdThjZWZcdThjZjBcdThjZjFcdThjZjJcdThjZjNcdThjZjRcdThjZjVcdThjZjZcdThj''@;'; put 'put ''ZjdcdThjZjhcdThjZjlcdThjZmFcdThjZmJcdThjZmNcdThjZmRcdThjZmVcdThjZmZcdThkMDBcdThkMDFcdThkMDJcdThkMDNcdThkMDRcdThkMDVcdThkMDZcdThkMDdcdThkMDhcdThkMDlcdThkMGFcdThkMGJcdThkMGNcdThkMGRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZc''@;'; put 'put ''dTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUw''@;'; put 'put ''MmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThc''@;'; put 'put ''dTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTVi''@;'; put 'put ''MzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhb''@;'; put 'put ''MjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4''@;'; put 'put ''ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhj''@;'; put 'put ''XHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4''@;'; put 'put ''ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEy''@;'; put 'put ''XHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4''@;'; put 'put ''YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJl''@;'; put 'put ''XHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5''@;'; put 'put ''MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIx''@;'; put 'put ''OF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1''@;'; put 'put ''OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUx''@;'; put 'put ''Ylx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1''@;'; put 'put ''OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBi''@;'; put 'put ''OFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1''@;'; put 'put ''NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcy''@;'; put 'put ''Y1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1''@;'; put 'put ''NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZb''@;'; put 'put ''NTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNzNcdThlNzVcdThlNzdcdThlNzhcdThlNzlcdThlN2FcdThlN2JcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRc''@;'; put 'put ''dThlODZcdThlODhcdThlODlcdThlOGFcdThlOGJcdThlOGNcdThlOGRcdThlOGVcdThlOTFcdThlOTJcdThlOTNcdThlOTVcdThlOTZcdThlOTdcdThlOThcdThlOTlcdThlOWFcdThlOWJcdThlOWRcdThlOWZcdThlYTBcdThlYTFcdThlYTJcdThlYTNcdThlYTRcdThlYTVcdThlYTZcdThl''@;'; put 'put ''YTdcdThlYThcdThlYTlcdThlYWFcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjNcdThlYjRcdThlYjVcdThlYjZcdThlYjdcdThlYjhcdThlYjlcdThlYmJcdThlYmNcdThlYmRcdThlYmVcdThlYmZcdThlYzBcdThlYzFcdThlYzJcdWZmZmRcdThlYzNcdThlYzRcdThlYzVcdThlYzZc''@;'; put 'put ''dThlYzdcdThlYzhcdThlYzlcdThlY2FcdThlY2JcdThlY2NcdThlY2RcdThlY2ZcdThlZDBcdThlZDFcdThlZDJcdThlZDNcdThlZDRcdThlZDVcdThlZDZcdThlZDdcdThlZDhcdThlZDlcdThlZGFcdThlZGJcdThlZGNcdThlZGRcdThlZGVcdThlZGZcdThlZTBcdThlZTFcdThlZTJcdThl''@;'; put 'put ''ZTNcdThlZTRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVc''@;'; put 'put ''dTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgy''@;'; put 'put ''ZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVc''@;'; put 'put ''dTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVtt''@;'; put 'put ''XV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVm''@;'; put 'put ''XHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4''@;'; put 'put ''ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1''@;'; put 'put ''XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4''@;'; put 'put ''ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4Mzll''@;'; put 'put ''XHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4''@;'; put 'put ''M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJm''@;'; put 'put ''XHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0''@;'; put 'put ''ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1''@;'; put 'put ''OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZm''@;'; put 'put ''ZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1''@;'; put 'put ''OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4''@;'; put 'put ''NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1''@;'; put 'put ''NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNj''@;'; put 'put ''NFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjdcdTkw''@;'; put 'put ''MjhcdTkwMjlcdTkwMmFcdTkwMmJcdTkwMmNcdTkwMzBcdTkwMzFcdTkwMzJcdTkwMzNcdTkwMzRcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcdTkwNDlcdTkwNGFcdTkwNGJcdTkwNGNcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZc''@;'; put 'put ''dTkwNTlcdTkwNWFcdTkwNWNcdTkwNWRcdTkwNWVcdTkwNWZcdTkwNjBcdTkwNjFcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmZcdTkwNzBcdTkwNzFcdTkwNzJcdTkwNzNcdTkwNzZcdTkwNzdcdTkwNzhcdTkwNzlcdTkwN2FcdTkwN2JcdTkwN2NcdTkw''@;'; put 'put ''N2VcdTkwODFcdWZmZmRcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGNcdTkwOGRcdTkwOGVcdTkwOGZcdTkwOTBcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlc''@;'; put 'put ''dTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUz''@;'; put 'put ''ZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZc''@;'; put 'put ''dTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1''@;'; put 'put ''MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9yKHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5''@;'; put 'put ''MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3''@;'; put 'put ''XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5''@;'; put 'put ''MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4''@;'; put 'put ''XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1''@;'; put 'put ''NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0''@;'; put 'put ''XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1''@;'; put 'put ''Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1''@;'; put 'put ''OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4''@;'; put 'put ''OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1''@;'; put 'put ''OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFk''@;'; put 'put ''OFx1OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1''@;'; put 'put ''NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQz''@;'; put 'put ''NFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1''@;'; put 'put ''NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCttLEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTkxZTZcdTkxZTdcdTkxZThcdTkxZTlcdTkxZWFcdTkxZWJcdTkxZWNcdTkxZWRcdTkxZWVcdTkxZWZcdTkxZjBcdTkxZjFcdTkxZjJcdTkxZjNcdTkxZjRcdTkxZjVcdTkxZjZcdTkxZjdcdTkxZjhcdTkxZjlcdTkxZmFcdTkxZmJcdTkxZmNcdTkxZmRcdTkxZmVcdTkxZmZcdTkyMDBcdTky''@;'; put 'put ''MDFcdTkyMDJcdTkyMDNcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDhcdTkyMDlcdTkyMGFcdTkyMGJcdTkyMGNcdTkyMGRcdTkyMGVcdTkyMGZcdTkyMTBcdTkyMTFcdTkyMTJcdTkyMTNcdTkyMTRcdTkyMTVcdTkyMTZcdTkyMTdcdTkyMThcdTkyMTlcdTkyMWFcdTkyMWJcdTkyMWNc''@;'; put 'put ''dTkyMWRcdTkyMWVcdTkyMWZcdTkyMjBcdTkyMjFcdTkyMjJcdTkyMjNcdTkyMjRcdWZmZmRcdTkyMjVcdTkyMjZcdTkyMjdcdTkyMjhcdTkyMjlcdTkyMmFcdTkyMmJcdTkyMmNcdTkyMmRcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzFcdTkyMzJcdTkyMzNcdTkyMzRcdTkyMzVcdTkyMzZcdTky''@;'; put 'put ''MzdcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2JcdTkyM2NcdTkyM2RcdTkyM2VcdTkyM2ZcdTkyNDBcdTkyNDFcdTkyNDJcdTkyNDNcdTkyNDRcdTkyNDVcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhc''@;'; put 'put ''dTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5''@;'; put 'put ''OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNc''@;'; put 'put ''dTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5''@;'; put 'put ''MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5Mjdi''@;'; put 'put ''XHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5''@;'; put 'put ''Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVj''@;'; put 'put ''XHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5''@;'; put 'put ''NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRh''@;'; put 'put ''XHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2''@;'; put 'put ''Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1''@;'; put 'put ''OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJk''@;'; put 'put ''Y1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1''@;'; put 'put ''OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQw''@;'; put 'put ''ZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1''@;'; put 'put ''NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVh''@;'; put 'put ''N1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1''@;'; put 'put ''NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGFcdTkzMGJcdTkzMGNcdTkzMGRcdTkzMGVcdTkzMGZcdTkzMTBcdTkzMTFcdTkzMTJcdTkzMTNcdTkzMTRcdTkzMTVcdTkzMTZcdTkzMTdcdTkzMThcdTkzMTlcdTkzMWFcdTkzMWJcdTkzMWNcdTkzMWRcdTkzMWVc''@;'; put 'put ''dTkzMWZcdTkzMjBcdTkzMjFcdTkzMjJcdTkzMjNcdTkzMjRcdTkzMjVcdTkzMjZcdTkzMjdcdTkzMjhcdTkzMjlcdTkzMmFcdTkzMmJcdTkzMmNcdTkzMmRcdTkzMmVcdTkzMmZcdTkzMzBcdTkzMzFcdTkzMzJcdTkzMzNcdTkzMzRcdTkzMzVcdTkzMzZcdTkzMzdcdTkzMzhcdTkzMzlcdTkz''@;'; put 'put ''M2FcdTkzM2JcdTkzM2NcdTkzM2RcdTkzM2ZcdTkzNDBcdTkzNDFcdTkzNDJcdTkzNDNcdTkzNDRcdTkzNDVcdTkzNDZcdTkzNDdcdTkzNDhcdTkzNDlcdWZmZmRcdTkzNGFcdTkzNGJcdTkzNGNcdTkzNGRcdTkzNGVcdTkzNGZcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTNcdTkzNTRcdTkzNTVc''@;'; put 'put ''dTkzNTZcdTkzNTdcdTkzNThcdTkzNTlcdTkzNWFcdTkzNWJcdTkzNWNcdTkzNWRcdTkzNWVcdTkzNWZcdTkzNjBcdTkzNjFcdTkzNjJcdTkzNjNcdTkzNjRcdTkzNjVcdTkzNjZcdTkzNjdcdTkzNjhcdTkzNjlcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZm''@;'; put 'put ''ZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNc''@;'; put 'put ''dThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkw''@;'; put 'put ''NWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFc''@;'; put 'put ''dTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5Mzdl''@;'; put 'put ''XHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5''@;'; put 'put ''MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1''@;'; put 'put ''XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1''@;'; put 'put ''OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVj''@;'; put 'put ''XHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1''@;'; put 'put ''YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1''@;'; put 'put ''XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zv''@;'; put 'put ''cih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNk''@;'; put 'put ''Zlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1''@;'; put 'put ''OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQx''@;'; put 'put ''NVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1''@;'; put 'put ''N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2Yw''@;'; put 'put ''N1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1''@;'; put 'put ''N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNm''@;'; put 'put ''Mlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09''@;'; put 'put ''eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MmZcdTk0MzBcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0MzVcdTk0MzZcdTk0MzdcdTk0MzhcdTk0MzlcdTk0M2FcdTk0M2JcdTk0M2NcdTk0''@;'; put 'put ''M2RcdTk0M2ZcdTk0NDBcdTk0NDFcdTk0NDJcdTk0NDNcdTk0NDRcdTk0NDVcdTk0NDZcdTk0NDdcdTk0NDhcdTk0NDlcdTk0NGFcdTk0NGJcdTk0NGNcdTk0NGRcdTk0NGVcdTk0NGZcdTk0NTBcdTk0NTFcdTk0NTJcdTk0NTNcdTk0NTRcdTk0NTVcdTk0NTZcdTk0NTdcdTk0NThcdTk0NTlc''@;'; put 'put ''dTk0NWFcdTk0NWJcdTk0NWNcdTk0NWRcdTk0NWVcdTk0NWZcdTk0NjBcdTk0NjFcdTk0NjJcdTk0NjNcdTk0NjRcdTk0NjVcdTk0NjZcdTk0NjdcdTk0NjhcdTk0NjlcdTk0NmFcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmZcdWZmZmRcdTk0NzBcdTk0NzFcdTk0NzJcdTk0NzNcdTk0NzRcdTk0''@;'; put 'put ''NzVcdTk0NzZcdTk0NzdcdTk0NzhcdTk0NzlcdTk0N2FcdTk0N2JcdTk0N2NcdTk0N2RcdTk0N2VcdTk0N2ZcdTk0ODBcdTk0ODFcdTk0ODJcdTk0ODNcdTk0ODRcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBc''@;'; put 'put ''dTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3''@;'; put 'put ''NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNc''@;'; put 'put ''dTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4''@;'; put 'put ''YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIr''@;'; put 'put ''bSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5''@;'; put 'put ''NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkz''@;'; put 'put ''XHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5''@;'; put 'put ''NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5''@;'; put 'put ''XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2''@;'; put 'put ''OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThl''@;'; put 'put ''XHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4''@;'; put 'put ''ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIz''@;'; put 'put ''M11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1''@;'; put 'put ''OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYy''@;'; put 'put ''NFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1''@;'; put 'put ''OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4''@;'; put 'put ''M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1''@;'; put 'put ''NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZh''@;'; put 'put ''N1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1''@;'; put 'put ''ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFc''@;'; put 'put ''dTk2OWJcdTk2OWRcdTk2OWVcdTk2OWZcdTk2YTBcdTk2YTFcdTk2YTJcdTk2YTNcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YThcdTk2YTlcdTk2YWFcdTk2YWJcdTk2YWNcdTk2YWRcdTk2YWVcdTk2YWZcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2''@;'; put 'put ''YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBcdTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDZcdTk2ZDdcdTk2ZDhcdTk2ZDlcdTk2ZGFcdTk2ZGJcdTk2ZGNcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTFcdTk2ZTJcdTk2ZTNcdTk2ZTRcdTk2ZTVcdTk2ZTZcdTk2ZTdcdTk2ZWJc''@;'; put 'put ''dWZmZmRcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTdcdTk3''@;'; put 'put ''MThcdTk3MTlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MWZcdTk3MjBcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJc''@;'; put 'put ''dTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgw''@;'; put 'put ''ZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFc''@;'; put 'put ''dTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2''@;'; put 'put ''XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5''@;'; put 'put ''NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZm''@;'; put 'put ''XHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5''@;'; put 'put ''NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkw''@;'; put 'put ''XHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3''@;'; put 'put ''MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNi''@;'; put 'put ''XHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0pO2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdh''@;'; put 'put ''Mlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1''@;'; put 'put ''OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdk''@;'; put 'put ''Zlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1''@;'; put 'put ''OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4''@;'; put 'put ''MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1''@;'; put 'put ''Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5''@;'; put 'put ''Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIrbV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4MGZcdTk4''@;'; put 'put ''MTBcdTk4MTFcdTk4MTJcdTk4MTNcdTk4MTRcdTk4MTVcdTk4MTZcdTk4MTdcdTk4MThcdTk4MTlcdTk4MWFcdTk4MWJcdTk4MWNcdTk4MWRcdTk4MWVcdTk4MWZcdTk4MjBcdTk4MjFcdTk4MjJcdTk4MjNcdTk4MjRcdTk4MjVcdTk4MjZcdTk4MjdcdTk4MjhcdTk4MjlcdTk4MmFcdTk4MmJc''@;'; put 'put ''dTk4MmNcdTk4MmRcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzFcdTk4MzJcdTk4MzNcdTk4MzRcdTk4MzVcdTk4MzZcdTk4MzdcdTk4MzhcdTk4MzlcdTk4M2FcdTk4M2JcdTk4M2NcdTk4M2RcdTk4M2VcdTk4M2ZcdTk4NDBcdTk4NDFcdTk4NDJcdTk4NDNcdTk4NDRcdTk4NDVcdTk4NDZcdTk4''@;'; put 'put ''NDdcdTk4NDhcdTk4NDlcdTk4NGFcdTk4NGJcdTk4NGNcdTk4NGRcdWZmZmRcdTk4NGVcdTk4NGZcdTk4NTBcdTk4NTFcdTk4NTJcdTk4NTNcdTk4NTRcdTk4NTVcdTk4NTZcdTk4NTdcdTk4NThcdTk4NTlcdTk4NWFcdTk4NWJcdTk4NWNcdTk4NWRcdTk4NWVcdTk4NWZcdTk4NjBcdTk4NjFc''@;'; put 'put ''dTk4NjJcdTk4NjNcdTk4NjRcdTk4NjVcdTk4NjZcdTk4NjdcdTk4NjhcdTk4NjlcdTk4NmFcdTk4NmJcdTk4NmNcdTk4NmRcdTk4NmVcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1''@;'; put 'put ''NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRc''@;'; put 'put ''dTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0''@;'; put 'put ''YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2''@;'; put 'put ''XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5''@;'; put 'put ''OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4''@;'; put 'put ''XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5''@;'; put 'put ''NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2''@;'; put 'put ''XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5''@;'; put 'put ''NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTky''@;'; put 'put ''Mlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTkyOFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1''@;'; put 'put ''OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1''@;'; put 'put ''Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1''@;'; put 'put ''NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0''@;'; put 'put ''Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1''@;'; put 'put ''NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYx''@;'; put 'put ''NVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5OGNcdTk5OGVcdTk5OWFcdTk5OWJcdTk5OWNcdTk5OWRcdTk5OWVcdTk5OWZcdTk5YTBcdTk5YTFcdTk5YTJcdTk5YTNcdTk5YTRcdTk5YTZcdTk5YTdcdTk5YTlcdTk5YWFcdTk5YWJcdTk5YWNcdTk5YWRcdTk5YWVcdTk5YWZcdTk5''@;'; put 'put ''YjBcdTk5YjFcdTk5YjJcdTk5YjNcdTk5YjRcdTk5YjVcdTk5YjZcdTk5YjdcdTk5YjhcdTk5YjlcdTk5YmFcdTk5YmJcdTk5YmNcdTk5YmRcdTk5YmVcdTk5YmZcdTk5YzBcdTk5YzFcdTk5YzJcdTk5YzNcdTk5YzRcdTk5YzVcdTk5YzZcdTk5YzdcdTk5YzhcdTk5YzlcdTk5Y2FcdTk5Y2Jc''@;'; put 'put ''dTk5Y2NcdTk5Y2RcdTk5Y2VcdTk5Y2ZcdTk5ZDBcdTk5ZDFcdTk5ZDJcdTk5ZDNcdTk5ZDRcdTk5ZDVcdTk5ZDZcdTk5ZDdcdTk5ZDhcdWZmZmRcdTk5ZDlcdTk5ZGFcdTk5ZGJcdTk5ZGNcdTk5ZGRcdTk5ZGVcdTk5ZGZcdTk5ZTBcdTk5ZTFcdTk5ZTJcdTk5ZTNcdTk5ZTRcdTk5ZTVcdTk5''@;'; put 'put ''ZTZcdTk5ZTdcdTk5ZThcdTk5ZTlcdTk5ZWFcdTk5ZWJcdTk5ZWNcdTk5ZWRcdTk5ZWVcdTk5ZWZcdTk5ZjBcdTk5ZjFcdTk5ZjJcdTk5ZjNcdTk5ZjRcdTk5ZjVcdTk5ZjZcdTk5ZjdcdTk5ZjhcdTk5ZjlcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2Zc''@;'; put 'put ''dTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4''@;'; put 'put ''NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFc''@;'; put 'put ''dTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5''@;'; put 'put ''ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5''@;'; put 'put ''YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5''@;'; put 'put ''XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5''@;'; put 'put ''YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlh''@;'; put 'put ''XHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4''@;'; put 'put ''NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5''@;'; put 'put ''XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4''@;'; put 'put ''NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1''@;'; put 'put ''OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFj''@;'; put 'put ''Nlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1''@;'; put 'put ''OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFmMlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdh''@;'; put 'put ''ZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1''@;'; put 'put ''N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3''@;'; put 'put ''NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1''@;'; put 'put ''N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21d''@;'; put 'put ''KTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliMDdcdTliMDlcdTliMGFcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTFcdTliMTJcdTliMTRcdTliMTVcdTliMTZcdTliMTdcdTliMThcdTliMTlc''@;'; put 'put ''dTliMWFcdTliMWJcdTliMWNcdTliMWRcdTliMWVcdTliMjBcdTliMjFcdTliMjJcdTliMjRcdTliMjVcdTliMjZcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmJcdTliMmNcdTliMmRcdTliMmVcdTliMzBcdTliMzFcdTliMzNcdTliMzRcdTliMzVcdTliMzZcdTliMzdcdTliMzhcdTli''@;'; put 'put ''MzlcdTliM2FcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTVcdTliNTZcdTliNTdcdTliNThcdTliNTlcdTliNWFcdWZmZmRcdTliNWJcdTliNWNcdTliNWRcdTliNWVcdTliNWZcdTliNjBcdTliNjFc''@;'; put 'put ''dTliNjJcdTliNjNcdTliNjRcdTliNjVcdTliNjZcdTliNjdcdTliNjhcdTliNjlcdTliNmFcdTliNmJcdTliNmNcdTliNmRcdTliNmVcdTliNmZcdTliNzBcdTliNzFcdTliNzJcdTliNzNcdTliNzRcdTliNzVcdTliNzZcdTliNzdcdTliNzhcdTliNzlcdTliN2FcdTliN2JcdTdjMWZcdTdj''@;'; put 'put ''MmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFc''@;'; put 'put ''dTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdj''@;'; put 'put ''Y2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFc''@;'; put 'put ''dThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0''@;'; put 'put ''K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5''@;'; put 'put ''XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5''@;'; put 'put ''YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJm''@;'; put 'put ''XHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5''@;'; put 'put ''YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4''@;'; put 'put ''XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4''@;'; put 'put ''ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTlj''@;'; put 'put ''XHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYy''@;'; put 'put ''NzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJl''@;'; put 'put ''N1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1''@;'; put 'put ''OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMwOVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMx''@;'; put 'put ''ZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1''@;'; put 'put ''OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4''@;'; put 'put ''OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1''@;'; put 'put ''N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNi''@;'; put 'put ''M1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljM2NcdTljM2RcdTljM2VcdTljM2ZcdTljNDBcdTljNDFcdTljNDJcdTljNDNcdTljNDRcdTlj''@;'; put 'put ''NDVcdTljNDZcdTljNDdcdTljNDhcdTljNDlcdTljNGFcdTljNGJcdTljNGNcdTljNGRcdTljNGVcdTljNGZcdTljNTBcdTljNTFcdTljNTJcdTljNTNcdTljNTRcdTljNTVcdTljNTZcdTljNTdcdTljNThcdTljNTlcdTljNWFcdTljNWJcdTljNWNcdTljNWRcdTljNWVcdTljNWZcdTljNjBc''@;'; put 'put ''dTljNjFcdTljNjJcdTljNjNcdTljNjRcdTljNjVcdTljNjZcdTljNjdcdTljNjhcdTljNjlcdTljNmFcdTljNmJcdTljNmNcdTljNmRcdTljNmVcdTljNmZcdTljNzBcdTljNzFcdTljNzJcdTljNzNcdTljNzRcdTljNzVcdTljNzZcdTljNzdcdTljNzhcdTljNzlcdTljN2FcdWZmZmRcdTlj''@;'; put 'put ''N2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlcdTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmVcdTljYmZcdTljYzBcdTljYzFcdTljYzJcdTljYzhcdTljYzlcdTljZDFc''@;'; put 'put ''dTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3''@;'; put 'put ''YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVc''@;'; put 'put ''dTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTll''@;'; put 'put ''ZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5''@;'; put 'put ''Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1''@;'; put 'put ''XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5''@;'; put 'put ''ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNi''@;'; put 'put ''XHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsy''@;'; put 'put ''NDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1''@;'; put 'put ''OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2''@;'; put 'put ''M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1''@;'; put 'put ''OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5''@;'; put 'put ''OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDldW21dKTtmb3IoeFsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTNcdTlkYTRcdTlkYTVc''@;'; put 'put ''dTlkYTZcdTlkYTdcdTlkYThcdTlkYTlcdTlkYWFcdTlkYWJcdTlkYWNcdTlkYWRcdTlkYWVcdTlkYWZcdTlkYjBcdTlkYjFcdTlkYjJcdTlkYjNcdTlkYjRcdTlkYjVcdTlkYjZcdTlkYjdcdTlkYjhcdTlkYjlcdTlkYmFcdTlkYmJcdTlkYmNcdTlkYmRcdTlkYmVcdTlkYmZcdTlkYzBcdTlk''@;'; put 'put ''YzFcdTlkYzJcdTlkYzNcdTlkYzRcdTlkYzVcdTlkYzZcdTlkYzdcdTlkYzhcdTlkYzlcdTlkY2FcdTlkY2JcdTlkY2NcdTlkY2RcdTlkY2VcdTlkY2ZcdTlkZDBcdTlkZDFcdTlkZDJcdTlkZDNcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZDhcdTlkZDlcdTlkZGFcdTlkZGJcdTlkZGNc''@;'; put 'put ''dTlkZGRcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTFcdWZmZmRcdTlkZTJcdTlkZTNcdTlkZTRcdTlkZTVcdTlkZTZcdTlkZTdcdTlkZThcdTlkZTlcdTlkZWFcdTlkZWJcdTlkZWNcdTlkZWRcdTlkZWVcdTlkZWZcdTlkZjBcdTlkZjFcdTlkZjJcdTlkZjNcdTlkZjRcdTlkZjVcdTlkZjZcdTlk''@;'; put 'put ''ZjdcdTlkZjhcdTlkZjlcdTlkZmFcdTlkZmJcdTlkZmNcdTlkZmRcdTlkZmVcdTlkZmZcdTllMDBcdTllMDFcdTllMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy''@;'; put 'put ''NTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUwXVttXV09NjRlMyttLEZbNjRlMyttXT14WzI1MF1bbV0pO2Zvcih4WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1''@;'; put 'put ''OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUy''@;'; put 'put ''NFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1''@;'; put 'put ''OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5''@;'; put 'put ''YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG09MDttIT14WzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTFdW21dXT02NDI1NittLEZbNjQyNTYrbV09eFsyNTFdW21dKTtmb3IoeFsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTllYjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTll''@;'; put 'put ''Y2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhc''@;'; put 'put ''dTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlmMDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlm''@;'; put 'put ''MWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZcdTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUyXVttXV09NjQ1MTIrbSxGWzY0NTEyK21dPXhbMjUyXVttXSk7Zm9yKHhbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjMyXHU5ZjMzXHU5ZjM0XHU5ZjM1XHU5ZjM2XHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmXHU5ZjQwXHU5ZjQxXHU5ZjQyXHU5ZjQzXHU5ZjQ1XHU5ZjQ2XHU5ZjQ3XHU5ZjQ4XHU5ZjQ5XHU5ZjRhXHU5ZjRiXHU5ZjRjXHU5ZjRkXHU5ZjRlXHU5ZjRmXHU5''@;'; put 'put ''ZjUyXHU5ZjUzXHU5ZjU0XHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU5ZjU5XHU5ZjVhXHU5ZjViXHU5ZjVjXHU5ZjVkXHU5ZjVlXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjYyXHU5ZjYzXHU5ZjY0XHU5ZjY1XHU5ZjY2XHU5ZjY3XHU5ZjY4XHU5ZjY5XHU5ZjZhXHU5ZjZiXHU5ZjZjXHU5ZjZk''@;'; put 'put ''XHU5ZjZlXHU5ZjZmXHU5ZjcwXHU5ZjcxXHU5ZjcyXHU5ZjczXHU5Zjc0XHU5Zjc1XHU5Zjc2XHU5Zjc3XHU5Zjc4XHVmZmZkXHU5Zjc5XHU5ZjdhXHU5ZjdiXHU5ZjdjXHU5ZjdkXHU5ZjdlXHU5ZjgxXHU5ZjgyXHU5ZjhkXHU5ZjhlXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5ZjkzXHU5''@;'; put 'put ''Zjk0XHU5Zjk1XHU5Zjk2XHU5Zjk3XHU5Zjk4XHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE0XHU5ZmE1XHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1M11bbV1dPTY0NzY4K20sRls2NDc2OCttXT14WzI1M11bbV0pO2Zvcih4WzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjU0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNTRdW21dXT02NTAyNCttLEZbNjUwMjQrbV09eFsyNTRdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0o''@;'; put 'put ''KSxJZVs5NDldPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4''@;'; put 'put ''MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzEyOV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYlx1YWMwY1x1YWMwZFx1YWMwZVx1YWMwZlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNVx1YWMyNlx1YWMyN1x1YWMy''@;'; put 'put ''OFx1YWMyOVx1YWMyYVx1YWMyYlx1YWMyZVx1YWMzMlx1YWMzM1x1YWMzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MVx1YWM0Mlx1YWM0M1x1YWM0NFx1YWM0NVx1YWM0Nlx1''@;'; put 'put ''YWM0N1x1YWM0OFx1YWM0OVx1YWM0YVx1YWM0Y1x1YWM0ZVx1YWM0Zlx1YWM1MFx1YWM1MVx1YWM1Mlx1YWM1M1x1YWM1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZFx1YWM1ZVx1YWM1Zlx1YWM2MFx1YWM2''@;'; put 'put ''MVx1YWM2Mlx1YWM2M1x1YWM2NFx1YWM2NVx1YWM2Nlx1YWM2N1x1YWM2OFx1YWM2OVx1YWM2YVx1YWM2Ylx1YWM2Y1x1YWM2ZFx1YWM2ZVx1YWM2Zlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3Ylx1YWM3Y1x1YWM3ZFx1YWM3ZVx1YWM3Zlx1YWM4Mlx1YWM4N1x1YWM4OFx1''@;'; put 'put ''YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5NVx1YWM5Nlx1YWM5N1x1YWM5OFx1YWM5OVx1YWM5YVx1YWM5Ylx1YWM5ZVx1YWNhMlx1YWNhM1x1YWNhNFx1YWNhNVx1YWNhNlx1YWNhN1x1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMVx1YWNiMlx1YWNiM1x1YWNiNFx1YWNi''@;'; put 'put ''NVx1YWNiNlx1YWNiN1x1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZFx1YWNjZVx1YWNjZlx1YWNkMFx1YWNkMVx1YWNkMlx1YWNkM1x1YWNkNFx1YWNkNlx1YWNkOFx1YWNkOVx1YWNkYVx1YWNkYlx1''@;'; put 'put ''YWNkY1x1YWNkZFx1YWNkZVx1YWNkZlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmN1x1YWNmOFx1YWNmOVx1YWNmYVx1YWNmYlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwN1x1YWQwOFx1YWQw''@;'; put 'put ''OVx1YWQwYVx1YWQwYlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMjldW21dXT0zMzAyNCttLEZbMzMwMjQrbV09eFsxMjldW21dKTtmb3IoeFsx''@;'; put 'put ''MzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFk''@;'; put 'put ''MjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNc''@;'; put 'put ''dWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFk''@;'; put 'put ''NjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRc''@;'; put 'put ''dWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFk''@;'; put 'put ''YWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2Rc''@;'; put 'put ''dWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFk''@;'; put 'put ''ZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTMwXVttXV09MzMyODArbSxGWzMzMjgwK21dPXhbMTMw''@;'; put 'put ''XVttXSk7Zm9yKHhbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVh''@;'; put 'put ''ZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2''@;'; put 'put ''XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVhZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVh''@;'; put 'put ''ZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTcz''@;'; put 'put ''XHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVhZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVh''@;'; put 'put ''ZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlkXHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIy''@;'; put 'put ''XHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVhZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVh''@;'; put 'put ''ZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUxXHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzMV1bbV1dPTMzNTM2K20sRlsz''@;'; put 'put ''MzUzNittXT14WzEzMV1bbV0pO2Zvcih4WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZVx1YWVlZlx1YWVmMFx1YWVmMVx1YWVmMlx1YWVmM1x1YWVmNVx1''@;'; put 'put ''YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZFx1YWVmZVx1YWVmZlx1YWYwMFx1YWYwMVx1YWYwMlx1YWYwM1x1YWYwNFx1YWYwNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYx''@;'; put 'put ''MVx1YWYxMlx1YWYxM1x1YWYxNFx1YWYxNVx1YWYxNlx1YWYxN1x1YWYxOFx1YWYxOVx1YWYxYVx1YWYxYlx1YWYxY1x1YWYxZFx1YWYxZVx1YWYxZlx1YWYyMFx1YWYyMVx1YWYyMlx1YWYyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYyNFx1YWYyNVx1YWYyNlx1''@;'; put 'put ''YWYyN1x1YWYyOFx1YWYyOVx1YWYyYVx1YWYyYlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNVx1YWYzNlx1YWYzN1x1YWYzOFx1YWYzOVx1YWYzYVx1YWYzYlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YVx1YWY0Ylx1YWY0Y1x1YWY0ZFx1YWY0ZVx1YWY0''@;'; put 'put ''Zlx1YWY1MVx1YWY1Mlx1YWY1M1x1YWY1NFx1YWY1NVx1YWY1Nlx1YWY1N1x1YWY1OFx1YWY1OVx1YWY1YVx1YWY1Ylx1YWY1ZVx1YWY1Zlx1YWY2MFx1YWY2MVx1YWY2Mlx1YWY2M1x1YWY2Nlx1YWY2N1x1YWY2OFx1YWY2OVx1YWY2YVx1YWY2Ylx1YWY2Y1x1YWY2ZFx1YWY2ZVx1YWY2Zlx1''@;'; put 'put ''YWY3MFx1YWY3MVx1YWY3Mlx1YWY3M1x1YWY3NFx1YWY3NVx1YWY3Nlx1YWY3N1x1YWY3OFx1YWY3YVx1YWY3Ylx1YWY3Y1x1YWY3ZFx1YWY3ZVx1YWY3Zlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OVx1YWY4YVx1YWY4Ylx1YWY4Y1x1YWY4ZFx1YWY4ZVx1YWY4''@;'; put 'put ''Zlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5Nlx1YWY5N1x1YWY5OFx1YWY5OVx1YWY5YVx1YWY5Ylx1YWY5ZFx1YWY5ZVx1YWY5Zlx1YWZhMFx1YWZhMVx1YWZhMlx1YWZhM1x1YWZhNFx1YWZhNVx1YWZhNlx1YWZhN1x1YWZhOFx1YWZhOVx1YWZhYVx1YWZhYlx1YWZhY1x1YWZhZFx1YWZhZVx1''@;'; put 'put ''YWZhZlx1YWZiMFx1YWZiMVx1YWZiMlx1YWZiM1x1YWZiNFx1YWZiNVx1YWZiNlx1YWZiN1x1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzJdW21d''@;'; put 'put ''XT0zMzc5MittLEZbMzM3OTIrbV09eFsxMzJdW21dKTtmb3IoeFsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2Zc''@;'; put 'put ''dWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFm''@;'; put 'put ''ZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVc''@;'; put 'put ''dWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIw''@;'; put 'put ''MjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJc''@;'; put 'put ''dWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIw''@;'; put 'put ''NmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlc''@;'; put 'put ''dWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzM11bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTMzXVttXV09MzQwNDgrbSxGWzM0MDQ4K21dPXhbMTMzXVttXSk7Zm9yKHhbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3''@;'; put 'put ''XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMwXHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHVi''@;'; put 'put ''MGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHViMGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHVi''@;'; put 'put ''MTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNj''@;'; put 'put ''XHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHVi''@;'; put 'put ''MTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHViMTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgz''@;'; put 'put ''XHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTM0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzRdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzEzNF1bbV1dPTM0MzA0K20sRlszNDMwNCttXT14WzEzNF1bbV0pO2Zvcih4WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjE5ZVx1YjE5Zlx1YjFhMFx1YjFhMVx1YjFhMlx1YjFh''@;'; put 'put ''M1x1YjFhNFx1YjFhNVx1YjFhNlx1YjFhN1x1YjFhOVx1YjFhYVx1YjFhYlx1YjFhY1x1YjFhZFx1YjFhZVx1YjFhZlx1YjFiMFx1YjFiMVx1YjFiMlx1YjFiM1x1YjFiNFx1YjFiNVx1YjFiNlx1YjFiN1x1YjFiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFiOVx1''@;'; put 'put ''YjFiYVx1YjFiYlx1YjFiY1x1YjFiZFx1YjFiZVx1YjFiZlx1YjFjMFx1YjFjMVx1YjFjMlx1YjFjM1x1YjFjNFx1YjFjNVx1YjFjNlx1YjFjN1x1YjFjOFx1YjFjOVx1YjFjYVx1YjFjYlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFkNlx1YjFkN1x1YjFkOFx1YjFkOVx1YjFkYVx1YjFkYlx1YjFkZVx1YjFlMFx1YjFlMVx1YjFlMlx1YjFlM1x1YjFlNFx1YjFlNVx1YjFlNlx1YjFlN1x1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMVx1YjFmMlx1YjFmM1x1YjFmNFx1''@;'; put 'put ''YjFmNVx1YjFmNlx1YjFmN1x1YjFmOFx1YjFmYVx1YjFmY1x1YjFmZVx1YjFmZlx1YjIwMFx1YjIwMVx1YjIwMlx1YjIwM1x1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZFx1YjIwZVx1YjIwZlx1YjIxMFx1YjIxMVx1YjIxMlx1YjIxM1x1YjIxNlx1YjIxOFx1YjIxYVx1YjIxYlx1YjIx''@;'; put 'put ''Y1x1YjIxZFx1YjIxZVx1YjIxZlx1YjIyMVx1YjIyMlx1YjIyM1x1YjIyNFx1YjIyNVx1YjIyNlx1YjIyN1x1YjIyOFx1YjIyOVx1YjIyYVx1YjIyYlx1YjIyY1x1YjIyZFx1YjIyZVx1YjIyZlx1YjIzMFx1YjIzMVx1YjIzMlx1YjIzM1x1YjIzNVx1YjIzNlx1YjIzN1x1YjIzOFx1YjIzOVx1''@;'; put 'put ''YjIzYVx1YjIzYlx1YjIzZFx1YjIzZVx1YjIzZlx1YjI0MFx1YjI0MVx1YjI0Mlx1YjI0M1x1YjI0NFx1YjI0NVx1YjI0Nlx1YjI0N1x1YjI0OFx1YjI0OVx1YjI0YVx1YjI0Ylx1YjI0Y1x1YjI0ZFx1YjI0ZVx1YjI0Zlx1YjI1MFx1YjI1MVx1YjI1Mlx1YjI1M1x1YjI1NFx1YjI1NVx1YjI1''@;'; put 'put ''Nlx1YjI1N1x1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MVx1YjI2Mlx1YjI2M1x1YjI2NFx1YjI2NVx1YjI2Nlx1YjI2N1x1YjI2YVx1YjI2Ylx1YjI2Y1x1YjI2ZFx1YjI2ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzVdW21dXT0zNDU2MCttLEZbMzQ1NjArbV09eFsxMzVdW21dKTtmb3IoeFsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIy''@;'; put 'put ''NzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFc''@;'; put 'put ''dWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIz''@;'; put 'put ''MDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFc''@;'; put 'put ''dWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIz''@;'; put 'put ''NDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzZdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzEzNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM2XVttXV09MzQ4MTYrbSxGWzM0ODE2K21dPXhbMTM2XVttXSk7Zm9yKHhbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHVi''@;'; put 'put ''MzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHVi''@;'; put 'put ''M2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViM2FlXHViM2FmXHViM2IwXHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2Mx''@;'; put 'put ''XHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHVi''@;'; put 'put ''M2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5''@;'; put 'put ''XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHViNDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHVi''@;'; put 'put ''NDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMzXHViNDM1XHViNDM2XHViNDM3XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxMzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzEzN11bbV1dPTM1MDcyK20sRlszNTA3MittXT14WzEzN11bbV0pO2Zvcih4WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1YjQ0NVx1YjQ0Nlx1YjQ0N1x1YjQ0OFx1YjQ0OVx1YjQ0YVx1YjQ0Ylx1YjQ0Y1x1YjQ0ZFx1YjQ0ZVx1YjQ0Zlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OVx1YjQ1YVx1YjQ1Ylx1YjQ1Y1x1YjQ1ZFx1YjQ1ZVx1YjQ1Zlx1YjQ2Mlx1YjQ2NFx1YjQ2Nlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ2N1x1YjQ2OFx1YjQ2OVx1YjQ2YVx1YjQ2Ylx1YjQ2ZFx1YjQ2ZVx1YjQ2Zlx1YjQ3MFx1YjQ3MVx1YjQ3Mlx1YjQ3M1x1YjQ3NFx1YjQ3NVx1YjQ3Nlx1YjQ3N1x1YjQ3OFx1YjQ3OVx1YjQ3YVx1YjQ3Ylx1YjQ3Y1x1YjQ3ZFx1''@;'; put 'put ''YjQ3ZVx1YjQ3Zlx1YjQ4MVx1YjQ4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ4M1x1YjQ4NFx1YjQ4NVx1YjQ4Nlx1YjQ4N1x1YjQ4OVx1YjQ4YVx1YjQ4Ylx1YjQ4Y1x1YjQ4ZFx1YjQ4ZVx1YjQ4Zlx1YjQ5MFx1YjQ5MVx1YjQ5Mlx1YjQ5M1x1YjQ5NFx1YjQ5''@;'; put 'put ''NVx1YjQ5Nlx1YjQ5N1x1YjQ5OFx1YjQ5OVx1YjQ5YVx1YjQ5Ylx1YjQ5Y1x1YjQ5ZVx1YjQ5Zlx1YjRhMFx1YjRhMVx1YjRhMlx1YjRhM1x1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZFx1YjRhZVx1YjRhZlx1YjRiMFx1YjRiMVx1YjRiMlx1YjRiM1x1YjRiNFx1''@;'; put 'put ''YjRiNlx1YjRiOFx1YjRiYVx1YjRiYlx1YjRiY1x1YjRiZFx1YjRiZVx1YjRiZlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOVx1YjRjYVx1YjRjYlx1YjRjY1x1YjRjZFx1YjRjZVx1YjRjZlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNlx1YjRkN1x1YjRk''@;'; put 'put ''OFx1YjRkOVx1YjRkYVx1YjRkYlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRlN1x1YjRlOFx1YjRlOVx1YjRlYVx1YjRlYlx1YjRlZVx1YjRmMFx1YjRmMlx1YjRmM1x1YjRmNFx1YjRmNVx1YjRmNlx1YjRmN1x1YjRmOVx1YjRmYVx1YjRmYlx1YjRmY1x1YjRmZFx1YjRmZVx1''@;'; put 'put ''YjRmZlx1YjUwMFx1YjUwMVx1YjUwMlx1YjUwM1x1YjUwNFx1YjUwNVx1YjUwNlx1YjUwN1x1YjUwOFx1YjUwOVx1YjUwYVx1YjUwYlx1YjUwY1x1YjUwZFx1YjUwZVx1YjUwZlx1YjUxMFx1YjUxMVx1YjUxMlx1YjUxM1x1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxMzhdW21dXT0zNTMyOCttLEZbMzUzMjgrbV09eFsxMzhdW21dKTtmb3IoeFsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1''@;'; put 'put ''NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRc''@;'; put 'put ''dWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1''@;'; put 'put ''N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVc''@;'; put 'put ''dWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1''@;'; put 'put ''YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJc''@;'; put 'put ''dWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1''@;'; put 'put ''ZmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxMzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTM5XVttXV09MzU1ODQrbSxGWzM1NTg0K21dPXhbMTM5XVttXSk7Zm9yKHhbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHVi''@;'; put 'put ''NjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHViNjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMx''@;'; put 'put ''XHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHVi''@;'; put 'put ''NjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHViNjUxXHViNjUyXHViNjUzXHViNjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1''@;'; put 'put ''XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcxXHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHVi''@;'; put 'put ''NjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHViNjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlm''@;'; put 'put ''XHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHVi''@;'; put 'put ''NmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0MF1bbV1dPTM1ODQwK20sRlszNTg0MCttXT14WzE0MF1bbV0pO2Zvcih4WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZjM1x1YjZjNFx1YjZjNVx1YjZjNlx1YjZjN1x1YjZjOFx1YjZjOVx1YjZjYVx1YjZjYlx1YjZjY1x1YjZjZFx1YjZjZVx1YjZjZlx1YjZkMFx1YjZkMVx1YjZkMlx1YjZkM1x1YjZkNVx1YjZkNlx1YjZkN1x1''@;'; put 'put ''YjZkOFx1YjZkOVx1YjZkYVx1YjZkYlx1YjZkY1x1YjZkZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZkZVx1YjZkZlx1YjZlMFx1YjZlMVx1YjZlMlx1YjZlM1x1YjZlNFx1YjZlNVx1YjZlNlx1YjZlN1x1YjZlOFx1YjZlOVx1YjZlYVx1YjZlYlx1YjZlY1x1YjZl''@;'; put 'put ''ZFx1YjZlZVx1YjZlZlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZmYlx1YjZmY1x1YjZmZFx1YjZmZVx1YjZmZlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNlx1YjcwN1x1YjcwOFx1''@;'; put 'put ''YjcwOVx1YjcwYVx1YjcwYlx1YjcwY1x1YjcwZFx1YjcwZVx1YjcwZlx1YjcxMFx1YjcxMVx1YjcxMlx1YjcxM1x1YjcxNFx1YjcxNVx1YjcxNlx1YjcxN1x1YjcxOFx1YjcxOVx1YjcxYVx1YjcxYlx1YjcxY1x1YjcxZFx1YjcxZVx1YjcxZlx1YjcyMFx1YjcyMVx1YjcyMlx1YjcyM1x1Yjcy''@;'; put 'put ''NFx1YjcyNVx1YjcyNlx1YjcyN1x1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMVx1YjczMlx1YjczM1x1YjczNFx1YjczNVx1YjczNlx1YjczN1x1YjczYVx1YjczY1x1YjczZFx1YjczZVx1YjczZlx1Yjc0MFx1Yjc0MVx1Yjc0Mlx1Yjc0M1x1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1''@;'; put 'put ''Yjc0YVx1Yjc0Ylx1Yjc0ZFx1Yjc0ZVx1Yjc0Zlx1Yjc1MFx1Yjc1MVx1Yjc1Mlx1Yjc1M1x1Yjc1Nlx1Yjc1N1x1Yjc1OFx1Yjc1OVx1Yjc1YVx1Yjc1Ylx1Yjc1Y1x1Yjc1ZFx1Yjc1ZVx1Yjc1Zlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OVx1Yjc2YVx1Yjc2''@;'; put 'put ''Ylx1Yjc2Y1x1Yjc2ZFx1Yjc2ZVx1Yjc2Zlx1Yjc3Mlx1Yjc3NFx1Yjc3Nlx1Yjc3N1x1Yjc3OFx1Yjc3OVx1Yjc3YVx1Yjc3Ylx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NVx1Yjc4Nlx1Yjc4N1x1Yjc4OFx1Yjc4OVx1Yjc4YVx1Yjc4Ylx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1''@;'; put 'put ''Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDFdW21dXT0zNjA5NittLEZbMzYwOTYrbV09eFsxNDFdW21dKTtmb3IoeFsxNDJdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3Yjlc''@;'; put 'put ''dWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3''@;'; put 'put ''ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZc''@;'; put 'put ''dWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4''@;'; put 'put ''MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNc''@;'; put 'put ''dWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4''@;'; put 'put ''NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2Rc''@;'; put 'put ''dWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQyXVttXV09MzYzNTIrbSxGWzM2MzUyK21dPXhbMTQyXVttXSk7Zm9y''@;'; put 'put ''KHhbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1''@;'; put 'put ''XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHViODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHVi''@;'; put 'put ''OGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJhXHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4''@;'; put 'put ''XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHViOGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHVi''@;'; put 'put ''OGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZjXHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBl''@;'; put 'put ''XHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHViOTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHVi''@;'; put 'put ''OTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRi''@;'; put 'put ''XHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0M11bbV1dPTM2NjA4K20sRlszNjYwOCttXT14''@;'; put 'put ''WzE0M11bbV0pO2Zvcih4WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MVx1Yjk2Mlx1Yjk2M1x1Yjk2NFx1Yjk2NVx1Yjk2Nlx1Yjk2N1x1Yjk2YVx1Yjk2''@;'; put 'put ''Y1x1Yjk2ZVx1Yjk2Zlx1Yjk3MFx1Yjk3MVx1Yjk3Mlx1Yjk3M1x1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk3ZVx1Yjk3Zlx1Yjk4MFx1Yjk4MVx1Yjk4Mlx1Yjk4M1x1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1''@;'; put 'put ''Yjk4Y1x1Yjk4Zlx1Yjk5MFx1Yjk5MVx1Yjk5Mlx1Yjk5M1x1Yjk5NFx1Yjk5NVx1Yjk5Nlx1Yjk5N1x1Yjk5OFx1Yjk5OVx1Yjk5YVx1Yjk5Ylx1Yjk5Y1x1Yjk5ZFx1Yjk5ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk5Zlx1YjlhMFx1YjlhMVx1YjlhMlx1Yjlh''@;'; put 'put ''M1x1YjlhNFx1YjlhNVx1YjlhNlx1YjlhN1x1YjlhOFx1YjlhOVx1YjlhYVx1YjlhYlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNVx1YjliNlx1YjliN1x1YjliOFx1YjliOVx1YjliYVx1YjliYlx1YjliZVx1YjljMFx1YjljMlx1YjljM1x1YjljNFx1YjljNVx1YjljNlx1''@;'; put 'put ''YjljN1x1YjljYVx1YjljYlx1YjljZFx1YjlkM1x1YjlkNFx1YjlkNVx1YjlkNlx1YjlkN1x1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZFx1YjllZVx1YjllZlx1YjlmMFx1YjlmMVx1YjlmMlx1YjlmM1x1YjlmNlx1Yjlm''@;'; put 'put ''Ylx1YjlmY1x1YjlmZFx1YjlmZVx1YjlmZlx1YmEwMlx1YmEwM1x1YmEwNFx1YmEwNVx1YmEwNlx1YmEwN1x1YmEwOVx1YmEwYVx1YmEwYlx1YmEwY1x1YmEwZFx1YmEwZVx1YmEwZlx1YmExMFx1YmExMVx1YmExMlx1YmExM1x1YmExNFx1YmExNlx1YmExN1x1YmExOFx1YmExOVx1YmExYVx1''@;'; put 'put ''YmExYlx1YmExY1x1YmExZFx1YmExZVx1YmExZlx1YmEyMFx1YmEyMVx1YmEyMlx1YmEyM1x1YmEyNFx1YmEyNVx1YmEyNlx1YmEyN1x1YmEyOFx1YmEyOVx1YmEyYVx1YmEyYlx1YmEyY1x1YmEyZFx1YmEyZVx1YmEyZlx1YmEzMFx1YmEzMVx1YmEzMlx1YmEzM1x1YmEzNFx1YmEzNVx1YmEz''@;'; put 'put ''Nlx1YmEzN1x1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDRdW21dXT0zNjg2NCtt''@;'; put 'put ''LEZbMzY4NjQrbV09eFsxNDRdW21dKTtmb3IoeFsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJh''@;'; put 'put ''NWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2Fc''@;'; put 'put ''dWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJh''@;'; put 'put ''OTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZc''@;'; put 'put ''dWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJh''@;'; put 'put ''ZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVc''@;'; put 'put ''dWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJi''@;'; put 'put ''MTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ1''@;'; put 'put ''XVttXV09MzcxMjArbSxGWzM3MTIwK21dPXhbMTQ1XVttXSk7Zm9yKHhbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHVi''@;'; put 'put ''YjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5''@;'; put 'put ''XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi''@;'; put 'put ''YjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHViYjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhm''@;'; put 'put ''XHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjljXHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHVi''@;'; put 'put ''YmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHViYmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNm''@;'; put 'put ''XHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRkXHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHVi''@;'; put 'put ''YmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNDZdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzE0Nl1bbV1dPTM3Mzc2K20sRlszNzM3NittXT14WzE0Nl1bbV0pO2Zvcih4WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMwM1x1YmMwNFx1YmMwNVx1YmMwNlx1YmMwN1x1YmMwYVx1YmMwZVx1''@;'; put 'put ''YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMzNlx1YmMzN1x1YmMz''@;'; put 'put ''OVx1YmMzYVx1YmMzYlx1YmMzY1x1YmMzZFx1YmMzZVx1YmMzZlx1YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MVx1YmM1Mlx1YmM1M1x1YmM1NFx1YmM1NVx1YmM1Nlx1YmM1N1x1YmM1OFx1YmM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZVx1YmM1Zlx1YmM2MFx1YmM2MVx1YmM2Mlx1YmM2M1x1YmM2NFx1YmM2NVx1YmM2Nlx1YmM2N1x1YmM2OFx1YmM2OVx1YmM2YVx1YmM2Ylx1YmM2Y1x1YmM2ZFx1YmM2ZVx1YmM2Zlx1YmM3MFx1YmM3MVx1YmM3Mlx1YmM3M1x1YmM3''@;'; put 'put ''NFx1YmM3NVx1YmM3Nlx1YmM3N1x1YmM3OFx1YmM3OVx1YmM3YVx1YmM3Ylx1YmM3Y1x1YmM3ZFx1YmM3ZVx1YmM3Zlx1YmM4MFx1YmM4MVx1YmM4Mlx1YmM4M1x1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4Zlx1YmM5MFx1YmM5MVx1YmM5Mlx1YmM5M1x1YmM5Nlx1YmM5OFx1''@;'; put 'put ''YmM5Ylx1YmM5Y1x1YmM5ZFx1YmM5ZVx1YmM5Zlx1YmNhMlx1YmNhM1x1YmNhNVx1YmNhNlx1YmNhOVx1YmNhYVx1YmNhYlx1YmNhY1x1YmNhZFx1YmNhZVx1YmNhZlx1YmNiMlx1YmNiNlx1YmNiN1x1YmNiOFx1YmNiOVx1YmNiYVx1YmNiYlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNj''@;'; put 'put ''M1x1YmNjNVx1YmNjNlx1YmNjN1x1YmNjOFx1YmNjOVx1YmNjYVx1YmNjYlx1YmNjY1x1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZFx1YmNkZVx1YmNkZlx1YmNlMFx1YmNlMVx1YmNlMlx1YmNlM1x1YmNlNFx1YmNlNVx1YmNlNlx1''@;'; put 'put ''YmNlN1x1YmNlOFx1YmNlOVx1YmNlYVx1YmNlYlx1YmNlY1x1YmNlZFx1YmNlZVx1YmNlZlx1YmNmMFx1YmNmMVx1YmNmMlx1YmNmM1x1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTQ3XVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNDddW21dXT0zNzYzMittLEZbMzc2MzIrbV09eFsxNDddW21dKTtmb3IoeFsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJc''@;'; put 'put ''dWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJk''@;'; put 'put ''MWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJk''@;'; put 'put ''NTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVc''@;'; put 'put ''dWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJk''@;'; put 'put ''OWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRc''@;'; put 'put ''dWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNDhdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTQ4XVttXV09Mzc4ODgrbSxGWzM3ODg4K21dPXhbMTQ4XVttXSk7Zm9yKHhbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2''@;'; put 'put ''XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHViZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEz''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFhXHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHVi''@;'; put 'put ''ZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHViZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRi''@;'; put 'put ''XHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHVi''@;'; put 'put ''ZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHViZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEw''@;'; put 'put ''XHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFkXHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTQ5XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsxNDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE0OV1bbV1dPTM4MTQ0K20sRlszODE0NCttXT14WzE0OV1bbV0pO2Zvcih4WzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVi''@;'; put 'put ''OFx1YmViOVx1YmViYVx1YmViYlx1YmViY1x1YmViZFx1YmViZVx1YmViZlx1YmVjMFx1YmVjMVx1YmVjMlx1YmVjM1x1YmVjNFx1YmVjNVx1YmVjNlx1YmVjN1x1YmVjOFx1YmVjOVx1YmVjYVx1YmVjYlx1YmVjY1x1YmVjZFx1YmVjZVx1YmVjZlx1YmVkMlx1YmVkM1x1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVkNVx1YmVkNlx1YmVkOVx1YmVkYVx1YmVkYlx1YmVkY1x1YmVkZFx1YmVkZVx1YmVkZlx1YmVlMVx1YmVlMlx1YmVlNlx1YmVlN1x1YmVlOFx1YmVlOVx1YmVlYVx1YmVlYlx1YmVlZFx1YmVlZVx1YmVlZlx1YmVmMFx1YmVmMVx1YmVmMlx1YmVm''@;'; put 'put ''M1x1YmVmNFx1YmVmNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVmNlx1YmVmN1x1YmVmOFx1YmVmOVx1YmVmYVx1YmVmYlx1YmVmY1x1YmVmZFx1YmVmZVx1YmVmZlx1YmYwMFx1YmYwMlx1YmYwM1x1YmYwNFx1YmYwNVx1YmYwNlx1YmYwN1x1YmYwYVx1YmYwYlx1''@;'; put 'put ''YmYwY1x1YmYwZFx1YmYwZVx1YmYwZlx1YmYxMFx1YmYxMVx1YmYxMlx1YmYxM1x1YmYxNFx1YmYxNVx1YmYxNlx1YmYxN1x1YmYxYVx1YmYxZVx1YmYxZlx1YmYyMFx1YmYyMVx1YmYyMlx1YmYyM1x1YmYyNFx1YmYyNVx1YmYyNlx1YmYyN1x1YmYyOFx1YmYyOVx1YmYyYVx1YmYyYlx1YmYy''@;'; put 'put ''Y1x1YmYyZFx1YmYyZVx1YmYyZlx1YmYzMFx1YmYzMVx1YmYzMlx1YmYzM1x1YmYzNFx1YmYzNVx1YmYzNlx1YmYzN1x1YmYzOFx1YmYzOVx1YmYzYVx1YmYzYlx1YmYzY1x1YmYzZFx1YmYzZVx1YmYzZlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OVx1YmY0YVx1YmY0Ylx1''@;'; put 'put ''YmY0Y1x1YmY0ZFx1YmY0ZVx1YmY0Zlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1Nlx1YmY1N1x1YmY1OFx1YmY1OVx1YmY1YVx1YmY1Ylx1YmY1Y1x1YmY1ZFx1YmY1ZVx1YmY1Zlx1YmY2MFx1YmY2MVx1YmY2Mlx1YmY2M1x1YmY2NFx1YmY2NVx1YmY2Nlx1YmY2N1x1YmY2OFx1YmY2OVx1YmY2''@;'; put 'put ''YVx1YmY2Ylx1YmY2Y1x1YmY2ZFx1YmY2ZVx1YmY2Zlx1YmY3MFx1YmY3MVx1YmY3Mlx1YmY3M1x1YmY3NFx1YmY3NVx1YmY3Nlx1YmY3N1x1YmY3OFx1YmY3OVx1YmY3YVx1YmY3Ylx1YmY3Y1x1YmY3ZFx1YmY3ZVx1YmY3Zlx1YmY4MFx1YmY4MVx1YmY4Mlx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTBdW21dXT0zODQwMCttLEZbMzg0MDArbV09eFsxNTBdW21dKTtmb3IoeFsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJm''@;'; put 'put ''YjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2Fc''@;'; put 'put ''dWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJm''@;'; put 'put ''ZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhc''@;'; put 'put ''dWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMw''@;'; put 'put ''MjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsxNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTUxXVttXV09Mzg2NTYrbSxGWzM4NjU2K21dPXhbMTUxXVttXSk7Zm9yKHhbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVjMDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5''@;'; put 'put ''XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxXHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVj''@;'; put 'put ''MDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4''@;'; put 'put ''XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVj''@;'; put 'put ''MGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRl''@;'; put 'put ''XHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVlXHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVj''@;'; put 'put ''MTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJi''@;'; put 'put ''XHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1Ml1bbV1dPTM4OTEyK20sRlszODkxMittXT14WzE1Ml1bbV0pO2Zvcih4WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MVx1YzE0Mlx1YzE0M1x1YzE0NFx1YzE0NVx1YzE0Nlx1YzE0N1x1YzE0YVx1YzE0ZVx1YzE0Zlx1YzE1MFx1YzE1''@;'; put 'put ''MVx1YzE1Mlx1YzE1M1x1YzE1Nlx1YzE1N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZFx1YzE1ZVx1YzE1Zlx1YzE2MFx1YzE2MVx1YzE2Mlx1YzE2M1x1YzE2Nlx1YzE2YVx1YzE2Ylx1YzE2Y1x1YzE2ZFx1YzE2ZVx1YzE2Zlx1''@;'; put 'put ''YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1YzE3OVx1YzE3YVx1YzE3Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE3Y1x1YzE3ZFx1YzE3ZVx1YzE3Zlx1YzE4MFx1YzE4MVx1YzE4Mlx1YzE4M1x1YzE4NFx1YzE4Nlx1YzE4N1x1YzE4OFx1YzE4''@;'; put 'put ''OVx1YzE4YVx1YzE4Ylx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5N1x1YzE5OFx1YzE5OVx1YzE5YVx1YzE5Ylx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMVx1YzFiMlx1YzFiM1x1''@;'; put 'put ''YzFiNFx1YzFiNVx1YzFiNlx1YzFiN1x1YzFiOFx1YzFiOVx1YzFiYVx1YzFiYlx1YzFiY1x1YzFiZVx1YzFiZlx1YzFjMFx1YzFjMVx1YzFjMlx1YzFjM1x1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZFx1YzFjZVx1YzFjZlx1YzFkMFx1YzFkMVx1YzFkMlx1YzFk''@;'; put 'put ''M1x1YzFkNVx1YzFkNlx1YzFkOVx1YzFkYVx1YzFkYlx1YzFkY1x1YzFkZFx1YzFkZVx1YzFkZlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOVx1YzFlYVx1YzFlYlx1YzFlY1x1YzFlZFx1YzFlZVx1YzFlZlx1YzFmMlx1YzFmNFx1YzFmNVx1YzFmNlx1YzFmN1x1''@;'; put 'put ''YzFmOFx1YzFmOVx1YzFmYVx1YzFmYlx1YzFmZVx1YzFmZlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNVx1YzIwNlx1YzIwN1x1YzIwOFx1YzIwOVx1YzIwYVx1YzIwYlx1YzIwZVx1YzIxMFx1YzIxMlx1YzIxM1x1YzIxNFx1YzIxNVx1YzIxNlx1YzIxN1x1YzIxYVx1YzIxYlx1YzIxZFx1YzIx''@;'; put 'put ''ZVx1YzIyMVx1YzIyMlx1YzIyM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTNdW21dXT0zOTE2OCttLEZbMzkxNjgrbV09eFsxNTNdW21dKTtmb3IoeFsxNTRdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMy''@;'; put 'put ''M2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlc''@;'; put 'put ''dWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMy''@;'; put 'put ''NzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdc''@;'; put 'put ''dWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMy''@;'; put 'put ''YmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFc''@;'; put 'put ''dWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMz''@;'; put 'put ''MDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU0XVttXV09Mzk0MjQrbSxGWzM5NDI0K21dPXhbMTU0XVttXSk7Zm9yKHhbMTU1XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVj''@;'; put 'put ''MzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNm''@;'; put 'put ''XHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRjXHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVj''@;'; put 'put ''MzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVjMzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2''@;'; put 'put ''XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVj''@;'; put 'put ''Mzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVjM2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0''@;'; put 'put ''XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2MxXHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVj''@;'; put 'put ''M2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE1NV1bbV1dPTM5NjgwK20sRlszOTY4MCttXT14WzE1NV1bbV0p''@;'; put 'put ''O2Zvcih4WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlM1x1YzNlNFx1YzNlNVx1YzNlNlx1YzNlN1x1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZVx1YzNlZlx1YzNmMFx1''@;'; put 'put ''YzNmMVx1YzNmMlx1YzNmM1x1YzNmNlx1YzNmN1x1YzNmOVx1YzNmYVx1YzNmYlx1YzNmY1x1YzNmZFx1YzNmZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNmZlx1YzQwMFx1YzQwMVx1YzQwMlx1YzQwM1x1YzQwNFx1YzQwNVx1YzQwNlx1YzQwN1x1YzQwOVx1YzQw''@;'; put 'put ''YVx1YzQwYlx1YzQwY1x1YzQwZFx1YzQwZVx1YzQwZlx1YzQxMVx1YzQxMlx1YzQxM1x1YzQxNFx1YzQxNVx1YzQxNlx1YzQxN1x1YzQxOFx1YzQxOVx1YzQxYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzQxYlx1YzQxY1x1YzQxZFx1YzQxZVx1YzQxZlx1YzQyMFx1''@;'; put 'put ''YzQyMVx1YzQyMlx1YzQyM1x1YzQyNVx1YzQyNlx1YzQyN1x1YzQyOFx1YzQyOVx1YzQyYVx1YzQyYlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNVx1YzQzNlx1YzQzN1x1YzQzOFx1YzQzOVx1YzQzYVx1YzQzYlx1YzQzZVx1YzQzZlx1YzQ0MFx1YzQ0MVx1YzQ0''@;'; put 'put ''Mlx1YzQ0M1x1YzQ0NFx1YzQ0NVx1YzQ0Nlx1YzQ0N1x1YzQ0OVx1YzQ0YVx1YzQ0Ylx1YzQ0Y1x1YzQ0ZFx1YzQ0ZVx1YzQ0Zlx1YzQ1MFx1YzQ1MVx1YzQ1Mlx1YzQ1M1x1YzQ1NFx1YzQ1NVx1YzQ1Nlx1YzQ1N1x1YzQ1OFx1YzQ1OVx1YzQ1YVx1YzQ1Ylx1YzQ1Y1x1YzQ1ZFx1YzQ1ZVx1''@;'; put 'put ''YzQ1Zlx1YzQ2MFx1YzQ2MVx1YzQ2Mlx1YzQ2M1x1YzQ2Nlx1YzQ2N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZFx1YzQ2ZVx1YzQ2Zlx1YzQ3MFx1YzQ3MVx1YzQ3Mlx1YzQ3M1x1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YVx1YzQ3Ylx1YzQ3Y1x1YzQ3ZFx1YzQ3ZVx1YzQ3Zlx1YzQ4MVx1YzQ4''@;'; put 'put ''Mlx1YzQ4M1x1YzQ4NFx1YzQ4NVx1YzQ4Nlx1YzQ4N1x1YzQ4OFx1YzQ4OVx1YzQ4YVx1YzQ4Ylx1YzQ4Y1x1YzQ4ZFx1YzQ4ZVx1YzQ4Zlx1YzQ5MFx1YzQ5MVx1YzQ5Mlx1YzQ5M1x1YzQ5NVx1YzQ5Nlx1YzQ5N1x1YzQ5OFx1YzQ5OVx1YzQ5YVx1YzQ5Ylx1YzQ5ZFx1YzQ5ZVx1YzQ5Zlx1''@;'; put 'put ''YzRhMFx1YzRhMVx1YzRhMlx1YzRhM1x1YzRhNFx1YzRhNVx1YzRhNlx1YzRhN1x1YzRhOFx1YzRhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNTZdW21dXT0zOTkzNittLEZbMzk5MzYr''@;'; put 'put ''bV09eFsxNTZdW21dKTtmb3IoeFsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZc''@;'; put 'put ''dWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0''@;'; put 'put ''Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNc''@;'; put 'put ''dWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1''@;'; put 'put ''MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1Mjdc''@;'; put 'put ''dWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1''@;'; put 'put ''NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJc''@;'; put 'put ''dWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTU3XVttXV09NDAx''@;'; put 'put ''OTIrbSxGWzQwMTkyK21dPXhbMTU3XVttXSk7Zm9yKHhbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0''@;'; put 'put ''XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIxXHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVj''@;'; put 'put ''NWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVjNWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5''@;'; put 'put ''XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVj''@;'; put 'put ''NjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3''@;'; put 'put ''XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVj''@;'; put 'put ''NjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjky''@;'; put 'put ''XHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEyXHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzE1OF1bbV1dPTQwNDQ4K20sRls0MDQ0OCttXT14WzE1OF1bbV0pO2Zvcih4WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZhOFx1YzZhYVx1YzZhYlx1YzZhY1x1YzZhZFx1YzZhZVx1YzZhZlx1YzZiMlx1YzZi''@;'; put 'put ''M1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYlx1YzZiY1x1YzZiZFx1YzZiZVx1YzZiZlx1YzZjMlx1YzZjNFx1YzZjNlx1YzZjN1x1YzZjOFx1YzZjOVx1YzZjYVx1YzZjYlx1YzZjZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1''@;'; put 'put ''YzZkNVx1YzZkNlx1YzZkN1x1YzZkOFx1YzZkOVx1YzZkYVx1YzZkYlx1YzZkZVx1YzZkZlx1YzZlMlx1YzZlM1x1YzZlNFx1YzZlNVx1YzZlNlx1YzZlN1x1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1YzZmM1x1YzZmNFx1YzZmNVx1YzZmNlx1YzZmN1x1YzZmYVx1YzZmYlx1YzZmY1x1YzZmZVx1YzZmZlx1YzcwMFx1YzcwMVx1YzcwMlx1YzcwM1x1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZFx1YzcwZVx1YzcwZlx1YzcxMFx1YzcxMVx1YzcxMlx1YzcxM1x1YzcxNlx1''@;'; put 'put ''YzcxOFx1YzcxYVx1YzcxYlx1YzcxY1x1YzcxZFx1YzcxZVx1YzcxZlx1YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1YzcyOVx1YzcyYVx1YzcyYlx1YzcyY1x1YzcyZFx1YzcyZVx1YzcyZlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1Yzcz''@;'; put 'put ''Zlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NVx1Yzc0Nlx1Yzc0N1x1Yzc0OFx1Yzc0OVx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MVx1Yzc2Mlx1Yzc2M1x1Yzc2NFx1Yzc2NVx1Yzc2Nlx1Yzc2N1x1Yzc2OVx1Yzc2YVx1Yzc2Y1x1''@;'; put 'put ''Yzc2ZFx1Yzc2ZVx1Yzc2Zlx1Yzc3MFx1Yzc3MVx1Yzc3Mlx1Yzc3M1x1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5Ylx1Yzc5Y1x1Yzc5''@;'; put 'put ''ZFx1Yzc5ZVx1Yzc5Zlx1YzdhMlx1YzdhN1x1YzdhOFx1YzdhOVx1YzdhYVx1YzdhYlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTU5XVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsxNTldW21dXT00MDcwNCttLEZbNDA3MDQrbV09eFsxNTldW21dKTtmb3IoeFsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3''@;'; put 'put ''YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZc''@;'; put 'put ''dWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZc''@;'; put 'put ''dWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4''@;'; put 'put ''NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRc''@;'; put 'put ''dWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4''@;'; put 'put ''OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2''@;'; put 'put ''MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYwXVttXV09NDA5NjArbSxGWzQwOTYwK21dPXhbMTYwXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVj''@;'; put 'put ''OGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIwXHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVjOGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQwXHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVjOGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZm''@;'; put 'put ''XHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVjOTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUz''@;'; put 'put ''MDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1''@;'; put 'put ''MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFc''@;'; put 'put ''dTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2MV1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYxXVttXV09NDEyMTYrbSxGWzQxMjE2K21dPXhbMTYxXVttXSk7Zm9yKHhbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTEwXHVjOTEyXHVjOTEzXHVjOTE0XHVjOTE1''@;'; put 'put ''XHVjOTE2XHVjOTE3XHVjOTE5XHVjOTFhXHVjOTFiXHVjOTFjXHVjOTFkXHVjOTFlXHVjOTFmXHVjOTIwXHVjOTIxXHVjOTIyXHVjOTIzXHVjOTI0XHVjOTI1XHVjOTI2XHVjOTI3XHVjOTI4XHVjOTI5XHVjOTJhXHVjOTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj''@;'; put 'put ''OTJkXHVjOTJlXHVjOTJmXHVjOTMwXHVjOTMxXHVjOTMyXHVjOTMzXHVjOTM1XHVjOTM2XHVjOTM3XHVjOTM4XHVjOTM5XHVjOTNhXHVjOTNiXHVjOTNjXHVjOTNkXHVjOTNlXHVjOTNmXHVjOTQwXHVjOTQxXHVjOTQyXHVjOTQzXHVjOTQ0XHVjOTQ1XHVjOTQ2XHVjOTQ3XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTQ4XHVjOTQ5XHVjOTRhXHVjOTRiXHVjOTRjXHVjOTRkXHVjOTRlXHVjOTRmXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5XHVjOTVhXHVjOTViXHVjOTVjXHVjOTVkXHVjOTVlXHVjOTVmXHVjOTYyXHVjOTY0XHVjOTY1XHVj''@;'; put 'put ''OTY2XHVjOTY3XHVjOTY4XHVjOTY5XHVjOTZhXHVjOTZiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIx''@;'; put 'put ''MDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNc''@;'; put 'put ''dTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYyXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjJdW21dXT00MTQ3MittLEZbNDE0NzIrbV09eFsxNjJdW21dKTtmb3IoeFsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZc''@;'; put 'put ''dWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5''@;'; put 'put ''OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5''@;'; put 'put ''Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNc''@;'; put 'put ''dWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZm''@;'; put 'put ''MmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFc''@;'; put 'put ''dWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjNdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYzXVttXV09NDE3MjgrbSxGWzQxNzI4K21dPXhbMTYzXVttXSk7Zm9yKHhbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUx''@;'; put 'put ''XHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJjXHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVj''@;'; put 'put ''YTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUzMTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQx''@;'; put 'put ''XHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRkXHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUz''@;'; put 'put ''MTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUzMTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4''@;'; put 'put ''XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY0XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NF1bbV1dPTQxOTg0K20sRls0MTk4NCttXT14WzE2NF1bbV0pO2Zvcih4WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E0''@;'; put 'put ''N1x1Y2E0OFx1Y2E0OVx1Y2E0YVx1Y2E0Ylx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NVx1Y2E1Nlx1Y2E1N1x1Y2E1OFx1Y2E1OVx1Y2E1YVx1Y2E1Ylx1Y2E1ZVx1Y2E2Mlx1Y2E2M1x1Y2E2NFx1Y2E2NVx1Y2E2Nlx1Y2E2N1x1Y2E2OVx1Y2E2YVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E2Ylx1Y2E2Y1x1Y2E2ZFx1Y2E2ZVx1Y2E2Zlx1Y2E3MFx1Y2E3MVx1Y2E3Mlx1Y2E3M1x1Y2E3NFx1Y2E3NVx1Y2E3Nlx1Y2E3N1x1Y2E3OFx1Y2E3OVx1Y2E3YVx1Y2E3Ylx1Y2E3Y1x1Y2E3ZVx1Y2E3Zlx1Y2E4MFx1Y2E4MVx1Y2E4Mlx1Y2E4''@;'; put 'put ''M1x1Y2E4NVx1Y2E4Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E4N1x1Y2E4OFx1Y2E4OVx1Y2E4YVx1Y2E4Ylx1Y2E4Y1x1Y2E4ZFx1Y2E4ZVx1Y2E4Zlx1Y2E5MFx1Y2E5MVx1Y2E5Mlx1Y2E5M1x1Y2E5NFx1Y2E5NVx1Y2E5Nlx1Y2E5N1x1Y2E5OVx1Y2E5YVx1''@;'; put 'put ''Y2E5Ylx1Y2E5Y1x1Y2E5ZFx1Y2E5ZVx1Y2E5Zlx1Y2FhMFx1Y2FhMVx1Y2FhMlx1Y2FhM1x1Y2FhNFx1Y2FhNVx1Y2FhNlx1Y2FhN1x1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1''@;'; put 'put ''MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNi''@;'; put 'put ''Nlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjVdW21dXT00MjI0MCttLEZbNDIyNDArbV09eFsxNjVdW21dKTtmb3IoeFsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNh''@;'; put 'put ''ZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFc''@;'; put 'put ''dWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1''@;'; put 'put ''MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRc''@;'; put 'put ''dTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1''@;'; put 'put ''NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY2XVttXV09NDI0OTYrbSxGWzQyNDk2K21dPXhbMTY2XVttXSk7Zm9yKHhbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3''@;'; put 'put ''XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVjYjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVj''@;'; put 'put ''YjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3''@;'; put 'put ''XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVjYjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUz''@;'; put 'put ''Mzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3''@;'; put 'put ''XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUzM2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUz''@;'; put 'put ''M2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2N11bbV1dPTQyNzUyK20sRls0Mjc1MittXT14WzE2N11bbV0pO2Zvcih4WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I2ZFx1Y2I2ZVx1Y2I2Zlx1Y2I3MFx1Y2I3MVx1Y2I3Mlx1Y2I3M1x1Y2I3NFx1Y2I3NVx1Y2I3Nlx1Y2I3N1x1Y2I3YVx1Y2I3Ylx1Y2I3Y1x1Y2I3ZFx1Y2I3ZVx1Y2I3Zlx1Y2I4MFx1Y2I4MVx1Y2I4Mlx1Y2I4M1x1Y2I4''@;'; put 'put ''NFx1Y2I4NVx1Y2I4Nlx1Y2I4N1x1Y2I4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I4OVx1Y2I4YVx1Y2I4Ylx1Y2I4Y1x1Y2I4ZFx1Y2I4ZVx1Y2I4Zlx1Y2I5MFx1Y2I5MVx1Y2I5Mlx1Y2I5M1x1Y2I5NFx1Y2I5NVx1Y2I5Nlx1Y2I5N1x1Y2I5OFx1Y2I5OVx1''@;'; put 'put ''Y2I5YVx1Y2I5Ylx1Y2I5ZFx1Y2I5ZVx1Y2I5Zlx1Y2JhMFx1Y2JhMVx1Y2JhMlx1Y2JhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JhNFx1Y2JhNVx1Y2JhNlx1Y2JhN1x1Y2JhOFx1Y2JhOVx1Y2JhYVx1Y2JhYlx1Y2JhY1x1Y2JhZFx1Y2JhZVx1Y2JhZlx1Y2Ji''@;'; put 'put ''MFx1Y2JiMVx1Y2JiMlx1Y2JiM1x1Y2JiNFx1Y2JiNVx1Y2JiNlx1Y2JiN1x1Y2JiOVx1Y2JiYVx1Y2JiYlx1Y2JiY1x1Y2JiZFx1Y2JiZVx1Y2JiZlx1Y2JjMFx1Y2JjMVx1Y2JjMlx1Y2JjM1x1Y2JjNFx4YzZceGQwXHhhYVx1MDEyNlx1ZmZmZFx1MDEzMlx1ZmZmZFx1MDEzZlx1MDE0MVx4''@;'; put 'put ''ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YVx1ZmZmZFx1MzI2MFx1MzI2MVx1MzI2Mlx1MzI2M1x1MzI2NFx1MzI2NVx1MzI2Nlx1MzI2N1x1MzI2OFx1MzI2OVx1MzI2YVx1MzI2Ylx1MzI2Y1x1MzI2ZFx1MzI2ZVx1MzI2Zlx1MzI3MFx1MzI3MVx1MzI3Mlx1MzI3M1x1MzI3NFx1MzI3''@;'; put 'put ''NVx1MzI3Nlx1MzI3N1x1MzI3OFx1MzI3OVx1MzI3YVx1MzI3Ylx1MjRkMFx1MjRkMVx1MjRkMlx1MjRkM1x1MjRkNFx1MjRkNVx1MjRkNlx1MjRkN1x1MjRkOFx1MjRkOVx1MjRkYVx1MjRkYlx1MjRkY1x1MjRkZFx1MjRkZVx1MjRkZlx1MjRlMFx1MjRlMVx1MjRlMlx1MjRlM1x1MjRlNFx1''@;'; put 'put ''MjRlNVx1MjRlNlx1MjRlN1x1MjRlOFx1MjRlOVx1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1''@;'; put 'put ''ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjhdW21dXT00MzAwOCttLEZbNDMwMDgrbV09eFsxNjhdW21dKTtmb3IoeFsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNi''@;'; put 'put ''ZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRc''@;'; put 'put ''dWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNj''@;'; put 'put ''MGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4Zjhc''@;'; put 'put ''dTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1''@;'; put 'put ''MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRi''@;'; put 'put ''MVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFc''@;'; put 'put ''dWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNj''@;'; put 'put ''NmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFc''@;'; put 'put ''dWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMw''@;'; put 'put ''NGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVc''@;'; put 'put ''dTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMw''@;'; put 'put ''ODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExXHVjY2EyXHVjY2EzXHVjY2E0XHVjY2E1XHVjY2E2XHVjY2E3XHVjY2FhXHVjY2FlXHVjY2FmXHVjY2IwXHVjY2Ix''@;'; put 'put ''XHVjY2IyXHVjY2IzXHVjY2I2XHVjY2I3XHVjY2I5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2JhXHVjY2JiXHVjY2JkXHVjY2JlXHVjY2JmXHVjY2MwXHVjY2MxXHVjY2MyXHVjY2MzXHVjY2M2XHVjY2M4XHVjY2NhXHVjY2NiXHVjY2NjXHVjY2NkXHVjY2NlXHVj''@;'; put 'put ''Y2NmXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1XHVjY2Q2XHVjY2Q3XHVjY2Q4XHVjY2Q5XHVjY2RhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2RiXHVjY2RjXHVjY2RkXHVjY2RlXHVjY2RmXHVjY2UwXHVjY2UxXHVjY2UyXHVjY2UzXHVjY2U1XHVjY2U2XHVjY2U3''@;'; put 'put ''XHVjY2U4XHVjY2U5XHVjY2VhXHVjY2ViXHVjY2VkXHVjY2VlXHVjY2VmXHVjY2YxXHVjY2YyXHVjY2YzXHVjY2Y0XHVjY2Y1XHVjY2Y2XHVjY2Y3XHVjY2Y4XHVjY2Y5XHVjY2ZhXHVjY2ZiXHVjY2ZjXHVjY2ZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUz''@;'; put 'put ''MGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMz''@;'; put 'put ''XHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUz''@;'; put 'put ''MGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2Qx''@;'; put 'put ''NVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1''@;'; put 'put ''Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0''@;'; put 'put ''OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1''@;'; put 'put ''MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQy''@;'; put 'put ''Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1''@;'; put 'put ''MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZbNDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsx''@;'; put 'put ''NzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNk''@;'; put 'put ''NzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRc''@;'; put 'put ''dWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNk''@;'; put 'put ''YWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVttXV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTcz''@;'; put 'put ''XVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGM2XHVjZGM3XHVjZGM4XHVjZGM5XHVjZGNhXHVjZGNiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxXHVjZGQyXHVjZGQzXHVjZGQ0XHVjZGQ1XHVj''@;'; put 'put ''ZGQ2XHVjZGQ3XHVjZGQ4XHVjZGQ5XHVjZGRhXHVjZGRiXHVjZGRjXHVjZGRkXHVjZGRlXHVjZGRmXHVjZGUwXHVjZGUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGUyXHVjZGUzXHVjZGU0XHVjZGU1XHVjZGU2XHVjZGU3XHVjZGU5XHVjZGVhXHVjZGViXHVjZGVk''@;'; put 'put ''XHVjZGVlXHVjZGVmXHVjZGYxXHVjZGYyXHVjZGYzXHVjZGY0XHVjZGY1XHVjZGY2XHVjZGY3XHVjZGZhXHVjZGZjXHVjZGZlXHVjZGZmXHVjZTAwXHVjZTAxXHVjZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVj''@;'; put 'put ''ZTBhXHVjZTBiXHVjZTBkXHVjZTBlXHVjZTBmXHVjZTEwXHVjZTExXHVjZTEyXHVjZTEzXHVjZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhXHVjZTFiXHVjZTFjXHVjZTFkXHVjZTFlXHVjZTFmXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0''@;'; put 'put ''NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1''@;'; put 'put ''Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1''@;'; put 'put ''MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1''@;'; put 'put ''Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5''@;'; put 'put ''N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21d''@;'; put 'put ''XT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThc''@;'; put 'put ''dWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNl''@;'; put 'put ''YzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZc''@;'; put 'put ''dWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNl''@;'; put 'put ''ZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRc''@;'; put 'put ''dWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFj''@;'; put 'put ''OGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRc''@;'; put 'put ''dWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5XHVjZjBhXHVjZjBi''@;'; put 'put ''XHVjZjBjXHVjZjBkXHVjZjBlXHVjZjBmXHVjZjEyXHVjZjE0XHVjZjE2XHVjZjE3XHVjZjE4XHVjZjE5XHVjZjFhXHVjZjFiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjI1XHVjZjI2XHVjZjI3XHVj''@;'; put 'put ''ZjI4XHVjZjI5XHVjZjJhXHVjZjJiXHVjZjJlXHVjZjMyXHVjZjMzXHVjZjM0XHVjZjM1XHVjZjM2XHVjZjM3XHVjZjM5XHVjZjNhXHVjZjNiXHVjZjNjXHVjZjNkXHVjZjNlXHVjZjNmXHVjZjQwXHVjZjQxXHVjZjQyXHVjZjQzXHVjZjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVjZjQ1XHVjZjQ2XHVjZjQ3XHVjZjQ4XHVjZjQ5XHVjZjRhXHVjZjRiXHVjZjRjXHVjZjRkXHVjZjRlXHVjZjRmXHVjZjUwXHVjZjUxXHVjZjUyXHVjZjUzXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkXHVjZjVlXHVjZjVmXHVjZjYwXHVjZjYxXHVjZjYyXHVj''@;'; put 'put ''ZjYzXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYx''@;'; put 'put ''XHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVh''@;'; put 'put ''ZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRh''@;'; put 'put ''XHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3''@;'; put 'put ''NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4ZVx1''@;'; put 'put ''Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1''@;'; put 'put ''Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVk''@;'; put 'put ''Y1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1''@;'; put 'put ''YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAw''@;'; put 'put ''MFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNm''@;'; put 'put ''Y2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJc''@;'; put 'put ''dWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIw''@;'; put 'put ''YThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNc''@;'; put 'put ''dWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIx''@;'; put 'put ''NWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDJlXHVk''@;'; put 'put ''MDJmXHVkMDMwXHVkMDMxXHVkMDMyXHVkMDMzXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkXHVkMDNlXHVkMDNmXHVkMDQwXHVkMDQxXHVkMDQyXHVkMDQzXHVkMDQ2XHVkMDQ4XHVkMDRhXHVkMDRiXHVkMDRjXHVkMDRkXHVkMDRlXHVkMDRmXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5XHVkMDVhXHVkMDViXHVkMDVjXHVkMDVkXHVkMDVlXHVkMDVmXHVkMDYxXHVkMDYyXHVkMDYzXHVkMDY0XHVkMDY1XHVkMDY2XHVkMDY3XHVkMDY4XHVkMDY5XHVkMDZhXHVkMDZiXHVk''@;'; put 'put ''MDZlXHVkMDZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1XHVkMDc2XHVkMDc3XHVkMDc4XHVkMDc5XHVkMDdhXHVkMDdiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyXHVkMDgzXHVkMDg0XHVkMDg1XHVkMDg2XHVkMDg3XHVkMDg4''@;'; put 'put ''XHVkMDg5XHVkMDhhXHVkMDhiXHVkMDhjXHVkMDhkXHVkMDhlXHVkMDhmXHVkMDkwXHVkMDkxXHVkMDkyXHVkMDkzXHVkMDk0XHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBjXHViMjE0XHViMjE1XHVi''@;'; put 'put ''MjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVjXHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHViMmE1XHViMmE2XHViMmFh''@;'; put 'put ''XHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHViMmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViXHViMmVjXHViMmVkXHViMmVlXHViMmVmXHViMmYzXHViMmY0XHViMmY1XHViMmY3XHViMmY4XHVi''@;'; put 'put ''MmY5XHViMmZhXHViMmZiXHViMmZmXHViMzAwXHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1''@;'; put 'put ''ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBm''@;'; put 'put ''NVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1''@;'; put 'put ''YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQy''@;'; put 'put ''MFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1''@;'; put 'put ''YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQx''@;'; put 'put ''MWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZc''@;'; put 'put ''dWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQx''@;'; put 'put ''NTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNc''@;'; put 'put ''dWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2''@;'; put 'put ''MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZc''@;'; put 'put ''dWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3''@;'; put 'put ''OTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTZlXHVkMTZmXHVkMTcwXHVkMTcxXHVkMTcyXHVkMTczXHVkMTc0XHVkMTc1XHVkMTc2XHVkMTc3XHVkMTc4XHVkMTc5XHVkMTdhXHVkMTdiXHVkMTdkXHVkMTdlXHVkMTdmXHVkMTgwXHVkMTgxXHVkMTgyXHVkMTgzXHVkMTg1XHVk''@;'; put 'put ''MTg2XHVkMTg3XHVkMTg5XHVkMThhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMThiXHVkMThjXHVkMThkXHVkMThlXHVkMThmXHVkMTkwXHVkMTkxXHVkMTkyXHVkMTkzXHVkMTk0XHVkMTk1XHVkMTk2XHVkMTk3XHVkMTk4XHVkMTk5XHVkMTlhXHVkMTliXHVkMTlj''@;'; put 'put ''XHVkMTlkXHVkMTllXHVkMTlmXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWE5XHVkMWFhXHVkMWFiXHVkMWFjXHVkMWFkXHVkMWFlXHVkMWFmXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVk''@;'; put 'put ''MWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxXHVkMWMyXHVkMWMzXHVkMWM0XHVkMWM1XHVkMWM2XHVkMWM3XHVkMWM4XHVkMWM5XHVkMWNhXHVkMWNiXHVkMWNjXHVkMWNkXHVkMWNlXHVkMWNmXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2Fk''@;'; put 'put ''XHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHVi''@;'; put 'put ''ODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1''@;'; put 'put ''XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHVi''@;'; put 'put ''OTYwXHViOTY4XHViOTY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zvcih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1''@;'; put 'put ''ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFm''@;'; put 'put ''Y1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1''@;'; put 'put ''ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4''@;'; put 'put ''NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1''@;'; put 'put ''YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1''@;'; put 'put ''NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1''@;'; put 'put ''YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNc''@;'; put 'put ''dWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQy''@;'; put 'put ''NWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFc''@;'; put 'put ''dWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJi''@;'; put 'put ''MTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNc''@;'; put 'put ''dWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJj''@;'; put 'put ''MTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVc''@;'; put 'put ''dWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjArbSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9y''@;'; put 'put ''KHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2XHVkMjk3XHVkMjk4XHVkMjk5XHVkMjlhXHVkMjliXHVkMjlkXHVkMjllXHVkMjlmXHVkMmEx''@;'; put 'put ''XHVkMmEyXHVkMmEzXHVkMmE1XHVkMmE2XHVkMmE3XHVkMmE4XHVkMmE5XHVkMmFhXHVkMmFiXHVkMmFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyXHVkMmIzXHVkMmI0XHVkMmI1XHVkMmI2XHVkMmI3XHVkMmJhXHVkMmJiXHVk''@;'; put 'put ''MmJkXHVkMmJlXHVkMmMxXHVkMmMzXHVkMmM0XHVkMmM1XHVkMmM2XHVkMmM3XHVkMmNhXHVkMmNjXHVkMmNkXHVkMmNlXHVkMmNmXHVkMmQwXHVkMmQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRh''@;'; put 'put ''XHVkMmRiXHVkMmRkXHVkMmRlXHVkMmRmXHVkMmUwXHVkMmUxXHVkMmUyXHVkMmUzXHVkMmU2XHVkMmU3XHVkMmU4XHVkMmU5XHVkMmVhXHVkMmViXHVkMmVjXHVkMmVkXHVkMmVlXHVkMmVmXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5XHViYzlhXHVi''@;'; put 'put ''Y2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2IxXHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHViZDA0XHViZDA1''@;'; put 'put ''XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHViZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1XHViZDk5XHVi''@;'; put 'put ''ZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHViZTRjXHViZTRl''@;'; put 'put ''XHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHViZTYwXHViZTYxXHViZTY0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14''@;'; put 'put ''WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMw''@;'; put 'put ''Zlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1''@;'; put 'put ''ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0''@;'; put 'put ''ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1''@;'; put 'put ''YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVl''@;'; put 'put ''NFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1''@;'; put 'put ''YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBj''@;'; put 'put ''MVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODddW21dXT00Nzg3Mitt''@;'; put 'put ''LEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQz''@;'; put 'put ''NzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNc''@;'; put 'put ''dWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQz''@;'; put 'put ''YjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRc''@;'; put 'put ''dWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMx''@;'; put 'put ''MzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBc''@;'; put 'put ''dWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMy''@;'; put 'put ''MDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4''@;'; put 'put ''XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Q3XHVkM2Q5XHVkM2RhXHVkM2RiXHVkM2RjXHVkM2RkXHVkM2RlXHVkM2RmXHVkM2UwXHVk''@;'; put 'put ''M2UyXHVkM2U0XHVkM2U1XHVkM2U2XHVkM2U3XHVkM2U4XHVkM2U5XHVkM2VhXHVkM2ViXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2Zl''@;'; put 'put ''XHVkNDAwXHVkNDAyXHVkNDAzXHVkNDA0XHVkNDA1XHVkNDA2XHVkNDA3XHVkNDA5XHVkNDBhXHVkNDBiXHVkNDBjXHVkNDBkXHVkNDBlXHVkNDBmXHVkNDEwXHVkNDExXHVkNDEyXHVkNDEzXHVkNDE0XHVkNDE1XHVkNDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk''@;'; put 'put ''NDE3XHVkNDE4XHVkNDE5XHVkNDFhXHVkNDFiXHVkNDFjXHVkNDFlXHVkNDFmXHVkNDIwXHVkNDIxXHVkNDIyXHVkNDIzXHVkNDI0XHVkNDI1XHVkNDI2XHVkNDI3XHVkNDI4XHVkNDI5XHVkNDJhXHVkNDJiXHVkNDJjXHVkNDJkXHVkNDJlXHVkNDJmXHVkNDMwXHVkNDMxXHVkNDMyXHVkNDMz''@;'; put 'put ''XHVkNDM0XHVkNDM1XHVkNDM2XHVkNDM3XHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVj''@;'; put 'put ''MjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4''@;'; put 'put ''XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVj''@;'; put 'put ''M2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1''@;'; put 'put ''ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1''@;'; put 'put ''Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5''@;'; put 'put ''N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1''@;'; put 'put ''YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1''@;'; put 'put ''N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1''@;'; put 'put ''YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJc''@;'; put 'put ''dWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0''@;'; put 'put ''YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0''@;'; put 'put ''ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZc''@;'; put 'put ''dWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2''@;'; put 'put ''NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdc''@;'; put 'put ''dWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGZlXHVkNGZmXHVkNTAw''@;'; put 'put ''XHVkNTAxXHVkNTAyXHVkNTAzXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkXHVkNTBlXHVkNTBmXHVkNTEwXHVkNTExXHVkNTEyXHVkNTEzXHVkNTE2XHVkNTE4XHVkNTE5XHVkNTFhXHVkNTFiXHVkNTFjXHVkNTFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVkNTFlXHVkNTFmXHVkNTIwXHVkNTIxXHVkNTIyXHVkNTIzXHVkNTI0XHVkNTI1XHVkNTI2XHVkNTI3XHVkNTI4XHVkNTI5XHVkNTJhXHVkNTJiXHVkNTJjXHVkNTJkXHVkNTJlXHVkNTJmXHVkNTMwXHVkNTMxXHVkNTMyXHVkNTMzXHVkNTM0XHVkNTM1XHVkNTM2XHVkNTM3''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1XHVkNTQ2XHVkNTQ3XHVkNTQ4XHVkNTQ5XHVkNTRhXHVkNTRiXHVkNTRlXHVkNTUwXHVkNTUyXHVkNTUzXHVkNTU0XHVk''@;'; put 'put ''NTU1XHVkNTU2XHVkNTU3XHVkNTVhXHVkNTViXHVkNTVkXHVkNTVlXHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0''@;'; put 'put ''XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVjNzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxXHVjNzUyXHVjNzUzXHVjNzU0XHVjNzU1XHVjNzU2XHVjNzU3XHVjNzU4XHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVj''@;'; put 'put ''Nzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2Fk''@;'; put 'put ''XHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2''@;'; put 'put ''NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVh''@;'; put 'put ''NFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1''@;'; put 'put ''ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1Yzgz''@;'; put 'put ''Y1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1''@;'; put 'put ''YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1''@;'; put 'put ''OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZcdWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2''@;'; put 'put ''MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2Mjlc''@;'; put 'put ''dWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZcdWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5''@;'; put 'put ''ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThc''@;'; put 'put ''dWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNi''@;'; put 'put ''NWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkXHVkNjVlXHVkNjVm''@;'; put 'put ''XHVkNjYwXHVkNjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjYyXHVkNjYzXHVkNjY0XHVkNjY1XHVkNjY2XHVkNjY4XHVkNjZhXHVkNjZiXHVkNjZjXHVkNjZkXHVkNjZlXHVkNjZmXHVkNjcyXHVkNjczXHVkNjc1XHVkNjc2XHVkNjc3XHVkNjc4XHVkNjc5XHVk''@;'; put 'put ''NjdhXHVkNjdiXHVkNjdjXHVkNjdkXHVkNjdlXHVkNjdmXHVkNjgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2XHVkNjg3XHVkNjg4XHVkNjg5XHVkNjhhXHVkNjhiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1''@;'; put 'put ''XHVkNjk2XHVkNjk3XHVkNjk4XHVkNjk5XHVkNjlhXHVkNjliXHVkNjljXHVkNjllXHVkNmEwXHVkNmEyXHVkNmEzXHVkNmE0XHVkNmE1XHVkNmE2XHVkNmE3XHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVj''@;'; put 'put ''YzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0''@;'; put 'put ''XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVj''@;'; put 'put ''ZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMz''@;'; put 'put ''XHVjZTM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZj''@;'; put 'put ''Nlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1''@;'; put 'put ''ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZm''@;'; put 'put ''ZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1''@;'; put 'put ''Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2Vm''@;'; put 'put ''NFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1''@;'; put 'put ''Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAz''@;'; put 'put ''NFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21dKTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3''@;'; put 'put ''MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNc''@;'; put 'put ''dWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3''@;'; put 'put ''NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRc''@;'; put 'put ''dWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQw''@;'; put 'put ''ZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZc''@;'; put 'put ''dWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQy''@;'; put 'put ''M2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMyK21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzhkXHVkNzhlXHVkNzhmXHVkNzkxXHVkNzkyXHVkNzkzXHVkNzk0XHVkNzk1XHVkNzk2XHVkNzk3XHVkNzlhXHVkNzljXHVkNzllXHVkNzlmXHVkN2EwXHVkN2ExXHVkN2EyXHVk''@;'; put 'put ''N2EzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0''@;'; put 'put ''XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVk''@;'; put 'put ''MzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdj''@;'; put 'put ''XHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVk''@;'; put 'put ''M2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUwNjg4K20sRls1MDY4OCttXT14WzE5OF1bbV0p''@;'; put 'put ''O2Zvcih4WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQx''@;'; put 'put ''ZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1''@;'; put 'put ''ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3''@;'; put 'put ''NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1''@;'; put 'put ''ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTldW21dXT01MDk0NCttLEZbNTA5NDQr''@;'; put 'put ''bV09eFsxOTldW21dKTtmb3IoeFsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRc''@;'; put 'put ''dWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3''@;'; put 'put ''MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBc''@;'; put 'put ''dWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAwXVttXV09NTEy''@;'; put 'put ''MDArbSxGWzUxMjAwK21dPXhbMjAwXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4''@;'; put 'put ''XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2''@;'; put 'put ''Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJl''@;'; put 'put ''XHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzIwMl1bbV1dPTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1''@;'; put 'put ''NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1''@;'; put 'put ''NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRm''@;'; put 'put ''ZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdk''@;'; put 'put ''NzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBc''@;'; put 'put ''dTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgz''@;'; put 'put ''OTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIw''@;'; put 'put ''NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVttXSk7Zm9yKHhbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1''@;'; put 'put ''NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1''@;'; put 'put ''XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0''@;'; put 'put ''ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4MCttXT14WzIwNV1bbV0pO2Zvcih4WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1''@;'; put 'put ''NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1''@;'; put 'put ''MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1''@;'; put 'put ''NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIw''@;'; put 'put ''Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01MjczNittLEZbNTI3MzYrbV09eFsyMDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3Yjhc''@;'; put 'put ''dTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTky''@;'; put 'put ''YjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNc''@;'; put 'put ''dTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA3XVttXV09NTI5OTIrbSxGWzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2Zl''@;'; put 'put ''XHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3''@;'; put 'put ''NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2Yzcy''@;'; put 'put ''XHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOF1bbV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4''@;'; put 'put ''Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1''@;'; put 'put ''OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBh''@;'; put 'put ''M1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1''@;'; put 'put ''ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5''@;'; put 'put ''MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFc''@;'; put 'put ''dWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5''@;'; put 'put ''NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVc''@;'; put 'put ''dTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1''@;'; put 'put ''OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZk''@;'; put 'put ''XHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1''@;'; put 'put ''NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2''@;'; put 'put ''XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjExXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0pO2Zvcih4WzIx''@;'; put 'put ''Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1''@;'; put 'put ''NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2Jl''@;'; put 'put ''NFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1''@;'; put 'put ''N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVl''@;'; put 'put ''NFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIrbV09eFsyMTJd''@;'; put 'put ''W21dKTtmb3IoeFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2Zc''@;'; put 'put ''dTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZm''@;'; put 'put ''ZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlc''@;'; put 'put ''dTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUy''@;'; put 'put ''OWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1MjgrbSxGWzU0''@;'; put 'put ''NTI4K21dPXhbMjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2''@;'; put 'put ''MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2''@;'; put 'put ''XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4''@;'; put 'put ''Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxNF1bbV1d''@;'; put 'put ''PTU0Nzg0K20sRls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1''@;'; put 'put ''NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNm''@;'; put 'put ''MVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1''@;'; put 'put ''NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFsyMTVdW21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVc''@;'; put 'put ''dTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdm''@;'; put 'put ''NTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJc''@;'; put 'put ''dTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNl1bbV0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRm''@;'; put 'put ''XHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5''@;'; put 'put ''ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2''@;'; put 'put ''XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09''@;'; put 'put ''eFsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIxN11bbV0pO2Zvcih4WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1Njhi''@;'; put 'put ''Nlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1''@;'; put 'put ''NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1Njlj''@;'; put 'put ''M1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxOF0ubGVuZ3Ro''@;'; put 'put ''OysrbSk2NTUzMyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZbNTU4MDgrbV09eFsyMThdW21dKTtmb3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1''@;'; put 'put ''YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNc''@;'; put 'put ''dTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1''@;'; put 'put ''ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9''@;'; put 'put ''eFsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVttXV09NTYwNjQrbSxGWzU2MDY0K21dPXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5''@;'; put 'put ''YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2Zjdk''@;'; put 'put ''XHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1''@;'; put 'put ''OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2XHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbT0wO20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMF1bbV1dPTU2MzIwK20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1''@;'; put 'put ''N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2''@;'; put 'put ''ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1''@;'; put 'put ''NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBh''@;'; put 'put ''NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlc''@;'; put 'put ''dTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRm''@;'; put 'put ''N2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNc''@;'; put 'put ''dTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5''@;'; put 'put ''NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIz''@;'; put 'put ''XHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1''@;'; put 'put ''NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJk''@;'; put 'put ''XHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3''@;'; put 'put ''NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIyNF09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5''@;'; put 'put ''M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1''@;'; put 'put ''NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNj''@;'; put 'put ''NFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1''@;'; put 'put ''NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRdW21dKTtmb3Io''@;'; put 'put ''eFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgx''@;'; put 'put ''NjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZc''@;'; put 'put ''dTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThi''@;'; put 'put ''MTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRc''@;'; put 'put ''dTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3NjAwK21dPXhb''@;'; put 'put ''MjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2''@;'; put 'put ''MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMx''@;'; put 'put ''XHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2''@;'; put 'put ''ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYy''@;'; put 'put ''XHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1dPTU3ODU2K20s''@;'; put 'put ''Rls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0''@;'; put 'put ''ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1''@;'; put 'put ''NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcw''@;'; put 'put ''M1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjdd''@;'; put 'put ''W21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThh''@;'; put 'put ''MWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRc''@;'; put 'put ''dTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3''@;'; put 'put ''YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4''@;'; put 'put ''NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0''@;'; put 'put ''XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1''@;'; put 'put ''YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjldW21d''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1''@;'; put 'put ''NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5''@;'; put 'put ''M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1''@;'; put 'put ''Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3RoOysrbSk2NTUz''@;'; put 'put ''MyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBc''@;'; put 'put ''dTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5''@;'; put 'put ''YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBc''@;'; put 'put ''dTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzFdLmxl''@;'; put 'put ''bmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1''@;'; put 'put ''XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2''@;'; put 'put ''ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRm''@;'; put 'put ''XHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxXHVmZmZkIi5zcGxpdCgiIiksbT0w''@;'; put 'put ''O20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4''@;'; put 'put ''MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1''@;'; put 'put ''OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVk''@;'; put 'put ''NVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUz''@;'; put 'put ''OWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFc''@;'; put 'put ''dTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRm''@;'; put 'put ''OTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhc''@;'; put 'put ''dWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVm''@;'; put 'put ''OWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZi''@;'; put 'put ''XHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0''@;'; put 'put ''ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThm''@;'; put 'put ''XHU4N2ZiXHU4ODYzXHU4YWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1''@;'; put 'put ''ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNi''@;'; put 'put ''ZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1''@;'; put 'put ''ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2Ex''@;'; put 'put ''NFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3IoeFsyMzddPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2Rc''@;'; put 'put ''dTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThj''@;'; put 'put ''YzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhc''@;'; put 'put ''dTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0''@;'; put 'put ''NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhbMjM3XVttXSk7''@;'; put 'put ''Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjljXHU1MThk''@;'; put 'put ''XHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2''@;'; put 'put ''Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0''@;'; put 'put ''XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1''@;'; put 'put ''OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20sRls2MDkyOCtt''@;'; put 'put ''XT14WzIzOF1bbV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1''@;'; put 'put ''N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBj''@;'; put 'put ''NVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1''@;'; put 'put ''ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzldW21dXT02MTE4''@;'; put 'put ''NCttLEZbNjExODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNc''@;'; put 'put ''dTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5''@;'; put 'put ''ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlc''@;'; put 'put ''dTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hb''@;'; put 'put ''MjQwXVttXV09NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRh''@;'; put 'put ''XHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3''@;'; put 'put ''YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRi''@;'; put 'put ''XHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21dLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihhZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2Qx''@;'; put 'put ''OVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1''@;'; put 'put ''NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFj''@;'; put 'put ''OVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQy''@;'; put 'put ''XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21dKTtmb3IoeFsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThl''@;'; put 'put ''Y2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRc''@;'; put 'put ''dTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2''@;'; put 'put ''MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxlbmd0aDsrK20p''@;'; put 'put ''NjU1MzMhPT14WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4K21dPXhbMjQzXVttXSk7Zm9yKHhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4''@;'; put 'put ''MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0''@;'; put 'put ''XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2''@;'; put 'put ''ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ0''@;'; put 'put ''XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYyNDY0K20sRls2MjQ2NCttXT14WzI0NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1''@;'; put 'put ''ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBh''@;'; put 'put ''Y1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1''@;'; put 'put ''Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LG09MDttIT14WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDVdW21dXT02MjcyMCttLEZbNjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNc''@;'; put 'put ''dTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgx''@;'; put 'put ''ZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRc''@;'; put 'put ''dTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ2XVttXV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJi''@;'; put 'put ''XHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5''@;'; put 'put ''MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1''@;'; put 'put ''XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4''@;'; put 'put ''ZmE2XHU5MjExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO2Zvcih4WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1''@;'; put 'put ''N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1''@;'; put 'put ''OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1Nzgz''@;'; put 'put ''Mlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1''@;'; put 'put ''OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDhdW21dXT02MzQ4OCttLEZbNjM0ODgrbV09eFsyNDhdW21dKTtmb3IoeFsyNDldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4''@;'; put 'put ''YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNc''@;'; put 'put ''dTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThm''@;'; put 'put ''NDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRc''@;'; put 'put ''dTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDldLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ5XVttXV09NjM3NDQrbSxGWzYzNzQ0K21dPXhbMjQ5XVttXSk7Zm9yKHhbMjUw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTA4XHVmYTA5XHU5ODA1XHU0''@;'; put 'put ''ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFl''@;'; put 'put ''XHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3''@;'; put 'put ''MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1''@;'; put 'put ''XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1MF1bbV1dPTY0ZTMrbSxGWzY0ZTMrbV09eFsyNTBdW21d''@;'; put 'put ''KTtmb3IoeFsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZj''@;'; put 'put ''YzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVc''@;'; put 'put ''dTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0''@;'; put 'put ''NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhc''@;'; put 'put ''dTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjUxXVttXV09NjQyNTYrbSxGWzY0MjU2''@;'; put 'put ''K21dPXhbMjUxXVttXSk7Zm9yKHhbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIw''@;'; put 'put ''XHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3''@;'; put 'put ''YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3Mzcy''@;'; put 'put ''XHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjUyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI1Ml1bbV1dPTY0''@;'; put 'put ''NTEyK20sRls2NDUxMittXT14WzI1Ml1bbV0pO2Zvcih4WzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODVi''@;'; put 'put ''MFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1''@;'; put 'put ''NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIw''@;'; put 'put ''OVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI1M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjUzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsyNTNdW21dXT02NDc2OCttLEZbNjQ3NjgrbV09eFsyNTNdW21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVs5NTBdPWZ1bmN0aW9uKCl7dmFyIG0sRj1bXSxhZT17fSx4PVtdO2Zvcih4WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgw''@;'; put 'put ''Zlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3''@;'; put 'put ''Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzBdW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzBdW21dXT0wK20sRlswK21dPXhbMF1bbV0pO2Zvcih4WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1''@;'; put 'put ''ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhc''@;'; put 'put ''dTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNl''@;'; put 'put ''XHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIx''@;'; put 'put ''YVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1''@;'; put 'put ''MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVc''@;'; put 'put ''dWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxXHUyNTgyXHUyNTgz''@;'; put 'put ''XHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4XHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVm''@;'; put 'put ''ZjE4XHVmZjE5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0''@;'; put 'put ''XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVm''@;'; put 'put ''ZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjJdW21dLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihhZVt4WzE2Ml1bbV1dPTQxNDcyK20sRls0MTQ3MittXT14WzE2Ml1bbV0pO2Zvcih4WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1''@;'; put 'put ''MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNi''@;'; put 'put ''N1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1''@;'; put 'put ''MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1''@;'; put 'put ''MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhb''@;'; put 'put ''MTYzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjNdW21dXT00MTcyOCttLEZbNDE3MjgrbV09eFsxNjNdW21dKTtmb3IoeFsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNc''@;'; put 'put ''dTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRl''@;'; put 'put ''YTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVc''@;'; put 'put ''dTVmMGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZc''@;'; put 'put ''dTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUz''@;'; put 'put ''Y2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVc''@;'; put 'put ''dTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjRdLmxlbmd0aDsr''@;'; put 'put ''K20pNjU1MzMhPT14WzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY0XVttXV09NDE5ODQrbSxGWzQxOTg0K21dPXhbMTY0XVttXSk7Zm9yKHhbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTE2XHU0ZTE1XHU0ZTE0''@;'; put 'put ''XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1''@;'; put 'put ''MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1''@;'; put 'put ''XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4''@;'; put 'put ''XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3''@;'; put 'put ''NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2''@;'; put 'put ''XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhb''@;'; put 'put ''MTY1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2NV1bbV1dPTQyMjQwK20sRls0MjI0MCttXT14WzE2NV1bbV0pO2Zvcih4WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3''@;'; put 'put ''MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1''@;'; put 'put ''NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4''@;'; put 'put ''OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVl''@;'; put 'put ''OFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1''@;'; put 'put ''NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0''@;'; put 'put ''MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLG09MDttIT14WzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjZdW21dXT00MjQ5NittLEZbNDI0OTYrbV09eFsxNjZdW21dKTtmb3IoeFsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNc''@;'; put 'put ''dTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0''@;'; put 'put ''MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5''@;'; put 'put ''OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZc''@;'; put 'put ''dTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYy''@;'; put 'put ''N2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY3XVttXV09NDI3NTIrbSxGWzQyNzUyK21dPXhbMTY3XVttXSk7Zm9yKHhbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2Yzdl''@;'; put 'put ''XHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3''@;'; put 'put ''YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4''@;'; put 'put ''ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTcz''@;'; put 'put ''XHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1''@;'; put 'put ''MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3''@;'; put 'put ''XHU1NDczXHU1NDc1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OF1bbV1dPTQzMDA4K20sRls0MzAwOCttXT14WzE2OF1bbV0pO2Zvcih4WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4''@;'; put 'put ''M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1''@;'; put 'put ''NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1''@;'; put 'put ''NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAx''@;'; put 'put ''NFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1''@;'; put 'put ''NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYw''@;'; put 'put ''ZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjldW21dXT00MzI2NCttLEZbNDMyNjQrbV09eFsxNjldW21dKTtmb3IoeFsxNzBdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3''@;'; put 'put ''NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRc''@;'; put 'put ''dTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlc''@;'; put 'put ''dTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5''@;'; put 'put ''NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlc''@;'; put 'put ''dTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1''@;'; put 'put ''NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTcwXVttXV09NDM1MjArbSxGWzQzNTIwK21dPXhbMTcwXVttXSk7Zm9yKHhb''@;'; put 'put ''MTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0''@;'; put 'put ''ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMx''@;'; put 'put ''XHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGM0XHU1NGM4XHU1NGFm''@;'; put 'put ''XHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1''@;'; put 'put ''OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJk''@;'; put 'put ''XHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2''@;'; put 'put ''MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3MV1bbV1dPTQzNzc2K20sRls0Mzc3NittXT14WzE3''@;'; put 'put ''MV1bbV0pO2Zvcih4WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1''@;'; put 'put ''NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1Njdk''@;'; put 'put ''OVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQz''@;'; put 'put ''Ylx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1''@;'; put 'put ''NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZj''@;'; put 'put ''NVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1''@;'; put 'put ''N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzJdW21dXT00NDAzMittLEZb''@;'; put 'put ''NDQwMzIrbV09eFsxNzJdW21dKTtmb3IoeFsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2Vc''@;'; put 'put ''dTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2''@;'; put 'put ''NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZc''@;'; put 'put ''dTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRm''@;'; put 'put ''ZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFc''@;'; put 'put ''dTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTczXVtt''@;'; put 'put ''XV09NDQyODgrbSxGWzQ0Mjg4K21dPXhbMTczXVttXSk7Zm9yKHhbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2Mz''@;'; put 'put ''XHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1''@;'; put 'put ''YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5XHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQy''@;'; put 'put ''XHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2''@;'; put 'put ''NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3''@;'; put 'put ''XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNzRdW21dLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihhZVt4WzE3NF1bbV1dPTQ0NTQ0K20sRls0NDU0NCttXT14WzE3NF1bbV0pO2Zvcih4WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3''@;'; put 'put ''OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1''@;'; put 'put ''NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4''@;'; put 'put ''NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1''@;'; put 'put ''ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMy''@;'; put 'put ''Ylx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc1XVttXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoYWVbeFsxNzVdW21dXT00NDgwMCttLEZbNDQ4MDArbV09eFsxNzVdW21dKTtmb3IoeFsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2''@;'; put 'put ''OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJc''@;'; put 'put ''dThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2''@;'; put 'put ''NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUw''@;'; put 'put ''NGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBc''@;'; put 'put ''dTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3''@;'; put 'put ''MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzZdLmxlbmd0aDsrK20pNjU1MzMh''@;'; put 'put ''PT14WzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc2XVttXV09NDUwNTYrbSxGWzQ1MDU2K21dPXhbMTc2XVttXSk7Zm9yKHhbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1''@;'; put 'put ''YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUy''@;'; put 'put ''XHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2''@;'; put 'put ''MGNiXHU2MGI0XHU2MGU2XHU2MGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2''@;'; put 'put ''MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVk''@;'; put 'put ''XHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2''@;'; put 'put ''OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc3XS5sZW5n''@;'; put 'put ''dGg7KyttKTY1NTMzIT09eFsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3N11bbV1dPTQ1MzEyK20sRls0NTMxMittXT14WzE3N11bbV0pO2Zvcih4WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1''@;'; put 'put ''NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRl''@;'; put 'put ''Ylx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1''@;'; put 'put ''NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1''@;'; put 'put ''NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5''@;'; put 'put ''NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1''@;'; put 'put ''ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDtt''@;'; put 'put ''IT14WzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzhdW21dXT00NTU2OCttLEZbNDU1NjgrbV09eFsxNzhdW21dKTtmb3IoeFsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThh''@;'; put 'put ''MjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBc''@;'; put 'put ''dTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFc''@;'; put 'put ''dTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUw''@;'; put 'put ''OTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNc''@;'; put 'put ''dTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxtPTA7bSE9eFsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTc5XVttXV09NDU4MjQrbSxGWzQ1ODI0K21dPXhbMTc5XVttXSk7Zm9yKHhbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1''@;'; put 'put ''ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEy''@;'; put 'put ''XHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2M2M2XHU2M2NkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2Ri''@;'; put 'put ''XHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2''@;'; put 'put ''OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJm''@;'; put 'put ''XHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2''@;'; put 'put ''ZWNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MF1bbV1dPTQ2MDgwK20sRls0NjA4MCttXT14WzE4MF1bbV0pO2Zvcih4WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1''@;'; put 'put ''NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZi''@;'; put 'put ''NFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1''@;'; put 'put ''Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1''@;'; put 'put ''ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNm''@;'; put 'put ''ZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1''@;'; put 'put ''OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODFdW21dXT00NjMzNittLEZbNDYzMzYrbV09eFsxODFdW21dKTtmb3IoeFsxODJdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZc''@;'; put 'put ''dThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThkY2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkx''@;'; put 'put ''NjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVcdTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2''@;'; put 'put ''N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFcdTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFc''@;'; put 'put ''dTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUwYmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1''@;'; put 'put ''YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFcdTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFc''@;'; put 'put ''dTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgyXVttXV09NDY1OTIrbSxGWzQ2NTkyK21dPXhbMTgyXVttXSk7Zm9yKHhbMTgzXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFi''@;'; put 'put ''XHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2''@;'; put 'put ''NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2''@;'; put 'put ''OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1''@;'; put 'put ''XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3''@;'; put 'put ''MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYz''@;'; put 'put ''XHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3NzYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4M11bbV1dPTQ2ODQ4K20sRls0Njg0OCttXT14WzE4M11bbV0pO2Zv''@;'; put 'put ''cih4WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5''@;'; put 'put ''M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1''@;'; put 'put ''N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1''@;'; put 'put ''ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcw''@;'; put 'put ''MFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1''@;'; put 'put ''OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRm''@;'; put 'put ''M1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODRdW21dXT00NzEwNCttLEZbNDcxMDQrbV09''@;'; put 'put ''eFsxODRdW21dKTtmb3IoeFsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkw''@;'; put 'put ''NTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThc''@;'; put 'put ''dTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUz''@;'; put 'put ''MzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2Rc''@;'; put 'put ''dTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVl''@;'; put 'put ''NWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg1XVttXV09NDczNjAr''@;'; put 'put ''bSxGWzQ3MzYwK21dPXhbMTg1XVttXSk7Zm9yKHhbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2''@;'; put 'put ''NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFi''@;'; put 'put ''XHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3''@;'; put 'put ''Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThl''@;'; put 'put ''XHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3''@;'; put 'put ''ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4''@;'; put 'put ''Nl1bbV1dPTQ3NjE2K20sRls0NzYxNittXT14WzE4Nl1bbV0pO2Zvcih4WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1''@;'; put 'put ''ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcx''@;'; put 'put ''Y1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1''@;'; put 'put ''OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVh''@;'; put 'put ''OFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1''@;'; put 'put ''OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg3XVttXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoYWVbeFsxODddW21dXT00Nzg3MittLEZbNDc4NzIrbV09eFsxODddW21dKTtmb3IoeFsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVc''@;'; put 'put ''dTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTVi''@;'; put 'put ''MDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBc''@;'; put 'put ''dTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5''@;'; put 'put ''ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBc''@;'; put 'put ''dTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OF1b''@;'; put 'put ''bV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg4XVttXV09NDgxMjgrbSxGWzQ4MTI4K21dPXhbMTg4XVttXSk7Zm9yKHhbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFm''@;'; put 'put ''XHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3''@;'; put 'put ''YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1''@;'; put 'put ''XHU3Zjc3XHU3ZmFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0''@;'; put 'put ''XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4''@;'; put 'put ''YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZk''@;'; put 'put ''XHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg5XS5sZW5ndGg7KyttKTY1''@;'; put 'put ''NTMzIT09eFsxODldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4OV1bbV1dPTQ4Mzg0K20sRls0ODM4NCttXT14WzE4OV1bbV0pO2Zvcih4WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2''@;'; put 'put ''OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1''@;'; put 'put ''OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0''@;'; put 'put ''NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJm''@;'; put 'put ''M1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1''@;'; put 'put ''NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZj''@;'; put 'put ''N1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MF0u''@;'; put 'put ''bGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTBdW21dXT00ODY0MCttLEZbNDg2NDArbV09eFsxOTBdW21dKTtmb3IoeFsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZm''@;'; put 'put ''YTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVc''@;'; put 'put ''dTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdi''@;'; put 'put ''ZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgx''@;'; put 'put ''YjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFc''@;'; put 'put ''dTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThl''@;'; put 'put ''MzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxt''@;'; put 'put ''PTA7bSE9eFsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkxXVttXV09NDg4OTYrbSxGWzQ4ODk2K21dPXhbMTkxXVttXSk7Zm9yKHhbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5''@;'; put 'put ''XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1''@;'; put 'put ''MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1''@;'; put 'put ''ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgw''@;'; put 'put ''XHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2''@;'; put 'put ''ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksbT0wO20hPXhbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Ml1bbV1dPTQ5MTUyK20sRls0OTE1MittXT14WzE5Ml1bbV0pO2Zvcih4WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2Nk''@;'; put 'put ''ZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1''@;'; put 'put ''ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1''@;'; put 'put ''ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMz''@;'; put 'put ''Zlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1''@;'; put 'put ''OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkz''@;'; put 'put ''NVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTNdW21dXT00OTQwOCttLEZbNDk0MDgrbV09eFsxOTNdW21dKTtmb3IoeFsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTliYWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYx''@;'; put 'put ''ZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFc''@;'; put 'put ''dTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFc''@;'; put 'put ''dTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1''@;'; put 'put ''YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBc''@;'; put 'put ''dThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2''@;'; put 'put ''ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk0XVttXV09NDk2NjQrbSxGWzQ5NjY0K21dPXhbMTk0XVttXSk7Zm9yKHhbMTk1XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5''@;'; put 'put ''YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1''@;'; put 'put ''XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2''@;'; put 'put ''XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4''@;'; put 'put ''NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2''@;'; put 'put ''XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5''@;'; put 'put ''NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5NV1bbV1dPTQ5OTIwK20sRls0OTkyMCttXT14WzE5NV1bbV0pO2Zvcih4WzE5Nl09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1''@;'; put 'put ''OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3''@;'; put 'put ''Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFk''@;'; put 'put ''YVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1''@;'; put 'put ''OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZj''@;'; put 'put ''Mlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1''@;'; put 'put ''ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTZdW21dXT01MDE3NittLEZbNTAxNzYrbV09eFsxOTZdW21d''@;'; put 'put ''KTtmb3IoeFsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJc''@;'; put 'put ''dTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUx''@;'; put 'put ''M2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdj''@;'; put 'put ''NjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFc''@;'; put 'put ''dTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2''@;'; put 'put ''MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVc''@;'; put 'put ''dTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk3XVttXV09NTA0MzIrbSxGWzUwNDMy''@;'; put 'put ''K21dPXhbMTk3XVttXSk7Zm9yKHhbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVm''@;'; put 'put ''XHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5''@;'; put 'put ''N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OF1bbV1dPTUw''@;'; put 'put ''Njg4K20sRls1MDY4OCttXT14WzE5OF1bbV0pO2Zvcih4WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2''@;'; put 'put ''ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1''@;'; put 'put ''NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYw''@;'; put 'put ''NFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1''@;'; put 'put ''NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1Njcz''@;'; put 'put ''OVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsyMDFdW21dXT01MTQ1NittLEZbNTE0NTYrbV09eFsyMDFdW21dKTtmb3IoeFsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdm''@;'; put 'put ''NTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFc''@;'; put 'put ''dTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5''@;'; put 'put ''YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVc''@;'; put 'put ''dTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYy''@;'; put 'put ''N2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMl1bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMjAyXVttXV09NTE3MTIrbSxGWzUxNzEyK21dPXhbMjAyXVttXSk7Zm9yKHhbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2''@;'; put 'put ''NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJk''@;'; put 'put ''XHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4''@;'; put 'put ''MjkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0''@;'; put 'put ''ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1''@;'; put 'put ''XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1''@;'; put 'put ''NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsy''@;'; put 'put ''MDNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwM11bbV1dPTUxOTY4K20sRls1MTk2OCttXT14WzIwM11bbV0pO2Zvcih4WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1''@;'; put 'put ''NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNh''@;'; put 'put ''OFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1''@;'; put 'put ''NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1''@;'; put 'put ''NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVm''@;'; put 'put ''ZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1''@;'; put 'put ''NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwNF0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDRdW21dXT01MjIyNCttLEZbNTIyMjQrbV09eFsyMDRdW21dKTtmb3IoeFsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRc''@;'; put 'put ''dTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcy''@;'; put 'put ''ZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVc''@;'; put 'put ''dTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRc''@;'; put 'put ''dTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThm''@;'; put 'put ''ZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJc''@;'; put 'put ''dTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsy''@;'; put 'put ''MDVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA1XVttXV09NTI0ODArbSxGWzUyNDgwK21dPXhbMjA1XVttXSk7Zm9yKHhbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMz''@;'; put 'put ''XHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1''@;'; put 'put ''N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4''@;'; put 'put ''XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1Y2RiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4''@;'; put 'put ''XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2''@;'; put 'put ''MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZi''@;'; put 'put ''XHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNl1bbV1dPTUyNzM2K20sRls1MjczNittXT14WzIwNl1bbV0pO2Zvcih4WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1''@;'; put 'put ''NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNk''@;'; put 'put ''YVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQw''@;'; put 'put ''OVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1''@;'; put 'put ''NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1Nzcw''@;'; put 'put ''NVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDddW21dXT01Mjk5MittLEZbNTI5OTIrbV09eFsyMDddW21dKTtmb3IoeFsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdc''@;'; put 'put ''dTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgy''@;'; put 'put ''ZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4''@;'; put 'put ''NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNc''@;'; put 'put ''dTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUx''@;'; put 'put ''Y2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFc''@;'; put 'put ''dTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA4XVttXV09NTMyNDgrbSxGWzUzMjQ4K21dPXhbMjA4XVttXSk7Zm9yKHhbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3''@;'; put 'put ''XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1''@;'; put 'put ''ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2''@;'; put 'put ''MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5''@;'; put 'put ''XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2''@;'; put 'put ''ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZk''@;'; put 'put ''XHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOV1bbV1dPTUzNTA0K20sRls1MzUwNCttXT14WzIwOV1bbV0pO2Zvcih4WzIxMF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3''@;'; put 'put ''Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1''@;'; put 'put ''N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1''@;'; put 'put ''NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1''@;'; put 'put ''Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1''@;'; put 'put ''NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4''@;'; put 'put ''NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTBdW21dXT01Mzc2MCttLEZbNTM3NjArbV09eFsyMTBdW21dKTtmb3IoeFsy''@;'; put 'put ''MTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdk''@;'; put 'put ''MWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVc''@;'; put 'put ''dTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJc''@;'; put 'put ''dTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2''@;'; put 'put ''ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2Vc''@;'; put 'put ''dTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkw''@;'; put 'put ''ZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjExXVttXV09NTQwMTYrbSxGWzU0MDE2K21dPXhbMjEx''@;'; put 'put ''XVttXSk7Zm9yKHhbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1''@;'; put 'put ''MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZk''@;'; put 'put ''XHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBj''@;'; put 'put ''XHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1''@;'; put 'put ''N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1''@;'; put 'put ''XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1''@;'; put 'put ''ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMl1bbV1dPTU0MjcyK20sRls1''@;'; put 'put ''NDI3MittXT14WzIxMl1bbV0pO2Zvcih4WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1''@;'; put 'put ''NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4''@;'; put 'put ''YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1''@;'; put 'put ''NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIz''@;'; put 'put ''Nlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1''@;'; put 'put ''NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTNdW21d''@;'; put 'put ''XT01NDUyOCttLEZbNTQ1MjgrbV09eFsyMTNdW21dKTtmb3IoeFsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdc''@;'; put 'put ''dTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTcz''@;'; put 'put ''MDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNc''@;'; put 'put ''dTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdi''@;'; put 'put ''MmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2Jc''@;'; put 'put ''dTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxNF1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMjE0XVttXV09NTQ3ODQrbSxGWzU0Nzg0K21dPXhbMjE0XVttXSk7Zm9yKHhbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFi''@;'; put 'put ''XHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4''@;'; put 'put ''Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFh''@;'; put 'put ''XHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4''@;'; put 'put ''Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYz''@;'; put 'put ''XHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTVdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzIxNV1bbV1dPTU1MDQwK20sRls1NTA0MCttXT14WzIxNV1bbV0pO2Zvcih4WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4''@;'; put 'put ''OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1''@;'; put 'put ''NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgy''@;'; put 'put ''OVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2''@;'; put 'put ''MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1''@;'; put 'put ''NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0''@;'; put 'put ''OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTZdW21dXT01NTI5NittLEZbNTUyOTYrbV09eFsyMTZdW21dKTtmb3IoeFsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYw''@;'; put 'put ''ZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVc''@;'; put 'put ''dTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1''@;'; put 'put ''OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5''@;'; put 'put ''MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2Vc''@;'; put 'put ''dTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZl''@;'; put 'put ''NDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTddLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE3XVttXV09NTU1NTIrbSxGWzU1NTUyK21dPXhbMjE3XVttXSk7Zm9yKHhbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTY4XHU2ZTVjXHU2''@;'; put 'put ''ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMx''@;'; put 'put ''XHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3''@;'; put 'put ''MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3''@;'; put 'put ''NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZh''@;'; put 'put ''XHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3''@;'; put 'put ''Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxOF1bbV1dPTU1ODA4K20sRls1NTgwOCttXT14WzIxOF1bbV0pO2Zvcih4WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3''@;'; put 'put ''NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1''@;'; put 'put ''ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1''@;'; put 'put ''ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhi''@;'; put 'put ''Nlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1''@;'; put 'put ''OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTldW21dXT01NjA2NCttLEZbNTYwNjQrbV09eFsyMTldW21dKTtmb3IoeFsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkx''@;'; put 'put ''MDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlc''@;'; put 'put ''dTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVc''@;'; put 'put ''dTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUy''@;'; put 'put ''NzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNc''@;'; put 'put ''dTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVh''@;'; put 'put ''YzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIwXVttXV09NTYzMjArbSxGWzU2MzIwK21dPXhbMjIwXVttXSk7Zm9yKHhbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1''@;'; put 'put ''ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIw''@;'; put 'put ''XHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIz''@;'; put 'put ''XHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2''@;'; put 'put ''Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0''@;'; put 'put ''XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVm''@;'; put 'put ''YTBkXHU2YmZiXHU2YmZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMV1bbV1dPTU2NTc2K20sRls1NjU3NittXT14WzIyMV1bbV0pO2Zvcih4WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1''@;'; put 'put ''NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0''@;'; put 'put ''MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5''@;'; put 'put ''MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1''@;'; put 'put ''NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2''@;'; put 'put ''OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1''@;'; put 'put ''N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjJdW21dXT01NjgzMittLEZbNTY4MzIrbV09eFsyMjJdW21dKTtmb3IoeFsyMjNdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZc''@;'; put 'put ''dTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdm''@;'; put 'put ''YTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgy''@;'; put 'put ''NDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2Fc''@;'; put 'put ''dTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0''@;'; put 'put ''NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFc''@;'; put 'put ''dTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIzXVttXV09NTcwODgrbSxGWzU3MDg4K21dPXhbMjIzXVttXSk7Zm9y''@;'; put 'put ''KHhbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0''@;'; put 'put ''XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4''@;'; put 'put ''ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDQ0XHU5MDQ5XHU5''@;'; put 'put ''MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3''@;'; put 'put ''XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5''@;'; put 'put ''NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRi''@;'; put 'put ''XHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNF1bbV1dPTU3MzQ0K20sRls1NzM0NCttXT14''@;'; put 'put ''WzIyNF1bbV0pO2Zvcih4WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYw''@;'; put 'put ''MVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1''@;'; put 'put ''NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVk''@;'; put 'put ''Mlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1''@;'; put 'put ''NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3''@;'; put 'put ''N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjVdW21dXT01NzYwMCtt''@;'; put 'put ''LEZbNTc2MDArbV09eFsyMjVdW21dKTtmb3IoeFsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5''@;'; put 'put ''YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZc''@;'; put 'put ''dTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcx''@;'; put 'put ''ODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBc''@;'; put 'put ''dTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4''@;'; put 'put ''YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI2''@;'; put 'put ''XVttXV09NTc4NTYrbSxGWzU3ODU2K21dPXhbMjI2XVttXSk7Zm9yKHhbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3''@;'; put 'put ''YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEz''@;'; put 'put ''XHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4''@;'; put 'put ''NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkx''@;'; put 'put ''XHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4''@;'; put 'put ''NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjddW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzIyN11bbV1dPTU4MTEyK20sRls1ODExMittXT14WzIyN11bbV0pO2Zvcih4WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1''@;'; put 'put ''ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUw''@;'; put 'put ''NFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1''@;'; put 'put ''OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5''@;'; put 'put ''ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1''@;'; put 'put ''NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI4XVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjhdW21dXT01ODM2OCttLEZbNTgzNjgrbV09eFsyMjhdW21dKTtmb3IoeFsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2Vc''@;'; put 'put ''dTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVj''@;'; put 'put ''NjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBc''@;'; put 'put ''dTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNc''@;'; put 'put ''dTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZh''@;'; put 'put ''MTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZc''@;'; put 'put ''dTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjldLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI5XVttXV09NTg2MjQrbSxGWzU4NjI0K21dPXhbMjI5XVttXSk7Zm9yKHhbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYy''@;'; put 'put ''XHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2''@;'; put 'put ''Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVk''@;'; put 'put ''XHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5''@;'; put 'put ''XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3''@;'; put 'put ''OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUx''@;'; put 'put ''XHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMwXS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMF1bbV1dPTU4ODgwK20sRls1ODg4MCttXT14WzIzMF1bbV0pO2Zvcih4WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5''@;'; put 'put ''NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1''@;'; put 'put ''ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUx''@;'; put 'put ''OFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2''@;'; put 'put ''ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1''@;'; put 'put ''ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0''@;'; put 'put ''ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzFdW21dXT01OTEzNittLEZbNTkxMzYrbV09eFsyMzFdW21dKTtmb3IoeFsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVc''@;'; put 'put ''dTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTky''@;'; put 'put ''ZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3''@;'; put 'put ''MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2Zc''@;'; put 'put ''dTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTlj''@;'; put 'put ''ZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMyXVttXV09NTkzOTIrbSxGWzU5MzkyK21dPXhbMjMyXVttXSk7Zm9yKHhbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZkXHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2''@;'; put 'put ''XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1''@;'; put 'put ''ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2''@;'; put 'put ''NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZk''@;'; put 'put ''XHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2''@;'; put 'put ''YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJm''@;'; put 'put ''XHU2ZmI4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzM11bbV1dPTU5NjQ4K20sRls1OTY0OCttXT14WzIzM11bbV0pO2Zvcih4WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFj''@;'; put 'put ''Nlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1''@;'; put 'put ''NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1''@;'; put 'put ''NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2Jl''@;'; put 'put ''Ylx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1''@;'; put 'put ''N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0''@;'; put 'put ''ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzRdW21dXT01OTkwNCttLEZbNTk5MDQrbV09eFsyMzRdW21dKTtmb3IoeFsyMzVdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1''@;'; put 'put ''NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlc''@;'; put 'put ''dTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRc''@;'; put 'put ''dThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThl''@;'; put 'put ''MzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdc''@;'; put 'put ''dTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkz''@;'; put 'put ''MjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM1XVttXV09NjAxNjArbSxGWzYwMTYwK21dPXhbMjM1XVttXSk7Zm9yKHhbMjM2XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5''@;'; put 'put ''NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJi''@;'; put 'put ''XHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3''@;'; put 'put ''XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1''@;'; put 'put ''NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZj''@;'; put 'put ''XHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2''@;'; put 'put ''YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNl1bbV1dPTYwNDE2K20sRls2MDQxNittXT14WzIzNl1bbV0p''@;'; put 'put ''O2Zvcih4WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1''@;'; put 'put ''NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRh''@;'; put 'put ''ZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1Nzdi''@;'; put 'put ''MVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1''@;'; put 'put ''N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0''@;'; put 'put ''N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1''@;'; put 'put ''ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzddW21dXT02MDY3MittLEZbNjA2NzIr''@;'; put 'put ''bV09eFsyMzddW21dKTtmb3IoeFsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFc''@;'; put 'put ''dTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3''@;'; put 'put ''Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRc''@;'; put 'put ''dThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkz''@;'; put 'put ''NDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVc''@;'; put 'put ''dTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM4XVttXV09NjA5''@;'; put 'put ''MjgrbSxGWzYwOTI4K21dPXhbMjM4XVttXSk7Zm9yKHhbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1''@;'; put 'put ''XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5''@;'; put 'put ''YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJl''@;'; put 'put ''XHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2''@;'; put 'put ''NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0''@;'; put 'put ''XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzIzOV1bbV1dPTYxMTg0K20sRls2MTE4NCttXT14WzIzOV1bbV0pO2Zvcih4WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUx''@;'; put 'put ''M1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1''@;'; put 'put ''N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODVi''@;'; put 'put ''OFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1''@;'; put 'put ''ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0''@;'; put 'put ''Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQwXVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsyNDBdW21dXT02MTQ0MCttLEZbNjE0NDArbV09eFsyNDBdW21dKTtmb3IoeFsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThm''@;'; put 'put ''NDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZc''@;'; put 'put ''dTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3''@;'; put 'put ''YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlh''@;'; put 'put ''MGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNc''@;'; put 'put ''dTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUx''@;'; put 'put ''MzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0''@;'; put 'put ''MV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQxXVttXV09NjE2OTYrbSxGWzYxNjk2K21dPXhbMjQxXVttXSk7Zm9yKHhbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2''@;'; put 'put ''NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJi''@;'; put 'put ''XHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3''@;'; put 'put ''N2YxXHU3OTFkXHU3OTFiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3''@;'; put 'put ''ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVj''@;'; put 'put ''XHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4''@;'; put 'put ''OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQyXS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0Ml1bbV1dPTYxOTUyK20sRls2MTk1MittXT14WzI0Ml1bbV0pO2Zvcih4WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1''@;'; put 'put ''OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFi''@;'; put 'put ''MFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1''@;'; put 'put ''OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1''@;'; put 'put ''OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJl''@;'; put 'put ''Nlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1''@;'; put 'put ''OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0''@;'; put 'put ''M10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDNdW21dXT02MjIwOCttLEZbNjIyMDgrbV09eFsyNDNdW21dKTtmb3IoeFsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVc''@;'; put 'put ''dTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcw''@;'; put 'put ''MzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2Rc''@;'; put 'put ''dTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFc''@;'; put 'put ''dTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5''@;'; put 'put ''NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJc''@;'; put 'put ''dTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ0XVttXV09NjI0NjQrbSxGWzYyNDY0K21dPXhbMjQ0XVttXSk7Zm9yKHhbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5''@;'; put 'put ''YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0''@;'; put 'put ''XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJm''@;'; put 'put ''XHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1''@;'; put 'put ''YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJm''@;'; put 'put ''XHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NV1bbV1dPTYyNzIwK20sRls2MjcyMCttXT14WzI0NV1bbV0pO2Zvcih4WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1''@;'; put 'put ''OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThj''@;'; put 'put ''OVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMx''@;'; put 'put ''ZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1''@;'; put 'put ''OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUy''@;'; put 'put ''MFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1''@;'; put 'put ''N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDZdW21dXT02Mjk3NittLEZbNjI5NzYrbV09eFsyNDZdW21dKTtmb3IoeFsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJc''@;'; put 'put ''dThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3''@;'; put 'put ''M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTli''@;'; put 'put ''NTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZc''@;'; put 'put ''dTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2''@;'; put 'put ''ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNc''@;'; put 'put ''dTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ3XVttXV09NjMyMzIrbSxGWzYzMjMyK21dPXhbMjQ3XVttXSk7Zm9yKHhbMjQ4XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5''@;'; put 'put ''XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5''@;'; put 'put ''ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1''@;'; put 'put ''NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0''@;'; put 'put ''XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5''@;'; put 'put ''ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4''@;'; put 'put ''XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0OF1bbV1dPTYzNDg4K20sRls2MzQ4OCttXT14WzI0OF1bbV0pO2Zvcih4WzI0''@;'; put 'put ''OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVh''@;'; put 'put ''M1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1''@;'; put 'put ''N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2NVx1''@;'; put 'put ''N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4''@;'; put 'put ''Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1''@;'; put 'put ''N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2''@;'; put 'put ''OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDldW21dXT02Mzc0NCttLEZbNjM3NDQrbV09eFsyNDld''@;'; put 'put ''W21dKTtyZXR1cm57ZW5jOmFlLGRlYzpGfX0oKSxJZVsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx''@;'; put 'put ''ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRc''@;'; put 'put ''dTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1''@;'; put 'put ''MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZc''@;'; put 'put ''eGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1''@;'; put 'put ''MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29k''@;'; put 'put ''ZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgx''@;'; put 'put ''M1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUy''@;'; put 'put ''MDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVj''@;'; put 'put ''XHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUw''@;'; put 'put ''NDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUw''@;'; put 'put ''NDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4''@;'; put 'put ''LGRlYzphZX19KCksSWVbMTI1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5''@;'; put 'put ''XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFc''@;'; put 'put ''eGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4''@;'; put 'put ''ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhm''@;'; put 'put ''ZFx4ZmVceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVc''@;'; put 'put ''eGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZk''@;'; put 'put ''XHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUw''@;'; put 'put ''M2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNo''@;'; put 'put ''YXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTI1NF09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4''@;'; put 'put ''MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFl''@;'; put 'put ''XHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhh''@;'; put 'put ''MFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5''@;'; put 'put ''XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZc''@;'; put 'put ''eGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4''@;'; put 'put ''LGRlYzphZX19KCksSWVbMTI1NV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhk''@;'; put 'put ''N1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1ZmZmZFx1MDViYlx1MDViY1x1''@;'; put 'put ''MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVk''@;'; put 'put ''OFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysr''@;'; put 'put ''bSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBl''@;'; put 'put ''XHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+''@;'; put 'put ''XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5''@;'; put 'put ''MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2''@;'; put 'put ''MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUw''@;'; put 'put ''NjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUy''@;'; put 'put ''XHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU3XT1mdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpL''@;'; put 'put ''TE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAx''@;'; put 'put ''OVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4''@;'; put 'put ''YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0''@;'; put 'put ''Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2''@;'; put 'put ''XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57''@;'; put 'put ''ZW5jOngsZGVjOmFlfX0oKSxJZVsxMjU4XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFc''@;'; put 'put ''IiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRc''@;'; put 'put ''dTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5''@;'; put 'put ''XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhk''@;'; put 'put ''MVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4''@;'; put 'put ''ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQobSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMWU0XT1m''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8''@;'; put 'put ''PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4''@;'; put 'put ''ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIy''@;'; put 'put ''Ylx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4''@;'; put 'put ''YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4Yjhc''@;'; put 'put ''dTAyZGRcdTAyZGJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIEY9Ilww''@;'; put 'put ''XHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT''@;'; put 'put ''VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhm''@;'; put 'put ''Nlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1''@;'; put 'put ''MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUw''@;'; put 'put ''Mzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2Mx''@;'; put 'put ''XHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIixhZT1bXSx4PXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ri5jaGFyQ29kZUF0KG0pJiYoeFtGLmNoYXJBdChtKV09bSksYWVbbV09Ri5jaGFyQXQo''@;'; put 'put ''bSk7cmV0dXJue2VuYzp4LGRlYzphZX19KCksSWVbMTAwMDddPWZ1bmN0aW9uKCl7Zm9yKHZhciBGPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFk''@;'; put 'put ''XHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1''@;'; put 'put ''MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJc''@;'; put 'put ''eGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIy''@;'; put 'put ''MWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBcdTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUw''@;'; put 'put ''NDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRi''@;'; put 'put ''XHUwNDRjXHUwNDRkXHUwNDRlXHhhNCIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVBdChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBtLEY9''@;'; put 'put ''W10sYWU9e30seD1bXTtmb3IoeFswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5''@;'; put 'put ''Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVm''@;'; put 'put ''OGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVm''@;'; put 'put ''OGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksbT0wO20hPXhbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMF1bbV1dPTArbSxGWzArbV09eFswXVttXSk7Zm9yKHhbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHUzMGZiXHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNVx1ZmY1''@;'; put 'put ''ZVx1ZmZmZFx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1''@;'; put 'put ''MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBc''@;'; put 'put ''dTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG09MDttIT14WzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjFdW21dXT00MTIxNittLEZbNDEyMTYrbV09eFsxNjFdW21dKTtmb3IoeFsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVc''@;'; put 'put ''dTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0''@;'; put 'put ''NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTYyXVttXV09NDE0NzIrbSxGWzQxNDcyK21dPXhbMTYyXVttXSk7Zm9yKHhbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVm''@;'; put 'put ''ZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0''@;'; put 'put ''XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVm''@;'; put 'put ''ZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjVi''@;'; put 'put ''XHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2M11bbV1dPTQxNzI4K20sRls0MTcyOCttXT14WzE2M11bbV0pO2Zvcih4WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1''@;'; put 'put ''MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2''@;'; put 'put ''Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1''@;'; put 'put ''MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjRdW21dXT00MTk4NCttLEZbNDE5ODQrbV09eFsxNjRdW21dKTtmb3IoeFsxNjVdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRc''@;'; put 'put ''dTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMw''@;'; put 'put ''YzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJc''@;'; put 'put ''dTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY1XVttXV09NDIyNDArbSxGWzQyMjQwK21dPXhbMTY1XVttXSk7''@;'; put 'put ''Zm9yKHhbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzky''@;'; put 'put ''XHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2Nl1bbV1dPTQyNDk2K20sRls0MjQ5Nitt''@;'; put 'put ''XT14WzE2Nl1bbV0pO2Zvcih4WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1''@;'; put 'put ''MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1''@;'; put 'put ''MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNjddW21dXT00Mjc1''@;'; put 'put ''MittLEZbNDI3NTIrbV09eFsxNjddW21dKTtmb3IoeFsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMx''@;'; put 'put ''MTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTY4XVttXV09NDMwMDgrbSxGWzQzMDA4''@;'; put 'put ''K21dPXhbMTY4XVttXSk7Zm9yKHhbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3''@;'; put 'put ''XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUy''@;'; put 'put ''NTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE2OV1bbV1dPTQz''@;'; put 'put ''MjY0K20sRls0MzI2NCttXT14WzE2OV1bbV0pO2Zvcih4WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBh''@;'; put 'put ''ZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1''@;'; put 'put ''N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4''@;'; put 'put ''Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVb''@;'; put 'put ''eFsxNzZdW21dXT00NTA1NittLEZbNDUwNTYrbV09eFsxNzZdW21dKTtmb3IoeFsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcy''@;'; put 'put ''YzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFc''@;'; put 'put ''dTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTlj''@;'; put 'put ''ZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzE3N11bbV0uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKGFlW3hbMTc3XVttXV09NDUzMTIrbSxGWzQ1MzEyK21dPXhbMTc3XVttXSk7Zm9yKHhbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5''@;'; put 'put ''YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2Yjhi''@;'; put 'put ''XHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1''@;'; put 'put ''YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsx''@;'; put 'put ''NzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE3OF1bbV1dPTQ1NTY4K20sRls0NTU2OCttXT14WzE3OF1bbV0pO2Zvcih4WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1''@;'; put 'put ''NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4''@;'; put 'put ''NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1''@;'; put 'put ''OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE3OV0ubGVuZ3RoOysr''@;'; put 'put ''bSk2NTUzMyE9PXhbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxNzldW21dXT00NTgyNCttLEZbNDU4MjQrbV09eFsxNzldW21dKTtmb3IoeFsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdc''@;'; put 'put ''dTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUy''@;'; put 'put ''M2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhc''@;'; put 'put ''dTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsx''@;'; put 'put ''ODBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4MF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgwXVttXV09NDYwODArbSxGWzQ2MDgwK21dPXhbMTgwXVttXSk7Zm9yKHhbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRl''@;'; put 'put ''XHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1''@;'; put 'put ''MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzVi''@;'; put 'put ''XHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksbT0wO20hPXhbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4MV1bbV1dPTQ2MzM2K20sRls0NjMzNittXT14WzE4MV1bbV0pO2Zvcih4WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFh''@;'; put 'put ''Y1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1''@;'; put 'put ''NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGVi''@;'; put 'put ''Mlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODJdW21dXT00NjU5MittLEZbNDY1OTIrbV09eFsxODJdW21dKTtmb3IoeFsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1''@;'; put 'put ''ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2Vc''@;'; put 'put ''dTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRl''@;'; put 'put ''MzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZc''@;'; put 'put ''dTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTgzXVttXV09NDY4NDgrbSxGWzQ2ODQ4K21dPXhbMTgzXVttXSk7Zm9yKHhbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4''@;'; put 'put ''Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1''@;'; put 'put ''XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5''@;'; put 'put ''YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRm''@;'; put 'put ''XHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4NF1bbV1dPTQ3MTA0K20sRls0NzEwNCttXT14WzE4NF1bbV0pO2Zvcih4WzE4NV09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1''@;'; put 'put ''NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNi''@;'; put 'put ''ZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1''@;'; put 'put ''OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUw''@;'; put 'put ''NVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODVdW21dXT00NzM2MCttLEZbNDczNjArbV09eFsxODVdW21dKTtmb3IoeFsx''@;'; put 'put ''ODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdc''@;'; put 'put ''dTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2''@;'; put 'put ''OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFc''@;'; put 'put ''dTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVm''@;'; put 'put ''ZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTg2XVttXV09NDc2MTYrbSxGWzQ3NjE2K21dPXhbMTg2''@;'; put 'put ''XVttXSk7Zm9yKHhbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3''@;'; put 'put ''XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1''@;'; put 'put ''NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRl''@;'; put 'put ''XHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5''@;'; put 'put ''NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxODddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE4N11bbV1dPTQ3ODcyK20sRls0''@;'; put 'put ''Nzg3MittXT14WzE4N11bbV0pO2Zvcih4WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1''@;'; put 'put ''ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQz''@;'; put 'put ''ZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1''@;'; put 'put ''N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxODhdW21d''@;'; put 'put ''XT00ODEyOCttLEZbNDgxMjgrbV09eFsxODhdW21dKTtmb3IoeFsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFc''@;'; put 'put ''dTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2''@;'; put 'put ''ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRc''@;'; put 'put ''dTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxODldLmxlbmd0aDsrK20pNjU1MzMhPT14WzE4OV1bbV0uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KGFlW3hbMTg5XVttXV09NDgzODQrbSxGWzQ4Mzg0K21dPXhbMTg5XVttXSk7Zm9yKHhbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0''@;'; put 'put ''XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3''@;'; put 'put ''NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3''@;'; put 'put ''XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTBdW21dLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihhZVt4WzE5MF1bbV1dPTQ4NjQwK20sRls0ODY0MCttXT14WzE5MF1bbV0pO2Zvcih4WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1Nzcw''@;'; put 'put ''Ylx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1''@;'; put 'put ''NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZh''@;'; put 'put ''OVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9''@;'; put 'put ''PXhbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTFdW21dXT00ODg5NittLEZbNDg4OTYrbV09eFsxOTFdW21dKTtmb3IoeFsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1''@;'; put 'put ''NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNc''@;'; put 'put ''dTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdi''@;'; put 'put ''ZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTJdLmxlbmd0''@;'; put 'put ''aDsrK20pNjU1MzMhPT14WzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTkyXVttXV09NDkxNTIrbSxGWzQ5MTUyK21dPXhbMTkyXVttXSk7Zm9yKHhbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2''@;'; put 'put ''ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2''@;'; put 'put ''XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3''@;'; put 'put ''ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h''@;'; put 'put ''PXhbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5M11bbV1dPTQ5NDA4K20sRls0OTQwOCttXT14WzE5M11bbV0pO2Zvcih4WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1''@;'; put 'put ''NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4''@;'; put 'put ''Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1''@;'; put 'put ''NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLG09MDttIT14WzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTRdW21dXT00OTY2NCttLEZbNDk2NjQrbV09eFsxOTRdW21dKTtmb3IoeFsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJc''@;'; put 'put ''dTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRl''@;'; put 'put ''ZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRc''@;'; put 'put ''dTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0''@;'; put 'put ''NzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOTVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk1XVttXV09NDk5MjArbSxGWzQ5OTIwK21dPXhbMTk1XVttXSk7Zm9yKHhbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJi''@;'; put 'put ''XHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1''@;'; put 'put ''NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1''@;'; put 'put ''XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3''@;'; put 'put ''MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5Nl1bbV1dPTUwMTc2K20sRls1MDE3NittXT14WzE5Nl1bbV0pO2Zvcih4WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODEx''@;'; put 'put ''M1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1''@;'; put 'put ''NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3''@;'; put 'put ''OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1''@;'; put 'put ''NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsxOTddW21dXT01MDQzMittLEZbNTA0MzIrbV09eFsxOTddW21dKTtmb3IoeFsxOThdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUz''@;'; put 'put ''MzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRc''@;'; put 'put ''dTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4''@;'; put 'put ''MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2Njhc''@;'; put 'put ''dTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT14WzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMTk4XVttXV09NTA2ODgrbSxGWzUwNjg4K21dPXhbMTk4XVttXSk7Zm9y''@;'; put 'put ''KHhbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3''@;'; put 'put ''Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3''@;'; put 'put ''XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1''@;'; put 'put ''MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRi''@;'; put 'put ''XHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09eFsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzE5OV1bbV1dPTUwOTQ0K20sRls1MDk0NCttXT14''@;'; put 'put ''WzE5OV1bbV0pO2Zvcih4WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFj''@;'; put 'put ''M1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1''@;'; put 'put ''ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRh''@;'; put 'put ''Nlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDBdW21dXT01MTIwMCtt''@;'; put 'put ''LEZbNTEyMDArbV09eFsyMDBdW21dKTtmb3IoeFsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTcz''@;'; put 'put ''Y2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdc''@;'; put 'put ''dTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5''@;'; put 'put ''NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjAx''@;'; put 'put ''XVttXV09NTE0NTYrbSxGWzUxNDU2K21dPXhbMjAxXVttXSk7Zm9yKHhbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3''@;'; put 'put ''N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2''@;'; put 'put ''XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2''@;'; put 'put ''NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDJdW21dLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihhZVt4WzIwMl1bbV1dPTUxNzEyK20sRls1MTcxMittXT14WzIwMl1bbV0pO2Zvcih4WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1''@;'; put 'put ''Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQx''@;'; put 'put ''Y1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1''@;'; put 'put ''OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjAzXVtt''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDNdW21dXT01MTk2OCttLEZbNTE5NjgrbV09eFsyMDNdW21dKTtmb3IoeFsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJc''@;'; put 'put ''dTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZl''@;'; put 'put ''ZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNc''@;'; put 'put ''dTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMDRdLmxlbmd0aDsrK20pNjU1''@;'; put 'put ''MzMhPT14WzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA0XVttXV09NTIyMjQrbSxGWzUyMjI0K21dPXhbMjA0XVttXSk7Zm9yKHhbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1''@;'; put 'put ''XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1''@;'; put 'put ''YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4''@;'; put 'put ''XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA1XS5s''@;'; put 'put ''ZW5ndGg7KyttKTY1NTMzIT09eFsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwNV1bbV1dPTUyNDgwK20sRls1MjQ4MCttXT14WzIwNV1bbV0pO2Zvcih4WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlk''@;'; put 'put ''NFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1''@;'; put 'put ''NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0''@;'; put 'put ''Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLG09''@;'; put 'put ''MDttIT14WzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDZdW21dXT01MjczNittLEZbNTI3MzYrbV09eFsyMDZdW21dKTtmb3IoeFsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZh''@;'; put 'put ''ODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhc''@;'; put 'put ''dTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdi''@;'; put 'put ''YjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxtPTA7bSE9eFsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjA3XVttXV09NTI5OTIrbSxGWzUyOTkyK21dPXhbMjA3XVttXSk7Zm9yKHhbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4''@;'; put 'put ''NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1''@;'; put 'put ''XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5''@;'; put 'put ''NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNi''@;'; put 'put ''XHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjA4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIwOF1bbV1dPTUzMjQ4K20sRls1MzI0OCttXT14WzIwOF1bbV0pO2Zvcih4WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1''@;'; put 'put ''OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRh''@;'; put 'put ''Zlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1''@;'; put 'put ''NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4''@;'; put 'put ''MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjA5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMDldW21dXT01MzUwNCttLEZbNTM1MDQrbV09eFsyMDldW21dKTtmb3IoeFsyMTBdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFc''@;'; put 'put ''dTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4''@;'; put 'put ''NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhc''@;'; put 'put ''dTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZk''@;'; put 'put ''ZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEwXVttXV09NTM3NjArbSxGWzUzNzYwK21dPXhbMjEwXVttXSk7Zm9yKHhbMjExXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0''@;'; put 'put ''XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2''@;'; put 'put ''YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMy''@;'; put 'put ''XHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1''@;'; put 'put ''NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjExXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxMV1bbV1dPTU0MDE2K20sRls1NDAxNittXT14WzIxMV1bbV0p''@;'; put 'put ''O2Zvcih4WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ3NFx1NWJk''@;'; put 'put ''M1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1''@;'; put 'put ''OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4''@;'; put 'put ''ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1''@;'; put 'put ''NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMTJdW21dXT01NDI3MittLEZbNTQyNzIr''@;'; put 'put ''bV09eFsyMTJdW21dKTtmb3IoeFsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhc''@;'; put 'put ''dTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUx''@;'; put 'put ''NDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdc''@;'; put 'put ''dTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjEzXVttXV09NTQ1''@;'; put 'put ''MjgrbSxGWzU0NTI4K21dPXhbMjEzXVttXSk7Zm9yKHhbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYy''@;'; put 'put ''XHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3''@;'; put 'put ''ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEw''@;'; put 'put ''XHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4''@;'; put 'put ''WzIxNF1bbV1dPTU0Nzg0K20sRls1NDc4NCttXT14WzIxNF1bbV0pO2Zvcih4WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZm''@;'; put 'put ''ZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1''@;'; put 'put ''NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1Njcw''@;'; put 'put ''MFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE1XVttXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoYWVbeFsyMTVdW21dXT01NTA0MCttLEZbNTUwNDArbV09eFsyMTVdW21dKTtmb3IoeFsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZj''@;'; put 'put ''MTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZc''@;'; put 'put ''dTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRl''@;'; put 'put ''YzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIx''@;'; put 'put ''Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE2XVttXV09NTUyOTYrbSxGWzU1Mjk2K21dPXhbMjE2XVttXSk7Zm9yKHhbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0''@;'; put 'put ''ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1''@;'; put 'put ''XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4''@;'; put 'put ''YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjE3XS5sZW5ndGg7Kytt''@;'; put 'put ''KTY1NTMzIT09eFsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIxN11bbV1dPTU1NTUyK20sRls1NTU1MittXT14WzIxN11bbV0pO2Zvcih4WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1''@;'; put 'put ''OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMx''@;'; put 'put ''NFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1''@;'; put 'put ''OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIx''@;'; put 'put ''OF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMThdW21dXT01NTgwOCttLEZbNTU4MDgrbV09eFsyMThdW21dKTtmb3IoeFsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJc''@;'; put 'put ''dTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUx''@;'; put 'put ''ZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2Nc''@;'; put 'put ''dTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxtPTA7bSE9eFsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT14WzIxOV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjE5XVttXV09NTYwNjQrbSxGWzU2MDY0K21dPXhbMjE5XVttXSk7Zm9yKHhbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgx''@;'; put 'put ''XHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4''@;'; put 'put ''MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0''@;'; put 'put ''XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyMF1bbV1dPTU2MzIwK20sRls1NjMyMCttXT14WzIyMF1bbV0pO2Zvcih4WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNi''@;'; put 'put ''M1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1''@;'; put 'put ''ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0''@;'; put 'put ''Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1''@;'; put 'put ''ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyMV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjFdW21dXT01NjU3NittLEZbNTY1NzYrbV09eFsyMjFdW21dKTtmb3IoeFsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1''@;'; put 'put ''NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVc''@;'; put 'put ''dTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYz''@;'; put 'put ''NzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFc''@;'; put 'put ''dTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjIyXVttXV09NTY4MzIrbSxGWzU2ODMyK21dPXhbMjIyXVttXSk7Zm9yKHhbMjIzXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2''@;'; put 'put ''NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIx''@;'; put 'put ''XHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1''@;'; put 'put ''NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5''@;'; put 'put ''XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyM11bbV1dPTU3MDg4K20sRls1NzA4OCttXT14WzIyM11bbV0pO2Zvcih4WzIy''@;'; put 'put ''NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUzN1x1NTU1Nlx1NTU3NVx1''@;'; put 'put ''NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVl''@;'; put 'put ''Ylx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1''@;'; put 'put ''NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcw''@;'; put 'put ''OVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMjRdW21dXT01NzM0NCttLEZbNTczNDQrbV09eFsyMjRd''@;'; put 'put ''W21dKTtmb3IoeFsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdc''@;'; put 'put ''dTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVj''@;'; put 'put ''ZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRc''@;'; put 'put ''dThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcy''@;'; put 'put ''ZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjI1XVttXV09NTc2MDArbSxGWzU3''@;'; put 'put ''NjAwK21dPXhbMjI1XVttXSk7Zm9yKHhbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5''@;'; put 'put ''OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1''@;'; put 'put ''XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2''@;'; put 'put ''MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyNl1bbV1d''@;'; put 'put ''PTU3ODU2K20sRls1Nzg1NittXT14WzIyNl1bbV0pO2Zvcih4WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1''@;'; put 'put ''NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYw''@;'; put 'put ''ZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1''@;'; put 'put ''NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''YWVbeFsyMjddW21dXT01ODExMittLEZbNTgxMTIrbV09eFsyMjddW21dKTtmb3IoeFsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBc''@;'; put 'put ''dTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZl''@;'; put 'put ''NWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRc''@;'; put 'put ''dTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIyOF1bbV0uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKGFlW3hbMjI4XVttXV09NTgzNjgrbSxGWzU4MzY4K21dPXhbMjI4XVttXSk7Zm9yKHhbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1''@;'; put 'put ''XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5''@;'; put 'put ''MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFi''@;'; put 'put ''XHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09''@;'; put 'put ''eFsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIyOV1bbV1dPTU4NjI0K20sRls1ODYyNCttXT14WzIyOV1bbV0pO2Zvcih4WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEw''@;'; put 'put ''Y1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1''@;'; put 'put ''NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4''@;'; put 'put ''OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzMF0ubGVuZ3Ro''@;'; put 'put ''OysrbSk2NTUzMyE9PXhbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzBdW21dXT01ODg4MCttLEZbNTg4ODArbV09eFsyMzBdW21dKTtmb3IoeFsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdl''@;'; put 'put ''ZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJc''@;'; put 'put ''dTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTcz''@;'; put 'put ''ZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9''@;'; put 'put ''eFsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzMV1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjMxXVttXV09NTkxMzYrbSxGWzU5MTM2K21dPXhbMjMxXVttXSk7Zm9yKHhbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3''@;'; put 'put ''NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2Fk''@;'; put 'put ''XHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2''@;'; put 'put ''ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksbT0wO20hPXhbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzMl1bbV1dPTU5MzkyK20sRls1OTM5MittXT14WzIzMl1bbV0pO2Zvcih4WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1''@;'; put 'put ''Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4''@;'; put 'put ''ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1''@;'; put 'put ''NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4''@;'; put 'put ''Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzM10ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzNdW21dXT01OTY0OCttLEZbNTk2NDgrbV09eFsyMzNdW21dKTtmb3IoeFsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJc''@;'; put 'put ''dTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2''@;'; put 'put ''MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVc''@;'; put 'put ''dThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYz''@;'; put 'put ''MDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM0XVttXV09NTk5MDQrbSxGWzU5OTA0K21dPXhbMjM0XVttXSk7Zm9yKHhbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1''@;'; put 'put ''XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2''@;'; put 'put ''NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1''@;'; put 'put ''XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4''@;'; put 'put ''MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzNV1bbV1dPTYwMTYwK20sRls2MDE2MCttXT14WzIzNV1bbV0pO2Zvcih4WzIzNl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIz''@;'; put 'put ''OVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1''@;'; put 'put ''NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFk''@;'; put 'put ''NFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1''@;'; put 'put ''Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzZdW21dXT02MDQxNittLEZbNjA0MTYrbV09eFsyMzZdW21dKTtmb3Io''@;'; put 'put ''eFsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYw''@;'; put 'put ''NWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRc''@;'; put 'put ''dTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4''@;'; put 'put ''YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRc''@;'; put 'put ''dTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT14WzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjM3XVttXV09NjA2NzIrbSxGWzYwNjcyK21dPXhb''@;'; put 'put ''MjM3XVttXSk7Zm9yKHhbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0''@;'; put 'put ''XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5''@;'; put 'put ''NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5''@;'; put 'put ''XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzIzOF1bbV1dPTYwOTI4K20s''@;'; put 'put ''Rls2MDkyOCttXT14WzIzOF1bbV0pO2Zvcih4WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUx''@;'; put 'put ''Nlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1''@;'; put 'put ''OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUz''@;'; put 'put ''YVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyMzld''@;'; put 'put ''W21dXT02MTE4NCttLEZbNjExODQrbV09eFsyMzldW21dKTtmb3IoeFsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTll''@;'; put 'put ''MzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlc''@;'; put 'put ''dTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1''@;'; put 'put ''ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0MF1bbV0uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKGFlW3hbMjQwXVttXV09NjE0NDArbSxGWzYxNDQwK21dPXhbMjQwXVttXSk7Zm9yKHhbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3''@;'; put 'put ''YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYx''@;'; put 'put ''XHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4''@;'; put 'put ''MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDFdW21d''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0MV1bbV1dPTYxNjk2K20sRls2MTY5NittXT14WzI0MV1bbV0pO2Zvcih4WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1''@;'; put 'put ''ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZm''@;'; put 'put ''M1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1''@;'; put 'put ''ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT14WzI0Ml0ubGVuZ3RoOysrbSk2NTUz''@;'; put 'put ''MyE9PXhbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDJdW21dXT02MTk1MittLEZbNjE5NTIrbV09eFsyNDJdW21dKTtmb3IoeFsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2Fc''@;'; put 'put ''dTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdi''@;'; put 'put ''MzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNc''@;'; put 'put ''dTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDNdLmxl''@;'; put 'put ''bmd0aDsrK20pNjU1MzMhPT14WzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQzXVttXV09NjIyMDgrbSxGWzYyMjA4K21dPXhbMjQzXVttXSk7Zm9yKHhbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIz''@;'; put 'put ''XHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3''@;'; put 'put ''ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5''@;'; put 'put ''XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksbT0w''@;'; put 'put ''O20hPXhbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDRdW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0NF1bbV1dPTYyNDY0K20sRls2MjQ2NCttXT14WzI0NF1bbV0pO2Zvcih4WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5''@;'; put 'put ''MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1''@;'; put 'put ''OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0''@;'; put 'put ''MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLG09MDttIT14WzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PXhbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoYWVbeFsyNDVdW21dXT02MjcyMCttLEZbNjI3MjArbV09eFsyNDVdW21dKTtmb3IoeFsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3''@;'; put 'put ''MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVc''@;'; put 'put ''dTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTlj''@;'; put 'put ''YTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2Fc''@;'; put 'put ''dTljY2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9eFsyNDZdLmxlbmd0aDsrK20pNjU1MzMhPT14WzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGFlW3hbMjQ2XVttXV09NjI5NzYrbSxGWzYyOTc2K21dPXhbMjQ2XVttXSk7Zm9yKHhbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5''@;'; put 'put ''Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMy''@;'; put 'put ''XHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5''@;'; put 'put ''YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3''@;'; put 'put ''XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPXhbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09eFsyNDddW21dLmNoYXJDb2RlQXQoMCkmJihhZVt4WzI0N11bbV1dPTYzMjMyK20sRls2MzIzMittXT14WzI0N11bbV0pO3JldHVybntlbmM6YWUsZGVjOkZ9fSgpLEll''@;'; put 'put ''WzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz''@;'; put 'put ''NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUw''@;'; put 'put ''MTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJm''@;'; put 'put ''XHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVc''@;'; put 'put ''dTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4''@;'; put 'put ''Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsYWU9W10seD17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PUYuY2hhckNvZGVB''@;'; put 'put ''dChtKSYmKHhbRi5jaGFyQXQobSldPW0pLGFlW21dPUYuY2hhckF0KG0pO3JldHVybntlbmM6eCxkZWM6YWV9fSgpLEllWzEwMDc5XT1mdW5jdGlvbigpe2Zvcih2YXIgRj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEz''@;'; put 'put ''XHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5''@;'; put 'put ''XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRc''@;'; put 'put ''eGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1''@;'; put 'put ''XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRc''@;'; put 'put ''dWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNo''@;'; put 'put ''YXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxJZVsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgx''@;'; put 'put ''Y1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhl''@;'; put 'put ''NVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0''@;'; put 'put ''XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUy''@;'; put 'put ''MDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5''@;'; put 'put ''XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngs''@;'; put 'put ''ZGVjOmFlfX0oKSxJZVsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFyIEY9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkx''@;'; put 'put ''XHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFc''@;'; put 'put ''eGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4''@;'; put 'put ''ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLGFlPVtdLHg9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1GLmNoYXJDb2RlQXQobSkmJih4''@;'; put 'put ''W0YuY2hhckF0KG0pXT1tKSxhZVttXT1GLmNoYXJBdChtKTtyZXR1cm57ZW5jOngsZGVjOmFlfX0oKSxhdC5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJihhdC5leHBvcnRzPUllKSxmdW5jdGlvbihGLGFlKXsidXNlIHN0cmljdCI7aWYodHlwZW9mIEllPiJ1''@;'; put 'put ''Iil7dmFyIHg9SWU7YXQuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9FWFBPUlRfQ09ERVBBR0U+InUiP2F0LmV4cG9ydHM9YWUoeCk6Ri5jcHRhYmxlPWFlKHgpfWVsc2UgSWU9YWUoSWUpfSh0aGlzLGZ1bmN0aW9uKEYpeyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9ezEyMDA6InV0ZjE2bGUiLDEyMDE6''@;'; put 'put ''InV0ZjE2YmUiLDEyZTM6InV0ZjMybGUiLDEyMDAxOiJ1dGYzMmJlIiwxNjk2OToidXRmNjRsZSIsMjAxMjc6ImFzY2lpIiw2NWUzOiJ1dGY3Iiw2NTAwMToidXRmOCJ9LHg9Wzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDFlNF0sbT1bOTMyLDkzNiw5NDksOTUwXSxs''@;'; put 'put ''ZT1bNjUwMDFdLE09e30sTz17fSxSPXt9LHo9e30sSz1mdW5jdGlvbihTKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShTKX0sST1mdW5jdGlvbihTKXtyZXR1cm4gUy5jaGFyQ29kZUF0KDApfSxrPXR5cGVvZiBCdWZmZXI8InUiLEU9ZnVuY3Rpb24oKXt9O2lmKGspe3ZhciBqPSFCdWZm''@;'; put 'put ''ZXIuZnJvbTtpZighail0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtqPSEwfUU9aj9mdW5jdGlvbihDLFMpe3JldHVybiBTP25ldyBCdWZmZXIoQyxTKTpuZXcgQnVmZmVyKEMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVy''@;'; put 'put ''LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEMpe3JldHVybiBuZXcgQnVmZmVyKEMpfSk7dmFyIFY9MTAyNCxCPUJ1ZmZlci5hbGxvY1Vuc2FmZShWKSxYPWZ1bmN0aW9uKFMpe3ZhciB2PWZ1bmN0aW9uKFMpe2Zvcih2YXIgdj1CdWZmZXIuYWxsb2NVbnNhZmUoNjU1MzYpLHA9MDtwPDY1NTM2Oysr''@;'; put 'put ''cCl2W3BdPTA7Zm9yKHZhciB3PU9iamVjdC5rZXlzKFMpLEo9dy5sZW5ndGgsbmU9MCxkZT13W25lXTtuZTxKOysrbmUpKGRlPXdbbmVdKSYmKHZbZGUuY2hhckNvZGVBdCgwKV09U1tkZV0pO3JldHVybiB2fShGW1NdLmVuYyk7cmV0dXJuIGZ1bmN0aW9uKHcsSil7dmFyIGRlLG5lPXcubGVu''@;'; put 'put ''Z3RoLGZlPTAseGU9MCxMZT0wLEZlPTA7aWYoInN0cmluZyI9PXR5cGVvZiB3KWZvcihkZT1CdWZmZXIuYWxsb2NVbnNhZmUobmUpLGZlPTA7ZmU8bmU7KytmZSlkZVtmZV09dlt3LmNoYXJDb2RlQXQoZmUpXTtlbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcih3KSl7Zm9yKGRlPUJ1ZmZlci5hbGxv''@;'; put 'put ''Y1Vuc2FmZSgyKm5lKSx4ZT0wLGZlPTA7ZmU8bmU7KytmZSkoTGU9d1tmZV0pPDEyOD9kZVt4ZSsrXT12W0xlXTpMZTwyMjQ/KGRlW3hlKytdPXZbKCgzMSZMZSk8PDYpKyg2MyZ3W2ZlKzFdKV0sKytmZSk6TGU8MjQwPyhkZVt4ZSsrXT12WygoMTUmTGUpPDwxMikrKCg2MyZ3W2ZlKzFdKTw8''@;'; put 'put ''NikrKDYzJndbZmUrMl0pXSxmZSs9Mik6KEZlPSgoNyZMZSk8PDE4KSsoKDYzJndbZmUrMV0pPDwxMikrKCg2MyZ3W2ZlKzJdKTw8NikrKDYzJndbZmUrM10pLGZlKz0zLEZlPDY1NTM2P2RlW3hlKytdPXZbRmVdOihkZVt4ZSsrXT12WzU1Mjk2KygoRmUtPTY1NTM2KT4+MTAmMTAyMyldLGRl''@;'; put 'put ''W3hlKytdPXZbNTYzMjArKDEwMjMmRmUpXSkpO2RlPWRlLnNsaWNlKDAseGUpfWVsc2UgZm9yKGRlPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSksZmU9MDtmZTxuZTsrK2ZlKWRlW2ZlXT12W3dbZmVdLmNoYXJDb2RlQXQoMCldO3JldHVybiBKJiYiYnVmIiE9PUo/ImFyciIhPT1KP2RlLnRvU3Ry''@;'; put 'put ''aW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGRlKTpkZX19LFU9ZnVuY3Rpb24oUyl7dmFyIHY9RltTXS5kZWMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTAsSj0iIjtmb3Iodz0wO3c8di5sZW5ndGg7Kyt3KWlmKEo9dlt3XSl7dmFyIG5lPUouY2hhckNvZGVBdCgwKTtwWzIq''@;'; put 'put ''d109MjU1Jm5lLHBbMip3KzFdPW5lPj44fXJldHVybiBmdW5jdGlvbihmZSl7dmFyIHhlPWZlLmxlbmd0aCxMZT0wLEZlPTA7aWYoMip4ZT5WJiYoVj0yKnhlLEI9QnVmZmVyLmFsbG9jVW5zYWZlKFYpKSxCdWZmZXIuaXNCdWZmZXIoZmUpKWZvcihMZT0wO0xlPHhlO0xlKyspQlsyKkxlXT1w''@;'; put 'put ''W0ZlPTIqZmVbTGVdXSxCWzIqTGUrMV09cFtGZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZmUpZm9yKExlPTA7TGU8eGU7TGUrKylGZT0yKmZlLmNoYXJDb2RlQXQoTGUpLEJbMipMZV09cFtGZV0sQlsyKkxlKzFdPXBbRmUrMV07ZWxzZSBmb3IoTGU9MDtMZTx4ZTtMZSsrKUJbMipM''@;'; put 'put ''ZV09cFtGZT0yKmZlW0xlXV0sQlsyKkxlKzFdPXBbRmUrMV07cmV0dXJuIEIuc2xpY2UoMCwyKnhlKS50b1N0cmluZygidWNzMiIpfX0scT1mdW5jdGlvbihTKXtmb3IodmFyIHY9RltTXS5lbmMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTA7dzwxMzEwNzI7Kyt3KXBbd109MDtm''@;'; put 'put ''b3IodmFyIEo9T2JqZWN0LmtleXModiksbmU9MCxkZT1KW25lXTtuZTxKLmxlbmd0aDsrK25lKWlmKGRlPUpbbmVdKXt2YXIgZmU9ZGUuY2hhckNvZGVBdCgwKTtwWzIqZmVdPTI1NSZ2W2RlXSxwWzIqZmUrMV09dltkZV0+Pjh9cmV0dXJuIGZ1bmN0aW9uKExlLEZlKXt2YXIgT2U9TGUubGVu''@;'; put 'put ''Z3RoLGplPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKk9lKSxXZT0wLEtlPTAsWWU9MCxKZT0wLGx0PTA7aWYoInN0cmluZyI9PXR5cGVvZiBMZSl7Zm9yKFdlPUplPTA7V2U8T2U7KytXZSlLZT0yKkxlLmNoYXJDb2RlQXQoV2UpLGplW0plKytdPXBbS2UrMV18fHBbS2VdLHBbS2UrMV0+MCYmKGpl''@;'; put 'put ''W0plKytdPXBbS2VdKTtqZT1qZS5zbGljZSgwLEplKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihMZSkpe2ZvcihXZT1KZT0wO1dlPE9lOysrV2UpKGx0PUxlW1dlXSk8MTI4P0tlPWx0Omx0PDIyND8oS2U9KCgzMSZsdCk8PDYpKyg2MyZMZVtXZSsxXSksKytXZSk6bHQ8MjQwPyhLZT0oKDE1''@;'; put 'put ''Jmx0KTw8MTIpKygoNjMmTGVbV2UrMV0pPDw2KSsoNjMmTGVbV2UrMl0pLFdlKz0yKTooS2U9KCg3Jmx0KTw8MTgpKygoNjMmTGVbV2UrMV0pPDwxMikrKCg2MyZMZVtXZSsyXSk8PDYpKyg2MyZMZVtXZSszXSksV2UrPTMpLEtlPDY1NTM2PyhqZVtKZSsrXT1wWzErKEtlKj0yKV18fHBbS2Vd''@;'; put 'put ''LHBbS2UrMV0+MCYmKGplW0plKytdPXBbS2VdKSk6KGplW0plKytdPXBbMSsoS2U9MiooNTUyOTYrKChZZT1LZS02NTUzNik+PjEwJjEwMjMpKSldfHxwW0tlXSxwW0tlKzFdPjAmJihqZVtKZSsrXT1wW0tlXSksamVbSmUrK109cFsxKyhLZT0yKig1NjMyMCsoMTAyMyZZZSkpKV18fHBbS2Vd''@;'; put 'put ''LHBbS2UrMV0+MCYmKGplW0plKytdPXBbS2VdKSk7amU9amUuc2xpY2UoMCxKZSl9ZWxzZSBmb3IoV2U9SmU9MDtXZTxPZTtXZSsrKUtlPTIqTGVbV2VdLmNoYXJDb2RlQXQoMCksamVbSmUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoamVbSmUrK109cFtLZV0pO3JldHVybiBGZSYm''@;'; put 'put ''ImJ1ZiIhPT1GZT8iYXJyIiE9PUZlP2plLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGplKTpqZX19LGVlPWZ1bmN0aW9uKFMpe3ZhciBKLHY9RltTXS5kZWMscD1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSx3PTAsbmU9MCxkZT0wLGZlPTA7Zm9yKGZlPTA7ZmU8NjU1MzY7''@;'; put 'put ''KytmZSlwWzIqZmVdPTI1NSxwWzIqZmUrMV09MjUzO2Zvcih3PTA7dzx2Lmxlbmd0aDsrK3cpKEo9dlt3XSkmJihuZT1KLmNoYXJDb2RlQXQoMCkscFtkZT0yKnddPTI1NSZuZSxwW2RlKzFdPW5lPj44KTtyZXR1cm4gZnVuY3Rpb24oTGUpe3ZhciBGZT1MZS5sZW5ndGgsT2U9QnVmZmVyLmFs''@;'; put 'put ''bG9jVW5zYWZlKDIqRmUpLGplPTAsV2U9MCxLZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihMZSkpZm9yKGplPTA7amU8RmU7amUrKykyNTU9PT1wW1dlPTIqTGVbamVdXSYmMjUzPT09cFtXZSsxXSYmKFdlPTIqKChMZVtqZV08PDgpK0xlW2plKzFdKSwrK2plKSxPZVtLZSsrXT1wW1dlXSxPZVtL''@;'; put 'put ''ZSsrXT1wW1dlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBMZSlmb3IoamU9MDtqZTxGZTtqZSsrKVdlPTIqTGUuY2hhckNvZGVBdChqZSksMjU1PT09cFtXZV0mJjI1Mz09PXBbV2UrMV0mJihXZT0yKigoTGUuY2hhckNvZGVBdChqZSk8PDgpK0xlLmNoYXJDb2RlQXQoamUrMSkpLCsr''@;'; put 'put ''amUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07ZWxzZSBmb3IoamU9MDtqZTxGZTtqZSsrKTI1NT09PXBbV2U9MipMZVtqZV1dJiYyNTM9PT1wW1dlKzFdJiYoV2U9MiooKExlW2plXTw8OCkrTGVbamUrMV0pLCsramUpLE9lW0tlKytdPXBbV2VdLE9lW0tlKytdPXBbV2UrMV07''@;'; put 'put ''cmV0dXJuIE9lLnNsaWNlKDAsS2UpLnRvU3RyaW5nKCJ1Y3MyIil9fTtNWzY1MDAxXT1mdW5jdGlvbiBDKFMpe2lmKCJzdHJpbmciPT10eXBlb2YgUylyZXR1cm4gQyhTLnNwbGl0KCIiKS5tYXAoSSkpO3ZhciB2PVMubGVuZ3RoLHA9MCx3PTA7NCp2PlYmJihWPTQqdixCPUJ1ZmZlci5hbGxv''@;'; put 'put ''Y1Vuc2FmZShWKSk7dmFyIEo9MDt2Pj0zJiYyMzk9PVNbMF0mJjE4Nz09U1sxXSYmMTkxPT1TWzJdJiYoSj0zKTtmb3IodmFyIG5lPTEsZGU9MCxmZT0wO0o8djtKKz1uZSluZT0xLChmZT1TW0pdKTwxMjg/cD1mZTpmZTwyMjQ/KHA9NjQqKDMxJmZlKSsoNjMmU1tKKzFdKSxuZT0yKTpmZTwy''@;'; put 'put ''NDA/KHA9KCgxNSZmZSk8PDEyKSs2NCooNjMmU1tKKzFdKSsoNjMmU1tKKzJdKSxuZT0zKToocD0yNjIxNDQqKDcmZmUpKygoNjMmU1tKKzFdKTw8MTIpKzY0Kig2MyZTW0orMl0pKyg2MyZTW0orM10pLG5lPTQpLHA8NjU1MzY/KEJbZGUrK109MjU1JnAsQltkZSsrXT1wPj44KToodz01NTI5''@;'; put 'put ''NisoKHAtPTY1NTM2KT4+MTAmMTAyMykscD01NjMyMCsoMTAyMyZwKSxCW2RlKytdPTI1NSZ3LEJbZGUrK109dz4+PjgsQltkZSsrXT0yNTUmcCxCW2RlKytdPXA+Pj44JjI1NSk7cmV0dXJuIEIuc2xpY2UoMCxkZSkudG9TdHJpbmcoInVjczIiKX0sT1s2NTAwMV09ZnVuY3Rpb24oUyx2KXtp''@;'; put 'put ''ZihrJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIHYmJiJidWYiIT09dj8iYXJyIiE9PXY/Uy50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChTKTpTO3ZhciBwPVMubGVuZ3RoLHc9MCxKPTAsbmU9MCxkZT0ic3RyaW5nIj09dHlwZW9mIFM7NCpwPlYmJihWPTQqcCxCPUJ1ZmZl''@;'; put 'put ''ci5hbGxvY1Vuc2FmZShWKSk7Zm9yKHZhciBmZT0wO2ZlPHA7KytmZSkodz1kZT9TLmNoYXJDb2RlQXQoZmUpOlNbZmVdLmNoYXJDb2RlQXQoMCkpPD0xMjc/QltuZSsrXT13Onc8PTIwNDc/KEJbbmUrK109MTkyKyh3Pj42KSxCW25lKytdPTEyOCsoNjMmdykpOnc+PTU1Mjk2JiZ3PD01NzM0''@;'; put 'put ''Mz8ody09NTUyOTYsKytmZSxKPShkZT9TLmNoYXJDb2RlQXQoZmUpOlNbZmVdLmNoYXJDb2RlQXQoMCkpLTU2MzIwKyh3PDwxMCksQltuZSsrXT0yNDArKEo+Pj4xOCY3KSxCW25lKytdPTE0NCsoSj4+PjEyJjYzKSxCW25lKytdPTEyOCsoSj4+PjYmNjMpLEJbbmUrK109MTI4Kyg2MyZKKSk6''@;'; put 'put ''KEJbbmUrK109MjI0Kyh3Pj4xMiksQltuZSsrXT0xMjgrKHc+PjYmNjMpLEJbbmUrK109MTI4Kyg2MyZ3KSk7cmV0dXJuIHYmJiJidWYiIT09dj8iYXJyIiE9PXY/Qi5zbGljZSgwLG5lKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChCLDAsbmUpOkIuc2xpY2UoMCxuZSl9fXZh''@;'; put 'put ''ciB0ZT1mdW5jdGlvbigpe2lmKGspe2lmKFJbeFswXV0pcmV0dXJuO3ZhciBTPTAsdj0wO2ZvcihTPTA7Uzx4Lmxlbmd0aDsrK1MpRlt2PXhbU11dJiYoUlt2XT1VKHYpLHpbdl09WCh2KSk7Zm9yKFM9MDtTPG0ubGVuZ3RoOysrUylGW3Y9bVtTXV0mJihSW3ZdPWVlKHYpLHpbdl09cSh2KSk7''@;'; put 'put ''Zm9yKFM9MDtTPGxlLmxlbmd0aDsrK1MpTVt2PWxlW1NdXSYmKFJbdl09TVt2XSksT1t2XSYmKHpbdl09T1t2XSl9fSxvZT1mdW5jdGlvbihDLFMpe3JldHVybiIifSxzZT1mdW5jdGlvbihTKXtkZWxldGUgUltTXSxkZWxldGUgeltTXX0sdWU9e2VuY2FjaGU6dGUsZGVjYWNoZTpmdW5jdGlv''@;'; put 'put ''bigpe2lmKGspe2lmKCFSW3hbMF1dKXJldHVybjt4LmZvckVhY2goc2UpLG0uZm9yRWFjaChzZSksbGUuZm9yRWFjaChzZSl9Yj1vZSxEPTB9LHNiY3M6eCxkYmNzOm19O3RlKCk7dmFyIGNlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEy''@;'; put 'put ''MzQ1Njc4OSsvIixiPW9lLEQ9MDtyZXR1cm4gRi51dGlscz17ZGVjb2RlOmZ1bmN0aW9uIEMoUyx2KXt2YXIgcDtpZihwPVJbU10pcmV0dXJuIHAodik7aWYoInN0cmluZyI9PXR5cGVvZiB2KXJldHVybiBDKFMsdi5zcGxpdCgiIikubWFwKEkpKTt2YXIgamUsdz12Lmxlbmd0aCxKPW5ldyBB''@;'; put 'put ''cnJheSh3KSxuZT0iIixkZT0wLGZlPTAseGU9MSxMZT0wLEZlPTAsT2U9RltTXSxXZT0iIjtpZihPZSYmKGplPU9lLmRlYykpZm9yKGZlPTA7ZmU8dztmZSs9eGUpe2lmKHhlPTIsKG5lPWplWyh2W2ZlXTw8OCkrdltmZSsxXV0pfHwoeGU9MSxuZT1qZVt2W2ZlXV0pLCFuZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlVucmVjb2duaXplZCBjb2RlOiAiK3ZbZmVdKyIgIit2W2ZlK3hlLTFdKyIgIitmZSsiICIreGUrIiAiK2plW3ZbZmVdXSk7SltMZSsrXT1uZX1lbHNle2lmKCEoV2U9YWVbU10pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK1MpO3N3aXRjaChXZSl7Y2FzZSJ1''@;'; put 'put ''dGY4Ijpmb3Iodz49MyYmMjM5PT12WzBdJiYxODc9PXZbMV0mJjE5MT09dlsyXSYmKGZlPTMpO2ZlPHc7ZmUrPXhlKXhlPTEsdltmZV08MTI4P2RlPXZbZmVdOnZbZmVdPDIyND8oZGU9NjQqKDMxJnZbZmVdKSsoNjMmdltmZSsxXSkseGU9Mik6dltmZV08MjQwPyhkZT0oKDE1JnZbZmVdKTw8''@;'; put 'put ''MTIpKzY0Kig2MyZ2W2ZlKzFdKSsoNjMmdltmZSsyXSkseGU9Myk6KGRlPTI2MjE0NCooNyZ2W2ZlXSkrKCg2MyZ2W2ZlKzFdKTw8MTIpKzY0Kig2MyZ2W2ZlKzJdKSsoNjMmdltmZSszXSkseGU9NCksZGU8NjU1MzZ8fChGZT01NTI5NisoKGRlLT02NTUzNik+PjEwJjEwMjMpLGRlPTU2MzIw''@;'; put 'put ''KygxMDIzJmRlKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoRmUpKSxKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoZGUpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKGsmJkJ1ZmZlci5pc0J1ZmZlcih2KSlyZXR1cm4gdi50b1N0cmluZyhXZSk7Zm9yKGZlPTA7ZmU8dztmZSsrKUpbZmVd''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGUodltmZV0pO0xlPXc7YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZih3Pj0yJiYyNTU9PXZbMF0mJjI1ND09dlsxXSYmKGZlPTIpLGsmJkJ1ZmZlci5pc0J1ZmZlcih2KSlyZXR1cm4gdi50b1N0cmluZyhXZSk7Zm9yKHhlPTI7ZmUrMTx3O2ZlKz14ZSlKW0xlKytd''@;'; put 'put ''PVN0cmluZy5mcm9tQ2hhckNvZGUoKHZbZmUrMV08PDgpK3ZbZmVdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcih3Pj0yJiYyNTQ9PXZbMF0mJjI1NT09dlsxXSYmKGZlPTIpLHhlPTI7ZmUrMTx3O2ZlKz14ZSlKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKHZbZmVdPDw4KSt2W2ZlKzFd''@;'; put 'put ''KTticmVhaztjYXNlInV0ZjMybGUiOmZvcih3Pj00JiYyNTU9PXZbMF0mJjI1ND09dlsxXSYmMD09PXZbMl0mJjA9PT12WzNdJiYoZmU9NCkseGU9NDtmZTx3O2ZlKz14ZSkoZGU9KHZbZmUrM108PDI0KSsodltmZSsyXTw8MTYpKyh2W2ZlKzFdPDw4KSt2W2ZlXSk+NjU1MzU/KGRlLT02NTUz''@;'; put 'put ''NixKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKGRlPj4xMCYxMDIzKSksSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmRlKSkpOkpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZShkZSk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3Iodz49NCYmMjU1PT12''@;'; put 'put ''WzNdJiYyNTQ9PXZbMl0mJjA9PT12WzFdJiYwPT09dlswXSYmKGZlPTQpLHhlPTQ7ZmU8dztmZSs9eGUpKGRlPSh2W2ZlXTw8MjQpKyh2W2ZlKzFdPDwxNikrKHZbZmUrMl08PDgpK3ZbZmUrM10pPjY1NTM1PyhkZS09NjU1MzYsSltMZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2Kyhk''@;'; put 'put ''ZT4+MTAmMTAyMykpLEpbTGUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZkZSkpKTpKW0xlKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoZGUpO2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHc+PTQmJjQzPT12WzBdJiY0Nz09dlsxXSYmMTE4PT12WzJdJiYodz49NSYmNTY9PXZbM10m''@;'; put 'put ''JjQ1PT12WzRdP2ZlPTU6KDU2PT12WzNdfHw1Nz09dlszXXx8NDM9PXZbM118fDQ3PT12WzNdKSYmKGZlPTQpKTtmZTx3O2ZlKz14ZSlpZig0Mz09PXZbZmVdKWlmKHhlPTEsNDUhPT12W2ZlKzFdKXtmb3IoO1N0cmluZy5mcm9tQ2hhckNvZGUodltmZSt4ZV0pLm1hdGNoKC9bQS1aYS16MC05''@;'; put 'put ''K1wvXS8pOyl4ZSsrO3ZhciBLZT0wOzQ1PT09dltmZSt4ZV0mJigrK3hlLEtlPTEpO2Zvcih2YXIgWWU9W10sSmU9IiIsQWU9MCxUZT0wLHFlPTAsWGU9MCxVZT0xO1VlPHhlLUtlJiYoQWU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKHZbZmUrVWUrK10pKSxUZT1jZS5pbmRleE9m''@;'; put 'put ''KFN0cmluZy5mcm9tQ2hhckNvZGUodltmZStVZSsrXSkpLFllLnB1c2goQWU8PDJ8VGU+PjQpLC0xIT09KHFlPWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZSh2W2ZlK1VlKytdKSkpJiYoWWUucHVzaCgoMTUmVGUpPDw0fHFlPj4yKSwtMSE9PShYZT1jZS5pbmRleE9mKFN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUodltmZStVZSsrXSkpKSkpOylYZTw2NCYmWWUucHVzaCgoMyZxZSk8PDZ8WGUpO2ZvcihKZT1DKDEyMDEsWWUpLFVlPTA7VWU8SmUubGVuZ3RoOysrVWUpSltMZSsrXT1KZS5jaGFyQXQoVWUpfWVsc2UgeGU9MixKW0xlKytdPSIrIjtlbHNlIHhlPTEsSltMZSsrXT1TdHJp''@;'; put 'put ''bmcuZnJvbUNoYXJDb2RlKHZbZmVdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIrUysiICIrYWVbU10pfX1yZXR1cm4gSi5zbGljZSgwLExlKS5qb2luKCIiKX0sZW5jb2RlOmZ1bmN0aW9uIEMoUyx2LHApe2lmKFM9PT1EJiZiKXJldHVybiBi''@;'; put 'put ''KHYscCk7aWYoeltTXSlyZXR1cm4oYj16W0Q9U10pKHYscCk7ayYmQnVmZmVyLmlzQnVmZmVyKHYpJiYodj12LnRvU3RyaW5nKCJ1dGY4IikpO3ZhciBGZSx3PXYubGVuZ3RoLEo9az9CdWZmZXIuYWxsb2NVbnNhZmUoNCp3KTpbXSxuZT0wLGRlPTAsZmU9MCx4ZT0wLExlPUZbU10sT2U9IiIs''@;'; put 'put ''amU9InN0cmluZyI9PXR5cGVvZiB2O2lmKExlJiYoRmU9TGUuZW5jKSlmb3IoZGU9MDtkZTx3OysrZGUsKytmZSkobmU9RmVbamU/di5jaGFyQXQoZGUpOnZbZGVdXSk+MjU1PyhKW2ZlXT1uZT4+OCxKWysrZmVdPTI1NSZuZSk6SltmZV09MjU1Jm5lO2Vsc2V7aWYoIShPZT1hZVtTXSkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIrUyk7c3dpdGNoKE9lKXtjYXNlInV0ZjgiOmlmKGsmJmplKXtmZT0oSj1FKHYsT2UpKS5sZW5ndGg7YnJlYWt9Zm9yKGRlPTA7ZGU8dzsrK2RlLCsrZmUpKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk8''@;'; put 'put ''PTEyNz9KW2ZlXT1uZTpuZTw9MjA0Nz8oSltmZV09MTkyKyhuZT4+NiksSlsrK2ZlXT0xMjgrKDYzJm5lKSk6bmU+PTU1Mjk2JiZuZTw9NTczNDM/KG5lLT01NTI5Nix4ZT0oamU/di5jaGFyQ29kZUF0KCsrZGUpOnZbKytkZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKG5lPDwxMCksSltmZV09''@;'; put 'put ''MjQwKyh4ZT4+PjE4JjcpLEpbKytmZV09MTQ0Kyh4ZT4+PjEyJjYzKSxKWysrZmVdPTEyOCsoeGU+Pj42JjYzKSxKWysrZmVdPTEyOCsoNjMmeGUpKTooSltmZV09MjI0KyhuZT4+MTIpLEpbKytmZV09MTI4KyhuZT4+NiY2MyksSlsrK2ZlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2Np''@;'; put 'put ''aSI6aWYoayYmInN0cmluZyI9PXR5cGVvZiB2KXtmZT0oSj1FKHYsT2UpKS5sZW5ndGg7YnJlYWt9Zm9yKGRlPTA7ZGU8dzsrK2RlLCsrZmUpe2lmKCEoKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkg''@;'; put 'put ''IituZSk7SltmZV09bmV9YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihrJiYic3RyaW5nIj09dHlwZW9mIHYpe2ZlPShKPUUodixPZSkpLmxlbmd0aDticmVha31mb3IoZGU9MDtkZTx3OysrZGUpbmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApLEpbZmUrK109MjU1Jm5l''@;'; put 'put ''LEpbZmUrK109bmU+Pjg7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3IoZGU9MDtkZTx3OysrZGUpbmU9amU/di5jaGFyQ29kZUF0KGRlKTp2W2RlXS5jaGFyQ29kZUF0KDApLEpbZmUrK109bmU+PjgsSltmZSsrXT0yNTUmbmU7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoZGU9MDtkZTx3OysrZGUp''@;'; put 'put ''KG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsodlsrK2RlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksSltmZSsrXT0yNTUmbmUsSltmZSsrXT0yNTUmKG5lPj49OCksSltmZSsrXT0y''@;'; put 'put ''NTUmKG5lPj49OCksSltmZSsrXT0yNTUmKG5lPj49OCk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3IoZGU9MDtkZTx3OysrZGUpKG5lPWplP3YuY2hhckNvZGVBdChkZSk6dltkZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsodlsr''@;'; put 'put ''K2RlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksSltmZSszXT0yNTUmbmUsSltmZSsyXT0yNTUmKG5lPj49OCksSltmZSsxXT0yNTUmKG5lPj49OCksSltmZV09MjU1JihuZT4+PTgpLGZlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKGRlPTA7ZGU8dztkZSsrKXt2YXIgV2U9amU/di5jaGFyQXQo''@;'; put 'put ''ZGUpOnZbZGVdLmNoYXJBdCgwKTtpZigiKyIhPT1XZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoV2UpPi0xKUpbZmUrK109V2UuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBLZT1DKDEy''@;'; put 'put ''MDEsV2UpO0pbZmUrK109NDMsSltmZSsrXT1jZS5jaGFyQ29kZUF0KEtlWzBdPj4yKSxKW2ZlKytdPWNlLmNoYXJDb2RlQXQoKCgzJktlWzBdKTw8NCkrKChLZVsxXXx8MCk+PjQpKSxKW2ZlKytdPWNlLmNoYXJDb2RlQXQoKCgxNSZLZVsxXSk8PDIpKygoS2VbMl18fDApPj42KSksSltmZSsr''@;'; put 'put ''XT00NX1lbHNlIEpbZmUrK109NDMsSltmZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIrUysiICIrYWVbU10pfX1yZXR1cm4gSj1KLnNsaWNlKDAsZmUpLGs/cCYmImJ1ZiIhPT1wPyJhcnIiIT09cD9KLnRvU3RyaW5nKCJiaW5hcnki''@;'; put 'put ''KTpbXS5zbGljZS5jYWxsKEopOko6InN0ciI9PXA/Si5tYXAoSykuam9pbigiIik6Sn0saGFzY3A6ZnVuY3Rpb24oUyl7cmV0dXJuISghRltTXSYmIWFlW1NdKX0sbWFnaWM6YWUsY2FjaGU6dWV9LEZ9KX0sNzU0NDY6KGF0LEllKT0+e3ZhciBGLGFlLHg7IWZ1bmN0aW9uKG0pe2lmKHR5cGVv''@;'; put 'put ''ZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilhdC5leHBvcnRzPW0oKTtlbHNlIGlmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9bSgpLGFlPVtdLHZvaWQgMCE9PSh4PSJmdW5jdGlvbiI9PXR5cGVvZihGPW0pP0YuYXBwbHkoSWUsYWUpOkYpJiYoYXQuZXhwb3J0''@;'; put 'put ''cz14KTtlbHNle3ZhciBsZTt0eXBlb2YgZ2xvYmFsVGhpczwidSI/bGU9Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9sZT13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/bGU9Z2xvYmFsOnR5cGVvZiAkPCJ1IiYmJC5nbG9iYWw/bGU9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYobGU9''@;'; put 'put ''c2VsZiksbGUuSlNaaXBTeW5jPW0oKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIE8oUix6LEspe2Z1bmN0aW9uIEkoaixWKXtpZigheltqXSl7aWYoIVJbal0pe2lmKGspcmV0dXJuIGsoaiwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraisiJyIpfXZh''@;'; put 'put ''ciBZPXpbal09e2V4cG9ydHM6e319O1Jbal1bMF0uY2FsbChZLmV4cG9ydHMsZnVuY3Rpb24oWCl7cmV0dXJuIEkoUltqXVsxXVtYXXx8WCl9LFksWS5leHBvcnRzLE8sUix6LEspfXJldHVybiB6W2pdLmV4cG9ydHN9Zm9yKHZhciBrPXZvaWQgMCxFPTA7RTxLLmxlbmd0aDtFKyspSShLW0Vd''@;'; put 'put ''KTtyZXR1cm4gSX0oezE6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ijt6LmVuY29kZT1mdW5jdGlvbihJLGspe2Zvcih2YXIgaixWLEIsWSxYLFUscSxF''@;'; put 'put ''PSIiLGVlPTA7ZWU8SS5sZW5ndGg7KVk9KGo9SS5jaGFyQ29kZUF0KGVlKyspKT4+MixYPSgzJmopPDw0fChWPUkuY2hhckNvZGVBdChlZSsrKSk+PjQsVT0oMTUmVik8PDJ8KEI9SS5jaGFyQ29kZUF0KGVlKyspKT4+NixxPTYzJkIsaXNOYU4oVik/VT1xPTY0OmlzTmFOKEIpJiYocT02NCks''@;'; put 'put ''RT1FK0suY2hhckF0KFkpK0suY2hhckF0KFgpK0suY2hhckF0KFUpK0suY2hhckF0KHEpO3JldHVybiBFfSx6LmRlY29kZT1mdW5jdGlvbihJLGspe3ZhciBWLEIsWSxYLFUscSxFPSIiLGVlPTA7Zm9yKEk9SS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7ZWU8SS5sZW5ndGg7''@;'; put 'put ''KVk9Sy5pbmRleE9mKEkuY2hhckF0KGVlKyspKSxWPSgxNSYoWD1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykpKSk8PDR8KFU9Sy5pbmRleE9mKEkuY2hhckF0KGVlKyspKSk+PjIsQj0oMyZVKTw8NnwocT1LLmluZGV4T2YoSS5jaGFyQXQoZWUrKykpKSxFKz1TdHJpbmcuZnJvbUNoYXJDb2Rl''@;'; put 'put ''KFk8PDJ8WD4+NCksNjQhPVUmJihFKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFYpKSw2NCE9cSYmKEUrPVN0cmluZy5mcm9tQ2hhckNvZGUoQikpO3JldHVybiBFfX0se31dLDI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSygpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0''@;'; put 'put ''aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH1LLnByb3RvdHlwZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBudWxsfX0sUi5leHBvcnRzPUt9LHt9XSwzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ouU1RPUkU9e21hZ2ljOiJcMFwwIixjb21wcmVzczpmdW5jdGlvbihLKXtyZXR1cm4gS30sdW5jb21wcmVzczpmdW5jdGlvbihLKXtyZXR1cm4gS30sY29tcHJlc3NJ''@;'; put 'put ''bnB1dFR5cGU6bnVsbCx1bmNvbXByZXNzSW5wdXRUeXBlOm51bGx9LHouREVGTEFURT1PKCIuL2ZsYXRlIil9LHsiLi9mbGF0ZSI6OH1dLDQ6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEk9WzAsMTk5Njk1OTg5NCwzOTkzOTE5Nzg4LDI1Njc1MjQ3''@;'; put 'put ''OTQsMTI0NjM0MTM3LDE4ODYwNTc2MTUsMzkxNTYyMTY4NSwyNjU3MzkyMDM1LDI0OTI2ODI3NCwyMDQ0NTA4MzI0LDM3NzIxMTUyMzAsMjU0NzE3Nzg2NCwxNjI5NDE5OTUsMjEyNTU2MTAyMSwzODg3NjA3MDQ3LDI0Mjg0NDQwNDksNDk4NTM2NTQ4LDE3ODk5Mjc2NjYsNDA4OTAxNjY0OCwy''@;'; put 'put ''MjI3MDYxMjE0LDQ1MDU0ODg2MSwxODQzMjU4NjAzLDQxMDc1ODA3NTMsMjIxMTY3NzYzOSwzMjU4ODM5OTAsMTY4NDc3NzE1Miw0MjUxMTIyMDQyLDIzMjE5MjY2MzYsMzM1NjMzNDg3LDE2NjEzNjU0NjUsNDE5NTMwMjc1NSwyMzY2MTE1MzE3LDk5NzA3MzA5NiwxMjgxOTUzODg2LDM1Nzk4''@;'; put 'put ''NTUzMzIsMjcyNDY4ODI0MiwxMDA2ODg4MTQ1LDEyNTg2MDc2ODcsMzUyNDEwMTYyOSwyNzY4OTQyNDQzLDkwMTA5NzcyMiwxMTE5MDAwNjg0LDM2ODY1MTcyMDYsMjg5ODA2NTcyOCw4NTMwNDQ0NTEsMTE3MjI2NjEwMSwzNzA1MDE1NzU5LDI4ODI2MTY2NjUsNjUxNzY3OTgwLDEzNzM1MDM1''@;'; put 'put ''NDYsMzM2OTU1NDMwNCwzMjE4MTA0NTk4LDU2NTUwNzI1MywxNDU0NjIxNzMxLDM0ODUxMTE3MDUsMzA5OTQzNjMwMyw2NzEyNjY5NzQsMTU5NDE5ODAyNCwzMzIyNzMwOTMwLDI5NzAzNDc4MTIsNzk1ODM1NTI3LDE0ODMyMzAyMjUsMzI0NDM2NzI3NSwzMDYwMTQ5NTY1LDE5OTQxNDYxOTIs''@;'; put 'put ''MzExNTg1MzQsMjU2MzkwNzc3Miw0MDIzNzE3OTMwLDE5MDc0NTk0NjUsMTEyNjM3MjE1LDI2ODAxNTMyNTMsMzkwNDQyNzA1OSwyMDEzNzc2MjkwLDI1MTcyMjAzNiwyNTE3MjE1Mzc0LDM3NzU4MzAwNDAsMjEzNzY1Njc2MywxNDEzNzY4MTMsMjQzOTI3NzcxOSwzODY1MjcxMjk3LDE4MDIx''@;'; put 'put ''OTU0NDQsNDc2ODY0ODY2LDIyMzgwMDEzNjgsNDA2NjUwODg3OCwxODEyMzcwOTI1LDQ1MzA5MjczMSwyMTgxNjI1MDI1LDQxMTE0NTEyMjMsMTcwNjA4ODkwMiwzMTQwNDI3MDQsMjM0NDUzMjIwMiw0MjQwMDE3NTMyLDE2NTg2NTgyNzEsMzY2NjE5OTc3LDIzNjI2NzAzMjMsNDIyNDk5NDQw''@;'; put 'put ''NSwxMzAzNTM1OTYwLDk4NDk2MTQ4NiwyNzQ3MDA3MDkyLDM1NjkwMzc1MzgsMTI1NjE3MDgxNywxMDM3NjA0MzExLDI3NjUyMTA3MzMsMzU1NDA3OTk5NSwxMTMxMDE0NTA2LDg3OTY3OTk5NiwyOTA5MjQzNDYyLDM2NjM3NzE4NTYsMTE0MTEyNDQ2Nyw4NTU4NDIyNzcsMjg1MjgwMTYzMSwz''@;'; put 'put ''NzA4NjQ4NjQ5LDEzNDI1MzM5NDgsNjU0NDU5MzA2LDMxODgzOTYwNDgsMzM3MzAxNTE3NCwxNDY2NDc5OTA5LDU0NDE3OTYzNSwzMTEwNTIzOTEzLDM0NjI1MjIwMTUsMTU5MTY3MTA1NCw3MDIxMzg3NzYsMjk2NjQ2MDQ1MCwzMzUyNzk5NDEyLDE1MDQ5MTg4MDcsNzgzNTUxODczLDMwODI2''@;'; put 'put ''NDA0NDMsMzIzMzQ0Mjk4OSwzOTg4MjkyMzg0LDI1OTYyNTQ2NDYsNjIzMTcwNjgsMTk1NzgxMDg0MiwzOTM5ODQ1OTQ1LDI2NDc4MTYxMTEsODE0NzA5OTcsMTk0MzgwMzUyMywzODE0OTE4OTMwLDI0ODk1OTY4MDQsMjI1Mjc0NDMwLDIwNTM3OTAzNzYsMzgyNjE3NTc1NSwyNDY2OTA2MDEz''@;'; put 'put ''LDE2NzgxNjc0MywyMDk3NjUxMzc3LDQwMjc1NTI1ODAsMjI2NTQ5MDM4Niw1MDM0NDQwNzIsMTc2MjA1MDgxNCw0MTUwNDE3MjQ1LDIxNTQxMjkzNTUsNDI2NTIyMjI1LDE4NTI1MDc4NzksNDI3NTMxMzUyNiwyMzEyMzE3OTIwLDI4Mjc1MzYyNiwxNzQyNTU1ODUyLDQxODk3MDgxNDMsMjM5''@;'; put 'put ''NDg3Nzk0NSwzOTc5MTc3NjMsMTYyMjE4MzYzNywzNjA0MzkwODg4LDI3MTQ4NjY1NTgsOTUzNzI5NzMyLDEzNDAwNzY2MjYsMzUxODcxOTk4NSwyNzk3MzYwOTk5LDEwNjg4MjgzODEsMTIxOTYzODg1OSwzNjI0NzQxODUwLDI5MzY2NzUxNDgsOTA2MTg1NDYyLDEwOTA4MTI1MTIsMzc0NzY3''@;'; put 'put ''MjAwMywyODI1Mzc5NjY5LDgyOTMyOTEzNSwxMTgxMzM1MTYxLDM0MTIxNzc4MDQsMzE2MDgzNDg0Miw2MjgwODU0MDgsMTM4MjYwNTM2NiwzNDIzMzY5MTA5LDMxMzgwNzg0NjcsNTcwNTYyMjMzLDE0MjY0MDA4MTUsMzMxNzMxNjU0MiwyOTk4NzMzNjA4LDczMzIzOTk1NCwxNTU1MjYxOTU2''@;'; put 'put ''LDMyNjg5MzU1OTEsMzA1MDM2MDYyNSw3NTI0NTk0MDMsMTU0MTMyMDIyMSwyNjA3MDcxOTIwLDM5NjU5NzMwMzAsMTk2OTkyMjk3Miw0MDczNTQ5OCwyNjE3ODM3MjI1LDM5NDM1NzcxNTEsMTkxMzA4Nzg3Nyw4MzkwODM3MSwyNTEyMzQxNjM0LDM4MDM3NDA2OTIsMjA3NTIwODYyMiwyMTMy''@;'; put 'put ''NjExMTIsMjQ2MzI3MjYwMywzODU1OTkwMjg1LDIwOTQ4NTQwNzEsMTk4OTU4ODgxLDIyNjIwMjkwMTIsNDA1NzI2MDYxMCwxNzU5MzU5OTkyLDUzNDQxNDE5MCwyMTc2NzE4NTQxLDQxMzkzMjkxMTUsMTg3MzgzNjAwMSw0MTQ2NjQ1NjcsMjI4MjI0ODkzNCw0Mjc5MjAwMzY4LDE3MTE2ODQ1''@;'; put 'put ''NTQsMjg1MjgxMTE2LDI0MDU4MDE3MjcsNDE2NzIxNjc0NSwxNjM0NDY3Nzk1LDM3NjIyOTcwMSwyNjg1MDY3ODk2LDM2MDgwMDc0MDYsMTMwODkxODYxMiw5NTY1NDM5MzgsMjgwODU1NTEwNSwzNDk1OTU4MjYzLDEyMzE2MzYzMDEsMTA0NzQyNzAzNSwyOTMyOTU5ODE4LDM2NTQ3MDM4MzYs''@;'; put 'put ''MTA4ODM1OTI3MCw5MzY5MThlMywyODQ3NzE0ODk5LDM3MzY4Mzc4MjksMTIwMjkwMDg2Myw4MTcyMzM4OTcsMzE4MzM0MjEwOCwzNDAxMjM3MTMwLDE0MDQyNzc1NTIsNjE1ODE4MTUwLDMxMzQyMDc0OTMsMzQ1MzQyMTIwMywxNDIzODU3NDQ5LDYwMTQ1MDQzMSwzMDA5ODM3NjE0LDMyOTQ3''@;'; put 'put ''MTA0NTYsMTU2NzEwMzc0Niw3MTE5Mjg3MjQsMzAyMDY2ODQ3MSwzMjcyMzgwMDY1LDE1MTAzMzQyMzUsNzU1MTY3MTE3XTtSLmV4cG9ydHM9ZnVuY3Rpb24oRSxqKXtpZih0eXBlb2YgRT4idSJ8fCFFLmxlbmd0aClyZXR1cm4gMDt2YXIgVj0ic3RyaW5nIiE9PUsuZ2V0VHlwZU9mKEUpO3R5''@;'; put 'put ''cGVvZiBqPiJ1IiYmKGo9MCk7dmFyIFg9MDtqXj0tMTtmb3IodmFyIFU9MCxxPUUubGVuZ3RoO1U8cTtVKyspWD1WP0VbVV06RS5jaGFyQ29kZUF0KFUpLGo9aj4+PjheSVsyNTUmKGpeWCldO3JldHVybi0xXmp9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgSz1PKCIuL3V0aWxzIik7ZnVuY3Rpb24gSShrKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1JLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oayl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrayl9LGNoZWNrSW5kZXg6ZnVuY3Rp''@;'; put 'put ''b24oayl7aWYodGhpcy5sZW5ndGg8a3x8azwwKXRocm93IG5ldyBFcnJvcigiRW5kIG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitrKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oayl7dGhpcy5j''@;'; put 'put ''aGVja0luZGV4KGspLHRoaXMuaW5kZXg9a30sc2tpcDpmdW5jdGlvbihrKXt0aGlzLnNldEluZGV4KHRoaXMuaW5kZXgrayl9LGJ5dGVBdDpmdW5jdGlvbihrKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oayl7dmFyIGosRT0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGspLGo9dGhpcy5pbmRleCtrLTE7''@;'; put 'put ''aj49dGhpcy5pbmRleDtqLS0pRT0oRTw8OCkrdGhpcy5ieXRlQXQoaik7cmV0dXJuIHRoaXMuaW5kZXgrPWssRX0scmVhZFN0cmluZzpmdW5jdGlvbihrKXtyZXR1cm4gSy50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKGspKX0scmVhZERhdGE6ZnVuY3Rpb24oayl7fSxsYXN0''@;'; put 'put ''SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihrKXt9LHJlYWREYXRlOmZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyhrPj4yNSYxMjcpLChrPj4yMSYxNSktMSxrPj4xNiYzMSxrPj4xMSYzMSxrPj41JjYzLCgzMSZrKTw8MSl9fSxSLmV4cG9y''@;'; put 'put ''dHM9SX0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5iYXNlNjQ9ITEsei5iaW5hcnk9ITEsei5kaXI9ITEsei5jcmVhdGVGb2xkZXJzPSExLHouZGF0ZT1udWxsLHouY29tcHJlc3Npb249bnVsbCx6LmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0''@;'; put 'put ''aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpO3ouc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihJKXtyZXR1cm4gSy5zdHJpbmcyYmluYXJ5KEkpfSx6LnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKEkpe3JldHVybiBLLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixJ''@;'; put 'put ''KX0sei51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihJKXtyZXR1cm4gSy50cmFuc2Zvcm1Ubygic3RyaW5nIixJKX0sei5zdHJpbmcyQmxvYj1mdW5jdGlvbihJKXt2YXIgaz1LLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsSSk7cmV0dXJuIEsuYXJyYXlCdWZmZXIyQmxvYihrKX0sei5h''@;'; put 'put ''cnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKEkpe3JldHVybiBLLmFycmF5QnVmZmVyMkJsb2IoSSl9LHoudHJhbnNmb3JtVG89ZnVuY3Rpb24oSSxrKXtyZXR1cm4gSy50cmFuc2Zvcm1UbyhJLGspfSx6LmdldFR5cGVPZj1mdW5jdGlvbihJKXtyZXR1cm4gSy5nZXRUeXBlT2YoSSl9LHouY2hl''@;'; put 'put ''Y2tTdXBwb3J0PWZ1bmN0aW9uKEkpe3JldHVybiBLLmNoZWNrU3VwcG9ydChJKX0sei5NQVhfVkFMVUVfMTZCSVRTPUsuTUFYX1ZBTFVFXzE2QklUUyx6Lk1BWF9WQUxVRV8zMkJJVFM9Sy5NQVhfVkFMVUVfMzJCSVRTLHoucHJldHR5PWZ1bmN0aW9uKEkpe3JldHVybiBLLnByZXR0eShJKX0s''@;'; put 'put ''ei5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oSSl7cmV0dXJuIEsuZmluZENvbXByZXNzaW9uKEkpfSx6LmlzUmVnRXhwPWZ1bmN0aW9uKEkpe3JldHVybiBLLmlzUmVnRXhwKEkpfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9dHlwZW9m''@;'; put 'put ''IFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgVWludDMyQXJyYXk8InUiLEk9TygicGFrbyIpO3oudW5jb21wcmVzc0lucHV0VHlwZT1LPyJ1aW50OGFycmF5IjoiYXJyYXkiLHouY29tcHJlc3NJbnB1dFR5cGU9Sz8idWludDhhcnJheSI6ImFycmF5Iix6''@;'; put 'put ''Lm1hZ2ljPSJcYlwwIix6LmNvbXByZXNzPWZ1bmN0aW9uKGspe3JldHVybiBJLmRlZmxhdGVSYXcoayl9LHoudW5jb21wcmVzcz1mdW5jdGlvbihrKXtyZXR1cm4gSS5pbmZsYXRlUmF3KGspfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4v''@;'; put 'put ''YmFzZTY0Iik7ZnVuY3Rpb24gSShrLEUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSShrLEUpO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLGsmJnRoaXMubG9hZChrLEUpLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgaj1uZXcgSTtm''@;'; put 'put ''b3IodmFyIFYgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tWXSYmKGpbVl09dGhpc1tWXSk7cmV0dXJuIGp9fShJLnByb3RvdHlwZT1PKCIuL29iamVjdCIpKS5sb2FkPU8oIi4vbG9hZCIpLEkuc3VwcG9ydD1PKCIuL3N1cHBvcnQiKSxJLmRlZmF1bHRzPU8oIi4vZGVmYXVsdHMi''@;'; put 'put ''KSxJLnV0aWxzPU8oIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksSS5iYXNlNjQ9e2VuY29kZTpmdW5jdGlvbihrKXtyZXR1cm4gSy5lbmNvZGUoayl9LGRlY29kZTpmdW5jdGlvbihrKXtyZXR1cm4gSy5kZWNvZGUoayl9fSxJLmNvbXByZXNzaW9ucz1PKCIuL2NvbXByZXNzaW9ucyIpLFIu''@;'; put 'put ''ZXhwb3J0cz1JfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9kZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBLPU8oIi4vYmFzZTY0IiksST1PKCIuL3ppcEVudHJpZXMiKTtSLmV4cG9ydHM9ZnVuY3Rpb24oayxFKXt2YXIgaixWLEIsWTtmb3IoKEU9RXx8e30pLmJhc2U2NCYmKGs9Sy5kZWNvZGUoaykpLGo9KFY9bmV3IEkoayxFKSkuZmlsZXMsQj0wO0I8ai5sZW5ndGg7QisrKXRoaXMuZmlsZSgo''@;'; put 'put ''WT1qW0JdKS5maWxlTmFtZSxZLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGltaXplZEJpbmFyeVN0cmluZzohMCxkYXRlOlkuZGF0ZSxkaXI6WS5kaXIsY29tbWVudDpZLmZpbGVDb21tZW50Lmxlbmd0aD9ZLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpFLmNyZWF0ZUZvbGRl''@;'; put 'put ''cnN9KTtyZXR1cm4gVi56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1WLnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKE8sUix6KXsoZnVuY3Rpb24oSyl7InVzZSBzdHJpY3QiO3ZhciBJPWZ1bmN0aW9uKCl7''@;'; put 'put ''fTtpZih0eXBlb2YgSzwidSIpe3ZhciBrPSFLLmZyb207aWYoIWspdHJ5e0suZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2s9ITB9ST1rP2Z1bmN0aW9uKEUsail7cmV0dXJuIGo/bmV3IEsoRSxqKTpuZXcgSyhFKX06Sy5mcm9tLmJpbmQoSyksSy5hbGxvY3x8KEsuYWxsb2M9ZnVuY3Rpb24o''@;'; put 'put ''RSl7cmV0dXJuIG5ldyBLKEUpfSl9Ui5leHBvcnRzPWZ1bmN0aW9uKEUsail7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFP0suYWxsb2MoRSk6SShFLGopfSxSLmV4cG9ydHMudGVzdD1mdW5jdGlvbihFKXtyZXR1cm4gSy5pc0J1ZmZlcihFKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwi''@;'; put 'put ''dSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBJKGspe3RoaXMuZGF0YT1rLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShJLnByb3RvdHlw''@;'; put 'put ''ZT1uZXcgSykucmVhZERhdGE9ZnVuY3Rpb24oayl7dGhpcy5jaGVja09mZnNldChrKTt2YXIgRT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K2spO3JldHVybiB0aGlzLmluZGV4Kz1rLEV9LFIuZXhwb3J0cz1JfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpb''@;'; put 'put ''ZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuL3N1cHBvcnQiKSxJPU8oIi4vdXRpbHMiKSxrPU8oIi4vY3JjMzIiKSxFPU8oIi4vc2lnbmF0dXJlIiksaj1PKCIuL2RlZmF1bHRzIiksVj1PKCIuL2Jhc2U2NCIpLEI9TygiLi9jb21wcmVzc2lvbnMiKSxZPU8oIi4vY29t''@;'; put 'put ''cHJlc3NlZE9iamVjdCIpLFg9TygiLi9ub2RlQnVmZmVyIiksVT1PKCIuL3V0ZjgiKSxxPU8oIi4vc3RyaW5nV3JpdGVyIiksZWU9TygiLi91aW50OEFycmF5V3JpdGVyIiksdGU9ZnVuY3Rpb24oUyl7aWYoUy5fZGF0YSBpbnN0YW5jZW9mIFkmJihTLl9kYXRhPVMuX2RhdGEuZ2V0Q29udGVu''@;'; put 'put ''dCgpLFMub3B0aW9ucy5iaW5hcnk9ITAsUy5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1JLmdldFR5cGVPZihTLl9kYXRhKSkpe3ZhciB2PVMuX2RhdGE7Uy5fZGF0YT1uZXcgVWludDhBcnJheSh2Lmxlbmd0aCksMCE9PXYubGVuZ3RoJiZTLl9kYXRhLnNldCh2LDApfXJldHVy''@;'; put 'put ''biBTLl9kYXRhfSxvZT1mdW5jdGlvbihTKXt2YXIgdj10ZShTKTtyZXR1cm4ic3RyaW5nIj09PUkuZ2V0VHlwZU9mKHYpPyFTLm9wdGlvbnMuYmluYXJ5JiZLLm5vZGVidWZmZXI/WCh2LCJ1dGYtOCIpOlMuYXNCaW5hcnkoKTp2fSxzZT1mdW5jdGlvbihTKXt2YXIgdj10ZSh0aGlzKTtyZXR1''@;'; put 'put ''cm4gbnVsbD09PXZ8fHR5cGVvZiB2PiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJhc2U2NCYmKHY9Vi5kZWNvZGUodikpLHY9UyYmdGhpcy5vcHRpb25zLmJpbmFyeT9DLnV0ZjhkZWNvZGUodik6SS50cmFuc2Zvcm1Ubygic3RyaW5nIix2KSwhUyYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJih2PUku''@;'; put 'put ''dHJhbnNmb3JtVG8oInN0cmluZyIsQy51dGY4ZW5jb2RlKHYpKSksdil9LGhlPWZ1bmN0aW9uKFMsdixwKXt0aGlzLm5hbWU9Uyx0aGlzLmRpcj1wLmRpcix0aGlzLmRhdGU9cC5kYXRlLHRoaXMuY29tbWVudD1wLmNvbW1lbnQsdGhpcy5fZGF0YT12LHRoaXMub3B0aW9ucz1wLHRoaXMuX2lu''@;'; put 'put ''aXRpYWxNZXRhZGF0YT17ZGlyOnAuZGlyLGRhdGU6cC5kYXRlfX07aGUucHJvdG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gc2UuY2FsbCh0aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gc2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIFM9b2UodGhpcyk7cmV0dXJuIEkudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLFMpfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgUz1vZSh0aGlzKTtyZXR1cm4gSS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsUyl9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgdWU9ZnVuY3Rpb24oUyx2KXt2YXIgdyxwPSIiO2Zvcih3PTA7dzx2O3crKylwKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZTKSxTPj4+PTg7cmV0dXJuIHB9LGNlPWZ1bmN0aW9uKCl7dmFyIHYscCxTPXt9O2Zvcih2PTA7djxhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoO3YrKylmb3IocCBpbiBhcmd1bWVudHNbdl0pYXJndW1lbnRzW3ZdLmhhc093blByb3BlcnR5KHApJiZ0eXBlb2YgU1twXT4idSImJihTW3BdPWFyZ3VtZW50c1t2XVtwXSk7cmV0dXJuIFN9LGI9ZnVuY3Rpb24oUyx2LHApe3ZhciBKLHc9SS5nZXRUeXBlT2Yodik7aWYocD1m''@;'; put 'put ''dW5jdGlvbihTKXtyZXR1cm4hMD09PShTPVN8fHt9KS5iYXNlNjQmJm51bGw9PVMuYmluYXJ5JiYoUy5iaW5hcnk9ITApLChTPWNlKFMsaikpLmRhdGU9Uy5kYXRlfHxuZXcgRGF0ZSxudWxsIT09Uy5jb21wcmVzc2lvbiYmKFMuY29tcHJlc3Npb249Uy5jb21wcmVzc2lvbi50b1VwcGVyQ2Fz''@;'; put 'put ''ZSgpKSxTfShwKSxwLmNyZWF0ZUZvbGRlcnMmJihKPUQoUykpJiZILmNhbGwodGhpcyxKLCEwKSxwLmRpcnx8bnVsbD09PXZ8fHR5cGVvZiB2PiJ1IilwLmJhc2U2ND0hMSxwLmJpbmFyeT0hMSx2PW51bGw7ZWxzZSBpZigic3RyaW5nIj09PXcpcC5iaW5hcnkmJiFwLmJhc2U2NCYmITAhPT1w''@;'; put 'put ''Lm9wdGltaXplZEJpbmFyeVN0cmluZyYmKHY9SS5zdHJpbmcyYmluYXJ5KHYpKTtlbHNle2lmKHAuYmFzZTY0PSExLHAuYmluYXJ5PSEwLCEod3x8diBpbnN0YW5jZW9mIFkpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIrUysiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQg''@;'; put 'put ''ISIpOyJhcnJheWJ1ZmZlciI9PT13JiYodj1JLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5Iix2KSl9dmFyIG5lPW5ldyBoZShTLHYscCk7cmV0dXJuIHRoaXMuZmlsZXNbU109bmUsbmV9LEQ9ZnVuY3Rpb24oUyl7Ii8iPT1TLnNsaWNlKC0xKSYmKFM9Uy5zdWJzdHJpbmcoMCxTLmxlbmd0aC0x''@;'; put 'put ''KSk7dmFyIHY9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiB2PjA/Uy5zdWJzdHJpbmcoMCx2KToiIn0sSD1mdW5jdGlvbihTLHYpe3JldHVybiIvIiE9Uy5zbGljZSgtMSkmJihTKz0iLyIpLHY9dHlwZW9mIHY8InUiJiZ2LHRoaXMuZmlsZXNbU118fGIuY2FsbCh0aGlzLFMsbnVsbCx7ZGly''@;'; put 'put ''OiEwLGNyZWF0ZUZvbGRlcnM6dn0pLHRoaXMuZmlsZXNbU119LE49ZnVuY3Rpb24oUyx2KXt2YXIgdyxwPW5ldyBZO3JldHVybiBTLl9kYXRhIGluc3RhbmNlb2YgWT8ocC51bmNvbXByZXNzZWRTaXplPVMuX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxwLmNyYzMyPVMuX2RhdGEuY3JjMzIsMD09''@;'; put 'put ''PXAudW5jb21wcmVzc2VkU2l6ZXx8Uy5kaXI/KHY9Qi5TVE9SRSxwLmNvbXByZXNzZWRDb250ZW50PSIiLHAuY3JjMzI9MCk6Uy5fZGF0YS5jb21wcmVzc2lvbk1ldGhvZD09PXYubWFnaWM/cC5jb21wcmVzc2VkQ29udGVudD1TLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KHc9Uy5f''@;'; put 'put ''ZGF0YS5nZXRDb250ZW50KCkscC5jb21wcmVzc2VkQ29udGVudD12LmNvbXByZXNzKEkudHJhbnNmb3JtVG8odi5jb21wcmVzc0lucHV0VHlwZSx3KSkpKTooKCEodz1vZShTKSl8fDA9PT13Lmxlbmd0aHx8Uy5kaXIpJiYodj1CLlNUT1JFLHc9IiIpLHAudW5jb21wcmVzc2VkU2l6ZT13Lmxl''@;'; put 'put ''bmd0aCxwLmNyYzMyPWsodykscC5jb21wcmVzc2VkQ29udGVudD12LmNvbXByZXNzKEkudHJhbnNmb3JtVG8odi5jb21wcmVzc0lucHV0VHlwZSx3KSkpLHAuY29tcHJlc3NlZFNpemU9cC5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgscC5jb21wcmVzc2lvbk1ldGhvZD12Lm1hZ2ljLHB9LGc9''@;'; put 'put ''ZnVuY3Rpb24oUyx2LHAsdyl7dmFyIE9lLGplLEplLGx0LG5lPUkudHJhbnNmb3JtVG8oInN0cmluZyIsVS51dGY4ZW5jb2RlKHYubmFtZSkpLGRlPXYuY29tbWVudHx8IiIsZmU9SS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUoZGUpKSx4ZT1uZS5sZW5ndGghPT12Lm5hbWUu''@;'; put 'put ''bGVuZ3RoLExlPWZlLmxlbmd0aCE9PWRlLmxlbmd0aCxGZT12Lm9wdGlvbnMsV2U9IiIsS2U9IiIsWWU9IiI7SmU9di5faW5pdGlhbE1ldGFkYXRhLmRpciE9PXYuZGlyP3YuZGlyOkZlLmRpcixPZT0obHQ9di5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT12LmRhdGU/di5kYXRlOkZlLmRhdGUp''@;'; put 'put ''LmdldEhvdXJzKCksT2U8PD02LE9lfD1sdC5nZXRNaW51dGVzKCksT2U8PD01LE9lfD1sdC5nZXRTZWNvbmRzKCkvMixqZT1sdC5nZXRGdWxsWWVhcigpLTE5ODAsamU8PD00LGplfD1sdC5nZXRNb250aCgpKzEsamU8PD01LGplfD1sdC5nZXREYXRlKCkseGUmJihLZT11ZSgxLDEpK3VlKGso''@;'; put 'put ''bmUpLDQpK25lLFdlKz0idXAiK3VlKEtlLmxlbmd0aCwyKStLZSksTGUmJihZZT11ZSgxLDEpK3VlKHRoaXMuY3JjMzIoZmUpLDQpK2ZlLFdlKz0idWMiK3VlKFllLmxlbmd0aCwyKStZZSk7dmFyIFBlPSIiO3JldHVybiBQZSs9IlxuXDAiLFBlKz14ZXx8TGU/IlwwXGIiOiJcMFwwIixQZSs9''@;'; put 'put ''cC5jb21wcmVzc2lvbk1ldGhvZCxQZSs9dWUoT2UsMiksUGUrPXVlKGplLDIpLFBlKz11ZShwLmNyYzMyLDQpLFBlKz11ZShwLmNvbXByZXNzZWRTaXplLDQpLFBlKz11ZShwLnVuY29tcHJlc3NlZFNpemUsNCksUGUrPXVlKG5lLmxlbmd0aCwyKSxQZSs9dWUoV2UubGVuZ3RoLDIpLHtmaWxl''@;'; put 'put ''UmVjb3JkOkUuTE9DQUxfRklMRV9IRUFERVIrUGUrbmUrV2UsZGlyUmVjb3JkOkUuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgxNFwwIitQZSt1ZShmZS5sZW5ndGgsMikrIlwwXDBcMFwwIisoITA9PT1KZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrdWUodyw0KStuZStXZStmZSxjb21wcmVz''@;'; put 'put ''c2VkT2JqZWN0OnB9fSxDPXtsb2FkOmZ1bmN0aW9uKFMsdil7dGhyb3cgbmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihTKXt2YXIgcCx3LEosbmUsdj1bXTtmb3IocCBp''@;'; put 'put ''biB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkocCkmJihuZT1uZXcgaGUoKEo9dGhpcy5maWxlc1twXSkubmFtZSxKLl9kYXRhLGNlKEoub3B0aW9ucykpLHc9cC5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLHAubGVuZ3RoKSxwLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9''@;'; put 'put ''PT10aGlzLnJvb3QmJlModyxuZSkmJnYucHVzaChuZSkpO3JldHVybiB2fSxmaWxlOmZ1bmN0aW9uKFMsdixwKXtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7aWYoSS5pc1JlZ0V4cChTKSl7dmFyIHc9UztyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIW5lLmRpciYm''@;'; put 'put ''dy50ZXN0KEopfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEosbmUpe3JldHVybiFuZS5kaXImJko9PT1TfSlbMF18fG51bGx9cmV0dXJuIGIuY2FsbCh0aGlzLFM9dGhpcy5yb290K1MsdixwKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24oUyl7aWYoIVMpcmV0dXJuIHRoaXM7aWYoSS5p''@;'; put 'put ''c1JlZ0V4cChTKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oSixuZSl7cmV0dXJuIG5lLmRpciYmUy50ZXN0KEopfSk7dmFyIHA9SC5jYWxsKHRoaXMsdGhpcy5yb290K1MpLHc9dGhpcy5jbG9uZSgpO3JldHVybiB3LnJvb3Q9cC5uYW1lLHd9LHJlbW92ZTpmdW5jdGlvbihTKXt2YXIg''@;'; put 'put ''dj10aGlzLmZpbGVzW1M9dGhpcy5yb290K1NdO2lmKHZ8fCgiLyIhPVMuc2xpY2UoLTEpJiYoUys9Ii8iKSx2PXRoaXMuZmlsZXNbU10pLHYmJiF2LmRpcilkZWxldGUgdGhpcy5maWxlc1tTXTtlbHNlIGZvcih2YXIgcD10aGlzLmZpbHRlcihmdW5jdGlvbihKLG5lKXtyZXR1cm4gbmUubmFt''@;'; put 'put ''ZS5zbGljZSgwLFMubGVuZ3RoKT09PVN9KSx3PTA7dzxwLmxlbmd0aDt3KyspZGVsZXRlIHRoaXMuZmlsZXNbcFt3XS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oUyl7Uz1jZShTfHx7fSx7YmFzZTY0OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixj''@;'; put 'put ''b21tZW50Om51bGx9KSxJLmNoZWNrU3VwcG9ydChTLnR5cGUpO3ZhciBKLG5lLFdlLHY9W10scD0wLHc9MCxkZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMudXRmOGVuY29kZShTLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIGZlIGluIHRoaXMuZmlsZXMpaWYodGhp''@;'; put 'put ''cy5maWxlcy5oYXNPd25Qcm9wZXJ0eShmZSkpe3ZhciB4ZT10aGlzLmZpbGVzW2ZlXSxMZT14ZS5vcHRpb25zLmNvbXByZXNzaW9ufHxTLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksRmU9QltMZV07aWYoIUZlKXRocm93IG5ldyBFcnJvcihMZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNz''@;'; put 'put ''aW9uIG1ldGhvZCAhIik7dmFyIE9lPU4uY2FsbCh0aGlzLHhlLEZlKSxqZT1nLmNhbGwodGhpcyxmZSx4ZSxPZSxwKTtwKz1qZS5maWxlUmVjb3JkLmxlbmd0aCtPZS5jb21wcmVzc2VkU2l6ZSx3Kz1qZS5kaXJSZWNvcmQubGVuZ3RoLHYucHVzaChqZSl9V2U9RS5DRU5UUkFMX0RJUkVDVE9S''@;'; put 'put ''WV9FTkQrIlwwXDBcMFwwIit1ZSh2Lmxlbmd0aCwyKSt1ZSh2Lmxlbmd0aCwyKSt1ZSh3LDQpK3VlKHAsNCkrdWUoZGUubGVuZ3RoLDIpK2RlO3ZhciBLZT1TLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoSj0idWludDhhcnJheSI9PT1LZXx8ImFycmF5YnVmZmVyIj09PUtlfHwiYmxvYiI9PT1L''@;'; put 'put ''ZXx8Im5vZGVidWZmZXIiPT09S2U/bmV3IGVlKHArdytXZS5sZW5ndGgpOm5ldyBxKHArdytXZS5sZW5ndGgpLG5lPTA7bmU8di5sZW5ndGg7bmUrKylKLmFwcGVuZCh2W25lXS5maWxlUmVjb3JkKSxKLmFwcGVuZCh2W25lXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtm''@;'; put 'put ''b3IobmU9MDtuZTx2Lmxlbmd0aDtuZSsrKUouYXBwZW5kKHZbbmVdLmRpclJlY29yZCk7Si5hcHBlbmQoV2UpO3ZhciBZZT1KLmZpbmFsaXplKCk7c3dpdGNoKFMudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6''@;'; put 'put ''cmV0dXJuIEkudHJhbnNmb3JtVG8oUy50eXBlLnRvTG93ZXJDYXNlKCksWWUpO2Nhc2UiYmxvYiI6cmV0dXJuIEkuYXJyYXlCdWZmZXIyQmxvYihJLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsWWUpKTtjYXNlImJhc2U2NCI6cmV0dXJuIFMuYmFzZTY0P1YuZW5jb2RlKFllKTpZZTtkZWZh''@;'; put 'put ''dWx0OnJldHVybiBZZX19LGNyYzMyOmZ1bmN0aW9uKFMsdil7cmV0dXJuIGsoUyx2KX0sdXRmOGVuY29kZTpmdW5jdGlvbihTKXtyZXR1cm4gSS50cmFuc2Zvcm1Ubygic3RyaW5nIixVLnV0ZjhlbmNvZGUoUykpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKFMpe3JldHVybiBVLnV0ZjhkZWNvZGUo''@;'; put 'put ''Uyl9fTtSLmV4cG9ydHM9Q30seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9ucyI6MywiLi9jcmMzMiI6NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9y''@;'; put 'put ''dCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7ei5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsei5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIix6LkNFTlRS''@;'; put 'put ''QUxfRElSRUNUT1JZX0VORD0iUEtceDA1XHgwNiIsei5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4MDZceDA3Iix6LlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsei5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlv''@;'; put 'put ''bihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vZGF0YVJlYWRlciIpLEk9TygiLi91dGlscyIpO2Z1bmN0aW9uIGsoRSxqKXt0aGlzLmRhdGE9RSxqfHwodGhpcy5kYXRhPUkuc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMu''@;'; put 'put ''aW5kZXg9MH0oay5wcm90b3R5cGU9bmV3IEspLmJ5dGVBdD1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoRSl9LGsucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoRSl9LGsucHJvdG90''@;'; put 'put ''eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEUpe3RoaXMuY2hlY2tPZmZzZXQoRSk7dmFyIGo9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtFKTtyZXR1cm4gdGhpcy5pbmRleCs9RSxqfSxSLmV4cG9ydHM9a30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6''@;'; put 'put ''W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi91dGlscyIpLEk9ZnVuY3Rpb24oKXt0aGlzLmRhdGE9W119O0kucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oayl7az1LLnRyYW5zZm9ybVRvKCJzdHJpbmciLGspLHRoaXMuZGF0YS5wdXNoKGspfSxmaW5hbGl6ZTpm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuam9pbigiIil9fSxSLmV4cG9ydHM9SX0seyIuL3V0aWxzIjoyMX1dLDE3OltmdW5jdGlvbihPLFIseil7KGZ1bmN0aW9uKEspeyJ1c2Ugc3RyaWN0IjtpZih6LmJhc2U2ND0hMCx6LmFycmF5PSEwLHouc3RyaW5nPSEwLHouYXJyYXlidWZmZXI9''@;'; put 'put ''dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLHoubm9kZWJ1ZmZlcj10eXBlb2YgSzwidSIsei51aW50OGFycmF5PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXouYmxvYj0hMTtlbHNle3ZhciBJPW5ldyBBcnJheUJ1ZmZl''@;'; put 'put ''cigwKTt0cnl7ei5ibG9iPTA9PT1uZXcgQmxvYihbSV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNoe3RyeXt2YXIgRT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxv''@;'; put 'put ''YkJ1aWxkZXIpO0UuYXBwZW5kKEkpLHouYmxvYj0wPT09RS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNhdGNoe3ouYmxvYj0hMX19fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBLPU8oIi4vZGF0YVJlYWRlciIpO2Z1bmN0aW9uIEkoayl7ayYmKHRoaXMuZGF0YT1rLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wKX0oSS5wcm90b3R5cGU9bmV3IEspLmJ5dGVBdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5kYXRhW2tdfSxJLnBy''@;'; put 'put ''b3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihrKXtmb3IodmFyIEU9ay5jaGFyQ29kZUF0KDApLGo9ay5jaGFyQ29kZUF0KDEpLFY9ay5jaGFyQ29kZUF0KDIpLEI9ay5jaGFyQ29kZUF0KDMpLFk9dGhpcy5sZW5ndGgtNDtZPj0wOy0tWSlpZih0aGlzLmRhdGFbWV09PT1F''@;'; put 'put ''JiZ0aGlzLmRhdGFbWSsxXT09PWomJnRoaXMuZGF0YVtZKzJdPT09ViYmdGhpcy5kYXRhW1krM109PT1CKXJldHVybiBZO3JldHVybi0xfSxJLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihrKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGspLDA9PT1rKXJldHVybiBuZXcgVWludDhBcnJheSgw''@;'; put 'put ''KTt2YXIgRT10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K2spO3JldHVybiB0aGlzLmluZGV4Kz1rLEV9LFIuZXhwb3J0cz1JfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vdXRpbHMiKSxJPWZ1''@;'; put 'put ''bmN0aW9uKGspe3RoaXMuZGF0YT1uZXcgVWludDhBcnJheShrKSx0aGlzLmluZGV4PTB9O0kucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oayl7MCE9PWsubGVuZ3RoJiYoaz1LLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixrKSx0aGlzLmRhdGEuc2V0KGssdGhpcy5pbmRleCksdGhpcy5p''@;'; put 'put ''bmRleCs9ay5sZW5ndGgpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxSLmV4cG9ydHM9SX0seyIuL3V0aWxzIjoyMX1dLDIwOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO2Zvcih2YXIgSz1PKCIuL3V0aWxzIiksST1PKCIuL3N1cHBvcnQiKSxrPU8oIi4v''@;'; put 'put ''bm9kZUJ1ZmZlciIpLEU9bmV3IEFycmF5KDI1Niksaj0wO2o8MjU2O2orKylFW2pdPWo+PTI1Mj82Omo+PTI0OD81Omo+PTI0MD80Omo+PTIyND8zOmo+PTE5Mj8yOjE7RVsyNTRdPUVbMjU0XT0xO3ZhciBCPWZ1bmN0aW9uKFgsVSl7dmFyIHE7Zm9yKChVPVV8fFgubGVuZ3RoKT5YLmxlbmd0''@;'; put 'put ''aCYmKFU9WC5sZW5ndGgpLHE9VS0xO3E+PTAmJjEyOD09KDE5MiZYW3FdKTspcS0tO3JldHVybiBxPDB8fDA9PT1xP1U6cStFW1hbcV1dPlU/cTpVfSxZPWZ1bmN0aW9uKFgpe3ZhciBxLGVlLHRlLG9lLHNlPVgubGVuZ3RoLGhlPW5ldyBBcnJheSgyKnNlKTtmb3IoZWU9MCxxPTA7cTxzZTsp''@;'; put 'put ''aWYoKHRlPVhbcSsrXSk8MTI4KWhlW2VlKytdPXRlO2Vsc2UgaWYoKG9lPUVbdGVdKT40KWhlW2VlKytdPTY1NTMzLHErPW9lLTE7ZWxzZXtmb3IodGUmPTI9PT1vZT8zMTozPT09b2U/MTU6NztvZT4xJiZxPHNlOyl0ZT10ZTw8Nnw2MyZYW3ErK10sb2UtLTtvZT4xP2hlW2VlKytdPTY1NTMz''@;'; put 'put ''OnRlPDY1NTM2P2hlW2VlKytdPXRlOihoZVtlZSsrXT01NTI5NnwodGUtPTY1NTM2KT4+MTAmMTAyMyxoZVtlZSsrXT01NjMyMHwxMDIzJnRlKX1yZXR1cm4gaGUubGVuZ3RoIT09ZWUmJihoZS5zdWJhcnJheT9oZT1oZS5zdWJhcnJheSgwLGVlKTpoZS5sZW5ndGg9ZWUpLEsuYXBwbHlGcm9t''@;'; put 'put ''Q2hhckNvZGUoaGUpfTt6LnV0ZjhlbmNvZGU9ZnVuY3Rpb24oVSl7cmV0dXJuIEkubm9kZWJ1ZmZlcj9rKFUsInV0Zi04Iik6ZnVuY3Rpb24oWCl7dmFyIFUscSxlZSx0ZSxvZSxzZT1YLmxlbmd0aCxoZT0wO2Zvcih0ZT0wO3RlPHNlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1YLmNoYXJDb2Rl''@;'; put 'put ''QXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKGVlPVguY2hhckNvZGVBdCh0ZSsxKSkpJiYocT02NTUzNisocS01NTI5Njw8MTApKyhlZS01NjMyMCksdGUrKyksaGUrPXE8MTI4PzE6cTwyMDQ4PzI6cTw2NTUzNj8zOjQ7Zm9yKFU9SS51aW50OGFycmF5P25ldyBVaW50OEFycmF5''@;'; put 'put ''KGhlKTpuZXcgQXJyYXkoaGUpLG9lPTAsdGU9MDtvZTxoZTt0ZSsrKTU1Mjk2PT0oNjQ1MTImKHE9WC5jaGFyQ29kZUF0KHRlKSkpJiZ0ZSsxPHNlJiY1NjMyMD09KDY0NTEyJihlZT1YLmNoYXJDb2RlQXQodGUrMSkpKSYmKHE9NjU1MzYrKHEtNTUyOTY8PDEwKSsoZWUtNTYzMjApLHRlKysp''@;'; put 'put ''LHE8MTI4P1Vbb2UrK109cTpxPDIwNDg/KFVbb2UrK109MTkyfHE+Pj42LFVbb2UrK109MTI4fDYzJnEpOnE8NjU1MzY/KFVbb2UrK109MjI0fHE+Pj4xMixVW29lKytdPTEyOHxxPj4+NiY2MyxVW29lKytdPTEyOHw2MyZxKTooVVtvZSsrXT0yNDB8cT4+PjE4LFVbb2UrK109MTI4fHE+Pj4x''@;'; put 'put ''MiY2MyxVW29lKytdPTEyOHxxPj4+NiY2MyxVW29lKytdPTEyOHw2MyZxKTtyZXR1cm4gVX0oVSl9LHoudXRmOGRlY29kZT1mdW5jdGlvbihVKXtpZihJLm5vZGVidWZmZXIpcmV0dXJuIEsudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLFUpLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgcT1b''@;'; put 'put ''XSxlZT0wLHRlPShVPUsudHJhbnNmb3JtVG8oSS51aW50OGFycmF5PyJ1aW50OGFycmF5IjoiYXJyYXkiLFUpKS5sZW5ndGg7ZWU8dGU7KXt2YXIgc2U9QihVLE1hdGgubWluKGVlKzY1NTM2LHRlKSk7cS5wdXNoKFkoSS51aW50OGFycmF5P1Uuc3ViYXJyYXkoZWUsc2UpOlUuc2xpY2UoZWUs''@;'; put 'put ''c2UpKSksZWU9c2V9cmV0dXJuIHEuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdXBwb3J0IiksST1PKCIuL2NvbXByZXNzaW9ucyIpLGs9TygiLi9u''@;'; put 'put ''b2RlQnVmZmVyIik7ZnVuY3Rpb24gRShYKXtyZXR1cm4gWH1mdW5jdGlvbiBqKFgsVSl7Zm9yKHZhciBxPTA7cTxYLmxlbmd0aDsrK3EpVVtxXT0yNTUmWC5jaGFyQ29kZUF0KHEpO3JldHVybiBVfWZ1bmN0aW9uIFYoWCl7dmFyIFU9NjU1MzYscT1bXSxlZT1YLmxlbmd0aCx0ZT16LmdldFR5''@;'; put 'put ''cGVPZihYKSxvZT0wLHNlPSEwO3RyeXtzd2l0Y2godGUpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxrKDApKX19Y2F0''@;'; put 'put ''Y2h7c2U9ITF9aWYoIXNlKXtmb3IodmFyIGhlPSIiLHVlPTA7dWU8WC5sZW5ndGg7dWUrKyloZSs9U3RyaW5nLmZyb21DaGFyQ29kZShYW3VlXSk7cmV0dXJuIGhlfWZvcig7b2U8ZWUmJlU+MTspdHJ5e3EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PXRl''@;'; put 'put ''fHwibm9kZWJ1ZmZlciI9PT10ZT9YLnNsaWNlKG9lLE1hdGgubWluKG9lK1UsZWUpKTpYLnN1YmFycmF5KG9lLE1hdGgubWluKG9lK1UsZWUpKSkpLG9lKz1VfWNhdGNoe1U9TWF0aC5mbG9vcihVLzIpfXJldHVybiBxLmpvaW4oIiIpfWZ1bmN0aW9uIEIoWCxVKXtmb3IodmFyIHE9MDtxPFgu''@;'; put 'put ''bGVuZ3RoO3ErKylVW3FdPVhbcV07cmV0dXJuIFV9ei5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKFgpe2Zvcih2YXIgVT0iIixxPTA7cTxYLmxlbmd0aDtxKyspVSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmWC5jaGFyQ29kZUF0KHEpKTtyZXR1cm4gVX0sei5hcnJheUJ1ZmZlcjJCbG9iPWZ1''@;'; put 'put ''bmN0aW9uKFgpe3ouY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbWF0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaHt0cnl7dmFyIHE9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1''@;'; put 'put ''aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gcS5hcHBlbmQoWCkscS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSx6LmFwcGx5RnJvbUNoYXJDb2RlPVY7dmFyIFk9''@;'; put 'put ''e307WS5zdHJpbmc9e3N0cmluZzpFLGFycmF5OmZ1bmN0aW9uKFgpe3JldHVybiBqKFgsbmV3IEFycmF5KFgubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBZLnN0cmluZy51aW50OGFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihYKXtyZXR1cm4g''@;'; put 'put ''aihYLG5ldyBVaW50OEFycmF5KFgubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIGooWCxrKFgubGVuZ3RoKSl9fSxZLmFycmF5PXtzdHJpbmc6VixhcnJheTpFLGFycmF5YnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBuZXcgVWludDhBcnJheShYKS5idWZmZXJ9LHVp''@;'; put 'put ''bnQ4YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKFgpfX0sWS5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKFgpe3JldHVybiBWKG5ldyBVaW50OEFycmF5KFgpKX0sYXJyYXk6ZnVuY3Rpb24oWCl7''@;'; put 'put ''cmV0dXJuIEIobmV3IFVpbnQ4QXJyYXkoWCksbmV3IEFycmF5KFguYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpFLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFgpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFgpe3JldHVybiBrKG5ldyBVaW50OEFycmF5KFgp''@;'; put 'put ''KX19LFkudWludDhhcnJheT17c3RyaW5nOlYsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIoWCxuZXcgQXJyYXkoWC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFguYnVmZmVyfSx1aW50OGFycmF5OkUsbm9kZWJ1ZmZlcjpmdW5jdGlvbihYKXtyZXR1cm4gayhY''@;'; put 'put ''KX19LFkubm9kZWJ1ZmZlcj17c3RyaW5nOlYsYXJyYXk6ZnVuY3Rpb24oWCl7cmV0dXJuIEIoWCxuZXcgQXJyYXkoWC5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oWCl7cmV0dXJuIFkubm9kZWJ1ZmZlci51aW50OGFycmF5KFgpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihY''@;'; put 'put ''KXtyZXR1cm4gQihYLG5ldyBVaW50OEFycmF5KFgubGVuZ3RoKSl9LG5vZGVidWZmZXI6RX0sei50cmFuc2Zvcm1Ubz1mdW5jdGlvbihYLFUpe2lmKFV8fChVPSIiKSwhWClyZXR1cm4gVTt6LmNoZWNrU3VwcG9ydChYKTt2YXIgcT16LmdldFR5cGVPZihVKTtyZXR1cm4gWVtxXVtYXShVKX0s''@;'; put 'put ''ei5nZXRUeXBlT2Y9ZnVuY3Rpb24oWCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBYPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWCk/ImFycmF5IjpLLm5vZGVidWZmZXImJmsudGVzdChYKT8ibm9kZWJ1ZmZlciI6Sy51aW50OGFy''@;'; put 'put ''cmF5JiZYIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhhcnJheSI6Sy5hcnJheWJ1ZmZlciYmWCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyPyJhcnJheWJ1ZmZlciI6dm9pZCAwfSx6LmNoZWNrU3VwcG9ydD1mdW5jdGlvbihYKXtpZighS1tYLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihYKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sei5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LHouTUFYX1ZBTFVFXzMyQklUUz0tMSx6LnByZXR0eT1mdW5jdGlvbihYKXt2YXIgcSxlZSxVPSIiO2ZvcihlZT0wO2VlPChYfHwiIikubGVuZ3RoO2VlKyspVSs9Ilxc''@;'; put 'put ''eCIrKChxPVguY2hhckNvZGVBdChlZSkpPDE2PyIwIjoiIikrcS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gVX0sei5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oWCl7Zm9yKHZhciBVIGluIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eShVKSYmSVtVXS5tYWdpYz09PVgpcmV0dXJu''@;'; put 'put ''IElbVV07cmV0dXJuIG51bGx9LHouaXNSZWdFeHA9ZnVuY3Rpb24oWCl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoWCl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3fV0sMjI6W2Z1''@;'; put 'put ''bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdHJpbmdSZWFkZXIiKSxJPU8oIi4vbm9kZUJ1ZmZlclJlYWRlciIpLGs9TygiLi91aW50OEFycmF5UmVhZGVyIiksRT1PKCIuL3V0aWxzIiksaj1PKCIuL3NpZ25hdHVyZSIpLFY9TygiLi96aXBFbnRyeSIpLEI9TygiLi9z''@;'; put 'put ''dXBwb3J0IiksWT1PKCIuL29iamVjdCIpO2Z1bmN0aW9uIFgoVSxxKXt0aGlzLmZpbGVzPVtdLHRoaXMubG9hZE9wdGlvbnM9cSxVJiZ0aGlzLmxvYWQoVSl9WC5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKFUpe3ZhciBxPXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk7aWYo''@;'; put 'put ''cSE9PVUpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK0UucHJldHR5KHEpKyIsIGV4cGVjdGVkICIrRS5wcmV0dHkoVSkrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRo''@;'; put 'put ''aXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5y''@;'; put 'put ''ZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5y''@;'; put 'put ''ZWFkZXIucmVhZFN0cmluZyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1ZLnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5y''@;'; put 'put ''ZWFkSW50KDgpLHRoaXMudmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9''@;'; put 'put ''dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQo''@;'; put 'put ''OCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgZWUsdGUsb2UsVT10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPFU7KWVlPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGU9dGhpcy5y''@;'; put 'put ''ZWFkZXIucmVhZEludCg0KSxvZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbZWVdPXtpZDplZSxsZW5ndGg6dGUsdmFsdWU6b2V9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRo''@;'; put 'put ''WmlwNjRDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIk11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIFUscTtmb3IoVT0wO1U8dGhpcy5maWxlcy5sZW5ndGg7VSsrKXRoaXMucmVhZGVyLnNldEluZGV4KChxPXRoaXMuZmlsZXNbVV0pLmxvY2Fs''@;'; put 'put ''SGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouTE9DQUxfRklMRV9IRUFERVIpLHEucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlcikscS5oYW5kbGVVVEY4KCl9LHJlYWRDZW50cmFsRGlyOmZ1bmN0aW9uKCl7dmFyIFU7Zm9yKHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMuY2Vu''@;'; put 'put ''dHJhbERpck9mZnNldCk7dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KT09PWouQ0VOVFJBTF9GSUxFX0hFQURFUjspKFU9bmV3IFYoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpKS5yZWFkQ2VudHJhbFBhcnQodGhpcy5yZWFkZXIpLHRoaXMuZmlsZXMucHVzaChVKX0scmVh''@;'; put 'put ''ZEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3ZhciBVPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGouQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKTtpZigtMT09PVUpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCBlbmQgb2YgY2VudHJhbCBkaXJlY3Rv''@;'; put 'put ''cnkiKTtpZih0aGlzLnJlYWRlci5zZXRJbmRleChVKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja0VuZE9mQ2VudHJhbCgpLHRoaXMuZGlza051bWJlcj09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5kaXNrV2l0aENlbnRyYWxE''@;'; put 'put ''aXJTdGFydD09PUUuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9PT1FLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHM9PT1FLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclNpemU9PT1FLk1BWF9WQUxVRV8z''@;'; put 'put ''MkJJVFN8fHRoaXMuY2VudHJhbERpck9mZnNldD09PUUuTUFYX1ZBTFVFXzMyQklUUyl7aWYodGhpcy56aXA2ND0hMCwtMT09PShVPXRoaXMucmVhZGVyLmxhc3RJbmRleE9mU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUikpKXRocm93IG5ldyBFcnJvcigiQ29y''@;'; put 'put ''cnVwdGVkIHppcCA6IGNhbid0IGZpbmQgdGhlIFpJUDY0IGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSBsb2NhdG9yIik7dGhpcy5yZWFkZXIuc2V0SW5kZXgoVSksdGhpcy5jaGVja1NpZ25hdHVyZShqLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLHRoaXMucmVhZEJsb2NrWmlw''@;'; put 'put ''NjRFbmRPZkNlbnRyYWxMb2NhdG9yKCksdGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyKSx0aGlzLmNoZWNrU2lnbmF0dXJlKGouWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50''@;'; put 'put ''cmFsKCl9fSxwcmVwYXJlUmVhZGVyOmZ1bmN0aW9uKFUpe3ZhciBxPUUuZ2V0VHlwZU9mKFUpO3RoaXMucmVhZGVyPSJzdHJpbmciIT09cXx8Qi51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PXE/bmV3IEkoVSk6bmV3IGsoRS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsVSkpOm5ldyBLKFUs''@;'; put 'put ''dGhpcy5sb2FkT3B0aW9ucy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcpfSxsb2FkOmZ1bmN0aW9uKFUpe3RoaXMucHJlcGFyZVJlYWRlcihVKSx0aGlzLnJlYWRFbmRPZkNlbnRyYWwoKSx0aGlzLnJlYWRDZW50cmFsRGlyKCksdGhpcy5yZWFkTG9jYWxGaWxlcygpfX0sUi5leHBvcnRzPVh9LHsi''@;'; put 'put ''Li9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4vemlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKE8sUix6KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEs9TygiLi9zdHJpbmdSZWFkZXIiKSxJPU8oIi4vdXRpbHMiKSxrPU8oIi4vY29tcHJlc3NlZE9iamVjdCIpLEU9TygiLi9vYmplY3QiKTtmdW5jdGlvbiBqKFYsQil7dGhpcy5vcHRpb25zPVYsdGhpcy5sb2FkT3B0aW9ucz1CfWoucHJvdG90eXBlPXtpc0VuY3J5''@;'; put 'put ''cHRlZDpmdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PSgyMDQ4JnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbihWLEIsWSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFg9Vi5p''@;'; put 'put ''bmRleDtWLnNldEluZGV4KEIpO3ZhciBVPVYucmVhZERhdGEoWSk7cmV0dXJuIFYuc2V0SW5kZXgoWCksVX19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKFYsQixZLFgsVSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHE9SS50cmFuc2Zvcm1UbyhYLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5n''@;'; put 'put ''ZXRDb21wcmVzc2VkQ29udGVudCgpKSxlZT1YLnVuY29tcHJlc3MocSk7aWYoZWUubGVuZ3RoIT09VSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gZWV9fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKFYpe3ZhciBCLFk7aWYo''@;'; put 'put ''Vi5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVYucmVhZEludCgyKSxZPVYucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPVYucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxWLnNraXAoWSksLTE9PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNp''@;'; put 'put ''emUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KEI9''@;'; put 'put ''SS5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uICIrSS5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIp''@;'; put 'put ''Iik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IGssdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNzZWRTaXplPXRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10''@;'; put 'put ''aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQoVixWLmluZGV4LHRoaXMuY29tcHJlc3NlZFNp''@;'; put 'put ''emUsQiksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KFYsVi5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLEIsdGhpcy51bmNvbXByZXNzZWRTaXplKSx0aGlzLmxvYWRPcHRpb25zLmNoZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1JLnRyYW5z''@;'; put 'put ''Zm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksRS5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkhPT10aGlzLmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24o''@;'; put 'put ''Vil7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PVYucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Vi5yZWFkSW50KDIpLHRoaXMuYml0RmxhZz1WLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1WLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPVYucmVhZERhdGUoKSx0aGlz''@;'; put 'put ''LmNyYzMyPVYucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPVYucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Vi5yZWFkSW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZmls''@;'; put 'put ''ZUNvbW1lbnRMZW5ndGg9Vi5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PVYucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9Vi5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz1WLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNl''@;'; put 'put ''dD1WLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpO3RoaXMuZmlsZU5hbWU9Vi5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKFYpLHRoaXMucGFy''@;'; put 'put ''c2VaSVA2NEV4dHJhRmllbGQoViksdGhpcy5maWxlQ29tbWVudD1WLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0aCksdGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oVil7aWYodGhpcy5leHRy''@;'; put 'put ''YUZpZWxkc1sxXSl7dmFyIEI9bmV3IEsodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPUIucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PUkuTUFYX1ZBTFVF''@;'; put 'put ''XzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9Qi5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1CLnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09SS5NQVhfVkFMVUVfMzJC''@;'; put 'put ''SVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9Qi5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihWKXt2YXIgWSxYLFUsQj1WLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O1YuaW5kZXg8Qit0aGlzLmV4dHJhRmllbGRzTGVuZ3Ro''@;'; put 'put ''OylZPVYucmVhZEludCgyKSxYPVYucmVhZEludCgyKSxVPVYucmVhZFN0cmluZyhYKSx0aGlzLmV4dHJhRmllbGRzW1ldPXtpZDpZLGxlbmd0aDpYLHZhbHVlOlV9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1FLnV0ZjhkZWNvZGUodGhp''@;'; put 'put ''cy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1FLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgVj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09ViYmKHRoaXMuZmlsZU5hbWU9Vik7dmFyIEI9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVD''@;'; put 'put ''b21tZW50KCk7bnVsbCE9PUImJih0aGlzLmZpbGVDb21tZW50PUIpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBWPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKFYpe3ZhciBCPW5ldyBLKFYudmFsdWUpO3JldHVybiAxIT09Qi5yZWFkSW50KDEpfHxFLmNy''@;'; put 'put ''YzMyKHRoaXMuZmlsZU5hbWUpIT09Qi5yZWFkSW50KDQpP251bGw6RS51dGY4ZGVjb2RlKEIucmVhZFN0cmluZyhWLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgVj10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihW''@;'; put 'put ''KXt2YXIgQj1uZXcgSyhWLnZhbHVlKTtyZXR1cm4gMSE9PUIucmVhZEludCgxKXx8RS5jcmMzMih0aGlzLmZpbGVDb21tZW50KSE9PUIucmVhZEludCg0KT9udWxsOkUudXRmOGRlY29kZShCLnJlYWRTdHJpbmcoVi5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sUi5leHBvcnRzPWp9LHsiLi9j''@;'; put 'put ''b21wcmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgaj17fTsoMCxPKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKGosTygiLi9saWIvZGVmbGF0ZSIp''@;'; put 'put ''LE8oIi4vbGliL2luZmxhdGUiKSxPKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxSLmV4cG9ydHM9an0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihP''@;'; put 'put ''LFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vemxpYi9kZWZsYXRlLmpzIiksST1PKCIuL3V0aWxzL2NvbW1vbiIpLGs9TygiLi91dGlscy9zdHJpbmdzIiksRT1PKCIuL3psaWIvbWVzc2FnZXMiKSxqPU8oIi4vemxpYi96c3RyZWFtIiksdGU9ZnVuY3Rpb24odWUpe3RoaXMub3B0aW9u''@;'; put 'put ''cz1JLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSx1ZXx8e30pO3ZhciBjZT10aGlzLm9wdGlvbnM7Y2UucmF3JiZjZS53aW5kb3dCaXRzPjA/Y2Uud2luZG93Qml0cz0tY2Uud2luZG93''@;'; put 'put ''Qml0czpjZS5nemlwJiZjZS53aW5kb3dCaXRzPjAmJmNlLndpbmRvd0JpdHM8MTYmJihjZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgaix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIEc9''@;'; put 'put ''Sy5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLGNlLmxldmVsLGNlLm1ldGhvZCxjZS53aW5kb3dCaXRzLGNlLm1lbUxldmVsLGNlLnN0cmF0ZWd5KTtpZigwIT09Ryl0aHJvdyBuZXcgRXJyb3IoRVtHXSk7Y2UuaGVhZGVyJiZLLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGNlLmhlYWRlcil9''@;'; put 'put ''O2Z1bmN0aW9uIG9lKHVlLGNlKXt2YXIgRz1uZXcgdGUoY2UpO2lmKEcucHVzaCh1ZSwhMCksRy5lcnIpdGhyb3cgRy5tc2c7cmV0dXJuIEcucmVzdWx0fXRlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHVlLGNlKXt2YXIgRCxILEc9dGhpcy5zdHJtLGI9dGhpcy5vcHRpb25zLmNodW5rU2l6''@;'; put 'put ''ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO0g9Y2U9PT1+fmNlP2NlOiEwPT09Y2U/NDowLEcuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiB1ZT9rLnN0cmluZzJidWYodWUpOnVlLEcubmV4dF9pbj0wLEcuYXZhaWxfaW49Ry5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PUcuYXZhaWxfb3V0JiYoRy5v''@;'; put 'put ''dXRwdXQ9bmV3IEkuQnVmOChiKSxHLm5leHRfb3V0PTAsRy5hdmFpbF9vdXQ9YiksMSE9PShEPUsuZGVmbGF0ZShHLEgpKSYmMCE9PUQpcmV0dXJuIHRoaXMub25FbmQoRCksdGhpcy5lbmRlZD0hMCwhMTsoMD09PUcuYXZhaWxfb3V0fHwwPT09Ry5hdmFpbF9pbiYmND09PUgpJiZ0aGlzLm9u''@;'; put 'put ''RGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9rLmJ1ZjJiaW5zdHJpbmcoSS5zaHJpbmtCdWYoRy5vdXRwdXQsRy5uZXh0X291dCkpOkkuc2hyaW5rQnVmKEcub3V0cHV0LEcubmV4dF9vdXQpKX13aGlsZSgoRy5hdmFpbF9pbj4wfHwwPT09Ry5hdmFpbF9vdXQpJiYxIT09RCk7cmV0''@;'; put 'put ''dXJuIDQhPT1IfHwoRD1LLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKEQpLHRoaXMuZW5kZWQ9ITAsMD09PUQpfSx0ZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHVlKXt0aGlzLmNodW5rcy5wdXNoKHVlKX0sdGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKHVlKXswPT09''@;'; put 'put ''dWUmJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpJLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj11ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSx6LkRlZmxhdGU9dGUsei5kZWZs''@;'; put 'put ''YXRlPW9lLHouZGVmbGF0ZVJhdz1mdW5jdGlvbiBzZSh1ZSxjZSl7cmV0dXJuKGNlPWNlfHx7fSkucmF3PSEwLG9lKHVlLGNlKX0sei5nemlwPWZ1bmN0aW9uIGhlKHVlLGNlKXtyZXR1cm4oY2U9Y2V8fHt9KS5nemlwPSEwLG9lKHVlLGNlKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0''@;'; put 'put ''aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4vemxpYi9pbmZsYXRlLmpzIiksST1PKCIuL3V0aWxzL2NvbW1vbiIp''@;'; put 'put ''LGs9TygiLi91dGlscy9zdHJpbmdzIiksRT1PKCIuL3psaWIvY29uc3RhbnRzIiksaj1PKCIuL3psaWIvbWVzc2FnZXMiKSxWPU8oIi4vemxpYi96c3RyZWFtIiksQj1PKCIuL3psaWIvZ3poZWFkZXIiKSxZPWZ1bmN0aW9uKHEpe3RoaXMub3B0aW9ucz1JLmFzc2lnbih7Y2h1bmtTaXplOjE2''@;'; put 'put ''Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0scXx8e30pO3ZhciBlZT10aGlzLm9wdGlvbnM7ZWUucmF3JiZlZS53aW5kb3dCaXRzPj0wJiZlZS53aW5kb3dCaXRzPDE2JiYoZWUud2luZG93Qml0cz0tZWUud2luZG93Qml0cywwPT09ZWUud2luZG93Qml0cyYmKGVlLndpbmRvd0JpdHM9LTE1KSks''@;'; put 'put ''ZWUud2luZG93Qml0cz49MCYmZWUud2luZG93Qml0czwxNiYmIShxJiZxLndpbmRvd0JpdHMpJiYoZWUud2luZG93Qml0cys9MzIpLGVlLndpbmRvd0JpdHM+MTUmJmVlLndpbmRvd0JpdHM8NDgmJigxNSZlZS53aW5kb3dCaXRzfHwoZWUud2luZG93Qml0c3w9MTUpKSx0aGlzLmVycj0wLHRo''@;'; put 'put ''aXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBWLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgdGU9Sy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGVlLndpbmRvd0JpdHMpO2lmKHRlIT09RS5aX09LKXRocm93IG5ldyBFcnJvcihqW3RlXSk7dGhp''@;'; put 'put ''cy5oZWFkZXI9bmV3IEIsSy5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9O2Z1bmN0aW9uIFgocSxlZSl7dmFyIHRlPW5ldyBZKGVlKTtpZih0ZS5wdXNoKHEsITApLHRlLmVycil0aHJvdyB0ZS5tc2c7cmV0dXJuIHRlLnJlc3VsdH1ZLnByb3RvdHlwZS5wdXNoPWZ1''@;'; put 'put ''bmN0aW9uKHEsZWUpe3ZhciBzZSxoZSx1ZSxjZSxHLHRlPXRoaXMuc3RybSxvZT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7aGU9ZWU9PT1+fmVlP2VlOiEwPT09ZWU/RS5aX0ZJTklTSDpFLlpfTk9fRkxVU0gsdGUuaW5wdXQ9InN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBxP2suYmluc3RyaW5nMmJ1ZihxKTpxLHRlLm5leHRfaW49MCx0ZS5hdmFpbF9pbj10ZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXRlLmF2YWlsX291dCYmKHRlLm91dHB1dD1uZXcgSS5CdWY4KG9lKSx0ZS5uZXh0X291dD0wLHRlLmF2YWlsX291dD1vZSksKHNlPUsuaW5mbGF0ZSh0ZSxF''@;'; put 'put ''LlpfTk9fRkxVU0gpKSE9PUUuWl9TVFJFQU1fRU5EJiZzZSE9PUUuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChzZSksdGhpcy5lbmRlZD0hMCwhMTt0ZS5uZXh0X291dCYmKDA9PT10ZS5hdmFpbF9vdXR8fHNlPT09RS5aX1NUUkVBTV9FTkR8fDA9PT10ZS5hdmFpbF9pbiYmaGU9PT1FLlpfRklO''@;'; put 'put ''SVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyh1ZT1rLnV0Zjhib3JkZXIodGUub3V0cHV0LHRlLm5leHRfb3V0KSxjZT10ZS5uZXh0X291dC11ZSxHPWsuYnVmMnN0cmluZyh0ZS5vdXRwdXQsdWUpLHRlLm5leHRfb3V0PWNlLHRlLmF2YWlsX291dD1vZS1jZSxjZSYmSS5hcnJh''@;'; put 'put ''eVNldCh0ZS5vdXRwdXQsdGUub3V0cHV0LHVlLGNlLDApLHRoaXMub25EYXRhKEcpKTp0aGlzLm9uRGF0YShJLnNocmlua0J1Zih0ZS5vdXRwdXQsdGUubmV4dF9vdXQpKSl9d2hpbGUodGUuYXZhaWxfaW4+MCYmc2UhPT1FLlpfU1RSRUFNX0VORCk7cmV0dXJuIHNlPT09RS5aX1NUUkVBTV9F''@;'; put 'put ''TkQmJihoZT1FLlpfRklOSVNIKSxoZSE9PUUuWl9GSU5JU0h8fChzZT1LLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKHNlKSx0aGlzLmVuZGVkPSEwLHNlPT09RS5aX09LKX0sWS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHEpe3RoaXMuY2h1bmtzLnB1c2gocSl9LFkucHJv''@;'; put 'put ''dG90eXBlLm9uRW5kPWZ1bmN0aW9uKHEpe3E9PT1FLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpJLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1xLHRoaXMubXNnPXRo''@;'; put 'put ''aXMuc3RybS5tc2d9LHouSW5mbGF0ZT1ZLHouaW5mbGF0ZT1YLHouaW5mbGF0ZVJhdz1mdW5jdGlvbiBVKHEsZWUpe3JldHVybihlZT1lZXx8e30pLnJhdz0hMCxYKHEsZWUpfSx6LnVuZ3ppcD1YfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2Nv''@;'; put 'put ''bnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBl''@;'; put 'put ''b2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7ei5hc3NpZ249ZnVuY3Rpb24oRSl7Zm9yKHZhciBqPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtqLmxlbmd0aDspe3ZhciBWPWouc2hpZnQoKTtpZihWKXtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IFYpdGhyb3cgbmV3IFR5cGVFcnJvcihWKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIEIgaW4gVilWLmhhc093blByb3BlcnR5KEIpJiYoRVtCXT1WW0JdKX19cmV0dXJuIEV9LHouc2hyaW5rQnVmPWZ1bmN0aW9uKEUsail7cmV0dXJuIEUubGVuZ3RoPT09aj9FOkUuc3ViYXJyYXk/''@;'; put 'put ''RS5zdWJhcnJheSgwLGopOihFLmxlbmd0aD1qLEUpfTt2YXIgST17YXJyYXlTZXQ6ZnVuY3Rpb24oRSxqLFYsQixZKXtpZihqLnN1YmFycmF5JiZFLnN1YmFycmF5KUUuc2V0KGouc3ViYXJyYXkoVixWK0IpLFkpO2Vsc2UgZm9yKHZhciBYPTA7WDxCO1grKylFW1krWF09altWK1hdfSxmbGF0''@;'; put 'put ''dGVuQ2h1bmtzOmZ1bmN0aW9uKEUpe3ZhciBqLFYsQixZLFgsVTtmb3IoQj0wLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspQis9RVtqXS5sZW5ndGg7Zm9yKFU9bmV3IFVpbnQ4QXJyYXkoQiksWT0wLGo9MCxWPUUubGVuZ3RoO2o8VjtqKyspVS5zZXQoWD1FW2pdLFkpLFkrPVgubGVuZ3RoO3Jl''@;'; put 'put ''dHVybiBVfX0saz17YXJyYXlTZXQ6ZnVuY3Rpb24oRSxqLFYsQixZKXtmb3IodmFyIFg9MDtYPEI7WCsrKUVbWStYXT1qW1YrWF19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oRSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLEUpfX07ei5zZXRUeXBlZD1mdW5jdGlvbihFKXtFPyh6LkJ1Zjg9''@;'; put 'put ''VWludDhBcnJheSx6LkJ1ZjE2PVVpbnQxNkFycmF5LHouQnVmMzI9SW50MzJBcnJheSx6LmFzc2lnbih6LEkpKTooei5CdWY4PUFycmF5LHouQnVmMTY9QXJyYXksei5CdWYzMj1BcnJheSx6LmFzc2lnbih6LGspKX0sei5zZXRUeXBlZChLKX0se31dLDI4OltmdW5jdGlvbihPLFIseil7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBLPU8oIi4vY29tbW9uIiksST0hMCxrPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaHtJPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoe2s9ITF9Zm9yKHZhciBF''@;'; put 'put ''PW5ldyBLLkJ1ZjgoMjU2KSxqPTA7ajwyNTY7aisrKUVbal09aj49MjUyPzY6aj49MjQ4PzU6aj49MjQwPzQ6aj49MjI0PzM6aj49MTkyPzI6MTtmdW5jdGlvbiBWKEIsWSl7aWYoWTw2NTUzNyYmKEIuc3ViYXJyYXkmJmt8fCFCLnN1YmFycmF5JiZJKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZS5hcHBseShudWxsLEsuc2hyaW5rQnVmKEIsWSkpO2Zvcih2YXIgWD0iIixVPTA7VTxZO1UrKylYKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEJbVV0pO3JldHVybiBYfUVbMjU0XT1FWzI1NF09MSx6LnN0cmluZzJidWY9ZnVuY3Rpb24oQil7dmFyIFksWCxVLHEsZWUsdGU9Qi5sZW5ndGgs''@;'; put 'put ''b2U9MDtmb3IocT0wO3E8dGU7cSsrKTU1Mjk2PT0oNjQ1MTImKFg9Qi5jaGFyQ29kZUF0KHEpKSkmJnErMTx0ZSYmNTYzMjA9PSg2NDUxMiYoVT1CLmNoYXJDb2RlQXQocSsxKSkpJiYoWD02NTUzNisoWC01NTI5Njw8MTApKyhVLTU2MzIwKSxxKyspLG9lKz1YPDEyOD8xOlg8MjA0OD8yOlg8''@;'; put 'put ''NjU1MzY/Mzo0O2ZvcihZPW5ldyBLLkJ1Zjgob2UpLGVlPTAscT0wO2VlPG9lO3ErKyk1NTI5Nj09KDY0NTEyJihYPUIuY2hhckNvZGVBdChxKSkpJiZxKzE8dGUmJjU2MzIwPT0oNjQ1MTImKFU9Qi5jaGFyQ29kZUF0KHErMSkpKSYmKFg9NjU1MzYrKFgtNTUyOTY8PDEwKSsoVS01NjMyMCks''@;'; put 'put ''cSsrKSxYPDEyOD9ZW2VlKytdPVg6WDwyMDQ4PyhZW2VlKytdPTE5MnxYPj4+NixZW2VlKytdPTEyOHw2MyZYKTpYPDY1NTM2PyhZW2VlKytdPTIyNHxYPj4+MTIsWVtlZSsrXT0xMjh8WD4+PjYmNjMsWVtlZSsrXT0xMjh8NjMmWCk6KFlbZWUrK109MjQwfFg+Pj4xOCxZW2VlKytdPTEyOHxY''@;'; put 'put ''Pj4+MTImNjMsWVtlZSsrXT0xMjh8WD4+PjYmNjMsWVtlZSsrXT0xMjh8NjMmWCk7cmV0dXJuIFl9LHouYnVmMmJpbnN0cmluZz1mdW5jdGlvbihCKXtyZXR1cm4gVihCLEIubGVuZ3RoKX0sei5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKEIpe2Zvcih2YXIgWT1uZXcgSy5CdWY4KEIubGVuZ3Ro''@;'; put 'put ''KSxYPTAsVT1ZLmxlbmd0aDtYPFU7WCsrKVlbWF09Qi5jaGFyQ29kZUF0KFgpO3JldHVybiBZfSx6LmJ1ZjJzdHJpbmc9ZnVuY3Rpb24oQixZKXt2YXIgWCxVLHEsZWUsdGU9WXx8Qi5sZW5ndGgsb2U9bmV3IEFycmF5KDIqdGUpO2ZvcihVPTAsWD0wO1g8dGU7KWlmKChxPUJbWCsrXSk8MTI4''@;'; put 'put ''KW9lW1UrK109cTtlbHNlIGlmKChlZT1FW3FdKT40KW9lW1UrK109NjU1MzMsWCs9ZWUtMTtlbHNle2ZvcihxJj0yPT09ZWU/MzE6Mz09PWVlPzE1Ojc7ZWU+MSYmWDx0ZTspcT1xPDw2fDYzJkJbWCsrXSxlZS0tO2VlPjE/b2VbVSsrXT02NTUzMzpxPDY1NTM2P29lW1UrK109cToob2VbVSsr''@;'; put 'put ''XT01NTI5NnwocS09NjU1MzYpPj4xMCYxMDIzLG9lW1UrK109NTYzMjB8MTAyMyZxKX1yZXR1cm4gVihvZSxVKX0sei51dGY4Ym9yZGVyPWZ1bmN0aW9uKEIsWSl7dmFyIFg7Zm9yKChZPVl8fEIubGVuZ3RoKT5CLmxlbmd0aCYmKFk9Qi5sZW5ndGgpLFg9WS0xO1g+PTAmJjEyOD09KDE5MiZC''@;'; put 'put ''W1hdKTspWC0tO3JldHVybiBYPDB8fDA9PT1YP1k6WCtFW0JbWF1dPlk/WDpZfX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0IjtSLmV4cG9ydHM9ZnVuY3Rpb24gSyhJLGssRSxqKXtmb3IodmFyIFY9NjU1MzUmSXwwLEI9ST4+PjE2JjY1NTM1fDAs''@;'; put 'put ''WT0wOzAhPT1FOyl7RS09WT1FPjJlMz8yZTM6RTtkb3tCPUIrKFY9VitrW2orK118MCl8MH13aGlsZSgtLVkpO1YlPTY1NTIxLEIlPTY1NTIxfXJldHVybiBWfEI8PDE2fDB9fSx7fV0sMzA6W2Z1bmN0aW9uKE8sUix6KXtSLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6''@;'; put 'put ''MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19D''@;'; put 'put ''T01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpf''@;'; put 'put ''VU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgST1mdW5jdGlvbiBLKCl7Zm9yKHZhciBFLGo9W10sVj0wO1Y8MjU2O1YrKyl7RT1WO2Zvcih2YXIgQj0wO0I8ODtCKyspRT0xJkU/Mzk4ODI5MjM4NF5FPj4+MTpFPj4+MTtq''@;'; put 'put ''W1ZdPUV9cmV0dXJuIGp9KCk7Ui5leHBvcnRzPWZ1bmN0aW9uIGsoRSxqLFYsQil7dmFyIFk9SSxYPUIrVjtFXj0tMTtmb3IodmFyIFU9QjtVPFg7VSsrKUU9RT4+PjheWVsyNTUmKEVealtVXSldO3JldHVybi0xXkV9fSx7fV0sMzI6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IEs9TygiLi4vdXRpbHMvY29tbW9uIiksST1PKCIuL3RyZWVzIiksaz1PKCIuL2FkbGVyMzIiKSxFPU8oIi4vY3JjMzIiKSxqPU8oIi4vbWVzc2FnZXMiKSxWPTAscT0wLHRlPS0yLEg9MixOPTgsdz0yODYsSj0zMCxuZT0xOSxkZT0yKncrMSxmZT0xNSx4ZT0zLExlPTI1OCxGZT1MZSt4ZSsx''@;'; put 'put ''LGplPTQyLGx0PTExMztmdW5jdGlvbiBVZShydCxJdCl7cmV0dXJuIHJ0Lm1zZz1qW0l0XSxJdH1mdW5jdGlvbiBodChydCl7cmV0dXJuKHJ0PDwxKS0ocnQ+ND85OjApfWZ1bmN0aW9uIE1lKHJ0KXtmb3IodmFyIEl0PXJ0Lmxlbmd0aDstLUl0Pj0wOylydFtJdF09MH1mdW5jdGlvbiBEZShy''@;'; put 'put ''dCl7dmFyIEl0PXJ0LnN0YXRlLEp0PUl0LnBlbmRpbmc7SnQ+cnQuYXZhaWxfb3V0JiYoSnQ9cnQuYXZhaWxfb3V0KSwwIT09SnQmJihLLmFycmF5U2V0KHJ0Lm91dHB1dCxJdC5wZW5kaW5nX2J1ZixJdC5wZW5kaW5nX291dCxKdCxydC5uZXh0X291dCkscnQubmV4dF9vdXQrPUp0LEl0LnBl''@;'; put 'put ''bmRpbmdfb3V0Kz1KdCxydC50b3RhbF9vdXQrPUp0LHJ0LmF2YWlsX291dC09SnQsSXQucGVuZGluZy09SnQsMD09PUl0LnBlbmRpbmcmJihJdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gemUocnQsSXQpe0kuX3RyX2ZsdXNoX2Jsb2NrKHJ0LHJ0LmJsb2NrX3N0YXJ0Pj0wP3J0LmJsb2Nr''@;'; put 'put ''X3N0YXJ0Oi0xLHJ0LnN0cnN0YXJ0LXJ0LmJsb2NrX3N0YXJ0LEl0KSxydC5ibG9ja19zdGFydD1ydC5zdHJzdGFydCxEZShydC5zdHJtKX1mdW5jdGlvbiBpdChydCxJdCl7cnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT1JdH1mdW5jdGlvbiB1dChydCxJdCl7cnQucGVuZGluZ19idWZb''@;'; put 'put ''cnQucGVuZGluZysrXT1JdD4+PjgmMjU1LHJ0LnBlbmRpbmdfYnVmW3J0LnBlbmRpbmcrK109MjU1Jkl0fWZ1bmN0aW9uIE10KHJ0LEl0LEp0LER0KXt2YXIgcHQ9cnQuYXZhaWxfaW47cmV0dXJuIHB0PkR0JiYocHQ9RHQpLDA9PT1wdD8wOihydC5hdmFpbF9pbi09cHQsSy5hcnJheVNldChJ''@;'; put 'put ''dCxydC5pbnB1dCxydC5uZXh0X2luLHB0LEp0KSwxPT09cnQuc3RhdGUud3JhcD9ydC5hZGxlcj1rKHJ0LmFkbGVyLEl0LHB0LEp0KToyPT09cnQuc3RhdGUud3JhcCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsSXQscHQsSnQpKSxydC5uZXh0X2luKz1wdCxydC50b3RhbF9pbis9cHQscHQpfWZ1''@;'; put 'put ''bmN0aW9uIEh0KHJ0LEl0KXt2YXIgcHQsWXQsSnQ9cnQubWF4X2NoYWluX2xlbmd0aCxEdD1ydC5zdHJzdGFydCxJbj1ydC5wcmV2X2xlbmd0aCx6dD1ydC5uaWNlX21hdGNoLHluPXJ0LnN0cnN0YXJ0PnJ0Lndfc2l6ZS1GZT9ydC5zdHJzdGFydC0ocnQud19zaXplLUZlKTowLHhuPXJ0Lndp''@;'; put 'put ''bmRvdyxzbj1ydC53X21hc2ssQm49cnQucHJldixSbj1ydC5zdHJzdGFydCtMZSwkdD14bltEdCtJbi0xXSxQbj14bltEdCtJbl07cnQucHJldl9sZW5ndGg+PXJ0Lmdvb2RfbWF0Y2gmJihKdD4+PTIpLHp0PnJ0Lmxvb2thaGVhZCYmKHp0PXJ0Lmxvb2thaGVhZCk7ZG97aWYoeG5bKHB0PUl0''@;'; put 'put ''KStJbl09PT1QbiYmeG5bcHQrSW4tMV09PT0kdCYmeG5bcHRdPT09eG5bRHRdJiZ4blsrK3B0XT09PXhuW0R0KzFdKXtEdCs9MixwdCsrO2Rve313aGlsZSh4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhu''@;'; put 'put ''WysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZ4blsrK0R0XT09PXhuWysrcHRdJiZEdDxSbik7aWYoWXQ9TGUtKFJuLUR0KSxEdD1Sbi1MZSxZdD5Jbil7aWYocnQubWF0Y2hfc3RhcnQ9SXQsSW49WXQsWXQ+PXp0''@;'; put 'put ''KWJyZWFrOyR0PXhuW0R0K0luLTFdLFBuPXhuW0R0K0luXX19fXdoaWxlKChJdD1CbltJdCZzbl0pPnluJiYwIT0tLUp0KTtyZXR1cm4gSW48PXJ0Lmxvb2thaGVhZD9JbjpydC5sb29rYWhlYWR9ZnVuY3Rpb24gUHQocnQpe3ZhciBKdCxEdCxwdCxZdCxJbixJdD1ydC53X3NpemU7ZG97aWYo''@;'; put 'put ''WXQ9cnQud2luZG93X3NpemUtcnQubG9va2FoZWFkLXJ0LnN0cnN0YXJ0LHJ0LnN0cnN0YXJ0Pj1JdCsoSXQtRmUpKXtLLmFycmF5U2V0KHJ0LndpbmRvdyxydC53aW5kb3csSXQsSXQsMCkscnQubWF0Y2hfc3RhcnQtPUl0LHJ0LnN0cnN0YXJ0LT1JdCxydC5ibG9ja19zdGFydC09SXQsSnQ9''@;'; put 'put ''RHQ9cnQuaGFzaF9zaXplO2Rve3B0PXJ0LmhlYWRbLS1KdF0scnQuaGVhZFtKdF09cHQ+PUl0P3B0LUl0OjB9d2hpbGUoLS1EdCk7SnQ9RHQ9SXQ7ZG97cHQ9cnQucHJldlstLUp0XSxydC5wcmV2W0p0XT1wdD49SXQ/cHQtSXQ6MH13aGlsZSgtLUR0KTtZdCs9SXR9aWYoMD09PXJ0LnN0cm0u''@;'; put 'put ''YXZhaWxfaW4pYnJlYWs7aWYoRHQ9TXQocnQuc3RybSxydC53aW5kb3cscnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLFl0KSxydC5sb29rYWhlYWQrPUR0LHJ0Lmxvb2thaGVhZCtydC5pbnNlcnQ+PXhlKWZvcihydC5pbnNfaD1ydC53aW5kb3dbSW49cnQuc3Ryc3RhcnQtcnQuaW5zZXJ0XSxy''@;'; put 'put ''dC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W0luKzFdKSZydC5oYXNoX21hc2s7cnQuaW5zZXJ0JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tJbit4ZS0xXSkmcnQuaGFzaF9tYXNrLHJ0LnByZXZbSW4mcnQud19tYXNrXT1y''@;'; put 'put ''dC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1JbixJbisrLHJ0Lmluc2VydC0tLCEocnQubG9va2FoZWFkK3J0Lmluc2VydDx4ZSkpOyk7fXdoaWxlKHJ0Lmxvb2thaGVhZDxGZSYmMCE9PXJ0LnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIENuKHJ0LEl0KXtmb3IodmFyIEp0LER0''@;'; put 'put ''Ozspe2lmKHJ0Lmxvb2thaGVhZDxGZSl7aWYoUHQocnQpLHJ0Lmxvb2thaGVhZDxGZSYmSXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoSnQ9MCxydC5sb29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1ty''@;'; put 'put ''dC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCksMCE9PUp0JiZydC5zdHJzdGFydC1KdDw9cnQud19zaXplLUZlJiYocnQubWF0Y2hfbGVu''@;'; put 'put ''Z3RoPUh0KHJ0LEp0KSkscnQubWF0Y2hfbGVuZ3RoPj14ZSlpZihEdD1JLl90cl90YWxseShydCxydC5zdHJzdGFydC1ydC5tYXRjaF9zdGFydCxydC5tYXRjaF9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aDw9cnQubWF4X2xhenlfbWF0''@;'; put 'put ''Y2gmJnJ0Lmxvb2thaGVhZD49eGUpe3J0Lm1hdGNoX2xlbmd0aC0tO2Rve3J0LnN0cnN0YXJ0KysscnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLEp0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNr''@;'; put 'put ''XT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydH13aGlsZSgwIT0tLXJ0Lm1hdGNoX2xlbmd0aCk7cnQuc3Ryc3RhcnQrK31lbHNlIHJ0LnN0cnN0YXJ0Kz1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTAscnQuaW5zX2g9cnQud2luZG93W3J0''@;'; put 'put ''LnN0cnN0YXJ0XSxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0KzFdKSZydC5oYXNoX21hc2s7ZWxzZSBEdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0Kys7aWYo''@;'; put 'put ''RHQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PXJ0LnN0cnN0YXJ0PHhlLTE/cnQuc3Ryc3RhcnQ6eGUtMSw0PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCEx''@;'; put 'put ''KSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBVdChydCxJdCl7Zm9yKHZhciBKdCxEdCxwdDs7KXtpZihydC5sb29rYWhlYWQ8RmUpe2lmKFB0KHJ0KSxydC5sb29rYWhlYWQ8RmUmJkl0PT09VilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKEp0PTAs''@;'; put 'put ''cnQubG9va2FoZWFkPj14ZSYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxKdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09''@;'; put 'put ''cnQuc3Ryc3RhcnQpLHJ0LnByZXZfbGVuZ3RoPXJ0Lm1hdGNoX2xlbmd0aCxydC5wcmV2X21hdGNoPXJ0Lm1hdGNoX3N0YXJ0LHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLDAhPT1KdCYmcnQucHJldl9sZW5ndGg8cnQubWF4X2xhenlfbWF0Y2gmJnJ0LnN0cnN0YXJ0LUp0PD1ydC53X3NpemUtRmUm''@;'; put 'put ''JihydC5tYXRjaF9sZW5ndGg9SHQocnQsSnQpLHJ0Lm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1ydC5zdHJhdGVneXx8cnQubWF0Y2hfbGVuZ3RoPT09eGUmJnJ0LnN0cnN0YXJ0LXJ0Lm1hdGNoX3N0YXJ0PjQwOTYpJiYocnQubWF0Y2hfbGVuZ3RoPXhlLTEpKSxydC5wcmV2X2xlbmd0aD49eGUm''@;'; put 'put ''JnJ0Lm1hdGNoX2xlbmd0aDw9cnQucHJldl9sZW5ndGgpe3B0PXJ0LnN0cnN0YXJ0K3J0Lmxvb2thaGVhZC14ZSxEdD1JLl90cl90YWxseShydCxydC5zdHJzdGFydC0xLXJ0LnByZXZfbWF0Y2gscnQucHJldl9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQucHJldl9sZW5ndGgtMSxydC5w''@;'; put 'put ''cmV2X2xlbmd0aC09Mjtkb3srK3J0LnN0cnN0YXJ0PD1wdCYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxKdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0s''@;'; put 'put ''cnQuaGVhZFtydC5pbnNfaF09cnQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tcnQucHJldl9sZW5ndGgpO2lmKHJ0Lm1hdGNoX2F2YWlsYWJsZT0wLHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLHJ0LnN0cnN0YXJ0KyssRHQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1l''@;'; put 'put ''bHNlIGlmKHJ0Lm1hdGNoX2F2YWlsYWJsZSl7aWYoKER0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0LTFdKSkmJnplKHJ0LCExKSxydC5zdHJzdGFydCsrLHJ0Lmxvb2thaGVhZC0tLDA9PT1ydC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHJ0Lm1hdGNoX2F2''@;'; put 'put ''YWlsYWJsZT0xLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS19cmV0dXJuIHJ0Lm1hdGNoX2F2YWlsYWJsZSYmKER0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0LTFdKSxydC5tYXRjaF9hdmFpbGFibGU9MCkscnQuaW5zZXJ0PXJ0LnN0cnN0YXJ0PHhlLTE/cnQu''@;'; put 'put ''c3Ryc3RhcnQ6eGUtMSw0PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgJG4sZW49ZnVuY3Rpb24ocnQsSXQsSnQsRHQscHQpe3RoaXMuZ29vZF9sZW5ndGg9cnQs''@;'; put 'put ''dGhpcy5tYXhfbGF6eT1JdCx0aGlzLm5pY2VfbGVuZ3RoPUp0LHRoaXMubWF4X2NoYWluPUR0LHRoaXMuZnVuYz1wdH07ZnVuY3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBl''@;'; put 'put ''bmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1OLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRo''@;'; put 'put ''aXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3Ro''@;'; put 'put ''PTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlz''@;'; put 'put ''LmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBLLkJ1ZjE2KDIqZGUpLHRoaXMuZHluX2R0cmVlPW5ldyBLLkJ1ZjE2KDIqKDIqSisxKSksdGhpcy5ibF90cmVlPW5ldyBLLkJ1ZjE2KDIqKDIqbmUr''@;'; put 'put ''MSkpLE1lKHRoaXMuZHluX2x0cmVlKSxNZSh0aGlzLmR5bl9kdHJlZSksTWUodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgSy5CdWYxNihmZSsxKSx0aGlzLmhlYXA9bmV3IEsuQnVmMTYo''@;'; put 'put ''Mip3KzEpLE1lKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBLLkJ1ZjE2KDIqdysxKSxNZSh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5v''@;'; put 'put ''cHRfbGVuPTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBmbihydCl7dmFyIEl0O3JldHVybiBydCYmcnQuc3RhdGU/KHJ0LnRvdGFsX2luPXJ0LnRvdGFsX291dD0wLHJ0LmRhdGFf''@;'; put 'put ''dHlwZT1ILChJdD1ydC5zdGF0ZSkucGVuZGluZz0wLEl0LnBlbmRpbmdfb3V0PTAsSXQud3JhcDwwJiYoSXQud3JhcD0tSXQud3JhcCksSXQuc3RhdHVzPUl0LndyYXA/amU6bHQscnQuYWRsZXI9Mj09PUl0LndyYXA/MDoxLEl0Lmxhc3RfZmx1c2g9VixJLl90cl9pbml0KEl0KSxxKTpVZShy''@;'; put 'put ''dCx0ZSl9ZnVuY3Rpb24gaG4ocnQpe3ZhciBJdD1mbihydCk7cmV0dXJuIEl0PT09cSYmZnVuY3Rpb24gSG4ocnQpe3J0LndpbmRvd19zaXplPTIqcnQud19zaXplLE1lKHJ0LmhlYWQpLHJ0Lm1heF9sYXp5X21hdGNoPSRuW3J0LmxldmVsXS5tYXhfbGF6eSxydC5nb29kX21hdGNoPSRuW3J0''@;'; put 'put ''LmxldmVsXS5nb29kX2xlbmd0aCxydC5uaWNlX21hdGNoPSRuW3J0LmxldmVsXS5uaWNlX2xlbmd0aCxydC5tYXhfY2hhaW5fbGVuZ3RoPSRuW3J0LmxldmVsXS5tYXhfY2hhaW4scnQuc3Ryc3RhcnQ9MCxydC5ibG9ja19zdGFydD0wLHJ0Lmxvb2thaGVhZD0wLHJ0Lmluc2VydD0wLHJ0Lm1h''@;'; put 'put ''dGNoX2xlbmd0aD1ydC5wcmV2X2xlbmd0aD14ZS0xLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wLHJ0Lmluc19oPTB9KHJ0LnN0YXRlKSxJdH1mdW5jdGlvbiBYdChydCxJdCxKdCxEdCxwdCxZdCl7aWYoIXJ0KXJldHVybiB0ZTt2YXIgSW49MTtpZigtMT09PUl0JiYoSXQ9NiksRHQ8MD8oSW49MCxE''@;'; put 'put ''dD0tRHQpOkR0PjE1JiYoSW49MixEdC09MTYpLHB0PDF8fHB0Pjl8fEp0IT09Tnx8RHQ8OHx8RHQ+MTV8fEl0PDB8fEl0Pjl8fFl0PDB8fFl0PjQpcmV0dXJuIFVlKHJ0LHRlKTs4PT09RHQmJihEdD05KTt2YXIgenQ9bmV3IGZ0O3JldHVybiBydC5zdGF0ZT16dCx6dC5zdHJtPXJ0LHp0Lndy''@;'; put 'put ''YXA9SW4senQuZ3poZWFkPW51bGwsenQud19iaXRzPUR0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19tYXNrPXp0Lndfc2l6ZS0xLHp0Lmhhc2hfYml0cz1wdCs3LHp0Lmhhc2hfc2l6ZT0xPDx6dC5oYXNoX2JpdHMsenQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hp''@;'; put 'put ''ZnQ9fn4oKHp0Lmhhc2hfYml0cyt4ZS0xKS94ZSksenQud2luZG93PW5ldyBLLkJ1ZjgoMip6dC53X3NpemUpLHp0LmhlYWQ9bmV3IEsuQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2PW5ldyBLLkJ1ZjE2KHp0Lndfc2l6ZSksenQubGl0X2J1ZnNpemU9MTw8cHQrNix6dC5wZW5kaW5nX2J1''@;'; put 'put ''Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IEsuQnVmOCh6dC5wZW5kaW5nX2J1Zl9zaXplKSx6dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1Zj0zKnp0LmxpdF9idWZzaXplLHp0LmxldmVsPUl0LHp0LnN0cmF0ZWd5PVl0LHp0Lm1ldGhvZD1KdCxo''@;'; put 'put ''bihydCl9JG49W25ldyBlbigwLDAsMCwwLGZ1bmN0aW9uIG9uKHJ0LEl0KXt2YXIgSnQ9NjU1MzU7Zm9yKEp0PnJ0LnBlbmRpbmdfYnVmX3NpemUtNSYmKEp0PXJ0LnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYocnQubG9va2FoZWFkPD0xKXtpZihQdChydCksMD09PXJ0Lmxvb2thaGVhZCYm''@;'; put 'put ''SXQ9PT1WKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9cnQuc3Ryc3RhcnQrPXJ0Lmxvb2thaGVhZCxydC5sb29rYWhlYWQ9MDt2YXIgRHQ9cnQuYmxvY2tfc3RhcnQrSnQ7aWYoKDA9PT1ydC5zdHJzdGFydHx8cnQuc3Ryc3RhcnQ+PUR0KSYmKHJ0Lmxvb2thaGVhZD1ydC5z''@;'; put 'put ''dHJzdGFydC1EdCxydC5zdHJzdGFydD1EdCx6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXx8cnQuc3Ryc3RhcnQtcnQuYmxvY2tfc3RhcnQ+PXJ0Lndfc2l6ZS1GZSYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0''@;'; put 'put ''PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KToocnQuc3Ryc3RhcnQ+cnQuYmxvY2tfc3RhcnQmJnplKHJ0LCExKSwxKX0pLG5ldyBlbig0LDQsOCw0LENuKSxuZXcgZW4oNCw1LDE2LDgsQ24pLG5ldyBlbig0LDYsMzIsMzIsQ24pLG5ldyBlbig0LDQsMTYsMTYs''@;'; put 'put ''VXQpLG5ldyBlbig4LDE2LDMyLDMyLFV0KSxuZXcgZW4oOCwxNiwxMjgsMTI4LFV0KSxuZXcgZW4oOCwzMiwxMjgsMjU2LFV0KSxuZXcgZW4oMzIsMTI4LDI1OCwxMDI0LFV0KSxuZXcgZW4oMzIsMjU4LDI1OCw0MDk2LFV0KV0sei5kZWZsYXRlSW5pdD1mdW5jdGlvbiBfdChydCxJdCl7cmV0''@;'; put 'put ''dXJuIFh0KHJ0LEl0LE4sMTUsOCwwKX0sei5kZWZsYXRlSW5pdDI9WHQsei5kZWZsYXRlUmVzZXQ9aG4sei5kZWZsYXRlUmVzZXRLZWVwPWZuLHouZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiB3dChydCxJdCl7cmV0dXJuIHJ0JiZydC5zdGF0ZSYmMj09PXJ0LnN0YXRlLndyYXA/KHJ0LnN0''@;'; put 'put ''YXRlLmd6aGVhZD1JdCxxKTp0ZX0sei5kZWZsYXRlPWZ1bmN0aW9uIE50KHJ0LEl0KXt2YXIgSnQsRHQscHQsWXQ7aWYoIXJ0fHwhcnQuc3RhdGV8fEl0PjV8fEl0PDApcmV0dXJuIHJ0P1VlKHJ0LHRlKTp0ZTtpZihEdD1ydC5zdGF0ZSwhcnQub3V0cHV0fHwhcnQuaW5wdXQmJjAhPT1ydC5h''@;'; put 'put ''dmFpbF9pbnx8NjY2PT09RHQuc3RhdHVzJiY0IT09SXQpcmV0dXJuIFVlKHJ0LDA9PT1ydC5hdmFpbF9vdXQ/LTU6dGUpO2lmKER0LnN0cm09cnQsSnQ9RHQubGFzdF9mbHVzaCxEdC5sYXN0X2ZsdXNoPUl0LER0LnN0YXR1cz09PWplKWlmKDI9PT1EdC53cmFwKXJ0LmFkbGVyPTAsaXQoRHQs''@;'; put 'put ''MzEpLGl0KER0LDEzOSksaXQoRHQsOCksRHQuZ3poZWFkPyhpdChEdCwoRHQuZ3poZWFkLnRleHQ/MTowKSsoRHQuZ3poZWFkLmhjcmM/MjowKSsoRHQuZ3poZWFkLmV4dHJhPzQ6MCkrKER0Lmd6aGVhZC5uYW1lPzg6MCkrKER0Lmd6aGVhZC5jb21tZW50PzE2OjApKSxpdChEdCwyNTUmRHQu''@;'; put 'put ''Z3poZWFkLnRpbWUpLGl0KER0LER0Lmd6aGVhZC50aW1lPj44JjI1NSksaXQoRHQsRHQuZ3poZWFkLnRpbWU+PjE2JjI1NSksaXQoRHQsRHQuZ3poZWFkLnRpbWU+PjI0JjI1NSksaXQoRHQsOT09PUR0LmxldmVsPzI6RHQuc3RyYXRlZ3k+PTJ8fER0LmxldmVsPDI/NDowKSxpdChEdCwyNTUm''@;'; put 'put ''RHQuZ3poZWFkLm9zKSxEdC5nemhlYWQuZXh0cmEmJkR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihpdChEdCwyNTUmRHQuZ3poZWFkLmV4dHJhLmxlbmd0aCksaXQoRHQsRHQuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxEdC5nemhlYWQuaGNyYyYmKHJ0LmFkbGVyPUUocnQuYWRsZXIs''@;'; put 'put ''RHQucGVuZGluZ19idWYsRHQucGVuZGluZywwKSksRHQuZ3ppbmRleD0wLER0LnN0YXR1cz02OSk6KGl0KER0LDApLGl0KER0LDApLGl0KER0LDApLGl0KER0LDApLGl0KER0LDApLGl0KER0LDk9PT1EdC5sZXZlbD8yOkR0LnN0cmF0ZWd5Pj0yfHxEdC5sZXZlbDwyPzQ6MCksaXQoRHQsMyks''@;'; put 'put ''RHQuc3RhdHVzPWx0KTtlbHNle3ZhciBJbj1OKyhEdC53X2JpdHMtODw8NCk8PDg7SW58PShEdC5zdHJhdGVneT49Mnx8RHQubGV2ZWw8Mj8wOkR0LmxldmVsPDY/MTo2PT09RHQubGV2ZWw/MjozKTw8NiwwIT09RHQuc3Ryc3RhcnQmJihJbnw9MzIpLEluKz0zMS1JbiUzMSxEdC5zdGF0dXM9''@;'; put 'put ''bHQsdXQoRHQsSW4pLDAhPT1EdC5zdHJzdGFydCYmKHV0KER0LHJ0LmFkbGVyPj4+MTYpLHV0KER0LDY1NTM1JnJ0LmFkbGVyKSkscnQuYWRsZXI9MX1pZig2OT09PUR0LnN0YXR1cylpZihEdC5nemhlYWQuZXh0cmEpe2ZvcihwdD1EdC5wZW5kaW5nO0R0Lmd6aW5kZXg8KDY1NTM1JkR0Lmd6''@;'; put 'put ''aGVhZC5leHRyYS5sZW5ndGgpJiYoRHQucGVuZGluZyE9PUR0LnBlbmRpbmdfYnVmX3NpemV8fChEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLERlKHJ0KSxwdD1EdC5wZW5kaW5nLER0''@;'; put 'put ''LnBlbmRpbmchPT1EdC5wZW5kaW5nX2J1Zl9zaXplKSk7KWl0KER0LDI1NSZEdC5nemhlYWQuZXh0cmFbRHQuZ3ppbmRleF0pLER0Lmd6aW5kZXgrKztEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1w''@;'; put 'put ''dCxwdCkpLER0Lmd6aW5kZXg9PT1EdC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoRHQuZ3ppbmRleD0wLER0LnN0YXR1cz03Myl9ZWxzZSBEdC5zdGF0dXM9NzM7aWYoNzM9PT1EdC5zdGF0dXMpaWYoRHQuZ3poZWFkLm5hbWUpe3B0PUR0LnBlbmRpbmc7ZG97aWYoRHQucGVuZGluZz09PUR0LnBl''@;'; put 'put ''bmRpbmdfYnVmX3NpemUmJihEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRsZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLERlKHJ0KSxwdD1EdC5wZW5kaW5nLER0LnBlbmRpbmc9PT1EdC5wZW5kaW5nX2J1Zl9zaXplKSl7WXQ9MTti''@;'; put 'put ''cmVha31ZdD1EdC5nemluZGV4PER0Lmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmRHQuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChEdC5nemluZGV4KyspOjAsaXQoRHQsWXQpfXdoaWxlKDAhPT1ZdCk7RHQuZ3poZWFkLmhjcmMmJkR0LnBlbmRpbmc+cHQmJihydC5hZGxlcj1FKHJ0LmFkbGVyLER0''@;'; put 'put ''LnBlbmRpbmdfYnVmLER0LnBlbmRpbmctcHQscHQpKSwwPT09WXQmJihEdC5nemluZGV4PTAsRHQuc3RhdHVzPTkxKX1lbHNlIER0LnN0YXR1cz05MTtpZig5MT09PUR0LnN0YXR1cylpZihEdC5nemhlYWQuY29tbWVudCl7cHQ9RHQucGVuZGluZztkb3tpZihEdC5wZW5kaW5nPT09RHQucGVu''@;'; put 'put ''ZGluZ19idWZfc2l6ZSYmKER0Lmd6aGVhZC5oY3JjJiZEdC5wZW5kaW5nPnB0JiYocnQuYWRsZXI9RShydC5hZGxlcixEdC5wZW5kaW5nX2J1ZixEdC5wZW5kaW5nLXB0LHB0KSksRGUocnQpLHB0PUR0LnBlbmRpbmcsRHQucGVuZGluZz09PUR0LnBlbmRpbmdfYnVmX3NpemUpKXtZdD0xO2Jy''@;'; put 'put ''ZWFrfVl0PUR0Lmd6aW5kZXg8RHQuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZEdC5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KER0Lmd6aW5kZXgrKyk6MCxpdChEdCxZdCl9d2hpbGUoMCE9PVl0KTtEdC5nemhlYWQuaGNyYyYmRHQucGVuZGluZz5wdCYmKHJ0LmFkbGVyPUUocnQuYWRs''@;'; put 'put ''ZXIsRHQucGVuZGluZ19idWYsRHQucGVuZGluZy1wdCxwdCkpLDA9PT1ZdCYmKER0LnN0YXR1cz0xMDMpfWVsc2UgRHQuc3RhdHVzPTEwMztpZigxMDM9PT1EdC5zdGF0dXMmJihEdC5nemhlYWQuaGNyYz8oRHQucGVuZGluZysyPkR0LnBlbmRpbmdfYnVmX3NpemUmJkRlKHJ0KSxEdC5wZW5k''@;'; put 'put ''aW5nKzI8PUR0LnBlbmRpbmdfYnVmX3NpemUmJihpdChEdCwyNTUmcnQuYWRsZXIpLGl0KER0LHJ0LmFkbGVyPj44JjI1NSkscnQuYWRsZXI9MCxEdC5zdGF0dXM9bHQpKTpEdC5zdGF0dXM9bHQpLDAhPT1EdC5wZW5kaW5nKXtpZihEZShydCksMD09PXJ0LmF2YWlsX291dClyZXR1cm4gRHQu''@;'; put 'put ''bGFzdF9mbHVzaD0tMSxxfWVsc2UgaWYoMD09PXJ0LmF2YWlsX2luJiZodChJdCk8PWh0KEp0KSYmNCE9PUl0KXJldHVybiBVZShydCwtNSk7aWYoNjY2PT09RHQuc3RhdHVzJiYwIT09cnQuYXZhaWxfaW4pcmV0dXJuIFVlKHJ0LC01KTtpZigwIT09cnQuYXZhaWxfaW58fDAhPT1EdC5sb29r''@;'; put 'put ''YWhlYWR8fEl0IT09ViYmNjY2IT09RHQuc3RhdHVzKXt2YXIgeW49Mj09PUR0LnN0cmF0ZWd5P2Z1bmN0aW9uIFduKHJ0LEl0KXtmb3IodmFyIEp0Ozspe2lmKDA9PT1ydC5sb29rYWhlYWQmJihQdChydCksMD09PXJ0Lmxvb2thaGVhZCkpe2lmKEl0PT09VilyZXR1cm4gMTticmVha31pZihy''@;'; put 'put ''dC5tYXRjaF9sZW5ndGg9MCxKdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0KyssSnQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PTAsND09PUl0Pyh6''@;'; put 'put ''ZShydCwhMCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJih6ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KT8xOjJ9KER0LEl0KTozPT09RHQuc3RyYXRlZ3k/ZnVuY3Rpb24gYm4ocnQsSXQpe2Zvcih2YXIgSnQsRHQscHQsWXQsSW49cnQud2luZG93Ozsp''@;'; put 'put ''e2lmKHJ0Lmxvb2thaGVhZDw9TGUpe2lmKFB0KHJ0KSxydC5sb29rYWhlYWQ8PUxlJiZJdD09PVYpcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31pZihydC5tYXRjaF9sZW5ndGg9MCxydC5sb29rYWhlYWQ+PXhlJiZydC5zdHJzdGFydD4wJiYoRHQ9SW5bcHQ9cnQuc3Ryc3Rh''@;'; put 'put ''cnQtMV0pPT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0mJkR0PT09SW5bKytwdF0pe1l0PXJ0LnN0cnN0YXJ0K0xlO2Rve313aGlsZShEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRd''@;'; put 'put ''JiZEdD09PUluWysrcHRdJiZEdD09PUluWysrcHRdJiZwdDxZdCk7cnQubWF0Y2hfbGVuZ3RoPUxlLShZdC1wdCkscnQubWF0Y2hfbGVuZ3RoPnJ0Lmxvb2thaGVhZCYmKHJ0Lm1hdGNoX2xlbmd0aD1ydC5sb29rYWhlYWQpfWlmKHJ0Lm1hdGNoX2xlbmd0aD49eGU/KEp0PUkuX3RyX3RhbGx5''@;'; put 'put ''KHJ0LDEscnQubWF0Y2hfbGVuZ3RoLXhlKSxydC5sb29rYWhlYWQtPXJ0Lm1hdGNoX2xlbmd0aCxydC5zdHJzdGFydCs9cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aD0wKTooSnQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnRdKSxydC5sb29rYWhlYWQtLSxy''@;'; put 'put ''dC5zdHJzdGFydCsrKSxKdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09SXQ/KHplKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKHplKHJ0LCExKSwwPT09cnQuc3RybS5hdmFp''@;'; put 'put ''bF9vdXQpPzE6Mn0oRHQsSXQpOiRuW0R0LmxldmVsXS5mdW5jKER0LEl0KTtpZigoMz09PXlufHw0PT09eW4pJiYoRHQuc3RhdHVzPTY2NiksMT09PXlufHwzPT09eW4pcmV0dXJuIDA9PT1ydC5hdmFpbF9vdXQmJihEdC5sYXN0X2ZsdXNoPS0xKSxxO2lmKDI9PT15biYmKDE9PT1JdD9JLl90''@;'; put 'put ''cl9hbGlnbihEdCk6NSE9PUl0JiYoSS5fdHJfc3RvcmVkX2Jsb2NrKER0LDAsMCwhMSksMz09PUl0JiYoTWUoRHQuaGVhZCksMD09PUR0Lmxvb2thaGVhZCYmKER0LnN0cnN0YXJ0PTAsRHQuYmxvY2tfc3RhcnQ9MCxEdC5pbnNlcnQ9MCkpKSxEZShydCksMD09PXJ0LmF2YWlsX291dCkpcmV0''@;'; put 'put ''dXJuIER0Lmxhc3RfZmx1c2g9LTEscX1yZXR1cm4gNCE9PUl0P3E6RHQud3JhcDw9MD8xOigyPT09RHQud3JhcD8oaXQoRHQsMjU1JnJ0LmFkbGVyKSxpdChEdCxydC5hZGxlcj4+OCYyNTUpLGl0KER0LHJ0LmFkbGVyPj4xNiYyNTUpLGl0KER0LHJ0LmFkbGVyPj4yNCYyNTUpLGl0KER0LDI1''@;'; put 'put ''NSZydC50b3RhbF9pbiksaXQoRHQscnQudG90YWxfaW4+PjgmMjU1KSxpdChEdCxydC50b3RhbF9pbj4+MTYmMjU1KSxpdChEdCxydC50b3RhbF9pbj4+MjQmMjU1KSk6KHV0KER0LHJ0LmFkbGVyPj4+MTYpLHV0KER0LDY1NTM1JnJ0LmFkbGVyKSksRGUocnQpLER0LndyYXA+MCYmKER0Lndy''@;'; put 'put ''YXA9LUR0LndyYXApLDAhPT1EdC5wZW5kaW5nP3E6MSl9LHouZGVmbGF0ZUVuZD1mdW5jdGlvbiBtbihydCl7dmFyIEl0O3JldHVybiBydCYmcnQuc3RhdGU/KEl0PXJ0LnN0YXRlLnN0YXR1cykhPT1qZSYmNjkhPT1JdCYmNzMhPT1JdCYmOTEhPT1JdCYmMTAzIT09SXQmJkl0IT09bHQmJjY2''@;'; put 'put ''NiE9PUl0P1VlKHJ0LHRlKToocnQuc3RhdGU9bnVsbCxJdD09PWx0P1VlKHJ0LC0zKTpxKTp0ZX0sei5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vbWVz''@;'; put 'put ''c2FnZXMiOjM3LCIuL3RyZWVzIjozOH1dLDMzOltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhp''@;'; put 'put ''cy5uYW1lPSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sMzQ6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7Ui5leHBvcnRzPWZ1bmN0aW9uKEUsail7dmFyIFYsQixZLFgsVSxxLGVlLHRlLG9lLHNlLGhlLHVlLGNlLEcsYixELEgsTixnLEMs''@;'; put 'put ''Uyx2LHAsdyxKO3c9RS5pbnB1dCxZPShCPUUubmV4dF9pbikrKEUuYXZhaWxfaW4tNSksSj1FLm91dHB1dCxVPShYPUUubmV4dF9vdXQpLShqLUUuYXZhaWxfb3V0KSxxPVgrKEUuYXZhaWxfb3V0LTI1NyksZWU9KFY9RS5zdGF0ZSkuZG1heCx0ZT1WLndzaXplLG9lPVYud2hhdmUsc2U9Vi53''@;'; put 'put ''bmV4dCxoZT1WLndpbmRvdyx1ZT1WLmhvbGQsY2U9Vi5iaXRzLEc9Vi5sZW5jb2RlLGI9Vi5kaXN0Y29kZSxEPSgxPDxWLmxlbmJpdHMpLTEsSD0oMTw8Vi5kaXN0Yml0cyktMTtlOmRve2NlPDE1JiYodWUrPXdbQisrXTw8Y2UsdWUrPXdbQisrXTw8KGNlKz04KSxjZSs9OCksTj1HW3VlJkRd''@;'; put 'put ''O3Q6Zm9yKDs7KXtpZih1ZT4+Pj1nPU4+Pj4yNCxjZS09ZywwPT0oZz1OPj4+MTYmMjU1KSlKW1grK109NjU1MzUmTjtlbHNle2lmKCEoMTYmZykpe2lmKDY0Jmcpe2lmKDMyJmcpe1YubW9kZT0xMjticmVhayBlfUUubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLFYubW9kZT0z''@;'; put 'put ''MDticmVhayBlfU49R1soNjU1MzUmTikrKHVlJigxPDxnKS0xKV07Y29udGludWUgdH1mb3IoQz02NTUzNSZOLChnJj0xNSkmJihjZTxnJiYodWUrPXdbQisrXTw8Y2UsY2UrPTgpLEMrPXVlJigxPDxnKS0xLHVlPj4+PWcsY2UtPWcpLGNlPDE1JiYodWUrPXdbQisrXTw8Y2UsdWUrPXdbQisr''@;'; put 'put ''XTw8KGNlKz04KSxjZSs9OCksTj1iW3VlJkhdOzspe2lmKHVlPj4+PWc9Tj4+PjI0LGNlLT1nLDE2JihnPU4+Pj4xNiYyNTUpKXtpZihTPTY1NTM1Jk4sY2U8KGcmPTE1KSYmKHVlKz13W0IrK108PGNlLChjZSs9OCk8ZyYmKHVlKz13W0IrK108PGNlLGNlKz04KSksKFMrPXVlJigxPDxnKS0x''@;'; put 'put ''KT5lZSl7RS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixWLm1vZGU9MzA7YnJlYWsgZX1pZih1ZT4+Pj1nLGNlLT1nLFM+KGc9WC1VKSl7aWYoKGc9Uy1nKT5vZSYmVi5zYW5lKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFYubW9kZT0zMDticmVh''@;'; put 'put ''ayBlfWlmKHY9MCxwPWhlLDA9PT1zZSl7aWYodis9dGUtZyxnPEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTt2PVgtUyxwPUp9fWVsc2UgaWYoc2U8Zyl7aWYodis9dGUrc2UtZywoZy09c2UpPEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTtpZih2PTAs''@;'; put 'put ''c2U8Qyl7Qy09Zz1zZTtkb3tKW1grK109aGVbdisrXX13aGlsZSgtLWcpO3Y9WC1TLHA9Sn19fWVsc2UgaWYodis9c2UtZyxnPEMpe0MtPWc7ZG97SltYKytdPWhlW3YrK119d2hpbGUoLS1nKTt2PVgtUyxwPUp9Zm9yKDtDPjI7KUpbWCsrXT1wW3YrK10sSltYKytdPXBbdisrXSxKW1grK109''@;'; put 'put ''cFt2KytdLEMtPTM7QyYmKEpbWCsrXT1wW3YrK10sQz4xJiYoSltYKytdPXBbdisrXSkpfWVsc2V7dj1YLVM7ZG97SltYKytdPUpbdisrXSxKW1grK109Slt2KytdLEpbWCsrXT1KW3YrK10sQy09M313aGlsZShDPjIpO0MmJihKW1grK109Slt2KytdLEM+MSYmKEpbWCsrXT1KW3YrK10pKX1i''@;'; put 'put ''cmVha31pZig2NCZnKXtFLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixWLm1vZGU9MzA7YnJlYWsgZX1OPWJbKDY1NTM1Jk4pKyh1ZSYoMTw8ZyktMSldfX1icmVha319d2hpbGUoQjxZJiZYPHEpO3VlJj0oMTw8KGNlLT0oQz1jZT4+Myk8PDMpKS0xLEUubmV4dF9pbj1CLT1DLEUubmV4''@;'; put 'put ''dF9vdXQ9WCxFLmF2YWlsX2luPUI8WT9ZLUIrNTo1LShCLVkpLEUuYXZhaWxfb3V0PVg8cT9xLVgrMjU3OjI1Ny0oWC1xKSxWLmhvbGQ9dWUsVi5iaXRzPWNlfX0se31dLDM1OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO3ZhciBLPU8oIi4uL3V0aWxzL2NvbW1vbiIpLEk9TygiLi9h''@;'; put 'put ''ZGxlcjMyIiksaz1PKCIuL2NyYzMyIiksRT1PKCIuL2luZmZhc3QiKSxqPU8oIi4vaW5mdHJlZXMiKSxlZT0wLHNlPS0yLGI9MSxNZT04NTIsRGU9NTkyO2Z1bmN0aW9uIHV0KHd0KXtyZXR1cm4od3Q+Pj4yNCYyNTUpKyh3dD4+PjgmNjUyODApKygoNjUyODAmd3QpPDw4KSsoKDI1NSZ3dCk8''@;'; put 'put ''PDI0KX1mdW5jdGlvbiBNdCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAs''@;'; put 'put ''dGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMu''@;'; put 'put ''ZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgSy5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgSy5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGws''@;'; put 'put ''dGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBIdCh3dCl7dmFyIFh0O3JldHVybiB3dCYmd3Quc3RhdGU/KHd0LnRvdGFsX2luPXd0LnRvdGFsX291dD0oWHQ9d3Quc3RhdGUpLnRvdGFsPTAsd3QubXNnPSIiLFh0LndyYXAmJih3dC5hZGxlcj0xJlh0LndyYXAp''@;'; put 'put ''LFh0Lm1vZGU9YixYdC5sYXN0PTAsWHQuaGF2ZWRpY3Q9MCxYdC5kbWF4PTMyNzY4LFh0LmhlYWQ9bnVsbCxYdC5ob2xkPTAsWHQuYml0cz0wLFh0LmxlbmNvZGU9WHQubGVuZHluPW5ldyBLLkJ1ZjMyKE1lKSxYdC5kaXN0Y29kZT1YdC5kaXN0ZHluPW5ldyBLLkJ1ZjMyKERlKSxYdC5zYW5l''@;'; put 'put ''PTEsWHQuYmFjaz0tMSxlZSk6c2V9ZnVuY3Rpb24gUHQod3Qpe3ZhciBYdDtyZXR1cm4gd3QmJnd0LnN0YXRlPygoWHQ9d3Quc3RhdGUpLndzaXplPTAsWHQud2hhdmU9MCxYdC53bmV4dD0wLEh0KHd0KSk6c2V9ZnVuY3Rpb24gb24od3QsWHQpe3ZhciBfdCxOdDtyZXR1cm4hd3R8fCF3dC5z''@;'; put 'put ''dGF0ZXx8KE50PXd0LnN0YXRlLFh0PDA/KF90PTAsWHQ9LVh0KTooX3Q9MSsoWHQ+PjQpLFh0PDQ4JiYoWHQmPTE1KSksWHQmJihYdDw4fHxYdD4xNSkpP3NlOihudWxsIT09TnQud2luZG93JiZOdC53Yml0cyE9PVh0JiYoTnQud2luZG93PW51bGwpLE50LndyYXA9X3QsTnQud2JpdHM9WHQs''@;'; put 'put ''UHQod3QpKX1mdW5jdGlvbiBDbih3dCxYdCl7dmFyIF90LE50O3JldHVybiB3dD8oTnQ9bmV3IE10LHd0LnN0YXRlPU50LE50LndpbmRvdz1udWxsLChfdD1vbih3dCxYdCkpIT09ZWUmJih3dC5zdGF0ZT1udWxsKSxfdCk6c2V9dmFyIFduLGVuLGJuPSEwO2Z1bmN0aW9uICRuKHd0KXtpZihi''@;'; put 'put ''bil7dmFyIFh0O2ZvcihXbj1uZXcgSy5CdWYzMig1MTIpLGVuPW5ldyBLLkJ1ZjMyKDMyKSxYdD0wO1h0PDE0NDspd3QubGVuc1tYdCsrXT04O2Zvcig7WHQ8MjU2Oyl3dC5sZW5zW1h0KytdPTk7Zm9yKDtYdDwyODA7KXd0LmxlbnNbWHQrK109Nztmb3IoO1h0PDI4ODspd3QubGVuc1tYdCsr''@;'; put 'put ''XT04O2ZvcihqKDEsd3QubGVucywwLDI4OCxXbiwwLHd0Lndvcmsse2JpdHM6OX0pLFh0PTA7WHQ8MzI7KXd0LmxlbnNbWHQrK109NTtqKDIsd3QubGVucywwLDMyLGVuLDAsd3Qud29yayx7Yml0czo1fSksYm49ITF9d3QubGVuY29kZT1Xbix3dC5sZW5iaXRzPTksd3QuZGlzdGNvZGU9ZW4s''@;'; put 'put ''d3QuZGlzdGJpdHM9NX16LmluZmxhdGVSZXNldD1QdCx6LmluZmxhdGVSZXNldDI9b24sei5pbmZsYXRlUmVzZXRLZWVwPUh0LHouaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gVXQod3Qpe3JldHVybiBDbih3dCwxNSl9LHouaW5mbGF0ZUluaXQyPUNuLHouaW5mbGF0ZT1mdW5jdGlvbiBmdCh3dCxY''@;'; put 'put ''dCl7dmFyIF90LE50LG1uLHJ0LEl0LEp0LER0LHB0LFl0LEluLHp0LHluLHhuLHNuLFJuLCR0LFBuLG5pLGxuLGpuLHFyLGdpLFVpLEtyLEJuPTAseHI9bmV3IEsuQnVmOCg0KSxubz1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXd0fHwhd3Qu''@;'; put 'put ''c3RhdGV8fCF3dC5vdXRwdXR8fCF3dC5pbnB1dCYmMCE9PXd0LmF2YWlsX2luKXJldHVybiBzZTsxMj09PShfdD13dC5zdGF0ZSkubW9kZSYmKF90Lm1vZGU9MTMpLEl0PXd0Lm5leHRfb3V0LG1uPXd0Lm91dHB1dCxydD13dC5uZXh0X2luLE50PXd0LmlucHV0LHB0PV90LmhvbGQsWXQ9X3Qu''@;'; put 'put ''Yml0cyxJbj1KdD13dC5hdmFpbF9pbix6dD1EdD13dC5hdmFpbF9vdXQsZ2k9ZWU7ZTpmb3IoOzspc3dpdGNoKF90Lm1vZGUpe2Nhc2UgYjppZigwPT09X3Qud3JhcCl7X3QubW9kZT0xMzticmVha31mb3IoO1l0PDE2Oyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0''@;'; put 'put ''LFl0Kz04fWlmKDImX3Qud3JhcCYmMzU2MTU9PT1wdCl7X3QuY2hlY2s9MCx4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkscHQ9MCxZdD0wLF90Lm1vZGU9MjticmVha31pZihfdC5mbGFncz0wLF90LmhlYWQmJihfdC5oZWFkLmRvbmU9''@;'; put 'put ''ITEpLCEoMSZfdC53cmFwKXx8KCgoMjU1JnB0KTw8OCkrKHB0Pj44KSklMzEpe3d0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsX3QubW9kZT0zMDticmVha31pZig4IT0oMTUmcHQpKXt3dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixfdC5tb2RlPTMwO2JyZWFrfWlm''@;'; put 'put ''KFl0LT00LHFyPTgrKDE1JihwdD4+Pj00KSksMD09PV90LndiaXRzKV90LndiaXRzPXFyO2Vsc2UgaWYocXI+X3Qud2JpdHMpe3d0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsX3QubW9kZT0zMDticmVha31fdC5kbWF4PTE8PHFyLHd0LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT01MTIm''@;'; put 'put ''cHQ/MTA6MTIscHQ9MCxZdD0wO2JyZWFrO2Nhc2UgMjpmb3IoO1l0PDE2Oyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKF90LmZsYWdzPXB0LDghPSgyNTUmX3QuZmxhZ3MpKXt3dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixfdC5t''@;'; put 'put ''b2RlPTMwO2JyZWFrfWlmKDU3MzQ0Jl90LmZsYWdzKXt3dC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsX3QubW9kZT0zMDticmVha31fdC5oZWFkJiYoX3QuaGVhZC50ZXh0PXB0Pj44JjEpLDUxMiZfdC5mbGFncyYmKHhyWzBdPTI1NSZwdCx4clsxXT1wdD4+PjgmMjU1LF90LmNo''@;'; put 'put ''ZWNrPWsoX3QuY2hlY2sseHIsMiwwKSkscHQ9MCxZdD0wLF90Lm1vZGU9MztjYXNlIDM6Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5oZWFkJiYoX3QuaGVhZC50aW1lPXB0KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQs''@;'; put 'put ''eHJbMV09cHQ+Pj44JjI1NSx4clsyXT1wdD4+PjE2JjI1NSx4clszXT1wdD4+PjI0JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDQsMCkpLHB0PTAsWXQ9MCxfdC5tb2RlPTQ7Y2FzZSA0OmZvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQr''@;'; put 'put ''PTh9X3QuaGVhZCYmKF90LmhlYWQueGZsYWdzPTI1NSZwdCxfdC5oZWFkLm9zPXB0Pj44KSw1MTImX3QuZmxhZ3MmJih4clswXT0yNTUmcHQseHJbMV09cHQ+Pj44JjI1NSxfdC5jaGVjaz1rKF90LmNoZWNrLHhyLDIsMCkpLHB0PTAsWXQ9MCxfdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQmX3Qu''@;'; put 'put ''ZmxhZ3Mpe2Zvcig7WXQ8MTY7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9X3QubGVuZ3RoPXB0LF90LmhlYWQmJihfdC5oZWFkLmV4dHJhX2xlbj1wdCksNTEyJl90LmZsYWdzJiYoeHJbMF09MjU1JnB0LHhyWzFdPXB0Pj4+OCYyNTUsX3QuY2hlY2s9''@;'; put 'put ''ayhfdC5jaGVjayx4ciwyLDApKSxwdD0wLFl0PTB9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5leHRyYT1udWxsKTtfdC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmX3QuZmxhZ3MmJigoeW49X3QubGVuZ3RoKT5KdCYmKHluPUp0KSx5biYmKF90LmhlYWQmJihxcj1fdC5oZWFkLmV4dHJhX2xlbi1f''@;'; put 'put ''dC5sZW5ndGgsX3QuaGVhZC5leHRyYXx8KF90LmhlYWQuZXh0cmE9bmV3IEFycmF5KF90LmhlYWQuZXh0cmFfbGVuKSksSy5hcnJheVNldChfdC5oZWFkLmV4dHJhLE50LHJ0LHluLHFyKSksNTEyJl90LmZsYWdzJiYoX3QuY2hlY2s9ayhfdC5jaGVjayxOdCx5bixydCkpLEp0LT15bixydCs9''@;'; put 'put ''eW4sX3QubGVuZ3RoLT15biksX3QubGVuZ3RoKSlicmVhayBlO190Lmxlbmd0aD0wLF90Lm1vZGU9NztjYXNlIDc6aWYoMjA0OCZfdC5mbGFncyl7aWYoMD09PUp0KWJyZWFrIGU7eW49MDtkb3txcj1OdFtydCt5bisrXSxfdC5oZWFkJiZxciYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5u''@;'; put 'put ''YW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHFyKSl9d2hpbGUocXImJnluPEp0KTtpZig1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1rKF90LmNoZWNrLE50LHluLHJ0KSksSnQtPXluLHJ0Kz15bixxcilicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQubmFtZT1udWxsKTtfdC5sZW5ndGg9''@;'; put 'put ''MCxfdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmX3QuZmxhZ3Mpe2lmKDA9PT1KdClicmVhayBlO3luPTA7ZG97cXI9TnRbcnQreW4rK10sX3QuaGVhZCYmcXImJl90Lmxlbmd0aDw2NTUzNiYmKF90LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShxcikpfXdoaWxlKHFyJiZ5bjxK''@;'; put 'put ''dCk7aWYoNTEyJl90LmZsYWdzJiYoX3QuY2hlY2s9ayhfdC5jaGVjayxOdCx5bixydCkpLEp0LT15bixydCs9eW4scXIpYnJlYWsgZX1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmNvbW1lbnQ9bnVsbCk7X3QubW9kZT05O2Nhc2UgOTppZig1MTImX3QuZmxhZ3Mpe2Zvcig7WXQ8MTY7KXtpZigw''@;'; put 'put ''PT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYocHQhPT0oNjU1MzUmX3QuY2hlY2spKXt3dC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90LmhlYWQmJihfdC5oZWFkLmhjcmM9X3QuZmxhZ3M+PjkmMSxfdC5o''@;'; put 'put ''ZWFkLmRvbmU9ITApLHd0LmFkbGVyPV90LmNoZWNrPTAsX3QubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7WXQ8MzI7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9d3QuYWRsZXI9X3QuY2hlY2s9dXQocHQpLHB0PTAsWXQ9MCxfdC5tb2RlPTExO2Nh''@;'; put 'put ''c2UgMTE6aWYoMD09PV90LmhhdmVkaWN0KXJldHVybiB3dC5uZXh0X291dD1JdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9pbj1ydCx3dC5hdmFpbF9pbj1KdCxfdC5ob2xkPXB0LF90LmJpdHM9WXQsMjt3dC5hZGxlcj1fdC5jaGVjaz0xLF90Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09WHR8''@;'; put 'put ''fDY9PT1YdClicmVhayBlO2Nhc2UgMTM6aWYoX3QubGFzdCl7cHQ+Pj49NyZZdCxZdC09NyZZdCxfdC5tb2RlPTI3O2JyZWFrfWZvcig7WXQ8Mzspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1zd2l0Y2goX3QubGFzdD0xJnB0LFl0LT0xLDMmKHB0Pj4+''@;'; put 'put ''PTEpKXtjYXNlIDA6X3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYoJG4oX3QpLF90Lm1vZGU9MjAsNj09PVh0KXtwdD4+Pj0yLFl0LT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOl90Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOnd0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixfdC5tb2RlPTMwfXB0''@;'; put 'put ''Pj4+PTIsWXQtPTI7YnJlYWs7Y2FzZSAxNDpmb3IocHQ+Pj49NyZZdCxZdC09NyZZdDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigoNjU1MzUmcHQpIT0ocHQ+Pj4xNl42NTUzNSkpe3d0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sg''@;'; put 'put ''bGVuZ3RocyIsX3QubW9kZT0zMDticmVha31pZihfdC5sZW5ndGg9NjU1MzUmcHQscHQ9MCxZdD0wLF90Lm1vZGU9MTUsNj09PVh0KWJyZWFrIGU7Y2FzZSAxNTpfdC5tb2RlPTE2O2Nhc2UgMTY6aWYoeW49X3QubGVuZ3RoKXtpZih5bj5KdCYmKHluPUp0KSx5bj5EdCYmKHluPUR0KSwwPT09''@;'; put 'put ''eW4pYnJlYWsgZTtLLmFycmF5U2V0KG1uLE50LHJ0LHluLEl0KSxKdC09eW4scnQrPXluLER0LT15bixJdCs9eW4sX3QubGVuZ3RoLT15bjticmVha31fdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtZdDwxNDspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZ''@;'; put 'put ''dCs9OH1pZihfdC5ubGVuPTI1NysoMzEmcHQpLFl0LT01LF90Lm5kaXN0PTErKDMxJihwdD4+Pj01KSksWXQtPTUsX3QubmNvZGU9NCsoMTUmKHB0Pj4+PTUpKSxwdD4+Pj00LFl0LT00LF90Lm5sZW4+Mjg2fHxfdC5uZGlzdD4zMCl7d3QubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlzdGFu''@;'; put 'put ''Y2Ugc3ltYm9scyIsX3QubW9kZT0zMDticmVha31fdC5oYXZlPTAsX3QubW9kZT0xODtjYXNlIDE4OmZvcig7X3QuaGF2ZTxfdC5uY29kZTspe2Zvcig7WXQ8Mzspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5zW25vW190LmhhdmUrK11dPTcm''@;'; put 'put ''cHQscHQ+Pj49MyxZdC09M31mb3IoO190LmhhdmU8MTk7KV90LmxlbnNbbm9bX3QuaGF2ZSsrXV09MDtpZihfdC5sZW5jb2RlPV90LmxlbmR5bixfdC5sZW5iaXRzPTcsZ2k9aigwLF90LmxlbnMsMCwxOSxfdC5sZW5jb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5sZW5iaXRzfSksX3QubGVu''@;'; put 'put ''Yml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsX3QubW9kZT0zMDticmVha31fdC5oYXZlPTAsX3QubW9kZT0xOTtjYXNlIDE5OmZvcig7X3QuaGF2ZTxfdC5ubGVuK190Lm5kaXN0Oyl7Zm9yKDskdD0oQm49X3QubGVuY29kZVtwdCYoMTw8X3QubGVu''@;'; put 'put ''Yml0cyktMV0pPj4+MTYmMjU1LFBuPTY1NTM1JkJuLCEoKFJuPUJuPj4+MjQpPD1ZdCk7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9aWYoUG48MTYpcHQ+Pj49Um4sWXQtPVJuLF90LmxlbnNbX3QuaGF2ZSsrXT1QbjtlbHNle2lmKDE2PT09UG4pe2Zv''@;'; put 'put ''cihLcj1SbisyO1l0PEtyOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fWlmKHB0Pj4+PVJuLFl0LT1SbiwwPT09X3QuaGF2ZSl7d3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixfdC5tb2RlPTMwO2JyZWFrfXFyPV90LmxlbnNbX3QuaGF2''@;'; put 'put ''ZS0xXSx5bj0zKygzJnB0KSxwdD4+Pj0yLFl0LT0yfWVsc2UgaWYoMTc9PT1Qbil7Zm9yKEtyPVJuKzM7WXQ8S3I7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9WXQtPVJuLHFyPTAseW49MysoNyYocHQ+Pj49Um4pKSxwdD4+Pj0zLFl0LT0zfWVsc2V7''@;'; put 'put ''Zm9yKEtyPVJuKzc7WXQ8S3I7KXtpZigwPT09SnQpYnJlYWsgZTtKdC0tLHB0Kz1OdFtydCsrXTw8WXQsWXQrPTh9WXQtPVJuLHFyPTAseW49MTErKDEyNyYocHQ+Pj49Um4pKSxwdD4+Pj03LFl0LT03fWlmKF90LmhhdmUreW4+X3QubmxlbitfdC5uZGlzdCl7d3QubXNnPSJpbnZhbGlkIGJp''@;'; put 'put ''dCBsZW5ndGggcmVwZWF0IixfdC5tb2RlPTMwO2JyZWFrfWZvcig7eW4tLTspX3QubGVuc1tfdC5oYXZlKytdPXFyfX1pZigzMD09PV90Lm1vZGUpYnJlYWs7aWYoMD09PV90LmxlbnNbMjU2XSl7d3QubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLF90Lm1vZGU9''@;'; put 'put ''MzA7YnJlYWt9aWYoX3QubGVuYml0cz05LGdpPWooMSxfdC5sZW5zLDAsX3QubmxlbixfdC5sZW5jb2RlLDAsX3Qud29yayxVaT17Yml0czpfdC5sZW5iaXRzfSksX3QubGVuYml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsX3QubW9kZT0zMDti''@;'; put 'put ''cmVha31pZihfdC5kaXN0Yml0cz02LF90LmRpc3Rjb2RlPV90LmRpc3RkeW4sZ2k9aigyLF90LmxlbnMsX3QubmxlbixfdC5uZGlzdCxfdC5kaXN0Y29kZSwwLF90LndvcmssVWk9e2JpdHM6X3QuZGlzdGJpdHN9KSxfdC5kaXN0Yml0cz1VaS5iaXRzLGdpKXt3dC5tc2c9ImludmFsaWQgZGlz''@;'; put 'put ''dGFuY2VzIHNldCIsX3QubW9kZT0zMDticmVha31pZihfdC5tb2RlPTIwLDY9PT1YdClicmVhayBlO2Nhc2UgMjA6X3QubW9kZT0yMTtjYXNlIDIxOmlmKEp0Pj02JiZEdD49MjU4KXt3dC5uZXh0X291dD1JdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9pbj1ydCx3dC5hdmFpbF9pbj1KdCxf''@;'; put 'put ''dC5ob2xkPXB0LF90LmJpdHM9WXQsRSh3dCx6dCksSXQ9d3QubmV4dF9vdXQsbW49d3Qub3V0cHV0LER0PXd0LmF2YWlsX291dCxydD13dC5uZXh0X2luLE50PXd0LmlucHV0LEp0PXd0LmF2YWlsX2luLHB0PV90LmhvbGQsWXQ9X3QuYml0cywxMj09PV90Lm1vZGUmJihfdC5iYWNrPS0xKTti''@;'; put 'put ''cmVha31mb3IoX3QuYmFjaz0wOyR0PShCbj1fdC5sZW5jb2RlW3B0JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsUG49NjU1MzUmQm4sISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZigkdCYmISgyNDAmJHQp''@;'; put 'put ''KXtmb3Iobmk9Um4sbG49JHQsam49UG47JHQ9KEJuPV90LmxlbmNvZGVbam4rKChwdCYoMTw8bmkrbG4pLTEpPj5uaSldKT4+PjE2JjI1NSxQbj02NTUzNSZCbiwhKG5pKyhSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXB0''@;'; put 'put ''Pj4+PW5pLFl0LT1uaSxfdC5iYWNrKz1uaX1pZihwdD4+Pj1SbixZdC09Um4sX3QuYmFjays9Um4sX3QubGVuZ3RoPVBuLDA9PT0kdCl7X3QubW9kZT0yNjticmVha31pZigzMiYkdCl7X3QuYmFjaz0tMSxfdC5tb2RlPTEyO2JyZWFrfWlmKDY0JiR0KXt3dC5tc2c9ImludmFsaWQgbGl0ZXJh''@;'; put 'put ''bC9sZW5ndGggY29kZSIsX3QubW9kZT0zMDticmVha31fdC5leHRyYT0xNSYkdCxfdC5tb2RlPTIyO2Nhc2UgMjI6aWYoX3QuZXh0cmEpe2ZvcihLcj1fdC5leHRyYTtZdDxLcjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5sZW5ndGgrPXB0Jigx''@;'; put 'put ''PDxfdC5leHRyYSktMSxwdD4+Pj1fdC5leHRyYSxZdC09X3QuZXh0cmEsX3QuYmFjays9X3QuZXh0cmF9X3Qud2FzPV90Lmxlbmd0aCxfdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDskdD0oQm49X3QuZGlzdGNvZGVbcHQmKDE8PF90LmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsUG49NjU1MzUmQm4s''@;'; put 'put ''ISgoUm49Qm4+Pj4yNCk8PVl0KTspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1pZighKDI0MCYkdCkpe2ZvcihuaT1Sbixsbj0kdCxqbj1QbjskdD0oQm49X3QuZGlzdGNvZGVbam4rKChwdCYoMTw8bmkrbG4pLTEpPj5uaSldKT4+PjE2JjI1NSxQbj02''@;'; put 'put ''NTUzNSZCbiwhKG5pKyhSbj1Cbj4+PjI0KTw9WXQpOyl7aWYoMD09PUp0KWJyZWFrIGU7SnQtLSxwdCs9TnRbcnQrK108PFl0LFl0Kz04fXB0Pj4+PW5pLFl0LT1uaSxfdC5iYWNrKz1uaX1pZihwdD4+Pj1SbixZdC09Um4sX3QuYmFjays9Um4sNjQmJHQpe3d0Lm1zZz0iaW52YWxpZCBkaXN0''@;'; put 'put ''YW5jZSBjb2RlIixfdC5tb2RlPTMwO2JyZWFrfV90Lm9mZnNldD1QbixfdC5leHRyYT0xNSYkdCxfdC5tb2RlPTI0O2Nhc2UgMjQ6aWYoX3QuZXh0cmEpe2ZvcihLcj1fdC5leHRyYTtZdDxLcjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0KytdPDxZdCxZdCs9OH1fdC5vZmZz''@;'; put 'put ''ZXQrPXB0JigxPDxfdC5leHRyYSktMSxwdD4+Pj1fdC5leHRyYSxZdC09X3QuZXh0cmEsX3QuYmFjays9X3QuZXh0cmF9aWYoX3Qub2Zmc2V0Pl90LmRtYXgpe3d0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLF90Lm1vZGU9MzA7YnJlYWt9X3QubW9kZT0yNTtjYXNlIDI1''@;'; put 'put ''OmlmKDA9PT1EdClicmVhayBlO2lmKF90Lm9mZnNldD4oeW49enQtRHQpKXtpZigoeW49X3Qub2Zmc2V0LXluKT5fdC53aGF2ZSYmX3Quc2FuZSl7d3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha314bj15bj5fdC53bmV4dD9fdC53c2l6ZS0o''@;'; put 'put ''eW4tPV90LnduZXh0KTpfdC53bmV4dC15bix5bj5fdC5sZW5ndGgmJih5bj1fdC5sZW5ndGgpLHNuPV90LndpbmRvd31lbHNlIHNuPW1uLHhuPUl0LV90Lm9mZnNldCx5bj1fdC5sZW5ndGg7eW4+RHQmJih5bj1EdCksRHQtPXluLF90Lmxlbmd0aC09eW47ZG97bW5bSXQrK109c25beG4rK119''@;'; put 'put ''d2hpbGUoLS15bik7MD09PV90Lmxlbmd0aCYmKF90Lm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PUR0KWJyZWFrIGU7bW5bSXQrK109X3QubGVuZ3RoLER0LS0sX3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKF90LndyYXApe2Zvcig7WXQ8MzI7KXtpZigwPT09SnQpYnJlYWsgZTtK''@;'; put 'put ''dC0tLHB0fD1OdFtydCsrXTw8WXQsWXQrPTh9aWYod3QudG90YWxfb3V0Kz16dC09RHQsX3QudG90YWwrPXp0LHp0JiYod3QuYWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/ayhfdC5jaGVjayxtbix6dCxJdC16dCk6SShfdC5jaGVjayxtbix6dCxJdC16dCkpLHp0PUR0LChfdC5mbGFncz9wdDp1''@;'; put 'put ''dChwdCkpIT09X3QuY2hlY2spe3d0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9cHQ9MCxZdD0wfV90Lm1vZGU9Mjg7Y2FzZSAyODppZihfdC53cmFwJiZfdC5mbGFncyl7Zm9yKDtZdDwzMjspe2lmKDA9PT1KdClicmVhayBlO0p0LS0scHQrPU50W3J0Kytd''@;'; put 'put ''PDxZdCxZdCs9OH1pZihwdCE9PSg0Mjk0OTY3Mjk1Jl90LnRvdGFsKSl7d3QubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfXB0PTAsWXQ9MH1fdC5tb2RlPTI5O2Nhc2UgMjk6Z2k9MTticmVhayBlO2Nhc2UgMzA6Z2k9LTM7YnJlYWsgZTtjYXNlIDMxOnJl''@;'; put 'put ''dHVybi00O2RlZmF1bHQ6cmV0dXJuIHNlfXJldHVybiB3dC5uZXh0X291dD1JdCx3dC5hdmFpbF9vdXQ9RHQsd3QubmV4dF9pbj1ydCx3dC5hdmFpbF9pbj1KdCxfdC5ob2xkPXB0LF90LmJpdHM9WXQsKF90LndzaXplfHx6dCE9PXd0LmF2YWlsX291dCYmX3QubW9kZTwzMCYmKF90Lm1vZGU8''@;'; put 'put ''Mjd8fDQhPT1YdCkpJiZmdW5jdGlvbiBIbih3dCxYdCxfdCxOdCl7dmFyIG1uLHJ0PXd0LnN0YXRlO3JldHVybiBudWxsPT09cnQud2luZG93JiYocnQud3NpemU9MTw8cnQud2JpdHMscnQud25leHQ9MCxydC53aGF2ZT0wLHJ0LndpbmRvdz1uZXcgSy5CdWY4KHJ0LndzaXplKSksTnQ+PXJ0''@;'; put 'put ''LndzaXplPyhLLmFycmF5U2V0KHJ0LndpbmRvdyxYdCxfdC1ydC53c2l6ZSxydC53c2l6ZSwwKSxydC53bmV4dD0wLHJ0LndoYXZlPXJ0LndzaXplKTooKG1uPXJ0LndzaXplLXJ0LnduZXh0KT5OdCYmKG1uPU50KSxLLmFycmF5U2V0KHJ0LndpbmRvdyxYdCxfdC1OdCxtbixydC53bmV4dCks''@;'; put 'put ''KE50LT1tbik/KEsuYXJyYXlTZXQocnQud2luZG93LFh0LF90LU50LE50LDApLHJ0LnduZXh0PU50LHJ0LndoYXZlPXJ0LndzaXplKToocnQud25leHQrPW1uLHJ0LnduZXh0PT09cnQud3NpemUmJihydC53bmV4dD0wKSxydC53aGF2ZTxydC53c2l6ZSYmKHJ0LndoYXZlKz1tbikpKSwwfSh3''@;'; put 'put ''dCx3dC5vdXRwdXQsd3QubmV4dF9vdXQsenQtd3QuYXZhaWxfb3V0KT8oX3QubW9kZT0zMSwtNCk6KHp0LT13dC5hdmFpbF9vdXQsd3QudG90YWxfaW4rPUluLT13dC5hdmFpbF9pbix3dC50b3RhbF9vdXQrPXp0LF90LnRvdGFsKz16dCxfdC53cmFwJiZ6dCYmKHd0LmFkbGVyPV90LmNoZWNr''@;'; put 'put ''PV90LmZsYWdzP2soX3QuY2hlY2ssbW4senQsd3QubmV4dF9vdXQtenQpOkkoX3QuY2hlY2ssbW4senQsd3QubmV4dF9vdXQtenQpKSx3dC5kYXRhX3R5cGU9X3QuYml0cysoX3QubGFzdD82NDowKSsoMTI9PT1fdC5tb2RlPzEyODowKSsoMjA9PT1fdC5tb2RlfHwxNT09PV90Lm1vZGU/MjU2''@;'; put 'put ''OjApLCgwPT09SW4mJjA9PT16dHx8ND09PVh0KSYmZ2k9PT1lZSYmKGdpPS01KSxnaSl9LHouaW5mbGF0ZUVuZD1mdW5jdGlvbiBmbih3dCl7aWYoIXd0fHwhd3Quc3RhdGUpcmV0dXJuIHNlO3ZhciBYdD13dC5zdGF0ZTtyZXR1cm4gWHQud2luZG93JiYoWHQud2luZG93PW51bGwpLHd0LnN0''@;'; put 'put ''YXRlPW51bGwsZWV9LHouaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBobih3dCxYdCl7dmFyIF90O3JldHVybiB3dCYmd3Quc3RhdGUmJjImKF90PXd0LnN0YXRlKS53cmFwPyhfdC5oZWFkPVh0LFh0LmRvbmU9ITEsZWUpOnNlfSx6LmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20g''@;'; put 'put ''Tm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oTyxSLHopeyJ1c2Ugc3RyaWN0Ijt2YXIgSz1PKCIuLi91dGlscy9jb21tb24iKSxZPVsz''@;'; put 'put ''LDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sWD1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAs''@;'; put 'put ''MjEsMjEsMjEsMjEsMTYsNzIsNzhdLFU9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLHE9WzE2LDE2LDE2LDE2LDE3LDE3LDE4''@;'; put 'put ''LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtSLmV4cG9ydHM9ZnVuY3Rpb24odGUsb2Usc2UsaGUsdWUsY2UsRyxiKXt2YXIgZGUsZmUseGUsTGUsRmUsV2UsUGUsYmUsQWUsRD1iLmJpdHMsSD0wLE49''@;'; put 'put ''MCxnPTAsQz0wLFM9MCx2PTAscD0wLHc9MCxKPTAsbmU9MCxPZT1udWxsLGplPTAsS2U9bmV3IEsuQnVmMTYoMTYpLFllPW5ldyBLLkJ1ZjE2KDE2KSxKZT1udWxsLGx0PTA7Zm9yKEg9MDtIPD0xNTtIKyspS2VbSF09MDtmb3IoTj0wO048aGU7TisrKUtlW29lW3NlK05dXSsrO2ZvcihTPUQs''@;'; put 'put ''Qz0xNTtDPj0xJiYwPT09S2VbQ107Qy0tKTtpZihTPkMmJihTPUMpLDA9PT1DKXJldHVybiB1ZVtjZSsrXT0yMDk3MTUyMCx1ZVtjZSsrXT0yMDk3MTUyMCxiLmJpdHM9MSwwO2ZvcihnPTE7ZzxDJiYwPT09S2VbZ107ZysrKTtmb3IoUzxnJiYoUz1nKSx3PTEsSD0xO0g8PTE1O0grKylpZih3''@;'; put 'put ''PDw9MSwody09S2VbSF0pPDApcmV0dXJuLTE7aWYodz4wJiYoMD09PXRlfHwxIT09QykpcmV0dXJuLTE7Zm9yKFllWzFdPTAsSD0xO0g8MTU7SCsrKVllW0grMV09WWVbSF0rS2VbSF07Zm9yKE49MDtOPGhlO04rKykwIT09b2Vbc2UrTl0mJihHW1llW29lW3NlK05dXSsrXT1OKTtpZigwPT09''@;'; put 'put ''dGU/KE9lPUplPUcsV2U9MTkpOjE9PT10ZT8oT2U9WSxqZS09MjU3LEplPVgsbHQtPTI1NyxXZT0yNTYpOihPZT1VLEplPXEsV2U9LTEpLG5lPTAsTj0wLEg9ZyxGZT1jZSx2PVMscD0wLHhlPS0xLExlPShKPTE8PFMpLTEsMT09PXRlJiZKPjg1Mnx8Mj09PXRlJiZKPjU5MilyZXR1cm4gMTtm''@;'; put 'put ''b3IoOzspe1BlPUgtcCxHW05dPFdlPyhiZT0wLEFlPUdbTl0pOkdbTl0+V2U/KGJlPUplW2x0K0dbTl1dLEFlPU9lW2plK0dbTl1dKTooYmU9OTYsQWU9MCksZGU9MTw8SC1wLGc9ZmU9MTw8djtkb3t1ZVtGZSsobmU+PnApKyhmZS09ZGUpXT1QZTw8MjR8YmU8PDE2fEFlfDB9d2hpbGUoMCE9''@;'; put 'put ''PWZlKTtmb3IoZGU9MTw8SC0xO25lJmRlOylkZT4+PTE7aWYoMCE9PWRlPyhuZSY9ZGUtMSxuZSs9ZGUpOm5lPTAsTisrLDA9PS0tS2VbSF0pe2lmKEg9PT1DKWJyZWFrO0g9b2Vbc2UrR1tOXV19aWYoSD5TJiYobmUmTGUpIT09eGUpe2ZvcigwPT09cCYmKHA9UyksRmUrPWcsdz0xPDwodj1I''@;'; put 'put ''LXApO3YrcDxDJiYhKCh3LT1LZVt2K3BdKTw9MCk7KXYrKyx3PDw9MTtpZihKKz0xPDx2LDE9PT10ZSYmSj44NTJ8fDI9PT10ZSYmSj41OTIpcmV0dXJuIDE7dWVbeGU9bmUmTGVdPVM8PDI0fHY8PDE2fEZlLWNlfDB9fXJldHVybiAwIT09bmUmJih1ZVtGZStuZV09SC1wPDwyNHw2NDw8MTZ8''@;'; put 'put ''MCksYi5iaXRzPVMsMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0z''@;'; put 'put ''IjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKE8sUix6KXsidXNlIHN0cmljdCI7dmFyIEs9TygiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24g''@;'; put 'put ''VihmdCl7Zm9yKHZhciBmbj1mdC5sZW5ndGg7LS1mbj49MDspZnRbZm5dPTB9dmFyIGNlPTE1LEc9MTYsQz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxTPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgs''@;'; put 'put ''OSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSx2PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxwPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxKPW5ldyBBcnJheSg1NzYpO1YoSik7dmFyIG5lPW5ldyBBcnJheSg2MCk7''@;'; put 'put ''VihuZSk7dmFyIGRlPW5ldyBBcnJheSg1MTIpO1YoZGUpO3ZhciBmZT1uZXcgQXJyYXkoMjU2KTtWKGZlKTt2YXIgeGU9bmV3IEFycmF5KDI5KTtWKHhlKTt2YXIgTGU9bmV3IEFycmF5KDMwKTtWKExlKTt2YXIgT2UsamUsV2UsRmU9ZnVuY3Rpb24oZnQsZm4saG4sd3QsWHQpe3RoaXMuc3Rh''@;'; put 'put ''dGljX3RyZWU9ZnQsdGhpcy5leHRyYV9iaXRzPWZuLHRoaXMuZXh0cmFfYmFzZT1obix0aGlzLmVsZW1zPXd0LHRoaXMubWF4X2xlbmd0aD1YdCx0aGlzLmhhc19zdHJlZT1mdCYmZnQubGVuZ3RofSxLZT1mdW5jdGlvbihmdCxmbil7dGhpcy5keW5fdHJlZT1mdCx0aGlzLm1heF9jb2RlPTAs''@;'; put 'put ''dGhpcy5zdGF0X2Rlc2M9Zm59O2Z1bmN0aW9uIFllKGZ0KXtyZXR1cm4gZnQ8MjU2P2RlW2Z0XTpkZVsyNTYrKGZ0Pj4+NyldfWZ1bmN0aW9uIEplKGZ0LGZuKXtmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmbixmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZuPj4+OCYy''@;'; put 'put ''NTV9ZnVuY3Rpb24gbHQoZnQsZm4saG4pe2Z0LmJpX3ZhbGlkPkctaG4/KGZ0LmJpX2J1Znw9Zm48PGZ0LmJpX3ZhbGlkJjY1NTM1LEplKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPWZuPj5HLWZ0LmJpX3ZhbGlkLGZ0LmJpX3ZhbGlkKz1obi1HKTooZnQuYmlfYnVmfD1mbjw8ZnQuYmlfdmFs''@;'; put 'put ''aWQmNjU1MzUsZnQuYmlfdmFsaWQrPWhuKX1mdW5jdGlvbiBQZShmdCxmbixobil7bHQoZnQsaG5bMipmbl0saG5bMipmbisxXSl9ZnVuY3Rpb24gYmUoZnQsZm4pe3ZhciBobj0wO2Rve2hufD0xJmZ0LGZ0Pj4+PTEsaG48PD0xfXdoaWxlKC0tZm4+MCk7cmV0dXJuIGhuPj4+MX1mdW5jdGlv''@;'; put 'put ''biBxZShmdCxmbixobil7dmFyIF90LE50LHd0PW5ldyBBcnJheShjZSsxKSxYdD0wO2ZvcihfdD0xO190PD1jZTtfdCsrKXd0W190XT1YdD1YdCtobltfdC0xXTw8MTtmb3IoTnQ9MDtOdDw9Zm47TnQrKyl7dmFyIG1uPWZ0WzIqTnQrMV07MCE9PW1uJiYoZnRbMipOdF09YmUod3RbbW5dKyss''@;'; put 'put ''bW4pKX19ZnVuY3Rpb24gVWUoZnQpe3ZhciBmbjtmb3IoZm49MDtmbjwyODY7Zm4rKylmdC5keW5fbHRyZWVbMipmbl09MDtmb3IoZm49MDtmbjwzMDtmbisrKWZ0LmR5bl9kdHJlZVsyKmZuXT0wO2Zvcihmbj0wO2ZuPDE5O2ZuKyspZnQuYmxfdHJlZVsyKmZuXT0wO2Z0LmR5bl9sdHJlZVs1''@;'; put 'put ''MTJdPTEsZnQub3B0X2xlbj1mdC5zdGF0aWNfbGVuPTAsZnQubGFzdF9saXQ9ZnQubWF0Y2hlcz0wfWZ1bmN0aW9uIGh0KGZ0KXtmdC5iaV92YWxpZD44P0plKGZ0LGZ0LmJpX2J1Zik6ZnQuYmlfdmFsaWQ+MCYmKGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109ZnQuYmlfYnVmKSxmdC5i''@;'; put 'put ''aV9idWY9MCxmdC5iaV92YWxpZD0wfWZ1bmN0aW9uIERlKGZ0LGZuLGhuLHd0KXt2YXIgWHQ9MipmbixfdD0yKmhuO3JldHVybiBmdFtYdF08ZnRbX3RdfHxmdFtYdF09PT1mdFtfdF0mJnd0W2ZuXTw9d3RbaG5dfWZ1bmN0aW9uIHplKGZ0LGZuLGhuKXtmb3IodmFyIHd0PWZ0LmhlYXBbaG5d''@;'; put 'put ''LFh0PWhuPDwxO1h0PD1mdC5oZWFwX2xlbiYmKFh0PGZ0LmhlYXBfbGVuJiZEZShmbixmdC5oZWFwW1h0KzFdLGZ0LmhlYXBbWHRdLGZ0LmRlcHRoKSYmWHQrKywhRGUoZm4sd3QsZnQuaGVhcFtYdF0sZnQuZGVwdGgpKTspZnQuaGVhcFtobl09ZnQuaGVhcFtYdF0saG49WHQsWHQ8PD0xO2Z0''@;'; put 'put ''LmhlYXBbaG5dPXd0fWZ1bmN0aW9uIGl0KGZ0LGZuLGhuKXt2YXIgd3QsWHQsTnQsbW4sX3Q9MDtpZigwIT09ZnQubGFzdF9saXQpZG97d3Q9ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipfdF08PDh8ZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipfdCsxXSxYdD1mdC5wZW5kaW5nX2J1Zltm''@;'; put 'put ''dC5sX2J1ZitfdF0sX3QrKywwPT09d3Q/UGUoZnQsWHQsZm4pOihQZShmdCwoTnQ9ZmVbWHRdKSsyNTYrMSxmbiksMCE9PShtbj1DW050XSkmJmx0KGZ0LFh0LT14ZVtOdF0sbW4pLFBlKGZ0LE50PVllKC0td3QpLGhuKSwwIT09KG1uPVNbTnRdKSYmbHQoZnQsd3QtPUxlW050XSxtbikpfXdo''@;'; put 'put ''aWxlKF90PGZ0Lmxhc3RfbGl0KTtQZShmdCwyNTYsZm4pfWZ1bmN0aW9uIHV0KGZ0LGZuKXt2YXIgTnQsbW4sSXQsaG49Zm4uZHluX3RyZWUsd3Q9Zm4uc3RhdF9kZXNjLnN0YXRpY190cmVlLFh0PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsX3Q9Zm4uc3RhdF9kZXNjLmVsZW1zLHJ0PS0xO2Zv''@;'; put 'put ''cihmdC5oZWFwX2xlbj0wLGZ0LmhlYXBfbWF4PTU3MyxOdD0wO050PF90O050KyspMCE9PWhuWzIqTnRdPyhmdC5oZWFwWysrZnQuaGVhcF9sZW5dPXJ0PU50LGZ0LmRlcHRoW050XT0wKTpoblsyKk50KzFdPTA7Zm9yKDtmdC5oZWFwX2xlbjwyOyloblsyKihJdD1mdC5oZWFwWysrZnQuaGVh''@;'; put 'put ''cF9sZW5dPXJ0PDI/KytydDowKV09MSxmdC5kZXB0aFtJdF09MCxmdC5vcHRfbGVuLS0sWHQmJihmdC5zdGF0aWNfbGVuLT13dFsyKkl0KzFdKTtmb3IoZm4ubWF4X2NvZGU9cnQsTnQ9ZnQuaGVhcF9sZW4+PjE7TnQ+PTE7TnQtLSl6ZShmdCxobixOdCk7SXQ9X3Q7ZG97TnQ9ZnQuaGVhcFsx''@;'; put 'put ''XSxmdC5oZWFwWzFdPWZ0LmhlYXBbZnQuaGVhcF9sZW4tLV0semUoZnQsaG4sMSksbW49ZnQuaGVhcFsxXSxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPU50LGZ0LmhlYXBbLS1mdC5oZWFwX21heF09bW4saG5bMipJdF09aG5bMipOdF0raG5bMiptbl0sZnQuZGVwdGhbSXRdPShmdC5kZXB0aFtO''@;'; put 'put ''dF0+PWZ0LmRlcHRoW21uXT9mdC5kZXB0aFtOdF06ZnQuZGVwdGhbbW5dKSsxLGhuWzIqTnQrMV09aG5bMiptbisxXT1JdCxmdC5oZWFwWzFdPUl0KyssemUoZnQsaG4sMSl9d2hpbGUoZnQuaGVhcF9sZW4+PTIpO2Z0LmhlYXBbLS1mdC5oZWFwX21heF09ZnQuaGVhcFsxXSxmdW5jdGlvbiBU''@;'; put 'put ''ZShmdCxmbil7dmFyIEl0LEp0LER0LHB0LFl0LEluLGhuPWZuLmR5bl90cmVlLHd0PWZuLm1heF9jb2RlLFh0PWZuLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxfdD1mbi5zdGF0X2Rlc2MuaGFzX3N0cmVlLE50PWZuLnN0YXRfZGVzYy5leHRyYV9iaXRzLG1uPWZuLnN0YXRfZGVzYy5leHRyYV9i''@;'; put 'put ''YXNlLHJ0PWZuLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHp0PTA7Zm9yKHB0PTA7cHQ8PWNlO3B0KyspZnQuYmxfY291bnRbcHRdPTA7Zm9yKGhuWzIqZnQuaGVhcFtmdC5oZWFwX21heF0rMV09MCxJdD1mdC5oZWFwX21heCsxO0l0PDU3MztJdCsrKShwdD1oblsyKmhuWzIqKEp0PWZ0LmhlYXBb''@;'; put 'put ''SXRdKSsxXSsxXSsxKT5ydCYmKHB0PXJ0LHp0KyspLGhuWzIqSnQrMV09cHQsIShKdD53dCkmJihmdC5ibF9jb3VudFtwdF0rKyxZdD0wLEp0Pj1tbiYmKFl0PU50W0p0LW1uXSksZnQub3B0X2xlbis9KEluPWhuWzIqSnRdKSoocHQrWXQpLF90JiYoZnQuc3RhdGljX2xlbis9SW4qKFh0WzIq''@;'; put 'put ''SnQrMV0rWXQpKSk7aWYoMCE9PXp0KXtkb3tmb3IocHQ9cnQtMTswPT09ZnQuYmxfY291bnRbcHRdOylwdC0tO2Z0LmJsX2NvdW50W3B0XS0tLGZ0LmJsX2NvdW50W3B0KzFdKz0yLGZ0LmJsX2NvdW50W3J0XS0tLHp0LT0yfXdoaWxlKHp0PjApO2ZvcihwdD1ydDswIT09cHQ7cHQtLSlmb3Io''@;'; put 'put ''SnQ9ZnQuYmxfY291bnRbcHRdOzAhPT1KdDspISgoRHQ9ZnQuaGVhcFstLUl0XSk+d3QpJiYoaG5bMipEdCsxXSE9PXB0JiYoZnQub3B0X2xlbis9KHB0LWhuWzIqRHQrMV0pKmhuWzIqRHRdLGhuWzIqRHQrMV09cHQpLEp0LS0pfX0oZnQsZm4pLHFlKGhuLHJ0LGZ0LmJsX2NvdW50KX1mdW5j''@;'; put 'put ''dGlvbiBNdChmdCxmbixobil7dmFyIHd0LF90LFh0PS0xLE50PWZuWzFdLG1uPTAscnQ9NyxJdD00O2ZvcigwPT09TnQmJihydD0xMzgsSXQ9MyksZm5bMiooaG4rMSkrMV09NjU1MzUsd3Q9MDt3dDw9aG47d3QrKylfdD1OdCxOdD1mblsyKih3dCsxKSsxXSwhKCsrbW48cnQmJl90PT09TnQp''@;'; put 'put ''JiYobW48SXQ/ZnQuYmxfdHJlZVsyKl90XSs9bW46MCE9PV90PyhfdCE9PVh0JiZmdC5ibF90cmVlWzIqX3RdKyssZnQuYmxfdHJlZVszMl0rKyk6bW48PTEwP2Z0LmJsX3RyZWVbMzRdKys6ZnQuYmxfdHJlZVszNl0rKyxtbj0wLFh0PV90LDA9PT1OdD8ocnQ9MTM4LEl0PTMpOl90PT09TnQ/''@;'; put 'put ''KHJ0PTYsSXQ9Myk6KHJ0PTcsSXQ9NCkpfWZ1bmN0aW9uIEh0KGZ0LGZuLGhuKXt2YXIgd3QsX3QsWHQ9LTEsTnQ9Zm5bMV0sbW49MCxydD03LEl0PTQ7Zm9yKDA9PT1OdCYmKHJ0PTEzOCxJdD0zKSx3dD0wO3d0PD1objt3dCsrKWlmKF90PU50LE50PWZuWzIqKHd0KzEpKzFdLCEoKyttbjxy''@;'; put 'put ''dCYmX3Q9PT1OdCkpe2lmKG1uPEl0KWRve1BlKGZ0LF90LGZ0LmJsX3RyZWUpfXdoaWxlKDAhPS0tbW4pO2Vsc2UgMCE9PV90PyhfdCE9PVh0JiYoUGUoZnQsX3QsZnQuYmxfdHJlZSksbW4tLSksUGUoZnQsMTYsZnQuYmxfdHJlZSksbHQoZnQsbW4tMywyKSk6bW48PTEwPyhQZShmdCwxNyxm''@;'; put 'put ''dC5ibF90cmVlKSxsdChmdCxtbi0zLDMpKTooUGUoZnQsMTgsZnQuYmxfdHJlZSksbHQoZnQsbW4tMTEsNykpO21uPTAsWHQ9X3QsMD09PU50PyhydD0xMzgsSXQ9Myk6X3Q9PT1OdD8ocnQ9NixJdD0zKToocnQ9NyxJdD00KX19dmFyIFV0PSExO2Z1bmN0aW9uIFduKGZ0LGZuLGhuLHd0KXts''@;'; put 'put ''dChmdCwwKyh3dD8xOjApLDMpLGZ1bmN0aW9uIE1lKGZ0LGZuLGhuLHd0KXtodChmdCksd3QmJihKZShmdCxobiksSmUoZnQsfmhuKSksSy5hcnJheVNldChmdC5wZW5kaW5nX2J1ZixmdC53aW5kb3csZm4saG4sZnQucGVuZGluZyksZnQucGVuZGluZys9aG59KGZ0LGZuLGhuLCEwKX16Ll90''@;'; put 'put ''cl9pbml0PWZ1bmN0aW9uIGJuKGZ0KXtVdHx8KGZ1bmN0aW9uIFhlKCl7dmFyIGZ0LGZuLGhuLHd0LFh0LF90PW5ldyBBcnJheShjZSsxKTtmb3IoaG49MCx3dD0wO3d0PDI4O3d0KyspZm9yKHhlW3d0XT1obixmdD0wO2Z0PDE8PENbd3RdO2Z0KyspZmVbaG4rK109d3Q7Zm9yKGZlW2huLTFd''@;'; put 'put ''PXd0LFh0PTAsd3Q9MDt3dDwxNjt3dCsrKWZvcihMZVt3dF09WHQsZnQ9MDtmdDwxPDxTW3d0XTtmdCsrKWRlW1h0KytdPXd0O2ZvcihYdD4+PTc7d3Q8MzA7d3QrKylmb3IoTGVbd3RdPVh0PDw3LGZ0PTA7ZnQ8MTw8U1t3dF0tNztmdCsrKWRlWzI1NitYdCsrXT13dDtmb3IoZm49MDtmbjw9''@;'; put 'put ''Y2U7Zm4rKylfdFtmbl09MDtmb3IoZnQ9MDtmdDw9MTQzOylKWzIqZnQrMV09OCxmdCsrLF90WzhdKys7Zm9yKDtmdDw9MjU1OylKWzIqZnQrMV09OSxmdCsrLF90WzldKys7Zm9yKDtmdDw9Mjc5OylKWzIqZnQrMV09NyxmdCsrLF90WzddKys7Zm9yKDtmdDw9Mjg3OylKWzIqZnQrMV09OCxm''@;'; put 'put ''dCsrLF90WzhdKys7Zm9yKHFlKEosMjg3LF90KSxmdD0wO2Z0PDMwO2Z0KyspbmVbMipmdCsxXT01LG5lWzIqZnRdPWJlKGZ0LDUpO09lPW5ldyBGZShKLEMsMjU3LDI4NixjZSksamU9bmV3IEZlKG5lLFMsMCwzMCxjZSksV2U9bmV3IEZlKG5ldyBBcnJheSgwKSx2LDAsMTksNyl9KCksVXQ9''@;'; put 'put ''ITApLGZ0LmxfZGVzYz1uZXcgS2UoZnQuZHluX2x0cmVlLE9lKSxmdC5kX2Rlc2M9bmV3IEtlKGZ0LmR5bl9kdHJlZSxqZSksZnQuYmxfZGVzYz1uZXcgS2UoZnQuYmxfdHJlZSxXZSksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCxVZShmdCl9LHouX3RyX3N0b3JlZF9ibG9jaz1Xbix6Ll90''@;'; put 'put ''cl9mbHVzaF9ibG9jaz1mdW5jdGlvbiAkbihmdCxmbixobix3dCl7dmFyIFh0LF90LE50PTA7ZnQubGV2ZWw+MD8oMj09PWZ0LnN0cm0uZGF0YV90eXBlJiYoZnQuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24gQ24oZnQpe3ZhciBobixmbj00MDkzNjI0NDQ3O2Zvcihobj0wO2huPD0zMTtobisr''@;'; put 'put ''LGZuPj4+PTEpaWYoMSZmbiYmMCE9PWZ0LmR5bl9sdHJlZVsyKmhuXSlyZXR1cm4gMDtpZigwIT09ZnQuZHluX2x0cmVlWzE4XXx8MCE9PWZ0LmR5bl9sdHJlZVsyMF18fDAhPT1mdC5keW5fbHRyZWVbMjZdKXJldHVybiAxO2Zvcihobj0zMjtobjwyNTY7aG4rKylpZigwIT09ZnQuZHluX2x0''@;'; put 'put ''cmVlWzIqaG5dKXJldHVybiAxO3JldHVybiAwfShmdCkpLHV0KGZ0LGZ0LmxfZGVzYyksdXQoZnQsZnQuZF9kZXNjKSxOdD1mdW5jdGlvbiBQdChmdCl7dmFyIGZuO2ZvcihNdChmdCxmdC5keW5fbHRyZWUsZnQubF9kZXNjLm1heF9jb2RlKSxNdChmdCxmdC5keW5fZHRyZWUsZnQuZF9kZXNj''@;'; put 'put ''Lm1heF9jb2RlKSx1dChmdCxmdC5ibF9kZXNjKSxmbj0xODtmbj49MyYmMD09PWZ0LmJsX3RyZWVbMipwW2ZuXSsxXTtmbi0tKTtyZXR1cm4gZnQub3B0X2xlbis9MyooZm4rMSkrNSs1KzQsZm59KGZ0KSwoX3Q9ZnQuc3RhdGljX2xlbiszKzc+Pj4zKTw9KFh0PWZ0Lm9wdF9sZW4rMys3Pj4+''@;'; put 'put ''MykmJihYdD1fdCkpOlh0PV90PWhuKzUsaG4rNDw9WHQmJi0xIT09Zm4/V24oZnQsZm4saG4sd3QpOjQ9PT1mdC5zdHJhdGVneXx8X3Q9PT1YdD8obHQoZnQsMisod3Q/MTowKSwzKSxpdChmdCxKLG5lKSk6KGx0KGZ0LDQrKHd0PzE6MCksMyksZnVuY3Rpb24gb24oZnQsZm4saG4sd3Qpe3Zh''@;'; put 'put ''ciBYdDtmb3IobHQoZnQsZm4tMjU3LDUpLGx0KGZ0LGhuLTEsNSksbHQoZnQsd3QtNCw0KSxYdD0wO1h0PHd0O1h0KyspbHQoZnQsZnQuYmxfdHJlZVsyKnBbWHRdKzFdLDMpO0h0KGZ0LGZ0LmR5bl9sdHJlZSxmbi0xKSxIdChmdCxmdC5keW5fZHRyZWUsaG4tMSl9KGZ0LGZ0LmxfZGVzYy5t''@;'; put 'put ''YXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLE50KzEpLGl0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5keW5fZHRyZWUpKSxVZShmdCksd3QmJmh0KGZ0KX0sei5fdHJfdGFsbHk9ZnVuY3Rpb24gSG4oZnQsZm4saG4pe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3Rf''@;'; put 'put ''bGl0XT1mbj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09MjU1JmZuLGZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK2Z0Lmxhc3RfbGl0XT0yNTUmaG4sZnQubGFzdF9saXQrKywwPT09Zm4/ZnQuZHluX2x0cmVlWzIqaG5dKys6KGZ0Lm1hdGNoZXMrKyxm''@;'; put 'put ''bi0tLGZ0LmR5bl9sdHJlZVsyKihmZVtobl0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKlllKGZuKV0rKyksZnQubGFzdF9saXQ9PT1mdC5saXRfYnVmc2l6ZS0xfSx6Ll90cl9hbGlnbj1mdW5jdGlvbiBlbihmdCl7bHQoZnQsMiwzKSxQZShmdCwyNTYsSiksZnVuY3Rpb24gQWUoZnQpezE2''@;'; put 'put ''PT09ZnQuYmlfdmFsaWQ/KEplKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+PTgmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09OCl9KGZ0KX19LHsiLi4vdXRp''@;'; put 'put ''bHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihPLFIseil7InVzZSBzdHJpY3QiO1IuZXhwb3J0cz1mdW5jdGlvbiBLKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0''@;'; put 'put ''PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw4MzQxNzooYXQsSWUsRik9PnshZnVuY3Rpb24geChNKXtNLnZlcnNpb249IjEuMjAy''@;'; put 'put ''MTExMjIuMSI7dmFyIE89MTIwMCxSPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9Rig4MDc4OCk6dHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuY3B0YWJsZT1GKDgwNzg4KSkpO2Zvcih2YXIgej1bODc0LDkzMiw5MzYsOTQ5LDk1''@;'; put 'put ''MCwxZTRdLEs9MDtLPD04OysrSyl6LnB1c2goMTI1MCtLKTt2YXIgST17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1''@;'; put 'put ''NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGs9ZnVuY3Rpb24oeSl7LTEhPXouaW5kZXhPZih5KSYmKFI9SVswXT15KX0saj1mdW5jdGlvbih5KXtPPXksayh5KX07ZnVuY3Rpb24gVigpe2ooMTIwMCksZnVuY3Rpb24gRSgpe2soMTI1Mil9KCl9ZnVuY3Rp''@;'; put 'put ''b24gQih5KXtmb3IodmFyIFA9W10sTD0wLFE9eS5sZW5ndGg7TDxROysrTClQW0xdPXkuY2hhckNvZGVBdChMKTtyZXR1cm4gUH12YXIgVT1mdW5jdGlvbih5KXt2YXIgUD15LmNoYXJDb2RlQXQoMCksTD15LmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09UCYmMjU0PT1MP2Z1bmN0aW9uIFko''@;'; put 'put ''eSl7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoPj4xOysrTClQW0xdPVN0cmluZy5mcm9tQ2hhckNvZGUoeS5jaGFyQ29kZUF0KDIqTCkrKHkuY2hhckNvZGVBdCgyKkwrMSk8PDgpKTtyZXR1cm4gUC5qb2luKCIiKX0oeS5zbGljZSgyKSk6MjU0PT1QJiYyNTU9PUw/ZnVuY3Rpb24gWCh5''@;'; put 'put ''KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg+PjE7KytMKVBbTF09U3RyaW5nLmZyb21DaGFyQ29kZSh5LmNoYXJDb2RlQXQoMipMKzEpKyh5LmNoYXJDb2RlQXQoMipMKTw8OCkpO3JldHVybiBQLmpvaW4oIiIpfSh5LnNsaWNlKDIpKTo2NTI3OT09UD95LnNsaWNlKDEpOnl9LHE9ZnVu''@;'; put 'put ''Y3Rpb24oUCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUCl9LGVlPWZ1bmN0aW9uKFApe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFApfTt0eXBlb2YgY3B0YWJsZTwidSImJihqPWZ1bmN0aW9uKHkpe089eSxrKHkpfSxVPWZ1bmN0aW9uKHkpe3JldHVybiAyNTU9PT15LmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJjI1ND09PXkuY2hhckNvZGVBdCgxKT9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLEIoeS5zbGljZSgyKSkpOnl9LHE9ZnVuY3Rpb24oUCl7cmV0dXJuIDEyMDA9PT1PP1N0cmluZy5mcm9tQ2hhckNvZGUoUCk6Y3B0YWJsZS51dGlscy5kZWNvZGUoTyxbMjU1JlAsUD4+OF0p''@;'; put 'put ''WzBdfSxlZT1mdW5jdGlvbihQKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoUixbUF0pWzBdfSk7dmFyIFAsdGU9bnVsbCxzZT0oUD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iLHtlbmNvZGU6ZnVuY3Rpb24o''@;'; put 'put ''TCl7Zm9yKHZhciBRPSIiLHJlPTAscGU9MCxfZT0wLHZlPTAsU2U9MCxIZT0wLEJlPTAsR2U9MDtHZTxMLmxlbmd0aDspdmU9KHJlPUwuY2hhckNvZGVBdChHZSsrKSk+PjIsU2U9KDMmcmUpPDw0fChwZT1MLmNoYXJDb2RlQXQoR2UrKykpPj40LEhlPSgxNSZwZSk8PDJ8KF9lPUwuY2hhckNv''@;'; put 'put ''ZGVBdChHZSsrKSk+PjYsQmU9NjMmX2UsaXNOYU4ocGUpP0hlPUJlPTY0OmlzTmFOKF9lKSYmKEJlPTY0KSxRKz1QLmNoYXJBdCh2ZSkrUC5jaGFyQXQoU2UpK1AuY2hhckF0KEhlKStQLmNoYXJBdChCZSk7cmV0dXJuIFF9LGRlY29kZTpmdW5jdGlvbihRKXt2YXIgcmU9IiIsU2U9MCxIZT0w''@;'; put 'put ''LEJlPTAsR2U9MDtRPVEucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBudD0wO250PFEubGVuZ3RoOylTZT1QLmluZGV4T2YoUS5jaGFyQXQobnQrKykpLEhlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkscmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoU2U8PDJ8SGU+PjQpLDY0''@;'; put 'put ''IT09KEJlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkpJiYocmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JkhlKTw8NHxCZT4+MikpLDY0IT09KEdlPVAuaW5kZXhPZihRLmNoYXJBdChudCsrKSkpJiYocmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmQmUpPDw2fEdlKSk7cmV0dXJuIHJl''@;'; put 'put ''fX0pLGhlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNpb25zLm5vZGUsdWU9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgY2U9IUJ1ZmZlci5mcm9tO2lmKCFjZSl0''@;'; put 'put ''cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtjZT0hMH11ZT1jZT9mdW5jdGlvbih5LFApe3JldHVybiBQP25ldyBCdWZmZXIoeSxQKTpuZXcgQnVmZmVyKHkpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKHkp''@;'; put 'put ''e3JldHVybiBuZXcgQnVmZmVyKHkpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgQnVmZmVyKHkpfSl9ZnVuY3Rpb24gRyh5KXtyZXR1cm4gaGU/QnVmZmVyLmFsbG9jKHkpOm5ldyBBcnJheSh5KX1mdW5jdGlvbiBiKHkp''@;'; put 'put ''e3JldHVybiBoZT9CdWZmZXIuYWxsb2NVbnNhZmUoeSk6bmV3IEFycmF5KHkpfXZhciBEPWZ1bmN0aW9uKFApe3JldHVybiBoZT91ZShQLCJiaW5hcnkiKTpQLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIDI1NSZMLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24gSCh5KXtpZih0''@;'; put 'put ''eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiBEKHkpO2Zvcih2YXIgUD1uZXcgQXJyYXlCdWZmZXIoeS5sZW5ndGgpLEw9bmV3IFVpbnQ4QXJyYXkoUCksUT0wO1EhPXkubGVuZ3RoOysrUSlMW1FdPTI1NSZ5LmNoYXJDb2RlQXQoUSk7cmV0dXJuIFB9ZnVuY3Rpb24gTih5KXtpZihBcnJh''@;'; put 'put ''eS5pc0FycmF5KHkpKXJldHVybiB5Lm1hcChmdW5jdGlvbihRKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShRKX0pLmpvaW4oIiIpO2Zvcih2YXIgUD1bXSxMPTA7TDx5Lmxlbmd0aDsrK0wpUFtMXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHlbTF0pO3JldHVybiBQLmpvaW4oIiIpfWZ1bmN0''@;'; put 'put ''aW9uIEMoeSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoeSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBDKG5ldyBVaW50OEFycmF5KHkpKTtmb3IodmFyIFA9bmV3IEFycmF5KHkubGVuZ3RoKSxMPTA7TDx5Lmxlbmd0''@;'; put 'put ''aDsrK0wpUFtMXT15W0xdO3JldHVybiBQfXZhciBTPWZ1bmN0aW9uKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oTCl7QXJyYXkuaXNBcnJheShMKT9QPVAuY29uY2F0KEwpOih0eXBlb2YgVWludDhBcnJheTwidSImJkwgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBl''@;'; put 'put ''b2YgQXJyYXlCdWZmZXI8InUiJiZMIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoUD1QLmNvbmNhdChDKEwpKSl9KSxQfSx2PS9cdTAwMDAvZyxwPS9bXHUwMDAxLVx1MDAwNl0vZyx3PXt9LEo9ZnVuY3Rpb24oUCl7ZnVuY3Rpb24gTChLdCl7Zm9yKHZhciBnbj0iIixMbj1LdC5sZW5ndGgt''@;'; put 'put ''MTtMbj49MDspZ24rPUt0LmNoYXJBdChMbi0tKTtyZXR1cm4gZ259ZnVuY3Rpb24gUShLdCxnbil7Zm9yKHZhciBMbj0iIjtMbi5sZW5ndGg8Z247KUxuKz1LdDtyZXR1cm4gTG59ZnVuY3Rpb24gcmUoS3QsZ24pe3ZhciBMbj0iIitLdDtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpRKCIwIixn''@;'; put 'put ''bi1Mbi5sZW5ndGgpK0xufWZ1bmN0aW9uIHBlKEt0LGduKXt2YXIgTG49IiIrS3Q7cmV0dXJuIExuLmxlbmd0aD49Z24/TG46USgiICIsZ24tTG4ubGVuZ3RoKStMbn1mdW5jdGlvbiBfZShLdCxnbil7dmFyIExuPSIiK0t0O3JldHVybiBMbi5sZW5ndGg+PWduP0xuOkxuK1EoIiAiLGduLUxu''@;'; put 'put ''Lmxlbmd0aCl9UC52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBIZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBCZShLdCxnbil7cmV0dXJuIEt0PkhlfHxLdDwtSGU/ZnVuY3Rpb24gdmUoS3QsZ24pe3ZhciBMbj0iIitNYXRoLnJvdW5kKEt0KTtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpR''@;'; put 'put ''KCIwIixnbi1Mbi5sZW5ndGgpK0xufShLdCxnbik6ZnVuY3Rpb24gU2UoS3QsZ24pe3ZhciBMbj0iIitLdDtyZXR1cm4gTG4ubGVuZ3RoPj1nbj9MbjpRKCIwIixnbi1Mbi5sZW5ndGgpK0xufShNYXRoLnJvdW5kKEt0KSxnbil9ZnVuY3Rpb24gR2UoS3QsZ24pe3JldHVybiBLdC5sZW5ndGg+''@;'; put 'put ''PTcrKGduPWdufHwwKSYmMTAzPT0oMzJ8S3QuY2hhckNvZGVBdChnbikpJiYxMDE9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzEpKSYmMTEwPT0oMzJ8S3QuY2hhckNvZGVBdChnbisyKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQoZ24rMykpJiYxMTQ9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzQp''@;'; put 'put ''KSYmOTc9PSgzMnxLdC5jaGFyQ29kZUF0KGduKzUpKSYmMTA4PT0oMzJ8S3QuY2hhckNvZGVBdChnbis2KSl9ZnVuY3Rpb24gbnQoS3Qpe2Zvcih2YXIgZ249W10sTG49T2JqZWN0LmtleXMoS3QpLFdyPTA7V3IhPT1Mbi5sZW5ndGg7KytXcilnbltLdFtMbltXcl1dXT1MbltXcl07cmV0dXJu''@;'; put 'put ''IGdufXZhciBkdD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxDdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJd''@;'; put 'put ''LFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0s''@;'; put 'put ''WyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gY3QoS3Qpe0t0WzBdPSJHZW5lcmFsIixLdFsxXT0iMCIsS3RbMl09IjAuMDAiLEt0WzNdPSIjLCMjMCIsS3RbNF09IiMsIyMwLjAwIixLdFs5XT0iMCUi''@;'; put 'put ''LEt0WzEwXT0iMC4wMCUiLEt0WzExXT0iMC4wMEUrMDAiLEt0WzEyXT0iIyA/Lz8iLEt0WzEzXT0iIyA/Py8/PyIsS3RbMTRdPSJtL2QveXkiLEt0WzE1XT0iZC1tbW0teXkiLEt0WzE2XT0iZC1tbW0iLEt0WzE3XT0ibW1tLXl5IixLdFsxOF09Img6bW0gQU0vUE0iLEt0WzE5XT0iaDptbTpz''@;'; put 'put ''cyBBTS9QTSIsS3RbMjBdPSJoOm1tIixLdFsyMV09Img6bW06c3MiLEt0WzIyXT0ibS9kL3l5IGg6bW0iLEt0WzM3XT0iIywjIzAgOygjLCMjMCkiLEt0WzM4XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsS3RbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixLdFs0MF09IiMsIyMwLjAwO1tSZWRd''@;'; put 'put ''KCMsIyMwLjAwKSIsS3RbNDVdPSJtbTpzcyIsS3RbNDZdPSJbaF06bW06c3MiLEt0WzQ3XT0ibW1zcy4wIixLdFs0OF09IiMjMC4wRSswIixLdFs0OV09IkAiLEt0WzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLFNuKEt0''@;'; put 'put ''KX12YXIgYnQ9e307Y3QoYnQpO3ZhciBGdD1bXSxFdD0wO2ZvcihFdD01O0V0PD04OysrRXQpRnRbRXRdPTMyK0V0O2ZvcihFdD0yMztFdDw9MjY7KytFdClGdFtFdF09MDtmb3IoRXQ9Mjc7RXQ8PTMxOysrRXQpRnRbRXRdPTE0O2ZvcihFdD01MDtFdDw9NTg7KytFdClGdFtFdF09MTQ7Zm9y''@;'; put 'put ''KEV0PTU5O0V0PD02MjsrK0V0KUZ0W0V0XT1FdC01ODtmb3IoRXQ9Njc7RXQ8PTY4OysrRXQpRnRbRXRdPUV0LTU4O2ZvcihFdD03MjtFdDw9NzU7KytFdClGdFtFdF09RXQtNTg7Zm9yKEV0PTY3O0V0PD02ODsrK0V0KUZ0W0V0XT1FdC01Nztmb3IoRXQ9NzY7RXQ8PTc4OysrRXQpRnRbRXRd''@;'; put 'put ''PUV0LTU2O2ZvcihFdD03OTtFdDw9ODE7KytFdClGdFtFdF09RXQtMzQ7dmFyIFR0PVtdO2Z1bmN0aW9uIFp0KEt0LGduLExuKXtmb3IodmFyIFdyPUt0PDA/LTE6MSxYbj1LdCpXcixlaT0wLGlyPTEscmk9MCxtbz0xLGlpPTAsemk9MCxKcj1NYXRoLmZsb29yKFhuKTtpaTxnbiYmKHJpPShK''@;'; put 'put ''cj1NYXRoLmZsb29yKFhuKSkqaXIrZWksemk9SnIqaWkrbW8sIShYbi1Kcjw1ZS04KSk7KVhuPTEvKFhuLUpyKSxlaT1pcixpcj1yaSxtbz1paSxpaT16aTtpZih6aT5nbiYmKGlpPmduPyh6aT1tbyxyaT1laSk6KHppPWlpLHJpPWlyKSksIUxuKXJldHVyblswLFdyKnJpLHppXTt2YXIgd3M9''@;'; put 'put ''TWF0aC5mbG9vcihXcipyaS96aSk7cmV0dXJuW3dzLFdyKnJpLXdzKnppLHppXX1mdW5jdGlvbiBwbihLdCxnbixMbil7aWYoS3Q+Mjk1ODQ2NXx8S3Q8MClyZXR1cm4gbnVsbDt2YXIgV3I9MHxLdCxYbj1NYXRoLmZsb29yKDg2NDAwKihLdC1XcikpLGVpPTAsaXI9W10scmk9e0Q6V3IsVDpY''@;'; put 'put ''bix1Ojg2NDAwKihLdC1XciktWG4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhyaS51KTwxZS02JiYocmkudT0wKSxnbiYmZ24uZGF0ZTE5MDQmJihXcis9MTQ2MikscmkudT4uOTk5OSYmKHJpLnU9MCw4NjQwMD09KytYbiYmKHJpLlQ9WG49MCwrK1dyLCsrcmku''@;'; put 'put ''RCkpLDYwPT09V3IpaXI9TG4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGVpPTM7ZWxzZSBpZigwPT09V3IpaXI9TG4/WzEzMTcsOCwyOV06WzE5MDAsMSwwXSxlaT02O2Vsc2V7V3I+NjAmJi0tV3I7dmFyIG1vPW5ldyBEYXRlKDE5MDAsMCwxKTttby5zZXREYXRlKG1vLmdldERhdGUoKStX''@;'; put 'put ''ci0xKSxpcj1bbW8uZ2V0RnVsbFllYXIoKSxtby5nZXRNb250aCgpKzEsbW8uZ2V0RGF0ZSgpXSxlaT1tby5nZXREYXkoKSxXcjw2MCYmKGVpPShlaSs2KSU3KSxMbiYmKGVpPWZ1bmN0aW9uIF9vKEt0LGduKXtnblswXS09NTgxO3ZhciBMbj1LdC5nZXREYXkoKTtyZXR1cm4gS3Q8NjAmJihM''@;'; put 'put ''bj0oTG4rNiklNyksTG59KG1vLGlyKSl9cmV0dXJuIHJpLnk9aXJbMF0scmkubT1pclsxXSxyaS5kPWlyWzJdLHJpLlM9WG4lNjAsWG49TWF0aC5mbG9vcihYbi82MCkscmkuTT1YbiU2MCxYbj1NYXRoLmZsb29yKFhuLzYwKSxyaS5IPVhuLHJpLnE9ZWkscml9VHRbNV09VHRbNjNdPSciJCIj''@;'; put 'put ''LCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxUdFs2XT1UdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsVHRbN109VHRbNjVdPSciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxUdFs4XT1UdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxc''@;'; put 'put ''KScsVHRbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxUdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgjLCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLFR0WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAi''@;'; put 'put ''LSI/P18pO18oQF8pJyxUdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsUC5wYXJzZV9kYXRlX2NvZGU9cG47dmFyIEtuPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLHVuPUtuLmdldFRpbWUoKSxxbj1uZXcgRGF0''@;'; put 'put ''ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gem4oS3QsZ24pe3ZhciBMbj1LdC5nZXRUaW1lKCk7cmV0dXJuIGduP0xuLT0xMjYyMzA0ZTU6S3Q+PXFuJiYoTG4rPTg2NGU1KSwoTG4tKHVuKzZlNCooS3QuZ2V0VGltZXpvbmVPZmZzZXQoKS1Lbi5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2''@;'; put 'put ''NGU1fXZhciBrbj0iIixlcj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LHRy''@;'; put 'put ''PWVyW2tuLnRvTG93ZXJDYXNlKCldfHxlclsiZW4tdXMiXSxabj1udCh0ciksVnI9IiQiLG9pPSIiLFFyPSIsIix1cj0iLiIsQW49Ii8iO2Z1bmN0aW9uIFNuKEt0KXtzd2l0Y2goKGtufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6S3RbMjddPSJbJC00MDRdZS9tL2QiLEt0WzI4''@;'; put 'put ''XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLyJkIi8ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2hoIlx1NjY0MiJtbSJc''@;'; put 'put ''dTUyMDYiJyxLdFszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5''@;'; put 'put ''ZDIiJyxLdFszNl09IlskLTQwNF1lL20vZCIsS3RbNTBdPSJbJC00MDRdZS9tL2QiLEt0WzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1M109J1x1NGUwYVx1''@;'; put 'put ''NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsS3RbNTZdPSdcdTRlMGFc''@;'; put 'put ''dTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbNTddPSJbJC00MDRdZS9tL2QiLEt0WzU4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6S3RbMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCIn''@;'; put 'put ''LEt0WzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzBdPSdtIi0iZCItInl5JyxLdFszMV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFszM109J2giXHU2NWY2Im1t''@;'; put 'put ''Ilx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsS3RbMzVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNl09J3l5eXkiXHU1ZTc0Im0iXHU2''@;'; put 'put ''NzA4IicsS3RbNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NV09J1x1NGUw''@;'; put 'put ''YVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsS3RbNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNThdPSdtIlx1NjcwOCJkIlx1NjVlNSIn''@;'; put 'put ''O2JyZWFrO2Nhc2UiamEtanAiOkt0WzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLyJkIi8ieXknLEt0WzMx''@;'; put 'put ''XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLEt0WzMzXT0naCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsS3Rb''@;'; put 'put ''MzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU0XT0n''@;'; put 'put ''WyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzU2XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1N109J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1''@;'; put 'put ''NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOkt0WzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbMjhdPSJtbS1kZCIsS3RbMjldPSJtbS1kZCIsS3RbMzBdPSJtbS1kZC15eSIsS3RbMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxLdFsz''@;'; put 'put ''Ml09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxLdFszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLEt0WzM0XT0ieXl5eS1tbS1kZCIsS3RbMzVdPSJ5eXl5LW1tLWRkIixLdFszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLEt0WzUwXT0neXl5eSJc''@;'; put 'put ''dTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTFdPSJtbS1kZCIsS3RbNTJdPSJ5eXl5LW1tLWRkIixLdFs1M109Inl5eXktbW0tZGQiLEt0WzU0XT0ibW0tZGQiLEt0WzU1XT0ieXl5eS1tbS1kZCIsS3RbNTZdPSJ5eXl5LW1tLWRkIixLdFs1N109J3l5eXkiXHU1ZTc0IiBtbSJc''@;'; put 'put ''dTY3MDgiIGRkIlx1NjVlNSInLEt0WzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOkt0WzU5XT0nInQiMCcsS3RbNjBdPScidCIwLjAwJyxLdFs2MV09JyJ0IiMsIyMwJyxLdFs2Ml09JyJ0IiMsIyMwLjAwJyxLdFs2N109InQwJSIsS3RbNjhdPSJ0MC4wMCUiLEt0WzY5XT0idCMgPy8/''@;'; put 'put ''IixLdFs3MF09InQjID8/Lz8/IixLdFs3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsS3RbNzJdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLEt0WzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0JyxLdFs3''@;'; put 'put ''NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLEt0Wzc2XT0nXHUwZTBhIjoiXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUx''@;'; put 'put ''YiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLEt0Wzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3JyxLdFs4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxLdFs4MV09ImQvbS9iYiJ9fVAu''@;'; put 'put ''X2dlbmVyYWxfaW50PWZ1bmN0aW9uIENpKEt0KXtyZXR1cm4gS3QudG9TdHJpbmcoMTApfTt2YXIganI9ZnVuY3Rpb24oKXt2YXIgZ249Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gTG4oaWkpe3JldHVybi0xPT1paS5pbmRleE9mKCIuIik/aWk6aWkucmVwbGFjZShnbiwi''@;'; put 'put ''JDEiKX12YXIgV3I9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sWG49LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKHppKXt2YXIgSnI9ZnVuY3Rpb24gbW8oaWkpe3ZhciBKcix6aT1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGlpKSkqTWF0aC5MT0cxMEUpO3JldHVy''@;'; put 'put ''biBKcj16aT49LTQmJnppPD0tMT9paS50b1ByZWNpc2lvbigxMCt6aSk6TWF0aC5hYnMoemkpPD05P2Z1bmN0aW9uIGlyKGlpKXt2YXIgemk9aWk8MD8xMjoxMSxKcj1MbihpaS50b0ZpeGVkKDEyKSk7cmV0dXJuIEpyLmxlbmd0aDw9eml8fChKcj1paS50b1ByZWNpc2lvbigxMCkpLmxlbmd0''@;'; put 'put ''aDw9emk/SnI6aWkudG9FeHBvbmVudGlhbCg1KX0oaWkpOjEwPT09emk/aWkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIHJpKGlpKXt2YXIgemk9TG4oaWkudG9GaXhlZCgxMSkpO3JldHVybiB6aS5sZW5ndGg+KGlpPDA/MTI6MTEpfHwiMCI9PT16aXx8Ii0wIj09PXppP2lp''@;'; put 'put ''LnRvUHJlY2lzaW9uKDYpOnppfShpaSksTG4oZnVuY3Rpb24gZWkoaWkpe3JldHVybi0xPT1paS5pbmRleE9mKCJFIik/aWk6aWkucmVwbGFjZShXciwiJDFFIikucmVwbGFjZShYbiwiJDEwJDIiKX0oSnIudG9VcHBlckNhc2UoKSkpfSh6aSk7cmV0dXJuIiwiPT09UXImJiIuIj09PXVyP0py''@;'; put 'put ''OkpyLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbih3cyl7cmV0dXJuIiwiPT13cz9Rcjp1cn0pfX0oKTtmdW5jdGlvbiBqaShLdCxnbil7c3dpdGNoKHR5cGVvZiBLdCl7Y2FzZSJzdHJpbmciOnJldHVybiBLdDtjYXNlImJvb2xlYW4iOnJldHVybiBLdD8iVFJVRSI6IkZBTFNFIjtjYXNlIm51''@;'; put 'put ''bWJlciI6cmV0dXJuKDB8S3QpPT09S3Q/S3QudG9TdHJpbmcoMTApOmpyKEt0KTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51bGw9PUt0KXJldHVybiIiO2lmKEt0IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbnUoMTQsem4oS3QsZ24mJmduLmRhdGUxOTA0KSxn''@;'; put 'put ''bil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitLdCl9UC5fZ2VuZXJhbF9udW09anIsUC5fZ2VuZXJhbD1qaTt2YXIgRGk9Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIu''@;'; put 'put ''c3BsaXQoIiIpO2Z1bmN0aW9uIFlvKEt0LGduLExuLFdyKXt2YXIgbW8sWG49IiIsZWk9MCxpcj0wLHJpPUxuLnksaWk9MDtzd2l0Y2goS3Qpe2Nhc2UgOTg6cmk9TG4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1yaSUxMDAsaWk9MjticmVhaztk''@;'; put 'put ''ZWZhdWx0Om1vPXJpJTFlNCxpaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89TG4ubSxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBDdFtMbi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gQ3RbTG4ubS0xXVswXTtkZWZhdWx0OnJldHVy''@;'; put 'put ''biBDdFtMbi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89TG4uZCxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBkdFtMbi5xXVswXTtkZWZhdWx0OnJldHVybiBkdFtMbi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2go''@;'; put 'put ''Z24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPTErKExuLkgrMTEpJTEyLGlpPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitnbn1icmVhaztjYXNlIDcyOnN3aXRjaChnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89TG4uSCxpaT1nbi5sZW5ndGg7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrZ259YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goZ24ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOm1vPUxuLk0saWk9Z24ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrZ259YnJlYWs7Y2FzZSAx''@;'; put 'put ''MTU6aWYoInMiIT1nbiYmInNzIiE9Z24mJiIuMCIhPWduJiYiLjAwIiE9Z24mJiIuMDAwIiE9Z24pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIrZ247cmV0dXJuIDAhPT1Mbi51fHwicyIhPWduJiYic3MiIT1nbj8oaXI9V3I+PTI/Mz09PVdyPzFlMzoxMDA6MT09PVdyPzEwOjEsKGVpPU1h''@;'; put 'put ''dGgucm91bmQoaXIqKExuLlMrTG4udSkpKT49NjAqaXImJihlaT0wKSwicyI9PT1nbj8wPT09ZWk/IjAiOiIiK2VpL2lyOihYbj1yZShlaSwyK1dyKSwic3MiPT09Z24/WG4uc3Vic3RyKDAsMik6Ii4iK1huLnN1YnN0cigyLGduLmxlbmd0aC0xKSkpOnJlKExuLlMsZ24ubGVuZ3RoKTtjYXNl''@;'; put 'put ''IDkwOnN3aXRjaChnbil7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Y2FzZSJbXHUwZTBhXSI6Y2FzZSJbXHUwZTBhXHUwZTBhXSI6bW89MjQqTG4uRCtMbi5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmNhc2UiW1x1MGUxOV0iOmNhc2UiW1x1MGUxOVx1MGUxOV0iOm1vPTYwKigyNCpMbi5E''@;'; put 'put ''K0xuLkgpK0xuLk07YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6Y2FzZSJbXHUwZTE3XSI6Y2FzZSJbXHUwZTE3XHUwZTE3XSI6bW89NjAqKDYwKigyNCpMbi5EK0xuLkgpK0xuLk0pK01hdGgucm91bmQoTG4uUytMbi51KTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1h''@;'; put 'put ''dDogIitnbn1paT0zPT09Z24ubGVuZ3RoPzE6MjticmVhaztjYXNlIDEwMTptbz1yaSxpaT0xO2JyZWFrO2Nhc2UgMzYyMzptbz1Mbi5kLGlpPWduLmxlbmd0aDticmVhaztjYXNlIDM2MDQ6c3dpdGNoKGduLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjptbz1Mbi5tLGlpPWduLmxlbmd0aDticmVh''@;'; put 'put ''aztjYXNlIDM6cmV0dXJuIEN0W0xuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBDdFtMbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEN0W0xuLm0tMV1bMl19YnJlYWs7Y2FzZSAzNjExOnN3aXRjaChyaT1Mbi55KzU0Myxnbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6bW89cmklMTAwLGlpPTI7YnJl''@;'; put 'put ''YWs7ZGVmYXVsdDptbz1yaSUxZTQsaWk9NH1icmVhaztjYXNlIDM1OTQ6bW89TG4uSCxpaT1nbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA5Om1vPUxuLk0saWk9Z24ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNzptbz1Mbi5TLGlpPWduLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93IEt0LnRvU3Ry''@;'; put 'put ''aW5nKDE2KX12YXIgemk9aWk+MD9yZShtbyxpaSk6IiI7cmV0dXJuKDkwPT1LdD9nbi5jaGFyQ29kZUF0KDEpPDM1ODQ6S3Q8MzU4NCk/emk6emkucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihKcil7cmV0dXJuIERpWytKcl19KX1mdW5jdGlvbiBsbyhLdCl7aWYoS3QubGVuZ3RoPD0zKXJl''@;'; put 'put ''dHVybiBLdDtmb3IodmFyIExuPUt0Lmxlbmd0aCUzLFdyPUt0LnN1YnN0cigwLExuKTtMbiE9S3QubGVuZ3RoO0xuKz0zKVdyKz0oV3IubGVuZ3RoPjA/IiwiOiIiKStLdC5zdWJzdHIoTG4sMyk7cmV0dXJuIFdyfXZhciBBbz1mdW5jdGlvbigpe3ZhciBnbj0vJS9nO2Z1bmN0aW9uIFhuKGFu''@;'; put 'put ''LFZ0KXt2YXIgV3QsZG49YW4uaW5kZXhPZigiRSIpLWFuLmluZGV4T2YoIi4iKS0xO2lmKGFuLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1WdClyZXR1cm4iMC4wRSswIjtpZihWdDwwKXJldHVybiItIitYbihhbiwtVnQpO3ZhciBUbj1hbi5pbmRleE9mKCIuIik7LTE9PT1UbiYmKFRu''@;'; put 'put ''PWFuLmluZGV4T2YoIkUiKSk7dmFyIG5yPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGguTE9HMTBFKSVUbjtpZihucjwwJiYobnIrPVRuKSwtMT09PShXdD0oVnQvTWF0aC5wb3coMTAsbnIpKS50b1ByZWNpc2lvbihkbisxKyhUbituciklVG4pKS5pbmRleE9mKCJlIikpe3ZhciBicj1N''@;'; put 'put ''YXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09V3QuaW5kZXhPZigiLiIpP1d0PVd0LmNoYXJBdCgwKSsiLiIrV3Quc3Vic3RyKDEpKyJFKyIrKGJyLVd0Lmxlbmd0aCtucik6V3QrPSJFKyIrKGJyLW5yKTsiMC4iPT09V3Quc3Vic3RyKDAsMik7KVd0PShXdD1X''@;'; put 'put ''dC5jaGFyQXQoMCkrV3Quc3Vic3RyKDIsVG4pKyIuIitXdC5zdWJzdHIoMitUbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywiMC4iKTtXdD1XdC5yZXBsYWNlKC9cKy0vLCItIil9V3Q9V3QucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxm''@;'; put 'put ''dW5jdGlvbih6cixMcix4aSxjaSl7cmV0dXJuIExyK3hpK2NpLnN1YnN0cigwLChUbituciklVG4pKyIuIitjaS5zdWJzdHIobnIpKyJFIn0pfWVsc2UgV3Q9VnQudG9FeHBvbmVudGlhbChkbik7cmV0dXJuIGFuLm1hdGNoKC9FXCswMCQvKSYmV3QubWF0Y2goL2VbKy1dXGQkLykmJihXdD1X''@;'; put 'put ''dC5zdWJzdHIoMCxXdC5sZW5ndGgtMSkrIjAiK1d0LmNoYXJBdChXdC5sZW5ndGgtMSkpLGFuLm1hdGNoKC9FXC0vKSYmV3QubWF0Y2goL2VcKy8pJiYoV3Q9V3QucmVwbGFjZSgvZVwrLywiZSIpKSxXdC5yZXBsYWNlKCJlIiwiRSIpfXZhciBlaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8s''@;'; put 'put ''bW89L14jKjAqXC4oWzAjXSspLyxpaT0vXCkuKlswI10vLHppPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiBKcihhbil7Zm9yKHZhciBXdCxWdD0iIixkbj0wO2RuIT1hbi5sZW5ndGg7Kytkbilzd2l0Y2goV3Q9YW4uY2hhckNvZGVBdChkbikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2''@;'; put 'put ''MzpWdCs9IiAiO2JyZWFrO2Nhc2UgNDg6VnQrPSIwIjticmVhaztkZWZhdWx0OlZ0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFd0KX1yZXR1cm4gVnR9ZnVuY3Rpb24gd3MoYW4sVnQpe3ZhciBXdD1NYXRoLnBvdygxMCxWdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChhbipXdCkvV3R9ZnVuY3Rpb24g''@;'; put 'put ''dnMoYW4sVnQpe2lmKFZ0PjExKXJldHVybiB2cyhhbiwxMSkqTWF0aC5wb3coMTAsVnQtMTEpO3ZhciBXdD1hbi1NYXRoLmZsb29yKGFuKSxkbj1NYXRoLnBvdygxMCxWdCk7cmV0dXJuIFZ0PCgiIitNYXRoLnJvdW5kKFd0KmRuKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChXdCpkbil9ZnVuY3Rp''@;'; put 'put ''b24gaGEoYW4sVnQsV3Qpe2lmKDQwPT09YW4uY2hhckNvZGVBdCgwKSYmIVZ0Lm1hdGNoKGlpKSl7dmFyIGRuPVZ0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBXdD49MD9oYSgibiIsZG4sV3QpOiIoIitoYSgibiIsZG4sLVd0''@;'; put 'put ''KSsiKSJ9aWYoNDQ9PT1WdC5jaGFyQ29kZUF0KFZ0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gV3IoYW4sVnQsV3Qpe2Zvcih2YXIgZG49VnQubGVuZ3RoLTE7NDQ9PT1WdC5jaGFyQ29kZUF0KGRuLTEpOyktLWRuO3JldHVybiBBbyhhbixWdC5zdWJzdHIoMCxkbiksV3QvTWF0aC5wb3co''@;'; put 'put ''MTAsMyooVnQubGVuZ3RoLWRuKSkpfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIExuKGFuLFZ0LFd0KXt2YXIgZG49VnQucmVwbGFjZShnbiwiIiksVG49VnQubGVuZ3RoLWRuLmxlbmd0aDtyZXR1cm4gQW8oYW4sZG4sV3QqTWF0aC5wb3coMTAs''@;'; put 'put ''MipUbikpK1EoIiUiLFRuKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiRSIpKXJldHVybiBYbihWdCxXdCk7aWYoMzY9PT1WdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitoYShhbixWdC5zdWJzdHIoIiAiPT1WdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIFRuLG5yLGJyLHpyLExy''@;'; put 'put ''PU1hdGguYWJzKFd0KSx4aT1XdDwwPyItIjoiIjtpZihWdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4geGkrQmUoTHIsVnQubGVuZ3RoKTtpZihWdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiIwIj09PShUbj1CZShXdCwwKSkmJihUbj0iIiksVG4ubGVuZ3RoPlZ0Lmxlbmd0aD9UbjpKcihWdC5z''@;'; put 'put ''dWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goZWkpKXJldHVybiBmdW5jdGlvbiBpcihhbixWdCxXdCl7dmFyIGRuPXBhcnNlSW50KGFuWzRdLDEwKSxUbj1NYXRoLnJvdW5kKFZ0KmRuKSxucj1NYXRoLmZsb29yKFRuL2RuKSxicj1Ubi1ucipkbix6cj1k''@;'; put 'put ''bjtyZXR1cm4gV3QrKDA9PT1ucj8iIjoiIitucikrIiAiKygwPT09YnI/USgiICIsYW5bMV0ubGVuZ3RoKzErYW5bNF0ubGVuZ3RoKTpwZShicixhblsxXS5sZW5ndGgpK2FuWzJdKyIvIithblszXStyZSh6cixhbls0XS5sZW5ndGgpKX0obnIsTHIseGkpO2lmKFZ0Lm1hdGNoKC9eIyswKyQv''@;'; put 'put ''KSlyZXR1cm4geGkrQmUoTHIsVnQubGVuZ3RoLVZ0LmluZGV4T2YoIjAiKSk7aWYobnI9VnQubWF0Y2gobW8pKXJldHVybiBUbj13cyhXdCxuclsxXS5sZW5ndGgpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK0pyKG5yWzFdKSkucmVwbGFjZSgvXC4kLywiLiIrSnIobnJbMV0pKS5yZXBs''@;'; put 'put ''YWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVW8sdGkpe3JldHVybiIuIit0aStRKCIwIixKcihuclsxXSkubGVuZ3RoLXRpLmxlbmd0aCl9KSwtMSE9PVZ0LmluZGV4T2YoIjAuIik/VG46VG4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihWdD1WdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLG5y''@;'; put 'put ''PVZ0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4geGkrd3MoTHIsbnJbMl0ubGVuZ3RoKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxuclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKG5yPVZ0Lm1h''@;'; put 'put ''dGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiB4aStsbyhCZShMciwwKSk7aWYobnI9VnQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIFd0PDA/Ii0iK2hhKGFuLFZ0LC1XdCk6bG8oIiIrKE1hdGguZmxvb3IoV3QpK2Z1bmN0aW9uIG1sKGFuLFZ0KXtyZXR1cm4gVnQ8''@;'; put 'put ''KCIiK01hdGgucm91bmQoKGFuLU1hdGguZmxvb3IoYW4pKSpNYXRoLnBvdygxMCxWdCkpKS5sZW5ndGg/MTowfShXdCxuclsxXS5sZW5ndGgpKSkrIi4iK3JlKHZzKFd0LG5yWzFdLmxlbmd0aCksbnJbMV0ubGVuZ3RoKTtpZihucj1WdC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gaGEoYW4s''@;'; put 'put ''VnQucmVwbGFjZSgvXiMsIyosLywiIiksV3QpO2lmKG5yPVZ0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiBUbj1MKGhhKGFuLFZ0LnJlcGxhY2UoL1tcXC1dL2csIiIpLFd0KSksYnI9MCxMKEwoVnQucmVwbGFjZSgvXFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxm''@;'; put 'put ''dW5jdGlvbihVbyl7cmV0dXJuIGJyPFRuLmxlbmd0aD9Ubi5jaGFyQXQoYnIrKyk6IjAiPT09VW8/IjAiOiIifSkpO2lmKFZ0Lm1hdGNoKHppKSlyZXR1cm4iKCIrKFRuPWhhKGFuLCIjIyMjIyMjIyMjIixXdCkpLnN1YnN0cigwLDMpKyIpICIrVG4uc3Vic3RyKDMsMykrIi0iK1RuLnN1YnN0''@;'; put 'put ''cig2KTt2YXIgY2k9IiI7aWYobnI9VnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBicj1NYXRoLm1pbihucls0XS5sZW5ndGgsNyksenI9WnQoTHIsTWF0aC5wb3coMTAsYnIpLTEsITEpLFRuPSIiK3hpLCIgIj09KGNpPUFvKCJuIixuclsxXSx6clsxXSkp''@;'; put 'put ''LmNoYXJBdChjaS5sZW5ndGgtMSkmJihjaT1jaS5zdWJzdHIoMCxjaS5sZW5ndGgtMSkrIjAiKSxUbis9Y2krbnJbMl0rIi8iK25yWzNdLChjaT1fZSh6clsyXSxicikpLmxlbmd0aDxucls0XS5sZW5ndGgmJihjaT1Kcihucls0XS5zdWJzdHIobnJbNF0ubGVuZ3RoLWNpLmxlbmd0aCkpK2Np''@;'; put 'put ''KSxUbis9Y2k7aWYobnI9VnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKE1hdGgubWF4KG5yWzFdLmxlbmd0aCxucls0XS5sZW5ndGgpLDcpLHhpKygoenI9WnQoTHIsTWF0aC5wb3coMTAsYnIpLTEsITApKVswXXx8KHpyWzFdPyIi''@;'; put 'put ''OiIwIikpKyIgIisoenJbMV0/cGUoenJbMV0sYnIpK25yWzJdKyIvIituclszXStfZSh6clsyXSxicik6USgiICIsMipicisxK25yWzJdLmxlbmd0aCtuclszXS5sZW5ndGgpKTtpZihucj1WdC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gVG49QmUoV3QsMCksVnQubGVuZ3RoPD1Ubi5sZW5n''@;'; put 'put ''dGg/VG46SnIoVnQuc3Vic3RyKDAsVnQubGVuZ3RoLVRuLmxlbmd0aCkpK1RuO2lmKG5yPVZ0Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe1RuPSIiK1d0LnRvRml4ZWQoTWF0aC5taW4obnJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxicj1Ubi5pbmRl''@;'; put 'put ''eE9mKCIuIik7dmFyIENvPVZ0LmluZGV4T2YoIi4iKS1icixwbz1WdC5sZW5ndGgtVG4ubGVuZ3RoLUNvO3JldHVybiBKcihWdC5zdWJzdHIoMCxDbykrVG4rVnQuc3Vic3RyKFZ0Lmxlbmd0aC1wbykpfWlmKG5yPVZ0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gYnI9dnMo''@;'; put 'put ''V3QsbnJbMV0ubGVuZ3RoKSxXdDwwPyItIitoYShhbixWdCwtV3QpOmxvKGZ1bmN0aW9uIGpsKGFuKXtyZXR1cm4gYW48MjE0NzQ4MzY0NyYmYW4+LTIxNDc0ODM2NDg/IiIrKGFuPj0wPzB8YW46YW4tMXwwKToiIitNYXRoLmZsb29yKGFuKX0oV3QpKS5yZXBsYWNlKC9eXGQsXGR7M30kLywi''@;'; put 'put ''MCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFVvKXtyZXR1cm4iMDAsIisoVW8ubGVuZ3RoPDM/cmUoMCwzLVVvLmxlbmd0aCk6IiIpK1VvfSkrIi4iK3JlKGJyLG5yWzFdLmxlbmd0aCk7c3dpdGNoKFZ0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBoYShhbiwiIywjIzAuMDAiLFd0''@;'; put 'put ''KTtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjp2YXIgVmk9bG8oQmUoTHIsMCkpO3JldHVybiIwIiE9PVZpP3hpK1ZpOiIiO2Nhc2UiIyMjLCMjIy4wMCI6cmV0dXJuIGhhKGFuLCIjIyMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAw''@;'; put 'put ''IjpyZXR1cm4gaGEoYW4sIiMsIyMwLjAwIixXdCkucmVwbGFjZSgvXjBcLi8sIi4iKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitWdCsifCIpfWZ1bmN0aW9uIG5uKGFuLFZ0KXt2YXIgV3QsZG49YW4uaW5kZXhPZigiRSIpLWFuLmluZGV4T2YoIi4iKS0xO2lmKGFu''@;'; put 'put ''Lm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1WdClyZXR1cm4iMC4wRSswIjtpZihWdDwwKXJldHVybiItIitubihhbiwtVnQpO3ZhciBUbj1hbi5pbmRleE9mKCIuIik7LTE9PT1UbiYmKFRuPWFuLmluZGV4T2YoIkUiKSk7dmFyIG5yPU1hdGguZmxvb3IoTWF0aC5sb2coVnQpKk1hdGgu''@;'; put 'put ''TE9HMTBFKSVUbjtpZihucjwwJiYobnIrPVRuKSwhKFd0PShWdC9NYXRoLnBvdygxMCxucikpLnRvUHJlY2lzaW9uKGRuKzErKFRuK25yKSVUbikpLm1hdGNoKC9bRWVdLykpe3ZhciBicj1NYXRoLmZsb29yKE1hdGgubG9nKFZ0KSpNYXRoLkxPRzEwRSk7LTE9PT1XdC5pbmRleE9mKCIuIik/''@;'; put 'put ''V3Q9V3QuY2hhckF0KDApKyIuIitXdC5zdWJzdHIoMSkrIkUrIisoYnItV3QubGVuZ3RoK25yKTpXdCs9IkUrIisoYnItbnIpLFd0PVd0LnJlcGxhY2UoL1wrLS8sIi0iKX1XdD1XdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKHpyLExyLHhpLGNpKXtyZXR1''@;'; put 'put ''cm4gTHIreGkrY2kuc3Vic3RyKDAsKFRuK25yKSVUbikrIi4iK2NpLnN1YnN0cihucikrIkUifSl9ZWxzZSBXdD1WdC50b0V4cG9uZW50aWFsKGRuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZXdC5tYXRjaCgvZVsrLV1cZCQvKSYmKFd0PVd0LnN1YnN0cigwLFd0Lmxlbmd0aC0xKSsi''@;'; put 'put ''MCIrV3QuY2hhckF0KFd0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZXdC5tYXRjaCgvZVwrLykmJihXdD1XdC5yZXBsYWNlKC9lXCsvLCJlIikpLFd0LnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gX24oYW4sVnQsV3Qpe2lmKDQwPT09YW4uY2hhckNvZGVBdCgwKSYmIVZ0Lm1hdGNo''@;'; put 'put ''KGlpKSl7dmFyIGRuPVZ0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNlKC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBXdD49MD9fbigibiIsZG4sV3QpOiIoIitfbigibiIsZG4sLVd0KSsiKSJ9aWYoNDQ9PT1WdC5jaGFyQ29kZUF0KFZ0Lmxlbmd0aC0xKSlyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24geWYoYW4sVnQsV3Qpe2Zvcih2YXIgZG49VnQubGVuZ3RoLTE7NDQ9PT1WdC5jaGFyQ29kZUF0KGRuLTEpOyktLWRuO3JldHVybiBBbyhhbixWdC5zdWJzdHIoMCxkbiksV3QvTWF0aC5wb3coMTAsMyooVnQubGVuZ3RoLWRuKSkpfShhbixWdCxXdCk7aWYoLTEhPT1WdC5pbmRleE9m''@;'; put 'put ''KCIlIikpcmV0dXJuIGZ1bmN0aW9uIG9wKGFuLFZ0LFd0KXt2YXIgZG49VnQucmVwbGFjZShnbiwiIiksVG49VnQubGVuZ3RoLWRuLmxlbmd0aDtyZXR1cm4gQW8oYW4sZG4sV3QqTWF0aC5wb3coMTAsMipUbikpK1EoIiUiLFRuKX0oYW4sVnQsV3QpO2lmKC0xIT09VnQuaW5kZXhPZigiRSIp''@;'; put 'put ''KXJldHVybiBubihWdCxXdCk7aWYoMzY9PT1WdC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitfbihhbixWdC5zdWJzdHIoIiAiPT1WdC5jaGFyQXQoMSk/MjoxKSxXdCk7dmFyIFRuLG5yLGJyLHpyLExyPU1hdGguYWJzKFd0KSx4aT1XdDwwPyItIjoiIjtpZihWdC5tYXRjaCgvXjAwKyQvKSly''@;'; put 'put ''ZXR1cm4geGkrcmUoTHIsVnQubGVuZ3RoKTtpZihWdC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiBUbj0iIitXdCwwPT09V3QmJihUbj0iIiksVG4ubGVuZ3RoPlZ0Lmxlbmd0aD9UbjpKcihWdC5zdWJzdHIoMCxWdC5sZW5ndGgtVG4ubGVuZ3RoKSkrVG47aWYobnI9VnQubWF0Y2goZWkpKXJl''@;'; put 'put ''dHVybiBmdW5jdGlvbiByaShhbixWdCxXdCl7cmV0dXJuIFd0KygwPT09VnQ/IiI6IiIrVnQpK1EoIiAiLGFuWzFdLmxlbmd0aCsyK2FuWzRdLmxlbmd0aCl9KG5yLExyLHhpKTtpZihWdC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIHhpK3JlKExyLFZ0Lmxlbmd0aC1WdC5pbmRleE9mKCIwIikp''@;'; put 'put ''O2lmKG5yPVZ0Lm1hdGNoKG1vKSlyZXR1cm4gVG49KFRuPSgiIitXdCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrSnIobnJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitKcihuclsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVW8sdGkpe3JldHVybiIuIit0aStRKCIwIixK''@;'; put 'put ''cihuclsxXSkubGVuZ3RoLXRpLmxlbmd0aCl9KSwtMSE9PVZ0LmluZGV4T2YoIjAuIik/VG46VG4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihWdD1WdC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLG5yPVZ0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4geGkrKCIiK0xyKS5yZXBsYWNl''@;'; put 'put ''KC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxuclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKG5yPVZ0Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiB4aStsbygiIitMcik7aWYobnI9VnQubWF0Y2goL14j''@;'; put 'put ''LCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIFd0PDA/Ii0iK19uKGFuLFZ0LC1XdCk6bG8oIiIrV3QpKyIuIitRKCIwIixuclsxXS5sZW5ndGgpO2lmKG5yPVZ0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBfbihhbixWdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxXdCk7aWYobnI9VnQubWF0Y2go''@;'; put 'put ''L14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIFRuPUwoX24oYW4sVnQucmVwbGFjZSgvW1xcLV0vZywiIiksV3QpKSxicj0wLEwoTChWdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFVvKXtyZXR1cm4gYnI8VG4ubGVuZ3RoP1RuLmNoYXJBdChi''@;'; put 'put ''cisrKToiMCI9PT1Vbz8iMCI6IiJ9KSk7aWYoVnQubWF0Y2goemkpKXJldHVybiIoIisoVG49X24oYW4sIiMjIyMjIyMjIyMiLFd0KSkuc3Vic3RyKDAsMykrIikgIitUbi5zdWJzdHIoMywzKSsiLSIrVG4uc3Vic3RyKDYpO3ZhciBjaT0iIjtpZihucj1WdC5tYXRjaCgvXihbIzA/XSspKCA/''@;'; put 'put ''KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIGJyPU1hdGgubWluKG5yWzRdLmxlbmd0aCw3KSx6cj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMSksVG49IiIreGksIiAiPT0oY2k9QW8oIm4iLG5yWzFdLHpyWzFdKSkuY2hhckF0KGNpLmxlbmd0aC0xKSYmKGNpPWNpLnN1YnN0cigwLGNpLmxl''@;'; put 'put ''bmd0aC0xKSsiMCIpLFRuKz1jaStuclsyXSsiLyIrbnJbM10sKGNpPV9lKHpyWzJdLGJyKSkubGVuZ3RoPG5yWzRdLmxlbmd0aCYmKGNpPUpyKG5yWzRdLnN1YnN0cihucls0XS5sZW5ndGgtY2kubGVuZ3RoKSkrY2kpLFRuKz1jaTtpZihucj1WdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8o''@;'; put 'put ''ID8pKFsjMD9dKykvKSlyZXR1cm4gYnI9TWF0aC5taW4oTWF0aC5tYXgobnJbMV0ubGVuZ3RoLG5yWzRdLmxlbmd0aCksNykseGkrKCh6cj1adChMcixNYXRoLnBvdygxMCxiciktMSwhMCkpWzBdfHwoenJbMV0/IiI6IjAiKSkrIiAiKyh6clsxXT9wZSh6clsxXSxicikrbnJbMl0rIi8iK25y''@;'; put 'put ''WzNdK19lKHpyWzJdLGJyKTpRKCIgIiwyKmJyKzErbnJbMl0ubGVuZ3RoK25yWzNdLmxlbmd0aCkpO2lmKG5yPVZ0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBWdC5sZW5ndGg8PShUbj0iIitXdCkubGVuZ3RoP1RuOkpyKFZ0LnN1YnN0cigwLFZ0Lmxlbmd0aC1Ubi5sZW5ndGgpKStUbjtp''@;'; put 'put ''Zihucj1WdC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe1RuPSIiK1d0LnRvRml4ZWQoTWF0aC5taW4obnJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxicj1Ubi5pbmRleE9mKCIuIik7dmFyIENvPVZ0LmluZGV4T2YoIi4iKS1icixwbz1WdC5sZW5ndGgt''@;'; put 'put ''VG4ubGVuZ3RoLUNvO3JldHVybiBKcihWdC5zdWJzdHIoMCxDbykrVG4rVnQuc3Vic3RyKFZ0Lmxlbmd0aC1wbykpfWlmKG5yPVZ0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSowKSQvKSlyZXR1cm4gV3Q8MD8iLSIrX24oYW4sVnQsLVd0KTpsbygiIitXdCkucmVwbGFjZSgvXlxkLFxkezN9JC8s''@;'; put 'put ''IjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihVbyl7cmV0dXJuIjAwLCIrKFVvLmxlbmd0aDwzP3JlKDAsMy1Vby5sZW5ndGgpOiIiKStVb30pKyIuIityZSgwLG5yWzFdLmxlbmd0aCk7dmFyIFZpPWxvKCIiK0xyKTtzd2l0Y2goVnQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMi''@;'; put 'put ''OmNhc2UiIywjIyMiOnJldHVybiIwIiE9PVZpP3hpK1ZpOiIiO2Nhc2UiIywjMDAiOnJldHVybiIwMCIhPT0oVmk9cmUoVmksMikpP3hpK1ZpOiIiO2RlZmF1bHQ6aWYoVnQubWF0Y2goL1wuWzAjP10qJC8pKXJldHVybiBfbihhbixWdC5zbGljZSgwLFZ0Lmxhc3RJbmRleE9mKCIuIikpLFd0''@;'; put 'put ''KStKcihWdC5zbGljZShWdC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrVnQrInwiKX1yZXR1cm4gZnVuY3Rpb24oVnQsV3QsZG4pe3JldHVybiIwLDAiPT1XdCYmKFd0PSIjLCMwMCIpLCgwfGRuKT09PWRuP19uKFZ0LFd0LGRuKTpo''@;'; put 'put ''YShWdCxXdCxkbil9fSgpO2Z1bmN0aW9uIHhvKEt0KXtmb3IodmFyIGduPVtdLExuPSExLFdyPTAsWG49MDtXcjxLdC5sZW5ndGg7KytXcilzd2l0Y2goS3QuY2hhckNvZGVBdChXcikpe2Nhc2UgMzQ6TG49IUxuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrV3I7YnJlYWs7Y2Fz''@;'; put 'put ''ZSA1OTpnbltnbi5sZW5ndGhdPUt0LnN1YnN0cihYbixXci1YbiksWG49V3IrMX1pZihnbltnbi5sZW5ndGhdPUt0LnN1YnN0cihYbiksITA9PT1Mbil0aHJvdyBuZXcgRXJyb3IoIkZvcm1hdCB8IitLdCsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBnbn1QLl9zcGxpdD14bzt2''@;'; put 'put ''YXIgaGk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIHRhKEt0KXtmb3IodmFyIGduPTAsTG49IiIsV3I9IiI7Z248S3QubGVuZ3RoOylzd2l0Y2goTG49S3QuY2hhckF0KGduKSl7Y2FzZSJHIjpHZShLdCxnbikmJihnbis9NiksZ24rKzticmVhaztjYXNlJyIn''@;'; put 'put ''OmZvcig7MzQhPT1LdC5jaGFyQ29kZUF0KCsrZ24pJiZnbjxLdC5sZW5ndGg7KTsrK2duO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6Z24rPTI7YnJlYWs7Y2FzZSJAIjorK2duO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoZ24rMSl8fCIyIj09PUt0LmNoYXJBdChn''@;'; put 'put ''bisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9''@;'; put 'put ''PT1LdC5zdWJzdHIoZ24sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PUt0LnN1YnN0cihnbiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1LdC5zdWJzdHIoZ24sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK2duO2JyZWFrO2Nhc2UiWyI6Zm9y''@;'; put 'put ''KFdyPUxuOyJdIiE9PUt0LmNoYXJBdChnbisrKSYmZ248S3QubGVuZ3RoOylXcis9S3QuY2hhckF0KGduKTtpZihXci5tYXRjaChoaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDtnbjxLdC5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKExuPUt0LmNo''@;'; put 'put ''YXJBdCgrK2duKSk+LTF8fCJcXCI9PUxuJiYiLSI9PUt0LmNoYXJBdChnbisxKSYmIjAjIi5pbmRleE9mKEt0LmNoYXJBdChnbisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3IoO0t0LmNoYXJBdCgrK2duKT09PUxuOyk7YnJlYWs7Y2FzZSIqIjorK2duLCgiICI9PUt0LmNoYXJBdChnbil8''@;'; put 'put ''fCIqIj09S3QuY2hhckF0KGduKSkmJisrZ247YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrZ247YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtnbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5p''@;'; put 'put ''bmRleE9mKEt0LmNoYXJBdCgrK2duKSk+LTE7KTticmVhaztkZWZhdWx0OisrZ259cmV0dXJuITF9ZnVuY3Rpb24gTW4oS3QsZ24sTG4sV3Ipe2Zvcih2YXIgaWksemksSnIsWG49W10sZWk9IiIsaXI9MCxyaT0iIixtbz0idCIsd3M9IkgiO2lyPEt0Lmxlbmd0aDspc3dpdGNoKHJpPUt0LmNo''@;'; put 'put ''YXJBdChpcikpe2Nhc2UiRyI6aWYoIUdlKEt0LGlyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIityaSsiIGluICIrS3QpO1huW1huLmxlbmd0aF09e3Q6IkciLHY6IkdlbmVyYWwifSxpcis9NzticmVhaztjYXNlJyInOmZvcihlaT0iIjszNCE9PShKcj1LdC5j''@;'; put 'put ''aGFyQ29kZUF0KCsraXIpKSYmaXI8S3QubGVuZ3RoOyllaSs9U3RyaW5nLmZyb21DaGFyQ29kZShKcik7WG5bWG4ubGVuZ3RoXT17dDoidCIsdjplaX0sKytpcjticmVhaztjYXNlIlxcIjp2YXIgdnM9S3QuY2hhckF0KCsraXIpO1huW1huLmxlbmd0aF09e3Q6IigiPT09dnN8fCIpIj09PXZz''@;'; put 'put ''P3ZzOiJ0Iix2OnZzfSwrK2lyO2JyZWFrO2Nhc2UiXyI6WG5bWG4ubGVuZ3RoXT17dDoidCIsdjoiICJ9LGlyKz0yO2JyZWFrO2Nhc2UiQCI6WG5bWG4ubGVuZ3RoXT17dDoiVCIsdjpnbn0sKytpcjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09S3QuY2hhckF0KGlyKzEpfHwiMiI9''@;'; put 'put ''PT1LdC5jaGFyQXQoaXIrMSkpe2lmKG51bGw9PWlpJiZudWxsPT0oaWk9cG4oZ24sTG4sIjIiPT09S3QuY2hhckF0KGlyKzEpKSkpcmV0dXJuIiI7WG5bWG4ubGVuZ3RoXT17dDoiWCIsdjpLdC5zdWJzdHIoaXIsMil9LG1vPXJpLGlyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlki''@;'; put 'put ''OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOnJpPXJpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTki''@;'; put 'put ''OmNhc2UiXHUwZTE3IjppZihnbjwwfHxudWxsPT1paSYmbnVsbD09KGlpPXBuKGduLExuKSkpcmV0dXJuIiI7Zm9yKGVpPXJpOysraXI8S3QubGVuZ3RoJiZLdC5jaGFyQXQoaXIpLnRvTG93ZXJDYXNlKCk9PT1yaTspZWkrPXJpOyJtIj09PXJpJiYiaCI9PT1tby50b0xvd2VyQ2FzZSgpJiYo''@;'; put 'put ''cmk9Ik0iKSwiaCI9PT1yaSYmKHJpPXdzKSxYbltYbi5sZW5ndGhdPXt0OnJpLHY6ZWl9LG1vPXJpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIGpsPXt0OnJpLHY6cml9O2lmKG51bGw9PWlpJiYoaWk9cG4oZ24sTG4pKSwiQS9QIj09PUt0LnN1YnN0cihpciwzKS50''@;'; put 'put ''b1VwcGVyQ2FzZSgpPyhudWxsIT1paSYmKGpsLnY9aWkuSD49MTI/IlAiOiJBIiksamwudD0iVCIsd3M9ImgiLGlyKz0zKToiQU0vUE0iPT09S3Quc3Vic3RyKGlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPWlpJiYoamwudj1paS5IPj0xMj8iUE0iOiJBTSIpLGpsLnQ9IlQiLGlyKz01LHdz''@;'; put 'put ''PSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09S3Quc3Vic3RyKGlyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPWlpJiYoamwudj1paS5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksamwudD0iVCIsaXIrPTUsd3M9ImgiKTooamwudD0idCIsKytpciksbnVs''@;'; put 'put ''bD09aWkmJiJUIj09PWpsLnQpcmV0dXJuIiI7WG5bWG4ubGVuZ3RoXT1qbCxtbz1yaTticmVhaztjYXNlIlsiOmZvcihlaT1yaTsiXSIhPT1LdC5jaGFyQXQoaXIrKykmJmlyPEt0Lmxlbmd0aDspZWkrPUt0LmNoYXJBdChpcik7aWYoIl0iIT09ZWkuc2xpY2UoLTEpKXRocm93J3VudGVybWlu''@;'; put 'put ''YXRlZCAiWyIgYmxvY2s6IHwnK2VpKyJ8IjtpZihlaS5tYXRjaChoaSkpe2lmKG51bGw9PWlpJiZudWxsPT0oaWk9cG4oZ24sTG4pKSlyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJaIix2OmVpLnRvTG93ZXJDYXNlKCl9LG1vPWVpLmNoYXJBdCgxKX1lbHNlIGVpLmluZGV4T2YoIiQiKT4t''@;'; put 'put ''MSYmKGVpPShlaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIix0YShLdCl8fChYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OmVpfSkpO2JyZWFrO2Nhc2UiLiI6aWYobnVsbCE9aWkpe2ZvcihlaT1yaTsrK2lyPEt0Lmxlbmd0aCYmIjAiPT09KHJpPUt0LmNoYXJBdChpcikpOyll''@;'; put 'put ''aSs9cmk7WG5bWG4ubGVuZ3RoXT17dDoicyIsdjplaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihlaT1yaTsrK2lyPEt0Lmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihyaT1LdC5jaGFyQXQoaXIpKT4tMTspZWkrPXJpO1huW1huLmxlbmd0aF09e3Q6Im4iLHY6ZWl9O2JyZWFrO2Nh''@;'; put 'put ''c2UiPyI6Zm9yKGVpPXJpO0t0LmNoYXJBdCgrK2lyKT09PXJpOyllaSs9cmk7WG5bWG4ubGVuZ3RoXT17dDpyaSx2OmVpfSxtbz1yaTticmVhaztjYXNlIioiOisraXIsKCIgIj09S3QuY2hhckF0KGlyKXx8IioiPT1LdC5jaGFyQXQoaXIpKSYmKytpcjticmVhaztjYXNlIigiOmNhc2UiKSI6''@;'; put 'put ''WG5bWG4ubGVuZ3RoXT17dDoxPT09V3I/InQiOnJpLHY6cml9LCsraXI7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKGVpPXJpO2lyPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2Yo''@;'; put 'put ''S3QuY2hhckF0KCsraXIpKT4tMTspZWkrPUt0LmNoYXJBdChpcik7WG5bWG4ubGVuZ3RoXT17dDoiRCIsdjplaX07YnJlYWs7Y2FzZSIgIjpYbltYbi5sZW5ndGhdPXt0OnJpLHY6cml9LCsraXI7YnJlYWs7Y2FzZSIkIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OlZyfSwrK2lyO2JyZWFrO2Nh''@;'; put 'put ''c2UiLyI6WG5bWG4ubGVuZ3RoXT1Ybi5sZW5ndGg+MCYmdGEoWG5bWG4ubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2OkFufTp7dDoidCIsdjoiLyJ9LCsraXI7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2Yocmkp''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK3JpKyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17dDoidCIsdjpyaX0sKytpcn12YXIgb3AsaGE9MCx5Zj0wO2Zvcihpcj1Ybi5sZW5ndGgtMSxtbz0idCI7aXI+PTA7LS1pcilzd2l0Y2goWG5baXJdLnQpe2Nhc2Ui''@;'; put 'put ''aCI6Y2FzZSJIIjpYbltpcl0udD13cyxtbz0iaCIsaGE8MSYmKGhhPTEpO2JyZWFrO2Nhc2UicyI6KG9wPVhuW2lyXS52Lm1hdGNoKC9cLjArJC8pKSYmKHlmPU1hdGgubWF4KHlmLG9wWzBdLmxlbmd0aC0xKSksaGE8MyYmKGhhPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6''@;'; put 'put ''bW89WG5baXJdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1tbyYmKFhuW2lyXS50PSJNIixoYTwyJiYoaGE9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpoYTwxJiZYbltpcl0udi5tYXRjaCgvW0hoXS8pJiYoaGE9MSksaGE8MiYmWG5baXJdLnYubWF0Y2goL1tNbV0vKSYmKGhhPTIp''@;'; put 'put ''LGhhPDMmJlhuW2lyXS52Lm1hdGNoKC9bU3NdLykmJihoYT0zKX1zd2l0Y2goaGEpe2Nhc2UgMDpicmVhaztjYXNlIDE6aWkudT49LjUmJihpaS51PTAsKytpaS5TKSxpaS5TPj02MCYmKGlpLlM9MCwrK2lpLk0pLGlpLk0+PTYwJiYoaWkuTT0wLCsraWkuSCk7YnJlYWs7Y2FzZSAyOmlpLnU+''@;'; put 'put ''PS41JiYoaWkudT0wLCsraWkuUyksaWkuUz49NjAmJihpaS5TPTAsKytpaS5NKX12YXIgX24sbm49IiI7Zm9yKGlyPTA7aXI8WG4ubGVuZ3RoOysraXIpc3dpdGNoKFhuW2lyXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6WG5baXJdLnY9IiIsWG5b''@;'; put 'put ''aXJdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJcdTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNl''@;'; put 'put ''Ilx1MGUxNyI6WG5baXJdLnY9WW8oWG5baXJdLnQuY2hhckNvZGVBdCgwKSxYbltpcl0udixpaSx5ZiksWG5baXJdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoX249aXIrMTtudWxsIT1Ybltfbl0mJigiPyI9PT0ocmk9WG5bX25dLnQpfHwiRCI9PT1yaXx8KCIgIj09PXJpfHwi''@;'; put 'put ''dCI9PT1yaSkmJm51bGwhPVhuW19uKzFdJiYoIj8iPT09WG5bX24rMV0udHx8InQiPT09WG5bX24rMV0udCYmIi8iPT09WG5bX24rMV0udil8fCIoIj09PVhuW2lyXS50JiYoIiAiPT09cml8fCJuIj09PXJpfHwiKSI9PT1yaSl8fCJ0Ij09PXJpJiYoIi8iPT09WG5bX25dLnZ8fCIgIj09PVhu''@;'; put 'put ''W19uXS52JiZudWxsIT1YbltfbisxXSYmIj8iPT1YbltfbisxXS50KSk7KVhuW2lyXS52Kz1Ybltfbl0udixYbltfbl09e3Y6IiIsdDoiOyJ9LCsrX247bm4rPVhuW2lyXS52LGlyPV9uLTE7YnJlYWs7Y2FzZSJHIjpYbltpcl0udD0idCIsWG5baXJdLnY9amkoZ24sTG4pfXZhciBWdCxXdCxh''@;'; put 'put ''bj0iIjtpZihubi5sZW5ndGg+MCl7NDA9PW5uLmNoYXJDb2RlQXQoMCk/KFZ0PWduPDAmJjQ1PT09bm4uY2hhckNvZGVBdCgwKT8tZ246Z24sV3Q9QW8oIm4iLG5uLFZ0KSk6KFd0PUFvKCJuIixubixWdD1nbjwwJiZXcj4xPy1nbjpnbiksVnQ8MCYmWG5bMF0mJiJ0Ij09WG5bMF0udCYmKFd0''@;'; put 'put ''PVd0LnN1YnN0cigxKSxYblswXS52PSItIitYblswXS52KSksX249KFd0PVd0LnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oYnIpe3JldHVybiIuIj09YnI/dXI6UXJ9KSkubGVuZ3RoLTE7dmFyIGRuPVhuLmxlbmd0aDtmb3IoaXI9MDtpcjxYbi5sZW5ndGg7KytpcilpZihudWxsIT1Ybltp''@;'; put 'put ''cl0mJiJ0IiE9WG5baXJdLnQmJlhuW2lyXS52LmluZGV4T2YoIi4iKT4tMSl7ZG49aXI7YnJlYWt9dmFyIFRuPVhuLmxlbmd0aDtpZihkbj09PVhuLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihpcj1Ybi5sZW5ndGgtMTtpcj49MDstLWlyKW51bGw9PVhuW2lyXXx8LTE9PT0i''@;'; put 'put ''bj8iLmluZGV4T2YoWG5baXJdLnQpfHwoX24+PVhuW2lyXS52Lmxlbmd0aC0xP1huW2lyXS52PVd0LnN1YnN0cigxKyhfbi09WG5baXJdLnYubGVuZ3RoKSxYbltpcl0udi5sZW5ndGgpOl9uPDA/WG5baXJdLnY9IiI6KFhuW2lyXS52PVd0LnN1YnN0cigwLF9uKzEpLF9uPS0xKSxYbltpcl0u''@;'; put 'put ''dD0idCIsVG49aXIpO19uPj0wJiZUbjxYbi5sZW5ndGgmJihYbltUbl0udj1XdC5zdWJzdHIoMCxfbisxKStYbltUbl0udil9ZWxzZSBpZihkbiE9PVhuLmxlbmd0aCYmLTE9PT1XdC5pbmRleE9mKCJFIikpe2Zvcihfbj1XdC5pbmRleE9mKHVyKS0xLGlyPWRuO2lyPj0wOy0taXIpaWYobnVs''@;'; put 'put ''bCE9WG5baXJdJiYtMSE9PSJuPyIuaW5kZXhPZihYbltpcl0udCkpe2Zvcih6aT1Ybltpcl0udi5pbmRleE9mKCIuIik+LTEmJmlyPT09ZG4/WG5baXJdLnYuaW5kZXhPZigiLiIpLTE6WG5baXJdLnYubGVuZ3RoLTEsYW49WG5baXJdLnYuc3Vic3RyKHppKzEpO3ppPj0wOy0temkpX24+PTAm''@;'; put 'put ''JigiMCI9PT1Ybltpcl0udi5jaGFyQXQoemkpfHwiIyI9PT1Ybltpcl0udi5jaGFyQXQoemkpKSYmKGFuPVd0LmNoYXJBdChfbi0tKSthbik7WG5baXJdLnY9YW4sWG5baXJdLnQ9InQiLFRuPWlyfWZvcihfbj49MCYmVG48WG4ubGVuZ3RoJiYoWG5bVG5dLnY9V3Quc3Vic3RyKDAsX24rMSkr''@;'; put 'put ''WG5bVG5dLnYpLF9uPVd0LmluZGV4T2YodXIpKzEsaXI9ZG47aXI8WG4ubGVuZ3RoOysraXIpaWYobnVsbCE9WG5baXJdJiYoLTEhPT0ibj8oIi5pbmRleE9mKFhuW2lyXS50KXx8aXI9PT1kbikpe2Zvcih6aT1Ybltpcl0udi5pbmRleE9mKHVyKT4tMSYmaXI9PT1kbj9Ybltpcl0udi5pbmRl''@;'; put 'put ''eE9mKHVyKSsxOjAsYW49WG5baXJdLnYuc3Vic3RyKDAsemkpO3ppPFhuW2lyXS52Lmxlbmd0aDsrK3ppKV9uPFd0Lmxlbmd0aCYmKGFuKz1XdC5jaGFyQXQoX24rKykpO1huW2lyXS52PWFuLFhuW2lyXS50PSJ0IixUbj1pcn19fWZvcihpcj0wO2lyPFhuLmxlbmd0aDsrK2lyKW51bGwhPVhu''@;'; put 'put ''W2lyXSYmIm4/Ii5pbmRleE9mKFhuW2lyXS50KT4tMSYmKFhuW2lyXS52PUFvKFhuW2lyXS50LFhuW2lyXS52LFZ0PVdyPjEmJmduPDAmJmlyPjAmJiItIj09PVhuW2lyLTFdLnY/LWduOmduKS5yZXBsYWNlKC9cLi9nLHVyKS5yZXBsYWNlKC8sLyxRciksWG5baXJdLnQ9InQiKTt2YXIgbnI9''@;'; put 'put ''IiI7Zm9yKGlyPTA7aXIhPT1Ybi5sZW5ndGg7KytpciludWxsIT1Ybltpcl0mJihucis9WG5baXJdLnYpO3JldHVybiBucn1QLmlzX2RhdGU9dGEsUC5fZXZhbD1Nbjt2YXIgeXM9L1xbWz08Pl0vLEVsPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBz''@;'; put 'put ''bChLdCxnbil7aWYobnVsbD09Z24pcmV0dXJuITE7dmFyIExuPXBhcnNlRmxvYXQoZ25bMl0pO3N3aXRjaChnblsxXSl7Y2FzZSI9IjppZihLdD09TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihLdD5MbilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKEt0PExuKXJldHVybiEwO2JyZWFr''@;'; put 'put ''O2Nhc2UiPD4iOmlmKEt0IT1MbilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihLdD49TG4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYoS3Q8PUxuKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIG51KEt0LGduLExuKXtudWxsPT1MbiYmKExuPXt9KTt2YXIgV3I9IiI7c3dpdGNoKHR5''@;'; put 'put ''cGVvZiBLdCl7Y2FzZSJzdHJpbmciOldyPSJtL2QveXkiPT1LdCYmTG4uZGF0ZU5GP0xuLmRhdGVORjpLdDticmVhaztjYXNlIm51bWJlciI6bnVsbD09KFdyPTE0PT1LdCYmTG4uZGF0ZU5GP0xuLmRhdGVORjoobnVsbCE9TG4udGFibGU/TG4udGFibGU6YnQpW0t0XSkmJihXcj1Mbi50YWJs''@;'; put 'put ''ZSYmTG4udGFibGVbRnRbS3RdXXx8YnRbRnRbS3RdXSksbnVsbD09V3ImJihXcj1UdFtLdF18fCJHZW5lcmFsIil9aWYoR2UoV3IsMCkpcmV0dXJuIGppKGduLExuKTtnbiBpbnN0YW5jZW9mIERhdGUmJihnbj16bihnbixMbi5kYXRlMTkwNCkpO3ZhciBYbj1mdW5jdGlvbiBnbChLdCxnbil7''@;'; put 'put ''dmFyIExuPXhvKEt0KSxXcj1Mbi5sZW5ndGgsWG49TG5bV3ItMV0uaW5kZXhPZigiQCIpO2lmKFdyPDQmJlhuPi0xJiYtLVdyLExuLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IitMbi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIGduKXJldHVybls0LDQ9PT1Mbi5sZW5ndGh8fFhuPi0xP0xuW0xuLmxlbmd0aC0xXToiQCJdO3N3aXRjaChMbi5sZW5ndGgpe2Nhc2UgMTpMbj1Ybj4tMT9bIkdlbmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsTG5bMF1dOltMblswXSxMblswXSxMblswXSwiQCJdO2JyZWFrO2Nh''@;'; put 'put ''c2UgMjpMbj1Ybj4tMT9bTG5bMF0sTG5bMF0sTG5bMF0sTG5bMV1dOltMblswXSxMblsxXSxMblswXSwiQCJdO2JyZWFrO2Nhc2UgMzpMbj1Ybj4tMT9bTG5bMF0sTG5bMV0sTG5bMF0sTG5bMl1dOltMblswXSxMblsxXSxMblsyXSwiQCJdfXZhciBlaT1nbj4wP0xuWzBdOmduPDA/TG5bMV06''@;'; put 'put ''TG5bMl07aWYoLTE9PT1MblswXS5pbmRleE9mKCJbIikmJi0xPT09TG5bMV0uaW5kZXhPZigiWyIpKXJldHVybltXcixlaV07aWYobnVsbCE9TG5bMF0ubWF0Y2goeXMpfHxudWxsIT1MblsxXS5tYXRjaCh5cykpe3ZhciBpcj1MblswXS5tYXRjaChFbCkscmk9TG5bMV0ubWF0Y2goRWwpO3Jl''@;'; put 'put ''dHVybiBzbChnbixpcik/W1dyLExuWzBdXTpzbChnbixyaSk/W1dyLExuWzFdXTpbV3IsTG5bbnVsbCE9aXImJm51bGwhPXJpPzI6MV1dfXJldHVybltXcixlaV19KFdyLGduKTtpZihHZShYblsxXSkpcmV0dXJuIGppKGduLExuKTtpZighMD09PWduKWduPSJUUlVFIjtlbHNlIGlmKCExPT09''@;'; put 'put ''Z24pZ249IkZBTFNFIjtlbHNlIGlmKCIiPT09Z258fG51bGw9PWduKXJldHVybiIiO3JldHVybiBNbihYblsxXSxnbixMbixYblswXSl9ZnVuY3Rpb24gdGwoS3QsZ24pe2lmKCJudW1iZXIiIT10eXBlb2YgZ24pe2duPStnbnx8LTE7Zm9yKHZhciBMbj0wO0xuPDM5MjsrK0xuKWlmKG51bGwh''@;'; put 'put ''PWJ0W0xuXSl7aWYoYnRbTG5dPT1LdCl7Z249TG47YnJlYWt9fWVsc2UgZ248MCYmKGduPUxuKTtnbjwwJiYoZ249MzkxKX1yZXR1cm4gYnRbZ25dPUt0LGdufVAubG9hZD10bCxQLl90YWJsZT1idCxQLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBidH0sUC5sb2FkX3RhYmxlPWZ1bmN0''@;'; put 'put ''aW9uKGduKXtmb3IodmFyIExuPTA7MzkyIT1MbjsrK0xuKXZvaWQgMCE9PWduW0xuXSYmdGwoZ25bTG5dLExuKX0sUC5pbml0X3RhYmxlPWN0LFAuZm9ybWF0PW51LFAuZ2V0bG9jYWxlPWZ1bmN0aW9uIHZyKCl7cmV0dXJuIGtufHwiZW4tVVMifSxQLnNldGxvY2FsZT1mdW5jdGlvbiBycihL''@;'; put 'put ''dCl7aWYoZnVuY3Rpb24gcHIoS3Qpe3ZhciBnbj0wO3N3aXRjaCgoa258fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNlImtvLWtyIjpmb3IoZ249Mjc7Z248PTM2OysrZ24pZGVsZXRlIEt0W2duXTtmb3IoZ249NTA7Z248PTU4Oysr''@;'; put 'put ''Z24pZGVsZXRlIEt0W2duXTticmVhaztjYXNlInRoLXRoIjpmb3IoZ249NTk7Z248PTYyOysrZ24pZGVsZXRlIEt0W2duXTtmb3IoZ249Njc7Z248PTgxOysrZ24pZGVsZXRlIEt0W2duXX19KGJ0KSxrbj1LdCxTbihidCksdHlwZW9mIEludGw8InUiKXt2YXIgZ249SW50bC5EYXRlVGltZUZv''@;'; put 'put ''cm1hdChLdCk7aWYoZ24uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciBMbj1nbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSksV3I9MDtXcjw3OysrV3IpZHRbV3JdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhu''@;'; put 'put ''ZXcgRGF0ZSgyMDIwLDAsNStXciwwLDAsMCkpWzBdLnZhbHVlLGR0W1dyXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KEt0LHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1dyLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBYbj0wO1huPDEyOysrWG4p''@;'; put 'put ''Q3RbWG5dWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxYbiwyLDAsMCwwKSlbMF0udmFsdWUsQ3RbWG5dWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5l''@;'; put 'put ''dyBEYXRlKDIwMjAsWG4sMiwwLDAsMCkpWzBdLnZhbHVlLEN0W1huXVswXT1DdFtYbl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIGVpPSIiLGlyPTA7aXI8TG4ubGVuZ3RoOysraXIpe3ZhciByaT1Mbltpcl0udmFsdWU7c3dpdGNoKExuW2lyXS50eXBlKXtjYXNlInllYXIiOmVpKz0yPT1yaS5s''@;'; put 'put ''ZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6ZWkrPSIxIj09cmk/Im0iOiIwMSI9PXJpPyJtbSI6cmk9PUN0WzBdWzFdPyJtbW0iOnJpPT1DdFswXVsyXT8ibW1tbSI6cmk9PUN0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6ZWkrPSI1Ij09cmk/ImQiOiIw''@;'; put 'put ''NSI9PXJpPyJkZCI6cmk9PWR0WzBdWzBdPyJkZGQiOnJpPT1kdFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOmVpKz1yaS5yZXBsYWNlKC8uL2csIlxcJCYiKSwxPT1yaS5sZW5ndGgmJihBbj1yaSl9fShLdC5tYXRjaCgvZW4vaSkmJkt0Lm1hdGNoKC91cy9pKXx8IUt0''@;'; put 'put ''KSYmKGVpPSJtL2QveXkiKSxidFsxNF09ZWl9ZWxzZSJqYS1qcCI9PUt0LnRvTG93ZXJDYXNlKCkmJihidFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciBtbz1JbnRsLk51bWJlckZvcm1hdChLdCx7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO21vJiYoUXI9KG1vLm1hdGNoKC8xKC4qKTIvKXx8W10p''@;'; put 'put ''WzFdLHVyPShtby5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9ZXJbS3QudG9Mb3dlckNhc2UoKV18fChlcltLdC50b0xvd2VyQ2FzZSgpXT17Ii4iOnVyLCIsIjpRcn0pLFpuPW50KHRyPWVyW0t0LnRvTG93ZXJDYXNlKCldfHxlclsiZW4tdXMiXSl9LFAubm9ybWFsaXplPWZ1bmN0aW9uIE1z''@;'; put 'put ''KEt0KXtmb3IodmFyIGduPTAsTG49MCxXcj0iIixYbj0iIixlaT0iIixpcj10ci55fHwieSIscmk9aXIudG9VcHBlckNhc2UoKSxtbz10ci5kfHwiZCIsaWk9bW8udG9VcHBlckNhc2UoKSx6aT10clsiLiJdLEpyPXRyWyIsIl0sd3M9IjAjP0UrLSUiK3RyWyIsIl0remk7Z248S3QubGVuZ3Ro''@;'; put 'put ''Oylzd2l0Y2goV3I9S3QuY2hhckF0KGduKSl7Y2FzZSJHIjpnbisrLGVpKz1XcjticmVhaztjYXNlJyInOmZvcihlaSs9V3I7MzQhPT0oTG49S3QuY2hhckNvZGVBdCgrK2duKSkmJmduPEt0Lmxlbmd0aDspZWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoTG4pO2VpKz0nIicsKytnbjticmVhaztj''@;'; put 'put ''YXNlIlxcIjpjYXNlIl8iOmVpKz1LdC5zbGljZShnbixnbisyKSxnbis9MjticmVhaztjYXNlIkAiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK2duLGVpKz1XcjticmVhaztjYXNlIGlyOmNhc2Ugcmk6Y2FzZSBtbzpjYXNlIGlpOmVpKz1abltXci50b0xvd2VyQ2FzZSgp''@;'; put 'put ''XSwrK2duO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjplaSs9V3IsKytnbjticmVhaztjYXNlIlsiOmZvcihYbj1XcjsiXSIhPT1LdC5jaGFyQXQoZ24rKykmJmduPEt0''@;'; put 'put ''Lmxlbmd0aDspWG4rPUt0LmNoYXJBdChnbik7ZWkrPVhuO2JyZWFrO2Nhc2UgSnI6ZWkrPSciJytXcisnIicsKytnbjticmVhaztjYXNlIHppOmlmKCEoZ248S3QubGVuZ3RoJiYod3MuaW5kZXhPZihXcj1LdC5jaGFyQXQoKytnbikpPi0xfHwiXFwiPT1XciYmIi0iPT1LdC5jaGFyQXQoZ24r''@;'; put 'put ''MSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQoZ24rMikpPi0xKSkpe2VpKz0nIicremkrJyInO2JyZWFrfVdyPXppLC0tZ247Y2FzZSIwIjpjYXNlIiMiOmZvcihlaSs9Wm5bV3IudG9Mb3dlckNhc2UoKV18fFdyO2duPEt0Lmxlbmd0aCYmKHdzLmluZGV4T2YoV3I9S3QuY2hhckF0KCsrZ24p''@;'; put 'put ''KT4tMXx8IlxcIj09V3ImJiItIj09S3QuY2hhckF0KGduKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KGduKzIpKT4tMSk7KWVpKz1abltXci50b0xvd2VyQ2FzZSgpXXx8V3I7YnJlYWs7Y2FzZSI/Ijpmb3IoZWkrPVdyO0t0LmNoYXJBdCgrK2duKT09PVdyOyllaSs9V3I7YnJlYWs7Y2Fz''@;'; put 'put ''ZSIqIjplaSs9V3IsKytnbiwoIiAiPT1LdC5jaGFyQXQoZ24pfHwiKiI9PUt0LmNoYXJBdChnbikpJiYoZWkrPUt0LmNoYXJBdChnbiksKytnbik7YnJlYWs7Y2FzZSIoIjpjYXNlIikiOmVpKz1XciwrK2duO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1Ijpj''@;'; put 'put ''YXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihlaSs9V3I7Z248S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5jaGFyQXQoKytnbikpPi0xOyllaSs9S3QuY2hhckF0KGduKTticmVhaztkZWZhdWx0OmVpKz1XciwrK2dufXJldHVybiBlaX0sUC5nZXRjdXJyZW5j''@;'; put 'put ''eT1mdW5jdGlvbiBraSgpe3JldHVybiBvaXx8IlVTRCJ9LFAuc2V0Y3VycmVuY3k9ZnVuY3Rpb24gTGkoS3Qpe29pPUt0LFZyPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZvcm1hdChrbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6S3R9''@;'; put 'put ''KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O0oodyk7dmFyIE9lLG5lPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjp3Ll90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5eXkiLCJNZWRpdW0gRGF0ZSI6dy5f''@;'; put 'put ''dGFibGVbMTVdLCJTaG9ydCBEYXRlIjp3Ll90YWJsZVsxNF0sIkxvbmcgVGltZSI6dy5fdGFibGVbMTldLCJNZWRpdW0gVGltZSI6dy5fdGFibGVbMThdLCJTaG9ydCBUaW1lIjp3Ll90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsRml4''@;'; put 'put ''ZWQ6dy5fdGFibGVbMl0sU3RhbmRhcmQ6dy5fdGFibGVbNF0sUGVyY2VudDp3Ll90YWJsZVsxMF0sU2NpZW50aWZpYzp3Ll90YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxzZSI7QCcsIk9uL09mZiI6JyJZZXMi''@;'; put 'put ''OyJZZXMiOyJObyI7QCd9LGRlPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsMjM6''@;'; put 'put ''IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXkiLDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06c3MiLDM1OiJoOm1tOnNzIiwzNjoi''@;'; put 'put ''bS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICItIl8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7XygqICItIj8/Xyk7XyhAXyknLDQ0Oidf''@;'; put 'put ''KCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6Im0vZC95eSIsNTg6Im0vZC95eSIs''@;'; put 'put ''NTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw2NjonIiQiIywjIzAuMDBfKTtb''@;'; put 'put ''UmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQtbW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDptbTpzcyIsNzg6Im0vZC95eSBoOm1t''@;'; put 'put ''Iiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSxmZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nOyFmdW5jdGlvbih5KXt5LnZlcnNpb249IjEuMi4wIjt2YXIgTD1mdW5jdGlvbiBQKCl7Zm9yKHZhciB2ZT0wLFNlPW5ldyBBcnJheSgyNTYpLEhlPTA7''@;'; put 'put ''MjU2IT1IZTsrK0hlKVNlW0hlXT12ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT0xJih2ZT1IZSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52''@;'; put 'put ''ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheShTZSk6''@;'; put 'put ''U2V9KCk7eS50YWJsZT1MLHkuYnN0cj1mdW5jdGlvbiBRKHZlLFNlKXtmb3IodmFyIEhlPS0xXlNlLEJlPXZlLmxlbmd0aC0xLEdlPTA7R2U8QmU7KUhlPShIZT1IZT4+PjheTFsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UrKykpXSk+Pj44XkxbMjU1JihIZV52ZS5jaGFyQ29kZUF0KEdlKysp''@;'; put 'put ''KV07cmV0dXJuIEdlPT09QmUmJihIZT1IZT4+PjheTFsyNTUmKEhlXnZlLmNoYXJDb2RlQXQoR2UpKV0pLC0xXkhlfSx5LmJ1Zj1mdW5jdGlvbiByZSh2ZSxTZSl7aWYodmUubGVuZ3RoPjFlNClyZXR1cm4gZnVuY3Rpb24gcGUodmUsU2Upe2Zvcih2YXIgSGU9LTFeU2UsQmU9dmUubGVuZ3Ro''@;'; put 'put ''LTcsR2U9MDtHZTxCZTspSGU9KEhlPShIZT0oSGU9KEhlPShIZT0oSGU9KEhlPUhlPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihI''@;'; put 'put ''ZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldO2Zvcig7R2U8QmUrNzspSGU9SGU+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldO3JldHVybi0xXkhlfSh2ZSxTZSk7Zm9yKHZhciBI''@;'; put 'put ''ZT0tMV5TZSxCZT12ZS5sZW5ndGgtMyxHZT0wO0dlPEJlOylIZT0oSGU9KEhlPShIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV0pPj4+OF5MWzI1NSYoSGVedmVbR2UrK10pXSk+Pj44XkxbMjU1JihIZV52ZVtHZSsrXSldKT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07Zm9yKDtHZTxC''@;'; put 'put ''ZSszOylIZT1IZT4+PjheTFsyNTUmKEhlXnZlW0dlKytdKV07cmV0dXJuLTFeSGV9LHkuc3RyPWZ1bmN0aW9uIF9lKHZlLFNlKXtmb3IodmFyIG50LGR0LEhlPS0xXlNlLEJlPTAsR2U9dmUubGVuZ3RoO0JlPEdlOykobnQ9dmUuY2hhckNvZGVBdChCZSsrKSk8MTI4P0hlPUhlPj4+OF5MWzI1''@;'; put 'put ''NSYoSGVebnQpXTpudDwyMDQ4P0hlPShIZT1IZT4+PjheTFsyNTUmKEhlXigxOTJ8bnQ+PjYmMzEpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHw2MyZudCkpXTpudD49NTUyOTYmJm50PDU3MzQ0PyhudD02NCsoMTAyMyZudCksZHQ9MTAyMyZ2ZS5jaGFyQ29kZUF0KEJlKyspLEhlPShIZT0oSGU9''@;'; put 'put ''KEhlPUhlPj4+OF5MWzI1NSYoSGVeKDI0MHxudD4+OCY3KSldKT4+PjheTFsyNTUmKEhlXigxMjh8bnQ+PjImNjMpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHxkdD4+NiYxNXwoMyZudCk8PDQpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHw2MyZkdCkpXSk6SGU9KEhlPShIZT1IZT4+PjheTFsyNTUm''@;'; put 'put ''KEhlXigyMjR8bnQ+PjEyJjE1KSldKT4+PjheTFsyNTUmKEhlXigxMjh8bnQ+PjYmNjMpKV0pPj4+OF5MWzI1NSYoSGVeKDEyOHw2MyZudCkpXTtyZXR1cm4tMV5IZX19KE9lPXt9KTt2YXIgV2UsamU9ZnVuY3Rpb24oKXt2YXIgU2UsUD17fTtmdW5jdGlvbiBRKG5uKXtpZigiLyI9PW5uLmNo''@;'; put 'put ''YXJBdChubi5sZW5ndGgtMSkpcmV0dXJuLTE9PT1ubi5zbGljZSgwLC0xKS5pbmRleE9mKCIvIik/bm46UShubi5zbGljZSgwLC0xKSk7dmFyIF9uPW5uLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT1fbj9ubjpubi5zbGljZSgwLF9uKzEpfWZ1bmN0aW9uIHJlKG5uKXtpZigiLyI9PW5u''@;'; put 'put ''LmNoYXJBdChubi5sZW5ndGgtMSkpcmV0dXJuIHJlKG5uLnNsaWNlKDAsLTEpKTt2YXIgX249bm4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PV9uP25uOm5uLnNsaWNlKF9uKzEpfWZ1bmN0aW9uIHBlKG5uLF9uKXsic3RyaW5nIj09dHlwZW9mIF9uJiYoX249bmV3IERhdGUoX24pKTt2''@;'; put 'put ''YXIgYW49X24uZ2V0SG91cnMoKTthbj0oYW49YW48PDZ8X24uZ2V0TWludXRlcygpKTw8NXxfbi5nZXRTZWNvbmRzKCk+Pj4xLG5uLndyaXRlX3NoaWZ0KDIsYW4pO3ZhciBWdD1fbi5nZXRGdWxsWWVhcigpLTE5ODA7VnQ9KFZ0PVZ0PDw0fF9uLmdldE1vbnRoKCkrMSk8PDV8X24uZ2V0RGF0''@;'; put 'put ''ZSgpLG5uLndyaXRlX3NoaWZ0KDIsVnQpfWZ1bmN0aW9uIHZlKG5uKXtvbChubiwwKTtmb3IodmFyIF9uPXt9LGFuPTA7bm4ubDw9bm4ubGVuZ3RoLTQ7KXt2YXIgVnQ9bm4ucmVhZF9zaGlmdCgyKSxXdD1ubi5yZWFkX3NoaWZ0KDIpLGRuPW5uLmwrV3QsVG49e307MjE1ODk9PT1WdCYmKDEm''@;'; put 'put ''KGFuPW5uLnJlYWRfc2hpZnQoMSkpJiYoVG4ubXRpbWU9bm4ucmVhZF9zaGlmdCg0KSksV3Q+NSYmKDImYW4mJihUbi5hdGltZT1ubi5yZWFkX3NoaWZ0KDQpKSw0JmFuJiYoVG4uY3RpbWU9bm4ucmVhZF9zaGlmdCg0KSkpLFRuLm10aW1lJiYoVG4ubXQ9bmV3IERhdGUoMWUzKlRuLm10aW1l''@;'; put 'put ''KSkpLG5uLmw9ZG4sX25bVnRdPVRufXJldHVybiBfbn1mdW5jdGlvbiBIZSgpe3JldHVybiBTZXx8KFNlPUYoNzg3NzMpKX1mdW5jdGlvbiBCZShubixfbil7aWYoODA9PW5uWzBdJiY3NT09bm5bMV0pcmV0dXJuIEpyKG5uLF9uKTtpZihubi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Q0ZCIGZpbGUgc2l6ZSAiK25uLmxlbmd0aCsiIDwgNTEyIik7dmFyIGFuLFd0LGRuLFRuLG5yLGJyLFZ0PTUxMix6cj1bXSxMcj1ubi5zbGljZSgwLDUxMik7b2woTHIsMCk7dmFyIHhpPWZ1bmN0aW9uIEdlKG5uKXtpZig4MD09bm5bbm4ubF0mJjc1PT1ubltubi5sKzFdKXJldHVyblswLDBd''@;'; put 'put ''O25uLmNoayhWciwiSGVhZGVyIFNpZ25hdHVyZTogIiksbm4ubCs9MTY7dmFyIF9uPW5uLnJlYWRfc2hpZnQoMiwidSIpO3JldHVybltubi5yZWFkX3NoaWZ0KDIsInUiKSxfbl19KExyKTtzd2l0Y2goYW49eGlbMF0pe2Nhc2UgMzpWdD01MTI7YnJlYWs7Y2FzZSA0OlZ0PTQwOTY7YnJlYWs7''@;'; put 'put ''Y2FzZSAwOmlmKDA9PXhpWzFdKXJldHVybiBKcihubixfbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIithbil9NTEyIT09VnQmJm9sKExyPW5uLnNsaWNlKDAsVnQpLDI4KTt2YXIgY2k9bm4uc2xpY2UoMCxWdCk7IWZ1bmN0''@;'; put 'put ''aW9uIG50KG5uLF9uKXt2YXIgYW47c3dpdGNoKG5uLmwrPTIsYW49bm4ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPV9uKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK2FuKTticmVhaztjYXNlIDEyOmlmKDQhPV9uKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''U2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIithbik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIithbil9bm4uY2hrKCIwNjAwIiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLG5uLmNoaygiMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiUmVzZXJ2ZWQ6ICIpfShMcixhbik7dmFyIENvPUxyLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1hbiYmMCE9PUNvKXRocm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBzYXcgIitDbyk7THIubCs9NCxUbj1Mci5yZWFkX3NoaWZ0KDQsImkiKSxMci5s''@;'; put 'put ''Kz00LExyLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksbnI9THIucmVhZF9zaGlmdCg0LCJpIiksV3Q9THIucmVhZF9zaGlmdCg0LCJpIiksYnI9THIucmVhZF9zaGlmdCg0LCJpIiksZG49THIucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciBwbz0tMSxWaT0w''@;'; put 'put ''O1ZpPDEwOSYmISgocG89THIucmVhZF9zaGlmdCg0LCJpIikpPDApOysrVmkpenJbVmldPXBvO3ZhciBVbz1mdW5jdGlvbiBkdChubixfbil7Zm9yKHZhciBhbj1NYXRoLmNlaWwobm4ubGVuZ3RoL19uKS0xLFZ0PVtdLFd0PTE7V3Q8YW47KytXdClWdFtXdC0xXT1ubi5zbGljZShXdCpfbiwo''@;'; put 'put ''V3QrMSkqX24pO3JldHVybiBWdFthbi0xXT1ubi5zbGljZShhbipfbiksVnR9KG5uLFZ0KTtidChicixkbixVbyxWdCx6cik7dmFyIHRpPWZ1bmN0aW9uIEV0KG5uLF9uLGFuLFZ0KXt2YXIgV3Q9bm4ubGVuZ3RoLGRuPVtdLFRuPVtdLG5yPVtdLGJyPVtdLHpyPVZ0LTEsTHI9MCx4aT0wLGNp''@;'; put 'put ''PTAsQ289MDtmb3IoTHI9MDtMcjxXdDsrK0xyKWlmKG5yPVtdLChjaT1Mcitfbik+PVd0JiYoY2ktPVd0KSwhVG5bY2ldKXticj1bXTt2YXIgcG89W107Zm9yKHhpPWNpO3hpPj0wOyl7cG9beGldPSEwLFRuW3hpXT0hMCxucltuci5sZW5ndGhdPXhpLGJyLnB1c2gobm5beGldKTt2YXIgVmk9''@;'; put 'put ''YW5bTWF0aC5mbG9vcig0KnhpL1Z0KV07aWYoVnQ8NCsoQ289NCp4aSZ6cikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIit4aSsiIDQgIitWdCk7aWYoIW5uW1ZpXXx8cG9beGk9b3Mobm5bVmldLENvKV0pYnJlYWt9ZG5bY2ldPXtub2RlczpucixkYXRhOlNhKFti''@;'; put 'put ''cl0pfX1yZXR1cm4gZG59KFVvLFRuLHpyLFZ0KTt0aVtUbl0ubmFtZT0iIURpcmVjdG9yeSIsV3Q+MCYmbnIhPT1abiYmKHRpW25yXS5uYW1lPSIhTWluaUZBVCIpLHRpW3pyWzBdXS5uYW1lPSIhRkFUIix0aS5mYXRfYWRkcnM9enIsdGkuc3N6PVZ0O3ZhciBsYz1bXSxOdT1bXSxWNj1bXTso''@;'; put 'put ''ZnVuY3Rpb24gVHQobm4sX24sYW4sVnQsV3QsZG4sVG4sbnIpe2Zvcih2YXIgQ28sYnI9MCx6cj1WdC5sZW5ndGg/MjowLExyPV9uW25uXS5kYXRhLHhpPTAsY2k9MDt4aTxMci5sZW5ndGg7eGkrPTEyOCl7dmFyIHBvPUxyLnNsaWNlKHhpLHhpKzEyOCk7b2wocG8sNjQpLGNpPXBvLnJlYWRf''@;'; put 'put ''c2hpZnQoMiksQ289RXUocG8sMCxjaS16ciksVnQucHVzaChDbyk7dmFyIFZpPXtuYW1lOkNvLHR5cGU6cG8ucmVhZF9zaGlmdCgxKSxjb2xvcjpwby5yZWFkX3NoaWZ0KDEpLEw6cG8ucmVhZF9zaGlmdCg0LCJpIiksUjpwby5yZWFkX3NoaWZ0KDQsImkiKSxDOnBvLnJlYWRfc2hpZnQoNCwi''@;'; put 'put ''aSIpLGNsc2lkOnBvLnJlYWRfc2hpZnQoMTYpLHN0YXRlOnBvLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTswIT09cG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKSYmKFZpLmN0PVp0KHBvLHBvLmwtOCkp''@;'; put 'put ''LDAhPT1wby5yZWFkX3NoaWZ0KDIpK3BvLnJlYWRfc2hpZnQoMikrcG8ucmVhZF9zaGlmdCgyKStwby5yZWFkX3NoaWZ0KDIpJiYoVmkubXQ9WnQocG8scG8ubC04KSksVmkuc3RhcnQ9cG8ucmVhZF9zaGlmdCg0LCJpIiksVmkuc2l6ZT1wby5yZWFkX3NoaWZ0KDQsImkiKSxWaS5zaXplPDAm''@;'; put 'put ''JlZpLnN0YXJ0PDAmJihWaS5zaXplPVZpLnR5cGU9MCxWaS5zdGFydD1abixWaS5uYW1lPSIiKSw1PT09VmkudHlwZT8oYnI9Vmkuc3RhcnQsV3Q+MCYmYnIhPT1abiYmKF9uW2JyXS5uYW1lPSIhU3RyZWFtRGF0YSIpKTpWaS5zaXplPj00MDk2PyhWaS5zdG9yYWdlPSJmYXQiLHZvaWQgMD09''@;'; put 'put ''PV9uW1ZpLnN0YXJ0XSYmKF9uW1ZpLnN0YXJ0XT1GdChhbixWaS5zdGFydCxfbi5mYXRfYWRkcnMsX24uc3N6KSksX25bVmkuc3RhcnRdLm5hbWU9VmkubmFtZSxWaS5jb250ZW50PV9uW1ZpLnN0YXJ0XS5kYXRhLnNsaWNlKDAsVmkuc2l6ZSkpOihWaS5zdG9yYWdlPSJtaW5pZmF0IixWaS5z''@;'; put 'put ''aXplPDA/Vmkuc2l6ZT0wOmJyIT09Wm4mJlZpLnN0YXJ0IT09Wm4mJl9uW2JyXSYmKFZpLmNvbnRlbnQ9Y3QoVmksX25bYnJdLmRhdGEsKF9uW25yXXx8e30pLmRhdGEpKSksVmkuY29udGVudCYmb2woVmkuY29udGVudCwwKSxkbltDb109VmksVG4ucHVzaChWaSl9fSkoVG4sdGksVW8sbGMs''@;'; put 'put ''V3Qse30sTnUsbnIpLGZ1bmN0aW9uIEN0KG5uLF9uLGFuKXtmb3IodmFyIFZ0PTAsV3Q9MCxkbj0wLFRuPTAsbnI9MCxicj1hbi5sZW5ndGgsenI9W10sTHI9W107VnQ8YnI7KytWdCl6cltWdF09THJbVnRdPVZ0LF9uW1Z0XT1hbltWdF07Zm9yKDtucjxMci5sZW5ndGg7KytucilXdD1ubltW''@;'; put 'put ''dD1Mcltucl1dLkwsZG49bm5bVnRdLlIsVG49bm5bVnRdLkMsenJbVnRdPT09VnQmJigtMSE9PVd0JiZ6cltXdF0hPT1XdCYmKHpyW1Z0XT16cltXdF0pLC0xIT09ZG4mJnpyW2RuXSE9PWRuJiYoenJbVnRdPXpyW2RuXSkpLC0xIT09VG4mJih6cltUbl09VnQpLC0xIT09V3QmJlZ0IT16cltW''@;'; put 'put ''dF0mJih6cltXdF09enJbVnRdLExyLmxhc3RJbmRleE9mKFd0KTxuciYmTHIucHVzaChXdCkpLC0xIT09ZG4mJlZ0IT16cltWdF0mJih6cltkbl09enJbVnRdLExyLmxhc3RJbmRleE9mKGRuKTxuciYmTHIucHVzaChkbikpO2ZvcihWdD0xO1Z0PGJyOysrVnQpenJbVnRdPT09VnQmJigtMSE9''@;'; put 'put ''PWRuJiZ6cltkbl0hPT1kbj96cltWdF09enJbZG5dOi0xIT09V3QmJnpyW1d0XSE9PVd0JiYoenJbVnRdPXpyW1d0XSkpO2ZvcihWdD0xO1Z0PGJyOysrVnQpaWYoMCE9PW5uW1Z0XS50eXBlKXtpZigobnI9VnQpIT16cltucl0pZG97X25bVnRdPV9uW25yPXpyW25yXV0rIi8iK19uW1Z0XX13''@;'; put 'put ''aGlsZSgwIT09bnImJi0xIT09enJbbnJdJiZuciE9enJbbnJdKTt6cltWdF09LTF9Zm9yKF9uWzBdKz0iLyIsVnQ9MTtWdDxicjsrK1Z0KTIhPT1ubltWdF0udHlwZSYmKF9uW1Z0XSs9Ii8iKX0oTnUsVjYsbGMpLGxjLnNoaWZ0KCk7dmFyIHdmPXtGaWxlSW5kZXg6TnUsRnVsbFBhdGhzOlY2''@;'; put 'put ''fTtyZXR1cm4gX24mJl9uLnJhdyYmKHdmLnJhdz17aGVhZGVyOmNpLHNlY3RvcnM6VW99KSx3Zn1mdW5jdGlvbiBjdChubixfbixhbil7Zm9yKHZhciBXdD1ubi5zaXplLGRuPVtdLFRuPW5uLnN0YXJ0O2FuJiZXdD4wJiZUbj49MDspZG4ucHVzaChfbi5zbGljZShUbip0cixUbip0cit0cikp''@;'; put 'put ''LFd0LT10cixUbj1vcyhhbiw0KlRuKTtyZXR1cm4gMD09PWRuLmxlbmd0aD9mcigwKTpTKGRuKS5zbGljZSgwLG5uLnNpemUpfWZ1bmN0aW9uIGJ0KG5uLF9uLGFuLFZ0LFd0KXt2YXIgZG49Wm47aWYobm49PT1abil7aWYoMCE9PV9uKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hv''@;'; put 'put ''cnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW5uKXt2YXIgVG49YW5bbm5dLG5yPShWdD4+PjIpLTE7aWYoIVRuKXJldHVybjtmb3IodmFyIGJyPTA7YnI8bnImJihkbj1vcyhUbiw0KmJyKSkhPT1abjsrK2JyKVd0LnB1c2goZG4pO2J0KG9zKFRuLFZ0LTQpLF9uLTEsYW4sVnQs''@;'; put 'put ''V3QpfX1mdW5jdGlvbiBGdChubixfbixhbixWdCxXdCl7dmFyIGRuPVtdLFRuPVtdO1d0fHwoV3Q9W10pO3ZhciBucj1WdC0xLGJyPTAsenI9MDtmb3IoYnI9X247YnI+PTA7KXtXdFticl09ITAsZG5bZG4ubGVuZ3RoXT1icixUbi5wdXNoKG5uW2JyXSk7dmFyIExyPWFuW01hdGguZmxvb3Io''@;'; put 'put ''NCpici9WdCldO2lmKFZ0PDQrKHpyPTQqYnImbnIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrYnIrIiA0ICIrVnQpO2lmKCFubltMcl0pYnJlYWs7YnI9b3Mobm5bTHJdLHpyKX1yZXR1cm57bm9kZXM6ZG4sZGF0YTpTYShbVG5dKX19ZnVuY3Rpb24gWnQobm4s''@;'; put 'put ''X24pe3JldHVybiBuZXcgRGF0ZSgxZTMqKHlpKG5uLF9uKzQpLzFlNypNYXRoLnBvdygyLDMyKSt5aShubixfbikvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24gdW4obm4sX24pe3ZhciBhbj1fbnx8e30sVnQ9YW4ucm9vdHx8IlJvb3QgRW50cnkiO2lmKG5uLkZ1bGxQYXRoc3x8KG5uLkZ1''@;'; put 'put ''bGxQYXRocz1bXSksbm4uRmlsZUluZGV4fHwobm4uRmlsZUluZGV4PVtdKSxubi5GdWxsUGF0aHMubGVuZ3RoIT09bm4uRmlsZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIgc3RydWN0dXJlIik7MD09PW5uLkZ1bGxQYXRocy5sZW5ndGgmJihubi5GdWxs''@;'; put 'put ''UGF0aHNbMF09VnQrIi8iLG5uLkZpbGVJbmRleFswXT17bmFtZTpWdCx0eXBlOjV9KSxhbi5DTFNJRCYmKG5uLkZpbGVJbmRleFswXS5jbHNpZD1hbi5DTFNJRCksZnVuY3Rpb24gcW4obm4pe3ZhciBfbj0iXHgwMVNoMzN0SjUiO2lmKCFqZS5maW5kKG5uLCIvIitfbikpe3ZhciBhbj1mcig0''@;'; put 'put ''KTthblswXT01NSxhblsxXT1hblszXT01MCxhblsyXT01NCxubi5GaWxlSW5kZXgucHVzaCh7bmFtZTpfbix0eXBlOjIsY29udGVudDphbixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxubi5GdWxsUGF0aHMucHVzaChubi5GdWxsUGF0aHNbMF0rX24pLHpuKG5uKX19KG5uKX1mdW5jdGlvbiB6''@;'; put 'put ''bihubixfbil7dW4obm4pO2Zvcih2YXIgYW49ITEsVnQ9ITEsV3Q9bm4uRnVsbFBhdGhzLmxlbmd0aC0xO1d0Pj0wOy0tV3Qpe3ZhciBkbj1ubi5GaWxlSW5kZXhbV3RdO3N3aXRjaChkbi50eXBlKXtjYXNlIDA6VnQ/YW49ITA6KG5uLkZpbGVJbmRleC5wb3AoKSxubi5GdWxsUGF0aHMucG9w''@;'; put 'put ''KCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1OlZ0PSEwLGlzTmFOKGRuLlIqZG4uTCpkbi5DKSYmKGFuPSEwKSxkbi5SPi0xJiZkbi5MPi0xJiZkbi5SPT1kbi5MJiYoYW49ITApO2JyZWFrO2RlZmF1bHQ6YW49ITB9fWlmKGFufHxfbil7dmFyIFRuPW5ldyBEYXRlKDE5ODcsMSwxOSks''@;'; put 'put ''bnI9MCxicj1bXTtmb3IoV3Q9MDtXdDxubi5GdWxsUGF0aHMubGVuZ3RoOysrV3QpMCE9PW5uLkZpbGVJbmRleFtXdF0udHlwZSYmYnIucHVzaChbbm4uRnVsbFBhdGhzW1d0XSxubi5GaWxlSW5kZXhbV3RdXSk7Zm9yKFd0PTA7V3Q8YnIubGVuZ3RoOysrV3Qpe3ZhciB6cj1RKGJyW1d0XVsw''@;'; put 'put ''XSk7Zm9yKFZ0PSExLG5yPTA7bnI8YnIubGVuZ3RoOysrbnIpYnJbbnJdWzBdPT09enImJihWdD0hMCk7VnR8fGJyLnB1c2goW3pyLHtuYW1lOnJlKHpyKS5yZXBsYWNlKCIvIiwiIiksdHlwZToxLGNsc2lkOmtpLGN0OlRuLG10OlRuLGNvbnRlbnQ6bnVsbH1dKX1mb3IoYnIuc29ydChmdW5j''@;'; put 'put ''dGlvbihjaSxDbyl7cmV0dXJuIGZ1bmN0aW9uIEwobm4sX24pe2Zvcih2YXIgYW49bm4uc3BsaXQoIi8iKSxWdD1fbi5zcGxpdCgiLyIpLFd0PTAsZG49MCxUbj1NYXRoLm1pbihhbi5sZW5ndGgsVnQubGVuZ3RoKTtXdDxUbjsrK1d0KXtpZihkbj1hbltXdF0ubGVuZ3RoLVZ0W1d0XS5sZW5n''@;'; put 'put ''dGgpcmV0dXJuIGRuO2lmKGFuW1d0XSE9VnRbV3RdKXJldHVybiBhbltXdF08VnRbV3RdPy0xOjF9cmV0dXJuIGFuLmxlbmd0aC1WdC5sZW5ndGh9KGNpWzBdLENvWzBdKX0pLG5uLkZ1bGxQYXRocz1bXSxubi5GaWxlSW5kZXg9W10sV3Q9MDtXdDxici5sZW5ndGg7KytXdClubi5GdWxsUGF0''@;'; put 'put ''aHNbV3RdPWJyW1d0XVswXSxubi5GaWxlSW5kZXhbV3RdPWJyW1d0XVsxXTtmb3IoV3Q9MDtXdDxici5sZW5ndGg7KytXdCl7dmFyIExyPW5uLkZpbGVJbmRleFtXdF0seGk9bm4uRnVsbFBhdGhzW1d0XTtpZihMci5uYW1lPXJlKHhpKS5yZXBsYWNlKCIvIiwiIiksTHIuTD1Mci5SPUxyLkM9''@;'; put 'put ''LShMci5jb2xvcj0xKSxMci5zaXplPUxyLmNvbnRlbnQ/THIuY29udGVudC5sZW5ndGg6MCxMci5zdGFydD0wLExyLmNsc2lkPUxyLmNsc2lkfHxraSwwPT09V3QpTHIuQz1ici5sZW5ndGg+MT8xOi0xLExyLnNpemU9MCxMci50eXBlPTU7ZWxzZSBpZigiLyI9PXhpLnNsaWNlKC0xKSl7Zm9y''@;'; put 'put ''KG5yPVd0KzE7bnI8YnIubGVuZ3RoJiZRKG5uLkZ1bGxQYXRoc1tucl0pIT14aTsrK25yKTtmb3IoTHIuQz1ucj49YnIubGVuZ3RoPy0xOm5yLG5yPVd0KzE7bnI8YnIubGVuZ3RoJiZRKG5uLkZ1bGxQYXRoc1tucl0pIT1RKHhpKTsrK25yKTtMci5SPW5yPj1ici5sZW5ndGg/LTE6bnIsTHIu''@;'; put 'put ''dHlwZT0xfWVsc2UgUShubi5GdWxsUGF0aHNbV3QrMV18fCIiKT09USh4aSkmJihMci5SPVd0KzEpLExyLnR5cGU9Mn19fWZ1bmN0aW9uIGtuKG5uLF9uKXt2YXIgYW49X258fHt9O2lmKHpuKG5uKSwiemlwIj09YW4uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIHZzKG5uLF9uKXt2YXIgYW49''@;'; put 'put ''X258fHt9LFZ0PVtdLFd0PVtdLGRuPWZyKDEpLFRuPWFuLmNvbXByZXNzaW9uPzg6MCxucj0wLHpyPTAsTHI9MCx4aT0wLGNpPTAsQ289bm4uRnVsbFBhdGhzWzBdLHBvPUNvLFZpPW5uLkZpbGVJbmRleFswXSxVbz1bXSx0aT0wO2Zvcih6cj0xO3pyPG5uLkZ1bGxQYXRocy5sZW5ndGg7Kyt6''@;'; put 'put ''cilpZihwbz1ubi5GdWxsUGF0aHNbenJdLnNsaWNlKENvLmxlbmd0aCksKFZpPW5uLkZpbGVJbmRleFt6cl0pLnNpemUmJlZpLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPXBvKXt2YXIgemw9eGksbGM9ZnIocG8ubGVuZ3RoKTtmb3IoTHI9MDtMcjxwby5sZW5ndGg7KytMcilsYy53cml0ZV9z''@;'; put 'put ''aGlmdCgxLDEyNyZwby5jaGFyQ29kZUF0KExyKSk7bGM9bGMuc2xpY2UoMCxsYy5sKSxVb1tjaV09T2UuYnVmKFZpLmNvbnRlbnQsMCk7dmFyIE51PVZpLmNvbnRlbnQ7OD09VG4mJihOdT1wcihOdSkpLChkbj1mcigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLGRuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsMjApLGRuLndyaXRlX3NoaWZ0KDIsbnIpLGRuLndyaXRlX3NoaWZ0KDIsVG4pLFZpLm10P3BlKGRuLFZpLm10KTpkbi53cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KC00LDgmbnI/MDpVb1tjaV0pLGRuLndyaXRlX3NoaWZ0KDQsOCZucj8wOk51Lmxlbmd0aCksZG4ud3JpdGVf''@;'; put 'put ''c2hpZnQoNCw4Jm5yPzA6VmkuY29udGVudC5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsbGMubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLDApLHhpKz1kbi5sZW5ndGgsVnQucHVzaChkbikseGkrPWxjLmxlbmd0aCxWdC5wdXNoKGxjKSx4aSs9TnUubGVuZ3RoLFZ0LnB1c2goTnUpLDgmbnIm''@;'; put 'put ''JigoZG49ZnIoMTIpKS53cml0ZV9zaGlmdCgtNCxVb1tjaV0pLGRuLndyaXRlX3NoaWZ0KDQsTnUubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCg0LFZpLmNvbnRlbnQubGVuZ3RoKSx4aSs9ZG4ubCxWdC5wdXNoKGRuKSksKGRuPWZyKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCksZG4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDIwKSxkbi53cml0ZV9zaGlmdCgyLG5yKSxkbi53cml0ZV9zaGlmdCgyLFRuKSxkbi53cml0ZV9zaGlmdCg0LDApLGRuLndyaXRlX3NoaWZ0KC00LFVvW2NpXSksZG4ud3JpdGVfc2hpZnQoNCxOdS5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsVmkuY29udGVudC5sZW5ndGgpLGRuLndyaXRlX3NoaWZ0KDIsbGMubGVuZ3RoKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMiwwKSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDQsMCksZG4ud3JpdGVfc2hpZnQo''@;'; put 'put ''NCx6bCksdGkrPWRuLmwsV3QucHVzaChkbiksdGkrPWxjLmxlbmd0aCxXdC5wdXNoKGxjKSwrK2NpfXJldHVybihkbj1mcigyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxkbi53cml0ZV9zaGlmdCgyLDApLGRuLndyaXRlX3NoaWZ0KDIsMCksZG4ud3JpdGVfc2hpZnQoMixjaSksZG4u''@;'; put 'put ''d3JpdGVfc2hpZnQoMixjaSksZG4ud3JpdGVfc2hpZnQoNCx0aSksZG4ud3JpdGVfc2hpZnQoNCx4aSksZG4ud3JpdGVfc2hpZnQoMiwwKSxTKFtTKFZ0KSxTKFd0KSxkbl0pfShubixhbik7dmFyIFZ0PWZ1bmN0aW9uKENvKXtmb3IodmFyIHBvPTAsVmk9MCxVbz0wO1VvPENvLkZpbGVJbmRl''@;'; put 'put ''eC5sZW5ndGg7KytVbyl7dmFyIHRpPUNvLkZpbGVJbmRleFtVb107aWYodGkuY29udGVudCl7dmFyIHpsPXRpLmNvbnRlbnQubGVuZ3RoO3psPjAmJih6bDw0MDk2P3BvKz16bCs2Mz4+NjpWaSs9emwrNTExPj45KX19Zm9yKHZhciBsYz1Dby5GdWxsUGF0aHMubGVuZ3RoKzM+PjIsVjY9cG8r''@;'; put 'put ''MTI3Pj43LHdmPShwbys3Pj4zKStWaStsYytWNixxZD13ZisxMjc+PjcsYl89cWQ8PTEwOT8wOk1hdGguY2VpbCgocWQtMTA5KS8xMjcpO3dmK3FkK2JfKzEyNz4+Nz5xZDspYl89KytxZDw9MTA5PzA6TWF0aC5jZWlsKChxZC0xMDkpLzEyNyk7dmFyIFExPVsxLGJfLHFkLFY2LGxjLFZpLHBv''@;'; put 'put ''LDBdO3JldHVybiBDby5GaWxlSW5kZXhbMF0uc2l6ZT1wbzw8NixRMVs3XT0oQ28uRmlsZUluZGV4WzBdLnN0YXJ0PVExWzBdK1ExWzFdK1ExWzJdK1ExWzNdK1ExWzRdK1ExWzVdKSsoUTFbNl0rNz4+MyksUTF9KG5uKSxXdD1mcihWdFs3XTw8OSksZG49MCxUbj0wO2Zvcihkbj0wO2RuPDg7''@;'; put 'put ''KytkbilXdC53cml0ZV9zaGlmdCgxLG9pW2RuXSk7Zm9yKGRuPTA7ZG48ODsrK2RuKVd0LndyaXRlX3NoaWZ0KDIsMCk7Zm9yKFd0LndyaXRlX3NoaWZ0KDIsNjIpLFd0LndyaXRlX3NoaWZ0KDIsMyksV3Qud3JpdGVfc2hpZnQoMiw2NTUzNCksV3Qud3JpdGVfc2hpZnQoMiw5KSxXdC53cml0''@;'; put 'put ''ZV9zaGlmdCgyLDYpLGRuPTA7ZG48MzsrK2RuKVd0LndyaXRlX3NoaWZ0KDIsMCk7Zm9yKFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCxWdFsyXSksV3Qud3JpdGVfc2hpZnQoNCxWdFswXStWdFsxXStWdFsyXStWdFszXS0xKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0Lndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsNDA5NiksV3Qud3JpdGVfc2hpZnQoNCxWdFszXT9WdFswXStWdFsxXStWdFsyXS0xOlpuKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzNdKSxXdC53cml0ZV9zaGlmdCgtNCxWdFsxXT9WdFswXS0xOlpuKSxXdC53cml0ZV9zaGlmdCg0LFZ0WzFdKSxkbj0wO2RuPDEwOTsrK2Ru''@;'; put 'put ''KVd0LndyaXRlX3NoaWZ0KC00LGRuPFZ0WzJdP1Z0WzFdK2RuOi0xKTtpZihWdFsxXSlmb3IoVG49MDtUbjxWdFsxXTsrK1RuKXtmb3IoO2RuPDIzNisxMjcqVG47KytkbilXdC53cml0ZV9zaGlmdCgtNCxkbjxWdFsyXT9WdFsxXStkbjotMSk7V3Qud3JpdGVfc2hpZnQoLTQsVG49PT1WdFsx''@;'; put 'put ''XS0xP1puOlRuKzEpfXZhciBucj1mdW5jdGlvbihDbyl7Zm9yKFRuKz1DbztkbjxUbi0xOysrZG4pV3Qud3JpdGVfc2hpZnQoLTQsZG4rMSk7Q28mJigrK2RuLFd0LndyaXRlX3NoaWZ0KC00LFpuKSl9O2ZvcihUbj1kbj0wLFRuKz1WdFsxXTtkbjxUbjsrK2RuKVd0LndyaXRlX3NoaWZ0KC00''@;'; put 'put ''LExpLkRJRlNFQ1QpO2ZvcihUbis9VnRbMl07ZG48VG47KytkbilXdC53cml0ZV9zaGlmdCgtNCxMaS5GQVRTRUNUKTtucihWdFszXSksbnIoVnRbNF0pO2Zvcih2YXIgYnI9MCx6cj0wLExyPW5uLkZpbGVJbmRleFswXTticjxubi5GaWxlSW5kZXgubGVuZ3RoOysrYnIpKExyPW5uLkZpbGVJ''@;'; put 'put ''bmRleFticl0pLmNvbnRlbnQmJiEoKHpyPUxyLmNvbnRlbnQubGVuZ3RoKTw0MDk2KSYmKExyLnN0YXJ0PVRuLG5yKHpyKzUxMT4+OSkpO2ZvcihucihWdFs2XSs3Pj4zKTs1MTEmV3QubDspV3Qud3JpdGVfc2hpZnQoLTQsTGkuRU5ET0ZDSEFJTik7Zm9yKFRuPWRuPTAsYnI9MDticjxubi5G''@;'; put 'put ''aWxlSW5kZXgubGVuZ3RoOysrYnIpKExyPW5uLkZpbGVJbmRleFticl0pLmNvbnRlbnQmJih6cj1Mci5jb250ZW50Lmxlbmd0aCkmJiEoenI+PTQwOTYpJiYoTHIuc3RhcnQ9VG4sbnIoenIrNjM+PjYpKTtmb3IoOzUxMSZXdC5sOylXdC53cml0ZV9zaGlmdCgtNCxMaS5FTkRPRkNIQUlOKTtm''@;'; put 'put ''b3IoZG49MDtkbjxWdFs0XTw8MjsrK2RuKXt2YXIgeGk9bm4uRnVsbFBhdGhzW2RuXTtpZih4aSYmMCE9PXhpLmxlbmd0aCl7THI9bm4uRmlsZUluZGV4W2RuXSwwPT09ZG4mJihMci5zdGFydD1Mci5zaXplP0xyLnN0YXJ0LTE6Wm4pO3ZhciBjaT0wPT09ZG4mJmFuLnJvb3R8fExyLm5hbWU7''@;'; put 'put ''aWYoenI9MiooY2kubGVuZ3RoKzEpLFd0LndyaXRlX3NoaWZ0KDY0LGNpLCJ1dGYxNmxlIiksV3Qud3JpdGVfc2hpZnQoMix6ciksV3Qud3JpdGVfc2hpZnQoMSxMci50eXBlKSxXdC53cml0ZV9zaGlmdCgxLExyLmNvbG9yKSxXdC53cml0ZV9zaGlmdCgtNCxMci5MKSxXdC53cml0ZV9zaGlm''@;'; put 'put ''dCgtNCxMci5SKSxXdC53cml0ZV9zaGlmdCgtNCxMci5DKSxMci5jbHNpZClXdC53cml0ZV9zaGlmdCgxNixMci5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoYnI9MDticjw0OysrYnIpV3Qud3JpdGVfc2hpZnQoNCwwKTtXdC53cml0ZV9zaGlmdCg0LExyLnN0YXRlfHwwKSxXdC53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsMCksV3Qud3JpdGVfc2hpZnQoNCwwKSxXdC53cml0ZV9zaGlmdCg0LDApLFd0LndyaXRlX3NoaWZ0KDQsTHIuc3RhcnQpLFd0LndyaXRlX3NoaWZ0KDQsTHIuc2l6ZSksV3Qud3JpdGVfc2hpZnQoNCwwKX1lbHNle2Zvcihicj0wO2JyPDE3OysrYnIp''@;'; put 'put ''V3Qud3JpdGVfc2hpZnQoNCwwKTtmb3IoYnI9MDticjwzOysrYnIpV3Qud3JpdGVfc2hpZnQoNCwtMSk7Zm9yKGJyPTA7YnI8MTI7KyticilXdC53cml0ZV9zaGlmdCg0LDApfX1mb3IoZG49MTtkbjxubi5GaWxlSW5kZXgubGVuZ3RoOysrZG4paWYoKExyPW5uLkZpbGVJbmRleFtkbl0pLnNp''@;'; put 'put ''emU+PTQwOTYpe2ZvcihXdC5sPUxyLnN0YXJ0KzE8PDksYnI9MDticjxMci5zaXplOysrYnIpV3Qud3JpdGVfc2hpZnQoMSxMci5jb250ZW50W2JyXSk7Zm9yKDs1MTEmYnI7KyticilXdC53cml0ZV9zaGlmdCgxLDApfWZvcihkbj0xO2RuPG5uLkZpbGVJbmRleC5sZW5ndGg7KytkbilpZigo''@;'; put 'put ''THI9bm4uRmlsZUluZGV4W2RuXSkuc2l6ZT4wJiZMci5zaXplPDQwOTYpe2Zvcihicj0wO2JyPExyLnNpemU7KyticilXdC53cml0ZV9zaGlmdCgxLExyLmNvbnRlbnRbYnJdKTtmb3IoOzYzJmJyOysrYnIpV3Qud3JpdGVfc2hpZnQoMSwwKX1mb3IoO1d0Lmw8V3QubGVuZ3RoOylXdC53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDApO3JldHVybiBXdH1QLnZlcnNpb249IjEuMS40Ijt2YXIgdnIsdHI9NjQsWm49LTIsVnI9ImQwY2YxMWUwYTFiMTFhZTEiLG9pPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sa2k9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIixMaT17TUFYUkVH''@;'; put 'put ''U0VDVDotNixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjpabixGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOlZyLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmtpLEVudHJ5VHlwZXM6WyJ1bmtub3du''@;'; put 'put ''Iiwic3RvcmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiB1cihubil7Zm9yKHZhciBfbj1uZXcgQXJyYXkobm4ubGVuZ3RoKSxhbj0wO2FuPG5uLmxlbmd0aDsrK2FuKV9uW2FuXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG5uW2FuXSk7cmV0dXJu''@;'; put 'put ''IF9uLmpvaW4oIiIpfWZ1bmN0aW9uIHByKG5uKXtyZXR1cm4gdnI/dnIuZGVmbGF0ZVJhd1N5bmMobm4pOmdsKG5uKX1mb3IodmFyIG5uLF9uLENpPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqcj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwx''@;'; put 'put ''NywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OF0samk9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwx''@;'; put 'put ''NjM4NSwyNDU3N10sRGk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLFlvPURpP25ldyBVaW50OEFycmF5KDI1Nik6W10sbG89MDtsbzwyNTY7KytsbylZb1tsb109KHZvaWQgMCwyNTUmKChfbj0xMzk1MzYmKChubj1sbyk8PDF8bm48PDExKXw1NTgxNDQmKG5uPDw1fG5uPDwxNSkpPj4xNnxfbj4+''@;'; put 'put ''OHxfbikpO2Z1bmN0aW9uIEFvKG5uLF9uKXt2YXIgYW49WW9bMjU1Jm5uXTtyZXR1cm4gX248PTg/YW4+Pj44LV9uOihhbj1hbjw8OHxZb1tubj4+OCYyNTVdLF9uPD0xNj9hbj4+PjE2LV9uOihhbj1hbjw8OHxZb1tubj4+MTYmMjU1XSk+Pj4yNC1fbil9ZnVuY3Rpb24geG8obm4sX24pe3Zh''@;'; put 'put ''ciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4obm5bVnRdfChhbjw9Nj8wOm5uW1Z0KzFdPDw4KSk+Pj5hbiYzfWZ1bmN0aW9uIGhpKG5uLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKG5uW1Z0XXwoYW48PTU/MDpubltWdCsxXTw8OCkpPj4+YW4mN31mdW5jdGlvbiBNbihubixf''@;'; put 'put ''bil7dmFyIGFuPTcmX24sVnQ9X24+Pj4zO3JldHVybihubltWdF18KGFuPD0zPzA6bm5bVnQrMV08PDgpKT4+PmFuJjMxfWZ1bmN0aW9uIE1zKG5uLF9uKXt2YXIgYW49NyZfbixWdD1fbj4+PjM7cmV0dXJuKG5uW1Z0XXwoYW48PTE/MDpubltWdCsxXTw8OCkpPj4+YW4mMTI3fWZ1bmN0aW9u''@;'; put 'put ''IHlzKG5uLF9uLGFuKXt2YXIgVnQ9NyZfbixXdD1fbj4+PjMsVG49bm5bV3RdPj4+VnQ7cmV0dXJuIGFuPDgtVnR8fChUbnw9bm5bV3QrMV08PDgtVnQsYW48MTYtVnQpfHwoVG58PW5uW1d0KzJdPDwxNi1WdCxhbjwyNC1WdCl8fChUbnw9bm5bV3QrM108PDI0LVZ0KSxUbiYoMTw8YW4pLTF9''@;'; put 'put ''ZnVuY3Rpb24gRWwobm4sX24pe3ZhciBhbj1ubi5sZW5ndGgsVnQ9Miphbj5fbj8yKmFuOl9uKzUsV3Q9MDtpZihhbj49X24pcmV0dXJuIG5uO2lmKGhlKXt2YXIgZG49YihWdCk7aWYobm4uY29weSlubi5jb3B5KGRuKTtlbHNlIGZvcig7V3Q8bm4ubGVuZ3RoOysrV3QpZG5bV3RdPW5uW1d0''@;'; put 'put ''XTtyZXR1cm4gZG59aWYoRGkpe3ZhciBUbj1uZXcgVWludDhBcnJheShWdCk7aWYoVG4uc2V0KVRuLnNldChubik7ZWxzZSBmb3IoO1d0PG5uLmxlbmd0aDsrK1d0KVRuW1d0XT1ubltXdF07cmV0dXJuIFRufXJldHVybiBubi5sZW5ndGg9VnQsbm59ZnVuY3Rpb24gc2wobm4pe2Zvcih2YXIg''@;'; put 'put ''X249bmV3IEFycmF5KG5uKSxhbj0wO2FuPG5uOysrYW4pX25bYW5dPTA7cmV0dXJuIF9ufXZhciBnbD1mdW5jdGlvbihfbil7dmFyIGFuPWZyKDUwK01hdGguZmxvb3IoMS4xKl9uLmxlbmd0aCkpLFZ0PWZ1bmN0aW9uKGFuLFZ0KXtmb3IodmFyIFd0PTA7V3Q8YW4ubGVuZ3RoOyl7dmFyIGRu''@;'; put 'put ''PU1hdGgubWluKDY1NTM1LGFuLmxlbmd0aC1XdCk7Zm9yKFZ0LndyaXRlX3NoaWZ0KDEsKyhXdCtkbj09YW4ubGVuZ3RoKSksVnQud3JpdGVfc2hpZnQoMixkbiksVnQud3JpdGVfc2hpZnQoMiw2NTUzNSZ+ZG4pO2RuLS0gPjA7KVZ0W1Z0LmwrK109YW5bV3QrK119cmV0dXJuIFZ0Lmx9KF9u''@;'; put 'put ''LGFuKTtyZXR1cm4gYW4uc2xpY2UoMCxWdCl9O2Z1bmN0aW9uIG51KG5uLF9uLGFuKXt2YXIgVnQ9MSxXdD0wLGRuPTAsVG49MCxucj0wLGJyPW5uLmxlbmd0aCx6cj1EaT9uZXcgVWludDE2QXJyYXkoMzIpOnNsKDMyKTtmb3IoZG49MDtkbjwzMjsrK2RuKXpyW2RuXT0wO2Zvcihkbj1icjtk''@;'; put 'put ''bjxhbjsrK2RuKW5uW2RuXT0wO2JyPW5uLmxlbmd0aDt2YXIgTHI9RGk/bmV3IFVpbnQxNkFycmF5KGJyKTpzbChicik7Zm9yKGRuPTA7ZG48YnI7Kytkbil6cltXdD1ubltkbl1dKyssVnQ8V3QmJihWdD1XdCksTHJbZG5dPTA7Zm9yKHpyWzBdPTAsZG49MTtkbjw9VnQ7Kytkbil6cltkbisx''@;'; put 'put ''Nl09bnI9bnIrenJbZG4tMV08PDE7Zm9yKGRuPTA7ZG48YnI7KytkbikwIT0obnI9bm5bZG5dKSYmKExyW2RuXT16cltucisxNl0rKyk7dmFyIHhpPTA7Zm9yKGRuPTA7ZG48YnI7KytkbilpZigwIT0oeGk9bm5bZG5dKSlmb3IobnI9QW8oTHJbZG5dLFZ0KT4+VnQteGksVG49KDE8PFZ0KzQt''@;'; put 'put ''eGkpLTE7VG4+PTA7LS1UbilfbltucnxUbjw8eGldPTE1JnhpfGRuPDw0O3JldHVybiBWdH12YXIgdGw9RGk/bmV3IFVpbnQxNkFycmF5KDUxMik6c2woNTEyKSxLdD1EaT9uZXcgVWludDE2QXJyYXkoMzIpOnNsKDMyKTtpZighRGkpe2Zvcih2YXIgZ249MDtnbjw1MTI7Kytnbil0bFtnbl09''@;'; put 'put ''MDtmb3IoZ249MDtnbjwzMjsrK2duKUt0W2duXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbm49W10sX249MDtfbjwzMjtfbisrKW5uLnB1c2goNSk7bnUobm4sS3QsMzIpO3ZhciBhbj1bXTtmb3IoX249MDtfbjw9MTQzO19uKyspYW4ucHVzaCg4KTtmb3IoO19uPD0yNTU7X24rKylhbi5wdXNo''@;'; put 'put ''KDkpO2Zvcig7X248PTI3OTtfbisrKWFuLnB1c2goNyk7Zm9yKDtfbjw9Mjg3O19uKyspYW4ucHVzaCg4KTtudShhbix0bCwyODgpfSgpO3ZhciBMbj1EaT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOnNsKDMyNzY4KSxXcj1EaT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOnNsKDMyNzY4KSxYbj1E''@;'; put 'put ''aT9uZXcgVWludDE2QXJyYXkoMTI4KTpzbCgxMjgpLGVpPTEsaXI9MTtmdW5jdGlvbiByaShubixfbil7dmFyIGFuPU1uKG5uLF9uKSsyNTcsVnQ9TW4obm4sX24rPTUpKzEsV3Q9ZnVuY3Rpb24gdGEobm4sX24pe3ZhciBhbj03Jl9uLFZ0PV9uPj4+MztyZXR1cm4obm5bVnRdfChhbjw9ND8w''@;'; put 'put ''Om5uW1Z0KzFdPDw4KSk+Pj5hbiYxNX0obm4sX24rPTUpKzQ7X24rPTQ7Zm9yKHZhciBkbj0wLFRuPURpP25ldyBVaW50OEFycmF5KDE5KTpzbCgxOSksbnI9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLGJyPTEsenI9RGk/bmV3IFVpbnQ4QXJyYXkoOCk6c2woOCks''@;'; put 'put ''THI9RGk/bmV3IFVpbnQ4QXJyYXkoOCk6c2woOCkseGk9VG4ubGVuZ3RoLGNpPTA7Y2k8V3Q7KytjaSlUbltDaVtjaV1dPWRuPWhpKG5uLF9uKSxicjxkbiYmKGJyPWRuKSx6cltkbl0rKyxfbis9Mzt2YXIgQ289MDtmb3IoenJbMF09MCxjaT0xO2NpPD1icjsrK2NpKUxyW2NpXT1Dbz1Dbyt6''@;'; put 'put ''cltjaS0xXTw8MTtmb3IoY2k9MDtjaTx4aTsrK2NpKTAhPShDbz1UbltjaV0pJiYobnJbY2ldPUxyW0NvXSsrKTt2YXIgcG89MDtmb3IoY2k9MDtjaTx4aTsrK2NpKWlmKDAhPShwbz1UbltjaV0pKXtDbz1Zb1tucltjaV1dPj44LXBvO2Zvcih2YXIgVmk9KDE8PDctcG8pLTE7Vmk+PTA7LS1W''@;'; put 'put ''aSlYbltDb3xWaTw8cG9dPTcmcG98Y2k8PDN9dmFyIFVvPVtdO2Zvcihicj0xO1VvLmxlbmd0aDxhbitWdDspc3dpdGNoKENvPVhuW01zKG5uLF9uKV0sX24rPTcmQ28sQ28+Pj49Myl7Y2FzZSAxNjpmb3IoZG49Myt4byhubixfbiksX24rPTIsQ289VW9bVW8ubGVuZ3RoLTFdO2RuLS0gPjA7''@;'; put 'put ''KVVvLnB1c2goQ28pO2JyZWFrO2Nhc2UgMTc6Zm9yKGRuPTMraGkobm4sX24pLF9uKz0zO2RuLS0gPjA7KVVvLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoZG49MTErTXMobm4sX24pLF9uKz03O2RuLS0gPjA7KVVvLnB1c2goMCk7YnJlYWs7ZGVmYXVsdDpVby5wdXNoKENvKSxicjxDbyYm''@;'; put 'put ''KGJyPUNvKX12YXIgdGk9VW8uc2xpY2UoMCxhbiksemw9VW8uc2xpY2UoYW4pO2ZvcihjaT1hbjtjaTwyODY7KytjaSl0aVtjaV09MDtmb3IoY2k9VnQ7Y2k8MzA7KytjaSl6bFtjaV09MDtyZXR1cm4gZWk9bnUodGksTG4sMjg2KSxpcj1udSh6bCxXciwzMCksX259ZnVuY3Rpb24gaWkobm4s''@;'; put 'put ''X24pe3ZhciBWdD1mdW5jdGlvbiBtbyhubixfbil7aWYoMz09bm5bMF0mJiEoMyZublsxXSkpcmV0dXJuW0coX24pLDJdO2Zvcih2YXIgYW49MCxWdD0wLFd0PWIoX258fDE8PDE4KSxkbj0wLFRuPVd0Lmxlbmd0aD4+PjAsbnI9MCxicj0wOyEoMSZWdCk7KWlmKFZ0PWhpKG5uLGFuKSxhbis9''@;'; put 'put ''MyxWdD4+PjEpZm9yKFZ0Pj4+MT09MT8obnI9OSxicj01KTooYW49cmkobm4sYW4pLG5yPWVpLGJyPWlyKSwhX24mJlRuPGRuKzMyNzY3JiYoVG49KFd0PUVsKFd0LGRuKzMyNzY3KSkubGVuZ3RoKTs7KXt2YXIgTHI9eXMobm4sYW4sbnIpLHhpPVZ0Pj4+MT09MT90bFtMcl06TG5bTHJdO2lm''@;'; put 'put ''KGFuKz0xNSZ4aSwoeGk+Pj49NCk+Pj44JjI1NSl7aWYoMjU2PT14aSlicmVhazt2YXIgY2k9KHhpLT0yNTcpPDg/MDp4aS00Pj4yO2NpPjUmJihjaT0wKTt2YXIgQ289ZG4ranJbeGldO2NpPjAmJihDbys9eXMobm4sYW4sY2kpLGFuKz1jaSksTHI9eXMobm4sYW4sYnIpLGFuKz0xNSYoeGk9''@;'; put 'put ''VnQ+Pj4xPT0xP0t0W0xyXTpXcltMcl0pO3ZhciBwbz0oeGk+Pj49NCk8ND8wOnhpLTI+PjEsVmk9amlbeGldO2Zvcihwbz4wJiYoVmkrPXlzKG5uLGFuLHBvKSxhbis9cG8pLCFfbiYmVG48Q28mJihUbj0oV3Q9RWwoV3QsQ28pKS5sZW5ndGgpO2RuPENvOylXdFtkbl09V3RbZG4tVmldLCsr''@;'; put 'put ''ZG59ZWxzZSBXdFtkbisrXT14aX1lbHNlezcmYW4mJihhbis9OC0oNyZhbikpO3ZhciB6cj1ublthbj4+PjNdfG5uWzErKGFuPj4+MyldPDw4O2lmKGFuKz0zMiwhX24mJlRuPGRuK3pyJiYoVG49KFd0PUVsKFd0LGRuK3pyKSkubGVuZ3RoKSwiZnVuY3Rpb24iPT10eXBlb2Ygbm4uY29weSlu''@;'; put 'put ''bi5jb3B5KFd0LGRuLGFuPj4+MywoYW4+Pj4zKSt6ciksZG4rPXpyLGFuKz04KnpyO2Vsc2UgZm9yKDt6ci0tID4wOylXdFtkbisrXT1ublthbj4+PjNdLGFuKz04fXJldHVybltfbj9XdDpXdC5zbGljZSgwLGRuKSxhbis3Pj4+M119KG5uLnNsaWNlKG5uLmx8fDApLF9uKTtyZXR1cm4gbm4u''@;'; put 'put ''bCs9VnRbMV0sVnRbMF19ZnVuY3Rpb24gemkobm4sX24pe2lmKCFubil0aHJvdyBuZXcgRXJyb3IoX24pO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihfbil9ZnVuY3Rpb24gSnIobm4sX24pe3ZhciBhbj1ubjtvbChhbiwwKTt2YXIgZG49e0ZpbGVJbmRleDpbXSxGdWxsUGF0''@;'; put 'put ''aHM6W119O3VuKGRuLHtyb290Ol9uLnJvb3R9KTtmb3IodmFyIFRuPWFuLmxlbmd0aC00Oyg4MCE9YW5bVG5dfHw3NSE9YW5bVG4rMV18fDUhPWFuW1RuKzJdfHw2IT1hbltUbiszXSkmJlRuPj0wOyktLVRuO2FuLmw9VG4rNCxhbi5sKz00O3ZhciBucj1hbi5yZWFkX3NoaWZ0KDIpO2FuLmwr''@;'; put 'put ''PTY7dmFyIGJyPWFuLnJlYWRfc2hpZnQoNCk7Zm9yKGFuLmw9YnIsVG49MDtUbjxucjsrK1RuKXthbi5sKz0yMDt2YXIgenI9YW4ucmVhZF9zaGlmdCg0KSxMcj1hbi5yZWFkX3NoaWZ0KDQpLHhpPWFuLnJlYWRfc2hpZnQoMiksY2k9YW4ucmVhZF9zaGlmdCgyKSxDbz1hbi5yZWFkX3NoaWZ0''@;'; put 'put ''KDIpO2FuLmwrPTg7dmFyIHBvPWFuLnJlYWRfc2hpZnQoNCksVmk9dmUoYW4uc2xpY2UoYW4ubCt4aSxhbi5sK3hpK2NpKSk7YW4ubCs9eGkrY2krQ287dmFyIFVvPWFuLmw7YW4ubD1wbys0LHdzKGFuLHpyLExyLGRuLFZpKSxhbi5sPVVvfXJldHVybiBkbn1mdW5jdGlvbiB3cyhubixfbixh''@;'; put 'put ''bixWdCxXdCl7bm4ubCs9Mjt2YXIgZG49bm4ucmVhZF9zaGlmdCgyKSxUbj1ubi5yZWFkX3NoaWZ0KDIpLG5yPWZ1bmN0aW9uIF9lKG5uKXt2YXIgX249NjU1MzUmbm4ucmVhZF9zaGlmdCgyKSxhbj02NTUzNSZubi5yZWFkX3NoaWZ0KDIpLFZ0PW5ldyBEYXRlLFd0PTMxJmFuLGRuPTE1Jihh''@;'; put 'put ''bj4+Pj01KTthbj4+Pj00LFZ0LnNldE1pbGxpc2Vjb25kcygwKSxWdC5zZXRGdWxsWWVhcihhbisxOTgwKSxWdC5zZXRNb250aChkbi0xKSxWdC5zZXREYXRlKFd0KTt2YXIgVG49MzEmX24sbnI9NjMmKF9uPj4+PTUpO3JldHVybiBWdC5zZXRIb3Vycyhfbj4+Pj02KSxWdC5zZXRNaW51dGVz''@;'; put 'put ''KG5yKSxWdC5zZXRTZWNvbmRzKFRuPDwxKSxWdH0obm4pO2lmKDgyNTcmZG4pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZW5jcnlwdGlvbiIpO2Zvcih2YXIgYnI9bm4ucmVhZF9zaGlmdCg0KSx6cj1ubi5yZWFkX3NoaWZ0KDQpLExyPW5uLnJlYWRfc2hpZnQoNCkseGk9bm4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxjaT1ubi5yZWFkX3NoaWZ0KDIpLENvPSIiLHBvPTA7cG88eGk7KytwbylDbys9U3RyaW5nLmZyb21DaGFyQ29kZShubltubi5sKytdKTtpZihjaSl7dmFyIFZpPXZlKG5uLnNsaWNlKG5uLmwsbm4ubCtjaSkpOyhWaVsyMTU4OV18fHt9KS5tdCYmKG5yPVZpWzIxNTg5''@;'; put 'put ''XS5tdCksKChXdHx8e30pWzIxNTg5XXx8e30pLm10JiYobnI9V3RbMjE1ODldLm10KX1ubi5sKz1jaTt2YXIgVW89bm4uc2xpY2Uobm4ubCxubi5sK3pyKTtzd2l0Y2goVG4pe2Nhc2UgODpVbz1mdW5jdGlvbiBTbihubixfbil7aWYoIXZyKXJldHVybiBpaShubixfbik7dmFyIFZ0PW5ldygw''@;'; put 'put ''LHZyLkluZmxhdGVSYXcpLFd0PVZ0Ll9wcm9jZXNzQ2h1bmsobm4uc2xpY2Uobm4ubCksVnQuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG5uLmwrPVZ0LmJ5dGVzUmVhZCxXdH0obm4sTHIpO2JyZWFrO2Nhc2UgMDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQg''@;'; put 'put ''WklQIENvbXByZXNzaW9uIG1ldGhvZCAiK1RuKX12YXIgdGk9ITE7OCZkbiYmKDEzNDY5NTc2MD09KGJyPW5uLnJlYWRfc2hpZnQoNCkpJiYoYnI9bm4ucmVhZF9zaGlmdCg0KSx0aT0hMCksenI9bm4ucmVhZF9zaGlmdCg0KSxMcj1ubi5yZWFkX3NoaWZ0KDQpKSx6ciE9X24mJnppKHRpLCJC''@;'; put 'put ''YWQgY29tcHJlc3NlZCBzaXplOiAiK19uKyIgIT0gIit6ciksTHIhPWFuJiZ6aSh0aSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK2FuKyIgIT0gIitMcik7dmFyIHpsPU9lLmJ1ZihVbywwKTticj4+MCE9emw+PjAmJnppKHRpLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIrYnIrIiAhPSAiK3ps''@;'; put 'put ''KSxqbChWdCxDbyxVbyx7dW5zYWZlOiEwLG10Om5yfSl9ZnVuY3Rpb24gamwobm4sX24sYW4sVnQpe3ZhciBXdD1WdCYmVnQudW5zYWZlO1d0fHx1bihubik7dmFyIGRuPSFXdCYmamUuZmluZChubixfbik7aWYoIWRuKXt2YXIgVG49bm4uRnVsbFBhdGhzWzBdO19uLnNsaWNlKDAsVG4ubGVu''@;'; put 'put ''Z3RoKT09VG4/VG49X246KCIvIiE9VG4uc2xpY2UoLTEpJiYoVG4rPSIvIiksVG49KFRuK19uKS5yZXBsYWNlKCIvLyIsIi8iKSksZG49e25hbWU6cmUoX24pLHR5cGU6Mn0sbm4uRmlsZUluZGV4LnB1c2goZG4pLG5uLkZ1bGxQYXRocy5wdXNoKFRuKSxXdHx8amUudXRpbHMuY2ZiX2djKG5u''@;'; put 'put ''KX1yZXR1cm4gZG4uY29udGVudD1hbixkbi5zaXplPWFuP2FuLmxlbmd0aDowLFZ0JiYoVnQuQ0xTSUQmJihkbi5jbHNpZD1WdC5DTFNJRCksVnQubXQmJihkbi5tdD1WdC5tdCksVnQuY3QmJihkbi5jdD1WdC5jdCkpLGRufXJldHVybiBQLmZpbmQ9ZnVuY3Rpb24gZXIobm4sX24pe3ZhciBh''@;'; put 'put ''bj1ubi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKGJyKXtyZXR1cm4gYnIudG9VcHBlckNhc2UoKX0pLFZ0PWFuLm1hcChmdW5jdGlvbihicil7dmFyIHpyPWJyLnNwbGl0KCIvIik7cmV0dXJuIHpyW3pyLmxlbmd0aC0oIi8iPT1ici5zbGljZSgtMSk/MjoxKV19KSxXdD0hMTs0Nz09PV9uLmNo''@;'; put 'put ''YXJDb2RlQXQoMCk/KFd0PSEwLF9uPWFuWzBdLnNsaWNlKDAsLTEpK19uKTpXdD0tMSE9PV9uLmluZGV4T2YoIi8iKTt2YXIgZG49X24udG9VcHBlckNhc2UoKSxUbj0hMD09PVd0P2FuLmluZGV4T2YoZG4pOlZ0LmluZGV4T2YoZG4pO2lmKC0xIT09VG4pcmV0dXJuIG5uLkZpbGVJbmRleFtU''@;'; put 'put ''bl07dmFyIG5yPSFkbi5tYXRjaChwKTtmb3IoZG49ZG4ucmVwbGFjZSh2LCIiKSxuciYmKGRuPWRuLnJlcGxhY2UocCwiISIpKSxUbj0wO1RuPGFuLmxlbmd0aDsrK1RuKWlmKChucj9hbltUbl0ucmVwbGFjZShwLCIhIik6YW5bVG5dKS5yZXBsYWNlKHYsIiIpPT1kbnx8KG5yP1Z0W1RuXS5y''@;'; put 'put ''ZXBsYWNlKHAsIiEiKTpWdFtUbl0pLnJlcGxhY2UodiwiIik9PWRuKXJldHVybiBubi5GaWxlSW5kZXhbVG5dO3JldHVybiBudWxsfSxQLnJlYWQ9ZnVuY3Rpb24gS24obm4sX24pe3N3aXRjaChfbiYmX24udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIHBuKG5u''@;'; put 'put ''LF9uKXtyZXR1cm4gSGUoKSxCZShTZS5yZWFkRmlsZVN5bmMobm4pLF9uKX0obm4sX24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQmUoRChzZS5kZWNvZGUobm4pKSxfbik7Y2FzZSJiaW5hcnkiOnJldHVybiBCZShEKG5uKSxfbil9cmV0dXJuIEJlKG5uLF9uKX0sUC5wYXJzZT1CZSxQLndyaXRl''@;'; put 'put ''PWZ1bmN0aW9uIEFuKG5uLF9uKXt2YXIgYW49a24obm4sX24pO3N3aXRjaChfbiYmX24udHlwZSl7Y2FzZSJmaWxlIjpyZXR1cm4gSGUoKSxTZS53cml0ZUZpbGVTeW5jKF9uLmZpbGVuYW1lLGFuKSxhbjtjYXNlImJpbmFyeSI6cmV0dXJuIHVyKGFuKTtjYXNlImJhc2U2NCI6cmV0dXJuIHNl''@;'; put 'put ''LmVuY29kZSh1cihhbikpfXJldHVybiBhbn0sUC53cml0ZUZpbGU9ZnVuY3Rpb24gUXIobm4sX24sYW4pe0hlKCk7dmFyIFZ0PWtuKG5uLGFuKTtTZS53cml0ZUZpbGVTeW5jKF9uLFZ0KX0sUC51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiBtbChubil7dmFyIF9uPXt9O3JldHVybiB1bihfbixu''@;'; put 'put ''biksX259LGNmYl9hZGQ6amwsY2ZiX2RlbDpmdW5jdGlvbiBoYShubixfbil7dW4obm4pO3ZhciBhbj1qZS5maW5kKG5uLF9uKTtpZihhbilmb3IodmFyIFZ0PTA7VnQ8bm4uRmlsZUluZGV4Lmxlbmd0aDsrK1Z0KWlmKG5uLkZpbGVJbmRleFtWdF09PWFuKXJldHVybiBubi5GaWxlSW5kZXgu''@;'; put 'put ''c3BsaWNlKFZ0LDEpLG5uLkZ1bGxQYXRocy5zcGxpY2UoVnQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24geWYobm4sX24sYW4pe3VuKG5uKTt2YXIgVnQ9amUuZmluZChubixfbik7aWYoVnQpZm9yKHZhciBXdD0wO1d0PG5uLkZpbGVJbmRleC5sZW5ndGg7KytXdClpZihubi5G''@;'; put 'put ''aWxlSW5kZXhbV3RdPT1WdClyZXR1cm4gbm4uRmlsZUluZGV4W1d0XS5uYW1lPXJlKGFuKSxubi5GdWxsUGF0aHNbV3RdPWFuLCEwO3JldHVybiExfSxjZmJfZ2M6ZnVuY3Rpb24gb3Aobm4pe3puKG5uLCEwKX0sUmVhZFNoaWZ0OkhhLENoZWNrRmllbGQ6QmgscHJlcF9ibG9iOm9sLGJjb25j''@;'; put 'put ''YXQ6Uyx1c2VfemxpYjpmdW5jdGlvbiBycihubil7dHJ5e3ZhciBhbj1uZXcoMCxubi5JbmZsYXRlUmF3KTtpZihhbi5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxhbi5fZmluaXNoRmx1c2hGbGFnKSwhYW4uYnl0ZXNSZWFkKXRocm93IG5ldyBFcnJvcigiemxpYiBkb2Vz''@;'; put 'put ''IG5vdCBleHBvc2UgYnl0ZXNSZWFkIik7dnI9bm59Y2F0Y2goVnQpe2NvbnNvbGUuZXJyb3IoImNhbm5vdCB1c2UgbmF0aXZlIHpsaWI6ICIrKFZ0Lm1lc3NhZ2V8fFZ0KSl9fSxfZGVmbGF0ZVJhdzpnbCxfaW5mbGF0ZVJhdzppaSxjb25zdHM6TGl9LFB9KCk7dHJ5e1dlPUYoNzg3NzMpfWNh''@;'; put 'put ''dGNoe31mdW5jdGlvbiBLZSh5KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHk/SCh5KTpBcnJheS5pc0FycmF5KHkpP2Z1bmN0aW9uIGcoeSl7aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeSl9KHkp''@;'; put 'put ''Onl9ZnVuY3Rpb24gWWUoeSxQLEwpe2lmKHR5cGVvZiBXZTwidSImJldlLndyaXRlRmlsZVN5bmMpcmV0dXJuIEw/V2Uud3JpdGVGaWxlU3luYyh5LFAsTCk6V2Uud3JpdGVGaWxlU3luYyh5LFApO3ZhciBRPSJ1dGY4Ij09TD9MbyhQKTpQO2lmKHR5cGVvZiBJRV9TYXZlRmlsZTwidSIpcmV0''@;'; put 'put ''dXJuIElFX1NhdmVGaWxlKFEseSk7aWYodHlwZW9mIEJsb2I8InUiKXt2YXIgcmU9bmV3IEJsb2IoW0tlKFEpXSx7dHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2aWdhdG9yLm1z''@;'; put 'put ''U2F2ZUJsb2IocmUseSk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhyZSx5KTtpZih0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3JlYXRlRWxlbWVudCYmVVJMLmNyZWF0ZU9iamVjdFVSTCl7dmFyIHBlPVVSTC5jcmVhdGVPYmplY3RV''@;'; put 'put ''UkwocmUpO2lmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiYiZnVuY3Rpb24iPT10eXBlb2YoY2hyb21lLmRvd25sb2Fkc3x8e30pLmRvd25sb2FkKXJldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2''@;'; put 'put ''b2tlT2JqZWN0VVJMKHBlKX0sNmU0KSxjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKHt1cmw6cGUsZmlsZW5hbWU6eSxzYXZlQXM6ITB9KTt2YXIgX2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lmKG51bGwhPV9lLmRvd25sb2FkKXJldHVybiBfZS5kb3dubG9hZD15LF9lLmhyZWY9''@;'; put 'put ''cGUsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfZSksX2UuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKF9lKSxVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKHBlKX0s''@;'; put 'put ''NmU0KSxwZX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgdmU9RmlsZSh5KTtyZXR1cm4gdmUub3BlbigidyIpLHZlLmVuY29kaW5nPSJiaW5hcnkiLEFycmF5LmlzQXJyYXkoUCkmJihQPU4oUCkpLHZlLndyaXRlKFApLHZlLmNs''@;'; put 'put ''b3NlKCksUH1jYXRjaChTZSl7aWYoIVNlLm1lc3NhZ2V8fCFTZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IFNlfXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK3kpfWZ1bmN0aW9uIGx0KHkpe2Zvcih2YXIgUD1PYmplY3Qua2V5cyh5KSxMPVtdLFE9MDtRPFAu''@;'; put 'put ''bGVuZ3RoOysrUSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxQW1FdKSYmTC5wdXNoKFBbUV0pO3JldHVybiBMfWZ1bmN0aW9uIFBlKHksUCl7Zm9yKHZhciBMPVtdLFE9bHQoeSkscmU9MDtyZSE9PVEubGVuZ3RoOysrcmUpbnVsbD09TFt5W1FbcmVdXVtQXV0mJihM''@;'; put 'put ''W3lbUVtyZV1dW1BdXT1RW3JlXSk7cmV0dXJuIEx9ZnVuY3Rpb24gYmUoeSl7Zm9yKHZhciBQPVtdLEw9bHQoeSksUT0wO1EhPT1MLmxlbmd0aDsrK1EpUFt5W0xbUV1dXT1MW1FdO3JldHVybiBQfWZ1bmN0aW9uIEFlKHkpe2Zvcih2YXIgUD1bXSxMPWx0KHkpLFE9MDtRIT09TC5sZW5ndGg7''@;'; put 'put ''KytRKVBbeVtMW1FdXV09cGFyc2VJbnQoTFtRXSwxMCk7cmV0dXJuIFB9dmFyIFVlLGh0LHFlPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLFhlPTA7ZnVuY3Rpb24gTWUoKXtYZT1xZS5nZXRUaW1lKCkrNmU0KigobmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpv''@;'; put 'put ''bmVPZmZzZXQoKSksVWU9ZnVuY3Rpb24oUCxMKXt2YXIgUT1QLmdldFRpbWUoKTtyZXR1cm4gTCYmKFEtPTEyNjMxNjhlNSksKFEtWGUpLzg2NGU1fSxodD1mdW5jdGlvbihQKXt2YXIgTD1uZXcgRGF0ZTtyZXR1cm4gTC5zZXRUaW1lKDI0KlAqNjAqNjAqMWUzK1hlKSxMfX1mdW5jdGlvbiBp''@;'; put 'put ''dCh5KXt2YXIgUD0wLEw9MCxRPSExLHJlPXkubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9UKFswLTlcLl0rSCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIXJlKXRocm93IG5ldyBFcnJvcigifCIreSsifCBpcyBub3QgYW4gSVNPODYwMSBEdXJh''@;'; put 'put ''dGlvbiIpO2Zvcih2YXIgcGU9MTtwZSE9cmUubGVuZ3RoOysrcGUpaWYocmVbcGVdKXtzd2l0Y2goTD0xLHBlPjMmJihRPSEwKSxyZVtwZV0uc2xpY2UocmVbcGVdLmxlbmd0aC0xKSl7Y2FzZSJZIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogIity''@;'; put 'put ''ZVtwZV0uc2xpY2UocmVbcGVdLmxlbmd0aC0xKSk7Y2FzZSJEIjpMKj0yNDtjYXNlIkgiOkwqPTYwO2Nhc2UiTSI6aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtMKj02MH1QKz1MKnBhcnNlSW50KHJlW3BlXSwxMCl9cmV0dXJuIFB9''@;'; put 'put ''TWUoKTt2YXIgdXQ9bmV3IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKHV0LmdldEZ1bGxZZWFyKCkpJiYodXQ9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIE10PTIwMTc9PXV0LmdldEZ1bGxZZWFyKCk7ZnVuY3Rpb24gSHQoeSxQKXt2YXIgTD1uZXcgRGF0ZSh5KTtp''@;'; put 'put ''ZihNdClyZXR1cm4gUD4wP0wuc2V0VGltZShMLmdldFRpbWUoKSs2MCpMLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpQPDAmJkwuc2V0VGltZShMLmdldFRpbWUoKS02MCpMLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxMO2lmKHkgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB5O2lmKDE5MTc9''@;'; put 'put ''PXV0LmdldEZ1bGxZZWFyKCkmJiFpc05hTihMLmdldEZ1bGxZZWFyKCkpKXt2YXIgUT1MLmdldEZ1bGxZZWFyKCk7cmV0dXJuIHkuaW5kZXhPZigiIitRKT4tMXx8TC5zZXRGdWxsWWVhcihMLmdldEZ1bGxZZWFyKCkrMTAwKSxMfXZhciByZT15Lm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIi''@;'; put 'put ''LCIxOSIsIjAiLCIwIiwiMCJdLHBlPW5ldyBEYXRlKCtyZVswXSwrcmVbMV0tMSwrcmVbMl0sK3JlWzNdfHwwLCtyZVs0XXx8MCwrcmVbNV18fDApO3JldHVybiB5LmluZGV4T2YoIloiKT4tMSYmKHBlPW5ldyBEYXRlKHBlLmdldFRpbWUoKS02MCpwZS5nZXRUaW1lem9uZU9mZnNldCgpKjFl''@;'; put 'put ''MykpLHBlfWZ1bmN0aW9uIFB0KHkpe2Zvcih2YXIgUD0iIixMPTA7TCE9eS5sZW5ndGg7KytMKVArPVN0cmluZy5mcm9tQ2hhckNvZGUoeVtMXSk7cmV0dXJuIFB9ZnVuY3Rpb24gb24oeSl7aWYoIm9iamVjdCIhPXR5cGVvZiB5fHxudWxsPT15KXJldHVybiB5O2lmKHkgaW5zdGFuY2VvZiBE''@;'; put 'put ''YXRlKXJldHVybiBuZXcgRGF0ZSh5LmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheSh5KSlyZXR1cm4gZnVuY3Rpb24gQ24oeSl7Zm9yKHZhciBQPVtdLEw9MDtMPHkubGVuZ3RoOysrTCl7dmFyIFE9eVtMXTsib2JqZWN0Ij09dHlwZW9mIFE/UFtMXT1vbihRKTpudWxsIT1RJiYoUFtMXT1R''@;'; put 'put ''KX1yZXR1cm4gUH0oeSk7dmFyIFA9e307Zm9yKHZhciBMIGluIHkpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHksTCkmJihQW0xdPW9uKHlbTF0pKTtyZXR1cm4gUH1mdW5jdGlvbiBVdCh5LFApe2lmKCJvYmplY3QiIT10eXBlb2YgUHx8bnVsbD09UClyZXR1cm4geTtm''@;'; put 'put ''b3IodmFyIEwgaW4gUClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxMKSYmKHlbTF09b24oUFtMXSkpO3JldHVybiB5fWZ1bmN0aW9uIGJuKHksUCl7Zm9yKHZhciBMPSIiO0wubGVuZ3RoPFA7KUwrPXk7cmV0dXJuIEx9ZnVuY3Rpb24gV24oeSl7dmFyIFA9TnVtYmVy''@;'; put 'put ''KHkpO2lmKCFpc05hTihQKSlyZXR1cm4gaXNGaW5pdGUoUCk/UDpOYU47aWYoIS9cZC8udGVzdCh5KSlyZXR1cm4gUDt2YXIgTD0xLFE9eS5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''TCo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKFA9TnVtYmVyKFEpKSYmKFE9US5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihyZSxwZSl7cmV0dXJuIEw9LUwscGV9KSxpc05hTihQPU51bWJlcihRKSkpP1A6UC9MfWZ1bmN0aW9uIGVuKHkpe3ZhciBQPW5ldyBEYXRlKHkpLEw9bmV3IERh''@;'; put 'put ''dGUoTmFOKSxRPVAuZ2V0WWVhcigpLHJlPVAuZ2V0TW9udGgoKSxwZT1QLmdldERhdGUoKTtyZXR1cm4gaXNOYU4ocGUpfHxRPDB8fFE+ODA5OT9MOihyZT4wfHxwZT4xKSYmMTAxIT1RfHx5LnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2Vw''@;'; put 'put ''fG9jdHxub3Z8ZGVjLyk/UDp5Lm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/TDpQfWZ1bmN0aW9uICRuKHksUCl7aWYoUCYmUC5yYXcpcmV0dXJue3Q6InMiLHY6eX07aWYoIXkpcmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT15KXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09eSlyZXR1''@;'; put 'put ''cm57dDoiYiIsdjohMX07dmFyIEw9IiIsUT1OdW1iZXIoeSk7aWYoaXNGaW5pdGUoUSkpcmV0dXJue3Q6Im4iLHY6UX07aWYoaXNOYU4oUSkmJi9cZC8udGVzdCh5KSl7dmFyIHJlPTEscGU9eS5yZXBsYWNlKC8oW1xkXSksKFtcZF0pL2csZnVuY3Rpb24obnQsZHQsQ3Qpe3JldHVybiBMfHwo''@;'; put 'put ''TD0iIywjIzAiKSxkdCtDdH0pLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNlKC9cLlxkKi8sZnVuY3Rpb24obnQpe0x8fChMPSIwIiksTCs9Ii4iO2Zvcih2YXIgZHQ9MjtkdDw9bnQubGVuZ3RoOysrZHQpTCs9IjAiO3JldHVybiBudH0pLnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIHJlKj0xMDAsTHx8KEw9IjAiKSxMKz0iJSIsIiJ9KTtpZighaXNOYU4oUT1OdW1iZXIocGUpKSlyZXR1cm57dDoibiIsdjpRL3JlLHo6TH07aWYocGU9cGUucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24obnQsZHQpe3JldHVybiByZT0tcmUsZHR9KSwhaXNOYU4oUT1OdW1iZXIo''@;'; put 'put ''cGUpKSlyZXR1cm57dDoibiIsdjpRL3JlLHo6KEx8fCIwIikrIl8pOygiKyhMfHwiMCIpKyIpO0AifX1lOmlmKCFQfHwhUC5yYXdEYXRlcyl7dmFyIF9lPVAmJlAuY2VsbERhdGVzLHZlPW5ldyBEYXRlKHkpLEhlPXZlLmdldFllYXIoKSxCZT12ZS5nZXRNb250aCgpLEdlPXZlLmdldERhdGUo''@;'; put 'put ''KTtpZihpc05hTihHZSl8fEhlPDB8fEhlPjgwOTkpYnJlYWsgZTtpZigoQmU+MHx8R2U+MSkmJjEwMSE9SGUpcmV0dXJue3Q6X2U/ImQiOiJuIix2Ol9lP3ZlOlVlKHZlKSx6OlAuZGF0ZU5GfHx3Ll90YWJsZVsxNF19O2lmKHkudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXBy''@;'; put 'put ''fG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpfZT8iZCI6Im4iLHY6X2U/dmU6VWUodmUpLHo6UC5kYXRlTkZ8fHcuX3RhYmxlWzE0XX07aWYoeS5tYXRjaCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHZlfXJldHVybnt0OiJzIix2Onl9fXZhciB6''@;'; put 'put ''dCxIbj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBobih5KXtyZXR1cm4gbnVsbCE9eSYmIXl9ZnVuY3Rpb24gd3QoeSl7cmV0dXJuIHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKX1mdW5jdGlvbiBYdCh5KXtyZXR1cm4geT95LmRhdGE/''@;'; put 'put ''VSh5LmRhdGEpOnkuYXNOb2RlQnVmZmVyJiZoZT9VKHkuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTp5LmFzQmluYXJ5P1UoeS5hc0JpbmFyeSgpKTp5Ll9kYXRhJiZ5Ll9kYXRhLmdldENvbnRlbnQ/VShQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5Ll9kYXRhLmdl''@;'; put 'put ''dENvbnRlbnQoKSwwKSkpOnkuY29udGVudCYmeS50eXBlP1UoUHQoeS5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIF90KHkpe2lmKCF5KXJldHVybiBudWxsO2lmKHkuZGF0YSlyZXR1cm4gQih5LmRhdGEpO2lmKHkuYXNOb2RlQnVmZmVyJiZoZSlyZXR1cm4geS5hc05vZGVCdWZmZXIo''@;'; put 'put ''KTtpZih5Ll9kYXRhJiZ5Ll9kYXRhLmdldENvbnRlbnQpe3ZhciBQPXkuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgUD9CKFApOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFApfXJldHVybiB5LmNvbnRlbnQmJnkudHlwZT95LmNvbnRlbnQ6bnVsbH1mdW5j''@;'; put 'put ''dGlvbiBtbih5LFApe2Zvcih2YXIgTD15LkZ1bGxQYXRoc3x8bHQoeS5maWxlcyksUT1QLnRvTG93ZXJDYXNlKCkscmU9US5yZXBsYWNlKC9cLy9nLCJcXCIpLHBlPTA7cGU8TC5sZW5ndGg7KytwZSl7dmFyIF9lPUxbcGVdLnRvTG93ZXJDYXNlKCk7aWYoUT09X2V8fHJlPT1fZSlyZXR1cm4g''@;'; put 'put ''eS5maWxlc1tMW3BlXV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gcnQoeSxQKXt2YXIgTD1tbih5LFApO2lmKG51bGw9PUwpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUCsiIGluIHppcCIpO3JldHVybiBMfWZ1bmN0aW9uIEl0KHksUCxMKXtpZighTClyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gTnQoeSl7cmV0dXJuIHkmJiIuYmluIj09PXkubmFtZS5zbGljZSgtNCk/X3QoeSk6WHQoeSl9KHJ0KHksUCkpO2lmKCFQKXJldHVybiBudWxsO3RyeXtyZXR1cm4gSXQoeSxQKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSnQoeSxQLEwpe2lmKCFMKXJldHVybiBYdChydCh5LFAp''@;'; put 'put ''KTtpZighUClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEp0KHksUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIER0KHksUCxMKXtpZighTClyZXR1cm4gX3QocnQoeSxQKSk7aWYoIVApcmV0dXJuIG51bGw7dHJ5e3JldHVybiBEdCh5LFApfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlv''@;'; put 'put ''biBZdCh5LFAsTCl7eS5GdWxsUGF0aHM/amUudXRpbHMuY2ZiX2FkZCh5LFAsTCk6eS5maWxlKFAsTCl9ZnVuY3Rpb24geW4oKXtyZXR1cm4genQ/bmV3IHp0OmplLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiB4bih5LFApe3ZhciBMO2lmKHp0KXN3aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0''@;'; put 'put ''IjpMPW5ldyB6dCh5LHtiYXNlNjQ6ITB9KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6TD1uZXcgenQoeSx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOkw9bmV3IHp0KHkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1Au''@;'; put 'put ''dHlwZSl9ZWxzZSBzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6TD1qZS5yZWFkKHkse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6TD1qZS5yZWFkKHkse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6TD1qZS5yZWFkKHkse3R5cGU6''@;'; put 'put ''ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiBMfWZ1bmN0aW9uIHNuKHksUCl7aWYoIi8iPT15LmNoYXJBdCgwKSlyZXR1cm4geS5zbGljZSgxKTt2YXIgTD1QLnNwbGl0KCIvIik7Ii8iIT1QLnNsaWNl''@;'; put 'put ''KC0xKSYmTC5wb3AoKTtmb3IodmFyIFE9eS5zcGxpdCgiLyIpOzAhPT1RLmxlbmd0aDspe3ZhciByZT1RLnNoaWZ0KCk7Ii4uIj09PXJlP0wucG9wKCk6Ii4iIT09cmUmJkwucHVzaChyZSl9cmV0dXJuIEwuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoenQ9SlNaaXBTeW5jKSxh''@;'; put 'put ''dC5leHBvcnRzJiZ0eXBlb2YgenQ+InUiJiYoenQ9Rig3NTQ0NikpO3ZhciBCbj0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLFJuPS8oPzpbXiJccz8+XC9dKylccyo9XHMqKCg/OiIpKD86W14iXSo/KSg/OiIpfCg/OicpKD86''@;'; put 'put ''W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2csJHQ9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO0JuLm1hdGNoKCR0KXx8KCR0PS88W14+XSo+L2cpO3ZhciBQbj0v''@;'; put 'put ''PFx3KjovLG5pPS88KFwvPylcdys6LztmdW5jdGlvbiBsbih5LFAsTCl7Zm9yKHZhciBRPXt9LHJlPTAscGU9MDtyZSE9PXkubGVuZ3RoJiYzMiE9PShwZT15LmNoYXJDb2RlQXQocmUpKSYmMTAhPT1wZSYmMTMhPT1wZTsrK3JlKTtpZihQfHwoUVswXT15LnNsaWNlKDAscmUpKSxyZT09PXku''@;'; put 'put ''bGVuZ3RoKXJldHVybiBRO3ZhciBfZT15Lm1hdGNoKFJuKSx2ZT0wLFNlPSIiLEhlPTAsQmU9IiIsR2U9IiIsbnQ9MTtpZihfZSlmb3IoSGU9MDtIZSE9X2UubGVuZ3RoOysrSGUpe2ZvcihHZT1fZVtIZV0scGU9MDtwZSE9R2UubGVuZ3RoJiY2MSE9PUdlLmNoYXJDb2RlQXQocGUpOysrcGUp''@;'; put 'put ''O2ZvcihCZT1HZS5zbGljZSgwLHBlKS50cmltKCk7MzI9PUdlLmNoYXJDb2RlQXQocGUrMSk7KSsrcGU7Zm9yKG50PTM0PT0ocmU9R2UuY2hhckNvZGVBdChwZSsxKSl8fDM5PT1yZT8xOjAsU2U9R2Uuc2xpY2UocGUrMStudCxHZS5sZW5ndGgtbnQpLHZlPTA7dmUhPUJlLmxlbmd0aCYmNTgh''@;'; put 'put ''PT1CZS5jaGFyQ29kZUF0KHZlKTsrK3ZlKTtpZih2ZT09PUJlLmxlbmd0aClCZS5pbmRleE9mKCJfIik+MCYmKEJlPUJlLnNsaWNlKDAsQmUuaW5kZXhPZigiXyIpKSksUVtCZV09U2UsTHx8KFFbQmUudG9Mb3dlckNhc2UoKV09U2UpO2Vsc2V7dmFyIGR0PSg1PT09dmUmJiJ4bWxucyI9PT1C''@;'; put 'put ''ZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK0JlLnNsaWNlKHZlKzEpO2lmKFFbZHRdJiYiZXh0Ij09QmUuc2xpY2UodmUtMyx2ZSkpY29udGludWU7UVtkdF09U2UsTHx8KFFbZHQudG9Mb3dlckNhc2UoKV09U2UpfX1yZXR1cm4gUX1mdW5jdGlvbiBqbih5KXtyZXR1cm4geS5yZXBsYWNlKG5p''@;'; put 'put ''LCI8JDEiKX12YXIgcXI9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxnaT1iZShxcikseHI9ZnVuY3Rpb24oKXt2YXIgeT0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLFA9L194KFtcZGEt''@;'; put 'put ''ZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gTChRKXt2YXIgcmU9USsiIixwZT1yZS5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09cGUpcmV0dXJuIHJlLnJlcGxhY2UoeSxmdW5jdGlvbih2ZSxTZSl7cmV0dXJuIHFyW3ZlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChT''@;'; put 'put ''ZSx2ZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8dmV9KS5yZXBsYWNlKFAsZnVuY3Rpb24odmUsU2Upe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KFNlLDE2KSl9KTt2YXIgX2U9cmUuaW5kZXhPZigiXV0+Iik7cmV0dXJuIEwocmUuc2xpY2UoMCxwZSkpK3JlLnNsaWNl''@;'; put 'put ''KHBlKzksX2UpK0wocmUuc2xpY2UoX2UrMykpfX0oKSxVaT0vWyY8PiciXS9nLEtyPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1cdTAwMWZdL2csbm89L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24gSHIoeSl7cmV0dXJuKHkrIiIpLnJlcGxhY2Uobm8sIl94MDA1RiQmIikucmVwbGFjZShV''@;'; put 'put ''aSxmdW5jdGlvbihMKXtyZXR1cm4gZ2lbTF19KS5yZXBsYWNlKEtyLGZ1bmN0aW9uKEwpe3JldHVybiJfeCIrKCIwMDAiK0wuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBxaSh5KXtyZXR1cm4gSHIoeSkucmVwbGFjZSgvXG4vZywiX3gwMDBh''@;'; put 'put ''XyIpfWZ1bmN0aW9uIEppKHkpe3JldHVybiBIcih5KS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgYW89L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uIHJvKHkpe3JldHVybih5KyIiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEwpe3JldHVybiBnaVtMXX0pLnJlcGxhY2UoL1xuL2csIjxi''@;'; put 'put ''ci8+IikucmVwbGFjZShhbyxmdW5jdGlvbihMKXtyZXR1cm4iJiN4IisoIjAwMCIrTC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIGlvKHkpe3JldHVybih5KyIiKS5yZXBsYWNlKFVpLGZ1bmN0aW9uKEwpe3JldHVybiBnaVtMXX0pLnJlcGxh''@;'; put 'put ''Y2UoYW8sZnVuY3Rpb24oTCl7cmV0dXJuIiYjeCIrTC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0pfXZhciBHaT1mdW5jdGlvbigpe3ZhciB5PS8mIyhcZCspOy9nO2Z1bmN0aW9uIFAoTCxRKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUlu''@;'; put 'put ''dChRLDEwKSl9cmV0dXJuIGZ1bmN0aW9uKFEpe3JldHVybiBRLnJlcGxhY2UoeSxQKX19KCksaG89ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfTtmdW5jdGlvbiB5cih5KXtzd2l0Y2goeSl7Y2FzZSAxOmNhc2UhMDpjYXNlIjEiOmNhc2Ui''@;'; put 'put ''dHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgUGk9ZnVuY3Rpb24oUCl7Zm9yKHZhciBMPSIiLFE9MCxyZT0wLHBlPTAsX2U9MCx2ZT0wLFNlPTA7UTxQLmxlbmd0aDspKHJlPVAuY2hhckNvZGVBdChRKyspKTwxMjg/TCs9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZShyZSk6KHBlPVAuY2hhckNvZGVBdChRKyspLHJlPjE5MSYmcmU8MjI0Pyh2ZT0oMzEmcmUpPDw2LHZlfD02MyZwZSxMKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHZlKSk6KF9lPVAuY2hhckNvZGVBdChRKyspLHJlPDI0MD9MKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZyZSk8PDEyfCg2MyZw''@;'; put 'put ''ZSk8PDZ8NjMmX2UpOihTZT0oKDcmcmUpPDwxOHwoNjMmcGUpPDwxMnwoNjMmX2UpPDw2fDYzJih2ZT1QLmNoYXJDb2RlQXQoUSsrKSkpLTY1NTM2LEwrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKFNlPj4+MTAmMTAyMykpLEwrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMm''@;'; put 'put ''U2UpKSkpKTtyZXR1cm4gTH0sTG89ZnVuY3Rpb24oeSl7Zm9yKHZhciBQPVtdLEw9MCxRPTAscmU9MDtMPHkubGVuZ3RoOylzd2l0Y2goUT15LmNoYXJDb2RlQXQoTCsrKSwhMCl7Y2FzZSBRPDEyODpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShRKSk7YnJlYWs7Y2FzZSBRPDIwNDg6UC5w''@;'; put 'put ''dXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhRPj42KSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKTticmVhaztjYXNlIFE+PTU1Mjk2JiZRPDU3MzQ0OlEtPTU1Mjk2LHJlPXkuY2hhckNvZGVBdChMKyspLTU2MzIwKyhRPDwxMCksUC5wdXNoKFN0cmluZy5m''@;'; put 'put ''cm9tQ2hhckNvZGUoMjQwKyhyZT4+MTgmNykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKHJlPj4xMiY2MykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKHJlPj42JjYzKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmcmUpKSk7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDpQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKFE+PjEyKSkpLFAucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoUT4+NiY2MykpKSxQLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJlEpKSl9cmV0dXJuIFAuam9pbigiIil9O2lmKGhlKXt2YXIgaHM9''@;'; put 'put ''ZnVuY3Rpb24oUCl7dmFyIFEscmUsU2UsTD1CdWZmZXIuYWxsb2MoMipQLmxlbmd0aCkscGU9MSxfZT0wLHZlPTA7Zm9yKHJlPTA7cmU8UC5sZW5ndGg7cmUrPXBlKXBlPTEsKFNlPVAuY2hhckNvZGVBdChyZSkpPDEyOD9RPVNlOlNlPDIyND8oUT02NCooMzEmU2UpKyg2MyZQLmNoYXJDb2Rl''@;'; put 'put ''QXQocmUrMSkpLHBlPTIpOlNlPDI0MD8oUT00MDk2KigxNSZTZSkrNjQqKDYzJlAuY2hhckNvZGVBdChyZSsxKSkrKDYzJlAuY2hhckNvZGVBdChyZSsyKSkscGU9Myk6KHBlPTQsUT0yNjIxNDQqKDcmU2UpKzQwOTYqKDYzJlAuY2hhckNvZGVBdChyZSsxKSkrNjQqKDYzJlAuY2hhckNvZGVB''@;'; put 'put ''dChyZSsyKSkrKDYzJlAuY2hhckNvZGVBdChyZSszKSksdmU9NTUyOTYrKChRLT02NTUzNik+Pj4xMCYxMDIzKSxRPTU2MzIwKygxMDIzJlEpKSwwIT09dmUmJihMW19lKytdPTI1NSZ2ZSxMW19lKytdPXZlPj4+OCx2ZT0wKSxMW19lKytdPVElMjU2LExbX2UrK109UT4+Pjg7cmV0dXJuIEwu''@;'; put 'put ''c2xpY2UoMCxfZSkudG9TdHJpbmcoInVjczIiKX0scnM9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7UGkocnMpPT1ocyhycykmJihQaT1ocyk7dmFyIExjPWZ1bmN0aW9uKFApe3JldHVybiB1ZShQLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtQaShycyk9''@;'; put 'put ''PUxjKHJzKSYmKFBpPUxjKSxMbz1mdW5jdGlvbih5KXtyZXR1cm4gdWUoeSwidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIHksdWw9KHk9e30sZnVuY3Rpb24oTCxRKXt2YXIgcmU9TCsifCIrKFF8fCIiKTtyZXR1cm4geVtyZV0/eVtyZV06eVtyZV09bmV3IFJlZ0V4cCgiPCg/Olxc''@;'; put 'put ''dys6KT8iK0wrJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycrTCsiPiIsUXx8IiIpfSksUmM9ZnVuY3Rpb24oKXt2YXIgeT1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0s''@;'; put 'put ''WyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuW25ldyBSZWdFeHAoIiYiK1BbMF0rIjsiLCJpZyIpLFBbMV1dfSk7cmV0dXJuIGZ1bmN0aW9uKEwpe2Zvcih2YXIgUT1MLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0''@;'; put 'put ''XG5cciBdKyQvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC88XHMqW2JCXVtyUl1ccypcLz8+L2csIlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxyZT0wO3JlPHkubGVuZ3RoOysrcmUpUT1RLnJlcGxhY2UoeVtyZV1bMF0seVtyZV1bMV0pO3JldHVybiBRfX0o''@;'; put 'put ''KSxOMD1mdW5jdGlvbigpe3ZhciB5PXt9O3JldHVybiBmdW5jdGlvbihMKXtyZXR1cm4gdm9pZCAwIT09eVtMXT95W0xdOnlbTF09bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitMKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIrTCsiPiIsImciKX19KCksczM9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+''@;'; put 'put ''L2csazI9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBlMCh5LFApe3ZhciBMPWxuKHkpLFE9eS5tYXRjaChOMChMLmJhc2VUeXBlKSl8fFtdLHJlPVtdO2lmKFEubGVuZ3RoIT1MLnNpemUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3Ig''@;'; put 'put ''bGVuZ3RoICIrUS5sZW5ndGgrIiAhPSAiK0wuc2l6ZSk7cmV0dXJuIHJlfXJldHVybiBRLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBfZT1wZS5yZXBsYWNlKHMzLCIiKS5tYXRjaChrMik7X2UmJnJlLnB1c2goe3Y6UGkoX2VbMl0pLHQ6X2VbMV19KX0pLHJlfXZhciB4dT0vKF5cc3xccyR8''@;'; put 'put ''XG4pLztmdW5jdGlvbiBmcyh5LFApe3JldHVybiI8Iit5KyhQLm1hdGNoKHh1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK1ArIjwvIit5KyI+In1mdW5jdGlvbiBQYSh5KXtyZXR1cm4gbHQoeSkubWFwKGZ1bmN0aW9uKFApe3JldHVybiIgIitQKyc9IicreVtQXSsnIid9KS5q''@;'; put 'put ''b2luKCIiKX1mdW5jdGlvbiBTcih5LFAsTCl7cmV0dXJuIjwiK3krKG51bGwhPUw/UGEoTCk6IiIpKyhudWxsIT1QPyhQLm1hdGNoKHh1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK1ArIjwvIit5OiIvIikrIj4ifWZ1bmN0aW9uIFBoKHksUCl7dHJ5e3JldHVybiB5LnRvSVNP''@;'; put 'put ''U3RyaW5nKCkucmVwbGFjZSgvXC5cZCovLCIiKX1jYXRjaChMKXtpZihQKXRocm93IEx9cmV0dXJuIiJ9dmFyIEFyLF9jLGlzPXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8v''@;'; put 'put ''cHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRw''@;'; put 'put ''Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcv''@;'; put 'put ''MjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFkc2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRz''@;'; put 'put ''aGVldG1sL21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2LzIiXX0sV2k9e286InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmlj''@;'; put 'put ''ZSIseDoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLHNzOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldCIsZHQ6InV1aWQ6QzJGNDEwMTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIixtdjoiaHR0cDovL21hY1ZtbFNjaGVt''@;'; put 'put ''YVVyaSIsdjoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiLGh0bWw6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSxTYT1mdW5jdGlvbih5KXtmb3IodmFyIFA9W10sUT0wO1E8eVswXS5sZW5ndGg7KytRKWlmKHlbMF1bUV0pZm9yKHZhciByZT0wLHBlPXlbMF1bUV0u''@;'; put 'put ''bGVuZ3RoO3JlPHBlO3JlKz0xMDI0MClQLnB1c2guYXBwbHkoUCx5WzBdW1FdLnNsaWNlKHJlLHJlKzEwMjQwKSk7cmV0dXJuIFB9LEZoPVNhLEV1PWZ1bmN0aW9uKHksUCxMKXtmb3IodmFyIFE9W10scmU9UDtyZTxMO3JlKz0yKVEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFluKHkscmUp''@;'; put 'put ''KSk7cmV0dXJuIFEuam9pbigiIikucmVwbGFjZSh2LCIiKX0sQXM9RXUsbjA9ZnVuY3Rpb24oeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPFArTDsrK3JlKVEucHVzaCgoIjAiK3lbcmVdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gUS5qb2luKCIiKX0scWE9bjAsdmM9ZnVu''@;'; put 'put ''Y3Rpb24oeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT1QO3JlPEw7cmUrKylRLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShRaSh5LHJlKSkpO3JldHVybiBRLmpvaW4oIiIpfSxIaD12YyxJcz1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD92Yyh5LFArNCxQKzQrTC0xKToi''@;'; put 'put ''In0sYm89SXMscjA9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/dmMoeSxQKzQsUCs0K0wtMSk6IiJ9LFQyPXIwLEQyPWZ1bmN0aW9uKHksUCl7dmFyIEw9Mip5aSh5LFApO3JldHVybiBMPjA/dmMoeSxQKzQsUCs0K0wtMSk6IiJ9LGwzPUQyO0FyPV9jPWZ1bmN0aW9u''@;'; put 'put ''KFAsTCl7dmFyIFE9eWkoUCxMKTtyZXR1cm4gUT4wP0V1KFAsTCs0LEwrNCtRKToiIn07dmFyIG8wLEkyLGtvPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4wP3ZjKHksUCs0LFArNCtMKToiIn0sQ3M9a287bzA9STI9ZnVuY3Rpb24oeSxQKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''JGEoeSxQKXtmb3IodmFyIEw9MS0yKih5W1ArN10+Pj43KSxRPSgoMTI3JnlbUCs3XSk8PDQpKyh5W1ArNl0+Pj40JjE1KSxyZT0xNSZ5W1ArNl0scGU9NTtwZT49MDstLXBlKXJlPTI1NipyZSt5W1ArcGVdO3JldHVybiAyMDQ3PT1RPzA9PXJlP0wqKDEvMCk6TmFOOigwPT1RP1E9LTEwMjI6''@;'; put 'put ''KFEtPTEwMjMscmUrPU1hdGgucG93KDIsNTIpKSxMKk1hdGgucG93KDIsUS01MikqcmUpfSh5LFApfTt2YXIgTmg9ZnVuY3Rpb24oUCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoUCl9O2hlJiYoRXU9ZnVuY3Rpb24oeSxQLEwpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoeSk/eS50b1N0cmluZygi''@;'; put 'put ''dXRmMTZsZSIsUCxMKS5yZXBsYWNlKHYsIiIpOkFzKHksUCxMKX0sbjA9ZnVuY3Rpb24oeSxQLEwpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoeSk/eS50b1N0cmluZygiaGV4IixQLFArTCk6cWEoeSxQLEwpfSxJcz1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJu''@;'; put 'put ''IGJvKFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFE+MD9QLnRvU3RyaW5nKCJ1dGY4IixMKzQsTCs0K1EtMSk6IiJ9LHIwPWZ1bmN0aW9uKFAsTCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihQKSlyZXR1cm4gVDIoUCxMKTt2YXIgUT1QLnJlYWRVSW50MzJMRShMKTtyZXR1cm4g''@;'; put 'put ''UT4wP1AudG9TdHJpbmcoInV0ZjgiLEwrNCxMKzQrUS0xKToiIn0sRDI9ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBsMyhQLEwpO3ZhciBRPTIqUC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjE2bGUiLEwrNCxMKzQrUS0xKX0sQXI9''@;'; put 'put ''ZnVuY3Rpb24oUCxMKXtpZighQnVmZmVyLmlzQnVmZmVyKFApKXJldHVybiBfYyhQLEwpO3ZhciBRPVAucmVhZFVJbnQzMkxFKEwpO3JldHVybiBQLnRvU3RyaW5nKCJ1dGYxNmxlIixMKzQsTCs0K1EpfSxrbz1mdW5jdGlvbihQLEwpe2lmKCFCdWZmZXIuaXNCdWZmZXIoUCkpcmV0dXJuIENz''@;'; put 'put ''KFAsTCk7dmFyIFE9UC5yZWFkVUludDMyTEUoTCk7cmV0dXJuIFAudG9TdHJpbmcoInV0ZjgiLEwrNCxMKzQrUSl9LHZjPWZ1bmN0aW9uKFAsTCxRKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApP1AudG9TdHJpbmcoInV0ZjgiLEwsUSk6SGgoUCxMLFEpfSxTYT1mdW5jdGlvbih5KXtyZXR1''@;'; put 'put ''cm4geVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKHlbMF1bMF0pP0J1ZmZlci5jb25jYXQoeVswXSk6RmgoeSl9LFM9ZnVuY3Rpb24oeSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih5WzBdKT9CdWZmZXIuY29uY2F0KHkpOltdLmNvbmNhdC5hcHBseShbXSx5KX0sbzA9ZnVuY3Rpb24o''@;'; put 'put ''UCxMKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApP1AucmVhZERvdWJsZUxFKEwpOkkyKFAsTCl9LE5oPWZ1bmN0aW9uKFApe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUCl8fEFycmF5LmlzQXJyYXkoUCl9KSx0eXBlb2YgY3B0YWJsZTwidSImJihFdT1mdW5jdGlvbih5LFAsTCl7cmV0dXJu''@;'; put 'put ''IGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAseS5zbGljZShQLEwpKS5yZXBsYWNlKHYsIiIpfSx2Yz1mdW5jdGlvbih5LFAsTCl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLHkuc2xpY2UoUCxMKSl9LElzPWZ1bmN0aW9uKHksUCl7dmFyIEw9eWkoeSxQKTtyZXR1cm4gTD4w''@;'; put 'put ''P2NwdGFibGUudXRpbHMuZGVjb2RlKFIseS5zbGljZShQKzQsUCs0K0wtMSkpOiIifSxyMD1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShPLHkuc2xpY2UoUCs0LFArNCtMLTEpKToiIn0sRDI9ZnVuY3Rpb24oeSxQKXt2YXIgTD0y''@;'; put 'put ''KnlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLHkuc2xpY2UoUCs0LFArNCtMLTEpKToiIn0sQXI9ZnVuY3Rpb24oeSxQKXt2YXIgTD15aSh5LFApO3JldHVybiBMPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCx5LnNsaWNlKFArNCxQKzQrTCkpOiIifSxr''@;'; put 'put ''bz1mdW5jdGlvbih5LFApe3ZhciBMPXlpKHksUCk7cmV0dXJuIEw+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSx5LnNsaWNlKFArNCxQKzQrTCkpOiIifSk7dmFyIFFpPWZ1bmN0aW9uKHksUCl7cmV0dXJuIHlbUF19LFluPWZ1bmN0aW9uKHksUCl7cmV0dXJuIDI1Nip5W1ArMV0reVtQ''@;'; put 'put ''XX0sYmk9ZnVuY3Rpb24oeSxQKXt2YXIgTD0yNTYqeVtQKzFdK3lbUF07cmV0dXJuIEw8MzI3Njg/TDotMSooNjU1MzUtTCsxKX0seWk9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQKzNdKigxPDwyNCkrKHlbUCsyXTw8MTYpKyh5W1ArMV08PDgpK3lbUF19LG9zPWZ1bmN0aW9uKHksUCl7cmV0''@;'; put 'put ''dXJuIHlbUCszXTw8MjR8eVtQKzJdPDwxNnx5W1ArMV08PDh8eVtQXX0sRmE9ZnVuY3Rpb24oeSxQKXtyZXR1cm4geVtQXTw8MjR8eVtQKzFdPDwxNnx5W1ArMl08PDh8eVtQKzNdfTtmdW5jdGlvbiBIYSh5LFApe3ZhciBRLHJlLF9lLHZlLFNlLEhlLEw9IiIscGU9W107c3dpdGNoKFApe2Nh''@;'; put 'put ''c2UiZGJjcyI6aWYoSGU9dGhpcy5sLGhlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpTD10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMip5KS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKFNlPTA7U2U8eTsrK1NlKUwrPVN0cmluZy5mcm9tQ2hhckNvZGUoWW4odGhpcyxIZSkpLEhlKz0y''@;'; put 'put ''O3kqPTI7YnJlYWs7Y2FzZSJ1dGY4IjpMPXZjKHRoaXMsdGhpcy5sLHRoaXMubCt5KTticmVhaztjYXNlInV0ZjE2bGUiOkw9RXUodGhpcyx0aGlzLmwsdGhpcy5sKyh5Kj0yKSk7YnJlYWs7Y2FzZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIEhhLmNhbGwodGhpcyx5''@;'; put 'put ''LCJkYmNzIik7TD1jcHRhYmxlLnV0aWxzLmRlY29kZShPLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKnkpKSx5Kj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6TD1Jcyh0aGlzLHRoaXMubCkseT00K3lpKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjpMPXIwKHRoaXMsdGhp''@;'; put 'put ''cy5sKSx5PTQreWkodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjpMPUQyKHRoaXMsdGhpcy5sKSx5PTQrMip5aSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0Ijp5PTQreWkodGhpcyx0aGlzLmwpLEw9QXIodGhpcyx0aGlzLmwpLDImeSYmKHkrPTIpO2JyZWFrO2Nhc2UiOGxw''@;'; put 'put ''cDQiOnk9NCt5aSh0aGlzLHRoaXMubCksTD1rbyh0aGlzLHRoaXMubCksMyZ5JiYoeSs9NC0oMyZ5KSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoeT0wLEw9IiI7MCE9PShfZT1RaSh0aGlzLHRoaXMubCt5KyspKTspcGUucHVzaChxKF9lKSk7TD1wZS5qb2luKCIiKTticmVhaztjYXNlIl93c3Ry''@;'; put 'put ''Ijpmb3IoeT0wLEw9IiI7MCE9PShfZT1Zbih0aGlzLHRoaXMubCt5KSk7KXBlLnB1c2gocShfZSkpLHkrPTI7eSs9MixMPXBlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3IoTD0iIixIZT10aGlzLmwsU2U9MDtTZTx5OysrU2Upe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxl''@;'; put 'put ''bnMuaW5kZXhPZihIZSkpcmV0dXJuIF9lPVFpKHRoaXMsSGUpLHRoaXMubD1IZSsxLHZlPUhhLmNhbGwodGhpcyx5LVNlLF9lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxwZS5qb2luKCIiKSt2ZTtwZS5wdXNoKHEoWW4odGhpcyxIZSkpKSxIZSs9Mn1MPXBlLmpvaW4oIiIpLHkqPTI7YnJl''@;'; put 'put ''YWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtMPWNwdGFibGUudXRpbHMuZGVjb2RlKE8sdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK3kpKTticmVha31jYXNlInNiY3MtY29udCI6Zm9yKEw9IiIsSGU9dGhpcy5sLFNlPTA7U2UhPXk7KytTZSl7aWYodGhpcy5sZW5zJiYt''@;'; put 'put ''MSE9PXRoaXMubGVucy5pbmRleE9mKEhlKSlyZXR1cm4gX2U9UWkodGhpcyxIZSksdGhpcy5sPUhlKzEsdmU9SGEuY2FsbCh0aGlzLHktU2UsX2U/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHBlLmpvaW4oIiIpK3ZlO3BlLnB1c2gocShRaSh0aGlzLEhlKSkpLEhlKz0xfUw9cGUuam9pbigi''@;'; put 'put ''Iik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goeSl7Y2FzZSAxOnJldHVybiBRPVFpKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxRO2Nhc2UgMjpyZXR1cm4gUT0oImkiPT09UD9iaTpZbikodGhpcyx0aGlzLmwpLHRoaXMubCs9MixRO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09UCYmMTI4JnRoaXNb''@;'; put 'put ''dGhpcy5sKzNdPyhyZT15aSh0aGlzLHRoaXMubCksdGhpcy5sKz00LHJlKTooUT0oeT4wP29zOkZhKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LFEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09UClyZXR1cm4gcmU9OD09eT9vMCh0aGlzLHRoaXMubCk6bzAoW3RoaXNbdGhpcy5sKzddLHRoaXNb''@;'; put 'put ''dGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgscmU7eT04O2Nhc2UgMTY6TD1uMCh0aGlzLHRoaXMubCx5KX19cmV0dXJuIHRoaXMubCs9''@;'; put 'put ''eSxMfXZhciAkbz1mdW5jdGlvbih5LFAsTCl7eVtMXT0yNTUmUCx5W0wrMV09UD4+PjgmMjU1LHlbTCsyXT1QPj4+MTYmMjU1LHlbTCszXT1QPj4+MjQmMjU1fSxWMD1mdW5jdGlvbih5LFAsTCl7eVtMXT0yNTUmUCx5W0wrMV09UD4+OCYyNTUseVtMKzJdPVA+PjE2JjI1NSx5W0wrM109UD4+''@;'; put 'put ''MjQmMjU1fSxEYT1mdW5jdGlvbih5LFAsTCl7eVtMXT0yNTUmUCx5W0wrMV09UD4+PjgmMjU1fTtmdW5jdGlvbiBWaCh5LFAsTCl7dmFyIFE9MCxyZT0wO2lmKCJkYmNzIj09PUwpe2ZvcihyZT0wO3JlIT1QLmxlbmd0aDsrK3JlKURhKHRoaXMsUC5jaGFyQ29kZUF0KHJlKSx0aGlzLmwrMipy''@;'; put 'put ''ZSk7UT0yKlAubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09TCl7aWYodHlwZW9mIGNwdGFibGU8InUiJiY4NzQ9PVIpZm9yKHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBwZT1jcHRhYmxlLnV0aWxzLmVuY29kZShSLFAuY2hhckF0KHJlKSk7dGhpc1t0aGlzLmwrcmVdPXBlWzBdfWVsc2Ug''@;'; put 'put ''Zm9yKFA9UC5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIpLHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpdGhpc1t0aGlzLmwrcmVdPTI1NSZQLmNoYXJDb2RlQXQocmUpO1E9UC5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PUwpe2Zvcig7cmU8eTsrK3JlKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50''@;'; put 'put ''KFAuc2xpY2UoMipyZSwyKnJlKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1MKXt2YXIgX2U9TWF0aC5taW4odGhpcy5sK3ksdGhpcy5sZW5ndGgpO2ZvcihyZT0wO3JlPE1hdGgubWluKFAubGVuZ3RoLHkpOysrcmUpe3ZhciB2ZT1QLmNoYXJDb2RlQXQocmUpO3RoaXNb''@;'; put 'put ''dGhpcy5sKytdPTI1NSZ2ZSx0aGlzW3RoaXMubCsrXT12ZT4+OH1mb3IoO3RoaXMubDxfZTspdGhpc1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2goeSl7Y2FzZSAxOlE9MSx0aGlzW3RoaXMubF09MjU1JlA7YnJlYWs7Y2FzZSAyOlE9Mix0aGlzW3RoaXMubF09MjU1JlAsdGhpc1t0''@;'; put 'put ''aGlzLmwrMV09MjU1JihQPj4+PTgpO2JyZWFrO2Nhc2UgMzpRPTMsdGhpc1t0aGlzLmxdPTI1NSZQLHRoaXNbdGhpcy5sKzFdPTI1NSYoUD4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKFA+Pj49OCk7YnJlYWs7Y2FzZSA0OlE9NCwkbyh0aGlzLFAsdGhpcy5sKTticmVhaztjYXNlIDg6aWYo''@;'; put 'put ''UT04LCJmIj09PUwpeyFmdW5jdGlvbiB0MCh5LFAsTCl7dmFyIFE9KFA8MHx8MS9QPT0tMS8wPzE6MCk8PDcscmU9MCxwZT0wLF9lPVE/LVA6UDtpc0Zpbml0ZShfZSk/MD09X2U/cmU9cGU9MDoocmU9TWF0aC5mbG9vcihNYXRoLmxvZyhfZSkvTWF0aC5MTjIpLHBlPV9lKk1hdGgucG93KDIs''@;'; put 'put ''NTItcmUpLHJlPD0tMTAyMyYmKCFpc0Zpbml0ZShwZSl8fHBlPE1hdGgucG93KDIsNTIpKT9yZT0tMTAyMjoocGUtPU1hdGgucG93KDIsNTIpLHJlKz0xMDIzKSk6KHJlPTIwNDcscGU9aXNOYU4oUCk/MjY5ODU6MCk7Zm9yKHZhciB2ZT0wO3ZlPD01OysrdmUscGUvPTI1Nil5W0wrdmVdPTI1''@;'; put 'put ''NSZwZTt5W0wrNl09KDE1JnJlKTw8NHwxNSZwZSx5W0wrN109cmU+PjR8UX0odGhpcyxQLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztjYXNlLTQ6UT00LFYwKHRoaXMsUCx0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1RLHRoaXN9ZnVuY3Rpb24gQmgoeSxQKXt2YXIgTD1uMCh0aGlzLHRo''@;'; put 'put ''aXMubCx5Lmxlbmd0aD4+MSk7aWYoTCE9PXkpdGhyb3cgbmV3IEVycm9yKFArIkV4cGVjdGVkICIreSsiIHNhdyAiK0wpO3RoaXMubCs9eS5sZW5ndGg+PjF9ZnVuY3Rpb24gb2woeSxQKXt5Lmw9UCx5LnJlYWRfc2hpZnQ9SGEseS5jaGs9QmgseS53cml0ZV9zaGlmdD1WaH1mdW5jdGlvbiBi''@;'; put 'put ''Yyh5LFApe3kubCs9UH1mdW5jdGlvbiBmcih5KXt2YXIgUD1HKHkpO3JldHVybiBvbChQLDApLFB9ZnVuY3Rpb24gSG8oeSxQLEwpe2lmKHkpe3ZhciBRLHJlLHBlO29sKHkseS5sfHwwKTtmb3IodmFyIF9lPXkubGVuZ3RoLHZlPTAsU2U9MDt5Lmw8X2U7KXsxMjgmKHZlPXkucmVhZF9zaGlm''@;'; put 'put ''dCgxKSkmJih2ZT0oMTI3JnZlKSsoKDEyNyZ5LnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIEhlPW1mW3ZlXXx8bWZbNjU1MzVdO2ZvcihwZT0xMjcmKFE9eS5yZWFkX3NoaWZ0KDEpKSxyZT0xO3JlPDQmJjEyOCZROysrcmUpcGUrPSgxMjcmKFE9eS5yZWFkX3NoaWZ0KDEpKSk8PDcqcmU7U2U9''@;'; put 'put ''eS5sK3BlO3ZhciBCZT0oSGUuZnx8YmMpKHkscGUsTCk7aWYoeS5sPVNlLFAoQmUsSGUubix2ZSkpcmV0dXJufX19ZnVuY3Rpb24geWMoKXt2YXIgeT1bXSxQPWhlPzI1NjoyMDQ4LEw9ZnVuY3Rpb24oSGUpe3ZhciBCZT1mcihIZSk7cmV0dXJuIG9sKEJlLDApLEJlfSxRPUwoUCkscmU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtRJiYoUS5sZW5ndGg+US5sJiYoKFE9US5zbGljZSgwLFEubCkpLmw9US5sZW5ndGgpLFEubGVuZ3RoPjAmJnkucHVzaChRKSxRPW51bGwpfSxwZT1mdW5jdGlvbihIZSl7cmV0dXJuIFEmJkhlPFEubGVuZ3RoLVEubD9ROihyZSgpLFE9TChNYXRoLm1heChIZSsxLFApKSl9O3Jl''@;'; put 'put ''dHVybntuZXh0OnBlLHB1c2g6ZnVuY3Rpb24oSGUpe3JlKCksbnVsbD09KFE9SGUpLmwmJihRLmw9US5sZW5ndGgpLHBlKFApfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gcmUoKSxTYShbeV0pfSxfYnVmczp5fX1mdW5jdGlvbiB1aSh5LFAsTCxRKXt2YXIgcGUscmU9K2I1W1BdO2lmKCFpc05h''@;'; put 'put ''TihyZSkpe1F8fChRPW1mW3JlXS5wfHwoTHx8W10pLmxlbmd0aHx8MCkscGU9MSsocmU+PTEyOD8xOjApKzEsUT49MTI4JiYrK3BlLFE+PTE2Mzg0JiYrK3BlLFE+PTIwOTcxNTImJisrcGU7dmFyIF9lPXkubmV4dChwZSk7cmU8PTEyNz9fZS53cml0ZV9zaGlmdCgxLHJlKTooX2Uud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwxMjgrKDEyNyZyZSkpLF9lLndyaXRlX3NoaWZ0KDEscmU+PjcpKTtmb3IodmFyIHZlPTA7NCE9dmU7Kyt2ZSl7aWYoIShRPj0xMjgpKXtfZS53cml0ZV9zaGlmdCgxLFEpO2JyZWFrfV9lLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmUSkpLFE+Pj03fVE+MCYmTmgoTCkmJnkucHVz''@;'; put 'put ''aChMKX19ZnVuY3Rpb24gbHUoeSxQLEwpe3ZhciBRPW9uKHkpO2lmKFAucz8oUS5jUmVsJiYoUS5jKz1QLnMuYyksUS5yUmVsJiYoUS5yKz1QLnMucikpOihRLmNSZWwmJihRLmMrPVAuYyksUS5yUmVsJiYoUS5yKz1QLnIpKSwhTHx8TC5iaWZmPDEyKXtmb3IoO1EuYz49MjU2OylRLmMtPTI1''@;'; put 'put ''Njtmb3IoO1Eucj49NjU1MzY7KVEuci09NjU1MzZ9cmV0dXJuIFF9ZnVuY3Rpb24gaHIoeSxQLEwpe3ZhciBRPW9uKHkpO3JldHVybiBRLnM9bHUoUS5zLFAucyxMKSxRLmU9bHUoUS5lLFAucyxMKSxRfWZ1bmN0aW9uIEwyKHksUCl7aWYoeS5jUmVsJiZ5LmM8MClmb3IoeT1vbih5KTt5LmM8''@;'; put 'put ''MDspeS5jKz1QPjg/MTYzODQ6MjU2O2lmKHkuclJlbCYmeS5yPDApZm9yKHk9b24oeSk7eS5yPDA7KXkucis9UD44PzEwNDg1NzY6UD41PzY1NTM2OjE2Mzg0O2lmKHkuY1JlbCYmeS5jPj0oUD44PzE2Mzg0OjI1NikpZm9yKHk9b24oeSk7eS5jPj0oUD44PzE2Mzg0OjI1Nik7KXkuYy09UD44''@;'; put 'put ''PzE2Mzg0OjI1NjtpZih5LnJSZWwmJnkucj49MTA0ODU3Nilmb3IoeT1vbih5KTt5LnI+PTEwNDg1NzY7KXkuci09MTA0ODU3Njt2YXIgTD1kaSh5KTtyZXR1cm4heS5jUmVsJiZudWxsIT15LmNSZWwmJihMPWZ1bmN0aW9uIEs3KHkpe3JldHVybiB5LnJlcGxhY2UoL14oW0EtWl0pLywiJCQk''@;'; put 'put ''MSIpfShMKSksIXkuclJlbCYmbnVsbCE9eS5yUmVsJiYoTD1mdW5jdGlvbiBubSh5KXtyZXR1cm4geS5yZXBsYWNlKC8oW0EtWl18XikoXGQrKSQvLCIkMSQkJDIiKX0oTCkpLEx9ZnVuY3Rpb24gbWkoeSxQKXtyZXR1cm4gMCE9eS5zLnJ8fHkucy5yUmVsfHx5LmUuciE9KFAuYmlmZj49MTI/''@;'; put 'put ''MTA0ODU3NTpQLmJpZmY+PTg/NjU1MzY6MTYzODQpfHx5LmUuclJlbD8wIT15LnMuY3x8eS5zLmNSZWx8fHkuZS5jIT0oUC5iaWZmPj0xMj8xNjM4MzoyNTUpfHx5LmUuY1JlbD9MMih5LnMsUC5iaWZmKSsiOiIrTDIoeS5lLFAuYmlmZik6KHkucy5yUmVsPyIiOiIkIikrSHMoeS5zLnIpKyI6''@;'; put 'put ''IisoeS5lLnJSZWw/IiI6IiQiKStIcyh5LmUucik6KHkucy5jUmVsPyIiOiIkIikrTnMoeS5zLmMpKyI6IisoeS5lLmNSZWw/IiI6IiQiKStOcyh5LmUuYyl9dmFyIHhkPXt9O2Z1bmN0aW9uIEIwKHkpe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBjMyh5KXtyZXR1cm4geS5yZXBsYWNlKC9c''@;'; put 'put ''JChcZCspJC8sIiQxIil9KHkpLDEwKS0xfWZ1bmN0aW9uIEhzKHkpe3JldHVybiIiKyh5KzEpfWZ1bmN0aW9uIGpoKHkpe2Zvcih2YXIgUD1mdW5jdGlvbiBucyh5KXtyZXR1cm4geS5yZXBsYWNlKC9eXCQoW0EtWl0pLywiJDEiKX0oeSksTD0wLFE9MDtRIT09UC5sZW5ndGg7KytRKUw9MjYq''@;'; put 'put ''TCtQLmNoYXJDb2RlQXQoUSktNjQ7cmV0dXJuIEwtMX1mdW5jdGlvbiBOcyh5KXtpZih5PDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK3kpO3ZhciBQPSIiO2ZvcigrK3k7eTt5PU1hdGguZmxvb3IoKHktMSkvMjYpKVA9U3RyaW5nLmZyb21DaGFyQ29kZSgoeS0xKSUyNis2''@;'; put 'put ''NSkrUDtyZXR1cm4gUH1mdW5jdGlvbiBzcyh5KXtmb3IodmFyIFA9MCxMPTAsUT0wO1E8eS5sZW5ndGg7KytRKXt2YXIgcmU9eS5jaGFyQ29kZUF0KFEpO3JlPj00OCYmcmU8PTU3P1A9MTAqUCsocmUtNDgpOnJlPj02NSYmcmU8PTkwJiYoTD0yNipMKyhyZS02NCkpfXJldHVybntjOkwtMSxy''@;'; put 'put ''OlAtMX19ZnVuY3Rpb24gZGkoeSl7Zm9yKHZhciBQPXkuYysxLEw9IiI7UDtQPShQLTEpLzI2fDApTD1TdHJpbmcuZnJvbUNoYXJDb2RlKChQLTEpJTI2KzY1KStMO3JldHVybiBMKyh5LnIrMSl9ZnVuY3Rpb24gV3MoeSl7dmFyIFA9eS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PVA/e3M6c3Mo''@;'; put 'put ''eSksZTpzcyh5KX06e3M6c3MoeS5zbGljZSgwLFApKSxlOnNzKHkuc2xpY2UoUCsxKSl9fWZ1bmN0aW9uIE9vKHksUCl7cmV0dXJuIHR5cGVvZiBQPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBQP09vKHkucyx5LmUpOigic3RyaW5nIiE9dHlwZW9mIHkmJih5PWRpKHkpKSwic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIFAmJihQPWRpKFApKSx5PT1QP3k6eSsiOiIrUCl9ZnVuY3Rpb24gT2koeSl7dmFyIFA9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLEw9MCxRPTAscmU9MCxwZT15Lmxlbmd0aDtmb3IoTD0wO1E8cGUmJiEoKHJlPXkuY2hhckNvZGVBdChR''@;'; put 'put ''KS02NCk8MXx8cmU+MjYpOysrUSlMPTI2KkwrcmU7Zm9yKFAucy5jPS0tTCxMPTA7UTxwZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTQ4KTwwfHxyZT45KTsrK1EpTD0xMCpMK3JlO2lmKFAucy5yPS0tTCxRPT09cGV8fDU4PT09eS5jaGFyQ29kZUF0KCsrUSkpcmV0dXJuIFAuZS5jPVAucy5j''@;'; put 'put ''LFAuZS5yPVAucy5yLFA7Zm9yKEw9MDtRIT1wZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTY0KTwxfHxyZT4yNik7KytRKUw9MjYqTCtyZTtmb3IoUC5lLmM9LS1MLEw9MDtRIT1wZSYmISgocmU9eS5jaGFyQ29kZUF0KFEpLTQ4KTwwfHxyZT45KTsrK1EpTD0xMCpMK3JlO3JldHVybiBQLmUu''@;'; put 'put ''cj0tLUwsUH1mdW5jdGlvbiBybSh5LFApe3ZhciBMPSJkIj09eS50JiZQIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT15LnopdHJ5e3JldHVybiB5Lnc9dy5mb3JtYXQoeS56LEw/VWUoUCk6UCl9Y2F0Y2h7fXRyeXtyZXR1cm4geS53PXcuZm9ybWF0KCh5LlhGfHx7fSkubnVtRm10SWR8fChM''@;'; put 'put ''PzE0OjApLEw/VWUoUCk6UCl9Y2F0Y2h7cmV0dXJuIiIrUH19ZnVuY3Rpb24gY3UoeSxQLEwpe3JldHVybiBudWxsPT15fHxudWxsPT15LnR8fCJ6Ij09eS50PyIiOnZvaWQgMCE9PXkudz95Lnc6KCJkIj09eS50JiYheS56JiZMJiZMLmRhdGVORiYmKHkuej1MLmRhdGVORiksImUiPT15LnQ/''@;'; put 'put ''UW9beS52XXx8eS52OnJtKHksbnVsbD09UD95LnY6UCkpfWZ1bmN0aW9uIEVkKHksUCl7dmFyIEw9UCYmUC5zaGVldD9QLnNoZWV0OiJTaGVldDEiLFE9e307cmV0dXJuIFFbTF09eSx7U2hlZXROYW1lczpbTF0sU2hlZXRzOlF9fWZ1bmN0aW9uIHMwKHksUCxMKXt2YXIgUT1MfHx7fSxyZT15''@;'; put 'put ''P0FycmF5LmlzQXJyYXkoeSk6US5kZW5zZTtudWxsIT10ZSYmbnVsbD09cmUmJihyZT10ZSk7dmFyIHBlPXl8fChyZT9bXTp7fSksX2U9MCx2ZT0wO2lmKHBlJiZudWxsIT1RLm9yaWdpbil7aWYoIm51bWJlciI9PXR5cGVvZiBRLm9yaWdpbilfZT1RLm9yaWdpbjtlbHNle3ZhciBTZT0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIFEub3JpZ2luP3NzKFEub3JpZ2luKTpRLm9yaWdpbjtfZT1TZS5yLHZlPVNlLmN9cGVbIiFyZWYiXXx8KHBlWyIhcmVmIl09IkExOkExIil9dmFyIEhlPXtzOntjOjFlNyxyOjFlN30sZTp7YzowLHI6MH19O2lmKHBlWyIhcmVmIl0pe3ZhciBCZT1PaShwZVsiIXJlZiJd''@;'; put 'put ''KTtIZS5zLmM9QmUucy5jLEhlLnMucj1CZS5zLnIsSGUuZS5jPU1hdGgubWF4KEhlLmUuYyxCZS5lLmMpLEhlLmUucj1NYXRoLm1heChIZS5lLnIsQmUuZS5yKSwtMT09X2UmJihIZS5lLnI9X2U9QmUuZS5yKzEpfWZvcih2YXIgR2U9MDtHZSE9UC5sZW5ndGg7KytHZSlpZihQW0dlXSl7aWYo''@;'; put 'put ''IUFycmF5LmlzQXJyYXkoUFtHZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMgYW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciBudD0wO250IT1QW0dlXS5sZW5ndGg7KytudClpZighKHR5cGVvZiBQW0dlXVtudF0+InUiKSl7dmFyIGR0PXt2OlBbR2VdW250XX0s''@;'; put 'put ''Q3Q9X2UrR2UsY3Q9dmUrbnQ7aWYoSGUucy5yPkN0JiYoSGUucy5yPUN0KSxIZS5zLmM+Y3QmJihIZS5zLmM9Y3QpLEhlLmUucjxDdCYmKEhlLmUucj1DdCksSGUuZS5jPGN0JiYoSGUuZS5jPWN0KSwhUFtHZV1bbnRdfHwib2JqZWN0IiE9dHlwZW9mIFBbR2VdW250XXx8QXJyYXkuaXNBcnJh''@;'; put 'put ''eShQW0dlXVtudF0pfHxQW0dlXVtudF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkdC52KSYmKGR0LmY9UFtHZV1bbnRdWzFdLGR0LnY9ZHQudlswXSksbnVsbD09PWR0LnYpaWYoZHQuZilkdC50PSJuIjtlbHNlIGlmKFEubnVsbEVycm9yKWR0LnQ9ImUiLGR0LnY9MDtlbHNl''@;'; put 'put ''e2lmKCFRLnNoZWV0U3R1YnMpY29udGludWU7ZHQudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZHQudj9kdC50PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBkdC52P2R0LnQ9ImIiOmR0LnYgaW5zdGFuY2VvZiBEYXRlPyhkdC56PVEuZGF0ZU5GfHx3Ll90YWJsZVsxNF0sUS5jZWxsRGF0ZXM/''@;'; put 'put ''KGR0LnQ9ImQiLGR0Lnc9dy5mb3JtYXQoZHQueixVZShkdC52KSkpOihkdC50PSJuIixkdC52PVVlKGR0LnYpLGR0Lnc9dy5mb3JtYXQoZHQueixkdC52KSkpOmR0LnQ9InMiO2Vsc2UgZHQ9UFtHZV1bbnRdO2lmKGR0JiZkdC5oKXRyeXtkdC5SPUZ1Lmh0bWxfdG9fcnMoZHQuaCksZHQudj0i''@;'; put 'put ''Ijtmb3IodmFyIGJ0PTA7YnQ8ZHQuUi5sZW5ndGg7KytidClkdC52Kz1kdC5SW2J0XS52fHwiIn1jYXRjaHt9aWYocmUpcGVbQ3RdfHwocGVbQ3RdPVtdKSxwZVtDdF1bY3RdJiZwZVtDdF1bY3RdLnMmJihkdC5zPXBlW0N0XVtjdF0ucykscGVbQ3RdW2N0XSYmcGVbQ3RdW2N0XS56JiYoZHQu''@;'; put 'put ''ej1wZVtDdF1bY3RdLnopLHBlW0N0XVtjdF09ZHQ7ZWxzZXt2YXIgRnQ9ZGkoe2M6Y3QscjpDdH0pO3BlW0Z0XSYmcGVbRnRdLnMmJihkdC5zPXBlW0Z0XS5zKSxwZVtGdF0mJnBlW0Z0XS56JiYoZHQuej1wZVtGdF0ueikscGVbRnRdPWR0fX19cmV0dXJuIEhlLnMuYzwxZTcmJihwZVsiIXJl''@;'; put 'put ''ZiJdPU9vKEhlKSkscGV9ZnVuY3Rpb24gazEoeSxQKXtyZXR1cm4gczAobnVsbCx5LFApfWZ1bmN0aW9uIGt1KHksUCl7cmV0dXJuIFB8fChQPWZyKDQpKSxQLndyaXRlX3NoaWZ0KDQseSksUH1mdW5jdGlvbiB3Yyh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1QPyIiOnku''@;'; put 'put ''cmVhZF9zaGlmdChQLCJkYmNzIil9ZnVuY3Rpb24gbmMoeSxQKXt2YXIgTD0hMTtyZXR1cm4gbnVsbD09UCYmKEw9ITAsUD1mcig0KzIqeS5sZW5ndGgpKSxQLndyaXRlX3NoaWZ0KDQseS5sZW5ndGgpLHkubGVuZ3RoPjAmJlAud3JpdGVfc2hpZnQoMCx5LCJkYmNzIiksTD9QLnNsaWNlKDAs''@;'; put 'put ''UC5sKTpQfWZ1bmN0aW9uIG9tKHkpe3JldHVybntpY2g6eS5yZWFkX3NoaWZ0KDIpLGlmbnQ6eS5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBjYSh5LFApe3ZhciBMPXkubCxRPXkucmVhZF9zaGlmdCgxKSxyZT13Yyh5KSxwZT1bXSxfZT17dDpyZSxoOnJlfTtpZigxJlEpe2Zvcih2YXIgdmU9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDQpLFNlPTA7U2UhPXZlOysrU2UpcGUucHVzaChvbSh5KSk7X2Uucj1wZX1lbHNlIF9lLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4geS5sPUwrUCxfZX0hZnVuY3Rpb24oeSxQKXt2YXIgTDtpZih0eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpTD1jcnlwdG9Ccm93''@;'; put 'put ''c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIFA8InUiKUw9UDtlbHNlIHRyeXtMPUYoNzc5MDMpfWNhdGNoe0w9bnVsbH15LnJjND1mdW5jdGlvbihRLHJlKXt2YXIgcGU9bmV3IEFycmF5KDI1NiksX2U9MCx2ZT0wLFNlPTAsSGU9MDtmb3IodmU9MDsyNTYhPXZlOysrdmUpcGVbdmVdPXZlO2Zvcih2''@;'; put 'put ''ZT0wOzI1NiE9dmU7Kyt2ZSlTZT1TZStwZVt2ZV0rUVt2ZSVRLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsSGU9cGVbdmVdLHBlW3ZlXT1wZVtTZV0scGVbU2VdPUhlO3ZlPVNlPTA7dmFyIEJlPUcocmUubGVuZ3RoKTtmb3IoX2U9MDtfZSE9cmUubGVuZ3RoOysrX2UpSGU9cGVbdmU9dmUr''@;'; put 'put ''MSYyNTVdLHBlW3ZlXT1wZVtTZT0oU2UrcGVbdmVdKSUyNTZdLHBlW1NlXT1IZSxCZVtfZV09cmVbX2VdXnBlW3BlW3ZlXStwZVtTZV0mMjU1XTtyZXR1cm4gQmV9LHkubWQ1PWZ1bmN0aW9uKFEpe2lmKCFMKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIEwu''@;'; put 'put ''Y3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKFEpKS5kaWdlc3QoImhleCIpfX0oeGQsdHlwZW9mIGNyeXB0bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIFg3PWNhO2Z1bmN0aW9uIHV1KHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4g''@;'; put 'put ''TCs9eS5yZWFkX3NoaWZ0KDEpPDwxNix5LmwrKyx7YzpQLGlTdHlsZVJlZjpMfX1mdW5jdGlvbiBGaSh5LFApe3JldHVybiBudWxsPT1QJiYoUD1mcig4KSksUC53cml0ZV9zaGlmdCgtNCx5LmMpLFAud3JpdGVfc2hpZnQoMyx5LmlTdHlsZVJlZnx8eS5zKSxQLndyaXRlX3NoaWZ0KDEsMCks''@;'; put 'put ''UH1mdW5jdGlvbiBhMCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMik7cmV0dXJuIFArPXkucmVhZF9zaGlmdCgxKTw8MTYseS5sKysse2M6LTEsaVN0eWxlUmVmOlB9fWZ1bmN0aW9uIEtjKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZyKDQpKSxQLndyaXRlX3NoaWZ0KDMseS5pU3R5bGVSZWZ8''@;'; put 'put ''fHkucyksUC53cml0ZV9zaGlmdCgxLDApLFB9dmFyIHpoPXdjLHNtPW5jO2Z1bmN0aW9uIEF1KHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PVB8fDQyOTQ5NjcyOTU9PT1QPyIiOnkucmVhZF9zaGlmdChQLCJkYmNzIil9ZnVuY3Rpb24gQWQoeSxQKXt2YXIgTD0hMTtyZXR1''@;'; put 'put ''cm4gbnVsbD09UCYmKEw9ITAsUD1mcigxMjcpKSxQLndyaXRlX3NoaWZ0KDQseS5sZW5ndGg+MD95Lmxlbmd0aDo0Mjk0OTY3Mjk1KSx5Lmxlbmd0aD4wJiZQLndyaXRlX3NoaWZ0KDAseSwiZGJjcyIpLEw/UC5zbGljZSgwLFAubCk6UH12YXIgZHU9d2MsVDE9QXUsT2M9QWQ7ZnVuY3Rpb24g''@;'; put 'put ''WGMoeSl7dmFyIFA9eS5zbGljZSh5LmwseS5sKzQpLEw9MSZQWzBdLFE9MiZQWzBdO3kubCs9NCxQWzBdJj0yNTI7dmFyIHJlPTA9PT1RP28wKFswLDAsMCwwLFBbMF0sUFsxXSxQWzJdLFBbM11dLDApOm9zKFAsMCk+PjI7cmV0dXJuIEw/cmUvMTAwOnJlfWZ1bmN0aW9uIFNzKHksUCl7bnVs''@;'; put 'put ''bD09UCYmKFA9ZnIoNCkpO3ZhciBMPTAsUT0wLHJlPTEwMCp5O2lmKHk9PSgwfHkpJiZ5Pj0tKDE8PDI5KSYmeTwxPDwyOT9RPTE6cmU9PSgwfHJlKSYmcmU+PS0oMTw8MjkpJiZyZTwxPDwyOSYmKFE9MSxMPTEpLCFRKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIit5''@;'; put 'put ''KTtQLndyaXRlX3NoaWZ0KC00LCgoTD9yZTp5KTw8MikrKEwrMikpfWZ1bmN0aW9uIFRkKHkpe3ZhciBQPXtzOnt9LGU6e319O3JldHVybiBQLnMucj15LnJlYWRfc2hpZnQoNCksUC5lLnI9eS5yZWFkX3NoaWZ0KDQpLFAucy5jPXkucmVhZF9zaGlmdCg0KSxQLmUuYz15LnJlYWRfc2hpZnQo''@;'; put 'put ''NCksUH12YXIgSmM9VGQsRDE9ZnVuY3Rpb24gVWgoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMTYpKSxQLndyaXRlX3NoaWZ0KDQseS5zLnIpLFAud3JpdGVfc2hpZnQoNCx5LmUuciksUC53cml0ZV9zaGlmdCg0LHkucy5jKSxQLndyaXRlX3NoaWZ0KDQseS5lLmMpLFB9O2Z1bmN0aW9uIGwwKHkp''@;'; put 'put ''e2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXSxRPTA7UTxQOysrUSl7dmFyIHJlPUpjKHkpO0wucHVzaChPbyhyZSkpfXJldHVybiBMLmpvaW4oIiwiKX1mdW5jdGlvbiBtYSh5KXtpZih5Lmxlbmd0aC15Lmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4g''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBQYyh5LFApe3JldHVybihQfHxmcig4KSkud3JpdGVfc2hpZnQoOCx5LCJmIil9ZnVuY3Rpb24gRGQoeSl7dmFyIFA9e30sUT15LnJlYWRfc2hpZnQoMSk+Pj4xLHJlPXkucmVhZF9zaGlmdCgxKSxwZT15LnJlYWRfc2hpZnQoMiwiaSIpLF9l''@;'; put 'put ''PXkucmVhZF9zaGlmdCgxKSx2ZT15LnJlYWRfc2hpZnQoMSksU2U9eS5yZWFkX3NoaWZ0KDEpO3N3aXRjaCh5LmwrKyxRKXtjYXNlIDA6UC5hdXRvPTE7YnJlYWs7Y2FzZSAxOlAuaW5kZXg9cmU7dmFyIEhlPUNyW3JlXTtIZSYmKFAucmdiPXoxKEhlKSk7YnJlYWs7Y2FzZSAyOlAucmdiPXox''@;'; put 'put ''KFtfZSx2ZSxTZV0pO2JyZWFrO2Nhc2UgMzpQLnRoZW1lPXJlfXJldHVybiAwIT1wZSYmKFAudGludD1wZT4wP3BlLzMyNzY3OnBlLzMyNzY4KSxQfWZ1bmN0aW9uIFIyKHksUCl7aWYoUHx8KFA9ZnIoOCkpLCF5fHx5LmF1dG8pcmV0dXJuIFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMCksUDtudWxsIT15LmluZGV4PyhQLndyaXRlX3NoaWZ0KDEsMiksUC53cml0ZV9zaGlmdCgxLHkuaW5kZXgpKTpudWxsIT15LnRoZW1lPyhQLndyaXRlX3NoaWZ0KDEsNiksUC53cml0ZV9zaGlmdCgxLHkudGhlbWUpKTooUC53cml0ZV9zaGlmdCgxLDUpLFAud3JpdGVfc2hpZnQo''@;'; put 'put ''MSwwKSk7dmFyIEw9eS50aW50fHwwO2lmKEw+MD9MKj0zMjc2NzpMPDAmJihMKj0zMjc2OCksUC53cml0ZV9zaGlmdCgyLEwpLHkucmdiJiZudWxsPT15LnRoZW1lKXt2YXIgUT15LnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBRJiYoUT0oIjAwMDAwMCIrUS50b1N0cmluZygxNikp''@;'; put 'put ''LnNsaWNlKC02KSksUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFEuc2xpY2UoMCwyKSwxNikpLFAud3JpdGVfc2hpZnQoMSxwYXJzZUludChRLnNsaWNlKDIsNCksMTYpKSxQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoUS5zbGljZSg0LDYpLDE2KSksUC53cml0ZV9zaGlmdCgxLDI1NSl9ZWxz''@;'; put 'put ''ZSBQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgxLDApLFAud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUH1mdW5jdGlvbiBmNCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubCsrLHtmQm9sZDoxJlAsZkl0YWxpYzoyJlAsZlVuZGVybGluZTo0JlAsZlN0cmlrZW91''@;'; put 'put ''dDo4JlAsZk91dGxpbmU6MTYmUCxmU2hhZG93OjMyJlAsZkNvbmRlbnNlOjY0JlAsZkV4dGVuZDoxMjgmUH19ZnVuY3Rpb24gcDQoeSxQKXt2YXIgUT15LnJlYWRfc2hpZnQoNCk7c3dpdGNoKFEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVy''@;'; put 'put ''bnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVt5LnJlYWRfc2hpZnQoNCldfHwiIn1pZihRPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitRLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHkubC09NCx5LnJlYWRf''@;'; put 'put ''c2hpZnQoMCwxPT1QPyJscHN0ciI6Imxwd3N0ciIpfXZhciB1Mz0yLE1hPTMsRmM9MTIsYW09ODEsdDk9WzgwLGFtXSxfND17MTp7bjoiQ29kZVBhZ2UiLHQ6dTN9LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIs''@;'; put 'put ''dDpNYX0sNTp7bjoiTGluZUNvdW50Iix0Ok1hfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDpNYX0sNzp7bjoiU2xpZGVDb3VudCIsdDpNYX0sODp7bjoiTm90ZUNvdW50Iix0Ok1hfSw5OntuOiJIaWRkZW5Db3VudCIsdDpNYX0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6TWF9LDEx''@;'; put 'put ''OntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxGY30sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNo''@;'; put 'put ''YXJhY3RlckNvdW50Iix0Ok1hfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0Ok1hLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3Ontu''@;'; put 'put ''OiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sd3I9ezE6e246IkNvZGVQ''@;'; put 'put ''YWdlIix0OnUzfSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5Ontu''@;'; put 'put ''OiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6TWF9LDE1OntuOiJXb3JkQ291bnQiLHQ6''@;'; put 'put ''TWF9LDE2OntuOiJDaGFyQ291bnQiLHQ6TWF9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0Ok1hfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIs''@;'; put 'put ''dDoxOX0sMTkxOTA1NDQzNDp7fX0sYjQ9UGUoXzQsIm4iKSx5ND1QZSh3ciwibiIpLGxtPXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdC''@;'; put 'put ''Iiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBU''@;'; put 'put ''IiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSx2aT1bbnVsbCwic29saWQiLCJtZWRpdW1H''@;'; put 'put ''cmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGln''@;'; put 'put ''aHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gdzQoeSl7cmV0dXJuIHkubWFwKGZ1bmN0aW9uKFApe3JldHVybltQPj4xNiYyNTUsUD4+OCYyNTUsMjU1JlBdfSl9dmFyIGgzPXc0KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3''@;'; put 'put ''Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3''@;'; put 'put ''OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMs''@;'; put 'put ''MzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBd''@;'; put 'put ''KSxDcj1vbihoMyksTmE9dzQoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMx''@;'; put 'put ''NDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4''@;'; put 'put ''NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxRbz17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LEthPUFlKFFvKSxSbD17ImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0Ijoi''@;'; put 'put ''VE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j''@;'; put 'put ''dW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j''@;'; put 'put ''dW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRh''@;'; put 'put ''YmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3ht''@;'; put 'put ''bCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy''@;'; put 'put ''dGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxp''@;'; put 'put ''Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRP''@;'; put 'put ''RE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNv''@;'; put 'put ''bm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVE''@;'; put 'put ''ZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlv''@;'; put 'put ''bit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVh''@;'; put 'put ''ZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92''@;'; put 'put ''bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9E''@;'; put 'put ''TyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1l''@;'; put 'put ''eGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9w''@;'; put 'put ''ZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9E''@;'; put 'put ''TyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0Ijoi''@;'; put 'put ''VE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LElkPWZ1bmN0aW9uKCl7dmFyIHk9e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0''@;'; put 'put ''aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4''@;'; put 'put ''bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hh''@;'; put 'put ''cmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hh''@;'; put 'put ''cnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3Bl''@;'; put 'put ''bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZv''@;'; put 'put ''dHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv''@;'; put 'put ''Y3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxM''@;'; put 'put ''aW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1z''@;'; put 'put ''LWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gbHQoeSkuZm9yRWFjaChmdW5jdGlvbihQKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihMKXt5W1BdW0xdfHwoeVtQXVtMXT15W1BdLnhsc3gpfSl9KSxsdCh5KS5mb3JFYWNoKGZ1bmN0aW9uKFApe2x0KHlbUF0pLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oTCl7UmxbeVtQXVtMXV09UH0pfSkseX0oKSxIYz1mdW5jdGlvbiBUZSh5KXtmb3IodmFyIFA9W10sTD1sdCh5KSxRPTA7USE9PUwubGVuZ3RoOysrUSludWxsPT1QW3lbTFtRXV1dJiYoUFt5W0xbUV1dXT1bXSksUFt5W0xbUV1dXS5wdXNoKExbUV0pO3JldHVybiBQfShSbCk7aXMu''@;'; put 'put ''Q1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIGYzPVNyKCJUeXBlcyIsbnVsbCx7eG1sbnM6aXMuQ1QsInhtbG5zOnhzZCI6aXMueHNkLCJ4bWxuczp4c2kiOmlzLnhzaX0pLG45PVtbInhtbCIsImFwcGxpY2F0aW9u''@;'; put 'put ''L3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVn''@;'; put 'put ''Il0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIsSGMucmVsc1swXV1dLm1hcChmdW5jdGlvbih5KXtyZXR1cm4gU3IoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lv''@;'; put 'put ''bjp5WzBdLENvbnRlbnRUeXBlOnlbMV19KX0pLEhpPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZp''@;'; put 'put ''Y2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0''@;'; put 'put ''cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1h''@;'; put 'put ''cy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIs''@;'; put 'put ''Q1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3Rv''@;'; put 'put ''bVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gQmkoeSl7dmFyIFA9eS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiB5LnNsaWNlKDAsUCsxKSsiX3JlbHMvIit5LnNsaWNlKFAr''@;'; put 'put ''MSkrIi5yZWxzIn1mdW5jdGlvbiBEbyh5LFApe3ZhciBMPXsiIWlkIjp7fX07aWYoIXkpcmV0dXJuIEw7Ii8iIT09UC5jaGFyQXQoMCkmJihQPSIvIitQKTt2YXIgUT17fTtyZXR1cm4oeS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9bG4ocmUpO2lmKCI8UmVs''@;'; put 'put ''YXRpb25zaGlwIj09PXBlWzBdKXt2YXIgX2U9e307X2UuVHlwZT1wZS5UeXBlLF9lLlRhcmdldD1wZS5UYXJnZXQsX2UuSWQ9cGUuSWQsX2UuVGFyZ2V0TW9kZT1wZS5UYXJnZXRNb2RlO3ZhciB2ZT0iRXh0ZXJuYWwiPT09cGUuVGFyZ2V0TW9kZT9wZS5UYXJnZXQ6c24ocGUuVGFyZ2V0LFAp''@;'; put 'put ''O0xbdmVdPV9lLFFbcGUuSWRdPV9lfX0pLExbIiFpZCJdPVEsTH1pcy5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciB1YT1TcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6aXMuUkVMU30pO2Z1bmN0aW9u''@;'; put 'put ''IFhhKHkpe3ZhciBQPVtCbix1YV07cmV0dXJuIGx0KHlbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe1BbUC5sZW5ndGhdPVNyKCJSZWxhdGlvbnNoaXAiLG51bGwseVsiIWlkIl1bTF0pfSksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+IixQWzFdPVBbMV0u''@;'; put 'put ''cmVwbGFjZSgiLz4iLCI+IikpLFAuam9pbigiIil9dmFyIEkxPVtIaS5ITElOSyxIaS5YUEFUSCxIaS5YTUlTU107ZnVuY3Rpb24gem8oeSxQLEwsUSxyZSxwZSl7aWYocmV8fChyZT17fSkseVsiIWlkIl18fCh5WyIhaWQiXT17fSksUDwwKWZvcihQPTE7eVsiIWlkIl1bInJJZCIrUF07KytQ''@;'; put 'put ''KTtpZihyZS5JZD0icklkIitQLHJlLlR5cGU9USxyZS5UYXJnZXQ9TCxwZT9yZS5UYXJnZXRNb2RlPXBlOkkxLmluZGV4T2YocmUuVHlwZSk+LTEmJihyZS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLHlbIiFpZCJdW3JlLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAi''@;'; put 'put ''K1ApO3JldHVybiB5WyIhaWQiXVtyZS5JZF09cmUseVsoIi8iK3JlLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPXJlLFB9dmFyIFR1PSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IjtmdW5jdGlvbiBMMSh5LFAsTCl7cmV0dXJuWycgIDxyZGY6RGVz''@;'; put 'put ''Y3JpcHRpb24gcmRmOmFib3V0PSInK3krJyI+XG4nLCcgICAgPHJkZjp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKEx8fCJvZGYiKSsiIyIrUCsnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigi''@;'; put 'put ''Iil9ZnVuY3Rpb24gVm8oeSxQKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicreSsnIj5cbicsJyAgICA8bnMwOmhhc1BhcnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNlPSIn''@;'; put 'put ''K1ArJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfXZhciBTND1mdW5jdGlvbigpe3ZhciB5PSc8b2ZmaWNlOmRvY3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOm1l''@;'; put 'put ''dGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxvZmZp''@;'; put 'put ''Y2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK00udmVyc2lvbisiPC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTptZXRhPjwvb2ZmaWNlOmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4geX19KCksT2w9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJdLFsi''@;'; put 'put ''Y3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdvcmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RNb2RpZmllZEJ5IiwiTGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNwOnZl''@;'; put 'put ''cnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJkYzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0sWyJkYzppZGVudGlmaWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFuZ3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRpdGxl''@;'; put 'put ''IiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwiZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIsIk1vZGlmaWVkRGF0ZSIsImRhdGUiXV07aXMuQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0''@;'; put 'put ''YS9jb3JlLXByb3BlcnRpZXMiLEhpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiO3ZhciBKYT1mdW5jdGlvbigpe2Zvcih2YXIgeT1uZXcgQXJyYXkoT2wubGVu''@;'; put 'put ''Z3RoKSxQPTA7UDxPbC5sZW5ndGg7KytQKXt2YXIgTD1PbFtQXSxRPSIoPzoiK0xbMF0uc2xpY2UoMCxMWzBdLmluZGV4T2YoIjoiKSkrIjopIitMWzBdLnNsaWNlKExbMF0uaW5kZXhPZigiOiIpKzEpO3lbUF09bmV3IFJlZ0V4cCgiPCIrUSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK1ErIj4i''@;'; put 'put ''KX1yZXR1cm4geX0oKTtmdW5jdGlvbiBPMih5KXt2YXIgUD17fTt5PVBpKHkpO2Zvcih2YXIgTD0wO0w8T2wubGVuZ3RoOysrTCl7dmFyIFE9T2xbTF0scmU9eS5tYXRjaChKYVtMXSk7bnVsbCE9cmUmJnJlLmxlbmd0aD4wJiYoUFtRWzFdXT14cihyZVsxXSkpLCJkYXRlIj09PVFbMl0mJlBb''@;'; put 'put ''UVsxXV0mJihQW1FbMV1dPUh0KFBbUVsxXV0pKX1yZXR1cm4gUH12YXIgUDI9U3IoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOmlzLkNPUkVfUFJPUFMsInhtbG5zOmRjIjppcy5kYywieG1sbnM6ZGN0ZXJtcyI6aXMuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOmlzLmRj''@;'; put 'put ''bWl0eXBlLCJ4bWxuczp4c2kiOmlzLnhzaX0pO2Z1bmN0aW9uIGh1KHksUCxMLFEscmUpe251bGwhPXJlW3ldfHxudWxsPT1QfHwiIj09PVB8fChyZVt5XT1QLFA9SHIoUCksUVtRLmxlbmd0aF09TD9Tcih5LFAsTCk6ZnMoeSxQKSl9dmFyIFIxPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRp''@;'; put 'put ''b24iLCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3ND''@;'; put 'put ''aGFuZ2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRp''@;'; put 'put ''bmdQYWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXciXV07ZnVuY3Rpb24gdTAoeSxQLEwsUSl7dmFyIHJlPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZT1lMCh5LFEpO2Vsc2UgZm9yKHZhciBwZT0wO3BlPHkubGVuZ3RoOysrcGUpcmU9cmUuY29u''@;'; put 'put ''Y2F0KHlbcGVdLm1hcChmdW5jdGlvbihCZSl7cmV0dXJue3Y6QmV9fSkpO3ZhciBfZT0ic3RyaW5nIj09dHlwZW9mIFA/ZTAoUCxRKS5tYXAoZnVuY3Rpb24oQmUpe3JldHVybiBCZS52fSk6UCx2ZT0wLFNlPTA7aWYoX2UubGVuZ3RoPjApZm9yKHZhciBIZT0wO0hlIT09cmUubGVuZ3RoO0hl''@;'; put 'put ''Kz0yKXtzd2l0Y2goU2U9K3JlW0hlKzFdLnYscmVbSGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIi''@;'; put 'put ''OmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4''@;'; put 'put ''ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpMLldvcmtzaGVldHM9U2UsTC5TaGVldE5hbWVzPV9lLnNsaWNlKHZlLHZlK1NlKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29uIG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTci''@;'; put 'put ''OmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOkwuTmFtZWRSYW5nZXM9U2UsTC5EZWZpbmVkTmFtZXM9X2Uuc2xpY2UodmUsdmUrU2UpO2JyZWFrO2Nhc2UiQ2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6TC5DaGFydHNoZWV0cz1TZSxMLkNoYXJ0TmFt''@;'; put 'put ''ZXM9X2Uuc2xpY2UodmUsdmUrU2UpfXZlKz1TZX19aXMuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIixIaS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIGczPVNyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczppcy5FWFRfUFJPUFMsInhtbG5zOnZ0Ijppcy52dH0pO2lzLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixIaS5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgQXc9LzxbXj5dKz5b''@;'; put 'put ''XjxdKi9nLHVtPVNyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczppcy5DVVNUX1BST1BTLCJ4bWxuczp2dCI6aXMudnR9KTt2YXIgRjI9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0''@;'; put 'put ''aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIs''@;'; put 'put ''TWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn0sSDI9YmUoRjIpO2Z1bmN0aW9uIFJkKHksUCxMKXt5W1A9''@;'; put 'put ''SDJbUF18fFBdPUx9ZnVuY3Rpb24gQ2MoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKEwvMWU3Kk1hdGgucG93KDIsMzIpK1AvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1''@;'; put 'put ''bmN0aW9uIE9kKHksUCxMKXt2YXIgUT15LmwscmU9eS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYoTClmb3IoO3kubC1RJjM7KSsreS5sO3JldHVybiByZX1mdW5jdGlvbiBQMSh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBMJiYoeS5sKz00LShRLmxl''@;'; put 'put ''bmd0aCsxJjMpJjMpLFF9ZnVuY3Rpb24gcWgoeSxQLEwpe3JldHVybiAzMT09PVA/UDEoeSk6T2QoeSwwLEwpfWZ1bmN0aW9uIFFjKHksUCxMKXtyZXR1cm4gcWgoeSxQLCExPT09TD8wOjQpfWZ1bmN0aW9uIHM5KHkpe3ZhciBQPXkubCxMPUU0KHksYW0pO3JldHVybiAwPT15W3kubF0mJjA9''@;'; put 'put ''PXlbeS5sKzFdJiZ5LmwtUCYyJiYoeS5sKz0yKSxbTCxFNCh5LE1hKV19ZnVuY3Rpb24gZG0oeSxQKXtmb3IodmFyIEw9eS5yZWFkX3NoaWZ0KDQpLFE9e30scmU9MDtyZSE9TDsrK3JlKXt2YXIgcGU9eS5yZWFkX3NoaWZ0KDQpLF9lPXkucmVhZF9zaGlmdCg0KTtRW3BlXT15LnJlYWRfc2hp''@;'; put 'put ''ZnQoX2UsMTIwMD09PVA/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZSh2LCIiKS5yZXBsYWNlKHAsIiEiKSwxMjAwPT09UCYmX2UlMiYmKHkubCs9Mil9cmV0dXJuIDMmeS5sJiYoeS5sPXkubD4+Mzw8MiksUX1mdW5jdGlvbiBobSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoNCksTD15LnNsaWNl''@;'; put 'put ''KHkubCx5LmwrUCk7cmV0dXJuIHkubCs9UCwoMyZQKT4wJiYoeS5sKz00LSgzJlApJjMpLEx9ZnVuY3Rpb24gRTQoeSxQLEwpe3ZhciByZSxRPXkucmVhZF9zaGlmdCgyKSxwZT1MfHx7fTtpZih5LmwrPTIsUCE9PUZjJiZRIT09UCYmLTE9PT10OS5pbmRleE9mKFApJiYoNDEyNiE9KDY1NTM0''@;'; put 'put ''JlApfHw0MTI2IT0oNjU1MzQmUSkpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK1ArIiBzYXcgIitRKTtzd2l0Y2goUD09PUZjP1E6UCl7Y2FzZSAyOnJldHVybiByZT15LnJlYWRfc2hpZnQoMiwiaSIpLHBlLnJhd3x8KHkubCs9MikscmU7Y2FzZSAzOnJldHVybiB5LnJlYWRf''@;'; put 'put ''c2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT15LnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4geS5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIE9kKHksMCw0KS5yZXBsYWNlKHYsIiIpO2Nhc2UgMzE6cmV0dXJuIFAxKHkpO2Nhc2UgNjQ6cmV0dXJuIENjKHkpO2Nhc2Ug''@;'; put 'put ''NjU6cmV0dXJuIGhtKHkpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIER3KHkpe3ZhciBQPXt9O3JldHVybiBQLlNpemU9eS5yZWFkX3NoaWZ0KDQpLHkubCs9UC5TaXplKzMtKFAuU2l6ZS0xKSU0LFB9KHkpO2Nhc2UgODA6cmV0dXJuIFFjKHksUSwhcGUucmF3KS5yZXBsYWNlKHYsIiIpO2Nh''@;'; put 'put ''c2UgODE6cmV0dXJuIGZ1bmN0aW9uIHg0KHksUCl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIHFoKHksUCwwKX0oeSxRKS5yZXBsYWNlKHYsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gYTko''@;'; put 'put ''eSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdLFE9MDtRPFAvMjsrK1EpTC5wdXNoKHM5KHkpKTtyZXR1cm4gTH0oeSk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09UT9mdW5jdGlvbiBpOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W10sUT0wO1EhPVA7''@;'; put 'put ''KytRKXt2YXIgcmU9eS5sO0xbUV09eS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UodiwiIikseS5sLXJlJjImJih5LmwrPTIpfXJldHVybiBMfSh5KTpmdW5jdGlvbiBvOSh5KXtmb3IodmFyIFA9eS5yZWFkX3NoaWZ0KDQpLEw9W10sUT0wO1EhPVA7KytRKUxbUV09eS5yZWFkX3No''@;'; put 'put ''aWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZSh2LCIiKTtyZXR1cm4gTH0oeSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK1ArIiAiK1EpfX1mdW5jdGlvbiBsOSh5LFApe3ZhciBMPWZyKDQpLFE9ZnIoNCk7c3dpdGNoKEwu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCw4MD09eT8zMTp5KSx5KXtjYXNlIDM6US53cml0ZV9zaGlmdCgtNCxQKTticmVhaztjYXNlIDU6KFE9ZnIoOCkpLndyaXRlX3NoaWZ0KDgsUCwiZiIpO2JyZWFrO2Nhc2UgMTE6US53cml0ZV9zaGlmdCg0LFA/MTowKTticmVhaztjYXNlIDY0OlE9ZnVuY3Rpb24gaWMo''@;'; put 'put ''eSl7dmFyIEw9KCJzdHJpbmciPT10eXBlb2YgeT9uZXcgRGF0ZShEYXRlLnBhcnNlKHkpKTp5KS5nZXRUaW1lKCkvMWUzKzExNjQ0NDczNjAwLFE9TCVNYXRoLnBvdygyLDMyKSxyZT0oTC1RKS9NYXRoLnBvdygyLDMyKTtyZSo9MWU3O3ZhciBwZT0oUSo9MWU3KS9NYXRoLnBvdygyLDMyKXww''@;'; put 'put ''O3BlPjAmJihRJT1NYXRoLnBvdygyLDMyKSxyZSs9cGUpO3ZhciBfZT1mcig4KTtyZXR1cm4gX2Uud3JpdGVfc2hpZnQoNCxRKSxfZS53cml0ZV9zaGlmdCg0LHJlKSxfZX0oUCk7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigoUT1mcig0KzIqKFAubGVuZ3RoKzEpKyhQLmxlbmd0aCUyPzA6''@;'; put 'put ''MikpKS53cml0ZV9zaGlmdCg0LFAubGVuZ3RoKzEpLFEud3JpdGVfc2hpZnQoMCxQLCJkYmNzIik7US5sIT1RLmxlbmd0aDspUS53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit5KyIg''@;'; put 'put ''IitQKX1yZXR1cm4gUyhbTCxRXSl9ZnVuY3Rpb24gRjEoeSxQKXt2YXIgTD15LmwsUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpLHBlPVtdLF9lPTAsdmU9MCxTZT0tMSxIZT17fTtmb3IoX2U9MDtfZSE9cmU7KytfZSl7dmFyIEJlPXkucmVhZF9zaGlmdCg0KSxHZT15LnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7cGVbX2VdPVtCZSxHZStMXX1wZS5zb3J0KGZ1bmN0aW9uKEV0LFR0KXtyZXR1cm4gRXRbMV0tVHRbMV19KTt2YXIgbnQ9e307Zm9yKF9lPTA7X2UhPXJlOysrX2Upe2lmKHkubCE9PXBlW19lXVsxXSl7dmFyIGR0PSEwO2lmKF9lPjAmJlApc3dpdGNoKFBbcGVbX2UtMV1b''@;'; put 'put ''MF1dLnQpe2Nhc2UgMjp5LmwrMj09PXBlW19lXVsxXSYmKHkubCs9MixkdD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6eS5sPD1wZVtfZV1bMV0mJih5Lmw9cGVbX2VdWzFdLGR0PSExKX1pZigoIVB8fDA9PV9lKSYmeS5sPD1wZVtfZV1bMV0mJihkdD0hMSx5Lmw9cGVbX2VdWzFdKSxk''@;'; put 'put ''dCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitwZVtfZV1bMV0rIiBhdCAiK3kubCsiIDoiK19lKX1pZihQKXt2YXIgQ3Q9UFtwZVtfZV1bMF1dO2lmKG50W0N0Lm5dPUU0KHksQ3QudCx7cmF3OiEwfSksInZlcnNpb24iPT09Q3QucCYmKG50W0N0Lm5d''@;'; put 'put ''PVN0cmluZyhudFtDdC5uXT4+MTYpKyIuIisoIjAwMDAiK1N0cmluZyg2NTUzNSZudFtDdC5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09Q3Qubilzd2l0Y2gobnRbQ3Qubl0pe2Nhc2UgMDpudFtDdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2Ug''@;'; put 'put ''OTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6aih2''@;'; put 'put ''ZT1udFtDdC5uXT4+PjAmNjU1MzUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFnZTogIitudFtDdC5uXSl9fWVsc2UgaWYoMT09PXBlW19lXVswXSl7aWYodmU9bnQuQ29kZVBhZ2U9RTQoeSx1Myksaih2ZSksLTEhPT1TZSl7dmFyIGN0PXkubDt5''@;'; put 'put ''Lmw9cGVbU2VdWzFdLEhlPWRtKHksdmUpLHkubD1jdH19ZWxzZSBpZigwPT09cGVbX2VdWzBdKXtpZigwPT09dmUpe1NlPV9lLHkubD1wZVtfZSsxXVsxXTtjb250aW51ZX1IZT1kbSh5LHZlKX1lbHNle3ZhciBGdCxidD1IZVtwZVtfZV1bMF1dO3N3aXRjaCh5W3kubF0pe2Nhc2UgNjU6eS5s''@;'; put 'put ''Kz00LEZ0PWhtKHkpO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTp5LmwrPTQsRnQ9UWMoeSx5W3kubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6eS5sKz00LEZ0PXkucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''O2JyZWFrO2Nhc2UgNTp5LmwrPTQsRnQ9eS5yZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOnkubCs9NCxGdD1Tbyh5LDQpO2JyZWFrO2Nhc2UgNjQ6eS5sKz00LEZ0PUh0KENjKHkpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIreVt5Lmxd''@;'; put 'put ''KX1udFtidF09RnR9fXJldHVybiB5Lmw9TCtRLG50fXZhciBmbT1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdl''@;'; put 'put ''cyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBJdyh5KXtzd2l0Y2godHlwZW9mIHkpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHx5KT09eT8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9i''@;'; put 'put ''amVjdCI6aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIGM5KHksUCxMKXt2YXIgUT1mcig4KSxyZT1bXSxwZT1bXSxfZT04LHZlPTAsU2U9ZnIoOCksSGU9ZnIoOCk7aWYoU2Uud3JpdGVfc2hpZnQoNCwyKSxTZS53cml0ZV9zaGlmdCg0LDEyMDApLEhl''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMSkscGUucHVzaChTZSkscmUucHVzaChIZSksX2UrPTgrU2UubGVuZ3RoLCFQKXsoSGU9ZnIoOCkpLndyaXRlX3NoaWZ0KDQsMCkscmUudW5zaGlmdChIZSk7dmFyIEJlPVtmcig0KV07Zm9yKEJlWzBdLndyaXRlX3NoaWZ0KDQseS5sZW5ndGgpLHZlPTA7dmU8eS5s''@;'; put 'put ''ZW5ndGg7Kyt2ZSl7dmFyIEdlPXlbdmVdWzBdO2ZvcigoU2U9ZnIoOCsyKihHZS5sZW5ndGgrMSkrKEdlLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LHZlKzIpLFNlLndyaXRlX3NoaWZ0KDQsR2UubGVuZ3RoKzEpLFNlLndyaXRlX3NoaWZ0KDAsR2UsImRiY3MiKTtTZS5sIT1TZS5s''@;'; put 'put ''ZW5ndGg7KVNlLndyaXRlX3NoaWZ0KDEsMCk7QmUucHVzaChTZSl9U2U9UyhCZSkscGUudW5zaGlmdChTZSksX2UrPTgrU2UubGVuZ3RofWZvcih2ZT0wO3ZlPHkubGVuZ3RoOysrdmUpaWYoKCFQfHxQW3lbdmVdWzBdXSkmJiEoZm0uaW5kZXhPZih5W3ZlXVswXSk+LTEpJiZudWxsIT15W3Zl''@;'; put 'put ''XVsxXSl7dmFyIG50PXlbdmVdWzFdLGR0PTA7aWYoUCl7dmFyIEN0PUxbZHQ9K1BbeVt2ZV1bMF1dXTtpZigidmVyc2lvbiI9PUN0LnAmJiJzdHJpbmciPT10eXBlb2YgbnQpe3ZhciBjdD1udC5zcGxpdCgiLiIpO250PSgrY3RbMF08PDE2KSsoK2N0WzFdfHwwKX1TZT1sOShDdC50LG50KX1l''@;'; put 'put ''bHNle3ZhciBidD1JdyhudCk7LTE9PWJ0JiYoYnQ9MzEsbnQ9U3RyaW5nKG50KSksU2U9bDkoYnQsbnQpfXBlLnB1c2goU2UpLChIZT1mcig4KSkud3JpdGVfc2hpZnQoNCxQP2R0OjIrdmUpLHJlLnB1c2goSGUpLF9lKz04K1NlLmxlbmd0aH12YXIgRnQ9OCoocGUubGVuZ3RoKzEpO2Zvcih2''@;'; put 'put ''ZT0wO3ZlPHBlLmxlbmd0aDsrK3ZlKXJlW3ZlXS53cml0ZV9zaGlmdCg0LEZ0KSxGdCs9cGVbdmVdLmxlbmd0aDtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LF9lKSxRLndyaXRlX3NoaWZ0KDQscGUubGVuZ3RoKSxTKFtRXS5jb25jYXQocmUpLmNvbmNhdChwZSkpfWZ1bmN0aW9uIHU5KHksUCxM''@;'; put 'put ''KXt2YXIgUT15LmNvbnRlbnQ7aWYoIVEpcmV0dXJue307b2woUSwwKTt2YXIgcmUscGUsX2UsdmUsU2U9MDtRLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6ICIpLFEucmVhZF9zaGlmdCgyKTt2YXIgSGU9US5yZWFkX3NoaWZ0KDQpLEJlPVEucmVhZF9zaGlmdCgxNik7aWYoQmUhPT1qZS51dGls''@;'; put 'put ''cy5jb25zdHMuSEVBREVSX0NMU0lEJiZCZSE9PUwpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitCZSk7aWYoMSE9PShyZT1RLnJlYWRfc2hpZnQoNCkpJiYyIT09cmUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrcmUpO2lmKHBlPVEucmVh''@;'; put 'put ''ZF9zaGlmdCgxNiksdmU9US5yZWFkX3NoaWZ0KDQpLDE9PT1yZSYmdmUhPT1RLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrdmUrIiAhPT0gIitRLmwpOzI9PT1yZSYmKF9lPVEucmVhZF9zaGlmdCgxNiksU2U9US5yZWFkX3NoaWZ0KDQpKTt2YXIgQ3QsR2U9RjEoUSxQ''@;'; put 'put ''KSxudD17U3lzdGVtSWRlbnRpZmllcjpIZX07Zm9yKHZhciBkdCBpbiBHZSludFtkdF09R2VbZHRdO2lmKG50LkZNVElEPXBlLDE9PT1yZSlyZXR1cm4gbnQ7aWYoU2UtUS5sPT0yJiYoUS5sKz0yKSxRLmwhPT1TZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK1EubCsi''@;'; put 'put ''ICE9PSAiK1NlKTt0cnl7Q3Q9RjEoUSxudWxsKX1jYXRjaHt9Zm9yKGR0IGluIEN0KW50W2R0XT1DdFtkdF07cmV0dXJuIG50LkZNVElEPVtwZSxfZV0sbnR9ZnVuY3Rpb24gd2koeSxQLEwsUSxyZSxwZSl7dmFyIF9lPWZyKHJlPzY4OjQ4KSx2ZT1bX2VdO19lLndyaXRlX3NoaWZ0KDIsNjU1''@;'; put 'put ''MzQpLF9lLndyaXRlX3NoaWZ0KDIsMCksX2Uud3JpdGVfc2hpZnQoNCw4NDI0MTI1OTkpLF9lLndyaXRlX3NoaWZ0KDE2LGplLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQsImhleCIpLF9lLndyaXRlX3NoaWZ0KDQscmU/MjoxKSxfZS53cml0ZV9zaGlmdCgxNixQLCJoZXgiKSxfZS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LHJlPzY4OjQ4KTt2YXIgU2U9YzkoeSxMLFEpO2lmKHZlLnB1c2goU2UpLHJlKXt2YXIgSGU9YzkocmUsbnVsbCxudWxsKTtfZS53cml0ZV9zaGlmdCgxNixwZSwiaGV4IiksX2Uud3JpdGVfc2hpZnQoNCw2OCtTZS5sZW5ndGgpLHZlLnB1c2goSGUpfXJldHVybiBTKHZlKX1m''@;'; put 'put ''dW5jdGlvbiBQZCh5LFApe3JldHVybiB5LnJlYWRfc2hpZnQoUCksbnVsbH1mdW5jdGlvbiBTbyh5LFApe3JldHVybiAxPT09eS5yZWFkX3NoaWZ0KFApfWZ1bmN0aW9uIFBsKHksUCl7cmV0dXJuIFB8fChQPWZyKDIpKSxQLndyaXRlX3NoaWZ0KDIsKyEheSksUH1mdW5jdGlvbiBobCh5KXty''@;'; put 'put ''ZXR1cm4geS5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBmdSh5LFApe3JldHVybiBQfHwoUD1mcigyKSksUC53cml0ZV9zaGlmdCgyLHkpLFB9ZnVuY3Rpb24gSDEoeSxQKXtyZXR1cm4gZnVuY3Rpb24gazQoeSxQLEwpe2Zvcih2YXIgUT1bXSxyZT15LmwrUDt5Lmw8cmU7KVEucHVzaChM''@;'; put 'put ''KHkscmUteS5sKSk7aWYocmUhPT15LmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBRfSh5LFAsaGwpfWZ1bmN0aW9uIGQ5KHksUCxMKXtyZXR1cm4gTHx8KEw9ZnIoMikpLEwud3JpdGVfc2hpZnQoMSwiZSI9PVA/K3k6KyEheSksTC53cml0ZV9zaGlmdCgxLCJlIj09''@;'; put 'put ''UD8xOjApLEx9ZnVuY3Rpb24gRmQoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdChMJiZMLmJpZmY+PTEyPzI6MSkscmU9InNiY3MtY29udCIscGU9TztMJiZMLmJpZmY+PTgmJihPPTEyMDApLEwmJjghPUwuYmlmZj8xMj09TC5iaWZmJiYocmU9IndzdHIiKTp5LnJlYWRfc2hpZnQoMSkmJihy''@;'; put 'put ''ZT0iZGJjcy1jb250IiksTC5iaWZmPj0yJiZMLmJpZmY8PTUmJihyZT0iY3BzdHIiKTt2YXIgdmU9UT95LnJlYWRfc2hpZnQoUSxyZSk6IiI7cmV0dXJuIE89cGUsdmV9ZnVuY3Rpb24gZ20oeSl7dmFyIFA9TztPPTEyMDA7dmFyIFNlLEw9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpLHJlPTQmUSxwZT04JlEsX2U9MSsoMSZRKSx2ZT0wLEhlPXt9O3BlJiYodmU9eS5yZWFkX3NoaWZ0KDIpKSxyZSYmKFNlPXkucmVhZF9zaGlmdCg0KSk7dmFyIEdlPTA9PT1MPyIiOnkucmVhZF9zaGlmdChMLDI9PV9lPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihwZSlmb3IoSGUu''@;'; put 'put ''X1I9W107dmUtLSA+MDspSGUuX1IucHVzaCh7aWR4OnkucmVhZF9zaGlmdCgyKSxpZm50OnkucmVhZF9zaGlmdCgyKX0pO3JldHVybiByZSYmKHkubCs9U2UpLEhlLnQ9R2UscGV8fChIZS5yPSI8dD4iK0hlLnQrIjwvdD4iKSxPPVAsSGV9ZnVuY3Rpb24gajAoeSxQKXt2YXIgTD15LlImJnku''@;'; put 'put ''Ui5sZW5ndGh8fHkucjt5LnImJih5LlI9RG0oeS5yKSk7dmFyIFE9IiIscmU9MDtMP3kuUi5mb3JFYWNoKGZ1bmN0aW9uKEN0KXtyZSsrLFErPUN0LnZ8fCIifSk6KFE9eS50fHwiIixyZT0xKTt2YXIgcGU9ZnIoMysocmU+MT8yOjApKTtwZS53cml0ZV9zaGlmdCgyLFEubGVuZ3RoKSxwZS53''@;'; put 'put ''cml0ZV9zaGlmdCgxLDF8KHJlPjE/ODowKSkscmU+MSYmcGUud3JpdGVfc2hpZnQoMixyZSk7dmFyIF9lPWZyKDIqUS5sZW5ndGgpO19lLndyaXRlX3NoaWZ0KDIqUS5sZW5ndGgsUSwidXRmMTZsZSIpO3ZhciB2ZT1bcGUsX2VdO2lmKEwpe3ZhciBTZT1mcig0KnkuUi5sZW5ndGgpLEhlPTA7''@;'; put 'put ''dmUucHVzaChTZSk7Zm9yKHZhciBCZT0wO0JlPHkuUi5sZW5ndGg7KytCZSl7dmFyIEdlPXkuUltCZV07U2Uud3JpdGVfc2hpZnQoMixIZSksSGUrPShHZS52fHwiIikubGVuZ3RoO3ZhciBudD1HZS5zP2d1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6R2Uuc30sUCk6''@;'; put 'put ''MCxkdD1QLmNlbGxYZnNbbnRdLmZvbnRJZDtTZS53cml0ZV9zaGlmdCgyLGR0PDQ/ZHQ6ZHQrMSl9fXJldHVybiBTKHZlKX1mdW5jdGlvbiBIZCh5LFAsTCl7aWYoTCl7aWYoTC5iaWZmPj0yJiZMLmJpZmY8PTUpcmV0dXJuIHkucmVhZF9zaGlmdChQLCJjcHN0ciIpO2lmKEwuYmlmZj49MTIp''@;'; put 'put ''cmV0dXJuIHkucmVhZF9zaGlmdChQLCJkYmNzLWNvbnQiKX12YXIgcmU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5LnJlYWRfc2hpZnQoUCwwPT09cmU/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIE4yKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6''@;'; put 'put ''Mik7cmV0dXJuIDA9PT1RPyh5LmwrKywiIik6SGQoeSxRLEwpfWZ1bmN0aW9uIFYyKHksUCxMKXtpZihMLmJpZmY+NSlyZXR1cm4gTjIoeSwwLEwpO3ZhciBRPXkucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PVE/KHkubCsrLCIiKTp5LnJlYWRfc2hpZnQoUSxMLmJpZmY8PTR8fCF5LmxlbnM/''@;'; put 'put ''ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVuY3Rpb24gbW0oeSxQLEwpe3JldHVybiBMfHwoTD1mcigzKzIqeS5sZW5ndGgpKSxMLndyaXRlX3NoaWZ0KDIseS5sZW5ndGgpLEwud3JpdGVfc2hpZnQoMSwxKSxMLndyaXRlX3NoaWZ0KDMxLHksInV0ZjE2bGUiKSxMfWZ1bmN0aW9uIEE0KHkpe3Zh''@;'; put 'put ''ciBQPXkucmVhZF9zaGlmdCg0KTtyZXR1cm4gUD4wP3kucmVhZF9zaGlmdChQLCJ1dGYxNmxlIikucmVwbGFjZSh2LCIiKToiIn1mdW5jdGlvbiBfMyh5LFApe1B8fChQPWZyKDYrMip5Lmxlbmd0aCkpLFAud3JpdGVfc2hpZnQoNCwxK3kubGVuZ3RoKTtmb3IodmFyIEw9MDtMPHkubGVuZ3Ro''@;'; put 'put ''OysrTClQLndyaXRlX3NoaWZ0KDIseS5jaGFyQ29kZUF0KEwpKTtyZXR1cm4gUC53cml0ZV9zaGlmdCgyLDApLFB9ZnVuY3Rpb24gYjMoeSl7dmFyIFA9ZnIoNTEyKSxMPTAsUT15LlRhcmdldDsiZmlsZTovLyI9PVEuc2xpY2UoMCw3KSYmKFE9US5zbGljZSg3KSk7dmFyIHJlPVEuaW5kZXhP''@;'; put 'put ''ZigiIyIpLHBlPXJlPi0xPzMxOjIzO3N3aXRjaChRLmNoYXJBdCgwKSl7Y2FzZSIjIjpwZT0yODticmVhaztjYXNlIi4iOnBlJj0tM31QLndyaXRlX3NoaWZ0KDQsMiksUC53cml0ZV9zaGlmdCg0LHBlKTt2YXIgX2U9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihMPTA7TDxf''@;'; put 'put ''ZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoNCxfZVtMXSk7aWYoMjg9PXBlKV8zKFE9US5zbGljZSgxKSxQKTtlbHNlIGlmKDImcGUpe2ZvcihfZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksTD0wO0w8X2UubGVuZ3RoOysr''@;'; put 'put ''TClQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoX2VbTF0sMTYpKTt2YXIgdmU9cmU+LTE/US5zbGljZSgwLHJlKTpRO2ZvcihQLndyaXRlX3NoaWZ0KDQsMioodmUubGVuZ3RoKzEpKSxMPTA7TDx2ZS5sZW5ndGg7KytMKVAud3JpdGVfc2hpZnQoMix2ZS5jaGFyQ29kZUF0KEwpKTtQLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsMCksOCZwZSYmXzMocmU+LTE/US5zbGljZShyZSsxKToiIixQKX1lbHNle2ZvcihfZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksTD0wO0w8X2UubGVuZ3RoOysrTClQLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQo''@;'; put 'put ''X2VbTF0sMTYpKTtmb3IodmFyIFNlPTA7Ii4uLyI9PVEuc2xpY2UoMypTZSwzKlNlKzMpfHwiLi5cXCI9PVEuc2xpY2UoMypTZSwzKlNlKzMpOykrK1NlO2ZvcihQLndyaXRlX3NoaWZ0KDIsU2UpLFAud3JpdGVfc2hpZnQoNCxRLmxlbmd0aC0zKlNlKzEpLEw9MDtMPFEubGVuZ3RoLTMqU2U7''@;'; put 'put ''KytMKVAud3JpdGVfc2hpZnQoMSwyNTUmUS5jaGFyQ29kZUF0KEwrMypTZSkpO2ZvcihQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCgyLDY1NTM1KSxQLndyaXRlX3NoaWZ0KDIsNTcwMDUpLEw9MDtMPDY7KytMKVAud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUC5zbGljZSgwLFAu''@;'; put 'put ''bCl9ZnVuY3Rpb24gdm0oeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSkseS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gaDkoeSxQKXt2YXIgTD12bSh5KTtyZXR1cm4gTFszXT0wLEx9ZnVuY3Rpb24gTHUoeSl7cmV0dXJue3I6eS5yZWFk''@;'; put 'put ''X3NoaWZ0KDIpLGM6eS5yZWFkX3NoaWZ0KDIpLGl4ZmU6eS5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiB6MCh5LFAsTCxRKXtyZXR1cm4gUXx8KFE9ZnIoNikpLFEud3JpdGVfc2hpZnQoMix5KSxRLndyaXRlX3NoaWZ0KDIsUCksUS53cml0ZV9zaGlmdCgyLEx8fDApLFF9ZnVuY3Rpb24gcDko''@;'; put 'put ''eSxQLEwpe3ZhciBRPUwuYmlmZj44PzQ6MjtyZXR1cm5beS5yZWFkX3NoaWZ0KFEpLHkucmVhZF9zaGlmdChRLCJpIikseS5yZWFkX3NoaWZ0KFEsImkiKV19ZnVuY3Rpb24gZzkoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSxYYyh5KV19ZnVuY3Rpb24gS2goeSl7dmFyIFA9eS5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOnkucmVhZF9zaGlmdCgyKSxyOlB9LGU6e2M6eS5yZWFkX3NoaWZ0KDIpLHI6TH19fWZ1bmN0aW9uIFUwKHksUCl7cmV0dXJuIFB8fChQPWZyKDgpKSxQLndyaXRlX3NoaWZ0KDIseS5zLnIpLFAud3JpdGVfc2hpZnQoMix5LmUu''@;'; put 'put ''ciksUC53cml0ZV9zaGlmdCgyLHkucy5jKSxQLndyaXRlX3NoaWZ0KDIseS5lLmMpLFB9ZnVuY3Rpb24gX20oeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOnkucmVhZF9zaGlmdCgxKSxyOlB9LGU6e2M6eS5yZWFkX3NoaWZ0KDEpLHI6TH19''@;'; put 'put ''fXZhciB2YT1fbTtmdW5jdGlvbiBUNCh5KXt5LmwrPTQ7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5LmwrPTEyLFtMLFAsUV19ZnVuY3Rpb24gRmwoeSl7eS5sKz0yLHkubCs9eS5yZWFkX3NoaWZ0KDIpfXZhciBibT17''@;'; put 'put ''MDpGbCw0OkZsLDU6RmwsNjpGbCw3OmZ1bmN0aW9uIF85KHkpe3JldHVybiB5LmwrPTQseS5jZj15LnJlYWRfc2hpZnQoMikse319LDg6RmwsOTpGbCwxMDpGbCwxMTpGbCwxMjpGbCwxMzpmdW5jdGlvbiB2OSh5KXt2YXIgUD17fTtyZXR1cm4geS5sKz00LHkubCs9MTYsUC5mU2hhcmVkTm90''@;'; put 'put ''ZT15LnJlYWRfc2hpZnQoMikseS5sKz00LFB9LDE0OkZsLDE1OkZsLDE2OkZsLDE3OkZsLDE4OkZsLDE5OkZsLDIwOkZsLDIxOlQ0fTtmdW5jdGlvbiBSdSh5LFApe3ZhciBMPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKEwuQklGRlZlcj15LnJlYWRfc2hpZnQoMiksKFAtPTIpPj0yJiYoTC5k''@;'; put 'put ''dD15LnJlYWRfc2hpZnQoMikseS5sLT0yKSxMLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihQPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrTC5CSUZG''@;'; put 'put ''VmVyKX1yZXR1cm4geS5yZWFkX3NoaWZ0KFApLEx9ZnVuY3Rpb24gRDQoeSxQLEwpe3ZhciBRPTE1MzYscmU9MTY7c3dpdGNoKEwuYm9va1R5cGUpe2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpicmVhaztjYXNlImJpZmY1IjpRPTEyODAscmU9ODticmVhaztjYXNlImJpZmY0IjpRPTQscmU9Njti''@;'; put 'put ''cmVhaztjYXNlImJpZmYzIjpRPTMscmU9NjticmVhaztjYXNlImJpZmYyIjpRPTIscmU9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIHBlPWZyKHJlKTtyZXR1cm4gcGUud3JpdGVfc2hpZnQoMixRKSxwZS53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFApLHJlPjQmJnBlLndyaXRlX3NoaWZ0KDIsMjkyODIpLHJlPjYmJnBlLndyaXRlX3NoaWZ0KDIsMTk5NykscmU+OCYmKHBlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLHBlLndyaXRlX3NoaWZ0KDIsMSkscGUud3JpdGVfc2hpZnQoMiwxNzk4KSxwZS53cml0ZV9zaGlmdCgyLDApKSxwZX1m''@;'; put 'put ''dW5jdGlvbiBZMCh5LFApe3ZhciBMPSFQfHxQLmJpZmY+PTg/MjoxLFE9ZnIoOCtMKnkubmFtZS5sZW5ndGgpO1Eud3JpdGVfc2hpZnQoNCx5LnBvcyksUS53cml0ZV9zaGlmdCgxLHkuaHN8fDApLFEud3JpdGVfc2hpZnQoMSx5LmR0KSxRLndyaXRlX3NoaWZ0KDEseS5uYW1lLmxlbmd0aCks''@;'; put 'put ''UC5iaWZmPj04JiZRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdChMKnkubmFtZS5sZW5ndGgseS5uYW1lLFAuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciByZT1RLnNsaWNlKDAsUS5sKTtyZXR1cm4gcmUubD1RLmwscmV9ZnVuY3Rpb24gSXIoeSl7cmV0dXJuIHkucmVhZF9z''@;'; put 'put ''aGlmdCg0KSxKYyh5KX1mdW5jdGlvbiBlcyh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLGwwKHkpfWZ1bmN0aW9uIG9jKHksUCxMKXtyZXR1cm4geS5yZWFkX3NoaWZ0KDQpLG9TKHksMCxMKX1mdW5jdGlvbiBXMCh5LFAsTCl7dmFyIFE9MDtMJiYyPT1MLmJpZmZ8fChRPXkucmVhZF9zaGlm''@;'; put 'put ''dCgyKSk7dmFyIHJlPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4gTCYmMj09TC5iaWZmJiYoUT0xLShyZT4+MTUpLHJlJj0zMjc2NyksW3tVbnN5bmNlZDoxJlEsRHlaZXJvOigyJlEpPj4xLEV4QXNjOig0JlEpPj4yLEV4RHNjOig4JlEpPj4zfSxyZV19ZnVuY3Rpb24gWHIoeSxQLEwsUSl7dmFy''@;'; put 'put ''IHJlPUwmJjU9PUwuYmlmZjtRfHwoUT1mcihyZT8zK1AubGVuZ3RoOjUrMipQLmxlbmd0aCkpLFEud3JpdGVfc2hpZnQoMix5KSxRLndyaXRlX3NoaWZ0KHJlPzE6MixQLmxlbmd0aCkscmV8fFEud3JpdGVfc2hpZnQoMSwxKSxRLndyaXRlX3NoaWZ0KChyZT8xOjIpKlAubGVuZ3RoLFAscmU/''@;'; put 'put ''InNiY3MiOiJ1dGYxNmxlIik7dmFyIHBlPVEubGVuZ3RoPlEubD9RLnNsaWNlKDAsUS5sKTpRO3JldHVybiBudWxsPT1wZS5sJiYocGUubD1wZS5sZW5ndGgpLHBlfXZhciBUcz1WMjtmdW5jdGlvbiBCdCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9OCE9TC5iaWZmJiZMLmJpZmY/Mjo0LHBlPXku''@;'; put 'put ''cmVhZF9zaGlmdChyZSksX2U9eS5yZWFkX3NoaWZ0KHJlKSx2ZT15LnJlYWRfc2hpZnQoMiksU2U9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5Lmw9USx7czp7cjpwZSxjOnZlfSxlOntyOl9lLGM6U2V9fX1mdW5jdGlvbiBDbSh5LFAsTCxRKXt2YXIgcGU9IUx8fCFMLmJpZmZ8fDg9PUwuYmlm''@;'; put 'put ''ZjtRfHwoUT1mcihMJiY1PT1MLmJpZmY/MTY6MjApKSxRLndyaXRlX3NoaWZ0KDIscGUmJkwuY2VsbFN0eWxlcyYmeS5mb250SWQmJih5LmZvbnRJZDw0P3kuZm9udElkOnkuZm9udElkKzEpfHwwKTt2YXIgX2U9MTt5LnByb3RlY3Rpb24mJih5LnByb3RlY3Rpb24uZWRpdGFibGUmJihfZSY9''@;'; put 'put ''LTIpLHkucHJvdGVjdGlvbi5oaWRkZW4mJihfZXw9MikpLHkuc3R5bGU/KFEud3JpdGVfc2hpZnQoMix5Lm51bUZtdElkfHwwKSxRLndyaXRlX3NoaWZ0KDIsNjU1MjR8X2UpKTooUS53cml0ZV9zaGlmdCgyLHkubnVtRm10SWR8fDApLFEud3JpdGVfc2hpZnQoMixQPDw0fF9lKSk7dmFyIHZl''@;'; put 'put ''PXkuYWxpZ25tZW50fHx7fTtpZihwZSl7dmFyIFNlPTAsSGU9MDtXbS5pbmRleE9mKHZlLmhvcml6b250YWwpPi0xJiYoU2V8PVdtLmluZGV4T2YodmUuaG9yaXpvbnRhbCkpLHZlLndyYXBUZXh0JiYoU2V8PTgpLEI0LmluZGV4T2YodmUudmVydGljYWwpPi0xP1NlfD1CNC5pbmRleE9mKHZl''@;'; put 'put ''LnZlcnRpY2FsKTw8NDpudWxsPT12ZS52ZXJ0aWNhbCYmKFNlfD0zMiksUS53cml0ZV9zaGlmdCgxLFNlKSxRLndyaXRlX3NoaWZ0KDEsMCksdmUuc2hyaW5rVG9GaXQmJihIZXw9MTYpLFEud3JpdGVfc2hpZnQoMixIZSk7dmFyIEJlPW51bGw7bnVsbCE9eS5ib3JkZXJJZCYmKEJlPUwuQm9y''@;'; put 'put ''ZGVycyYmTC5Cb3JkZXJzW3kuYm9yZGVySWR8fDBdfHx7fSk7dmFyIEdlPTAsbnQ9MCxkdD0wO0JlJiYobnVsbCE9QmUubGVmdCYmQmUubGVmdC5zdHlsZSYmKEdlfD0oZHQ9VzIuaW5kZXhPZihCZS5sZWZ0LnN0eWxlKSk+LTE/ZHQ6MCksbnVsbCE9QmUucmlnaHQmJkJlLnJpZ2h0LnN0eWxl''@;'; put 'put ''JiYoR2V8PSgoZHQ9VzIuaW5kZXhPZihCZS5yaWdodC5zdHlsZSkpPi0xP2R0OjApPDw0KSxudWxsIT1CZS50b3AmJkJlLnRvcC5zdHlsZSYmKG50fD0oZHQ9VzIuaW5kZXhPZihCZS50b3Auc3R5bGUpKT4tMT9kdDowKSxudWxsIT1CZS5ib3R0b20mJkJlLmJvdHRvbS5zdHlsZSYmKG50fD0o''@;'; put 'put ''KGR0PVcyLmluZGV4T2YoQmUuYm90dG9tLnN0eWxlKSk+LTE/ZHQ6MCk8PDQpKSxRLndyaXRlX3NoaWZ0KDEsR2UpLFEud3JpdGVfc2hpZnQoMSxudCksUS53cml0ZV9zaGlmdCgyLDApLFEud3JpdGVfc2hpZnQoMiwwKSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIEN0PTAsY3Q9TC5GaWxscyYm''@;'; put 'put ''TC5GaWxsc1t5LmZpbGxJZHx8MF18fHt9OyhjdC5mZ0NvbG9yfHxjdC5iZ0NvbG9yKSYmKEN0fD00KSxRLndyaXRlX3NoaWZ0KDEsQ3QpO3ZhciBidD0wO2J0fD1IMyhjdC5mZ0NvbG9yLDY1KSxidHw9SDMoY3QuYmdDb2xvciw2NSk8PDcsUS53cml0ZV9zaGlmdCgyLGJ0KX1lbHNlIFEud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxRLndyaXRlX3NoaWZ0KDQsMCksUS53cml0ZV9zaGlmdCgyLDApO3JldHVybiBRfWZ1bmN0aW9uIE5jKHksUCxMKXt2YXIgUT1MdSh5KTsoMj09TC5iaWZmfHw5PT1QKSYmKyt5Lmw7dmFyIHJlPWZ1bmN0aW9uIHBtKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTtyZXR1''@;'; put 'put ''cm4gMT09PXkucmVhZF9zaGlmdCgxKT9QOjE9PT1QfSh5KTtyZXR1cm4gUS52YWw9cmUsUS50PSEwPT09cmV8fCExPT09cmU/ImIiOiJlIixRfXZhciBWMT1mdW5jdGlvbiB5Myh5LFAsTCl7cmV0dXJuIDA9PT1QPyIiOlYyKHksMCxMKX07ZnVuY3Rpb24geTkoeSxQLEwpe3ZhciByZSxRPXku''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxwZT17ZkJ1aWx0SW46MSZRLGZXYW50QWR2aXNlOlE+Pj4xJjEsZldhbnRQaWN0OlE+Pj4yJjEsZk9sZTpRPj4+MyYxLGZPbGVMaW5rOlE+Pj40JjEsY2Y6UT4+PjUmMTAyMyxmSWNvbjpRPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09TC5zYmNjaCYmKHJlPWZ1bmN0aW9u''@;'; put 'put ''IFJ3KHksUCxMKXt5LmwrPTQ7dmFyIFE9eS5sKyhQLT00KSxyZT1GZCh5LDAsTCkscGU9eS5yZWFkX3NoaWZ0KDIpO2lmKHBlIT09KFEtPXkubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK1ErIiAhPSAiK3BlKTtyZXR1cm4geS5sKz1wZSxyZX0o''@;'; put 'put ''eSxQLTIsTCkpLHBlLmJvZHk9cmV8fHkucmVhZF9zaGlmdChQLTIpLCJzdHJpbmciPT10eXBlb2YgcmUmJihwZS5OYW1lPXJlKSxwZX12YXIgS1Q9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJf''@;'; put 'put ''eGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0''@;'; put 'put ''X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gVncoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXkucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMSksX2U9eS5yZWFkX3NoaWZ0KDEpLHZlPXkucmVhZF9zaGlmdChMJiYyPT1MLmJpZmY/MToyKSxTZT0wOyghTHx8''@;'; put 'put ''TC5iaWZmPj01KSYmKDUhPUwuYmlmZiYmKHkubCs9MiksU2U9eS5yZWFkX3NoaWZ0KDIpLDU9PUwuYmlmZiYmKHkubCs9MikseS5sKz00KTt2YXIgSGU9SGQoeSxfZSxMKTszMiZyZSYmKEhlPUtUW0hlLmNoYXJDb2RlQXQoMCldKTt2YXIgQmU9US15Lmw7TCYmMj09TC5iaWZmJiYtLUJlO3Zh''@;'; put 'put ''ciBHZT1RIT15LmwmJjAhPT12ZSYmQmU+MD9mdW5jdGlvbiBkNih5LFAsTCxRKXt2YXIgX2UscmU9eS5sK1AscGU9bjUoeSxRLEwpO3JldHVybiByZSE9PXkubCYmKF9lPWozKHkscmUteS5sLHBlLEwpKSxbcGUsX2VdfSh5LEJlLEwsdmUpOltdO3JldHVybntjaEtleTpwZSxOYW1lOkhlLGl0''@;'; put 'put ''YWI6U2UscmdjZTpHZX19ZnVuY3Rpb24gU20oeSxQLEwpe2lmKEwuYmlmZjw4KXJldHVybiBmdW5jdGlvbiB3OSh5LFAsTCl7Mz09eVt5LmwrMV0mJnlbeS5sXSsrO3ZhciBRPUZkKHksMCxMKTtyZXR1cm4gMz09US5jaGFyQ29kZUF0KDApP1Euc2xpY2UoMSk6UX0oeSwwLEwpO2Zvcih2YXIg''@;'; put 'put ''UT1bXSxyZT15LmwrUCxwZT15LnJlYWRfc2hpZnQoTC5iaWZmPjg/NDoyKTswIT1wZS0tOylRLnB1c2gocDkoeSwwLEwpKTtpZih5LmwhPXJlKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK3kubCsiICE9ICIrcmUpO3JldHVybiBRfWZ1bmN0aW9uIGp3KHksUCxMKXt2YXIg''@;'; put 'put ''UT12YSh5LDYpO3N3aXRjaChMLmJpZmYpe2Nhc2UgMjp5LmwrKyxQLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6eS5sKz0yLFAtPTg7YnJlYWs7ZGVmYXVsdDp5LmwrPTYsUC09MTJ9cmV0dXJuW1EsZnYoeSxQLEwpXX12YXIgTW09W107ZnVuY3Rpb24gWGgoeSl7dmFyIFA9ZnIoMjQpLEw9c3Mo''@;'; put 'put ''eVswXSk7UC53cml0ZV9zaGlmdCgyLEwuciksUC53cml0ZV9zaGlmdCgyLEwuciksUC53cml0ZV9zaGlmdCgyLEwuYyksUC53cml0ZV9zaGlmdCgyLEwuYyk7Zm9yKHZhciBRPSJkMCBjOSBlYSA3OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxyZT0w''@;'; put 'put ''O3JlPDE2OysrcmUpUC53cml0ZV9zaGlmdCgxLHBhcnNlSW50KFFbcmVdLDE2KSk7cmV0dXJuIFMoW1AsYjMoeVsxXSldKX1mdW5jdGlvbiBRVCh5KXt2YXIgUD15WzFdLlRvb2x0aXAsTD1mcigxMCsyKihQLmxlbmd0aCsxKSk7TC53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBRPXNzKHlbMF0p''@;'; put 'put ''O0wud3JpdGVfc2hpZnQoMixRLnIpLEwud3JpdGVfc2hpZnQoMixRLnIpLEwud3JpdGVfc2hpZnQoMixRLmMpLEwud3JpdGVfc2hpZnQoMixRLmMpO2Zvcih2YXIgcmU9MDtyZTxQLmxlbmd0aDsrK3JlKUwud3JpdGVfc2hpZnQoMixQLmNoYXJDb2RlQXQocmUpKTtyZXR1cm4gTC53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDApLEx9ZnVuY3Rpb24gVmQoeSxQLEwpe2lmKCFMLmNlbGxTdHlsZXMpcmV0dXJuIGJjKHksUCk7dmFyIFE9TCYmTC5iaWZmPj0xMj80OjIscmU9eS5yZWFkX3NoaWZ0KFEpLHBlPXkucmVhZF9zaGlmdChRKSxfZT15LnJlYWRfc2hpZnQoUSksdmU9eS5yZWFkX3NoaWZ0KFEpLFNl''@;'; put 'put ''PXkucmVhZF9zaGlmdCgyKTsyPT1RJiYoeS5sKz0yKTt2YXIgSGU9e3M6cmUsZTpwZSx3Ol9lLGl4ZmU6dmUsZmxhZ3M6U2V9O3JldHVybihMLmJpZmY+PTV8fCFMLmJpZmYpJiYoSGUubGV2ZWw9U2U+PjgmNyksSGV9TW1bOF09ZnVuY3Rpb24oeSxQKXt2YXIgTD15LmwrUDt5LmwrPTEwO3Zh''@;'; put 'put ''ciBRPXkucmVhZF9zaGlmdCgyKTt5LmwrPTQseS5sKz0yLHkubCs9Mix5LmwrPTIseS5sKz00O3ZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHkubCs9cmUseS5sPUwse2ZtdDpRfX07dmFyIHF3PUx1LEt3PUgxLGlEPU4yO3ZhciBCMj1mdW5jdGlvbigpe3ZhciB5PXsxOjQzNywyOjg1''@;'; put 'put ''MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAw''@;'; put 'put ''NiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2''@;'; put 'put ''Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3''@;'; put 'put ''LDIwNDoxMjU3LDI1NToxNjk2OX0sUD1iZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUs''@;'; put 'put ''MTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIHJlKFNlLEhlKXt2YXIgQmU9SGV8fHt9O3JldHVybiBCZS5kYXRlTkZ8fChCZS5kYXRlTkY9Inl5eXltbWRkIiksazEoZnVu''@;'; put 'put ''Y3Rpb24gUShTZSxIZSl7dmFyIEJlPVtdLEdlPUcoMSk7c3dpdGNoKEhlLnR5cGUpe2Nhc2UiYmFzZTY0IjpHZT1EKHNlLmRlY29kZShTZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpHZT1EKFNlKTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6R2U9U2V9b2woR2UsMCk7dmFyIG50PUdl''@;'; put 'put ''LnJlYWRfc2hpZnQoMSksZHQ9ISEoMTM2Jm50KSxDdD0hMSxjdD0hMTtzd2l0Y2gobnQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OkN0PSEwLGR0PSEwO2JyZWFrO2Nhc2UgMTQwOmN0PSEwO2JyZWFrO2RlZmF1bHQ6dGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitudC50b1N0cmluZygxNikpfXZhciBidD0wLEZ0PTUyMTsyPT1udCYmKGJ0PUdlLnJlYWRfc2hpZnQoMikpLEdlLmwrPTMsMiE9bnQmJihidD1HZS5yZWFkX3NoaWZ0KDQpKSxidD4xMDQ4NTc2JiYoYnQ9MWU2KSwyIT1u''@;'; put 'put ''dCYmKEZ0PUdlLnJlYWRfc2hpZnQoMikpO3ZhciBFdD1HZS5yZWFkX3NoaWZ0KDIpLFR0PUhlLmNvZGVwYWdlfHwxMjUyOzIhPW50JiYoR2UubCs9MTYsR2UucmVhZF9zaGlmdCgxKSwwIT09R2VbR2UubF0mJihUdD15W0dlW0dlLmxdXSksR2UubCs9MSxHZS5sKz0yKSxjdCYmKEdlLmwrPTM2''@;'; put 'put ''KTtmb3IodmFyIFp0PVtdLHBuPXt9LEtuPU1hdGgubWluKEdlLmxlbmd0aCwyPT1udD81MjE6RnQtMTAtKEN0PzI2NDowKSksdW49Y3Q/MzI6MTE7R2UubDxLbiYmMTMhPUdlW0dlLmxdOylzd2l0Y2gocG49e30scG4ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShUdCxHZS5zbGljZShHZS5s''@;'; put 'put ''LEdlLmwrdW4pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIiksR2UubCs9dW4scG4udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKEdlLnJlYWRfc2hpZnQoMSkpLDIhPW50JiYhY3QmJihwbi5vZmZzZXQ9R2UucmVhZF9zaGlmdCg0KSkscG4ubGVuPUdlLnJlYWRfc2hpZnQoMSksMj09''@;'; put 'put ''bnQmJihwbi5vZmZzZXQ9R2UucmVhZF9zaGlmdCgyKSkscG4uZGVjPUdlLnJlYWRfc2hpZnQoMSkscG4ubmFtZS5sZW5ndGgmJlp0LnB1c2gocG4pLDIhPW50JiYoR2UubCs9Y3Q/MTM6MTQpLHBuLnR5cGUpe2Nhc2UiQiI6KCFDdHx8OCE9cG4ubGVuKSYmSGUuV1RGJiZjb25zb2xlLmxvZygi''@;'; put 'put ''U2tpcHBpbmcgIitwbi5uYW1lKyI6Iitwbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6SGUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitwbi5uYW1lKyI6Iitwbi50eXBlKTticmVhaztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6Y2FzZSJGIjpjYXNl''@;'; put 'put ''IkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrcG4udHlwZSl9aWYoMTMhPT1HZVtHZS5sXSYmKEdlLmw9RnQtMSksMTMhPT1HZS5yZWFkX3NoaWZ0KDEp''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrR2UubCsiICIrR2VbR2UubF0pO0dlLmw9RnQ7dmFyIHFuPTAsem49MDtmb3IoQmVbMF09W10sem49MDt6biE9WnQubGVuZ3RoOysrem4pQmVbMF1bem5dPVp0W3puXS5uYW1lO2Zvcig7YnQtLSA+MDspaWYoNDIh''@;'; put 'put ''PT1HZVtHZS5sXSlmb3IoKytHZS5sLEJlWysrcW5dPVtdLHpuPTAsem49MDt6biE9WnQubGVuZ3RoOysrem4pe3ZhciBrbj1HZS5zbGljZShHZS5sLEdlLmwrWnRbem5dLmxlbik7R2UubCs9WnRbem5dLmxlbixvbChrbiwwKTt2YXIgZXI9Y3B0YWJsZS51dGlscy5kZWNvZGUoVHQsa24pO3N3''@;'; put 'put ''aXRjaChadFt6bl0udHlwZSl7Y2FzZSJDIjplci50cmltKCkubGVuZ3RoJiYoQmVbcW5dW3puXT1lci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6QmVbcW5dW3puXT04PT09ZXIubGVuZ3RoP25ldyBEYXRlKCtlci5zbGljZSgwLDQpLCtlci5zbGljZSg0LDYpLTEsK2VyLnNs''@;'; put 'put ''aWNlKDYsOCkpOmVyO2JyZWFrO2Nhc2UiRiI6QmVbcW5dW3puXT1wYXJzZUZsb2F0KGVyLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOkJlW3FuXVt6bl09Y3Q/MjE0NzQ4MzY0OF5rbi5yZWFkX3NoaWZ0KC00LCJpIik6a24ucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpz''@;'; put 'put ''d2l0Y2goZXIudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpCZVtxbl1bem5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpCZVtxbl1bem5dPSExO2JyZWFrO2Nhc2UiIjpjYXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVk''@;'; put 'put ''IEw6fCIrZXIrInwiKX1icmVhaztjYXNlIk0iOmlmKCFkdCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitudC50b1N0cmluZygxNikpO0JlW3FuXVt6bl09IiMjTUVNTyMjIisoY3Q/cGFyc2VJbnQoZXIudHJpbSgpLDEwKTprbi5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''KTticmVhaztjYXNlIk4iOihlcj1lci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1lciYmKEJlW3FuXVt6bl09K2VyfHwwKTticmVhaztjYXNlIkAiOkJlW3FuXVt6bl09bmV3IERhdGUoa24ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1KTticmVhaztjYXNlIlQi''@;'; put 'put ''OkJlW3FuXVt6bl09bmV3IERhdGUoODY0ZTUqKGtuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkra24ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpCZVtxbl1bem5dPWtuLnJlYWRfc2hpZnQoNCwiaSIpLzFlNDticmVhaztjYXNlIk8iOkJlW3FuXVt6bl09LWtuLnJlYWRfc2hpZnQoLTgs''@;'; put 'put ''ImYiKTticmVhaztjYXNlIkIiOmlmKEN0JiY4PT1adFt6bl0ubGVuKXtCZVtxbl1bem5dPWtuLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjprbi5sKz1adFt6bl0ubGVuO2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09WnRbem5dLm5hbWUpYnJlYWs7ZGVm''@;'; put 'put ''YXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitadFt6bl0udHlwZSl9fWVsc2UgR2UubCs9RXQ7aWYoMiE9bnQmJkdlLmw8R2UubGVuZ3RoJiYyNiE9R2VbR2UubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisoR2Uu''@;'; put 'put ''bC0xKSsiIG9mICIrR2UubGVuZ3RoKyIgIitHZVtHZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIEhlJiZIZS5zaGVldFJvd3MmJihCZT1CZS5zbGljZSgwLEhlLnNoZWV0Um93cykpLEJlfShTZSxCZSksQmUpfXZhciBfZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJu''@;'; put 'put ''e3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBwZShTZSxIZSl7dHJ5e3JldHVybiBFZChyZShTZSxIZSksSGUpfWNhdGNoKEJlKXtpZihIZSYmSGUuV1RGKXRocm93IEJlfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRv''@;'; put 'put ''X3NoZWV0OnJlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gdmUoU2UsSGUpe3ZhciBCZT1IZXx8e307aWYoK0JlLmNvZGVwYWdlPj0wJiZqKCtCZS5jb2RlcGFnZSksInN0cmluZyI9PUJlLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBHZT15''@;'; put 'put ''YygpLG50PUg2KFNlLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksZHQ9bnRbMF0sQ3Q9bnQuc2xpY2UoMSksY3Q9MCxidD0wLEZ0PTAsRXQ9MTtmb3IoY3Q9MDtjdDxkdC5sZW5ndGg7KytjdClpZihudWxsIT1jdCl7aWYoKytGdCwibnVtYmVyIj09dHlwZW9mIGR0W2N0XSYmKGR0''@;'; put 'put ''W2N0XT1kdFtjdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGR0W2N0XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIrZHRbY3RdKyIgfCIrdHlwZW9mIGR0W2N0XSsifCIpO2lmKGR0LmluZGV4T2YoZHRbY3RdKSE9PWN0KWZvcihidD0wO2J0PDEw''@;'; put 'put ''MjQ7KytidClpZigtMT09ZHQuaW5kZXhPZihkdFtjdF0rIl8iK2J0KSl7ZHRbY3RdKz0iXyIrYnQ7YnJlYWt9fXZhciBUdD1PaShTZVsiIXJlZiJdKSxadD1bXTtmb3IoY3Q9MDtjdDw9VHQuZS5jLVR0LnMuYzsrK2N0KXt2YXIgcG49W107Zm9yKGJ0PTA7YnQ8Q3QubGVuZ3RoOysrYnQpbnVs''@;'; put 'put ''bCE9Q3RbYnRdW2N0XSYmcG4ucHVzaChDdFtidF1bY3RdKTtpZigwIT1wbi5sZW5ndGgmJm51bGwhPWR0W2N0XSl7dmFyIEtuPSIiLHVuPSIiO2ZvcihidD0wO2J0PHBuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIHBuW2J0XSl7Y2FzZSJudW1iZXIiOnVuPSJCIjticmVhaztjYXNlInN0''@;'; put 'put ''cmluZyI6ZGVmYXVsdDp1bj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjp1bj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOnVuPXBuW2J0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KEtuPUtuJiZLbiE9dW4/IkMiOnVuKSlicmVha31FdCs9X2VbS25dfHwwLFp0W2N0XT1Lbn1lbHNl''@;'; put 'put ''IFp0W2N0XT0iPyJ9dmFyIHFuPUdlLm5leHQoMzIpO2Zvcihxbi53cml0ZV9zaGlmdCg0LDMxODkwMjU3NikscW4ud3JpdGVfc2hpZnQoNCxDdC5sZW5ndGgpLHFuLndyaXRlX3NoaWZ0KDIsMjk2KzMyKkZ0KSxxbi53cml0ZV9zaGlmdCgyLEV0KSxjdD0wO2N0PDQ7KytjdClxbi53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDApO2Zvcihxbi53cml0ZV9zaGlmdCg0LDB8KCtQW1JdfHwzKTw8OCksY3Q9MCxidD0wO2N0PGR0Lmxlbmd0aDsrK2N0KWlmKG51bGwhPWR0W2N0XSl7dmFyIHpuPUdlLm5leHQoMzIpLGtuPShkdFtjdF0uc2xpY2UoLTEwKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNl''@;'; put 'put ''KDAsMTEpO3puLndyaXRlX3NoaWZ0KDEsa24sInNiY3MiKSx6bi53cml0ZV9zaGlmdCgxLCI/Ij09WnRbY3RdPyJDIjpadFtjdF0sInNiY3MiKSx6bi53cml0ZV9zaGlmdCg0LGJ0KSx6bi53cml0ZV9zaGlmdCgxLF9lW1p0W2N0XV18fDApLHpuLndyaXRlX3NoaWZ0KDEsMCksem4ud3JpdGVf''@;'; put 'put ''c2hpZnQoMSwyKSx6bi53cml0ZV9zaGlmdCg0LDApLHpuLndyaXRlX3NoaWZ0KDEsMCksem4ud3JpdGVfc2hpZnQoNCwwKSx6bi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1fZVtadFtjdF1dfHwwfXZhciBlcj1HZS5uZXh0KDI2NCk7Zm9yKGVyLndyaXRlX3NoaWZ0KDQsMTMpLGN0PTA7Y3Q8NjU7''@;'; put 'put ''KytjdCllci53cml0ZV9zaGlmdCg0LDApO2ZvcihjdD0wO2N0PEN0Lmxlbmd0aDsrK2N0KXt2YXIgdHI9R2UubmV4dChFdCk7Zm9yKHRyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxkdC5sZW5ndGg7KytidClpZihudWxsIT1kdFtidF0pc3dpdGNoKFp0W2J0XSl7Y2FzZSJMIjp0ci53cml0''@;'; put 'put ''ZV9zaGlmdCgxLG51bGw9PUN0W2N0XVtidF0/NjM6Q3RbY3RdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjp0ci53cml0ZV9zaGlmdCg4LEN0W2N0XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOkN0W2N0XVtidF0/KHRyLndyaXRlX3NoaWZ0KDQsKCIwMDAwIitDdFtjdF1bYnRdLmdldEZ1''@;'; put 'put ''bGxZZWFyKCkpLnNsaWNlKC00KSwic2JjcyIpLHRyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKEN0W2N0XVtidF0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCJzYmNzIiksdHIud3JpdGVfc2hpZnQoMiwoIjAwIitDdFtjdF1bYnRdLmdldERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOnRyLndy''@;'; put 'put ''aXRlX3NoaWZ0KDgsIjAwMDAwMDAwIiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIFpuPVN0cmluZyhDdFtjdF1bYnRdfHwiIik7Zm9yKHRyLndyaXRlX3NoaWZ0KDEsWm4sInNiY3MiKSxGdD0wO0Z0PDI1MC1abi5sZW5ndGg7KytGdCl0ci53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIEdl''@;'; put 'put ''Lm5leHQoMSkud3JpdGVfc2hpZnQoMSwyNiksR2UuZW5kKCl9fX0oKSxFOT1mdW5jdGlvbigpe3ZhciB5PXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2Mi''@;'; put 'put ''LEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIs''@;'; put 'put ''SmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixI''@;'; put 'put ''dToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUs''@;'; put 'put ''azoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sUD1uZXcgUmVnRXhwKCJc''@;'; put 'put ''eDFiTigiK2x0KHkpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLEw9ZnVuY3Rpb24obnQsZHQpe3ZhciBDdD15W2R0XTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEN0P2VlKEN0KTpDdH0sUT1mdW5j''@;'; put 'put ''dGlvbihudCxkdCxDdCl7dmFyIGN0PWR0LmNoYXJDb2RlQXQoMCktMzI8PDR8Q3QuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PWN0P250OmVlKGN0KX07ZnVuY3Rpb24gcGUobnQsZHQpe3ZhciBlcixDdD1udC5zcGxpdCgvW1xuXHJdKy8pLGN0PS0xLGJ0PS0xLEZ0PTAsRXQ9MCxUdD1b''@;'; put 'put ''XSxadD1bXSxwbj1udWxsLEtuPXt9LHVuPVtdLHFuPVtdLHpuPVtdLGtuPTA7Zm9yKCtkdC5jb2RlcGFnZT49MCYmaigrZHQuY29kZXBhZ2UpO0Z0IT09Q3QubGVuZ3RoOysrRnQpe2tuPTA7dmFyIG9pLHRyPUN0W0Z0XS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAt''@;'; put 'put ''XHgzRl0pL2csUSkucmVwbGFjZShQLEwpLFpuPXRyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oQ2kpe3JldHVybiBDaS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYodHIubGVuZ3RoPjApc3dpdGNoKFpuWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2Ui''@;'; put 'put ''QiI6Y2FzZSJPIjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6IlAiPT1ablsxXS5jaGFyQXQoMCkmJlp0LnB1c2godHIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBraT0hMSxMaT0hMSxRcj0hMSx1cj0hMSxBbj0tMSx2cj0tMTtmb3IoRXQ9MTtFdDxabi5s''@;'; put 'put ''ZW5ndGg7KytFdClzd2l0Y2goWm5bRXRdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xLExpPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKGN0PXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSktMSxMaXx8KGJ0PTApLGVy''@;'; put 'put ''PVR0Lmxlbmd0aDtlcjw9Y3Q7KytlcilUdFtlcl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0ob2k9Wm5bRXRdLnNsaWNlKDEpKS5jaGFyQXQoMCk/b2k9b2kuc2xpY2UoMSxvaS5sZW5ndGgtMSk6IlRSVUUiPT09b2k/b2k9ITA6IkZBTFNFIj09PW9pP29pPSExOmlzTmFOKFduKG9pKSk/aXNO''@;'; put 'put ''YU4oZW4ob2kpLmdldERhdGUoKSl8fChvaT1IdChvaSkpOihvaT1XbihvaSksbnVsbCE9PXBuJiZ3LmlzX2RhdGUocG4pJiYob2k9aHQob2kpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIG9pJiYic3RyaW5nIiE9KGR0fHx7fSkudHlwZSYmKGR0fHx7fSkuY29kZXBh''@;'; put 'put ''Z2UmJihvaT1jcHRhYmxlLnV0aWxzLmRlY29kZShkdC5jb2RlcGFnZSxvaSkpLGtpPSEwO2JyZWFrO2Nhc2UiRSI6dXI9ITA7dmFyIHJyPWFmKFpuW0V0XS5zbGljZSgxKSx7cjpjdCxjOmJ0fSk7VHRbY3RdW2J0XT1bVHRbY3RdW2J0XSxycl07YnJlYWs7Y2FzZSJTIjpRcj0hMCxUdFtjdF1b''@;'; put 'put ''YnRdPVtUdFtjdF1bYnRdLCJTNVMiXTticmVhaztjYXNlIlIiOkFuPXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOnZyPXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGR0JiZkdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJh''@;'; put 'put ''ZCByZWNvcmQgIit0cil9aWYoa2kmJihUdFtjdF1bYnRdJiYyPT1UdFtjdF1bYnRdLmxlbmd0aD9UdFtjdF1bYnRdWzBdPW9pOlR0W2N0XVtidF09b2kscG49bnVsbCksUXIpe2lmKHVyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVs''@;'; put 'put ''YSIpO3ZhciBTbj1Bbj4tMSYmVHRbQW5dW3ZyXTtpZighU258fCFTblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO1R0W2N0XVtidF1bMV09akMoU25bMV0se3I6Y3QtQW4sYzpidC12cn0pfWJyZWFrO2Nhc2UiRiI6dmFyIHByPTA7''@;'; put 'put ''Zm9yKEV0PTE7RXQ8Wm4ubGVuZ3RoOysrRXQpc3dpdGNoKFpuW0V0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xLCsrcHI7YnJlYWs7Y2FzZSJZIjpmb3IoY3Q9cGFyc2VJbnQoWm5bRXRdLnNsaWNlKDEpKS0xLGVyPVR0Lmxlbmd0aDtlcjw9Y3Q7''@;'; put 'put ''KytlcilUdFtlcl09W107YnJlYWs7Y2FzZSJNIjprbj1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2UiRiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOnBuPVp0W3BhcnNlSW50KFpuW0V0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2Ui''@;'; put 'put ''VyI6Zm9yKHpuPVpuW0V0XS5zbGljZSgxKS5zcGxpdCgiICIpLGVyPXBhcnNlSW50KHpuWzBdLDEwKTtlcjw9cGFyc2VJbnQoem5bMV0sMTApOysrZXIpa249cGFyc2VJbnQoem5bMl0sMTApLHFuW2VyLTFdPTA9PT1rbj97aGlkZGVuOiEwfTp7d2NoOmtufSxwdShxbltlci0xXSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJDIjpxbltidD1wYXJzZUludChabltFdF0uc2xpY2UoMSkpLTFdfHwocW5bYnRdPXt9KTticmVhaztjYXNlIlIiOnVuW2N0PXBhcnNlSW50KFpuW0V0XS5zbGljZSgxKSktMV18fCh1bltjdF09e30pLGtuPjA/KHVuW2N0XS5ocHQ9a24sdW5bY3RdLmhweD1VMShrbikpOjA9PT1rbiYm''@;'; put 'put ''KHVuW2N0XS5oaWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoZHQmJmR0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3RyKX1wcjwxJiYocG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkdCYmZHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIr''@;'; put 'put ''dHIpfX1yZXR1cm4gdW4ubGVuZ3RoPjAmJihLblsiIXJvd3MiXT11bikscW4ubGVuZ3RoPjAmJihLblsiIWNvbHMiXT1xbiksZHQmJmR0LnNoZWV0Um93cyYmKFR0PVR0LnNsaWNlKDAsZHQuc2hlZXRSb3dzKSksW1R0LEtuXX1mdW5jdGlvbiBfZShudCxkdCl7dmFyIEN0PWZ1bmN0aW9uIHJl''@;'; put 'put ''KG50LGR0KXtzd2l0Y2goZHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBwZShzZS5kZWNvZGUobnQpLGR0KTtjYXNlImJpbmFyeSI6cmV0dXJuIHBlKG50LGR0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIHBlKG50LnRvU3RyaW5nKCJiaW5hcnkiKSxkdCk7Y2FzZSJhcnJheSI6cmV0dXJuIHBl''@;'; put 'put ''KFB0KG50KSxkdCl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2R0LnR5cGUpfShudCxkdCksYnQ9Q3RbMV0sRnQ9azEoQ3RbMF0sZHQpO3JldHVybiBsdChidCkuZm9yRWFjaChmdW5jdGlvbihFdCl7RnRbRXRdPWJ0W0V0XX0pLEZ0fWZ1bmN0aW9uIFNlKG50LGR0LEN0''@;'; put 'put ''LGN0KXt2YXIgYnQ9IkM7WSIrKEN0KzEpKyI7WCIrKGN0KzEpKyI7SyI7c3dpdGNoKG50LnQpe2Nhc2UibiI6YnQrPW50LnZ8fDAsbnQuZiYmIW50LkYmJihidCs9IjtFIitLOShudC5mLHtyOkN0LGM6Y3R9KSk7YnJlYWs7Y2FzZSJiIjpidCs9bnQudj8iVFJVRSI6IkZBTFNFIjticmVhaztj''@;'; put 'put ''YXNlImUiOmJ0Kz1udC53fHxudC52O2JyZWFrO2Nhc2UiZCI6YnQrPSciJysobnQud3x8bnQudikrJyInO2JyZWFrO2Nhc2UicyI6YnQrPSciJytudC52LnJlcGxhY2UoLyIvZywiIikrJyInfXJldHVybiBidH1yZXR1cm4geVsifCJdPTI1NCx7dG9fd29ya2Jvb2s6ZnVuY3Rpb24gdmUobnQs''@;'; put 'put ''ZHQpe3JldHVybiBFZChfZShudCxkdCksZHQpfSx0b19zaGVldDpfZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEdlKG50LGR0KXt2YXIgRnQsQ3Q9WyJJRDtQU2hlZXRKUztOO0UiXSxjdD1bXSxidD1PaShudFsiIXJlZiJdKSxFdD1BcnJheS5pc0FycmF5KG50KSxUdD0iXHJcbiI7Q3QucHVzaCgi''@;'; put 'put ''UDtQR2VuZXJhbCIpLEN0LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLG50WyIhY29scyJdJiZmdW5jdGlvbiBIZShudCxkdCl7ZHQuZm9yRWFjaChmdW5jdGlvbihDdCxjdCl7dmFyIGJ0PSJGO1ciKyhjdCsxKSsiICIrKGN0KzEpKyIgIjtDdC5oaWRkZW4/YnQrPSIwIjooIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBDdC53aWR0aCYmIUN0LndweCYmKEN0LndweD1NYyhDdC53aWR0aCkpLCJudW1iZXIiPT10eXBlb2YgQ3Qud3B4JiYhQ3Qud2NoJiYoQ3Qud2NoPXRmKEN0LndweCkpLCJudW1iZXIiPT10eXBlb2YgQ3Qud2NoJiYoYnQrPU1hdGgucm91bmQoQ3Qud2NoKSkpLCIgIiE9YnQuY2hhckF0''@;'; put 'put ''KGJ0Lmxlbmd0aC0xKSYmbnQucHVzaChidCl9KX0oQ3QsbnRbIiFjb2xzIl0pLG50WyIhcm93cyJdJiZmdW5jdGlvbiBCZShudCxkdCl7ZHQuZm9yRWFjaChmdW5jdGlvbihDdCxjdCl7dmFyIGJ0PSJGOyI7Q3QuaGlkZGVuP2J0Kz0iTTA7IjpDdC5ocHQ/YnQrPSJNIisyMCpDdC5ocHQrIjsi''@;'; put 'put ''OkN0LmhweCYmKGJ0Kz0iTSIrMjAqajIoQ3QuaHB4KSsiOyIpLGJ0Lmxlbmd0aD4yJiZudC5wdXNoKGJ0KyJSIisoY3QrMSkpfSl9KEN0LG50WyIhcm93cyJdKSxDdC5wdXNoKCJCO1kiKyhidC5lLnItYnQucy5yKzEpKyI7WCIrKGJ0LmUuYy1idC5zLmMrMSkrIjtEIitbYnQucy5jLGJ0LnMu''@;'; put 'put ''cixidC5lLmMsYnQuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgWnQ9YnQucy5yO1p0PD1idC5lLnI7KytadClmb3IodmFyIHBuPWJ0LnMuYztwbjw9YnQuZS5jOysrcG4pe3ZhciBLbj1kaSh7cjpadCxjOnBufSk7KEZ0PUV0PyhudFtadF18fFtdKVtwbl06bnRbS25dKSYmKG51bGwhPUZ0LnZ8''@;'; put 'put ''fEZ0LmYmJiFGdC5GKSYmY3QucHVzaChTZShGdCwwLFp0LHBuKSl9cmV0dXJuIEN0LmpvaW4oVHQpK1R0K2N0LmpvaW4oVHQpK1R0KyJFIitUdH19fSgpLE0zPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUChwZSxfZSl7Zm9yKHZhciB2ZT1wZS5zcGxpdCgiXG4iKSxTZT0tMSxIZT0tMSxCZT0wLEdl''@;'; put 'put ''PVtdO0JlIT09dmUubGVuZ3RoOysrQmUpaWYoIkJPVCIhPT12ZVtCZV0udHJpbSgpKXtpZighKFNlPDApKXtmb3IodmFyIG50PXZlW0JlXS50cmltKCkuc3BsaXQoIiwiKSxkdD1udFswXSxDdD1udFsxXSxjdD12ZVsrK0JlXXx8IiI7MSYoY3QubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYm''@;'; put 'put ''QmU8dmUubGVuZ3RoLTE7KWN0Kz0iXG4iK3ZlWysrQmVdO3N3aXRjaChjdD1jdC50cmltKCksK2R0KXtjYXNlLTE6aWYoIkJPVCI9PT1jdCl7R2VbKytTZV09W10sSGU9MDtjb250aW51ZX1pZigiRU9EIiE9PWN0KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNv''@;'; put 'put ''bW1hbmQgIitjdCk7YnJlYWs7Y2FzZSAwOkdlW1NlXVtIZV09IlRSVUUiPT09Y3R8fCJGQUxTRSIhPT1jdCYmKGlzTmFOKFduKEN0KSk/aXNOYU4oZW4oQ3QpLmdldERhdGUoKSk/Q3Q6SHQoQ3QpOlduKEN0KSksKytIZTticmVhaztjYXNlIDE6KGN0PShjdD1jdC5zbGljZSgxLGN0Lmxlbmd0''@;'; put 'put ''aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmY3QubWF0Y2goL149Ii4qIiQvKSYmKGN0PWN0LnNsaWNlKDIsLTEpKSxHZVtTZV1bSGUrK109IiIhPT1jdD9jdDpudWxsfWlmKCJFT0QiPT09Y3QpYnJlYWt9fWVsc2UgR2VbKytTZV09W10sSGU9MDtyZXR1cm4gX2UmJl9lLnNoZWV0Um93cyYm''@;'; put 'put ''KEdlPUdlLnNsaWNlKDAsX2Uuc2hlZXRSb3dzKSksR2V9ZnVuY3Rpb24gTChwZSxfZSl7cmV0dXJuIGsxKGZ1bmN0aW9uIHkocGUsX2Upe3N3aXRjaChfZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFAoc2UuZGVjb2RlKHBlKSxfZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBQKHBlLF9lKTtj''@;'; put 'put ''YXNlImJ1ZmZlciI6cmV0dXJuIFAocGUudG9TdHJpbmcoImJpbmFyeSIpLF9lKTtjYXNlImFycmF5IjpyZXR1cm4gUChQdChwZSksX2UpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitfZS50eXBlKX0ocGUsX2UpLF9lKX12YXIgcGUsX2U7cmV0dXJue3RvX3dvcmtib29r''@;'; put 'put ''OmZ1bmN0aW9uIFEocGUsX2Upe3JldHVybiBFZChMKHBlLF9lKSxfZSl9LHRvX3NoZWV0OkwsZnJvbV9zaGVldDoocGU9ZnVuY3Rpb24oU2UsSGUsQmUsR2UsbnQpe1NlLnB1c2goSGUpLFNlLnB1c2goQmUrIiwiK0dlKSxTZS5wdXNoKCciJytudC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0s''@;'; put 'put ''X2U9ZnVuY3Rpb24oU2UsSGUsQmUsR2Upe1NlLnB1c2goSGUrIiwiK0JlKSxTZS5wdXNoKDE9PUhlPyciJytHZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOkdlKX0sZnVuY3Rpb24oU2Upe3ZhciBHZSxIZT1bXSxCZT1PaShTZVsiIXJlZiJdKSxudD1BcnJheS5pc0FycmF5KFNlKTtwZShIZSwi''@;'; put 'put ''VEFCTEUiLDAsMSwic2hlZXRqcyIpLHBlKEhlLCJWRUNUT1JTIiwwLEJlLmUuci1CZS5zLnIrMSwiIikscGUoSGUsIlRVUExFUyIsMCxCZS5lLmMtQmUucy5jKzEsIiIpLHBlKEhlLCJEQVRBIiwwLDAsIiIpO2Zvcih2YXIgZHQ9QmUucy5yO2R0PD1CZS5lLnI7KytkdCl7X2UoSGUsLTEsMCwi''@;'; put 'put ''Qk9UIik7Zm9yKHZhciBDdD1CZS5zLmM7Q3Q8PUJlLmUuYzsrK0N0KXt2YXIgY3Q9ZGkoe3I6ZHQsYzpDdH0pO2lmKEdlPW50PyhTZVtkdF18fFtdKVtDdF06U2VbY3RdKXN3aXRjaChHZS50KXtjYXNlIm4iOnZhciBidD1HZS53OyFidCYmbnVsbCE9R2UudiYmKGJ0PUdlLnYpLG51bGw9PWJ0''@;'; put 'put ''P19lKEhlLDEsMCxHZS5mJiYhR2UuRj8iPSIrR2UuZjoiIik6X2UoSGUsMCxidCwiViIpO2JyZWFrO2Nhc2UiYiI6X2UoSGUsMCxHZS52PzE6MCxHZS52PyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlInMiOl9lKEhlLDEsMCxpc05hTihHZS52KT9HZS52Oic9IicrR2UudisnIicpO2JyZWFr''@;'; put 'put ''O2Nhc2UiZCI6R2Uud3x8KEdlLnc9dy5mb3JtYXQoR2Uuenx8dy5fdGFibGVbMTRdLFVlKEh0KEdlLnYpKSkpLF9lKEhlLDAsR2UudywiViIpO2JyZWFrO2RlZmF1bHQ6X2UoSGUsMSwwLCIiKX1lbHNlIF9lKEhlLDEsMCwiIil9fXJldHVybiBfZShIZSwtMSwwLCJFT0QiKSxIZS5qb2luKCJc''@;'; put 'put ''clxuIil9KX19KCksTzQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiBQKEdlKXtyZXR1cm4gR2UucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFj''@;'; put 'put ''ZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBRKEdlLG50KXtyZXR1cm4gazEoZnVuY3Rpb24gTChHZSxudCl7Zm9yKHZhciBkdD1HZS5zcGxpdCgiXG4iKSxDdD0tMSxjdD0tMSxidD0wLEZ0PVtdO2J0IT09ZHQubGVuZ3RoOysrYnQpe3ZhciBFdD1kdFtidF0u''@;'; put 'put ''dHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09RXRbMF0pe3ZhciBUdD1zcyhFdFsxXSk7aWYoRnQubGVuZ3RoPD1UdC5yKWZvcihDdD1GdC5sZW5ndGg7Q3Q8PVR0LnI7KytDdClGdFtDdF18fChGdFtDdF09W10pO3N3aXRjaChDdD1UdC5yLGN0PVR0LmMsRXRbMl0pe2Nhc2UidCI6RnRb''@;'; put 'put ''Q3RdW2N0XT15KEV0WzNdKTticmVhaztjYXNlInYiOkZ0W0N0XVtjdF09K0V0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgWnQ9RXRbRXQubGVuZ3RoLTFdO2Nhc2UidnRjIjpGdFtDdF1bY3RdPSJubCI9PT1FdFszXT8hIStFdFs0XTorRXRbNF0sInZ0ZiI9PUV0WzJdJiYoRnRbQ3RdW2N0XT1b''@;'; put 'put ''RnRbQ3RdW2N0XSxadF0pfX19cmV0dXJuIG50JiZudC5zaGVldFJvd3MmJihGdD1GdC5zbGljZSgwLG50LnNoZWV0Um93cykpLEZ0fShHZSxudCksbnQpfXZhciBwZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0''@;'; put 'put ''L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksX2U9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHZl''@;'; put 'put ''PVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLFNlPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIEhlKEdlKXtpZighR2V8fCFHZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgQ3Qs''@;'; put 'put ''bnQ9W10sZHQ9W10sY3Q9IiIsYnQ9V3MoR2VbIiFyZWYiXSksRnQ9QXJyYXkuaXNBcnJheShHZSksRXQ9YnQucy5yO0V0PD1idC5lLnI7KytFdClmb3IodmFyIFR0PWJ0LnMuYztUdDw9YnQuZS5jOysrVHQpaWYoY3Q9ZGkoe3I6RXQsYzpUdH0pLChDdD1GdD8oR2VbRXRdfHxbXSlbVHRdOkdl''@;'; put 'put ''W2N0XSkmJm51bGwhPUN0LnYmJiJ6IiE9PUN0LnQpe3N3aXRjaChkdD1bImNlbGwiLGN0LCJ0Il0sQ3QudCl7Y2FzZSJzIjpjYXNlInN0ciI6ZHQucHVzaChQKEN0LnYpKTticmVhaztjYXNlIm4iOkN0LmY/KGR0WzJdPSJ2dGYiLGR0WzNdPSJuIixkdFs0XT1DdC52LGR0WzVdPVAoQ3QuZikp''@;'; put 'put ''OihkdFsyXT0idiIsZHRbM109Q3Qudik7YnJlYWs7Y2FzZSJiIjpkdFsyXT0idnQiKyhDdC5mPyJmIjoiYyIpLGR0WzNdPSJubCIsZHRbNF09Q3Qudj8iMSI6IjAiLGR0WzVdPVAoQ3QuZnx8KEN0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBadD1VZShIdChDdC52KSk7''@;'; put 'put ''ZHRbMl09InZ0YyIsZHRbM109Im5kIixkdFs0XT0iIitadCxkdFs1XT1DdC53fHx3LmZvcm1hdChDdC56fHx3Ll90YWJsZVsxNF0sWnQpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9bnQucHVzaChkdC5qb2luKCI6IikpfXJldHVybiBudC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMr''@;'; put 'put ''MSkrIjpyOiIrKGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLG50LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksbnQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcmUoR2UsbnQpe3JldHVybiBFZChRKEdlLG50KSxudCl9LHRvX3NoZWV0OlEsZnJvbV9z''@;'; put 'put ''aGVldDpmdW5jdGlvbiBCZShHZSl7cmV0dXJuW3BlLF9lLHZlLF9lLEhlKEdlKSxTZV0uam9pbigiXG4iKX19fSgpLEIxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShCZSxHZSxudCxkdCxDdCl7Q3QucmF3P0dlW250XVtkdF09QmU6IiI9PT1CZXx8KEdlW250XVtkdF09JG4oQmUsQ3QpPyRuKEJl''@;'; put 'put ''LEN0KS52OkJlKX12YXIgTD17NDQ6IiwiLDk6Ilx0Iiw1OToiOyJ9LFE9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIHJlKEJlKXtmb3IodmFyIEdlPXt9LG50PSExLGR0PTAsQ3Q9MDtkdDxCZS5sZW5ndGg7KytkdCkzND09KEN0PUJlLmNoYXJDb2RlQXQoZHQpKT9udD0hbnQ6IW50JiZDdCBp''@;'; put 'put ''biBMJiYoR2VbQ3RdPShHZVtDdF18fDApKzEpO2ZvcihkdCBpbiBDdD1bXSxHZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR2UsZHQpJiZDdC5wdXNoKFtHZVtkdF0sZHRdKTtpZighQ3QubGVuZ3RoKWZvcihkdCBpbiBHZT1RKU9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChHZSxkdCkmJkN0LnB1c2goW0dlW2R0XSxkdF0pO3JldHVybiBDdC5zb3J0KGZ1bmN0aW9uKGN0LGJ0KXtyZXR1cm4gY3RbMF0tYnRbMF18fFFbY3RbMV1dLVFbYnRbMV1dfSksTFtDdC5wb3AoKVsxXV19ZnVuY3Rpb24gX2UoQmUsR2Upe3JldHVybiFHZXx8IUdlLlBS''@;'; put 'put ''Tnx8InNlcD0iPT1CZS5zbGljZSgwLDQpfHxCZS5pbmRleE9mKCJcdCIpPj0wfHxCZS5pbmRleE9mKCIsIik+PTB8fEJlLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBwZShCZSxHZSl7dmFyIG50PUdlfHx7fSxkdD0iIjtudWxsIT10ZSYmbnVsbD09bnQuZGVuc2UmJihudC5kZW5zZT10ZSk7''@;'; put 'put ''dmFyIEN0PW50LmRlbnNlP1tdOnt9LGN0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1CZS5zbGljZSgwLDQpPzEzPT1CZS5jaGFyQ29kZUF0KDUpJiYxMD09QmUuY2hhckNvZGVBdCg2KT8oZHQ9QmUuY2hhckF0KDQpLEJlPUJlLnNsaWNlKDcpKToxMz09QmUuY2hhckNvZGVB''@;'; put 'put ''dCg1KXx8MTA9PUJlLmNoYXJDb2RlQXQoNSk/KGR0PUJlLmNoYXJBdCg0KSxCZT1CZS5zbGljZSg2KSk6ZHQ9cmUoQmUuc2xpY2UoMCwxMDI0KSk6ZHQ9cmUoQmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsRnQ9MCxFdD0wLFR0PTAsWnQ9MCxwbj1kdC5jaGFyQ29kZUF0KDApLEtuPSExLHVu''@;'; put 'put ''PTAscW49QmUuY2hhckNvZGVBdCgwKTtCZT1CZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciB6bj1udWxsIT1udC5kYXRlTkY/ZnVuY3Rpb24geGUoeSl7dmFyIFA9Im51bWJlciI9PXR5cGVvZiB5P3cuX3RhYmxlW3ldOnk7cmV0dXJuIFA9UC5yZXBsYWNlKGZlLCIoXFxkKykiKSxuZXcg''@;'; put 'put ''UmVnRXhwKCJeIitQKyIkIil9KG50LmRhdGVORik6bnVsbDtmdW5jdGlvbiBrbigpe3ZhciBlcj1CZS5zbGljZShUdCxadCksdHI9e307aWYoJyInPT1lci5jaGFyQXQoMCkmJiciJz09ZXIuY2hhckF0KGVyLmxlbmd0aC0xKSYmKGVyPWVyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyIn''@;'; put 'put ''KSksMD09PWVyLmxlbmd0aCl0ci50PSJ6IjtlbHNlIGlmKG50LnJhdyl0ci50PSJzIix0ci52PWVyO2Vsc2UgaWYoMD09PWVyLnRyaW0oKS5sZW5ndGgpdHIudD0icyIsdHIudj1lcjtlbHNlIGlmKDYxPT1lci5jaGFyQ29kZUF0KDApKTM0PT1lci5jaGFyQ29kZUF0KDEpJiYzND09ZXIuY2hh''@;'; put 'put ''ckNvZGVBdChlci5sZW5ndGgtMSk/KHRyLnQ9InMiLHRyLnY9ZXIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBYOSh5KXtyZXR1cm4gMSE9eS5sZW5ndGh9KGVyKT8odHIudD0ibiIsdHIuZj1lci5zbGljZSgxKSk6KHRyLnQ9InMiLHRyLnY9ZXIpO2Vsc2UgaWYo''@;'; put 'put ''IlRSVUUiPT1lcil0ci50PSJiIix0ci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09ZXIpdHIudD0iYiIsdHIudj0hMTtlbHNlIGlmKGlzTmFOKEV0PVduKGVyKSkpaWYoIWlzTmFOKGVuKGVyKS5nZXREYXRlKCkpfHx6biYmZXIubWF0Y2goem4pKXt0ci56PW50LmRhdGVORnx8dy5fdGFibGVbMTRd''@;'; put 'put ''O3ZhciBabj0wO3puJiZlci5tYXRjaCh6bikmJihlcj1mdW5jdGlvbiBMZSh5LFAsTCl7dmFyIFE9LTEscmU9LTEscGU9LTEsX2U9LTEsdmU9LTEsU2U9LTE7KFAubWF0Y2goZmUpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihHZSxudCl7dmFyIGR0PXBhcnNlSW50KExbbnQrMV0sMTApO3N3aXRj''@;'; put 'put ''aChHZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpRPWR0O2JyZWFrO2Nhc2UiZCI6cGU9ZHQ7YnJlYWs7Y2FzZSJoIjpfZT1kdDticmVhaztjYXNlInMiOlNlPWR0O2JyZWFrO2Nhc2UibSI6X2U+PTA/dmU9ZHQ6cmU9ZHR9fSksU2U+PTAmJi0xPT12ZSYmcmU+PTAmJih2ZT1y''@;'; put 'put ''ZSxyZT0tMSk7dmFyIEhlPSgiIisoUT49MD9ROihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKHJlPj0xP3JlOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhwZT49MT9wZToxKSkuc2xpY2UoLTIpOzc9PUhlLmxlbmd0aCYmKEhlPSIwIitIZSksOD09SGUu''@;'; put 'put ''bGVuZ3RoJiYoSGU9IjIwIitIZSk7dmFyIEJlPSgiMDAiKyhfZT49MD9fZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisodmU+PTA/dmU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKFNlPj0wP1NlOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PV9lJiYtMT09dmUmJi0xPT1TZT9IZTotMT09USYm''@;'; put 'put ''LTE9PXJlJiYtMT09cGU/QmU6SGUrIlQiK0JlfSgwLG50LmRhdGVORixlci5tYXRjaCh6bil8fFtdKSxabj0xKSxudC5jZWxsRGF0ZXM/KHRyLnQ9ImQiLHRyLnY9SHQoZXIsWm4pKToodHIudD0ibiIsdHIudj1VZShIdChlcixabikpKSwhMSE9PW50LmNlbGxUZXh0JiYodHIudz13LmZvcm1h''@;'; put 'put ''dCh0ci56LHRyLnYgaW5zdGFuY2VvZiBEYXRlP1VlKHRyLnYpOnRyLnYpKSxudC5jZWxsTkZ8fGRlbGV0ZSB0ci56fWVsc2UgdHIudD0icyIsdHIudj1lcjtlbHNlIHRyLnQ9Im4iLCExIT09bnQuY2VsbFRleHQmJih0ci53PWVyKSx0ci52PUV0O2lmKCJ6Ij09dHIudHx8KG50LmRlbnNlPyhD''@;'; put 'put ''dFtidF18fChDdFtidF09W10pLEN0W2J0XVtGdF09dHIpOkN0W2RpKHtjOkZ0LHI6YnR9KV09dHIpLHFuPUJlLmNoYXJDb2RlQXQoVHQ9WnQrMSksY3QuZS5jPEZ0JiYoY3QuZS5jPUZ0KSxjdC5lLnI8YnQmJihjdC5lLnI9YnQpLHVuPT1wbikrK0Z0O2Vsc2UgaWYoRnQ9MCwrK2J0LG50LnNo''@;'; put 'put ''ZWV0Um93cyYmbnQuc2hlZXRSb3dzPD1idClyZXR1cm4hMH1lOmZvcig7WnQ8QmUubGVuZ3RoOysrWnQpc3dpdGNoKHVuPUJlLmNoYXJDb2RlQXQoWnQpKXtjYXNlIDM0OjM0PT09cW4mJihLbj0hS24pO2JyZWFrO2Nhc2UgcG46Y2FzZSAxMDpjYXNlIDEzOmlmKCFLbiYma24oKSlicmVhayBl''@;'; put 'put ''fXJldHVybiBadC1UdD4wJiZrbigpLEN0WyIhcmVmIl09T28oY3QpLEN0fShCZSxHZSk6azEoZnVuY3Rpb24gUChCZSxHZSl7dmFyIG50PUdlfHx7fSxkdD1bXTtpZighQmV8fDA9PT1CZS5sZW5ndGgpcmV0dXJuIGR0O2Zvcih2YXIgQ3Q9QmUuc3BsaXQoL1tcclxuXS8pLGN0PUN0Lmxlbmd0''@;'; put 'put ''aC0xO2N0Pj0wJiYwPT09Q3RbY3RdLmxlbmd0aDspLS1jdDtmb3IodmFyIGJ0PTEwLEZ0PTAsRXQ9MDtFdDw9Y3Q7KytFdCktMT09KEZ0PUN0W0V0XS5pbmRleE9mKCIgIikpP0Z0PUN0W0V0XS5sZW5ndGg6RnQrKyxidD1NYXRoLm1heChidCxGdCk7Zm9yKEV0PTA7RXQ8PWN0OysrRXQpe2R0''@;'; put 'put ''W0V0XT1bXTt2YXIgVHQ9MDtmb3IoeShDdFtFdF0uc2xpY2UoMCxidCkudHJpbSgpLGR0LEV0LFR0LG50KSxUdD0xO1R0PD0oQ3RbRXRdLmxlbmd0aC1idCkvMTArMTsrK1R0KXkoQ3RbRXRdLnNsaWNlKGJ0KzEwKihUdC0xKSxidCsxMCpUdCkudHJpbSgpLGR0LEV0LFR0LG50KX1yZXR1cm4g''@;'; put 'put ''bnQuc2hlZXRSb3dzJiYoZHQ9ZHQuc2xpY2UoMCxudC5zaGVldFJvd3MpKSxkdH0oQmUsR2UpLEdlKX1mdW5jdGlvbiB2ZShCZSxHZSl7dmFyIG50PSIiLGR0PSJzdHJpbmciPT1HZS50eXBlP1swLDAsMCwwXTpmXyhCZSxHZSk7c3dpdGNoKEdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpudD1zZS5k''@;'; put 'put ''ZWNvZGUoQmUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6bnQ9QmU7YnJlYWs7Y2FzZSJidWZmZXIiOm50PTY1MDAxPT1HZS5jb2RlcGFnZT9CZS50b1N0cmluZygidXRmOCIpOkdlLmNvZGVwYWdlJiZ0eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoR2Uu''@;'; put 'put ''Y29kZXBhZ2UsQmUpOkJlLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpudD1QdChCZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrR2UudHlwZSl9cmV0dXJuIDIzOT09ZHRbMF0mJjE4Nz09ZHRbMV0mJjE5MT09ZHRbMl0/''@;'; put 'put ''bnQ9UGkobnQuc2xpY2UoMykpOiJiaW5hcnkiPT1HZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJkdlLmNvZGVwYWdlJiYobnQ9Y3B0YWJsZS51dGlscy5kZWNvZGUoR2UuY29kZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1OTEsbnQpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1u''@;'; put 'put ''dC5zbGljZSgwLDE5KT9PNC50b19zaGVldCgic3RyaW5nIj09R2UudHlwZT9udDpQaShudCksR2UpOl9lKG50LEdlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gU2UoQmUsR2Upe3JldHVybiBFZCh2ZShCZSxHZSksR2UpfSx0b19zaGVldDp2ZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIEhl''@;'; put 'put ''KEJlKXtmb3IodmFyIGR0LEdlPVtdLG50PU9pKEJlWyIhcmVmIl0pLEN0PUFycmF5LmlzQXJyYXkoQmUpLGN0PW50LnMucjtjdDw9bnQuZS5yOysrY3Qpe2Zvcih2YXIgYnQ9W10sRnQ9bnQucy5jO0Z0PD1udC5lLmM7KytGdCl7dmFyIEV0PWRpKHtyOmN0LGM6RnR9KTtpZigoZHQ9Q3Q/KEJl''@;'; put 'put ''W2N0XXx8W10pW0Z0XTpCZVtFdF0pJiZudWxsIT1kdC52KXtmb3IodmFyIFR0PShkdC53fHwoY3UoZHQpLGR0LncpfHwiIikuc2xpY2UoMCwxMCk7VHQubGVuZ3RoPDEwOylUdCs9IiAiO2J0LnB1c2goVHQrKDA9PT1GdD8iICI6IiIpKX1lbHNlIGJ0LnB1c2goIiAgICAgICAgICAiKX1HZS5w''@;'; put 'put ''dXNoKGJ0LmpvaW4oIiIpKX1yZXR1cm4gR2Uuam9pbigiXG4iKX19fSgpLFRtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geShBbix2cixycil7aWYoQW4pe29sKEFuLEFuLmx8fDApO2Zvcih2YXIgU249cnIuRW51bXx8UXI7QW4ubDxBbi5sZW5ndGg7KXt2YXIgcHI9QW4ucmVhZF9zaGlmdCgyKSxD''@;'; put 'put ''aT1Tbltwcl18fFNuWzY1NTM1XSxqcj1Bbi5yZWFkX3NoaWZ0KDIpLGppPUFuLmwranIsX289Q2kuZiYmQ2kuZihBbixqcixycik7aWYoQW4ubD1qaSx2cihfbyxDaSxwcikpcmV0dXJufX19ZnVuY3Rpb24gTChBbix2cil7aWYoIUFuKXJldHVybiBBbjt2YXIgcnI9dnJ8fHt9O251bGwhPXRl''@;'; put 'put ''JiZudWxsPT1yci5kZW5zZSYmKHJyLmRlbnNlPXRlKTt2YXIgU249cnIuZGVuc2U/W106e30scHI9IlNoZWV0MSIsQ2k9MCxqcj17fSxqaT1bcHJdLF9vPVtdLERpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sWW89cnIuc2hlZXRSb3dzfHwwO2lmKDI9PUFuWzJdKXJyLkVudW09UXIseShB''@;'; put 'put ''bixmdW5jdGlvbihoaSx0YSxNbil7c3dpdGNoKE1uKXtjYXNlIDA6cnIudmVycz1oaSxoaT49NDA5NiYmKHJyLnFwcm89ITApO2JyZWFrO2Nhc2UgNjpEaT1oaTticmVhaztjYXNlIDE1OmNhc2UgNTE6cnIucXByb3x8KGhpWzFdLnY9aGlbMV0udi5zbGljZSgxKSk7Y2FzZSAxMzpjYXNlIDE0''@;'; put 'put ''OmNhc2UgMTY6MTQ9PU1uJiYxMTI9PSgxMTImaGlbMl0pJiYoMTUmaGlbMl0pPjEmJigxNSZoaVsyXSk8MTUmJihoaVsxXS56PXJyLmRhdGVORnx8dy5fdGFibGVbMTRdLHJyLmNlbGxEYXRlcyYmKGhpWzFdLnQ9ImQiLGhpWzFdLnY9aHQoaGlbMV0udikpKTt2YXIgTXM9cnIuZGVuc2U/KFNu''@;'; put 'put ''W2hpWzBdLnJdfHxbXSlbaGlbMF0uY106U25bZGkoaGlbMF0pXTtpZihNcyl7TXMudD1oaVsxXS50LE1zLnY9aGlbMV0udixudWxsIT1oaVsxXS56JiYoTXMuej1oaVsxXS56KSxudWxsIT1oaVsxXS5mJiYoTXMuZj1oaVsxXS5mKTticmVha31yci5kZW5zZT8oU25baGlbMF0ucl18fChTblto''@;'; put 'put ''aVswXS5yXT1bXSksU25baGlbMF0ucl1baGlbMF0uY109aGlbMV0pOlNuW2RpKGhpWzBdKV09aGlbMV19fSxycik7ZWxzZXtpZigyNiE9QW5bMl0mJjE0IT1BblsyXSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBMT1RVUyBCT0YgIitBblsyXSk7cnIuRW51bT11ciwxND09QW5bMl0m''@;'; put 'put ''Jihyci5xcHJvPSEwLEFuLmw9MCkseShBbixmdW5jdGlvbihoaSx0YSxNbil7c3dpdGNoKE1uKXtjYXNlIDIyOmhpWzFdLnY9aGlbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihoaVszXT5DaSYmKFNuWyIhcmVmIl09T28o''@;'; put 'put ''RGkpLGpyW3ByXT1TbixTbj1yci5kZW5zZT9bXTp7fSxEaT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LGppLnB1c2gocHI9IlNoZWV0IisoKENpPWhpWzNdKSsxKSkpLFlvPjAmJmhpWzBdLnI+PVlvKWJyZWFrO3JyLmRlbnNlPyhTbltoaVswXS5yXXx8KFNuW2hpWzBdLnJdPVtdKSxTblto''@;'; put 'put ''aVswXS5yXVtoaVswXS5jXT1oaVsxXSk6U25bZGkoaGlbMF0pXT1oaVsxXSxEaS5lLmM8aGlbMF0uYyYmKERpLmUuYz1oaVswXS5jKSxEaS5lLnI8aGlbMF0uciYmKERpLmUucj1oaVswXS5yKTticmVhaztjYXNlIDI3OmhpWzE0ZTNdJiYoX29baGlbMTRlM11bMF1dPWhpWzE0ZTNdWzFdKX19''@;'; put 'put ''LHJyKX1pZihTblsiIXJlZiJdPU9vKERpKSxqcltwcl09U24sIV9vLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpqaSxTaGVldHM6anJ9O2Zvcih2YXIgbG89e30sQW89W10seG89MDt4bzxfby5sZW5ndGg7Kyt4bylqcltqaVt4b11dJiYoQW8ucHVzaChfb1t4b10pLGxvW19vW3hvXV09anJb''@;'; put 'put ''amlbeG9dXSk7cmV0dXJue1NoZWV0TmFtZXM6QW8sU2hlZXRzOmxvfX1mdW5jdGlvbiBIZShBbix2cixycil7dmFyIFNuPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIHJyLnFwcm8mJjIwNzY4IT1yci52ZXJzPyhTblswXS5jPUFuLnJlYWRfc2hpZnQoMSksQW4ubCsrLFNuWzBd''@;'; put 'put ''LnI9QW4ucmVhZF9zaGlmdCgyKSxBbi5sKz0yKTooU25bMl09QW4ucmVhZF9zaGlmdCgxKSxTblswXS5jPUFuLnJlYWRfc2hpZnQoMiksU25bMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpKSxTbn1mdW5jdGlvbiBCZShBbix2cixycil7dmFyIFNuPUFuLmwrdnIscHI9SGUoQW4sMCxycik7aWYocHJb''@;'; put 'put ''MV0udD0icyIsMjA3Njg9PXJyLnZlcnMpe0FuLmwrKzt2YXIgQ2k9QW4ucmVhZF9zaGlmdCgxKTtyZXR1cm4gcHJbMV0udj1Bbi5yZWFkX3NoaWZ0KENpLCJ1dGY4IikscHJ9cmV0dXJuIHJyLnFwcm8mJkFuLmwrKyxwclsxXS52PUFuLnJlYWRfc2hpZnQoU24tQW4ubCwiY3N0ciIpLHByfWZ1''@;'; put 'put ''bmN0aW9uIEdlKEFuLHZyLHJyKXt2YXIgU249ZnIoNytyci5sZW5ndGgpO1NuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0ZV9zaGlmdCgyLHZyKSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIHByPTA7cHI8U24ubGVuZ3RoOysrcHIpe3ZhciBD''@;'; put 'put ''aT1yci5jaGFyQ29kZUF0KHByKTtTbi53cml0ZV9zaGlmdCgxLENpPj0xMjg/OTU6Q2kpfXJldHVybiBTbi53cml0ZV9zaGlmdCgxLDApLFNufWZ1bmN0aW9uIGR0KEFuLHZyLHJyKXt2YXIgU249ZnIoNyk7cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0ZV9zaGlmdCgyLHZy''@;'; put 'put ''KSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0ZV9zaGlmdCgyLHJyLCJpIiksU259ZnVuY3Rpb24gY3QoQW4sdnIscnIpe3ZhciBTbj1mcigxMyk7cmV0dXJuIFNuLndyaXRlX3NoaWZ0KDEsMjU1KSxTbi53cml0ZV9zaGlmdCgyLHZyKSxTbi53cml0ZV9zaGlmdCgyLEFuKSxTbi53cml0''@;'; put 'put ''ZV9zaGlmdCg4LHJyLCJmIiksU259ZnVuY3Rpb24gRnQoQW4sdnIscnIpe3ZhciBTbj0zMjc2OCZ2cjtyZXR1cm4gdnI9KFNuP0FuOjApKygodnImPS0zMjc2OSk+PTgxOTI/dnItMTYzODQ6dnIpLChTbj8iIjoiJCIpKyhycj9Ocyh2cik6SHModnIpKX12YXIgVHQ9ezUxOlsiRkFMU0UiLDBd''@;'; put 'put ''LDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRBIiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2OV0sMTExOlsiVCIsMV19LFp0PVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwi''@;'; put 'put ''LyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gS24oQW4pe3ZhciB2cj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiB2clswXS5yPUFuLnJlYWRfc2hpZnQoMiksdnJbM109QW5bQW4u''@;'; put 'put ''bCsrXSx2clswXS5jPUFuW0FuLmwrK10sdnJ9ZnVuY3Rpb24gcW4oQW4sdnIscnIsU24pe3ZhciBwcj1mcig2K1NuLmxlbmd0aCk7cHIud3JpdGVfc2hpZnQoMixBbikscHIud3JpdGVfc2hpZnQoMSxycikscHIud3JpdGVfc2hpZnQoMSx2cikscHIud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZh''@;'; put 'put ''ciBDaT0wO0NpPFNuLmxlbmd0aDsrK0NpKXt2YXIganI9U24uY2hhckNvZGVBdChDaSk7cHIud3JpdGVfc2hpZnQoMSxqcj49MTI4Pzk1OmpyKX1yZXR1cm4gcHIud3JpdGVfc2hpZnQoMSwwKSxwcn1mdW5jdGlvbiBrbihBbix2cil7dmFyIHJyPUtuKEFuKSxTbj1Bbi5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LHByPUFuLnJlYWRfc2hpZnQoNCksQ2k9QW4ucmVhZF9zaGlmdCgyKTtpZig2NTUzNT09Q2kpcmV0dXJuIDA9PT1TbiYmMzIyMTIyNTQ3Mj09PXByPyhyclsxXS50PSJlIixyclsxXS52PTE1KTowPT09U24mJjM0ODk2NjA5Mjg9PT1wcj8ocnJbMV0udD0iZSIscnJbMV0udj00Mik6cnJbMV0u''@;'; put 'put ''dj0wLHJyO3ZhciBqcj0zMjc2OCZDaTtyZXR1cm4gQ2k9KDMyNzY3JkNpKS0xNjQ0NixyclsxXS52PSgxLTIqanIpKihwcipNYXRoLnBvdygyLENpKzMyKStTbipNYXRoLnBvdygyLENpKSkscnJ9ZnVuY3Rpb24gZXIoQW4sdnIscnIsU24pe3ZhciBwcj1mcigxNCk7aWYocHIud3JpdGVfc2hp''@;'; put 'put ''ZnQoMixBbikscHIud3JpdGVfc2hpZnQoMSxycikscHIud3JpdGVfc2hpZnQoMSx2ciksMD09U24pcmV0dXJuIHByLndyaXRlX3NoaWZ0KDQsMCkscHIud3JpdGVfc2hpZnQoNCwwKSxwci53cml0ZV9zaGlmdCgyLDY1NTM1KSxwcjt2YXIgQ2k9MCxqcj0wLF9vPTA7cmV0dXJuIFNuPDAmJihD''@;'; put 'put ''aT0xLFNuPS1TbiksanI9MHxNYXRoLmxvZzIoU24pLDIxNDc0ODM2NDgmKF9vPShTbi89TWF0aC5wb3coMixqci0zMSkpPj4+MCl8fCgrK2pyLF9vPShTbi89Mik+Pj4wKSxTbi09X28sX298PTIxNDc0ODM2NDgsX28+Pj49MCxTbio9TWF0aC5wb3coMiwzMikscHIud3JpdGVfc2hpZnQoNCxT''@;'; put 'put ''bj4+PjApLHByLndyaXRlX3NoaWZ0KDQsX28pLHByLndyaXRlX3NoaWZ0KDIsanIrPTE2MzgzKyhDaT8zMjc2ODowKSkscHJ9ZnVuY3Rpb24gVnIoQW4sdnIpe3ZhciBycj1LbihBbiksU249QW4ucmVhZF9zaGlmdCg4LCJmIik7cmV0dXJuIHJyWzFdLnY9U24scnJ9ZnVuY3Rpb24gTGkoQW4s''@;'; put 'put ''dnIpe3ZhciBycj1mcig1K0FuLmxlbmd0aCk7cnIud3JpdGVfc2hpZnQoMiwxNGUzKSxyci53cml0ZV9zaGlmdCgyLHZyKTtmb3IodmFyIFNuPTA7U248QW4ubGVuZ3RoOysrU24pe3ZhciBwcj1Bbi5jaGFyQ29kZUF0KFNuKTtycltyci5sKytdPXByPjEyNz85NTpwcn1yZXR1cm4gcnJbcnIu''@;'; put 'put ''bCsrXT0wLHJyfXZhciBRcj17MDp7bjoiQk9GIixmOmhsfSwxOntuOiJFT0YifSwyOntuOiJDQUxDTU9ERSJ9LDM6e246IkNBTENPUkRFUiJ9LDQ6e246IlNQTElUIn0sNTp7bjoiU1lOQyJ9LDY6e246IlJBTkdFIixmOmZ1bmN0aW9uIHZlKEFuKXt2YXIgdnI9e3M6e2M6MCxyOjB9LGU6e2M6''@;'; put 'put ''MCxyOjB9fTtyZXR1cm4gdnIucy5jPUFuLnJlYWRfc2hpZnQoMiksdnIucy5yPUFuLnJlYWRfc2hpZnQoMiksdnIuZS5jPUFuLnJlYWRfc2hpZnQoMiksdnIuZS5yPUFuLnJlYWRfc2hpZnQoMiksNjU1MzU9PXZyLnMuYyYmKHZyLnMuYz12ci5lLmM9dnIucy5yPXZyLmUucj0wKSx2cn19LDc6''@;'; put 'put ''e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDExOntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24gbnQoQW4sdnIscnIpe3ZhciBTbj1IZShBbiwwLHJyKTtyZXR1cm4gU25bMV0udj1Bbi5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIsImkiKSxTbn19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24gQ3QoQW4sdnIscnIpe3ZhciBTbj1IZShBbiwwLHJyKTtyZXR1cm4gU25bMV0udj1Bbi5yZWFkX3NoaWZ0KDgsImYiKSxTbn19LDE1OntuOiJMQUJFTCIsZjpCZX0sMTY6e246IkZPUk1VTEEiLGY6ZnVuY3Rp''@;'; put 'put ''b24gYnQoQW4sdnIscnIpe3ZhciBTbj1Bbi5sK3ZyLHByPUhlKEFuLDAscnIpO2lmKHByWzFdLnY9QW4ucmVhZF9zaGlmdCg4LCJmIikscnIucXBybylBbi5sPVNuO2Vsc2V7dmFyIENpPUFuLnJlYWRfc2hpZnQoMik7KGZ1bmN0aW9uIHBuKEFuLHZyKXtvbChBbiwwKTtmb3IodmFyIHJyPVtd''@;'; put 'put ''LFNuPTAscHI9IiIsQ2k9IiI7QW4ubDxBbi5sZW5ndGg7KXt2YXIganI9QW5bQW4ubCsrXTtzd2l0Y2goanIpe2Nhc2UgMDpyci5wdXNoKEFuLnJlYWRfc2hpZnQoOCwiZiIpKTticmVhaztjYXNlIDE6Q2k9RnQodnJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxwcj1GdCh2clswXS5yLEFu''@;'; put 'put ''LnJlYWRfc2hpZnQoMiksITEpLHJyLnB1c2goQ2krcHIpO2JyZWFrO2Nhc2UgMjp2YXIgamk9RnQodnJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxfbz1GdCh2clswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpO0NpPUZ0KHZyWzBdLmMsQW4ucmVhZF9zaGlmdCgyKSwhMCkscHI9RnQodnJb''@;'; put 'put ''MF0ucixBbi5yZWFkX3NoaWZ0KDIpLCExKSxyci5wdXNoKGppK19vKyI6IitDaStwcik7YnJlYWs7Y2FzZSAzOmlmKEFuLmw8QW4ubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBwcmVtYXR1cmUgZm9ybXVsYSBlbmQiKTticmVhaztjYXNlIDQ6cnIucHVzaCgiKCIrcnIu''@;'; put 'put ''cG9wKCkrIikiKTticmVhaztjYXNlIDU6cnIucHVzaChBbi5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBEaT0iIjtqcj1BbltBbi5sKytdOylEaSs9U3RyaW5nLmZyb21DaGFyQ29kZShqcik7cnIucHVzaCgnIicrRGkucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7''@;'; put 'put ''Y2FzZSA4OnJyLnB1c2goIi0iK3JyLnBvcCgpKTticmVhaztjYXNlIDIzOnJyLnB1c2goIisiK3JyLnBvcCgpKTticmVhaztjYXNlIDIyOnJyLnB1c2goIk5PVCgiK3JyLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnZhciBZbz1yci5wb3AoKSxsbz1yci5wb3AoKTtyci5wdXNo''@;'; put 'put ''KFsiQU5EIiwiT1IiXVtqci0yMF0rIigiK2xvKyIsIitZbysiKSIpO2JyZWFrO2RlZmF1bHQ6aWYoanI8MzImJlp0W2pyXSlZbz1yci5wb3AoKSxsbz1yci5wb3AoKSxyci5wdXNoKGxvK1p0W2pyXStZbyk7ZWxzZXtpZighVHRbanJdKXJldHVybiBqcjw9Nz9jb25zb2xlLmVycm9yKCJXSzEg''@;'; put 'put ''aW52YWxpZCBvcGNvZGUgIitqci50b1N0cmluZygxNikpOmpyPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitqci50b1N0cmluZygxNikpOmpyPD0zMD9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitqci50b1N0cmluZygxNikpOmpyPD0xMTU/Y29u''@;'; put 'put ''c29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIG9wY29kZSAiK2pyLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5lcnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIitqci50b1N0cmluZygxNikpO2lmKDY5PT0oU249VHRbanJdWzFdKSYmKFNuPUFuW0FuLmwrK10pLFNuPnJy''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK2pyLnRvU3RyaW5nKDE2KSsiOnwiK3JyLmpvaW4oInwiKSsifCIpO3ZhciBBbz1yci5zbGljZSgtU24pO3JyLmxlbmd0aC09U24scnIucHVzaChUdFtqcl1bMF0rIigiK0FvLmpvaW4o''@;'; put 'put ''IiwiKSsiKSIpfX19MT09cnIubGVuZ3RoP3ZyWzFdLmY9IiIrcnJbMF06Y29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIHwiK3JyLmpvaW4oInwiKSsifCIpfSkoQW4uc2xpY2UoQW4ubCxBbi5sK0NpKSxwciksQW4ubCs9Q2l9cmV0dXJuIHByfX0sMjQ6e246IlRBQkxFIn0s''@;'; put 'put ''MjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdFIn0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6''@;'; put 'put ''e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQifSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JX''@;'; put 'put ''MTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpCZX0sNTU6e246IlBBU1NXT1JEIn0sNTY6e246IkxPQ0tFRCJ9LDYwOntuOiJRVUVSWSJ9LDYxOntuOiJRVUVSWU5BTUUifSw2Mjp7bjoiUFJJTlQifSw2Mzp7bjoiUFJJTlROQU1FIn0sNjQ6e246IkdSQVBIMiJ9LDY1Ontu''@;'; put 'put ''OiJHUkFQSE5BTUUifSw2Njp7bjoiWk9PTSJ9LDY3OntuOiJTWU1TUExJVCJ9LDY4OntuOiJOU1JPV1MifSw2OTp7bjoiTlNDT0xTIn0sNzA6e246IlJVTEVSIn0sNzE6e246Ik5OQU1FIn0sNzI6e246IkFDT01NIn0sNzM6e246IkFNQUNSTyJ9LDc0OntuOiJQQVJTRSJ9LDEwMjp7bjoiUFJB''@;'; put 'put ''TkdFUz8/In0sMTAzOntuOiJSUkFOR0VTPz8ifSwxMDQ6e246IkZOQU1FPz8ifSwxMDU6e246Ik1SQU5HRVM/PyJ9LDY1NTM1OntuOiIifX0sdXI9ezA6e246IkJPRiJ9LDE6e246IkVPRiJ9LDI6e246IlBBU1NXT1JEIn0sMzp7bjoiQ0FMQ1NFVCJ9LDQ6e246IldJTkRPV1NFVCJ9LDU6e246''@;'; put 'put ''IlNIRUVUQ0VMTFBUUiJ9LDY6e246IlNIRUVUTEFZT1VUIn0sNzp7bjoiQ09MVU1OV0lEVEgifSw4OntuOiJISURERU5DT0xVTU4ifSw5OntuOiJVU0VSUkFOR0UifSwxMDp7bjoiU1lTVEVNUkFOR0UifSwxMTp7bjoiWkVST0ZPUkNFIn0sMTI6e246IlNPUlRLRVlESVIifSwxMzp7bjoiRklM''@;'; put 'put ''RVNFQUwifSwxNDp7bjoiREFUQUZJTExOVU1TIn0sMTU6e246IlBSSU5UTUFJTiJ9LDE2OntuOiJQUklOVFNUUklORyJ9LDE3OntuOiJHUkFQSE1BSU4ifSwxODp7bjoiR1JBUEhTVFJJTkcifSwxOTp7bjoiPz8ifSwyMDp7bjoiRVJSQ0VMTCJ9LDIxOntuOiJOQUNFTEwifSwyMjp7bjoiTEFC''@;'; put 'put ''RUwxNiIsZjpmdW5jdGlvbiB1bihBbix2cil7dmFyIHJyPUtuKEFuKTtyZXR1cm4gcnJbMV0udD0icyIscnJbMV0udj1Bbi5yZWFkX3NoaWZ0KHZyLTQsImNzdHIiKSxycn19LDIzOntuOiJOVU1CRVIxNyIsZjprbn0sMjQ6e246Ik5VTUJFUjE4IixmOmZ1bmN0aW9uIHpuKEFuLHZyKXt2YXIg''@;'; put 'put ''cnI9S24oQW4pO3JyWzFdLnY9QW4ucmVhZF9zaGlmdCgyKTt2YXIgU249cnJbMV0udj4+MTtpZigxJnJyWzFdLnYpc3dpdGNoKDcmU24pe2Nhc2UgMDpTbj01ZTMqKFNuPj4zKTticmVhaztjYXNlIDE6U249NTAwKihTbj4+Myk7YnJlYWs7Y2FzZSAyOlNuPShTbj4+MykvMjA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAzOlNuPShTbj4+MykvMjAwO2JyZWFrO2Nhc2UgNDpTbj0oU24+PjMpLzJlMzticmVhaztjYXNlIDU6U249KFNuPj4zKS8yZTQ7YnJlYWs7Y2FzZSA2OlNuPShTbj4+MykvMTY7YnJlYWs7Y2FzZSA3OlNuPShTbj4+MykvNjR9cmV0dXJuIHJyWzFdLnY9U24scnJ9fSwyNTp7bjoiRk9STVVM''@;'; put 'put ''QTE5IixmOmZ1bmN0aW9uIHRyKEFuLHZyKXt2YXIgcnI9a24oQW4pO3JldHVybiBBbi5sKz12ci0xNCxycn19LDI2OntuOiJGT1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5jdGlvbiBraShBbix2cil7Zm9yKHZhciBycj17fSxTbj1Bbi5sK3ZyO0FuLmw8U247KXt2YXIgcHI9QW4u''@;'; put 'put ''cmVhZF9zaGlmdCgyKTtpZigxNGUzPT1wcil7Zm9yKHJyW3ByXT1bMCwiIl0scnJbcHJdWzBdPUFuLnJlYWRfc2hpZnQoMik7QW5bQW4ubF07KXJyW3ByXVsxXSs9U3RyaW5nLmZyb21DaGFyQ29kZShBbltBbi5sXSksQW4ubCsrO0FuLmwrK319cmV0dXJuIHJyfX0sMjg6e246IkRUTEFCRUxN''@;'; put 'put ''SVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIFpuKEFuLHZyKXt2''@;'; put 'put ''YXIgcnI9S24oQW4pLFNuPUFuLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHJyWzFdLnY9U24+PjYscnJ9fSwzODp7bjoiPz8ifSwzOTp7bjoiTlVNQkVSMjciLGY6VnJ9LDQwOntuOiJGT1JNVUxBMjgiLGY6ZnVuY3Rpb24gb2koQW4sdnIpe3ZhciBycj1WcihBbik7cmV0dXJuIEFuLmwrPXZyLTEw''@;'; put 'put ''LHJyfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2''@;'; put 'put ''OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9''@;'; put 'put ''LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoi''@;'; put 'put ''Pz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6''@;'; put 'put ''e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0s''@;'; put 'put ''NzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9''@;'; put 'put ''LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIFEoQW4sdnIpe3ZhciBycj12cnx8e307aWYoK3JyLmNvZGVwYWdlPj0wJiZqKCty''@;'; put 'put ''ci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBTbj15YygpLHByPU9pKEFuWyIhcmVmIl0pLENpPUFycmF5LmlzQXJyYXkoQW4pLGpyPVtdO1NpKFNuLDAsZnVuY3Rpb24gcGUoQW4pe3ZhciB2''@;'; put 'put ''cj1mcigyKTtyZXR1cm4gdnIud3JpdGVfc2hpZnQoMixBbiksdnJ9KDEwMzApKSxTaShTbiw2LGZ1bmN0aW9uIFNlKEFuKXt2YXIgdnI9ZnIoOCk7cmV0dXJuIHZyLndyaXRlX3NoaWZ0KDIsQW4ucy5jKSx2ci53cml0ZV9zaGlmdCgyLEFuLnMuciksdnIud3JpdGVfc2hpZnQoMixBbi5lLmMp''@;'; put 'put ''LHZyLndyaXRlX3NoaWZ0KDIsQW4uZS5yKSx2cn0ocHIpKTtmb3IodmFyIGppPXByLnMucjtqaTw9cHIuZS5yOysramkpZm9yKHZhciBfbz1IcyhqaSksRGk9cHIucy5jO0RpPD1wci5lLmM7KytEaSl7amk9PT1wci5zLnImJihqcltEaV09TnMoRGkpKTt2YXIgbG89Q2k/KEFuW2ppXXx8W10p''@;'; put 'put ''W0RpXTpBbltqcltEaV0rX29dO2xvJiYieiIhPWxvLnQmJigibiI9PWxvLnQ/KDB8bG8udik9PWxvLnYmJmxvLnY+PS0zMjc2OCYmbG8udjw9MzI3Njc/U2koU24sMTMsZHQoamksRGksbG8udikpOlNpKFNuLDE0LGN0KGppLERpLGxvLnYpKTpTaShTbiwxNSxHZShqaSxEaSxjdShsbykuc2xp''@;'; put 'put ''Y2UoMCwyMzkpKSkpfXJldHVybiBTaShTbiwxKSxTbi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gcmUoQW4sdnIpe3ZhciBycj12cnx8e307aWYoK3JyLmNvZGVwYWdlPj0wJiZqKCtyci5jb2RlcGFnZSksInN0cmluZyI9PXJyLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3Jp''@;'; put 'put ''dGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBTbj15YygpO1NpKFNuLDAsZnVuY3Rpb24gX2UoQW4pe3ZhciB2cj1mcigyNik7dnIud3JpdGVfc2hpZnQoMiw0MDk2KSx2ci53cml0ZV9zaGlmdCgyLDQpLHZyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBycj0wLFNuPTAscHI9MCxDaT0wO0Np''@;'; put 'put ''PEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrQ2kpe3ZhciBqaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1tDaV1dO2lmKGppJiZqaVsiIXJlZiJdKXsrK3ByO3ZhciBfbz1XcyhqaVsiIXJlZiJdKTtycjxfby5lLnImJihycj1fby5lLnIpLFNuPF9vLmUuYyYmKFNuPV9vLmUuYyl9fXJldHVybiB2''@;'; put 'put ''ci53cml0ZV9zaGlmdCgyLHJyKSx2ci53cml0ZV9zaGlmdCgxLHByKSx2ci53cml0ZV9zaGlmdCgxLFNuKSx2ci53cml0ZV9zaGlmdCgyLDApLHZyLndyaXRlX3NoaWZ0KDIsMCksdnIud3JpdGVfc2hpZnQoMSwxKSx2ci53cml0ZV9zaGlmdCgxLDIpLHZyLndyaXRlX3NoaWZ0KDQsMCksdnIu''@;'; put 'put ''d3JpdGVfc2hpZnQoNCwwKSx2cn0oQW4pKTtmb3IodmFyIHByPTAsQ2k9MDtwcjxBbi5TaGVldE5hbWVzLmxlbmd0aDsrK3ByKShBbi5TaGVldHNbQW4uU2hlZXROYW1lc1twcl1dfHx7fSlbIiFyZWYiXSYmU2koU24sMjcsTGkoQW4uU2hlZXROYW1lc1twcl0sQ2krKykpO3ZhciBqcj0wO2Zv''@;'; put 'put ''cihwcj0wO3ByPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrcHIpe3ZhciBqaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1twcl1dO2lmKGppJiZqaVsiIXJlZiJdKXtmb3IodmFyIF9vPU9pKGppWyIhcmVmIl0pLERpPUFycmF5LmlzQXJyYXkoamkpLFlvPVtdLGxvPV9vLnMucjtsbzw9X28uZS5y''@;'; put 'put ''OysrbG8pZm9yKHZhciBBbz1IcyhsbykseG89X28ucy5jO3hvPD1fby5lLmM7Kyt4byl7bG89PT1fby5zLnImJihZb1t4b109TnMoeG8pKTt2YXIgdGE9RGk/KGppW2xvXXx8W10pW3hvXTpqaVtZb1t4b10rQW9dO3RhJiYieiIhPXRhLnQmJigibiI9PXRhLnQ/U2koU24sMjMsZXIobG8seG8s''@;'; put 'put ''anIsdGEudikpOlNpKFNuLDIyLHFuKGxvLHhvLGpyLGN1KHRhKS5zbGljZSgwLDIzOSkpKSl9Kytqcn19cmV0dXJuIFNpKFNuLDEpLFNuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBQKEFuLHZyKXtzd2l0Y2godnIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBMKEQoc2UuZGVjb2Rl''@;'; put 'put ''KEFuKSksdnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTChEKEFuKSx2cik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBMKEFuLHZyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrdnIudHlwZX19fSgpLERtPWZ1bmN0aW9uKCl7dmFyIHk9dWwoInQiKSxQPXVsKCJyUHIiKTtmdW5j''@;'; put 'put ''dGlvbiBMKHBlKXt2YXIgX2U9cGUubWF0Y2goeSk7aWYoIV9lKXJldHVybnt0OiJzIix2OiIifTt2YXIgdmU9e3Q6InMiLHY6eHIoX2VbMV0pfSxTZT1wZS5tYXRjaChQKTtyZXR1cm4gU2UmJih2ZS5zPWZ1bmN0aW9uIEp3KHkpe3ZhciBQPXt9LEw9eS5tYXRjaCgkdCksUT0wLHJlPSExO2lm''@;'; put 'put ''KEwpZm9yKDtRIT1MLmxlbmd0aDsrK1Epe3ZhciBwZT1sbihMW1FdKTtzd2l0Y2gocGVbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighcGUudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNo''@;'; put 'put ''YWRvdy8+IjpQLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXBlLnZhbClicmVhaztQLmNwPUlbcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIXBlLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6''@;'; put 'put ''Y2FzZSI8b3V0bGluZS8+IjpQLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpQLm5hbWU9cGUudmFsO2JyZWFrO2Nhc2UiPHN6IjpQLnN6PXBlLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFwZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6''@;'; put 'put ''Y2FzZSI8c3RyaWtlLz4iOlAuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFwZS52YWwpYnJlYWs7c3dpdGNoKHBlLnZhbCl7Y2FzZSJkb3VibGUiOlAudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpQLnVuZGVybGluZT0z''@;'; put 'put ''MzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlAudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOlAudW5kZXJsaW5lfHwoUC51bmRlcmxpbmU9MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PXBlLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8''@;'; put 'put ''Yi8+IjpQLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09cGUudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOlAuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6cGUucmdiJiYoUC5jb2xvcj17cmdiOjg9PXBlLnJn''@;'; put 'put ''Yi5sZW5ndGg/cGUucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK3BlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpQLmZhbWlseT1wZS52YWw7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihQLnZhbGlnbj1wZS52YWwucmVwbGFj''@;'; put 'put ''ZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpyZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cmU9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PXBlWzBdLmNoYXJDb2Rl''@;'; put 'put ''QXQoMSkmJiFyZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK3BlWzBdKX19cmV0dXJuIFB9KFNlWzFdKSksdmV9dmFyIFE9LzwoPzpcdys6KT9yPi9nLHJlPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UucmVwbGFjZShR''@;'; put 'put ''LCIiKS5zcGxpdChyZSkubWFwKEwpLmZpbHRlcihmdW5jdGlvbih2ZSl7cmV0dXJuIHZlLnZ9KX19KCksajE9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LGs5PWZ1bmN0aW9uKCl7dmFyIFA9LyhcclxufFxuKS9n''@;'; put 'put ''O2Z1bmN0aW9uIFEocmUpe3ZhciBwZT1bW10scmUudixbXV07cmV0dXJuIHJlLnY/KHJlLnMmJmZ1bmN0aW9uIEwocmUscGUsX2Upe3ZhciB2ZT1bXTtyZS51bmRlcmxpbmUmJnZlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLHJlLnVuZGVybGluZT4xJiZ2ZS5wdXNoKCJ0''@;'; put 'put ''ZXh0LXVuZGVybGluZS1zdHlsZToiK2oxW3JlLnVuZGVybGluZV0rIjsiKSxyZS5zeiYmdmUucHVzaCgiZm9udC1zaXplOiIrcmUuc3orInB0OyIpLHJlLm91dGxpbmUmJnZlLnB1c2goInRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLHJlLnNoYWRvdyYmdmUucHVzaCgidGV4dC1zaGFkb3c6IGF1''@;'; put 'put ''dG87IikscmUuY29sb3ImJnJlLmNvbG9yLnJnYiYmdmUucHVzaCgiY29sb3I6ICMiK091KHJlLmNvbG9yLnJnYikrIjsiKSxwZS5wdXNoKCc8c3BhbiBzdHlsZT0iJyt2ZS5qb2luKCIiKSsnIj4nKSxyZS5ib2xkJiYocGUucHVzaCgiPGI+IiksX2UucHVzaCgiPC9iPiIpKSxyZS5pdGFsaWMm''@;'; put 'put ''JihwZS5wdXNoKCI8aT4iKSxfZS5wdXNoKCI8L2k+IikpLHJlLnN0cmlrZSYmKHBlLnB1c2goIjxzPiIpLF9lLnB1c2goIjwvcz4iKSk7dmFyIFNlPXJlLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09U2V8fCJzdXBlciI9PVNlP1NlPSJzdXAiOiJzdWJzY3JpcHQiPT1TZSYmKFNlPSJzdWIi''@;'; put 'put ''KSwiIiE9U2UmJihwZS5wdXNoKCI8IitTZSsiPiIpLF9lLnB1c2goIjwvIitTZSsiPiIpKSxfZS5wdXNoKCI8L3NwYW4+Iil9KHJlLnMscGVbMF0scGVbMl0pLHBlWzBdLmpvaW4oIiIpK3BlWzFdLnJlcGxhY2UoUCwiPGJyLz4iKStwZVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KHBlKXtyZXR1cm4gcGUubWFwKFEpLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBKaCh5KXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oTCl7cmV0dXJuIGZ1bmN0aW9uIEltKHkpe3ZhciBQPSIiLEw9W107cmV0dXJuIHkucyYmKHkucy5ib2xkJiZMLnB1c2goIjxiLz4iKSx5LnMuaXRhbGljJiZMLnB1''@;'; put 'put ''c2goIjxpLz4iKSx5LnMuc3RyaWtlJiZMLnB1c2goIjxzdHJpa2UvPiIpLHkucy51bmRlcmxpbmUmJkwucHVzaCgnPHUgdmFsPSInKyhqbVt5LnMudW5kZXJsaW5lXXx8InNpbmdsZSIpKyciLz4nKSx5LnMuY29sb3ImJkwucHVzaChVZCh5LnMuY29sb3IpKSx5LnMuc3omJkwucHVzaCgnPHN6''@;'; put 'put ''IHZhbD0iJyt5LnMuc3orJyIvPicpLHkucy5uYW1lJiZMLnB1c2goJzxyRm9udCB2YWw9IicreS5zLm5hbWUrJyIvPicpLCgic3VwZXIiPT15LnMudmFsaWdufHwic3ViIj09eS5zLnZhbGlnbikmJkwucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicreS5zLnZhbGlnbisnc2NyaXB0Ii8+JykpLEwu''@;'; put 'put ''bGVuZ3RoJiYoUCs9IjxyUHI+IitMLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoUCs9U3IoInQiLEhyKHkudiksbnVsbCkpKyI8L3I+In0oTCl9KS5qb2luKCIiKX12YXIgUXc9LzwoPzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2csQTk9LzwoPzpcdys6KT9yXGJbXj5d''@;'; put 'put ''Kj4vLFQ5PS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gRDkoeSxQKXt2YXIgTD0hUHx8UC5jZWxsSFRNTCxRPXt9O3JldHVybiB5Pyh5Lm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oUS50PXhyKFBpKHkuc2xpY2UoeS5pbmRl''@;'; put 'put ''eE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksUS5yPVBpKHkpLEwmJihRLmg9cm8oUS50KSkpOnkubWF0Y2goQTkpJiYoUS5yPVBpKHkpLFEudD14cihQaSgoeS5yZXBsYWNlKFQ5LCIiKS5tYXRjaChRdyl8fFtdKS5qb2luKCIiKS5yZXBsYWNlKCR0LCIiKSkp''@;'; put 'put ''LFEuUj1EbShRLnIpLEwmJihRLmg9azkoUS5SKSkpLFEpOnt0OiIifX12YXIgZUM9LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLHRDPS88KD86XHcrOik/KD86c2l8c3N0SXRlbSk+L2csbkM9LzxcLyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87SGku''@;'; put 'put ''U1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiO3ZhciBsRD0vXlxzfFxzJHxbXHRcblxyXS87ZnVuY3Rpb24gTG0oeSxQKXtpZighUC5ib29rU1NUKXJldHVybiIiO3ZhciBMPVtCbl07''@;'; put 'put ''TFtMLmxlbmd0aF09U3IoInNzdCIsbnVsbCx7eG1sbnM6aXMubWFpblswXSxjb3VudDp5LkNvdW50LHVuaXF1ZUNvdW50OnkuVW5pcXVlfSk7Zm9yKHZhciBRPTA7USE9eS5sZW5ndGg7KytRKWlmKG51bGwhPXlbUV0pe3ZhciByZT15W1FdLHBlPSI8c2k+IjtyZS5yP3BlKz1yZS5yOihwZSs9''@;'; put 'put ''Ijx0IixyZS50fHwocmUudD0iIikscmUudC5tYXRjaChsRCkmJihwZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLHBlKz0iPiIrSHIocmUudCkrIjwvdD4iKSxMW0wubGVuZ3RoXT1wZSs9Ijwvc2k+In1yZXR1cm4gTC5sZW5ndGg+MiYmKExbTC5sZW5ndGhdPSI8L3NzdD4iLExbMV09TFsx''@;'; put 'put ''XS5yZXBsYWNlKCIvPiIsIj4iKSksTC5qb2luKCIiKX12YXIgb0M9ZnVuY3Rpb24gQTEoeSxQLEwpe3ZhciBRPTEzKzQqeS50Lmxlbmd0aCxyZT15LlImJnkuUi5sZW5ndGh8fHkucjt5LnImJih5LlI9RG0oeS5yKSkscmUmJihRKz00KzQqeS5SLmxlbmd0aCk7dmFyIHBlPSExO2lmKG51bGw9''@;'; put 'put ''PUwmJihwZT0hMCxMPWZyKFEpKSxMLndyaXRlX3NoaWZ0KDEscmU/MTowKSxuYyh5LnQsTCkscmUpe0wud3JpdGVfc2hpZnQoNCx5LlIubGVuZ3RoKTtmb3IodmFyIF9lPTAsdmU9MDt2ZTx5LlIubGVuZ3RoOysrdmUpe3ZhciBTZT15LlJbdmVdO0wud3JpdGVfc2hpZnQoMixfZSksX2UrPShT''@;'; put 'put ''ZS52fHwiIikubGVuZ3RoO3ZhciBIZT1TZS5zP2d1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6U2Uuc30sUCk6MDtMLndyaXRlX3NoaWZ0KDIsUC5jZWxsWGZzW0hlXS5mb250SWQpfX1yZXR1cm4gcGU/TC5zbGljZSgwLEwubCk6TH07ZnVuY3Rpb24geDMoeSxQKXt2''@;'; put 'put ''YXIgTD15YygpO3VpKEwsIkJydEJlZ2luU3N0IixmdW5jdGlvbiBpQyh5LFApe3JldHVybiBQfHwoUD1mcig4KSksUC53cml0ZV9zaGlmdCg0LHkuQ291bnQpLFAud3JpdGVfc2hpZnQoNCx5LlVuaXF1ZSksUH0oeSkpO2Zvcih2YXIgUT0wO1E8eS5sZW5ndGg7KytRKXVpKEwsIkJydFNTVEl0''@;'; put 'put ''ZW0iLG9DKHlbUV0sUCkpO3JldHVybiB1aShMLCJCcnRFbmRTc3QiKSxMLmVuZCgpfWZ1bmN0aW9uIHhhKHkpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoUix5KTtmb3IodmFyIFA9W10sTD15LnNwbGl0KCIiKSxRPTA7UTxMLmxlbmd0aDsrK1Ep''@;'; put 'put ''UFtRXT1MW1FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFB9ZnVuY3Rpb24gRzAoeSxQKXt2YXIgTD17fTtyZXR1cm4gTC5NYWpvcj15LnJlYWRfc2hpZnQoMiksTC5NaW5vcj15LnJlYWRfc2hpZnQoMiksUD49NCYmKHkubCs9UC00KSxMfWZ1bmN0aW9uIHNDKHkpe2Zvcih2YXIgUD15LnJlYWRf''@;'; put 'put ''c2hpZnQoNCksTD15LmwrUC00LFE9e30scmU9eS5yZWFkX3NoaWZ0KDQpLHBlPVtdO3JlLS0gPjA7KXBlLnB1c2goe3Q6eS5yZWFkX3NoaWZ0KDQpLHY6eS5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKFEubmFtZT15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFEuY29tcHM9cGUseS5sIT1MKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK3kubCsiICE9ICIrTCk7cmV0dXJuIFF9ZnVuY3Rpb24gSTkoeSxQKXt2YXIgTD15LmwrUCxRPXt9O1EuRmxhZ3M9NjMmeS5yZWFkX3NoaWZ0KDQpLHkubCs9NCxRLkFsZ0lEPXkucmVhZF9zaGlmdCg0KTt2YXIgcmU9ITE7''@;'; put 'put ''c3dpdGNoKFEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OnJlPTM2PT1RLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6cmU9ND09KDUyJlEuRmxhZ3MpO2JyZWFrO2Nhc2UgMDpyZT0xNj09US5GbGFnc3x8ND09US5GbGFnc3x8MzY9PVEuRmxhZ3M7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrUS5BbGdJRH1pZighcmUpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIFEuQWxnSURIYXNoPXkucmVhZF9zaGlmdCg0KSxRLktleVNpemU9eS5yZWFkX3No''@;'; put 'put ''aWZ0KDQpLFEuUHJvdmlkZXJUeXBlPXkucmVhZF9zaGlmdCg0KSx5LmwrPTgsUS5DU1BOYW1lPXkucmVhZF9zaGlmdChMLXkubD4+MSwidXRmMTZsZSIpLHkubD1MLFF9ZnVuY3Rpb24gUm0oeSxQKXt2YXIgTD17fSxRPXkubCtQO3JldHVybiB5LmwrPTQsTC5TYWx0PXkuc2xpY2UoeS5sLHku''@;'; put 'put ''bCsxNikseS5sKz0xNixMLlZlcmlmaWVyPXkuc2xpY2UoeS5sLHkubCsxNikseS5sKz0xNix5LnJlYWRfc2hpZnQoNCksTC5WZXJpZmllckhhc2g9eS5zbGljZSh5LmwsUSkseS5sPVEsTH1mdW5jdGlvbiBnWih5KXtpZigzNiE9KDYzJnkucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciBMPXkucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOkk5KHksTCksdjpSbSh5LHkubGVuZ3RoLXkubCl9fWZ1bmN0aW9uIGhEKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYg''@;'; put 'put ''RXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIG1aKHkpe3ZhciBQPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTt5LmwrPTQ7dmFyIEw9eS5yZWFkX3No''@;'; put 'put ''aWZ0KHkubGVuZ3RoLXkubCwidXRmOCIpLFE9e307cmV0dXJuIEwucmVwbGFjZSgkdCxmdW5jdGlvbihwZSl7dmFyIF9lPWxuKHBlKTtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3Jz''@;'; put 'put ''PiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOlAuZm9yRWFjaChmdW5jdGlvbih2ZSl7UVt2ZV09X2VbdmVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVncml0eSI6US5lbmNyeXB0ZWRIbWFjS2V5PV9lLmVuY3J5cHRlZEhtYWNLZXksUS5lbmNyeXB0ZWRIbWFj''@;'; put 'put ''VmFsdWU9X2UuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpRLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9yIjpRLnVyaT1fZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpRLmVuY3MucHVzaChf''@;'; put 'put ''ZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBfZVswXX19KSxRfWZ1bmN0aW9uIGFDKHkpe3ZhciBMLHBlLFA9MCxRPXhhKHkpLHJlPVEubGVuZ3RoKzE7Zm9yKChMPUcocmUpKVswXT1RLmxlbmd0aCxwZT0xO3BlIT1yZTsrK3BlKUxbcGVdPVFbcGUtMV07Zm9yKHBlPXJlLTE7cGU+PTA7LS1wZSlQ''@;'; put 'put ''PSgoMTYzODQmUD8xOjApfFA8PDEmMzI3NjcpXkxbcGVdO3JldHVybiA1MjgxMV5QfXZhciBmRD1mdW5jdGlvbigpe3ZhciB5PVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLFA9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYx''@;'; put 'put ''OTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLEw9WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEy''@;'; put 'put ''LDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0''@;'; put 'put ''MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0''@;'; put 'put ''NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLHJl''@;'; put 'put ''PWZ1bmN0aW9uKF9lLHZlKXtyZXR1cm4gZnVuY3Rpb24oX2Upe3JldHVybiAyNTUmKF9lPj4xfF9lPDw3KX0oX2VedmUpfTtyZXR1cm4gZnVuY3Rpb24odmUpe2Zvcih2YXIgU2U9eGEodmUpLEhlPWZ1bmN0aW9uKF9lKXtmb3IodmFyIHZlPVBbX2UubGVuZ3RoLTFdLFNlPTEwNCxIZT1fZS5s''@;'; put 'put ''ZW5ndGgtMTtIZT49MDstLUhlKWZvcih2YXIgQmU9X2VbSGVdLEdlPTA7NyE9R2U7KytHZSk2NCZCZSYmKHZlXj1MW1NlXSksQmUqPTIsLS1TZTtyZXR1cm4gdmV9KFNlKSxCZT1TZS5sZW5ndGgsR2U9RygxNiksbnQ9MDsxNiE9bnQ7KytudClHZVtudF09MDt2YXIgY3Q7Zm9yKDE9PSgxJkJl''@;'; put 'put ''KSYmKEdlW0JlXT1yZSh5WzBdLEhlPj44KSxHZVstLUJlXT1yZShTZVtTZS5sZW5ndGgtMV0sMjU1JkhlKSk7QmU+MDspR2VbLS1CZV09cmUoU2VbQmVdLEhlPj44KSxHZVstLUJlXT1yZShTZVtCZV0sMjU1JkhlKTtmb3IoQmU9MTUsY3Q9MTUtU2UubGVuZ3RoO2N0PjA7KUdlW0JlXT1yZSh5''@;'; put 'put ''W2N0XSxIZT4+OCksLS1jdCxHZVstLUJlXT1yZShTZVtCZV0sMjU1JkhlKSwtLUJlLC0tY3Q7cmV0dXJuIEdlfX0oKTt2YXIgT209ZnVuY3Rpb24oKXtmdW5jdGlvbiB5KHJlLHBlKXtzd2l0Y2gocGUudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBQKHNlLmRlY29kZShyZSkscGUpO2Nhc2Ui''@;'; put 'put ''YmluYXJ5IjpyZXR1cm4gUChyZSxwZSk7Y2FzZSJidWZmZXIiOnJldHVybiBQKHJlLnRvU3RyaW5nKCJiaW5hcnkiKSxwZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFAoUHQocmUpLHBlKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcGUudHlwZSl9ZnVuY3Rpb24gUChyZSxw''@;'; put 'put ''ZSl7dmFyIHZlPShwZXx8e30pLmRlbnNlP1tdOnt9O2lmKCFyZS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigiUlRGIG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gdmVbIiFyZWYiXT1Pbyh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSx2ZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVu''@;'; put 'put ''Y3Rpb24gTChyZSxwZSl7cmV0dXJuIEVkKHkocmUscGUpLHBlKX0sdG9fc2hlZXQ6eSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFEocmUpe2Zvcih2YXIgdmUscGU9WyJ7XFxydGYxXFxhbnNpIl0sX2U9T2kocmVbIiFyZWYiXSksU2U9QXJyYXkuaXNBcnJheShyZSksSGU9X2Uucy5yO0hlPD1fZS5l''@;'; put 'put ''LnI7KytIZSl7cGUucHVzaCgiXFx0cm93ZFxcdHJhdXRvZml0MSIpO2Zvcih2YXIgQmU9X2Uucy5jO0JlPD1fZS5lLmM7KytCZSlwZS5wdXNoKCJcXGNlbGx4IisoQmUrMSkpO2ZvcihwZS5wdXNoKCJcXHBhcmRcXGludGJsIiksQmU9X2Uucy5jO0JlPD1fZS5lLmM7KytCZSl7dmFyIEdlPWRp''@;'; put 'put ''KHtyOkhlLGM6QmV9KTsodmU9U2U/KHJlW0hlXXx8W10pW0JlXTpyZVtHZV0pJiYobnVsbCE9dmUudnx8dmUuZiYmIXZlLkYpJiYocGUucHVzaCgiICIrKHZlLnd8fChjdSh2ZSksdmUudykpKSxwZS5wdXNoKCJcXGNlbGwiKSl9cGUucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0dXJu''@;'; put 'put ''IHBlLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGVmKHkpe3ZhciBQPXkuc2xpY2UoIiMiPT09eVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KFAuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoUC5zbGljZSgyLDQpLDE2KSxwYXJzZUludChQLnNsaWNlKDQsNiksMTYpXX1m''@;'; put 'put ''dW5jdGlvbiB6MSh5KXtmb3IodmFyIFA9MCxMPTE7MyE9UDsrK1ApTD0yNTYqTCsoeVtQXT4yNTU/MjU1OnlbUF08MD8wOnlbUF0pO3JldHVybiBMLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uICQwKHksUCl7aWYobnVsbD09eSlyZXR1cm4gbnVsbCE9UDtp''@;'; put 'put ''ZihudWxsPT1QKXJldHVybiEwO2lmKDE9PXkuYXV0byYmMT09UC5hdXRvKXJldHVybiExO2lmKCEheS5hdXRvIT0hIVAuYXV0b3x8bnVsbD09eS50aGVtZSE9KG51bGw9PVAudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPXkudGhlbWUpcmV0dXJuIHkudGhlbWUhPVAudGhlbWV8fHkudGludCE9''@;'; put 'put ''UC50aW50O2lmKG51bGw9PXkucmdiJiZudWxsPT1QLnJnYilyZXR1cm4hMTt2YXIgTD15LnJnYjsibnVtYmVyIj09dHlwZW9mIEwmJihMPUwudG9TdHJpbmcoMTYpKSxMPUwuc2xpY2UoLTYpO3ZhciBRPVAucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgUSYmKFE9US50b1N0cmluZygxNikp''@;'; put 'put ''LFE9US5zbGljZSgtNiksTC50b0xvd2VyQ2FzZSgpIT1RLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gUG0oeSxQKXtyZXR1cm4gbnVsbD09eT9udWxsIT1QOm51bGw9PVA/bnVsbCE9eTp5LnN0eWxlIT1QLnN0eWxlfHwkMCh5LmNvbG9yLFAuY29sb3IpfWZ1bmN0aW9uIEJkKHksUCl7aWYoMD09''@;'; put 'put ''PVApcmV0dXJuIHk7dmFyIEw9ZnVuY3Rpb24gcDAoeSl7dmFyIFA9eVswXS8yNTUsTD15WzFdLzI1NSxRPXlbMl0vMjU1LHJlPU1hdGgubWF4KFAsTCxRKSxwZT1NYXRoLm1pbihQLEwsUSksX2U9cmUtcGU7aWYoMD09PV9lKXJldHVyblswLDAsUF07dmFyIFNlLHZlPTAsSGU9cmUrcGU7c3dp''@;'; put 'put ''dGNoKFNlPV9lLyhIZT4xPzItSGU6SGUpLHJlKXtjYXNlIFA6dmU9KChMLVEpL19lKzYpJTY7YnJlYWs7Y2FzZSBMOnZlPShRLVApL19lKzI7YnJlYWs7Y2FzZSBROnZlPShQLUwpL19lKzR9cmV0dXJuW3ZlLzYsU2UsSGUvMl19KGVmKHkpKTtyZXR1cm4gTFsyXT1QPDA/TFsyXSooMStQKTox''@;'; put 'put ''LSgxLUxbMl0pKigxLVApLHoxKGZ1bmN0aW9uIEY0KHkpe3ZhciBTZSxMPXlbMV0sUT15WzJdLHJlPTIqTCooUTwuNT9ROjEtUSkscGU9US1yZS8yLF9lPVtwZSxwZSxwZV0sdmU9Nip5WzBdO2lmKDAhPT1MKXN3aXRjaCgwfHZlKXtjYXNlIDA6Y2FzZSA2OlNlPXJlKnZlLF9lWzBdKz1yZSxf''@;'; put 'put ''ZVsxXSs9U2U7YnJlYWs7Y2FzZSAxOl9lWzBdKz1TZT1yZSooMi12ZSksX2VbMV0rPXJlO2JyZWFrO2Nhc2UgMjpTZT1yZSoodmUtMiksX2VbMV0rPXJlLF9lWzJdKz1TZTticmVhaztjYXNlIDM6X2VbMV0rPVNlPXJlKig0LXZlKSxfZVsyXSs9cmU7YnJlYWs7Y2FzZSA0OlNlPXJlKih2ZS00''@;'; put 'put ''KSxfZVsyXSs9cmUsX2VbMF0rPVNlO2JyZWFrO2Nhc2UgNTpfZVsyXSs9U2U9cmUqKDYtdmUpLF9lWzBdKz1yZX1mb3IodmFyIEhlPTA7MyE9SGU7KytIZSlfZVtIZV09TWF0aC5yb3VuZCgyNTUqX2VbSGVdKTtyZXR1cm4gX2V9KEwpKX12YXIgbEM9NixwbD1sQztmdW5jdGlvbiBNYyh5KXty''@;'; put 'put ''ZXR1cm4gTWF0aC5mbG9vcigoeStNYXRoLnJvdW5kKDEyOC9wbCkvMjU2KSpwbCl9ZnVuY3Rpb24gdGYoeSl7cmV0dXJuIE1hdGguZmxvb3IoKHktNSkvcGwqMTAwKy41KS8xMDB9ZnVuY3Rpb24gamQoeSl7cmV0dXJuIE1hdGgucm91bmQoKHkqcGwrNSkvcGwqMjU2KS8yNTZ9ZnVuY3Rpb24g''@;'; put 'put ''cHUoeSl7eS5iZXN0Rml0JiZkZWxldGUgeS5iZXN0Rml0LHkud2lkdGg/KHkud3B4PU1jKHkud2lkdGgpLHkud2NoPXRmKHkud3B4KSx5Lk1EVz1wbCk6eS53cHg/KHkud2NoPXRmKHkud3B4KSx5LndpZHRoPWpkKHkud2NoKSx5Lk1EVz1wbCk6Im51bWJlciI9PXR5cGVvZiB5LndjaCYmKHku''@;'; put 'put ''d2lkdGg9amQoeS53Y2gpLHkud3B4PU1jKHkud2lkdGgpLHkuTURXPXBsKSx5LmN1c3RvbVdpZHRoJiZkZWxldGUgeS5jdXN0b21XaWR0aH12YXIgTDk9OTYsbmY9TDk7ZnVuY3Rpb24gajIoeSl7cmV0dXJuIDcyKnkvbmZ9ZnVuY3Rpb24gVTEoeSl7cmV0dXJuIHkqbmYvNzJ9ZnVuY3Rpb24g''@;'; put 'put ''Rm0oeSl7bmY9eT17b3N4OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVt5XXx8eXx8TDksTm09ZzBbeV19ZnVuY3Rpb24gSTMoeSl7eS5ocHg/eS5ocHQ9ajIoeS5ocHgpOnkuaHB0JiYoeS5ocHg9VTEoeS5ocHQpKX12YXIgSDQ9e05vbmU6Im5vbmUiLFNvbGlk''@;'; put 'put ''OiJzb2xpZCIsR3JheTUwOiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJr''@;'; put 'put ''VXAiLERpYWdDcm9zczoiZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3Nz''@;'; put 'put ''OiJsaWdodEdyaWQifSxfRD1iZShINCksejI9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2''@;'; put 'put ''ZTo4NDIxMzc2LGdyYXk6ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIE40KHksUCl7aWYoeS5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQo''@;'; put 'put ''eS5yZXBsYWNlKCIjIiwiIiksMTYpO2lmKHoyW3ldKXJldHVybiB6Mlt5XTt2YXIgTD15Lm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihMKXJldHVybigrTFsxXTw8MTYpKygrTFsyXTw8OCkrICtMWzNdO2lmKEw9eS5tYXRjaCgvcmdiYVwo''@;'; put 'put ''XHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oTFs0XSYmTFs0XS5sZW5ndGg+MCYmK0xbNF18fDApfHwrTFsxXT4wfHwrTFsyXT4wfHwrTFszXT4wPygrTFsxXTw8MTYpKygrTFsyXTw8OCkrICtMWzNdOlA/LTE6MTY3NzcyMTU7dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJVbmtub3duIEhUTUwgY29sb3IgIit5KX12YXIgZzA9e307ZnVuY3Rpb24gSG0oeSl7eT15fHw5Njt2YXIgUD17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50''@;'; put 'put ''dXJ5IEdvdGhpYyI6W119O3JldHVybiBQLkNhbGlicmlbMTFdPTcsUC5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W3ldfHw4LFAuQ2FsaWJyaVsxM109MTAsUC5DYWxpYnJpWzE0XT0xMSxQLkNhbGlicmlbMTZdPTEyLFAuQ2FsaWJyaVsxOF09MTQsUC5DYWxpYnJpWzIw''@;'; put 'put ''XT0xNixQLlx1NWI4Ylx1NGY1M1sxMV09OCxQLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxQWyJTcGFya2Fzc2UgUmciXVsxMV09NyxQLkFyaWFsWzEwXT03LFBbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUH1nMFs3Ml09SG0oNzIpLGcwWzk2XT1IbSg5NiksZzBbMTIw''@;'; put 'put ''XT1IbSgxMjApLGcwWzE0NF09SG0oMTQ0KTt2YXIgTm09ZzBbOTZdO2Z1bmN0aW9uIFZtKHkpe3JldHVybihObVt5Lm5hbWV8fHkuRm9udE5hbWVdfHxbXSlbeS5zenx8eS5TaXplXX1mdW5jdGlvbiBaMSh5KXtpZih5KXt2YXIgUD1WbSh5KTtpZihQKXJldHVybiBwbD1QfXJldHVybiBwbD02''@;'; put 'put ''fWZ1bmN0aW9uIFI5KHksUCxMKXtyZXR1cm4gejEoZnVuY3Rpb24gdUMoeSxQLEwpe3JldHVybltNYXRoLnJvdW5kKFBbMF0qTCt5WzBdKigxLUwpKSxNYXRoLnJvdW5kKFBbMV0qTCt5WzFdKigxLUwpKSxNYXRoLnJvdW5kKFBbMl0qTCt5WzJdKigxLUwpKV19KGVmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgeS5yZ2I/KCIwMDAwMCIreS50b1N0cmluZygxNikpLnNsaWNlKC02KTp5LnJnYiksZWYoIm51bWJlciI9PXR5cGVvZiBQLnJnYj8oIjAwMDAwIitQLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlAucmdiKSxMKSl9ZnVuY3Rpb24gQm0oeSxQLEwpe2lmKEwpc3dpdGNoKCt5KXtjYXNlIDY0''@;'; put 'put ''Onk9NjU7YnJlYWs7Y2FzZSA2NTp5PTY0fXZhciBRPVAmJlBbK3ldfHxDclsreV18fE5hWyt5LTIwMF07aWYoODE9PSt5JiYoUT1DclsxXSksUXx8KFE9Q3JbMV0pLCFRKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK3kpO3JldHVybiB6MShRKX1mdW5jdGlvbiBVMih5LFAsTCl7''@;'; put 'put ''dmFyIFE9e307cmV0dXJuIG51bGwhPXkuaW5kZXhlZCYmKFEuaW5kZXg9cGFyc2VJbnQoeS5pbmRleGVkLDEwKSxRLnJnYj1CbShRLmluZGV4LFAuSW5kZXhlZCkpLG51bGwhPXkudGhlbWUmJihRLnRoZW1lPXBhcnNlSW50KHkudGhlbWUsMTApKSxudWxsIT15LnRpbnQmJihRLnRpbnQ9cGFy''@;'; put 'put ''c2VGbG9hdCh5LnRpbnQpKSxudWxsIT15LnJnYiYmKFEucmdiPXkucmdiLnNsaWNlKC02KSksbnVsbCE9US50aGVtZSYmIVEucmdiJiZMLnRoZW1lRWxlbWVudHMmJihRLnJnYj1CZChMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EudGhlbWVdLnJnYixRLnRpbnR8fDApLFEucmF3X3JnYj1M''@;'; put 'put ''LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EudGhlbWVdLnJnYiksUX1mdW5jdGlvbiBMMyh5LFAsTCxRKXtQLkJvcmRlcnM9W107dmFyIHJlPXt9LHBlPXt9LF9lPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT1sbih2ZSk7c3dpdGNoKGpuKFNl''@;'; put 'put ''WzBdKSl7Y2FzZSI8Ym9yZGVycyI6Y2FzZSI8Ym9yZGVycz4iOmNhc2UiPC9ib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcj4iOmNhc2UiPGxlZnQvPiI6Y2FzZSI8L2xlZnQ+IjpjYXNlIjxyaWdodC8+IjpjYXNlIjwvcmlnaHQ+IjpjYXNlIjx0b3AvPiI6Y2FzZSI8L3RvcD4iOmNhc2UiPGJvdHRv''@;'; put 'put ''bS8+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2FzZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8dmVydGljYWwiOmNhc2UiPHZlcnRpY2FsPiI6Y2Fz''@;'; put 'put ''ZSI8dmVydGljYWwvPiI6Y2FzZSI8c3RhcnQiOmNhc2UiPHN0YXJ0PiI6Y2FzZSI8c3RhcnQvPiI6Y2FzZSI8L3N0YXJ0PiI6Y2FzZSI8ZW5kIjpjYXNlIjxlbmQ+IjpjYXNlIjxlbmQvPiI6Y2FzZSI8L2VuZD4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6''@;'; put 'put ''Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGJvcmRlciI6Y2FzZSI8Ym9yZGVyPiI6Y2FzZSI8Ym9yZGVyLz4iOnJlPXt9LFNlLmRpYWdvbmFsVXAmJihyZS5kaWFnb25hbFVwPXlyKFNlLmRpYWdvbmFsVXApKSxTZS5kaWFnb25hbERvd24mJihyZS5kaWFnb25h''@;'; put 'put ''bERvd249eXIoU2UuZGlhZ29uYWxEb3duKSksUC5Cb3JkZXJzLnB1c2gocmUpO2JyZWFrO2Nhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpwZT1yZS5sZWZ0PXt9LFNlLnN0eWxlJiYocGUuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOnBlPXJlLnJpZ2h0''@;'; put 'put ''PXt9LFNlLnN0eWxlJiYocGUuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPHRvcCI6Y2FzZSI8dG9wPiI6cGU9cmUudG9wPXt9LFNlLnN0eWxlJiYocGUuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6cGU9cmUuYm90dG9tPXt9LFNlLnN0eWxl''@;'; put 'put ''JiYocGUuc3R5bGU9U2Uuc3R5bGUpO2JyZWFrO2Nhc2UiPC9kaWFnb25hbD4iOnJlLmRpYWdvbmFsPXBlLHBlPXt9O2JyZWFrO2Nhc2UiPC9ob3Jpem9udGFsPiI6cmUuaG9yaXpvbnRhbD1wZSxwZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjpyZS52ZXJ0aWNhbD1wZSxwZT17fTticmVh''@;'; put 'put ''aztjYXNlIjxjb2xvciI6Y2FzZSI8Y29sb3I+IjpwZS5jb2xvcnx8KHBlLmNvbG9yPXt9KSxTZS5hdXRvJiYocGUuY29sb3IuYXV0bz15cihTZS5hdXRvKSksbnVsbCE9U2UucmdiP3BlLmNvbG9yLnJnYj1TZS5yZ2Iuc2xpY2UoLTYpOlNlLmluZGV4ZWQ/KHBlLmNvbG9yLmluZGV4PXBhcnNl''@;'; put 'put ''SW50KFNlLmluZGV4ZWQsMTApLHBlLmNvbG9yLnJnYj1CbShwZS5jb2xvci5pbmRleCxQLkluZGV4ZWQsITEpKTpTZS50aGVtZSYmKHBlLmNvbG9yLnRoZW1lPXBhcnNlSW50KFNlLnRoZW1lLDEwKSxTZS50aW50JiYocGUuY29sb3IudGludD1wYXJzZUZsb2F0KFNlLnRpbnQpKSxTZS50aGVt''@;'; put 'put ''ZSYmTC50aGVtZUVsZW1lbnRzJiZMLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYocGUuY29sb3IucmdiPUJkKEwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbcGUuY29sb3IudGhlbWVdLnJnYixwZS5jb2xvci50aW50fHwwKSkpLCFTZS5hdXRvJiZudWxsPT1TZS5yZ2ImJiFTZS5pbmRleGVk''@;'; put 'put ''JiZkZWxldGUgcGUuY29sb3I7YnJlYWs7Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7ZGVmYXVsdDppZihRJiZRLldURiYmIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrU2VbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gUjMo''@;'; put 'put ''eSxQKXt2YXIgTD1bIjwiK1BdO3JldHVybiB5JiZ5LnN0eWxlPyhMLnB1c2goJyBzdHlsZT0iJyt5LnN0eWxlKyciJykseS5jb2xvcj8oTC5wdXNoKCI+IiksTC5wdXNoKFVkKHkuY29sb3IsITApKSxMLmpvaW4oIiIpKyI8LyIrUCsiPiIpOkwuam9pbigiIikrIi8+Iik6TFswXSsiLz4ifWZ1''@;'; put 'put ''bmN0aW9uIE85KHksUCxMLFEpe1AuRmlsbHM9W107dmFyIHJlPXt9LHBlPXt9LF9lPSExLHZlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oU2Upe3ZhciBIZT1sbihTZSk7c3dpdGNoKGpuKEhlWzBdKSl7Y2FzZSI8ZmlsbHMiOmNhc2UiPGZpbGxzPiI6Y2FzZSI8''@;'; put 'put ''L2ZpbGxzPiI6Y2FzZSI8L2ZpbGw+IjpjYXNlIjwvZ3JhZGllbnRGaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxzdG9wLz4iOmNhc2UiPGV4''@;'; put 'put ''dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOlAuRmlsbHMucHVzaChyZT17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsPiI6cmUuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxs''@;'; put 'put ''IjpyZS5zdG9wcz1bXSxIZS5kZWdyZWUmJihyZS5hbmdsZT0rSGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpIZS5wYXR0ZXJuVHlwZSYmKHJlLnBhdHRlcm5UeXBlPUhlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+''@;'; put 'put ''IjpjYXNlIjwvcGF0dGVybkZpbGw+IjppZihfZSl0aHJvdyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBCZT1qbihIZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9QmUmJiFyZVtCZV0mJihyZVtCZV09e30p''@;'; put 'put ''O3ZhciBHZT1fZT9wZTpyZVtCZV07bnVsbCE9SGUuaW5kZXhlZCYmKEdlLmluZGV4PXBhcnNlSW50KEhlLmluZGV4ZWQsMTApLEdlLnJnYj1CbShHZS5pbmRleCxQLkluZGV4ZWQpKSxudWxsIT1IZS50aGVtZSYmKEdlLnRoZW1lPXBhcnNlSW50KEhlLnRoZW1lLDEwKSksbnVsbCE9SGUudGlu''@;'; put 'put ''dCYmKEdlLnRpbnQ9cGFyc2VGbG9hdChIZS50aW50KSksbnVsbCE9SGUucmdiJiYoR2UucmdiPUhlLnJnYi5zbGljZSgtNikpLG51bGwhPUhlLmF1dG8mJmRlbGV0ZSByZVtCZV0sbnVsbCE9R2UudGhlbWUmJiFHZS5yZ2ImJkwudGhlbWVFbGVtZW50cyYmKEdlLnJnYj1CZChMLnRoZW1lRWxl''@;'; put 'put ''bWVudHMuY2xyU2NoZW1lW0dlLnRoZW1lXS5yZ2IsR2UudGludHx8MCksUS5XVEYmJihHZS5yYXdfcmdiPUwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbR2UudGhlbWVdLnJnYikpO2JyZWFrO2Nhc2UiPHN0b3A+IjpfZT0hMCxwZT17fTticmVhaztjYXNlIjxzdG9wIjpfZT0hMCxwZT17fSxu''@;'; put 'put ''dWxsIT1IZS5wb3NpdGlvbiYmKHBlLnY9cGFyc2VGbG9hdChIZS5wb3NpdGlvbikpO2JyZWFrO2Nhc2UiPC9zdG9wPiI6X2U9ITEscmUuc3RvcHMucHVzaChwZSk7YnJlYWs7Y2FzZSI8ZXh0Ijp2ZT0hMDticmVhaztjYXNlIjwvZXh0PiI6dmU9ITE7YnJlYWs7ZGVmYXVsdDppZihRJiZRLldU''@;'; put 'put ''RiYmIXZlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrSGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIHlEKHksUCxMLFEpe1AuRm9udHM9W107dmFyIHJlPXt9LHBlPSExOyh5WzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciB2ZT1sbihfZSk7''@;'; put 'put ''c3dpdGNoKGpuKHZlWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZvbnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPV9lLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6UC5Gb250cy5wdXNoKHJlKSxy''@;'; put 'put ''ZT17fTticmVhaztjYXNlIjxuYW1lIjp2ZS52YWwmJihyZS5uYW1lPVBpKHZlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpyZS5ib2xkPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8Yi8+IjpjYXNlIjxiPiI6cmUuYm9sZD0x''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6cmUuaXRhbGljPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6cmUuaXRhbGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjx1Ijpzd2l0Y2godmUudmFsKXtjYXNlIm5vbmUiOnJlLnVu''@;'; put 'put ''ZGVybGluZT0wO2JyZWFrO2Nhc2Uic2luZ2xlIjpyZS51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6cmUudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpyZS51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpyZS51bmRlcmxpbmU9''@;'; put 'put ''MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6cmUudW5kZXJsaW5lPTE7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxzdHJpa2UiOnJlLnN0cmlrZT12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpyZS5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5l''@;'; put 'put ''IjpyZS5vdXRsaW5lPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8b3V0bGluZS8+IjpyZS5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpyZS5zaGFkb3c9dmUudmFsP3lyKHZlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6cmUuc2hhZG93PTE7YnJlYWs7Y2FzZSI8''@;'; put 'put ''Y29uZGVuc2UiOnJlLmNvbmRlbnNlPXZlLnZhbD95cih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6cmUuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOnJlLmV4dGVuZD12ZS52YWw/eXIodmUudmFsKToxO2JyZWFrO2Nhc2UiPGV4dGVuZC8+IjpyZS5leHRlbmQ9MTti''@;'; put 'put ''cmVhaztjYXNlIjxzeiI6dmUudmFsJiYocmUuc3o9K3ZlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPSh2ZS52YWx8fCJub25lIikmJihyZS52YWxpZ249dmUudmFsLnJlcGxhY2UoInNjcmlwdCIsIiIpKTticmVhaztj''@;'; put 'put ''YXNlIjx2ZXJ0QWxpZ24vPiI6Y2FzZSI8L3ZlcnRBbGlnbj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dmUudmFsJiYocmUuZmFtaWx5PXBhcnNlSW50KHZlLnZhbCwxMCkpO2JyZWFrO2Nhc2UiPGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2NoZW1lIjp2ZS52YWwmJihy''@;'; put 'put ''ZS5zY2hlbWU9dmUudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09dmUudmFsKWJyZWFrO3ZlLmNvZGVwYWdlPUlbcGFyc2VJbnQodmUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOnJlLmNvbG9yfHwocmUu''@;'; put 'put ''Y29sb3I9e30pLHZlLmF1dG8mJihyZS5jb2xvci5hdXRvPXlyKHZlLmF1dG8pKSx2ZS5yZ2I/cmUuY29sb3IucmdiPXZlLnJnYi5zbGljZSgtNik6dmUuaW5kZXhlZD8ocmUuY29sb3IuaW5kZXg9cGFyc2VJbnQodmUuaW5kZXhlZCwxMCkscmUuY29sb3IucmdiPUJtKHJlLmNvbG9yLmluZGV4''@;'; put 'put ''LFAuSW5kZXhlZCkpOnZlLnRoZW1lJiYocmUuY29sb3IudGhlbWU9cGFyc2VJbnQodmUudGhlbWUsMTApLHZlLnRpbnQmJihyZS5jb2xvci50aW50PXBhcnNlRmxvYXQodmUudGludCkpLHZlLnRoZW1lJiZMLnRoZW1lRWxlbWVudHMmJkwudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihyZS5j''@;'; put 'put ''b2xvci5yZ2I9QmQoTC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtyZS5jb2xvci50aGVtZV0ucmdiLHJlLmNvbG9yLnRpbnR8fDApKSk7YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6cGU9ITA7YnJlYWs7Y2FzZSI8L0Fs''@;'; put 'put ''dGVybmF0ZUNvbnRlbnQ+IjpwZT0hMTticmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOnBlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpwZT0hMTticmVhaztkZWZhdWx0OmlmKFEmJlEuV1RGJiYhcGUpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ1bnJlY29nbml6ZWQgIit2ZVswXSsiIGluIGZvbnRzIil9fSl9dmFyIGptPXswOiJub25lIiwxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0semQ9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRl''@;'; put 'put ''cklkIiwieGZJZCJdLFoyPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLHhEPWZ1bmN0aW9uKCl7dmFyIHk9LzwoPzpc''@;'; put 'put ''dys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnQ+LyxQPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwvPi8sTD0vPCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLHJlPS88KD86XHcrOik/Ym9yZGVyKFtePl0qKT5bXFNcc10qPzxc''@;'; put 'put ''Lyg/Olx3KzopP2JvcmRlcj4vO3JldHVybiBmdW5jdGlvbih2ZSxTZSxIZSxCZSl7dmFyIGR0LEN0LEdlPXt9LG50PXt9O3JldHVybihkdD12ZS5tYXRjaCh5KSkmJih5RChkdCxHZSxIZSxCZSksKEdlLkZvbnRzfHxbXSlbMF0mJlV0KG50LEdlLkZvbnRzWzBdKSksKGR0PXZlLm1hdGNoKFAp''@;'; put 'put ''KSYmKEN0PWxuKFBpKGR0WzBdKSksbnQuej1DdC5mb3JtYXRDb2RlP3hyKEN0LmZvcm1hdENvZGUpOihTZS5OdW1iZXJGbXR8fFtdKVsrQ3QubnVtRm10SWRdfHwiR2VuZXJhbCIpLChkdD12ZS5tYXRjaChMKSkmJihPOShkdCxHZSxIZSxCZSksKEdlLkZpbGxzfHxbXSlbMF0mJlV0KG50LEdl''@;'; put 'put ''LkZpbGxzWzBdKSksKGR0PXZlLm1hdGNoKHJlKSkmJihMMyhkdCxHZSxIZSxCZSksKEdlLkJvcmRlcnN8fFtdKVswXSYmVXQobnQsR2UuQm9yZGVyc1swXSkpLG50fX0oKSxNWj0vPCg/Olx3KzopP2R4Zj5bXFNcc10qPzxcLyg/Olx3KzopP2R4Zj4vZyxrWj0vPCg/Olx3KzopP3RhYmxlU3R5''@;'; put 'put ''bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGU+L2c7dmFyIFptPWZ1bmN0aW9uKCl7dmFyIFA9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxMPS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxc''@;'; put 'put ''Lyg/Olx3KzopP2NlbGxTdHlsZVhmcz4vLFE9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZXM+LyxyZT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLHBlPS88KD86XHcrOik/Zmls''@;'; put 'put ''bHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxfZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8sdmU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+LyxTZT0vPCg/Olx3Kzop''@;'; put 'put ''P2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLEhlPS88KD86XHcrOik/dGFibGVTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxCZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86''@;'; put 'put ''XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihudCxkdCxDdCl7dmFyIGJ0LGN0PXt9O3JldHVybiBudD8oKGJ0PShudD1udC5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaChTZSkpJiZm''@;'; put 'put ''dW5jdGlvbiBQOSh5LFAsTCl7UC5JbmRleGVkfHwoUC5JbmRleGVkPVtdKTt2YXIgUT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9bG4ocmUpO3N3aXRjaChqbihwZVswXSkpe2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29s''@;'; put 'put ''b3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8cmdiQ29sb3IiOmRlbGV0ZSBwZVswXTt2YXIgX2U9cGFyc2VJbnQo''@;'; put 'put ''cGUucmdiLnNsaWNlKC02KSwxNik7UC5JbmRleGVkLnB1c2goW19lPj4xNiYyNTUsX2U+PjgmMjU1LDI1NSZfZV0pO2JyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVj''@;'; put 'put ''b2duaXplZCAiK3BlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKFApKSYmZnVuY3Rpb24gQ0QoeSxQLEwpe1AuTnVtYmVyRm10PVtdO2Zvcih2YXIgUT1sdCh3Ll90YWJsZSkscmU9MDtyZTxRLmxlbmd0aDsrK3JlKVAuTnVtYmVyRm10W1FbcmVdXT13''@;'; put 'put ''Ll90YWJsZVtRW3JlXV07dmFyIHBlPXlbMF0ubWF0Y2goJHQpO2lmKHBlKWZvcihyZT0wO3JlPHBlLmxlbmd0aDsrK3JlKXt2YXIgX2U9bG4ocGVbcmVdKTtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVt''@;'; put 'put ''Rm10cz4iOmNhc2UiPC9udW1GbXQ+IjpicmVhaztjYXNlIjxudW1GbXQiOnZhciB2ZT14cihQaShfZS5mb3JtYXRDb2RlKSksU2U9cGFyc2VJbnQoX2UubnVtRm10SWQsMTApO2lmKFAuTnVtYmVyRm10W1NlXT12ZSxTZT4wKXtpZihTZT4zOTIpe2ZvcihTZT0zOTI7U2U+NjAmJm51bGwhPVAu''@;'; put 'put ''TnVtYmVyRm10W1NlXTstLVNlKTtQLk51bWJlckZtdFtTZV09dmV9dy5sb2FkKHZlLFNlKX1icmVhaztkZWZhdWx0OmlmKEwuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrX2VbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQsY3QsQ3QpLChidD1udC5tYXRjaChfZSkpJiZ5RChi''@;'; put 'put ''dCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKHBlKSkmJk85KGJ0LGN0LGR0LEN0KSwoYnQ9bnQubWF0Y2godmUpKSYmTDMoYnQsY3QsZHQsQ3QpLChidD1udC5tYXRjaChMKSkmJmZ1bmN0aW9uIGhDKHksUCxMKXtQLkNlbGxTdHlsZVhmPVtdO3ZhciBRLHJlPSExOyh5WzBdLm1hdGNoKCR0KXx8''@;'; put 'put ''W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciBfZT1sbihwZSksdmU9MDtzd2l0Y2goam4oX2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2VsbFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8''@;'; put 'put ''L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShRPV9lKVswXSx2ZT0wO3ZlPHpkLmxlbmd0aDsr''@;'; put 'put ''K3ZlKVFbemRbdmVdXSYmKFFbemRbdmVdXT1wYXJzZUludChRW3pkW3ZlXV0sMTApKTtmb3IodmU9MDt2ZTxaMi5sZW5ndGg7Kyt2ZSlRW1oyW3ZlXV0mJihRW1oyW3ZlXV09eXIoUVtaMlt2ZV1dKSk7aWYoUC5OdW1iZXJGbXQmJlEubnVtRm10SWQ+MzkyKWZvcih2ZT0zOTI7dmU+NjA7LS12''@;'; put 'put ''ZSlpZihQLk51bWJlckZtdFtRLm51bUZtdElkXT09UC5OdW1iZXJGbXRbdmVdKXtRLm51bUZtdElkPXZlO2JyZWFrfVAuQ2VsbFN0eWxlWGYucHVzaChRKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgU2U9e307X2UudmVydGljYWwmJihTZS52ZXJ0aWNh''@;'; put 'put ''bD1fZS52ZXJ0aWNhbCksX2UuaG9yaXpvbnRhbCYmKFNlLmhvcml6b250YWw9X2UuaG9yaXpvbnRhbCksbnVsbCE9X2UudGV4dFJvdGF0aW9uJiYoU2UudGV4dFJvdGF0aW9uPV9lLnRleHRSb3RhdGlvbiksX2UuaW5kZW50JiYoU2UuaW5kZW50PV9lLmluZGVudCksX2Uud3JhcFRleHQmJihT''@;'; put 'put ''ZS53cmFwVGV4dD1fZS53cmFwVGV4dCksX2Uuc2hyaW5rVG9GaXQmJihTZS5zaHJpbmtUb0ZpdD15cihfZS5zaHJpbmtUb0ZpdCkpLFEuYWxpZ25tZW50PVNlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOlEucHJvdGVjdGlvbj17fSx5cihfZS5oaWRkZW4pJiYoUS5wcm90ZWN0aW9uLmhpZGRl''@;'; put 'put ''bj0hMCksbnVsbCE9X2UubG9ja2VkJiYoUS5wcm90ZWN0aW9uLmVkaXRhYmxlPSF5cihfZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29n''@;'; put 'put ''bml6ZWQgIitfZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKFEpKSYmZnVuY3Rpb24gU0QoeSxQLEwpe1AuQ2VsbFN0eWxlWGZ8fChQLkNlbGxTdHlsZVhmPVtdKTt2YXIgUT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KHJlKXt2YXIgcGU9bG4ocmUpO3N3aXRjaChqbihwZVswXSkpe2Nhc2UiPGNlbGxTdHlsZXMiOmNhc2UiPGNlbGxTdHlsZXM+IjpjYXNlIjxjZWxsU3R5bGVzLz4iOmNhc2UiPC9jZWxsU3R5bGVzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2NlbGxTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8''@;'; put 'put ''ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGNlbGxTdHlsZSI6Y2FzZSI8Y2VsbFN0eWxlLz4iOmRlbGV0ZSBwZVswXTt2YXIgX2U9K3BlLnhmSWQ7aWYoUC5DZWxsU3R5bGVYZltfZV0pUC5DZWxsU3R5bGVYZltfZV0uc3R5bGU9UGkocGUubmFtZSk7ZWxzZSBpZighcGUu''@;'; put 'put ''YnVpbHRpbklkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgQ2VsbFN0eWxlICIrX2UpO2JyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKEwmJkwuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAi''@;'; put 'put ''K3BlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKHJlKSkmJmZ1bmN0aW9uIGRDKHksUCxMKXtQLkNlbGxYZj1bXTt2YXIgUSxyZT0hMTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgX2U9bG4ocGUpLHZlPTA7c3dp''@;'; put 'put ''dGNoKGpuKF9lWzBdKSl7Y2FzZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2NlbGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6''@;'; put 'put ''Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKFE9X2UpWzBdLHZlPTA7dmU8emQubGVuZ3RoOysrdmUpUVt6ZFt2ZV1dJiYoUVt6ZFt2ZV1dPXBhcnNlSW50KFFbemRbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFoyLmxl''@;'; put 'put ''bmd0aDsrK3ZlKVFbWjJbdmVdXSYmKFFbWjJbdmVdXT15cihRW1oyW3ZlXV0pKTtpZihQLk51bWJlckZtdCYmUS5udW1GbXRJZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlmKFAuTnVtYmVyRm10W1EubnVtRm10SWRdPT1QLk51bWJlckZtdFt2ZV0pe1EubnVtRm10SWQ9dmU7YnJlYWt9''@;'; put 'put ''UC5DZWxsU3R5bGVYZiYmUS54ZklkJiZQLkNlbGxTdHlsZVhmW1EueGZJZF0mJlAuQ2VsbFN0eWxlWGZbUS54ZklkXS5zdHlsZSYmKFEuc3R5bGU9UC5DZWxsU3R5bGVYZltRLnhmSWRdLnN0eWxlKSxQLkNlbGxYZi5wdXNoKFEpO2JyZWFrO2Nhc2UiPGFsaWdubWVudCI6Y2FzZSI8YWxpZ25t''@;'; put 'put ''ZW50Lz4iOnZhciBTZT17fTtfZS52ZXJ0aWNhbCYmKFNlLnZlcnRpY2FsPV9lLnZlcnRpY2FsKSxfZS5ob3Jpem9udGFsJiYoU2UuaG9yaXpvbnRhbD1fZS5ob3Jpem9udGFsKSxudWxsIT1fZS50ZXh0Um90YXRpb24mJihTZS50ZXh0Um90YXRpb249X2UudGV4dFJvdGF0aW9uKSxfZS5pbmRl''@;'; put 'put ''bnQmJihTZS5pbmRlbnQ9X2UuaW5kZW50KSxfZS53cmFwVGV4dCYmKFNlLndyYXBUZXh0PXlyKF9lLndyYXBUZXh0KSksX2Uuc2hyaW5rVG9GaXQmJihTZS5zaHJpbmtUb0ZpdD15cihfZS5zaHJpbmtUb0ZpdCkpLFEuYWxpZ25tZW50PVNlO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOlEucHJv''@;'; put 'put ''dGVjdGlvbj17fSx5cihfZS5oaWRkZW4pJiYoUS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9X2UubG9ja2VkJiYoUS5wcm90ZWN0aW9uLmVkaXRhYmxlPSF5cihfZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOnJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoTCYmTC5XVEYmJiFyZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK19lWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxjdCxDdCksKGJ0PW50Lm1hdGNoKEJlKSkmJmZ1bmN0aW9u''@;'; put 'put ''IEY5KHksUCxMLFEpe1AuRFhGfHwoUC5EWEY9W10pLCh5WzBdLm1hdGNoKE1aKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocmUpe1AuRFhGLnB1c2goeEQocmUsUCxMLFEpKX0pfShidCxjdCxkdCxDdCksKGJ0PW50Lm1hdGNoKEhlKSkmJmZ1bmN0aW9uIEFaKHksUCxMLFEpe1AuVGFibGV8fChQ''@;'; put 'put ''LlRhYmxlPVtdKSwoeVswXS5tYXRjaChrWil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtQLlRhYmxlLnB1c2goZnVuY3Rpb24geFooeSxQLEwsUSl7dmFyIHJlPSExLHBlPXt9O3JldHVybih5Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oX2Upe3ZhciB2ZT1sbihfZSk7c3dp''@;'; put 'put ''dGNoKGpuKHZlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOnBlLm5hbWU9dmUubmFtZS5yZXBsYWNlKC9eKFRhYmxlfFBpdm90KVN0eWxlLywiIikscGUucmF3bmFtZT12ZS5uYW1lLHBlLnBpdm90PSF2ZS5waXZvdHx8eXIodmUucGl2b3QpLHBlLnRhYmxlPSF2''@;'; put 'put ''ZS50YWJsZXx8eXIodmUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3RhYmxlU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0eWxlRWxlbWVudCI6aWYodmUudHlwZSYmdmUuZHhmSWQp''@;'; put 'put ''e2lmKCFQLkRYRnx8IVAuRFhGWyt2ZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKF9lKyIgY2Fubm90IGZpbmQgRFhGIik7cGVbdmUudHlwZV09UC5EWEZbK3ZlLmR4ZklkXX1icmVhaztjYXNlIjxleHQiOnJlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpyZT0hMTticmVhaztkZWZhdWx0OmlmKFEm''@;'; put 'put ''JlEuV1RGJiYhcmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit2ZVswXSsiIGluIHRhYmxlU3R5bGUiKX19KSxwZX0ocmUsUCwwLFEpKX0pfShidCxjdCwwLEN0KSwoY3QuRm9udHN8fFtdKVswXSYmWjEoY3QuRm9udHNbMF0pLGN0KTpjdH19KCksZkM9U3IoInN0eWxlU2hlZXQi''@;'; put 'put ''LG51bGwse3htbG5zOmlzLm1haW5bMF0sInhtbG5zOnZ0Ijppcy52dH0pO2Z1bmN0aW9uIHBDKHksUCl7dmFyIFEsTD1bQm4sZkNdO3kuU1NGJiZudWxsIT0oUT1mdW5jdGlvbiB6bSh5KXt2YXIgUD1bIjxudW1GbXRzPiJdO3JldHVybltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1d''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oTCl7Zm9yKHZhciBRPUxbMF07UTw9TFsxXTsrK1EpbnVsbCE9eVtRXSYmKFBbUC5sZW5ndGhdPVNyKCJudW1GbXQiLG51bGwse251bUZtdElkOlEsZm9ybWF0Q29kZTpIcih5W1FdKX0pKX0pLDE9PT1QLmxlbmd0aD8iIjooUFtQLmxlbmd0aF09IjwvbnVtRm10''@;'; put 'put ''cz4iLFBbMF09U3IoIm51bUZtdHMiLG51bGwse2NvdW50OlAubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxQLmpvaW4oIiIpKX0oeS5TU0YpKSYmKExbTC5sZW5ndGhdPVEpLExbTC5sZW5ndGhdPWZ1bmN0aW9uIHdEKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''TCl7dmFyIFE9WyI8Zm9udD4iXTtMLmJvbGQmJlEucHVzaCgiPGIvPiIpLEwuaXRhbGljJiZRLnB1c2goIjxpLz4iKSxMLnN0cmlrZSYmUS5wdXNoKCI8c3RyaWtlLz4iKSxMLnNoYWRvdyYmUS5wdXNoKCI8c2hhZG93Lz4iKSxqbVsrTC51bmRlcmxpbmVdJiZRLnB1c2goJzx1IHZhbD0iJytq''@;'; put 'put ''bVsrTC51bmRlcmxpbmVdKyciLz4nKSxMLnN6JiZRLnB1c2goJzxzeiB2YWw9IicrTC5zeisnIi8+JyksTC5jb2xvciYmUS5wdXNoKFVkKEwuY29sb3IsITApKSxMLm5hbWUmJlEucHVzaCgnPG5hbWUgdmFsPSInK0wubmFtZSsnIi8+JyksTC5mYW1pbHkmJlEucHVzaCgnPGZhbWlseSB2YWw9''@;'; put 'put ''IicrTC5mYW1pbHkrJyIvPicpLEwuc2NoZW1lJiZRLnB1c2goJzxzY2hlbWUgdmFsPSInK0wuc2NoZW1lKyciLz4nKSxMLnZhbGlnbiYmUS5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytMLnZhbGlnbisoInN1YiI9PUwudmFsaWdufHwic3VwZXIiPT1MLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIv''@;'; put 'put ''PicpLFAucHVzaChRLmpvaW4oIiIpKyI8L2ZvbnQ+Iil9KSwnPGZvbnRzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9mb250cz4ifSgoeS5TdHlsZXN8fHt9KS5Gb250c3x8W10pLExbTC5sZW5ndGhdPWZ1bmN0aW9uIGJEKHkpe3ZhciBQPVtdO3JldHVybiB5LmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oTCl7dmFyIFE9bnVsbDtpZihMLnN0b3BzJiZMLnN0b3BzLmxlbmd0aCl7dmFyIHJlPXt9O0wuYW5nbGUmJihyZS5kZWdyZWU9TWF0aC5yb3VuZChMLmFuZ2xlKSksUT1MLnN0b3BzLm1hcChmdW5jdGlvbihwZSl7cmV0dXJuIFNyKCJzdG9wIixVZChwZSwiY29sb3IiLCEw''@;'; put 'put ''KSxudWxsIT1wZS52P3twb3NpdGlvbjpwZS52fTp7fSl9KSxQLnB1c2goIjxmaWxsPiIrU3IoImdyYWRpZW50RmlsbCIsUS5qb2luKCIiKSxyZSkrIjwvZmlsbD4iKX1lbHNle2lmKEwuZmdDb2xvcil7aWYoUT0oUXx8IiIpKyI8ZmdDb2xvciAiLEwuZmdDb2xvci50aGVtZSlRKz0ndGhlbWU9''@;'; put 'put ''IicrTC5mZ0NvbG9yLnRoZW1lKyciJysoTC5mZ0NvbG9yLnRpbnQ/JyB0aW50PSInK0wuZmdDb2xvci50aW50KyciJzoiIikrIi8+IjtlbHNlIGlmKG51bGwhPUwuZmdDb2xvci5pbmRleCYmbnVsbD09TC5mZ0NvbG9yLnJnYilRKz0naW5kZXhlZD0iJytMLmZnQ29sb3IuaW5kZXgrJyIvPic7''@;'; put 'put ''ZWxzZSBpZihMLmZnQ29sb3IuYXV0bylRKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihudWxsPT1MLmZnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrbHQoTC5mZ0NvbG9yKS5qb2luKCJ8IikpO1ErPSdyZ2I9IkZGJytPdShMLmZnQ29sb3IucmdiKSsnIi8+J30ic29saWQi''@;'; put 'put ''PT1MLnBhdHRlcm5UeXBlJiYhTC5iZ0NvbG9yJiYoTC5iZ0NvbG9yPXtpbmRleDo2NH0pfWlmKEwuYmdDb2xvcilpZihRPShRfHwiIikrIjxiZ0NvbG9yICIsTC5iZ0NvbG9yLnRoZW1lKVErPSd0aGVtZT0iJytMLmJnQ29sb3IudGhlbWUrJyIvPic7ZWxzZSBpZihudWxsIT1MLmJnQ29sb3Iu''@;'; put 'put ''aW5kZXgmJm51bGw9PUwuYmdDb2xvci5yZ2IpUSs9J2luZGV4ZWQ9IicrTC5iZ0NvbG9yLmluZGV4KyciLz4nO2Vsc2UgaWYoTC5iZ0NvbG9yLmF1dG8pUSs9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09TC5iZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK2x0KEwu''@;'; put 'put ''YmdDb2xvcikuam9pbigifCIpKTtRKz0ncmdiPSJGRicrT3UoTC5iZ0NvbG9yLnJnYikrJyIvPid9UC5wdXNoKCI8ZmlsbD4iK1NyKCJwYXR0ZXJuRmlsbCIsUSx7cGF0dGVyblR5cGU6TC5wYXR0ZXJuVHlwZX0pKyI8L2ZpbGw+Iil9fSksJzxmaWxscyBjb3VudD0iJytQLmxlbmd0aCsnIj4n''@;'; put 'put ''K1Auam9pbigiIikrIjwvZmlsbHM+In0oKHkuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiB3Wih5KXt2YXIgUD1bXTtyZXR1cm4geS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPVtdO1EucHVzaChSMyhMLmxlZnQsImxlZnQiKSksUS5wdXNoKFIzKEwucmln''@;'; put 'put ''aHQsInJpZ2h0IikpLFEucHVzaChSMyhMLnRvcCwidG9wIikpLFEucHVzaChSMyhMLmJvdHRvbSwiYm90dG9tIikpLFEucHVzaChSMyhMLmRpYWdvbmFsLCJkaWFnb25hbCIpKSxQLnB1c2goIjxib3JkZXI+IitRLmpvaW4oIiIpKyI8L2JvcmRlcj4iKX0pLCc8Ym9yZGVycyBjb3VudD0iJytQ''@;'; put 'put ''Lmxlbmd0aCsnIj4nK1Auam9pbigiIikrIjwvYm9yZGVycz4ifSgoeS5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksTFtMLmxlbmd0aF09ZnVuY3Rpb24gU1ooeSl7dmFyIFA9Wyc8eGYgbnVtRm10SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKHkpZm9y''@;'; put 'put ''KHZhciBMPTE7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKFNyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6eVtMXS5udW1GbXRJZHx8MCxmb250SWQ6eVtMXS5mb250SWR8fDAsZmlsbElkOnlbTF0uZmlsbElkfHwwLGJvcmRlcklkOnlbTF0uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMg''@;'; put 'put ''Y291bnQ9IicrUC5sZW5ndGgrJyI+JytQLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShQLmNlbGxTdHlsZVhmcyksKFE9ZnVuY3Rpb24gQ1ooeSl7dmFyIFA9W107cmV0dXJuIFBbUC5sZW5ndGhdPVNyKCJjZWxsWGZzIixudWxsKSx5LmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9TC5h''@;'; put 'put ''bGlnbm1lbnQ7ZGVsZXRlIEwuYWxpZ25tZW50O3ZhciByZT1MLnByb3RlY3Rpb247ZGVsZXRlIEwucHJvdGVjdGlvbjt2YXIgcGU9UT9TcigiYWxpZ25tZW50IixudWxsLFEpOiIiO3BlKz1yZT9TcigicHJvdGVjdGlvbiIsbnVsbCx7aGlkZGVuOnJlLmhpZGRlbj8xOjAsbG9ja2VkOnJlLmVk''@;'; put 'put ''aXRhYmxlPzA6MX0pOiIiLFBbUC5sZW5ndGhdPVNyKCJ4ZiIscGV8fG51bGwsTCksUSYmKEwuYWxpZ25tZW50PVEpLHJlJiYoTC5wcm90ZWN0aW9uPXJlKX0pLFBbUC5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09UC5sZW5ndGg/IiI6KFBbMF09U3IoImNlbGxYZnMiLG51bGwse2NvdW50OlAu''@;'; put 'put ''bGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxQLmpvaW4oIiIpKX0oUC5jZWxsWGZzKSkmJihMW0wubGVuZ3RoXT1RKSxMW0wubGVuZ3RoXT1mdW5jdGlvbiBNRCh5KXt2YXIgUD1bJzxjZWxsU3R5bGUgbmFtZT0iTm9ybWFsIiB4ZklkPSIwIiBidWlsdGluSWQ9IjAiLz4nXTtpZih5KWZv''@;'; put 'put ''cih2YXIgTD0xO0w8eS5sZW5ndGg7KytMKVAucHVzaChTcigiY2VsbFN0eWxlIixudWxsLHtuYW1lOnlbTF0ubmFtZSx4ZklkOkx9KSk7cmV0dXJuJzxjZWxsU3R5bGVzIGNvdW50PSInK1AubGVuZ3RoKyciPicrUC5qb2luKCIiKSsiPC9jZWxsU3R5bGVzPiJ9KFAuY2VsbFN0eWxlWGZzKSx5''@;'; put 'put ''LlN0eWxlcy5EWEZ8fCh5LlN0eWxlcy5EWEY9W10pO3ZhciByZT1mdW5jdGlvbiBUWih5LFAsTCl7dmFyIFE9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKHl8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHlsZT0iUGl2''@;'; put 'put ''b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIHkmJnkubGVuZ3RoPyhRWzBdKz0iPiIseS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtRLnB1c2goZnVuY3Rpb24gRVooeSxQLEwpe3ZhciBRPVtdO1sid2hvbGVUYWJsZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29s''@;'; put 'put ''dW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwiZmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmlyc3RTdWJ0b3RhbENv''@;'; put 'put ''bHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1JvdyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENvbHVtblN1YmhlYWRp''@;'; put 'put ''bmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZpZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7aWYoeVtwZV0pe3ZhciBf''@;'; put 'put ''ZT1GbyhQLHlbcGVdKTtRLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytfZSsnIiB0eXBlPSInK3BlKyciLz4nKX19KTt2YXIgcmU9Jzx0YWJsZVN0eWxlIGNvdW50PSInK1EubGVuZ3RoKyciIHBpdm90PSInKyArISF5LnBpdm90KyciIG5hbWU9IicreS5uYW1lKyciJztyZXR1''@;'; put 'put ''cm4gUS5sZW5ndGg/cmUrIj4iK1Euam9pbigiIikrIjwvdGFibGVTdHlsZT4iOnJlKyIvPiJ9KHJlLFApKX0pLFEuam9pbigiIikrIjwvdGFibGVTdHlsZXM+Iik6UVswXSsiLz4ifSgoeS5TdHlsZXN8fHt9KS5UYWJsZXx8W10seS5TdHlsZXMuRFhGKTtyZXR1cm4gTFtMLmxlbmd0aF09ZnVu''@;'; put 'put ''Y3Rpb24gVW0oeSxQKXtpZigheS5sZW5ndGgpcmV0dXJuJzxkeGZzIGNvdW50PSIwIi8+Jzt2YXIgTD1bJzxkeGZzIGNvdW50PSInK3kubGVuZ3RoKyciPiddO3JldHVybiB5LmZvckVhY2goZnVuY3Rpb24oUSl7TC5wdXNoKGZ1bmN0aW9uIEVEKHksUCl7dmFyIEw9e2JvbGQ6ImIiLGl0YWxp''@;'; put 'put ''YzoiaSIsdmFsaWduOiJ2ZXJ0QWxpZ24ifSxRPVsiPGR4Zj4iXSxyZT1bXSxwZT1bXSxfZT1bXSxTZT1bXTtyZXR1cm4gbHQoeSkuZm9yRWFjaChmdW5jdGlvbihCZSl7c3dpdGNoKEJlKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2Ui''@;'; put 'put ''Y29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6cmUucHVzaChCZSk7YnJlYWs7Y2FzZSJiZ0NvbG9y''@;'; put 'put ''IjpjYXNlImZnQ29sb3IiOl9lLnB1c2goQmUpO2JyZWFrO2Nhc2UieiI6cGUucHVzaChCZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNhc2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6U2UucHVzaChCZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrQmUrIiBpbiBEWEYifX0pLHJlLmxlbmd0aD4wJiYoUS5wdXNoKCI8Zm9udD4i''@;'; put 'put ''KSxyZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6US5wdXNoKCI8IisoTFtCZV18fEJlKSsnIHZhbD0iJysoeVtC''@;'; put 'put ''ZV0/IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOlEucHVzaChVZCh5W0JlXSxCZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpRLnB1c2goIjwiKyhMW0JlXXx8QmUpKycgdmFsPSInK3lbQmVdKyciLz4nKTticmVhaztj''@;'; put 'put ''YXNlInVuZGVybGluZSI6US5wdXNoKCc8dSB2YWw9Iicram1beVtCZV18fDBdKyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6US5wdXNoKCc8dmVydEFsaWduIHZhbD0iJyt5LnZhbGlnbisoInN1YiI9PXkudmFsaWdufHwic3VwZXIiPT15LnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitCZSsiIDogZm9udCBEWEYifX0pLFEucHVzaCgiPC9mb250PiIpKSxwZS5sZW5ndGg+MCYmUS5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrSHIoeS56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBZMyh5LFApe2lmKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgeSlyZXR1cm4geTt2YXIgTD1QLnJldnNzZlt5Pz8iR2VuZXJhbCJdLFE9NjA7aWYobnVsbD09TClmb3IoO1E8MzkyOysrUSlpZihudWxsPT1QLnNzZltRXSlyZXR1cm4gdy5sb2FkKHksUSksUC5zc2ZbUV09eSxQLnJldnNzZlt5XT1RLFE7cmV0dXJuIEx9KHkueixQKSsnIi8+''@;'; put 'put ''JyksX2UubGVuZ3RoPjAmJihRLnB1c2goIjxmaWxsPiIpLFEucHVzaCgiPHBhdHRlcm5GaWxsIisoeS5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK3kucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxfZS5mb3JFYWNoKGZ1bmN0aW9uKEJlKXtzd2l0Y2goQmUpe2Nhc2UicGF0dGVyblR5cGUi''@;'; put 'put ''OmJyZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpRLnB1c2goVWQoeVtCZV0sQmUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrQmUrIiA6IGZpbGwgRFhGIn19KSxRLnB1c2goIjwvcGF0dGVybkZpbGw+IiksUS5wdXNoKCI8L2ZpbGw+IikpLFNlLmxlbmd0''@;'; put 'put ''aD4wPyhRLnB1c2goWyI8Ym9yZGVyIixudWxsIT15LmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEheS5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPXkuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIXkuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSksU2Uu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihCZSl7US5wdXNoKFIzKHlbQmVdLEJlKSl9KSxRLnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9eS5kaWFnb25hbERvd258fG51bGwhPXkuZGlhZ29uYWxVcCkmJlEucHVzaChbIjxib3JkZXIiLG51bGwhPXkuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSIn''@;'; put 'put ''KyArISF5LmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9eS5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEheS5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09US5sZW5ndGg/IjxkeGYvPiI6US5qb2luKCIiKSsiPC9keGY+In0oUSxQKSl9KSxMLmpvaW4oIiIpKyI8''@;'; put 'put ''L2R4ZnM+In0oeS5TdHlsZXMuRFhGLFApLExbTC5sZW5ndGhdPXJlLEwubGVuZ3RoPjImJihMW0wubGVuZ3RoXT0iPC9zdHlsZVNoZWV0PiIsTFsxXT1MWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxMLmpvaW4oIiIpfWZ1bmN0aW9uIE8zKHksUCxMKXtMfHwoTD1mcig2KzQqUC5sZW5ndGgpKSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIseSksbmMoUCxMKTt2YXIgUT1MLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TDtyZXR1cm4gbnVsbD09TC5sJiYoTC5sPUwubGVuZ3RoKSxRfWZ1bmN0aW9uIFltKHkpe3JldHVybntjb2xvcjpEZCh5KSxwb3M6bWEoeSl9fUhpLlNUWT0iaHR0cDovL3NjaGVtYXMu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBWND1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJk''@;'; put 'put ''YXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXSxZMj1iZShWNCksV209WyJnZW5lcmFsIiwibGVm''@;'; put 'put ''dCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxCND1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1bmN0aW9uIE45KHksUCxMKXtMfHwoTD1mcigxNikpLEwud3JpdGVf''@;'; put 'put ''c2hpZnQoMixQfHwwKSxMLndyaXRlX3NoaWZ0KDIseS5udW1GbXRJZHx8MCksTC53cml0ZV9zaGlmdCgyLHkuZm9udElkfHwwKSxMLndyaXRlX3NoaWZ0KDIseS5maWxsSWR8fDApLEwud3JpdGVfc2hpZnQoMix5LmJvcmRlcklkfHwwKSxMLndyaXRlX3NoaWZ0KDEseS5hbGlnbm1lbnQmJnku''@;'; put 'put ''YWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksTC53cml0ZV9zaGlmdCgxLHkuYWxpZ25tZW50JiZ5LmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBRPTAscmU9MDtpZih5LmFsaWdubWVudCl7aWYoeS5hbGlnbm1lbnQuaG9yaXpvbnRhbCl7dmFyIHBlPVdtLmluZGV4T2YoeS5hbGlnbm1lbnQu''@;'; put 'put ''aG9yaXpvbnRhbCk7cGU8MCYmKHBlPTApLFF8PXBlfWlmKHkuYWxpZ25tZW50LnZlcnRpY2FsKXt2YXIgX2U9QjQuaW5kZXhPZih5LmFsaWdubWVudC52ZXJ0aWNhbCk7X2U8MCYmKF9lPTIpLFF8PV9lPDwzfXkuYWxpZ25tZW50LndyYXBUZXh0JiYoUXw9NjQpLHkuYWxpZ25tZW50LnNocmlu''@;'; put 'put ''a1RvRml0JiYocmV8PTEpfXJldHVybiBMLndyaXRlX3NoaWZ0KDEsUSksTC53cml0ZV9zaGlmdCgxLHJlKSxMLndyaXRlX3NoaWZ0KDEsMCksTC53cml0ZV9zaGlmdCgxLDApLEx9dmFyIFcyPVsibm9uZSIsInRoaW4iLCJtZWRpdW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJs''@;'; put 'put ''ZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gajQoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3kubCs9MTt2YXIgTD1EZCh5KTtyZXR1cm57c3R5''@;'; put 'put ''bGU6VzJbUF0sY29sb3I6TH19ZnVuY3Rpb24gUDMoeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMTApKSx5JiZ5LnN0eWxlJiYiIiE9eS5zdHlsZSYmIm5vbmUiIT15LnN0eWxlJiYtMSE9PVcyLmluZGV4T2YoeS5zdHlsZSk/KFAud3JpdGVfc2hpZnQoMSxXMi5pbmRleE9mKHkuc3R5bGUpKSxQLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCkseS5jb2xvcj9SMih5LmNvbG9yLFApOihQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApKSk6KFAud3JpdGVfc2hpZnQoMSwwKSxQLndyaXRlX3NoaWZ0KDEsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSksUH1mdW5jdGlv''@;'; put 'put ''biB0dSh5LFApe3JldHVybiBQfHwoUD1mcig1MikpLFAud3JpdGVfc2hpZnQoNCx5LnhmSWQpLFAud3JpdGVfc2hpZnQoMiwxKSxQLndyaXRlX3NoaWZ0KDEsK3kuYnVpbHRpbklkKSxQLndyaXRlX3NoaWZ0KDEsMCksQWQoeS5uYW1lfHwiIixQKSxQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAu''@;'; put 'put ''bCk6UH1mdW5jdGlvbiB6NCh5LFApeyFQfHwhUC50aGVtZUVsZW1lbnRzfHwhUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9eS50aGVtZSYmKHkucmdiPUJkKFAudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbeS50aGVtZV0ucmdiLHkudGludHx8MCkpfWZ1bmN0aW9uIFBEKHksUCl7''@;'; put 'put ''dmFyIEw9eWMoKTtyZXR1cm4gdWkoTCwiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gVmMoeSxQKXtpZihQKXt2YXIgTD0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oUSl7Zm9yKHZhciByZT1RWzBdO3JlPD1RWzFdOysrcmUpbnVsbCE9''@;'; put 'put ''UFtyZV0mJisrTH0pLDAhPUwmJih1aSh5LCJCcnRCZWdpbkZtdHMiLGt1KEwpKSxbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9UVswXTtyZTw9UVsxXTsrK3JlKW51bGwhPVBbcmVdJiZ1aSh5LCJCcnRGbXQiLE8zKHJlLFBb''@;'; put 'put ''cmVdKSl9KSx1aSh5LCJCcnRFbmRGbXRzIikpfX0oTCx5LlNTRiksZnVuY3Rpb24gVTQoeSxQKXt2YXIgTD1QLmxlbmd0aDswIT1MJiYodWkoeSwiQnJ0QmVnaW5Gb250cyIsa3UoTCkpLFAuZm9yRWFjaChmdW5jdGlvbihRKXt1aSh5LCJCcnRGb250IixmdW5jdGlvbiB2Qyh5LFApe1B8fChQ''@;'; put 'put ''PWZyKDE1MykpLFAud3JpdGVfc2hpZnQoMiwyMCp5LnN6KSxmdW5jdGlvbiBZaCh5LFApe1B8fChQPWZyKDIpKSxQLndyaXRlX3NoaWZ0KDEsKHkuaXRhbGljPzI6MCl8KHkuc3RyaWtlPzg6MCl8KHkub3V0bGluZT8xNjowKXwoeS5zaGFkb3c/MzI6MCl8KHkuY29uZGVuc2U/NjQ6MCl8KHku''@;'; put 'put ''ZXh0ZW5kPzEyODowKSksUC53cml0ZV9zaGlmdCgxLDApfSh5LFApLFAud3JpdGVfc2hpZnQoMix5LmJvbGQ/NzAwOjQwMCk7dmFyIEw9MDsic3VwZXIiPT15LnZhbGlnbj9MPTE6InN1YiI9PXkudmFsaWduJiYoTD0yKSxQLndyaXRlX3NoaWZ0KDIsTCksUC53cml0ZV9zaGlmdCgxLHkudW5k''@;'; put 'put ''ZXJsaW5lfHwwKSxQLndyaXRlX3NoaWZ0KDEseS5mYW1pbHl8fDApLFAud3JpdGVfc2hpZnQoMSx5LmNoYXJzZXR8fDApLFAud3JpdGVfc2hpZnQoMSwwKSxSMih5LmNvbG9yLFApO3ZhciBRPTA7cmV0dXJuIm1ham9yIj09eS5zY2hlbWUmJihRPTEpLCJtaW5vciI9PXkuc2NoZW1lJiYoUT0y''@;'; put 'put ''KSxQLndyaXRlX3NoaWZ0KDEsUSksbmMoeS5uYW1lLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSx1aSh5LCJCcnRFbmRGb250cyIpKX0oTCwoeS5TdHlsZXN8fHt9KS5Gb250c3x8W10pLGZ1bmN0aW9uIF9DKHksUCl7dmFyIEw9UC5sZW5ndGg7MCE9TCYmKHVpKHks''@;'; put 'put ''IkJydEJlZ2luRmlsbHMiLGt1KEwpKSxQLmZvckVhY2goZnVuY3Rpb24oUSl7dWkoeSwiQnJ0RmlsbCIsZnVuY3Rpb24gQUQoeSxQKXtQfHwoUD1mcig4NCkpO3ZhciBMPVkyW3kucGF0dGVyblR5cGVdO251bGw9PUwmJihMPTQwKSxQLndyaXRlX3NoaWZ0KDQsTD0rTCk7dmFyIFE9MDtpZig0''@;'; put 'put ''MCE9TClmb3IoUjIoeS5mZ0NvbG9yfHx7aW5kZXg6NjR9LFApLFIyKHkuYmdDb2xvcnx8e2luZGV4OjY1fSxQKTtRPDEyOysrUSlQLndyaXRlX3NoaWZ0KDQsMCk7ZWxzZXtmb3IoO1E8NDsrK1EpUC53cml0ZV9zaGlmdCg0LDApO2Zvcig7UTwxMjsrK1EpUC53cml0ZV9zaGlmdCg0LDApfXJl''@;'; put 'put ''dHVybiBQLmxlbmd0aD5QLmw/UC5zbGljZSgwLFAubCk6UH0oUSkpfSksdWkoeSwiQnJ0RW5kRmlsbHMiKSl9KEwsKHkuU3R5bGVzfHx7fSkuRmlsbHN8fFtdKSxmdW5jdGlvbiBiQyh5LFApe3ZhciBMPVAubGVuZ3RoOzAhPUwmJih1aSh5LCJCcnRCZWdpbkJvcmRlcnMiLGt1KEwpKSxQLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oUSl7dWkoeSwiQnJ0Qm9yZGVyIixmdW5jdGlvbiBERCh5LFApe3JldHVybiBQfHwoUD1mcig1MSkpLFAud3JpdGVfc2hpZnQoMSwwKSxQMyh5LnRvcCxQKSxQMyh5LmJvdHRvbSxQKSxQMyh5LmxlZnQsUCksUDMoeS5yaWdodCxQKSxQMyhudWxsLFApLFAubGVuZ3Ro''@;'; put 'put ''PlAubD9QLnNsaWNlKDAsUC5sKTpQfShRKSl9KSx1aSh5LCJCcnRFbmRCb3JkZXJzIikpfShMLCh5LlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxmdW5jdGlvbiBJRCh5LFApe3ZhciBMPTE7aWYoUCYmKEw9UC5sZW5ndGgpLHVpKHksIkJydEJlZ2luQ2VsbFN0eWxlWEZzIixrdShMKSksdWko''@;'; put 'put ''eSwiQnJ0WEYiLE45KHtudW1GbXRJZDowLGZvbnRJZDowLGZpbGxJZDowLGJvcmRlcklkOjB9LDY1NTM1KSksUClmb3IodmFyIFE9MTtRPFAubGVuZ3RoOysrUSl1aSh5LCJCcnRYRiIsTjkoe251bUZtdElkOlBbUV0ubnVtRm10SWR8fDAsZm9udElkOlBbUV0uZm9udElkfHwwLGZpbGxJZDpQ''@;'; put 'put ''W1FdLmZpbGxJZHx8MCxib3JkZXJJZDpQW1FdLmJvcmRlcklkfHwwfSw2NTUzNSkpO3VpKHksIkJydEVuZENlbGxTdHlsZVhGcyIpfShMLFAuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiB5Qyh5LFApe3VpKHksIkJydEJlZ2luQ2VsbFhGcyIsa3UoUC5sZW5ndGgpKSxQLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oTCl7dWkoeSwiQnJ0WEYiLE45KEwsMCkpfSksdWkoeSwiQnJ0RW5kQ2VsbFhGcyIpfShMLFAuY2VsbFhmcyksZnVuY3Rpb24gTEQoeSxQKXt2YXIgTD0xO2lmKFAmJihMPVAubGVuZ3RoKSx1aSh5LCJCcnRCZWdpblN0eWxlcyIsa3UoTCkpLHVpKHksIkJydFN0eWxlIix0dSh7eGZJZDow''@;'; put 'put ''LGJ1aWx0aW5JZDowLG5hbWU6Ik5vcm1hbCJ9KSksUClmb3IodmFyIFE9MTtRPFAubGVuZ3RoOysrUSl1aSh5LCJCcnRTdHlsZSIsdHUoe3hmSWQ6USxidWlsdGluSWQ6MCxuYW1lOlBbUV0ubmFtZX0pKTt1aSh5LCJCcnRFbmRTdHlsZXMiKX0oTCxQLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24g''@;'; put 'put ''d0MoeSl7dWkoeSwiQnJ0QmVnaW5EWEZzIixrdSgwKSksdWkoeSwiQnJ0RW5kRFhGcyIpfShMKSxmdW5jdGlvbiBSRCh5KXt1aSh5LCJCcnRCZWdpblRhYmxlU3R5bGVzIixmdW5jdGlvbiBWOSh5LFAsTCl7dmFyIFE9ZnIoMjA1Mik7cmV0dXJuIFEud3JpdGVfc2hpZnQoNCx5KSxBZChQLFEp''@;'; put 'put ''LEFkKEwsUSksUS5sZW5ndGg+US5sP1Euc2xpY2UoMCxRLmwpOlF9KDAsIlRhYmxlU3R5bGVNZWRpdW05IiwiUGl2b3RTdHlsZU1lZGl1bTQiKSksdWkoeSwiQnJ0RW5kVGFibGVTdHlsZXMiKX0oTCksdWkoTCwiQnJ0RW5kU3R5bGVTaGVldCIpLEwuZW5kKCl9SGkuVEhFTUU9Imh0dHA6Ly9z''@;'; put 'put ''Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGhlbWUiO3ZhciBGRD1bIjwvYTpsdDE+IiwiPC9hOmRrMT4iLCI8L2E6bHQyPiIsIjwvYTpkazI+IiwiPC9hOmFjY2VudDE+IiwiPC9hOmFjY2VudDI+IiwiPC9hOmFjY2VudDM+Iiwi''@;'; put 'put ''PC9hOmFjY2VudDQ+IiwiPC9hOmFjY2VudDU+IiwiPC9hOmFjY2VudDY+IiwiPC9hOmhsaW5rPiIsIjwvYTpmb2xIbGluaz4iXTtmdW5jdGlvbiBqOSh5LFAsTCl7UC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZT1bXTt2YXIgUT17fTsoeVswXS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0''@;'; put 'put ''aW9uKHJlKXt2YXIgcGU9bG4ocmUpO3N3aXRjaChwZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmNhc2UiPC9hOnNyZ2JDbHI+IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOlEucmdiPXBlLnZhbDticmVhaztjYXNlIjxhOnN5''@;'; put 'put ''c0NsciI6US5yZ2I9cGUubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxhOmx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNh''@;'; put 'put ''c2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2VudDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6''@;'; put 'put ''Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PXBlWzBdLmNoYXJBdCgxKT8oUC50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtGRC5pbmRl''@;'; put 'put ''eE9mKHBlWzBdKV09USxRPXt9KTpRLm5hbWU9cGVbMF0uc2xpY2UoMyxwZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihMJiZMLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9ZnVuY3Rpb24gejkoKXt9ZnVuY3Rpb24g''@;'; put 'put ''SEQoKXt9dmFyIFo0PS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLE5EPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8sVkQ9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sU0M9LzxhOnRo''@;'; put 'put ''ZW1lRWxlbWVudHMoW14+XSopPltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBHbSh5LFApe2lmKCF5fHwwPT09eS5sZW5ndGgpcmV0dXJuIEdtKHJmKCkpO3ZhciBMLFE9e307aWYoIShMPXkubWF0Y2goU0MpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90''@;'; put 'put ''IGZvdW5kIGluIHRoZW1lIik7cmV0dXJuIGZ1bmN0aW9uIENDKHksUCxMKXt2YXIgUTtQLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIixaNCxqOV0sWyJmb250U2NoZW1lIixORCx6OV0sWyJmbXRTY2hlbWUiLFZELEhEXV0uZm9yRWFjaChmdW5jdGlvbihyZSl7aWYoIShRPXkubWF0''@;'; put 'put ''Y2gocmVbMV0pKSl0aHJvdyBuZXcgRXJyb3IocmVbMF0rIiBub3QgZm91bmQgaW4gdGhlbWVFbGVtZW50cyIpO3JlWzJdKFEsUCxMKX0pfShMWzBdLFEsUCksUS5yYXc9eSxRfWZ1bmN0aW9uIHJmKHksUCl7aWYoUCYmUC50aGVtZVhMU1gpcmV0dXJuIFAudGhlbWVYTFNYO2lmKHkmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgeS5yYXcpcmV0dXJuIHkucmF3O3ZhciBMPVtCbl07cmV0dXJuIExbTC5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLExbTC5sZW5n''@;'; put 'put ''dGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIsTFtMLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicsTFtMLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsTFtMLmxlbmd0aF09JzxhOmx0MT48YTpz''@;'; put 'put ''eXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxMW0wubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsTFtMLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLExbTC5sZW5n''@;'; put 'put ''dGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLExbTC5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLExbTC5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTki''@;'; put 'put ''Lz48L2E6YWNjZW50Mz4nLExbTC5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLExbTC5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLExbTC5sZW5ndGhdPSc8YTphY2NlbnQ2''@;'; put 'put ''PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLExbTC5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsTFtMLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxM''@;'; put 'put ''W0wubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLExbTC5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxMW0wubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsTFtMLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6ZWEgdHlw''@;'; put 'put ''ZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlw''@;'; put 'put ''dD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3''@;'; put 'put ''ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsTFtMLmxlbmd0aF09Jzxh''@;'; put 'put ''OmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxMW0wubGVuZ3RoXT0n''@;'; put 'put ''PGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLExbTC5sZW5n''@;'; put 'put ''dGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hl''@;'; put 'put ''cm9rZWUiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLExbTC5sZW5ndGhdPSc8''@;'; put 'put ''YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPics''@;'; put 'put ''TFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tv''@;'; put 'put ''b2xhIFBvdGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxMW0wubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLExbTC5sZW5ndGhdPSI8YTptaW5vckZvbnQ+IixMW0wubGVu''@;'; put 'put ''Z3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLExbTC5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxMW0wubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1''@;'; put 'put ''ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUz''@;'; put 'put ''Ii8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikhl''@;'; put 'put ''YnIiIHR5cGVmYWNlPSJBcmlhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJC''@;'; put 'put ''ZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp''@;'; put 'put ''cHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBz''@;'; put 'put ''Y3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNy''@;'; put 'put ''b3NvZnQgSGltYWxheWEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1''@;'; put 'put ''IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLExbTC5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9u''@;'; put 'put ''dCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLExbTC5sZW5ndGhd''@;'; put 'put ''PSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxMW0wubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlh''@;'; put 'put ''bCIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsTFtMLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsTFtMLmxlbmd0aF09IjwvYTptaW5vckZvbnQ+IixMW0wubGVu''@;'; put 'put ''Z3RoXT0iPC9hOmZvbnRTY2hlbWU+IixMW0wubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxMW0wubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxM''@;'; put 'put ''W0wubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLExbTC5sZW5ndGhdPSI8YTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48''@;'; put 'put ''L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3Mg''@;'; put 'put ''cG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAi''@;'; put 'put ''IHNjYWxlZD0iMSIvPicsTFtMLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLExbTC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxh''@;'; put 'put ''OnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAw''@;'; put 'put ''Ii8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsTFtMLmxlbmd0aF09IjwvYTpn''@;'; put 'put ''cmFkRmlsbD4iLExbTC5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBo''@;'; put 'put ''Q2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxMW0wubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBh''@;'; put 'put ''bGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLExbTC5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29s''@;'; put 'put ''aWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsTFtMLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsTFtMLmxlbmd0aF09IjxhOmVmZmVj''@;'; put 'put ''dFN0eWxlPiIsTFtMLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAw''@;'; put 'put ''MCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLExbTC5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixMW0wubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsTFtMLmxlbmd0aF09Jzxh''@;'; put 'put ''Om91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLExbTC5sZW5ndGhdPSI8L2E6ZWZm''@;'; put 'put ''ZWN0THN0PiIsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLExbTC5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAw''@;'; put 'put ''IiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixMW0wubGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0''@;'; put 'put ''aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+JyxMW0wubGVu''@;'; put 'put ''Z3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxMW0wubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsTFtMLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLExbTC5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLExbTC5sZW5ndGhd''@;'; put 'put ''PSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsTFtMLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxMW0wubGVuZ3RoXT0iPGE6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIg''@;'; put 'put ''dmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxMW0wubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRl''@;'; put 'put ''IHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48''@;'; put 'put ''L2E6c2NoZW1lQ2xyPjwvYTpncz4nLExbTC5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixMW0wubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsTFtMLmxlbmd0aF09Ijwv''@;'; put 'put ''YTpncmFkRmlsbD4iLExbTC5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsTFtMLmxlbmd0aF09IjxhOmdzTHN0PiIsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2''@;'; put 'put ''YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtMLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsTFtM''@;'; put 'put ''Lmxlbmd0aF09IjwvYTpnc0xzdD4iLExbTC5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsTFtMLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLExbTC5sZW5ndGhdPSI8''@;'; put 'put ''L2E6YmdGaWxsU3R5bGVMc3Q+IixMW0wubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLExbTC5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLExbTC5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLExbTC5sZW5ndGhdPSI8YTpzcERlZj4iLExbTC5sZW5ndGhdPSc8YTpzcFByLz48YTpi''@;'; put 'put ''b2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48''@;'; put 'put ''YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLExbTC5sZW5ndGhdPSI8L2E6c3BEZWY+IixMW0wubGVuZ3RoXT0iPGE6bG5EZWY+IixMW0wu''@;'; put 'put ''bGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+''@;'; put 'put ''PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxMW0wubGVuZ3RoXT0iPC9hOmxuRGVmPiIsTFtMLmxl''@;'; put 'put ''bmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLExbTC5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixMW0wubGVuZ3RoXT0iPC9hOnRoZW1lPiIsTC5qb2luKCIiKX1mdW5jdGlvbiBqRCh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiktNCxRPVtQXTtz''@;'; put 'put ''d2l0Y2goUCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpRWzFdPWZ1bmN0aW9uIFU5KHkpe3ZhciBQPXt9O3N3aXRjaChQLnhjbHJUeXBlPXkucmVhZF9zaGlmdCgyKSxQLm5UaW50U2hhZGU9eS5yZWFkX3NoaWZ0KDIpLFAueGNs''@;'; put 'put ''clR5cGUpe2Nhc2UgMDpjYXNlIDQ6eS5sKz00O2JyZWFrO2Nhc2UgMTpQLnhjbHJWYWx1ZT1mdW5jdGlvbiBxbSh5LFApe3JldHVybiBiYyh5LFApfSh5LDQpO2JyZWFrO2Nhc2UgMjpQLnhjbHJWYWx1ZT12bSh5KTticmVhaztjYXNlIDM6UC54Y2xyVmFsdWU9ZnVuY3Rpb24gTUMoeSl7cmV0''@;'; put 'put ''dXJuIHkucmVhZF9zaGlmdCg0KX0oeSl9cmV0dXJuIHkubCs9OCxQfSh5KTticmVhaztjYXNlIDY6UVsxXT1mdW5jdGlvbiBCRCh5LFApe3JldHVybiBiYyh5LFApfSh5LEwpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpRWzFdPXkucmVhZF9zaGlmdCgxPT09TD8xOjIpO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1ArIiAiK0wpfXJldHVybiBRfWZ1bmN0aW9uIFVEKHksUCl7UC5mb3JFYWNoKGZ1bmN0aW9uKEwpe3N3aXRjaChMWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEw''@;'; put 'put ''OmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmJyZWFrO2Nhc2UgMTM6eS5mb250JiZ5LmZvbnQuY29sb3ImJkFycmF5LmlzQXJyYXkoTFsxXS54Y2xyVmFsdWUpJiYoeS5mb250LmNvbG9yLnJnYj16MShMWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIGRhKHkpe3JldHVybiB5LzkxNDQwMCpu''@;'; put 'put ''Zn1mdW5jdGlvbiB4Qyh5LFApe3ZhciBMPXt9O2lmKHkucG9zKUwueD1kYSh5LnBvcy54KSxMLnk9ZGEoeS5wb3MueSk7ZWxzZXtpZigheS5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO0wucj15LmZyb20ucnx8MCxMLmM9eS5mcm9tLmN8fDAseS5mcm9tLmNPZmYmJihMLng9ZGEoeS5m''@;'; put 'put ''cm9tLmNPZmYpKSx5LmZyb20uck9mZiYmKEwueT1kYSh5LmZyb20uck9mZikpfWlmKHkuZXh0KUwudz1kYSh5LmV4dC54KSxMLmg9ZGEoeS5leHQueSk7ZWxzZXtpZigheS50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7TC5DPXkudG8uYyxMLlI9eS50by5yLHkudG8uY09mZiYmKEwuWD1kYSh5''@;'; put 'put ''LnRvLmNPZmYpKSx5LnRvLnJPZmYmJihMLlk9ZGEoeS50by5yT2ZmKSl9cmV0dXJuIEx9ZnVuY3Rpb24gc2YoeSxQKXt2YXIgTD17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoeS5wb3MpTC54PWRhKHkucG9zLngpLEwueT1kYSh5LnBvcy55KTtlbHNle2lmKCF5LmZyb20pdGhyb3ciYmFkIGFu''@;'; put 'put ''Y2hvciBzdGFydCI7TC54PVkxKFAseS5mcm9tLmMsIkMiKStkYSh5LmZyb20uY09mZiksTC55PVkxKFAseS5mcm9tLnIsIlIiKStkYSh5LmZyb20uck9mZil9aWYoeS5leHQpTC53PWRhKHkuZXh0LngpLEwuaD1kYSh5LmV4dC55KTtlbHNle2lmKCF5LnRvKXRocm93ImJhZCBhbmNob3IgZW5k''@;'; put 'put ''IjtMLnc9WTEoUCx5LnRvLmMsIkMiKStkYSh5LnRvLmNPZmYpLUwueCxMLmg9WTEoUCx5LnRvLnIsIlIiKStkYSh5LnRvLnJPZmYpLUwueX1yZXR1cm4gTH1mdW5jdGlvbiBLbSh5LFApe3ZhciBMPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaCh5LnR5''@;'; put 'put ''cGUpe2Nhc2UidHdvQ2VsbEFuY2hvciI6TC5yPXkuZnJvbS5yLEwueT1kYSh5LmZyb20uck9mZiksTC5SPXkudG8ucixMLlk9ZGEoeS50by5yT2ZmKSxMLmM9eS5mcm9tLmMsTC54PWRhKHkuZnJvbS5jT2ZmKSxMLkM9eS50by5jLEwuWD1kYSh5LnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2Vs''@;'; put 'put ''bEFuY2hvciI6TC5yPXkuZnJvbS5yLEwueT1kYSh5LmZyb20uck9mZik7dmFyIFE9RzIoUCxMLnIsTC55K2RhKHkuZXh0LnkpKTtMLlI9UVswXSxMLlk9UVsxXSxMLmM9eS5mcm9tLmMsTC54PWRhKHkuZnJvbS5jT2ZmKTt2YXIgcmU9Sm0oUCxMLmMsTC54K2RhKHkuZXh0LngpKTtMLkM9cmVb''@;'; put 'put ''MF0sTC5YPXJlWzFdO2JyZWFrO2Nhc2UiYWJzb2x1dGVBbmNob3IiOnZhciBwZT1HMihQLDAsZGEoeS5wb3MueSkpO0wucj1wZVswXSxMLnk9cGVbMV07dmFyIF9lPUcyKFAsTC5yLEwueStkYSh5LmV4dC55KSk7TC5SPV9lWzBdLEwuWT1fZVsxXTt2YXIgdmU9RzIoUCwwLGRhKHkucG9zLngp''@;'; put 'put ''KTtMLmM9dmVbMF0sTC54PXZlWzFdO3ZhciBTZT1HMihQLEwuYyxMLngrZGEoeS5leHQueCkpO0wuQz1TZVswXSxMLlg9U2VbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIit5LnR5cGV9cmV0dXJuIEx9ZnVuY3Rpb24gWG0oeSxQKXt2YXIgTD15LnRyaW0oKS5zcGxp''@;'; put 'put ''dCgvXHMqLFxzKi8pO1BbIiFwb3MiXT17YzorTFswXSx4OitMWzFdLHI6K0xbMl0seTorTFszXSxDOitMWzRdLFg6K0xbNV0sUjorTFs2XSxZOitMWzddfX1mdW5jdGlvbiBFQyh5LFAsTCl7dmFyIFE9LTE7aWYobnVsbCE9eS5SfHxudWxsIT15LkMpUT0wO2Vsc2V7aWYobnVsbD09eS54fHxu''@;'; put 'put ''dWxsPT15Lnl8fG51bGw9PXkud3x8bnVsbD09eS5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lmeSh5KTtRPTErMiohKHkuY3x8eS5yKX1pZihRIT1QKXtzd2l0Y2goUCl7Y2FzZSAwOmNhc2UgMTppZigzIT1RKWJyZWFrO3ZhciByZT1KbShMLHkuY3x8MCx5Lnh8''@;'; put 'put ''fDApO3kuYz1yZVswXSx5Lng9cmVbMV07dmFyIHBlPUcyKEwseS5yfHwwLHkueXx8MCk7eS5yPXBlWzBdLHkueT1wZVsxXTticmVhaztjYXNlIDM6aWYoMz09USlicmVhazt2YXIgX2U9eS5jfHwwLHZlPXkueHx8MDtkZWxldGUgeS5jLGRlbGV0ZSB5LngseS54PShfZT9ZNChMLF9lKTowKSt2''@;'; put 'put ''ZTt2YXIgU2U9eS5yfHwwLEhlPXkueXx8MDtkZWxldGUgeS5yLGRlbGV0ZSB5LnkseS55PShTZT9GMyhMLFNlKTowKStIZTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUH1zd2l0Y2goUCl7Y2FzZSAwOmlmKDA9PVEpYnJlYWs7dmFyIEJl''@;'; put 'put ''PUptKEwseS5jfHwwLCh5Lnh8fDApK3kudyk7ZGVsZXRlIHkudyx5LkM9QmVbMF0seS5YPUJlWzFdO3ZhciBHZT1HMihMLHkucnx8MCwoeS55fHwwKSt5LmgpO2RlbGV0ZSB5LmgseS5SPUdlWzBdLHkuWT1HZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPVEpYnJlYWs7dmFyIG50PXku''@;'; put 'put ''Q3x8MCxkdD15Llh8fDA7ZGVsZXRlIHkuQyxkZWxldGUgeS5YLHkudz1ZNChMLG50KStkdC0oeS5jP1k0KEwseS5jKTowKS0oeS54fHwwKTt2YXIgQ3Q9eS5SfHwwLGN0PXkuWXx8MDtkZWxldGUgeS5SLGRlbGV0ZSB5LlkseS5oPUYzKEwsQ3QpK2N0LSh5LnI/RjMoTCx5LnIpOjApLSh5Lnl8''@;'; put 'put ''fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitQfX19ZnVuY3Rpb24ga0MoeSl7dmFyIFA9W3kuY3x8MCxNYXRoLnJvdW5kKHkueHx8MCkseS5yfHwwLE1hdGgucm91bmQoeS55fHwwKV07cmV0dXJuKFA9UC5jb25jYXQoeS5oJiZ5Lnc/''@;'; put 'put ''W1BbMF0sTWF0aC5yb3VuZChQWzFdK3kudyksUFsyXSxNYXRoLnJvdW5kKFBbM10reS5oKV06W3kuQ3x8MCxNYXRoLnJvdW5kKHkuWHx8MCkseS5SfHwwLE1hdGgucm91bmQoeS5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIEYzKHksUCl7aWYoIXkpcmV0dXJuIDA7Zm9yKHZhciBMPTA7''@;'; put 'put ''LS1QPj0wOyl7dmFyIFE9KCh5WyIhcm93cyJdfHxbXSlbUF18fHt9KS5ocHg7bnVsbD09USYmKFE9KCh5WyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09USYmKFE9MjQpLEwrPVF9cmV0dXJuIEx9ZnVuY3Rpb24gWTQoeSxQKXtpZigheSlyZXR1cm4gMDtmb3IodmFy''@;'; put 'put ''IEw9MDstLVA+PTA7KXt2YXIgUT0oKHlbIiFjb2xzIl18fFtdKVtQXXx8e30pLndweDtpZihudWxsPT1RJiYoUT0oKHlbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1RKXt2YXIgcmU9e3djaDo4LjQzfTtwdShyZSkseVsiIWNvbHMiXSYmKHlbIiFjb2xzIl1bUF09''@;'; put 'put ''cmUpLFE9cmUud3B4fUwrPVF9cmV0dXJuIEx9ZnVuY3Rpb24gWTEoeSxQLEwpe3JldHVybiJDIj09TD9ZNCh5LFApOkYzKHksUCl9ZnVuY3Rpb24gRzIoeSxQLEwpe3ZhciBRPVtQLExdO2lmKCF5KXJldHVybiBRO2Zvcig7Oyl7dmFyIHJlPSh5WyIhcm93cyJdfHxbXSlbUVswXV18fHt9O2lm''@;'; put 'put ''KHJlLmhpZGRlbikrK1FbMF07ZWxzZXt2YXIgcGU9cmUuaHB4O2lmKG51bGw9PXBlJiYocGU9KCh5WyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09cGUmJihwZT1VMSgxNSkpLFFbMV08cGUpYnJlYWs7UVswXSsrLFFbMV0tPXBlfX1yZXR1cm4gUX1mdW5jdGlvbiBK''@;'; put 'put ''bSh5LFAsTCl7dmFyIFE9W1AsTF07aWYoIXkpcmV0dXJuIFE7Zm9yKDs7KXt2YXIgcmU9KHlbIiFjb2xzIl18fFtdKVtRWzBdXXx8e307aWYocmUuaGlkZGVufHwwPT09cmUud3B4KSsrUVswXTtlbHNle3ZhciBwZT1yZS53cHg7aWYobnVsbD09cGUmJihwZT0oKHlbIiFzaGVldEZvcm1hdCJd''@;'; put 'put ''fHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1wZSl7dmFyIF9lPXt3Y2g6OC40M307cHUoX2UpLHlbIiFjb2xzIl0mJih5WyIhY29scyJdW1FbMF1dPV9lKSxwZT1fZS53cHh9aWYoUVsxXTxwZSlicmVhaztRWzBdKyssUVsxXS09cGV9fXJldHVybiBRfWZ1bmN0aW9uIE91KHkpe3JldHVybigi''@;'; put 'put ''MDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiB5P3kudG9TdHJpbmcoMTYpOnkpKS5zbGljZSgtNil9ZnVuY3Rpb24gVWQoeSxQLEwpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUD8hIUw6ISFQOyJzdHJpbmciIT10eXBlb2YgUCYmKFA9ImNvbG9yIik7dmFyIHJlPSI8IitQKyIgIjtyZXR1cm4g''@;'; put 'put ''eS5hdXRvP3JlKydhdXRvPSIxIi8+Jzp5LmluZGV4JiZudWxsPT15LnJnYj9yZSsnaW5kZXhlZD0iJyt5LmluZGV4KyciLz4nOm51bGwhPXkudGhlbWU/cmUrJ3RoZW1lPSInK3kudGhlbWUrJyInKyh5LnRpbnQ/JyB0aW50PSInK3kudGludCsnIic6IiIpKyIvPiI6bnVsbCE9eS5yZ2I/cmUr''@;'; put 'put ''J3JnYj0iJysoUT8iRkYiOiIiKStPdSh5LnJnYikrJyIvPic6cmUrIi8+In1mdW5jdGlvbiBIMyh5LFApe2lmKCF5fHxudWxsPT15LnJnYilyZXR1cm4gUDtmb3IodmFyIEw9KCIwMDAwMDAiK3kucmdiLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpLFE9W0wuc2xpY2UoMCwyKSxMLnNsaWNlKDIs''@;'; put 'put ''NCksTC5zbGljZSg0LDYpXS5tYXAoZnVuY3Rpb24oX2Upe3JldHVybiBwYXJzZUludChfZSwxNil9KSxyZT0wO3JlPENyLmxlbmd0aDsrK3JlKXt2YXIgcGU9Q3JbcmVdO2lmKHBlWzBdPT1RWzBdJiZwZVsxXT09UVsxXSYmcGVbMl09PVFbMl0pcmV0dXJuIHJlfXJldHVybiBDci5sZW5ndGg8''@;'; put 'put ''NjQ/KENyLnB1c2goW1FbMF0sUVsxXSxRWzJdXSksQ3IubGVuZ3RoLTEpOlB9ZnVuY3Rpb24gVzEoeSl7dmFyIFA9WyIiLCIiLCIiXTtpZigheSlyZXR1cm5bXTt2YXIgTD0iIixRPXkmJnkucz9mdW5jdGlvbiBaRCh5KXt2YXIgUD1bIiIsIiJdO2lmKCF5KXJldHVybiBQO2lmKHkuc3omJihQ''@;'; put 'put ''WzBdKz0iJiIreS5zeixQWzFdPSImMTIiK1BbMV0pLHkubmFtZSYmKFBbMF0rPScmIicreS5uYW1lKycsUmVndWxhciInLFBbMV09JyYiLSxSZWd1bGFyIicrUFsxXSkseS5ib2xkJiYoUFswXSs9IiZCIixQWzFdPSImQiIrUFsxXSkseS51bmRlcmxpbmUpe3ZhciBMPTI9PXkudW5kZXJsaW5l''@;'; put 'put ''PyImRSI6IiZVIjtQWzBdKz1MLFBbMV09TCtQWzFdfXJldHVybiB5Lml0YWxpYyYmKFBbMF0rPSImSSIsUFsxXT0iJkkiK1BbMV0pLHkuY29sb3ImJm51bGwhPXkuY29sb3IucmdiJiYoUFswXSs9IiZLIitPdSh5LmNvbG9yLnJnYiksUFsxXSs9IiZLMDAwMDAwIikseS5zdHJpa2UmJihQWzBd''@;'; put 'put ''Kz0iJlMiLFBbMV09IiZTIitQWzFdKSwic3VwZXIiPT15LnZhbGlnbiYmKFBbMF0rPSImWCIsUFsxXT0iJlgiK1BbMV0pLCJzdWIiPT15LnZhbGlnbiYmKFBbMF0rPSImWSIsUFsxXT0iJlkiK1BbMV0pLFB9KHkucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHk/W3kseSx5XTpu''@;'; put 'put ''dWxsIT15LmZpcnN0fHxudWxsIT15LmV2ZW58fG51bGwhPXkub2RkPyhudWxsIT15Lm9kZCYmKFBbMF09VzEoeS5vZGQpWzBdKSx2b2lkIDA9PT15LmZpcnN0JiZQWzBdJiYoUFsxXT1QWzBdKSxudWxsIT15LmZpcnN0JiYoUFsxXT1XMSh5LmZpcnN0KVswXSksbnVsbCE9eS5ldmVuJiYoUFsy''@;'; put 'put ''XT1XMSh5LmV2ZW4pWzBdKSxQKTp5LmxlZnR8fHkuY2VudGVyfHx5LnJpZ2h0Pyh5LmxlZnQmJihMKz0iJkwiK1cxKHkubGVmdClbMF0pLHkuY2VudGVyJiYoTCs9IiZDIitXMSh5LmNlbnRlcilbMF0pLHkucmlnaHQmJihMKz0iJlIiK1cxKHkucmlnaHQpWzBdKSxbTCxMLExdKTpudWxsIT15''@;'; put 'put ''LnY/W0w9UVswXSt5LnYucmVwbGFjZSgvJi9nLCImJiIpK1FbMV0sTCxMXTpudWxsIT15Lnc/W0w9UVswXSt5LncrUVsxXSxMLExdOkFycmF5LmlzQXJyYXkoeS5SKT8oeS5SLmZvckVhY2goZnVuY3Rpb24ocmUpe0wrPVcxKHJlKVswXX0pLFtMLEwsTF0pOltdfXZhciBRbT17MToiTGV0dGVy''@;'; put 'put ''IiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQiLDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVudmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sWjk9YmUoUW0pO0hpLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxm''@;'; put 'put ''b3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVjdGlvbnMiO3ZhciB0Nj1TcigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxuczppcy5tYWluWzBdfSk7SGkuSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQv''@;'; put 'put ''MjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixIaS5EUkFXPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciO3ZhciBZRD17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRp''@;'; put 'put ''c3Q6InRvcCJ9LExDPXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRoYWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBSQygpe3ZhciB5PVtCbl07cmV0dXJuIHkucHVzaCgnPHhkcjp3c0RyIHhtbG5z''@;'; put 'put ''Onhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSx5LmpvaW4oIiIpfWZ1bmN0aW9uIE9D''@;'; put 'put ''KHkpe3ZhciBMLFA9eVsiIWRhdGEiXTtyZXR1cm4iYmFzZTY0Ij09PXlbIiFkYXRhdHlwZSJdPygoTD1QLm1hdGNoKC9eZGF0YTouKiwvKSkmJihQPVAuc2xpY2UoTFswXS5sZW5ndGgpKSxzZS5kZWNvZGUoUCkpOlB9SGkuVEFCTEU9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y''@;'; put 'put ''Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdGFibGUiO3ZhciBOMz0vPCg/Olx3KzopP3NoYXBlKD86W15cd11bXj5dKik/PihbXHNcU10qPyk8XC8oPzpcdys6KT9zaGFwZT4vZztmdW5jdGlvbiBxRCh5LFAsTCxRKXt2YXIgcmU9WzIxNjAwLDIxNjAwXSxwZT1bIm0wLDBs''@;'; put 'put ''MCIscmVbMV0scmVbMF0scmVbMV0scmVbMF0sIjB4ZSJdLmpvaW4oIiwiKSxfZT1bU3IoInhtbCIsbnVsbCx7InhtbG5zOnYiOldpLnYsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLngsInhtbG5zOm12IjpXaS5tdn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxTcigibzpzaGFwZWxheW91dCIs''@;'; put 'put ''U3IoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHZlPTEwMjQqeSxTZT1MfHxbXTtTZS5sZW5ndGg+MCYmX2UucHVzaChTcigidjpzaGFwZXR5cGUiLFtTcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksU3IoInY6cGF0aCIs''@;'; put 'put ''bnVsbCx7c2hhZG93b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksU3IoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29y''@;'; put 'put ''ZHNpemU6cmUuam9pbigiLCIpLCJvOnNwdCI6MjAxLHBhdGg6cGV9KSksU2UuZm9yRWFjaChmdW5jdGlvbihCZSl7Kyt2ZSxfZT1fZS5jb25jYXQoZnVuY3Rpb24gRkMoeSxQKXt2YXIgTD17aWQ6Il94MDAwMF9zIitQLHR5cGU6IiNfeDAwMDBfdDIwMSIsc3R5bGU6Im1zby13cmFwLXN0eWxl''@;'; put 'put ''OnRpZ2h0In07KCJSYWRpbyI9PXlbIiF0eXBlIl18fCJDaGVja2JveCI9PXlbIiF0eXBlIl18fCJMaXN0Ij09eVsiIXR5cGUiXXx8IkRyb3AiPT15WyIhdHlwZSJdKSYmKEwuc3Ryb2tlZD0iZiIpLCJMYWJlbCI9PXlbIiF0eXBlIl0mJihMLmZpbGxlZD0iZiIpO3ZhciBRPSIiO3kudCYmUENb''@;'; put 'put ''eVsiIXR5cGUiXV0mJihRPVBDW3lbIiF0eXBlIl1dLnJlcGxhY2UoLyMjIyMvLEhyKHkudCkpKTt2YXIgcmU9W107cmV0dXJuIHkubWFjcm8mJnJlLnB1c2goZnMoIng6Rm1sYU1hY3JvIix5Lm1hY3JvKSkseS5saW5rJiZyZS5wdXNoKGZzKCJ4OkZtbGFMaW5rIix5LmxpbmspKSx5LnZhbCYm''@;'; put 'put ''cmUucHVzaChmcygiUmFkaW8iPT15WyIhdHlwZSJdfHwiQ2hlY2tib3giPT15WyIhdHlwZSJdPyJ4OkNoZWNrZWQiOiJ4OlZhbCIsU3RyaW5nKHkudmFsKSkpLHkucmVmJiZyZS5wdXNoKGZzKCJ4OkZtbGFSYW5nZSIseS5yZWYpKSx5LnNlbCYmIkxpc3QiPT15WyIhdHlwZSJdJiZyZS5wdXNo''@;'; put 'put ''KGZzKCJ4OlNlbFR5cGUiLHkuc2VsKSkseS5taW4mJnJlLnB1c2goZnMoIng6TWluIixTdHJpbmcoeS5taW4pKSkseS5tYXgmJnJlLnB1c2goZnMoIng6TWF4IixTdHJpbmcoeS5tYXgpKSkseS5zdGVwJiZyZS5wdXNoKGZzKCJ4OkluYyIsU3RyaW5nKHkuc3RlcCkpKSx5LnBhZ2UmJnJlLnB1''@;'; put 'put ''c2goZnMoIng6UGFnZSIsU3RyaW5nKHkucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrUGEoTCkrIj4iXSkuY29uY2F0KEc5W3lbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFtRXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK3lbIiF0eXBlIl0rJyI+JyxmcygieDpB''@;'; put 'put ''bmNob3IiLGtDKHlbIiFwb3MiXSkpLGZzKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChyZSkuY29uY2F0KExaW3lbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oQmUsdmUpKX0pO3ZhciBIZT1QfHxbXTtyZXR1cm4gSGUu''@;'; put 'put ''bGVuZ3RoPjAmJl9lLnB1c2goU3IoInY6c2hhcGV0eXBlIixbU3IoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLFNyKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAy''@;'; put 'put ''Iixjb29yZHNpemU6cmUuam9pbigiLCIpLCJvOnNwdCI6MjAyLHBhdGg6cGV9KSksSGUuZm9yRWFjaChmdW5jdGlvbihCZSl7Kyt2ZSxfZT1fZS5jb25jYXQoZnVuY3Rpb24gSzQoeSxQLEwpe3ZhciBRPXNzKHlbMF0pLHJlPXlbMV0uZmlsbHx8e307eVsxXS5zJiYocmU9e3R5cGU6eVsxXS5z''@;'; put 'put ''LnBhdHRlcm5UeXBlfHwic29saWQifSx5WzFdLnMuZmdDb2xvciYmKHJlLmNvbG9yMj1yZS5jb2xvcjE9IiMiK091KHlbMV0ucy5mZ0NvbG9yLnJnYikpLHlbMV0ucy5iZ0NvbG9yJiYocmUuY29sb3IyPSIjIitPdSh5WzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIHBlPXtjb2xvcjI6cmUuY29s''@;'; put 'put ''b3IyfHwiI0JFRkY4MiIsdHlwZTpyZS50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1wZS50eXBlJiYocGUuYW5nbGU9Ii0xODAiKTt2YXIgX2U9ImdyYWRpZW50Ij09cGUudHlwZT9TcigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0p''@;'; put 'put ''Om51bGwsdmU9U3IoInY6ZmlsbCIsX2UscGUpLFNlPXt9O3lbMV0uc2hhZG93JiYoeVsxXS5zaGFkb3cuY29sb3ImJihTZS5jb2xvcj15WzFdLnNoYWRvdy5jb2xvcikseVsxXS5zaGFkb3cub24mJihTZS5vbj15WzFdLnNoYWRvdy5vbikpLFNlLm9ic2N1cmVkPSJ0Ijt2YXIgSGU9ITAsQmU9''@;'; put 'put ''ITAsR2U9eVsxXVsiIXBvcyJdP29uKHlbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gR2UmJihCZT1udWxsPT1HZS5SJiZudWxsPT1HZS5DJiZudWxsPT1HZS5YJiZudWxsPT1HZS5ZLEhlPSFHZS5yJiYhR2UuYyxFQyhHZSwwLEwpKSxbIjx2OnNoYXBlIitQYSh7aWQ6Il94MDAwMF9zIitQLHR5''@;'; put 'put ''cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyh5WzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOnJlLmNv''@;'; put 'put ''bG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOih5WzFdLnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIsdmUsU3IoInY6c2hhZG93IixudWxsLFNlKSxTcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4''@;'; put 'put ''dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4nLCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsSGU/Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsQmU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsZnMoIng6QW5jaG9yIixHZT9rQyhHZSk6eVsxXS5yYXdhbmNob3J8fFtR''@;'; put 'put ''LmMrMSwwLFEucisxLDAsUS5jKzMsMjAsUS5yKzUsMjBdLmpvaW4oIiwiKSksZnMoIng6QXV0b0ZpbGwiLCJGYWxzZSIpLGZzKCJ4OlJvdyIsU3RyaW5nKFEucikpLGZzKCJ4OkNvbHVtbiIsU3RyaW5nKFEuYykpLHlbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0''@;'; put 'put ''YT4iLCI8L3Y6c2hhcGU+Il19KEJlLHZlLFEpKX0pLF9lLnB1c2goIjwveG1sPiIpLF9lLmpvaW4oIiIpfXZhciBMWj17QnV0dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8eDpUZXh0VkFsaWduPkNl''@;'; put 'put ''bnRlcjwveDpUZXh0VkFsaWduPiJdLEdCb3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRv''@;'; put 'put ''TGluZT4iXSxSYWRpbzpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLENoZWNrYm94''@;'; put 'put ''OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpbIjx4OlNpemVXaXRoQ2Vs''@;'; put 'put ''bHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5nbGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OkRyb3BMaW5lcz40PC94''@;'; put 'put ''OkRyb3BMaW5lcz4iXSxMaXN0OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWluPiIsIjx4Ok1heD41PC94''@;'; put 'put ''Ok1heD4iLCI8eDpJbmM+MTwveDpJbmM+IiwiPHg6UGFnZT40PC94OlBhZ2U+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xsOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4iXX0sUEM9e0J1dHRvbjoi''@;'; put 'put ''PHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRi''@;'; put 'put ''b3g+IixHQm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+''@;'; put 'put ''PC9kaXY+PC92OnRleHRib3g+IixSYWRpbzoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPSdhdXRv''@;'; put 'put ''Jz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsTGFiZWw6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYw''@;'; put 'put ''JyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLENoZWNrYm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lk''@;'; put 'put ''YSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixzaGVldGpzOiJkYWZ1cSJ9LEc5PXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQiLz4nLCc8bzpsb2NrIHY6''@;'; put 'put ''ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLEdCb3g6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0i''@;'; put 'put ''dCIgdGV4dD0idCIvPiddLFNwaW46Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNjcm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0i''@;'; put 'put ''dCIvPiddLFJhZGlvOlsnPHY6cGF0aCBzaGFkb3dvaz0idCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86''@;'; put 'put ''bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxzaGVldGpzOltdfTtmdW5jdGlvbiBuNih5LFAsTCxRKXt2YXIgcmU9eyIhaWQiOnt9fSxwZT1bU3IoInhtbCIsbnVsbCx7InhtbG5zOnYiOldpLnYsInhtbG5zOm8iOldpLm8sInhtbG5zOngiOldpLnh9KS5yZXBsYWNlKC9cLz4v''@;'; put 'put ''LCI+IiksU3IoIm86c2hhcGVsYXlvdXQiLFNyKCJvOmlkbWFwIixudWxsLHsidjpleHQiOiJlZGl0IixkYXRhOjF9KSx7InY6ZXh0IjoiZWRpdCJ9KSwnPHY6c2hhcGV0eXBlIGlkPSJfeDAwMDBfdDc1IiBjb29yZHNpemU9IjIxNjAwLDIxNjAwIiBvOnNwdD0iNzUiIG86cHJlZmVycmVsYXRp''@;'; put 'put ''dmU9InQiIHBhdGg9Im1ANEA1bEA0QDExQDlAMTFAOUA1eGUiIGZpbGxlZD0iZiIgc3Ryb2tlZD0iZiI+JywnPHY6c3Ryb2tlIGpvaW5zdHlsZT0ibWl0ZXIiLz4nLCI8djpmb3JtdWxhcz4iLCc8djpmIGVxbj0iaWYgbGluZURyYXduIHBpeGVsTGluZVdpZHRoIDAiLz4nLCc8djpmIGVxbj0i''@;'; put 'put ''c3VtIEAwIDEgMCIvPicsJzx2OmYgZXFuPSJzdW0gMCAwIEAxIi8+JywnPHY6ZiBlcW49InByb2QgQDIgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxXaWR0aCIvPicsJzx2OmYgZXFuPSJwcm9kIEAzIDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBA''@;'; put 'put ''MCAwIDEiLz4nLCc8djpmIGVxbj0icHJvZCBANiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InN1bSBAOCAyMTYwMCAwIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAx''@;'; put 'put ''MCAyMTYwMCAwIi8+JywiPC92OmZvcm11bGFzPiIsJzx2OnBhdGggbzpleHRydXNpb25vaz0iZiIgZ3JhZGllbnRzaGFwZW9rPSJ0IiBvOmNvbm5lY3R0eXBlPSJyZWN0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgYXNwZWN0cmF0aW89InQiLz4nLCI8L3Y6c2hhcGV0eXBlPiJdLF9lPTE7''@;'; put 'put ''WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtRW3ZlXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtRW3ZlXVtTZV0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihIZSl7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShRW3ZlXVtTZV1bSGVdKSlmb3IodmFyIEJlPTA7QmU8UVt2ZV1bU2VdW0hlXS5sZW5ndGg7KytCZSlpZihRW3ZlXVtTZV1bSGVdW0JlXSl7dmFyIEdlPVFbdmVdW1NlXVtIZV1bQmVdO2lmKCJyZW1vdGUiPT1HZVsiIWRhdGF0eXBlIl0pdGhyb3ciQ2Fubm90IHVzZSBsaW5rZWQgaW1hZ2Ug''@;'; put 'put ''aW4gaGVhZGVyIG9yIGZvb3RlciI7Zm9yKDttbih5LCJ4bC9tZWRpYS9pbWFnZSIrX2UrIi5qcGciKTspKytfZTt5LmZpbGUoInhsL21lZGlhL2ltYWdlIitfZSsiLmpwZyIsT0MoR2UpLHtiaW5hcnk6ITB9KSx6byhyZSwtMSwiLi4vbWVkaWEvaW1hZ2UiK19lKyIuanBnIixIaS5JTUcpO3Zh''@;'; put 'put ''ciBudD0iX3gwMDAwX3MiKygxMDI1K0dlLl9jbnQpLGR0PSJwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDowO21hcmdpbi10b3A6MDt6LWluZGV4OiIrKEdlLl9jbnQrMSkrIjsiO2R0Kz0id2lkdGg6IitHZVsiIXBvcyJdLncrInB4OyIsZHQrPSJoZWlnaHQ6IitHZVsiIXBvcyJdLmgr''@;'; put 'put ''InB4OyI7dmFyIEN0PUhlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyJvZGQiIT09U2UmJihDdCs9U2UudG9VcHBlckNhc2UoKSksUVt2ZV1bU2VdW0hlXS5sZW5ndGg+MSYmKEN0Kz1CZSkscGUucHVzaChTcigidjpzaGFwZSIsWyc8djppbWFn''@;'; put 'put ''ZWRhdGEgbzpyZWxpZD0icklkJysoR2UuX2NudCsxKSsnIiBvOnRpdGxlPSJzaGVldGpzIi8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXS5qb2luKCIiKSx7aWQ6Q3QsIm86c3BpZCI6bnQsdHlwZToiI194MDAwMF90NzUiLHN0eWxlOmR0fSkpfX0pfSl9KSxwZS5w''@;'; put 'put ''dXNoKCI8L3htbD4iKSx5LmZpbGUoInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK0wrIkhGLnZtbCIscGUuam9pbigiIikpLHkuZmlsZSgieGwvZHJhd2luZ3MvX3JlbHMvdm1sRHJhd2luZyIrTCsiSEYudm1sLnJlbHMiLFhhKHJlKSl9SGkuQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv''@;'; put 'put ''cm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIE5DPVNyKCJjb21tZW50cyIsbnVsbCx7eG1sbnM6aXMubWFpblswXX0pO2Z1bmN0aW9uIFZDKHkpe3ZhciBQPVtCbixOQ10sTD1bXTtyZXR1cm4gUC5wdXNoKCI8YXV0aG9ycz4iKSx5LmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oUSl7UVsxXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9SHIocmUuYSk7TC5pbmRleE9mKHBlKT4tMXx8KEwucHVzaChwZSksUC5wdXNoKCI8YXV0aG9yPiIrcGUrIjwvYXV0aG9yPiIpKX0pfSksUC5wdXNoKCI8L2F1dGhvcnM+IiksUC5wdXNoKCI8Y29tbWVu''@;'; put 'put ''dExpc3Q+IikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7UC5wdXNoKCc8Y29tbWVudCByZWY9IicrUVswXSsnIiBhdXRob3JJZD0iJytMLmluZGV4T2YoSHIocmUuYSkpKyciPjx0ZXh0PicpLFAucHVzaChyZS5SP0poKHJlLlIpOmZzKCJ0IixudWxs''@;'; put 'put ''PT1yZS50PyIiOkhyKHJlLnQpKSksUC5wdXNoKCI8L3RleHQ+PC9jb21tZW50PiIpfSl9KSxQLnB1c2goIjwvY29tbWVudExpc3Q+IiksUC5sZW5ndGg+MiYmKFBbUC5sZW5ndGhdPSI8L2NvbW1lbnRzPiIsUFsxXT1QWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfXZhciBYRD13''@;'; put 'put ''YztmdW5jdGlvbiBlSSh5KXt2YXIgUD15YygpLEw9W107cmV0dXJuIHVpKFAsIkJydEJlZ2luQ29tbWVudHMiKSx1aShQLCJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIikseS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7TC5pbmRleE9mKHJlLmEpPi0xfHwo''@;'; put 'put ''TC5wdXNoKHJlLmEuc2xpY2UoMCw1NCkpLHVpKFAsIkJydENvbW1lbnRBdXRob3IiLGZ1bmN0aW9uIEpEKHkpe3JldHVybiBuYyh5LnNsaWNlKDAsNTQpKX0ocmUuYSkpKX0pfSksdWkoUCwiQnJ0RW5kQ29tbWVudEF1dGhvcnMiKSx1aShQLCJCcnRCZWdpbkNvbW1lbnRMaXN0IikseS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFEpe1FbMV0uZm9yRWFjaChmdW5jdGlvbihyZSl7cmUuaWF1dGhvcj1MLmluZGV4T2YocmUuYSk7dmFyIHBlPXtzOnNzKFFbMF0pLGU6c3MoUVswXSl9O3VpKFAsIkJydEJlZ2luQ29tbWVudCIsZnVuY3Rpb24gS0QoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoMzYp''@;'; put 'put ''KSxQLndyaXRlX3NoaWZ0KDQseVsxXS5pYXV0aG9yKSxEMSh5WzBdLFApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApLFAud3JpdGVfc2hpZnQoNCwwKSxQfShbcGUscmVdKSkscmUudCYmcmUudC5sZW5ndGg+MCYmdWkoUCwiQnJ0Q29t''@;'; put 'put ''bWVudFRleHQiLGZ1bmN0aW9uIGFyKHksUCl7dmFyIEw9ITE7cmV0dXJuIG51bGw9PVAmJihMPSEwLFA9ZnIoMjMrNCp5LnQubGVuZ3RoKSksUC53cml0ZV9zaGlmdCgxLDEpLG5jKHkudCxQKSxQLndyaXRlX3NoaWZ0KDQsMSksZnVuY3Rpb24ga2QoeSxQKXtQfHwoUD1mcig0KSksUC53cml0''@;'; put 'put ''ZV9zaGlmdCgyLHkuaWNofHwwKSxQLndyaXRlX3NoaWZ0KDIseS5pZm50fHwwKX0oe2ljaDowLGlmbnQ6MH0sUCksTD9QLnNsaWNlKDAsUC5sKTpQfShyZSkpLHVpKFAsIkJydEVuZENvbW1lbnQiKSxkZWxldGUgcmUuaWF1dGhvcn0pfSksdWkoUCwiQnJ0RW5kQ29tbWVudExpc3QiKSx1aShQ''@;'; put 'put ''LCJCcnRFbmRDb21tZW50cyIpLFAuZW5kKCl9dmFyICQyPSJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiLFJaPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtIaS5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3Vt''@;'; put 'put ''ZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIsSGkuTVM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBhZj1mdW5jdGlvbigpe3ZhciB5PS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxb''@;'; put 'put ''MS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csUD17cjowLGM6MH07ZnVuY3Rpb24gTChRLHJlLHBlLF9lKXt2YXIgdmU9ITEsU2U9ITE7MD09cGUubGVuZ3RoP1NlPSEwOiJbIj09cGUuY2hhckF0KDApJiYoU2U9ITAscGU9cGUuc2xpY2UoMSwtMSkp''@;'; put 'put ''LDA9PV9lLmxlbmd0aD92ZT0hMDoiWyI9PV9lLmNoYXJBdCgwKSYmKHZlPSEwLF9lPV9lLnNsaWNlKDEsLTEpKTt2YXIgSGU9cGUubGVuZ3RoPjA/MHxwYXJzZUludChwZSwxMCk6MCxCZT1fZS5sZW5ndGg+MD8wfHBhcnNlSW50KF9lLDEwKTowO3JldHVybiB2ZT9CZSs9UC5jOi0tQmUsU2U/''@;'; put 'put ''SGUrPVAucjotLUhlLHJlKyh2ZT8iIjoiJCIpK05zKEJlKSsoU2U/IiI6IiQiKStIcyhIZSl9cmV0dXJuIGZ1bmN0aW9uKHJlLHBlKXtyZXR1cm4gUD1wZSxyZS5yZXBsYWNlKHksTCl9fSgpLHE5PS8oXnxbXi5fQS1aMC05XSkoWyRdPykoW0EtWl17MSwyfXxbQS1XXVtBLVpdezJ9fFhbQS1F''@;'; put 'put ''XVtBLVpdfFhGW0EtRF0pKFskXT8pKDEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pKD8hW18uXChBLVphLXowLTldKS9nLEs5PWZ1bmN0aW9uKFAsTCl7cmV0dXJuIFAucmVwbGFjZShxOSxmdW5j''@;'; put 'put ''dGlvbihRLHJlLHBlLF9lLHZlLFNlKXt2YXIgSGU9amgoX2UpLShwZT8wOkwuYyksQmU9QjAoU2UpLSh2ZT8wOkwucik7cmV0dXJuIHJlKyJSIisoMD09QmU/IiI6dmU/QmUrMToiWyIrQmUrIl0iKSsiQyIrKDA9PUhlPyIiOnBlP0hlKzE6IlsiK0hlKyJdIil9KX07ZnVuY3Rpb24gakMoeSxQ''@;'; put 'put ''KXtyZXR1cm4geS5yZXBsYWNlKHE5LGZ1bmN0aW9uKEwsUSxyZSxwZSxfZSx2ZSl7cmV0dXJuIFErKCIkIj09cmU/cmUrcGU6TnMoamgocGUpK1AuYykpKygiJCI9PV9lP19lK3ZlOkhzKEIwKHZlKStQLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oTCxRLHJlKXtyZXR1''@;'; put 'put ''cm4gSHMoQjAoUSkrUC5yKSsiOiIrSHMoQjAocmUpK1Aucil9KX1mdW5jdGlvbiBuSSh5LFAsTCl7dmFyIHJlPVdzKFApLnMscGU9c3MoTCk7cmV0dXJuIGpDKHkse3I6cGUuci1yZS5yLGM6cGUuYy1yZS5jfSl9ZnVuY3Rpb24gRzEoeSl7cmV0dXJuIHkucmVwbGFjZSgvX3hsZm5cLi9nLCIi''@;'; put 'put ''KX1mdW5jdGlvbiBCYSh5KXt5LmwrPTF9ZnVuY3Rpb24gWmQoeSxQKXt2YXIgTD15LnJlYWRfc2hpZnQoMT09UD8xOjIpO3JldHVyblsxNjM4MyZMLEw+PjE0JjEsTD4+MTUmMV19ZnVuY3Rpb24gSjkoeSxQLEwpe3ZhciBRPTI7aWYoTCl7aWYoTC5iaWZmPj0yJiZMLmJpZmY8PTUpcmV0dXJu''@;'; put 'put ''IFE5KHkpOzEyPT1MLmJpZmYmJihRPTQpfXZhciByZT15LnJlYWRfc2hpZnQoUSkscGU9eS5yZWFkX3NoaWZ0KFEpLF9lPVpkKHksMiksdmU9WmQoeSwyKTtyZXR1cm57czp7cjpyZSxjOl9lWzBdLGNSZWw6X2VbMV0sclJlbDpfZVsyXX0sZTp7cjpwZSxjOnZlWzBdLGNSZWw6dmVbMV0sclJl''@;'; put 'put ''bDp2ZVsyXX19fWZ1bmN0aW9uIFE5KHkpe3ZhciBQPVpkKHksMiksTD1aZCh5LDIpLFE9eS5yZWFkX3NoaWZ0KDEpLHJlPXkucmVhZF9zaGlmdCgxKTtyZXR1cm57czp7cjpQWzBdLGM6USxjUmVsOlBbMV0sclJlbDpQWzJdfSxlOntyOkxbMF0sYzpyZSxjUmVsOkxbMV0sclJlbDpMWzJdfX19''@;'; put 'put ''ZnVuY3Rpb24gckkoeSxQLEwpe2lmKEwmJkwuYmlmZj49MiYmTC5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBWWih5KXt2YXIgUD1aZCh5LDIpLEw9eS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOlBbMF0sYzpMLGNSZWw6UFsxXSxyUmVsOlBbMl19fSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoTCYm''@;'; put 'put ''MTI9PUwuYmlmZj80OjIpLHJlPVpkKHksMik7cmV0dXJue3I6USxjOnJlWzBdLGNSZWw6cmVbMV0sclJlbDpyZVsyXX19ZnVuY3Rpb24gZXYoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntyOlAsYzoyNTUmTCxmUXVvdGVkOiEhKDE2Mzg0JkwpLGNS''@;'; put 'put ''ZWw6TD4+MTUsclJlbDpMPj4xNX19ZnVuY3Rpb24gcTIoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKSx5LnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uICRDKHksUCl7dmFyIEw9W3kucmVhZF9zaGlmdCgxKV07aWYoMTI9PVApc3dpdGNoKExbMF0pe2Nhc2UgMjpMWzBdPTQ7YnJlYWs7Y2FzZSA0''@;'; put 'put ''OkxbMF09MTY7YnJlYWs7Y2FzZSAwOkxbMF09MTticmVhaztjYXNlIDE6TFswXT0yfXN3aXRjaChMWzBdKXtjYXNlIDQ6TFsxXT1Tbyh5LDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1QJiYoeS5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6TFsxXT1Rb1t5W3kubF1dLHkubCs9MTI9PVA/NDo4''@;'; put 'put ''O2JyZWFrO2Nhc2UgMDp5LmwrPTg7YnJlYWs7Y2FzZSAxOkxbMV09bWEoeSk7YnJlYWs7Y2FzZSAyOkxbMV09VjIoeSwwLHtiaWZmOlA+MCYmUDw4PzI6UH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrTFswXSl9cmV0dXJuIEx9ZnVuY3Rpb24gaXYoeSxQ''@;'; put 'put ''LEwpe2Zvcih2YXIgUT15LnJlYWRfc2hpZnQoMTI9PUwuYmlmZj80OjIpLHJlPVtdLHBlPTA7cGUhPVE7KytwZSlyZS5wdXNoKCgxMj09TC5iaWZmP0pjOktoKSh5LDgpKTtyZXR1cm4gcmV9ZnVuY3Rpb24gZ0koeSxQLEwpe3ZhciBRPTAscmU9MDsxMj09TC5iaWZmPyhRPXkucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxyZT15LnJlYWRfc2hpZnQoNCkpOihyZT0xK3kucmVhZF9zaGlmdCgxKSxRPTEreS5yZWFkX3NoaWZ0KDIpKSxMLmJpZmY+PTImJkwuYmlmZjw4JiYoLS1RLDA9PS0tcmUmJihyZT0yNTYpKTtmb3IodmFyIHBlPTAsX2U9W107cGUhPVEmJihfZVtwZV09W10pOysrcGUpZm9yKHZhciB2''@;'; put 'put ''ZT0wO3ZlIT1yZTsrK3ZlKV9lW3BlXVt2ZV09JEMoeSxMLmJpZmYpO3JldHVybiBfZX1mdW5jdGlvbiBlNSh5LFAsTCl7cmV0dXJuIHkubCs9MixbZXYoeSldfWZ1bmN0aW9uIHQ1KHkpe3JldHVybiB5LmwrPTYsW119dmFyIG82PWU1LHZJPXQ1LGx2PXQ1LHM2PWU1O2Z1bmN0aW9uIHEwKHkp''@;'; put 'put ''e3JldHVybiB5LmwrPTIsW2hsKHkpLDEmeS5yZWFkX3NoaWZ0KDIpXX12YXIgY3Y9ZTUsdXY9cTAsX0k9dDUsYkk9ZTUsUUM9ZTUsQjM9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIsIj8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIs''@;'; put 'put ''Ij9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxHcz17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIFVaKHksUCxMKXtyZXR1cm4geS5sKyssTCYmMTI9PUwuYmlmZj9beS5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbeS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdChMJiYy''@;'; put 'put ''PT1MLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6YmN9LDM6e246IlB0Z0FkZCIsZjpCYX0sNDp7bjoiUHRnU3ViIixmOkJhfSw1OntuOiJQdGdNdWwiLGY6QmF9LDY6e246IlB0Z0RpdiIsZjpCYX0sNzp7bjoiUHRnUG93ZXIiLGY6QmF9LDg6e246IlB0Z0NvbmNhdCIsZjpCYX0sOTp7''@;'; put 'put ''bjoiUHRnTHQiLGY6QmF9LDEwOntuOiJQdGdMZSIsZjpCYX0sMTE6e246IlB0Z0VxIixmOkJhfSwxMjp7bjoiUHRnR2UiLGY6QmF9LDEzOntuOiJQdGdHdCIsZjpCYX0sMTQ6e246IlB0Z05lIixmOkJhfSwxNTp7bjoiUHRnSXNlY3QiLGY6QmF9LDE2OntuOiJQdGdVbmlvbiIsZjpCYX0sMTc6''@;'; put 'put ''e246IlB0Z1JhbmdlIixmOkJhfSwxODp7bjoiUHRnVXBsdXMiLGY6QmF9LDE5OntuOiJQdGdVbWludXMiLGY6QmF9LDIwOntuOiJQdGdQZXJjZW50IixmOkJhfSwyMTp7bjoiUHRnUGFyZW4iLGY6QmF9LDIyOntuOiJQdGdNaXNzQXJnIixmOkJhfSwyMzp7bjoiUHRnU3RyIixmOmZ1bmN0aW9u''@;'; put 'put ''IEdDKHksUCxMKXtyZXR1cm4geS5sKyssRmQoeSwwLEwpfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIENJKHksUCxMKXtyZXR1cm4geS5sKz01LHkubCs9Mix5LmwrPTI9PUwuYmlmZj8xOjQsWyJQVEdTSEVFVCJdfX0sMjc6e246IlB0Z0VuZFNoZWV0IixmOmZ1bmN0aW9uIGR2KHks''@;'; put 'put ''UCxMKXtyZXR1cm4geS5sKz0yPT1MLmJpZmY/NDo1LFsiUFRHRU5EU0hFRVQiXX19LDI4OntuOiJQdGdFcnIiLGY6ZnVuY3Rpb24gSjQoeSl7cmV0dXJuIHkubCsrLFFvW3kucmVhZF9zaGlmdCgxKV19fSwyOTp7bjoiUHRnQm9vbCIsZjpmdW5jdGlvbiBRNCh5KXtyZXR1cm4geS5sKyssMCE9''@;'; put 'put ''PXkucmVhZF9zaGlmdCgxKX19LDMwOntuOiJQdGdJbnQiLGY6ZnVuY3Rpb24gTWkoeSl7cmV0dXJuIHkubCsrLHkucmVhZF9zaGlmdCgyKX19LDMxOntuOiJQdGdOdW0iLGY6ZnVuY3Rpb24gV0MoeSl7cmV0dXJuIHkubCsrLG1hKHkpfX0sMzI6e246IlB0Z0FycmF5IixmOmZ1bmN0aW9uIGFJ''@;'; put 'put ''KHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41O3JldHVybiB5LmwrPTI9PUwuYmlmZj82OjEyPT1MLmJpZmY/MTQ6NyxbUV19fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBmSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sXSk+PjU7eS5sKz0xO3ZhciByZT15LnJlYWRfc2hpZnQoTCYm''@;'; put 'put ''TC5iaWZmPD0zPzE6Mik7cmV0dXJuW2J2W3JlXSxfdltyZV0sUV19fSwzNDp7bjoiUHRnRnVuY1ZhciIsZjpmdW5jdGlvbiBwSSh5LFAsTCl7dmFyIFE9eVt5LmwrK10scmU9eS5yZWFkX3NoaWZ0KDEpLHBlPUwmJkwuYmlmZjw9Mz9bODg9PVE/LTE6MCx5LnJlYWRfc2hpZnQoMSldOmZ1bmN0''@;'; put 'put ''aW9uIFlDKHkpe3JldHVyblt5W3kubCsxXT4+NywzMjc2NyZ5LnJlYWRfc2hpZnQoMildfSh5KTtyZXR1cm5bcmUsKDA9PT1wZVswXT9fdjprSSlbcGVbMV1dXX19LDM1OntuOiJQdGdOYW1lIixmOmZ1bmN0aW9uIHFDKHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoMSk+Pj41JjMscGU9eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KCFMfHxMLmJpZmY+PTg/NDoyKTtzd2l0Y2goTC5iaWZmKXtjYXNlIDI6eS5sKz01O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6eS5sKz04O2JyZWFrO2Nhc2UgNTp5LmwrPTEyfXJldHVybltRLDAscGVdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBaQyh5LFAsTCl7dmFyIFE9''@;'; put 'put ''KDk2JnlbeS5sXSk+PjU7cmV0dXJuIHkubCs9MSxbUSxySSh5LDAsTCldfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24galooeSxQLEwpe3JldHVyblsoOTYmeVt5LmwrK10pPj41LEo5KHksMCxMKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBaWih5LFAsTCl7dmFyIFE9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiB5LmwrPUwmJjI9PUwuYmlmZj8zOjQsW1EseS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6YmN9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpiY30sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rp''@;'; put 'put ''b24gc3YoeSxQLEwpe3JldHVyblt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gbUkoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4geS5sKz00LEwuYmlmZjw4''@;'; put 'put ''JiZ5LmwtLSwxMj09TC5iaWZmJiYoeS5sKz0yKSxbUV19fSw0Mzp7bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBpSSh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NTtyZXR1cm4geS5sKz1MJiZMLmJpZmY+OD8xMjpMLmJpZmY8OD82OjgsW1FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVu''@;'; put 'put ''Y3Rpb24gZEkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3kubCs9MTt2YXIgcmU9ZnVuY3Rpb24gdHYoeSxQLEwpe3ZhciBRPUwmJkwuYmlmZj9MLmJpZmY6ODtpZihRPj0yJiZRPD01KXJldHVybiBmdW5jdGlvbiBCWih5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hp''@;'; put 'put ''ZnQoMSksUT0oMzI3NjgmUCk+PjE1LHJlPSgxNjM4NCZQKT4+MTQ7cmV0dXJuIFAmPTE2MzgzLDE9PVEmJlA+PTgxOTImJihQLT0xNjM4NCksMT09cmUmJkw+PTEyOCYmKEwtPTI1Nikse3I6UCxjOkwsY1JlbDpyZSxyUmVsOlF9fSh5KTt2YXIgcmU9eS5yZWFkX3NoaWZ0KFE+PTEyPzQ6Miks''@;'; put 'put ''cGU9eS5yZWFkX3NoaWZ0KDIpLF9lPSgxNjM4NCZwZSk+PjE0LHZlPSgzMjc2OCZwZSk+PjE1O2lmKHBlJj0xNjM4MywxPT12ZSlmb3IoO3JlPjUyNDI4NzspcmUtPTEwNDg1NzY7aWYoMT09X2UpZm9yKDtwZT44MTkxOylwZS09MTYzODQ7cmV0dXJue3I6cmUsYzpwZSxjUmVsOl9lLHJSZWw6''@;'; put 'put ''dmV9fSh5LDAsTCk7cmV0dXJuW1EscmVdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIHNJKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPWZ1bmN0aW9uIE5aKHksUCxMKXtpZihMLmJpZmY8OClyZXR1cm4gUTkoeSk7dmFyIFE9eS5yZWFkX3NoaWZ0KDEyPT1MLmJpZmY/''@;'; put 'put ''NDoyKSxyZT15LnJlYWRfc2hpZnQoMTI9PUwuYmlmZj80OjIpLHBlPVpkKHksMiksX2U9WmQoeSwyKTtyZXR1cm57czp7cjpRLGM6cGVbMF0sY1JlbDpwZVsxXSxyUmVsOnBlWzJdfSxlOntyOnJlLGM6X2VbMF0sY1JlbDpfZVsxXSxyUmVsOl9lWzJdfX19KHksMCxMKTtyZXR1cm5bUSxyZV19''@;'; put 'put ''fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gYTYoeSl7cmV0dXJuW3kucmVhZF9zaGlmdCgxKT4+PjUmMyx5LnJlYWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiBTSSh5KXtyZXR1cm5beS5yZWFkX3NoaWZ0KDEpPj4+NSYzLHkucmVhZF9zaGlm''@;'; put 'put ''dCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6ZnVuY3Rpb24gS0MoeSxQLEwpe3JldHVybiA1PT1MLmJpZmY/ZnVuY3Rpb24gb3YoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpPj4+NSYzLEw9eS5yZWFkX3NoaWZ0KDIsImkiKTt5LmwrPTg7dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiB5''@;'; put 'put ''LmwrPTEyLFtQLEwsUV19KHkpOlt5LnJlYWRfc2hpZnQoMSk+Pj41JjMseS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCg0KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gaEkoeSxQLEwpe3ZhciBRPSg5NiZ5W3kubF0pPj41O3kubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIp''@;'; put 'put ''O3JldHVybiBMJiY1PT1MLmJpZmYmJih5LmwrPTEyKSxbUSxyZSxySSh5LDAsTCldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlvbiB6Qyh5LFAsTCl7dmFyIFE9KDk2JnlbeS5sKytdKT4+NSxyZT15LnJlYWRfc2hpZnQoMiwiaSIpO2lmKEwmJjU9PT1MLmJpZmYpeS5sKz0xMjtyZXR1''@;'; put 'put ''cm5bUSxyZSxKOSh5LDAsTCldfX0sNjA6e246IlB0Z1JlZkVycjNkIixmOmZ1bmN0aW9uIGF2KHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyKSxwZT00O2lmKEwpc3dpdGNoKEwuYmlmZil7Y2FzZSA1OnBlPTE1O2JyZWFrO2Nhc2UgMTI6cGU9Nn1yZXR1''@;'; put 'put ''cm4geS5sKz1wZSxbUSxyZV19fSw2MTp7bjoiUHRnQXJlYUVycjNkIixmOmZ1bmN0aW9uIG9JKHksUCxMKXt2YXIgUT0oOTYmeVt5LmwrK10pPj41LHJlPXkucmVhZF9zaGlmdCgyKSxwZT04O2lmKEwpc3dpdGNoKEwuYmlmZil7Y2FzZSA1OnkubCs9MTIscGU9NjticmVhaztjYXNlIDEyOnBl''@;'; put 'put ''PTEyfXJldHVybiB5LmwrPXBlLFtRLHJlXX19LDI1NTp7fX0sTUk9ezY0OjMyLDk2OjMyLDY1OjMzLDk3OjMzLDY2OjM0LDk4OjM0LDY3OjM1LDk5OjM1LDY4OjM2LDEwMDozNiw2OTozNywxMDE6MzcsNzA6MzgsMTAyOjM4LDcxOjM5LDEwMzozOSw3Mjo0MCwxMDQ6NDAsNzM6NDEsMTA1OjQx''@;'; put 'put ''LDc0OjQyLDEwNjo0Miw3NTo0MywxMDc6NDMsNzY6NDQsMTA4OjQ0LDc3OjQ1LDEwOTo0NSw3ODo0NiwxMTA6NDYsNzk6NDcsMTExOjQ3LDg4OjM0LDEyMDozNCw4OTo1NywxMjE6NTcsOTA6NTgsMTIyOjU4LDkxOjU5LDEyMzo1OSw5Mjo2MCwxMjQ6NjAsOTM6NjEsMTI1OjYxfTshZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIHkgaW4gTUkpR3NbeV09R3NbTUlbeV1dfSgpO3ZhciB0Uz17MTp7bjoiUHRnRWxmTGVsIixmOnEwfSwyOntuOiJQdGdFbGZSdyIsZjpiSX0sMzp7bjoiUHRnRWxmQ29sIixmOm82fSw2OntuOiJQdGdFbGZSd1YiLGY6UUN9LDc6e246IlB0Z0VsZkNvbFYiLGY6czZ9LDEw''@;'; put 'put ''OntuOiJQdGdFbGZSYWRpY2FsIixmOmN2fSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6X0l9LDEzOntuOiJQdGdFbGZDb2xTIixmOnZJfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6bHZ9LDE2OntuOiJQdGdFbGZSYWRpY2FsTGVsIixmOnV2fSwyNTp7bjoiUHRnTGlzdCIsZjpmdW5jdGlvbiB5''@;'; put 'put ''SSh5KXt5LmwrPTI7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXkucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMik7cmV0dXJue2l4dGk6UCxjb2x0eXBlOjMmTCxydDpCM1tMPj4yJjMxXSxpZHg6USxjOnJlLEM6cGV9''@;'; put 'put ''fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiB3SSh5KXtyZXR1cm4geS5sKz0yLFt5LnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxsNj17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gZVMoeSl7cmV0dXJuIHkubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1''@;'; put 'put ''bmN0aW9uIFYzKHksUCxMKXt2YXIgUT0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPUwmJjI9PUwuYmlmZj8zOjQsW1FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIG52KHksUCxMKXt2YXIgUT0yNTUmeVt5LmwrMV0/MTowO3JldHVybiB5LmwrPTIsW1EseS5yZWFkX3NoaWZ0''@;'; put 'put ''KEwmJjI9PUwuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gcjYoeSxQLEwpe3kubCs9Mjtmb3IodmFyIFE9eS5yZWFkX3NoaWZ0KEwmJjI9PUwuYmlmZj8xOjIpLHJlPVtdLHBlPTA7cGU8PVE7KytwZSlyZS5wdXNoKHkucmVhZF9zaGlmdChMJiYyPT1MLmJp''@;'; put 'put ''ZmY/MToyKSk7cmV0dXJuIHJlfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gbEkoeSxQLEwpe3ZhciBRPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9MixbUSx5LnJlYWRfc2hpZnQoTCYmMj09TC5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJTdW0iLGY6ZnVuY3Rpb24g''@;'; put 'put ''elooeSxQLEwpe3kubCs9TCYmMj09TC5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOmZ1bmN0aW9uIFVDKHkpe3ZhciBQPTEmeVt5LmwrMV07cmV0dXJuIHkubCs9NCxbUCwxXX19LDY0OntuOiJQdGdBdHRyU3BhY2UiLGY6ZnVuY3Rpb24gdUkoeSl7cmV0dXJuIHkucmVhZF9z''@;'; put 'put ''aGlmdCgyKSxxMih5KX19LDY1OntuOiJQdGdBdHRyU3BhY2VTZW1pIixmOmZ1bmN0aW9uIHJ2KHkpe3JldHVybiB5LnJlYWRfc2hpZnQoMikscTIoeSl9fSwxMjg6e246IlB0Z0F0dHJJZkVycm9yIixmOmZ1bmN0aW9uIGNJKHkpe3ZhciBQPTI1NSZ5W3kubCsxXT8xOjA7cmV0dXJuIHkubCs9''@;'; put 'put ''MixbUCx5LnJlYWRfc2hpZnQoMildfX0sMjU1Ont9fTtmdW5jdGlvbiBqMyh5LFAsTCxRLHJlKXtpZihRLmJpZmY8OClyZXR1cm4gYmMoeSxQKTtmb3IodmFyIHBlPXkubCtQLF9lPVtdLHZlPTA7dmUhPT1MLmxlbmd0aDsrK3ZlKXN3aXRjaChMW3ZlXVswXSl7Y2FzZSJQdGdBcnJheSI6TFt2''@;'; put 'put ''ZV1bMV09Z0koeSwwLFEpLF9lLnB1c2goTFt2ZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6TFt2ZV1bMl09aXYoeSwwLFEpLF9lLnB1c2goTFt2ZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpRJiYxMj09US5iaWZmJiYoTFt2ZV1bMV1bMV09eS5yZWFkX3NoaWZ0KDQpLF9lLnB1c2go''@;'; put 'put ''TFt2ZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitMW3ZlXVswXX1yZXR1cm4gUD1wZS15LmwsIXJlJiYwIT09UCYmX2UucHVzaChiYyh5LFApKSxfZX1m''@;'; put 'put ''dW5jdGlvbiBuNSh5LFAsTCl7Zm9yKHZhciByZSxwZSxRPXkubCtQLF9lPVtdO1EhPXkubDspUD1RLXkubCxyZT1Hc1twZT15W3kubF1dLCgyND09PXBlfHwyNT09PXBlKSYmKHJlPSgyND09PXBlP3RTOmw2KVt5W3kubCsxXV0pLHJlJiZyZS5mP19lLnB1c2goW3JlLm4scmUuZih5LFAsTCld''@;'; put 'put ''KTpiYyh5LFApO3JldHVybiBfZX1mdW5jdGlvbiBZWih5KXtmb3IodmFyIFA9W10sTD0wO0w8eS5sZW5ndGg7KytMKXtmb3IodmFyIFE9eVtMXSxyZT1bXSxwZT0wO3BlPFEubGVuZ3RoOysrcGUpe3ZhciBfZT1RW3BlXTtyZS5wdXNoKF9lPzI9PT1fZVswXT8nIicrX2VbMV0ucmVwbGFjZSgv''@;'; put 'put ''Ii9nLCciIicpKyciJzpfZVsxXToiIil9UC5wdXNoKHJlLmpvaW4oIiwiKSl9cmV0dXJuIFAuam9pbigiOyIpfWw2WzMzXT1sNlszMl07dmFyIGM2PXtQdGdBZGQ6IisiLFB0Z0NvbmNhdDoiJiIsUHRnRGl2OiIvIixQdGdFcToiPSIsUHRnR2U6Ij49IixQdGdHdDoiPiIsUHRnTGU6Ijw9IixQ''@;'; put 'put ''dGdMdDoiPCIsUHRnTXVsOiIqIixQdGdOZToiPD4iLFB0Z1Bvd2VyOiJeIixQdGdTdWI6Ii0ifSx4ST1uZXcgUmVnRXhwKC9bXlx3XHU0RTAwLVx1OUZGRlx1MzA0MC1cdTMwRkZdLyk7ZnVuY3Rpb24gdTYoeSxQLEwpe2lmKCF5KXJldHVybiJTSDMzVEpTRVJSMCI7aWYoTC5iaWZmPjgmJigh''@;'; put 'put ''eS5YVEl8fCF5LlhUSVtQXSkpcmV0dXJuIHkuU2hlZXROYW1lc1tQXTtpZigheS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgUT15LlhUSVtQXTtpZihMLmJpZmY8OClyZXR1cm4gUD4xZTQmJihQLT02NTUzNiksUDwwJiYoUD0tUCksMD09UD8iIjp5LlhUSVtQLTFdO2lmKCFRKXJldHVy''@;'; put 'put ''biJTSDMzVEpTRVJSMSI7dmFyIHJlPSIiO2lmKEwuYmlmZj44KXN3aXRjaCh5W1FbMF1dWzBdKXtjYXNlIDM1NzpyZXR1cm4gcmU9LTE9PVFbMV0/IiNSRUYiOnkuU2hlZXROYW1lc1tRWzFdXSxRWzFdPT1RWzJdP3JlOnJlKyI6Iit5LlNoZWV0TmFtZXNbUVsyXV07Y2FzZSAzNTg6cmV0dXJu''@;'; put 'put ''IG51bGwhPUwuU0lEP3kuU2hlZXROYW1lc1tMLlNJRF06IlNIMzNUSlNTQU1FIit5W1FbMF1dWzBdO2RlZmF1bHQ6cmV0dXJuIlNIMzNUSlNTUkMiK3lbUVswXV1bMF19c3dpdGNoKHlbUVswXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4gcmU9LTE9PVFbMV0/IiNSRUYiOnkuU2hlZXROYW1l''@;'; put 'put ''c1tRWzFdXXx8IlNIMzNUSlNFUlIzIixRWzFdPT1RWzJdP3JlOnJlKyI6Iit5LlNoZWV0TmFtZXNbUVsyXV07Y2FzZSAxNDg0OTpyZXR1cm4geVtRWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24ocGUpe3JldHVybiBwZS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiB5W1FbMF1d''@;'; put 'put ''WzBdWzNdPyhyZT0tMT09UVsxXT8iI1JFRiI6eVtRWzBdXVswXVszXVtRWzFdXXx8IlNIMzNUSlNFUlI0IixRWzFdPT1RWzJdP3JlOnJlKyI6Iit5W1FbMF1dWzBdWzNdW1FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBjZih5LFAsTCl7cmV0dXJuIGZ1bmN0aW9uIGh2KHksUCl7aWYo''@;'; put 'put ''ISh5fHxQJiZQLmJpZmY8PTUmJlAuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuLyNSRUYvLnRlc3QoeSk/eTp4SS50ZXN0KHkpPyInIit5KyInIjp5fSh1Nih5LFAsTCksTCl9ZnVuY3Rpb24geGwoeSxQLEwsUSxyZSxwZSl7dmFyIEhlLEJlLEdl''@;'; put 'put ''LEN0LF9lPXJlJiZyZS5iaWZmfHw4LHZlPXBlJiZudWxsIT1QP1A6e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxTZT1bXSxudD0wLGR0PTAsY3Q9IiI7aWYoIXlbMF18fCF5WzBdWzBdKXJldHVybiIiO2Zvcih2YXIgYnQ9LTEsRnQ9IiIsRXQ9MCxUdD15WzBdLmxlbmd0aDtFdDxUdDsrK0V0''@;'; put 'put ''KXt2YXIgWnQ9eVswXVtFdF07c3dpdGNoKFp0WzBdKXtjYXNlIlB0Z1VtaW51cyI6U2UucHVzaCgiLSIrU2UucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOlNlLnB1c2goIisiK1NlLnBvcCgpKTticmVhaztjYXNlIlB0Z1BlcmNlbnQiOlNlLnB1c2goU2UucG9wKCkrIiUiKTticmVhaztj''@;'; put 'put ''YXNlIlB0Z0FkZCI6Y2FzZSJQdGdDb25jYXQiOmNhc2UiUHRnRGl2IjpjYXNlIlB0Z0VxIjpjYXNlIlB0Z0dlIjpjYXNlIlB0Z0d0IjpjYXNlIlB0Z0xlIjpjYXNlIlB0Z0x0IjpjYXNlIlB0Z011bCI6Y2FzZSJQdGdOZSI6Y2FzZSJQdGdQb3dlciI6Y2FzZSJQdGdTdWIiOmlmKEhlPVNlLnBv''@;'; put 'put ''cCgpLEJlPVNlLnBvcCgpLGJ0Pj0wKXtzd2l0Y2goeVswXVtidF1bMV1bMF0pe2Nhc2UgMDpGdD1ibigiICIseVswXVtidF1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpGdD1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIiLHJlLldURil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK3lbMF1bYnRdWzFdWzBdKX1CZSs9RnQsYnQ9LTF9U2UucHVzaChCZStjNltadFswXV0rSGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOkhlPVNlLnBvcCgpLEJlPVNlLnBvcCgpLFNlLnB1c2goQmUrIiAiK0hlKTticmVhaztjYXNlIlB0Z1Vu''@;'; put 'put ''aW9uIjpIZT1TZS5wb3AoKSxCZT1TZS5wb3AoKSxTZS5wdXNoKEJlKyIsIitIZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6SGU9U2UucG9wKCksQmU9U2UucG9wKCksU2UucHVzaChCZSsiOiIrSGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdB''@;'; put 'put ''dHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29w''@;'; put 'put ''IjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpHZT1sdShadFsxXVsxXSx2ZSxyZSksU2UucHVzaChMMihHZSxfZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6R2U9TD9sdShadFsxXVsx''@;'; put 'put ''XSxMLHJlKTpadFsxXVsxXSxTZS5wdXNoKEwyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdSZWYzZCI6bnQ9WnRbMV1bMV0sR2U9bHUoWnRbMV1bMl0sdmUscmUpLGN0PWNmKFEsbnQscmUpLFNlLnB1c2goY3QrIiEiK0wyKEdlLF9lKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNW''@;'; put 'put ''YXIiOnZhciBLbj1adFsxXVswXSx1bj1adFsxXVsxXTtLbnx8KEtuPTApO3ZhciBxbj0wPT0oS24mPTEyNyk/W106U2Uuc2xpY2UoLUtuKTtTZS5sZW5ndGgtPUtuLCJVc2VyIj09PXVuJiYodW49cW4uc2hpZnQoKSksU2UucHVzaCh1bisiKCIrcW4uam9pbigiLCIpKyIpIik7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJQdGdCb29sIjpTZS5wdXNoKFp0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0iOlNlLnB1c2goU3RyaW5nKFp0WzFdKSk7YnJlYWs7Y2FzZSJQdGdTdHIiOlNlLnB1c2goJyInK1p0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nh''@;'; put 'put ''c2UiUHRnRXJyIjpTZS5wdXNoKFp0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpDdD1ocihadFsxXVsxXSxMP3tzOkx9OnZlLHJlKSxTZS5wdXNoKG1pKEN0LHJlKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpDdD1ocihadFsxXVsxXSx2ZSxyZSksU2UucHVzaChtaShDdCxyZSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiUHRnQXJlYTNkIjpudD1adFsxXVsxXSxDdD1ocihadFsxXVsyXSx2ZSxyZSksY3Q9Y2YoUSxudCxyZSksU2UucHVzaChjdCsiISIrbWkoQ3QscmUpKTticmVhaztjYXNlIlB0Z0F0dHJTdW0iOlNlLnB1c2goIlNVTSgiK1NlLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSJQdGdOYW1lIjp2YXIg''@;'; put 'put ''em49KFEubmFtZXN8fFtdKVsoZHQ9WnRbMV1bMl0pLTFdfHwoUVswXXx8W10pW2R0XSxrbj16bj96bi5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKGR0KTtrbiBpbiBvNSYmKGtuPW81W2tuXSksU2UucHVzaChrbik7YnJlYWs7Y2FzZSJQdGdOYW1lWCI6dmFyIHRyLGVyPVp0WzFdWzFdO2lm''@;'; put 'put ''KGR0PVp0WzFdWzJdLCEocmUuYmlmZjw9NSkpe3ZhciBabj0iIjtpZigxNDg0OT09KChRW2VyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKFFbZXJdfHxbXSlbMF18fFtdKVswXT9RW2VyXVtkdF0mJlFbZXJdW2R0XS5pdGFiPjAmJihabj1RLlNoZWV0TmFtZXNbUVtlcl1bZHRdLml0YWIt''@;'; put 'put ''MV0rIiEiKTpabj1RLlNoZWV0TmFtZXNbZHQtMV0rIiEiKSxRW2VyXSYmUVtlcl1bZHRdKVpuKz1RW2VyXVtkdF0uTmFtZTtlbHNlIGlmKFFbMF0mJlFbMF1bZHRdKVpuKz1RWzBdW2R0XS5OYW1lO2Vsc2V7dmFyIG9pPSh1NihRLGVyLHJlKXx8IiIpLnNwbGl0KCI7OyIpO29pW2R0LTFdP1pu''@;'; put 'put ''PW9pW2R0LTFdOlpuKz0iU0gzM1RKU0VSUlgifVNlLnB1c2goWm4pO2JyZWFrfWVyPDAmJihlcj0tZXIpLFFbZXJdJiYodHI9UVtlcl1bZHRdKSx0cnx8KHRyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxTZS5wdXNoKHRyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBraT0iKCIsTGk9''@;'; put 'put ''IikiO2lmKGJ0Pj0wKXtzd2l0Y2goRnQ9IiIseVswXVtidF1bMV1bMF0pe2Nhc2UgMjpraT1ibigiICIseVswXVtidF1bMV1bMV0pK2tpO2JyZWFrO2Nhc2UgMzpraT1ibigiXHIiLHlbMF1bYnRdWzFdWzFdKStraTticmVhaztjYXNlIDQ6TGk9Ym4oIiAiLHlbMF1bYnRdWzFdWzFdKStMaTti''@;'; put 'put ''cmVhaztjYXNlIDU6TGk9Ym4oIlxyIix5WzBdW2J0XVsxXVsxXSkrTGk7YnJlYWs7ZGVmYXVsdDppZihyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIit5WzBdW2J0XVsxXVswXSl9YnQ9LTF9U2UucHVzaChraStTZS5wb3AoKStMaSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJQdGdSZWZFcnIiOmNhc2UiUHRnQXJlYUVyciI6Y2FzZSJQdGdBcmVhRXJyM2QiOmNhc2UiUHRnUmVmRXJyM2QiOlNlLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciB1cj17YzpMLmMscjpMLnJ9O2lmKFEuc2hhcmVkZltkaShHZT17YzpadFsxXVsxXSxyOlp0WzFd''@;'; put 'put ''WzBdfSldKXt2YXIgQW49US5zaGFyZWRmW2RpKEdlKV07U2UucHVzaCh4bChBbix2ZSx1cixRLHJlKSl9ZWxzZXt2YXIgdnI9ITE7Zm9yKEhlPTA7SGUhPVEuYXJyYXlmLmxlbmd0aDsrK0hlKWlmKCEoR2UuYzwoQmU9US5hcnJheWZbSGVdKVswXS5zLmN8fEdlLmM+QmVbMF0uZS5jfHxHZS5y''@;'; put 'put ''PEJlWzBdLnMucnx8R2Uucj5CZVswXS5lLnIpKXtTZS5wdXNoKHhsKEJlWzFdLHZlLHVyLFEscmUpKSx2cj0hMDticmVha312cnx8U2UucHVzaChadFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6U2UucHVzaCgieyIrWVooWnRbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNh''@;'; put 'put ''c2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9RXQ7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjpTZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOlNlLnB1c2goIlRhYmxlIitadFsxXS5pZHgrIlsjIitadFsxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMi''@;'; put 'put ''OmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''bnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhadCkpfWlmKDMhPXJlLmJpZmYmJmJ0Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRl''@;'; put 'put ''eE9mKHlbMF1bRXRdWzBdKSl7dmFyIFNuPSEwO3N3aXRjaCgoWnQ9eVswXVtidF0pWzFdWzBdKXtjYXNlIDQ6U249ITE7Y2FzZSAwOkZ0PWJuKCIgIixadFsxXVsxXSk7YnJlYWs7Y2FzZSA1OlNuPSExO2Nhc2UgMTpGdD1ibigiXHIiLFp0WzFdWzFdKTticmVhaztkZWZhdWx0OmlmKEZ0PSIi''@;'; put 'put ''LHJlLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1p0WzFdWzBdKX1TZS5wdXNoKChTbj9GdDoiIikrU2UucG9wKCkrKFNuPyIiOkZ0KSksYnQ9LTF9fWlmKFNlLmxlbmd0aD4xJiZyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBz''@;'; put 'put ''dGFjayIpO3JldHVybiBTZVswXX1mdW5jdGlvbiBmdih5LFAsTCl7dmFyIHBlLFE9eS5sK1AscmU9Mj09TC5iaWZmPzE6MixfZT15LnJlYWRfc2hpZnQocmUpO2lmKDY1NTM1PT1fZSlyZXR1cm5bW10sYmMoeSxQLTIpXTt2YXIgdmU9bjUoeSxfZSxMKTtyZXR1cm4gUCE9PV9lK3JlJiYocGU9''@;'; put 'put ''ajMoeSxQLV9lLXJlLHZlLEwpKSx5Lmw9USxbdmUscGVdfWZ1bmN0aW9uIGk1KHksUCxMKXt2YXIgcmUsUT15LmwrUCxwZT15LnJlYWRfc2hpZnQoMiksX2U9bjUoeSxwZSxMKTtyZXR1cm4gNjU1MzU9PXBlP1tbXSxiYyh5LFAtMildOihQIT09cGUrMiYmKHJlPWozKHksUS1wZS0yLF9lLEwp''@;'; put 'put ''KSxbX2UscmVdKX1mdW5jdGlvbiB6Myh5LFAsTCl7dmFyIFE9eS5sK1AscmU9THUoeSk7Mj09TC5iaWZmJiYrK3kubDt2YXIgcGU9ZnVuY3Rpb24gblMoeSl7dmFyIFA7aWYoNjU1MzUhPT1Zbih5LHkubCs2KSlyZXR1cm5bbWEoeSksIm4iXTtzd2l0Y2goeVt5LmxdKXtjYXNlIDA6cmV0dXJu''@;'; put 'put ''IHkubCs9OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFA9MT09PXlbeS5sKzJdLHkubCs9OCxbUCwiYiJdO2Nhc2UgMjpyZXR1cm4gUD15W3kubCsyXSx5LmwrPTgsW1AsImUiXTtjYXNlIDM6cmV0dXJuIHkubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oeSksX2U9eS5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpOzIhPUwuYmlmZiYmKHkucmVhZF9zaGlmdCgxKSxMLmJpZmY+PTUmJnkucmVhZF9zaGlmdCg0KSk7dmFyIHZlPWZ1bmN0aW9uIHI1KHksUCxMKXt2YXIgcGUsUT15LmwrUCxyZT0yPT1MLmJpZmY/MToyLF9lPXkucmVhZF9zaGlmdChyZSk7aWYoNjU1MzU9PV9lKXJldHVybltbXSxiYyh5''@;'; put 'put ''LFAtMildO3ZhciB2ZT1uNSh5LF9lLEwpO3JldHVybiBQIT09X2UrcmUmJihwZT1qMyh5LFAtX2UtcmUsdmUsTCkpLHkubD1RLFt2ZSxwZV19KHksUS15LmwsTCk7cmV0dXJue2NlbGw6cmUsdmFsOnBlWzBdLGZvcm11bGE6dmUsc2hhcmVkOl9lPj4zJjEsdHQ6cGVbMV19fWZ1bmN0aW9uIHVm''@;'; put 'put ''KHksUCxMKXt2YXIgUT15LnJlYWRfc2hpZnQoNCkscmU9bjUoeSxRLEwpLHBlPXkucmVhZF9zaGlmdCg0KTtyZXR1cm5bcmUscGU+MD9qMyh5LHBlLHJlLEwsITApOm51bGxdfXZhciByUz11ZixoNj11ZixpUz11ZixvUz1mdW5jdGlvbiBndih5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQp''@;'; put 'put ''LHJlPXkucmVhZF9zaGlmdCg0KSxwZT1uNSh5LFEsTCk7cmV0dXJuW3BlLHJlPjA/ajMoeSxyZSxwZSxMLCEwKTpudWxsXX0sc1M9dWYsRUk9dWY7ZnVuY3Rpb24gbXYoeSl7aWYoKDB8eSk9PXkmJnk8TWF0aC5wb3coMiwxNikmJnk+PTApe3ZhciBQPWZyKDExKTtyZXR1cm4gUC53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDMpLFAud3JpdGVfc2hpZnQoMSwzMCksUC53cml0ZV9zaGlmdCgyLHkpLFAud3JpdGVfc2hpZnQoNCwwKSxQfXZhciBMPWZyKDE3KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg0LDExKSxMLndyaXRlX3NoaWZ0KDEsMzEpLEwud3JpdGVfc2hpZnQoOCx5KSxMLndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''MCksTH1mdW5jdGlvbiBhUyh5KXt2YXIgUD1mcig3KTtQLndyaXRlX3NoaWZ0KDQsMysyKnkubGVuZ3RoKSxQLndyaXRlX3NoaWZ0KDEsMjMpLFAud3JpdGVfc2hpZnQoMix5Lmxlbmd0aCk7dmFyIEw9ZnIoMip5Lmxlbmd0aCk7TC53cml0ZV9zaGlmdCgyKnkubGVuZ3RoLHksInV0ZjE2bGUi''@;'; put 'put ''KTt2YXIgUT1mcig0KTtyZXR1cm4gUS53cml0ZV9zaGlmdCg0LDApLFMoW1AsTCxRXSl9ZnVuY3Rpb24gVTMoeSl7aWYoeS5tYXRjaCgvXiMoRElWXC8wIXxHRVRUSU5HX0RBVEF8TlwvQXxOQU1FXD98TlVMTCF8TlVNIXxSRUYhfFZBTFVFISkkLykpcmV0dXJuIGZ1bmN0aW9uIEdaKHkpe3Zh''@;'; put 'put ''ciBQPWZyKDEwKTtyZXR1cm4gUC53cml0ZV9zaGlmdCg0LDIpLFAud3JpdGVfc2hpZnQoMSwyOCksUC53cml0ZV9zaGlmdCgxLHkpLFAud3JpdGVfc2hpZnQoNCwwKSxQfSgrS2FbeV0pO2lmKHkubWF0Y2goL15cJD8oPzpbQS1XXVtBLVpdezJ9fFhbQS1FXVtBLVpdfFhGW0EtRF18W0EtWl17''@;'; put 'put ''MSwyfSlcJD8oPzoxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9KSQvKSlyZXR1cm4gZnVuY3Rpb24gdnYoeSl7dmFyIFA9c3MoeSksTD1mcigxNSk7cmV0dXJuIEwud3JpdGVfc2hpZnQoNCw3KSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsMzYpLEwud3JpdGVfc2hpZnQoNCxQLnIpLEwud3JpdGVfc2hpZnQoMixQLmN8KCIkIj09eS5jaGFyQXQoMCk/MDoxKTw8MTR8KHkubWF0Y2goL1wkXGQvKT8wOjEpPDwxNSksTC53cml0ZV9zaGlmdCg0LDApLEx9KHkpO2lmKHkubWF0Y2goL14iLioiJC8pKXJldHVy''@;'; put 'put ''biBhUyh5KTt0aHJvdyJGb3JtdWxhIHwiK3krInwgbm90IHN1cHBvcnRlZCBmb3IgWExTQiJ9dmFyIGtJPXswOiJCRUVQIiwxOiJPUEVOIiwyOiJPUEVOLkxJTktTIiwzOiJDTE9TRS5BTEwiLDQ6IlNBVkUiLDU6IlNBVkUuQVMiLDY6IkZJTEUuREVMRVRFIiw3OiJQQUdFLlNFVFVQIiw4OiJQ''@;'; put 'put ''UklOVCIsOToiUFJJTlRFUi5TRVRVUCIsMTA6IlFVSVQiLDExOiJORVcuV0lORE9XIiwxMjoiQVJSQU5HRS5BTEwiLDEzOiJXSU5ET1cuU0laRSIsMTQ6IldJTkRPVy5NT1ZFIiwxNToiRlVMTCIsMTY6IkNMT1NFIiwxNzoiUlVOIiwyMjoiU0VULlBSSU5ULkFSRUEiLDIzOiJTRVQuUFJJTlQu''@;'; put 'put ''VElUTEVTIiwyNDoiU0VULlBBR0UuQlJFQUsiLDI1OiJSRU1PVkUuUEFHRS5CUkVBSyIsMjY6IkZPTlQiLDI3OiJESVNQTEFZIiwyODoiUFJPVEVDVC5ET0NVTUVOVCIsMjk6IlBSRUNJU0lPTiIsMzA6IkExLlIxQzEiLDMxOiJDQUxDVUxBVEUuTk9XIiwzMjoiQ0FMQ1VMQVRJT04iLDM0OiJE''@;'; put 'put ''QVRBLkZJTkQiLDM1OiJFWFRSQUNUIiwzNjoiREFUQS5ERUxFVEUiLDM3OiJTRVQuREFUQUJBU0UiLDM4OiJTRVQuQ1JJVEVSSUEiLDM5OiJTT1JUIiw0MDoiREFUQS5TRVJJRVMiLDQxOiJUQUJMRSIsNDI6IkZPUk1BVC5OVU1CRVIiLDQzOiJBTElHTk1FTlQiLDQ0OiJTVFlMRSIsNDU6IkJP''@;'; put 'put ''UkRFUiIsNDY6IkNFTEwuUFJPVEVDVElPTiIsNDc6IkNPTFVNTi5XSURUSCIsNDg6IlVORE8iLDQ5OiJDVVQiLDUwOiJDT1BZIiw1MToiUEFTVEUiLDUyOiJDTEVBUiIsNTM6IlBBU1RFLlNQRUNJQUwiLDU0OiJFRElULkRFTEVURSIsNTU6IklOU0VSVCIsNTY6IkZJTEwuUklHSFQiLDU3OiJG''@;'; put 'put ''SUxMLkRPV04iLDYxOiJERUZJTkUuTkFNRSIsNjI6IkNSRUFURS5OQU1FUyIsNjM6IkZPUk1VTEEuR09UTyIsNjQ6IkZPUk1VTEEuRklORCIsNjU6IlNFTEVDVC5MQVNULkNFTEwiLDY2OiJTSE9XLkFDVElWRS5DRUxMIiw2NzoiR0FMTEVSWS5BUkVBIiw2ODoiR0FMTEVSWS5CQVIiLDY5OiJH''@;'; put 'put ''QUxMRVJZLkNPTFVNTiIsNzA6IkdBTExFUlkuTElORSIsNzE6IkdBTExFUlkuUElFIiw3MjoiR0FMTEVSWS5TQ0FUVEVSIiw3MzoiQ09NQklOQVRJT04iLDc0OiJQUkVGRVJSRUQiLDc1OiJBREQuT1ZFUkxBWSIsNzY6IkdSSURMSU5FUyIsNzc6IlNFVC5QUkVGRVJSRUQiLDc4OiJBWEVTIiw3''@;'; put 'put ''OToiTEVHRU5EIiw4MDoiQVRUQUNILlRFWFQiLDgxOiJBREQuQVJST1ciLDgyOiJTRUxFQ1QuQ0hBUlQiLDgzOiJTRUxFQ1QuUExPVC5BUkVBIiw4NDoiUEFUVEVSTlMiLDg1OiJNQUlOLkNIQVJUIiw4NjoiT1ZFUkxBWSIsODc6IlNDQUxFIiw4ODoiRk9STUFULkxFR0VORCIsODk6IkZPUk1B''@;'; put 'put ''VC5URVhUIiw5MDoiRURJVC5SRVBFQVQiLDkxOiJQQVJTRSIsOTI6IkpVU1RJRlkiLDkzOiJISURFIiw5NDoiVU5ISURFIiw5NToiV09SS1NQQUNFIiw5NjoiRk9STVVMQSIsOTc6IkZPUk1VTEEuRklMTCIsOTg6IkZPUk1VTEEuQVJSQVkiLDk5OiJEQVRBLkZJTkQuTkVYVCIsMTAwOiJEQVRB''@;'; put 'put ''LkZJTkQuUFJFViIsMTAxOiJGT1JNVUxBLkZJTkQuTkVYVCIsMTAyOiJGT1JNVUxBLkZJTkQuUFJFViIsMTAzOiJBQ1RJVkFURSIsMTA0OiJBQ1RJVkFURS5ORVhUIiwxMDU6IkFDVElWQVRFLlBSRVYiLDEwNjoiVU5MT0NLRUQuTkVYVCIsMTA3OiJVTkxPQ0tFRC5QUkVWIiwxMDg6IkNPUFku''@;'; put 'put ''UElDVFVSRSIsMTA5OiJTRUxFQ1QiLDExMDoiREVMRVRFLk5BTUUiLDExMToiREVMRVRFLkZPUk1BVCIsMTEyOiJWTElORSIsMTEzOiJITElORSIsMTE0OiJWUEFHRSIsMTE1OiJIUEFHRSIsMTE2OiJWU0NST0xMIiwxMTc6IkhTQ1JPTEwiLDExODoiQUxFUlQiLDExOToiTkVXIiwxMjA6IkNB''@;'; put 'put ''TkNFTC5DT1BZIiwxMjE6IlNIT1cuQ0xJUEJPQVJEIiwxMjI6Ik1FU1NBR0UiLDEyNDoiUEFTVEUuTElOSyIsMTI1OiJBUFAuQUNUSVZBVEUiLDEyNjoiREVMRVRFLkFSUk9XIiwxMjc6IlJPVy5IRUlHSFQiLDEyODoiRk9STUFULk1PVkUiLDEyOToiRk9STUFULlNJWkUiLDEzMDoiRk9STVVM''@;'; put 'put ''QS5SRVBMQUNFIiwxMzE6IlNFTkQuS0VZUyIsMTMyOiJTRUxFQ1QuU1BFQ0lBTCIsMTMzOiJBUFBMWS5OQU1FUyIsMTM0OiJSRVBMQUNFLkZPTlQiLDEzNToiRlJFRVpFLlBBTkVTIiwxMzY6IlNIT1cuSU5GTyIsMTM3OiJTUExJVCIsMTM4OiJPTi5XSU5ET1ciLDEzOToiT04uREFUQSIsMTQw''@;'; put 'put ''OiJESVNBQkxFLklOUFVUIiwxNDI6Ik9VVExJTkUiLDE0MzoiTElTVC5OQU1FUyIsMTQ0OiJGSUxFLkNMT1NFIiwxNDU6IlNBVkUuV09SS0JPT0siLDE0NjoiREFUQS5GT1JNIiwxNDc6IkNPUFkuQ0hBUlQiLDE0ODoiT04uVElNRSIsMTQ5OiJXQUlUIiwxNTA6IkZPUk1BVC5GT05UIiwxNTE6''@;'; put 'put ''IkZJTEwuVVAiLDE1MjoiRklMTC5MRUZUIiwxNTM6IkRFTEVURS5PVkVSTEFZIiwxNTU6IlNIT1JULk1FTlVTIiwxNTk6IlNFVC5VUERBVEUuU1RBVFVTIiwxNjE6IkNPTE9SLlBBTEVUVEUiLDE2MjoiREVMRVRFLlNUWUxFIiwxNjM6IldJTkRPVy5SRVNUT1JFIiwxNjQ6IldJTkRPVy5NQVhJ''@;'; put 'put ''TUlaRSIsMTY2OiJDSEFOR0UuTElOSyIsMTY3OiJDQUxDVUxBVEUuRE9DVU1FTlQiLDE2ODoiT04uS0VZIiwxNjk6IkFQUC5SRVNUT1JFIiwxNzA6IkFQUC5NT1ZFIiwxNzE6IkFQUC5TSVpFIiwxNzI6IkFQUC5NSU5JTUlaRSIsMTczOiJBUFAuTUFYSU1JWkUiLDE3NDoiQlJJTkcuVE8uRlJP''@;'; put 'put ''TlQiLDE3NToiU0VORC5UTy5CQUNLIiwxODU6Ik1BSU4uQ0hBUlQuVFlQRSIsMTg2OiJPVkVSTEFZLkNIQVJULlRZUEUiLDE4NzoiU0VMRUNULkVORCIsMTg4OiJPUEVOLk1BSUwiLDE4OToiU0VORC5NQUlMIiwxOTA6IlNUQU5EQVJELkZPTlQiLDE5MToiQ09OU09MSURBVEUiLDE5MjoiU09S''@;'; put 'put ''VC5TUEVDSUFMIiwxOTM6IkdBTExFUlkuM0QuQVJFQSIsMTk0OiJHQUxMRVJZLjNELkNPTFVNTiIsMTk1OiJHQUxMRVJZLjNELkxJTkUiLDE5NjoiR0FMTEVSWS4zRC5QSUUiLDE5NzoiVklFVy4zRCIsMTk4OiJHT0FMLlNFRUsiLDE5OToiV09SS0dST1VQIiwyMDA6IkZJTEwuR1JPVVAiLDIw''@;'; put 'put ''MToiVVBEQVRFLkxJTksiLDIwMjoiUFJPTU9URSIsMjAzOiJERU1PVEUiLDIwNDoiU0hPVy5ERVRBSUwiLDIwNjoiVU5HUk9VUCIsMjA3OiJPQkpFQ1QuUFJPUEVSVElFUyIsMjA4OiJTQVZFLk5FVy5PQkpFQ1QiLDIwOToiU0hBUkUiLDIxMDoiU0hBUkUuTkFNRSIsMjExOiJEVVBMSUNBVEUi''@;'; put 'put ''LDIxMjoiQVBQTFkuU1RZTEUiLDIxMzoiQVNTSUdOLlRPLk9CSkVDVCIsMjE0OiJPQkpFQ1QuUFJPVEVDVElPTiIsMjE1OiJISURFLk9CSkVDVCIsMjE2OiJTRVQuRVhUUkFDVCIsMjE3OiJDUkVBVEUuUFVCTElTSEVSIiwyMTg6IlNVQlNDUklCRS5UTyIsMjE5OiJBVFRSSUJVVEVTIiwyMjA6''@;'; put 'put ''IlNIT1cuVE9PTEJBUiIsMjIyOiJQUklOVC5QUkVWSUVXIiwyMjM6IkVESVQuQ09MT1IiLDIyNDoiU0hPVy5MRVZFTFMiLDIyNToiRk9STUFULk1BSU4iLDIyNjoiRk9STUFULk9WRVJMQVkiLDIyNzoiT04uUkVDQUxDIiwyMjg6IkVESVQuU0VSSUVTIiwyMjk6IkRFRklORS5TVFlMRSIsMjQw''@;'; put 'put ''OiJMSU5FLlBSSU5UIiwyNDM6IkVOVEVSLkRBVEEiLDI0OToiR0FMTEVSWS5SQURBUiIsMjUwOiJNRVJHRS5TVFlMRVMiLDI1MToiRURJVElPTi5PUFRJT05TIiwyNTI6IlBBU1RFLlBJQ1RVUkUiLDI1MzoiUEFTVEUuUElDVFVSRS5MSU5LIiwyNTQ6IlNQRUxMSU5HIiwyNTY6IlpPT00iLDI1''@;'; put 'put ''OToiSU5TRVJULk9CSkVDVCIsMjYwOiJXSU5ET1cuTUlOSU1JWkUiLDI2NToiU09VTkQuTk9URSIsMjY2OiJTT1VORC5QTEFZIiwyNjc6IkZPUk1BVC5TSEFQRSIsMjY4OiJFWFRFTkQuUE9MWUdPTiIsMjY5OiJGT1JNQVQuQVVUTyIsMjcyOiJHQUxMRVJZLjNELkJBUiIsMjczOiJHQUxMRVJZ''@;'; put 'put ''LjNELlNVUkZBQ0UiLDI3NDoiRklMTC5BVVRPIiwyNzY6IkNVU1RPTUlaRS5UT09MQkFSIiwyNzc6IkFERC5UT09MIiwyNzg6IkVESVQuT0JKRUNUIiwyNzk6Ik9OLkRPVUJMRUNMSUNLIiwyODA6Ik9OLkVOVFJZIiwyODE6IldPUktCT09LLkFERCIsMjgyOiJXT1JLQk9PSy5NT1ZFIiwyODM6''@;'; put 'put ''IldPUktCT09LLkNPUFkiLDI4NDoiV09SS0JPT0suT1BUSU9OUyIsMjg1OiJTQVZFLldPUktTUEFDRSIsMjg4OiJDSEFSVC5XSVpBUkQiLDI4OToiREVMRVRFLlRPT0wiLDI5MDoiTU9WRS5UT09MIiwyOTE6IldPUktCT09LLlNFTEVDVCIsMjkyOiJXT1JLQk9PSy5BQ1RJVkFURSIsMjkzOiJB''@;'; put 'put ''U1NJR04uVE8uVE9PTCIsMjk1OiJDT1BZLlRPT0wiLDI5NjoiUkVTRVQuVE9PTCIsMjk3OiJDT05TVFJBSU4uTlVNRVJJQyIsMjk4OiJQQVNURS5UT09MIiwzMDI6IldPUktCT09LLk5FVyIsMzA1OiJTQ0VOQVJJTy5DRUxMUyIsMzA2OiJTQ0VOQVJJTy5ERUxFVEUiLDMwNzoiU0NFTkFSSU8u''@;'; put 'put ''QUREIiwzMDg6IlNDRU5BUklPLkVESVQiLDMwOToiU0NFTkFSSU8uU0hPVyIsMzEwOiJTQ0VOQVJJTy5TSE9XLk5FWFQiLDMxMToiU0NFTkFSSU8uU1VNTUFSWSIsMzEyOiJQSVZPVC5UQUJMRS5XSVpBUkQiLDMxMzoiUElWT1QuRklFTEQuUFJPUEVSVElFUyIsMzE0OiJQSVZPVC5GSUVMRCIs''@;'; put 'put ''MzE1OiJQSVZPVC5JVEVNIiwzMTY6IlBJVk9ULkFERC5GSUVMRFMiLDMxODoiT1BUSU9OUy5DQUxDVUxBVElPTiIsMzE5OiJPUFRJT05TLkVESVQiLDMyMDoiT1BUSU9OUy5WSUVXIiwzMjE6IkFERElOLk1BTkFHRVIiLDMyMjoiTUVOVS5FRElUT1IiLDMyMzoiQVRUQUNILlRPT0xCQVJTIiwz''@;'; put 'put ''MjQ6IlZCQUFjdGl2YXRlIiwzMjU6Ik9QVElPTlMuQ0hBUlQiLDMyODoiVkJBLklOU0VSVC5GSUxFIiwzMzA6IlZCQS5QUk9DRURVUkUuREVGSU5JVElPTiIsMzM2OiJST1VUSU5HLlNMSVAiLDMzODoiUk9VVEUuRE9DVU1FTlQiLDMzOToiTUFJTC5MT0dPTiIsMzQyOiJJTlNFUlQuUElDVFVS''@;'; put 'put ''RSIsMzQzOiJFRElULlRPT0wiLDM0NDoiR0FMTEVSWS5ET1VHSE5VVCIsMzUwOiJDSEFSVC5UUkVORCIsMzUyOiJQSVZPVC5JVEVNLlBST1BFUlRJRVMiLDM1NDoiV09SS0JPT0suSU5TRVJUIiwzNTU6Ik9QVElPTlMuVFJBTlNJVElPTiIsMzU2OiJPUFRJT05TLkdFTkVSQUwiLDM3MDoiRklM''@;'; put 'put ''VEVSLkFEVkFOQ0VEIiwzNzM6Ik1BSUwuQURELk1BSUxFUiIsMzc0OiJNQUlMLkRFTEVURS5NQUlMRVIiLDM3NToiTUFJTC5SRVBMWSIsMzc2OiJNQUlMLlJFUExZLkFMTCIsMzc3OiJNQUlMLkZPUldBUkQiLDM3ODoiTUFJTC5ORVhULkxFVFRFUiIsMzc5OiJEQVRBLkxBQkVMIiwzODA6IklO''@;'; put 'put ''U0VSVC5USVRMRSIsMzgxOiJGT05ULlBST1BFUlRJRVMiLDM4MjoiTUFDUk8uT1BUSU9OUyIsMzgzOiJXT1JLQk9PSy5ISURFIiwzODQ6IldPUktCT09LLlVOSElERSIsMzg1OiJXT1JLQk9PSy5ERUxFVEUiLDM4NjoiV09SS0JPT0suTkFNRSIsMzg4OiJHQUxMRVJZLkNVU1RPTSIsMzkwOiJB''@;'; put 'put ''REQuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkxOiJERUxFVEUuQ0hBUlQuQVVUT0ZPUk1BVCIsMzkyOiJDSEFSVC5BREQuREFUQSIsMzkzOiJBVVRPLk9VVExJTkUiLDM5NDoiVEFCLk9SREVSIiwzOTU6IlNIT1cuRElBTE9HIiwzOTY6IlNFTEVDVC5BTEwiLDM5NzoiVU5HUk9VUC5TSEVFVFMiLDM5''@;'; put 'put ''ODoiU1VCVE9UQUwuQ1JFQVRFIiwzOTk6IlNVQlRPVEFMLlJFTU9WRSIsNDAwOiJSRU5BTUUuT0JKRUNUIiw0MTI6IldPUktCT09LLlNDUk9MTCIsNDEzOiJXT1JLQk9PSy5ORVhUIiw0MTQ6IldPUktCT09LLlBSRVYiLDQxNToiV09SS0JPT0suVEFCLlNQTElUIiw0MTY6IkZVTEwuU0NSRUVO''@;'; put 'put ''Iiw0MTc6IldPUktCT09LLlBST1RFQ1QiLDQyMDoiU0NST0xMQkFSLlBST1BFUlRJRVMiLDQyMToiUElWT1QuU0hPVy5QQUdFUyIsNDIyOiJURVhULlRPLkNPTFVNTlMiLDQyMzoiRk9STUFULkNIQVJUVFlQRSIsNDI0OiJMSU5LLkZPUk1BVCIsNDI1OiJUUkFDRVIuRElTUExBWSIsNDMwOiJU''@;'; put 'put ''UkFDRVIuTkFWSUdBVEUiLDQzMToiVFJBQ0VSLkNMRUFSIiw0MzI6IlRSQUNFUi5FUlJPUiIsNDMzOiJQSVZPVC5GSUVMRC5HUk9VUCIsNDM0OiJQSVZPVC5GSUVMRC5VTkdST1VQIiw0MzU6IkNIRUNLQk9YLlBST1BFUlRJRVMiLDQzNjoiTEFCRUwuUFJPUEVSVElFUyIsNDM3OiJMSVNUQk9Y''@;'; put 'put ''LlBST1BFUlRJRVMiLDQzODoiRURJVEJPWC5QUk9QRVJUSUVTIiw0Mzk6IlBJVk9ULlJFRlJFU0giLDQ0MDoiTElOSy5DT01CTyIsNDQxOiJPUEVOLlRFWFQiLDQ0MjoiSElERS5ESUFMT0ciLDQ0MzoiU0VULkRJQUxPRy5GT0NVUyIsNDQ0OiJFTkFCTEUuT0JKRUNUIiw0NDU6IlBVU0hCVVRU''@;'; put 'put ''T04uUFJPUEVSVElFUyIsNDQ2OiJTRVQuRElBTE9HLkRFRkFVTFQiLDQ0NzoiRklMVEVSIiw0NDg6IkZJTFRFUi5TSE9XLkFMTCIsNDQ5OiJDTEVBUi5PVVRMSU5FIiw0NTA6IkZVTkNUSU9OLldJWkFSRCIsNDUxOiJBREQuTElTVC5JVEVNIiw0NTI6IlNFVC5MSVNULklURU0iLDQ1MzoiUkVN''@;'; put 'put ''T1ZFLkxJU1QuSVRFTSIsNDU0OiJTRUxFQ1QuTElTVC5JVEVNIiw0NTU6IlNFVC5DT05UUk9MLlZBTFVFIiw0NTY6IlNBVkUuQ09QWS5BUyIsNDU4OiJPUFRJT05TLkxJU1RTLkFERCIsNDU5OiJPUFRJT05TLkxJU1RTLkRFTEVURSIsNDYwOiJTRVJJRVMuQVhFUyIsNDYxOiJTRVJJRVMuWCIs''@;'; put 'put ''NDYyOiJTRVJJRVMuWSIsNDYzOiJFUlJPUkJBUi5YIiw0NjQ6IkVSUk9SQkFSLlkiLDQ2NToiRk9STUFULkNIQVJUIiw0NjY6IlNFUklFUy5PUkRFUiIsNDY3OiJNQUlMLkxPR09GRiIsNDY4OiJDTEVBUi5ST1VUSU5HLlNMSVAiLDQ2OToiQVBQLkFDVElWQVRFLk1JQ1JPU09GVCIsNDcwOiJN''@;'; put 'put ''QUlMLkVESVQuTUFJTEVSIiw0NzE6Ik9OLlNIRUVUIiw0NzI6IlNUQU5EQVJELldJRFRIIiw0NzM6IlNDRU5BUklPLk1FUkdFIiw0NzQ6IlNVTU1BUlkuSU5GTyIsNDc1OiJGSU5ELkZJTEUiLDQ3NjoiQUNUSVZFLkNFTEwuRk9OVCIsNDc3OiJFTkFCTEUuVElQV0laQVJEIiw0Nzg6IlZCQS5N''@;'; put 'put ''QUtFLkFERElOIiw0ODA6IklOU0VSVERBVEFUQUJMRSIsNDgxOiJXT1JLR1JPVVAuT1BUSU9OUyIsNDgyOiJNQUlMLlNFTkQuTUFJTEVSIiw0ODU6IkFVVE9DT1JSRUNUIiw0ODk6IlBPU1QuRE9DVU1FTlQiLDQ5MToiUElDS0xJU1QiLDQ5MzoiVklFVy5TSE9XIiw0OTQ6IlZJRVcuREVGSU5F''@;'; put 'put ''Iiw0OTU6IlZJRVcuREVMRVRFIiw1MDk6IlNIRUVULkJBQ0tHUk9VTkQiLDUxMDoiSU5TRVJULk1BUC5PQkpFQ1QiLDUxMToiT1BUSU9OUy5NRU5PTk8iLDUxNzoiTVNPQ0hFQ0tTIiw1MTg6Ik5PUk1BTCIsNTE5OiJMQVlPVVQiLDUyMDoiUk0uUFJJTlQuQVJFQSIsNTIxOiJDTEVBUi5QUklO''@;'; put 'put ''VC5BUkVBIiw1MjI6IkFERC5QUklOVC5BUkVBIiw1MjM6Ik1PVkUuQlJLIiw1NDU6IkhJREVDVVJSLk5PVEUiLDU0NjoiSElERUFMTC5OT1RFUyIsNTQ3OiJERUxFVEUuTk9URSIsNTQ4OiJUUkFWRVJTRS5OT1RFUyIsNTQ5OiJBQ1RJVkFURS5OT1RFUyIsNjIwOiJQUk9URUNULlJFVklTSU9O''@;'; put 'put ''UyIsNjIxOiJVTlBST1RFQ1QuUkVWSVNJT05TIiw2NDc6Ik9QVElPTlMuTUUiLDY1MzoiV0VCLlBVQkxJU0giLDY2NzoiTkVXV0VCUVVFUlkiLDY3MzoiUElWT1QuVEFCTEUuQ0hBUlQiLDc1MzoiT1BUSU9OUy5TQVZFIiw3NTU6Ik9QVElPTlMuU1BFTEwiLDgwODoiSElERUFMTC5JTktBTk5P''@;'; put 'put ''VFMifSxfdj17MDoiQ09VTlQiLDE6IklGIiwyOiJJU05BIiwzOiJJU0VSUk9SIiw0OiJTVU0iLDU6IkFWRVJBR0UiLDY6Ik1JTiIsNzoiTUFYIiw4OiJST1ciLDk6IkNPTFVNTiIsMTA6Ik5BIiwxMToiTlBWIiwxMjoiU1RERVYiLDEzOiJET0xMQVIiLDE0OiJGSVhFRCIsMTU6IlNJTiIsMTY6''@;'; put 'put ''IkNPUyIsMTc6IlRBTiIsMTg6IkFUQU4iLDE5OiJQSSIsMjA6IlNRUlQiLDIxOiJFWFAiLDIyOiJMTiIsMjM6IkxPRzEwIiwyNDoiQUJTIiwyNToiSU5UIiwyNjoiU0lHTiIsMjc6IlJPVU5EIiwyODoiTE9PS1VQIiwyOToiSU5ERVgiLDMwOiJSRVBUIiwzMToiTUlEIiwzMjoiTEVOIiwzMzoi''@;'; put 'put ''VkFMVUUiLDM0OiJUUlVFIiwzNToiRkFMU0UiLDM2OiJBTkQiLDM3OiJPUiIsMzg6Ik5PVCIsMzk6Ik1PRCIsNDA6IkRDT1VOVCIsNDE6IkRTVU0iLDQyOiJEQVZFUkFHRSIsNDM6IkRNSU4iLDQ0OiJETUFYIiw0NToiRFNUREVWIiw0NjoiVkFSIiw0NzoiRFZBUiIsNDg6IlRFWFQiLDQ5OiJM''@;'; put 'put ''SU5FU1QiLDUwOiJUUkVORCIsNTE6IkxPR0VTVCIsNTI6IkdST1dUSCIsNTM6IkdPVE8iLDU0OiJIQUxUIiw1NToiUkVUVVJOIiw1NjoiUFYiLDU3OiJGViIsNTg6Ik5QRVIiLDU5OiJQTVQiLDYwOiJSQVRFIiw2MToiTUlSUiIsNjI6IklSUiIsNjM6IlJBTkQiLDY0OiJNQVRDSCIsNjU6IkRB''@;'; put 'put ''VEUiLDY2OiJUSU1FIiw2NzoiREFZIiw2ODoiTU9OVEgiLDY5OiJZRUFSIiw3MDoiV0VFS0RBWSIsNzE6IkhPVVIiLDcyOiJNSU5VVEUiLDczOiJTRUNPTkQiLDc0OiJOT1ciLDc1OiJBUkVBUyIsNzY6IlJPV1MiLDc3OiJDT0xVTU5TIiw3ODoiT0ZGU0VUIiw3OToiQUJTUkVGIiw4MDoiUkVM''@;'; put 'put ''UkVGIiw4MToiQVJHVU1FTlQiLDgyOiJTRUFSQ0giLDgzOiJUUkFOU1BPU0UiLDg0OiJFUlJPUiIsODU6IlNURVAiLDg2OiJUWVBFIiw4NzoiRUNITyIsODg6IlNFVC5OQU1FIiw4OToiQ0FMTEVSIiw5MDoiREVSRUYiLDkxOiJXSU5ET1dTIiw5MjoiU0VSSUVTIiw5MzoiRE9DVU1FTlRTIiw5''@;'; put 'put ''NDoiQUNUSVZFLkNFTEwiLDk1OiJTRUxFQ1RJT04iLDk2OiJSRVNVTFQiLDk3OiJBVEFOMiIsOTg6IkFTSU4iLDk5OiJBQ09TIiwxMDA6IkNIT09TRSIsMTAxOiJITE9PS1VQIiwxMDI6IlZMT09LVVAiLDEwMzoiTElOS1MiLDEwNDoiSU5QVVQiLDEwNToiSVNSRUYiLDEwNjoiR0VULkZPUk1V''@;'; put 'put ''TEEiLDEwNzoiR0VULk5BTUUiLDEwODoiU0VULlZBTFVFIiwxMDk6IkxPRyIsMTEwOiJFWEVDIiwxMTE6IkNIQVIiLDExMjoiTE9XRVIiLDExMzoiVVBQRVIiLDExNDoiUFJPUEVSIiwxMTU6IkxFRlQiLDExNjoiUklHSFQiLDExNzoiRVhBQ1QiLDExODoiVFJJTSIsMTE5OiJSRVBMQUNFIiwx''@;'; put 'put ''MjA6IlNVQlNUSVRVVEUiLDEyMToiQ09ERSIsMTIyOiJOQU1FUyIsMTIzOiJESVJFQ1RPUlkiLDEyNDoiRklORCIsMTI1OiJDRUxMIiwxMjY6IklTRVJSIiwxMjc6IklTVEVYVCIsMTI4OiJJU05VTUJFUiIsMTI5OiJJU0JMQU5LIiwxMzA6IlQiLDEzMToiTiIsMTMyOiJGT1BFTiIsMTMzOiJG''@;'; put 'put ''Q0xPU0UiLDEzNDoiRlNJWkUiLDEzNToiRlJFQURMTiIsMTM2OiJGUkVBRCIsMTM3OiJGV1JJVEVMTiIsMTM4OiJGV1JJVEUiLDEzOToiRlBPUyIsMTQwOiJEQVRFVkFMVUUiLDE0MToiVElNRVZBTFVFIiwxNDI6IlNMTiIsMTQzOiJTWUQiLDE0NDoiRERCIiwxNDU6IkdFVC5ERUYiLDE0Njoi''@;'; put 'put ''UkVGVEVYVCIsMTQ3OiJURVhUUkVGIiwxNDg6IklORElSRUNUIiwxNDk6IlJFR0lTVEVSIiwxNTA6IkNBTEwiLDE1MToiQURELkJBUiIsMTUyOiJBREQuTUVOVSIsMTUzOiJBREQuQ09NTUFORCIsMTU0OiJFTkFCTEUuQ09NTUFORCIsMTU1OiJDSEVDSy5DT01NQU5EIiwxNTY6IlJFTkFNRS5D''@;'; put 'put ''T01NQU5EIiwxNTc6IlNIT1cuQkFSIiwxNTg6IkRFTEVURS5NRU5VIiwxNTk6IkRFTEVURS5DT01NQU5EIiwxNjA6IkdFVC5DSEFSVC5JVEVNIiwxNjE6IkRJQUxPRy5CT1giLDE2MjoiQ0xFQU4iLDE2MzoiTURFVEVSTSIsMTY0OiJNSU5WRVJTRSIsMTY1OiJNTVVMVCIsMTY2OiJGSUxFUyIs''@;'; put 'put ''MTY3OiJJUE1UIiwxNjg6IlBQTVQiLDE2OToiQ09VTlRBIiwxNzA6IkNBTkNFTC5LRVkiLDE3MToiRk9SIiwxNzI6IldISUxFIiwxNzM6IkJSRUFLIiwxNzQ6Ik5FWFQiLDE3NToiSU5JVElBVEUiLDE3NjoiUkVRVUVTVCIsMTc3OiJQT0tFIiwxNzg6IkVYRUNVVEUiLDE3OToiVEVSTUlOQVRF''@;'; put 'put ''IiwxODA6IlJFU1RBUlQiLDE4MToiSEVMUCIsMTgyOiJHRVQuQkFSIiwxODM6IlBST0RVQ1QiLDE4NDoiRkFDVCIsMTg1OiJHRVQuQ0VMTCIsMTg2OiJHRVQuV09SS1NQQUNFIiwxODc6IkdFVC5XSU5ET1ciLDE4ODoiR0VULkRPQ1VNRU5UIiwxODk6IkRQUk9EVUNUIiwxOTA6IklTTk9OVEVY''@;'; put 'put ''VCIsMTkxOiJHRVQuTk9URSIsMTkyOiJOT1RFIiwxOTM6IlNUREVWUCIsMTk0OiJWQVJQIiwxOTU6IkRTVERFVlAiLDE5NjoiRFZBUlAiLDE5NzoiVFJVTkMiLDE5ODoiSVNMT0dJQ0FMIiwxOTk6IkRDT1VOVEEiLDIwMDoiREVMRVRFLkJBUiIsMjAxOiJVTlJFR0lTVEVSIiwyMDQ6IlVTRE9M''@;'; put 'put ''TEFSIiwyMDU6IkZJTkRCIiwyMDY6IlNFQVJDSEIiLDIwNzoiUkVQTEFDRUIiLDIwODoiTEVGVEIiLDIwOToiUklHSFRCIiwyMTA6Ik1JREIiLDIxMToiTEVOQiIsMjEyOiJST1VORFVQIiwyMTM6IlJPVU5ERE9XTiIsMjE0OiJBU0MiLDIxNToiREJDUyIsMjE2OiJSQU5LIiwyMTk6IkFERFJF''@;'; put 'put ''U1MiLDIyMDoiREFZUzM2MCIsMjIxOiJUT0RBWSIsMjIyOiJWREIiLDIyMzoiRUxTRSIsMjI0OiJFTFNFLklGIiwyMjU6IkVORC5JRiIsMjI2OiJGT1IuQ0VMTCIsMjI3OiJNRURJQU4iLDIyODoiU1VNUFJPRFVDVCIsMjI5OiJTSU5IIiwyMzA6IkNPU0giLDIzMToiVEFOSCIsMjMyOiJBU0lO''@;'; put 'put ''SCIsMjMzOiJBQ09TSCIsMjM0OiJBVEFOSCIsMjM1OiJER0VUIiwyMzY6IkNSRUFURS5PQkpFQ1QiLDIzNzoiVk9MQVRJTEUiLDIzODoiTEFTVC5FUlJPUiIsMjM5OiJDVVNUT00uVU5ETyIsMjQwOiJDVVNUT00uUkVQRUFUIiwyNDE6IkZPUk1VTEEuQ09OVkVSVCIsMjQyOiJHRVQuTElOSy5J''@;'; put 'put ''TkZPIiwyNDM6IlRFWFQuQk9YIiwyNDQ6IklORk8iLDI0NToiR1JPVVAiLDI0NjoiR0VULk9CSkVDVCIsMjQ3OiJEQiIsMjQ4OiJQQVVTRSIsMjUxOiJSRVNVTUUiLDI1MjoiRlJFUVVFTkNZIiwyNTM6IkFERC5UT09MQkFSIiwyNTQ6IkRFTEVURS5UT09MQkFSIiwyNTU6IlVzZXIiLDI1Njoi''@;'; put 'put ''UkVTRVQuVE9PTEJBUiIsMjU3OiJFVkFMVUFURSIsMjU4OiJHRVQuVE9PTEJBUiIsMjU5OiJHRVQuVE9PTCIsMjYwOiJTUEVMTElORy5DSEVDSyIsMjYxOiJFUlJPUi5UWVBFIiwyNjI6IkFQUC5USVRMRSIsMjYzOiJXSU5ET1cuVElUTEUiLDI2NDoiU0FWRS5UT09MQkFSIiwyNjU6IkVOQUJM''@;'; put 'put ''RS5UT09MIiwyNjY6IlBSRVNTLlRPT0wiLDI2NzoiUkVHSVNURVIuSUQiLDI2ODoiR0VULldPUktCT09LIiwyNjk6IkFWRURFViIsMjcwOiJCRVRBRElTVCIsMjcxOiJHQU1NQUxOIiwyNzI6IkJFVEFJTlYiLDI3MzoiQklOT01ESVNUIiwyNzQ6IkNISURJU1QiLDI3NToiQ0hJSU5WIiwyNzY6''@;'; put 'put ''IkNPTUJJTiIsMjc3OiJDT05GSURFTkNFIiwyNzg6IkNSSVRCSU5PTSIsMjc5OiJFVkVOIiwyODA6IkVYUE9ORElTVCIsMjgxOiJGRElTVCIsMjgyOiJGSU5WIiwyODM6IkZJU0hFUiIsMjg0OiJGSVNIRVJJTlYiLDI4NToiRkxPT1IiLDI4NjoiR0FNTUFESVNUIiwyODc6IkdBTU1BSU5WIiwy''@;'; put 'put ''ODg6IkNFSUxJTkciLDI4OToiSFlQR0VPTURJU1QiLDI5MDoiTE9HTk9STURJU1QiLDI5MToiTE9HSU5WIiwyOTI6Ik5FR0JJTk9NRElTVCIsMjkzOiJOT1JNRElTVCIsMjk0OiJOT1JNU0RJU1QiLDI5NToiTk9STUlOViIsMjk2OiJOT1JNU0lOViIsMjk3OiJTVEFOREFSRElaRSIsMjk4OiJP''@;'; put 'put ''REQiLDI5OToiUEVSTVVUIiwzMDA6IlBPSVNTT04iLDMwMToiVERJU1QiLDMwMjoiV0VJQlVMTCIsMzAzOiJTVU1YTVkyIiwzMDQ6IlNVTVgyTVkyIiwzMDU6IlNVTVgyUFkyIiwzMDY6IkNISVRFU1QiLDMwNzoiQ09SUkVMIiwzMDg6IkNPVkFSIiwzMDk6IkZPUkVDQVNUIiwzMTA6IkZURVNU''@;'; put 'put ''IiwzMTE6IklOVEVSQ0VQVCIsMzEyOiJQRUFSU09OIiwzMTM6IlJTUSIsMzE0OiJTVEVZWCIsMzE1OiJTTE9QRSIsMzE2OiJUVEVTVCIsMzE3OiJQUk9CIiwzMTg6IkRFVlNRIiwzMTk6IkdFT01FQU4iLDMyMDoiSEFSTUVBTiIsMzIxOiJTVU1TUSIsMzIyOiJLVVJUIiwzMjM6IlNLRVciLDMy''@;'; put 'put ''NDoiWlRFU1QiLDMyNToiTEFSR0UiLDMyNjoiU01BTEwiLDMyNzoiUVVBUlRJTEUiLDMyODoiUEVSQ0VOVElMRSIsMzI5OiJQRVJDRU5UUkFOSyIsMzMwOiJNT0RFIiwzMzE6IlRSSU1NRUFOIiwzMzI6IlRJTlYiLDMzNDoiTU9WSUUuQ09NTUFORCIsMzM1OiJHRVQuTU9WSUUiLDMzNjoiQ09O''@;'; put 'put ''Q0FURU5BVEUiLDMzNzoiUE9XRVIiLDMzODoiUElWT1QuQURELkRBVEEiLDMzOToiR0VULlBJVk9ULlRBQkxFIiwzNDA6IkdFVC5QSVZPVC5GSUVMRCIsMzQxOiJHRVQuUElWT1QuSVRFTSIsMzQyOiJSQURJQU5TIiwzNDM6IkRFR1JFRVMiLDM0NDoiU1VCVE9UQUwiLDM0NToiU1VNSUYiLDM0''@;'; put 'put ''NjoiQ09VTlRJRiIsMzQ3OiJDT1VOVEJMQU5LIiwzNDg6IlNDRU5BUklPLkdFVCIsMzQ5OiJPUFRJT05TLkxJU1RTLkdFVCIsMzUwOiJJU1BNVCIsMzUxOiJEQVRFRElGIiwzNTI6IkRBVEVTVFJJTkciLDM1MzoiTlVNQkVSU1RSSU5HIiwzNTQ6IlJPTUFOIiwzNTU6Ik9QRU4uRElBTE9HIiwz''@;'; put 'put ''NTY6IlNBVkUuRElBTE9HIiwzNTc6IlZJRVcuR0VUIiwzNTg6IkdFVFBJVk9UREFUQSIsMzU5OiJIWVBFUkxJTksiLDM2MDoiUEhPTkVUSUMiLDM2MToiQVZFUkFHRUEiLDM2MjoiTUFYQSIsMzYzOiJNSU5BIiwzNjQ6IlNUREVWUEEiLDM2NToiVkFSUEEiLDM2NjoiU1RERVZBIiwzNjc6IlZB''@;'; put 'put ''UkEiLDM2ODoiQkFIVFRFWFQiLDM2OToiVEhBSURBWU9GV0VFSyIsMzcwOiJUSEFJRElHSVQiLDM3MToiVEhBSU1PTlRIT0ZZRUFSIiwzNzI6IlRIQUlOVU1TT1VORCIsMzczOiJUSEFJTlVNU1RSSU5HIiwzNzQ6IlRIQUlTVFJJTkdMRU5HVEgiLDM3NToiSVNUSEFJRElHSVQiLDM3NjoiUk9V''@;'; put 'put ''TkRCQUhURE9XTiIsMzc3OiJST1VOREJBSFRVUCIsMzc4OiJUSEFJWUVBUiIsMzc5OiJSVEQiLDM4MDoiQ1VCRVZBTFVFIiwzODE6IkNVQkVNRU1CRVIiLDM4MjoiQ1VCRU1FTUJFUlBST1BFUlRZIiwzODM6IkNVQkVSQU5LRURNRU1CRVIiLDM4NDoiSEVYMkJJTiIsMzg1OiJIRVgyREVDIiwz''@;'; put 'put ''ODY6IkhFWDJPQ1QiLDM4NzoiREVDMkJJTiIsMzg4OiJERUMySEVYIiwzODk6IkRFQzJPQ1QiLDM5MDoiT0NUMkJJTiIsMzkxOiJPQ1QySEVYIiwzOTI6Ik9DVDJERUMiLDM5MzoiQklOMkRFQyIsMzk0OiJCSU4yT0NUIiwzOTU6IkJJTjJIRVgiLDM5NjoiSU1TVUIiLDM5NzoiSU1ESVYiLDM5''@;'; put 'put ''ODoiSU1QT1dFUiIsMzk5OiJJTUFCUyIsNDAwOiJJTVNRUlQiLDQwMToiSU1MTiIsNDAyOiJJTUxPRzIiLDQwMzoiSU1MT0cxMCIsNDA0OiJJTVNJTiIsNDA1OiJJTUNPUyIsNDA2OiJJTUVYUCIsNDA3OiJJTUFSR1VNRU5UIiw0MDg6IklNQ09OSlVHQVRFIiw0MDk6IklNQUdJTkFSWSIsNDEw''@;'; put 'put ''OiJJTVJFQUwiLDQxMToiQ09NUExFWCIsNDEyOiJJTVNVTSIsNDEzOiJJTVBST0RVQ1QiLDQxNDoiU0VSSUVTU1VNIiw0MTU6IkZBQ1RET1VCTEUiLDQxNjoiU1FSVFBJIiw0MTc6IlFVT1RJRU5UIiw0MTg6IkRFTFRBIiw0MTk6IkdFU1RFUCIsNDIwOiJJU0VWRU4iLDQyMToiSVNPREQiLDQy''@;'; put 'put ''MjoiTVJPVU5EIiw0MjM6IkVSRiIsNDI0OiJFUkZDIiw0MjU6IkJFU1NFTEoiLDQyNjoiQkVTU0VMSyIsNDI3OiJCRVNTRUxZIiw0Mjg6IkJFU1NFTEkiLDQyOToiWElSUiIsNDMwOiJYTlBWIiw0MzE6IlBSSUNFTUFUIiw0MzI6IllJRUxETUFUIiw0MzM6IklOVFJBVEUiLDQzNDoiUkVDRUlW''@;'; put 'put ''RUQiLDQzNToiRElTQyIsNDM2OiJQUklDRURJU0MiLDQzNzoiWUlFTERESVNDIiw0Mzg6IlRCSUxMRVEiLDQzOToiVEJJTExQUklDRSIsNDQwOiJUQklMTFlJRUxEIiw0NDE6IlBSSUNFIiw0NDI6IllJRUxEIiw0NDM6IkRPTExBUkRFIiw0NDQ6IkRPTExBUkZSIiw0NDU6Ik5PTUlOQUwiLDQ0''@;'; put 'put ''NjoiRUZGRUNUIiw0NDc6IkNVTVBSSU5DIiw0NDg6IkNVTUlQTVQiLDQ0OToiRURBVEUiLDQ1MDoiRU9NT05USCIsNDUxOiJZRUFSRlJBQyIsNDUyOiJDT1VQREFZQlMiLDQ1MzoiQ09VUERBWVMiLDQ1NDoiQ09VUERBWVNOQyIsNDU1OiJDT1VQTkNEIiw0NTY6IkNPVVBOVU0iLDQ1NzoiQ09V''@;'; put 'put ''UFBDRCIsNDU4OiJEVVJBVElPTiIsNDU5OiJNRFVSQVRJT04iLDQ2MDoiT0RETFBSSUNFIiw0NjE6Ik9ERExZSUVMRCIsNDYyOiJPRERGUFJJQ0UiLDQ2MzoiT0RERllJRUxEIiw0NjQ6IlJBTkRCRVRXRUVOIiw0NjU6IldFRUtOVU0iLDQ2NjoiQU1PUkRFR1JDIiw0Njc6IkFNT1JMSU5DIiw0''@;'; put 'put ''Njg6IkNPTlZFUlQiLDcyNDoiU0hFRVRKUyIsNDY5OiJBQ0NSSU5UIiw0NzA6IkFDQ1JJTlRNIiw0NzE6IldPUktEQVkiLDQ3MjoiTkVUV09SS0RBWVMiLDQ3MzoiR0NEIiw0NzQ6Ik1VTFRJTk9NSUFMIiw0NzU6IkxDTSIsNDc2OiJGVlNDSEVEVUxFIiw0Nzc6IkNVQkVLUElNRU1CRVIiLDQ3''@;'; put 'put ''ODoiQ1VCRVNFVCIsNDc5OiJDVUJFU0VUQ09VTlQiLDQ4MDoiSUZFUlJPUiIsNDgxOiJDT1VOVElGUyIsNDgyOiJTVU1JRlMiLDQ4MzoiQVZFUkFHRUlGIiw0ODQ6IkFWRVJBR0VJRlMifSxidj17MjoxLDM6MSwxMDowLDE1OjEsMTY6MSwxNzoxLDE4OjEsMTk6MCwyMDoxLDIxOjEsMjI6MSwy''@;'; put 'put ''MzoxLDI0OjEsMjU6MSwyNjoxLDI3OjIsMzA6MiwzMTozLDMyOjEsMzM6MSwzNDowLDM1OjAsMzg6MSwzOToyLDQwOjMsNDE6Myw0MjozLDQzOjMsNDQ6Myw0NTozLDQ3OjMsNDg6Miw1MzoxLDYxOjMsNjM6MCw2NTozLDY2OjMsNjc6MSw2ODoxLDY5OjEsNzA6MSw3MToxLDcyOjEsNzM6MSw3''@;'; put 'put ''NDowLDc1OjEsNzY6MSw3NzoxLDc5OjIsODA6Miw4MzoxLDg1OjAsODY6MSw4OTowLDkwOjEsOTQ6MCw5NTowLDk3OjIsOTg6MSw5OToxLDEwMTozLDEwMjozLDEwNToxLDEwNjoxLDEwODoyLDExMToxLDExMjoxLDExMzoxLDExNDoxLDExNzoyLDExODoxLDExOTo0LDEyMToxLDEyNjoxLDEy''@;'; put 'put ''NzoxLDEyODoxLDEyOToxLDEzMDoxLDEzMToxLDEzMzoxLDEzNDoxLDEzNToxLDEzNjoyLDEzNzoyLDEzODoyLDE0MDoxLDE0MToxLDE0MjozLDE0Mzo0LDE0NDo0LDE2MToxLDE2MjoxLDE2MzoxLDE2NDoxLDE2NToyLDE3MjoxLDE3NToyLDE3NjoyLDE3NzozLDE3ODoyLDE3OToxLDE4NDox''@;'; put 'put ''LDE4NjoxLDE4OTozLDE5MDoxLDE5NTozLDE5NjozLDE5NzoxLDE5ODoxLDE5OTozLDIwMToxLDIwNzo0LDIxMDozLDIxMToxLDIxMjoyLDIxMzoyLDIxNDoxLDIxNToxLDIyNTowLDIyOToxLDIzMDoxLDIzMToxLDIzMjoxLDIzMzoxLDIzNDoxLDIzNTozLDI0NDoxLDI0Nzo0LDI1MjoyLDI1''@;'; put 'put ''NzoxLDI2MToxLDI3MToxLDI3Mzo0LDI3NDoyLDI3NToyLDI3NjoyLDI3NzozLDI3ODozLDI3OToxLDI4MDozLDI4MTozLDI4MjozLDI4MzoxLDI4NDoxLDI4NToyLDI4Njo0LDI4NzozLDI4ODoyLDI4OTo0LDI5MDozLDI5MTozLDI5MjozLDI5Mzo0LDI5NDoxLDI5NTozLDI5NjoxLDI5Nzoz''@;'; put 'put ''LDI5ODoxLDI5OToyLDMwMDozLDMwMTozLDMwMjo0LDMwMzoyLDMwNDoyLDMwNToyLDMwNjoyLDMwNzoyLDMwODoyLDMwOTozLDMxMDoyLDMxMToyLDMxMjoyLDMxMzoyLDMxNDoyLDMxNToyLDMxNjo0LDMyNToyLDMyNjoyLDMyNzoyLDMyODoyLDMzMToyLDMzMjoyLDMzNzoyLDM0MjoxLDM0''@;'; put 'put ''MzoxLDM0NjoyLDM0NzoxLDM1MDo0LDM1MTozLDM1MjoxLDM1MzoyLDM2MDoxLDM2ODoxLDM2OToxLDM3MDoxLDM3MToxLDM3MjoxLDM3MzoxLDM3NDoxLDM3NToxLDM3NjoxLDM3NzoxLDM3ODoxLDM4MjozLDM4NToxLDM5MjoxLDM5MzoxLDM5NjoyLDM5NzoyLDM5ODoyLDM5OToxLDQwMDox''@;'; put 'put ''LDQwMToxLDQwMjoxLDQwMzoxLDQwNDoxLDQwNToxLDQwNjoxLDQwNzoxLDQwODoxLDQwOToxLDQxMDoxLDQxNDo0LDQxNToxLDQxNjoxLDQxNzoyLDQyMDoxLDQyMToxLDQyMjoyLDQyNDoxLDQyNToyLDQyNjoyLDQyNzoyLDQyODoyLDQzMDozLDQzODozLDQzOTozLDQ0MDozLDQ0MzoyLDQ0''@;'; put 'put ''NDoyLDQ0NToyLDQ0NjoyLDQ0Nzo2LDQ0ODo2LDQ0OToyLDQ1MDoyLDQ2NDoyLDQ2ODozLDQ3NjoyLDQ3OToxLDQ4MDoyLDY1NTM1OjB9LG81PXsiX3hsZm4uQUNPVCI6IkFDT1QiLCJfeGxmbi5BQ09USCI6IkFDT1RIIiwiX3hsZm4uQUdHUkVHQVRFIjoiQUdHUkVHQVRFIiwiX3hsZm4uQVJB''@;'; put 'put ''QklDIjoiQVJBQklDIiwiX3hsZm4uQVZFUkFHRUlGIjoiQVZFUkFHRUlGIiwiX3hsZm4uQVZFUkFHRUlGUyI6IkFWRVJBR0VJRlMiLCJfeGxmbi5CQVNFIjoiQkFTRSIsIl94bGZuLkJFVEEuRElTVCI6IkJFVEEuRElTVCIsIl94bGZuLkJFVEEuSU5WIjoiQkVUQS5JTlYiLCJfeGxmbi5CSU5P''@;'; put 'put ''TS5ESVNUIjoiQklOT00uRElTVCIsIl94bGZuLkJJTk9NLkRJU1QuUkFOR0UiOiJCSU5PTS5ESVNULlJBTkdFIiwiX3hsZm4uQklOT00uSU5WIjoiQklOT00uSU5WIiwiX3hsZm4uQklUQU5EIjoiQklUQU5EIiwiX3hsZm4uQklUTFNISUZUIjoiQklUTFNISUZUIiwiX3hsZm4uQklUT1IiOiJC''@;'; put 'put ''SVRPUiIsIl94bGZuLkJJVFJTSElGVCI6IkJJVFJTSElGVCIsIl94bGZuLkJJVFhPUiI6IkJJVFhPUiIsIl94bGZuLkNFSUxJTkcuTUFUSCI6IkNFSUxJTkcuTUFUSCIsIl94bGZuLkNFSUxJTkcuUFJFQ0lTRSI6IkNFSUxJTkcuUFJFQ0lTRSIsIl94bGZuLkNISVNRLkRJU1QiOiJDSElTUS5E''@;'; put 'put ''SVNUIiwiX3hsZm4uQ0hJU1EuRElTVC5SVCI6IkNISVNRLkRJU1QuUlQiLCJfeGxmbi5DSElTUS5JTlYiOiJDSElTUS5JTlYiLCJfeGxmbi5DSElTUS5JTlYuUlQiOiJDSElTUS5JTlYuUlQiLCJfeGxmbi5DSElTUS5URVNUIjoiQ0hJU1EuVEVTVCIsIl94bGZuLkNPTUJJTkEiOiJDT01CSU5B''@;'; put 'put ''IiwiX3hsZm4uQ09OQ0FUIjoiQ09OQ0FUIiwiX3hsZm4uQ09ORklERU5DRS5OT1JNIjoiQ09ORklERU5DRS5OT1JNIiwiX3hsZm4uQ09ORklERU5DRS5UIjoiQ09ORklERU5DRS5UIiwiX3hsZm4uQ09UIjoiQ09UIiwiX3hsZm4uQ09USCI6IkNPVEgiLCJfeGxmbi5DT1VOVElGUyI6IkNPVU5U''@;'; put 'put ''SUZTIiwiX3hsZm4uQ09WQVJJQU5DRS5QIjoiQ09WQVJJQU5DRS5QIiwiX3hsZm4uQ09WQVJJQU5DRS5TIjoiQ09WQVJJQU5DRS5TIiwiX3hsZm4uQ1NDIjoiQ1NDIiwiX3hsZm4uQ1NDSCI6IkNTQ0giLCJfeGxmbi5EQVlTIjoiREFZUyIsIl94bGZuLkRFQ0lNQUwiOiJERUNJTUFMIiwiX3hs''@;'; put 'put ''Zm4uRUNNQS5DRUlMSU5HIjoiRUNNQS5DRUlMSU5HIiwiX3hsZm4uRVJGLlBSRUNJU0UiOiJFUkYuUFJFQ0lTRSIsIl94bGZuLkVSRkMuUFJFQ0lTRSI6IkVSRkMuUFJFQ0lTRSIsIl94bGZuLkVYUE9OLkRJU1QiOiJFWFBPTi5ESVNUIiwiX3hsZm4uRi5ESVNUIjoiRi5ESVNUIiwiX3hsZm4u''@;'; put 'put ''Ri5ESVNULlJUIjoiRi5ESVNULlJUIiwiX3hsZm4uRi5JTlYiOiJGLklOViIsIl94bGZuLkYuSU5WLlJUIjoiRi5JTlYuUlQiLCJfeGxmbi5GLlRFU1QiOiJGLlRFU1QiLCJfeGxmbi5GSUxURVJYTUwiOiJGSUxURVJYTUwiLCJfeGxmbi5GTE9PUi5NQVRIIjoiRkxPT1IuTUFUSCIsIl94bGZu''@;'; put 'put ''LkZMT09SLlBSRUNJU0UiOiJGTE9PUi5QUkVDSVNFIiwiX3hsZm4uRk9SRUNBU1QuRVRTIjoiRk9SRUNBU1QuRVRTIiwiX3hsZm4uRk9SRUNBU1QuRVRTLkNPTkZJTlQiOiJGT1JFQ0FTVC5FVFMuQ09ORklOVCIsIl94bGZuLkZPUkVDQVNULkVUUy5TRUFTT05BTElUWSI6IkZPUkVDQVNULkVU''@;'; put 'put ''Uy5TRUFTT05BTElUWSIsIl94bGZuLkZPUkVDQVNULkVUUy5TVEFUIjoiRk9SRUNBU1QuRVRTLlNUQVQiLCJfeGxmbi5GT1JFQ0FTVC5MSU5FQVIiOiJGT1JFQ0FTVC5MSU5FQVIiLCJfeGxmbi5GT1JNVUxBVEVYVCI6IkZPUk1VTEFURVhUIiwiX3hsZm4uR0FNTUEiOiJHQU1NQSIsIl94bGZu''@;'; put 'put ''LkdBTU1BLkRJU1QiOiJHQU1NQS5ESVNUIiwiX3hsZm4uR0FNTUEuSU5WIjoiR0FNTUEuSU5WIiwiX3hsZm4uR0FNTUFMTi5QUkVDSVNFIjoiR0FNTUFMTi5QUkVDSVNFIiwiX3hsZm4uR0FVU1MiOiJHQVVTUyIsIl94bGZuLkhZUEdFT00uRElTVCI6IkhZUEdFT00uRElTVCIsIl94bGZuLklG''@;'; put 'put ''RVJST1IiOiJJRkVSUk9SIiwiX3hsZm4uSUZOQSI6IklGTkEiLCJfeGxmbi5JRlMiOiJJRlMiLCJfeGxmbi5JTUNPU0giOiJJTUNPU0giLCJfeGxmbi5JTUNPVCI6IklNQ09UIiwiX3hsZm4uSU1DU0MiOiJJTUNTQyIsIl94bGZuLklNQ1NDSCI6IklNQ1NDSCIsIl94bGZuLklNU0VDIjoiSU1T''@;'; put 'put ''RUMiLCJfeGxmbi5JTVNFQ0giOiJJTVNFQ0giLCJfeGxmbi5JTVNJTkgiOiJJTVNJTkgiLCJfeGxmbi5JTVRBTiI6IklNVEFOIiwiX3hsZm4uSVNGT1JNVUxBIjoiSVNGT1JNVUxBIiwiX3hsZm4uSVNPLkNFSUxJTkciOiJJU08uQ0VJTElORyIsIl94bGZuLklTT1dFRUtOVU0iOiJJU09XRUVL''@;'; put 'put ''TlVNIiwiX3hsZm4uTE9HTk9STS5ESVNUIjoiTE9HTk9STS5ESVNUIiwiX3hsZm4uTE9HTk9STS5JTlYiOiJMT0dOT1JNLklOViIsIl94bGZuLk1BWElGUyI6Ik1BWElGUyIsIl94bGZuLk1JTklGUyI6Ik1JTklGUyIsIl94bGZuLk1PREUuTVVMVCI6Ik1PREUuTVVMVCIsIl94bGZuLk1PREUu''@;'; put 'put ''U05HTCI6Ik1PREUuU05HTCIsIl94bGZuLk1VTklUIjoiTVVOSVQiLCJfeGxmbi5ORUdCSU5PTS5ESVNUIjoiTkVHQklOT00uRElTVCIsIl94bGZuLk5FVFdPUktEQVlTLklOVEwiOiJORVRXT1JLREFZUy5JTlRMIiwiX3hsZm4uTklHQklOT00iOiJOSUdCSU5PTSIsIl94bGZuLk5PUk0uRElT''@;'; put 'put ''VCI6Ik5PUk0uRElTVCIsIl94bGZuLk5PUk0uSU5WIjoiTk9STS5JTlYiLCJfeGxmbi5OT1JNLlMuRElTVCI6Ik5PUk0uUy5ESVNUIiwiX3hsZm4uTk9STS5TLklOViI6Ik5PUk0uUy5JTlYiLCJfeGxmbi5OVU1CRVJWQUxVRSI6Ik5VTUJFUlZBTFVFIiwiX3hsZm4uUERVUkFUSU9OIjoiUERV''@;'; put 'put ''UkFUSU9OIiwiX3hsZm4uUEVSQ0VOVElMRS5FWEMiOiJQRVJDRU5USUxFLkVYQyIsIl94bGZuLlBFUkNFTlRJTEUuSU5DIjoiUEVSQ0VOVElMRS5JTkMiLCJfeGxmbi5QRVJDRU5UUkFOSy5FWEMiOiJQRVJDRU5UUkFOSy5FWEMiLCJfeGxmbi5QRVJDRU5UUkFOSy5JTkMiOiJQRVJDRU5UUkFO''@;'; put 'put ''Sy5JTkMiLCJfeGxmbi5QRVJNVVRBVElPTkEiOiJQRVJNVVRBVElPTkEiLCJfeGxmbi5QSEkiOiJQSEkiLCJfeGxmbi5QT0lTU09OLkRJU1QiOiJQT0lTU09OLkRJU1QiLCJfeGxmbi5RVUFSVElMRS5FWEMiOiJRVUFSVElMRS5FWEMiLCJfeGxmbi5RVUFSVElMRS5JTkMiOiJRVUFSVElMRS5J''@;'; put 'put ''TkMiLCJfeGxmbi5RVUVSWVNUUklORyI6IlFVRVJZU1RSSU5HIiwiX3hsZm4uUkFOSy5BVkciOiJSQU5LLkFWRyIsIl94bGZuLlJBTksuRVEiOiJSQU5LLkVRIiwiX3hsZm4uUlJJIjoiUlJJIiwiX3hsZm4uU0VDIjoiU0VDIiwiX3hsZm4uU0VDSCI6IlNFQ0giLCJfeGxmbi5TSEVFVCI6IlNI''@;'; put 'put ''RUVUIiwiX3hsZm4uU0hFRVRTIjoiU0hFRVRTIiwiX3hsZm4uU0tFVy5QIjoiU0tFVy5QIiwiX3hsZm4uU1RERVYuUCI6IlNUREVWLlAiLCJfeGxmbi5TVERFVi5TIjoiU1RERVYuUyIsIl94bGZuLlNVTUlGUyI6IlNVTUlGUyIsIl94bGZuLlNXSVRDSCI6IlNXSVRDSCIsIl94bGZuLlQuRElT''@;'; put 'put ''VCI6IlQuRElTVCIsIl94bGZuLlQuRElTVC4yVCI6IlQuRElTVC4yVCIsIl94bGZuLlQuRElTVC5SVCI6IlQuRElTVC5SVCIsIl94bGZuLlQuSU5WIjoiVC5JTlYiLCJfeGxmbi5ULklOVi4yVCI6IlQuSU5WLjJUIiwiX3hsZm4uVC5URVNUIjoiVC5URVNUIiwiX3hsZm4uVEVYVEpPSU4iOiJU''@;'; put 'put ''RVhUSk9JTiIsIl94bGZuLlVOSUNIQVIiOiJVTklDSEFSIiwiX3hsZm4uVU5JQ09ERSI6IlVOSUNPREUiLCJfeGxmbi5WQVIuUCI6IlZBUi5QIiwiX3hsZm4uVkFSLlMiOiJWQVIuUyIsIl94bGZuLldFQlNFUlZJQ0UiOiJXRUJTRVJWSUNFIiwiX3hsZm4uV0VJQlVMTC5ESVNUIjoiV0VJQlVM''@;'; put 'put ''TC5ESVNUIiwiX3hsZm4uV09SS0RBWS5JTlRMIjoiV09SS0RBWS5JTlRMIiwiX3hsZm4uWE9SIjoiWE9SIiwiX3hsZm4uWi5URVNUIjoiWi5URVNUIn07ZnVuY3Rpb24gbFMoeSl7cmV0dXJuIm9mOiI9PXkuc2xpY2UoMCwzKSYmKHk9eS5zbGljZSgzKSksNjE9PXkuY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''NjE9PSh5PXkuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkmJih5PXkuc2xpY2UoMSkpLCh5PSh5PSh5PXkucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbihQLEwpe3Jl''@;'; put 'put ''dHVybiBMLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxhY2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gY1MoeSl7cmV0dXJuKCJvZjo9Iit5LnJlcGxhY2UocTksIiQxWy4kMiQzJDQkNV0iKS5y''@;'; put 'put ''ZXBsYWNlKC9cXTpcWy9nLCI6IikpLnJlcGxhY2UoLzsvZywifCIpLnJlcGxhY2UoLywvZywiOyIpfWZ1bmN0aW9uIHl2KHkpe3ZhciBQPXkuc3BsaXQoIjoiKTtyZXR1cm5bUFswXS5zcGxpdCgiLiIpWzBdLFBbMF0uc3BsaXQoIi4iKVsxXSsoUC5sZW5ndGg+MT8iOiIrKFBbMV0uc3BsaXQo''@;'; put 'put ''Ii4iKVsxXXx8UFsxXS5zcGxpdCgiLiIpWzBdKToiIildfWZ1bmN0aW9uIHVTKHkpe3JldHVybiB5LnJlcGxhY2UoL1wuLywiISIpfXZhciBmNj17fSxaMz17fTtIaS5XUz1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hp''@;'; put 'put ''cHMvd29ya3NoZWV0IiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvb2ZmaWNlRG9jdW1lbnQvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiXTt2YXIgSzA9dHlwZW9mIE1hcDwidSI7ZnVuY3Rpb24gd3YoeSxQLEwsUSl7dmFyIHJlPTAscGU9eS5sZW5ndGg7aWYoUSl7aWYoSzA/US5oYXMo''@;'; put 'put ''UCk6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFEsUCkpZm9yKHZhciBfZT1LMD9RLmdldChQKTpRW1BdO3JlPF9lLmxlbmd0aDsrK3JlKWlmKHlbX2VbcmVdXS50PT09UCYmKCF5W19lW3JlXV0uciYmIUx8fHlbX2VbcmVdXS5yPT1MKSlyZXR1cm4geS5Db3VudCsrLF9l''@;'; put 'put ''W3JlXX1lbHNlIGZvcig7cmU8cGU7KytyZSlpZih5W3JlXS50PT09UCYmKCF5W3JlXS5yJiYhTHx8eVtyZV0ucj09TCkpcmV0dXJuIHkuQ291bnQrKyxyZTtyZXR1cm4geVtwZV09e3Q6UCxyOkx9LHkuQ291bnQrKyx5LlVuaXF1ZSsrLFEmJihLMD8oUS5oYXMoUCl8fFEuc2V0KFAsW10pLFEu''@;'; put 'put ''Z2V0KFApLnB1c2gocGUpKTooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFEsUCl8fChRW1BdPVtdKSxRW1BdLnB1c2gocGUpKSkscGV9ZnVuY3Rpb24gWWQoeSxQKXt2YXIgTD17bWluOnkrMSxtYXg6eSsxfSxRPXBsO2lmKCFQKXJldHVybiBQO3ZhciByZT0tMTtyZXR1''@;'; put 'put ''cm4gUC5hdXRvJiYoTC5iZXN0Rml0PTEsUC5iZXN0d2lkdGgmJihyZT1QLmJlc3R3aWR0aCksZGVsZXRlIFAuYmVzdHdpZHRoKSxudWxsIT1QLndweD9yZT10ZihQLndweCk6bnVsbCE9UC53Y2g/cmU9UC53Y2g6bnVsbCE9UC53aWR0aCYmKEwuY3VzdG9tV2lkdGg9MSkscmU+LTE/KEwud2lk''@;'; put 'put ''dGg9amQocmUpLEwuY3VzdG9tV2lkdGg9MSk6bnVsbCE9UC53aWR0aCYmKEwud2lkdGg9UC53aWR0aCksUC5oaWRkZW4mJihMLmhpZGRlbj0hMCksTC5iZXN0Rml0JiZkZWxldGUgTC5jdXN0b21XaWR0aCxwbD1RLG51bGwhPVAubGV2ZWwmJihMLm91dGxpbmVMZXZlbD1MLmxldmVsPVAubGV2''@;'; put 'put ''ZWwpLG51bGwhPVAuc3R5bGUmJihMLnN0eWxlPVAuc3R5bGUpLEx9ZnVuY3Rpb24gTmkoeSxQLEwpe3ZhciBRPVdzKHlbIiFyZWYiXSkscmU9MCxwZT15WyIhbWVyZ2VzIl18fFtdLF9lPUFycmF5LmlzQXJyYXkoeSk7ZTpmb3IodmFyIHZlPTA7dmU8PVEuZS5yOysrdmUpe2Zvcih2YXIgU2U9''@;'; put 'put ''MDtTZTxwZS5sZW5ndGg7KytTZSlpZihwZVtTZV0ucy5yPD12ZSYmdmU8PXBlW1NlXS5lLnImJnBlW1NlXS5zLmM8PUwmJkw8PXBlW1NlXS5lLmMpY29udGludWUgZTt2YXIgSGU9X2U/KHlbdmVdfHxbXSlbTF06eVtkaSh7cjp2ZSxjOkx9KV07aWYoSGUpe3ZhciBCZT0xO2lmKEhlLnMmJihC''@;'; put 'put ''ZT1WbShIZS5zKS9ObS5DYWxpYnJpWzEyXXx8MSksSGUudylyZT1NYXRoLm1heChyZSxIZS53Lmxlbmd0aCpCZSk7ZWxzZSBzd2l0Y2goSGUudCl7Y2FzZSJiIjpjYXNlImUiOnJlPU1hdGgubWF4KHJlLDUqQmUpO2JyZWFrO2Nhc2UicyI6cmU9TWF0aC5tYXgocmUsSGUudi5sZW5ndGgqQmUq''@;'; put 'put ''MS4yfDApO2JyZWFrO2Nhc2UibiI6cm0oSGUsSGUudikscmU9TWF0aC5tYXgocmUsU3RyaW5nKEhlLnd8fEhlLnYpLmxlbmd0aCpCZSk7YnJlYWs7Y2FzZSJkIjpyZT1NYXRoLm1heChyZSw4KkJlKX19fXJlPDEmJihyZT0xKSxQLmJlc3R3aWR0aD1yZX1mdW5jdGlvbiBkZih5LFApe2lmKHkp''@;'; put 'put ''e3ZhciBMPVsuNywuNywuNzUsLjc1LC4zLC4zXTsieGxtbCI9PVAmJihMPVsxLDEsMSwxLC41LC41XSksbnVsbD09eS5sZWZ0JiYoeS5sZWZ0PUxbMF0pLG51bGw9PXkucmlnaHQmJih5LnJpZ2h0PUxbMV0pLG51bGw9PXkudG9wJiYoeS50b3A9TFsyXSksbnVsbD09eS5ib3R0b20mJih5LmJv''@;'; put 'put ''dHRvbT1MWzNdKSxudWxsPT15LmhlYWRlciYmKHkuaGVhZGVyPUxbNF0pLG51bGw9PXkuZm9vdGVyJiYoeS5mb290ZXI9TFs1XSl9fWZ1bmN0aW9uIEZvKHksUCl7Zm9yKHZhciBMPWx0KFApLFE9MDtRPHkubGVuZ3RoOysrUSl7dmFyIHJlPSEwLHBlPXlbUV07aWYocGUmJkwubGVuZ3RoPT1s''@;'; put 'put ''dChwZSkubGVuZ3RoJiYoTC5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZihyZSl7aWYobnVsbD09PVBbX2VdIT0obnVsbD09PXBlW19lXSkpcmV0dXJuIHZvaWQocmU9ITEpO2lmKCJvYmplY3QiPT10eXBlb2YgUFtfZV0paWYoWyJjb2xvciIsImZnQ29sb3IiLCJiZ0NvbG9yIl0uaW5kZXhPZihf''@;'; put 'put ''ZSk+LTEpe2lmKCQwKFBbX2VdLHBlW19lXSkpcmV0dXJuIHZvaWQocmU9ITEpfWVsc2V7aWYoIShbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmluZGV4T2YoX2UpPi0xKSlyZXR1cm4gdm9pZChyZT0hMSk7aWYoUG0oUFtfZV0scGVbX2VdKSlyZXR1cm4gdm9pZChyZT0hMSl9aWYo''@;'; put 'put ''UFtfZV0hPXBlW19lXSlyZXR1cm4gdm9pZChyZT0hMSl9fSkscmUpKXJldHVybiBRfXJldHVybiB5W3kubGVuZ3RoXT1vbihQKSx5Lmxlbmd0aC0xfWZ1bmN0aW9uIGd1KHksUCxMLFEpe3ZhciByZT1RLnJldnNzZltudWxsIT1MLno/TC56OiJHZW5lcmFsIl0scGU9NjAsX2U9eS5sZW5ndGg7''@;'; put 'put ''aWYobnVsbD09cmUmJlEuc3NmKWZvcig7cGU8MzkyOysrcGUpaWYobnVsbD09US5zc2ZbcGVdKXt3LmxvYWQoTC56LHBlKSxRLnNzZltwZV09TC56LFEucmV2c3NmW0wuel09cmU9cGU7YnJlYWt9dmFyIHZlPTAsU2U9MCxIZT0wLEJlPTA7aWYoUS5jZWxsU3R5bGVzKXtpZihMLnMpe2lmKFEu''@;'; put 'put ''Rm9udHMpe0wucy5jb2xvcnx8KEwucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIEdlPShMLnMuYm9sZD8xOjApfChMLnMuaXRhbGljPzI6MCl8KEwucy5zdHJpa2U/NDowKXwoTC5zLnNoYWRvdz84OjApO3ZlPFEuRm9udHMubGVuZ3RoOysrdmUpe3ZhciBudD1RLkZv''@;'; put 'put ''bnRzW3ZlXTtpZihudWxsPT1udC5mb250aGFzaCYmKG50LmZvbnRoYXNoPShudC5ib2xkPzE6MCl8KG50Lml0YWxpYz8yOjApfChudC5zdHJpa2U/NDowKXwobnQuc2hhZG93Pzg6MCkpLCEoR2UhPW50LmZvbnRoYXNofHwhIUwucy5jb2xvciE9ISFudC5jb2xvcnx8TC5zLnZhbGlnbiE9bnQu''@;'; put 'put ''dmFsaWdufHwoTC5zLnN6fHxudC5zeikmJihMLnMuc3p8fDEyKSE9KG50LnN6fHwxMil8fEwucy5uYW1lJiZMLnMubmFtZSE9bnQubmFtZXx8KEwucy51bmRlcmxpbmV8fDApIT0obnQudW5kZXJsaW5lfHwwKXx8TC5zLmNvbG9yJiYkMChMLnMuY29sb3IsbnQuY29sb3IpKSlicmVha312ZT09''@;'; put 'put ''US5Gb250cy5sZW5ndGgmJihRLkZvbnRzLnB1c2goe3N6Okwucy5zenx8MTIsY29sb3I6TC5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6TC5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6TC5zLmZhbWlseXx8MixzY2hlbWU6TC5zLnNjaGVtZSxib2xkOkwucy5ib2xkLGl0''@;'; put 'put ''YWxpYzpMLnMuaXRhbGljLHN0cmlrZTpMLnMuc3RyaWtlLHNoYWRvdzpMLnMuc2hhZG93LHZhbGlnbjpMLnMudmFsaWduLHVuZGVybGluZTpMLnMudW5kZXJsaW5lfSksMT09US5Gb250cy5sZW5ndGgmJloxKFEuRm9udHNbMF0pKX1pZihRLkZpbGxzKXtmb3IoO1NlPFEuRmlsbHMubGVuZ3Ro''@;'; put 'put ''OysrU2Upe3ZhciBkdD1RLkZpbGxzW1NlXTtpZighIUwucy5zdG9wcz09ISFkdC5zdG9wcyl7aWYoTC5zLnN0b3BzKXtpZihMLnMuYW5nbGUhPWR0LmFuZ2xlKWNvbnRpbnVlO3ZhciBDdD0hMDtpZihMLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihFdCxUdCl7JDAoRXQsZHQuc3RvcHNbVHRd''@;'; put 'put ''KSYmKEN0PSExKSxFdC52IT1kdC5zdG9wc1tUdF0udiYmKEN0PSExKX0pLCFDdCljb250aW51ZX1lbHNle2lmKG51bGw9PUwucy5wYXR0ZXJuVHlwZSYmTC5zLmZnQ29sb3ImJihMLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09TC5zLnBhdHRlcm5UeXBlKWJyZWFrO2lmKEwucy5wYXR0''@;'; put 'put ''ZXJuVHlwZSE9ZHQucGF0dGVyblR5cGV8fCQwKEwucy5mZ0NvbG9yLGR0LmZnQ29sb3IpfHwkMChMLnMuYmdDb2xvcixkdC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoU2U9PVEuRmlsbHMubGVuZ3RoKXt2YXIgY3Q9e307TC5zLnN0b3BzPyhudWxsIT1MLnMuYW5nbGUmJihjdC5hbmds''@;'; put 'put ''ZT1MLnMuYW5nbGUpLGN0LnN0b3BzPVtdLEwucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKEV0KXtjdC5zdG9wcy5wdXNoKG9uKEV0KSl9KSk6Y3Q9e3BhdHRlcm5UeXBlOkwucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOkwucy5mZ0NvbG9yLGJnQ29sb3I6TC5zLmJnQ29sb3J9LFEuRmlsbHMucHVz''@;'; put 'put ''aChjdCl9fWlmKFEuQm9yZGVycyl7Zm9yKDtIZTxRLkJvcmRlcnMubGVuZ3RoOysrSGUpe3ZhciBidD1RLkJvcmRlcnNbSGVdLEZ0PSJ0b3AiO2lmKEwuc1tGdF0pe2lmKCFidFtGdF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3Ip''@;'; put 'put ''KWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2lmKEwuc1tGdD0iYm90dG9tIl0pe2lmKCFidFtGdF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNv''@;'; put 'put ''bnRpbnVlO2lmKEwuc1tGdD0ibGVmdCJdKXtpZighYnRbRnRdfHxMLnNbRnRdLnN0eWxlIT1idFtGdF0uc3R5bGV8fCQwKEwuc1tGdF0uY29sb3IsYnRbRnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0Z0XSljb250aW51ZTtpZihMLnNbRnQ9InJpZ2h0Il0pe2lmKCFidFtG''@;'; put 'put ''dF18fEwuc1tGdF0uc3R5bGUhPWJ0W0Z0XS5zdHlsZXx8JDAoTC5zW0Z0XS5jb2xvcixidFtGdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbRnRdKWNvbnRpbnVlO2JyZWFrfUhlPT1RLkJvcmRlcnMubGVuZ3RoJiZRLkJvcmRlcnMucHVzaCh7dG9wOkwucy50b3AmJm9uKEwu''@;'; put 'put ''cy50b3ApfHx2b2lkIDAsYm90dG9tOkwucy5ib3R0b20mJm9uKEwucy5ib3R0b20pfHx2b2lkIDAsbGVmdDpMLnMubGVmdCYmb24oTC5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6TC5zLnJpZ2h0JiZvbihMLnMucmlnaHQpfHx2b2lkIDB9KX1pZihQJiZMLnMuc3R5bGUmJiJOb3JtYWwiIT09TC5z''@;'; put 'put ''LnN0eWxlKXtmb3IoQmU9MTtCZTxQLmxlbmd0aCYmUFtCZV0ubmFtZSE9TC5zLnN0eWxlOysrQmUpO0JlPT1QLmxlbmd0aCYmUC5wdXNoKHtuYW1lOkwucy5zdHlsZSxudW1GbXRJZDpyZSxmb250SWQ6dmUsZmlsbElkOlNlLGJvcmRlcklkOkhlfSl9fWZvcihwZT0wO3BlIT1fZTsrK3BlKWlm''@;'; put 'put ''KHlbcGVdLm51bUZtdElkPT1yZSYmeVtwZV0uZm9udElkPT12ZSYmeVtwZV0uZmlsbElkPT1TZSYmeVtwZV0uYm9yZGVySWQ9PUhlJiZ5W3BlXS54ZklkPT1CZSl7aWYoTC5zJiZMLnMuYWxpZ25tZW50KXtpZigheVtwZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKEwucy5hbGlnbm1lbnQuaG9y''@;'; put 'put ''aXpvbnRhbCE9eVtwZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fEwucy5hbGlnbm1lbnQudmVydGljYWwhPXlbcGVdLmFsaWdubWVudC52ZXJ0aWNhbHx8TC5zLmFsaWdubWVudC53cmFwVGV4dCE9eVtwZV0uYWxpZ25tZW50LndyYXBUZXh0fHxMLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT15''@;'; put 'put ''W3BlXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fEwucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT15W3BlXS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHxMLnMuYWxpZ25tZW50LmluZGVudCE9eVtwZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKHlbcGVdLmFsaWdubWVudClj''@;'; put 'put ''b250aW51ZTtpZihMLnMpe2lmKCEhTC5zLmhpZGRlbj09KCF5W3BlXS5wcm90ZWN0aW9ufHwheVtwZV0ucHJvdGVjdGlvbi5oaWRkZW4pfHwhIUwucy5lZGl0YWJsZT09KCF5W3BlXS5wcm90ZWN0aW9ufHwheVtwZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZih5W3Bl''@;'; put 'put ''XS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBwZX19ZWxzZSBmb3IocGU9MDtwZSE9X2U7KytwZSlpZih5W3BlXS5udW1GbXRJZD09PXJlKXJldHVybiBwZTtyZXR1cm4geVtfZV09e251bUZtdElkOnJlLGZvbnRJZDp2ZSxmaWxsSWQ6U2UsYm9yZGVySWQ6SGUseGZJZDpCZSxhcHBseU51''@;'; put 'put ''bWJlckZvcm1hdDoxfSx2ZT4wJiYoeVtfZV0uYXBwbHlGb250PTEpLFNlPjAmJih5W19lXS5hcHBseUZpbGw9MSksSGU+MCYmKHlbX2VdLmFwcGx5Qm9yZGVyPTEpLCFQJiZMLnMmJkwucy5zdHlsZSYmIk5vcm1hbCIhPUwucy5zdHlsZSYmKHlbX2VdLnN0eWxlPUwucy5zdHlsZSksTC5zJiZM''@;'; put 'put ''LnMuYWxpZ25tZW50JiYoeVtfZV0uYWxpZ25tZW50PXt9LFsiaG9yaXpvbnRhbCIsInZlcnRpY2FsIiwid3JhcFRleHQiLCJzaHJpbmtUb0ZpdCIsImluZGVudCIsInRleHRSb3RhdGlvbiJdLmZvckVhY2goZnVuY3Rpb24oRXQpe251bGwhPUwucy5hbGlnbm1lbnRbRXRdJiYoeVtfZV0uYWxp''@;'; put 'put ''Z25tZW50W0V0XT1MLnMuYWxpZ25tZW50W0V0XSl9KSksTC5zJiZMLnMuaGlkZGVuJiYoeVtfZV0ucHJvdGVjdGlvbnx8KHlbX2VdLnByb3RlY3Rpb249e30pLHlbX2VdLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxMLnMmJkwucy5lZGl0YWJsZSYmKHlbX2VdLnByb3RlY3Rpb258fCh5W19lXS5w''@;'; put 'put ''cm90ZWN0aW9uPXt9KSx5W19lXS5wcm90ZWN0aW9uLmVkaXRhYmxlPSEwKSxfZX1mdW5jdGlvbiBwNih5LFAsTCxRLHJlLHBlLF9lLHZlKXsiZCI9PT15LnQmJiJzdHJpbmciPT10eXBlb2YgeS52JiYoeS52PUh0KHkudikpO3RyeXtwZS5jZWxsTkYmJih5Lno9dy5fdGFibGVbUF0pfWNhdGNo''@;'; put 'put ''KEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9aWYoKCFwZXx8ITEhPT1wZS5jZWxsVGV4dCkmJiJ6IiE9eS50KXRyeXtpZihudWxsPT13Ll90YWJsZVtQXSYmdy5sb2FkKGRlW1BdfHwiR2VuZXJhbCIsUCksImUiPT09eS50KXkudz15Lnd8fFFvW3kudl07ZWxzZSBpZigwPT09UClpZigibiI9PT15''@;'; put 'put ''LnQpeS53PSgwfHkudik9PT15LnY/dy5fZ2VuZXJhbF9pbnQoeS52KTp3Ll9nZW5lcmFsX251bSh5LnYpO2Vsc2UgaWYoImQiPT09eS50KXt2YXIgU2U9VWUoeS52KTt5Lnc9KDB8U2UpPT09U2U/dy5fZ2VuZXJhbF9pbnQoU2UpOncuX2dlbmVyYWxfbnVtKFNlKX1lbHNle2lmKHZvaWQgMD09''@;'; put 'put ''PXkudilyZXR1cm4iIjt5Lnc9dy5fZ2VuZXJhbCh5LnYsWjMpfWVsc2UgeS53PXcuZm9ybWF0KFAsImQiPT09eS50P1VlKHkudik6eS52LFozKX1jYXRjaChIZSl7aWYocGUuV1RGKXRocm93IEhlfWlmKHBlLmNlbGxTdHlsZXMmJnZlKXtpZih5LnM9e30sbnVsbCE9TCYmdmUuRmlsbHMpdHJ5''@;'; put 'put ''e1V0KHkucyx2ZS5GaWxsc1tMXSl9Y2F0Y2goSGUpe2lmKHBlLldURil0aHJvdyBIZX1pZihudWxsIT1RJiZ2ZS5Gb250cyl0cnl7VXQoeS5zLHZlLkZvbnRzW1FdKX1jYXRjaChIZSl7aWYocGUuV1RGKXRocm93IEhlfWlmKG51bGwhPXJlJiZ2ZS5Cb3JkZXJzKXRyeXtVdCh5LnMsdmUuQm9y''@;'; put 'put ''ZGVyc1tyZV0pfWNhdGNoKEhlKXtpZihwZS5XVEYpdGhyb3cgSGV9fX1mdW5jdGlvbiBzNSh5LFAsTCl7aWYoeSYmeVsiIXJlZiJdKXt2YXIgUT1PaSh5WyIhcmVmIl0pO2lmKFEuZS5jPFEucy5jfHxRLmUucjxRLnMucil0aHJvdyBuZXcgRXJyb3IoIkJhZCByYW5nZSAoIitMKyIpOiAiK3lb''@;'; put 'put ''IiFyZWYiXSl9fXZhciBDdj0vPCg/Olx3Oik/bWVyZ2VDZWxsIHJlZj0iW0EtWjAtOTpdKyJccypbXC9dPz4vZyxhNT0vPCg/Olx3KzopP3NoZWV0RGF0YVtePl0qPihbXHNcU10qKTxcLyg/Olx3KzopP3NoZWV0RGF0YT4vLGRTPS88KD86XHc6KT9oeXBlcmxpbmsgW14+XSo+L2dtLCRaPS8i''@;'; put 'put ''KFx3KjpcdyopIi8sU3Y9LzwoPzpcdzopP2NvbFxiW14+XSpbXC9dPz4vZyxoZj0vPCg/Olx3Oik/Y29udHJvbFxiW14+XSpbXC9dPz4vZyxnNj0vPCg/Olx3Oik/YXV0b0ZpbHRlcltePl0qKFtcL118PihbXHNcU10qKTxcLyg/Olx3Oik/YXV0b0ZpbHRlcik+L2csTXY9LzwoPzpcdzopP3Bh''@;'; put 'put ''Z2VNYXJnaW5zW14+XSpcLz4vZyx4dj0vPCg/Olx3Oik/c2hlZXRQclxiKD86W14+YS16XVtePl0qKT9cLz4vLFRJPS88KD86XHc6KT9zaGVldFByb3RlY3Rpb25cYig/OltePmEtel1bXj5dKik/XC8+LyxEST0vPCg/Olx3Oik/c2hlZXRQcltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86''@;'; put 'put ''XHc6KT9zaGVldFByKT4vLElJPS88KD86XHc6KT9zaGVldFZpZXdzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0Vmlld3MpPi8saFM9LzwoPzpcdys6KT9kYXRhVmFsaWRhdGlvbnNbXj5dKig/OltcL118PihbXHNcU10qPyk8XC8oPzpcdys6KT9kYXRhVmFsaWRhdGlv''@;'; put 'put ''bnMpPi8sbTY9LzwoPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmdcYltePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZyk+L2csZmY9LzwoPzpcdzopP3NoZWV0Rm9ybWF0UHJbXj5dKlwvPi8sRXY9LzwoPzpcdys6KT90YWJsZVBhcnRz''@;'; put 'put ''Lio/PihbXHNcU10qPyk8XC8oPzpcdys6KT90YWJsZVBhcnRzPi8sVzM9LzwoPzpcdzopP3BhZ2VTZXR1cFtePl0qXC8+LyxXZD0vPCg/Olx3Oik/cm93QnJlYWtzW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3Jvd0JyZWFrcyk+LyxmUz0vPCg/Olx3Oik/Y29sQnJlYWtzW14+''@;'; put 'put ''XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2NvbEJyZWFrcyk+LyxxWj0vPCg/Olx3Oik/aGVhZGVyRm9vdGVyW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2hlYWRlckZvb3Rlcik+LyxMST0vPCg/Olx3Oik/cHJpbnRPcHRpb25zXGJbXj5cL10qXC8+Lzt2YXIgcFM9''@;'; put 'put ''LzwoPzpcdzopP3RhYmxlUGFydFxiW15cLz5dKltcL10/Pi9nO2Z1bmN0aW9uIHY2KHksUCxMLFEpe3ZhciByZT1sbih5KTtMLlNoZWV0c1tRXXx8KEwuU2hlZXRzW1FdPXt9KSxyZS5jb2RlTmFtZSYmKEwuU2hlZXRzW1FdLkNvZGVOYW1lPXJlLmNvZGVOYW1lKX12YXIgXzY9LzwoPzpcdzop''@;'; put 'put ''P3RhYkNvbG9yW14+XSpbXC9dPz4vLG1TPS88KD86XHc6KT9wYWdlU2V0VXBQcltePl0qW1wvXT8+Lyx2Uz0vPCg/Olx3Oik/b3V0bGluZVByW14+XSpbXC9dPz4vLENlPXtkaXNwbGF5ZWQ6ImFzRGlzcGxheWVkIixlbmQ6ImF0RW5kIixub25lOiJub25lIn0sa3Y9YmUoQ2UpLFJJPXtkaXNw''@;'; put 'put ''bGF5ZWQ6ImRpc3BsYXllZCIsbm9uZToiYmxhbmsiLGRhc2g6ImRhc2giLCJuL2EiOiJOQSJ9LGJTPWJlKFJJKSxDUz0vPCg/Olx3Oik/YnJrW14+XSpcLz4vZyxBdj1bIm9iamVjdHMiLCJzY2VuYXJpb3MiLCJzZWxlY3RMb2NrZWRDZWxscyIsInNlbGVjdFVubG9ja2VkQ2VsbHMiXSxUdj1b''@;'; put 'put ''ImZvcm1hdENvbHVtbnMiLCJmb3JtYXRSb3dzIiwiZm9ybWF0Q2VsbHMiLCJpbnNlcnRDb2x1bW5zIiwiaW5zZXJ0Um93cyIsImluc2VydEh5cGVybGlua3MiLCJkZWxldGVDb2x1bW5zIiwiZGVsZXRlUm93cyIsInNvcnQiLCJhdXRvRmlsdGVyIiwicGl2b3RUYWJsZXMiXTtmdW5jdGlvbiB4''@;'; put 'put ''Uyh5KXt2YXIgUD17fTtyZXR1cm5bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24oTCl7eVtMXSYmKFBbTF09cGFyc2VGbG9hdCh5W0xdKSl9KSxQfXZhciB5Nj17Q3VzdG9tOiJjdXN0b20iLERhdGU6ImRhdGUiLFRpbWU6''@;'; put 'put ''InRpbWUiLExlbmd0aDoidGV4dExlbmd0aCIsTGlzdDoibGlzdCIsRGVjaW1hbDoiZGVjaW1hbCIsV2hvbGU6Indob2xlIixBbnk6Im5vbmUifSxrUz1iZSh5NiksJDM9e0lOOiJiZXR3ZWVuIixPVDoibm90QmV0d2VlbiIsRVE6ImVxdWFsIixORToibm90RXF1YWwiLEdUOiJncmVhdGVyVGhh''@;'; put 'put ''biIsTFQ6Imxlc3NUaGFuIixHRToiZ3JlYXRlclRoYW5PckVxdWFsIixMRToibGVzc1RoYW5PckVxdWFsIn0sQVM9YmUoJDMpO2Z1bmN0aW9uIFRTKHksUCxMKXt2YXIgUT1bXSxyZT17fSxwZT0iIixfZT0hMSx2ZT0wLFNlPTA7cmV0dXJuIHkucmVwbGFjZSgkdCxmdW5jdGlvbihIZSxCZSl7''@;'; put 'put ''dmFyIEdlPWxuKEhlKTtzd2l0Y2goam4oR2VbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6cmU9e3Q6a1NbR2UudHlwZXx8Im5vbmUiXSxyZWY6KHBl''@;'; put 'put ''PUdlLnNxcmVmKT9wZS5pbmRleE9mKCIgIik+LTE/cGU6T2kocGUpOiIifSxHZS5vcGVyYXRvciYmKHJlLm9wPUFTW0dlLm9wZXJhdG9yXSkscmUuYmxhbms9ISFHZS5hbGxvd0JsYW5rJiZ5cihHZS5hbGxvd0JsYW5rKSwoIUdlLnNob3dJbnB1dE1lc3NhZ2V8fCF5cihHZS5zaG93SW5wdXRN''@;'; put 'put ''ZXNzYWdlKSkmJihyZS5pbnB1dD0hMSksR2UucHJvbXB0VGl0bGUmJigocmUuaW5wdXR8fChyZS5pbnB1dD17fSkpLnRpdGxlPXhyKEdlLnByb21wdFRpdGxlKSksR2UucHJvbXB0JiYoKHJlLmlucHV0fHwocmUuaW5wdXQ9e30pKS5tZXNzYWdlPXhyKEdlLnByb21wdCkpLCghR2Uuc2hvd0Vy''@;'; put 'put ''cm9yTWVzc2FnZXx8IXlyKEdlLnNob3dFcnJvck1lc3NhZ2UpKSYmKHJlLmVycm9yPSExKSxHZS5lcnJvclRpdGxlJiYoKHJlLmVycm9yfHwocmUuZXJyb3I9e30pKS50aXRsZT14cihHZS5lcnJvclRpdGxlKSksR2UuZXJyb3ImJigocmUuZXJyb3J8fChyZS5lcnJvcj17fSkpLm1lc3NhZ2U9''@;'; put 'put ''eHIoR2UuZXJyb3IpKSxyZS5lcnJvcj9yZS5lcnJvci5zdHlsZT1HZS5lcnJvclN0eWxlfHwic3RvcCI6R2UuZXJyb3JTdHlsZSYmKHJlLmVycm9yPXtzdHlsZTpHZS5lcnJvclN0eWxlfSkscmUudCYmUS5wdXNoKHJlKTticmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0''@;'; put 'put ''YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOlNlPUJlK0hlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpwZT15LnNsaWNlKFNlLEJlKSxyZS5yZWY9cGU/cGUuaW5kZXhPZigiICIpPi0xP3BlOk9pKHBlKToiIjticmVhaztjYXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNh''@;'; put 'put ''c2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIiOmNhc2UiPGZvcm11bGEyPiI6dmU9QmUrSGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKEwpYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgbnQ9eHIoUGkoeS5zbGljZSh2ZSxCZSkpKTtzd2l0Y2go''@;'; put 'put ''cmUudCl7Y2FzZSJMaXN0IjppZihyZS5sfHxyZS5mKWJyZWFrO2lmKDM0PT1udC5jaGFyQ29kZUF0KDApKXtyZS5sPW50LnNsaWNlKDEsLTEpLnNwbGl0KCIsIik7YnJlYWt9Y2FzZSJDdXN0b20iOm51bGw9PXJlLmYmJihyZS5mPW50KTticmVhaztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6''@;'; put 'put ''Y2FzZSJMZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6cmUub3B8fChyZS5vcD0iSU4iKSxudWxsPT1yZS52P3JlLnY9aXNOYU4oK250KT9udDorbnQ6KHJlLm1pbj1yZS52LHJlLm1heD1pc05hTigrbnQpP250OitudCxkZWxldGUgcmUudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNl''@;'; put 'put ''IjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7ZGVmYXVsdDppZihQJiZQLldURiYmIV9lKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrR2VbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24i''@;'; put 'put ''KX1yZXR1cm4gSGV9KSxRfXZhciBSdj17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LERTPWJlKFJ2KSxJUz17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRo''@;'; put 'put ''IixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxWST1iZShJUyk7ZnVuY3Rpb24gdzYoeSl7dmFyIFA9e307cmV0dXJuIG51bGwhPXkudmFsJiYoaXNOYU4oK3kudmFsKT9QLmY9eS52YWw6''@;'; put 'put ''UC52PSt5LnZhbCksUC50PXkudHlwZSxQfWZ1bmN0aW9uIHBmKHkpe3JldHVybiBTcigiY2Z2byIsbnVsbCx7dHlwZTp5LnQsdmFsOm51bGwhPXkudj95LnY6SHIoeS5mKX0pfWZ1bmN0aW9uIEM2KHksUCxMLFEpe3ZhciByZT13Nih5KTtyZXR1cm4gcmUuY29sb3I9VTIoUCxMLFEpLHJlfWZ1''@;'; put 'put ''bmN0aW9uIExTKHksUCxMLFEscmUpe3ZhciBwZT0oeS5tYXRjaCgvc3FyZWY9IihbXHc6JCBdKikiLyl8fFtdKVsxXTtyZXR1cm4gZnVuY3Rpb24gQkkoeSxQLEwsUSxyZSxwZSl7dmFyIF9lPSExLHZlPVtdLFNlPXtmOltdfSxIZT0wLEJlPTAsR2U9e2Nmdm9zOltdLGNvbG9yczpbXX0sbnQ9''@;'; put 'put ''e30sZHQ9LTEsQ3Q9MCxjdD0iIjtyZXR1cm4geS5yZXBsYWNlKCR0LGZ1bmN0aW9uKGJ0LEZ0KXt2YXIgRXQ9bG4oYnQpO3N3aXRjaChqbihFdFswXSkpe2Nhc2UiPGNvbmRpdGlvbmFsRm9ybWF0dGluZyI6Y2FzZSI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4iOmJyZWFrO2Nhc2UiPGNmUnVs''@;'; put 'put ''ZSI6Y2FzZSI8Y2ZSdWxlPiI6aWYoQmU9RnQsbnQ9RXQsU2U9e3JlZjpQLGY6W119LCFidC5tYXRjaCgvXC8+LykpYnJlYWs7Y2FzZSI8L2NmUnVsZT4iOnN3aXRjaChudC5keGZJZCYmcmUmJnJlLkRYRiYmKFNlLnM9cmUuRFhGWytudC5keGZJZF0pLG50LnR5cGUpe2Nhc2UiZHVwbGljYXRl''@;'; put 'put ''VmFsdWVzIjpTZS50PSJkdXAiO2JyZWFrO2Nhc2UidW5pcXVlVmFsdWVzIjpTZS50PSJ1bmlxdWUiO2JyZWFrO2Nhc2UiY29udGFpbnNCbGFua3MiOlNlLnQ9ImJsYW5rIixTZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNCbGFua3MiOlNlLnQ9ImJsYW5rIixTZS52PSExO2JyZWFrO2Nh''@;'; put 'put ''c2UiY29udGFpbnNFcnJvcnMiOlNlLnQ9ImVycm9yIixTZS52PSEwO2JyZWFrO2Nhc2Uibm90Q29udGFpbnNFcnJvcnMiOlNlLnQ9ImVycm9yIixTZS52PSExO2JyZWFrO2Nhc2UiY2VsbElzIjpzd2l0Y2gobnQub3BlcmF0b3Ipe2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5z''@;'; put 'put ''IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKFNlLnQ9InRleHQiLFNlLm9wPURTW250Lm9wZXJhdG9yXSxudWxsPT1udC50ZXh0KXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrU2Uub3ArIiBtaXNzaW5nIHRleHQiKTtTZS52PW50LnRleHQsU2UuZj1TZS5mWzBd''@;'; put 'put ''LG51bGw9PVNlLmYmJmRlbGV0ZSBTZS5mO2JyZWFrO2RlZmF1bHQ6U2UudD0idmFsIixTZS5vcD1BU1tudC5vcGVyYXRvcl0sMT09U2UuZi5sZW5ndGg/aXNOYU4oK1NlLmZbMF0pP1NlLmY9U2UuZlswXTooU2Uudj0rU2UuZlswXSxkZWxldGUgU2UuZik6KFNlLm1pbj1pc05hTigrU2UuZlsw''@;'; put 'put ''XSk/U2UuZlswXTorU2UuZlswXSxTZS5tYXg9aXNOYU4oK1NlLmZbMV0pP1NlLmZbMV06K1NlLmZbMV0sZGVsZXRlIFNlLmYpfWJyZWFrO2Nhc2UiZXhwcmVzc2lvbiI6U2UudD0iZm9ybXVsYSIsU2UuZj1TZS5mWzBdO2JyZWFrO2Nhc2UiY29udGFpbnNUZXh0IjpjYXNlIm5vdENvbnRhaW5z''@;'; put 'put ''VGV4dCI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZihTZS50PSJ0ZXh0IixTZS5vcD1EU1tudC50eXBlXSxudWxsPT1udC50ZXh0JiZTZS5mLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiQ0YgVGV4dCBSdWxlICIrU2Uub3ArIiBtaXNzaW5nIHRleHQiKTtTZS52PW51bGwh''@;'; put 'put ''PW50LnRleHQ/bnQudGV4dDpTZS5mWzFdLm1hdGNoKC8iLioiLyk/U2UuZlsxXS5zbGljZSgxLC0xKTpTZS5mWzFdLFNlLmY9U2UuZlswXSxudWxsPT1TZS5mJiZkZWxldGUgU2UuZjticmVhaztjYXNlImNvbG9yU2NhbGUiOmlmKFNlLnQ9InNjYWxlIiwhU2UuY29sb3JTY2FsZSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIm1pc3NpbmcgY29sb3JTY2FsZSIpO1NlLmNtaW49QzYoKEdlPVNlLmNvbG9yU2NhbGUpLmNmdm9zWzBdLEdlLmNvbG9yc1swXSxyZSxRKSwzPT1HZS5jZnZvcy5sZW5ndGgmJihTZS5jbWlkPUM2KEdlLmNmdm9zWzFdLEdlLmNvbG9yc1sxXSxyZSxRKSksU2UuY21heD1DNihH''@;'; put 'put ''ZS5jZnZvc1tHZS5jZnZvcy5sZW5ndGgtMV0sR2UuY29sb3JzW0dlLmNmdm9zLmxlbmd0aC0xXSxyZSxRKTticmVhaztjYXNlImRhdGFCYXIiOmlmKFNlLnQ9ImJhciIsIVNlLmRhdGFCYXIpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGRhdGFCYXIiKTsoR2U9U2UuZGF0YUJhcikuY29sb3Jz''@;'; put 'put ''WzBdJiYoU2UuY29sb3I9VTIoR2UuY29sb3JzWzBdLHJlLFEpKSxTZS5jbWluPXc2KEdlLmNmdm9zWzBdKSxTZS5jbWF4PXc2KEdlLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKFNlLnQ9Imljb24iLCFTZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0''@;'; put 'put ''Iik7U2UudGhyZXNoPShHZT1TZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oVHQpe3JldHVybiB3NihUdCl9KSxTZS52PUdlLnRhZyYmR2UudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLFNlLnJldj15cihHZS50YWcucmV2ZXJzZXx8ImZhbHNlIiksU2UucGN0PXlyKEdlLnRh''@;'; put 'put ''Zy5wZXJjZW50fHwidHJ1ZSIpLFNlLmhpZGRlbj0heXIoR2UudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOlNlLnQ9ImRhdGUiLFNlLm9wPVZJW250LnRpbWVQZXJpb2RdO2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjpTZS50PSJhdmciLFNlLm9wPSIwIj09''@;'; put 'put ''bnQuYWJvdmVBdmVyYWdlPyJMIjoiRyIsU2Uub3ArPW50LnN0ZERldj9udC5zdGREZXY6eXIobnQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6U2UudD0icmFuayIsU2Uub3A9KHlyKG50LmJvdHRvbXx8IjAiKT8iQiI6IlQiKSsoeXIobnQucGVyY2VudHx8''@;'; put 'put ''IjAiKT8iUCI6IlYiKSxTZS52PStudC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK250LnR5cGV9aWYoZGVsZXRlIFNlLmNvbG9yU2NhbGUsZGVsZXRlIFNlLmRhdGFCYXIsZGVsZXRlIFNlLmljb25TZXQsIVNlLnQpdGhyb3cgY29uc29sZS5sb2coeS5z''@;'; put 'put ''bGljZShCZSxGdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPVNlLmYmJiFTZS5mLmxlbmd0aCYmZGVsZXRlIFNlLmYsU2UuZGVsfHx2ZS5wdXNoKFNlKTticmVhaztjYXNlIjxmb3JtdWxhIjpjYXNlIjxmb3JtdWxhPiI6SGU9RnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3Jt''@;'; put 'put ''dWxhPiI6U2UuZi5wdXNoKHhyKHkuc2xpY2UoSGUsRnQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOkhlPUZ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOlNlLmYucHVzaCh4cih5LnNsaWNlKEhlLEZ0KSkpO2JyZWFrO2Nhc2UiPHNxcmVmPiI6Q3Q9RnQrYnQubGVuZ3RoO2JyZWFr''@;'; put 'put ''O2Nhc2UiPC9zcXJlZj4iOmN0PXkuc2xpY2UoQ3QsRnQpLFA9Y3Q/Y3QuaW5kZXhPZigiICIpPi0xP2N0Ok9pKGN0KToiIixTZS5yZWY9UCx2ZS5mb3JFYWNoKGZ1bmN0aW9uKFR0KXtUdC5yZWY9UH0pO2JyZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNhc2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxk''@;'; put 'put ''YXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOkdlPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOkV0fSxIZT1GdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2NvbG9yU2NhbGU+IjpTZS5jb2xvclNjYWxlPUdlO2JyZWFrO2Nhc2UiPC9kYXRhQmFy''@;'; put 'put ''PiI6U2UuZGF0YUJhcj1HZTticmVhaztjYXNlIjwvaWNvblNldD4iOlNlLmljb25TZXQ9R2U7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpHZS5jZnZvcy5wdXNoKEV0KTticmVhaztjYXNlIjwvY2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpHZS5jb2xvcnMucHVzaChFdCk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpfZT0hMDticmVhaztjYXNlIjwvZXh0PiI6X2U9ITE7YnJlYWs7Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3IiOmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8''@;'; put 'put ''Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6U2UuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOl9lPSEwLGR0PUZ0O2JyZWFrO2Nhc2UiPC9keGY+IjpfZT0hMSxTZS5zPXhEKHkuc2xpY2UoZHQsRnQrYnQubGVuZ3RoKSxyZSxRLEwpO2JyZWFr''@;'; put 'put ''O2RlZmF1bHQ6aWYoTCYmTC5XVEYpe2lmKHBlKWJyZWFrO2lmKCFfZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0V0WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSx2ZX0oeSxwZSxQLEwsUSxyZSl9dmFyIHpJPS88KD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+''@;'; put 'put ''XSopP1wvPz4vZztmdW5jdGlvbiBjNSh5LFApe3ZhciBMPTAsUT0wLHJlPTAscGU9MDtpZighUHx8IVAuQ2VsbFhmKXJldHVybiBudWxsO3ZhciBfZT1QLkNlbGxYZlt5XTtudWxsIT1fZSYmKG51bGwhPV9lLm51bUZtdElkJiYoTD1fZS5udW1GbXRJZCksbnVsbCE9X2UuZmlsbElkJiYoUT1f''@;'; put 'put ''ZS5maWxsSWQpLG51bGwhPV9lLmZvbnRJZCYmKHJlPV9lLmZvbnRJZCksbnVsbCE9X2UuYm9yZGVySWQmJihwZT1fZS5ib3JkZXJJZCkpO3ZhciB2ZT17dDoieiJ9O3RyeXtwNih2ZSxMLFEscmUscGUse1dURjoxLGNlbGxTdHlsZXM6ITB9LDAsUCl9Y2F0Y2h7fXJldHVybiB2ZS5zfWZ1bmN0''@;'; put 'put ''aW9uIFVJKHksUCxMLFEpe2lmKHZvaWQgMD09PXkudiYmdm9pZCAwPT09eS5mJiZudWxsPT15LnMmJiF5LmN8fCJ6Ij09PXkudCYmIXkuYyYmIVEuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcmU9IiIscGU9eS50LF9lPXkudjtpZigieiIhPT15LnQpc3dpdGNoKHkudCl7Y2FzZSJiIjpyZT15''@;'; put 'put ''LnY/IjEiOiIwIjticmVhaztjYXNlIm4iOnJlPSIiK3kudjticmVhaztjYXNlImUiOnJlPVFvW3kudl07YnJlYWs7Y2FzZSJkIjpRJiZRLmNlbGxEYXRlcz9yZT1IdCh5LnYsLTEpLnRvSVNPU3RyaW5nKCk6KCh5PW9uKHkpKS50PSJuIixyZT0iIisoeS52PVVlKEh0KHkudikpKSksdHlwZW9m''@;'; put 'put ''IHkuej4idSImJih5Lno9dy5fdGFibGVbMTRdKTticmVhaztkZWZhdWx0OnJlPXkudn12YXIgdmU9InoiPT15LnQ/IiI6ZnMoInYiLEhyKHJlKSksU2U9e3I6UH0sSGU9UT9ndShRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMseSxRKTowO3N3aXRjaCgwIT09SGUmJihTZS5zPUhlKSx5LnQpe2Nh''@;'; put 'put ''c2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOlNlLnQ9ImQiO2JyZWFrO2Nhc2UiYiI6U2UudD0iYiI7YnJlYWs7Y2FzZSJlIjpTZS50PSJlIjticmVhaztkZWZhdWx0OmlmKG51bGw9PXkudil7ZGVsZXRlIHkudDticmVha31pZihRJiZRLmJvb2tTU1Qpe3ZlPWZzKCJ2IiwiIit3dihRLlN0''@;'; put 'put ''cmluZ3MseS52LHkuUj95LnI9SmgoeS5SKTpudWxsLFEucmV2U3RyaW5ncykpLFNlLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkoeS5SKT8odmU9Ijxpcz4iK0poKHkuUikrIjwvaXM+IixTZS50PSJpbmxpbmVTdHIiKTpTZS50PSJzdHIifWlmKHkudCE9cGUmJih5LnQ9cGUseS52PV9lKSx5''@;'; put 'put ''LmYpe3ZhciBCZT15LkYmJnkuRi5zbGljZSgwLFAubGVuZ3RoKT09UD97dDoiYXJyYXkiLHJlZjp5LkZ9Om51bGw7dmU9U3IoImYiLEhyKHkuZiksQmUpKyhudWxsIT15LnY/dmU6IiIpfXJldHVybiB5LmwmJkxbIiFsaW5rcyJdLnB1c2goW1AseS5sXSkseS5jJiZMWyIhY29tbWVudHMiXS5w''@;'; put 'put ''dXNoKFtQLHkuY10pLFNyKCJjIix2ZSxTZSl9dmFyIFpJPWZ1bmN0aW9uKCl7dmFyIHk9LzwoPzpcdys6KT9jWyBcLz5dLyxQPS88XC8oPzpcdys6KT9yb3c+LyxMPS9yPVsiJ10oW14iJ10qKVsiJ10vLFE9LzwoPzpcdys6KT9pcz4oW1xTXHNdKj8pPFwvKD86XHcrOik/aXM+LyxyZT0vcmVm''@;'; put 'put ''PVsiJ10oW14iJ10qKVsiJ10vLHBlPXVsKCJ2IiksX2U9dWwoImYiKTtyZXR1cm4gZnVuY3Rpb24oU2UsSGUsQmUsR2UsbnQsZHQsQ3Qpe2Zvcih2YXIgdW4scW4sZXIsdHIsUXIsY3Q9MCxidD0iIixGdD1bXSxFdD1bXSxUdD0wLFp0PTAscG49MCxLbj0iIix6bj0wLGtuPTAsWm49MCxWcj0w''@;'; put 'put ''LG9pPTAsa2k9MCxMaT1BcnJheS5pc0FycmF5KEN0LkNlbGxYZiksdXI9W10sQW49W10sdnI9QXJyYXkuaXNBcnJheShCZSkscnI9W10sU249e30scHI9ITEsQ2k9U2Uuc3BsaXQoUCksanI9ISFHZS5zaGVldFN0dWJzLGppPSEhR2UuY2VsbEhUTUwsX289ISghMT09PUdlLmNlbGxUZXh0JiYh''@;'; put 'put ''R2UuY2VsbE5GJiYhR2UuY2VsbFN0eWxlcyksRGk9MCxZbz1DaS5sZW5ndGg7RGkhPVlvOysrRGkpe3ZhciBsbz0oYnQ9Q2lbRGldLnRyaW0oKSkubGVuZ3RoO2lmKDAhPT1sbyl7dmFyIEFvPTA7ZTpmb3IoY3Q9MDtjdDxsbzsrK2N0KXN3aXRjaChidFtjdF0pe2Nhc2UiPiI6aWYoIi8iIT1i''@;'; put 'put ''dFtjdC0xXSl7KytjdDticmVhayBlfUdlLmNlbGxTdHlsZXMmJm51bGwhPShxbj1sbihidC5zbGljZShBbyxjdCksITApKS5yJiZwYXJzZUludChxbi5yLDEwKSYmKHpuPXBhcnNlSW50KHFuLnIsMTApLFNuPXt9LHByPSExLHFuLmh0JiYocHI9ITAsU24uaHB0PXBhcnNlRmxvYXQocW4uaHQp''@;'; put 'put ''LFNuLmhweD1VMShTbi5ocHQpKSxxbi5keURlc2NlbnQmJihwcj0hMCxTbi5keURlc2NlbnQ9cW4uZHlEZXNjZW50KSwiMSI9PXFuLmhpZGRlbiYmKHByPSEwLFNuLmhpZGRlbj0hMCksbnVsbCE9cW4ub3V0bGluZUxldmVsJiYocHI9ITAsU24ubGV2ZWw9K3FuLm91dGxpbmVMZXZlbCkscW4u''@;'; put 'put ''cyYmQ3QmJkN0LkNlbGxYZiYmKHByPSEwLFNuLnM9YzUocW4ucyxDdCkpLHByJiYocnJbem4tMV09U24pKTticmVhaztjYXNlIjwiOkFvPWN0fWlmKEFvPj1jdClicmVhaztpZih6bj1udWxsIT0ocW49bG4oYnQuc2xpY2UoQW8sY3QpLCEwKSkucj9wYXJzZUludChxbi5yLDEwKTp6bisxLGtu''@;'; put 'put ''PS0xLCEoR2Uuc2hlZXRSb3dzJiZHZS5zaGVldFJvd3M8em4pKXtHZS5ub2RpbXx8KG50LnMucj56bi0xJiYobnQucy5yPXpuLTEpLG50LmUucjx6bi0xJiYobnQuZS5yPXpuLTEpKTt2YXIgeG89e3Q6InJvdyIscm93OltdLFI6em4tMSxpZHg6SGV9O0dlLmNlbGxTdHlsZXMmJihTbj17fSxw''@;'; put 'put ''cj0hMSxxbi5odCYmKHByPSEwLFNuLmhwdD1wYXJzZUZsb2F0KHFuLmh0KSxTbi5ocHg9VTEoU24uaHB0KSkscW4uZHlEZXNjZW50JiYocHI9ITAsU24uZHlEZXNjZW50PXFuLmR5RGVzY2VudCksIjEiPT1xbi5oaWRkZW4mJihwcj0hMCxTbi5oaWRkZW49ITApLG51bGwhPXFuLm91dGxpbmVM''@;'; put 'put ''ZXZlbCYmKHByPSEwLFNuLmxldmVsPStxbi5vdXRsaW5lTGV2ZWwpLHFuLnMmJihwcj0hMCxTbi5zPWM1KHFuLnMsQ3QpKSxwciYmKEdlLmNhbGxiYWNrP3hvLnByb3BzPVNuOnJyW3puLTFdPVNuKSksRnQ9YnQuc2xpY2UoY3QpLnNwbGl0KHkpO2Zvcih2YXIgaGk9MDtoaSE9RnQubGVuZ3Ro''@;'; put 'put ''JiYiPCI9PUZ0W2hpXS50cmltKCkuY2hhckF0KDApOysraGkpO2ZvcihGdD1GdC5zbGljZShoaSksY3Q9MDtjdCE9RnQubGVuZ3RoOysrY3QpaWYoMCE9PShidD1GdFtjdF0udHJpbSgpKS5sZW5ndGgpe2lmKEV0PWJ0Lm1hdGNoKEwpLFR0PWN0LFp0PTAscG49MCxidD0iPGMgIisoIjwiPT1i''@;'; put 'put ''dC5zbGljZSgwLDEpPyI+IjoiIikrYnQsbnVsbCE9RXQmJjI9PT1FdC5sZW5ndGgpe2ZvcihUdD0wLEtuPUV0WzFdLFp0PTA7WnQhPUtuLmxlbmd0aCYmISgocG49S24uY2hhckNvZGVBdChadCktNjQpPDF8fHBuPjI2KTsrK1p0KVR0PTI2KlR0K3BuO2tuPS0tVHR9ZWxzZSsra247Zm9yKFp0''@;'; put 'put ''PTA7WnQhPWJ0Lmxlbmd0aCYmNjIhPT1idC5jaGFyQ29kZUF0KFp0KTsrK1p0KTtpZigrK1p0LChxbj1sbihidC5zbGljZSgwLFp0KSwhMCkpLnJ8fChxbi5yPWRpKHtyOnpuLTEsYzprbn0pKSx1bj17dDoiIn0sbnVsbCE9KEV0PShLbj1idC5zbGljZShadCkpLm1hdGNoKHBlKSkmJiIiIT09''@;'; put 'put ''RXRbMV0mJih1bi52PXhyKEV0WzFdKSksR2UuY2VsbEZvcm11bGEpe2lmKG51bGwhPShFdD1Lbi5tYXRjaChfZSkpJiYiIiE9PUV0WzFdKXtpZih1bi5mPXhyKFBpKEV0WzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLEdlLnhsZm58fCh1bi5mPUcxKHVuLmYpKSxFdFswXS5pbmRleE9mKCd0''@;'; put 'put ''PSJhcnJheSInKT4tMSl1bi5GPShLbi5tYXRjaChyZSl8fFtdKVsxXSx1bi5GLmluZGV4T2YoIjoiKT4tMSYmdXIucHVzaChbT2kodW4uRiksdW4uRl0pO2Vsc2UgaWYoRXRbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXt0cj1sbihFdFswXSk7dmFyIHRhPXhyKFBpKEV0WzFdKSk7R2Uu''@;'; put 'put ''eGxmbnx8KHRhPUcxKHRhKSksQW5bcGFyc2VJbnQodHIuc2ksMTApXT1bdHIsdGEscW4ucl19fWVsc2UoRXQ9S24ubWF0Y2goLzxmW14+XSpcLz4vKSkmJkFuWyh0cj1sbihFdFswXSkpLnNpXSYmKHVuLmY9bkkoQW5bdHIuc2ldWzFdLEFuW3RyLnNpXVsyXSxxbi5yKSk7dmFyIE1uPXNzKHFu''@;'; put 'put ''LnIpO2ZvcihadD0wO1p0PHVyLmxlbmd0aDsrK1p0KU1uLnI+PXVyW1p0XVswXS5zLnImJk1uLnI8PXVyW1p0XVswXS5lLnImJk1uLmM+PXVyW1p0XVswXS5zLmMmJk1uLmM8PXVyW1p0XVswXS5lLmMmJih1bi5GPXVyW1p0XVsxXSl9aWYobnVsbD09cW4udCYmdm9pZCAwPT09dW4udilpZih1''@;'; put 'put ''bi5mfHx1bi5GKXVuLnY9MCx1bi50PSJuIjtlbHNle2lmKCFqciljb250aW51ZTt1bi50PSJ6In1lbHNlIHVuLnQ9cW4udHx8Im4iO3N3aXRjaChudC5zLmM+a24mJihudC5zLmM9a24pLG50LmUuYzxrbiYmKG50LmUuYz1rbiksdW4udCl7Y2FzZSJuIjppZigiIj09dW4udnx8bnVsbD09dW4u''@;'; put 'put ''dil7aWYoIWpyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udj1wYXJzZUZsb2F0KHVuLnYpO2JyZWFrO2Nhc2UicyI6aWYodHlwZW9mIHVuLnY+InUiKXtpZighanIpY29udGludWU7dW4udD0ieiJ9ZWxzZSBlcj1mNltwYXJzZUludCh1bi52LDEwKV0sdW4udj1lci50LHVuLnI9ZXIucixl''@;'; put 'put ''ci5SJiYodW4uUj1lci5SKSxqaSYmKHVuLmg9ZXIuaCk7YnJlYWs7Y2FzZSJzdHIiOnVuLnQ9InMiLHVuLnY9bnVsbCE9dW4udj9QaSh1bi52KToiIixqaSYmKHVuLmg9cm8odW4udikpO2JyZWFrO2Nhc2UiaW5saW5lU3RyIjpFdD1Lbi5tYXRjaChRKSx1bi50PSJzIixudWxsIT1FdCYmKGVy''@;'; put 'put ''PUQ5KEV0WzFdKSk/KHVuLnY9ZXIudCxlci5SJiYodW4uUj1lci5SKSxqaSYmKHVuLmg9ZXIuaCkpOnVuLnY9IiI7YnJlYWs7Y2FzZSJiIjp1bi52PXlyKHVuLnYpO2JyZWFrO2Nhc2UiZCI6R2UuY2VsbERhdGVzP3VuLnY9SHQodW4udiwxKToodW4udj1VZShIdCh1bi52LDEpKSx1bi50PSJu''@;'; put 'put ''Iik7YnJlYWs7Y2FzZSJlIjohMSE9PUdlLmNlbGxUZXh0JiYodW4udz11bi52KSx1bi52PUthW3VuLnZdfWlmKF9vKXtabj1Wcj1vaT1raT0wLFFyPW51bGwsTGkmJnZvaWQgMCE9PXFuLnMmJm51bGwhPShRcj1DdC5DZWxsWGZbcW4uc10pJiYobnVsbCE9UXIubnVtRm10SWQmJihabj1Rci5u''@;'; put 'put ''dW1GbXRJZCksR2UuY2VsbFN0eWxlcyYmKG51bGwhPVFyLmZpbGxJZCYmKFZyPVFyLmZpbGxJZCksbnVsbCE9UXIuZm9udElkJiYob2k9UXIuZm9udElkKSxudWxsIT1Rci5ib3JkZXJJZCYmKGtpPVFyLmJvcmRlcklkKSkpO3RyeXtwNih1bixabixWcixvaSxraSxHZSwwLEN0KX1jYXRjaHt9''@;'; put 'put ''R2UuY2VsbFN0eWxlcyYmdW4ucyYmKFFyJiZRci5hbGlnbm1lbnQmJih1bi5zLmFsaWdubWVudD1vbihRci5hbGlnbm1lbnQpKSxRciYmUXIucHJvdGVjdGlvbiYmKG51bGwhPVFyLnByb3RlY3Rpb24uaGlkZGVuJiYodW4ucy5oaWRkZW49UXIucHJvdGVjdGlvbi5oaWRkZW4pLG51bGwhPVFy''@;'; put 'put ''LnByb3RlY3Rpb24uZWRpdGFibGUmJih1bi5zLmVkaXRhYmxlPVFyLnByb3RlY3Rpb24uZWRpdGFibGUpKSxRciYmUXIuc3R5bGUmJih1bi5zLnN0eWxlPVFyLnN0eWxlKSksR2UuY2VsbERhdGVzJiZMaSYmIm4iPT11bi50JiZ3LmlzX2RhdGUody5fdGFibGVbWm5dKSYmKHVuLnQ9ImQiLHVu''@;'; put 'put ''LnY9aHQodW4udikpfXZhciBNcztHZS5ub2RpbSYmKE1zPXNzKHFuLnIpLG50LnMucj5Ncy5yJiYobnQucy5yPU1zLnIpLG50LmUucjxNcy5yJiYobnQuZS5yPU1zLnIpKSxHZS5jYWxsYmFjaz8oTXM9c3MocW4ucikseG8ucm93W01zLmNdPXVuKTp2cj8oQmVbKE1zPXNzKHFuLnIpKS5yXXx8''@;'; put 'put ''KEJlW01zLnJdPVtdKSxCZVtNcy5yXVtNcy5jXT11bik6QmVbcW4ucl09dW59R2UuY2FsbGJhY2smJkdlLmNhbGxiYWNrKHhvKX19fWpyJiYhR2UuY2FsbGJhY2smJmM1KDAsQ3QpLHJyLmxlbmd0aD4wJiYoQmVbIiFyb3dzIl09cnIpfX0oKSxSUz1Tcigid29ya3NoZWV0IixudWxsLHt4bWxu''@;'; put 'put ''czppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yLCJ4bWxuczp4MTRhYyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAwOS85L2FjIiwieG1sbnM6bWMiOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvbWFya3VwLWNvbXBhdGli''@;'; put 'put ''aWxpdHkvMjAwNiIsIm1jOklnbm9yYWJsZSI6IngxNGFjIn0pO2Z1bmN0aW9uIFdJKHksUCxMLFEpe3ZhciBfZSxyZT1bQm4sUlNdLHZlPSIiLFNlPUwuU2hlZXRzW0wuU2hlZXROYW1lc1t5XV07bnVsbD09U2UmJihTZT17fSk7dmFyIEhlPVNlWyIhcmVmIl18fCJBMSIsQmU9T2koSGUpO2lm''@;'; put 'put ''KEJlLmUuYz4xNjM4M3x8QmUuZS5yPjEwNDg1NzUpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitIZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtCZS5lLmM9TWF0aC5taW4oQmUuZS5jLDE2MzgzKSxCZS5lLnI9TWF0aC5taW4oQmUuZS5jLDEwNDg1''@;'; put 'put ''NzUpLEhlPU9vKEJlKX1RfHwoUT17fSksU2VbIiFjb21tZW50cyJdPVtdO3ZhciBHZT1bXSxudD1TZVsiIXByaW50Il07aWYoZnVuY3Rpb24gWm8oeSxQLEwsUSxyZSl7dmFyIHBlPSExLF9lPXt9LHZlPW51bGw7aWYoInhsc3giIT09US5ib29rVHlwZSYmUC52YmFyYXcpe3ZhciBTZT1QLlNo''@;'; put 'put ''ZWV0TmFtZXNbTF07dHJ5e1AuV29ya2Jvb2smJihTZT1QLldvcmtib29rLlNoZWV0c1tMXS5Db2RlTmFtZXx8U2UpfWNhdGNoe31wZT0hMCxfZS5jb2RlTmFtZT1IcihTZSl9eSYmeVsiIWNvbmRmbXQiXSYmKF9lLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLHkmJnlb''@;'; put 'put ''IiF0YWJjb2xvciJdJiYodmU9KHZlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytPdSh5WyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgSGU9ITEsQmU9e307aWYoKCgoeXx8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoSGU9ITAsQmUuZml0VG9QYWdlPTEpLEhlJiYo''@;'; put 'put ''dmU9KHZlfHwiIikrU3IoInBhZ2VTZXRVcFByIixudWxsLEJlKSkseSYmeVsiIW91dGxpbmUiXSl7dmFyIEdlPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5UmlnaHQ6MX07eVsiIW91dGxpbmUiXS5hYm92ZSYmKEdlLnN1bW1hcnlCZWxvdz0wKSx5WyIhb3V0bGluZSJdLmxlZnQmJihHZS5zdW1t''@;'; put 'put ''YXJ5UmlnaHQ9MCksdmU9KHZlfHwiIikrU3IoIm91dGxpbmVQciIsbnVsbCxHZSl9IXBlJiYhdmV8fChyZVtyZS5sZW5ndGhdPVNyKCJzaGVldFByIix2ZSxfZSkpfShTZSxMLHksUCxyZSkscmVbcmUubGVuZ3RoXT1TcigiZGltZW5zaW9uIixudWxsLHtyZWY6SGV9KSxyZVtyZS5sZW5ndGhd''@;'; put 'put ''PWZ1bmN0aW9uIE92KHksUCxMLFEpe3ZhciByZT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChRfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIHBlPVEuV29ya2Jvb2suVmlld3MsX2U9cGVbTF18fHBlWzBdO3JlLnJpZ2h0VG9MZWZ0PV9lLlJUTD8iMSI6IjAi''@;'; put 'put ''LF9lLnpvb20mJihyZS56b29tU2NhbGU9X2Uuem9vbSksbnVsbCE9X2UuZ3JpZCYmKHJlLnNob3dHcmlkTGluZXM9X2UuZ3JpZCksX2UudmlldyYmKHJlLnZpZXc9X2Uudmlldyl9bnVsbCE9eVsiIWdyaWRsaW5lcyJdJiYocmUuc2hvd0dyaWRMaW5lcz0hIXlbIiFncmlkbGluZXMiXSk7dmFy''@;'; put 'put ''IHZlPSIiLFNlPXtyOjAsYzowfTtpZih5WyIhc2VsIl0pe2lmKCEoU2U9eVsiIXNlbCJdLmNlbGwpKXtpZigheVsiIXNlbCJdLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtTZT1Xcyh5WyIhc2VsIl0ucmFuZ2UucmVwbGFj''@;'; put 'put ''ZSgvXHMuKiQvLCIiKSkuc30ic3RyaW5nIj09dHlwZW9mIFNlJiYoU2U9c3MoU2UpKX12YXIgQmU9eVsiIWZyZWV6ZSJdPyJzdHJpbmciPT10eXBlb2YgeVsiIWZyZWV6ZSJdP3NzKHlbIiFmcmVlemUiXSk6eVsiIWZyZWV6ZSJdOntjOjAscjowfTtpZih5WyIhZnJlZXplIl0pe3ZhciBHZT1k''@;'; put 'put ''aShCZSksbnQ9e3N0YXRlOiJmcm96ZW4iLHhTcGxpdDpCZS5jLHlTcGxpdDpCZS5yLHRvcExlZnRDZWxsOkdlfTt5WyIhc2VsIl0mJihudC5hY3RpdmVQYW5lPShTZS5yPj1CZS5yJiZCZS5yPjA/ImJvdHRvbSI6InRvcCIpKyhTZS5jPj1CZS5jJiZCZS5jPjA/IlJpZ2h0IjoiTGVmdCIpKSx2''@;'; put 'put ''ZT1TcigicGFuZSIsbnVsbCxudCl9aWYoeVsiIXNlbCJdKXt2YXIgZHQ9e2FjdGl2ZUNlbGw6InN0cmluZyI9PXR5cGVvZiBTZT9TZTpkaShTZSl9O2R0LnNxcmVmPXlbIiFzZWwiXS5yYW5nZT95WyIhc2VsIl0ucmFuZ2U6ZHQuYWN0aXZlQ2VsbCsiOiIrZHQuYWN0aXZlQ2VsbCx2ZSs9U3Io''@;'; put 'put ''InNlbGVjdGlvbiIsbnVsbCxkdCkseVsiIWZyZWV6ZSJdJiYoQmUuYz4wJiYoZHQucGFuZT0idG9wUmlnaHQiLHZlKz1Tcigic2VsZWN0aW9uIixudWxsLGR0KSksQmUucj4wJiYoZHQucGFuZT0iYm90dG9tTGVmdCIsdmUrPVNyKCJzZWxlY3Rpb24iLG51bGwsZHQpKSxCZS5jPjAmJkJlLnI+''@;'; put 'put ''MCYmKGR0LnBhbmU9ImJvdHRvbVJpZ2h0Iix2ZSs9U3IoInNlbGVjdGlvbiIsbnVsbCxkdCkpKX1yZXR1cm4gU3IoInNoZWV0Vmlld3MiLFNyKCJzaGVldFZpZXciLHZlfHxudWxsLHJlKSx7fSl9KFNlLDAseSxMKSxQLnNoZWV0Rm9ybWF0KXt2YXIgZHQ9e2RlZmF1bHRSb3dIZWlnaHQ6UC5z''@;'; put 'put ''aGVldEZvcm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpQLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9UC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihkdC5vdXRsaW5lTGV2ZWxSb3c9UC5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxS''@;'; put 'put ''b3cpLHJlW3JlLmxlbmd0aF09U3IoInNoZWV0Rm9ybWF0UHIiLG51bGwsZHQpfWVsc2UgaWYoU2VbIiFzaGVldEZvcm1hdCJdKXt2YXIgQ3Q9e30sY3Q9ITE7U2VbIiFzaGVldEZvcm1hdCJdLnJvdyYmKFNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0PyhjdD0hMCxDdC5kZWZhdWx0Um93SGVp''@;'; put 'put ''Z2h0PVNlWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0LEN0LmN1c3RvbUhlaWdodD0xKTpTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweD8oY3Q9ITAsQ3QuZGVmYXVsdFJvd0hlaWdodD1qMihTZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweCksQ3QuY3VzdG9tSGVpZ2h0PTEpOigwPT09U2VbIiFz''@;'; put 'put ''aGVldEZvcm1hdCJdLnJvdy5ocHR8fDA9PT1TZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhweHx8U2VbIiFzaGVldEZvcm1hdCJdLnJvdy5oaWRkZW4pJiYoY3Q9ITAsQ3QuZGVmYXVsdFJvd0hlaWdodD1DdC5kZWZhdWx0Um93SGVpZ2h0fHwxNixDdC5jdXN0b21IZWlnaHQ9MSxDdC56ZXJvSGVp''@;'; put 'put ''Z2h0PTEpLFNlWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQmJihDdFsieDE0YWM6ZHlEZXNjZW50Il09U2VbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCkpLFNlWyIhc2hlZXRGb3JtYXQiXS5jb2wmJihTZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaHx8cHUoU2VbIiFzaGVldEZvcm1hdCJd''@;'; put 'put ''LmNvbCksQ3QuZGVmYXVsdENvbFdpZHRoPVNlWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NoKzUvcGx8fDAsY3Q9ITApLG51bGw9PUN0LmRlZmF1bHRSb3dIZWlnaHQmJihDdC5kZWZhdWx0Um93SGVpZ2h0PTE2KSxudWxsPT1DdC5kZWZhdWx0Q29sV2lkdGgmJihDdC5kZWZhdWx0Q29sV2lkdGg9''@;'; put 'put ''MTApLEN0Lm91dGxpbmVMZXZlbFJvdz1DdC5vdXRsaW5lTGV2ZWxSb3d8fDcsY3QmJihyZVtyZS5sZW5ndGhdPVNyKCJzaGVldEZvcm1hdFByIixudWxsLEN0KSl9bnVsbCE9U2VbIiFjb2xzIl0mJlNlWyIhY29scyJdLmxlbmd0aD4wJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBEdih5LFAs''@;'; put 'put ''TCl7Zm9yKHZhciByZSxRPVsiPGNvbHM+Il0scGU9MDtwZSE9UC5sZW5ndGg7KytwZSlpZihyZT1QW3BlXSl7aWYocmUuYXV0byYmTmkoeSxyZSxwZSkscmUuc3x8cmUueil7dmFyIF9lPXt0OiJ6In07bnVsbCE9cmUucyYmKF9lLnM9cmUucyksbnVsbCE9cmUueiYmKF9lLno9cmUueikscmUu''@;'; put 'put ''c3R5bGU9Z3UoTC5jZWxsWGZzLEwuY2VsbFN0eWxlWGZzLF9lLEwpfVFbUS5sZW5ndGhdPVNyKCJjb2wiLG51bGwsWWQocGUscmUpKX1yZXR1cm4gUVtRLmxlbmd0aF09IjwvY29scz4iLFEuam9pbigiIil9KFNlLFNlWyIhY29scyJdLFApKSxyZVtfZT1yZS5sZW5ndGhdPSI8c2hlZXREYXRh''@;'; put 'put ''Lz4iLFNlWyIhbGlua3MiXT1bXSxudWxsIT1TZVsiIXJlZiJdJiYodmU9ZnVuY3Rpb24gWUkoeSxQLEwsUSl7dmFyIFNlLGJ0LHJlPVtdLHBlPVtdLF9lPU9pKHlbIiFyZWYiXSksdmU9IiIsSGU9IiIsQmU9W10sR2U9MCxudD0wLGR0PXlbIiFyb3dzIl0sQ3Q9QXJyYXkuaXNBcnJheSh5KSxj''@;'; put 'put ''dD17cjpIZX0sRnQ9LTE7Zm9yKG50PV9lLnMuYztudDw9X2UuZS5jOysrbnQpQmVbbnRdPU5zKG50KTtmb3IoR2U9X2Uucy5yO0dlPD1fZS5lLnI7KytHZSl7Zm9yKHBlPVtdLEhlPUhzKEdlKSxudD1fZS5zLmM7bnQ8PV9lLmUuYzsrK250KXtTZT1CZVtudF0rSGU7dmFyIEV0PUN0Pyh5W0dl''@;'; put 'put ''XXx8W10pW250XTp5W1NlXTt2b2lkIDAhPT1FdCYmbnVsbCE9KHZlPVVJKEV0LFNlLHksUCkpJiZwZS5wdXNoKHZlKX0ocGUubGVuZ3RoPjB8fGR0JiZkdFtHZV0pJiYoY3Q9e3I6SGV9LGR0JiZkdFtHZV0mJigoYnQ9ZHRbR2VdKS5oaWRkZW4mJihjdC5oaWRkZW49MSksRnQ9LTEsYnQuaHB4''@;'; put 'put ''P0Z0PWoyKGJ0LmhweCk6YnQuaHB0JiYoRnQ9YnQuaHB0KSxGdD4tMSYmKGN0Lmh0PUZ0LGN0LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKGN0Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYoY3RbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYm''@;'; put 'put ''KGN0LnM9Z3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0LnN9LFApLGN0LmN1c3RvbUZvcm1hdD0xKSkscmVbcmUubGVuZ3RoXT1Tcigicm93IixwZS5qb2luKCIiKSxjdCkpfWlmKGR0KWZvcig7R2U8ZHQubGVuZ3RoOysrR2UpZHQmJmR0W0dlXSYmKGN0PXtyOkdlKzF9''@;'; put 'put ''LChidD1kdFtHZV0pLmhpZGRlbiYmKGN0LmhpZGRlbj0xKSxGdD0tMSxidC5ocHg/RnQ9ajIoYnQuaHB4KTpidC5ocHQmJihGdD1idC5ocHQpLEZ0Pi0xJiYoY3QuaHQ9RnQsY3QuY3VzdG9tSGVpZ2h0PTEpLGJ0LmxldmVsJiYoY3Qub3V0bGluZUxldmVsPWJ0LmxldmVsKSxyZVtyZS5sZW5n''@;'; put 'put ''dGhdPVNyKCJyb3ciLCIiLGN0KSk7cmV0dXJuIHJlLmpvaW4oIiIpfShTZSxQKSx2ZS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09dmUpKSxyZS5sZW5ndGg+X2UrMSYmKHJlW3JlLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIscmVbX2VdPXJlW19lXS5yZXBsYWNlKCIvPiIsIj4iKSksU2VbIiFw''@;'; put 'put ''cm90ZWN0Il0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEVhKHkpe3ZhciBQPXtzaGVldDoxfTtyZXR1cm4gQXYuZm9yRWFjaChmdW5jdGlvbihMKXtudWxsIT15W0xdJiZ5W0xdJiYoUFtMXT0iMSIpfSksVHYuZm9yRWFjaChmdW5jdGlvbihMKXtudWxsIT15W0xdJiYheVtMXSYmKFBbTF09''@;'; put 'put ''IjAiKX0pLHkucGFzc3dvcmQ/UC5wYXNzd29yZD1hQyh5LnBhc3N3b3JkKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTp5LmVuY3J5cHRpb24mJihQLmFsZ29yaXRobU5hbWU9eS5lbmNyeXB0aW9uLmFsZ28sUC5oYXNoVmFsdWU9eS5lbmNyeXB0aW9uLmhhc2gsUC5zYWx0VmFsdWU9eS5l''@;'; put 'put ''bmNyeXB0aW9uLnNhbHQsUC5zcGluQ291bnQ9eS5lbmNyeXB0aW9uLnNwaW4pLFNyKCJzaGVldFByb3RlY3Rpb24iLG51bGwsUCl9KFNlWyIhcHJvdGVjdCJdKSksbnVsbCE9U2VbIiFhdXRvZmlsdGVyIl0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEVTKHksUCxMLFEpe3ZhciByZT0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIHkucmVmP3kucmVmOk9vKHkucmVmKTtMLldvcmtib29rfHwoTC5Xb3JrYm9vaz17U2hlZXRzOltdfSksTC5Xb3JrYm9vay5OYW1lc3x8KEwuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBwZT1MLldvcmtib29rLk5hbWVzLF9lPVdzKHJlKTtfZS5zLnI9PV9lLmUuciYmKF9l''@;'; put 'put ''LmUucj1XcyhQWyIhcmVmIl0pLmUucixyZT1PbyhfZSkpO2Zvcih2YXIgdmU9MDt2ZTxwZS5sZW5ndGg7Kyt2ZSl7dmFyIFNlPXBlW3ZlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09U2UuTmFtZSYmU2UuU2hlZXQ9PVEpe1NlLlJlZj0iJyIrTC5TaGVldE5hbWVzW1FdKyInISIrcmU7''@;'; put 'put ''YnJlYWt9fXJldHVybiB2ZT09cGUubGVuZ3RoJiZwZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OlEsUmVmOiInIitMLlNoZWV0TmFtZXNbUV0rIichIityZX0pLFNyKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6cmV9KX0oU2VbIiFhdXRvZmlsdGVyIl0sU2UsTCx5''@;'; put 'put ''KSksbnVsbCE9U2VbIiFtZXJnZXMiXSYmU2VbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gSlooeSl7aWYoMD09PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD0nPG1lcmdlQ2VsbHMgY291bnQ9IicreS5sZW5ndGgrJyI+JyxMPTA7TCE9eS5sZW5ndGg7''@;'; put 'put ''KytMKVArPSc8bWVyZ2VDZWxsIHJlZj0iJytPbyh5W0xdKSsnIi8+JztyZXR1cm4gUCsiPC9tZXJnZUNlbGxzPiJ9KFNlWyIhbWVyZ2VzIl0pKSxTZVsiIWNvbmRmbXQiXSYmKHJlW3JlLmxlbmd0aF09ZnVuY3Rpb24gakkoeSxQKXtyZXR1cm4geS5tYXAoZnVuY3Rpb24oTCxRKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gUHUoeSxQLEwpe3ZhciBRPXkucz9GbyhMLkRYRix5LnMpOi0xLHJlPSJzdHJpbmciPT10eXBlb2YgeS5yZWY/eS5yZWY6T28oeS5yZWYpLF9lPU9pKHJlLnJlcGxhY2UoL1xzLiokLywiIikpLnM7X2UucjwwJiYoX2Uucj0wKSxfZS5jPDAmJihfZS5jPTApO3ZhciB2ZT0iIixT''@;'; put 'put ''ZT17cHJpb3JpdHk6UCsxfTtzd2l0Y2goUT4tMSYmKFNlLmR4ZklkPVEpLHkudCl7Y2FzZSJ1bmlxdWUiOlNlLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOlNlLnR5cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6U2UudHlwZT0oeS52PyJjIjoibm90''@;'; put 'put ''QyIpKyJvbnRhaW5zQmxhbmtzIix2ZT0iPGZvcm11bGE+TEVOKFRSSU0oIitkaShfZSkrIikpIisoeS52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6U2UudHlwZT0oeS52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztjYXNlImZvcm11bGEi''@;'; put 'put ''OlNlLnR5cGU9ImV4cHJlc3Npb24iLHZlPVNyKCJmb3JtdWxhIixIcih5LmYpLHt9KTticmVhaztjYXNlImRhdGUiOlNlLnR5cGU9InRpbWVQZXJpb2QiLFNlLnRpbWVQZXJpb2Q9SVNbeS5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goU2UudHlwZT1TZS5vcGVyYXRvcj1Sdlt5Lm9wXSxT''@;'; put 'put ''ZS50ZXh0PXkudix5Lm9wKXtjYXNlIklOIjp2ZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK0hyKHkudikrJyIsJytkaShfZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1QiOnZlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytIcih5LnYpKyciLCcrZGkoX2UpKyIp''@;'; put 'put ''KTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnZlPSI8Zm9ybXVsYT5MRUZUKCIrZGkoX2UpKycsTEVOKCInK0hyKHkudikrJyIpKT0iJytIcih5LnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2FzZSJORCI6dmU9Ijxmb3JtdWxhPlJJR0hUKCIrZGkoX2UpKycsTEVOKCInK0hyKHkudikrJyIp''@;'; put 'put ''KT0iJytIcih5LnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOlNlLnR5cGU9ImNlbGxJcyIsU2Uub3BlcmF0b3I9JDNbeS5vcF0sdmU9bnVsbCE9eS5taW4/U3IoImZvcm11bGEiLEhyKFN0cmluZyh5Lm1pbikpLHt9KStTcigiZm9ybXVsYSIsSHIoU3RyaW5nKHkubWF4KSkse30p''@;'; put 'put ''OlNyKCJmb3JtdWxhIixIcihudWxsIT15LnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgeS52PyciJyt5LnYucmVwbGFjZSgvIi9nLCciIicpKyciJzp5LnYpOnkuZikse30pO2JyZWFrO2Nhc2UiYXZnIjpzd2l0Y2goU2UudHlwZT0iYWJvdmVBdmVyYWdlIixTZS5hYm92ZUF2ZXJhZ2U9Ikwi''@;'; put 'put ''PT15Lm9wLmNoYXJBdCgwKT8iMCI6IjEiLHkub3AuY2hhckF0KDEpKXtjYXNlIlQiOlNlLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjpTZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1bHQ6U2Uuc3RkRGV2PXkub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2UicmFuayI6U2UudHlw''@;'; put 'put ''ZT0idG9wMTAiLFNlLmJvdHRvbT0iQiI9PXkub3AuY2hhckF0KDApPyIxIjoiMCIsU2UucGVyY2VudD0iUCI9PXkub3AuY2hhckF0KDEpPyIxIjoiMCIsU2UucmFuaz15LnY7YnJlYWs7Y2FzZSJpY29uIjpTZS50eXBlPSJpY29uU2V0Ijt2YXIgSGU9e2ljb25TZXQ6eS52LHBlcmNlbnQ6eS5w''@;'; put 'put ''Y3Q/InRydWUiOiJmYWxzZSJ9O3kucmV2JiYoSGUucmV2ZXJzZT0idHJ1ZSIpLHkuaGlkZGVuJiYoSGUuc2hvd1ZhbHVlPSJmYWxzZSIpLHZlPVNyKCJpY29uU2V0Iix5LnRocmVzaC5tYXAocGYpLmpvaW4oIiIpLEhlKTticmVhaztjYXNlInNjYWxlIjpTZS50eXBlPSJjb2xvclNjYWxlIix2''@;'; put 'put ''ZSs9cGYoeS5jbWluKSx5LmNtaWQmJih2ZSs9cGYoeS5jbWlkKSksdmUrPXBmKHkuY21heCksdmUrPVVkKHkuY21pbi5jb2xvcikseS5jbWlkJiYodmUrPVVkKHkuY21pZC5jb2xvcikpLHZlPVNyKCJjb2xvclNjYWxlIix2ZSs9VWQoeS5jbWF4LmNvbG9yKSx7fSk7YnJlYWs7Y2FzZSJiYXIi''@;'; put 'put ''OlNlLnR5cGU9ImRhdGFCYXIiLHZlKz1wZih5LmNtaW4pLHZlKz1wZih5LmNtYXgpLHZlPVNyKCJkYXRhQmFyIix2ZSs9VWQoeS5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5sb2coeSksIkNGIG1pc3NpbmcgdHlwZSAiK3kudH1yZXR1cm4nPGNvbmRpdGlvbmFsRm9y''@;'; put 'put ''bWF0dGluZyBzcXJlZj0iJytyZSsnIj4nK1NyKCJjZlJ1bGUiLCIiPT12ZT9udWxsOnZlLFNlKSsiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+In0oTCxRLFApfSkuam9pbigiIil9KFNlWyIhY29uZGZtdCJdLFApKSxTZVsiIXZhbGlkYXRpb25zIl0mJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9u''@;'; put 'put ''IE5JKHkpe2lmKCF5fHwwPT15Lmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFA9W10sTD0wLFE9MDtRPHkubGVuZ3RoOysrUSl7dmFyIHJlPXlbUV0scGU9eTZbcmUudF07aWYocmUucmVmJiYoInN0cmluZyIhPXR5cGVvZiByZS5yZWZ8fC0xIT1yZS5yZWYuaW5kZXhPZigiICIpfHwocmUucmVm''@;'; put 'put ''PU9pKHJlLnJlZikscmUucmVmLnMmJiEocmUucmVmLnMuYzwwKSkpKXsrK0w7dmFyIF9lPXt0eXBlOnBlLGFsbG93Qmxhbms6KygwIT1yZS5ibGFuayksc2hvd0lucHV0TWVzc2FnZTorKDAhPXJlLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9cmUuZXJyb3IpLHNxcmVmOiJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgcmUucmVmP3JlLnJlZjpPbyhyZS5yZWYpfTtpZihyZS5pbnB1dCYmKHJlLmlucHV0LnRpdGxlJiYoX2UucHJvbXB0VGl0bGU9cWkocmUuaW5wdXQudGl0bGUpKSxyZS5pbnB1dC5tZXNzYWdlJiYoX2UucHJvbXB0PXFpKHJlLmlucHV0Lm1lc3NhZ2UpKSkscmUuZXJyb3ImJihy''@;'; put 'put ''ZS5lcnJvci50aXRsZSYmKF9lLmVycm9yVGl0bGU9cWkocmUuZXJyb3IudGl0bGUpKSxyZS5lcnJvci5tZXNzYWdlJiYoX2UuZXJyb3I9cWkocmUuZXJyb3IubWVzc2FnZSkpLHJlLmVycm9yLnN0eWxlJiYoX2UuZXJyb3JTdHlsZT1yZS5lcnJvci5zdHlsZSkpLCFwZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK3JlLnQpO3ZhciB2ZT0iIjtzd2l0Y2gocmUudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0b20iOmlmKHJlLmwpe2lmKHJlLmwuam9pbigiLCIpLmxlbmd0aD4yNTApdGhyb3cgbmV3IEVycm9yKCJE''@;'; put 'put ''ViBsZW5ndGggPiAyNTAgdHJpZ2dlcnMgY29ycnVwdGlvbiBlcnJvcnMgaW4gRXhjZWwuICBVc2UgYSBsb29rdXAgdGFibGUiKTt2ZT0nPGZvcm11bGExPiInK0hyKHJlLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHZlPSI8Zm9ybXVsYTE+IitIcihyZS5mKSsiPC9mb3JtdWxh''@;'; put 'put ''MT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighJDNbcmUub3BdKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrcmUub3ArIiBmb3IgIityZS50KTtpZihfZS5vcGVyYXRvcj0k''@;'; put 'put ''M1tyZS5vcF0sbnVsbCE9cmUudil2ZT0iPGZvcm11bGExPiIrSHIoU3RyaW5nKHJlLnYgaW5zdGFuY2VvZiBEYXRlP1VlKHJlLnYpOnJlLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09cmUubWlufHxudWxsPT1yZS5tYXgpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0''@;'; put 'put ''aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5cGUgIityZS50KTt2ZT0iPGZvcm11bGExPiIrSHIoU3RyaW5nKHJlLm1pbiBpbnN0YW5jZW9mIERhdGU/VWUocmUubWluKTpyZS5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitIcihTdHJpbmcocmUubWF4IGluc3Rh''@;'; put 'put ''bmNlb2YgRGF0ZT9VZShyZS5tYXgpOnJlLm1heCkpKyI8L2Zvcm11bGEyPiJ9fVAucHVzaChTcigiZGF0YVZhbGlkYXRpb24iLHZlfHxudWxsLF9lKSl9fXJldHVybiBMPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicrTCsnIj4nK1Auam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6''@;'; put 'put ''IiJ9KFNlWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBGdCxidD0tMSxFdD0tMTtpZihTZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPSI8aHlwZXJsaW5rcz4iLFNlWyIhbGlua3MiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXt1blsxXS5UYXJnZXQmJihGdD17cmVmOnVuWzBdfSwi''@;'; put 'put ''IyIhPXVuWzFdLlRhcmdldC5jaGFyQXQoMCkmJihFdD16byhRLC0xLEhyKHVuWzFdLlRhcmdldCkucmVwbGFjZSgvIy4qJC8sIiIpLEhpLkhMSU5LKSxGdFsicjppZCJdPSJySWQiK0V0KSwoYnQ9dW5bMV0uVGFyZ2V0LmluZGV4T2YoIiMiKSk+LTEmJihGdC5sb2NhdGlvbj1Icih1blsxXS5U''@;'; put 'put ''YXJnZXQuc2xpY2UoYnQrMSkpKSx1blsxXS5Ub29sdGlwJiYoRnQudG9vbHRpcD1Icih1blsxXS5Ub29sdGlwKSkscmVbcmUubGVuZ3RoXT1TcigiaHlwZXJsaW5rIixudWxsLEZ0KSl9KSxyZVtyZS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIFNlWyIhbGlua3MiXSxudCl7dmFy''@;'; put 'put ''IFR0PWZ1bmN0aW9uIHdTKHkpe2lmKHkucHJvcHMpe3ZhciBQPXt9LEw9eS5wcm9wcztyZXR1cm4gTC5ncmlkbGluZXMmJihQLmdyaWRMaW5lcz1QLmdyaWRMaW5lc1NldD0xKSxMLmhlYWRpbmdzJiYoUC5oZWFkaW5ncz0xKSxMLmNlbnRlclgmJihQLmhvcml6b250YWxDZW50ZXJlZD0xKSxM''@;'; put 'put ''LmNlbnRlclkmJihQLnZlcnRpY2FsQ2VudGVyZWQ9MSksU3IoInByaW50T3B0aW9ucyIsbnVsbCxQKX1yZXR1cm4iIn0obnQpO1R0Lmxlbmd0aCYmKHJlW3JlLmxlbmd0aF09VHQpfWlmKChudWxsIT1TZVsiIW1hcmdpbnMiXXx8bnQmJm50Lm1hcmdpbnMpJiYocmVbcmUubGVuZ3RoXT1mdW5j''@;'; put 'put ''dGlvbiBiNih5KXtyZXR1cm4gZGYoeSksU3IoInBhZ2VNYXJnaW5zIixudWxsLHkpfShTZVsiIW1hcmdpbnMiXXx8bnQubWFyZ2lucykpLG50KXt2YXIgWnQ9ZnVuY3Rpb24gT0koeSl7aWYoeS5wcm9wcyl7dmFyIFA9e30sTD15LnByb3BzO2lmKEwub3JpZW50YXRpb24mJihQLm9yaWVudGF0''@;'; put 'put ''aW9uPUwub3JpZW50YXRpb24pLEwuc2NhbGUmJihQLnNjYWxlPUwuc2NhbGUpLEwuZml0JiYobnVsbCE9TC5maXQuaGVpZ2h0JiYoUC5maXRUb0hlaWdodD1MLmZpdC5oZWlnaHQpLG51bGwhPUwuZml0LndpZHRoJiYoUC5maXRUb1dpZHRoPUwuZml0LndpZHRoKSksTC5kcGkmJihQLmhvcml6''@;'; put 'put ''b250YWxEcGk9UC52ZXJ0aWNhbERwaT1MLmRwaSksbnVsbCE9TC5maXJzdCYmKFAuZmlyc3RQYWdlTnVtYmVyPUwuZmlyc3QsUC51c2VGaXJzdFBhZ2VOdW1iZXI9MSksTC5idyYmKFAuYmxhY2tBbmRXaGl0ZT0xKSxMLmRyYWZ0JiYoUC5kcmFmdD0xKSxMLmNvbW1lbnRzJiYoUC5jZWxsQ29t''@;'; put 'put ''bWVudHM9Q2VbTC5jb21tZW50c118fCJub25lIiksTC5lcnJvcnMmJihQLmVycm9ycz1SSVtMLmVycm9yc118fCJub25lIiksTC5wYXBlcilzd2l0Y2godHlwZW9mIEwucGFwZXIpe2Nhc2UibnVtYmVyIjpQLnBhcGVyU2l6ZT1MLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjpaOVtMLnBhcGVy''@;'; put 'put ''XT9QLnBhcGVyU2l6ZT1aOVtMLnBhcGVyXTorTC5wYXBlciYmKFAucGFwZXJTaXplPStMLnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIUwucGFwZXIuaGVpZ2h0fHwhTC5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdo''@;'; put 'put ''dCEiO1AucGFwZXJIZWlnaHQ9TC5wYXBlci5oZWlnaHQsUC5wYXBlcldpZHRoPUwucGFwZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihMLm9yZGVyKT4tMSYmKFAucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxTcigicGFnZVNldHVwIixudWxsLFApfXJldHVy''@;'; put 'put ''biIifShudCk7WnQubGVuZ3RoJiYocmVbcmUubGVuZ3RoXT1adCksWnQ9ZnVuY3Rpb24gTHYoeSl7dmFyIFA9W10sTD0iIixRPSIiLHJlPSIiLHBlPSIiLF9lPSIiLHZlPSIiLFNlPSIiLEhlPVcxKHkuaGVhZGVyKTtIZS5sZW5ndGgmJihRPUhlWzBdLHZlPUhlWzFdLHBlPUhlWzJdKTt2YXIg''@;'; put 'put ''QmU9VzEoeS5mb290ZXIpO3JldHVybiBCZS5sZW5ndGgmJihyZT1CZVswXSxTZT1CZVsxXSxfZT1CZVsyXSksUSYmUC5wdXNoKCI8b2RkSGVhZGVyPiIrSHIoUSkrIjwvb2RkSGVhZGVyPiIpLHJlJiZQLnB1c2goIjxvZGRGb290ZXI+IitIcihyZSkrIjwvb2RkRm9vdGVyPiIpLChfZSE9cmV8''@;'; put 'put ''fHBlIT1RKSYmKEwrPScgZGlmZmVyZW50T2RkRXZlbj0iMSInLFAucHVzaCgiPGV2ZW5IZWFkZXI+IitIcihwZSkrIjwvZXZlbkhlYWRlcj4iKSxQLnB1c2goIjxldmVuRm9vdGVyPiIrSHIoX2UpKyI8L2V2ZW5Gb290ZXI+IikpLChTZSE9cmV8fHZlIT1RKSYmKEwrPScgZGlmZmVyZW50Rmly''@;'; put 'put ''c3Q9IjEiJyxQLnB1c2goIjxmaXJzdEhlYWRlcj4iK0hyKHZlKSsiPC9maXJzdEhlYWRlcj4iKSxQLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0hyKFNlKSsiPC9maXJzdEZvb3Rlcj4iKSksUC5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK0wrIj4iK1Auam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6''@;'; put 'put ''IiJ9KG50KSxadC5sZW5ndGgmJihyZVtyZS5sZW5ndGhdPVp0KX1pZigobnVsbCE9U2VbIiFyb3dCcmVha3MiXXx8bnQmJm50LnJvd0JyZWFrcykmJihyZVtyZS5sZW5ndGhdPWZ1bmN0aW9uIEZJKHkpe2lmKDA9PXkubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUD1bJzxyb3dCcmVha3MgY291''@;'; put 'put ''bnQ9IicreS5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJyt5Lmxlbmd0aCsnIj4nXSxMPTA7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKCc8YnJrIGlkPSInK3lbTF0uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gUC5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oU2VbIiFyb3dCcmVha3MiXXx8''@;'; put 'put ''bnQucm93QnJlYWtzKSksKG51bGwhPVNlWyIhY29sQnJlYWtzIl18fG50JiZudC5jb2xCcmVha3MpJiYocmVbcmUubGVuZ3RoXT1mdW5jdGlvbiBRWih5KXtpZigwPT15Lmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFA9Wyc8Y29sQnJlYWtzIGNvdW50PSInK3kubGVuZ3RoKyciIG1hbnVhbEJy''@;'; put 'put ''ZWFrQ291bnQ9IicreS5sZW5ndGgrJyI+J10sTD0wO0w8eS5sZW5ndGg7KytMKVAucHVzaCgnPGJyayBpZD0iJyt5W0xdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFAuam9pbigiIikrIjwvY29sQnJlYWtzPiJ9KFNlWyIhY29sQnJlYWtzIl18fG50LmNvbEJyZWFrcykpLCghUHx8UC5pZ25v''@;'; put 'put ''cmVFQ3x8bnVsbD09UC5pZ25vcmVFQykmJihyZVtyZS5sZW5ndGhdPWZzKCJpZ25vcmVkRXJyb3JzIixTcigiaWdub3JlZEVycm9yIixudWxsLHtudW1iZXJTdG9yZWRBc1RleHQ6MSxzcXJlZjpIZX0pKSksU2VbIiFjaGFydHMiXSYmR2UucHVzaC5hcHBseShHZSxTZVsiIWNoYXJ0cyJdKSxT''@;'; put 'put ''ZVsiIWltYWdlcyJdJiZHZS5wdXNoLmFwcGx5KEdlLFNlWyIhaW1hZ2VzIl0pLFNlWyIhc2hhcGVzIl0mJkdlLnB1c2guYXBwbHkoR2UsU2VbIiFzaGFwZXMiXSksR2UubGVuZ3RoPjAmJihFdD16byhRLC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoeSsxKSsiLnhtbCIsSGkuRFJBVykscmVb''@;'; put 'put ''cmUubGVuZ3RoXT1TcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK0V0fSksU2VbIiFkcmF3aW5nIl09R2UpLChTZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8fChTZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihFdD16byhRLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIiso''@;'; put 'put ''eSsxKSsiLnZtbCIsSGkuVk1MKSxyZVtyZS5sZW5ndGhdPVNyKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIrRXR9KSxTZVsiIWxlZ2FjeSJdPUV0KSxTZVsiIXByaW50Il0mJlNlWyIhcHJpbnQiXS5pbWFnZXMpe3ZhciBwbj1TZVsiIXByaW50Il0uaW1hZ2VzLEtuPTA7WyJo''@;'; put 'put ''ZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXtwblt1bl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihxbil7cG5bdW5dW3FuXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKHpuKXtpZihBcnJheS5pc0FycmF5''@;'; put 'put ''KHBuW3VuXVtxbl1bem5dKSlmb3IodmFyIGtuPTA7a248cG5bdW5dW3FuXVt6bl0ubGVuZ3RoOysra24pcG5bdW5dW3FuXVt6bl1ba25dJiYocG5bdW5dW3FuXVt6bl1ba25dLl9jbnQ9S24rKyl9KX0pfSksS24+MCYmKEV0PXpvKFEsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyh5KzEp''@;'; put 'put ''KyJIRi52bWwiLEhpLlZNTCkscmVbcmUubGVuZ3RoXT1TcigibGVnYWN5RHJhd2luZ0hGIixudWxsLHsicjppZCI6InJJZCIrRXR9KSxTZVsiIWxlZ2FjeUhGIl09RXQpfXJldHVybihTZVsiIXRhYmxlcyJdfHxbXSkubGVuZ3RoPjAmJihyZVtyZS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3Vu''@;'; put 'put ''dD0iJytTZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLFNlWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbih1bixxbil7RXQ9em8oUSwtMSwiLi4vdGFibGVzL3RhYmxlIisoeSsxKSsiXyIrcW4rIi54bWwiLEhpLlRBQkxFKSxyZVtyZS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJZCcr''@;'; put 'put ''RXQrJyIvPid9KSxyZVtyZS5sZW5ndGhdPSI8L3RhYmxlUGFydHM+IikscmUubGVuZ3RoPjEmJihyZVtyZS5sZW5ndGhdPSI8L3dvcmtzaGVldD4iLHJlWzFdPXJlWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxyZS5qb2luKCIiKX1mdW5jdGlvbiAkSSh5LFAsTCxRKXt2YXIgcmU9ZnVuY3Rpb24g''@;'; put 'put ''UHYoeSxQLEwpe3ZhciBRPWZyKDE0NSkscmU9KExbIiFyb3dzIl18fFtdKVt5XXx8e307US53cml0ZV9zaGlmdCg0LHkpLFEud3JpdGVfc2hpZnQoNCwwKTt2YXIgcGU9MzIwO3JlLmhweD9wZT0yMCpqMihyZS5ocHgpOnJlLmhwdCYmKHBlPTIwKnJlLmhwdCksUS53cml0ZV9zaGlmdCgyLHBl''@;'; put 'put ''KSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIF9lPTA7cmUubGV2ZWwmJihfZXw9cmUubGV2ZWwpLHJlLmhpZGRlbiYmKF9lfD0xNiksKHJlLmhweHx8cmUuaHB0KSYmKF9lfD0zMiksUS53cml0ZV9zaGlmdCgxLF9lKSxRLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHZlPTAsU2U9US5sO1EubCs9NDtm''@;'; put 'put ''b3IodmFyIEhlPXtyOnksYzowfSxCZT0wO0JlPDE2OysrQmUpaWYoIShQLnMuYz5CZSsxPDwxMHx8UC5lLmM8QmU8PDEwKSl7Zm9yKHZhciBHZT0tMSxudD0tMSxkdD1CZTw8MTA7ZHQ8QmUrMTw8MTA7KytkdClIZS5jPWR0LChBcnJheS5pc0FycmF5KEwpPyhMW0hlLnJdfHxbXSlbSGUuY106''@;'; put 'put ''TFtkaShIZSldKSYmKEdlPDAmJihHZT1kdCksbnQ9ZHQpO0dlPDB8fCgrK3ZlLFEud3JpdGVfc2hpZnQoNCxHZSksUS53cml0ZV9zaGlmdCg0LG50KSl9dmFyIGN0PVEubDtyZXR1cm4gUS5sPVNlLFEud3JpdGVfc2hpZnQoNCx2ZSksUS5sPWN0LFEubGVuZ3RoPlEubD9RLnNsaWNlKDAsUS5s''@;'; put 'put ''KTpRfShRLEwsUCk7KHJlLmxlbmd0aD4xN3x8KFBbIiFyb3dzIl18fFtdKVtRXSkmJnVpKHksIkJydFJvd0hkciIscmUpfXZhciBxST1KYyxLST1EMTtmdW5jdGlvbiBqUyh5KXtyZXR1cm5bYTAoeSksbWEoeSksIm4iXX12YXIgbEw9SmMsWVM9RDEscVM9WyJsZWZ0IiwicmlnaHQiLCJ0b3Ai''@;'; put 'put ''LCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSxlbz1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLEJ2PVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJdO2Z1bmN0aW9uIHdMKHkpe3ZhciBQPWZy''@;'; put 'put ''KDQpLEw9W1BdLFE9ZW8uaW5kZXhPZih5LnQpO2lmKFE8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK3kudCk7dmFyIHBlPUJ2LmluZGV4T2YoeS5vcCk7c3dpdGNoKFEpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA3OnBlPTA7YnJlYWs7ZGVmYXVs''@;'; put 'put ''dDppZigtMT09cGUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIit5Lm9wKyIgZm9yICIreS50KX1QLndyaXRlX3NoaWZ0KDEsMHxRKSxQLndyaXRlX3NoaWZ0KDEsMSksUC53cml0ZV9zaGlmdCgxLDEyfHBlPDw0KSxQLndyaXRlX3NoaWZ0KDEsMCksTC5wdXNo''@;'; put 'put ''KGZ1bmN0aW9uIFpoKHkpe3ZhciBQPXkuc3BsaXQoL1xzKixccyovKSxMPWZyKDQpO0wud3JpdGVfc2hpZnQoNCxQLmxlbmd0aCk7dmFyIFE9W0xdO3JldHVybiBQLmZvckVhY2goZnVuY3Rpb24ocmUpe1EucHVzaChEMShPaShyZSkpKX0pLFMoUSl9KCJzdHJpbmciPT10eXBlb2YgeS5yZWY/''@;'; put 'put ''eS5yZWY6T28oeS5yZWYpKSk7dmFyIF9lPWZyKDE2KTtfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLF9lLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksX2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxfZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLEwucHVzaChfZSk7dmFyIHZl''@;'; put 'put ''PWZyKDgpO3ZlLndyaXRlX3NoaWZ0KDQsMCksdmUud3JpdGVfc2hpZnQoNCwwKTt2YXIgU2U9MTtzd2l0Y2goeS50KXtjYXNlIkFueSI6TC5wdXNoKHZlKSxMLnB1c2godmUpO2JyZWFrO2Nhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKG51bGwhPXkudnx8bnVsbCE9''@;'; put 'put ''eS5mKUwucHVzaCgibnVtYmVyIj09dHlwZW9mIHkudj9tdih5LnYpOlUzKG51bGw9PXkudj95LmY6eS52KSk7ZWxzZXtpZihudWxsPT15Lm1pbnx8bnVsbD09eS5tYXgpdGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgdmAgb3IgYG1pbmArYG1heGAgcmVxdWlyZWQgZm9yIFR5''@;'; put 'put ''cGUgIit5LnQ7TC5wdXNoKCJudW1iZXIiPT10eXBlb2YgeS5taW4/bXYoeS5taW4pOlUzKHkubWluKSksTC5wdXNoKCJudW1iZXIiPT10eXBlb2YgeS5tYXg/bXYoeS5tYXgpOlUzKHkubWF4KSksU2U9Mn1icmVhaztjYXNlIkxpc3QiOmlmKG51bGwhPXkubCl7TC5wdXNoKGFTKHkubC5qb2lu''@;'; put 'put ''KCIsIikpKTticmVha31jYXNlIkN1c3RvbSI6aWYoIm51bGwiIT15LmYpe0wucHVzaChVMyh5LmYpKTticmVha310aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGBmYCIrKCJMaXN0Ij09eS50PyIgb3IgYGxgIjoiIikrIiByZXF1aXJlZCBmb3IgVHlwZSAiK3kudDtkZWZhdWx0''@;'; put 'put ''OnRocm93IlhMU0IgZG9lcyBub3Qgc3VwcG9ydCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK3kudH1yZXR1cm4gMT09U2UmJkwucHVzaCh2ZSksUyhMKX1mdW5jdGlvbiBTTCh5LFAsTCxRLHJlLHBlLF9lKXtpZih2b2lkIDA9PT1QLnYmJm51bGw9PVAuc3x8InoiPT09UC50JiYhcmUuc2hlZXRT''@;'; put 'put ''dHVicylyZXR1cm4hMTt2YXIgdmU9IiI7c3dpdGNoKFAudCl7Y2FzZSJiIjp2ZT1QLnY/IjEiOiIwIjticmVhaztjYXNlImQiOihQPW9uKFApKS56PVAuenx8dy5fdGFibGVbMTRdLFAudj1VZShIdChQLnYpKSxQLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjp2ZT0iIitQLnY7YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp2ZT1QLnZ9dmFyIFNlPXtyOkwsYzpRfTtzd2l0Y2goU2Uucz1ndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhmcyxQLHJlKSxQLmwmJnBlWyIhbGlua3MiXS5wdXNoKFtkaShTZSksUC5sXSksUC5jJiZwZVsiIWNvbW1lbnRzIl0ucHVzaChbZGkoU2UpLFAuY10pLFAudCl7Y2Fz''@;'; put 'put ''ZSJzIjpjYXNlInN0ciI6aWYocmUuYm9va1NTVCl7aWYodmU9d3YocmUuU3RyaW5ncyxQLnYsUC5SP1Aucj1KaChQLlIpOm51bGwscmUucmV2U3RyaW5ncyksUC5SKWZvcih2YXIgSGU9MDtIZTxQLlIubGVuZ3RoOysrSGUpUC5SW0hlXS5zJiZndShyZS5jZWxsWGZzLHJlLmNlbGxTdHlsZVhm''@;'; put 'put ''cyx7dDoibiIsdjowLHM6UC5SW0hlXS5zfSxyZSk7U2UudD0icyIsU2Uudj12ZSxfZT91aSh5LCJCcnRTaG9ydElzc3QiLGZ1bmN0aW9uIHRMKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoOCkpLEtjKFAsTCksTC53cml0ZV9zaGlmdCg0LFAudiksTH0oMCxTZSkpOnVpKHksIkJydENl''@;'; put 'put ''bGxJc3N0IixmdW5jdGlvbiBOdih5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDEyKSksRmkoUCxMKSxMLndyaXRlX3NoaWZ0KDQsUC52KSxMfSgwLFNlKSl9ZWxzZSBTZS50PSJzdHIiLF9lP3VpKHksIkJydFNob3J0U3QiLGZ1bmN0aW9uIHJZKHksUCxMKXtyZXR1cm4gbnVsbD09TCYm''@;'; put 'put ''KEw9ZnIoOCs0Knkudi5sZW5ndGgpKSxLYyhQLEwpLG5jKHkudixMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH0oUCxTZSkpOnVpKHksIkJydENlbGxTdCIsZnVuY3Rpb24gdTUoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxMis0Knkudi5sZW5ndGgpKSxGaShQLEwpLG5j''@;'; put 'put ''KHkudixMKSxMLmxlbmd0aD5MLmw/TC5zbGljZSgwLEwubCk6TH0oUCxTZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIFAudj09KDB8UC52KSYmUC52Pi0xZTMmJlAudjwxZTM/X2U/dWkoeSwiQnJ0U2hvcnRSayIsZnVuY3Rpb24gb0woeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig4''@;'; put 'put ''KSksS2MoUCxMKSxTcyh5LnYsTCksTH0oUCxTZSkpOnVpKHksIkJydENlbGxSayIsZnVuY3Rpb24gblkoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcigxMikpLEZpKFAsTCksU3MoeS52LEwpLEx9KFAsU2UpKTpfZT91aSh5LCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIHJMKHksUCxMKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTIpKSxLYyhQLEwpLFBjKHkudixMKSxMfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIFZ2KHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoMTYpKSxGaShQLEwpLFBjKHkudixMKSxMfShQLFNlKSksITA7Y2FzZSJiIjpyZXR1cm4g''@;'; put 'put ''U2UudD0iYiIsX2U/dWkoeSwiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiBIdih5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDUpKSxLYyhQLEwpLEwud3JpdGVfc2hpZnQoMSx5LnY/MTowKSxMfShQLFNlKSk6dWkoeSwiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIEZTKHksUCxMKXtyZXR1cm4g''@;'; put 'put ''bnVsbD09TCYmKEw9ZnIoOSkpLEZpKFAsTCksTC53cml0ZV9zaGlmdCgxLHkudj8xOjApLEx9KFAsU2UpKSwhMDtjYXNlImUiOnJldHVybiBTZS50PSJlIixfZT91aSh5LCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBWUyh5LFAsTCl7cmV0dXJuIG51bGw9PUwmJihMPWZyKDgpKSxLYyhQLEwp''@;'; put 'put ''LEwud3JpdGVfc2hpZnQoMSx5LnYpLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDEsMCksTH0oUCxTZSkpOnVpKHksIkJydENlbGxFcnJvciIsZnVuY3Rpb24gSFMoeSxQLEwpe3JldHVybiBudWxsPT1MJiYoTD1mcig5KSksRmkoUCxMKSxMLndyaXRlX3NoaWZ0KDEseS52KSxM''@;'; put 'put ''fShQLFNlKSksITB9cmV0dXJuIF9lP3VpKHksIkJydFNob3J0QmxhbmsiLGZ1bmN0aW9uIGVMKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIoNCkpLEtjKFAsTCl9KDAsU2UpKTp1aSh5LCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIFFJKHksUCxMKXtyZXR1cm4gbnVsbD09TCYmKEw9ZnIo''@;'; put 'put ''OCkpLEZpKFAsTCl9KDAsU2UpKSwhMH1mdW5jdGlvbiBBTCh5LFAsTCxRKXt2YXIgcmU9eWMoKSxwZT1MLlNoZWV0TmFtZXNbeV0sX2U9TC5TaGVldHNbcGVdfHx7fSx2ZT1wZTt0cnl7TCYmTC5Xb3JrYm9vayYmKHZlPUwuV29ya2Jvb2suU2hlZXRzW3ldLkNvZGVOYW1lfHx2ZSl9Y2F0Y2h7''@;'; put 'put ''fXZhciBTZT1PaShfZVsiIXJlZiJdfHwiQTEiKTtpZihTZS5lLmM+MTYzODN8fFNlLmUucj4xMDQ4NTc1KXtpZihQLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKF9lWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO1NlLmUuYz1NYXRo''@;'; put 'put ''Lm1pbihTZS5lLmMsMTYzODMpLFNlLmUucj1NYXRoLm1pbihTZS5lLmMsMTA0ODU3NSl9cmV0dXJuIF9lWyIhbGlua3MiXT1bXSxfZVsiIWNvbW1lbnRzIl09W10sdWkocmUsIkJydEJlZ2luU2hlZXQiKSwoTC52YmFyYXd8fF9lWyIhb3V0bGluZSJdKSYmdWkocmUsIkJydFdzUHJvcCIsZnVu''@;'; put 'put ''Y3Rpb24gJDEoeSxQLEwpe251bGw9PUwmJihMPWZyKDg0KzQqeS5sZW5ndGgpKTt2YXIgUT0xOTI7UCYmKFAuYWJvdmUmJihRJj0tNjUpLFAubGVmdCYmKFEmPS0xMjkpKSxMLndyaXRlX3NoaWZ0KDEsUSk7Zm9yKHZhciByZT0xO3JlPDM7KytyZSlMLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJu''@;'; put 'put ''IFIyKHthdXRvOjF9LEwpLEwud3JpdGVfc2hpZnQoLTQsLTEpLEwud3JpdGVfc2hpZnQoLTQsLTEpLHNtKHksTCksTC5zbGljZSgwLEwubCl9KHZlLF9lWyIhb3V0bGluZSJdKSksdWkocmUsIkJydFdzRGltIixLSShTZSkpLGZ1bmN0aW9uIGVNKHksUCxMKXt1aSh5LCJCcnRCZWdpbldzVmll''@;'; put 'put ''d3MiKSx1aSh5LCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gbUwoeSxQLEwpe251bGw9PUwmJihMPWZyKDMwKSk7dmFyIFE9OTI0O3JldHVybigoKFB8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYoUXw9MzIpLGhuKHlbIiFncmlkbGluZXMiXSkmJihRJj0tNSksaG4oKCgoUHx8e30p''@;'; put 'put ''LlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKFEmPS01KSxMLndyaXRlX3NoaWZ0KDIsUSksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''MCksTC53cml0ZV9zaGlmdCgyLDEwMCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDIsMCksTC53cml0ZV9zaGlmdCg0LDApLEx9KFAsTCkpLFBbIiFmcmVlemUiXSYmdWkoeSwiQnJ0UGFuZSIsZnVuY3Rpb24gJFMoeSl7dmFyIFA9c3MoeVsi''@;'; put 'put ''IWZyZWV6ZSJdKSxMPWZyKDI5KTtyZXR1cm4gTC53cml0ZV9zaGlmdCg4LFAuYywiZiIpLEwud3JpdGVfc2hpZnQoOCxQLnIsImYiKSxMLndyaXRlX3NoaWZ0KDQsUC5yKSxMLndyaXRlX3NoaWZ0KDQsUC5jKSxMLndyaXRlX3NoaWZ0KDQsMCksTC53cml0ZV9zaGlmdCgxLDMpLEx9KFApKSxQ''@;'; put 'put ''WyIhc2VsIl0mJnVpKHksIkJydFNlbCIsZnVuY3Rpb24gZEwoeSxQKXt2YXIgTD1mcigzNiksUT15LmNlbGw7aWYoIVEpe2lmKCF5LnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtRPWRpKFdzKHkucmFuZ2UucmVwbGFjZSgv''@;'; put 'put ''XHMuKiQvLCIiKSkucyl9dmFyIHJlPSJzdHJpbmciPT10eXBlb2YgUT9zcyhRKTpRO2lmKFApe3ZhciBwZT0ic3RyaW5nIj09dHlwZW9mIFA/c3MoUCk6UDtMLndyaXRlX3NoaWZ0KDQscmUucj49cGUuciYmcmUuYz49cGUuYz8wOnJlLnI+PXBlLnImJnJlLmM8cGUuYz8yOnJlLnI8cGUuciYm''@;'; put 'put ''cmUuYz49cGUuYz8xOjMpfWVsc2UgTC53cml0ZV9zaGlmdCg0LDMpO3JldHVybiBMLndyaXRlX3NoaWZ0KDQscmUuciksTC53cml0ZV9zaGlmdCg0LHJlLmMpLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDQsMSksTC53cml0ZV9zaGlmdCg0LHJlLnIpLEwud3JpdGVfc2hpZnQo''@;'; put 'put ''NCxyZS5yKSxMLndyaXRlX3NoaWZ0KDQscmUuYyksTC53cml0ZV9zaGlmdCg0LHJlLmMpLEx9KFBbIiFzZWwiXSxQWyIhZnJlZXplIl0pKSx1aSh5LCJCcnRFbmRXc1ZpZXciKSx1aSh5LCJCcnRFbmRXc1ZpZXdzIil9KHJlLF9lLEwuV29ya2Jvb2spLGZ1bmN0aW9uIFhTKHksUCl7IVB8fCFQ''@;'; put 'put ''WyIhY29scyJdfHwodWkoeSwiQnJ0QmVnaW5Db2xJbmZvcyIpLFBbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihMLFEpe0wmJnVpKHksIkJydENvbEluZm8iLGZ1bmN0aW9uIGlZKHksUCxMKXtudWxsPT1MJiYoTD1mcigxOCkpO3ZhciBRPVlkKHksUCk7TC53cml0ZV9zaGlmdCgtNCx5KSxM''@;'; put 'put ''LndyaXRlX3NoaWZ0KC00LHkpLEwud3JpdGVfc2hpZnQoNCwyNTYqKFEud2lkdGh8fDEwKSksTC53cml0ZV9zaGlmdCg0LDApO3ZhciByZT0wO3JldHVybiBQLmhpZGRlbiYmKHJlfD0xKSwibnVtYmVyIj09dHlwZW9mIFEud2lkdGgmJihyZXw9MiksUC5sZXZlbCYmKHJlfD1QLmxldmVsPDw4''@;'; put 'put ''KSxMLndyaXRlX3NoaWZ0KDIscmUpLEx9KFEsTCkpfSksdWkoeSwiQnJ0RW5kQ29sSW5mb3MiKSl9KHJlLF9lKSxmdW5jdGlvbiBNTCh5LFAsTCxRKXt2YXIgcmU9T2koUFsiIXJlZiJdfHwiQTEiKSxfZT0iIix2ZT1bXTt1aSh5LCJCcnRCZWdpblNoZWV0RGF0YSIpO3ZhciBTZT1BcnJheS5p''@;'; put 'put ''c0FycmF5KFApLEhlPXJlLmUucjtQWyIhcm93cyJdJiYoSGU9TWF0aC5tYXgocmUuZS5yLFBbIiFyb3dzIl0ubGVuZ3RoLTEpKTtmb3IodmFyIEJlPXJlLnMucjtCZTw9SGU7KytCZSl7X2U9SHMoQmUpLCRJKHksUCxyZSxCZSk7dmFyIEdlPSExO2lmKEJlPD1yZS5lLnIpZm9yKHZhciBudD1y''@;'; put 'put ''ZS5zLmM7bnQ8PXJlLmUuYzsrK250KXtCZT09PXJlLnMuciYmKHZlW250XT1OcyhudCkpO3ZhciBkdD1TZT8oUFtCZV18fFtdKVtudF06UFt2ZVtudF0rX2VdO0dlPSEhZHQmJlNMKHksZHQsQmUsbnQsUSxQLEdlKX19dWkoeSwiQnJ0RW5kU2hlZXREYXRhIil9KHJlLF9lLDAsUCksZnVuY3Rp''@;'; put 'put ''b24gazYoeSxQKXtQWyIhcHJvdGVjdCJdJiZ1aSh5LCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIF9MKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZyKDY2KSksUC53cml0ZV9zaGlmdCgyLHkucGFzc3dvcmQ/YUMoeS5wYXNzd29yZCk6MCksUC53cml0ZV9zaGlmdCg0LDEpLFtbIm9i''@;'; put 'put ''amVjdHMiLCExXSxbInNjZW5hcmlvcyIsITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMi''@;'; put 'put ''LCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxbInNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe1Aud3JpdGVfc2hpZnQoNCxMWzFd''@;'; put 'put ''P251bGw9PXlbTFswXV18fHlbTFswXV0/MDoxOm51bGwhPXlbTFswXV0mJnlbTFswXV0/MDoxKX0pLFB9KFBbIiFwcm90ZWN0Il0pKX0ocmUsX2UpLGZ1bmN0aW9uIFFTKHksUCxMLFEpe2lmKFBbIiFhdXRvZmlsdGVyIl0pe3ZhciByZT1QWyIhYXV0b2ZpbHRlciJdLHBlPSJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgcmUucmVmP3JlLnJlZjpPbyhyZS5yZWYpO0wuV29ya2Jvb2t8fChMLldvcmtib29rPXtTaGVldHM6W119KSxMLldvcmtib29rLk5hbWVzfHwoTC5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIF9lPUwuV29ya2Jvb2suTmFtZXMsdmU9V3MocGUpO3ZlLnMucj09dmUuZS5yJiYodmUuZS5y''@;'; put 'put ''PVdzKFBbIiFyZWYiXSkuZS5yLHBlPU9vKHZlKSk7Zm9yKHZhciBTZT0wO1NlPF9lLmxlbmd0aDsrK1NlKXt2YXIgSGU9X2VbU2VdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1IZS5OYW1lJiZIZS5TaGVldD09USl7SGUuUmVmPSInIitMLlNoZWV0TmFtZXNbUV0rIichIitwZTticmVh''@;'; put 'put ''a319U2U9PV9lLmxlbmd0aCYmX2UucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpRLFJlZjoiJyIrTC5TaGVldE5hbWVzW1FdKyInISIrcGV9KSx1aSh5LCJCcnRCZWdpbkFGaWx0ZXIiLEQxKE9pKHBlKSkpLHVpKHksIkJydEVuZEFGaWx0ZXIiKX19KHJlLF9lLEws''@;'; put 'put ''eSksZnVuY3Rpb24geEwoeSxQKXshUHx8IVBbIiFtZXJnZXMiXXx8KHVpKHksIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rpb24gV1MoeSxQKXtyZXR1cm4gbnVsbD09UCYmKFA9ZnIoNCkpLFAud3JpdGVfc2hpZnQoNCx5KSxQfShQWyIhbWVyZ2VzIl0ubGVuZ3RoKSksUFsiIW1lcmdlcyJd''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24oTCl7dWkoeSwiQnJ0TWVyZ2VDZWxsIixZUyhMKSl9KSx1aSh5LCJCcnRFbmRNZXJnZUNlbGxzIikpfShyZSxfZSksZnVuY3Rpb24ga0woeSxQKXtpZihQKXt1aSh5LCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBLUyh5LFApe251bGw9PVAmJihQPWZyKDE4KSks''@;'; put 'put ''UC53cml0ZV9zaGlmdCgyLDApLFAud3JpdGVfc2hpZnQoNCwwKSxQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgTD0wLFE9MDtRPHkubGVuZ3RoOysrUSkoKHlbUV18fHt9KS5yZWZ8fHt9KS5zJiZ5W1FdLnJlZi5zLmM8MHx8KytMO3JldHVybiBQLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsTCksUH0oUCkpO2Zvcih2YXIgTD0wO0w8UC5sZW5ndGg7KytMKSgoUFtMXXx8e30pLnJlZnx8e30pLnMmJlBbTF0ucmVmLnMuYzwwfHx1aSh5LCJCcnREVmFsIix3TChQW0xdKSk7dWkoeSwiQnJ0RW5kRFZhbHMiKX19KHJlLF9lWyIhdmFsaWRhdGlvbnMiXSksZnVuY3Rpb24g''@;'; put 'put ''RUwoeSxQLEwpe1BbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoUVsxXS5UYXJnZXQpe3ZhciByZT16byhMLC0xLFFbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxIaS5ITElOSyk7dWkoeSwiQnJ0SExpbmsiLGZ1bmN0aW9uIGNMKHksUCl7dmFyIEw9ZnIoNTArNCooeVsx''@;'; put 'put ''XS5UYXJnZXQubGVuZ3RoKyh5WzFdLlRvb2x0aXB8fCIiKS5sZW5ndGgpKTtEMSh7czpzcyh5WzBdKSxlOnNzKHlbMF0pfSxMKSxPYygicklkIitQLEwpO3ZhciBRPXlbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gbmMoKC0xPT1RPyIiOnlbMV0uVGFyZ2V0LnNsaWNlKFErMSkpfHwi''@;'; put 'put ''IixMKSxuYyh5WzFdLlRvb2x0aXB8fCIiLEwpLG5jKCIiLEwpLEwuc2xpY2UoMCxMLmwpfShRLHJlKSl9fSksZGVsZXRlIFBbIiFsaW5rcyJdfShyZSxfZSxRKSxfZVsiIW1hcmdpbnMiXSYmdWkocmUsIkJydE1hcmdpbnMiLGZ1bmN0aW9uIHBMKHksUCl7cmV0dXJuIG51bGw9PVAmJihQPWZy''@;'; put 'put ''KDQ4KSksZGYoeSkscVMuZm9yRWFjaChmdW5jdGlvbihMKXtQYyh5W0xdLFApfSksUH0oX2VbIiFtYXJnaW5zIl0pKSwoIVB8fFAuaWdub3JlRUN8fG51bGw9PVAuaWdub3JlRUMpJiZmdW5jdGlvbiBKUyh5LFApeyFQfHwhUFsiIXJlZiJdfHwodWkoeSwiQnJ0QmVnaW5DZWxsSWdub3JlRUNz''@;'; put 'put ''IiksdWkoeSwiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiB2TCh5KXt2YXIgUD1mcigyNCk7cmV0dXJuIFAud3JpdGVfc2hpZnQoNCw0KSxQLndyaXRlX3NoaWZ0KDQsMSksRDEoeSxQKSxQfShPaShQWyIhcmVmIl0pKSksdWkoeSwiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0ocmUsX2UpLGZ1''@;'; put 'put ''bmN0aW9uIG9ZKHksUCxMLFEpe2lmKFBbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgcmU9em8oUSwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKEwrMSkrIi52bWwiLEhpLlZNTCk7dWkoeSwiQnJ0TGVnYWN5RHJhd2luZyIsT2MoInJJZCIrcmUpKSxQWyIhbGVnYWN5Il09cmV9fShy''@;'; put 'put ''ZSxfZSx5LFEpLHVpKHJlLCJCcnRFbmRTaGVldCIpLHJlLmVuZCgpfWZ1bmN0aW9uIEE2KHkpe3ZhciBRLFA9W10sTD15Lm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KHkubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7''@;'; put 'put ''dmFyIF9lPXBlLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7X2UmJihQWytfZVsxXV09TD8rX2VbMl06X2VbMl0pfSk7dmFyIHJlPXhyKCh5Lm1hdGNoKC88Yzpmb3JtYXRDb2RlPihbXHNcU10qPyk8XC9jOmZvcm1hdENvZGU+Lyl8fFsiIiwi''@;'; put 'put ''R2VuZXJhbCJdKVsxXSk7cmV0dXJuKHkubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe1E9cGUucmVwbGFjZSgvPC4qPz4vZywiIil9KSxbUCxyZSxRXX1IaS5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj''@;'; put 'put ''ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsSGkuQ0hBUlRFWD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBmNT0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4v''@;'; put 'put ''LEJjPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3Bsb3RBcmVhPi8sZ2Y9LzwoPzpcdys6KT9sZWdlbmQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2xlZ2VuZD4vLFQ2PS88KD86XHcrOik/dGl0bGU+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RpdGxlPi87ZnVuY3Rp''@;'; put 'put ''b24gbTAoeSxQLEwsUSxyZSxwZSxfZSx2ZSl7dmFyIFNlPXBlfHx7IiF0eXBlIjoiY2hhcnQifTtpZigheSlyZXR1cm4gcGU7X2UmJl9lLkFuY2hvciYmKFNlWyIhcG9zIl09c2YoX2UuQW5jaG9yLHZlKSxTZVsiIXBvc1R5cGUiXT1fZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIi''@;'; put 'put ''KSxTZVsiIWFic3BvcyJdPXNmKF9lLkFuY2hvcix2ZSksU2VbIiFyZWxwb3MiXT1LbShfZS5BbmNob3IsdmUpKSxTZVsiIXBsb3QiXT1bXTt2YXIgSGU9IiIsQmU9IiIsR2U9eS5tYXRjaChmNSk7R2U/KEhlPXkuc2xpY2UoMCxHZS5pbmRleCksQmU9eS5zbGljZShHZS5pbmRleCtHZVswXS5s''@;'; put 'put ''ZW5ndGgpKTpIZT1CZT15O3ZhciBudD1bXSxkdD1IZS5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8eS5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8QmUubWF0Y2goLzxjOmxhbmcuKj8+Lyk7cmV0dXJuIGR0JiYoU2VbIiFsYW5nIl09KGxuKGR0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksR2UmJigobnQ9''@;'; put 'put ''R2VbMV0ubWF0Y2goVDYpKSYmZnVuY3Rpb24gcTEoeSxQKXt2YXIgTD0iIjt5Lm1hdGNoKC88YzpyaWNoPi8pJiZ5LnJlcGxhY2UoLzxhOnQ+KFtcc1xTXSo/KTxcL2E6dD4vZyxmdW5jdGlvbihRLHJlKXtMKz1yZX0pLFBbIiF0aXRsZSJdPUx8fCJDaGFydCBUaXRsZSJ9KG50WzFdLFNlKSxm''@;'; put 'put ''dW5jdGlvbiBLMyh5LFApe2lmKHkpe3ZhciBMPTAsUT0wLHJlPSJBIixwZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fTt5LnJlcGxhY2UoVHIsZnVuY3Rpb24oX2UsdmUpe3ZhciBTZT17dDp2ZSxjOkwsdzowLHNlcjpbXX0sSGU9W10sQmU9KF9lLm1hdGNoKC88YzpzZXIvKXx8W10p''@;'; put 'put ''LmluZGV4LEdlPUJlP19lLnNsaWNlKDAsQmUpOl9lOyJzY2F0dGVyIj09dmUmJihIZT1fZS5tYXRjaCgvPGM6c2NhdHRlclN0eWxlKFteXC8+XSopXC8+L20pKSYmbG4oSGVbMF0pLCJiYXIiPT12ZSYmKEhlPV9lLm1hdGNoKC88YzpiYXJEaXIoW15cLz5dKilcLz4vbSkpJiYoU2UuYmFyRGly''@;'; put 'put ''PSJiYXIiPT1sbihIZVswXSkudmFsPyJoIjoidiIpLChIZT1HZS5tYXRjaCgvPGM6Z3JvdXBpbmcoW15cLz5dKilcLz4vbSkpJiYoU2UuZ3JvdXBpbmc9bG4oSGVbMF0pLnZhbHx8InN0YW5kYXJkIiksKF9lLm1hdGNoKHEzKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZHQpe3ZhciBDdD1bXSxj''@;'; put 'put ''dD17fSxidD1bXTtpZihkdC5tYXRjaCgvPGM6dHg+Lykpe3ZhciBGdD1BNigoZHQubWF0Y2goLzxjOnR4PihbXHNcU10qPyk8XC9jOnR4Pi8pfHxbXSlbMV18fCIiKXx8W107RnRbMF0mJkZ0WzBdWzBdJiYoY3QubmFtZT1GdFswXVswXSksRnRbMl0mJihjdC5uYW1lcmVmPUZ0WzJdKX1bInhW''@;'; put 'put ''YWwiLCJ5VmFsIiwiY2F0IiwidmFsIiwiYnViYmxlU2l6ZSJdLmZvckVhY2goZnVuY3Rpb24oRXQpe3ZhciBadCxUdD1kdC5tYXRjaChuZXcgUmVnRXhwKCI8YzoiK0V0KyI+W1xcc1xcU10qPzxcXC9jOiIrRXQrIj4iLCJnbSIpKTtUdCYmKChUdFswXS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6''@;'; put 'put ''Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwbil7WnQ9cG4ucmVwbGFjZSgvPC4qPz4vZywiIil9KSwoVHRbMF0ubWF0Y2goLzxjOig/Olx3KilDYWNoZT5bXHNcU10qPzxcL2M6KD86XHcqKUNhY2hlPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBuKXt2YXIgS249QTYocG4pO3Bl''@;'; put 'put ''LnMucj1wZS5zLmM9MCxwZS5lLmM9TCxyZT1OcyhMKSxLblswXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLHFuKXtQW3JlK0hzKHFuKV09e3Q6Im51bWJlciI9PXR5cGVvZiB1bj8ibiI6InMiLHY6dW4sejpLblsxXX0sUT1xbn0pLHBlLmUucjxRJiYocGUuZS5yPVEpLCsrTCxTZS53KyssQ3QucHVz''@;'; put 'put ''aChFdCksKEtuWzJdfHxadCkmJmJ0LnB1c2goS25bMl18fFp0KSwidmFsIj09RXQmJihjdC56PUtuWzFdfHwiR2VuZXJhbCIpfSkpfSksKEhlPV9lLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYoY3Quc21vb3RoPW51bGw9PWxuKEhlWzBdKS52YWx8fHlyKGxuKEhlWzBdKS52''@;'; put 'put ''YWwpKSxjdC5jb2xzPUN0LGN0LnJhbmdlcz1idCxTZS5zZXIucHVzaChjdCl9KSwiZG91Z2hudXQiPT12ZSYmKEhlPV9lLm1hdGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJihTZS5ob2xlPShsbihIZVswXSkudmFsfHwxMCkvMTAwKSxQWyIhcGxvdCJdLnB1c2goU2UpfSksTD4w''@;'; put 'put ''JiYoUFsiIXJlZiJdPU9vKHBlKSl9fSgoR2VbMV0ubWF0Y2goQmMpfHxbXSlbMV0sU2UpLG51bGwhPShudD1HZVsxXS5tYXRjaChnZikpJiZmdW5jdGlvbiBUTCh5LFApe3ZhciBMO1BbIiFsZWdlbmQiXT17cG9zOiJyIn0sKEw9eS5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20p''@;'; put 'put ''KSYmKFBbIiFsZWdlbmQiXS5wb3M9bG4oTFswXSkudmFsfHwiciIpfShudFswXSxTZSkpLFNlfXZhciBUcj0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10q''@;'; put 'put ''Pyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxxMz0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207SGkuQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRz''@;'; put 'put ''Lm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVldCI7dmFyIFgzPVNyKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczppcy5tYWluWzBdLCJ4bWxuczpyIjppcy5yfSk7ZnVuY3Rpb24gUTMoeSxQLEwsUSl7dmFyIHJlPVtCbixYM107cmV0dXJuIHJlLnB1c2go''@;'; put 'put ''IjxzaGVldFByLz4iKSxyZS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21TY2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLHJlW3JlLmxlbmd0aF09U3IoImRyYXdpbmciLG51bGwseyJyOmlkIjoicklkMSJ9KSx6byhR''@;'; put 'put ''LC0xLCIuLi9kcmF3aW5ncy9kcmF3aW5nIisoeSsxKSsiLnhtbCIsSGkuRFJBVykscmUubGVuZ3RoPjImJihyZVtyZS5sZW5ndGhdPSI8L2NoYXJ0c2hlZXQ+IixyZVsxXT1yZVsxXS5yZXBsYWNlKCIvPiIsIj4iKSkscmUuam9pbigiIil9ZnVuY3Rpb24gbnAoKXt2YXIgeT15YygpO3JldHVy''@;'; put 'put ''biB1aSh5LCJCcnRCZWdpblNoZWV0IiksdWkoeSwiQnJ0RW5kU2hlZXQiKSx5LmVuZCgpfXZhciBLMj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEsImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0''@;'; put 'put ''aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAsImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29s''@;'; put 'put ''dXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsic2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hv''@;'; put 'put ''d0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0sWyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sdE09W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEw''@;'; put 'put ''LCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwiYm9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2''@;'; put 'put ''MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbk09W10sck09W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwiYXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJd''@;'; put 'put ''LFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEiLCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIGp2KHksUCl7Zm9yKHZhciBMPTA7TCE9eS5sZW5ndGg7KytMKWZvcih2YXIg''@;'; put 'put ''UT15W0xdLHJlPTA7cmUhPVAubGVuZ3RoOysrcmUpe3ZhciBwZT1QW3JlXTtpZihudWxsPT1RW3BlWzBdXSlRW3BlWzBdXT1wZVsxXTtlbHNlIHN3aXRjaChwZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIFFbcGVbMF1dJiYoUVtwZVswXV09eXIoUVtwZVswXV0pKTticmVhaztj''@;'; put 'put ''YXNlImludCI6InN0cmluZyI9PXR5cGVvZiBRW3BlWzBdXSYmKFFbcGVbMF1dPXBhcnNlSW50KFFbcGVbMF1dLDEwKSl9fX1mdW5jdGlvbiB6dih5LFApe2Zvcih2YXIgTD0wO0whPVAubGVuZ3RoOysrTCl7dmFyIFE9UFtMXTtpZihudWxsPT15W1FbMF1dKXlbUVswXV09UVsxXTtlbHNlIHN3''@;'; put 'put ''aXRjaChRWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgeVtRWzBdXSYmKHlbUVswXV09eXIoeVtRWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIHlbUVswXV0mJih5W1FbMF1dPXBhcnNlSW50KHlbUVswXV0sMTApKX19fWZ1bmN0aW9uIFV2KHkpe3p2KHku''@;'; put 'put ''V0JQcm9wcyxLMiksenYoeS5DYWxjUHIsck0pLGp2KHkuV0JWaWV3LHRNKSxqdih5LlNoZWV0cyxuTSksWjMuZGF0ZTE5MDQ9eXIoeS5XQlByb3BzLmRhdGUxOTA0KX12YXIgb009Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBadih5LFApe2lmKHkubGVuZ3RoPjMxKXtpZihQKXJldHVy''@;'; put 'put ''biExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBMPSEwO3JldHVybiBvTS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2lmKC0xIT15LmluZGV4T2YoUSkpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFp''@;'; put 'put ''biA6IFxcIC8gPyAqIFsgXSIpO0w9ITF9fSksTH12YXIgc1k9Lzxcdys6d29ya2Jvb2svLGxZPVNyKCJ3b3JrYm9vayIsbnVsbCx7eG1sbnM6aXMubWFpblswXSwieG1sbnM6ciI6aXMucn0pO2Z1bmN0aW9uIFJMKHksUCl7dmFyIEw9UHx8e30sUT1bQm5dO1FbUS5sZW5ndGhdPWxZO3ZhciBy''@;'; put 'put ''ZT15Lldvcmtib29rJiYoeS5Xb3JrYm9vay5OYW1lc3x8W10pLmxlbmd0aD4wO3kuV29ya2Jvb2smJnkuV29ya2Jvb2suTW9kaWZ5JiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gSUwoeSl7dmFyIFA9e307cmV0dXJuIHkud2FybiYmKFAucmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxQLnVzZXJOYW1l''@;'; put 'put ''PXkudXNlcnx8IlNoZWV0IEpTIix5LmVuY3J5cHRpb24mJih5LmVuY3J5cHRpb24uYWxnbyYmKFAuYWxnb3JpdGhtTmFtZT15LmVuY3J5cHRpb24uYWxnbykseS5lbmNyeXB0aW9uLmhhc2gmJihQLmhhc2hWYWx1ZT15LmVuY3J5cHRpb24uaGFzaCkseS5lbmNyeXB0aW9uLnNhbHQmJihQLnNh''@;'; put 'put ''bHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCkseS5lbmNyeXB0aW9uLnNwaW4mJihQLnNwaW5Db3VudD15LmVuY3J5cHRpb24uc3BpbikpLFNyKCJmaWxlU2hhcmluZyIsbnVsbCxQKX0oeS5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgcGU9e2NvZGVOYW1lOiJUaGlzV29ya2Jvb2sifTt5Lldvcmti''@;'; put 'put ''b29rJiZ5Lldvcmtib29rLldCUHJvcHMmJihLMi5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtudWxsIT15Lldvcmtib29rLldCUHJvcHNbSGVbMF1dJiZ5Lldvcmtib29rLldCUHJvcHNbSGVbMF1dIT1IZVsxXSYmKHBlW0hlWzBdXT15Lldvcmtib29rLldCUHJvcHNbSGVbMF1dKX0pLHkuV29ya2Jv''@;'; put 'put ''b2suV0JQcm9wcy5Db2RlTmFtZSYmKHBlLmNvZGVOYW1lPXkuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgcGUuQ29kZU5hbWUpKSxRW1EubGVuZ3RoXT1Tcigid29ya2Jvb2tQciIsbnVsbCxwZSkseS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5Qcm90ZWN0aW9uJiYoUVtRLmxlbmd0''@;'; put 'put ''aF09ZnVuY3Rpb24gTEwoeSl7dmFyIFA9e307cmV0dXJuIHkubG9ja1N0cnVjdHVyZSYmKFAubG9ja1N0cnVjdHVyZT0xKSx5LmxvY2tXaW5kb3dzJiYoUC5sb2NrV2luZG93cz0xKSx5LmVuY3J5cHRpb24mJih5LmVuY3J5cHRpb24uYWxnbyYmKFAud29ya2Jvb2tBbGdvcml0aG1OYW1lPXku''@;'; put 'put ''ZW5jcnlwdGlvbi5hbGdvKSx5LmVuY3J5cHRpb24uaGFzaCYmKFAud29ya2Jvb2tIYXNoVmFsdWU9eS5lbmNyeXB0aW9uLmhhc2gpLHkuZW5jcnlwdGlvbi5zYWx0JiYoUC53b3JrYm9va1NhbHRWYWx1ZT15LmVuY3J5cHRpb24uc2FsdCkseS5lbmNyeXB0aW9uLnNwaW4mJihQLndvcmtib29r''@;'; put 'put ''U3BpbkNvdW50PXkuZW5jcnlwdGlvbi5zcGluKSksU3IoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxQKX0oeS5Xb3JrYm9vay5Qcm90ZWN0aW9uKSk7dmFyIF9lPXkuV29ya2Jvb2smJnkuV29ya2Jvb2suU2hlZXRzfHxbXSx2ZT0wO2lmKF9lJiZfZVswXSYmX2VbMF0uSGlkZGVuKXtmb3Io''@;'; put 'put ''UVtRLmxlbmd0aF09Ijxib29rVmlld3M+Iix2ZT0wO3ZlIT15LlNoZWV0TmFtZXMubGVuZ3RoJiZfZVt2ZV0mJl9lW3ZlXS5IaWRkZW47Kyt2ZSk7dmU9PXkuU2hlZXROYW1lcy5sZW5ndGgmJih2ZT0wKSxRW1EubGVuZ3RoXT0nPHdvcmtib29rVmlldyBmaXJzdFNoZWV0PSInK3ZlKyciIGFj''@;'; put 'put ''dGl2ZVRhYj0iJyt2ZSsnIi8+JyxRW1EubGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoUVtRLmxlbmd0aF09IjxzaGVldHM+Iix2ZT0wO3ZlIT15LlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBTZT17bmFtZTpIcih5LlNoZWV0TmFtZXNbdmVdLnNsaWNlKDAsMzEpKX07aWYoU2Uuc2hl''@;'; put 'put ''ZXRJZD0iIisodmUrMSksU2VbInI6aWQiXT0icklkIisodmUrMSksX2VbdmVdKXN3aXRjaChfZVt2ZV0uSGlkZGVuKXtjYXNlIDE6U2Uuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOlNlLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1RW1EubGVuZ3RoXT1Tcigic2hlZXQiLG51bGwsU2UpfXJldHVy''@;'; put 'put ''biBRW1EubGVuZ3RoXT0iPC9zaGVldHM+Iix5LkV4dGVybmFsV0ImJnkuRXh0ZXJuYWxXQi5sZW5ndGgmJihRW1EubGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLCh5LkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEhlLEJlKXt2YXIgR2U9em8oTC53YnJlbHMsLTEsImV4''@;'; put 'put ''dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisoQmUrMSkrIi54bWwiLEhpLlhMSU5LKTtRW1EubGVuZ3RoXT0nPGV4dGVybmFsUmVmZXJlbmNlIHI6aWQ9InJJZCcrR2UrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVyZW5jZXM+IikscmUmJihRW1EubGVuZ3RoXT0iPGRlZmlu''@;'; put 'put ''ZWROYW1lcz4iLHkuV29ya2Jvb2smJnkuV29ya2Jvb2suTmFtZXMmJnkuV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihIZSl7dmFyIEJlPXtuYW1lOkhlLk5hbWV9O0hlLkNvbW1lbnQmJihCZS5jb21tZW50PUhlLkNvbW1lbnQpLG51bGwhPUhlLlNoZWV0JiYoQmUubG9jYWxTaGVl''@;'; put 'put ''dElkPSIiK0hlLlNoZWV0KSxIZS5IaWRkZW4mJihCZS5oaWRkZW49IjEiKSxIZS5SZWYmJihRW1EubGVuZ3RoXT1TcigiZGVmaW5lZE5hbWUiLEhyKEhlLlJlZiksQmUpKX0pLFFbUS5sZW5ndGhdPSI8L2RlZmluZWROYW1lcz4iKSxMJiZMLnBpdm90cyYmTC5waXZvdHMubGVuZ3RoPjAmJihR''@;'; put 'put ''LnB1c2goIjxwaXZvdENhY2hlcz4iKSxMLnBpdm90cy5mb3JFYWNoKGZ1bmN0aW9uKEhlLEJlKXtRLnB1c2goJzxwaXZvdENhY2hlIGNhY2hlSWQ9IicrKEJlKzEpKyciIHI6aWQ9InJJZCcrSGVbMl0rJyIvPicpfSksUS5wdXNoKCI8L3Bpdm90Q2FjaGVzPiIpKSxRLmxlbmd0aD4yJiYoUVtR''@;'; put 'put ''Lmxlbmd0aF09Ijwvd29ya2Jvb2s+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9ZnVuY3Rpb24gT0woeSxQKXtyZXR1cm4gUHx8KFA9ZnIoMTI3KSksUC53cml0ZV9zaGlmdCg0LHkuSGlkZGVuKSxQLndyaXRlX3NoaWZ0KDQseS5pVGFiSUQpLE9jKHkuc3RyUmVs''@;'; put 'put ''SUQsUCksbmMoeS5uYW1lLnNsaWNlKDAsMzEpLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfWZ1bmN0aW9uIFd2KHksUCl7dmFyIEw9e307cmV0dXJuIHkucmVhZF9zaGlmdCg0KSxMLkFyY2hJRD15LnJlYWRfc2hpZnQoNCkseS5sKz1QLTgsTH1mdW5jdGlvbiBITCh5LFApe3Zh''@;'; put 'put ''ciBMPXljKCk7cmV0dXJuIHVpKEwsIkJydEJlZ2luQm9vayIpLHVpKEwsIkJydEZpbGVWZXJzaW9uIixmdW5jdGlvbiBzTSh5LFApe1B8fChQPWZyKDEyNykpO2Zvcih2YXIgTD0wOzQhPUw7KytMKVAud3JpdGVfc2hpZnQoNCwwKTtyZXR1cm4gbmMoIlNoZWV0SlMiLFApLG5jKE0udmVyc2lv''@;'; put 'put ''bixQKSxuYyhNLnZlcnNpb24sUCksbmMoIjcyNjIiLFApLFAubGVuZ3RoPlAubD9QLnNsaWNlKDAsUC5sKTpQfSgpKSx1aShMLCJCcnRXYlByb3AiLGZ1bmN0aW9uIEZMKHksUCl7UHx8KFA9ZnIoNzIpKTt2YXIgTD0wO3JldHVybiB5JiZ5LmZpbHRlclByaXZhY3kmJihMfD04KSxQLndyaXRl''@;'; put 'put ''X3NoaWZ0KDQsTCksUC53cml0ZV9zaGlmdCg0LDApLHNtKHkmJnkuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siLFApLFAuc2xpY2UoMCxQLmwpfSh5Lldvcmtib29rJiZ5Lldvcmtib29rLldCUHJvcHN8fG51bGwpKSxmdW5jdGlvbiBhTSh5LFApe2lmKFAuV29ya2Jvb2smJlAuV29ya2Jvb2su''@;'; put 'put ''U2hlZXRzKXtmb3IodmFyIEw9UC5Xb3JrYm9vay5TaGVldHMsUT0wLHJlPS0xLHBlPS0xO1E8TC5sZW5ndGg7KytRKSFMW1FdfHwhTFtRXS5IaWRkZW4mJi0xPT1yZT9yZT1ROjE9PUxbUV0uSGlkZGVuJiYtMT09cGUmJihwZT1RKTtwZT5yZXx8KHVpKHksIkJydEJlZ2luQm9va1ZpZXdzIiks''@;'; put 'put ''dWkoeSwiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIGc1KHksUCl7cmV0dXJuIFB8fChQPWZyKDI5KSksUC53cml0ZV9zaGlmdCgtNCwwKSxQLndyaXRlX3NoaWZ0KC00LDQ2MCksUC53cml0ZV9zaGlmdCg0LDI4ODAwKSxQLndyaXRlX3NoaWZ0KDQsMTc2MDApLFAud3JpdGVfc2hpZnQoNCw1MDAp''@;'; put 'put ''LFAud3JpdGVfc2hpZnQoNCx5KSxQLndyaXRlX3NoaWZ0KDQseSksUC53cml0ZV9zaGlmdCgxLDEyMCksUC5sZW5ndGg+UC5sP1Auc2xpY2UoMCxQLmwpOlB9KHJlKSksdWkoeSwiQnJ0RW5kQm9va1ZpZXdzIikpfX0oTCx5KSxmdW5jdGlvbiBENih5LFApe3VpKHksIkJydEJlZ2luQnVuZGxl''@;'; put 'put ''U2hzIik7Zm9yKHZhciBMPTA7TCE9UC5TaGVldE5hbWVzLmxlbmd0aDsrK0wpdWkoeSwiQnJ0QnVuZGxlU2giLE9MKHtIaWRkZW46UC5Xb3JrYm9vayYmUC5Xb3JrYm9vay5TaGVldHMmJlAuV29ya2Jvb2suU2hlZXRzW0xdJiZQLldvcmtib29rLlNoZWV0c1tMXS5IaWRkZW58fDAsaVRhYklE''@;'; put 'put ''OkwrMSxzdHJSZWxJRDoicklkIisoTCsxKSxuYW1lOlAuU2hlZXROYW1lc1tMXX0pKTt1aSh5LCJCcnRFbmRCdW5kbGVTaHMiKX0oTCx5KSx1aShMLCJCcnRFbmRCb29rIiksTC5lbmQoKX1mdW5jdGlvbiBaTCh5LFAsTCxRLHJlKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/QUw6V0kp''@;'; put 'put ''KHksTCxRLHJlKX1mdW5jdGlvbiBsTSh5LFAsTCxRLHJlKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/bnA6UTMpKHksTCxRLHJlKX1mdW5jdGlvbiBXTCh5LFAsTCl7cmV0dXJuKCIuYmluIj09PVAuc2xpY2UoLTQpP3gzOkxtKSh5LEwpfWZ1bmN0aW9uIFFlKHksUCxMKXtyZXR1cm4o''@;'; put 'put ''Ii5iaW4iPT09UC5zbGljZSgtNCk/ZUk6VkMpKHksTCl9dmFyIEt2PS8oW1x3Ol0rKT0oKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86JykpL2csWHY9LyhbXHc6XSspPSgoPzoiKSg/OlteIl0qKSg/OiIpfCg/OicpKD86W14nXSopKD86JykpLztmdW5jdGlvbiBtdSh5LFApe3Zh''@;'; put 'put ''ciBMPXkuc3BsaXQoL1xzKy8pLFE9W107aWYoUHx8KFFbMF09TFswXSksMT09PUwubGVuZ3RoKXJldHVybiBRO3ZhciBwZSxfZSxTZSxyZT15Lm1hdGNoKEt2KTtpZihyZSlmb3IoU2U9MDtTZSE9cmUubGVuZ3RoOysrU2UpLTE9PT0oX2U9KHBlPXJlW1NlXS5tYXRjaChYdikpWzFdLmluZGV4''@;'; put 'put ''T2YoIjoiKSk/UVtwZVsxXV09cGVbMl0uc2xpY2UoMSxwZVsyXS5sZW5ndGgtMSk6UVsieG1sbnM6Ij09PXBlWzFdLnNsaWNlKDAsNik/InhtbG5zIitwZVsxXS5zbGljZSg2KTpwZVsxXS5zbGljZShfZSsxKV09cGVbMl0uc2xpY2UoMSxwZVsyXS5sZW5ndGgtMSk7cmV0dXJuIFF9ZnVuY3Rp''@;'; put 'put ''b24gY00oeSl7dmFyIEw9e307aWYoMT09PXkuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gTDt2YXIgcmUscGUsdmUsUT15Lm1hdGNoKEt2KTtpZihRKWZvcih2ZT0wO3ZlIT1RLmxlbmd0aDsrK3ZlKS0xPT09KHBlPShyZT1RW3ZlXS5tYXRjaChYdikpWzFdLmluZGV4T2YoIjoiKSk/TFty''@;'; put 'put ''ZVsxXV09cmVbMl0uc2xpY2UoMSxyZVsyXS5sZW5ndGgtMSk6TFsieG1sbnM6Ij09PXJlWzFdLnNsaWNlKDAsNik/InhtbG5zIityZVsxXS5zbGljZSg2KTpyZVsxXS5zbGljZShwZSsxKV09cmVbMl0uc2xpY2UoMSxyZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEx9ZnVuY3Rpb24gR0woeSl7dmFy''@;'; put 'put ''IFA9e307aWYoeS5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgTD17aHB4OjQqcGFyc2VJbnQoeS5EZWZhdWx0Um93SGVpZ2h0KS8zfTtJMyhMKSxQLnJvdz1MfWlmKHkuRGVmYXVsdENvbFdpZHRoKXt2YXIgUT17d3B4OjQqcGFyc2VJbnQoeS5EZWZhdWx0Q29sV2lkdGgpLzN9O3B1KFEpLFAuY29s''@;'; put 'put ''PVF9cmV0dXJuIFB9ZnVuY3Rpb24gUmUoeSxQLEwsUSl7dmFyIHJlPVE7c3dpdGNoKChMWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4iOnJlPXlyKFEpO2JyZWFrO2Nhc2UiaTIiOmNhc2UiaW50IjpyZT1wYXJzZUludChRLDEwKTticmVh''@;'; put 'put ''aztjYXNlInI0IjpjYXNlImZsb2F0IjpyZT1wYXJzZUZsb2F0KFEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6cmU9SHQoUSk7YnJlYWs7Y2FzZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIrTFswXSl9eVt4cihQKV09cmV9dmFyIHVNPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0sbWU9QWUodU0pO2Z1bmN0aW9uIHllKHksUCxMLFEp''@;'; put 'put ''e2lmKFEuY2VsbFN0eWxlcyl7aWYoTD1MLnJlcGxhY2UoL1xzKy9nLCIgIiksUC5JbnRlcmlvcil7dmFyIHJlPVAuSW50ZXJpb3I7cmUuUGF0dGVybiYmKHJlLnBhdHRlcm5UeXBlPUg0W3JlLlBhdHRlcm5dfHxyZS5QYXR0ZXJuKSxyZS5Db2xvciYmcmUuQ29sb3IubWF0Y2goLyNbMC05QS1G''@;'; put 'put ''YS1mXSovKSYmKHJlLmZnQ29sb3I9e3JnYjpyZS5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBkTSh5KXt5LkJvcmRlcnMmJih5LkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihQKXt2YXIgTD1QLlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7eVtMXT17c3R5bGU6cXQoUC5MaW5lU3R5bGUsK1Au''@;'; put 'put ''V2VpZ2h0KSxjb2xvcjp7cmdiOihQLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUgeS5Cb3JkZXJzKX0oUCk7dmFyIF9lLHBlPUwubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTtwZSYmKHlyKChfZT1sbihwZVswXSkpLkJvbGQpJiYoUC5Cb2xkPSEwKSx5cihf''@;'; put 'put ''ZS5JdGFsaWMpJiYoUC5JdGFsaWM9ITApLHlyKF9lLlN0cmlrZVRocm91Z2gpJiYoUC5TdHJpa2U9ITApLF9lLlNpemUmJihQLlNpemU9K19lLlNpemUpLFAuRm9udE5hbWU9X2UuRm9udE5hbWU/X2UuRm9udE5hbWU6IkFyaWFsIixfZS5VbmRlcmxpbmUmJihQLlVuZGVybGluZT1tZVtfZS5V''@;'; put 'put ''bmRlcmxpbmVdKSxfZS5Db2xvciYmKFAuUkdCPV9lLkNvbG9yLnNsaWNlKC02KSkpLFAuQWxpZ25tZW50JiYoUC5hbGlnbm1lbnQ9e30sUC5BbGlnbm1lbnQuVmVydGljYWwmJihQLmFsaWdubWVudC52ZXJ0aWNhbD1QLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxQLkFsaWdu''@;'; put 'put ''bWVudC5Ib3Jpem9udGFsJiYoUC5hbGlnbm1lbnQuaG9yaXpvbnRhbD1QLkFsaWdubWVudC5Ib3Jpem9udGFsLnRvTG93ZXJDYXNlKCkpLHlyKFAuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP1AuYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PVAuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxl''@;'; put 'put ''dGUgUC5hbGlnbm1lbnQud3JhcFRleHQseXIoUC5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihQLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK1AuQWxpZ25tZW50LkluZGVudCYmKFAuYWxpZ25tZW50LmluZGVudD0rUC5BbGlnbm1lbnQuSW5kZW50fHwwKSwrUC5BbGlnbm1lbnQu''@;'; put 'put ''Um90YXRlJiYoUC5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStQLkFsaWdubWVudC5Sb3RhdGV8fDApKX15W1AuSURdPVAsKCJEZWZhdWx0Ij09UC5JRHx8Ik5vcm1hbCI9PVAuTmFtZSkmJloxKFApfWZ1bmN0aW9uIHF0KHksUCl7c3dpdGNoKHkpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nh''@;'; put 'put ''c2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERvdCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJs''@;'; put 'put ''ZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK1B8fDApe2Nhc2UgMDpyZXR1cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiB5fWZ1bmN0aW9uIGhN''@;'; put 'put ''KHksUCxMLFEscmUscGUsX2UsdmUsU2UsSGUpe3ZhciBCZT0iR2VuZXJhbCIsR2U9US5TdHlsZUlELG50PXt9O0hlPUhlfHx7fTt2YXIgZHQ9W10sQ3Q9MDtmb3Iodm9pZCAwPT09R2UmJnZlJiYoR2U9dmUuU3R5bGVJRCksdm9pZCAwPT09R2UmJl9lJiYoR2U9X2UuU3R5bGVJRCk7dm9pZCAw''@;'; put 'put ''IT09cGVbR2VdOyl7dmFyIGN0PXBlW0dlXTtpZigiR2VuZXJhbCI9PUJlJiZjdC5uZiYmKEJlPXBlW0dlXS5uZiksY3QuSW50ZXJpb3ImJmR0LnB1c2gocGVbR2VdLkludGVyaW9yKSxjdC5hbGlnbm1lbnQmJihudC5hbGlnbm1lbnR8fChudC5hbGlnbm1lbnQ9b24oY3QuYWxpZ25tZW50KSkp''@;'; put 'put ''LG51bGw9PW50LmJvbGQmJmN0LkJvbGQmJihudC5ib2xkPSEwKSxudWxsPT1udC5pdGFsaWMmJmN0Lkl0YWxpYyYmKG50Lml0YWxpYz0hMCksbnVsbD09bnQuc3RyaWtlJiZjdC5TdHJpa2UmJihudC5zdHJpa2U9ITApLG51bGw9PW50LnN6JiZjdC5TaXplJiYobnQuc3o9Y3QuU2l6ZSksbnVs''@;'; put 'put ''bD09bnQubmFtZSYmY3QuRm9udE5hbWUmJihudC5uYW1lPWN0LkZvbnROYW1lKSxudWxsPT1udC51bmRlcmxpbmUmJmN0LlVuZGVybGluZSYmKG50LnVuZGVybGluZT1jdC5VbmRlcmxpbmUpLG51bGw9PW50LmNvbG9yJiZjdC5SR0ImJihudC5jb2xvcj17cmdiOmN0LlJHQn0pLFsidG9wIiwi''@;'; put 'put ''Ym90dG9tIiwibGVmdCIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihUdCl7bnVsbD09bnRbVHRdJiZjdFtUdF0mJihudFtUdF09b24oY3RbVHRdKSl9KSwiRGVmYXVsdCI9PUdlKWJyZWFrO0dlPWN0LlBhcmVudHx8IkRlZmF1bHQifW50Lm5hbWV8fChudC5uYW1lPXBlLkRlZmF1bHQmJnBl''@;'; put 'put ''LkRlZmF1bHQuRm9udE5hbWV8fCJBcmlhbCIpLG50LnN6fHwobnQuc3o9cGUuRGVmYXVsdCYmcGUuRGVmYXVsdC5TaXplfHwxMik7dmFyIGJ0PSIiO2lmKHl8fFEuRm9ybXVsYXx8IlN0cmluZyI9PUwuVHlwZXx8Ik51bWJlciI9PUwuVHlwZSlzd2l0Y2goTC5UeXBlKXtjYXNlIkJvb2xlYW4i''@;'; put 'put ''OlEudD0iYiIsUS52PXlyKHkpO2JyZWFrO2Nhc2UiU3RyaW5nIjpRLnQ9InMiLGJ0PUdpKHhyKHkpKSxRLnY9eS5pbmRleE9mKCI8Iik+LTE/eHIoUHx8eSkucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCx5LmluZGV4T2YoIjwiKT4tMSYmKFEuUj1GdS5odG1sX3RvX3JzKHhyKHkpKSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJEYXRlVGltZSI6IloiIT15LnNsaWNlKC0xKSYmKHkrPSJaIiksUS52PShIdCh5KS1uZXcgRGF0ZShEYXRlLlVUQygxODk5LDExLDMwKSkpLzg2NGU1LFEudiE9US52P1Eudj14cih5KTpRLnY8NjAmJihRLnY9US52LTEpLCghQmV8fCJHZW5lcmFsIj09QmUpJiYoQmU9Inl5eXkt''@;'; put 'put ''bW0tZGQiKTtjYXNlIk51bWJlciI6dm9pZCAwPT09US52JiYoUS52PSt5KSxRLnR8fChRLnQ9Im4iKTticmVhaztjYXNlIkVycm9yIjpRLnQ9ImUiLFEudj1LYVt5XSwhMSE9PUhlLmNlbGxUZXh0JiYoUS53PXkpO2JyZWFrO2RlZmF1bHQ6IiI9PXkmJiIiPT1QP1EudD0ieiI6KFEudD0icyIs''@;'; put 'put ''YnQ9R2koeHIoeSkpLFEudj15LmluZGV4T2YoIjwiKT4tMT94cihQfHx5KS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LHkuaW5kZXhPZigiPCIpPi0xJiYoUS5SPUZ1Lmh0bWxfdG9fcnMoeHIoeSkpKSl9ZWxzZSBRLnQ9InoiLGRlbGV0ZSBRLnY7aWYoZnVuY3Rpb24gSnYoeSxQLEwpe2lm''@;'; put 'put ''KCJ6IiE9PXkudCl7aWYoIUx8fCExIT09TC5jZWxsVGV4dCl0cnl7eS53PSJlIj09PXkudD95Lnd8fFFvW3kudl06IkdlbmVyYWwiPT09UD8ibiI9PT15LnQ/KDB8eS52KT09PXkudj93Ll9nZW5lcmFsX2ludCh5LnYpOncuX2dlbmVyYWxfbnVtKHkudik6dy5fZ2VuZXJhbCh5LnYpOmZ1bmN0''@;'; put 'put ''aW9uICRpKHksUCl7dmFyIEw9bmVbeV18fHhyKHkpO3JldHVybiJHZW5lcmFsIj09PUw/dy5fZ2VuZXJhbChQKTp3LmZvcm1hdChMLFApfShQfHwiR2VuZXJhbCIseS52KX1jYXRjaChwZSl7aWYoTC5XVEYpdGhyb3cgcGV9dHJ5e3ZhciBRPW5lW1BdfHxQfHwiR2VuZXJhbCI7aWYoTC5jZWxs''@;'; put 'put ''TkYmJih5Lno9USksTC5jZWxsRGF0ZXMmJiJuIj09eS50JiZ3LmlzX2RhdGUoUSkpe3ZhciByZT13LnBhcnNlX2RhdGVfY29kZSh5LnYpO3JlJiYoeS50PSJkIix5LnY9bmV3IERhdGUocmUueSxyZS5tLTEscmUuZCxyZS5ILHJlLk0scmUuUyxyZS51KSl9fWNhdGNoKHBlKXtpZihMLldURil0''@;'; put 'put ''aHJvdyBwZX19fShRLEJlLEhlKSwhMSE9PUhlLmNlbGxGb3JtdWxhKWlmKFEuRm9ybXVsYSl7dmFyIEZ0PXhyKFEuRm9ybXVsYSk7NjE9PUZ0LmNoYXJDb2RlQXQoMCkmJihGdD1GdC5zbGljZSgxKSksUS5mPWFmKEZ0LHJlKSxkZWxldGUgUS5Gb3JtdWxhLCJSQyI9PVEuQXJyYXlSYW5nZT9R''@;'; put 'put ''LkY9YWYoIlJDOlJDIixyZSk6US5BcnJheVJhbmdlJiYoUS5GPWFmKFEuQXJyYXlSYW5nZSxyZSksU2UucHVzaChbT2koUS5GKSxRLkZdKSl9ZWxzZSBmb3IoQ3Q9MDtDdDxTZS5sZW5ndGg7KytDdClyZS5yPj1TZVtDdF1bMF0ucy5yJiZyZS5yPD1TZVtDdF1bMF0uZS5yJiZyZS5jPj1TZVtD''@;'; put 'put ''dF1bMF0ucy5jJiZyZS5jPD1TZVtDdF1bMF0uZS5jJiYoUS5GPVNlW0N0XVsxXSk7aWYoSGUuY2VsbFN0eWxlcyYmKGR0LmZvckVhY2goZnVuY3Rpb24oVHQpeyFudC5wYXR0ZXJuVHlwZSYmVHQucGF0dGVyblR5cGUmJihudC5wYXR0ZXJuVHlwZT1UdC5wYXR0ZXJuVHlwZSksIW50LmZnQ29s''@;'; put 'put ''b3ImJlR0LmZnQ29sb3ImJihudC5mZ0NvbG9yPVR0LmZnQ29sb3IpfSksUS5zPW50KSx2b2lkIDAhPT1RLlN0eWxlSUQmJihRLml4ZmU9US5TdHlsZUlEKSxRLlImJlEucyl7dmFyIEV0PW9uKFEucyk7ZGVsZXRlIEV0LmJvbGQsZGVsZXRlIEV0Lml0YWxpYyxkZWxldGUgRXQudW5kZXJsaW5l''@;'; put 'put ''LGRlbGV0ZSBFdC5zdHJpa2UsUS5SLmZvckVhY2goZnVuY3Rpb24oVHQpe1R0LnM9VXQob24oRXQpLFR0LnMpfSl9fWZ1bmN0aW9uICRMKHkpe3kudD15LnZ8fCIiLHkudD15LnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIikseS52PXkudz15Lml4ZmU9dm9pZCAw''@;'; put 'put ''fWZ1bmN0aW9uIFF2KHkpe2lmKGhlJiZCdWZmZXIuaXNCdWZmZXIoeSkpcmV0dXJuIHkudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIHkpcmV0dXJuIHk7aWYodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ5IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gUGkoTihDKHkp''@;'; put 'put ''KSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIEJyPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/OjxcL11bXj5dKik/Pi9nbTtmdW5jdGlvbiBVcih5LFApe3ZhciBMPVB8fHt9''@;'; put 'put ''LFE9VShRdih5KSk7KCJiaW5hcnkiPT1MLnR5cGV8fCJhcnJheSI9PUwudHlwZXx8ImJhc2U2NCI9PUwudHlwZSkmJihRPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxCKFEpKTpQaShRKSk7dmFyIHJlPVEuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LHBlPSExO2lmKCgxMDIzJnJlLmluZGV4T2YoIj4iKSk+TWF0aC5taW4oMTAyMyZyZS5pbmRleE9mKCIsIiksMTAyMyZyZS5pbmRleE9mKCI7IikpKXt2YXIgX2U9b24oTCk7cmV0dXJuIF9lLnR5cGU9InN0cmluZyIsQjEudG9fd29ya2Jvb2soUSxfZSl9aWYoLTE9PXJlLmluZGV4T2YoIjw/''@;'; put 'put ''eG1sIikmJlsiaHRtbCIsInRhYmxlIiwiaGVhZCIsIm1ldGEiLCJzY3JpcHQiLCJzdHlsZSIsImRpdiJdLmZvckVhY2goZnVuY3Rpb24obnUpe3JlLmluZGV4T2YoIjwiK251KT49MCYmKHBlPSEwKX0pLHBlKXJldHVybiBGdS50b193b3JrYm9vayhRLEwpO3ZhciB2ZSxIZSxTZT1bXTtudWxs''@;'; put 'put ''IT10ZSYmbnVsbD09TC5kZW5zZSYmKEwuZGVuc2U9dGUpO3ZhciB1cixCZT17fSxHZT1bXSxudD1MLmRlbnNlP1tdOnt9LGR0PSIiLEN0PXt9LGN0PXt9LGJ0PXt9LEZ0PW11KCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicpLEV0PTAsVHQ9MCxadD0wLHBuPXtzOntyOjJlNixjOjJlNn0sZTp7''@;'; put 'put ''cjowLGM6MH19LEtuPXt9LHVuPXt9LHFuPSIiLHpuPTAsa249W10sZXI9e30sdHI9e30sWm49MCxWcj1bXSxvaT17fSxraT1bXSxMaT17fSxRcj1bXSxBbj0hMSx2cj1bXSxycj1bXSxTbj17fSxwcj0wLENpPTAsanI9e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LGppPXt9O0Jy''@;'; put 'put ''Lmxhc3RJbmRleD0wLFE9US5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBfbz0iIjt2ZT1Cci5leGVjKFEpOylzd2l0Y2godmVbM109KF9vPXZlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRhdGEiOmlmKCJkYXRhIj09X28pe2lmKCIvIj09PXZlWzFdKXtpZigo''@;'; put 'put ''SGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKTticmVha31pZihTZVtTZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8i''@;'; put 'put ''PT09dmVbMV0/aE0oUS5zbGljZShFdCx2ZS5pbmRleCkscW4sRnQsImNvbW1lbnQiPT1TZVtTZS5sZW5ndGgtMV1bMF0/TGk6Y3Qse2M6VHQscjpadH0sS24sUXJbVHRdLGJ0LHZyLEwpOihxbj0iIixGdD1tdSh2ZVswXSksRXQ9dmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNl''@;'; put 'put ''bGwiOmlmKCIvIj09PXZlWzFdfHwiLz4iPT09dmVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKXtpZigoY3Q9Y00odmVbMF0pKS5JbmRleCYmKFR0PStjdC5JbmRleC0xKSxUdDxwbi5zLmMmJihwbi5zLmM9VHQpLFR0PnBuLmUuYyYmKHBuLmUuYz1UdCksa2k9W10s''@;'; put 'put ''IUwuc2hlZXRTdHVicyl7KytUdDticmVha31oTSgiIiwiIix7fSwiY29tbWVudCI9PVNlW1NlLmxlbmd0aC0xXVswXT9MaTpjdCx7YzpUdCxyOlp0fSxLbixRcltUdF0sYnQsdnIsTCl9aWYoa2kubGVuZ3RoPjAmJihjdC5jPWtpKSwoIUwuc2hlZXRSb3dzfHxMLnNoZWV0Um93cz5adCkmJih2''@;'; put 'put ''b2lkIDAhPT1jdC52fHxMLnNoZWV0U3R1YnMpJiYoTC5kZW5zZT8obnRbWnRdfHwobnRbWnRdPVtdKSxudFtadF1bVHRdPWN0KTpudFtOcyhUdCkrSHMoWnQpXT1jdCksY3QuSFJlZiYmKGN0Lmw9e1RhcmdldDp4cihjdC5IUmVmKX0sY3QuSFJlZlNjcmVlblRpcCYmKGN0LmwuVG9vbHRpcD1j''@;'; put 'put ''dC5IUmVmU2NyZWVuVGlwKSxkZWxldGUgY3QuSFJlZixkZWxldGUgY3QuSFJlZlNjcmVlblRpcCksKGN0Lk1lcmdlQWNyb3NzfHxjdC5NZXJnZURvd24pJiYocHI9VHQrKDB8cGFyc2VJbnQoY3QuTWVyZ2VBY3Jvc3MsMTApKSxDaT1adCsoMHxwYXJzZUludChjdC5NZXJnZURvd24sMTApKSwo''@;'; put 'put ''cHI+VHR8fENpPlp0KSYma24ucHVzaCh7czp7YzpUdCxyOlp0fSxlOntjOnByLHI6Q2l9fSkpLEwuc2hlZXRTdHVicylpZihjdC5NZXJnZUFjcm9zc3x8Y3QuTWVyZ2VEb3duKXtmb3IodmFyIERpPVR0O0RpPD1wcjsrK0RpKWZvcih2YXIgWW89WnQ7WW88PUNpOysrWW8pKERpPlR0fHxZbz5a''@;'; put 'put ''dCkmJihMLmRlbnNlPyhudFtZb118fChudFtZb109W10pLG50W1lvXVtEaV09e3Q6InoifSk6bnRbTnMoRGkpK0hzKFlvKV09e3Q6InoifSk7VHQ9cHIrMX1lbHNlKytUdDtlbHNlIGN0Lk1lcmdlQWNyb3NzP1R0PXByKzE6KytUdH1lbHNlKGN0PWNNKHZlWzBdKSkuSW5kZXgmJihUdD0rY3Qu''@;'; put 'put ''SW5kZXgtMSksVHQ8cG4ucy5jJiYocG4ucy5jPVR0KSxUdD5wbi5lLmMmJihwbi5lLmM9VHQpLCIvPiI9PT12ZVswXS5zbGljZSgtMikmJisrVHQsa2k9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXZlWzFdfHwiLz4iPT09dmVbMF0uc2xpY2UoLTIpPyhadDxwbi5zLnImJihwbi5zLnI9WnQp''@;'; put 'put ''LFp0PnBuLmUuciYmKHBuLmUucj1adCksIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSYmKGJ0PW11KHZlWzBdKSkuSW5kZXgmJihadD0rYnQuSW5kZXgtMSksVHQ9MCwrK1p0KTooKGJ0PW11KHZlWzBdKSkuSW5kZXgmJihadD0rYnQuSW5kZXgtMSksU249e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdo''@;'; put 'put ''dHx8YnQuSGVpZ2h0KSYmKFNuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksU24uaHB4PVUxKFNuLmhwdCkscnJbWnRdPVNuKSwiMSI9PWJ0LkhpZGRlbiYmKFNuLmhpZGRlbj0hMCxycltadF09U24pKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5w''@;'; put 'put ''b3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpO0dlLnB1c2goZHQpLHBuLnMucjw9cG4uZS5yJiZwbi5zLmM8PXBuLmUuYyYmKG50WyIhcmVmIl09T28ocG4pLEwuc2hlZXRSb3dzJiZMLnNoZWV0Um93czw9cG4uZS5yJiYobnRbIiFm''@;'; put 'put ''dWxscmVmIl09bnRbIiFyZWYiXSxwbi5lLnI9TC5zaGVldFJvd3MtMSxudFsiIXJlZiJdPU9vKHBuKSkpLGtuLmxlbmd0aCYmKG50WyIhbWVyZ2VzIl09a24pLFFyLmxlbmd0aD4wJiYobnRbIiFjb2xzIl09UXIpLHJyLmxlbmd0aD4wJiYobnRbIiFyb3dzIl09cnIpLEN0JiYobnRbIiFzaGVl''@;'; put 'put ''dEZvcm1hdCJdPUdMKEN0KSksQmVbZHRdPW50fWVsc2UgcG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sWnQ9VHQ9MCxTZS5wdXNoKFt2ZVszXSwhMV0pLEhlPW11KHZlWzBdKSxkdD14cihIZS5OYW1lKSxudD1MLmRlbnNlP1tdOnt9LGtuPVtdLHZyPVtdLHJyPVtdLGpyLlNoZWV0''@;'; put 'put ''cy5wdXNoKGppPXtuYW1lOmR0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09dmVbMF0uc2xpY2UoLTIp''@;'; put 'put ''KWJyZWFrO0N0PW11KHZlWzBdKSxTZS5wdXNoKFt2ZVszXSwhMV0pLFFyPVtdLEFuPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXZlWzFdP3llKEtuLHVuLHFuLEwpOih1bj1tdSh2ZVswXSkscW49IiIpO2JyZWFrO2Nhc2UibnVtYmVyZm9ybWF0Ijp1bi5uZj14cihtdSh2ZVswXSkuRm9y''@;'; put 'put ''bWF0fHwiR2VuZXJhbCIpLG5lW3VuLm5mXSYmKHVuLm5mPW5lW3VuLm5mXSk7Zm9yKHZhciBsbz0wOzM5MiE9bG8mJncuX3RhYmxlW2xvXSE9dW4ubmY7Kytsbyk7aWYoMzkyPT1sbylmb3IobG89NTc7MzkyIT1sbzsrK2xvKWlmKG51bGw9PXcuX3RhYmxlW2xvXSl7dy5sb2FkKHVuLm5mLGxv''@;'; put 'put ''KTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PVNlW1NlLmxlbmd0aC0xXVswXXx8Ii8iPT09dmVbMV0pYnJlYWs7aWYoKHVyPW11KHZlWzBdKSkuSGlkZGVuJiYodXIuaGlkZGVuPSEwLGRlbGV0ZSB1ci5IaWRkZW4pLHVyLldpZHRoP3VyLndweD00KnBhcnNlSW50KHVy''@;'; put 'put ''LldpZHRoLDEwKS8zOit1ci5BdXRvRml0V2lkdGgmJih1ci5hdXRvPTEpLCFBbiYmdXIud3B4PjEwKXtBbj0hMCxwbD1sQztmb3IodmFyIEFvPTA7QW88UXIubGVuZ3RoOysrQW8pUXJbQW9dJiZwdShRcltBb10pfUFuJiZwdSh1ciksUXJbdXIuSW5kZXgtMXx8UXIubGVuZ3RoXT11cjtmb3Io''@;'; put 'put ''dmFyIHhvPTA7eG88K3VyLlNwYW47Kyt4bylRcltRci5sZW5ndGhdPW9uKHVyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PXZlWzFdKWJyZWFrO2pyLk5hbWVzfHwoanIuTmFtZXM9W10pO3ZhciBoaT1sbih2ZVswXSksdGE9e05hbWU6aGkuTmFtZSxSZWY6YWYoaGkuUmVmZXJz''@;'; put 'put ''VG8uc2xpY2UoMSkse3I6MCxjOjB9KX07anIuU2hlZXRzLmxlbmd0aD4wJiYodGEuU2hlZXQ9anIuU2hlZXRzLmxlbmd0aC0xKSxqci5OYW1lcy5wdXNoKHRhKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNlImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpj''@;'; put 'put ''YXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMiOmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFMLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkFsaWdubWVudD1tdSh2ZVswXSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJib3JkZXJzIjoiLyIhPT12ZVsxXSYmKHVuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigiLyI9PT12ZVsxXSlicmVhazt1bi5Cb3JkZXJzfHwodW4uQm9yZGVycz1bXSksdW4uQm9yZGVycy5wdXNoKG11KHZlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigi''@;'; put 'put ''Lz4iPT09dmVbMF0uc2xpY2UoLTIpKXtxbis9dmVbMF07YnJlYWt9Ii8iPT09dmVbMV0/cW4rPVEuc2xpY2Uoem4sdmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTp6bj12ZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZighTC5jZWxsU3R5bGVzfHwiLyI9PT12ZVsxXSlicmVhazt1bi5JbnRl''@;'; put 'put ''cmlvcj1tdSh2ZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNvbXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2''@;'; put 'put ''ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRlbnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1l''@;'; put 'put ''IjppZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXZlWzFdP1JkKGVyLF9vLFEuc2xpY2UoWm4sdmUuaW5kZXgpKTpabj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlmKCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9w''@;'; put 'put ''KCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUuam9pbigifCIpKX1lbHNlIFNlLnB1c2goW3ZlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSk7JEwoTGkpLGtpLnB1c2goTGkpfWVsc2UgU2UucHVzaChbdmVbM10sITFdKSxMaT17YTooSGU9bXUodmVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYoIi8iPT09dmVbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT12ZVsz''@;'; put 'put ''XSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitIZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSl7dmFyIE1uPW11KHZlWzBdKTtudFsiIWF1dG9maWx0ZXIiXT17cmVmOmFmKE1uLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0sU2Uu''@;'; put 'put ''cHVzaChbdmVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihudFsiIXZhbGlkYXRpb25zIl18fChudFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXZlWzFdKXtpZigoSGU9U2UucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrSGUu''@;'; put 'put ''am9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmU2UucHVzaChbdmVbM10sITBdKSxvaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXZlWzFdKXt2YXIgTXM9K1Euc2xpY2UoRXQsdmUuaW5kZXgpOyg3Mj09TXN8fDk2PT1Ncykm''@;'; put 'put ''JkZtKE1zKX1lbHNlIEV0PXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFi''@;'; put 'put ''bGUiOmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0''@;'; put 'put ''dGFncyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT12ZVsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK0hlLmpvaW4oInwiKSl9ZWxzZSIv''@;'; put 'put ''IiE9PXZlWzBdLmNoYXJBdCh2ZVswXS5sZW5ndGgtMikmJlNlLnB1c2goW3ZlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT1TZS5sZW5ndGgmJiJkb2N1bWVudCI9PXZlWzNdfHwwPT1TZS5sZW5ndGgmJiJ1b2YiPT12ZVszXSlyZXR1cm4gYV8oUSxMKTt2YXIgeXM9ITA7c3dpdGNoKFNl''@;'; put 'put ''W1NlLmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2godmVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2Ui''@;'; put 'put ''Y29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2UidG9vbGJh''@;'; put 'put ''ciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVyIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiZXhjZWx3''@;'; put 'put ''b3JrYm9vayI6c3dpdGNoKHZlWzNdKXtjYXNlImRhdGUxOTA0Ijpqci5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0''@;'; put 'put ''c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNh''@;'; put 'put ''c2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBh''@;'; put 'put ''dGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xs''@;'; put 'put ''YXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9k''@;'; put 'put ''ZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNhc2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2Fz''@;'; put 'put ''ZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2godmVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXZlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT12ZVsxXSlzd2l0Y2goUS5zbGljZShabix2ZS5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOmppLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRW''@;'; put 'put ''ZXJ5SGlkZGVuIjpqaS5IaWRkZW49Mn1lbHNlIFpuPXZlLmluZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksbnRbIiFtYXJnaW5zIl0uaGVhZGVyPWxuKHZlWzBdKS5NYXJnaW47YnJlYWs7Y2Fz''@;'; put 'put ''ZSJmb290ZXIiOm50WyIhbWFyZ2lucyJdfHxkZihudFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLG50WyIhbWFyZ2lucyJdLmZvb3Rlcj1sbih2ZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBFbD1sbih2ZVswXSk7bnRbIiFtYXJnaW5zIl18fGRmKG50WyIhbWFyZ2lu''@;'; put 'put ''cyJdPXt9LCJ4bG1sIiksRWwuVG9wJiYobnRbIiFtYXJnaW5zIl0udG9wPUVsLlRvcCksRWwuTGVmdCYmKG50WyIhbWFyZ2lucyJdLmxlZnQ9RWwuTGVmdCksRWwuUmlnaHQmJihudFsiIW1hcmdpbnMiXS5yaWdodD1FbC5SaWdodCksRWwuQm90dG9tJiYobnRbIiFtYXJnaW5zIl0uYm90dG9t''@;'; put 'put ''PUVsLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOmpyLlZpZXdzfHwoanIuVmlld3M9W10pLGpyLlZpZXdzWzBdfHwoanIuVmlld3NbMF09e30pLGpyLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNlImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2Ui''@;'; put 'put ''YWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2UicGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1i''@;'; put 'put ''ZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHByaW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpj''@;'; put 'put ''YXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNlInJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4Ijpj''@;'; put 'put ''YXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVmdHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29y''@;'; put 'put ''dCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRoeXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2Ui''@;'; put 'put ''YWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUiOmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBh''@;'; put 'put ''Z2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZpZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3Rl''@;'; put 'put ''Y3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXZlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXZlWzFdKXtudFsiIWZyZWV6ZSJdfHwobnRbIiFmcmVlemUiXT0iQTEiKTt2YXIgc2w9c3MobnRbIiFmcmVlemUiXSk7InNw''@;'; put 'put ''bGl0aG9yaXpvbnRhbCI9PXZlWzNdP3NsLnI9K1Euc2xpY2UoWm4sdmUuaW5kZXgpOnNsLmM9K1Euc2xpY2UoWm4sdmUuaW5kZXgpLG50WyIhZnJlZXplIl09ZGkoc2wpfWVsc2UgWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpudFsi''@;'; put 'put ''IWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpudFsiIW91dGxpbmUiXXx8KG50WyIhb3V0bGluZSJdPXt9KSxudFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5vc3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6bnRbIiFvdXRsaW5l''@;'; put 'put ''Il18fChudFsiIW91dGxpbmUiXT17fSksbnRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2godmVbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0''@;'; put 'put ''aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9z''@;'; put 'put ''aXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0''@;'; put 'put ''ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNh''@;'; put 'put ''c2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNl''@;'; put 'put ''InJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNh''@;'; put 'put ''bGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHZlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJlYWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJv''@;'; put 'put ''d2VuZCI6YnJlYWs7ZGVmYXVsdDp5cz0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRlcmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6''@;'; put 'put ''eXM9ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2godmVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZy''@;'; put 'put ''ZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpj''@;'; put 'put ''YXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNl''@;'; put 'put ''ImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24i''@;'; put 'put ''OnN3aXRjaCh2ZVszXSl7Y2FzZSJyYW5nZSI6b2kucmVmPXZlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNh''@;'; put 'put ''c2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2Fz''@;'; put 'put ''ZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1h''@;'; put 'put ''eCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdl''@;'; put 'put ''IjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OnlzPSExfWJyZWFrO2Nh''@;'; put 'put ''c2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHZlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNlImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50''@;'; put 'put ''dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6eXM9ITF9YnJlYWs7Y2Fz''@;'; put 'put ''ZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6eXM9ITF9aWYoeXN8fHZlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCFTZVtTZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIit2ZVszXSsifCIrU2Uuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3Bl''@;'; put 'put ''cnRpZXMiPT09U2VbU2UubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09dmVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXZlWzFdP1JlKHRyLF9vLFZyLFEuc2xpY2UoWm4sdmUuaW5kZXgpKTooVnI9dmUsWm49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoKTticmVha31pZihMLldURil0aHJvdyJVbnJl''@;'; put 'put ''Y29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitTZS5qb2luKCJ8Iil9dmFyIGdsPXt9O3JldHVybiFMLmJvb2tTaGVldHMmJiFMLmJvb2tQcm9wcyYmKGdsLlNoZWV0cz1CZSksZ2wuU2hlZXROYW1lcz1HZSxnbC5Xb3JrYm9vaz1qcixnbC5TU0Y9dy5nZXRfdGFibGUoKSxnbC5Qcm9wcz1lcixn''@;'; put 'put ''bC5DdXN0cHJvcHM9dHIsZ2wuU2hlZXRzJiZnbC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24obnUpe3ZhciB0bD1nbC5TaGVldHNbbnVdO3RsWyIhbWVyZ2VzIl0mJnRsWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihLdCl7InN0cmluZyI9PXR5cGVvZiBLdCYmKEt0PU0udXRpbHMu''@;'; put 'put ''ZGVjb2RlX3JhbmdlKEt0KSk7dmFyIGduPU0udXRpbHMuZW5jb2RlX2NlbGwoS3QucyksTG49QXJyYXkuaXNBcnJheSh0bCk/KHRsW0t0LnMucl18fFtdKVtLdC5zLmNdOnRsW2duXTtMbiYmTG4ucyYmKG51bGwhPUxuLnMudG9wJiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse3Rv''@;'; put 'put ''cDpMbi5zLnRvcH0pLG51bGwhPUxuLnMuYm90dG9tJiZxby5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUodGwsS3Qse2JvdHRvbTpMbi5zLmJvdHRvbX0pLG51bGwhPUxuLnMubGVmdCYmcW8uc2hlZXRfc2V0X3JhbmdlX3N0eWxlKHRsLEt0LHtsZWZ0OkxuLnMubGVmdH0pLG51bGwhPUxuLnMucmln''@;'; put 'put ''aHQmJnFvLnNoZWV0X3NldF9yYW5nZV9zdHlsZSh0bCxLdCx7cmlnaHQ6TG4ucy5yaWdodH0pKX0pfSksZ2x9ZnVuY3Rpb24gamEoeSxQKXtzd2l0Y2goUDYoUD1QfHx7fSksUC50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNlNjQiOnJldHVybiBVcihzZS5kZWNvZGUoeSksUCk7Y2FzZSJiaW5h''@;'; put 'put ''cnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBVcih5LFApO2Nhc2UiYXJyYXkiOnJldHVybiBVcihOKHkpLFApfX1mdW5jdGlvbiBWbih5KXtyZXR1cm4gU3IoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1lIjp5Lk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSzkoeS5SZWYse3I6''@;'; put 'put ''MCxjOjB9KX0pfWZ1bmN0aW9uIGdNKHksUCxMLFEscmUscGUsX2Upe2lmKCF5fHxudWxsPT15LnYmJm51bGw9PXkuZiYmIVEuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgdmU9e307aWYoeS5mJiYodmVbInNzOkZvcm11bGEiXT0iPSIrSHIoSzkoeS5mLF9lKSkpLHkuRiYmeS5GLnNsaWNlKDAs''@;'; put 'put ''UC5sZW5ndGgpPT1QKXt2YXIgU2U9c3MoeS5GLnNsaWNlKFAubGVuZ3RoKzEpKTt2ZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoU2Uucj09X2Uucj8iIjoiWyIrKFNlLnItX2UucikrIl0iKSsiQyIrKFNlLmM9PV9lLmM/IiI6IlsiKyhTZS5jLV9lLmMpKyJdIil9aWYoeS5sJiZ5LmwuVGFy''@;'; put 'put ''Z2V0JiYodmVbInNzOkhSZWYiXT1Icih5LmwuVGFyZ2V0KSx5LmwuVG9vbHRpcCYmKHZlWyJ4OkhSZWZTY3JlZW5UaXAiXT1Icih5LmwuVG9vbHRpcCkpKSxMWyIhbWVyZ2VzIl0pZm9yKHZhciBIZT1MWyIhbWVyZ2VzIl0sQmU9MDtCZSE9SGUubGVuZ3RoOysrQmUpSGVbQmVdLnMuYyE9X2Uu''@;'; put 'put ''Y3x8SGVbQmVdLnMuciE9X2Uucnx8KEhlW0JlXS5lLmM+SGVbQmVdLnMuYyYmKHZlWyJzczpNZXJnZUFjcm9zcyJdPUhlW0JlXS5lLmMtSGVbQmVdLnMuYyksSGVbQmVdLmUucj5IZVtCZV0ucy5yJiYodmVbInNzOk1lcmdlRG93biJdPUhlW0JlXS5lLnItSGVbQmVdLnMucikpO3ZhciBHZT0i''@;'; put 'put ''IixudD0iIjtzd2l0Y2goeS50KXtjYXNlInoiOmlmKCFRLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpHZT0iTnVtYmVyIixudD1TdHJpbmcoeS52KTticmVhaztjYXNlImIiOkdlPSJCb29sZWFuIixudD15LnY/IjEiOiIwIjticmVhaztjYXNlImUiOkdlPSJFcnJvciIsbnQ9''@;'; put 'put ''UW9beS52XTticmVhaztjYXNlImQiOkdlPSJEYXRlVGltZSIsbnQ9bmV3IERhdGUoeS52KS50b0lTT1N0cmluZygpLG51bGw9PXkueiYmKHkuej15Lnp8fHcuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpHZT0iU3RyaW5nIixudD1pbyh5LnZ8fCIiKX12YXIgZHQ9Z3UoUS5jZWxsWGZzLG51''@;'; put 'put ''bGwseSxRKTt2ZVsic3M6U3R5bGVJRCJdPSJzIisoMjErZHQpLHZlWyJzczpJbmRleCJdPV9lLmMrMTt2YXIgQ3Q9bnVsbCE9eS52P250OiIiLGN0PSJ6Ij09eS50PyIiOnkuUj9mdW5jdGlvbiBYTCh5KXtyZXR1cm4nPHNzOkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3''@;'; put 'put ''dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+Jyt5Lm1hcChmdW5jdGlvbihMKXt2YXIgUT1pbyhMLnYpO3JldHVybiBMLnMmJihMLnMuYm9sZCYmKFE9IjxCPiIrUSsiPC9CPiIpLEwucy5pdGFsaWMmJihRPSI8ST4iK1ErIjwvST4iKSxMLnMuc3RyaWtlJiYoUT0iPFM+IitRKyI8L1M+IiksTC5z''@;'; put 'put ''LnVuZGVybGluZSYmKFE9IjxVPiIrUSsiPC9VPiIpLCJzdXBlciI9PUwucy52YWxpZ24mJihRPSI8U3VwPiIrUSsiPC9TdXA+IiksInN1YiI9PUwucy52YWxpZ24mJihRPSI8U3ViPiIrUSsiPC9TdWI+IiksKEwucy5uYW1lfHxMLnMuc3p8fEwucy5jb2xvciYmbnVsbCE9TC5zLmNvbG9yLnJn''@;'; put 'put ''YikmJihRPVsiPEZvbnQiLEwucy5uYW1lPycgaHRtbDpGYWNlPSInK0wucy5uYW1lKyciJzoiIixMLnMuc3o/JyBodG1sOlNpemU9IicrTC5zLnN6KyciJzoiIixMLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgTC5zLmNvbG9yLnJnYj9MLnMu''@;'; put 'put ''Y29sb3IucmdiLnRvU3RyaW5nKDE2KTpMLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsUSwiPC9Gb250PiJdLmpvaW4oIiIpKSksUX0pLmpvaW4oIiIpKyI8L0RhdGE+In0oeS5SKTonPERhdGEgc3M6VHlwZT0iJytHZSsnIj4nK0N0KyI8L0RhdGE+IjtyZXR1cm4oeS5jfHxb''@;'; put 'put ''XSkubGVuZ3RoPjAmJihjdCs9ZnVuY3Rpb24gZV8oeSl7cmV0dXJuIHkubWFwKGZ1bmN0aW9uKFApe3ZhciBRPVNyKCJzczpEYXRhIixobyhQLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSk7cmV0dXJuIFNyKCJDb21tZW50IixRLHsic3M6QXV0aG9y''@;'; put 'put ''IjpQLmF9KX0pLmpvaW4oIiIpfSh5LmMpKSxTcigiQ2VsbCIsY3QsdmUpfWZ1bmN0aW9uIG1NKHksUCl7dmFyIEw9JzxSb3cgc3M6SW5kZXg9IicrKHkrMSkrJyInO3JldHVybiBQJiYoUC5ocHgmJiFQLmhwdCYmKFAuaHB0PWoyKFAuaHB4KSksUC5ocHQmJihMKz0nIHNzOkF1dG9GaXRIZWln''@;'; put 'put ''aHQ9IjAiIHNzOkhlaWdodD0iJytQLmhwdCsnIicpLFAuaGlkZGVuJiYoTCs9JyBzczpIaWRkZW49IjEiJykpLEwrIj4ifWZ1bmN0aW9uIFZlKHksUCxMKXt2YXIgUT1bXSxwZT1MLlNoZWV0c1tMLlNoZWV0TmFtZXNbeV1dLF9lPXBlP2Z1bmN0aW9uIHBNKHksUCxMLFEpe2lmKCF5fHwhKChR''@;'; put 'put ''fHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIHJlPVEuV29ya2Jvb2suTmFtZXMscGU9W10sX2U9MDtfZTxyZS5sZW5ndGg7KytfZSl7dmFyIHZlPXJlW19lXTt2ZS5TaGVldD09TCYmKHZlLk5hbWUubWF0Y2goL15feGxmblwuLyl8fHBlLnB1c2goVm4odmUpKSl9''@;'; put 'put ''cmV0dXJuIHBlLmpvaW4oIiIpfShwZSwwLHksTCk6IiI7cmV0dXJuIF9lLmxlbmd0aD4wJiZRLnB1c2goIjxOYW1lcz4iK19lKyI8L05hbWVzPiIpLF9lPXBlP2Z1bmN0aW9uIHZNKHksUCxMLFEpe2lmKCF5WyIhcmVmIl0pcmV0dXJuIiI7dmFyIHJlPU9pKHlbIiFyZWYiXSkscGU9eVsiIW1l''@;'; put 'put ''cmdlcyJdfHxbXSxfZT0wLHZlPVtdO3lbIiFjb2xzIl0mJnlbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihidCxGdCl7cHUoYnQpO3ZhciBFdD0hIWJ0LndpZHRoLFR0PVlkKEZ0LGJ0KSxadD17InNzOkluZGV4IjpGdCsxfTtFdCYmKFp0WyJzczpXaWR0aCJdPU1jKFR0LndpZHRoKSksYnQu''@;'; put 'put ''aGlkZGVuJiYoWnRbInNzOkhpZGRlbiJdPSIxIiksdmUucHVzaChTcigiQ29sdW1uIixudWxsLFp0KSl9KTtmb3IodmFyIFNlPUFycmF5LmlzQXJyYXkoeSksSGU9cmUucy5yO0hlPD1yZS5lLnI7KytIZSl7Zm9yKHZhciBCZT1bbU0oSGUsKHlbIiFyb3dzIl18fFtdKVtIZV0pXSxHZT1yZS5z''@;'; put 'put ''LmM7R2U8PXJlLmUuYzsrK0dlKXt2YXIgbnQ9ITE7Zm9yKF9lPTA7X2UhPXBlLmxlbmd0aDsrK19lKWlmKCEocGVbX2VdLnMuYz5HZXx8cGVbX2VdLnMucj5IZXx8cGVbX2VdLmUuYzxHZXx8cGVbX2VdLmUucjxIZSkpeyhwZVtfZV0ucy5jIT1HZXx8cGVbX2VdLnMuciE9SGUpJiYobnQ9ITAp''@;'; put 'put ''O2JyZWFrfWlmKCFudCl7dmFyIGR0PXtyOkhlLGM6R2V9LEN0PWRpKGR0KTtCZS5wdXNoKGdNKFNlPyh5W0hlXXx8W10pW0dlXTp5W0N0XSxDdCx5LFAsMCwwLGR0KSl9fUJlLnB1c2goIjwvUm93PiIpLEJlLmxlbmd0aD4yJiZ2ZS5wdXNoKEJlLmpvaW4oIiIpKX1yZXR1cm4gdmUuam9pbigi''@;'; put 'put ''Iil9KHBlLFApOiIiLF9lLmxlbmd0aD4wJiZRLnB1c2goIjxUYWJsZT4iK19lKyI8L1RhYmxlPiIpLFEucHVzaChmdW5jdGlvbiB4dCh5LFAsTCxRKXtpZigheSlyZXR1cm4iIjt2YXIgcmU9W107aWYoeVsiIW1hcmdpbnMiXSYmKHJlLnB1c2goIjxQYWdlU2V0dXA+IikseVsiIW1hcmdpbnMi''@;'; put 'put ''XS5oZWFkZXImJnJlLnB1c2goU3IoIkhlYWRlciIsbnVsbCx7Ing6TWFyZ2luIjp5WyIhbWFyZ2lucyJdLmhlYWRlcn0pKSx5WyIhbWFyZ2lucyJdLmZvb3RlciYmcmUucHVzaChTcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOnlbIiFtYXJnaW5zIl0uZm9vdGVyfSkpLHJlLnB1c2goU3Io''@;'; put 'put ''IlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOnlbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6eVsiIW1hcmdpbnMiXS5sZWZ0fHwiMC43IiwieDpSaWdodCI6eVsiIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjp5WyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUi''@;'; put 'put ''fSkpLHJlLnB1c2goIjwvUGFnZVNldHVwPiIpKSxRJiZRLldvcmtib29rJiZRLldvcmtib29rLlNoZWV0cyYmUS5Xb3JrYm9vay5TaGVldHNbTF0paWYoUS5Xb3JrYm9vay5TaGVldHNbTF0uSGlkZGVuKXJlLnB1c2goU3IoIlZpc2libGUiLDE9PVEuV29ya2Jvb2suU2hlZXRzW0xdLkhpZGRl''@;'; put 'put ''bj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIHBlPTA7cGU8TCYmKCFRLldvcmtib29rLlNoZWV0c1twZV18fFEuV29ya2Jvb2suU2hlZXRzW3BlXS5IaWRkZW4pOysrcGUpO3BlPT1MJiZyZS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChRfHx7''@;'; put 'put ''fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZyZS5wdXNoKCI8RGlzcGxheVJpZ2h0VG9MZWZ0Lz4iKSxobih5WyIhZ3JpZGxpbmVzIl0pJiZyZS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSx5WyIhZnJlZXplIl0pe3JlLnB1c2goIjxGcmVlemVQYW5l''@;'; put 'put ''cy8+IikscmUucHVzaCgiPEZyb3plbk5vU3BsaXQvPiIpO3ZhciBfZT1zcyh5WyIhZnJlZXplIl0pO19lLnI+MCYmKHJlLnB1c2goZnMoIlNwbGl0SG9yaXpvbnRhbCIsIiIrX2UucikpLHJlLnB1c2goZnMoIlRvcFJvd0JvdHRvbVBhbmUiLCIiK19lLnIpKSksX2UuYz4wJiYocmUucHVzaChm''@;'; put 'put ''cygiU3BsaXRWZXJ0aWNhbCIsIiIrX2UuYykpLHJlLnB1c2goZnMoIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK19lLmMpKSl9cmV0dXJuIHlbIiFwcm90ZWN0Il0mJihyZS5wdXNoKGZzKCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLHlbIiFwcm90ZWN0Il0ub2JqZWN0cyYmcmUucHVzaChm''@;'; put 'put ''cygiUHJvdGVjdE9iamVjdHMiLCJUcnVlIikpLHlbIiFwcm90ZWN0Il0uc2NlbmFyaW9zJiZyZS5wdXNoKGZzKCJQcm90ZWN0U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT15WyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHx5WyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzP251''@;'; put 'put ''bGwhPXlbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIXlbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmcmUucHVzaChmcygiRW5hYmxlU2VsZWN0aW9uIiwiVW5sb2NrZWRDZWxscyIpKTpyZS5wdXNoKGZzKCJFbmFibGVTZWxlY3Rpb24iLCJOb1NlbGVjdGlvbiIp''@;'; put 'put ''KSxbWyJmb3JtYXRDZWxscyIsIkFsbG93Rm9ybWF0Q2VsbHMiXSxbImZvcm1hdENvbHVtbnMiLCJBbGxvd1NpemVDb2xzIl0sWyJmb3JtYXRSb3dzIiwiQWxsb3dTaXplUm93cyJdLFsiaW5zZXJ0Q29sdW1ucyIsIkFsbG93SW5zZXJ0Q29scyJdLFsiaW5zZXJ0Um93cyIsIkFsbG93SW5zZXJ0''@;'; put 'put ''Um93cyJdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsIkFsbG93SW5zZXJ0SHlwZXJsaW5rcyJdLFsiZGVsZXRlQ29sdW1ucyIsIkFsbG93RGVsZXRlQ29scyJdLFsiZGVsZXRlUm93cyIsIkFsbG93RGVsZXRlUm93cyJdLFsic29ydCIsIkFsbG93U29ydCJdLFsiYXV0b0ZpbHRlciIsIkFsbG93Rmls''@;'; put 'put ''dGVyIl0sWyJwaXZvdFRhYmxlcyIsIkFsbG93VXNlUGl2b3RUYWJsZXMiXV0uZm9yRWFjaChmdW5jdGlvbih2ZSl7eVsiIXByb3RlY3QiXVt2ZVswXV0mJnJlLnB1c2goIjwiK3ZlWzFdKyIvPiIpfSkpLDA9PXJlLmxlbmd0aD8iIjpTcigiV29ya3NoZWV0T3B0aW9ucyIscmUuam9pbigiIiks''@;'; put 'put ''e3htbG5zOldpLnh9KX0ocGUsMCx5LEwpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIEpMKHksUCl7UHx8KFA9e30pLHkuU1NGfHwoeS5TU0Y9dy5nZXRfdGFibGUoKSkseS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksUC5yZXZzc2Y9QWUoeS5TU0YpLFAucmV2c3NmW3kuU1NGWzY1NTM1''@;'; put 'put ''XV09MCxQLnNzZj15LlNTRix5LlN0eWxlcz17Rm9udHM6UC5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpQLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5''@;'; put 'put ''cGU6ImdyYXkxMjUifV0sQm9yZGVyczpQLkJvcmRlcnM9W3t9XX0sUC5jZWxsWGZzPVtdLFAuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGd1KFAuY2VsbFhmcyxudWxsLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSk7dmFyIEw9W107TC5wdXNoKGZ1bmN0aW9uIGZNKHksUCl7dmFy''@;'; put 'put ''IEw9W107cmV0dXJuIHkuUHJvcHMmJkwucHVzaChmdW5jdGlvbiByYyh5LFApe3ZhciBMPVtdO3JldHVybiBsdChGMikubWFwKGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9MDtyZTxPbC5sZW5ndGg7KytyZSlpZihPbFtyZV1bMV09PVEpcmV0dXJuIE9sW3JlXTtmb3IocmU9MDtyZTxSMS5sZW5n''@;'; put 'put ''dGg7KytyZSlpZihSMVtyZV1bMV09PVEpcmV0dXJuIFIxW3JlXTt0aHJvdyBRfSkuZm9yRWFjaChmdW5jdGlvbihRKXtpZihudWxsIT15W1FbMV1dKXt2YXIgcmU9UCYmUC5Qcm9wcyYmbnVsbCE9UC5Qcm9wc1tRWzFdXT9QLlByb3BzW1FbMV1dOnlbUVsxXV07ImRhdGUiPT09UVsyXSYmKHJl''@;'; put 'put ''PW5ldyBEYXRlKHJlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIloiKSksIm51bWJlciI9PXR5cGVvZiByZT9yZT1TdHJpbmcocmUpOiEwPT09cmV8fCExPT09cmU/cmU9cmU/IjEiOiIwIjpyZSBpbnN0YW5jZW9mIERhdGUmJihyZT1uZXcgRGF0ZShyZSkudG9JU09TdHJpbmco''@;'; put 'put ''KS5yZXBsYWNlKC9cLlxkKlovLCIiKSksTC5wdXNoKGZzKEYyW1FbMV1dfHxRWzFdLHJlKSl9fSksU3IoIkRvY3VtZW50UHJvcGVydGllcyIsTC5qb2luKCIiKSx7eG1sbnM6V2kub30pfSh5LlByb3BzLFApKSx5LkN1c3Rwcm9wcyYmTC5wdXNoKGZ1bmN0aW9uIFR3KHksUCl7dmFyIEw9WyJX''@;'; put 'put ''b3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLFE9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIscmU9W107cmV0dXJuIHkmJmx0KHkpLmZvckVhY2goZnVuY3Rpb24ocGUpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LHBlKSl7Zm9yKHZhciBfZT0wO19lPE9sLmxl''@;'; put 'put ''bmd0aDsrK19lKWlmKHBlPT1PbFtfZV1bMV0pcmV0dXJuO2ZvcihfZT0wO19lPFIxLmxlbmd0aDsrK19lKWlmKHBlPT1SMVtfZV1bMV0pcmV0dXJuO2ZvcihfZT0wO19lPEwubGVuZ3RoOysrX2UpaWYocGU9PUxbX2VdKXJldHVybjt2YXIgdmU9eVtwZV0sU2U9InN0cmluZyI7Im51bWJlciI9''@;'; put 'put ''PXR5cGVvZiB2ZT8oU2U9ImZsb2F0Iix2ZT1TdHJpbmcodmUpKTohMD09PXZlfHwhMT09PXZlPyhTZT0iYm9vbGVhbiIsdmU9dmU/IjEiOiIwIik6dmU9U3RyaW5nKHZlKSxyZS5wdXNoKFNyKEppKHBlKSx2ZSx7ImR0OmR0IjpTZX0pKX19KSxQJiZsdChQKS5mb3JFYWNoKGZ1bmN0aW9uKHBl''@;'; put 'put ''KXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxwZSkmJigheXx8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LHBlKSkpe3ZhciBfZT1QW3BlXSx2ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIF9lPyh2ZT0iZmxvYXQiLF9lPVN0cmlu''@;'; put 'put ''ZyhfZSkpOiEwPT09X2V8fCExPT09X2U/KHZlPSJib29sZWFuIixfZT1fZT8iMSI6IjAiKTpfZSBpbnN0YW5jZW9mIERhdGU/KHZlPSJkYXRlVGltZS50eiIsX2U9X2UudG9JU09TdHJpbmcoKSk6X2U9U3RyaW5nKF9lKSxyZS5wdXNoKFNyKEppKHBlKSxfZSx7ImR0OmR0Ijp2ZX0pKX19KSwi''@;'; put 'put ''PCIrUSsnIHhtbG5zPSInK1dpLm8rJyI+JytyZS5qb2luKCIiKSsiPC8iK1ErIj4ifSh5LlByb3BzLHkuQ3VzdHByb3BzKSksTC5qb2luKCIiKX0oeSxQKSksTC5wdXNoKCIiKSxMLnB1c2goIiIpLEwucHVzaCgiIik7Zm9yKHZhciBRPTA7UTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrUSlMLnB1''@;'; put 'put ''c2goU3IoIldvcmtzaGVldCIsVmUoUSxQLHkpLHsic3M6TmFtZSI6SHIoeS5TaGVldE5hbWVzW1FdKX0pKTtyZXR1cm4gTFsyXT1mdW5jdGlvbiBLTCh5LFApe3ZhciBRPVtbJzxTdHlsZSBzczpJRD0iRGVmYXVsdCIgc3M6TmFtZT0iTm9ybWFsIj4nLCc8QWxpZ25tZW50IHNzOlZlcnRpY2Fs''@;'; put 'put ''PSJCb3R0b20iLz4nLCI8Qm9yZGVycy8+IiwnPEZvbnQgc3M6Rm9udE5hbWU9IkNhbGlicmkiIHg6RmFtaWx5PSJTd2lzcyIgc3M6U2l6ZT0iMTIiIHNzOkNvbG9yPSIjMDAwMDAwIi8+JywiPEludGVyaW9yLz4iLCI8TnVtYmVyRm9ybWF0Lz4iLCI8UHJvdGVjdGlvbi8+IiwiPC9TdHlsZT4i''@;'; put 'put ''XS5qb2luKCIiKV07cmV0dXJuIFAuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKHJlLHBlKXt2YXIgX2U9W107aWYocmUuYWxpZ25tZW50KXt2YXIgdmU9e307cmUuYWxpZ25tZW50LnNocmlua1RvRml0JiYodmVbInNzOlNocmlua1RvRml0Il09IjEiKSxyZS5hbGlnbm1lbnQud3JhcFRleHQm''@;'; put 'put ''Jih2ZVsic3M6V3JhcFRleHQiXT0iMSIpLHJlLmFsaWdubWVudC52ZXJ0aWNhbCYmKHZlWyJzczpWZXJ0aWNhbCJdPXd0KHJlLmFsaWdubWVudC52ZXJ0aWNhbCkpLHJlLmFsaWdubWVudC5ob3Jpem9udGFsJiYodmVbInNzOkhvcml6b250YWwiXT13dChyZS5hbGlnbm1lbnQuaG9yaXpvbnRh''@;'; put 'put ''bCkpLHJlLmFsaWdubWVudC5pbmRlbnQmJih2ZVsic3M6SW5kZW50Il09cmUuYWxpZ25tZW50LmluZGVudCkscmUuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKHZlWyJzczpSb3RhdGUiXT1yZS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uKSxfZS5wdXNoKFNyKCJBbGlnbm1lbnQiLG51bGwsdmUp''@;'; put 'put ''KX1lOmlmKG51bGwhPXJlLmZvbnRJZCl7dmFyIFNlPVAuRm9udHNbcmUuZm9udElkXTtpZighU2UpYnJlYWsgZTt2YXIgSGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxCZT0hMTtTZS5ib2xkJiYoQmU9ITAsSGVbInNzOkJvbGQiXT0iMSIpLFNlLml0YWxpYyYm''@;'; put 'put ''KEJlPSEwLEhlWyJzczpJdGFsaWMiXT0iMSIpLFNlLnN0cmlrZSYmKEJlPSEwLEhlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT1TZS51bmRlcmxpbmUmJihCZT0hMCxIZVsic3M6VW5kZXJsaW5lIl09dU1bU2UudW5kZXJsaW5lXXx8KFNlLnVuZGVybGluZT8iU2luZ2xlIjoiTm9u''@;'; put 'put ''ZSIpKSxudWxsIT1TZS5zeiYmKEJlPSEwLEhlWyJzczpTaXplIl09U2Uuc3opLG51bGwhPVNlLm5hbWUmJihCZT0hMCxIZVsic3M6Rm9udE5hbWUiXT1TZS5uYW1lKSxTZS5jb2xvciYmbnVsbCE9U2UuY29sb3IucmdiJiYoQmU9ITAsSGVbInNzOkNvbG9yIl09IiMiKygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIFNlLmNvbG9yLnJnYj8iMDAwMDAwIitTZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOlNlLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZihTZS52YWxpZ24pPi0xJiYoSGVbInNzOlZlcnRpY2FsQWxpZ24iXT13dChTZS52YWxpZ24pKyJzY3JpcHQiKSxC''@;'; put 'put ''ZSYmX2UucHVzaChTcigiRm9udCIsbnVsbCxIZSkpfWU6aWYocmUuZmlsbElkPjApe3ZhciBHZT1QLkZpbGxzW3JlLmZpbGxJZF07aWYoIUdlfHwhR2UuZmdDb2xvcnx8bnVsbD09R2UuZmdDb2xvci5yZ2IpYnJlYWsgZTtfZS5wdXNoKFNyKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4i''@;'; put 'put ''Ol9EW0dlLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBHZS5mZ0NvbG9yLnJnYj8iMDAiK0dlLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2KTpHZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfV9lLnB1c2goU3IoIk51bWJlckZvcm1hdCIs''@;'; put 'put ''bnVsbCx7InNzOkZvcm1hdCI6SHIody5fdGFibGVbcmUubnVtRm10SWRdKX0pKTt2YXIgbnQ9eyJzczpJRCI6InMiKygyMStwZSl9O3JlLnN0eWxlJiYobnRbInNzOk5hbWUiXT1yZS5zdHlsZSksUS5wdXNoKFNyKCJTdHlsZSIsX2Uuam9pbigiIiksbnQpKX0pLFNyKCJTdHlsZXMiLFEuam9p''@;'; put 'put ''bigiIikpfSgwLFApLExbM109ZnVuY3Rpb24gdjUoeSl7aWYoISgoeXx8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBQPXkuV29ya2Jvb2suTmFtZXMsTD1bXSxRPTA7UTxQLmxlbmd0aDsrK1Epe3ZhciByZT1QW1FdO251bGw9PXJlLlNoZWV0JiYocmUuTmFtZS5t''@;'; put 'put ''YXRjaCgvXl94bGZuXC4vKXx8TC5wdXNoKFZuKHJlKSkpfXJldHVybiBTcigiTmFtZXMiLEwuam9pbigiIikpfSh5KSxCbitTcigiV29ya2Jvb2siLEwuam9pbigiIikse3htbG5zOldpLnNzLCJ4bWxuczpvIjpXaS5vLCJ4bWxuczp4IjpXaS54LCJ4bWxuczpzcyI6V2kuc3MsInhtbG5zOmR0''@;'; put 'put ''IjpXaS5kdCwieG1sbnM6aHRtbCI6V2kuaHRtbH0pfWZ1bmN0aW9uIGtyKHksUCxMLFEpe3ZhciByZT1MLHBlPVtdLF9lPVAuc2xpY2UoUC5sLFAubCtyZSk7aWYoUSYmUS5lbmMmJlEuZW5jLmluc2l0dSYmX2UubGVuZ3RoPjApc3dpdGNoKHkubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3Mi''@;'; put 'put ''OmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJSREluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVPRiI6US5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6X2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpRLmVuYy5pbnNp''@;'; put 'put ''dHUodWUoe2xlbmd0aDo0fSksInNraXAiKSxfZT1CdWZmZXIuY29uY2F0KFtCdWZmZXIuZnJvbShfZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShRLmVuYy5pbnNpdHUoX2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6X2U9US5lbmMuaW5zaXR1KF9lKX1BcnJheS5pc0FycmF5KFApJiYh''@;'; put 'put ''QXJyYXkuaXNBcnJheShfZSkmJihfZT1BcnJheS5mcm9tKF9lKSkscGUucHVzaChfZSksUC5sKz1yZTtmb3IodmFyIHZlPVgwW1luKFAsUC5sKV0sU2U9MDtudWxsIT12ZSYmIkNvbnRpbnVlIj09PXZlLm4uc2xpY2UoMCw4KTspcmU9WW4oUCxQLmwrMiksU2U9UC5sKzQsUSYmUS5lbmMmJlEu''@;'; put 'put ''ZW5jLmluc2l0dSYmUS5lbmMuaW5zaXR1KHVlKHtsZW5ndGg6NH0pLCJza2lwIiksIkNvbnRpbnVlRnJ0Ij09dmUubj9TZSs9NDoiQ29udGludWVGcnQiPT12ZS5uLnNsaWNlKDAsMTEpJiYoU2UrPTEyLFEmJlEuZW5jJiZRLmVuYy5pbnNpdHUmJlEuZW5jLmluc2l0dSh1ZSh7bGVuZ3RoOjh9''@;'; put 'put ''KSwic2tpcCIpKSxfZT1QLnNsaWNlKFNlLFAubCs0K3JlKSxRJiZRLmVuYyYmUS5lbmMuaW5zaXR1JiZfZS5sZW5ndGg+MCYmKF9lPVEuZW5jLmluc2l0dShfZSkpLHBlLnB1c2goX2UpLFAubCs9NCtyZSx2ZT1YMFtZbihQLFAubCldO3ZhciBIZT1TKHBlKTtvbChIZSwwKTt2YXIgQmU9MDtI''@;'; put 'put ''ZS5sZW5zPVtdO2Zvcih2YXIgR2U9MDtHZTxwZS5sZW5ndGg7KytHZSlIZS5sZW5zLnB1c2goQmUpLEJlKz1wZVtHZV0ubGVuZ3RoO2lmKEhlLmxlbmd0aDxMKXRocm93IlhMUyBSZWNvcmQgIisoeSYmeS5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitIZS5sZW5ndGgrIiA8ICIrTDtyZXR1cm4g''@;'; put 'put ''eS5mKEhlLEhlLmxlbmd0aCxRKX1mdW5jdGlvbiB4Yyh5LFAsTCl7aWYoInoiIT09eS50JiZ5LlhGKXt2YXIgUT0wO3RyeXtRPXkuenx8eS5YRi5udW1GbXRJZHx8MCxQLmNlbGxORiYmKHkuej13Ll90YWJsZVtRXSl9Y2F0Y2gocGUpe2lmKFAuV1RGKXRocm93IHBlfWlmKCFQfHwhMSE9PVAu''@;'; put 'put ''Y2VsbFRleHQpdHJ5e3kudz0iZSI9PT15LnQ/eS53fHxRb1t5LnZdOjA9PT1RfHwiR2VuZXJhbCI9PVE/Im4iPT09eS50PygwfHkudik9PT15LnY/dy5fZ2VuZXJhbF9pbnQoeS52KTp3Ll9nZW5lcmFsX251bSh5LnYpOncuX2dlbmVyYWwoeS52KTp3LmZvcm1hdChRLHkudix7ZGF0ZTE5MDQ6''@;'; put 'put ''ISFMLGRhdGVORjpQJiZQLmRhdGVORn0pfWNhdGNoKHBlKXtpZihQLldURil0aHJvdyBwZX1pZihQLmNlbGxEYXRlcyYmUSYmIm4iPT15LnQmJncuaXNfZGF0ZSh3Ll90YWJsZVtRXXx8U3RyaW5nKFEpKSl7dmFyIHJlPXcucGFyc2VfZGF0ZV9jb2RlKHkudik7cmUmJih5LnQ9ImQiLHkudj1u''@;'; put 'put ''ZXcgRGF0ZShyZS55LHJlLm0tMSxyZS5kLHJlLkgscmUuTSxyZS5TLHJlLnUpKX19fWZ1bmN0aW9uIFgyKHksUCxMKXtyZXR1cm57djp5LGl4ZmU6UCx0Okx9fXZhciBfTT1mdW5jdGlvbih5LFAsTCl7UFsiIW9iamVjdHMiXT15fSxycD17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJi''@;'; put 'put ''MjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gXzUoeSxQKXt2YXIgTCxRLHJlLHBlO2lmKFB8fChQPXt9KSxQNihQKSxWKCksUC5jb2RlcGFnZSYmayhQLmNvZGVwYWdl''@;'; put 'put ''KSx5LkZ1bGxQYXRocyl7aWYoamUuZmluZCh5LCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtMPWplLmZpbmQoeSwiIUNvbXBPYmoiKSxRPWplLmZpbmQoeSwiL1dvcmtib29rIil8fGplLmZpbmQoeSwiL0Jvb2siKX1lbHNle3N3''@;'; put 'put ''aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0Ijp5PUQoc2UuZGVjb2RlKHkpKTticmVhaztjYXNlImJpbmFyeSI6eT1EKHkpO2JyZWFrO2Nhc2UiYnVmZmVyIjpicmVhaztjYXNlImFycmF5IjpBcnJheS5pc0FycmF5KHkpfHwoeT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh5KSl9b2woeSww''@;'; put 'put ''KSxRPXtjb250ZW50Onl9fWlmKEwmJmZ1bmN0aW9uIFRpKHkpe3ZhciBQPXt9LEw9eS5jb250ZW50O2lmKEwubD0yOCxQLkFuc2lVc2VyVHlwZT1MLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLFAuQW5zaUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBnNCh5KXtyZXR1cm4gcDQoeSwxKX0o''@;'; put 'put ''TCksTC5sZW5ndGgtTC5sPD00KXJldHVybiBQO3ZhciBRPUwucmVhZF9zaGlmdCg0KTtpZigwPT1RfHxRPjQwfHwoTC5sLT00LFAuUmVzZXJ2ZWQxPUwucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksTC5sZW5ndGgtTC5sPD00KXx8MTkwNzUwNTY1MiE9PShRPUwucmVhZF9zaGlmdCg0KSl8''@;'; put 'put ''fChQLlVuaWNvZGVDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gSjcoeSl7cmV0dXJuIHA0KHksMil9KEwpLDA9PShRPUwucmVhZF9zaGlmdCg0KSl8fFE+NDApKXJldHVybiBQO0wubC09NCxQLlJlc2VydmVkMj1MLnJlYWRfc2hpZnQoMCwibHB3c3RyIil9KEwpLFAuYm9va1Byb3BzJiYhUC5i''@;'; put 'put ''b29rU2hlZXRzKXJlPXt9O2Vsc2V7dmFyIF9lPWhlPyJidWZmZXIiOiJhcnJheSI7aWYoUSYmUS5jb250ZW50KXJlPWZ1bmN0aW9uIGJNKHksUCl7dmFyIEw9e29wdHM6e319LFE9e307bnVsbCE9dGUmJm51bGw9PVAuZGVuc2UmJihQLmRlbnNlPXRlKTt2YXIgR2UsZHQsY3QsYnQsVHQsWnQs''@;'; put 'put ''cmU9UC5kZW5zZT9bXTp7fSxwZT17fSxfZT17fSx2ZT1udWxsLFNlPVtdLEhlPSIiLEJlPXt9LG50PSIiLEZ0PXt9LEV0PVtdLHBuPVtdLEtuPVtdLHVuPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LHFuPXt9LHpuPXtGb250czpbXX0sa249ZnVuY3Rpb24o''@;'; put 'put ''SnIpe3JldHVybiBKcjw4P0NyW0pyXTpKcjw2NCYmS25bSnItOF18fENyW0pyXX0sZXI9ZnVuY3Rpb24oSnIsd3Mpe3ZhciBtbCx2cz1Kci5YRi5kYXRhO3ZzJiYodnMucGF0dGVyblR5cGV8fG51bGwhPXZzLmljdkZvcmUpJiZ3cyYmd3MuY2VsbFN0eWxlcyYmKEpyLnM9e30sSnIucy5wYXR0''@;'; put 'put ''ZXJuVHlwZT12cy5wYXR0ZXJuVHlwZSxKci5YRi5mb250JiZVdChKci5zLEpyLlhGLmZvbnQpLHZzLmZXcmFwJiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS53cmFwVGV4dD0hMCksdnMuZlNocmlua1RvRml0JiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1l''@;'; put 'put ''bnQ9e30pKS5zaHJpbmtUb0ZpdD0hMCksdnMuaGFsaWduJiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS5ob3Jpem9udGFsPXZzLmhhbGlnbiksdnMudmFsaWduJiYoKEpyLnMuYWxpZ25tZW50fHwoSnIucy5hbGlnbm1lbnQ9e30pKS52ZXJ0aWNhbD12cy52YWxpZ24p''@;'; put 'put ''LHZzLmNJbmRlbnQmJigoSnIucy5hbGlnbm1lbnR8fChKci5zLmFsaWdubWVudD17fSkpLmluZGVudD12cy5jSW5kZW50KSw2NCE9dnMuaWN2Rm9yZSYmNjUhPXZzLmljdkJhY2smJigobWw9ejEoa24odnMuaWN2Rm9yZSkpKSYmKEpyLnMuZmdDb2xvcj17cmdiOm1sfSksKG1sPXoxKGtuKHZz''@;'; put 'put ''LmljdkJhY2spKSkmJihKci5zLmJnQ29sb3I9e3JnYjptbH0pKSxbIkxlZnQiLCJSaWdodCIsIlRvcCIsIkJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24oamwpe3ZzWyJkZyIramxdJiYoSnIuc1tqbC50b0xvd2VyQ2FzZSgpXT17c3R5bGU6VzJbdnNbImRnIitqbF1dLGNvbG9yOntyZ2I6ejEo''@;'; put 'put ''a24odnNbImljdiIramxdKSl9fSl9KSl9LHRyPWZ1bmN0aW9uKEpyLHdzLHZzKXtpZighKENpPjF8fHZzLnNoZWV0Um93cyYmSnIucj49dnMuc2hlZXRSb3dzKSl7aWYodnMuY2VsbFN0eWxlcyYmd3MuWEYmJndzLlhGLmRhdGEmJmVyKHdzLHZzKSxkZWxldGUgd3MuaXhmZSxkZWxldGUgd3Mu''@;'; put 'put ''WEYsR2U9SnIsbnQ9ZGkoSnIpLCghX2V8fCFfZS5zfHwhX2UuZSkmJihfZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19KSxKci5yPF9lLnMuciYmKF9lLnMucj1Kci5yKSxKci5jPF9lLnMuYyYmKF9lLnMuYz1Kci5jKSxKci5yKzE+X2UuZS5yJiYoX2UuZS5yPUpyLnIrMSksSnIuYysxPl9l''@;'; put 'put ''LmUuYyYmKF9lLmUuYz1Kci5jKzEpLHZzLmNlbGxGb3JtdWxhJiZ3cy5mKWZvcih2YXIgbWw9MDttbDxFdC5sZW5ndGg7KyttbClpZighKEV0W21sXVswXS5zLmM+SnIuY3x8RXRbbWxdWzBdLnMucj5Kci5yfHxFdFttbF1bMF0uZS5jPEpyLmN8fEV0W21sXVswXS5lLnI8SnIucikpe3dzLkY9''@;'; put 'put ''T28oRXRbbWxdWzBdKSwoRXRbbWxdWzBdLnMuYyE9SnIuY3x8RXRbbWxdWzBdLnMuciE9SnIucikmJmRlbGV0ZSB3cy5mLHdzLmYmJih3cy5mPSIiK3hsKEV0W21sXVsxXSxfZSxKcixTbixabikpO2JyZWFrfXZzLmRlbnNlPyhyZVtKci5yXXx8KHJlW0pyLnJdPVtdKSxyZVtKci5yXVtKci5j''@;'; put 'put ''XT13cyk6cmVbbnRdPXdzfX0sWm49e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOkZ0LGFycmF5ZjpFdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFQJiYhIVAuY2VsbFN0eWxlcyxXVEY6ISFQJiYhIVAu''@;'; put 'put ''d3RmfTtabi5wYXNzd29yZD1QLnBhc3N3b3JkP1AucGFzc3dvcmQ6IlZlbHZldFN3ZWF0c2hvcCI7dmFyIG9pLFZyPW51bGwsa2k9W10sTGk9W10sUXI9W10sdXI9W10scnI9ITEsU249W107U24uU2hlZXROYW1lcz1abi5zbmFtZXMsU24uc2hhcmVkZj1abi5zaGFyZWRmLFNuLmFycmF5Zj1a''@;'; put 'put ''bi5hcnJheWYsU24ubmFtZXM9W10sU24uWFRJPVtdO3ZhciBEaSxwcj0iIixDaT0wLGpyPTAsamk9W10sX289W107Wm4uY29kZXBhZ2U9MTIwMCxqKDEyMDApO2Zvcih2YXIgWW89ITE7eS5sPHkubGVuZ3RoLTE7KXt2YXIgbG89eS5sLEFvPXkucmVhZF9zaGlmdCgyKTtpZihabiYmWm4uZW5j''@;'; put 'put ''JiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDBdKSwiaGVhZGVyLTAiKSwwPT09QW8mJiJFT0YiPT09cHIpYnJlYWs7dmFyIHhvPXkubD09PXkubGVuZ3RoPzA6eS5yZWFkX3NoaWZ0KDIpO1puJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNpdHUodWUoWzAs''@;'; put 'put ''MF0pLCJsZW5ndGgtMCIpO3ZhciBoaT1YMFtBb107aWYoaGkmJmhpLmYpe2lmKFAuYm9va1NoZWV0cyYmIkJvdW5kU2hlZXQ4Ij09PXByJiYiQm91bmRTaGVldDgiIT09aGkubilicmVhaztpZihwcj1oaS5uLDI9PT1oaS5yfHwxMj09aGkucil7dmFyIHRhPXkucmVhZF9zaGlmdCgyKTtpZih4''@;'; put 'put ''by09MixabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDBdKSksIVpuLmVuYyYmdGEhPT1BbyYmKCgyNTUmdGEpPDw4fHRhPj44KSE9PUFvKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrdGErIiE9IitBbyk7MTI9PWhpLnImJih5LmwrPTEwLHhv''@;'; put 'put ''LT0xMCxabiYmWm4uZW5jJiZabi5lbmMuaW5zaXR1JiZabi5lbmMuaW5zaXR1KHVlKFswLDAsMCwwLDAsMCwwLDAsMCwwXSkpKX12YXIgTW49a3IoaGkseSx4byxabiksTXM9aGkubjtpZigwPT1DaSYmIkJPRiIhPU1zKWNvbnRpbnVlO3N3aXRjaChNcyl7Y2FzZSJEYXRlMTkwNCI6TC5vcHRz''@;'; put 'put ''LkRhdGUxOTA0PXVuLldCUHJvcHMuZGF0ZTE5MDQ9TW47YnJlYWs7Y2FzZSJXcml0ZVByb3RlY3QiOkwub3B0cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYoWm4uZW5jfHwoeS5sPTAsQ2k9MCksWm4uZW5jPU1uLCFQLnBhc3N3b3JkJiZudWxsPT1Nbi52YWxpZCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVsbD09TW4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFNbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIp''@;'; put 'put ''O2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOlpuLmxhc3R1c2VyPU1uO2JyZWFrO2Nhc2UiRmlsZVNoYXJpbmciOmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tF''@;'; put 'put ''eHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNhc2UiUHJvdDRSZXYiOmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgeXM9TnVtYmVyKE1uKTtzd2l0Y2goeXMpe2Nhc2UgMjEwMTA6eXM9MTIwMDticmVhaztjYXNlIDMy''@;'; put 'put ''NzY4OnlzPTFlNDticmVhaztjYXNlIDMyNzY5OnlzPTEyNTJ9aihabi5jb2RlcGFnZT15cyksWW89ITA7YnJlYWs7Y2FzZSJSUlRhYklkIjpabi5ycnRhYmlkPU1uO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6Wm4ud2lubG9ja2VkPU1uO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxj''@;'; put 'put ''Q291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2RlIjpjYXNlIkNhbGNQcmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOkwub3B0c1tNc109TW47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6Wm4uQ2FsY1JlZk1vZGU9TW47YnJlYWs7Y2FzZSJGb3Jj''@;'; put 'put ''ZUZ1bGxDYWxjdWxhdGlvbiI6TC5vcHRzLkZ1bGxDYWxjPU1uO2JyZWFrO2Nhc2UiV3NCb29sIjpNbi5mRGlhbG9nJiYocmVbIiF0eXBlIl09ImRpYWxvZyIpLE1uLmZCZWxvd3x8KChyZVsiIW91dGxpbmUiXXx8KHJlWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLE1uLmZSaWdodHx8KChy''@;'; put 'put ''ZVsiIW91dGxpbmUiXXx8KHJlWyIhb3V0bGluZSJdPXt9KSkubGVmdD0hMCk7YnJlYWs7Y2FzZSJYRiI6TW4uZm9udD16bi5Gb250c1tNbi5pZm50PDQ/TW4uaWZudDpNbi5pZm50LTFdLHBuLnB1c2goTW4pO2JyZWFrO2Nhc2UiU3VwQm9vayI6U24ucHVzaChbTW5dKSxTbltTbi5sZW5ndGgt''@;'; put 'put ''MV0uWFRJPVtdO2JyZWFrO2Nhc2UiRXh0ZXJuTmFtZSI6U25bU24ubGVuZ3RoLTFdLnB1c2goTW4pO2JyZWFrO2Nhc2UiTGJsIjpEaT17TmFtZTpNbi5OYW1lLFJlZjp4bChNbi5yZ2NlLF9lLG51bGwsU24sWm4pfSxNbi5pdGFiPjAmJihEaS5TaGVldD1Nbi5pdGFiLTEpLFNuLm5hbWVzLnB1''@;'; put 'put ''c2goRGkpLFNuWzBdfHwoU25bMF09W10sU25bMF0uWFRJPVtdKSxTbltTbi5sZW5ndGgtMV0ucHVzaChNbiksIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PU1uLk5hbWUmJk1uLml0YWI+MCYmTW4ucmdjZSYmTW4ucmdjZVswXSYmTW4ucmdjZVswXVswXSYmIlB0Z0FyZWEzZCI9PU1uLnJnY2Vb''@;'; put 'put ''MF1bMF1bMF0mJihfb1tNbi5pdGFiLTFdPXtyZWY6T28oTW4ucmdjZVswXVswXVsxXVsyXSl9KTticmVhaztjYXNlIkV4dGVybkNvdW50Ijpabi5FeHRlcm5Db3VudD1NbjticmVhaztjYXNlIkV4dGVyblNoZWV0IjowPT1Tbi5sZW5ndGgmJihTblswXT1bXSxTblswXS5YVEk9W10pLFNuW1Nu''@;'; put 'put ''Lmxlbmd0aC0xXS5YVEk9U25bU24ubGVuZ3RoLTFdLlhUSS5jb25jYXQoTW4pLFNuLlhUST1Tbi5YVEkuY29uY2F0KE1uKTticmVhaztjYXNlIk5hbWVDbXQiOmlmKFpuLmJpZmY8OClicmVhaztudWxsIT1EaSYmKERpLkNvbW1lbnQ9TW5bMV0pO2JyZWFrO2Nhc2UiUHJvdGVjdCI6cmVbIiFw''@;'; put 'put ''cm90ZWN0Il09TW47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PU1uJiZabi5XVEYmJmNvbnNvbGUuZXJyb3IoIlBhc3N3b3JkIHZlcmlmaWVyOiAiK01uKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpwZVtNbi5wb3NdPU1uLFpuLnNuYW1lcy5wdXNoKE1uLm5hbWUpO2JyZWFrO2Nhc2UiRU9G''@;'; put 'put ''IjppZihyZVsiIWdyaWRsaW5lcyJdPSFWcnx8VnIuZ3JpZCxWcj1udWxsLC0tQ2kpYnJlYWs7aWYoX2UuZSl7aWYoX2UuZS5yPjAmJl9lLmUuYz4wKXtpZihfZS5lLnItLSxfZS5lLmMtLSxyZVsiIXJlZiJdPU9vKF9lKSxQLnNoZWV0Um93cyYmUC5zaGVldFJvd3M8PV9lLmUucil7dmFyIEVs''@;'; put 'put ''PV9lLmUucjtfZS5lLnI9UC5zaGVldFJvd3MtMSxyZVsiIWZ1bGxyZWYiXT1yZVsiIXJlZiJdLHJlWyIhcmVmIl09T28oX2UpLF9lLmUucj1FbH1fZS5lLnIrKyxfZS5lLmMrK31raS5sZW5ndGg+MCYmKHJlWyIhbWVyZ2VzIl09a2kpLExpLmxlbmd0aD4wJiZfTShMaSxyZSx6biksUXIubGVu''@;'; put 'put ''Z3RoPjAmJihyZVsiIWNvbHMiXT1RciksdXIubGVuZ3RoPjAmJihyZVsiIXJvd3MiXT11ciksdW4uU2hlZXRzLnB1c2gocW4pfSIiPT09SGU/QmU9cmU6UVtIZV09cmUscmU9UC5kZW5zZT9bXTp7fTticmVhaztjYXNlIkJPRiI6aWYoOD09PVpuLmJpZmYmJihabi5iaWZmPXs5OjIsNTIxOjMs''@;'; put 'put ''MTAzMzo0fVtBb118fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtNbi5CSUZGVmVyXXx8OCksWm4uYmlmZmd1ZXNzPTA9PU1uLkJJRkZWZXIsMD09TW4uQklGRlZlciYmNDA5Nj09TW4uZHQmJihabi5iaWZmPTUsWW89ITAsaihabi5jb2RlcGFnZT0yODU5MSkp''@;'; put 'put ''LDg9PVpuLmJpZmYmJjA9PU1uLkJJRkZWZXImJjE2PT1Nbi5kdCYmKFpuLmJpZmY9MiksQ2krKylicmVhaztpZihyZT1QLmRlbnNlP1tdOnt9LFpuLmJpZmY8OCYmIVlvJiYoWW89ITAsaihabi5jb2RlcGFnZT1QLmNvZGVwYWdlfHwxMjUyKSksWm4uYmlmZjw1fHwwPT1Nbi5CSUZGVmVyJiY0''@;'; put 'put ''MDk2PT1Nbi5kdCl7IiI9PT1IZSYmKEhlPSJTaGVldDEiKSxfZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBzbD17cG9zOnkubC14byxuYW1lOkhlfTtwZVtzbC5wb3NdPXNsLFpuLnNuYW1lcy5wdXNoKEhlKX1lbHNlIEhlPShwZVtsb118fHtuYW1lOiIifSkubmFtZTszMj09TW4u''@;'; put 'put ''ZHQmJihyZVsiIXR5cGUiXT0iY2hhcnQiKSw2ND09TW4uZHQmJihyZVsiIXR5cGUiXT0ibWFjcm8iKSxraT1bXSxMaT1bXSxabi5hcnJheWY9RXQ9W10sUXI9W10sdXI9W10scnI9ITEscW49e0hpZGRlbjoocGVbbG9dfHx7aHM6MH0pLmhzLG5hbWU6SGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpj''@;'; put 'put ''YXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1yZVsiIXR5cGUiXSYmKFAuZGVuc2U/KHJlW01uLnJdfHxbXSlbTW4uY106cmVbZGkoe2M6TW4uYyxyOk1uLnJ9KV0pJiYrK01uLmMsVHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXXx8e30sdjpNbi52YWwsdDoibiJ9''@;'; put 'put ''LGpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFrO2Nhc2UiQm9vbEVyciI6VHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXSx2Ok1uLnZhbCx0Ok1uLnR9LGpyPjAmJihUdC56PWpp''@;'; put 'put ''W1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoe2M6TW4uYyxyOk1uLnJ9LFR0LFApO2JyZWFrO2Nhc2UiUksiOlR0PXtpeGZlOk1uLml4ZmUsWEY6cG5bTW4uaXhmZV0sdjpNbi5ya251bSx0OiJuIn0sanI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhj''@;'; put 'put ''KFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCk7YnJlYWs7Y2FzZSJNdWxSayI6Zm9yKHZhciBnbD1Nbi5jO2dsPD1Nbi5DOysrZ2wpe3ZhciBudT1Nbi5ya3JlY1tnbC1Nbi5jXVswXTtUdD17aXhmZTpudSxYRjpwbltudV0sdjpNbi5ya3JlY1tnbC1Nbi5j''@;'; put 'put ''XVsxXSx0OiJuIn0sanI+MCYmKFR0Lno9amlbVHQuaXhmZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpnbCxyOk1uLnJ9LFR0LFApfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PU1uLnZhbCl7dmU9TW47YnJlYWt9aWYoKFR0PVgyKE1uLnZhbCxNbi5j''@;'; put 'put ''ZWxsLml4ZmUsTW4udHQpKS5YRj1wbltUdC5peGZlXSxQLmNlbGxGb3JtdWxhKXt2YXIgdGw9TW4uZm9ybXVsYTtpZih0bCYmdGxbMF0mJnRsWzBdWzBdJiYiUHRnRXhwIj09dGxbMF1bMF1bMF0pe3ZhciBLdD10bFswXVswXVsxXVswXSxnbj10bFswXVswXVsxXVsxXSxMbj1kaSh7cjpLdCxj''@;'; put 'put ''OmdufSk7RnRbTG5dP1R0LmY9IiIreGwoTW4uZm9ybXVsYSxfZSxNbi5jZWxsLFNuLFpuKTpUdC5GPSgoUC5kZW5zZT8ocmVbS3RdfHxbXSlbZ25dOnJlW0xuXSl8fHt9KS5GfWVsc2UgVHQuZj0iIit4bChNbi5mb3JtdWxhLF9lLE1uLmNlbGwsU24sWm4pfWpyPjAmJihUdC56PWppW1R0Lml4''@;'; put 'put ''ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRlMTkwNCksdHIoTW4uY2VsbCxUdCxQKSx2ZT1NbjticmVhaztjYXNlIlN0cmluZyI6aWYoIXZlKXRocm93IG5ldyBFcnJvcigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTt2ZS52YWw9TW4sKFR0PVgyKE1uLHZlLmNlbGwuaXhm''@;'; put 'put ''ZSwicyIpKS5YRj1wbltUdC5peGZlXSxQLmNlbGxGb3JtdWxhJiYoVHQuZj0iIit4bCh2ZS5mb3JtdWxhLF9lLHZlLmNlbGwsU24sWm4pKSxqcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHZlLmNlbGwsVHQsUCksdmU9bnVsbDticmVh''@;'; put 'put ''aztjYXNlIkFycmF5IjpFdC5wdXNoKE1uKTt2YXIgV3I9ZGkoTW5bMF0ucyk7aWYoZHQ9UC5kZW5zZT8ocmVbTW5bMF0ucy5yXXx8W10pW01uWzBdLnMuY106cmVbV3JdLFAuY2VsbEZvcm11bGEmJmR0KXtpZighdmV8fCFXcnx8IWR0KWJyZWFrO2R0LmY9IiIreGwoTW5bMV0sX2UsTW5bMF0s''@;'; put 'put ''U24sWm4pLGR0LkY9T28oTW5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIVAuY2VsbEZvcm11bGEpYnJlYWs7aWYobnQpe2lmKCF2ZSlicmVhaztGdFtkaSh2ZS5jZWxsKV09TW5bMF0sKChkdD1QLmRlbnNlPyhyZVt2ZS5jZWxsLnJdfHxbXSlbdmUuY2VsbC5jXTpyZVtkaSh2ZS5jZWxs''@;'; put 'put ''KV0pfHx7fSkuZj0iIit4bChNblswXSxfZSxHZSxTbixabil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6VHQ9WDIoU2VbTW4uaXNzdF0udCxNbi5peGZlLCJzIiksU2VbTW4uaXNzdF0uaCYmKFR0Lmg9U2VbTW4uaXNzdF0uaCksVHQuWEY9cG5bVHQuaXhmZV0sanI+MCYmKFR0Lno9amlbVHQuaXhm''@;'; put 'put ''ZT4+OCY2M10pLHhjKFR0LFAsTC5vcHRzLkRhdGUxOTA0KSx0cih7YzpNbi5jLHI6TW4ucn0sVHQsUCksU2VbTW4uaXNzdF0uUiYmKFR0LlI9U2VbTW4uaXNzdF0uUi5tYXAoZnVuY3Rpb24oemkpe3ZhciBKcj1vbih6aSk7cmV0dXJuIHppLnM9PXpuLkZvbnRzWzBdJiYoSnIucz1UdC5zKSxK''@;'; put 'put ''cn0pKTticmVhaztjYXNlIkJsYW5rIjpQLnNoZWV0U3R1YnMmJihUdD17aXhmZTpNbi5peGZlLFhGOnBuW01uLml4ZmVdLHQ6InoifSxqcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMuRGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJNdWxCbGFuayI6aWYoUC5zaGVldFN0dWJzKWZvcih2YXIgWG49TW4uYztYbjw9TW4uQzsrK1huKXt2YXIgZWk9TW4uaXhmZVtYbi1Nbi5jXTtUdD17aXhmZTplaSxYRjpwbltlaV0sdDoieiJ9LGpyPjAmJihUdC56PWppW1R0Lml4ZmU+PjgmNjNdKSx4YyhUdCxQLEwub3B0cy5EYXRl''@;'; put 'put ''MTkwNCksdHIoe2M6WG4scjpNbi5yfSxUdCxQKX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJTVFIiOihUdD1YMihNbi52YWwsTW4uaXhmZSwicyIpKS5YRj1wbltUdC5peGZlXSxqcj4wJiYoVHQuej1qaVtUdC5peGZlPj44JjYzXSkseGMoVHQsUCxMLm9wdHMu''@;'; put 'put ''RGF0ZTE5MDQpLHRyKHtjOk1uLmMscjpNbi5yfSxUdCxQKTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT1DaSYmKF9lPU1uKTticmVhaztjYXNlIlNTVCI6KFNlPU1uKS5mb3JFYWNoKGZ1bmN0aW9uKHppKXt6aS5fUj8oemkuX1JbMF0mJnppLl9SWzBdLmlkeD4wJiZ6aS5fUi51bnNoaWZ0''@;'; put 'put ''KHtpZHg6MCxpZm50OjB9KSx6aS5SPXppLl9SLm1hcChmdW5jdGlvbihKcix3cyl7cmV0dXJue3Q6InMiLHY6emkudC5zbGljZShKci5pZHgsKHppLl9SW3dzKzFdfHx7fSkuaWR4KSxzOnpuLkZvbnRzW0pyLmlmbnQ8ND9Kci5pZm50OkpyLmlmbnQtMV19fSksUC5jZWxsSFRNTCYmKHppLmg9''@;'; put 'put ''azkoemkuUikpKTpQLmNlbGxIVE1MJiYoemkuaD1ybyh6aS50KSksZGVsZXRlIHppLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQiOmlmKDQ9PVpuLmJpZmYpe2ppW2pyKytdPU1uWzFdO2Zvcih2YXIgaXI9MDtpcjxqcisxNjMmJncuX3RhYmxlW2lyXSE9TW5bMV07Kytpcik7aXI+PTE2MyYmdy5s''@;'; put 'put ''b2FkKE1uWzFdLGpyKzE2Myl9ZWxzZSB3LmxvYWQoTW5bMV0sTW5bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOmppW2pyKytdPU1uO2Zvcih2YXIgcmk9MDtyaTxqcisxNjMmJncuX3RhYmxlW3JpXSE9TW47KytyaSk7cmk+PTE2MyYmdy5sb2FkKE1uLGpyKzE2Myk7YnJlYWs7Y2FzZSJN''@;'; put 'put ''ZXJnZUNlbGxzIjpraT1raS5jb25jYXQoTW4pO2JyZWFrO2Nhc2UiT2JqIjpMaVtNbi5jbW9bMF1dPVpuLmxhc3RvYmo9TW47YnJlYWs7Y2FzZSJUeE8iOlpuLmxhc3RvYmouVHhPPU1uO2JyZWFrO2Nhc2UiSW1EYXRhIjpabi5sYXN0b2JqLkltRGF0YT1NbjticmVhaztjYXNlIkhMaW5rIjpm''@;'; put 'put ''b3IoYnQ9TW5bMF0ucy5yO2J0PD1NblswXS5lLnI7KytidClmb3IoY3Q9TW5bMF0ucy5jO2N0PD1NblswXS5lLmM7KytjdCkoZHQ9UC5kZW5zZT8ocmVbYnRdfHxbXSlbY3RdOnJlW2RpKHtjOmN0LHI6YnR9KV0pJiYoZHQubD1NblsxXSk7YnJlYWs7Y2FzZSJITGlua1Rvb2x0aXAiOmZvcihi''@;'; put 'put ''dD1NblswXS5zLnI7YnQ8PU1uWzBdLmUucjsrK2J0KWZvcihjdD1NblswXS5zLmM7Y3Q8PU1uWzBdLmUuYzsrK2N0KShkdD1QLmRlbnNlPyhyZVtidF18fFtdKVtjdF06cmVbZGkoe2M6Y3QscjpidH0pXSkmJmR0LmwmJihkdC5sLlRvb2x0aXA9TW5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYo''@;'; put 'put ''Wm4uYmlmZjw9NSYmWm4uYmlmZj49MilicmVhaztkdD1QLmRlbnNlPyhyZVtNblswXS5yXXx8W10pW01uWzBdLmNdOnJlW2RpKE1uWzBdKV07dmFyIG1vPUxpW01uWzJdXTtkdHx8KFAuZGVuc2U/KHJlW01uWzBdLnJdfHwocmVbTW5bMF0ucl09W10pLGR0PXJlW01uWzBdLnJdW01uWzBdLmNd''@;'; put 'put ''PXt0OiJ6In0pOmR0PXJlW2RpKE1uWzBdKV09e3Q6InoifSxfZS5lLnI9TWF0aC5tYXgoX2UuZS5yLE1uWzBdLnIpLF9lLnMucj1NYXRoLm1pbihfZS5zLnIsTW5bMF0uciksX2UuZS5jPU1hdGgubWF4KF9lLmUuYyxNblswXS5jKSxfZS5zLmM9TWF0aC5taW4oX2Uucy5jLE1uWzBdLmMpKSxk''@;'; put 'put ''dC5jfHwoZHQuYz1bXSksZHQuYy5wdXNoKHthOk1uWzFdLHQ6bW8uVHhPLnR9KTticmVhaztkZWZhdWx0OnN3aXRjaChoaS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6''@;'; put 'put ''Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2UiU3h2ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2Fz''@;'; put 'put ''ZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRyMTEiOmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdl''@;'; put 'put ''bEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlvUHJvdGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVF''@;'; put 'put ''bGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRkbCI6Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJT''@;'; put 'put ''eEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpjYXNlIlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRF''@;'; put 'put ''eHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6Y2FzZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNl''@;'; put 'put ''IkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2FzZSJTZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJl''@;'; put 'put ''Y29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNlbDlGaWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50Ijpj''@;'; put 'put ''YXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNlckJWaWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0''@;'; put 'put ''IjpVRChwbltNbi5peGZlXSxNbi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIVpuLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtNbi5lPj1Nbi5zOylRcltNbi5lLS1dPXt3aWR0aDpNbi53LzI1NixsZXZlbDpNbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZNbi5mbGFncyl9LHJyfHwocnI9ITAp''@;'; put 'put ''LHB1KFFyW01uLmUrMV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgaWk9e307bnVsbCE9TW4ubGV2ZWwmJih1cltNbi5yXT1paSxpaS5sZXZlbD1Nbi5sZXZlbCksTW4uaGlkZGVuJiYodXJbTW4ucl09aWksaWkuaGlkZGVuPSEwKSxNbi5ocHQmJih1cltNbi5yXT1paSxpaS5ocHQ9TW4uaHB0LGlp''@;'; put 'put ''LmhweD1VMShNbi5ocHQpKSxNbi5peGZlJiYodXJbTW4ucl09aWksZXIoVHQ9e2l4ZmU6TW4uaXhmZSxYRjpwbltNbi5peGZlXXx8e30sdjowLHQ6Im4ifSxQKSxpaS5zPVR0LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2Ui''@;'; put 'put ''Qm90dG9tTWFyZ2luIjpyZVsiIW1hcmdpbnMiXXx8ZGYocmVbIiFtYXJnaW5zIl09e30pLHJlWyIhbWFyZ2lucyJdW01zLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPU1uO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpyZVsiIXNlbCJdPU1uO2JyZWFrO2Nhc2UiU2V0dXAiOnJlWyIhbWFyZ2lu''@;'; put 'put ''cyJdfHxkZihyZVsiIW1hcmdpbnMiXT17fSkscmVbIiFtYXJnaW5zIl0uaGVhZGVyPU1uLmhlYWRlcixyZVsiIW1hcmdpbnMiXS5mb290ZXI9TW4uZm9vdGVyO2JyZWFrO2Nhc2UiV2luZG93MiI6TW4uUlRMJiYodW4uVmlld3NbMF0uUlRMPSEwKSxWcj1NbjticmVhaztjYXNlIkNvdW50cnki''@;'; put 'put ''Olp0PU1uO2JyZWFrO2Nhc2UiRm9udCI6TW4uaWN2JiZrbihNbi5pY3YpJiYoTW4uY29sb3I9e3JnYjp6MShrbihNbi5pY3YpKX0pLGRlbGV0ZSBNbi5pY3YsMD09em4uRm9udHMubGVuZ3RoJiZaMShNbiksem4uRm9udHMucHVzaChNbik7YnJlYWs7Y2FzZSJQYWxldHRlIjpLbj1NbjticmVh''@;'; put 'put ''aztjYXNlIlRoZW1lIjpvaT1NbjticmVhaztjYXNlIkNvZGVOYW1lIjpIZT9xbi5Db2RlTmFtZT1Nbnx8cW4ubmFtZTp1bi5XQlByb3BzLkNvZGVOYW1lPU1ufHwiVGhpc1dvcmtib29rIjticmVhaztjYXNlIlBhbmUiOihWcnx8e30pLmZyb3plbiYmKHJlWyIhZnJlZXplIl09ZGkoe3I6TW4u''@;'; put 'put ''eXx8MCxjOk1uLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goaGkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNhc2UiRW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRp''@;'; put 'put ''Y2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsiOmNhc2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFy''@;'; put 'put ''dCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZydEluZm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJE''@;'; put 'put ''YXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6Y2FzZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpj''@;'; put 'put ''YXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9ybWF0IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJ''@;'; put 'put ''bmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYiOmNhc2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0''@;'; put 'put ''cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNlIkNydENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0''@;'; put 'put ''b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMiOmNhc2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1z''@;'; put 'put ''b0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpjYXNlIkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJD''@;'; put 'put ''b21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNhc2UiRnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goaGkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFk''@;'; put 'put ''YXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpjYXNlIkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhG''@;'; put 'put ''IjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRPVzIiOmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BD''@;'; put 'put ''dXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUiOmNhc2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhk''@;'; put 'put ''ciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDppZihQLldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIraGkubn19fX19ZWxzZSB5LmwrPXhvLFpuJiZabi5lbmMmJlpuLmVuYy5pbnNpdHUmJlpuLmVuYy5pbnNp''@;'; put 'put ''dHUodWUoe2xlbmd0aDp4b30pKX1yZXR1cm4gTC5TaGVldE5hbWVzPWx0KHBlKS5zb3J0KGZ1bmN0aW9uKHppLEpyKXtyZXR1cm4gTnVtYmVyKHppKS1OdW1iZXIoSnIpfSkubWFwKGZ1bmN0aW9uKHppKXtyZXR1cm4gcGVbemldLm5hbWV9KSxQLmJvb2tTaGVldHN8fChMLlNoZWV0cz1RKSwh''@;'; put 'put ''TC5TaGVldE5hbWVzLmxlbmd0aCYmQmVbIiFyZWYiXT8oTC5TaGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLEwuU2hlZXRzJiYoTC5TaGVldHMuU2hlZXQxPUJlKSk6TC5QcmVhbWJsZT1CZSxMLlNoZWV0cyYmX28uZm9yRWFjaChmdW5jdGlvbih6aSxKcil7TC5TaGVldHNbTC5TaGVldE5hbWVz''@;'; put 'put ''W0pyXV1bIiFhdXRvZmlsdGVyIl09eml9KSxMLlN0cmluZ3M9U2UsTC5TU0Y9dy5nZXRfdGFibGUoKSxabi5lbmMmJihMLkVuY3J5cHRpb249Wm4uZW5jKSxvaSYmKEwuVGhlbWVzPW9pKSxMLk1ldGFkYXRhPXt9LHZvaWQgMCE9PVp0JiYoTC5NZXRhZGF0YS5Db3VudHJ5PVp0KSxTbi5uYW1l''@;'; put 'put ''cy5sZW5ndGg+MCYmKHVuLk5hbWVzPVNuLm5hbWVzKSxMLldvcmtib29rPXVuLEx9KFEuY29udGVudCxQKTtlbHNlIGlmKChwZT1qZS5maW5kKHksIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmcGUuY29udGVudClyZT1UbS50b193b3JrYm9vayhwZS5jb250ZW50LChQLnR5cGU9X2UsUCkpO2Vs''@;'; put 'put ''c2V7aWYoIShwZT1qZS5maW5kKHksIk5hdGl2ZUNvbnRlbnRfTUFJTiIpKXx8IXBlLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtyZT1UbS50b193b3JrYm9vayhwZS5jb250ZW50LChQLnR5cGU9X2UsUCkpfVAuYm9va1ZCQSYmeS5GdWxs''@;'; put 'put ''UGF0aHMmJmplLmZpbmQoeSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYocmUudmJhcmF3PWZ1bmN0aW9uIFg0KHkpe3ZhciBQPWplLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIHkuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oTCxRKXtpZigiLyIhPT1MLnNsaWNl''@;'; put 'put ''KC0xKSYmTC5tYXRjaCgvX1ZCQV9QUk9KRUNUX0NVUi8pKXt2YXIgcmU9TC5yZXBsYWNlKC9eW15cL10qLywiUiIpLnJlcGxhY2UoL1wvX1ZCQV9QUk9KRUNUX0NVUlx1MDAwMCovLCIiKTtqZS51dGlscy5jZmJfYWRkKFAscmUseS5GaWxlSW5kZXhbUV0uY29udGVudCl9fSksamUud3JpdGUo''@;'; put 'put ''UCl9KHkpKX12YXIgdmU9e307cmV0dXJuIHkuRnVsbFBhdGhzJiZmdW5jdGlvbiB5TSh5LFAsTCl7dmFyIFE9amUuZmluZCh5LCIhRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihRJiZRLnNpemU+MCl0cnl7dmFyIHJlPXU5KFEsXzQscnAuRFNJKTtmb3IodmFyIHBlIGluIHJlKVBb''@;'; put 'put ''cGVdPXJlW3BlXX1jYXRjaChIZSl7aWYoTC5XVEYpdGhyb3cgSGV9dmFyIF9lPWplLmZpbmQoeSwiIVN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKF9lJiZfZS5zaXplPjApdHJ5e3ZhciB2ZT11OShfZSx3cixycC5TSSk7Zm9yKHZhciBTZSBpbiB2ZSludWxsPT1QW1NlXSYmKFBbU2VdPXZlW1Nl''@;'; put 'put ''XSl9Y2F0Y2goSGUpe2lmKEwuV1RGKXRocm93IEhlfVAuSGVhZGluZ1BhaXJzJiZQLlRpdGxlc09mUGFydHMmJih1MChQLkhlYWRpbmdQYWlycyxQLlRpdGxlc09mUGFydHMsUCxMKSxkZWxldGUgUC5IZWFkaW5nUGFpcnMsZGVsZXRlIFAuVGl0bGVzT2ZQYXJ0cyl9KHksdmUsUCkscmUuUHJv''@;'; put 'put ''cHM9cmUuQ3VzdHByb3BzPXZlLFAuYm9va0ZpbGVzJiYocmUuY2ZiPXkpLHJlfXZhciBtZj17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIEdJKHksUCl7dmFyIEw9e30sUT15LmwrUDtMLnI9eS5yZWFkX3NoaWZ0KDQpLHkubCs9NDt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3kubCs9MTt2''@;'; put 'put ''YXIgcGU9eS5yZWFkX3NoaWZ0KDEpO3JldHVybiB5Lmw9USw3JnBlJiYoTC5sZXZlbD03JnBlKSwxNiZwZSYmKEwuaGlkZGVuPSEwKSwzMiZwZSYmKEwuaHB0PXJlLzIwKSxMfX0sMTp7bjoiQnJ0Q2VsbEJsYW5rIixmOmZ1bmN0aW9uIEZ2KHkpe3JldHVyblt1dSh5KV19fSwyOntuOiJCcnRD''@;'; put 'put ''ZWxsUmsiLGY6ZnVuY3Rpb24gaUwoeSl7cmV0dXJuW3V1KHkpLFhjKHkpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24gdFkoeSl7cmV0dXJuW3V1KHkpLHkucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gUFMoeSl7cmV0dXJu''@;'; put 'put ''W3V1KHkpLHkucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24gbkwoeSl7cmV0dXJuW3V1KHkpLG1hKHkpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gTTYoeSl7cmV0dXJuW3V1KHkpLHdjKHkpLCJzdHIiXX19LDc6e246IkJydENl''@;'; put 'put ''bGxJc3N0IixmOmZ1bmN0aW9uIEJTKHkpe3JldHVyblt1dSh5KSx5LnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gYUwoeSxQLEwpe3ZhciBRPXkubCtQLHJlPXV1KHkpO3JlLnI9TFsiIXJvdyJdO3ZhciBfZT1bcmUsd2MoeSksInN0ciJdO2lm''@;'; put 'put ''KEwuY2VsbEZvcm11bGEpe3kubCs9Mjt2YXIgdmU9aDYoeSxRLXkubCxMKTtfZVszXT14bCh2ZSxudWxsLHJlLEwuc3VwYm9va3MsTCl9ZWxzZSB5Lmw9UTtyZXR1cm4gX2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIFpTKHksUCxMKXt2YXIgUT15LmwrUCxyZT11dSh5KTtyZS5y''@;'; put 'put ''PUxbIiFyb3ciXTt2YXIgX2U9W3JlLG1hKHkpLCJuIl07aWYoTC5jZWxsRm9ybXVsYSl7eS5sKz0yO3ZhciB2ZT1oNih5LFEteS5sLEwpO19lWzNdPXhsKHZlLG51bGwscmUsTC5zdXBib29rcyxMKX1lbHNlIHkubD1RO3JldHVybiBfZX19LDEwOntuOiJCcnRGbWxhQm9vbCIsZjpmdW5jdGlv''@;'; put 'put ''biBzTCh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSx5LnJlYWRfc2hpZnQoMSksImIiXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHksUS15LmwsTCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2Ug''@;'; put 'put ''eS5sPVE7cmV0dXJuIF9lfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiBVUyh5LFAsTCl7dmFyIFE9eS5sK1AscmU9dXUoeSk7cmUucj1MWyIhcm93Il07dmFyIF9lPVtyZSx5LnJlYWRfc2hpZnQoMSksImUiXTtpZihMLmNlbGxGb3JtdWxhKXt5LmwrPTI7dmFyIHZlPWg2KHks''@;'; put 'put ''US15LmwsTCk7X2VbM109eGwodmUsbnVsbCxyZSxMLnN1cGJvb2tzLEwpfWVsc2UgeS5sPVE7cmV0dXJuIF9lfX0sMTI6e246IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rpb24gT1MoeSl7cmV0dXJuW2EwKHkpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIHpTKHkpe3JldHVyblth''@;'; put 'put ''MCh5KSxYYyh5KSwibiJdfX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24gTlMoeSl7cmV0dXJuW2EwKHkpLHkucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBTNih5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDEpLCJiIl19''@;'; put 'put ''fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOmpTfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiB4Nih5KXtyZXR1cm5bYTAoeSksd2MoeSksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBHZCh5KXtyZXR1cm5bYTAoeSkseS5yZWFkX3NoaWZ0KDQpLCJzIl19''@;'; put 'put ''fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjpjYX0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJpbmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1l''@;'; put 'put ''In0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFTdHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRl''@;'; put 'put ''dGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoiQnJ0TmFtZSIsZjpmdW5jdGlvbiBwNSh5LFAs''@;'; put 'put ''TCl7dmFyIFE9eS5sK1A7eS5sKz00LHkubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDQpLHBlPWR1KHkpLF9lPXNTKHksMCxMKSx2ZT1BdSh5KTt5Lmw9UTt2YXIgU2U9e05hbWU6cGUsUHRnOl9lfTtyZXR1cm4gcmU8MjY4NDM1NDU1JiYoU2UuU2hlZXQ9cmUpLHZlJiYoU2UuQ29tbWVudD12''@;'; put 'put ''ZSksU2V9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24gbUMoeSxQLEwpe3ZhciBRPXt9O1Euc3o9eS5yZWFkX3NoaWZ0KDIpLzIwO3ZhciByZT1mNCh5KTtzd2l0Y2gocmUuZkJvbGQmJihRLmJvbGQ9''@;'; put 'put ''MSkscmUuZkl0YWxpYyYmKFEuaXRhbGljPTEpLHJlLmZVbmRlcmxpbmUmJihRLnVuZGVybGluZT0xKSxyZS5mQ29uZGVuc2UmJihRLmNvbmRlbnNlPTEpLHJlLmZFeHRlbmQmJihRLmV4dGVuZD0xKSxyZS5mU2hhZG93JiYoUS5zaGFkb3c9MSkscmUuZk91dGxpbmUmJihRLm91dGxpbmU9MSks''@;'; put 'put ''cmUuZlN0cmlrZW91dCYmKFEuc3RyaWtlPTEpLDcwMD09PXkucmVhZF9zaGlmdCgyKSYmKFEuYm9sZD0xKSx5LnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpRLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0ic3ViIn12YXIgX2U9eS5yZWFkX3NoaWZ0KDEpOzAhPV9lJiYoUS51''@;'; put 'put ''bmRlcmxpbmU9X2UpO3ZhciB2ZT15LnJlYWRfc2hpZnQoMSk7dmU+MCYmKFEuZmFtaWx5PXZlKTt2YXIgU2U9eS5yZWFkX3NoaWZ0KDEpO3N3aXRjaChTZT4wJiYoUS5jaGFyc2V0PVNlKSx5LmwrKyxRLmNvbG9yPURkKHkpLHkucmVhZF9zaGlmdCgxKSl7Y2FzZSAxOlEuc2NoZW1lPSJtYWpv''@;'; put 'put ''ciI7YnJlYWs7Y2FzZSAyOlEuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIFEubmFtZT13Yyh5KSxRfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBnQyh5LFApe3JldHVyblt5LnJlYWRfc2hpZnQoMiksd2MoeSldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24ga0QoeSxQKXt2YXIgTD15''@;'; put 'put ''LmwrUCxRPXt9LHJlPXkucmVhZF9zaGlmdCg0KTtpZig0MCE9cmUpe1EucGF0dGVyblR5cGU9VjRbcmVdO3ZhciBwZT1EZCh5KTs2NCE9cGUuaW5kZXgmJihRLmZnQ29sb3I9cGUpO3ZhciBfZT1EZCh5KTs2NSE9X2UuaW5kZXgmJihRLmJnQ29sb3I9X2UpfWVsc2V7eS5sKz0xNix5LnJlYWRf''@;'; put 'put ''c2hpZnQoNCksbWEoeSksbWEoeSksbWEoeSksbWEoeSksbWEoeSk7Zm9yKHZhciB2ZT15LnJlYWRfc2hpZnQoNCksU2U9W10sSGU9MDtIZTx2ZTsrK0hlKVNlLnB1c2goWW0oeSkpfXJldHVybiB5Lmw9TCxRfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBURCh5KXt2YXIgUD17fTt5''@;'; put 'put ''LnJlYWRfc2hpZnQoMSk7dmFyIEw9ajQoeSk7Im5vbmUiIT1MLnN0eWxlJiYoUC50b3A9TCk7dmFyIFE9ajQoeSk7Im5vbmUiIT1RLnN0eWxlJiYoUC5ib3R0b209USk7dmFyIHJlPWo0KHkpOyJub25lIiE9cmUuc3R5bGUmJihQLmxlZnQ9cmUpO3ZhciBwZT1qNCh5KTsibm9uZSIhPXBlLnN0''@;'; put 'put ''eWxlJiYoUC5yaWdodD1wZSk7dmFyIF9lPWo0KHkpO3JldHVybiJub25lIiE9X2Uuc3R5bGUmJihQLmRpYWc9X2UpLFB9fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24gSDkoeSxQKXt2YXIgTD15LmwrUCxRPXt9LHJlPXkucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMiksX2U9eS5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLHZlPXkucmVhZF9zaGlmdCgyKSxTZT15LnJlYWRfc2hpZnQoMiksSGU9eS5yZWFkX3NoaWZ0KDEpO3kucmVhZF9zaGlmdCgxKTt2YXIgQmU9eS5yZWFkX3NoaWZ0KDIpLEdlPXkucmVhZF9zaGlmdCgxKTt5Lmw9TCxRLnhmSWQ9cmUsUS5udW1GbXRJZD1wZSxRLmZvbnRJ''@;'; put 'put ''ZD1fZSxRLmZpbGxJZD12ZSxRLmJvcmRlcklkPVNlLDEmR2UmJjAhPVEubnVtRm10SWQmJihRLmFwcGx5TnVtYmVyRm9ybWF0PSEwKSxRLmFsaWdubWVudD17fSxIZT4wJiYoUS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPUhlKTt2YXIgbnQ9ITE7cmV0dXJuIDcmQmUmJihudD0hMCxRLmFsaWdu''@;'; put 'put ''bWVudC5ob3Jpem9udGFsPVdtWzcmQmVdKSxRLmFsaWdubWVudC52ZXJ0aWNhbD1CNFtCZT4+PjMmN10sUS5hbGlnbm1lbnQudmVydGljYWwmJihudD0hMCksQmU+Pj42JjEmJihRLmFsaWdubWVudC53cmFwVGV4dD0hMCksQmU+Pj44JjEmJihRLmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCks''@;'; put 'put ''bnR8fGRlbGV0ZSBRLmFsaWdubWVudCw0JkdlJiZudCYmKFEuYXBwbHlBbGlnbm1lbnQ9ITApLFF9fSw0ODp7bjoiQnJ0U3R5bGUifSw0OTp7bjoiQnJ0Q2VsbE1ldGEifSw1MDp7bjoiQnJ0VmFsdWVNZXRhIn0sNTE6e246IkJydE1kYiJ9LDUyOntuOiJCcnRCZWdpbkZtZCJ9LDUzOntuOiJC''@;'; put 'put ''cnRFbmRGbWQifSw1NDp7bjoiQnJ0QmVnaW5NZHgifSw1NTp7bjoiQnJ0RW5kTWR4In0sNTY6e246IkJydEJlZ2luTWR4VHVwbGUifSw1Nzp7bjoiQnJ0RW5kTWR4VHVwbGUifSw1ODp7bjoiQnJ0TWR4TWJySXN0ciJ9LDU5OntuOiJCcnRTdHIifSw2MDp7bjoiQnJ0Q29sSW5mbyIsZjpWZH0s''@;'; put 'put ''NjI6e246IkJydENlbGxSU3RyaW5nIn0sNjM6e246IkJydENhbGNDaGFpbkl0ZW0kIixmOmZ1bmN0aW9uIFc0KHkpe3ZhciBQPXt9O1AuaT15LnJlYWRfc2hpZnQoNCk7dmFyIEw9e307TC5yPXkucmVhZF9zaGlmdCg0KSxMLmM9eS5yZWFkX3NoaWZ0KDQpLFAucj1kaShMKTt2YXIgUT15LnJl''@;'; put 'put ''YWRfc2hpZnQoMSk7cmV0dXJuIDImUSYmKFAubD0iMSIpLDgmUSYmKFAuYT0iMSIpLFB9fSw2NDp7bjoiQnJ0RFZhbCIsZjpmdW5jdGlvbiBFNih5LFAsTCl7dmFyIFE9eS5sK1AscmU9eS5yZWFkX3NoaWZ0KDQpLHBlPWwwKHkpLF9lPUF1KHkpLHZlPUF1KHkpLFNlPUF1KHkpLEhlPUF1KHkp''@;'; put 'put ''LEJlPWlTKHksUCxMKSxHZT15Lmw8UT9pUyh5LFAsTCk6bnVsbCxudD0xNSZyZSxkdD17dDplb1tudF0sc3FyZng6cGUsczpbX2UsdmUsU2UsSGVdfTtyZXR1cm4gQmUmJihkdC5mMT1CZSksR2UmJihkdC5mMj1HZSksMD09bnR8fDM9PW50fHw3PT1udHx8KGR0Lm9wPUJ2W3JlPj4yMCYxNV0p''@;'; put 'put ''LGR0fX0sNjU6e246IkJydFN4dmNlbGxOdW0ifSw2Njp7bjoiQnJ0U3h2Y2VsbFN0ciJ9LDY3OntuOiJCcnRTeHZjZWxsQm9vbCJ9LDY4OntuOiJCcnRTeHZjZWxsRXJyIn0sNjk6e246IkJydFN4dmNlbGxEYXRlIn0sNzA6e246IkJydFN4dmNlbGxOaWwifSwxMjg6e246IkJydEZpbGVWZXJz''@;'; put 'put ''aW9uIn0sMTI5OntuOiJCcnRCZWdpblNoZWV0In0sMTMwOntuOiJCcnRFbmRTaGVldCJ9LDEzMTp7bjoiQnJ0QmVnaW5Cb29rIixmOmJjLHA6MH0sMTMyOntuOiJCcnRFbmRCb29rIn0sMTMzOntuOiJCcnRCZWdpbldzVmlld3MifSwxMzQ6e246IkJydEVuZFdzVmlld3MifSwxMzU6e246IkJy''@;'; put 'put ''dEJlZ2luQm9va1ZpZXdzIn0sMTM2OntuOiJCcnRFbmRCb29rVmlld3MifSwxMzc6e246IkJydEJlZ2luV3NWaWV3IixmOmZ1bmN0aW9uIGdMKHkpe3ZhciBQPXkucmVhZF9zaGlmdCgyKTtyZXR1cm4geS5sKz0yOCx7UlRMOjMyJlAsZ3JpZDohISg0JlApfX19LDEzODp7bjoiQnJ0RW5kV3NW''@;'; put 'put ''aWV3In0sMTM5OntuOiJCcnRCZWdpbkNzVmlld3MifSwxNDA6e246IkJydEVuZENzVmlld3MifSwxNDE6e246IkJydEJlZ2luQ3NWaWV3In0sMTQyOntuOiJCcnRFbmRDc1ZpZXcifSwxNDM6e246IkJydEJlZ2luQnVuZGxlU2hzIn0sMTQ0OntuOiJCcnRFbmRCdW5kbGVTaHMifSwxNDU6e246''@;'; put 'put ''IkJydEJlZ2luU2hlZXREYXRhIn0sMTQ2OntuOiJCcnRFbmRTaGVldERhdGEifSwxNDc6e246IkJydFdzUHJvcCIsZjpmdW5jdGlvbiBKSSh5LFApe3ZhciBMPXt9LFE9eVt5LmxdO3JldHVybisreS5sLEwuYWJvdmU9ISg2NCZRKSxMLmxlZnQ9ISgxMjgmUSkseS5sKz0xOCxMLm5hbWU9emgo''@;'; put 'put ''eSxQLTE5KSxMfX0sMTQ4OntuOiJCcnRXc0RpbSIsZjpxSSxwOjE2fSwxNTE6e246IkJydFBhbmUiLGY6ZnVuY3Rpb24gR1MoeSxQKXt2YXIgTD15LmwrUDttYSh5KSxtYSh5KTt2YXIgUT15LnJlYWRfc2hpZnQoNCwiaSIpLHJlPXkucmVhZF9zaGlmdCg0LCJpIik7aWYoeS5yZWFkX3NoaWZ0''@;'; put 'put ''KDQpLHkucmVhZF9zaGlmdCgxKSxMIT15LmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitMKyIgIT0gIit5LmwpO3JldHVybltkaSh7cjpRLGM6cmV9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5jdGlvbiB1TCh5LFApe3JldHVybiB5LnJlYWRfc2hpZnQoNCkse2NlbGw6ZGko''@;'; put 'put ''e3I6eS5yZWFkX3NoaWZ0KDQpLGM6eS5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24gUEwoeSxQKXt2YXIgTD17fSxRPXkucmVhZF9zaGlmdCg0KTtMLmRlZmF1bHRUaGVtZVZlcnNpb249eS5yZWFkX3NoaWZ0KDQpO3ZhciByZT1QPjg/d2MoeSk6IiI7''@;'; put 'put ''cmV0dXJuIHJlLmxlbmd0aD4wJiYoTC5Db2RlTmFtZT1yZSksTC5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZRKSxMLmJhY2t1cEZpbGU9ISEoNjQmUSksTC5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZRKSxMLmRhdGUxOTA0PSEhKDEmUSksTC5maWx0ZXJQcml2YWN5PSEhKDgm''@;'; put 'put ''USksTC5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZRKSxMLnByb21wdGVkU29sdXRpb25zPSEhKDE2JlEpLEwucHVibGlzaEl0ZW1zPSEhKDIwNDgmUSksTC5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0JlEpLEwuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmUSksTC5z''@;'; put 'put ''aG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JlEpLEwuc2hvd0lua0Fubm90YXRpb249ISEoMzImUSksTC5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtRPj4xMyYzXSxMLnNob3dQaXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JlEpLEwudXBkYXRlTGlua3M9''@;'; put 'put ''WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtRPj44JjNdLEx9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIGNZKHksUCl7dmFyIEw9e307cmV0dXJuIEwuSGlkZGVuPXkucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxMLmlUYWJJRD15LnJlYWRfc2hpZnQoNCksTC5zdHJSZWxJRD1UMSh5LFAtOCksTC5uYW1lPXdjKHkpLEx9fSwxNTc6e246IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gUWgoeSl7cmV0dXJuW3kucmVhZF9z''@;'; put 'put ''aGlmdCg0KSx5LnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjpKY30sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRlckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1''@;'; put 'put ''OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydEljb25GaWx0ZXIifSwxNzA6e246IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVy''@;'; put 'put ''In0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0ifSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpsTH0sMTc3OntuOiJCcnRC''@;'; put 'put ''ZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5QQ0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7''@;'; put 'put ''bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0sMTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6e246IkJydEJlZ2luUENEU1JhbmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJy''@;'; put 'put ''dEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29yZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1''@;'; put 'put ''OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJy''@;'; put 'put ''dEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25uZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3Bz''@;'; put 'put ''In0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQQ0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQ''@;'; put 'put ''YWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1Nl''@;'; put 'put ''dCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RGR3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1Jhbmdl''@;'; put 'put ''In0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVuZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hlIn0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246''@;'; put 'put ''IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0sMjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJC''@;'; put 'put ''cnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4OntuOiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENE''@;'; put 'put ''U0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1zIn0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJy''@;'; put 'put ''dEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwyNTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5Q''@;'; put 'put ''UkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQTmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUifSwyNTY6e246IkJydEVuZFBOYW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJy''@;'; put 'put ''dEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQ''@;'; put 'put ''VGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRCZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6''@;'; put 'put ''e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVuZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJC''@;'; put 'put ''cnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgxOntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRCZWdpblNYVkkifSwyODM6e246IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1''@;'; put 'put ''OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJydEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNYUEkifSwyOTA6e246IkJydEVuZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJy''@;'; put 'put ''dEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hESXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEkifSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hM''@;'; put 'put ''SVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hMSUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVuZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMw''@;'; put 'put ''Njp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRSd3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJC''@;'; put 'put ''cnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0s''@;'; put 'put ''MzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6e246IkJydEVuZElTWFRIQ29scyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRF''@;'; put 'put ''bmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJCcnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9''@;'; put 'put ''LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGluZm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVu''@;'; put 'put ''ZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJydEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0sMzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0''@;'; put 'put ''Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29rU3JjIixmOlQxfSwzNTc6e246IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246''@;'; put 'put ''IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntuOiJCcnRFeHRlcm5TaGVldCIsZjpTbX0sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoi''@;'; put 'put ''QnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0sMzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2VsbEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcy''@;'; put 'put ''OntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1k''@;'; put 'put ''eEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVtIn0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246''@;'; put 'put ''IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENhY2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJU1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246''@;'; put 'put ''IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJy''@;'; put 'put ''dEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0sNDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3Zl''@;'; put 'put ''In0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0sNDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQxMzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRT''@;'; put 'put ''aCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJCcnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIy''@;'; put 'put ''OntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJTaFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRBcnJGbWxhIixmOmZ1bmN0aW9uIGg1KHksUCxMKXt2YXIgUT15LmwrUCxy''@;'; put 'put ''ZT1UZCh5KSxwZT15LnJlYWRfc2hpZnQoMSksX2U9W3JlXTtpZihfZVsyXT1wZSxMLmNlbGxGb3JtdWxhKXt2YXIgdmU9clMoeSxRLXkubCxMKTtfZVsxXT12ZX1lbHNlIHkubD1RO3JldHVybiBfZX19LDQyNzp7bjoiQnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBoTCh5LFAsTCl7dmFyIFE9eS5s''@;'; put 'put ''K1AscGU9W0pjKHksMTYpXTtpZihMLmNlbGxGb3JtdWxhKXt2YXIgX2U9RUkoeSxRLXkubCxMKTtwZVsxXT1fZSx5Lmw9UX1lbHNlIHkubD1RO3JldHVybiBwZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENv''@;'; put 'put ''bm5lY3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMyOntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQzMzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVtIn0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJC''@;'; put 'put ''cnRFbmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVsIn0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVsIn0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENESEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0s''@;'; put 'put ''NDQyOntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0''@;'; put 'put ''QmVnaW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVnaW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lSIn0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVsZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0s''@;'; put 'put ''NDU0OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5RU0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMifSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRB''@;'; put 'put ''dXRvU29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQi''@;'; put 'put ''fSw0NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJhciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xvclNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRl''@;'; put 'put ''cm5WYWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0sNDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUifSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpmdW5jdGlvbiBmTCh5KXt2YXIgUD17fTtyZXR1cm4gcVMuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihMKXtQW0xdPW1hKHkpfSksUH19LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQi''@;'; put 'put ''fSw0ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gWEkoeSl7dmFyIFA9e30sTD17fSxRPXt9LHJlPXkucmVhZF9zaGlmdCg0''@;'; put 'put ''KSxwZT15LnJlYWRfc2hpZnQoMik7US53Y2g9cmU8PTY1NTM2P3JlLzI1NjpwZTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO0wuaHB0PV9lLzIwO3ZhciB2ZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuIDImdmUmJihMLmhpZGRlbj0hMCksNCZ2ZSYmKFAudG9wdGhpY2s9ITApLDgmdmUmJihQLmJv''@;'; put 'put ''dHRoaWNrPSEwKSxQLnJvd291dGxpbmU9eS5yZWFkX3NoaWZ0KDEpLFAuY29sb3V0bGluZT15LnJlYWRfc2hpZnQoMSksSTMoTCksUC5yb3c9TCxwdShRKSxQLmNvbD1RLFB9fSw0ODY6e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBz''@;'; put 'put ''In0sNDg5OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiBkNSh5LFApe3ZhciBMPXkubCtQLFE9SmMoeSwx''@;'; put 'put ''NikscmU9QXUoeSkscGU9d2MoeSksX2U9d2MoeSksdmU9d2MoeSk7eS5sPUw7dmFyIFNlPXtyZng6USxyZWxJZDpyZSxsb2M6cGUsZGlzcGxheTp2ZX07cmV0dXJuIF9lJiYoU2UuVG9vbHRpcD1fZSksU2V9fSw0OTU6e246IkJydEJlZ2luRENvbiJ9LDQ5Njp7bjoiQnJ0RW5kRENvbiJ9LDQ5''@;'; put 'put ''Nzp7bjoiQnJ0QmVnaW5EUmVmcyJ9LDQ5ODp7bjoiQnJ0RW5kRFJlZnMifSw0OTk6e246IkJydERSZWYifSw1MDA6e246IkJydEJlZ2luU2Nlbk1hbiJ9LDUwMTp7bjoiQnJ0RW5kU2Nlbk1hbiJ9LDUwMjp7bjoiQnJ0QmVnaW5TY3QifSw1MDM6e246IkJydEVuZFNjdCJ9LDUwNDp7bjoiQnJ0''@;'; put 'put ''U2xjIn0sNTA1OntuOiJCcnRCZWdpbkRYRnMifSw1MDY6e246IkJydEVuZERYRnMifSw1MDc6e246IkJydERYRiJ9LDUwODp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlcyJ9LDUwOTp7bjoiQnJ0RW5kVGFibGVTdHlsZXMifSw1MTA6e246IkJydEJlZ2luVGFibGVTdHlsZSJ9LDUxMTp7bjoiQnJ0''@;'; put 'put ''RW5kVGFibGVTdHlsZSJ9LDUxMjp7bjoiQnJ0VGFibGVTdHlsZUVsZW1lbnQifSw1MTM6e246IkJydFRhYmxlU3R5bGVDbGllbnQifSw1MTQ6e246IkJydEJlZ2luVm9sRGVwcyJ9LDUxNTp7bjoiQnJ0RW5kVm9sRGVwcyJ9LDUxNjp7bjoiQnJ0QmVnaW5Wb2xUeXBlIn0sNTE3OntuOiJCcnRF''@;'; put 'put ''bmRWb2xUeXBlIn0sNTE4OntuOiJCcnRCZWdpblZvbE1haW4ifSw1MTk6e246IkJydEVuZFZvbE1haW4ifSw1MjA6e246IkJydEJlZ2luVm9sVG9waWMifSw1MjE6e246IkJydEVuZFZvbFRvcGljIn0sNTIyOntuOiJCcnRWb2xTdWJ0b3BpYyJ9LDUyMzp7bjoiQnJ0Vm9sUmVmIn0sNTI0Ontu''@;'; put 'put ''OiJCcnRWb2xOdW0ifSw1MjU6e246IkJydFZvbEVyciJ9LDUyNjp7bjoiQnJ0Vm9sU3RyIn0sNTI3OntuOiJCcnRWb2xCb29sIn0sNTI4OntuOiJCcnRCZWdpbkNhbGNDaGFpbiQifSw1Mjk6e246IkJydEVuZENhbGNDaGFpbiQifSw1MzA6e246IkJydEJlZ2luU29ydFN0YXRlIn0sNTMxOntu''@;'; put 'put ''OiJCcnRFbmRTb3J0U3RhdGUifSw1MzI6e246IkJydEJlZ2luU29ydENvbmQifSw1MzM6e246IkJydEVuZFNvcnRDb25kIn0sNTM0OntuOiJCcnRCb29rUHJvdGVjdGlvbiJ9LDUzNTp7bjoiQnJ0U2hlZXRQcm90ZWN0aW9uIn0sNTM2OntuOiJCcnRSYW5nZVByb3RlY3Rpb24ifSw1Mzc6e246''@;'; put 'put ''IkJydFBob25ldGljSW5mbyJ9LDUzODp7bjoiQnJ0QmVnaW5FQ1R4dFdpeiJ9LDUzOTp7bjoiQnJ0RW5kRUNUeHRXaXoifSw1NDA6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QifSw1NDE6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0In0sNTQyOntuOiJCcnRCZWdpbkVDVHdGbGRJbmZvIn0s''@;'; put 'put ''NTQ4OntuOiJCcnRGaWxlU2hhcmluZyJ9LDU0OTp7bjoiQnJ0T2xlU2l6ZSJ9LDU1MDp7bjoiQnJ0RHJhd2luZyIsZjpUMX0sNTUxOntuOiJCcnRMZWdhY3lEcmF3aW5nIn0sNTUyOntuOiJCcnRMZWdhY3lEcmF3aW5nSEYifSw1NTM6e246IkJydFdlYk9wdCJ9LDU1NDp7bjoiQnJ0QmVnaW5X''@;'; put 'put ''ZWJQdWJJdGVtcyJ9LDU1NTp7bjoiQnJ0RW5kV2ViUHViSXRlbXMifSw1NTY6e246IkJydEJlZ2luV2ViUHViSXRlbSJ9LDU1Nzp7bjoiQnJ0RW5kV2ViUHViSXRlbSJ9LDU1ODp7bjoiQnJ0QmVnaW5TWENvbmRGbXQifSw1NTk6e246IkJydEVuZFNYQ29uZEZtdCJ9LDU2MDp7bjoiQnJ0QmVn''@;'; put 'put ''aW5TWENvbmRGbXRzIn0sNTYxOntuOiJCcnRFbmRTWENvbmRGbXRzIn0sNTYyOntuOiJCcnRCa0hpbSJ9LDU2NDp7bjoiQnJ0Q29sb3IifSw1NjU6e246IkJydEJlZ2luSW5kZXhlZENvbG9ycyJ9LDU2Njp7bjoiQnJ0RW5kSW5kZXhlZENvbG9ycyJ9LDU2OTp7bjoiQnJ0QmVnaW5NUlVDb2xv''@;'; put 'put ''cnMifSw1NzA6e246IkJydEVuZE1SVUNvbG9ycyJ9LDU3Mjp7bjoiQnJ0TVJVQ29sb3IifSw1NzM6e246IkJydEJlZ2luRFZhbHMifSw1NzQ6e246IkJydEVuZERWYWxzIn0sNTc3OntuOiJCcnRTdXBOYW1lU3RhcnQifSw1Nzg6e246IkJydFN1cE5hbWVWYWx1ZVN0YXJ0In0sNTc5OntuOiJC''@;'; put 'put ''cnRTdXBOYW1lVmFsdWVFbmQifSw1ODA6e246IkJydFN1cE5hbWVOdW0ifSw1ODE6e246IkJydFN1cE5hbWVFcnIifSw1ODI6e246IkJydFN1cE5hbWVTdCJ9LDU4Mzp7bjoiQnJ0U3VwTmFtZU5pbCJ9LDU4NDp7bjoiQnJ0U3VwTmFtZUJvb2wifSw1ODU6e246IkJydFN1cE5hbWVGbWxhIn0s''@;'; put 'put ''NTg2OntuOiJCcnRTdXBOYW1lQml0cyJ9LDU4Nzp7bjoiQnJ0U3VwTmFtZUVuZCJ9LDU4ODp7bjoiQnJ0RW5kU3VwQm9vayJ9LDU4OTp7bjoiQnJ0Q2VsbFNtYXJ0VGFnUHJvcGVydHkifSw1OTA6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFnIn0sNTkxOntuOiJCcnRFbmRDZWxsU21hcnRUYWci''@;'; put 'put ''fSw1OTI6e246IkJydEJlZ2luQ2VsbFNtYXJ0VGFncyJ9LDU5Mzp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFncyJ9LDU5NDp7bjoiQnJ0QmVnaW5TbWFydFRhZ3MifSw1OTU6e246IkJydEVuZFNtYXJ0VGFncyJ9LDU5Njp7bjoiQnJ0U21hcnRUYWdUeXBlIn0sNTk3OntuOiJCcnRCZWdpblNtYXJ0''@;'; put 'put ''VGFnVHlwZXMifSw1OTg6e246IkJydEVuZFNtYXJ0VGFnVHlwZXMifSw1OTk6e246IkJydEJlZ2luU1hGaWx0ZXJzIn0sNjAwOntuOiJCcnRFbmRTWEZpbHRlcnMifSw2MDE6e246IkJydEJlZ2luU1hGSUxURVIifSw2MDI6e246IkJydEVuZFNYRmlsdGVyIn0sNjAzOntuOiJCcnRCZWdpbkZp''@;'; put 'put ''bGxzIn0sNjA0OntuOiJCcnRFbmRGaWxscyJ9LDYwNTp7bjoiQnJ0QmVnaW5DZWxsV2F0Y2hlcyJ9LDYwNjp7bjoiQnJ0RW5kQ2VsbFdhdGNoZXMifSw2MDc6e246IkJydENlbGxXYXRjaCJ9LDYwODp7bjoiQnJ0QmVnaW5DUkVycnMifSw2MDk6e246IkJydEVuZENSRXJycyJ9LDYxMDp7bjoi''@;'; put 'put ''QnJ0Q3Jhc2hSZWNFcnIifSw2MTE6e246IkJydEJlZ2luRm9udHMifSw2MTI6e246IkJydEVuZEZvbnRzIn0sNjEzOntuOiJCcnRCZWdpbkJvcmRlcnMifSw2MTQ6e246IkJydEVuZEJvcmRlcnMifSw2MTU6e246IkJydEJlZ2luRm10cyJ9LDYxNjp7bjoiQnJ0RW5kRm10cyJ9LDYxNzp7bjoi''@;'; put 'put ''QnJ0QmVnaW5DZWxsWEZzIn0sNjE4OntuOiJCcnRFbmRDZWxsWEZzIn0sNjE5OntuOiJCcnRCZWdpblN0eWxlcyJ9LDYyMDp7bjoiQnJ0RW5kU3R5bGVzIn0sNjI1OntuOiJCcnRCaWdOYW1lIn0sNjI2OntuOiJCcnRCZWdpbkNlbGxTdHlsZVhGcyJ9LDYyNzp7bjoiQnJ0RW5kQ2VsbFN0eWxl''@;'; put 'put ''WEZzIn0sNjI4OntuOiJCcnRCZWdpbkNvbW1lbnRzIn0sNjI5OntuOiJCcnRFbmRDb21tZW50cyJ9LDYzMDp7bjoiQnJ0QmVnaW5Db21tZW50QXV0aG9ycyJ9LDYzMTp7bjoiQnJ0RW5kQ29tbWVudEF1dGhvcnMifSw2MzI6e246IkJydENvbW1lbnRBdXRob3IiLGY6WER9LDYzMzp7bjoiQnJ0''@;'; put 'put ''QmVnaW5Db21tZW50TGlzdCJ9LDYzNDp7bjoiQnJ0RW5kQ29tbWVudExpc3QifSw2MzU6e246IkJydEJlZ2luQ29tbWVudCIsZjpmdW5jdGlvbiBCQyh5KXt2YXIgUD17fTtQLmlhdXRob3I9eS5yZWFkX3NoaWZ0KDQpO3ZhciBMPUpjKHksMTYpO3JldHVybiBQLnJmeD1MLnMsUC5yZWY9ZGko''@;'; put 'put ''TC5zKSx5LmwrPTE2LFB9fSw2MzY6e246IkJydEVuZENvbW1lbnQifSw2Mzc6e246IkJydENvbW1lbnRUZXh0IixmOlg3fSw2Mzg6e246IkJydEJlZ2luT2xlT2JqZWN0cyJ9LDYzOTp7bjoiQnJ0T2xlT2JqZWN0In0sNjQwOntuOiJCcnRFbmRPbGVPYmplY3RzIn0sNjQxOntuOiJCcnRCZWdp''@;'; put 'put ''blN4cnVsZXMifSw2NDI6e246IkJydEVuZFN4UnVsZXMifSw2NDM6e246IkJydEJlZ2luQWN0aXZlWENvbnRyb2xzIn0sNjQ0OntuOiJCcnRBY3RpdmVYIn0sNjQ1OntuOiJCcnRFbmRBY3RpdmVYQ29udHJvbHMifSw2NDY6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzU29ydEJ5In0sNjQ4''@;'; put 'put ''OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MifSw2NDk6e246IkJydENlbGxJZ25vcmVFQyJ9LDY1MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDcyJ9LDY1MTp7bjoiQnJ0Q3NQcm9wIixmOmZ1bmN0aW9uIGVwKHksUCl7cmV0dXJuIHkubCs9MTAse25hbWU6d2MoeSl9fX0sNjUyOntuOiJCcnRD''@;'; put 'put ''c1BhZ2VTZXR1cCJ9LDY1Mzp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3cyJ9LDY1NDp7bjoiQnJ0RW5kVXNlckNzVmlld3MifSw2NTU6e246IkJydEJlZ2luVXNlckNzVmlldyJ9LDY1Njp7bjoiQnJ0RW5kVXNlckNzVmlldyJ9LDY1Nzp7bjoiQnJ0QmVnaW5QY2RTRkNJRW50cmllcyJ9LDY1ODp7''@;'; put 'put ''bjoiQnJ0RW5kUENEU0ZDSUVudHJpZXMifSw2NTk6e246IkJydFBDRFNGQ0lFbnRyeSJ9LDY2MDp7bjoiQnJ0QmVnaW5MaXN0UGFydHMifSw2NjE6e246IkJydExpc3RQYXJ0In0sNjYyOntuOiJCcnRFbmRMaXN0UGFydHMifSw2NjM6e246IkJydFNoZWV0Q2FsY1Byb3AifSw2NjQ6e246IkJy''@;'; put 'put ''dEJlZ2luRm5Hcm91cCJ9LDY2NTp7bjoiQnJ0Rm5Hcm91cCJ9LDY2Njp7bjoiQnJ0RW5kRm5Hcm91cCJ9LDY2Nzp7bjoiQnJ0U3VwQWRkaW4ifSw2Njg6e246IkJydFNYVERNUE9yZGVyIn0sNjY5OntuOiJCcnRDc1Byb3RlY3Rpb24ifSw2NzE6e246IkJydEJlZ2luV3NTb3J0TWFwIn0sNjcy''@;'; put 'put ''OntuOiJCcnRFbmRXc1NvcnRNYXAifSw2NzM6e246IkJydEJlZ2luUlJTb3J0In0sNjc0OntuOiJCcnRFbmRSUlNvcnQifSw2NzU6e246IkJydFJSU29ydEl0ZW0ifSw2NzY6e246IkJydEZpbGVTaGFyaW5nSXNvIn0sNjc3OntuOiJCcnRCb29rUHJvdGVjdGlvbklzbyJ9LDY3ODp7bjoiQnJ0''@;'; put 'put ''U2hlZXRQcm90ZWN0aW9uSXNvIn0sNjc5OntuOiJCcnRDc1Byb3RlY3Rpb25Jc28ifSw2ODA6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbyJ9LDY4MTp7bjoiQnJ0RFZhbExpc3QifSwxMDI0OntuOiJCcnRSd0Rlc2NlbnQifSwxMDI1OntuOiJCcnRLbm93bkZvbnRzIn0sMTAyNjp7bjoiQnJ0''@;'; put 'put ''QmVnaW5TWFR1cGxlU2V0In0sMTAyNzp7bjoiQnJ0RW5kU1hUdXBsZVNldCJ9LDEwMjg6e246IkJydEJlZ2luU1hUdXBsZVNldEhlYWRlciJ9LDEwMjk6e246IkJydEVuZFNYVHVwbGVTZXRIZWFkZXIifSwxMDMwOntuOiJCcnRTWFR1cGxlU2V0SGVhZGVySXRlbSJ9LDEwMzE6e246IkJydEJl''@;'; put 'put ''Z2luU1hUdXBsZVNldERhdGEifSwxMDMyOntuOiJCcnRFbmRTWFR1cGxlU2V0RGF0YSJ9LDEwMzM6e246IkJydEJlZ2luU1hUdXBsZVNldFJvdyJ9LDEwMzQ6e246IkJydEVuZFNYVHVwbGVTZXRSb3cifSwxMDM1OntuOiJCcnRTWFR1cGxlU2V0Um93SXRlbSJ9LDEwMzY6e246IkJydE5hbWVF''@;'; put 'put ''eHQifSwxMDM3OntuOiJCcnRQQ0RIMTQifSwxMDM4OntuOiJCcnRCZWdpblBDRENhbGNNZW0xNCJ9LDEwMzk6e246IkJydEVuZFBDRENhbGNNZW0xNCJ9LDEwNDA6e246IkJydFNYVEgxNCJ9LDEwNDE6e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXAifSwxMDQyOntuOiJCcnRFbmRTcGFya2xp''@;'; put 'put ''bmVHcm91cCJ9LDEwNDM6e246IkJydFNwYXJrbGluZSJ9LDEwNDQ6e246IkJydFNYREkxNCJ9LDEwNDU6e246IkJydFdzRm10SW5mb0V4MTQifSwxMDQ2OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0Nzp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQi''@;'; put 'put ''fSwxMDQ4OntuOiJCcnRCZWdpbkNGUnVsZTE0In0sMTA0OTp7bjoiQnJ0RW5kQ0ZSdWxlMTQifSwxMDUwOntuOiJCcnRDRlZPMTQifSwxMDUxOntuOiJCcnRCZWdpbkRhdGFiYXIxNCJ9LDEwNTI6e246IkJydEJlZ2luSWNvblNldDE0In0sMTA1Mzp7bjoiQnJ0RFZhbDE0IixmOmZ1bmN0aW9u''@;'; put 'put ''IGJMKHksUCxMKXt2YXIgUT1mdW5jdGlvbiBHdCh5LFAsTCl7dmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXt9O3JldHVybiAxJlEmJihyZS5yZWZzPWZ1bmN0aW9uIFVuKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoNCksTD1bXTtQLS0gPjA7KUwucHVzaChJcih5KSk7cmV0dXJuIEx9KHkp''@;'; put 'put ''KSwyJlEmJihyZS5zcXJlZnM9ZnVuY3Rpb24geW8oeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCg0KSxMPVtdO1AtLSA+MDspTC5wdXNoKGVzKHkpKTtyZXR1cm4gTH0oeSkpLDQmUSYmKHJlLmZvcm11bGFzPWZ1bmN0aW9uIHpzKHksUCxMKXtmb3IodmFyIFE9eS5yZWFkX3NoaWZ0KDQpLHJl''@;'; put 'put ''PVtdO1EtLSA+MDspcmUucHVzaChvYyh5LDAsTCkpO3JldHVybiByZX0oeSwwLEwpKSw4JlEmJihyZS5yZWxJRD1mdW5jdGlvbiBpbSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9PT1QPyIiOnkucmVhZF9zaGlmdChQLCJ1dGYxNmxlIil9KHkpKSxyZX0oeSwwLEwpLHJlPXku''@;'; put 'put ''cmVhZF9zaGlmdCg0KSxwZT1BdSh5KSxfZT1BdSh5KSx2ZT1BdSh5KSxTZT1BdSh5KSxIZT0oUS5mb3JtdWxhc3x8W10pWzBdLEJlPShRLmZvcm11bGFzfHxbXSlbMV0sR2U9MTUmcmUsbnQ9e3Q6ZW9bR2VdLHNxcmZ4OlEuc3FyZWZzWzBdLHM6W3BlLF9lLHZlLFNlXX07cmV0dXJuIEhlJiYo''@;'; put 'put ''bnQuZjE9SGUpLEJlJiYobnQuZjI9QmUpLDA9PUdlfHwzPT1HZXx8Nz09R2V8fChudC5vcD1CdltyZT4+MjAmMTVdKSxudH19LDEwNTQ6e246IkJydEJlZ2luRFZhbHMxNCJ9LDEwNTU6e246IkJydENvbG9yMTQifSwxMDU2OntuOiJCcnRCZWdpblNwYXJrbGluZXMifSwxMDU3OntuOiJCcnRF''@;'; put 'put ''bmRTcGFya2xpbmVzIn0sMTA1ODp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cHMifSwxMDU5OntuOiJCcnRFbmRTcGFya2xpbmVHcm91cHMifSwxMDYxOntuOiJCcnRTWFZEMTQifSwxMDYyOntuOiJCcnRCZWdpblNYVmlldzE0In0sMTA2Mzp7bjoiQnJ0RW5kU1hWaWV3MTQifSwxMDY0Ontu''@;'; put 'put ''OiJCcnRCZWdpblNYVmlldzE2In0sMTA2NTp7bjoiQnJ0RW5kU1hWaWV3MTYifSwxMDY2OntuOiJCcnRCZWdpblBDRDE0In0sMTA2Nzp7bjoiQnJ0RW5kUENEMTQifSwxMDY4OntuOiJCcnRCZWdpbkV4dENvbm4xNCJ9LDEwNjk6e246IkJydEVuZEV4dENvbm4xNCJ9LDEwNzA6e246IkJydEJl''@;'; put 'put ''Z2luU2xpY2VyQ2FjaGVJRHMifSwxMDcxOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEcyJ9LDEwNzI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVJRCJ9LDEwNzM6e246IkJydEVuZFNsaWNlckNhY2hlSUQifSwxMDc1OntuOiJCcnRCZWdpblNsaWNlckNhY2hlIn0sMTA3Njp7bjoiQnJ0RW5kU2xp''@;'; put 'put ''Y2VyQ2FjaGUifSwxMDc3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlRGVmIn0sMTA3ODp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVEZWYifSwxMDc5OntuOiJCcnRCZWdpblNsaWNlcnNFeCJ9LDEwODA6e246IkJydEVuZFNsaWNlcnNFeCJ9LDEwODE6e246IkJydEJlZ2luU2xpY2VyRXgifSwxMDgy''@;'; put 'put ''OntuOiJCcnRFbmRTbGljZXJFeCJ9LDEwODM6e246IkJydEJlZ2luU2xpY2VyIn0sMTA4NDp7bjoiQnJ0RW5kU2xpY2VyIn0sMTA4NTp7bjoiQnJ0U2xpY2VyQ2FjaGVQaXZvdFRhYmxlcyJ9LDEwODY6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODc6e246IkJydEVuZFNs''@;'; put 'put ''aWNlckNhY2hlT2xhcEltcGwifSwxMDg4OntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwODk6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxzRGF0YSJ9LDEwOTA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkxOntuOiJCcnRFbmRTbGljZXJDYWNo''@;'; put 'put ''ZUxldmVsRGF0YSJ9LDEwOTI6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTM6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDk0OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZSJ9LDEwOTU6e246IkJydEVuZFNsaWNlckNhY2hlU2lSYW5nZSJ9LDEw''@;'; put 'put ''OTY6e246IkJydFNsaWNlckNhY2hlT2xhcEl0ZW0ifSwxMDk3OntuOiJCcnRCZWdpblNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDEwOTg6e246IkJydFNsaWNlckNhY2hlU2VsZWN0aW9uIn0sMTA5OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTEwMDp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''bGljZXJDYWNoZU5hdGl2ZSJ9LDExMDE6e246IkJydEVuZFNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMjp7bjoiQnJ0U2xpY2VyQ2FjaGVOYXRpdmVJdGVtIn0sMTEwMzp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uMTQifSwxMTA0OntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28xNCJ9LDExMDU6e246''@;'; put 'put ''IkJydENlbGxJZ25vcmVFQzE0In0sMTExMTp7bjoiQnJ0TGlzdDE0In0sMTExMjp7bjoiQnJ0Q0ZJY29uIn0sMTExMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTU6e246IkJydEJl''@;'; put 'put ''Z2luU2xpY2VycyJ9LDExMTY6e246IkJydEVuZFNsaWNlcnMifSwxMTE3OntuOiJCcnRXYlByb3AxNCJ9LDExMTg6e246IkJydEJlZ2luU1hFZGl0In0sMTExOTp7bjoiQnJ0RW5kU1hFZGl0In0sMTEyMDp7bjoiQnJ0QmVnaW5TWEVkaXRzIn0sMTEyMTp7bjoiQnJ0RW5kU1hFZGl0cyJ9LDEx''@;'; put 'put ''MjI6e246IkJydEJlZ2luU1hDaGFuZ2UifSwxMTIzOntuOiJCcnRFbmRTWENoYW5nZSJ9LDExMjQ6e246IkJydEJlZ2luU1hDaGFuZ2VzIn0sMTEyNTp7bjoiQnJ0RW5kU1hDaGFuZ2VzIn0sMTEyNjp7bjoiQnJ0U1hUdXBsZUl0ZW1zIn0sMTEyODp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZSJ9''@;'; put 'put ''LDExMjk6e246IkJydEVuZFNsaWNlclN0eWxlIn0sMTEzMDp7bjoiQnJ0U2xpY2VyU3R5bGVFbGVtZW50In0sMTEzMTp7bjoiQnJ0QmVnaW5TdHlsZVNoZWV0RXh0MTQifSwxMTMyOntuOiJCcnRFbmRTdHlsZVNoZWV0RXh0MTQifSwxMTMzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90''@;'; put 'put ''Q2FjaGVJRCJ9LDExMzQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRCJ9LDExMzU6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzY6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM3OntuOiJCcnRCZWdpblBDRENhbGNNZW1FeHQi''@;'; put 'put ''fSwxMTM4OntuOiJCcnRFbmRQQ0RDYWxjTWVtRXh0In0sMTEzOTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtc0V4dCJ9LDExNDA6e246IkJydEVuZFBDRENhbGNNZW1zRXh0In0sMTE0MTp7bjoiQnJ0UENERmllbGQxNCJ9LDExNDI6e246IkJydEJlZ2luU2xpY2VyU3R5bGVzIn0sMTE0Mzp7bjoi''@;'; put 'put ''QnJ0RW5kU2xpY2VyU3R5bGVzIn0sMTE0NDp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0NTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDY6e246IkJydENGUnVsZUV4dCJ9LDExNDc6e246IkJydEJlZ2luU1hDb25kRm10MTQifSwxMTQ4OntuOiJCcnRF''@;'; put 'put ''bmRTWENvbmRGbXQxNCJ9LDExNDk6e246IkJydEJlZ2luU1hDb25kRm10czE0In0sMTE1MDp7bjoiQnJ0RW5kU1hDb25kRm10czE0In0sMTE1Mjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZDE0In0sMTE1Mzp7bjoiQnJ0RW5kU29ydENvbmQxNCJ9LDExNTQ6e246IkJydEVuZERWYWxzMTQifSwxMTU1''@;'; put 'put ''OntuOiJCcnRFbmRJY29uU2V0MTQifSwxMTU2OntuOiJCcnRFbmREYXRhYmFyMTQifSwxMTU3OntuOiJCcnRCZWdpbkNvbG9yU2NhbGUxNCJ9LDExNTg6e246IkJydEVuZENvbG9yU2NhbGUxNCJ9LDExNTk6e246IkJydEJlZ2luU3hydWxlczE0In0sMTE2MDp7bjoiQnJ0RW5kU3hydWxlczE0''@;'; put 'put ''In0sMTE2MTp7bjoiQnJ0QmVnaW5QUnVsZTE0In0sMTE2Mjp7bjoiQnJ0RW5kUFJ1bGUxNCJ9LDExNjM6e246IkJydEJlZ2luUFJGaWx0ZXJzMTQifSwxMTY0OntuOiJCcnRFbmRQUkZpbHRlcnMxNCJ9LDExNjU6e246IkJydEJlZ2luUFJGaWx0ZXIxNCJ9LDExNjY6e246IkJydEVuZFBSRmls''@;'; put 'put ''dGVyMTQifSwxMTY3OntuOiJCcnRCZWdpblBSRkl0ZW0xNCJ9LDExNjg6e246IkJydEVuZFBSRkl0ZW0xNCJ9LDExNjk6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDczE0In0sMTE3MDp7bjoiQnJ0RW5kQ2VsbElnbm9yZUVDczE0In0sMTE3MTp7bjoiQnJ0RHhmMTQifSwxMTcyOntuOiJCcnRC''@;'; put 'put ''ZWdpbkR4RjE0cyJ9LDExNzM6e246IkJydEVuZER4ZjE0cyJ9LDExNzc6e246IkJydEZpbHRlcjE0In0sMTE3ODp7bjoiQnJ0QmVnaW5DdXN0b21GaWx0ZXJzMTQifSwxMTgwOntuOiJCcnRDdXN0b21GaWx0ZXIxNCJ9LDExODE6e246IkJydEljb25GaWx0ZXIxNCJ9LDExODI6e246IkJydFBp''@;'; put 'put ''dm90Q2FjaGVDb25uZWN0aW9uTmFtZSJ9LDIwNDg6e246IkJydEJlZ2luRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNDk6e246IkJydEVuZERlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDUwOntuOiJCcnREZWNvdXBsZWRQaXZvdENhY2hlSUQifSwyMDUxOntuOiJCcnRCZWdpblBpdm90''@;'; put 'put ''VGFibGVSZWZzIn0sMjA1Mjp7bjoiQnJ0RW5kUGl2b3RUYWJsZVJlZnMifSwyMDUzOntuOiJCcnRQaXZvdFRhYmxlUmVmIn0sMjA1NDp7bjoiQnJ0U2xpY2VyQ2FjaGVCb29rUGl2b3RUYWJsZXMifSwyMDU1OntuOiJCcnRCZWdpblN4dmNlbGxzIn0sMjA1Njp7bjoiQnJ0RW5kU3h2Y2VsbHMi''@;'; put 'put ''fSwyMDU3OntuOiJCcnRCZWdpblN4Um93In0sMjA1ODp7bjoiQnJ0RW5kU3hSb3cifSwyMDYwOntuOiJCcnRQY2RDYWxjTWVtMTUifSwyMDY3OntuOiJCcnRRc2kxNSJ9LDIwNjg6e246IkJydEJlZ2luV2ViRXh0ZW5zaW9ucyJ9LDIwNjk6e246IkJydEVuZFdlYkV4dGVuc2lvbnMifSwyMDcw''@;'; put 'put ''OntuOiJCcnRXZWJFeHRlbnNpb24ifSwyMDcxOntuOiJCcnRBYnNQYXRoMTUifSwyMDcyOntuOiJCcnRCZWdpblBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3Mzp7bjoiQnJ0RW5kUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDc1OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSURzIn0sMjA3Njp7''@;'; put 'put ''bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEIn0sMjA3Nzp7bjoiQnJ0QmVnaW5UYWJsZVNsaWNlckNhY2hlIn0sMjA3ODp7bjoiQnJ0RW5kVGFibGVTbGljZXJDYWNoZSJ9LDIwNzk6e246IkJydFN4RmlsdGVyMTUifSwyMDgwOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSURz''@;'; put 'put ''In0sMjA4MTp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgyOntuOiJCcnRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEIn0sMjA4Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSURzIn0sMjA4NDp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEcyJ9LDIwODU6e246''@;'; put 'put ''IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEIn0sMjA4Njp7bjoiQnJ0RW5kVGltZWxpbmVDYWNoZUlEIn0sMjA4Nzp7bjoiQnJ0QmVnaW5UaW1lbGluZXNFeCJ9LDIwODg6e246IkJydEVuZFRpbWVsaW5lc0V4In0sMjA4OTp7bjoiQnJ0QmVnaW5UaW1lbGluZUV4In0sMjA5MDp7bjoiQnJ0RW5k''@;'; put 'put ''VGltZWxpbmVFeCJ9LDIwOTE6e246IkJydFdvcmtCb29rUHIxNSJ9LDIwOTI6e246IkJydFBDREgxNSJ9LDIwOTM6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZSJ9LDIwOTQ6e246IkJydEVuZFRpbWVsaW5lU3R5bGUifSwyMDk1OntuOiJCcnRUaW1lbGluZVN0eWxlRWxlbWVudCJ9LDIwOTY6''@;'; put 'put ''e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk3OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTg6e246IkJydEJlZ2luVGltZWxpbmVTdHlsZXMifSwyMDk5OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlcyJ9LDIxMDA6e246IkJydEJlZ2luVGlt''@;'; put 'put ''ZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZUVsZW1lbnRzIn0sMjEwMjp7bjoiQnJ0RHhmMTUifSwyMTAzOntuOiJCcnRCZWdpbkR4ZnMxNSJ9LDIxMDQ6e246ImJydEVuZER4ZnMxNSJ9LDIxMDU6e246IkJydFNsaWNlckNhY2hlSGlkZUl0ZW1zV2l0''@;'; put 'put ''aE5vRGF0YSJ9LDIxMDY6e246IkJydEJlZ2luSXRlbVVuaXF1ZU5hbWVzIn0sMjEwNzp7bjoiQnJ0RW5kSXRlbVVuaXF1ZU5hbWVzIn0sMjEwODp7bjoiQnJ0SXRlbVVuaXF1ZU5hbWUifSwyMTA5OntuOiJCcnRCZWdpbkV4dENvbm4xNSJ9LDIxMTA6e246IkJydEVuZEV4dENvbm4xNSJ9LDIx''@;'; put 'put ''MTE6e246IkJydEJlZ2luT2xlZGJQcjE1In0sMjExMjp7bjoiQnJ0RW5kT2xlZGJQcjE1In0sMjExMzp7bjoiQnJ0QmVnaW5EYXRhRmVlZFByMTUifSwyMTE0OntuOiJCcnRFbmREYXRhRmVlZFByMTUifSwyMTE1OntuOiJCcnRUZXh0UHIxNSJ9LDIxMTY6e246IkJydFJhbmdlUHIxNSJ9LDIx''@;'; put 'put ''MTc6e246IkJydERiQ29tbWFuZDE1In0sMjExODp7bjoiQnJ0QmVnaW5EYlRhYmxlczE1In0sMjExOTp7bjoiQnJ0RW5kRGJUYWJsZXMxNSJ9LDIxMjA6e246IkJydERiVGFibGUxNSJ9LDIxMjE6e246IkJydEJlZ2luRGF0YU1vZGVsIn0sMjEyMjp7bjoiQnJ0RW5kRGF0YU1vZGVsIn0sMjEy''@;'; put 'put ''Mzp7bjoiQnJ0QmVnaW5Nb2RlbFRhYmxlcyJ9LDIxMjQ6e246IkJydEVuZE1vZGVsVGFibGVzIn0sMjEyNTp7bjoiQnJ0TW9kZWxUYWJsZSJ9LDIxMjY6e246IkJydEJlZ2luTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyNzp7bjoiQnJ0RW5kTW9kZWxSZWxhdGlvbnNoaXBzIn0sMjEyODp7bjoi''@;'; put 'put ''QnJ0TW9kZWxSZWxhdGlvbnNoaXAifSwyMTI5OntuOiJCcnRCZWdpbkVDVHh0V2l6MTUifSwyMTMwOntuOiJCcnRFbmRFQ1R4dFdpejE1In0sMjEzMTp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdDE1In0sMjEzMjp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzM6e246IkJydEJl''@;'; put 'put ''Z2luRUNUV0ZsZEluZm8xNSJ9LDIxMzQ6e246IkJydEZpZWxkTGlzdEFjdGl2ZUl0ZW0ifSwyMTM1OntuOiJCcnRQaXZvdENhY2hlSWRWZXJzaW9uIn0sMjEzNjp7bjoiQnJ0U1hESTE1In0sMjEzNzp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZ3MifSwyMTM4OntuOiJCcnRFbmRNb2Rl''@;'; put 'put ''bFRpbWVHcm91cGluZ3MifSwyMTM5OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MDp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQxOntuOiJCcnRNb2RlbFRpbWVHcm91cGluZ0NhbGNDb2wifSwzMDcyOntuOiJCcnRVaWQifSwzMDczOntuOiJCcnRSZXZpc2lv''@;'; put 'put ''blB0ciJ9LDUwOTU6e246IkJydEJlZ2luQ2FsY0ZlYXR1cmVzIn0sNTA5Njp7bjoiQnJ0RW5kQ2FsY0ZlYXR1cmVzIn0sNTA5Nzp7bjoiQnJ0Q2FsY0ZlYXR1cmUifSw2NTUzNTp7bjoiIn19LGI1PVBlKG1mLCJuIik7YjUuQnJ0RlJUQXJjaElEJD0xNjt2YXIgWDA9ezY6e246IkZvcm11bGEi''@;'; put 'put ''LGY6ejN9LDEwOntuOiJFT0YiLGY6UGR9LDEyOntuOiJDYWxjQ291bnQiLGY6aGx9LDEzOntuOiJDYWxjTW9kZSIsZjpobH0sMTQ6e246IkNhbGNQcmVjaXNpb24iLGY6U299LDE1OntuOiJDYWxjUmVmTW9kZSIsZjpTb30sMTY6e246IkNhbGNEZWx0YSIsZjptYX0sMTc6e246IkNhbGNJdGVy''@;'; put 'put ''IixmOlNvfSwxODp7bjoiUHJvdGVjdCIsZjpTb30sMTk6e246IlBhc3N3b3JkIixmOmhsfSwyMDp7bjoiSGVhZGVyIixmOlYxfSwyMTp7bjoiRm9vdGVyIixmOlYxfSwyMzp7bjoiRXh0ZXJuU2hlZXQiLGY6U219LDI0OntuOiJMYmwiLGY6Vnd9LDI1OntuOiJXaW5Qcm90ZWN0IixmOlNvfSwy''@;'; put 'put ''Njp7bjoiVmVydGljYWxQYWdlQnJlYWtzIn0sMjc6e246Ikhvcml6b250YWxQYWdlQnJlYWtzIn0sMjg6e246Ik5vdGUiLGY6ZnVuY3Rpb24gVXcoeSxQLEwpe3JldHVybiBmdW5jdGlvbiBTOSh5LFAsTCl7aWYoIShMLmJpZmY8OCkpe3ZhciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRf''@;'; put 'put ''c2hpZnQoMikscGU9eS5yZWFkX3NoaWZ0KDIpLF9lPXkucmVhZF9zaGlmdCgyKSx2ZT1WMih5LDAsTCk7cmV0dXJuIEwuYmlmZjw4JiZ5LnJlYWRfc2hpZnQoMSksW3tyOlEsYzpyZX0sdmUsX2UscGVdfX0oeSwwLEwpfX0sMjk6e246IlNlbGVjdGlvbiIsZjpmdW5jdGlvbiBTMyh5LFAsTCl7''@;'; put 'put ''cmV0dXJuIEwmJkwuYmlmZjw1Pyh5LmwrPVAse2NlbGw6e3I6MCxjOjB9fSk6KHkucmVhZF9zaGlmdCgxKSx7Y2VsbDpkaSh7cjp5LnJlYWRfc2hpZnQoMiksYzp5LnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUxOTA0IixmOlNvfSwzNTp7bjoiRXh0ZXJuTmFtZSIsZjp5OX0sMzg6''@;'; put 'put ''e246IkxlZnRNYXJnaW4iLGY6bWF9LDM5OntuOiJSaWdodE1hcmdpbiIsZjptYX0sNDA6e246IlRvcE1hcmdpbiIsZjptYX0sNDE6e246IkJvdHRvbU1hcmdpbiIsZjptYX0sNDI6e246IlByaW50Um93Q29sIixmOlNvfSw0Mzp7bjoiUHJpbnRHcmlkIixmOlNvfSw0Nzp7bjoiRmlsZVBhc3Mi''@;'; put 'put ''LGY6ZnVuY3Rpb24gTmwoeSxQLEwpe2lmKEwuZW5jKXJldHVybiBMLmVuYzt2YXIgUT17VHlwZTpMLmJpZmY+PTg/eS5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBRLlR5cGU/ZnVuY3Rpb24gZ0QoeSxQLEwsUSl7dmFyIHJlPVF8fHt9O2lmKHJlLkluZm89eS5yZWFkX3NoaWZ0KDIpLHkubC09''@;'; put 'put ''MiwxPT09cmUuSW5mbyl7aWYocmUuRGF0YT1mdW5jdGlvbiBfWih5KXt2YXIgUD17fSxMPVAuRW5jcnlwdGlvblZlcnNpb25JbmZvPUcwKHksNCk7aWYoMSE9TC5NYWpvcnx8MSE9TC5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIrTC5NYWpvcisiIDogIitMLk1pbm9y''@;'; put 'put ''O3JldHVybiBQLlNhbHQ9eS5yZWFkX3NoaWZ0KDE2KSxQLkVuY3J5cHRlZFZlcmlmaWVyPXkucmVhZF9zaGlmdCgxNiksUC5FbmNyeXB0ZWRWZXJpZmllckhhc2g9eS5yZWFkX3NoaWZ0KDE2KSxQfSh5KSxMLnBhc3N3b3JkJiZ0eXBlb2YgTzY8InUiKXt2YXIgcGU9TzYoTC5wYXNzd29yZCxy''@;'; put 'put ''ZS5EYXRhLlNhbHQsIjAwMDAwMDAwIiksX2U9dWUocmUuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcityZS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4IiksdmU9eGQucmM0KHVlKHBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksX2UpO1EudmFsaWQ9eGQubWQ1KHZlLnNsaWNlKDAs''@;'; put 'put ''MTYpKT09QnVmZmVyLmZyb20odmUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IikscmUuRGF0YS5LZXk9cGUsUS5pbnNpdHU9ZnVuY3Rpb24gb3IoeSxQKXt2YXIgTD1uZXcgQXJyYXkoMjU2KSxRPTAscmU9MCxwZT0wLF9lPTA7ZnVuY3Rpb24gdmUobnQpe2ZvcihRPTAscmU9MCxwZT0wLF9l''@;'; put 'put ''PTAscmU9MDsyNTYhPXJlOysrcmUpTFtyZV09cmU7Zm9yKHBlPTAscmU9MDsyNTYhPXJlOysrcmUpe3RyeXtwZT1wZStMW3JlXStudFtyZSVudC5sZW5ndGhdLmNoYXJDb2RlQXQoMCkmMjU1fWNhdGNoKGR0KXt0aHJvdyBjb25zb2xlLmxvZyhyZSxudFtyZSVudC5sZW5ndGhdKSxkdH1fZT1M''@;'; put 'put ''W3JlXSxMW3JlXT1MW3BlXSxMW3BlXT1fZX1yZT1wZT0wfWZ1bmN0aW9uIFNlKG50KXt2YXIgZHQ9RyhudC5sZW5ndGgpO2ZvcihRPTA7USE9bnQubGVuZ3RoOysrUSlfZT1MW3JlPXJlKzEmMjU1XSxMW3JlXT1MW3BlPShwZStMW3JlXSklMjU2XSxMW3BlXT1fZSxkdFtRXT1udFtRXV5MW0xb''@;'; put 'put ''cmVdK0xbcGVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGR0KX12YXIgSGU9eS5LZXksQmU9MDt2ZSh1ZShIZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgR2U9MDtyZXR1cm4gZnVuY3Rpb24obnQpe2lmKEdlK250Lmxlbmd0aDwxMDI0KXJldHVybiBHZSs9bnQubGVuZ3RoLFNl''@;'; put 'put ''KG50KTt2YXIgY3Q9MCxidD11ZShudC5zbGljZShjdCxjdCsoQ3Q9MTAyNC1HZSkpKTtjdCs9Q3QsR2U9MDt2YXIgRnQ9U2UoYnQpO2ZvcihjdD09bnQubGVuZ3RoJiYoKytCZSxIZT1PNihQLHkuU2FsdCxSNihCZSkpLHZlKHVlKEhlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtjdDxu''@;'; put 'put ''dC5sZW5ndGg7KXsrK0JlLEhlPU82KFAseS5TYWx0LFI2KEJlKSksdmUoQnVmZmVyLmZyb20oSGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEN0PU1hdGgubWluKDEwMjQsbnQubGVuZ3RoLWN0KTtidD11ZShudC5zbGljZShjdCxjdCtDdCkpLGN0Kz1DdCxHZT1DdCxGdD1CdWZm''@;'; put 'put ''ZXIuY29uY2F0KFtGdCxTZShidCldKX1yZXR1cm4gRnR9fShyZS5EYXRhLEwucGFzc3dvcmQpfX1lbHNlIGlmKHJlLkRhdGE9ZnVuY3Rpb24gdlooeSxQKXt2YXIgTD17fSxRPUwuRW5jcnlwdGlvblZlcnNpb25JbmZvPUcwKHksNCk7aWYoUC09NCwyIT1RLk1pbm9yKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIitRLk1pbm9yKTtpZihRLk1ham9yPjR8fFEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrUS5NYWpvcik7TC5GbGFncz15LnJlYWRfc2hpZnQoNCksUC09NDt2YXIg''@;'; put 'put ''cmU9eS5yZWFkX3NoaWZ0KDQpO3JldHVybiBQLT00LEwuRW5jcnlwdGlvbkhlYWRlcj1JOSh5LHJlKSxMLkVuY3J5cHRpb25WZXJpZmllcj1SbSh5LFAtPXJlKSxMfSh5LFApLHJlLkRhdGEmJnJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1yZS5EYXRhLkVuY3J5cHRpb25IZWFk''@;'; put 'put ''ZXIuQWxnSUQmJkwucGFzc3dvcmQmJnR5cGVvZiBncjwidSIpe3ZhciBTZT1ncihMLnBhc3N3b3JkLHJlLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLEhlPXJlLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1IZXx8''@;'; put 'put ''SGU8U2UubGVuZ3RoJiYoU2U9U2Uuc2xpY2UoMCxIZSkpO3ZhciBCZT11ZShyZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllci50b1N0cmluZygiaGV4IikrcmUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksR2U9eGQu''@;'; put 'put ''cmM0KFNlLnRvU3RyaW5nKCJiaW5hcnkiKSxCZSk7US52YWxpZD1lbChHZS5zbGljZSgwLEhlKSwiU0hBMSIpLnRvU3RyaW5nKCJoZXgiKT09R2Uuc2xpY2UoSGUpLnRvU3RyaW5nKCJoZXgiKSxyZS5EYXRhLktleT1TZSxRLnZhbGlkJiYoUS5pbnNpdHU9ZnVuY3Rpb24gamMoeSxQKXt2YXIg''@;'; put 'put ''TD1uZXcgQXJyYXkoMjU2KSxRPTAscmU9MCxwZT0wLF9lPTAsdmU9eS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zO2Z1bmN0aW9uIFNlKGR0KXtmb3IoZHQ9QnVmZmVyLmZyb20oZHQuc2xpY2UoMCx2ZSkpLFE9MCxyZT0wLHBlPTAsX2U9MCxyZT0wOzI1NiE9cmU7KytyZSlMW3JlXT1y''@;'; put 'put ''ZTtmb3IocGU9MCxyZT0wOzI1NiE9cmU7KytyZSl7dmFyIEN0PWR0W3JlJWR0Lmxlbmd0aF07cGU9cGUrTFtyZV0rKCJzdHJpbmciPT10eXBlb2YgQ3Q/Q3QuY2hhckNvZGVBdCgwKTpDdCkmMjU1LF9lPUxbcmVdLExbcmVdPUxbcGVdLExbcGVdPV9lfXJlPXBlPTB9ZnVuY3Rpb24gSGUoZHQp''@;'; put 'put ''e3ZhciBDdD1HKGR0Lmxlbmd0aCk7Zm9yKFE9MDtRIT1kdC5sZW5ndGg7KytRKV9lPUxbcmU9cmUrMSYyNTVdLExbcmVdPUxbcGU9KHBlK0xbcmVdKSUyNTZdLExbcGVdPV9lLEN0W1FdPWR0W1FdXkxbTFtyZV0rTFtwZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oQ3QpfXZhciBCZT15Lktl''@;'; put 'put ''eSxHZT0wO1NlKHVlKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBudD0wO3JldHVybiBmdW5jdGlvbihkdCl7aWYobnQrZHQubGVuZ3RoPDEwMjQpcmV0dXJuIG50Kz1kdC5sZW5ndGgsSGUoZHQpO3ZhciBjdD0xMDI0LW50LGJ0PTAsRnQ9QnVmZmVyLmZyb20oZHQuc2xpY2Uo''@;'; put 'put ''YnQsYnQrY3QpKTtidCs9Y3QsbnQ9MDt2YXIgRXQ9SGUoRnQpO2ZvcihidD09ZHQubGVuZ3RoJiYoKytHZSxCZT1ncihQLHkuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsUjYoR2UpKSxTZShCdWZmZXIuZnJvbShCZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7YnQ8ZHQubGVuZ3RoOykr''@;'; put 'put ''K0dlLEJlPWdyKFAseS5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxSNihHZSkpLFNlKEJ1ZmZlci5mcm9tKEJlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpLGN0PU1hdGgubWluKDEwMjQsZHQubGVuZ3RoLWJ0KSxGdD1CdWZmZXIuZnJvbShkdC5zbGljZShidCxidCtjdCkpLGJ0Kz1jdCxj''@;'; put 'put ''dDwxMDI0JiYobnQ9Y3QpLEV0PUJ1ZmZlci5jb25jYXQoW0V0LEhlKEZ0KV0pO3JldHVybiBFdH19KHJlLkRhdGEsTC5wYXNzd29yZCkpfXJldHVybiByZX0oeSxQLTIsTCxRKTpmdW5jdGlvbiBwRCh5LFAsTCxRKXt2YXIgcmU9e2tleTpobCh5KSx2ZXJpZmljYXRpb25CeXRlczpobCh5KX07''@;'; put 'put ''TC5wYXNzd29yZCYmKHJlLnZlcmlmaWVyPWFDKEwucGFzc3dvcmQpKSxRLnZhbGlkPXJlLnZlcmlmaWNhdGlvbkJ5dGVzPT09cmUudmVyaWZpZXIsUS52YWxpZCYmKFEuaW5zaXR1PWZ1bmN0aW9uKHksUCl7dmFyIEw9UHx8MCxRPWZEKHkpO3JldHVybiBmdW5jdGlvbihyZSl7dmFyIHBlPWZ1''@;'; put 'put ''bmN0aW9uKHksUCxMLFEscmUpe3ZhciBwZSxfZTtmb3IocmV8fChyZT1QKSxRfHwoUT1mRCgiIikpLHBlPTA7cGUhPVAubGVuZ3RoOysrcGUpX2U9MjU1JigoX2U9UFtwZV0pPj41fF9lPDwzKSxyZVtwZV09X2VePVFbTF0sTD1MKzEmMTU7cmV0dXJuW3JlLEwsUV19KDAscmUsTCxRKTtyZXR1''@;'; put 'put ''cm4gTD1wZVsxXSxwZVswXX19KEwucGFzc3dvcmQsMCkpfSh5LDAsTCxRKSxRfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gUHcoeSxQLEwpe3ZhciBRPXtzejp5LnJlYWRfc2hpZnQoMikvMjB9LHJlPWY0KHkpO3JlLmZCb2xkJiYoUS5ib2xkPTEpLHJlLmZJdGFsaWMmJihRLml0YWxpYz0x''@;'; put 'put ''KSxyZS5mVW5kZXJsaW5lJiYoUS51bmRlcmxpbmU9MSkscmUuZkNvbmRlbnNlJiYoUS5jb25kZW5zZT0xKSxyZS5mRXh0ZW5kJiYoUS5leHRlbmQ9MSkscmUuZlNoYWRvdyYmKFEuc2hhZG93PTEpLHJlLmZPdXRsaW5lJiYoUS5vdXRsaW5lPTEpLHJlLmZTdHJpa2VvdXQmJihRLnN0cmlrZT0x''@;'; put 'put ''KTt2YXIgcGU9TCYmTC5iaWZmfHw4O2lmKDIhPXBlJiYoUS5pY3Y9eS5yZWFkX3NoaWZ0KDIpLDMhPXBlJiY0IT1wZSkpe3N3aXRjaCg3MDA9PT15LnJlYWRfc2hpZnQoMikmJihRLmJvbGQ9MSkseS5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6US52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6''@;'; put 'put ''US52YWxpZ249InN1YiJ9dmFyIHZlPXkucmVhZF9zaGlmdCgxKTswIT12ZSYmKFEudW5kZXJsaW5lPXZlKTt2YXIgU2U9eS5yZWFkX3NoaWZ0KDEpO1NlPjAmJihRLmZhbWlseT1TZSk7dmFyIEhlPXkucmVhZF9zaGlmdCgxKTtIZT4wJiYoUS5jaGFyc2V0PUhlKSx5LmwrPTF9cmV0dXJuIFEu''@;'; put 'put ''bmFtZT1GZCh5LDAsTCksUX19LDUxOntuOiJQcmludFNpemUiLGY6aGx9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9uIFBvKHkpe3JldHVybntQb3M6W3kucmVhZF9zaGlmdCgyKSx5LnJlYWRfc2hpZnQoMildLERpbTpbeS5yZWFkX3NoaWZ0KDIpLHkucmVh''@;'; put 'put ''ZF9zaGlmdCgyKV0sRmxhZ3M6eS5yZWFkX3NoaWZ0KDIpLEN1clRhYjp5LnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6eS5yZWFkX3NoaWZ0KDIpLFNlbGVjdGVkOnkucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzp5LnJlYWRfc2hpZnQoMil9fX0sNjQ6e246IkJhY2t1cCIsZjpTb30sNjU6e246IlBh''@;'; put 'put ''bmUiLGY6ZnVuY3Rpb24galQoeSxQLEwpe2lmKEwmJkwuYmlmZjw1KXJldHVybnt9O3ZhciBRPXt9O3JldHVybiBRLng9eS5yZWFkX3NoaWZ0KDIpLFEueT15LnJlYWRfc2hpZnQoMiksUS5yd1RvcD15LnJlYWRfc2hpZnQoMiksUS5jb2xMZWZ0PXkucmVhZF9zaGlmdCgyKSxRLnBubkFjY3Q9''@;'; put 'put ''eS5yZWFkX3NoaWZ0KDEpLHkucmVhZF9zaGlmdCgxKSxRfX0sNjY6e246IkNvZGVQYWdlIixmOmhsfSw3Nzp7bjoiUGxzIixmOmJjfSw4MDp7bjoiRENvbiJ9LDgxOntuOiJEQ29uUmVmIn0sODI6e246IkRDb25OYW1lIn0sODU6e246IkRlZkNvbFdpZHRoIixmOmhsfSw4OTp7bjoiWENUIn0s''@;'; put 'put ''OTA6e246IkNSTiJ9LDkxOntuOiJGaWxlU2hhcmluZyJ9LDkyOntuOiJXcml0ZUFjY2VzcyIsZjpmdW5jdGlvbiB5bSh5LFAsTCl7aWYoTC5lbmMpcmV0dXJuIHkubCs9UCwiIjt2YXIgUT15LmwscmU9VjIoeSwwLEwpO3JldHVybiB5LnJlYWRfc2hpZnQoUCtRLXkubCkscmV9fSw5Mzp7bjoi''@;'; put 'put ''T2JqIixmOmZ1bmN0aW9uIFd3KHksUCxMKXtpZihMJiZMLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gWFQoeSxQLEwpe3kubCs9NDt2YXIgUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPXkucmVhZF9zaGlmdCgyKTt5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTIseS5s''@;'; put 'put ''Kz0yLHkubCs9Mix5LmwrPTIseS5sKz0yLHkubCs9Mix5LmwrPTY7dmFyIF9lPVtdO3JldHVybiBfZS5wdXNoKChNbVtRXXx8YmMpKHksUC09MzYsTCkpLHtjbW86W3JlLFEscGVdLGZ0Ol9lfX0oeSxQLEwpO3ZhciBRPVQ0KHkpLHJlPWZ1bmN0aW9uIFowKHksUCxMKXtmb3IodmFyIFE9eS5s''@;'; put 'put ''K1AscmU9W107eS5sPFE7KXt2YXIgcGU9eS5yZWFkX3NoaWZ0KDIpO3kubC09Mjt0cnl7cmVbcGVdPWJtW3BlXSh5LFEteS5sKX1jYXRjaHtyZXR1cm4geS5sPVEscmV9fXJldHVybiB5LmwhPVEmJih5Lmw9USkscmV9KHksUC0yMik7cmV0dXJue2NtbzpRLGZ0OnJlfX19LDk0OntuOiJVbmNh''@;'; put 'put ''bGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjpTb30sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjpTb30sMTI1OntuOiJDb2xJbmZvIixmOlZkfSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gY1ooeSl7eS5sKz00O3ZhciBQPVt5LnJl''@;'; put 'put ''YWRfc2hpZnQoMikseS5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UFswXSYmUFswXS0tLDAhPT1QWzFdJiZQWzFdLS0sUFswXT43fHxQWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitQLmpvaW4oInwiKSk7cmV0dXJuIFB9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBf''@;'; put 'put ''YSh5LFAsTCl7dmFyIFE9TCYmOD09TC5iaWZmfHwyPT1QP3kucmVhZF9zaGlmdCgyKTooeS5sKz1QLDApO3JldHVybntmRGlhbG9nOjE2JlEsZkJlbG93OjY0JlEsZlJpZ2h0OjEyOCZRfX19LDEzMDp7bjoiR3JpZFNldCIsZjpobH0sMTMxOntuOiJIQ2VudGVyIixmOlNvfSwxMzI6e246IlZD''@;'; put 'put ''ZW50ZXIiLGY6U299LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gSTQoeSxQLEwpe3ZhciBRPXkucmVhZF9zaGlmdCg0KSxyZT0zJnkucmVhZF9zaGlmdCgxKSxwZT15LnJlYWRfc2hpZnQoMSk7c3dpdGNoKHBlKXtjYXNlIDA6cGU9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOnBl''@;'; put 'put ''PSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6cGU9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2UgNjpwZT0iVkJBTW9kdWxlIn12YXIgX2U9RmQoeSwwLEwpO3JldHVybiAwPT09X2UubGVuZ3RoJiYoX2U9IlNoZWV0MSIpLHtwb3M6USxoczpyZSxkdDpwZSxuYW1lOl9lfX19LDEzNDp7bjoiV3Jp''@;'; put 'put ''dGVQcm90ZWN0In0sMTQwOntuOiJDb3VudHJ5IixmOmZ1bmN0aW9uIGVEKHkpe3ZhciBMLFA9WzAsMF07cmV0dXJuIEw9eS5yZWFkX3NoaWZ0KDIpLFBbMF09bG1bTF18fEwsTD15LnJlYWRfc2hpZnQoMiksUFsxXT1sbVtMXXx8TCxQfX0sMTQxOntuOiJIaWRlT2JqIixmOmhsfSwxNDQ6e246''@;'; put 'put ''IlNvcnQifSwxNDY6e246IlBhbGV0dGUiLGY6ZnVuY3Rpb24gR3coeSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxMPVtdO1AtLSA+MDspTC5wdXNoKGg5KHkpKTtyZXR1cm4gTH19LDE1MTp7bjoiU3luYyJ9LDE1Mjp7bjoiTFByIn0sMTUzOntuOiJEeEdDb2wifSwxNTQ6e246IkZuR3Jv''@;'; put 'put ''dXBOYW1lIn0sMTU1OntuOiJGaWx0ZXJNb2RlIn0sMTU2OntuOiJCdWlsdEluRm5Hcm91cENvdW50IixmOmhsfSwxNTc6e246IkF1dG9GaWx0ZXJJbmZvIn0sMTU4OntuOiJBdXRvRmlsdGVyIn0sMTYwOntuOiJTY2wiLGY6S3d9LDE2MTp7bjoiU2V0dXAiLGY6ZnVuY3Rpb24gRW0oeSxQKXt2''@;'; put 'put ''YXIgTD17fTtyZXR1cm4gUDwzMnx8KHkubCs9MTYsTC5oZWFkZXI9bWEoeSksTC5mb290ZXI9bWEoeSkseS5sKz0yKSxMfX0sMTc0OntuOiJTY2VuTWFuIn0sMTc1OntuOiJTQ0VOQVJJTyJ9LDE3Njp7bjoiU3hWaWV3In0sMTc3OntuOiJTeHZkIn0sMTc4OntuOiJTWFZJIn0sMTgwOntuOiJT''@;'; put 'put ''eEl2ZCJ9LDE4MTp7bjoiU1hMSSJ9LDE4Mjp7bjoiU1hQSSJ9LDE4NDp7bjoiRG9jUm91dGUifSwxODU6e246IlJlY2lwTmFtZSJ9LDE4OTp7bjoiTXVsUmsiLGY6ZnVuY3Rpb24gRncoeSxQKXtmb3IodmFyIEw9eS5sK1AtMixRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMiks''@;'; put 'put ''cGU9W107eS5sPEw7KXBlLnB1c2goZzkoeSkpO2lmKHkubCE9PUwpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIF9lPXkucmVhZF9zaGlmdCgyKTtpZihwZS5sZW5ndGghPV9lLXJlKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1''@;'; put 'put ''cm57cjpRLGM6cmUsQzpfZSxya3JlYzpwZX19fSwxOTA6e246Ik11bEJsYW5rIixmOmZ1bmN0aW9uIEw0KHksUCl7Zm9yKHZhciBMPXkubCtQLTIsUT15LnJlYWRfc2hpZnQoMikscmU9eS5yZWFkX3NoaWZ0KDIpLHBlPVtdO3kubDxMOylwZS5wdXNoKHkucmVhZF9zaGlmdCgyKSk7aWYoeS5s''@;'; put 'put ''IT09TCl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIHJlYWQgZXJyb3IiKTt2YXIgX2U9eS5yZWFkX3NoaWZ0KDIpO2lmKHBlLmxlbmd0aCE9X2UtcmUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOlEsYzpyZSxDOl9lLGl4ZmU6cGV9fX0s''@;'; put 'put ''MTkzOntuOiJNbXMiLGY6UGR9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hGREIifSwyMDA6e246IlNYREJCIn0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOlNvfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJp''@;'; put 'put ''bmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246IlNYVEJSR0lJVE0ifSwyMTA6e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3''@;'; put 'put ''OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOmhsfSwyMjA6e246IkRiT3JQYXJhbVFyeSJ9LDIyMTp7bjoiU2NlbmFyaW9Qcm90ZWN0IixmOlNvfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIGI5KHksUCxMKXt2YXIgUT17fTtyZXR1''@;'; put 'put ''cm4gUS5pZm50PXkucmVhZF9zaGlmdCgyKSxRLm51bUZtdElkPXkucmVhZF9zaGlmdCgyKSxRLmZsYWdzPXkucmVhZF9zaGlmdCgyKSxRLmZTdHlsZT1RLmZsYWdzPj4yJjEsUS5kYXRhPWZ1bmN0aW9uIE4xKHksUCxMLFEpe3ZhciByZT17fSxwZT15LnJlYWRfc2hpZnQoNCksX2U9eS5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLHZlPXkucmVhZF9zaGlmdCg0KSxTZT15LnJlYWRfc2hpZnQoMik7aWYocmUucGF0dGVyblR5cGU9dmlbdmU+PjI2XSwhUS5jZWxsU3R5bGVzKXJldHVybiByZTt2YXIgSGU9NyZwZTtzd2l0Y2goSGUpe2Nhc2UgMTpyZS5oYWxpZ249ImxlZnQiO2JyZWFrO2Nhc2UgMjpyZS5o''@;'; put 'put ''YWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOnJlLmhhbGlnbj0icmlnaHQifXN3aXRjaChyZS5mV3JhcD1wZT4+MyYxLEhlPXBlPj40Jjcpe2Nhc2UgMDpyZS52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOnJlLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6cmUudmFsaWduPSJib3R0''@;'; put 'put ''b20ifXJldHVybiByZS5mSnVzdExhc3Q9cGU+PjcmMSxyZS50cm90PXBlPj44JjI1NSxyZS5jSW5kZW50PXBlPj4xNiYxNSxyZS5mU2hyaW5rVG9GaXQ9cGU+PjIwJjEscmUuaVJlYWRPcmRlcj1wZT4+MjImMixyZS5mQXRyTnVtPXBlPj4yNiYxLHJlLmZBdHJGbnQ9cGU+PjI3JjEscmUuZkF0''@;'; put 'put ''ckFsYz1wZT4+MjgmMSxyZS5mQXRyQmRyPXBlPj4yOSYxLHJlLmZBdHJQYXQ9cGU+PjMwJjEscmUuZkF0clByb3Q9cGU+PjMxJjEscmUuZGdMZWZ0PTE1Jl9lLHJlLmRnUmlnaHQ9X2U+PjQmMTUscmUuZGdUb3A9X2U+PjgmMTUscmUuZGdCb3R0b209X2U+PjEyJjE1LHJlLmljdkxlZnQ9X2U+''@;'; put 'put ''PjE2JjEyNyxyZS5pY3ZSaWdodD1fZT4+MjMmMTI3LHJlLmdyYml0RGlhZz1fZT4+MzAmMyxyZS5pY3ZUb3A9MTI3JnZlLHJlLmljdkJvdHRvbT12ZT4+NyYxMjcscmUuaWN2RGlhZz12ZT4+MTQmMTI3LHJlLmRnRGlhZz12ZT4+MjEmMTUscmUuaWN2Rm9yZT0xMjcmU2UscmUuaWN2QmFjaz1T''@;'; put 'put ''ZT4+NyYxMjcscmUuZnN4QnV0dG9uPVNlPj4xNCYxLHJlfSh5LDAsMCxMKSxRfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6ZnVuY3Rpb24gaDAoeSxQKXtyZXR1cm4gMD09PVB8fHkucmVhZF9zaGlmdCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6UGR9LDIyNzp7bjoiU1hW''@;'; put 'put ''UyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBadyh5LFApe2Zvcih2YXIgTD1bXSxRPXkucmVhZF9zaGlmdCgyKTtRLS07KUwucHVzaChLaCh5KSk7cmV0dXJuIEx9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1zb0RyYXdpbmci''@;'; put 'put ''fSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwyMzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0sMjQxOntuOiJTWEV4In0sMjQyOntuOiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3OntuOiJTeFNl''@;'; put 'put ''bGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJTeEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1QiLGY6ZnVuY3Rpb24gSGwoeSxQKXtmb3IodmFyIEw9eS5sK1AsUT15LnJlYWRfc2hpZnQoNCkscmU9eS5yZWFkX3NoaWZ0KDQpLHBlPVtdLF9lPTA7X2UhPXJlJiZ5''@;'; put 'put ''Lmw8TDsrK19lKXBlLnB1c2goZ20oeSkpO3JldHVybiBwZS5Db3VudD1RLHBlLlVuaXF1ZT1yZSxwZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gVVQoeSl7dmFyIFA9THUoeSk7cmV0dXJuIFAuaXNzdD15LnJlYWRfc2hpZnQoNCksUH19LDI1NTp7bjoiRXh0U1NUIixmOmZ1bmN0''@;'; put 'put ''aW9uIGtlKHksUCl7dmFyIEw9e307cmV0dXJuIEwuZHNzdD15LnJlYWRfc2hpZnQoMikseS5sKz1QLTIsTH19LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1OntuOiJS''@;'; put 'put ''UkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOkgxfSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246IlJSRE1v''@;'; put 'put ''dmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwzNTI6e246''@;'; put 'put ''IlVzZXNFTEZzIixmOlNvfSwzNTM6e246IkRTRiIsZjpQZH0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQwODp7bjoi''@;'; put 'put ''VXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gcVQoeSxQLEwpe3ZhciBRPXkubCtQLHJl''@;'; put 'put ''PXkucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMik7aWYoTC5zYmNjaD1wZSwxMDI1PT1wZXx8MTQ4NDk9PXBlKXJldHVybltwZSxyZV07aWYocGU8MXx8cGU+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIrcGUpO2Zvcih2YXIgX2U9SGQoeSxw''@;'; put 'put ''ZSksdmU9W107UT55Lmw7KXZlLnB1c2goTjIoeSkpO3JldHVybltwZSxyZSxfZSx2ZV19fSw0MzE6e246IlByb3Q0UmV2IixmOlNvfSw0MzI6e246IkNvbmRGbXQifSw0MzM6e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rpb24g''@;'; put 'put ''SlQoeSxQLEwpe3ZhciBRPXkubCxyZT0iIixwZT0tMTt0cnl7eS5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKEwubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXSk/eS5sKz02OmZ1bmN0aW9uIER1KHkpe3ZhciBQPXkucmVhZF9zaGlmdCgxKTt5LmwrKzt2YXIgTD15LnJl''@;'; put 'put ''YWRfc2hpZnQoMik7eS5sKz0yfSh5KTt2YXIgU2U9eS5yZWFkX3NoaWZ0KDIpO3kucmVhZF9zaGlmdCgyKSxwZT15LnJlYWRfc2hpZnQoMik7dmFyIEJlPXkucmVhZF9zaGlmdCgyKTt5LmwrPUJlO2Zvcih2YXIgR2U9MTtHZTx5LmxlbnMubGVuZ3RoLTE7KytHZSl7aWYoeS5sLVEhPXkubGVu''@;'; put 'put ''c1tHZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbnQ9eVt5LmxdO2lmKChyZSs9SGQoeSx5LmxlbnNbR2UrMV0teS5sZW5zW0dlXS0xKSkubGVuZ3RoPj0obnQ/U2U6MipTZSkpYnJlYWt9aWYocmUubGVuZ3RoIT09U2UmJnJlLmxlbmd0aCE9PTIq''@;'; put 'put ''U2UpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK1NlKyIgIT0gIityZS5sZW5ndGgpO3JldHVybiB5Lmw9UStQLHt0OnJlLGlmbnQ6cGV9fWNhdGNoe3JldHVybiB5Lmw9UStQLHt0OnJlLGlmbnQ6cGV9fX19LDQzOTp7bjoiUmVmcmVzaEFsbCIsZjpTb30sNDQwOntuOiJITGluayIsZjpm''@;'; put 'put ''dW5jdGlvbiBldSh5LFApe3ZhciBMPUtoKHkpO3kubCs9MTY7dmFyIFE9ZnVuY3Rpb24gSXUoeSxQKXt2YXIgTD15LmwrUCxRPXkucmVhZF9zaGlmdCg0KTtpZigyIT09USl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzdHJlYW1WZXJzaW9uOiAiK1EpO3ZhciByZT15LnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7eS5sKz0yO3ZhciBwZSxfZSx2ZSxTZSxCZSxHZSxIZT0iIjsxNiZyZSYmKHBlPUE0KHkpKSwxMjgmcmUmJihfZT1BNCh5KSksMjU3PT0oMjU3JnJlKSYmKHZlPUE0KHkpKSwxPT0oMjU3JnJlKSYmKFNlPWZ1bmN0aW9uIHYzKHksUCl7dmFyIEw9eS5yZWFkX3NoaWZ0KDE2KTtzd2l0''@;'; put 'put ''Y2goTCl7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1bmN0aW9uIG0zKHkpe3ZhciBQPXkucmVhZF9zaGlmdCg0KSxMPXkubCxRPSExO1A+MjQmJih5LmwrPVAtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PXkucmVhZF9zaGlm''@;'; put 'put ''dCgxNikmJihRPSEwKSx5Lmw9TCk7dmFyIHJlPXkucmVhZF9zaGlmdCgoUT9QLTI0OlApPj4xLCJ1dGYxNmxlIikucmVwbGFjZSh2LCIiKTtyZXR1cm4gUSYmKHkubCs9MjQpLHJlfSh5KTtjYXNlIjAzMDMwMDAwMDAwMDAwMDBjMDAwMDAwMDAwMDAwMDQ2IjpyZXR1cm4gZnVuY3Rpb24gZmwo''@;'; put 'put ''eSl7Zm9yKHZhciBQPXkucmVhZF9zaGlmdCgyKSxMPSIiO1AtLSA+MDspTCs9Ii4uLyI7dmFyIFE9eS5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKTtpZih5LmwrPTIsNTcwMDUhPXkucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO2lmKDA9PT15LnJl''@;'; put 'put ''YWRfc2hpZnQoNCkpcmV0dXJuIEwrUS5yZXBsYWNlKC9cXC9nLCIvIik7dmFyIHBlPXkucmVhZF9zaGlmdCg0KTtpZigzIT15LnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtyZXR1cm4gTCt5LnJlYWRfc2hpZnQocGU+PjEsInV0ZjE2bGUiKS5yZXBs''@;'; put 'put ''YWNlKHYsIiIpfSh5KTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTW9uaWtlciAiK0wpfX0oeSkpLDgmcmUmJihIZT1BNCh5KSksMzImcmUmJihCZT15LnJlYWRfc2hpZnQoMTYpKSw2NCZyZSYmKEdlPUNjKHkpKSx5Lmw9TDt2YXIgbnQ9X2V8fHZlfHxTZXx8IiI7bnQm''@;'; put 'put ''JkhlJiYobnQrPSIjIitIZSksbnR8fChudD0iIyIrSGUpLDImcmUmJiIvIj09bnQuY2hhckF0KDApJiYiLyIhPW50LmNoYXJBdCgxKSYmKG50PSJmaWxlOi8vIitudCk7dmFyIGR0PXtUYXJnZXQ6bnR9O3JldHVybiBCZSYmKGR0Lmd1aWQ9QmUpLEdlJiYoZHQudGltZT1HZSkscGUmJihkdC5U''@;'; put 'put ''b29sdGlwPXBlKSxkdH0oeSxQLTI0KTtyZXR1cm5bTCxRXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJDb2RlTmFtZSIsZjpOMn0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpobH0sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoi''@;'; put 'put ''RXhjZWw5RmlsZSIsZjpQZH0sNDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBmMCh5KXtyZXR1cm4geS5yZWFkX3NoaWZ0KDIpLHkucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6UGR9LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpCdH0sNTEzOntuOiJCbGFuayIsZjpx''@;'; put 'put ''d30sNTE1OntuOiJOdW1iZXIiLGY6ZnVuY3Rpb24gTncoeSxQLEwpe0wuYmlmZmd1ZXNzJiYyPT1MLmJpZmYmJihMLmJpZmY9NSk7dmFyIFE9THUoeSkscmU9bWEoeSk7cmV0dXJuIFEudmFsPXJlLFF9fSw1MTY6e246IkxhYmVsIixmOmZ1bmN0aW9uIFlUKHksUCxMKXtMLmJpZmZndWVzcyYm''@;'; put 'put ''Mj09TC5iaWZmJiYoTC5iaWZmPTUpO3ZhciByZT1MdSh5KTsyPT1MLmJpZmYmJnkubCsrO3ZhciBwZT1OMih5LDAsTCk7cmV0dXJuIHJlLnZhbD1wZSxyZX19LDUxNzp7bjoiQm9vbEVyciIsZjpOY30sNTE5OntuOiJTdHJpbmciLGY6aUR9LDUyMDp7bjoiUm93IixmOmZ1bmN0aW9uICRlKHkp''@;'; put 'put ''e3ZhciBQPXt9O1Aucj15LnJlYWRfc2hpZnQoMiksUC5jPXkucmVhZF9zaGlmdCgyKSxQLmNudD15LnJlYWRfc2hpZnQoMiktUC5jO3ZhciBMPXkucmVhZF9zaGlmdCgyKTt5LmwrPTQ7dmFyIFE9eS5yZWFkX3NoaWZ0KDEpO3kubCs9MTt2YXIgcmU9eS5yZWFkX3NoaWZ0KDIpO3JldHVybiBQ''@;'; put 'put ''Lml4ZmU9NDA5NSZyZSw3JlEmJihQLmxldmVsPTcmUSksMzImUSYmKFAuaGlkZGVuPSEwKSw2NCZRJiYoUC5ocHQ9TC8yMCksUH19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOmp3fSw1NDk6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6VzB9LDU2Njp7bjoiVGFibGUifSw1NzQ6''@;'; put 'put ''e246IldpbmRvdzIiLGY6ZnVuY3Rpb24gbFooeSxQLEwpe2lmKEwmJkwuYmlmZj49MiYmTC5iaWZmPDUpcmV0dXJue307dmFyIFE9eS5yZWFkX3NoaWZ0KDIpO3JldHVybntSVEw6NjQmUSxncmlkOiEhKDImUSksZnJvemVuOiEhKDgmUSl9fX0sNjM4OntuOiJSSyIsZjpmdW5jdGlvbiBTYyh5''@;'; put 'put ''KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hpZnQoMiksUT1nOSh5KTtyZXR1cm57cjpQLGM6TCxpeGZlOlFbMF0scmtudW06UVsxXX19fSw2NTk6e246IlN0eWxlIixmOmZ1bmN0aW9uICRUKHksUCxMKXtyZXR1cm4geS5sKz1QLHt9fX0sMTA0ODp7bjoiQmlnTmFtZSJ9LDEw''@;'; put 'put ''NTQ6e246IkZvcm1hdCIsZjpmdW5jdGlvbiBHVCh5LFAsTCl7cmV0dXJuW3kucmVhZF9zaGlmdCgyKSxWMih5LDAsTCldfX0sMTA4NDp7bjoiQ29udGludWVCaWdOYW1lIn0sMTIxMjp7bjoiU2hyRm1sYSIsZjpmdW5jdGlvbiBDOSh5LFAsTCl7dmFyIFE9X20oeSk7eS5sKys7dmFyIHJlPXku''@;'; put 'put ''cmVhZF9zaGlmdCgxKTtyZXR1cm5baTUoeSxQLT04LEwpLHJlLFFdfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIFFhKHksUCl7eS5yZWFkX3NoaWZ0KDIpO3ZhciBMPUtoKHkpLFE9eS5yZWFkX3NoaWZ0KChQLTEwKS8yLCJkYmNzLWNvbnQiKTtyZXR1cm5bTCxRPVEucmVw''@;'; put 'put ''bGFjZSh2LCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0sMjA1NTp7bjoiUXNpZiJ9LDIwNTY6e246IlJSRFRRU0lGIn0s''@;'; put 'put ''MjA1Nzp7bjoiQk9GIixmOlJ1fSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9LDIwNjQ6e246IlNYVmlld0V4OSJ9LDIwNjY6e246IkNvbnRp''@;'; put 'put ''bnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246IlN0YXJ0T2JqZWN0In0sMjEzMzp7bjoiRW5kT2JqZWN0In0s''@;'; put 'put ''MjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0Nzp7bjoiQm9va0V4dCIscjoxMn0sMjE0ODp7bjoiU1hBZGRs''@;'; put 'put ''In0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOlBkfSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50cyJ9LDIxNTY6e246IkNlbGxXYXRjaCJ9LDIxNjE6e246IkZl''@;'; put 'put ''YXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVhdHVyZTEyIn0sMjE2OTp7bjoiQ29uZEZtdDEyIn0sMjE3MDp7''@;'; put 'put ''bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiB4bSh5KXt5LmwrPTI7dmFyIFA9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIFAuY3hmcz15LnJlYWRfc2hpZnQoMiksUC5jcmM9eS5yZWFkX3NoaWZ0KDQpLFB9LHI6MTJ9LDIxNzM6e246IlhGRXh0Iixm''@;'; put 'put ''OmZ1bmN0aW9uIHpEKHksUCl7eS5sKz0yO3ZhciBRPXkucmVhZF9zaGlmdCgyKTt5LmwrPTI7Zm9yKHZhciByZT15LnJlYWRfc2hpZnQoMikscGU9W107cmUtLSA+MDspcGUucHVzaChqRCh5KSk7cmV0dXJue2l4ZmU6USxleHQ6cGV9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwy''@;'; put 'put ''MTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9''@;'; put 'put ''LDIxODg6e246IkNvbXBhdDEyIixmOlNvLHI6MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNo''@;'; put 'put ''In0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5jdGlvbiBCdyh5LFAsTCl7aWYoIShMLmJpZmY8OCkpe3ZhciBRPXkucmVhZF9zaGlmdCgyKSxyZT15LnJlYWRfc2hpZnQoMik7cmV0dXJuW0hkKHksUSxMKSxIZCh5LHJlLEwpXX15LmwrPVB9LHI6MTJ9LDIxOTc6e246IlNvcnREYXRhIn0sMjE5''@;'; put 'put ''ODp7bjoiVGhlbWUiLGY6ZnVuY3Rpb24gJG0oeSxQLEwpe3ZhciBRPXkubCtQO2lmKDEyNDIyNiE9PXkucmVhZF9zaGlmdCg0KSl7aWYoIUwuY2VsbFN0eWxlcylyZXR1cm4gdm9pZCh5Lmw9USk7dmFyIF9lLHBlPXkuc2xpY2UoeS5sKTt5Lmw9UTt0cnl7X2U9eG4ocGUse3R5cGU6ImFycmF5''@;'; put 'put ''In0pfWNhdGNoe3JldHVybn12YXIgdmU9SnQoX2UsInRoZW1lL3RoZW1lL3RoZW1lMS54bWwiLCEwKTtpZih2ZSlyZXR1cm4gR20odmUsTCl9fSxyOjEyfSwyMTk5OntuOiJHVUlEVHlwZUxpYiJ9LDIyMDA6e246IkZuR3JwMTIifSwyMjAxOntuOiJOYW1lRm5HcnAxMiJ9LDIyMDI6e246Ik1U''@;'; put 'put ''UlNldHRpbmdzIixmOmZ1bmN0aW9uIHp3KHkpe3JldHVyblswIT09eS5yZWFkX3NoaWZ0KDQpLDAhPT15LnJlYWRfc2hpZnQoNCkseS5yZWFkX3NoaWZ0KDQpXX0scjoxMn0sMjIwMzp7bjoiQ29tcHJlc3NQaWN0dXJlcyIsZjpQZH0sMjIwNDp7bjoiSGVhZGVyRm9vdGVyIn0sMjIwNTp7bjoi''@;'; put 'put ''Q3J0TGF5b3V0MTIifSwyMjA2OntuOiJDcnRNbEZydCJ9LDIyMDc6e246IkNydE1sRnJ0Q29udGludWUifSwyMjExOntuOiJGb3JjZUZ1bGxDYWxjdWxhdGlvbiIsZjpmdW5jdGlvbiBMdCh5KXt2YXIgUD1mdW5jdGlvbiBmOSh5KXt2YXIgUD15LnJlYWRfc2hpZnQoMiksTD15LnJlYWRfc2hp''@;'; put 'put ''ZnQoMik7cmV0dXJuIHkubCs9OCx7dHlwZTpQLGZsYWdzOkx9fSh5KTtpZigyMjExIT1QLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEZ1dHVyZSBSZWNvcmQgIitQLnR5cGUpO3JldHVybiAwIT09eS5yZWFkX3NoaWZ0KDQpfX0sMjIxMjp7bjoiU2hhcGVQcm9wc1N0cmVhbSJ9LDIy''@;'; put 'put ''MTM6e246IlRleHRQcm9wc1N0cmVhbSJ9LDIyMTQ6e246IlJpY2hUZXh0U3RyZWFtIn0sMjIxNTp7bjoiQ3J0TGF5b3V0MTJBIn0sNDA5Nzp7bjoiVW5pdHMifSw0MDk4OntuOiJDaGFydCJ9LDQwOTk6e246IlNlcmllcyJ9LDQxMDI6e246IkRhdGFGb3JtYXQifSw0MTAzOntuOiJMaW5lRm9y''@;'; put 'put ''bWF0In0sNDEwNTp7bjoiTWFya2VyRm9ybWF0In0sNDEwNjp7bjoiQXJlYUZvcm1hdCJ9LDQxMDc6e246IlBpZUZvcm1hdCJ9LDQxMDg6e246IkF0dGFjaGVkTGFiZWwifSw0MTA5OntuOiJTZXJpZXNUZXh0In0sNDExNjp7bjoiQ2hhcnRGb3JtYXQifSw0MTE3OntuOiJMZWdlbmQifSw0MTE4''@;'; put 'put ''OntuOiJTZXJpZXNMaXN0In0sNDExOTp7bjoiQmFyIn0sNDEyMDp7bjoiTGluZSJ9LDQxMjE6e246IlBpZSJ9LDQxMjI6e246IkFyZWEifSw0MTIzOntuOiJTY2F0dGVyIn0sNDEyNDp7bjoiQ3J0TGluZSJ9LDQxMjU6e246IkF4aXMifSw0MTI2OntuOiJUaWNrIn0sNDEyNzp7bjoiVmFsdWVS''@;'; put 'put ''YW5nZSJ9LDQxMjg6e246IkNhdFNlclJhbmdlIn0sNDEyOTp7bjoiQXhpc0xpbmUifSw0MTMwOntuOiJDcnRMaW5rIn0sNDEzMjp7bjoiRGVmYXVsdFRleHQifSw0MTMzOntuOiJUZXh0In0sNDEzNDp7bjoiRm9udFgiLGY6aGx9LDQxMzU6e246Ik9iamVjdExpbmsifSw0MTQ2OntuOiJGcmFt''@;'; put 'put ''ZSJ9LDQxNDc6e246IkJlZ2luIn0sNDE0ODp7bjoiRW5kIn0sNDE0OTp7bjoiUGxvdEFyZWEifSw0MTU0OntuOiJDaGFydDNkIn0sNDE1Njp7bjoiUGljRiJ9LDQxNTc6e246IkRyb3BCYXIifSw0MTU4OntuOiJSYWRhciJ9LDQxNTk6e246IlN1cmYifSw0MTYwOntuOiJSYWRhckFyZWEifSw0''@;'; put 'put ''MTYxOntuOiJBeGlzUGFyZW50In0sNDE2Mzp7bjoiTGVnZW5kRXhjZXB0aW9uIn0sNDE2NDp7bjoiU2h0UHJvcHMiLGY6ZnVuY3Rpb24gQW0oeSxQLEwpe3ZhciBRPXthcmVhOiExfTtpZig1IT1MLmJpZmYpcmV0dXJuIHkubCs9UCxRO3ZhciByZT15LnJlYWRfc2hpZnQoMSk7cmV0dXJuIHku''@;'; put 'put ''bCs9MywxNiZyZSYmKFEuYXJlYT0hMCksUX19LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9LDQxNzU6e246IlBv''@;'; put 'put ''cyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0Q2xpZW50IixmOmZ1bmN0aW9uIG5EKHkpe2Zvcih2YXIgUD15LnJlYWRfc2hpZnQoMiksTD1bXTtQLS0gPjA7KUwucHVzaChoOSh5KSk7cmV0dXJuIEx9fSw0''@;'; put 'put ''MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQxOTg6e246IkdlbEZy''@;'; put 'put ''YW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6QnR9LDE6e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIsZjpmdW5jdGlvbiBzRCh5KXt2YXIgUD1MdSh5KTsrK3kubDt2YXIgTD15LnJlYWRfc2hpZnQoMik7cmV0''@;'; put 'put ''dXJuIFAudD0ibiIsUC52YWw9TCxQfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24geDkoeSl7dmFyIFA9THUoeSk7Kyt5Lmw7dmFyIEw9bWEoeSk7cmV0dXJuIFAudD0ibiIsUC52YWw9TCxQfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gdVooeSxQLEwpe0wuYmlmZmd1ZXNzJiY1''@;'; put 'put ''PT1MLmJpZmYmJihMLmJpZmY9Mik7dmFyIFE9THUoeSk7Kyt5Lmw7dmFyIHJlPVYyKHksMCxMKTtyZXR1cm4gUS50PSJzdHIiLFEudmFsPXJlLFF9fSw1OntuOiJCb29sRXJyIixmOk5jfSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gaFooeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDEpO3JldHVy''@;'; put 'put ''biAwPT09UD8oeS5sKyssIiIpOnkucmVhZF9zaGlmdChQLCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9GIixmOlJ1fSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6aGx9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjpUc30sMzE6e246IkJJRkYyRk1U''@;'; put 'put ''Q05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntuOiJBcnJheSIsZjpqd30sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6VzB9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIGZaKHksUCl7eS5sKz02LHkubCs9Mix5LmwrPTEseS5sKz0z''@;'; put 'put ''LHkubCs9MSx5LmwrPVAtMTN9fSw2Mjp7bjoiQklGRjJXSU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6aGx9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3''@;'; put 'put ''OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gb0QoeSl7dmFyIFA9eS5yZWFkX3NoaWZ0KDIpLEw9eS5yZWFkX3NoaWZ0KDIpLFE9eS5yZWFkX3NoaWZ0KDQpLHJlPXtmbXQ6UCxlbnY6TCxsZW46USxkYXRhOnkuc2xpY2UoeS5sLHkubCtRKX07cmV0dXJuIHkubCs9USxyZX19LDEzNTp7bjoiQWRk''@;'; put 'put ''aW4ifSwxMzY6e246IkVkZyJ9LDEzNzp7bjoiUHViIn0sMTQ1OntuOiJTdWIifSwxNDg6e246IkxIUmVjb3JkIn0sMTQ5OntuOiJMSE5HcmFwaCJ9LDE1MDp7bjoiU291bmQifSwxNjk6e246IkNvb3JkTGlzdCJ9LDE3MTp7bjoiR0NXIn0sMTg4OntuOiJTaHJGbWxhIn0sMTkxOntuOiJUb29s''@;'; put 'put ''YmFySGRyIn0sMTkyOntuOiJUb29sYmFyRW5kIn0sMTk0OntuOiJBZGRNZW51In0sMTk1OntuOiJEZWxNZW51In0sMjE0OntuOiJSU3RyaW5nIixmOmZ1bmN0aW9uIFh3KHksUCxMKXt2YXIgUT15LmwrUCxyZT1MdSh5KSxwZT15LnJlYWRfc2hpZnQoMiksX2U9SGQoeSxwZSxMKTtyZXR1cm4g''@;'; put 'put ''eS5sPVEscmUudD0ic3RyIixyZS52YWw9X2UscmV9fSwyMjM6e246IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjp6M30sNTIxOntuOiJCT0YiLGY6UnV9LDUzNjp7bjoiTGJs''@;'; put 'put ''IixmOlZ3fSw1NDc6e246IkV4dGVybk5hbWUiLGY6eTl9LDU2MTp7bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6ejN9LDEwMzM6e246IkJPRiIsZjpSdX0sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdElu''@;'; put 'put ''Zm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0s''@;'; put 'put ''MjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxTTT1QZShYMCwibiIpO2Z1bmN0aW9uIFNpKHksUCxMLFEpe3ZhciBy''@;'; put 'put ''ZT0rUHx8K1NNW1BdO2lmKCFpc05hTihyZSkpe3ZhciBwZT1RfHwoTHx8W10pLmxlbmd0aHx8MCxfZT15Lm5leHQoNCk7X2Uud3JpdGVfc2hpZnQoMixyZSksX2Uud3JpdGVfc2hpZnQoMixwZSkscGU+MCYmTmgoTCkmJnkucHVzaChMKX19ZnVuY3Rpb24gSjAoeSxQLEwpe3JldHVybiB5fHwo''@;'; put 'put ''eT1mcig3KSkseS53cml0ZV9zaGlmdCgyLFApLHkud3JpdGVfc2hpZnQoMixMKSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgxLDApLHl9ZnVuY3Rpb24gcl8oeSxQLEwsUSl7aWYobnVsbCE9UC52KXN3aXRjaChQLnQpe2Nhc2UiZCI6Y2FzZSJuIjp2YXIgcmU9ImQiPT1QLnQ/''@;'; put 'put ''VWUoSHQoUC52KSk6UC52O3JldHVybiB2b2lkKHJlPT0oMHxyZSkmJnJlPj0wJiZyZTw2NTUzNj9TaSh5LDIsZnVuY3Rpb24gYUQoeSxQLEwpe3ZhciBRPWZyKDkpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCgyLEwpLFF9KEwsUSxyZSkpOlNpKHksMyxmdW5jdGlvbiBkWih5LFAs''@;'; put 'put ''TCl7dmFyIFE9ZnIoMTUpO3JldHVybiBKMChRLHksUCksUS53cml0ZV9zaGlmdCg4LEwsImYiKSxRfShMLFEscmUpKSk7Y2FzZSJiIjpjYXNlImUiOnJldHVybiB2b2lkIFNpKHksNSxmdW5jdGlvbiBuXyh5LFAsTCxRKXt2YXIgcmU9ZnIoOSk7cmV0dXJuIEowKHJlLHksUCksZDkoTCxRfHwi''@;'; put 'put ''YiIscmUpLHJlfShMLFEsUC52LFAudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2b2lkIFNpKHksNCxmdW5jdGlvbiBRTCh5LFAsTCl7dmFyIFE9ZnIoOCsyKkwubGVuZ3RoKTtyZXR1cm4gSjAoUSx5LFApLFEud3JpdGVfc2hpZnQoMSxMLmxlbmd0aCksUS53cml0ZV9zaGlmdChMLmxl''@;'; put 'put ''bmd0aCxMLCJzYmNzIiksUS5sPFEubGVuZ3RoP1Euc2xpY2UoMCxRLmwpOlF9KEwsUSwoUC52fHwiIikuc2xpY2UoMCwyNTUpKSl9U2koeSwxLEowKG51bGwsTCxRKSl9ZnVuY3Rpb24gclIoeSxQLEwsUSxyZSl7dmFyIHBlPTE2K2d1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLFAscmUp''@;'; put 'put ''O2lmKG51bGwhPVAudnx8UC5iZilpZihQLmJmKVNpKHksIkZvcm11bGEiLGZ1bmN0aW9uIFdaKHksUCxMLFEscmUpe3ZhciBwZT16MChQLEwscmUpLF9lPWZ1bmN0aW9uIHB2KHkpe2lmKG51bGw9PXkpe3ZhciBQPWZyKDgpO3JldHVybiBQLndyaXRlX3NoaWZ0KDEsMyksUC53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDApLFAud3JpdGVfc2hpZnQoMiwwKSxQLndyaXRlX3NoaWZ0KDIsMCksUC53cml0ZV9zaGlmdCgyLDY1NTM1KSxQfXJldHVybiBQYygibnVtYmVyIj09dHlwZW9mIHk/eTowKX0oeS52KSx2ZT1mcig2KTt2ZS53cml0ZV9zaGlmdCgyLDMzKSx2ZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2''@;'; put 'put ''YXIgSGU9ZnIoeS5iZi5sZW5ndGgpLEJlPTA7QmU8eS5iZi5sZW5ndGg7KytCZSlIZVtCZV09eS5iZltCZV07cmV0dXJuIFMoW3BlLF9lLHZlLEhlXSl9KFAsTCxRLDAscGUpKTtlbHNlIHN3aXRjaChQLnQpe2Nhc2UiZCI6Y2FzZSJuIjpTaSh5LCJOdW1iZXIiLGZ1bmN0aW9uIEMzKHksUCxM''@;'; put 'put ''LFEpe3ZhciByZT1mcigxNCk7cmV0dXJuIHowKHksUCxRLHJlKSxQYyhMLHJlKSxyZX0oTCxRLCJkIj09UC50P1VlKEh0KFAudikpOlAudixwZSkpO2JyZWFrO2Nhc2UiYiI6Y2FzZSJlIjpTaSh5LDUxNyxmdW5jdGlvbiBOZCh5LFAsTCxRLHJlLHBlKXt2YXIgX2U9ZnIoOCk7cmV0dXJuIHow''@;'; put 'put ''KHksUCxRLF9lKSxkOShMLHBlLF9lKSxfZX0oTCxRLFAudixwZSwwLFAudCkpO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOmlmKHJlLmJvb2tTU1Qpe3ZhciB2ZT13dihyZS5TdHJpbmdzLFAudixQLlI/UC5yPUpoKFAuUik6bnVsbCxyZS5yZXZTdHJpbmdzKTtpZihQLlIpZm9yKHZhciBTZT0w''@;'; put 'put ''O1NlPFAuUi5sZW5ndGg7KytTZSlQLlJbU2VdLnMmJmd1KHJlLmNlbGxYZnMscmUuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpQLlJbU2VdLnN9LHJlKTtTaSh5LCJMYWJlbFNzdCIsZnVuY3Rpb24gWlQoeSxQLEwsUSl7dmFyIHJlPWZyKDEwKTtyZXR1cm4gejAoeSxQLFEscmUpLHJlLndy''@;'; put 'put ''aXRlX3NoaWZ0KDQsTCkscmV9KEwsUSx2ZSxwZSkpfWVsc2UgU2koeSwiTGFiZWwiLGZ1bmN0aW9uIFdUKHksUCxMLFEscmUpe3ZhciBwZT0hcmV8fDg9PXJlLmJpZmYsX2U9ZnIoK3BlKzgrKDErcGUpKkwubGVuZ3RoKTtyZXR1cm4gejAoeSxQLFEsX2UpLF9lLndyaXRlX3NoaWZ0KDIsTC5s''@;'; put 'put ''ZW5ndGgpLHBlJiZfZS53cml0ZV9zaGlmdCgxLDEpLF9lLndyaXRlX3NoaWZ0KCgxK3BlKSpMLmxlbmd0aCxMLHBlPyJ1dGYxNmxlIjoic2JjcyIpLF9lfShMLFEsKFAudnx8IiIpLnNsaWNlKDAsMjU1KSxwZSxyZSkpO2JyZWFrO2RlZmF1bHQ6U2koeSwiQmxhbmsiLHowKEwsUSxwZSkpfWVs''@;'; put 'put ''c2UgU2koeSwiQmxhbmsiLHowKEwsUSxwZSkpfWZ1bmN0aW9uIGlSKHksUCxMKXt2YXIgQmUsUT15YygpLHJlPUwuU2hlZXROYW1lc1t5XSxwZT1MLlNoZWV0c1tyZV18fHt9LF9lPShMfHx7fSkuV29ya2Jvb2t8fHt9LHZlPShfZS5TaGVldHN8fFtdKVt5XXx8e30sU2U9QXJyYXkuaXNBcnJh''@;'; put 'put ''eShwZSksSGU9OD09UC5iaWZmLEdlPSIiLG50PVtdLGR0PU9pKHBlWyIhcmVmIl18fCJBMSIpLEN0PUhlPzY1NTM2OjE2Mzg0O2lmKGR0LmUuYz4yNTV8fGR0LmUucj49Q3Qpe2lmKFAuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisocGVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZv''@;'; put 'put ''cm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7ZHQuZS5jPU1hdGgubWluKGR0LmUuYywyNTUpLGR0LmUucj1NYXRoLm1pbihkdC5lLmMsQ3QtMSl9U2koUSwyMDU3LEQ0KDAsMTYsUCkpLFNpKFEsIkNhbGNNb2RlIixmdSgxKSksU2koUSwiQ2FsY0NvdW50IixmdSgxMDApKSxTaShRLCJDYWxjUmVm''@;'; put 'put ''TW9kZSIsUGwoITApKSxTaShRLCJDYWxjSXRlciIsUGwoITEpKSxTaShRLCJDYWxjRGVsdGEiLFBjKC4wMDEpKSxTaShRLCJDYWxjU2F2ZVJlY2FsYyIsUGwoITApKSxTaShRLCJQcmludFJvd0NvbCIsUGwoITEpKSxTaShRLCJQcmludEdyaWQiLFBsKCExKSksU2koUSwiR3JpZFNldCIsZnUo''@;'; put 'put ''MSkpLFNpKFEsIkd1dHMiLGZ1bmN0aW9uIEh3KHkpe3ZhciBQPWZyKDgpO3JldHVybiBQLndyaXRlX3NoaWZ0KDQsMCksUC53cml0ZV9zaGlmdCgyLHlbMF0/eVswXSsxOjApLFAud3JpdGVfc2hpZnQoMix5WzFdP3lbMV0rMTowKSxQfShbMCwwXSkpLFNpKFEsIkhDZW50ZXIiLFBsKCExKSks''@;'; put 'put ''U2koUSwiVkNlbnRlciIsUGwoITEpKTt2YXIgY3Q9cGVbIiFwcmludCJdJiZwZVsiIXByaW50Il0ubWFyZ2luc3x8cGVbIiFtYXJnaW5zIl07Y3QmJihudWxsIT1jdC5sZWZ0JiZTaShRLCJMZWZ0TWFyZ2luIixQYyhjdC5sZWZ0KSksbnVsbCE9Y3QucmlnaHQmJlNpKFEsIlJpZ2h0TWFyZ2lu''@;'; put 'put ''IixQYyhjdC5yaWdodCkpLG51bGwhPWN0LnRvcCYmU2koUSwiVG9wTWFyZ2luIixQYyhjdC50b3ApKSxudWxsIT1jdC5ib3R0b20mJlNpKFEsIkJvdHRvbU1hcmdpbiIsUGMoY3QuYm90dG9tKSksKG51bGwhPWN0LmhlYWRlcnx8bnVsbCE9Y3QuZm9vdGVyKSYmU2koUSwiU2V0dXAiLGZ1bmN0''@;'; put 'put ''aW9uIGttKHksUCl7dmFyIEw9ZnIoMzQpLFE9ITEscmU9NzA7cmV0dXJuImxhbmRzY2FwZSI9PShQLnByb3BzfHx7fSkub3JpZW50YXRpb24mJihRPSEwLHJlJj0tNjcpLFEmJihyZSY9LTUpLEwud3JpdGVfc2hpZnQoMiwxKSxMLndyaXRlX3NoaWZ0KDIsMTAwKSxMLndyaXRlX3NoaWZ0KDIs''@;'; put 'put ''MCksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwwKSxMLndyaXRlX3NoaWZ0KDEscmUpLEwud3JpdGVfc2hpZnQoMSwwKSxMLndyaXRlX3NoaWZ0KDIsNjAwKSxMLndyaXRlX3NoaWZ0KDIsNjAwKSxQYyhudWxsPT15LmhlYWRlcj8uNTp5LmhlYWRlcixMKSxQYyhudWxsPT15''@;'; put 'put ''LmZvb3Rlcj8uNTp5LmZvb3RlcixMKSxMLndyaXRlX3NoaWZ0KDIsMSksTH0oY3QscGVbIiFwcmludCJdfHx7fSkpKSxIZSYmZnVuY3Rpb24geE0oeSxQLEwpe2lmKFApe3ZhciBRPTA7UC5mb3JFYWNoKGZ1bmN0aW9uKHJlLHBlKXsrK1E8PTI1NiYmcmUmJihyZS5hdXRvJiZOaShMLHJlLHBl''@;'; put 'put ''KSxTaSh5LCJDb2xJbmZvIixmdW5jdGlvbiByRCh5LFApe3ZhciBMPWZyKDEyKTtMLndyaXRlX3NoaWZ0KDIsUCksTC53cml0ZV9zaGlmdCgyLFApLEwud3JpdGVfc2hpZnQoMiwyNTYqeS53aWR0aCksTC53cml0ZV9zaGlmdCgyLDApO3ZhciBRPTA7cmV0dXJuIHkuaGlkZGVuJiYoUXw9MSks''@;'; put 'put ''TC53cml0ZV9zaGlmdCgxLFEpLEwud3JpdGVfc2hpZnQoMSxRPXkubGV2ZWx8fDApLEwud3JpdGVfc2hpZnQoMiwwKSxMfShZZChwZSxyZSkscGUpKSl9KX19KFEscGVbIiFjb2xzIl0scGUpLFNpKFEsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIGp0KHksUCl7dmFyIEw9OCE9UC5iaWZmJiZQLmJp''@;'; put 'put ''ZmY/Mjo0LFE9ZnIoMipMKzYpO3JldHVybiBRLndyaXRlX3NoaWZ0KEwseS5zLnIpLFEud3JpdGVfc2hpZnQoTCx5LmUucisxKSxRLndyaXRlX3NoaWZ0KDIseS5zLmMpLFEud3JpdGVfc2hpZnQoMix5LmUuYysxKSxRLndyaXRlX3NoaWZ0KDIsMCksUX0oZHQsUCkpLEhlJiYocGVbIiFsaW5r''@;'; put 'put ''cyJdPVtdKSxwZVsiIXJvd3MiXSYmSGUmJnBlWyIhcm93cyJdLmZvckVhY2goZnVuY3Rpb24oWnQscG4pe2Zvcih2YXIgS249SHMocG4pLHVuPTI1Nixxbj0wLHpuPVp0LnM/MTYrZ3UoUC5jZWxsWGZzLFAuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpadC5zfSxQKTowLGtuPWR0LnMuYztr''@;'; put 'put ''bjw9ZHQuZS5jOysra24pKFNlPyhwZVtwbl18fFtdKVtrbl06cGVbbnRba25dK0tuXSkmJihrbjx1biYmKHVuPWtuKSxrbj5xbiYmKHFuPWtuKSk7cW48dW4mJih1bj1xbj0wKSxTaShRLCJSb3ciLGZ1bmN0aW9uIG10KHksUCxMKXt2YXIgUT1mcigxNik7US53cml0ZV9zaGlmdCgyLFApLFEu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixMWzBdKSxRLndyaXRlX3NoaWZ0KDIsTFsxXSsxKSxRLndyaXRlX3NoaWZ0KDIsMjAqeS5ocHR8fDIwKmoyKHkuaHB4KXx8MzMwKSxRLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHJlPTA7cmV0dXJuIHJlfD0wfHkubGV2ZWwseS5oaWRkZW4mJihyZXw9MzIpLHJlfD02NCxM''@;'; put 'put ''WzJdJiYocmV8PTEyOCksUS53cml0ZV9zaGlmdCgxLHJlKSxRLndyaXRlX3NoaWZ0KDEsMSksUS53cml0ZV9zaGlmdCgyLExbMl18fDApLFF9KFp0LHBuLFt1bixxbix6bl0pKX0pO2Zvcih2YXIgYnQ9ZHQucy5yO2J0PD1kdC5lLnI7KytidCl7R2U9SHMoYnQpO2Zvcih2YXIgRnQ9ZHQucy5j''@;'; put 'put ''O0Z0PD1kdC5lLmM7KytGdCl7YnQ9PT1kdC5zLnImJihudFtGdF09TnMoRnQpKSxCZT1udFtGdF0rR2U7dmFyIEV0PVNlPyhwZVtidF18fFtdKVtGdF06cGVbQmVdO0V0JiYoclIoUSxFdCxidCxGdCxQKSxIZSYmRXQubCYmcGVbIiFsaW5rcyJdLnB1c2goW0JlLEV0LmxdKSl9fXZhciBUdD12''@;'; put 'put ''ZS5Db2RlTmFtZXx8dmUubmFtZXx8cmU7cmV0dXJuKEhlfHw1PT1QLmJpZmYmJnBlWyIhZnJlZXplIl0pJiZTaShRLCJXaW5kb3cyIixmdW5jdGlvbiBCVCh5LFAsTCxRKXt2YXIgcmU9USYmUS5iaWZmfHw4LHBlPWZyKDg9PXJlPzE4OjEwKSxfZT0xNzE4O3JldHVybiBMPjAmJihfZSY9LTUx''@;'; put 'put ''MyksaG4oUFsiIWdyaWRsaW5lcyJdKSYmKF9lJj0tMyksUFsiIWZyZWV6ZSJdJiYoX2V8PTgpLHkmJnkuUlRMJiYoX2V8PTY0KSw1PT1yZSYmKF9lPTQ0NikscGUud3JpdGVfc2hpZnQoMixfZSksOD09cmU/KHBlLndyaXRlX3NoaWZ0KDQsMCkscGUud3JpdGVfc2hpZnQoNCw2NCkscGUud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDApKToocGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDApKSxwZX0oKF9lLlZpZXdzfHxbXSlbMF0scGUseSkpLChIZXx8NT09UC5iaWZmKSYmcGVbIiFmcmVlemUiXSYmU2koUSwiUGFuZSIsZnVuY3Rpb24gelQoeSl7''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiB5JiYoeT1zcyh5KSk7dmFyIFA9ZnIoMTApO3JldHVybiBQLndyaXRlX3NoaWZ0KDIseS5jKSxQLndyaXRlX3NoaWZ0KDIseS5yKSxQLndyaXRlX3NoaWZ0KDIseS5yKSxQLndyaXRlX3NoaWZ0KDIseS5jKSxQLndyaXRlX3NoaWZ0KDEsMyksUC53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDApLFB9KHBlWyIhZnJlZXplIl0pKSxIZSYmcGVbIiFzZWwiXSYmU2koUSwiU2VsZWN0aW9uIixmdW5jdGlvbiBSNCh5LFApe3ZhciBMPWZyKDE1KSxRPXkuY2VsbDtpZighUSl7aWYoIXkucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBv''@;'; put 'put ''ciByYW5nZSIpO1E9ZGkoV3MoeS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgcmU9InN0cmluZyI9PXR5cGVvZiBRP3NzKFEpOlE7aWYoUCl7dmFyIHBlPSJzdHJpbmciPT10eXBlb2YgUD9zcyhQKTpQO0wud3JpdGVfc2hpZnQoMSxyZS5yPj1wZS5yJiZyZS5jPj1wZS5jPzA6''@;'; put 'put ''cmUucj49cGUuciYmcmUuYzxwZS5jPzI6cmUucjxwZS5yJiZyZS5jPj1wZS5jPzE6Myl9ZWxzZSBMLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIEwud3JpdGVfc2hpZnQoMixyZS5yKSxMLndyaXRlX3NoaWZ0KDIscmUuYyksTC53cml0ZV9zaGlmdCgyLDApLEwud3JpdGVfc2hpZnQoMiwxKSxm''@;'; put 'put ''dW5jdGlvbiBtOSh5LFApe1B8fChQPWZyKDYpKSxQLndyaXRlX3NoaWZ0KDIseS5zP3kucy5yOnkuciksUC53cml0ZV9zaGlmdCgyLHkuZT95LmUucjp5LnIpLFAud3JpdGVfc2hpZnQoMSx5LnM/eS5zLmM6eS5jKSxQLndyaXRlX3NoaWZ0KDEseS5lP3kuZS5jOnkuYyl9KHtzOnJlLGU6cmV9''@;'; put 'put ''LEwpLEx9KHBlWyIhc2VsIl0scGVbIiFmcmVlemUiXSkpLEhlJiYocGVbIiFtZXJnZXMiXXx8W10pLmxlbmd0aCYmU2koUSwiTWVyZ2VDZWxscyIsZnVuY3Rpb24gWXcoeSl7dmFyIFA9ZnIoMis4KnkubGVuZ3RoKTtQLndyaXRlX3NoaWZ0KDIseS5sZW5ndGgpO2Zvcih2YXIgTD0wO0w8eS5s''@;'; put 'put ''ZW5ndGg7KytMKVUwKHlbTF0sUCk7cmV0dXJuIFB9KHBlWyIhbWVyZ2VzIl0pKSxIZSYmZnVuY3Rpb24gVmwoeSxQKXtmb3IodmFyIEw9MDtMPFBbIiFsaW5rcyJdLmxlbmd0aDsrK0wpe3ZhciBRPVBbIiFsaW5rcyJdW0xdO1NpKHksIkhMaW5rIixYaChRKSksUVsxXS5Ub29sdGlwJiZTaSh5''@;'; put 'put ''LCJITGlua1Rvb2x0aXAiLFFUKFEpKX1kZWxldGUgUFsiIWxpbmtzIl19KFEscGUpLFNpKFEsIkNvZGVOYW1lIixtbShUdCkpLEhlJiZmdW5jdGlvbiBNTSh5LFApe3ZhciBMPWZyKDE5KTtMLndyaXRlX3NoaWZ0KDQsMjE1MSksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSxMLndyaXRlX3NoaWZ0KDIsMyksTC53cml0ZV9zaGlmdCgxLDEpLEwud3JpdGVfc2hpZnQoNCwwKSxTaSh5LCJGZWF0SGRyIixMKSwoTD1mcigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1MiksTC53cml0ZV9zaGlmdCg0LDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDIsMyks''@;'; put 'put ''TC53cml0ZV9zaGlmdCgxLDApLEwud3JpdGVfc2hpZnQoNCwwKSxMLndyaXRlX3NoaWZ0KDIsMSksTC53cml0ZV9zaGlmdCg0LDQpLEwud3JpdGVfc2hpZnQoMiwwKSxVMChPaShQWyIhcmVmIl18fCJBMSIpLEwpLEwud3JpdGVfc2hpZnQoNCw0KSxTaSh5LCJGZWF0IixMKX0oUSxwZSksU2ko''@;'; put 'put ''USwiRU9GIiksUS5lbmQoKX1mdW5jdGlvbiBFTSh5LFAsTCl7dmFyIFE9eWMoKSxyZT0oeXx8e30pLldvcmtib29rfHx7fSxwZT1yZS5TaGVldHN8fFtdLF9lPXJlLldCUHJvcHN8fHt9LHZlPTg9PUwuYmlmZixTZT01PT1MLmJpZmY7U2koUSwyMDU3LEQ0KDAsNSxMKSksInhsYSI9PUwuYm9v''@;'; put 'put ''a1R5cGUmJlNpKFEsIkFkZGluIiksU2koUSwiSW50ZXJmYWNlSGRyIix2ZT9mdSgxMjAwKTpudWxsKSxTaShRLCJNbXMiLGZ1bmN0aW9uIEx3KHksUCl7UHx8KFA9ZnIoeSkpO2Zvcih2YXIgTD0wO0w8eTsrK0wpUC53cml0ZV9zaGlmdCgxLDApO3JldHVybiBQfSgyKSksU2UmJlNpKFEsIlRv''@;'; put 'put ''b2xiYXJIZHIiKSxTZSYmU2koUSwiVG9vbGJhckVuZCIpLFNpKFEsIkludGVyZmFjZUVuZCIpLFNpKFEsIldyaXRlQWNjZXNzIixmdW5jdGlvbiB3bSh5LFApe3ZhciBMPSFQfHw4PT1QLmJpZmYsUT1mcihMPzExMjo1NCk7Zm9yKFEud3JpdGVfc2hpZnQoOD09UC5iaWZmPzI6MSw3KSxMJiZR''@;'; put 'put ''LndyaXRlX3NoaWZ0KDEsMCksUS53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksUS53cml0ZV9zaGlmdCg0LDU0NTg1NDh8KEw/MDo1MzY4NzA5MTIpKTtRLmw8US5sZW5ndGg7KVEud3JpdGVfc2hpZnQoMSxMPzA6MzIpO3JldHVybiBRfSgwLEwpKSxTaShRLCJDb2RlUGFnZSIsZnUodmU/MTIw''@;'; put 'put ''MDoxMjUyKSksdmUmJlNpKFEsIkRTRiIsZnUoMCkpLHZlJiZTaShRLCJFeGNlbDlGaWxlIiksU2koUSwiUlJUYWJJZCIsZnVuY3Rpb24gTTkoeSl7Zm9yKHZhciBQPWZyKDIqeSksTD0wO0w8eTsrK0wpUC53cml0ZV9zaGlmdCgyLEwrMSk7cmV0dXJuIFB9KHkuU2hlZXROYW1lcy5sZW5ndGgp''@;'; put 'put ''KSx2ZSYmeS52YmFyYXcmJlNpKFEsIk9iUHJvaiIpLHZlJiZ5LnZiYXJhdyYmU2koUSwiQ29kZU5hbWUiLG1tKF9lLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLFNpKFEsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGZ1KDE3KSksU2koUSwiV2luUHJvdGVjdCIsUGwoITEpKSxTaShRLCJQcm90''@;'; put 'put ''ZWN0IixQbCghMSkpLFNpKFEsIlBhc3N3b3JkIixmdSgwKSksdmUmJlNpKFEsIlByb3Q0UmV2IixQbCghMSkpLHZlJiZTaShRLCJQcm90NFJldlBhc3MiLGZ1KDApKSxTaShRLCJXaW5kb3cxIixmdW5jdGlvbiBPdygpe3ZhciB5PWZyKDE4KTtyZXR1cm4geS53cml0ZV9zaGlmdCgyLDApLHku''@;'; put 'put ''d3JpdGVfc2hpZnQoMiwwKSx5LndyaXRlX3NoaWZ0KDIsMjkyODApLHkud3JpdGVfc2hpZnQoMiwxNzYwMCkseS53cml0ZV9zaGlmdCgyLDU2KSx5LndyaXRlX3NoaWZ0KDIsMCkseS53cml0ZV9zaGlmdCgyLDApLHkud3JpdGVfc2hpZnQoMiwxKSx5LndyaXRlX3NoaWZ0KDIsNTAwKSx5fSgp''@;'; put 'put ''KSxTaShRLCJCYWNrdXAiLFBsKCExKSksU2koUSwiSGlkZU9iaiIsZnUoMCkpLFNpKFEsIkRhdGUxOTA0IixQbCgidHJ1ZSI9PWZ1bmN0aW9uIGlNKHkpe3JldHVybiB5Lldvcmtib29rJiZ5Lldvcmtib29rLldCUHJvcHMmJnlyKHkuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUi''@;'; put 'put ''OiJmYWxzZSJ9KHkpKSksU2koUSwiQ2FsY1ByZWNpc2lvbiIsUGwoITApKSx2ZSYmU2koUSwiUmVmcmVzaEFsbCIsUGwoITEpKSxTaShRLCJCb29rQm9vbCIsZnUoMCkpLENyPXc0KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3''@;'; put 'put ''MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIGVSKHksUCxMKXsoKChQfHx7fSkuU3R5bGVzfHx7fSkuRm9udHN8fFt7c3o6MTIsY29sb3I6e3RoZW1lOjF9LG5hbWU6IkFyaWFsIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dKS5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFEpe1NpKHksIkZvbnQiLGZ1bmN0aW9uIHczKHksUCl7dmFyIEw9eS5uYW1lfHwiQXJpYWwiLFE9UCYmNT09UC5iaWZmLHBlPWZyKFE/MTUrTC5sZW5ndGg6MTYrMipMLmxlbmd0aCk7cGUud3JpdGVfc2hpZnQoMiwyMCooeS5zenx8MTIpKTt2YXIgX2U9MDtyZXR1cm4g''@;'; put 'put ''eS5ib2xkJiYoX2V8PTEpLHkuaXRhbGljJiYoX2V8PTIpLHkuc3RyaWtlJiYoX2V8PTgpLHkuc2hhZG93JiYoX2V8PTMyKSxwZS53cml0ZV9zaGlmdCgxLF9lKSxwZS53cml0ZV9zaGlmdCgxLDApLHBlLndyaXRlX3NoaWZ0KDIseS5jb2xvcj9IMyh5LmNvbG9yLDY0KTo2NCkscGUud3JpdGVf''@;'; put 'put ''c2hpZnQoMix5LmJvbGQ/NzAwOjQwMCkscGUud3JpdGVfc2hpZnQoMiwic3VwZXIiPT15LnZhbGlnbj8xOiJzdWIiPT15LnZhbGlnbj8yOjApLHBlLndyaXRlX3NoaWZ0KDEseS51bmRlcmxpbmV8fDApLHBlLndyaXRlX3NoaWZ0KDEscGUuZmFtaWx5fHwwKSxwZS53cml0ZV9zaGlmdCgxLHBl''@;'; put 'put ''LmNoYXJzZXR8fDApLHBlLndyaXRlX3NoaWZ0KDEsMCkscGUud3JpdGVfc2hpZnQoMSxMLmxlbmd0aCksUXx8cGUud3JpdGVfc2hpZnQoMSwxKSxwZS53cml0ZV9zaGlmdCgoUT8xOjIpKkwubGVuZ3RoLEwsUT8ic2JjcyI6InV0ZjE2bGUiKSxwZX0oUSxMKSl9KX0oUSx5LEwpLGZ1bmN0aW9u''@;'; put 'put ''IHRSKHksUCxMKXtQJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2Zvcih2YXIgcmU9UVswXTtyZTw9UVsxXTsrK3JlKW51bGwhPVBbcmVdJiZTaSh5LCJGb3JtYXQiLFhyKHJlLFBbcmVdLEwpKX0pfShRLHkuU1NGLEwpLGZ1bmN0aW9uIG5S''@;'; put 'put ''KHksUCl7Zm9yKHZhciBMPTA7TDwxNjsrK0wpU2koeSwiWEYiLENtKHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLFApKTtQLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihRKXtTaSh5LCJYRiIsQ20oUSwwLFApKX0pfShRLEwpLFNpKFEsIlBhbGV0dGUiLGZ1bmN0aW9uICR3KHkpe3ZhciBQPWZy''@;'; put 'put ''KDIyNik7UC53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIEw9MDtMPDU2OysrTCl7dmFyIFE9eVtMKzhdfHxoM1tMKzhdO1Aud3JpdGVfc2hpZnQoMSxRWzBdKSxQLndyaXRlX3NoaWZ0KDEsUVsxXSksUC53cml0ZV9zaGlmdCgxLFFbMl0pLFAud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUH0o''@;'; put 'put ''Q3IpKSxDcj1vbihoMyksdmUmJlNpKFEsIlVzZXNFTEZzIixQbCghMSkpO3ZhciBCZT1RLmVuZCgpLEdlPXljKCk7dmUmJlNpKEdlLCJDb3VudHJ5IixmdW5jdGlvbiB0RCh5KXtyZXR1cm4geXx8KHk9ZnIoNCkpLHkud3JpdGVfc2hpZnQoMiwxKSx5LndyaXRlX3NoaWZ0KDIsMSkseX0oKSks''@;'; put 'put ''dmUmJkwuU3RyaW5ncyYmZnVuY3Rpb24gdF8oeSxQLEwsUSl7dmFyIHJlPVF8fChMfHxbXSkubGVuZ3RofHwwO2lmKHJlPD04MjI0KXJldHVybiBTaSh5LFAsTCxyZSk7dmFyIHBlPStQfHwrU01bUF07aWYoIWlzTmFOKHBlKSl7Zm9yKHZhciBfZT1MLnBhcnRzfHxbXSx2ZT0wLFNlPTAsSGU9''@;'; put 'put ''MDtIZSsoX2VbdmVdfHw4MjI0KTw9ODIyNDspSGUrPV9lW3ZlXXx8ODIyNCx2ZSsrO3ZhciBCZT15Lm5leHQoNCk7Zm9yKEJlLndyaXRlX3NoaWZ0KDIscGUpLEJlLndyaXRlX3NoaWZ0KDIsSGUpLHkucHVzaChMLnNsaWNlKFNlLFNlK0hlKSksU2UrPUhlO1NlPHJlOyl7Zm9yKChCZT15Lm5l''@;'; put 'put ''eHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLEhlPTA7SGUrKF9lW3ZlXXx8ODIyNCk8PTgyMjQ7KUhlKz1fZVt2ZV18fDgyMjQsdmUrKztCZS53cml0ZV9zaGlmdCgyLEhlKSx5LnB1c2goTC5zbGljZShTZSxTZStIZSkpLFNlKz1IZX19fShHZSwiU1NUIixmdW5jdGlvbiBicyh5LFApe3ZhciBM''@;'; put 'put ''PWZyKDgpO0wud3JpdGVfc2hpZnQoNCx5LkNvdW50KSxMLndyaXRlX3NoaWZ0KDQseS5VbmlxdWUpO2Zvcih2YXIgUT1bXSxyZT0wO3JlPHkubGVuZ3RoOysrcmUpUVtyZV09ajAoeVtyZV0sUCk7dmFyIHBlPVMoW0xdLmNvbmNhdChRKSk7cmV0dXJuIHBlLnBhcnRzPVtMLmxlbmd0aF0uY29u''@;'; put 'put ''Y2F0KFEubWFwKGZ1bmN0aW9uKF9lKXtyZXR1cm4gX2UubGVuZ3RofSkpLHBlfShMLlN0cmluZ3MsTCkpLFNpKEdlLCJFT0YiKTt2YXIgbnQ9R2UuZW5kKCksZHQ9eWMoKSxDdD0wLGN0PTA7Zm9yKGN0PTA7Y3Q8eS5TaGVldE5hbWVzLmxlbmd0aDsrK2N0KUN0Kz0odmU/MTI6MTEpKyh2ZT8y''@;'; put 'put ''OjEpKnkuU2hlZXROYW1lc1tjdF0ubGVuZ3RoO3ZhciBidD1CZS5sZW5ndGgrQ3QrbnQubGVuZ3RoO2ZvcihjdD0wO2N0PHkuU2hlZXROYW1lcy5sZW5ndGg7KytjdClTaShkdCwiQm91bmRTaGVldDgiLFkwKHtwb3M6YnQsaHM6KHBlW2N0XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6eS5T''@;'; put 'put ''aGVldE5hbWVzW2N0XX0sTCkpLGJ0Kz1QW2N0XS5sZW5ndGg7dmFyIEV0PWR0LmVuZCgpO2lmKEN0IT1FdC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitDdCsiICE9ICIrRXQubGVuZ3RoKTt2YXIgVHQ9W107cmV0dXJuIEJlLmxlbmd0aCYmVHQucHVzaChCZSksRXQubGVuZ3RoJiZU''@;'; put 'put ''dC5wdXNoKEV0KSxudC5sZW5ndGgmJlR0LnB1c2gobnQpLFNhKFtUdF0pfWZ1bmN0aW9uIGlfKHksUCl7dmFyIEw9UHx8e307c3dpdGNoKEwuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24gb1IoeSxQKXt2YXIgTD1QfHx7fSxRPVtdO0ZtKFAmJlAuUFBJfHw5NikseSYm''@;'; put 'put ''IXkuU1NGJiYoeS5TU0Y9dy5nZXRfdGFibGUoKSkseSYmeS5TU0YmJihKKHcpLHcubG9hZF90YWJsZSh5LlNTRiksTC5yZXZzc2Y9QWUoeS5TU0YpLEwucmV2c3NmW3kuU1NGWzY1NTM1XV09MCxMLnNzZj15LlNTRikseS5TdHlsZXM9e0ZvbnRzOkwuRm9udHM9W3tzejoxMixjb2xvcjp7dGhl''@;'; put 'put ''bWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6TC5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6TC5Cb3JkZXJzPVt7fV0sRFhGOkwuRFhGPXkuU3R5bGVzJiZ5''@;'; put 'put ''LlN0eWxlcy5EWEZ8fFtdfSxaMShMLkZvbnRzWzBdKSxMLlN0cmluZ3M9W10sTC5TdHJpbmdzLkNvdW50PTAsTC5TdHJpbmdzLlVuaXF1ZT0wLEswP0wucmV2U3RyaW5ncz1uZXcgTWFwOihMLnJldlN0cmluZ3M9e30sTC5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgTC5yZXZTdHJpbmdzLmZv''@;'; put 'put ''byksaF8oTCksTC5jZWxsWGZzPVtdLEwuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGd1KEwuY2VsbFhmcyxMLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkseS5Qcm9wc3x8KHkuUHJvcHM9e30pO2Zvcih2YXIgcmU9MDtyZTx5LlNoZWV0TmFtZXMubGVuZ3Ro''@;'; put 'put ''OysrcmUpUVtRLmxlbmd0aF09aVIocmUsTCx5KTtyZXR1cm4gUS51bnNoaWZ0KEVNKHksUSxMKSksU2EoW1FdKX0oeSxQKTtjYXNlIDQ6Y2FzZSAzOmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24gaFkoeSxQKXt2YXIgTD1QfHx7fTtudWxsIT10ZSYmbnVsbD09TC5kZW5zZSYmKEwuZGVuc2U9dGUp''@;'; put 'put ''O2Zvcih2YXIgUT15YygpLHJlPTAscGU9MDtwZTx5LlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpeS5TaGVldE5hbWVzW3BlXT09TC5zaGVldCYmKHJlPXBlKTtpZigwPT1yZSYmTC5zaGVldCYmeS5TaGVldE5hbWVzWzBdIT1MLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5k''@;'; put 'put ''OiAiK0wuc2hlZXQpO3JldHVybiBTaShRLDQ9PUwuYmlmZj8xMDMzOjM9PUwuYmlmZj81MjE6OSxENCgwLDE2LEwpKSxmdW5jdGlvbiBkWSh5LFAsTCxRKXt2YXIgX2UscmU9QXJyYXkuaXNBcnJheShQKSxwZT1PaShQWyIhcmVmIl18fCJBMSIpLHZlPSIiLFNlPVtdO2lmKHBlLmUuYz4yNTV8''@;'; put 'put ''fHBlLmUucj4xNjM4Myl7aWYoUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhQWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6SVYxNjM4NCIpO3BlLmUuYz1NYXRoLm1pbihwZS5lLmMsMjU1KSxwZS5lLnI9TWF0aC5taW4ocGUuZS5jLDE2MzgzKSxfZT1P''@;'; put 'put ''byhwZSl9Zm9yKHZhciBIZT1wZS5zLnI7SGU8PXBlLmUucjsrK0hlKXt2ZT1IcyhIZSk7Zm9yKHZhciBCZT1wZS5zLmM7QmU8PXBlLmUuYzsrK0JlKXtIZT09PXBlLnMuciYmKFNlW0JlXT1OcyhCZSkpLF9lPVNlW0JlXSt2ZTt2YXIgR2U9cmU/KFBbSGVdfHxbXSlbQmVdOlBbX2VdO0dlJiZy''@;'; put 'put ''Xyh5LEdlLEhlLEJlKX19fShRLHkuU2hlZXRzW3kuU2hlZXROYW1lc1tyZV1dLDAsTCksU2koUSwxMCksUS5lbmQoKX0oeSxQKX10aHJvdyBuZXcgRXJyb3IoImludmFsaWQgdHlwZSAiK0wuYm9va1R5cGUrIiBmb3IgQklGRiIpfXZhciBGdT1mdW5jdGlvbigpe3ZhciB5PXtjZW50ZXJDb250''@;'; put 'put ''aW51b3VzOiJjZW50ZXIiLGp1c3RpZnk6ImxlZnQifTtmdW5jdGlvbiBMKEdlLG50KXt2YXIgZHQ9bnR8fHt9O251bGwhPXRlJiZudWxsPT1kdC5kZW5zZSYmKGR0LmRlbnNlPXRlKTt2YXIgQ3Q9ZHQuZGVuc2U/W106e30sY3Q9KEdlPUdlLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1h''@;'; put 'put ''dGNoKC88dGFibGUvaSk7aWYoIWN0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8dGFibGU+Iik7dmFyIGJ0PUdlLm1hdGNoKC88XC90YWJsZS9pKSxGdD1jdC5pbmRleCxFdD1idCYmYnQuaW5kZXh8fEdlLmxlbmd0aCxUdD1mdW5jdGlvbiBmdCh5LFAs''@;'; put 'put ''TCl7aWYoSG58fCJzdHJpbmciPT10eXBlb2YgUClyZXR1cm4geS5zcGxpdChQKTtmb3IodmFyIFE9eS5zcGxpdChQKSxyZT1bUVswXV0scGU9MTtwZTxRLmxlbmd0aDsrK3BlKXJlLnB1c2goTCkscmUucHVzaChRW3BlXSk7cmV0dXJuIHJlfShHZS5zbGljZShGdCxFdCksLyg6Pzx0cltePl0q''@;'; put 'put ''PikvaSwiPHRyPiIpLFp0PS0xLHBuPTAsS249MCx1bj0wLHFuPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LHpuPVtdO2ZvcihGdD0wO0Z0PFR0Lmxlbmd0aDsrK0Z0KXt2YXIga249VHRbRnRdLnRyaW0oKSxlcj1rbi5zbGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWVy''@;'; put 'put ''KXtpZigiPHRkIj09ZXJ8fCI8dGgiPT1lcil7dmFyIHRyPWtuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKEV0PTA7RXQ8dHIubGVuZ3RoOysrRXQpe3ZhciBabj10cltFdF0udHJpbSgpO2lmKFpuLm1hdGNoKC88dFtkaF0vaSkpe2Zvcih2YXIgVnI9Wm4sb2k9MDsiPCI9PVZyLmNoYXJBdCgw''@;'; put 'put ''KSYmKG9pPVZyLmluZGV4T2YoIj4iKSk+LTE7KVZyPVZyLnNsaWNlKG9pKzEpO2Zvcih2YXIga2k9MDtraTx6bi5sZW5ndGg7KytraSl7dmFyIExpPXpuW2tpXTtMaS5zLmM9PXBuJiZMaS5zLnI8WnQmJlp0PD1MaS5lLnImJihwbj1MaS5lLmMrMSxraT0tMSl9dmFyIFFyPWxuKFpuLnNsaWNl''@;'; put 'put ''KDAsWm4uaW5kZXhPZigiPiIpKSk7dW49UXIuY29sc3Bhbj8rUXIuY29sc3BhbjoxLCgoS249K1FyLnJvd3NwYW4pPjF8fHVuPjEpJiZ6bi5wdXNoKHtzOntyOlp0LGM6cG59LGU6e3I6WnQrKEtufHwxKS0xLGM6cG4rdW4tMX19KTt2YXIgdXI9UXIudHx8UXJbImRhdGEtdCJdfHwiIjtpZigh''@;'; put 'put ''VnIubGVuZ3RoKXtwbis9dW47Y29udGludWV9aWYoVnI9UmMoVnIpLHFuLnMucj5adCYmKHFuLnMucj1adCkscW4uZS5yPFp0JiYocW4uZS5yPVp0KSxxbi5zLmM+cG4mJihxbi5zLmM9cG4pLHFuLmUuYzxwbiYmKHFuLmUuYz1wbiksVnIubGVuZ3RoKXt2YXIgQW49e3Q6InMiLHY6VnJ9O2R0''@;'; put 'put ''LnJhd3x8IVZyLnRyaW0oKS5sZW5ndGh8fCJzIj09dXJ8fChBbj0kbihWcixkdCkpLGR0LmRlbnNlPyhDdFtadF18fChDdFtadF09W10pLEN0W1p0XVtwbl09QW4pOkN0W2RpKHtyOlp0LGM6cG59KV09QW4scG4rPXVufX19fX1lbHNle2lmKCsrWnQsZHQuc2hlZXRSb3dzJiZkdC5zaGVldFJv''@;'; put 'put ''d3M8PVp0KXstLVp0O2JyZWFrfXBuPTB9fXJldHVybiBDdFsiIXJlZiJdPU9vKHFuKSx6bi5sZW5ndGgmJihDdFsiIW1lcmdlcyJdPXpuKSxDdH1mdW5jdGlvbiByZShHZSxudCxkdCxDdCxjdCxidCl7dmFyIFR0LEZ0PUdlWyIhbWVyZ2VzIl18fFtdLEV0PVtdLFp0PXtzdHlsZTpbXX0scG49''@;'; put 'put ''ITE7ZnVuY3Rpb24gS24oRGksWW8sbG8pe3ZhciBBbz0iIix4bz0wO2lmKFR0W0RpXSlzd2l0Y2goVHRbRGldLnN0eWxlKXtjYXNlInRoaW4iOmNhc2UiaGFpciI6QW89InNvbGlkIix4bz0xO2JyZWFrO2Nhc2UibWVkaXVtIjpBbz0ic29saWQiLHhvPTI7YnJlYWs7Y2FzZSJ0aGljayI6QW89''@;'; put 'put ''InNvbGlkIix4bz0zO2JyZWFrO2Nhc2UiZG91YmxlIjpBbz0iZG91YmxlIix4bz0zO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNlImRhc2hEb3REb3QiOkFvPSJkb3R0ZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90IjpBbz0iZG90dGVkIix4bz0yO2JyZWFrO2Nhc2UiZGFzaGVk''@;'; put 'put ''IjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90IjpBbz0iZGFzaGVkIix4bz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaGVkIjpjYXNlIm1lZGl1bURhc2hEb3QiOkFvPSJkYXNoZWQiLHhvPTJ9ZTppZigwPT14byl7c3dpdGNoKERpKXtjYXNlInRvcCI6LS1ZbzticmVhaztjYXNlImxl''@;'; put 'put ''ZnQiOi0tbG87YnJlYWs7Y2FzZSJib3R0b20iOisrWW87YnJlYWs7Y2FzZSJyaWdodCI6Kytsb312YXIgaGk9WW8+PTAmJmxvPj0wP0N0LmRlbnNlPyhHZVtZb118fFtdKVtsb106R2VbZGkoe3I6WW8sYzpsb30pXTpudWxsO2lmKGhpKXtpZihoaS5zJiZoaS5zW3t0b3A6ImJvdHRvbSIsYm90''@;'; put 'put ''dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W0RpXV0pYnJlYWsgZTtoaS5zJiZoaS5zLmZnQ29sb3ImJih4bz0xKX1UdC5mZ0NvbG9yJiYoeG89MSksIWhpJiZwbiYmMD09eG8mJih4bz0xKX0wIT14byYmeG8mJihadC5zdHlsZS5wdXNoKCJib3JkZXItIitEaSsiLXN0eWxl''@;'; put 'put ''OiIrKEFvfHwidHJhbnNwYXJlbnQiKSksWnQuc3R5bGUucHVzaCgiYm9yZGVyLSIrRGkrIi13aWR0aDoiK3hvKyJweCIpLCIiPT1Bbz9adC5zdHlsZS5wdXNoKCJib3JkZXItIitEaSsiLWNvbG9yOiB0cmFuc3BhcmVudCIpOlR0W0RpXS5jb2xvciYmVHRbRGldLmNvbG9yLnJnYiYmWnQuc3R5''@;'; put 'put ''bGUucHVzaCgiYm9yZGVyLSIrRGkrIi1jb2xvcjojIitPdShUdFtEaV0uY29sb3IucmdiKSkpfWZvcih2YXIgdW49bnQucy5jO3VuPD1udC5lLmM7Kyt1bil7Zm9yKHZhciBxbj0wLHpuPTAsa249MDtrbjxGdC5sZW5ndGg7KytrbilpZighKEZ0W2tuXS5zLnI+ZHR8fEZ0W2tuXS5zLmM+dW58''@;'; put 'put ''fEZ0W2tuXS5lLnI8ZHR8fEZ0W2tuXS5lLmM8dW4pKXtpZihGdFtrbl0ucy5yPGR0fHxGdFtrbl0ucy5jPHVuKXtxbj0tMTticmVha31xbj1GdFtrbl0uZS5yLUZ0W2tuXS5zLnIrMSx6bj1GdFtrbl0uZS5jLUZ0W2tuXS5zLmMrMTticmVha31pZighKHFuPDApKXt2YXIgZXI9ZGkoe3I6ZHQs''@;'; put 'put ''Yzp1bn0pLHRyPUN0LmRlbnNlPyhHZVtkdF18fFtdKVt1bl06R2VbZXJdO3RyP3BuPSExOihwbj0hMCx0cj17dDoieiIsczp7fX0pO3ZhciBabj0ieiI9PXRyLnQ/IiI6dHIuaHx8cm8odHIud3x8KGN1KHRyKSx0ci53KXx8IiIpO2lmKFp0PXtzdHlsZTpbXX0sVHQ9dHIucyl7dmFyIFZyPTE7''@;'; put 'put ''aWYoKCJzdXBlciI9PVR0LnZhbGlnbnx8InN1YiI9PVR0LnZhbGlnbikmJihWcj0uODMsWm49U3IoInNwYW4iLFpuLHtzdHlsZToidmVydGljYWwtYWxpZ246ICIrVHQudmFsaWdufSkpLFp0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKFR0LmJvbGQ/NzAwOjQwMCkpLFR0Lml0YWxpYyYm''@;'; put 'put ''WnQuc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKFR0LnVuZGVybGluZXx8VHQuc3RyaWtlKSYmWnQuc3R5bGUucHVzaCgidGV4dC1kZWNvcmF0aW9uOiIrKFR0LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhUdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksVHQuY29s''@;'; put 'put ''b3ImJlR0LmNvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiY29sb3I6ICMiK091KFR0LmNvbG9yLnJnYikpLFR0Lm5hbWUmJlp0LnN0eWxlLnB1c2goImZvbnQtZmFtaWx5OiIrVHQubmFtZSsiLCBzYW5zLXNlcmlmIiksVHQuc3omJlp0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK1R0LnN6KlZy''@;'; put 'put ''KyJwdCIpLG51bGwhPT1UdC5wYXR0ZXJuVHlwZSYmVHQuZmdDb2xvciYmVHQuZmdDb2xvci5yZ2ImJlp0LnN0eWxlLnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK091KFR0LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihEaSl7S24oRGksZHQsdW4pfSks''@;'; put 'put ''cW4+MXx8em4+MSl7dmFyIG9pPWRpKHtyOmR0K3FuLTEsYzp1bit6bi0xfSksa2k9Q3QuZGVuc2U/KEdlW2R0K3FuLTFdfHxbXSlbdW4rem4tMV06R2Vbb2ldLFFyPVR0O1R0PWtpJiZraS5zfHxUdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihEaSl7S24oRGksZHQsdW4p''@;'; put 'put ''fSksVHQ9UXJ9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKERpKXtLbihEaSxkdCx1bil9KTtpZihUdC5hbGlnbm1lbnQpe2lmKFR0LmFsaWdubWVudC5ob3Jpem9udGFsP1p0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKHlbVHQuYWxpZ25tZW50Lmhvcml6b250''@;'; put 'put ''YWxdfHxUdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09dHIudCYmWnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKSxUdC5hbGlnbm1lbnQudmVydGljYWwpe3ZhciB1cj1UdC5hbGlnbm1lbnQudmVydGljYWw7WnQuc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJj''@;'; put 'put ''ZW50ZXIiPT11cj8ibWlkZGxlIjp1cikpfWlmKFR0LmFsaWdubWVudC53cmFwVGV4dCladC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAiKTtlbHNle3ZhciBBbj1DdC5kZW5zZT8oR2VbZHRdfHxbXSlbdW4rMV06R2VbZGkoe3I6ZHQsYzp1bisxfSldO0FuJiYieiIhPUFuLnQm''@;'; put 'put ''Jlp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT10ci50JiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpO3ZhciB2cj0oKEdlWyIhY29scyJdfHxbXSlbdW5dfHx7fSkud3B4O251bGw9PXZyJiYodnI9KChHZVsiIXNoZWV0Rm9ybWF0Il18''@;'; put 'put ''fHt9KS5jb2x8fHt9KS53cHgpfXZhciBycj0wO2lmKHpuPD0xJiZxbjw9MSYmKHJyPSgoR2VbIiFjb2xzIl18fFtdKVt1bl18fHt9KS53cHgpJiZadC5zdHlsZS5wdXNoKCJ3aWR0aDogIitycisicHgiKSxHZVsiIWNvbmRmbXQiXSYmcGUodHIsZHQsdW4sR2VbIiFjb25kZm10Il0sWnQuc3R5''@;'; put 'put ''bGUsR2UpLDA9PVp0LnN0eWxlLmxlbmd0aD9kZWxldGUgWnQuc3R5bGU6WnQuc3R5bGU9WnQuc3R5bGUuam9pbigiOyIpLEN0LmNzcyl7dmFyIFNuPWN0LmluZGV4T2YoWnQuc3R5bGUpOy0xPT1TbiYmKGN0LnB1c2goWnQuc3R5bGUpLFNuPWN0Lmxlbmd0aC0xKSxkZWxldGUgWnQuc3R5bGUs''@;'; put 'put ''WnQuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK1NufXFuPjEmJihadC5yb3dzcGFuPXFuKSx6bj4xJiYoWnQuY29sc3Bhbj16biksQ3QuZWRpdGFibGU/Wm49JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+JytabisiPC9zcGFuPiI6dHImJihadFsiZGF0YS10Il09dHImJnRyLnR8fCJ6''@;'; put 'put ''IixudWxsIT10ci52JiYoWnRbImRhdGEtdiJdPXRyLnYpLG51bGwhPXRyLnomJihadFsiZGF0YS16Il09dHIueikpLFp0LmlkPShDdC5pZHx8InNqcyIpKyItIitlcixFdC5wdXNoKFNyKCJ0ZCIsWm4sWnQpKX19dmFyIENpLHByPXtzdHlsZTpbXX07KENpPUdlWyIhc2hlZXRGb3JtYXQiXSkm''@;'; put 'put ''JkNpLnJvdyYmKEkzKENpLnJvdyksQ2kucm93LmhweCYmKHByLnN0eWxlLnB1c2goWyJoZWlnaHQiLENpLnJvdy5ocHgrInB4Il0pLHByLmhlaWdodD1NYXRoLnJvdW5kKENpLnJvdy5ocHgpKSk7dmFyIGpyPUdlWyIhcm93cyJdO2lmKGpyJiZqcltkdF0pe3ZhciBqaT1qcltkdF07amkuaHB4''@;'; put 'put ''JiYocHIuc3R5bGUucHVzaChbImhlaWdodCIsK2ppLmhweCsicHgiXSkscHIuaGVpZ2h0PU1hdGgucm91bmQoamkuaHB4KSksamkuaGlkZGVuJiZwci5zdHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIF9vPVtdO3JldHVybiBwci5zdHlsZT1wci5zdHlsZS5yZXZlcnNlKCkuZmls''@;'; put 'put ''dGVyKGZ1bmN0aW9uKERpKXtyZXR1cm4hKF9vLmluZGV4T2YoRGlbMF0pPi0xfHwoX28ucHVzaChEaVswXSksMCkpfSkubWFwKGZ1bmN0aW9uKERpKXtyZXR1cm4gRGlbMF0rIjoiK0RpWzFdfSksMD09cHIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBwci5zdHlsZTpwci5zdHlsZT1wci5zdHlsZS5q''@;'; put 'put ''b2luKCI7IiksU3IoInRyIixFdC5qb2luKCIiKSxwcil9ZnVuY3Rpb24gcGUoR2UsbnQsZHQsQ3QsY3QsYnQpe0N0LmZvckVhY2goZnVuY3Rpb24oRnQpe2lmKEZ0Ll9yZWZ8fChGdC5fcmVmPSJzdHJpbmciPT10eXBlb2YgRnQucmVmP1dzKEZ0LnJlZik6RnQucmVmKSwhKEZ0Ll9yZWYucy5j''@;'; put 'put ''PmR0fHxGdC5fcmVmLmUuYzxkdHx8RnQuX3JlZi5zLnI+bnR8fEZ0Ll9yZWYuZS5yPG50fHwic2NhbGUiIT09RnQudCkpe2lmKCJuIiE9R2UudClyZXR1cm47dmFyIEV0O2lmKG51bGw9PUZ0Ll9taW4pe0Z0Ll92YWx1ZXM9W107Zm9yKHZhciBUdD1GdC5fcmVmLnMucjtUdDw9RnQuX3JlZi5l''@;'; put 'put ''LnI7KytUdClmb3IodmFyIFp0PUZ0Ll9yZWYucy5jO1p0PD1GdC5fcmVmLmUuYzsrK1p0KXt2YXIgcG49QXJyYXkuaXNBcnJheShidCk/KGJ0W1R0XXx8W10pW1p0XTpidFtkaSh7cjpUdCxjOlp0fSldO3BuJiYibiI9PXBuLnQmJkZ0Ll92YWx1ZXMucHVzaChwbi52KX1pZihGdC5fdmFsdWVz''@;'; put 'put ''LnNvcnQoZnVuY3Rpb24oS24sdW4pe3JldHVybiBLbi11bn0pLEZ0Ll9taW49RnQuX3ZhbHVlc1swXSxGdC5fbWF4PUZ0Ll92YWx1ZXMuc2xpY2UoLTEpWzBdLEZ0Ll9iYW5kPUZ0Ll9tYXgtRnQuX21pbixGdC5jbWlkKXtzd2l0Y2goRnQuY21pZC50KXtjYXNlIm51bSI6RnQuX21pZD1GdC5j''@;'; put 'put ''bWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpGdC5fbWlkPUZ0LmNtaWQudi8xMDAqRnQuX2JhbmQrRnQuX21pbjticmVhaztjYXNlInBlcmNlbnRpbGUiOkZ0Ll9taWQ9ZnVuY3Rpb24gZm4oeSxQKXtpZigwPT1QKXJldHVybiB5WzBdO2lmKDEwMD09UClyZXR1cm4geVt5Lmxlbmd0aC0xXTt2''@;'; put 'put ''YXIgUT1QLzEwMCooeS5sZW5ndGgtMSkscmU9US1NYXRoLmZsb29yKFEpO3JldHVybiByZSp5W01hdGguY2VpbChRKV0rKDEtcmUpKnlbTWF0aC5mbG9vcihRKV19KEZ0Ll92YWx1ZXMsRnQuY21pZC52KX1GdC5fYmFuZGg9RnQuX21heC1GdC5fbWlkLEZ0Ll9iYW5kbD1GdC5fbWlkLUZ0Ll9t''@;'; put 'put ''aW59fShFdD1GdC5jbWlkP0dlLnY+PUZ0Ll9taWQ/UjkoRnQuY21pZC5jb2xvcixGdC5jbWF4LmNvbG9yLChHZS52LUZ0Ll9taWQpL0Z0Ll9iYW5kaCk6UjkoRnQuY21pbi5jb2xvcixGdC5jbWlkLmNvbG9yLChHZS52LUZ0Ll9taW4pL0Z0Ll9iYW5kbCk6UjkoRnQuY21pbi5jb2xvcixGdC5j''@;'; put 'put ''bWF4LmNvbG9yLChHZS52LUZ0Ll9taW4pL0Z0Ll9iYW5kKSkmJmN0LnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK0V0KX19KX1mdW5jdGlvbiBfZShHZSxudCl7dmFyIGR0PXtzcGFuOm50fHwxLHN0eWxlOiIifSxDdD1bXTtyZXR1cm4gR2UmJkdlLndweCYmKGR0LndpZHRoPU1hdGgucm91''@;'; put 'put ''bmQoNCpHZS53cHgvMyksQ3QucHVzaCgid2lkdGg6IisoR2Uud3B4fHwwKSsicHgiKSksQ3QubGVuZ3RoPjAmJihkdC5zdHlsZT1DdC5qb2luKCI7IikpLFNyKCJjb2wiLG51bGwsZHQpfWZ1bmN0aW9uIHZlKEdlLG50LGR0KXt2YXIgQ3Q9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNw''@;'; put 'put ''YWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIsInRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsiKX07ZHQmJmR0LmlkJiYoQ3QuaWQ9ZHQuaWQpO3ZhciBjdD1HZVsiIWNvbHMiXSxidD1HZVsiIXNoZWV0Rm9ybWF0Il07aWYoR2UmJmN0KXtmb3IodmFyIEZ0PTAs''@;'; put 'put ''VHQ9bnQucy5jO1R0PD1udC5lLmM7KytUdCl7dmFyIFp0PWN0W1R0XTtGdCs9WnQmJlp0LndweD9adC53cHg6YnQmJmJ0LmNvbCYmYnQuY29sLndweD9idC5jb2wud3B4OjUzfUN0LnN0eWxlKz0iO3dpZHRoOiIrRnQrInB4In12YXIgS24scG49WyI8dGFibGUiK1BhKEN0KSsiPiJdO2lmKHBu''@;'; put 'put ''LnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4OyB0ZXh0LWFsaWduOmdlbmVyYWw7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKGR0JiZkdC5ncmlkY29s''@;'; put 'put ''b3I/ZHQuZ3JpZGNvbG9yOmhuKEdlWyIhZ3JpZGxpbmVzIl0pPyJ0cmFuc3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTwvc3R5bGU+IikscG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKG50LmUuYy1udC5zLmMrMSkrJyI+''@;'; put 'put ''JyksY3Qpe2Zvcih2YXIgdW49bnQucy5jO3VuPE1hdGgubWluKGN0Lmxlbmd0aCxudC5lLmMrMSk7Kyt1bikhKEtuPWN0W3VuXSkmJmJ0JiZidC5jb2wmJihLbj1idC5jb2wpLEtufHwoS249e3dweDo1M30pLHBuLnB1c2goX2UoS24sMSkpO250LmUuYy1udC5zLmMrMT5jdC5sZW5ndGgmJihL''@;'; put 'put ''bj1udWxsLGJ0JiZidC5jb2wmJihLbj1idC5jb2wpLEtufHwoS249e3dweDo1M30pLHBuLnB1c2goX2UoS24sbnQuZS5jLW50LnMuYysxLWN0Lmxlbmd0aCkpKX1lbHNlIEtuPW51bGwsYnQmJmJ0LmNvbCYmKEtuPWJ0LmNvbCksS258fChLbj17d3B4OjUzfSkscG4ucHVzaChfZShLbixudC5l''@;'; put 'put ''LmMtbnQucy5jKzEpKTtyZXR1cm4gcG4ucHVzaCgiPC9jb2xncm91cD4iKSxwbi5qb2luKCIiKX12YXIgU2U9JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PHRpdGxlPlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxIZT0iPC9ib2R5PjwvaHRt''@;'; put 'put ''bD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBRKEdlLG50KXtyZXR1cm4gRWQoTChHZSxudCksbnQpfSx0b19zaGVldDpMLF9yb3c6cmUsQkVHSU46U2UsRU5EOkhlLF9wcmVhbWJsZTp2ZSxodG1sX3RvX3JzOmZ1bmN0aW9uIFAoR2Upe3ZhciBudD1bXSxkdD17fSxDdD0wO3JldHVy''@;'; put 'put ''biBHZS5yZXBsYWNlKC88KFwvPykoW15ccz8+IVwvOl0qOnwpKFteXHM/PjpcL10rKVtePl0qPi9nbSxmdW5jdGlvbihjdCxidCxGdCxFdCxUdCl7dmFyIHBuPWpuKGxuKGN0KVswXSkucmVwbGFjZSgvWzxcLz5dL2csIiIpLEtuPUdlLnNsaWNlKEN0LFR0KS5yZXBsYWNlKC9ccy9nLCIgIik7''@;'; put 'put ''c3dpdGNoKEtuLmxlbmd0aD4wJiYobnQucHVzaCh7dDoicyIsdjpLbixzOmR0fSksZHQ9b24oZHQpKSxwbi50b0xvd2VyQ2FzZSgpKXtjYXNlImIiOiIvIiE9YnQ/ZHQuYm9sZD0hMDpkZWxldGUgZHQuYm9sZDticmVhaztjYXNlImkiOiIvIiE9YnQ/ZHQuaXRhbGljPSEwOmRlbGV0ZSBkdC5p''@;'; put 'put ''dGFsaWM7YnJlYWs7Y2FzZSJ1IjoiLyIhPWJ0P2R0LnVuZGVybGluZT0xOmRlbGV0ZSBkdC51bmRlcmxpbmU7YnJlYWs7Y2FzZSJzIjoiLyIhPWJ0P2R0LnN0cmlrZT0hMDpkZWxldGUgZHQuc3RyaWtlfXJldHVybiBDdD1UdCtjdC5sZW5ndGgsY3R9KSxudH0sZnJvbV9zaGVldDpmdW5jdGlv''@;'; put 'put ''biBCZShHZSxudCl7dmFyIGR0PW50fHx7fSxjdD1udWxsIT1kdC5mb290ZXI/ZHQuZm9vdGVyOkhlLGJ0PVtudWxsIT1kdC5oZWFkZXI/ZHQuaGVhZGVyOlNlLCIiXSxGdD1bXSxFdD0obmV3IERhdGUpLnZhbHVlT2YoKTtHZXx8KEdlPXt9KSxHZVsiIXJlZiJdfHwoR2VbIiFyZWYiXT0iQTE6''@;'; put 'put ''QTEiKTt2YXIgVHQ9V3MoR2VbIiFyZWYiXSk7aWYoZHQuZGVuc2U9QXJyYXkuaXNBcnJheShHZSksZHQuc2tpcGVuZCl7dmFyIFp0PVR0LmUucjtlOmZvcig7WnQ+PVR0LnMucjstLVp0KWZvcih2YXIgcG49VHQuZS5jO3BuPj1UdC5zLmM7LS1wbilpZihudWxsIT0oKGR0LmRlbnNlPyhHZVta''@;'; put 'put ''dF18fFtdKVtwbl06R2VbZGkoe3I6WnQsYzpwbn0pXSl8fHt9KS52KWJyZWFrIGU7VHQuZS5yPVp0O3ZhciBLbj1UdC5lLmM7ZTpmb3IoO0tuPj1UdC5zLmM7LS1Lbilmb3IodmFyIHVuPVR0LmUucjt1bj49VHQucy5yOy0tdW4paWYobnVsbCE9KChkdC5kZW5zZT8oR2VbdW5dfHxbXSlbS25d''@;'; put 'put ''OkdlW2RpKHtyOnVuLGM6S259KV0pfHx7fSkudilicmVhayBlO1R0LmUuYz1Lbn1idC5wdXNoKHZlKEdlLFR0LGR0KSk7Zm9yKHZhciBxbj1UdC5zLnI7cW48PVR0LmUucjsrK3FuKWJ0LnB1c2gocmUoR2UsVHQscW4sZHQsRnQsRXQpKTtyZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK2N0KSxk''@;'; put 'put ''dC5jc3MmJihidFsxXT0iPHN0eWxlPlxuIitGdC5tYXAoZnVuY3Rpb24oem4sa24pe3JldHVybiIuc2pzIitFdCsiLSIra24rIiB7Iit6bisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24gdmYoeSxQLEwpe3ZhciBRPXt9O2lmKHR5cGVvZiBn''@;'; put 'put ''ZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gUTt2YXIgcmU9Z2V0Q29tcHV0ZWRTdHlsZSh5KTtpZigoNzAwPT1yZVsiZm9udC13ZWlnaHQiXXx8ImJvbGQiPT1yZVsiZm9udC13ZWlnaHQiXSkmJihRLmJvbGQ9ITApLChyZVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYo''@;'; put 'put ''US5pdGFsaWM9ITApLChyZVsidGV4dC1kZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvdW5kZXJsaW5lLykmJihRLnVuZGVybGluZT0xKSwocmVbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoUS5zdHJpa2U9MSkscGFyc2VJbnQocmVbImZvbnQtc2l6ZSJd''@;'; put 'put ''KSYmKFEuc3o9cGFyc2VGbG9hdChyZVsiZm9udC1zaXplIl0pKihyZVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxyZVsiZm9udC1mYW1pbHkiXSYmKFEubmFtZT1yZVsiZm9udC1mYW1pbHkiXS5zcGxpdCgiLCIpWzBdLnJlcGxhY2UoL1xzKiJccyovZywiIikpLHJlLmNvbG9y''@;'; put 'put ''KXt2YXIgcGU9TjQocmUuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7cGU+PTAmJihRLmNvbG9yPXtyZ2I6cGV9KX1zd2l0Y2gocmVbInRleHQtdHJhbnNmb3JtIl0mJihRLnRleHRfdHJhbnNmb3JtPXJlWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJub25lIiE9KHJlWyJ0ZXh0''@;'; put 'put ''LXNoYWRvdyJdfHwibm9uZSIpJiYoUS5zaGFkb3c9ITApLHJlWyJ0ZXh0LWFsaWduIl0pe2Nhc2UiY2VudGVyIjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoiY2VudGVyIn07YnJlYWs7Y2FzZSJyaWdodCI6US5hbGlnbm1lbnQ9e2hvcml6b250YWw6InJpZ2h0In07YnJlYWs7Y2FzZSJsZWZ0''@;'; put 'put ''IjpRLmFsaWdubWVudD17aG9yaXpvbnRhbDoibGVmdCJ9O2JyZWFrO2Nhc2UianVzdGlmeSI6US5hbGlnbm1lbnQ9e2hvcml6b250YWw6Imp1c3RpZnkifX1zd2l0Y2gocmVbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20iOlEuYWxpZ25tZW50''@;'; put 'put ''fHwoUS5hbGlnbm1lbnQ9e30pLFEuYWxpZ25tZW50LnZlcnRpY2FsPXJlWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1RLmFsaWdubWVudC52ZXJ0aWNhbCYmKFEuYWxpZ25tZW50LnZlcnRpY2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6US52YWxpZ249cmVb''@;'; put 'put ''InZlcnRpY2FsLWFsaWduIl0sUS5zeiYmKFEuc3ovPS44Myl9dmFyIF9lPVAmJmdldENvbXB1dGVkU3R5bGUoUCk7cmV0dXJuIF9lJiZMJiZQJiZbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT12ZS5jaGFyQXQoMCkudG9VcHBlckNh''@;'; put 'put ''c2UoKSt2ZS5zbGljZSgxKSxIZT1fZVsiYm9yZGVyLSIrdmUrIi1zdHlsZSJdO2lmKCgibm9uZSI9PUhlfHwhSGUpJiYoSGU9X2VbImJvcmRlciIrU2UrIlN0eWxlIl0pLCJub25lIiE9SGUmJkhlKXt2YXIgQmU9cGFyc2VJbnQoX2VbImJvcmRlci0iK3ZlKyItd2lkdGgiXXx8X2VbImJvcmRl''@;'; put 'put ''ciIrU2UrIldpZHRoIl0sMTApLEdlPSJ0aGluIjtpZihCZT4wKXtzd2l0Y2goSGUpe2Nhc2UiZG91YmxlIjpHZT0iZG91YmxlIjticmVhaztjYXNlImRhc2hlZCI6R2U9QmU+PTI/Im1lZGl1bURhc2hlZCI6ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOkdlPUJlPj0yPyJtZWRpdW1EYXNo''@;'; put 'put ''RG90RG90IjoiZG90dGVkIjticmVhaztjYXNlInNvbGlkIjpHZT1CZT49Mz8idGhpY2siOkJlPj0yPyJtZWRpdW0iOiJ0aGluIn1pZihRW3ZlXT17c3R5bGU6R2V9LF9lWyJib3JkZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3JkZXIiK1NlKyJDb2xvciJdKXt2YXIgbnQ9TjQoKF9lWyJib3Jk''@;'; put 'put ''ZXItIit2ZSsiLWNvbG9yIl18fF9lWyJib3JkZXIiK1NlKyJDb2xvciJdKS50b0xvd2VyQ2FzZSgpLCEwKTtudD49MCYmKFFbdmVdLmNvbG9yPXtyZ2I6bnR9KX19fX0pLFF9ZnVuY3Rpb24gb18oeSxQLEwpe3ZhciBRPXkuY2hpbGROb2RlcztpZigxPT15Lm5vZGVUeXBlKXN3aXRjaCh5LnRh''@;'; put 'put ''Z05hbWUudG9Mb3dlckNhc2UoKSl7Y2FzZSJwIjpQLmxlbmd0aD4wJiZQLnB1c2goe3Q6InQiLHY6IlxuIixzOkx9KTticmVhaztjYXNlInNlbGVjdCI6cmV0dXJuIGZ1bmN0aW9uIGFSKHksUCxMKXtQLnB1c2goe3Q6InQiLHY6eS5jaGlsZHJlblt5LnNlbGVjdGVkSW5kZXhdLmlubmVyVGV4''@;'; put 'put ''dCxzOkx9KX0oeSxQLEwpfWlmKFEubGVuZ3RoPjApe3ZhciByZT12Zih5LG51bGwsITEpO0wmJihMLnVuZGVybGluZSYmKHJlLnVuZGVybGluZT1MLnVuZGVybGluZSksTC5zdHJpa2UmJihyZS5zdHJpa2U9TC5zdHJpa2UpKTtmb3IodmFyIHBlPTA7cGU8US5sZW5ndGg7KytwZSl7dHJ5e2lm''@;'; put 'put ''KFFbcGVdLmdldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSljb250aW51ZX1jYXRjaHt9b18oUVtwZV0sUCxyZSl9ZGVsZXRlIHJlLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYoMz09eS5ub2RlVHlwZSl7dmFyIF9lPXt0OiJ0Iix2Onkubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIiku''@;'; put 'put ''cmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOkx9O3N3aXRjaChMLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6X2Uudj1fZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOl9lLnY9X2Uudi50b0xvd2VyQ2FzZSgpfShQLmxlbmd0aD4wfHxfZS52JiYiICIhPV9l''@;'; put 'put ''LnYpJiZQLnB1c2goX2UpfWVsc2UgMT09eS5ub2RlVHlwZSYmImJyIj09PXkudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZQLnB1c2goe3Q6InQiLHY6IlxuIixzOkx9KX1mdW5jdGlvbiBzXyh5LFAsTCxRLHJlKXt2YXIgX2UscGU9eS5pbm5lckhUTUw7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5''@;'; put 'put ''bGU8InUiKXN3aXRjaChfZT1nZXRDb21wdXRlZFN0eWxlKHkpLChfZVsid2hpdGUtc3BhY2UiXXx8IiIpLm1hdGNoKC9wcmUvKSYmKHBlPXBlLnJlcGxhY2UoL1xuL2csIjxici8+IikpLChfZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpw''@;'; put 'put ''ZT1wZS50b1VwcGVyQ2FzZSgpO2JyZWFrO2Nhc2UibG93ZXJjYXNlIjpwZT1wZS50b0xvd2VyQ2FzZSgpfXZhciB2ZT1mdW5jdGlvbiBzUih5LFAsTCxRKXt2YXIgcmU9e3Q6InMiLHY6UH0scGU9IiI7aWYoeSl7TD15LmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fHkuZ2V0QXR0cmlidXRlKCJ0''@;'; put 'put ''Iik7dmFyIF9lPXkuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8eS5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0ocGU9eS5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHx5LmdldEF0dHJpYnV0ZSgieiIpKSYmKHJlLno9cGUpLG51bGwhPUwmJm51bGwhPV9lKXJldHVybiByZS50PUwscmUudj1f''@;'; put 'put ''ZSxyZX1yZXR1cm4gbnVsbCE9UCYmKDA9PVAubGVuZ3RoP3JlLnQ9THx8InoiOlEucmF3fHwhUC50cmltKCkubGVuZ3RofHwicyI9PUx8fChyZT0kbihQLFEpKSkscGUmJihyZS56PXBlKSxyZX0oeSxSYyhwZSksTCxyZSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYodmUucz12''@;'; put 'put ''Zih5LFAscmUuYm9yZGVycyksZGVsZXRlIHZlLnMudGV4dF90cmFuc2Zvcm0seS5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT15LmNoaWxkTm9kZXMubGVuZ3RoJiYzIT15LmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChvXyh5LHZlLlI9W10sbnVsbCksdmUuUiYmdmUuUlt2ZS5SLmxl''@;'; put 'put ''bmd0aC0xXSYmIlxuIj09dmUuUlt2ZS5SLmxlbmd0aC0xXS52JiZ2ZS5SLmxlbmd0aC0tLChfZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjp2ZS5SLmZvckVhY2goZnVuY3Rpb24obnQpe250LnY9bnQudi50b1VwcGVyQ2FzZSgpfSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJsb3dlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihudCl7bnQudj1udC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXZlLnQpe3ZhciBTZT12ZS52Lm1hdGNoKC9cbi8pOyFTZSYmdmUuUiYmdmUuUi5mb3JFYWNoKGZ1bmN0aW9uKG50KXsic3RyaW5nIj09dHlwZW9mIG50''@;'; put 'put ''LnYmJm50LnYubWF0Y2goL1xuLykmJihTZT0hMCl9KSwicyI9PXZlLnQmJlNlJiYodmUuc3x8KHZlLnM9e30pLHZlLnMuYWxpZ25tZW50fHwodmUucy5hbGlnbm1lbnQ9e30pLHZlLnMuYWxpZ25tZW50LndyYXBUZXh0PSEwKX1pZihQKXt2YXIgSGU9IiIsQmU9UC5nZXRFbGVtZW50c0J5VGFn''@;'; put 'put ''TmFtZSgiQSIpO2lmKEJlJiZCZS5sZW5ndGgpZm9yKHZhciBHZT0wO0dlPEJlLmxlbmd0aCYmKCFCZVtHZV0uaGFzQXR0cmlidXRlKCJocmVmIil8fCIjIj09KEhlPUJlW0dlXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0KDApKTsrK0dlKTtIZSYmIiMiIT1IZS5jaGFyQXQoMCkmJih2''@;'; put 'put ''ZS5sPXtUYXJnZXQ6SGV9KX1yZXR1cm4gdmV9ZnVuY3Rpb24gQU0oeSxQLEwpe3ZhciByZSxRPVAucm93cztpZighUSl7aWYoTCYmbnVsbCE9TC5vcmlnaW4pdGhyb3ciVW5zdXBwb3J0ZWQgb3JpZ2luIHdoZW4gIitQLnRhZ05hbWUrIiBpcyBub3QgYSBUQUJMRSI7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''IGtNKHksUCxMKXtMPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTHx8e30pKTt2YXIgcGU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt5WyIhbWVyZ2VzIl18fCh5WyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgdmUsX2U9UC5jaGlsZHJlbixTZT0wLEhlPTA7SGU8X2UubGVuZ3RoOysrSGUp''@;'; put 'put ''e3ZhciBudCxCZT1fZVtIZV0sR2U9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9udD1nZXRDb21wdXRlZFN0eWxlOkJlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBCZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk''@;'; put 'put ''U3R5bGUmJihudD1CZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighbnR8fCJub25lIiE9bnQoQmUpLmRpc3BsYXkpc3dpdGNoKEJlLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7Y2FzZSJUQUJMRSI6U2U9LTEseVsiIXJlZiJdJiYoTC5vcmln''@;'; put 'put ''aW49LTEpLEFNKHksQmUsTCk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6U2U9LTEseVsiIXJlZiJdPygrKyhwZT1Xcyh5WyIhcmVmIl0pKS5lLnIseVsiIXJlZiJdPU9vKHBlKSk6eVsiIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2FzZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2Fz''@;'; put 'put ''ZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6U2U9LTEsdmU9c18oQmUsbnVsbCwiIiwwLEwpLHlbIiFyZWYiXT8oTC5vcmlnaW49LTEsczAoeSxbW3ZlXV0sTCkpOih5WyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5KHkpPyh5WzBdfHwoeVswXT1bXSkseVswXVswXT12ZSk6eS5B''@;'; put 'put ''MT12ZSkseVsiIXJvd3MiXXx8KHlbIiFyb3dzIl09W10pLG50JiYocGU9V3MoeVsiIXJlZiJdKSwoR2U9bnQoQmUpLmhlaWdodCkmJiJhdXRvIiE9R2UmJih5WyIhcm93cyJdW3BlLmUucl09e2hwdDpwYXJzZUludChHZSwxMCl9KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6''@;'; put 'put ''Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOnZlPXNfKEJlLG51bGwsIiIsMCxMKSx5WyIhcmVmIl18fCh5WyIhcmVmIl09IkExOkExIiksczAoeSxbW3ZlXV0se29yaWdpbjpkaSh7cjooU2U8MD8xOjApKyhwZT1Xcyh5WyIh''@;'; put 'put ''cmVmIl0pKS5lLnIsYzorK1NlfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjpTZT0tMSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''U2U9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitCZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4geX0oeSxQLEwpfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/cmU9Z2V0Q29tcHV0ZWRTdHlsZTpQLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiBQLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKHJlPVAub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIHBlPUx8fHt9O251bGwhPXRlJiYocGUuZGVuc2U9dGUpO3ZhciBfZT0wLHZlPTA7''@;'; put 'put ''aWYobnVsbCE9cGUub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgcGUub3JpZ2luKV9lPXBlLm9yaWdpbjtlbHNle3ZhciBTZT0ic3RyaW5nIj09dHlwZW9mIHBlLm9yaWdpbj9zcyhwZS5vcmlnaW4pOnBlLm9yaWdpbjtfZT1TZS5yLHZlPVNlLmN9dmFyIEhlPU1hdGgubWluKHBlLnNoZWV0''@;'; put 'put ''Um93c3x8MWU3LFEubGVuZ3RoKSxCZT17czp7cjowLGM6MH0sZTp7cjpfZSxjOnZlfX07aWYoeVsiIXJlZiJdKXt2YXIgR2U9V3MoeVsiIXJlZiJdKTtCZS5zLnI9TWF0aC5taW4oQmUucy5yLEdlLnMuciksQmUucy5jPU1hdGgubWluKEJlLnMuYyxHZS5zLmMpLEJlLmUucj1NYXRoLm1heChC''@;'; put 'put ''ZS5lLnIsR2UuZS5yKSxCZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksLTE9PV9lJiYoQmUuZS5yPV9lPUdlLmUucisxKX12YXIgbnQ9W10sZHQ9MCxDdD15WyIhcm93cyJdfHwoeVsiIXJvd3MiXT1bXSksY3Q9MCxidD0wLEZ0PTAsRXQ9MCxUdD0wLFp0PTA7Zm9yKHlbIiFjb2xzIl18''@;'; put 'put ''fCh5WyIhY29scyJdPVtdKTtjdDxRLmxlbmd0aCYmYnQ8SGU7KytjdCl7Zm9yKHZhciBwbj1RW2N0XSxLbj1wbi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPUtuLnRhZ05hbWUudG9VcHBlckNhc2UoKTspS249S24ucGFyZW50RWxlbWVudDtpZihLbj09UCl7ZTppZih0eXBlb2YgcmU8InUiKXt2''@;'; put 'put ''YXIgdW49cmUocG4pO2lmKG51bGw9PXVuKWJyZWFrIGU7aWYodW4uc3R5bGV8fCh1bi5zdHlsZT17fSkscGUuZGlzcGxheSYmIm5vbmUiPT0odW4uZGlzcGxheXx8dW4uc3R5bGUuZGlzcGxheSkpY29udGludWU7Im5vbmUiPT0odW4uZGlzcGxheXx8dW4uc3R5bGUuZGlzcGxheSkmJigoQ3Rb''@;'; put 'put ''YnRdfHwoQ3RbYnRdPXt9KSkuaGlkZGVuPSEwKX12YXIgcW49cG4uY2VsbHM7Zm9yKEZ0PUV0PTA7RnQ8cW4ubGVuZ3RoOysrRnQpe3ZhciB6bj1xbltGdF0sa249bnVsbDtpZighKHR5cGVvZiByZTwidSImJihudWxsPT1rbiYmKGtuPXJlKHpuKSksa24uc3R5bGV8fChrbi5zdHlsZT17fSks''@;'; put 'put ''cGUuZGlzcGxheSYmbnVsbCE9a24mJiJub25lIj09KGtuLmRpc3BsYXl8fGtuLnN0eWxlLmRpc3BsYXkpKSkpe2ZvcihadD0rem4uZ2V0QXR0cmlidXRlKCJjb2xzcGFuIil8fDEsZHQ9MDtkdDxudC5sZW5ndGg7KytkdCl7dmFyIGVyPW50W2R0XTtlci5zLmM9PUV0K3ZlJiZlci5zLnI8YnQr''@;'; put 'put ''X2UmJmJ0K19lPD1lci5lLnImJihFdD1lci5lLmMrMS12ZSxkdD0tMSl9KChUdD0rem4uZ2V0QXR0cmlidXRlKCJyb3dzcGFuIil8fDEpPjF8fFp0PjEpJiZudC5wdXNoKHtzOntyOmJ0K19lLGM6RXQrdmV9LGU6e3I6YnQrX2UrKFR0fHwxKS0xLGM6RXQrdmUrKFp0fHwxKS0xfX0pO3ZhciB0''@;'; put 'put ''cj16bi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsWm49em4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTppZih0eXBlb2YgcmU8InUiKXtpZihudWxsPT1rbiYmKGtuPXJlKHpuKSksbnVsbD09a24pYnJlYWsgZTtpZihrbi5zdHlsZXx8KGtuLnN0eWxlPXt9KSwxPT1adCYma24ud2lkdGgmJih5''@;'; put 'put ''WyIhY29scyJdW0V0K3ZlXT15WyIhY29scyJdW0V0K3ZlXXx8e30sa24ud2lkdGgubWF0Y2goL3B4Lyk/eVsiIWNvbHMiXVtFdCt2ZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KGtuLndpZHRoLDEwKSs1LHlbIiFjb2xzIl1bRXQrdmVdLndweHx8MCk6a24ud2lkdGgubWF0Y2goL3B0LykmJih5''@;'; put 'put ''WyIhY29scyJdW0V0K3ZlXS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChrbi53aWR0aCwxMCkvMys1LHlbIiFjb2xzIl1bRXQrdmVdLndweHx8MCkpKSxUdDw9MSl7Q3RbYnQrX2VdfHwoQ3RbYnQrX2VdPXt9KTt2YXIgVnI9a24uaGVpZ2h0OyhWcj1Wci5tYXRjaCgvcHQvKT9VMShwYXJzZUlu''@;'; put 'put ''dChWciwxMCkpOnBhcnNlSW50KFZyLDEwKSk+KEN0W2J0K19lXS5ocHh8fFUxKEN0W2J0K19lXS5ocHQpfHwwKSYmKGRlbGV0ZSBDdFtidCtfZV0uaHB0LEN0W2J0K19lXS5ocHg9VnIpfX12YXIgb2k9em47aWYoem4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PXpuLmNoaWxkcmVuLmxlbmd0aCYm''@;'; put 'put ''InNwYW4iPT16bi5maXJzdEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIGtpPTAsTGk9em4uY2hpbGROb2RlcyxRcj0wO1FyPExpLmxlbmd0aDsrK1FyKTM9PUxpW1FyXS5ub2RlVHlwZSYmKytraTswPT1raSYmKHpuPXpuLmZpcnN0RWxlbWVudENoaWxkKX12''@;'; put 'put ''YXIgdXI9c18oem4sb2ksdHIsMCxwZSk7aWYoa24pe3ZhciBBbj1yZSh6bik7aWYoQW4mJiFBbi5zdHlsZSYmKEFuLnN0eWxlPXt9KSwoQW4mJkFuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fGtuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pJiYodXIuc3x8KHVyLnM9e30pLCF1ci5zLmZnQ29sb3IpKXRy''@;'; put 'put ''eXt2YXIgdnI9QW4mJkFuWyJiYWNrZ3JvdW5kLWNvbG9yIl18fGtuWyJiYWNrZ3JvdW5kLWNvbG9yIl07dnIubWF0Y2goL3JnYmFbKF1ccyowLipbKV0vaSkmJih2cj1rblsiYmFja2dyb3VuZC1jb2xvciJdKTt2YXIgcnI9TjQodnIudG9Mb3dlckNhc2UoKSwhMCk7cnI+PTAmJih1ci5zLmZn''@;'; put 'put ''Q29sb3I9e3JnYjpycn0pfWNhdGNoe31zd2l0Y2goa25bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlkZGxlIjpjYXNlImJhc2VsaW5lIjp1ci5zfHwodXIucz17fSksdXIucy5hbGlnbm1lbnR8fCh1ci5zLmFsaWdubWVudD17fSksdXIucy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9''@;'; put 'put ''fWlmKFpuJiYodXIuc3x8KHVyLnM9e30pLCF1ci5zLmZnQ29sb3IpKXRyeXt2YXIgU249TjQoWm4udG9Mb3dlckNhc2UoKSwhMCk7U24+PTAmJih1ci5zLmZnQ29sb3I9e3JnYjpTbn0pfWNhdGNoe31pZihwZS5kZW5zZT8oeVtidCtfZV18fCh5W2J0K19lXT1bXSkseVtidCtfZV1bRXQrdmVd''@;'; put 'put ''PXVyKTp5W2RpKHtjOkV0K3ZlLHI6YnQrX2V9KV09dXIsVHQ+MXx8WnQ+MSlmb3IodmFyIHByPWJ0O3ByPGJ0K1R0OysrcHIpZm9yKHZhciBDaT1FdDtDaTxFdCtadDsrK0NpKWJ0PT1wciYmRXQ9PUNpfHwocGUuZGVuc2U/KHlbcHIrX2VdfHwoeVtwcitfZV09W10pLHlbcHIrX2VdW0NpK3Zl''@;'; put 'put ''XT17dDoieiIsczpvbih1ci5zfHx7fSl9KTp5W2RpKHtjOkNpK3ZlLHI6cHIrX2V9KV09e3Q6InoiLHM6b24odXIuc3x8e30pfSk7QmUuZS5jPEV0K3ZlJiYoQmUuZS5jPUV0K3ZlKSxFdCs9WnR9fSsrYnR9fWlmKG50Lmxlbmd0aCYmKHlbIiFtZXJnZXMiXT0oeVsiIW1lcmdlcyJdfHxbXSku''@;'; put 'put ''Y29uY2F0KG50KSksQmUuZS5yPU1hdGgubWF4KEJlLmUucixidC0xK19lKSx5WyIhcmVmIl09T28oQmUpLGJ0Pj1IZSYmKHlbIiFmdWxscmVmIl09T28oKEJlLmUucj1RLmxlbmd0aC1jdCtidC0xK19lLEJlKSkpLHBlLmJvcmRlcnMpZm9yKGJ0PUJlLnMucjtidDw9QmUuZS5yOysrYnQpZm9y''@;'; put 'put ''KEV0PUJlLnMuYztFdDw9QmUuZS5jOysrRXQpaWYoIXBlLmRlbnNlKXt2YXIganI9eVtkaSh7cjpidCxjOkV0fSldO2lmKCFqcnx8IWpyLnMpY29udGludWU7aWYoYnQ+MCl7dmFyIGppPXlbZGkoe3I6YnQtMSxjOkV0fSldO2ppJiZqaS5zJiZqaS5zLmJvdHRvbSYmZGVsZXRlIGpyLnMudG9w''@;'; put 'put ''fWlmKEV0PjApe3ZhciBfbz15W2RpKHtyOmJ0LGM6RXQtMX0pXTtfbyYmX28ucyYmX28ucy5ib3R0b20mJmRlbGV0ZSBqci5zLmxlZnR9fXJldHVybiB5fWZ1bmN0aW9uIEh1KHksUCl7cmV0dXJuIEFNKChQfHx7fSkuZGVuc2U/W106e30seSxQKX12YXIgUTA9ZnVuY3Rpb24oKXt2YXIgeT1m''@;'; put 'put ''dW5jdGlvbihRLHJlLHBlKXt2YXIgX2U9US5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5yZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oQmUsR2Upe3JldHVybiBB''@;'; put 'put ''cnJheShwYXJzZUludChHZSwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIiksdmU9eHIoX2UucmVwbGFjZSgvPFtePl0qPi9nLCIiKSksU2U9W10sSGU9MDtyZXR1cm4gX2UucmVw''@;'; put 'put ''bGFjZSgvKDx0ZXh0OnNwYW4uKj8+KSguKj8pPFtcL110ZXh0OnNwYW4+L2csZnVuY3Rpb24oQmUsR2UsbnQsZHQpe2R0IT1IZSYmU2UucHVzaCh7dDoicyIsdjp4cihfZS5zbGljZShIZSxkdCkpfSk7dmFyIEN0PXt0OiJzIix2OnhyKG50KX0sY3Q9bG4oR2UpWyJzdHlsZS1uYW1lIl07cmV0''@;'; put 'put ''dXJuIGN0JiZwZVtjdF0mJihDdC5zPW9uKHBlW2N0XSkpLFNlLnB1c2goQ3QpLEhlPWR0K0JlLmxlbmd0aCwiIn0pLEhlPF9lLmxlbmd0aCYmU2UucHVzaCh7dDoicyIsdjp4cihfZS5zbGljZShIZSkpfSksW3ZlLFNlXX0sUD17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFy''@;'; put 'put ''OlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpbInMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRl''@;'; put 'put ''ciInXX0sTD1mdW5jdGlvbihRLHJlKXt2YXIgcGU9bG4oUS5zbGljZSgwLFEuaW5kZXhPZigiPiIpKSksX2U9US5zbGljZShRLmluZGV4T2YoIj4iKSsxKSx2ZT17bmFtZTpwZS5uYW1lLGZhbWlseTpwZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFt''@;'; put 'put ''ZSIsImRhdGEtc3R5bGUtbmFtZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKEhlKXtwZVtIZVsxXV0mJih2ZVtIZVswXV09cGVbSGVbMV1dKX0pO3ZhciBTZT17fTtfZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEhlKXt2YXIgQmU9bG4oSGUpO2lmKCI8''@;'; put 'put ''c3R5bGU6dGV4dC1wcm9wZXJ0aWVzIj09PUJlWzBdKXtpZihCZVsiZm9udC13ZWlnaHQiXSYmKFNlLmJvbGQ9KygiYm9sZCI9PUJlWyJmb250LXdlaWdodCJdfHwiNzAwIj09QmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PUJlWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09QmVbImZv''@;'; put 'put ''bnQtc3R5bGUiXSkmJihTZS5pdGFsaWM9MSksIm5vbmUiIT0oQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/U2UudW5kZXJsaW5lPSJkb3VibGUiPT1CZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooQmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09QmVb''@;'; put 'put ''InRleHQtdW5kZXJsaW5lLXR5cGUiXSkmJihTZS51bmRlcmxpbmU9MCksKEJlWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKFNlLnN6PStCZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oQmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25l''@;'; put 'put ''IikmJihTZS5zdHJpa2U9MSksQmVbImZvbnQtbmFtZSJdJiYoU2UubmFtZT1CZVsiZm9udC1uYW1lIl0pLEJlLmNvbG9yKXt2YXIgR2U9TjQoQmUuY29sb3IsITApO0dlPj0wJiYoU2UuY29sb3I9R2UpfXN3aXRjaChCZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjpTZS52YWxpZ249''@;'; put 'put ''InN1cGVyIjticmVhaztjYXNlInN1YiI6U2UudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KEJlWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoU2UudmFsaWduPSItIj09QmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oQmVb''@;'; put 'put ''InRleHQtc2hhZG93Il18fCJub25lIikmJihTZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxyZVtwZS5uYW1lXT1TZX07cmV0dXJuIGZ1bmN0aW9uKHJlLHBlKXt2YXIgX2U9cGV8fHt9O251bGwhPXRlJiZudWxsPT1fZS5kZW5zZSYmKF9lLmRlbnNlPXRlKTt2YXIgSGUsQmUsQ3QsY3QsVHQsWnQs''@;'; put 'put ''dmU9UXYocmUpLFNlPVtdLEdlPXtuYW1lOiIifSxudD0iIixkdD0wLGJ0PXt9LEZ0PVtdLEV0PV9lLmRlbnNlP1tdOnt9LHBuPXt2YWx1ZToiIn0sS249IiIsdW49MCx6bj1bXSxrbj0tMSxlcj0tMSx0cj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxabj0wLFZyPXt9LG9pPVtdLGtp''@;'; put 'put ''PXt9LExpPTAsUXI9MCx1cj1bXSxBbj0xLHZyPTEscnI9W10sU249e05hbWVzOltdfSxwcj17fSxDaT1bIiIsIiJdLGpyPVtdLGppPXt9LF9vPXt9LERpPTAsWW89IiIsbG89MCxBbz0hMSx4bz0hMSxoaT0wO2ZvcihCci5sYXN0SW5kZXg9MCx2ZT12ZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/''@;'; put 'put ''KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO1R0PUJyLmV4ZWModmUpOylzd2l0Y2goVHRbM109VHRbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09VHRbMV0/KEV0WyIh''@;'; put 'put ''cmVmIl09dHIuZS5jPj10ci5zLmMmJnRyLmUucj49dHIucy5yP09vKHRyKToiQTE6QTEiLF9lLnNoZWV0Um93cz4wJiZfZS5zaGVldFJvd3M8PXRyLmUuciYmKEV0WyIhZnVsbHJlZiJdPUV0WyIhcmVmIl0sdHIuZS5yPV9lLnNoZWV0Um93cy0xLEV0WyIhcmVmIl09T28odHIpKSxvaS5sZW5n''@;'; put 'put ''dGgmJihFdFsiIW1lcmdlcyJdPW9pKSx1ci5sZW5ndGgmJihFdFsiIXJvd3MiXT11ciksQ3QubmFtZT1DdC5cdTU0MGRcdTc5ZjB8fEN0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShDdCksRnQucHVzaChDdC5uYW1lKSxidFtDdC5uYW1lXT1FdCx4bz0hMSk6Ii8iIT09''@;'; put 'put ''VHRbMF0uY2hhckF0KFR0WzBdLmxlbmd0aC0yKSYmKEN0PWxuKFR0WzBdLCExKSxrbj1lcj0tMSx0ci5zLnI9dHIucy5jPTFlNyx0ci5lLnI9dHIuZS5jPTAsRXQ9X2UuZGVuc2U/W106e30sb2k9W10sdXI9W10seG89ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1UdFsx''@;'; put 'put ''XT8tLVpuOisrWm47YnJlYWs7Y2FzZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1UdFsxXSl7a24rPUFuLEFuPTE7YnJlYWt9aWYoKGN0PWxuKFR0WzBdLCExKSkuXHU4ODRjXHU1M2Y3P2tuPWN0Llx1ODg0Y1x1NTNmNy0xOi0xPT1rbiYmKGtuPTApLChBbj0rY3RbIm51bWJl''@;'; put 'put ''ci1yb3dzLXJlcGVhdGVkIl18fDEpPDEwKWZvcihoaT0wO2hpPEFuOysraGkpWm4+MCYmKHVyW2tuK2hpXT17bGV2ZWw6Wm59KTtlcj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09VHRbMV0mJisrZXIsX2Uuc2hlZXRTdHVicyYmKF9lLmRlbnNlPyhFdFtrbl18fChF''@;'; put 'put ''dFtrbl09W10pLEV0W2tuXVtlcl09e3Q6InoifSk6RXRbZGkoe3I6a24sYzplcn0pXT17dDoieiJ9KSxLbj0iIix6bj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpKSsrZXIscG49bG4oVHRb''@;'; put 'put ''MF0sITEpLHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLFp0PXt0OiJ6Iix2Om51bGx9LHBuLmZvcm11bGEmJjAhPV9lLmNlbGxGb3JtdWxhJiYoWnQuZj1sUyh4cihwbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0ocG4uXHU2NTcwXHU2MzZlXHU3Yzdi''@;'; put 'put ''XHU1NzhifHxwblsidmFsdWUtdHlwZSJdKSYmKFp0LnQ9InMiLFp0LnY9eHIocG5bInN0cmluZy12YWx1ZSJdfHwiIiksX2UuZGVuc2U/KEV0W2tuXXx8KEV0W2tuXT1bXSksRXRba25dW2VyXT1adCk6RXRbZGkoe3I6a24sYzplcn0pXT1adCksZXIrPXZyLTE7ZWxzZSBpZigiLyIhPT1UdFsx''@;'; put 'put ''XSl7dnI9MTt2YXIgdGE9QW4/a24rQW4tMTprbjtpZigrK2VyPnRyLmUuYyYmKHRyLmUuYz1lciksZXI8dHIucy5jJiYodHIucy5jPWVyKSxrbjx0ci5zLnImJih0ci5zLnI9a24pLHRhPnRyLmUuciYmKHRyLmUucj10YSksanI9W10samk9e30sWnQ9e3Q6KHBuPWxuKFR0WzBdLCExKSkuXHU2''@;'; put 'put ''NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxwblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sX2UuY2VsbEZvcm11bGEpaWYocG4uZm9ybXVsYSYmKHBuLmZvcm11bGE9eHIocG4uZm9ybXVsYSkpLHBuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZwblsibnVtYmVyLW1hdHJpeC1yb3dz''@;'; put 'put ''LXNwYW5uZWQiXSYmKExpPXBhcnNlSW50KHBuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxRcj1wYXJzZUludChwblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsWnQuRj1PbyhraT17czp7cjprbixjOmVyfSxlOntyOmtuK0xpLTEsYzplcitR''@;'; put 'put ''ci0xfX0pLHJyLnB1c2goW2tpLFp0LkZdKSkscG4uZm9ybXVsYSladC5mPWxTKHBuLmZvcm11bGEpO2Vsc2UgZm9yKGhpPTA7aGk8cnIubGVuZ3RoOysraGkpa24+PXJyW2hpXVswXS5zLnImJmtuPD1ycltoaV1bMF0uZS5yJiZlcj49cnJbaGldWzBdLnMuYyYmZXI8PXJyW2hpXVswXS5lLmMm''@;'; put 'put ''JihadC5GPXJyW2hpXVsxXSk7c3dpdGNoKChwblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxwblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKExpPXBhcnNlSW50KHBuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLFFyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1zcGFu''@;'; put 'put ''bmVkIl0sMTApfHwwLG9pLnB1c2goa2k9e3M6e3I6a24sYzplcn0sZTp7cjprbitMaS0xLGM6ZXIrUXItMX19KSkscG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJih2cj1wYXJzZUludChwblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLFp0LnQpe2Nhc2UiYm9vbGVhbiI6''@;'; put 'put ''WnQudD0iYiIsWnQudj15cihwblsiYm9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOlp0LnQ9Im4iLFp0LnY9cGFyc2VGbG9hdChwbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpadC50PSJkIixadC52PUh0KHBuWyJkYXRl''@;'; put 'put ''LXZhbHVlIl0pLF9lLmNlbGxEYXRlc3x8KFp0LnQ9Im4iLFp0LnY9VWUoWnQudikpLFp0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpadC50PSJuIixadC52PWl0KHBuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLF9lLmNlbGxEYXRlcyYmKFp0LnQ9ImQiLFp0LnY9aHQoWnQudikpLFp0Lno9''@;'; put 'put ''IkhIOk1NOlNTIjticmVhaztjYXNlIm51bWJlciI6WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KHBuLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PVp0LnQmJiJ0ZXh0IiE9PVp0LnQmJlp0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRl''@;'; put 'put ''ZCB2YWx1ZSB0eXBlICIrWnQudCk7WnQudD0icyIsbnVsbCE9cG5bInN0cmluZy12YWx1ZSJdJiYoS249eHIocG5bInN0cmluZy12YWx1ZSJdKSx6bj1bXSl9fWVsc2V7aWYoQW89ITEsInMiPT09WnQudCYmKFp0LnY9S258fCIiLHpuLmxlbmd0aCYmKFp0LlI9em4pLEFvPTA9PXVuKSxwci5U''@;'; put 'put ''YXJnZXQmJihadC5sPXByKSxqci5sZW5ndGg+MCYmKFp0LmM9anIsanI9W10pLEtuJiYhMSE9PV9lLmNlbGxUZXh0JiYoWnQudz1LbiksQW8mJihadC50PSJ6IixkZWxldGUgWnQudiksX2UuY2VsbEhUTUwmJihadC5oPVp0LlI/azkoWnQuUik6cm8oIiIrWnQudikpLCghQW98fF9lLnNoZWV0''@;'; put 'put ''U3R1YnMpJiYhKF9lLnNoZWV0Um93cyYmX2Uuc2hlZXRSb3dzPD1rbikpZm9yKHZhciBNbj0wO01uPEFuOysrTW4pe2lmKHZyPXBhcnNlSW50KHBuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLF9lLmRlbnNlKWZvcihFdFtrbitNbl18fChFdFtrbitNbl09W10pLEV0W2tu''@;'; put 'put ''K01uXVtlcl09MD09TW4/WnQ6b24oWnQpOy0tdnI+MDspRXRba24rTW5dW2VyK3ZyXT1vbihadCk7ZWxzZSBmb3IoRXRbZGkoe3I6a24rTW4sYzplcn0pXT1adDstLXZyPjA7KUV0W2RpKHtyOmtuK01uLGM6ZXIrdnJ9KV09b24oWnQpO3RyLmUuYzw9ZXImJih0ci5lLmM9ZXIpfWVyKz0odnI9''@;'; put 'put ''cGFyc2VJbnQocG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkpLTEsdnI9MCxadD17fSxLbj0iIix6bj1bXX1wcj17fTticmVhaztjYXNlImRvY3VtZW50IjpjYXNlImRvY3VtZW50LWNvbnRlbnQiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjXHU2NTg3XHU2ODYz''@;'; put 'put ''IjpjYXNlInNwcmVhZHNoZWV0IjpjYXNlIlx1NGUzYlx1NGY1MyI6Y2FzZSJzY3JpcHRzIjpjYXNlInN0eWxlcyI6Y2FzZSJmb250LWZhY2UtZGVjbHMiOmNhc2UibWFzdGVyLXN0eWxlcyI6aWYoIi8iPT09VHRbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3Rh''@;'; put 'put ''dGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCEwXSk7YnJlYWs7Y2FzZSJhbm5vdGF0aW9uIjppZigiLyI9PT1UdFsxXSl7aWYoKEhlPVNlLnBvcCgpKVswXSE9PVR0WzNdKXRocm93IkJhZCBzdGF0ZTogIitIZTtqaS50PUtu''@;'; put 'put ''LHpuLmxlbmd0aCYmKGppLlI9em4pLGppLmE9WW8sanIucHVzaChqaSl9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCExXSk7WW89IiIsbG89MCxLbj0iIix1bj0wLHpuPVtdO2JyZWFrO2Nhc2UiY3JlYXRvciI6Ii8iPT09VHRbMV0/WW89''@;'; put 'put ''dmUuc2xpY2UobG8sVHQuaW5kZXgpOmxvPVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25m''@;'; put 'put ''aWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtz''@;'; put 'put ''IjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6aWYoIi8iPT09VHRbMV0pe2lmKChIZT1TZS5wb3AoKSlbMF0hPT1UdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIrSGV9ZWxzZSIvIiE9PVR0WzBdLmNoYXJBdChUdFswXS5sZW5ndGgtMikmJlNlLnB1c2goW1R0WzNdLCExXSk7S249''@;'; put 'put ''IiIsdW49MCx6bj1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNlImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJw''@;'; put 'put ''YWdlLWxheW91dCI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNlIjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9w''@;'; put 'put ''ZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4tc3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1''@;'; put 'put ''ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1jb2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxs''@;'; put 'put ''LWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNlImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1i''@;'; put 'put ''eSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2UibGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291''@;'; put 'put ''cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNl''@;'; put 'put ''ImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZpbHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNh''@;'; put 'put ''c2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55''@;'; put 'put ''IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRlci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJh''@;'; put 'put ''dXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJmaWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNh''@;'; put 'put ''c2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3RpYyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUi''@;'; put 'put ''OmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3Qt''@;'; put 'put ''ZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2Fz''@;'; put 'put ''ZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNh''@;'; put 'put ''c2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3Qt''@;'; put 'put ''Z3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNvbW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PVR0WzFdKXtpZihWcltHZS5uYW1lXT1udCwo''@;'; put 'put ''SGU9U2UucG9wKCkpWzBdIT09VHRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK0hlfWVsc2UiLyIhPT1UdFswXS5jaGFyQXQoVHRbMF0ubGVuZ3RoLTIpJiYobnQ9IiIsR2U9bG4oVHRbMF0sITEpLFNlLnB1c2goW1R0WzNdLCEwXSkpO2JyZWFrO2Nhc2Uic3R5bGUiOiIvPiI9PT1UdFswXS5zbGlj''@;'; put 'put ''ZSgtMik/TChUdFswXSxfbyk6Ii8iPT1UdFsxXT9MKHZlLnNsaWNlKERpLFR0LmluZGV4K1R0WzBdLmxlbmd0aCksX28pOkRpPVR0LmluZGV4O2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2Fz''@;'; put 'put ''ZSJ3ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChTZVtTZS5sZW5ndGgtMV1bMF0pe2Nhc2UidGltZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpCZT1sbihUdFswXSwhMSksbnQrPVBb''@;'; put 'put ''VHRbM11dWyJsb25nIj09PUJlLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09VHRbMF0uc2xpY2UoLTIpKWJyZWFrO2lmKCIvIj09PVR0WzFdKXN3aXRjaChTZVtTZS5sZW5ndGgtMV1bMF0pe2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGlt''@;'; put 'put ''ZS1zdHlsZSI6bnQrPXZlLnNsaWNlKGR0LFR0LmluZGV4KX1lbHNlIGR0PVR0LmluZGV4K1R0WzBdLmxlbmd0aDticmVhaztjYXNlIm5hbWVkLXJhbmdlIjpDaT15digoQmU9bG4oVHRbMF0sITEpKVsiY2VsbC1yYW5nZS1hZGRyZXNzIl0pO3ZhciBNcz17TmFtZTpCZS5uYW1lLFJlZjpDaVsw''@;'; put 'put ''XSsiISIrQ2lbMV19O3hvJiYoTXMuU2hlZXQ9RnQubGVuZ3RoKSxTbi5OYW1lcy5wdXNoKE1zKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKFNlW1NlLmxlbmd0aC0xXVswXSk+LTEpYnJlYWs7aWYoIi8iIT09VHRb''@;'; put 'put ''MV18fHBuJiZwblsic3RyaW5nLXZhbHVlIl0pbG4oVHRbMF0sITEpLHVuPVR0LmluZGV4K1R0WzBdLmxlbmd0aDtlbHNle3ZhciB5cz15KHZlLnNsaWNlKHVuLFR0LmluZGV4KSwwLF9vKTtLbj0oS24ubGVuZ3RoPjA/S24rIlxuIjoiIikreXNbMF0sem49eXNbMV19YnJlYWs7Y2FzZSJkYXRh''@;'; put 'put ''YmFzZS1yYW5nZSI6aWYoIi8iPT09VHRbMV0pYnJlYWs7dHJ5e2J0WyhDaT15dihsbihUdFswXSlbInRhcmdldC1yYW5nZS1hZGRyZXNzIl0pKVswXV1bIiFhdXRvZmlsdGVyIl09e3JlZjpDaVsxXX19Y2F0Y2h7fWJyZWFrO2Nhc2UiYSI6aWYoIi8iIT09VHRbMV0pe2lmKCEocHI9bG4oVHRb''@;'; put 'put ''MF0sITEpKS5ocmVmKWJyZWFrO3ByLlRhcmdldD14cihwci5ocmVmKSxkZWxldGUgcHIuaHJlZiwiIyI9PXByLlRhcmdldC5jaGFyQXQoMCkmJnByLlRhcmdldC5pbmRleE9mKCIuIik+LTE/KENpPXl2KHByLlRhcmdldC5zbGljZSgxKSkscHIuVGFyZ2V0PSIjIitDaVswXSsiISIrQ2lbMV0p''@;'; put 'put ''OnByLlRhcmdldC5tYXRjaCgvXlwuXC5bXFxcL10vKSYmKHByLlRhcmdldD1wci5UYXJnZXQuc2xpY2UoMykpfWJyZWFrO2RlZmF1bHQ6c3dpdGNoKFR0WzJdKXtjYXNlImRjOiI6Y2FzZSJjYWxjZXh0OiI6Y2FzZSJsb2V4dDoiOmNhc2Uib29vOiI6Y2FzZSJjaGFydG9vbzoiOmNhc2UiZHJh''@;'; put 'put ''dzoiOmNhc2Uic3R5bGU6IjpjYXNlImNoYXJ0OiI6Y2FzZSJmb3JtOiI6Y2FzZSJ1b2Y6IjpjYXNlIlx1ODg2ODoiOmNhc2UiXHU1YjU3OiI6YnJlYWs7ZGVmYXVsdDppZihfZS5XVEYpdGhyb3cgbmV3IEVycm9yKFR0KX19dmFyIEVsPXtTaGVldHM6YnQsU2hlZXROYW1lczpGdCxXb3JrYm9v''@;'; put 'put ''azpTbn07cmV0dXJuIF9lLmJvb2tTaGVldHMmJmRlbGV0ZSBFbC5TaGVldHMsRWx9fSgpO2Z1bmN0aW9uIGFfKHksUCl7cmV0dXJuIFEwKHksUCl9dmFyIEsxPWZ1bmN0aW9uKCl7dmFyIHk9WyIgIDxvZmZpY2U6bWFzdGVyLXN0eWxlcz4iLCcgICAgPHN0eWxlOm1hc3Rlci1wYWdlIHN0eWxl''@;'; put 'put ''Om5hbWU9Im1wMSIgc3R5bGU6cGFnZS1sYXlvdXQtbmFtZT0ibXAxIj4nLCIgICAgICA8c3R5bGU6aGVhZGVyLz4iLCcgICAgICA8c3R5bGU6aGVhZGVyLWxlZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgICA8c3R5bGU6Zm9vdGVyLz4iLCcgICAgICA8c3R5bGU6Zm9vdGVyLWxl''@;'; put 'put ''ZnQgc3R5bGU6ZGlzcGxheT0iZmFsc2UiLz4nLCIgICAgPC9zdHlsZTptYXN0ZXItcGFnZT4iLCIgIDwvb2ZmaWNlOm1hc3Rlci1zdHlsZXM+Il0uam9pbigiXG4iKSxQPSI8b2ZmaWNlOmRvY3VtZW50LXN0eWxlcyAiK1BhKHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9w''@;'; put 'put ''ZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0''@;'; put 'put ''ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50Onht''@;'; put 'put ''bG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczpudW1iZXIiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50''@;'; put 'put ''OnhtbG5zOmRhdGFzdHlsZToxLjAiLCJ4bWxuczpzdmciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN2Zy1jb21wYXRpYmxlOjEuMCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJvZmZpY2U6dmVyc2lv''@;'; put 'put ''biI6IjEuMiJ9KSsiPlxuIit5KyJcbjwvb2ZmaWNlOmRvY3VtZW50LXN0eWxlcz4iO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBCbitQfX0oKSx2MD1mdW5jdGlvbigpe3ZhciB5PWZ1bmN0aW9uKHZlLFNlKXtyZXR1cm4gSHIodmUpLnJlcGxhY2UoLyAgKy9nLGZ1bmN0aW9uKEhlKXtyZXR1''@;'; put 'put ''cm4nPHRleHQ6cyB0ZXh0OmM9IicrSGUubGVuZ3RoKyciLz4nfSkucmVwbGFjZSgvXHQvZywiPHRleHQ6dGFiLz4iKS5yZXBsYWNlKC9cbi9nLFNlPyI8dGV4dDpsaW5lLWJyZWFrLz4iOiI8L3RleHQ6cD48dGV4dDpwPiIpLnJlcGxhY2UoL14gLywiPHRleHQ6cy8+IikucmVwbGFjZSgvICQv''@;'; put 'put ''LCI8dGV4dDpzLz4iKX0sUD1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlLm1hcChmdW5jdGlvbihTZSl7dmFyIEhlPSIiO3JldHVybiBudWxsIT1TZS5vZHMmJihIZSs9JyB0ZXh0OnN0eWxlLW5hbWU9IlQnK1NlLm9kcysnIicpLFNlLnY/Ijx0ZXh0OnNwYW4iK0hlKyI+Iit5KFNlLnYsITApKyI8''@;'; put 'put ''L3RleHQ6c3Bhbj4iOiIifSkuam9pbigiIil9LEw9IiAgICAgICAgICA8dGFibGU6dGFibGUtY2VsbCAvPlxuIixyZT1mdW5jdGlvbih2ZSxTZSxIZSl7dmFyIEJlPVtdO0JlLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK0hyKFNlLlNoZWV0TmFtZXNbSGVdKSsnIiB0''@;'; put 'put ''YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIEdlPTAsbnQ9MCxkdD1Xcyh2ZVsiIXJlZiJdfHwiQTEiKSxDdD12ZVsiIW1lcmdlcyJdfHxbXSxjdD0wLGJ0PUFycmF5LmlzQXJyYXkodmUpO2lmKHZlWyIhY29scyJdKWZvcihudD0wO250PD1kdC5lLmM7KytudClCZS5wdXNoKCIgICAg''@;'; put 'put ''ICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyh2ZVsiIWNvbHMiXVtudF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrdmVbIiFjb2xzIl1bbnRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIgRXQ9dmVbIiFyb3dzIl18fFtdO2ZvcihHZT0wO0dlPGR0LnMucjsr''@;'; put 'put ''K0dlKUJlLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKEV0W0dlXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytFdFtHZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7R2U8PWR0LmUucjsrK0dlKXtmb3IoQmUucHVzaCgiICAgICAgICA8dGFibGU6''@;'; put 'put ''dGFibGUtcm93IisoRXRbR2VdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK0V0W0dlXS5vZHMrJyInOiIiKSsiPlxuIiksbnQ9MDtudDxkdC5zLmM7KytudClCZS5wdXNoKEwpO2Zvcig7bnQ8PWR0LmUuYzsrK250KXt2YXIgVHQ9ITEsWnQ9e30scG49IiI7Zm9yKGN0PTA7Y3QhPUN0Lmxlbmd0''@;'; put 'put ''aDsrK2N0KWlmKCEoQ3RbY3RdLnMuYz5udHx8Q3RbY3RdLnMucj5HZXx8Q3RbY3RdLmUuYzxudHx8Q3RbY3RdLmUucjxHZSkpeyhDdFtjdF0ucy5jIT1udHx8Q3RbY3RdLnMuciE9R2UpJiYoVHQ9ITApLFp0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFubmVkIl09Q3RbY3RdLmUuYy1DdFtj''@;'; put 'put ''dF0ucy5jKzEsWnRbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1DdFtjdF0uZS5yLUN0W2N0XS5zLnIrMTticmVha31pZihUdClCZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBLbj1kaSh7cjpHZSxjOm50fSksdW49YnQ/KHZl''@;'; put 'put ''W0dlXXx8W10pW250XTp2ZVtLbl07aWYodW4mJnVuLmYmJihadFsidGFibGU6Zm9ybXVsYSJdPUhyKGNTKHVuLmYpKSx1bi5GJiZ1bi5GLnNsaWNlKDAsS24ubGVuZ3RoKT09S24pKXt2YXIgcW49V3ModW4uRik7WnRbInRhYmxlOm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl09cW4u''@;'; put 'put ''ZS5jLXFuLnMuYysxLFp0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPXFuLmUuci1xbi5zLnIrMX1pZih1bil7c3dpdGNoKHVuLnQpe2Nhc2UiYiI6cG49dW4udj8iVFJVRSI6IkZBTFNFIixadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iYm9vbGVhbiIsWnRbIm9mZmljZTpi''@;'; put 'put ''b29sZWFuLXZhbHVlIl09dW4udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOnBuPXVuLnd8fFN0cmluZyh1bi52fHwwKSxadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLFp0WyJvZmZpY2U6dmFsdWUiXT11bi52fHwwO2JyZWFrO2Nhc2UicyI6Y2FzZSJzdHIiOnBuPXVuLnYs''@;'; put 'put ''WnRbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpwbj11bi53fHxIdCh1bi52KS50b0lTT1N0cmluZygpLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixadFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1IdCh1bi52KS50b0lTT1N0cmluZygpLFp0WyJ0YWJs''@;'; put 'put ''ZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpCZS5wdXNoKEwpO2NvbnRpbnVlfW51bGwhPXVuLm9kcyYmIVp0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihadFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrdW4ub2RzKTt2YXIgem49IXVuLlJ8fHVuLmwmJnVuLmwuVGFyZ2V0P3ko''@;'; put 'put ''cG4pOlAodW4uUik7aWYodW4ubCYmdW4ubC5UYXJnZXQpe3ZhciBrbj11bi5sLlRhcmdldDsiIyIhPShrbj0iIyI9PWtuLmNoYXJBdCgwKT8iIyIrdVMoa24uc2xpY2UoMSkpOmtuKS5jaGFyQXQoMCkmJiFrbi5tYXRjaCgvXlx3KzovKSYmKGtuPSIuLi8iK2tuKSx6bj1TcigidGV4dDphIix6''@;'; put 'put ''bix7InhsaW5rOmhyZWYiOmtuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfUJlLnB1c2goIiAgICAgICAgICAiK1NyKCJ0YWJsZTp0YWJsZS1jZWxsIixTcigidGV4dDpwIix6bix7fSksWnQpKyJcbiIpfWVsc2UgQmUucHVzaChMKX19QmUucHVzaCgiICAgICAgICA8L3RhYmxlOnRhYmxlLXJv''@;'; put 'put ''dz5cbiIpfXJldHVybiBCZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksQmUuam9pbigiIil9LHBlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oU2UsSGUpe3ZhciBCZT1bQm5dLEdlPVBhKHsieG1sbnM6b2ZmaWNlIjoi''@;'; put 'put ''dXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxu''@;'; put 'put ''czpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1sbnM6Zm8iOiJ1cm46b2FzaXM6bmFt''@;'; put 'put ''ZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxuczptZXRhIjoidXJuOm9hc2lzOm5h''@;'; put 'put ''bWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6''@;'; put 'put ''cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNoYXJ0OjEuMCIsInhtbG5zOmRyM2Qi''@;'; put 'put ''OiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpmb3JtOjEuMCIsInht''@;'; put 'put ''bG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC93cml0ZXIiLCJ4bWxu''@;'; put 'put ''czpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6eHNkIjoiaHR0cDovL3d3dy53My5v''@;'; put 'put ''cmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJwdCI6Imh0dHA6Ly9vcGVub2ZmaWNl''@;'; put 'put ''Lm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDMvZy9kYXRh''@;'; put 'put ''LXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVy''@;'; put 'put ''aW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFs''@;'; put 'put ''Om9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXRleHQvIiwi''@;'; put 'put ''b2ZmaWNlOnZlcnNpb24iOiIxLjIifSksbnQ9UGEoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0In0p''@;'; put 'put ''OyJmb2RzIj09SGUuYm9va1R5cGU/KEJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK0dlK250KyI+XG4iKSxCZS5wdXNoKFM0KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOkJlLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQtY29udGVudCIrR2UrIj5c''@;'; put 'put ''biIpLGZ1bmN0aW9uKHZlLFNlKXt2YXIgSGU9W10sQmU9e307SGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLEhlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRlcj0idHJ1ZSI+XG4nKSxIZS5wdXNo''@;'; put 'put ''KCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksSGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksSGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxIZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+''@;'; put 'put ''LzwvbnVtYmVyOnRleHQ+XG4iKSxIZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksSGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIEdlPTA7U2UuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihjdCl7aWYoY3QmJmN0WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxjdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihjdFsiIWNvbHMiXVtidF0pe3ZhciBGdD1jdFsiIWNvbHMiXVtidF07aWYobnVsbD09RnQud2lkdGgmJm51bGw9PUZ0LndweCYmbnVsbD09RnQud2NoKWNvbnRpbnVlO3B1''@;'; put 'put ''KEZ0KSxGdC5vZHM9R2U7dmFyIEV0PWN0WyIhY29scyJdW2J0XS53cHgrInB4IjtIZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrR2UrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLWNvbHVtbi1wcm9wZXJ0''@;'; put 'put ''aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK0V0KyciLz5cbicpLEhlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrR2V9fSk7dmFyIG50PTA7U2UuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihjdCl7aWYoY3QmJmN0WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxjdFsiIXJvd3MiXS5sZW5ndGg7KytidClpZihjdFsiIXJvd3MiXVtidF0pe2N0WyIhcm93cyJdW2J0XS5vZHM9bnQ7dmFyIEZ0PWN0WyIhcm93cyJdW2J0XS5ocHgrInB4IjtIZS5wdXNoKCcgIDxz''@;'; put 'put ''dHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrbnQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksSGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0iJytGdCsnIi8+XG4nKSxIZS5wdXNo''@;'; put 'put ''KCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK250fX0pLEhlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLEhlLnB1c2goJyAgIDxzdHlsZTp0YWJsZS1wcm9wZXJ0aWVzIHRh''@;'; put 'put ''YmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLEhlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLEhlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jZWxsIiBzdHlsZTpwYXJlbnQtc3R5''@;'; put 'put ''bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciBkdD0yO250PTAsU2UuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oY3Qpe3JldHVybiBTZS5TaGVldHNbY3RdfSkuZm9yRWFjaChmdW5jdGlvbihjdCl7aWYoY3QpZm9yKHZhciBidD0wLEZ0PTAs''@;'; put 'put ''RXQ9V3MoY3RbIiFyZWYiXSksVHQ9QXJyYXkuaXNBcnJheShjdCk7YnQ8PUV0LmUucjsrK2J0KWZvcihGdD0wO0Z0PD1FdC5lLmM7KytGdCl7dmFyIFp0PWRpKHtyOmJ0LGM6RnR9KSxwbj1UdD8oY3RbYnRdfHxbXSlbRnRdOmN0W1p0XTtpZihwbiYmKHBuLnN8fHBuLlIpKXt2YXIgS249W107''@;'; put 'put ''cG4ucyYmS24ucHVzaChbcG4sITBdKSxwbi5SJiZwbi5SLmZvckVhY2goZnVuY3Rpb24odW4pe3VuJiZ1bi5zJiZLbi5wdXNoKFt1biwhMV0pfSksS24uZm9yRWFjaChmdW5jdGlvbih1bil7dmFyIHFuPXVuWzBdLHpuPXFuLnMsa249IiIsZXI9eyJzdHlsZTpuYW1lIjoodW5bMV0/ImNlIjoi''@;'; put 'put ''VCIpK2R0LCJzdHlsZTpmYW1pbHkiOnVuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O3VuWzFdJiYoZXJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLGVyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgdHI9e30sWm49ITEsVnI9e30sb2k9ITEsa2k9e30s''@;'; put 'put ''TGk9ITE7aWYoem4uY29sb3ImJihWclsiZm86Y29sb3IiXT0iIyIrT3Uoem4uY29sb3IucmdiKSxvaT0hMCksem4uc3omJihWclsiZm86Zm9udC1zaXplIl09em4uc3orInB0IixvaT0hMCksem4uYm9sZCYmKFZyWyJmbzpmb250LXdlaWdodCJdPSJib2xkIixvaT0hMCksem4uaXRhbGljJiYo''@;'; put 'put ''VnJbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixvaT0hMCksem4ubmFtZSYmKEJlW3puLm5hbWVdfHwoQmVbem4ubmFtZV09em4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK3puLm5hbWUrIiZhcG9zOyI6em4ubmFtZSksVnJbInN0eWxlOmZvbnQtbmFtZSJdPXpuLm5hbWUsb2k9ITApLHpu''@;'; put 'put ''LnN0cmlrZSYmKFZyWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsVnJbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixvaT0hMCksem4udW5kZXJsaW5lJiYoVnJbInN0eWxlOnRleHQtdW5kZXJsaW5lLXN0eWxlIl09InNvbGlkIixWclsi''@;'; put 'put ''c3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsVnJbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLG9pPSEwKSx1blsxXSl7aWYoem4uYWxpZ25tZW50KXt2YXIgUXI9em4uYWxpZ25tZW50O1FyLndyYXBUZXh0JiYodHJbImZvOndyYXAtb3B0aW9u''@;'; put 'put ''Il09IndyYXAiLFpuPSEwKSxRci52ZXJ0aWNhbCYmKHRyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1Rci52ZXJ0aWNhbD8ibWlkZGxlIjpRci52ZXJ0aWNhbCxabj0hMCkscGVbUXIuaG9yaXpvbnRhbF0mJihraVsiZm86dGV4dC1hbGlnbiJdPXBlW1FyLmhvcml6b250YWxd''@;'; put 'put ''LExpPSEwKX16bi5mZ0NvbG9yJiYodHJbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrT3Uoem4uZmdDb2xvci5yZ2IpLFpuPSEwKX1abiYmKGtuKz1Tcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLHRyKSksb2kmJihrbis9U3IoInN0eWxlOnRleHQtcHJvcGVydGllcyIs''@;'; put 'put ''bnVsbCxWcikpLExpJiYoa24rPVNyKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxraSkpLEhlLnB1c2goIiAgIitTcigic3R5bGU6c3R5bGUiLGtuLGVyKSsiXG4iKSxxbi5vZHM9ZHQsKytkdH0pfX19KSxIZS5wdXNoKCIgPC9vZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIp''@;'; put 'put ''O3ZhciBDdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitsdChCZSkubWFwKGZ1bmN0aW9uKGN0KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9IicrY3QrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK0JlW2N0XSsnIi8+XG4nfSkuam9pbigiIikrIiA8L29mZmljZTpm''@;'; put 'put ''b250LWZhY2UtZGVjbHM+XG4iO3ZlLnB1c2goQ3QpLHZlLnB1c2goSGUuam9pbigiIikpfShCZSxTZSksQmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxCZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgZHQ9MDtkdCE9U2UuU2hlZXROYW1lcy5sZW5ndGg7''@;'; put 'put ''KytkdClCZS5wdXNoKHJlKFNlLlNoZWV0c1tTZS5TaGVldE5hbWVzW2R0XV0sU2UsZHQpKTtyZXR1cm4gQmUucHVzaCgiICAgIDwvb2ZmaWNlOnNwcmVhZHNoZWV0PlxuIiksQmUucHVzaCgiICA8L29mZmljZTpib2R5PlxuIiksQmUucHVzaCgiZm9kcyI9PUhlLmJvb2tUeXBlPyI8L29mZmlj''@;'; put 'put ''ZTpkb2N1bWVudD4iOiI8L29mZmljZTpkb2N1bWVudC1jb250ZW50PiIpLEJlLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBfMCh5LFApe2lmKCJmb2RzIj09UC5ib29rVHlwZSlyZXR1cm4gdjAoeSxQKTt2YXIgTD15bigpLFE9IiIscmU9W10scGU9W107cmV0dXJuIFl0KEwsUT0ibWltZXR5cGUi''@;'; put 'put ''LCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IiksWXQoTCxRPSJjb250ZW50LnhtbCIsdjAoeSxQKSkscmUucHVzaChbUSwidGV4dC94bWwiXSkscGUucHVzaChbUSwiQ29udGVudEZpbGUiXSksWXQoTCxRPSJzdHlsZXMueG1sIixLMSh5LFApKSxyZS5w''@;'; put 'put ''dXNoKFtRLCJ0ZXh0L3htbCJdKSxwZS5wdXNoKFtRLCJTdHlsZXNGaWxlIl0pLFl0KEwsUT0ibWV0YS54bWwiLEJuK1M0KCkpLHJlLnB1c2goW1EsInRleHQveG1sIl0pLHBlLnB1c2goW1EsIk1ldGFkYXRhRmlsZSJdKSxZdChMLFE9Im1hbmlmZXN0LnJkZiIsZnVuY3Rpb24gR2goeSl7dmFy''@;'; put 'put ''IFA9W0JuXTtQLnB1c2goJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+XG4nKTtmb3IodmFyIEw9MDtMIT15Lmxlbmd0aDsrK0wpUC5wdXNoKEwxKHlbTF1bMF0seVtMXVsxXSkpLFAucHVzaChWbygiIix5W0xdWzBdKSk7''@;'; put 'put ''cmV0dXJuIFAucHVzaChMMSgiIiwiRG9jdW1lbnQiLCJwa2ciKSksUC5wdXNoKCI8L3JkZjpSREY+IiksUC5qb2luKCIiKX0ocGUpKSxyZS5wdXNoKFtRLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLFl0KEwsUT0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlvbiBMZCh5KXt2YXIgUD1b''@;'; put 'put ''Qm5dO1AucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLFAucHVzaCgnICA8bWFuaWZlc3Q6ZmlsZS1lbnRyeSBtYW5pZmVz''@;'; put 'put ''dDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBMPTA7TDx5Lmxlbmd0aDsrK0wpUC5wdXNoKCcgIDxtYW5pZmVzdDpmaWxl''@;'; put 'put ''LWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJyt5W0xdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicreVtMXVsxXSsnIi8+XG4nKTtyZXR1cm4gUC5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLFAuam9pbigiIil9KHJlKSksTH1mdW5jdGlvbiBYMSh5KXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oTCxRKXt2YXIgcmU9ZnVuY3Rpb24gRE0oeSxQKXtpZighUClyZXR1cm4gMDt2YXIgTD15LlNoZWV0TmFtZXMuaW5kZXhPZihQKTtpZigtMT09TCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5vdCBmb3VuZDogIitQKTtyZXR1cm4gTH0oTCxRLnNoZWV0KTtyZXR1cm4geS5mcm9tX3NoZWV0''@;'; put 'put ''KEwuU2hlZXRzW0wuU2hlZXROYW1lc1tyZV1dLFEsTCl9fXZhciBsUj1YMShGdSksY1I9WDEoe2Zyb21fc2hlZXQ6Qmx9KSx1Uj1YMSh0eXBlb2YgRTk8InUiP0U5Ont9KSxkUj1YMSh0eXBlb2YgTTM8InUiP00zOnt9KSxsXz1YMSh0eXBlb2YgQjE8InUiP0IxOnt9KSx5NT1YMSh0eXBlb2Yg''@;'; put 'put ''T208InUiP09tOnt9KSxoUj1YMSh7ZnJvbV9zaGVldDp4Un0pLElNPVgxKHR5cGVvZiBCMjwidSI/QjI6e30pLGZSPVgxKHR5cGVvZiBPNDwidSI/TzQ6e30pLHNjPUYoNzc5MDMpfHx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0b0Jyb3dzZXJpZnk7aWYoIXNjKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiQ2Fubm90IGZpbmQgY3J5cHRvIGV4dGVuc2lvbnMhIik7dmFyIGNfPXtTSEE1MTI6InNoYTUxMiIsU0hBMjU2OiJzaGEyNTYiLFNIQTM4NDoic2hhMzg0IixTSEExOiJzaGExIixNRDU6Im1kNSIsTUQ0OiJtZDQiLE1EMjoibWQyIn07ZnVuY3Rpb24gZWwoeSxQKXtzd2l0Y2goUD0o''@;'; put 'put ''UHx8IiIpLnJlcGxhY2UoLy0vZywiIikpe2Nhc2UiU0hBLTUxMiI6Y2FzZSJTSEE1MTIiOnJldHVybiBuZXcgc2MuY3JlYXRlSGFzaCgic2hhNTEyIikudXBkYXRlKHkpLmRpZ2VzdCgpO2Nhc2UiU0hBLTEiOmNhc2UiU0hBMSI6cmV0dXJuIG5ldyBzYy5jcmVhdGVIYXNoKCJzaGExIikudXBk''@;'; put 'put ''YXRlKHkpLmRpZ2VzdCgpO2Nhc2UiTUQyIjpyZXR1cm4gbmV3IHNjLmNyZWF0ZUhhc2goIm1kMiIpLnVwZGF0ZSh5KS5kaWdlc3QoKTtkZWZhdWx0OmlmKGNfW1BdKXJldHVybiBuZXcgc2MuY3JlYXRlSGFzaChjX1tQXSkudXBkYXRlKHkpLmRpZ2VzdCgpO3Rocm93IG5ldyBFcnJvcigiVW5z''@;'; put 'put ''dXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitQKX19ZnVuY3Rpb24gSjEoeSxQLEwpe2lmKCJyYzIiPT1MKXRocm93IlVuc3VwcG9ydGVkIFJDMiI7dmFyIFE9c2MuY3JlYXRlRGVjaXBoZXJpdihMfHwiYWVzLTI1Ni1jYmMiLHksUCk7cmV0dXJuIFEuc2V0QXV0b1BhZGRpbmcoITEpLFF9ZnVu''@;'; put 'put ''Y3Rpb24gUjYoeSl7cmV0dXJuWygiMDAiKygyNTUmeSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj44JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKHk+Pj4xNiYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyh5Pj4+MjQmMjU1KS50b1N0''@;'; put 'put ''cmluZygxNikpLnNsaWNlKC0yKV0uam9pbigiIil9dmFyIE82PWZ1bmN0aW9uKHksUCxMKXtmb3IodmFyIFE9InN0cmluZyI9PXR5cGVvZiBQP0J1ZmZlci5mcm9tKFAsImhleCIpOlAscmU9InN0cmluZyI9PXR5cGVvZiB5P0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAs''@;'; put 'put ''eSkpOnkscGU9InN0cmluZyI9PXR5cGVvZiBMP0J1ZmZlci5mcm9tKEwsImhleCIpOkwsX2U9ZWwocmUsIk1ENSIpLHZlPUJ1ZmZlci5jb25jYXQoW19lLnNsaWNlKDAsNSksUV0pLFNlPTA7U2U8NDsrK1NlKXZlPUJ1ZmZlci5jb25jYXQoW3ZlLHZlXSk7dmFyIEhlPWVsKHZlLCJNRDUiKTty''@;'; put 'put ''ZXR1cm4oZWwoQnVmZmVyLmNvbmNhdChbSGUuc2xpY2UoMCw1KSxwZV0pLCJNRDUiKS50b1N0cmluZygiaGV4IikrIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIikuc2xpY2UoMCwzMil9LGdyPWZ1bmN0aW9uKHksUCxMKXt2YXIgUT0ic3RyaW5nIj09dHlwZW9mIFA/QnVmZmVy''@;'; put 'put ''LmZyb20oUCwiaGV4Iik6UCxyZT0ic3RyaW5nIj09dHlwZW9mIHk/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSk6eSxwZT0ic3RyaW5nIj09dHlwZW9mIEw/QnVmZmVyLmZyb20oTCwiaGV4Iik6TCxfZT1lbChCdWZmZXIuY29uY2F0KFtRLHJlXSksIlNIQTEiKTty''@;'; put 'put ''ZXR1cm4gZWwoQnVmZmVyLmNvbmNhdChbX2UscGVdKSwiU0hBMSIpfSxiMD1mdW5jdGlvbigpe2Z1bmN0aW9uIFAoKXt9UC5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24oY3Qpe3RoaXMuX2k9MDt2YXIgYnQ9dGhpcy5fYnVpbGQoY3QsIiIpO3JldHVybiIiPT09YnQ/IiI6Jzw/eG1sIHZlcnNp''@;'; put 'put ''b249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxQLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24oY3QsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWJ0WzBdKSxudWxsPT1jdHx8Im9iamVjdCIhPXR5cGVvZiBjdCYmImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIGN0KW51bGwhPWN0JiYoYnQrPWZ1bmN0aW9uIHkoY3QsYnQpe3JldHVybiBudWxsPT1jdHx8KGN0PWN0LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGJ0JiYoY3Q9Y3QucmVwbGFjZSgvIi9n''@;'; put 'put ''LCImcXVvdDsiKSkpLGN0fShjdCkpO2Vsc2V7aWYoIWN0Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkoY3QpKTtidCs9IjwiK2N0Lm5hbWU7dmFyIEZ0PXRoaXM7YnQrPWN0LmF0dHJpYnV0ZXMmJlBhKGN0LmF0dHJp''@;'; put 'put ''YnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KGN0LmNoaWxkcmVuKSYmMCE9Y3QuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLGN0LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oRXQpe2J0PUZ0Ll9idWlsZChFdCxidCl9KSxidCs9IjwvIitjdC5uYW1lKyI+Iik6YnQrPSIvPiJ9cmV0dXJuIGJ0''@;'; put 'put ''fTt2YXIgTD1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLHBlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3LDIsMTc4LDQ0LDEzMiw1MV0pfSxr''@;'; put 'put ''ZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKX19O2Z1''@;'; put 'put ''bmN0aW9uIF9lKGN0LGJ0LEZ0LEV0LFR0LFp0KXt2YXIgcG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCpFdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1GdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK0Z0KTt2YXIgS249c2NbY3Q/ImNyZWF0ZUNp''@;'; put 'put ''cGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKHBuKz0iLWNiYyIsRXQsVHQpO0tuLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgdW49S24udXBkYXRlKFp0KSxxbj1bdW5dO3RyeXt2YXIgem49S24uZmluYWwoKTtxbi5wdXNoKHpuKX1jYXRjaHt9cmV0dXJuIEJ1ZmZlci5jb25jYXQocW4pfWZ1''@;'; put 'put ''bmN0aW9uIHZlKGN0KXtjdD1jdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZihzYy5nZXRIYXNoZXMoKS5pbmRleE9mKGN0KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitjdCk7dmFyIEV0PXNjLmNyZWF0''@;'; put 'put ''ZUhhc2goY3QpO3JldHVybiBFdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLEV0LmRpZ2VzdCgpfWZ1bmN0aW9uIFNlKGN0LGJ0LEZ0LEV0KXsibnVtYmVyIj09dHlwZW9mIEV0JiYoRXQ9SGUoRXQpKTt2YXIgVHQ9dmUoY3QsYnQsRXQpO2lmKFR0Lmxlbmd0aDxGdCl7dmFyIFp0PUJ1ZmZl''@;'; put 'put ''ci5hbGxvYyhGdCw1NCk7VHQuY29weShadCksVHQ9WnR9ZWxzZSBUdC5sZW5ndGg+RnQmJihUdD1UdC5zbGljZSgwLEZ0KSk7cmV0dXJuIFR0fWZ1bmN0aW9uIEhlKGN0LGJ0KXt2YXIgRnQ9QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4gRnQud3JpdGVVSW50MzJMRShjdCwwKSxGdH1mdW5j''@;'; put 'put ''dGlvbiBCZShjdCxidCxGdCxFdCxUdCxadCl7Zm9yKHZhciBLbj12ZShidCxGdCxCdWZmZXIuZnJvbShjdCwidXRmMTZsZSIpKSx1bj0wO3VuPEV0O3VuKyspS249dmUoYnQsSGUodW4pLEtuKTt2YXIgem49VHQvODtpZigoS249dmUoYnQsS24sWnQpKS5sZW5ndGg8em4pe3ZhciBrbj1CdWZm''@;'; put 'put ''ZXIuYWxsb2Moem4sNTQpO0tuLmNvcHkoa24pLEtuPWtufWVsc2UgS24ubGVuZ3RoPnpuJiYoS249S24uc2xpY2UoMCx6bikpO3JldHVybiBLbn1yZXR1cm4gc2MucmFuZG9tQnl0ZXN8fChzYy5yYW5kb21CeXRlcz1mdW5jdGlvbihjdCl7Zm9yKHZhciBidD1CdWZmZXIuYWxsb2MoY3QpLEZ0''@;'; put 'put ''PTA7RnQ8Y3Q7KytGdClidFtGdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24gQ3QoY3QsYnQpe2lmKCJzdHJpbmciPT10eXBlb2YgY3QpcmV0dXJuIEN0KEJ1ZmZlci5mcm9tKGN0LCJiaW5hcnkiKSxidCk7dmFyIEZ0PXNjLnJhbmRvbUJ5dGVz''@;'; put 'put ''KDMyKSxFdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTpzYy5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsa2V5Qml0czo4KkZ0Lmxl''@;'; put 'put ''bmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnNjLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixzcGluQ291bnQ6MSxrZXlCaXRzOjI1''@;'; put 'put ''Nn19LFR0PWZ1bmN0aW9uIEdlKGN0LGJ0LEZ0LEV0LFR0LFp0LHBuLEtuKXtmb3IodmFyIHVuPVtdLHFuPWN0PzA6OCx6bj0wLGtuPTAsZXI9MDtlcjxLbi5sZW5ndGg7KXsoZXI9KGtuPWVyKSs0MDk2KT5Lbi5sZW5ndGgmJihlcj1Lbi5sZW5ndGgpO3ZhciB0cj1Lbi5zbGljZShrbitxbixl''@;'; put 'put ''citxbiksWm49dHIubGVuZ3RoJVR0O1puJiYodHI9QnVmZmVyLmNvbmNhdChbdHIsQnVmZmVyLmFsbG9jKFR0LVpuKV0pKTt2YXIgb2k9X2UoY3QsYnQsRnQscG4sU2UoRXQsWnQsVHQsem4pLHRyKTt1bi5wdXNoKG9pKSx6bisrfXZhciBraT1CdWZmZXIuY29uY2F0KHVuKTtpZihjdClraT1C''@;'; put 'put ''dWZmZXIuY29uY2F0KFtIZShLbi5sZW5ndGgsOCksa2ldKTtlbHNle3ZhciBMaT1Lbi5yZWFkVUludDMyTEUoMCk7a2k9a2kuc2xpY2UoMCxMaSl9cmV0dXJuIGtpfSghMCxFdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxFdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEV0LnBhY2thZ2UuaGFz''@;'; put 'put ''aEFsZ29yaXRobSxFdC5wYWNrYWdlLmJsb2NrU2l6ZSxFdC5wYWNrYWdlLnNhbHRWYWx1ZSxGdCxjdCksWnQ9c2MucmFuZG9tQnl0ZXMoNjQpLHBuPVNlKEV0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxFdC5wYWNrYWdlLnNhbHRWYWx1ZSxFdC5wYWNrYWdlLmJsb2NrU2l6ZSxwZS5kYXRhSW50''@;'; put 'put ''ZWdyaXR5LmhtYWNLZXkpLEtuPV9lKCEwLEV0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLEV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRnQscG4sWnQpLHVuPWZ1bmN0aW9uIG50KGN0LGJ0KXtjdD1jdC50b0xvd2VyQ2FzZSgpO3ZhciBGdD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKTtp''@;'; put 'put ''ZihzYy5nZXRIYXNoZXMoKS5pbmRleE9mKGN0KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrY3QrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgVHQ9c2MuY3JlYXRlSG1hYyhjdCxidCk7cmV0dXJuIFR0LnVwZGF0ZShCdWZmZXIuY29uY2F0KEZ0KSksVHQuZGlnZXN0KCl9''@;'; put 'put ''KEV0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxadCxUdCkscW49U2UoRXQucGFja2FnZS5oYXNoQWxnb3JpdGhtLEV0LnBhY2thZ2Uuc2FsdFZhbHVlLEV0LnBhY2thZ2UuYmxvY2tTaXplLHBlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSx6bj1fZSghMCxFdC5wYWNrYWdlLmNpcGhlckFsZ29y''@;'; put 'put ''aXRobSxFdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEZ0LHFuLHVuKTtFdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OktuLGVuY3J5cHRlZEhtYWNWYWx1ZTp6bn07dmFyIGtuPUJlKGJ0LEV0LmtleS5oYXNoQWxnb3JpdGhtLEV0LmtleS5zYWx0VmFsdWUsRXQua2V5LnNwaW5D''@;'; put 'put ''b3VudCxFdC5rZXkua2V5Qml0cyxwZS5rZXkpO0V0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1fZSghMCxFdC5rZXkuY2lwaGVyQWxnb3JpdGhtLEV0LmtleS5jaXBoZXJDaGFpbmluZyxrbixFdC5rZXkuc2FsdFZhbHVlLEZ0KTt2YXIgZXI9c2MucmFuZG9tQnl0ZXMoMTYpLHRyPUJlKGJ0LEV0''@;'; put 'put ''LmtleS5oYXNoQWxnb3JpdGhtLEV0LmtleS5zYWx0VmFsdWUsRXQua2V5LnNwaW5Db3VudCxFdC5rZXkua2V5Qml0cyxwZS52ZXJpZmllckhhc2guaW5wdXQpO0V0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1fZSghMCxFdC5rZXkuY2lwaGVyQWxnb3JpdGhtLEV0LmtleS5jaXBo''@;'; put 'put ''ZXJDaGFpbmluZyx0cixFdC5rZXkuc2FsdFZhbHVlLGVyKTt2YXIgWm49dmUoRXQua2V5Lmhhc2hBbGdvcml0aG0sZXIpLFZyPUJlKGJ0LEV0LmtleS5oYXNoQWxnb3JpdGhtLEV0LmtleS5zYWx0VmFsdWUsRXQua2V5LnNwaW5Db3VudCxFdC5rZXkua2V5Qml0cyxwZS52ZXJpZmllckhhc2gu''@;'; put 'put ''dmFsdWUpO0V0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1fZSghMCxFdC5rZXkuY2lwaGVyQWxnb3JpdGhtLEV0LmtleS5jaXBoZXJDaGFpbmluZyxWcixFdC5rZXkuc2FsdFZhbHVlLFpuKTt2YXIgb2k9ZnVuY3Rpb24gZHQoY3Qpe3ZhciBidD17bmFtZToiZW5jcnlwdGlvbiIs''@;'; put 'put ''YXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5zOmMiOiJodHRwOi8v''@;'; put 'put ''c2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6Y3QucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpjdC5wYWNrYWdlLmJsb2NrU2l6''@;'; put 'put ''ZSxrZXlCaXRzOmN0LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTpjdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpjdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpjdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06Y3QucGFja2Fn''@;'; put 'put ''ZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpjdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpjdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXkudG9TdHJpbmcoImJh''@;'; put 'put ''c2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpjdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToiaHR0cDovL3NjaGVt''@;'; put 'put ''YXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6Y3Qua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpjdC5rZXkuc2FsdFZhbHVlLmxlbmd0aCxibG9ja1Np''@;'; put 'put ''emU6Y3Qua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOmN0LmtleS5rZXlCaXRzLGhhc2hTaXplOmN0LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06Y3Qua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpjdC5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTpjdC5rZXku''@;'; put 'put ''aGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6Y3Qua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6Y3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1''@;'; put 'put ''ZTpjdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOmN0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxFdD0obmV3IFApLmJ1aWxkKGJ0KTtyZXR1cm4gQnVmZmVyLmNvbmNh''@;'; put 'put ''dChbTCxCdWZmZXIuZnJvbShFdCwidXRmOCIpXSl9KEV0KSxraT1qZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIGplLnV0aWxzLmNmYl9hZGQoa2ksIkVuY3J5cHRpb25JbmZvIixvaSksamUudXRpbHMuY2ZiX2FkZChraSwiRW5jcnlwdGVkUGFja2FnZSIsVHQpLGtpfX0oKTtmdW5jdGlvbiB3''@;'; put 'put ''NSh5KXtyZXR1cm4gZnVuY3Rpb24oTCl7Zm9yKHZhciBRPTA7USE9eS5sZW5ndGg7KytRKXt2YXIgcmU9eVtRXTt2b2lkIDA9PT1MW3JlWzBdXSYmKExbcmVbMF1dPXJlWzFdKSwibiI9PT1yZVsyXSYmKExbcmVbMF1dPU51bWJlcihMW3JlWzBdXSkpfX19dmFyIFA2PWZ1bmN0aW9uKHkpe3c1''@;'; put 'put ''KFtbImNlbGxORiIsITFdLFsiY2VsbEhUTUwiLCEwXSxbImNlbGxGb3JtdWxhIiwhMF0sWyJjZWxsU3R5bGVzIiwhMV0sWyJjZWxsVGV4dCIsITBdLFsiY2VsbERhdGVzIiwhMV0sWyJzaGVldFN0dWJzIiwhMV0sWyJzaGVldFJvd3MiLDAsIm4iXSxbImJvb2tEZXBzIiwhMV0sWyJib29rU2hl''@;'; put 'put ''ZXRzIiwhMV0sWyJib29rUHJvcHMiLCExXSxbImJvb2tGaWxlcyIsITFdLFsiYm9va1ZCQSIsITFdLFsicGFzc3dvcmQiLCIiXSxbIldURiIsITFdXSkoeSkseS5ib29rSW1hZ2VzJiYoeS5jZWxsU3R5bGVzPSEwKX0saF89dzUoW1siY2VsbERhdGVzIiwhMV0sWyJib29rU1NUIiwhMV0sWyJi''@;'; put 'put ''b29rVHlwZSIsInhsc3giXSxbImNvbXByZXNzaW9uIiwhMV0sWyJXVEYiLCExXV0pO2Z1bmN0aW9uIFJNKHkpe3JldHVybiBIaS5XUy5pbmRleE9mKHkpPi0xPyJzaGVldCI6SGkuQ1MmJnk9PUhpLkNTPyJjaGFydCI6SGkuRFMmJnk9PUhpLkRTPyJkaWFsb2ciOkhpLk1TJiZ5PT1IaS5NUz8i''@;'; put 'put ''bWFjcm8iOnkmJnkubGVuZ3RoP3k6InNoZWV0In12YXIgRjY9W107ZnVuY3Rpb24gZ1IoeSxQLEwsUSxyZSxwZSxfZSx2ZSxTZSxIZSxCZSxHZSl7dHJ5e3BlW1FdPURvKEp0KHksTCwhMCksUCk7dmFyIGR0LG50PUl0KHksUCk7c3dpdGNoKHZlKXtjYXNlInNoZWV0IjpkdD1mdW5jdGlvbiBO''@;'; put 'put ''TCh5LFAsTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBDTCh5LFAsTCxRLHJlLHBlLF9lKXtpZigheSlyZXR1cm4geTt2YXIgdmU9UHx8e307UXx8KFE9eyIhaWQiOnt9fSksbnVsbCE9dGUmJm51bGw9PXZlLmRlbnNlJiYodmUuZGVuc2U9dGUp''@;'; put 'put ''O3ZhciBIZSxDdCxjdCxidCxGdCxFdCxUdCxadCxwbixLbixTZT12ZS5kZW5zZT9bXTp7fSxCZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxHZT1bXSxudD0hMSxkdD0hMSx1bj1bXTt2ZS5iaWZmPTEyLHZlWyIhcm93Il09MDt2YXIgcW49MCx6bj0hMSxrbj1bXSxlcj17fSx0cj12''@;'; put 'put ''ZS5zdXBib29rc3x8cmUuc3VwYm9va3N8fFtbXV07aWYodHIuc2hhcmVkZj1lcix0ci5hcnJheWY9a24sdHIuU2hlZXROYW1lcz1yZS5TaGVldE5hbWVzfHxyZS5TaGVldHMubWFwKGZ1bmN0aW9uKFFyKXtyZXR1cm4gUXIubmFtZX0pLCF2ZS5zdXBib29rcyYmKHZlLnN1cGJvb2tzPXRyLHJl''@;'; put 'put ''Lk5hbWVzKSlmb3IodmFyIFpuPTA7Wm48cmUuTmFtZXMubGVuZ3RoOysrWm4pdHJbMF1bWm4rMV09cmUuTmFtZXNbWm5dO3ZhciBWcj1bXSxvaT1bXSxraT0hMTtpZihtZlsxNl09e246IkJydFNob3J0UmVhbCIsZjpqU30sSG8oeSxmdW5jdGlvbih1cixBbix2cil7aWYoIWR0KXN3aXRjaCh2''@;'; put 'put ''cil7Y2FzZSAxNDg6SGU9dXI7YnJlYWs7Y2FzZSAwOkN0PXVyLHZlLnNoZWV0Um93cyYmdmUuc2hlZXRSb3dzPD1DdC5yJiYoZHQ9ITApLHBuPUhzKEZ0PUN0LnIpLHZlWyIhcm93Il09Q3QuciwodXIuaGlkZGVufHx1ci5ocHR8fG51bGwhPXVyLmxldmVsKSYmKHVyLmhwdCYmKHVyLmhweD1V''@;'; put 'put ''MSh1ci5ocHQpKSxvaVt1ci5yXT11cik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dpdGNoKGN0PXt0OnVy''@;'; put 'put ''WzJdfSx1clsyXSl7Y2FzZSJuIjpjdC52PXVyWzFdO2JyZWFrO2Nhc2UicyI6Y3Qudj0oWnQ9ZjZbdXJbMV1dKS50LHZlLmNlbGxTdHlsZXMmJihjdC5SPWZ1bmN0aW9uIHVEKHksUCl7aWYoeS5SKXJldHVybiB5LlI7aWYoUCYmUC5Gb250cyYmKDEhPXkuci5sZW5ndGh8fDAhPXkuclswXS5p''@;'; put 'put ''Y2gpKXt5LlI9W107dmFyIEw9MCxRPXkucltMXSxyZT15LnJbTCsxXTtmb3IoUS5pY2g+MCYmeS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKDAsUS5pY2gpfSk7TDx5LnIubGVuZ3RoLTE7KytMKXkuUi5wdXNoKHt0OiJzIix2OnkudC5zbGljZSgoUT15LnJbTF0pLmljaCwocmU9eS5yW0wr''@;'; put 'put ''MV0pLmljaCksczpQLkZvbnRzW1EuaWZudF19KTtyZXR1cm4geS5SLnB1c2goe3Q6InMiLHY6eS50LnNsaWNlKChyZXx8USkuaWNoKSxzOlAuRm9udHNbKHJlfHxRKS5pZm50XX0pLHkuUn19KFp0LF9lKSk7YnJlYWs7Y2FzZSJiIjpjdC52PSEhdXJbMV07YnJlYWs7Y2FzZSJlIjpjdC52PXVy''@;'; put 'put ''WzFdLCExIT09dmUuY2VsbFRleHQmJihjdC53PVFvW2N0LnZdKTticmVhaztjYXNlInN0ciI6Y3QudD0icyIsY3Qudj11clsxXX1pZigoYnQ9X2UuQ2VsbFhmW3VyWzBdLmlTdHlsZVJlZl0pJiZwNihjdCxidC5udW1GbXRJZCxidC5maWxsSWQsYnQuZm9udElkLGJ0LmJvcmRlcklkLHZlLDAs''@;'; put 'put ''X2UpLHZlLmNlbGxTdHlsZXMmJmN0LnMmJmJ0LmFsaWdubWVudCYmKGN0LnMuYWxpZ25tZW50PW9uKGJ0LmFsaWdubWVudCkpLEV0PS0xPT11clswXS5jP0V0KzE6dXJbMF0uYyx2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1bRXRdPWN0KTpTZVtOcyhFdCkrcG5dPWN0LHZl''@;'; put 'put ''LmNlbGxGb3JtdWxhKXtmb3Ioem49ITEscW49MDtxbjxrbi5sZW5ndGg7Kytxbil7dmFyIHJyPWtuW3FuXTtDdC5yPj1yclswXS5zLnImJkN0LnI8PXJyWzBdLmUuciYmRXQ+PXJyWzBdLnMuYyYmRXQ8PXJyWzBdLmUuYyYmKGN0LkY9T28ocnJbMF0pLHpuPSEwKX0hem4mJnVyLmxlbmd0aD4z''@;'; put 'put ''JiYoY3QuZj11clszXSl9aWYoQmUucy5yPkN0LnImJihCZS5zLnI9Q3QuciksQmUucy5jPkV0JiYoQmUucy5jPUV0KSxCZS5lLnI8Q3QuciYmKEJlLmUucj1DdC5yKSxCZS5lLmM8RXQmJihCZS5lLmM9RXQpLHZlLmNlbGxEYXRlcyYmYnQmJiJuIj09Y3QudCYmdy5pc19kYXRlKHcuX3RhYmxl''@;'; put 'put ''W2J0Lm51bUZtdElkXSkpe3ZhciBTbj13LnBhcnNlX2RhdGVfY29kZShjdC52KTtTbiYmKGN0LnQ9ImQiLGN0LnY9bmV3IERhdGUoU24ueSxTbi5tLTEsU24uZCxTbi5ILFNuLk0sU24uUyxTbi51KSl9YnJlYWs7Y2FzZSAxOmNhc2UgMTI6aWYoIXZlLnNoZWV0U3R1YnN8fG50KWJyZWFrO2N0''@;'; put 'put ''PXt0OiJ6Iix2OnZvaWQgMH0sRXQ9LTE9PXVyWzBdLmM/RXQrMTp1clswXS5jLChidD1fZS5DZWxsWGZbdXJbMF0uaVN0eWxlUmVmXSkmJnA2KGN0LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQsdmUsMCxfZSksdmUuY2VsbFN0eWxlcyYmY3QucyYmYnQuYWxp''@;'; put 'put ''Z25tZW50JiYoY3Qucy5hbGlnbm1lbnQ9b24oYnQuYWxpZ25tZW50KSksdmUuZGVuc2U/KFNlW0Z0XXx8KFNlW0Z0XT1bXSksU2VbRnRdW0V0XT1jdCk6U2VbTnMoRXQpK3BuXT1jdCxCZS5zLnI+Q3QuciYmKEJlLnMucj1DdC5yKSxCZS5zLmM+RXQmJihCZS5zLmM9RXQpLEJlLmUucjxDdC5y''@;'; put 'put ''JiYoQmUuZS5yPUN0LnIpLEJlLmUuYzxFdCYmKEJlLmUuYz1FdCk7YnJlYWs7Y2FzZSAxNzY6dW4ucHVzaCh1cik7YnJlYWs7Y2FzZSA0OTQ6dmFyIHByPVFbIiFpZCJdW3VyLnJlbElkXTtmb3IocHI/KHVyLlRhcmdldD1wci5UYXJnZXQsdXIubG9jJiYodXIuVGFyZ2V0Kz0iIyIrdXIubG9j''@;'; put 'put ''KSx1ci5SZWw9cHIpOiIiPT11ci5yZWxJZCYmKHVyLlRhcmdldD0iIyIrdXIubG9jKSxGdD11ci5yZngucy5yO0Z0PD11ci5yZnguZS5yOysrRnQpZm9yKEV0PXVyLnJmeC5zLmM7RXQ8PXVyLnJmeC5lLmM7KytFdCl2ZS5kZW5zZT8oU2VbRnRdfHwoU2VbRnRdPVtdKSxTZVtGdF1bRXRdfHwo''@;'; put 'put ''U2VbRnRdW0V0XT17dDoieiIsdjp2b2lkIDB9KSxTZVtGdF1bRXRdLmw9dXIpOihUdD1kaSh7YzpFdCxyOkZ0fSksU2VbVHRdfHwoU2VbVHRdPXt0OiJ6Iix2OnZvaWQgMH0pLFNlW1R0XS5sPXVyKTticmVhaztjYXNlIDQyNjppZighdmUuY2VsbEZvcm11bGEpYnJlYWs7a24ucHVzaCh1ciks''@;'; put 'put ''KEtuPXZlLmRlbnNlP1NlW0Z0XVtFdF06U2VbTnMoRXQpK3BuXSkuZj14bCh1clsxXSxCZSx7cjpDdC5yLGM6RXR9LHRyLHZlKSxLbi5GPU9vKHVyWzBdKTticmVhaztjYXNlIDQyNzppZighdmUuY2VsbEZvcm11bGEpYnJlYWs7ZXJbZGkodXJbMF0ucyldPXVyWzFdLChLbj12ZS5kZW5zZT9T''@;'; put 'put ''ZVtGdF1bRXRdOlNlW05zKEV0KStwbl0pLmY9eGwodXJbMV0sQmUse3I6Q3QucixjOkV0fSx0cix2ZSk7YnJlYWs7Y2FzZSA2MDppZighdmUuY2VsbFN0eWxlcylicmVhaztmb3IoO3VyLmU+PXVyLnM7KVZyW3VyLmUtLV09e3dpZHRoOnVyLncvMjU2LGhpZGRlbjohISgxJnVyLmZsYWdzKSxs''@;'; put 'put ''ZXZlbDp1ci5sZXZlbH0sa2l8fChraT0hMCkscHUoVnJbdXIuZSsxXSk7YnJlYWs7Y2FzZSAxNjE6U2VbIiFhdXRvZmlsdGVyIl09e3JlZjpPbyh1cil9O2JyZWFrO2Nhc2UgNDc2OlNlWyIhbWFyZ2lucyJdPXVyO2JyZWFrO2Nhc2UgMTQ3OnJlLlNoZWV0c1tMXXx8KHJlLlNoZWV0c1tMXT17''@;'; put 'put ''fSksdXIubmFtZSYmKHJlLlNoZWV0c1tMXS5Db2RlTmFtZT11ci5uYW1lKSwodXIuYWJvdmV8fHVyLmxlZnQpJiYoU2VbIiFvdXRsaW5lIl09e2Fib3ZlOnVyLmFib3ZlLGxlZnQ6dXIubGVmdH0pO2JyZWFrO2Nhc2UgMTM3OnJlLlZpZXdzfHwocmUuVmlld3M9W3t9XSkscmUuVmlld3NbMF18''@;'; put 'put ''fChyZS5WaWV3c1swXT17fSksdXIuUlRMJiYocmUuVmlld3NbMF0uUlRMPSEwKSx1ci5ncmlkfHwocmUuVmlld3NbMF0uZ3JpZD0hMSxTZVsiIWdyaWRsaW5lcyJdPSExKTticmVhaztjYXNlIDQ4NTpTZVsiIXNoZWV0Rm9ybWF0Il09dXI7YnJlYWs7Y2FzZSA2NDpjYXNlIDEwNTM6IWZ1bmN0''@;'; put 'put ''aW9uIHlMKHksUCxMLFEpe2lmKFApe3ZhciByZT17cmVmOlAuc3FyZngsdDpQLnR9O1Aub3AmJihyZS5vcD1QLm9wKTt2YXIgcGU9IiIsX2U9IiIsdmU9UC5zcXJmeD8ic3RyaW5nIj09dHlwZW9mIFAuc3FyZng/T2koUC5zcXJmeC5zcGxpdCgiLCIpWzBdKTpQLnNxcmZ4Om51bGw7aWYoUC5m''@;'; put 'put ''MSYmKHBlPXhsKFAuZjEsdmUsbnVsbCxMLFEsITApKSxQLmYyJiYoX2U9eGwoUC5mMix2ZSxudWxsLEwsUSwhMCkpLFAub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoUC5vcCk+PS0xKXJlLm1pbj1wZSxyZS5tYXg9X2U7ZWxzZSBpZihQLm9wKXJlLnY9cGU7ZWxzZSB0cnl7c3dpdGNoKFAudCl7''@;'; put 'put ''Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09PVAuZjFbMF1bMF1bMF0mJjE9PVAuZjFbMF0ubGVuZ3RoKXtyZS5sPVAuZjFbMF1bMF1bMV0uc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6cmUuZj1wZX19Y2F0Y2h7fXlbIiF2YWxpZGF0aW9ucyJdfHwoeVsiIXZhbGlkYXRpb25zIl09W10p''@;'; put 'put ''LHlbIiF2YWxpZGF0aW9ucyJdLnB1c2gocmUpfX0oU2UsdXIsdHIsdmUpO2JyZWFrO2Nhc2UgMTUxOlNlWyIhZnJlZXplIl09dXJbMF07YnJlYWs7Y2FzZSAxNTI6U2VbIiFzZWwiXT11cjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDEx''@;'; put 'put ''MTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2UgMTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2Ug''@;'; put 'put ''MTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2Fz''@;'; put 'put ''ZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpudD0hMDticmVhaztjYXNlIDM2Om50PSExO2JyZWFrO2Nhc2UgMzc6R2UucHVzaChBbiksbnQ9ITA7YnJlYWs7Y2FzZSAz''@;'; put 'put ''ODpHZS5wb3AoKSxudD0hMTticmVhaztkZWZhdWx0OmlmKCEoKEFufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoQW58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFudHx8dmUuV1RGJiYiQnJ0QUNCZWdpbiIhPUdlW0dlLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVj''@;'; put 'put ''dGVkIHJlY29yZCAiK3ZyKyIgIitBbil9fSx2ZSksZGVsZXRlIHZlLnN1cGJvb2tzLGRlbGV0ZSB2ZVsiIXJvdyJdLCFTZVsiIXJlZiJdJiYoQmUucy5yPDJlNnx8SGUmJihIZS5lLnI+MHx8SGUuZS5jPjB8fEhlLnMucj4wfHxIZS5zLmM+MCkpJiYoU2VbIiFyZWYiXT1PbyhIZXx8QmUpKSx2''@;'; put 'put ''ZS5zaGVldFJvd3MmJlNlWyIhcmVmIl0pe3ZhciBMaT1PaShTZVsiIXJlZiJdKTt2ZS5zaGVldFJvd3M8PStMaS5lLnImJihMaS5lLnI9dmUuc2hlZXRSb3dzLTEsTGkuZS5yPkJlLmUuciYmKExpLmUucj1CZS5lLnIpLExpLmUucjxMaS5zLnImJihMaS5zLnI9TGkuZS5yKSxMaS5lLmM+QmUu''@;'; put 'put ''ZS5jJiYoTGkuZS5jPUJlLmUuYyksTGkuZS5jPExpLnMuYyYmKExpLnMuYz1MaS5lLmMpLFNlWyIhZnVsbHJlZiJdPVNlWyIhcmVmIl0sU2VbIiFyZWYiXT1PbyhMaSkpfXJldHVybiB1bi5sZW5ndGg+MCYmKFNlWyIhbWVyZ2VzIl09dW4pLFZyLmxlbmd0aD4wJiYoU2VbIiFjb2xzIl09VnIp''@;'; put 'put ''LG9pLmxlbmd0aD4wJiYoU2VbIiFyb3dzIl09b2kpLFNlfSh5LFEsTCxyZSxwZSwwLHZlKTpmdW5jdGlvbiBLWih5LFAsTCxRLHJlLHBlLF9lKXtpZigheSlyZXR1cm4geTtRfHwoUT17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09UC5kZW5zZSYmKFAuZGVuc2U9dGUpO3ZhciB2ZT1QLmRl''@;'; put 'put ''bnNlP1tdOnt9LFNlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEhlPSIiLEJlPSIiLEdlPXkubWF0Y2goYTUpO0dlPyhIZT15LnNsaWNlKDAsR2UuaW5kZXgpLEJlPXkuc2xpY2UoR2UuaW5kZXgrR2VbMF0ubGVuZ3RoKSk6SGU9QmU9eTt2YXIgbnQ9QmUubGFzdEluZGV4T2YoImV4''@;'; put 'put ''dExzdCIpLEN0PSgtMT09bnR8fEJlLnNsaWNlKG50KSxIZS5tYXRjaCh4dikpO0N0P3Y2KEN0WzBdLDAscmUsTCk6KEN0PUhlLm1hdGNoKERJKSkmJmZ1bmN0aW9uIF9TKHksUCxMLFEscmUscGUsX2Upe3Y2KHkuc2xpY2UoMCx5LmluZGV4T2YoIj4iKSksMCxRLHJlKTt2YXIgdmU9UC5tYXRj''@;'; put 'put ''aChfNik7aWYodmUpe3ZhciBIZT1VMihsbih2ZVswXSkscGUsX2UpO0xbIiF0YWJjb2xvciJdPUhlfWlmKCh2ZT1QLm1hdGNoKG1TKSkmJmxuKHZlWzBdKS5maXRUb1BhZ2UmJihMWyIhcHJpbnQiXXx8KExbIiFwcmludCJdPXt9KSxMWyIhcHJpbnQiXS5wcm9wc3x8KExbIiFwcmludCJdLnBy''@;'; put 'put ''b3BzPXt9KSxMWyIhcHJpbnQiXS5wcm9wcy5maXR8fChMWyIhcHJpbnQiXS5wcm9wcy5maXQ9e30pLG51bGw9PUxbIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQmJihMWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0PTEpLG51bGw9PUxbIiFwcmludCJdLnByb3BzLmZpdC53aWR0aCYmKExb''@;'; put 'put ''IiFwcmludCJdLnByb3BzLmZpdC53aWR0aD0xKSksdmU9UC5tYXRjaCh2Uykpe0xbIiFvdXRsaW5lIl09e307dmFyIEdlPWxuKHZlWzBdKTtHZS5zdW1tYXJ5QmVsb3cmJihMWyIhb3V0bGluZSJdLmFib3ZlPSF5cihHZS5zdW1tYXJ5QmVsb3cpKSxHZS5zdW1tYXJ5UmlnaHQmJihMWyIhb3V0''@;'; put 'put ''bGluZSJdLmxlZnQ9IXlyKEdlLnN1bW1hcnlSaWdodCkpfX0oQ3RbMF0sQ3RbMV18fCIiLHZlLHJlLEwsX2UscGUpO3ZhciBjdD0oSGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYoY3Q+MCl7dmFyIGJ0PUhlLnNsaWNlKGN0LGN0KzUwKS5tYXRj''@;'; put 'put ''aCgkWik7YnQmJighUHx8IVAubm9kaW0pJiZmdW5jdGlvbiBBSSh5LFApe3ZhciBMPU9pKFApO0wucy5yPD1MLmUuciYmTC5zLmM8PUwuZS5jJiZMLnMucj49MCYmTC5zLmM+PTAmJih5WyIhcmVmIl09T28oTCkpfSh2ZSxidFsxXSl9dmFyIEZ0PUhlLm1hdGNoKElJKTtGdCYmRnRbMV0mJmZ1''@;'; put 'put ''bmN0aW9uIGVZKHksUCxMLFEpe0wuVmlld3N8fChMLlZpZXdzPVt7fV0pO3ZhciByZT0wO3kucmVwbGFjZSh6SSxmdW5jdGlvbihwZSxfZSl7dmFyIHZlPWxuKHBlKTtpZihMLlZpZXdzW1FdfHwoTC5WaWV3c1tRXT17fSkseXIodmUucmlnaHRUb0xlZnQpJiYoTC5WaWV3c1tRXS5SVEw9ITAp''@;'; put 'put ''LHZlLnNob3dHcmlkTGluZXMmJihMLlZpZXdzW1FdLmdyaWQ9eXIodmUuc2hvd0dyaWRMaW5lcyksbnVsbD09UFsiIWdyaWRsaW5lcyJdJiYoUFsiIWdyaWRsaW5lcyJdPXlyKHZlLnNob3dHcmlkTGluZXMpKSksK3ZlLnpvb21TY2FsZSYmKEwuVmlld3NbUV0uem9vbT0rdmUuem9vbVNjYWxl''@;'; put 'put ''KSx2ZS52aWV3JiYoTC5WaWV3c1tRXS52aWV3PXZlLnZpZXcpLDE9PSsrcmUmJiIvPiIhPXBlLnNsaWNlKC0yKSl7dmFyIFNlPXkuc2xpY2UoX2UrcGUubGVuZ3RoKSxIZT1TZS5tYXRjaCgvPFwvKD86XHc6KT9zaGVldFZpZXcoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZighSGUpcmV0dXJu''@;'; put 'put ''IiI7dmFyIEJlPShTZT1TZS5zbGljZSgwLEhlLmluZGV4KSkubWF0Y2goLzwoPzpcdzopP3BhbmUoPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihCZSl7dmFyIEdlPWxuKEJlWzBdKTsiZnJvemVuIj09R2Uuc3RhdGU/UFsiIWZyZWV6ZSJdPU5zKCtHZS54U3BsaXR8fDApK0hzKCtHZS55U3Bs''@;'; put 'put ''aXR8fDApOkdlLnRvcExlZnRDZWxsJiYoUFsiIWZyZWV6ZSJdPUdlLnRvcExlZnRDZWxsKX12YXIgbnQ9U2UubWF0Y2goLzwoPzpcdzopP3NlbGVjdGlvbig/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKG50KXt2YXIgZHQ9bG4obnRbMF0pO2lmKGR0LmFjdGl2ZUNlbGwmJihQWyIhc2VsIl09''@;'; put 'put ''e2NlbGw6ZHQuYWN0aXZlQ2VsbH0pLGR0LnNxcmVmKXt2YXIgQ3Q9ZHQuc3FyZWYucmVwbGFjZSgvXHMuKiQvLCIiKTtQWyIhc2VsIl18fChQWyIhc2VsIl09e2NlbGw6ZGkoV3MoQ3QpLnMpfSksUFsiIXNlbCJdLnJhbmdlPWR0LnNxcmVmfX19cmV0dXJuIiJ9KX0oRnRbMV0sdmUscmUsTCk7''@;'; put 'put ''dmFyIEV0PUhlLm1hdGNoKGZmKSxUdD1bXTtpZihQLmNlbGxTdHlsZXMpe3ZhciBadD1IZS5tYXRjaChTdik7WnQmJmZ1bmN0aW9uIEczKHksUCxMKXtmb3IodmFyIFE9ITEscmU9MDtyZSE9UC5sZW5ndGg7KytyZSl7dmFyIHBlPWxuKFBbcmVdLCEwKTtwZS5oaWRkZW4mJihwZS5oaWRkZW49''@;'; put 'put ''eXIocGUuaGlkZGVuKSk7dmFyIF9lPXBhcnNlSW50KHBlLm1pbiwxMCktMSx2ZT1wYXJzZUludChwZS5tYXgsMTApLTE7Zm9yKHBlLm91dGxpbmVMZXZlbCYmKHBlLmxldmVsPStwZS5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBwZS5taW4sZGVsZXRlIHBlLm1heCxwZS53aWR0aD0rcGUud2lk''@;'; put 'put ''dGgsIVEmJnBlLndpZHRoJiYoUT0hMCkscHUocGUpLHBlLnN0eWxlJiYocGUucz1jNShwZS5zdHlsZSxMKSk7X2U8PXZlOyl5W19lKytdPW9uKHBlKX19KFR0LFp0LF9lKX1pZihHZSYmWkkoR2VbMV0sTCx2ZSxQLFNlLHBlLF9lKSxQLmNhbGxiYWNrKXJldHVybiB2ZTt2YXIgcG49QmUubWF0''@;'; put 'put ''Y2goVEkpO3BuJiYodmVbIiFwcm90ZWN0Il09ZnVuY3Rpb24gdHQoeSl7dmFyIFA9bG4oeSwhMCwhMCksTD17fTtpZih5cihQLnNoZWV0KSlyZXR1cm4gQXYuZm9yRWFjaChmdW5jdGlvbihRKXtMW1FdPW51bGwhPVBbUV0mJnlyKFBbUV0pfSksVHYuZm9yRWFjaChmdW5jdGlvbihRKXtMW1Fd''@;'; put 'put ''PW51bGw9PVBbUV18fHlyKFBbUV0pfSksUC5hbGdvcml0aG1OYW1lJiYoTC5lbmNyeXB0aW9uPXthbGdvOlAuYWxnb3JpdGhtTmFtZSxoYXNoOlAuaGFzaFZhbHVlLHNhbHQ6UC5zYWx0VmFsdWUsc3BpbjorUC5zcGluQ291bnR8fDFlNX0pLEx9KHBuWzBdKSk7dmFyIEtuPUJlLm1hdGNoKGc2''@;'; put 'put ''KTtLbiYmKHZlWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIGw1KHkpe3JldHVybntyZWY6KHkubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oS25bMF0pKTt2YXIgdW49W10scW49QmUubWF0Y2goQ3YpO2lmKHFuKWZvcihjdD0wO2N0IT1xbi5sZW5ndGg7KytjdCl1bltjdF09T2ko''@;'; put 'put ''cW5bY3RdLnNsaWNlKHFuW2N0XS5pbmRleE9mKCciJykrMSkpO3ZhciB6bj0oLTE9PW50P0JlOkJlLnNsaWNlKDAsbnQpKS5tYXRjaChtNik7em4mJih2ZVsiIWNvbmRmbXQiXT1bXS5jb25jYXQuYXBwbHkoW10sem4ubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gTFMoQW4sUCxwZSxfZSl9KSkp''@;'; put 'put ''LG50Pi0xJiYoem49QmUuc2xpY2UobnQpLm1hdGNoKG02KSkmJih2ZVsiIWNvbmRmbXQiXXx8KHZlWyIhY29uZGZtdCJdPVtdKSx2ZVsiIWNvbmRmbXQiXT12ZVsiIWNvbmRmbXQiXS5jb25jYXQuYXBwbHkodmVbIiFjb25kZm10Il0sem4ubWFwKGZ1bmN0aW9uKEFuKXtyZXR1cm4gTFMoQW4s''@;'; put 'put ''UCxwZSxfZSwhMCl9KSkpO3ZhciBrbj0oLTE9PW50P0JlOkJlLnNsaWNlKDAsbnQpKS5tYXRjaChoUyk7a24mJih2ZVsiIXZhbGlkYXRpb25zIl09VFMoa25bMF0sUCkpLG50Pi0xJiYoa249QmUuc2xpY2UobnQpLm1hdGNoKGhTKSkmJih2ZVsiIXZhbGlkYXRpb25zIl18fCh2ZVsiIXZhbGlk''@;'; put 'put ''YXRpb25zIl09W10pLHZlWyIhdmFsaWRhdGlvbnMiXT12ZVsiIXZhbGlkYXRpb25zIl0uY29uY2F0KFRTKGtuWzBdLFAsITApKSk7dmFyIGVyPUJlLm1hdGNoKGRTKTtlciYmZnVuY3Rpb24gTVMoeSxQLEwpe2Zvcih2YXIgUT1BcnJheS5pc0FycmF5KHkpLHJlPTA7cmUhPVAubGVuZ3RoOysr''@;'; put 'put ''cmUpe3ZhciBwZT1sbihQaShQW3JlXSksITApO2lmKCFwZS5yZWYpcmV0dXJuO3ZhciBfZT0oKEx8fHt9KVsiIWlkIl18fFtdKVtwZS5pZF07X2U/KHBlLlRhcmdldD1fZS5UYXJnZXQscGUubG9jYXRpb24mJihwZS5UYXJnZXQrPSIjIit4cihwZS5sb2NhdGlvbikpKToocGUuVGFyZ2V0PSIj''@;'; put 'put ''Iit4cihwZS5sb2NhdGlvbiksX2U9e1RhcmdldDpwZS5UYXJnZXQsVGFyZ2V0TW9kZToiSW50ZXJuYWwifSkscGUuUmVsPV9lLHBlLnRvb2x0aXAmJihwZS5Ub29sdGlwPXBlLnRvb2x0aXAsZGVsZXRlIHBlLnRvb2x0aXApO2Zvcih2YXIgdmU9T2kocGUucmVmKSxTZT12ZS5zLnI7U2U8PXZl''@;'; put 'put ''LmUucjsrK1NlKWZvcih2YXIgSGU9dmUucy5jO0hlPD12ZS5lLmM7KytIZSl7dmFyIEJlPWRpKHtjOkhlLHI6U2V9KTtRPyh5W1NlXXx8KHlbU2VdPVtdKSx5W1NlXVtIZV18fCh5W1NlXVtIZV09e3Q6InoiLHY6dm9pZCAwfSkseVtTZV1bSGVdLmw9cGUpOih5W0JlXXx8KHlbQmVdPXt0OiJ6''@;'; put 'put ''Iix2OnZvaWQgMH0pLHlbQmVdLmw9cGUpfX19KHZlLGVyLFEpO3ZhciB0cj1CZS5tYXRjaChMSSk7dHImJmZ1bmN0aW9uIFBJKHksUCl7dmFyIEw9bG4oeSwhMSwhMCk7UFsiIXByaW50Il18fChQWyIhcHJpbnQiXT17fSksUFsiIXByaW50Il0ucHJvcHN8fChQWyIhcHJpbnQiXS5wcm9wcz17''@;'; put 'put ''fSk7dmFyIFE9UFsiIXByaW50Il0ucHJvcHM7TC5ncmlkTGluZXMmJihRLmdyaWRsaW5lcz15cihMLmdyaWRMaW5lcykpLG51bGwhPUwuaG9yaXpvbnRhbENlbnRlcmVkJiYoUS5jZW50ZXJYPXlyKEwuaG9yaXpvbnRhbENlbnRlcmVkKSksbnVsbCE9TC52ZXJ0aWNhbENlbnRlcmVkJiYoUS5j''@;'; put 'put ''ZW50ZXJZPXlyKEwudmVydGljYWxDZW50ZXJlZCkpfSh0clswXSx2ZSk7dmFyIFpuPUJlLm1hdGNoKE12KTtabiYmKCh2ZVsiIXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5tYXJnaW5zPXZlWyIhbWFyZ2lucyJdPXhTKGxuKFpuWzBdKSkpO3ZhciBWcj1CZS5tYXRjaChXMyk7VnImJmZ1''@;'; put 'put ''bmN0aW9uIHlTKHksUCl7dmFyIEw9bG4oeSwhMSwhMCk7ZGVsZXRlIEwuaWQsZGVsZXRlIExbMF0sUFsiIXByaW50Il18fChQWyIhcHJpbnQiXT17fSksUFsiIXByaW50Il0ucHJvcHN8fChQWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFE9UFsiIXByaW50Il0ucHJvcHM7TC5vcmllbnRhdGlv''@;'; put 'put ''biYmKFEub3JpZW50YXRpb249TC5vcmllbnRhdGlvbiksTC5zY2FsZSYmKFEuc2NhbGU9K0wuc2NhbGUpLCtMLmZpdFRvSGVpZ2h0Pj0wJiYoKFEuZml0fHwoUS5maXQ9e30pKS5oZWlnaHQ9K0wuZml0VG9IZWlnaHQpLCtMLmZpdFRvV2lkdGg+PTAmJigoUS5maXR8fChRLmZpdD17fSkpLndp''@;'; put 'put ''ZHRoPStMLmZpdFRvV2lkdGgpLEwucGFwZXJIZWlnaHQmJkwucGFwZXJXaWR0aD9RLnBhcGVyPXt3aWR0aDpMLnBhcGVyV2lkdGgsaGVpZ2h0OkwucGFwZXJIZWlnaHR9OkwucGFwZXJTaXplJiYoUS5wYXBlcj1RbVtRLnBhcGVyPStMLnBhcGVyU2l6ZV18fFEucGFwZXIpLEwuaG9yaXpvbnRh''@;'; put 'put ''bERwaT9RLmRwaT0rTC5ob3Jpem9udGFsRHBpOkwudmVydGljYWxEcGkmJihRLmRwaT0rTC52ZXJ0aWNhbERwaSksImF1dG9tYXRpYyIhPShMLmZpcnN0UGFnZU51bWJlcnx8ImF1dG9tYXRpYyIpJiYoUS5maXJzdD0rTC5maXJzdFBhZ2VOdW1iZXIpLHlyKEwuYmxhY2tBbmRXaGl0ZSkmJihR''@;'; put 'put ''LmJ3PSEwKSx5cihMLmRyYWZ0KSYmKFEuZHJhZnQ9ITApLCJvdmVyVGhlbkRvd24iPT1MLnBhZ2VPcmRlciYmKFEub3JkZXI9Im92ZXIiKSxrdltMLmNlbGxDb21tZW50c10mJihRLmNvbW1lbnRzPWt2W0wuY2VsbENvbW1lbnRzXSksYlNbTC5lcnJvcnNdJiYoUS5lcnJvcnM9YlNbTC5lcnJv''@;'; put 'put ''cnNdKX0oVnJbMF0sdmUpO3ZhciBvaT1CZS5tYXRjaChxWik7b2kmJmZ1bmN0aW9uIEl2KHksUCl7aWYoUFsiIXByaW50Il18fChQWyIhcHJpbnQiXT17fSkseVsxXSl7dmFyIEw9IiIsUT0wO3lbMV0ucmVwbGFjZSgkdCxmdW5jdGlvbihyZSxwZSl7aWYoIi8iIT1yZS5jaGFyQXQoMSkpTD1y''@;'; put 'put ''ZS5zbGljZSgxLC0xKSxRPXBlK3JlLmxlbmd0aDtlbHNlIGlmKEwpe3ZhciBfZT1MLm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIix2ZT1MLnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTtMPSIiLFBbIiFwcmludCJdW19lXXx8KFBbIiFwcmludCJdW19lXT17fSksUFsiIXBy''@;'; put 'put ''aW50Il1bX2VdW3ZlXT14cihQaSh5WzFdLnNsaWNlKFEscGUpKSl9fSl9fShvaSx2ZSk7dmFyIGtpPUJlLm1hdGNoKFdkKTtraSYmKCh2ZVsiIXByaW50Il18fCh2ZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9dmVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBTUyh5KXt2YXIgUD1bXTtyZXR1''@;'; put 'put ''cm4oeS5tYXRjaChDUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPWxuKEwpO1AucHVzaCh7UjorUS5pZH0pfSksUH0oa2lbMF0pKTt2YXIgTGk9QmUubWF0Y2goZlMpO0xpJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz12ZVsiIWNvbEJyZWFr''@;'; put 'put ''cyJdPWZ1bmN0aW9uIEhJKHkpe3ZhciBQPVtdO3JldHVybih5Lm1hdGNoKENTKXx8W10pLmZvckVhY2goZnVuY3Rpb24oTCl7dmFyIFE9bG4oTCk7UC5wdXNoKHtDOitRLmlkfSl9KSxQfShMaVswXSkpO3ZhciBRcj1bXTtpZigoUXI9QmUubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykp''@;'; put 'put ''JiYodmVbIiFyZWwiXT1RclsxXSksKFFyPUJlLm1hdGNoKC9sZWdhY3lEcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHZlWyIhbGVncmVsIl09UXJbMV0pLChRcj1CZS5tYXRjaChoZikpJiYodmVbIiFjdHJsaWQiXT1Rci5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBsbihBbil9KSksKFFyPUJl''@;'; put 'put ''Lm1hdGNoKEV2KSkmJmZ1bmN0aW9uIGdTKHksUCl7eVsiIXRhYmxlcmVmcyJdfHwoeVsiIXRhYmxlcmVmcyJdPVtdKSwoUC5tYXRjaChwUyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3lbIiF0YWJsZXJlZnMiXS5wdXNoKGxuKEwpLmlkKX0pfSh2ZSxRclsxXSksUCYmUC5ub2RpbSYmKFNl''@;'; put 'put ''LnMuYz1TZS5zLnI9MCksIXZlWyIhcmVmIl0mJlNlLmUuYz49U2Uucy5jJiZTZS5lLnI+PVNlLnMuciYmKHZlWyIhcmVmIl09T28oU2UpKSxQLnNoZWV0Um93cz4wJiZ2ZVsiIXJlZiJdKXt2YXIgdXI9T2kodmVbIiFyZWYiXSk7UC5zaGVldFJvd3M8PSt1ci5lLnImJih1ci5lLnI9UC5zaGVl''@;'; put 'put ''dFJvd3MtMSx1ci5lLnI+U2UuZS5yJiYodXIuZS5yPVNlLmUuciksdXIuZS5yPHVyLnMuciYmKHVyLnMucj11ci5lLnIpLHVyLmUuYz5TZS5lLmMmJih1ci5lLmM9U2UuZS5jKSx1ci5lLmM8dXIucy5jJiYodXIucy5jPXVyLmUuYyksdmVbIiFmdWxscmVmIl09dmVbIiFyZWYiXSx2ZVsiIXJl''@;'; put 'put ''ZiJdPU9vKHVyKSl9cmV0dXJuIEV0JiYodmVbIiFzaGVldEZvcm1hdCJdPWZ1bmN0aW9uIFhaKHkpe3ZhciBQPXt9LEw9e30sUT0hMSxyZT17fSxwZT0hMTtyZXR1cm4geS5kZWZhdWx0Um93SGVpZ2h0JiYoUT0hMCxMLmhwdD1wYXJzZUZsb2F0KHkuZGVmYXVsdFJvd0hlaWdodCkpLHkuemVy''@;'; put 'put ''b0hlaWdodCYmKFE9ITAsTC5oaWRkZW49eXIoeS56ZXJvSGVpZ2h0KSkseS5iYXNlQ29sV2lkdGg/KHBlPSEwLHJlLndjaD1wYXJzZUZsb2F0KHkuYmFzZUNvbFdpZHRoKSk6eS5kZWZhdWx0Q29sV2lkdGgmJihwZT0hMCxyZS53Y2g9cGFyc2VGbG9hdCh5LmRlZmF1bHRDb2xXaWR0aCktNS9w''@;'; put 'put ''bCkseS5vdXRsaW5lTGV2ZWxDb2wmJihQLmNvbG91dGxpbmU9cGFyc2VJbnQoeS5vdXRsaW5lTGV2ZWxDb2wpKSx5Lm91dGxpbmVMZXZlbFJvdyYmKFAucm93b3V0bGluZT1wYXJzZUludCh5Lm91dGxpbmVMZXZlbFJvdykpLHkudGhpY2tCb3R0b20mJihQLmJvdHRoaWNrPXlyKHkudGhpY2tC''@;'; put 'put ''b3R0b20pKSx5LnRoaWNrVG9wJiYoUC50b3B0aGljaz15cih5LnRoaWNrVG9wKSkseS5keURlc2NlbnQmJihQLmR5RGVzY2VudD1wYXJzZUZsb2F0KHkuZHlEZXNjZW50KSksUSYmKEkzKEwpLFAucm93PUwpLHBlJiYocHUocmUpLFAuY29sPXJlKSxQfShsbihFdFswXSkpKSxUdC5sZW5ndGg+''@;'; put 'put ''MCYmKHZlWyIhY29scyJdPVR0KSx1bi5sZW5ndGg+MCYmKHZlWyIhbWVyZ2VzIl09dW4pLFFbIiFpZCJdW3ZlWyIhcmVsIl1dJiYodmVbIiFkcmF3ZWwiXT1RWyIhaWQiXVt2ZVsiIXJlbCJdXSksUVsiIWlkIl1bdmVbIiFsZWdyZWwiXV0mJih2ZVsiIWxlZ2RyYXdlbCJdPVFbIiFpZCJdW3Zl''@;'; put 'put ''WyIhbGVncmVsIl1dKSwodmVbIiFjdHJsaWQiXXx8W10pLmZvckVhY2goZnVuY3Rpb24oQW4pe0FuLnJlbD1RWyIhaWQiXVtBbi5pZF19KSxudWxsPT12ZVsiIWdyaWRsaW5lcyJdJiYodmVbIiFncmlkbGluZXMiXT0hMCksdmV9KHksUSxMLHJlLHBlLF9lLHZlKX0obnQsUCxyZSxTZSxwZVtR''@;'; put 'put ''XSxIZSxCZSxHZSk7YnJlYWs7Y2FzZSJjaGFydCI6ZHQ9ZnVuY3Rpb24gVkwoeSxQLEwsUSxyZSxwZSxfZSx2ZSl7cmV0dXJuIi5iaW4iPT09UC5zbGljZSgtNCk/ZnVuY3Rpb24gdHAoeSxQLEwsUSxyZSl7aWYoIXkpcmV0dXJuIHk7UXx8KFE9eyIhaWQiOnt9fSk7dmFyIHBlPXsiIXR5cGUi''@;'; put 'put ''OiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSxfZT1bXSx2ZT0hMTtyZXR1cm4gSG8oeSxmdW5jdGlvbihIZSxCZSxHZSl7c3dpdGNoKEdlKXtjYXNlIDU1MDpwZVsiIXJlbCJdPUhlO2JyZWFrO2Nhc2UgNjUxOnJlLlNoZWV0c1tMXXx8KHJlLlNoZWV0c1tMXT17fSksSGUubmFt''@;'; put 'put ''ZSYmKHJlLlNoZWV0c1tMXS5Db2RlTmFtZT1IZS5uYW1lKTticmVhaztjYXNlIDU2MjpjYXNlIDY1MjpjYXNlIDY2OTpjYXNlIDY3OTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDQ3NjpjYXNlIDMwNzI6YnJlYWs7Y2FzZSAzNTp2ZT0hMDticmVhaztjYXNlIDM2OnZlPSExO2JyZWFrO2Nhc2Ug''@;'; put 'put ''Mzc6X2UucHVzaChCZSk7YnJlYWs7Y2FzZSAzODpfZS5wb3AoKTticmVhaztkZWZhdWx0OmlmKChCZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MClfZS5wdXNoKEJlKTtlbHNlIGlmKChCZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApX2UucG9wKCk7ZWxzZSBpZighdmV8fFAuV1RGKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitHZSsiICIrQmUpfX0sUCksUVsiIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPVFbIiFpZCJdW3BlWyIhcmVsIl1dKSxwZX0oeSxRLEwscmUscGUpOmZ1bmN0aW9uIEozKHksUCxMLFEscmUpe2lmKCF5KXJldHVybiB5O1F8fChR''@;'; put 'put ''PXsiIWlkIjp7fX0pO3ZhciBfZSxwZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sdmU9eS5tYXRjaCh4dik7dmUmJnY2KHZlWzBdLDAscmUsTCk7dmFyIFNlPXkubWF0Y2goTXYpO3JldHVybiBTZSYmKHBlWyIhbWFyZ2lucyJdPXhTKGxuKFNlWzBdKSkpLChf''@;'; put 'put ''ZT15Lm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhcmVsIl09X2VbMV0pLFFbIiFpZCJdW3BlWyIhcmVsIl1dJiYocGVbIiFkcmF3ZWwiXT1RWyIhaWQiXVtwZVsiIXJlbCJdXSkscGV9KHksMCxMLHJlLHBlKX0obnQsUCxyZSxTZSxwZVtRXSxIZSk7YnJlYWs7Y2FzZSJt''@;'; put 'put ''YWNybyI6ZHQ9ZnVuY3Rpb24gQkwoeSxQLEwsUSxyZSxwZSxfZSx2ZSl7cmV0dXJuIFAuc2xpY2UoLTQpLHsiIXR5cGUiOiJtYWNybyJ9fSgwLFApO2JyZWFrO2Nhc2UiZGlhbG9nIjpkdD1mdW5jdGlvbiBqTCh5LFAsTCxRLHJlLHBlLF9lLHZlKXtyZXR1cm4gUC5zbGljZSgtNCkseyIhdHlw''@;'; put 'put ''ZSI6ImRpYWxvZyJ9fSgwLFApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hlZXQgdHlwZSAiK3ZlKX1pZihTZS5jYWxsYmFjaylyZXR1cm47X2VbUV09ZHQsZnVuY3Rpb24gUE0oeSxQLEwsUSxyZSxwZSxfZSx2ZSl7aWYoeSYmeVsiIWRyYXdlbCJdKXt2''@;'; put 'put ''YXIgU2U9c24oeVsiIWRyYXdlbCJdLlRhcmdldCxRKSxIZT1CaShTZSksQmU9ZnVuY3Rpb24gR0QoeSxQLEwsUSxyZSl7dmFyIHBlPXtjaGFydHM6W10saW1hZ2VzOltdLHNoYXBlczpbXX07aWYoIXkpcmV0dXJuIHBlO3ZhciBfZT1yZXx8e307cmV0dXJuKHkubWF0Y2goLzxbXjxdKj8oYWJz''@;'; put 'put ''b2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24odmUpe3ZhciBTZT0iIixIZT17dHlwZToiIn0sQmU9e30sR2U9ITAsbnQ9ITEsZHQ9''@;'; put 'put ''ITEsQ3Q9ITEsY3Q9e3M6e319LGJ0PS0xLEZ0PVtdLEV0PVtdLFR0PXtzOnthbGlnbm1lbnQ6e2hvcml6b250YWw6ImNlbnRlciIsdmVydGljYWw6ImNlbnRlciJ9fX0sWnQ9IiIscG49LTEsdW49e307dmUucmVwbGFjZSgkdCxmdW5jdGlvbihxbix6bil7RnQ9bnVsbDt2YXIga249bG4ocW4p''@;'; put 'put ''LGVyPWpuKGtuWzBdKS5yZXBsYWNlKC9bXC9dPz4kLywiIik7c3dpdGNoKGVyKXtjYXNlIjxjbGllbnREYXRhIjpicmVhaztjYXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6SGUudHlwZT1qbihrblswXSkucmVwbGFjZSgvWzw+''@;'; put 'put ''XS9nLCIiKTticmVhaztjYXNlIjwvYWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxsQW5jaG9yIjpjYXNlIjwvdHdvQ2VsbEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpIZS5wb3M9e3g6K2tuLngseTora24ueX07YnJlYWs7Y2FzZSI8ZXh0IjpHZSYmKEhlLmV4dD17eDora24uY3gseTor''@;'; put 'put ''a24uY3l9KTticmVhaztjYXNlIjxmcm9tIjpjYXNlIjx0byI6QmU9e307YnJlYWs7Y2FzZSI8L2Zyb20iOkdlJiYoSGUuZnJvbT1CZSk7YnJlYWs7Y2FzZSI8L3RvIjpHZSYmKEhlLnRvPUJlKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYi''@;'; put 'put ''OmJ0PXpuK3FuLmxlbmd0aDticmVhaztjYXNlIjwvY29sIjpCZS5jPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8L2NvbE9mZiI6QmUuY09mZj0rdmUuc2xpY2UoYnQsem4pO2JyZWFrO2Nhc2UiPC9yb3ciOkJlLnI9K3ZlLnNsaWNlKGJ0LHpuKTticmVhaztjYXNlIjwvcm93T2ZmIjpC''@;'; put 'put ''ZS5yT2ZmPSt2ZS5zbGljZShidCx6bik7YnJlYWs7Y2FzZSI8c3AiOlNlPSJzaGFwZSIsVHQuQW5jaG9yPUhlLHBlLnNoYXBlcy5wdXNoKFR0KSxHZT0hMTticmVhaztjYXNlIjwvc3AiOkdlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6U2U9ImdyYXBoaWMiLEdlPSExO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9ncmFwaGljRnJhbWUiOkdlPSEwO2JyZWFrO2Nhc2UiPHBpYyI6U2U9InBpY3R1cmUiLEdlPSExO2JyZWFrO2Nhc2UiPC9waWMiOkdlPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjpTZT0iZ3JvdXBzaGFwZSIsR2U9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpHZT0hMDticmVhaztjYXNlIjxn''@;'; put 'put ''cmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9mZiI6YnJlYWs7Y2FzZSI8Z3JhcGhpY0RhdGEiOm50PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6bnQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOm50PSEwO2JyZWFrO2Nhc2UiPC9i''@;'; put 'put ''bGlwRmlsbCI6bnQ9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOm50PSEwO2JyZWFrO2Nhc2UiPC9zcmNSZWN0IjpudD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKGR0KWJyZWFrOyI8c3BQciI9PUV0LnNsaWNlKC0xKVswXSYmKFR0LnMuZmdDb2xvcj1udWxs''@;'; put 'put ''KTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZihkdHx8Q3QpYnJlYWs7IjxzcFByIj09RXQuc2xpY2UoLTIpWzBdP1R0LnMuZmdDb2xvcj11bjoiPHJQciI9PUV0LnNsaWNlKC0yKVswXSYmRXQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYoY3Qucy5jb2xvcj11biksdW49e30sQ3Q9ITE7YnJl''@;'; put 'put ''YWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PVNlJiYoVHRbIiFzaGFwZSJdPWtuLnByc3QpO2JyZWFrO2Nhc2UiPC9wcnN0R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6bnQ9ITAsVHQuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpudD0hMTticmVhaztjYXNlIjxi''@;'; put 'put ''b2R5UHIiOlR0LnMuYWxpZ25tZW50LnZlcnRpY2FsPVlEW2tuLmFuY2hvcnx8InQiXXx8InRvcCI7YnJlYWs7Y2FzZSI8bHN0U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOnBuPXpuK3FuLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6WnQrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOlp0''@;'; put 'put ''Kz12ZS5zbGljZShwbix6bik7YnJlYWs7Y2FzZSI8cFByIjpUdC5zLmFsaWdubWVudC5ob3Jpem9udGFsfHwoVHQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1MQ1trbi5hbGdufHwibCJdfHwibGVmdCIpLEV0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGN0LnMuYWxpZ25tZW50Lmhvcml6b250''@;'; put 'put ''YWw9TENba24uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOmtuLnN6JiZFdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihUdC5zLnN6PWN0LnMuc3o9K2tuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6WnQ9IiIsY3Q9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJl''@;'; put 'put ''YWs7Y2FzZSI8L3AiOiJzaGFwZSI9PVNlJiZFdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihUdC52PShUdC52fHwiIikrWnQsY3Qudj1adCxUdC5SLnB1c2goY3QpKTticmVhaztjYXNlIjxsYXRpbiI6a24udHlwZWZhY2UmJkV0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKGN0LnMubmFtZT1r''@;'; put 'put ''bi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOm50PSEwLGR0PSEwO2JyZWFrO2Nhc2UiPC9zdHlsZSI6bnQ9ITEsZHQ9ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiFk''@;'; put 'put ''dCYmInNoYXBlIj09U2UmJihUdC5zLmZnQ29sb3I9dW4pLHVuPXt9O2JyZWFrO2Nhc2UiPC9mb250UmVmIjohZHQmJiJzaGFwZSI9PVNlJiYoVHQucy5jb2xvcj11biksdW49e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgdHI9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4''@;'; put 'put ''MjoiZGsyIn1ba24udmFsXXx8a24udmFsLFpuPSgoUS50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmluZChmdW5jdGlvbihvaSl7cmV0dXJuIG9pLm5hbWU9PXRyfSk7Wm4/dW4ucmdiPVpuLnJnYjpDdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6Q3Q9ITA7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8c3JnYkNsciI6dW4ucmdiPWtuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIiOmNhc2UiPHByc3RDbHIiOkN0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpGdD1wZS5jaGFydHM7dmFyIFZyPWtuLmlkO2Nhc2UiPGJsaXAiOkZ0fHwoRnQ9cGUuaW1hZ2Vz''@;'; put 'put ''LFZyPWtuLmVtYmVkKSxGdC5wdXNoKHtBbmNob3I6SGUsVGFyZ2V0OihQWyIhaWQiXVtWcl18fHt9KS5UYXJnZXR9KSxrbi5saW5rJiYoRnRbRnQubGVuZ3RoLTFdLkxpbms9KFBbIiFpZCJdW2tuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpudD0hMDticmVhaztj''@;'; put 'put ''YXNlIjwvZ3JwU3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpudD0hMDticmVhaztjYXNlIjwvbnZHcnBTcFByIjpudD0hMTticmVhaztjYXNlIjxzcFByIjpudD0hMDticmVhaztjYXNlIjwvc3BQciI6bnQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2gi''@;'; put 'put ''OmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9u''@;'; put 'put ''dlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6Y2FzZSI8Y052R3JwU3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NO''@;'; put 'put ''dlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nhc2UiPGNOdlByIjpudD0hMDticmVhaztjYXNlIjwvY052UHIiOm50PSExO2JyZWFrO2Nhc2UiPGN4blNwIjpudD0hMDticmVhaztjYXNlIjwvY3huU3AiOm50PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOm50PSEwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''PC9jTnZDeG5TcFByIjpudD0hMTticmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNwUHIiOmJyZWFrO2Nhc2UiPGV4dExzdCI6bnQ9ITAsZHQ9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6bnQ9ITEsZHQ9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihfZSYm''@;'; put 'put ''X2UuV1RGJiYhbnQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitrblswXSsiIGluIGRyYXdpbmciKX1yZXR1cm4iPC8iPT1lci5zbGljZSgwLDIpP0V0LnBvcCgpOiIvPiIhPXFuLnNsaWNlKHFuLmxlbmd0aC0yKSYmRXQucHVzaChlciksIiJ9KX0pLHBlfShKdChMLFNlLCEwKSxE''@;'; put 'put ''byhKdChMLEhlLCEwKSxTZSksMCx2ZSxyZSk7aWYoQmUpe2lmKEJlLmNoYXJ0cylmb3IodmFyIEdlPTA7R2U8QmUuY2hhcnRzLmxlbmd0aDsrK0dlKXt2YXIgbnQ9QmUuY2hhcnRzW0dlXSxkdD1zbihudC5UYXJnZXQsU2UpLEN0PUJpKGR0KSxjdD0iY2hhcnQiPT1QJiYwPT1HZSxidD1tMChK''@;'; put 'put ''dChMLGR0LCEwKSwwLDAsRG8oSnQoTCxDdCwhMCksZHQpLDAsY3Q/eTpudWxsLG50LGN0P251bGw6eSk7Y3R8fCh5WyIhY2hhcnRzIl18fCh5WyIhY2hhcnRzIl09W10pLHlbIiFjaGFydHMiXS5wdXNoKGJ0KSl9aWYocmUuYm9va0ltYWdlcyYmQmUuaW1hZ2VzKWZvcih2YXIgRnQ9MDtGdDxC''@;'; put 'put ''ZS5pbWFnZXMubGVuZ3RoOysrRnQpe3ZhciBFdD1CZS5pbWFnZXNbRnRdLFR0PXsiIXR5cGUiOiJpbWFnZSIsIiFwb3MiOnhDKEV0LkFuY2hvciksIiFwb3NUeXBlIjpFdC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6c2YoRXQuQW5jaG9yLHkpLCIhcmVscG9z''@;'; put 'put ''IjpLbShFdC5BbmNob3IseSl9O2lmKEV0LlRhcmdldCYmKFR0WyIhcGF0aCJdPXNuKEV0LlRhcmdldCxTZSksVHRbIiFkYXRhIl09SXQoTCxUdFsiIXBhdGgiXSksVHRbIiFkYXRhdHlwZSJdPSJzdHJpbmciPT10eXBlb2YgVHRbIiFkYXRhIl0/ImJpbmFyeSI6ImJ1ZmZlciIpLEV0Lkxpbmsm''@;'; put 'put ''JihUdFsiIWRhdGF0eXBlIl18fChUdFsiIWRhdGF0eXBlIl09InJlbW90ZSIpLFR0WyIhbGluayJdPUV0LkxpbmspLCFUdFsiIWRhdGF0eXBlIl0pdGhyb3ciSW1hZ2UgZGF0YSBjYW5ub3QgYmUgZm91bmQiO3lbIiFpbWFnZXMiXXx8KHlbIiFpbWFnZXMiXT1bXSkseVsiIWltYWdlcyJdLnB1''@;'; put 'put ''c2goVHQpfXZhciBadCxwbjtpZihCZS5zaGFwZXMpZm9yKHZhciB1bj0wO3VuPEJlLnNoYXBlcy5sZW5ndGg7Kyt1bilwbj17IiF0eXBlIjoic2hhcGUiLCIhcG9zIjpzZigoWnQ9QmUuc2hhcGVzW3VuXSkuQW5jaG9yLHkpLCIhcG9zVHlwZSI6WnQuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5j''@;'; put 'put ''aG9yLywiIiksIiFhYnNwb3MiOnNmKFp0LkFuY2hvcix5KSwiIXJlbHBvcyI6S20oWnQuQW5jaG9yLHkpfSxbInYiLCIhc2hhcGUiLCJzIiwiUiJdLmZvckVhY2goS24pLHlbIiFzaGFwZXMiXXx8KHlbIiFzaGFwZXMiXT1bXSkseVsiIXNoYXBlcyJdLnB1c2gocG4pfX1mdW5jdGlvbiBLbihx''@;'; put 'put ''bil7WnRbcW5dJiYocG5bcW5dPVp0W3FuXSl9fShkdCx2ZSx5LFAsU2UsMCwwLEJlKTt2YXIgQ3Q9W107cmV0dXJuIHBlJiZwZVtRXSYmbHQocGVbUV0pLmZvckVhY2goZnVuY3Rpb24oY3Qpe2lmKHBlW1FdW2N0XS5UeXBlPT1IaS5DTU5UKXt2YXIgYnQ9c24ocGVbUV1bY3RdLlRhcmdldCxQ''@;'; put 'put ''KTtpZighKEN0PWZ1bmN0aW9uIHVZKHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBRRCh5LFApe3ZhciBMPVtdLFE9W10scmU9e30scGU9ITE7cmV0dXJuIEhvKHksZnVuY3Rpb24odmUsU2UsSGUpe3N3aXRjaChIZSl7Y2FzZSA2MzI6US5wdXNoKHZlKTticmVh''@;'; put 'put ''aztjYXNlIDYzNTpyZT12ZTticmVhaztjYXNlIDYzNzpyZS50PXZlLnQscmUuaD12ZS5oLHJlLnI9dmUucjticmVhaztjYXNlIDYzNjppZihyZS5hdXRob3I9UVtyZS5pYXV0aG9yXSxkZWxldGUgcmUuaWF1dGhvcixQLnNoZWV0Um93cyYmcmUucmZ4JiZQLnNoZWV0Um93czw9cmUucmZ4LnIp''@;'; put 'put ''YnJlYWs7cmUudHx8KHJlLnQ9IiIpLGRlbGV0ZSByZS5yZngsTC5wdXNoKHJlKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6cGU9ITA7YnJlYWs7Y2FzZSAzNjpwZT0hMTticmVhaztkZWZhdWx0OmlmKCEoKFNlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4w''@;'; put 'put ''KSYmISgoU2V8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFwZXx8UC5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitIZSsiICIrU2UpfX0pLEx9KHksTCk6ZnVuY3Rpb24gSEMoeSxQKXtpZih5Lm1hdGNoKC88KD86XHcrOik/Y29tbWVudHMgKlwvPi8pKXJldHVy''@;'; put 'put ''bltdO3ZhciBMPVtdLFE9W10scmU9eS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcnM+KFtcc1xTXSopPFwvKD86XHcrOik/YXV0aG9ycz4vKTtyZSYmcmVbMV0mJnJlWzFdLnNwbGl0KC88XC9cdyo6P2F1dGhvcj4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9lLnRy''@;'; put 'put ''aW0oKSl7dmFyIHZlPV9lLm1hdGNoKC88KD86XHcrOik/YXV0aG9yW14+XSo+KC4qKS8pO3ZlJiZMLnB1c2godmVbMV0pfX0pO3ZhciBwZT15Lm1hdGNoKC88KD86XHcrOik/Y29tbWVudExpc3Q+KFtcc1xTXSopPFwvKD86XHcrOik/Y29tbWVudExpc3Q+Lyk7cmV0dXJuIHBlJiZwZVsxXSYm''@;'; put 'put ''cGVbMV0uc3BsaXQoLzxcL1x3Kjo/Y29tbWVudD4vKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXtpZigiIiE9PV9lJiYiIiE9PV9lLnRyaW0oKSl7dmFyIHZlPV9lLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKHZlKXt2YXIgU2U9bG4odmVbMF0pLEhlPXthdXRob3I6U2UuYXV0''@;'; put 'put ''aG9ySWQmJkxbU2UuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6U2UucmVmLGd1aWQ6U2UuZ3VpZH0sQmU9c3MoU2UucmVmKTtpZighKFAuc2hlZXRSb3dzJiZQLnNoZWV0Um93czw9QmUucikpe3ZhciBHZT1fZS5tYXRjaCgvPCg/Olx3KzopP3RleHQ+KFtcc1xTXSopPFwvKD86XHcr''@;'; put 'put ''Oik/dGV4dD4vKSxudD0hIUdlJiYhIUdlWzFdJiZEOShHZVsxXSl8fHtyOiIiLHQ6IiIsaDoiIn07SGUucj1udC5yLCI8dD48L3Q+Ij09bnQuciYmKG50LnQ9bnQuaD0iIiksSGUudD0obnQudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFAuY2VsbEhU''@;'; put 'put ''TUwmJihIZS5oPW50LmgpLFEucHVzaChIZSl9fX19KSxRfSh5LEwpfShJdCh5LGJ0LCEwKSxidCxTZSkpfHwhQ3QubGVuZ3RoKXJldHVybjshZnVuY3Rpb24gJDkoeSxQKXt2YXIgUSxMPUFycmF5LmlzQXJyYXkoeSk7UC5mb3JFYWNoKGZ1bmN0aW9uKHJlKXt2YXIgcGU9c3MocmUucmVmKTtp''@;'; put 'put ''ZihMPyh5W3BlLnJdfHwoeVtwZS5yXT1bXSksUT15W3BlLnJdW3BlLmNdKTpRPXlbcmUucmVmXSwhUSl7UT17dDoieiJ9LEw/eVtwZS5yXVtwZS5jXT1ROnlbcmUucmVmXT1RO3ZhciBfZT1PaSh5WyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtfZS5zLnI+cGUuciYmKF9lLnMucj1wZS5y''@;'; put 'put ''KSxfZS5lLnI8cGUuciYmKF9lLmUucj1wZS5yKSxfZS5zLmM+cGUuYyYmKF9lLnMuYz1wZS5jKSxfZS5lLmM8cGUuYyYmKF9lLmUuYz1wZS5jKTt2YXIgdmU9T28oX2UpO3ZlIT09eVsiIXJlZiJdJiYoeVsiIXJlZiJdPXZlKX1RLmN8fChRLmM9W10pO3ZhciBTZT17YTpyZS5hdXRob3IsdDpy''@;'; put 'put ''ZS50LHI6cmUucn07U2UuciYmInN0cmluZyI9PXR5cGVvZiBTZS5yJiYoU2UuUj1EbShTZS5yKSkscmUuaCYmKFNlLmg9cmUuaCksUS5jLnB1c2goU2UpfSl9KGR0LEN0KX19KSxmdW5jdGlvbiBwUih5LFAsTCxRLHJlLHBlLF9lKXsheXx8IXlbIiF0YWJsZXJlZnMiXXx8IUx8fCFMWyIhaWQi''@;'; put 'put ''XXx8KHlbIiF0YWJsZXMiXT1bXSx5WyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIFNlPUxbIiFpZCJdW3ZlXTtpZihTZSYmU2UuVGFyZ2V0KXt2YXIgSGU9c24oU2UuVGFyZ2V0LFEpOyFmdW5jdGlvbiAkNCh5LFAsTCxRLHJlKXt2YXIgcGU9e3N0eWxlOnt9LGhlYWRl''@;'; put 'put ''cjowfSxfZT0hMTt5LnJlcGxhY2UoJHQsZnVuY3Rpb24odmUpe3ZhciBTZT1sbih2ZSk7c3dpdGNoKGpuKFNlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8L3RhYmxlPiI6Y2FzZSI8L2F1dG9GaWx0ZXI+IjpjYXNlIjxzb3J0U3RhdGUiOmNhc2UiPHNvcnRTdGF0ZT4iOmNhc2UiPC9zb3J0U3Rh''@;'; put 'put ''dGU+IjpjYXNlIjwvdGFibGVDb2x1bW5zIjpjYXNlIjwvdGFibGVDb2x1bW5zPiI6Y2FzZSI8L3RhYmxlQ29sdW1uPiI6Y2FzZSI8Y2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYSI6Y2FzZSI8L2NhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhPiI6''@;'; put 'put ''Y2FzZSI8dG90YWxzUm93Rm9ybXVsYT4iOmNhc2UiPHRvdGFsc1Jvd0Zvcm11bGEiOmNhc2UiPC90b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8eG1sQ29sdW1uUHI+IjpjYXNlIjx4bWxDb2x1bW5QciI6Y2FzZSI8L3htbENvbHVtblByPiI6Y2FzZSI8c29ydENvbmRpdGlvbj4iOmNhc2UiPHNv''@;'; put 'put ''cnRDb25kaXRpb24iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0YWJsZSI6U2UucmVmJiYocGUucmVmPVNlLnJlZiksU2UubmFtZT9wZS5uYW1lPVNlLm5hbWU6U2UuZGlzcGxheU5hbWUmJihwZS5uYW1l''@;'; put 'put ''PVNlLmRpc3BsYXlOYW1lKSxudWxsIT1TZS5oZWFkZXJyb3djb3VudCYmMSE9K1NlLmhlYWRlcnJvd2NvdW50P3BlLmhlYWRlcj0rU2UuaGVhZGVycm93Y291bnQ6bnVsbD09U2UuaGVhZGVycm93Y291bnQmJihwZS5oZWFkZXI9MSk7YnJlYWs7Y2FzZSI8YXV0b0ZpbHRlciI6Y2FzZSI8YXV0''@;'; put 'put ''b0ZpbHRlcj4iOnBlLmZpbHRlcj0hMDticmVhaztjYXNlIjx0YWJsZUNvbHVtbnMiOmNhc2UiPHRhYmxlQ29sdW1ucz4iOnBlLmNvbHM9W107YnJlYWs7Y2FzZSI8dGFibGVTdHlsZUluZm8iOlNlLnNob3dSb3dTdHJpcGVzJiYocGUuc3R5bGUucm93c3RyaXBlPXlyKFNlLnNob3dSb3dTdHJp''@;'; put 'put ''cGVzKSksU2Uuc2hvd0NvbHVtblN0cmlwZXMmJihwZS5zdHlsZS5jb2xzdHJpcGU9eXIoU2Uuc2hvd0NvbHVtblN0cmlwZXMpKSxTZS5zaG93Rmlyc3RDb2x1bW4mJihwZS5zdHlsZS5jb2xmaXJzdD15cihTZS5zaG93Rmlyc3RDb2x1bW4pKSxTZS5zaG93TGFzdENvbHVtbiYmKHBlLnN0eWxl''@;'; put 'put ''LmNvbGxhc3Q9eXIoU2Uuc2hvd0xhc3RDb2x1bW4pKSxTZS5uYW1lJiYocGUuc3R5bGUubmFtZT1TZS5uYW1lLnJlcGxhY2UoL15UYWJsZVN0eWxlLywiIikpO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1uIjpjYXNlIjx0YWJsZUNvbHVtbj4iOnBlLmNvbHMucHVzaCh7aWQ6K1NlLmlkLG5hbWU6''@;'; put 'put ''U2UubmFtZX0pO2JyZWFrO2Nhc2UiPGZpbHRlckNvbHVtbj4iOmNhc2UiPGZpbHRlckNvbHVtbiI6Y2FzZSI8Y3VzdG9tRmlsdGVycyI6Y2FzZSI8Y3VzdG9tRmlsdGVycz4iOmNhc2UiPGV4dCI6X2U9ITA7YnJlYWs7Y2FzZSI8L2ZpbHRlckNvbHVtbj4iOmNhc2UiPC9jdXN0b21GaWx0ZXJz''@;'; put 'put ''PiI6Y2FzZSI8L2V4dD4iOl9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoIV9lJiZyZS5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitTZVswXSsiIGluIHRhYmxlIil9cmV0dXJuIHZlfSkscGUuZmlsdGVyfHwocGUuZmlsdGVyPSExKSxwZS5zdHlsZS5uYW1lJiYhcGUuc3R5bGUu''@;'; put 'put ''bmFtZS5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLykmJkwuVGFibGUmJkwuVGFibGUuZm9yRWFjaChmdW5jdGlvbih2ZSl7KHZlLm5hbWU9PXBlLnN0eWxlLm5hbWV8fHZlLnJhd25hbWU9PXBlLnN0eWxlLm5hbWUpJiYocGUuc3R5bGUucmF3PW9uKHZlKSl9KSxQWyIhdGFibGVz''@;'; put 'put ''Il0ucHVzaChwZSl9KEl0KFAsSGUsITApLHkscmUsMCxfZSl9fSksZGVsZXRlIHlbIiF0YWJsZXJlZnMiXSl9KGR0LHkscGVbUV0sUCxHZSwwLFNlKSx0eXBlb2YgcGFyc2Vfc2hlZXRfcGl2b3Q8InUiJiZGNi5wdXNoKFtkdCx5LHBlW1FdLFAse1NoZWV0czpfZX0sR2UsU2VdKSxmdW5jdGlv''@;'; put 'put ''biBGTSh5LFAsTCxRLHJlLHBlLF9lLHZlKXtpZih5JiZ5WyIhbGVnZHJhd2VsIl0pe3ZhciBTZT1zbih5WyIhbGVnZHJhd2VsIl0uVGFyZ2V0LFEpLEhlPUp0KEwsU2UsITApO0hlJiZmdW5jdGlvbiAkRCh5LFAsTCl7dmFyIFE9MDsoeS5tYXRjaChOMyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KHJlKXt2YXIgRnQsRXQsVHQsWnQscG4sS24sdW4scW4scGU9IiIsX2U9ITAsdmU9IiIsU2U9LTEsSGU9e30sQmU9e30sR2U9e30sbnQ9LTEsZHQ9LTEsQ3Q9IiIsY3Q9IiIsYnQ9IiIsem49ITEsa249ITE7c3dpdGNoKHJlLnJlcGxhY2UoJHQsZnVuY3Rpb24oWm4sVnIpe3ZhciBvaT1sbiha''@;'; put 'put ''bik7c3dpdGNoKGpuKG9pWzBdKSl7Y2FzZSI8c2hhcGUiOm9pLmZpbGxjb2xvciYmKEhlLmNvbG9yMT1vaS5maWxsY29sb3IpLG9pLnN0cm9rZWNvbG9yJiYoR2UuY29sb3I9b2kuc3Ryb2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PW9pWzBdJiYo''@;'; put 'put ''b2kuY29sb3IyJiYoSGUuY29sb3IyPW9pLmNvbG9yMiksb2kudHlwZSYmKEhlLnR5cGU9b2kudHlwZSkpO2JyZWFrO2Nhc2UiPC9maWxsPiI6Y2FzZSI8bG9jayI6Y2FzZSI8bG9jay8+IjpicmVhaztjYXNlIjxzaGFkb3ciOm9pLmNvbG9yJiYoQmUuY29sb3I9b2kuY29sb3IpLG9pLm9uJiYo''@;'; put 'put ''QmUub249b2kub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOm9pLk9iamVjdFR5cGUmJihwZT1vaS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxlLz4iOl9lPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNl''@;'; put 'put ''IjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2FzZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxU''@;'; put 'put ''eXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2UiPE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQYWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRi''@;'; put 'put ''b3giOmNhc2UiPHRleHRib3g+IjpTZT1Wcitabi5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4iOnZlPXJlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1Jvdz4iOm50PStyZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9Db2x1bW4+IjpkdD0rcmUuc2xpY2Uo''@;'; put 'put ''U2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6Q3Q9cmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYUxpbms+IjpjdD1yZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhUmFuZ2U+Ijp1bj1yZS5zbGljZShTZSxWcikudHJpbSgp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6cW49cmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvVmFsPiI6RnQ9K3JlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01pbj4iOkV0PStyZS5zbGljZShTZSxWcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpUdD0r''@;'; put 'put ''cmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvSW5jPiI6WnQ9K3JlLnNsaWNlKFNlLFZyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1BhZ2U+Ijpwbj0rcmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjwvQ2hlY2tlZD4iOktuPStyZS5zbGljZShTZSxWcikudHJpbSgp''@;'; put 'put ''O2JyZWFrO2Nhc2UiPC90ZXh0Ym94PiI6YnQ9cmUuc2xpY2UoU2UsVnIpLnRyaW0oKTticmVhaztjYXNlIjxNb3ZlV2l0aENlbGxzLz4iOmNhc2UiPE1vdmVXaXRoQ2VsbHM+Ijp6bj0hMDticmVhaztjYXNlIjxTaXplV2l0aENlbGxzLz4iOmNhc2UiPFNpemVXaXRoQ2VsbHM+Ijprbj0hMH1y''@;'; put 'put ''ZXR1cm4iIn0pLHBlKXtjYXNlIk5vdGUiOnZhciBlcj1xby5zaGVldF9nZXRfY2VsbChQLG50Pj0wJiZkdD49MD9kaSh7cjpudCxjOmR0fSk6TFtRXS5yZWYpO2VyLmMmJihlci5jLmhpZGRlbj1fZSx2ZSYmKGVyLmMucmF3YW5jaG9yPXZlLFhtKHZlLGVyLmMpLEVDKGVyLmNbIiFwb3MiXSwy''@;'; put 'put ''KiEhem4rISFrbixQKSksSGUuY29sb3IxJiYoZXIuYy5maWxsPUhlKSxCZS5jb2xvciYmKGVyLmMuc2hhZG93PUJlKSxHZS5jb2xvciYmKGVyLmMuc3Ryb2tlPUdlKSksKytRO2JyZWFrO2Nhc2UiQnV0dG9uIjpjYXNlIkdCb3giOmNhc2UiRHJvcCI6Y2FzZSJMYWJlbCI6Y2FzZSJDaGVja2Jv''@;'; put 'put ''eCI6Y2FzZSJTY3JvbGwiOmNhc2UiTGlzdCI6Y2FzZSJSYWRpbyI6Y2FzZSJTcGluIjpjYXNlIkVkaXQiOlBbIiFjb250cm9scyJdfHwoUFsiIWNvbnRyb2xzIl09W10pO3ZhciB0cj17IiF0eXBlIjpwZX07dmUmJlhtKHZlLHRyKSxDdCYmKHRyLm1hY3JvPUN0LnJlcGxhY2UoIlswXSEiLCIi''@;'; put 'put ''KSksY3QmJih0ci5saW5rPWN0KSwiU2Nyb2xsIj09cGV8fCJTcGluIj09cGU/KG51bGw9PUZ0JiYoRnQ9MCksbnVsbD09RXQmJihFdD0wKSxudWxsPT1UdCYmKFR0PTNlNCksbnVsbD09WnQmJihadD0xKSwiU2Nyb2xsIj09cGUmJm51bGw9PXBuJiYocG49MTApKToiUmFkaW8iPT1wZXx8IkNo''@;'; put 'put ''ZWNrYm94Ij09cGU/KG51bGw9PUtuJiYoS249MCksRnQ9S24pOigiTGlzdCI9PXBlfHwiRHJvcCI9PXBlKSYmKG51bGwhPXVuJiYodHIucmVmPXVuKSxudWxsPT1xbiYmKHFuPSJTaW5nbGUiKSwiTGlzdCI9PXBlJiYodHIuc2VsPXFuKSksbnVsbCE9RnQmJih0ci52YWw9RnQpLG51bGwhPUV0''@;'; put 'put ''JiYodHIubWluPUV0KSxudWxsIT1UdCYmKHRyLm1heD1UdCksbnVsbCE9WnQmJih0ci5zdGVwPVp0KSxudWxsIT1wbiYmKHRyLnBhZ2U9cG4pLGJ0JiYodHIudD1idC5yZXBsYWNlKC9ccyo8W1xzXFNdKj8+XHMqL2csIiIpKSxQWyIhY29udHJvbHMiXS5wdXNoKHRyKX19KX0oUGkoSGUpLHks''@;'; put 'put ''dmV8fFtdKSx5WyIhTERQIl09U2UseVsiIWN0cmxpZCJdJiZ5WyIhY3RybGlkIl0uZm9yRWFjaChmdW5jdGlvbihCZSl7aWYoQmUucmVsJiZCZS5yZWwuVGFyZ2V0KXt2YXIgR2U9c24oQmUucmVsLlRhcmdldCxRKTtCZS5wYXRoPUdlLGRlbGV0ZSBCZS5yZWx9fSl9fShkdCwwLHksUCwwLDAs''@;'; put 'put ''MCxDdCksZHR9Y2F0Y2goY3Qpe2lmKFNlLldURil0aHJvdyBjdH19ZnVuY3Rpb24gYWMoeSl7cmV0dXJuIi8iPT15LmNoYXJBdCgwKT95LnNsaWNlKDEpOnl9dmFyIG1SPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBITSh5LFApe2lmKEY2PVtdLFA2KFA9UHx8e30pLG1uKHksIk1FVEEtSU5GL21h''@;'; put 'put ''bmlmZXN0LnhtbCIpfHxtbih5LCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBmdW5jdGlvbiBUTSh5LFApe1A9UHx8e30sbW4oeSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIFZhKHksUCl7Zm9yKHZhciBRLHJlLEw9UXYoeSk7UT1Cci5leGVjKEwpOylzd2l0Y2goUVszXSl7''@;'; put 'put ''Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShyZT1sbihRWzBdLCExKSkucGF0aCYmcmUudHlwZSE9PVR1KXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0''@;'; put 'put ''YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNhc2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKFAmJlAuV1RGKXRocm93IFF9fShJdCh5LCJNRVRBLUlORi9tYW5pZmVz''@;'; put 'put ''dC54bWwiKSxQKTt2YXIgTD1KdCh5LCJjb250ZW50LnhtbCIpO2lmKCFMKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBRPVEwKFBpKEwpLFApO3JldHVybiBtbih5LCJtZXRhLnhtbCIpJiYoUS5Qcm9wcz1PMihJdCh5LCJtZXRh''@;'; put 'put ''LnhtbCIpKSksUX0oeSxQKTtpZihtbih5LCJJbmRleC9Eb2N1bWVudC5pd2EiKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgZmlsZSIpO3ZhciBwZSxfZSxMPWZ1bmN0aW9uIHB0KHkpe2Zvcih2YXIgUD15LkZ1bGxQYXRoc3x8bHQoeS5maWxlcyksTD1bXSxRPTA7UTxQ''@;'; put 'put ''Lmxlbmd0aDsrK1EpIi8iIT1QW1FdLnNsaWNlKC0xKSYmTC5wdXNoKFBbUV0pO3JldHVybiBMLnNvcnQoKX0oeSksUT1mdW5jdGlvbiBjbSh5KXt2YXIgUD17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1l''@;'; put 'put ''bnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hh''@;'; put 'put ''cnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07aWYoIXl8fCF5Lm1hdGNoKXJldHVybiBQO3ZhciBMPXt9O2lmKCh5Lm1hdGNo''@;'; put 'put ''KCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIHJlPWxuKFEpO3N3aXRjaChyZVswXS5yZXBsYWNlKFBuLCI8Iikpe2Nhc2UiPD94bWwiOmJyZWFrO2Nhc2UiPFR5cGVzIjpQLnhtbG5zPXJlWyJ4bWxucyIrKHJlWzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVh''@;'; put 'put ''aztjYXNlIjxEZWZhdWx0IjpMW3JlLkV4dGVuc2lvbi50b0xvd2VyQ2FzZSgpXT1yZS5Db250ZW50VHlwZTticmVhaztjYXNlIjxPdmVycmlkZSI6dm9pZCAwIT09UFtSbFtyZS5Db250ZW50VHlwZV1dJiZQW1JsW3JlLkNvbnRlbnRUeXBlXV0ucHVzaChyZS5QYXJ0TmFtZSl9fSksUC54bWxu''@;'; put 'put ''cyE9PWlzLkNUKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIrUC54bWxucyk7cmV0dXJuIFAuY2FsY2NoYWluPVAuY2FsY2NoYWlucy5sZW5ndGg+MD9QLmNhbGNjaGFpbnNbMF06IiIsUC5zc3Q9UC5zdHJzLmxlbmd0aD4wP1Auc3Ryc1swXToiIixQLnN0eWxlPVAuc3R5''@;'; put 'put ''bGVzLmxlbmd0aD4wP1Auc3R5bGVzWzBdOiIiLFAuY29ubj1QLmNvbm5zLmxlbmd0aD4wP1AuY29ubnNbMF06IiIsUC5kZWZhdWx0cz1MLGRlbGV0ZSBQLmNhbGNjaGFpbnMsUH0oSnQoeSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxyZT0hMTtpZigwPT09US53b3JrYm9va3MubGVuZ3RoJiZJ''@;'; put 'put ''dCh5LF9lPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmUS53b3JrYm9va3MucHVzaChfZSksMD09PVEud29ya2Jvb2tzLmxlbmd0aCl7aWYoIUl0KHksX2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgd29ya2Jvb2siKTtRLndvcmtib29rcy5w''@;'; put 'put ''dXNoKF9lKSxyZT0hMH0iYmluIj09US53b3JrYm9va3NbMF0uc2xpY2UoLTMpJiYocmU9ITApO3ZhciB2ZT17fSxTZT17fTtpZighUC5ib29rU2hlZXRzJiYhUC5ib29rUHJvcHMpe2lmKGY2PVtdLFEuc3N0KXRyeXtmNj1mdW5jdGlvbiBMNih5LFAsTCl7cmV0dXJuIi5iaW4iPT09UC5zbGlj''@;'; put 'put ''ZSgtNCk/ZnVuY3Rpb24gY0QoeSxQKXt2YXIgTD1bXSxRPSExO3JldHVybiBIbyh5LGZ1bmN0aW9uKHBlLF9lLHZlKXtzd2l0Y2godmUpe2Nhc2UgMTU5OkwuQ291bnQ9cGVbMF0sTC5VbmlxdWU9cGVbMV07YnJlYWs7Y2FzZSAxOTpMLnB1c2gocGUpO2JyZWFrO2Nhc2UgMTYwOnJldHVybiEw''@;'; put 'put ''O2Nhc2UgMzU6UT0hMDticmVhaztjYXNlIDM2OlE9ITE7YnJlYWs7ZGVmYXVsdDppZihfZS5pbmRleE9mKCJCZWdpbiIpPjB8fF9lLmluZGV4T2YoIkVuZCIpLCFRfHxQLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrdmUrIiAiK19lKX19KSxMfSh5LEwpOmZ1bmN0''@;'; put 'put ''aW9uIHJDKHksUCl7dmFyIEw9W10sUT0iIjtpZigheSlyZXR1cm4gTDt2YXIgcmU9eS5tYXRjaChlQyk7aWYocmUpe1E9cmVbMl0ucmVwbGFjZSh0QywiIikuc3BsaXQobkMpO2Zvcih2YXIgcGU9MDtwZSE9US5sZW5ndGg7KytwZSl7dmFyIF9lPUQ5KFFbcGVdLnRyaW0oKSxQKTtudWxsIT1f''@;'; put 'put ''ZSYmKExbTC5sZW5ndGhdPV9lKX1yZT1sbihyZVsxXSksTC5Db3VudD1yZS5jb3VudCxMLlVuaXF1ZT1yZS51bmlxdWVDb3VudH1yZXR1cm4gTH0oeSxMKX0oSXQoeSxhYyhRLnNzdCkpLFEuc3N0LFApfWNhdGNoKHJyKXtpZihQLldURil0aHJvdyBycn1QLmNlbGxTdHlsZXMmJlEudGhlbWVz''@;'; put 'put ''Lmxlbmd0aCYmKHZlPWZ1bmN0aW9uIEk2KHksUCxMKXtyZXR1cm4gR20oeSxMKX0oSnQoeSxRLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsUCkpLFEuc3R5bGUmJihTZT1mdW5jdGlvbiAkdih5LFAsTCxRKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlv''@;'; put 'put ''biBCOSh5LFAsTCl7dmFyIFE9e051bWJlckZtdDpbXX07Zm9yKHZhciByZSBpbiB3Ll90YWJsZSlRLk51bWJlckZtdFtyZV09dy5fdGFibGVbcmVdO1EuQ2VsbFhmPVtdLFEuRm9udHM9W10sUS5GaWxscz1bXSxRLkJvcmRlcnM9W107dmFyIHBlPVtdLF9lPSExO3JldHVybiBIbyh5LGZ1bmN0''@;'; put 'put ''aW9uKFNlLEhlLEJlKXtzd2l0Y2goQmUpe2Nhc2UgNDQ6US5OdW1iZXJGbXRbU2VbMF1dPVNlWzFdLHcubG9hZChTZVsxXSxTZVswXSk7YnJlYWs7Y2FzZSA0Mzp6NChTZS5jb2xvcixQKSxRLkZvbnRzLnB1c2goU2UpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ4OmNhc2UgNTA3OmNhc2UgNTcy''@;'; put 'put ''OmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTpTZS5mZ0NvbG9yJiZ6NChTZS5mZ0NvbG9yLFApLFNlLmJnQ29sb3ImJno0KFNlLmJnQ29sb3IsUCksUS5GaWxscy5wdXNoKFNlKTticmVhaztj''@;'; put 'put ''YXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oR2Upe1NlW0dlXSYmU2VbR2VdLmNvbG9yJiZ6NChTZVtHZV0uY29sb3IsUCl9KSxRLkJvcmRlcnMucHVzaChTZSk7YnJlYWs7Y2FzZSA0NzoiQnJ0QmVnaW5DZWxsWEZzIj09cGVb''@;'; put 'put ''cGUubGVuZ3RoLTFdJiZRLkNlbGxYZi5wdXNoKFNlKTticmVhaztjYXNlIDM1Ol9lPSEwO2JyZWFrO2Nhc2UgMzY6X2U9ITE7YnJlYWs7Y2FzZSAzNzpwZS5wdXNoKEhlKSxfZT0hMDticmVhaztjYXNlIDM4OnBlLnBvcCgpLF9lPSExO2JyZWFrO2RlZmF1bHQ6aWYoKEhlfHwiIikuaW5kZXhP''@;'; put 'put ''ZigiQmVnaW4iKT4wKXBlLnB1c2goSGUpO2Vsc2UgaWYoKEhlfHwiIikuaW5kZXhPZigiRW5kIik+MClwZS5wb3AoKTtlbHNlIGlmKCFfZXx8TC5XVEYmJiJCcnRBQ0JlZ2luIiE9cGVbcGUubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitCZSsiICIrSGUp''@;'; put 'put ''fX0pLChRLkZvbnRzfHxbXSlbMF0mJloxKFEuRm9udHNbMF0pLFF9KHksTCxRKTpabSh5LEwsUSl9KEl0KHksYWMoUS5zdHlsZSkpLFEuc3R5bGUsdmUsUCkpfXZhciBIZT1RLmxpbmtzLm1hcChmdW5jdGlvbihycil7dHJ5e3ZhciBTbj1EbyhKdCh5LEJpKGFjKHJyKSkpLHJyKTtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gVUwoeSxQLEwsUSl7cmV0dXJuIi5iaW4iPT09TC5zbGljZSgtNCk/ZnVuY3Rpb24gRzQoeSxQLEwsUSl7aWYoIXkpcmV0dXJuIHk7dmFyIHJlPVF8fHt9LHBlPSExO0hvKHksZnVuY3Rpb24oU2UsSGUsQmUpe3N3aXRjaChCZSl7Y2FzZSAzNTk6Y2FzZSAzNjM6Y2FzZSAzNjQ6''@;'; put 'put ''Y2FzZSAzNjY6Y2FzZSAzNjc6Y2FzZSAzNjg6Y2FzZSAzNjk6Y2FzZSAzNzA6Y2FzZSAzNzE6Y2FzZSA0NzI6Y2FzZSA1Nzc6Y2FzZSA1Nzg6Y2FzZSA1Nzk6Y2FzZSA1ODA6Y2FzZSA1ODE6Y2FzZSA1ODI6Y2FzZSA1ODM6Y2FzZSA1ODQ6Y2FzZSA1ODU6Y2FzZSA1ODY6Y2FzZSA1ODc6YnJl''@;'; put 'put ''YWs7Y2FzZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoSGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChIZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXBlfHxyZS5XVEYpKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQg''@;'; put 'put ''IitCZS50b1N0cmluZygxNikrIiAiK0hlKX19LHJlKX0oeSwwLDAsUSk6ZnVuY3Rpb24gWTkoeSxQLEwsUSl7dmFyIHJlPVF8fHt9LHBlPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX0sdmU9ITEsU2U9e30sSGU9LTEsQmU9LTEsR2U9e3M6e3I6MCxjOjB9LGU6e3I6LTEsYzotMX19LG50PXt9''@;'; put 'put ''LGR0PTA7cmV0dXJuKHl8fCIiKS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEN0LGN0KXt2YXIgYnQ9bG4oQ3QpO3N3aXRjaChqbihidFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGV4dGVybmFsTGluayI6Y2FzZSI8L2V4dGVybmFsTGluaz4iOmNhc2UiPC9leHRlcm5hbEJvb2s+IjpjYXNlIjxzaGVl''@;'; put 'put ''dE5hbWVzIjpjYXNlIjxzaGVldE5hbWVzPiI6Y2FzZSI8L3NoZWV0TmFtZXM+IjpjYXNlIjxzaGVldERhdGFTZXQ+IjpjYXNlIjxzaGVldERhdGFTZXQvPiI6Y2FzZSI8L3NoZWV0RGF0YVNldD4iOmNhc2UiPC9yb3c+IjpicmVhaztjYXNlIjxleHRlcm5hbEJvb2siOmNhc2UiPGV4dGVybmFs''@;'; put 'put ''Qm9vaz4iOnBlLlRhcmdldD1QWyIhaWQiXVtidC5pZF0uVGFyZ2V0LHBlLk1pc3Npbmc9UFsiIWlkIl1bYnQuaWRdLlR5cGU9PUhpLlhNSVNTO2JyZWFrO2Nhc2UiPHNoZWV0TmFtZSI6cGUuU2hlZXROYW1lcy5wdXNoKHhyKFBpKGJ0LnZhbCkpKTticmVhaztjYXNlIjxzaGVldERhdGEiOlNl''@;'; put 'put ''PXt9LHBlLlNoZWV0c1twZS5TaGVldE5hbWVzW2J0LnNoZWV0SWRdXT15cihidC5yZWZyZXNoRXJyb3J8fCIwIik/bnVsbDpTZTticmVhaztjYXNlIjwvc2hlZXREYXRhPiI6R2UuZS5jPj0wJiYoU2VbIiFyZWYiXT1PbyhHZSkpO2JyZWFrO2Nhc2UiPHJvdyI6Y2FzZSI8cm93PiI6YnQucj9I''@;'; put 'put ''ZT1wYXJzZUludChidC5yLDEwKS0xOkhlKyssQmU9LTE7YnJlYWs7Y2FzZSI8Y2VsbCI6Y2FzZSI8Y2VsbD4iOmJ0LnI/QmU9c3MoYnQucikuYzorK0JlLG50LnQ9YnQudHx8Im4iLCJzdHIiPT1udC50JiYobnQudD0icyIpO2JyZWFrO2Nhc2UiPC9jZWxsPiI6R2UuZS5yPEhlJiYoR2UuZS5y''@;'; put 'put ''PUhlKSxHZS5lLmM8QmUmJihHZS5lLmM9QmUpLFNlW2RpKHtyOkhlLGM6QmV9KV09bnQsbnQ9e307YnJlYWs7Y2FzZSI8diI6Y2FzZSI8dj4iOmR0PUN0Lmxlbmd0aCtjdDticmVhaztjYXNlIjwvdj4iOnZhciBGdD14cih5LnNsaWNlKGR0LGN0KSk7bnQudj0ibiI9PW50LnQ/cGFyc2VGbG9h''@;'; put 'put ''dChGdCk6RnQ7YnJlYWs7Y2FzZSI8di8+IjpudC52PSIiO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOnZlPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKCF2ZSYmcmUuV1RGKXRocm93InVucmVjb2duaXplZCAiK2J0WzBdKyIgaW4gZXh0''@;'; put 'put ''ZXJuYWwgbGluayJ9fSkscGV9KHksUCwwLFEpfShJdCh5LGFjKHJyKSksU24scnIsUCl9Y2F0Y2h7fX0pLEJlPWZ1bmN0aW9uIG01KHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBHdih5LFApe3ZhciBMPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3''@;'; put 'put ''OltdLFNoZWV0czpbXSxDYWxjUHI6e30seG1sbnM6IiJ9LFE9W10scmU9ITE7UHx8KFA9e30pLFAuYmlmZj0xMjt2YXIgcGU9W10sX2U9W1tdXTtyZXR1cm4gX2UuU2hlZXROYW1lcz1bXSxfZS5YVEk9W10sbWZbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOld2fSxIbyh5LGZ1bmN0aW9uKFNl''@;'; put 'put ''LEhlLEJlKXtzd2l0Y2goQmUpe2Nhc2UgMTU2Ol9lLlNoZWV0TmFtZXMucHVzaChTZS5uYW1lKSxMLlNoZWV0cy5wdXNoKFNlKTticmVhaztjYXNlIDE1MzpMLldCUHJvcHM9U2U7YnJlYWs7Y2FzZSAzOTpudWxsIT1TZS5TaGVldCYmKFAuU0lEPVNlLlNoZWV0KSxTZS5SZWY9eGwoU2UuUHRn''@;'; put 'put ''LG51bGwsbnVsbCxfZSxQKSxkZWxldGUgUC5TSUQsZGVsZXRlIFNlLlB0ZyxwZS5wdXNoKFNlKTticmVhaztjYXNlIDEwMzY6Y2FzZSAzNjE6Y2FzZSAyMDcxOmNhc2UgMTU4OmNhc2UgMTQzOmNhc2UgNjY0OmNhc2UgMzUzOmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSA1MzQ6Y2FzZSA2Nzc6''@;'; put 'put ''Y2FzZSAxNTc6Y2FzZSA2MTA6Y2FzZSAyMDUwOmNhc2UgMTU1OmNhc2UgNTQ4OmNhc2UgNjc2OmNhc2UgMTI4OmNhc2UgNjY1OmNhc2UgMjEyODpjYXNlIDIxMjU6Y2FzZSA1NDk6Y2FzZSAyMDUzOmNhc2UgNTk2OmNhc2UgMjA3NjpjYXNlIDIwNzU6Y2FzZSAyMDgyOmNhc2UgMzk3OmNhc2Ug''@;'; put 'put ''MTU0OmNhc2UgMTExNzpjYXNlIDU1MzpjYXNlIDIwOTE6Y2FzZSAxNjpicmVhaztjYXNlIDM1NzpjYXNlIDM1ODpjYXNlIDM1NTpjYXNlIDY2NzpfZVswXS5sZW5ndGg/X2UucHVzaChbQmUsU2VdKTpfZVswXT1bQmUsU2VdLF9lW19lLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSAzNjI6''@;'; put 'put ''MD09PV9lLmxlbmd0aCYmKF9lWzBdPVtdLF9lWzBdLlhUST1bXSksX2VbX2UubGVuZ3RoLTFdLlhUST1fZVtfZS5sZW5ndGgtMV0uWFRJLmNvbmNhdChTZSksX2UuWFRJPV9lLlhUSS5jb25jYXQoU2UpO2JyZWFrO2Nhc2UgMzU6Y2FzZSAzNzpRLnB1c2goSGUpLHJlPSEwO2JyZWFrO2Nhc2Ug''@;'; put 'put ''MzY6Y2FzZSAzODpRLnBvcCgpLHJlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoSGV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChIZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXJlfHxQLldURiYmIkJydEFDQmVnaW4iIT1RW1EubGVuZ3RoLTFdJiYiQnJ0RlJUQmVnaW4iIT1RW1Eu''@;'; put 'put ''bGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrQmUrIiAiK0hlKX19LFApLFV2KEwpLEwuTmFtZXM9cGUsTC5zdXBib29rcz1fZSxMfSh5LEwpOmZ1bmN0aW9uIGFZKHksUCl7aWYoIXkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBmaWxlIik7''@;'; put 'put ''dmFyIEw9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSxOYW1lczpbXSxFeHRlcm46W10seG1sbnM6IiJ9LFE9ITEscmU9InhtbG5zIixwZT17fSxfZT0wO2lmKHkucmVwbGFjZSgkdCxmdW5jdGlvbihTZSxIZSl7dmFyIEJlPWxuKFNlKTtz''@;'; put 'put ''d2l0Y2goam4oQmVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvd29ya2Jvb2s+IjpjYXNlIjxmaWxlVmVyc2lvbi8+IjpjYXNlIjwvZmlsZVZlcnNpb24+IjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbi8+IjpjYXNlIjxi''@;'; put 'put ''b29rVmlld3MiOmNhc2UiPGJvb2tWaWV3cz4iOmNhc2UiPC9ib29rVmlld3M+IjpjYXNlIjwvd29ya2Jvb2tWaWV3PiI6Y2FzZSI8c2hlZXRzIjpjYXNlIjxzaGVldHM+IjpjYXNlIjwvc2hlZXRzPiI6Y2FzZSI8L3NoZWV0PiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMiOmNhc2UiPGZ1bmN0aW9u''@;'; put 'put ''R3JvdXBzLz4iOmNhc2UiPGZ1bmN0aW9uR3JvdXAiOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcyI6Y2FzZSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxkZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2Fs''@;'; put 'put ''Y1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8''@;'; put 'put ''cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFydFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0''@;'; put 'put ''VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9i''@;'; put 'put ''amVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJldmlzaW9uUHRyIjpicmVhaztjYXNlIjx3''@;'; put 'put ''b3JrYm9vayI6U2UubWF0Y2goc1kpJiYocmU9InhtbG5zIitTZS5tYXRjaCgvPChcdyspOi8pWzFdKSxMLnhtbG5zPUJlW3JlXTticmVhaztjYXNlIjxmaWxlVmVyc2lvbiI6ZGVsZXRlIEJlWzBdLEwuQXBwVmVyc2lvbj1CZTticmVhaztjYXNlIjxmaWxlU2hhcmluZyI6TC5Nb2RpZnk9e3Vz''@;'; put 'put ''ZXI6QmUudXNlck5hbWUsd2Fybjp5cihCZS5yZWFkT25seVJlY29tbWVuZGVkfHwiZmFsc2UiKX0sKEJlLmFsZ29yaXRobU5hbWV8fEJlLmhhc2hWYWx1ZXx8QmUuc2FsdFZhbHVlfHxCZS5zcGluQ291bnQpJiYoTC5Nb2RpZnkuZW5jcnlwdGlvbj17YWxnbzpCZS5hbGdvcml0aG1OYW1lLGhh''@;'; put 'put ''c2g6QmUuaGFzaFZhbHVlLHNhbHQ6QmUuc2FsdFZhbHVlLHNwaW46K0JlLnNwaW5Db3VudHx8MWU1fSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQciI6Y2FzZSI8d29ya2Jvb2tQci8+IjpLMi5mb3JFYWNoKGZ1bmN0aW9uKG50KXtpZihudWxsIT1CZVtudFswXV0pc3dpdGNoKG50WzJdKXtjYXNl''@;'; put 'put ''ImJvb2wiOkwuV0JQcm9wc1tudFswXV09eXIoQmVbbnRbMF1dKTticmVhaztjYXNlImludCI6TC5XQlByb3BzW250WzBdXT1wYXJzZUludChCZVtudFswXV0sMTApO2JyZWFrO2RlZmF1bHQ6TC5XQlByb3BzW250WzBdXT1CZVtudFswXV19fSksQmUuY29kZU5hbWUmJihMLldCUHJvcHMuQ29k''@;'; put 'put ''ZU5hbWU9UGkoQmUuY29kZU5hbWUpKTticmVhaztjYXNlIjx3b3JrYm9va1Byb3RlY3Rpb24iOnZhciBHZT1MLlByb3RlY3Rpb258fHt9O0dlLmxvY2tTdHJ1Y3R1cmU9eXIoQmUubG9ja1N0cnVjdHVyZXx8ImZhbHNlIiksR2UubG9ja1dpbmRvd3M9eXIoQmUubG9ja1dpbmRvd3N8fCJmYWxz''@;'; put 'put ''ZSIpLEJlLndvcmtib29rQWxnb3JpdGhtTmFtZSYmKEdlLmVuY3J5cHRpb249e2FsZ286QmUud29ya2Jvb2tBbGdvcml0aG1OYW1lLGhhc2g6QmUud29ya2Jvb2tIYXNoVmFsdWUsc2FsdDpCZS53b3JrYm9va1NhbHRWYWx1ZSxzcGluOitCZS53b3JrYm9va1NwaW5Db3VudHx8MWU1fSksTC5Q''@;'; put 'put ''cm90ZWN0aW9uPUdlO2JyZWFrO2Nhc2UiPHdvcmtib29rVmlldyI6Y2FzZSI8d29ya2Jvb2tWaWV3Lz4iOmRlbGV0ZSBCZVswXSxMLldCVmlldy5wdXNoKEJlKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKEJlLnN0YXRlKXtjYXNlImhpZGRlbiI6QmUuSGlkZGVuPTE7YnJlYWs7Y2FzZSJ2''@;'; put 'put ''ZXJ5SGlkZGVuIjpCZS5IaWRkZW49MjticmVhaztkZWZhdWx0OkJlLkhpZGRlbj0wfWRlbGV0ZSBCZS5zdGF0ZSxCZS5uYW1lPXhyKFBpKEJlLm5hbWUpKSxkZWxldGUgQmVbMF0sTC5TaGVldHMucHVzaChCZSk7YnJlYWs7Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOkwuRXh0ZXJuLnB1c2go''@;'; put 'put ''QmUuaWQpO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lcz4iOmNhc2UiPGRlZmluZWROYW1lcyI6Y2FzZSI8ZXh0IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNlIjxBbHRlcm5hdGVDb250ZW50PiI6UT0hMDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWVzPiI6Y2FzZSI8L2V4dD4iOmNhc2Ui''@;'; put 'put ''PC9BbHRlcm5hdGVDb250ZW50PiI6UT0hMTticmVhaztjYXNlIjxkZWZpbmVkTmFtZSI6KHBlPXt9KS5OYW1lPVBpKEJlLm5hbWUpLEJlLmNvbW1lbnQmJihwZS5Db21tZW50PUJlLmNvbW1lbnQpLEJlLmxvY2FsU2hlZXRJZCYmKHBlLlNoZWV0PStCZS5sb2NhbFNoZWV0SWQpLHlyKEJlLmhp''@;'; put 'put ''ZGRlbnx8IjAiKSYmKHBlLkhpZGRlbj0hMCksX2U9SGUrU2UubGVuZ3RoO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZT4iOnBlLlJlZj14cihQaSh5LnNsaWNlKF9lLEhlKSkpLEwuTmFtZXMucHVzaChwZSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIEJlWzBd''@;'; put 'put ''LEwuQ2FsY1ByPUJlO2JyZWFrO2RlZmF1bHQ6aWYoIVEmJlAuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrQmVbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBTZX0pLC0xPT09aXMubWFpbi5pbmRleE9mKEwueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1l''@;'; put 'put ''c3BhY2U6ICIrTC54bWxucyk7cmV0dXJuIFV2KEwpLEx9KHksTCl9KEl0KHksYWMoUS53b3JrYm9va3NbMF0pKSxRLndvcmtib29rc1swXSxQKSxHZT17fSxudD0iIjtRLmNvcmVwcm9wcy5sZW5ndGgmJigobnQ9SXQoeSxhYyhRLmNvcmVwcm9wc1swXSksITApKSYmKEdlPU8yKG50KSksMCE9''@;'; put 'put ''PVEuZXh0cHJvcHMubGVuZ3RoJiYobnQ9SXQoeSxhYyhRLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiBwMyh5LFAsTCl7dmFyIFE9e307UHx8KFA9e30pLHk9UGkoeSksUjEuZm9yRWFjaChmdW5jdGlvbihyZSl7dmFyIHBlPSh5Lm1hdGNoKHVsKHJlWzBdKSl8fFtdKVsxXTtzd2l0Y2go''@;'; put 'put ''cmVbMl0pe2Nhc2Uic3RyaW5nIjpwZSYmKFBbcmVbMV1dPXhyKHBlKSk7YnJlYWs7Y2FzZSJib29sIjpQW3JlWzFdXT0idHJ1ZSI9PT1wZTticmVhaztjYXNlInJhdyI6dmFyIF9lPXkubWF0Y2gobmV3IFJlZ0V4cCgiPCIrcmVbMF0rIltePl0qPihbXFxzXFxTXSo/KTwvIityZVswXSsiPiIp''@;'; put 'put ''KTtfZSYmX2UubGVuZ3RoPjAmJihRW3JlWzFdXT1fZVsxXSl9fSksUS5IZWFkaW5nUGFpcnMmJlEuVGl0bGVzT2ZQYXJ0cyYmdTAoUS5IZWFkaW5nUGFpcnMsUS5UaXRsZXNPZlBhcnRzLFAsTCl9KG50LEdlLFApKTt2YXIgZHQ9e307KCFQLmJvb2tTaGVldHN8fFAuYm9va1Byb3BzKSYmMCE9''@;'; put 'put ''PVEuY3VzdHByb3BzLmxlbmd0aCYmKG50PUp0KHksYWMoUS5jdXN0cHJvcHNbMF0pLCEwKSkmJihkdD1mdW5jdGlvbiBNNCh5LFApe3ZhciBMPXt9LFE9IiIscmU9eS5tYXRjaChBdyk7aWYocmUpZm9yKHZhciBwZT0wO3BlIT1yZS5sZW5ndGg7KytwZSl7dmFyIF9lPXJlW3BlXSx2ZT1sbihf''@;'; put 'put ''ZSk7c3dpdGNoKHZlWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpicmVhaztjYXNlIjxwcm9wZXJ0eSI6UT14cih2ZS5uYW1lKTticmVhaztjYXNlIjwvcHJvcGVydHk+IjpRPW51bGw7YnJlYWs7ZGVmYXVsdDppZigwPT09X2UuaW5kZXhPZigiPHZ0OiIpKXt2YXIgU2U9X2Uu''@;'; put 'put ''c3BsaXQoIj4iKSxIZT1TZVswXS5zbGljZSg0KSxCZT1TZVsxXTtzd2l0Y2goSGUpe2Nhc2UibHBzdHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOkxbUV09eHIoQmUpO2JyZWFrO2Nhc2UiYm9vbCI6TFtRXT15cihCZSk7YnJlYWs7Y2FzZSJpMSI6Y2Fz''@;'; put 'put ''ZSJpMiI6Y2FzZSJpNCI6Y2FzZSJpOCI6Y2FzZSJpbnQiOmNhc2UidWludCI6TFtRXT1wYXJzZUludChCZSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpMW1FdPXBhcnNlRmxvYXQoQmUpO2JyZWFrO2Nhc2UiZmlsZXRpbWUiOmNhc2UiZGF0ZSI6TFtRXT1IdChC''@;'; put 'put ''ZSk7YnJlYWs7ZGVmYXVsdDppZigiLyI9PUhlLnNsaWNlKC0xKSlicmVhaztQLldURiYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLF9lLEhlLFNlKX19ZWxzZSBpZigiPC8iIT09X2Uuc2xpY2UoMCwyKSYmUC5XVEYpdGhyb3cgbmV3IEVycm9yKF9lKX19''@;'; put 'put ''cmV0dXJuIEx9KG50LFApKTt2YXIgQ3Q9e307aWYoKFAuYm9va1NoZWV0c3x8UC5ib29rUHJvcHMpJiYoQmUuU2hlZXRzP3BlPUJlLlNoZWV0cy5tYXAoZnVuY3Rpb24oU24pe3JldHVybiBTbi5uYW1lfSk6R2UuV29ya3NoZWV0cyYmR2UuU2hlZXROYW1lcy5sZW5ndGg+MCYmKHBlPUdlLlNo''@;'; put 'put ''ZWV0TmFtZXMpLFAuYm9va1Byb3BzJiYoQ3QuUHJvcHM9R2UsQ3QuQ3VzdHByb3BzPWR0KSxQLmJvb2tTaGVldHMmJnR5cGVvZiBwZTwidSImJihDdC5TaGVldE5hbWVzPXBlKSxQLmJvb2tTaGVldHM/Q3QuU2hlZXROYW1lczpQLmJvb2tQcm9wcykpcmV0dXJuIEN0O3BlPXt9O3ZhciBjdD17''@;'; put 'put ''fTtQLmJvb2tEZXBzJiZRLmNhbGNjaGFpbiYmKGN0PWZ1bmN0aW9uIHpMKHksUCxMKXtyZXR1cm4iLmJpbiI9PT1QLnNsaWNlKC00KT9mdW5jdGlvbiBEQyh5LFAsTCl7dmFyIFE9W107cmV0dXJuIEhvKHksZnVuY3Rpb24oX2UsdmUsU2Upe2lmKDYzPT09U2UpUS5wdXNoKF9lKTtlbHNlIGlm''@;'; put 'put ''KCEoKHZlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wfHwodmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrU2UrIiAiK3ZlKX0pLFF9KHkpOmZ1bmN0aW9uIGU2KHkpe3ZhciBQPVtdO2lmKCF5KXJldHVybiBQO3ZhciBMPTE7cmV0''@;'; put 'put ''dXJuKHkubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgcmU9bG4oUSk7c3dpdGNoKHJlWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxjYWxjQ2hhaW4iOmNhc2UiPGNhbGNDaGFpbj4iOmNhc2UiPC9jYWxjQ2hhaW4+IjpicmVhaztjYXNlIjxjIjpkZWxldGUgcmVbMF0scmUu''@;'; put 'put ''aT9MPXJlLmk6cmUuaT1MLFAucHVzaChyZSl9fSksUH0oeSl9KEl0KHksYWMoUS5jYWxjY2hhaW4pKSxRLmNhbGNjaGFpbikpO3ZhciBFdCxUdCxidD0wLEZ0PXt9LFp0PUJlLlNoZWV0cztHZS5Xb3Jrc2hlZXRzPVp0Lmxlbmd0aCxHZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIgcG49MDtwbiE9''@;'; put 'put ''WnQubGVuZ3RoOysrcG4pR2UuU2hlZXROYW1lc1twbl09WnRbcG5dLm5hbWU7dmFyIEtuPXJlPyJiaW4iOiJ4bWwiLHVuPVEud29ya2Jvb2tzWzBdLmxhc3RJbmRleE9mKCIvIikscW49KFEud29ya2Jvb2tzWzBdLnNsaWNlKDAsdW4rMSkrIl9yZWxzLyIrUS53b3JrYm9va3NbMF0uc2xpY2Uo''@;'; put 'put ''dW4rMSkrIi5yZWxzIikucmVwbGFjZSgvXlwvLywiIik7bW4oeSxxbil8fChxbj0ieGwvX3JlbHMvd29ya2Jvb2suIitLbisiLnJlbHMiKTt2YXIgem49RG8oSnQoeSxxbiwhMCkscW4pLGtuPXpuLGVyPVtdO3puJiYoQmUmJkJlLkV4dGVybiYmQmUuRXh0ZXJuLmxlbmd0aCYmQmUuRXh0ZXJu''@;'; put 'put ''LmZvckVhY2goZnVuY3Rpb24ocnIsU24pe3ZhciBDaT0oIi94bC8iK3puWyIhaWQiXVtycl0uVGFyZ2V0KS5yZXBsYWNlKC9bXC9dW1wvXS9nLCIvIiksanI9US5saW5rcy5pbmRleE9mKENpKTtqcj4tMSYmKGVyW1NuXT1IZVtqcl0pfSksQmUmJmRlbGV0ZSBCZS5FeHRlcm4pLHpuJiYoem49''@;'; put 'put ''ZnVuY3Rpb24gT00oeSxQKXtpZigheSlyZXR1cm4gMDt0cnl7eT1QLm1hcChmdW5jdGlvbihRKXtyZXR1cm4gUS5pZHx8KFEuaWQ9US5zdHJSZWxJRCksW1EubmFtZSx5WyIhaWQiXVtRLmlkXS5UYXJnZXQsUk0oeVsiIWlkIl1bUS5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0''@;'; put 'put ''dXJuIHkmJjAhPT15Lmxlbmd0aD95Om51bGx9KHpuLEJlLlNoZWV0cykpO3ZhciB0cj1tbih5LCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCxabj1bXSxWcj1bXTtlOmZvcihidD0wO2J0IT1HZS5Xb3Jrc2hlZXRzOysrYnQpe3ZhciBvaT0ic2hlZXQiO2lmKHpuJiZ6bltidF0/KEV0''@;'; put 'put ''PSJ4bC8iK3puW2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxtbih5LEV0KXx8KEV0PXpuW2J0XVsxXSksbW4oeSxFdCl8fChFdD1xbi5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrem5bYnRdWzFdKSxvaT16bltidF1bMl0pOkV0PShFdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGJ0''@;'; put 'put ''KzEtdHIpKyIuIitLbikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxUdD1FdC5yZXBsYWNlKC9eKC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksWm4ucHVzaChFdCksUCYmbnVsbCE9UC5zaGVldHMpc3dpdGNoKHR5cGVvZiBQLnNoZWV0cyl7Y2FzZSJudW1iZXIi''@;'; put 'put ''OmlmKGJ0IT1QLnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihHZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpIT1QLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KFAu''@;'; put 'put ''c2hlZXRzKSl7Zm9yKHZhciBraT0wLExpPTA7TGkhPVAuc2hlZXRzLmxlbmd0aDsrK0xpKSJudW1iZXIiPT10eXBlb2YgUC5zaGVldHNbTGldJiZQLnNoZWV0c1tMaV09PWJ0JiYoa2k9MSksInN0cmluZyI9PXR5cGVvZiBQLnNoZWV0c1tMaV0mJlAuc2hlZXRzW0xpXS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''PT1HZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYoa2k9MSk7aWYoIWtpKWNvbnRpbnVlIGV9fWlmKCFQLnNraXBQYXJzZSl7dmFyIFFyPWdSKHksRXQsVHQsR2UuU2hlZXROYW1lc1tidF0sYnQsRnQscGUsb2ksUCxCZSx2ZSxTZSk7UXImJlFyWyIhTERQIl0mJihWcltidF09UXJb''@;'; put 'put ''IiFMRFAiXSxkZWxldGUgUXJbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGJ0PTA7YnQ8RjYubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxGNltidF0pO2lmKEN0PXtEaXJlY3Rvcnk6USxXb3JrYm9vazpCZSxQcm9wczpHZSxD''@;'; put 'put ''dXN0cHJvcHM6ZHQsRGVwczpjdCxTaGVldHM6cGUsU2hlZXROYW1lczpHZS5TaGVldE5hbWVzLFN0cmluZ3M6ZjYsU3R5bGVzOlNlLFRoZW1lczp2ZSxTU0Y6dy5nZXRfdGFibGUoKX0sIVAuc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBBQyh5KXsheXx8IXkuV29ya2Jvb2t8fCF5Lldvcmtib29r''@;'; put 'put ''Lk5hbWVzfHx5Lldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUCl7aWYoUC5OYW1lJiYiX3hsbm0uIj09UC5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PVAuTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PVAuTmFtZSkpe3ZhciBMPXkuU2hlZXRzW3kuU2hl''@;'; put 'put ''ZXROYW1lc1tQLlNoZWV0XV07aWYoTCl7TFsiIXByaW50Il18fChMWyIhcHJpbnQiXT17fSksTFsiIXByaW50Il0ucHJvcHN8fChMWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIFE9TFsiIXByaW50Il0scmU9UC5SZWY7aWYoIl94bG5tLlByaW50X0FyZWEiPT1QLk5hbWUpe3JlLmluZGV4T2Yo''@;'; put 'put ''IiEiKT4tMSYmKHJlPXJlLnNsaWNlKHJlLmluZGV4T2YoIiEiKSsxKSk7dmFyIHBlPU9pKHJlPXJlLnJlcGxhY2UoL1skXS9nLCIiKSk7US5hcmVhPXBlfWVsc2UiX3hsbm0uUHJpbnRfVGl0bGVzIj09UC5OYW1lJiYoUS50aXRsZXM9e3M6e3I6LTEsYzotMX0sZTp7cjotMSxjOi0xfX0scmUu''@;'; put 'put ''c3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uKF9lKXt2YXIgU2U9V3MoX2Uuc2xpY2UoX2UuaW5kZXhPZigiISIpKzEpLnJlcGxhY2UoL1skXS9nLCIiKSk7U2Uucy5jPi0xJiYoUS50aXRsZXMucy5jPVNlLnMuYyksU2UuZS5jPi0xJiYoUS50aXRsZXMuZS5jPVNlLmUuYyksU2Uucy5yPi0x''@;'; put 'put ''JiYoUS50aXRsZXMucy5yPVNlLnMuciksU2UuZS5yPi0xJiYoUS50aXRsZXMuZS5yPVNlLmUucil9KSl9fX0pfShDdCksUCYmUC5ib29rRmlsZXMmJihDdC5rZXlzPUwsQ3QuZmlsZXM9eS5maWxlcyksUCYmUC5ib29rVkJBJiYoUS52YmEubGVuZ3RoPjA/Q3QudmJhcmF3PUl0KHksYWMoUS52''@;'; put 'put ''YmFbMF0pLCEwKTpRLmRlZmF1bHRzJiZRLmRlZmF1bHRzLmJpbj09PSQyJiYoQ3QudmJhcmF3PUl0KHksInhsL3ZiYVByb2plY3QuYmluIiwhMCkpKSxrbiYma25bIiFpZCJdKXtmb3IodmFyIHVyPVtdLEFuPTE7QW48PTEwMjQ7KytBbilrblsiIWlkIl1bInJJZCIrQW5dJiZrblsiIWlkIl1b''@;'; put 'put ''InJJZCIrQW5dLlR5cGUmJi9jdXN0b21YbWwkLy50ZXN0KGtuWyIhaWQiXVsicklkIitBbl0uVHlwZSkmJnVyLnB1c2goc24oa25bIiFpZCJdWyJySWQiK0FuXS5UYXJnZXQsUS53b3JrYm9va3NbMF0pKTt1ci5sZW5ndGg+MCYmKEN0LkN1c3RvbVhNTD1bXSx1ci5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KHJyKXt2YXIgU249e2RhdGE6SnQoeSxhYyhycikpfSxwcj1CaShycik7dHJ5e3ZhciBDaT1EbyhKdCh5LGFjKHByKSwhMCkscHIpO2lmKENpKWZvcih2YXIganI9MTtqcjw9MTAyNDsrK2pyKUNpWyIhaWQiXVsicklkIitqcl0mJkNpWyIhaWQiXVsicklkIitqcl0uVHlwZSYmL2N1c3RvbVht''@;'; put 'put ''bFByb3BzJC8udGVzdChDaVsiIWlkIl1bInJJZCIranJdLlR5cGUpJiYoU24ucHJvcHM9SnQoeSxhYyhzbihDaVsiIWlkIl1bInJJZCIranJdLlRhcmdldCxycikpKSl9Y2F0Y2h7fUN0LkN1c3RvbVhNTC5wdXNoKFNuKX0pKX12YXIgdnI9RHQoeSwieGwvbW9kZWwvaXRlbS5kYXRhIiwhMCk7''@;'; put 'put ''dnImJihDdC5tb2RlbD12ciksUS5jb25uJiYoQ3QuY29ubj1JdCh5LGFjKFEuY29ubiksITApKSxlci5sZW5ndGgmJihDdC5FeHRlcm5hbFdCPWVyKSxCZSYmKEJlLlBQST1uZil9cmV0dXJuIFAudGVtcGxhdGUmJihDdC5fd3NwYXRocz1abixDdC5fc3R5cGF0aD1hYyhRLnN0eWxlfHwiIiks''@;'; put 'put ''Q3QuX3dicGF0aD1hYyhRLndvcmtib29rc1swXXx8InhsL3dvcmtib29rLnhtbCIpLEN0Ll92bWxwYXRocz1WcixDdC5fd2JyZWxzcGF0aD1xbixDdC5fY3Q9SnQoeSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpLEN0LmZpbGVzPXkuZmlsZXMsbVIoQ3QseSxQKSksQ3R9ZnVuY3Rpb24gdlIoeSxQ''@;'; put 'put ''KXt2YXIgTD1QfHx7fTtMLnBhc3N3b3JkfHwoTC5wYXNzd29yZD0iVmVsdmV0U3dlYXRzaG9wIik7dmFyIFE9Ildvcmtib29rIixyZT1qZS5maW5kKHksUSk7dHJ5e2lmKCEocmU9amUuZmluZCh5LFE9Ii8hRGF0YVNwYWNlcy9WZXJzaW9uIikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTtpZihmdW5jdGlvbiBkRCh5KXt2YXIgUD17fTtQLmlkPXkucmVhZF9zaGlmdCgwLCJscHA0IiksUC5SPUcwKHksNCksUC5VPUcwKHksNCksUC5XPUcwKHksNCl9KHJlLmNvbnRlbnQpLCEocmU9amUuZmluZCh5LFE9Ii8h''@;'; put 'put ''RGF0YVNwYWNlcy9EYXRhU3BhY2VNYXAiKSl8fCFyZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO3ZhciBwZT1mdW5jdGlvbiBQNCh5KXt2YXIgUD1bXTt5LmwrPTQ7Zm9yKHZhciBMPXkucmVhZF9zaGlmdCg0KTtMLS0gPjA7''@;'; put 'put ''KVAucHVzaChzQyh5KSk7cmV0dXJuIFB9KHJlLmNvbnRlbnQpO2lmKDEhPT1wZS5sZW5ndGh8fDEhPT1wZVswXS5jb21wcy5sZW5ndGh8fDAhPT1wZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1wZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1w''@;'; put 'put ''ZVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrUSk7aWYoIShyZT1qZS5maW5kKHksUT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZUluZm8vU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIpKXx8IXJlLmNvbnRlbnQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrUSk7dmFyIF9lPWZ1bmN0aW9uIEUzKHkpe3ZhciBQPVtdO3kubCs9NDtmb3IodmFyIEw9eS5yZWFkX3NoaWZ0KDQpO0wtLSA+MDspUC5wdXNoKHkucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiBQfShyZS5jb250''@;'; put 'put ''ZW50KTtpZigxIT1fZS5sZW5ndGh8fCJTdHJvbmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9X2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitRKTtpZighKHJlPWplLmZpbmQoeSxRPSIvIURhdGFTcGFjZXMvVHJhbnNmb3JtSW5mby9TdHJvbmdFbmNy''@;'; put 'put ''eXB0aW9uVHJhbnNmb3JtLyFQcmltYXJ5IikpfHwhcmUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTshZnVuY3Rpb24gQTMoeSl7dmFyIFA9ZnVuY3Rpb24gazMoeSl7dmFyIFA9e307cmV0dXJuIHkucmVhZF9zaGlmdCg0KSx5''@;'; put 'put ''LmwrPTQsUC5pZD15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAubmFtZT15LnJlYWRfc2hpZnQoMCwibHBwNCIpLFAuUj1HMCh5LDQpLFAuVT1HMCh5LDQpLFAuVz1HMCh5LDQpLFB9KHkpO2lmKFAuZW5hbWU9eS5yZWFkX3NoaWZ0KDAsIjhscHA0IiksUC5ibGtzej15LnJlYWRfc2hpZnQoNCks''@;'; put 'put ''UC5jbW9kZT15LnJlYWRfc2hpZnQoNCksNCE9eS5yZWFkX3NoaWZ0KDQpKXRocm93IG5ldyBFcnJvcigiQmFkICFQcmltYXJ5IHJlY29yZCIpO3JldHVybiBQfShyZS5jb250ZW50KX1jYXRjaHt9aWYoIShyZT1qZS5maW5kKHksUT0iL0VuY3J5cHRpb25JbmZvIikpfHwhcmUuY29udGVudCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitRKTt2YXIgdmU9ZnVuY3Rpb24gVDMoeSl7dmFyIFA9RzAoeSk7c3dpdGNoKFAuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bUC5NaW5vcixnWih5KV07Y2FzZSAzOnJldHVybltQLk1pbm9yLGhEKCldO2Nhc2Ug''@;'; put 'put ''NDpyZXR1cm5bUC5NaW5vcixtWih5KV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIitQLk1pbm9yKX0ocmUuY29udGVudCk7aWYoIShyZT1qZS5maW5kKHksUT0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFyZS5jb250ZW50''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK1EpO2lmKDQ9PXZlWzBdKXJldHVybiBmdW5jdGlvbiBOZSh5LFAsTCxRKXt2YXIgcmU9amUudXRpbHMucHJlcF9ibG9iO2lmKCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2''@;'; put 'put ''L2tleUVuY3J5cHRvci9wYXNzd29yZCIhPXkudXJpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgRUNNQS0zNzYgQWdpbGUgVVJJICIreS51cmkpO3ZhciBwZT15LmVuY3NbMF0sX2U9cGUuaGFzaEFsZ29yaXRobSx2ZT0iYWVzLTI1Ni1jYmMiLFNlPUJ1ZmZlci5mcm9tKHBlLnNhbHRW''@;'; put 'put ''YWx1ZSwiYmFzZTY0IiksSGU9QnVmZmVyLmZyb20oeS5zYWx0VmFsdWUsImJhc2U2NCIpLEJlPStwZS5ibG9ja1NpemUsR2U9K3BlLmtleUJpdHM+PjMsbnQ9ZWwoQnVmZmVyLmNvbmNhdChbU2UsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxMKSldKSxfZSksZHQ9QnVm''@;'; put 'put ''ZmVyLmFsbG9jKDQpO3JlKGR0LDApO2Zvcih2YXIgQ3Q9MDtDdDxwZS5zcGluQ291bnQ7KytDdClkdC5sPTAsZHQud3JpdGVfc2hpZnQoNCxDdCksbnQ9ZWwoQnVmZmVyLmNvbmNhdChbZHQsbnRdKSxfZSk7dmFyIGN0PWZ1bmN0aW9uKHRyLFpuLFZyLG9pKXt2YXIga2k9ZWwoQnVmZmVyLmNv''@;'; put 'put ''bmNhdChbdHIsQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSldKSxvaSksTGk9a2kubGVuZ3RoPj1Wcj9raS5zbGljZSgwLFZyKTpCdWZmZXIuYWxsb2MoVnIpO2lmKGtpLmxlbmd0aDxWcil7Zm9yKHZhciBRcj0wO1FyPGtpLmxlbmd0aDsrK1FyKUxpW1FyXT1r''@;'; put 'put ''aVtRcl07Zm9yKDtRcjxWcjsrK1FyKUxpW1FyXT01NH1yZXR1cm4gTGl9KG50LDAsR2UsX2UpO3N3aXRjaChwZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9cGUuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBo''@;'; put 'put ''ZXIgY2hhaW5pbmcgIitwZS5jaXBoZXJDaGFpbmluZyk7dmU9ImFlcy0iK3BlLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjp2ZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIitwZS5jaXBoZXJBbGdvcml0aG0pfVNl''@;'; put 'put ''PWZ1bmN0aW9uKGVyKXtmb3IodmFyIHRyPUJ1ZmZlci5hbGxvYyhCZSksWm49MDtabjxCZTsrK1puKXRyW1puXT1abjxlci5sZW5ndGg/ZXJbWm5dOjU0O3JldHVybiB0cn0oU2UpO3ZhciBidD1CdWZmZXIuZnJvbShwZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksRnQ9SjEoY3QsU2Us''@;'; put 'put ''dmUpLnVwZGF0ZShidCksRXQ9SjEoZWwoQnVmZmVyLmNvbmNhdChbbnQsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxfZSkuc2xpY2UoMCxHZSksU2UsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShwZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0''@;'; put 'put ''IikpLFR0PWVsKEoxKGVsKEJ1ZmZlci5jb25jYXQoW250LEJ1ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksX2UpLnNsaWNlKDAsR2UpLFNlLHZlKS51cGRhdGUoQnVmZmVyLmZyb20ocGUuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxf''@;'; put 'put ''ZSksWnQ9K3BlLmhhc2hTaXplfHxNYXRoLm1pbihFdC5sZW5ndGgsVHQubGVuZ3RoKTtpZigwIT1FdC5zbGljZSgwLFp0KS5jb21wYXJlKFR0LnNsaWNlKDAsWnQpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO3JlKFAsMCk7dmFyIHBuPVAucmVhZF9zaGlmdCg0KTtQ''@;'; put 'put ''LmwrPTQ7dmFyIEtuPVtdLHVuPUJ1ZmZlci5jb25jYXQoW0hlLEJ1ZmZlci5hbGxvYyg0KV0pO2ZvcihyZSh1biksQ3Q9MDtQLmw8UC5sZW5ndGg7KXVuLmw9U2UubGVuZ3RoLHVuLndyaXRlX3NoaWZ0KDQsQ3QpLEtuLnB1c2goSjEoRnQsZWwoQnVmZmVyLmZyb20odW4pLF9lKS5zbGljZSgw''@;'; put 'put ''LDE2KSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKFAuc2xpY2UoUC5sLFAubCs0MDk2KSkpKSxQLmwrPTQwOTYsKytDdDt2YXIgem49QnVmZmVyLmNvbmNhdChLbikuc2xpY2UoMCxwbiksa249b24oUSk7cmV0dXJuIGtuLnR5cGU9ImJ1ZmZlciIsX2Yoem4sa24pfSh2ZVsxXSxyZS5jb250ZW50''@;'; put 'put ''LEwucGFzc3dvcmR8fCIiLEwpO2lmKDI9PXZlWzBdKXJldHVybiBmdW5jdGlvbiBkXyh5LFAsTCxRKXt2YXIgcmU9amUudXRpbHMucHJlcF9ibG9iO2lmKCJTdGQiIT09eS50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKTt2YXIgcGU9eS52LlNh''@;'; put 'put ''bHQsX2U9eS52LlZlcmlmaWVyLHZlPXkudi5WZXJpZmllckhhc2g7aWYoMzYhPXkuaC5GbGFncyl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IFN0YW5kYXJkIEVuY3J5cHRpb24gYmFkIEZsYWdzIik7dmFyIFNlPTAsSGU9IiI7c3dpdGNoKHkuaC5BbGdJRCl7Y2FzZSAyNjEyNjpTZT0xMjgs''@;'; put 'put ''SGU9ImFlcy0xMjgtZWNiIjticmVhaztjYXNlIDI2MTI3OlNlPTE5NixIZT0iYWVzLTE5Mi1lY2IiO2JyZWFrO2Nhc2UgMjYxMjg6U2U9MjU2LEhlPSJhZXMtMjU2LWVjYiI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIil9''@;'; put 'put ''aWYoMzI3NzIhPXkuaC5BbGdJREhhc2gpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO2lmKHkuaC5LZXlTaXplIT1TZSl0aHJvdyBuZXcgRXJyb3IoIkFsZ0lEL0tleVNpemUgbWlzbWF0Y2giKTtpZigyNCE9eS5oLlByb3ZpZGVyVHlwZSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkVDTUEtMzc2IHVuc3VwcG9ydGVkIFByb3ZpZGVyVHlwZSAiK3kuaC5Qcm92aWRlclR5cGUpO2lmKCJNaWNyb3NvZnQgRW5oYW5jZWQgUlNBIGFuZCBBRVMgQ3J5cHRvZ3JhcGhpYyBQcm92aWRlciIhPT15LmguQ1NQTmFtZS5zbGljZSgwLDUzKSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIlVuc3VwcG9ydGVkIENyeXB0byBQcm92aWRlciAiK3kuaC5DU1BOYW1lKTt2YXIgR2U9IlNIQS0xIixudD1TZT4+MyxkdD1lbChCdWZmZXIuY29uY2F0KFtwZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEwpXSksR2UpLEN0PUJ1ZmZlci5hbGxvYyg0KTtyZShDdCwwKTtmb3IodmFy''@;'; put 'put ''IGN0PTA7Y3Q8NWU0OysrY3QpQ3QubD0wLEN0LndyaXRlX3NoaWZ0KDQsY3QpLGR0PWVsKEJ1ZmZlci5jb25jYXQoW0N0LGR0XSksR2UpO0N0Lmw9MCxDdC53cml0ZV9zaGlmdCg0LDApO3ZhciBLbix1bixxbix6bixrbixGdD0oem49KHFuPWZ1bmN0aW9uKHRyLFpuLFZyKXtmb3IodmFyIG9p''@;'; put 'put ''PUJ1ZmZlci5hbGxvYyg2NCksa2k9MDtraTxvaS5sZW5ndGg7KytraSlvaVtraV09dHI7Zm9yKGtpPTA7a2k8Wm4ubGVuZ3RoOysra2kpb2lba2ldXj1abltraV07cmV0dXJuIGVsKG9pLFZyKX0pKDU0LEtuPWVsKEJ1ZmZlci5jb25jYXQoW2R0LEN0XSksR2UpLHVuPUdlKSxrbj1xbig5MixL''@;'; put 'put ''bix1biksQnVmZmVyLmNvbmNhdChbem4sa25dKS5zbGljZSgwLG50KSk7aWYoSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51cGRhdGUodmUpLnNsaWNlKDAsMjApLmNvbXBhcmUoZWwoSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51cGRhdGUoX2UpLEdlKSkpdGhyb3cgbmV3IEVycm9yKCJJ''@;'; put 'put ''bmNvcnJlY3QgUGFzc3dvcmQiKTtyZShQLDApO3ZhciBFdD1QLnJlYWRfc2hpZnQoNCk7UC5sKz00O3ZhciBUdD1bXTtmb3IoY3Q9MDtQLmw8UC5sZW5ndGg7KVR0LnB1c2goSjEoRnQsQnVmZmVyLmFsbG9jKDApLEhlKS51cGRhdGUoUC5zbGljZShQLmwsUC5sKzQwOTYpKSksUC5sKz00MDk2''@;'; put 'put ''LCsrY3Q7cmV0dXJuIF9mKEJ1ZmZlci5jb25jYXQoVHQpLnNsaWNlKDAsRXQpLFEpfSh2ZVsxXSxyZS5jb250ZW50LEwucGFzc3dvcmR8fCIiLEwpO3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKX12YXIgX1I9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGJSKHks''@;'; put 'put ''UCl7aWYoUC50ZW1wbGF0ZSlyZXR1cm4gX1IoeSxQKTtpZigib2RzIj09UC5ib29rVHlwZSlyZXR1cm4gXzAoeSxQKTtGbShQJiZQLlBQSXx8OTYpLHkmJiF5LlNTRiYmKHkuU1NGPXcuZ2V0X3RhYmxlKCkpLHkmJnkuU1NGJiYoSih3KSx3LmxvYWRfdGFibGUoeS5TU0YpLFAucmV2c3NmPUFl''@;'; put 'put ''KHkuU1NGKSxQLnJldnNzZlt5LlNTRls2NTUzNV1dPTAsUC5zc2Y9eS5TU0YpLHkuU3R5bGVzPXtGb250czpQLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlAuRmlsbHM9W3tw''@;'; put 'put ''YXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlAuQm9yZGVycz1be31dLERYRjpQLkRYRj15LlN0eWxlcyYmeS5TdHlsZXMuRFhGfHxbXSxUYWJsZTpQLlRhYmxlPXkuU3R5bGVzJiZ5LlN0eWxlcy5UYWJsZXx8W119LFAub3ZlcnJpZGVNRFc/cGw9''@;'; put 'put ''UC5vdmVycmlkZU1EVzpaMShQLkZvbnRzWzBdKSxQLnJlbHM9e30sUC53YnJlbHM9e30sUC5TdHJpbmdzPVtdLFAuU3RyaW5ncy5Db3VudD0wLFAuU3RyaW5ncy5VbmlxdWU9MCxLMD9QLnJldlN0cmluZ3M9bmV3IE1hcDooUC5yZXZTdHJpbmdzPXt9LFAucmV2U3RyaW5ncy5mb289W10sZGVs''@;'; put 'put ''ZXRlIFAucmV2U3RyaW5ncy5mb28pO3ZhciBMPSJ4bHNiIj09UC5ib29rVHlwZT8iYmluIjoieG1sIixRPVJaLmluZGV4T2YoUC5ib29rVHlwZSk+LTEscmU9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltdLGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21t''@;'; put 'put ''ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNo''@;'; put 'put ''YXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2hfKFA9UHx8e30pO3ZhciBwZT15bigpLF9lPSIiLHZlPTA7aWYoUC5jZWxs''@;'; put 'put ''WGZzPVtdLFAuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLGd1KFAuY2VsbFhmcyxQLmNlbGxTdHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSkseS5Qcm9wc3x8KHkuUHJvcHM9e30pLFl0KHBlLF9lPSJkb2NQcm9wcy9jb3JlLnhtbCIsZnVuY3Rpb24gJGgoeSxQKXt2YXIg''@;'; put 'put ''TD1QfHx7fSxRPVtCbixQMl0scmU9e307aWYoIXkmJiFMLlByb3BzKXJldHVybiBRLmpvaW4oIiIpO3kmJihudWxsIT15LkNyZWF0ZWREYXRlJiZodSgiZGN0ZXJtczpjcmVhdGVkIiwic3RyaW5nIj09dHlwZW9mIHkuQ3JlYXRlZERhdGU/eS5DcmVhdGVkRGF0ZTpQaCh5LkNyZWF0ZWREYXRl''@;'; put 'put ''LEwuV1RGKSx7InhzaTp0eXBlIjoiZGN0ZXJtczpXM0NEVEYifSxRLHJlKSxudWxsIT15Lk1vZGlmaWVkRGF0ZSYmaHUoImRjdGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2YgeS5Nb2RpZmllZERhdGU/eS5Nb2RpZmllZERhdGU6UGgoeS5Nb2RpZmllZERhdGUsTC5XVEYpLHsieHNp''@;'; put 'put ''OnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LFEscmUpKTtmb3IodmFyIHBlPTA7cGUhPU9sLmxlbmd0aDsrK3BlKXt2YXIgX2U9T2xbcGVdLHZlPUwuUHJvcHMmJm51bGwhPUwuUHJvcHNbX2VbMV1dP0wuUHJvcHNbX2VbMV1dOnk/eVtfZVsxXV06bnVsbDshMD09PXZlP3ZlPSIxIjohMT09PXZl''@;'; put 'put ''P3ZlPSIwIjoibnVtYmVyIj09dHlwZW9mIHZlJiYodmU9U3RyaW5nKHZlKSksbnVsbCE9dmUmJmh1KF9lWzBdLHZlLG51bGwsUSxyZSl9cmV0dXJuIFEubGVuZ3RoPjImJihRW1EubGVuZ3RoXT0iPC9jcDpjb3JlUHJvcGVydGllcz4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5q''@;'; put 'put ''b2luKCIiKX0oeS5Qcm9wcyxQKSkscmUuY29yZXByb3BzLnB1c2goX2UpLHpvKFAucmVscywyLF9lLEhpLkNPUkVfUFJPUFMpLF9lPSJkb2NQcm9wcy9hcHAueG1sIiwheS5Qcm9wc3x8IXkuUHJvcHMuU2hlZXROYW1lcylpZih5Lldvcmtib29rJiZ5Lldvcmtib29rLlNoZWV0cyl7Zm9yKHZh''@;'; put 'put ''ciBTZT1bXSxIZT0wO0hlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytIZSkyIT0oeS5Xb3JrYm9vay5TaGVldHNbSGVdfHx7fSkuSGlkZGVuJiZTZS5wdXNoKHkuU2hlZXROYW1lc1tIZV0pO3kuUHJvcHMuU2hlZXROYW1lcz1TZX1lbHNlIHkuUHJvcHMuU2hlZXROYW1lcz15LlNoZWV0TmFtZXM7''@;'; put 'put ''eS5Qcm9wcy5Xb3Jrc2hlZXRzPXkuUHJvcHMuU2hlZXROYW1lcy5sZW5ndGgsWXQocGUsX2UsZnVuY3Rpb24gcHMoeSl7dmFyIFA9W10sTD1TcjtyZXR1cm4geXx8KHk9e30pLHkuQXBwbGljYXRpb249IlNoZWV0SlMiLFBbUC5sZW5ndGhdPUJuLFBbUC5sZW5ndGhdPWczLFIxLmZvckVhY2go''@;'; put 'put ''ZnVuY3Rpb24oUSl7aWYodm9pZCAwIT09eVtRWzFdXSl7dmFyIHJlO3N3aXRjaChRWzJdKXtjYXNlInN0cmluZyI6cmU9SHIoU3RyaW5nKHlbUVsxXV0pKTticmVhaztjYXNlImJvb2wiOnJlPXlbUVsxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09cmUmJihQW1AubGVuZ3RoXT1MKFFbMF0s''@;'; put 'put ''cmUpKX19KSxQW1AubGVuZ3RoXT1MKCJIZWFkaW5nUGFpcnMiLEwoInZ0OnZlY3RvciIsTCgidnQ6dmFyaWFudCIsIjx2dDpscHN0cj5Xb3Jrc2hlZXRzPC92dDpscHN0cj4iKStMKCJ2dDp2YXJpYW50IixMKCJ2dDppNCIsU3RyaW5nKHkuV29ya3NoZWV0cykpKSx7c2l6ZToyLGJhc2VUeXBl''@;'; put 'put ''OiJ2YXJpYW50In0pKSxQW1AubGVuZ3RoXT1MKCJUaXRsZXNPZlBhcnRzIixMKCJ2dDp2ZWN0b3IiLHkuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIjx2dDpscHN0cj4iK0hyKFEpKyI8L3Z0Omxwc3RyPiJ9KS5qb2luKCIiKSx7c2l6ZTp5LldvcmtzaGVldHMsYmFzZVR5cGU6''@;'; put 'put ''Imxwc3RyIn0pKSxQLmxlbmd0aD4yJiYoUFtQLmxlbmd0aF09IjwvUHJvcGVydGllcz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX0oeS5Qcm9wcykpLHJlLmV4dHByb3BzLnB1c2goX2UpLHpvKFAucmVscywzLF9lLEhpLkVYVF9QUk9QUykseS5DdXN0cHJvcHMh''@;'; put 'put ''PT15LlByb3BzJiZsdCh5LkN1c3Rwcm9wc3x8e30pLmxlbmd0aD4wJiYoWXQocGUsX2U9ImRvY1Byb3BzL2N1c3RvbS54bWwiLGZ1bmN0aW9uIGQwKHkpe3ZhciBQPVtCbix1bV07aWYoIXkpcmV0dXJuIFAuam9pbigiIik7dmFyIEw9MTtyZXR1cm4gbHQoeSkuZm9yRWFjaChmdW5jdGlvbihy''@;'; put 'put ''ZSl7KytMLFBbUC5sZW5ndGhdPVNyKCJwcm9wZXJ0eSIsZnVuY3Rpb24gZWEoeSxQKXtzd2l0Y2godHlwZW9mIHkpe2Nhc2Uic3RyaW5nIjp2YXIgTD1TcigidnQ6bHB3c3RyIixIcih5KSk7cmV0dXJuIFAmJihMPUwucmVwbGFjZSgvJnF1b3Q7L2csIl94MDAyMl8iKSksTDtjYXNlIm51bWJl''@;'; put 'put ''ciI6cmV0dXJuIFNyKCgwfHkpPT15PyJ2dDppNCI6InZ0OnI4IixIcihTdHJpbmcoeSkpKTtjYXNlImJvb2xlYW4iOnJldHVybiBTcigidnQ6Ym9vbCIseT8idHJ1ZSI6ImZhbHNlIil9aWYoeSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIFNyKCJ2dDpmaWxldGltZSIsUGgoeSkpO3Rocm93IG5l''@;'; put 'put ''dyBFcnJvcigiVW5hYmxlIHRvIHNlcmlhbGl6ZSAiK3kpfSh5W3JlXSwhMCkse2ZtdGlkOiJ7RDVDREQ1MDUtMkU5Qy0xMDFCLTkzOTctMDgwMDJCMkNGOUFFfSIscGlkOkwsbmFtZTpIcihyZSl9KX0pLFAubGVuZ3RoPjImJihQW1AubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUFsxXT1QWzFd''@;'; put 'put ''LnJlcGxhY2UoIi8+IiwiPiIpKSxQLmpvaW4oIiIpfSh5LkN1c3Rwcm9wcykpLHJlLmN1c3Rwcm9wcy5wdXNoKF9lKSx6byhQLnJlbHMsNCxfZSxIaS5DVVNUX1BST1BTKSk7dmFyIEJlPVtdLEdlPVtdO2Z1bmN0aW9uIG50KHBuLEtuKXtHZS5wdXNoKFt2ZS0xLEtuLHBuXSl9ZnVuY3Rpb24g''@;'; put 'put ''ZHQocG4pe0JlLnB1c2goW3ZlLTEscG5dKSx6byhDdCwtMSwiLi4vcGl2b3RUYWJsZXMvcGl2b3RUYWJsZSIrQmUubGVuZ3RoKyIuIitMLEhpLlBJVk9UKX1mb3IodmU9MTt2ZTw9eS5TaGVldE5hbWVzLmxlbmd0aDsrK3ZlKXt2YXIgQ3Q9eyIhaWQiOnt9fSxjdD15LlNoZWV0c1t5LlNoZWV0''@;'; put 'put ''TmFtZXNbdmUtMV1dLGJ0PShjdHx8e30pWyIhdHlwZSJdfHwic2hlZXQiO3N3aXRjaChidCl7Y2FzZSJjaGFydCI6aWYodHlwZW9mIHdyaXRlX2RyYXdpbmdfPCJ1Iil7WXQocGUsX2U9InhsL2NoYXJ0c2hlZXRzL3NoZWV0Iit2ZSsiLiIrTCxsTSh2ZS0xLF9lLFAseSxDdCkpLHJlLmNoYXJ0''@;'; put 'put ''cy5wdXNoKF9lKSx6byhQLndicmVscywtMSwiY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitMLEhpLkNTKTticmVha31kZWZhdWx0Oll0KHBlLF9lPSJ4bC93b3Jrc2hlZXRzL3NoZWV0Iit2ZSsiLiIrTCxaTCh2ZS0xLF9lLFAseSxDdCkpLHJlLnNoZWV0cy5wdXNoKF9lKSx6byhQLndicmVs''@;'; put 'put ''cywtMSwid29ya3NoZWV0cy9zaGVldCIrdmUrIi4iK0wsSGkuV1NbMF0pfWlmKGN0KXsiY2hhcnQiPT1idCYmIWN0WyIhcG9zIl0mJihjdFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIEZ0PWN0WyIhY29tbWVudHMiXSxFdD0hMTtpZihGdCYmRnQubGVuZ3RoPjApe3ZhciBU''@;'; put 'put ''dD0ieGwvY29tbWVudHMiK3ZlKyIuIitMO1l0KHBlLFR0LFFlKEZ0LFR0LFApKSxyZS5jb21tZW50cy5wdXNoKFR0KSx6byhDdCwtMSwiLi4vY29tbWVudHMiK3ZlKyIuIitMLEhpLkNNTlQpLEV0PSEwfShjdFsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCYmKEV0PSEwKSxjdFsiIWxlZ2Fj''@;'; put 'put ''eSJdJiZFdCYmWXQocGUsInhsL2RyYXdpbmdzL3ZtbERyYXdpbmciK3ZlKyIudm1sIixxRCh2ZSxjdFsiIWNvbW1lbnRzIl0sY3RbIiFjb250cm9scyJdLGN0KSksY3RbIiFsZWdhY3lIRiJdJiZuNihwZSwwLHZlLGN0WyIhcHJpbnQiXS5pbWFnZXMpO3ZhciBadD0oImNoYXJ0Ij09Y3RbIiF0''@;'; put 'put ''eXBlIl0/W2N0XTpjdFsiIWNoYXJ0cyJdfHxbXSkuY29uY2F0KChjdFsiIWltYWdlcyJdfHxbXSkubWFwKGZ1bmN0aW9uKHBuKXtyZXR1cm4gcG5bIiF0eXBlIl18fChwblsiIXR5cGUiXT0iaW1hZ2UiKSxwbn0pKS5jb25jYXQoKGN0WyIhc2hhcGVzIl18fFtdKS5tYXAoZnVuY3Rpb24ocG4p''@;'; put 'put ''e3JldHVybiBwblsiIXR5cGUiXXx8KHBuWyIhdHlwZSJdPSJzaGFwZSIpLHBufSkpO1p0JiZadC5sZW5ndGgmJih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiP3dyaXRlX2RyYXdpbmdfKHBlLHJlLHZlLGN0LFp0KTooWXQocGUsInhsL2RyYXdpbmdzL2RyYXdpbmciK3ZlKyIueG1sIixSQygp''@;'; put 'put ''KSxyZS5kcmF3aW5ncy5wdXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIit2ZSsiLnhtbCIpKSksZGVsZXRlIGN0WyIhY29tbWVudHMiXSxkZWxldGUgY3RbIiFsZWdhY3kiXSxkZWxldGUgY3RbIiFsZWdhY3lIRiJdfWN0JiZjdFsiIXBpdm90cyJdJiYieG1sIj09TCYmdHlwZW9mIHdyaXRlX3Bp''@;'; put 'put ''dm90X3htbDwidSImJmN0WyIhcGl2b3RzIl0uZm9yRWFjaChkdCksQ3RbIiFpZCJdLnJJZDEmJll0KHBlLEJpKF9lKSxYYShDdCkpLGN0JiZjdFsiIXRhYmxlcyJdJiYieG1sIj09TCYmY3RbIiF0YWJsZXMiXS5mb3JFYWNoKG50KX1yZXR1cm4gbnVsbCE9UC5TdHJpbmdzJiZQLlN0cmluZ3Mu''@;'; put 'put ''bGVuZ3RoPjAmJihZdChwZSxfZT0ieGwvc2hhcmVkU3RyaW5ncy4iK0wsV0woUC5TdHJpbmdzLF9lLFApKSxyZS5zdHJzLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJzaGFyZWRTdHJpbmdzLiIrTCxIaS5TU1QpKSwieG1sIj09TCYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJndyaXRl''@;'; put 'put ''X3Bpdm90X3htbChCZSx5LHBlLHJlLFApLCJ4bWwiPT1MJiZmdW5jdGlvbiBxNCh5LFAsTCxRKXt5LmZvckVhY2goZnVuY3Rpb24ocmUscGUpe3ZhciBfZT1QLlNoZWV0c1tQLlNoZWV0TmFtZXNbcmVbMF1dXSx2ZT0ieGwvdGFibGVzL3RhYmxlIisocmVbMF0rMSkrIl8iK3JlWzFdKyIueG1s''@;'; put 'put ''IjtRLnRhYmxlcy5wdXNoKHZlKTt2YXIgU2U9cmVbMl0ucmVmfHxfZVsiIXJlZiJdOyJzdHJpbmciIT10eXBlb2YgU2UmJihTZT1PbyhTZSkpO3ZhciBIZT1PaShTZSksQmU9cmVbMl0ubmFtZXx8InNqc3RibF8iK3JlWzBdKyJfIityZVsxXSxHZT1bQm5dLG50PSFobihyZVsyXS5oZWFkZXIp''@;'; put 'put ''LGR0PW50JiYhaG4ocmVbMl0uZmlsdGVyKTtHZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKHBlKzEpKyciIG5hbWU9IicrSHIoQmUpKyciIGRpc3BsYXlOYW1lPSInK0hyKEJlKSsn''@;'; put 'put ''IiByZWY9IicrU2UrJyIgJysobnVsbCE9cmVbMl0uaGVhZGVyJiYxIT1yZVsyXS5oZWFkZXI/J2hlYWRlclJvd0NvdW50PSInKyhyZVsyXS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksZHQmJkdlLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJytTZSsnIi8+JyksR2UucHVzaCgnPHRhYmxlQ29s''@;'; put 'put ''dW1ucyBjb3VudD0iJysoSGUuZS5jLUhlLnMuYysxKSsnIj4nKTtmb3IodmFyIEN0PVtdLGN0PUhlLnMuYztjdDw9SGUuZS5jOysrY3QpaWYobnQpe2Zvcih2YXIgYnQ9ZGkoe3I6SGUucy5yLGM6Y3R9KSxGdD1fZVtidF0sRXQ9cmVbMl0uY29scyYmcmVbMl0uY29sc1tjdC1IZS5zLmNdJiZy''@;'; put 'put ''ZVsyXS5jb2xzW2N0LUhlLnMuY10ubmFtZXx8RnQmJihGdC53fHxGdC52KXx8IkNvbHVtbiAiKyhjdC1IZS5zLmMrMSksVHQ9RXQsWnQ9MTtDdC5pbmRleE9mKFR0KT4tMSYmKytadDwxNjM4NDspVHQ9RXQrWnQ7aWYoVHQhPUV0KXRocm93InRhYmxlIGNvbHVtbnMgIitjdCsiIGFuZCAiKyhD''@;'; put 'put ''dC5pbmRleE9mKEV0KStIZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIrRXQrIic7IHRyeSBzZXR0aW5nIGNlbGwgIitidCsiIHRvICciK1R0KyInIjtDdC5wdXNoKFR0KSxHZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKHJlWzJdLmNvbHMmJnJlWzJdLmNvbHNbY3QtSGUucy5j''@;'; put 'put ''XSYmbnVsbCE9cmVbMl0uY29sc1tjdC1IZS5zLmNdLmlkP3JlWzJdLmNvbHNbY3QtSGUucy5jXS5pZDpjdC1IZS5zLmMrMSkrJyIgbmFtZT0iJytIcihUdCkrJyIvPicpfWVsc2UgR2UucHVzaChyZVsyXS5jb2xzJiZyZVsyXS5jb2xzW2N0LUhlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJyty''@;'; put 'put ''ZVsyXS5jb2xzW2N0LUhlLnMuY10uaWQrJyIgbmFtZT0iJytyZVsyXS5jb2xzW2N0LUhlLnMuY10ubmFtZSsnIi8+JzonPHRhYmxlQ29sdW1uIGlkPSInKyhjdC1IZS5zLmMrMSkrJyIgdW5pcXVlTmFtZT0iJysoY3QtSGUucy5jKzEpKyciIG5hbWU9IicrKGN0LUhlLnMuYysxKSsnIi8+Jyk7''@;'; put 'put ''R2UucHVzaCgiPC90YWJsZUNvbHVtbnM+Iik7dmFyIEtuPSsoITEhPT0ocmVbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLHVuPSshIShyZVsyXS5zdHlsZXx8e30pLmNvbHN0cmlwZSxxbj0rISEocmVbMl0uc3R5bGV8fHt9KS5jb2xmaXJzdCx6bj0rISEocmVbMl0uc3R5bGV8fHt9KS5jb2xs''@;'; put 'put ''YXN0LGtuPShyZVsyXS5zdHlsZXx8e30pLm5hbWV8fCJNZWRpdW05Ijtrbj1rbi5tYXRjaCgvXihMaWdodHxNZWRpdW18RGFyaylcZCskLyk/IlRhYmxlU3R5bGUiK2tuOmtuLEdlLnB1c2goJzx0YWJsZVN0eWxlSW5mbyBuYW1lPSInK2tuKyciIHNob3dGaXJzdENvbHVtbj0iJytxbisnIiBz''@;'; put 'put ''aG93TGFzdENvbHVtbj0iJyt6bisnIiBzaG93Um93U3RyaXBlcz0iJytLbisnIiBzaG93Q29sdW1uU3RyaXBlcz0iJyt1bisnIi8+JyksR2UucHVzaCgiPC90YWJsZT4iKSxZdChMLHZlLEdlLmpvaW4oIiIpKX0pfShHZSx5LHBlLHJlKSwieG1sIj09TCYmKHkuRXh0ZXJuYWxXQnx8W10pLmxl''@;'; put 'put ''bmd0aCYmZnVuY3Rpb24gVzkoeSxQLEwpe0wubGlua3N8fChMLmxpbmtzPVtdKSx5LkV4dGVybmFsV0ImJnkuRXh0ZXJuYWxXQi5mb3JFYWNoKGZ1bmN0aW9uKFEscmUpe3ZhciBwZT0iL3hsL2V4dGVybmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisocmUrMSkrIi54bWwucmVscyIsX2U9''@;'; put 'put ''e307em8oX2UsLTEsUS5UYXJnZXQsUS5NaXNzaW5nP0hpLlhNSVNTOkhpLlhQQVRIKSxZdChQLGFjKHBlKSxYYShfZSkpO3ZhciB2ZT0iL3hsL2V4dGVybmFsTGlua3MvZXh0ZXJuYWxMaW5rIisocmUrMSkrIi54bWwiO0wubGlua3MucHVzaCh2ZSksWXQoUCxhYyh2ZSksZnVuY3Rpb24gSUMo''@;'; put 'put ''eSl7dmFyIFA9W0JuLHQ2XTtyZXR1cm4oeS5TaGVldE5hbWVzfHxbXSkubGVuZ3RoJiYoUC5wdXNoKCc8ZXh0ZXJuYWxCb29rIHhtbG5zOnI9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiIHI6aWQ9InJJZDEiPicp''@;'; put 'put ''LFAucHVzaCgiPHNoZWV0TmFtZXM+IikseS5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oTCl7UC5wdXNoKCc8c2hlZXROYW1lIHZhbD0iJytIcihMKSsnIi8+Jyl9KSxQLnB1c2goIjwvc2hlZXROYW1lcz4iKSxQLnB1c2goIjxzaGVldERhdGFTZXQ+IikseS5TaGVldE5hbWVzLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oTCxRKXt2YXIgcmU9eS5TaGVldHNbTF0scGU9e3NoZWV0SWQ6UX0sX2U9bnVsbDtpZihudWxsPT1yZSlwZS5yZWZyZXNoRXJyb3I9MTtlbHNlIGlmKHJlWyIhcmVmIl0pe3ZhciB2ZT1XcyhyZVsiIXJlZiJdKTtfZT0iIjtmb3IodmFyIFNlPXZlLnMucjtTZTw9dmUuZS5y''@;'; put 'put ''OysrU2Upe2Zvcih2YXIgSGU9IiIsQmU9dmUucy5jO0JlPD12ZS5lLmM7KytCZSl7dmFyIEdlPWRpKHtyOlNlLGM6QmV9KTtyZVtHZV0mJihIZXx8KEhlPSc8cm93IHI9IicrKFNlKzEpKyciPicpLEhlKz0nPGNlbGwgcj0iJytHZSsnIicrKHJlW0dlXS50PycgdD0iJytyZVtHZV0udCsnIic6''@;'; put 'put ''IiIpKyI+PHY+IitIcihyZVtHZV0udikrIjwvdj48L2NlbGw+Iil9SGUmJihfZSs9SGUrIjwvcm93PiIpfX1QLnB1c2goU3IoInNoZWV0RGF0YSIsX2UscGUpKX0pLFAucHVzaCgiPC9zaGVldERhdGFTZXQ+IiksUC5wdXNoKCI8L2V4dGVybmFsQm9vaz4iKSksUC5sZW5ndGg+MiYmKFBbUC5s''@;'; put 'put ''ZW5ndGhdPSI8L2V4dGVybmFsTGluaz4iLFBbMV09UFsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUC5qb2luKCIiKX0oUSkpfSl9KHkscGUscmUpLCJ4bWwiPT1MJiZmdW5jdGlvbiBUQyh5KXt2YXIgUCxMO3kuV29ya2Jvb2t8fCh5Lldvcmtib29rPXtOYW1lczpbXX0pLHkuV29ya2Jvb2suTmFt''@;'; put 'put ''ZXN8fCh5Lldvcmtib29rLk5hbWVzPVtdKTtmb3IodmFyIFE9eS5Xb3JrYm9vay5OYW1lcyxyZT0wO3JlPHkuU2hlZXROYW1lcy5sZW5ndGg7KytyZSl7dmFyIHBlPXkuU2hlZXROYW1lc1tyZV0sX2U9eS5TaGVldHNbcGVdO2lmKF9lJiZfZVsiIXByaW50Il0pe3ZhciB2ZT0iJyIrcGUrIich''@;'; put 'put ''IixTZT1fZVsiIXByaW50Il07aWYoU2Upe3ZhciBIZT0hKFA9U2UuYXJlYSksQmU9IShMPVNlLnRpdGxlcyksR2U9UD8ic3RyaW5nIj09dHlwZW9mIFA/UDpPbyhQKToiIjtpZihQJiYoUS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtkdC5TaGVldD09cmUmJiFIZSYmIl94bG5tLlByaW50X0FyZWEi''@;'; put 'put ''PT1kdC5OYW1lJiYoSGU9ITAsZHQuUmVmPXZlK0dlKX0pLEhlfHxRLnB1c2goe05hbWU6Il94bG5tLlByaW50X0FyZWEiLFJlZjp2ZStHZSxTaGVldDpyZX0pKSxMKXt2YXIgbnQ9IiI7TC5zLmM+LTEmJkwuZS5jPi0xJiYobnQrPXZlK05zKEwucy5jKSsiOiIrTnMoTC5lLmMpKyIsIiksTC5z''@;'; put 'put ''LnI+LTEmJkwuZS5yPi0xJiYobnQrPXZlK0hzKEwucy5yKSsiOiIrSHMoTC5lLnIpKyIsIiksbnQ9bnQuc2xpY2UoMCwtMSksUS5mb3JFYWNoKGZ1bmN0aW9uKGR0KXtkdC5TaGVldD09cmUmJiFCZSYmIl94bG5tLlByaW50X1RpdGxlcyI9PWR0Lk5hbWUmJihIZT0hMCxkdC5SZWY9bnQpfSks''@;'; put 'put ''QmV8fFEucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6bnQsU2hlZXQ6cmV9KX19fX19KHkpLFl0KHBlLF9lPSJ4bC93b3JrYm9vay4iK0wsZnVuY3Rpb24gcXYoeSxQLEwpe3JldHVybigiLmJpbiI9PT1QLnNsaWNlKC00KT9ITDpSTCkoeSxMKX0oeSxfZSxQKSkscmUud29y''@;'; put 'put ''a2Jvb2tzLnB1c2goX2UpLHpvKFAucmVscywxLF9lLEhpLldCKSxZdChwZSxfZT0ieGwvdGhlbWUvdGhlbWUxLnhtbCIscmYoeS5UaGVtZXMsUCkpLHJlLnRoZW1lcy5wdXNoKF9lKSx6byhQLndicmVscywtMSwidGhlbWUvdGhlbWUxLnhtbCIsSGkuVEhFTUUpLFl0KHBlLF9lPSJ4bC9zdHls''@;'; put 'put ''ZXMuIitMLGZ1bmN0aW9uIFlMKHksUCxMKXtyZXR1cm4oIi5iaW4iPT09UC5zbGljZSgtNCk/UEQ6cEMpKHksTCl9KHksX2UsUCkpLHJlLnN0eWxlcy5wdXNoKF9lKSx6byhQLndicmVscywtMSwic3R5bGVzLiIrTCxIaS5TVFkpLHkudmJhcmF3JiZRJiYoWXQocGUsX2U9InhsL3ZiYVByb2pl''@;'; put 'put ''Y3QuYmluIix5LnZiYXJhdykscmUudmJhLnB1c2goX2UpLHpvKFAud2JyZWxzLC0xLCJ2YmFQcm9qZWN0LmJpbiIsSGkuVkJBKSkseS5tb2RlbCYmeS5tb2RlbC5sZW5ndGgmJihZdChwZSwieGwvbW9kZWwvaXRlbS5kYXRhIix5Lm1vZGVsKSx6byhQLndicmVscywtMSwibW9kZWwvaXRlbS5k''@;'; put 'put ''YXRhIixIaS5QV1JQRCkpLHkuY29ubiYmKFl0KHBlLCJ4bC9jb25uZWN0aW9ucy54bWwiLHkuY29ubikscmUuY29ubnMucHVzaCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLHpvKFAud2JyZWxzLC0xLCJjb25uZWN0aW9ucy54bWwiLEhpLkNPTk4pKSx5LkN1c3RvbVhNTCYmeS5DdXN0b21YTUwu''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbihwbixLbil7aWYoWXQocGUsImN1c3RvbVhtbC9pdGVtIisoS24rMSkrIi54bWwiLHBuLmRhdGEpLHpvKFAud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwvaXRlbSIrKEtuKzEpKyIueG1sIixIaS5DWE1MKSxwbi5wcm9wcyl7WXQocGUsImN1c3RvbVhtbC9pdGVtUHJv''@;'; put 'put ''cHMiKyhLbisxKSsiLnhtbCIscG4ucHJvcHMpLHJlLmN1c3RvbXhtbHByb3BzLnB1c2goIi9jdXN0b21YbWwvaXRlbVByb3BzIisoS24rMSkrIi54bWwiKTt2YXIgdW49e307em8odW4sLTEsIml0ZW1Qcm9wcyIrKEtuKzEpKyIueG1sIixIaS5DWE1MUCksWXQocGUsImN1c3RvbVhtbC9fcmVs''@;'; put 'put ''cy9pdGVtIisoS24rMSkrIi54bWwucmVscyIsWGEodW4pKX19KSxZdChwZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIsZnVuY3Rpb24gcjkoeSxQLEwpe3ZhciByZSxRPVtdO0x8fChRW1EubGVuZ3RoXT1CbixRW1EubGVuZ3RoXT1mMyxRPVEuY29uY2F0KG45KSk7dmFyIHBlPWZ1bmN0aW9uKFNl''@;'; put 'put ''KXt5W1NlXSYmeVtTZV0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1TcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PShyZT15W1NlXVswXSlbMF0/IiI6Ii8iKStyZSxDb250ZW50VHlwZTpJZFtTZV1bUC5ib29rVHlwZXx8Inhsc3giXX0pKX0sX2U9ZnVuY3Rpb24oU2Upeyh5W1Nl''@;'; put 'put ''XXx8W10pLmZvckVhY2goZnVuY3Rpb24oSGUpe1FbUS5sZW5ndGhdPVNyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09SGVbMF0/IiI6Ii8iKStIZSxDb250ZW50VHlwZTpJZFtTZV1bUC5ib29rVHlwZXx8Inhsc3giXX0pfSl9LHZlPWZ1bmN0aW9uKFNlKXsoeVtTZV18fFtdKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKEhlKXtRW1EubGVuZ3RoXT1TcigiT3ZlcnJpZGUiLG51bGwse1BhcnROYW1lOigiLyI9PUhlWzBdPyIiOiIvIikrSGUsQ29udGVudFR5cGU6SGNbU2VdWzBdfSl9KX07cmV0dXJuIHBlKCJ3b3JrYm9va3MiKSxfZSgic2hlZXRzIiksX2UoImNoYXJ0cyIpLHZlKCJ0''@;'; put 'put ''aGVtZXMiKSxbInN0cnMiLCJzdHlsZXMiLCJjb25ucyJdLmZvckVhY2gocGUpLFsiY29yZXByb3BzIiwiZXh0cHJvcHMiLCJjdXN0cHJvcHMiXS5mb3JFYWNoKHZlKSx2ZSgidmJhIiksdmUoImNvbW1lbnRzIiksdmUoImRyYXdpbmdzIiksX2UoInRhYmxlcyIpLF9lKCJwaXZvdHMiKSxfZSgi''@;'; put 'put ''cGl2b3RjYWNoZXMiKSxfZSgicGl2b3RyZWNvcmRzIiksdmUoImRhdGFtb2RlbHMiKSx2ZSgiY3RybHByb3BzIiksdmUoImNoYXJ0b2JqcyIpLHZlKCJjaGFydHN0eWxlcyIpLHZlKCJjaGFydGNvbG9ycyIpLHZlKCJjaGFydGV4cyIpLF9lKCJsaW5rcyIpLHZlKCJjdXN0b214bWxwcm9wcyIp''@;'; put 'put ''LCFMJiZRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09IjwvVHlwZXM+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9KHJlLFApKSxZdChwZSwiX3JlbHMvLnJlbHMiLFhhKFAucmVscykpLFl0KHBlLCJ4bC9fcmVscy93b3JrYm9vay4iK0wrIi5yZWxzIixYYShQLndi''@;'; put 'put ''cmVscykpLGRlbGV0ZSBQLkZvbnRzLGRlbGV0ZSBQLkZpbGxzLGRlbGV0ZSBQLkJvcmRlcnMsZGVsZXRlIFAucmV2c3NmLGRlbGV0ZSBQLnNzZixwZX1mdW5jdGlvbiBmXyh5LFApe3ZhciBMPSIiO3N3aXRjaCgoUHx8e30pLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJh''@;'; put 'put ''eSI6cmV0dXJuW3lbMF0seVsxXSx5WzJdLHlbM10seVs0XSx5WzVdLHlbNl0seVs3XV07Y2FzZSJiYXNlNjQiOkw9c2UuZGVjb2RlKHkuc2xpY2UoMCwxMikpO2JyZWFrO2Nhc2UiYmluYXJ5IjpMPXk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIr''@;'; put 'put ''KFAmJlAudHlwZXx8InVuZGVmaW5lZCIpKX1yZXR1cm5bTC5jaGFyQ29kZUF0KDApLEwuY2hhckNvZGVBdCgxKSxMLmNoYXJDb2RlQXQoMiksTC5jaGFyQ29kZUF0KDMpLEwuY2hhckNvZGVBdCg0KSxMLmNoYXJDb2RlQXQoNSksTC5jaGFyQ29kZUF0KDYpLEwuY2hhckNvZGVBdCg3KV19ZnVu''@;'; put 'put ''Y3Rpb24gTk0oeSxQKXt2YXIgTD0wO2U6Zm9yKDtMPHkubGVuZ3RoOylzd2l0Y2goeS5jaGFyQ29kZUF0KEwpKXtjYXNlIDEwOmNhc2UgMTM6Y2FzZSAzMjorK0w7YnJlYWs7Y2FzZSA2MDpyZXR1cm4gamEoeS5zbGljZShMKSxQKTtkZWZhdWx0OmJyZWFrIGV9cmV0dXJuIEIxLnRvX3dvcmti''@;'; put 'put ''b29rKHksUCl9ZnVuY3Rpb24gcF8oeSxQLEwsUSl7cmV0dXJuIFE/KEwudHlwZT0ic3RyaW5nIixCMS50b193b3JrYm9vayh5LEwpKTpCMS50b193b3JrYm9vayhQLEwpfWZ1bmN0aW9uIF9mKHksUCl7dmFyIEw9dy5nZXRsb2NhbGUoKTtKKHcpLHcuc2V0bG9jYWxlKEwpLFYoKTt2YXIgUT1Q''@;'; put 'put ''fHx7fTtpZih0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIF9mKG5ldyBVaW50OEFycmF5KHkpLCgoUT1vbihRKSkudHlwZT0iYXJyYXkiLFEpKTt2YXIgcGUscmU9eSxfZT0hMTtpZihGbShuZj1RLlBQSXx8TDkpLFEuY2VsbFN0eWxlcyYm''@;'; put 'put ''KFEuY2VsbE5GPSEwLFEuc2hlZXRTdHVicz0hMCksWjM9e30sUS5kYXRlTkYmJihaMy5kYXRlTkY9US5kYXRlTkYpLFEudHlwZXx8KFEudHlwZT1oZSYmQnVmZmVyLmlzQnVmZmVyKHkpPyJidWZmZXIiOiJiYXNlNjQiKSwiZmlsZSI9PVEudHlwZSYmKFEudHlwZT1oZT8iYnVmZmVyIjoiYmlu''@;'; put 'put ''YXJ5IixyZT1mdW5jdGlvbiBKZSh5KXtpZih0eXBlb2YgV2U8InUiKXJldHVybiBXZS5yZWFkRmlsZVN5bmMoeSk7aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgUD1GaWxlKHkpO1Aub3BlbigiciIpLFAuZW5jb2Rpbmc9ImJpbmFy''@;'; put 'put ''eSI7dmFyIEw9UC5yZWFkKCk7cmV0dXJuIFAuY2xvc2UoKSxMfWNhdGNoKFEpe2lmKCFRLm1lc3NhZ2V8fCFRLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgUX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nlc3MgZmlsZSAiK3kpfSh5KSksInN0cmluZyI9PVEudHlwZSYmKF9l''@;'; put 'put ''PSEwLFEudHlwZT0iYmluYXJ5IixRLmNvZGVwYWdlPTY1MDAxLHJlPWZ1bmN0aW9uIE1SKHkpe3JldHVybiB5Lm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT9Mbyh5KTp5fSh5KSksImFycmF5Ij09US50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJnkgaW5zdGFuY2VvZiBVaW50OEFycmF5JiZ0''@;'; put 'put ''eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgdmU9bmV3IEFycmF5QnVmZmVyKDMpLFNlPW5ldyBVaW50OEFycmF5KHZlKTtpZihTZS5mb289ImJhciIsIVNlLmZvbylyZXR1cm4oUT1vbihRKSkudHlwZT0iYXJyYXkiLF9mKEMocmUpLFEpfXN3aXRjaCgocGU9Zl8ocmUsUSkpWzBdKXtjYXNl''@;'; put 'put ''IDIwODppZigyMDc9PT1wZVsxXSYmMTc9PT1wZVsyXSYmMjI0PT09cGVbM10mJjE2MT09PXBlWzRdJiYxNzc9PT1wZVs1XSYmMjY9PT1wZVs2XSYmMjI1PT09cGVbN10pcmV0dXJuIGZ1bmN0aW9uIHlSKHksUCl7cmV0dXJuIGplLmZpbmQoeSwiRW5jcnlwdGVkUGFja2FnZSIpP3ZSKHksUCk6''@;'; put 'put ''XzUoeSxQKX0oamUucmVhZChyZSxRKSxRKTticmVhaztjYXNlIDk6aWYocGVbMV08PTgpcmV0dXJuIF81KHJlLFEpO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIGphKHJlLFEpO2Nhc2UgNzM6aWYoNzM9PT1wZVsxXSYmNDI9PT1wZVsyXSYmMD09PXBlWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJ''@;'; put 'put ''bWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1wZVsxXSlyZXR1cm4gZnVuY3Rpb24gcFooeSxQKXt2YXIgTD1QfHx7fSxRPSEhTC5XVEY7TC5XVEY9ITA7dHJ5e3ZhciByZT1FOS50b193b3JrYm9vayh5LEwpO3JldHVybiBMLldURj1RLHJlfWNhdGNoKHBlKXtpZihM''@;'; put 'put ''LldURj1RLCFwZS5tZXNzYWdlLm1hdGNoKC9TWUxLIGJhZCByZWNvcmQgSUQvKSYmUSl0aHJvdyBwZTtyZXR1cm4gQjEudG9fd29ya2Jvb2soeSxQKX19KHJlLFEpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1wZVsxXSYmNjY9PT1wZVsyXSYmNzY9PT1wZVszXSlyZXR1cm4gTTMudG9fd29ya2Jv''@;'; put 'put ''b2socmUsUSk7YnJlYWs7Y2FzZSA4MDpyZXR1cm4gNzU9PT1wZVsxXSYmcGVbMl08OSYmcGVbM108OT9mdW5jdGlvbiB3Uih5LFApe3ZhciBRPXkscmU9UHx8e307cmV0dXJuIHJlLnR5cGV8fChyZS50eXBlPWhlJiZCdWZmZXIuaXNCdWZmZXIoeSk/ImJ1ZmZlciI6ImJhc2U2NCIpLEhNKHhu''@;'; put 'put ''KFEscmUpLHJlKX0ocmUsUSk6cF8oeSxyZSxRLF9lKTtjYXNlIDIzOTpyZXR1cm4gNjA9PT1wZVszXT9qYShyZSxRKTpwXyh5LHJlLFEsX2UpO2Nhc2UgMjU1OmlmKDI1ND09PXBlWzFdKXJldHVybiBmdW5jdGlvbiBTUih5LFApe3ZhciBMPXk7cmV0dXJuImJhc2U2NCI9PVAudHlwZSYmKEw9''@;'; put 'put ''c2UuZGVjb2RlKEwpKSxMPWNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsTC5zbGljZSgyKSwic3RyIiksUC50eXBlPSJiaW5hcnkiLE5NKEwsUCl9KHJlLFEpO2JyZWFrO2Nhc2UgMDppZigwPT09cGVbMV0mJnBlWzJdPj0yJiYwPT09cGVbM10pcmV0dXJuIFRtLnRvX3dvcmtib29rKHJlLFEp''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gQjIudG9fd29ya2Jvb2socmUsUSk7Y2FzZSAxMjM6aWYoOTI9PT1wZVsxXSYmMTE0PT09cGVbMl0mJjExNj09PXBlWzNdKXJldHVybiBPbS50b193b3JrYm9vayhyZSxRKTticmVhaztjYXNlIDEwOmNhc2Ug''@;'; put 'put ''MTM6Y2FzZSAzMjpyZXR1cm4gZnVuY3Rpb24gQ1IoeSxQKXt2YXIgTD0iIixRPWZfKHksUCk7c3dpdGNoKFAudHlwZSl7Y2FzZSJiYXNlNjQiOkw9c2UuZGVjb2RlKHkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpMPXk7YnJlYWs7Y2FzZSJidWZmZXIiOkw9eS50b1N0cmluZygiYmluYXJ5Iik7YnJl''@;'; put 'put ''YWs7Y2FzZSJhcnJheSI6TD1QdCh5KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfXJldHVybiAyMzk9PVFbMF0mJjE4Nz09UVsxXSYmMTkxPT1RWzJdJiYoTD1QaShMKSksTk0oTCxQKX0ocmUsUSl9cmV0dXJuIEIyLnZlcnNpb25z''@;'; put 'put ''LmluZGV4T2YocGVbMF0pPi0xJiZwZVsyXTw9MTImJnBlWzNdPD0zMT9CMi50b193b3JrYm9vayhyZSxRKTpwXyh5LHJlLFEsX2UpfWZ1bmN0aW9uIGdfKHksUCl7dmFyIEw9UHx8e307cmV0dXJuIEwudHlwZT0iZmlsZSIsX2YoeSxMKX1mdW5jdGlvbiBtXyh5LFApe3N3aXRjaChQLnR5cGUp''@;'; put 'put ''e2Nhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOlAudHlwZT0iIjticmVhaztjYXNlImZpbGUiOnJldHVybiBZZShQLmZpbGUsamUud3JpdGUoeSx7dHlwZTpoZT8iYnVmZmVyIjoiIn0pKTtjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitQLmJvb2tUeXBlKyInIGZpbGVzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1yZXR1cm4gamUud3JpdGUoeSxQKX1mdW5jdGlvbiBlMSh5LFAsTCl7THx8KEw9IiIpO3Zh''@;'; put 'put ''ciBRPUwreTtzd2l0Y2goUC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHNlLmVuY29kZShMbyhRKSk7Y2FzZSJiaW5hcnkiOnJldHVybiBMbyhRKTtjYXNlInN0cmluZyI6cmV0dXJuIHk7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLFEsInV0ZjgiKTtjYXNlImJ1ZmZlciI6cmV0dXJu''@;'; put 'put ''IGhlP3VlKFEsInV0ZjgiKTplMShRLHt0eXBlOiJiaW5hcnkifSkuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX1mdW5jdGlvbiB2Xyh5LFApe3N3aXRjaChQLnR5''@;'; put 'put ''cGUpe2Nhc2Uic3RyaW5nIjpjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmZvcih2YXIgTD0iIixRPTA7UTx5Lmxlbmd0aDsrK1EpTCs9U3RyaW5nLmZyb21DaGFyQ29kZSh5W1FdKTtyZXR1cm4iYmFzZTY0Ij09UC50eXBlP3NlLmVuY29kZShMKToic3RyaW5nIj09UC50eXBlP1BpKEwpOkw7''@;'; put 'put ''Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLHkpO2Nhc2UiYnVmZmVyIjpyZXR1cm4geTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitQLnR5cGUpfX1mdW5jdGlvbiBDNSh5LFApe1YoKSxmdW5jdGlvbiBETCh5KXtpZigheXx8IXkuU2hlZXROYW1lc3x8''@;'; put 'put ''IXkuU2hlZXRzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBXb3JrYm9vayIpO2lmKCF5LlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiV29ya2Jvb2sgaXMgZW1wdHkiKTshZnVuY3Rpb24gWXYoeSxQLEwpe3kuZm9yRWFjaChmdW5jdGlvbihRLHJlKXtadihRKTtmb3IodmFy''@;'; put 'put ''IHBlPTA7cGU8cmU7KytwZSlpZihRPT15W3BlXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK1EpO2lmKEwpe3ZhciBfZT1QJiZQW3JlXSYmUFtyZV0uQ29kZU5hbWV8fFE7aWYoOTU9PV9lLmNoYXJDb2RlQXQoMCkmJl9lLmxlbmd0aD4yMil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkJhZCBDb2RlIE5hbWU6IFdvcmtzaGVldCIrX2UpfX0pfSh5LlNoZWV0TmFtZXMseS5Xb3JrYm9vayYmeS5Xb3JrYm9vay5TaGVldHN8fFtdLCEheS52YmFyYXcpO2Zvcih2YXIgTD0wO0w8eS5TaGVldE5hbWVzLmxlbmd0aDsrK0wpczUoeS5TaGVldHNbeS5TaGVldE5hbWVzW0xdXSww''@;'; put 'put ''LEwpfSh5KTt2YXIgTD1QfHx7fTtpZihMLmNlbGxTdHlsZXMmJihMLmNlbGxORj0hMCxMLnNoZWV0U3R1YnM9ITApLCJhcnJheSI9PUwudHlwZSl7TC50eXBlPSJiaW5hcnkiO3ZhciBRPUM1KHksTCk7cmV0dXJuIEwudHlwZT0iYXJyYXkiLEgoUSl9c3dpdGNoKEwuYm9va1R5cGV8fCJ4bHNi''@;'; put 'put ''Iil7Y2FzZSJ4bWwiOmNhc2UieGxtbCI6cmV0dXJuIGUxKEpMKHksTCksTCk7Y2FzZSJzbGsiOmNhc2Uic3lsayI6cmV0dXJuIGUxKHVSKHksTCksTCk7Y2FzZSJodG0iOmNhc2UiaHRtbCI6cmV0dXJuIGUxKGxSKHksTCksTCk7Y2FzZSJ0eHQiOnJldHVybiBmdW5jdGlvbiBqTSh5LFApe3N3''@;'; put 'put ''aXRjaChQLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKHkpO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6cmV0dXJuIHk7Y2FzZSJmaWxlIjpyZXR1cm4gWWUoUC5maWxlLHksImJpbmFyeSIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaGU/dWUoeSwiYmluYXJ5Iik6eS5zcGxp''@;'; put 'put ''dCgiIikubWFwKGZ1bmN0aW9uKEwpe3JldHVybiBMLmNoYXJDb2RlQXQoMCl9KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUC50eXBlKX0oaFIoeSxMKSxMKTtjYXNlImNzdiI6cmV0dXJuIGUxKGNSKHksTCksTCwiXHVmZWZmIik7Y2FzZSJkaWYiOnJldHVybiBlMShk''@;'; put 'put ''Uih5LEwpLEwpO2Nhc2UiZGJmIjpyZXR1cm4gdl8oSU0oeSxMKSxMKTtjYXNlInBybiI6cmV0dXJuIGUxKGxfKHksTCksTCk7Y2FzZSJydGYiOnJldHVybiBlMSh5NSh5LEwpLEwpO2Nhc2UiZXRoIjpyZXR1cm4gZTEoZlIoeSxMKSxMKTtjYXNlImZvZHMiOnJldHVybiBlMShfMCh5LEwpLEwp''@;'; put 'put ''O2Nhc2UiYmlmZjIiOkwuYmlmZnx8KEwuYmlmZj0yKTtjYXNlImJpZmYzIjpMLmJpZmZ8fChMLmJpZmY9Myk7Y2FzZSJiaWZmNCI6cmV0dXJuIEwuYmlmZnx8KEwuYmlmZj00KSx2XyhpXyh5LEwpLEwpO2Nhc2UiYmlmZjUiOkwuYmlmZnx8KEwuYmlmZj01KTtjYXNlImJpZmY4IjpjYXNlInhs''@;'; put 'put ''YSI6Y2FzZSJ4bHMiOnJldHVybiBMLmJpZmZ8fChMLmJpZmY9OCksZnVuY3Rpb24gQk0oeSxQKXt2YXIgTD1QfHx7fTtyZXR1cm4gbV8oZnVuY3Rpb24gQ00oeSxQKXt2YXIgTD1QfHx7fSxRPWplLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSkscmU9Ii9Xb3JrYm9vayI7c3dpdGNoKEwuYm9v''@;'; put 'put ''a1R5cGV8fCJ4bHMiKXtjYXNlInhscyI6TC5ib29rVHlwZT0iYmlmZjgiO2Nhc2UieGxhIjpMLmJvb2tUeXBlfHwoTC5ib29rVHlwZT0ieGxhIik7Y2FzZSJiaWZmOCI6cmU9Ii9Xb3JrYm9vayIsTC5iaWZmPTg7YnJlYWs7Y2FzZSJiaWZmNSI6cmU9Ii9Cb29rIixMLmJpZmY9NTticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIrTC5ib29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJuIGplLnV0aWxzLmNmYl9hZGQoUSxyZSxpXyh5LEwpKSw4PT1MLmJpZmYmJih5LlByb3BzfHx5LkN1c3Rwcm9wcykmJmZ1bmN0aW9uIHdNKHksUCl7dmFyIF9lLEw9''@;'; put 'put ''W10sUT1bXSxyZT1bXSxwZT0wO2lmKHkuUHJvcHMpZm9yKF9lPWx0KHkuUHJvcHMpLHBlPTA7cGU8X2UubGVuZ3RoOysrcGUpKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiNCxfZVtwZV0pP0w6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHk0LF9l''@;'; put 'put ''W3BlXSk/UTpyZSkucHVzaChbX2VbcGVdLHkuUHJvcHNbX2VbcGVdXV0pO2lmKHkuQ3VzdHByb3BzKWZvcihfZT1sdCh5LkN1c3Rwcm9wcykscGU9MDtwZTxfZS5sZW5ndGg7KytwZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeS5Qcm9wc3x8e30sX2VbcGVdKXx8KE9i''@;'; put 'put ''amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiNCxfZVtwZV0pP0w6T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHk0LF9lW3BlXSk/UTpyZSkucHVzaChbX2VbcGVdLHkuQ3VzdHByb3BzW19lW3BlXV1dKTt2YXIgdmU9W107Zm9yKHBlPTA7cGU8cmUubGVu''@;'; put 'put ''Z3RoOysrcGUpZm0uaW5kZXhPZihyZVtwZV1bMF0pPi0xfHxudWxsIT1yZVtwZV1bMV0mJnZlLnB1c2gocmVbcGVdKTtRLmxlbmd0aCYmamUudXRpbHMuY2ZiX2FkZChQLCIvXHgwNVN1bW1hcnlJbmZvcm1hdGlvbiIsd2koUSxycC5TSSx5NCx3cikpLChMLmxlbmd0aHx8dmUubGVuZ3RoKSYm''@;'; put 'put ''amUudXRpbHMuY2ZiX2FkZChQLCIvXHgwNURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIix3aShMLHJwLkRTSSxiNCxfNCx2ZS5sZW5ndGg/dmU6bnVsbCxycC5VREkpKX0oeSxRKSw4PT1MLmJpZmYmJnkudmJhcmF3JiZmdW5jdGlvbiB0SSh5LFApe1AuRnVsbFBhdGhzLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oTCxRKXtpZigwIT1RKXt2YXIgcmU9TC5yZXBsYWNlKC9bXlwvXSpbXC9dLywiL19WQkFfUFJPSkVDVF9DVVIvIik7Ii8iIT09cmUuc2xpY2UoLTEpJiZqZS51dGlscy5jZmJfYWRkKHkscmUsUC5GaWxlSW5kZXhbUV0uY29udGVudCl9fSl9KFEsamUucmVhZCh5LnZiYXJhdyx7dHlw''@;'; put 'put ''ZToic3RyaW5nIj09dHlwZW9mIHkudmJhcmF3PyJiaW5hcnkiOiJidWZmZXIifSkpLFF9KHksTCksTCl9KHksTCk7Y2FzZSJ4bHN4IjpjYXNlInhsc20iOmNhc2UieGxhbSI6Y2FzZSJ4bHNiIjpjYXNlIm9kcyI6cmV0dXJuIGZ1bmN0aW9uIFZNKHksUCl7dmFyIEw9UHx8e30sUT1iUih5LEwp''@;'; put 'put ''LHJlPXt9O2lmKEwuY29tcHJlc3Npb24mJihyZS5jb21wcmVzc2lvbj0iREVGTEFURSIpLEwucGFzc3dvcmQpcmUudHlwZT1oZT8ibm9kZWJ1ZmZlciI6InN0cmluZyI7ZWxzZSBzd2l0Y2goTC50eXBlKXtjYXNlImJhc2U2NCI6cmUudHlwZT0iYmFzZTY0IjticmVhaztjYXNlImJpbmFyeSI6''@;'; put 'put ''cmUudHlwZT0ic3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitMLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmUudHlwZT1oZT8ibm9kZWJ1ZmZlciI6InN0cmlu''@;'; put 'put ''ZyI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrTC50eXBlKX12YXIgcGU9US5GdWxsUGF0aHM/amUud3JpdGUoUSx7ZmlsZVR5cGU6InppcCIsdHlwZTp7bm9kZWJ1ZmZlcjoiYnVmZmVyIixzdHJpbmc6ImJpbmFyeSJ9W3JlLnR5cGVdfHxyZS50''@;'; put 'put ''eXBlfSk6US5nZW5lcmF0ZShyZSk7cmV0dXJuIEwucGFzc3dvcmQmJnR5cGVvZiBiMDwidSI/bV8oYjAocGUsTC5wYXNzd29yZCksTCk6ImZpbGUiPT09TC50eXBlP1llKEwuZmlsZSxwZSk6InN0cmluZyI9PUwudHlwZT9QaShwZSk6cGV9KHksTCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVucmVjb2duaXplZCBib29rVHlwZSB8IitMLmJvb2tUeXBlKyJ8Iil9fWZ1bmN0aW9uIHQxKHkpe2lmKCF5LmJvb2tUeXBlKXt2YXIgTD15LmZpbGUuc2xpY2UoeS5maWxlLmxhc3RJbmRleE9mKCIuIikpLnRvTG93ZXJDYXNlKCk7TC5tYXRjaCgvXlwuW2Etel0rJC8pJiYoeS5ib29rVHlw''@;'; put 'put ''ZT1MLnNsaWNlKDEpKSx5LmJvb2tUeXBlPXt4bHM6ImJpZmY4IixodG06Imh0bWwiLHNsazoic3lsayIsc29jaWFsY2FsYzoiZXRoIixTaDMzdEpTOiJXVEYifVt5LmJvb2tUeXBlXXx8eS5ib29rVHlwZX19ZnVuY3Rpb24gUzUoeSxQLEwpe3ZhciBRPUx8fHt9O3JldHVybiBRLnR5cGU9ImZp''@;'; put 'put ''bGUiLFEuZmlsZT1QLHQxKFEpLEM1KHksUSl9ZnVuY3Rpb24gek0oeSxQLEwsUSxyZSxwZSxfZSx2ZSl7dmFyIFNlPUhzKEwpLEhlPXZlLmRlZnZhbCxCZT12ZS5yYXcsR2U9ITAsbnQ9MT09PXJlP1tdOnt9O2lmKDEhPT1yZSlpZihPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShudCwiX19yb3dOdW1fXyIse3ZhbHVlOkwsZW51bWVyYWJsZTohMX0pfWNhdGNoe250Ll9fcm93TnVtX189TH1lbHNlIG50Ll9fcm93TnVtX189TDtpZighX2V8fHlbTF0pZm9yKHZhciBkdD1QLnMuYztkdDw9UC5lLmM7KytkdCl7dmFyIEN0PV9lP3lbTF1bZHRdOnlb''@;'; put 'put ''UVtkdF0rU2VdO2lmKHZvaWQgMCE9PUN0JiZ2b2lkIDAhPT1DdC50KXt2YXIgY3Q9Q3Qudjtzd2l0Y2goQ3QudCl7Y2FzZSJ6IjppZihudWxsPT1jdClicmVhaztjb250aW51ZTtjYXNlImUiOmN0PTA9PWN0P251bGw6dm9pZCAwO2JyZWFrO2Nhc2UicyI6Y2FzZSJkIjpjYXNlImIiOmNhc2Ui''@;'; put 'put ''biI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCB0eXBlICIrQ3QudCl9aWYobnVsbCE9cGVbZHRdKXtpZihudWxsPT1jdClpZigiZSI9PUN0LnQmJm51bGw9PT1jdCludFtwZVtkdF1dPW51bGw7ZWxzZSBpZih2b2lkIDAhPT1IZSludFtwZVtkdF1dPUhlO2Vs''@;'; put 'put ''c2V7aWYoIUJlfHxudWxsIT09Y3QpY29udGludWU7bnRbcGVbZHRdXT1udWxsfWVsc2UgbnRbcGVbZHRdXT1CZT9jdDpjdShDdCxjdCx2ZSk7bnVsbCE9Y3QmJihHZT0hMSl9fWVsc2V7aWYodm9pZCAwPT09SGUpY29udGludWU7bnVsbCE9cGVbZHRdJiYobnRbcGVbZHRdXT1IZSl9fXJldHVy''@;'; put 'put ''bntyb3c6bnQsaXNlbXB0eTpHZX19ZnVuY3Rpb24gSDYoeSxQKXtpZihudWxsPT15fHxudWxsPT15WyIhcmVmIl0pcmV0dXJuW107dmFyIEw9e3Q6Im4iLHY6MH0sUT0wLHJlPTEscGU9W10sX2U9MCx2ZT0iIixTZT1KU09OLnBhcnNlKCd7InMiOnsiciI6MCwiYyI6MH0sImUiOnsiciI6MCwi''@;'; put 'put ''YyI6MH19JyksSGU9UHx8e30sQmU9bnVsbCE9SGUucmFuZ2U/SGUucmFuZ2U6eVsiIXJlZiJdO3N3aXRjaCgxPT09SGUuaGVhZGVyP1E9MToiQSI9PT1IZS5oZWFkZXI/UT0yOkFycmF5LmlzQXJyYXkoSGUuaGVhZGVyKT9RPTM6bnVsbD09SGUuaGVhZGVyJiYoUT0wKSx0eXBlb2YgQmUpe2Nh''@;'; put 'put ''c2Uic3RyaW5nIjpTZT1PaShCZSk7YnJlYWs7Y2FzZSJudW1iZXIiOihTZT1PaSh5WyIhcmVmIl0pKS5zLnI9QmU7YnJlYWs7ZGVmYXVsdDpTZT1CZX1RPjAmJihyZT0wKTt2YXIgR2U9SHMoU2Uucy5yKSxudD1bXSxkdD1bXSxDdD0wLGN0PTAsYnQ9QXJyYXkuaXNBcnJheSh5KSxGdD1TZS5z''@;'; put 'put ''LnIsRXQ9MCxUdD0wO2ZvcihidCYmIXlbRnRdJiYoeVtGdF09W10pLEV0PVNlLnMuYztFdDw9U2UuZS5jOysrRXQpc3dpdGNoKG50W0V0XT1OcyhFdCksTD1idD95W0Z0XVtFdF06eVtudFtFdF0rR2VdLFEpe2Nhc2UgMTpwZVtFdF09RXQtU2Uucy5jO2JyZWFrO2Nhc2UgMjpwZVtFdF09bnRb''@;'; put 'put ''RXRdO2JyZWFrO2Nhc2UgMzpwZVtFdF09SGUuaGVhZGVyW0V0LVNlLnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09TCYmKEw9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSksdmU9X2U9Y3UoTCxudWxsLEhlKSxjdD0wLFR0PTA7VHQ8cGUubGVuZ3RoOysrVHQp''@;'; put 'put ''cGVbVHRdPT12ZSYmKHZlPV9lKyJfIisgKytjdCk7cGVbRXRdPXZlfWZvcihGdD1TZS5zLnIrcmU7RnQ8PVNlLmUucjsrK0Z0KXt2YXIgWnQ9ek0oeSxTZSxGdCxudCxRLHBlLGJ0LEhlKTsoITE9PT1adC5pc2VtcHR5fHwoMT09PVE/ITEhPT1IZS5ibGFua3Jvd3M6SGUuYmxhbmtyb3dzKSkm''@;'; put 'put ''JihkdFtDdCsrXT1adC5yb3cpfXJldHVybiBkdC5sZW5ndGg9Q3QsZHR9dmFyICRkPS8iL2c7ZnVuY3Rpb24gVU0oeSxQLEwsUSxyZSxwZSxfZSx2ZSl7Zm9yKHZhciBTZT0hMCxIZT1bXSxCZT0iIixHZT1IcyhMKSxudD1QLnMuYztudDw9UC5lLmM7KytudClpZihRW250XSl7dmFyIGR0PXZl''@;'; put 'put ''LmRlbnNlPyh5W0xdfHxbXSlbbnRdOnlbUVtudF0rR2VdO2lmKG51bGw9PWR0KUJlPSIiO2Vsc2UgaWYobnVsbCE9ZHQudil7U2U9ITEsQmU9IiIrY3UoZHQsbnVsbCx2ZSk7Zm9yKHZhciBDdD0wLGN0PTA7Q3QhPT1CZS5sZW5ndGg7KytDdClpZigoY3Q9QmUuY2hhckNvZGVBdChDdCkpPT09''@;'; put 'put ''cmV8fGN0PT09cGV8fDM0PT09Y3Qpe0JlPSciJytCZS5yZXBsYWNlKCRkLCciIicpKyciJzticmVha30iSUQiPT1CZSYmKEJlPSciSUQiJyl9ZWxzZSBudWxsPT1kdC5mfHxkdC5GP0JlPSIiOihTZT0hMSwoQmU9Ij0iK2R0LmYpLmluZGV4T2YoIiwiKT49MCYmKEJlPSciJytCZS5yZXBsYWNl''@;'; put 'put ''KCRkLCciIicpKyciJykpO0hlLnB1c2goQmUpfXJldHVybiExPT09dmUuYmxhbmtyb3dzJiZTZT9udWxsOkhlLmpvaW4oX2UpfWZ1bmN0aW9uIEJsKHksUCl7dmFyIEw9W10sUT1QPz97fTtpZihudWxsPT15fHxudWxsPT15WyIhcmVmIl0pcmV0dXJuIiI7dmFyIHJlPU9pKHlbIiFyZWYiXSks''@;'; put 'put ''cGU9dm9pZCAwIT09US5GUz9RLkZTOiIsIixfZT1wZS5jaGFyQ29kZUF0KDApLHZlPXZvaWQgMCE9PVEuUlM/US5SUzoiXG4iLFNlPXZlLmNoYXJDb2RlQXQoMCksSGU9bmV3IFJlZ0V4cCgoInwiPT1wZT8iXFx8IjpwZSkrIiskIiksQmU9IiIsR2U9W107US5kZW5zZT1BcnJheS5pc0FycmF5''@;'; put 'put ''KHkpO2Zvcih2YXIgbnQ9US5za2lwSGlkZGVuJiZ5WyIhY29scyJdfHxbXSxkdD1RLnNraXBIaWRkZW4mJnlbIiFyb3dzIl18fFtdLEN0PXJlLnMuYztDdDw9cmUuZS5jOysrQ3QpKG50W0N0XXx8e30pLmhpZGRlbnx8KEdlW0N0XT1OcyhDdCkpO2Zvcih2YXIgY3Q9cmUucy5yO2N0PD1yZS5l''@;'; put 'put ''LnI7KytjdCkoZHRbY3RdfHx7fSkuaGlkZGVufHxudWxsIT0oQmU9VU0oeSxyZSxjdCxHZSxfZSxTZSxwZSxRKSkmJihRLnN0cmlwJiYoQmU9QmUucmVwbGFjZShIZSwiIikpLEwucHVzaChCZSt2ZSkpO3JldHVybiBkZWxldGUgUS5kZW5zZSxMLmpvaW4oIiIpfWZ1bmN0aW9uIHhSKHksUCl7''@;'; put 'put ''UHx8KFA9e30pLFAuRlM9Ilx0IixQLlJTPSJcbiI7dmFyIEw9QmwoeSxQKTtpZih0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJpbmciPT1QLnR5cGUpcmV0dXJuIEw7dmFyIFE9Y3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxMLCJzdHIiKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUp''@;'; put 'put ''K1N0cmluZy5mcm9tQ2hhckNvZGUoMjU0KStRfWZ1bmN0aW9uIE42KHkpe3ZhciBMLFA9IiIsUT0iIjtpZihudWxsPT15fHxudWxsPT15WyIhcmVmIl0pcmV0dXJuW107dmFyIHZlLHJlPU9pKHlbIiFyZWYiXSkscGU9IiIsX2U9W10sU2U9W10sSGU9QXJyYXkuaXNBcnJheSh5KTtmb3IodmU9''@;'; put 'put ''cmUucy5jO3ZlPD1yZS5lLmM7Kyt2ZSlfZVt2ZV09TnModmUpO2Zvcih2YXIgQmU9cmUucy5yO0JlPD1yZS5lLnI7KytCZSlmb3IocGU9SHMoQmUpLHZlPXJlLnMuYzt2ZTw9cmUuZS5jOysrdmUpaWYoUD1fZVt2ZV0rcGUsUT0iIix2b2lkIDAhPT0oTD1IZT8oeVtCZV18fFtdKVt2ZV06eVtQ''@;'; put 'put ''XSkpe2lmKG51bGwhPUwuRil7aWYoUD1MLkYsIUwuZiljb250aW51ZTtRPUwuZiwtMT09UC5pbmRleE9mKCI6IikmJihQPVArIjoiK1ApfWlmKG51bGwhPUwuZilRPUwuZjtlbHNle2lmKCJ6Ij09TC50KWNvbnRpbnVlO2lmKCJuIj09TC50JiZudWxsIT1MLnYpUT0iIitMLnY7ZWxzZSBpZigi''@;'; put 'put ''YiI9PUwudClRPUwudj8iVFJVRSI6IkZBTFNFIjtlbHNlIGlmKHZvaWQgMCE9PUwudylRPSInIitMLnc7ZWxzZXtpZih2b2lkIDA9PT1MLnYpY29udGludWU7UT0icyI9PUwudD8iJyIrTC52OiIiK0wudn19U2VbU2UubGVuZ3RoXT1QKyI9IitRfXJldHVybiBTZX1mdW5jdGlvbiBfXyh5LFAs''@;'; put 'put ''TCl7dmFyIFE9THx8e30scmU9KyFRLnNraXBIZWFkZXIscGU9eXx8e30sX2U9MCx2ZT0wO2lmKHBlJiZudWxsIT1RLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIFEub3JpZ2luKV9lPVEub3JpZ2luO2Vsc2V7dmFyIFNlPSJzdHJpbmciPT10eXBlb2YgUS5vcmlnaW4/c3MoUS5vcmlnaW4p''@;'; put 'put ''OlEub3JpZ2luO19lPVNlLnIsdmU9U2UuY312YXIgSGUsQmU9SlNPTi5wYXJzZSgneyJzIjogeyJjIjowLCAiciI6MH0sICJlIjogeyJjIjowLCAiciI6MH19Jyk7aWYoQmUuZS5jPXZlLEJlLmUucj1fZStQLmxlbmd0aC0xK3JlLHBlWyIhcmVmIl0pe3ZhciBHZT1PaShwZVsiIXJlZiJdKTtC''@;'; put 'put ''ZS5lLmM9TWF0aC5tYXgoQmUuZS5jLEdlLmUuYyksQmUuZS5yPU1hdGgubWF4KEJlLmUucixHZS5lLnIpLC0xPT1fZSYmKEJlLmUucj0oX2U9R2UuZS5yKzEpK1AubGVuZ3RoLTErcmUpfWVsc2UtMT09X2UmJihfZT0wLEJlLmUucj1QLmxlbmd0aC0xK3JlKTt2YXIgbnQ9US5oZWFkZXJ8fFtd''@;'; put 'put ''LGR0PTA7UC5mb3JFYWNoKGZ1bmN0aW9uKGN0LGJ0KXtsdChjdCkuZm9yRWFjaChmdW5jdGlvbihGdCl7LTE9PShkdD1udC5pbmRleE9mKEZ0KSkmJihudFtkdD1udC5sZW5ndGhdPUZ0KTt2YXIgRXQ9Y3RbRnRdLFR0PSJ6IixadD0iIixwbj1kaSh7Yzp2ZStkdCxyOl9lK2J0K3JlfSk7aWYo''@;'; put 'put ''SGU9cW8uc2hlZXRfZ2V0X2NlbGwocGUscG4pLCFFdHx8Im9iamVjdCIhPXR5cGVvZiBFdHx8RXQgaW5zdGFuY2VvZiBEYXRlKXtpZigibnVtYmVyIj09dHlwZW9mIEV0P1R0PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBFdD9UdD0iYiI6InN0cmluZyI9PXR5cGVvZiBFdD9UdD0icyI6RXQgaW5z''@;'; put 'put ''dGFuY2VvZiBEYXRlPyhUdD0iZCIsUS5jZWxsRGF0ZXN8fChUdD0ibiIsRXQ9VWUoRXQpKSxadD1IZS56JiZ3LmlzX2RhdGUoSGUueik/SGUuejpRLmRhdGVORnx8dy5fdGFibGVbMTRdKTpudWxsPT09RXQmJlEubnVsbEVycm9yJiYoVHQ9ImUiLEV0PTApLEhlPyhIZS50PVR0LEhlLnY9RXQs''@;'; put 'put ''ZGVsZXRlIEhlLncsZGVsZXRlIEhlLlIsWnQmJihIZS56PVp0KSk6cGVbcG5dPUhlPXt0OlR0LHY6RXR9LFp0JiYoSGUuej1adCksSGUmJkhlLmgpdHJ5e2lmKEhlLlI9RnUuaHRtbF90b19ycyhIZS5oKSwhSGUudil7SGUudj0iIjtmb3IodmFyIEtuPTA7S248SGUuUi5sZW5ndGg7KytLbilI''@;'; put 'put ''ZS52Kz1IZS5SW0tuXS52fHwiIn19Y2F0Y2h7fX1lbHNlIHBlW3BuXT1FdH0pfSksQmUuZS5jPU1hdGgubWF4KEJlLmUuYyx2ZStudC5sZW5ndGgtMSk7dmFyIEN0PUhzKF9lKTtpZihyZSlmb3IoZHQ9MDtkdDxudC5sZW5ndGg7KytkdClwZVtOcyhkdCt2ZSkrQ3RdPXt0OiJzIix2Om50W2R0''@;'; put 'put ''XX07cmV0dXJuIHBlWyIhcmVmIl09T28oQmUpLHBlfXZhciBxbz17ZW5jb2RlX2NvbDpOcyxlbmNvZGVfcm93OkhzLGVuY29kZV9jZWxsOmRpLGVuY29kZV9yYW5nZTpPbyxkZWNvZGVfY29sOmpoLGRlY29kZV9yb3c6QjAsc3BsaXRfY2VsbDpmdW5jdGlvbiBoNCh5KXtyZXR1cm4geS5yZXBs''@;'; put 'put ''YWNlKC8oXCQ/W0EtWl0qKShcJD9cZCopLywiJDEsJDIiKS5zcGxpdCgiLCIpfSxkZWNvZGVfY2VsbDpzcyxkZWNvZGVfcmFuZ2U6V3MsZm9ybWF0X2NlbGw6Y3UsZ2V0X2Zvcm11bGFlOk42LG1ha2VfY3N2OkJsLG1ha2VfanNvbjpINixtYWtlX2Zvcm11bGFlOk42LGh0bWxfdG9fcnM6RnUu''@;'; put 'put ''aHRtbF90b19ycyxzaGVldF9hZGRfYW9hOnMwLHNoZWV0X2FkZF9qc29uOl9fLHNoZWV0X2FkZF9kb206QU0sYW9hX3RvX3NoZWV0OmsxLGpzb25fdG9fc2hlZXQ6ZnVuY3Rpb24gZlkoeSxQKXtyZXR1cm4gX18obnVsbCx5LFApfSx0YWJsZV90b19zaGVldDpIdSx0YWJsZV90b19ib29rOmZ1''@;'; put 'put ''bmN0aW9uIGRyKHksUCl7cmV0dXJuIEVkKEh1KHksUCksUCl9LHNoZWV0X3RvX2NzdjpCbCxzaGVldF90b190eHQ6eFIsc2hlZXRfdG9fanNvbjpINixzaGVldF90b19odG1sOkZ1LmZyb21fc2hlZXQsc2hlZXRfdG9fZm9ybXVsYWU6TjYsc2hlZXRfdG9fcm93X29iamVjdF9hcnJheTpINn07''@;'; put 'put ''ZnVuY3Rpb24gWk0oeSxQLEwsUSxyZSl7dmFyIHBlO2lmKHkuc3R5bGUmJiEoeS5fcmFuZ2UmJihwZT0ic3RyaW5nIj09dHlwZW9mIHkuX3JhbmdlP00udXRpbHMuZGVjb2RlX3JhbmdlKHkuX3JhbmdlKTp5Ll9yYW5nZSxMLmM+cGUuZS5jfHxMLmM8cGUucy5jfHxMLnI+cGUuZS5yfHxMLnI8''@;'; put 'put ''cGUucy5yKSkmJnBlKXt2YXIgX2U9eS5zdHlsZS5zdHlsZTtpZihfZSl7X2Uud2hvbGVUYWJsZSYmcW8uYXBwbHlfc3R5bGVfZGVsdGEoUSxfZS53aG9sZVRhYmxlKTtlOmlmKF9lLmhlYWRlclJvdylpZihyZSl7aWYoTC5yIT1wZS5zLnIpYnJlYWsgZTtobih5LnN0eWxlLmNvbGhlYWQpfHxx''@;'; put 'put ''by5hcHBseV9zdHlsZV9kZWx0YShRLF9lLmhlYWRlclJvdyl9ZWxzZXtpZihMLnIhPXBlLnMucilicmVhayBlO2huKHkuaGVhZGVyKXx8cW8uYXBwbHlfc3R5bGVfZGVsdGEoUSxfZS5oZWFkZXJSb3cpfX19fXFvLnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gTE0oeSxQKXt2YXIgTD1CdWZmZXIu''@;'; put 'put ''ZnJvbSh5LnNhbHQsImJhc2U2NCIpLFE9eS5hbGdvLHJlPWVsKEJ1ZmZlci5jb25jYXQoW0wsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxQKSldKSxRKSxwZT1CdWZmZXIuYWxsb2MoNCk7b2wocGUsMCk7Zm9yKHZhciBfZT0wO19lPHkuc3BpbjsrK19lKXBlLmw9MCxw''@;'; put 'put ''ZS53cml0ZV9zaGlmdCg0LF9lKSxyZT1lbChCdWZmZXIuY29uY2F0KFtyZSxwZV0pLFEpO3ZhciB2ZT1CdWZmZXIuZnJvbSh5Lmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1yZS5jb21wYXJlKHZlKX0scW8uaGFzaF9wYXNzd29yZD1mdW5jdGlvbiB1Xyh5KXt2YXIgUD17YWxnbzoiU0hBLTUx''@;'; put 'put ''MiIsc2FsdDoiVTJobFpYUktVeTVqYjIwdmVHeHplQT09IixzcGluOjFlM30sTD1CdWZmZXIuZnJvbShQLnNhbHQsImJhc2U2NCIpLFE9UC5hbGdvLHJlPWVsKEJ1ZmZlci5jb25jYXQoW0wsQnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCx5KSldKSxRKSxwZT1CdWZmZXIu''@;'; put 'put ''YWxsb2MoNCk7b2wocGUsMCk7Zm9yKHZhciBfZT0wO19lPFAuc3BpbjsrK19lKXBlLmw9MCxwZS53cml0ZV9zaGlmdCg0LF9lKSxyZT1lbChCdWZmZXIuY29uY2F0KFtyZSxwZV0pLFEpO3JldHVybiBQLmhhc2g9cmUudG9TdHJpbmcoImJhc2U2NCIpLFB9LHFvLnNoZWV0X3NldF9yYW5nZV9z''@;'; put 'put ''dHlsZT1mdW5jdGlvbih5LFAsTCl7aWYoTCl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBQP09pKFApOlA7bnVsbCE9US5yJiZudWxsIT1RLmMmJihRPXtzOlEsZTpRfSk7dmFyIHZlLHJlPVEucy5yLHBlPTAsX2U9IiIsU2U9V3MoeVsiIXJlZiJdfHwiQTEiKTtTZS5zLnI+US5zLnImJihTZS5z''@;'; put 'put ''LnI9US5zLnIpLFNlLnMuYz5RLnMuYyYmKFNlLnMuYz1RLnMuYyksU2UuZS5yPFEuZS5yJiYoU2UuZS5yPVEuZS5yKSxTZS5lLmM8US5lLmMmJihTZS5lLmM9US5lLmMpLHlbIiFyZWYiXT1PbyhTZSk7Zm9yKHZhciBCZT1BcnJheS5pc0FycmF5KHkpO3JlPD1RLmUucjsrK3JlKWZvcihwZT1R''@;'; put 'put ''LnMuYztwZTw9US5lLmM7KytwZSlCZT8oeVtyZV18fCh5W3JlXT1bXSkseVtyZV1bcGVdfHwoeVtyZV1bcGVdPXt0OiJ6In0pLHZlPXlbcmVdW3BlXSk6KHlbX2U9ZGkoe3I6cmUsYzpwZX0pXXx8KHlbX2VdPXt0OiJ6In0pLHZlPXlbX2VdKSx2ZS5zfHwodmUucz17fSksT2JqZWN0LmtleXMo''@;'; put 'put ''TCkuZm9yRWFjaChIZSksdmUucy5wYXR0ZXJuVHlwZSYmIXZlLnMuZmdDb2xvciYmKGRlbGV0ZSB2ZS5zLnBhdHRlcm5UeXBlLGRlbGV0ZSB2ZS5zLmJnQ29sb3IpLCh2ZS5zLmZnQ29sb3J8fHZlLnMuYmdDb2xvcikmJiJub25lIj09KHZlLnMucGF0dGVyblR5cGV8fCJub25lIikmJih2ZS5z''@;'; put 'put ''LnBhdHRlcm5UeXBlPSJzb2xpZCIpO2lmKHJlPVEucy5yLEwudG9wfHxudWxsPT09TC50b3ApZm9yKHBlPVEucy5jO3BlPD1RLmUuYzsrK3BlKXtpZihCZSl7aWYoIXlbcmVdKWNvbnRpbnVlO3ZlPXlbcmVdW3BlXX1lbHNlIF9lPWRpKHtyOnJlLGM6cGV9KSx2ZT15W19lXTt2ZSYmKG51bGw9''@;'; put 'put ''PT1MLnRvcD9kZWxldGUgdmUucy50b3A6dmUucy50b3A9b24oTC50b3ApKX1pZihyZT1RLmUucixMLmJvdHRvbXx8bnVsbD09PUwuYm90dG9tKWZvcihwZT1RLnMuYztwZTw9US5lLmM7KytwZSl7aWYoQmUpe2lmKCF5W3JlXSljb250aW51ZTt2ZT15W3JlXVtwZV19ZWxzZSBfZT1kaSh7cjpy''@;'; put 'put ''ZSxjOnBlfSksdmU9eVtfZV07dmUmJihudWxsPT09TC5ib3R0b20/ZGVsZXRlIHZlLnMuYm90dG9tOnZlLnMuYm90dG9tPW9uKEwuYm90dG9tKSl9aWYocGU9US5zLmMsTC5sZWZ0fHxudWxsPT09TC5sZWZ0KWZvcihyZT1RLnMucjtyZTw9US5lLnI7KytyZSl7aWYoQmUpe2lmKCF5W3JlXSlj''@;'; put 'put ''b250aW51ZTt2ZT15W3JlXVtwZV19ZWxzZSBfZT1kaSh7cjpyZSxjOnBlfSksdmU9eVtfZV07dmUmJihudWxsPT09TC5sZWZ0P2RlbGV0ZSB2ZS5zLmxlZnQ6dmUucy5sZWZ0PW9uKEwubGVmdCkpfWlmKHBlPVEuZS5jLEwucmlnaHR8fG51bGw9PT1MLnJpZ2h0KWZvcihyZT1RLnMucjtyZTw9''@;'; put 'put ''US5lLnI7KytyZSl7aWYoQmUpe2lmKCF5W3JlXSljb250aW51ZTt2ZT15W3JlXVtwZV19ZWxzZSBfZT1kaSh7cjpyZSxjOnBlfSksdmU9eVtfZV07dmUmJihudWxsPT09TC5yaWdodD9kZWxldGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PW9uKEwucmlnaHQpKX19ZnVuY3Rpb24gSGUoR2Upe2lm''@;'; put 'put ''KCJ0b3AiIT1HZSYmImJvdHRvbSIhPUdlJiYibGVmdCIhPUdlJiYicmlnaHQiIT1HZSl7aWYoInoiPT1HZSlyZXR1cm4gdm9pZCh2ZS56PUwueik7aWYoImFsaWdubWVudCI9PUdlKXJldHVybiB2b2lkKHZlLnNbR2VdP09iamVjdC5rZXlzKExbR2VdKS5mb3JFYWNoKGZ1bmN0aW9uKG50KXt2''@;'; put 'put ''ZS5zW0dlXVtudF09TFtHZV1bbnRdfSk6dmUuc1tHZV09b24oTFtHZV0pKTtpZigiaW5jb2wiPT1HZSlyZXR1cm4gcGU+US5zLmMmJihudWxsPT09TC5sZWZ0P2RlbGV0ZSB2ZS5zLmxlZnQ6dmUucy5sZWZ0PSJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdKSx2b2lkKHBl''@;'; put 'put ''PFEuZS5jJiYobnVsbD09PUwucmlnaHQ/ZGVsZXRlIHZlLnMucmlnaHQ6dmUucy5yaWdodD0ib2JqZWN0Ij09dHlwZW9mIExbR2VdP29uKExbR2VdKTpMW0dlXSkpO2lmKCJpbnJvdyI9PUdlKXJldHVybiByZT5RLnMuciYmKG51bGw9PT1MLnRvcD9kZWxldGUgdmUucy50b3A6dmUucy50b3A9''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV0pLHZvaWQocmU8US5lLnImJihudWxsPT09TC5ib3R0b20/ZGVsZXRlIHZlLnMuYm90dG9tOnZlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2YgTFtHZV0/b24oTFtHZV0pOkxbR2VdKSk7bnVsbD09PUxbR2VdP2RlbGV0ZSB2''@;'; put 'put ''ZS5zW0dlXTp2ZS5zW0dlXT1MW0dlXSYmQXJyYXkuaXNBcnJheShMW0dlXSk/TFtHZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24obnQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbnQ/b24obnQpOm50fSk6Im9iamVjdCI9PXR5cGVvZiBMW0dlXT9vbihMW0dlXSk6TFtHZV19fX0scW8uYXBwbHlf''@;'; put 'put ''c3R5bGVfZGVsdGE9ZnVuY3Rpb24oeSxQKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe3ZhciBRPUw7ImJnQ29sb3IiPT1MP1E9ImZnQ29sb3IiOiJmZ0NvbG9yIj09TCYmKFE9ImJnQ29sb3Ii''@;'; put 'put ''KSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxMKSYmKG51bGw9PT1QW0xdP2RlbGV0ZSB5W1FdOm51bGwhPVBbTF0mJih5W1FdPVBbTF0pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdD''@;'; put 'put ''b2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKEwpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEwpJiYobnVsbD09PVBbTF0/ZGVsZXRlIHlbTF06bnVsbCE9UFtMXSYmKHlbTF09b24oUFtMXSkpKX0pfSxxby5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rp''@;'; put 'put ''b24oeSxQKXsic3RyaW5nIj09dHlwZW9mIFAmJihQPU0udXRpbHMuZGVjb2RlX2NlbGwoUCkpO3ZhciBMPUFycmF5LmlzQXJyYXkoeSk/KHlbUC5yXXx8W10pW1AuY106eVtNLnV0aWxzLmVuY29kZV9jZWxsKFApXSxRPW9uKEwmJkwuc3x8e30pO3JldHVybiB5WyIhdGFibGVzIl0mJnlbIiF0''@;'; put 'put ''YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtaTShyZSwwLFAsUSl9KSx5WyIhcGl2b3RzIl0mJnlbIiFwaXZvdHMiXS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtaTShyZSwwLFAsUSwhMCl9KSxRfTt2YXIgWU09e307cW8uY2VsbF9hcnJheV90b19jc3Zfcm93PWZ1bmN0aW9uKHksUCl7dmFy''@;'; put 'put ''IEw9UD8/e30sUT12b2lkIDAhPT1MLkZTP0wuRlM6IiwiLHJlPVEuY2hhckNvZGVBdCgwKSxwZT12b2lkIDAhPT1MLlJTP0wuUlM6IlxuIixfZT1wZS5jaGFyQ29kZUF0KDApLHZlPVlNW1FdfHwoWU1bUV09bmV3IFJlZ0V4cCgoInwiPT1RPyJcXHwiOlEpKyIrJCIpKSxTZT1mdW5jdGlvbiBp''@;'; put 'put ''cCh5LFAsTCxRLHJlKXtmb3IodmFyIHBlPSEwLF9lPVtdLHZlPSIiLFNlPTA7U2U8PXkubGVuZ3RoLTE7KytTZSl7dmFyIEhlPXlbU2VdO2lmKG51bGw9PUhlKXZlPSIiO2Vsc2UgaWYobnVsbCE9SGUudil7cGU9ITEsdmU9IiIrY3UoSGUsbnVsbCxyZSk7Zm9yKHZhciBCZT0wLEdlPTA7QmUh''@;'; put 'put ''PT12ZS5sZW5ndGg7KytCZSlpZigoR2U9dmUuY2hhckNvZGVBdChCZSkpPT09UHx8R2U9PT1MfHwzND09PUdlKXt2ZT0nIicrdmUucmVwbGFjZSgkZCwnIiInKSsnIic7YnJlYWt9IklEIj09dmUmJih2ZT0nIklEIicpfWVsc2UgbnVsbD09SGUuZnx8SGUuRj92ZT0iIjoocGU9ITEsKHZlPSI9''@;'; put 'put ''IitIZS5mKS5pbmRleE9mKCIsIik+PTAmJih2ZT0nIicrdmUucmVwbGFjZSgkZCwnIiInKSsnIicpKTtfZS5wdXNoKHZlKX1yZXR1cm4hMT09PXJlLmJsYW5rcm93cyYmcGU/bnVsbDpfZS5qb2luKFEpfSh5LHJlLF9lLFEsTCk7cmV0dXJuIEwuc3RyaXAmJihTZT1TZS5yZXBsYWNlKHZlLCIi''@;'; put 'put ''KSksU2UrcGV9LGZ1bmN0aW9uKHkpe2Z1bmN0aW9uIEwocGUsX2UsdmUpe3JldHVybiBudWxsIT1wZVtfZV0/cGVbX2VdOnBlW19lXT12ZX1mdW5jdGlvbiBRKHBlLF9lLHZlKXtpZigic3RyaW5nIj09dHlwZW9mIF9lKXtpZihBcnJheS5pc0FycmF5KHBlKSl7dmFyIFNlPXNzKF9lKTtyZXR1''@;'; put 'put ''cm4gcGVbU2Uucl18fChwZVtTZS5yXT1bXSkscGVbU2Uucl1bU2UuY118fChwZVtTZS5yXVtTZS5jXT17dDoieiJ9KX1yZXR1cm4gcGVbX2VdfHwocGVbX2VdPXt0OiJ6In0pfXJldHVybiBRKHBlLGRpKCJudW1iZXIiIT10eXBlb2YgX2U/X2U6e3I6X2UsYzp2ZXx8MH0pKX15LmNvbnN0cz15''@;'; put 'put ''LmNvbnN0c3x8e30seS5zaGVldF9nZXRfY2VsbD1RLHkuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx5LmJvb2tfYXBwZW5kX3NoZWV0PWZ1bmN0aW9uKHBlLF9lLHZlKXtpZighdmUpZm9yKHZhciBTZT0xO1NlPD02NTUzNSYmLTEhPXBlLlNo''@;'; put 'put ''ZWV0TmFtZXMuaW5kZXhPZih2ZT0iU2hlZXQiK1NlKTsrK1NlKTtpZihadih2ZSkscGUuU2hlZXROYW1lcy5pbmRleE9mKHZlKT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzaGVldCB3aXRoIG5hbWUgfCIrdmUrInwgYWxyZWFkeSBleGlzdHMhIik7cGUuU2hlZXROYW1lcy5wdXNoKHZlKSxw''@;'; put 'put ''ZS5TaGVldHNbdmVdPV9lfSx5LmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24ocGUsX2UsdmUpe0wocGUsIldvcmtib29rIix7fSksTChwZS5Xb3JrYm9vaywiU2hlZXRzIixbXSk7dmFyIFNlPWZ1bmN0aW9uIHJlKHBlLF9lKXtpZigibnVtYmVyIj09dHlwZW9mIF9lKXtpZihf''@;'; put 'put ''ZT49MCYmcGUuU2hlZXROYW1lcy5sZW5ndGg+X2UpcmV0dXJuIF9lO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgc2hlZXQgIyAiK19lKX1pZigic3RyaW5nIj09dHlwZW9mIF9lKXt2YXIgdmU9cGUuU2hlZXROYW1lcy5pbmRleE9mKF9lKTtpZih2ZT4tMSlyZXR1cm4gdmU7dGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCBuYW1lIHwiK19lKyJ8Iil9dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCB8IitfZSsifCIpfShwZSxfZSk7c3dpdGNoKEwocGUuV29ya2Jvb2suU2hlZXRzLFNlLHt9KSx2ZSl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6YnJlYWs7''@;'; put 'put ''ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBzaGVldCB2aXNpYmlsaXR5IHNldHRpbmcgIit2ZSl9cGUuV29ya2Jvb2suU2hlZXRzW1NlXS5IaWRkZW49dmV9LGZ1bmN0aW9uIFAocGUpe3BlLmZvckVhY2goZnVuY3Rpb24oX2Upe3kuY29uc3RzW19lWzBdXT1fZVsxXX0pfShbWyJTSEVF''@;'; put 'put ''VF9WSVNJQkxFIiwwXSxbIlNIRUVUX0hJRERFTiIsMV0sWyJTSEVFVF9WRVJZX0hJRERFTiIsMl1dKSx5LmNlbGxfc2V0X251bWJlcl9mb3JtYXQ9ZnVuY3Rpb24ocGUsX2Upe3JldHVybiBwZS56PV9lLHBlfSx5LmNlbGxfc2V0X2h5cGVybGluaz1mdW5jdGlvbihwZSxfZSx2ZSl7cmV0dXJu''@;'; put 'put ''IF9lPyhwZS5sPXtUYXJnZXQ6X2V9LHZlJiYocGUubC5Ub29sdGlwPXZlKSxwZS5zfHwocGUucz17fSkscGUucy5jb2xvcj17dGhlbWU6MTB9KTooZGVsZXRlIHBlLmwscGUucyYmcGUucy5jb2xvciYmMTA9PXBlLnMuY29sb3IudGhlbWUmJmRlbGV0ZSBwZS5zLmNvbG9yKSxwZX0seS5jZWxs''@;'; put 'put ''X3NldF9pbnRlcm5hbF9saW5rPWZ1bmN0aW9uKHBlLF9lLHZlKXtyZXR1cm4geS5jZWxsX3NldF9oeXBlcmxpbmsocGUsIiMiK19lLHZlKX0seS5jZWxsX2FkZF9jb21tZW50PWZ1bmN0aW9uKHBlLF9lLHZlKXtwZS5jfHwocGUuYz1bXSkscGUuYy5wdXNoKHt0Ol9lLGE6dmV8fCJTaGVldEpT''@;'; put 'put ''In0pfSx5LnNoZWV0X3NldF9hcnJheV9mb3JtdWxhPWZ1bmN0aW9uKHBlLF9lLHZlKXtmb3IodmFyIFNlPSJzdHJpbmciIT10eXBlb2YgX2U/X2U6T2koX2UpLEhlPSJzdHJpbmciPT10eXBlb2YgX2U/X2U6T28oX2UpLEJlPVNlLnMucjtCZTw9U2UuZS5yOysrQmUpZm9yKHZhciBHZT1TZS5z''@;'; put 'put ''LmM7R2U8PVNlLmUuYzsrK0dlKXt2YXIgbnQ9UShwZSxCZSxHZSk7bnQudD0ibiIsbnQuRj1IZSxkZWxldGUgbnQudixCZT09U2Uucy5yJiZHZT09U2Uucy5jJiYobnQuZj12ZSl9cmV0dXJuIHBlfX0ocW8pLGhlJiZmdW5jdGlvbigpe3ZhciB5PUYoNTE3OTMpLlJlYWRhYmxlO00uc3RyZWFt''@;'; put 'put ''PXt0b19qc29uOmZ1bmN0aW9uKHJlLHBlKXt2YXIgX2U9eSh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PXJlfHxudWxsPT1yZVsiIXJlZiJdKXJldHVybiBfZS5wdXNoKG51bGwpLF9lO3ZhciB2ZT17dDoibiIsdjowfSxTZT0wLEhlPTEsQmU9W10sR2U9MCxudD0iIixkdD17czp7cjowLGM6''@;'; put 'put ''MH0sZTp7cjowLGM6MH19LEN0PXBlfHx7fSxjdD1udWxsIT1DdC5yYW5nZT9DdC5yYW5nZTpyZVsiIXJlZiJdO3N3aXRjaCgxPT09Q3QuaGVhZGVyP1NlPTE6IkEiPT09Q3QuaGVhZGVyP1NlPTI6QXJyYXkuaXNBcnJheShDdC5oZWFkZXIpJiYoU2U9MyksdHlwZW9mIGN0KXtjYXNlInN0cmlu''@;'; put 'put ''ZyI6ZHQ9T2koY3QpO2JyZWFrO2Nhc2UibnVtYmVyIjooZHQ9T2kocmVbIiFyZWYiXSkpLnMucj1jdDticmVhaztkZWZhdWx0OmR0PWN0fVNlPjAmJihIZT0wKTt2YXIgYnQ9SHMoZHQucy5yKSxGdD1bXSxFdD0wLFR0PUFycmF5LmlzQXJyYXkocmUpLFp0PWR0LnMucixwbj0wLEtuPTA7Zm9y''@;'; put 'put ''KFR0JiYhcmVbWnRdJiYocmVbWnRdPVtdKSxwbj1kdC5zLmM7cG48PWR0LmUuYzsrK3BuKXN3aXRjaChGdFtwbl09TnMocG4pLHZlPVR0P3JlW1p0XVtwbl06cmVbRnRbcG5dK2J0XSxTZSl7Y2FzZSAxOkJlW3BuXT1wbi1kdC5zLmM7YnJlYWs7Y2FzZSAyOkJlW3BuXT1GdFtwbl07YnJlYWs7''@;'; put 'put ''Y2FzZSAzOkJlW3BuXT1DdC5oZWFkZXJbcG4tZHQucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT12ZSYmKHZlPXt3OiJfX0VNUFRZIix0OiJzIn0pLG50PUdlPWN1KHZlLG51bGwsQ3QpLEV0PTAsS249MDtLbjxCZS5sZW5ndGg7KytLbilCZVtLbl09PW50JiYobnQ9R2UrIl8iKyArK0V0''@;'; put 'put ''KTtCZVtwbl09bnR9cmV0dXJuIFp0PWR0LnMucitIZSxfZS5fcmVhZD1mdW5jdGlvbigpe2lmKFp0PmR0LmUucilyZXR1cm4gX2UucHVzaChudWxsKTtmb3IoO1p0PD1kdC5lLnI7KXt2YXIgdW49ek0ocmUsZHQsWnQsRnQsU2UsQmUsVHQsQ3QpO2lmKCsrWnQsITE9PT11bi5pc2VtcHR5fHwo''@;'; put 'put ''MT09PVNlPyExIT09Q3QuYmxhbmtyb3dzOkN0LmJsYW5rcm93cykpe19lLnB1c2godW4ucm93KTticmVha319fSxfZX0sdG9faHRtbDpmdW5jdGlvbihyZSxwZSl7dmFyIF9lPXkoKSx2ZT1wZXx8e30sSGU9bnVsbCE9dmUuZm9vdGVyP3ZlLmZvb3RlcjpGdS5FTkQ7X2UucHVzaChudWxsIT12''@;'; put 'put ''ZS5oZWFkZXI/dmUuaGVhZGVyOkZ1LkJFR0lOKTt2YXIgQmU9V3MocmVbIiFyZWYiXSk7dmUuZGVuc2U9QXJyYXkuaXNBcnJheShyZSksX2UucHVzaChGdS5fcHJlYW1ibGUocmUsQmUsdmUpKTt2YXIgR2U9QmUucy5yLG50PSExLGR0PVtdO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lm''@;'; put 'put ''KEdlPkJlLmUucilyZXR1cm4gbnR8fChudD0hMCxfZS5wdXNoKCI8L3RhYmxlPiIrSGUpKSxfZS5wdXNoKG51bGwpO2Zvcig7R2U8PUJlLmUucjspe19lLnB1c2goRnUuX3JvdyhyZSxCZSxHZSx2ZSxkdCwiIikpLCsrR2U7YnJlYWt9fSxfZX0sdG9fY3N2OmZ1bmN0aW9uKHJlLHBlKXt2YXIg''@;'; put 'put ''X2U9eSgpLHZlPXBlPz97fTtpZihudWxsPT1yZXx8bnVsbD09cmVbIiFyZWYiXSlyZXR1cm4gX2UucHVzaChudWxsKSxfZTt2YXIgU2U9T2kocmVbIiFyZWYiXSksSGU9dm9pZCAwIT09dmUuRlM/dmUuRlM6IiwiLEJlPUhlLmNoYXJDb2RlQXQoMCksR2U9dm9pZCAwIT09dmUuUlM/dmUuUlM6''@;'; put 'put ''IlxuIixudD1HZS5jaGFyQ29kZUF0KDApLGR0PW5ldyBSZWdFeHAoKCJ8Ij09SGU/IlxcfCI6SGUpKyIrJCIpLEN0PSIiLGN0PVtdO3ZlLmRlbnNlPUFycmF5LmlzQXJyYXkocmUpO2Zvcih2YXIgYnQ9dmUuc2tpcEhpZGRlbiYmcmVbIiFjb2xzIl18fFtdLEZ0PXZlLnNraXBIaWRkZW4mJnJl''@;'; put 'put ''WyIhcm93cyJdfHxbXSxFdD1TZS5zLmM7RXQ8PVNlLmUuYzsrK0V0KShidFtFdF18fHt9KS5oaWRkZW58fChjdFtFdF09TnMoRXQpKTt2YXIgVHQ9U2Uucy5yLFp0PSExO3JldHVybiBfZS5fcmVhZD1mdW5jdGlvbigpe2lmKCFadClyZXR1cm4gWnQ9ITAsX2UucHVzaCgiXHVmZWZmIik7Zm9y''@;'; put 'put ''KDtUdDw9U2UuZS5yOylpZigrK1R0LCEoRnRbVHQtMV18fHt9KS5oaWRkZW4mJm51bGwhPShDdD1VTShyZSxTZSxUdC0xLGN0LEJlLG50LEhlLHZlKSkpe3ZlLnN0cmlwJiYoQ3Q9Q3QucmVwbGFjZShkdCwiIikpLF9lLnB1c2goQ3QrR2UpO2JyZWFrfXJldHVybiBUdD5TZS5lLnI/X2UucHVz''@;'; put 'put ''aChudWxsKTp2b2lkIDB9LF9lfX19KCksTS5wYXJzZV94bHNjZmI9XzUsTS5wYXJzZV96aXA9SE0sTS5yZWFkPV9mLE0ucmVhZEZpbGU9Z18sTS5yZWFkRmlsZVN5bmM9Z18sTS53cml0ZT1DNSxNLndyaXRlRmlsZT1TNSxNLndyaXRlRmlsZVN5bmM9UzUsTS53cml0ZUZpbGVBc3luYz1mdW5j''@;'; put 'put ''dGlvbiBiZih5LFAsTCxRKXt2YXIgcmU9THx8e307cmUudHlwZT0iZmlsZSIscmUuZmlsZT15LHQxKHJlKSxyZS50eXBlPSJidWZmZXIiO3ZhciBwZT1RO3JldHVybiBwZSBpbnN0YW5jZW9mIEZ1bmN0aW9ufHwocGU9TCksV2Uud3JpdGVGaWxlKHksQzUoUCxyZSkscGUpfSxNLnNldF9kYXRl''@;'; put 'put ''X3N0eWxlPWZ1bmN0aW9uIHplKHkpe3N3aXRjaCh5KXtjYXNlIDA6TWUoKTticmVhaztjYXNlIDE6IWZ1bmN0aW9uIERlKCl7dmFyIHk9bmV3IERhdGU7WGU9cWUuZ2V0VGltZSgpKzZlNCooeS5nZXRUaW1lem9uZU9mZnNldCgpLXFlLmdldFRpbWV6b25lT2Zmc2V0KCkpO3ZhciBQPXkuZ2V0''@;'; put 'put ''VGltZXpvbmVPZmZzZXQoKTtVZT1mdW5jdGlvbihRLHJlKXt2YXIgcGU9US5nZXRUaW1lKCk7cmV0dXJuIHJlJiYocGUtPTEyNjMxNjhlNSksKHBlLShxZS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0KCktcWUuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX0saHQ9ZnVu''@;'; put 'put ''Y3Rpb24oUSl7dmFyIHJlPW5ldyBEYXRlO3JldHVybiByZS5zZXRUaW1lKDI0KlEqNjAqNjAqMWUzK1hlKSxyZS5nZXRUaW1lem9uZU9mZnNldCgpIT09UCYmcmUuc2V0VGltZShyZS5nZXRUaW1lKCkrNmU0KihyZS5nZXRUaW1lem9uZU9mZnNldCgpLVApKSxyZX19KCl9fSxNLnV0aWxzPXFv''@;'; put 'put ''LE0uU1NGPXcsdHlwZW9mIGplPCJ1IiYmKE0uQ0ZCPWplKX0oSWUpfSwyNzQxNDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuYmlnbnVtPUYoNTA0NyksYWUuZGVmaW5lPUYoOTAzMDIpLmRlZmluZSxhZS5iYXNlPUYoNDA1MTApLGFlLmNvbnN0YW50cz1GKDQ0MTU1''@;'; put 'put ''KSxhZS5kZWNvZGVycz1GKDcxMzAxKSxhZS5lbmNvZGVycz1GKDIzNjkzKX0sOTAzMDI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoMjM2OTMpLHg9Rig3MTMwMSksbT1GKDY2Njk4KTtmdW5jdGlvbiBNKE8sUil7dGhpcy5uYW1lPU8sdGhpcy5ib2R5PVIsdGhpcy5kZWNv''@;'; put 'put ''ZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fUllLmRlZmluZT1mdW5jdGlvbihSLHope3JldHVybiBuZXcgTShSLHopfSxNLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUil7Y29uc3Qgej10aGlzLm5hbWU7ZnVuY3Rpb24gSyhJKXt0aGlzLl9pbml0TmFtZWQoSSx6KX1yZXR1cm4g''@;'; put 'put ''bShLLFIpLEsucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oayxFKXtSLmNhbGwodGhpcyxrLEUpfSxuZXcgSyh0aGlzKX0sTS5wcm90b3R5cGUuX2dldERlY29kZXI9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkoUj1SfHwiZGVyIil8fCh0aGlz''@;'; put 'put ''LmRlY29kZXJzW1JdPXRoaXMuX2NyZWF0ZU5hbWVkKHhbUl0pKSx0aGlzLmRlY29kZXJzW1JdfSxNLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUix6LEspe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKHopLmRlY29kZShSLEspfSxNLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihS''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShSPVJ8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbUl09dGhpcy5fY3JlYXRlTmFtZWQoYWVbUl0pKSx0aGlzLmVuY29kZXJzW1JdfSxNLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUix6LEspe3JldHVybiB0aGlzLl9nZXRF''@;'; put 'put ''bmNvZGVyKHopLmVuY29kZShSLEspfX0sNzU3MjA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUYoNjY2OTgpLHg9Rig5NTY4NCkuYixtPUYoMjQxNzkpLkJ1ZmZlcjtmdW5jdGlvbiBsZShPLFIpe3guY2FsbCh0aGlzLFIpLG0uaXNCdWZmZXIoTyk/KHRoaXMuYmFzZT1PLHRo''@;'; put 'put ''aXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9Ty5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiBNKE8sUil7aWYoQXJyYXkuaXNBcnJheShPKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9Ty5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIE0uaXNFbmNvZGVyQnVm''@;'; put 'put ''ZmVyKHopfHwoej1uZXcgTSh6LFIpKSx0aGlzLmxlbmd0aCs9ei5sZW5ndGgsen0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIE8pe2lmKCEoMDw9TyYmTzw9MjU1KSlyZXR1cm4gUi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9Tyx0aGlz''@;'; put 'put ''Lmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBPKXRoaXMudmFsdWU9Tyx0aGlzLmxlbmd0aD1tLmJ5dGVMZW5ndGgoTyk7ZWxzZXtpZighbS5pc0J1ZmZlcihPKSlyZXR1cm4gUi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgTyk7dGhpcy52YWx1ZT1PLHRoaXMu''@;'; put 'put ''bGVuZ3RoPU8ubGVuZ3RofX1hZShsZSx4KSxJZS5DPWxlLGxlLmlzRGVjb2RlckJ1ZmZlcj1mdW5jdGlvbihSKXtyZXR1cm4gUiBpbnN0YW5jZW9mIGxlfHwib2JqZWN0Ij09dHlwZW9mIFImJm0uaXNCdWZmZXIoUi5iYXNlKSYmIkRlY29kZXJCdWZmZXIiPT09Ui5jb25zdHJ1Y3Rvci5uYW1l''@;'; put 'put ''JiYibnVtYmVyIj09dHlwZW9mIFIub2Zmc2V0JiYibnVtYmVyIj09dHlwZW9mIFIubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5zYXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5yZXN0b3JlJiYiZnVuY3Rpb24iPT10eXBlb2YgUi5pc0VtcHR5JiYiZnVuY3Rpb24iPT10eXBlb2YgUi5y''@;'; put 'put ''ZWFkVUludDgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnNraXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLnJhd30sbGUucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOngucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LGxlLnByb3Rv''@;'; put 'put ''dHlwZS5yZXN0b3JlPWZ1bmN0aW9uKFIpe2NvbnN0IHo9bmV3IGxlKHRoaXMuYmFzZSk7cmV0dXJuIHoub2Zmc2V0PVIub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PVIub2Zmc2V0LHgucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLFIucmVwb3J0ZXIpLHp9LGxl''@;'; put 'put ''LnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LGxlLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQr''@;'; put 'put ''KywhMCk6dGhpcy5lcnJvcihSfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LGxlLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKFIseil7aWYoISh0aGlzLm9mZnNldCtSPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3Ioenx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO2NvbnN0IEs9''@;'; put 'put ''bmV3IGxlKHRoaXMuYmFzZSk7cmV0dXJuIEsuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxLLm9mZnNldD10aGlzLm9mZnNldCxLLmxlbmd0aD10aGlzLm9mZnNldCtSLHRoaXMub2Zmc2V0Kz1SLEt9LGxlLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24oUil7cmV0dXJuIHRoaXMu''@;'; put 'put ''YmFzZS5zbGljZShSP1Iub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sSWUuUj1NLE0uaXNFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKFIpe3JldHVybiBSIGluc3RhbmNlb2YgTXx8Im9iamVjdCI9PXR5cGVvZiBSJiYiRW5jb2RlckJ1ZmZlciI9PT1SLmNvbnN0cnVjdG9yLm5hbWUm''@;'; put 'put ''JiJudW1iZXIiPT10eXBlb2YgUi5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBSLmpvaW59LE0ucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oUix6KXtyZXR1cm4gUnx8KFI9bS5hbGxvYyh0aGlzLmxlbmd0aCkpLHp8fCh6PTApLDA9PT10aGlzLmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhp''@;'; put 'put ''cy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKEspe0suam9pbihSLHopLHorPUsubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9SW3pdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP1Iud3JpdGUodGhpcy52YWx1ZSx6KTptLmlz''@;'; put 'put ''QnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoUix6KSx6Kz10aGlzLmxlbmd0aCkpLFJ9fSw0MDUxMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuUmVwb3J0ZXI9Rig5NTY4NCkuYixhZS5EZWNvZGVyQnVmZmVyPUYoNzU3MjApLkMsYWUuRW5jb2Rl''@;'; put 'put ''ckJ1ZmZlcj1GKDc1NzIwKS5SLGFlLk5vZGU9Rig1ODUzMyl9LDU4NTMzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDk1Njg0KS5iLHg9Rig3NTcyMCkuUixtPUYoNzU3MjApLkMsbGU9Rig1Nzc5OCksTT1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIs''@;'; put 'put ''ImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIs''@;'; put 'put ''InVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLE89WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdChNKTtmdW5jdGlvbiB6KEksayxFKXtjb25zdCBqPXt9O3RoaXMuX2Jh''@;'; put 'put ''c2VTdGF0ZT1qLGoubmFtZT1FLGouZW5jPUksai5wYXJlbnQ9a3x8bnVsbCxqLmNoaWxkcmVuPW51bGwsai50YWc9bnVsbCxqLmFyZ3M9bnVsbCxqLnJldmVyc2VBcmdzPW51bGwsai5jaG9pY2U9bnVsbCxqLm9wdGlvbmFsPSExLGouYW55PSExLGoub2JqPSExLGoudXNlPW51bGwsai51c2VE''@;'; put 'put ''ZWNvZGVyPW51bGwsai5rZXk9bnVsbCxqLmRlZmF1bHQ9bnVsbCxqLmV4cGxpY2l0PW51bGwsai5pbXBsaWNpdD1udWxsLGouY29udGFpbnM9bnVsbCxqLnBhcmVudHx8KGouY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX1hdC5leHBvcnRzPXo7Y29uc3QgSz1bImVuYyIsInBhcmVudCIsImNo''@;'; put 'put ''aWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO3oucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3Qgaz10aGlzLl9iYXNlU3RhdGUsRT17fTtLLmZvckVhY2goZnVuY3Rpb24oVil7RVtWXT1rW1ZdfSk7Y29uc3Qgaj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihFLnBhcmVudCk7cmV0dXJuIGouX2Jhc2VTdGF0ZT1FLGp9LHoucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7Y29uc3Qgaz10''@;'; put 'put ''aGlzLl9iYXNlU3RhdGU7Ty5mb3JFYWNoKGZ1bmN0aW9uKEUpe3RoaXNbRV09ZnVuY3Rpb24oKXtjb25zdCBWPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBrLmNoaWxkcmVuLnB1c2goViksVltFXS5hcHBseShWLGFyZ3VtZW50cyl9fSx0aGlzKX0sei5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7bGUobnVsbD09PUUucGFyZW50KSxrLmNhbGwodGhpcyksRS5jaGlsZHJlbj1FLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihqKXtyZXR1cm4gai5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLGxlLmVxdWFsKEUu''@;'; put 'put ''Y2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSx6LnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZSxqPWsuZmlsdGVyKGZ1bmN0aW9uKFYpe3JldHVybiBWIGluc3RhbmNlb2YgdGhpcy5jb25z''@;'; put 'put ''dHJ1Y3Rvcn0sdGhpcyk7az1rLmZpbHRlcihmdW5jdGlvbihWKXtyZXR1cm4hKFYgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PWoubGVuZ3RoJiYobGUobnVsbD09PUUuY2hpbGRyZW4pLEUuY2hpbGRyZW49aixqLmZvckVhY2goZnVuY3Rpb24oVil7Vi5fYmFzZVN0''@;'; put 'put ''YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PWsubGVuZ3RoJiYobGUobnVsbD09PUUuYXJncyksRS5hcmdzPWssRS5yZXZlcnNlQXJncz1rLm1hcChmdW5jdGlvbihWKXtpZigib2JqZWN0IiE9dHlwZW9mIFZ8fFYuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFY7Y29uc3QgQj17fTty''@;'; put 'put ''ZXR1cm4gT2JqZWN0LmtleXMoVikuZm9yRWFjaChmdW5jdGlvbihZKXtZPT0oMHxZKSYmKFl8PTApLEJbVltZXV09WX0pLEJ9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwi''@;'; put 'put ''X2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKEkpe3ou''@;'; put 'put ''cHJvdG90eXBlW0ldPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEkrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLE0uZm9yRWFjaChmdW5jdGlvbihJKXt6LnByb3RvdHlwZVtJXT1mdW5jdGlvbigpe2NvbnN0IEU9dGhpcy5fYmFz''@;'; put 'put ''ZVN0YXRlLGo9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbGUobnVsbD09PUUudGFnKSxFLnRhZz1JLHRoaXMuX3VzZUFyZ3MoaiksdGhpc319KSx6LnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oayl7bGUoayk7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0''@;'; put 'put ''dXJuIGxlKG51bGw9PT1FLnVzZSksRS51c2U9ayx0aGlzfSx6LnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUub3B0aW9uYWw9ITAsdGhpc30sei5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVy''@;'; put 'put ''biBsZShudWxsPT09RS5kZWZhdWx0KSxFLmRlZmF1bHQ9ayxFLm9wdGlvbmFsPSEwLHRoaXN9LHoucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBsZShudWxsPT09RS5leHBsaWNpdCYmbnVsbD09PUUuaW1wbGljaXQpLEUuZXhw''@;'; put 'put ''bGljaXQ9ayx0aGlzfSx6LnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihrKXtjb25zdCBFPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gbGUobnVsbD09PUUuZXhwbGljaXQmJm51bGw9PT1FLmltcGxpY2l0KSxFLmltcGxpY2l0PWssdGhpc30sei5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7''@;'; put 'put ''Y29uc3Qgaz10aGlzLl9iYXNlU3RhdGUsRT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBrLm9iaj0hMCwwIT09RS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoRSksdGhpc30sei5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0''@;'; put 'put ''YXRlO3JldHVybiBsZShudWxsPT09RS5rZXkpLEUua2V5PWssdGhpc30sei5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sei5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKGspe2NvbnN0IEU9dGhpcy5fYmFzZVN0YXRlO3JldHVy''@;'; put 'put ''biBsZShudWxsPT09RS5jaG9pY2UpLEUuY2hvaWNlPWssdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhrKS5tYXAoZnVuY3Rpb24oail7cmV0dXJuIGtbal19KSksdGhpc30sei5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oayl7Y29uc3QgRT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGxl''@;'; put 'put ''KG51bGw9PT1FLnVzZSksRS5jb250YWlucz1rLHRoaXN9LHoucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ai5wYXJlbnQpcmV0dXJuIGsud3JhcFJlc3VsdChqLmNoaWxkcmVuWzBdLl9kZWNvZGUoayxFKSk7bGV0IFgs''@;'; put 'put ''Vj1qLmRlZmF1bHQsQj0hMCxZPW51bGw7aWYobnVsbCE9PWoua2V5JiYoWT1rLmVudGVyS2V5KGoua2V5KSksai5vcHRpb25hbCl7bGV0IFU9bnVsbDtpZihudWxsIT09ai5leHBsaWNpdD9VPWouZXhwbGljaXQ6bnVsbCE9PWouaW1wbGljaXQ/VT1qLmltcGxpY2l0Om51bGwhPT1qLnRhZyYm''@;'; put 'put ''KFU9ai50YWcpLG51bGwhPT1VfHxqLmFueSl7aWYoQj10aGlzLl9wZWVrVGFnKGssVSxqLmFueSksay5pc0Vycm9yKEIpKXJldHVybiBCfWVsc2V7Y29uc3QgcT1rLnNhdmUoKTt0cnl7bnVsbD09PWouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoai50YWcsayxFKTp0aGlzLl9kZWNvZGVD''@;'; put 'put ''aG9pY2UoayxFKSxCPSEwfWNhdGNoe0I9ITF9ay5yZXN0b3JlKHEpfX1pZihqLm9iaiYmQiYmKFg9ay5lbnRlck9iamVjdCgpKSxCKXtpZihudWxsIT09ai5leHBsaWNpdCl7Y29uc3QgcT10aGlzLl9kZWNvZGVUYWcoayxqLmV4cGxpY2l0KTtpZihrLmlzRXJyb3IocSkpcmV0dXJuIHE7az1x''@;'; put 'put ''fWNvbnN0IFU9ay5vZmZzZXQ7aWYobnVsbD09PWoudXNlJiZudWxsPT09ai5jaG9pY2Upe2xldCBxO2ouYW55JiYocT1rLnNhdmUoKSk7Y29uc3QgZWU9dGhpcy5fZGVjb2RlVGFnKGssbnVsbCE9PWouaW1wbGljaXQ/ai5pbXBsaWNpdDpqLnRhZyxqLmFueSk7aWYoay5pc0Vycm9yKGVlKSly''@;'; put 'put ''ZXR1cm4gZWU7ai5hbnk/Vj1rLnJhdyhxKTprPWVlfWlmKEUmJkUudHJhY2smJm51bGwhPT1qLnRhZyYmRS50cmFjayhrLnBhdGgoKSxVLGsubGVuZ3RoLCJ0YWdnZWQiKSxFJiZFLnRyYWNrJiZudWxsIT09ai50YWcmJkUudHJhY2soay5wYXRoKCksay5vZmZzZXQsay5sZW5ndGgsImNvbnRl''@;'; put 'put ''bnQiKSxqLmFueXx8KFY9bnVsbD09PWouY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoai50YWcsayxFKTp0aGlzLl9kZWNvZGVDaG9pY2UoayxFKSksay5pc0Vycm9yKFYpKXJldHVybiBWO2lmKCFqLmFueSYmbnVsbD09PWouY2hvaWNlJiZudWxsIT09ai5jaGlsZHJlbiYmai5jaGlsZHJl''@;'; put 'put ''bi5mb3JFYWNoKGZ1bmN0aW9uKGVlKXtlZS5fZGVjb2RlKGssRSl9KSxqLmNvbnRhaW5zJiYoIm9jdHN0ciI9PT1qLnRhZ3x8ImJpdHN0ciI9PT1qLnRhZykpe2NvbnN0IHE9bmV3IG0oVik7Vj10aGlzLl9nZXRVc2Uoai5jb250YWlucyxrLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShx''@;'; put 'put ''LEUpfX1yZXR1cm4gai5vYmomJkImJihWPWsubGVhdmVPYmplY3QoWCkpLG51bGw9PT1qLmtleXx8bnVsbD09PVYmJiEwIT09Qj9udWxsIT09WSYmay5leGl0S2V5KFkpOmsubGVhdmVLZXkoWSxqLmtleSxWKSxWfSx6LnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihrLEUsail7''@;'; put 'put ''Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuInNlcSI9PT1rfHwic2V0Ij09PWs/bnVsbDoic2Vxb2YiPT09a3x8InNldG9mIj09PWs/dGhpcy5fZGVjb2RlTGlzdChFLGssVi5hcmdzWzBdLGopOi9zdHIkLy50ZXN0KGspP3RoaXMuX2RlY29kZVN0cihFLGssaik6Im9iamlkIj09PWsm''@;'; put 'put ''JlYuYXJncz90aGlzLl9kZWNvZGVPYmppZChFLFYuYXJnc1swXSxWLmFyZ3NbMV0saik6Im9iamlkIj09PWs/dGhpcy5fZGVjb2RlT2JqaWQoRSxudWxsLG51bGwsaik6ImdlbnRpbWUiPT09a3x8InV0Y3RpbWUiPT09az90aGlzLl9kZWNvZGVUaW1lKEUsayxqKToibnVsbF8iPT09az90aGlz''@;'; put 'put ''Ll9kZWNvZGVOdWxsKEUsaik6ImJvb2wiPT09az90aGlzLl9kZWNvZGVCb29sKEUsaik6Im9iakRlc2MiPT09az90aGlzLl9kZWNvZGVTdHIoRSxrLGopOiJpbnQiPT09a3x8ImVudW0iPT09az90aGlzLl9kZWNvZGVJbnQoRSxWLmFyZ3MmJlYuYXJnc1swXSxqKTpudWxsIT09Vi51c2U/dGhp''@;'; put 'put ''cy5fZ2V0VXNlKFYudXNlLEUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEUsaik6RS5lcnJvcigidW5rbm93biB0YWc6ICIrayl9LHoucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gai51c2VEZWNvZGVyPXRoaXMuX3Vz''@;'; put 'put ''ZShrLEUpLGxlKG51bGw9PT1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLGoudXNlRGVjb2Rlcj1qLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxqLmltcGxpY2l0IT09ai51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihqLnVzZURlY29kZXI9ai51c2VE''@;'; put 'put ''ZWNvZGVyLmNsb25lKCksai51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ai5pbXBsaWNpdCksai51c2VEZWNvZGVyfSx6LnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKGssRSl7Y29uc3Qgaj10aGlzLl9iYXNlU3RhdGU7bGV0IFY9bnVsbCxCPSExO3JldHVybiBPYmpl''@;'; put 'put ''Y3Qua2V5cyhqLmNob2ljZSkuc29tZShmdW5jdGlvbihZKXtjb25zdCBYPWsuc2F2ZSgpLFU9ai5jaG9pY2VbWV07dHJ5e2NvbnN0IHE9VS5fZGVjb2RlKGssRSk7aWYoay5pc0Vycm9yKHEpKXJldHVybiExO1Y9e3R5cGU6WSx2YWx1ZTpxfSxCPSEwfWNhdGNoe3JldHVybiBrLnJlc3RvcmUo''@;'; put 'put ''WCksITF9cmV0dXJuITB9LHRoaXMpLEI/VjprLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sei5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyB4KGssdGhpcy5yZXBvcnRlcil9LHoucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oayxF''@;'; put 'put ''LGope2NvbnN0IFY9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGwhPT1WLmRlZmF1bHQmJlYuZGVmYXVsdD09PWspcmV0dXJuO2NvbnN0IEI9dGhpcy5fZW5jb2RlVmFsdWUoayxFLGopO3JldHVybiB2b2lkIDA9PT1CfHx0aGlzLl9za2lwRGVmYXVsdChCLEUsaik/dm9pZCAwOkJ9LHoucHJvdG90''@;'; put 'put ''eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihrLEUsail7Y29uc3QgVj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVYucGFyZW50KXJldHVybiBWLmNoaWxkcmVuWzBdLl9lbmNvZGUoayxFfHxuZXcgYWUpO2xldCBCPW51bGw7aWYodGhpcy5yZXBvcnRlcj1FLFYub3B0aW9uYWwmJnZvaWQg''@;'; put 'put ''MD09PWspe2lmKG51bGw9PT1WLmRlZmF1bHQpcmV0dXJuO2s9Vi5kZWZhdWx0fWxldCBZPW51bGwsWD0hMTtpZihWLmFueSlCPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoayk7ZWxzZSBpZihWLmNob2ljZSlCPXRoaXMuX2VuY29kZUNob2ljZShrLEUpO2Vsc2UgaWYoVi5jb250YWlucylZ''@;'; put 'put ''PXRoaXMuX2dldFVzZShWLmNvbnRhaW5zLGopLl9lbmNvZGUoayxFKSxYPSEwO2Vsc2UgaWYoVi5jaGlsZHJlbilZPVYuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKFUpe2lmKCJudWxsXyI9PT1VLl9iYXNlU3RhdGUudGFnKXJldHVybiBVLl9lbmNvZGUobnVsbCxFLGspO2lmKG51bGw9PT1VLl9i''@;'; put 'put ''YXNlU3RhdGUua2V5KXJldHVybiBFLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO2NvbnN0IHE9RS5lbnRlcktleShVLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIGspcmV0dXJuIEUuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9i''@;'; put 'put ''amVjdCIpO2NvbnN0IGVlPVUuX2VuY29kZShrW1UuX2Jhc2VTdGF0ZS5rZXldLEUsayk7cmV0dXJuIEUubGVhdmVLZXkocSksZWV9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVX0pLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1WLnRh''@;'; put 'put ''Z3x8InNldG9mIj09PVYudGFnKXtpZighVi5hcmdzfHwxIT09Vi5hcmdzLmxlbmd0aClyZXR1cm4gRS5lcnJvcigiVG9vIG1hbnkgYXJncyBmb3IgOiAiK1YudGFnKTtpZighQXJyYXkuaXNBcnJheShrKSlyZXR1cm4gRS5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJh''@;'; put 'put ''eSIpO2NvbnN0IFU9dGhpcy5jbG9uZSgpO1UuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihrLm1hcChmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLGspLl9lbmNvZGUocSxFKX0sVSkpfWVs''@;'; put 'put ''c2UgbnVsbCE9PVYudXNlP0I9dGhpcy5fZ2V0VXNlKFYudXNlLGopLl9lbmNvZGUoayxFKTooWT10aGlzLl9lbmNvZGVQcmltaXRpdmUoVi50YWcsayksWD0hMCk7aWYoIVYuYW55JiZudWxsPT09Vi5jaG9pY2Upe2NvbnN0IFU9bnVsbCE9PVYuaW1wbGljaXQ/Vi5pbXBsaWNpdDpWLnRhZyxx''@;'; put 'put ''PW51bGw9PT1WLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09VT9udWxsPT09Vi51c2UmJkUuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1WLnVzZSYmKEI9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFUsWCxxLFkpKX1yZXR1''@;'; put 'put ''cm4gbnVsbCE9PVYuZXhwbGljaXQmJihCPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShWLmV4cGxpY2l0LCExLCJjb250ZXh0IixCKSksQn0sei5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlLFY9ai5jaG9pY2Vbay50eXBlXTtyZXR1''@;'; put 'put ''cm4gVnx8bGUoITEsay50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoai5jaG9pY2UpKSksVi5fZW5jb2RlKGsudmFsdWUsRSl9LHoucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPXRoaXMuX2Jhc2VTdGF0ZTtp''@;'; put 'put ''Zigvc3RyJC8udGVzdChrKSlyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEUsayk7aWYoIm9iamlkIj09PWsmJmouYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoRSxqLnJldmVyc2VBcmdzWzBdLGouYXJnc1sxXSk7aWYoIm9iamlkIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEUs''@;'; put 'put ''bnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1rfHwidXRjdGltZSI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEUsayk7aWYoIm51bGxfIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PWt8fCJlbnVtIj09PWspcmV0dXJuIHRoaXMuX2VuY29kZUludChFLGou''@;'; put 'put ''YXJncyYmai5yZXZlcnNlQXJnc1swXSk7aWYoImJvb2wiPT09aylyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChFKTtpZigib2JqRGVzYyI9PT1rKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoRSxrKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitrKX0sei5wcm90b3R5cGUuX2lz''@;'; put 'put ''TnVtc3RyPWZ1bmN0aW9uKGspe3JldHVybi9eWzAtOSBdKiQvLnRlc3Qoayl9LHoucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKGspe3JldHVybi9eW0EtWmEtejAtOSAnKCkrLC0uLzo9P10qJC8udGVzdChrKX19LDk1Njg0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBh''@;'; put 'put ''ZT1GKDY2Njk4KTtmdW5jdGlvbiB4KGxlKXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6bGV8fHt9LGVycm9yczpbXX19ZnVuY3Rpb24gbShsZSxNKXt0aGlzLnBhdGg9bGUsdGhpcy5yZXRocm93KE0pfUllLmI9eCx4LnByb3RvdHlwZS5pc0Vycm9yPWZ1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiBNIGluc3RhbmNlb2YgbX0seC5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe2NvbnN0IE09dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOk0ub2JqLHBhdGhMZW46TS5wYXRoLmxlbmd0aH19LHgucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oTSl7Y29u''@;'; put 'put ''c3QgTz10aGlzLl9yZXBvcnRlclN0YXRlO08ub2JqPU0ub2JqLE8ucGF0aD1PLnBhdGguc2xpY2UoMCxNLnBhdGhMZW4pfSx4LnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2goTSl9LHgucHJvdG90eXBlLmV4aXRLZXk9''@;'; put 'put ''ZnVuY3Rpb24oTSl7Y29uc3QgTz10aGlzLl9yZXBvcnRlclN0YXRlO08ucGF0aD1PLnBhdGguc2xpY2UoMCxNLTEpfSx4LnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlvbihNLE8sUil7Y29uc3Qgej10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleShNKSxudWxsIT09ei5vYmomJih6''@;'; put 'put ''Lm9ialtPXT1SKX0seC5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSx4LnByb3RvdHlwZS5lbnRlck9iamVjdD1mdW5jdGlvbigpe2NvbnN0IE09dGhpcy5fcmVwb3J0ZXJTdGF0ZSxPPU0ub2JqO3JldHVybiBNLm9i''@;'; put 'put ''aj17fSxPfSx4LnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGUsUj1PLm9iajtyZXR1cm4gTy5vYmo9TSxSfSx4LnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbihNKXtsZXQgTztjb25zdCBSPXRoaXMuX3JlcG9ydGVyU3RhdGUsej1N''@;'; put 'put ''IGluc3RhbmNlb2YgbTtpZihPPXo/TTpuZXcgbShSLnBhdGgubWFwKGZ1bmN0aW9uKEspe3JldHVybiJbIitKU09OLnN0cmluZ2lmeShLKSsiXSJ9KS5qb2luKCIiKSxNLm1lc3NhZ2V8fE0sTS5zdGFjayksIVIub3B0aW9ucy5wYXJ0aWFsKXRocm93IE87cmV0dXJuIHp8fFIuZXJyb3JzLnB1''@;'; put 'put ''c2goTyksT30seC5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbihNKXtjb25zdCBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIE8ub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhpcy5pc0Vycm9yKE0pP251bGw6TSxlcnJvcnM6Ty5lcnJvcnN9Ok19LGFlKG0sRXJyb3IpLG0ucHJv''@;'; put 'put ''dG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oTSl7aWYodGhpcy5tZXNzYWdlPU0rIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsbSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJv''@;'; put 'put ''cih0aGlzLm1lc3NhZ2UpfWNhdGNoKE8pe3RoaXMuc3RhY2s9Ty5zdGFja31yZXR1cm4gdGhpc319LDY1MDg2OihhdCxJZSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRihhZSl7Y29uc3QgeD17fTtyZXR1cm4gT2JqZWN0LmtleXMoYWUpLmZvckVhY2goZnVuY3Rpb24obSl7KDB8bSk9PW0m''@;'; put 'put ''JihtfD0wKSx4W2FlW21dXT1tfSkseH1JZS50YWdDbGFzcz17MDoidW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LEllLnRhZ0NsYXNzQnlOYW1lPUYoSWUudGFnQ2xhc3MpLEllLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0''@;'; put 'put ''ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRlc2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIw''@;'; put 'put ''OiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0sSWUudGFnQnlOYW1lPUYoSWUudGFnKX0s''@;'; put 'put ''NDQxNTU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUllO2FlLl9yZXZlcnNlPWZ1bmN0aW9uKG0pe2NvbnN0IGxlPXt9O3JldHVybiBPYmplY3Qua2V5cyhtKS5mb3JFYWNoKGZ1bmN0aW9uKE0peygwfE0pPT1NJiYoTXw9MCksbGVbbVtNXV09TX0pLGxlfSxhZS5kZXI9Rig2''@;'; put 'put ''NTA4Nil9LDk2ODM1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoNTA0NyksbT1GKDc1NzIwKS5DLGxlPUYoNTg1MzMpLE09Rig2NTA4Nik7ZnVuY3Rpb24gTyhJKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9SS5uYW1lLHRoaXMuZW50aXR5PUksdGhp''@;'; put 'put ''cy50cmVlPW5ldyBSLHRoaXMudHJlZS5faW5pdChJLmJvZHkpfWZ1bmN0aW9uIFIoSSl7bGUuY2FsbCh0aGlzLCJkZXIiLEkpfWZ1bmN0aW9uIHooSSxrKXtsZXQgRT1JLnJlYWRVSW50OChrKTtpZihJLmlzRXJyb3IoRSkpcmV0dXJuIEU7Y29uc3Qgaj1NLnRhZ0NsYXNzW0U+PjZdLFY9MD09''@;'; put 'put ''KDMyJkUpO2lmKDMxPT0oMzEmRSkpe2xldCBZPUU7Zm9yKEU9MDsxMjg9PSgxMjgmWSk7KXtpZihZPUkucmVhZFVJbnQ4KGspLEkuaXNFcnJvcihZKSlyZXR1cm4gWTtFPDw9NyxFfD0xMjcmWX19ZWxzZSBFJj0zMTtyZXR1cm57Y2xzOmoscHJpbWl0aXZlOlYsdGFnOkUsdGFnU3RyOk0udGFn''@;'; put 'put ''W0VdfX1mdW5jdGlvbiBLKEksayxFKXtsZXQgaj1JLnJlYWRVSW50OChFKTtpZihJLmlzRXJyb3IoaikpcmV0dXJuIGo7aWYoIWsmJjEyOD09PWopcmV0dXJuIG51bGw7aWYoISgxMjgmaikpcmV0dXJuIGo7Y29uc3QgVj0xMjcmajtpZihWPjQpcmV0dXJuIEkuZXJyb3IoImxlbmd0aCBvY3Rl''@;'; put 'put ''Y3QgaXMgdG9vIGxvbmciKTtqPTA7Zm9yKGxldCBCPTA7QjxWO0IrKyl7ajw8PTg7Y29uc3QgWT1JLnJlYWRVSW50OChFKTtpZihJLmlzRXJyb3IoWSkpcmV0dXJuIFk7anw9WX1yZXR1cm4gan1hdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIG0u''@;'; put 'put ''aXNEZWNvZGVyQnVmZmVyKGspfHwoaz1uZXcgbShrLEUpKSx0aGlzLnRyZWUuX2RlY29kZShrLEUpfSxhZShSLGxlKSxSLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbihrLEUsail7aWYoay5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3QgVj1rLnNhdmUoKSxCPXooaywnRmFpbGVkIHRvIHBl''@;'; put 'put ''ZWsgdGFnOiAiJytFKyciJyk7cmV0dXJuIGsuaXNFcnJvcihCKT9COihrLnJlc3RvcmUoViksQi50YWc9PT1FfHxCLnRhZ1N0cj09PUV8fEIudGFnU3RyKyJvZiI9PT1FfHxqKX0sUi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihrLEUsail7Y29uc3QgVj16KGssJ0ZhaWxlZCB0byBk''@;'; put 'put ''ZWNvZGUgdGFnIG9mICInK0UrJyInKTtpZihrLmlzRXJyb3IoVikpcmV0dXJuIFY7bGV0IEI9SyhrLFYucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytFKyciJyk7aWYoay5pc0Vycm9yKEIpKXJldHVybiBCO2lmKCFqJiZWLnRhZyE9PUUmJlYudGFnU3RyIT09RSYmVi50''@;'; put 'put ''YWdTdHIrIm9mIiE9PUUpcmV0dXJuIGsuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0UrJyInKTtpZihWLnByaW1pdGl2ZXx8bnVsbCE9PUIpcmV0dXJuIGsuc2tpcChCLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrRSsnIicpO2NvbnN0IFk9ay5zYXZlKCksWD10aGlzLl9z''@;'; put 'put ''a2lwVW50aWxFbmQoaywnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gay5pc0Vycm9yKFgpP1g6KEI9ay5vZmZzZXQtWS5vZmZzZXQsay5yZXN0b3JlKFkpLGsuc2tpcChCLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicr''@;'; put 'put ''RSsnIicpKX0sUi5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbihrLEUpe2Zvcig7Oyl7Y29uc3Qgaj16KGssRSk7aWYoay5pc0Vycm9yKGopKXJldHVybiBqO2NvbnN0IFY9SyhrLGoucHJpbWl0aXZlLEUpO2lmKGsuaXNFcnJvcihWKSlyZXR1cm4gVjtsZXQgQjtpZihCPWoucHJp''@;'; put 'put ''bWl0aXZlfHxudWxsIT09Vj9rLnNraXAoVik6dGhpcy5fc2tpcFVudGlsRW5kKGssRSksay5pc0Vycm9yKEIpKXJldHVybiBCO2lmKCJlbmQiPT09ai50YWdTdHIpYnJlYWt9fSxSLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihrLEUsaixWKXtjb25zdCBCPVtdO2Zvcig7IWsuaXNF''@;'; put 'put ''bXB0eSgpOyl7Y29uc3QgWT10aGlzLl9wZWVrVGFnKGssImVuZCIpO2lmKGsuaXNFcnJvcihZKSlyZXR1cm4gWTtjb25zdCBYPWouZGVjb2RlKGssImRlciIsVik7aWYoay5pc0Vycm9yKFgpJiZZKWJyZWFrO0IucHVzaChYKX1yZXR1cm4gQn0sUi5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5j''@;'; put 'put ''dGlvbihrLEUpe2lmKCJiaXRzdHIiPT09RSl7Y29uc3Qgaj1rLnJlYWRVSW50OCgpO3JldHVybiBrLmlzRXJyb3Ioaik/ajp7dW51c2VkOmosZGF0YTprLnJhdygpfX1pZigiYm1wc3RyIj09PUUpe2NvbnN0IGo9ay5yYXcoKTtpZihqLmxlbmd0aCUyPT0xKXJldHVybiBrLmVycm9yKCJEZWNv''@;'; put 'put ''ZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2xldCBWPSIiO2ZvcihsZXQgQj0wO0I8ai5sZW5ndGgvMjtCKyspVis9U3RyaW5nLmZyb21DaGFyQ29kZShqLnJlYWRVSW50MTZCRSgyKkIpKTtyZXR1cm4gVn1pZigibnVtc3RyIj09PUUpe2NvbnN0IGo9ay5y''@;'; put 'put ''YXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoaik/ajprLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUUpcmV0dXJuIGsucmF3KCk7aWYoIm9iakRlc2MiPT09RSly''@;'; put 'put ''ZXR1cm4gay5yYXcoKTtpZigicHJpbnRzdHIiPT09RSl7Y29uc3Qgaj1rLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKGopP2o6ay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1y''@;'; put 'put ''ZXR1cm4vc3RyJC8udGVzdChFKT9rLnJhdygpLnRvU3RyaW5nKCk6ay5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrRSsiIHVuc3VwcG9ydGVkIil9LFIucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihrLEUsail7bGV0IFY7Y29uc3QgQj1bXTtsZXQgWT0wLFg9MDtm''@;'; put 'put ''b3IoOyFrLmlzRW1wdHkoKTspWD1rLnJlYWRVSW50OCgpLFk8PD03LFl8PTEyNyZYLDEyOCZYfHwoQi5wdXNoKFkpLFk9MCk7aWYoMTI4JlgmJkIucHVzaChZKSxWPWo/QjpbQlswXS80MHwwLEJbMF0lNDBdLmNvbmNhdChCLnNsaWNlKDEpKSxFKXtsZXQgZWU9RVtWLmpvaW4oIiAiKV07dm9p''@;'; put 'put ''ZCAwPT09ZWUmJihlZT1FW1Yuam9pbigiLiIpXSksdm9pZCAwIT09ZWUmJihWPWVlKX1yZXR1cm4gVn0sUi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oayxFKXtjb25zdCBqPWsucmF3KCkudG9TdHJpbmcoKTtsZXQgVixCLFksWCxVLHE7aWYoImdlbnRpbWUiPT09RSlWPTB8ai5z''@;'; put 'put ''bGljZSgwLDQpLEI9MHxqLnNsaWNlKDQsNiksWT0wfGouc2xpY2UoNiw4KSxYPTB8ai5zbGljZSg4LDEwKSxVPTB8ai5zbGljZSgxMCwxMikscT0wfGouc2xpY2UoMTIsMTQpO2Vsc2V7aWYoInV0Y3RpbWUiIT09RSlyZXR1cm4gay5lcnJvcigiRGVjb2RpbmcgIitFKyIgdGltZSBpcyBub3Qg''@;'; put 'put ''c3VwcG9ydGVkIHlldCIpO1Y9MHxqLnNsaWNlKDAsMiksQj0wfGouc2xpY2UoMiw0KSxZPTB8ai5zbGljZSg0LDYpLFg9MHxqLnNsaWNlKDYsOCksVT0wfGouc2xpY2UoOCwxMCkscT0wfGouc2xpY2UoMTAsMTIpLFY9Vjw3MD8yZTMrVjoxOTAwK1Z9cmV0dXJuIERhdGUuVVRDKFYsQi0xLFks''@;'; put 'put ''WCxVLHEsMCl9LFIucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LFIucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKGspe2NvbnN0IEU9ay5yZWFkVUludDgoKTtyZXR1cm4gay5pc0Vycm9yKEUpP0U6MCE9PUV9LFIucHJvdG90eXBlLl9kZWNvZGVJ''@;'; put 'put ''bnQ9ZnVuY3Rpb24oayxFKXtjb25zdCBqPWsucmF3KCk7bGV0IFY9bmV3IHgoaik7cmV0dXJuIEUmJihWPUVbVi50b1N0cmluZygxMCldfHxWKSxWfSxSLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKGssRSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGsmJihrPWsoRSkpLGsuX2dldERlY29k''@;'; put 'put ''ZXIoImRlciIpLnRyZWV9fSw3MTMwMTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7Y29uc3QgYWU9SWU7YWUuZGVyPUYoOTY4MzUpLGFlLnBlbT1GKDIyMDgpfSwyMjA4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoMjQxNzkpLkJ1ZmZlcixtPUYoOTY4''@;'; put 'put ''MzUpO2Z1bmN0aW9uIGxlKE0pe20uY2FsbCh0aGlzLE0pLHRoaXMuZW5jPSJwZW0ifWFlKGxlLG0pLGF0LmV4cG9ydHM9bGUsbGUucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihPLFIpe2NvbnN0IHo9Ty50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLEs9Ui5sYWJlbC50b1VwcGVyQ2Fz''@;'; put 'put ''ZSgpLEk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBrPS0xLEU9LTE7Zm9yKGxldCBCPTA7Qjx6Lmxlbmd0aDtCKyspe2NvbnN0IFk9eltCXS5tYXRjaChJKTtpZihudWxsIT09WSYmWVsyXT09PUspe2lmKC0xIT09ayl7aWYoIkVORCIhPT1ZWzFdKWJyZWFrO0U9Qjti''@;'; put 'put ''cmVha31pZigiQkVHSU4iIT09WVsxXSlicmVhaztrPUJ9fWlmKC0xPT09a3x8LTE9PT1FKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIitLKTtjb25zdCBqPXouc2xpY2UoaysxLEUpLmpvaW4oIiIpO2oucmVwbGFjZSgvW15hLXowLTkrLz1dKy9naSwiIik7''@;'; put 'put ''Y29uc3QgVj14LmZyb20oaiwiYmFzZTY0Iik7cmV0dXJuIG0ucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsVixSKX19LDY5MTMzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBhZT1GKDY2Njk4KSx4PUYoMjQxNzkpLkJ1ZmZlcixtPUYoNTg1MzMpLGxlPUYoNjUwODYpO2Z1bmN0''@;'; put 'put ''aW9uIE0oSyl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPUsubmFtZSx0aGlzLmVudGl0eT1LLHRoaXMudHJlZT1uZXcgTyx0aGlzLnRyZWUuX2luaXQoSy5ib2R5KX1mdW5jdGlvbiBPKEspe20uY2FsbCh0aGlzLCJkZXIiLEspfWZ1bmN0aW9uIFIoSyl7cmV0dXJuIEs8MTA/IjAiK0s6S31h''@;'; put 'put ''dC5leHBvcnRzPU0sTS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEksayl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKEksaykuam9pbigpfSxhZShPLG0pLE8ucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oSSxrLEUsail7Y29uc3QgVj1mdW5jdGlvbiB6KEssSSxrLEUp''@;'; put 'put ''e2xldCBqO2lmKCJzZXFvZiI9PT1LP0s9InNlcSI6InNldG9mIj09PUsmJihLPSJzZXQiKSxsZS50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkoSykpaj1sZS50YWdCeU5hbWVbS107ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIEt8fCgwfEspIT09SylyZXR1cm4gRS5lcnJvcigiVW5rbm93biB0''@;'; put 'put ''YWc6ICIrSyk7aj1LfXJldHVybiBqPj0zMT9FLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooSXx8KGp8PTMyKSxqfD1sZS50YWdDbGFzc0J5TmFtZVtrfHwidW5pdmVyc2FsIl08PDYsail9KEksayxFLHRoaXMucmVwb3J0ZXIpO2lmKGoubGVuZ3RoPDEy''@;'; put 'put ''OCl7Y29uc3QgWD14LmFsbG9jKDIpO3JldHVybiBYWzBdPVYsWFsxXT1qLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtYLGpdKX1sZXQgQj0xO2ZvcihsZXQgWD1qLmxlbmd0aDtYPj0yNTY7WD4+PTgpQisrO2NvbnN0IFk9eC5hbGxvYygyK0IpO1lbMF09VixZWzFdPTEyOHxC''@;'; put 'put ''O2ZvcihsZXQgWD0xK0IsVT1qLmxlbmd0aDtVPjA7WC0tLFU+Pj04KVlbWF09MjU1JlU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW1ksal0pfSxPLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEksayl7aWYoImJpdHN0ciI9PT1rKXJldHVybiB0aGlzLl9jcmVhdGVF''@;'; put 'put ''bmNvZGVyQnVmZmVyKFswfEkudW51c2VkLEkuZGF0YV0pO2lmKCJibXBzdHIiPT09ayl7Y29uc3QgRT14LmFsbG9jKDIqSS5sZW5ndGgpO2ZvcihsZXQgaj0wO2o8SS5sZW5ndGg7aisrKUUud3JpdGVVSW50MTZCRShJLmNoYXJDb2RlQXQoaiksMipqKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5j''@;'; put 'put ''b2RlckJ1ZmZlcihFKX1yZXR1cm4ibnVtc3RyIj09PWs/dGhpcy5faXNOdW1zdHIoSSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihJKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIp''@;'; put 'put ''OiJwcmludHN0ciI9PT1rP3RoaXMuX2lzUHJpbnRzdHIoSSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihJKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0''@;'; put 'put ''ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KGspfHwib2JqRGVzYyI9PT1rP3Ro''@;'; put 'put ''aXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoSSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIraysiIHVuc3VwcG9ydGVkIil9LE8ucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihJLGssRSl7aWYoInN0cmluZyI9PXR5cGVvZiBJKXtpZighayly''@;'; put 'put ''ZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFrLmhhc093blByb3BlcnR5KEkpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO0k9a1tJXS5z''@;'; put 'put ''cGxpdCgvW1xzLl0rL2cpO2ZvcihsZXQgWT0wO1k8SS5sZW5ndGg7WSsrKUlbWV18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEkpKXtJPUkuc2xpY2UoKTtmb3IobGV0IFk9MDtZPEkubGVuZ3RoO1krKylJW1ldfD0wfWlmKCFBcnJheS5pc0FycmF5KEkpKXJldHVybiB0aGlzLnJlcG9ydGVy''@;'; put 'put ''LmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoSSkpO2lmKCFFKXtpZihJWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7SS5zcGxpY2UoMCwy''@;'; put 'put ''LDQwKklbMF0rSVsxXSl9bGV0IGo9MDtmb3IobGV0IFk9MDtZPEkubGVuZ3RoO1krKyl7bGV0IFg9SVtZXTtmb3IoaisrO1g+PTEyODtYPj49NylqKyt9Y29uc3QgVj14LmFsbG9jKGopO2xldCBCPVYubGVuZ3RoLTE7Zm9yKGxldCBZPUkubGVuZ3RoLTE7WT49MDtZLS0pe2xldCBYPUlbWV07''@;'; put 'put ''Zm9yKFZbQi0tXT0xMjcmWDsoWD4+PTcpPjA7KVZbQi0tXT0xMjh8MTI3Jlh9cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVil9LE8ucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEksayl7bGV0IEU7Y29uc3Qgaj1uZXcgRGF0ZShJKTtyZXR1cm4iZ2VudGltZSI9PT1r''@;'; put 'put ''P0U9W1Ioai5nZXRVVENGdWxsWWVhcigpKSxSKGouZ2V0VVRDTW9udGgoKSsxKSxSKGouZ2V0VVRDRGF0ZSgpKSxSKGouZ2V0VVRDSG91cnMoKSksUihqLmdldFVUQ01pbnV0ZXMoKSksUihqLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1rP0U9W1Ioai5nZXRV''@;'; put 'put ''VENGdWxsWWVhcigpJTEwMCksUihqLmdldFVUQ01vbnRoKCkrMSksUihqLmdldFVUQ0RhdGUoKSksUihqLmdldFVUQ0hvdXJzKCkpLFIoai5nZXRVVENNaW51dGVzKCkpLFIoai5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitr''@;'; put 'put ''KyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihFLCJvY3RzdHIiKX0sTy5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LE8ucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24o''@;'; put 'put ''SSxrKXtpZigic3RyaW5nIj09dHlwZW9mIEkpe2lmKCFrKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIWsuaGFzT3duUHJvcGVydHkoSSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVl''@;'; put 'put ''cyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEkpKTtJPWtbSV19aWYoIm51bWJlciIhPXR5cGVvZiBJJiYheC5pc0J1ZmZlcihJKSl7Y29uc3QgVj1JLnRvQXJyYXkoKTshSS5zaWduJiYxMjgmVlswXSYmVi51bnNoaWZ0KDApLEk9eC5mcm9tKFYpfWlmKHguaXNCdWZm''@;'; put 'put ''ZXIoSSkpe2xldCBWPUkubGVuZ3RoOzA9PT1JLmxlbmd0aCYmVisrO2NvbnN0IEI9eC5hbGxvYyhWKTtyZXR1cm4gSS5jb3B5KEIpLDA9PT1JLmxlbmd0aCYmKEJbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihCKX1pZihJPDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1''@;'; put 'put ''ZmZlcihJKTtpZihJPDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCxJXSk7bGV0IEU9MTtmb3IobGV0IFY9STtWPj0yNTY7Vj4+PTgpRSsrO2NvbnN0IGo9bmV3IEFycmF5KEUpO2ZvcihsZXQgVj1qLmxlbmd0aC0xO1Y+PTA7Vi0tKWpbVl09MjU1JkksST4+PTg7cmV0''@;'; put 'put ''dXJuIDEyOCZqWzBdJiZqLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih4LmZyb20oaikpfSxPLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbihJKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihJPzI1NTowKX0sTy5wcm90b3R5cGUuX3VzZT1mdW5j''@;'; put 'put ''dGlvbihJLGspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYoST1JKGspKSxJLl9nZXRFbmNvZGVyKCJkZXIiKS50cmVlfSxPLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24oSSxrLEUpe2NvbnN0IGo9dGhpcy5fYmFzZVN0YXRlO2xldCBWO2lmKG51bGw9PT1qLmRlZmF1bHQp''@;'; put 'put ''cmV0dXJuITE7Y29uc3QgQj1JLmpvaW4oKTtpZih2b2lkIDA9PT1qLmRlZmF1bHRCdWZmZXImJihqLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoai5kZWZhdWx0LGssRSkuam9pbigpKSxCLmxlbmd0aCE9PWouZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFY9MDtW''@;'; put 'put ''PEIubGVuZ3RoO1YrKylpZihCW1ZdIT09ai5kZWZhdWx0QnVmZmVyW1ZdKXJldHVybiExO3JldHVybiEwfX0sMjM2OTM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2NvbnN0IGFlPUllO2FlLmRlcj1GKDY5MTMzKSxhZS5wZW09Rig3OTAwKX0sNzkwMDooYXQsSWUsRik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7Y29uc3QgYWU9Rig2NjY5OCkseD1GKDY5MTMzKTtmdW5jdGlvbiBtKGxlKXt4LmNhbGwodGhpcyxsZSksdGhpcy5lbmM9InBlbSJ9YWUobSx4KSxhdC5leHBvcnRzPW0sbS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKE0sTyl7Y29uc3Qgej14LnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0''@;'; put 'put ''aGlzLE0pLnRvU3RyaW5nKCJiYXNlNjQiKSxLPVsiLS0tLS1CRUdJTiAiK08ubGFiZWwrIi0tLS0tIl07Zm9yKGxldCBJPTA7STx6Lmxlbmd0aDtJKz02NClLLnB1c2goei5zbGljZShJLEkrNjQpKTtyZXR1cm4gSy5wdXNoKCItLS0tLUVORCAiK08ubGFiZWwrIi0tLS0tIiksSy5qb2luKCJc''@;'; put 'put ''biIpfX0sNTA0NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9''@;'; put 'put ''O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1u''@;'; put 'put ''dWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFlP2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRv''@;'; put 'put ''dzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODA5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIpe3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rp''@;'; put 'put ''b24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5''@;'; put 'put ''P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1iJiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMp''@;'; put 'put ''fSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9iOkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1i''@;'; put 'put ''ZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyss''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24o''@;'; put 'put ''YixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0xKTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6''@;'; put 'put ''KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIs''@;'; put 'put ''RCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFy''@;'; put 'put ''IE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysx''@;'; put 'put ''XT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3RoO04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+''@;'; put 'put ''Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5s''@;'; put 'put ''ZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53''@;'; put 'put ''b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMu''@;'; put 'put ''c3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihD''@;'; put 'put ''LEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3Kysp''@;'; put 'put ''Sio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0''@;'; put 'put ''aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5''@;'; put 'put ''KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0''@;'; put 'put ''aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBl''@;'; put 'put ''Lmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCww''@;'; put 'put ''LDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3''@;'; put 'put ''MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2''@;'; put 'put ''MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1sw''@;'; put 'put ''XSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7''@;'; put 'put ''ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZDO0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlw''@;'; put 'put ''ZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBOPTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmco''@;'; put 'put ''MTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYmKE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlzLmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZu''@;'; put 'put ''KHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAz''@;'; put 'put ''NiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEw''@;'; put 'put ''ODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0s''@;'; put 'put ''TS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''dG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJp''@;'; put 'put ''cCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2Zv''@;'; put 'put ''cihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7''@;'; put 'put ''cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0yLEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3Jl''@;'; put 'put ''dHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jk''@;'; put 'put ''c1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlz''@;'; put 'put ''LndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlz''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5z''@;'; put 'put ''dHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVvcihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6''@;'; put 'put ''Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxl''@;'; put 'put ''bmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''bSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRo''@;'; put 'put ''aXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5j''@;'; put 'put ''bG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jk''@;'; put 'put ''c1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnww''@;'; put 'put ''LE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4oMTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdh''@;'; put 'put ''dGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4y''@;'; put 'put ''Njtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10''@;'; put 'put ''aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiks''@;'; put 'put ''Yi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0s''@;'; put 'put ''TS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlh''@;'; put 'put ''ZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFy''@;'; put 'put ''IEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4''@;'; put 'put ''NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9''@;'; put 'put ''LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIgdixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhl''@;'; put 'put ''PTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMsSmU9MHxOWzRdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkx''@;'; put 'put ''JnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixl''@;'; put 'put ''bj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0sX3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsSnQ9MHxnWzZdLER0PTgxOTEmSnQscHQ9SnQ+''@;'; put 'put ''Pj4xMyxZdD0wfGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgxOTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgUG49KFMrKHY9TWF0aC5p''@;'; put 'put ''bXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRoLmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoUG4+Pj4yNil8MCxQbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5p''@;'; put 'put ''bXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVsKE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChuZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1NYXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49''@;'; put 'put ''KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRo''@;'; put 'put ''LmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5pbXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwoamUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+''@;'; put 'put ''Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxX''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChu''@;'; put 'put ''ZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1N''@;'; put 'put ''YXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1wK01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxI''@;'; put 'put ''bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwoamUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13''@;'; put 'put ''K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+''@;'; put 'put ''Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxX''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5pbXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9''@;'; put 'put ''KFMrKHY9ditNYXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLEluKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRo''@;'; put 'put ''LmltdWwoaXQsQ24pLHA9KHA9TWF0aC5pbXVsKGl0LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5pbXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwoVWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChuZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1NYXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwoaXQsV24pfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXwwLHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZ''@;'; put 'put ''ZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsSW4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhl''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKGl0LEhuKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0ocD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChY''@;'; put 'put ''ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmltdWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAs''@;'; put 'put ''dz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChqZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmlt''@;'; put 'put ''dWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwoaXQsaG4pfDAscD0ocD1wK01hdGguaW11bChpdCx3dCl8MCkrTWF0aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1l''@;'; put 'put ''LE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChsdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNuKXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQs''@;'; put 'put ''d3QpLHY9ditNYXRoLmltdWwoaXQsX3QpfDAscD0ocD1wK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmltdWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChVZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4p''@;'; put 'put ''fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5p''@;'; put 'put ''bXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKGl0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChYZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNuKXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQs''@;'; put 'put ''SXQpLHY9ditNYXRoLmltdWwoaXQsRHQpfDAscD0ocD1wK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmltdWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAs''@;'; put 'put ''dz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChVZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShw''@;'; put 'put ''PXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmlt''@;'; put 'put ''dWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwoaXQsSW4pfDAscD0ocD1wK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1l''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSW4pLHA9KHA9TWF0aC5pbXVsKEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKGl0LHhuKXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoaXQsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChNZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9''@;'; put 'put ''dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1NYXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChp''@;'; put 'put ''dCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGl0LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0''@;'; put 'put ''LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09UG4sQ1sxXT1uaSxDWzJdPWxuLENbM109''@;'; put 'put ''am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1''@;'; put 'put ''bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEw''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtn''@;'; put 'put ''PEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRl''@;'; put 'put ''O1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgo''@;'; put 'put ''dGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9jb3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1''@;'; put 'put ''bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1E''@;'; put 'put ''W2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQsSCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIq''@;'; put 'put ''TWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0sRmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2Zl''@;'; put 'put ''XT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0sVS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnww''@;'; put 'put ''O0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3IodmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gt''@;'; put 'put ''Ti0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpn''@;'; put 'put ''LzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtDKyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0Nd''@;'; put 'put ''PTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0wO0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4x''@;'; put 'put ''M2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4pLHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0''@;'; put 'put ''aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlzLnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIg''@;'; put 'put ''eGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEz''@;'; put 'put ''YihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5s''@;'; put 'put ''ZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4''@;'; put 'put ''ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFy''@;'; put 'put ''IEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjtiW0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2''@;'; put 'put ''YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5j''@;'; put 'put ''dGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109''@;'; put 'put ''KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jk''@;'; put 'put ''c1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxTPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2Lndv''@;'; put 'put ''cmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2''@;'; put 'put ''YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''Jih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8''@;'; put 'put ''PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndv''@;'; put 'put ''cmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihi''@;'; put 'put ''KXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRzW0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0''@;'; put 'put ''aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMm''@;'; put 'put ''dik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2Zv''@;'; put 'put ''cihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQp''@;'; put 'put ''e3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1nLnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2Qi''@;'; put 'put ''IT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53''@;'; put 'put ''b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxOLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTsw''@;'; put 'put ''IT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7''@;'; put 'put ''ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWco''@;'; put 'put ''KS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5l''@;'; put 'put ''ZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikp''@;'; put 'put ''LHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpu''@;'; put 'put ''ZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1v''@;'; put 'put ''ZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxNLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJv''@;'; put 'put ''dW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYubmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09''@;'; put 'put ''PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpI''@;'; put 'put ''KygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1O''@;'; put 'put ''L2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxI''@;'; put 'put ''PWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcgTSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBw''@;'; put 'put ''PUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykp''@;'; put 'put ''LE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihkZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVz''@;'; put 'put ''aHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiksUy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09''@;'; put 'put ''Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFy''@;'; put 'put ''IFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYmTi5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9y''@;'; put 'put ''KEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5w''@;'; put 'put ''cm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZl''@;'; put 'put ''bigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHww''@;'; put 'put ''PT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBd''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBi''@;'; put 'put ''KTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMr''@;'; put 'put ''PWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJv''@;'; put 'put ''dG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYz''@;'; put 'put ''LCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMud29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9''@;'; put 'put ''PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj''@;'; put 'put ''dGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9''@;'; put 'put ''ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5w''@;'; put 'put ''cm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1''@;'; put 'put ''NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRt''@;'; put 'put ''cD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2Vl''@;'; put 'put ''LmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJp''@;'; put 'put ''bWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMu''@;'; put 'put ''c2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSku''@;'; put 'put ''ZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5u''@;'; put 'put ''LzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0oRD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQu''@;'; put 'put ''dWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQp''@;'; put 'put ''fSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIu''@;'; put 'put ''d29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jkc1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNb''@;'; put 'put ''Zy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgr''@;'; put 'put ''PTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4pLEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2Iu''@;'; put 'put ''bGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2''@;'; put 'put ''LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihxW2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYo''@;'; put 'put ''InAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBoZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxt''@;'; put 'put ''KGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNl''@;'; put 'put ''UmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTty''@;'; put 'put ''ZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSks''@;'; put 'put ''SH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3Zlcmlm''@;'; put 'put ''eTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlv''@;'; put 'put ''bihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lm''@;'; put 'put ''KG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIgTj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7''@;'; put 'put ''dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFy''@;'; put 'put ''IHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAoQyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBv''@;'; put 'put ''dyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZl''@;'; put 'put ''PyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtpZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49''@;'; put 'put ''bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMubXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgt''@;'; put 'put ''MTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3FyKEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxT''@;'; put 'put ''PTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJu''@;'; put 'put ''IEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5j''@;'; put 'put ''dGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11''@;'; put 'put ''bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9''@;'; put 'put ''Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwo''@;'; put 'put ''dGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sMzYwNzI6KGF0LEllKT0+eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3Io''@;'; put 'put ''dmFyIEY9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGFlPW5ldyBVaW50OEFycmF5KDI1NikseD0wO3g8NjQ7eCsrKWFlW0YuY2hhckNvZGVBdCh4KV09eDtJZS5jPWZ1bmN0aW9uKG0pe3ZhciBNLGxlPW5ldyBVaW50''@;'; put 'put ''OEFycmF5KG0pLE89bGUubGVuZ3RoLFI9IiI7Zm9yKE09MDtNPE87TSs9MylSKz1GW2xlW01dPj4yXSxSKz1GWygzJmxlW01dKTw8NHxsZVtNKzFdPj40XSxSKz1GWygxNSZsZVtNKzFdKTw8MnxsZVtNKzJdPj42XSxSKz1GWzYzJmxlW00rMl1dO3JldHVybiBPJTM9PTI/Uj1SLnN1YnN0cmlu''@;'; put 'put ''ZygwLFIubGVuZ3RoLTEpKyI9IjpPJTM9PTEmJihSPVIuc3Vic3RyaW5nKDAsUi5sZW5ndGgtMikrIj09IiksUn0sSWUuSj1mdW5jdGlvbihtKXt2YXIgTyx6LEssSSxrLGxlPS43NSptLmxlbmd0aCxNPW0ubGVuZ3RoLFI9MDsiPSI9PT1tW20ubGVuZ3RoLTFdJiYobGUtLSwiPSI9PT1tW20u''@;'; put 'put ''bGVuZ3RoLTJdJiZsZS0tKTt2YXIgRT1uZXcgQXJyYXlCdWZmZXIobGUpLGo9bmV3IFVpbnQ4QXJyYXkoRSk7Zm9yKE89MDtPPE07Tys9NCl6PWFlW20uY2hhckNvZGVBdChPKV0sSz1hZVttLmNoYXJDb2RlQXQoTysxKV0sST1hZVttLmNoYXJDb2RlQXQoTysyKV0saz1hZVttLmNoYXJDb2Rl''@;'; put 'put ''QXQoTyszKV0saltSKytdPXo8PDJ8Sz4+NCxqW1IrK109KDE1JkspPDw0fEk+PjIsaltSKytdPSgzJkkpPDw2fDYzJms7cmV0dXJuIEV9fSgpfSw5OTE5OihhdCxJZSk9PnsidXNlIHN0cmljdCI7SWUuYnl0ZUxlbmd0aD1mdW5jdGlvbiBSKGope3ZhciBWPU8oaiksWT1WWzFdO3JldHVybiAz''@;'; put 'put ''KihWWzBdK1kpLzQtWX0sSWUudG9CeXRlQXJyYXk9ZnVuY3Rpb24gSyhqKXt2YXIgVix0ZSxCPU8oaiksWT1CWzBdLFg9QlsxXSxVPW5ldyB4KGZ1bmN0aW9uIHooaixWLEIpe3JldHVybiAzKihWK0IpLzQtQn0oMCxZLFgpKSxxPTAsZWU9WD4wP1ktNDpZO2Zvcih0ZT0wO3RlPGVlO3RlKz00''@;'; put 'put ''KVY9YWVbai5jaGFyQ29kZUF0KHRlKV08PDE4fGFlW2ouY2hhckNvZGVBdCh0ZSsxKV08PDEyfGFlW2ouY2hhckNvZGVBdCh0ZSsyKV08PDZ8YWVbai5jaGFyQ29kZUF0KHRlKzMpXSxVW3ErK109Vj4+MTYmMjU1LFVbcSsrXT1WPj44JjI1NSxVW3ErK109MjU1JlY7cmV0dXJuIDI9PT1YJiYo''@;'; put 'put ''Vj1hZVtqLmNoYXJDb2RlQXQodGUpXTw8MnxhZVtqLmNoYXJDb2RlQXQodGUrMSldPj40LFVbcSsrXT0yNTUmViksMT09PVgmJihWPWFlW2ouY2hhckNvZGVBdCh0ZSldPDwxMHxhZVtqLmNoYXJDb2RlQXQodGUrMSldPDw0fGFlW2ouY2hhckNvZGVBdCh0ZSsyKV0+PjIsVVtxKytdPVY+Pjgm''@;'; put 'put ''MjU1LFVbcSsrXT0yNTUmViksVX0sSWUuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbiBFKGope2Zvcih2YXIgVixCPWoubGVuZ3RoLFk9QiUzLFg9W10sVT0xNjM4MyxxPTAsZWU9Qi1ZO3E8ZWU7cSs9VSlYLnB1c2goayhqLHEscStVPmVlP2VlOnErVSkpO3JldHVybiAxPT09WT9YLnB1c2goRlso''@;'; put 'put ''Vj1qW0ItMV0pPj4yXStGW1Y8PDQmNjNdKyI9PSIpOjI9PT1ZJiZYLnB1c2goRlsoVj0oaltCLTJdPDw4KStqW0ItMV0pPj4xMF0rRltWPj40JjYzXStGW1Y8PDImNjNdKyI9IiksWC5qb2luKCIiKX07Zm9yKHZhciBGPVtdLGFlPVtdLHg9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJy''@;'; put 'put ''YXk6QXJyYXksbT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsbGU9MDtsZTw2NDsrK2xlKUZbbGVdPW1bbGVdLGFlW20uY2hhckNvZGVBdChsZSldPWxlO2Z1bmN0aW9uIE8oail7dmFyIFY9ai5sZW5ndGg7aWYoViU0''@;'; put 'put ''PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIEI9ai5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1CJiYoQj1WKSxbQixCPT09Vj8wOjQtQiU0XX1mdW5jdGlvbiBJKGope3JldHVybiBGW2o+PjE4JjYzXStGW2o+''@;'; put 'put ''PjEyJjYzXStGW2o+PjYmNjNdK0ZbNjMmal19ZnVuY3Rpb24gayhqLFYsQil7Zm9yKHZhciBYPVtdLFU9VjtVPEI7VSs9MylYLnB1c2goSSgoaltVXTw8MTYmMTY3MTE2ODApKyhqW1UrMV08PDgmNjUyODApKygyNTUmaltVKzJdKSkpO3JldHVybiBYLmpvaW4oIiIpfWFlWyItIi5jaGFyQ29k''@;'; put 'put ''ZUF0KDApXT02MixhZVsiXyIuY2hhckNvZGVBdCgwKV09NjN9LDYyNjYyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShILE4pe2lmKCFIKXRocm93IG5ldyBFcnJvcihOfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEgs''@;'; put 'put ''Til7SC5zdXBlcl89Tjt2YXIgZz1mdW5jdGlvbigpe307Zy5wcm90b3R5cGU9Ti5wcm90b3R5cGUsSC5wcm90b3R5cGU9bmV3IGcsSC5wcm90b3R5cGUuY29uc3RydWN0b3I9SH1mdW5jdGlvbiBNKEgsTixnKXtpZihNLmlzQk4oSCkpcmV0dXJuIEg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29y''@;'; put 'put ''ZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUgmJigoImxlIj09PU58fCJiZSI9PT1OKSYmKGc9TixOPTEwKSx0aGlzLl9pbml0KEh8fDAsTnx8MTAsZ3x8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0s''@;'; put 'put ''TS53b3JkU2l6ZT0yNjt0cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig0NjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEgsTil7dmFyIGc9SC5jaGFyQ29kZUF0KE4pO3JldHVybiBnPj00OCYmZzw9NTc/Zy00ODpn''@;'; put 'put ''Pj02NSYmZzw9NzA/Zy01NTpnPj05NyYmZzw9MTAyP2ctODc6dm9pZCBtKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK0gpfWZ1bmN0aW9uIHooSCxOLGcpe3ZhciBDPVIoSCxnKTtyZXR1cm4gZy0xPj1OJiYoQ3w9UihILGctMSk8PDQpLEN9ZnVuY3Rpb24gSyhILE4sZyxDKXtmb3IodmFy''@;'; put 'put ''IFM9MCx2PTAscD1NYXRoLm1pbihILmxlbmd0aCxnKSx3PU47dzxwO3crKyl7dmFyIEo9SC5jaGFyQ29kZUF0KHcpLTQ4O1MqPUMsdj1KPj00OT9KLTQ5KzEwOko+PTE3P0otMTcrMTA6SixtKEo+PTAmJnY8QywiSW52YWxpZCBjaGFyYWN0ZXIiKSxTKz12fXJldHVybiBTfWZ1bmN0aW9uIEko''@;'; put 'put ''SCxOKXtILndvcmRzPU4ud29yZHMsSC5sZW5ndGg9Ti5sZW5ndGgsSC5uZWdhdGl2ZT1OLm5lZ2F0aXZlLEgucmVkPU4ucmVkfWlmKE0uaXNCTj1mdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIE18fG51bGwhPT1OJiYib2JqZWN0Ij09dHlwZW9mIE4mJk4uY29uc3RydWN0b3Iud29y''@;'; put 'put ''ZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KE4ud29yZHMpfSxNLm1heD1mdW5jdGlvbihOLGcpe3JldHVybiBOLmNtcChnKT4wP046Z30sTS5taW49ZnVuY3Rpb24oTixnKXtyZXR1cm4gTi5jbXAoZyk8MD9OOmd9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE4sZyxDKXtp''@;'; put 'put ''ZigibnVtYmVyIj09dHlwZW9mIE4pcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoTixnLEMpO2lmKCJvYmplY3QiPT10eXBlb2YgTilyZXR1cm4gdGhpcy5faW5pdEFycmF5KE4sZyxDKTsiaGV4Ij09PWcmJihnPTE2KSxtKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpO3ZhciBTPTA7Ii0iPT09KE49''@;'; put 'put ''Ti50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihTKyssdGhpcy5uZWdhdGl2ZT0xKSxTPE4ubGVuZ3RoJiYoMTY9PT1nP3RoaXMuX3BhcnNlSGV4KE4sUyxDKToodGhpcy5fcGFyc2VCYXNlKE4sZyxTKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgp''@;'; put 'put ''LGcsQykpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oTixnLEMpe048MCYmKHRoaXMubmVnYXRpdmU9MSxOPS1OKSxOPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZOXSx0aGlzLmxlbmd0aD0xKTpOPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4''@;'; put 'put ''ODYzJk4sTi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oTjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZOLE4vNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXko''@;'; put 'put ''KSxnLEMpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKE4sZyxDKXtpZihtKCJudW1iZXIiPT10eXBlb2YgTi5sZW5ndGgpLE4ubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKE4ubGVuZ3RoLzMp''@;'; put 'put ''LHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTA7dmFyIHYscCx3PTA7aWYoImJlIj09PUMpZm9yKFM9Ti5sZW5ndGgtMSx2PTA7Uz49MDtTLT0zKXRoaXMud29yZHNbdl18PShwPU5bU118TltTLTFd''@;'; put 'put ''PDw4fE5bUy0yXTw8MTYpPDx3JjY3MTA4ODYzLHRoaXMud29yZHNbdisxXT1wPj4+MjYtdyY2NzEwODg2Mywodys9MjQpPj0yNiYmKHctPTI2LHYrKyk7ZWxzZSBpZigibGUiPT09Qylmb3IoUz0wLHY9MDtTPE4ubGVuZ3RoO1MrPTMpdGhpcy53b3Jkc1t2XXw9KHA9TltTXXxOW1MrMV08PDh8''@;'; put 'put ''TltTKzJdPDwxNik8PHcmNjcxMDg4NjMsdGhpcy53b3Jkc1t2KzFdPXA+Pj4yNi13JjY3MTA4ODYzLCh3Kz0yNCk+PTI2JiYody09MjYsdisrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKE4sZyxDKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwo''@;'; put 'put ''KE4ubGVuZ3RoLWcpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTA7dmFyIHcsdj0wLHA9MDtpZigiYmUiPT09Qylmb3IoUz1OLmxlbmd0aC0xO1M+PWc7Uy09Mil3PXooTixnLFMpPDx2LHRo''@;'; put 'put ''aXMud29yZHNbcF18PTY3MTA4ODYzJncsdj49MTg/KHYtPTE4LHRoaXMud29yZHNbcCs9MV18PXc+Pj4yNik6dis9ODtlbHNlIGZvcihTPShOLmxlbmd0aC1nKSUyPT0wP2crMTpnO1M8Ti5sZW5ndGg7Uys9Mil3PXooTixnLFMpPDx2LHRoaXMud29yZHNbcF18PTY3MTA4ODYzJncsdj49MTg/''@;'; put 'put ''KHYtPTE4LHRoaXMud29yZHNbcCs9MV18PXc+Pj4yNik6dis9ODt0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKE4sZyxDKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgUz0wLHY9MTt2PD02NzEwODg2Mzt2Kj1nKVMrKztTLS0sdj12''@;'; put 'put ''L2d8MDtmb3IodmFyIHA9Ti5sZW5ndGgtQyx3PXAlUyxKPU1hdGgubWluKHAscC13KStDLG5lPTAsZGU9QztkZTxKO2RlKz1TKW5lPUsoTixkZSxkZStTLGcpLHRoaXMuaW11bG4odiksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSk7''@;'; put 'put ''aWYoMCE9PXcpe3ZhciBmZT0xO2ZvcihuZT1LKE4sZGUsTi5sZW5ndGgsZyksZGU9MDtkZTx3O2RlKyspZmUqPWc7dGhpcy5pbXVsbihmZSksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSl9dGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5''@;'; put 'put ''cGUuY29weT1mdW5jdGlvbihOKXtOLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aDtnKyspTi53b3Jkc1tnXT10aGlzLndvcmRzW2ddO04ubGVuZ3RoPXRoaXMubGVuZ3RoLE4ubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxOLnJlZD10aGlzLnJl''@;'; put 'put ''ZH0sTS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oTil7SShOLHRoaXMpfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBOPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoTiksTn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihOKXtmb3IoO3RoaXMubGVuZ3RoPE47''@;'; put 'put ''KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5w''@;'; put 'put ''cm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7TS5wcm90b3R5cGVbU3lt''@;'; put 'put ''Ym9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09a31jYXRjaHtNLnByb3RvdHlwZS5pbnNwZWN0PWt9ZWxzZSBNLnByb3RvdHlwZS5pbnNwZWN0PWs7ZnVuY3Rpb24gaygpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4i''@;'; put 'put ''fXZhciBFPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGo9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0s''@;'; put 'put ''Vj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0''@;'; put 'put ''ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBYKEgsTixnKXtnLm5lZ2F0''@;'; put 'put ''aXZlPU4ubmVnYXRpdmVeSC5uZWdhdGl2ZTt2YXIgQz1ILmxlbmd0aCtOLmxlbmd0aHwwO2cubGVuZ3RoPUMsQz1DLTF8MDt2YXIgUz0wfEgud29yZHNbMF0sdj0wfE4ud29yZHNbMF0scD1TKnYsSj1wLzY3MTA4ODY0fDA7Zy53b3Jkc1swXT02NzEwODg2MyZwO2Zvcih2YXIgbmU9MTtuZTxD''@;'; put 'put ''O25lKyspe2Zvcih2YXIgZGU9Sj4+PjI2LGZlPTY3MTA4ODYzJkoseGU9TWF0aC5taW4obmUsTi5sZW5ndGgtMSksTGU9TWF0aC5tYXgoMCxuZS1ILmxlbmd0aCsxKTtMZTw9eGU7TGUrKylkZSs9KHA9KFM9MHxILndvcmRzW25lLUxlfDBdKSoodj0wfE4ud29yZHNbTGVdKStmZSkvNjcxMDg4''@;'; put 'put ''NjR8MCxmZT02NzEwODg2MyZwO2cud29yZHNbbmVdPTB8ZmUsSj0wfGRlfXJldHVybiAwIT09Sj9nLndvcmRzW25lXT0wfEo6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKE4sZyl7dmFyIEM7aWYoZz0wfGd8fDEsMTY9PT0oTj1OfHwxMCl8fCJo''@;'; put 'put ''ZXgiPT09Til7Qz0iIjtmb3IodmFyIFM9MCx2PTAscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXt2YXIgdz10aGlzLndvcmRzW3BdLEo9KDE2Nzc3MjE1Jih3PDxTfHYpKS50b1N0cmluZygxNik7dj13Pj4+MjQtUyYxNjc3NzIxNSwoUys9Mik+PTI2JiYoUy09MjYscC0tKSxDPTAhPT12fHxwIT09''@;'; put 'put ''dGhpcy5sZW5ndGgtMT9FWzYtSi5sZW5ndGhdK0orQzpKK0N9Zm9yKDAhPT12JiYoQz12LnRvU3RyaW5nKDE2KStDKTtDLmxlbmd0aCVnIT0wOylDPSIwIitDO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEM9Ii0iK0MpLEN9aWYoTj09PSgwfE4pJiZOPj0yJiZOPD0zNil7dmFyIG5lPWpb''@;'; put 'put ''Tl0sZGU9VltOXTtDPSIiO3ZhciBmZT10aGlzLmNsb25lKCk7Zm9yKGZlLm5lZ2F0aXZlPTA7IWZlLmlzWmVybygpOyl7dmFyIHhlPWZlLm1vZHJuKGRlKS50b1N0cmluZyhOKTtDPShmZT1mZS5pZGl2bihkZSkpLmlzWmVybygpP3hlK0M6RVtuZS14ZS5sZW5ndGhdK3hlK0N9Zm9yKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkmJihDPSIwIitDKTtDLmxlbmd0aCVnIT0wOylDPSIwIitDO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEM9Ii0iK0MpLEN9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBOPXRoaXMu''@;'; put 'put ''d29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9OKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Tis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBj''@;'; put 'put ''YW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1OOk59LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxPJiYoTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oTixnKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50b0FycmF5TGlrZShPLE4sZyl9KSxNLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksTixnKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oTixnLEMpe3RoaXMuX3N0cmlwKCk7dmFyIFM9dGhpcy5ieXRl''@;'; put 'put ''TGVuZ3RoKCksdj1DfHxNYXRoLm1heCgxLFMpO20oUzw9diwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0odj4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgcD1mdW5jdGlvbihOLGcpe3JldHVybiBOLmFsbG9jVW5zYWZlP04uYWxsb2NVbnNh''@;'; put 'put ''ZmUoZyk6bmV3IE4oZyl9KE4sdik7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1nPyJMRSI6IkJFIildKHAsUykscH0sTS5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oTixnKXtmb3IodmFyIEM9MCxTPTAsdj0wLHA9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFy''@;'; put 'put ''IHc9dGhpcy53b3Jkc1t2XTw8cHxTO05bQysrXT0yNTUmdyxDPE4ubGVuZ3RoJiYoTltDKytdPXc+PjgmMjU1KSxDPE4ubGVuZ3RoJiYoTltDKytdPXc+PjE2JjI1NSksNj09PXA/KEM8Ti5sZW5ndGgmJihOW0MrK109dz4+MjQmMjU1KSxTPTAscD0wKTooUz13Pj4+MjQscCs9Mil9aWYoQzxO''@;'; put 'put ''Lmxlbmd0aClmb3IoTltDKytdPVM7QzxOLmxlbmd0aDspTltDKytdPTB9LE0ucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPU4ubGVuZ3RoLTEsUz0wLHY9MCxwPTA7djx0aGlzLmxlbmd0aDt2Kyspe3ZhciB3PXRoaXMud29yZHNbdl08PHB8UztOW0Mt''@;'; put 'put ''LV09MjU1JncsQz49MCYmKE5bQy0tXT13Pj44JjI1NSksQz49MCYmKE5bQy0tXT13Pj4xNiYyNTUpLDY9PT1wPyhDPj0wJiYoTltDLS1dPXc+PjI0JjI1NSksUz0wLHA9MCk6KFM9dz4+PjI0LHArPTIpfWlmKEM+PTApZm9yKE5bQy0tXT1TO0M+PTA7KU5bQy0tXT0wfSxNLnByb3RvdHlwZS5f''@;'; put 'put ''Y291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oTil7cmV0dXJuIDMyLU1hdGguY2x6MzIoTil9OmZ1bmN0aW9uKE4pe3ZhciBnPU4sQz0wO3JldHVybiBnPj00MDk2JiYoQys9MTMsZz4+Pj0xMyksZz49NjQmJihDKz03LGc+Pj49NyksZz49OCYmKEMrPTQsZz4+Pj00KSxnPj0yJiYoQys9''@;'; put 'put ''MixnPj4+PTIpLEMrZ30sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiAyNjt2YXIgZz1OLEM9MDtyZXR1cm4gODE5MSZnfHwoQys9MTMsZz4+Pj0xMyksMTI3Jmd8fChDKz03LGc+Pj49NyksMTUmZ3x8KEMrPTQsZz4+Pj00KSwzJmd8fChDKz0yLGc+''@;'; put 'put ''Pj49MiksMSZnfHxDKyssQ30sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZ30sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0''@;'; put 'put ''aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgTj0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIEM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tnXSk7aWYoTis9QywyNiE9PUMpYnJlYWt9cmV0dXJuIE59LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''TWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihOKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihOKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKE4pe3Jl''@;'; put 'put ''dHVybiB0aGlzLnRlc3RuKE4tMSk/dGhpcy5ub3RuKE4pLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihOKXtmb3IoO3RoaXMubGVuZ3RoPE4ubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytd''@;'; put 'put ''PTA7Zm9yKHZhciBnPTA7ZzxOLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tnXT10aGlzLndvcmRzW2ddfE4ud29yZHNbZ107cmV0dXJuIHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxOLm5lZ2F0aXZlKSksdGhpcy5p''@;'; put 'put ''dW9yKE4pfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihOKTpOLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdW9yKE4pOk4uY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihOKXt2YXIgZztnPXRoaXMubGVuZ3RoPk4ubGVuZ3RoP046dGhpcztmb3IodmFyIEM9MDtDPGcubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXRoaXMud29yZHNbQ10mTi53b3Jk''@;'; put 'put ''c1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Zy5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxOLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChOKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKE4pe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChOKTpOLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5sZW5ndGg+Ti5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKE4pOk4uY2xvbmUoKS5pdWFuZCh0aGlz''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oTil7dmFyIGcsQzt0aGlzLmxlbmd0aD5OLmxlbmd0aD8oZz10aGlzLEM9Tik6KGc9TixDPXRoaXMpO2Zvcih2YXIgUz0wO1M8Qy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Zy53b3Jkc1tTXV5DLndvcmRzW1NdO2lmKHRoaXMhPT1nKWZv''@;'; put 'put ''cig7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1nLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1nLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKE4pe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfE4ubmVnYXRpdmUpKSx0aGlzLml1eG9y''@;'; put 'put ''KE4pfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubGVuZ3RoPk4ubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKE4pOk4uY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlz''@;'; put 'put ''LmNsb25lKCkuaXV4b3IoTik6Ti5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2YgTiYmTj49MCk7dmFyIGc9MHxNYXRoLmNlaWwoTi8yNiksQz1OJTI2O3RoaXMuX2V4cGFuZChnKSxDPjAmJmctLTtmb3IodmFyIFM9''@;'; put 'put ''MDtTPGc7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmfnRoaXMud29yZHNbU107cmV0dXJuIEM+MCYmKHRoaXMud29yZHNbU109fnRoaXMud29yZHNbU10mNjcxMDg4NjM+PjI2LUMpLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pbm90bihOKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihOLGcpe20oIm51bWJlciI9PXR5cGVvZiBOJiZOPj0wKTt2YXIgQz1OLzI2fDAsUz1OJTI2O3JldHVybiB0aGlzLl9leHBhbmQoQysxKSx0aGlzLndvcmRzW0NdPWc/dGhpcy53b3Jkc1tDXXwxPDxTOnRoaXMud29yZHNb''@;'; put 'put ''Q10mfigxPDxTKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKE4pe3ZhciBnLEMsUztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PU4ubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxnPXRoaXMuaXN1YihOKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlKXJldHVybiBOLm5lZ2F0aXZlPTAsZz10aGlzLmlzdWIoTiksTi5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Ti5sZW5ndGg/KEM9dGhpcyxTPU4pOihDPU4sUz10aGlzKTtmb3IodmFyIHY9''@;'; put 'put ''MCxwPTA7cDxTLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoZz0oMHxDLndvcmRzW3BdKSsoMHxTLndvcmRzW3BdKSt2KSx2PWc+Pj4yNjtmb3IoOzAhPT12JiZwPEMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJihnPSgwfEMud29yZHNbcF0pK3YpLHY9Zz4+''@;'; put 'put ''PjI2O2lmKHRoaXMubGVuZ3RoPUMubGVuZ3RoLDAhPT12KXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXYsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEMhPT10aGlzKWZvcig7cDxDLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT1DLndvcmRzW3BdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9''@;'; put 'put ''ZnVuY3Rpb24oTil7dmFyIGc7cmV0dXJuIDAhPT1OLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oTi5uZWdhdGl2ZT0wLGc9dGhpcy5zdWIoTiksTi5uZWdhdGl2ZV49MSxnKTowPT09Ti5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxnPU4uc3ViKHRo''@;'; put 'put ''aXMpLHRoaXMubmVnYXRpdmU9MSxnKTp0aGlzLmxlbmd0aD5OLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChOKTpOLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihOKXtpZigwIT09Ti5uZWdhdGl2ZSl7Ti5uZWdhdGl2ZT0wO3ZhciBnPXRoaXMuaWFkZChO''@;'; put 'put ''KTtyZXR1cm4gTi5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoTiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIFMsdixDPXRoaXMuY21wKE4pO2lmKDA9PT1DKXJldHVybiB0''@;'; put 'put ''aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztDPjA/KFM9dGhpcyx2PU4pOihTPU4sdj10aGlzKTtmb3IodmFyIHA9MCx3PTA7dzx2Lmxlbmd0aDt3KyspcD0oZz0oMHxTLndvcmRzW3ddKS0oMHx2LndvcmRzW3ddKStwKT4+MjYsdGhpcy53b3Jkc1t3''@;'; put 'put ''XT02NzEwODg2MyZnO2Zvcig7MCE9PXAmJnc8Uy5sZW5ndGg7dysrKXA9KGc9KDB8Uy53b3Jkc1t3XSkrcCk+PjI2LHRoaXMud29yZHNbd109NjcxMDg4NjMmZztpZigwPT09cCYmdzxTLmxlbmd0aCYmUyE9PXRoaXMpZm9yKDt3PFMubGVuZ3RoO3crKyl0aGlzLndvcmRzW3ddPVMud29yZHNb''@;'; put 'put ''d107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHcpLFMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKE4pfTt2YXIgVT1mdW5jdGlvbihOLGcs''@;'; put 'put ''Qyl7dmFyIEosbmUsZGUsUz1OLndvcmRzLHY9Zy53b3JkcyxwPUMud29yZHMsdz0wLGZlPTB8U1swXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxTWzFdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfFNbMl0sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8U1szXSxsdD04MTkxJkpl''@;'; put 'put ''LFBlPUplPj4+MTMsYmU9MHxTWzRdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfFNbNV0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8U1s2XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxTWzddLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfFNbOF0sSHQ9ODE5MSZNdCxQdD1N''@;'; put 'put ''dD4+PjEzLG9uPTB8U1s5XSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHx2WzBdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfHZbMV0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8dlsyXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHx2WzNdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4x''@;'; put 'put ''Myxtbj0wfHZbNF0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLEp0PTB8dls1XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHx2WzZdLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfHZbN10seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8dls4XSxSbj04MTkxJkJuLCR0PUJuPj4+MTMsUG49''@;'; put 'put ''MHx2WzldLG5pPTgxOTEmUG4sbG49UG4+Pj4xMztDLm5lZ2F0aXZlPU4ubmVnYXRpdmVeZy5uZWdhdGl2ZSxDLmxlbmd0aD0xOTt2YXIgam49KHcrKEo9TWF0aC5pbXVsKHhlLFduKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKHhlLGVuKSkrTWF0aC5pbXVsKExlLFduKXwwKSk8PDEz''@;'; put 'put ''KXwwO3c9KChkZT1NYXRoLmltdWwoTGUsZW4pKSsobmU+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKE9lLFduKSxuZT0obmU9TWF0aC5pbXVsKE9lLGVuKSkrTWF0aC5pbXVsKGplLFduKXwwLGRlPU1hdGguaW11bChqZSxlbik7dmFyIHFyPSh3KyhKPUor''@;'; put 'put ''TWF0aC5pbXVsKHhlLEhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLGZ0KXwwKSsobmU+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLEo9TWF0aC5p''@;'; put 'put ''bXVsKEtlLFduKSxuZT0obmU9TWF0aC5pbXVsKEtlLGVuKSkrTWF0aC5pbXVsKFllLFduKXwwLGRlPU1hdGguaW11bChZZSxlbiksSj1KK01hdGguaW11bChPZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGpl''@;'; put 'put ''LGZ0KXwwO3ZhciBnaT0odysoSj1KK01hdGguaW11bCh4ZSxobil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSx3dCl8MCkrKG5lPj4+MTMpfDApKyhnaT4+PjI2KXww''@;'; put 'put ''LGdpJj02NzEwODg2MyxKPU1hdGguaW11bChsdCxXbiksbmU9KG5lPU1hdGguaW11bChsdCxlbikpK01hdGguaW11bChQZSxXbil8MCxkZT1NYXRoLmltdWwoUGUsZW4pLEo9SitNYXRoLmltdWwoS2UsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5pbXVsKFllLEhu''@;'; put 'put ''KXwwLGRlPWRlK01hdGguaW11bChZZSxmdCl8MCxKPUorTWF0aC5pbXVsKE9lLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCxkZT1kZStNYXRoLmltdWwoamUsd3QpfDA7dmFyIHhyPSh3KyhKPUorTWF0aC5pbXVsKHhlLF90KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLE50KXwwKSsobmU+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKEFlLFduKSxuZT0obmU9TWF0aC5p''@;'; put 'put ''bXVsKEFlLGVuKSkrTWF0aC5pbXVsKFRlLFduKXwwLGRlPU1hdGguaW11bChUZSxlbiksSj1KK01hdGguaW11bChsdCxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLGZ0KXwwLEo9SitNYXRoLmltdWwoS2Us''@;'; put 'put ''aG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLGRlPWRlK01hdGguaW11bChZZSx3dCl8MCxKPUorTWF0aC5pbXVsKE9lLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCxkZT1kZStNYXRoLmlt''@;'; put 'put ''dWwoamUsTnQpfDA7dmFyIFVpPSh3KyhKPUorTWF0aC5pbXVsKHhlLHJ0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLEl0KXwwKSsobmU+Pj4xMyl8MCkrKFVpPj4+''@;'; put 'put ''MjYpfDAsVWkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKFhlLFduKSxuZT0obmU9TWF0aC5pbXVsKFhlLGVuKSkrTWF0aC5pbXVsKFVlLFduKXwwLGRlPU1hdGguaW11bChVZSxlbiksSj1KK01hdGguaW11bChBZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''VGUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLGZ0KXwwLEo9SitNYXRoLmltdWwobHQsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLGRlPWRlK01hdGguaW11bChQZSx3dCl8MCxKPUorTWF0aC5pbXVsKEtlLF90KXwwLG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoWWUsTnQpfDAsSj1KK01hdGguaW11bChPZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKGplLEl0KXwwO3ZhciBL''@;'; put 'put ''cj0odysoSj1KK01hdGguaW11bCh4ZSxEdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSxwdCl8MCkrKG5lPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2''@;'; put 'put ''MyxKPU1hdGguaW11bChNZSxXbiksbmU9KG5lPU1hdGguaW11bChNZSxlbikpK01hdGguaW11bChEZSxXbil8MCxkZT1NYXRoLmltdWwoRGUsZW4pLEo9SitNYXRoLmltdWwoWGUsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLGRlPWRlK01h''@;'; put 'put ''dGguaW11bChVZSxmdCl8MCxKPUorTWF0aC5pbXVsKEFlLGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCxkZT1kZStNYXRoLmltdWwoVGUsd3QpfDAsSj1KK01hdGguaW11bChsdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LE50KXww''@;'; put 'put ''KStNYXRoLmltdWwoUGUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLE50KXwwLEo9SitNYXRoLmltdWwoS2UscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLGRlPWRlK01hdGguaW11bChZZSxJdCl8MCxKPUorTWF0aC5pbXVsKE9lLER0KXww''@;'; put 'put ''LG5lPShuZT1uZStNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoamUscHQpfDA7dmFyIG5vPSh3KyhKPUorTWF0aC5pbXVsKHhlLEluKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJ''@;'; put 'put ''bil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHp0KXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKGl0LFduKSxuZT0obmU9TWF0aC5pbXVsKGl0LGVuKSkrTWF0aC5pbXVsKHV0LFduKXwwLGRlPU1hdGguaW11bCh1dCxlbiks''@;'; put 'put ''Sj1KK01hdGguaW11bChNZSxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLGZ0KXwwLEo9SitNYXRoLmltdWwoWGUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhu''@;'; put 'put ''KXwwLGRlPWRlK01hdGguaW11bChVZSx3dCl8MCxKPUorTWF0aC5pbXVsKEFlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoVGUsTnQpfDAsSj1KK01hdGguaW11bChsdCxydCl8MCxuZT0obmU9bmUrTWF0aC5p''@;'; put 'put ''bXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLEl0KXwwLEo9SitNYXRoLmltdWwoS2UsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLGRlPWRlK01hdGguaW11bChZZSxwdCl8MCxKPUorTWF0aC5p''@;'; put 'put ''bXVsKE9lLEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCxkZT1kZStNYXRoLmltdWwoamUsenQpfDA7dmFyIEhyPSh3KyhKPUorTWF0aC5pbXVsKHhlLHhuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsc24pfDApK01h''@;'; put 'put ''dGguaW11bChMZSx4bil8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLHNuKXwwKSsobmU+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKEh0LFduKSxuZT0obmU9TWF0aC5pbXVsKEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLGRlPU1hdGgu''@;'; put 'put ''aW11bChQdCxlbiksSj1KK01hdGguaW11bChpdCxIbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsZGU9ZGUrTWF0aC5pbXVsKHV0LGZ0KXwwLEo9SitNYXRoLmltdWwoTWUsaG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChNZSx3dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKERlLGhuKXwwLGRlPWRlK01hdGguaW11bChEZSx3dCl8MCxKPUorTWF0aC5pbXVsKFhlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCxkZT1kZStNYXRoLmltdWwoVWUsTnQpfDAsSj1KK01hdGguaW11bChBZSxydCl8MCxuZT0o''@;'; put 'put ''bmU9bmUrTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsZGU9ZGUrTWF0aC5pbXVsKFRlLEl0KXwwLEo9SitNYXRoLmltdWwobHQsRHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLGRlPWRlK01hdGguaW11bChQZSxwdCl8''@;'; put 'put ''MCxKPUorTWF0aC5pbXVsKEtlLEluKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCxkZT1kZStNYXRoLmltdWwoWWUsenQpfDAsSj1KK01hdGguaW11bChPZSx4bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUs''@;'; put 'put ''eG4pfDAsZGU9ZGUrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBxaT0odysoSj1KK01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChMZSwkdCl8MCkr''@;'; put 'put ''KG5lPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixXbiksbmU9KG5lPU1hdGguaW11bChDbixlbikpK01hdGguaW11bChVdCxXbil8MCxkZT1NYXRoLmltdWwoVXQsZW4pLEo9SitNYXRoLmltdWwoSHQsSG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChI''@;'; put 'put ''dCxmdCl8MCkrTWF0aC5pbXVsKFB0LEhuKXwwLGRlPWRlK01hdGguaW11bChQdCxmdCl8MCxKPUorTWF0aC5pbXVsKGl0LGhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCxkZT1kZStNYXRoLmltdWwodXQsd3QpfDAsSj1KK01hdGguaW11bChN''@;'; put 'put ''ZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsZGU9ZGUrTWF0aC5pbXVsKERlLE50KXwwLEo9SitNYXRoLmltdWwoWGUscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLGRlPWRlK01hdGgu''@;'; put 'put ''aW11bChVZSxJdCl8MCxKPUorTWF0aC5pbXVsKEFlLER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCxkZT1kZStNYXRoLmltdWwoVGUscHQpfDAsSj1KK01hdGguaW11bChsdCxJbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LHp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoUGUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKFBlLHp0KXwwLEo9SitNYXRoLmltdWwoS2UseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLGRlPWRlK01hdGguaW11bChZZSxzbil8MCxKPUorTWF0aC5pbXVsKE9lLFJuKXwwLG5l''@;'; put 'put ''PShuZT1uZStNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCxkZT1kZStNYXRoLmltdWwoamUsJHQpfDA7dmFyIEppPSh3KyhKPUorTWF0aC5pbXVsKHhlLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChMZSxuaSl8''@;'; put 'put ''MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKExlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLEhuKSxuZT0obmU9TWF0aC5pbXVsKENuLGZ0KSkrTWF0aC5pbXVsKFV0LEhuKXwwLGRlPU1hdGguaW11bChVdCxmdCksSj1K''@;'; put 'put ''K01hdGguaW11bChIdCxobil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHd0KXwwKStNYXRoLmltdWwoUHQsaG4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHd0KXwwLEo9SitNYXRoLmltdWwoaXQsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXww''@;'; put 'put ''LGRlPWRlK01hdGguaW11bCh1dCxOdCl8MCxKPUorTWF0aC5pbXVsKE1lLHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCxkZT1kZStNYXRoLmltdWwoRGUsSXQpfDAsSj1KK01hdGguaW11bChYZSxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVs''@;'; put 'put ''KFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLHB0KXwwLEo9SitNYXRoLmltdWwoQWUsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLEluKXwwLGRlPWRlK01hdGguaW11bChUZSx6dCl8MCxKPUorTWF0aC5pbXVs''@;'; put 'put ''KGx0LHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCxkZT1kZStNYXRoLmltdWwoUGUsc24pfDAsSj1KK01hdGguaW11bChLZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDAsZGU9ZGUrTWF0''@;'; put 'put ''aC5pbXVsKFllLCR0KXwwO3ZhciBhbz0odysoSj1KK01hdGguaW11bChPZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKE9lLGxuKXwwKStNYXRoLmltdWwoamUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChqZSxsbil8MCkrKG5lPj4+MTMpfDApKyhh''@;'; put 'put ''bz4+PjI2KXwwLGFvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixobiksbmU9KG5lPU1hdGguaW11bChDbix3dCkpK01hdGguaW11bChVdCxobil8MCxkZT1NYXRoLmltdWwoVXQsd3QpLEo9SitNYXRoLmltdWwoSHQsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxOdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFB0LF90KXwwLGRlPWRlK01hdGguaW11bChQdCxOdCl8MCxKPUorTWF0aC5pbXVsKGl0LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCxkZT1kZStNYXRoLmltdWwodXQsSXQpfDAsSj1KK01hdGguaW11bChNZSxEdCl8MCxuZT0obmU9''@;'; put 'put ''bmUrTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHB0KXwwLEo9SitNYXRoLmltdWwoWGUsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLGRlPWRlK01hdGguaW11bChVZSx6dCl8MCxK''@;'; put 'put ''PUorTWF0aC5pbXVsKEFlLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCxkZT1kZStNYXRoLmltdWwoVGUsc24pfDAsSj1KK01hdGguaW11bChsdCxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4p''@;'; put 'put ''fDAsZGU9ZGUrTWF0aC5pbXVsKFBlLCR0KXwwO3ZhciBybz0odysoSj1KK01hdGguaW11bChLZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoWWUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChZZSxsbil8MCkrKG5l''@;'; put 'put ''Pj4+MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixfdCksbmU9KG5lPU1hdGguaW11bChDbixOdCkpK01hdGguaW11bChVdCxfdCl8MCxkZT1NYXRoLmltdWwoVXQsTnQpLEo9SitNYXRoLmltdWwoSHQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxJ''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFB0LHJ0KXwwLGRlPWRlK01hdGguaW11bChQdCxJdCl8MCxKPUorTWF0aC5pbXVsKGl0LER0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCxkZT1kZStNYXRoLmltdWwodXQscHQpfDAsSj1KK01hdGguaW11bChNZSxJ''@;'; put 'put ''bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLHp0KXwwLEo9SitNYXRoLmltdWwoWGUseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLGRlPWRlK01hdGguaW11''@;'; put 'put ''bChVZSxzbil8MCxKPUorTWF0aC5pbXVsKEFlLFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCxkZT1kZStNYXRoLmltdWwoVGUsJHQpfDA7dmFyIGlvPSh3KyhKPUorTWF0aC5pbXVsKGx0LG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStN''@;'; put 'put ''YXRoLmltdWwobHQsbG4pfDApK01hdGguaW11bChQZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKFBlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLHJ0KSxuZT0obmU9TWF0aC5pbXVsKENuLEl0KSkrTWF0aC5p''@;'; put 'put ''bXVsKFV0LHJ0KXwwLGRlPU1hdGguaW11bChVdCxJdCksSj1KK01hdGguaW11bChIdCxEdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LHB0KXwwKStNYXRoLmltdWwoUHQsRHQpfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LHB0KXwwLEo9SitNYXRoLmltdWwoaXQsSW4pfDAsbmU9KG5lPW5lK01h''@;'; put 'put ''dGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKHV0LEluKXwwLGRlPWRlK01hdGguaW11bCh1dCx6dCl8MCxKPUorTWF0aC5pbXVsKE1lLHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCxkZT1kZStNYXRoLmltdWwoRGUsc24pfDAsSj1KK01h''@;'; put 'put ''dGguaW11bChYZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFVlLCR0KXwwO3ZhciBHaT0odysoSj1KK01hdGguaW11bChBZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEFlLGxuKXww''@;'; put 'put ''KStNYXRoLmltdWwoVGUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChUZSxsbil8MCkrKG5lPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixEdCksbmU9KG5lPU1hdGguaW11bChDbixwdCkpK01hdGguaW11bChVdCxEdCl8MCxkZT1N''@;'; put 'put ''YXRoLmltdWwoVXQscHQpLEo9SitNYXRoLmltdWwoSHQsSW4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCx6dCl8MCkrTWF0aC5pbXVsKFB0LEluKXwwLGRlPWRlK01hdGguaW11bChQdCx6dCl8MCxKPUorTWF0aC5pbXVsKGl0LHhuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsc24pfDAp''@;'; put 'put ''K01hdGguaW11bCh1dCx4bil8MCxkZT1kZStNYXRoLmltdWwodXQsc24pfDAsSj1KK01hdGguaW11bChNZSxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKERlLCR0KXwwO3ZhciBobz0odysoSj1KK01hdGguaW11''@;'; put 'put ''bChYZSxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKFhlLGxuKXwwKStNYXRoLmltdWwoVWUsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bChVZSxsbil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxKPU1hdGguaW11bChDbixJ''@;'; put 'put ''biksbmU9KG5lPU1hdGguaW11bChDbix6dCkpK01hdGguaW11bChVdCxJbil8MCxkZT1NYXRoLmltdWwoVXQsenQpLEo9SitNYXRoLmltdWwoSHQseG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChIdCxzbil8MCkrTWF0aC5pbXVsKFB0LHhuKXwwLGRlPWRlK01hdGguaW11bChQdCxzbil8MCxK''@;'; put 'put ''PUorTWF0aC5pbXVsKGl0LFJuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCxkZT1kZStNYXRoLmltdWwodXQsJHQpfDA7dmFyIHlyPSh3KyhKPUorTWF0aC5pbXVsKE1lLG5pKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoTWUs''@;'; put 'put ''bG4pfDApK01hdGguaW11bChEZSxuaSl8MCkpPDwxMyl8MDt3PSgoZGU9ZGUrTWF0aC5pbXVsKERlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEo9TWF0aC5pbXVsKENuLHhuKSxuZT0obmU9TWF0aC5pbXVsKENuLHNuKSkrTWF0aC5pbXVsKFV0LHhuKXww''@;'; put 'put ''LGRlPU1hdGguaW11bChVdCxzbiksSj1KK01hdGguaW11bChIdCxSbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEh0LCR0KXwwKStNYXRoLmltdWwoUHQsUm4pfDAsZGU9ZGUrTWF0aC5pbXVsKFB0LCR0KXwwO3ZhciBQaT0odysoSj1KK01hdGguaW11bChpdCxuaSl8MCl8MCkrKCg4MTkxJihu''@;'; put 'put ''ZT0obmU9bmUrTWF0aC5pbXVsKGl0LGxuKXwwKStNYXRoLmltdWwodXQsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11bCh1dCxsbil8MCkrKG5lPj4+MTMpfDApKyhQaT4+PjI2KXwwLFBpJj02NzEwODg2MyxKPU1hdGguaW11bChDbixSbiksbmU9KG5lPU1hdGguaW11bChDbiwk''@;'; put 'put ''dCkpK01hdGguaW11bChVdCxSbil8MCxkZT1NYXRoLmltdWwoVXQsJHQpO3ZhciBMbz0odysoSj1KK01hdGguaW11bChIdCxuaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEh0LGxuKXwwKStNYXRoLmltdWwoUHQsbmkpfDApKTw8MTMpfDA7dz0oKGRlPWRlK01hdGguaW11''@;'; put 'put ''bChQdCxsbil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2Mzt2YXIgaHM9KHcrKEo9TWF0aC5pbXVsKENuLG5pKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKENuLGxuKSkrTWF0aC5pbXVsKFV0LG5pKXwwKSk8PDEzKXwwO3JldHVybiB3PSgoZGU9TWF0aC5p''@;'; put 'put ''bXVsKFV0LGxuKSkrKG5lPj4+MTMpfDApKyhocz4+PjI2KXwwLGhzJj02NzEwODg2MyxwWzBdPWpuLHBbMV09cXIscFsyXT1naSxwWzNdPXhyLHBbNF09VWkscFs1XT1LcixwWzZdPW5vLHBbN109SHIscFs4XT1xaSxwWzldPUppLHBbMTBdPWFvLHBbMTFdPXJvLHBbMTJdPWlvLHBbMTNdPUdp''@;'; put 'put ''LHBbMTRdPWhvLHBbMTVdPXlyLHBbMTZdPVBpLHBbMTddPUxvLHBbMThdPWhzLDAhPT13JiYocFsxOV09dyxDLmxlbmd0aCsrKSxDfTtmdW5jdGlvbiBxKEgsTixnKXtnLm5lZ2F0aXZlPU4ubmVnYXRpdmVeSC5uZWdhdGl2ZSxnLmxlbmd0aD1ILmxlbmd0aCtOLmxlbmd0aDtmb3IodmFyIEM9''@;'; put 'put ''MCxTPTAsdj0wO3Y8Zy5sZW5ndGgtMTt2Kyspe3ZhciBwPVM7Uz0wO2Zvcih2YXIgdz02NzEwODg2MyZDLEo9TWF0aC5taW4odixOLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLHYtSC5sZW5ndGgrMSk7bmU8PUo7bmUrKyl7dmFyIExlPSgwfEgud29yZHNbdi1uZV0pKigwfE4ud29yZHNbbmVd''@;'; put 'put ''KSxGZT02NzEwODg2MyZMZTt3PTY3MTA4ODYzJihGZT1GZSt3fDApLFMrPShwPShwPXArKExlLzY3MTA4ODY0fDApfDApKyhGZT4+PjI2KXwwKT4+PjI2LHAmPTY3MTA4ODYzfWcud29yZHNbdl09dyxDPXAscD1TfXJldHVybiAwIT09Qz9nLndvcmRzW3ZdPUM6Zy5sZW5ndGgtLSxnLl9zdHJp''@;'; put 'put ''cCgpfWZ1bmN0aW9uIGVlKEgsTixnKXtyZXR1cm4gcShILE4sZyl9ZnVuY3Rpb24gdGUoSCxOKXt0aGlzLng9SCx0aGlzLnk9Tn1NYXRoLmltdWx8fChVPVgpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKE4sZyl7dmFyIFM9dGhpcy5sZW5ndGgrTi5sZW5ndGg7cmV0dXJuIDEwPT09dGhp''@;'; put 'put ''cy5sZW5ndGgmJjEwPT09Ti5sZW5ndGg/VSh0aGlzLE4sZyk6Uzw2Mz9YKHRoaXMsTixnKTpTPDEwMjQ/cSh0aGlzLE4sZyk6ZWUodGhpcyxOLGcpfSx0ZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihOKXtmb3IodmFyIGc9bmV3IEFycmF5KE4pLEM9TS5wcm90b3R5cGUuX2NvdW50Qml0''@;'; put 'put ''cyhOKS0xLFM9MDtTPE47UysrKWdbU109dGhpcy5yZXZCaW4oUyxDLE4pO3JldHVybiBnfSx0ZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKE4sZyxDKXtpZigwPT09Tnx8Tj09PUMtMSlyZXR1cm4gTjtmb3IodmFyIFM9MCx2PTA7djxnO3YrKylTfD0oMSZOKTw8Zy12LTEsTj4+PTE7cmV0''@;'; put 'put ''dXJuIFN9LHRlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKE4sZyxDLFMsdixwKXtmb3IodmFyIHc9MDt3PHA7dysrKVNbd109Z1tOW3ddXSx2W3ddPUNbTlt3XV19LHRlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oTixnLEMsUyx2LHApe3RoaXMucGVybXV0ZShwLE4sZyxDLFMs''@;'; put 'put ''dik7Zm9yKHZhciB3PTE7dzx2O3c8PD0xKWZvcih2YXIgSj13PDwxLG5lPU1hdGguY29zKDIqTWF0aC5QSS9KKSxkZT1NYXRoLnNpbigyKk1hdGguUEkvSiksZmU9MDtmZTx2O2ZlKz1KKWZvcih2YXIgeGU9bmUsTGU9ZGUsRmU9MDtGZTx3O0ZlKyspe3ZhciBPZT1DW2ZlK0ZlXSxqZT1TW2Zl''@;'; put 'put ''K0ZlXSxXZT1DW2ZlK0ZlK3ddLEtlPVNbZmUrRmUrd10sWWU9eGUqV2UtTGUqS2U7S2U9eGUqS2UrTGUqV2UsQ1tmZStGZV09T2UrKFdlPVllKSxTW2ZlK0ZlXT1qZStLZSxDW2ZlK0ZlK3ddPU9lLVdlLFNbZmUrRmUrd109amUtS2UsRmUhPT1KJiYoWWU9bmUqeGUtZGUqTGUsTGU9bmUqTGUr''@;'; put 'put ''ZGUqeGUseGU9WWUpfX0sdGUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKE4sZyl7dmFyIEM9MXxNYXRoLm1heChnLE4pLFM9MSZDLHY9MDtmb3IoQz1DLzJ8MDtDO0M+Pj49MSl2Kys7cmV0dXJuIDE8PHYrMStTfSx0ZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKE4sZyxD''@;'; put 'put ''KXtpZighKEM8PTEpKWZvcih2YXIgUz0wO1M8Qy8yO1MrKyl7dmFyIHY9TltTXTtOW1NdPU5bQy1TLTFdLE5bQy1TLTFdPXYsdj1nW1NdLGdbU109LWdbQy1TLTFdLGdbQy1TLTFdPS12fX0sdGUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz0wLFM9MDtT''@;'; put 'put ''PGcvMjtTKyspe3ZhciB2PTgxOTIqTWF0aC5yb3VuZChOWzIqUysxXS9nKStNYXRoLnJvdW5kKE5bMipTXS9nKStDO05bU109NjcxMDg4NjMmdixDPXY8NjcxMDg4NjQ/MDp2LzY3MTA4ODY0fDB9cmV0dXJuIE59LHRlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKE4sZyxDLFMpe2Zv''@;'; put 'put ''cih2YXIgdj0wLHA9MDtwPGc7cCsrKUNbMipwXT04MTkxJih2Kz0wfE5bcF0pLENbMipwKzFdPTgxOTEmKHY+Pj49MTMpLHY+Pj49MTM7Zm9yKHA9MipnO3A8UzsrK3ApQ1twXT0wO20oMD09PXYpLG0oMD09KC04MTkyJnYpKX0sdGUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oTil7Zm9yKHZh''@;'; put 'put ''ciBnPW5ldyBBcnJheShOKSxDPTA7QzxOO0MrKylnW0NdPTA7cmV0dXJuIGd9LHRlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKE4sZyxDKXt2YXIgUz0yKnRoaXMuZ3Vlc3NMZW4xM2IoTi5sZW5ndGgsZy5sZW5ndGgpLHY9dGhpcy5tYWtlUkJUKFMpLHA9dGhpcy5zdHViKFMpLHc9bmV3IEFy''@;'; put 'put ''cmF5KFMpLEo9bmV3IEFycmF5KFMpLG5lPW5ldyBBcnJheShTKSxkZT1uZXcgQXJyYXkoUyksZmU9bmV3IEFycmF5KFMpLHhlPW5ldyBBcnJheShTKSxMZT1DLndvcmRzO0xlLmxlbmd0aD1TLHRoaXMuY29udmVydDEzYihOLndvcmRzLE4ubGVuZ3RoLHcsUyksdGhpcy5jb252ZXJ0MTNiKGcu''@;'; put 'put ''d29yZHMsZy5sZW5ndGgsZGUsUyksdGhpcy50cmFuc2Zvcm0odyxwLEosbmUsUyx2KSx0aGlzLnRyYW5zZm9ybShkZSxwLGZlLHhlLFMsdik7Zm9yKHZhciBGZT0wO0ZlPFM7RmUrKyl7dmFyIE9lPUpbRmVdKmZlW0ZlXS1uZVtGZV0qeGVbRmVdO25lW0ZlXT1KW0ZlXSp4ZVtGZV0rbmVbRmVd''@;'; put 'put ''KmZlW0ZlXSxKW0ZlXT1PZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoSixuZSxTKSx0aGlzLnRyYW5zZm9ybShKLG5lLExlLHAsUyx2KSx0aGlzLmNvbmp1Z2F0ZShMZSxwLFMpLHRoaXMubm9ybWFsaXplMTNiKExlLFMpLEMubmVnYXRpdmU9Ti5uZWdhdGl2ZV5nLm5lZ2F0aXZlLEMubGVuZ3Ro''@;'; put 'put ''PU4ubGVuZ3RoK2cubGVuZ3RoLEMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXt2YXIgZz1uZXcgTShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrTi5sZW5ndGgpLHRoaXMubXVsVG8oTixnKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlv''@;'; put 'put ''bihOKXt2YXIgZz1uZXcgTShudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrTi5sZW5ndGgpLGVlKHRoaXMsTixnKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKE4sdGhpcyl9LE0ucHJvdG90eXBlLmltdWxu''@;'; put 'put ''PWZ1bmN0aW9uKE4pe3ZhciBnPU48MDtnJiYoTj0tTiksbSgibnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCk7Zm9yKHZhciBDPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgdj0oMHx0aGlzLndvcmRzW1NdKSpOLHA9KDY3MTA4ODYzJnYpKyg2NzEwODg2MyZDKTtDPj49MjYs''@;'; put 'put ''Qys9di82NzEwODg2NHwwLEMrPXA+Pj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspLGc/dGhpcy5pbmVnKCk6dGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmltdWxuKE4pfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihOKXt2YXIgZz1mdW5jdGlvbiBZ''@;'; put 'put ''KEgpe2Zvcih2YXIgTj1uZXcgQXJyYXkoSC5iaXRMZW5ndGgoKSksZz0wO2c8Ti5sZW5ndGg7ZysrKU5bZ109SC53b3Jkc1tnLzI2fDBdPj4+ZyUyNiYxO3JldHVybiBOfShOKTtpZigwPT09Zy5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgQz10aGlzLFM9MDtTPGcubGVuZ3RoJiYw''@;'; put 'put ''PT09Z1tTXTtTKyssQz1DLnNxcigpKTtpZigrK1M8Zy5sZW5ndGgpZm9yKHZhciB2PUMuc3FyKCk7UzxnLmxlbmd0aDtTKyssdj12LnNxcigpKTAhPT1nW1NdJiYoQz1DLm11bCh2KSk7cmV0dXJuIEN9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihOKXttKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''TiYmTj49MCk7dmFyIHYsZz1OJTI2LEM9KE4tZykvMjYsUz02NzEwODg2Mz4+PjI2LWc8PDI2LWc7aWYoMCE9PWcpe3ZhciBwPTA7Zm9yKHY9MDt2PHRoaXMubGVuZ3RoO3YrKyl7dmFyIHc9dGhpcy53b3Jkc1t2XSZTO3RoaXMud29yZHNbdl09KDB8dGhpcy53b3Jkc1t2XSktdzw8Z3xwLHA9''@;'; put 'put ''dz4+PjI2LWd9cCYmKHRoaXMud29yZHNbdl09cCx0aGlzLmxlbmd0aCsrKX1pZigwIT09Qyl7Zm9yKHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSl0aGlzLndvcmRzW3YrQ109dGhpcy53b3Jkc1t2XTtmb3Iodj0wO3Y8Qzt2KyspdGhpcy53b3Jkc1t2XT0wO3RoaXMubGVuZ3RoKz1DfXJldHVy''@;'; put 'put ''biB0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihOKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oTil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihOLGcsQyl7dmFyIFM7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApLFM9Zz8o''@;'; put 'put ''Zy1nJTI2KS8yNjowO3ZhciB2PU4lMjYscD1NYXRoLm1pbigoTi12KS8yNix0aGlzLmxlbmd0aCksdz02NzEwODg2M142NzEwODg2Mz4+PnY8PHYsSj1DO2lmKFMtPXAsUz1NYXRoLm1heCgwLFMpLEope2Zvcih2YXIgbmU9MDtuZTxwO25lKyspSi53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZV07''@;'; put 'put ''Si5sZW5ndGg9cH1pZigwIT09cClpZih0aGlzLmxlbmd0aD5wKWZvcih0aGlzLmxlbmd0aC09cCxuZT0wO25lPHRoaXMubGVuZ3RoO25lKyspdGhpcy53b3Jkc1tuZV09dGhpcy53b3Jkc1tuZStwXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBkZT0wO2ZvcihuZT10''@;'; put 'put ''aGlzLmxlbmd0aC0xO25lPj0wJiYoMCE9PWRlfHxuZT49Uyk7bmUtLSl7dmFyIGZlPTB8dGhpcy53b3Jkc1tuZV07dGhpcy53b3Jkc1tuZV09ZGU8PDI2LXZ8ZmU+Pj52LGRlPWZlJnd9cmV0dXJuIEomJjAhPT1kZSYmKEoud29yZHNbSi5sZW5ndGgrK109ZGUpLDA9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''KHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihOLGcsQyl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKE4sZyxDKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihOKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlzaGxuKE4pfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihOKX0sTS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKE4pfSxNLnByb3RvdHlwZS51c2hybj1mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihOKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBnPU4lMjYsQz0oTi1nKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1DfHwhKHRoaXMud29yZHNbQ10mMTw8Zykp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oTil7bSgibnVtYmVyIj09dHlwZW9mIE4mJk4+PTApO3ZhciBnPU4lMjYsQz0oTi1nKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8''@;'; put 'put ''PUM/dGhpczooMCE9PWcmJkMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihDLHRoaXMubGVuZ3RoKSwwIT09ZyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8ZyksdGhpcy5fc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKE4pe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKE4pfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihOKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIE4pLG0oTjw2NzEwODg2NCksTjwwP3RoaXMuaXN1Ym4oLU4pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53''@;'; put 'put ''b3Jkc1swXSk8PU4/KHRoaXMud29yZHNbMF09Ti0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKE4pLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihOKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9u''@;'; put 'put ''KE4pe3RoaXMud29yZHNbMF0rPU47Zm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tnXT49NjcxMDg4NjQ7ZysrKXRoaXMud29yZHNbZ10tPTY3MTA4ODY0LGc9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZysxXT0xOnRoaXMud29yZHNbZysxXSsrO3JldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxnKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKE4pe2lmKG0oIm51bWJlciI9PXR5cGVvZiBOKSxtKE48NjcxMDg4NjQpLE48MClyZXR1cm4gdGhpcy5pYWRkbigtTik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKE4pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPU4sMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGc9MDtn''@;'; put 'put ''PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2ddPDA7ZysrKXRoaXMud29yZHNbZ10rPTY3MTA4ODY0LHRoaXMud29yZHNbZysxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKE4pfSxNLnByb3Rv''@;'; put 'put ''dHlwZS5zdWJuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oTil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oTixnLEMpe3ZhciB2O3RoaXMuX2V4cGFuZChOLmxlbmd0aCtDKTt2YXIgcCx3PTA7Zm9yKHY9MDt2PE4ubGVuZ3RoO3YrKyl7cD0oMHx0aGlzLndvcmRzW3YrQ10pK3c7dmFyIEo9KDB8Ti53b3Jkc1t2XSkqZzt3PSgocC09NjcxMDg4''@;'; put 'put ''NjMmSik+PjI2KS0oSi82NzEwODg2NHwwKSx0aGlzLndvcmRzW3YrQ109NjcxMDg4NjMmcH1mb3IoO3Y8dGhpcy5sZW5ndGgtQzt2Kyspdz0ocD0oMHx0aGlzLndvcmRzW3YrQ10pK3cpPj4yNix0aGlzLndvcmRzW3YrQ109NjcxMDg4NjMmcDtpZigwPT09dylyZXR1cm4gdGhpcy5fc3RyaXAo''@;'; put 'put ''KTtmb3IobSgtMT09PXcpLHc9MCx2PTA7djx0aGlzLmxlbmd0aDt2Kyspdz0ocD0tKDB8dGhpcy53b3Jkc1t2XSkrdyk+PjI2LHRoaXMud29yZHNbdl09NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9u''@;'; put 'put ''KE4sZyl7dmFyIEMsUz10aGlzLmNsb25lKCksdj1OLHA9MHx2LndvcmRzW3YubGVuZ3RoLTFdOzAhPShDPTI2LXRoaXMuX2NvdW50Qml0cyhwKSkmJih2PXYudXNobG4oQyksUy5pdXNobG4oQykscD0wfHYud29yZHNbdi5sZW5ndGgtMV0pO3ZhciBuZSxKPVMubGVuZ3RoLXYubGVuZ3RoO2lm''@;'; put 'put ''KCJtb2QiIT09Zyl7KG5lPW5ldyBNKG51bGwpKS5sZW5ndGg9SisxLG5lLndvcmRzPW5ldyBBcnJheShuZS5sZW5ndGgpO2Zvcih2YXIgZGU9MDtkZTxuZS5sZW5ndGg7ZGUrKyluZS53b3Jkc1tkZV09MH12YXIgZmU9Uy5jbG9uZSgpLl9pc2hsbnN1Ym11bCh2LDEsSik7MD09PWZlLm5lZ2F0''@;'; put 'put ''aXZlJiYoUz1mZSxuZSYmKG5lLndvcmRzW0pdPTEpKTtmb3IodmFyIHhlPUotMTt4ZT49MDt4ZS0tKXt2YXIgTGU9NjcxMDg4NjQqKDB8Uy53b3Jkc1t2Lmxlbmd0aCt4ZV0pKygwfFMud29yZHNbdi5sZW5ndGgreGUtMV0pO2ZvcihMZT1NYXRoLm1pbihMZS9wfDAsNjcxMDg4NjMpLFMuX2lz''@;'; put 'put ''aGxuc3VibXVsKHYsTGUseGUpOzAhPT1TLm5lZ2F0aXZlOylMZS0tLFMubmVnYXRpdmU9MCxTLl9pc2hsbnN1Ym11bCh2LDEseGUpLFMuaXNaZXJvKCl8fChTLm5lZ2F0aXZlXj0xKTtuZSYmKG5lLndvcmRzW3hlXT1MZSl9cmV0dXJuIG5lJiZuZS5fc3RyaXAoKSxTLl9zdHJpcCgpLCJkaXYi''@;'; put 'put ''IT09ZyYmMCE9PUMmJlMuaXVzaHJuKEMpLHtkaXY6bmV8fG51bGwsbW9kOlN9fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oTixnLEMpe3JldHVybiBtKCFOLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MD09PU4ubmVnYXRpdmU/KHA9dGhpcy5uZWcoKS5kaXZtb2QoTixnKSwibW9kIiE9PWcmJihTPXAuZGl2Lm5lZygpKSwiZGl2IiE9PWcmJih2PXAubW9kLm5lZygpLEMmJjAhPT12Lm5lZ2F0aXZlJiZ2LmlhZGQoTikpLHtkaXY6Uyxtb2Q6dn0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Ti5u''@;'; put 'put ''ZWdhdGl2ZT8ocD10aGlzLmRpdm1vZChOLm5lZygpLGcpLCJtb2QiIT09ZyYmKFM9cC5kaXYubmVnKCkpLHtkaXY6Uyxtb2Q6cC5tb2R9KTp0aGlzLm5lZ2F0aXZlJk4ubmVnYXRpdmU/KHA9dGhpcy5uZWcoKS5kaXZtb2QoTi5uZWcoKSxnKSwiZGl2IiE9PWcmJih2PXAubW9kLm5lZygpLEMm''@;'; put 'put ''JjAhPT12Lm5lZ2F0aXZlJiZ2LmlzdWIoTikpLHtkaXY6cC5kaXYsbW9kOnZ9KTpOLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoTik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09Ti5sZW5ndGg/ImRpdiI9PT1nP3tkaXY6dGhpcy5kaXZuKE4ud29yZHNbMF0pLG1vZDpudWxs''@;'; put 'put ''fToibW9kIj09PWc/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZHJuKE4ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oTi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kcm4oTi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KE4sZyk7dmFyIFMsdixwfSxNLnByb3RvdHlwZS5kaXY9''@;'; put 'put ''ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmRpdm1vZChOLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZGl2bW9kKE4sIm1v''@;'; put 'put ''ZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oTil7dmFyIGc9dGhpcy5kaXZtb2QoTik7aWYoZy5tb2QuaXNaZXJvKCkpcmV0dXJuIGcuZGl2O3ZhciBDPTAhPT1nLmRpdi5uZWdhdGl2ZT9nLm1vZC5pc3ViKE4pOmcubW9kLFM9Ti51c2hybigxKSx2PU4uYW5kbG4o''@;'; put 'put ''MSkscD1DLmNtcChTKTtyZXR1cm4gcDwwfHwxPT09diYmMD09PXA/Zy5kaXY6MCE9PWcuZGl2Lm5lZ2F0aXZlP2cuZGl2LmlzdWJuKDEpOmcuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihOKXt2YXIgZz1OPDA7ZyYmKE49LU4pLG0oTjw9NjcxMDg4NjMpO2Zvcih2''@;'; put 'put ''YXIgQz0oMTw8MjYpJU4sUz0wLHY9dGhpcy5sZW5ndGgtMTt2Pj0wO3YtLSlTPShDKlMrKDB8dGhpcy53b3Jkc1t2XSkpJU47cmV0dXJuIGc/LVM6U30sTS5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5tb2RybihOKX0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24o''@;'; put 'put ''Til7dmFyIGc9TjwwO2cmJihOPS1OKSxtKE48PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pe3ZhciB2PSgwfHRoaXMud29yZHNbU10pKzY3MTA4ODY0KkM7dGhpcy53b3Jkc1tTXT12L058MCxDPXYlTn1yZXR1cm4gdGhpcy5fc3RyaXAoKSxnP3RoaXMu''@;'; put 'put ''aW5lZygpOnRoaXN9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihOKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihOKXttKDA9PT1OLm5lZ2F0aXZlKSxtKCFOLmlzWmVybygpKTt2YXIgZz10aGlzLEM9Ti5jbG9uZSgpO2c9MCE9PWcu''@;'; put 'put ''bmVnYXRpdmU/Zy51bW9kKE4pOmcuY2xvbmUoKTtmb3IodmFyIFM9bmV3IE0oMSksdj1uZXcgTSgwKSxwPW5ldyBNKDApLHc9bmV3IE0oMSksSj0wO2cuaXNFdmVuKCkmJkMuaXNFdmVuKCk7KWcuaXVzaHJuKDEpLEMuaXVzaHJuKDEpLCsrSjtmb3IodmFyIG5lPUMuY2xvbmUoKSxkZT1nLmNs''@;'; put 'put ''b25lKCk7IWcuaXNaZXJvKCk7KXtmb3IodmFyIGZlPTAseGU9MTshKGcud29yZHNbMF0meGUpJiZmZTwyNjsrK2ZlLHhlPDw9MSk7aWYoZmU+MClmb3IoZy5pdXNocm4oZmUpO2ZlLS0gPjA7KShTLmlzT2RkKCl8fHYuaXNPZGQoKSkmJihTLmlhZGQobmUpLHYuaXN1YihkZSkpLFMuaXVzaHJu''@;'; put 'put ''KDEpLHYuaXVzaHJuKDEpO2Zvcih2YXIgTGU9MCxGZT0xOyEoQy53b3Jkc1swXSZGZSkmJkxlPDI2OysrTGUsRmU8PD0xKTtpZihMZT4wKWZvcihDLml1c2hybihMZSk7TGUtLSA+MDspKHAuaXNPZGQoKXx8dy5pc09kZCgpKSYmKHAuaWFkZChuZSksdy5pc3ViKGRlKSkscC5pdXNocm4oMSks''@;'; put 'put ''dy5pdXNocm4oMSk7Zy5jbXAoQyk+PTA/KGcuaXN1YihDKSxTLmlzdWIocCksdi5pc3ViKHcpKTooQy5pc3ViKGcpLHAuaXN1YihTKSx3LmlzdWIodikpfXJldHVybnthOnAsYjp3LGdjZDpDLml1c2hsbihKKX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihOKXttKDA9PT1OLm5lZ2F0''@;'; put 'put ''aXZlKSxtKCFOLmlzWmVybygpKTt2YXIgZmUsZz10aGlzLEM9Ti5jbG9uZSgpO2c9MCE9PWcubmVnYXRpdmU/Zy51bW9kKE4pOmcuY2xvbmUoKTtmb3IodmFyIFM9bmV3IE0oMSksdj1uZXcgTSgwKSxwPUMuY2xvbmUoKTtnLmNtcG4oMSk+MCYmQy5jbXBuKDEpPjA7KXtmb3IodmFyIHc9MCxK''@;'; put 'put ''PTE7IShnLndvcmRzWzBdJkopJiZ3PDI2OysrdyxKPDw9MSk7aWYodz4wKWZvcihnLml1c2hybih3KTt3LS0gPjA7KVMuaXNPZGQoKSYmUy5pYWRkKHApLFMuaXVzaHJuKDEpO2Zvcih2YXIgbmU9MCxkZT0xOyEoQy53b3Jkc1swXSZkZSkmJm5lPDI2OysrbmUsZGU8PD0xKTtpZihuZT4wKWZv''@;'; put 'put ''cihDLml1c2hybihuZSk7bmUtLSA+MDspdi5pc09kZCgpJiZ2LmlhZGQocCksdi5pdXNocm4oMSk7Zy5jbXAoQyk+PTA/KGcuaXN1YihDKSxTLmlzdWIodikpOihDLmlzdWIoZyksdi5pc3ViKFMpKX1yZXR1cm4oZmU9MD09PWcuY21wbigxKT9TOnYpLmNtcG4oMCk8MCYmZmUuaWFkZChOKSxm''@;'; put 'put ''ZX0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIE4uYWJzKCk7aWYoTi5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZz10aGlzLmNsb25lKCksQz1OLmNsb25lKCk7Zy5uZWdhdGl2ZT0wLEMubmVnYXRpdmU9MDtmb3IodmFyIFM9MDtn''@;'; put 'put ''LmlzRXZlbigpJiZDLmlzRXZlbigpO1MrKylnLml1c2hybigxKSxDLml1c2hybigxKTtmb3IoOzspe2Zvcig7Zy5pc0V2ZW4oKTspZy5pdXNocm4oMSk7Zm9yKDtDLmlzRXZlbigpOylDLml1c2hybigxKTt2YXIgdj1nLmNtcChDKTtpZih2PDApe3ZhciBwPWc7Zz1DLEM9cH1lbHNlIGlmKDA9''@;'; put 'put ''PT12fHwwPT09Qy5jbXBuKDEpKWJyZWFrO2cuaXN1YihDKX1yZXR1cm4gQy5pdXNobG4oUyl9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuZWdjZChOKS5hLnVtb2QoTil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndv''@;'; put 'put ''cmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLndvcmRzWzBdJk59LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKE4pe20oIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBOKTt2YXIgZz1OJTI2LEM9KE4tZykvMjYsUz0xPDxnO2lmKHRoaXMubGVuZ3RoPD1DKXJldHVybiB0aGlzLl9leHBhbmQoQysxKSx0aGlzLndvcmRzW0NdfD1TLHRoaXM7Zm9yKHZhciB2PVMscD1DOzAhPT12JiZwPHRoaXMubGVuZ3RoO3ArKyl7dmFyIHc9MHx0aGlzLndvcmRzW3Bd''@;'; put 'put ''O3Y9KHcrPXYpPj4+MjYsdGhpcy53b3Jkc1twXT13Jj02NzEwODg2M31yZXR1cm4gMCE9PXYmJih0aGlzLndvcmRzW3BdPXYsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19''@;'; put 'put ''LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oTil7dmFyIEMsZz1OPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFnKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZnKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlDPTE7ZWxzZXtnJiYoTj0tTiksbShOPD02''@;'; put 'put ''NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgUz0wfHRoaXMud29yZHNbMF07Qz1TPT09Tj8wOlM8Tj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1DOkN9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihOKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PU4ubmVnYXRp''@;'; put 'put ''dmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1OLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBnPXRoaXMudWNtcChOKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZzpnfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKE4pe2lmKHRoaXMubGVuZ3RoPk4ubGVuZ3RoKXJl''@;'; put 'put ''dHVybiAxO2lmKHRoaXMubGVuZ3RoPE4ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZz0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl7dmFyIFM9MHx0aGlzLndvcmRzW0NdLHY9MHxOLndvcmRzW0NdO2lmKFMhPT12KXtTPHY/Zz0tMTpTPnYmJihnPTEpO2JyZWFrfX1yZXR1cm4gZ30sTS5w''@;'; put 'put ''cm90b3R5cGUuZ3RuPWZ1bmN0aW9uKE4pe3JldHVybiAxPT09dGhpcy5jbXBuKE4pfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihOKXtyZXR1cm4gMT09PXRoaXMuY21wKE4pfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLmNtcG4oTik+PTB9LE0ucHJvdG90eXBl''@;'; put 'put ''Lmd0ZT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5jbXAoTik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihOKXtyZXR1cm4tMT09PXRoaXMuY21wbihOKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oTil7cmV0dXJuLTE9PT10aGlzLmNtcChOKX0sTS5wcm90b3R5cGUubHRlbj1mdW5j''@;'; put 'put ''dGlvbihOKXtyZXR1cm4gdGhpcy5jbXBuKE4pPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuY21wKE4pPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oTil7cmV0dXJuIDA9PT10aGlzLmNtcG4oTil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe3Jl''@;'; put 'put ''dHVybiAwPT09dGhpcy5jbXAoTil9LE0ucmVkPWZ1bmN0aW9uKE4pe3JldHVybiBuZXcgYihOKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxOLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoTil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29u''@;'; put 'put ''dGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMucmVkPU4sdGhpc30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oTil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGlu''@;'; put 'put ''IHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoTil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRJ''@;'; put 'put ''QWRkPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsTil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLE4pfSxNLnByb3RvdHlwZS5y''@;'; put 'put ''ZWRTaGw9ZnVuY3Rpb24oTil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKE4pe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxOKSx0aGlzLnJlZC5tdWwodGhpcyxOKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92''@;'; put 'put ''ZXJpZnkyKHRoaXMsTiksdGhpcy5yZWQuaW11bCh0aGlzLE4pfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlz''@;'; put 'put ''KX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihOKXtyZXR1cm4gbSh0aGlzLnJlZCYmIU4ucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLE4pfTt2YXIg''@;'; put 'put ''b2U9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBzZShILE4pe3RoaXMubmFtZT1ILHRoaXMucD1uZXcgTShOLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCks''@;'; put 'put ''dGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gaGUoKXtzZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIHVlKCl7c2UuY2FsbCh0aGlzLCJwMjI0Iiwi''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBjZSgpe3NlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24g''@;'; put 'put ''Rygpe3NlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gYihIKXtpZigic3RyaW5nIj09dHlwZW9mIEgpe3ZhciBOPU0uX3ByaW1lKEgpO3RoaXMubT1OLnAsdGhp''@;'; put 'put ''cy5wcmltZT1OfWVsc2UgbShILmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUgsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIEQoSCl7Yi5jYWxsKHRoaXMsSCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRo''@;'; put 'put ''aXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4o''@;'; put 'put ''MSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1zZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBOPW5ldyBNKG51bGwpO3JldHVybiBOLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhp''@;'; put 'put ''cy5uLzEzKSksTn0sc2UucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oTil7dmFyIEMsZz1OO2Rve3RoaXMuc3BsaXQoZyx0aGlzLnRtcCksQz0oZz0oZz10aGlzLmltdWxLKGcpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoQz50aGlzLm4pO3ZhciBTPUM8dGhpcy5uPy0x''@;'; put 'put ''OmcudWNtcCh0aGlzLnApO3JldHVybiAwPT09Uz8oZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEpOlM+MD9nLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1nLnN0cmlwP2cuc3RyaXAoKTpnLl9zdHJpcCgpLGd9LHNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihOLGcpe04uaXVzaHJuKHRoaXMubiww''@;'; put 'put ''LGcpfSxzZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7cmV0dXJuIE4uaW11bCh0aGlzLmspfSxsZShoZSxzZSksaGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKE4sZyl7Zm9yKHZhciBDPTQxOTQzMDMsUz1NYXRoLm1pbihOLmxlbmd0aCw5KSx2PTA7djxTO3YrKylnLndvcmRzW3Zd''@;'; put 'put ''PU4ud29yZHNbdl07aWYoZy5sZW5ndGg9UyxOLmxlbmd0aDw9OSlyZXR1cm4gTi53b3Jkc1swXT0wLHZvaWQoTi5sZW5ndGg9MSk7dmFyIHA9Ti53b3Jkc1s5XTtmb3IoZy53b3Jkc1tnLmxlbmd0aCsrXT1wJkMsdj0xMDt2PE4ubGVuZ3RoO3YrKyl7dmFyIHc9MHxOLndvcmRzW3ZdO04ud29y''@;'; put 'put ''ZHNbdi0xMF09KHcmQyk8PDR8cD4+PjIyLHA9d31OLndvcmRzW3YtMTBdPXA+Pj49MjIsTi5sZW5ndGgtPTA9PT1wJiZOLmxlbmd0aD4xMD8xMDo5fSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oTil7Ti53b3Jkc1tOLmxlbmd0aF09MCxOLndvcmRzW04ubGVuZ3RoKzFdPTAsTi5sZW5n''@;'; put 'put ''dGgrPTI7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXt2YXIgUz0wfE4ud29yZHNbQ107Ti53b3Jkc1tDXT02NzEwODg2MyYoZys9OTc3KlMpLGc9NjQqUysoZy82NzEwODg2NHwwKX1yZXR1cm4gMD09PU4ud29yZHNbTi5sZW5ndGgtMV0mJihOLmxlbmd0aC0tLDA9PT1OLndvcmRz''@;'; put 'put ''W04ubGVuZ3RoLTFdJiZOLmxlbmd0aC0tKSxOfSxsZSh1ZSxzZSksbGUoY2Usc2UpLGxlKEcsc2UpLEcucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKE4pe2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl7dmFyIFM9MTkqKDB8Ti53b3Jkc1tDXSkrZyx2PTY3MTA4ODYzJlM7Uz4+Pj0y''@;'; put 'put ''NixOLndvcmRzW0NdPXYsZz1TfXJldHVybiAwIT09ZyYmKE4ud29yZHNbTi5sZW5ndGgrK109ZyksTn0sTS5fcHJpbWU9ZnVuY3Rpb24oTil7aWYob2VbTl0pcmV0dXJuIG9lW05dO3ZhciBnO2lmKCJrMjU2Ij09PU4pZz1uZXcgaGU7ZWxzZSBpZigicDIyNCI9PT1OKWc9bmV3IHVlO2Vsc2Ug''@;'; put 'put ''aWYoInAxOTIiPT09TilnPW5ldyBjZTtlbHNle2lmKCJwMjU1MTkiIT09Til0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitOKTtnPW5ldyBHfXJldHVybiBvZVtOXT1nLGd9LGIucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKE4pe20oMD09PU4ubmVnYXRpdmUsInJlZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShOLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxiLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihOLGcpe20oMD09KE4ubmVnYXRpdmV8Zy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiks''@;'; put 'put ''bShOLnJlZCYmTi5yZWQ9PT1nLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxiLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShOKS5fZm9yY2VSZWQodGhpcyk6KEkoTixOLnVtb2QodGhpcy5tKS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcykpLE4pfSxiLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oTil7cmV0dXJuIE4uaXNaZXJvKCk/Ti5jbG9uZSgpOnRoaXMubS5zdWIoTikuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oTixnKXt0aGlzLl92ZXJpZnkyKE4sZyk7dmFyIEM9Ti5h''@;'; put 'put ''ZGQoZyk7cmV0dXJuIEMuY21wKHRoaXMubSk+PTAmJkMuaXN1Yih0aGlzLm0pLEMuX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uaWFkZChnKTtyZXR1cm4gQy5jbXAodGhpcy5tKT49MCYmQy5pc3ViKHRo''@;'; put 'put ''aXMubSksQ30sYi5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKE4sZyl7dGhpcy5fdmVyaWZ5MihOLGcpO3ZhciBDPU4uc3ViKGcpO3JldHVybiBDLmNtcG4oMCk8MCYmQy5pYWRkKHRoaXMubSksQy5fZm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oTixnKXt0aGlzLl92''@;'; put 'put ''ZXJpZnkyKE4sZyk7dmFyIEM9Ti5pc3ViKGcpO3JldHVybiBDLmNtcG4oMCk8MCYmQy5pYWRkKHRoaXMubSksQ30sYi5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoTiksdGhpcy5pbW9kKE4udXNobG4oZykpfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0''@;'; put 'put ''aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoTixnKSx0aGlzLmltb2QoTi5pbXVsKGcpKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sZyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoTixnKSx0aGlzLmltb2QoTi5tdWwoZykpfSxiLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKE4pe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltdWwoTixOLmNsb25lKCkpfSxiLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMubXVsKE4sTil9LGIucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oTil7aWYoTi5pc1plcm8oKSlyZXR1cm4gTi5jbG9uZSgpO3ZhciBnPXRoaXMubS5hbmRsbigzKTtpZiht''@;'; put 'put ''KGclMj09MSksMz09PWcpe3ZhciBDPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coTixDKX1mb3IodmFyIFM9dGhpcy5tLnN1Ym4oMSksdj0wOyFTLmlzWmVybygpJiYwPT09Uy5hbmRsbigxKTspdisrLFMuaXVzaHJuKDEpO20oIVMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBwPW5ldyBNKDEpLnRvUmVkKHRoaXMpLHc9cC5yZWROZWcoKSxKPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxuZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG5lPW5ldyBNKDIqbmUqbmUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhuZSxKKS5jbXAodyk7KW5lLnJlZElBZGQodyk7Zm9y''@;'; put 'put ''KHZhciBkZT10aGlzLnBvdyhuZSxTKSxmZT10aGlzLnBvdyhOLFMuYWRkbigxKS5pdXNocm4oMSkpLHhlPXRoaXMucG93KE4sUyksTGU9djswIT09eGUuY21wKHApOyl7Zm9yKHZhciBGZT14ZSxPZT0wOzAhPT1GZS5jbXAocCk7T2UrKylGZT1GZS5yZWRTcXIoKTttKE9lPExlKTt2YXIgamU9''@;'; put 'put ''dGhpcy5wb3coZGUsbmV3IE0oMSkuaXVzaGxuKExlLU9lLTEpKTtmZT1mZS5yZWRNdWwoamUpLGRlPWplLnJlZFNxcigpLHhlPXhlLnJlZE11bChkZSksTGU9T2V9cmV0dXJuIGZlfSxiLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKE4pe3ZhciBnPU4uX2ludm1wKHRoaXMubSk7cmV0dXJuIDAh''@;'; put 'put ''PT1nLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGcpLnJlZE5lZygpKTp0aGlzLmltb2QoZyl9LGIucHJvdG90eXBlLnBvdz1mdW5jdGlvbihOLGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1nLmNtcG4oMSkpcmV0dXJuIE4uY2xv''@;'; put 'put ''bmUoKTt2YXIgUz1uZXcgQXJyYXkoMTYpO1NbMF09bmV3IE0oMSkudG9SZWQodGhpcyksU1sxXT1OO2Zvcih2YXIgdj0yO3Y8Uy5sZW5ndGg7disrKVNbdl09dGhpcy5tdWwoU1t2LTFdLE4pO3ZhciBwPVNbMF0sdz0wLEo9MCxuZT1nLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0y''@;'; put 'put ''Niksdj1nLmxlbmd0aC0xO3Y+PTA7di0tKXtmb3IodmFyIGRlPWcud29yZHNbdl0sZmU9bmUtMTtmZT49MDtmZS0tKXt2YXIgeGU9ZGU+PmZlJjE7cCE9PVNbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT13Pyh3PDw9MSx3fD14ZSwoND09KytKfHwwPT09diYmMD09PWZlKSYmKHA9''@;'; put 'put ''dGhpcy5tdWwocCxTW3ddKSxKPTAsdz0wKSk6Sj0wfW5lPTI2fXJldHVybiBwfSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oTil7dmFyIGc9Ti51bW9kKHRoaXMubSk7cmV0dXJuIGc9PT1OP2cuY2xvbmUoKTpnfSxiLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihOKXt2''@;'; put 'put ''YXIgZz1OLmNsb25lKCk7cmV0dXJuIGcucmVkPW51bGwsZ30sTS5tb250PWZ1bmN0aW9uKE4pe3JldHVybiBuZXcgRChOKX0sbGUoRCxiKSxELnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oTil7cmV0dXJuIHRoaXMuaW1vZChOLnVzaGxuKHRoaXMuc2hpZnQpKX0sRC5wcm90b3R5cGUu''@;'; put 'put ''Y29udmVydEZyb209ZnVuY3Rpb24oTil7dmFyIGc9dGhpcy5pbW9kKE4ubXVsKHRoaXMucmludikpO3JldHVybiBnLnJlZD1udWxsLGd9LEQucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oTixnKXtpZihOLmlzWmVybygpfHxnLmlzWmVybygpKXJldHVybiBOLndvcmRzWzBdPTAsTi5sZW5ndGg9''@;'; put 'put ''MSxOO3ZhciBDPU4uaW11bChnKSxTPUMubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHY9Qy5pc3ViKFMpLml1c2hybih0aGlzLnNoaWZ0KSxwPXY7cmV0dXJuIHYuY21wKHRoaXMubSk+PTA/cD12LmlzdWIodGhpcy5tKTp2''@;'; put 'put ''LmNtcG4oMCk8MCYmKHA9di5pYWRkKHRoaXMubSkpLHAuX2ZvcmNlUmVkKHRoaXMpfSxELnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTixnKXtpZihOLmlzWmVybygpfHxnLmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEM9Ti5tdWwoZyksUz1DLm1hc2tuKHRo''@;'; put 'put ''aXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSx2PUMuaXN1YihTKS5pdXNocm4odGhpcy5zaGlmdCkscD12O3JldHVybiB2LmNtcCh0aGlzLm0pPj0wP3A9di5pc3ViKHRoaXMubSk6di5jbXBuKDApPDAmJihwPXYuaWFkZCh0aGlzLm0pKSxw''@;'; put 'put ''Ll9mb3JjZVJlZCh0aGlzKX0sRC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcy5pbW9kKE4uX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDYwMDgyOihhdCxJZSxGKT0+e3ZhciBhZTtmdW5jdGlv''@;'; put 'put ''biB4KGxlKXt0aGlzLnJhbmQ9bGV9aWYoYXQuZXhwb3J0cz1mdW5jdGlvbihNKXtyZXR1cm4gYWV8fChhZT1uZXcgeChudWxsKSksYWUuZ2VuZXJhdGUoTSl9LGF0LmV4cG9ydHMuUmFuZD14LHgucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKE0pe3JldHVybiB0aGlzLl9yYW5kKE0pfSx4''@;'; put 'put ''LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhNKTtmb3IodmFyIE89bmV3IFVpbnQ4QXJyYXkoTSksUj0wO1I8Ty5sZW5ndGg7UisrKU9bUl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gT30sIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/eC5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oTSl7dmFyIE89bmV3IFVpbnQ4QXJyYXkoTSk7cmV0dXJuIHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhPKSxPfTpzZWxmLm1zQ3J5''@;'; put 'put ''cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz94LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihNKXt2YXIgTz1uZXcgVWludDhBcnJheShNKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoTyksT306Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJih4LnByb3Rv''@;'; put 'put ''dHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIG09Rig3NzkwMyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIG0ucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7eC5wcm90b3R5''@;'; put 'put ''cGUuX3JhbmQ9ZnVuY3Rpb24oTSl7cmV0dXJuIG0ucmFuZG9tQnl0ZXMoTSl9fWNhdGNoe319LDY0MDM6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24geCh6KXthZS5pc0J1ZmZlcih6KXx8KHo9YWUuZnJvbSh6KSk7Zm9yKHZhciBLPXoubGVuZ3RoLzR8MCxJPW5l''@;'; put 'put ''dyBBcnJheShLKSxrPTA7azxLO2srKylJW2tdPXoucmVhZFVJbnQzMkJFKDQqayk7cmV0dXJuIEl9ZnVuY3Rpb24gbSh6KXtmb3IoOzA8ei5sZW5ndGg7eisrKXpbMF09MH1mdW5jdGlvbiBsZSh6LEssSSxrLEUpe2Zvcih2YXIgdGUsb2Usc2UsaGUsaj1JWzBdLFY9SVsxXSxCPUlbMl0sWT1J''@;'; put 'put ''WzNdLFg9elswXV5LWzBdLFU9elsxXV5LWzFdLHE9elsyXV5LWzJdLGVlPXpbM11eS1szXSx1ZT00LGNlPTE7Y2U8RTtjZSsrKXRlPWpbWD4+PjI0XV5WW1U+Pj4xNiYyNTVdXkJbcT4+PjgmMjU1XV5ZWzI1NSZlZV1eS1t1ZSsrXSxvZT1qW1U+Pj4yNF1eVltxPj4+MTYmMjU1XV5CW2VlPj4+''@;'; put 'put ''OCYyNTVdXllbMjU1JlhdXktbdWUrK10sc2U9altxPj4+MjRdXlZbZWU+Pj4xNiYyNTVdXkJbWD4+PjgmMjU1XV5ZWzI1NSZVXV5LW3VlKytdLGhlPWpbZWU+Pj4yNF1eVltYPj4+MTYmMjU1XV5CW1U+Pj44JjI1NV1eWVsyNTUmcV1eS1t1ZSsrXSxYPXRlLFU9b2UscT1zZSxlZT1oZTtyZXR1''@;'; put 'put ''cm4gdGU9KGtbWD4+PjI0XTw8MjR8a1tVPj4+MTYmMjU1XTw8MTZ8a1txPj4+OCYyNTVdPDw4fGtbMjU1JmVlXSleS1t1ZSsrXSxvZT0oa1tVPj4+MjRdPDwyNHxrW3E+Pj4xNiYyNTVdPDwxNnxrW2VlPj4+OCYyNTVdPDw4fGtbMjU1JlhdKV5LW3VlKytdLHNlPShrW3E+Pj4yNF08PDI0fGtb''@;'; put 'put ''ZWU+Pj4xNiYyNTVdPDwxNnxrW1g+Pj44JjI1NV08PDh8a1syNTUmVV0pXktbdWUrK10saGU9KGtbZWU+Pj4yNF08PDI0fGtbWD4+PjE2JjI1NV08PDE2fGtbVT4+PjgmMjU1XTw8OHxrWzI1NSZxXSleS1t1ZSsrXSxbdGU+Pj49MCxvZT4+Pj0wLHNlPj4+PTAsaGU+Pj49MF19dmFyIE09WzAs''@;'; put 'put ''MSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLE89ZnVuY3Rpb24oKXtmb3IodmFyIHo9bmV3IEFycmF5KDI1NiksSz0wO0s8MjU2O0srKyl6W0tdPUs8MTI4P0s8PDE6Szw8MV4yODM7Zm9yKHZhciBJPVtdLGs9W10sRT1bW10sW10sW10sW11dLGo9W1tdLFtdLFtdLFtdXSxWPTAsQj0wLFk9''@;'; put 'put ''MDtZPDI1NjsrK1kpe3ZhciBYPUJeQjw8MV5CPDwyXkI8PDNeQjw8NDtJW1ZdPVg9WD4+PjheMjU1JlheOTksa1tYXT1WO3ZhciBVPXpbVl0scT16W1VdLGVlPXpbcV0sdGU9MjU3KnpbWF1eMTY4NDMwMDgqWDtFWzBdW1ZdPXRlPDwyNHx0ZT4+PjgsRVsxXVtWXT10ZTw8MTZ8dGU+Pj4xNixF''@;'; put 'put ''WzJdW1ZdPXRlPDw4fHRlPj4+MjQsRVszXVtWXT10ZSxqWzBdW1hdPSh0ZT0xNjg0MzAwOSplZV42NTUzNypxXjI1NypVXjE2ODQzMDA4KlYpPDwyNHx0ZT4+PjgsalsxXVtYXT10ZTw8MTZ8dGU+Pj4xNixqWzJdW1hdPXRlPDw4fHRlPj4+MjQsalszXVtYXT10ZSwwPT09Vj9WPUI9MTooVj1V''@;'; put 'put ''Xnpbelt6W2VlXlVdXV0sQl49elt6W0JdXSl9cmV0dXJue1NCT1g6SSxJTlZfU0JPWDprLFNVQl9NSVg6RSxJTlZfU1VCX01JWDpqfX0oKTtmdW5jdGlvbiBSKHope3RoaXMuX2tleT14KHopLHRoaXMuX3Jlc2V0KCl9Ui5ibG9ja1NpemU9MTYsUi5rZXlTaXplPTMyLFIucHJvdG90eXBlLmJs''@;'; put 'put ''b2NrU2l6ZT1SLmJsb2NrU2l6ZSxSLnByb3RvdHlwZS5rZXlTaXplPVIua2V5U2l6ZSxSLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIHo9dGhpcy5fa2V5LEs9ei5sZW5ndGgsST1LKzYsaz00KihJKzEpLEU9W10saj0wO2o8SztqKyspRVtqXT16W2pdO2ZvcihqPUs7ajxr''@;'; put 'put ''O2orKyl7dmFyIFY9RVtqLTFdO2olSz09MD8oVj1PLlNCT1hbKFY9Vjw8OHxWPj4+MjQpPj4+MjRdPDwyNHxPLlNCT1hbVj4+PjE2JjI1NV08PDE2fE8uU0JPWFtWPj4+OCYyNTVdPDw4fE8uU0JPWFsyNTUmVl0sVl49TVtqL0t8MF08PDI0KTpLPjYmJmolSz09NCYmKFY9Ty5TQk9YW1Y+Pj4y''@;'; put 'put ''NF08PDI0fE8uU0JPWFtWPj4+MTYmMjU1XTw8MTZ8Ty5TQk9YW1Y+Pj44JjI1NV08PDh8Ty5TQk9YWzI1NSZWXSksRVtqXT1FW2otS11eVn1mb3IodmFyIEI9W10sWT0wO1k8aztZKyspe3ZhciBYPWstWSxVPUVbWC0oWSU0PzA6NCldO0JbWV09WTw0fHxYPD00P1U6Ty5JTlZfU1VCX01JWFsw''@;'; put 'put ''XVtPLlNCT1hbVT4+PjI0XV1eTy5JTlZfU1VCX01JWFsxXVtPLlNCT1hbVT4+PjE2JjI1NV1dXk8uSU5WX1NVQl9NSVhbMl1bTy5TQk9YW1U+Pj44JjI1NV1dXk8uSU5WX1NVQl9NSVhbM11bTy5TQk9YWzI1NSZVXV19dGhpcy5fblJvdW5kcz1JLHRoaXMuX2tleVNjaGVkdWxlPUUsdGhpcy5f''@;'; put 'put ''aW52S2V5U2NoZWR1bGU9Qn0sUi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKHope3JldHVybiBsZSh6PXgoeiksdGhpcy5fa2V5U2NoZWR1bGUsTy5TVUJfTUlYLE8uU0JPWCx0aGlzLl9uUm91bmRzKX0sUi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKHope3Zh''@;'; put 'put ''ciBLPXRoaXMuZW5jcnlwdEJsb2NrUmF3KHopLEk9YWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBJLndyaXRlVUludDMyQkUoS1swXSwwKSxJLndyaXRlVUludDMyQkUoS1sxXSw0KSxJLndyaXRlVUludDMyQkUoS1syXSw4KSxJLndyaXRlVUludDMyQkUoS1szXSwxMiksSX0sUi5wcm90b3R5''@;'; put 'put ''cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKHope3ZhciBLPSh6PXgoeikpWzFdO3pbMV09elszXSx6WzNdPUs7dmFyIEk9bGUoeix0aGlzLl9pbnZLZXlTY2hlZHVsZSxPLklOVl9TVUJfTUlYLE8uSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksaz1hZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIGsu''@;'; put 'put ''d3JpdGVVSW50MzJCRShJWzBdLDApLGsud3JpdGVVSW50MzJCRShJWzNdLDQpLGsud3JpdGVVSW50MzJCRShJWzJdLDgpLGsud3JpdGVVSW50MzJCRShJWzFdLDEyKSxrfSxSLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe20odGhpcy5fa2V5U2NoZWR1bGUpLG0odGhpcy5faW52S2V5U2No''@;'; put 'put ''ZWR1bGUpLG0odGhpcy5fa2V5KX0sYXQuZXhwb3J0cy5BRVM9Un0sNTYwODc6KGF0LEllLEYpPT57dmFyIGFlPUYoNjQwMykseD1GKDg0MykuQnVmZmVyLG09Rig4NjQyMCksbGU9Rig2NjY5OCksTT1GKDE1MDMpLE89Rig2MzYzNiksUj1GKDkxMDcpO2Z1bmN0aW9uIEkoayxFLGosVil7bS5j''@;'; put 'put ''YWxsKHRoaXMpO3ZhciBCPXguYWxsb2MoNCwwKTt0aGlzLl9jaXBoZXI9bmV3IGFlLkFFUyhFKTt2YXIgWT10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIpO3RoaXMuX2doYXNoPW5ldyBNKFkpLGo9ZnVuY3Rpb24gSyhrLEUsail7aWYoMTI9PT1FLmxlbmd0aClyZXR1cm4gay5fZmluSUQ9''@;'; put 'put ''eC5jb25jYXQoW0UseC5mcm9tKFswLDAsMCwxXSldKSx4LmNvbmNhdChbRSx4LmZyb20oWzAsMCwwLDJdKV0pO3ZhciBWPW5ldyBNKGopLEI9RS5sZW5ndGgsWT1CJTE2O1YudXBkYXRlKEUpLFkmJlYudXBkYXRlKHguYWxsb2MoWT0xNi1ZLDApKSxWLnVwZGF0ZSh4LmFsbG9jKDgsMCkpO3Zh''@;'; put 'put ''ciBYPTgqQixVPXguYWxsb2MoOCk7VS53cml0ZVVJbnRCRShYLDAsOCksVi51cGRhdGUoVSksay5fZmluSUQ9Vi5zdGF0ZTt2YXIgcT14LmZyb20oay5fZmluSUQpO3JldHVybiBSKHEpLHF9KHRoaXMsaixZKSx0aGlzLl9wcmV2PXguZnJvbShqKSx0aGlzLl9jYWNoZT14LmFsbG9jVW5zYWZl''@;'; put 'put ''KDApLHRoaXMuX3NlY0NhY2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1WLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPWssdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1sZShJLG0pLEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oayl7''@;'; put 'put ''aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIEU9MTYtdGhpcy5fYWxlbiUxNjtFPDE2JiYoRT14LmFsbG9jKEUsMCksdGhpcy5fZ2hhc2gudXBkYXRlKEUpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIGo9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsayk7cmV0dXJuIHRoaXMuX2doYXNo''@;'; put 'put ''LnVwZGF0ZSh0aGlzLl9kZWNyeXB0P2s6aiksdGhpcy5fbGVuKz1rLmxlbmd0aCxqfSxJLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRo''@;'; put 'put ''ZW50aWNhdGUgZGF0YSIpO3ZhciBrPU8odGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24geihrLEUpe3ZhciBqPTA7ay5sZW5ndGghPT1FLmxl''@;'; put 'put ''bmd0aCYmaisrO2Zvcih2YXIgVj1NYXRoLm1pbihrLmxlbmd0aCxFLmxlbmd0aCksQj0wO0I8VjsrK0Ipais9a1tCXV5FW0JdO3JldHVybiBqfShrLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRh''@;'; put 'put ''Iik7dGhpcy5fYXV0aFRhZz1rLHRoaXMuX2NpcGhlci5zY3J1YigpfSxJLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IXguaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBp''@;'; put 'put ''biB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxJLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKEUpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0''@;'; put 'put ''aGlzLl9hdXRoVGFnPUV9LEkucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihFKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoRSksdGhpcy5fYWxlbis9RS5sZW5n''@;'; put 'put ''dGh9LGF0LmV4cG9ydHM9SX0sODI0ODk6KGF0LEllLEYpPT57dmFyIGFlPUYoMTI2ODkpLHg9Rig1MDA0NiksbT1GKDQ0OTQ2KTtJZS5jcmVhdGVDaXBoZXI9SWUuQ2lwaGVyPWFlLmNyZWF0ZUNpcGhlcixJZS5jcmVhdGVDaXBoZXJpdj1JZS5DaXBoZXJpdj1hZS5jcmVhdGVDaXBoZXJpdixJ''@;'; put 'put ''ZS5jcmVhdGVEZWNpcGhlcj1JZS5EZWNpcGhlcj14LmNyZWF0ZURlY2lwaGVyLEllLmNyZWF0ZURlY2lwaGVyaXY9SWUuRGVjaXBoZXJpdj14LmNyZWF0ZURlY2lwaGVyaXYsSWUubGlzdENpcGhlcnM9SWUuZ2V0Q2lwaGVycz1mdW5jdGlvbiBsZSgpe3JldHVybiBPYmplY3Qua2V5cyhtKX19''@;'; put 'put ''LDUwMDQ2OihhdCxJZSxGKT0+e3ZhciBhZT1GKDU2MDg3KSx4PUYoODQzKS5CdWZmZXIsbT1GKDEyNDIxKSxsZT1GKDg5MzU0KSxNPUYoODY0MjApLE89Rig2NDAzKSxSPUYoMzY1MDUpO2Z1bmN0aW9uIEsoVixCLFkpe00uY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgSSx0aGlzLl9sYXN0''@;'; put 'put ''PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IE8uQUVTKEIpLHRoaXMuX3ByZXY9eC5mcm9tKFkpLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBJKCl7dGhpcy5jYWNoZT14LmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEUoVixCLFkpe3ZhciBYPW1bVi50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPXguZnJvbShZKSksIkdDTSIhPT1YLm1vZGUmJlkubGVuZ3RoIT09WC5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAi''@;'; put 'put ''K1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIEImJihCPXguZnJvbShCKSksQi5sZW5ndGghPT1YLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK0IubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVgudHlwZT9uZXcgbGUoWC5tb2R1bGUsQixZLCEw''@;'; put 'put ''KToiYXV0aCI9PT1YLnR5cGU/bmV3IGFlKFgubW9kdWxlLEIsWSwhMCk6bmV3IEsoWC5tb2R1bGUsQixZKX1GKDY2Njk4KShLLE0pLEsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRkKFYpO2Zvcih2YXIgQixZLFg9W107Qj10aGlzLl9jYWNoZS5nZXQodGhp''@;'; put 'put ''cy5fYXV0b3BhZGRpbmcpOylZPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLEIpLFgucHVzaChZKTtyZXR1cm4geC5jb25jYXQoWCl9LEsucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBWPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uIGsoVil7dmFyIEI9VlsxNV07aWYoQjwxfHxCPjE2KXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgWT0tMTsrK1k8QjspaWYoVltZKygxNi1CKV0hPT1CKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09''@;'; put 'put ''QilyZXR1cm4gVi5zbGljZSgwLDE2LUIpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxWKSk7aWYoVil0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSxLLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''YXV0b3BhZGRpbmc9ISFWLHRoaXN9LEkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXt0aGlzLmNhY2hlPXguY29uY2F0KFt0aGlzLmNhY2hlLFZdKX0sSS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFYpe3ZhciBCO2lmKFYpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBCPXRoaXMu''@;'; put 'put ''Y2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxCfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBCPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxCO3JldHVybiBudWxsfSxJLnBy''@;'; put 'put ''b3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfSxJZS5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbiBqKFYsQil7dmFyIFk9bVtWLnRvTG93ZXJDYXNlKCldO2lmKCFZKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUg''@;'; put 'put ''dHlwZSIpO3ZhciBYPVIoQiwhMSxZLmtleSxZLml2KTtyZXR1cm4gRShWLFgua2V5LFguaXYpfSxJZS5jcmVhdGVEZWNpcGhlcml2PUV9LDEyNjg5OihhdCxJZSxGKT0+e3ZhciBhZT1GKDEyNDIxKSx4PUYoNTYwODcpLG09Rig4NDMpLkJ1ZmZlcixsZT1GKDg5MzU0KSxNPUYoODY0MjApLE89''@;'; put 'put ''Rig2NDAzKSxSPUYoMzY1MDUpO2Z1bmN0aW9uIEsoVixCLFkpe00uY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgayx0aGlzLl9jaXBoZXI9bmV3IE8uQUVTKEIpLHRoaXMuX3ByZXY9bS5mcm9tKFkpLHRoaXMuX21vZGU9Vix0aGlzLl9hdXRvcGFkZGluZz0hMH1GKDY2Njk4KShLLE0pLEsu''@;'; put 'put ''cHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVil7dGhpcy5fY2FjaGUuYWRkKFYpO2Zvcih2YXIgQixZLFg9W107Qj10aGlzLl9jYWNoZS5nZXQoKTspWT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxCKSxYLnB1c2goWSk7cmV0dXJuIG0uY29uY2F0KFgpfTt2YXIgST1tLmFsbG9jKDE2LDE2''@;'; put 'put ''KTtmdW5jdGlvbiBrKCl7dGhpcy5jYWNoZT1tLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEUoVixCLFkpe3ZhciBYPWFlW1YudG9Mb3dlckNhc2UoKV07aWYoIVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBCJiYoQj1tLmZy''@;'; put 'put ''b20oQikpLEIubGVuZ3RoIT09WC5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitCLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1tLmZyb20oWSkpLCJHQ00iIT09WC5tb2RlJiZZLmxlbmd0aCE9PVguaXYpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiaW52YWxpZCBpdiBsZW5ndGggIitZLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1YLnR5cGU/bmV3IGxlKFgubW9kdWxlLEIsWSk6ImF1dGgiPT09WC50eXBlP25ldyB4KFgubW9kdWxlLEIsWSk6bmV3IEsoWC5tb2R1bGUsQixZKX1LLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgVj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBWPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFYpLHRoaXMuX2NpcGhlci5zY3J1YigpLFY7aWYoIVYuZXF1YWxzKEkpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBu''@;'; put 'put ''b3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LEsucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVYsdGhpc30say5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFYpe3RoaXMuY2FjaGU9bS5jb25jYXQoW3RoaXMuY2FjaGUs''@;'; put 'put ''Vl0pfSxrLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIFY9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxWfXJldHVybiBudWxsfSxrLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlv''@;'; put 'put ''bigpe2Zvcih2YXIgVj0xNi10aGlzLmNhY2hlLmxlbmd0aCxCPW0uYWxsb2NVbnNhZmUoViksWT0tMTsrK1k8VjspQi53cml0ZVVJbnQ4KFYsWSk7cmV0dXJuIG0uY29uY2F0KFt0aGlzLmNhY2hlLEJdKX0sSWUuY3JlYXRlQ2lwaGVyaXY9RSxJZS5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gaihW''@;'; put 'put ''LEIpe3ZhciBZPWFlW1YudG9Mb3dlckNhc2UoKV07aWYoIVkpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFg9UihCLCExLFkua2V5LFkuaXYpO3JldHVybiBFKFYsWC5rZXksWC5pdil9fSwxNTAzOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVy''@;'; put 'put ''LHg9YWUuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gbGUoTyl7dmFyIFI9YWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBSLndyaXRlVUludDMyQkUoT1swXT4+PjAsMCksUi53cml0ZVVJbnQzMkJFKE9bMV0+Pj4wLDQpLFIud3JpdGVVSW50MzJCRShPWzJdPj4+MCw4KSxSLndyaXRlVUludDMyQkUo''@;'; put 'put ''T1szXT4+PjAsMTIpLFJ9ZnVuY3Rpb24gTShPKXt0aGlzLmg9Tyx0aGlzLnN0YXRlPWFlLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9YWUuYWxsb2NVbnNhZmUoMCl9TS5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24oTyl7Zm9yKHZhciBSPS0xOysrUjxPLmxlbmd0aDspdGhpcy5zdGF0ZVtSXV49''@;'; put 'put ''T1tSXTt0aGlzLl9tdWx0aXBseSgpfSxNLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHosSSxPPWZ1bmN0aW9uIG0oTyl7cmV0dXJuW08ucmVhZFVJbnQzMkJFKDApLE8ucmVhZFVJbnQzMkJFKDQpLE8ucmVhZFVJbnQzMkJFKDgpLE8ucmVhZFVJbnQzMkJFKDEyKV19''@;'; put 'put ''KHRoaXMuaCksUj1bMCwwLDAsMF0saz0tMTsrK2s8MTI4Oyl7Zm9yKDAhPSh0aGlzLnN0YXRlW35+KGsvOCldJjE8PDctayU4KSYmKFJbMF1ePU9bMF0sUlsxXV49T1sxXSxSWzJdXj1PWzJdLFJbM11ePU9bM10pLEk9MCE9KDEmT1szXSksej0zO3o+MDt6LS0pT1t6XT1PW3pdPj4+MXwoMSZP''@;'; put 'put ''W3otMV0pPDwzMTtPWzBdPU9bMF0+Pj4xLEkmJihPWzBdPU9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1sZShSKX0sTS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8pe3RoaXMuY2FjaGU9YWUuY29uY2F0KFt0aGlzLmNhY2hlLE9dKTtmb3IodmFyIFI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2''@;'; put 'put ''OylSPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKFIpfSxNLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChhZS5jb25jYXQoW3RoaXMuY2FjaGUs''@;'; put 'put ''eF0sMTYpKSx0aGlzLmdoYXNoKGxlKFswLE8sMCxSXSkpLHRoaXMuc3RhdGV9LGF0LmV4cG9ydHM9TX0sOTEwNzphdD0+e2F0LmV4cG9ydHM9ZnVuY3Rpb24gSWUoRil7Zm9yKHZhciB4LGFlPUYubGVuZ3RoO2FlLS07KXtpZigyNTUhPT0oeD1GLnJlYWRVSW50OChhZSkpKXt4KyssRi53cml0''@;'; put 'put ''ZVVJbnQ4KHgsYWUpO2JyZWFrfUYud3JpdGVVSW50OCgwLGFlKX19fSwzMTE3NTooYXQsSWUsRik9Pnt2YXIgYWU9Rig2MzYzNik7SWUuZW5jcnlwdD1mdW5jdGlvbih4LG0pe3ZhciBsZT1hZShtLHguX3ByZXYpO3JldHVybiB4Ll9wcmV2PXguX2NpcGhlci5lbmNyeXB0QmxvY2sobGUpLHgu''@;'; put 'put ''X3ByZXZ9LEllLmRlY3J5cHQ9ZnVuY3Rpb24oeCxtKXt2YXIgbGU9eC5fcHJldjt4Ll9wcmV2PW07dmFyIE09eC5fY2lwaGVyLmRlY3J5cHRCbG9jayhtKTtyZXR1cm4gYWUoTSxsZSl9fSw0MzYzMTooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNjM2MzYpO2Z1bmN0aW9u''@;'; put 'put ''IG0obGUsTSxPKXt2YXIgUj1NLmxlbmd0aCx6PXgoTSxsZS5fY2FjaGUpO3JldHVybiBsZS5fY2FjaGU9bGUuX2NhY2hlLnNsaWNlKFIpLGxlLl9wcmV2PWFlLmNvbmNhdChbbGUuX3ByZXYsTz9NOnpdKSx6fUllLmVuY3J5cHQ9ZnVuY3Rpb24obGUsTSxPKXtmb3IodmFyIHosUj1hZS5hbGxv''@;'; put 'put ''Y1Vuc2FmZSgwKTtNLmxlbmd0aDspe2lmKDA9PT1sZS5fY2FjaGUubGVuZ3RoJiYobGUuX2NhY2hlPWxlLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGxlLl9wcmV2KSxsZS5fcHJldj1hZS5hbGxvY1Vuc2FmZSgwKSksIShsZS5fY2FjaGUubGVuZ3RoPD1NLmxlbmd0aCkpe1I9YWUuY29uY2F0KFtS''@;'; put 'put ''LG0obGUsTSxPKV0pO2JyZWFrfVI9YWUuY29uY2F0KFtSLG0obGUsTS5zbGljZSgwLHo9bGUuX2NhY2hlLmxlbmd0aCksTyldKSxNPU0uc2xpY2Uoeil9cmV0dXJuIFJ9fSwzMzg5MjooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KGxlLE0sTyl7Zm9yKHZhciBr''@;'; put 'put ''LEUsej0tMSxJPTA7Kyt6PDg7KUkrPSgxMjgmKEU9bGUuX2NpcGhlci5lbmNyeXB0QmxvY2sobGUuX3ByZXYpWzBdXihrPU0mMTw8Ny16PzEyODowKSkpPj56JTgsbGUuX3ByZXY9bShsZS5fcHJldixPP2s6RSk7cmV0dXJuIEl9ZnVuY3Rpb24gbShsZSxNKXt2YXIgTz1sZS5sZW5ndGgsUj0t''@;'; put 'put ''MSx6PWFlLmFsbG9jVW5zYWZlKGxlLmxlbmd0aCk7Zm9yKGxlPWFlLmNvbmNhdChbbGUsYWUuZnJvbShbTV0pXSk7KytSPE87KXpbUl09bGVbUl08PDF8bGVbUisxXT4+NztyZXR1cm4gen1JZS5lbmNyeXB0PWZ1bmN0aW9uKGxlLE0sTyl7Zm9yKHZhciBSPU0ubGVuZ3RoLHo9YWUuYWxsb2NV''@;'; put 'put ''bnNhZmUoUiksSz0tMTsrK0s8UjspeltLXT14KGxlLE1bS10sTyk7cmV0dXJuIHp9fSwzNjc4NzooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcjtmdW5jdGlvbiB4KG0sbGUsTSl7dmFyIFI9bS5fY2lwaGVyLmVuY3J5cHRCbG9jayhtLl9wcmV2KVswXV5sZTtyZXR1cm4gbS5fcHJl''@;'; put 'put ''dj1hZS5jb25jYXQoW20uX3ByZXYuc2xpY2UoMSksYWUuZnJvbShbTT9sZTpSXSldKSxSfUllLmVuY3J5cHQ9ZnVuY3Rpb24obSxsZSxNKXtmb3IodmFyIE89bGUubGVuZ3RoLFI9YWUuYWxsb2NVbnNhZmUoTyksej0tMTsrK3o8TzspUlt6XT14KG0sbGVbel0sTSk7cmV0dXJuIFJ9fSw4NTI2''@;'; put 'put ''ODooYXQsSWUsRik9Pnt2YXIgYWU9Rig2MzYzNikseD1GKDg0MykuQnVmZmVyLG09Rig5MTA3KTtmdW5jdGlvbiBsZShPKXt2YXIgUj1PLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KE8uX3ByZXYpO3JldHVybiBtKE8uX3ByZXYpLFJ9SWUuZW5jcnlwdD1mdW5jdGlvbihPLFIpe3ZhciB6PU1h''@;'; put 'put ''dGguY2VpbChSLmxlbmd0aC8xNiksSz1PLl9jYWNoZS5sZW5ndGg7Ty5fY2FjaGU9eC5jb25jYXQoW08uX2NhY2hlLHguYWxsb2NVbnNhZmUoMTYqeildKTtmb3IodmFyIEk9MDtJPHo7SSsrKXt2YXIgaz1sZShPKSxFPUsrMTYqSTtPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMF0sRSswKSxP''@;'; put 'put ''Ll9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMV0sRSs0KSxPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbMl0sRSs4KSxPLl9jYWNoZS53cml0ZVVJbnQzMkJFKGtbM10sRSsxMil9dmFyIGo9Ty5fY2FjaGUuc2xpY2UoMCxSLmxlbmd0aCk7cmV0dXJuIE8uX2NhY2hlPU8uX2NhY2hlLnNsaWNlKFIu''@;'; put 'put ''bGVuZ3RoKSxhZShSLGopfX0sNDU5OTU6KGF0LEllKT0+e0llLmVuY3J5cHQ9ZnVuY3Rpb24oRixhZSl7cmV0dXJuIEYuX2NpcGhlci5lbmNyeXB0QmxvY2soYWUpfSxJZS5kZWNyeXB0PWZ1bmN0aW9uKEYsYWUpe3JldHVybiBGLl9jaXBoZXIuZGVjcnlwdEJsb2NrKGFlKX19LDEyNDIxOihh''@;'; put 'put ''dCxJZSxGKT0+e3ZhciBhZT17RUNCOkYoNDU5OTUpLENCQzpGKDMxMTc1KSxDRkI6Rig0MzYzMSksQ0ZCODpGKDM2Nzg3KSxDRkIxOkYoMzM4OTIpLE9GQjpGKDM0NTMyKSxDVFI6Rig4NTI2OCksR0NNOkYoODUyNjgpfSx4PUYoNDQ5NDYpO2Zvcih2YXIgbSBpbiB4KXhbbV0ubW9kdWxlPWFl''@;'; put 'put ''W3hbbV0ubW9kZV07YXQuZXhwb3J0cz14fSwzNDUzMjooYXQsSWUsRik9Pnt2YXIgYWU9Rig2MzYzNik7ZnVuY3Rpb24geChtKXtyZXR1cm4gbS5fcHJldj1tLl9jaXBoZXIuZW5jcnlwdEJsb2NrKG0uX3ByZXYpLG0uX3ByZXZ9SWUuZW5jcnlwdD1mdW5jdGlvbihtLGxlKXtmb3IoO20uX2Nh''@;'; put 'put ''Y2hlLmxlbmd0aDxsZS5sZW5ndGg7KW0uX2NhY2hlPUJ1ZmZlci5jb25jYXQoW20uX2NhY2hlLHgobSldKTt2YXIgTT1tLl9jYWNoZS5zbGljZSgwLGxlLmxlbmd0aCk7cmV0dXJuIG0uX2NhY2hlPW0uX2NhY2hlLnNsaWNlKGxlLmxlbmd0aCksYWUobGUsTSl9fSw4OTM1NDooYXQsSWUsRik9''@;'; put 'put ''Pnt2YXIgYWU9Rig2NDAzKSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKTtmdW5jdGlvbiBNKE8sUix6LEspe20uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGFlLkFFUyhSKSx0aGlzLl9wcmV2PXguZnJvbSh6KSx0aGlzLl9jYWNoZT14LmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0Nh''@;'; put 'put ''Y2hlPXguYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1LLHRoaXMuX21vZGU9T31GKDY2Njk4KShNLG0pLE0ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE8sdGhpcy5fZGVjcnlwdCl9LE0ucHJvdG90eXBlLl9maW5hbD1m''@;'; put 'put ''dW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSxhdC5leHBvcnRzPU19LDI1NjAwOihhdCxJZSxGKT0+e3ZhciBhZT1GKDE0OTQ4KSx4PUYoODI0ODkpLG09RigxMjQyMSksbGU9Rig4OTQwMiksTT1GKDM2NTA1KTtmdW5jdGlvbiB6KGssRSxqKXtpZihrPWsudG9Mb3dlckNhc2UoKSxt''@;'; put 'put ''W2tdKXJldHVybiB4LmNyZWF0ZUNpcGhlcml2KGssRSxqKTtpZihsZVtrXSlyZXR1cm4gbmV3IGFlKHtrZXk6RSxpdjpqLG1vZGU6a30pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIEsoayxFLGope2lmKGs9ay50b0xvd2VyQ2FzZSgpLG1ba10p''@;'; put 'put ''cmV0dXJuIHguY3JlYXRlRGVjaXBoZXJpdihrLEUsaik7aWYobGVba10pcmV0dXJuIG5ldyBhZSh7a2V5OkUsaXY6aixtb2RlOmssZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfUllLmNyZWF0ZUNpcGhlcj1JZS5DaXBoZXI9ZnVuY3Rpb24g''@;'; put 'put ''TyhrLEUpe3ZhciBqLFY7aWYoaz1rLnRvTG93ZXJDYXNlKCksbVtrXSlqPW1ba10ua2V5LFY9bVtrXS5pdjtlbHNle2lmKCFsZVtrXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtqPTgqbGVba10ua2V5LFY9bGVba10uaXZ9dmFyIEI9TShFLCExLGosVik7cmV0''@;'; put 'put ''dXJuIHooayxCLmtleSxCLml2KX0sSWUuY3JlYXRlQ2lwaGVyaXY9SWUuQ2lwaGVyaXY9eixJZS5jcmVhdGVEZWNpcGhlcj1JZS5EZWNpcGhlcj1mdW5jdGlvbiBSKGssRSl7dmFyIGosVjtpZihrPWsudG9Mb3dlckNhc2UoKSxtW2tdKWo9bVtrXS5rZXksVj1tW2tdLml2O2Vsc2V7aWYoIWxl''@;'; put 'put ''W2tdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2o9OCpsZVtrXS5rZXksVj1sZVtrXS5pdn12YXIgQj1NKEUsITEsaixWKTtyZXR1cm4gSyhrLEIua2V5LEIuaXYpfSxJZS5jcmVhdGVEZWNpcGhlcml2PUllLkRlY2lwaGVyaXY9SyxJZS5saXN0Q2lwaGVycz1J''@;'; put 'put ''ZS5nZXRDaXBoZXJzPWZ1bmN0aW9uIEkoKXtyZXR1cm4gT2JqZWN0LmtleXMobGUpLmNvbmNhdCh4LmdldENpcGhlcnMoKSl9fSwxNDk0ODooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NjQyMCkseD1GKDQwMTMyKSxtPUYoNjY2OTgpLGxlPUYoODQzKS5CdWZmZXIsTT17ImRlcy1lZGUzLWNiYyI6''@;'; put 'put ''eC5DQkMuaW5zdGFudGlhdGUoeC5FREUpLCJkZXMtZWRlMyI6eC5FREUsImRlcy1lZGUtY2JjIjp4LkNCQy5pbnN0YW50aWF0ZSh4LkVERSksImRlcy1lZGUiOnguRURFLCJkZXMtY2JjIjp4LkNCQy5pbnN0YW50aWF0ZSh4LkRFUyksImRlcy1lY2IiOnguREVTfTtmdW5jdGlvbiBPKFIpe2Fl''@;'; put 'put ''LmNhbGwodGhpcyk7dmFyIEksej1SLm1vZGUudG9Mb3dlckNhc2UoKSxLPU1bel07ST1SLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgaz1SLmtleTtsZS5pc0J1ZmZlcihrKXx8KGs9bGUuZnJvbShrKSksKCJkZXMtZWRlIj09PXp8fCJkZXMtZWRlLWNiYyI9PT16KSYmKGs9bGUu''@;'; put 'put ''Y29uY2F0KFtrLGsuc2xpY2UoMCw4KV0pKTt2YXIgRT1SLml2O2xlLmlzQnVmZmVyKEUpfHwoRT1sZS5mcm9tKEUpKSx0aGlzLl9kZXM9Sy5jcmVhdGUoe2tleTprLGl2OkUsdHlwZTpJfSl9TS5kZXM9TVsiZGVzLWNiYyJdLE0uZGVzMz1NWyJkZXMtZWRlMy1jYmMiXSxhdC5leHBvcnRzPU8s''@;'; put 'put ''bShPLGFlKSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFIpe3JldHVybiBsZS5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoUikpfSxPLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbGUuZnJvbSh0aGlzLl9kZXMuZmluYWwoKSl9fSw4OTQwMjooYXQsSWUpPT57SWVbImRl''@;'; put 'put ''cy1lY2IiXT17a2V5OjgsaXY6MH0sSWVbImRlcy1jYmMiXT1JZS5kZXM9e2tleTo4LGl2Ojh9LEllWyJkZXMtZWRlMy1jYmMiXT1JZS5kZXMzPXtrZXk6MjQsaXY6OH0sSWVbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxJZVsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LEllWyJkZXMt''@;'; put 'put ''ZWRlIl09e2tleToxNixpdjowfX0sNzE5NDY6KGF0LEllLEYpPT57dmFyIGFlPUYoNjI2NjIpLHg9Rig0NDAxOSk7ZnVuY3Rpb24gbGUoTyl7dmFyIHosUj1PLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IGFlKHgoUikpfXdoaWxlKHouY21wKE8ubW9kdWx1cyk+PTB8fCF6LnVtb2Qo''@;'; put 'put ''Ty5wcmltZTEpfHwhei51bW9kKE8ucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gTShPLFIpe3ZhciB6PWZ1bmN0aW9uIG0oTyl7dmFyIFI9bGUoTyk7cmV0dXJue2JsaW5kZXI6Ui50b1JlZChhZS5tb250KE8ubW9kdWx1cykpLnJlZFBvdyhuZXcgYWUoTy5wdWJsaWNFeHBvbmVudCkpLmZy''@;'; put 'put ''b21SZWQoKSx1bmJsaW5kZXI6Ui5pbnZtKE8ubW9kdWx1cyl9fShSKSxLPVIubW9kdWx1cy5ieXRlTGVuZ3RoKCksST1uZXcgYWUoTykubXVsKHouYmxpbmRlcikudW1vZChSLm1vZHVsdXMpLGs9SS50b1JlZChhZS5tb250KFIucHJpbWUxKSksRT1JLnRvUmVkKGFlLm1vbnQoUi5wcmltZTIp''@;'; put 'put ''KSxqPVIuY29lZmZpY2llbnQsVj1SLnByaW1lMSxCPVIucHJpbWUyLFk9ay5yZWRQb3coUi5leHBvbmVudDEpLmZyb21SZWQoKSxYPUUucmVkUG93KFIuZXhwb25lbnQyKS5mcm9tUmVkKCksVT1ZLmlzdWIoWCkuaW11bChqKS51bW9kKFYpLmltdWwoQik7cmV0dXJuIFguaWFkZChVKS5pbXVs''@;'; put 'put ''KHoudW5ibGluZGVyKS51bW9kKFIubW9kdWx1cykudG9BcnJheUxpa2UoQnVmZmVyLCJiZSIsSyl9TS5nZXRyPWxlLGF0LmV4cG9ydHM9TX0sODE2OTk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9Rig3NTIwNyl9LDI3Njg2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoOTYzNjIpLG09Rig5Njc0NSksbGU9Rig2NjY5OCksTT1GKDYzNjAyKSxPPUYoNTExNzMpLFI9Rig3NTIwNyk7ZnVuY3Rpb24geihFKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGo9UltFXTtpZighail0aHJvdyBuZXcgRXJyb3IoIlVua25vd24g''@;'; put 'put ''bWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1qLmhhc2gsdGhpcy5faGFzaD14KGouaGFzaCksdGhpcy5fdGFnPWouaWQsdGhpcy5fc2lnblR5cGU9ai5zaWdufWZ1bmN0aW9uIEsoRSl7bS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBqPVJbRV07aWYoIWopdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD14KGouaGFzaCksdGhpcy5fdGFnPWouaWQsdGhpcy5fc2lnblR5cGU9ai5zaWdufWZ1bmN0aW9uIEkoRSl7cmV0dXJuIG5ldyB6KEUpfWZ1bmN0aW9uIGsoRSl7cmV0dXJuIG5ldyBLKEUpfU9iamVjdC5rZXlzKFIpLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oRSl7UltFXS5pZD1hZS5mcm9tKFJbRV0uaWQsImhleCIpLFJbRS50b0xvd2VyQ2FzZSgpXT1SW0VdfSksbGUoeixtLldyaXRhYmxlKSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oaixWLEIpe3RoaXMuX2hhc2gudXBkYXRlKGopLEIoKX0sei5wcm90b3R5cGUudXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKGosVil7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKCJzdHJpbmciPT10eXBlb2Ygaj9hZS5mcm9tKGosVik6aiksdGhpc30sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihqLFYpe3RoaXMuZW5kKCk7dmFyIEI9dGhpcy5faGFzaC5kaWdlc3QoKSxZPU0oQixqLHRoaXMu''@;'; put 'put ''X2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFY/WS50b1N0cmluZyhWKTpZfSxsZShLLG0uV3JpdGFibGUpLEsucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihqLFYsQil7dGhpcy5faGFzaC51cGRhdGUoaiksQigpfSxLLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oaixWKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBqP2FlLmZyb20oaixWKTpqKSx0aGlzfSxLLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oaixWLEIpe3ZhciBZPSJzdHJpbmciPT10eXBlb2YgVj9hZS5mcm9tKFYsQik6Vjt0aGlzLmVuZCgpO3ZhciBY''@;'; put 'put ''PXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIE8oWSxYLGosdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sYXQuZXhwb3J0cz17U2lnbjpJLFZlcmlmeTprLGNyZWF0ZVNpZ246SSxjcmVhdGVWZXJpZnk6a319LDYzNjAyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMp''@;'; put 'put ''LkJ1ZmZlcix4PUYoODU4MjUpLG09Rig3MTk0NiksbGU9Rig4ODY1MSkuZWMsTT1GKDYyNjYyKSxPPUYoODc5ODMpLFI9RigxMzA4KTtmdW5jdGlvbiBqKFUscSxlZSx0ZSl7aWYoKFU9YWUuZnJvbShVLnRvQXJyYXkoKSkpLmxlbmd0aDxxLmJ5dGVMZW5ndGgoKSl7dmFyIG9lPWFlLmFsbG9j''@;'; put 'put ''KHEuYnl0ZUxlbmd0aCgpLVUubGVuZ3RoKTtVPWFlLmNvbmNhdChbb2UsVV0pfXZhciBzZT1lZS5sZW5ndGgsaGU9ZnVuY3Rpb24gQihVLHEpe1U9KFU9VihVLHEpKS5tb2QocSk7dmFyIGVlPWFlLmZyb20oVS50b0FycmF5KCkpO2lmKGVlLmxlbmd0aDxxLmJ5dGVMZW5ndGgoKSl7dmFyIHRl''@;'; put 'put ''PWFlLmFsbG9jKHEuYnl0ZUxlbmd0aCgpLWVlLmxlbmd0aCk7ZWU9YWUuY29uY2F0KFt0ZSxlZV0pfXJldHVybiBlZX0oZWUscSksdWU9YWUuYWxsb2Moc2UpO3VlLmZpbGwoMSk7dmFyIGNlPWFlLmFsbG9jKHNlKTtyZXR1cm4gY2U9eCh0ZSxjZSkudXBkYXRlKHVlKS51cGRhdGUoYWUuZnJv''@;'; put 'put ''bShbMF0pKS51cGRhdGUoVSkudXBkYXRlKGhlKS5kaWdlc3QoKSx1ZT14KHRlLGNlKS51cGRhdGUodWUpLmRpZ2VzdCgpLHtrOmNlPXgodGUsY2UpLnVwZGF0ZSh1ZSkudXBkYXRlKGFlLmZyb20oWzFdKSkudXBkYXRlKFUpLnVwZGF0ZShoZSkuZGlnZXN0KCksdjp1ZT14KHRlLGNlKS51cGRh''@;'; put 'put ''dGUodWUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBWKFUscSl7dmFyIGVlPW5ldyBNKFUpLHRlPShVLmxlbmd0aDw8MyktcS5iaXRMZW5ndGgoKTtyZXR1cm4gdGU+MCYmZWUuaXNocm4odGUpLGVlfWZ1bmN0aW9uIFkoVSxxLGVlKXt2YXIgdGUsb2U7ZG97Zm9yKHRlPWFlLmFsbG9jKDApOzgqdGUu''@;'; put 'put ''bGVuZ3RoPFUuYml0TGVuZ3RoKCk7KXEudj14KGVlLHEuaykudXBkYXRlKHEudikuZGlnZXN0KCksdGU9YWUuY29uY2F0KFt0ZSxxLnZdKTtvZT1WKHRlLFUpLHEuaz14KGVlLHEuaykudXBkYXRlKHEudikudXBkYXRlKGFlLmZyb20oWzBdKSkuZGlnZXN0KCkscS52PXgoZWUscS5rKS51cGRh''@;'; put 'put ''dGUocS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW9lLmNtcChVKSk7cmV0dXJuIG9lfWZ1bmN0aW9uIFgoVSxxLGVlLHRlKXtyZXR1cm4gVS50b1JlZChNLm1vbnQoZWUpKS5yZWRQb3cocSkuZnJvbVJlZCgpLm1vZCh0ZSl9YXQuZXhwb3J0cz1mdW5jdGlvbiBLKFUscSxlZSx0ZSxvZSl7dmFy''@;'; put 'put ''IHNlPU8ocSk7aWYoc2UuY3VydmUpe2lmKCJlY2RzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gSShVLHEpe3ZhciBlZT1SW3EuY3VydmUuam9pbigiLiIpXTtpZighZWUpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ1bmtub3duIGN1cnZlICIrcS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBzZT1uZXcgbGUoZWUpLmtleUZyb21Qcml2YXRlKHEucHJpdmF0ZUtleSkuc2lnbihVKTtyZXR1cm4gYWUuZnJvbShzZS50b0RFUigpKX0oVSxzZSl9aWYoImRzYSI9PT1zZS50eXBlKXtpZigiZHNhIiE9PXRl''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBrKFUscSxlZSl7Zm9yKHZhciBjZSx0ZT1xLnBhcmFtcy5wcml2X2tleSxvZT1xLnBhcmFtcy5wLHNlPXEucGFyYW1zLnEsaGU9cS5wYXJhbXMuZyx1ZT1uZXcgTSgwKSxHPVYoVSxzZSku''@;'; put 'put ''bW9kKHNlKSxiPSExLEQ9aih0ZSxzZSxVLGVlKTshMT09PWI7KXVlPVgoaGUsY2U9WShzZSxELGVlKSxvZSxzZSksMD09PShiPWNlLmludm0oc2UpLmltdWwoRy5hZGQodGUubXVsKHVlKSkpLm1vZChzZSkpLmNtcG4oMCkmJihiPSExLHVlPW5ldyBNKDApKTtyZXR1cm4gZnVuY3Rpb24gRShV''@;'; put 'put ''LHEpe1U9VS50b0FycmF5KCkscT1xLnRvQXJyYXkoKSwxMjgmVVswXSYmKFU9WzBdLmNvbmNhdChVKSksMTI4JnFbMF0mJihxPVswXS5jb25jYXQocSkpO3ZhciB0ZT1bNDgsVS5sZW5ndGgrcS5sZW5ndGgrNCwyLFUubGVuZ3RoXTtyZXR1cm4gdGU9dGUuY29uY2F0KFUsWzIscS5sZW5ndGhd''@;'; put 'put ''LHEpLGFlLmZyb20odGUpfSh1ZSxiKX0oVSxzZSxlZSl9aWYoInJzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1xLnBhZGRpbmcmJjEhPT1xLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxl''@;'; put 'put ''Z2FsIG9yIHVuc3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO1U9YWUuY29uY2F0KFtvZSxVXSk7Zm9yKHZhciBoZT1zZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSx1ZT1bMCwxXTtVLmxlbmd0aCt1ZS5sZW5ndGgrMTxoZTspdWUucHVzaCgyNTUpO3VlLnB1c2goMCk7Zm9yKHZhciBjZT0tMTsrK2Nl''@;'; put 'put ''PFUubGVuZ3RoOyl1ZS5wdXNoKFVbY2VdKTtyZXR1cm4gbSh1ZSxzZSl9LGF0LmV4cG9ydHMuZ2V0S2V5PWosYXQuZXhwb3J0cy5tYWtlS2V5PVl9LDUxMTczOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNjI2NjIpLG09Rig4ODY1MSkuZWMsbGU9''@;'; put 'put ''Rig4Nzk4MyksTT1GKDEzMDgpO2Z1bmN0aW9uIEsoSSxrKXtpZihJLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKEkuY21wKGspPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX1hdC5leHBvcnRzPWZ1bmN0aW9uIE8oSSxrLEUsaixWKXt2YXIg''@;'; put 'put ''Qj1sZShFKTtpZigiZWMiPT09Qi50eXBlKXtpZigiZWNkc2EiIT09aiYmImVjZHNhL3JzYSIhPT1qKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIFIoSSxrLEUpe3ZhciBqPU1bRS5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIild''@;'; put 'put ''O2lmKCFqKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK0UuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpKTtyZXR1cm4gbmV3IG0oaikudmVyaWZ5KGssSSxFLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YSl9KEksayxCKX1pZigiZHNhIj09PUIudHlwZSl7aWYoImRz''@;'; put 'put ''YSIhPT1qKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIHooSSxrLEUpe3ZhciBqPUUuZGF0YS5wLFY9RS5kYXRhLnEsQj1FLmRhdGEuZyxZPUUuZGF0YS5wdWJfa2V5LFg9bGUuc2lnbmF0dXJlLmRlY29kZShJLCJkZXIiKSxVPVgucyxx''@;'; put 'put ''PVgucjtLKFUsViksSyhxLFYpO3ZhciBlZT14Lm1vbnQoaiksdGU9VS5pbnZtKFYpO3JldHVybiAwPT09Qi50b1JlZChlZSkucmVkUG93KG5ldyB4KGspLm11bCh0ZSkubW9kKFYpKS5mcm9tUmVkKCkubXVsKFkudG9SZWQoZWUpLnJlZFBvdyhxLm11bCh0ZSkubW9kKFYpKS5mcm9tUmVkKCkp''@;'; put 'put ''Lm1vZChqKS5tb2QoVikuY21wKHEpfShJLGssQil9aWYoInJzYSIhPT1qJiYiZWNkc2EvcnNhIiE9PWopdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtrPWFlLmNvbmNhdChbVixrXSk7Zm9yKHZhciBZPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCksWD1bMV0sVT0wO2su''@;'; put 'put ''bGVuZ3RoK1gubGVuZ3RoKzI8WTspWC5wdXNoKDI1NSksVSs9MTtYLnB1c2goMCk7Zm9yKHZhciBxPS0xOysrcTxrLmxlbmd0aDspWC5wdXNoKGtbcV0pO1g9YWUuZnJvbShYKTt2YXIgZWU9eC5tb250KEIubW9kdWx1cyk7ST0oST1uZXcgeChJKS50b1JlZChlZSkpLnJlZFBvdyhuZXcgeChC''@;'; put 'put ''LnB1YmxpY0V4cG9uZW50KSksST1hZS5mcm9tKEkuZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIHRlPVU8OD8xOjA7Zm9yKFk9TWF0aC5taW4oSS5sZW5ndGgsWC5sZW5ndGgpLEkubGVuZ3RoIT09WC5sZW5ndGgmJih0ZT0xKSxxPS0xOysrcTxZOyl0ZXw9SVtxXV5YW3FdO3JldHVybiAwPT09''@;'; put 'put ''dGV9fSw2MzYzNjphdD0+e2F0LmV4cG9ydHM9ZnVuY3Rpb24oRixhZSl7Zm9yKHZhciB4PU1hdGgubWluKEYubGVuZ3RoLGFlLmxlbmd0aCksbT1uZXcgQnVmZmVyKHgpLGxlPTA7bGU8eDsrK2xlKW1bbGVdPUZbbGVdXmFlW2xlXTtyZXR1cm4gbX19LDM5MDA3OihhdCxJZSxGKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgYWU9Rig5OTE5KSx4PUYoMjI2MDEpLG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO0llLkJ1ZmZlcj1SLEllLlNsb3dCdWZmZXI9''@;'; put 'put ''ZnVuY3Rpb24gVShQZSl7cmV0dXJuK1BlIT1QZSYmKFBlPTApLFIuYWxsb2MoK1BlKX0sSWUuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIGxlPTIxNDc0ODM2NDc7ZnVuY3Rpb24gTyhQZSl7aWYoUGU+bGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytQZSsnIiBpcyBpbnZh''@;'; put 'put ''bGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIGJlPW5ldyBVaW50OEFycmF5KFBlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGJlLFIucHJvdG90eXBlKSxiZX1mdW5jdGlvbiBSKFBlLGJlLEFlKXtpZigibnVtYmVyIj09dHlwZW9mIFBlKXtpZigic3RyaW5nIj09dHlwZW9mIGJl''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBrKFBlKX1yZXR1cm4geihQZSxiZSxBZSl9ZnVuY3Rpb24geihQZSxiZSxBZSl7aWYoInN0cmluZyI9PXR5cGVvZiBQ''@;'; put 'put ''ZSlyZXR1cm4gZnVuY3Rpb24gRShQZSxiZSl7aWYoKCJzdHJpbmciIT10eXBlb2YgYmV8fCIiPT09YmUpJiYoYmU9InV0ZjgiKSwhUi5pc0VuY29kaW5nKGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2JlKTt2YXIgQWU9MHxxKFBlLGJlKSxUZT1PKEFlKSxx''@;'; put 'put ''ZT1UZS53cml0ZShQZSxiZSk7cmV0dXJuIHFlIT09QWUmJihUZT1UZS5zbGljZSgwLHFlKSksVGV9KFBlLGJlKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoUGUpKXJldHVybiBmdW5jdGlvbiBWKFBlKXtpZihZZShQZSxVaW50OEFycmF5KSl7dmFyIGJlPW5ldyBVaW50OEFycmF5KFBlKTtyZXR1''@;'; put 'put ''cm4gQihiZS5idWZmZXIsYmUuYnl0ZU9mZnNldCxiZS5ieXRlTGVuZ3RoKX1yZXR1cm4gaihQZSl9KFBlKTtpZihudWxsPT1QZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFy''@;'; put 'put ''cmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBQZSk7aWYoWWUoUGUsQXJyYXlCdWZmZXIpfHxQZSYmWWUoUGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKFllKFBlLFNoYXJlZEFycmF5QnVmZmVyKXx8''@;'; put 'put ''UGUmJlllKFBlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBCKFBlLGJlLEFlKTtpZigibnVtYmVyIj09dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51''@;'; put 'put ''bWJlcicpO3ZhciBUZT1QZS52YWx1ZU9mJiZQZS52YWx1ZU9mKCk7aWYobnVsbCE9VGUmJlRlIT09UGUpcmV0dXJuIFIuZnJvbShUZSxiZSxBZSk7dmFyIHFlPWZ1bmN0aW9uIFkoUGUpe2lmKFIuaXNCdWZmZXIoUGUpKXt2YXIgYmU9MHxYKFBlLmxlbmd0aCksQWU9TyhiZSk7cmV0dXJuIDA9''@;'; put 'put ''PT1BZS5sZW5ndGh8fFBlLmNvcHkoQWUsMCwwLGJlKSxBZX1yZXR1cm4gdm9pZCAwIT09UGUubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgUGUubGVuZ3RofHxKZShQZS5sZW5ndGgpP08oMCk6aihQZSk6IkJ1ZmZlciI9PT1QZS50eXBlJiZBcnJheS5pc0FycmF5KFBlLmRhdGEpP2ooUGUuZGF0''@;'; put 'put ''YSk6dm9pZCAwfShQZSk7aWYocWUpcmV0dXJuIHFlO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBQZVtTeW1ib2wudG9QcmltaXRpdmVdKXJldHVybiBSLmZyb20oUGVbU3ltYm9sLnRvUHJpbWl0aXZlXSgic3RyaW5n''@;'; put 'put ''IiksYmUsQWUpO3Rocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIFBlKX1mdW5jdGlvbiBL''@;'; put 'put ''KFBlKXtpZigibnVtYmVyIiE9dHlwZW9mIFBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJzaXplIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJyk7aWYoUGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1BlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6''@;'; put 'put ''ZSInKX1mdW5jdGlvbiBrKFBlKXtyZXR1cm4gSyhQZSksTyhQZTwwPzA6MHxYKFBlKSl9ZnVuY3Rpb24gaihQZSl7Zm9yKHZhciBiZT1QZS5sZW5ndGg8MD8wOjB8WChQZS5sZW5ndGgpLEFlPU8oYmUpLFRlPTA7VGU8YmU7VGUrPTEpQWVbVGVdPTI1NSZQZVtUZV07cmV0dXJuIEFlfWZ1bmN0''@;'; put 'put ''aW9uIEIoUGUsYmUsQWUpe2lmKGJlPDB8fFBlLmJ5dGVMZW5ndGg8YmUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKFBlLmJ5dGVMZW5ndGg8YmUrKEFlfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMg''@;'; put 'put ''b3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIFRlO3JldHVybiBUZT12b2lkIDA9PT1iZSYmdm9pZCAwPT09QWU/bmV3IFVpbnQ4QXJyYXkoUGUpOnZvaWQgMD09PUFlP25ldyBVaW50OEFycmF5KFBlLGJlKTpuZXcgVWludDhBcnJheShQZSxiZSxBZSksT2JqZWN0LnNldFByb3RvdHlw''@;'; put 'put ''ZU9mKFRlLFIucHJvdG90eXBlKSxUZX1mdW5jdGlvbiBYKFBlKXtpZihQZT49bGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK2xlLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8UGV9''@;'; put 'put ''ZnVuY3Rpb24gcShQZSxiZSl7aWYoUi5pc0J1ZmZlcihQZSkpcmV0dXJuIFBlLmxlbmd0aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoUGUpfHxZZShQZSxBcnJheUJ1ZmZlcikpcmV0dXJuIFBlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBQZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU''@;'; put 'put ''aGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUGUpO3ZhciBBZT1QZS5sZW5ndGgsVGU9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighVGUm''@;'; put 'put ''JjA9PT1BZSlyZXR1cm4gMDtmb3IodmFyIHFlPSExOzspc3dpdGNoKGJlKXtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBBZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBGZShQZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1''@;'; put 'put ''dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipBZTtjYXNlImhleCI6cmV0dXJuIEFlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIFdlKFBlKS5sZW5ndGg7ZGVmYXVsdDppZihxZSlyZXR1cm4gVGU/LTE6RmUoUGUpLmxlbmd0aDtiZT0oIiIrYmUpLnRvTG93ZXJDYXNlKCkscWU9ITB9''@;'; put 'put ''fWZ1bmN0aW9uIGVlKFBlLGJlLEFlKXt2YXIgVGU9ITE7aWYoKHZvaWQgMD09PWJlfHxiZTwwKSYmKGJlPTApLGJlPnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUFlfHxBZT50aGlzLmxlbmd0aCkmJihBZT10aGlzLmxlbmd0aCksQWU8PTApfHwoQWU+Pj49MCk8PShiZT4+Pj0wKSlyZXR1cm4i''@;'; put 'put ''Ijtmb3IoUGV8fChQZT0idXRmOCIpOzspc3dpdGNoKFBlKXtjYXNlImhleCI6cmV0dXJuIHYodGhpcyxiZSxBZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gSCh0aGlzLGJlLEFlKTtjYXNlImFzY2lpIjpyZXR1cm4gQyh0aGlzLGJlLEFlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5h''@;'; put 'put ''cnkiOnJldHVybiBTKHRoaXMsYmUsQWUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRCh0aGlzLGJlLEFlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHAodGhpcyxiZSxBZSk7ZGVmYXVsdDppZihUZSl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJVbmtub3duIGVuY29kaW5nOiAiK1BlKTtQZT0oUGUrIiIpLnRvTG93ZXJDYXNlKCksVGU9ITB9fWZ1bmN0aW9uIHRlKFBlLGJlLEFlKXt2YXIgVGU9UGVbYmVdO1BlW2JlXT1QZVtBZV0sUGVbQWVdPVRlfWZ1bmN0aW9uIG9lKFBlLGJlLEFlLFRlLHFlKXtpZigwPT09UGUubGVuZ3RoKXJl''@;'; put 'put ''dHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgQWU/KFRlPUFlLEFlPTApOkFlPjIxNDc0ODM2NDc/QWU9MjE0NzQ4MzY0NzpBZTwtMjE0NzQ4MzY0OCYmKEFlPS0yMTQ3NDgzNjQ4KSxKZShBZT0rQWUpJiYoQWU9cWU/MDpQZS5sZW5ndGgtMSksQWU8MCYmKEFlPVBlLmxlbmd0aCtBZSksQWU+''@;'; put 'put ''PVBlLmxlbmd0aCl7aWYocWUpcmV0dXJuLTE7QWU9UGUubGVuZ3RoLTF9ZWxzZSBpZihBZTwwKXtpZighcWUpcmV0dXJuLTE7QWU9MH1pZigic3RyaW5nIj09dHlwZW9mIGJlJiYoYmU9Ui5mcm9tKGJlLFRlKSksUi5pc0J1ZmZlcihiZSkpcmV0dXJuIDA9PT1iZS5sZW5ndGg/LTE6c2UoUGUs''@;'; put 'put ''YmUsQWUsVGUscWUpO2lmKCJudW1iZXIiPT10eXBlb2YgYmUpcmV0dXJuIGJlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/cWU/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFBlLGJlLEFlKTpVaW50OEFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5sYXN0SW5kZXhPZi5jYWxsKFBlLGJlLEFlKTpzZShQZSxbYmVdLEFlLFRlLHFlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBzZShQZSxiZSxBZSxUZSxxZSl7dmFyIERlLFhlPTEsVWU9UGUubGVuZ3RoLGh0''@;'; put 'put ''PWJlLmxlbmd0aDtpZih2b2lkIDAhPT1UZSYmKCJ1Y3MyIj09PShUZT1TdHJpbmcoVGUpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09VGV8fCJ1dGYxNmxlIj09PVRlfHwidXRmLTE2bGUiPT09VGUpKXtpZihQZS5sZW5ndGg8Mnx8YmUubGVuZ3RoPDIpcmV0dXJuLTE7WGU9MixVZS89Mixo''@;'; put 'put ''dC89MixBZS89Mn1mdW5jdGlvbiBNZShNdCxIdCl7cmV0dXJuIDE9PT1YZT9NdFtIdF06TXQucmVhZFVJbnQxNkJFKEh0KlhlKX1pZihxZSl7dmFyIHplPS0xO2ZvcihEZT1BZTtEZTxVZTtEZSsrKWlmKE1lKFBlLERlKT09PU1lKGJlLC0xPT09emU/MDpEZS16ZSkpe2lmKC0xPT09emUmJih6''@;'; put 'put ''ZT1EZSksRGUtemUrMT09PWh0KXJldHVybiB6ZSpYZX1lbHNlLTEhPT16ZSYmKERlLT1EZS16ZSksemU9LTF9ZWxzZSBmb3IoQWUraHQ+VWUmJihBZT1VZS1odCksRGU9QWU7RGU+PTA7RGUtLSl7Zm9yKHZhciBpdD0hMCx1dD0wO3V0PGh0O3V0KyspaWYoTWUoUGUsRGUrdXQpIT09TWUoYmUs''@;'; put 'put ''dXQpKXtpdD0hMTticmVha31pZihpdClyZXR1cm4gRGV9cmV0dXJuLTF9ZnVuY3Rpb24gaGUoUGUsYmUsQWUsVGUpe0FlPU51bWJlcihBZSl8fDA7dmFyIHFlPVBlLmxlbmd0aC1BZTtUZT8oVGU9TnVtYmVyKFRlKSk+cWUmJihUZT1xZSk6VGU9cWU7dmFyIFhlPWJlLmxlbmd0aDtUZT5YZS8y''@;'; put 'put ''JiYoVGU9WGUvMik7Zm9yKHZhciBVZT0wO1VlPFRlOysrVWUpe3ZhciBodD1wYXJzZUludChiZS5zdWJzdHIoMipVZSwyKSwxNik7aWYoSmUoaHQpKXJldHVybiBVZTtQZVtBZStVZV09aHR9cmV0dXJuIFVlfWZ1bmN0aW9uIHVlKFBlLGJlLEFlLFRlKXtyZXR1cm4gS2UoRmUoYmUsUGUubGVu''@;'; put 'put ''Z3RoLUFlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gY2UoUGUsYmUsQWUsVGUpe3JldHVybiBLZShmdW5jdGlvbiBPZShQZSl7Zm9yKHZhciBiZT1bXSxBZT0wO0FlPFBlLmxlbmd0aDsrK0FlKWJlLnB1c2goMjU1JlBlLmNoYXJDb2RlQXQoQWUpKTtyZXR1cm4gYmV9KGJlKSxQZSxBZSxUZSl9ZnVu''@;'; put 'put ''Y3Rpb24gRyhQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKFdlKGJlKSxQZSxBZSxUZSl9ZnVuY3Rpb24gYihQZSxiZSxBZSxUZSl7cmV0dXJuIEtlKGZ1bmN0aW9uIGplKFBlLGJlKXtmb3IodmFyIEFlLFRlLFhlPVtdLFVlPTA7VWU8UGUubGVuZ3RoJiYhKChiZS09Mik8MCk7KytVZSlUZT0oQWU9''@;'; put 'put ''UGUuY2hhckNvZGVBdChVZSkpPj44LFhlLnB1c2goQWUlMjU2KSxYZS5wdXNoKFRlKTtyZXR1cm4gWGV9KGJlLFBlLmxlbmd0aC1BZSksUGUsQWUsVGUpfWZ1bmN0aW9uIEQoUGUsYmUsQWUpe3JldHVybiBhZS5mcm9tQnl0ZUFycmF5KDA9PT1iZSYmQWU9PT1QZS5sZW5ndGg/UGU6UGUuc2xp''@;'; put 'put ''Y2UoYmUsQWUpKX1mdW5jdGlvbiBIKFBlLGJlLEFlKXtBZT1NYXRoLm1pbihQZS5sZW5ndGgsQWUpO2Zvcih2YXIgVGU9W10scWU9YmU7cWU8QWU7KXt2YXIgTWUsRGUsemUsaXQsWGU9UGVbcWVdLFVlPW51bGwsaHQ9WGU+MjM5PzQ6WGU+MjIzPzM6WGU+MTkxPzI6MTtpZihxZStodDw9QWUp''@;'; put 'put ''c3dpdGNoKGh0KXtjYXNlIDE6WGU8MTI4JiYoVWU9WGUpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKE1lPVBlW3FlKzFdKSkmJihpdD0oMzEmWGUpPDw2fDYzJk1lKT4xMjcmJihVZT1pdCk7YnJlYWs7Y2FzZSAzOkRlPVBlW3FlKzJdLDEyOD09KDE5MiYoTWU9UGVbcWUrMV0pKSYmMTI4PT0o''@;'; put 'put ''MTkyJkRlKSYmKGl0PSgxNSZYZSk8PDEyfCg2MyZNZSk8PDZ8NjMmRGUpPjIwNDcmJihpdDw1NTI5Nnx8aXQ+NTczNDMpJiYoVWU9aXQpO2JyZWFrO2Nhc2UgNDpEZT1QZVtxZSsyXSx6ZT1QZVtxZSszXSwxMjg9PSgxOTImKE1lPVBlW3FlKzFdKSkmJjEyOD09KDE5MiZEZSkmJjEyOD09KDE5''@;'; put 'put ''MiZ6ZSkmJihpdD0oMTUmWGUpPDwxOHwoNjMmTWUpPDwxMnwoNjMmRGUpPDw2fDYzJnplKT42NTUzNSYmaXQ8MTExNDExMiYmKFVlPWl0KX1udWxsPT09VWU/KFVlPTY1NTMzLGh0PTEpOlVlPjY1NTM1JiYoVGUucHVzaCgoVWUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLFVlPTU2MzIwfDEw''@;'; put 'put ''MjMmVWUpLFRlLnB1c2goVWUpLHFlKz1odH1yZXR1cm4gZnVuY3Rpb24gZyhQZSl7dmFyIGJlPVBlLmxlbmd0aDtpZihiZTw9TilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsUGUpO2Zvcih2YXIgQWU9IiIsVGU9MDtUZTxiZTspQWUrPVN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUuYXBwbHkoU3RyaW5nLFBlLnNsaWNlKFRlLFRlKz1OKSk7cmV0dXJuIEFlfShUZSl9SWUua01heExlbmd0aD1sZSwhKFIuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBNKCl7dHJ5e3ZhciBQZT1uZXcgVWludDhBcnJheSgxKSxiZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07''@;'; put 'put ''cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihiZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFBlLGJlKSw0Mj09PVBlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUu''@;'; put 'put ''ZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIp''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihSLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsIm9mZnNldCIse2VudW1l''@;'; put 'put ''cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoUi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLFIucG9vbFNpemU9ODE5MixSLmZyb209ZnVuY3Rpb24oUGUsYmUsQWUpe3JldHVybiB6KFBlLGJlLEFlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKFIucHJvdG90eXBl''@;'; put 'put ''LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoUixVaW50OEFycmF5KSxSLmFsbG9jPWZ1bmN0aW9uKFBlLGJlLEFlKXtyZXR1cm4gZnVuY3Rpb24gSShQZSxiZSxBZSl7cmV0dXJuIEsoUGUpLFBlPD0wP08oUGUpOnZvaWQgMCE9PWJlPyJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgQWU/TyhQZSkuZmlsbChiZSxBZSk6TyhQZSkuZmlsbChiZSk6TyhQZSl9KFBlLGJlLEFlKX0sUi5hbGxvY1Vuc2FmZT1mdW5jdGlvbihQZSl7cmV0dXJuIGsoUGUpfSxSLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihQZSl7cmV0dXJuIGsoUGUpfSxSLmlzQnVmZmVyPWZ1bmN0aW9uKGJl''@;'; put 'put ''KXtyZXR1cm4gbnVsbCE9YmUmJiEwPT09YmUuX2lzQnVmZmVyJiZiZSE9PVIucHJvdG90eXBlfSxSLmNvbXBhcmU9ZnVuY3Rpb24oYmUsQWUpe2lmKFllKGJlLFVpbnQ4QXJyYXkpJiYoYmU9Ui5mcm9tKGJlLGJlLm9mZnNldCxiZS5ieXRlTGVuZ3RoKSksWWUoQWUsVWludDhBcnJheSkmJihB''@;'; put 'put ''ZT1SLmZyb20oQWUsQWUub2Zmc2V0LEFlLmJ5dGVMZW5ndGgpKSwhUi5pc0J1ZmZlcihiZSl8fCFSLmlzQnVmZmVyKEFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtp''@;'; put 'put ''ZihiZT09PUFlKXJldHVybiAwO2Zvcih2YXIgVGU9YmUubGVuZ3RoLHFlPUFlLmxlbmd0aCxYZT0wLFVlPU1hdGgubWluKFRlLHFlKTtYZTxVZTsrK1hlKWlmKGJlW1hlXSE9PUFlW1hlXSl7VGU9YmVbWGVdLHFlPUFlW1hlXTticmVha31yZXR1cm4gVGU8cWU/LTE6cWU8VGU/MTowfSxSLmlz''@;'; put 'put ''RW5jb2Rpbmc9ZnVuY3Rpb24oYmUpe3N3aXRjaChTdHJpbmcoYmUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2Fz''@;'; put 'put ''ZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sUi5jb25jYXQ9ZnVuY3Rpb24oYmUsQWUpe2lmKCFBcnJheS5pc0FycmF5KGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJz''@;'; put 'put ''Jyk7aWYoMD09PWJlLmxlbmd0aClyZXR1cm4gUi5hbGxvYygwKTt2YXIgVGU7aWYodm9pZCAwPT09QWUpZm9yKEFlPTAsVGU9MDtUZTxiZS5sZW5ndGg7KytUZSlBZSs9YmVbVGVdLmxlbmd0aDt2YXIgcWU9Ui5hbGxvY1Vuc2FmZShBZSksWGU9MDtmb3IoVGU9MDtUZTxiZS5sZW5ndGg7KytU''@;'; put 'put ''ZSl7dmFyIFVlPWJlW1RlXTtpZihZZShVZSxVaW50OEFycmF5KSlYZStVZS5sZW5ndGg+cWUubGVuZ3RoP1IuZnJvbShVZSkuY29weShxZSxYZSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwocWUsVWUsWGUpO2Vsc2V7aWYoIVIuaXNCdWZmZXIoVWUpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtVZS5jb3B5KHFlLFhlKX1YZSs9VWUubGVuZ3RofXJldHVybiBxZX0sUi5ieXRlTGVuZ3RoPXEsUi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLFIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBi''@;'; put 'put ''ZT10aGlzLmxlbmd0aDtpZihiZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9Mil0ZSh0aGlzLEFlLEFlKzEpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS5zd2FwMzI9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgYmU9dGhpcy5sZW5ndGg7aWYoYmUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIEFlPTA7QWU8YmU7QWUrPTQpdGUodGhpcyxBZSxBZSszKSx0ZSh0aGlzLEFlKzEsQWUr''@;'; put 'put ''Mik7cmV0dXJuIHRoaXN9LFIucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0aDtpZihiZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgQWU9MDtBZTxiZTtBZSs9''@;'; put 'put ''OCl0ZSh0aGlzLEFlLEFlKzcpLHRlKHRoaXMsQWUrMSxBZSs2KSx0ZSh0aGlzLEFlKzIsQWUrNSksdGUodGhpcyxBZSszLEFlKzQpO3JldHVybiB0aGlzfSxSLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1SLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBiZT10aGlzLmxlbmd0''@;'; put 'put ''aDtyZXR1cm4gMD09PWJlPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0godGhpcywwLGJlKTplZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihiZSl7aWYoIVIuaXNCdWZmZXIoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qg''@;'; put 'put ''YmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWJlfHwwPT09Ui5jb21wYXJlKHRoaXMsYmUpfSxSLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIGJlPSIiLEFlPUllLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiBiZT10aGlzLnRvU3RyaW5nKCJoZXgiLDAsQWUpLnJlcGxhY2Uo''@;'; put 'put ''LyguezJ9KS9nLCIkMSAiKS50cmltKCksdGhpcy5sZW5ndGg+QWUmJihiZSs9IiAuLi4gIiksIjxCdWZmZXIgIitiZSsiPiJ9LG0mJihSLnByb3RvdHlwZVttXT1SLnByb3RvdHlwZS5pbnNwZWN0KSxSLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGJlLEFlLFRlLHFlLFhlKXtpZihZZShi''@;'; put 'put ''ZSxVaW50OEFycmF5KSYmKGJlPVIuZnJvbShiZSxiZS5vZmZzZXQsYmUuYnl0ZUxlbmd0aCkpLCFSLmlzQnVmZmVyKGJlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQg''@;'; put 'put ''dHlwZSAnK3R5cGVvZiBiZSk7aWYodm9pZCAwPT09QWUmJihBZT0wKSx2b2lkIDA9PT1UZSYmKFRlPWJlP2JlLmxlbmd0aDowKSx2b2lkIDA9PT1xZSYmKHFlPTApLHZvaWQgMD09PVhlJiYoWGU9dGhpcy5sZW5ndGgpLEFlPDB8fFRlPmJlLmxlbmd0aHx8cWU8MHx8WGU+dGhpcy5sZW5ndGgp''@;'; put 'put ''dGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKHFlPj1YZSYmQWU+PVRlKXJldHVybiAwO2lmKHFlPj1YZSlyZXR1cm4tMTtpZihBZT49VGUpcmV0dXJuIDE7aWYodGhpcz09PWJlKXJldHVybiAwO2Zvcih2YXIgVWU9KFhlPj4+PTApLShxZT4+Pj0wKSxodD0o''@;'; put 'put ''VGU+Pj49MCktKEFlPj4+PTApLE1lPU1hdGgubWluKFVlLGh0KSxEZT10aGlzLnNsaWNlKHFlLFhlKSx6ZT1iZS5zbGljZShBZSxUZSksaXQ9MDtpdDxNZTsrK2l0KWlmKERlW2l0XSE9PXplW2l0XSl7VWU9RGVbaXRdLGh0PXplW2l0XTticmVha31yZXR1cm4gVWU8aHQ/LTE6aHQ8VWU/MTow''@;'; put 'put ''fSxSLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoYmUsQWUsVGUpfSxSLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gb2UodGhpcyxiZSxBZSxUZSwhMCl9LFIucHJvdG90eXBlLmxhc3RJbmRl''@;'; put 'put ''eE9mPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gb2UodGhpcyxiZSxBZSxUZSwhMSl9LFIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZih2b2lkIDA9PT1BZSlxZT0idXRmOCIsVGU9dGhpcy5sZW5ndGgsQWU9MDtlbHNlIGlmKHZvaWQgMD09PVRlJiYic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIEFlKXFlPUFlLFRlPXRoaXMubGVuZ3RoLEFlPTA7ZWxzZXtpZighaXNGaW5pdGUoQWUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtBZT4+Pj0wLGlzRmlu''@;'; put 'put ''aXRlKFRlKT8oVGU+Pj49MCx2b2lkIDA9PT1xZSYmKHFlPSJ1dGY4IikpOihxZT1UZSxUZT12b2lkIDApfXZhciBYZT10aGlzLmxlbmd0aC1BZTtpZigodm9pZCAwPT09VGV8fFRlPlhlKSYmKFRlPVhlKSxiZS5sZW5ndGg+MCYmKFRlPDB8fEFlPDApfHxBZT50aGlzLmxlbmd0aCl0aHJvdyBu''@;'; put 'put ''ZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtxZXx8KHFlPSJ1dGY4Iik7Zm9yKHZhciBVZT0hMTs7KXN3aXRjaChxZSl7Y2FzZSJoZXgiOnJldHVybiBoZSh0aGlzLGJlLEFlLFRlKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB1''@;'; put 'put ''ZSh0aGlzLGJlLEFlLFRlKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBjZSh0aGlzLGJlLEFlLFRlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEcodGhpcyxiZSxBZSxUZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2''@;'; put 'put ''bGUiOnJldHVybiBiKHRoaXMsYmUsQWUsVGUpO2RlZmF1bHQ6aWYoVWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitxZSk7cWU9KCIiK3FlKS50b0xvd2VyQ2FzZSgpLFVlPSEwfX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1''@;'; put 'put ''ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgTj00MDk2O2Z1bmN0aW9uIEMoUGUsYmUsQWUpe3ZhciBUZT0iIjtBZT1NYXRoLm1pbihQZS5sZW5ndGgsQWUpO2Zvcih2YXIgcWU9YmU7cWU8QWU7KytxZSlUZSs9U3RyaW5nLmZy''@;'; put 'put ''b21DaGFyQ29kZSgxMjcmUGVbcWVdKTtyZXR1cm4gVGV9ZnVuY3Rpb24gUyhQZSxiZSxBZSl7dmFyIFRlPSIiO0FlPU1hdGgubWluKFBlLmxlbmd0aCxBZSk7Zm9yKHZhciBxZT1iZTtxZTxBZTsrK3FlKVRlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFBlW3FlXSk7cmV0dXJuIFRlfWZ1bmN0aW9u''@;'; put 'put ''IHYoUGUsYmUsQWUpe3ZhciBUZT1QZS5sZW5ndGg7KCFiZXx8YmU8MCkmJihiZT0wKSwoIUFlfHxBZTwwfHxBZT5UZSkmJihBZT1UZSk7Zm9yKHZhciBxZT0iIixYZT1iZTtYZTxBZTsrK1hlKXFlKz1sdFtQZVtYZV1dO3JldHVybiBxZX1mdW5jdGlvbiBwKFBlLGJlLEFlKXtmb3IodmFyIFRl''@;'; put 'put ''PVBlLnNsaWNlKGJlLEFlKSxxZT0iIixYZT0wO1hlPFRlLmxlbmd0aC0xO1hlKz0yKXFlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFRlW1hlXSsyNTYqVGVbWGUrMV0pO3JldHVybiBxZX1mdW5jdGlvbiB3KFBlLGJlLEFlKXtpZihQZSUxIT0wfHxQZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJv''@;'; put 'put ''ZmZzZXQgaXMgbm90IHVpbnQiKTtpZihQZStiZT5BZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIEooUGUsYmUsQWUsVGUscWUsWGUpe2lmKCFSLmlzQnVmZmVyKFBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCci''@;'; put 'put ''YnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoYmU+cWV8fGJlPFhlKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihBZStUZT5QZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4''@;'; put 'put ''IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIG5lKFBlLGJlLEFlLFRlLHFlLFhlKXtpZihBZStUZT5QZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEFlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0''@;'; put 'put ''aW9uIGRlKFBlLGJlLEFlLFRlLHFlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAscWV8fG5lKFBlLDAsQWUsNCkseC53cml0ZShQZSxiZSxBZSxUZSwyMyw0KSxBZSs0fWZ1bmN0aW9uIGZlKFBlLGJlLEFlLFRlLHFlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAscWV8fG5lKFBlLDAsQWUsOCkseC53''@;'; put 'put ''cml0ZShQZSxiZSxBZSxUZSw1Miw4KSxBZSs4fVIucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGJlLEFlKXt2YXIgVGU9dGhpcy5sZW5ndGg7KGJlPX5+YmUpPDA/KGJlKz1UZSk8MCYmKGJlPTApOmJlPlRlJiYoYmU9VGUpLChBZT12b2lkIDA9PT1BZT9UZTp+fkFlKTwwPyhBZSs9VGUpPDAm''@;'; put 'put ''JihBZT0wKTpBZT5UZSYmKEFlPVRlKSxBZTxiZSYmKEFlPWJlKTt2YXIgcWU9dGhpcy5zdWJhcnJheShiZSxBZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihxZSxSLnByb3RvdHlwZSkscWV9LFIucHJvdG90eXBlLnJlYWRVaW50TEU9Ui5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5j''@;'; put 'put ''dGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPXRoaXNbYmVdLFhlPTEsVWU9MDsrK1VlPEFlJiYoWGUqPTI1Nik7KXFlKz10aGlzW2JlK1VlXSpYZTtyZXR1cm4gcWV9LFIucHJvdG90eXBlLnJlYWRVaW50QkU9Ui5wcm90''@;'; put 'put ''b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihiZSxBZSxUZSl7YmU+Pj49MCxBZT4+Pj0wLFRlfHx3KGJlLEFlLHRoaXMubGVuZ3RoKTtmb3IodmFyIHFlPXRoaXNbYmUrLS1BZV0sWGU9MTtBZT4wJiYoWGUqPTI1Nik7KXFlKz10aGlzW2JlKy0tQWVdKlhlO3JldHVybiBxZX0sUi5wcm90b3R5''@;'; put 'put ''cGUucmVhZFVpbnQ4PVIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsMSx0aGlzLmxlbmd0aCksdGhpc1tiZV19LFIucHJvdG90eXBlLnJlYWRVaW50MTZMRT1SLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oYmUsQWUp''@;'; put 'put ''e3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5ndGgpLHRoaXNbYmVdfHRoaXNbYmUrMV08PDh9LFIucHJvdG90eXBlLnJlYWRVaW50MTZCRT1SLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDIsdGhpcy5sZW5n''@;'; put 'put ''dGgpLHRoaXNbYmVdPDw4fHRoaXNbYmUrMV19LFIucHJvdG90eXBlLnJlYWRVaW50MzJMRT1SLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJlLDQsdGhpcy5sZW5ndGgpLCh0aGlzW2JlXXx0aGlzW2JlKzFdPDw4fHRoaXNbYmUr''@;'; put 'put ''Ml08PDE2KSsxNjc3NzIxNip0aGlzW2JlKzNdfSxSLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ui5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW2JlXSsodGhpc1tiZSsxXTw8''@;'; put 'put ''MTZ8dGhpc1tiZSsyXTw8OHx0aGlzW2JlKzNdKX0sUi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKGJlLEFlLFRlKXtiZT4+Pj0wLEFlPj4+PTAsVGV8fHcoYmUsQWUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcWU9dGhpc1tiZV0sWGU9MSxVZT0wOysrVWU8QWUmJihYZSo9MjU2KTspcWUr''@;'; put 'put ''PXRoaXNbYmUrVWVdKlhlO3JldHVybiBxZT49KFhlKj0xMjgpJiYocWUtPU1hdGgucG93KDIsOCpBZSkpLHFlfSxSLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUpe2JlPj4+PTAsQWU+Pj49MCxUZXx8dyhiZSxBZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBxZT1BZSxYZT0x''@;'; put 'put ''LFVlPXRoaXNbYmUrLS1xZV07cWU+MCYmKFhlKj0yNTYpOylVZSs9dGhpc1tiZSstLXFlXSpYZTtyZXR1cm4gVWU+PShYZSo9MTI4KSYmKFVlLT1NYXRoLnBvdygyLDgqQWUpKSxVZX0sUi5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJl''@;'; put 'put ''LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW2JlXT8tMSooMjU1LXRoaXNbYmVdKzEpOnRoaXNbYmVdfSxSLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbihiZSxBZSl7YmU+Pj49MCxBZXx8dyhiZSwyLHRoaXMubGVuZ3RoKTt2YXIgVGU9dGhpc1tiZV18dGhpc1tiZSsxXTw8ODtyZXR1''@;'; put 'put ''cm4gMzI3NjgmVGU/NDI5NDkwMTc2MHxUZTpUZX0sUi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oYmUsQWUpe2JlPj4+PTAsQWV8fHcoYmUsMix0aGlzLmxlbmd0aCk7dmFyIFRlPXRoaXNbYmUrMV18dGhpc1tiZV08PDg7cmV0dXJuIDMyNzY4JlRlPzQyOTQ5MDE3NjB8VGU6VGV9''@;'; put 'put ''LFIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gYmU+Pj49MCxBZXx8dyhiZSw0LHRoaXMubGVuZ3RoKSx0aGlzW2JlXXx0aGlzW2JlKzFdPDw4fHRoaXNbYmUrMl08PDE2fHRoaXNbYmUrM108PDI0fSxSLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlv''@;'; put 'put ''bihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCksdGhpc1tiZV08PDI0fHRoaXNbYmUrMV08PDE2fHRoaXNbYmUrMl08PDh8dGhpc1tiZSszXX0sUi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBiZT4+Pj0wLEFlfHx3KGJl''@;'; put 'put ''LDQsdGhpcy5sZW5ndGgpLHgucmVhZCh0aGlzLGJlLCEwLDIzLDQpfSxSLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsNCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITEsMjMsNCl9LFIucHJvdG90eXBlLnJlYWREb3Vi''@;'; put 'put ''bGVMRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsOCx0aGlzLmxlbmd0aCkseC5yZWFkKHRoaXMsYmUsITAsNTIsOCl9LFIucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGJlPj4+PTAsQWV8fHcoYmUsOCx0aGlzLmxlbmd0aCks''@;'; put 'put ''eC5yZWFkKHRoaXMsYmUsITEsNTIsOCl9LFIucHJvdG90eXBlLndyaXRlVWludExFPVIucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtiZT0rYmUsQWU+Pj49MCxUZT4+Pj0wLHFlfHxKKHRoaXMsYmUsQWUsVGUsTWF0aC5wb3coMiw4KlRlKS0xLDApO3ZhciBV''@;'; put 'put ''ZT0xLGh0PTA7Zm9yKHRoaXNbQWVdPTI1NSZiZTsrK2h0PFRlJiYoVWUqPTI1Nik7KXRoaXNbQWUraHRdPWJlL1VlJjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlVWludEJFPVIucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtiZT0rYmUsQWU+''@;'; put 'put ''Pj49MCxUZT4+Pj0wLHFlfHxKKHRoaXMsYmUsQWUsVGUsTWF0aC5wb3coMiw4KlRlKS0xLDApO3ZhciBVZT1UZS0xLGh0PTE7Zm9yKHRoaXNbQWUrVWVdPTI1NSZiZTstLVVlPj0wJiYoaHQqPTI1Nik7KXRoaXNbQWUrVWVdPWJlL2h0JjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndy''@;'; put 'put ''aXRlVWludDg9Ui5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMSwyNTUsMCksdGhpc1tBZV09MjU1JmJlLEFlKzF9LFIucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ui5wcm90b3R5cGUud3JpdGVV''@;'; put 'put ''SW50MTZMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsMiw2NTUzNSwwKSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+PjgsQWUrMn0sUi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1SLnByb3RvdHlwZS53cml0ZVVJbnQx''@;'; put 'put ''NkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDY1NTM1LDApLHRoaXNbQWVdPWJlPj4+OCx0aGlzW0FlKzFdPTI1NSZiZSxBZSsyfSxSLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPVIucHJvdG90eXBlLndyaXRlVUludDMyTEU9''@;'; put 'put ''ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0FlKzNdPWJlPj4+MjQsdGhpc1tBZSsyXT1iZT4+PjE2LHRoaXNbQWUrMV09YmU+Pj44LHRoaXNbQWVdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53''@;'; put 'put ''cml0ZVVpbnQzMkJFPVIucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0FlXT1iZT4+PjI0LHRoaXNbQWUrMV09YmU+Pj4xNix0aGlzW0FlKzJdPWJlPj4+''@;'; put 'put ''OCx0aGlzW0FlKzNdPTI1NSZiZSxBZSs0fSxSLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXtpZihiZT0rYmUsQWU+Pj49MCwhcWUpe3ZhciBYZT1NYXRoLnBvdygyLDgqVGUtMSk7Sih0aGlzLGJlLEFlLFRlLFhlLTEsLVhlKX12YXIgVWU9MCxodD0xLE1lPTA7''@;'; put 'put ''Zm9yKHRoaXNbQWVdPTI1NSZiZTsrK1VlPFRlJiYoaHQqPTI1Nik7KWJlPDAmJjA9PT1NZSYmMCE9PXRoaXNbQWUrVWUtMV0mJihNZT0xKSx0aGlzW0FlK1VlXT0oYmUvaHQ+PjApLU1lJjI1NTtyZXR1cm4gQWUrVGV9LFIucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oYmUsQWUsVGUs''@;'; put 'put ''cWUpe2lmKGJlPStiZSxBZT4+Pj0wLCFxZSl7dmFyIFhlPU1hdGgucG93KDIsOCpUZS0xKTtKKHRoaXMsYmUsQWUsVGUsWGUtMSwtWGUpfXZhciBVZT1UZS0xLGh0PTEsTWU9MDtmb3IodGhpc1tBZStVZV09MjU1JmJlOy0tVWU+PTAmJihodCo9MjU2KTspYmU8MCYmMD09PU1lJiYwIT09dGhp''@;'; put 'put ''c1tBZStVZSsxXSYmKE1lPTEpLHRoaXNbQWUrVWVdPShiZS9odD4+MCktTWUmMjU1O3JldHVybiBBZStUZX0sUi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwxLDEyNywtMTI4KSxiZTwwJiYoYmU9''@;'; put 'put ''MjU1K2JlKzEpLHRoaXNbQWVdPTI1NSZiZSxBZSsxfSxSLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+Pjgs''@;'; put 'put ''QWUrMn0sUi5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gYmU9K2JlLEFlPj4+PTAsVGV8fEoodGhpcyxiZSxBZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tBZV09YmU+Pj44LHRoaXNbQWUrMV09MjU1JmJlLEFlKzJ9LFIucHJvdG90eXBlLndyaXRlSW50''@;'; put 'put ''MzJMRT1mdW5jdGlvbihiZSxBZSxUZSl7cmV0dXJuIGJlPStiZSxBZT4+Pj0wLFRlfHxKKHRoaXMsYmUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0FlXT0yNTUmYmUsdGhpc1tBZSsxXT1iZT4+PjgsdGhpc1tBZSsyXT1iZT4+PjE2LHRoaXNbQWUrM109YmU+Pj4yNCxBZSs0''@;'; put 'put ''fSxSLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBiZT0rYmUsQWU+Pj49MCxUZXx8Sih0aGlzLGJlLEFlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksYmU8MCYmKGJlPTQyOTQ5NjcyOTUrYmUrMSksdGhpc1tBZV09YmU+Pj4yNCx0aGlzW0FlKzFd''@;'; put 'put ''PWJlPj4+MTYsdGhpc1tBZSsyXT1iZT4+PjgsdGhpc1tBZSszXT0yNTUmYmUsQWUrNH0sUi5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZGUodGhpcyxiZSxBZSwhMCxUZSl9LFIucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihiZSxBZSxU''@;'; put 'put ''ZSl7cmV0dXJuIGRlKHRoaXMsYmUsQWUsITEsVGUpfSxSLnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKGJlLEFlLFRlKXtyZXR1cm4gZmUodGhpcyxiZSxBZSwhMCxUZSl9LFIucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oYmUsQWUsVGUpe3JldHVybiBmZSh0aGlz''@;'; put 'put ''LGJlLEFlLCExLFRlKX0sUi5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoIVIuaXNCdWZmZXIoYmUpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKFRlfHwoVGU9MCksIXFlJiYwIT09cWUmJihxZT10aGlzLmxlbmd0''@;'; put 'put ''aCksQWU+PWJlLmxlbmd0aCYmKEFlPWJlLmxlbmd0aCksQWV8fChBZT0wKSxxZT4wJiZxZTxUZSYmKHFlPVRlKSxxZT09PVRlfHwwPT09YmUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJv''@;'; put 'put ''dW5kcyIpO2lmKFRlPDB8fFRlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtxZT50aGlzLmxlbmd0aCYmKHFlPXRoaXMubGVuZ3RoKSxi''@;'; put 'put ''ZS5sZW5ndGgtQWU8cWUtVGUmJihxZT1iZS5sZW5ndGgtQWUrVGUpO3ZhciBYZT1xZS1UZTtyZXR1cm4gdGhpcz09PWJlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oQWUsVGUscWUpOlVpbnQ4QXJyYXkucHJvdG90''@;'; put 'put ''eXBlLnNldC5jYWxsKGJlLHRoaXMuc3ViYXJyYXkoVGUscWUpLEFlKSxYZX0sUi5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihiZSxBZSxUZSxxZSl7aWYoInN0cmluZyI9PXR5cGVvZiBiZSl7aWYoInN0cmluZyI9PXR5cGVvZiBBZT8ocWU9QWUsQWU9MCxUZT10aGlzLmxlbmd0aCk6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBUZSYmKHFlPVRlLFRlPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1xZSYmInN0cmluZyIhPXR5cGVvZiBxZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBxZSYmIVIuaXNFbmNvZGluZyhxZSkpdGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitxZSk7aWYoMT09PWJlLmxlbmd0aCl7dmFyIFhlPWJlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXFlJiZYZTwxMjh8fCJsYXRpbjEiPT09cWUpJiYoYmU9WGUpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBiZT9iZSY9MjU1OiJi''@;'; put 'put ''b29sZWFuIj09dHlwZW9mIGJlJiYoYmU9TnVtYmVyKGJlKSk7aWYoQWU8MHx8dGhpcy5sZW5ndGg8QWV8fHRoaXMubGVuZ3RoPFRlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihUZTw9QWUpcmV0dXJuIHRoaXM7dmFyIFVlO2lmKEFlPj4+PTAsVGU9dm9p''@;'; put 'put ''ZCAwPT09VGU/dGhpcy5sZW5ndGg6VGU+Pj4wLGJlfHwoYmU9MCksIm51bWJlciI9PXR5cGVvZiBiZSlmb3IoVWU9QWU7VWU8VGU7KytVZSl0aGlzW1VlXT1iZTtlbHNle3ZhciBodD1SLmlzQnVmZmVyKGJlKT9iZTpSLmZyb20oYmUscWUpLE1lPWh0Lmxlbmd0aDtpZigwPT09TWUpdGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK2JlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoVWU9MDtVZTxUZS1BZTsrK1VlKXRoaXNbVWUrQWVdPWh0W1VlJU1lXX1yZXR1cm4gdGhpc307dmFyIHhlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gRmUo''@;'; put 'put ''UGUsYmUpe2JlPWJlfHwxLzA7Zm9yKHZhciBBZSxUZT1QZS5sZW5ndGgscWU9bnVsbCxYZT1bXSxVZT0wO1VlPFRlOysrVWUpe2lmKChBZT1QZS5jaGFyQ29kZUF0KFVlKSk+NTUyOTUmJkFlPDU3MzQ0KXtpZighcWUpe2lmKEFlPjU2MzE5KXsoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEs''@;'; put 'put ''MTg5KTtjb250aW51ZX1pZihVZSsxPT09VGUpeyhiZS09Myk+LTEmJlhlLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfXFlPUFlO2NvbnRpbnVlfWlmKEFlPDU2MzIwKXsoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KSxxZT1BZTtjb250aW51ZX1BZT02NTUzNisocWUtNTUyOTY8''@;'; put 'put ''PDEwfEFlLTU2MzIwKX1lbHNlIHFlJiYoYmUtPTMpPi0xJiZYZS5wdXNoKDIzOSwxOTEsMTg5KTtpZihxZT1udWxsLEFlPDEyOCl7aWYoKGJlLT0xKTwwKWJyZWFrO1hlLnB1c2goQWUpfWVsc2UgaWYoQWU8MjA0OCl7aWYoKGJlLT0yKTwwKWJyZWFrO1hlLnB1c2goQWU+PjZ8MTkyLDYzJkFl''@;'; put 'put ''fDEyOCl9ZWxzZSBpZihBZTw2NTUzNil7aWYoKGJlLT0zKTwwKWJyZWFrO1hlLnB1c2goQWU+PjEyfDIyNCxBZT4+NiY2M3wxMjgsNjMmQWV8MTI4KX1lbHNle2lmKCEoQWU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoYmUtPTQpPDApYnJlYWs7''@;'; put 'put ''WGUucHVzaChBZT4+MTh8MjQwLEFlPj4xMiY2M3wxMjgsQWU+PjYmNjN8MTI4LDYzJkFlfDEyOCl9fXJldHVybiBYZX1mdW5jdGlvbiBXZShQZSl7cmV0dXJuIGFlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uIExlKFBlKXtpZigoUGU9KFBlPVBlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNl''@;'; put 'put ''KHhlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtQZS5sZW5ndGglNCE9MDspUGUrPSI9IjtyZXR1cm4gUGV9KFBlKSl9ZnVuY3Rpb24gS2UoUGUsYmUsQWUsVGUpe2Zvcih2YXIgcWU9MDtxZTxUZSYmIShxZStBZT49YmUubGVuZ3RofHxxZT49UGUubGVuZ3RoKTsrK3FlKWJlW3FlK0Fl''@;'; put 'put ''XT1QZVtxZV07cmV0dXJuIHFlfWZ1bmN0aW9uIFllKFBlLGJlKXtyZXR1cm4gUGUgaW5zdGFuY2VvZiBiZXx8bnVsbCE9UGUmJm51bGwhPVBlLmNvbnN0cnVjdG9yJiZudWxsIT1QZS5jb25zdHJ1Y3Rvci5uYW1lJiZQZS5jb25zdHJ1Y3Rvci5uYW1lPT09YmUubmFtZX1mdW5jdGlvbiBKZShQ''@;'; put 'put ''ZSl7cmV0dXJuIFBlIT1QZX12YXIgbHQ9ZnVuY3Rpb24oKXtmb3IodmFyIFBlPSIwMTIzNDU2Nzg5YWJjZGVmIixiZT1uZXcgQXJyYXkoMjU2KSxBZT0wO0FlPDE2OysrQWUpZm9yKHZhciBUZT0xNipBZSxxZT0wO3FlPDE2OysrcWUpYmVbVGUrcWVdPVBlW0FlXStQZVtxZV07cmV0dXJuIGJl''@;'; put 'put ''fSgpfSw4NjQyMDooYXQsSWUsRik9Pnt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PUYoNTE3OTMpLlRyYW5zZm9ybSxtPUYoNzIwMjQpLnM7ZnVuY3Rpb24gTShPKXt4LmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIE8sdGhpcy5oYXNoTW9kZT90aGlzW09dPXRoaXMu''@;'; put 'put ''X2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfUYoNjY2OTgpKE0seCksTS5wcm90b3R5''@;'; put 'put ''cGUudXBkYXRlPWZ1bmN0aW9uKE8sUix6KXsic3RyaW5nIj09dHlwZW9mIE8mJihPPWFlLmZyb20oTyxSKSk7dmFyIEs9dGhpcy5fdXBkYXRlKE8pO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KHomJihLPXRoaXMuX3RvU3RyaW5nKEsseikpLEspfSxNLnByb3RvdHlwZS5zZXRBdXRvUGFk''@;'; put 'put ''ZGluZz1mdW5jdGlvbigpe30sTS5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSxNLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LE0ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sTS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5j''@;'; put 'put ''dGlvbihPLFIseil7dmFyIEs7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKE8pOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoTykpfWNhdGNoKEkpe0s9SX1maW5hbGx5e3ooSyl9fSxNLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIFI7dHJ5e3RoaXMucHVzaCh0aGlzLl9f''@;'; put 'put ''ZmluYWwoKSl9Y2F0Y2goeil7Uj16fU8oUil9LE0ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKE8pe3ZhciBSPXRoaXMuX19maW5hbCgpfHxhZS5hbGxvYygwKTtyZXR1cm4gTyYmKFI9dGhpcy5fdG9TdHJpbmcoUixPLCEwKSksUn0sTS5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1''@;'; put 'put ''bmN0aW9uKE8sUix6KXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgbShSKSx0aGlzLl9lbmNvZGluZz1SKSx0aGlzLl9lbmNvZGluZyE9PVIpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZShPKTty''@;'; put 'put ''ZXR1cm4geiYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LGF0LmV4cG9ydHM9TX0sMzg4NDA6KGF0LEllLEYpPT57dmFyIGFlPUYoODg2NTEpLHg9RigzMTg1KTthdC5leHBvcnRzPWZ1bmN0aW9uKFIpe3JldHVybiBuZXcgbGUoUil9O3ZhciBtPXtzZWNwMjU2azE6e25hbWU6InNlY3Ay''@;'; put 'put ''NTZrMSIsYnl0ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRl''@;'; put 'put ''TGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIGxlKE8pe3RoaXMuY3VydmVUeXBlPW1bT10sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpPfSks''@;'; put 'put ''dGhpcy5jdXJ2ZT1uZXcgYWUuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBNKE8sUix6KXtBcnJheS5pc0FycmF5KE8pfHwoTz1PLnRvQXJyYXkoKSk7dmFyIEs9bmV3IEJ1ZmZlcihPKTtpZih6JiZLLmxlbmd0aDx6KXt2YXIgST1uZXcgQnVmZmVy''@;'; put 'put ''KHotSy5sZW5ndGgpO0kuZmlsbCgwKSxLPUJ1ZmZlci5jb25jYXQoW0ksS10pfXJldHVybiBSP0sudG9TdHJpbmcoUik6S31tLnAyMjQ9bS5zZWNwMjI0cjEsbS5wMjU2PW0uc2VjcDI1NnIxPW0ucHJpbWUyNTZ2MSxtLnAxOTI9bS5zZWNwMTkycjE9bS5wcmltZTE5MnYxLG0ucDM4ND1tLnNl''@;'; put 'put ''Y3AzODRyMSxtLnA1MjE9bS5zZWNwNTIxcjEsbGUucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihPLFIpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoTyxSKX0sbGUucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rp''@;'; put 'put ''b24oTyxSLHope3JldHVybiBSPVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSksTSh0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoTykuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSx6LHRoaXMuY3VydmVUeXBlLmJ5''@;'; put 'put ''dGVMZW5ndGgpfSxsZS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKE8sUil7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1SLCEwKTtyZXR1cm4iaHlicmlkIj09PVImJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLE0oeixPKX0sbGUucHJvdG90eXBl''@;'; put 'put ''LmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oTyl7cmV0dXJuIE0odGhpcy5rZXlzLmdldFByaXZhdGUoKSxPKX0sbGUucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihPLFIpe3JldHVybiBSPVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSksdGhp''@;'; put 'put ''cy5rZXlzLl9pbXBvcnRQdWJsaWMoTyksdGhpc30sbGUucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oTyxSKXtSPVJ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoTyl8fChPPW5ldyBCdWZmZXIoTyxSKSk7dmFyIHo9bmV3IHgoTyk7cmV0dXJuIHo9ei50b1N0cmluZygxNiksdGhp''@;'; put 'put ''cy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZSh6KSx0aGlzfX0sMzE4NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUseCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyxiKXtpZighRyl0aHJvdyBuZXcgRXJyb3IoYnx8IkFzc2Vy''@;'; put 'put ''dGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBsZShHLGIpe0cuc3VwZXJfPWI7dmFyIEQ9ZnVuY3Rpb24oKXt9O0QucHJvdG90eXBlPWIucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBELEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gTShHLGIsRCl7aWYoTS5pc0JOKEcpKXJldHVy''@;'; put 'put ''biBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT1ifHwiYmUiPT09YikmJihEPWIsYj0xMCksdGhpcy5faW5pdChHfHwwLGJ8fDEwLER8fCJiZSIpKX12YXIgTzsib2JqZWN0Ij09dHlwZW9mIGFl''@;'; put 'put ''P2FlLmV4cG9ydHM9TTp4LkJOPU0sTS5CTj1NLE0ud29yZFNpemU9MjY7dHJ5e089dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOkYoODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIp''@;'; put 'put ''O3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0QtODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxl''@;'; put 'put ''bmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMpLTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYm''@;'; put 'put ''Yi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9''@;'; put 'put ''ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7''@;'; put 'put ''dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJy''@;'; put 'put ''YXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8o''@;'; put 'put ''dGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFy''@;'; put 'put ''cmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''LmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tn''@;'; put 'put ''XXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0o''@;'; put 'put ''Qz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIp''@;'; put 'put ''Uz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02''@;'; put 'put ''NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2Mztn''@;'; put 'put ''Kj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxTPUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRk''@;'; put 'put ''bihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5''@;'; put 'put ''PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90''@;'; put 'put ''b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu''@;'; put 'put ''Z3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAw''@;'; put 'put ''MDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAi''@;'; put 'put ''LCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3''@;'; put 'put ''NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5''@;'; put 'put ''NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFy''@;'; put 'put ''IEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4''@;'; put 'put ''NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9''@;'; put 'put ''cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5zdHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5n''@;'; put 'put ''dGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihTPDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcm''@;'; put 'put ''JihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2''@;'; put 'put ''ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmluZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06''@;'; put 'put ''Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6''@;'; put 'put ''Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVu''@;'; put 'put ''Y3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxiLEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNp''@;'; put 'put ''cmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCks''@;'; put 'put ''U1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlvbihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90''@;'; put 'put ''eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4gMjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJv''@;'; put 'put ''dG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtm''@;'; put 'put ''b3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0''@;'; put 'put ''aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3Ro''@;'; put 'put ''aXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmlu''@;'; put 'put ''ZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5n''@;'; put 'put ''dGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRzW0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUo''@;'; put 'put ''KS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihiKXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9''@;'; put 'put ''RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxNLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5j''@;'; put 'put ''dGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRoaXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndv''@;'; put 'put ''cmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUo''@;'; put 'put ''KS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3''@;'; put 'put ''MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndvcmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''c2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0u''@;'; put 'put ''cHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndv''@;'; put 'put ''cmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29yZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgs''@;'; put 'put ''MCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9''@;'; put 'put ''PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMu''@;'; put 'put ''bGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xvbmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9y''@;'; put 'put ''bVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0x''@;'; put 'put ''LHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxO''@;'; put 'put ''Lmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5t''@;'; put 'put ''YXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndv''@;'; put 'put ''cmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0wfE5bNF0sbHQ9ODE5MSZKZSxQ''@;'; put 'put ''ZT1KZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMscWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+''@;'; put 'put ''Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMs''@;'; put 'put ''bW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxKdD0wfGdbNl0sRHQ9ODE5MSZKdCxwdD1KdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVn''@;'; put 'put ''YXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3ZhciBQbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMp''@;'; put 'put ''fDApKyhQbj4+PjI2KXwwLFBuJj02NzEwODg2Myx2PU1hdGguaW11bCh4ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUs''@;'; put 'put ''Q24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUsV24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGgu''@;'; put 'put ''aW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGguaW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''eGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVsKExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRo''@;'; put 'put ''LmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpuJj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytNYXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGguaW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUs''@;'; put 'put ''X3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDApKyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditN''@;'; put 'put ''YXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShTKyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytNYXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGguaW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUs''@;'; put 'put ''RHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDApKyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditN''@;'; put 'put ''YXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGgu''@;'; put 'put ''aW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGguaW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''eGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRo''@;'; put 'put ''LmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVpJj02NzEwODg2Myx2PU1hdGguaW11bChpdCxDbikscD0ocD1NYXRoLmltdWwoaXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01h''@;'; put 'put ''dGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytNYXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVs''@;'; put 'put ''KEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGguaW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUs''@;'; put 'put ''TnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8''@;'; put 'put ''MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUsSW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGgu''@;'; put 'put ''aW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGguaW11bChpdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwo''@;'; put 'put ''TWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVsKERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8''@;'; put 'put ''MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUsX3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9''@;'; put 'put ''ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01h''@;'; put 'put ''dGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQs''@;'; put 'put ''V24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQsSG4pfDAscD0ocD1wK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXww''@;'; put 'put ''KStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01hdGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''amUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHIm''@;'; put 'put ''PTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01h''@;'; put 'put ''dGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01hdGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5pbXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0''@;'; put 'put ''aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhu''@;'; put 'put ''KSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChpdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01hdGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''VWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4''@;'; put 'put ''bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMp''@;'; put 'put ''fDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01hdGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5pbXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0''@;'; put 'put ''aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0''@;'; put 'put ''KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChpdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''VWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8m''@;'; put 'put ''PTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChpdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01h''@;'; put 'put ''dGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQs''@;'; put 'put ''SW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQseG4pfDAscD0ocD1wK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGgu''@;'; put 'put ''aW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShTKyh2PXYrTWF0aC5pbXVsKGl0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+''@;'; put 'put ''Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0oUysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEz''@;'; put 'put ''KXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1QbixDWzFdPW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxD''@;'; put 'put ''WzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5t''@;'; put 'put ''dWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5sZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVe''@;'; put 'put ''Ry5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3IodmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12''@;'; put 'put ''O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1twXSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1y''@;'; put 'put ''ZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJpcCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7''@;'; put 'put ''TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5''@;'; put 'put ''cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBTPTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7Uzxn''@;'; put 'put ''O1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJL3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2Zl''@;'; put 'put ''K1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEmSCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFy''@;'; put 'put ''IGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERbTl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFd''@;'; put 'put ''L0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZnLEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxi''@;'; put 'put ''W0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihDPTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJu''@;'; put 'put ''IER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBOPTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcg''@;'; put 'put ''QXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRlPUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixn''@;'; put 'put ''KSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFu''@;'; put 'put ''c2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4pLHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIp''@;'; put 'put ''e3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9''@;'; put 'put ''MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hd''@;'; put 'put ''PUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYx''@;'; put 'put ''PDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3Fy''@;'; put 'put ''KCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3Io''@;'; put 'put ''Zz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2ddJk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7''@;'; put 'put ''Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMu''@;'; put 'put ''aXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixELEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5n''@;'; put 'put ''PDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFyIHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndv''@;'; put 'put ''cmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUom''@;'; put 'put ''U31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUy''@;'; put 'put ''NixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4''@;'; put 'put ''NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90''@;'; put 'put ''aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlz''@;'; put 'put ''Lmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQp''@;'; put 'put ''LGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53''@;'; put 'put ''b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30s''@;'; put 'put ''TS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgw''@;'; put 'put ''fHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpEO1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2''@;'; put 'put ''LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCks''@;'; put 'put ''Qz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgtZy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBK''@;'; put 'put ''PU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0p''@;'; put 'put ''O2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxuc3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJl''@;'; put 'put ''dHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxt''@;'; put 'put ''b2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1v''@;'; put 'put ''ZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygp''@;'; put 'put ''LEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rp''@;'; put 'put ''djp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIs''@;'; put 'put ''RCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rp''@;'; put 'put ''b24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0sTS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIp''@;'; put 'put ''OkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChOKTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4''@;'; put 'put ''NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgtMTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtI''@;'; put 'put ''Pj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQqRDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdj''@;'; put 'put ''ZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0Qu''@;'; put 'put ''aXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNo''@;'; put 'put ''cm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5pYWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtk''@;'; put 'put ''ZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHApLFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMs''@;'; put 'put ''YjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgx''@;'; put 'put ''KSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNtcG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7''@;'; put 'put ''Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3Asdzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIo''@;'; put 'put ''TikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAmJkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUo''@;'; put 'put ''KSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zvcih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJu''@;'; put 'put ''KDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1DfWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChi''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29y''@;'; put 'put ''ZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9''@;'; put 'put ''TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRoaXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYo''@;'; put 'put ''dGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5w''@;'; put 'put ''cm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5iLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tI''@;'; put 'put ''XTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''Z3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxNLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3Jl''@;'; put 'put ''dHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVh''@;'; put 'put ''ZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMu''@;'; put 'put ''cmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJl''@;'; put 'put ''ZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRo''@;'; put 'put ''IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRT''@;'; put 'put ''dWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRN''@;'; put 'put ''dWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp''@;'; put 'put ''cyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90''@;'; put 'put ''eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0''@;'; put 'put ''aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0p''@;'; put 'put ''IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRM''@;'; put 'put ''ZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3RoaXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhp''@;'; put 'put ''cyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlz''@;'; put 'put ''LnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQo''@;'; put 'put ''dGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlw''@;'; put 'put ''KCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5pdXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFy''@;'; put 'put ''IEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVu''@;'; put 'put ''Z3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIud29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5j''@;'; put 'put ''dGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5ndGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDAp''@;'; put 'put ''fXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3RoLS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxi''@;'; put 'put ''Lmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7''@;'; put 'put ''aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIpRD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUu''@;'; put 'put ''cHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9''@;'; put 'put ''PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/''@;'; put 'put ''dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90''@;'; put 'put ''b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIs''@;'; put 'put ''RCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''dmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnky''@;'; put 'put ''KGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9u''@;'; put 'put ''KGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDsh''@;'; put 'put ''Ti5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigxKTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnAp''@;'; put 'put ''LnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5yZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9''@;'; put 'put ''MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxkZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmlu''@;'; put 'put ''dm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5l''@;'; put 'put ''dyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5b''@;'; put 'put ''MF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYocD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8''@;'; put 'put ''PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMubXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0s''@;'; put 'put ''dWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJv''@;'; put 'put ''KCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9''@;'; put 'put ''ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgw''@;'; put 'put ''KS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5p''@;'; put 'put ''c3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5u''@;'; put 'put ''bWQoYXQpLHRoaXMpfSw5NjM2MjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig3NTgyOSksbT1GKDM5NzA2KSxsZT1GKDk3OTY1KSxNPUYoODY0MjApO2Z1bmN0aW9uIE8oUil7TS5jYWxsKHRoaXMsImRpZ2VzdCIpLHRoaXMuX2hhc2g9Un1hZShPLE0pLE8u''@;'; put 'put ''cHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7dGhpcy5faGFzaC51cGRhdGUoUil9LE8ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSxhdC5leHBvcnRzPWZ1bmN0aW9uKHope3JldHVybiJtZDUiPT09KHo9ei50b0xvd2VyQ2FzZSgp''@;'; put 'put ''KT9uZXcgeDoicm1kMTYwIj09PXp8fCJyaXBlbWQxNjAiPT09ej9uZXcgbTpuZXcgTyhsZSh6KSl9fSw4NzU4ODooYXQsSWUsRik9Pnt2YXIgYWU9Rig3NTgyOSk7YXQuZXhwb3J0cz1mdW5jdGlvbih4KXtyZXR1cm4obmV3IGFlKS51cGRhdGUoeCkuZGlnZXN0KCl9fSw4NTgyNTooYXQsSWUs''@;'; put 'put ''Rik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjY2OTgpLHg9Rig5NTkyMiksbT1GKDg2NDIwKSxsZT1GKDg0MykuQnVmZmVyLE09Rig4NzU4OCksTz1GKDM5NzA2KSxSPUYoOTc5NjUpLHo9bGUuYWxsb2MoMTI4KTtmdW5jdGlvbiBLKEksayl7bS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgayYmKGs9bGUuZnJvbShrKSk7dmFyIEU9InNoYTUxMiI9PT1JfHwic2hhMzg0Ij09PUk/MTI4OjY0O3RoaXMuX2FsZz1JLHRoaXMuX2tleT1rLGsubGVuZ3RoPkU/az0oInJtZDE2MCI9PT1JP25ldyBPOlIoSSkpLnVwZGF0ZShrKS5kaWdlc3QoKTprLmxlbmd0aDxFJiYo''@;'; put 'put ''az1sZS5jb25jYXQoW2ssel0sRSkpO2Zvcih2YXIgVj10aGlzLl9pcGFkPWxlLmFsbG9jVW5zYWZlKEUpLEI9dGhpcy5fb3BhZD1sZS5hbGxvY1Vuc2FmZShFKSxZPTA7WTxFO1krKylWW1ldPTU0XmtbWV0sQltZXT05Ml5rW1ldO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1JP25ldyBPOlIoSSks''@;'; put 'put ''dGhpcy5faGFzaC51cGRhdGUoVil9YWUoSyxtKSxLLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEkpe3RoaXMuX2hhc2gudXBkYXRlKEkpfSxLLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgST10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2Fs''@;'; put 'put ''Zz9uZXcgTzpSKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoSSkuZGlnZXN0KCl9LGF0LmV4cG9ydHM9ZnVuY3Rpb24oayxFKXtyZXR1cm4icm1kMTYwIj09PShrPWsudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09az9uZXcgSygicm1kMTYwIixFKToibWQ1Ij09''@;'; put 'put ''PWs/bmV3IHgoTSxFKTpuZXcgSyhrLEUpfX0sOTU5MjI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4KSx4PUYoODQzKS5CdWZmZXIsbT1GKDg2NDIwKSxsZT14LmFsbG9jKDEyOCksTT02NDtmdW5jdGlvbiBPKFIseil7bS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgeiYmKHo9eC5mcm9tKHopKSx0aGlzLl9hbGc9Uix0aGlzLl9rZXk9eix6Lmxlbmd0aD5NP3o9Uih6KTp6Lmxlbmd0aDxNJiYoej14LmNvbmNhdChbeixsZV0sTSkpO2Zvcih2YXIgSz10aGlzLl9pcGFkPXguYWxsb2NVbnNhZmUoTSksST10aGlzLl9vcGFkPXguYWxsb2NV''@;'; put 'put ''bnNhZmUoTSksaz0wO2s8TTtrKyspS1trXT01NF56W2tdLElba109OTJeeltrXTt0aGlzLl9oYXNoPVtLXX1hZShPLG0pLE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUil7dGhpcy5faGFzaC5wdXNoKFIpfSxPLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgUj10aGlzLl9h''@;'; put 'put ''bGcoeC5jb25jYXQodGhpcy5faGFzaCkpO3JldHVybiB0aGlzLl9hbGcoeC5jb25jYXQoW3RoaXMuX29wYWQsUl0pKX0sYXQuZXhwb3J0cz1PfSw3NzkwMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7SWUucmFuZG9tQnl0ZXM9SWUucm5nPUllLnBzZXVkb1JhbmRvbUJ5dGVzPUllLnBybmc9''@;'; put 'put ''Rig0NDAxOSksSWUuY3JlYXRlSGFzaD1JZS5IYXNoPUYoOTYzNjIpLEllLmNyZWF0ZUhtYWM9SWUuSG1hYz1GKDg1ODI1KTt2YXIgYWU9Rig4MTY5OSkseD1PYmplY3Qua2V5cyhhZSksbT1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAi''@;'; put 'put ''XS5jb25jYXQoeCk7SWUuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG19O3ZhciBsZT1GKDU3MTAwKTtJZS5wYmtkZjI9bGUucGJrZGYyLEllLnBia2RmMlN5bmM9bGUucGJrZGYyU3luYzt2YXIgTT1GKDI1NjAwKTtJZS5DaXBoZXI9TS5DaXBoZXIsSWUuY3JlYXRlQ2lwaGVyPU0uY3Jl''@;'; put 'put ''YXRlQ2lwaGVyLEllLkNpcGhlcml2PU0uQ2lwaGVyaXYsSWUuY3JlYXRlQ2lwaGVyaXY9TS5jcmVhdGVDaXBoZXJpdixJZS5EZWNpcGhlcj1NLkRlY2lwaGVyLEllLmNyZWF0ZURlY2lwaGVyPU0uY3JlYXRlRGVjaXBoZXIsSWUuRGVjaXBoZXJpdj1NLkRlY2lwaGVyaXYsSWUuY3JlYXRlRGVj''@;'; put 'put ''aXBoZXJpdj1NLmNyZWF0ZURlY2lwaGVyaXYsSWUuZ2V0Q2lwaGVycz1NLmdldENpcGhlcnMsSWUubGlzdENpcGhlcnM9TS5saXN0Q2lwaGVyczt2YXIgTz1GKDQ1MTQ0KTtJZS5EaWZmaWVIZWxsbWFuR3JvdXA9Ty5EaWZmaWVIZWxsbWFuR3JvdXAsSWUuY3JlYXRlRGlmZmllSGVsbG1hbkdy''@;'; put 'put ''b3VwPU8uY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwLEllLmdldERpZmZpZUhlbGxtYW49Ty5nZXREaWZmaWVIZWxsbWFuLEllLmNyZWF0ZURpZmZpZUhlbGxtYW49Ty5jcmVhdGVEaWZmaWVIZWxsbWFuLEllLkRpZmZpZUhlbGxtYW49Ty5EaWZmaWVIZWxsbWFuO3ZhciBSPUYoMjc2ODYpO0ll''@;'; put 'put ''LmNyZWF0ZVNpZ249Ui5jcmVhdGVTaWduLEllLlNpZ249Ui5TaWduLEllLmNyZWF0ZVZlcmlmeT1SLmNyZWF0ZVZlcmlmeSxJZS5WZXJpZnk9Ui5WZXJpZnksSWUuY3JlYXRlRUNESD1GKDM4ODQwKTt2YXIgej1GKDI3MDUwKTtJZS5wdWJsaWNFbmNyeXB0PXoucHVibGljRW5jcnlwdCxJZS5w''@;'; put 'put ''cml2YXRlRW5jcnlwdD16LnByaXZhdGVFbmNyeXB0LEllLnB1YmxpY0RlY3J5cHQ9ei5wdWJsaWNEZWNyeXB0LEllLnByaXZhdGVEZWNyeXB0PXoucHJpdmF0ZURlY3J5cHQ7dmFyIEs9Rig2MTIzNyk7SWUucmFuZG9tRmlsbD1LLnJhbmRvbUZpbGwsSWUucmFuZG9tRmlsbFN5bmM9Sy5yYW5k''@;'; put 'put ''b21GaWxsU3luYyxJZS5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbInNvcnJ5LCBjcmVhdGVDcmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Iiwid2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMiLCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJy''@;'; put 'put ''b3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiXS5qb2luKCJcbiIpKX0sSWUuY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4''@;'; put 'put ''LE5QTl9FTkFCTEVEOjEsQUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09O''@;'; put 'put ''VkVSU0lPTl9DT01QUkVTU0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sMTAwMTI6ZnVuY3Rpb24oYXQsSWUsRil7dmFyIGFlO2F0LmV4cG9ydHM9KGFlPWFlfHxmdW5jdGlvbih4LG0pe3ZhciBsZTtpZih0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93LmNyeXB0byYmKGxlPXdpbmRvdy5jcnlwdG8pLHR5cGVvZiBzZWxmPCJ1IiYmc2VsZi5jcnlwdG8mJihsZT1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRoaXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKGxlPWdsb2JhbFRoaXMuY3J5cHRvKSwhbGUmJnR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiJiZ3aW5kb3cubXNDcnlwdG8mJihsZT13aW5kb3cubXNDcnlwdG8pLCFsZSYmdHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbC5jcnlwdG8mJihsZT1nbG9iYWwuY3J5cHRvKSwhbGUpdHJ5e2xlPUYoNzc5MDMpfWNhdGNoe312YXIgTT1mdW5jdGlvbigpe2lmKGxlKXtpZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YgbGUuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gbGUuZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF19Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBsZS5yYW5kb21CeXRlcyl0cnl7cmV0dXJuIGxlLnJhbmRvbUJ5dGVzKDQpLnJl''@;'; put 'put ''YWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sTz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIFUoKXt9cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KHEpe3ZhciBlZTtyZXR1cm4gVS5wcm90b3R5cGU9cSxlZT1uZXcgVSxVLnByb3RvdHlwZT1udWxsLGVlfX0oKSxSPXt9LHo9Ui5saWI9e30sSz16LkJhc2U9e2V4dGVuZDpmdW5jdGlvbihVKXt2YXIgcT1PKHRoaXMpO3JldHVybiBVJiZxLm1peEluKFUpLCghcS5oYXNPd25Qcm9wZXJ0eSgi''@;'; put 'put ''aW5pdCIpfHx0aGlzLmluaXQ9PT1xLmluaXQpJiYocS5pbml0PWZ1bmN0aW9uKCl7cS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxxLmluaXQucHJvdG90eXBlPXEscS4kc3VwZXI9dGhpcyxxfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgVT10aGlzLmV4dGVuZCgpO3JldHVy''@;'; put 'put ''biBVLmluaXQuYXBwbHkoVSxhcmd1bWVudHMpLFV9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcSBpbiBVKVUuaGFzT3duUHJvcGVydHkocSkmJih0aGlzW3FdPVVbcV0pO1UuaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPVUu''@;'; put 'put ''dG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19LEk9ei5Xb3JkQXJyYXk9Sy5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oVSxxKXtVPXRoaXMud29yZHM9VXx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT1xP3E6NCpVLmxlbmd0''@;'; put 'put ''aH0sdG9TdHJpbmc6ZnVuY3Rpb24oVSl7cmV0dXJuKFV8fEUpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKFUpe3ZhciBxPXRoaXMud29yZHMsZWU9VS53b3Jkcyx0ZT10aGlzLnNpZ0J5dGVzLG9lPVUuc2lnQnl0ZXM7aWYodGhpcy5jbGFtcCgpLHRlJTQpZm9yKHZhciBzZT0w''@;'; put 'put ''O3NlPG9lO3NlKyspcVt0ZStzZT4+PjJdfD0oZWVbc2U+Pj4yXT4+PjI0LXNlJTQqOCYyNTUpPDwyNC0odGUrc2UpJTQqODtlbHNlIGZvcih2YXIgdWU9MDt1ZTxvZTt1ZSs9NClxW3RlK3VlPj4+Ml09ZWVbdWU+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9b2UsdGhpc30sY2xhbXA6ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgVT10aGlzLndvcmRzLHE9dGhpcy5zaWdCeXRlcztVW3E+Pj4yXSY9NDI5NDk2NzI5NTw8MzItcSU0KjgsVS5sZW5ndGg9eC5jZWlsKHEvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFU9Sy5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBVLndvcmRzPXRoaXMud29yZHMuc2xp''@;'; put 'put ''Y2UoMCksVX0scmFuZG9tOmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1bXSxlZT0wO2VlPFU7ZWUrPTQpcS5wdXNoKE0oKSk7cmV0dXJuIG5ldyBJLmluaXQocSxVKX19KSxrPVIuZW5jPXt9LEU9ay5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS53b3JkcyxlZT1VLnNpZ0J5''@;'; put 'put ''dGVzLHRlPVtdLG9lPTA7b2U8ZWU7b2UrKyl7dmFyIHNlPXFbb2U+Pj4yXT4+PjI0LW9lJTQqOCYyNTU7dGUucHVzaCgoc2U+Pj40KS50b1N0cmluZygxNikpLHRlLnB1c2goKDE1JnNlKS50b1N0cmluZygxNikpfXJldHVybiB0ZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oVSl7Zm9yKHZh''@;'; put 'put ''ciBxPVUubGVuZ3RoLGVlPVtdLHRlPTA7dGU8cTt0ZSs9MillZVt0ZT4+PjNdfD1wYXJzZUludChVLnN1YnN0cih0ZSwyKSwxNik8PDI0LXRlJTgqNDtyZXR1cm4gbmV3IEkuaW5pdChlZSxxLzIpfX0saj1rLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKFUpe2Zvcih2YXIgcT1VLndvcmRz''@;'; put 'put ''LGVlPVUuc2lnQnl0ZXMsdGU9W10sb2U9MDtvZTxlZTtvZSsrKXRlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShxW29lPj4+Ml0+Pj4yNC1vZSU0KjgmMjU1KSk7cmV0dXJuIHRlLmpvaW4oIiIpfSxwYXJzZTpmdW5jdGlvbihVKXtmb3IodmFyIHE9VS5sZW5ndGgsZWU9W10sdGU9MDt0ZTxx''@;'; put 'put ''O3RlKyspZWVbdGU+Pj4yXXw9KDI1NSZVLmNoYXJDb2RlQXQodGUpKTw8MjQtdGUlNCo4O3JldHVybiBuZXcgSS5pbml0KGVlLHEpfX0sVj1rLlV0Zjg9e3N0cmluZ2lmeTpmdW5jdGlvbihVKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoai5zdHJpbmdpZnkoVSkpKX1j''@;'; put 'put ''YXRjaHt0aHJvdyBuZXcgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihVKXtyZXR1cm4gai5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoVSkpKX19LEI9ei5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPUsuZXh0ZW5kKHtyZXNldDpmdW5jdGlv''@;'; put 'put ''bigpe3RoaXMuX2RhdGE9bmV3IEkuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oVSl7InN0cmluZyI9PXR5cGVvZiBVJiYoVT1WLnBhcnNlKFUpKSx0aGlzLl9kYXRhLmNvbmNhdChVKSx0aGlzLl9uRGF0YUJ5dGVzKz1VLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5j''@;'; put 'put ''dGlvbihVKXt2YXIgcSxlZT10aGlzLl9kYXRhLHRlPWVlLndvcmRzLG9lPWVlLnNpZ0J5dGVzLHNlPXRoaXMuYmxvY2tTaXplLHVlPW9lLyg0KnNlKSxjZT0odWU9VT94LmNlaWwodWUpOngubWF4KCgwfHVlKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpzZSxHPXgubWluKDQqY2Usb2UpO2lm''@;'; put 'put ''KGNlKXtmb3IodmFyIGI9MDtiPGNlO2IrPXNlKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKHRlLGIpO3E9dGUuc3BsaWNlKDAsY2UpLGVlLnNpZ0J5dGVzLT1HfXJldHVybiBuZXcgSS5pbml0KHEsRyl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFU9Sy5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBVLl9k''@;'; put 'put ''YXRhPXRoaXMuX2RhdGEuY2xvbmUoKSxVfSxfbWluQnVmZmVyU2l6ZTowfSksWD0oei5IYXNoZXI9Qi5leHRlbmQoe2NmZzpLLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oVSl7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKFUpLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtCLnJlc2V0''@;'; put 'put ''LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuX2FwcGVuZChVKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oVSl7cmV0dXJuIFUmJnRoaXMuX2FwcGVuZChVKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2Nr''@;'; put 'put ''U2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKFUpe3JldHVybiBmdW5jdGlvbihxLGVlKXtyZXR1cm4gbmV3IFUuaW5pdChlZSkuZmluYWxpemUocSl9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24ocSxlZSl7cmV0dXJuIG5ldyBYLkhNQUMuaW5p''@;'; put 'put ''dChVLGVlKS5maW5hbGl6ZShxKX19fSksUi5hbGdvPXt9KTtyZXR1cm4gUn0oTWF0aCksYWUpfSw5Mjg3MzpmdW5jdGlvbihhdCxJZSxGKXt2YXIgYWU7YXQuZXhwb3J0cz0oYWU9RigxMDAxMiksZnVuY3Rpb24oeCl7dmFyIG09YWUsbGU9bS5saWIsTT1sZS5Xb3JkQXJyYXksTz1sZS5IYXNo''@;'; put 'put ''ZXIsUj1tLmFsZ28sej1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFY9MDtWPDY0O1YrKyl6W1ZdPTQyOTQ5NjcyOTYqeC5hYnMoeC5zaW4oVisxKSl8MH0oKTt2YXIgSz1SLk1ENT1PLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBNLmluaXQoWzE3MzI1ODQxOTMs''@;'; put 'put ''NDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oVixCKXtmb3IodmFyIFk9MDtZPDE2O1krKyl7dmFyIFg9QitZLFU9VltYXTtWW1hdPTE2NzExOTM1JihVPDw4fFU+Pj4yNCl8NDI3ODI1NTM2MCYoVTw8MjR8VT4+PjgpfXZhciBxPXRo''@;'; put 'put ''aXMuX2hhc2gud29yZHMsZWU9VltCKzBdLHRlPVZbQisxXSxvZT1WW0IrMl0sc2U9VltCKzNdLGhlPVZbQis0XSx1ZT1WW0IrNV0sY2U9VltCKzZdLEc9VltCKzddLGI9VltCKzhdLEQ9VltCKzldLEg9VltCKzEwXSxOPVZbQisxMV0sZz1WW0IrMTJdLEM9VltCKzEzXSxTPVZbQisxNF0sdj1W''@;'; put 'put ''W0IrMTVdLHA9cVswXSx3PXFbMV0sSj1xWzJdLG5lPXFbM107cD1JKHAsdyxKLG5lLGVlLDcselswXSksbmU9SShuZSxwLHcsSix0ZSwxMix6WzFdKSxKPUkoSixuZSxwLHcsb2UsMTcselsyXSksdz1JKHcsSixuZSxwLHNlLDIyLHpbM10pLHA9SShwLHcsSixuZSxoZSw3LHpbNF0pLG5lPUko''@;'; put 'put ''bmUscCx3LEosdWUsMTIsels1XSksSj1JKEosbmUscCx3LGNlLDE3LHpbNl0pLHc9SSh3LEosbmUscCxHLDIyLHpbN10pLHA9SShwLHcsSixuZSxiLDcsels4XSksbmU9SShuZSxwLHcsSixELDEyLHpbOV0pLEo9SShKLG5lLHAsdyxILDE3LHpbMTBdKSx3PUkodyxKLG5lLHAsTiwyMix6WzEx''@;'; put 'put ''XSkscD1JKHAsdyxKLG5lLGcsNyx6WzEyXSksbmU9SShuZSxwLHcsSixDLDEyLHpbMTNdKSxKPUkoSixuZSxwLHcsUywxNyx6WzE0XSkscD1rKHAsdz1JKHcsSixuZSxwLHYsMjIselsxNV0pLEosbmUsdGUsNSx6WzE2XSksbmU9ayhuZSxwLHcsSixjZSw5LHpbMTddKSxKPWsoSixuZSxwLHcs''@;'; put 'put ''TiwxNCx6WzE4XSksdz1rKHcsSixuZSxwLGVlLDIwLHpbMTldKSxwPWsocCx3LEosbmUsdWUsNSx6WzIwXSksbmU9ayhuZSxwLHcsSixILDkselsyMV0pLEo9ayhKLG5lLHAsdyx2LDE0LHpbMjJdKSx3PWsodyxKLG5lLHAsaGUsMjAselsyM10pLHA9ayhwLHcsSixuZSxELDUselsyNF0pLG5l''@;'; put 'put ''PWsobmUscCx3LEosUyw5LHpbMjVdKSxKPWsoSixuZSxwLHcsc2UsMTQselsyNl0pLHc9ayh3LEosbmUscCxiLDIwLHpbMjddKSxwPWsocCx3LEosbmUsQyw1LHpbMjhdKSxuZT1rKG5lLHAsdyxKLG9lLDkselsyOV0pLEo9ayhKLG5lLHAsdyxHLDE0LHpbMzBdKSxwPUUocCx3PWsodyxKLG5l''@;'; put 'put ''LHAsZywyMCx6WzMxXSksSixuZSx1ZSw0LHpbMzJdKSxuZT1FKG5lLHAsdyxKLGIsMTEselszM10pLEo9RShKLG5lLHAsdyxOLDE2LHpbMzRdKSx3PUUodyxKLG5lLHAsUywyMyx6WzM1XSkscD1FKHAsdyxKLG5lLHRlLDQselszNl0pLG5lPUUobmUscCx3LEosaGUsMTEselszN10pLEo9RShK''@;'; put 'put ''LG5lLHAsdyxHLDE2LHpbMzhdKSx3PUUodyxKLG5lLHAsSCwyMyx6WzM5XSkscD1FKHAsdyxKLG5lLEMsNCx6WzQwXSksbmU9RShuZSxwLHcsSixlZSwxMSx6WzQxXSksSj1FKEosbmUscCx3LHNlLDE2LHpbNDJdKSx3PUUodyxKLG5lLHAsY2UsMjMsels0M10pLHA9RShwLHcsSixuZSxELDQs''@;'; put 'put ''els0NF0pLG5lPUUobmUscCx3LEosZywxMSx6WzQ1XSksSj1FKEosbmUscCx3LHYsMTYsels0Nl0pLHA9aihwLHc9RSh3LEosbmUscCxvZSwyMyx6WzQ3XSksSixuZSxlZSw2LHpbNDhdKSxuZT1qKG5lLHAsdyxKLEcsMTAsels0OV0pLEo9aihKLG5lLHAsdyxTLDE1LHpbNTBdKSx3PWoodyxK''@;'; put 'put ''LG5lLHAsdWUsMjEsels1MV0pLHA9aihwLHcsSixuZSxnLDYsels1Ml0pLG5lPWoobmUscCx3LEosc2UsMTAsels1M10pLEo9aihKLG5lLHAsdyxILDE1LHpbNTRdKSx3PWoodyxKLG5lLHAsdGUsMjEsels1NV0pLHA9aihwLHcsSixuZSxiLDYsels1Nl0pLG5lPWoobmUscCx3LEosdiwxMCx6''@;'; put 'put ''WzU3XSksSj1qKEosbmUscCx3LGNlLDE1LHpbNThdKSx3PWoodyxKLG5lLHAsQywyMSx6WzU5XSkscD1qKHAsdyxKLG5lLGhlLDYsels2MF0pLG5lPWoobmUscCx3LEosTiwxMCx6WzYxXSksSj1qKEosbmUscCx3LG9lLDE1LHpbNjJdKSx3PWoodyxKLG5lLHAsRCwyMSx6WzYzXSkscVswXT1x''@;'; put 'put ''WzBdK3B8MCxxWzFdPXFbMV0rd3wwLHFbMl09cVsyXStKfDAscVszXT1xWzNdK25lfDB9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIFY9dGhpcy5fZGF0YSxCPVYud29yZHMsWT04KnRoaXMuX25EYXRhQnl0ZXMsWD04KlYuc2lnQnl0ZXM7QltYPj4+NV18PTEyODw8MjQtWCUzMjt2YXIg''@;'; put 'put ''VT14LmZsb29yKFkvNDI5NDk2NzI5NikscT1ZO0JbMTUrKFgrNjQ+Pj45PDw0KV09MTY3MTE5MzUmKFU8PDh8VT4+PjI0KXw0Mjc4MjU1MzYwJihVPDwyNHxVPj4+OCksQlsxNCsoWCs2ND4+Pjk8PDQpXT0xNjcxMTkzNSYocTw8OHxxPj4+MjQpfDQyNzgyNTUzNjAmKHE8PDI0fHE+Pj44KSxW''@;'; put 'put ''LnNpZ0J5dGVzPTQqKEIubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGVlPXRoaXMuX2hhc2gsdGU9ZWUud29yZHMsb2U9MDtvZTw0O29lKyspe3ZhciBzZT10ZVtvZV07dGVbb2VdPTE2NzExOTM1JihzZTw8OHxzZT4+PjI0KXw0Mjc4MjU1MzYwJihzZTw8MjR8c2U+Pj44KX1y''@;'; put 'put ''ZXR1cm4gZWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFY9Ty5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBWLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxWfX0pO2Z1bmN0aW9uIEkoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCJll8fkImWCkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1x''@;'; put 'put ''KStCfWZ1bmN0aW9uIGsoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCJlh8WSZ+WCkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfWZ1bmN0aW9uIEUoVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhCXlleWCkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfWZ1bmN0aW9u''@;'; put 'put ''IGooVixCLFksWCxVLHEsZWUpe3ZhciB0ZT1WKyhZXihCfH5YKSkrVStlZTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStCfW0uTUQ1PU8uX2NyZWF0ZUhlbHBlcihLKSxtLkhtYWNNRDU9Ty5fY3JlYXRlSG1hY0hlbHBlcihLKX0oTWF0aCksYWUuTUQ1KX0sNDAxMzI6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO0llLnV0aWxzPUYoNTIyOTQpLEllLkNpcGhlcj1GKDI5NDg0KSxJZS5ERVM9RigxNDM3NCksSWUuQ0JDPUYoMTIwNjYpLEllLkVERT1GKDU5NzEwKX0sMTIwNjY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU3Nzk4KSx4PUYoNjY2OTgpLG09e307ZnVuY3Rp''@;'; put 'put ''b24gbGUoTyl7YWUuZXF1YWwoTy5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIFI9MDtSPHRoaXMuaXYubGVuZ3RoO1IrKyl0aGlzLml2W1JdPU9bUl19SWUuaW5zdGFudGlhdGU9ZnVuY3Rpb24gTShPKXtmdW5jdGlvbiBSKGspe08u''@;'; put 'put ''Y2FsbCh0aGlzLGspLHRoaXMuX2NiY0luaXQoKX14KFIsTyk7Zm9yKHZhciB6PU9iamVjdC5rZXlzKG0pLEs9MDtLPHoubGVuZ3RoO0srKyl7dmFyIEk9eltLXTtSLnByb3RvdHlwZVtJXT1tW0ldfXJldHVybiBSLmNyZWF0ZT1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IFIoRSl9LFJ9LG0uX2Ni''@;'; put 'put ''Y0luaXQ9ZnVuY3Rpb24oKXt2YXIgUj1uZXcgbGUodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1SfSxtLl91cGRhdGU9ZnVuY3Rpb24oUix6LEssSSl7dmFyIEU9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLGo9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQi''@;'; put 'put ''PT09dGhpcy50eXBlKXtmb3IodmFyIFY9MDtWPHRoaXMuYmxvY2tTaXplO1YrKylqW1ZdXj1SW3orVl07Zm9yKEUuX3VwZGF0ZS5jYWxsKHRoaXMsaiwwLEssSSksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpbVl09S1tJK1ZdfWVsc2V7Zm9yKEUuX3VwZGF0ZS5jYWxsKHRoaXMsUix6LEss''@;'; put 'put ''SSksVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKUtbSStWXV49altWXTtmb3IoVj0wO1Y8dGhpcy5ibG9ja1NpemU7VisrKWpbVl09Ult6K1ZdfX19LDI5NDg0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCk7ZnVuY3Rpb24geChtKXt0aGlzLm9wdGlvbnM9bSx0aGlz''@;'; put 'put ''LnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0hMSE9PW0ucGFkZGluZ31hdC5leHBvcnRzPXgseC5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXQ9ZnVuY3Rpb24oKXt9LHgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihsZSl7cmV0dXJuIDA9PT1sZS5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQobGUpOnRoaXMuX3VwZGF0ZUVuY3J5cHQobGUpfSx4LnByb3RvdHlwZS5fYnVmZmVyPWZ1''@;'; put 'put ''bmN0aW9uKGxlLE0pe2Zvcih2YXIgTz1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsbGUubGVuZ3RoLU0pLFI9MDtSPE87UisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK1JdPWxlW00rUl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1PLE99LHgucHJvdG90''@;'; put 'put ''eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihsZSxNKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsbGUsTSksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0seC5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24obGUpe3ZhciBNPTAsTz0wLHo9bmV3IEFy''@;'; put 'put ''cmF5KCgodGhpcy5idWZmZXJPZmYrbGUubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYoTSs9dGhpcy5fYnVmZmVyKGxlLE0pLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoTys9dGhpcy5fZmx1c2hCdWZm''@;'; put 'put ''ZXIoeixPKSkpO2Zvcih2YXIgSz1sZS5sZW5ndGgtKGxlLmxlbmd0aC1NKSV0aGlzLmJsb2NrU2l6ZTtNPEs7TSs9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKGxlLE0seixPKSxPKz10aGlzLmJsb2NrU2l6ZTtmb3IoO008bGUubGVuZ3RoO00rKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMu''@;'; put 'put ''YnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1sZVtNXTtyZXR1cm4gen0seC5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24obGUpe2Zvcih2YXIgTT0wLE89MCxSPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrbGUubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSx6PW5ldyBBcnJheShS''@;'; put 'put ''KnRoaXMuYmxvY2tTaXplKTtSPjA7Ui0tKU0rPXRoaXMuX2J1ZmZlcihsZSxNKSxPKz10aGlzLl9mbHVzaEJ1ZmZlcih6LE8pO3JldHVybiBNKz10aGlzLl9idWZmZXIobGUsTSksen0seC5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24obGUpe3ZhciBNLE87cmV0dXJuIGxlJiYoTT10aGlzLnVw''@;'; put 'put ''ZGF0ZShsZSkpLE89ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLE0/TS5jb25jYXQoTyk6T30seC5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihsZSxNKXtpZigwPT09TSlyZXR1cm4hMTtmb3IoO008bGUubGVuZ3RoOylsZVtN''@;'; put 'put ''KytdPTA7cmV0dXJuITB9LHgucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgbGU9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVm''@;'; put 'put ''ZmVyLDAsbGUsMCksbGV9LHgucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihsZSl7cmV0dXJuIGxlfSx4LnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7YWUuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7''@;'; put 'put ''dmFyIGxlPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKGxlLDApLHRoaXMuX3VucGFkKGxlKX19LDE0Mzc0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KSxtPUYoNTIyOTQpLGxlPUYoMjk0ODQpO2Z1''@;'; put 'put ''bmN0aW9uIE0oKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gTyh6KXtsZS5jYWxsKHRoaXMseik7dmFyIEs9bmV3IE07dGhpcy5fZGVzU3RhdGU9Syx0aGlzLmRlcml2ZUtleXMoSyx6LmtleSl9eChPLGxlKSxhdC5leHBvcnRzPU8sTy5jcmVhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oSyl7cmV0dXJuIG5ldyBPKEspfTt2YXIgUj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07Ty5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihLLEkpe0sua2V5cz1uZXcgQXJyYXkoMzIpLGFlLmVxdWFsKEkubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlk''@;'; put 'put ''IGtleSBsZW5ndGgiKTt2YXIgaz1tLnJlYWRVSW50MzJCRShJLDApLEU9bS5yZWFkVUludDMyQkUoSSw0KTttLnBjMShrLEUsSy50bXAsMCksaz1LLnRtcFswXSxFPUsudG1wWzFdO2Zvcih2YXIgaj0wO2o8Sy5rZXlzLmxlbmd0aDtqKz0yKXt2YXIgVj1SW2o+Pj4xXTtrPW0ucjI4c2hsKGss''@;'; put 'put ''ViksRT1tLnIyOHNobChFLFYpLG0ucGMyKGssRSxLLmtleXMsail9fSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEssSSxrLEUpe3ZhciBqPXRoaXMuX2Rlc1N0YXRlLFY9bS5yZWFkVUludDMyQkUoSyxJKSxCPW0ucmVhZFVJbnQzMkJFKEssSSs0KTttLmlwKFYsQixqLnRtcCwwKSxW''@;'; put 'put ''PWoudG1wWzBdLEI9ai50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoaixWLEIsai50bXAsMCk6dGhpcy5fZGVjcnlwdChqLFYsQixqLnRtcCwwKSxCPWoudG1wWzFdLG0ud3JpdGVVSW50MzJCRShrLFY9ai50bXBbMF0sRSksbS53cml0ZVVJbnQzMkJFKGssQixF''@;'; put 'put ''KzQpfSxPLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEssSSl7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBrPUsubGVuZ3RoLUksRT1JO0U8Sy5sZW5ndGg7RSsrKUtbRV09aztyZXR1cm4hMH0sTy5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKEspe2lmKCExPT09dGhp''@;'; put 'put ''cy5wYWRkaW5nKXJldHVybiBLO2Zvcih2YXIgST1LW0subGVuZ3RoLTFdLGs9Sy5sZW5ndGgtSTtrPEsubGVuZ3RoO2srKylhZS5lcXVhbChLW2tdLEkpO3JldHVybiBLLnNsaWNlKDAsSy5sZW5ndGgtSSl9LE8ucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKEssSSxrLEUsail7Zm9yKHZh''@;'; put 'put ''ciBWPUksQj1rLFk9MDtZPEsua2V5cy5sZW5ndGg7WSs9Mil7dmFyIFg9Sy5rZXlzW1ldLFU9Sy5rZXlzW1krMV07bS5leHBhbmQoQixLLnRtcCwwKTt2YXIgcT1tLnN1YnN0aXR1dGUoWF49Sy50bXBbMF0sVV49Sy50bXBbMV0pLHRlPUI7Qj0oVl5tLnBlcm11dGUocSkpPj4+MCxWPXRlfW0u''@;'; put 'put ''cmlwKEIsVixFLGopfSxPLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihLLEksayxFLGope2Zvcih2YXIgVj1rLEI9SSxZPUsua2V5cy5sZW5ndGgtMjtZPj0wO1ktPTIpe3ZhciBYPUsua2V5c1tZXSxVPUsua2V5c1tZKzFdO20uZXhwYW5kKFYsSy50bXAsMCk7dmFyIHE9bS5zdWJzdGl0''@;'; put 'put ''dXRlKFhePUsudG1wWzBdLFVePUsudG1wWzFdKSx0ZT1WO1Y9KEJebS5wZXJtdXRlKHEpKT4+PjAsQj10ZX1tLnJpcChWLEIsRSxqKX19LDU5NzEwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig1Nzc5OCkseD1GKDY2Njk4KSxtPUYoMjk0ODQpLGxlPUYoMTQzNzQpO2Z1bmN0''@;'; put 'put ''aW9uIE0oUix6KXthZS5lcXVhbCh6Lmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEs9ei5zbGljZSgwLDgpLEk9ei5zbGljZSg4LDE2KSxrPXouc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1SP1tsZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpL''@;'; put 'put ''fSksbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6SX0pLGxlLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Omt9KV06W2xlLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Omt9KSxsZS5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpJfSksbGUuY3JlYXRlKHt0eXBlOiJkZWNyeXB0''@;'; put 'put ''IixrZXk6S30pXX1mdW5jdGlvbiBPKFIpe20uY2FsbCh0aGlzLFIpO3ZhciB6PW5ldyBNKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT16fXgoTyxtKSxhdC5leHBvcnRzPU8sTy5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBPKHopfSxPLnByb3RvdHlw''@;'; put 'put ''ZS5fdXBkYXRlPWZ1bmN0aW9uKHosSyxJLGspe3ZhciBFPXRoaXMuX2VkZVN0YXRlO0UuY2lwaGVyc1swXS5fdXBkYXRlKHosSyxJLGspLEUuY2lwaGVyc1sxXS5fdXBkYXRlKEksayxJLGspLEUuY2lwaGVyc1syXS5fdXBkYXRlKEksayxJLGspfSxPLnByb3RvdHlwZS5fcGFkPWxlLnByb3Rv''@;'; put 'put ''dHlwZS5fcGFkLE8ucHJvdG90eXBlLl91bnBhZD1sZS5wcm90b3R5cGUuX3VucGFkfSw1MjI5NDooYXQsSWUpPT57InVzZSBzdHJpY3QiO0llLnJlYWRVSW50MzJCRT1mdW5jdGlvbihsZSxNKXtyZXR1cm4obGVbMCtNXTw8MjR8bGVbMStNXTw8MTZ8bGVbMitNXTw8OHxsZVszK01dKT4+PjB9''@;'; put 'put ''LEllLndyaXRlVUludDMyQkU9ZnVuY3Rpb24obGUsTSxPKXtsZVswK09dPU0+Pj4yNCxsZVsxK09dPU0+Pj4xNiYyNTUsbGVbMitPXT1NPj4+OCYyNTUsbGVbMytPXT0yNTUmTX0sSWUuaXA9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPTY7ST49MDtJLT0yKXtmb3IodmFy''@;'; put 'put ''IGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PU0+Pj5rK0kmMTtmb3Ioaz0wO2s8PTI0O2srPTgpejw8PTEsenw9bGU+Pj5rK0kmMX1mb3IoST02O0k+PTA7SS09Mil7Zm9yKGs9MTtrPD0yNTtrKz04KUs8PD0xLEt8PU0+Pj5rK0kmMTtmb3Ioaz0xO2s8PTI1O2srPTgpSzw8PTEsS3w9bGU+Pj5r''@;'; put 'put ''K0kmMX1PW1IrMF09ej4+PjAsT1tSKzFdPUs+Pj4wfSxJZS5yaXA9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPTA7STw0O0krKylmb3IodmFyIGs9MjQ7az49MDtrLT04KXo8PD0xLHp8PU0+Pj5rK0kmMSx6PDw9MSx6fD1sZT4+PmsrSSYxO2ZvcihJPTQ7STw4O0krKylm''@;'; put 'put ''b3Ioaz0yNDtrPj0wO2stPTgpSzw8PTEsS3w9TT4+PmsrSSYxLEs8PD0xLEt8PWxlPj4+aytJJjE7T1tSKzBdPXo+Pj4wLE9bUisxXT1LPj4+MH0sSWUucGMxPWZ1bmN0aW9uKGxlLE0sTyxSKXtmb3IodmFyIHo9MCxLPTAsST03O0k+PTU7SS0tKXtmb3IodmFyIGs9MDtrPD0yNDtrKz04KXo8''@;'; put 'put ''PD0xLHp8PU0+PmsrSSYxO2ZvcihrPTA7azw9MjQ7ays9OCl6PDw9MSx6fD1sZT4+aytJJjF9Zm9yKGs9MDtrPD0yNDtrKz04KXo8PD0xLHp8PU0+PmsrSSYxO2ZvcihJPTE7STw9MztJKyspe2ZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1NPj5rK0kmMTtmb3Ioaz0wO2s8PTI0O2srPTgp''@;'; put 'put ''Szw8PTEsS3w9bGU+PmsrSSYxfWZvcihrPTA7azw9MjQ7ays9OClLPDw9MSxLfD1sZT4+aytJJjE7T1tSKzBdPXo+Pj4wLE9bUisxXT1LPj4+MH0sSWUucjI4c2hsPWZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZTw8TSYyNjg0MzU0NTV8bGU+Pj4yOC1NfTt2YXIgRj1bMTQsMTEsMTcsNCwyNywy''@;'; put 'put ''MywyNSwwLDEzLDIyLDcsMTgsNSw5LDE2LDI0LDIsMjAsMTIsMjEsMSw4LDE1LDI2LDE1LDQsMjUsMTksOSwxLDI2LDE2LDUsMTEsMjMsOCwxMiw3LDE3LDAsMjIsMywxMCwxNCw2LDIwLDI3LDI0XTtJZS5wYzI9ZnVuY3Rpb24obGUsTSxPLFIpe2Zvcih2YXIgej0wLEs9MCxJPUYubGVuZ3Ro''@;'; put 'put ''Pj4+MSxrPTA7azxJO2srKyl6PDw9MSx6fD1sZT4+PkZba10mMTtmb3Ioaz1JO2s8Ri5sZW5ndGg7aysrKUs8PD0xLEt8PU0+Pj5GW2tdJjE7T1tSKzBdPXo+Pj4wLE9bUisxXT1LPj4+MH0sSWUuZXhwYW5kPWZ1bmN0aW9uKGxlLE0sTyl7dmFyIFI9MCx6PTA7Uj0oMSZsZSk8PDV8bGU+Pj4y''@;'; put 'put ''Nztmb3IodmFyIEs9MjM7Sz49MTU7Sy09NClSPDw9NixSfD1sZT4+PksmNjM7Zm9yKEs9MTE7Sz49MztLLT00KXp8PWxlPj4+SyY2Myx6PDw9Njt6fD0oMzEmbGUpPDwxfGxlPj4+MzEsTVtPKzBdPVI+Pj4wLE1bTysxXT16Pj4+MH07dmFyIGFlPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwx''@;'; put 'put ''NSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQs''@;'; put 'put ''OSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUs''@;'; put 'put ''NywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwx''@;'; put 'put ''MCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0''@;'; put 'put ''LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIs''@;'; put 'put ''NSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMs''@;'; put 'put ''NCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAs''@;'; put 'put ''MTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO0llLnN1YnN0aXR1dGU9ZnVuY3Rpb24obGUsTSl7Zm9yKHZhciBPPTAsUj0wO1I8NDtSKyspTzw8PTQsT3w9YWVbNjQqUisobGU+Pj4xOC02KlImNjMpXTtmb3IoUj0wO1I8NDtSKyspTzw8PTQsT3w9YWVbMjU2KzY0KlIrKE0+''@;'; put 'put ''Pj4xOC02KlImNjMpXTtyZXR1cm4gTz4+PjB9O3ZhciB4PVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtJZS5wZXJtdXRlPWZ1bmN0aW9uKGxlKXtmb3IodmFyIE09MCxPPTA7Tzx4''@;'; put 'put ''Lmxlbmd0aDtPKyspTTw8PTEsTXw9bGU+Pj54W09dJjE7cmV0dXJuIE0+Pj4wfSxJZS5wYWRTcGxpdD1mdW5jdGlvbihsZSxNLE8pe2Zvcih2YXIgUj1sZS50b1N0cmluZygyKTtSLmxlbmd0aDxNOylSPSIwIitSO2Zvcih2YXIgej1bXSxLPTA7SzxNO0srPU8pei5wdXNoKFIuc2xpY2UoSyxL''@;'; put 'put ''K08pKTtyZXR1cm4gei5qb2luKCIgIil9fSw0NTE0NDooYXQsSWUsRik9Pnt2YXIgYWU9Rig3MTA5NikseD1GKDI5Nzk5KSxtPUYoOTU1ODApLE09e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtJZS5EaWZmaWVIZWxsbWFuR3JvdXA9SWUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPUll''@;'; put 'put ''LmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24gbGUoUil7dmFyIHo9bmV3IEJ1ZmZlcih4W1JdLnByaW1lLCJoZXgiKSxLPW5ldyBCdWZmZXIoeFtSXS5nZW4sImhleCIpO3JldHVybiBuZXcgbSh6LEspfSxJZS5jcmVhdGVEaWZmaWVIZWxsbWFuPUllLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24g''@;'; put 'put ''TyhSLHosSyxJKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHopfHx2b2lkIDA9PT1NW3pdP08oUiwiYmluYXJ5Iix6LEspOih6PXp8fCJiaW5hcnkiLEk9SXx8ImJpbmFyeSIsSz1LfHxuZXcgQnVmZmVyKFsyXSksQnVmZmVyLmlzQnVmZmVyKEspfHwoSz1uZXcgQnVmZmVyKEssSSkpLCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgUj9uZXcgbShhZShSLEspLEssITApOihCdWZmZXIuaXNCdWZmZXIoUil8fChSPW5ldyBCdWZmZXIoUix6KSksbmV3IG0oUixLLCEwKSkpfX0sOTU1ODA6KGF0LEllLEYpPT57dmFyIGFlPUYoODczMDEpLG09bmV3KEYoNDg2MDYpKSxsZT1uZXcgYWUoMjQpLE09bmV3IGFl''@;'; put 'put ''KDExKSxPPW5ldyBhZSgxMCksUj1uZXcgYWUoMyksej1uZXcgYWUoNyksSz1GKDcxMDk2KSxJPUYoNDQwMTkpO2Z1bmN0aW9uIGsoWCxVKXtyZXR1cm4gVT1VfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFgpfHwoWD1uZXcgQnVmZmVyKFgsVSkpLHRoaXMuX3B1Yj1uZXcgYWUoWCksdGhpc31m''@;'; put 'put ''dW5jdGlvbiBFKFgsVSl7cmV0dXJuIFU9VXx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihYKXx8KFg9bmV3IEJ1ZmZlcihYLFUpKSx0aGlzLl9wcml2PW5ldyBhZShYKSx0aGlzfWF0LmV4cG9ydHM9Qjt2YXIgaj17fTtmdW5jdGlvbiBCKFgsVSxxKXt0aGlzLnNldEdlbmVyYXRvcihVKSx0aGlz''@;'; put 'put ''Ll9fcHJpbWU9bmV3IGFlKFgpLHRoaXMuX3ByaW1lPWFlLm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1YLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAscT8odGhpcy5zZXRQdWJsaWNLZXk9ayx0aGlzLnNl''@;'; put 'put ''dFByaXZhdGVLZXk9RSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gWShYLFUpe3ZhciBxPW5ldyBCdWZmZXIoWC50b0FycmF5KCkpO3JldHVybiBVP3EudG9TdHJpbmcoVSk6cX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBWKFgsVSl7dmFyIHE9VS50b1N0cmluZygiaGV4IiksZWU9W3EsWC50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihlZSBpbiBqKXJldHVybiBq''@;'; put 'put ''W2VlXTt2YXIgb2UsdGU9MDtpZihYLmlzRXZlbigpfHwhSy5zaW1wbGVTaWV2ZXx8IUsuZmVybWF0VGVzdChYKXx8IW0udGVzdChYKSlyZXR1cm4gdGUrPTEsaltlZV09dGUrPSIwMiI9PT1xfHwiMDUiPT09cT84OjQsdGU7c3dpdGNoKG0udGVzdChYLnNocm4oMSkpfHwodGUrPTIpLHEpe2Nh''@;'; put 'put ''c2UiMDIiOlgubW9kKGxlKS5jbXAoTSkmJih0ZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KG9lPVgubW9kKE8pKS5jbXAoUikmJm9lLmNtcCh6KSYmKHRlKz04KTticmVhaztkZWZhdWx0OnRlKz00fXJldHVybiBqW2VlXT10ZSx0ZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmlt''@;'; put 'put ''ZUNvZGV9fSksQi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyBhZShJKHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9t''@;'; put 'put ''UmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sQi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihYKXt2YXIgVT0oWD0oWD1uZXcgYWUoWCkpLnRvUmVkKHRoaXMuX3ByaW1lKSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxxPW5ldyBCdWZmZXIoVS50b0FycmF5KCkpLGVl''@;'; put 'put ''PXRoaXMuZ2V0UHJpbWUoKTtpZihxLmxlbmd0aDxlZS5sZW5ndGgpe3ZhciB0ZT1uZXcgQnVmZmVyKGVlLmxlbmd0aC1xLmxlbmd0aCk7dGUuZmlsbCgwKSxxPUJ1ZmZlci5jb25jYXQoW3RlLHFdKX1yZXR1cm4gcX0sQi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKFUpe3JldHVy''@;'; put 'put ''biBZKHRoaXMuX3B1YixVKX0sQi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihVKXtyZXR1cm4gWSh0aGlzLl9wcml2LFUpfSxCLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihYKXtyZXR1cm4gWSh0aGlzLl9fcHJpbWUsWCl9LEIucHJvdG90eXBlLmdldEdlbmVyYXRvcj1m''@;'; put 'put ''dW5jdGlvbihYKXtyZXR1cm4gWSh0aGlzLl9nZW4sWCl9LEIucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbihYLFUpe3JldHVybiBVPVV8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoWCl8fChYPW5ldyBCdWZmZXIoWCxVKSksdGhpcy5fX2dlbj1YLHRoaXMuX2dlbj1uZXcgYWUoWCks''@;'; put 'put ''dGhpc319LDcxMDk2OihhdCxJZSxGKT0+e3ZhciBhZT1GKDQ0MDE5KTthdC5leHBvcnRzPXRlLHRlLnNpbXBsZVNpZXZlPXEsdGUuZmVybWF0VGVzdD1lZTt2YXIgeD1GKDg3MzAxKSxtPW5ldyB4KDI0KSxNPW5ldyhGKDQ4NjA2KSksTz1uZXcgeCgxKSxSPW5ldyB4KDIpLHo9bmV3IHgoNSks''@;'; put 'put ''az0obmV3IHgoMTYpLG5ldyB4KDgpLG5ldyB4KDEwKSksRT1uZXcgeCgzKSxWPShuZXcgeCg3KSxuZXcgeCgxMSkpLEI9bmV3IHgoNCksWD0obmV3IHgoMTIpLG51bGwpO2Z1bmN0aW9uIHEob2Upe2Zvcih2YXIgc2U9ZnVuY3Rpb24gVSgpe2lmKG51bGwhPT1YKXJldHVybiBYO3ZhciBzZT1b''@;'; put 'put ''XTtzZVswXT0yO2Zvcih2YXIgaGU9MSx1ZT0zO3VlPDEwNDg1NzY7dWUrPTIpe2Zvcih2YXIgY2U9TWF0aC5jZWlsKE1hdGguc3FydCh1ZSkpLEc9MDtHPGhlJiZzZVtHXTw9Y2UmJnVlJXNlW0ddIT0wO0crKyk7aGUhPT1HJiZzZVtHXTw9Y2V8fChzZVtoZSsrXT11ZSl9cmV0dXJuIFg9c2Us''@;'; put 'put ''c2V9KCksaGU9MDtoZTxzZS5sZW5ndGg7aGUrKylpZigwPT09b2UubW9kbihzZVtoZV0pKXJldHVybiAwPT09b2UuY21wbihzZVtoZV0pO3JldHVybiEwfWZ1bmN0aW9uIGVlKG9lKXt2YXIgc2U9eC5tb250KG9lKTtyZXR1cm4gMD09PVIudG9SZWQoc2UpLnJlZFBvdyhvZS5zdWJuKDEpKS5m''@;'; put 'put ''cm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiB0ZShvZSxzZSl7aWYob2U8MTYpcmV0dXJuIG5ldyB4KDI9PT1zZXx8NT09PXNlP1sxNDAsMTIzXTpbMTQwLDM5XSk7c2U9bmV3IHgoc2UpO2Zvcih2YXIgaGUsdWU7Oyl7Zm9yKGhlPW5ldyB4KGFlKE1hdGguY2VpbChvZS84KSkpO2hlLmJpdExl''@;'; put 'put ''bmd0aCgpPm9lOyloZS5pc2hybigxKTtpZihoZS5pc0V2ZW4oKSYmaGUuaWFkZChPKSxoZS50ZXN0bigxKXx8aGUuaWFkZChSKSxzZS5jbXAoUikpe2lmKCFzZS5jbXAoeikpZm9yKDtoZS5tb2QoaykuY21wKEUpOyloZS5pYWRkKEIpfWVsc2UgZm9yKDtoZS5tb2QobSkuY21wKFYpOyloZS5p''@;'; put 'put ''YWRkKEIpO2lmKHEodWU9aGUuc2hybigxKSkmJnEoaGUpJiZlZSh1ZSkmJmVlKGhlKSYmTS50ZXN0KHVlKSYmTS50ZXN0KGhlKSlyZXR1cm4gaGV9fX0sODczMDE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxi''@;'; put 'put ''LEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFy''@;'; put 'put ''IE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDc3NDgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gUihHLGIp''@;'; put 'put ''e3ZhciBEPUcuY2hhckNvZGVBdChiKTtyZXR1cm4gRD49NjUmJkQ8PTcwP0QtNTU6RD49OTcmJkQ8PTEwMj9ELTg3OkQtNDgmMTV9ZnVuY3Rpb24geihHLGIsRCl7dmFyIEg9UihHLEQpO3JldHVybiBELTE+PWImJihIfD1SKEcsRC0xKTw8NCksSH1mdW5jdGlvbiBLKEcsYixELEgpe2Zvcih2''@;'; put 'put ''YXIgTj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsRCksQz1iO0M8ZztDKyspe3ZhciBTPUcuY2hhckNvZGVBdChDKS00ODtOKj1ILE4rPVM+PTQ5P1MtNDkrMTA6Uz49MTc/Uy0xNysxMDpTfXJldHVybiBOfU0uaXNCTj1mdW5jdGlvbihiKXtyZXR1cm4gYiBpbnN0YW5jZW9mIE18fG51bGwhPT1i''@;'; put 'put ''JiYib2JqZWN0Ij09dHlwZW9mIGImJmIuY29uc3RydWN0b3Iud29yZFNpemU9PT1NLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGIud29yZHMpfSxNLm1heD1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKT4wP2I6RH0sTS5taW49ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk8MD9i''@;'; put 'put ''OkR9LE0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGIsRCxIKXtpZigibnVtYmVyIj09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoYixELEgpO2lmKCJvYmplY3QiPT10eXBlb2YgYilyZXR1cm4gdGhpcy5faW5pdEFycmF5KGIsRCxIKTsiaGV4Ij09PUQmJihEPTE2KSxtKEQ9''@;'; put 'put ''PT0oMHxEKSYmRD49MiYmRDw9MzYpO3ZhciBOPTA7Ii0iPT09KGI9Yi50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihOKyssdGhpcy5uZWdhdGl2ZT0xKSxOPGIubGVuZ3RoJiYoMTY9PT1EP3RoaXMuX3BhcnNlSGV4KGIsTixIKToodGhpcy5fcGFyc2VCYXNlKGIsRCxOKSwi''@;'; put 'put ''bGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCkpKX0sTS5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oYixELEgpe2I8MCYmKHRoaXMubmVnYXRpdmU9MSxiPS1iKSxiPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiXSx0aGlzLmxlbmd0aD0x''@;'; put 'put ''KTpiPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oYjw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9Myks''@;'; put 'put ''ImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpfSxNLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGIsRCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgYi5sZW5ndGgpLGIubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0x''@;'; put 'put ''LHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGIubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIGcsQyxTPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMSxnPTA7''@;'; put 'put ''Tj49MDtOLT0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOLTFdPDw4fGJbTi0yXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3IoTj0wLGc9MDtOPGIubGVuZ3Ro''@;'; put 'put ''O04rPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04rMV08PDh8YltOKzJdPDwxNik8PFMmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VIZXg9''@;'; put 'put ''ZnVuY3Rpb24oYixELEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoYi5sZW5ndGgtRCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgUyxnPTAsQz0wO2lmKCJiZSI9PT1IKWZvcihO''@;'; put 'put ''PWIubGVuZ3RoLTE7Tj49RDtOLT0yKVM9eihiLEQsTik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O2Vsc2UgZm9yKE49KGIubGVuZ3RoLUQpJTI9PTA/RCsxOkQ7TjxiLmxlbmd0aDtOKz0yKVM9eihiLEQs''@;'; put 'put ''Tik8PGcsdGhpcy53b3Jkc1tDXXw9NjcxMDg4NjMmUyxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tDKz0xXXw9Uz4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihiLEQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFy''@;'; put 'put ''IE49MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9RClOKys7Ti0tLGc9Zy9EfDA7Zm9yKHZhciBDPWIubGVuZ3RoLUgsUz1DJU4sdj1NYXRoLm1pbihDLEMtUykrSCxwPTAsdz1IO3c8djt3Kz1OKXA9SyhiLHcsdytOLEQpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMu''@;'; put 'put ''d29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PVMpe3ZhciBKPTE7Zm9yKHA9SyhiLHcsYi5sZW5ndGgsRCksdz0wO3c8Uzt3KyspSio9RDt0aGlzLmltdWxuKEopLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sTS5wcm90b3R5cGUuY29weT1mdW5jdGlvbihiKXtiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aDtEKyspYi53b3Jkc1tEXT10aGlzLndvcmRzW0RdO2IubGVuZ3RoPXRoaXMubGVuZ3RoLGIubmVnYXRpdmU9dGhpcy5uZWdhdGl2''@;'; put 'put ''ZSxiLnJlZD10aGlzLnJlZH0sTS5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGIpLGJ9LE0ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytd''@;'; put 'put ''PTA7cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sTS5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LE0ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9''@;'; put 'put ''WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0saz1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxFPVswLDAs''@;'; put 'put ''MzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0''@;'; put 'put ''MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFYoRyxiLEQpe0QubmVnYXRpdmU9Yi5u''@;'; put 'put ''ZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK2IubGVuZ3RofDA7RC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBOPTB8Ry53b3Jkc1swXSxnPTB8Yi53b3Jkc1swXSxDPU4qZyx2PUMvNjcxMDg4NjR8MDtELndvcmRzWzBdPTY3MTA4ODYzJkM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9y''@;'; put 'put ''KHZhciB3PXY+Pj4yNixKPTY3MTA4ODYzJnYsbmU9TWF0aC5taW4ocCxiLmxlbmd0aC0xKSxkZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7ZGU8PW5lO2RlKyspdys9KEM9KE49MHxHLndvcmRzW3AtZGV8MF0pKihnPTB8Yi53b3Jkc1tkZV0pK0opLzY3MTA4ODY0fDAsSj02NzEwODg2MyZD''@;'; put 'put ''O0Qud29yZHNbcF09MHxKLHY9MHx3fXJldHVybiAwIT09dj9ELndvcmRzW3BdPTB8djpELmxlbmd0aC0tLEQuc3RyaXAoKX1NLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihiLEQpe3ZhciBIO2lmKEQ9MHxEfHwxLDE2PT09KGI9Ynx8MTApfHwiaGV4Ij09PWIpe0g9IiI7Zm9yKHZhciBO''@;'; put 'put ''PTAsZz0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9dGhpcy53b3Jkc1tDXSx2PSgxNjc3NzIxNSYoUzw8TnxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9Uz4+PjI0LU4mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9JWzYtdi5sZW5ndGhdK3YrSDp2K0gsKE4rPTIpPj0yNiYm''@;'; put 'put ''KE4tPTI2LEMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVEIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoYj09PSgwfGIpJiZiPj0yJiZiPD0zNil7dmFyIHA9a1tiXSx3PUVbYl07SD0iIjt2YXIgSj10aGlz''@;'; put 'put ''LmNsb25lKCk7Zm9yKEoubmVnYXRpdmU9MDshSi5pc1plcm8oKTspe3ZhciBuZT1KLm1vZG4odykudG9TdHJpbmcoYik7SD0oSj1KLmlkaXZuKHcpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVEIT0wOylI''@;'; put 'put ''PSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxNLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBiPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9iKz02''@;'; put 'put ''NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Yis9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIp''@;'; put 'put ''LDAhPT10aGlzLm5lZ2F0aXZlPy1iOmJ9LE0ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sTS5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oYixEKXtyZXR1cm4gbSh0eXBlb2YgTzwidSIpLHRoaXMudG9BcnJheUxpa2UoTyxiLEQpfSxN''@;'; put 'put ''LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksYixEKX0sTS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oYixELEgpe3ZhciBOPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxOKTttKE48PWcsImJ5dGUg''@;'; put 'put ''YXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciB2LHAsQz0ibGUiPT09RCxTPW5ldyBiKGcpLHc9dGhpcy5jbG9uZSgpO2lmKEMpe2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5h''@;'; put 'put ''bmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbcF09djtmb3IoO3A8ZztwKyspU1twXT0wfWVsc2V7Zm9yKHA9MDtwPGctTjtwKyspU1twXT0wO2ZvcihwPTA7IXcuaXNaZXJvKCk7cCsrKXY9dy5hbmRsbigyNTUpLHcuaXVzaHJuKDgpLFNbZy1wLTFdPXZ9cmV0dXJuIFN9LE0ucHJvdG90eXBlLl9j''@;'; put 'put ''b3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihiKXtyZXR1cm4gMzItTWF0aC5jbHozMihiKX06ZnVuY3Rpb24oYil7dmFyIEQ9YixIPTA7cmV0dXJuIEQ+PTQwOTYmJihIKz0xMyxEPj4+PTEzKSxEPj02NCYmKEgrPTcsRD4+Pj03KSxEPj04JiYoSCs9NCxEPj4+PTQpLEQ+PTImJihIKz0y''@;'; put 'put ''LEQ+Pj49MiksSCtEfSxNLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oYil7aWYoMD09PWIpcmV0dXJuIDI2O3ZhciBEPWIsSD0wO3JldHVybiA4MTkxJkR8fChIKz0xMyxEPj4+PTEzKSwxMjcmRHx8KEgrPTcsRD4+Pj03KSwxNSZEfHwoSCs9NCxEPj4+PTQpLDMmRHx8KEgrPTIsRD4+''@;'; put 'put ''Pj0yKSwxJkR8fEgrKyxIfSxNLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgRD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStEfSxNLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRo''@;'; put 'put ''aXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBiPTAsRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0RdKTtpZihiKz1ILDI2IT09SClicmVha31yZXR1cm4gYn0sTS5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBN''@;'; put 'put ''YXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sTS5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGIpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oYil7cmV0''@;'; put 'put ''dXJuIHRoaXMudGVzdG4oYi0xKT90aGlzLm5vdG4oYikuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sTS5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LE0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aW5lZygpfSxNLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxNLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8Yi5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109''@;'; put 'put ''MDtmb3IodmFyIEQ9MDtEPGIubGVuZ3RoO0QrKyl0aGlzLndvcmRzW0RdPXRoaXMud29yZHNbRF18Yi53b3Jkc1tEXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVv''@;'; put 'put ''cihiKX0sTS5wcm90b3R5cGUub3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoYik6Yi5jbG9uZSgpLmlvcih0aGlzKX0sTS5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaXVvcihiKTpiLmNsb25lKCkuaXVvcih0aGlzKX0sTS5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oYil7dmFyIEQ7RD10aGlzLmxlbmd0aD5iLmxlbmd0aD9iOnRoaXM7Zm9yKHZhciBIPTA7SDxELmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJmIud29yZHNb''@;'; put 'put ''SF07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVuZ3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChiKX0sTS5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0''@;'; put 'put ''aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChiKTpiLmNsb25lKCkuaWFuZCh0aGlzKX0sTS5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGIpOmIuY2xvbmUoKS5pdWFuZCh0aGlzKX0s''@;'; put 'put ''TS5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oYil7dmFyIEQsSDt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oRD10aGlzLEg9Yik6KEQ9YixIPXRoaXMpO2Zvcih2YXIgTj0wO048SC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXV5ILndvcmRzW05dO2lmKHRoaXMhPT1EKWZvcig7''@;'; put 'put ''TjxELmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoYil9''@;'; put 'put ''LE0ucHJvdG90eXBlLnhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoYik6Yi5jbG9uZSgpLml4b3IodGhpcyl9LE0ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5pdXhvcihiKTpiLmNsb25lKCkuaXV4b3IodGhpcyl9LE0ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD0wfE1hdGguY2VpbChiLzI2KSxIPWIlMjY7dGhpcy5fZXhwYW5kKEQpLEg+MCYmRC0tO2Zvcih2YXIgTj0wO048''@;'; put 'put ''RDtOKyspdGhpcy53b3Jkc1tOXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tOXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tOXT1+dGhpcy53b3Jkc1tOXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aW5vdG4oYil9LE0ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oYixEKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEg9Yi8yNnwwLE49YiUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1EP3RoaXMud29yZHNbSF18MTw8Tjp0aGlzLndvcmRzW0hdJn4o''@;'; put 'put ''MTw8TiksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGIpe3ZhciBELEgsTjtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxEPXRoaXMuaXN1YihiKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWdu''@;'; put 'put ''KCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiBiLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEg9dGhpcyxOPWIpOihIPWIsTj10aGlzKTtmb3IodmFyIGc9MCxDPTA7''@;'; put 'put ''QzxOLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKSsoMHxOLndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtmb3IoOzAhPT1nJiZDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pK2cpLGc9RD4+PjI2O2lm''@;'; put 'put ''KHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7QzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1ILndvcmRzW0NdO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5hZGQ9ZnVuY3Rp''@;'; put 'put ''b24oYil7dmFyIEQ7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLEQ9dGhpcy5zdWIoYiksYi5uZWdhdGl2ZV49MSxEKTowPT09Yi5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxEPWIuc3ViKHRoaXMpLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSxEKTp0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChiKTpiLmNsb25lKCkuaWFkZCh0aGlzKX0sTS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiKXtpZigwIT09Yi5uZWdhdGl2ZSl7Yi5uZWdhdGl2ZT0wO3ZhciBEPXRoaXMuaWFkZChiKTtyZXR1''@;'; put 'put ''cm4gYi5uZWdhdGl2ZT0xLEQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIE4sZyxIPXRoaXMuY21wKGIpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KE49dGhpcyxnPWIpOihOPWIsZz10aGlzKTtmb3IodmFyIEM9MCxTPTA7UzxnLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKS0oMHxnLndvcmRzW1NdKStDKT4+MjYsdGhpcy53b3Jkc1tTXT02NzEw''@;'; put 'put ''ODg2MyZEO2Zvcig7MCE9PUMmJlM8Ti5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtpZigwPT09QyYmUzxOLmxlbmd0aCYmTiE9PXRoaXMpZm9yKDtTPE4ubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPU4ud29yZHNbU107cmV0''@;'; put 'put ''dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMpLE4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoYil9O3ZhciBCPWZ1bmN0aW9uKGIsRCxIKXt2YXIg''@;'; put 'put ''dixwLHcsTj1iLndvcmRzLGc9RC53b3JkcyxDPUgud29yZHMsUz0wLEo9MHxOWzBdLG5lPTgxOTEmSixkZT1KPj4+MTMsZmU9MHxOWzFdLHhlPTgxOTEmZmUsTGU9ZmU+Pj4xMyxGZT0wfE5bMl0sT2U9ODE5MSZGZSxqZT1GZT4+PjEzLFdlPTB8TlszXSxLZT04MTkxJldlLFllPVdlPj4+MTMs''@;'; put 'put ''SmU9MHxOWzRdLGx0PTgxOTEmSmUsUGU9SmU+Pj4xMyxiZT0wfE5bNV0sQWU9ODE5MSZiZSxUZT1iZT4+PjEzLHFlPTB8Tls2XSxYZT04MTkxJnFlLFVlPXFlPj4+MTMsaHQ9MHxOWzddLE1lPTgxOTEmaHQsRGU9aHQ+Pj4xMyx6ZT0wfE5bOF0saXQ9ODE5MSZ6ZSx1dD16ZT4+PjEzLE10PTB8''@;'; put 'put ''Tls5XSxIdD04MTkxJk10LFB0PU10Pj4+MTMsb249MHxnWzBdLENuPTgxOTEmb24sVXQ9b24+Pj4xMyxibj0wfGdbMV0sV249ODE5MSZibixlbj1ibj4+PjEzLCRuPTB8Z1syXSxIbj04MTkxJiRuLGZ0PSRuPj4+MTMsZm49MHxnWzNdLGhuPTgxOTEmZm4sd3Q9Zm4+Pj4xMyxYdD0wfGdbNF0s''@;'; put 'put ''X3Q9ODE5MSZYdCxOdD1YdD4+PjEzLG1uPTB8Z1s1XSxydD04MTkxJm1uLEl0PW1uPj4+MTMsSnQ9MHxnWzZdLER0PTgxOTEmSnQscHQ9SnQ+Pj4xMyxZdD0wfGdbN10sSW49ODE5MSZZdCx6dD1ZdD4+PjEzLHluPTB8Z1s4XSx4bj04MTkxJnluLHNuPXluPj4+MTMsQm49MHxnWzldLFJuPTgx''@;'; put 'put ''OTEmQm4sJHQ9Qm4+Pj4xMztILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgUG49KFMrKHY9TWF0aC5pbXVsKG5lLENuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSxVdCkpK01hdGguaW11bChkZSxDbil8MCkpPDwxMyl8MDtTPSgodz1NYXRo''@;'; put 'put ''LmltdWwoZGUsVXQpKSsocD4+PjEzKXwwKSsoUG4+Pj4yNil8MCxQbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoeGUsQ24pLHA9KHA9TWF0aC5pbXVsKHhlLFV0KSkrTWF0aC5pbXVsKExlLENuKXwwLHc9TWF0aC5pbXVsKExlLFV0KTt2YXIgbmk9KFMrKHY9ditNYXRoLmltdWwobmUsV24pfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxlbil8MCkrTWF0aC5pbXVsKGRlLFduKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGVuKXwwKSsocD4+PjEzKXwwKSsobmk+Pj4yNil8MCxuaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoT2UsQ24pLHA9KHA9TWF0aC5pbXVs''@;'; put 'put ''KE9lLFV0KSkrTWF0aC5pbXVsKGplLENuKXwwLHc9TWF0aC5pbXVsKGplLFV0KSx2PXYrTWF0aC5pbXVsKHhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChMZSxXbil8MCx3PXcrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBsbj0oUysodj12K01hdGguaW11bChu''@;'; put 'put ''ZSxIbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGZ0KXwwKStNYXRoLmltdWwoZGUsSG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZnQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2Myx2PU1hdGguaW11bChLZSxDbikscD0ocD1N''@;'; put 'put ''YXRoLmltdWwoS2UsVXQpKStNYXRoLmltdWwoWWUsQ24pfDAsdz1NYXRoLmltdWwoWWUsVXQpLHY9ditNYXRoLmltdWwoT2UsV24pfDAscD0ocD1wK01hdGguaW11bChPZSxlbil8MCkrTWF0aC5pbXVsKGplLFduKXwwLHc9dytNYXRoLmltdWwoamUsZW4pfDAsdj12K01hdGguaW11bCh4ZSxI''@;'; put 'put ''bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGZ0KXwwKStNYXRoLmltdWwoTGUsSG4pfDAsdz13K01hdGguaW11bChMZSxmdCl8MDt2YXIgam49KFMrKHY9ditNYXRoLmltdWwobmUsaG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx3dCl8MCkrTWF0aC5pbXVsKGRlLGhuKXww''@;'; put 'put ''KSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHd0KXwwKSsocD4+PjEzKXwwKSsoam4+Pj4yNil8MCxqbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwobHQsQ24pLHA9KHA9TWF0aC5pbXVsKGx0LFV0KSkrTWF0aC5pbXVsKFBlLENuKXwwLHc9TWF0aC5pbXVsKFBlLFV0KSx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKEtlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChZZSxXbil8MCx3PXcrTWF0aC5pbXVsKFllLGVuKXwwLHY9ditNYXRoLmltdWwoT2UsSG4pfDAscD0ocD1wK01hdGguaW11bChPZSxmdCl8MCkrTWF0aC5pbXVsKGplLEhuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''amUsZnQpfDAsdj12K01hdGguaW11bCh4ZSxobil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHd0KXwwKStNYXRoLmltdWwoTGUsaG4pfDAsdz13K01hdGguaW11bChMZSx3dCl8MDt2YXIgcXI9KFMrKHY9ditNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChu''@;'; put 'put ''ZSxOdCl8MCkrTWF0aC5pbXVsKGRlLF90KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLE50KXwwKSsocD4+PjEzKXwwKSsocXI+Pj4yNil8MCxxciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoQWUsQ24pLHA9KHA9TWF0aC5pbXVsKEFlLFV0KSkrTWF0aC5pbXVsKFRlLENuKXwwLHc9''@;'; put 'put ''TWF0aC5pbXVsKFRlLFV0KSx2PXYrTWF0aC5pbXVsKGx0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZW4pfDApK01hdGguaW11bChQZSxXbil8MCx3PXcrTWF0aC5pbXVsKFBlLGVuKXwwLHY9ditNYXRoLmltdWwoS2UsSG4pfDAscD0ocD1wK01hdGguaW11bChLZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFllLEhuKXwwLHc9dytNYXRoLmltdWwoWWUsZnQpfDAsdj12K01hdGguaW11bChPZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHd0KXwwKStNYXRoLmltdWwoamUsaG4pfDAsdz13K01hdGguaW11bChqZSx3dCl8MCx2PXYrTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoeGUsTnQpfDApK01hdGguaW11bChMZSxfdCl8MCx3PXcrTWF0aC5pbXVsKExlLE50KXwwO3ZhciBnaT0oUysodj12K01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEl0KXwwKStNYXRoLmltdWwoZGUscnQpfDApKTw8MTMpfDA7Uz0oKHc9dytN''@;'; put 'put ''YXRoLmltdWwoZGUsSXQpfDApKyhwPj4+MTMpfDApKyhnaT4+PjI2KXwwLGdpJj02NzEwODg2Myx2PU1hdGguaW11bChYZSxDbikscD0ocD1NYXRoLmltdWwoWGUsVXQpKStNYXRoLmltdWwoVWUsQ24pfDAsdz1NYXRoLmltdWwoVWUsVXQpLHY9ditNYXRoLmltdWwoQWUsV24pfDAscD0ocD1w''@;'; put 'put ''K01hdGguaW11bChBZSxlbil8MCkrTWF0aC5pbXVsKFRlLFduKXwwLHc9dytNYXRoLmltdWwoVGUsZW4pfDAsdj12K01hdGguaW11bChsdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZ0KXwwKStNYXRoLmltdWwoUGUsSG4pfDAsdz13K01hdGguaW11bChQZSxmdCl8MCx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKEtlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usd3QpfDApK01hdGguaW11bChZZSxobil8MCx3PXcrTWF0aC5pbXVsKFllLHd0KXwwLHY9ditNYXRoLmltdWwoT2UsX3QpfDAscD0ocD1wK01hdGguaW11bChPZSxOdCl8MCkrTWF0aC5pbXVsKGplLF90KXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''amUsTnQpfDAsdj12K01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEl0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdz13K01hdGguaW11bChMZSxJdCl8MDt2YXIgeHI9KFMrKHY9ditNYXRoLmltdWwobmUsRHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChu''@;'; put 'put ''ZSxwdCl8MCkrTWF0aC5pbXVsKGRlLER0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHB0KXwwKSsocD4+PjEzKXwwKSsoeHI+Pj4yNil8MCx4ciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoTWUsQ24pLHA9KHA9TWF0aC5pbXVsKE1lLFV0KSkrTWF0aC5pbXVsKERlLENuKXwwLHc9''@;'; put 'put ''TWF0aC5pbXVsKERlLFV0KSx2PXYrTWF0aC5pbXVsKFhlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZW4pfDApK01hdGguaW11bChVZSxXbil8MCx3PXcrTWF0aC5pbXVsKFVlLGVuKXwwLHY9ditNYXRoLmltdWwoQWUsSG4pfDAscD0ocD1wK01hdGguaW11bChBZSxmdCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKFRlLEhuKXwwLHc9dytNYXRoLmltdWwoVGUsZnQpfDAsdj12K01hdGguaW11bChsdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHd0KXwwKStNYXRoLmltdWwoUGUsaG4pfDAsdz13K01hdGguaW11bChQZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoS2UsTnQpfDApK01hdGguaW11bChZZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFllLE50KXwwLHY9ditNYXRoLmltdWwoT2UscnQpfDAscD0ocD1wK01hdGguaW11bChPZSxJdCl8MCkrTWF0aC5pbXVsKGplLHJ0KXwwLHc9dytNYXRoLmltdWwoamUsSXQpfDAsdj12K01hdGguaW11bCh4ZSxE''@;'; put 'put ''dCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoTGUsRHQpfDAsdz13K01hdGguaW11bChMZSxwdCl8MDt2YXIgVWk9KFMrKHY9ditNYXRoLmltdWwobmUsSW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx6dCl8MCkrTWF0aC5pbXVsKGRlLEluKXww''@;'; put 'put ''KSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHp0KXwwKSsocD4+PjEzKXwwKSsoVWk+Pj4yNil8MCxVaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoaXQsQ24pLHA9KHA9TWF0aC5pbXVsKGl0LFV0KSkrTWF0aC5pbXVsKHV0LENuKXwwLHc9TWF0aC5pbXVsKHV0LFV0KSx2PXYrTWF0aC5p''@;'; put 'put ''bXVsKE1lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bChEZSxXbil8MCx3PXcrTWF0aC5pbXVsKERlLGVuKXwwLHY9ditNYXRoLmltdWwoWGUsSG4pfDAscD0ocD1wK01hdGguaW11bChYZSxmdCl8MCkrTWF0aC5pbXVsKFVlLEhuKXwwLHc9dytNYXRoLmltdWwo''@;'; put 'put ''VWUsZnQpfDAsdj12K01hdGguaW11bChBZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHd0KXwwKStNYXRoLmltdWwoVGUsaG4pfDAsdz13K01hdGguaW11bChUZSx3dCl8MCx2PXYrTWF0aC5pbXVsKGx0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsTnQpfDApK01hdGguaW11bChQZSxf''@;'; put 'put ''dCl8MCx3PXcrTWF0aC5pbXVsKFBlLE50KXwwLHY9ditNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxJdCl8MCkrTWF0aC5pbXVsKFllLHJ0KXwwLHc9dytNYXRoLmltdWwoWWUsSXQpfDAsdj12K01hdGguaW11bChPZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLHB0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoamUsRHQpfDAsdz13K01hdGguaW11bChqZSxwdCl8MCx2PXYrTWF0aC5pbXVsKHhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsenQpfDApK01hdGguaW11bChMZSxJbil8MCx3PXcrTWF0aC5pbXVsKExlLHp0KXwwO3ZhciBLcj0oUysodj12K01hdGguaW11bChu''@;'; put 'put ''ZSx4bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHNuKXwwKStNYXRoLmltdWwoZGUseG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsc24pfDApKyhwPj4+MTMpfDApKyhLcj4+PjI2KXwwLEtyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxDbikscD0ocD1N''@;'; put 'put ''YXRoLmltdWwoSHQsVXQpKStNYXRoLmltdWwoUHQsQ24pfDAsdz1NYXRoLmltdWwoUHQsVXQpLHY9ditNYXRoLmltdWwoaXQsV24pfDAscD0ocD1wK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKHV0LFduKXwwLHc9dytNYXRoLmltdWwodXQsZW4pfDAsdj12K01hdGguaW11bChNZSxI''@;'; put 'put ''bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwoRGUsSG4pfDAsdz13K01hdGguaW11bChEZSxmdCl8MCx2PXYrTWF0aC5pbXVsKFhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsd3QpfDApK01hdGguaW11bChVZSxobil8MCx3PXcrTWF0aC5pbXVsKFVlLHd0KXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwoQWUsX3QpfDAscD0ocD1wK01hdGguaW11bChBZSxOdCl8MCkrTWF0aC5pbXVsKFRlLF90KXwwLHc9dytNYXRoLmltdWwoVGUsTnQpfDAsdj12K01hdGguaW11bChsdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEl0KXwwKStNYXRoLmltdWwoUGUscnQpfDAsdz13''@;'; put 'put ''K01hdGguaW11bChQZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEtlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UscHQpfDApK01hdGguaW11bChZZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFllLHB0KXwwLHY9ditNYXRoLmltdWwoT2UsSW4pfDAscD0ocD1wK01hdGguaW11bChPZSx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKGplLEluKXwwLHc9dytNYXRoLmltdWwoamUsenQpfDAsdj12K01hdGguaW11bCh4ZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHNuKXwwKStNYXRoLmltdWwoTGUseG4pfDAsdz13K01hdGguaW11bChMZSxzbil8MDt2YXIgbm89KFMrKHY9ditNYXRoLmltdWwobmUsUm4pfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKGRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsV24pLHA9KHA9TWF0aC5pbXVs''@;'; put 'put ''KEh0LGVuKSkrTWF0aC5pbXVsKFB0LFduKXwwLHc9TWF0aC5pbXVsKFB0LGVuKSx2PXYrTWF0aC5pbXVsKGl0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCh1dCxIbil8MCx3PXcrTWF0aC5pbXVsKHV0LGZ0KXwwLHY9ditNYXRoLmltdWwoTWUsaG4pfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChNZSx3dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHc9dytNYXRoLmltdWwoRGUsd3QpfDAsdj12K01hdGguaW11bChYZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLE50KXwwKStNYXRoLmltdWwoVWUsX3QpfDAsdz13K01hdGguaW11bChVZSxOdCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKEFlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsSXQpfDApK01hdGguaW11bChUZSxydCl8MCx3PXcrTWF0aC5pbXVsKFRlLEl0KXwwLHY9ditNYXRoLmltdWwobHQsRHQpfDAscD0ocD1wK01hdGguaW11bChsdCxwdCl8MCkrTWF0aC5pbXVsKFBlLER0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoUGUscHQpfDAsdj12K01hdGguaW11bChLZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHp0KXwwKStNYXRoLmltdWwoWWUsSW4pfDAsdz13K01hdGguaW11bChZZSx6dCl8MCx2PXYrTWF0aC5pbXVsKE9lLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2Usc24pfDApK01hdGguaW11bChq''@;'; put 'put ''ZSx4bil8MCx3PXcrTWF0aC5pbXVsKGplLHNuKXwwO3ZhciBIcj0oUysodj12K01hdGguaW11bCh4ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoTGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+''@;'; put 'put ''MTMpfDApKyhIcj4+PjI2KXwwLEhyJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxIbikscD0ocD1NYXRoLmltdWwoSHQsZnQpKStNYXRoLmltdWwoUHQsSG4pfDAsdz1NYXRoLmltdWwoUHQsZnQpLHY9ditNYXRoLmltdWwoaXQsaG4pfDAscD0ocD1wK01hdGguaW11bChpdCx3dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LGhuKXwwLHc9dytNYXRoLmltdWwodXQsd3QpfDAsdj12K01hdGguaW11bChNZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLE50KXwwKStNYXRoLmltdWwoRGUsX3QpfDAsdz13K01hdGguaW11bChEZSxOdCl8MCx2PXYrTWF0aC5pbXVsKFhlLHJ0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoWGUsSXQpfDApK01hdGguaW11bChVZSxydCl8MCx3PXcrTWF0aC5pbXVsKFVlLEl0KXwwLHY9ditNYXRoLmltdWwoQWUsRHQpfDAscD0ocD1wK01hdGguaW11bChBZSxwdCl8MCkrTWF0aC5pbXVsKFRlLER0KXwwLHc9dytNYXRoLmltdWwoVGUscHQpfDAsdj12K01hdGguaW11bChs''@;'; put 'put ''dCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LHp0KXwwKStNYXRoLmltdWwoUGUsSW4pfDAsdz13K01hdGguaW11bChQZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEtlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2Usc24pfDApK01hdGguaW11bChZZSx4bil8MCx3PXcrTWF0aC5pbXVsKFllLHNu''@;'; put 'put ''KXwwO3ZhciBxaT0oUysodj12K01hdGguaW11bChPZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLCR0KXwwKStNYXRoLmltdWwoamUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoamUsJHQpfDApKyhwPj4+MTMpfDApKyhxaT4+PjI2KXwwLHFpJj02NzEw''@;'; put 'put ''ODg2Myx2PU1hdGguaW11bChIdCxobikscD0ocD1NYXRoLmltdWwoSHQsd3QpKStNYXRoLmltdWwoUHQsaG4pfDAsdz1NYXRoLmltdWwoUHQsd3QpLHY9ditNYXRoLmltdWwoaXQsX3QpfDAscD0ocD1wK01hdGguaW11bChpdCxOdCl8MCkrTWF0aC5pbXVsKHV0LF90KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwodXQsTnQpfDAsdj12K01hdGguaW11bChNZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLEl0KXwwKStNYXRoLmltdWwoRGUscnQpfDAsdz13K01hdGguaW11bChEZSxJdCl8MCx2PXYrTWF0aC5pbXVsKFhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUscHQpfDApK01hdGguaW11bChV''@;'; put 'put ''ZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFVlLHB0KXwwLHY9ditNYXRoLmltdWwoQWUsSW4pfDAscD0ocD1wK01hdGguaW11bChBZSx6dCl8MCkrTWF0aC5pbXVsKFRlLEluKXwwLHc9dytNYXRoLmltdWwoVGUsenQpfDAsdj12K01hdGguaW11bChsdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGx0''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoUGUseG4pfDAsdz13K01hdGguaW11bChQZSxzbil8MDt2YXIgSmk9KFMrKHY9ditNYXRoLmltdWwoS2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFllLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5p''@;'; put 'put ''bXVsKFllLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsX3QpLHA9KHA9TWF0aC5pbXVsKEh0LE50KSkrTWF0aC5pbXVsKFB0LF90KXwwLHc9TWF0aC5pbXVsKFB0LE50KSx2PXYrTWF0aC5pbXVsKGl0LHJ0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoaXQsSXQpfDApK01hdGguaW11bCh1dCxydCl8MCx3PXcrTWF0aC5pbXVsKHV0LEl0KXwwLHY9ditNYXRoLmltdWwoTWUsRHQpfDAscD0ocD1wK01hdGguaW11bChNZSxwdCl8MCkrTWF0aC5pbXVsKERlLER0KXwwLHc9dytNYXRoLmltdWwoRGUscHQpfDAsdj12K01hdGguaW11bChY''@;'; put 'put ''ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHp0KXwwKStNYXRoLmltdWwoVWUsSW4pfDAsdz13K01hdGguaW11bChVZSx6dCl8MCx2PXYrTWF0aC5pbXVsKEFlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsc24pfDApK01hdGguaW11bChUZSx4bil8MCx3PXcrTWF0aC5pbXVsKFRlLHNu''@;'; put 'put ''KXwwO3ZhciBhbz0oUysodj12K01hdGguaW11bChsdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LCR0KXwwKStNYXRoLmltdWwoUGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoUGUsJHQpfDApKyhwPj4+MTMpfDApKyhhbz4+PjI2KXwwLGFvJj02NzEw''@;'; put 'put ''ODg2Myx2PU1hdGguaW11bChIdCxydCkscD0ocD1NYXRoLmltdWwoSHQsSXQpKStNYXRoLmltdWwoUHQscnQpfDAsdz1NYXRoLmltdWwoUHQsSXQpLHY9ditNYXRoLmltdWwoaXQsRHQpfDAscD0ocD1wK01hdGguaW11bChpdCxwdCl8MCkrTWF0aC5pbXVsKHV0LER0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwodXQscHQpfDAsdj12K01hdGguaW11bChNZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwoRGUsSW4pfDAsdz13K01hdGguaW11bChEZSx6dCl8MCx2PXYrTWF0aC5pbXVsKFhlLHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsc24pfDApK01hdGguaW11bChV''@;'; put 'put ''ZSx4bil8MCx3PXcrTWF0aC5pbXVsKFVlLHNuKXwwO3ZhciBybz0oUysodj12K01hdGguaW11bChBZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLCR0KXwwKStNYXRoLmltdWwoVGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoVGUsJHQpfDApKyhwPj4+''@;'; put 'put ''MTMpfDApKyhybz4+PjI2KXwwLHJvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxEdCkscD0ocD1NYXRoLmltdWwoSHQscHQpKStNYXRoLmltdWwoUHQsRHQpfDAsdz1NYXRoLmltdWwoUHQscHQpLHY9ditNYXRoLmltdWwoaXQsSW4pfDAscD0ocD1wK01hdGguaW11bChpdCx6dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHV0LEluKXwwLHc9dytNYXRoLmltdWwodXQsenQpfDAsdj12K01hdGguaW11bChNZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwoRGUseG4pfDAsdz13K01hdGguaW11bChEZSxzbil8MDt2YXIgaW89KFMrKHY9ditNYXRoLmltdWwoWGUsUm4pfDAp''@;'; put 'put ''fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChYZSwkdCl8MCkrTWF0aC5pbXVsKFVlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsoaW8+Pj4yNil8MCxpbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSW4pLHA9KHA9TWF0aC5pbXVs''@;'; put 'put ''KEh0LHp0KSkrTWF0aC5pbXVsKFB0LEluKXwwLHc9TWF0aC5pbXVsKFB0LHp0KSx2PXYrTWF0aC5pbXVsKGl0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCh1dCx4bil8MCx3PXcrTWF0aC5pbXVsKHV0LHNuKXwwO3ZhciBHaT0oUysodj12K01hdGguaW11bChN''@;'; put 'put ''ZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE1lLCR0KXwwKStNYXRoLmltdWwoRGUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoRGUsJHQpfDApKyhwPj4+MTMpfDApKyhHaT4+PjI2KXwwLEdpJj02NzEwODg2Myx2PU1hdGguaW11bChIdCx4bikscD0ocD1N''@;'; put 'put ''YXRoLmltdWwoSHQsc24pKStNYXRoLmltdWwoUHQseG4pfDAsdz1NYXRoLmltdWwoUHQsc24pO3ZhciBobz0oUysodj12K01hdGguaW11bChpdCxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGl0LCR0KXwwKStNYXRoLmltdWwodXQsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytN''@;'; put 'put ''YXRoLmltdWwodXQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgeXI9KFMrKHY9TWF0aC5pbXVsKEh0LFJuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChIdCwkdCkpK01hdGguaW11bChQdCxSbil8MCkpPDwxMyl8MDtyZXR1cm4gUz0oKHc9TWF0''@;'; put 'put ''aC5pbXVsKFB0LCR0KSkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLENbMF09UG4sQ1sxXT1uaSxDWzJdPWxuLENbM109am4sQ1s0XT1xcixDWzVdPWdpLENbNl09eHIsQ1s3XT1VaSxDWzhdPUtyLENbOV09bm8sQ1sxMF09SHIsQ1sxMV09cWksQ1sxMl09SmksQ1sxM109''@;'; put 'put ''YW8sQ1sxNF09cm8sQ1sxNV09aW8sQ1sxNl09R2ksQ1sxN109aG8sQ1sxOF09eXIsMCE9PVMmJihDWzE5XT1TLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFgoRyxiLEQpe3JldHVybihuZXcgVSkubXVscChHLGIsRCl9ZnVuY3Rpb24gVShHLGIpe3RoaXMueD1HLHRoaXMueT1ifU1hdGguaW11''@;'; put 'put ''bHx8KEI9ViksTS5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMubGVuZ3RoK2IubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09Yi5sZW5ndGg/Qih0aGlzLGIsRCk6Tjw2Mz9WKHRoaXMsYixEKTpOPDEwMjQ/ZnVuY3Rpb24gWShHLGIsRCl7''@;'; put 'put ''RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmUsRC5sZW5ndGg9Ry5sZW5ndGgrYi5sZW5ndGg7Zm9yKHZhciBIPTAsTj0wLGc9MDtnPEQubGVuZ3RoLTE7ZysrKXt2YXIgQz1OO049MDtmb3IodmFyIFM9NjcxMDg4NjMmSCx2PU1hdGgubWluKGcsYi5sZW5ndGgtMSkscD1NYXRoLm1h''@;'; put 'put ''eCgwLGctRy5sZW5ndGgrMSk7cDw9djtwKyspe3ZhciBkZT0oMHxHLndvcmRzW2ctcF0pKigwfGIud29yZHNbcF0pLGZlPTY3MTA4ODYzJmRlO1M9NjcxMDg4NjMmKGZlPWZlK1N8MCksTis9KEM9KEM9QysoZGUvNjcxMDg4NjR8MCl8MCkrKGZlPj4+MjYpfDApPj4+MjYsQyY9NjcxMDg4NjN9''@;'; put 'put ''RC53b3Jkc1tnXT1TLEg9QyxDPU59cmV0dXJuIDAhPT1IP0Qud29yZHNbZ109SDpELmxlbmd0aC0tLEQuc3RyaXAoKX0odGhpcyxiLEQpOlgodGhpcyxiLEQpLEh9LFUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPU0ucHJvdG90eXBlLl9j''@;'; put 'put ''b3VudEJpdHMoYiktMSxOPTA7TjxiO04rKylEW05dPXRoaXMucmV2QmluKE4sSCxiKTtyZXR1cm4gRH0sVS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGIsRCxIKXtpZigwPT09Ynx8Yj09PUgtMSlyZXR1cm4gYjtmb3IodmFyIE49MCxnPTA7ZzxEO2crKylOfD0oMSZiKTw8RC1nLTEsYj4+''@;'; put 'put ''PTE7cmV0dXJuIE59LFUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oYixELEgsTixnLEMpe2Zvcih2YXIgUz0wO1M8QztTKyspTltTXT1EW2JbU11dLGdbU109SFtiW1NdXX0sVS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXt0aGlzLnBlcm11dGUoQyxiLEQs''@;'; put 'put ''SCxOLGcpO2Zvcih2YXIgUz0xO1M8ZztTPDw9MSlmb3IodmFyIHY9Uzw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS92KSx3PU1hdGguc2luKDIqTWF0aC5QSS92KSxKPTA7SjxnO0orPXYpZm9yKHZhciBuZT1wLGRlPXcsZmU9MDtmZTxTO2ZlKyspe3ZhciB4ZT1IW0orZmVdLExlPU5bSitmZV0s''@;'; put 'put ''RmU9SFtKK2ZlK1NdLE9lPU5bSitmZStTXSxqZT1uZSpGZS1kZSpPZTtPZT1uZSpPZStkZSpGZSxIW0orZmVdPXhlKyhGZT1qZSksTltKK2ZlXT1MZStPZSxIW0orZmUrU109eGUtRmUsTltKK2ZlK1NdPUxlLU9lLGZlIT09diYmKGplPXAqbmUtdypkZSxkZT1wKmRlK3cqbmUsbmU9amUpfX0s''@;'; put 'put ''VS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oYixEKXt2YXIgSD0xfE1hdGgubWF4KEQsYiksTj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK059LFUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihiLEQsSCl7aWYoIShIPD0xKSlmb3Io''@;'; put 'put ''dmFyIE49MDtOPEgvMjtOKyspe3ZhciBnPWJbTl07YltOXT1iW0gtTi0xXSxiW0gtTi0xXT1nLGc9RFtOXSxEW05dPS1EW0gtTi0xXSxEW0gtTi0xXT0tZ319LFUucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD0wLE49MDtOPEQvMjtOKyspe3ZhciBnPTgx''@;'; put 'put ''OTIqTWF0aC5yb3VuZChiWzIqTisxXS9EKStNYXRoLnJvdW5kKGJbMipOXS9EKStIO2JbTl09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIGJ9LFUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oYixELEgsTil7Zm9yKHZhciBnPTAsQz0wO0M8RDtD''@;'; put 'put ''KyspSFsyKkNdPTgxOTEmKGcrPTB8YltDXSksSFsyKkMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoQz0yKkQ7QzxOOysrQylIW0NdPTA7bSgwPT09ZyksbSgwPT0oLTgxOTImZykpfSxVLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD0w''@;'; put 'put ''O0g8YjtIKyspRFtIXT0wO3JldHVybiBEfSxVLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj0yKnRoaXMuZ3Vlc3NMZW4xM2IoYi5sZW5ndGgsRC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKE4pLEM9dGhpcy5zdHViKE4pLFM9bmV3IEFycmF5KE4pLHY9bmV3IEFycmF5KE4p''@;'; put 'put ''LHA9bmV3IEFycmF5KE4pLHc9bmV3IEFycmF5KE4pLEo9bmV3IEFycmF5KE4pLG5lPW5ldyBBcnJheShOKSxkZT1ILndvcmRzO2RlLmxlbmd0aD1OLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLFMsTiksdGhpcy5jb252ZXJ0MTNiKEQud29yZHMsRC5sZW5ndGgsdyxOKSx0aGlz''@;'; put 'put ''LnRyYW5zZm9ybShTLEMsdixwLE4sZyksdGhpcy50cmFuc2Zvcm0odyxDLEosbmUsTixnKTtmb3IodmFyIGZlPTA7ZmU8TjtmZSsrKXt2YXIgeGU9dltmZV0qSltmZV0tcFtmZV0qbmVbZmVdO3BbZmVdPXZbZmVdKm5lW2ZlXStwW2ZlXSpKW2ZlXSx2W2ZlXT14ZX1yZXR1cm4gdGhpcy5jb25q''@;'; put 'put ''dWdhdGUodixwLE4pLHRoaXMudHJhbnNmb3JtKHYscCxkZSxDLE4sZyksdGhpcy5jb25qdWdhdGUoZGUsQyxOKSx0aGlzLm5vcm1hbGl6ZTEzYihkZSxOKSxILm5lZ2F0aXZlPWIubmVnYXRpdmVeRC5uZWdhdGl2ZSxILmxlbmd0aD1iLmxlbmd0aCtELmxlbmd0aCxILnN0cmlwKCl9LE0ucHJv''@;'; put 'put ''dG90eXBlLm11bD1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLHRoaXMubXVsVG8oYixEKX0sTS5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihiKXt2YXIgRD1uZXcgTShudWxsKTtyZXR1cm4gRC53b3Jk''@;'; put 'put ''cz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrYi5sZW5ndGgpLFgodGhpcyxiLEQpfSxNLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oYix0aGlzKX0sTS5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGIpLG0o''@;'; put 'put ''Yjw2NzEwODg2NCk7Zm9yKHZhciBEPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSpiLGc9KDY3MTA4ODYzJk4pKyg2NzEwODg2MyZEKTtEPj49MjYsRCs9Ti82NzEwODg2NHwwLEQrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJu''@;'; put 'put ''IDAhPT1EJiYodGhpcy53b3Jkc1tIXT1ELHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihiKX0sTS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxNLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYil7dmFyIEQ9ZnVuY3Rpb24gaihHKXtmb3IodmFyIGI9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEQ9MDtEPGIubGVuZ3RoO0QrKyl7dmFyIE49RCUyNjti''@;'; put 'put ''W0RdPShHLndvcmRzW0QvMjZ8MF0mMTw8Tik+Pj5OfXJldHVybiBifShiKTtpZigwPT09RC5sZW5ndGgpcmV0dXJuIG5ldyBNKDEpO2Zvcih2YXIgSD10aGlzLE49MDtOPEQubGVuZ3RoJiYwPT09RFtOXTtOKyssSD1ILnNxcigpKTtpZigrK048RC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7''@;'; put 'put ''TjxELmxlbmd0aDtOKyssZz1nLnNxcigpKTAhPT1EW05dJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LE0ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIGcsRD1iJTI2LEg9KGItRCkvMjYsTj02NzEwODg2Mz4+PjI2LUQ8PDI2LUQ7''@;'; put 'put ''aWYoMCE9PUQpe3ZhciBDPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy53b3Jkc1tnXSZOO3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSktUzw8RHxDLEM9Uz4+PjI2LUR9QyYmKHRoaXMud29yZHNbZ109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9y''@;'; put 'put ''KGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihiKX0sTS5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTjttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCksTj1EPyhELUQlMjYpLzI2OjA7dmFyIGc9YiUyNixDPU1hdGgubWluKChiLWcpLzI2LHRoaXMubGVuZ3RoKSxT''@;'; put 'put ''PTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8Zyx2PUg7aWYoTi09QyxOPU1hdGgubWF4KDAsTiksdil7Zm9yKHZhciBwPTA7cDxDO3ArKyl2LndvcmRzW3BdPXRoaXMud29yZHNbcF07di5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09QyxwPTA7cDx0''@;'; put 'put ''aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT13fHxwPj1OKTtwLS0pe3ZhciBKPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRz''@;'; put 'put ''W3BdPXc8PDI2LWd8Sj4+Pmcsdz1KJlN9cmV0dXJuIHYmJjAhPT13JiYodi53b3Jkc1t2Lmxlbmd0aCsrXT13KSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihiLEQsSCl7cmV0''@;'; put 'put ''dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGIsRCxIKX0sTS5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGIpfSxNLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihiKX0s''@;'; put 'put ''TS5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGIpfSxNLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihiKX0sTS5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMud29yZHNbSF0mMTw8RCkpfSxNLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPWIlMjYsSD0oYi1EKS8yNjty''@;'; put 'put ''ZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUQmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09RCYmKHRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+RDw8RCksdGhpcy5zdHJpcCgpKX0sTS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oYil9LE0ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKGIpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''YiksbShiPDY3MTA4ODY0KSxiPDA/dGhpcy5pc3VibigtYik6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxiPyh0aGlzLndvcmRzWzBdPWItKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcy5pc3VibihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oYil9LE0ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihiKXt0aGlzLndvcmRzWzBdKz1iO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF0+PTY3MTA4ODY0O0QrKyl0aGlzLndvcmRz''@;'; put 'put ''W0RdLT02NzEwODg2NCxEPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0QrMV09MTp0aGlzLndvcmRzW0QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsRCsxKSx0aGlzfSxNLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihiKXtpZihtKCJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgYiksbShiPDY3MTA4ODY0KSxiPDApcmV0dXJuIHRoaXMuaWFkZG4oLWIpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1iLDE9PT10aGlzLmxlbmd0aCYm''@;'; put 'put ''dGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXTwwO0QrKyl0aGlzLndvcmRzW0RdKz02NzEwODg2NCx0aGlzLndvcmRzW0QrMV0tPTE7cmV0dXJuIHRo''@;'; put 'put ''aXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGIpfSxNLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oYil9LE0ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0wLHRoaXN9LE0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxNLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oYixELEgpe3ZhciBnO3RoaXMuX2V4cGFuZChiLmxlbmd0aCtIKTt2YXIgQyxTPTA7Zm9yKGc9''@;'; put 'put ''MDtnPGIubGVuZ3RoO2crKyl7Qz0oMHx0aGlzLndvcmRzW2crSF0pK1M7dmFyIHY9KDB8Yi53b3Jkc1tnXSkqRDtTPSgoQy09NjcxMDg4NjMmdik+PjI2KS0odi82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQ31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspUz0oQz0oMHx0''@;'; put 'put ''aGlzLndvcmRzW2crSF0pK1MpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmQztpZigwPT09UylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09UyksUz0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKylTPShDPS0oMHx0aGlzLndvcmRzW2ddKStTKT4+MjYsdGhpcy53b3Jkc1tnXT02''@;'; put 'put ''NzEwODg2MyZDO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5jbG9uZSgpLGc9YixDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYoZz1n''@;'; put 'put ''LnVzaGxuKEgpLE4uaXVzaGxuKEgpLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCx2PU4ubGVuZ3RoLWcubGVuZ3RoO2lmKCJtb2QiIT09RCl7KHA9bmV3IE0obnVsbCkpLmxlbmd0aD12KzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgdz0wO3c8cC5sZW5ndGg7''@;'; put 'put ''dysrKXAud29yZHNbd109MH12YXIgSj1OLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSx2KTswPT09Si5uZWdhdGl2ZSYmKE49SixwJiYocC53b3Jkc1t2XT0xKSk7Zm9yKHZhciBuZT12LTE7bmU+PTA7bmUtLSl7dmFyIGRlPTY3MTA4ODY0KigwfE4ud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxO''@;'; put 'put ''LndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IoZGU9TWF0aC5taW4oZGUvQ3wwLDY3MTA4ODYzKSxOLl9pc2hsbnN1Ym11bChnLGRlLG5lKTswIT09Ti5uZWdhdGl2ZTspZGUtLSxOLm5lZ2F0aXZlPTAsTi5faXNobG5zdWJtdWwoZywxLG5lKSxOLmlzWmVybygpfHwoTi5uZWdhdGl2ZV49MSk7''@;'; put 'put ''cCYmKHAud29yZHNbbmVdPWRlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLE4uc3RyaXAoKSwiZGl2IiE9PUQmJjAhPT1IJiZOLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOk59fSxNLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKCFiLmlzWmVybygpKSx0aGlzLmlz''@;'; put 'put ''WmVybygpP3tkaXY6bmV3IE0oMCksbW9kOm5ldyBNKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoYixEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZl''@;'; put 'put ''JiZnLmlhZGQoYikpLHtkaXY6Tixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChiLm5lZygpLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLHtkaXY6Tixtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmIubmVnYXRpdmU/KEM9dGhp''@;'; put 'put ''cy5uZWcoKS5kaXZtb2QoYi5uZWcoKSxEKSwiZGl2IiE9PUQmJihnPUMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlzdWIoYikpLHtkaXY6Qy5kaXYsbW9kOmd9KTpiLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoYik8MD97ZGl2Om5ldyBNKDApLG1vZDp0aGlzfToxPT09''@;'; put 'put ''Yi5sZW5ndGg/ImRpdiI9PT1EP3tkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUQ/e2RpdjpudWxsLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNb''@;'; put 'put ''MF0pKX06dGhpcy5fd29yZERpdihiLEQpO3ZhciBOLGcsQ30sTS5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJkaXYiLCExKS5kaXZ9LE0ucHJvdG90eXBlLm1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMSkubW9kfSxN''@;'; put 'put ''LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCEwKS5tb2R9LE0ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuZGl2bW9kKGIpO2lmKEQubW9kLmlzWmVybygpKXJldHVybiBELmRpdjt2YXIgSD0wIT09RC5kaXYu''@;'; put 'put ''bmVnYXRpdmU/RC5tb2QuaXN1YihiKTpELm1vZCxOPWIudXNocm4oMSksZz1iLmFuZGxuKDEpLEM9SC5jbXAoTik7cmV0dXJuIEM8MHx8MT09PWcmJjA9PT1DP0QuZGl2OjAhPT1ELmRpdi5uZWdhdGl2ZT9ELmRpdi5pc3VibigxKTpELmRpdi5pYWRkbigxKX0sTS5wcm90b3R5cGUubW9kbj1m''@;'; put 'put ''dW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFyIEQ9KDE8PDI2KSViLEg9MCxOPXRoaXMubGVuZ3RoLTE7Tj49MDtOLS0pSD0oRCpIKygwfHRoaXMud29yZHNbTl0pKSViO3JldHVybiBIfSxNLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihiKXttKGI8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0KkQ7dGhpcy53b3Jkc1tIXT1OL2J8MCxEPU4lYn1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWRp''@;'; put 'put ''dm4oYil9LE0ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1uZXcg''@;'; put 'put ''TSgwKSxTPW5ldyBNKDEpLHY9MDtELmlzRXZlbigpJiZILmlzRXZlbigpOylELml1c2hybigxKSxILml1c2hybigxKSwrK3Y7Zm9yKHZhciBwPUguY2xvbmUoKSx3PUQuY2xvbmUoKTshRC5pc1plcm8oKTspe2Zvcih2YXIgSj0wLG5lPTE7IShELndvcmRzWzBdJm5lKSYmSjwyNjsrK0osbmU8''@;'; put 'put ''PD0xKTtpZihKPjApZm9yKEQuaXVzaHJuKEopO0otLSA+MDspKE4uaXNPZGQoKXx8Zy5pc09kZCgpKSYmKE4uaWFkZChwKSxnLmlzdWIodykpLE4uaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgZGU9MCxmZT0xOyEoSC53b3Jkc1swXSZmZSkmJmRlPDI2OysrZGUsZmU8PD0xKTtpZihk''@;'; put 'put ''ZT4wKWZvcihILml1c2hybihkZSk7ZGUtLSA+MDspKEMuaXNPZGQoKXx8Uy5pc09kZCgpKSYmKEMuaWFkZChwKSxTLmlzdWIodykpLEMuaXVzaHJuKDEpLFMuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKEMpLGcuaXN1YihTKSk6KEguaXN1YihEKSxDLmlzdWIoTiks''@;'; put 'put ''Uy5pc3ViKGcpKX1yZXR1cm57YTpDLGI6UyxnY2Q6SC5pdXNobG4odil9fSxNLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSksbSghYi5pc1plcm8oKSk7dmFyIEosRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xv''@;'; put 'put ''bmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPUguY2xvbmUoKTtELmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIFM9MCx2PTE7IShELndvcmRzWzBdJnYpJiZTPDI2OysrUyx2PDw9MSk7aWYoUz4wKWZvcihELml1c2hybihTKTtTLS0gPjA7KU4uaXNPZGQoKSYm''@;'; put 'put ''Ti5pYWRkKEMpLE4uaXVzaHJuKDEpO2Zvcih2YXIgcD0wLHc9MTshKEgud29yZHNbMF0mdykmJnA8MjY7KytwLHc8PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoQyksZy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIo''@;'; put 'put ''ZykpOihILmlzdWIoRCksZy5pc3ViKE4pKX1yZXR1cm4oSj0wPT09RC5jbXBuKDEpP046ZykuY21wbigwKTwwJiZKLmlhZGQoYiksSn0sTS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGIpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGIuYWJzKCk7aWYoYi5pc1plcm8oKSlyZXR1cm4gdGhpcy5h''@;'; put 'put ''YnMoKTt2YXIgRD10aGlzLmNsb25lKCksSD1iLmNsb25lKCk7RC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIE49MDtELmlzRXZlbigpJiZILmlzRXZlbigpO04rKylELml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7RC5pc0V2ZW4oKTspRC5pdXNocm4oMSk7Zm9y''@;'; put 'put ''KDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1ELmNtcChIKTtpZihnPDApe3ZhciBDPUQ7RD1ILEg9Q31lbHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oTil9LE0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IHRoaXMuZWdjZChiKS5hLnVtb2QoYil9LE0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmFuZGxuPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiB0aGlzLndvcmRzWzBdJmJ9LE0ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKTt2YXIgRD1iJTI2LEg9KGItRCkvMjYsTj0xPDxEO2lmKHRoaXMubGVuZ3RoPD1IKXJldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRz''@;'; put 'put ''W0hdfD1OLHRoaXM7Zm9yKHZhciBnPU4sQz1IOzAhPT1nJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIFM9MHx0aGlzLndvcmRzW0NdO2c9KFMrPWcpPj4+MjYsdGhpcy53b3Jkc1tDXT1TJj02NzEwODg2M31yZXR1cm4gMCE9PWcmJih0aGlzLndvcmRzW0NdPWcsdGhpcy5sZW5ndGgrKyksdGhp''@;'; put 'put ''c30sTS5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LE0ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oYil7dmFyIEgsRD1iPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFEKXJldHVybi0xO2lmKDA9PT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlJiZEKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle0QmJihiPS1iKSxtKGI8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBOPTB8dGhpcy53b3Jkc1swXTtIPU49PT1iPzA6TjxiPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0''@;'; put 'put ''aXZlPzB8LUg6SH0sTS5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGIpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIDE7dmFyIEQ9dGhpcy51Y21wKGIpO3JldHVybiAwIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8wfC1EOkR9LE0ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oYil7aWYodGhpcy5sZW5ndGg+Yi5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Yi5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0wfHRoaXMu''@;'; put 'put ''d29yZHNbSF0sZz0wfGIud29yZHNbSF07aWYoTiE9PWcpe048Zz9EPS0xOk4+ZyYmKEQ9MSk7YnJlYWt9fXJldHVybiBEfSxNLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhp''@;'; put 'put ''cy5jbXAoYil9LE0ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKT49MH0sTS5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKT49MH0sTS5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXBuKGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5sdD1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik8PTB9LE0ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik8PTB9LE0ucHJvdG90''@;'; put 'put ''eXBlLmVxbj1mdW5jdGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcChiKX0sTS5yZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyB1ZShiKX0sTS5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oYil7cmV0''@;'; put 'put ''dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksbSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxiLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLmZyb21SZWQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxNLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucmVkPWIsdGhp''@;'; put 'put ''c30sTS5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQoYil9LE0ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwi''@;'; put 'put ''cmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhp''@;'; put 'put ''cyxiKX0sTS5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQs''@;'; put 'put ''InJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhp''@;'; put 'put ''cyxiKX0sTS5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5tdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSU11bD1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQuaW11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVk''@;'; put 'put ''U3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp''@;'; put 'put ''LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5zcXJ0KHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sTS5wcm90b3R5cGUucmVkTmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LE0ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCYmIWIu''@;'; put 'put ''cmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGIpfTt2YXIgcT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGVlKEcsYil7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyBNKGIs''@;'; put 'put ''MTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBNKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe2VlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gb2UoKXtlZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHNlKCl7ZWUuY2FsbCh0aGlz''@;'; put 'put ''LCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBoZSgpe2VlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmVkIil9ZnVuY3Rpb24gdWUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgYj1NLl9wcmltZShHKTt0aGlzLm09Yi5wLHRoaXMucHJpbWU9Yn1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5j''@;'; put 'put ''dGlvbiBjZShHKXt1ZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgTSgxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5y''@;'; put 'put ''LnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1lZS5wcm90''@;'; put 'put ''b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksYn0sZWUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oYil7dmFyIEgsRD1iO2Rve3RoaXMuc3BsaXQoRCx0aGlzLnRtcCksSD0oRD0o''@;'; put 'put ''RD10aGlzLmltdWxLKEQpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBOPUg8dGhpcy5uPy0xOkQudWNtcCh0aGlzLnApO3JldHVybiAwPT09Tj8oRC53b3Jkc1swXT0wLEQubGVuZ3RoPTEpOk4+MD9ELmlzdWIodGhpcy5wKTp2b2lkIDAhPT1ELnN0''@;'; put 'put ''cmlwP0Quc3RyaXAoKTpELl9zdHJpcCgpLER9LGVlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2IuaXVzaHJuKHRoaXMubiwwLEQpfSxlZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaW11bCh0aGlzLmspfSxsZSh0ZSxlZSksdGUucHJvdG90eXBlLnNwbGl0''@;'; put 'put ''PWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTQxOTQzMDMsTj1NYXRoLm1pbihiLmxlbmd0aCw5KSxnPTA7ZzxOO2crKylELndvcmRzW2ddPWIud29yZHNbZ107aWYoRC5sZW5ndGg9TixiLmxlbmd0aDw9OSlyZXR1cm4gYi53b3Jkc1swXT0wLHZvaWQoYi5sZW5ndGg9MSk7dmFyIEM9Yi53b3Jk''@;'; put 'put ''c1s5XTtmb3IoRC53b3Jkc1tELmxlbmd0aCsrXT1DJkgsZz0xMDtnPGIubGVuZ3RoO2crKyl7dmFyIFM9MHxiLndvcmRzW2ddO2Iud29yZHNbZy0xMF09KFMmSCk8PDR8Qz4+PjIyLEM9U31iLndvcmRzW2ctMTBdPUM+Pj49MjIsYi5sZW5ndGgtPTA9PT1DJiZiLmxlbmd0aD4xMD8xMDo5fSx0''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oYil7Yi53b3Jkc1tiLmxlbmd0aF09MCxiLndvcmRzW2IubGVuZ3RoKzFdPTAsYi5sZW5ndGgrPTI7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0wfGIud29yZHNbSF07Yi53b3Jkc1tIXT02NzEwODg2MyYoRCs9OTc3Kk4p''@;'; put 'put ''LEQ9NjQqTisoRC82NzEwODg2NHwwKX1yZXR1cm4gMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJihiLmxlbmd0aC0tLDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiZiLmxlbmd0aC0tKSxifSxsZShvZSxlZSksbGUoc2UsZWUpLGxlKGhlLGVlKSxoZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24o''@;'; put 'put ''Yil7Zm9yKHZhciBEPTAsSD0wO0g8Yi5sZW5ndGg7SCsrKXt2YXIgTj0xOSooMHxiLndvcmRzW0hdKStELGc9NjcxMDg4NjMmTjtOPj4+PTI2LGIud29yZHNbSF09ZyxEPU59cmV0dXJuIDAhPT1EJiYoYi53b3Jkc1tiLmxlbmd0aCsrXT1EKSxifSxNLl9wcmltZT1mdW5jdGlvbihiKXtpZihx''@;'; put 'put ''W2JdKXJldHVybiBxW2JdO3ZhciBEO2lmKCJrMjU2Ij09PWIpRD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT1iKUQ9bmV3IG9lO2Vsc2UgaWYoInAxOTIiPT09YilEPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09Yil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitiKTtEPW5ldyBo''@;'; put 'put ''ZX1yZXR1cm4gcVtiXT1ELER9LHVlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLl92ZXJp''@;'; put 'put ''ZnkyPWZ1bmN0aW9uKGIsRCl7bSgwPT0oYi5uZWdhdGl2ZXxELm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkJiZiLnJlZD09PUQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShiKS5fZm9yY2VSZWQodGhpcyk6Yi51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKGIpe3JldHVybiBiLmlzWmVybygpP2IuY2xvbmUoKTp0aGlzLm0uc3ViKGIpLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9u''@;'; put 'put ''KGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaWFkZChEKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLnN1YihEKTtyZXR1cm4gSC5jbXBuKDAp''@;'; put 'put ''PDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlzdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc2hsPWZ1bmN0''@;'; put 'put ''aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoYiksdGhpcy5pbW9kKGIudXNobG4oRCkpfSx1ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIuaW11bChEKSl9LHVlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixE''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLm11bChEKSl9LHVlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltdWwoYixiLmNsb25lKCkpfSx1ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLm11bChiLGIpfSx1ZS5w''@;'; put 'put ''cm90b3R5cGUuc3FydD1mdW5jdGlvbihiKXtpZihiLmlzWmVybygpKXJldHVybiBiLmNsb25lKCk7dmFyIEQ9dGhpcy5tLmFuZGxuKDMpO2lmKG0oRCUyPT0xKSwzPT09RCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgTSgxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhiLEgpfWZvcih2YXIg''@;'; put 'put ''Tj10aGlzLm0uc3VibigxKSxnPTA7IU4uaXNaZXJvKCkmJjA9PT1OLmFuZGxuKDEpOylnKyssTi5pdXNocm4oMSk7bSghTi5pc1plcm8oKSk7dmFyIEM9bmV3IE0oMSkudG9SZWQodGhpcyksUz1DLnJlZE5lZygpLHY9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0''@;'; put 'put ''aCgpO2ZvcihwPW5ldyBNKDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCx2KS5jbXAoUyk7KXAucmVkSUFkZChTKTtmb3IodmFyIHc9dGhpcy5wb3cocCxOKSxKPXRoaXMucG93KGIsTi5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coYixOKSxkZT1nOzAhPT1uZS5jbXAo''@;'; put 'put ''Qyk7KXtmb3IodmFyIGZlPW5lLHhlPTA7MCE9PWZlLmNtcChDKTt4ZSsrKWZlPWZlLnJlZFNxcigpO20oeGU8ZGUpO3ZhciBMZT10aGlzLnBvdyh3LG5ldyBNKDEpLml1c2hsbihkZS14ZS0xKSk7Sj1KLnJlZE11bChMZSksdz1MZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwodyksZGU9eGV9cmV0''@;'; put 'put ''dXJuIEp9LHVlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3ZhciBEPWIuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ELm5lZ2F0aXZlPyhELm5lZ2F0aXZlPTAsdGhpcy5pbW9kKEQpLnJlZE5lZygpKTp0aGlzLmltb2QoRCl9LHVlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oYixEKXtp''@;'; put 'put ''ZihELmlzWmVybygpKXJldHVybiBuZXcgTSgxKS50b1JlZCh0aGlzKTtpZigwPT09RC5jbXBuKDEpKXJldHVybiBiLmNsb25lKCk7dmFyIE49bmV3IEFycmF5KDE2KTtOWzBdPW5ldyBNKDEpLnRvUmVkKHRoaXMpLE5bMV09Yjtmb3IodmFyIGc9MjtnPE4ubGVuZ3RoO2crKylOW2ddPXRoaXMu''@;'; put 'put ''bXVsKE5bZy0xXSxiKTt2YXIgQz1OWzBdLFM9MCx2PTAscD1ELmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9RC5sZW5ndGgtMTtnPj0wO2ctLSl7Zm9yKHZhciB3PUQud29yZHNbZ10sSj1wLTE7Sj49MDtKLS0pe3ZhciBuZT13Pj5KJjE7QyE9PU5bMF0mJihDPXRoaXMuc3Fy''@;'; put 'put ''KEMpKSwwIT09bmV8fDAhPT1TPyhTPDw9MSxTfD1uZSwoND09Kyt2fHwwPT09ZyYmMD09PUopJiYoQz10aGlzLm11bChDLE5bU10pLHY9MCxTPTApKTp2PTB9cD0yNn1yZXR1cm4gQ30sdWUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXt2YXIgRD1iLnVtb2QodGhpcy5tKTtyZXR1''@;'; put 'put ''cm4gRD09PWI/RC5jbG9uZSgpOkR9LHVlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD1iLmNsb25lKCk7cmV0dXJuIEQucmVkPW51bGwsRH0sTS5tb250PWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgY2UoYil9LGxlKGNlLHVlKSxjZS5wcm90b3R5cGUuY29udmVydFRv''@;'; put 'put ''PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmltb2QoYi5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEQucmVkPW51bGwsRH0sY2UucHJvdG90eXBlLmltdWw9ZnVu''@;'; put 'put ''Y3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSxiO3ZhciBIPWIuaW11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4p''@;'; put 'put ''Lml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gbmV3IE0oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPWIubXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4g''@;'; put 'put ''Zy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmltb2QoYi5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX19KGF0PUYubm1kKGF0KSx0aGlzKX0sNzA4OTY6ZnVuY3Rpb24oYXQpe2F0LmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSWUoTWUpe3JldHVybihJZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJv''@;'; put 'put ''bC5pdGVyYXRvcj9mdW5jdGlvbihEZSl7cmV0dXJuIHR5cGVvZiBEZX06ZnVuY3Rpb24oRGUpe3JldHVybiBEZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmRGUuY29uc3RydWN0b3I9PT1TeW1ib2wmJkRlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgRGV9KShNZSl9''@;'; put 'put ''ZnVuY3Rpb24gRihNZSxEZSl7cmV0dXJuKEY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihpdCx1dCl7cmV0dXJuIGl0Ll9fcHJvdG9fXz11dCxpdH0pKE1lLERlKX1mdW5jdGlvbiB4KE1lLERlLHplKXtyZXR1cm4oeD1mdW5jdGlvbiBhZSgpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1''@;'; put 'put ''Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1''@;'; put 'put ''bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKT9SZWZsZWN0LmNvbnN0cnVjdDpmdW5jdGlvbih1dCxNdCxIdCl7dmFyIFB0PVtudWxsXTtQdC5wdXNoLmFwcGx5KFB0LE10KTt2YXIgQ249bmV3KEZ1bmN0aW9uLmJpbmQuYXBwbHkodXQsUHQpKTtyZXR1cm4gSHQmJkYoQ24sSHQu''@;'; put 'put ''cHJvdG90eXBlKSxDbn0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBtKE1lKXtyZXR1cm4gZnVuY3Rpb24gbGUoTWUpe2lmKEFycmF5LmlzQXJyYXkoTWUpKXJldHVybiBSKE1lKX0oTWUpfHxmdW5jdGlvbiBNKE1lKXtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9TWVbU3lt''@;'; put 'put ''Ym9sLml0ZXJhdG9yXXx8bnVsbCE9TWVbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbShNZSl9KE1lKXx8ZnVuY3Rpb24gTyhNZSxEZSl7aWYoTWUpe2lmKCJzdHJpbmciPT10eXBlb2YgTWUpcmV0dXJuIFIoTWUsRGUpO3ZhciB6ZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNh''@;'; put 'put ''bGwoTWUpLnNsaWNlKDgsLTEpO2lmKCJPYmplY3QiPT09emUmJk1lLmNvbnN0cnVjdG9yJiYoemU9TWUuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT16ZXx8IlNldCI9PT16ZSlyZXR1cm4gQXJyYXkuZnJvbShNZSk7aWYoIkFyZ3VtZW50cyI9PT16ZXx8L14oPzpVaXxJKW50KD86OHwxNnwz''@;'; put 'put ''MikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QoemUpKXJldHVybiBSKE1lLERlKX19KE1lKXx8ZnVuY3Rpb24geigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5v''@;'; put 'put ''bi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpfSgpfWZ1bmN0aW9uIFIoTWUsRGUpeyhudWxsPT1EZXx8RGU+TWUubGVuZ3RoKSYmKERlPU1lLmxlbmd0aCk7Zm9yKHZhciB6ZT0wLGl0PW5ldyBBcnJheShEZSk7emU8RGU7emUrKylpdFt6''@;'; put 'put ''ZV09TWVbemVdO3JldHVybiBpdH12YXIgSz1PYmplY3QuaGFzT3duUHJvcGVydHksST1PYmplY3Quc2V0UHJvdG90eXBlT2Ysaz1PYmplY3QuaXNGcm96ZW4sRT1PYmplY3QuZ2V0UHJvdG90eXBlT2Ysaj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFY9T2JqZWN0LmZyZWV6ZSxC''@;'; put 'put ''PU9iamVjdC5zZWFsLFk9T2JqZWN0LmNyZWF0ZSxYPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdCxVPVguYXBwbHkscT1YLmNvbnN0cnVjdDtVfHwoVT1mdW5jdGlvbihEZSx6ZSxpdCl7cmV0dXJuIERlLmFwcGx5KHplLGl0KX0pLFZ8fChWPWZ1bmN0aW9uKERlKXtyZXR1cm4gRGV9KSxC''@;'; put 'put ''fHwoQj1mdW5jdGlvbihEZSl7cmV0dXJuIERlfSkscXx8KHE9ZnVuY3Rpb24oRGUsemUpe3JldHVybiB4KERlLG0oemUpKX0pO3ZhciBlZT1OKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSx0ZT1OKEFycmF5LnByb3RvdHlwZS5wb3ApLG9lPU4oQXJyYXkucHJvdG90eXBlLnB1c2gpLHNlPU4o''@;'; put 'put ''U3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksaGU9TihTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSx1ZT1OKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLGNlPU4oU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxHPU4oU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSxiPU4oU3RyaW5nLnBy''@;'; put 'put ''b3RvdHlwZS50cmltKSxEPU4oUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxIPWZ1bmN0aW9uIGcoTWUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgRGU9YXJndW1lbnRzLmxlbmd0aCx6ZT1uZXcgQXJyYXkoRGUpLGl0PTA7aXQ8RGU7aXQrKyl6ZVtpdF09YXJndW1lbnRzW2l0XTtyZXR1cm4g''@;'; put 'put ''cShNZSx6ZSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIE4oTWUpe3JldHVybiBmdW5jdGlvbihEZSl7Zm9yKHZhciB6ZT1hcmd1bWVudHMubGVuZ3RoLGl0PW5ldyBBcnJheSh6ZT4xP3plLTE6MCksdXQ9MTt1dDx6ZTt1dCsrKWl0W3V0LTFdPWFyZ3VtZW50c1t1dF07cmV0dXJuIFUoTWUsRGUs''@;'; put 'put ''aXQpfX1mdW5jdGlvbiBDKE1lLERlLHplKXt2YXIgaXQ7emU9bnVsbCE9PShpdD16ZSkmJnZvaWQgMCE9PWl0P2l0OnNlLEkmJkkoTWUsbnVsbCk7Zm9yKHZhciB1dD1EZS5sZW5ndGg7dXQtLTspe3ZhciBNdD1EZVt1dF07aWYoInN0cmluZyI9PXR5cGVvZiBNdCl7dmFyIEh0PXplKE10KTtI''@;'; put 'put ''dCE9PU10JiYoayhEZSl8fChEZVt1dF09SHQpLE10PUh0KX1NZVtNdF09ITB9cmV0dXJuIE1lfWZ1bmN0aW9uIFMoTWUpe3ZhciB6ZSxEZT1ZKG51bGwpO2Zvcih6ZSBpbiBNZSkhMD09PVUoSyxNZSxbemVdKSYmKERlW3plXT1NZVt6ZV0pO3JldHVybiBEZX1mdW5jdGlvbiB2KE1lLERlKXtm''@;'; put 'put ''b3IoO251bGwhPT1NZTspe3ZhciB6ZT1qKE1lLERlKTtpZih6ZSl7aWYoemUuZ2V0KXJldHVybiBOKHplLmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHplLnZhbHVlKXJldHVybiBOKHplLnZhbHVlKX1NZT1FKE1lKX1yZXR1cm4gZnVuY3Rpb24gaXQodXQpe3JldHVybiBjb25zb2xlLndh''@;'; put 'put ''cm4oImZhbGxiYWNrIHZhbHVlIGZvciIsdXQpLG51bGx9fXZhciBwPVYoWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1''@;'; put 'put ''dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIsImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJl''@;'; put 'put ''bGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQi''@;'; put 'put ''LCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAi''@;'; put 'put ''LCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2UiLCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIs''@;'; put 'put ''InRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLHc9VihbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0''@;'; put 'put ''ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNr''@;'; put 'put ''IiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwi''@;'; put 'put ''dmtlcm4iXSksSj1WKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVGbG9vZCIsImZl''@;'; put 'put ''RnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0Iiwi''@;'; put 'put ''ZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLG5lPVYoWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJmb250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNl''@;'; put 'put ''LXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2luZy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLGRlPVYoWyJtYXRoIiwibWVu''@;'; put 'put ''Y2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVyIiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1z''@;'; put 'put ''dWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciJdKSxmZT1WKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3Rh''@;'; put 'put ''Y2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSx4ZT1WKFsiI3RleHQiXSksTGU9VihbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29t''@;'; put 'put ''cGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNw''@;'; put 'put ''YW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJkaXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJk''@;'; put 'put ''cmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhyZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0''@;'; put 'put ''IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0ZWQiLCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5vd3JhcCIsIm9wZW4iLCJvcHRpbXVtIiwicGF0''@;'; put 'put ''dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3N0ZXIiLCJwcmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJlbCIsInJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUi''@;'; put 'put ''LCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic3BhbiIsInNyY2xhbmciLCJzdGFydCIsInNyYyIsInNyY3NldCIsInN0ZXAiLCJzdHlsZSIsInN1bW1hcnkiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIiwidHlwZSIsInVzZW1hcCIsInZhbGlnbiIsInZhbHVlIiwi''@;'; put 'put ''d2lkdGgiLCJ4bWxucyIsInNsb3QiXSksRmU9VihbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxp''@;'; put 'put ''bmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29s''@;'; put 'put ''b3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIi''@;'; put 'put ''LCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcy''@;'; put 'put ''IiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3Bs''@;'; put 'put ''aW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhl''@;'; put 'put ''aWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIi''@;'; put 'put ''LCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNl''@;'; put 'put ''cnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxh''@;'; put 'put ''cmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9wLWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxp''@;'; put 'put ''bmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUiLCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zv''@;'; put 'put ''cm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15''@;'; put 'put ''IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5k''@;'; put 'put ''cGFuIl0pLE9lPVYoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGlu''@;'; put 'put ''ZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXpl''@;'; put 'put ''IiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJz''@;'; put 'put ''ZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksamU9VihbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInht''@;'; put 'put ''bDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLFdlPUIoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxLZT1CKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxZZT1CKC9cJHtbXHdcV10qfS9nbSksSmU9QigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxsdD1CKC9eYXJpYS1bXC1cd10r''@;'; put 'put ''JC8pLFBlPUIoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxiZT1CKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxBZT1CKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgw''@;'; put 'put ''RVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFRlPUIoL15odG1sJC9pKTtyZXR1cm4gZnVuY3Rpb24gVWUoKXt2YXIgTWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LERlPWZ1''@;'; put 'put ''bmN0aW9uKFluKXtyZXR1cm4gVWUoWW4pfTtpZihEZS52ZXJzaW9uPSIyLjQuNyIsRGUucmVtb3ZlZD1bXSwhTWV8fCFNZS5kb2N1bWVudHx8OSE9PU1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBEZS5pc1N1cHBvcnRlZD0hMSxEZTt2YXIgemU9TWUuZG9jdW1lbnQsaXQ9TWUuZG9jdW1l''@;'; put 'put ''bnQsdXQ9TWUuRG9jdW1lbnRGcmFnbWVudCxNdD1NZS5IVE1MVGVtcGxhdGVFbGVtZW50LEh0PU1lLk5vZGUsUHQ9TWUuRWxlbWVudCxvbj1NZS5Ob2RlRmlsdGVyLENuPU1lLk5hbWVkTm9kZU1hcCxVdD12b2lkIDA9PT1Dbj9NZS5OYW1lZE5vZGVNYXB8fE1lLk1vek5hbWVkQXR0ck1hcDpD''@;'; put 'put ''bixibj1NZS5IVE1MRm9ybUVsZW1lbnQsV249TWUuRE9NUGFyc2VyLGVuPU1lLnRydXN0ZWRUeXBlcywkbj1QdC5wcm90b3R5cGUsSG49digkbiwiY2xvbmVOb2RlIiksZnQ9digkbiwibmV4dFNpYmxpbmciKSxmbj12KCRuLCJjaGlsZE5vZGVzIiksaG49digkbiwicGFyZW50Tm9kZSIpO2lm''@;'; put 'put ''KCJmdW5jdGlvbiI9PXR5cGVvZiBNdCl7dmFyIHd0PWl0LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7d3QuY29udGVudCYmd3QuY29udGVudC5vd25lckRvY3VtZW50JiYoaXQ9d3QuY29udGVudC5vd25lckRvY3VtZW50KX12YXIgWHQ9ZnVuY3Rpb24oRGUsemUpe2lmKCJvYmplY3QiIT09''@;'; put 'put ''SWUoRGUpfHwiZnVuY3Rpb24iIT10eXBlb2YgRGUuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO3ZhciBpdD1udWxsLHV0PSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO3plLmN1cnJlbnRTY3JpcHQmJnplLmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKHV0KSYmKGl0PXplLmN1cnJlbnRTY3Jp''@;'; put 'put ''cHQuZ2V0QXR0cmlidXRlKHV0KSk7dmFyIE10PSJkb21wdXJpZnkiKyhpdD8iIyIraXQ6IiIpO3RyeXtyZXR1cm4gRGUuY3JlYXRlUG9saWN5KE10LHtjcmVhdGVIVE1MOmZ1bmN0aW9uKFB0KXtyZXR1cm4gUHR9LGNyZWF0ZVNjcmlwdFVSTDpmdW5jdGlvbihQdCl7cmV0dXJuIFB0fX0pfWNh''@;'; put 'put ''dGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitNdCsiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShlbix6ZSksX3Q9WHQ/WHQuY3JlYXRlSFRNTCgiIik6IiIsbW49aXQuaW1wbGVtZW50YXRpb24scnQ9aXQuY3JlYXRlTm9kZUl0ZXJhdG9yLEl0''@;'; put 'put ''PWl0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsSnQ9aXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUsRHQ9emUuaW1wb3J0Tm9kZSxwdD17fTt0cnl7cHQ9UyhpdCkuZG9jdW1lbnRNb2RlP2l0LmRvY3VtZW50TW9kZTp7fX1jYXRjaHt9dmFyIFl0PXt9O0RlLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBobiYmbW4mJnZvaWQgMCE9PW1uLmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PXB0O3ZhciBlYSwkYSxJbj1XZSx6dD1LZSx5bj1ZZSx4bj1KZSxzbj1sdCxCbj1iZSxSbj1BZSwkdD1QZSxQbj1udWxsLG5pPUMoe30sW10uY29uY2F0KG0ocCksbSh3KSxtKEopLG0oZGUpLG0oeGUp''@;'; put 'put ''KSksbG49bnVsbCxqbj1DKHt9LFtdLmNvbmNhdChtKExlKSxtKEZlKSxtKE9lKSxtKGplKSkpLHFyPU9iamVjdC5zZWFsKE9iamVjdC5jcmVhdGUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1''@;'; put 'put ''dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLGdpPW51bGwseHI9''@;'; put 'put ''bnVsbCxVaT0hMCxLcj0hMCxubz0hMSxIcj0hMCxxaT0hMSxKaT0hMSxhbz0hMSxybz0hMSxpbz0hMSxHaT0hMSxobz0hMSx5cj0hMCxQaT0hMSxocz0hMCxycz0hMSxMYz17fSx1bD1udWxsLFJjPUMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9y''@;'; put 'put ''ZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIs''@;'; put 'put ''InhtcCJdKSxOMD1udWxsLHMzPUMoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwic291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxrMj1udWxsLGUwPUMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1''@;'; put 'put ''bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSx4dT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsZnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixQYT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsU3I9UGEsQTI9ITEsYTM9bnVs''@;'; put 'put ''bCxQaD1DKHt9LFt4dSxmcyxQYV0saGUpLGlzPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl0sdDA9bnVsbCxTYT1pdC5jcmVhdGVFbGVtZW50KCJmb3JtIiksRmg9ZnVuY3Rpb24oWW4pe3JldHVybiBZbiBpbnN0YW5jZW9mIFJlZ0V4cHx8WW4gaW5zdGFuY2VvZiBGdW5j''@;'; put 'put ''dGlvbn0sRXU9ZnVuY3Rpb24oWW4pe3QwJiZ0MD09PVlufHwoKCFZbnx8Im9iamVjdCIhPT1JZShZbikpJiYoWW49e30pLFluPVMoWW4pLGVhPWVhPS0xPT09aXMuaW5kZXhPZihZbi5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6WW4uUEFSU0VSX01FRElBX1RZUEUsJGE9ImFwcGxp''@;'; put 'put ''Y2F0aW9uL3hodG1sK3htbCI9PT1lYT9oZTpzZSxQbj0iQUxMT1dFRF9UQUdTImluIFluP0Moe30sWW4uQUxMT1dFRF9UQUdTLCRhKTpuaSxsbj0iQUxMT1dFRF9BVFRSImluIFluP0Moe30sWW4uQUxMT1dFRF9BVFRSLCRhKTpqbixhMz0iQUxMT1dFRF9OQU1FU1BBQ0VTImluIFluP0Moe30s''@;'; put 'put ''WW4uQUxMT1dFRF9OQU1FU1BBQ0VTLGhlKTpQaCxrMj0iQUREX1VSSV9TQUZFX0FUVFIiaW4gWW4/QyhTKGUwKSxZbi5BRERfVVJJX1NBRkVfQVRUUiwkYSk6ZTAsTjA9IkFERF9EQVRBX1VSSV9UQUdTImluIFluP0MoUyhzMyksWW4uQUREX0RBVEFfVVJJX1RBR1MsJGEpOnMzLHVsPSJGT1JC''@;'; put 'put ''SURfQ09OVEVOVFMiaW4gWW4/Qyh7fSxZbi5GT1JCSURfQ09OVEVOVFMsJGEpOlJjLGdpPSJGT1JCSURfVEFHUyJpbiBZbj9DKHt9LFluLkZPUkJJRF9UQUdTLCRhKTp7fSx4cj0iRk9SQklEX0FUVFIiaW4gWW4/Qyh7fSxZbi5GT1JCSURfQVRUUiwkYSk6e30sTGM9IlVTRV9QUk9GSUxFUyJp''@;'; put 'put ''biBZbiYmWW4uVVNFX1BST0ZJTEVTLFVpPSExIT09WW4uQUxMT1dfQVJJQV9BVFRSLEtyPSExIT09WW4uQUxMT1dfREFUQV9BVFRSLG5vPVluLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxIcj0hMSE9PVluLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUixxaT1Zbi5TQUZFX0ZPUl9URU1Q''@;'; put 'put ''TEFURVN8fCExLEppPVluLldIT0xFX0RPQ1VNRU5UfHwhMSxpbz1Zbi5SRVRVUk5fRE9NfHwhMSxHaT1Zbi5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxobz1Zbi5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxybz1Zbi5GT1JDRV9CT0RZfHwhMSx5cj0hMSE9PVluLlNBTklUSVpFX0RPTSxQaT1Z''@;'; put 'put ''bi5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsaHM9ITEhPT1Zbi5LRUVQX0NPTlRFTlQscnM9WW4uSU5fUExBQ0V8fCExLCR0PVluLkFMTE9XRURfVVJJX1JFR0VYUHx8JHQsU3I9WW4uTkFNRVNQQUNFfHxQYSxxcj1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElOR3x8e30sWW4uQ1VTVE9NX0VM''@;'; put 'put ''RU1FTlRfSEFORExJTkcmJkZoKFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJihxci50YWdOYW1lQ2hlY2s9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSxZbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmRmgoWW4uQ1VTVE9NX0VMRU1F''@;'; put 'put ''TlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSYmKHFyLmF0dHJpYnV0ZU5hbWVDaGVjaz1Zbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLFluLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiBZbi5DVVNUT01fRUxFTUVO''@;'; put 'put ''VF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMmJihxci5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9WW4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSxxaSYmKEtyPSExKSxHaSYmKGlvPSEwKSxMYyYm''@;'; put 'put ''KFBuPUMoe30sbSh4ZSkpLGxuPVtdLCEwPT09TGMuaHRtbCYmKEMoUG4scCksQyhsbixMZSkpLCEwPT09TGMuc3ZnJiYoQyhQbix3KSxDKGxuLEZlKSxDKGxuLGplKSksITA9PT1MYy5zdmdGaWx0ZXJzJiYoQyhQbixKKSxDKGxuLEZlKSxDKGxuLGplKSksITA9PT1MYy5tYXRoTWwmJihDKFBu''@;'; put 'put ''LGRlKSxDKGxuLE9lKSxDKGxuLGplKSkpLFluLkFERF9UQUdTJiYoUG49PT1uaSYmKFBuPVMoUG4pKSxDKFBuLFluLkFERF9UQUdTLCRhKSksWW4uQUREX0FUVFImJihsbj09PWpuJiYobG49UyhsbikpLEMobG4sWW4uQUREX0FUVFIsJGEpKSxZbi5BRERfVVJJX1NBRkVfQVRUUiYmQyhrMixZ''@;'; put 'put ''bi5BRERfVVJJX1NBRkVfQVRUUiwkYSksWW4uRk9SQklEX0NPTlRFTlRTJiYodWw9PT1SYyYmKHVsPVModWwpKSxDKHVsLFluLkZPUkJJRF9DT05URU5UUywkYSkpLGhzJiYoUG5bIiN0ZXh0Il09ITApLEppJiZDKFBuLFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLFBuLnRhYmxlJiYoQyhQbixb''@;'; put 'put ''InRib2R5Il0pLGRlbGV0ZSBnaS50Ym9keSksViYmVihZbiksdDA9WW4pfSxBcz1DKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxuMD1DKHt9LFsiZm9yZWlnbm9iamVjdCIsImRlc2MiLCJ0aXRsZSIsImFubm90YXRpb24teG1sIl0pLHFhPUMoe30sWyJ0aXRsZSIsInN0eWxl''@;'; put 'put ''IiwiZm9udCIsImEiLCJzY3JpcHQiXSksdmM9Qyh7fSx3KTtDKHZjLEopLEModmMsbmUpO3ZhciBIaD1DKHt9LGRlKTtDKEhoLGZlKTt2YXIgYm89ZnVuY3Rpb24oWW4pe29lKERlLnJlbW92ZWQse2VsZW1lbnQ6WW59KTt0cnl7WW4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChZbil9Y2F0Y2h7''@;'; put 'put ''dHJ5e1luLm91dGVySFRNTD1fdH1jYXRjaHtZbi5yZW1vdmUoKX19fSxyMD1mdW5jdGlvbihZbixiaSl7dHJ5e29lKERlLnJlbW92ZWQse2F0dHJpYnV0ZTpiaS5nZXRBdHRyaWJ1dGVOb2RlKFluKSxmcm9tOmJpfSl9Y2F0Y2h7b2UoRGUucmVtb3ZlZCx7YXR0cmlidXRlOm51bGwsZnJvbTpi''@;'; put 'put ''aX0pfWlmKGJpLnJlbW92ZUF0dHJpYnV0ZShZbiksImlzIj09PVluJiYhbG5bWW5dKWlmKGlvfHxHaSl0cnl7Ym8oYmkpfWNhdGNoe31lbHNlIHRyeXtiaS5zZXRBdHRyaWJ1dGUoWW4sIiIpfWNhdGNoe319LFQyPWZ1bmN0aW9uKFluKXt2YXIgYmkseWk7aWYocm8pWW49IjxyZW1vdmU+PC9y''@;'; put 'put ''ZW1vdmU+IitZbjtlbHNle3ZhciBvcz11ZShZbiwvXltcclxuXHQgXSsvKTt5aT1vcyYmb3NbMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1lYSYmU3I9PT1QYSYmKFluPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5Picr''@;'; put 'put ''WW4rIjwvYm9keT48L2h0bWw+Iik7dmFyIEZhPVh0P1h0LmNyZWF0ZUhUTUwoWW4pOlluO2lmKFNyPT09UGEpdHJ5e2JpPShuZXcgV24pLnBhcnNlRnJvbVN0cmluZyhGYSxlYSl9Y2F0Y2h7fWlmKCFiaXx8IWJpLmRvY3VtZW50RWxlbWVudCl7Ymk9bW4uY3JlYXRlRG9jdW1lbnQoU3IsInRl''@;'; put 'put ''bXBsYXRlIixudWxsKTt0cnl7YmkuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTD1BMj9fdDpGYX1jYXRjaHt9fXZhciBIYT1iaS5ib2R5fHxiaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIFluJiZ5aSYmSGEuaW5zZXJ0QmVmb3JlKGl0LmNyZWF0ZVRleHROb2RlKHlpKSxIYS5jaGlsZE5vZGVz''@;'; put 'put ''WzBdfHxudWxsKSxTcj09PVBhP0p0LmNhbGwoYmksSmk/Imh0bWwiOiJib2R5IilbMF06Smk/YmkuZG9jdW1lbnRFbGVtZW50OkhhfSxEMj1mdW5jdGlvbihZbil7cmV0dXJuIHJ0LmNhbGwoWW4ub3duZXJEb2N1bWVudHx8WW4sWW4sb24uU0hPV19FTEVNRU5UfG9uLlNIT1dfQ09NTUVOVHxv''@;'; put 'put ''bi5TSE9XX1RFWFQsbnVsbCwhMSl9LEFyPWZ1bmN0aW9uKFluKXtyZXR1cm4ib2JqZWN0Ij09PUllKEh0KT9ZbiBpbnN0YW5jZW9mIEh0OlluJiYib2JqZWN0Ij09PUllKFluKSYmIm51bWJlciI9PXR5cGVvZiBZbi5ub2RlVHlwZSYmInN0cmluZyI9PXR5cGVvZiBZbi5ub2RlTmFtZX0sX2M9''@;'; put 'put ''ZnVuY3Rpb24oWW4sYmkseWkpe1l0W1luXSYmZWUoWXRbWW5dLGZ1bmN0aW9uKG9zKXtvcy5jYWxsKERlLGJpLHlpLHQwKX0pfSxrbz1mdW5jdGlvbihZbil7dmFyIGJpO2lmKF9jKCJiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzIixZbixudWxsKSxmdW5jdGlvbihZbil7cmV0dXJuIFluIGluc3Rh''@;'; put 'put ''bmNlb2YgYm4mJigic3RyaW5nIiE9dHlwZW9mIFluLm5vZGVOYW1lfHwic3RyaW5nIiE9dHlwZW9mIFluLnRleHRDb250ZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgWW4ucmVtb3ZlQ2hpbGR8fCEoWW4uYXR0cmlidXRlcyBpbnN0YW5jZW9mIFV0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLnJl''@;'; put 'put ''bW92ZUF0dHJpYnV0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFluLnNldEF0dHJpYnV0ZXx8InN0cmluZyIhPXR5cGVvZiBZbi5uYW1lc3BhY2VVUkl8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5pbnNlcnRCZWZvcmV8fCJmdW5jdGlvbiIhPXR5cGVvZiBZbi5oYXNDaGlsZE5vZGVzKX0oWW4pfHxE''@;'; put 'put ''KC9bXHUwMDgwLVx1RkZGRl0vLFluLm5vZGVOYW1lKSlyZXR1cm4gYm8oWW4pLCEwO3ZhciB5aT0kYShZbi5ub2RlTmFtZSk7aWYoX2MoInVwb25TYW5pdGl6ZUVsZW1lbnQiLFluLHt0YWdOYW1lOnlpLGFsbG93ZWRUYWdzOlBufSksWW4uaGFzQ2hpbGROb2RlcygpJiYhQXIoWW4uZmlyc3RF''@;'; put 'put ''bGVtZW50Q2hpbGQpJiYoIUFyKFluLmNvbnRlbnQpfHwhQXIoWW4uY29udGVudC5maXJzdEVsZW1lbnRDaGlsZCkpJiZEKC88Wy9cd10vZyxZbi5pbm5lckhUTUwpJiZEKC88Wy9cd10vZyxZbi50ZXh0Q29udGVudCl8fCJzZWxlY3QiPT09eWkmJkQoLzx0ZW1wbGF0ZS9pLFluLmlubmVySFRN''@;'; put 'put ''TCkpcmV0dXJuIGJvKFluKSwhMDtpZighUG5beWldfHxnaVt5aV0pe2lmKCFnaVt5aV0mJm8wKHlpKSYmKHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2sseWkpfHxxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFt''@;'; put 'put ''ZUNoZWNrKHlpKSkpcmV0dXJuITE7aWYoaHMmJiF1bFt5aV0pe3ZhciBvcz1obihZbil8fFluLnBhcmVudE5vZGUsRmE9Zm4oWW4pfHxZbi5jaGlsZE5vZGVzO2lmKEZhJiZvcylmb3IodmFyICRvPUZhLmxlbmd0aC0xOyRvPj0wOy0tJG8pb3MuaW5zZXJ0QmVmb3JlKEhuKEZhWyRvXSwhMCks''@;'; put 'put ''ZnQoWW4pKX1yZXR1cm4gYm8oWW4pLCEwfXJldHVybiBZbiBpbnN0YW5jZW9mIFB0JiYhZnVuY3Rpb24oWW4pe3ZhciBiaT1obihZbik7KCFiaXx8IWJpLnRhZ05hbWUpJiYoYmk9e25hbWVzcGFjZVVSSTpTcix0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTt2YXIgeWk9c2UoWW4udGFnTmFtZSksb3M9''@;'; put 'put ''c2UoYmkudGFnTmFtZSk7cmV0dXJuISFhM1tZbi5uYW1lc3BhY2VVUkldJiYoWW4ubmFtZXNwYWNlVVJJPT09ZnM/YmkubmFtZXNwYWNlVVJJPT09UGE/InN2ZyI9PT15aTpiaS5uYW1lc3BhY2VVUkk9PT14dT8ic3ZnIj09PXlpJiYoImFubm90YXRpb24teG1sIj09PW9zfHxBc1tvc10pOiEh''@;'; put 'put ''dmNbeWldOlluLm5hbWVzcGFjZVVSST09PXh1P2JpLm5hbWVzcGFjZVVSST09PVBhPyJtYXRoIj09PXlpOmJpLm5hbWVzcGFjZVVSST09PWZzPyJtYXRoIj09PXlpJiZuMFtvc106ISFIaFt5aV06WW4ubmFtZXNwYWNlVVJJPT09UGE/IShiaS5uYW1lc3BhY2VVUkk9PT1mcyYmIW4wW29zXXx8''@;'; put 'put ''YmkubmFtZXNwYWNlVVJJPT09eHUmJiFBc1tvc10pJiYhSGhbeWldJiYocWFbeWldfHwhdmNbeWldKTohKCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIT09ZWF8fCFhM1tZbi5uYW1lc3BhY2VVUkldKSl9KFluKXx8KCJub3NjcmlwdCI9PT15aXx8Im5vZW1iZWQiPT09eWl8fCJub2ZyYW1lcyI9''@;'; put 'put ''PT15aSkmJkQoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksWW4uaW5uZXJIVE1MKT8oYm8oWW4pLCEwKToocWkmJjM9PT1Zbi5ub2RlVHlwZSYmKGJpPWNlKGJpPVluLnRleHRDb250ZW50LEluLCIgIiksYmk9Y2UoYmksenQsIiAiKSxiaT1jZShiaSx5biwiICIpLFluLnRleHRDb250''@;'; put 'put ''ZW50IT09YmkmJihvZShEZS5yZW1vdmVkLHtlbGVtZW50OlluLmNsb25lTm9kZSgpfSksWW4udGV4dENvbnRlbnQ9YmkpKSxfYygiYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzIixZbixudWxsKSwhMSl9LENzPWZ1bmN0aW9uKFluLGJpLHlpKXtpZih5ciYmKCJpZCI9PT1iaXx8Im5hbWUiPT09Ymkp''@;'; put 'put ''JiYoeWkgaW4gaXR8fHlpIGluIFNhKSlyZXR1cm4hMTtpZigoIUtyfHx4cltiaV18fCFEKHhuLGJpKSkmJighVWl8fCFEKHNuLGJpKSkpaWYoIWxuW2JpXXx8eHJbYmldKXtpZighKG8wKFluKSYmKHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2ss''@;'; put 'put ''WW4pfHxxci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFtZUNoZWNrKFluKSkmJihxci5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJkQocXIuYXR0cmlidXRlTmFtZUNoZWNrLGJpKXx8cXIuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNl''@;'; put 'put ''b2YgRnVuY3Rpb24mJnFyLmF0dHJpYnV0ZU5hbWVDaGVjayhiaSkpfHwiaXMiPT09YmkmJnFyLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKHFyLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmRChxci50YWdOYW1lQ2hlY2sseWkpfHxxci50YWdOYW1lQ2hlY2sgaW5z''@;'; put 'put ''dGFuY2VvZiBGdW5jdGlvbiYmcXIudGFnTmFtZUNoZWNrKHlpKSkpKXJldHVybiExfWVsc2UgaWYoIWsyW2JpXSYmIUQoJHQsY2UoeWksUm4sIiIpKSYmKCJzcmMiIT09YmkmJiJ4bGluazpocmVmIiE9PWJpJiYiaHJlZiIhPT1iaXx8InNjcmlwdCI9PT1Zbnx8MCE9PUcoeWksImRhdGE6Iil8''@;'; put 'put ''fCFOMFtZbl0pJiYoIW5vfHxEKEJuLGNlKHlpLFJuLCIiKSkpJiZ5aSlyZXR1cm4hMTtyZXR1cm4hMH0sbzA9ZnVuY3Rpb24oWW4pe3JldHVybiBZbi5pbmRleE9mKCItIik+MH0sSTI9ZnVuY3Rpb24oWW4pe3ZhciBiaSx5aSxvcyxGYTtfYygiYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzIixZ''@;'; put 'put ''bixudWxsKTt2YXIgSGE9WW4uYXR0cmlidXRlcztpZihIYSl7dmFyICRvPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6bG59O2ZvcihGYT1IYS5sZW5ndGg7RmEtLTspe3ZhciBEYT0oYmk9SGFbRmFdKS5uYW1lLFZoPWJpLm5hbWVzcGFj''@;'; put 'put ''ZVVSSTtpZih5aT0idmFsdWUiPT09RGE/YmkudmFsdWU6YihiaS52YWx1ZSksb3M9JGEoRGEpLCRvLmF0dHJOYW1lPW9zLCRvLmF0dHJWYWx1ZT15aSwkby5rZWVwQXR0cj0hMCwkby5mb3JjZUtlZXBBdHRyPXZvaWQgMCxfYygidXBvblNhbml0aXplQXR0cmlidXRlIixZbiwkbykseWk9JG8u''@;'; put 'put ''YXR0clZhbHVlLCEkby5mb3JjZUtlZXBBdHRyJiYocjAoRGEsWW4pLCRvLmtlZXBBdHRyKSl7aWYoIUhyJiZEKC9cLz4vaSx5aSkpe3IwKERhLFluKTtjb250aW51ZX1xaSYmKHlpPWNlKHlpLEluLCIgIikseWk9Y2UoeWksenQsIiAiKSx5aT1jZSh5aSx5biwiICIpKTt2YXIgQmg9JGEoWW4u''@;'; put 'put ''bm9kZU5hbWUpO2lmKENzKEJoLG9zLHlpKSl7aWYoUGkmJigiaWQiPT09b3N8fCJuYW1lIj09PW9zKSYmKHIwKERhLFluKSx5aT0idXNlci1jb250ZW50LSIreWkpLFh0JiYib2JqZWN0Ij09PUllKGVuKSYmImZ1bmN0aW9uIj09dHlwZW9mIGVuLmdldEF0dHJpYnV0ZVR5cGUmJiFWaClzd2l0''@;'; put 'put ''Y2goZW4uZ2V0QXR0cmlidXRlVHlwZShCaCxvcykpe2Nhc2UiVHJ1c3RlZEhUTUwiOnlpPVh0LmNyZWF0ZUhUTUwoeWkpO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6eWk9WHQuY3JlYXRlU2NyaXB0VVJMKHlpKX10cnl7Vmg/WW4uc2V0QXR0cmlidXRlTlMoVmgsRGEseWkpOlluLnNl''@;'; put 'put ''dEF0dHJpYnV0ZShEYSx5aSksdGUoRGUucmVtb3ZlZCl9Y2F0Y2h7fX19fV9jKCJhZnRlclNhbml0aXplQXR0cmlidXRlcyIsWW4sbnVsbCl9fSxOaD1mdW5jdGlvbiBRaShZbil7dmFyIGJpLHlpPUQyKFluKTtmb3IoX2MoImJlZm9yZVNhbml0aXplU2hhZG93RE9NIixZbixudWxsKTtiaT15''@;'; put 'put ''aS5uZXh0Tm9kZSgpOylfYygidXBvblNhbml0aXplU2hhZG93Tm9kZSIsYmksbnVsbCksIWtvKGJpKSYmKGJpLmNvbnRlbnQgaW5zdGFuY2VvZiB1dCYmUWkoYmkuY29udGVudCksSTIoYmkpKTtfYygiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsWW4sbnVsbCl9O3JldHVybiBEZS5zYW5pdGl6''@;'; put 'put ''ZT1mdW5jdGlvbihRaSl7dmFyIGJpLHlpLG9zLEZhLEhhLFluPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZigoQTI9IVFpKSYmKFFpPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBlb2YgUWkmJiFBcihRaSkpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiIhPXR5cGVvZiBRaS50b1N0cmluZyl0aHJvdyBIKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJpbmciIT10eXBlb2YoUWk9UWkudG9TdHJpbmcoKSkpdGhyb3cgSCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFEZS5pc1N1cHBvcnRlZCl7''@;'; put 'put ''aWYoIm9iamVjdCI9PT1JZShNZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgTWUudG9TdGF0aWNIVE1MKXtpZigic3RyaW5nIj09dHlwZW9mIFFpKXJldHVybiBNZS50b1N0YXRpY0hUTUwoUWkpO2lmKEFyKFFpKSlyZXR1cm4gTWUudG9TdGF0aWNIVE1MKFFpLm91dGVySFRN''@;'; put 'put ''TCl9cmV0dXJuIFFpfWlmKGFvfHxFdShZbiksRGUucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIFFpJiYocnM9ITEpLHJzKXtpZihRaS5ub2RlTmFtZSl7dmFyICRvPSRhKFFpLm5vZGVOYW1lKTtpZighUG5bJG9dfHxnaVskb10pdGhyb3cgSCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBh''@;'; put 'put ''bmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKFFpIGluc3RhbmNlb2YgSHQpMT09PSh5aT0oYmk9VDIoIlx4M2MhLS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKFFpLCEwKSkubm9kZVR5cGUmJiJCT0RZIj09PXlpLm5vZGVOYW1lfHwiSFRNTCI9''@;'; put 'put ''PT15aS5ub2RlTmFtZT9iaT15aTpiaS5hcHBlbmRDaGlsZCh5aSk7ZWxzZXtpZighaW8mJiFxaSYmIUppJiYtMT09PVFpLmluZGV4T2YoIjwiKSlyZXR1cm4gWHQmJmhvP1h0LmNyZWF0ZUhUTUwoUWkpOlFpO2lmKCEoYmk9VDIoUWkpKSlyZXR1cm4gaW8/bnVsbDpobz9fdDoiIn1iaSYmcm8m''@;'; put 'put ''JmJvKGJpLmZpcnN0Q2hpbGQpO2Zvcih2YXIgVjA9RDIocnM/UWk6YmkpO29zPVYwLm5leHROb2RlKCk7KTM9PT1vcy5ub2RlVHlwZSYmb3M9PT1GYXx8a28ob3MpfHwob3MuY29udGVudCBpbnN0YW5jZW9mIHV0JiZOaChvcy5jb250ZW50KSxJMihvcyksRmE9b3MpO2lmKEZhPW51bGwscnMp''@;'; put 'put ''cmV0dXJuIFFpO2lmKGlvKXtpZihHaSlmb3IoSGE9SXQuY2FsbChiaS5vd25lckRvY3VtZW50KTtiaS5maXJzdENoaWxkOylIYS5hcHBlbmRDaGlsZChiaS5maXJzdENoaWxkKTtlbHNlIEhhPWJpO3JldHVybihsbi5zaGFkb3dyb290fHxsbi5zaGFkb3dyb290bW9kKSYmKEhhPUR0LmNhbGwo''@;'; put 'put ''emUsSGEsITApKSxIYX12YXIgRGE9Smk/Ymkub3V0ZXJIVE1MOmJpLmlubmVySFRNTDtyZXR1cm4gSmkmJlBuWyIhZG9jdHlwZSJdJiZiaS5vd25lckRvY3VtZW50JiZiaS5vd25lckRvY3VtZW50LmRvY3R5cGUmJmJpLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lJiZEKFRlLGJpLm93bmVy''@;'; put 'put ''RG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKERhPSI8IURPQ1RZUEUgIitiaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsiPlxuIitEYSkscWkmJihEYT1jZShEYSxJbiwiICIpLERhPWNlKERhLHp0LCIgIiksRGE9Y2UoRGEseW4sIiAiKSksWHQmJmhvP1h0LmNyZWF0ZUhUTUwoRGEpOkRh''@;'; put 'put ''fSxEZS5zZXRDb25maWc9ZnVuY3Rpb24oUWkpe0V1KFFpKSxhbz0hMH0sRGUuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXt0MD1udWxsLGFvPSExfSxEZS5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKFFpLFluLGJpKXt0MHx8RXUoe30pO3ZhciB5aT0kYShRaSksb3M9JGEoWW4pO3JldHVybiBD''@;'; put 'put ''cyh5aSxvcyxiaSl9LERlLmFkZEhvb2s9ZnVuY3Rpb24oUWksWW4peyJmdW5jdGlvbiI9PXR5cGVvZiBZbiYmKFl0W1FpXT1ZdFtRaV18fFtdLG9lKFl0W1FpXSxZbikpfSxEZS5yZW1vdmVIb29rPWZ1bmN0aW9uKFFpKXtpZihZdFtRaV0pcmV0dXJuIHRlKFl0W1FpXSl9LERlLnJlbW92ZUhv''@;'; put 'put ''b2tzPWZ1bmN0aW9uKFFpKXtZdFtRaV0mJihZdFtRaV09W10pfSxEZS5yZW1vdmVBbGxIb29rcz1mdW5jdGlvbigpe1l0PXt9fSxEZX0oKX0oKX0sODg2NTE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1JZTthZS52ZXJzaW9uPUYoMTg1OTcpLmk4LGFlLnV0aWxzPUYoNDY3Njcp''@;'; put 'put ''LGFlLnJhbmQ9Rig2MDA4MiksYWUuY3VydmU9Rig5MTMyKSxhZS5jdXJ2ZXM9Rig4MDQ5KSxhZS5lYz1GKDY0NDMpLGFlLmVkZHNhPUYoOTk1NzcpfSw3MTMyNDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig0Njc2NyksbT14LmdldE5BRixsZT14LmdldEpT''@;'; put 'put ''RixNPXguYXNzZXJ0O2Z1bmN0aW9uIE8oeixLKXt0aGlzLnR5cGU9eix0aGlzLnA9bmV3IGFlKEsucCwxNiksdGhpcy5yZWQ9Sy5wcmltZT9hZS5yZWQoSy5wcmltZSk6YWUubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgYWUoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBhZSgx''@;'; put 'put ''KS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IGFlKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Sy5uJiZuZXcgYWUoSy5uLDE2KSx0aGlzLmc9Sy5nJiZ0aGlzLnBvaW50RnJvbUpTT04oSy5nLEsuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3''@;'; put 'put ''IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBJPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFJfHxJLmNtcG4oMTAwKT4wP3RoaXMucmVk''@;'; put 'put ''Tj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIFIoeixLKXt0aGlzLmN1cnZlPXosdGhpcy50eXBlPUssdGhpcy5wcmVjb21wdXRlZD1udWxsfWF0LmV4cG9ydHM9TyxPLnByb3RvdHlwZS5wb2ludD1mdW5jdGlv''@;'; put 'put ''bigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LE8ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sTy5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKEssSSl7TShLLnByZWNvbXB1dGVkKTt2''@;'; put 'put ''YXIgaz1LLl9nZXREb3VibGVzKCksRT1tKEksMSx0aGlzLl9iaXRMZW5ndGgpLGo9KDE8PGsuc3RlcCsxKS0oay5zdGVwJTI9PTA/MjoxKTtqLz0zO3ZhciBCLFksVj1bXTtmb3IoQj0wO0I8RS5sZW5ndGg7Qis9ay5zdGVwKXtZPTA7Zm9yKHZhciBYPUIray5zdGVwLTE7WD49QjtYLS0pWT0o''@;'; put 'put ''WTw8MSkrRVtYXTtWLnB1c2goWSl9Zm9yKHZhciBVPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxxPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxlZT1qO2VlPjA7ZWUtLSl7Zm9yKEI9MDtCPFYubGVuZ3RoO0IrKykoWT1WW0JdKT09PWVlP3E9cS5taXhlZEFkZChrLnBvaW50c1tC''@;'; put 'put ''XSk6WT09PS1lZSYmKHE9cS5taXhlZEFkZChrLnBvaW50c1tCXS5uZWcoKSkpO1U9VS5hZGQocSl9cmV0dXJuIFUudG9QKCl9LE8ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKEssSSl7Zm9yKHZhciBrPTQsRT1LLl9nZXROQUZQb2ludHMoayksaj1FLnBvaW50cyxWPW0oSSxrPUUud25k''@;'; put 'put ''LHRoaXMuX2JpdExlbmd0aCksQj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksWT1WLmxlbmd0aC0xO1k+PTA7WS0tKXtmb3IodmFyIFg9MDtZPj0wJiYwPT09VltZXTtZLS0pWCsrO2lmKFk+PTAmJlgrKyxCPUIuZGJscChYKSxZPDApYnJlYWs7dmFyIFU9VltZXTtNKDAhPT1VKSxCPSJh''@;'; put 'put ''ZmZpbmUiPT09Sy50eXBlP0IubWl4ZWRBZGQoVT4wP2pbVS0xPj4xXTpqWy1VLTE+PjFdLm5lZygpKTpCLmFkZChVPjA/altVLTE+PjFdOmpbLVUtMT4+MV0ubmVnKCkpfXJldHVybiJhZmZpbmUiPT09Sy50eXBlP0IudG9QKCk6Qn0sTy5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24o''@;'; put 'put ''SyxJLGssRSxqKXt2YXIgVSxxLGVlLFY9dGhpcy5fd25hZlQxLEI9dGhpcy5fd25hZlQyLFk9dGhpcy5fd25hZlQzLFg9MDtmb3IoVT0wO1U8RTtVKyspe3ZhciB0ZT0oZWU9SVtVXSkuX2dldE5BRlBvaW50cyhLKTtWW1VdPXRlLnduZCxCW1VdPXRlLnBvaW50c31mb3IoVT1FLTE7VT49MTtV''@;'; put 'put ''LT0yKXt2YXIgb2U9VS0xLHNlPVU7aWYoMT09PVZbb2VdJiYxPT09VltzZV0pe3ZhciBoZT1bSVtvZV0sbnVsbCxudWxsLElbc2VdXTswPT09SVtvZV0ueS5jbXAoSVtzZV0ueSk/KGhlWzFdPUlbb2VdLmFkZChJW3NlXSksaGVbMl09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0ubmVnKCkp''@;'; put 'put ''KTowPT09SVtvZV0ueS5jbXAoSVtzZV0ueS5yZWROZWcoKSk/KGhlWzFdPUlbb2VdLnRvSigpLm1peGVkQWRkKElbc2VdKSxoZVsyXT1JW29lXS5hZGQoSVtzZV0ubmVnKCkpKTooaGVbMV09SVtvZV0udG9KKCkubWl4ZWRBZGQoSVtzZV0pLGhlWzJdPUlbb2VdLnRvSigpLm1peGVkQWRkKElb''@;'; put 'put ''c2VdLm5lZygpKSk7dmFyIHVlPVstMywtMSwtNSwtNywwLDcsNSwxLDNdLGNlPWxlKGtbb2VdLGtbc2VdKTtmb3IoWD1NYXRoLm1heChjZVswXS5sZW5ndGgsWCksWVtvZV09bmV3IEFycmF5KFgpLFlbc2VdPW5ldyBBcnJheShYKSxxPTA7cTxYO3ErKylZW29lXVtxXT11ZVszKigxKygwfGNl''@;'; put 'put ''WzBdW3FdKSkrKDErKDB8Y2VbMV1bcV0pKV0sWVtzZV1bcV09MCxCW29lXT1oZX1lbHNlIFlbb2VdPW0oa1tvZV0sVltvZV0sdGhpcy5fYml0TGVuZ3RoKSxZW3NlXT1tKGtbc2VdLFZbc2VdLHRoaXMuX2JpdExlbmd0aCksWD1NYXRoLm1heChZW29lXS5sZW5ndGgsWCksWD1NYXRoLm1heChZ''@;'; put 'put ''W3NlXS5sZW5ndGgsWCl9dmFyIEQ9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEg9dGhpcy5fd25hZlQ0O2ZvcihVPVg7VT49MDtVLS0pe2Zvcih2YXIgTj0wO1U+PTA7KXt2YXIgZz0hMDtmb3IocT0wO3E8RTtxKyspSFtxXT0wfFlbcV1bVV0sMCE9PUhbcV0mJihnPSExKTtpZighZyli''@;'; put 'put ''cmVhaztOKyssVS0tfWlmKFU+PTAmJk4rKyxEPUQuZGJscChOKSxVPDApYnJlYWs7Zm9yKHE9MDtxPEU7cSsrKXt2YXIgQz1IW3FdOzAhPT1DJiYoQz4wP2VlPUJbcV1bQy0xPj4xXTpDPDAmJihlZT1CW3FdWy1DLTE+PjFdLm5lZygpKSxEPSJhZmZpbmUiPT09ZWUudHlwZT9ELm1peGVkQWRk''@;'; put 'put ''KGVlKTpELmFkZChlZSkpfX1mb3IoVT0wO1U8RTtVKyspQltVXT1udWxsO3JldHVybiBqP0Q6RC50b1AoKX0sTy5CYXNlUG9pbnQ9UixSLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LE8ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKEssSSl7Sz14LnRvQXJyYXkoSyxJKTt2YXIgaz10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09S1swXXx8Nj09PUtbMF18fDc9PT1LWzBdKSYmSy5sZW5ndGgt''@;'; put 'put ''MT09MiprKXJldHVybiA2PT09S1swXT9NKEtbSy5sZW5ndGgtMV0lMj09MCk6Nz09PUtbMF0mJk0oS1tLLmxlbmd0aC0xXSUyPT0xKSx0aGlzLnBvaW50KEsuc2xpY2UoMSwxK2spLEsuc2xpY2UoMStrLDErMiprKSk7aWYoKDI9PT1LWzBdfHwzPT09S1swXSkmJksubGVuZ3RoLTE9PT1rKXJl''@;'; put 'put ''dHVybiB0aGlzLnBvaW50RnJvbVgoSy5zbGljZSgxLDErayksMz09PUtbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBmb3JtYXQiKX0sUi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGUoSywhMCl9LFIucHJvdG90eXBl''@;'; put 'put ''Ll9lbmNvZGU9ZnVuY3Rpb24oSyl7dmFyIEk9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxrPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIixJKTtyZXR1cm4gSz9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoayk6WzRdLmNvbmNhdChrLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJl''@;'; put 'put ''IixJKSl9LFIucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihLLEkpe3JldHVybiB4LmVuY29kZSh0aGlzLl9lbmNvZGUoSSksSyl9LFIucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oSyl7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgST17ZG91YmxlczpudWxsLG5h''@;'; put 'put ''ZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIEkubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxJLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LEspLEkuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1JLHRoaXN9LFIucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9u''@;'; put 'put ''KEspe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBJPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIUkmJkkucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKChLLmJpdExlbmd0aCgpKzEpL0kuc3RlcCl9LFIucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKEss''@;'; put 'put ''SSl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciBrPVt0aGlzXSxFPXRoaXMsaj0wO2o8STtqKz1LKXtmb3IodmFyIFY9MDtWPEs7VisrKUU9RS5kYmwoKTtrLnB1c2goRSl9cmV0dXJu''@;'; put 'put ''e3N0ZXA6Syxwb2ludHM6a319LFIucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oSyl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgST1bdGhpc10saz0oMTw8SyktMSxFPTE9PT1rP251''@;'; put 'put ''bGw6dGhpcy5kYmwoKSxqPTE7ajxrO2orKylJW2pdPUlbai0xXS5hZGQoRSk7cmV0dXJue3duZDpLLHBvaW50czpJfX0sUi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sUi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihLKXtmb3IodmFyIEk9dGhpcyxrPTA7azxL''@;'; put 'put ''O2srKylJPUkuZGJsKCk7cmV0dXJuIEl9fSwyNzY2NTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY3NjcpLHg9RigzMTM4NyksbT1GKDY2Njk4KSxsZT1GKDcxMzI0KSxNPWFlLmFzc2VydDtmdW5jdGlvbiBPKHope3RoaXMudHdpc3RlZD0xIT0oMHx6LmEpLHRoaXMubU9u''@;'; put 'put ''ZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8ei5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsbGUuY2FsbCh0aGlzLCJlZHdhcmRzIix6KSx0aGlzLmE9bmV3IHgoei5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgeCh6LmMs''@;'; put 'put ''MTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IHgoei5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksTSghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9u''@;'; put 'put ''ZUM9MT09KDB8ei5jKX1mdW5jdGlvbiBSKHosSyxJLGssRSl7bGUuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJwcm9qZWN0aXZlIiksbnVsbD09PUsmJm51bGw9PT1JJiZudWxsPT09az8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3Vy''@;'; put 'put ''dmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyB4KEssMTYpLHRoaXMueT1uZXcgeChJLDE2KSx0aGlzLno9az9uZXcgeChrLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9RSYmbmV3IHgoRSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlz''@;'; put 'put ''LngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9S''@;'; put 'put ''ZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkp''@;'; put 'put ''KSl9bShPLGxlKSxhdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMubU9uZUE/Sy5yZWROZWcoKTp0aGlzLmEucmVkTXVsKEspfSxPLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5vbmVDP0s6dGhpcy5jLnJlZE11bChL''@;'; put 'put ''KX0sTy5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiB0aGlzLnBvaW50KEssSSxrLEUpfSxPLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKEssSSl7KEs9bmV3IHgoSywxNikpLnJlZHx8KEs9Sy50b1JlZCh0aGlzLnJlZCkpO3ZhciBrPUsucmVkU3FyKCks''@;'; put 'put ''RT10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKGspKSxqPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChrKSksVj1FLnJlZE11bChqLnJlZEludm0oKSksQj1WLnJlZFNxcnQoKTtpZigwIT09Qi5yZWRTcXIoKS5yZWRTdWIoVikuY21wKHRoaXMuemVy''@;'; put 'put ''bykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFk9Qi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oSSYmIVl8fCFJJiZZKSYmKEI9Qi5yZWROZWcoKSksdGhpcy5wb2ludChLLEIpfSxPLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKEssSSl7KEs9bmV3IHgoSywx''@;'; put 'put ''NikpLnJlZHx8KEs9Sy50b1JlZCh0aGlzLnJlZCkpO3ZhciBrPUsucmVkU3FyKCksRT1rLnJlZFN1Yih0aGlzLmMyKSxqPWsucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFY9RS5yZWRNdWwoai5yZWRJbnZtKCkpO2lmKDA9PT1WLmNtcCh0aGlzLnplcm8p''@;'; put 'put ''KXtpZihJKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyxLKX12YXIgQj1WLnJlZFNxcnQoKTtpZigwIT09Qi5yZWRTcXIoKS5yZWRTdWIoVikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7''@;'; put 'put ''cmV0dXJuIEIuZnJvbVJlZCgpLmlzT2RkKCkhPT1JJiYoQj1CLnJlZE5lZygpKSx0aGlzLnBvaW50KEIsSyl9LE8ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKEspe2lmKEsuaXNJbmZpbml0eSgpKXJldHVybiEwO0subm9ybWFsaXplKCk7dmFyIEk9Sy54LnJlZFNxcigpLGs9Sy55LnJl''@;'; put 'put ''ZFNxcigpLEU9SS5yZWRNdWwodGhpcy5hKS5yZWRBZGQoayksaj10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChJKS5yZWRNdWwoaykpKTtyZXR1cm4gMD09PUUuY21wKGopfSxtKFIsbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1''@;'; put 'put ''bmN0aW9uKEspe3JldHVybiBSLmZyb21KU09OKHRoaXMsSyl9LE8ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKEssSSxrLEUpe3JldHVybiBuZXcgUih0aGlzLEssSSxrLEUpfSxSLmZyb21KU09OPWZ1bmN0aW9uKEssSSl7cmV0dXJuIG5ldyBSKEssSVswXSxJWzFdLElbMl0pfSxSLnByb3Rv''@;'; put 'put ''dHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIr''@;'; put 'put ''dGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYwPT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0s''@;'; put 'put ''Ui5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciBLPXRoaXMueC5yZWRTcXIoKSxJPXRoaXMueS5yZWRTcXIoKSxrPXRoaXMuei5yZWRTcXIoKTtrPWsucmVkSUFkZChrKTt2YXIgRT10aGlzLmN1cnZlLl9tdWxBKEspLGo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJl''@;'; put 'put ''ZElTdWIoSykucmVkSVN1YihJKSxWPUUucmVkQWRkKEkpLEI9Vi5yZWRTdWIoayksWT1FLnJlZFN1YihJKSxYPWoucmVkTXVsKEIpLFU9Vi5yZWRNdWwoWSkscT1qLnJlZE11bChZKSxlZT1CLnJlZE11bChWKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLFUsZWUscSl9LFIucHJvdG90eXBl''@;'; put 'put ''Ll9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEUsaixWLEIsWSxYLEs9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLEk9dGhpcy54LnJlZFNxcigpLGs9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIFU9KEI9dGhpcy5jdXJ2ZS5fbXVsQShJKSkucmVkQWRk''@;'; put 'put ''KGspO3RoaXMuek9uZT8oRT1LLnJlZFN1YihJKS5yZWRTdWIoaykucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUudHdvKSksaj1VLnJlZE11bChCLnJlZFN1YihrKSksVj1VLnJlZFNxcigpLnJlZFN1YihVKS5yZWRTdWIoVSkpOihZPXRoaXMuei5yZWRTcXIoKSxYPVUucmVkU3ViKFkpLnJl''@;'; put 'put ''ZElTdWIoWSksRT1LLnJlZFN1YihJKS5yZWRJU3ViKGspLnJlZE11bChYKSxqPVUucmVkTXVsKEIucmVkU3ViKGspKSxWPVUucmVkTXVsKFgpKX1lbHNlIEI9SS5yZWRBZGQoayksWT10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksWD1CLnJlZFN1YihZKS5yZWRTdWIoWSksRT10''@;'; put 'put ''aGlzLmN1cnZlLl9tdWxDKEsucmVkSVN1YihCKSkucmVkTXVsKFgpLGo9dGhpcy5jdXJ2ZS5fbXVsQyhCKS5yZWRNdWwoSS5yZWRJU3ViKGspKSxWPUIucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEUsaixWKX0sUi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LFIucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24oSyl7dmFyIEk9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bChLLnkucmVkU3ViKEsueCkpLGs9dGhpcy55''@;'; put 'put ''LnJlZEFkZCh0aGlzLngpLnJlZE11bChLLnkucmVkQWRkKEsueCkpLEU9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoSy50KSxqPXRoaXMuei5yZWRNdWwoSy56LnJlZEFkZChLLnopKSxWPWsucmVkU3ViKEkpLEI9ai5yZWRTdWIoRSksWT1qLnJlZEFkZChFKSxYPWsucmVk''@;'; put 'put ''QWRkKEkpLFU9Vi5yZWRNdWwoQikscT1ZLnJlZE11bChYKSxlZT1WLnJlZE11bChYKSx0ZT1CLnJlZE11bChZKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLHEsdGUsZWUpfSxSLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihLKXt2YXIgcSxlZSxJPXRoaXMuei5yZWRNdWwoSy56KSxr''@;'; put 'put ''PUkucmVkU3FyKCksRT10aGlzLngucmVkTXVsKEsueCksaj10aGlzLnkucmVkTXVsKEsueSksVj10aGlzLmN1cnZlLmQucmVkTXVsKEUpLnJlZE11bChqKSxCPWsucmVkU3ViKFYpLFk9ay5yZWRBZGQoViksWD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKEsueC5yZWRBZGQoSy55KSku''@;'; put 'put ''cmVkSVN1YihFKS5yZWRJU3ViKGopLFU9SS5yZWRNdWwoQikucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHE9SS5yZWRNdWwoWSkucmVkTXVsKGoucmVkU3ViKHRoaXMuY3VydmUuX211bEEoRSkpKSxlZT1CLnJlZE11bChZKSk6KHE9SS5yZWRNdWwoWSkucmVkTXVsKGou''@;'; put 'put ''cmVkU3ViKEUpKSxlZT10aGlzLmN1cnZlLl9tdWxDKEIpLnJlZE11bChZKSksdGhpcy5jdXJ2ZS5wb2ludChVLHEsZWUpfSxSLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP0s6Sy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVk''@;'; put 'put ''P3RoaXMuX2V4dEFkZChLKTp0aGlzLl9wcm9qQWRkKEspfSxSLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoSyk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxLKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsSyl9LFIucHJvdG90eXBlLm11''@;'; put 'put ''bEFkZD1mdW5jdGlvbihLLEksayl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxJXSxbSyxrXSwyLCExKX0sUi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbihLLEksayl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxJXSxbSyxrXSwyLCEwKX0s''@;'; put 'put ''Ui5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciBLPXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKEspLHRoaXMueT10aGlzLnkucmVkTXVsKEspLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVs''@;'; put 'put ''KEspKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0sUi5wcm90b3R5cGUu''@;'; put 'put ''Z2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LFIucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihLKXtyZXR1cm4gdGhp''@;'; put 'put ''cz09PUt8fDA9PT10aGlzLmdldFgoKS5jbXAoSy5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKEsuZ2V0WSgpKX0sUi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKEspe3ZhciBJPUsudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKEkp''@;'; put 'put ''KXJldHVybiEwO2Zvcih2YXIgaz1LLmNsb25lKCksRT10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoay5pYWRkKHRoaXMuY3VydmUubiksay5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihJLnJlZElBZGQoRSksMD09PXRoaXMueC5jbXAoSSkpcmV0dXJuITB9''@;'; put 'put ''fSxSLnByb3RvdHlwZS50b1A9Ui5wcm90b3R5cGUubm9ybWFsaXplLFIucHJvdG90eXBlLm1peGVkQWRkPVIucHJvdG90eXBlLmFkZH0sOTEzMjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUllO2FlLmJhc2U9Rig3MTMyNCksYWUuc2hvcnQ9Rig4OTk5NiksYWUubW9udD1GKDI5''@;'; put 'put ''MjUzKSxhZS5lZHdhcmRzPUYoMjc2NjUpfSwyOTI1MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig2NjY5OCksbT1GKDcxMzI0KSxsZT1GKDQ2NzY3KTtmdW5jdGlvbiBNKFIpe20uY2FsbCh0aGlzLCJtb250IixSKSx0aGlzLmE9bmV3IGFlKFIuYSwxNiku''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYWUoUi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgYWUoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5y''@;'; put 'put ''ZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBPKFIseixLKXttLkJhc2VQb2ludC5jYWxsKHRoaXMsUiwicHJvamVjdGl2ZSIpLG51bGw9PT16JiZudWxsPT09Sz8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGFlKHosMTYpLHRoaXMu''@;'; put 'put ''ej1uZXcgYWUoSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX14KE0sbSksYXQuZXhwb3J0cz1NLE0ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KHope3ZhciBLPXoubm9ybWFsaXplKCkueCxJPUsucmVkU3FyKCksaz1JLnJlZE11bChLKS5yZWRBZGQoSS5yZWRNdWwodGhpcy5hKSkucmVkQWRkKEspO3JldHVybiAwPT09ay5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKGspfSx4KE8sbS5CYXNlUG9pbnQpLE0ucHJvdG90eXBlLmRlY29kZVBv''@;'; put 'put ''aW50PWZ1bmN0aW9uKHosSyl7cmV0dXJuIHRoaXMucG9pbnQobGUudG9BcnJheSh6LEspLDEpfSxNLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LEspe3JldHVybiBuZXcgTyh0aGlzLHosSyl9LE0ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oeil7cmV0dXJuIE8uZnJvbUpT''@;'; put 'put ''T04odGhpcyx6KX0sTy5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LE8uZnJvbUpTT049ZnVuY3Rpb24oeixLKXty''@;'; put 'put ''ZXR1cm4gbmV3IE8oeixLWzBdLEtbMV18fHoub25lKX0sTy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAi''@;'; put 'put ''K3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sTy5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLGs9''@;'; put 'put ''dGhpcy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEU9Sy5yZWRTdWIoayksaj1LLnJlZE11bChrKSxWPUUucmVkTXVsKGsucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChFKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGosVil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oeixLKXt2YXIgST10aGlzLngucmVkQWRkKHRoaXMueiksaz10aGlzLngucmVkU3ViKHRoaXMueiksRT16LngucmVkQWRkKHoueiksVj16LngucmVk''@;'; put 'put ''U3ViKHoueikucmVkTXVsKEkpLEI9RS5yZWRNdWwoayksWT1LLnoucmVkTXVsKFYucmVkQWRkKEIpLnJlZFNxcigpKSxYPUsueC5yZWRNdWwoVi5yZWRJU3ViKEIpLnJlZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChZLFgpfSxPLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7Zm9y''@;'; put 'put ''KHZhciBLPXouY2xvbmUoKSxJPXRoaXMsaz10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksaj1bXTswIT09Sy5jbXBuKDApO0suaXVzaHJuKDEpKWoucHVzaChLLmFuZGxuKDEpKTtmb3IodmFyIFY9ai5sZW5ndGgtMTtWPj0wO1YtLSkwPT09altWXT8oST1JLmRpZmZBZGQoayx0aGlzKSxr''@;'; put 'put ''PWsuZGJsKCkpOihrPUkuZGlmZkFkZChrLHRoaXMpLEk9SS5kYmwoKSk7cmV0dXJuIGt9LE8ucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LE8ucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24o''@;'; put 'put ''KXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxPLnByb3RvdHlwZS5lcT1mdW5jdGlvbih6KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSl9LE8ucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sTy5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw4OTk5NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIGFlPUYoNDY3NjcpLHg9RigzMTM4NyksbT1GKDY2Njk4KSxsZT1GKDcxMzI0KSxNPWFlLmFzc2VydDtmdW5jdGlvbiBPKEspe2xlLmNhbGwodGhpcywic2hvcnQiLEspLHRoaXMuYT1uZXcgeChLLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHgoSy5iLDE2KS50b1JlZCh0''@;'; put 'put ''aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShL''@;'; put 'put ''KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBSKEssSSxrLEUpe2xlLkJhc2VQb2ludC5jYWxsKHRoaXMsSywiYWZmaW5lIiksbnVsbD09PUkmJm51bGw9PT1rPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlz''@;'; put 'put ''LmluZj0hMCk6KHRoaXMueD1uZXcgeChJLDE2KSx0aGlzLnk9bmV3IHgoaywxNiksRSYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQp''@;'; put 'put ''KSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiB6KEssSSxrLEUpe2xlLkJhc2VQb2ludC5jYWxsKHRoaXMsSywiamFjb2JpYW4iKSxudWxsPT09SSYmbnVsbD09PWsmJm51bGw9PT1FPyh0aGlzLng9dGhpcy5j''@;'; put 'put ''dXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgeCgwKSk6KHRoaXMueD1uZXcgeChJLDE2KSx0aGlzLnk9bmV3IHgoaywxNiksdGhpcy56PW5ldyB4KEUsMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5y''@;'; put 'put ''ZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9bShPLGxlKSxhdC5leHBvcnRzPU8sTy5wcm90b3R5cGUuX2dldEVu''@;'; put 'put ''ZG9tb3JwaGlzbT1mdW5jdGlvbihJKXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgayxFO2lmKEkuYmV0YSlrPW5ldyB4KEkuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIGo9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7''@;'; put 'put ''az0oaz1qWzBdLmNtcChqWzFdKTwwP2pbMF06alsxXSkudG9SZWQodGhpcy5yZWQpfWlmKEkubGFtYmRhKUU9bmV3IHgoSS5sYW1iZGEsMTYpO2Vsc2V7dmFyIFY9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoVlswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGsp''@;'; put 'put ''KT9FPVZbMF06TSgwPT09dGhpcy5nLm11bChFPVZbMV0pLnguY21wKHRoaXMuZy54LnJlZE11bChrKSkpfXJldHVybntiZXRhOmssbGFtYmRhOkUsYmFzaXM6SS5iYXNpcz9JLmJhc2lzLm1hcChmdW5jdGlvbihZKXtyZXR1cm57YTpuZXcgeChZLmEsMTYpLGI6bmV3IHgoWS5iLDE2KX19KTp0''@;'; put 'put ''aGlzLl9nZXRFbmRvQmFzaXMoRSl9fX0sTy5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbihJKXt2YXIgaz1JPT09dGhpcy5wP3RoaXMucmVkOngubW9udChJKSxFPW5ldyB4KDIpLnRvUmVkKGspLnJlZEludm0oKSxqPUUucmVkTmVnKCksVj1uZXcgeCgzKS50b1JlZChrKS5yZWRO''@;'; put 'put ''ZWcoKS5yZWRTcXJ0KCkucmVkTXVsKEUpO3JldHVybltqLnJlZEFkZChWKS5mcm9tUmVkKCksai5yZWRTdWIoVikuZnJvbVJlZCgpXX0sTy5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbihJKXtmb3IodmFyIFUscSxlZSx0ZSxvZSxzZSxoZSxjZSxHLGs9dGhpcy5uLnVzaHJuKE1h''@;'; put 'put ''dGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxFPUksaj10aGlzLm4uY2xvbmUoKSxWPW5ldyB4KDEpLEI9bmV3IHgoMCksWT1uZXcgeCgwKSxYPW5ldyB4KDEpLHVlPTA7MCE9PUUuY21wbigwKTspe3ZhciBiPWouZGl2KEUpO2NlPWouc3ViKGIubXVsKEUpKSxHPVkuc3ViKGIubXVs''@;'; put 'put ''KFYpKTt2YXIgRD1YLnN1YihiLm11bChCKSk7aWYoIWVlJiZjZS5jbXAoayk8MClVPWhlLm5lZygpLHE9VixlZT1jZS5uZWcoKSx0ZT1HO2Vsc2UgaWYoZWUmJjI9PSsrdWUpYnJlYWs7aGU9Y2Usaj1FLEU9Y2UsWT1WLFY9RyxYPUIsQj1EfW9lPWNlLm5lZygpLHNlPUc7dmFyIEg9ZWUuc3Fy''@;'; put 'put ''KCkuYWRkKHRlLnNxcigpKTtyZXR1cm4gb2Uuc3FyKCkuYWRkKHNlLnNxcigpKS5jbXAoSCk+PTAmJihvZT1VLHNlPXEpLGVlLm5lZ2F0aXZlJiYoZWU9ZWUubmVnKCksdGU9dGUubmVnKCkpLG9lLm5lZ2F0aXZlJiYob2U9b2UubmVnKCksc2U9c2UubmVnKCkpLFt7YTplZSxiOnRlfSx7YTpv''@;'; put 'put ''ZSxiOnNlfV19LE8ucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy5lbmRvLmJhc2lzLEU9a1swXSxqPWtbMV0sVj1qLmIubXVsKEkpLmRpdlJvdW5kKHRoaXMubiksQj1FLmIubmVnKCkubXVsKEkpLmRpdlJvdW5kKHRoaXMubiksWT1WLm11bChFLmEpLFg9Qi5t''@;'; put 'put ''dWwoai5hKSxVPVYubXVsKEUuYikscT1CLm11bChqLmIpO3JldHVybntrMTpJLnN1YihZKS5zdWIoWCksazI6VS5hZGQocSkubmVnKCl9fSxPLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKEksayl7KEk9bmV3IHgoSSwxNikpLnJlZHx8KEk9SS50b1JlZCh0aGlzLnJlZCkpO3ZhciBF''@;'; put 'put ''PUkucmVkU3FyKCkucmVkTXVsKEkpLnJlZElBZGQoSS5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLGo9RS5yZWRTcXJ0KCk7aWYoMCE9PWoucmVkU3FyKCkucmVkU3ViKEUpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBWPWouZnJv''@;'; put 'put ''bVJlZCgpLmlzT2RkKCk7cmV0dXJuKGsmJiFWfHwhayYmVikmJihqPWoucmVkTmVnKCkpLHRoaXMucG9pbnQoSSxqKX0sTy5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oSSl7aWYoSS5pbmYpcmV0dXJuITA7dmFyIGs9SS54LEU9SS55LGo9dGhpcy5hLnJlZE11bChrKSxWPWsucmVkU3Fy''@;'; put 'put ''KCkucmVkTXVsKGspLnJlZElBZGQoaikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09RS5yZWRTcXIoKS5yZWRJU3ViKFYpLmNtcG4oMCl9LE8ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihJLGssRSl7Zm9yKHZhciBqPXRoaXMuX2VuZG9XbmFmVDEsVj10aGlzLl9lbmRv''@;'; put 'put ''V25hZlQyLEI9MDtCPEkubGVuZ3RoO0IrKyl7dmFyIFk9dGhpcy5fZW5kb1NwbGl0KGtbQl0pLFg9SVtCXSxVPVguX2dldEJldGEoKTtZLmsxLm5lZ2F0aXZlJiYoWS5rMS5pbmVnKCksWD1YLm5lZyghMCkpLFkuazIubmVnYXRpdmUmJihZLmsyLmluZWcoKSxVPVUubmVnKCEwKSksalsyKkJd''@;'; put 'put ''PVgsalsyKkIrMV09VSxWWzIqQl09WS5rMSxWWzIqQisxXT1ZLmsyfWZvcih2YXIgcT10aGlzLl93bmFmTXVsQWRkKDEsaixWLDIqQixFKSxlZT0wO2VlPDIqQjtlZSsrKWpbZWVdPW51bGwsVltlZV09bnVsbDtyZXR1cm4gcX0sbShSLGxlLkJhc2VQb2ludCksTy5wcm90b3R5cGUucG9pbnQ9''@;'; put 'put ''ZnVuY3Rpb24oSSxrLEUpe3JldHVybiBuZXcgUih0aGlzLEksayxFKX0sTy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihJLGspe3JldHVybiBSLmZyb21KU09OKHRoaXMsSSxrKX0sUi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3Zh''@;'; put 'put ''ciBJPXRoaXMucHJlY29tcHV0ZWQ7aWYoSSYmSS5iZXRhKXJldHVybiBJLmJldGE7dmFyIGs9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKEkpe3ZhciBFPXRoaXMuY3VydmUsaj1mdW5jdGlvbihWKXtyZXR1cm4gRS5wb2lu''@;'; put 'put ''dChWLngucmVkTXVsKEUuZW5kby5iZXRhKSxWLnkpfTtJLmJldGE9ayxrLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOkkubmFmJiZ7d25kOkkubmFmLnduZCxwb2ludHM6SS5uYWYucG9pbnRzLm1hcChqKX0sZG91YmxlczpJLmRvdWJsZXMmJntzdGVwOkkuZG91Ymxlcy5zdGVwLHBvaW50''@;'; put 'put ''czpJLmRvdWJsZXMucG9pbnRzLm1hcChqKX19fXJldHVybiBrfX0sUi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3Rl''@;'; put 'put ''cDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYu''@;'; put 'put ''cG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sUi5mcm9tSlNPTj1mdW5jdGlvbihJLGssRSl7InN0cmluZyI9PXR5cGVvZiBrJiYoaz1KU09OLnBhcnNlKGspKTt2YXIgaj1JLnBvaW50KGtbMF0sa1sxXSxFKTtpZigha1syXSlyZXR1cm4gajtmdW5jdGlvbiBWKFkpe3JldHVy''@;'; put 'put ''biBJLnBvaW50KFlbMF0sWVsxXSxFKX12YXIgQj1rWzJdO3JldHVybiBqLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpCLmRvdWJsZXMmJntzdGVwOkIuZG91Ymxlcy5zdGVwLHBvaW50czpbal0uY29uY2F0KEIuZG91Ymxlcy5wb2ludHMubWFwKFYpKX0sbmFmOkIubmFmJiZ7d25k''@;'; put 'put ''OkIubmFmLnduZCxwb2ludHM6W2pdLmNvbmNhdChCLm5hZi5wb2ludHMubWFwKFYpKX19LGp9LFIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgp''@;'; put 'put ''LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sUi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaW5mKXJldHVybiBJO2lmKEku''@;'; put 'put ''aW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoSSkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShJKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKEkueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIg''@;'; put 'put ''az10aGlzLnkucmVkU3ViKEkueSk7MCE9PWsuY21wbigwKSYmKGs9ay5yZWRNdWwodGhpcy54LnJlZFN1YihJLngpLnJlZEludm0oKSkpO3ZhciBFPWsucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoSS54KSxqPWsucmVkTXVsKHRoaXMueC5yZWRTdWIoRSkpLnJlZElTdWIodGhp''@;'; put 'put ''cy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChFLGopfSxSLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgST10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PUkuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwp''@;'; put 'put ''O3ZhciBrPXRoaXMuY3VydmUuYSxFPXRoaXMueC5yZWRTcXIoKSxqPUkucmVkSW52bSgpLFY9RS5yZWRBZGQoRSkucmVkSUFkZChFKS5yZWRJQWRkKGspLnJlZE11bChqKSxCPVYucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLFk9Vi5yZWRNdWwodGhpcy54LnJlZFN1''@;'; put 'put ''YihCKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEIsWSl9LFIucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sUi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxSLnByb3Rv''@;'; put 'put ''dHlwZS5tdWw9ZnVuY3Rpb24oSSl7cmV0dXJuIEk9bmV3IHgoSSwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKEkpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsSSk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlz''@;'; put 'put ''XSxbSV0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxJKX0sUi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKEksayxFKXt2YXIgaj1bdGhpcyxrXSxWPVtJLEVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoaixWKTp0aGlzLmN1cnZlLl93bmFm''@;'; put 'put ''TXVsQWRkKDEsaixWLDIpfSxSLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKEksayxFKXt2YXIgaj1bdGhpcyxrXSxWPVtJLEVdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoaixWLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsaixWLDIs''@;'; put 'put ''ITApfSxSLnByb3RvdHlwZS5lcT1mdW5jdGlvbihJKXtyZXR1cm4gdGhpcz09PUl8fHRoaXMuaW5mPT09SS5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoSS54KSYmMD09PXRoaXMueS5jbXAoSS55KSl9LFIucHJvdG90eXBlLm5lZz1mdW5jdGlvbihJKXtpZih0aGlzLmluZilyZXR1''@;'; put 'put ''cm4gdGhpczt2YXIgaz10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKEkmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBFPXRoaXMucHJlY29tcHV0ZWQsaj1mdW5jdGlvbihWKXtyZXR1cm4gVi5uZWcoKX07ay5wcmVjb21wdXRlZD17bmFmOkUubmFmJiZ7d25kOkUu''@;'; put 'put ''bmFmLnduZCxwb2ludHM6RS5uYWYucG9pbnRzLm1hcChqKX0sZG91YmxlczpFLmRvdWJsZXMmJntzdGVwOkUuZG91Ymxlcy5zdGVwLHBvaW50czpFLmRvdWJsZXMucG9pbnRzLm1hcChqKX19fXJldHVybiBrfSxSLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhp''@;'; put 'put ''cy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxtKHosbGUuQmFzZVBvaW50KSxPLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oSSxrLEUpe3JldHVybiBuZXcgeih0aGlzLEksayxFKX0sei5wcm90''@;'; put 'put ''b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgST10aGlzLnoucmVkSW52bSgpLGs9SS5yZWRTcXIoKSxFPXRoaXMueC5yZWRNdWwoayksaj10aGlzLnkucmVkTXVsKGspLnJlZE11bChJKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5jdXJ2ZS5wb2ludChFLGopfSx6LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSx6LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSSl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJu''@;'; put 'put ''IEk7aWYoSS5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGs9SS56LnJlZFNxcigpLEU9dGhpcy56LnJlZFNxcigpLGo9dGhpcy54LnJlZE11bChrKSxWPUkueC5yZWRNdWwoRSksQj10aGlzLnkucmVkTXVsKGsucmVkTXVsKEkueikpLFk9SS55LnJlZE11bChFLnJlZE11bCh0aGlzLnop''@;'; put 'put ''KSxYPWoucmVkU3ViKFYpLFU9Qi5yZWRTdWIoWSk7aWYoMD09PVguY21wbigwKSlyZXR1cm4gMCE9PVUuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcT1YLnJlZFNxcigpLGVlPXEucmVkTXVsKFgpLHRlPWoucmVkTXVsKHEpLG9lPVUu''@;'; put 'put ''cmVkU3FyKCkucmVkSUFkZChlZSkucmVkSVN1Yih0ZSkucmVkSVN1Yih0ZSksc2U9VS5yZWRNdWwodGUucmVkSVN1YihvZSkpLnJlZElTdWIoQi5yZWRNdWwoZWUpKSxoZT10aGlzLnoucmVkTXVsKEkueikucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChvZSxzZSxoZSl9LHou''@;'; put 'put ''cHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKEkpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBJLnRvSigpO2lmKEkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBrPXRoaXMuei5yZWRTcXIoKSxFPXRoaXMueCxqPUkueC5yZWRNdWwoayksVj10aGlzLnksQj1JLnkucmVkTXVs''@;'; put 'put ''KGspLnJlZE11bCh0aGlzLnopLFk9RS5yZWRTdWIoaiksWD1WLnJlZFN1YihCKTtpZigwPT09WS5jbXBuKDApKXJldHVybiAwIT09WC5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBVPVkucmVkU3FyKCkscT1VLnJlZE11bChZKSxlZT1F''@;'; put 'put ''LnJlZE11bChVKSx0ZT1YLnJlZFNxcigpLnJlZElBZGQocSkucmVkSVN1YihlZSkucmVkSVN1YihlZSksb2U9WC5yZWRNdWwoZWUucmVkSVN1Yih0ZSkpLnJlZElTdWIoVi5yZWRNdWwocSkpLHNlPXRoaXMuei5yZWRNdWwoWSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLG9lLHNlKX0s''@;'; put 'put ''ei5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihJKXtpZigwPT09SSlyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighSSlyZXR1cm4gdGhpcy5kYmwoKTt2YXIgaztpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7dmFyIEU9dGhpcztm''@;'; put 'put ''b3Ioaz0wO2s8STtrKyspRT1FLmRibCgpO3JldHVybiBFfXZhciBqPXRoaXMuY3VydmUuYSxWPXRoaXMuY3VydmUudGludixCPXRoaXMueCxZPXRoaXMueSxYPXRoaXMueixVPVgucmVkU3FyKCkucmVkU3FyKCkscT1ZLnJlZEFkZChZKTtmb3Ioaz0wO2s8STtrKyspe3ZhciBlZT1CLnJlZFNx''@;'; put 'put ''cigpLHRlPXEucmVkU3FyKCksb2U9dGUucmVkU3FyKCksc2U9ZWUucmVkQWRkKGVlKS5yZWRJQWRkKGVlKS5yZWRJQWRkKGoucmVkTXVsKFUpKSxoZT1CLnJlZE11bCh0ZSksdWU9c2UucmVkU3FyKCkucmVkSVN1YihoZS5yZWRBZGQoaGUpKSxjZT1oZS5yZWRJU3ViKHVlKSxHPXNlLnJlZE11''@;'; put 'put ''bChjZSk7Rz1HLnJlZElBZGQoRykucmVkSVN1YihvZSk7dmFyIGI9cS5yZWRNdWwoWCk7aysxPEkmJihVPVUucmVkTXVsKG9lKSksQj11ZSxYPWIscT1HfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChCLHEucmVkTXVsKFYpLFgpfSx6LnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSx6LnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBJLGssRTtpZih0aGlzLnpPbmUpe3ZhciBq''@;'; put 'put ''PXRoaXMueC5yZWRTcXIoKSxWPXRoaXMueS5yZWRTcXIoKSxCPVYucmVkU3FyKCksWT10aGlzLngucmVkQWRkKFYpLnJlZFNxcigpLnJlZElTdWIoaikucmVkSVN1YihCKTtZPVkucmVkSUFkZChZKTt2YXIgWD1qLnJlZEFkZChqKS5yZWRJQWRkKGopLFU9WC5yZWRTcXIoKS5yZWRJU3ViKFkp''@;'; put 'put ''LnJlZElTdWIoWSkscT1CLnJlZElBZGQoQik7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSksST1VLGs9WC5yZWRNdWwoWS5yZWRJU3ViKFUpKS5yZWRJU3ViKHEpLEU9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGVlPXRoaXMueC5yZWRTcXIoKSx0ZT10aGlzLnkucmVkU3Fy''@;'; put 'put ''KCksb2U9dGUucmVkU3FyKCksc2U9dGhpcy54LnJlZEFkZCh0ZSkucmVkU3FyKCkucmVkSVN1YihlZSkucmVkSVN1YihvZSk7c2U9c2UucmVkSUFkZChzZSk7dmFyIGhlPWVlLnJlZEFkZChlZSkucmVkSUFkZChlZSksdWU9aGUucmVkU3FyKCksY2U9b2UucmVkSUFkZChvZSk7Y2U9KGNlPWNl''@;'; put 'put ''LnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxJPXVlLnJlZElTdWIoc2UpLnJlZElTdWIoc2UpLGs9aGUucmVkTXVsKHNlLnJlZElTdWIoSSkpLnJlZElTdWIoY2UpLEU9KEU9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChJLGssRSl9''@;'; put 'put ''LHoucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBJLGssRTtpZih0aGlzLnpPbmUpe3ZhciBqPXRoaXMueC5yZWRTcXIoKSxWPXRoaXMueS5yZWRTcXIoKSxCPVYucmVkU3FyKCksWT10aGlzLngucmVkQWRkKFYpLnJlZFNxcigpLnJlZElTdWIoaikucmVkSVN1YihCKTtZPVku''@;'; put 'put ''cmVkSUFkZChZKTt2YXIgWD1qLnJlZEFkZChqKS5yZWRJQWRkKGopLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxVPVgucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKFkpO0k9VTt2YXIgcT1CLnJlZElBZGQoQik7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSksaz1YLnJlZE11bChZLnJl''@;'; put 'put ''ZElTdWIoVSkpLnJlZElTdWIocSksRT10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgZWU9dGhpcy56LnJlZFNxcigpLHRlPXRoaXMueS5yZWRTcXIoKSxvZT10aGlzLngucmVkTXVsKHRlKSxzZT10aGlzLngucmVkU3ViKGVlKS5yZWRNdWwodGhpcy54LnJlZEFkZChlZSkpO3NlPXNl''@;'; put 'put ''LnJlZEFkZChzZSkucmVkSUFkZChzZSk7dmFyIGhlPW9lLnJlZElBZGQob2UpLHVlPShoZT1oZS5yZWRJQWRkKGhlKSkucmVkQWRkKGhlKTtJPXNlLnJlZFNxcigpLnJlZElTdWIodWUpLEU9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIodGUpLnJlZElTdWIoZWUpO3Zh''@;'; put 'put ''ciBjZT10ZS5yZWRTcXIoKTtjZT0oY2U9KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSksaz1zZS5yZWRNdWwoaGUucmVkSVN1YihJKSkucmVkSVN1YihjZSl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEksayxFKX0sei5wcm90b3R5cGUuX2RibD1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBJPXRoaXMuY3VydmUuYSxrPXRoaXMueCxFPXRoaXMueSxqPXRoaXMueixWPWoucmVkU3FyKCkucmVkU3FyKCksQj1rLnJlZFNxcigpLFk9RS5yZWRTcXIoKSxYPUIucmVkQWRkKEIpLnJlZElBZGQoQikucmVkSUFkZChJLnJlZE11bChWKSksVT1rLnJlZEFkZChrKSxxPShVPVUu''@;'; put 'put ''cmVkSUFkZChVKSkucmVkTXVsKFkpLGVlPVgucmVkU3FyKCkucmVkSVN1YihxLnJlZEFkZChxKSksdGU9cS5yZWRJU3ViKGVlKSxvZT1ZLnJlZFNxcigpO29lPShvZT0ob2U9b2UucmVkSUFkZChvZSkpLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKTt2YXIgc2U9WC5yZWRNdWwodGUpLnJlZElT''@;'; put 'put ''dWIob2UpLGhlPUUucmVkQWRkKEUpLnJlZE11bChqKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZWUsc2UsaGUpfSx6LnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBJPXRoaXMueC5yZWRTcXIo''@;'; put 'put ''KSxrPXRoaXMueS5yZWRTcXIoKSxFPXRoaXMuei5yZWRTcXIoKSxqPWsucmVkU3FyKCksVj1JLnJlZEFkZChJKS5yZWRJQWRkKEkpLEI9Vi5yZWRTcXIoKSxZPXRoaXMueC5yZWRBZGQoaykucmVkU3FyKCkucmVkSVN1YihJKS5yZWRJU3ViKGopLFg9KFk9KFk9KFk9WS5yZWRJQWRkKFkpKS5y''@;'; put 'put ''ZWRBZGQoWSkucmVkSUFkZChZKSkucmVkSVN1YihCKSkucmVkU3FyKCksVT1qLnJlZElBZGQoaik7VT0oVT0oVT1VLnJlZElBZGQoVSkpLnJlZElBZGQoVSkpLnJlZElBZGQoVSk7dmFyIHE9Vi5yZWRJQWRkKFkpLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihYKS5yZWRJU3ViKFUpLGVl''@;'; put 'put ''PWsucmVkTXVsKHEpO2VlPShlZT1lZS5yZWRJQWRkKGVlKSkucmVkSUFkZChlZSk7dmFyIHRlPXRoaXMueC5yZWRNdWwoWCkucmVkSVN1YihlZSk7dGU9KHRlPXRlLnJlZElBZGQodGUpKS5yZWRJQWRkKHRlKTt2YXIgb2U9dGhpcy55LnJlZE11bChxLnJlZE11bChVLnJlZElTdWIocSkpLnJl''@;'; put 'put ''ZElTdWIoWS5yZWRNdWwoWCkpKTtvZT0ob2U9KG9lPW9lLnJlZElBZGQob2UpKS5yZWRJQWRkKG9lKSkucmVkSUFkZChvZSk7dmFyIHNlPXRoaXMuei5yZWRBZGQoWSkucmVkU3FyKCkucmVkSVN1YihFKS5yZWRJU3ViKFgpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0ZSxvZSxzZSl9LHou''@;'; put 'put ''cHJvdG90eXBlLm11bD1mdW5jdGlvbihJLGspe3JldHVybiBJPW5ldyB4KEksayksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEkpfSx6LnByb3RvdHlwZS5lcT1mdW5jdGlvbihJKXtpZigiYWZmaW5lIj09PUkudHlwZSlyZXR1cm4gdGhpcy5lcShJLnRvSigpKTtpZih0aGlzPT09SSlyZXR1''@;'; put 'put ''cm4hMDt2YXIgaz10aGlzLnoucmVkU3FyKCksRT1JLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoRSkucmVkSVN1YihJLngucmVkTXVsKGspKS5jbXBuKDApKXJldHVybiExO3ZhciBqPWsucmVkTXVsKHRoaXMueiksVj1FLnJlZE11bChJLnopO3JldHVybiAwPT09dGhpcy55LnJl''@;'; put 'put ''ZE11bChWKS5yZWRJU3ViKEkueS5yZWRNdWwoaikpLmNtcG4oMCl9LHoucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihJKXt2YXIgaz10aGlzLnoucmVkU3FyKCksRT1JLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoayk7aWYoMD09PXRoaXMueC5jbXAoRSkpcmV0dXJuITA7Zm9yKHZh''@;'; put 'put ''ciBqPUkuY2xvbmUoKSxWPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoayk7Oyl7aWYoai5pYWRkKHRoaXMuY3VydmUubiksai5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihFLnJlZElBZGQoViksMD09PXRoaXMueC5jbXAoRSkpcmV0dXJuITB9fSx6LnByb3RvdHlwZS5pbnNwZWN0''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sei5w''@;'; put 'put ''cm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw4MDQ5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixhZT1JZSx4PUYoNzEwNzYpLG09Rig5MTMyKSxNPUYoNDY3NjcpLmFzc2VydDtmdW5jdGlvbiBPKEspe3RoaXMuY3VydmU9''@;'; put 'put ''InNob3J0Ij09PUsudHlwZT9uZXcgbS5zaG9ydChLKToiZWR3YXJkcyI9PT1LLnR5cGU/bmV3IG0uZWR3YXJkcyhLKTpuZXcgbS5tb250KEspLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9Sy5oYXNoLE0odGhpcy5nLnZhbGlkYXRlKCksIkludmFs''@;'; put 'put ''aWQgY3VydmUiKSxNKHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gUihLLEkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhZSxLLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''az1uZXcgTyhJKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFlLEsse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmt9KSxrfX0pfWFlLlByZXNldEN1cnZlPU8sUigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6eC5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3''@;'; put 'put ''M2Y5NzdhMSAxZTc5NDgxMSJdfSksUigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6''@;'; put 'put ''eC5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksUigicDI1NiIse3R5''@;'; put 'put ''cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNo''@;'; put 'put ''Onguc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUx''@;'; put 'put ''ZjUiXX0pLFIoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhm''@;'; put 'put ''IDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDp4''@;'; put 'put ''LnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5''@;'; put 'put ''IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxSKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm''@;'; put 'put ''ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0''@;'; put 'put ''ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6eC5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1''@;'; put 'put ''MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQx''@;'; put 'put ''NyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksUigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnguc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLFIoImVkMjU1''@;'; put 'put ''MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRk''@;'; put 'put ''NDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDp4LnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYw''@;'; put 'put ''OTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e3o9RigyNzI3NCl9Y2F0Y2h7ej12b2lkIDB9Uigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2''@;'; put 'put ''IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEi''@;'; put 'put ''LGg6IjEiLGhhc2g6eC5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcy''@;'; put 'put ''IixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxn''@;'; put 'put ''UmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsel19KX0sNjQ0MzooYXQsSWUsRik9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzEzODcpLHg9Rig5MjQ0NyksbT1GKDQ2NzY3KSxsZT1GKDgwNDkpLE09Rig2MDA4MiksTz1tLmFzc2VydCxSPUYoOTEzNzMpLHo9Rig1Nzc0Nik7ZnVuY3Rpb24gSyhJKXtpZighKHRoaXMgaW5zdGFuY2VvZiBLKSlyZXR1cm4gbmV3IEsoSSk7InN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBJJiYoTyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobGUsSSksIlVua25vd24gY3VydmUgIitJKSxJPWxlW0ldKSxJIGluc3RhbmNlb2YgbGUuUHJlc2V0Q3VydmUmJihJPXtjdXJ2ZTpJfSksdGhpcy5jdXJ2ZT1JLmN1cnZlLmN1cnZlLHRoaXMu''@;'; put 'put ''bj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9SS5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKEkuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9SS5oYXNofHxJLmN1cnZlLmhhc2h9YXQuZXhwb3J0cz1LLEsu''@;'; put 'put ''cHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBSKHRoaXMsayl9LEsucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKGssRSl7cmV0dXJuIFIuZnJvbVByaXZhdGUodGhpcyxrLEUpfSxLLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKGssRSl7''@;'; put 'put ''cmV0dXJuIFIuZnJvbVB1YmxpYyh0aGlzLGssRSl9LEsucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24oayl7a3x8KGs9e30pO2Zvcih2YXIgRT1uZXcgeCh7aGFzaDp0aGlzLmhhc2gscGVyczprLnBlcnMscGVyc0VuYzprLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OmsuZW50cm9weXx8''@;'; put 'put ''TSh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOmsuZW50cm9weSYmay5lbnRyb3B5RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLGo9dGhpcy5uLmJ5dGVMZW5ndGgoKSxWPXRoaXMubi5zdWIobmV3IGFlKDIpKTs7KXt2YXIgQj1uZXcgYWUoRS5nZW5lcmF0''@;'; put 'put ''ZShqKSk7aWYoIShCLmNtcChWKT4wKSlyZXR1cm4gQi5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKEIpfX0sSy5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKGssRSl7dmFyIGo9OCprLmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIGo+MCYmKGs9ay51''@;'; put 'put ''c2hybihqKSksIUUmJmsuY21wKHRoaXMubik+PTA/ay5zdWIodGhpcy5uKTprfSxLLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGssRSxqLFYpeyJvYmplY3QiPT10eXBlb2YgaiYmKFY9aixqPW51bGwpLFZ8fChWPXt9KSxFPXRoaXMua2V5RnJvbVByaXZhdGUoRSxqKSxrPXRoaXMuX3RydW5j''@;'; put 'put ''YXRlVG9OKG5ldyBhZShrLDE2KSk7Zm9yKHZhciBCPXRoaXMubi5ieXRlTGVuZ3RoKCksWT1FLmdldFByaXZhdGUoKS50b0FycmF5KCJiZSIsQiksWD1rLnRvQXJyYXkoImJlIixCKSxVPW5ldyB4KHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5Olksbm9uY2U6WCxwZXJzOlYucGVycyxwZXJzRW5j''@;'; put 'put ''OlYucGVyc0VuY3x8InV0ZjgifSkscT10aGlzLm4uc3ViKG5ldyBhZSgxKSksZWU9MDs7ZWUrKyl7dmFyIHRlPVYuaz9WLmsoZWUpOm5ldyBhZShVLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKCh0ZT10aGlzLl90cnVuY2F0ZVRvTih0ZSwhMCkpLmNtcG4oMSk8PTB8fHRl''@;'; put 'put ''LmNtcChxKT49MCkpe3ZhciBvZT10aGlzLmcubXVsKHRlKTtpZighb2UuaXNJbmZpbml0eSgpKXt2YXIgc2U9b2UuZ2V0WCgpLGhlPXNlLnVtb2QodGhpcy5uKTtpZigwIT09aGUuY21wbigwKSl7dmFyIHVlPXRlLmludm0odGhpcy5uKS5tdWwoaGUubXVsKEUuZ2V0UHJpdmF0ZSgpKS5pYWRk''@;'; put 'put ''KGspKTtpZigwIT09KHVlPXVlLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIGNlPShvZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09c2UuY21wKGhlKT8yOjApO3JldHVybiBWLmNhbm9uaWNhbCYmdWUuY21wKHRoaXMubmgpPjAmJih1ZT10aGlzLm4uc3ViKHVlKSxjZV49MSksbmV3IHoo''@;'; put 'put ''e3I6aGUsczp1ZSxyZWNvdmVyeVBhcmFtOmNlfSl9fX19fX0sSy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGssRSxqLFYpe2s9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGFlKGssMTYpKSxqPXRoaXMua2V5RnJvbVB1YmxpYyhqLFYpO3ZhciBCPShFPW5ldyB6KEUsImhleCIpKS5yLFk9RS5z''@;'; put 'put ''O2lmKEIuY21wbigxKTwwfHxCLmNtcCh0aGlzLm4pPj0wfHxZLmNtcG4oMSk8MHx8WS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgZWUsWD1ZLmludm0odGhpcy5uKSxVPVgubXVsKGspLnVtb2QodGhpcy5uKSxxPVgubXVsKEIpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5f''@;'; put 'put ''bWF4d2VsbFRyaWNrPyEoZWU9dGhpcy5nLmptdWxBZGQoVSxqLmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJmVlLmVxWFRvUChCKTohKGVlPXRoaXMuZy5tdWxBZGQoVSxqLmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJjA9PT1lZS5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChC''@;'; put 'put ''KX0sSy5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihJLGssRSxqKXtPKCgzJkUpPT09RSwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLGs9bmV3IHooayxqKTt2YXIgVj10aGlzLm4sQj1uZXcgYWUoSSksWT1rLnIsWD1rLnMsVT0xJkUscT1FPj4x''@;'; put 'put ''O2lmKFkuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZxKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7WT10aGlzLmN1cnZlLnBvaW50RnJvbVgocT9ZLmFkZCh0aGlzLmN1cnZlLm4pOlksVSk7dmFyIGVlPWsu''@;'; put 'put ''ci5pbnZtKFYpLHRlPVYuc3ViKEIpLm11bChlZSkudW1vZChWKSxvZT1YLm11bChlZSkudW1vZChWKTtyZXR1cm4gdGhpcy5nLm11bEFkZCh0ZSxZLG9lKX0sSy5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihJLGssRSxqKXtpZihudWxsIT09KGs9bmV3IHooayxqKSku''@;'; put 'put ''cmVjb3ZlcnlQYXJhbSlyZXR1cm4gay5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVj0wO1Y8NDtWKyspe3ZhciBCO3RyeXtCPXRoaXMucmVjb3ZlclB1YktleShJLGssVil9Y2F0Y2h7Y29udGludWV9aWYoQi5lcShFKSlyZXR1cm4gVn10aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZh''@;'; put 'put ''bGlkIHJlY292ZXJ5IGZhY3RvciIpfX0sOTEzNzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDMxMzg3KSxtPUYoNDY3NjcpLmFzc2VydDtmdW5jdGlvbiBsZShNLE8pe3RoaXMuZWM9TSx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLE8ucHJpdiYmdGhpcy5faW1wb3J0''@;'; put 'put ''UHJpdmF0ZShPLnByaXYsTy5wcml2RW5jKSxPLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKE8ucHViLE8ucHViRW5jKX1hdC5leHBvcnRzPWxlLGxlLmZyb21QdWJsaWM9ZnVuY3Rpb24oTyxSLHope3JldHVybiBSIGluc3RhbmNlb2YgbGU/UjpuZXcgbGUoTyx7cHViOlIscHViRW5jOnp9KX0s''@;'; put 'put ''bGUuZnJvbVByaXZhdGU9ZnVuY3Rpb24oTyxSLHope3JldHVybiBSIGluc3RhbmNlb2YgbGU/UjpuZXcgbGUoTyx7cHJpdjpSLHByaXZFbmM6en0pfSxsZS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgTz10aGlzLmdldFB1YmxpYygpO3JldHVybiBPLmlzSW5maW5pdHkoKT97''@;'; put 'put ''cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMga2V5In06Ty52YWxpZGF0ZSgpP08ubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxy''@;'; put 'put ''ZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQifX0sbGUucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihPLFIpe3JldHVybiJzdHJpbmciPT10eXBlb2YgTyYmKFI9TyxPPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxSP3RoaXMu''@;'; put 'put ''cHViLmVuY29kZShSLE8pOnRoaXMucHVifSxsZS5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbihPKXtyZXR1cm4iaGV4Ij09PU8/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbGUucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKE8sUil7dGhpcy5wcml2''@;'; put 'put ''PW5ldyBhZShPLFJ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sbGUucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oTyxSKXtpZihPLnh8fE8ueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/bShPLngsIk5lZWQgeCBjb29y''@;'; put 'put ''ZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJm0oTy54JiZPLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoTy54LE8ueSkpO3RoaXMu''@;'; put 'put ''cHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoTyxSKX0sbGUucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihPKXtyZXR1cm4gTy52YWxpZGF0ZSgpfHxtKE8udmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxPLm11bCh0aGlzLnByaXYpLmdldFgoKX0sbGUucHJv''@;'; put 'put ''dG90eXBlLnNpZ249ZnVuY3Rpb24oTyxSLHope3JldHVybiB0aGlzLmVjLnNpZ24oTyx0aGlzLFIseil9LGxlLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTyxSKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoTyxSLHRoaXMpfSxsZS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDU3NzQ2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguYXNz''@;'; put 'put ''ZXJ0O2Z1bmN0aW9uIGxlKEssSSl7aWYoSyBpbnN0YW5jZW9mIGxlKXJldHVybiBLO3RoaXMuX2ltcG9ydERFUihLLEkpfHwobShLLnImJksucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBhZShLLnIsMTYpLHRoaXMucz1uZXcgYWUoSy5zLDE2KSx0aGlzLnJlY292''@;'; put 'put ''ZXJ5UGFyYW09dm9pZCAwPT09Sy5yZWNvdmVyeVBhcmFtP251bGw6Sy5yZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiBNKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIE8oSyxJKXt2YXIgaz1LW0kucGxhY2UrK107aWYoISgxMjgmaykpcmV0dXJuIGs7dmFyIEU9MTUmaztpZigwPT09RXx8RT40KXJl''@;'; put 'put ''dHVybiExO2Zvcih2YXIgaj0wLFY9MCxCPUkucGxhY2U7VjxFO1YrKyxCKyspajw8PTgsanw9S1tCXSxqPj4+PTA7cmV0dXJuIShqPD0xMjcpJiYoSS5wbGFjZT1CLGopfWZ1bmN0aW9uIFIoSyl7Zm9yKHZhciBJPTAsaz1LLmxlbmd0aC0xOyFLW0ldJiYhKDEyOCZLW0krMV0pJiZJPGs7KUkr''@;'; put 'put ''KztyZXR1cm4gMD09PUk/SzpLLnNsaWNlKEkpfWZ1bmN0aW9uIHooSyxJKXtpZihJPDEyOClLLnB1c2goSSk7ZWxzZXt2YXIgaz0xKyhNYXRoLmxvZyhJKS9NYXRoLkxOMj4+PjMpO2ZvcihLLnB1c2goMTI4fGspOy0tazspSy5wdXNoKEk+Pj4oazw8MykmMjU1KTtLLnB1c2goSSl9fWF0LmV4''@;'; put 'put ''cG9ydHM9bGUsbGUucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oSSxrKXtJPXgudG9BcnJheShJLGspO3ZhciBFPW5ldyBNO2lmKDQ4IT09SVtFLnBsYWNlKytdKXJldHVybiExO3ZhciBqPU8oSSxFKTtpZighMT09PWp8fGorRS5wbGFjZSE9PUkubGVuZ3RofHwyIT09SVtFLnBsYWNl''@;'; put 'put ''KytdKXJldHVybiExO3ZhciBWPU8oSSxFKTtpZighMT09PVYpcmV0dXJuITE7dmFyIEI9SS5zbGljZShFLnBsYWNlLFYrRS5wbGFjZSk7aWYoRS5wbGFjZSs9ViwyIT09SVtFLnBsYWNlKytdKXJldHVybiExO3ZhciBZPU8oSSxFKTtpZighMT09PVl8fEkubGVuZ3RoIT09WStFLnBsYWNlKXJl''@;'; put 'put ''dHVybiExO3ZhciBYPUkuc2xpY2UoRS5wbGFjZSxZK0UucGxhY2UpO2lmKDA9PT1CWzBdKXtpZighKDEyOCZCWzFdKSlyZXR1cm4hMTtCPUIuc2xpY2UoMSl9aWYoMD09PVhbMF0pe2lmKCEoMTI4JlhbMV0pKXJldHVybiExO1g9WC5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBhZShCKSx0''@;'; put 'put ''aGlzLnM9bmV3IGFlKFgpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxsZS5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24oSSl7dmFyIGs9dGhpcy5yLnRvQXJyYXkoKSxFPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZrWzBdJiYoaz1bMF0uY29uY2F0KGspKSwxMjgmRVswXSYmKEU9WzBd''@;'; put 'put ''LmNvbmNhdChFKSksaz1SKGspLEU9UihFKTshKEVbMF18fDEyOCZFWzFdKTspRT1FLnNsaWNlKDEpO3ZhciBqPVsyXTt6KGosay5sZW5ndGgpLChqPWouY29uY2F0KGspKS5wdXNoKDIpLHooaixFLmxlbmd0aCk7dmFyIFY9ai5jb25jYXQoRSksQj1bNDhdO3JldHVybiB6KEIsVi5sZW5ndGgp''@;'; put 'put ''LEI9Qi5jb25jYXQoVikseC5lbmNvZGUoQixJKX19LDk5NTc3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MTA3NikseD1GKDgwNDkpLG09Rig0Njc2NyksbGU9bS5hc3NlcnQsTT1tLnBhcnNlQnl0ZXMsTz1GKDE3MDEyKSxSPUYoNzgwNjIpO2Z1bmN0aW9uIHooSyl7aWYo''@;'; put 'put ''bGUoImVkMjU1MTkiPT09Sywib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihLKTt0aGlzLmN1cnZlPUs9eFtLXS5jdXJ2ZSx0aGlzLmc9Sy5nLHRoaXMuZy5wcmVjb21wdXRlKEsubi5iaXRMZW5ndGgoKSsxKSx0aGlz''@;'; put 'put ''LnBvaW50Q2xhc3M9Sy5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKEsubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9YWUuc2hhNTEyfWF0LmV4cG9ydHM9eix6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEksayl7ST1NKEkpO3ZhciBFPXRoaXMu''@;'; put 'put ''a2V5RnJvbVNlY3JldChrKSxqPXRoaXMuaGFzaEludChFLm1lc3NhZ2VQcmVmaXgoKSxJKSxWPXRoaXMuZy5tdWwoaiksQj10aGlzLmVuY29kZVBvaW50KFYpLFk9dGhpcy5oYXNoSW50KEIsRS5wdWJCeXRlcygpLEkpLm11bChFLnByaXYoKSksWD1qLmFkZChZKS51bW9kKHRoaXMuY3VydmUu''@;'; put 'put ''bik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpWLFM6WCxSZW5jb2RlZDpCfSl9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihJLGssRSl7ST1NKEkpLGs9dGhpcy5tYWtlU2lnbmF0dXJlKGspO3ZhciBqPXRoaXMua2V5RnJvbVB1YmxpYyhFKSxWPXRoaXMuaGFzaEludChrLlJl''@;'; put 'put ''bmNvZGVkKCksai5wdWJCeXRlcygpLEkpLEI9dGhpcy5nLm11bChrLlMoKSk7cmV0dXJuIGsuUigpLmFkZChqLnB1YigpLm11bChWKSkuZXEoQil9LHoucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIEk9dGhpcy5oYXNoKCksaz0wO2s8YXJndW1lbnRzLmxlbmd0aDtrKysp''@;'; put 'put ''SS51cGRhdGUoYXJndW1lbnRzW2tdKTtyZXR1cm4gbS5pbnRGcm9tTEUoSS5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEkpe3JldHVybiBPLmZyb21QdWJsaWModGhpcyxJKX0sei5wcm90b3R5cGUua2V5RnJvbVNlY3Jl''@;'; put 'put ''dD1mdW5jdGlvbihJKXtyZXR1cm4gTy5mcm9tU2VjcmV0KHRoaXMsSSl9LHoucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiBSP0k6bmV3IFIodGhpcyxJKX0sei5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oSSl7dmFyIGs9SS5n''@;'; put 'put ''ZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBrW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PUkuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsa30sei5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oSSl7dmFyIGs9KEk9bS5wYXJzZUJ5dGVzKEkpKS5sZW5n''@;'; put 'put ''dGgtMSxFPUkuc2xpY2UoMCxrKS5jb25jYXQoLTEyOSZJW2tdKSxqPTAhPSgxMjgmSVtrXSksVj1tLmludEZyb21MRShFKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFYsail9LHoucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbihJKXtyZXR1cm4gSS50b0FycmF5KCJsZSIsdGhp''@;'; put 'put ''cy5lbmNvZGluZ0xlbmd0aCl9LHoucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihJKXtyZXR1cm4gbS5pbnRGcm9tTEUoSSl9LHoucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSwxNzAxMjooYXQsSWUsRik9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIGFlPUYoNDY3NjcpLHg9YWUuYXNzZXJ0LG09YWUucGFyc2VCeXRlcyxsZT1hZS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiBNKE8sUil7dGhpcy5lZGRzYT1PLHRoaXMuX3NlY3JldD1tKFIuc2VjcmV0KSxPLmlzUG9pbnQoUi5wdWIpP3RoaXMuX3B1Yj1SLnB1Yjp0''@;'; put 'put ''aGlzLl9wdWJCeXRlcz1tKFIucHViKX1NLmZyb21QdWJsaWM9ZnVuY3Rpb24oUix6KXtyZXR1cm4geiBpbnN0YW5jZW9mIE0/ejpuZXcgTShSLHtwdWI6en0pfSxNLmZyb21TZWNyZXQ9ZnVuY3Rpb24oUix6KXtyZXR1cm4geiBpbnN0YW5jZW9mIE0/ejpuZXcgTShSLHtzZWNyZXQ6en0pfSxN''@;'; put 'put ''LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxsZShNLCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLGxlKE0sInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/''@;'; put 'put ''dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxsZShNLCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIFI9dGhpcy5lZGRzYSx6PXRoaXMuaGFzaCgpLEs9Ui5lbmNvZGluZ0xlbmd0aC0xLEk9ei5zbGljZSgwLFIu''@;'; put 'put ''ZW5jb2RpbmdMZW5ndGgpO3JldHVybiBJWzBdJj0yNDgsSVtLXSY9MTI3LElbS118PTY0LEl9KSxsZShNLCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLGxlKE0sImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRk''@;'; put 'put ''c2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLGxlKE0sIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksTS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihSKXtyZXR1cm4g''@;'; put 'put ''eCh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKFIsdGhpcyl9LE0ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihSLHope3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShSLHosdGhpcyl9LE0ucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlv''@;'; put 'put ''bihSKXtyZXR1cm4geCh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxhZS5lbmNvZGUodGhpcy5zZWNyZXQoKSxSKX0sTS5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFIpe3JldHVybiBhZS5lbmNvZGUodGhpcy5wdWJCeXRlcygpLFIpfSxhdC5leHBvcnRzPU19''@;'; put 'put ''LDc4MDYyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTM4NykseD1GKDQ2NzY3KSxtPXguYXNzZXJ0LGxlPXguY2FjaGVkUHJvcGVydHksTT14LnBhcnNlQnl0ZXM7ZnVuY3Rpb24gTyhSLHope3RoaXMuZWRkc2E9Uiwib2JqZWN0IiE9dHlwZW9mIHomJih6PU0oeikpLEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoeikmJih6PXtSOnouc2xpY2UoMCxSLmVuY29kaW5nTGVuZ3RoKSxTOnouc2xpY2UoUi5lbmNvZGluZ0xlbmd0aCl9KSxtKHouUiYmei5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxSLmlzUG9pbnQoei5SKSYmKHRoaXMuX1I9ei5SKSx6LlMgaW5zdGFuY2VvZiBh''@;'; put 'put ''ZSYmKHRoaXMuX1M9ei5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KHouUik/ei5SOnouUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheSh6LlMpP3ouUzp6LlNlbmNvZGVkfWxlKE8sIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRo''@;'; put 'put ''aXMuU2VuY29kZWQoKSl9KSxsZShPLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxsZShPLCJSZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxsZShPLCJTZW5j''@;'; put 'put ''b2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksTy5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LE8ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHguZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSxhdC5leHBvcnRzPU99LDI3Mjc0OmF0PT57YXQuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTlj''@;'; put 'put ''NDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1''@;'; put 'put ''N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVh''@;'; put 'put ''ZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4''@;'; put 'put ''YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4''@;'; put 'put ''YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3''@;'; put 'put ''ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhm''@;'; put 'put ''MzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0''@;'; put 'put ''NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkx''@;'; put 'put ''MDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBm''@;'; put 'put ''N2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIx''@;'; put 'put ''MGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0''@;'; put 'put ''NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0''@;'; put 'put ''MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQx''@;'; put 'put ''NzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZm''@;'; put 'put ''ZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1''@;'; put 'put ''YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNl''@;'; put 'put ''YzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIy''@;'; put 'put ''MTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlh''@;'; put 'put ''ODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBm''@;'; put 'put ''YjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2''@;'; put 'put ''NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3''@;'; put 'put ''ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJh''@;'; put 'put ''OTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZm''@;'; put 'put ''YjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3''@;'; put 'put ''MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJi''@;'; put 'put ''ODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFm''@;'; put 'put ''ZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2''@;'; put 'put ''MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5''@;'; put 'put ''OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYz''@;'; put 'put ''ZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3''@;'; put 'put ''ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0''@;'; put 'put ''ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIx''@;'; put 'put ''NTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1''@;'; put 'put ''OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdh''@;'; put 'put ''ZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUx''@;'; put 'put ''M2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRi''@;'; put 'put ''MTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgy''@;'; put 'put ''ZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBm''@;'; put 'put ''OWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEw''@;'; put 'put ''MWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0''@;'; put 'put ''MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBh''@;'; put 'put ''ZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3''@;'; put 'put ''NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkz''@;'; put 'put ''MDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUw''@;'; put 'put ''ZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1''@;'; put 'put ''OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4''@;'; put 'put ''ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3''@;'; put 'put ''ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjVi''@;'; put 'put ''ZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0''@;'; put 'put ''OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5''@;'; put 'put ''OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVh''@;'; put 'put ''NGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4''@;'; put 'put ''OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2Fj''@;'; put 'put ''ODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkz''@;'; put 'put ''NGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1''@;'; put 'put ''Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlh''@;'; put 'put ''YmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRh''@;'; put 'put ''MDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEy''@;'; put 'put ''ZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUw''@;'; put 'put ''NGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdh''@;'; put 'put ''NDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAy''@;'; put 'put ''NzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJk''@;'; put 'put ''ZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZm''@;'; put 'put ''M2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUx''@;'; put 'put ''YzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEy''@;'; put 'put ''MGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5''@;'; put 'put ''NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0Zjhk''@;'; put 'put ''MjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3''@;'; put 'put ''YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdh''@;'; put 'put ''OTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5''@;'; put 'put ''YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5''@;'; put 'put ''NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZl''@;'; put 'put ''OWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3''@;'; put 'put ''ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2''@;'; put 'put ''ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFj''@;'; put 'put ''ZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5''@;'; put 'put ''Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRl''@;'; put 'put ''Y2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2Njgz''@;'; put 'put ''Il0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4''@;'; put 'put ''OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMy''@;'; put 'put ''MTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMw''@;'; put 'put ''NjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJh''@;'; put 'put ''MjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZk''@;'; put 'put ''YmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0''@;'; put 'put ''NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3''@;'; put 'put ''YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5Njdj''@;'; put 'put ''MzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEy''@;'; put 'put ''Y2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0''@;'; put 'put ''YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhk''@;'; put 'put ''Zjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1''@;'; put 'put ''MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2Uz''@;'; put 'put ''ZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3''@;'; put 'put ''MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMw''@;'; put 'put ''NzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5''@;'; put 'put ''NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1''@;'; put 'put ''OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2Iy''@;'; put 'put ''N2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQz''@;'; put 'put ''MWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4''@;'; put 'put ''NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIy''@;'; put 'put ''ZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3''@;'; put 'put ''Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0''@;'; put 'put ''MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3''@;'; put 'put ''NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThm''@;'; put 'put ''YWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQz''@;'; put 'put ''NTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1''@;'; put 'put ''NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUi''@;'; put 'put ''XSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1''@;'; put 'put ''MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3''@;'; put 'put ''MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5''@;'; put 'put ''YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYz''@;'; put 'put ''M2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUw''@;'; put 'put ''NmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRm''@;'; put 'put ''YjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwi''@;'; put 'put ''NmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdi''@;'; put 'put ''M2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcx''@;'; put 'put ''NzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2''@;'; put 'put ''OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUw''@;'; put 'put ''NzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1''@;'; put 'put ''YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRm''@;'; put 'put ''YzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsi''@;'; put 'put ''YzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzEx''@;'; put 'put ''NWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQz''@;'; put 'put ''Y2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYw''@;'; put 'put ''N2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1''@;'; put 'put ''ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODli''@;'; put 'put ''YzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVk''@;'; put 'put ''MTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5''@;'; put 'put ''ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2Nl''@;'; put 'put ''MTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJk''@;'; put 'put ''MGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3''@;'; put 'put ''M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1''@;'; put 'put ''YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5''@;'; put 'put ''Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1''@;'; put 'put ''NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsi''@;'; put 'put ''YjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2Yzdi''@;'; put 'put ''ZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2Uy''@;'; put 'put ''YjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJh''@;'; put 'put ''ZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcw''@;'; put 'put ''ZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFk''@;'; put 'put ''OWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNj''@;'; put 'put ''Y2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQz''@;'; put 'put ''YWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMw''@;'; put 'put ''NzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1''@;'; put 'put ''MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMx''@;'; put 'put ''YTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4''@;'; put 'put ''N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4''@;'; put 'put ''OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5''@;'; put 'put ''MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJi''@;'; put 'put ''MDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVh''@;'; put 'put ''M2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2''@;'; put 'put ''OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2Ez''@;'; put 'put ''MTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAz''@;'; put 'put ''YTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcw''@;'; put 'put ''MzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2Ey''@;'; put 'put ''YjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVk''@;'; put 'put ''OGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2''@;'; put 'put ''OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUy''@;'; put 'put ''ODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sNDY3Njc6KGF0LEllLEYpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBhZT1JZSx4PUYoMzEzODcpLG09Rig1Nzc5OCksbGU9Rig3ODI0Nyk7YWUuYXNzZXJ0PW0sYWUudG9BcnJheT1sZS50b0FycmF5LGFlLnplcm8yPWxlLnplcm8yLGFlLnRvSGV4PWxlLnRvSGV4LGFlLmVuY29kZT1sZS5lbmNvZGUsYWUuZ2V0TkFGPWZ1bmN0aW9u''@;'; put 'put ''IE0oSSxrLEUpe3ZhciBqPW5ldyBBcnJheShNYXRoLm1heChJLmJpdExlbmd0aCgpLEUpKzEpO2ouZmlsbCgwKTtmb3IodmFyIFY9MTw8aysxLEI9SS5jbG9uZSgpLFk9MDtZPGoubGVuZ3RoO1krKyl7dmFyIFgsVT1CLmFuZGxuKFYtMSk7Qi5pc09kZCgpP0IuaXN1Ym4oWD1VPihWPj4xKS0x''@;'; put 'put ''PyhWPj4xKS1VOlUpOlg9MCxqW1ldPVgsQi5pdXNocm4oMSl9cmV0dXJuIGp9LGFlLmdldEpTRj1mdW5jdGlvbiBPKEksayl7dmFyIEU9W1tdLFtdXTtJPUkuY2xvbmUoKSxrPWsuY2xvbmUoKTtmb3IodmFyIEIsaj0wLFY9MDtJLmNtcG4oLWopPjB8fGsuY21wbigtVik+MDspe3ZhciBVLHEs''@;'; put 'put ''WT1JLmFuZGxuKDMpK2omMyxYPWsuYW5kbG4oMykrViYzOzM9PT1ZJiYoWT0tMSksMz09PVgmJihYPS0xKSxVPTEmWT8zIT0oQj1JLmFuZGxuKDcpK2omNykmJjUhPT1CfHwyIT09WD9ZOi1ZOjAsRVswXS5wdXNoKFUpLHE9MSZYPzMhPShCPWsuYW5kbG4oNykrViY3KSYmNSE9PUJ8fDIhPT1Z''@;'; put 'put ''P1g6LVg6MCxFWzFdLnB1c2gocSksMipqPT09VSsxJiYoaj0xLWopLDIqVj09PXErMSYmKFY9MS1WKSxJLml1c2hybigxKSxrLml1c2hybigxKX1yZXR1cm4gRX0sYWUuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gUihJLGssRSl7dmFyIGo9Il8iK2s7SS5wcm90b3R5cGVba109ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdm9pZCAwIT09dGhpc1tqXT90aGlzW2pdOnRoaXNbal09RS5jYWxsKHRoaXMpfX0sYWUucGFyc2VCeXRlcz1mdW5jdGlvbiB6KEkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgST9hZS50b0FycmF5KEksImhleCIpOkl9LGFlLmludEZyb21MRT1mdW5jdGlvbiBLKEkpe3JldHVy''@;'; put 'put ''biBuZXcgeChJLCJoZXgiLCJsZSIpfX0sMzEzODc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1i''@;'; put 'put ''O3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxHLnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2''@;'; put 'put ''O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpGKDg1NTY4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/''@;'; put 'put ''RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTtyZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQo''@;'; put 'put ''QyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31yZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJy''@;'; put 'put ''YXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJl''@;'; put 'put ''dHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9c''@;'; put 'put ''cysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9p''@;'; put 'put ''bml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZlPTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4''@;'; put 'put ''NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2lu''@;'; put 'put ''aXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9mIGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0''@;'; put 'put ''aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEw''@;'; put 'put ''ODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYz''@;'; put 'put ''LHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0yNiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29y''@;'; put 'put ''ZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMs''@;'; put 'put ''Zz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtlbHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18''@;'; put 'put ''PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1I''@;'; put 'put ''LFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9TilwPUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVu''@;'; put 'put ''Z3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5n''@;'; put 'put ''dGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVs''@;'; put 'put ''bCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+''@;'; put 'put ''MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0w''@;'; put 'put ''KSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2''@;'; put 'put ''LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4''@;'; put 'put ''LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8''@;'; put 'put ''MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1DLzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5t''@;'; put 'put ''YXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxE''@;'; put 'put ''LnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUm''@;'; put 'put ''KFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0i''@;'; put 'put ''MCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlmKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3Ry''@;'; put 'put ''aW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUubGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxk''@;'; put 'put ''IGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1''@;'; put 'put ''MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5''@;'; put 'put ''LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxIKXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5n''@;'; put 'put ''dGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1uZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7''@;'; put 'put ''cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0''@;'; put 'put ''aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVy''@;'; put 'put ''biAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0xMyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5f''@;'; put 'put ''Y291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9''@;'; put 'put ''dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXty''@;'; put 'put ''ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9''@;'; put 'put ''LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhp''@;'; put 'put ''cy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29y''@;'; put 'put ''ZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90''@;'; put 'put ''aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJvdG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9''@;'; put 'put ''ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9''@;'; put 'put ''LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9''@;'; put 'put ''dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5s''@;'; put 'put ''ZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlv''@;'; put 'put ''bihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRoLmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMu''@;'; put 'put ''d29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGIm''@;'; put 'put ''JmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYo''@;'; put 'put ''MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9''@;'; put 'put ''dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53''@;'; put 'put ''b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVu''@;'; put 'put ''Z3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRp''@;'; put 'put ''dmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5j''@;'; put 'put ''bG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKToo''@;'; put 'put ''Tj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0''@;'; put 'put ''aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgmJk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9''@;'; put 'put ''Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxOWzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUplPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4x''@;'; put 'put ''MyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxNZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49''@;'; put 'put ''MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLEp0PTB8Z1s2''@;'; put 'put ''XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxnWzddLEluPTgxOTEmWXQsenQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7''@;'; put 'put ''dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVs''@;'; put 'put ''KHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxDbil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwx''@;'; put 'put ''Myl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkrKG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4''@;'; put 'put ''ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoTGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhu''@;'; put 'put ''KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01hdGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAs''@;'; put 'put ''am4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFyPShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8''@;'; put 'put ''MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9''@;'; put 'put ''KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRo''@;'; put 'put ''LmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVsKFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXww''@;'; put 'put ''LHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxmdCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhyPShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8''@;'; put 'put ''MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0o''@;'; put 'put ''cD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01hdGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLEluKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAs''@;'; put 'put ''VWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENuKSxwPShwPU1hdGguaW11bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13''@;'; put 'put ''K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01hdGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5pbXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4''@;'; put 'put ''ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwoTGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhu''@;'; put 'put ''KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0''@;'; put 'put ''aC5pbXVsKGl0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmlt''@;'; put 'put ''dWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChU''@;'; put 'put ''ZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwobHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtl''@;'; put 'put ''LHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxwdCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXwwLHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwx''@;'; put 'put ''Myl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChp''@;'; put 'put ''dCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwodXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0''@;'; put 'put ''KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChYZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAs''@;'; put 'put ''dz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4p''@;'; put 'put ''fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5p''@;'; put 'put ''bXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXwwLHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDApK01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRo''@;'; put 'put ''LmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhu''@;'; put 'put ''KXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKGl0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtN''@;'; put 'put ''YXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCx3PXcrTWF0aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2''@;'; put 'put ''PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVs''@;'; put 'put ''KEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxfdCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYr''@;'; put 'put ''TWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDApK01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRo''@;'; put 'put ''LmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGgu''@;'; put 'put ''aW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0''@;'; put 'put ''KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKGl0LER0KXwwLHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4p''@;'; put 'put ''fDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5p''@;'; put 'put ''bXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0LHB0KSx2PXYrTWF0aC5pbXVsKGl0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAs''@;'; put 'put ''cD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXwwLHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwx''@;'; put 'put ''Myl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChp''@;'; put 'put ''dCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwodXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJu''@;'; put 'put ''KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89''@;'; put 'put ''KFMrKHY9ditNYXRoLmltdWwoaXQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHly''@;'; put 'put ''PShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPVBuLENb''@;'; put 'put ''MV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhyLENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09''@;'; put 'put ''UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCti''@;'; put 'put ''Lmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVuZ3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zv''@;'; put 'put ''cih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtOPTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRz''@;'; put 'put ''W3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4rPShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0''@;'; put 'put ''cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUu''@;'; put 'put ''cHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFy''@;'; put 'put ''IFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGgu''@;'; put 'put ''UEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZvcih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2Zl''@;'; put 'put ''XT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5bSitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49''@;'; put 'put ''MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcrMStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0s''@;'; put 'put ''RFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYz''@;'; put 'put ''JmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9y''@;'; put 'put ''KEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcpKX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFy''@;'; put 'put ''IE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiks''@;'; put 'put ''ZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBm''@;'; put 'put ''ZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2ZlXTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMs''@;'; put 'put ''TiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFy''@;'; put 'put ''cmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11''@;'; put 'put ''bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhpcyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53''@;'; put 'put ''b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxu''@;'; put 'put ''PWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''cG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBiPW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJl''@;'; put 'put ''dHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYmMD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnBy''@;'; put 'put ''b3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNb''@;'; put 'put ''Z10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxDPVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9''@;'; put 'put ''MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihi''@;'; put 'put ''LEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8oRC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2''@;'; put 'put ''YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1sw''@;'; put 'put ''XT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109''@;'; put 'put ''dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49''@;'; put 'put ''ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5w''@;'; put 'put ''cm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0''@;'; put 'put ''aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1h''@;'; put 'put ''c2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIpfSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1iLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlw''@;'; put 'put ''ZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tE''@;'; put 'put ''KzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtl''@;'; put 'put ''bHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''YWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10p''@;'; put 'put ''KkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dv''@;'; put 'put ''cmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIsQz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0''@;'; put 'put ''aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5ndGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVn''@;'; put 'put ''YXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0xO25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNo''@;'; put 'put ''bG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdhdGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYw''@;'; put 'put ''IT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5l''@;'; put 'put ''Z2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/''@;'; put 'put ''KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5u''@;'; put 'put ''ZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9''@;'; put 'put ''PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihi''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9k''@;'; put 'put ''fSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlzLmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21w''@;'; put 'put ''KE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYubmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0''@;'; put 'put ''aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2''@;'; put 'put ''NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNa''@;'; put 'put ''ZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNo''@;'; put 'put ''cm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQuaXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihO''@;'; put 'put ''LmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQo''@;'; put 'put ''cCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1w''@;'; put 'put ''PWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkgu''@;'; put 'put ''Y21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYmUzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2Oysr''@;'; put 'put ''cCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8''@;'; put 'put ''MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7''@;'; put 'put ''Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxI''@;'; put 'put ''PUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''MD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXtt''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8''@;'; put 'put ''dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10''@;'; put 'put ''aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3ZhciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYo''@;'; put 'put ''Yj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgTj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3Ro''@;'; put 'put ''PmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1y''@;'; put 'put ''ZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAxPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9''@;'; put 'put ''LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAoYik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5''@;'; put 'put ''cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxNLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4g''@;'; put 'put ''cmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFk''@;'; put 'put ''eSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5w''@;'; put 'put ''cm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0s''@;'; put 'put ''TS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVs''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz''@;'; put 'put ''LnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRT''@;'; put 'put ''cXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVk''@;'; put 'put ''LCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3co''@;'; put 'put ''dGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5p''@;'; put 'put ''c3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0''@;'; put 'put ''aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''Iil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7''@;'; put 'put ''dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMu''@;'; put 'put ''c2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11''@;'; put 'put ''bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJy''@;'; put 'put ''YXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2''@;'; put 'put ''YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXti''@;'; put 'put ''Lml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8''@;'; put 'put ''TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5sZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8''@;'; put 'put ''Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxl''@;'; put 'put ''bmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5n''@;'; put 'put ''dGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0sbGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxn''@;'; put 'put ''PTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAwIT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09''@;'; put 'put ''YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtpZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5u''@;'; put 'put ''ZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5''@;'; put 'put ''IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIu''@;'; put 'put ''dW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5lZz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIs''@;'; put 'put ''RCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+''@;'; put 'put ''PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rp''@;'; put 'put ''b24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJv''@;'; put 'put ''dG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUu''@;'; put 'put ''aXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgpKX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBE''@;'; put 'put ''PXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRoaXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJu''@;'; put 'put ''KDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMpLFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylw''@;'; put 'put ''LnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBvdyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhl''@;'; put 'put ''PGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUtMSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3Jl''@;'; put 'put ''dHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChEKS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1''@;'; put 'put ''cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgxKS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAm''@;'; put 'put ''JihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndvcmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhp''@;'; put 'put ''cy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFy''@;'; put 'put ''IEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5''@;'; put 'put ''cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIubXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVu''@;'; put 'put ''Z3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMu''@;'; put 'put ''bSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFz''@;'; put 'put ''a24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMu''@;'; put 'put ''bSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDgyMDE2OmF0PT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBhZSxJZT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLEY9SWUmJiJmdW5jdGlvbiI9PXR5cGVvZiBJZS5hcHBseT9JZS5hcHBseTpmdW5jdGlvbihlZSx0ZSxvZSl7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGVlLHRlLG9lKX07YWU9SWUmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBJZS5vd25LZXlzP0llLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihlZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhlZSkpfTpmdW5j''@;'; put 'put ''dGlvbihlZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVlKX07dmFyIG09TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihlZSl7cmV0dXJuIGVlIT1lZX07ZnVuY3Rpb24gbGUoKXtsZS5pbml0LmNhbGwodGhpcyl9YXQuZXhwb3J0cz1sZSxhdC5leHBvcnRzLm9uY2U9ZnVuY3Rp''@;'; put 'put ''b24gWShxLGVlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsb2Upe2Z1bmN0aW9uIHNlKHVlKXtxLnJlbW92ZUxpc3RlbmVyKGVlLGhlKSxvZSh1ZSl9ZnVuY3Rpb24gaGUoKXsiZnVuY3Rpb24iPT10eXBlb2YgcS5yZW1vdmVMaXN0ZW5lciYmcS5yZW1vdmVMaXN0ZW5lcigiZXJy''@;'; put 'put ''b3IiLHNlKSx0ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfVUocSxlZSxoZSx7b25jZTohMH0pLCJlcnJvciIhPT1lZSYmZnVuY3Rpb24gWChxLGVlLHRlKXsiZnVuY3Rpb24iPT10eXBlb2YgcS5vbiYmVShxLCJlcnJvciIsZWUsdGUpfShxLHNlLHtvbmNlOiEwfSl9KX0sbGUuRXZlbnRF''@;'; put 'put ''bWl0dGVyPWxlLGxlLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxsZS5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsbGUucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBNPTEwO2Z1bmN0aW9uIE8ocSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEpdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cignVGhlICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHEpfWZ1bmN0aW9uIFIocSl7cmV0dXJuIHZvaWQgMD09PXEuX21heExpc3RlbmVycz9sZS5kZWZhdWx0TWF4TGlzdGVuZXJzOnEuX21heExpc3RlbmVyc31m''@;'; put 'put ''dW5jdGlvbiB6KHEsZWUsdGUsb2Upe3ZhciBzZSxoZSx1ZTtpZihPKHRlKSx2b2lkIDA9PT0oaGU9cS5fZXZlbnRzKT8oaGU9cS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkscS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PWhlLm5ld0xpc3RlbmVyJiYocS5lbWl0KCJuZXdMaXN0ZW5l''@;'; put 'put ''ciIsZWUsdGUubGlzdGVuZXI/dGUubGlzdGVuZXI6dGUpLGhlPXEuX2V2ZW50cyksdWU9aGVbZWVdKSx2b2lkIDA9PT11ZSl1ZT1oZVtlZV09dGUsKytxLl9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB1ZT91ZT1oZVtlZV09b2U/W3RlLHVlXTpbdWUsdGVdOm9lP3Vl''@;'; put 'put ''LnVuc2hpZnQodGUpOnVlLnB1c2godGUpLChzZT1SKHEpKT4wJiZ1ZS5sZW5ndGg+c2UmJiF1ZS53YXJuZWQpe3VlLndhcm5lZD0hMDt2YXIgY2U9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrdWUubGVuZ3RoKyIgIitTdHJpbmcoZWUp''@;'; put 'put ''KyIgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2NlLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsY2UuZW1pdHRlcj1xLGNlLnR5cGU9ZWUsY2UuY291bnQ9dWUubGVuZ3RoLGZ1bmN0aW9uIHgocSl7''@;'; put 'put ''Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocSl9KGNlKX1yZXR1cm4gcX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBJKHEsZWUsdGUpe3ZhciBvZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6cSx0eXBlOmVlLGxpc3RlbmVyOnRlfSxz''@;'; put 'put ''ZT1LLmJpbmQob2UpO3JldHVybiBzZS5saXN0ZW5lcj10ZSxvZS53cmFwRm49c2Usc2V9ZnVuY3Rpb24gayhxLGVlLHRlKXt2YXIgb2U9cS5fZXZlbnRzO2lmKHZvaWQgMD09PW9lKXJldHVybltdO3ZhciBzZT1vZVtlZV07cmV0dXJuIHZvaWQgMD09PXNlP1tdOiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBzZT90ZT9bc2UubGlzdGVuZXJ8fHNlXTpbc2VdOnRlP2Z1bmN0aW9uIEIocSl7Zm9yKHZhciBlZT1uZXcgQXJyYXkocS5sZW5ndGgpLHRlPTA7dGU8ZWUubGVuZ3RoOysrdGUpZWVbdGVdPXFbdGVdLmxpc3RlbmVyfHxxW3RlXTtyZXR1cm4gZWV9KHNlKTpqKHNlLHNlLmxlbmd0aCl9ZnVu''@;'; put 'put ''Y3Rpb24gRShxKXt2YXIgZWU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWVlKXt2YXIgdGU9ZWVbcV07aWYoImZ1bmN0aW9uIj09dHlwZW9mIHRlKXJldHVybiAxO2lmKHZvaWQgMCE9PXRlKXJldHVybiB0ZS5sZW5ndGh9cmV0dXJuIDB9ZnVuY3Rpb24gaihxLGVlKXtmb3IodmFyIHRlPW5l''@;'; put 'put ''dyBBcnJheShlZSksb2U9MDtvZTxlZTsrK29lKXRlW29lXT1xW29lXTtyZXR1cm4gdGV9ZnVuY3Rpb24gVShxLGVlLHRlLG9lKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcS5vbilvZS5vbmNlP3Eub25jZShlZSx0ZSk6cS5vbihlZSx0ZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcS5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBxKTtxLmFkZEV2ZW50TGlzdGVuZXIoZWUsZnVuY3Rpb24gc2UoaGUpe29lLm9uY2UmJnEu''@;'; put 'put ''cmVtb3ZlRXZlbnRMaXN0ZW5lcihlZSxzZSksdGUoaGUpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE19LHNldDpmdW5jdGlvbihxKXtpZigibnVtYmVyIiE9dHlwZW9mIHF8fHE8''@;'; put 'put ''MHx8bShxKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3ErIi4iKTtNPXF9fSksbGUuaW5pdD1mdW5jdGlvbigpeyh2b2lk''@;'; put 'put ''IDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8''@;'; put 'put ''fHZvaWQgMH0sbGUucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihlZSl7aWYoIm51bWJlciIhPXR5cGVvZiBlZXx8ZWU8MHx8bShlZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0''@;'; put 'put ''aXZlIG51bWJlci4gUmVjZWl2ZWQgJytlZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZWUsdGhpc30sbGUucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBSKHRoaXMpfSxsZS5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlZSl7Zm9yKHZhciB0ZT1b''@;'; put 'put ''XSxvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2UrKyl0ZS5wdXNoKGFyZ3VtZW50c1tvZV0pO3ZhciBzZT0iZXJyb3IiPT09ZWUsaGU9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PWhlKXNlPXNlJiZ2b2lkIDA9PT1oZS5lcnJvcjtlbHNlIGlmKCFzZSlyZXR1cm4hMTtpZihzZSl7dmFyIHVl''@;'; put 'put ''O2lmKHRlLmxlbmd0aD4wJiYodWU9dGVbMF0pLHVlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgdWU7dmFyIGNlPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHVlPyIgKCIrdWUubWVzc2FnZSsiKSI6IiIpKTt0aHJvdyBjZS5jb250ZXh0PXVlLGNlfXZhciBHPWhlW2VlXTtpZih2b2lk''@;'; put 'put ''IDA9PT1HKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBHKUYoRyx0aGlzLHRlKTtlbHNle3ZhciBiPUcubGVuZ3RoLEQ9aihHLGIpO2ZvcihvZT0wO29lPGI7KytvZSlGKERbb2VdLHRoaXMsdGUpfXJldHVybiEwfSxsZS5wcm90b3R5cGUub249bGUucHJvdG90eXBlLmFkZExpc3Rl''@;'; put 'put ''bmVyPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4geih0aGlzLGVlLHRlLCExKX0sbGUucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuIHoodGhpcyxlZSx0ZSwhMCl9LGxlLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGVlLHRlKXtyZXR1cm4gTyh0ZSksdGhp''@;'; put 'put ''cy5vbihlZSxJKHRoaXMsZWUsdGUpKSx0aGlzfSxsZS5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlZSx0ZSl7cmV0dXJuIE8odGUpLHRoaXMucHJlcGVuZExpc3RlbmVyKGVlLEkodGhpcyxlZSx0ZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5vZmY9bGUucHJvdG90eXBl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGVlLHRlKXt2YXIgb2Usc2UsaGUsdWUsY2U7aWYoTyh0ZSksdm9pZCAwPT09KHNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG9lPXNlW2VlXSkpcmV0dXJuIHRoaXM7aWYob2U9PT10ZXx8b2UubGlzdGVuZXI9PT10ZSkw''@;'; put 'put ''PT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgc2VbZWVdLHNlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlZSxvZS5saXN0ZW5lcnx8dGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBv''@;'; put 'put ''ZSl7Zm9yKGhlPS0xLHVlPW9lLmxlbmd0aC0xO3VlPj0wO3VlLS0paWYob2VbdWVdPT09dGV8fG9lW3VlXS5saXN0ZW5lcj09PXRlKXtjZT1vZVt1ZV0ubGlzdGVuZXIsaGU9dWU7YnJlYWt9aWYoaGU8MClyZXR1cm4gdGhpczswPT09aGU/b2Uuc2hpZnQoKTpmdW5jdGlvbiBWKHEsZWUpe2Zv''@;'; put 'put ''cig7ZWUrMTxxLmxlbmd0aDtlZSsrKXFbZWVdPXFbZWUrMV07cS5wb3AoKX0ob2UsaGUpLDE9PT1vZS5sZW5ndGgmJihzZVtlZV09b2VbMF0pLHZvaWQgMCE9PXNlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixlZSxjZXx8dGUpfXJldHVybiB0aGlzfSxsZS5w''@;'; put 'put ''cm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKGVlKXt2YXIgdGUsb2Usc2U7aWYodm9pZCAwPT09KG9lPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09b2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVu''@;'; put 'put ''dHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1vZVtlZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBvZVtlZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3Zh''@;'; put 'put ''ciB1ZSxoZT1PYmplY3Qua2V5cyhvZSk7Zm9yKHNlPTA7c2U8aGUubGVuZ3RoOysrc2UpInJlbW92ZUxpc3RlbmVyIiE9PSh1ZT1oZVtzZV0pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyh1ZSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMu''@;'; put 'put ''X2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YodGU9b2VbZWVdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGVlLHRlKTtlbHNlIGlmKHZvaWQgMCE9PXRlKWZvcihzZT10ZS5sZW5ndGgtMTtzZT49MDtzZS0tKXRo''@;'; put 'put ''aXMucmVtb3ZlTGlzdGVuZXIoZWUsdGVbc2VdKTtyZXR1cm4gdGhpc30sbGUucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihlZSl7cmV0dXJuIGsodGhpcyxlZSwhMCl9LGxlLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oZWUpe3JldHVybiBrKHRoaXMsZWUsITEpfSxsZS5s''@;'; put 'put ''aXN0ZW5lckNvdW50PWZ1bmN0aW9uKHEsZWUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBxLmxpc3RlbmVyQ291bnQ/cS5saXN0ZW5lckNvdW50KGVlKTpFLmNhbGwocSxlZSl9LGxlLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PUUsbGUucHJvdG90eXBlLmV2ZW50TmFtZXM9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9hZSh0aGlzLl9ldmVudHMpOltdfX0sMzY1MDU6KGF0LEllLEYpPT57dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDc1ODI5KTthdC5leHBvcnRzPWZ1bmN0aW9uIG0obGUsTSxPLFIpe2lmKGFlLmlzQnVmZmVyKGxlKXx8KGxlPWFlLmZyb20o''@;'; put 'put ''bGUsImJpbmFyeSIpKSxNJiYoYWUuaXNCdWZmZXIoTSl8fChNPWFlLmZyb20oTSwiYmluYXJ5IikpLDghPT1NLmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIHo9Ty84LEs9YWUuYWxsb2Moeiks''@;'; put 'put ''ST1hZS5hbGxvYyhSfHwwKSxrPWFlLmFsbG9jKDApO3o+MHx8Uj4wOyl7dmFyIEU9bmV3IHg7RS51cGRhdGUoayksRS51cGRhdGUobGUpLE0mJkUudXBkYXRlKE0pLGs9RS5kaWdlc3QoKTt2YXIgaj0wO2lmKHo+MCl7dmFyIFY9Sy5sZW5ndGgtejtqPU1hdGgubWluKHosay5sZW5ndGgpLGsu''@;'; put 'put ''Y29weShLLFYsMCxqKSx6LT1qfWlmKGo8ay5sZW5ndGgmJlI+MCl7dmFyIEI9SS5sZW5ndGgtUixZPU1hdGgubWluKFIsay5sZW5ndGgtaik7ay5jb3B5KEksQixqLGorWSksUi09WX19cmV0dXJuIGsuZmlsbCgwKSx7a2V5OkssaXY6SX19fSw2MDM4MDooYXQsSWUsRik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGFlPUYoODQzKS5CdWZmZXIseD1GKDk2NzQ1KS5UcmFuc2Zvcm07ZnVuY3Rpb24gTShPKXt4LmNhbGwodGhpcyksdGhpcy5fYmxvY2s9YWUuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRo''@;'; put 'put ''aXMuX2ZpbmFsaXplZD0hMX1GKDY2Njk4KShNLHgpLE0ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyxSLHope3ZhciBLPW51bGw7dHJ5e3RoaXMudXBkYXRlKE8sUil9Y2F0Y2goSSl7Sz1JfXooSyl9LE0ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgUj1udWxsO3Ry''@;'; put 'put ''eXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goeil7Uj16fU8oUil9LE0ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPLFIpe2lmKGZ1bmN0aW9uIGxlKE8sUil7aWYoIWFlLmlzQnVmZmVyKE8pJiYic3RyaW5nIiE9dHlwZW9mIE8pdGhyb3cgbmV3IFR5cGVFcnJvcihSKyIgbXVz''@;'; put 'put ''dCBiZSBhIHN0cmluZyBvciBhIGJ1ZmZlciIpfShPLCJEYXRhIiksdGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7YWUuaXNCdWZmZXIoTyl8fChPPWFlLmZyb20oTyxSKSk7Zm9yKHZhciB6PXRoaXMuX2Jsb2NrLEs9MDt0aGlzLl9ibG9j''@;'; put 'put ''a09mZnNldCtPLmxlbmd0aC1LPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIEk9dGhpcy5fYmxvY2tPZmZzZXQ7STx0aGlzLl9ibG9ja1NpemU7KXpbSSsrXT1PW0srK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO0s8Ty5sZW5ndGg7KXpbdGhpcy5fYmxvY2tP''@;'; put 'put ''ZmZzZXQrK109T1tLKytdO2Zvcih2YXIgaz0wLEU9OCpPLmxlbmd0aDtFPjA7KytrKXRoaXMuX2xlbmd0aFtrXSs9RSwoRT10aGlzLl9sZW5ndGhba10vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW2tdLT00Mjk0OTY3Mjk2KkUpO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxNLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7dGhpcy5fZmluYWxp''@;'; put 'put ''emVkPSEwO3ZhciBSPXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PU8mJihSPVIudG9TdHJpbmcoTykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIHo9MDt6PDQ7Kyt6KXRoaXMuX2xlbmd0aFt6XT0wO3JldHVybiBSfSxNLnByb3RvdHlwZS5fZGlnZXN0''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxhdC5leHBvcnRzPU19LDcxMDc2OihhdCxJZSxGKT0+e3ZhciBhZT1JZTthZS51dGlscz1GKDE5ODc1KSxhZS5jb21tb249Rig5MjA4NSksYWUuc2hhPUYoNTc2NTgpLGFlLnJpcGVtZD1G''@;'; put 'put ''KDQ4MzQ0KSxhZS5obWFjPUYoNzYxOTIpLGFlLnNoYTE9YWUuc2hhLnNoYTEsYWUuc2hhMjU2PWFlLnNoYS5zaGEyNTYsYWUuc2hhMjI0PWFlLnNoYS5zaGEyMjQsYWUuc2hhMzg0PWFlLnNoYS5zaGEzODQsYWUuc2hhNTEyPWFlLnNoYS5zaGE1MTIsYWUucmlwZW1kMTYwPWFlLnJpcGVtZC5y''@;'; put 'put ''aXBlbWQxNjB9LDkyMDg1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDU3Nzk4KTtmdW5jdGlvbiBtKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlz''@;'; put 'put ''Lm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxv''@;'; put 'put ''Y2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1JZS5CbG9ja0hhc2g9bSxtLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTSxPKXtpZihNPWFlLnRvQXJyYXkoTSxPKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQoTSk6TSx0aGlz''@;'; put 'put ''LnBlbmRpbmdUb3RhbCs9TS5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgUj0oTT10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPU0uc2xpY2UoTS5sZW5ndGgtUixNLmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5n''@;'; put 'put ''dGgmJih0aGlzLnBlbmRpbmc9bnVsbCksTT1hZS5qb2luMzIoTSwwLE0ubGVuZ3RoLVIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgej0wO3o8TS5sZW5ndGg7eis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoTSx6LHordGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG0ucHJvdG90eXBlLmRp''@;'; put 'put ''Z2VzdD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLHgobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KE0pfSxtLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIE09dGhpcy5wZW5kaW5nVG90YWwsTz10aGlzLl9kZWx0YTgsUj1PLShNK3Ro''@;'; put 'put ''aXMucGFkTGVuZ3RoKSVPLHo9bmV3IEFycmF5KFIrdGhpcy5wYWRMZW5ndGgpO3pbMF09MTI4O2Zvcih2YXIgSz0xO0s8UjtLKyspeltLXT0wO2lmKE08PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgST04O0k8dGhpcy5wYWRMZW5ndGg7SSsrKXpbSysrXT0wO3pbSysrXT0wLHpb''@;'; put 'put ''SysrXT0wLHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT1NPj4+MjQmMjU1LHpbSysrXT1NPj4+MTYmMjU1LHpbSysrXT1NPj4+OCYyNTUseltLKytdPTI1NSZNfWVsc2UgZm9yKHpbSysrXT0yNTUmTSx6W0srK109TT4+PjgmMjU1LHpbSysrXT1NPj4+MTYmMjU1LHpbSysrXT1NPj4+MjQmMjU1''@;'; put 'put ''LHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLHpbSysrXT0wLEk9ODtJPHRoaXMucGFkTGVuZ3RoO0krKyl6W0srK109MDtyZXR1cm4gen19LDc2MTkyOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDU3Nzk4KTtmdW5jdGlvbiBtKGxlLE0sTyl7aWYoISh0''@;'; put 'put ''aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtKGxlLE0sTyk7dGhpcy5IYXNoPWxlLHRoaXMuYmxvY2tTaXplPWxlLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1sZS5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KGFlLnRvQXJyYXkoTSxP''@;'; put 'put ''KSl9YXQuZXhwb3J0cz1tLG0ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE0pe00ubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYoTT0obmV3IHRoaXMuSGFzaCkudXBkYXRlKE0pLmRpZ2VzdCgpKSx4KE0ubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBPPU0ubGVuZ3RoO088dGhpcy5i''@;'; put 'put ''bG9ja1NpemU7TysrKU0ucHVzaCgwKTtmb3IoTz0wO088TS5sZW5ndGg7TysrKU1bT11ePTU0O2Zvcih0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoTSksTz0wO088TS5sZW5ndGg7TysrKU1bT11ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoTSl9LG0u''@;'; put 'put ''cHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihNLE8pe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZShNLE8pLHRoaXN9LG0ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihNKXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QoTSl9''@;'; put 'put ''fSw0ODM0NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1hZS5yb3RsMzIsbGU9YWUuc3VtMzIsTT1hZS5zdW0zMl8zLE89YWUuc3VtMzJfNCxSPXguQmxvY2tIYXNoO2Z1bmN0aW9uIHooKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1''@;'; put 'put ''cm4gbmV3IHo7Ui5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIEsoWSxYLFUscSl7cmV0dXJuIFk8PTE1P1heVV5xOlk8PTMxP1gmVXx+WCZxOlk8PTQ3''@;'; put 'put ''PyhYfH5VKV5xOlk8PTYzP1gmcXxVJn5xOlheKFV8fnEpfWZ1bmN0aW9uIGsoWSl7cmV0dXJuIFk8PTE1PzEzNTI4Mjk5MjY6WTw9MzE/MTU0ODYwMzY4NDpZPD00Nz8xODM2MDcyNjkxOlk8PTYzPzIwNTM5OTQyMTc6MH1hZS5pbmhlcml0cyh6LFIpLEllLnJpcGVtZDE2MD16LHouYmxvY2tT''@;'; put 'put ''aXplPTUxMix6Lm91dFNpemU9MTYwLHouaG1hY1N0cmVuZ3RoPTE5Mix6LnBhZExlbmd0aD02NCx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFgsVSl7Zm9yKHZhciBxPXRoaXMuaFswXSxlZT10aGlzLmhbMV0sdGU9dGhpcy5oWzJdLG9lPXRoaXMuaFszXSxzZT10aGlzLmhbNF0saGU9''@;'; put 'put ''cSx1ZT1lZSxjZT10ZSxHPW9lLGI9c2UsRD0wO0Q8ODA7RCsrKXt2YXIgSD1sZShtKE8ocSxLKEQsZWUsdGUsb2UpLFhbRVtEXStVXSwoWT1EKTw9MTU/MDpZPD0zMT8xNTE4NTAwMjQ5Olk8PTQ3PzE4NTk3NzUzOTM6WTw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxWW0RdKSxzZSk7cT1z''@;'; put 'put ''ZSxzZT1vZSxvZT1tKHRlLDEwKSx0ZT1lZSxlZT1ILEg9bGUobShPKGhlLEsoNzktRCx1ZSxjZSxHKSxYW2pbRF0rVV0sayhEKSksQltEXSksYiksaGU9YixiPUcsRz1tKGNlLDEwKSxjZT11ZSx1ZT1IfXZhciBZO0g9TSh0aGlzLmhbMV0sdGUsRyksdGhpcy5oWzFdPU0odGhpcy5oWzJdLG9l''@;'; put 'put ''LGIpLHRoaXMuaFsyXT1NKHRoaXMuaFszXSxzZSxoZSksdGhpcy5oWzNdPU0odGhpcy5oWzRdLHEsdWUpLHRoaXMuaFs0XT1NKHRoaXMuaFswXSxlZSxjZSksdGhpcy5oWzBdPUh9LHoucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oWCl7cmV0dXJuImhleCI9PT1YP2FlLnRvSGV4MzIodGhp''@;'; put 'put ''cy5oLCJsaXR0bGUiKTphZS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBFPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwx''@;'; put 'put ''LDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGo9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3''@;'; put 'put ''LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywx''@;'; put 'put ''NSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sQj1bOCw5LDksMTEsMTMsMTUsMTUs''@;'; put 'put ''NSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEz''@;'; put 'put ''LDYsNSwxNSwxMywxMSwxMV19LDU3NjU4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtJZS5zaGExPUYoNzUwMTApLEllLnNoYTIyND1GKDgzNTc4KSxJZS5zaGEyNTY9Rig5Nzg1NyksSWUuc2hhMzg0PUYoNjg3MjMpLEllLnNoYTUxMj1GKDQ1MzA0KX0sNzUwMTA6KGF0LEllLEYpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09Rig3MjIxKSxsZT1hZS5yb3RsMzIsTT1hZS5zdW0zMixPPWFlLnN1bTMyXzUsUj1tLmZ0XzEsej14LkJsb2NrSGFzaCxLPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtmdW5jdGlvbiBJ''@;'; put 'put ''KCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJO3ouY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLlc9bmV3IEFycmF5KDgwKX1hZS5pbmhlcml0cyhJLHopLGF0LmV4cG9ydHM9''@;'; put 'put ''SSxJLmJsb2NrU2l6ZT01MTIsSS5vdXRTaXplPTE2MCxJLmhtYWNTdHJlbmd0aD04MCxJLnBhZExlbmd0aD02NCxJLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEUsail7Zm9yKHZhciBWPXRoaXMuVyxCPTA7QjwxNjtCKyspVltCXT1FW2orQl07Zm9yKDtCPFYubGVuZ3RoO0IrKylWW0Jd''@;'; put 'put ''PWxlKFZbQi0zXV5WW0ItOF1eVltCLTE0XV5WW0ItMTZdLDEpO3ZhciBZPXRoaXMuaFswXSxYPXRoaXMuaFsxXSxVPXRoaXMuaFsyXSxxPXRoaXMuaFszXSxlZT10aGlzLmhbNF07Zm9yKEI9MDtCPFYubGVuZ3RoO0IrKyl7dmFyIHRlPX5+KEIvMjApLG9lPU8obGUoWSw1KSxSKHRlLFgsVSxx''@;'; put 'put ''KSxlZSxWW0JdLEtbdGVdKTtlZT1xLHE9VSxVPWxlKFgsMzApLFg9WSxZPW9lfXRoaXMuaFswXT1NKHRoaXMuaFswXSxZKSx0aGlzLmhbMV09TSh0aGlzLmhbMV0sWCksdGhpcy5oWzJdPU0odGhpcy5oWzJdLFUpLHRoaXMuaFszXT1NKHRoaXMuaFszXSxxKSx0aGlzLmhbNF09TSh0aGlzLmhb''@;'; put 'put ''NF0sZWUpfSxJLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEUpe3JldHVybiJoZXgiPT09RT9hZS50b0hleDMyKHRoaXMuaCwiYmlnIik6YWUuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sODM1Nzg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTc4NTcp''@;'; put 'put ''O2Z1bmN0aW9uIG0oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBtKSlyZXR1cm4gbmV3IG07eC5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19YWUuaW5o''@;'; put 'put ''ZXJpdHMobSx4KSxhdC5leHBvcnRzPW0sbS5ibG9ja1NpemU9NTEyLG0ub3V0U2l6ZT0yMjQsbS5obWFjU3RyZW5ndGg9MTkyLG0ucGFkTGVuZ3RoPTY0LG0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oTSl7cmV0dXJuImhleCI9PT1NP2FlLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyks''@;'; put 'put ''ImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0sOTc4NTc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDE5ODc1KSx4PUYoOTIwODUpLG09Rig3MjIxKSxsZT1GKDU3Nzk4KSxNPWFlLnN1bTMyLE89YWUuc3VtMzJfNCxSPWFlLnN1bTMyXzUsej1t''@;'; put 'put ''LmNoMzIsSz1tLm1hajMyLEk9bS5zMF8yNTYsaz1tLnMxXzI1NixFPW0uZzBfMjU2LGo9bS5nMV8yNTYsVj14LkJsb2NrSGFzaCxCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwz''@;'; put 'put ''NjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2''@;'; put 'put ''NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUw''@;'; put 'put ''LDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1Mzcw''@;'; put 'put ''MDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdO2Z1bmN0aW9uIFkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBZKSlyZXR1cm4gbmV3IFk7Vi5jYWxsKHRo''@;'; put 'put ''aXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1CLHRoaXMuVz1uZXcgQXJyYXkoNjQpfWFlLmluaGVyaXRzKFksViksYXQuZXhwb3J0cz1ZLFkuYmxv''@;'; put 'put ''Y2tTaXplPTUxMixZLm91dFNpemU9MjU2LFkuaG1hY1N0cmVuZ3RoPTE5MixZLnBhZExlbmd0aD02NCxZLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUscSl7Zm9yKHZhciBlZT10aGlzLlcsdGU9MDt0ZTwxNjt0ZSsrKWVlW3RlXT1VW3ErdGVdO2Zvcig7dGU8ZWUubGVuZ3RoO3RlKysp''@;'; put 'put ''ZWVbdGVdPU8oaihlZVt0ZS0yXSksZWVbdGUtN10sRShlZVt0ZS0xNV0pLGVlW3RlLTE2XSk7dmFyIG9lPXRoaXMuaFswXSxzZT10aGlzLmhbMV0saGU9dGhpcy5oWzJdLHVlPXRoaXMuaFszXSxjZT10aGlzLmhbNF0sRz10aGlzLmhbNV0sYj10aGlzLmhbNl0sRD10aGlzLmhbN107Zm9yKGxl''@;'; put 'put ''KHRoaXMuay5sZW5ndGg9PT1lZS5sZW5ndGgpLHRlPTA7dGU8ZWUubGVuZ3RoO3RlKyspe3ZhciBIPVIoRCxrKGNlKSx6KGNlLEcsYiksdGhpcy5rW3RlXSxlZVt0ZV0pLE49TShJKG9lKSxLKG9lLHNlLGhlKSk7RD1iLGI9RyxHPWNlLGNlPU0odWUsSCksdWU9aGUsaGU9c2Usc2U9b2Usb2U9''@;'; put 'put ''TShILE4pfXRoaXMuaFswXT1NKHRoaXMuaFswXSxvZSksdGhpcy5oWzFdPU0odGhpcy5oWzFdLHNlKSx0aGlzLmhbMl09TSh0aGlzLmhbMl0saGUpLHRoaXMuaFszXT1NKHRoaXMuaFszXSx1ZSksdGhpcy5oWzRdPU0odGhpcy5oWzRdLGNlKSx0aGlzLmhbNV09TSh0aGlzLmhbNV0sRyksdGhp''@;'; put 'put ''cy5oWzZdPU0odGhpcy5oWzZdLGIpLHRoaXMuaFs3XT1NKHRoaXMuaFs3XSxEKX0sWS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihVKXtyZXR1cm4iaGV4Ij09PVU/YWUudG9IZXgzMih0aGlzLmgsImJpZyIpOmFlLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDY4NzIzOihhdCxJZSxGKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxOTg3NSkseD1GKDQ1MzA0KTtmdW5jdGlvbiBtKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbSkpcmV0dXJuIG5ldyBtO3guY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5Mzcw''@;'; put 'put ''LDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfWFlLmluaGVyaXRzKG0seCksYXQuZXhwb3J0cz1tLG0uYmxvY2tTaXplPTEw''@;'; put 'put ''MjQsbS5vdXRTaXplPTM4NCxtLmhtYWNTdHJlbmd0aD0xOTIsbS5wYWRMZW5ndGg9MTI4LG0ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oTSl7cmV0dXJuImhleCI9PT1NP2FlLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEy''@;'; put 'put ''KSwiYmlnIil9fSw0NTMwNDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTk4NzUpLHg9Rig5MjA4NSksbT1GKDU3Nzk4KSxsZT1hZS5yb3RyNjRfaGksTT1hZS5yb3RyNjRfbG8sTz1hZS5zaHI2NF9oaSxSPWFlLnNocjY0X2xvLHo9YWUuc3VtNjQsSz1hZS5zdW02NF9oaSxJ''@;'; put 'put ''PWFlLnN1bTY0X2xvLGs9YWUuc3VtNjRfNF9oaSxFPWFlLnN1bTY0XzRfbG8saj1hZS5zdW02NF81X2hpLFY9YWUuc3VtNjRfNV9sbyxCPXguQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAw''@;'; put 'put ''OTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2''@;'; put 'put ''NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIz''@;'; put 'put ''NDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5''@;'; put 'put ''OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0''@;'; put 'put ''LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEs''@;'; put 'put ''MzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5''@;'; put 'put ''NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAw''@;'; put 'put ''MTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0''@;'; put 'put ''LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3''@;'; put 'put ''MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkx''@;'; put 'put ''XTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO0IuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5''@;'; put 'put ''ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1ZLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBVKEgsTixnLEMsUyl7dmFyIHY9SCZnXn5IJlM7cmV0dXJuIHY8MCYmKHYr''@;'; put 'put ''PTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gcShILE4sZyxDLFMsdil7dmFyIHA9TiZDXn5OJnY7cmV0dXJuIHA8MCYmKHArPTQyOTQ5NjcyOTYpLHB9ZnVuY3Rpb24gZWUoSCxOLGcsQyxTKXt2YXIgdj1IJmdeSCZTXmcmUztyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiB0''@;'; put 'put ''ZShILE4sZyxDLFMsdil7dmFyIHA9TiZDXk4mdl5DJnY7cmV0dXJuIHA8MCYmKHArPTQyOTQ5NjcyOTYpLHB9ZnVuY3Rpb24gb2UoSCxOKXt2YXIgdj1sZShILE4sMjgpXmxlKE4sSCwyKV5sZShOLEgsNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gc2UoSCxOKXt2''@;'; put 'put ''YXIgdj1NKEgsTiwyOCleTShOLEgsMileTShOLEgsNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gaGUoSCxOKXt2YXIgdj1sZShILE4sMTQpXmxlKEgsTiwxOClebGUoTixILDkpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIHVlKEgsTil7''@;'; put 'put ''dmFyIHY9TShILE4sMTQpXk0oSCxOLDE4KV5NKE4sSCw5KTtyZXR1cm4gdjwwJiYodis9NDI5NDk2NzI5Niksdn1mdW5jdGlvbiBjZShILE4pe3ZhciB2PWxlKEgsTiwxKV5sZShILE4sOCleTyhILE4sNyk7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gRyhILE4pe3Zh''@;'; put 'put ''ciB2PU0oSCxOLDEpXk0oSCxOLDgpXlIoSCxOLDcpO3JldHVybiB2PDAmJih2Kz00Mjk0OTY3Mjk2KSx2fWZ1bmN0aW9uIGIoSCxOKXt2YXIgdj1sZShILE4sMTkpXmxlKE4sSCwyOSleTyhILE4sNik7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9ZnVuY3Rpb24gRChILE4pe3ZhciB2''@;'; put 'put ''PU0oSCxOLDE5KV5NKE4sSCwyOSleUihILE4sNik7cmV0dXJuIHY8MCYmKHYrPTQyOTQ5NjcyOTYpLHZ9YWUuaW5oZXJpdHMoWCxCKSxhdC5leHBvcnRzPVgsWC5ibG9ja1NpemU9MTAyNCxYLm91dFNpemU9NTEyLFguaG1hY1N0cmVuZ3RoPTE5MixYLnBhZExlbmd0aD0xMjgsWC5wcm90b3R5''@;'; put 'put ''cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihOLGcpe2Zvcih2YXIgQz10aGlzLlcsUz0wO1M8MzI7UysrKUNbU109TltnK1NdO2Zvcig7UzxDLmxlbmd0aDtTKz0yKXt2YXIgdj1iKENbUy00XSxDW1MtM10pLHA9RChDW1MtNF0sQ1tTLTNdKSx3PUNbUy0xNF0sSj1DW1MtMTNdLG5lPWNlKENb''@;'; put 'put ''Uy0zMF0sQ1tTLTI5XSksZGU9RyhDW1MtMzBdLENbUy0yOV0pLGZlPUNbUy0zMl0seGU9Q1tTLTMxXTtDW1NdPWsodixwLHcsSixuZSxkZSxmZSx4ZSksQ1tTKzFdPUUodixwLHcsSixuZSxkZSxmZSx4ZSl9fSxYLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4sZyl7dGhpcy5fcHJlcGFy''@;'; put 'put ''ZUJsb2NrKE4sZyk7dmFyIEM9dGhpcy5XLFM9dGhpcy5oWzBdLHY9dGhpcy5oWzFdLHA9dGhpcy5oWzJdLHc9dGhpcy5oWzNdLEo9dGhpcy5oWzRdLG5lPXRoaXMuaFs1XSxkZT10aGlzLmhbNl0sZmU9dGhpcy5oWzddLHhlPXRoaXMuaFs4XSxMZT10aGlzLmhbOV0sRmU9dGhpcy5oWzEwXSxP''@;'; put 'put ''ZT10aGlzLmhbMTFdLGplPXRoaXMuaFsxMl0sV2U9dGhpcy5oWzEzXSxLZT10aGlzLmhbMTRdLFllPXRoaXMuaFsxNV07bSh0aGlzLmsubGVuZ3RoPT09Qy5sZW5ndGgpO2Zvcih2YXIgSmU9MDtKZTxDLmxlbmd0aDtKZSs9Mil7dmFyIGx0PUtlLFBlPVllLGJlPWhlKHhlLExlKSxBZT11ZSh4''@;'; put 'put ''ZSxMZSksVGU9VSh4ZSwwLEZlLDAsamUpLHFlPXEoMCxMZSwwLE9lLDAsV2UpLFhlPXRoaXMua1tKZV0sVWU9dGhpcy5rW0plKzFdLGh0PUNbSmVdLE1lPUNbSmUrMV0sRGU9aihsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodCxNZSksemU9VihsdCxQZSxiZSxBZSxUZSxxZSxYZSxVZSxodCxN''@;'; put 'put ''ZSk7bHQ9b2UoUyx2KSxQZT1zZShTLHYpLGJlPWVlKFMsMCxwLDAsSiksQWU9dGUoMCx2LDAsdywwLG5lKTt2YXIgaXQ9SyhsdCxQZSxiZSxBZSksdXQ9SShsdCxQZSxiZSxBZSk7S2U9amUsWWU9V2UsamU9RmUsV2U9T2UsRmU9eGUsT2U9TGUseGU9SyhkZSxmZSxEZSx6ZSksTGU9SShmZSxm''@;'; put 'put ''ZSxEZSx6ZSksZGU9SixmZT1uZSxKPXAsbmU9dyxwPVMsdz12LFM9SyhEZSx6ZSxpdCx1dCksdj1JKERlLHplLGl0LHV0KX16KHRoaXMuaCwwLFMsdikseih0aGlzLmgsMixwLHcpLHoodGhpcy5oLDQsSixuZSkseih0aGlzLmgsNixkZSxmZSkseih0aGlzLmgsOCx4ZSxMZSkseih0aGlzLmgs''@;'; put 'put ''MTAsRmUsT2UpLHoodGhpcy5oLDEyLGplLFdlKSx6KHRoaXMuaCwxNCxLZSxZZSl9LFgucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oTil7cmV0dXJuImhleCI9PT1OP2FlLnRvSGV4MzIodGhpcy5oLCJiaWciKTphZS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MjIxOihhdCxJZSxGKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeD1GKDE5ODc1KS5yb3RyMzI7ZnVuY3Rpb24gbGUoayxFLGope3JldHVybiBrJkVefmsman1mdW5jdGlvbiBNKGssRSxqKXtyZXR1cm4gayZFXmsmal5FJmp9ZnVuY3Rpb24gTyhrLEUsail7cmV0dXJuIGteRV5qfUllLmZ0XzE9ZnVuY3Rpb24gbShrLEUsaixW''@;'; put 'put ''KXtyZXR1cm4gMD09PWs/bGUoRSxqLFYpOjE9PT1rfHwzPT09az9PKEUsaixWKToyPT09az9NKEUsaixWKTp2b2lkIDB9LEllLmNoMzI9bGUsSWUubWFqMzI9TSxJZS5wMzI9TyxJZS5zMF8yNTY9ZnVuY3Rpb24gUihrKXtyZXR1cm4geChrLDIpXngoaywxMyleeChrLDIyKX0sSWUuczFfMjU2''@;'; put 'put ''PWZ1bmN0aW9uIHooayl7cmV0dXJuIHgoayw2KV54KGssMTEpXngoaywyNSl9LEllLmcwXzI1Nj1mdW5jdGlvbiBLKGspe3JldHVybiB4KGssNyleeChrLDE4KV5rPj4+M30sSWUuZzFfMjU2PWZ1bmN0aW9uIEkoayl7cmV0dXJuIHgoaywxNyleeChrLDE5KV5rPj4+MTB9fSwxOTg3NTooYXQs''@;'; put 'put ''SWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTc3OTgpLHg9Rig2NjY5OCk7ZnVuY3Rpb24gbShELEgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZELmNoYXJDb2RlQXQoSCkpfHxIPDB8fEgrMT49RC5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJkQuY2hhckNvZGVBdChIKzEpKX1mdW5jdGlv''@;'; put 'put ''biBPKEQpe3JldHVybihEPj4+MjR8RD4+PjgmNjUyODB8RDw8OCYxNjcxMTY4MHwoMjU1JkQpPDwyNCk+Pj4wfWZ1bmN0aW9uIHooRCl7cmV0dXJuIDE9PT1ELmxlbmd0aD8iMCIrRDpEfWZ1bmN0aW9uIEsoRCl7cmV0dXJuIDc9PT1ELmxlbmd0aD8iMCIrRDo2PT09RC5sZW5ndGg/IjAwIitE''@;'; put 'put ''OjU9PT1ELmxlbmd0aD8iMDAwIitEOjQ9PT1ELmxlbmd0aD8iMDAwMCIrRDozPT09RC5sZW5ndGg/IjAwMDAwIitEOjI9PT1ELmxlbmd0aD8iMDAwMDAwIitEOjE9PT1ELmxlbmd0aD8iMDAwMDAwMCIrRDpEfUllLmluaGVyaXRzPXgsSWUudG9BcnJheT1mdW5jdGlvbiBsZShELEgpe2lmKEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoRCkpcmV0dXJuIEQuc2xpY2UoKTtpZighRClyZXR1cm5bXTt2YXIgTj1bXTtpZigic3RyaW5nIj09dHlwZW9mIEQpaWYoSCl7aWYoImhleCI9PT1IKWZvcigoRD1ELnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEQ9IjAiK0QpLEM9MDtDPEQu''@;'; put 'put ''bGVuZ3RoO0MrPTIpTi5wdXNoKHBhcnNlSW50KERbQ10rRFtDKzFdLDE2KSl9ZWxzZSBmb3IodmFyIGc9MCxDPTA7QzxELmxlbmd0aDtDKyspe3ZhciBTPUQuY2hhckNvZGVBdChDKTtTPDEyOD9OW2crK109UzpTPDIwNDg/KE5bZysrXT1TPj42fDE5MixOW2crK109NjMmU3wxMjgpOm0oRCxD''@;'; put 'put ''KT8oUz02NTUzNisoKDEwMjMmUyk8PDEwKSsoMTAyMyZELmNoYXJDb2RlQXQoKytDKSksTltnKytdPVM+PjE4fDI0MCxOW2crK109Uz4+MTImNjN8MTI4LE5bZysrXT1TPj42JjYzfDEyOCxOW2crK109NjMmU3wxMjgpOihOW2crK109Uz4+MTJ8MjI0LE5bZysrXT1TPj42JjYzfDEyOCxOW2cr''@;'; put 'put ''K109NjMmU3wxMjgpfWVsc2UgZm9yKEM9MDtDPEQubGVuZ3RoO0MrKylOW0NdPTB8RFtDXTtyZXR1cm4gTn0sSWUudG9IZXg9ZnVuY3Rpb24gTShEKXtmb3IodmFyIEg9IiIsTj0wO048RC5sZW5ndGg7TisrKUgrPXooRFtOXS50b1N0cmluZygxNikpO3JldHVybiBIfSxJZS5odG9ubD1PLEll''@;'; put 'put ''LnRvSGV4MzI9ZnVuY3Rpb24gUihELEgpe2Zvcih2YXIgTj0iIixnPTA7ZzxELmxlbmd0aDtnKyspe3ZhciBDPURbZ107ImxpdHRsZSI9PT1IJiYoQz1PKEMpKSxOKz1LKEMudG9TdHJpbmcoMTYpKX1yZXR1cm4gTn0sSWUuemVybzI9eixJZS56ZXJvOD1LLEllLmpvaW4zMj1mdW5jdGlvbiBJ''@;'; put 'put ''KEQsSCxOLGcpe3ZhciBDPU4tSDthZShDJTQ9PTApO2Zvcih2YXIgUz1uZXcgQXJyYXkoQy80KSx2PTAscD1IO3Y8Uy5sZW5ndGg7disrLHArPTQpU1t2XT0oImJpZyI9PT1nP0RbcF08PDI0fERbcCsxXTw8MTZ8RFtwKzJdPDw4fERbcCszXTpEW3ArM108PDI0fERbcCsyXTw8MTZ8RFtwKzFd''@;'; put 'put ''PDw4fERbcF0pPj4+MDtyZXR1cm4gU30sSWUuc3BsaXQzMj1mdW5jdGlvbiBrKEQsSCl7Zm9yKHZhciBOPW5ldyBBcnJheSg0KkQubGVuZ3RoKSxnPTAsQz0wO2c8RC5sZW5ndGg7ZysrLEMrPTQpe3ZhciBTPURbZ107ImJpZyI9PT1IPyhOW0NdPVM+Pj4yNCxOW0MrMV09Uz4+PjE2JjI1NSxO''@;'; put 'put ''W0MrMl09Uz4+PjgmMjU1LE5bQyszXT0yNTUmUyk6KE5bQyszXT1TPj4+MjQsTltDKzJdPVM+Pj4xNiYyNTUsTltDKzFdPVM+Pj44JjI1NSxOW0NdPTI1NSZTKX1yZXR1cm4gTn0sSWUucm90cjMyPWZ1bmN0aW9uIEUoRCxIKXtyZXR1cm4gRD4+Pkh8RDw8MzItSH0sSWUucm90bDMyPWZ1bmN0''@;'; put 'put ''aW9uIGooRCxIKXtyZXR1cm4gRDw8SHxEPj4+MzItSH0sSWUuc3VtMzI9ZnVuY3Rpb24gVihELEgpe3JldHVybiBEK0g+Pj4wfSxJZS5zdW0zMl8zPWZ1bmN0aW9uIEIoRCxILE4pe3JldHVybiBEK0grTj4+PjB9LEllLnN1bTMyXzQ9ZnVuY3Rpb24gWShELEgsTixnKXtyZXR1cm4gRCtIK04r''@;'; put 'put ''Zz4+PjB9LEllLnN1bTMyXzU9ZnVuY3Rpb24gWChELEgsTixnLEMpe3JldHVybiBEK0grTitnK0M+Pj4wfSxJZS5zdW02ND1mdW5jdGlvbiBVKEQsSCxOLGcpe3ZhciB2PWcrRFtIKzFdPj4+MDtEW0hdPSh2PGc/MTowKStOK0RbSF0+Pj4wLERbSCsxXT12fSxJZS5zdW02NF9oaT1mdW5jdGlv''@;'; put 'put ''biBxKEQsSCxOLGcpe3JldHVybihIK2c+Pj4wPEg/MTowKStEK04+Pj4wfSxJZS5zdW02NF9sbz1mdW5jdGlvbiBlZShELEgsTixnKXtyZXR1cm4gSCtnPj4+MH0sSWUuc3VtNjRfNF9oaT1mdW5jdGlvbiB0ZShELEgsTixnLEMsUyx2LHApe3ZhciB3PTAsSj1IO3JldHVybiB3Kz0oSj1KK2c+''@;'; put 'put ''Pj4wKTxIPzE6MCx3Kz0oSj1KK1M+Pj4wKTxTPzE6MCxEK04rQyt2Kyh3Kz0oSj1KK3A+Pj4wKTxwPzE6MCk+Pj4wfSxJZS5zdW02NF80X2xvPWZ1bmN0aW9uIG9lKEQsSCxOLGcsQyxTLHYscCl7cmV0dXJuIEgrZytTK3A+Pj4wfSxJZS5zdW02NF81X2hpPWZ1bmN0aW9uIHNlKEQsSCxOLGcs''@;'; put 'put ''QyxTLHYscCx3LEope3ZhciBuZT0wLGRlPUg7cmV0dXJuIG5lKz0oZGU9ZGUrZz4+PjApPEg/MTowLG5lKz0oZGU9ZGUrUz4+PjApPFM/MTowLG5lKz0oZGU9ZGUrcD4+PjApPHA/MTowLEQrTitDK3YrdysobmUrPShkZT1kZStKPj4+MCk8Sj8xOjApPj4+MH0sSWUuc3VtNjRfNV9sbz1mdW5j''@;'; put 'put ''dGlvbiBoZShELEgsTixnLEMsUyx2LHAsdyxKKXtyZXR1cm4gSCtnK1MrcCtKPj4+MH0sSWUucm90cjY0X2hpPWZ1bmN0aW9uIHVlKEQsSCxOKXtyZXR1cm4oSDw8MzItTnxEPj4+Tik+Pj4wfSxJZS5yb3RyNjRfbG89ZnVuY3Rpb24gY2UoRCxILE4pe3JldHVybihEPDwzMi1OfEg+Pj5OKT4+''@;'; put 'put ''PjB9LEllLnNocjY0X2hpPWZ1bmN0aW9uIEcoRCxILE4pe3JldHVybiBEPj4+Tn0sSWUuc2hyNjRfbG89ZnVuY3Rpb24gYihELEgsTil7cmV0dXJuKEQ8PDMyLU58SD4+Pk4pPj4+MH19LDkyNDQ3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MTA3NikseD1GKDc4MjQ3KSxt''@;'; put 'put ''PUYoNTc3OTgpO2Z1bmN0aW9uIGxlKE0pe2lmKCEodGhpcyBpbnN0YW5jZW9mIGxlKSlyZXR1cm4gbmV3IGxlKE0pO3RoaXMuaGFzaD1NLmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhTS5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT1NLm1p''@;'; put 'put ''bkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5fcmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBPPXgudG9BcnJheShNLmVudHJvcHksTS5lbnRyb3B5RW5jfHwiaGV4IiksUj14LnRvQXJyYXkoTS5ub25j''@;'; put 'put ''ZSxNLm5vbmNlRW5jfHwiaGV4Iiksej14LnRvQXJyYXkoTS5wZXJzLE0ucGVyc0VuY3x8ImhleCIpO20oTy5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX2luaXQoTyxSLHop''@;'; put 'put ''fWF0LmV4cG9ydHM9bGUsbGUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKE8sUix6KXt2YXIgSz1PLmNvbmNhdChSKS5jb25jYXQoeik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgST0wO0k8dGhpcy5WLmxl''@;'; put 'put ''bmd0aDtJKyspdGhpcy5LW0ldPTAsdGhpcy5WW0ldPTE7dGhpcy5fdXBkYXRlKEspLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxsZS5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGFlLmhtYWModGhpcy5oYXNoLHRoaXMu''@;'; put 'put ''Syl9LGxlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8pe3ZhciBSPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtPJiYoUj1SLnVwZGF0ZShPKSksdGhpcy5LPVIuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxP''@;'; put 'put ''JiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoTykuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LGxlLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24oTyxSLHosSyl7InN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBSJiYoSz16LHo9UixSPW51bGwpLE89eC50b0FycmF5KE8sUiksej14LnRvQXJyYXkoeixLKSxtKE8ubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl91cGRhdGUoTy5j''@;'; put 'put ''b25jYXQoenx8W10pKSx0aGlzLl9yZXNlZWQ9MX0sbGUucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKE8sUix6LEspe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBSJiYo''@;'; put 'put ''Sz16LHo9UixSPW51bGwpLHomJih6PXgudG9BcnJheSh6LEt8fCJoZXgiKSx0aGlzLl91cGRhdGUoeikpO2Zvcih2YXIgST1bXTtJLmxlbmd0aDxPOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLEk9SS5jb25jYXQodGhpcy5WKTt2YXIgaz1JLnNsaWNlKDAs''@;'; put 'put ''Tyk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh6KSx0aGlzLl9yZXNlZWQrKyx4LmVuY29kZShrLFIpfX0sNTU4MzM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXI7SWUuX2RiY3M9Sztmb3IodmFyIHg9LTEsbT0tMixsZT0tMTAsTT0tMWUzLE89bmV3IEFycmF5''@;'; put 'put ''KDI1Niksej0wO3o8MjU2O3orKylPW3pdPXg7ZnVuY3Rpb24gSyhqLFYpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPWouZW5jb2RpbmdOYW1lLCFqKXRocm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighai50YWJsZSl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBCPWoudGFibGUoKTt0aGlzLmRlY29kZVRhYmxlcz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1PLnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciBZPTA7WTxCLmxlbmd0''@;'; put 'put ''aDtZKyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoQltZXSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vi5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5lbmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBYPXt9O2lmKGouZW5jb2RlU2tpcFZhbHMpZm9yKFk9MDtZPGouZW5j''@;'; put 'put ''b2RlU2tpcFZhbHMubGVuZ3RoO1krKyl7dmFyIFU9ai5lbmNvZGVTa2lwVmFsc1tZXTtpZigibnVtYmVyIj09dHlwZW9mIFUpWFtVXT0hMDtlbHNlIGZvcih2YXIgcT1VLmZyb207cTw9VS50bztxKyspWFtxXT0hMH1pZih0aGlzLl9maWxsRW5jb2RlVGFibGUoMCwwLFgpLGouZW5jb2RlQWRk''@;'; put 'put ''KWZvcih2YXIgZWUgaW4gai5lbmNvZGVBZGQpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGouZW5jb2RlQWRkLGVlKSYmdGhpcy5fc2V0RW5jb2RlQ2hhcihlZS5jaGFyQ29kZUF0KDApLGouZW5jb2RlQWRkW2VlXSk7aWYodGhpcy5kZWZDaGFyU0I9dGhpcy5lbmNvZGVU''@;'; put 'put ''YWJsZVswXVtWLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApXSx0aGlzLmRlZkNoYXJTQj09PXgmJih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdWyI/Il0pLHRoaXMuZGVmQ2hhclNCPT09eCYmKHRoaXMuZGVmQ2hhclNCPSI/Ii5jaGFyQ29kZUF0KDApKSwi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2Ygai5nYjE4MDMwKXt0aGlzLmdiMTgwMzA9ai5nYjE4MDMwKCk7dmFyIHRlPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxvZT10aGlzLmRlY29kZVRhYmxlc1t0ZV09Ty5zbGljZSgwKSxzZT10aGlzLmRlY29kZVRhYmxlcy5sZW5ndGgsaGU9dGhpcy5kZWNvZGVU''@;'; put 'put ''YWJsZXNbc2VdPU8uc2xpY2UoMCk7Zm9yKFk9MTI5O1k8PTI1NDtZKyspe3ZhciBjZT10aGlzLmRlY29kZVRhYmxlc1tNLXRoaXMuZGVjb2RlVGFibGVzWzBdW1ldXTtmb3IocT00ODtxPD01NztxKyspY2VbcV09TS10ZX1mb3IoWT0xMjk7WTw9MjU0O1krKylvZVtZXT1NLXNlO2ZvcihZPTQ4''@;'; put 'put ''O1k8PTU3O1krKyloZVtZXT1tfX1mdW5jdGlvbiBJKGosVil7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29kZVRhYmxlPVYuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1WLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5n''@;'; put 'put ''bGVCeXRlPVYuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1WLmdiMTgwMzB9ZnVuY3Rpb24gayhqLFYpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1hZS5hbGxvYygwKSx0aGlzLmRlY29kZVRhYmxlcz1WLmRlY29kZVRhYmxlcyx0aGlzLmRlY29kZVRhYmxlU2VxPVYuZGVjb2RlVGFibGVT''@;'; put 'put ''ZXEsdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vi5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5nYjE4MDMwPVYuZ2IxODAzMH1mdW5jdGlvbiBFKGosVil7aWYoalswXT5WKXJldHVybi0xO2Zvcih2YXIgQj0wLFk9ai5sZW5ndGg7QjxZLTE7KXt2YXIgWD1CK01hdGguZmxvb3IoKFktQisxKS8y''@;'; put 'put ''KTtqW1hdPD1WP0I9WDpZPVh9cmV0dXJuIEJ9Sy5wcm90b3R5cGUuZW5jb2Rlcj1JLEsucHJvdG90eXBlLmRlY29kZXI9ayxLLnByb3RvdHlwZS5fZ2V0RGVjb2RlVHJpZU5vZGU9ZnVuY3Rpb24oail7Zm9yKHZhciBWPVtdO2o+MDtqPj49OClWLnB1c2goMjU1JmopOzA9PVYubGVuZ3RoJiZW''@;'; put 'put ''LnB1c2goMCk7Zm9yKHZhciBCPXRoaXMuZGVjb2RlVGFibGVzWzBdLFk9Vi5sZW5ndGgtMTtZPjA7WS0tKXt2YXIgWD1CW1ZbWV1dO2lmKFg9PXgpQltWW1ldXT1NLXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCx0aGlzLmRlY29kZVRhYmxlcy5wdXNoKEI9Ty5zbGljZSgwKSk7ZWxzZXtpZigh''@;'; put 'put ''KFg8PU0pKXRocm93IG5ldyBFcnJvcigiT3ZlcndyaXRlIGJ5dGUgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiLCBhZGRyOiAiK2oudG9TdHJpbmcoMTYpKTtCPXRoaXMuZGVjb2RlVGFibGVzW00tWF19fXJldHVybiBCfSxLLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bms9ZnVuY3Rpb24oail7''@;'; put 'put ''dmFyIFY9cGFyc2VJbnQoalswXSwxNiksQj10aGlzLl9nZXREZWNvZGVUcmllTm9kZShWKTtWJj0yNTU7Zm9yKHZhciBZPTE7WTxqLmxlbmd0aDtZKyspe3ZhciBYPWpbWV07aWYoInN0cmluZyI9PXR5cGVvZiBYKWZvcih2YXIgVT0wO1U8WC5sZW5ndGg7KXt2YXIgcT1YLmNoYXJDb2RlQXQo''@;'; put 'put ''VSsrKTtpZig1NTI5Njw9cSYmcTw1NjMyMCl7dmFyIGVlPVguY2hhckNvZGVBdChVKyspO2lmKCEoNTYzMjA8PWVlJiZlZTw1NzM0NCkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIralswXSk7QltW''@;'; put 'put ''KytdPTY1NTM2KzEwMjQqKHEtNTUyOTYpKyhlZS01NjMyMCl9ZWxzZSBpZig0MDgwPHEmJnE8PTQwOTUpe2Zvcih2YXIgdGU9NDA5NS1xKzIsb2U9W10sc2U9MDtzZTx0ZTtzZSsrKW9lLnB1c2goWC5jaGFyQ29kZUF0KFUrKykpO0JbVisrXT1sZS10aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0''@;'; put 'put ''aCx0aGlzLmRlY29kZVRhYmxlU2VxLnB1c2gob2UpfWVsc2UgQltWKytdPXF9ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIFgpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgWCsiJyBnaXZlbiBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgY2h1bmsgIitqWzBd''@;'; put 'put ''KTt2YXIgaGU9QltWLTFdKzE7Zm9yKFU9MDtVPFg7VSsrKUJbVisrXT1oZSsrfX1pZihWPjI1NSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBjaHVuayBpbiAiK3RoaXMuZW5jb2RpbmdOYW1lKyIgYXQgYWRkciAiK2pbMF0rIjogdG9vIGxvbmciK1YpfSxLLnByb3RvdHlwZS5fZ2V0RW5j''@;'; put 'put ''b2RlQnVja2V0PWZ1bmN0aW9uKGope3ZhciBWPWo+Pjg7cmV0dXJuIHZvaWQgMD09PXRoaXMuZW5jb2RlVGFibGVbVl0mJih0aGlzLmVuY29kZVRhYmxlW1ZdPU8uc2xpY2UoMCkpLHRoaXMuZW5jb2RlVGFibGVbVl19LEsucHJvdG90eXBlLl9zZXRFbmNvZGVDaGFyPWZ1bmN0aW9uKGosVil7''@;'; put 'put ''dmFyIEI9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KGopLFk9MjU1Jmo7QltZXTw9bGU/dGhpcy5lbmNvZGVUYWJsZVNlcVtsZS1CW1ldXVstMV09VjpCW1ldPT14JiYoQltZXT1WKX0sSy5wcm90b3R5cGUuX3NldEVuY29kZVNlcXVlbmNlPWZ1bmN0aW9uKGosVil7dmFyIFUsQj1qWzBdLFk9dGhp''@;'; put 'put ''cy5fZ2V0RW5jb2RlQnVja2V0KEIpLFg9MjU1JkI7WVtYXTw9bGU/VT10aGlzLmVuY29kZVRhYmxlU2VxW2xlLVlbWF1dOihVPXt9LFlbWF0hPT14JiYoVVstMV09WVtYXSksWVtYXT1sZS10aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmVuY29kZVRhYmxlU2VxLnB1c2goVSkpO2Zv''@;'; put 'put ''cih2YXIgcT0xO3E8ai5sZW5ndGgtMTtxKyspe3ZhciBlZT1VW0JdOyJvYmplY3QiPT10eXBlb2YgZWU/VT1lZTooVT1VW0JdPXt9LHZvaWQgMCE9PWVlJiYoVVstMV09ZWUpKX1VW0I9altqLmxlbmd0aC0xXV09Vn0sSy5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZT1mdW5jdGlvbihqLFYs''@;'; put 'put ''Qil7Zm9yKHZhciBZPXRoaXMuZGVjb2RlVGFibGVzW2pdLFg9MDtYPDI1NjtYKyspe3ZhciBVPVlbWF0scT1WK1g7QltxXXx8KFU+PTA/dGhpcy5fc2V0RW5jb2RlQ2hhcihVLHEpOlU8PU0/dGhpcy5fZmlsbEVuY29kZVRhYmxlKE0tVSxxPDw4LEIpOlU8PWxlJiZ0aGlzLl9zZXRFbmNvZGVT''@;'; put 'put ''ZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW2xlLVVdLHEpKX19LEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope2Zvcih2YXIgVj1hZS5hbGxvYyhqLmxlbmd0aCoodGhpcy5nYjE4MDMwPzQ6MykpLEI9dGhpcy5sZWFkU3Vycm9nYXRlLFk9dGhpcy5zZXFPYmosWD0tMSxVPTAscT0w''@;'; put 'put ''Ozspe2lmKC0xPT09WCl7aWYoVT09ai5sZW5ndGgpYnJlYWs7dmFyIGVlPWouY2hhckNvZGVBdChVKyspfWVsc2UgZWU9WCxYPS0xO2lmKDU1Mjk2PD1lZSYmZWU8NTczNDQpaWYoZWU8NTYzMjApe2lmKC0xPT09Qil7Qj1lZTtjb250aW51ZX1CPWVlLGVlPXh9ZWxzZS0xIT09Qj8oZWU9NjU1''@;'; put 'put ''MzYrMTAyNCooQi01NTI5NikrKGVlLTU2MzIwKSxCPS0xKTplZT14O2Vsc2UtMSE9PUImJihYPWVlLGVlPXgsQj0tMSk7dmFyIHRlPXg7aWYodm9pZCAwIT09WSYmZWUhPXgpe3ZhciBvZT1ZW2VlXTtpZigib2JqZWN0Ij09dHlwZW9mIG9lKXtZPW9lO2NvbnRpbnVlfSJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygb2U/dGU9b2U6bnVsbD09b2UmJnZvaWQgMCE9PShvZT1ZWy0xXSkmJih0ZT1vZSxYPWVlKSxZPXZvaWQgMH1lbHNlIGlmKGVlPj0wKXt2YXIgc2U9dGhpcy5lbmNvZGVUYWJsZVtlZT4+OF07aWYodm9pZCAwIT09c2UmJih0ZT1zZVsyNTUmZWVdKSx0ZTw9bGUpe1k9dGhpcy5lbmNvZGVU''@;'; put 'put ''YWJsZVNlcVtsZS10ZV07Y29udGludWV9aWYodGU9PXgmJnRoaXMuZ2IxODAzMCl7dmFyIGhlPUUodGhpcy5nYjE4MDMwLnVDaGFycyxlZSk7aWYoLTEhPWhlKXt0ZT10aGlzLmdiMTgwMzAuZ2JDaGFyc1toZV0rKGVlLXRoaXMuZ2IxODAzMC51Q2hhcnNbaGVdKSxWW3ErK109MTI5K01hdGgu''@;'; put 'put ''Zmxvb3IodGUvMTI2MDApLHRlJT0xMjYwMCxWW3ErK109NDgrTWF0aC5mbG9vcih0ZS8xMjYwKSx0ZSU9MTI2MCxWW3ErK109MTI5K01hdGguZmxvb3IodGUvMTApLFZbcSsrXT00OCsodGUlPTEwKTtjb250aW51ZX19fXRlPT09eCYmKHRlPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlKSx0''@;'; put 'put ''ZTwyNTY/VltxKytdPXRlOnRlPDY1NTM2PyhWW3ErK109dGU+PjgsVltxKytdPTI1NSZ0ZSk6KFZbcSsrXT10ZT4+MTYsVltxKytdPXRlPj44JjI1NSxWW3ErK109MjU1JnRlKX1yZXR1cm4gdGhpcy5zZXFPYmo9WSx0aGlzLmxlYWRTdXJyb2dhdGU9QixWLnNsaWNlKDAscSl9LEkucHJvdG90''@;'; put 'put ''eXBlLmVuZD1mdW5jdGlvbigpe2lmKC0xIT09dGhpcy5sZWFkU3Vycm9nYXRlfHx2b2lkIDAhPT10aGlzLnNlcU9iail7dmFyIGo9YWUuYWxsb2MoMTApLFY9MDtpZih0aGlzLnNlcU9iail7dmFyIEI9dGhpcy5zZXFPYmpbLTFdO3ZvaWQgMCE9PUImJihCPDI1Nj9qW1YrK109QjooaltWKytd''@;'; put 'put ''PUI+PjgsaltWKytdPTI1NSZCKSksdGhpcy5zZXFPYmo9dm9pZCAwfXJldHVybi0xIT09dGhpcy5sZWFkU3Vycm9nYXRlJiYoaltWKytdPXRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlLHRoaXMubGVhZFN1cnJvZ2F0ZT0tMSksai5zbGljZSgwLFYpfX0sSS5wcm90b3R5cGUuZmluZElkeD1F''@;'; put 'put ''LGsucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGope3ZhciBWPWFlLmFsbG9jKDIqai5sZW5ndGgpLEI9dGhpcy5ub2RlSWR4LFk9dGhpcy5wcmV2QnVmLFg9dGhpcy5wcmV2QnVmLmxlbmd0aCxVPS10aGlzLnByZXZCdWYubGVuZ3RoO1g+MCYmKFk9YWUuY29uY2F0KFtZLGouc2xpY2UoMCwx''@;'; put 'put ''MCldKSk7Zm9yKHZhciBlZT0wLHRlPTA7ZWU8ai5sZW5ndGg7ZWUrKyl7dmFyIHEsb2U9ZWU+PTA/altlZV06WVtlZStYXTtpZighKChxPXRoaXMuZGVjb2RlVGFibGVzW0JdW29lXSk+PTApKWlmKHE9PT14KWVlPVUscT10aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO2Vs''@;'; put 'put ''c2UgaWYocT09PW0pe3ZhciBzZT1VPj0wP2ouc2xpY2UoVSxlZSsxKTpZLnNsaWNlKFUrWCxlZSsxK1gpLGhlPTEyNjAwKihzZVswXS0xMjkpKzEyNjAqKHNlWzFdLTQ4KSsxMCooc2VbMl0tMTI5KSsoc2VbM10tNDgpLHVlPUUodGhpcy5nYjE4MDMwLmdiQ2hhcnMsaGUpO3E9dGhpcy5nYjE4''@;'; put 'put ''MDMwLnVDaGFyc1t1ZV0raGUtdGhpcy5nYjE4MDMwLmdiQ2hhcnNbdWVdfWVsc2V7aWYocTw9TSl7Qj1NLXE7Y29udGludWV9aWYoIShxPD1sZSkpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrcSsiIGF0''@;'; put 'put ''ICIrQisiLyIrb2UpO2Zvcih2YXIgY2U9dGhpcy5kZWNvZGVUYWJsZVNlcVtsZS1xXSxHPTA7RzxjZS5sZW5ndGgtMTtHKyspVlt0ZSsrXT0yNTUmKHE9Y2VbR10pLFZbdGUrK109cT4+ODtxPWNlW2NlLmxlbmd0aC0xXX1pZihxPjY1NTM1KXtxLT02NTUzNjt2YXIgYj01NTI5NitNYXRoLmZs''@;'; put 'put ''b29yKHEvMTAyNCk7Vlt0ZSsrXT0yNTUmYixWW3RlKytdPWI+PjgscT01NjMyMCtxJTEwMjR9Vlt0ZSsrXT0yNTUmcSxWW3RlKytdPXE+PjgsQj0wLFU9ZWUrMX1yZXR1cm4gdGhpcy5ub2RlSWR4PUIsdGhpcy5wcmV2QnVmPVU+PTA/ai5zbGljZShVKTpZLnNsaWNlKFUrWCksVi5zbGljZSgw''@;'; put 'put ''LHRlKS50b1N0cmluZygidWNzMiIpfSxrLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIGo9IiI7dGhpcy5wcmV2QnVmLmxlbmd0aD4wOyl7ais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7dmFyIFY9dGhpcy5wcmV2QnVmLnNsaWNlKDEpO3RoaXMucHJldkJ1Zj1hZS5hbGxvYygw''@;'; put 'put ''KSx0aGlzLm5vZGVJZHg9MCxWLmxlbmd0aD4wJiYoais9dGhpcy53cml0ZShWKSl9cmV0dXJuIHRoaXMubm9kZUlkeD0wLGp9fSwzMjU1NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz17c2hpZnRqaXM6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBG''@;'; put 'put ''KDI3MDE0KX0sZW5jb2RlQWRkOnsiXHhhNSI6OTIsIlx1MjAzZSI6MTI2fSxlbmNvZGVTa2lwVmFsczpbe2Zyb206NjA3MzYsdG86NjM4MDh9XX0sY3NzaGlmdGppczoic2hpZnRqaXMiLG1za2Fuamk6InNoaWZ0amlzIixzamlzOiJzaGlmdGppcyIsd2luZG93czMxajoic2hpZnRqaXMiLG1z''@;'; put 'put ''MzFqOiJzaGlmdGppcyIseHNqaXM6InNoaWZ0amlzIix3aW5kb3dzOTMyOiJzaGlmdGppcyIsbXM5MzI6InNoaWZ0amlzIiw5MzI6InNoaWZ0amlzIixjcDkzMjoic2hpZnRqaXMiLGV1Y2pwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigzMTUzMil9LGVuY29kZUFk''@;'; put 'put ''ZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn19LGdiMjMxMjoiY3A5MzYiLGdiMjMxMjgwOiJjcDkzNiIsZ2IyMzEyMTk4MDoiY3A5MzYiLGNzZ2IyMzEyOiJjcDkzNiIsY3Npc281OGdiMjMxMjgwOiJjcDkzNiIsZXVjY246ImNwOTM2Iix3aW5kb3dzOTM2OiJjcDkzNiIsbXM5MzY6ImNwOTM2''@;'; put 'put ''Iiw5MzY6ImNwOTM2IixjcDkzNjp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoMTMzMzYpfX0sZ2JrOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNikuY29uY2F0KEYoNDQzNDYpKX19LHhnYms6ImdiayIsaXNvaXI1ODoiZ2JrIixn''@;'; put 'put ''YjE4MDMwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRigxMzMzNikuY29uY2F0KEYoNDQzNDYpKX0sZ2IxODAzMDpmdW5jdGlvbigpe3JldHVybiBGKDM2MjU4KX0sZW5jb2RlU2tpcFZhbHM6WzEyOF0sZW5jb2RlQWRkOnsiXHUyMGFjIjo0MTY5OX19LGNoaW5lc2U6''@;'; put 'put ''ImdiMTgwMzAiLHdpbmRvd3M5NDk6ImNwOTQ5Iixtczk0OToiY3A5NDkiLDk0OToiY3A5NDkiLGNwOTQ5Ont0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gRig3NzM0OCl9fSxjc2V1Y2tyOiJjcDk0OSIsY3Nrc2M1NjAxMTk4NzoiY3A5NDkiLGV1Y2tyOiJjcDk0OSIsaXNv''@;'; put 'put ''aXIxNDk6ImNwOTQ5Iixrb3JlYW46ImNwOTQ5Iixrc2M1NjAxMTk4NzoiY3A5NDkiLGtzYzU2MDExOTg5OiJjcDk0OSIsa3NjNTYwMToiY3A5NDkiLHdpbmRvd3M5NTA6ImNwOTUwIixtczk1MDoiY3A5NTAiLDk1MDoiY3A5NTAiLGNwOTUwOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gRig3NDI4NCl9fSxiaWc1OiJiaWc1aGtzY3MiLGJpZzVoa3Njczp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIEYoNzQyODQpLmNvbmNhdChGKDYzNDgwKSl9LGVuY29kZVNraXBWYWxzOls0MTY3Nl19LGNuYmlnNToiYmlnNWhrc2NzIixjc2JpZzU6ImJp''@;'; put 'put ''ZzVoa3NjcyIseHhiaWc1OiJiaWc1aGtzY3MifX0sNDQ2NTc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2Zvcih2YXIgYWU9W0YoMjc2NDgpLEYoOTI4NDQpLEYoNDMyODApLEYoNzgzNTQpLEYoNzE3NjQpLEYoNjQ3NzMpLEYoMjA1MDMpLEYoNTU4MzMpLEYoMzI1NTQpXSx4PTA7eDxhZS5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgbT1hZVt4XTtmb3IodmFyIGxlIGluIG0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sbGUpJiYoSWVbbGVdPW1bbGVdKX19LDI3NjQ4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgo''@;'; put 'put ''SyxJKXt0aGlzLmVuYz1LLmVuY29kaW5nTmFtZSx0aGlzLmJvbUF3YXJlPUsuYm9tQXdhcmUsImJhc2U2NCI9PT10aGlzLmVuYz90aGlzLmVuY29kZXI9TzoiY2VzdTgiPT09dGhpcy5lbmMmJih0aGlzLmVuYz0idXRmOCIsdGhpcy5lbmNvZGVyPVIsIlx1ezFmNGE5fSIhPT1hZS5mcm9tKCJl''@;'; put 'put ''ZGEwYmRlZGIyYTkiLCJoZXgiKS50b1N0cmluZygpJiYodGhpcy5kZWNvZGVyPXosdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9SS5kZWZhdWx0Q2hhclVuaWNvZGUpKX1hdC5leHBvcnRzPXt1dGY4Ont0eXBlOiJfaW50ZXJuYWwiLGJvbUF3YXJlOiEwfSxjZXN1ODp7dHlwZToiX2ludGVybmFs''@;'; put 'put ''Iixib21Bd2FyZTohMH0sdW5pY29kZTExdXRmODoidXRmOCIsdWNzMjp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sdXRmMTZsZToidWNzMiIsYmluYXJ5Ont0eXBlOiJfaW50ZXJuYWwifSxiYXNlNjQ6e3R5cGU6Il9pbnRlcm5hbCJ9LGhleDp7dHlwZToiX2ludGVybmFsIn0sX2lu''@;'; put 'put ''dGVybmFsOnh9LHgucHJvdG90eXBlLmVuY29kZXI9TSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlO3ZhciBtPUYoNzIwMjQpLnM7ZnVuY3Rpb24gbGUoSyxJKXttLmNhbGwodGhpcyxJLmVuYyl9ZnVuY3Rpb24gTShLLEkpe3RoaXMuZW5jPUkuZW5jfWZ1bmN0aW9uIE8oSyxJKXt0aGlzLnByZXZT''@;'; put 'put ''dHI9IiJ9ZnVuY3Rpb24gUihLLEkpe31mdW5jdGlvbiB6KEssSSl7dGhpcy5hY2M9MCx0aGlzLmNvbnRCeXRlcz0wLHRoaXMuYWNjQnl0ZXM9MCx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1JLmRlZmF1bHRDaGFyVW5pY29kZX1tLnByb3RvdHlwZS5lbmR8fChtLnByb3RvdHlwZS5lbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXt9KSxsZS5wcm90b3R5cGU9bS5wcm90b3R5cGUsTS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIGFlLmZyb20oSyx0aGlzLmVuYyl9LE0ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7dmFyIEk9KEs9dGhp''@;'; put 'put ''cy5wcmV2U3RyK0spLmxlbmd0aC1LLmxlbmd0aCU0O3JldHVybiB0aGlzLnByZXZTdHI9Sy5zbGljZShJKSxLPUsuc2xpY2UoMCxJKSxhZS5mcm9tKEssImJhc2U2NCIpfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gYWUuZnJvbSh0aGlzLnByZXZTdHIsImJhc2U2NCIpfSxS''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9YWUuYWxsb2MoMypLLmxlbmd0aCksaz0wLEU9MDtFPEsubGVuZ3RoO0UrKyl7dmFyIGo9Sy5jaGFyQ29kZUF0KEUpO2o8MTI4P0lbaysrXT1qOmo8MjA0OD8oSVtrKytdPTE5Misoaj4+PjYpLElbaysrXT0xMjgrKDYzJmop''@;'; put 'put ''KTooSVtrKytdPTIyNCsoaj4+PjEyKSxJW2srK109MTI4KyhqPj4+NiY2MyksSVtrKytdPTEyOCsoNjMmaikpfXJldHVybiBJLnNsaWNlKDAsayl9LFIucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sei5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7Zm9yKHZhciBJPXRoaXMuYWNjLGs9''@;'; put 'put ''dGhpcy5jb250Qnl0ZXMsRT10aGlzLmFjY0J5dGVzLGo9IiIsVj0wO1Y8Sy5sZW5ndGg7VisrKXt2YXIgQj1LW1ZdOzEyOCE9KDE5MiZCKT8oaz4wJiYoais9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUsaz0wKSxCPDEyOD9qKz1TdHJpbmcuZnJvbUNoYXJDb2RlKEIpOkI8MjI0PyhJPTMxJkIs''@;'; put 'put ''az0xLEU9MSk6QjwyNDA/KEk9MTUmQixrPTIsRT0xKTpqKz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSk6az4wPyhJPUk8PDZ8NjMmQixFKyssMD09LS1rJiYoais9Mj09PUUmJkk8MTI4JiZJPjB8fDM9PT1FJiZJPDIwNDg/dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU6U3RyaW5nLmZyb21DaGFy''@;'; put 'put ''Q29kZShJKSkpOmorPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlfXJldHVybiB0aGlzLmFjYz1JLHRoaXMuY29udEJ5dGVzPWssdGhpcy5hY2NCeXRlcz1FLGp9LHoucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciBLPTA7cmV0dXJuIHRoaXMuY29udEJ5dGVzPjAmJihLKz10aGlzLmRlZmF1''@;'; put 'put ''bHRDaGFyVW5pY29kZSksS319LDcxNzY0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoTSxPKXtpZighTSl0aHJvdyBuZXcgRXJyb3IoIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuIik7aWYoIU0uY2hhcnN8''@;'; put 'put ''fDEyOCE9PU0uY2hhcnMubGVuZ3RoJiYyNTYhPT1NLmNoYXJzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK00udHlwZSsiJyBoYXMgaW5jb3JyZWN0ICdjaGFycycgKG11c3QgYmUgb2YgbGVuIDEyOCBvciAyNTYpIik7aWYoMTI4PT09TS5jaGFycy5sZW5ndGgpe2Zvcih2''@;'; put 'put ''YXIgUj0iIix6PTA7ejwxMjg7eisrKVIrPVN0cmluZy5mcm9tQ2hhckNvZGUoeik7TS5jaGFycz1SK00uY2hhcnN9dGhpcy5kZWNvZGVCdWY9YWUuZnJvbShNLmNoYXJzLCJ1Y3MyIik7dmFyIEs9YWUuYWxsb2MoNjU1MzYsTy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKSk7''@;'; put 'put ''Zm9yKHo9MDt6PE0uY2hhcnMubGVuZ3RoO3orKylLW00uY2hhcnMuY2hhckNvZGVBdCh6KV09ejt0aGlzLmVuY29kZUJ1Zj1LfWZ1bmN0aW9uIG0oTSxPKXt0aGlzLmVuY29kZUJ1Zj1PLmVuY29kZUJ1Zn1mdW5jdGlvbiBsZShNLE8pe3RoaXMuZGVjb2RlQnVmPU8uZGVjb2RlQnVmfUllLl9z''@;'; put 'put ''YmNzPXgseC5wcm90b3R5cGUuZW5jb2Rlcj1tLHgucHJvdG90eXBlLmRlY29kZXI9bGUsbS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTSl7Zm9yKHZhciBPPWFlLmFsbG9jKE0ubGVuZ3RoKSxSPTA7UjxNLmxlbmd0aDtSKyspT1tSXT10aGlzLmVuY29kZUJ1ZltNLmNoYXJDb2RlQXQoUild''@;'; put 'put ''O3JldHVybiBPfSxtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LGxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNKXtmb3IodmFyIE89dGhpcy5kZWNvZGVCdWYsUj1hZS5hbGxvYygyKk0ubGVuZ3RoKSx6PTAsSz0wLEk9MDtJPE0ubGVuZ3RoO0krKylSW0s9MipJXT1PW3o9MipNW0ld''@;'; put 'put ''XSxSW0srMV09T1t6KzFdO3JldHVybiBSLnRvU3RyaW5nKCJ1Y3MyIil9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9fSwyMDUwMzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXs0Mzc6ImNwNDM3Iiw3Mzc6ImNwNzM3Iiw3NzU6ImNwNzc1Iiw4NTA6ImNwODUwIiw4NTI6ImNw''@;'; put 'put ''ODUyIiw4NTU6ImNwODU1Iiw4NTY6ImNwODU2Iiw4NTc6ImNwODU3Iiw4NTg6ImNwODU4Iiw4NjA6ImNwODYwIiw4NjE6ImNwODYxIiw4NjI6ImNwODYyIiw4NjM6ImNwODYzIiw4NjQ6ImNwODY0Iiw4NjU6ImNwODY1Iiw4NjY6ImNwODY2Iiw4Njk6ImNwODY5Iiw4NzQ6IndpbmRvd3M4NzQi''@;'; put 'put ''LDkyMjoiY3A5MjIiLDEwNDY6ImNwMTA0NiIsMTEyNDoiY3AxMTI0IiwxMTI1OiJjcDExMjUiLDExMjk6ImNwMTEyOSIsMTEzMzoiY3AxMTMzIiwxMTYxOiJjcDExNjEiLDExNjI6ImNwMTE2MiIsMTE2MzoiY3AxMTYzIiwxMjUwOiJ3aW5kb3dzMTI1MCIsMTI1MToid2luZG93czEyNTEiLDEy''@;'; put 'put ''NTI6IndpbmRvd3MxMjUyIiwxMjUzOiJ3aW5kb3dzMTI1MyIsMTI1NDoid2luZG93czEyNTQiLDEyNTU6IndpbmRvd3MxMjU1IiwxMjU2OiJ3aW5kb3dzMTI1NiIsMTI1Nzoid2luZG93czEyNTciLDEyNTg6IndpbmRvd3MxMjU4IiwyODU5MToiaXNvODg1OTEiLDI4NTkyOiJpc284ODU5MiIs''@;'; put 'put ''Mjg1OTM6Imlzbzg4NTkzIiwyODU5NDoiaXNvODg1OTQiLDI4NTk1OiJpc284ODU5NSIsMjg1OTY6Imlzbzg4NTk2IiwyODU5NzoiaXNvODg1OTciLDI4NTk4OiJpc284ODU5OCIsMjg1OTk6Imlzbzg4NTk5IiwyODYwMDoiaXNvODg1OTEwIiwyODYwMToiaXNvODg1OTExIiwyODYwMzoiaXNv''@;'; put 'put ''ODg1OTEzIiwyODYwNDoiaXNvODg1OTE0IiwyODYwNToiaXNvODg1OTE1IiwyODYwNjoiaXNvODg1OTE2Iix3aW5kb3dzODc0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBl''@;'; put 'put ''MDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJc''@;'; put 'put ''dTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlc''@;'; put 'put ''dTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSx3aW44NzQ6IndpbmRvd3M4NzQiLGNwODc0OiJ3aW5kb3dzODc0Iix3aW5kb3dzMTI1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRc''@;'; put 'put ''dTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1''@;'; put 'put ''MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZc''@;'; put 'put ''eGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1''@;'; put 'put ''MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5In0sd2luMTI1MDoid2luZG93czEyNTAiLGNwMTI1MDoid2luZG93czEyNTAi''@;'; put 'put ''LHdpbmRvd3MxMjUxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQwY1x1MDQwYlx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAy''@;'; put 'put ''Mlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ1Y1x1MDQ1Ylx1MDQ1Zlx4YTBcdTA0MGVcdTA0NWVcdTA0MDhceGE0XHUwNDkwXHhhNlx4YTdcdTA0MDFceGE5XHUwNDA0XHhhYlx4YWNceGFkXHhhZVx1MDQwN1x4YjBceGIxXHUwNDA2XHUwNDU2XHUwNDkx''@;'; put 'put ''XHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDU0XHhiYlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQy''@;'; put 'put ''MVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1''@;'; put 'put ''MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHdpbjEyNTE6IndpbmRvd3MxMjUxIixjcDEyNTE6IndpbmRvd3MxMjUxIix3aW5kb3dz''@;'; put 'put ''MTI1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNc''@;'; put 'put ''dTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2VcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJi''@;'; put 'put ''XHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRc''@;'; put 'put ''eGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSx3aW4xMjUyOiJ3aW5kb3dzMTI1MiIsY3AxMjUyOiJ3aW5kb3dzMTI1MiIsd2luZG93czEyNTM6''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0''@;'; put 'put ''XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4''@;'; put 'put ''OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1''@;'; put 'put ''XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUw''@;'; put 'put ''M2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0sd2luMTI1Mzoid2luZG93czEyNTMiLGNwMTI1Mzoid2luZG93czEyNTMiLHdpbmRvd3MxMjU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1''@;'; put 'put ''MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFc''@;'; put 'put ''eGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExZVx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDEzMFx1MDE1ZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5''@;'; put 'put ''XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTFmXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMTMxXHUwMTVmXHhmZiJ9LHdpbjEyNTQ6IndpbmRvd3MxMjU0IixjcDEyNTQ6IndpbmRvd3MxMjU0Iix3aW5kb3dzMTI1NTp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJc''@;'; put 'put ''dWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhhMVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJm''@;'; put 'put ''XHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2XHUwNWI3XHUwNWI4XHUwNWI5XHUwNWJhXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2''@;'; put 'put ''XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sd2luMTI1NToid2luZG93czEyNTUiLGNwMTI1NToid2luZG93czEyNTUiLHdpbmRvd3MxMjU2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1''@;'; put 'put ''MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBc''@;'; put 'put ''dTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2''@;'; put 'put ''MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0''@;'; put 'put ''NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIifSx3aW4xMjU2''@;'; put 'put ''OiJ3aW5kb3dzMTI1NiIsY3AxMjU2OiJ3aW5kb3dzMTI1NiIsd2luZG93czEyNTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHhhOFx1MDJjN1x4YjhcdWZm''@;'; put 'put ''ZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRceGFmXHUwMmRiXHVmZmZkXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx1ZmZmZFx4YTZceGE3XHhkOFx4YTlcdTAxNTZceGFiXHhhY1x4YWRceGFlXHhjNlx4YjBc''@;'; put 'put ''eGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEwNlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1''@;'; put 'put ''MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2''@;'; put 'put ''MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUwMmQ5In0sd2luMTI1Nzoid2luZG93czEyNTciLGNwMTI1Nzoid2luZG93czEyNTciLHdpbmRvd3MxMjU4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBh''@;'; put 'put ''Y1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1''@;'; put 'put ''MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUw''@;'; put 'put ''MTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4''@;'; put 'put ''XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSx3aW4xMjU4OiJ3aW5kb3dzMTI1OCIsY3AxMjU4OiJ3aW5kb3dzMTI1OCIsaXNvODg1OTE6e3R5cGU6''@;'; put 'put ''Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4''@;'; put 'put ''YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhj''@;'; put 'put ''ZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3''@;'; put 'put ''XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxjcDI4NTkxOiJpc284ODU5MSIsaXNvODg1OTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNc''@;'; put 'put ''eDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTA0XHUwMmQ4XHUwMTQxXHhhNFx1MDEzZFx1MDE1YVx4YTdceGE4XHUwMTYwXHUwMTVlXHUwMTY0XHUwMTc5XHhhZFx1MDE3ZFx1MDE3Ylx4YjBcdTAxMDVcdTAyZGJcdTAxNDJceGI0XHUwMTNl''@;'; put 'put ''XHUwMTViXHUwMmM3XHhiOFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE3YVx1MDJkZFx1MDE3ZVx1MDE3Y1x1MDE1NFx4YzFceGMyXHUwMTAyXHhjNFx1MDEzOVx1MDEwNlx4YzdcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExYVx4Y2RceGNlXHUwMTBlXHUwMTEwXHUwMTQzXHUwMTQ3XHhkM1x4ZDRc''@;'; put 'put ''dTAxNTBceGQ2XHhkN1x1MDE1OFx1MDE2ZVx4ZGFcdTAxNzBceGRjXHhkZFx1MDE2Mlx4ZGZcdTAxNTVceGUxXHhlMlx1MDEwM1x4ZTRcdTAxM2FcdTAxMDdceGU3XHUwMTBkXHhlOVx1MDExOVx4ZWJcdTAxMWJceGVkXHhlZVx1MDEwZlx1MDExMVx1MDE0NFx1MDE0OFx4ZjNceGY0XHUwMTUx''@;'; put 'put ''XHhmNlx4ZjdcdTAxNTlcdTAxNmZceGZhXHUwMTcxXHhmY1x4ZmRcdTAxNjNcdTAyZDkifSxjcDI4NTkyOiJpc284ODU5MiIsaXNvODg1OTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4''@;'; put 'put ''Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwMTI2XHUwMmQ4XHhhM1x4YTRcdWZmZmRcdTAxMjRceGE3XHhhOFx1MDEzMFx1MDE1ZVx1MDExZVx1MDEzNFx4YWRcdWZmZmRcdTAxN2JceGIwXHUwMTI3XHhiMlx4''@;'; put 'put ''YjNceGI0XHhiNVx1MDEyNVx4YjdceGI4XHUwMTMxXHUwMTVmXHUwMTFmXHUwMTM1XHhiZFx1ZmZmZFx1MDE3Y1x4YzBceGMxXHhjMlx1ZmZmZFx4YzRcdTAxMGFcdTAxMDhceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdWZmZmRceGQxXHhkMlx4ZDNceGQ0XHUwMTIwXHhk''@;'; put 'put ''Nlx4ZDdcdTAxMWNceGQ5XHhkYVx4ZGJceGRjXHUwMTZjXHUwMTVjXHhkZlx4ZTBceGUxXHhlMlx1ZmZmZFx4ZTRcdTAxMGJcdTAxMDlceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdWZmZmRceGYxXHhmMlx4ZjNceGY0XHUwMTIxXHhmNlx4ZjdcdTAxMWRceGY5XHhmYVx4''@;'; put 'put ''ZmJceGZjXHUwMTZkXHUwMTVkXHUwMmQ5In0sY3AyODU5MzoiaXNvODg1OTMiLGlzbzg4NTk0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVc''@;'; put 'put ''eDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEzOFx1MDE1Nlx4YTRcdTAxMjhcdTAxM2JceGE3XHhhOFx1MDE2MFx1MDExMlx1MDEyMlx1MDE2Nlx4YWRcdTAxN2RceGFmXHhiMFx1MDEwNVx1MDJkYlx1MDE1N1x4YjRcdTAxMjlcdTAxM2NcdTAy''@;'; put 'put ''YzdceGI4XHUwMTYxXHUwMTEzXHUwMTIzXHUwMTY3XHUwMTRhXHUwMTdlXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx1MDEyYVx1MDExMFx1MDE0NVx1MDE0Y1x1MDEzNlx4ZDRceGQ1XHhkNlx4ZDdc''@;'; put 'put ''eGQ4XHUwMTcyXHhkYVx4ZGJceGRjXHUwMTY4XHUwMTZhXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVcdTAxMmJcdTAxMTFcdTAxNDZcdTAxNGRcdTAxMzdceGY0XHhmNVx4ZjZceGY3XHhmOFx1MDE3M1x4''@;'; put 'put ''ZmFceGZiXHhmY1x1MDE2OVx1MDE2Ylx1MDJkOSJ9LGNwMjg1OTQ6Imlzbzg4NTk0Iixpc284ODU5NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRc''@;'; put 'put ''eDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0''@;'; put 'put ''XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUw''@;'; put 'put ''NDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRi''@;'; put 'put ''XHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDUzXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGNwMjg1OTU6Imlzbzg4NTk1Iixpc284ODU5Njp7dHlwZToiX3NiY3MiLGNo''@;'; put 'put ''YXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdWZmZmRcdWZmZmRceGE0XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNjBjXHhhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYxZlx1ZmZmZFx1MDYy''@;'; put 'put ''MVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1MFx1MDY1MVx1MDY1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGNwMjg1OTY6Imlzbzg4NTk2Iixpc284ODU5Nzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4''@;'; put 'put ''OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTIwMThcdTIwMTlceGEzXHUyMGFjXHUyMGFmXHhhNlx4YTdceGE4XHhhOVx1MDM3YVx4YWJceGFjXHhhZFx1ZmZmZFx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRcdTAzODVc''@;'; put 'put ''dTAzODZceGI3XHUwMzg4XHUwMzg5XHUwMzhhXHhiYlx1MDM4Y1x4YmRcdTAzOGVcdTAzOGZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdWZm''@;'; put 'put ''ZmRcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYWFcdTAzYWJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzYjBcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRc''@;'; put 'put ''dTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzJcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTAzY2FcdTAzY2JcdTAzY2NcdTAzY2RcdTAzY2VcdWZmZmQifSxjcDI4NTk3OiJpc284ODU5NyIsaXNvODg1OTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4''@;'; put 'put ''ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlc''@;'; put 'put ''eGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMTdcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdc''@;'; put 'put ''dTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQifSxjcDI4NTk4OiJpc284ODU5OCIs''@;'; put 'put ''aXNvODg1OTk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhh''@;'; put 'put ''MVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNh''@;'; put 'put ''XHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFc''@;'; put 'put ''eGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSxjcDI4NTk5OiJpc284ODU5OSIsaXNvODg1OTEwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNc''@;'; put 'put ''eDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDExMlx1MDEyMlx1MDEyYVx1MDEyOFx1MDEzNlx4YTdcdTAxM2JcdTAxMTBcdTAxNjBcdTAxNjZcdTAxN2RceGFkXHUwMTZhXHUwMTRh''@;'; put 'put ''XHhiMFx1MDEwNVx1MDExM1x1MDEyM1x1MDEyYlx1MDEyOVx1MDEzN1x4YjdcdTAxM2NcdTAxMTFcdTAxNjFcdTAxNjdcdTAxN2VcdTIwMTVcdTAxNmJcdTAxNGJcdTAxMDBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZcdTAxMmVcdTAxMGNceGM5XHUwMTE4XHhjYlx1MDExNlx4Y2RceGNlXHhj''@;'; put 'put ''Zlx4ZDBcdTAxNDVcdTAxNGNceGQzXHhkNFx4ZDVceGQ2XHUwMTY4XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx1MDEwMVx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx1MDEyZlx1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTE3XHhlZFx4ZWVceGVmXHhmMFx1MDE0Nlx1MDE0ZFx4''@;'; put 'put ''ZjNceGY0XHhmNVx4ZjZcdTAxNjlceGY4XHUwMTczXHhmYVx4ZmJceGZjXHhmZFx4ZmVcdTAxMzgifSxjcDI4NjAwOiJpc284ODU5MTAiLGlzbzg4NTkxMTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4''@;'; put 'put ''ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBl''@;'; put 'put ''MGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFc''@;'; put 'put ''dTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBl''@;'; put 'put ''NDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4NjAxOiJp''@;'; put 'put ''c284ODU5MTEiLGlzbzg4NTkxMzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDll''@;'; put 'put ''XHg5Zlx4YTBcdTIwMWRceGEyXHhhM1x4YTRcdTIwMWVceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHUyMDFjXHhiNVx4YjZceGI3XHhmOFx4YjlcdTAxNTdceGJiXHhiY1x4YmRceGJlXHhlNlx1MDEwNFx1MDEyZVx1MDEwMFx1MDEw''@;'; put 'put ''Nlx4YzRceGM1XHUwMTE4XHUwMTEyXHUwMTBjXHhjOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyYVx1MDEzYlx1MDE2MFx1MDE0M1x1MDE0NVx4ZDNcdTAxNGNceGQ1XHhkNlx4ZDdcdTAxNzJcdTAxNDFcdTAxNWFcdTAxNmFceGRjXHUwMTdiXHUwMTdkXHhkZlx1MDEwNVx1MDEyZlx1''@;'; put 'put ''MDEwMVx1MDEwN1x4ZTRceGU1XHUwMTE5XHUwMTEzXHUwMTBkXHhlOVx1MDE3YVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyYlx1MDEzY1x1MDE2MVx1MDE0NFx1MDE0Nlx4ZjNcdTAxNGRceGY1XHhmNlx4ZjdcdTAxNzNcdTAxNDJcdTAxNWJcdTAxNmJceGZjXHUwMTdjXHUwMTdlXHUyMDE5In0s''@;'; put 'put ''Y3AyODYwMzoiaXNvODg1OTEzIixpc284ODU5MTQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4''@;'; put 'put ''OWNceDlkXHg5ZVx4OWZceGEwXHUxZTAyXHUxZTAzXHhhM1x1MDEwYVx1MDEwYlx1MWUwYVx4YTdcdTFlODBceGE5XHUxZTgyXHUxZTBiXHUxZWYyXHhhZFx4YWVcdTAxNzhcdTFlMWVcdTFlMWZcdTAxMjBcdTAxMjFcdTFlNDBcdTFlNDFceGI2XHUxZTU2XHUxZTgxXHUxZTU3XHUxZTgzXHUx''@;'; put 'put ''ZTYwXHUxZWYzXHUxZTg0XHUxZTg1XHUxZTYxXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDE3NFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx1MWU2YVx4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3Nlx4ZGZceGUw''@;'; put 'put ''XHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTc1XHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHUxZTZiXHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTc3XHhmZiJ9LGNwMjg2MDQ6Imlzbzg4NTkxNCIsaXNvODg1OTE1Ont0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x1''@;'; put 'put ''MjBhY1x4YTVcdTAxNjBceGE3XHUwMTYxXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxN2RceGI1XHhiNlx4YjdcdTAxN2VceGI5XHhiYVx4YmJcdTAxNTJcdTAxNTNcdTAxNzhceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhj''@;'; put 'put ''OVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYy''@;'; put 'put ''XHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LGNwMjg2MDU6Imlzbzg4NTkxNSIsaXNvODg1OTE2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4''@;'; put 'put ''ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MDEwNFx1MDEwNVx1MDE0MVx1MjBhY1x1MjAxZVx1MDE2MFx4YTdcdTAxNjFceGE5XHUwMjE4XHhhYlx1MDE3OVx4YWRcdTAxN2FcdTAxN2JceGIwXHhiMVx1''@;'; put 'put ''MDEwY1x1MDE0Mlx1MDE3ZFx1MjAxZFx4YjZceGI3XHUwMTdlXHUwMTBkXHUwMjE5XHhiYlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Y1x4YzBceGMxXHhjMlx1MDEwMlx4YzRcdTAxMDZceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTEwXHUwMTQzXHhkMlx4ZDNc''@;'; put 'put ''eGQ0XHUwMTUwXHhkNlx1MDE1YVx1MDE3MFx4ZDlceGRhXHhkYlx4ZGNcdTAxMThcdTAyMWFceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx1MDEwN1x4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMTFcdTAxNDRceGYyXHhmM1x4ZjRcdTAxNTFceGY2XHUwMTVi''@;'; put 'put ''XHUwMTcxXHhmOVx4ZmFceGZiXHhmY1x1MDExOVx1MDIxYlx4ZmYifSxjcDI4NjA2OiJpc284ODU5MTYiLGNwNDM3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZc''@;'; put 'put ''eGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1''@;'; put 'put ''MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2''@;'; put 'put ''NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1''@;'; put 'put ''XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNDM3OiJjcDQzNyIsY3NpYm00Mzc6ImNwNDM3IixjcDczNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAzOTFcdTAzOTJc''@;'; put 'put ''dTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAz''@;'; put 'put ''YjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVc''@;'; put 'put ''dTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1''@;'; put 'put ''NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYzlcdTAzYWNcdTAzYWRcdTAzYWVcdTAzY2FcdTAzYWZcdTAzY2NcdTAzY2RcdTAzY2JcdTAzY2VcdTAzODZcdTAzODhcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVc''@;'; put 'put ''dTAzOGZceGIxXHUyMjY1XHUyMjY0XHUwM2FhXHUwM2FiXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm03Mzc6ImNwNzM3Iixjc2libTczNzoiY3A3MzciLGNwNzc1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDEwNlx4ZmNceGU5XHUwMTAx''@;'; put 'put ''XHhlNFx1MDEyM1x4ZTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMmJcdTAxNzlceGM0XHhjNVx4YzlceGU2XHhjNlx1MDE0ZFx4ZjZcdTAxMjJceGEyXHUwMTVhXHUwMTViXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHhhNFx1MDEwMFx1MDEyYVx4ZjNcdTAxN2JcdTAxN2Nc''@;'; put 'put ''dTAxN2FcdTIwMWRceGE2XHhhOVx4YWVceGFjXHhiZFx4YmNcdTAxNDFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MDEwNFx1MDEwY1x1MDExOFx1MDExNlx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDEyZVx1MDE2MFx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1''@;'; put 'put ''MjUxY1x1MjUwMFx1MjUzY1x1MDE3Mlx1MDE2YVx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MDE3ZFx1MDEwNVx1MDEwZFx1MDExOVx1MDExN1x1MDEyZlx1MDE2MVx1MDE3M1x1MDE2Ylx1MDE3ZVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5''@;'; put 'put ''MFx1MjU4MFx4ZDNceGRmXHUwMTRjXHUwMTQzXHhmNVx4ZDVceGI1XHUwMTQ0XHUwMTM2XHUwMTM3XHUwMTNiXHUwMTNjXHUwMTQ2XHUwMTEyXHUwMTQ1XHUyMDE5XHhhZFx4YjFcdTIwMWNceGJlXHhiNlx4YTdceGY3XHUyMDFlXHhiMFx1MjIxOVx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEw''@;'; put 'put ''In0saWJtNzc1OiJjcDc3NSIsY3NpYm03NzU6ImNwNzc1IixjcDg1MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhk''@;'; put 'put ''Nlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEy''@;'; put 'put ''XHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhh''@;'; put 'put ''Nlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTA6ImNwODUwIixjc2li''@;'; put 'put ''bTg1MDoiY3A4NTAiLGNwODUyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHUwMTZmXHUwMTA3XHhlN1x1MDE0Mlx4ZWJcdTAxNTBcdTAxNTFceGVlXHUwMTc5XHhjNFx1MDEwNlx4YzlcdTAxMzlcdTAxM2FceGY0XHhmNlx1MDEzZFx1MDEzZVx1MDE1YVx1MDE1''@;'; put 'put ''Ylx4ZDZceGRjXHUwMTY0XHUwMTY1XHUwMTQxXHhkN1x1MDEwZFx4ZTFceGVkXHhmM1x4ZmFcdTAxMDRcdTAxMDVcdTAxN2RcdTAxN2VcdTAxMThcdTAxMTlceGFjXHUwMTdhXHUwMTBjXHUwMTVmXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx1MDExYVx1''@;'; put 'put ''MDE1ZVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MDE3Ylx1MDE3Y1x1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MDEwMlx1MDEwM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdTAxMTFcdTAxMTBcdTAxMGVceGNiXHUw''@;'; put 'put ''MTBmXHUwMTQ3XHhjZFx4Y2VcdTAxMWJcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNmVcdTI1ODBceGQzXHhkZlx4ZDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRceGRhXHUwMTU1XHUwMTcwXHhmZFx4ZGRcdTAxNjNceGI0XHhhZFx1MDJkZFx1MDJkYlx1''@;'; put 'put ''MDJjN1x1MDJkOFx4YTdceGY3XHhiOFx4YjBceGE4XHUwMmQ5XHUwMTcxXHUwMTU4XHUwMTU5XHUyNWEwXHhhMCJ9LGlibTg1MjoiY3A4NTIiLGNzaWJtODUyOiJjcDg1MiIsY3A4NTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDUyXHUwNDAyXHUwNDUzXHUwNDAzXHUwNDUxXHUwNDAxXHUw''@;'; put 'put ''NDU0XHUwNDA0XHUwNDU1XHUwNDA1XHUwNDU2XHUwNDA2XHUwNDU3XHUwNDA3XHUwNDU4XHUwNDA4XHUwNDU5XHUwNDA5XHUwNDVhXHUwNDBhXHUwNDViXHUwNDBiXHUwNDVjXHUwNDBjXHUwNDVlXHUwNDBlXHUwNDVmXHUwNDBmXHUwNDRlXHUwNDJlXHUwNDRhXHUwNDJhXHUwNDMwXHUwNDEw''@;'; put 'put ''XHUwNDMxXHUwNDExXHUwNDQ2XHUwNDI2XHUwNDM0XHUwNDE0XHUwNDM1XHUwNDE1XHUwNDQ0XHUwNDI0XHUwNDMzXHUwNDEzXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTA0Mzlc''@;'; put 'put ''dTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTA0M2FcdTA0MWFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwNDNiXHUwNDFiXHUwNDNjXHUwNDFjXHUwNDNkXHUwNDFkXHUwNDNlXHUwNDFlXHUwNDNmXHUyNTE4''@;'; put 'put ''XHUyNTBjXHUyNTg4XHUyNTg0XHUwNDFmXHUwNDRmXHUyNTgwXHUwNDJmXHUwNDQwXHUwNDIwXHUwNDQxXHUwNDIxXHUwNDQyXHUwNDIyXHUwNDQzXHUwNDIzXHUwNDM2XHUwNDE2XHUwNDMyXHUwNDEyXHUwNDRjXHUwNDJjXHUyMTE2XHhhZFx1MDQ0Ylx1MDQyYlx1MDQzN1x1MDQxN1x1MDQ0''@;'; put 'put ''OFx1MDQyOFx1MDQ0ZFx1MDQyZFx1MDQ0OVx1MDQyOVx1MDQ0N1x1MDQyN1x4YTdcdTI1YTBceGEwIn0saWJtODU1OiJjcDg1NSIsY3NpYm04NTU6ImNwODU1IixjcDg1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1''@;'; put 'put ''ZDdcdTA1ZDhcdTA1ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRceGEzXHVmZmZkXHhkN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWVceGFjXHhiZFx4YmNcdWZmZmRceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1''@;'; put 'put ''MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1ZmZmZFx1ZmZmZFx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHVm''@;'; put 'put ''ZmZkXHUyNTgwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhiNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4''@;'; put 'put ''YTAifSxpYm04NTY6ImNwODU2Iixjc2libTg1NjoiY3A4NTYiLGNwODU3Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUw''@;'; put 'put ''MTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1''@;'; put 'put ''NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUy''@;'; put 'put ''NTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1''@;'; put 'put ''NzoiY3A4NTciLGNzaWJtODU3OiJjcDg1NyIsY3A4NTg6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhm''@;'; put 'put ''OFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1''@;'; put 'put ''MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MjBhY1x4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUy''@;'; put 'put ''NTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU4OiJjcDg1OCIsY3NpYm04NTg6ImNw''@;'; put 'put ''ODU4IixjcDg2MDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlM1x4ZTBceGMxXHhlN1x4ZWFceGNhXHhlOFx4Y2RceGQ0XHhlY1x4YzNceGMyXHhjOVx4YzBceGM4XHhmNFx4ZjVceGYyXHhkYVx4ZjlceGNjXHhkNVx4ZGNceGEyXHhhM1x4ZDlcdTIwYTdceGQzXHhl''@;'; put 'put ''MVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhkMlx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1''@;'; put 'put ''MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4''@;'; put 'put ''NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5''@;'; put 'put ''XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYwOiJjcDg2MCIsY3NpYm04NjA6ImNwODYwIixjcDg2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZc''@;'; put 'put ''eGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1''@;'; put 'put ''NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRc''@;'; put 'put ''dTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1''@;'; put 'put ''MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MToiY3A4NjEiLGNzaWJtODYxOiJjcDg2MSIsY3A4NjI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUw''@;'; put 'put ''NWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHhhMlx4YTNceGE1''@;'; put 'put ''XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUy''@;'; put 'put ''NTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4''@;'; put 'put ''XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhm''@;'; put 'put ''N1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjI6ImNwODYyIixjc2libTg2MjoiY3A4NjIiLGNwODYzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4ZTJceGMyXHhlMFx4YjZceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTIw''@;'; put 'put ''MTdceGMwXHhhN1x4YzlceGM4XHhjYVx4ZjRceGNiXHhjZlx4ZmJceGY5XHhhNFx4ZDRceGRjXHhhMlx4YTNceGQ5XHhkYlx1MDE5Mlx4YTZceGI0XHhmM1x4ZmFceGE4XHhiOFx4YjNceGFmXHhjZVx1MjMxMFx4YWNceGJkXHhiY1x4YmVceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUw''@;'; put 'put ''Mlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1''@;'; put 'put ''MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUw''@;'; put 'put ''M2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODYzOiJjcDg2MyIsY3NpYm04NjM6ImNwODYzIixjcDg2NDp7dHlwZToiX3NiY3Mi''@;'; put 'put ''LGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyRcdTA2NmEmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNE''@;'; put 'put ''RUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhiMFx4YjdcdTIyMTlcdTIyMWFcdTI1OTJcdTI1MDBcdTI1MDJcdTI1M2NcdTI1MjRcdTI1MmNcdTI1MWNcdTI1MzRcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdTAzYjJcdTIy''@;'; put 'put ''MWVcdTAzYzZceGIxXHhiZFx4YmNcdTIyNDhceGFiXHhiYlx1ZmVmN1x1ZmVmOFx1ZmZmZFx1ZmZmZFx1ZmVmYlx1ZmVmY1x1ZmZmZFx4YTBceGFkXHVmZTgyXHhhM1x4YTRcdWZlODRcdWZmZmRcdWZmZmRcdWZlOGVcdWZlOGZcdWZlOTVcdWZlOTlcdTA2MGNcdWZlOWRcdWZlYTFcdWZlYTVc''@;'; put 'put ''dTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlZDFcdTA2MWJcdWZlYjFcdWZlYjVcdWZlYjlcdTA2MWZceGEyXHVmZTgwXHVmZTgxXHVmZTgzXHVmZTg1XHVmZWNhXHVmZThiXHVmZThkXHVmZTkxXHVmZTkzXHVmZTk3XHVmZTli''@;'; put 'put ''XHVmZTlmXHVmZWEzXHVmZWE3XHVmZWE5XHVmZWFiXHVmZWFkXHVmZWFmXHVmZWIzXHVmZWI3XHVmZWJiXHVmZWJmXHVmZWMxXHVmZWM1XHVmZWNiXHVmZWNmXHhhNlx4YWNceGY3XHhkN1x1ZmVjOVx1MDY0MFx1ZmVkM1x1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZmVlM1x1ZmVlN1x1ZmVlYlx1ZmVl''@;'; put 'put ''ZFx1ZmVlZlx1ZmVmM1x1ZmViZFx1ZmVjY1x1ZmVjZVx1ZmVjZFx1ZmVlMVx1ZmU3ZFx1MDY1MVx1ZmVlNVx1ZmVlOVx1ZmVlY1x1ZmVmMFx1ZmVmMlx1ZmVkMFx1ZmVkNVx1ZmVmNVx1ZmVmNlx1ZmVkZFx1ZmVkOVx1ZmVmMVx1MjVhMFx1ZmZmZCJ9LGlibTg2NDoiY3A4NjQiLGNzaWJtODY0''@;'; put 'put ''OiJjcDg2NCIsY3A4NjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUw''@;'; put 'put ''MTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEw''@;'; put 'put ''XHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUy''@;'; put 'put ''NTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4''@;'; put 'put ''YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjU6ImNwODY1Iixjc2libTg2NToiY3A4NjUiLGNwODY2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQx''@;'; put 'put ''YVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUz''@;'; put 'put ''NFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1''@;'; put 'put ''MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBc''@;'; put 'put ''dTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm04NjY6ImNwODY2Iixjc2libTg2NjoiY3A4NjYiLGNwODY5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM4Nlx1ZmZmZFx4YjdceGFjXHhhNlx1MjAxOFx1''@;'; put 'put ''MjAxOVx1MDM4OFx1MjAxNVx1MDM4OVx1MDM4YVx1MDNhYVx1MDM4Y1x1ZmZmZFx1ZmZmZFx1MDM4ZVx1MDNhYlx4YTlcdTAzOGZceGIyXHhiM1x1MDNhY1x4YTNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzY2RcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVc''@;'; put 'put ''dTAzOTZcdTAzOTdceGJkXHUwMzk4XHUwMzk5XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAzOWVcdTAzOWZcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1''@;'; put 'put ''M2NcdTAzYTBcdTAzYTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTAzYjRcdTAzYjVcdTI1ODBcdTAzYjZc''@;'; put 'put ''dTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzJcdTAzYzRcdTAzODRceGFkXHhiMVx1MDNjNVx1MDNjNlx1MDNjN1x4YTdcdTAzYzhcdTAzODVceGIwXHhhOFx1MDNjOVx1MDNjYlx1MDNiMFx1MDNjZVx1''@;'; put 'put ''MjVhMFx4YTAifSxpYm04Njk6ImNwODY5Iixjc2libTg2OToiY3A4NjkiLGNwOTIyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5''@;'; put 'put ''N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHUyMDNlXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4''@;'; put 'put ''YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNjBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHUwMTdkXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhl''@;'; put 'put ''OFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxNjFceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHUwMTdlXHhmZiJ9LGlibTkyMjoiY3A5MjIiLGNzaWJtOTIyOiJjcDkyMiIsY3AxMDQ2Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmU4''@;'; put 'put ''OFx4ZDdceGY3XHVmOGY2XHVmOGY1XHVmOGY0XHVmOGY3XHVmZTcxXHg4OFx1MjVhMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwY1x1MjUxNFx1MjUxOFx1ZmU3OVx1ZmU3Ylx1ZmU3ZFx1ZmU3Zlx1ZmU3N1x1ZmU4YVx1ZmVmMFx1ZmVmM1x1ZmVmMlx1ZmVjZVx1ZmVjZlx1ZmVkMFx1ZmVmNlx1''@;'; put 'put ''ZmVmOFx1ZmVmYVx1ZmVmY1x4YTBcdWY4ZmFcdWY4ZjlcdWY4ZjhceGE0XHVmOGZiXHVmZThiXHVmZTkxXHVmZTk3XHVmZTliXHVmZTlmXHVmZWEzXHUwNjBjXHhhZFx1ZmVhN1x1ZmViM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2''@;'; put 'put ''OVx1ZmViN1x1MDYxYlx1ZmViYlx1ZmViZlx1ZmVjYVx1MDYxZlx1ZmVjYlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyYVx1MDYyYlx1MDYyY1x1MDYyZFx1MDYyZVx1MDYyZlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1''@;'; put 'put ''MDYzNVx1MDYzNlx1MDYzN1x1ZmVjN1x1MDYzOVx1MDYzYVx1ZmVjY1x1ZmU4Mlx1ZmU4NFx1ZmU4ZVx1ZmVkM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0YVx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx1MDY0Zlx1MDY1''@;'; put 'put ''MFx1MDY1MVx1MDY1Mlx1ZmVkN1x1ZmVkYlx1ZmVkZlx1ZjhmY1x1ZmVmNVx1ZmVmN1x1ZmVmOVx1ZmVmYlx1ZmVlM1x1ZmVlN1x1ZmVlY1x1ZmVlOVx1ZmZmZCJ9LGlibTEwNDY6ImNwMTA0NiIsY3NpYm0xMDQ2OiJjcDEwNDYiLGNwMTEyNDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4''@;'; put 'put ''MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTA0MDFcdTA0MDJcdTA0OTBcdTA0MDRcdTA0MDVcdTA0MDZcdTA0''@;'; put 'put ''MDdcdTA0MDhcdTA0MDlcdTA0MGFcdTA0MGJcdTA0MGNceGFkXHUwNDBlXHUwNDBmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUw''@;'; put 'put ''NDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUw''@;'; put 'put ''NDVhXHUwNDViXHUwNDVjXHhhN1x1MDQ1ZVx1MDQ1ZiJ9LGlibTExMjQ6ImNwMTEyNCIsY3NpYm0xMTI0OiJjcDExMjQiLGNwMTEyNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFc''@;'; put 'put ''dTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRc''@;'; put 'put ''dTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1''@;'; put 'put ''OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdc''@;'; put 'put ''dTA0NTdceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAifSxpYm0xMTI1OiJjcDExMjUiLGNzaWJtMTEyNToiY3AxMTI1IixjcDExMjk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4''@;'; put 'put ''Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x1MDE1M1x4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHUwMTc4XHhiNVx4YjZceGI3''@;'; put 'put ''XHUwMTUyXHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFh''@;'; put 'put ''Zlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0saWJtMTEyOToi''@;'; put 'put ''Y3AxMTI5Iixjc2libTExMjk6ImNwMTEyOSIsY3AxMTMzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4''@;'; put 'put ''OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGU4MVx1MGU4Mlx1MGU4NFx1MGU4N1x1MGU4OFx1MGVhYVx1MGU4YVx1MGU4ZFx1MGU5NFx1MGU5NVx1MGU5Nlx1MGU5N1x1MGU5OVx1MGU5YVx1MGU5Ylx1MGU5Y1x1MGU5ZFx1MGU5ZVx1MGU5Zlx1MGVhMVx1MGVhMlx1MGVhM1x1MGVhNVx1MGVh''@;'; put 'put ''N1x1MGVhYlx1MGVhZFx1MGVhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVhZlx1MGViMFx1MGViMlx1MGViM1x1MGViNFx1MGViNVx1MGViNlx1MGViN1x1MGViOFx1MGViOVx1MGViY1x1MGViMVx1MGViYlx1MGViZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGVjMFx1MGVjMVx1MGVjMlx1MGVjM1x1''@;'; put 'put ''MGVjNFx1MGVjOFx1MGVjOVx1MGVjYVx1MGVjYlx1MGVjY1x1MGVjZFx1MGVjNlx1ZmZmZFx1MGVkY1x1MGVkZFx1MjBhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1MGVkMFx1MGVkMVx1MGVkMlx1MGVkM1x1MGVkNFx1MGVkNVx1MGVkNlx1MGVkN1x1MGVkOFx1MGVkOVx1ZmZmZFx1ZmZmZFx4YTJceGFjXHhhNlx1ZmZmZCJ9LGlibTExMzM6ImNwMTEzMyIsY3NpYm0xMTMzOiJjcDExMzMiLGNwMTE2MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlNDhcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdc''@;'; put 'put ''dTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBl''@;'; put 'put ''MzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdTBlNDlcdTBlNGFcdTBlNGJcdTIwYWNcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVc''@;'; put 'put ''dTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJceGEyXHhhY1x4YTZceGEwIn0saWJtMTE2MToiY3AxMTYxIixjc2libTExNjE6ImNwMTE2MSIsY3AxMTYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBh''@;'; put 'put ''Y1x4ODFceDgyXHg4M1x4ODRcdTIwMjZceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1''@;'; put 'put ''MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUx''@;'; put 'put ''Zlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1''@;'; put 'put ''Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LGlibTExNjI6ImNwMTE2MiIsY3NpYm0xMTYyOiJjcDExNjIiLGNwMTE2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4''@;'; put 'put ''YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIy''@;'; put 'put ''XHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhk''@;'; put 'put ''OFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIw''@;'; put 'put ''XHUyMGFiXHhmZiJ9LGlibTExNjM6ImNwMTE2MyIsY3NpYm0xMTYzOiJjcDExNjMiLG1hY2Nyb2F0aWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhl''@;'; put 'put ''ZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx1MDE2MFx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTdkXHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTIyMDZceGI1XHUyMjAyXHUyMjEx''@;'; put 'put ''XHUyMjBmXHUwMTYxXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxN2VceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUwMTA2XHhhYlx1MDEwY1x1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTAxMTBcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUy''@;'; put 'put ''NWNhXHVmZmZkXHhhOVx1MjA0NFx4YTRcdTIwMzlcdTIwM2FceGM2XHhiYlx1MjAxM1x4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHUwMTA3XHhjMVx1MDEwZFx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdTAxMTFceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1''@;'; put 'put ''MDNjMFx4Y2JcdTAyZGFceGI4XHhjYVx4ZTZcdTAyYzcifSxtYWNjeXJpbGxpYzp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZc''@;'; put 'put ''dTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYw''@;'; put 'put ''XHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUw''@;'; put 'put ''NDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1''@;'; put 'put ''MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxtYWNncmVlazp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIwMjBcdTAzOTNc''@;'; put 'put ''dTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUwM2E4XHUwM2E5''@;'; put 'put ''XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAzYWRcdTAzYWVc''@;'; put 'put ''dTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlcdTAzYzJcdTAz''@;'; put 'put ''YzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQifSxtYWNpY2VsYW5kOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4''@;'; put 'put ''ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNj''@;'; put 'put ''MFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1''@;'; put 'put ''MjA0NFx4YTRceGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJk''@;'; put 'put ''ZFx1MDJkYlx1MDJjNyJ9LG1hY3JvbWFuOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhm''@;'; put 'put ''OVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4''@;'; put 'put ''YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIw''@;'; put 'put ''Mlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3Jv''@;'; put 'put ''bWFuaWE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIw''@;'; put 'put ''XHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHUwMTAyXHUwMTVlXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZcdTAxMDNcdTAxNWZceGJmXHhhMVx4YWNc''@;'; put 'put ''dTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdTAxNjJcdTAxNjNcdTIwMjFceGI3''@;'; put 'put ''XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN0aGFpOnt0eXBlOiJf''@;'; put 'put ''c2JjcyIsY2hhcnM6Ilx4YWJceGJiXHUyMDI2XHVmODhjXHVmODhmXHVmODkyXHVmODk1XHVmODk4XHVmODhiXHVmODhlXHVmODkxXHVmODk0XHVmODk3XHUyMDFjXHUyMDFkXHVmODk5XHVmZmZkXHUyMDIyXHVmODg0XHVmODg5XHVmODg1XHVmODg2XHVmODg3XHVmODg4XHVmODhhXHVmODhk''@;'; put 'put ''XHVmODkwXHVmODkzXHVmODk2XHUyMDE4XHUyMDE5XHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUx''@;'; put 'put ''NVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1''@;'; put 'put ''MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmVmZlx1MjAwYlx1MjAxM1x1MjAxNFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0''@;'; put 'put ''Y1x1MGU0ZFx1MjEyMlx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx4YWVceGE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sbWFjdHVya2lzaDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhk''@;'; put 'put ''MVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4''@;'; put 'put ''YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVc''@;'; put 'put ''dTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MDExZVx1MDExZlx1MDEzMFx1MDEzMVx1MDE1ZVx1MDE1Zlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4''@;'; put 'put ''Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdWZmZmRcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LG1hY3VrcmFpbmU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1''@;'; put 'put ''XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhi''@;'; put 'put ''MFx1MDQ5MFx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAyXHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0''@;'; put 'put ''NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjEx''@;'; put 'put ''Nlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1''@;'; put 'put ''MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQifSxrb2k4cjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNc''@;'; put 'put ''dTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIyMTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1''@;'; put 'put ''MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MDQwMVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNc''@;'; put 'put ''dTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0''@;'; put 'put ''MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0Mjdc''@;'; put 'put ''dTA0MmEifSxrb2k4dTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1MWNcdTI1MjRcdTI1MmNcdTI1MzRcdTI1M2NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OGNcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1YTBcdTIy''@;'; put 'put ''MTlcdTIyMWFcdTIyNDhcdTIyNjRcdTIyNjVceGEwXHUyMzIxXHhiMFx4YjJceGI3XHhmN1x1MjU1MFx1MjU1MVx1MjU1Mlx1MDQ1MVx1MDQ1NFx1MjU1NFx1MDQ1Nlx1MDQ1N1x1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MDQ5MVx1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2''@;'; put 'put ''MVx1MDQwMVx1MDQwNFx1MjU2M1x1MDQwNlx1MDQwN1x1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MDQ5MFx1MjU2Y1x4YTlcdTA0NGVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0''@;'; put 'put ''M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlcdTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThc''@;'; put 'put ''dTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxrb2k4cnU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUy''@;'; put 'put ''NTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4''@;'; put 'put ''YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTA0NWVcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZc''@;'; put 'put ''dTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTA0OTBcdTA0MGVceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQy''@;'; put 'put ''XHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUw''@;'; put 'put ''NDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDliXHUwNDkzXHUyMDFhXHUwNDkyXHUyMDFlXHUyMDI2XHUyMDIw''@;'; put 'put ''XHUyMDIxXHVmZmZkXHUyMDMwXHUwNGIzXHUyMDM5XHUwNGIyXHUwNGI3XHUwNGI2XHVmZmZkXHUwNDlhXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNGVmXHUw''@;'; put 'put ''NGVlXHUwNDUxXHhhNFx1MDRlM1x4YTZceGE3XHVmZmZkXHVmZmZkXHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1ZmZmZFx4YjBceGIxXHhiMlx1MDQwMVx1ZmZmZFx1MDRlMlx4YjZceGI3XHVmZmZkXHUyMTE2XHVmZmZkXHhiYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTlcdTA0NGVcdTA0MzBcdTA0''@;'; put 'put ''MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NGZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NGNcdTA0NGJcdTA0MzdcdTA0NDhcdTA0NGRcdTA0NDlc''@;'; put 'put ''dTA0NDdcdTA0NGFcdTA0MmVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MmZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MmNcdTA0''@;'; put 'put ''MmJcdTA0MTdcdTA0MjhcdTA0MmRcdTA0MjlcdTA0MjdcdTA0MmEifSxhcm1zY2lpODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4''@;'; put 'put ''OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdWZmZmRcdTA1ODdcdTA1ODkpKFx4YmJceGFiXHUyMDE0Llx1MDU1ZCwtXHUwNThhXHUyMDI2XHUwNTVjXHUwNTViXHUwNTVlXHUwNTMxXHUwNTYxXHUwNTMyXHUwNTYyXHUwNTMzXHUwNTYzXHUwNTM0XHUwNTY0XHUwNTM1''@;'; put 'put ''XHUwNTY1XHUwNTM2XHUwNTY2XHUwNTM3XHUwNTY3XHUwNTM4XHUwNTY4XHUwNTM5XHUwNTY5XHUwNTNhXHUwNTZhXHUwNTNiXHUwNTZiXHUwNTNjXHUwNTZjXHUwNTNkXHUwNTZkXHUwNTNlXHUwNTZlXHUwNTNmXHUwNTZmXHUwNTQwXHUwNTcwXHUwNTQxXHUwNTcxXHUwNTQyXHUwNTcyXHUw''@;'; put 'put ''NTQzXHUwNTczXHUwNTQ0XHUwNTc0XHUwNTQ1XHUwNTc1XHUwNTQ2XHUwNTc2XHUwNTQ3XHUwNTc3XHUwNTQ4XHUwNTc4XHUwNTQ5XHUwNTc5XHUwNTRhXHUwNTdhXHUwNTRiXHUwNTdiXHUwNTRjXHUwNTdjXHUwNTRkXHUwNTdkXHUwNTRlXHUwNTdlXHUwNTRmXHUwNTdmXHUwNTUwXHUwNTgw''@;'; put 'put ''XHUwNTUxXHUwNTgxXHUwNTUyXHUwNTgyXHUwNTUzXHUwNTgzXHUwNTU0XHUwNTg0XHUwNTU1XHUwNTg1XHUwNTU2XHUwNTg2XHUwNTVhXHVmZmZkIn0scmsxMDQ4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQwMlx1MDQwM1x1MjAxYVx1MDQ1M1x1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1''@;'; put 'put ''MjBhY1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwYVx1MDQ5YVx1MDRiYVx1MDQwZlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1MDQ1OVx1MjAzYVx1MDQ1YVx1MDQ5Ylx1MDRiYlx1MDQ1Zlx4YTBcdTA0YjBcdTA0YjFcdTA0ZDhc''@;'; put 'put ''eGE0XHUwNGU4XHhhNlx4YTdcdTA0MDFceGE5XHUwNDkyXHhhYlx4YWNceGFkXHhhZVx1MDRhZVx4YjBceGIxXHUwNDA2XHUwNDU2XHUwNGU5XHhiNVx4YjZceGI3XHUwNDUxXHUyMTE2XHUwNDkzXHhiYlx1MDRkOVx1MDRhMlx1MDRhM1x1MDRhZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1''@;'; put 'put ''MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQy''@;'; put 'put ''Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1''@;'; put 'put ''MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0ZiJ9LHRjdm46e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceGRhXHUxZWU0XHgwM1x1MWVlYVx1MWVlY1x1MWVlZVx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBcdTFlZThcdTFlZjBcdTFlZjJcdTFlZjZcdTFlZjhceGRkXHUxZWY0XHgxOFx4''@;'; put 'put ''MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzBcdTFlYTJceGMzXHhjMVx1MWVhMFx1MWViNlx1MWVhY1x4''@;'; put 'put ''YzhcdTFlYmFcdTFlYmNceGM5XHUxZWI4XHUxZWM2XHhjY1x1MWVjOFx1MDEyOFx4Y2RcdTFlY2FceGQyXHUxZWNlXHhkNVx4ZDNcdTFlY2NcdTFlZDhcdTFlZGNcdTFlZGVcdTFlZTBcdTFlZGFcdTFlZTJceGQ5XHUxZWU2XHUwMTY4XHhhMFx1MDEwMlx4YzJceGNhXHhkNFx1MDFhMFx1MDFh''@;'; put 'put ''Zlx1MDExMFx1MDEwM1x4ZTJceGVhXHhmNFx1MDFhMVx1MDFiMFx1MDExMVx1MWViMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x4ZTBcdTFlYTNceGUzXHhlMVx1MWVhMVx1MWViMlx1MWViMVx1MWViM1x1MWViNVx1MWVhZlx1MWViNFx1MWVhZVx1MWVhNlx1MWVhOFx1MWVhYVx1''@;'; put 'put ''MWVhNFx1MWVjMFx1MWViN1x1MWVhN1x1MWVhOVx1MWVhYlx1MWVhNVx1MWVhZFx4ZThcdTFlYzJcdTFlYmJcdTFlYmRceGU5XHUxZWI5XHUxZWMxXHUxZWMzXHUxZWM1XHUxZWJmXHUxZWM3XHhlY1x1MWVjOVx1MWVjNFx1MWViZVx1MWVkMlx1MDEyOVx4ZWRcdTFlY2JceGYyXHUxZWQ0XHUx''@;'; put 'put ''ZWNmXHhmNVx4ZjNcdTFlY2RcdTFlZDNcdTFlZDVcdTFlZDdcdTFlZDFcdTFlZDlcdTFlZGRcdTFlZGZcdTFlZTFcdTFlZGJcdTFlZTNceGY5XHUxZWQ2XHUxZWU3XHUwMTY5XHhmYVx1MWVlNVx1MWVlYlx1MWVlZFx1MWVlZlx1MWVlOVx1MWVmMVx1MWVmM1x1MWVmN1x1MWVmOVx4ZmRcdTFl''@;'; put 'put ''ZjVcdTFlZDAifSxnZW9yZ2lhbmFjYWRlbXk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJceDhkXHg4ZVx4OGZceDkwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUy''@;'; put 'put ''MDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHg5ZFx4OWVcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4''@;'; put 'put ''YmFceGJiXHhiY1x4YmRceGJlXHhiZlx1MTBkMFx1MTBkMVx1MTBkMlx1MTBkM1x1MTBkNFx1MTBkNVx1MTBkNlx1MTBkN1x1MTBkOFx1MTBkOVx1MTBkYVx1MTBkYlx1MTBkY1x1MTBkZFx1MTBkZVx1MTBkZlx1MTBlMFx1MTBlMVx1MTBlMlx1MTBlM1x1MTBlNFx1MTBlNVx1MTBlNlx1MTBl''@;'; put 'put ''N1x1MTBlOFx1MTBlOVx1MTBlYVx1MTBlYlx1MTBlY1x1MTBlZFx1MTBlZVx1MTBlZlx1MTBmMFx1MTBmMVx1MTBmMlx1MTBmM1x1MTBmNFx1MTBmNVx1MTBmNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4''@;'; put 'put ''ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxnZW9yZ2lhbnBzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1''@;'; put 'put ''MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRceDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZc''@;'; put 'put ''eGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEwZDRcdTEwZDVcdTEwZDZcdTEwZjFcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZjJcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEw''@;'; put 'put ''ZjNcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZjRcdTEwZWZcdTEwZjBcdTEwZjVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhm''@;'; put 'put ''Nlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiJ9LHB0MTU0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Nlx1MDQ5Mlx1MDRlZVx1MDQ5M1x1MjAxZVx1MjAyNlx1MDRiNlx1MDRhZVx1MDRiMlx1MDRhZlx1MDRhMFx1MDRlMlx1MDRhMlx1MDQ5YVx1MDRiYVx1MDRiOFx1''@;'; put 'put ''MDQ5N1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRiM1x1MDRiN1x1MDRhMVx1MDRlM1x1MDRhM1x1MDQ5Ylx1MDRiYlx1MDRiOVx4YTBcdTA0MGVcdTA0NWVcdTA0MDhcdTA0ZThcdTA0OThcdTA0YjBceGE3XHUwNDAxXHhhOVx1MDRkOFx4YWJceGFjXHUw''@;'; put 'put ''NGVmXHhhZVx1MDQ5Y1x4YjBcdTA0YjFcdTA0MDZcdTA0NTZcdTA0OTlcdTA0ZTlceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDRkOVx4YmJcdTA0NThcdTA0YWFcdTA0YWJcdTA0OWRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0''@;'; put 'put ''MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx2aXNjaWk6''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHUxZWIyXHgwM1x4MDRcdTFlYjRcdTFlYWFceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHUxZWY2XHgxNVx4MTZceDE3XHgxOFx1MWVmOFx4MWFceDFiXHgxY1x4MWRcdTFlZjRceDFmICFcIiMkJSYnKCkqKywtLi8w''@;'; put 'put ''MTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTFlYTBcdTFlYWVcdTFlYjBcdTFlYjZcdTFlYTRcdTFlYTZcdTFlYThcdTFlYWNcdTFlYmNcdTFlYjhcdTFlYmVcdTFlYzBcdTFlYzJcdTFl''@;'; put 'put ''YzRcdTFlYzZcdTFlZDBcdTFlZDJcdTFlZDRcdTFlZDZcdTFlZDhcdTFlZTJcdTFlZGFcdTFlZGNcdTFlZGVcdTFlY2FcdTFlY2VcdTFlY2NcdTFlYzhcdTFlZTZcdTAxNjhcdTFlZTRcdTFlZjJceGQ1XHUxZWFmXHUxZWIxXHUxZWI3XHUxZWE1XHUxZWE3XHUxZWE5XHUxZWFkXHUxZWJkXHUx''@;'; put 'put ''ZWI5XHUxZWJmXHUxZWMxXHUxZWMzXHUxZWM1XHUxZWM3XHUxZWQxXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWUwXHUwMWEwXHUxZWQ5XHUxZWRkXHUxZWRmXHUxZWNiXHUxZWYwXHUxZWU4XHUxZWVhXHUxZWVjXHUwMWExXHUxZWRiXHUwMWFmXHhjMFx4YzFceGMyXHhjM1x1MWVhMlx1MDEwMlx1''@;'; put 'put ''MWViM1x1MWViNVx4YzhceGM5XHhjYVx1MWViYVx4Y2NceGNkXHUwMTI4XHUxZWYzXHUwMTEwXHUxZWU5XHhkMlx4ZDNceGQ0XHUxZWExXHUxZWY3XHUxZWViXHUxZWVkXHhkOVx4ZGFcdTFlZjlcdTFlZjVceGRkXHUxZWUxXHUwMWIwXHhlMFx4ZTFceGUyXHhlM1x1MWVhM1x1MDEwM1x1MWVl''@;'; put 'put ''Zlx1MWVhYlx4ZThceGU5XHhlYVx1MWViYlx4ZWNceGVkXHUwMTI5XHUxZWM5XHUwMTExXHUxZWYxXHhmMlx4ZjNceGY0XHhmNVx1MWVjZlx1MWVjZFx1MWVlNVx4ZjlceGZhXHUwMTY5XHUxZWU3XHhmZFx1MWVlM1x1MWVlZSJ9LGlzbzY0NmNuOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgw''@;'; put 'put ''MVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjXHhhNSUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJT''@;'; put 'put ''VFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxp''@;'; put 'put ''c282NDZqcDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0''@;'; put 'put ''NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXHhhNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzZVx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxocHJvbWFuODp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5''@;'; put 'put ''OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGMwXHhjMlx4YzhceGNhXHhjYlx4Y2VceGNmXHhiNFx1MDJjYlx1MDJjNlx4YThcdTAyZGNceGQ5XHhkYlx1MjBhNFx4YWZceGRkXHhmZFx4YjBceGM3XHhlN1x4ZDFceGYxXHhhMVx4YmZceGE0XHhhM1x4YTVceGE3XHUwMTkyXHhhMlx4''@;'; put 'put ''ZTJceGVhXHhmNFx4ZmJceGUxXHhlOVx4ZjNceGZhXHhlMFx4ZThceGYyXHhmOVx4ZTRceGViXHhmNlx4ZmNceGM1XHhlZVx4ZDhceGM2XHhlNVx4ZWRceGY4XHhlNlx4YzRceGVjXHhkNlx4ZGNceGM5XHhlZlx4ZGZceGQ0XHhjMVx4YzNceGUzXHhkMFx4ZjBceGNkXHhjY1x4ZDNceGQyXHhk''@;'; put 'put ''NVx4ZjVcdTAxNjBcdTAxNjFceGRhXHUwMTc4XHhmZlx4ZGVceGZlXHhiN1x4YjVceGI2XHhiZVx1MjAxNFx4YmNceGJkXHhhYVx4YmFceGFiXHUyNWEwXHhiYlx4YjFcdWZmZmQifSxtYWNpbnRvc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4''@;'; put 'put ''ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhj''@;'; put 'put ''Nlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUz''@;'; put 'put ''XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVm''@;'; put 'put ''ZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sYXNjaWk6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sdGlzNjIwOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1MGUwNVx1MGUwNlx1MGUwN1x1MGUw''@;'; put 'put ''OFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUyMFx1MGUyMVx1MGUyMlx1MGUyM1x1''@;'; put 'put ''MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUz''@;'; put 'put ''Zlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OVx1MGU1YVx1''@;'; put 'put ''MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9fX0sNjQ3NzM6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz17MTAwMjk6Im1hY2NlbnRldXJvIixtYWNjZW50ZXVybzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEw''@;'; put 'put ''NVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4''@;'; put 'put ''YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0''@;'; put 'put ''N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFh''@;'; put 'put ''XHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyJ9LDgw''@;'; put 'put ''ODoiY3A4MDgiLGlibTgwODoiY3A4MDgiLGNwODA4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQy''@;'; put 'put ''Mlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1''@;'; put 'put ''MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1''@;'; put 'put ''NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1''@;'; put 'put ''MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHUyMGFjXHUyNWEwXHhhMCJ9LG1pazp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0''@;'; put 'put ''MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNc''@;'; put 'put ''dTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NjNcdTI1NTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1''@;'; put 'put ''MTBcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTIxMTZceGE3XHUyNTU3XHUyNTVkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRc''@;'; put 'put ''dTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxjcDcyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ZTlceGUyXHg4NFx4ZTBceDg2''@;'; put 'put ''XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHg4ZFx4OGVceDhmXHg5MFx1MDY1MVx1MDY1Mlx4ZjRceGE0XHUwNjQwXHhmYlx4ZjlcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRceGEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUw''@;'; put 'put ''NjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1''@;'; put 'put ''MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBc''@;'; put 'put ''dTI1ODBcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDFceGI1XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUyMjYxXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIy''@;'; put 'put ''MWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGFzY2lpOGJpdDoiYXNjaWkiLHVzYXNjaWk6ImFzY2lpIixhbnNpeDM0OiJhc2NpaSIsYW5zaXgzNDE5Njg6ImFzY2lpIixhbnNpeDM0MTk4NjoiYXNjaWkiLGNzYXNjaWk6ImFzY2lpIixjcDM2NzoiYXNjaWkiLGlibTM2NzoiYXNjaWkiLGlzb2ly''@;'; put 'put ''NjoiYXNjaWkiLGlzbzY0NnVzOiJhc2NpaSIsaXNvNjQ2aXJ2OiJhc2NpaSIsdXM6ImFzY2lpIixsYXRpbjE6Imlzbzg4NTkxIixsYXRpbjI6Imlzbzg4NTkyIixsYXRpbjM6Imlzbzg4NTkzIixsYXRpbjQ6Imlzbzg4NTk0IixsYXRpbjU6Imlzbzg4NTk5IixsYXRpbjY6Imlzbzg4NTkxMCIs''@;'; put 'put ''bGF0aW43OiJpc284ODU5MTMiLGxhdGluODoiaXNvODg1OTE0IixsYXRpbjk6Imlzbzg4NTkxNSIsbGF0aW4xMDoiaXNvODg1OTE2Iixjc2lzb2xhdGluMToiaXNvODg1OTEiLGNzaXNvbGF0aW4yOiJpc284ODU5MiIsY3Npc29sYXRpbjM6Imlzbzg4NTkzIixjc2lzb2xhdGluNDoiaXNvODg1''@;'; put 'put ''OTQiLGNzaXNvbGF0aW5jeXJpbGxpYzoiaXNvODg1OTUiLGNzaXNvbGF0aW5hcmFiaWM6Imlzbzg4NTk2Iixjc2lzb2xhdGluZ3JlZWs6Imlzbzg4NTk3Iixjc2lzb2xhdGluaGVicmV3OiJpc284ODU5OCIsY3Npc29sYXRpbjU6Imlzbzg4NTk5Iixjc2lzb2xhdGluNjoiaXNvODg1OTEwIixs''@;'; put 'put ''MToiaXNvODg1OTEiLGwyOiJpc284ODU5MiIsbDM6Imlzbzg4NTkzIixsNDoiaXNvODg1OTQiLGw1OiJpc284ODU5OSIsbDY6Imlzbzg4NTkxMCIsbDc6Imlzbzg4NTkxMyIsbDg6Imlzbzg4NTkxNCIsbDk6Imlzbzg4NTkxNSIsbDEwOiJpc284ODU5MTYiLGlzb2lyMTQ6ImlzbzY0NmpwIixp''@;'; put 'put ''c29pcjU3OiJpc282NDZjbiIsaXNvaXIxMDA6Imlzbzg4NTkxIixpc29pcjEwMToiaXNvODg1OTIiLGlzb2lyMTA5OiJpc284ODU5MyIsaXNvaXIxMTA6Imlzbzg4NTk0Iixpc29pcjE0NDoiaXNvODg1OTUiLGlzb2lyMTI3OiJpc284ODU5NiIsaXNvaXIxMjY6Imlzbzg4NTk3Iixpc29pcjEz''@;'; put 'put ''ODoiaXNvODg1OTgiLGlzb2lyMTQ4OiJpc284ODU5OSIsaXNvaXIxNTc6Imlzbzg4NTkxMCIsaXNvaXIxNjY6InRpczYyMCIsaXNvaXIxNzk6Imlzbzg4NTkxMyIsaXNvaXIxOTk6Imlzbzg4NTkxNCIsaXNvaXIyMDM6Imlzbzg4NTkxNSIsaXNvaXIyMjY6Imlzbzg4NTkxNiIsY3A4MTk6Imlz''@;'; put 'put ''bzg4NTkxIixpYm04MTk6Imlzbzg4NTkxIixjeXJpbGxpYzoiaXNvODg1OTUiLGFyYWJpYzoiaXNvODg1OTYiLGFyYWJpYzg6Imlzbzg4NTk2IixlY21hMTE0OiJpc284ODU5NiIsYXNtbzcwODoiaXNvODg1OTYiLGdyZWVrOiJpc284ODU5NyIsZ3JlZWs4OiJpc284ODU5NyIsZWNtYTExODoi''@;'; put 'put ''aXNvODg1OTciLGVsb3Q5Mjg6Imlzbzg4NTk3IixoZWJyZXc6Imlzbzg4NTk4IixoZWJyZXc4OiJpc284ODU5OCIsdHVya2lzaDoiaXNvODg1OTkiLHR1cmtpc2g4OiJpc284ODU5OSIsdGhhaToiaXNvODg1OTExIix0aGFpODoiaXNvODg1OTExIixjZWx0aWM6Imlzbzg4NTkxNCIsY2VsdGlj''@;'; put 'put ''ODoiaXNvODg1OTE0Iixpc29jZWx0aWM6Imlzbzg4NTkxNCIsdGlzNjIwMDoidGlzNjIwIix0aXM2MjAyNTI5MToidGlzNjIwIix0aXM2MjAyNTMzMDoidGlzNjIwIiwxZTQ6Im1hY3JvbWFuIiwxMDAwNjoibWFjZ3JlZWsiLDEwMDA3OiJtYWNjeXJpbGxpYyIsMTAwNzk6Im1hY2ljZWxhbmQi''@;'; put 'put ''LDEwMDgxOiJtYWN0dXJraXNoIixjc3BjOGNvZGVwYWdlNDM3OiJjcDQzNyIsY3NwYzc3NWJhbHRpYzoiY3A3NzUiLGNzcGM4NTBtdWx0aWxpbmd1YWw6ImNwODUwIixjc3BjcDg1MjoiY3A4NTIiLGNzcGM4NjJsYXRpbmhlYnJldzoiY3A4NjIiLGNwZ3I6ImNwODY5Iixtc2VlOiJjcDEyNTAi''@;'; put 'put ''LG1zY3lybDoiY3AxMjUxIixtc2Fuc2k6ImNwMTI1MiIsbXNncmVlazoiY3AxMjUzIixtc3R1cms6ImNwMTI1NCIsbXNoZWJyOiJjcDEyNTUiLG1zYXJhYjoiY3AxMjU2Iix3aW5iYWx0cmltOiJjcDEyNTciLGNwMjA4NjY6ImtvaThyIiwyMDg2Njoia29pOHIiLGlibTg3ODoia29pOHIiLGNz''@;'; put 'put ''a29pOHI6ImtvaThyIixjcDIxODY2OiJrb2k4dSIsMjE4NjY6ImtvaTh1IixpYm0xMTY4OiJrb2k4dSIsc3RyazEwNDgyMDAyOiJyazEwNDgiLHRjdm41NzEyOiJ0Y3ZuIix0Y3ZuNTcxMjE6InRjdm4iLGdiMTk4ODgwOiJpc282NDZjbiIsY246ImlzbzY0NmNuIixjc2lzbzE0amlzYzYyMjBy''@;'; put 'put ''bzoiaXNvNjQ2anAiLGppc2M2MjIwMTk2OXJvOiJpc282NDZqcCIsanA6ImlzbzY0NmpwIixjc2hwcm9tYW44OiJocHJvbWFuOCIscjg6Imhwcm9tYW44Iixyb21hbjg6Imhwcm9tYW44Iix4cm9tYW44OiJocHJvbWFuOCIsaWJtMTA1MToiaHByb21hbjgiLG1hYzoibWFjaW50b3NoIixjc21h''@;'; put 'put ''Y2ludG9zaDoibWFjaW50b3NoIn19LDQzMjgwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBsZSgpe3RoaXMub3ZlcmZsb3dCeXRlPS0xfWZ1bmN0aW9uIE0oSyxJKXt0aGlzLmljb252''@;'; put 'put ''PUl9ZnVuY3Rpb24gTyhLLEkpe3ZvaWQgMD09PShLPUt8fHt9KS5hZGRCT00mJihLLmFkZEJPTT0hMCksdGhpcy5lbmNvZGVyPUkuaWNvbnYuZ2V0RW5jb2RlcigidXRmLTE2bGUiLEspfWZ1bmN0aW9uIFIoSyxJKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmluaXRpYWxCeXRlcz1bXSx0aGlz''@;'; put 'put ''LmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz1LfHx7fSx0aGlzLmljb252PUkuaWNvbnZ9ZnVuY3Rpb24geihLLEkpe3ZhciBrPUl8fCJ1dGYtMTZsZSI7aWYoSy5sZW5ndGg+PTIpaWYoMjU0PT1LWzBdJiYyNTU9PUtbMV0paz0idXRmLTE2YmUiO2Vsc2UgaWYoMjU1PT1LWzBdJiYy''@;'; put 'put ''NTQ9PUtbMV0paz0idXRmLTE2bGUiO2Vsc2V7Zm9yKHZhciBFPTAsaj0wLFY9TWF0aC5taW4oSy5sZW5ndGgtSy5sZW5ndGglMiw2NCksQj0wO0I8VjtCKz0yKTA9PT1LW0JdJiYwIT09S1tCKzFdJiZqKyssMCE9PUtbQl0mJjA9PT1LW0IrMV0mJkUrKztqPkU/az0idXRmLTE2YmUiOmo8RSYm''@;'; put 'put ''KGs9InV0Zi0xNmxlIil9cmV0dXJuIGt9SWUudXRmMTZiZT14LHgucHJvdG90eXBlLmVuY29kZXI9bSx4LnByb3RvdHlwZS5kZWNvZGVyPWxlLHgucHJvdG90eXBlLmJvbUF3YXJlPSEwLG0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2Zvcih2YXIgST1hZS5mcm9tKEssInVjczIiKSxr''@;'; put 'put ''PTA7azxJLmxlbmd0aDtrKz0yKXt2YXIgRT1JW2tdO0lba109SVtrKzFdLElbaysxXT1FfXJldHVybiBJfSxtLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LGxlLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZigwPT1LLmxlbmd0aClyZXR1cm4iIjt2YXIgST1hZS5hbGxvYyhLLmxl''@;'; put 'put ''bmd0aCsxKSxrPTAsRT0wO2ZvcigtMSE9PXRoaXMub3ZlcmZsb3dCeXRlJiYoSVswXT1LWzBdLElbMV09dGhpcy5vdmVyZmxvd0J5dGUsaz0xLEU9Mik7azxLLmxlbmd0aC0xO2srPTIsRSs9MilJW0VdPUtbaysxXSxJW0UrMV09S1trXTtyZXR1cm4gdGhpcy5vdmVyZmxvd0J5dGU9az09Sy5s''@;'; put 'put ''ZW5ndGgtMT9LW0subGVuZ3RoLTFdOi0xLEkuc2xpY2UoMCxFKS50b1N0cmluZygidWNzMiIpfSxsZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxJZS51dGYxNj1NLE0ucHJvdG90eXBlLmVuY29kZXI9TyxNLnByb3RvdHlwZS5kZWNvZGVyPVIsTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rp''@;'; put 'put ''b24oSyl7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShLKX0sTy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sUi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaChL''@;'; put 'put ''KSx0aGlzLmluaXRpYWxCeXRlc0xlbis9Sy5sZW5ndGgsdGhpcy5pbml0aWFsQnl0ZXNMZW48MTYpcmV0dXJuIiI7dmFyIEk9eihLPWFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVj''@;'; put 'put ''b2RlcihJLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShLKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIEs9YWUuY29uY2F0KHRoaXMu''@;'; put 'put ''aW5pdGlhbEJ5dGVzKSxJPXooSyx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEksdGhpcy5vcHRpb25zKTt2YXIgaz10aGlzLmRlY29kZXIud3JpdGUoSyksRT10aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEU/aytFOmt9''@;'; put 'put ''cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDkyODQ0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoSyxJKXt0aGlzLmljb252PUksdGhpcy5ib21Bd2FyZT0hMCx0aGlzLmlzTEU9Sy5pc0xFfWZ1bmN0aW9uIG0oSyxJKXt0aGlz''@;'; put 'put ''LmlzTEU9SS5pc0xFLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wfWZ1bmN0aW9uIGxlKEssSSl7dGhpcy5pc0xFPUkuaXNMRSx0aGlzLmJhZENoYXI9SS5pY29udi5kZWZhdWx0Q2hhclVuaWNvZGUuY2hhckNvZGVBdCgwKSx0aGlzLm92ZXJmbG93PW51bGx9ZnVuY3Rpb24gTShLLEkpe3RoaXMuaWNv''@;'; put 'put ''bnY9SX1mdW5jdGlvbiBPKEssSSl7dm9pZCAwPT09KEs9S3x8e30pLmFkZEJPTSYmKEsuYWRkQk9NPSEwKSx0aGlzLmVuY29kZXI9SS5pY29udi5nZXRFbmNvZGVyKEsuZGVmYXVsdEVuY29kaW5nfHwidXRmLTMybGUiLEspfWZ1bmN0aW9uIFIoSyxJKXt0aGlzLmRlY29kZXI9bnVsbCx0aGlz''@;'; put 'put ''LmluaXRpYWxCeXRlcz1bXSx0aGlzLmluaXRpYWxCeXRlc0xlbj0wLHRoaXMub3B0aW9ucz1LfHx7fSx0aGlzLmljb252PUkuaWNvbnZ9ZnVuY3Rpb24geihLLEkpe3ZhciBrPUl8fCJ1dGYtMzJsZSI7aWYoSy5sZW5ndGg+PTQpaWYoNjUyNzk9PT1LLnJlYWRVSW50MzJCRSgwKSlrPSJ1dGYt''@;'; put 'put ''MzJiZSI7ZWxzZSBpZig2NTI3OT09PUsucmVhZFVJbnQzMkxFKDApKWs9InV0Zi0zMmxlIjtlbHNle2Zvcih2YXIgRT0wLGo9MCxWPTAsQj0wLFk9TWF0aC5taW4oSy5sZW5ndGgtSy5sZW5ndGglNCwxMjgpLFg9MDtYPFk7WCs9NCl7dmFyIFU9S1tYXSxxPUtbWCsxXSxlZT1LW1grMl0sdGU9''@;'; put 'put ''S1tYKzNdOygwIT09VXx8cT4xNikmJisraiwoMCE9PXRlfHxlZT4xNikmJisrRSwwPT09VSYmMD09PXEmJjA9PT1lZSYmMCE9PXRlJiZCKyssMCE9PVUmJjA9PT1xJiYwPT09ZWUmJjA9PT10ZSYmVisrfWo8RT9rPSJ1dGYtMzJiZSI6RTxqJiYoaz0idXRmLTMybGUiKSxCPlY/az0idXRmLTMy''@;'; put 'put ''YmUiOkI8ViYmKGs9InV0Zi0zMmxlIil9cmV0dXJuIGt9SWUuX3V0ZjMyPXgsSWUudXRmMzJsZT17dHlwZToiX3V0ZjMyIixpc0xFOiEwfSxJZS51dGYzMmJlPXt0eXBlOiJfdXRmMzIiLGlzTEU6ITF9LEllLnVjczRsZT0idXRmMzJsZSIsSWUudWNzNGJlPSJ1dGYzMmJlIix4LnByb3RvdHlw''@;'; put 'put ''ZS5lbmNvZGVyPW0seC5wcm90b3R5cGUuZGVjb2Rlcj1sZSxtLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtmb3IodmFyIEk9YWUuZnJvbShLLCJ1Y3MyIiksaz1hZS5hbGxvYygyKkkubGVuZ3RoKSxFPXRoaXMuaXNMRT9rLndyaXRlVUludDMyTEU6ay53cml0ZVVJbnQzMkJFLGo9MCxW''@;'; put 'put ''PTA7VjxJLmxlbmd0aDtWKz0yKXt2YXIgQj1JLnJlYWRVSW50MTZMRShWKSxZPTU1Mjk2PD1CJiZCPDU2MzIwO2lmKHRoaXMuaGlnaFN1cnJvZ2F0ZSl7aWYoIVkmJjU2MzIwPD1CJiZCPDU3MzQ0KXtFLmNhbGwoayw2NTUzNisodGhpcy5oaWdoU3Vycm9nYXRlLTU1Mjk2PDwxMHxCLTU2MzIw''@;'; put 'put ''KSxqKSxqKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wO2NvbnRpbnVlfUUuY2FsbChrLHRoaXMuaGlnaFN1cnJvZ2F0ZSxqKSxqKz00fVk/dGhpcy5oaWdoU3Vycm9nYXRlPUI6KEUuY2FsbChrLEIsaiksais9NCx0aGlzLmhpZ2hTdXJyb2dhdGU9MCl9cmV0dXJuIGo8ay5sZW5ndGgmJihrPWsu''@;'; put 'put ''c2xpY2UoMCxqKSksa30sbS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYodGhpcy5oaWdoU3Vycm9nYXRlKXt2YXIgSz1hZS5hbGxvYyg0KTtyZXR1cm4gdGhpcy5pc0xFP0sud3JpdGVVSW50MzJMRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCk6Sy53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1''@;'; put 'put ''cnJvZ2F0ZSwwKSx0aGlzLmhpZ2hTdXJyb2dhdGU9MCxLfX0sbGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEspe2lmKDA9PT1LLmxlbmd0aClyZXR1cm4iIjt0aGlzLm92ZXJmbG93JiYoSz1hZS5jb25jYXQoW3RoaXMub3ZlcmZsb3csS10pKTt2YXIgST1LLmxlbmd0aC1LLmxlbmd0aCU0''@;'; put 'put ''O0subGVuZ3RoIT09ST8odGhpcy5vdmVyZmxvdz1LLnNsaWNlKEkpLEs9Sy5zbGljZSgwLEkpKTp0aGlzLm92ZXJmbG93PW51bGw7Zm9yKHZhciBrPWFlLmFsbG9jKEkpLEU9MCxqPTA7ajxJO2orPTQpe3ZhciBWPXRoaXMuaXNMRT9LLnJlYWRVSW50MzJMRShqKTpLLnJlYWRVSW50MzJCRShq''@;'; put 'put ''KTtpZihWPDY1NTM2KWsud3JpdGVVSW50MTZMRShWLEUpLEUrPTI7ZWxzZSBpZihWPjExMTQxMTEpay53cml0ZVVJbnQxNkxFKHRoaXMuYmFkQ2hhcixFKSxFKz0yO2Vsc2V7dmFyIFk9NTYzMjArKDEwMjMmKFYtPTY1NTM2KSk7ay53cml0ZVVJbnQxNkxFKDU1Mjk2fFY+PjEwLEUpLGsud3Jp''@;'; put 'put ''dGVVSW50MTZMRShZLEUrPTIpLEUrPTJ9fXJldHVybiBrLnNsaWNlKDAsRSkudG9TdHJpbmcoInVjczIiKX0sbGUucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMub3ZlcmZsb3c9bnVsbH0sSWUudXRmMzI9TSxJZS51Y3M0PU0sTS5wcm90b3R5cGUuZW5jb2Rlcj1PLE0ucHJvdG90eXBl''@;'; put 'put ''LmRlY29kZXI9UixPLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKEspfSxPLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxSLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihLKXtpZighdGhpcy5k''@;'; put 'put ''ZWNvZGVyKXtpZih0aGlzLmluaXRpYWxCeXRlcy5wdXNoKEspLHRoaXMuaW5pdGlhbEJ5dGVzTGVuKz1LLmxlbmd0aCx0aGlzLmluaXRpYWxCeXRlc0xlbjwzMilyZXR1cm4iIjt2YXIgaz16KGFlLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGlu''@;'; put 'put ''Zyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihrLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShLKX0sUi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRo''@;'; put 'put ''aXMuZGVjb2Rlcil7dmFyIEs9YWUuY29uY2F0KHRoaXMuaW5pdGlhbEJ5dGVzKSxJPXooSyx0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTt0aGlzLmRlY29kZXI9dGhpcy5pY29udi5nZXREZWNvZGVyKEksdGhpcy5vcHRpb25zKTt2YXIgaz10aGlzLmRlY29kZXIud3JpdGUoSyksRT10''@;'; put 'put ''aGlzLmRlY29kZXIuZW5kKCk7cmV0dXJuIEU/aytFOmt9cmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKX19LDc4MzU0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDE3OSkuQnVmZmVyO2Z1bmN0aW9uIHgoWSxYKXt0aGlzLmljb252PVh9SWUudXRmNz14LEllLnVuaWNvZGUx''@;'; put 'put ''MXV0Zjc9InV0ZjciLHgucHJvdG90eXBlLmVuY29kZXI9bGUseC5wcm90b3R5cGUuZGVjb2Rlcj1NLHgucHJvdG90eXBlLmJvbUF3YXJlPSEwO3ZhciBtPS9bXkEtWmEtejAtOSdcKFwpLC1cLlwvOlw/IFxuXHJcdF0rL2c7ZnVuY3Rpb24gbGUoWSxYKXt0aGlzLmljb252PVguaWNvbnZ9ZnVu''@;'; put 'put ''Y3Rpb24gTShZLFgpe3RoaXMuaWNvbnY9WC5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9bGUucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFkpe3JldHVybiBhZS5mcm9tKFkucmVwbGFjZShtLGZ1bmN0aW9uKFgpe3JldHVybiIrIisoIisiPT09WD8iIjp0aGlz''@;'; put 'put ''Lmljb252LmVuY29kZShYLCJ1dGYxNi1iZSIpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC89KyQvLCIiKSkrIi0ifS5iaW5kKHRoaXMpKSl9LGxlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9O2Zvcih2YXIgTz0vW0EtWmEtejAtOVwvK10vLFI9W10sej0wO3o8MjU2O3orKylSW3pd''@;'; put 'put ''PU8udGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKHopKTt2YXIgSz0iKyIuY2hhckNvZGVBdCgwKSxJPSItIi5jaGFyQ29kZUF0KDApLGs9IiYiLmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gRShZLFgpe3RoaXMuaWNvbnY9WH1mdW5jdGlvbiBqKFksWCl7dGhpcy5pY29udj1YLmljb252LHRoaXMu''@;'; put 'put ''aW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT1hZS5hbGxvYyg2KSx0aGlzLmJhc2U2NEFjY3VtSWR4PTB9ZnVuY3Rpb24gVihZLFgpe3RoaXMuaWNvbnY9WC5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiJ9TS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7''@;'; put 'put ''Zm9yKHZhciBYPSIiLFU9MCxxPXRoaXMuaW5CYXNlNjQsZWU9dGhpcy5iYXNlNjRBY2N1bSx0ZT0wO3RlPFkubGVuZ3RoO3RlKyspaWYocSl7aWYoIVJbWVt0ZV1dKXtpZih0ZT09VSYmWVt0ZV09PUkpWCs9IisiO2Vsc2V7dmFyIG9lPWVlK1kuc2xpY2UoVSx0ZSkudG9TdHJpbmcoKTtYKz10''@;'; put 'put ''aGlzLmljb252LmRlY29kZShhZS5mcm9tKG9lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1ZW3RlXSE9SSYmdGUtLSxVPXRlKzEscT0hMSxlZT0iIn19ZWxzZSBZW3RlXT09SyYmKFgrPXRoaXMuaWNvbnYuZGVjb2RlKFkuc2xpY2UoVSx0ZSksImFzY2lpIiksVT10ZSsxLHE9ITApO2lmKHEpe3Zh''@;'; put 'put ''ciBzZT0ob2U9ZWUrWS5zbGljZShVKS50b1N0cmluZygpKS5sZW5ndGgtb2UubGVuZ3RoJTg7ZWU9b2Uuc2xpY2Uoc2UpLG9lPW9lLnNsaWNlKDAsc2UpLFgrPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgWCs9dGhpcy5pY29udi5kZWNv''@;'; put 'put ''ZGUoWS5zbGljZShVKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND1xLHRoaXMuYmFzZTY0QWNjdW09ZWUsWH0sTS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFk9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoPjAmJihZPXRoaXMuaWNv''@;'; put 'put ''bnYuZGVjb2RlKGFlLmZyb20odGhpcy5iYXNlNjRBY2N1bSwiYmFzZTY0IiksInV0ZjE2LWJlIikpLHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNlNjRBY2N1bT0iIixZfSxJZS51dGY3aW1hcD1FLEUucHJvdG90eXBlLmVuY29kZXI9aixFLnByb3RvdHlwZS5kZWNvZGVyPVYsRS5wcm90b3R5''@;'; put 'put ''cGUuYm9tQXdhcmU9ITAsai5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYPXRoaXMuaW5CYXNlNjQsVT10aGlzLmJhc2U2NEFjY3VtLHE9dGhpcy5iYXNlNjRBY2N1bUlkeCxlZT1hZS5hbGxvYyg1KlkubGVuZ3RoKzEwKSx0ZT0wLG9lPTA7b2U8WS5sZW5ndGg7b2UrKyl7''@;'; put 'put ''dmFyIHNlPVkuY2hhckNvZGVBdChvZSk7MzI8PXNlJiZzZTw9MTI2PyhYJiYocT4wJiYodGUrPWVlLndyaXRlKFUuc2xpY2UoMCxxKS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2UoLz0rJC8sIiIpLHRlKSxxPTApLGVlW3RlKytdPUksWD0hMSksWHx8KGVl''@;'; put 'put ''W3RlKytdPXNlLHNlPT09ayYmKGVlW3RlKytdPUkpKSk6KFh8fChlZVt0ZSsrXT1rLFg9ITApLFgmJihVW3ErK109c2U+PjgsVVtxKytdPTI1NSZzZSxxPT1VLmxlbmd0aCYmKHRlKz1lZS53cml0ZShVLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIiksdGUpLHE9MCkpKX1y''@;'; put 'put ''ZXR1cm4gdGhpcy5pbkJhc2U2ND1YLHRoaXMuYmFzZTY0QWNjdW1JZHg9cSxlZS5zbGljZSgwLHRlKX0sai5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFk9YWUuYWxsb2MoMTApLFg9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0QWNjdW1JZHg+MCYmKFgrPVkud3Jp''@;'; put 'put ''dGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIikucmVwbGFjZSgvPSskLywiIiksWCksdGhpcy5iYXNlNjRBY2N1bUlkeD0wKSxZW1grK109SSx0aGlzLmluQmFzZTY0PSExKSxZLnNsaWNl''@;'; put 'put ''KDAsWCl9O3ZhciBCPVIuc2xpY2UoKTtCWyIsIi5jaGFyQ29kZUF0KDApXT0hMCxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihZKXtmb3IodmFyIFg9IiIsVT0wLHE9dGhpcy5pbkJhc2U2NCxlZT10aGlzLmJhc2U2NEFjY3VtLHRlPTA7dGU8WS5sZW5ndGg7dGUrKylpZihxKXtpZighQltZ''@;'; put 'put ''W3RlXV0pe2lmKHRlPT1VJiZZW3RlXT09SSlYKz0iJiI7ZWxzZXt2YXIgb2U9ZWUrWS5zbGljZShVLHRlKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpO1grPXRoaXMuaWNvbnYuZGVjb2RlKGFlLmZyb20ob2UsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfVlbdGVdIT1JJiZ0ZS0tLFU9dGUr''@;'; put 'put ''MSxxPSExLGVlPSIifX1lbHNlIFlbdGVdPT1rJiYoWCs9dGhpcy5pY29udi5kZWNvZGUoWS5zbGljZShVLHRlKSwiYXNjaWkiKSxVPXRlKzEscT0hMCk7aWYocSl7dmFyIHNlPShvZT1lZStZLnNsaWNlKFUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIikpLmxlbmd0aC1vZS5sZW5ndGgl''@;'; put 'put ''ODtlZT1vZS5zbGljZShzZSksb2U9b2Uuc2xpY2UoMCxzZSksWCs9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbShvZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBYKz10aGlzLmljb252LmRlY29kZShZLnNsaWNlKFUpLCJhc2NpaSIpO3JldHVybiB0aGlzLmluQmFzZTY0PXEsdGhpcy5i''@;'; put 'put ''YXNlNjRBY2N1bT1lZSxYfSxWLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWT0iIjtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFk9dGhpcy5pY29udi5kZWNvZGUoYWUuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYt''@;'; put 'put ''YmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLFl9fSw2MzAxODooYXQsSWUpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGFlKG0sbGUpe3RoaXMuZW5jb2Rlcj1tLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIHgobSxsZSl7dGhpcy5kZWNvZGVyPW0sdGhpcy5wYXNz''@;'; put 'put ''PSExLHRoaXMub3B0aW9ucz1sZXx8e319SWUuUHJlcGVuZEJPTT1hZSxhZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSl7cmV0dXJuIHRoaXMuYWRkQk9NJiYobT0iXHVmZWZmIittLHRoaXMuYWRkQk9NPSExKSx0aGlzLmVuY29kZXIud3JpdGUobSl9LGFlLnByb3RvdHlwZS5lbmQ9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxJZS5TdHJpcEJPTT14LHgucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKG0pe3ZhciBsZT10aGlzLmRlY29kZXIud3JpdGUobSk7cmV0dXJuIHRoaXMucGFzc3x8IWxlfHwoIlx1ZmVmZiI9PT1sZVswXSYmKGxlPWxlLnNsaWNlKDEp''@;'; put 'put ''LCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLGxlfSx4LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sNTM6KGF0LEllLEYpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBhZT1GKDI0MTc5KS5CdWZmZXIseD1GKDYzMDE4KSxtPWF0LmV4cG9ydHM7bS5lbmNvZGluZ3M9bnVsbCxtLmRlZmF1bHRDaGFyVW5pY29kZT0iXHVmZmZkIixtLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZT0iPyIsbS5lbmNvZGU9ZnVuY3Rpb24oUix6LEspe1I9IiIrKFJ8fCIiKTt2''@;'; put 'put ''YXIgST1tLmdldEVuY29kZXIoeixLKSxrPUkud3JpdGUoUiksRT1JLmVuZCgpO3JldHVybiBFJiZFLmxlbmd0aD4wP2FlLmNvbmNhdChbayxFXSk6a30sbS5kZWNvZGU9ZnVuY3Rpb24oUix6LEspeyJzdHJpbmciPT10eXBlb2YgUiYmKG0uc2tpcERlY29kZVdhcm5pbmd8fChjb25zb2xlLmVy''@;'; put 'put ''cm9yKCJJY29udi1saXRlIHdhcm5pbmc6IGRlY29kZSgpLWluZyBzdHJpbmdzIGlzIGRlcHJlY2F0ZWQuIFJlZmVyIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9hc2h0dWNoa2luL2ljb252LWxpdGUvd2lraS9Vc2UtQnVmZmVycy13aGVuLWRlY29kaW5nIiksbS5za2lwRGVjb2RlV2FybmluZz0h''@;'; put 'put ''MCksUj1hZS5mcm9tKCIiKyhSfHwiIiksImJpbmFyeSIpKTt2YXIgST1tLmdldERlY29kZXIoeixLKSxrPUkud3JpdGUoUiksRT1JLmVuZCgpO3JldHVybiBFP2srRTprfSxtLmVuY29kaW5nRXhpc3RzPWZ1bmN0aW9uKFIpe3RyeXtyZXR1cm4gbS5nZXRDb2RlYyhSKSwhMH1jYXRjaHtyZXR1''@;'; put 'put ''cm4hMX19LG0udG9FbmNvZGluZz1tLmVuY29kZSxtLmZyb21FbmNvZGluZz1tLmRlY29kZSxtLl9jb2RlY0RhdGFDYWNoZT17fSxtLmdldENvZGVjPWZ1bmN0aW9uKFIpe20uZW5jb2RpbmdzfHwobS5lbmNvZGluZ3M9Rig0NDY1NykpO2Zvcih2YXIgej1tLl9jYW5vbmljYWxpemVFbmNvZGlu''@;'; put 'put ''ZyhSKSxLPXt9Ozspe3ZhciBJPW0uX2NvZGVjRGF0YUNhY2hlW3pdO2lmKEkpcmV0dXJuIEk7dmFyIGs9bS5lbmNvZGluZ3Nbel07c3dpdGNoKHR5cGVvZiBrKXtjYXNlInN0cmluZyI6ej1rO2JyZWFrO2Nhc2Uib2JqZWN0Ijpmb3IodmFyIEUgaW4gaylLW0VdPWtbRV07Sy5lbmNvZGluZ05h''@;'; put 'put ''bWV8fChLLmVuY29kaW5nTmFtZT16KSx6PWsudHlwZTticmVhaztjYXNlImZ1bmN0aW9uIjpyZXR1cm4gSy5lbmNvZGluZ05hbWV8fChLLmVuY29kaW5nTmFtZT16KSxJPW5ldyBrKEssbSksbS5fY29kZWNEYXRhQ2FjaGVbSy5lbmNvZGluZ05hbWVdPUksSTtkZWZhdWx0OnRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICciK1IrIicgKHNlYXJjaGVkIGFzOiAnIit6KyInKSIpfX19LG0uX2Nhbm9uaWNhbGl6ZUVuY29kaW5nPWZ1bmN0aW9uKE8pe3JldHVybigiIitPKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcZHs0fSR8W14wLTlhLXpdL2csIiIpfSxt''@;'; put 'put ''LmdldEVuY29kZXI9ZnVuY3Rpb24oUix6KXt2YXIgSz1tLmdldENvZGVjKFIpLEk9bmV3IEsuZW5jb2Rlcih6LEspO3JldHVybiBLLmJvbUF3YXJlJiZ6JiZ6LmFkZEJPTSYmKEk9bmV3IHguUHJlcGVuZEJPTShJLHopKSxJfSxtLmdldERlY29kZXI9ZnVuY3Rpb24oUix6KXt2YXIgSz1tLmdl''@;'; put 'put ''dENvZGVjKFIpLEk9bmV3IEsuZGVjb2Rlcih6LEspO3JldHVybiBLLmJvbUF3YXJlJiYhKHomJiExPT09ei5zdHJpcEJPTSkmJihJPW5ldyB4LlN0cmlwQk9NKEkseikpLEl9O3ZhciBsZT10eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMmJnByb2Nlc3MudmVyc2lvbnMubm9k''@;'; put 'put ''ZTtpZihsZSl7dmFyIE09bGUuc3BsaXQoIi4iKS5tYXAoTnVtYmVyKTsoTVswXT4wfHxNWzFdPj0xMCkmJkYoNjkzMzEpKG0pLEYoMTk1MjcpKG0pfX0sMjI2MDE6KGF0LEllKT0+e0llLnJlYWQ9ZnVuY3Rpb24oRixhZSx4LG0sbGUpe3ZhciBNLE8sUj04KmxlLW0tMSx6PSgxPDxSKS0xLEs9''@;'; put 'put ''ej4+MSxJPS03LGs9eD9sZS0xOjAsRT14Py0xOjEsaj1GW2FlK2tdO2ZvcihrKz1FLE09aiYoMTw8LUkpLTEsaj4+PS1JLEkrPVI7ST4wO009MjU2Kk0rRlthZStrXSxrKz1FLEktPTgpO2ZvcihPPU0mKDE8PC1JKS0xLE0+Pj0tSSxJKz1tO0k+MDtPPTI1NipPK0ZbYWUra10says9RSxJLT04''@;'; put 'put ''KTtpZigwPT09TSlNPTEtSztlbHNle2lmKE09PT16KXJldHVybiBPP05hTjoxLzAqKGo/LTE6MSk7Tys9TWF0aC5wb3coMixtKSxNLT1LfXJldHVybihqPy0xOjEpKk8qTWF0aC5wb3coMixNLW0pfSxJZS53cml0ZT1mdW5jdGlvbihGLGFlLHgsbSxsZSxNKXt2YXIgTyxSLHosSz04Kk0tbGUt''@;'; put 'put ''MSxJPSgxPDxLKS0xLGs9ST4+MSxFPTIzPT09bGU/TWF0aC5wb3coMiwtMjQpLU1hdGgucG93KDIsLTc3KTowLGo9bT8wOk0tMSxWPW0/MTotMSxCPWFlPDB8fDA9PT1hZSYmMS9hZTwwPzE6MDtmb3IoYWU9TWF0aC5hYnMoYWUpLGlzTmFOKGFlKXx8YWU9PT0xLzA/KFI9aXNOYU4oYWUpPzE6''@;'; put 'put ''MCxPPUkpOihPPU1hdGguZmxvb3IoTWF0aC5sb2coYWUpL01hdGguTE4yKSxhZSooej1NYXRoLnBvdygyLC1PKSk8MSYmKE8tLSx6Kj0yKSwoYWUrPU8raz49MT9FL3o6RSpNYXRoLnBvdygyLDEtaykpKno+PTImJihPKyssei89MiksTytrPj1JPyhSPTAsTz1JKTpPK2s+PTE/KFI9KGFlKnot''@;'; put 'put ''MSkqTWF0aC5wb3coMixsZSksTys9ayk6KFI9YWUqTWF0aC5wb3coMixrLTEpKk1hdGgucG93KDIsbGUpLE89MCkpO2xlPj04O0ZbeCtqXT0yNTUmUixqKz1WLFIvPTI1NixsZS09OCk7Zm9yKE89Tzw8bGV8UixLKz1sZTtLPjA7Rlt4K2pdPTI1NSZPLGorPVYsTy89MjU2LEstPTgpO0ZbeCtq''@;'; put 'put ''LVZdfD0xMjgqQn19LDY2Njk4OmF0PT57YXQuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihGLGFlKXthZSYmKEYuc3VwZXJfPWFlLEYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYWUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6RixlbnVt''@;'; put 'put ''ZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKEYsYWUpe2lmKGFlKXtGLnN1cGVyXz1hZTt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90b3R5cGU9YWUucHJvdG90eXBlLEYucHJvdG90eXBlPW5ldyB4LEYucHJvdG90eXBlLmNvbnN0cnVjdG9yPUZ9''@;'; put 'put ''fX0sNzU4Mjk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2Njk4KSx4PUYoNjAzODApLG09Rig4NDMpLkJ1ZmZlcixsZT1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIE0oKXt4LmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlz''@;'; put 'put ''Ll9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gTyhrLEUpe3JldHVybiBrPDxFfGs+Pj4zMi1FfWZ1bmN0aW9uIFIoayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoRSZqfH5FJlYpK0IrWXwwLFgpK0V8MH1mdW5jdGlvbiB6KGssRSxqLFYsQixZLFgpe3JldHVybiBP''@;'; put 'put ''KGsrKEUmVnxqJn5WKStCK1l8MCxYKStFfDB9ZnVuY3Rpb24gSyhrLEUsaixWLEIsWSxYKXtyZXR1cm4gTyhrKyhFXmpeVikrQitZfDAsWCkrRXwwfWZ1bmN0aW9uIEkoayxFLGosVixCLFksWCl7cmV0dXJuIE8oaysoal4oRXx+VikpK0IrWXwwLFgpK0V8MH1hZShNLHgpLE0ucHJvdG90eXBl''@;'; put 'put ''Ll91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIGs9bGUsRT0wO0U8MTY7KytFKWtbRV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpFKTt2YXIgaj10aGlzLl9hLFY9dGhpcy5fYixCPXRoaXMuX2MsWT10aGlzLl9kO2o9UihqLFYsQixZLGtbMF0sMzYxNDA5MDM2MCw3KSxZPVIoWSxqLFYs''@;'; put 'put ''QixrWzFdLDM5MDU0MDI3MTAsMTIpLEI9UihCLFksaixWLGtbMl0sNjA2MTA1ODE5LDE3KSxWPVIoVixCLFksaixrWzNdLDMyNTA0NDE5NjYsMjIpLGo9UihqLFYsQixZLGtbNF0sNDExODU0ODM5OSw3KSxZPVIoWSxqLFYsQixrWzVdLDEyMDAwODA0MjYsMTIpLEI9UihCLFksaixWLGtbNl0s''@;'; put 'put ''MjgyMTczNTk1NSwxNyksVj1SKFYsQixZLGosa1s3XSw0MjQ5MjYxMzEzLDIyKSxqPVIoaixWLEIsWSxrWzhdLDE3NzAwMzU0MTYsNyksWT1SKFksaixWLEIsa1s5XSwyMzM2NTUyODc5LDEyKSxCPVIoQixZLGosVixrWzEwXSw0Mjk0OTI1MjMzLDE3KSxWPVIoVixCLFksaixrWzExXSwyMzA0''@;'; put 'put ''NTYzMTM0LDIyKSxqPVIoaixWLEIsWSxrWzEyXSwxODA0NjAzNjgyLDcpLFk9UihZLGosVixCLGtbMTNdLDQyNTQ2MjYxOTUsMTIpLEI9UihCLFksaixWLGtbMTRdLDI3OTI5NjUwMDYsMTcpLGo9eihqLFY9UihWLEIsWSxqLGtbMTVdLDEyMzY1MzUzMjksMjIpLEIsWSxrWzFdLDQxMjkxNzA3''@;'; put 'put ''ODYsNSksWT16KFksaixWLEIsa1s2XSwzMjI1NDY1NjY0LDkpLEI9eihCLFksaixWLGtbMTFdLDY0MzcxNzcxMywxNCksVj16KFYsQixZLGosa1swXSwzOTIxMDY5OTk0LDIwKSxqPXooaixWLEIsWSxrWzVdLDM1OTM0MDg2MDUsNSksWT16KFksaixWLEIsa1sxMF0sMzgwMTYwODMsOSksQj16''@;'; put 'put ''KEIsWSxqLFYsa1sxNV0sMzYzNDQ4ODk2MSwxNCksVj16KFYsQixZLGosa1s0XSwzODg5NDI5NDQ4LDIwKSxqPXooaixWLEIsWSxrWzldLDU2ODQ0NjQzOCw1KSxZPXooWSxqLFYsQixrWzE0XSwzMjc1MTYzNjA2LDkpLEI9eihCLFksaixWLGtbM10sNDEwNzYwMzMzNSwxNCksVj16KFYsQixZ''@;'; put 'put ''LGosa1s4XSwxMTYzNTMxNTAxLDIwKSxqPXooaixWLEIsWSxrWzEzXSwyODUwMjg1ODI5LDUpLFk9eihZLGosVixCLGtbMl0sNDI0MzU2MzUxMiw5KSxCPXooQixZLGosVixrWzddLDE3MzUzMjg0NzMsMTQpLGo9SyhqLFY9eihWLEIsWSxqLGtbMTJdLDIzNjgzNTk1NjIsMjApLEIsWSxrWzVd''@;'; put 'put ''LDQyOTQ1ODg3MzgsNCksWT1LKFksaixWLEIsa1s4XSwyMjcyMzkyODMzLDExKSxCPUsoQixZLGosVixrWzExXSwxODM5MDMwNTYyLDE2KSxWPUsoVixCLFksaixrWzE0XSw0MjU5NjU3NzQwLDIzKSxqPUsoaixWLEIsWSxrWzFdLDI3NjM5NzUyMzYsNCksWT1LKFksaixWLEIsa1s0XSwxMjcy''@;'; put 'put ''ODkzMzUzLDExKSxCPUsoQixZLGosVixrWzddLDQxMzk0Njk2NjQsMTYpLFY9SyhWLEIsWSxqLGtbMTBdLDMyMDAyMzY2NTYsMjMpLGo9SyhqLFYsQixZLGtbMTNdLDY4MTI3OTE3NCw0KSxZPUsoWSxqLFYsQixrWzBdLDM5MzY0MzAwNzQsMTEpLEI9SyhCLFksaixWLGtbM10sMzU3MjQ0NTMx''@;'; put 'put ''NywxNiksVj1LKFYsQixZLGosa1s2XSw3NjAyOTE4OSwyMyksaj1LKGosVixCLFksa1s5XSwzNjU0NjAyODA5LDQpLFk9SyhZLGosVixCLGtbMTJdLDM4NzMxNTE0NjEsMTEpLEI9SyhCLFksaixWLGtbMTVdLDUzMDc0MjUyMCwxNiksaj1JKGosVj1LKFYsQixZLGosa1syXSwzMjk5NjI4NjQ1''@;'; put 'put ''LDIzKSxCLFksa1swXSw0MDk2MzM2NDUyLDYpLFk9SShZLGosVixCLGtbN10sMTEyNjg5MTQxNSwxMCksQj1JKEIsWSxqLFYsa1sxNF0sMjg3ODYxMjM5MSwxNSksVj1JKFYsQixZLGosa1s1XSw0MjM3NTMzMjQxLDIxKSxqPUkoaixWLEIsWSxrWzEyXSwxNzAwNDg1NTcxLDYpLFk9SShZLGos''@;'; put 'put ''VixCLGtbM10sMjM5OTk4MDY5MCwxMCksQj1JKEIsWSxqLFYsa1sxMF0sNDI5MzkxNTc3MywxNSksVj1JKFYsQixZLGosa1sxXSwyMjQwMDQ0NDk3LDIxKSxqPUkoaixWLEIsWSxrWzhdLDE4NzMzMTMzNTksNiksWT1JKFksaixWLEIsa1sxNV0sNDI2NDM1NTU1MiwxMCksQj1JKEIsWSxqLFYs''@;'; put 'put ''a1s2XSwyNzM0NzY4OTE2LDE1KSxWPUkoVixCLFksaixrWzEzXSwxMzA5MTUxNjQ5LDIxKSxqPUkoaixWLEIsWSxrWzRdLDQxNDk0NDQyMjYsNiksWT1JKFksaixWLEIsa1sxMV0sMzE3NDc1NjkxNywxMCksQj1JKEIsWSxqLFYsa1syXSw3MTg3ODcyNTksMTUpLFY9SShWLEIsWSxqLGtbOV0s''@;'; put 'put ''Mzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK2p8MCx0aGlzLl9iPXRoaXMuX2IrVnwwLHRoaXMuX2M9dGhpcy5fYytCfDAsdGhpcy5fZD10aGlzLl9kK1l8MH0sTS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0''@;'; put 'put ''aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxF''@;'; put 'put ''KHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBrPW0uYWxsb2NVbnNhZmUoMTYpO3JldHVybiBrLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLGsud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCks''@;'; put 'put ''ay53cml0ZUludDMyTEUodGhpcy5fYyw4KSxrLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxrfSxhdC5leHBvcnRzPU19LDQ4NjA2OihhdCxJZSxGKT0+e3ZhciBhZT1GKDYwMzAzKSx4PUYoNjAwODIpO2Z1bmN0aW9uIG0obGUpe3RoaXMucmFuZD1sZXx8bmV3IHguUmFuZH1hdC5leHBvcnRz''@;'; put 'put ''PW0sbS5jcmVhdGU9ZnVuY3Rpb24oTSl7cmV0dXJuIG5ldyBtKE0pfSxtLnByb3RvdHlwZS5fcmFuZGJlbG93PWZ1bmN0aW9uKE0pe3ZhciBPPU0uYml0TGVuZ3RoKCksUj1NYXRoLmNlaWwoTy84KTtkb3t2YXIgej1uZXcgYWUodGhpcy5yYW5kLmdlbmVyYXRlKFIpKX13aGlsZSh6LmNtcChN''@;'; put 'put ''KT49MCk7cmV0dXJuIHp9LG0ucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24oTSxPKXt2YXIgUj1PLnN1YihNKTtyZXR1cm4gTS5hZGQodGhpcy5fcmFuZGJlbG93KFIpKX0sbS5wcm90b3R5cGUudGVzdD1mdW5jdGlvbihNLE8sUil7dmFyIHo9TS5iaXRMZW5ndGgoKSxLPWFlLm1vbnQo''@;'; put 'put ''TSksST1uZXcgYWUoMSkudG9SZWQoSyk7T3x8KE89TWF0aC5tYXgoMSx6LzQ4fDApKTtmb3IodmFyIGs9TS5zdWJuKDEpLEU9MDshay50ZXN0bihFKTtFKyspO2Zvcih2YXIgaj1NLnNocm4oRSksVj1rLnRvUmVkKEspO08+MDtPLS0pe3ZhciBZPXRoaXMuX3JhbmRyYW5nZShuZXcgYWUoMiks''@;'; put 'put ''ayk7UiYmUihZKTt2YXIgWD1ZLnRvUmVkKEspLnJlZFBvdyhqKTtpZigwIT09WC5jbXAoSSkmJjAhPT1YLmNtcChWKSl7Zm9yKHZhciBVPTE7VTxFO1UrKyl7aWYoMD09PShYPVgucmVkU3FyKCkpLmNtcChJKSlyZXR1cm4hMTtpZigwPT09WC5jbXAoVikpYnJlYWt9aWYoVT09PUUpcmV0dXJu''@;'; put 'put ''ITF9fXJldHVybiEwfSxtLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKE0sTyl7dmFyIFI9TS5iaXRMZW5ndGgoKSx6PWFlLm1vbnQoTSksSz1uZXcgYWUoMSkudG9SZWQoeik7T3x8KE89TWF0aC5tYXgoMSxSLzQ4fDApKTtmb3IodmFyIEk9TS5zdWJuKDEpLGs9MDshSS50ZXN0bihr''@;'; put 'put ''KTtrKyspO2Zvcih2YXIgRT1NLnNocm4oayksaj1JLnRvUmVkKHopO08+MDtPLS0pe3ZhciBWPXRoaXMuX3JhbmRyYW5nZShuZXcgYWUoMiksSSksQj1NLmdjZChWKTtpZigwIT09Qi5jbXBuKDEpKXJldHVybiBCO3ZhciBZPVYudG9SZWQoeikucmVkUG93KEUpO2lmKDAhPT1ZLmNtcChLKSYm''@;'; put 'put ''MCE9PVkuY21wKGopKXtmb3IodmFyIFg9MTtYPGs7WCsrKXtpZigwPT09KFk9WS5yZWRTcXIoKSkuY21wKEspKXJldHVybiBZLmZyb21SZWQoKS5zdWJuKDEpLmdjZChNKTtpZigwPT09WS5jbXAoaikpYnJlYWt9aWYoWD09PWspcmV0dXJuKFk9WS5yZWRTcXIoKSkuZnJvbVJlZCgpLnN1Ym4o''@;'; put 'put ''MSkuZ2NkKE0pfX1yZXR1cm4hMX19LDYwMzAzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSx4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShHLGIpe2lmKCFHKXRocm93IG5ldyBFcnJvcihifHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGxlKEcsYil7Ry5zdXBlcl89Yjt2''@;'; put 'put ''YXIgRD1mdW5jdGlvbigpe307RC5wcm90b3R5cGU9Yi5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEQsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiBNKEcsYixEKXtpZihNLmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxl''@;'; put 'put ''bmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PWJ8fCJiZSI9PT1iKSYmKEQ9YixiPTEwKSx0aGlzLl9pbml0KEd8fDAsYnx8MTAsRHx8ImJlIikpfXZhciBPOyJvYmplY3QiPT10eXBlb2YgYWU/YWUuZXhwb3J0cz1NOnguQk49TSxNLkJOPU0sTS53b3JkU2l6ZT0yNjt0''@;'; put 'put ''cnl7Tz10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Rig1NjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBSKEcsYil7dmFyIEQ9Ry5jaGFyQ29kZUF0KGIpO3JldHVybiBEPj02NSYmRDw9NzA/RC01NTpEPj05NyYmRDw9MTAyP0Qt''@;'; put 'put ''ODc6RC00OCYxNX1mdW5jdGlvbiB6KEcsYixEKXt2YXIgSD1SKEcsRCk7cmV0dXJuIEQtMT49YiYmKEh8PVIoRyxELTEpPDw0KSxIfWZ1bmN0aW9uIEsoRyxiLEQsSCl7Zm9yKHZhciBOPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxEKSxDPWI7QzxnO0MrKyl7dmFyIFM9Ry5jaGFyQ29kZUF0KEMp''@;'; put 'put ''LTQ4O04qPUgsTis9Uz49NDk/Uy00OSsxMDpTPj0xNz9TLTE3KzEwOlN9cmV0dXJuIE59TS5pc0JOPWZ1bmN0aW9uKGIpe3JldHVybiBiIGluc3RhbmNlb2YgTXx8bnVsbCE9PWImJiJvYmplY3QiPT10eXBlb2YgYiYmYi5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PU0ud29yZFNpemUmJkFycmF5''@;'; put 'put ''LmlzQXJyYXkoYi53b3Jkcyl9LE0ubWF4PWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPjA/YjpEfSxNLm1pbj1mdW5jdGlvbihiLEQpe3JldHVybiBiLmNtcChEKTwwP2I6RH0sTS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oYixELEgpe2lmKCJudW1iZXIiPT10eXBlb2YgYilyZXR1''@;'; put 'put ''cm4gdGhpcy5faW5pdE51bWJlcihiLEQsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0QXJyYXkoYixELEgpOyJoZXgiPT09RCYmKEQ9MTYpLG0oRD09PSgwfEQpJiZEPj0yJiZEPD0zNik7dmFyIE49MDsiLSI9PT0oYj1iLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMr''@;'; put 'put ''L2csIiIpKVswXSYmKE4rKyx0aGlzLm5lZ2F0aXZlPTEpLE48Yi5sZW5ndGgmJigxNj09PUQ/dGhpcy5fcGFyc2VIZXgoYixOLEgpOih0aGlzLl9wYXJzZUJhc2UoYixELE4pLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKSkpfSxNLnByb3RvdHlwZS5faW5p''@;'; put 'put ''dE51bWJlcj1mdW5jdGlvbihiLEQsSCl7YjwwJiYodGhpcy5uZWdhdGl2ZT0xLGI9LWIpLGI8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmJdLHRoaXMubGVuZ3RoPTEpOmI8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYz''@;'; put 'put ''XSx0aGlzLmxlbmd0aD0yKToobShiPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmIsYi82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEQsSCl9LE0ucHJvdG90eXBlLl9pbml0''@;'; put 'put ''QXJyYXk9ZnVuY3Rpb24oYixELEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiLmxlbmd0aCksYi5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoYi5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhp''@;'; put 'put ''cy5sZW5ndGgpO2Zvcih2YXIgTj0wO048dGhpcy5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09MDt2YXIgZyxDLFM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xLGc9MDtOPj0wO04tPTMpdGhpcy53b3Jkc1tnXXw9KEM9YltOXXxiW04tMV08PDh8YltOLTJdPDwxNik8PFMmNjcxMDg4''@;'; put 'put ''NjMsdGhpcy53b3Jkc1tnKzFdPUM+Pj4yNi1TJjY3MTA4ODYzLChTKz0yNCk+PTI2JiYoUy09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihOPTAsZz0wO048Yi5sZW5ndGg7Tis9Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTisxXTw8OHxiW04rMl08PDE2KTw8UyY2NzEwODg2Myx0''@;'; put 'put ''aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0KT49MjYmJihTLT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihiLEQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChiLmxlbmd0aC1EKS82KSx0aGlzLndvcmRz''@;'; put 'put ''PW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT0wO3ZhciBTLGc9MCxDPTA7aWYoImJlIj09PUgpZm9yKE49Yi5sZW5ndGgtMTtOPj1EO04tPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+''@;'; put 'put ''PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1TPj4+MjYpOmcrPTg7ZWxzZSBmb3IoTj0oYi5sZW5ndGgtRCklMj09MD9EKzE6RDtOPGIubGVuZ3RoO04rPTIpUz16KGIsRCxOKTw8Zyx0aGlzLndvcmRzW0NdfD02NzEwODg2MyZTLGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW0MrPTFdfD1T''@;'; put 'put ''Pj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGIsRCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgTj0wLGc9MTtnPD02NzEwODg2MztnKj1EKU4rKztOLS0sZz1nL0R8MDtmb3IodmFyIEM9Yi5sZW5ndGgtSCxT''@;'; put 'put ''PUMlTix2PU1hdGgubWluKEMsQy1TKStILHA9MCx3PUg7dzx2O3crPU4pcD1LKGIsdyx3K04sRCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09Uyl7dmFyIEo9MTtmb3IocD1LKGIsdyxiLmxlbmd0''@;'; put 'put ''aCxEKSx3PTA7dzxTO3crKylKKj1EO3RoaXMuaW11bG4oSiksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGIpe2Iud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro''@;'; put 'put ''KTtmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyliLndvcmRzW0RdPXRoaXMud29yZHNbRF07Yi5sZW5ndGg9dGhpcy5sZW5ndGgsYi5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGIucmVkPXRoaXMucmVkfSxNLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBiPW5ldyBNKG51bGwp''@;'; put 'put ''O3JldHVybiB0aGlzLmNvcHkoYiksYn0sTS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihiKXtmb3IoO3RoaXMubGVuZ3RoPGI7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxNLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks''@;'; put 'put ''dGhpc30sTS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAiXSxrPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0''@;'; put 'put ''MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy''@;'; put 'put ''MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVihHLGIsRCl7RC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgrYi5sZW5ndGh8MDtELmxlbmd0aD1ILEg9SC0xfDA7''@;'; put 'put ''dmFyIE49MHxHLndvcmRzWzBdLGc9MHxiLndvcmRzWzBdLEM9TipnLHY9Qy82NzEwODg2NHwwO0Qud29yZHNbMF09NjcxMDg4NjMmQztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIHc9dj4+PjI2LEo9NjcxMDg4NjMmdixuZT1NYXRoLm1pbihwLGIubGVuZ3RoLTEpLGRlPU1hdGgubWF4''@;'; put 'put ''KDAscC1HLmxlbmd0aCsxKTtkZTw9bmU7ZGUrKyl3Kz0oQz0oTj0wfEcud29yZHNbcC1kZXwwXSkqKGc9MHxiLndvcmRzW2RlXSkrSikvNjcxMDg4NjR8MCxKPTY3MTA4ODYzJkM7RC53b3Jkc1twXT0wfEosdj0wfHd9cmV0dXJuIDAhPT12P0Qud29yZHNbcF09MHx2OkQubGVuZ3RoLS0sRC5z''@;'; put 'put ''dHJpcCgpfU0ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGIsRCl7dmFyIEg7aWYoRD0wfER8fDEsMTY9PT0oYj1ifHwxMCl8fCJoZXgiPT09Yil7SD0iIjtmb3IodmFyIE49MCxnPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz10aGlzLndvcmRzW0NdLHY9KDE2Nzc3MjE1JihT''@;'; put 'put ''PDxOfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz1TPj4+MjQtTiYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP0lbNi12Lmxlbmd0aF0rditIOnYrSCwoTis9Mik+PTI2JiYoTi09MjYsQy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAi''@;'; put 'put ''K0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihiPT09KDB8YikmJmI+PTImJmI8PTM2KXt2YXIgcD1rW2JdLHc9RVtiXTtIPSIiO3ZhciBKPXRoaXMuY2xvbmUoKTtmb3IoSi5uZWdhdGl2ZT0wOyFKLmlzWmVybygpOyl7dmFyIG5lPUoubW9kbih3KS50b1N0cmlu''@;'; put 'put ''ZyhiKTtIPShKPUouaWRpdm4odykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNob3VsZCBi''@;'; put 'put ''ZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LE0ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2IrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9iKz00NTAz''@;'; put 'put ''NTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWI6Yn0sTS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMudG9TdHJpbmcoMTYpfSxNLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihiLEQpe3JldHVybiBtKHR5cGVvZiBPPCJ1IiksdGhpcy50b0FycmF5TGlrZShPLGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxi''@;'; put 'put ''LEQpfSxNLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihiLEQsSCl7dmFyIE49dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLE4pO20oTjw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3Ro''@;'; put 'put ''IDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIHYscCxDPSJsZSI9PT1ELFM9bmV3IGIoZyksdz10aGlzLmNsb25lKCk7aWYoQyl7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1twXT12O2Zvcig7cDxnO3ArKylTW3BdPTB9ZWxzZXtmb3IocD0wO3A8''@;'; put 'put ''Zy1OO3ArKylTW3BdPTA7Zm9yKHA9MDshdy5pc1plcm8oKTtwKyspdj13LmFuZGxuKDI1NSksdy5pdXNocm4oOCksU1tnLXAtMV09dn1yZXR1cm4gU30sTS5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGIpe3JldHVybiAzMi1NYXRoLmNsejMyKGIpfTpmdW5jdGlv''@;'; put 'put ''bihiKXt2YXIgRD1iLEg9MDtyZXR1cm4gRD49NDA5NiYmKEgrPTEzLEQ+Pj49MTMpLEQ+PTY0JiYoSCs9NyxEPj4+PTcpLEQ+PTgmJihIKz00LEQ+Pj49NCksRD49MiYmKEgrPTIsRD4+Pj0yKSxIK0R9LE0ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihiKXtpZigwPT09YilyZXR1cm4g''@;'; put 'put ''MjY7dmFyIEQ9YixIPTA7cmV0dXJuIDgxOTEmRHx8KEgrPTEzLEQ+Pj49MTMpLDEyNyZEfHwoSCs9NyxEPj4+PTcpLDE1JkR8fChIKz00LEQ+Pj49NCksMyZEfHwoSCs9MixEPj4+PTIpLDEmRHx8SCsrLEh9LE0ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBEPXRoaXMuX2Nv''@;'; put 'put ''dW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0R9LE0ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIGI9MCxEPTA7RDx0aGlzLmxlbmd0aDtEKyspe3ZhciBIPXRo''@;'; put 'put ''aXMuX3plcm9CaXRzKHRoaXMud29yZHNbRF0pO2lmKGIrPUgsMjYhPT1IKWJyZWFrfXJldHVybiBifSxNLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxNLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oYil7cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oYikuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxNLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy50ZXN0bihiLTEpP3RoaXMubm90bihiKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxN''@;'; put 'put ''LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sTS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LE0ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMu''@;'; put 'put ''bmVnYXRpdmVePTEpLHRoaXN9LE0ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oYil7Zm9yKDt0aGlzLmxlbmd0aDxiLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgRD0wO0Q8Yi5sZW5ndGg7RCsrKXRoaXMud29yZHNbRF09dGhpcy53b3Jkc1tEXXxiLndvcmRz''@;'; put 'put ''W0RdO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGIpfSxNLnByb3RvdHlwZS5vcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhp''@;'; put 'put ''cy5jbG9uZSgpLmlvcihiKTpiLmNsb25lKCkuaW9yKHRoaXMpfSxNLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGIpOmIuY2xvbmUoKS5pdW9yKHRoaXMpfSxNLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihi''@;'; put 'put ''KXt2YXIgRDtEPXRoaXMubGVuZ3RoPmIubGVuZ3RoP2I6dGhpcztmb3IodmFyIEg9MDtIPEQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mYi53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pYW5kPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1YW5kKGIpfSxNLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGIpOmIuY2xvbmUoKS5pYW5kKHRoaXMpfSxN''@;'; put 'put ''LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoYik6Yi5jbG9uZSgpLml1YW5kKHRoaXMpfSxNLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihiKXt2YXIgRCxIO3RoaXMubGVuZ3RoPmIubGVuZ3RoPyhEPXRo''@;'; put 'put ''aXMsSD1iKTooRD1iLEg9dGhpcyk7Zm9yKHZhciBOPTA7TjxILmxlbmd0aDtOKyspdGhpcy53b3Jkc1tOXT1ELndvcmRzW05dXkgud29yZHNbTl07aWYodGhpcyE9PUQpZm9yKDtOPEQubGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl07cmV0dXJuIHRoaXMubGVuZ3RoPUQubGVu''@;'; put 'put ''Z3RoLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT0odGhpcy5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihiKX0sTS5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaXhvcihiKTpiLmNsb25lKCkuaXhvcih0aGlzKX0sTS5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGIpOmIuY2xvbmUoKS5pdXhvcih0aGlzKX0sTS5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24o''@;'; put 'put ''Yil7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBEPTB8TWF0aC5jZWlsKGIvMjYpLEg9YiUyNjt0aGlzLl9leHBhbmQoRCksSD4wJiZELS07Zm9yKHZhciBOPTA7TjxEO04rKyl0aGlzLndvcmRzW05dPTY3MTA4ODYzJn50aGlzLndvcmRzW05dO3JldHVybiBIPjAmJih0aGlzLndv''@;'; put 'put ''cmRzW05dPX50aGlzLndvcmRzW05dJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihiKX0sTS5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihiLEQpe20oIm51bWJlciI9PXR5cGVvZiBiJiZi''@;'; put 'put ''Pj0wKTt2YXIgSD1iLzI2fDAsTj1iJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUQ/dGhpcy53b3Jkc1tIXXwxPDxOOnRoaXMud29yZHNbSF0mfigxPDxOKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYil7dmFyIEQsSCxOO2lmKDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmUpcmV0dXJuIGIubmVnYXRpdmU9MCxEPXRo''@;'; put 'put ''aXMuaXN1YihiKSxiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5iLmxlbmd0aD8oSD10aGlzLE49Yik6KEg9YixOPXRoaXMpO2Zvcih2YXIgZz0wLEM9MDtDPE4ubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihEPSgwfEgud29yZHNbQ10pKygwfE4ud29y''@;'; put 'put ''ZHNbQ10pK2cpLGc9RD4+PjI2O2Zvcig7MCE9PWcmJkM8SC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrZyksZz1EPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0''@;'; put 'put ''aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtDPEgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPUgud29yZHNbQ107cmV0dXJuIHRoaXN9LE0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihiKXt2YXIgRDtyZXR1cm4gMCE9PWIubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhiLm5lZ2F0aXZl''@;'; put 'put ''PTAsRD10aGlzLnN1YihiKSxiLm5lZ2F0aXZlXj0xLEQpOjA9PT1iLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEQ9Yi5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEQpOnRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGIpOmIuY2xv''@;'; put 'put ''bmUoKS5pYWRkKHRoaXMpfSxNLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGIpe2lmKDAhPT1iLm5lZ2F0aXZlKXtiLm5lZ2F0aXZlPTA7dmFyIEQ9dGhpcy5pYWRkKGIpO3JldHVybiBiLm5lZ2F0aXZlPTEsRC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLHRoaXMuaWFkZChiKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgTixnLEg9dGhpcy5jbXAoYik7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oTj10aGlzLGc9Yik6KE49''@;'; put 'put ''YixnPXRoaXMpO2Zvcih2YXIgQz0wLFM9MDtTPGcubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pLSgwfGcud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7Zm9yKDswIT09QyYmUzxOLmxlbmd0aDtTKyspQz0oRD0oMHxOLndvcmRzW1NdKStDKT4+MjYsdGhp''@;'; put 'put ''cy53b3Jkc1tTXT02NzEwODg2MyZEO2lmKDA9PT1DJiZTPE4ubGVuZ3RoJiZOIT09dGhpcylmb3IoO1M8Ti5sZW5ndGg7UysrKXRoaXMud29yZHNbU109Ti53b3Jkc1tTXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUyksTiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihiKX07dmFyIEI9ZnVuY3Rpb24oYixELEgpe3ZhciB2LHAsdyxOPWIud29yZHMsZz1ELndvcmRzLEM9SC53b3JkcyxTPTAsSj0wfE5bMF0sbmU9ODE5MSZKLGRlPUo+''@;'; put 'put ''Pj4xMyxmZT0wfE5bMV0seGU9ODE5MSZmZSxMZT1mZT4+PjEzLEZlPTB8TlsyXSxPZT04MTkxJkZlLGplPUZlPj4+MTMsV2U9MHxOWzNdLEtlPTgxOTEmV2UsWWU9V2U+Pj4xMyxKZT0wfE5bNF0sbHQ9ODE5MSZKZSxQZT1KZT4+PjEzLGJlPTB8Tls1XSxBZT04MTkxJmJlLFRlPWJlPj4+MTMs''@;'; put 'put ''cWU9MHxOWzZdLFhlPTgxOTEmcWUsVWU9cWU+Pj4xMyxodD0wfE5bN10sTWU9ODE5MSZodCxEZT1odD4+PjEzLHplPTB8Tls4XSxpdD04MTkxJnplLHV0PXplPj4+MTMsTXQ9MHxOWzldLEh0PTgxOTEmTXQsUHQ9TXQ+Pj4xMyxvbj0wfGdbMF0sQ249ODE5MSZvbixVdD1vbj4+PjEzLGJuPTB8''@;'; put 'put ''Z1sxXSxXbj04MTkxJmJuLGVuPWJuPj4+MTMsJG49MHxnWzJdLEhuPTgxOTEmJG4sZnQ9JG4+Pj4xMyxmbj0wfGdbM10saG49ODE5MSZmbix3dD1mbj4+PjEzLFh0PTB8Z1s0XSxfdD04MTkxJlh0LE50PVh0Pj4+MTMsbW49MHxnWzVdLHJ0PTgxOTEmbW4sSXQ9bW4+Pj4xMyxKdD0wfGdbNl0s''@;'; put 'put ''RHQ9ODE5MSZKdCxwdD1KdD4+PjEzLFl0PTB8Z1s3XSxJbj04MTkxJll0LHp0PVl0Pj4+MTMseW49MHxnWzhdLHhuPTgxOTEmeW4sc249eW4+Pj4xMyxCbj0wfGdbOV0sUm49ODE5MSZCbiwkdD1Cbj4+PjEzO0gubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3Zh''@;'; put 'put ''ciBQbj0oUysodj1NYXRoLmltdWwobmUsQ24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLFV0KSkrTWF0aC5pbXVsKGRlLENuKXwwKSk8PDEzKXwwO1M9KCh3PU1hdGguaW11bChkZSxVdCkpKyhwPj4+MTMpfDApKyhQbj4+PjI2KXwwLFBuJj02NzEwODg2Myx2PU1hdGguaW11bCh4''@;'; put 'put ''ZSxDbikscD0ocD1NYXRoLmltdWwoeGUsVXQpKStNYXRoLmltdWwoTGUsQ24pfDAsdz1NYXRoLmltdWwoTGUsVXQpO3ZhciBuaT0oUysodj12K01hdGguaW11bChuZSxXbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwoZGUsV24pfDApKTw8MTMp''@;'; put 'put ''fDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsZW4pfDApKyhwPj4+MTMpfDApKyhuaT4+PjI2KXwwLG5pJj02NzEwODg2Myx2PU1hdGguaW11bChPZSxDbikscD0ocD1NYXRoLmltdWwoT2UsVXQpKStNYXRoLmltdWwoamUsQ24pfDAsdz1NYXRoLmltdWwoamUsVXQpLHY9ditNYXRoLmltdWwoeGUs''@;'; put 'put ''V24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxlbil8MCkrTWF0aC5pbXVsKExlLFduKXwwLHc9dytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIGxuPShTKyh2PXYrTWF0aC5pbXVsKG5lLEhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZnQpfDApK01hdGguaW11bChkZSxIbil8''@;'; put 'put ''MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxmdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEtlLENuKSxwPShwPU1hdGguaW11bChLZSxVdCkpK01hdGguaW11bChZZSxDbil8MCx3PU1hdGguaW11bChZZSxVdCksdj12K01hdGgu''@;'; put 'put ''aW11bChPZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGVuKXwwKStNYXRoLmltdWwoamUsV24pfDAsdz13K01hdGguaW11bChqZSxlbil8MCx2PXYrTWF0aC5pbXVsKHhlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsZnQpfDApK01hdGguaW11bChMZSxIbil8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KExlLGZ0KXwwO3ZhciBqbj0oUysodj12K01hdGguaW11bChuZSxobil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHd0KXwwKStNYXRoLmltdWwoZGUsaG4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsd3QpfDApKyhwPj4+MTMpfDApKyhqbj4+PjI2KXwwLGpu''@;'; put 'put ''Jj02NzEwODg2Myx2PU1hdGguaW11bChsdCxDbikscD0ocD1NYXRoLmltdWwobHQsVXQpKStNYXRoLmltdWwoUGUsQ24pfDAsdz1NYXRoLmltdWwoUGUsVXQpLHY9ditNYXRoLmltdWwoS2UsV24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFllLFduKXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoWWUsZW4pfDAsdj12K01hdGguaW11bChPZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLGZ0KXwwKStNYXRoLmltdWwoamUsSG4pfDAsdz13K01hdGguaW11bChqZSxmdCl8MCx2PXYrTWF0aC5pbXVsKHhlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsd3QpfDApK01hdGgu''@;'; put 'put ''aW11bChMZSxobil8MCx3PXcrTWF0aC5pbXVsKExlLHd0KXwwO3ZhciBxcj0oUysodj12K01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE50KXwwKStNYXRoLmltdWwoZGUsX3QpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsTnQpfDAp''@;'; put 'put ''KyhwPj4+MTMpfDApKyhxcj4+PjI2KXwwLHFyJj02NzEwODg2Myx2PU1hdGguaW11bChBZSxDbikscD0ocD1NYXRoLmltdWwoQWUsVXQpKStNYXRoLmltdWwoVGUsQ24pfDAsdz1NYXRoLmltdWwoVGUsVXQpLHY9ditNYXRoLmltdWwobHQsV24pfDAscD0ocD1wK01hdGguaW11bChsdCxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFBlLFduKXwwLHc9dytNYXRoLmltdWwoUGUsZW4pfDAsdj12K01hdGguaW11bChLZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGZ0KXwwKStNYXRoLmltdWwoWWUsSG4pfDAsdz13K01hdGguaW11bChZZSxmdCl8MCx2PXYrTWF0aC5pbXVsKE9lLGhuKXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwoT2Usd3QpfDApK01hdGguaW11bChqZSxobil8MCx3PXcrTWF0aC5pbXVsKGplLHd0KXwwLHY9ditNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxOdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLHc9dytNYXRoLmltdWwoTGUsTnQpfDA7dmFyIGdpPShT''@;'; put 'put ''Kyh2PXYrTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsSXQpfDApK01hdGguaW11bChkZSxydCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxJdCl8MCkrKHA+Pj4xMyl8MCkrKGdpPj4+MjYpfDAsZ2kmPTY3MTA4ODYzLHY9TWF0aC5p''@;'; put 'put ''bXVsKFhlLENuKSxwPShwPU1hdGguaW11bChYZSxVdCkpK01hdGguaW11bChVZSxDbil8MCx3PU1hdGguaW11bChVZSxVdCksdj12K01hdGguaW11bChBZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGVuKXwwKStNYXRoLmltdWwoVGUsV24pfDAsdz13K01hdGguaW11bChUZSxlbil8MCx2''@;'; put 'put ''PXYrTWF0aC5pbXVsKGx0LEhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZnQpfDApK01hdGguaW11bChQZSxIbil8MCx3PXcrTWF0aC5pbXVsKFBlLGZ0KXwwLHY9ditNYXRoLmltdWwoS2UsaG4pfDAscD0ocD1wK01hdGguaW11bChLZSx3dCl8MCkrTWF0aC5pbXVsKFllLGhuKXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoWWUsd3QpfDAsdj12K01hdGguaW11bChPZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLE50KXwwKStNYXRoLmltdWwoamUsX3QpfDAsdz13K01hdGguaW11bChqZSxOdCl8MCx2PXYrTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsSXQpfDApK01hdGgu''@;'; put 'put ''aW11bChMZSxydCl8MCx3PXcrTWF0aC5pbXVsKExlLEl0KXwwO3ZhciB4cj0oUysodj12K01hdGguaW11bChuZSxEdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwoZGUsRHQpfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUscHQpfDAp''@;'; put 'put ''KyhwPj4+MTMpfDApKyh4cj4+PjI2KXwwLHhyJj02NzEwODg2Myx2PU1hdGguaW11bChNZSxDbikscD0ocD1NYXRoLmltdWwoTWUsVXQpKStNYXRoLmltdWwoRGUsQ24pfDAsdz1NYXRoLmltdWwoRGUsVXQpLHY9ditNYXRoLmltdWwoWGUsV24pfDAscD0ocD1wK01hdGguaW11bChYZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFVlLFduKXwwLHc9dytNYXRoLmltdWwoVWUsZW4pfDAsdj12K01hdGguaW11bChBZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZ0KXwwKStNYXRoLmltdWwoVGUsSG4pfDAsdz13K01hdGguaW11bChUZSxmdCl8MCx2PXYrTWF0aC5pbXVsKGx0LGhuKXwwLHA9KHA9''@;'; put 'put ''cCtNYXRoLmltdWwobHQsd3QpfDApK01hdGguaW11bChQZSxobil8MCx3PXcrTWF0aC5pbXVsKFBlLHd0KXwwLHY9ditNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxOdCl8MCkrTWF0aC5pbXVsKFllLF90KXwwLHc9dytNYXRoLmltdWwoWWUsTnQpfDAsdj12K01hdGgu''@;'; put 'put ''aW11bChPZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKE9lLEl0KXwwKStNYXRoLmltdWwoamUscnQpfDAsdz13K01hdGguaW11bChqZSxJdCl8MCx2PXYrTWF0aC5pbXVsKHhlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChMZSxEdCl8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KExlLHB0KXwwO3ZhciBVaT0oUysodj12K01hdGguaW11bChuZSxJbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHp0KXwwKStNYXRoLmltdWwoZGUsSW4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsenQpfDApKyhwPj4+MTMpfDApKyhVaT4+PjI2KXwwLFVp''@;'; put 'put ''Jj02NzEwODg2Myx2PU1hdGguaW11bChpdCxDbikscD0ocD1NYXRoLmltdWwoaXQsVXQpKStNYXRoLmltdWwodXQsQ24pfDAsdz1NYXRoLmltdWwodXQsVXQpLHY9ditNYXRoLmltdWwoTWUsV24pfDAscD0ocD1wK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKERlLFduKXwwLHc9dytN''@;'; put 'put ''YXRoLmltdWwoRGUsZW4pfDAsdj12K01hdGguaW11bChYZSxIbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGZ0KXwwKStNYXRoLmltdWwoVWUsSG4pfDAsdz13K01hdGguaW11bChVZSxmdCl8MCx2PXYrTWF0aC5pbXVsKEFlLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsd3QpfDApK01hdGgu''@;'; put 'put ''aW11bChUZSxobil8MCx3PXcrTWF0aC5pbXVsKFRlLHd0KXwwLHY9ditNYXRoLmltdWwobHQsX3QpfDAscD0ocD1wK01hdGguaW11bChsdCxOdCl8MCkrTWF0aC5pbXVsKFBlLF90KXwwLHc9dytNYXRoLmltdWwoUGUsTnQpfDAsdj12K01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5p''@;'; put 'put ''bXVsKEtlLEl0KXwwKStNYXRoLmltdWwoWWUscnQpfDAsdz13K01hdGguaW11bChZZSxJdCl8MCx2PXYrTWF0aC5pbXVsKE9lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UscHQpfDApK01hdGguaW11bChqZSxEdCl8MCx3PXcrTWF0aC5pbXVsKGplLHB0KXwwLHY9ditNYXRoLmltdWwoeGUs''@;'; put 'put ''SW4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx6dCl8MCkrTWF0aC5pbXVsKExlLEluKXwwLHc9dytNYXRoLmltdWwoTGUsenQpfDA7dmFyIEtyPShTKyh2PXYrTWF0aC5pbXVsKG5lLHhuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsc24pfDApK01hdGguaW11bChkZSx4bil8''@;'; put 'put ''MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxzbil8MCkrKHA+Pj4xMyl8MCkrKEtyPj4+MjYpfDAsS3ImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LENuKSxwPShwPU1hdGguaW11bChIdCxVdCkpK01hdGguaW11bChQdCxDbil8MCx3PU1hdGguaW11bChQdCxVdCksdj12K01hdGgu''@;'; put 'put ''aW11bChpdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwodXQsV24pfDAsdz13K01hdGguaW11bCh1dCxlbil8MCx2PXYrTWF0aC5pbXVsKE1lLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bChEZSxIbil8MCx3PXcrTWF0aC5pbXVs''@;'; put 'put ''KERlLGZ0KXwwLHY9ditNYXRoLmltdWwoWGUsaG4pfDAscD0ocD1wK01hdGguaW11bChYZSx3dCl8MCkrTWF0aC5pbXVsKFVlLGhuKXwwLHc9dytNYXRoLmltdWwoVWUsd3QpfDAsdj12K01hdGguaW11bChBZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLE50KXwwKStNYXRoLmltdWwoVGUs''@;'; put 'put ''X3QpfDAsdz13K01hdGguaW11bChUZSxOdCl8MCx2PXYrTWF0aC5pbXVsKGx0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsSXQpfDApK01hdGguaW11bChQZSxydCl8MCx3PXcrTWF0aC5pbXVsKFBlLEl0KXwwLHY9ditNYXRoLmltdWwoS2UsRHQpfDAscD0ocD1wK01hdGguaW11bChLZSxw''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFllLER0KXwwLHc9dytNYXRoLmltdWwoWWUscHQpfDAsdj12K01hdGguaW11bChPZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHp0KXwwKStNYXRoLmltdWwoamUsSW4pfDAsdz13K01hdGguaW11bChqZSx6dCl8MCx2PXYrTWF0aC5pbXVsKHhlLHhuKXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoeGUsc24pfDApK01hdGguaW11bChMZSx4bil8MCx3PXcrTWF0aC5pbXVsKExlLHNuKXwwO3ZhciBubz0oUysodj12K01hdGguaW11bChuZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwoZGUsUm4pfDApKTw8MTMp''@;'; put 'put ''fDA7Uz0oKHc9dytNYXRoLmltdWwoZGUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxXbikscD0ocD1NYXRoLmltdWwoSHQsZW4pKStNYXRoLmltdWwoUHQsV24pfDAsdz1NYXRoLmltdWwoUHQsZW4pLHY9ditNYXRoLmltdWwoaXQs''@;'; put 'put ''SG4pfDAscD0ocD1wK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKHV0LEhuKXwwLHc9dytNYXRoLmltdWwodXQsZnQpfDAsdj12K01hdGguaW11bChNZSxobil8MCxwPShwPXArTWF0aC5pbXVsKE1lLHd0KXwwKStNYXRoLmltdWwoRGUsaG4pfDAsdz13K01hdGguaW11bChEZSx3dCl8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKFhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsTnQpfDApK01hdGguaW11bChVZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFVlLE50KXwwLHY9ditNYXRoLmltdWwoQWUscnQpfDAscD0ocD1wK01hdGguaW11bChBZSxJdCl8MCkrTWF0aC5pbXVsKFRlLHJ0KXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoVGUsSXQpfDAsdj12K01hdGguaW11bChsdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHB0KXwwKStNYXRoLmltdWwoUGUsRHQpfDAsdz13K01hdGguaW11bChQZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEtlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsenQpfDApK01h''@;'; put 'put ''dGguaW11bChZZSxJbil8MCx3PXcrTWF0aC5pbXVsKFllLHp0KXwwLHY9ditNYXRoLmltdWwoT2UseG4pfDAscD0ocD1wK01hdGguaW11bChPZSxzbil8MCkrTWF0aC5pbXVsKGplLHhuKXwwLHc9dytNYXRoLmltdWwoamUsc24pfDA7dmFyIEhyPShTKyh2PXYrTWF0aC5pbXVsKHhlLFJuKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChMZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEhyPj4+MjYpfDAsSHImPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEhuKSxwPShwPU1hdGguaW11''@;'; put 'put ''bChIdCxmdCkpK01hdGguaW11bChQdCxIbil8MCx3PU1hdGguaW11bChQdCxmdCksdj12K01hdGguaW11bChpdCxobil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHd0KXwwKStNYXRoLmltdWwodXQsaG4pfDAsdz13K01hdGguaW11bCh1dCx3dCl8MCx2PXYrTWF0aC5pbXVsKE1lLF90KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoTWUsTnQpfDApK01hdGguaW11bChEZSxfdCl8MCx3PXcrTWF0aC5pbXVsKERlLE50KXwwLHY9ditNYXRoLmltdWwoWGUscnQpfDAscD0ocD1wK01hdGguaW11bChYZSxJdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHc9dytNYXRoLmltdWwoVWUsSXQpfDAsdj12K01h''@;'; put 'put ''dGguaW11bChBZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHB0KXwwKStNYXRoLmltdWwoVGUsRHQpfDAsdz13K01hdGguaW11bChUZSxwdCl8MCx2PXYrTWF0aC5pbXVsKGx0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsenQpfDApK01hdGguaW11bChQZSxJbil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKFBlLHp0KXwwLHY9ditNYXRoLmltdWwoS2UseG4pfDAscD0ocD1wK01hdGguaW11bChLZSxzbil8MCkrTWF0aC5pbXVsKFllLHhuKXwwLHc9dytNYXRoLmltdWwoWWUsc24pfDA7dmFyIHFpPShTKyh2PXYrTWF0aC5pbXVsKE9lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwoT2UsJHQpfDApK01hdGguaW11bChqZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChqZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHFpPj4+MjYpfDAscWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LGhuKSxwPShwPU1hdGguaW11bChIdCx3dCkpK01hdGguaW11bChQdCxobil8''@;'; put 'put ''MCx3PU1hdGguaW11bChQdCx3dCksdj12K01hdGguaW11bChpdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LE50KXwwKStNYXRoLmltdWwodXQsX3QpfDAsdz13K01hdGguaW11bCh1dCxOdCl8MCx2PXYrTWF0aC5pbXVsKE1lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsSXQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxydCl8MCx3PXcrTWF0aC5pbXVsKERlLEl0KXwwLHY9ditNYXRoLmltdWwoWGUsRHQpfDAscD0ocD1wK01hdGguaW11bChYZSxwdCl8MCkrTWF0aC5pbXVsKFVlLER0KXwwLHc9dytNYXRoLmltdWwoVWUscHQpfDAsdj12K01hdGguaW11bChBZSxJbil8MCxwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKEFlLHp0KXwwKStNYXRoLmltdWwoVGUsSW4pfDAsdz13K01hdGguaW11bChUZSx6dCl8MCx2PXYrTWF0aC5pbXVsKGx0LHhuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsc24pfDApK01hdGguaW11bChQZSx4bil8MCx3PXcrTWF0aC5pbXVsKFBlLHNuKXwwO3ZhciBKaT0oUysodj12''@;'; put 'put ''K01hdGguaW11bChLZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoWWUsUm4pfDApKTw8MTMpfDA7Uz0oKHc9dytNYXRoLmltdWwoWWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2Myx2PU1hdGguaW11bChI''@;'; put 'put ''dCxfdCkscD0ocD1NYXRoLmltdWwoSHQsTnQpKStNYXRoLmltdWwoUHQsX3QpfDAsdz1NYXRoLmltdWwoUHQsTnQpLHY9ditNYXRoLmltdWwoaXQscnQpfDAscD0ocD1wK01hdGguaW11bChpdCxJdCl8MCkrTWF0aC5pbXVsKHV0LHJ0KXwwLHc9dytNYXRoLmltdWwodXQsSXQpfDAsdj12K01h''@;'; put 'put ''dGguaW11bChNZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKE1lLHB0KXwwKStNYXRoLmltdWwoRGUsRHQpfDAsdz13K01hdGguaW11bChEZSxwdCl8MCx2PXYrTWF0aC5pbXVsKFhlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoWGUsenQpfDApK01hdGguaW11bChVZSxJbil8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKFVlLHp0KXwwLHY9ditNYXRoLmltdWwoQWUseG4pfDAscD0ocD1wK01hdGguaW11bChBZSxzbil8MCkrTWF0aC5pbXVsKFRlLHhuKXwwLHc9dytNYXRoLmltdWwoVGUsc24pfDA7dmFyIGFvPShTKyh2PXYrTWF0aC5pbXVsKGx0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt''@;'; put 'put ''dWwobHQsJHQpfDApK01hdGguaW11bChQZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChQZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKGFvPj4+MjYpfDAsYW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHJ0KSxwPShwPU1hdGguaW11bChIdCxJdCkpK01hdGguaW11bChQdCxydCl8''@;'; put 'put ''MCx3PU1hdGguaW11bChQdCxJdCksdj12K01hdGguaW11bChpdCxEdCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LHB0KXwwKStNYXRoLmltdWwodXQsRHQpfDAsdz13K01hdGguaW11bCh1dCxwdCl8MCx2PXYrTWF0aC5pbXVsKE1lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsenQpfDApK01h''@;'; put 'put ''dGguaW11bChEZSxJbil8MCx3PXcrTWF0aC5pbXVsKERlLHp0KXwwLHY9ditNYXRoLmltdWwoWGUseG4pfDAscD0ocD1wK01hdGguaW11bChYZSxzbil8MCkrTWF0aC5pbXVsKFVlLHhuKXwwLHc9dytNYXRoLmltdWwoVWUsc24pfDA7dmFyIHJvPShTKyh2PXYrTWF0aC5pbXVsKEFlLFJuKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsJHQpfDApK01hdGguaW11bChUZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChUZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHJvPj4+MjYpfDAscm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LER0KSxwPShwPU1hdGguaW11''@;'; put 'put ''bChIdCxwdCkpK01hdGguaW11bChQdCxEdCl8MCx3PU1hdGguaW11bChQdCxwdCksdj12K01hdGguaW11bChpdCxJbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwodXQsSW4pfDAsdz13K01hdGguaW11bCh1dCx6dCl8MCx2PXYrTWF0aC5pbXVsKE1lLHhuKXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bChEZSx4bil8MCx3PXcrTWF0aC5pbXVsKERlLHNuKXwwO3ZhciBpbz0oUysodj12K01hdGguaW11bChYZSxSbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFhlLCR0KXwwKStNYXRoLmltdWwoVWUsUm4pfDApKTw8MTMp''@;'; put 'put ''fDA7Uz0oKHc9dytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhpbz4+PjI2KXwwLGlvJj02NzEwODg2Myx2PU1hdGguaW11bChIdCxJbikscD0ocD1NYXRoLmltdWwoSHQsenQpKStNYXRoLmltdWwoUHQsSW4pfDAsdz1NYXRoLmltdWwoUHQsenQpLHY9ditNYXRoLmltdWwoaXQs''@;'; put 'put ''eG4pfDAscD0ocD1wK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKHV0LHhuKXwwLHc9dytNYXRoLmltdWwodXQsc24pfDA7dmFyIEdpPShTKyh2PXYrTWF0aC5pbXVsKE1lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTWUsJHQpfDApK01hdGguaW11bChEZSxSbil8''@;'; put 'put ''MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChEZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEdpPj4+MjYpfDAsR2kmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LHhuKSxwPShwPU1hdGguaW11bChIdCxzbikpK01hdGguaW11bChQdCx4bil8MCx3PU1hdGguaW11bChQdCxzbik7dmFyIGhvPShT''@;'; put 'put ''Kyh2PXYrTWF0aC5pbXVsKGl0LFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoaXQsJHQpfDApK01hdGguaW11bCh1dCxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bCh1dCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciB5cj0o''@;'; put 'put ''Uysodj1NYXRoLmltdWwoSHQsUm4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEh0LCR0KSkrTWF0aC5pbXVsKFB0LFJuKXwwKSk8PDEzKXwwO3JldHVybiBTPSgodz1NYXRoLmltdWwoUHQsJHQpKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsQ1swXT1QbixDWzFd''@;'; put 'put ''PW5pLENbMl09bG4sQ1szXT1qbixDWzRdPXFyLENbNV09Z2ksQ1s2XT14cixDWzddPVVpLENbOF09S3IsQ1s5XT1ubyxDWzEwXT1IcixDWzExXT1xaSxDWzEyXT1KaSxDWzEzXT1hbyxDWzE0XT1ybyxDWzE1XT1pbyxDWzE2XT1HaSxDWzE3XT1obyxDWzE4XT15ciwwIT09UyYmKENbMTldPVMs''@;'; put 'put ''SC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gWChHLGIsRCl7cmV0dXJuKG5ldyBVKS5tdWxwKEcsYixEKX1mdW5jdGlvbiBVKEcsYil7dGhpcy54PUcsdGhpcy55PWJ9TWF0aC5pbXVsfHwoQj1WKSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihiLEQpe3ZhciBILE49dGhpcy5sZW5ndGgrYi5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1iLmxlbmd0aD9CKHRoaXMsYixEKTpOPDYzP1YodGhpcyxiLEQpOk48MTAyND9mdW5jdGlvbiBZKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZSxELmxlbmd0aD1HLmxlbmd0aCtiLmxlbmd0aDtmb3Io''@;'; put 'put ''dmFyIEg9MCxOPTAsZz0wO2c8RC5sZW5ndGgtMTtnKyspe3ZhciBDPU47Tj0wO2Zvcih2YXIgUz02NzEwODg2MyZILHY9TWF0aC5taW4oZyxiLmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD12O3ArKyl7dmFyIGRlPSgwfEcud29yZHNbZy1wXSkqKDB8Yi53b3Jkc1tw''@;'; put 'put ''XSksZmU9NjcxMDg4NjMmZGU7Uz02NzEwODg2MyYoZmU9ZmUrU3wwKSxOKz0oQz0oQz1DKyhkZS82NzEwODg2NHwwKXwwKSsoZmU+Pj4yNil8MCk+Pj4yNixDJj02NzEwODg2M31ELndvcmRzW2ddPVMsSD1DLEM9Tn1yZXR1cm4gMCE9PUg/RC53b3Jkc1tnXT1IOkQubGVuZ3RoLS0sRC5zdHJp''@;'; put 'put ''cCgpfSh0aGlzLGIsRCk6WCh0aGlzLGIsRCksSH0sVS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9TS5wcm90b3R5cGUuX2NvdW50Qml0cyhiKS0xLE49MDtOPGI7TisrKURbTl09dGhpcy5yZXZCaW4oTixILGIpO3JldHVybiBEfSxVLnBy''@;'; put 'put ''b3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oYixELEgpe2lmKDA9PT1ifHxiPT09SC0xKXJldHVybiBiO2Zvcih2YXIgTj0wLGc9MDtnPEQ7ZysrKU58PSgxJmIpPDxELWctMSxiPj49MTtyZXR1cm4gTn0sVS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7Zm9yKHZhciBT''@;'; put 'put ''PTA7UzxDO1MrKylOW1NdPURbYltTXV0sZ1tTXT1IW2JbU11dfSxVLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oYixELEgsTixnLEMpe3RoaXMucGVybXV0ZShDLGIsRCxILE4sZyk7Zm9yKHZhciBTPTE7UzxnO1M8PD0xKWZvcih2YXIgdj1TPDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJ''@;'; put 'put ''L3YpLHc9TWF0aC5zaW4oMipNYXRoLlBJL3YpLEo9MDtKPGc7Sis9dilmb3IodmFyIG5lPXAsZGU9dyxmZT0wO2ZlPFM7ZmUrKyl7dmFyIHhlPUhbSitmZV0sTGU9TltKK2ZlXSxGZT1IW0orZmUrU10sT2U9TltKK2ZlK1NdLGplPW5lKkZlLWRlKk9lO09lPW5lKk9lK2RlKkZlLEhbSitmZV09''@;'; put 'put ''eGUrKEZlPWplKSxOW0orZmVdPUxlK09lLEhbSitmZStTXT14ZS1GZSxOW0orZmUrU109TGUtT2UsZmUhPT12JiYoamU9cCpuZS13KmRlLGRlPXAqZGUrdypuZSxuZT1qZSl9fSxVLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihiLEQpe3ZhciBIPTF8TWF0aC5tYXgoRCxiKSxOPTEm''@;'; put 'put ''SCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzErTn0sVS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGIsRCxIKXtpZighKEg8PTEpKWZvcih2YXIgTj0wO048SC8yO04rKyl7dmFyIGc9YltOXTtiW05dPWJbSC1OLTFdLGJbSC1OLTFdPWcsZz1EW05dLERb''@;'; put 'put ''Tl09LURbSC1OLTFdLERbSC1OLTFdPS1nfX0sVS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGIsRCl7Zm9yKHZhciBIPTAsTj0wO048RC8yO04rKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKGJbMipOKzFdL0QpK01hdGgucm91bmQoYlsyKk5dL0QpK0g7YltOXT02NzEwODg2MyZn''@;'; put 'put ''LEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4gYn0sVS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihiLEQsSCxOKXtmb3IodmFyIGc9MCxDPTA7QzxEO0MrKylIWzIqQ109ODE5MSYoZys9MHxiW0NdKSxIWzIqQysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihD''@;'; put 'put ''PTIqRDtDPE47KytDKUhbQ109MDttKDA9PT1nKSxtKDA9PSgtODE5MiZnKSl9LFUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oYil7Zm9yKHZhciBEPW5ldyBBcnJheShiKSxIPTA7SDxiO0grKylEW0hdPTA7cmV0dXJuIER9LFUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oYixELEgpe3ZhciBO''@;'; put 'put ''PTIqdGhpcy5ndWVzc0xlbjEzYihiLmxlbmd0aCxELmxlbmd0aCksZz10aGlzLm1ha2VSQlQoTiksQz10aGlzLnN0dWIoTiksUz1uZXcgQXJyYXkoTiksdj1uZXcgQXJyYXkoTikscD1uZXcgQXJyYXkoTiksdz1uZXcgQXJyYXkoTiksSj1uZXcgQXJyYXkoTiksbmU9bmV3IEFycmF5KE4pLGRl''@;'; put 'put ''PUgud29yZHM7ZGUubGVuZ3RoPU4sdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsUyxOKSx0aGlzLmNvbnZlcnQxM2IoRC53b3JkcyxELmxlbmd0aCx3LE4pLHRoaXMudHJhbnNmb3JtKFMsQyx2LHAsTixnKSx0aGlzLnRyYW5zZm9ybSh3LEMsSixuZSxOLGcpO2Zvcih2YXIgZmU9''@;'; put 'put ''MDtmZTxOO2ZlKyspe3ZhciB4ZT12W2ZlXSpKW2ZlXS1wW2ZlXSpuZVtmZV07cFtmZV09dltmZV0qbmVbZmVdK3BbZmVdKkpbZmVdLHZbZmVdPXhlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZSh2LHAsTiksdGhpcy50cmFuc2Zvcm0odixwLGRlLEMsTixnKSx0aGlzLmNvbmp1Z2F0ZShkZSxDLE4p''@;'; put 'put ''LHRoaXMubm9ybWFsaXplMTNiKGRlLE4pLEgubmVnYXRpdmU9Yi5uZWdhdGl2ZV5ELm5lZ2F0aXZlLEgubGVuZ3RoPWIubGVuZ3RoK0QubGVuZ3RoLEguc3RyaXAoKX0sTS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksdGhpcy5tdWxUbyhiLEQpfSxNLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGIpe3ZhciBEPW5ldyBNKG51bGwpO3JldHVybiBELndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtiLmxlbmd0aCksWCh0aGlzLGIsRCl9LE0ucHJvdG90eXBlLmltdWw9''@;'; put 'put ''ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhiLHRoaXMpfSxNLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiksbShiPDY3MTA4ODY0KTtmb3IodmFyIEQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBOPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbSF0pKmIsZz0oNjcxMDg4NjMmTikrKDY3MTA4ODYzJkQpO0Q+Pj0yNixEKz1OLzY3MTA4ODY0fDAsRCs9Zz4+PjI2LHRoaXMud29yZHNbSF09NjcxMDg4NjMmZ31yZXR1cm4gMCE9PUQmJih0aGlzLndvcmRzW0hdPUQsdGhpcy5sZW5ndGgrKyksdGhpc30sTS5wcm90b3R5cGUubXVsbj1m''@;'; put 'put ''dW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGIpfSxNLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LE0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LE0ucHJvdG90eXBlLnBv''@;'; put 'put ''dz1mdW5jdGlvbihiKXt2YXIgRD1mdW5jdGlvbiBqKEcpe2Zvcih2YXIgYj1uZXcgQXJyYXkoRy5iaXRMZW5ndGgoKSksRD0wO0Q8Yi5sZW5ndGg7RCsrKXt2YXIgTj1EJTI2O2JbRF09KEcud29yZHNbRC8yNnwwXSYxPDxOKT4+Pk59cmV0dXJuIGJ9KGIpO2lmKDA9PT1ELmxlbmd0aClyZXR1''@;'; put 'put ''cm4gbmV3IE0oMSk7Zm9yKHZhciBIPXRoaXMsTj0wO048RC5sZW5ndGgmJjA9PT1EW05dO04rKyxIPUguc3FyKCkpO2lmKCsrTjxELmxlbmd0aClmb3IodmFyIGc9SC5zcXIoKTtOPEQubGVuZ3RoO04rKyxnPWcuc3FyKCkpMCE9PURbTl0mJihIPUgubXVsKGcpKTtyZXR1cm4gSH0sTS5wcm90''@;'; put 'put ''b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgZyxEPWIlMjYsSD0oYi1EKS8yNixOPTY3MTA4ODYzPj4+MjYtRDw8MjYtRDtpZigwIT09RCl7dmFyIEM9MDtmb3IoZz0wO2c8dGhpcy5sZW5ndGg7ZysrKXt2YXIgUz10aGlzLndvcmRzW2dd''@;'; put 'put ''Jk47dGhpcy53b3Jkc1tnXT0oMHx0aGlzLndvcmRzW2ddKS1TPDxEfEMsQz1TPj4+MjYtRH1DJiYodGhpcy53b3Jkc1tnXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1IKXtmb3IoZz10aGlzLmxlbmd0aC0xO2c+PTA7Zy0tKXRoaXMud29yZHNbZytIXT10aGlzLndvcmRzW2ddO2ZvcihnPTA7''@;'; put 'put ''ZzxIO2crKyl0aGlzLndvcmRzW2ddPTA7dGhpcy5sZW5ndGgrPUh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oYixE''@;'; put 'put ''LEgpe3ZhciBOO20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKSxOPUQ/KEQtRCUyNikvMjY6MDt2YXIgZz1iJTI2LEM9TWF0aC5taW4oKGItZykvMjYsdGhpcy5sZW5ndGgpLFM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5nPDxnLHY9SDtpZihOLT1DLE49TWF0aC5tYXgoMCxOKSx2KXtmb3IodmFy''@;'; put 'put ''IHA9MDtwPEM7cCsrKXYud29yZHNbcF09dGhpcy53b3Jkc1twXTt2Lmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHA9MDtwPHRoaXMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPXRoaXMud29yZHNbcCtDXTtlbHNlIHRoaXMud29yZHNbMF09''@;'; put 'put ''MCx0aGlzLmxlbmd0aD0xO3ZhciB3PTA7Zm9yKHA9dGhpcy5sZW5ndGgtMTtwPj0wJiYoMCE9PXd8fHA+PU4pO3AtLSl7dmFyIEo9MHx0aGlzLndvcmRzW3BdO3RoaXMud29yZHNbcF09dzw8MjYtZ3xKPj4+Zyx3PUomU31yZXR1cm4gdiYmMCE9PXcmJih2LndvcmRzW3YubGVuZ3RoKytdPXcp''@;'; put 'put ''LDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oYixELEgpfSxNLnByb3RvdHlwZS5zaGxuPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oYil9LE0ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKGIpfSxNLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oYil9LE0ucHJv''@;'; put 'put ''dG90eXBlLnVzaHJuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGIpfSxNLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhp''@;'; put 'put ''cy53b3Jkc1tIXSYxPDxEKSl9LE0ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9YiUyNixIPShiLUQpLzI2O3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigwIT09RCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1EJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5EPDxEKSx0aGlzLnN0cmlwKCkpfSxNLnByb3RvdHlwZS5tYXNr''@;'; put 'put ''bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihiKX0sTS5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MD90aGlzLmlzdWJuKC1iKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGI/KHRoaXMud29yZHNbMF09Yi0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihiKX0sTS5wcm90b3R5cGUu''@;'; put 'put ''X2lhZGRuPWZ1bmN0aW9uKGIpe3RoaXMud29yZHNbMF0rPWI7Zm9yKHZhciBEPTA7RDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tEXT49NjcxMDg4NjQ7RCsrKXRoaXMud29yZHNbRF0tPTY3MTA4ODY0LEQ9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbRCsxXT0xOnRoaXMud29yZHNbRCsx''@;'; put 'put ''XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxEKzEpLHRoaXN9LE0ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKGIpe2lmKG0oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpLGI8MClyZXR1cm4gdGhpcy5pYWRkbigtYik7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPWIsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPDA7RCsrKXRoaXMud29yZHNbRF0rPTY3MTA4ODY0LHRoaXMud29yZHNbRCsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaWFk''@;'; put 'put ''ZG4oYil9LE0ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihiKX0sTS5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sTS5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWJzKCl9LE0ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihiLEQsSCl7dmFyIGc7dGhpcy5fZXhwYW5kKGIubGVuZ3RoK0gpO3ZhciBDLFM9MDtmb3IoZz0wO2c8Yi5sZW5ndGg7ZysrKXtDPSgwfHRoaXMud29yZHNbZytIXSkrUzt2YXIgdj0oMHxiLndvcmRzW2ddKSpE''@;'; put 'put ''O1M9KChDLT02NzEwODg2MyZ2KT4+MjYpLSh2LzY3MTA4ODY0fDApLHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDfWZvcig7Zzx0aGlzLmxlbmd0aC1IO2crKylTPShDPSgwfHRoaXMud29yZHNbZytIXSkrUyk+PjI2LHRoaXMud29yZHNbZytIXT02NzEwODg2MyZDO2lmKDA9PT1TKXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCk7Zm9yKG0oLTE9PT1TKSxTPTAsZz0wO2c8dGhpcy5sZW5ndGg7ZysrKVM9KEM9LSgwfHRoaXMud29yZHNbZ10pK1MpPj4yNix0aGlzLndvcmRzW2ddPTY3MTA4ODYzJkM7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl93b3Jk''@;'; put 'put ''RGl2PWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmNsb25lKCksZz1iLEM9MHxnLndvcmRzW2cubGVuZ3RoLTFdOzAhPShIPTI2LXRoaXMuX2NvdW50Qml0cyhDKSkmJihnPWcudXNobG4oSCksTi5pdXNobG4oSCksQz0wfGcud29yZHNbZy5sZW5ndGgtMV0pO3ZhciBwLHY9Ti5sZW5ndGgt''@;'; put 'put ''Zy5sZW5ndGg7aWYoIm1vZCIhPT1EKXsocD1uZXcgTShudWxsKSkubGVuZ3RoPXYrMSxwLndvcmRzPW5ldyBBcnJheShwLmxlbmd0aCk7Zm9yKHZhciB3PTA7dzxwLmxlbmd0aDt3KyspcC53b3Jkc1t3XT0wfXZhciBKPU4uY2xvbmUoKS5faXNobG5zdWJtdWwoZywxLHYpOzA9PT1KLm5lZ2F0''@;'; put 'put ''aXZlJiYoTj1KLHAmJihwLndvcmRzW3ZdPTEpKTtmb3IodmFyIG5lPXYtMTtuZT49MDtuZS0tKXt2YXIgZGU9NjcxMDg4NjQqKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZV0pKygwfE4ud29yZHNbZy5sZW5ndGgrbmUtMV0pO2ZvcihkZT1NYXRoLm1pbihkZS9DfDAsNjcxMDg4NjMpLE4uX2lzaGxu''@;'; put 'put ''c3VibXVsKGcsZGUsbmUpOzAhPT1OLm5lZ2F0aXZlOylkZS0tLE4ubmVnYXRpdmU9MCxOLl9pc2hsbnN1Ym11bChnLDEsbmUpLE4uaXNaZXJvKCl8fChOLm5lZ2F0aXZlXj0xKTtwJiYocC53b3Jkc1tuZV09ZGUpfXJldHVybiBwJiZwLnN0cmlwKCksTi5zdHJpcCgpLCJkaXYiIT09RCYmMCE9''@;'; put 'put ''PUgmJk4uaXVzaHJuKEgpLHtkaXY6cHx8bnVsbCxtb2Q6Tn19LE0ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIG0oIWIuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgTSgwKSxtb2Q6bmV3IE0oMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Yi5uZWdh''@;'; put 'put ''dGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLEQpLCJtb2QiIT09RCYmKE49Qy5kaXYubmVnKCkpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVnYXRpdmUmJmcuaWFkZChiKSkse2RpdjpOLG1vZDpnfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1iLm5lZ2F0aXZlPyhD''@;'; put 'put ''PXRoaXMuZGl2bW9kKGIubmVnKCksRCksIm1vZCIhPT1EJiYoTj1DLmRpdi5uZWcoKSkse2RpdjpOLG1vZDpDLm1vZH0pOnRoaXMubmVnYXRpdmUmYi5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChiLm5lZygpLEQpLCJkaXYiIT09RCYmKGc9Qy5tb2QubmVnKCksSCYmMCE9PWcubmVn''@;'; put 'put ''YXRpdmUmJmcuaXN1YihiKSkse2RpdjpDLmRpdixtb2Q6Z30pOmIubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChiKTwwP3tkaXY6bmV3IE0oMCksbW9kOnRoaXN9OjE9PT1iLmxlbmd0aD8iZGl2Ij09PUQ/e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09''@;'; put 'put ''RD97ZGl2Om51bGwsbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGIud29yZHNbMF0pLG1vZDpuZXcgTSh0aGlzLm1vZG4oYi53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGIsRCk7dmFyIE4sZyxDfSxNLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oYil7''@;'; put 'put ''cmV0dXJuIHRoaXMuZGl2bW9kKGIsImRpdiIsITEpLmRpdn0sTS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmRpdm1vZChiLCJtb2QiLCExKS5tb2R9LE0ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITApLm1vZH0s''@;'; put 'put ''TS5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5kaXZtb2QoYik7aWYoRC5tb2QuaXNaZXJvKCkpcmV0dXJuIEQuZGl2O3ZhciBIPTAhPT1ELmRpdi5uZWdhdGl2ZT9ELm1vZC5pc3ViKGIpOkQubW9kLE49Yi51c2hybigxKSxnPWIuYW5kbG4oMSksQz1ILmNtcChO''@;'; put 'put ''KTtyZXR1cm4gQzwwfHwxPT09ZyYmMD09PUM/RC5kaXY6MCE9PUQuZGl2Lm5lZ2F0aXZlP0QuZGl2LmlzdWJuKDEpOkQuZGl2LmlhZGRuKDEpfSxNLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0oMTw8MjYpJWIsSD0wLE49dGhpcy5sZW5ndGgt''@;'; put 'put ''MTtOPj0wO04tLSlIPShEKkgrKDB8dGhpcy53b3Jkc1tOXSkpJWI7cmV0dXJuIEh9LE0ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGIpe20oYjw9NjcxMDg4NjMpO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkrNjcxMDg4NjQq''@;'; put 'put ''RDt0aGlzLndvcmRzW0hdPU4vYnwwLEQ9TiVifXJldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihiKX0sTS5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVy''@;'; put 'put ''bygpKTt2YXIgRD10aGlzLEg9Yi5jbG9uZSgpO0Q9MCE9PUQubmVnYXRpdmU/RC51bW9kKGIpOkQuY2xvbmUoKTtmb3IodmFyIE49bmV3IE0oMSksZz1uZXcgTSgwKSxDPW5ldyBNKDApLFM9bmV3IE0oMSksdj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7KUQuaXVzaHJuKDEpLEguaXVzaHJu''@;'; put 'put ''KDEpLCsrdjtmb3IodmFyIHA9SC5jbG9uZSgpLHc9RC5jbG9uZSgpOyFELmlzWmVybygpOyl7Zm9yKHZhciBKPTAsbmU9MTshKEQud29yZHNbMF0mbmUpJiZKPDI2OysrSixuZTw8PTEpO2lmKEo+MClmb3IoRC5pdXNocm4oSik7Si0tID4wOykoTi5pc09kZCgpfHxnLmlzT2RkKCkpJiYoTi5p''@;'; put 'put ''YWRkKHApLGcuaXN1Yih3KSksTi5pdXNocm4oMSksZy5pdXNocm4oMSk7Zm9yKHZhciBkZT0wLGZlPTE7IShILndvcmRzWzBdJmZlKSYmZGU8MjY7KytkZSxmZTw8PTEpO2lmKGRlPjApZm9yKEguaXVzaHJuKGRlKTtkZS0tID4wOykoQy5pc09kZCgpfHxTLmlzT2RkKCkpJiYoQy5pYWRkKHAp''@;'; put 'put ''LFMuaXN1Yih3KSksQy5pdXNocm4oMSksUy5pdXNocm4oMSk7RC5jbXAoSCk+PTA/KEQuaXN1YihIKSxOLmlzdWIoQyksZy5pc3ViKFMpKTooSC5pc3ViKEQpLEMuaXN1YihOKSxTLmlzdWIoZykpfXJldHVybnthOkMsYjpTLGdjZDpILml1c2hsbih2KX19LE0ucHJvdG90eXBlLl9pbnZtcD1m''@;'; put 'put ''dW5jdGlvbihiKXttKDA9PT1iLm5lZ2F0aXZlKSxtKCFiLmlzWmVybygpKTt2YXIgSixEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9SC5jbG9uZSgpO0QuY21wbigxKT4wJiZILmNt''@;'; put 'put ''cG4oMSk+MDspe2Zvcih2YXIgUz0wLHY9MTshKEQud29yZHNbMF0mdikmJlM8MjY7KytTLHY8PD0xKTtpZihTPjApZm9yKEQuaXVzaHJuKFMpO1MtLSA+MDspTi5pc09kZCgpJiZOLmlhZGQoQyksTi5pdXNocm4oMSk7Zm9yKHZhciBwPTAsdz0xOyEoSC53b3Jkc1swXSZ3KSYmcDwyNjsrK3As''@;'; put 'put ''dzw8PTEpO2lmKHA+MClmb3IoSC5pdXNocm4ocCk7cC0tID4wOylnLmlzT2RkKCkmJmcuaWFkZChDKSxnLml1c2hybigxKTtELmNtcChIKT49MD8oRC5pc3ViKEgpLE4uaXN1YihnKSk6KEguaXN1YihEKSxnLmlzdWIoTikpfXJldHVybihKPTA9PT1ELmNtcG4oMSk/TjpnKS5jbXBuKDApPDAm''@;'; put 'put ''JkouaWFkZChiKSxKfSxNLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oYil7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gYi5hYnMoKTtpZihiLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBEPXRoaXMuY2xvbmUoKSxIPWIuY2xvbmUoKTtELm5lZ2F0aXZlPTAsSC5uZWdhdGl2ZT0wO2Zv''@;'; put 'put ''cih2YXIgTj0wO0QuaXNFdmVuKCkmJkguaXNFdmVuKCk7TisrKUQuaXVzaHJuKDEpLEguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtELmlzRXZlbigpOylELml1c2hybigxKTtmb3IoO0guaXNFdmVuKCk7KUguaXVzaHJuKDEpO3ZhciBnPUQuY21wKEgpO2lmKGc8MCl7dmFyIEM9RDtEPUgsSD1D''@;'; put 'put ''fWVsc2UgaWYoMD09PWd8fDA9PT1ILmNtcG4oMSkpYnJlYWs7RC5pc3ViKEgpfXJldHVybiBILml1c2hsbihOKX0sTS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5lZ2NkKGIpLmEudW1vZChiKX0sTS5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9''@;'; put 'put ''PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT0oMSZ0aGlzLndvcmRzWzBdKX0sTS5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMud29yZHNbMF0mYn0sTS5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oYil7bSgi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIGIpO3ZhciBEPWIlMjYsSD0oYi1EKS8yNixOPTE8PEQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PU4sdGhpcztmb3IodmFyIGc9TixDPUg7MCE9PWcmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgUz0wfHRo''@;'; put 'put ''aXMud29yZHNbQ107Zz0oUys9Zyk+Pj4yNix0aGlzLndvcmRzW0NdPVMmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbQ109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhp''@;'; put 'put ''cy53b3Jkc1swXX0sTS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihiKXt2YXIgSCxEPWI8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkQpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7RCYmKGI9''@;'; put 'put ''LWIpLG0oYjw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIE49MHx0aGlzLndvcmRzWzBdO0g9Tj09PWI/MDpOPGI/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSxNLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oYil7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9''@;'; put 'put ''PT1iLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgRD10aGlzLnVjbXAoYik7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUQ6RH0sTS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihiKXtpZih0aGlzLmxlbmd0aD5i''@;'; put 'put ''Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxiLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBOPTB8dGhpcy53b3Jkc1tIXSxnPTB8Yi53b3Jkc1tIXTtpZihOIT09Zyl7TjxnP0Q9LTE6Tj5nJiYoRD0xKTticmVha319cmV0''@;'; put 'put ''dXJuIER9LE0ucHJvdG90eXBlLmd0bj1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oYil7cmV0dXJuIDE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPj0wfSxN''@;'; put 'put ''LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPj0wfSxNLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGIpe3JldHVybi0xPT09dGhpcy5jbXAoYil9LE0ucHJvdG90eXBl''@;'; put 'put ''Lmx0ZW49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wbihiKTw9MH0sTS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcChiKTw9MH0sTS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5lcT1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gMD09PXRoaXMuY21wKGIpfSxNLnJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbmV3IHVlKGIpfSxNLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGIuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJl''@;'; put 'put ''ZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LE0ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5yZWQ9Yix0aGlzfSxNLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihiKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkg''@;'; put 'put ''YSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChiKX0sTS5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsYil9LE0ucHJv''@;'; put 'put ''dG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsYil9LE0u''@;'; put 'put ''cHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLm11bCh0aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks''@;'; put 'put ''dGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxiKSx0aGlzLnJlZC5pbXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y''@;'; put 'put ''ZWQuc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sTS5wcm90b3R5cGUucmVkU3Fy''@;'; put 'put ''dD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LE0ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwi''@;'; put 'put ''cmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxNLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sTS5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkJiYhYi5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRo''@;'; put 'put ''aXMsYil9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gZWUoRyxiKXt0aGlzLm5hbWU9Ryx0aGlzLnA9bmV3IE0oYiwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IE0oMSkuaXVzaGxuKHRoaXMubikuaXN1''@;'; put 'put ''Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHRlKCl7ZWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBvZSgpe2VlLmNhbGwodGhp''@;'; put 'put ''cywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtlZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIp''@;'; put 'put ''fWZ1bmN0aW9uIGhlKCl7ZWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB1ZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciBiPU0uX3ByaW1lKEcpO3Ro''@;'; put 'put ''aXMubT1iLnAsdGhpcy5wcmltZT1ifWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe3VlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNo''@;'; put 'put ''aWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBNKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwo''@;'; put 'put ''dGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWVlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5''@;'; put 'put ''KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxifSxlZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihiKXt2YXIgSCxEPWI7ZG97dGhpcy5zcGxpdChELHRoaXMudG1wKSxIPShEPShEPXRoaXMuaW11bEsoRCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFy''@;'; put 'put ''IE49SDx0aGlzLm4/LTE6RC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1OPyhELndvcmRzWzBdPTAsRC5sZW5ndGg9MSk6Tj4wP0QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUQuc3RyaXA/RC5zdHJpcCgpOkQuX3N0cmlwKCksRH0sZWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGIsRCl7Yi5p''@;'; put 'put ''dXNocm4odGhpcy5uLDAsRCl9LGVlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pbXVsKHRoaXMuayl9LGxlKHRlLGVlKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9NDE5NDMwMyxOPU1hdGgubWluKGIubGVuZ3RoLDkpLGc9MDtnPE47''@;'; put 'put ''ZysrKUQud29yZHNbZ109Yi53b3Jkc1tnXTtpZihELmxlbmd0aD1OLGIubGVuZ3RoPD05KXJldHVybiBiLndvcmRzWzBdPTAsdm9pZChiLmxlbmd0aD0xKTt2YXIgQz1iLndvcmRzWzldO2ZvcihELndvcmRzW0QubGVuZ3RoKytdPUMmSCxnPTEwO2c8Yi5sZW5ndGg7ZysrKXt2YXIgUz0wfGIu''@;'; put 'put ''d29yZHNbZ107Yi53b3Jkc1tnLTEwXT0oUyZIKTw8NHxDPj4+MjIsQz1TfWIud29yZHNbZy0xMF09Qz4+Pj0yMixiLmxlbmd0aC09MD09PUMmJmIubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtiLndvcmRzW2IubGVuZ3RoXT0wLGIud29yZHNbYi5sZW5n''@;'; put 'put ''dGgrMV09MCxiLmxlbmd0aCs9Mjtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTB8Yi53b3Jkc1tIXTtiLndvcmRzW0hdPTY3MTA4ODYzJihEKz05NzcqTiksRD02NCpOKyhELzY3MTA4ODY0fDApfXJldHVybiAwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmKGIubGVuZ3Ro''@;'; put 'put ''LS0sMD09PWIud29yZHNbYi5sZW5ndGgtMV0mJmIubGVuZ3RoLS0pLGJ9LGxlKG9lLGVlKSxsZShzZSxlZSksbGUoaGUsZWUpLGhlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihiKXtmb3IodmFyIEQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBOPTE5KigwfGIud29yZHNbSF0pK0QsZz02''@;'; put 'put ''NzEwODg2MyZOO04+Pj49MjYsYi53b3Jkc1tIXT1nLEQ9Tn1yZXR1cm4gMCE9PUQmJihiLndvcmRzW2IubGVuZ3RoKytdPUQpLGJ9LE0uX3ByaW1lPWZ1bmN0aW9uKGIpe2lmKHFbYl0pcmV0dXJuIHFbYl07dmFyIEQ7aWYoImsyNTYiPT09YilEPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PWIp''@;'; put 'put ''RD1uZXcgb2U7ZWxzZSBpZigicDE5MiI9PT1iKUQ9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT1iKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2IpO0Q9bmV3IGhlfXJldHVybiBxW2JdPUQsRH0sdWUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGIpe20oMD09PWIubmVn''@;'; put 'put ''YXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oYixEKXttKDA9PShiLm5lZ2F0aXZlfEQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHBvc2l0aXZlcyIpLG0oYi5yZWQmJmIucmVkPT09RC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sdWUucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGIpLl9mb3JjZVJlZCh0aGlzKTpiLnVt''@;'; put 'put ''b2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oYil7cmV0dXJuIGIuaXNaZXJvKCk/Yi5jbG9uZSgpOnRoaXMubS5zdWIoYikuX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQp''@;'; put 'put ''O3ZhciBIPWIuYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pYWRkKEQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0w''@;'; put 'put ''JiZILmlzdWIodGhpcy5tKSxIfSx1ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuc3ViKEQpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9u''@;'; put 'put ''KGIsRCl7dGhpcy5fdmVyaWZ5MihiLEQpO3ZhciBIPWIuaXN1YihEKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShiKSx0aGlzLmltb2QoYi51c2hsbihEKSl9LHVlLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5pbXVsKEQpKX0sdWUucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkyKGIsRCksdGhpcy5pbW9kKGIubXVsKEQpKX0sdWUucHJvdG90eXBlLmlz''@;'; put 'put ''cXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW11bChiLGIuY2xvbmUoKSl9LHVlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubXVsKGIsYil9LHVlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIGIuY2xvbmUoKTt2YXIgRD10''@;'; put 'put ''aGlzLm0uYW5kbG4oMyk7aWYobShEJTI9PTEpLDM9PT1EKXt2YXIgSD10aGlzLm0uYWRkKG5ldyBNKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGIsSCl9Zm9yKHZhciBOPXRoaXMubS5zdWJuKDEpLGc9MDshTi5pc1plcm8oKSYmMD09PU4uYW5kbG4oMSk7KWcrKyxOLml1c2hybigx''@;'; put 'put ''KTttKCFOLmlzWmVybygpKTt2YXIgQz1uZXcgTSgxKS50b1JlZCh0aGlzKSxTPUMucmVkTmVnKCksdj10aGlzLm0uc3VibigxKS5pdXNocm4oMSkscD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHA9bmV3IE0oMipwKnApLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhwLHYpLmNtcChTKTspcC5y''@;'; put 'put ''ZWRJQWRkKFMpO2Zvcih2YXIgdz10aGlzLnBvdyhwLE4pLEo9dGhpcy5wb3coYixOLmFkZG4oMSkuaXVzaHJuKDEpKSxuZT10aGlzLnBvdyhiLE4pLGRlPWc7MCE9PW5lLmNtcChDKTspe2Zvcih2YXIgZmU9bmUseGU9MDswIT09ZmUuY21wKEMpO3hlKyspZmU9ZmUucmVkU3FyKCk7bSh4ZTxk''@;'; put 'put ''ZSk7dmFyIExlPXRoaXMucG93KHcsbmV3IE0oMSkuaXVzaGxuKGRlLXhlLTEpKTtKPUoucmVkTXVsKExlKSx3PUxlLnJlZFNxcigpLG5lPW5lLnJlZE11bCh3KSxkZT14ZX1yZXR1cm4gSn0sdWUucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7dmFyIEQ9Yi5faW52bXAodGhpcy5tKTtyZXR1''@;'; put 'put ''cm4gMCE9PUQubmVnYXRpdmU/KEQubmVnYXRpdmU9MCx0aGlzLmltb2QoRCkucmVkTmVnKCkpOnRoaXMuaW1vZChEKX0sdWUucHJvdG90eXBlLnBvdz1mdW5jdGlvbihiLEQpe2lmKEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ELmNtcG4oMSkpcmV0dXJu''@;'; put 'put ''IGIuY2xvbmUoKTt2YXIgTj1uZXcgQXJyYXkoMTYpO05bMF09bmV3IE0oMSkudG9SZWQodGhpcyksTlsxXT1iO2Zvcih2YXIgZz0yO2c8Ti5sZW5ndGg7ZysrKU5bZ109dGhpcy5tdWwoTltnLTFdLGIpO3ZhciBDPU5bMF0sUz0wLHY9MCxwPUQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1wJiYo''@;'; put 'put ''cD0yNiksZz1ELmxlbmd0aC0xO2c+PTA7Zy0tKXtmb3IodmFyIHc9RC53b3Jkc1tnXSxKPXAtMTtKPj0wO0otLSl7dmFyIG5lPXc+PkomMTtDIT09TlswXSYmKEM9dGhpcy5zcXIoQykpLDAhPT1uZXx8MCE9PVM/KFM8PD0xLFN8PW5lLCg0PT0rK3Z8fDA9PT1nJiYwPT09SikmJihDPXRoaXMu''@;'; put 'put ''bXVsKEMsTltTXSksdj0wLFM9MCkpOnY9MH1wPTI2fXJldHVybiBDfSx1ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGIpe3ZhciBEPWIudW1vZCh0aGlzLm0pO3JldHVybiBEPT09Yj9ELmNsb25lKCk6RH0sdWUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBE''@;'; put 'put ''PWIuY2xvbmUoKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxNLm1vbnQ9ZnVuY3Rpb24oYil7cmV0dXJuIG5ldyBjZShiKX0sbGUoY2UsdWUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBl''@;'; put 'put ''LmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGIpe3ZhciBEPXRoaXMuaW1vZChiLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gRC5yZWQ9bnVsbCxEfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIGIud29yZHNbMF09MCxiLmxlbmd0''@;'; put 'put ''aD0xLGI7dmFyIEg9Yi5pbXVsKEQpLE49SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoTikuaXVzaHJuKHRoaXMuc2hpZnQpLEM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9DPWcuaXN1Yih0aGlzLm0p''@;'; put 'put ''OmcuY21wbigwKTwwJiYoQz1nLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYixEKXtpZihiLmlzWmVybygpfHxELmlzWmVybygpKXJldHVybiBuZXcgTSgwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Yi5tdWwoRCksTj1ILm1hc2tu''@;'; put 'put ''KHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0p''@;'; put 'put ''KSxDLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuaW1vZChiLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oYXQ9Ri5ubWQoYXQpLHRoaXMpfSw1Nzc5ODphdD0+e2Z1bmN0aW9uIEllKEYsYWUp''@;'; put 'put ''e2lmKCFGKXRocm93IG5ldyBFcnJvcihhZXx8IkFzc2VydGlvbiBmYWlsZWQiKX1hdC5leHBvcnRzPUllLEllLmVxdWFsPWZ1bmN0aW9uKGFlLHgsbSl7aWYoYWUhPXgpdGhyb3cgbmV3IEVycm9yKG18fCJBc3NlcnRpb24gZmFpbGVkOiAiK2FlKyIgIT0gIit4KX19LDc4MjQ3OihhdCxJZSk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEY9SWU7ZnVuY3Rpb24geChsZSl7cmV0dXJuIDE9PT1sZS5sZW5ndGg/IjAiK2xlOmxlfWZ1bmN0aW9uIG0obGUpe2Zvcih2YXIgTT0iIixPPTA7TzxsZS5sZW5ndGg7TysrKU0rPXgobGVbT10udG9TdHJpbmcoMTYpKTtyZXR1cm4gTX1GLnRvQXJyYXk9ZnVu''@;'; put 'put ''Y3Rpb24gYWUobGUsTSl7aWYoQXJyYXkuaXNBcnJheShsZSkpcmV0dXJuIGxlLnNsaWNlKCk7aWYoIWxlKXJldHVybltdO3ZhciBPPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgbGUpe2Zvcih2YXIgUj0wO1I8bGUubGVuZ3RoO1IrKylPW1JdPTB8bGVbUl07cmV0dXJuIE99aWYoImhleCI9PT1N''@;'; put 'put ''KWZvcigobGU9bGUucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYobGU9IjAiK2xlKSxSPTA7UjxsZS5sZW5ndGg7Uis9MilPLnB1c2gocGFyc2VJbnQobGVbUl0rbGVbUisxXSwxNikpO2Vsc2UgZm9yKFI9MDtSPGxlLmxlbmd0aDtSKyspe3ZhciB6PWxlLmNoYXJD''@;'; put 'put ''b2RlQXQoUiksSz16Pj44LEk9MjU1Jno7Sz9PLnB1c2goSyxJKTpPLnB1c2goSSl9cmV0dXJuIE99LEYuemVybzI9eCxGLnRvSGV4PW0sRi5lbmNvZGU9ZnVuY3Rpb24oTSxPKXtyZXR1cm4iaGV4Ij09PU8/bShNKTpNfX0sODMyNzQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zl''@;'; put 'put ''Yl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2Vf''@;'; put 'put ''RG9uX1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXm5tJC9pLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJu''@;'; put 'put ''IG08MTI/TT8idm0iOiJWTSI6TT8ibm0iOiJOTSJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxl''@;'; put 'put ''bmRhcjp7c2FtZURheToiW1ZhbmRhZyBvbV0gTFQiLG5leHREYXk6IltNXHhmNHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVk''@;'; put 'put ''IG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG0rKDE9PT1tfHw4PT09bXx8bT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2''@;'; put 'put ''Njc2KSl9LDYxODY3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PWZ1bmN0aW9uKFIpe3JldHVybiAwPT09Uj8wOjE9PT1SPzE6Mj09PVI/MjpSJTEwMD49MyYmUiUxMDA8PTEwPzM6UiUxMDA+PTExPzQ6NX0sbT17czpbIlx1MDYyM1x1MDY0Mlx1''@;'; put 'put ''MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2''@;'; put 'put ''MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0''@;'; put 'put ''NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZc''@;'; put 'put ''dTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1''@;'; put 'put ''MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUw''@;'; put 'put ''NjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4''@;'; put 'put ''XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2''@;'; put 'put ''MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVc''@;'; put 'put ''dTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUw''@;'; put 'put ''NjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LGxlPWZ1bmN0aW9uKFIpe3JldHVybiBmdW5jdGlvbih6LEssSSxrKXt2YXIgRT14KHopLGo9bVtSXVt4KHopXTtyZXR1cm4gMj09PUUmJihqPWpbSz8wOjFdKSxq''@;'; put 'put ''LnJlcGxhY2UoLyVkL2kseil9fSxNPVsiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhIiwiXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMxXHUwNjRhIiwiXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzIiwiXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0IiwiXHUwNjQ1XHUwNjI3XHUw''@;'; put 'put ''NjRhIiwiXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5IiwiXHUwNjIzXHUwNjQ4XHUwNjJhIiwiXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUw''@;'; put 'put ''NjMxIiwiXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxIiwiXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIl07YWUuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczpNLG1vbnRoc1Nob3J0Ok0sd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYy''@;'; put 'put ''ZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2''@;'; put 'put ''MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2''@;'; put 'put ''X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9cdTIwMGZNL1x1MjAwZllZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oUil7cmV0dXJuIlx1MDY0NSI9PT1SfSxtZXJpZGllbTpmdW5jdGlvbihSLHosSyl7cmV0dXJuIFI8MTI/''@;'; put 'put ''Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjRiXHUwNjI3''@;'; put 'put ''IFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2''@;'; put 'put ''MzMgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp''@;'; put 'put ''bWU6e2Z1dHVyZToiXHUwNjI4XHUwNjM5XHUwNjJmICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6bGUoInMiKSxzczpsZSgicyIpLG06bGUoIm0iKSxtbTpsZSgibSIpLGg6bGUoImgiKSxoaDpsZSgiaCIpLGQ6bGUoImQiKSxkZDpsZSgiZCIpLE06bGUoIk0iKSxNTTpsZSgi''@;'; put 'put ''TSIpLHk6bGUoInkiKSx5eTpsZSgieSIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzowLGRveTo0fX0pfShGKDE2Njc2KSl9LDE3MDc4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2FlLmRlZmluZUxvY2FsZSgiYXIta3ciLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVc''@;'; put 'put ''dTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYz''@;'; put 'put ''MV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1''@;'; put 'put ''MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYy''@;'; put 'put ''YVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJk''@;'; put 'put ''XHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYVx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''ZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZf''@;'; put 'put ''XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4''@;'; put 'put ''dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0''@;'; put 'put ''Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNc''@;'; put 'put ''dTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShGKDE2''@;'; put 'put ''Njc2KSl9LDc3Nzc2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiIxIiwyOiIyIiwzOiIzIiw0OiI0Iiw1OiI1Iiw2OiI2Iiw3OiI3Iiw4OiI4Iiw5OiI5IiwwOiIwIn0sbT1mdW5jdGlvbih6KXtyZXR1cm4gMD09PXo/MDoxPT09ej8xOjI9''@;'; put 'put ''PT16PzI6eiUxMDA+PTMmJnolMTAwPD0xMD8zOnolMTAwPj0xMT80OjV9LGxlPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJk''@;'; put 'put ''XHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFc''@;'; put 'put ''dTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUw''@;'; put 'put ''NjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2''@;'; put 'put ''NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5''@;'; put 'put ''IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2Mjdc''@;'; put 'put ''dTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1''@;'; put 'put ''MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEi''@;'; put 'put ''LCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2''@;'; put 'put ''MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1''@;'; put 'put ''MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sTT1mdW5jdGlvbih6KXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24oSyxJLGssRSl7dmFyIGo9bShLKSxWPWxlW3pdW20oSyldO3JldHVybiAyPT09aiYmKFY9VltJPzA6MV0pLFYucmVwbGFjZSgvJWQvaSxLKX19LE89WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2''@;'; put 'put ''NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2''@;'; put 'put ''MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2Mjhc''@;'; put 'put ''dTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyLWx5Iix7bW9udGhzOk8sbW9udGhzU2hvcnQ6Tyx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRc''@;'; put 'put ''dTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMz''@;'; put 'put ''XHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9c''@;'; put 'put ''dTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy''@;'; put 'put ''c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov''@;'; put 'put ''XHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih6KXtyZXR1cm4iXHUwNjQ1Ij09PXp9LG1lcmlkaWVtOmZ1bmN0aW9uKHosSyxJKXtyZXR1cm4gejwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5''@;'; put 'put ''XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRk''@;'; put 'put ''IFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRk''@;'; put 'put ''ZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpNKCJzIiksc3M6''@;'; put 'put ''TSgicyIpLG06TSgibSIpLG1tOk0oIm0iKSxoOk0oImgiKSxoaDpNKCJoIiksZDpNKCJkIiksZGQ6TSgiZCIpLE06TSgiTSIpLE1NOk0oIk0iKSx5Ok0oInkiKSx5eTpNKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKHope3JldHVybiB6LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3Jt''@;'; put 'put ''YXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihLKXtyZXR1cm4geFtLXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSw1Njc4OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRf''@;'; put 'put ''XHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2''@;'; put 'put ''MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9c''@;'; put 'put ''dTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2''@;'; put 'put ''MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYy''@;'; put 'put ''M1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJiXHUwNjQ2XHUwNjRh''@;'; put 'put ''XHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5''@;'; put 'put ''XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2''@;'; put 'put ''MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQg''@;'; put 'put ''XHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0p''@;'; put 'put ''fShGKDE2Njc2KSl9LDY4OTc6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2''@;'; put 'put ''NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07YWUuZGVmaW5lTG9jYWxl''@;'; put 'put ''KCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0''@;'; put 'put ''OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUw''@;'; put 'put ''NjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFc''@;'; put 'put ''dTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2''@;'; put 'put ''MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2''@;'; put 'put ''MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIz''@;'; put 'put ''XHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2''@;'; put 'put ''MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6''@;'; put 'put ''bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDY0NSI9PT1NfSxtZXJp''@;'; put 'put ''ZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQi''@;'; put 'put ''LGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUw''@;'; put 'put ''NjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYy''@;'; put 'put ''M1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1''@;'; put 'put ''cm4gTS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBs''@;'; put 'put ''YWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sNzE1ODU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJhci10''@;'; put 'put ''biIse21vbnRoczoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2''@;'; put 'put ''MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1''@;'; put 'put ''MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYy''@;'; put 'put ''M1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1''@;'; put 'put ''MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUw''@;'; put 'put ''NjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUw''@;'; put 'put ''NjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2''@;'; put 'put ''NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRf''@;'; put 'put ''XHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUw''@;'; put 'put ''NjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6Iltc''@;'; put 'put ''dTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6''@;'; put 'put ''IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUw''@;'; put 'put ''NjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYy''@;'; put 'put ''N1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyMjA5''@;'; put 'put ''NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwNjYxIiwyOiJcdTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0s''@;'; put 'put ''bT17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1IiwiXHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxsZT1mdW5jdGlvbihLKXtyZXR1cm4gMD09PUs/MDox''@;'; put 'put ''PT09Sz8xOjI9PT1LPzI6SyUxMDA+PTMmJkslMTAwPD0xMD8zOkslMTAwPj0xMT80OjV9LE09e3M6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSBcdTA2NDhcdTA2''@;'; put 'put ''MjdcdTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0''@;'; put 'put ''Nlx1MDY0YVx1MDYyOSIsIiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSJdLG06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSBcdTA2NDhcdTA2Mjdc''@;'; put 'put ''dTA2MmRcdTA2MmZcdTA2MjkiLFsiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsIiVkIFx1MDYyZlx1MDY0Mlx1''@;'; put 'put ''MDY0YVx1MDY0Mlx1MDYyOSIsIiVkIFx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSJdLGg6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2''@;'; put 'put ''MmZcdTA2MjkiLFsiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsIiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsIiVkIFx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDYzOVx1MDYyOSJdLGQ6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDY0YVx1MDY0OFx1MDY0NSIsIlx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjRh''@;'; put 'put ''XHUwNjQ4XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDY0YVx1MDY0OFx1MDY0NSJdLE06WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzNFx1MDY0''@;'; put 'put ''N1x1MDYzMSIsIlx1MDYzNFx1MDY0N1x1MDYzMSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIsIiVkIFx1MDYzNFx1''@;'; put 'put ''MDY0N1x1MDYzMVx1MDYyNyIsIiVkIFx1MDYzNFx1MDY0N1x1MDYzMSJdLHk6WyJcdTA2MjNcdTA2NDJcdTA2NDQgXHUwNjQ1XHUwNjQ2IFx1MDYzOVx1MDYyN1x1MDY0NSIsIlx1MDYzOVx1MDYyN1x1MDY0NSBcdTA2NDhcdTA2MjdcdTA2MmRcdTA2MmYiLFsiXHUwNjM5XHUwNjI3XHUwNjQ1''@;'; put 'put ''XHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRhXHUwNjQ2Il0sIiVkIFx1MDYyM1x1MDYzOVx1MDY0OFx1MDYyN1x1MDY0NSIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0Ylx1MDYyNyIsIiVkIFx1MDYzOVx1MDYyN1x1MDY0NSJdfSxPPWZ1bmN0aW9uKEspe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbihJLGssRSxqKXt2YXIgVj1sZShJKSxCPU1bS11bbGUoSSldO3JldHVybiAyPT09ViYmKEI9QltrPzA6MV0pLEIucmVwbGFjZSgvJWQvaSxJKX19LFI9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2''@;'; put 'put ''MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNc''@;'; put 'put ''dTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2''@;'; put 'put ''NDVcdTA2MjhcdTA2MzEiXTthZS5kZWZpbmVMb2NhbGUoImFyIix7bW9udGhzOlIsbW9udGhzU2hvcnQ6Uix3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJc''@;'; put 'put ''dTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL1x1MjAwZk0vXHUyMDBmWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbihLKXtyZXR1cm4iXHUwNjQ1Ij09PUt9LG1lcmlkaWVtOmZ1bmN0aW9uKEssSSxrKXtyZXR1cm4gSzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUg''@;'; put 'put ''XHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2NGJcdTA2MjcgXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVr''@;'; put 'put ''OiJkZGRkIFtcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdl''@;'; put 'put ''ZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MjhcdTA2MzlcdTA2MmYgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczpPKCJz''@;'; put 'put ''Iiksc3M6TygicyIpLG06TygibSIpLG1tOk8oIm0iKSxoOk8oImgiKSxoaDpPKCJoIiksZDpPKCJkIiksZGQ6TygiZCIpLE06TygiTSIpLE1NOk8oIk0iKSx5Ok8oInkiKSx5eTpPKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKEspe3JldHVybiBLLnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2''@;'; put 'put ''NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oSSl7cmV0dXJuIG1bSV19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEspe3JldHVybiBLLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oSSl7cmV0dXJuIHhb''@;'; put 'put ''SV19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KEYoMTY2NzYpKX0sMTU2MTE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6''@;'; put 'put ''Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii1ceGZjbmNceGZjIiw0OiItXHhmY25jXHhmYyIsMTAwOiItXHhmY25jXHhmYyIsNjoiLW5jXHUwMTMxIiw5OiItdW5jdSIsMTA6Ii11bmN1IiwzMDoiLXVuY3UiLDYwOiItXHUwMTMxbmNcdTAxMzEiLDkw''@;'; put 'put ''OiItXHUwMTMxbmNcdTAxMzEifTthZS5kZWZpbmVMb2NhbGUoImF6Iix7bW9udGhzOiJ5YW52YXJfZmV2cmFsX21hcnRfYXByZWxfbWF5X2l5dW5faXl1bF9hdnF1c3Rfc2VudHlhYnJfb2t0eWFicl9ub3lhYnJfZGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ5YW5fZmV2X21hcl9h''@;'; put 'put ''cHJfbWF5X2l5bl9peWxfYXZxX3Nlbl9va3Rfbm95X2RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQmF6YXJfQmF6YXIgZXJ0XHUwMjU5c2lfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OSBheFx1MDE1ZmFtXHUwMTMxX1x4YzdcdTAyNTlyXHUwMTVmXHUwMjU5bmJcdTAyNTlfQ1x4''@;'; put 'put ''ZmNtXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfQ1x4ZmNtXHUwMjU5X1x1MDE1ZVx1MDI1OW5iXHUwMjU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkJhel9CekVfXHhjN0F4X1x4YzdcdTAyNTlyX0NBeF9DXHhmY21fXHUwMTVlXHUwMjU5biIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''QnpfQkVfXHhjN0FfXHhjN1x1MDI1OV9DQV9DXHhmY19cdTAxNWVcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbc2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ1x1MDI1OWxcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0g''@;'; put 'put ''TFQiLGxhc3REYXk6IltkXHhmY25cdTAyNTluXSBMVCIsbGFzdFdlZWs6IltrZVx4ZTdcdTAyNTluIGhcdTAyNTlmdFx1MDI1OV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBcdTAyNTl2dlx1MDI1OWwiLHM6''@;'; put 'put ''ImJpciBuZVx4ZTdcdTAyNTkgc2FuaXlcdTAyNTkiLHNzOiIlZCBzYW5peVx1MDI1OSIsbToiYmlyIGRcdTAyNTlxaXFcdTAyNTkiLG1tOiIlZCBkXHUwMjU5cWlxXHUwMjU5IixoOiJiaXIgc2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLE06ImJpciBh''@;'; put 'put ''eSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY1x1MDI1OXxzXHUwMjU5aFx1MDI1OXJ8Z1x4ZmNuZFx4ZmN6fGF4XHUwMTVmYW0vLGlzUE06ZnVuY3Rpb24obGUpe3JldHVybi9eKGdceGZjbmRceGZjenxheFx1MDE1ZmFtKSQvLnRlc3QobGUp''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZTw0PyJnZWNcdTAyNTkiOmxlPDEyPyJzXHUwMjU5aFx1MDI1OXIiOmxlPDE3PyJnXHhmY25kXHhmY3oiOiJheFx1MDE1ZmFtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwMTMxbmNcdTAxMzF8aW5jaXxu''@;'; put 'put ''Y2l8XHhmY25jXHhmY3xuY1x1MDEzMXx1bmN1KS8sb3JkaW5hbDpmdW5jdGlvbihsZSl7aWYoMD09PWxlKXJldHVybiBsZSsiLVx1MDEzMW5jXHUwMTMxIjt2YXIgTT1sZSUxMDtyZXR1cm4gbGUrKHhbTV18fHhbbGUlMTAwLU1dfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEs''@;'; put 'put ''ZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjI0NTk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShNLE8sUil7cmV0dXJuIm0iPT09Uj9PPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJc''@;'; put 'put ''dTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NDMiOiJoIj09PVI/Tz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzIjpNKyIgIitmdW5jdGlvbiB4KE0sTyl7dmFyIFI9TS5zcGxp''@;'; put 'put ''dCgiXyIpO3JldHVybiBPJTEwPT0xJiZPJTEwMCE9MTE/UlswXTpPJTEwPj0yJiZPJTEwPD00JiYoTyUxMDA8MTB8fE8lMTAwPj0yMCk/UlsxXTpSWzJdfSh7c3M6Tz8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0''@;'; put 'put ''M1x1MDQzZFx1MDQzNCIsbW06Tz8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0NTZc''@;'; put 'put ''dTA0M2JcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCIsaGg6Tz8iXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQz''@;'; put 'put ''MFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiOiJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1''@;'; put 'put ''MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDM3XHUwNDUxXHUwNDNkIixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1''@;'; put 'put ''MDQ0Zlx1MDQ0Nlx1MDQ0Yl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBcdTA0NWUiLHl5OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzZVx1MDQ1ZSJ9W1JdLCtNKX1hZS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''ImJlIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NGVcdTA0NDJcdTA0MzBcdTA0MzNcdTA0MzBfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhXHUwNDMwX1x1MDQzYVx1''@;'; put 'put ''MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRmX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Zl9c''@;'; put 'put ''dTA0MzZcdTA0M2RcdTA0NTZcdTA0NWVcdTA0M2RcdTA0NGZfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDNkXHUwNDRmX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2JcdTA0NTZcdTA0NDFc''@;'; put 'put ''dTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDNkXHUwNDRmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNFx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NGVcdTA0NDJc''@;'; put 'put ''dTA0NGJfXHUwNDQxXHUwNDMwXHUwNDNhXHUwNDMwXHUwNDMyXHUwNDU2XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMy''@;'; put 'put ''XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQ1Nlx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYVx1MDQzMFx1MDQ0''@;'; put 'put ''MVx1MDQ0Mlx1MDQ0MFx1MDQ0Ylx1MDQ0N1x1MDQzZFx1MDQ1Nlx1MDQzYV9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJcdTA0MzBcdTA0M2ZcdTA0MzBcdTA0MzRfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2XHUwNDMwXHUwNDNkXHUwNDRjIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUw''@;'; put 'put ''NDQxXHUwNDQyXHUwNDQzXHUwNDM0X1x1MDQzYlx1MDQ0ZVx1MDQ0Ml9cdTA0NDFcdTA0MzBcdTA0M2FfXHUwNDNhXHUwNDQwXHUwNDMwXHUwNDQxX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMl9cdTA0NDdcdTA0NGRcdTA0NDBcdTA0MzJfXHUwNDNiXHUwNDU2XHUwNDNmX1x1MDQzNlx1MDQz''@;'; put 'put ''ZFx1MDQ1Nlx1MDQzMl9cdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNhXHUwNDMwXHUwNDQxXHUwNDQyX1x1MDQzYlx1MDQ1Nlx1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0M2RcdTA0MzVcdTA0MzYiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoiXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUw''@;'; put 'put ''NDM1XHUwNDNiXHUwNDRlX1x1MDQzZlx1MDQzMFx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQzMFx1MDQzYV9cdTA0MzBcdTA0NWVcdTA0NDJcdTA0M2VcdTA0NDBcdTA0MzBcdTA0M2FfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDMwXHUwNDM0XHUwNDQzX1x1MDQ0N1x1''@;'; put 'put ''MDQzMFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0M2ZcdTA0NGZcdTA0NDJcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NDNfXHUwNDQxXHUwNDQzXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDQzIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1''@;'; put 'put ''MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzBc''@;'; put 'put ''dTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MjNcdTA0NDNcdTA0NWVdID8oPzpcdTA0M2NcdTA0''@;'; put 'put ''NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDNkXHUwNDMwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDNmXHUwNDNkXHUwNDQzXHUwNDRlKT8gP1xdID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUw''@;'; put 'put ''NDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMFx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQ2X1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0''@;'; put 'put ''KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTA0MjFcdTA0NTFcdTA0M2RcdTA0M2RcdTA0NGYgXHUwNDVlXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixsYXN0RGF5OiJbXHUwNDIzXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIFx1MDQ1''@;'; put 'put ''ZV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA0MjNdIGRkZGQgW1x1MDQ1ZV0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUw''@;'; put 'put ''NDQzXHUwNDNiXHUwNDQzXHUwNDRlXSBkZGRkIFtcdTA0NWVdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQyMyBcdTA0M2NcdTA0NTZcdTA0M2RcdTA0NDNcdTA0M2JcdTA0NGJdIGRkZGQgW1x1MDQ1ZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiXHUwNDNmXHUwNDQwXHUwNDMwXHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0NDJcdTA0MzBcdTA0M2NcdTA0NDMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQ1NiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG0sbW06''@;'; put 'put ''bSxoOm0saGg6bSxkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOm0sTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTptLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6bX0sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRifFx1MDQ0''@;'; put 'put ''MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YnxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBc''@;'; put 'put ''dTA0MzApJC8udGVzdChNKX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YiI6TTwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRiIjpNPDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVc''@;'; put 'put ''dTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NTZ8XHUwNDRifFx1MDQzM1x1MDQzMCkvLG9yZGluYWw6ZnVuY3Rpb24oTSxPKXtzd2l0Y2goTyl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0''@;'; put 'put ''dXJuIE0lMTAhPTImJk0lMTAhPTN8fE0lMTAwPT0xMnx8TSUxMDA9PTEzP00rIi1cdTA0NGIiOk0rIi1cdTA0NTYiO2Nhc2UiRCI6cmV0dXJuIE0rIi1cdTA0MzNcdTA0MzAiO2RlZmF1bHQ6cmV0dXJuIE19fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw5MTgyNTpmdW5jdGlv''@;'; put 'put ''bihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImJnIix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQz''@;'; put 'put ''MFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1''@;'; put 'put ''MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1''@;'; put 'put ''MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDQzX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1''@;'; put 'put ''MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2Vc''@;'; put 'put ''dTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQ0Zlx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NGFcdTA0NDBcdTA0NDJc''@;'; put 'put ''dTA0NGFcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQ0MVx1MDQ0YVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9c''@;'; put 'put ''dTA0NDFcdTA0NDBcdTA0NGZfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0NGFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJf''@;'; put 'put ''XHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNh''@;'; put 'put ''bGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMl0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBc''@;'; put 'put ''dTA0MzAgXHUwNDMyXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MWNcdTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNl''@;'; put 'put ''IDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzOFx1MDQ0Zl0gZGRkZCBbXHUwNDMyXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzQgJXMiLHBhc3Q6Ilx1MDQz''@;'; put 'put ''Zlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCAlcyIsczoiXHUwNDNkXHUwNDRmXHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1''@;'; put 'put ''MDQzOCIsbToiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNFx1MDQzNVx1''@;'; put 'put ''MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsdzoiXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDMwIix3dzoiJWQgXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDM4IixNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIseXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMCxNPW0lMTAwO3JldHVybiAwPT09bT9tKyItXHUwNDM1XHUwNDMyIjowPT09TT9t''@;'; put 'put ''KyItXHUwNDM1XHUwNDNkIjpNPjEwJiZNPDIwP20rIi1cdTA0NDJcdTA0MzgiOjE9PT1sZT9tKyItXHUwNDMyXHUwNDM4IjoyPT09bGU/bSsiLVx1MDQ0MFx1MDQzOCI6Nz09PWxlfHw4PT09bGU/bSsiLVx1MDQzY1x1MDQzOCI6bSsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3''@;'; put 'put ''fX0pfShGKDE2Njc2KSl9LDc1OTE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1''@;'; put 'put ''Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0YnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVi''@;'; put 'put ''dF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1Ym5fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZ''@;'; put 'put ''IFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1YnJcdTAyNWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIl''@;'; put 'put ''cyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEgZGFtYSIsc3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoi''@;'; put 'put ''dGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0OTY4MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgeD17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDll''@;'; put 'put ''YSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5''@;'; put 'put ''YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9c''@;'; put 'put ''dTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBf''@;'; put 'put ''XHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDliOFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDlj''@;'; put 'put ''ZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1''@;'; put 'put ''MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1''@;'; put 'put ''MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2Rc''@;'; put 'put ''dTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5''@;'; put 'put ''YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThc''@;'; put 'put ''dTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUw''@;'; put 'put ''OWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''LCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5''@;'; put 'put ''NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlhNFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFh''@;'; put 'put ''XHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEi''@;'; put 'put ''LG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5''@;'; put 'put ''OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZcdTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJc''@;'; put 'put ''dTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSl9''@;'; put 'put ''LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihPKXtyZXR1cm4geFtPXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNiXHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFc''@;'; put 'put ''dTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihNLE8pe3JldHVybiAxMj09PU0mJihNPTApLCJcdTA5''@;'; put 'put ''YjBcdTA5YmVcdTA5YTQiPT09Tz9NPDQ/TTpNKzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09T3x8Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI9PT1PP006Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1PP00+PTM/TTpNKzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVc''@;'; put 'put ''dTA5YjIiPT09T3x8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1PP00rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08ND8iXHUwOWIwXHUwOWJlXHUwOWE0IjpNPDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6TTwxMj8iXHUw''@;'; put 'put ''OWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpNPDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOk08MTg/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6TTwyMD8iXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUw''@;'; put 'put ''OWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMzQwNjU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6''@;'; put 'put ''Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LG09eyJcdTA5ZTciOiIxIiwiXHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJc''@;'; put 'put ''dTA5ZTYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVc''@;'; put 'put ''dTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5''@;'; put 'put ''YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5''@;'; put 'put ''Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1''@;'; put 'put ''MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5''@;'; put 'put ''YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDli''@;'; put 'put ''Mlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDli''@;'; put 'put ''ZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlh''@;'; put 'put ''Y1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1''@;'; put 'put ''MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUw''@;'; put 'put ''OWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5''@;'; put 'put ''ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5''@;'; put 'put ''YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4''@;'; put 'put ''XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUw''@;'; put 'put ''OWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJc''@;'; put 'put ''dTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1''@;'; put 'put ''MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7''@;'; put 'put ''cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1PJiZNPj00fHwiXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PU8mJk08NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1PP00rMTI6TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIp''@;'; put 'put ''e3JldHVybiBNPDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6TTwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjpNPDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOk08MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdl''@;'; put 'put ''ZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDExMDM0OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjci''@;'; put 'put ''LDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJcdTBmMjAifSxtPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoi''@;'; put 'put ''MCJ9O2FlLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUw''@;'; put 'put ''ZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBm''@;'; put 'put ''OTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUwZjc0XHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBm''@;'; put 'put ''MGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBmYjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3''@;'; put 'put ''NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQy''@;'; put 'put ''XHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBmNWZcdTBmYjNcdTBmMGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUwZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUw''@;'; put 'put ''ZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUwZmIzXHUwZjBiOV9cdTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIxMV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9e''@;'; put 'put ''KFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUw''@;'; put 'put ''ZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUw''@;'; put 'put ''ZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0''@;'; put 'put ''XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUw''@;'; put 'put ''ZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNcdTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0XHUwZjYyX1x1MGY2Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNz''@;'; put 'put ''IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToi''@;'; put 'put ''W1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBm''@;'; put 'put ''NDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYzIixzOiJcdTBmNjNcdTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1''@;'; put 'put ''MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2''@;'; put 'put ''XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1''@;'; put 'put ''MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1NiIseToiXHUwZjYzXHUwZjdjXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdjIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGYyMVx1MGYy''@;'; put 'put ''Mlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYyOFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJz''@;'; put 'put ''ZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUw''@;'; put 'put ''ZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI9PT1PJiZNPj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBi''@;'; put 'put ''XHUwZjQyXHUwZjc0XHUwZjQ0Ij09PU8mJk08NXx8Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI9PT1PP00rMTI6TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6TTwx''@;'; put 'put ''MD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2IjpNPDE3PyJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOk08MjA/Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1''@;'; put 'put ''M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI3NjcxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoQixZLFgpe3JldHVybiBCKyIgIitmdW5jdGlvbiBNKEIsWSl7cmV0dXJuIDI9PT1Z''@;'; put 'put ''P2Z1bmN0aW9uIE8oQil7dmFyIFk9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09WVtCLmNoYXJBdCgwKV0/QjpZW0IuY2hhckF0KDApXStCLnN1YnN0cmluZygxKX0oQik6Qn0oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRldmV6aCJ9W1hdLEIpfWZ1bmN0aW9uIGxl''@;'; put 'put ''KEIpe3JldHVybiBCPjk/bGUoQiUxMCk6Qn12YXIgUj1bL15nZW4vaSwvXmNbXHUwMmJjXCddaHdlL2ksL15tZXUvaSwvXmVici9pLC9ebWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9pLC9eZHUvaSwvXmtlci9pXSx6PS9eKGdlbnZlcnxjW1x1MDJi''@;'; put 'put ''Y1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1fGdlbnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxqPVsvXlN1L2ksL15MdS9pLC9eTWUoW15yXXwkKS9p''@;'; put 'put ''LC9eTWVyL2ksL15ZYS9pLC9eR3cvaSwvXlNhL2ldO2FlLmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3VfR3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01l''@;'; put 'put ''dV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlOmosZnVsbFdlZWtkYXlzUGFyc2U6Wy9ec3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlh''@;'; put 'put ''b3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2RheXNQYXJzZTpqLG1vbnRoc1JlZ2V4OnosbW9udGhzU2hvcnRSZWdleDp6LG1vbnRoc1N0''@;'; put 'put ''cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxn''@;'; put 'put ''b3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOlIsbG9uZ01vbnRoc1BhcnNlOlIsc2hvcnRNb250aHNQYXJzZTpSLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQg''@;'; put 'put ''W2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNcdTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6''@;'; put 'put ''IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1''@;'; put 'put ''ciB2dW51dGVubiIsbW06eCxoOiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6eCxNOiJ1ciBtaXoiLE1NOngseToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIG0oQil7c3dpdGNoKGxlKEIpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBCKyIg''@;'; put 'put ''YmxvYXoiO2RlZmF1bHQ6cmV0dXJuIEIrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShhXHhmMXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe3JldHVybiBCKygxPT09Qj8iYVx4ZjEiOiJ2ZXQiKX0sd2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6''@;'; put 'put ''L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iZy5tLiI9PT1CfSxtZXJpZGllbTpmdW5jdGlvbihCLFksWCl7cmV0dXJuIEI8MTI/ImEubS4iOiJnLm0uIn19KX0oRigxNjY3NikpfSwzODE1MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijtm''@;'; put 'put ''dW5jdGlvbiB4KGxlLE0sTyl7dmFyIFI9bGUrIiAiO3N3aXRjaChPKXtjYXNlInNzIjpyZXR1cm4gUisoMT09PWxlPyJzZWt1bmRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIE0/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0''@;'; put 'put ''ZSI7Y2FzZSJtbSI6cmV0dXJuIFIrKDE9PT1sZT8ibWludXRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiBNPyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIFIrKDE9PT1sZT8ic2F0IjoyPT09bGV8fDM9''@;'; put 'put ''PT1sZXx8ND09PWxlPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBSKygxPT09bGU/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gUisoMT09PWxlPyJtamVzZWMiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIFIr''@;'; put 'put ''KDE9PT1sZT8iZ29kaW5hIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJnb2RpbmUiOiJnb2RpbmEiKX19YWUuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9k''@;'; put 'put ''ZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3Ny''@;'; put 'put ''aWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh''@;'; put 'put ''eToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJu''@;'; put 'put ''Ilt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJb''@;'; put 'put ''cHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJuIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOiJkYW4iLGRkOngsTToibWplc2VjIixNTTp4LHk6ImdvZGludSIseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDU0Mjg3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY2EiLHttb250aHM6e3N0YW5kYWxvbmU6ImdlbmVyX2ZlYnJlcl9tYXJceGU3X2FicmlsX21haWdfanVueV9qdWxp''@;'; put 'put ''b2xfYWdvc3Rfc2V0ZW1icmVfb2N0dWJyZV9ub3ZlbWJyZV9kZXNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmVyX2RlIGZlYnJlcl9kZSBtYXJceGU3X2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3Zl''@;'; put 'put ''bWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyXHhlN19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''d2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpf''@;'; put 'put ''ZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtkZV0gWVlZWSIsbGw6IkQgTU1NIFlZWVkiLExMTDoiRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6''@;'; put 'put ''bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbYXZ1aSBhICIrKDEhPT10aGlzLmhvdXJzKCk/Imxl''@;'; put 'put ''cyI6ImxhIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltkZW1ceGUwIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBM''@;'; put 'put ''VCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2FoaXIgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNzYXQgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0s''@;'; put 'put ''c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXVceGVkICVzIixwYXN0OiJmYSAlcyIsczoidW5zIHNlZ29ucyIsc3M6IiVkIHNlZ29ucyIsbToidW4gbWludXQiLG1tOiIlZCBtaW51dHMiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yZXMiLGQ6InVuIGRpYSIsZGQ6IiVk''@;'; put 'put ''IGRpZXMiLE06InVuIG1lcyIsTU06IiVkIG1lc29zIix5OiJ1biBhbnkiLHl5OiIlZCBhbnlzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHxceGU4fGEpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3ZhciBNPTE9PT1tPyJyIjoyPT09bT8ibiI6Mz09PW0/InIiOjQ9''@;'; put 'put ''PT1tPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PWxlfHwiVyI9PT1sZSkmJihNPSJhIiksbStNfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw3MjYxNjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17Zm9ybWF0OiJsZWRlbl9ceGZh''@;'; put 'put ''bm9yX2JcdTAxNTllemVuX2R1YmVuX2t2XHUwMTFidGVuX1x1MDEwZGVydmVuX1x1MDEwZGVydmVuZWNfc3JwZW5felx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToibGVkbmFfXHhmYW5vcmFfYlx1MDE1OWV6bmFf''@;'; put 'put ''ZHVibmFfa3ZcdTAxMWJ0bmFfXHUwMTBkZXJ2bmFfXHUwMTBkZXJ2ZW5jZV9zcnBuYV96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGpuYV9saXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIil9LG09ImxlZF9ceGZhbm9fYlx1MDE1OWVfZHViX2t2XHUwMTFiX1x1MDEwZHZuX1x1MDEwZHZj''@;'; put 'put ''X3NycF96XHhlMVx1MDE1OV9cdTAxNTlceGVkal9saXNfcHJvIi5zcGxpdCgiXyIpLGxlPVsvXmxlZC9pLC9eXHhmYW5vL2ksL15iXHUwMTU5ZS9pLC9eZHViL2ksL15rdlx1MDExYi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwvXihcdTAxMGR2Y3xcdTAxMGRl''@;'; put 'put ''cnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ksL15wcm8vaV0sTT0vXihsZWRlbnxceGZhbm9yfGJcdTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRl''@;'; put 'put ''cnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaTtmdW5j''@;'; put 'put ''dGlvbiBPKEspe3JldHVybiBLPjEmJks8NSYmMSE9fn4oSy8xMCl9ZnVuY3Rpb24gUihLLEksayxFKXt2YXIgaj1LKyIgIjtzd2l0Y2goayl7Y2FzZSJzIjpyZXR1cm4gSXx8RT8icFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBJfHxFP2orKE8oSyk/''@;'; put 'put ''InNla3VuZHkiOiJzZWt1bmQiKTpqKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIEk/Im1pbnV0YSI6RT8ibWludXR1IjoibWludXRvdSI7Y2FzZSJtbSI6cmV0dXJuIEl8fEU/aisoTyhLKT8ibWludXR5IjoibWludXQiKTpqKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gST8iaG9kaW5h''@;'; put 'put ''IjpFPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJob2RpbnkiOiJob2RpbiIpOmorImhvZGluYW1pIjtjYXNlImQiOnJldHVybiBJfHxFPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gSXx8RT9qKyhPKEspPyJkbnkiOiJkblx4ZWQiKTpqKyJk''@;'; put 'put ''bnkiO2Nhc2UiTSI6cmV0dXJuIEl8fEU/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVybiBJfHxFP2orKE8oSyk/Im1cdTAxMWJzXHhlZGNlIjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOmorIm1cdTAxMWJzXHhlZGNpIjtjYXNlInkiOnJldHVybiBJfHxF''@;'; put 'put ''PyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIEl8fEU/aisoTyhLKT8icm9reSI6ImxldCIpOmorImxldHkifX1hZS5kZWZpbmVMb2NhbGUoImNzIix7bW9udGhzOngsbW9udGhzU2hvcnQ6bSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDov''@;'; put 'put ''XihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5hfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1''@;'; put 'put ''OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1''@;'; put 'put ''OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJuZWRcdTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUxdGVrX3Nv''@;'; put 'put ''Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJI''@;'; put 'put ''Om1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0cmEgdl0g''@;'; put 'put ''TFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1''@;'; put 'put ''cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2Ug''@;'; put 'put ''MDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFt2''@;'; put 'put ''XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InBcdTAxNTllZCAlcyIsczpSLHNzOlIsbTpSLG1tOlIsaDpSLGhoOlIsZDpSLGRkOlIsTTpSLE1NOlIseTpSLHl5OlJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyNzA0OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0''@;'; put 'put ''M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNc''@;'; put 'put ''dTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9y''@;'; put 'put ''dDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0''@;'; put 'put ''MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzMlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0''@;'; put 'put ''NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0''@;'; put 'put ''M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQzMFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBf''@;'; put 'put ''XHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRi''@;'; put 'put ''XHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUw''@;'; put 'put ''NDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2Rd''@;'; put 'put ''IERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0gW1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVc''@;'; put 'put ''dTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0''@;'; put 'put ''dXJlOmZ1bmN0aW9uKG0pe3JldHVybiBtKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMobSk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKG0pPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0s''@;'; put 'put ''cGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVk''@;'; put 'put ''IFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1''@;'; put 'put ''MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdc''@;'; put 'put ''dTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDk5MTcyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dv''@;'; put 'put ''cmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQg''@;'; put 'put ''TWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExUIixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJt''@;'; put 'put ''ZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5''@;'; put 'put ''biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgTT0iIjtyZXR1cm4gbT4yMD9NPTQwPT09bXx8NTA9PT1tfHw2MD09PW18fDgwPT09bXx8MTAwPT09bT8iZmVk''@;'; put 'put ''IjoiYWluIjptPjAmJihNPVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW21dKSxtK019LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2''@;'; put 'put ''Njc2KSl9LDIwNjA1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rl''@;'; put 'put ''Y2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9vbl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE''@;'; put 'put ''RC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6''@;'; put 'put ''IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9u''@;'; put 'put ''dGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5MzM5NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17bTpbImVpbmUgTWlu''@;'; put 'put ''dXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbbGUrIiBUYWdlIixsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25h''@;'; put 'put ''dCJdLE1NOltsZSsiIE1vbmF0ZSIsbGUrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltsZSsiIEphaHJlIixsZSsiIEphaHJlbiJdfTtyZXR1cm4gTT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0Zl''@;'; put 'put ''YnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6''@;'; put 'put ''LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZ''@;'; put 'put ''WSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToi''@;'; put 'put ''W2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4i''@;'; put 'put ''LGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTk4MzU6ZnVuY3Rpb24o''@;'; put 'put ''YXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2xlKyIg''@;'; put 'put ''VGFnZSIsbGUrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbbGUrIiBNb25hdGUiLGxlKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbbGUrIiBKYWhyZSIsbGUrIiBKYWhy''@;'; put 'put ''ZW4iXX07cmV0dXJuIE0/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9u''@;'; put 'put ''dGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFn''@;'; put 'put ''X1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixM''@;'; put 'put ''VFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5''@;'; put 'put ''OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9y''@;'; put 'put ''ICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOngsbW06IiVkIE1pbnV0ZW4iLGg6eCxoaDoiJWQgU3R1bmRlbiIsZDp4LGRkOngsdzp4LHd3OiIlZCBXb2NoZW4iLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4v''@;'; put 'put ''LG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTQwMTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChsZSxNLE8sUil7dmFyIHo9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJl''@;'; put 'put ''aW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W2xlKyIgVGFnZSIsbGUrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbbGUrIiBNb25hdGUiLGxlKyIg''@;'; put 'put ''TW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbbGUrIiBKYWhyZSIsbGUrIiBKYWhyZW4iXX07cmV0dXJuIE0/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVs''@;'; put 'put ''aV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3''@;'; put 'put ''ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19G''@;'; put 'put ''cl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6Ilts''@;'; put 'put ''ZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp4LG1tOiIlZCBNaW51dGVuIixoOngsaGg6IiVkIFN0dW5kZW4iLGQ6eCxkZDp4LHc6eCx3''@;'; put 'put ''dzoiJWQgV29jaGVuIixNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE0NTcwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciB4PVsiXHUwNzk2XHUwN2FjXHUwNzgyXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzhhXHUwN2FjXHUwNzg0XHUwN2IwXHUwNzgzXHUwN2FhXHUwNzg3XHUwN2E2XHUwNzgzXHUwN2E5IiwiXHUwNzg5XHUwN2E3XHUwNzgzXHUwN2E4XHUwNzk3XHUwN2FhIiwiXHUw''@;'; put 'put ''Nzg3XHUwN2FkXHUwNzk1XHUwN2IwXHUwNzgzXHUwN2E5XHUwNzhkXHUwN2FhIiwiXHUwNzg5XHUwN2FkIiwiXHUwNzk2XHUwN2FiXHUwNzgyXHUwN2IwIiwiXHUwNzk2XHUwN2FhXHUwNzhkXHUwN2E2XHUwNzg3XHUwN2E4IiwiXHUwNzg3XHUwN2FmXHUwNzhlXHUwN2E2XHUwNzkwXHUwN2Iw''@;'; put 'put ''XHUwNzkzXHUwN2FhIiwiXHUwNzkwXHUwN2FjXHUwNzk1XHUwN2IwXHUwNzkzXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzg3XHUwN2FlXHUwNzg2XHUwN2IwXHUwNzkzXHUwN2FmXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzgyXHUwN2Fl''@;'; put 'put ''XHUwNzg4XHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIiwiXHUwNzkxXHUwN2E4XHUwNzkwXHUwN2FjXHUwNzg5XHUwN2IwXHUwNzg0XHUwN2E2XHUwNzgzXHUwN2FhIl0sbT1bIlx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOFx1MDc4N1x1MDdiMFx1MDc4Y1x1MDdh''@;'; put 'put ''NiIsIlx1MDc4MFx1MDdhZlx1MDc4OVx1MDdhNiIsIlx1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMFx1MDc4ZVx1MDdhN1x1MDc4M1x1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4Ylx1MDdhNiIsIlx1MDc4NFx1MDdhYVx1MDc4M1x1MDdhN1x1MDc5MFx1MDdiMFx1MDc4YVx1MDdhNlx1MDc4Y1x1''@;'; put 'put ''MDdhOCIsIlx1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYVx1MDc4M1x1MDdhYSIsIlx1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOFx1MDc4MFx1MDdhOFx1MDc4M1x1MDdhYSJdO2FlLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6eCxtb250aHNTaG9ydDp4LHdlZWtkYXlzOm0sd2Vla2RheXNTaG9y''@;'; put 'put ''dDptLHdlZWtkYXlzTWluOiJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThfXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2X1x1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMF9cdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTZfXHUwNzg0XHUwN2FhXHUwNzgzXHUwN2E3X1x1MDc4MFx1MDdhYVx1MDc4Nlx1MDdh''@;'; put 'put ''YV9cdTA3ODBcdTA3YWVcdTA3ODJcdTA3YTgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9''@;'; put 'put ''LG1lcmlkaWVtUGFyc2U6L1x1MDc4OVx1MDc4NnxcdTA3ODlcdTA3OGEvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDc4OVx1MDc4YSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDc4OVx1MDc4NiI6Ilx1MDc4OVx1MDc4YSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbXHUwNzg5XHUwN2E4XHUwNzg3XHUwN2E2XHUwNzhiXHUwN2FhXSBMVCIsbmV4dERheToiW1x1MDc4OVx1MDdhN1x1MDc4Ylx1MDdhNlx1MDc4OVx1MDdhN10gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbXHUwNzg3XHUwN2E4XHUwNzg3XHUwN2IwXHUwNzk0XHUw''@;'; put 'put ''N2FjXSBMVCIsbGFzdFdlZWs6IltcdTA3OGFcdTA3YTdcdTA3ODdcdTA3YThcdTA3OGNcdTA3YWFcdTA3ODhcdTA3YThdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDc4Y1x1MDdhY1x1MDc4M1x1MDdhZFx1MDc4ZVx1MDdhNlx1MDc4N1x1MDdhOCAl''@;'; put 'put ''cyIscGFzdDoiXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2E4XHUwNzgyXHUwN2IwICVzIixzOiJcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWFcdTA3ODZcdTA3YWVcdTA3ODVcdTA3YWNcdTA3ODdcdTA3YjAiLHNzOiJkJSBcdTA3OTBcdTA3YThcdTA3ODZc''@;'; put 'put ''dTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWEiLG06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhY1x1MDc4N1x1MDdiMCIsbW06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhYSAlZCIsaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUw''@;'; put 'put ''N2E4XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIixoaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FhICVkIixkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAiLGRkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3''@;'; put 'put ''YTZcdTA3OTBcdTA3YjAgJWQiLE06Ilx1MDc4OVx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsTU06Ilx1MDc4OVx1MDdhNlx1MDc5MFx1MDdiMCAlZCIseToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIix5eToiXHUwNzg3XHUwN2E2XHUw''@;'; put 'put ''NzgwXHUwN2E2XHUwNzgzXHUwN2FhICVkIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6Nyxkb3k6MTJ9fSl9KEYoMTY2''@;'; put 'put ''NzYpKX0sMzE4NTk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbCIse21vbnRoc05vbWluYXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDNh''@;'; put 'put ''Nlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2FmXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNh''@;'; put 'put ''Y1x1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjZFx1MDNiM1x1MDNiZlx1MDNjNVx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjMl9cdTAz''@;'; put 'put ''YTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2NlXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5ZFx1MDNiZlx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNi''@;'; put 'put ''Zlx1MDNjMl9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzIiLnNwbGl0KCJfIiksbW9udGhzR2VuaXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDNh''@;'; put 'put ''Nlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAzYjFcdTAzYzFcdTAzYzRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNi''@;'; put 'put ''MVx1MDM5MFx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjNVx1MDNiM1x1MDNiZlx1MDNjZFx1MDNjM1x1MDNjNFx1MDNiZlx1MDNjNV9cdTAz''@;'; put 'put ''YTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2M5XHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5ZFx1MDNiZlx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNi''@;'; put 'put ''Zlx1MDNjNV9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzUiLnNwbGl0KCJfIiksbW9udGhzOmZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZT8ic3RyaW5nIj09dHlwZW9mIE0mJi9ELy50ZXN0KE0uc3Vic3RyaW5nKDAsTS5pbmRleE9m''@;'; put 'put ''KCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW2xlLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbFtsZS5tb250aCgpXTp0aGlzLl9tb250aHNOb21pbmF0aXZlRWx9LG1vbnRoc1Nob3J0OiJcdTAzOTlcdTAzYjFcdTAzYmRfXHUwM2E2XHUwM2I1XHUwM2IyX1x1MDM5''@;'; put 'put ''Y1x1MDNiMVx1MDNjMV9cdTAzOTFcdTAzYzBcdTAzYzFfXHUwMzljXHUwM2IxXHUwM2NhX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZF9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJfXHUwMzkxXHUwM2M1XHUwM2IzX1x1MDNhM1x1MDNiNVx1MDNjMF9cdTAzOWZcdTAzYmFcdTAzYzRfXHUwMzlk''@;'; put 'put ''XHUwM2JmXHUwM2I1X1x1MDM5NFx1MDNiNVx1MDNiYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwMzlhXHUwM2M1XHUwM2MxXHUwM2I5XHUwM2IxXHUwM2JhXHUwM2FlX1x1MDM5NFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNhZFx1MDNjMVx1MDNiMV9cdTAzYTRcdTAzYzFcdTAzYWZcdTAzYzRc''@;'; put 'put ''dTAzYjdfXHUwM2E0XHUwM2I1XHUwM2M0XHUwM2FjXHUwM2MxXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNhZFx1MDNiY1x1MDNjMFx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYjFcdTAzYzFcdTAzYjFcdTAzYzNcdTAzYmFcdTAzYjVcdTAzYzVcdTAzYWVfXHUwM2EzXHUwM2FjXHUwM2IyXHUwM2Iy''@;'; put 'put ''XHUwM2IxXHUwM2M0XHUwM2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDM5YVx1MDNjNVx1MDNjMV9cdTAzOTRcdTAzYjVcdTAzYzVfXHUwM2E0XHUwM2MxXHUwM2I5X1x1MDNhNFx1MDNiNVx1MDNjNF9cdTAzYTBcdTAzYjVcdTAzYmNfXHUwM2EwXHUwM2IxXHUwM2MxX1x1MDNh''@;'; put 'put ''M1x1MDNiMVx1MDNiMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMzlhXHUwM2M1X1x1MDM5NFx1MDNiNV9cdTAzYTRcdTAzYzFfXHUwM2E0XHUwM2I1X1x1MDNhMFx1MDNiNV9cdTAzYTBcdTAzYjFfXHUwM2EzXHUwM2IxIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0s''@;'; put 'put ''Tyl7cmV0dXJuIGxlPjExP08/Ilx1MDNiY1x1MDNiYyI6Ilx1MDM5Y1x1MDM5YyI6Tz8iXHUwM2MwXHUwM2JjIjoiXHUwM2EwXHUwMzljIn0saXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuIlx1MDNiYyI9PT0obGUrIiIpLnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBc''@;'; put 'put ''dTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJF''@;'; put 'put ''bDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2My''@;'; put 'put ''IHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUwM2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUw''@;'; put 'put ''M2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihsZSxNKXt2YXIgTz10aGlzLl9jYWxlbmRhckVsW2xlXSxSPU0mJk0uaG91cnMo''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24geChsZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJmxlIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobGUpfShPKSYmKE89Ty5hcHBseShNKSksTy5yZXBsYWNlKCJ7''@;'; put 'put ''fSIsUiUxMj09MT8iXHUwM2MzXHUwM2M0XHUwM2I3IjoiXHUwM2MzXHUwM2M0XHUwM2I5XHUwM2MyIil9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAzYzNcdTAzYjUgJXMiLHBhc3Q6IiVzIFx1MDNjMFx1MDNjMVx1MDNiOVx1MDNiZCIsczoiXHUwM2JiXHUwM2FmXHUwM2IzXHUwM2IxIFx1''@;'; put 'put ''MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsc3M6IiVkIFx1MDNiNFx1MDNiNVx1MDNjNVx1MDNjNFx1MDNiNVx1MDNjMVx1MDNjY1x1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNiMSIsbToiXHUwM2FkXHUw''@;'; put 'put ''M2JkXHUwM2IxIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNjYyIsbW06IiVkIFx1MDNiYlx1MDNiNVx1MDNjMFx1MDNjNFx1MDNhYyIsaDoiXHUwM2JjXHUwM2FmXHUwM2IxIFx1MDNjZVx1MDNjMVx1MDNiMSIsaGg6IiVkIFx1MDNjZVx1MDNjMVx1MDNiNVx1MDNjMiIsZDoiXHUwM2Jj''@;'; put 'put ''XHUwM2FmXHUwM2IxIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiMSIsZGQ6IiVkIFx1MDNiY1x1MDNhZFx1MDNjMVx1MDNiNVx1MDNjMiIsTToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNiY1x1MDNhZVx1MDNiZFx1MDNiMVx1MDNjMiIsTU06IiVkIFx1MDNiY1x1MDNhZVx1MDNiZFx1''@;'; put 'put ''MDNiNVx1MDNjMiIseToiXHUwM2FkXHUwM2JkXHUwM2IxXHUwM2MyIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiZlx1MDNjMiIseXk6IiVkIFx1MDNjN1x1MDNjMVx1MDNjY1x1MDNiZFx1MDNiOVx1MDNiMSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cdTAzYjcvLG9y''@;'; put 'put ''ZGluYWw6IiVkXHUwM2I3Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw1NTc4NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWF1Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01h''@;'; put 'put ''eV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9U''@;'; put 'put ''dWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5''@;'; put 'put ''OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEg''@;'; put 'put ''ZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9m''@;'; put 'put ''TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9''@;'; put 'put ''fSl9KEYoMTY2NzYpKX0sODM3OTI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jl''@;'; put 'put ''cl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1Nh''@;'; put 'put ''dHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixM''@;'; put 'put ''OiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRk''@;'; put 'put ''ZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToi''@;'; put 'put ''YSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5k''@;'; put 'put ''fHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9fSl9KEYoMTY2NzYpKX0sNTc2NTE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFl''@;'; put 'put ''KXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zl''@;'; put 'put ''Yl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9U''@;'; put 'put ''aHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBk''@;'; put 'put ''ZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBk''@;'; put 'put ''YXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBsZT1tJTEwO3JldHVybiBtKygxPT1+fiht''@;'; put 'put ''JTEwMC8xMCk/InRoIjoxPT09bGU/InN0IjoyPT09bGU/Im5kIjozPT09bGU/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sODE5Mjk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1pZSIs''@;'; put 'put ''e21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9E''@;'; put 'put ''ZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3Vf''@;'; put 'put ''TW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250''@;'; put 'put ''aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9''@;'; put 'put ''PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxOTgxODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01h''@;'; put 'put ''eV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9U''@;'; put 'put ''dWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltU''@;'; put 'put ''b21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcg''@;'; put 'put ''c2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfX0pfShGKDE2Njc2KSl9LDY2MTI6ZnVu''@;'; put 'put ''Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJlbi1pbiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N''@;'; put 'put ''IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3Rl''@;'; put 'put ''cmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixo''@;'; put 'put ''OiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbiht''@;'; put 'put ''KXt2YXIgbGU9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PWxlPyJzdCI6Mj09PWxlPyJuZCI6Mz09PWxlPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI0OTAwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZW4tbnoiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fw''@;'; put 'put ''cl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9T''@;'; put 'put ''YXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQg''@;'; put 'put ''W2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIs''@;'; put 'put ''ZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAw''@;'; put 'put ''LzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw3MjcyMTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVuLXNnIix7bW9u''@;'; put 'put ''dGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19U''@;'; put 'put ''dV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1''@;'; put 'put ''dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMi''@;'; put 'put ''LHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1s''@;'; put 'put ''ZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5NTE1OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19tYWpvX2p1''@;'; put 'put ''bmlvX2p1bGlvX2FcdTAxNmRndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkaW1h''@;'; put 'put ''blx1MDEwOW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21l''@;'; put 'put ''X1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoiZGRkZFtu''@;'; put 'put ''XSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4icCI9PT1tLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpfSxt''@;'; put 'put ''ZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPjExP00/InAudC5tLiI6IlAuVC5NLiI6TT8iYS50Lm0uIjoiQS5ULk0uIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2RpYVx1MDE2ZCBqZV0gTFQiLG5leHREYXk6IltNb3JnYVx1MDE2ZCBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24g''@;'; put 'put ''amVdIExUIixsYXN0RGF5OiJbSGllcmFcdTAxNmQgamVdIExUIixsYXN0V2VlazoiW3Bhc2ludGFuXSBkZGRkW24gamVdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwb3N0ICVzIixwYXN0OiJhbnRhXHUwMTZkICVzIixzOiJrZWxrYWogc2VrdW5kb2oiLHNzOiIl''@;'; put 'put ''ZCBzZWt1bmRvaiIsbToidW51IG1pbnV0byIsbW06IiVkIG1pbnV0b2oiLGg6InVudSBob3JvIixoaDoiJWQgaG9yb2oiLGQ6InVudSB0YWdvIixkZDoiJWQgdGFnb2oiLE06InVudSBtb25hdG8iLE1NOiIlZCBtb25hdG9qIix5OiJ1bnUgamFybyIseXk6IiVkIGphcm9qIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfWEvLG9yZGluYWw6IiVkYSIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sMTE3ODA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5f''@;'; put 'put ''YWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdv''@;'; put 'put ''L2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98''@;'; put 'put ''anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMtZG8iLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9k''@;'; put 'put ''aWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJy''@;'; put 'put ''ZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xz''@;'; put 'put ''ZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBB''@;'; put 'put ''IixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFth''@;'; put 'put ''IGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEh''@;'; put 'put ''PT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3Jh''@;'; put 'put ''IixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c''@;'; put 'put ''eGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIzNDY4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25v''@;'; put 'put ''di5fZGljLiIuc3BsaXQoIl8iKSxtPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSxsZT1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3Qv''@;'; put 'put ''aSwvXm5vdi9pLC9eZGljL2ldLE09L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdv''@;'; put 'put ''XC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTthZS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgi''@;'; put 'put ''XyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21bUi5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxt''@;'; put 'put ''YXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3Zc''@;'; put 'put ''Lj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRv''@;'; put 'put ''bS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09''@;'; put 'put ''dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJz''@;'; put 'put ''IjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJd''@;'; put 'put ''IExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4''@;'; put 'put ''ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vl''@;'; put 'put ''azp7ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oRigxNjY3NikpfSw0NDkzODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5f''@;'; put 'put ''b2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksbGU9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9p''@;'; put 'put ''LC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxNPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVs''@;'; put 'put ''XC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98''@;'; put 'put ''YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3Rc''@;'; put 'put ''Lj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTpsZSxsb25nTW9udGhzUGFyc2U6bGUsc2hvcnRNb250aHNQYXJzZTpsZSx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWlceGU5cmNvbGVzX2p1ZXZlc192aWVybmVzX3NceGUxYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJkb20uX2x1bi5fbWFyLl9taVx4ZTkuX2p1ZS5fdmllLl9zXHhlMWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDpt''@;'; put 'put ''bTpzcyBBIixMOiJNTS9ERC9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJb''@;'; put 'put ''aG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09''@;'; put 'put ''dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91''@;'; put 'put ''cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBo''@;'; put 'put ''b3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGlu''@;'; put 'put ''YWw6IiVkXHhiYSIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sMjE5NTQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5z''@;'; put 'put ''cGxpdCgiXyIpLG09ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLGxlPVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ks''@;'; put 'put ''L15kaWMvaV0sTT0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/''@;'; put 'put ''fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hv''@;'; put 'put ''cnQ6ZnVuY3Rpb24oUix6KXtyZXR1cm4gUj8vLU1NTS0vLnRlc3Qoeik/bVtSLm1vbnRoKCldOnhbUi5tb250aCgpXTp4fSxtb250aHNSZWdleDpNLG1vbnRoc1Nob3J0UmVnZXg6TSxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVs''@;'; put 'put ''aW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ks''@;'; put 'put ''bW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5f''@;'; put 'put ''bWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/''@;'; put 'put ''InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9''@;'; put 'put ''LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBk''@;'; put 'put ''XHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShGKDE2Njc2KSl9LDExNDUzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQi''@;'; put 'put ''LCJwYWFyIHNla3VuZGl0Il0sc3M6W2xlKyJzZWt1bmRpIixsZSsic2VrdW5kaXQiXSxtOlsiXHhmY2hlIG1pbnV0aSIsIlx4ZmNrcyBtaW51dCJdLG1tOltsZSsiIG1pbnV0aSIsbGUrIiBtaW51dGl0Il0saDpbIlx4ZmNoZSB0dW5uaSIsInR1bmQgYWVnYSIsIlx4ZmNrcyB0dW5kIl0saGg6''@;'; put 'put ''W2xlKyIgdHVubmkiLGxlKyIgdHVuZGkiXSxkOlsiXHhmY2hlIHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1IGFqYSIsImt1dSBhZWdhIiwiXHhmY2tzIGt1dSJdLE1NOltsZSsiIGt1dSIsbGUrIiBrdXVkIl0seTpbIlx4ZmNoZSBhYXN0YSIsImFhc3RhIiwiXHhmY2tzIGFh''@;'; put 'put ''c3RhIl0seXk6W2xlKyIgYWFzdGEiLGxlKyIgYWFzdGF0Il19O3JldHVybiBNP3pbT11bMl0/eltPXVsyXTp6W09dWzFdOlI/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbVx4ZTRydHNfYXByaWxsX21haV9qdXVuaV9qdXVs''@;'; put 'put ''aV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9vYmVyX25vdmVtYmVyX2RldHNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFhbl92ZWVicl9tXHhlNHJ0c19hcHJfbWFpX2p1dW5pX2p1dWxpX2F1Z19zZXB0X29rdF9ub3ZfZGV0cyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoicFx4ZmNoYXBc''@;'; put 'put ''eGU0ZXZfZXNtYXNwXHhlNGV2X3RlaXNpcFx4ZTRldl9rb2xtYXBceGU0ZXZfbmVsamFwXHhlNGV2X3JlZWRlX2xhdXBceGU0ZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RceGU0bmEsXSBMVCIs''@;'; put 'put ''bmV4dERheToiW0hvbW1lLF0gTFQiLG5leHRXZWVrOiJbSlx4ZTRyZ21pbmVdIGRkZGQgTFQiLGxhc3REYXk6IltFaWxlLF0gTFQiLGxhc3RXZWVrOiJbRWVsbWluZV0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRyYXN0IixwYXN0OiIlcyB0''@;'; put 'put ''YWdhc2kiLHM6eCxzczp4LG06eCxtbTp4LGg6eCxoaDp4LGQ6eCxkZDoiJWQgcFx4ZTRldmEiLE06eCxNTTp4LHk6eCx5eTp4fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNDQ2OTc6ZnVu''@;'; put 'put ''Y3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJldSIse21vbnRoczoidXJ0YXJyaWxhX290c2FpbGFfbWFydHhvYV9hcGlyaWxhX21haWF0emFfZWthaW5hX3V6dGFpbGFfYWJ1enR1YV9pcmFpbGFfdXJyaWFfYXphcm9hX2FiZW5kdWEi''@;'; put 'put ''LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6InVydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImlnYW5kZWFfYXN0ZWxlaGVuYV9hc3RlYXJ0ZWFfYXN0ZWF6a2Vu''@;'; put 'put ''YV9vc3RlZ3VuYV9vc3RpcmFsYV9sYXJ1bmJhdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiaWcuX2FsLl9hci5fYXouX29nLl9vbC5fbHIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJpZ19hbF9hcl9hel9vZ19vbF9sciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIs''@;'; put 'put ''bDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0i''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1''@;'; put 'put ''ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDUyOTAwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA2ZjEiLDI6Ilx1MDZmMiIsMzoiXHUw''@;'; put 'put ''NmYzIiw0OiJcdTA2ZjQiLDU6Ilx1MDZmNSIsNjoiXHUwNmY2Iiw3OiJcdTA2ZjciLDg6Ilx1MDZmOCIsOToiXHUwNmY5IiwwOiJcdTA2ZjAifSxtPXsiXHUwNmYxIjoiMSIsIlx1MDZmMiI6IjIiLCJcdTA2ZjMiOiIzIiwiXHUwNmY0IjoiNCIsIlx1MDZmNSI6IjUiLCJcdTA2ZjYiOiI2Iiwi''@;'; put 'put ''XHUwNmY3IjoiNyIsIlx1MDZmOCI6IjgiLCJcdTA2ZjkiOiI5IiwiXHUwNmYwIjoiMCJ9O2FlLmRlZmluZUxvY2FsZSgiZmEiLHttb250aHM6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUw''@;'; put 'put ''NjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4''@;'; put 'put ''XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2OThcdTA2MjdcdTA2NDZcdTA2NDhcdTA2''@;'; put 'put ''Y2NcdTA2NDdfXHUwNjQxXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ3X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjJcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDRfXHUwNjQ1XHUwNjQ3X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDY0Nl9cdTA2OThcdTA2NDhcdTA2MjZcdTA2Y2NcdTA2NDdf''@;'; put 'put ''XHUwNjI3XHUwNjQ4XHUwNjJhX1x1MDYzM1x1MDY3ZVx1MDYyYVx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjdcdTA2YTlcdTA2MmFcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYzM1x1MDYyN1x1MDY0NVx1MDYyOFx1MDYz''@;'; put 'put ''MSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1''@;'; put 'put ''MDZhOVx1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmZcdTA2NDhcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjMzXHUwNjQ3XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY4Nlx1MDY0N1x1MDYyN1x1MDYzMVx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19c''@;'; put 'put ''dTA2N2VcdTA2NDZcdTA2MmNcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjQ3X1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2MmNf''@;'; put 'put ''XHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhI''@;'; put 'put ''Om1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzF8XHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuL1x1MDYyOFx1MDYzOVx1MDYy''@;'; put 'put ''ZiBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxLy50ZXN0KE0pfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDY0Mlx1MDYyOFx1MDY0NCBcdTA2MjdcdTA2MzIgXHUwNjM4XHUwNjQ3XHUwNjMxIjoiXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYz''@;'; put 'put ''MiBcdTA2MzhcdTA2NDdcdTA2MzEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NVx1MDYzMVx1MDY0OFx1MDYzMiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjQxXHUwNjMxXHUwNjJmXHUwNjI3IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0g''@;'; put 'put ''TFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJmXHUwNmNjXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2N2VcdTA2Y2NcdTA2MzRdIFtcdTA2MzNc''@;'; put 'put ''dTA2MjdcdTA2MzlcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2MmZcdTA2MzEgJXMiLHBhc3Q6IiVzIFx1MDY3ZVx1MDZjY1x1MDYzNCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsc3M6IiVk''@;'; put 'put ''IFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDZjY1x1MDY0NyIsbToiXHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDZjY1x1MDY0Mlx1MDY0NyIsaDoiXHUwNmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsaGg6''@;'; put 'put ''IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYSIsZDoiXHUwNmNjXHUwNmE5IFx1MDYzMVx1MDY0OFx1MDYzMiIsZGQ6IiVkIFx1MDYzMVx1MDY0OFx1MDYzMiIsTToiXHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDY0NyIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDY0NyIseToiXHUwNmNj''@;'; put 'put ''XHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTA2ZjAtXHUwNmY5XS9nLGZ1bmN0aW9uKE8pe3JldHVybiBtW09dfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9z''@;'; put 'put ''dGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MDY0NS8sb3JkaW5hbDoiJWRcdTA2NDUiLHdlZWs6e2Rvdzo2LGRv''@;'; put 'put ''eToxMn19KX0oRigxNjY3NikpfSw0OTc3NTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0ibm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqXHhlNCB2aWlzaSBrdXVzaSBzZWl0c2VtXHhlNG4ga2FoZGVrc2FuIHloZGVrc1x4ZTRuIi5zcGxpdCgi''@;'; put 'put ''ICIpLG09WyJub2xsYSIsInloZGVuIiwia2FoZGVuIiwia29sbWVuIiwibmVsalx4ZTRuIiwidmlpZGVuIiwia3V1ZGVuIix4WzddLHhbOF0seFs5XV07ZnVuY3Rpb24gbGUoUix6LEssSSl7dmFyIGs9IiI7c3dpdGNoKEspe2Nhc2UicyI6cmV0dXJuIEk/Im11dXRhbWFuIHNla3VubmluIjoi''@;'; put 'put ''bXV1dGFtYSBzZWt1bnRpIjtjYXNlInNzIjprPUk/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIEk/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOms9ST8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIEk/InR1bm5pbiI6''@;'; put 'put ''InR1bnRpIjtjYXNlImhoIjprPUk/InR1bm5pbiI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gST8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOms9ST8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBJPyJrdXVr''@;'; put 'put ''YXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJNTSI6az1JPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIEk/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjprPUk/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIE0oUix6KXtyZXR1cm4gUjwxMD96P21b''@;'; put 'put ''Ul06eFtSXTpSfShSLEkpKyIgIitrfWFlLmRlZmluZUxvY2FsZSgiZmkiLHttb250aHM6InRhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5z''@;'; put 'put ''cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2VzXHhlNF9oZWluXHhlNF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0''@;'; put 'put ''YWlfcGVyamFudGFpX2xhdWFudGFpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1t''@;'; put 'put ''LnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZ''@;'; put 'put ''WVksIFtrbG9dIEhILm1tIixsbGxsOiJkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6''@;'; put 'put ''IltlaWxlbl0gW2tsb10gTFQiLGxhc3RXZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpsZSxzczpsZSxtOmxlLG1tOmxlLGg6bGUsaGg6bGUsZDps''@;'; put 'put ''ZSxkZDpsZSxNOmxlLE1NOmxlLHk6bGUseXk6bGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw2NDI4MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijth''@;'; put 'put ''ZS5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9fUGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1''@;'; put 'put ''bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1N''@;'; put 'put ''TU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2Fy''@;'; put 'put ''YWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3Jh''@;'; put 'put ''cyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG19''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg0MjM2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rf''@;'; put 'put ''c2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1''@;'; put 'put ''cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4''@;'; put 'put ''ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6IltceGNkIG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoiJXMgc1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1bmQiLHNzOiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1''@;'; put 'put ''ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1ciIsTU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVpdHQgXHhlMXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigx''@;'; put 'put ''NjY3NikpfSw5MjgzMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVf''@;'; put 'put ''bm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFu''@;'; put 'put ''Y2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91''@;'; put 'put ''cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiRERE''@;'; put 'put ''IjpjYXNlImQiOnJldHVybiBtKygxPT09bT8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBtKygxPT09bT8icmUiOiJlIil9fX0pfShGKDE2Njc2KSl9LDIxNDEyOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiZnIt''@;'; put 'put ''Y2giLHttb250aHM6ImphbnZpZXJfZlx4ZTl2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW9ceGZidF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kXHhlOWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZlx4ZTl2ci5fbWFyc19hdnIuX21haV9qdWlu''@;'; put 'put ''X2p1aWwuX2FvXHhmYnRfc2VwdC5fb2N0Ll9ub3YuX2RceGU5Yy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5f''@;'; put 'put ''bHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtc''@;'; put 'put ''eGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25k''@;'; put 'put ''ZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7''@;'; put 'put ''MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIG0rKDE9PT1tPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rKDE9PT1tPyJyZSI6ImUiKX19''@;'; put 'put ''LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg5MzYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciBsZT0vKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98''@;'; put 'put ''bm92XC4/fGRceGU5Y1wuP3xqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksTT1bL15qYW52L2ksL15mXHhlOXZyL2ksL15tYXJzL2ksL15hdnIvaSwvXm1haS9pLC9e''@;'; put 'put ''anVpbi9pLC9eanVpbC9pLC9eYW9ceGZidC9pLC9ec2VwdC9pLC9eb2N0L2ksL15ub3YvaSwvXmRceGU5Yy9pXTthZS5kZWZpbmVMb2NhbGUoImZyIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9i''@;'; put 'put ''cmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OmxlLG1vbnRoc1Nob3J0UmVnZXg6''@;'; put 'put ''bGUsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudmllcnxmXHhlOXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6LyhqYW52XC4/fGZceGU5dnJcLj98''@;'; put 'put ''bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj8pL2ksbW9udGhzUGFyc2U6TSxsb25nTW9udGhzUGFyc2U6TSxzaG9ydE1vbnRoc1BhcnNlOk0sd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pl''@;'; put 'put ''dWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4''@;'; put 'put ''ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIs''@;'; put 'put ''cGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLHc6InVuZSBzZW1haW5lIix3dzoiJWQg''@;'; put 'put ''c2VtYWluZXMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8KS8sb3JkaW5hbDpmdW5jdGlvbihSLHope3N3aXRjaCh6KXtjYXNlIkQiOnJldHVybiBSKygxPT09Uj8iZXIiOiIiKTtkZWZh''@;'; put 'put ''dWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gUisoMT09PVI/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gUisoMT09PVI/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjY5ODQ6ZnVuY3Rpb24oYXQsSWUsRil7''@;'; put 'put ''IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9Imphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbT0iamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJf''@;'; put 'put ''Iik7YWUuZGVmaW5lTG9jYWxlKCJmeSIse21vbnRoczoiamFubmV3YXJpc19mZWJyZXdhcmlzX21hYXJ0X2FwcmlsX21hYWllX2p1bnlfanVseV9hdWd1c3R1c19zZXB0aW1iZXJfb2t0b2Jlcl9ub3ZpbWJlcl9kZXNpbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihNLE8p''@;'; put 'put ''e3JldHVybiBNPy8tTU1NLS8udGVzdChPKT9tW00ubW9udGgoKV06eFtNLm1vbnRoKCldOnh9LG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNuZWluX21vYW5kZWlfdGlpc2RlaV93b2Fuc2RlaV90b25nZXJzZGVpX2ZyZWVkX3NuZW9uIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''InNpLl9tby5fdGkuX3dvLl90by5fZnIuX3NvLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU2lfTW9fVGlfV29fVG9fRnJfU28iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELU1NLVlZWVki''@;'; put 'put ''LExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGpvZWQgb21dIExUIixuZXh0RGF5OiJbbW9hcm4gb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJb''@;'; put 'put ''anVzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltceGY0ZnJceGZibmVdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib2VyICVzIixwYXN0OiIlcyBseW4iLHM6ImluIHBlYXIgc2Vrb25kZW4iLHNzOiIlZCBzZWtvbmRlbiIsbToiaWVuIG1pblx4ZmF0''@;'; put 'put ''IixtbToiJWQgbWludXRlbiIsaDoiaWVuIG9lcmUiLGhoOiIlZCBvZXJlbiIsZDoiaWVuIGRlaSIsZGQ6IiVkIGRhZ2VuIixNOiJpZW4gbW9hbm5lIixNTToiJWQgbW9hbm5lbiIseToiaWVuIGppZXIiLHl5OiIlZCBqaWVycmVuIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShz''@;'; put 'put ''dGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKE0pe3JldHVybiBNKygxPT09TXx8OD09PU18fE0+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw5Mzk2MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoImdhIix7bW9udGhzOlsiRWFuXHhlMWlyIiwiRmVhYmhyYSIsIk1ceGUxcnRhIiwiQWlicmVceGUxbiIsIkJlYWx0YWluZSIsIk1laXRoZWFtaCIsIklceGZhaWwiLCJMXHhmYW5hc2EiLCJNZVx4ZTFuIEZceGYzbWhhaXIiLCJEZWlyZWFkaCBGXHhmM21oYWlyIiwiU2FtaGFpbiIs''@;'; put 'put ''Ik5vbGxhaWciXSxtb250aHNTaG9ydDpbIkVhbiIsIkZlYWJoIiwiTVx4ZTFydCIsIkFpYiIsIkJlYWwiLCJNZWl0aCIsIklceGZhaWwiLCJMXHhmYW4iLCJNLkYuIiwiRC5GLiIsIlNhbWgiLCJOb2xsIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRceGU5IERvbWhuYWlnaCIs''@;'; put 'put ''IkRceGU5IEx1YWluIiwiRFx4ZTkgTVx4ZTFpcnQiLCJEXHhlOSBDXHhlOWFkYW9pbiIsIkRceGU5YXJkYW9pbiIsIkRceGU5IGhBb2luZSIsIkRceGU5IFNhdGhhaXJuIl0sd2Vla2RheXNTaG9ydDpbIkRvbWgiLCJMdWFuIiwiTVx4ZTFpcnQiLCJDXHhlOWFkIiwiRFx4ZTlhciIsIkFvaW5l''@;'; put 'put ''IiwiU2F0aCJdLHdlZWtkYXlzTWluOlsiRG8iLCJMdSIsIk1ceGUxIiwiQ1x4ZTkiLCJEXHhlOSIsIkEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIs''@;'; put 'put ''TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lubml1IGFnXSBMVCIsbmV4dERheToiW0FtXHhlMXJhY2ggYWddIExUIixuZXh0V2VlazoiZGRkZCBbYWddIExUIixsYXN0RGF5OiJbSW5uXHhlOSBhZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8g''@;'; put 'put ''Y2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImkgJXMiLHBhc3Q6IiVzIFx4ZjMgc2hpbiIsczoiY1x4ZmFwbGEgc29pY2luZCIsc3M6IiVkIHNvaWNpbmQiLG06Im5ceGYzaW1ceGU5YWQiLG1tOiIlZCBuXHhmM2ltXHhlOWFkIixoOiJ1YWlyIGFu''@;'; put 'put ''IGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsXHhlMSIsZGQ6IiVkIGxceGUxIixNOiJtXHhlZCIsTU06IiVkIG1ceGVkb25uYSIseToiYmxpYWluIix5eToiJWQgYmxpYWluIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShkfG5hfG1oKS8sb3JkaW5hbDpmdW5j''@;'; put 'put ''dGlvbih6KXtyZXR1cm4geisoMT09PXo/ImQiOnolMTA9PTI/Im5hIjoibWgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNzg4NDk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJnZCIse21vbnRoczpbIkFt''@;'; put 'put ''IEZhb2lsbGVhY2giLCJBbiBHZWFycmFuIiwiQW0gTVx4ZTBydCIsIkFuIEdpYmxlYW4iLCJBbiBDXHhlOGl0ZWFuIiwiQW4gdC1ceGQyZ21oaW9zIiwiQW4gdC1JdWNoYXIiLCJBbiBMXHhmOW5hc3RhbCIsIkFuIHQtU3VsdGFpbiIsIkFuIERceGUwbWhhaXIiLCJBbiB0LVNhbWhhaW4iLCJB''@;'; put 'put ''biBEXHhmOWJobGFjaGQiXSxtb250aHNTaG9ydDpbIkZhb2kiLCJHZWFyIiwiTVx4ZTBydCIsIkdpYmwiLCJDXHhlOGl0IiwiXHhkMmdtaCIsIkl1Y2giLCJMXHhmOW4iLCJTdWx0IiwiRFx4ZTBtaCIsIlNhbWgiLCJEXHhmOWJoIl0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czpbIkRp''@;'; put 'put ''ZFx4ZjJtaG5haWNoIiwiRGlsdWFpbiIsIkRpbVx4ZTBpcnQiLCJEaWNpYWRhaW4iLCJEaWFyZGFvaW4iLCJEaWhhb2luZSIsIkRpc2F0aGFpcm5lIl0sd2Vla2RheXNTaG9ydDpbIkRpZCIsIkRpbCIsIkRpbSIsIkRpYyIsIkRpYSIsIkRpaCIsIkRpcyJdLHdlZWtkYXlzTWluOlsiRFx4ZjIi''@;'; put 'put ''LCJMdSIsIk1ceGUwIiwiQ2kiLCJBciIsIkhhIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0s''@;'; put 'put ''Y2FsZW5kYXI6e3NhbWVEYXk6IltBbi1kaXVnaCBhaWddIExUIixuZXh0RGF5OiJbQS1tXHhlMGlyZWFjaCBhaWddIExUIixuZXh0V2VlazoiZGRkZCBbYWlnXSBMVCIsbGFzdERheToiW0FuLWRceGU4IGFpZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2hhaWRoXSBbYWlnXSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYW5uIGFuICVzIixwYXN0OiJiaG8gY2hpb25uICVzIixzOiJiZWFnYW4gZGlvZ2FuIixzczoiJWQgZGlvZ2FuIixtOiJtaW9uYWlkIixtbToiJWQgbWlvbmFpZGVhbiIsaDoidWFpciIsaGg6IiVkIHVhaXJlYW4iLGQ6ImxhdGhhIixk''@;'; put 'put ''ZDoiJWQgbGF0aGEiLE06Im1ceGVjb3MiLE1NOiIlZCBtXHhlY29zYW4iLHk6ImJsaWFkaG5hIix5eToiJWQgYmxpYWRobmEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KygxPT09ej8iZCI6eiUxMD09Mj8i''@;'; put 'put ''bmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNDI3MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImdsIix7bW9udGhzOiJ4YW5laXJvX2ZlYnJlaXJvX21hcnpvX2FicmlsX21haW9feHVceGYx''@;'; put 'put ''b194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoieGFuLl9mZWIuX21hci5fYWJyLl9tYWkuX3h1XHhmMS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFj''@;'; put 'put ''dDohMCx3ZWVrZGF5czoiZG9taW5nb19sdW5zX21hcnRlc19tXHhlOXJjb3Jlc194b3Zlc192ZW5yZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21ceGU5ci5feG92Ll92ZW4uX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRv''@;'; put 'put ''X2x1X21hX21ceGU5X3hvX3ZlX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZ''@;'; put 'put ''WVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG94ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21h''@;'; put 'put ''XHhmMVx4ZTEgIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJceGUxIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFsiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW29udGUgIisoMSE9''@;'; put 'put ''PXRoaXMuaG91cnMoKT8iXHhlMSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtwYXNhZG8gIisoMSE9PXRoaXMuaG91cnMoKT8iXHhlMXMiOiJhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0p''@;'; put 'put ''e3JldHVybiAwPT09bS5pbmRleE9mKCJ1biIpPyJuIittOiJlbiAiK219LHBhc3Q6ImhhaSAlcyIsczoidW5zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuaGEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRk''@;'; put 'put ''OiIlZCBkXHhlZGFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQwNjIzOmZ1bmN0aW9u''@;'; put 'put ''KGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PXtzOlsiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTJmXHUwOTNlIFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMVx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsIlx1MDkyNVx1''@;'; put 'put ''MDk0Ylx1MDkyMVx1MDk0NyBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxzczpbbGUrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLGxlKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpbIlx1MDkwZlx1''@;'; put 'put ''MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W2xlKyIgXHUwOTJlXHUwOTNmXHUwOTIzXHUwOTFmXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixsZSsiIFx1MDky''@;'; put 'put ''ZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMCJdLGhoOltsZSsiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBc''@;'; put 'put ''dTA5MzVcdTA5MzBcdTA5M2VcdTA5MDIiXSxkOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MjZcdTA5NDBcdTA5MzgiXSxkZDpbbGUrIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5''@;'; put 'put ''NDAiLGxlKyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0sTU06''@;'; put 'put ''W2xlKyIgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRkXHUwOTJmXHUwOTNlXHUwOTI4XHUwOTQwIixsZSsiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJdLHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNl''@;'; put 'put ''XHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltsZSsiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsbGUrIiBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzhcdTA5M2VcdTA5MDIiXX07cmV0dXJuIFI/eltP''@;'; put 'put ''XVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZ29tLWRldmEiLHttb250aHM6e3N0YW5kYWxvbmU6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBc''@;'; put 'put ''dTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMl9cdTA5MmVcdTA5NDdfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZl9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZfXHUw''@;'; put 'put ''OTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUw''@;'; put 'put ''OTQ3XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLGZvcm1hdDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1''@;'; put 'put ''MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQwXHUwOTMyXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1''@;'; put 'put ''MDkyZVx1MDk0N1x1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MWNcdTA5NDJcdTA5MjhcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTJmXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxN1x1''@;'; put 'put ''MDkzOFx1MDk0ZFx1MDkxZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUw''@;'; put 'put ''OTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5''@;'; put 'put ''M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDcuX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNlXHUwOTMwXHUw''@;'; put 'put ''OTRkXHUwOTFhX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MC5fXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzIuX1x1MDkxMVx1MDkxNy5fXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyLl9cdTA5MTFcdTA5MTVcdTA5NGRc''@;'; put 'put ''dTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMi5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MmZcdTA5MjRcdTA5M2VcdTA5MzBfXHUw''@;'; put 'put ''OTM4XHUwOTRiXHUwOTJlXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1''@;'; put 'put ''MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDdcdTA5MjhcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTJmXHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMy5f''@;'; put 'put ''XHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdcdTA5MzhcdTA5NGRcdTA5MjQuX1x1MDkzOFx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTQ3XHUwOTI4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2X1x1MDkzOFx1MDk0Yl9cdTA5''@;'; put 'put ''MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0N19cdTA5MzhcdTA5NDFfXHUwOTM2XHUwOTQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNl''@;'; put 'put ''XHUwOTAyXSIsTFRTOiJBIGg6bW06c3MgW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExMTEw6''@;'; put 'put ''ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlXHUwOTAyXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkw''@;'; put 'put ''Nlx1MDkyZlx1MDkxY10gTFQiLG5leHREYXk6IltcdTA5MmJcdTA5M2VcdTA5MzJcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MDJdIExUIixuZXh0V2VlazoiW1x1MDkyYlx1MDk0MVx1MDkyMVx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJbXHUwOTJiXHUwOTNlXHUwOTFmXHUwOTMyXHUwOTRiXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgXHUwOTA2XHUwOTI2XHUwOTQwXHUwOTAyIixzOngsc3M6eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6''@;'; put 'put ''eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTA5MzVcdTA5NDdcdTA5MzApLyxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3JldHVybiJEIj09PU0/bGUrIlx1MDkzNVx1MDk0N1x1MDkzMCI6bGV9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDB8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyfFx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMnxcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDcvLG1lcmlkaWVtSG91cjpmdW5jdGlv''@;'; put 'put ''bihsZSxNKXtyZXR1cm4gMTI9PT1sZSYmKGxlPTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NDAiPT09TT9sZTw0P2xlOmxlKzEyOiJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiPT09TT9sZToiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAy''@;'; put 'put ''Ij09PU0/bGU+MTI/bGU6bGUrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT1NP2xlKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpsZTwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUw''@;'; put 'put ''OTMzXHUwOTQwXHUwOTAyIjpsZTwxNj8iXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIjpsZTwyMD8iXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oRigxNjY3NikpfSw2MjY5NjpmdW5jdGlvbihh''@;'; put 'put ''dCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXt2YXIgej17czpbInRob2RkZWEgc2Vrb25kYW1uaSIsInRob2RkZSBzZWtvbmQiXSxzczpbbGUrIiBzZWtvbmRhbW5pIixsZSsiIHNla29uZCJdLG06WyJla2EgbWludGFuIiwiZWsgbWludXQi''@;'; put 'put ''XSxtbTpbbGUrIiBtaW50YW1uaSIsbGUrIiBtaW50YW0iXSxoOlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W2xlKyIgdm9yYW1uaSIsbGUrIiB2b3JhbSJdLGQ6WyJla2EgZGlzYW4iLCJlayBkaXMiXSxkZDpbbGUrIiBkaXNhbW5pIixsZSsiIGRpcyJdLE06WyJla2EgbWhvaW5lYW4iLCJl''@;'; put 'put ''ayBtaG9pbm8iXSxNTTpbbGUrIiBtaG9pbmVhbW5pIixsZSsiIG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbbGUrIiB2b3JzYW1uaSIsbGUrIiB2b3JzYW0iXX07cmV0dXJuIFI/eltPXVswXTp6W09dWzFdfWFlLmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250''@;'; put 'put ''aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJfIiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1''@;'; put 'put ''bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5f''@;'; put 'put ''QWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVk''@;'; put 'put ''Ll9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWlfU21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1N''@;'; put 'put ''LVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0ifSxjYWxlbmRhcjp7c2FtZURheToiW0Fpel0g''@;'; put 'put ''TFQiLG5leHREYXk6IltGYWxlYW1dIExUIixuZXh0V2VlazoiW0Z1ZGRsb10gZGRkZFssXSBMVCIsbGFzdERheToiW0thbF0gTFQiLGxhc3RXZWVrOiJbRmF0dGxvXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgYWRpbSIsczp4''@;'; put 'put ''LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOngsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXIpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3JldHVybiJEIj09PU0/bGUrImVyIjpsZX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVt''@;'; put 'put ''UGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihsZSxNKXtyZXR1cm4gMTI9PT1sZSYmKGxlPTApLCJyYXRpIj09PU0/bGU8ND9sZTpsZSsxMjoic29rYWxsaW0iPT09TT9sZToiZG9ucGFyYW0iPT09TT9sZT4xMj9sZTpsZSsxMjoic2Fu''@;'; put 'put ''amUiPT09TT9sZSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDQ/InJhdGkiOmxlPDEyPyJzb2thbGxpbSI6bGU8MTY/ImRvbnBhcmFtIjpsZTwyMD8ic2FuamUiOiJyYXRpIn19KX0oRigxNjY3NikpfSw2NjkyODpmdW5jdGlvbihhdCxJZSxGKXshZnVu''@;'; put 'put ''Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwYWU3IiwyOiJcdTBhZTgiLDM6Ilx1MGFlOSIsNDoiXHUwYWVhIiw1OiJcdTBhZWIiLDY6Ilx1MGFlYyIsNzoiXHUwYWVkIiw4OiJcdTBhZWUiLDk6Ilx1MGFlZiIsMDoiXHUwYWU2In0sbT17Ilx1MGFlNyI6IjEiLCJcdTBhZTgi''@;'; put 'put ''OiIyIiwiXHUwYWU5IjoiMyIsIlx1MGFlYSI6IjQiLCJcdTBhZWIiOiI1IiwiXHUwYWVjIjoiNiIsIlx1MGFlZCI6IjciLCJcdTBhZWUiOiI4IiwiXHUwYWVmIjoiOSIsIlx1MGFlNiI6IjAifTthZS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2Rc''@;'; put 'put ''dTBhYWZcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmZcdTBhYjJfXHUwYWFlXHUwYWM3''@;'; put 'put ''X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmVcdTBhODhfXHUwYTkxXHUwYTk3XHUwYWI4XHUwYWNkXHUwYTlmX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBh''@;'; put 'put ''Y2RcdTBhYWNcdTBhYjBfXHUwYWE4XHUwYWI1XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUw''@;'; put 'put ''YWMxLl9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzEuX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmYuX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlLl9c''@;'; put 'put ''dTBhOTFcdTBhOTcuX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjNy5fXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkLl9cdTBhYThcdTBhYjVcdTBhYzcuX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjNy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi''@;'; put 'put ''XHUwYWIwXHUwYWI1XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiOFx1MGFjYlx1MGFhZVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGE5''@;'; put 'put ''N1x1MGFjMVx1MGFiMFx1MGFjMVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2RcdTBhYjBcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGFiMFx1MGFiNVx1''@;'; put 'put ''MGFiZl9cdTBhYjhcdTBhY2JcdTBhYWVfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiXHUwYWIwX1x1MGFiOFx1MGFjYl9cdTBhYWVcdTBhODJfXHUwYWFjXHUwYWMxX1x1MGE5N1x1MGFjMV9cdTBhYjZcdTBhYzFfXHUwYWI2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIs''@;'; put 'put ''TFRTOiJBIGg6bW06c3MgXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExMTEw6ImRkZGQsIEQgTU1N''@;'; put 'put ''TSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBhODZcdTBhOWNdIExUIixuZXh0RGF5OiJbXHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUw''@;'; put 'put ''YTk3XHUwYTg3XHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbGFzdFdlZWs6IltcdTBhYWFcdTBhYmVcdTBhOWJcdTBhYjJcdTBhYmVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhYWVcdTBhYmUiLHBhc3Q6IiVzIFx1MGFhYVx1MGFi''@;'; put 'put ''OVx1MGFjN1x1MGFiMlx1MGFiZSIsczoiXHUwYTg1XHUwYWFlXHUwYWMxXHUwYTk1IFx1MGFhYVx1MGFiM1x1MGFjYiIsc3M6IiVkIFx1MGFiOFx1MGFjN1x1MGE5NVx1MGE4Mlx1MGFhMSIsbToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsbW06IiVkIFx1''@;'; put 'put ''MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsaDoiXHUwYThmXHUwYTk1IFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsaGg6IiVkIFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsZDoiXHUwYThmXHUwYTk1IFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsZGQ6IiVkIFx1MGFhNlx1MGFi''@;'; put 'put ''Zlx1MGFiNVx1MGFiOCIsTToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIsTU06IiVkIFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIseToiXHUwYThmXHUwYTk1IFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyIseXk6IiVkIFx1MGFiNVx1MGFiMFx1''@;'; put 'put ''MGFjZFx1MGFiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTBhZTdcdTBhZThcdTBhZTlcdTBhZWFcdTBhZWJcdTBhZWNcdTBhZWRcdTBhZWVcdTBhZWZcdTBhZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihN''@;'; put 'put ''KXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGFiMFx1MGFiZVx1MGFhNHxcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjB8XHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwfFx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5Yy8sbWVy''@;'; put 'put ''aWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MGFiMFx1MGFiZVx1MGFhNCI9PT1PP008ND9NOk0rMTI6Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI9PT1PP006Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI9PT1PP00+PTEwP006TSsxMjoiXHUwYWI4''@;'; put 'put ''XHUwYWJlXHUwYTgyXHUwYTljIj09PU8/TSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTBhYjBcdTBhYmVcdTBhYTQiOk08MTA/Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI6TTwxNz8iXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIjpNPDIwPyJc''@;'; put 'put ''dTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiOiJcdTBhYjBcdTBhYmVcdTBhYTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwyNDgwNDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImhlIix7bW9udGhzOiJcdTA1''@;'; put 'put ''ZDlcdTA1ZTBcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlcdTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlc''@;'; put 'put ''dTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWRlXHUwNWQx''@;'; put 'put ''XHUwNWU4X1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWYzX1x1MDVkZVx1''@;'; put 'put ''MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVmM19cdTA1''@;'; put 'put ''ZDNcdTA1ZTZcdTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVkNVx1MDVkZl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1MDVlMlx1MDVkOV9cdTA1ZDdcdTA1''@;'; put 'put ''ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUwNWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNfXHUwNWQ0XHUwNWYzX1x1MDVkNVx1''@;'; put 'put ''MDVmM19cdTA1ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1MDVkM19cdTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoi''@;'; put 'put ''RCBbXHUwNWQxXU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJlXUxUIixuZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLGxh''@;'; put 'put ''c3REYXk6IltcdTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2VlazoiW1x1MDVkMVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIscGFzdDoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixzczoi''@;'; put 'put ''JWQgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBcdTA1ZDNcdTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1MDVkNCIsaGg6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1''@;'; put 'put ''ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1ZGQiLGRkOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ5XHUwNWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ5XHUwNWRlXHUwNWQ5XHUwNWRk''@;'; put 'put ''In0sTToiXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsiIFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1''@;'; put 'put ''MDVkNCIseXk6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0lMTA9PTAmJjEwIT09bT9tKyIgXHUwNWU5XHUwNWUwXHUwNWQ0IjptKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19LG1lcmlkaWVtUGFyc2U6L1x1MDVk''@;'; put 'put ''MFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRc''@;'; put 'put ''dTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXihc''@;'; put 'put ''dTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxKSQvLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08''@;'; put 'put ''NT8iXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOCI6bTwxMD8iXHUwNWQxXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEyP00/J1x1MDVkY1x1MDVlNFx1MDVlMFx1MDVkNCJcdTA1ZTYnOiJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDkg''@;'; put 'put ''XHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjptPDE4P00/J1x1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTYnOiJcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkIjoiXHUwNWQxXHUwNWUyXHUw''@;'; put 'put ''NWU4XHUwNWQxIn19KX0oRigxNjY3NikpfSwyMzAxNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJc''@;'; put 'put ''dTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbT17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifSxs''@;'; put 'put ''ZT1bL15cdTA5MWNcdTA5MjgvaSwvXlx1MDkyYlx1MDkzY1x1MDkzMHxcdTA5MmJcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9p''@;'; put 'put ''LC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMnxcdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1fFx1MDkyOFx1MDkzNVx1MDkwMi9pLC9eXHUw''@;'; put 'put ''OTI2XHUwOTNmXHUwOTM4XHUwOTAyfFx1MDkyNlx1MDkzZlx1MDkzOC9pXTthZS5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhzOntmb3JtYXQ6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUw''@;'; put 'put ''OTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0''@;'; put 'put ''XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLHN0YW5k''@;'; put 'put ''YWxvbmU6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUw''@;'; put 'put ''OTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjRfXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5MzVcdTA5MDJc''@;'; put 'put ''dTA5MmNcdTA5MzBfXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5M2NcdTA5MzAuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBc''@;'; put 'put ''dTA5NDguX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDkzZlx1MDkyNC5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyLl9cdTA5MjhcdTA5MzUuX1x1MDkyNlx1MDkzZlx1MDkzOC4iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1''@;'; put 'put ''MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5''@;'; put 'put ''MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMl9cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExUUzoiQSBoOm1tOnNz''@;'; put 'put ''IFx1MDkyY1x1MDkxY1x1MDk0NyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyJ9LG1vbnRoc1BhcnNlOmxl''@;'; put 'put ''LGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOlsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ks''@;'; put 'put ''L15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjQvaSwvXlx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi9pLC9eXHUwOTI4XHUwOTM1L2ksL15cdTA5MjZcdTA5M2ZcdTA5MzgvaV0sbW9u''@;'; put 'put ''dGhzUmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5''@;'; put 'put ''MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFc''@;'; put 'put ''dTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVc''@;'; put 'put ''dTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkz''@;'; put 'put ''Zlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkxY1x1MDkyOFwuP3xcdTA5''@;'; put 'put ''MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzY1x1MDkzMFwuP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMnxcdTA5MDVcdTA5''@;'; put 'put ''MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOHxcdTA5MWNcdTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0fFx1MDkwNVx1MDkxN1wuP3xcdTA5Mzhc''@;'; put 'put ''dTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzB8XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUw''@;'; put 'put ''OTQyXC4/fFx1MDkyOFx1MDkzNVx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJcdTA5MmNc''@;'; put 'put ''dTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwfFx1MDkyYlx1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MD98XHUwOTJlXHUwOTNl''@;'; put 'put ''XHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzI/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDg/fFx1MDkwNVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkyND98XHUwOTM4XHUw''@;'; put 'put ''OTNmXHUwOTI0XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjQ/XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5''@;'; put 'put ''NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMD98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMD8pL2ksbW9udGhz''@;'; put 'put ''U2hvcnRTdHJpY3RSZWdleDovXihcdTA5MWNcdTA5MjhcLj98XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XC4/fFx1MDkyZVx1MDkwOD98XHUwOTFjXHUwOTQyXHUwOTI4P3xcdTA5MWNc''@;'; put 'put ''dTA5NDFcdTA5MzJcLj98XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFwuP3xcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XC4/fFx1MDkyNlx1MDkzZlx1MDkzOFwuPykvaSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDkwNlx1MDkxY10gTFQi''@;'; put 'put ''LG5leHREYXk6IltcdTA5MTVcdTA5MzJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYVx1MDkzZlx1MDkxYlx1MDkzMlx1MDk0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''IiVzIFx1MDkyZVx1MDk0N1x1MDkwMiIscGFzdDoiJXMgXHUwOTJhXHUwOTM5XHUwOTMyXHUwOTQ3IixzOiJcdTA5MTVcdTA5NDFcdTA5MWIgXHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkzN1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMSIsbToiXHUw''@;'; put 'put ''OTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1MDkxOFx1MDkwMlx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkwMlx1MDkxZlx1MDk0NyIsZDoiXHUwOTBmXHUwOTE1IFx1MDky''@;'; put 'put ''Nlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDk0MFx1MDkyOFx1MDk0NyIseToiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1''@;'; put 'put ''MDkzNyIseXk6IiVkIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoL1tcdTA5NjdcdTA5NjhcdTA5NjlcdTA5NmFcdTA5NmJcdTA5NmNcdTA5NmRcdTA5NmVcdTA5NmZcdTA5NjZdL2csZnVuY3Rpb24oeil7cmV0dXJuIG1b''@;'; put 'put ''el19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKHope3JldHVybiB4W3pdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDkzMFx1MDkzZVx1MDkyNHxcdTA5MzhcdTA5NDFcdTA5MmNcdTA5Mzl8XHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUw''@;'; put 'put ''OTMwfFx1MDkzNlx1MDkzZVx1MDkyZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFIseil7cmV0dXJuIDEyPT09UiYmKFI9MCksIlx1MDkzMFx1MDkzZVx1MDkyNCI9PT16P1I8ND9SOlIrMTI6Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI9PT16P1I6Ilx1MDkyNlx1MDk0Ylx1MDkyYVx1MDkz''@;'; put 'put ''OVx1MDkzMCI9PT16P1I+PTEwP1I6UisxMjoiXHUwOTM2XHUwOTNlXHUwOTJlIj09PXo/UisxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjw0PyJcdTA5MzBcdTA5M2VcdTA5MjQiOlI8MTA/Ilx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOSI6UjwxNz8iXHUwOTI2''@;'; put 'put ''XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIjpSPDIwPyJcdTA5MzZcdTA5M2VcdTA5MmUiOiJcdTA5MzBcdTA5M2VcdTA5MjQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSwxNzEzNDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv''@;'; put 'put ''biB4KGxlLE0sTyl7dmFyIFI9bGUrIiAiO3N3aXRjaChPKXtjYXNlInNzIjpyZXR1cm4gUisoMT09PWxlPyJzZWt1bmRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIE0/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2Fz''@;'; put 'put ''ZSJtbSI6cmV0dXJuIFIrKDE9PT1sZT8ibWludXRhIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJtaW51dGUiOiJtaW51dGEiKTtjYXNlImgiOnJldHVybiBNPyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6cmV0dXJuIFIrKDE9PT1sZT8ic2F0IjoyPT09bGV8fDM9PT1sZXx8''@;'; put 'put ''ND09PWxlPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBSKygxPT09bGU/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gUisoMT09PWxlPyJtamVzZWMiOjI9PT1sZXx8Mz09PWxlfHw0PT09bGU/Im1qZXNlY2EiOiJtamVzZWNpIik7Y2FzZSJ5eSI6cmV0dXJuIFIrKDE9PT1s''@;'; put 'put ''ZT8iZ29kaW5hIjoyPT09bGV8fDM9PT1sZXx8ND09PWxlPyJnb2RpbmUiOiJnb2RpbmEiKX19YWUuZGVmaW5lTG9jYWxlKCJociIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUwMTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xv''@;'; put 'put ''dm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAxMGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9w''@;'; put 'put ''cm9zaW5hYyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVsai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0''@;'; put 'put ''b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVkiLExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2''@;'; put 'put ''OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJb''@;'; put 'put ''cHJvXHUwMTYxbHVdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUw''@;'; put 'put ''MTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDoiZGFuIixkZDp4LE06Im1qZXNlYyIsTU06eCx5OiJnb2RpbnUiLHl5Onh9''@;'; put 'put ''LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1MDY3MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0idmFzXHhlMXJuYXAgaFx4ZTl0Zlx1MDE1''@;'; put 'put ''MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIG0oTyxSLHosSyl7dmFyIEk9Tztzd2l0Y2goeil7Y2FzZSJzIjpyZXR1cm4gS3x8Uj8iblx4ZTloXHhlMW55IG1ceGUxc29kcGVyYyI6''@;'; put 'put ''Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gSSsoS3x8Uik/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5IisoS3x8Uj8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gSSsoS3x8Uj8iIHBlcmMiOiIg''@;'; put 'put ''cGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyhLfHxSPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIEkrKEt8fFI/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyhLfHxSPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJkZCI6cmV0''@;'; put 'put ''dXJuIEkrKEt8fFI/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyhLfHxSPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBJKyhLfHxSPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UieSI6cmV0dXJuImVneSIrKEt8fFI/IiBceGU5''@;'; put 'put ''diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gSSsoS3x8Uj8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIGxlKE8pe3JldHVybihPPyIiOiJbbVx4ZmFsdF0gIikrIlsiK3hbdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifWFlLmRlZmluZUxvY2FsZSgiaHUiLHttb250''@;'; put 'put ''aHM6ImphbnVceGUxcl9mZWJydVx4ZTFyX21ceGUxcmNpdXNfXHhlMXByaWxpc19tXHhlMWp1c19qXHhmYW5pdXNfalx4ZmFsaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdFx4ZjNiZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tXHhl''@;'; put 'put ''MXJjLl9ceGUxcHIuX21ceGUxai5falx4ZmFuLl9qXHhmYWwuX2F1Zy5fc3plcHQuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InZhc1x4ZTFybmFwX2hceGU5dGZcdTAxNTFfa2VkZF9zemVyZGFfY3NceGZjdFx4ZjZydFx4ZjZrX3Bc''@;'; put 'put ''eGU5bnRla19zem9tYmF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InZhc19oXHhlOXRfa2VkZF9zemVfY3NceGZjdF9wXHhlOW5fc3pvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ2X2hfa19zemVfY3NfcF9zem8iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixM''@;'; put 'put ''VFM6Ikg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWS4gTU1NTSBELiIsTExMOiJZWVlZLiBNTU1NIEQuIEg6bW0iLExMTEw6IllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L2RlfGR1L2ksaXNQTTpmdW5jdGlvbihPKXtyZXR1cm4idSI9PT1PLmNoYXJB''@;'; put 'put ''dCgxKS50b0xvd2VyQ2FzZSgpfSxtZXJpZGllbTpmdW5jdGlvbihPLFIseil7cmV0dXJuIE88MTI/ITA9PT16PyJkZSI6IkRFIjohMD09PXo/ImR1IjoiRFUifSxjYWxlbmRhcjp7c2FtZURheToiW21hXSBMVFsta29yXSIsbmV4dERheToiW2hvbG5hcF0gTFRbLWtvcl0iLG5leHRXZWVrOmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGxlLmNhbGwodGhpcywhMCl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiBsZS5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMi''@;'; put 'put ''LHM6bSxzczptLG0sbW06bSxoOm0saGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDQ1MjM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0''@;'; put 'put ''aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBcdTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3''@;'; put 'put ''NFx1MDU2MVx1MDU4MFx1MDU3Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1''@;'; put 'put ''NmNcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1''@;'; put 'put ''NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25l''@;'; put 'put ''OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUw''@;'; put 'put ''NTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1''@;'; put 'put ''MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1''@;'; put 'put ''MDU2NVx1MDU4MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1''@;'; put 'put ''MDU3ZF9cdTA1ODVcdTA1NjNcdTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1''@;'; put 'put ''XHUwNTgwXHUwNTZmXHUwNTc4XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1Njlc''@;'; put 'put ''dTA1NmJfXHUwNTcwXHUwNTZiXHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUw''@;'; put 'put ''NTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1''@;'; put 'put ''ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDpt''@;'; put 'put ''bSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVc''@;'; put 'put ''dTA1N2RcdTA1ODVcdTA1ODBdIExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1''@;'; put 'put ''NjFcdTA1NzRcdTA1NjhdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiIlcyBcdTA1NzBcdTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNz''@;'; put 'put ''OiIlZCBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0''@;'; put 'put ''IixkOiJcdTA1ODVcdTA1ODAiLGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToiXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0s''@;'; put 'put ''bWVyaWRpZW1QYXJzZTovXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUw''@;'; put 'put ''NTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChtKX0s''@;'; put 'put ''bWVyaWRpZW06ZnVuY3Rpb24obSl7cmV0dXJuIG08ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjptPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOm08MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1''@;'; put 'put ''MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dp''@;'; put 'put ''dGNoKGxlKXtjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOmNhc2UiREREbyI6cmV0dXJuIDE9PT1tP20rIi1cdTA1NmJcdTA1NzYiOm0rIi1cdTA1ODBcdTA1NjQiO2RlZmF1bHQ6cmV0dXJuIG19fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw5OTIzMzpmdW5jdGlvbihhdCxJ''@;'; put 'put ''ZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImlkIix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0FndF9TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SYWJf''@;'; put 'put ''S2FtX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVr''@;'; put 'put ''dWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXxzaWFuZ3xzb3JlfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksInBhZ2kiPT09bGU/bToic2lhbmciPT09bGU/''@;'; put 'put ''bT49MTE/bTptKzEyOiJzb3JlIj09PWxlfHwibWFsYW0iPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTE/InBhZ2kiOm08MTU/InNpYW5nIjptPDE5PyJzb3JlIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3Vs''@;'; put 'put ''XSBMVCIsbmV4dERheToiW0Jlc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGFsdSBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVz''@;'; put 'put ''IixwYXN0OiIlcyB5YW5nIGxhbHUiLHM6ImJlYmVyYXBhIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNlbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIs''@;'; put 'put ''eXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KEYoMTY2NzYpKX0sOTQ2OTM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChNKXtyZXR1cm4gTSUxMDA9PTExfHxNJTEwIT0xfWZ1bmN0aW9uIG0oTSxPLFIseil7dmFyIEs9''@;'; put 'put ''TSsiICI7c3dpdGNoKFIpe2Nhc2UicyI6cmV0dXJuIE98fHo/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2trcnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4geChNKT9LKyhPfHx6PyJzZWtceGZhbmR1ciI6InNla1x4ZmFuZHVtIik6Sysic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1''@;'; put 'put ''cm4gTz8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4geChNKT9LKyhPfHx6PyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOk8/SysibVx4ZWRuXHhmYXRhIjpLKyJtXHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiB4KE0pP0srKE98fHo/Imts''@;'; put 'put ''dWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6Sysia2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIE8/ImRhZ3VyIjp6PyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4geChNKT9PP0srImRhZ2FyIjpLKyh6PyJkYWdhIjoiZFx4ZjZndW0iKTpPP0srImRhZ3VyIjpLKyh6PyJkYWci''@;'; put 'put ''OiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gTz8ibVx4ZTFudVx4ZjB1ciI6ej8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiB4KE0pP08/SysibVx4ZTFudVx4ZjBpciI6Sysoej8ibVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOk8/SysibVx4ZTFudVx4''@;'; put 'put ''ZjB1ciI6Sysoej8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVybiBPfHx6PyJceGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIHgoTSk/SysoT3x8ej8iXHhlMXIiOiJceGUxcnVtIik6SysoT3x8ej8iXHhlMXIiOiJceGUxcmkiKX19YWUuZGVmaW5lTG9j''@;'; put 'put ''YWxlKCJpcyIse21vbnRoczoiamFuXHhmYWFyX2ZlYnJceGZhYXJfbWFyc19hcHJceGVkbF9tYVx4ZWRfalx4ZmFuXHhlZF9qXHhmYWxceGVkX1x4ZTFnXHhmYXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25ceGYzdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5f''@;'; put 'put ''ZmViX21hcl9hcHJfbWFceGVkX2pceGZhbl9qXHhmYWxfXHhlMWdceGZhX3NlcF9va3Rfblx4ZjN2X2RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW51ZGFndXJfXHhmZXJpXHhmMGp1ZGFndXJfbWlceGYwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2ZceGY2c3R1ZGFn''@;'; put 'put ''dXJfbGF1Z2FyZGFndXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic3VuX21ceGUxbl9ceGZlcmlfbWlceGYwX2ZpbV9mXHhmNnNfbGF1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9NXHhlMV9ceGRlcl9NaV9GaV9GXHhmNl9MYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7''@;'; put 'put ''TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIFtrbC5dIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4ZWQgZGFnIGtsLl0gTFQiLG5l''@;'; put 'put ''eHREYXk6IltceGUxIG1vcmd1biBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4ZWQgZ1x4ZTZyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc1x4ZWRceGYwYXN0YV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZWZ0''@;'; put 'put ''aXIgJXMiLHBhc3Q6ImZ5cmlyICVzIHNceGVkXHhmMGFuIixzOm0sc3M6bSxtLG1tOm0saDoia2x1a2t1c3R1bmQiLGhoOm0sZDptLGRkOm0sTTptLE1NOm0seTptLHl5Om19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oRigxNjY3NikpfSw3ODExODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIml0LWNoIix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVt''@;'; put 'put ''YnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xlZFx4''@;'; put 'put ''ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2dnaSBhbGxlXSBMVCIsbmV4dERheToiW0RvbWFuaSBhbGxl''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FsbGVdIExUIixsYXN0RGF5OiJbSWVyaSBhbGxlXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUIjoiW2xvIHNjb3Jzb10gZGRkZCBbYWxsZV0gTFQifSxzYW1lRWxz''@;'; put 'put ''ZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybigvXlswLTldLiskLy50ZXN0KG0pPyJ0cmEiOiJpbiIpKyIgIittfSxwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6''@;'; put 'put ''InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6''@;'; put 'put ''MSxkb3k6NH19KX0oRigxNjY3NikpfSw2MzkzNjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIml0Iix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0''@;'; put 'put ''dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZFx4ZWNfbWFydGVkXHhlY19tZXJjb2xl''@;'; put 'put ''ZFx4ZWNfZ2lvdmVkXHhlY192ZW5lcmRceGVjX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhv''@;'; put 'put ''dXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuImRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQi''@;'; put 'put ''fSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW0xhIHNjb3JzYV0gZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCI6IltMbyBzY29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxl''@;'; put 'put ''ICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ0cmEgJXMiLHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0aSIsaDoidW4n''@;'; put 'put ''b3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLHc6InVuYSBzZXR0aW1hbmEiLHd3OiIlZCBzZXR0aW1hbmUiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c''@;'; put 'put ''eGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDg2ODcxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgiamEiLHtlcmFzOlt7c2luY2U6IjIwMTktMDUtMDEiLG9mZnNldDoxLG5h''@;'; put 'put ''bWU6Ilx1NGVlNFx1NTQ4YyIsbmFycm93OiJcdTMyZmYiLGFiYnI6IlIifSx7c2luY2U6IjE5ODktMDEtMDgiLHVudGlsOiIyMDE5LTA0LTMwIixvZmZzZXQ6MSxuYW1lOiJcdTVlNzNcdTYyMTAiLG5hcnJvdzoiXHUzMzdiIixhYmJyOiJIIn0se3NpbmNlOiIxOTI2LTEyLTI1Iix1bnRpbDoi''@;'; put 'put ''MTk4OS0wMS0wNyIsb2Zmc2V0OjEsbmFtZToiXHU2NjJkXHU1NDhjIixuYXJyb3c6Ilx1MzM3YyIsYWJicjoiUyJ9LHtzaW5jZToiMTkxMi0wNy0zMCIsdW50aWw6IjE5MjYtMTItMjQiLG9mZnNldDoxLG5hbWU6Ilx1NTkyN1x1NmI2MyIsbmFycm93OiJcdTMzN2QiLGFiYnI6IlQifSx7c2lu''@;'; put 'put ''Y2U6IjE4NzMtMDEtMDEiLHVudGlsOiIxOTEyLTA3LTI5IixvZmZzZXQ6NixuYW1lOiJcdTY2MGVcdTZjYmIiLG5hcnJvdzoiXHUzMzdlIixhYmJyOiJNIn0se3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoiMTg3My0xMi0zMSIsb2Zmc2V0OjEsbmFtZToiXHU4OTdmXHU2NmE2IixuYXJyb3c6''@;'; put 'put ''IkFEIixhYmJyOiJBRCJ9LHtzaW5jZToiMDAwMC0xMi0zMSIsdW50aWw6LTEvMCxvZmZzZXQ6MSxuYW1lOiJcdTdkMDBcdTUxNDNcdTUyNGQiLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyhcdTUxNDN8XGQrKVx1NWU3NC8sZXJhWWVhck9yZGluYWxQYXJz''@;'; put 'put ''ZTpmdW5jdGlvbihtLGxlKXtyZXR1cm4iXHU1MTQzIj09PWxlWzFdPzE6cGFyc2VJbnQobGVbMV18fG0sMTApfSxtb250aHM6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEy''@;'; put 'put ''XHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NWU1XHU2NmRj''@;'; put 'put ''XHU2NWU1X1x1NjcwOFx1NjZkY1x1NjVlNV9cdTcwNmJcdTY2ZGNcdTY1ZTVfXHU2YzM0XHU2NmRjXHU2NWU1X1x1NjcyOFx1NjZkY1x1NjVlNV9cdTkxZDFcdTY2ZGNcdTY1ZTVfXHU1NzFmXHU2NmRjXHU2NWU1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1NjVlNV9cdTY3MDhfXHU3''@;'; put 'put ''MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NjcwOF9cdTcwNmJfXHU2YzM0X1x1NjcyOF9cdTkxZDFfXHU1NzFmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZ''@;'; put 'put ''WVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgZGRkZCBISDptbSIsbDoiWVlZWS9NTS9ERCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIs''@;'; put 'put ''bGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNShkZGQpIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MzQ4XHU1MjRkfFx1NTM0OFx1NWY4Yy9pLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIlx1NTM0OFx1NWY4YyI9PT1t''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4g''@;'; put 'put ''bS53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1tLndlZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRk''@;'; put 'put ''ZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UieSI6cmV0dXJuIDE9PT1tPyJcdTUxNDNcdTVlNzQiOm0rIlx1NWU3NCI7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRERE''@;'; put 'put ''IjpyZXR1cm4gbSsiXHU2NWU1IjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU2NTcwXHU3OWQyIixzczoiJWRcdTc5ZDIiLG06IjFcdTUyMDYiLG1tOiIlZFx1NTIwNiIsaDoiMVx1NjY0Mlx1OTU5MyIsaGg6''@;'; put 'put ''IiVkXHU2NjQyXHU5NTkzIixkOiIxXHU2NWU1IixkZDoiJWRcdTY1ZTUiLE06IjFcdTMwZjZcdTY3MDgiLE1NOiIlZFx1MzBmNlx1NjcwOCIseToiMVx1NWU3NCIseXk6IiVkXHU1ZTc0In19KX0oRigxNjY3NikpfSw2ODcxMDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImp2Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXBy''@;'; put 'put ''X01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU3AiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQs''@;'; put 'put ''IEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJlbmppbmciPT09bGU/bToic2l5YW5nIj09PWxlP20+PTExP206bSsxMjoi''@;'; put 'put ''c29udGVuIj09PWxlfHwibmRhbHUiPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTE/ImVuamluZyI6bTwxNT8ic2l5YW5nIjptPDE5PyJzb250ZW4iOiJuZGFsdSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGludGVuIHB1bmlrbyBwdWt1bF0g''@;'; put 'put ''TFQiLG5leHREYXk6IltNYmVuamFuZyBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLYWxhIHdpbmdpIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6''@;'; put 'put ''IndvbnRlbiBpbmcgJXMiLHBhc3Q6IiVzIGluZ2thbmcga2VwZW5na2VyIixzOiJzYXdldGF3aXMgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2V0dW5nZ2FsIG1lbml0IixtbToiJWQgbWVuaXQiLGg6InNldHVuZ2dhbCBqYW0iLGhoOiIlZCBqYW0iLGQ6InNlZGludGVuIixkZDoiJWQgZGlu''@;'; put 'put ''dGVuIixNOiJzZXd1bGFuIixNTToiJWQgd3VsYW4iLHk6InNldGF1biIseXk6IiVkIHRhdW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwxNzEyNTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoImthIix7bW9u''@;'; put 'put ''dGhzOiJcdTEwZDhcdTEwZDBcdTEwZGNcdTEwZDVcdTEwZDBcdTEwZTBcdTEwZDhfXHUxMGQ3XHUxMGQ0XHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ1XHUxMGQwXHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBlMFx1MTBlMlx1MTBkOF9cdTEwZDBcdTEwZGVcdTEwZTBcdTEwZDhcdTEwZGFc''@;'; put 'put ''dTEwZDhfXHUxMGRiXHUxMGQwXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkOFx1MTBkNVx1MTBkY1x1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGFcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQwXHUxMGQyXHUxMGQ1XHUxMGQ4XHUxMGUxXHUxMGUyXHUxMGRkX1x1MTBlMVx1MTBk''@;'; put 'put ''NFx1MTBlNVx1MTBlMlx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEwZGRcdTEwZTVcdTEwZTJcdTEwZGRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRjXHUxMGRkXHUxMGQ0XHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkM1x1MTBk''@;'; put 'put ''NFx1MTBkOVx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMGQ4XHUxMGQwXHUxMGRjX1x1MTBkN1x1MTBkNFx1MTBkMV9cdTEwZGJcdTEwZDBcdTEwZTBfXHUxMGQwXHUxMGRlXHUxMGUwX1x1MTBkYlx1MTBkMFx1MTBkOF9c''@;'; put 'put ''dTEwZDhcdTEwZDVcdTEwZGNfXHUxMGQ4XHUxMGQ1XHUxMGRhX1x1MTBkMFx1MTBkMlx1MTBkNV9cdTEwZTFcdTEwZDRcdTEwZTVfXHUxMGRkXHUxMGU1XHUxMGUyX1x1MTBkY1x1MTBkZFx1MTBkNF9cdTEwZDNcdTEwZDRcdTEwZDkiLnNwbGl0KCJfIiksd2Vla2RheXM6e3N0YW5kYWxvbmU6''@;'; put 'put ''Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMF9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBk''@;'; put 'put ''MFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUxMGQ4X1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBk''@;'; put 'put ''N1x1MTBkOCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MTBkOVx1MTBkNVx1MTBkOFx1MTBlMFx1MTBkMFx1MTBlMV9cdTEwZGRcdTEwZTBcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGUxXHUxMGQwXHUxMGRiXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUx''@;'; put 'put ''MGUxX1x1MTBkZFx1MTBkN1x1MTBlZVx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZWVcdTEwZTNcdTEwZDdcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGRlXHUxMGQwXHUxMGUwXHUxMGQwXHUxMGUxXHUxMGQ5XHUxMGQ0XHUxMGQ1XHUx''@;'; put 'put ''MGUxX1x1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBlMSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovKFx1MTBlY1x1MTBkOFx1MTBkY1x1MTBkMHxcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDIpL30sd2Vla2RheXNTaG9ydDoiXHUxMGQ5XHUxMGQ1XHUxMGQ4X1x1''@;'; put 'put ''MTBkZFx1MTBlMFx1MTBlOF9cdTEwZTFcdTEwZDBcdTEwZGJfXHUxMGRkXHUxMGQ3XHUxMGVlX1x1MTBlZVx1MTBlM1x1MTBkN19cdTEwZGVcdTEwZDBcdTEwZTBfXHUxMGU4XHUxMGQwXHUxMGQxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTEwZDlcdTEwZDVfXHUxMGRkXHUxMGUwX1x1''@;'; put 'put ''MTBlMVx1MTBkMF9cdTEwZGRcdTEwZDdfXHUxMGVlXHUxMGUzX1x1MTBkZVx1MTBkMF9cdTEwZThcdTEwZDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZ''@;'; put 'put ''IEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMGQzXHUxMGU2XHUxMGQ0XHUxMGUxXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dERheToiW1x1MTBlZVx1MTBkNVx1MTBkMFx1MTBkYV0gTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RE''@;'; put 'put ''YXk6IltcdTEwZDJcdTEwZTNcdTEwZThcdTEwZDhcdTEwZGNdIExUWy1cdTEwZDZcdTEwZDRdIixuZXh0V2VlazoiW1x1MTBlOFx1MTBkNFx1MTBkYlx1MTBkM1x1MTBkNFx1MTBkMl0gZGRkZCBMVFstXHUxMGQ2XHUxMGQ0XSIsbGFzdFdlZWs6IltcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDBd''@;'; put 'put ''IGRkZGQgTFQtXHUxMGQ2XHUxMGQ0IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlcGxhY2UoLyhcdTEwZWNcdTEwZDBcdTEwZGJ8XHUxMGVjXHUxMGUzXHUxMGQ3fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN3xcdTEwZWNcdTEwZDRc''@;'; put 'put ''dTEwZGF8XHUxMGQzXHUxMGU2fFx1MTBkN1x1MTBkNSkoXHUxMGQ4fFx1MTBkNCkvLGZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIlx1MTBkOCI9PT1PP00rIlx1MTBlOFx1MTBkOCI6TStPKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24obSl7cmV0dXJuLyhcdTEwZWNcdTEwZDBcdTEw''@;'; put 'put ''ZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChtKT9tLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUxMGVjXHUx''@;'; put 'put ''MGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChtKT9tLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6bX0sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUxMGQzXHUx''@;'; put 'put ''MGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFcdTEwZDBc''@;'; put 'put ''dTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5OiJcdTEw''@;'; put 'put ''ZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVybiAwPT09''@;'; put 'put ''bT9tOjE9PT1tP20rIi1cdTEwZGFcdTEwZDgiOm08MjB8fG08PTEwMCYmbSUyMD09MHx8bSUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK206bSsiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDgyNDYxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciB4PXswOiItXHUwNDQ4XHUwNDU2IiwxOiItXHUwNDQ4XHUwNDU2IiwyOiItXHUwNDQ4XHUwNDU2IiwzOiItXHUwNDQ4XHUwNDU2Iiw0OiItXHUwNDQ4XHUwNDU2Iiw1OiItXHUwNDQ4XHUwNDU2Iiw2OiItXHUwNDQ4XHUwNDRiIiw3OiItXHUwNDQ4XHUwNDU2Iiw4OiIt''@;'; put 'put ''XHUwNDQ4XHUwNDU2Iiw5OiItXHUwNDQ4XHUwNDRiIiwxMDoiLVx1MDQ0OFx1MDQ0YiIsMjA6Ii1cdTA0NDhcdTA0NGIiLDMwOiItXHUwNDQ4XHUwNDRiIiw0MDoiLVx1MDQ0OFx1MDQ0YiIsNTA6Ii1cdTA0NDhcdTA0NTYiLDYwOiItXHUwNDQ4XHUwNDRiIiw3MDoiLVx1MDQ0OFx1MDQ1NiIs''@;'; put 'put ''ODA6Ii1cdTA0NDhcdTA0NTYiLDkwOiItXHUwNDQ4XHUwNDRiIiwxMDA6Ii1cdTA0NDhcdTA0NTYifTthZS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMwXHUwNDNkX1x1MDQzZFx1''@;'; put 'put ''MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0MzRcdTA0MzVfXHUwNDQy''@;'; put 'put ''XHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1MDQzNVx1MDQzYlx1MDQ0''@;'; put 'put ''Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQzY19cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1MDQzNVx1MDQzYVx1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQz''@;'; put 'put ''MVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0MzVcdTA0M2FfXHUwNDM0''@;'; put 'put ''XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0MzRcdTA0MzlfXHUwNDQx''@;'; put 'put ''XHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0V2Vl''@;'; put 'put ''azoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQ1''@;'; put 'put ''Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQg''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDMwXHUwNDM5IixN''@;'; put 'put ''TToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0YikvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBdfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNzczOTk6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MTdlMSIsMjoiXHUx''@;'; put 'put ''N2UyIiwzOiJcdTE3ZTMiLDQ6Ilx1MTdlNCIsNToiXHUxN2U1Iiw2OiJcdTE3ZTYiLDc6Ilx1MTdlNyIsODoiXHUxN2U4Iiw5OiJcdTE3ZTkiLDA6Ilx1MTdlMCJ9LG09eyJcdTE3ZTEiOiIxIiwiXHUxN2UyIjoiMiIsIlx1MTdlMyI6IjMiLCJcdTE3ZTQiOiI0IiwiXHUxN2U1IjoiNSIsIlx1''@;'; put 'put ''MTdlNiI6IjYiLCJcdTE3ZTciOiI3IiwiXHUxN2U4IjoiOCIsIlx1MTdlOSI6IjkiLCJcdTE3ZTAiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJrbSIse21vbnRoczoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3''@;'; put 'put ''YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9c''@;'; put 'put ''dTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTc5OFx1MTc4''@;'; put 'put ''MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1''@;'; put 'put ''MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZf''@;'; put 'put ''XHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTE3YTJcdTE3YjZcdTE3OTFcdTE3YjdcdTE3OGZcdTE3ZDJcdTE3OTlfXHUxNzg1XHUxN2QwXHUxNzkzXHUxN2QyXHUxNzkxX1x1MTdhMlx1MTc4NFx1MTdkMlx1MTc4Mlx1MTdiNlx1MTc5YV9cdTE3OTZc''@;'; put 'put ''dTE3YmJcdTE3OTJfXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2EwXHUxNzlmXHUxN2QyXHUxNzk0XHUxNzhmXHUxN2I3XHUxN2NkX1x1MTc5Zlx1MTdiYlx1MTc4MFx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YzVcdTE3OWFcdTE3Y2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxN2EyXHUx''@;'; put 'put ''N2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJp''@;'; put 'put ''ZGllbVBhcnNlOi9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODB8XHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Lyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUiPT09TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVy''@;'; put 'put ''biBNPDEyPyJcdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODAiOiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTc5MFx1MTdkMlx1MTc4NFx1MTdjM1x1MTc5M1x1MTdjMVx1MTdjNyBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbXHUxNzlmXHUxN2QyXHUxN2EyXHUxN2MyXHUxNzgwIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0RGF5OiJbXHUxNzk4XHUxN2QyXHUxNzlmXHUxN2I3XHUxNzliXHUxNzk4''@;'; put 'put ''XHUxN2I3XHUxNzg5IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTE3OWZcdTE3OTRcdTE3ZDJcdTE3OGZcdTE3YjZcdTE3YTBcdTE3Y2RcdTE3OThcdTE3YmJcdTE3OTNdIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MTc5MVx1MTdjMFx1MTc4ZiIscGFzdDoiJXNcdTE3OThcdTE3YmJcdTE3OTMiLHM6Ilx1MTc5NFx1MTdjOVx1MTdiYlx1MTc5M1x1MTdkMlx1MTc5OFx1MTdiNlx1MTc5M1x1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsc3M6''@;'; put 'put ''IiVkIFx1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtbToiJWQgXHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixoOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OThcdTE3YzlcdTE3YzRcdTE3''@;'; put 'put ''ODQiLGhoOiIlZCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGQ6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsZGQ6IiVkIFx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsTToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzgxXHUxN2MyIixNTToiJWQgXHUxNzgx''@;'; put 'put ''XHUxN2MyIix5OiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYiLHl5OiIlZCBcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTE3OTFcdTE3YjhcZHsxLDJ9LyxvcmRpbmFsOiJcdTE3OTFcdTE3''@;'; put 'put ''YjglZCIscHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MTdlMVx1MTdlMlx1MTdlM1x1MTdlNFx1MTdlNVx1MTdlNlx1MTdlN1x1MTdlOFx1MTdlOVx1MTdlMF0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMzg3MjA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGNlNyIsMjoiXHUwY2U4IiwzOiJcdTBj''@;'; put 'put ''ZTkiLDQ6Ilx1MGNlYSIsNToiXHUwY2ViIiw2OiJcdTBjZWMiLDc6Ilx1MGNlZCIsODoiXHUwY2VlIiw5OiJcdTBjZWYiLDA6Ilx1MGNlNiJ9LG09eyJcdTBjZTciOiIxIiwiXHUwY2U4IjoiMiIsIlx1MGNlOSI6IjMiLCJcdTBjZWEiOiI0IiwiXHUwY2ViIjoiNSIsIlx1MGNlYyI6IjYiLCJc''@;'; put 'put ''dTBjZWQiOiI3IiwiXHUwY2VlIjoiOCIsIlx1MGNlZiI6IjkiLCJcdTBjZTYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJrbiIse21vbnRoczoiXHUwYzljXHUwY2E4XHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBj''@;'; put 'put ''YWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1''@;'; put 'put ''MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhOFx1MGNiNVx1MGNjNlx1''@;'; put 'put ''MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGM5Y1x1MGNhOF9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2Nk''@;'; put 'put ''XHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBj''@;'; put 'put ''Y2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyIi5zcGxpdCgiXyIpLG1vbnRoc1Bh''@;'; put 'put ''cnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhY1x1''@;'; put 'put ''MGNjMVx1MGNhN1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZlx1MGNiNVx1MGNiZVx1MGNiMCIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM19cdTBjYWNcdTBjYzFcdTBjYTdfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxX1x1MGNiNlx1MGNjMVx1MGM5NVx1''@;'; put 'put ''MGNjZFx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGNhZFx1MGNiZV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2FlXHUwYzgyX1x1MGNhY1x1MGNjMV9cdTBjOTdcdTBjYzFfXHUwY2I2XHUwY2MxX1x1MGNiNiIuc3BsaXQoIl8iKSxs''@;'; put 'put ''b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjODdcdTBj''@;'; put 'put ''ODJcdTBjYTZcdTBjYzFdIExUIixuZXh0RGF5OiJbXHUwY2E4XHUwY2JlXHUwY2IzXHUwY2M2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwY2E4XHUwY2JmXHUwY2E4XHUwY2NkXHUwY2E4XHUwY2M2XSBMVCIsbGFzdFdlZWs6IltcdTBjOTVcdTBjYzZcdTBjYzJcdTBj''@;'; put 'put ''YThcdTBjYzZcdTBjYWZdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjYThcdTBjODJcdTBjYTRcdTBjYjAiLHBhc3Q6IiVzIFx1MGNiOVx1MGNiZlx1MGM4Mlx1MGNhNlx1MGNjNiIsczoiXHUwYzk1XHUwY2M2XHUwY2IyXHUwY2I1XHUwY2Mx''@;'; put 'put ''IFx1MGM5NVx1MGNjZFx1MGNiN1x1MGNhM1x1MGM5N1x1MGNiM1x1MGNjMSIsc3M6IiVkIFx1MGNiOFx1MGNjNlx1MGM5NVx1MGNjNlx1MGM4Mlx1MGNhMVx1MGNjMVx1MGM5N1x1MGNiM1x1MGNjMSIsbToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNi''@;'; put 'put ''Zlx1MGNiNyIsbW06IiVkIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsaDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsaGg6IiVkIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsZDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1''@;'; put 'put ''MGNhNlx1MGNiZlx1MGNhOCIsZGQ6IiVkIFx1MGNhNlx1MGNiZlx1MGNhOCIsTToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIsTU06IiVkIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIseToiXHUwYzky''@;'; put 'put ''XHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyIseXk6IiVkIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1tcdTBjZTdcdTBjZThcdTBjZTlcdTBjZWFcdTBjZWJcdTBjZWNcdTBjZWRcdTBj''@;'; put 'put ''ZWVcdTBjZWZcdTBjZTZdL2csZnVuY3Rpb24oTyl7cmV0dXJuIG1bT119KX0scG9zdGZvcm1hdDpmdW5jdGlvbihNKXtyZXR1cm4gTS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKE8pe3JldHVybiB4W09dfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1''@;'; put 'put ''MGNiZnxcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzZ8XHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4fFx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEy''@;'; put 'put ''PT09TSYmKE09MCksIlx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI9PT1PP008ND9NOk0rMTI6Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI9PT1PP006Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNj''@;'; put 'put ''ZFx1MGNhOCI9PT1PP00+PTEwP006TSsxMjoiXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2Ij09PU8/TSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTw0PyJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiOk08MTA/Ilx1MGNhY1x1MGNjNlx1''@;'; put 'put ''MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI6TTwxNz8iXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4IjpNPDIwPyJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiOiJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYifSxk''@;'; put 'put ''YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MGNhOFx1MGNjNlx1MGNkNSkvLG9yZGluYWw6ZnVuY3Rpb24oTSl7cmV0dXJuIE0rIlx1MGNhOFx1MGNjNlx1MGNkNSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDg1MzA2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5j''@;'; put 'put ''dGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgia28iLHttb250aHM6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHVjNzdjXHVjNjk0XHVjNzdjX1x1YzZkNFx1YzY5NFx1''@;'; put 'put ''Yzc3Y19cdWQ2NTRcdWM2OTRcdWM3N2NfXHVjMjE4XHVjNjk0XHVjNzdjX1x1YmFhOVx1YzY5NFx1Yzc3Y19cdWFlMDhcdWM2OTRcdWM3N2NfXHVkMWEwXHVjNjk0XHVjNzdjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVh''@;'; put 'put ''ZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZ''@;'; put 'put ''XHViMTQ0IE1NTU0gRFx1Yzc3YyIsTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLExMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIixsOiJZWVlZLk1NLkRELiIsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixsbGw6IllZWVlcdWIxNDQgTU1N''@;'; put 'put ''TSBEXHVjNzdjIEEgaDptbSIsbGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiXHVjNjI0XHViMjk4IExUIixuZXh0RGF5OiJcdWIwYjRcdWM3N2MgTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJcdWM1YjRcdWM4MWMg''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJcdWM5YzBcdWIwOWNcdWM4ZmMgZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHVkNmM0IixwYXN0OiIlcyBcdWM4MDQiLHM6Ilx1YmE4NyBcdWNkMDgiLHNzOiIlZFx1Y2QwOCIsbToiMVx1YmQ4NCIsbW06IiVkXHViZDg0Iixo''@;'; put 'put ''OiJcdWQ1NWMgXHVjMmRjXHVhYzA0IixoaDoiJWRcdWMyZGNcdWFjMDQiLGQ6Ilx1ZDU1OFx1YjhlOCIsZGQ6IiVkXHVjNzdjIixNOiJcdWQ1NWMgXHViMmVjIixNTToiJWRcdWIyZWMiLHk6Ilx1Yzc3YyBcdWIxNDQiLHl5OiIlZFx1YjE0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk''@;'; put 'put ''ezEsMn0oXHVjNzdjfFx1YzZkNHxcdWM4ZmMpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHVjNzdjIjtjYXNlIk0iOnJldHVybiBtKyJcdWM2ZDQiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHVjOGZj''@;'; put 'put ''IjtkZWZhdWx0OnJldHVybiBtfX0sbWVyaWRpZW1QYXJzZTovXHVjNjI0XHVjODA0fFx1YzYyNFx1ZDZjNC8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHVjNjI0XHVkNmM0Ij09PW19LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/Ilx1YzYyNFx1YzgwNCI6Ilx1YzYy''@;'; put 'put ''NFx1ZDZjNCJ9fSl9KEYoMTY2NzYpKX0sODI5OTU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUw''@;'; put 'put ''NjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sbGU9''@;'; put 'put ''WyJcdTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUw''@;'; put 'put ''NjQ2IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2XHUwNjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUw''@;'; put 'put ''NmNjXHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2''@;'; put 'put ''NDUiLCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1Il07YWUuZGVmaW5lTG9jYWxlKCJrdSIse21vbnRoczpsZSxtb250aHNTaG9ydDpsZSx3ZWVrZGF5czoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUw''@;'; put 'put ''NjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUw''@;'; put 'put ''NjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUw''@;'; put 'put ''NjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNl''@;'; put 'put ''XHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYz''@;'; put 'put ''NFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUy''@;'; put 'put ''MDBjfFx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihPKXtyZXR1cm4vXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KE8pfSxtZXJpZGllbTpmdW5jdGlvbihPLFIseil7cmV0dXJuIE88MTI/Ilx1''@;'; put 'put ''MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1''@;'; put 'put ''MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1''@;'; put 'put ''MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1''@;'; put 'put ''MDZjZVx1MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIw''@;'; put 'put ''MGNcdTA2NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1''@;'; put 'put ''MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgi''@;'; put 'put ''LGRkOiIlZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5''@;'; put 'put ''OiIlZCBcdTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFIpe3JldHVybiBtW1JdfSkucmVwbGFjZSgv''@;'; put 'put ''XHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFIpe3JldHVybiB4W1JdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDg3Nzk6ZnVuY3Rpb24oYXQsSWUs''@;'; put 'put ''Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezA6Ii1cdTA0NDdcdTA0YWYiLDE6Ii1cdTA0NDdcdTA0MzgiLDI6Ii1cdTA0NDdcdTA0MzgiLDM6Ii1cdTA0NDdcdTA0YWYiLDQ6Ii1cdTA0NDdcdTA0YWYiLDU6Ii1cdTA0NDdcdTA0MzgiLDY6Ii1cdTA0NDdcdTA0NGIiLDc6''@;'; put 'put ''Ii1cdTA0NDdcdTA0MzgiLDg6Ii1cdTA0NDdcdTA0MzgiLDk6Ii1cdTA0NDdcdTA0NDMiLDEwOiItXHUwNDQ3XHUwNDQzIiwyMDoiLVx1MDQ0N1x1MDQ0YiIsMzA6Ii1cdTA0NDdcdTA0NDMiLDQwOiItXHUwNDQ3XHUwNDRiIiw1MDoiLVx1MDQ0N1x1MDRhZiIsNjA6Ii1cdTA0NDdcdTA0NGIi''@;'; put 'put ''LDcwOiItXHUwNDQ3XHUwNDM4Iiw4MDoiLVx1MDQ0N1x1MDQzOCIsOTA6Ii1cdTA0NDdcdTA0NDMiLDEwMDoiLVx1MDQ0N1x1MDRhZiJ9O2FlLmRlZmluZUxvY2FsZSgia3kiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQ0Y19cdTA0NDRcdTA0MzVcdTA0MzJc''@;'; put 'put ''dTA0NDBcdTA0MzBcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0''@;'; put 'put ''MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDRjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQz''@;'; put 'put ''OFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUw''@;'; put 'put ''NDE2XHUwNDM1XHUwNDNhXHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxNFx1MDRhZlx1MDQzOVx1MDQ0OFx1MDRlOVx1MDQzY1x1MDQzMVx1MDRhZl9cdTA0MjhcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDI4XHUwNDMwXHUwNDQwXHUw''@;'; put 'put ''NDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQxMVx1MDQzNVx1MDQzOVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTZcdTA0NDNcdTA0M2NcdTA0MzBfXHUwNDE4XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6''@;'; put 'put ''Ilx1MDQxNlx1MDQzNVx1MDQzYV9cdTA0MTRcdTA0YWZcdTA0MzlfXHUwNDI4XHUwNDM1XHUwNDM5X1x1MDQyOFx1MDQzMFx1MDQ0MF9cdTA0MTFcdTA0MzVcdTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQxOFx1MDQ0OFx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDE2''@;'; put 'put ''XHUwNDNhX1x1MDQxNFx1MDQzOV9cdTA0MjhcdTA0MzlfXHUwNDI4XHUwNDQwX1x1MDQxMVx1MDQzOV9cdTA0MTZcdTA0M2NfXHUwNDE4XHUwNDQ4Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDRhZlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQw''@;'; put 'put ''XHUwNDQyXHUwNDM1XHUwNGEzIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDRkXHUwNDRkIFx1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQi''@;'; put 'put ''LGxhc3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNGU5XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNGFmXHUwNDNkXHUwNGFmXSBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxy''@;'; put 'put ''ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM4XHUwNDQ3XHUwNDM4XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0M2NcdTA0NDNcdTA0NDBcdTA0NDNcdTA0M2QiLHM6Ilx1MDQzMVx1MDQzOFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzNSBcdTA0NDFcdTA0MzVcdTA0''@;'; put 'put ''M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0YWZcdTA0M2RcdTA0ZTlcdTA0NDIiLGg6Ilx1''@;'; put 'put ''MDQzMVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0''@;'; put 'put ''MCBcdTA0MzBcdTA0MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDdcdTA0Mzh8XHUwNDQ3XHUwNDRi''@;'; put 'put ''fFx1MDQ0N1x1MDRhZnxcdTA0NDdcdTA0NDMpLyxvcmRpbmFsOmZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUrKHhbbGVdfHx4W2xlJTEwXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDYyMDU3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlv''@;'; put 'put ''bihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgoUix6LEssSSl7dmFyIGs9e206WyJlbmcgTWludXR0IiwiZW5nZXIgTWludXR0Il0saDpbImVuZyBTdG9ubiIsImVuZ2VyIFN0b25uIl0sZDpbImVlbiBEYWciLCJlbmdlbSBEYWciXSxNOlsiZWUgTW91bnQiLCJlbmdlbSBNb3VudCJdLHk6''@;'; put 'put ''WyJlZSBKb2VyIiwiZW5nZW0gSm9lciJdfTtyZXR1cm4gej9rW0tdWzBdOmtbS11bMV19ZnVuY3Rpb24gTShSKXtpZihSPXBhcnNlSW50KFIsMTApLGlzTmFOKFIpKXJldHVybiExO2lmKFI8MClyZXR1cm4hMDtpZihSPDEwKXJldHVybiA0PD1SJiZSPD03O2lmKFI8MTAwKXt2YXIgej1SJTEw''@;'; put 'put ''O3JldHVybiBNKDA9PT16P1IvMTA6eil9aWYoUjwxZTQpe2Zvcig7Uj49MTA7KVIvPTEwO3JldHVybiBNKFIpfXJldHVybiBNKFIvPTFlMyl9YWUuZGVmaW5lTG9jYWxlKCJsYiIse21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRlcnpfQWJyXHhlYmxsX01lZV9KdW5pX0p1bGlfQXVndXN0''@;'; put 'put ''X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoi''@;'; put 'put ''U29ubmRlZ19NXHhlOWluZGVnX0RceGVibnNjaGRlZ19NXHhlYnR0d29jaF9Eb25uZXNjaGRlZ19GcmVpZGVnX1NhbXNjaGRlZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTVx4ZTkuX0RceGViLl9NXHhlYi5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNv''@;'; put 'put ''X01ceGU5X0RceGViX01ceGViX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0gW0F1ZXJdIixMVFM6Ikg6bW06c3MgW0F1ZXJdIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZ''@;'; put 'put ''WSBIOm1tIFtBdWVyXSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXV0IHVtXSBMVCIsc2FtZUVsc2U6IkwiLG5leHREYXk6IltNdWVyIHVtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCIsbGFzdERheToiW0dceGVic2No''@;'; put 'put ''dGVyIHVtXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQiO2RlZmF1bHQ6cmV0dXJuIltMZXNjaHRlXSBkZGRkIFt1bV0gTFQifX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0''@;'; put 'put ''aW9uIG0oUil7cmV0dXJuIE0oUi5zdWJzdHIoMCxSLmluZGV4T2YoIiAiKSkpPyJhICIrUjoiYW4gIitSfSxwYXN0OmZ1bmN0aW9uIGxlKFIpe3JldHVybiBNKFIuc3Vic3RyKDAsUi5pbmRleE9mKCIgIikpKT8idmlydSAiK1I6InZpcnVuICIrUn0sczoiZSBwdWVyIFNla29ubmVuIixzczoi''@;'; put 'put ''JWQgU2Vrb25uZW4iLG06eCxtbToiJWQgTWludXR0ZW4iLGg6eCxoaDoiJWQgU3Rvbm5lbiIsZDp4LGRkOiIlZCBEZWVnIixNOngsTU06IiVkIE1ceGU5aW50Iix5OngseXk6IiVkIEpvZXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7''@;'; put 'put ''ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcxOTI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJsbyIse21vbnRoczoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1''@;'; put 'put ''MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIw''@;'; put 'put ''XHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlcdTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBl''@;'; put 'put ''YjIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRc''@;'; put 'put ''dTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1MGViYlx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIy''@;'; put 'put ''X1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBlYWRcdTBlYjJcdTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVh''@;'; put 'put ''ZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZTk3XHUwZWI0''@;'; put 'put ''XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBlODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJcdTBlOTdfXHUwZTg4X1x1MGVhZFx1MGU4NF9cdTBlOWVfXHUwZTllXHUwZWFiX1x1MGVhYVx1MGU4MV9cdTBlYWEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''L01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiXHUwZWE3XHUwZWIxXHUwZTk5ZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMFx1MGU4YVx1MGViYlx1MGVjOVx1MGViMnxc''@;'; put 'put ''dTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIlx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4NyI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDEyPyJcdTBlOTVcdTBlYWRcdTBlOTlcdTBl''@;'; put 'put ''YzBcdTBlOGFcdTBlYmJcdTBlYzlcdTBlYjIiOiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHREYXk6Iltc''@;'; put 'put ''dTBlYTFcdTBlYjdcdTBlYzlcdTBlYWRcdTBlYjdcdTBlYzhcdTBlOTlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVkY1x1MGVjOVx1MGViMlx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3REYXk6Iltc''@;'; put 'put ''dTBlYTFcdTBlYjdcdTBlYzlcdTBlYTdcdTBlYjJcdTBlOTlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVjMVx1MGVhNVx1MGVjOVx1MGVhN1x1MGU5OVx1MGViNVx1MGVjOVx1MGVj''@;'; put 'put ''MFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGVhZFx1MGViNVx1MGU4MSAlcyIscGFzdDoiJXNcdTBlOWNcdTBlYzhcdTBlYjJcdTBlOTlcdTBlYTFcdTBlYjIiLHM6Ilx1MGU5YVx1MGVjZFx1MGVjOFx1MGVjMFx1MGU5N1x1''@;'; put 'put ''MGViYlx1MGVjOFx1MGViMlx1MGVjM1x1MGU5NFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsc3M6IiVkIFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbToiMSBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG1tOiIlZCBcdTBlOTlcdTBlYjJcdTBl''@;'; put 'put ''OTdcdTBlYjUiLGg6IjEgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixoaDoiJWQgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixkOiIxIFx1MGVhMVx1MGViN1x1MGVjOSIsZGQ6IiVkIFx1MGVhMVx1MGViN1x1MGVjOSIsTToi''@;'; put 'put ''MSBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLE1NOiIlZCBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLHk6IjEgXHUwZTliXHUwZWI1Iix5eToiJWQgXHUwZTliXHUwZWI1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKFx1MGU5N1x1MGViNVx1MGVjOClcZHsxLDJ9''@;'; put 'put ''LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVybiJcdTBlOTdcdTBlYjVcdTBlYzgiK219fSl9KEYoMTY2NzYpKX0sMTU0MzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1''@;'; put 'put ''bmRlcyIsbToibWludXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0XHUwMTE5IixtbToibWludXRcdTAxMTdzX21pbnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJk''@;'; put 'put ''aWVuYV9kaWVub3NfZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVuXHUwMTczX2RpZW5hcyIsTToibVx1MDExN251b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEyZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUw''@;'; put 'put ''MTczX21ldHVzIix5eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07ZnVuY3Rpb24gbGUoSyxJLGssRSl7cmV0dXJuIEk/TyhrKVswXTpFP08oaylbMV06TyhrKVsyXX1mdW5jdGlvbiBNKEspe3JldHVybiBLJTEwPT0wfHxLPjEwJiZLPDIwfWZ1bmN0aW9uIE8oSyl7cmV0dXJuIHhbS10uc3Bs''@;'; put 'put ''aXQoIl8iKX1mdW5jdGlvbiBSKEssSSxrLEUpe3ZhciBqPUsrIiAiO3JldHVybiAxPT09Sz9qK2xlKDAsSSxrWzBdLEUpOkk/aisoTShLKT9PKGspWzFdOk8oaylbMF0pOkU/aitPKGspWzFdOmorKE0oSyk/TyhrKVsxXTpPKGspWzJdKX1hZS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntm''@;'; put 'put ''b3JtYXQ6InNhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kXHUwMTdlaW9fZ2VndVx1MDE3ZVx1MDExN3NfYmlyXHUwMTdlZWxpb19saWVwb3NfcnVncGpcdTAxNmJcdTAxMGRpb19ydWdzXHUwMTE3am9fc3BhbGlvX2xhcGtyaVx1MDEwZGlvX2dydW9kXHUwMTdlaW8iLnNwbGl0KCJfIiksc3Rh''@;'; put 'put ''bmRhbG9uZToic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndVx1MDE3ZVx1MDExN19iaXJcdTAxN2VlbGlzX2xpZXBhX3J1Z3BqXHUwMTZidGlzX3J1Z3NcdTAxMTdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXFtbXlxb''@;'; put 'put ''XF1dKlxdfFxzKStNTU1NP3xNTU1NPyhcW1teXFtcXV0qXF18XHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJzYXVfdmFzX2tvdl9iYWxfZ2VnX2Jpcl9saWVfcmdwX3Jnc19zcGFfbGFwX2dyZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiJzZWttYWRpZW5cdTAxMmZfcGlybWFkaWVu''@;'; put 'put ''XHUwMTJmX2FudHJhZGllblx1MDEyZl90cmVcdTAxMGRpYWRpZW5cdTAxMmZfa2V0dmlydGFkaWVuXHUwMTJmX3Blbmt0YWRpZW5cdTAxMmZfXHUwMTYxZVx1MDE2MXRhZGllblx1MDEyZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5p''@;'; put 'put ''c190cmVcdTAxMGRpYWRpZW5pc19rZXR2aXJ0YWRpZW5pc19wZW5rdGFkaWVuaXNfXHUwMTYxZVx1MDE2MXRhZGllbmlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhIOm1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fXHUwMTYwZVx1MDE2MSIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c01pbjoiU19QX0FfVF9LX1BuX1x1MDE2MCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsTExMOiJZWVlZ''@;'; put 'put ''IFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsTExMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0iLGw6IllZWVktTU0tREQiLGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0i''@;'; put 'put ''LGxsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkLCBISDptbSBbdmFsLl0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MGlhbmRpZW5dIExUIixuZXh0RGF5OiJbUnl0b2pdIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW1Zha2FyXSBMVCIsbGFzdFdlZWs6IltQcmFc''@;'; put 'put ''dTAxMTdqdXNcdTAxMmZdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvICVzIixwYXN0OiJwcmllXHUwMTYxICVzIixzOmZ1bmN0aW9uIG0oSyxJLGssRSl7cmV0dXJuIEk/ImtlbGlvcyBzZWt1bmRcdTAxMTdzIjpFPyJrZWxpXHUwMTczIHNla3VuZFx1''@;'; put 'put ''MDE3ZWlcdTAxNzMiOiJrZWxpYXMgc2VrdW5kZXMifSxzczpSLG06bGUsbW06UixoOmxlLGhoOlIsZDpsZSxkZDpSLE06bGUsTU06Uix5OmxlLHl5OlJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKEspe3JldHVybiBLKyItb2ppIn0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNTMzNjM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9e3NzOiJzZWt1bmRlc19zZWt1bmRcdTAxMTNtX3Nla3VuZGVfc2VrdW5kZXMiLnNwbGl0KCJfIiksbToibWluXHUwMTZidGVzX21pblx1''@;'; put 'put ''MDE2YnRcdTAxMTNtX21pblx1MDE2YnRlX21pblx1MDE2YnRlcyIuc3BsaXQoIl8iKSxtbToibWluXHUwMTZidGVzX21pblx1MDE2YnRcdTAxMTNtX21pblx1MDE2YnRlX21pblx1MDE2YnRlcyIuc3BsaXQoIl8iKSxoOiJzdHVuZGFzX3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3Bs''@;'; put 'put ''aXQoIl8iKSxoaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0KCJfIiksZDoiZGllbmFzX2RpZW5cdTAxMDFtX2RpZW5hX2RpZW5hcyIuc3BsaXQoIl8iKSxkZDoiZGllbmFzX2RpZW5cdTAxMDFtX2RpZW5hX2RpZW5hcyIuc3BsaXQoIl8iKSxNOiJtXHUwMTEz''@;'; put 'put ''bmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSxNTToibVx1MDExM25lXHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIikseToiZ2FkYV9nYWRp''@;'; put 'put ''ZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpLHl5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIil9O2Z1bmN0aW9uIG0oeixLLEkpe3JldHVybiBJP0slMTA9PTEmJkslMTAwIT0xMT96WzJdOnpbM106SyUxMD09MSYmSyUxMDAhPTExP3pbMF06elsxXX1mdW5jdGlvbiBsZSh6LEss''@;'; put 'put ''SSl7cmV0dXJuIHorIiAiK20oeFtJXSx6LEspfWZ1bmN0aW9uIE0oeixLLEkpe3JldHVybiBtKHhbSV0seixLKX1hZS5kZWZpbmVMb2NhbGUoImx2Iix7bW9udGhzOiJqYW52XHUwMTAxcmlzX2ZlYnJ1XHUwMTAxcmlzX21hcnRzX2Fwclx1MDEyYmxpc19tYWlqc19qXHUwMTZibmlqc19qXHUw''@;'; put 'put ''MTZibGlqc19hdWd1c3RzX3NlcHRlbWJyaXNfb2t0b2JyaXNfbm92ZW1icmlzX2RlY2VtYnJpcyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21haV9qXHUwMTZibl9qXHUwMTZibF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdlx1''@;'; put 'put ''MDExM3RkaWVuYV9waXJtZGllbmFfb3RyZGllbmFfdHJlXHUwMTYxZGllbmFfY2V0dXJ0ZGllbmFfcGlla3RkaWVuYV9zZXN0ZGllbmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdl9QX09fVF9DX1BrX1MiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkuIixMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0iLExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tIixMTExMOiJZWVlZLiBbZ2Fk''@;'; put 'put ''YV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDE2MG9kaWVuIHB1bGtzdGVuXSBMVCIsbmV4dERheToiW1JcdTAxMmJ0IHB1bGtzdGVuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1bGtzdGVuXSBMVCIsbGFzdERheToiW1Zha2FyIHB1bGtzdGVuXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6IltQYWdcdTAxMDFqdVx1MDE2MVx1MDEwMV0gZGRkZCBbcHVsa3N0ZW5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwXHUwMTEzYyAlcyIscGFzdDoicGlybXMgJXMiLHM6ZnVuY3Rpb24gTyh6LEspe3JldHVybiBLPyJkYVx1MDE3ZWFzIHNla3Vu''@;'; put 'put ''ZGVzIjoiZGFcdTAxN2VcdTAxMDFtIHNla3VuZFx1MDExM20ifSxzczpsZSxtOk0sbW06bGUsaDpNLGhoOmxlLGQ6TSxkZDpsZSxNLE1NOmxlLHk6TSx5eTpsZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShG''@;'; put 'put ''KDE2Njc2KSl9LDcyOTM5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXt3b3Jkczp7c3M6WyJzZWt1bmQiLCJzZWt1bmRhIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwi''@;'; put 'put ''bWludXRhIl0saDpbImplZGFuIHNhdCIsImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNTTpbIm1qZXNlYyIsIm1qZXNlY2EiLCJtamVzZWNpIl0seXk6WyJnb2RpbmEiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdy''@;'; put 'put ''YW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihsZSxNKXtyZXR1cm4gMT09PWxlP01bMF06bGU+PTImJmxlPD00P01bMV06TVsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGxlLE0sTyl7dmFyIFI9eC53b3Jkc1tPXTtyZXR1cm4gMT09PU8ubGVuZ3RoP00/UlswXTpSWzFdOmxlKyIgIit4LmNvcnJlY3RH''@;'; put 'put ''cmFtbWF0aWNhbENhc2UobGUsUil9fTthZS5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9m''@;'; put 'put ''ZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6''@;'; put 'put ''bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixu''@;'; put 'put ''ZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2Ug''@;'; put 'put ''NDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3By''@;'; put 'put ''b1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQi''@;'; put 'put ''XVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczp4LnRyYW5zbGF0ZSxtOngudHJhbnNsYXRlLG1tOngudHJhbnNsYXRlLGg6eC50cmFuc2xhdGUsaGg6eC50cmFuc2xh''@;'; put 'put ''dGUsZDoiZGFuIixkZDp4LnRyYW5zbGF0ZSxNOiJtamVzZWMiLE1NOngudHJhbnNsYXRlLHk6ImdvZGludSIseXk6eC50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwzODIx''@;'; put 'put ''MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRlLXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hc''@;'; put 'put ''dTAxNGRuZ29pbmdvaV9IZXJlLXR1cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdhLVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJl''@;'; put 'put ''X01haHVfV2hpLW51X1doaS1yYV9IYWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4''@;'; put 'put ''Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSXHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1Bh''@;'; put 'put ''cmFpcmVfSFx1MDEwMXRhcmVpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwg''@;'; put 'put ''aV0gTFQiLG5leHREYXk6IlthcG9wbyBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBh''@;'; put 'put ''c3Q6IiVzIGkgbXVhIixzOiJ0ZSBoXHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEi''@;'; put 'put ''LHk6ImhlIHRhdSIseXk6IiVkIHRhdSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDY5NzE4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Fl''@;'; put 'put ''LmRlZmluZUxvY2FsZSgibWsiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1''@;'; put 'put ''MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQw''@;'; put 'put ''XHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRo''@;'; put 'put ''c1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0''@;'; put 'put ''MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQz''@;'; put 'put ''NVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0''@;'; put 'put ''NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUwNDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQzNV9cdTA0NDdcdTA0''@;'; put 'put ''MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxpdCgiXyIpLGxvbmdE''@;'; put 'put ''YXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVcdTA0M2RcdTA0MzVc''@;'; put 'put ''dTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIsbmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixuZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQz''@;'; put 'put ''MCBcdTA0MzJcdTA0M2VdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXHUw''@;'; put 'put ''NDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0MzVcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0''@;'; put 'put ''M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNl''@;'; put 'put ''XHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBs''@;'; put 'put ''ZT1tJTEwLE09bSUxMDA7cmV0dXJuIDA9PT1tP20rIi1cdTA0MzVcdTA0MzIiOjA9PT1NP20rIi1cdTA0MzVcdTA0M2QiOk0+MTAmJk08MjA/bSsiLVx1MDQ0Mlx1MDQzOCI6MT09PWxlP20rIi1cdTA0MzJcdTA0MzgiOjI9PT1sZT9tKyItXHUwNDQwXHUwNDM4Ijo3PT09bGV8fDg9PT1sZT9t''@;'; put 'put ''KyItXHUwNDNjXHUwNDM4IjptKyItXHUwNDQyXHUwNDM4In0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTA1NjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJtbCIse21vbnRoczoiXHUwZDFjXHUwZDI4XHUw''@;'; put 'put ''ZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmVcdTBkM2VcdTBkN2NcdTBkMWFcdTBkNGRcdTBkMWFcdTBkNGRfXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmXHUwZDdkX1x1MGQyZVx1''@;'; put 'put ''MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4X1x1MGQxM1x1MGQxN1x1MGQzOFx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZF9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkMDJcdTBkMmNc''@;'; put 'put ''dTBkN2NfXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiXHUwZDJjXHUwZDdjX1x1MGQyOFx1MGQzNVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDJcdTBkMmNcdTBkN2MiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGQxY1x1MGQyOFx1MGQ0MS5fXHUw''@;'; put 'put ''ZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxLl9cdTBkMmVcdTBkM2VcdTBkN2MuX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZi5fXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDguX1x1MGQxM1x1''@;'; put 'put ''MGQxNy5fXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxLl9cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGIuX1x1MGQyOFx1MGQzNVx1MGQwMi5fXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtk''@;'; put 'put ''YXlzOiJcdTBkMWVcdTBkM2VcdTBkMmZcdTBkMzFcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDMzXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNVx1MGQzZVx1MGQzNFx1MGQ0ZFx1''@;'; put 'put ''MGQxYV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkMjhcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQzM1x1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1''@;'; put 'put ''MGQ0ZFx1MGQxYV9cdTBkMzZcdTBkMjhcdTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDdjX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQ3ZV9cdTBkMWFcdTBkNGFcdTBk''@;'; put 'put ''MzVcdTBkNGRcdTBkMzVfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDdiX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQwMl9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZfXHUwZDM2XHUwZDI4XHUwZDNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBkMWVc''@;'; put 'put ''dTBkM2VfXHUwZDI0XHUwZDNmX1x1MGQxYVx1MGQ0YV9cdTBkMmNcdTBkNDFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlX1x1MGQzNVx1MGQ0Nl9cdTBkMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTFRTOiJBIGg6bW06c3MgLVx1MGQy''@;'; put 'put ''OFx1MGQ0MSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkMDdcdTBkMjhcdTBk''@;'; put 'put ''NGRcdTBkMjhcdTBkNGRdIExUIixuZXh0RGF5OiJbXHUwZDI4XHUwZDNlXHUwZDMzXHUwZDQ2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDMyXHUwZDQ2XSBMVCIsbGFzdFdlZWs6IltcdTBkMTVcdTBkMzRcdTBkM2ZcdTBk''@;'; put 'put ''MWVcdTBkNGRcdTBkMWVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiLHBhc3Q6IiVzIFx1MGQyZVx1MGQ0MVx1MGQ3Ylx1MGQyYVx1MGQ0ZCIsczoiXHUwZDA1XHUwZDdk''@;'; put 'put ''XHUwZDJhIFx1MGQyOFx1MGQzZlx1MGQyZVx1MGQzZlx1MGQzN1x1MGQxOVx1MGQ0ZFx1MGQxOVx1MGQ3ZSIsc3M6IiVkIFx1MGQzOFx1MGQ0Nlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ3Ylx1MGQyMVx1MGQ0ZCIsbToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQzZlx1MGQyOFx1MGQz''@;'; put 'put ''Zlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsbW06IiVkIFx1MGQyZVx1MGQzZlx1MGQyOFx1MGQzZlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsaDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ0Mlx1MGQ3YyIsaGg6IiVkIFx1''@;'; put 'put ''MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ0Mlx1MGQ3YyIsZDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsZGQ6IiVkIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsTToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1''@;'; put 'put ''MGQyZVx1MGQzZVx1MGQzOFx1MGQwMiIsTU06IiVkIFx1MGQyZVx1MGQzZVx1MGQzOFx1MGQwMiIseToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiIseXk6IiVkIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGQzMFx1MGQz''@;'; put 'put ''ZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZnxcdTBkMzBcdTBkM2VcdTBkMzVcdTBkM2ZcdTBkMzJcdTBkNDZ8XHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZHxcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBk''@;'; put 'put ''NGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDJ8XHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmL2ksbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiPT09bGUmJm0+PTR8''@;'; put 'put ''fCJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIj09PWxlfHwiXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIj09PWxlP20rMTI6bX0sbWVyaWRpZW06ZnVu''@;'; put 'put ''Y3Rpb24obSxsZSxNKXtyZXR1cm4gbTw0PyJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiOm08MTI/Ilx1MGQzMFx1MGQzZVx1MGQzNVx1MGQzZlx1MGQzMlx1MGQ0NiI6bTwxNz8iXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1''@;'; put 'put ''MGQ0ZFx1MGQxZVx1MGQ0ZCI6bTwyMD8iXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIjoiXHUwZDMwXHUwZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmIn19KX0oRigxNjY3NikpfSw2ODkyOTpmdW5jdGlvbihhdCxJZSxGKXsh''@;'; put 'put ''ZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB4KGxlLE0sTyxSKXtzd2l0Y2goTyl7Y2FzZSJzIjpyZXR1cm4gTT8iXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0NVx1MDQ0ZFx1''@;'; put 'put ''MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiO2Nhc2Uic3MiOnJldHVybiBsZSsoTT8iIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0''@;'; put 'put ''M2RcdTA0MzRcdTA0NGJcdTA0M2QiKTtjYXNlIm0iOmNhc2UibW0iOnJldHVybiBsZSsoTT8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBsZSsoTT8i''@;'; put 'put ''IFx1MDQ0Nlx1MDQzMFx1MDQzMyI6IiBcdTA0NDZcdTA0MzBcdTA0MzNcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNlImQiOmNhc2UiZGQiOnJldHVybiBsZSsoTT8iIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI6IiBcdTA0ZTlcdTA0MzRcdTA0NDBcdTA0MzhcdTA0MzlcdTA0M2QiKTtjYXNl''@;'; put 'put ''Ik0iOmNhc2UiTU0iOnJldHVybiBsZSsoTT8iIFx1MDQ0MVx1MDQzMFx1MDQ0MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBsZSsoTT8iIFx1MDQzNlx1MDQzOFx1MDQzYiI6IiBcdTA0MzZcdTA0MzhcdTA0M2JcdTA0MzhcdTA0''@;'; put 'put ''MzlcdTA0M2QiKTtkZWZhdWx0OnJldHVybiBsZX19YWUuZGVmaW5lTG9jYWxlKCJtbiIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRc''@;'; put 'put ''dTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMy''@;'; put 'put ''XHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQz''@;'; put 'put ''NFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0''@;'; put 'put ''MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUw''@;'; put 'put ''NDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1''@;'; put 'put ''XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBfMiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBc''@;'; put 'put ''dTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFcdTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1''@;'; put 'put ''XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1''@;'; put 'put ''MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQxYlx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1''@;'; put 'put ''MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoi''@;'; put 'put ''WVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVy''@;'; put 'put ''aWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVuY3Rpb24obGUpe3JldHVybiJcdTA0YWVcdTA0MjUiPT09bGV9LG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDEyPyJcdTA0YWVcdTA0ZTgiOiJcdTA0YWVcdTA0MjUifSxjYWxlbmRhcjp7''@;'; put 'put ''c2FtZURheToiW1x1MDRlOFx1MDQzZFx1MDRlOVx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLG5leHREYXk6IltcdTA0MWNcdTA0MzBcdTA0NDBcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDhdIExUIixuZXh0V2VlazoiW1x1MDQxOFx1MDQ0MFx1MDQ0ZFx1MDQ0NV0gZGRkZCBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MDRlOFx1MDQ0N1x1MDQzOFx1MDQzM1x1MDQzNFx1MDRlOVx1MDQ0MF0gTFQiLGxhc3RXZWVrOiJbXHUwNGU4XHUwNDNkXHUwNDMzXHUwNGU5XHUwNDQwXHUwNDQxXHUwNGU5XHUwNDNkXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBc''@;'; put 'put ''dTA0MzRcdTA0MzBcdTA0NDBcdTA0MzBcdTA0MzAiLHBhc3Q6IiVzIFx1MDRlOVx1MDQzY1x1MDQzZFx1MDRlOSIsczp4LHNzOngsbTp4LG1tOngsaDp4LGhoOngsZDp4LGRkOngsTTp4LE1NOngseTp4LHl5Onh9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwNGU5XHUwNDM0''@;'; put 'put ''XHUwNGU5XHUwNDQwLyxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3N3aXRjaChNKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBsZSsiIFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MCI7ZGVmYXVsdDpyZXR1cm4gbGV9fX0pfShGKDE2Njc2KSl9LDg0ODgwOmZ1bmN0aW9uKGF0LEll''@;'; put 'put ''LEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoiXHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxtPXsiXHUwOTY3IjoiMSIs''@;'; put 'put ''Ilx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9O2Z1bmN0aW9uIGxlKE8sUix6LEspe3ZhciBJPSIiO2lmKFIpc3dpdGNoKHope2Nh''@;'; put 'put ''c2UicyI6ST0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6ST0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5''@;'; put 'put ''MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOkk9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpJPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImhoIjpJPSIlZCBcdTA5MjRcdTA5M2VcdTA5Mzgi''@;'; put 'put ''O2JyZWFrO2Nhc2UiZCI6ST0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJlYWs7Y2FzZSJkZCI6ST0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2Ui''@;'; put 'put ''O2JyZWFrO2Nhc2UiTU0iOkk9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7Y2FzZSJ5IjpJPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpJPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVs''@;'; put 'put ''c2Ugc3dpdGNoKHope2Nhc2UicyI6ST0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6ST0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztj''@;'; put 'put ''YXNlIm0iOkk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOkk9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJoIjpJPSJcdTA5MGZcdTA5MTVcdTA5''@;'; put 'put ''M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpJPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6ST0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6''@;'; put 'put ''ST0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOkk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOkk9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1''@;'; put 'put ''MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpJPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpJPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBJ''@;'; put 'put ''LnJlcGxhY2UoLyVkL2ksTyl9YWUuZGVmaW5lTG9jYWxlKCJtciIse21vbnRoczoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVc''@;'; put 'put ''dTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUwOTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4X1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5''@;'; put 'put ''NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5''@;'; put 'put ''MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEuX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUw''@;'; put 'put ''OTJlXHUwOTQ3Ll9cdTA5MWNcdTA5NDJcdTA5MjguX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OC5fXHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRk''@;'; put 'put ''XHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5''@;'; put 'put ''MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUw''@;'; put 'put ''OTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM19cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUw''@;'; put 'put ''OTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1''@;'; put 'put ''MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExUUzoiQSBoOm1tOnNzIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N''@;'; put 'put ''TSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkw''@;'; put 'put ''OVx1MDkyNlx1MDk0ZFx1MDkyZlx1MDkzZV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJlXHUwOTNlXHUwOTE3XHUwOTQwXHUwOTMyXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiJXNcdTA5MmVcdTA5MjdcdTA5NGRcdTA5MmZcdTA5NDciLHBhc3Q6IiVzXHUwOTJhXHUwOTQyXHUwOTMwXHUwOTRkXHUwOTM1XHUwOTQwIixzOmxlLHNzOmxlLG06bGUsbW06bGUsaDpsZSxoaDpsZSxkOmxlLGRkOmxlLE06bGUsTU06bGUseTpsZSx5eTpsZX0scHJlcGFyc2U6''@;'; put 'put ''ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihSKXtyZXR1cm4gbVtSXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE8pe3JldHVybiBPLnJlcGxhY2UoL1xk''@;'; put 'put ''L2csZnVuY3Rpb24oUil7cmV0dXJuIHhbUl19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3fFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDB8XHUwOTM4XHUwOTNlXHUwOTJmXHUw''@;'; put 'put ''OTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE8sUil7cmV0dXJuIDEyPT09TyYmKE89MCksIlx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI9PT1SfHwiXHUwOTM4XHUwOTE1''@;'; put 'put ''XHUwOTNlXHUwOTMzXHUwOTQwIj09PVI/TzoiXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIj09PVJ8fCJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09Unx8Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCI9''@;'; put 'put ''PT1SP08+PTEyP086TysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKE8sUix6KXtyZXR1cm4gTz49MCYmTzw2PyJcdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciOk88MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6TzwxNz8iXHUwOTI2XHUwOTQxXHUwOTJhXHUw''@;'; put 'put ''OTNlXHUwOTMwXHUwOTQwIjpPPDIwPyJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw0MjA3NDpmdW5jdGlvbihhdCxJ''@;'; put 'put ''ZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm1zLW15Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0to''@;'; put 'put ''YV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3Vs''@;'; put 'put ''XSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sbGUpe3JldHVybiAxMj09PW0mJihtPTApLCJwYWdpIj09PWxlP206InRlbmdhaGFy''@;'; put 'put ''aSI9PT1sZT9tPj0xMT9tOm0rMTI6InBldGFuZyI9PT1sZXx8Im1hbGFtIj09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDExPyJwYWdpIjptPDE1PyJ0ZW5nYWhhcmkiOm08MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltFc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIlZCBzYWF0IixtOiJzZW1pbml0IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVs''@;'; put 'put ''YW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDYzMTkzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgibXMiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFj''@;'; put 'put ''X0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNu''@;'; put 'put ''aW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM''@;'; put 'put ''VDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5n''@;'; put 'put ''fG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksInBhZ2kiPT09bGU/bToidGVuZ2FoYXJpIj09PWxlP20+PTExP206bSsxMjoicGV0YW5nIj09PWxlfHwibWFsYW0iPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUs''@;'; put 'put ''TSl7cmV0dXJuIG08MTE/InBhZ2kiOm08MTU/InRlbmdhaGFyaSI6bTwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJb''@;'; put 'put ''S2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1t''@;'; put 'put ''OiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNTQwODI6ZnVuY3Rpb24oYXQsSWUs''@;'; put 'put ''Ril7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJtdCIse21vbnRoczoiSmFubmFyX0ZyYXJfTWFyenVfQXByaWxfTWVqanVfXHUwMTIwdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpXHUwMTBiZW1icnUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Ikphbl9GcmFfTWFyX0Fwcl9NZWpfXHUwMTIwdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EaVx1MDEwYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSWwtXHUwMTI2YWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmdcdTAxMjdhX0lsLVx1MDEyNmFtaXNfSWwtXHUwMTIw''@;'; put 'put ''aW1nXHUwMTI3YV9Jcy1TaWJ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDEyNmFkX1RuZV9UbGlfRXJiX1x1MDEyNmFtX1x1MDEyMGltX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMTI2YV9Ubl9UbF9Fcl9cdTAxMjZhX1x1MDEyMGlfU2kiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWxsdW0gZmlsLV1MVCIsbmV4''@;'; put 'put ''dERheToiW0dcdTAxMjdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYVx1MDEyNyBmaWwtXUxUIixsYXN0V2VlazoiZGRkZCBbbGkgZ1x1MDEyN2FkZGFdIFtmaWwtXUxUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJm''@;'; put 'put ''XHUyMDE5ICVzIixwYXN0OiIlcyBpbHUiLHM6ImZ0aXQgc2Vrb25kaSIsc3M6IiVkIHNla29uZGkiLG06Im1pbnV0YSIsbW06IiVkIG1pbnV0aSIsaDoic2llZ1x1MDEyN2EiLGhoOiIlZCBzaWVnXHUwMTI3YXQiLGQ6Ilx1MDEyMXVybmF0YSIsZGQ6IiVkIFx1MDEyMXJhbmV0IixNOiJ4YWhh''@;'; put 'put ''ciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4MjI2MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sbT17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQz''@;'; put 'put ''IjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAifTthZS5kZWZpbmVMb2NhbGUoIm15Iix7bW9udGhzOiJcdTEwMDdcdTEwMTRcdTEwM2FcdTEwMTRcdTEwMWRcdTEwMmJc''@;'; put 'put ''dTEwMWJcdTEwMmVfXHUxMDE2XHUxMDMxXHUxMDE2XHUxMDMxXHUxMDJjXHUxMDNhXHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMjdcdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMDdcdTEw''@;'; put 'put ''MzBcdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjXHUxMDAyXHUxMDJmXHUxMDEwXHUxMDNhX1x1MTAwNVx1MTAwMFx1MTAzYVx1MTAxMFx1MTAwNFx1MTAzYVx1MTAxOFx1MTAyY19cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FcdTEwMTBcdTEwMmRcdTEw''@;'; put 'put ''MmZcdTEwMThcdTEwMmNfXHUxMDE0XHUxMDJkXHUxMDJmXHUxMDFkXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAxMlx1MTAyZVx1MTAwN1x1MTAwNFx1MTAzYVx1MTAxOFx1MTAyYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMDA3XHUxMDE0XHUxMDNhX1x1MTAxNlx1MTAzMV9c''@;'; put 'put ''dTEwMTlcdTEwMTBcdTEwM2FfXHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRcdTEwM2FfXHUxMDFjXHUxMDJkXHUxMDJmXHUxMDA0XHUxMDNhX1x1MTAxZVx1MTAzY19cdTEwMDVcdTEwMDBcdTEwM2FfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUx''@;'; put 'put ''MDNhX1x1MTAxNFx1MTAyZFx1MTAyZl9cdTEwMTJcdTEwMmUiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAwMlx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMWNcdTEwMmNfXHUxMDIxXHUx''@;'; put 'put ''MDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDJiX1x1MTAxN1x1MTAyZlx1MTAxMlx1MTAzOVx1MTAxM1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNcdTEwMWVcdTEwMTVcdTEwMTBcdTEwMzFcdTEwMzhfXHUxMDFlXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNjXHUxMDJjX1x1''@;'; put 'put ''MTAwNVx1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAwMlx1MTAyYl9cdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTAxYVx1MTAxNFx1MTAzMS5dIExUIFtcdTEwMTlcdTEw''@;'; put 'put ''M2VcdTEwMmNdIixuZXh0RGF5OiJbXHUxMDE5XHUxMDE0XHUxMDAwXHUxMDNhXHUxMDE2XHUxMDNjXHUxMDE0XHUxMDNhXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbmV4dFdlZWs6ImRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3REYXk6IltcdTEwMTlcdTEwMTRcdTEwMzEu''@;'; put 'put ''XHUxMDAwXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdFdlZWs6IltcdTEwMTVcdTEwM2NcdTEwMmVcdTEwMzhcdTEwMDFcdTEwMzJcdTEwMzdcdTEwMWVcdTEwMzFcdTEwMmNdIGRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6Ilx1MTAxY1x1MTAyY1x1MTAxOVx1MTAwYVx1MTAzYVx1MTAzNyAlcyBcdTEwMTlcdTEwM2VcdTEwMmMiLHBhc3Q6Ilx1MTAxY1x1MTAzZFx1MTAxNFx1MTAzYVx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyYyAlcyBcdTEwMDAiLHM6Ilx1MTAwNVx1MTAwMFx1MTAz''@;'; put 'put ''OVx1MTAwMFx1MTAxNFx1MTAzYS5cdTEwMjFcdTEwMTRcdTEwMGFcdTEwM2FcdTEwMzhcdTEwMDRcdTEwMWFcdTEwM2EiLHNzOiIlZCBcdTEwMDVcdTEwMDBcdTEwMzlcdTEwMDBcdTEwMTRcdTEwMzdcdTEwM2EiLG06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxOVx1MTAyZFx1MTAxNFx1MTAw''@;'; put 'put ''NVx1MTAzYSIsbW06IiVkIFx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsaDoiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixoaDoiJWQgXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixkOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWJcdTEwMDBcdTEw''@;'; put 'put ''M2EiLGRkOiIlZCBcdTEwMWJcdTEwMDBcdTEwM2EiLE06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYyIsTU06IiVkIFx1MTAxYyIseToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIix5eToiJWQgXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIn0scHJlcGFyc2U6''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MTA0MVx1MTA0Mlx1MTA0M1x1MTA0NFx1MTA0NVx1MTA0Nlx1MTA0N1x1MTA0OFx1MTA0OVx1MTA0MF0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xk''@;'; put 'put ''L2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTUyNzM6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJuYiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19h''@;'; put 'put ''cHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQ''@;'; put 'put ''YXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sXHhmOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46''@;'; put 'put ''InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBISDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJbZm9ycmlnZV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJub2VuIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0dCBtaW51dHQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIs''@;'; put 'put ''aGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlciIsdzoiZW4gdWtlIix3dzoiJWQgdWtlciIsTToiZW4gbVx4ZTVuZWQiLE1NOiIlZCBtXHhlNW5lZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3Jk''@;'; put 'put ''aW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxOTg3NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2''@;'; put 'put ''YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbT17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoi''@;'; put 'put ''OSIsIlx1MDk2NiI6IjAifTthZS5kZWZpbmVMb2NhbGUoIm5lIix7bW9udGhzOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9c''@;'; put 'put ''dTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM3XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0''@;'; put 'put ''N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTJkXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkz''@;'; put 'put ''MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5''@;'; put 'put ''NDFcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4Ll9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZi5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDcuX1x1MDkyMVx1MDkzZlx1MDkzOFx1''@;'; put 'put ''MDk0Ny4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTA3XHUwOTI0XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzJcdTA5MmNcdTA5M2Vc''@;'; put 'put ''dTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTJjXHUwOTNl''@;'; put 'put ''XHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkwN1x1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzIuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmLl9cdTA5MzZcdTA5NDFc''@;'; put 'put ''dTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDkyOFx1MDkzZi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNi5fXHUwOTM4XHUwOTRiLl9cdTA5MmVcdTA5MDIuX1x1MDkyY1x1MDk0MS5fXHUwOTJjXHUwOTNmLl9cdTA5MzZcdTA5NDEuX1x1MDkzNi4iLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRTOiJBXHUwOTE1XHUwOTRiIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBN''@;'; put 'put ''TU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MDk2N1x1MDk2''@;'; put 'put ''OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJz''@;'; put 'put ''ZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmfFx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOHxcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGJ8XHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYo''@;'; put 'put ''TT0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIj09PU8/TTw0P006TSsxMjoiXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4Ij09PU8/TToiXHUwOTI2XHUwOTNmXHUwOTA5XHUwOTAxXHUwOTM4XHUwOTRiIj09PU8/TT49MTA/TTpNKzEyOiJcdTA5MzhcdTA5M2VcdTA5MDFcdTA5''@;'; put 'put ''MWQiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDM/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiI6TTwxMj8iXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4IjpNPDE2PyJcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIi''@;'; put 'put ''Ok08MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDkzZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkyZFx1MDk0Ylx1MDkzMlx1MDkzZl0gTFQiLG5leHRXZWVrOiJbXHUwOTA2XHUwOTA5XHUw''@;'; put 'put ''OTAxXHUwOTI2XHUwOTRiXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbXHUwOTM5XHUwOTNmXHUwOTFjXHUwOTRiXSBMVCIsbGFzdFdlZWs6IltcdTA5MTdcdTA5MGZcdTA5MTVcdTA5NGJdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwOTJlXHUw''@;'; put 'put ''OTNlIixwYXN0OiIlcyBcdTA5MDVcdTA5MTdcdTA5M2VcdTA5MjFcdTA5M2YiLHM6Ilx1MDkxNVx1MDk0N1x1MDkzOVx1MDk0MCBcdTA5MTVcdTA5NGRcdTA5MzdcdTA5MjMiLHNzOiIlZCBcdTA5MzhcdTA5NDdcdTA5MTVcdTA5NDdcdTA5MjNcdTA5NGRcdTA5MjEiLG06Ilx1MDkwZlx1MDkx''@;'; put 'put ''NSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLG1tOiIlZCBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDdcdTA5MWYiLGg6Ilx1MDkwZlx1MDkxNSBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGhoOiIlZCBcdTA5MThcdTA5MjNcdTA5NGRcdTA5MWZcdTA5M2UiLGQ6Ilx1''@;'; put 'put ''MDkwZlx1MDkxNSBcdTA5MjZcdTA5M2ZcdTA5MjgiLGRkOiIlZCBcdTA5MjZcdTA5M2ZcdTA5MjgiLE06Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLE1NOiIlZCBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiLHk6Ilx1MDkwZlx1MDkxNSBcdTA5''@;'; put 'put ''MmNcdTA5MzBcdTA5NGRcdTA5MzciLHl5OiIlZCBcdTA5MmNcdTA5MzBcdTA5NGRcdTA5MzcifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw4MTQ4NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD0iamFuLl9mZWIuX21ydC5fYXBy''@;'; put 'put ''Ll9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxsZT1bL15qYW4vaSwvXmZlYi9pLC9ebWFhcnR8bXJ0Lj8kL2ksL15hcHIvaSwvXm1l''@;'; put 'put ''aSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSxNPS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8''@;'; put 'put ''amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO2FlLmRlZmluZUxvY2FsZSgibmwtYmUiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFhcnRfYXByaWxfbWVpX2p1bmlfanVsaV9hdWd1c3R1c19zZXB0''@;'; put 'put ''ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihSLHope3JldHVybiBSPy8tTU1NLS8udGVzdCh6KT9tW1IubW9udGgoKV06eFtSLm1vbnRoKCldOnh9LG1vbnRoc1JlZ2V4Ok0sbW9udGhzU2hvcnRSZWdleDpNLG1vbnRoc1N0''@;'; put 'put ''cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25s''@;'; put 'put ''XVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFn''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU''@;'; put 'put ''UzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdmFuZGFhZyBvbV0gTFQiLG5leHREYXk6Ilttb3JnZW4gb21dIExUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbZ2lzdGVyZW4gb21dIExUIixsYXN0V2VlazoiW2FmZ2Vsb3Blbl0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvdmVyICVzIixwYXN0OiIlcyBnZWxlZGVuIixzOiJlZW4gcGFhciBzZWNvbmRl''@;'; put 'put ''biIsc3M6IiVkIHNlY29uZGVuIixtOiJceGU5XHhlOW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiXHhlOVx4ZTluIHV1ciIsaGg6IiVkIHV1ciIsZDoiXHhlOVx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VuIixNOiJceGU5XHhlOW4gbWFhbmQiLE1NOiIlZCBtYWFuZGVuIix5OiJceGU5XHhl''@;'; put 'put ''OW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oUil7cmV0dXJuIFIrKDE9PT1SfHw4PT09Unx8Uj49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDUxNjY3''@;'; put 'put ''OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG09Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29r''@;'; put 'put ''dF9ub3ZfZGVjIi5zcGxpdCgiXyIpLGxlPVsvXmphbi9pLC9eZmViL2ksL15tYWFydHxtcnQuPyQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLE09L14oamFudWFyaXxmZWJydWFy''@;'; put 'put ''aXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7YWUuZGVmaW5lTG9jYWxlKCJu''@;'; put 'put ''bCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKFIseil7cmV0dXJuIFI/Ly1NTU0tLy50ZXN0KHopP21b''@;'; put 'put ''Ui5tb250aCgpXTp4W1IubW9udGgoKV06eH0sbW9udGhzUmVnZXg6TSxtb250aHNTaG9ydFJlZ2V4Ok0sbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJl''@;'; put 'put ''cikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUs''@;'; put 'put ''d2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192''@;'; put 'put ''cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''In0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhl''@;'; put 'put ''OW4gZGFnIixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlceGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8s''@;'; put 'put ''b3JkaW5hbDpmdW5jdGlvbihSKXtyZXR1cm4gUisoMT09PVJ8fDg9PT1SfHxSPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTcyNjI6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJu''@;'; put 'put ''biIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9v''@;'; put 'put ''a3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5Ll9vbi5fdG8uX2ZyLl9s''@;'; put 'put ''YXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExM''@;'; put 'put ''OiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFz''@;'; put 'put ''dERheToiW0kgZ1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJbRlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQi''@;'; put 'put ''LG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVkIHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJlaXQgXHhlNXIiLHl5OiIl''@;'; put 'put ''ZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxOTY3OTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoIm9jLWxu''@;'; put 'put ''YyIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhlOHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3ZlbWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4ZThy''@;'; put 'put ''X2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIu''@;'; put 'put ''X21hclx4ZTdfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9kaWx1bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06''@;'; put 'put ''c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQgTU1N''@;'; put 'put ''IFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6IltpXHhlOHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVs''@;'; put 'put ''YXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1pbnV0YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMiLE06''@;'; put 'put ''InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihtLGxlKXt2YXIgTT0xPT09bT8iciI6Mj09PW0/Im4iOjM9PT1tPyJyIjo0PT09bT8idCI6Ilx4''@;'; put 'put ''ZTgiO3JldHVybigidyI9PT1sZXx8IlciPT09bGUpJiYoTT0iYSIpLG0rTX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sOTY4MzA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9ezE6Ilx1MGE2NyIsMjoiXHUwYTY4IiwzOiJcdTBh''@;'; put 'put ''NjkiLDQ6Ilx1MGE2YSIsNToiXHUwYTZiIiw2OiJcdTBhNmMiLDc6Ilx1MGE2ZCIsODoiXHUwYTZlIiw5OiJcdTBhNmYiLDA6Ilx1MGE2NiJ9LG09eyJcdTBhNjciOiIxIiwiXHUwYTY4IjoiMiIsIlx1MGE2OSI6IjMiLCJcdTBhNmEiOiI0IiwiXHUwYTZiIjoiNSIsIlx1MGE2YyI6IjYiLCJc''@;'; put 'put ''dTBhNmQiOiI3IiwiXHUwYTZlIjoiOCIsIlx1MGE2ZiI6IjkiLCJcdTBhNjYiOiIwIn07YWUuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUwYTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2Vc''@;'; put 'put ''dTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBh''@;'; put 'put ''MzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJc''@;'; put 'put ''dTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFjXHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBh''@;'; put 'put ''MTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJcdTBhMTBcdTBhMjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUw''@;'; put 'put ''YTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBhMzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEw''@;'; put 'put ''XHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBhMTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExM''@;'; put 'put ''TDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJdIExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxh''@;'; put 'put ''c3REYXk6IltcdTBhMTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNm''@;'; put 'put ''XHUwYTFiXHUwYTMyXHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUw''@;'; put 'put ''YTJlXHUwYTNmXHUwYTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNm''@;'; put 'put ''XHUwYTI4IixNOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUw''@;'; put 'put ''YTMyIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJl''@;'; put 'put ''LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gMTI9PT1NJiYoTT0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PU8/TTw0P006TSsxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIj09PU8/TToiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PU8/TT49''@;'; put 'put ''MTA/TTpNKzEyOiJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09Tz9NKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6TTwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjpNPDE3PyJcdTBhMjZcdTBhNDFcdTBh''@;'; put 'put ''MmFcdTBhMzlcdTBhM2ZcdTBhMzAiOk08MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDkzNjE2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4''@;'; put 'put ''PSJzdHljemVcdTAxNDRfbHV0eV9tYXJ6ZWNfa3dpZWNpZVx1MDE0NF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWVcdTAxNDRfd3J6ZXNpZVx1MDE0NF9wYVx1MDE3YWR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWVcdTAxNDQiLnNwbGl0KCJfIiksbT0ic3R5Y3puaWFfbHV0ZWdvX21hcmNh''@;'; put 'put ''X2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplXHUwMTVibmlhX3BhXHUwMTdhZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhIi5zcGxpdCgiXyIpLGxlPVsvXnN0eS9pLC9ebHV0L2ksL15tYXIvaSwvXmt3aS9pLC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2ll''@;'; put 'put ''L2ksL153cnovaSwvXnBhXHUwMTdhL2ksL15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiBNKHope3JldHVybiB6JTEwPDUmJnolMTA+MSYmfn4oei8xMCklMTAhPTF9ZnVuY3Rpb24gTyh6LEssSSl7dmFyIGs9eisiICI7c3dpdGNoKEkpe2Nhc2Uic3MiOnJldHVybiBrKyhNKHopPyJzZWt1bmR5''@;'; put 'put ''Ijoic2VrdW5kIik7Y2FzZSJtIjpyZXR1cm4gSz8ibWludXRhIjoibWludXRcdTAxMTkiO2Nhc2UibW0iOnJldHVybiBrKyhNKHopPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIEs/ImdvZHppbmEiOiJnb2R6aW5cdTAxMTkiO2Nhc2UiaGgiOnJldHVybiBrKyhNKHopPyJnb2R6''@;'; put 'put ''aW55IjoiZ29kemluIik7Y2FzZSJ3dyI6cmV0dXJuIGsrKE0oeik/InR5Z29kbmllIjoidHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiBrKyhNKHopPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTljeSIpO2Nhc2UieXkiOnJldHVybiBrKyhNKHopPyJsYXRhIjoibGF0Iil9fWFlLmRlZmlu''@;'; put 'put ''ZUxvY2FsZSgicGwiLHttb250aHM6ZnVuY3Rpb24oeixLKXtyZXR1cm4gej8vRCBNTU1NLy50ZXN0KEspP21bei5tb250aCgpXTp4W3oubW9udGgoKV06eH0sbW9udGhzU2hvcnQ6InN0eV9sdXRfbWFyX2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhXHUwMTdhX2xpc19ncnUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzUGFyc2U6bGUsbG9uZ01vbnRoc1BhcnNlOmxlLHNob3J0TW9udGhzUGFyc2U6bGUsd2Vla2RheXM6Im5pZWR6aWVsYV9wb25pZWR6aWFcdTAxNDJla193dG9yZWtfXHUwMTVicm9kYV9jendhcnRla19waVx1MDEwNXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y''@;'; put 'put ''dDoibmR6X3Bvbl93dF9cdTAxNWJyX2N6d19wdF9zb2IiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik5kX1BuX1d0X1x1MDE1YXJfQ3pfUHRfU28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZ''@;'; put 'put ''WVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRHppXHUwMTViIG9dIExUIixuZXh0RGF5OiJbSnV0cm8gb10gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2Ug''@;'; put 'put ''MDpyZXR1cm4iW1cgbmllZHppZWxcdTAxMTkgb10gTFQiO2Nhc2UgMjpyZXR1cm4iW1dlIHd0b3JlayBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgc29ib3RcdTAxMTkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXXSBkZGRk''@;'; put 'put ''IFtvXSBMVCJ9fSxsYXN0RGF5OiJbV2N6b3JhaiBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyB6ZXN6XHUwMTQyXHUwMTA1IG5pZWR6aWVsXHUwMTE5IG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUg''@;'; put 'put ''XHUwMTVicm9kXHUwMTE5IG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgc29ib3RcdTAxMTkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXIHplc3pcdTAxNDJ5XSBkZGRkIFtvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIs''@;'; put 'put ''cGFzdDoiJXMgdGVtdSIsczoia2lsa2Egc2VrdW5kIixzczpPLG06TyxtbTpPLGg6TyxoaDpPLGQ6IjEgZHppZVx1MDE0NCIsZGQ6IiVkIGRuaSIsdzoidHlkemllXHUwMTQ0Iix3dzpPLE06Im1pZXNpXHUwMTA1YyIsTU06Tyx5OiJyb2siLHl5Ok99LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6''@;'; put 'put ''L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzMjc1MTpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInB0LWJyIix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJc''@;'; put 'put ''eGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi''@;'; put 'put ''ZG9taW5nb19zZWd1bmRhLWZlaXJhX3Rlclx4ZTdhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9zZWdfdGVyX3F1YV9xdWlfc2V4X3NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiZG9fMlx4YWFfM1x4YWFfNFx4YWFfNVx4YWFfNlx4YWFfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoi''@;'; put 'put ''RCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbXHhlMHNdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2plIFx4ZTBzXSBMVCIsbmV4dERheToiW0FtYW5oXHhlMyBceGUwc10gTFQiLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFtceGUwc10gTFQiLGxhc3REYXk6IltPbnRlbSBceGUwc10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpfHw2PT09dGhpcy5kYXkoKT8iW1x4ZGFsdGltb10gZGRkZCBbXHhlMHNdIExUIjoiW1x4ZGFsdGltYV0gZGRkZCBbXHhlMHNdIExUIn0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMiLHBhc3Q6ImhceGUxICVzIixzOiJwb3Vjb3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoi''@;'; put 'put ''JWQgZGlhcyIsTToidW0gbVx4ZWFzIixNTToiJWQgbWVzZXMiLHk6InVtIGFubyIseXk6IiVkIGFub3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIixpbnZhbGlkRGF0ZToiRGF0YSBpbnZceGUxbGlkYSJ9KX0oRigxNjY3NikpfSw1NTEz''@;'; put 'put ''ODpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInB0Iix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXJceGU3b19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVt''@;'; put 'put ''YnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmV2X21hcl9hYnJfbWFpX2p1bl9qdWxfYWdvX3NldF9vdXRfbm92X2RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5nb19TZWd1bmRhLWZlaXJhX1Rlclx4ZTdhLWZlaXJhX1F1YXJ0YS1mZWlyYV9RdWludGEtZmVpcmFfU2V4''@;'; put 'put ''dGEtZmVpcmFfU1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1NceGUxYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRG9fMlx4YWFfM1x4YWFfNFx4YWFfNVx4YWFfNlx4YWFfU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJz''@;'; put 'put ''ZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExUIixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5''@;'; put 'put ''KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtceGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InNlZ3VuZG9zIixzczoiJWQgc2VndW5k''@;'; put 'put ''b3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLHc6InVtYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5v''@;'; put 'put ''cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDE3OTY4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPKXt2YXIg''@;'; put 'put ''ej0iICI7cmV0dXJuKGxlJTEwMD49MjB8fGxlPj0xMDAmJmxlJTEwMD09MCkmJih6PSIgZGUgIiksbGUreit7c3M6InNlY3VuZGUiLG1tOiJtaW51dGUiLGhoOiJvcmUiLGRkOiJ6aWxlIix3dzoic1x1MDEwM3B0XHUwMTAzbVx4ZTJuaSIsTU06Imx1bmkiLHl5OiJhbmkifVtPXX1hZS5kZWZp''@;'; put 'put ''bmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXBy''@;'; put 'put ''Ll9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVyaV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2ll''@;'; put 'put ''cmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1bmRlIixzczp4LG06InVuIG1pbnV0IixtbTp4LGg6Im8g''@;'; put 'put ''b3JcdTAxMDMiLGhoOngsZDoibyB6aSIsZGQ6eCx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6eCxNOiJvIGx1blx1MDEwMyIsTU06eCx5OiJ1biBhbiIseXk6eH0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sODE4Mjg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1''@;'; put 'put ''bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShPLFIseil7cmV0dXJuIm0iPT09ej9SPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDMiOk8rIiAiK2Z1bmN0aW9uIHgoTyxSKXt2YXIgej1P''@;'; put 'put ''LnNwbGl0KCJfIik7cmV0dXJuIFIlMTA9PTEmJlIlMTAwIT0xMT96WzBdOlIlMTA+PTImJlIlMTA8PTQmJihSJTEwMDwxMHx8UiUxMDA+PTIwKT96WzFdOnpbMl19KHtzczpSPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNh''@;'; put 'put ''XHUwNDQzXHUwNDNkXHUwNDM0IixtbTpSPyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzBfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6Ilx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1''@;'; put 'put ''MDQ0M19cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoaDoiXHUwNDQ3XHUwNDMwXHUwNDQxX1x1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMF9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0M2VcdTA0MzIiLGRkOiJcdTA0MzRc''@;'; put 'put ''dTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDRmX1x1MDQzNFx1MDQzZFx1MDQzNVx1MDQzOSIsd3c6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1''@;'; put 'put ''XHUwNDNiXHUwNDRjIixNTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2X1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMF9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzVcdTA0MzIiLHl5OiJcdTA0MzNcdTA0M2VcdTA0MzRfXHUwNDMzXHUwNDNl''@;'; put 'put ''XHUwNDM0XHUwNDMwX1x1MDQzYlx1MDQzNVx1MDQ0MiJ9W3pdLCtPKX12YXIgbGU9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ksL15cdTA0NDRcdTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUwNDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUw''@;'; put 'put ''NDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNkL2ksL15cdTA0MzhcdTA0NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQzMy9pLC9eXHUwNDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQzZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNh''@;'; put 'put ''L2ldO2FlLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRmX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Zl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzBfXHUwNDMwXHUwNDNm''@;'; put 'put ''XHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRmX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0''@;'; put 'put ''NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9u''@;'; put 'put ''ZToiXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwXHUwNDRjX1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYlx1MDQ0Y19cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQzOV9c''@;'; put 'put ''dTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMx''@;'; put 'put ''XHUwNDQwXHUwNDRjX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0Ontmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMy''@;'; put 'put ''XHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDAuX1x1MDQzMFx1MDQzZlx1MDQ0MC5fXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzLl9cdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDIuX1x1''@;'; put 'put ''MDQzZVx1MDQzYVx1MDQ0Mi5fXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxLl9cdTA0MzRcdTA0MzVcdTA0M2EuIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMi5fXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMw''@;'; put 'put ''XHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRjX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Y19cdTA0MzBcdTA0MzJcdTA0MzMuX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIil9LHdlZWtkYXlzOntzdGFuZGFsb25lOiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUw''@;'; put 'put ''NDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1''@;'; put 'put ''MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTA0MzJcdTA0M2VcdTA0NDFcdTA0M2FcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NGNcdTA0MzVfXHUwNDNm''@;'; put 'put ''XHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRjXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDMzX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0M19cdTA0NDFcdTA0NDNcdTA0MzFcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDEyXHUwNDMyXSA/KD86XHUwNDNmXHUwNDQwXHUwNDNlXHUw''@;'; put 'put ''NDQ4XHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0ZVx1MDQ0OVx1MDQ0M1x1MDQ0ZXxcdTA0NGRcdTA0NDJcdTA0NDMpPyA/XSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzMlx1MDQ0MV9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1''@;'; put 'put ''MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDMyXHUwNDQxX1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMx''@;'; put 'put ''Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlOmxlLGxvbmdNb250aHNQYXJzZTpsZSxzaG9ydE1vbnRoc1BhcnNlOmxlLG1vbnRoc1JlZ2V4Oi9eKFx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0Zlx1MDQzZFx1MDQzMlwuP3xcdTA0NDRcdTA0MzVcdTA0''@;'; put 'put ''MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC4/fFx1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzMD98XHUwNDNjXHUwNDMwXHUwNDQwXC4/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1''@;'; put 'put ''MDQzMFx1MDQzZlx1MDQ0MFwuP3xcdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2RcLj98XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNiXC4/fFx1MDQzMFx1''@;'; put 'put ''MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDMwXHUwNDMyXHUwNDMzXC4/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLj98XHUwNDNlXHUwNDNhXHUwNDQyXHUw''@;'; put 'put ''NDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNlXHUwNDNhXHUwNDQyXC4/fFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLj98XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1''@;'; put 'put ''MDQ0Y1x1MDQ0Zl18XHUwNDM0XHUwNDM1XHUwNDNhXC4/KS9pLG1vbnRoc1Nob3J0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNkXHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0''@;'; put 'put ''NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQz''@;'; put 'put ''Y1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUw''@;'; put 'put ''NDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyP1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUw''@;'; put 'put ''NDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2FcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Zlx1MDQ0Y118XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0''@;'; put 'put ''MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRmXHUwNDRjXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFc''@;'; put 'put ''dTA0NDJcdTA0MzA/fFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdfFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNd''@;'; put 'put ''fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtcdTA0NGZcdTA0NGNdKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXC58XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wufFx1MDQzY1x1MDQzMFx1MDQ0MFtcdTA0NDIuXXxcdTA0MzBc''@;'; put 'put ''dTA0M2ZcdTA0NDBcLnxcdTA0M2NcdTA0MzBbXHUwNDRmXHUwNDM5XXxcdTA0MzhcdTA0NGVcdTA0M2RbXHUwNDRjXHUwNDRmLl18XHUwNDM4XHUwNDRlXHUwNDNiW1x1MDQ0Y1x1MDQ0Zi5dfFx1MDQzMFx1MDQzMlx1MDQzM1wufFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mj9cLnxcdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDJcLnxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC58XHUwNDM0XHUwNDM1XHUwNDNhXC4pL2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1''@;'; put 'put ''MDQzMy4sIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQzMy4sIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQyMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ0ZiwgXHUwNDMyXSBMVCIsbmV4dERheToiW1x1MDQxN1x1MDQzMFx1MDQzMlx1MDQ0Mlx1''@;'; put 'put ''MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCwgXHUwNDMyXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oTyl7aWYoTy53ZWVrKCk9PT10aGlzLndlZWsoKSlyZXR1cm4gMj09PXRoaXMuZGF5KCk/IltcdTA0MTJcdTA0M2VdIGRk''@;'; put 'put ''ZGQsIFtcdTA0MzJdIExUIjoiW1x1MDQxMl0gZGRkZCwgW1x1MDQzMl0gTFQiO3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM1XHUwNDM1XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDM4XHUwNDM5XSBkZGRkLCBbXHUwNDMyXSBMVCI7Y2FzZSAzOmNhc2UgNTpjYXNlIDY6cmV0dXJuIltcdTA0MTIgXHUwNDQxXHUwNDNiXHUwNDM1XHUw''@;'; put 'put ''NDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlXSBkZGRkLCBbXHUwNDMyXSBMVCJ9fSxsYXN0V2VlazpmdW5jdGlvbihPKXtpZihPLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhpcy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUw''@;'; put 'put ''NDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBc''@;'; put 'put ''dTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NGJcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1MDQxMiBcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDNkXHUwNDMwXHUwNDM3XHUwNDMwXHUwNDM0IixzOiJcdTA0M2RcdTA0MzVcdTA0NDFcdTA0M2FcdTA0M2VcdTA0M2JcdTA0NGNcdTA0M2FcdTA0''@;'; put 'put ''M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczptLG0sbW06bSxoOiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOm0sZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDptLHc6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0ZiIsd3c6bSxNOiJc''@;'; put 'put ''dTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDYiLE1NOm0seToiXHUwNDMzXHUwNDNlXHUwNDM0Iix5eTptfSxtZXJpZGllbVBhcnNlOi9cdTA0M2RcdTA0M2VcdTA0NDdcdTA0Mzh8XHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwfFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0''@;'; put 'put ''NDdcdTA0MzVcdTA0NDBcdTA0MzAvaSxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzApJC8udGVzdChPKX0sbWVyaWRpZW06ZnVuY3Rpb24oTyxSLHope3JldHVybiBPPDQ/Ilx1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQ0N1x1MDQzOCI6TzwxMj8iXHUwNDQzXHUwNDQyXHUwNDQwXHUwNDMwIjpPPDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNl''@;'; put 'put ''fFx1MDQ0ZikvLG9yZGluYWw6ZnVuY3Rpb24oTyxSKXtzd2l0Y2goUil7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpyZXR1cm4gTysiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gTysiLVx1MDQzM1x1MDQzZSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBPKyItXHUwNDRmIjtkZWZhdWx0OnJl''@;'; put 'put ''dHVybiBPfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjIxODg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9WyJcdTA2MmNcdTA2NDZcdTA2NDhcdTA2MzFcdTA2NGEiLCJcdTA2NDFcdTA2NGFcdTA2MjhcdTA2MzFcdTA2NDhc''@;'; put 'put ''dTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2ODYiLCJcdTA2MjdcdTA2N2VcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjZcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NDRcdTA2MjdcdTA2MjFcdTA2NTAiLCJcdTA2MjJcdTA2''@;'; put 'put ''YWZcdTA2MzNcdTA2N2QiLCJcdTA2MzNcdTA2NGFcdTA2N2VcdTA2N2RcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjJcdTA2YWFcdTA2N2RcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2OGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEi''@;'; put 'put ''XSxtPVsiXHUwNjIyXHUwNjg2XHUwNjMxIiwiXHUwNjMzXHUwNjQ4XHUwNjQ1XHUwNjMxIiwiXHUwNjI3XHUwNmIxXHUwNjI3XHUwNjMxXHUwNjQ4IiwiXHUwNjI3XHUwNjMxXHUwNjI4XHUwNjM5IiwiXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzIiwiXHUwNjJjXHUwNjQ1XHUwNjM5IiwiXHUw''@;'; put 'put ''Njg3XHUwNjQ2XHUwNjg3XHUwNjMxIl07YWUuZGVmaW5lTG9jYWxlKCJzZCIse21vbnRoczp4LG1vbnRoc1Nob3J0Ongsd2Vla2RheXM6bSx3ZWVrZGF5c1Nob3J0Om0sd2Vla2RheXNNaW46bSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZ''@;'; put 'put ''IixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGRcdTA2MGMgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzVcdTA2MjhcdTA2MmR8XHUwNjM0XHUwNjI3XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKE0pe3JldHVybiJcdTA2MzRc''@;'; put 'put ''dTA2MjdcdTA2NDUiPT09TX0sbWVyaWRpZW06ZnVuY3Rpb24oTSxPLFIpe3JldHVybiBNPDEyPyJcdTA2MzVcdTA2MjhcdTA2MmQiOiJcdTA2MzRcdTA2MjdcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY4NF0gTFQiLG5leHREYXk6IltcdTA2MzNcdTA2ODBcdTA2Mjdc''@;'; put 'put ''dTA2YmJcdTA2NGFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI3XHUwNmIzXHUwNjRhXHUwNjQ2IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YSBcdTA2MmFcdTA2NGFdIExUIixsYXN0RGF5OiJbXHUwNmFhXHUwNjI3XHUwNjQ0XHUwNjQ3XHUwNjQ3XSBMVCIsbGFzdFdlZWs6IltcdTA2YWZc''@;'; put 'put ''dTA2MzJcdTA2MzFcdTA2NGFcdTA2NDQgXHUwNjQ3XHUwNjQxXHUwNjJhXHUwNjRhXSBkZGRkIFtcdTA2MmFcdTA2NGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2N2VcdTA2NDhcdTA2MjEiLHBhc3Q6IiVzIFx1MDYyN1x1MDZiMyIsczoiXHUwNjg2''@;'; put 'put ''XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsc3M6IiVkIFx1MDYzM1x1MDY0YVx1MDZhYVx1MDY0Nlx1MDY4YSIsbToiXHUwNjQ3XHUwNmFhIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3ZCIsaDoiXHUwNjQ3XHUwNmFhIFx1''@;'; put 'put ''MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsaGg6IiVkIFx1MDZhYVx1MDY0NFx1MDYyN1x1MDZhYSIsZDoiXHUwNjQ3XHUwNmFhIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsZGQ6IiVkIFx1MDY4Zlx1MDY0YVx1MDY0Nlx1MDY0N1x1MDY0NiIsTToiXHUwNjQ3XHUwNmFhIFx1MDY0''@;'; put 'put ''NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDY0OCIsTU06IiVkIFx1MDY0NVx1MDY0N1x1MDY0YVx1MDY0Nlx1MDYyNyIseToiXHUwNjQ3XHUwNmFhIFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxh''@;'; put 'put ''Y2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sNjU2MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZp''@;'; put 'put ''bmVMb2NhbGUoInNlIix7bW9udGhzOiJvXHUwMTExXHUwMTExYWphZ2VtXHhlMW5udV9ndW92dmFtXHhlMW5udV9uanVrXHUwMTBkYW1ceGUxbm51X2N1b1x1MDE0Ym9tXHhlMW5udV9taWVzc2VtXHhlMW5udV9nZWFzc2VtXHhlMW5udV9zdW9pZG5lbVx4ZTFubnVfYm9yZ2VtXHhlMW5udV9c''@;'; put 'put ''dTAxMGRha1x1MDEwZGFtXHhlMW5udV9nb2xnZ290bVx4ZTFubnVfc2tceGUxYm1hbVx4ZTFubnVfanVvdmxhbVx4ZTFubnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Im9cdTAxMTFcdTAxMTFqX2d1b3Zfbmp1a19jdW9fbWllc19nZWFzX3N1b2lfYm9yZ19cdTAxMGRha1x1MDEwZF9nb2xn''@;'; put 'put ''X3NrXHhlMWJfanVvdiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic290bmFiZWFpdmlfdnVvc3NceGUxcmdhX21hXHUwMTRiXHUwMTRiZWJceGUxcmdhX2dhc2thdmFoa2t1X2R1b3Jhc3RhdF9iZWFyamFkYXRfbFx4ZTF2dmFyZGF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNvdG5fdnVv''@;'; put 'put ''c19tYVx1MDE0Yl9nYXNrX2R1b3JfYmVhcl9sXHhlMXYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNfdl9tX2dfZF9iX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6Ik1NTU0gRC4gW2IuXSBZWVlZIixM''@;'; put 'put ''TEw6Ik1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIEQuIFtiLl0gWVlZWSBbdGkuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3RuZSB0aV0gTFQiLG5leHREYXk6IltpaHR0aW4gdGldIExUIixuZXh0V2VlazoiZGRkZCBbdGldIExUIixsYXN0''@;'; put 'put ''RGF5OiJbaWt0ZSB0aV0gTFQiLGxhc3RXZWVrOiJbb3ZkZGl0XSBkZGRkIFt0aV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGdlYVx1MDE3ZWVzIixwYXN0OiJtYVx1MDE0Yml0ICVzIixzOiJtb2FkZGUgc2VrdW5kZGF0IixzczoiJWQgc2VrdW5kZGF0Iixt''@;'; put 'put ''OiJva3RhIG1pbnVodGEiLG1tOiIlZCBtaW51aHRhdCIsaDoib2t0YSBkaWltbXUiLGhoOiIlZCBkaWltbXV0IixkOiJva3RhIGJlYWl2aSIsZGQ6IiVkIGJlYWl2dml0IixNOiJva3RhIG1ceGUxbm51IixNTToiJWQgbVx4ZTFudXQiLHk6Im9rdGEgamFoa2kiLHl5OiIlZCBqYWdpdCJ9LGRh''@;'; put 'put ''eU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw4NzE3MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInNpIix7bW9udGhzOiJcdTBk''@;'; put 'put ''YTJcdTBkYjFcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI0XHUwZGQ5XHUwZGI2XHUwZGJiXHUwZGMwXHUwZGNmXHUwZGJiXHUwZGQyX1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYVx1MGRhZFx1MGRkNF9cdTBkODVcdTBkYjRcdTBkY2FcdTIwMGRcdTBkYmJcdTBkZGFcdTBkYmRcdTBk''@;'; put 'put ''Y2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkXHUwZGMzXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYVx1MGRhZFx1MGRkMFx1MGRiOFx1''@;'; put 'put ''MGRjYVx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FcdTBkYWRcdTBkZGRcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMFx1MGRiOFx1MGRjYVx1''@;'; put 'put ''MGRiNlx1MGRiYlx1MGRjYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZGEyXHUwZGIxX1x1MGRiNFx1MGRkOVx1MGRiNl9cdTBkYjhcdTBkY2ZcdTBkYmJcdTBkY2FfXHUwZDg1XHUwZGI0XHUwZGNhX1x1MGRiOFx1MGRkMFx1MGRiYVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYjFcdTBk''@;'; put 'put ''ZDJfXHUwZGEyXHUwZGQ2XHUwZGJkXHUwZGQyX1x1MGQ4NVx1MGQ5Y1x1MGRkZF9cdTBkYzNcdTBkZDBcdTBkYjRcdTBkY2FfXHUwZDk0XHUwZDlhXHUwZGNhX1x1MGRiMVx1MGRkY1x1MGRjMFx1MGRkMF9cdTBkYWZcdTBkZDlcdTBkYzNcdTBkZDAiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1''@;'; put 'put ''MGQ4OVx1MGRiYlx1MGRkMlx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkYjNcdTBkZDRcdTBkYWZcdTBkY2ZfXHUwZDg1XHUwZDlmXHUwZGM0XHUwZGJiXHUwZGQ0XHUwZGMwXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRiNlx1MGRhZlx1MGRjZlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRc''@;'; put 'put ''dTBkYmJcdTBkYzRcdTBkYzNcdTBkY2FcdTBkYjRcdTBkYWRcdTBkZDJcdTBkYjFcdTBkY2FcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQyXHUwZDlhXHUwZGQ0XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRkOVx1MGRiMVx1MGRjM1x1MGRkNFx1MGRiYlx1MGRjZlx1MGRhZlx1''@;'; put 'put ''MGRjZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBkODlcdTBkYmJcdTBkZDJfXHUwZGMzXHUwZGIzXHUwZGQ0X1x1MGQ4NVx1MGQ5Zl9cdTBkYjZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGNhXHUyMDBkXHUwZGJiXHUwZGM0X1x1MGRjM1x1MGRkMlx1MGQ5YVx1MGRkNF9cdTBkYzNc''@;'; put 'put ''dTBkZDlcdTBkYjEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGQ4OV9cdTBkYzNfXHUwZDg1X1x1MGRiNl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJfXHUwZGMzXHUwZGQyX1x1MGRjM1x1MGRkOSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJhIGg6bW0iLExUUzoiYSBoOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWSBNTU1NIEQiLExMTDoiWVlZWSBNTU1NIEQsIGEgaDptbSIsTExMTDoiWVlZWSBNTU1NIEQgW1x1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMl0gZGRkZCwgYSBoOm1tOnNzIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltcdTBkODVcdTBkYWZdIExUW1x1MGRhN10iLG5leHREYXk6IltcdTBkYzRcdTBkZDlcdTBkYTddIExUW1x1MGRhN10iLG5leHRXZWVrOiJkZGRkIExUW1x1MGRhN10iLGxhc3REYXk6IltcdTBkOGFcdTBkYmFcdTBkZGFdIExUW1x1MGRhN10iLGxhc3RXZWVrOiJbXHUwZGI0XHUwZGMz''@;'; put 'put ''XHUwZGQ0XHUwZDljXHUwZGQyXHUwZGJhXSBkZGRkIExUW1x1MGRhN10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHUwZDlhXHUwZGQyXHUwZGIxXHUwZGNhIixwYXN0OiIlc1x1MGQ5YVx1MGRhNyBcdTBkYjRcdTBkZDlcdTBkYmIiLHM6Ilx1MGRhZFx1MGRhZFx1''@;'; put 'put ''MGRjYVx1MGRiNFx1MGRiYiBcdTBkOWFcdTBkZDJcdTBkYzRcdTBkZDJcdTBkYjRcdTBkYmEiLHNzOiJcdTBkYWRcdTBkYWRcdTBkY2FcdTBkYjRcdTBkYmIgJWQiLG06Ilx1MGRiOFx1MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRkNFx1MGRjMCIsbW06Ilx1MGRiOFx1''@;'; put 'put ''MGRkMlx1MGRiMVx1MGRkMlx1MGRhZFx1MGRjYVx1MGRhZFx1MGRkNCAlZCIsaDoiXHUwZGI0XHUwZGQwXHUwZGJhIixoaDoiXHUwZGI0XHUwZGQwXHUwZGJhICVkIixkOiJcdTBkYWZcdTBkZDJcdTBkYjFcdTBkYmEiLGRkOiJcdTBkYWZcdTBkZDJcdTBkYjEgJWQiLE06Ilx1MGRiOFx1MGRj''@;'; put 'put ''Zlx1MGRjM1x1MGRiYSIsTU06Ilx1MGRiOFx1MGRjZlx1MGRjMyAlZCIseToiXHUwZGMwXHUwZGMzXHUwZGJiIix5eToiXHUwZGMwXHUwZGMzXHUwZGJiICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSBcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDIvLG9yZGluYWw6ZnVuY3Rp''@;'; put 'put ''b24obSl7cmV0dXJuIG0rIiBcdTBkYzBcdTBkZDBcdTBkYjFcdTBkZDIifSxtZXJpZGllbVBhcnNlOi9cdTBkYjRcdTBkZDlcdTBkYmIgXHUwZGMwXHUwZGJiXHUwZGQ0fFx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGQ5Llx1MGRjMHxcdTBkYjQuXHUw''@;'; put 'put ''ZGMwLi8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4iXHUwZGI0Llx1MGRjMC4iPT09bXx8Ilx1MGRiNFx1MGRjM1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbT4xMT9NPyJcdTBkYjQuXHUwZGMwLiI6Ilx1MGRiNFx1MGRj''@;'; put 'put ''M1x1MGRjYSBcdTBkYzBcdTBkYmJcdTBkZDQiOk0/Ilx1MGRiNFx1MGRkOS5cdTBkYzAuIjoiXHUwZGI0XHUwZGQ5XHUwZGJiIFx1MGRjMFx1MGRiYlx1MGRkNCJ9fSl9KEYoMTY2NzYpKX0sOTk5NjY6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7dmFyIHg9''@;'; put 'put ''ImphbnVceGUxcl9mZWJydVx4ZTFyX21hcmVjX2Fwclx4ZWRsX21ceGUxal9qXHhmYW5falx4ZmFsX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21hcl9hcHJfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVnX3NlcF9v''@;'; put 'put ''a3Rfbm92X2RlYyIuc3BsaXQoIl8iKTtmdW5jdGlvbiBsZShSKXtyZXR1cm4gUj4xJiZSPDV9ZnVuY3Rpb24gTShSLHosSyxJKXt2YXIgaz1SKyIgIjtzd2l0Y2goSyl7Y2FzZSJzIjpyZXR1cm4genx8ST8icFx4ZTFyIHNla1x4ZmFuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJl''@;'; put 'put ''dHVybiB6fHxJP2srKGxlKFIpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6aysic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiB6PyJtaW5ceGZhdGEiOkk/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiB6fHxJP2srKGxlKFIpPyJtaW5ceGZhdHkiOiJtaW5ceGZhdCIp''@;'; put 'put ''OmsrIm1pblx4ZmF0YW1pIjtjYXNlImgiOnJldHVybiB6PyJob2RpbmEiOkk/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiB6fHxJP2srKGxlKFIpPyJob2RpbnkiOiJob2RceGVkbiIpOmsrImhvZGluYW1pIjtjYXNlImQiOnJldHVybiB6fHxJPyJkZVx1MDE0OCI6ImRcdTAx''@;'; put 'put ''NDhvbSI7Y2FzZSJkZCI6cmV0dXJuIHp8fEk/aysobGUoUik/ImRuaSI6ImRuXHhlZCIpOmsrImRcdTAxNDhhbWkiO2Nhc2UiTSI6cmV0dXJuIHp8fEk/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4genx8ST9rKyhsZShSKT8ibWVzaWFjZSI6Im1lc2lhY292Iik6aysibWVz''@;'; put 'put ''aWFjbWkiO2Nhc2UieSI6cmV0dXJuIHp8fEk/InJvayI6InJva29tIjtjYXNlInl5IjpyZXR1cm4genx8ST9rKyhsZShSKT8icm9reSI6InJva292Iik6aysicm9rbWkifX1hZS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOngsbW9udGhzU2hvcnQ6bSx3ZWVrZGF5czoibmVkZVx1MDEzZWFf''@;'; put 'put ''cG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIp''@;'; put 'put ''LGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9dIExUIixuZXh0''@;'; put 'put ''RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtj''@;'; put 'put ''YXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXko''@;'; put 'put ''KSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51''@;'; put 'put ''bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmVkICVzIixzOk0sc3M6TSxtOk0sbW06TSxoOk0saGg6TSxkOk0sZGQ6TSxNLE1NOk0seTpNLHl5Ok19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c''@;'; put 'put ''Li8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSw0Mjg3OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgobGUsTSxPLFIpe3ZhciB6PWxlKyIgIjtzd2l0Y2goTyl7Y2FzZSJzIjpyZXR1cm4gTXx8Uj8i''@;'; put 'put ''bmVrYWogc2VrdW5kIjoibmVrYWogc2VrdW5kYW1pIjtjYXNlInNzIjpyZXR1cm4geisoMT09PWxlP00/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09bGU/TXx8Uj8ic2VrdW5kaSI6InNla3VuZGFoIjpsZTw1P018fFI/InNla3VuZGUiOiJzZWt1bmRhaCI6InNla3VuZCIpO2Nhc2UibSI6cmV0''@;'; put 'put ''dXJuIE0/ImVuYSBtaW51dGEiOiJlbm8gbWludXRvIjtjYXNlIm1tIjpyZXR1cm4geisoMT09PWxlP00/Im1pbnV0YSI6Im1pbnV0byI6Mj09PWxlP018fFI/Im1pbnV0aSI6Im1pbnV0YW1hIjpsZTw1P018fFI/Im1pbnV0ZSI6Im1pbnV0YW1pIjpNfHxSPyJtaW51dCI6Im1pbnV0YW1pIik7''@;'; put 'put ''Y2FzZSJoIjpyZXR1cm4gTT8iZW5hIHVyYSI6ImVubyB1cm8iO2Nhc2UiaGgiOnJldHVybiB6KygxPT09bGU/TT8idXJhIjoidXJvIjoyPT09bGU/TXx8Uj8idXJpIjoidXJhbWEiOmxlPDU/TXx8Uj8idXJlIjoidXJhbWkiOk18fFI/InVyIjoidXJhbWkiKTtjYXNlImQiOnJldHVybiBNfHxS''@;'; put 'put ''PyJlbiBkYW4iOiJlbmltIGRuZW0iO2Nhc2UiZGQiOnJldHVybiB6KygxPT09bGU/TXx8Uj8iZGFuIjoiZG5lbSI6Mj09PWxlP018fFI/ImRuaSI6ImRuZXZvbWEiOk18fFI/ImRuaSI6ImRuZXZpIik7Y2FzZSJNIjpyZXR1cm4gTXx8Uj8iZW4gbWVzZWMiOiJlbmltIG1lc2VjZW0iO2Nhc2Ui''@;'; put 'put ''TU0iOnJldHVybiB6KygxPT09bGU/TXx8Uj8ibWVzZWMiOiJtZXNlY2VtIjoyPT09bGU/TXx8Uj8ibWVzZWNhIjoibWVzZWNlbWEiOmxlPDU/TXx8Uj8ibWVzZWNlIjoibWVzZWNpIjpNfHxSPyJtZXNlY2V2IjoibWVzZWNpIik7Y2FzZSJ5IjpyZXR1cm4gTXx8Uj8iZW5vIGxldG8iOiJlbmlt''@;'; put 'put ''IGxldG9tIjtjYXNlInl5IjpyZXR1cm4geisoMT09PWxlP018fFI/ImxldG8iOiJsZXRvbSI6Mj09PWxlP018fFI/ImxldGkiOiJsZXRvbWEiOmxlPDU/TXx8Uj8ibGV0YSI6ImxldGkiOk18fFI/ImxldCI6ImxldGkiKX19YWUuZGVmaW5lTG9jYWxlKCJzbCIse21vbnRoczoiamFudWFyX2Zl''@;'; put 'put ''YnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNw''@;'; put 'put ''bGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamVrX3RvcmVrX3NyZWRhX1x1MDEwZGV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl9cdTAxMGRldC5fcGV0Ll9zb2IuIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb190b19zcl9cdTAxMGRlX3BlX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuIE1NLiBZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQu''@;'; put 'put ''IE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuZXMgb2JdIExUIixuZXh0RGF5OiJbanV0cmkgb2JdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2XSBb''@;'; put 'put ''bmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbdl0gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIlt2XSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt2XSBkZGRkIFtvYl0gTFQifX0sbGFzdERheToiW3ZcdTAxMGRlcmFq''@;'; put 'put ''IG9iXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJlalx1MDE2MW5qb10gW25lZGVsam9dIFtvYl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbcHJlalx1''@;'; put 'put ''MDE2MW5qb10gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJlalx1MDE2MW5qaV0gZGRkZCBbb2JdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDEwZGV6ICVzIixwYXN0OiJwcmVkICVzIixzOngsc3M6''@;'; put 'put ''eCxtOngsbW06eCxoOngsaGg6eCxkOngsZGQ6eCxNOngsTU06eCx5OngseXk6eH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDE1MjkxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihh''@;'; put 'put ''ZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgic3EiLHttb250aHM6IkphbmFyX1Noa3VydF9NYXJzX1ByaWxsX01hal9RZXJzaG9yX0tvcnJpa19HdXNodF9TaHRhdG9yX1RldG9yX05ceGVibnRvcl9EaGpldG9yIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fU2hrX01hcl9Q''@;'; put 'put ''cmlfTWFqX1Flcl9Lb3JfR3VzX1NodF9UZXRfTlx4ZWJuX0RoaiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRSBEaWVsX0UgSFx4ZWJuXHhlYl9FIE1hcnRceGViX0UgTVx4ZWJya3VyXHhlYl9FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW5ceGViIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRp''@;'; put 'put ''ZV9IXHhlYm5fTWFyX01ceGVicl9FbmpfUHJlX1NodCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRF9IX01hX01ceGViX0VfUF9TaCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovUER8TUQvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIk0iPT09bS5j''@;'; put 'put ''aGFyQXQoMCl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7cmV0dXJuIG08MTI/IlBEIjoiTUQifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltTb3Qgblx4ZWJdIExUIixuZXh0RGF5OiJbTmVzXHhlYnIgblx4ZWJdIExUIixuZXh0V2VlazoiZGRkZCBbblx4ZWJdIExUIixsYXN0RGF5OiJbRGplIG5ceGViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Uga2FsdWFy''@;'; put 'put ''IG5ceGViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiblx4ZWIgJXMiLHBhc3Q6IiVzIG1ceGViIHBhclx4ZWIiLHM6ImRpc2Egc2Vrb25kYSIsc3M6IiVkIHNla29uZGEiLG06Im5qXHhlYiBtaW51dFx4ZWIiLG1tOiIlZCBtaW51dGEiLGg6Im5qXHhlYiBvclx4''@;'; put 'put ''ZWIiLGhoOiIlZCBvclx4ZWIiLGQ6Im5qXHhlYiBkaXRceGViIixkZDoiJWQgZGl0XHhlYiIsTToibmpceGViIG11YWoiLE1NOiIlZCBtdWFqIix5OiJualx4ZWIgdml0Iix5eToiJWQgdml0ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVr''@;'; put 'put ''Ontkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNzYwMzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17d29yZHM6e3NzOlsiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwIiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUw''@;'; put 'put ''NDQzXHUwNDNkXHUwNDM0XHUwNDM1IiwiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4Il0sbTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0MzMgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIl0sbW06WyJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLCJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxo''@;'; put 'put ''OlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0NDFcdTA0MzBcdTA0NDJcdTA0MzAiXSxoaDpbIlx1MDQ0MVx1MDQzMFx1MDQ0MiIsIlx1MDQ0MVx1MDQzMFx1MDQ0Mlx1''@;'; put 'put ''MDQzMCIsIlx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzOCJdLGQ6WyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M2QgXHUwNDM0XHUwNDMwXHUwNDNkIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQzNFx1MDQzMFx1MDQzZFx1MDQzMCJdLGRkOlsiXHUwNDM0''@;'; put 'put ''XHUwNDMwXHUwNDNkIiwiXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIiwiXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sTTpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0MzMgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDMwIl0sTU06WyJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLCJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiXSx5''@;'; put 'put ''OlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDQzIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzNSBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzUiXSx5eTpbIlx1MDQzM1x1MDQzZVx1MDQz''@;'; put 'put ''NFx1MDQzOFx1MDQzZFx1MDQ0MyIsIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSIsIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKGxlLE0pe3JldHVybiBsZSUxMD49MSYmbGUlMTA8PTQm''@;'; put 'put ''JihsZSUxMDA8MTB8fGxlJTEwMD49MjApP2xlJTEwPT0xP01bMF06TVsxXTpNWzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24obGUsTSxPLFIpe3ZhciBLLHo9eC53b3Jkc1tPXTtyZXR1cm4gMT09PU8ubGVuZ3RoPyJ5Ij09PU8mJk0/Ilx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0''@;'; put 'put ''MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOlJ8fE0/elswXTp6WzFdOihLPXguY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShsZSx6KSwieXkiPT09TyYmTSYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT1LP2xlKyIgXHUwNDMzXHUwNDNlXHUwNDM0XHUw''@;'; put 'put ''NDM4XHUwNDNkXHUwNDMwIjpsZSsiICIrSyl9fTthZS5kZWZpbmVMb2NhbGUoInNyLWN5cmwiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUw''@;'; put 'put ''NDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNj''@;'; put 'put ''XHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0M2QuX1x1MDQ0NFx1MDQzNVx1MDQzMS5fXHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1''@;'; put 'put ''MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNmLl9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlc''@;'; put 'put ''dTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwXHUwNDNhX1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQy''@;'; put 'put ''XHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQz''@;'; put 'put ''ZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0NDdcdTA0MzVcdTA0NDIuX1x1MDQzZlx1MDQzNVx1MDQ0Mi5fXHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0''@;'; put 'put ''N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxXHUwNDQzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDpt''@;'; put 'put ''bSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5j''@;'; put 'put ''dGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltcdTA0NDNdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNd''@;'; put 'put ''IExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0''@;'; put 'put ''M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNl''@;'; put 'put ''XHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0''@;'; put 'put ''NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUw''@;'; put 'put ''NDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0''@;'; put 'put ''MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzNV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBc''@;'; put 'put ''dTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOngudHJhbnNsYXRlLG06eC50cmFuc2xhdGUsbW06eC50cmFuc2xhdGUsaDp4LnRyYW5zbGF0ZSxo''@;'; put 'put ''aDp4LnRyYW5zbGF0ZSxkOngudHJhbnNsYXRlLGRkOngudHJhbnNsYXRlLE06eC50cmFuc2xhdGUsTU06eC50cmFuc2xhdGUseTp4LnRyYW5zbGF0ZSx5eTp4LnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRv''@;'; put 'put ''eTo3fX0pfShGKDE2Njc2KSl9LDgwNDUwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2VrdW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIs''@;'; put 'put ''Im1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpbImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2VjYSJdLE1N''@;'; put 'put ''OlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5OlsiamVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihsZSxNKXtyZXR1cm4gbGUlMTA+PTEmJmxlJTEwPD00JiYobGUl''@;'; put 'put ''MTAwPDEwfHxsZSUxMDA+PTIwKT9sZSUxMD09MT9NWzBdOk1bMV06TVsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGxlLE0sTyxSKXt2YXIgSyx6PXgud29yZHNbT107cmV0dXJuIDE9PT1PLmxlbmd0aD8ieSI9PT1PJiZNPyJqZWRuYSBnb2RpbmEiOlJ8fE0/elswXTp6WzFdOihLPXguY29ycmVj''@;'; put 'put ''dEdyYW1tYXRpY2FsQ2FzZShsZSx6KSwieXkiPT09TyYmTSYmImdvZGludSI9PT1LP2xlKyIgZ29kaW5hIjpsZSsiICIrSyl9fTthZS5kZWZpbmVMb2NhbGUoInNyIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jh''@;'; put 'put ''cl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkZWxqYV9wb25lZGVsamFrX3V0''@;'; put 'put ''b3Jha19zcmVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmUuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJf''@;'; put 'put ''Iiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELiBNLiBZWVlZLiIsTEw6IkQuIE1NTU0gWVlZWS4iLExMTDoiRC4gTU1NTSBZWVlZLiBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0ifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRlbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmVkdV0gW3VdIExUIjtjYXNlIDY6''@;'; put 'put ''cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRlbGplXSBbdV0g''@;'; put 'put ''TFQiLCJbcHJvXHUwMTYxbG9nXSBbcG9uZWRlbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JlZGVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtcdTAxMGRldHZydGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbcGV0''@;'; put 'put ''a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIl1bdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOngudHJhbnNsYXRlLG06eC50cmFuc2xhdGUs''@;'; put 'put ''bW06eC50cmFuc2xhdGUsaDp4LnRyYW5zbGF0ZSxoaDp4LnRyYW5zbGF0ZSxkOngudHJhbnNsYXRlLGRkOngudHJhbnNsYXRlLE06eC50cmFuc2xhdGUsTU06eC50cmFuc2xhdGUseTp4LnRyYW5zbGF0ZSx5eTp4LnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwu''@;'; put 'put ''LyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDMwMzgzOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgic3MiLHttb250aHM6IkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmto''@;'; put 'put ''dWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkJoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzOiJMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfVXNfTGJf''@;'; put 'put ''THRfTHNfTGhfVWciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1N''@;'; put 'put ''IFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltOYW11aGxhIG5nYV0gTFQiLG5leHREYXk6IltLdXNhc2EgbmdhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25nYV0gTFQiLGxhc3REYXk6IltJdG9sbyBuZ2FdIExUIixsYXN0V2VlazoiZGRkZCBbbGVsaXBoZWxpbGVdIFtuZ2FdIExU''@;'; put 'put ''IixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuZ2EgJXMiLHBhc3Q6IndlbnRla2EgbmdhICVzIixzOiJlbWl6dXp3YW5hIGxvbWNhbmUiLHNzOiIlZCBtenV6d2FuYSIsbToidW16dXp1IixtbToiJWQgZW1penV6dSIsaDoibGlob3JhIixoaDoiJWQgZW1haG9yYSIsZDoi''@;'; put 'put ''bGlsYW5nYSIsZGQ6IiVkIGVtYWxhbmdhIixNOiJpbnlhbmdhIixNTToiJWQgdGlueWFuZ2EiLHk6InVtbnlha2EiLHl5OiIlZCBpbWlueWFrYSJ9LG1lcmlkaWVtUGFyc2U6L2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVy''@;'; put 'put ''biBtPDExPyJla3VzZW5pIjptPDE1PyJlbWluaSI6bTwxOT8iZW50c2FtYmFtYSI6ImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksImVrdXNlbmkiPT09bGU/bToiZW1pbmkiPT09bGU/bT49MTE/bTptKzEyOiJlbnRzYW1iYW1hIj09''@;'; put 'put ''PWxlfHwiZWJ1c3VrdSI9PT1sZT8wPT09bT8wOm0rMTI6dm9pZCAwfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOiIlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMzcyMjE6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0''@;'; put 'put ''cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJzdiIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21h''@;'; put 'put ''al9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InNceGY2bmRhZ19tXHhlNW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmNnJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjZuX21ceGU1bl90aXNfb25zX3Rvcl9m''@;'; put 'put ''cmVfbFx4ZjZyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmNl9tXHhlNV90aV9vbl90b19mcl9sXHhmNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZ''@;'; put 'put ''WVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lkYWddIExUIixuZXh0RGF5OiJbSW1vcmdvbl0gTFQiLGxhc3REYXk6''@;'; put 'put ''IltJZ1x4ZTVyXSBMVCIsbmV4dFdlZWs6IltQXHhlNV0gZGRkZCBMVCIsbGFzdFdlZWs6IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiZlx4ZjZyICVzIHNlZGFuIixzOiJuXHhlNWdyYSBzZWt1bmRlciIsc3M6IiVkIHNl''@;'; put 'put ''a3VuZGVyIixtOiJlbiBtaW51dCIsbW06IiVkIG1pbnV0ZXIiLGg6ImVuIHRpbW1lIixoaDoiJWQgdGltbWFyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdhciIsTToiZW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0oXDplfFw6YSkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8iOmUiOjE9PT1sZXx8Mj09PWxlPyI6YSI6IjplIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDUxNzQzOmZ1bmN0''@;'; put 'put ''aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgic3ciLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfQWdvX1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2kiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiSnBsX0p0YXRfSm5uZV9KdGFuX0FsaF9Jam1fSm1vcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiSjJfSjNfSjRfSjVfQWxfSWpfSjEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNhYV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9d''@;'; put 'put ''IGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNl''@;'; put 'put ''a3VuZGUgJWQiLG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixoaDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntk''@;'; put 'put ''b3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2MzUxOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiJcdTBiZTciLDI6Ilx1MGJlOCIsMzoiXHUwYmU5Iiw0OiJcdTBiZWEiLDU6Ilx1MGJlYiIsNjoiXHUwYmVjIiw3OiJcdTBiZWQiLDg6Ilx1''@;'; put 'put ''MGJlZSIsOToiXHUwYmVmIiwwOiJcdTBiZTYifSxtPXsiXHUwYmU3IjoiMSIsIlx1MGJlOCI6IjIiLCJcdTBiZTkiOiIzIiwiXHUwYmVhIjoiNCIsIlx1MGJlYiI6IjUiLCJcdTBiZWMiOiI2IiwiXHUwYmVkIjoiNyIsIlx1MGJlZSI6IjgiLCJcdTBiZWYiOiI5IiwiXHUwYmU2IjoiMCJ9O2Fl''@;'; put 'put ''LmRlZmluZUxvY2FsZSgidGEiLHttb250aHM6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBiYWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1''@;'; put 'put ''MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNk''@;'; put 'put ''XHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNk''@;'; put 'put ''Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFhXHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBi''@;'; put 'put ''YjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNcdTBiYzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1''@;'; put 'put ''MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmNkXHUwYmIxXHUwYmMxXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJi''@;'; put 'put ''Zlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJi''@;'; put 'put ''NVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmE5XHUwYmJm''@;'; put 'put ''XHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjMV9cdTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2RfXHUwYjlhXHUwYmM2XHUw''@;'; put 'put ''YmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkX1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1MGJjZF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiYTlcdTBiY2RfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmX1x1MGI5YVx1MGJhOVx1MGJiZiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYjllXHUwYmJlX1x1MGJhNFx1MGJiZl9cdTBiOWFcdTBiYzZfXHUwYmFhXHUwYmMxX1x1MGJiNVx1MGJiZl9cdTBiYjVcdTBiYzZfXHUwYjlhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6''@;'; put 'put ''IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYjg3XHUwYmE5XHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbmV4dERheToiW1x1MGJhOFx1MGJi''@;'; put 'put ''ZVx1MGJiM1x1MGJjOF0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGJhOFx1MGJjN1x1MGJiMVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLGxhc3RXZWVrOiJbXHUwYjk1XHUwYjlmXHUwYmE4XHUwYmNkXHUwYmE0IFx1MGJiNVx1MGJiZVx1MGJiMFx1MGJhZVx1MGJjZF0g''@;'; put 'put ''ZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGI4N1x1MGJiMlx1MGJjZCIscGFzdDoiJXMgXHUwYmFlXHUwYmMxXHUwYmE5XHUwYmNkIixzOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYjlhXHUwYmJmXHUwYmIyIFx1MGJiNVx1MGJiZlx1MGJhOFx1''@;'; put 'put ''MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsc3M6IiVkIFx1MGJiNVx1MGJiZlx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsbToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGJhZVx1MGJjZCIs''@;'; put 'put ''bW06IiVkIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1MGJjZCIsaDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGhoOiIlZCBcdTBiYWVcdTBiYTNcdTBi''@;'; put 'put ''YmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixkOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4XHUwYmJlXHUwYmIzXHUwYmNkIixkZDoiJWQgXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixNOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUw''@;'; put 'put ''YmJlXHUwYmE0XHUwYmFlXHUwYmNkIixNTToiJWQgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYjk5XHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIix5OiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmI1XHUwYmIwXHUwYmMxXHUwYjlmXHUwYmFlXHUwYmNkIix5eToiJWQgXHUwYjg2XHUwYmEzXHUwYmNk''@;'; put 'put ''XHUwYjlmXHUwYmMxXHUwYjk1XHUwYmIzXHUwYmNkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1MGJiNVx1MGJhNFx1MGJjMS8sb3JkaW5hbDpmdW5jdGlvbihNKXtyZXR1cm4gTSsiXHUwYmI1XHUwYmE0XHUwYmMxIn0scHJlcGFyc2U6ZnVuY3Rpb24oTSl7cmV0dXJuIE0u''@;'; put 'put ''cmVwbGFjZSgvW1x1MGJlN1x1MGJlOFx1MGJlOVx1MGJlYVx1MGJlYlx1MGJlY1x1MGJlZFx1MGJlZVx1MGJlZlx1MGJlNl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gbVtPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJu''@;'; put 'put ''IHhbT119KX0sbWVyaWRpZW1QYXJzZTovXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkfFx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOHxcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzh8XHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkfFx1MGI4ZVx1MGJi''@;'; put 'put ''MVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMXxcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgvLG1lcmlkaWVtOmZ1bmN0aW9uKE0sTyxSKXtyZXR1cm4gTTwyPyIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIjpNPDY/IiBcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgi''@;'; put 'put ''Ok08MTA/IiBcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiOk08MTQ/IiBcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiOk08MTg/IiBcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFcdTBiYmVcdTBiOWZcdTBiYzEiOk08MjI/IiBcdTBiYWVcdTBiYmVcdTBiYjJcdTBi''@;'; put 'put ''YzgiOiIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKE0sTyl7cmV0dXJuIDEyPT09TSYmKE09MCksIlx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCI9PT1PP008Mj9NOk0rMTI6Ilx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJj''@;'; put 'put ''OCI9PT1PfHwiXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ij09PU98fCJcdTBiYThcdTBiYTNcdTBiY2RcdTBiYWFcdTBiOTVcdTBiYjJcdTBiY2QiPT09TyYmTT49MTA/TTpNKzEyfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oRigxNjY3NikpfSw5ODExODpmdW5jdGlvbihhdCxJZSxGKXshZnVu''@;'; put 'put ''Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBjMjhcdTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJjXHUwYzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1''@;'; put 'put ''MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1MGMxY1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMy''@;'; put 'put ''YVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUwYzM1XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMy''@;'; put 'put ''Y1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBjM2ZcdTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0''@;'; put 'put ''N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxNy5fXHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMyOFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJlXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1''@;'; put 'put ''MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUwYzQxXHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZc''@;'; put 'put ''dTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUwYzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1''@;'; put 'put ''MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1MGMyZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUwYzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0''@;'; put 'put ''KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUw''@;'; put 'put ''YzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMyOFx1MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0gTFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIlcyBcdTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIiLHM6Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBj''@;'; put 'put ''MjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBjMzJcdTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1tOiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdc''@;'; put 'put ''dTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBcdTBjMTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMxMlx1MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBj''@;'; put 'put ''NDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBjMjhcdTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1MGMxNSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBc''@;'; put 'put ''dTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1LyxvcmRpbmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1QYXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMw''@;'; put 'put ''XHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7''@;'; put 'put ''cmV0dXJuIDEyPT09bSYmKG09MCksIlx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI9PT1sZT9tPDQ/bTptKzEyOiJcdTBjMDlcdTBjMjZcdTBjMmZcdTBjMDIiPT09bGU/bToiXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAy''@;'; put 'put ''Ij09PWxlP20+PTEwP206bSsxMjoiXHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyIj09PWxlP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLGxlLE0pe3JldHVybiBtPDQ/Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6''@;'; put 'put ''bTwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjptPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBjMzlcdTBjNGRcdTBjMjhcdTBjMDIiOm08MjA/Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1''@;'; put 'put ''MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShGKDE2Njc2KSl9LDI2Mjc4OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9B''@;'; put 'put ''YnJpbF9NYWl1X0p1XHhmMXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21p''@;'; put 'put ''bmd1X1NlZ3VuZGFfVGVyc2FfS3VhcnRhX0tpbnRhX1Nlc3RhX1NhYmFkdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21fU2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvX1NlZ19UZV9LdV9LaV9TZXNfU2EiLnNwbGl0KCJfIiksbG9u''@;'; put 'put ''Z0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2hpbiBpaGFdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbQWJhbiBpaGFdIExUIixuZXh0V2VlazoiZGRkZCBbaWhhXSBMVCIsbGFzdERheToiW0hvcmlzZWlrIGloYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpaGEgJXMiLHBhc3Q6IiVz''@;'; put 'put ''IGxpdWJhIixzOiJzZWd1bmR1IGJhbHVuIixzczoic2VndW5kdSAlZCIsbToibWludXR1IGlkYSIsbW06Im1pbnV0dSAlZCIsaDoib3JhcyBpZGEiLGhoOiJvcmFzICVkIixkOiJsb3JvbiBpZGEiLGRkOiJsb3JvbiAlZCIsTToiZnVsYW4gaWRhIixNTToiZnVsYW4gJWQiLHk6InRpbmFuIGlk''@;'; put 'put ''YSIseXk6InRpbmFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0''@;'; put 'put ''aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwzNjk4NzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MDoiLVx1MDQ0M1x1MDQzYyIsMToiLVx1MDQ0M1x1MDQzYyIsMjoiLVx1MDQ0ZVx1MDQzYyIsMzoiLVx1MDQ0ZVx1MDQz''@;'; put 'put ''YyIsNDoiLVx1MDQ0M1x1MDQzYyIsNToiLVx1MDQ0M1x1MDQzYyIsNjoiLVx1MDQ0M1x1MDQzYyIsNzoiLVx1MDQ0M1x1MDQzYyIsODoiLVx1MDQ0M1x1MDQzYyIsOToiLVx1MDQ0M1x1MDQzYyIsMTA6Ii1cdTA0NDNcdTA0M2MiLDEyOiItXHUwNDQzXHUwNDNjIiwxMzoiLVx1MDQ0M1x1MDQz''@;'; put 'put ''YyIsMjA6Ii1cdTA0NDNcdTA0M2MiLDMwOiItXHUwNDRlXHUwNDNjIiw0MDoiLVx1MDQ0M1x1MDQzYyIsNTA6Ii1cdTA0NDNcdTA0M2MiLDYwOiItXHUwNDQzXHUwNDNjIiw3MDoiLVx1MDQ0M1x1MDQzYyIsODA6Ii1cdTA0NDNcdTA0M2MiLDkwOiItXHUwNDQzXHUwNDNjIiwxMDA6Ii1cdTA0''@;'; put 'put ''NDNcdTA0M2MifTthZS5kZWZpbmVMb2NhbGUoInRnIix7bW9udGhzOntmb3JtYXQ6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDM4X1x1MDQz''@;'; put 'put ''MFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYlx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0MzlcdTA0MzhfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhfXHUwNDQxXHUwNDM1XHUw''@;'; put 'put ''NDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwXHUwNDM4Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHN0YW5kYWxvbmU6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4''@;'; put 'put ''XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQz''@;'; put 'put ''MFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1''@;'; put 'put ''MDQ0Zlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0MzRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDQxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1''@;'; put 'put ''MDQzMVx1MDQzNV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0YjdcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNGI3XHUwNDQzXHUwNDNjXHUwNDRhXHUwNDMwX1x1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0NGZcdTA0''@;'; put 'put ''NDhcdTA0MzFfXHUwNDM0XHUwNDQ4XHUwNDMxX1x1MDQ0MVx1MDQ0OFx1MDQzMV9cdTA0NDdcdTA0NDhcdTA0MzFfXHUwNDNmXHUwNDQ4XHUwNDMxX1x1MDRiN1x1MDQ0M1x1MDQzY19cdTA0NDhcdTA0M2RcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQ0Zlx1MDQ0OF9cdTA0''@;'; put 'put ''MzRcdTA0NDhfXHUwNDQxXHUwNDQ4X1x1MDQ0N1x1MDQ0OF9cdTA0M2ZcdTA0NDhfXHUwNGI3XHUwNDNjX1x1MDQ0OFx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MThcdTA0M2NcdTA0NDBcdTA0ZWZcdTA0MzcgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbmV4dERheToiW1x1MDQyNFx1MDQzMFx1MDQ0''@;'; put 'put ''MFx1MDQzNFx1MDQzZSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixsYXN0RGF5OiJbXHUwNDE0XHUwNDM4XHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHRXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1''@;'; put 'put ''MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0M2VcdTA0NGZcdTA0M2RcdTA0MzRcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdFdlZWs6ImRkZGRbXHUwNDM4XSBbXHUwNGIzXHUwNDMwXHUwNDQ0XHUwNDQyXHUwNDMwXHUwNDM4IFx1MDQzM1x1MDQ0M1x1''@;'; put 'put ''MDQzN1x1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0MzFcdTA0MzBcdTA0NGFcdTA0MzRcdTA0MzggJXMiLHBhc3Q6IiVzIFx1MDQzZlx1MDQzNVx1MDQ0OCIs''@;'; put 'put ''czoiXHUwNDRmXHUwNDNhXHUwNDQ3XHUwNDMwXHUwNDNkXHUwNDM0IFx1MDQ0MVx1MDQzZVx1MDQzZFx1MDQzOFx1MDQ0ZiIsbToiXHUwNDRmXHUwNDNhIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQ5Ylx1MDQzOFx1MDQ5Ylx1''@;'; put 'put ''MDQzMCIsaDoiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDRmXHUwNDNhIFx1MDQ0MFx1MDRlZlx1MDQzNyIsZGQ6IiVkIFx1MDQ0MFx1MDRlZlx1MDQzNyIsTToiXHUwNDRmXHUwNDNhIFx1MDQz''@;'; put 'put ''Y1x1MDQzZVx1MDRiMyIsTU06IiVkIFx1MDQzY1x1MDQzZVx1MDRiMyIseToiXHUwNDRmXHUwNDNhIFx1MDQ0MVx1MDQzZVx1MDQzYiIseXk6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzYiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDQ0OFx1MDQzMFx1MDQzMXxcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjN8''@;'; put 'put ''XHUwNDQwXHUwNGVmXHUwNDM3fFx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGxlLE0pe3JldHVybiAxMj09PWxlJiYobGU9MCksIlx1MDQ0OFx1MDQzMFx1MDQzMSI9PT1NP2xlPDQ/bGU6bGUrMTI6Ilx1MDQ0MVx1MDQ0M1x1MDQzMVx1MDRi''@;'; put 'put ''MyI9PT1NP2xlOiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09TT9sZT49MTE/bGU6bGUrMTI6Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT1NP2xlKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGU8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpsZTwx''@;'; put 'put ''MT8iXHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzIjpsZTwxNj8iXHUwNDQwXHUwNGVmXHUwNDM3IjpsZTwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoiXHUwNDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1''@;'; put 'put ''MDQ0ZVx1MDQzYykvLG9yZGluYWw6ZnVuY3Rpb24obGUpe3JldHVybiBsZSsoeFtsZV18fHhbbGUlMTBdfHx4W2xlPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sMzkzMjU6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7YWUuZGVmaW5lTG9jYWxlKCJ0aCIse21vbnRoczoiXHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUxZVx1MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBl''@;'; put 'put ''MjFfXHUwZTQwXHUwZTIxXHUwZTI5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBlMzhcdTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUw''@;'; put 'put ''ZTA0XHUwZTIxX1x1MGUyYVx1MGUzNFx1MGUwN1x1MGUyYlx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUwZTM4XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1''@;'; put 'put ''MGUwMVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMThcdTBlMzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQuX1x1MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1''@;'; put 'put ''MGUxZS5cdTBlMDQuX1x1MGUyMVx1MGUzNC5cdTBlMjIuX1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBlMjIuX1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6''@;'; put 'put ''Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUwZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBl''@;'; put 'put ''MmFcdTBlMWFcdTBlMTRcdTBlMzVfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMx''@;'; put 'put ''XHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUwZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBl''@;'; put 'put ''MjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRT''@;'; put 'put ''OiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1MGUzMVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUw''@;'; put 'put ''ZTI1XHUwZTMyIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0''@;'; put 'put ''aW9uKG0pe3JldHVybiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXtyZXR1cm4gbTwxMj8iXHUwZTAxXHUwZTQ4XHUwZTJkXHUwZTE5XHUwZTQwXHUwZTE3XHUwZTM1XHUw''@;'; put 'put ''ZTQ4XHUwZTIyXHUwZTA3IjoiXHUwZTJiXHUwZTI1XHUwZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlMjdcdTBlMzFcdTBlMTlcdTBlMTlcdTBlMzVcdTBlNDkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBM''@;'; put 'put ''VCIsbmV4dERheToiW1x1MGUxZVx1MGUyM1x1MGUzOFx1MGU0OFx1MGUwN1x1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0V2VlazoiZGRkZFtcdTBlMmJcdTBlMTlcdTBlNDlcdTBlMzIgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyXSBMVCIsbGFz''@;'; put 'put ''dERheToiW1x1MGU0MFx1MGUyMVx1MGUzN1x1MGU0OFx1MGUyZFx1MGUyN1x1MGUzMlx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0V2VlazoiW1x1MGUyN1x1MGUzMVx1MGUxOV1kZGRkW1x1MGUxN1x1MGUzNVx1MGU0OFx1MGU0MVx1''@;'; put 'put ''MGUyNVx1MGU0OVx1MGUyNyBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTBlMmRcdTBlMzVcdTBlMDEgJXMiLHBhc3Q6IiVzXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixzOiJcdTBl''@;'; put 'put ''NDRcdTBlMjFcdTBlNDhcdTBlMDFcdTBlMzVcdTBlNDhcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLHNzOiIlZCBcdTBlMjdcdTBlMzRcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG06IjEgXHUwZTE5XHUwZTMyXHUwZTE3XHUwZTM1IixtbToiJWQgXHUwZTE5XHUwZTMy''@;'; put 'put ''XHUwZTE3XHUwZTM1IixoOiIxIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUyMVx1MGUwNyIsaGg6IiVkIFx1MGUwYVx1MGUzMVx1MGU0OFx1MGUyN1x1MGU0Mlx1MGUyMVx1MGUwNyIsZDoiMSBcdTBlMjdcdTBlMzFcdTBlMTkiLGRkOiIlZCBcdTBlMjdcdTBlMzFcdTBlMTki''@;'; put 'put ''LHc6IjEgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIix3dzoiJWQgXHUwZTJhXHUwZTMxXHUwZTFiXHUwZTE0XHUwZTMyXHUwZTJiXHUwZTRjIixNOiIxIFx1MGU0MFx1MGUxNFx1MGUzN1x1MGUyZFx1MGUxOSIsTU06IiVkIFx1MGU0MFx1MGUxNFx1MGUzN1x1''@;'; put 'put ''MGUyZFx1MGUxOSIseToiMSBcdTBlMWJcdTBlMzUiLHl5OiIlZCBcdTBlMWJcdTBlMzUifX0pfShGKDE2Njc2KSl9LDQzNDg1OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PXsxOiInaW5qaSIsNToiJ2luamkiLDg6IidpbmppIiw3MDoiJ2luamki''@;'; put 'put ''LDgwOiInaW5qaSIsMjoiJ25qaSIsNzoiJ25qaSIsMjA6IiduamkiLDUwOiInbmppIiwzOiInXHhmY25qaSIsNDoiJ1x4ZmNuamkiLDEwMDoiJ1x4ZmNuamkiLDY6IiduankiLDk6Iid1bmp5IiwxMDoiJ3VuankiLDMwOiIndW5qeSIsNjA6Iid5bmp5Iiw5MDoiJ3luankifTthZS5kZWZpbmVM''@;'; put 'put ''b2NhbGUoInRrIix7bW9udGhzOiJceGRkYW53YXJfRmV3cmFsX01hcnRfQXByZWxfTWFceGZkX0lceGZkdW5fSVx4ZmR1bF9Bd2d1c3RfU2VudFx4ZmRhYnJfT2t0XHhmZGFicl9Ob1x4ZmRhYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJceGRkYW5fRmV3X01hcl9BcHJfTWFc''@;'; put 'put ''eGZkX0lceGZkbl9JXHhmZGxfQXdnX1Nlbl9Pa3RfTm9ceGZkX0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHhkZGVrXHUwMTVmZW5iZV9EdVx1MDE1ZmVuYmVfU2lcdTAxNWZlbmJlX1x4Yzdhclx1MDE1ZmVuYmVfUGVuXHUwMTVmZW5iZV9Bbm5hX1x1MDE1ZWVuYmUiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoiXHhkZGVrX0R1XHUwMTVmX1NpXHUwMTVmX1x4Yzdhcl9QZW5fQW5uX1x1MDE1ZWVuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJceGRka19EXHUwMTVmX1NcdTAxNWZfXHhjN3JfUG5fQW5fXHUwMTVlbiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltidWdceGZjbiBzYWdhdF0gTFQiLG5leHREYXk6IltlcnRpciBz''@;'; put 'put ''YWdhdF0gTFQiLG5leHRXZWVrOiJbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQiLGxhc3REYXk6IltkXHhmY1x4ZmRuXSBMVCIsbGFzdFdlZWs6IltnZVx4ZTdlbl0gZGRkZCBbc2FnYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb1x1MDE0OCIscGFzdDoi''@;'; put 'put ''JXMgXHhmNlx1MDE0OCIsczoiYmlyblx4ZTRceGU3ZSBzZWt1bnQiLG06ImJpciBtaW51dCIsbW06IiVkIG1pbnV0IixoOiJiaXIgc2FnYXQiLGhoOiIlZCBzYWdhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGFceGZkIixNTToiJWQgYVx4ZmQiLHk6ImJpciBceGZk''@;'; put 'put ''eWwiLHl5OiIlZCBceGZkeWwifSxvcmRpbmFsOmZ1bmN0aW9uKGxlLE0pe3N3aXRjaChNKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIGxlO2RlZmF1bHQ6aWYoMD09PWxlKXJldHVybiBsZSsiJ3VuankiO3ZhciBPPWxlJTEwO3JldHVybiBsZSsoeFtPXXx8eFts''@;'; put 'put ''ZSUxMDAtT118fHhbbGU+PTEwMD8xMDA6bnVsbF0pfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KEYoMTY2NzYpKX0sNjgxNDg6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ0bC1waCIse21vbnRoczoiRW5lcm9fUGVicmVyb19N''@;'; put 'put ''YXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlfU2FiIi5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiTFQgW25n''@;'; put 'put ''YXlvbmcgYXJhd10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy''@;'; put 'put ''ZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIlZCBhcmF3IixN''@;'; put 'put ''OiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDU5NjE2OmZ1bmN0''@;'; put 'put ''aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO3ZhciB4PSJwYWdoX3dhXHUyMDE5X2NoYVx1MjAxOV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCIuc3BsaXQoIl8iKTtmdW5jdGlvbiBNKHosSyxJLGspe3ZhciBFPWZ1bmN0aW9uIE8oeil7dmFyIEs9TWF0''@;'; put 'put ''aC5mbG9vcih6JTFlMy8xMDApLEk9TWF0aC5mbG9vcih6JTEwMC8xMCksaz16JTEwLEU9IiI7cmV0dXJuIEs+MCYmKEUrPXhbS10rInZhdGxoIiksST4wJiYoRSs9KCIiIT09RT8iICI6IiIpK3hbSV0rIm1hSCIpLGs+MCYmKEUrPSgiIiE9PUU/IiAiOiIiKSt4W2tdKSwiIj09PUU/InBhZ2gi''@;'; put 'put ''OkV9KHopO3N3aXRjaChJKXtjYXNlInNzIjpyZXR1cm4gRSsiIGx1cCI7Y2FzZSJtbSI6cmV0dXJuIEUrIiB0dXAiO2Nhc2UiaGgiOnJldHVybiBFKyIgcmVwIjtjYXNlImRkIjpyZXR1cm4gRSsiIGphaiI7Y2FzZSJNTSI6cmV0dXJuIEUrIiBqYXIiO2Nhc2UieXkiOnJldHVybiBFKyIgRElT''@;'; put 'put ''In19YWUuZGVmaW5lTG9jYWxlKCJ0bGgiLHttb250aHM6InRlcmFcdTIwMTkgamFyIHdhXHUyMDE5X3RlcmFcdTIwMTkgamFyIGNoYVx1MjAxOV90ZXJhXHUyMDE5IGphciB3ZWpfdGVyYVx1MjAxOSBqYXIgbG9TX3RlcmFcdTIwMTkgamFyIHZhZ2hfdGVyYVx1MjAxOSBqYXIgamF2X3RlcmFc''@;'; put 'put ''dTIwMTkgamFyIFNvY2hfdGVyYVx1MjAxOSBqYXIgY2hvcmdoX3RlcmFcdTIwMTkgamFyIEh1dF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSF90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCB3YVx1MjAxOV90ZXJhXHUyMDE5IGphciB3YVx1MjAxOW1hSCBjaGFcdTIwMTkiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6ImphciB3YVx1MjAxOV9qYXIgY2hhXHUyMDE5X2phciB3ZWpfamFyIGxvU19qYXIgdmFnaF9qYXIgamF2X2phciBTb2NoX2phciBjaG9yZ2hfamFyIEh1dF9qYXIgd2FcdTIwMTltYUhfamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X2phciB3YVx1MjAxOW1hSCBjaGFc''@;'; put 'put ''dTIwMTkiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFq''@;'; put 'put ''X2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE''@;'; put 'put ''Lk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0RhSGphal0gTFQiLG5leHREYXk6Ilt3YVx1MjAxOWxlU10gTFQiLG5leHRXZWVrOiJMTEwiLGxhc3REYXk6''@;'; put 'put ''Ilt3YVx1MjAxOUh1XHUyMDE5XSBMVCIsbGFzdFdlZWs6IkxMTCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbiBtKHope3ZhciBLPXo7cmV0dXJuLTEhPT16LmluZGV4T2YoImphaiIpP0suc2xpY2UoMCwtMykrImxlUyI6LTEhPT16LmluZGV4T2YoImphciIp''@;'; put 'put ''P0suc2xpY2UoMCwtMykrIndhUSI6LTEhPT16LmluZGV4T2YoIkRJUyIpP0suc2xpY2UoMCwtMykrIm5lbSI6SysiIHBJcSJ9LHBhc3Q6ZnVuY3Rpb24gbGUoeil7dmFyIEs9ejtyZXR1cm4tMSE9PXouaW5kZXhPZigiamFqIik/Sy5zbGljZSgwLC0zKSsiSHVcdTIwMTkiOi0xIT09ei5pbmRl''@;'; put 'put ''eE9mKCJqYXIiKT9LLnNsaWNlKDAsLTMpKyJ3ZW4iOi0xIT09ei5pbmRleE9mKCJESVMiKT9LLnNsaWNlKDAsLTMpKyJiZW4iOksrIiByZXQifSxzOiJwdVMgbHVwIixzczpNLG06IndhXHUyMDE5IHR1cCIsbW06TSxoOiJ3YVx1MjAxOSByZXAiLGhoOk0sZDoid2FcdTIwMTkgamFqIixkZDpN''@;'; put 'put ''LE06IndhXHUyMDE5IGphciIsTU06TSx5OiJ3YVx1MjAxOSBESVMiLHl5Ok19LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwyNDA0MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeD17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiIn''@;'; put 'put ''bmNcdTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O2FlLmRlZmluZUxvY2FsZSgidHIiLHttb250aHM6Ik9jYWtfXHUwMTVldWJhdF9NYXJ0X05pc2FuX01heVx1MDEzMXNfSGF6aXJhbl9UZW1t''@;'; put 'put ''dXpfQVx1MDExZnVzdG9zX0V5bFx4ZmNsX0VraW1fS2FzXHUwMTMxbV9BcmFsXHUwMTMxayIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiT2NhX1x1MDE1ZXViX01hcl9OaXNfTWF5X0hhel9UZW1fQVx1MDExZnVfRXlsX0VraV9LYXNfQXJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJQYXphcl9Q''@;'; put 'put ''YXphcnRlc2lfU2FsXHUwMTMxX1x4Yzdhclx1MDE1ZmFtYmFfUGVyXHUwMTVmZW1iZV9DdW1hX0N1bWFydGVzaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpfUHp0X1NhbF9ceGM3YXJfUGVyX0N1bV9DbXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlB6X1B0X1NhX1x4YzdhX1Bl''@;'; put 'put ''X0N1X0N0Ii5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGxlLE0sTyl7cmV0dXJuIGxlPDEyP08/Ilx4ZjZceGY2IjoiXHhkNlx4ZDYiOk8/Ilx4ZjZzIjoiXHhkNlMifSxtZXJpZGllbVBhcnNlOi9ceGY2XHhmNnxceGQ2XHhkNnxceGY2c3xceGQ2Uy8saXNQTTpmdW5jdGlvbihsZSl7''@;'; put 'put ''cmV0dXJuIlx4ZjZzIj09PWxlfHwiXHhkNlMiPT09bGV9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW2J1Z1x4ZmNuIHNhYXRdIExUIixuZXh0RGF5OiJbeWFyXHUwMTMxbiBzYWF0XSBMVCIsbmV4dFdlZWs6IltnZWxlY2VrXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhYXRdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb25yYSIscGFzdDoiJXMgXHhmNm5jZSIsczoiYmlya2FceGU3IHNhbml5ZSIsc3M6IiVkIHNhbml5ZSIsbToiYmlyIGRha2lrYSIsbW06IiVkIGRha2lrYSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ1x4''@;'; put 'put ''ZmNuIixkZDoiJWQgZ1x4ZmNuIix3OiJiaXIgaGFmdGEiLHd3OiIlZCBoYWZ0YSIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5XHUwMTMxbCIseXk6IiVkIHlcdTAxMzFsIn0sb3JkaW5hbDpmdW5jdGlvbihsZSxNKXtzd2l0Y2goTSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNh''@;'; put 'put ''c2UiREQiOnJldHVybiBsZTtkZWZhdWx0OmlmKDA9PT1sZSlyZXR1cm4gbGUrIidcdTAxMzFuY1x1MDEzMSI7dmFyIE89bGUlMTA7cmV0dXJuIGxlKyh4W09dfHx4W2xlJTEwMC1PXXx8eFtsZT49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw1OTQ6''@;'; put 'put ''ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSxNLE8sUil7dmFyIHo9e3M6WyJ2aWVuc2FzIHNlY3VuZHMiLCInaWVuc2FzIHNlY3VuZHMiXSxzczpbbGUrIiBzZWN1bmRzIixsZSsiIHNlY3VuZHMiXSxtOlsiJ24gbVx4ZWR1dCIsIidp''@;'; put 'put ''ZW5zIG1ceGVkdXQiXSxtbTpbbGUrIiBtXHhlZHV0cyIsbGUrIiBtXHhlZHV0cyJdLGg6WyInbiBceGZlb3JhIiwiJ2llbnNhIFx4ZmVvcmEiXSxoaDpbbGUrIiBceGZlb3JhcyIsbGUrIiBceGZlb3JhcyJdLGQ6WyInbiB6aXVhIiwiJ2llbnNhIHppdWEiXSxkZDpbbGUrIiB6aXVhcyIsbGUr''@;'; put 'put ''IiB6aXVhcyJdLE06WyInbiBtZXMiLCInaWVucyBtZXMiXSxNTTpbbGUrIiBtZXNlbiIsbGUrIiBtZXNlbiJdLHk6WyInbiBhciIsIidpZW5zIGFyIl0seXk6W2xlKyIgYXJzIixsZSsiIGFycyJdfTtyZXR1cm4gUnx8TT96W09dWzBdOnpbT11bMV19YWUuZGVmaW5lTG9jYWxlKCJ0emwiLHtt''@;'; put 'put ''b250aHM6IkphbnVhcl9GZXZyYWdsaF9NYXJceGU3X0F2clx4ZWZ1X01haV9HXHhmY25fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcFx4ZTR0c19Ob2VtdmFyX1plY2VtdmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BdnJfTWFpX0dceGZjbl9KdWxfR3VzX1Nl''@;'; put 'put ''dF9MaXNfTm9lX1plYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU1x4ZmFsYWRpX0xceGZhbmVceGU3aV9NYWl0emlfTVx4ZTFyY3VyaV9YaFx4ZmFhZGlfVmlceGU5bmVyXHhlN2lfU1x4ZTF0dXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNceGZhbF9MXHhmYW5fTWFpX01ceGUxcl9Y''@;'; put 'put ''aFx4ZmFfVmlceGU5X1NceGUxdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU1x4ZmFfTFx4ZmFfTWFfTVx4ZTFfWGhfVmlfU1x4ZTEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gW2RhbGxh''@;'; put 'put ''c10gWVlZWSIsTExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0iLExMTEw6ImRkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZFwnb3xkXCdhL2ksaXNQTTpmdW5jdGlvbihsZSl7cmV0dXJuImQnbyI9PT1sZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''fSxtZXJpZGllbTpmdW5jdGlvbihsZSxNLE8pe3JldHVybiBsZT4xMT9PPyJkJ28iOiJEJ08iOk8/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3hoaSBceGUwXSBMVCIsbmV4dERheToiW2RlbVx4ZTAgXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERh''@;'; put 'put ''eToiW2llaXJpIFx4ZTBdIExUIixsYXN0V2VlazoiW3NceGZjciBlbF0gZGRkZCBbbGFzdGV1IFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6bSxzczptLG0sbW06bSxoOm0saGg6bSxkOm0sZGQ6bSxNOm0sTU06''@;'; put 'put ''bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShGKDE2Njc2KSl9LDIzMjI2OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidHpt''@;'; put 'put ''LWxhdG4iLHttb250aHM6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksbW9udGhz''@;'; put 'put ''U2hvcnQ6ImlubmF5cl9iclx1MDJlNGF5clx1MDJlNF9tYXJcdTAyZTRzXHUwMmU0X2licmlyX21heXl3X3l3bnl3X3l3bHl3el9cdTAyNjN3XHUwMTYxdF9cdTAxNjF3dGFuYmlyX2t0XHUwMmU0d2JyXHUwMmU0X253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6ImFzYW1h''@;'; put 'put ''c19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2lcdTFlMGR5YXMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFzX2F5bmFz''@;'; put 'put ''X2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExUIixuZXh0RGF5OiJbYXNrYSBnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6ImltaWsiLHNzOiIlZCBpbWlrIixtOiJtaW51XHUxZTBkIixtbToiJWQgbWludVx1MWUwZCIsaDoic2FcdTAyNWJhIixoaDoiJWQgdGFzc2FcdTAyNWJpbiIsZDoiYXNzIixkZDoiJWQgb3NzYW4iLE06ImF5b3dy''@;'; put 'put ''IixNTToiJWQgaXl5aXJuIix5OiJhc2dhcyIseXk6IiVkIGlzZ2FzbiJ9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oRigxNjY3NikpfSw4MDY3MzpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInR6bSIse21vbnRoczoiXHUyZDQ5''@;'; put 'put ''XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJk''@;'; put 'put ''NGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYzX1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1''@;'; put 'put ''MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJkNTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MmQ0OVx1MmQ0Zlx1MmQ0Zlx1MmQzMFx1MmQ2Mlx1MmQ1NF9cdTJkMzFcdTJkNTVcdTJkMzBc''@;'; put 'put ''dTJkNjJcdTJkNTVfXHUyZDRlXHUyZDMwXHUyZDU1XHUyZDVhX1x1MmQ0OVx1MmQzMVx1MmQ1NFx1MmQ0OVx1MmQ1NF9cdTJkNGVcdTJkMzBcdTJkNjJcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRmXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0ZFx1MmQ2Mlx1MmQ1M1x1MmQ2''@;'; put 'put ''M19cdTJkNTZcdTJkNTNcdTJkNWJcdTJkNWNfXHUyZDViXHUyZDUzXHUyZDVjXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzZFx1MmQ1Zlx1MmQ1M1x1MmQzMVx1MmQ1NV9cdTJkNGZcdTJkNTNcdTJkNjFcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDM3XHUy''@;'; put 'put ''ZDUzXHUyZDRhXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJk''@;'; put 'put ''MzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNT''@;'; put 'put ''aG9ydDoiXHUyZDMwXHUyZDU5XHUyZDMwXHUyZDRlXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ2Mlx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDU0XHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ2MVx1MmQz''@;'; put 'put ''MFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkNGVcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDM5XHUyZDYyXHUyZDMwXHUyZDU5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUy''@;'; put 'put ''ZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9c''@;'; put 'put ''dTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQg''@;'; put 'put ''TU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTJkMzBcdTJkNTlcdTJkMzdcdTJkNDUgXHUyZDM0XSBMVCIsbmV4dERheToiW1x1MmQzMFx1MmQ1OVx1MmQzZFx1MmQzMCBcdTJkMzRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUyZDM0XSBMVCIsbGFzdERheToiW1x1MmQz''@;'; put 'put ''MFx1MmQ1YVx1MmQzMFx1MmQ0Zlx1MmQ1YyBcdTJkMzRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUyZDM0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUyZDM3XHUyZDMwXHUyZDM3XHUyZDQ1IFx1MmQ1OSBcdTJkNjJcdTJkMzBcdTJkNGYgJXMiLHBhc3Q6Ilx1''@;'; put 'put ''MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIsczoiXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixzczoiJWQgXHUyZDQ5XHUyZDRlXHUyZDQ5XHUyZDNkIixtOiJcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLG1tOiIlZCBcdTJkNGVcdTJkNDlcdTJkNGZcdTJkNTNcdTJkM2EiLGg6Ilx1MmQ1''@;'; put 'put ''OVx1MmQzMFx1MmQ0NFx1MmQzMCIsaGg6IiVkIFx1MmQ1Y1x1MmQzMFx1MmQ1OVx1MmQ1OVx1MmQzMFx1MmQ0NFx1MmQ0OVx1MmQ0ZiIsZDoiXHUyZDMwXHUyZDU5XHUyZDU5IixkZDoiJWQgb1x1MmQ1OVx1MmQ1OVx1MmQzMFx1MmQ0ZiIsTToiXHUyZDMwXHUyZDYyb1x1MmQ1M1x1MmQ1NCIs''@;'; put 'put ''TU06IiVkIFx1MmQ0OVx1MmQ2Mlx1MmQ2Mlx1MmQ0OVx1MmQ1NFx1MmQ0ZiIseToiXHUyZDMwXHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5Iix5eToiJWQgXHUyZDQ5XHUyZDU5XHUyZDMzXHUyZDMwXHUyZDU5XHUyZDRmIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShGKDE2Njc2KSl9LDY5NTgw''@;'; put 'put ''OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgidWctY24iLHttb250aHM6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3''@;'; put 'put ''XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2''@;'; put 'put ''MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUw''@;'; put 'put ''NjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2MjdcdTA2NDZcdTA2Y2JcdTA2MjdcdTA2MzFfXHUwNjQxXHUwNmQwXHUwNmNiXHUwNjMxXHUwNjI3XHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyYV9cdTA2MjZcdTA2Mjdc''@;'; put 'put ''dTA2N2VcdTA2MzFcdTA2ZDBcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0Nl9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDRfXHUwNjI2XHUwNjI3XHUwNmNiXHUwNjNhXHUwNmM3XHUwNjMzXHUwNjJhX1x1MDYzM1x1MDZkMFx1MDY0''@;'; put 'put ''Nlx1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MjZcdTA2YzZcdTA2NDNcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjRhXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyZlx1MDZkMFx1MDY0M1x1MDYyN1x1MDYyOFx1MDY0OVx1MDYz''@;'; put 'put ''MSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjRhXHUwNmQ1XHUwNjQzXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyZlx1MDZjOFx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MzNcdTA2ZDVcdTA2NGFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVf''@;'; put 'put ''XHUwNjg2XHUwNjI3XHUwNjMxXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDY3ZVx1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2MmNcdTA2YzhcdTA2NDVcdTA2ZDVfXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1Ii5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6Ilx1MDY0YVx1MDZkNV9cdTA2MmZcdTA2YzhfXHUwNjMzXHUwNmQ1X1x1MDY4Nlx1MDYyN19cdTA2N2VcdTA2ZDVfXHUwNjJjXHUwNmM4X1x1MDYzNFx1MDZkNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNc''@;'; put 'put ''dTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUw''@;'; put 'put ''NjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDkiLExMTDoiWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBj''@;'; put 'put ''IEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIFlZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZcdTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OVx1MDYwYyBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDY0YVx1MDZkMFx1MDYz''@;'; put 'put ''MVx1MDY0OVx1MDY0NSBcdTA2NDNcdTA2ZDBcdTA2ODZcdTA2ZDV8XHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxfFx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDZ8XHUwNjg2XHUwNmM4XHUwNjM0fFx1MDY4Nlx1''@;'; put 'put ''MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDZ8XHUwNjQzXHUwNmQ1XHUwNjg2LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksIlx1MDY0YVx1MDZkMFx1MDYzMVx1MDY0OVx1MDY0NSBcdTA2''@;'; put 'put ''NDNcdTA2ZDBcdTA2ODZcdTA2ZDUiPT09bGV8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09bGV8fCJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2NDlcdTA2NDYgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2Ij09PWxlP206Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1''@;'; put 'put ''MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiPT09bGV8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09bGU/bSsxMjptPj0xMT9tOm0rMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7dmFyIE89MTAwKm0rbGU7cmV0dXJuIE88NjAwPyJcdTA2NGFcdTA2''@;'; put 'put ''ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpPPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpPPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiOk88''@;'; put 'put ''MTIzMD8iXHUwNjg2XHUwNmM4XHUwNjM0IjpPPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyOFx1MDZjOFx1MDZhZlx1''@;'; put 'put ''MDZjOFx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUwNmQ1XHUwNjMxXHUwNjQz''@;'; put 'put ''XHUwNjQ5XSBkZGRkIFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6IltcdTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlcdTA2NDZcdTA2NDJcdTA2''@;'; put 'put ''NDldIGRkZGQgW1x1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFzdDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IixzOiJcdTA2''@;'; put 'put ''NDZcdTA2ZDVcdTA2ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixt''@;'; put 'put ''bToiJWQgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQzXHUwNmM4''@;'; put 'put ''XHUwNjQ2IixkZDoiJWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToiJWQgXHUwNjRhXHUwNjQ5''@;'; put 'put ''XHUwNjQ0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkvLG9yZGluYWw6ZnVuY3Rpb24obSxsZSl7c3dpdGNoKGxlKXtjYXNlImQiOmNh''@;'; put 'put ''c2UiRCI6Y2FzZSJEREQiOnJldHVybiBtKyItXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rIi1cdTA2YmVcdTA2ZDVcdTA2N2VcdTA2MmFcdTA2ZDUiO2RlZmF1bHQ6cmV0dXJuIG19fSxwcmVwYXJzZTpmdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBs''@;'; put 'put ''YWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKG0pe3JldHVybiBtLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShGKDE2Njc2KSl9LDg3MjcwOmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2Z1bmN0''@;'; put 'put ''aW9uIG0oUix6LEspe3JldHVybiJtIj09PUs/ej8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzIjoiaCI9PT1LP3o/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQz''@;'; put 'put ''MCI6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI6UisiICIrZnVuY3Rpb24geChSLHope3ZhciBLPVIuc3BsaXQoIl8iKTtyZXR1cm4geiUxMD09MSYmeiUxMDAhPTExP0tbMF06eiUxMD49MiYmeiUxMDw9NCYmKHolMTAwPDEwfHx6JTEwMD49MjApP0tbMV06S1syXX0o''@;'; put 'put ''e3NzOno/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzhfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOno/Ilx1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2Jc''@;'; put 'put ''dTA0MzhcdTA0M2RcdTA0MzhfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0''@;'; put 'put ''M2JcdTA0MzhcdTA0M2QiLGhoOno/Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzhfXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkIjoiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQz''@;'; put 'put ''X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzZFx1MDQ1Nlx1MDQzMiIsTU06Ilx1MDQzY1x1MDQ1Nlx1MDQ0''@;'; put 'put ''MVx1MDQ0Zlx1MDQ0Nlx1MDQ0Y19cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZfXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDU2XHUwNDMyIix5eToiXHUwNDQwXHUwNDU2XHUwNDNhX1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQzOF9cdTA0NDBcdTA0M2VcdTA0''@;'; put 'put ''M2FcdTA0NTZcdTA0MzIifVtLXSwrUil9ZnVuY3Rpb24gTShSKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gUisiXHUwNDNlIisoMTE9PT10aGlzLmhvdXJzKCk/Ilx1MDQzMSI6IiIpKyJdIExUIn19YWUuZGVmaW5lTG9jYWxlKCJ1ayIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NTZc''@;'; put 'put ''dTA0NDdcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDNlXHUwNDMzXHUwNDNlX1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNk''@;'; put 'put ''XHUwNDRmX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0M2RcdTA0NGZfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0MzZcdTA0''@;'; put 'put ''M2VcdTA0MzJcdTA0NDJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NTZcdTA0NDdcdTA0''@;'; put 'put ''MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDM4XHUwNDM5X1x1MDQzMVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzN1x1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUw''@;'; put 'put ''NDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0MzhcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDQxXHUwNDM1XHUwNDQwXHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzNVx1''@;'; put 'put ''MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNlXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIuc3BsaXQo''@;'; put 'put ''Il8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ1Nlx1MDQ0N19cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDMxXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMlx1MDQ1Nlx1MDQ0Ml9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQzOFx1''@;'; put 'put ''MDQzZl9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0M2ZfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzNlx1MDQzZVx1MDQzMlx1MDQ0Ml9cdTA0M2JcdTA0MzhcdTA0NDFcdTA0NDJfXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOmZ1bmN0aW9uIGxlKFIseil7dmFy''@;'; put 'put ''IEs9e25vbWluYXRpdmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxh''@;'; put 'put ''Y2N1c2F0aXZlOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVc''@;'; put 'put ''dTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRp''@;'; put 'put ''dmU6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1''@;'; put 'put ''MDQzNVx1MDQzNFx1MDQzOF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07''@;'; put 'put ''cmV0dXJuITA9PT1SP0subm9taW5hdGl2ZS5zbGljZSgxLDcpLmNvbmNhdChLLm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6Uj9LWy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdCh6KT8iYWNjdXNhdGl2ZSI6L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0''@;'; put 'put ''M1x1MDQzYlx1MDQzZVx1MDQ1N3xcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3Qoeik/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW1IuZGF5KCldOksubm9taW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNk''@;'; put 'put ''XHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUw''@;'; put 'put ''NDQ3XHUwNDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgTU1NTSBZWVlZIFx1MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6TSgiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5Ok0oIltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiks''@;'; put 'put ''bGFzdERheTpNKCJbXHUwNDEyXHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOk0oIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gTSgiW1x1MDQxY1x1MDQz''@;'; put 'put ''OFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gTSgiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0gZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0IixzczptLG0sbW06bSxoOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDMiLGhoOm0sZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjIixkZDptLE06Ilx1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ0YyIsTU06bSx5OiJcdTA0NDBcdTA0NTZcdTA0M2Ei''@;'; put 'put ''LHl5Om19LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NnxcdTA0NDBcdTA0MzBcdTA0M2RcdTA0M2FcdTA0NDN8XHUwNDM0XHUwNDNkXHUwNDRmfFx1MDQzMlx1MDQzNVx1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbihSKXtyZXR1cm4vXihcdTA0''@;'; put 'put ''MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwKSQvLnRlc3QoUil9LG1lcmlkaWVtOmZ1bmN0aW9uKFIseixLKXtyZXR1cm4gUjw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NTYiOlI8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0MyI6''@;'; put 'put ''UjwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZSkvLG9yZGluYWw6ZnVuY3Rpb24oUix6KXtzd2l0Y2goeil7Y2FzZSJNIjpjYXNl''@;'; put 'put ''ImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIFIrIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIFIrIi1cdTA0MzNcdTA0M2UiO2RlZmF1bHQ6cmV0dXJuIFJ9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSwxMTY1NjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rp''@;'; put 'put ''b24oYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0MVx1MDYzMVx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZjY1x1MDY0NCIsIlx1MDY0NVx1MDYy''@;'; put 'put ''Nlx1MDZjYyIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyNlx1MDZjYyIsIlx1MDYyN1x1MDZhZlx1MDYzM1x1MDYyYSIsIlx1MDYzM1x1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyN1x1MDZhOVx1MDYyYVx1MDY0OFx1MDYyOFx1MDYz''@;'; put 'put ''MSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLG09WyJcdTA2MjdcdTA2MmFcdTA2NDhcdTA2MjdcdTA2MzEiLCJcdTA2N2VcdTA2Y2NcdTA2MzEiLCJcdTA2NDVcdTA2NDZcdTA2YWZcdTA2NDQiLCJcdTA2MjhcdTA2''@;'; put 'put ''MmZcdTA2YmUiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2YzEiLCJcdTA2YzFcdTA2NDFcdTA2MmFcdTA2YzEiXTthZS5kZWZpbmVMb2NhbGUoInVyIix7bW9udGhzOngsbW9udGhzU2hvcnQ6eCx3ZWVrZGF5czptLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6bSx3ZWVrZGF5c01pbjptLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZFx1MDYwYyBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlk''@;'; put 'put ''aWVtUGFyc2U6L1x1MDYzNVx1MDYyOFx1MDYyZHxcdTA2MzRcdTA2MjdcdTA2NDUvLGlzUE06ZnVuY3Rpb24oTSl7cmV0dXJuIlx1MDYzNFx1MDYyN1x1MDY0NSI9PT1NfSxtZXJpZGllbTpmdW5jdGlvbihNLE8sUil7cmV0dXJuIE08MTI/Ilx1MDYzNVx1MDYyOFx1MDYyZCI6Ilx1MDYzNFx1''@;'; put 'put ''MDYyN1x1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjIyXHUwNjJjIFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2YTlcdTA2NDQgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1''@;'; put 'put ''MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzEgXHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMwXHUwNjM0XHUwNjJhXHUwNmMxXSBkZGRkIFtcdTA2MjhcdTA2NDhcdTA2''@;'; put 'put ''NDJcdTA2MmFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA2MjhcdTA2MzlcdTA2MmYiLHBhc3Q6IiVzIFx1MDY0Mlx1MDYyOFx1MDY0NCIsczoiXHUwNjg2XHUwNjQ2XHUwNjJmIFx1MDYzM1x1MDZjY1x1MDZhOVx1MDY0Nlx1MDY4OCIsc3M6IiVkIFx1''@;'; put 'put ''MDYzM1x1MDZjY1x1MDZhOVx1MDY0Nlx1MDY4OCIsbToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDY0Nlx1MDY3OSIsbW06IiVkIFx1MDY0NVx1MDY0Nlx1MDY3OSIsaDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDZhZlx1MDZiZVx1MDY0Nlx1MDY3OVx1MDZjMSIsaGg6IiVkIFx1MDZh''@;'; put 'put ''Zlx1MDZiZVx1MDY0Nlx1MDY3OVx1MDZkMiIsZDoiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDYyZlx1MDY0NiIsZGQ6IiVkIFx1MDYyZlx1MDY0NiIsTToiXHUwNjI3XHUwNmNjXHUwNmE5IFx1MDY0NVx1MDYyN1x1MDZjMSIsTU06IiVkIFx1MDY0NVx1MDYyN1x1MDZjMSIseToiXHUwNjI3XHUw''@;'; put 'put ''NmNjXHUwNmE5IFx1MDYzM1x1MDYyN1x1MDY0NCIseXk6IiVkIFx1MDYzM1x1MDYyN1x1MDY0NCJ9LHByZXBhcnNlOmZ1bmN0aW9uKE0pe3JldHVybiBNLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oTSl7cmV0dXJuIE0ucmVwbGFjZSgvLC9nLCJcdTA2MGMi''@;'; put 'put ''KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMTg3NDQ6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ1ei1sYXRuIix7bW9udGhzOiJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1''@;'; put 'put ''c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFu''@;'; put 'put ''YmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IllhX0R1X1NlX0Nob19QYV9KdV9TaGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQnVndW4gc29hdF0gTFQgW2RhXSIsbmV4dERheToiW0VydGFn''@;'; put 'put ''YV0gTFQgW2RhXSIsbmV4dFdlZWs6ImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsbGFzdERheToiW0tlY2hhIHNvYXRdIExUIFtkYV0iLGxhc3RXZWVrOiJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IllhcWlu''@;'; put 'put ''ICVzIGljaGlkYSIscGFzdDoiQmlyIG5lY2hhICVzIG9sZGluIixzOiJzb25peWEiLHNzOiIlZCBzb25peWEiLG06ImJpciBkYXFpcWEiLG1tOiIlZCBkYXFpcWEiLGg6ImJpciBzb2F0IixoaDoiJWQgc29hdCIsZDoiYmlyIGt1biIsZGQ6IiVkIGt1biIsTToiYmlyIG95IixNTToiJWQgb3ki''@;'; put 'put ''LHk6ImJpciB5aWwiLHl5OiIlZCB5aWwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw2ODM2NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInV6Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBc''@;'; put 'put ''dTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUw''@;'; put 'put ''NDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1''@;'; put 'put ''MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RfXHUwNDM4XHUwNDRlXHUw''@;'; put 'put ''NDNiX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQyZlx1MDQzYVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9c''@;'; put 'put ''dTA0MTRcdTA0NDNcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDIxXHUwNDM1XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQyN1x1MDQzZVx1MDQ0MFx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MWZcdTA0MzBcdTA0MzlcdTA0NDhcdTA0MzBc''@;'; put 'put ''dTA0M2RcdTA0MzFcdTA0MzBfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQyOFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MmZcdTA0M2FcdTA0NDhfXHUwNDE0XHUwNDQzXHUwNDQ4X1x1MDQyMVx1MDQzNVx1MDQ0OF9cdTA0Mjdc''@;'; put 'put ''dTA0M2VcdTA0NDBfXHUwNDFmXHUwNDMwXHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MjhcdTA0MzBcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQyZlx1MDQzYV9cdTA0MTRcdTA0NDNfXHUwNDIxXHUwNDM1X1x1MDQyN1x1MDQzZV9cdTA0MWZcdTA0MzBfXHUwNDE2''@;'; put 'put ''XHUwNDQzX1x1MDQyOFx1MDQzMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0NDNcdTA0MzNcdTA0NDNcdTA0M2QgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzMFx1MDQzM1x1MDQzMF0gTFQgW1x1MDQzNFx1MDQzMF0iLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQzMCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0''@;'; put 'put ''V2VlazoiW1x1MDQyM1x1MDQ0Mlx1MDQzM1x1MDQzMFx1MDQzZF0gZGRkZCBbXHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM4IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQyZlx1MDQzYVx1''@;'; put 'put ''MDQzOFx1MDQzZCAlcyBcdTA0MzhcdTA0NDdcdTA0MzhcdTA0MzRcdTA0MzAiLHBhc3Q6Ilx1MDQxMVx1MDQzOFx1MDQ0MCBcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzAgJXMgXHUwNDNlXHUwNDNiXHUwNDM0XHUwNDM4XHUwNDNkIixzOiJcdTA0NDRcdTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBc''@;'; put 'put ''dTA0NDIiLHNzOiIlZCBcdTA0NDRcdTA0NDNcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDIiLG06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0M2FcdTA0MzhcdTA0M2FcdTA0MzAiLGg6Ilx1MDQz''@;'; put 'put ''MVx1MDQzOFx1MDQ0MCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0NDNcdTA0M2QiLE06Ilx1MDQzMVx1MDQzOFx1MDQ0MCBc''@;'; put 'put ''dTA0M2VcdTA0MzkiLE1NOiIlZCBcdTA0M2VcdTA0MzkiLHk6Ilx1MDQzMVx1MDQzOFx1MDQ0MCBcdTA0MzlcdTA0MzhcdTA0M2IiLHl5OiIlZCBcdTA0MzlcdTA0MzhcdTA0M2IifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oRigxNjY3NikpfSw3NTA0OTpmdW5jdGlvbihhdCxJZSxGKXshZnVu''@;'; put 'put ''Y3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInZpIix7bW9udGhzOiJ0aFx4ZTFuZyAxX3RoXHhlMW5nIDJfdGhceGUxbmcgM190aFx4ZTFuZyA0X3RoXHhlMW5nIDVfdGhceGUxbmcgNl90aFx4ZTFuZyA3X3RoXHhlMW5nIDhfdGhceGUxbmcgOV90aFx4ZTFuZyAxMF90''@;'; put 'put ''aFx4ZTFuZyAxMV90aFx4ZTFuZyAxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTIiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3''@;'; put 'put ''ZWVrZGF5czoiY2hcdTFlZTcgbmhcdTFlYWR0X3RoXHUxZWU5IGhhaV90aFx1MWVlOSBiYV90aFx1MWVlOSB0XHUwMWIwX3RoXHUxZWU5IG5cdTAxMDNtX3RoXHUxZWU5IHNceGUxdV90aFx1MWVlOSBiXHUxZWEzeSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJDTl9UMl9UM19UNF9UNV9U''@;'; put 'put ''Nl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQ05fVDJfVDNfVDRfVDVfVDZfVDciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLG1lcmlkaWVtUGFyc2U6L3NhfGNoL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXmNoJC9pLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9u''@;'; put 'put ''KG0sbGUsTSl7cmV0dXJuIG08MTI/TT8ic2EiOiJTQSI6TT8iY2giOiJDSCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIixMTEw6IkQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBbblx1MDEwM21dIFlZWVkgSEg6bW0iLGw6IkREL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIXHhmNG0gbmF5IGxceGZhY10g''@;'; put 'put ''TFQiLG5leHREYXk6IltOZ1x4ZTB5IG1haSBsXHhmYWNdIExUIixuZXh0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRcdTFlZGJpIGxceGZhY10gTFQiLGxhc3REYXk6IltIXHhmNG0gcXVhIGxceGZhY10gTFQiLGxhc3RXZWVrOiJkZGRkIFt0dVx1MWVhN24gdHJcdTAxYjBcdTFlZGJjIGxceGZh''@;'; put 'put ''Y10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHRcdTFlZGJpIixwYXN0OiIlcyB0clx1MDFiMFx1MWVkYmMiLHM6InZceGUwaSBnaVx4ZTJ5IixzczoiJWQgZ2lceGUyeSIsbToibVx1MWVkOXQgcGhceGZhdCIsbW06IiVkIHBoXHhmYXQiLGg6Im1cdTFlZDl0''@;'; put 'put ''IGdpXHUxZWRkIixoaDoiJWQgZ2lcdTFlZGQiLGQ6Im1cdTFlZDl0IG5nXHhlMHkiLGRkOiIlZCBuZ1x4ZTB5Iix3OiJtXHUxZWQ5dCB0dVx1MWVhN24iLHd3OiIlZCB0dVx1MWVhN24iLE06Im1cdTFlZDl0IHRoXHhlMW5nIixNTToiJWQgdGhceGUxbmciLHk6Im1cdTFlZDl0IG5cdTAxMDNt''@;'; put 'put ''Iix5eToiJWQgblx1MDEwM20ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVybiBtfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3NikpfSwxNTEwNjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjthZS5kZWZpbmVMb2NhbGUoIngtcHNldWRvIix7bW9udGhzOiJKflx4ZTFceGYxXHhmYVx4ZTF+clx4ZmRfRn5ceGU5YnJceGZhflx4ZTFyXHhmZF9+TVx4ZTFyY35oX1x4YzFwfnJceGVkbF9+TVx4ZTFceGZkX35KXHhmYVx4ZjFceGU5fl9KXHhmYWx+XHhmZF9ceGMxXHhmYX5nXHhmYXN0''@;'; put 'put ''fl9TXHhlOXB+dFx4ZTltYn5ceGU5cl9ceGQzfmN0XHhmM2J+XHhlOXJfXHhkMX5ceGYzdlx4ZTltfmJceGU5cl9+RFx4ZTljXHhlOX5tYlx4ZTlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKflx4ZTFceGYxX35GXHhlOWJffk1ceGUxcl9+XHhjMXByX35NXHhlMVx4ZmRffkpceGZhXHhm''@;'; put 'put ''MV9+Slx4ZmFsX35ceGMxXHhmYWdfflNceGU5cF9+XHhkM2N0X35ceGQxXHhmM3ZffkRceGU5YyIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTflx4ZmFceGYxZFx4ZTF+XHhmZF9NXHhmM35ceGYxZFx4ZTFceGZkfl9UXHhmYVx4ZTl+c2RceGUxXHhmZH5fV1x4''@;'; put 'put ''ZTlkflx4ZjFceGU5c2R+XHhlMVx4ZmRfVH5oXHhmYXJzfmRceGUxXHhmZF9+RnJceGVkZH5ceGUxXHhmZF9Tflx4ZTF0XHhmYXJ+ZFx4ZTFceGZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN+XHhmYVx4ZjFffk1ceGYzXHhmMV9+VFx4ZmFceGU5X35XXHhlOWRfflRoXHhmYV9+RnJc''@;'; put 'put ''eGVkX35TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN+XHhmYV9NXHhmM35fVFx4ZmFffldceGU5X1R+aF9Gcn5fU1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1R+XHhmM2RceGUxflx4ZmQgXHhlMXRdIExUIixuZXh0RGF5OiJbVH5ceGYzbVx4ZjN+cnJceGYzfncgXHhlMXRdIExUIixuZXh0V2VlazoiZGRk''@;'; put 'put ''ZCBbXHhlMXRdIExUIixsYXN0RGF5OiJbXHhkZH5ceGU5c3R+XHhlOXJkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbGFzdFdlZWs6IltMflx4ZTFzdF0gZGRkZCBbXHhlMXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJceGVkflx4ZjEgJXMiLHBhc3Q6IiVzIFx4ZTF+''@;'; put 'put ''Z1x4ZjMiLHM6Ilx4ZTEgfmZceGU5dyB+c1x4ZTljXHhmM35ceGYxZHMiLHNzOiIlZCBzflx4ZTljXHhmM1x4ZjF+ZHMiLG06Ilx4ZTEgfm1ceGVkXHhmMX5ceGZhdFx4ZTkiLG1tOiIlZCBtflx4ZWRceGYxXHhmYX50XHhlOXMiLGg6Ilx4ZTF+XHhmMSBoXHhmM35ceGZhciIsaGg6IiVkIGh+''@;'; put 'put ''XHhmM1x4ZmFycyIsZDoiXHhlMSB+ZFx4ZTFceGZkIixkZDoiJWQgZH5ceGUxXHhmZHMiLE06Ilx4ZTEgfm1ceGYzXHhmMX50aCIsTU06IiVkIG1+XHhmM1x4ZjF0fmhzIix5OiJceGUxIH5ceGZkXHhlOVx4ZTFyIix5eToiJWQgXHhmZH5ceGU5XHhlMXJzIn0sZGF5T2ZNb250aE9yZGluYWxQ''@;'; put 'put ''YXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIGxlPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1sZT8ic3QiOjI9PT1sZT8ibmQiOjM9PT1sZT8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oRigxNjY3Nikp''@;'; put 'put ''fSw2MTk5OmZ1bmN0aW9uKGF0LEllLEYpeyFmdW5jdGlvbihhZSl7InVzZSBzdHJpY3QiO2FlLmRlZmluZUxvY2FsZSgieW8iLHttb250aHM6IlNcdTFlYjlcdTAzMDFyXHUxZWI5XHUwMzAxX0VcdTAzMDByZVx1MDMwMGxlXHUwMzAwX1x1MWViOHJcdTFlYjlcdTAzMDBuYVx1MDMwMF9JXHUw''@;'; put 'put ''MzAwZ2JlXHUwMzAxX0VcdTAzMDBiaWJpX09cdTAzMDBrdVx1MDMwMGR1X0FnXHUxZWI5bW9fT1x1MDMwMGd1XHUwMzAxbl9Pd2V3ZV9cdTFlY2NcdTAzMDB3YVx1MDMwMHJhXHUwMzAwX0JlXHUwMzAxbHVcdTAzMDFfXHUxZWNjXHUwMzAwcFx1MWViOVx1MDMwMFx1MDMwMCIuc3BsaXQoIl8i''@;'; put 'put ''KSxtb250aHNTaG9ydDoiU1x1MWViOVx1MDMwMXJfRVx1MDMwMHJsX1x1MWViOHJuX0lcdTAzMDBnYl9FXHUwMzAwYmlfT1x1MDMwMGt1XHUwMzAwX0FnXHUxZWI5X09cdTAzMDBndVx1MDMwMV9Pd2VfXHUxZWNjXHUwMzAwd2FcdTAzMDBfQmVcdTAzMDFsX1x1MWVjY1x1MDMwMHBcdTFlYjlc''@;'; put 'put ''dTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFcdTAzMDBpXHUwMzAwa3VcdTAzMDFfQWplXHUwMzAxX0lcdTAzMDBzXHUxZWI5XHUwMzAxZ3VuX1x1MWVjY2pcdTFlY2RcdTAzMDFydVx1MDMwMV9cdTFlY2NqXHUxZWNkXHUwMzAxYlx1MWVjZF9cdTFlYjh0aVx1MDMwMF9BXHUw''@;'; put 'put ''MzAwYmFcdTAzMDFtXHUxZWI5XHUwMzAxdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQVx1MDMwMGlcdTAzMDBrX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMV9cdTFlY2Nqcl9cdTFlY2NqYl9cdTFlYjh0aVx1MDMwMF9BXHUwMzAwYmFcdTAzMDEiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNNaW46IkFcdTAzMDBpXHUwMzAwX0FqX0lcdTAzMDBzX1x1MWVjY3JfXHUxZWNjYl9cdTFlYjh0X0FcdTAzMDBiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQg''@;'; put 'put ''TU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPXHUwMzAwbmlcdTAzMDAgbmldIExUIixuZXh0RGF5OiJbXHUxZWNjXHUwMzAwbGEgbmldIExUIixuZXh0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0''@;'; put 'put ''b1x1MDMwMW4nYlx1MWVjZF0gW25pXSBMVCIsbGFzdERheToiW0FcdTAzMDBuYSBuaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTFlY2NzXHUxZWI5XHUwMzAwIHRvXHUwMzAxbFx1MWVjZFx1MDMwMV0gW25pXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibmlcdTAz''@;'; put 'put ''MDEgJXMiLHBhc3Q6IiVzIGtcdTFlY2RqYVx1MDMwMSIsczoiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSBhYXlhXHUwMzAxIGRpZSIsc3M6ImFheWFcdTAzMDEgJWQiLG06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEga2FuIixtbToiaVx1MDMwMHNcdTFlYjlqdVx1MDMwMSAlZCIsaDoid2FcdTAz''@;'; put 'put ''MDFrYXRpIGthbiIsaGg6IndhXHUwMzAxa2F0aSAlZCIsZDoiXHUxZWNkalx1MWVjZFx1MDMwMSBrYW4iLGRkOiJcdTFlY2RqXHUxZWNkXHUwMzAxICVkIixNOiJvc3VcdTAzMDAga2FuIixNTToib3N1XHUwMzAwICVkIix5OiJcdTFlY2RkdVx1MDMwMW4ga2FuIix5eToiXHUxZWNkZHVcdTAz''@;'; put 'put ''MDFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxZWNkalx1MWVjZFx1MDMwMVxzXGR7MSwyfS8sb3JkaW5hbDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMjcyODA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFl''@;'; put 'put ''KXsidXNlIHN0cmljdCI7YWUuZGVmaW5lTG9jYWxlKCJ6aC1jbiIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhf''@;'; put 'put ''XHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4''@;'; put 'put ''XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU1NDY4XHU2NWU1X1x1NTQ2OFx1NGUwMF9cdTU0NjhcdTRlOGNfXHU1NDY4XHU0ZTA5X1x1NTQ2OFx1NTZkYl9cdTU0NjhcdTRlOTRfXHU1NDY4XHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19c''@;'; put 'put ''dTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVBaFx1NzBiOW1t''@;'; put 'put ''XHU1MjA2IixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkQWhcdTcwYjltbVx1NTIwNiIsbDoiWVlZWS9NL0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiXHU1''@;'; put 'put ''MWNjXHU2NjY4Ij09PWxlfHwiXHU2NWU5XHU0ZTBhIj09PWxlfHwiXHU0ZTBhXHU1MzQ4Ij09PWxlP206Ilx1NGUwYlx1NTM0OCI9PT1sZXx8Ilx1NjY1YVx1NGUwYSI9PT1sZT9tKzEyOm0+PTExP206bSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXt2YXIgTz0xMDAqbStsZTtyZXR1''@;'; put 'put ''cm4gTzw2MDA/Ilx1NTFjY1x1NjY2OCI6Tzw5MDA/Ilx1NjVlOVx1NGUwYSI6TzwxMTMwPyJcdTRlMGFcdTUzNDgiOk88MTIzMD8iXHU0ZTJkXHU1MzQ4IjpPPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4gbS53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1NGUwYl1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4g''@;'; put 'put ''dGhpcy53ZWVrKCkhPT1tLndlZWsoKT8iW1x1NGUwYV1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTU0NjgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJk''@;'; put 'put ''IjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBtKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHU1NDY4IjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1NDBlIixwYXN0OiIlc1x1NTI0ZCIs''@;'; put 'put ''czoiXHU1MWUwXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQ5ZiIsbW06IiVkIFx1NTIwNlx1OTQ5ZiIsaDoiMSBcdTVjMGZcdTY1ZjYiLGhoOiIlZCBcdTVjMGZcdTY1ZjYiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5Iix3OiIxIFx1NTQ2OCIsd3c6IiVkIFx1NTQ2''@;'; put 'put ''OCIsTToiMSBcdTRlMmFcdTY3MDgiLE1NOiIlZCBcdTRlMmFcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KEYoMTY2NzYpKX0sMzY4NjA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZGVmaW5l''@;'; put 'put ''TG9jYWxlKCJ6aC1oayIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAzXHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUw''@;'; put 'put ''MFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhfOFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYxZlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y''@;'; put 'put ''dDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUx''@;'; put 'put ''NmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1''@;'; put 'put ''NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2''@;'; put 'put ''OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxsZSl7cmV0dXJuIDEyPT09bSYmKG09MCksIlx1NTFjY1x1NjY2OCI9PT1sZXx8Ilx1NjVlOVx1NGUwYSI9PT1sZXx8Ilx1NGUw''@;'; put 'put ''YVx1NTM0OCI9PT1sZT9tOiJcdTRlMmRcdTUzNDgiPT09bGU/bT49MTE/bTptKzEyOiJcdTRlMGJcdTUzNDgiPT09bGV8fCJcdTY2NWFcdTRlMGEiPT09bGU/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sbGUsTSl7dmFyIE89MTAwKm0rbGU7cmV0dXJuIE88NjAwPyJcdTUxY2Nc''@;'; put 'put ''dTY2NjgiOk88OTAwPyJcdTY1ZTlcdTRlMGEiOk88MTIwMD8iXHU0ZTBhXHU1MzQ4IjoxMjAwPT09Tz8iXHU0ZTJkXHU1MzQ4IjpPPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBl''@;'; put 'put ''XHU1OTI5XUxUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGRMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbihtLGxlKXtzd2l0Y2gobGUpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG0rIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4gbSsiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rIlx1OTAzMSI7ZGVmYXVsdDpyZXR1cm4gbX19LHJlbGF0aXZlVGltZTp7''@;'; put 'put ''ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NWU3ZVx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0MTgiLG1tOiIlZCBcdTUyMDZcdTk0MTgiLGg6IjEgXHU1YzBmXHU2NjQyIixoaDoiJWQgXHU1YzBmXHU2NjQyIixkOiIxIFx1NTkyOSIsZGQ6IiVk''@;'; put 'put ''IFx1NTkyOSIsTToiMSBcdTUwMGJcdTY3MDgiLE1NOiIlZCBcdTUwMGJcdTY3MDgiLHk6IjEgXHU1ZTc0Iix5eToiJWQgXHU1ZTc0In19KX0oRigxNjY3NikpfSw3ODM2NDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInpoLW1v''@;'; put 'put ''Iix7bW9udGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0''@;'; put 'put ''MVx1NGU4Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYx''@;'; put 'put ''Zlx1NjcxZlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1''@;'; put 'put ''ZTVfXHU5MDMxXHU0ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8i''@;'; put 'put ''KSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDpt''@;'; put 'put ''bSIsbDoiRC9NL1lZWVkiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUw''@;'; put 'put ''YXxcdTRlMGFcdTUzNDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiXHU1MWNjXHU2NjY4Ij09PWxlfHwiXHU2NWU5XHU0ZTBhIj09PWxlfHwiXHU0ZTBhXHU1MzQ4Ij09PWxl''@;'; put 'put ''P206Ilx1NGUyZFx1NTM0OCI9PT1sZT9tPj0xMT9tOm0rMTI6Ilx1NGUwYlx1NTM0OCI9PT1sZXx8Ilx1NjY1YVx1NGUwYSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXt2YXIgTz0xMDAqbStsZTtyZXR1cm4gTzw2MDA/Ilx1NTFjY1x1NjY2OCI6Tzw5MDA/''@;'; put 'put ''Ilx1NjVlOVx1NGUwYSI6TzwxMTMwPyJcdTRlMGFcdTUzNDgiOk88MTIzMD8iXHU0ZTJkXHU1MzQ4IjpPPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOiJbXHU0ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9u''@;'; put 'put ''KG0sbGUpe3N3aXRjaChsZSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBtKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVz''@;'; put 'put ''XHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixN''@;'; put 'put ''OiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShGKDE2Njc2KSl9LDQ4MjpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rpb24oYWUpeyJ1c2Ugc3RyaWN0IjthZS5kZWZpbmVMb2NhbGUoInpoLXR3Iix7bW9udGhzOiJc''@;'; put 'put ''dTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4Y1x1Njcw''@;'; put 'put ''OCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1NjcxZlx1NjVl''@;'; put 'put ''NV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTkwMzFcdTY1ZTVfXHU5MDMxXHU0''@;'; put 'put ''ZTAwX1x1OTAzMVx1NGU4Y19cdTkwMzFcdTRlMDlfXHU5MDMxXHU1NmRiX1x1OTAzMVx1NGU5NF9cdTkwMzFcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSIsbDoiWVlZWS9N''@;'; put 'put ''L0QiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHU1MWNjXHU2NjY4fFx1NjVlOVx1NGUwYXxcdTRlMGFcdTUz''@;'; put 'put ''NDh8XHU0ZTJkXHU1MzQ4fFx1NGUwYlx1NTM0OHxcdTY2NWFcdTRlMGEvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLGxlKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwiXHU1MWNjXHU2NjY4Ij09PWxlfHwiXHU2NWU5XHU0ZTBhIj09PWxlfHwiXHU0ZTBhXHU1MzQ4Ij09PWxlP206Ilx1NGUyZFx1''@;'; put 'put ''NTM0OCI9PT1sZT9tPj0xMT9tOm0rMTI6Ilx1NGUwYlx1NTM0OCI9PT1sZXx8Ilx1NjY1YVx1NGUwYSI9PT1sZT9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxsZSxNKXt2YXIgTz0xMDAqbStsZTtyZXR1cm4gTzw2MDA/Ilx1NTFjY1x1NjY2OCI6Tzw5MDA/Ilx1NjVlOVx1NGUw''@;'; put 'put ''YSI6TzwxMTMwPyJcdTRlMGFcdTUzNDgiOk88MTIzMD8iXHU0ZTJkXHU1MzQ4IjpPPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XSBMVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV0gTFQiLG5leHRXZWVrOiJbXHU0''@;'; put 'put ''ZTBiXWRkZGQgTFQiLGxhc3REYXk6IltcdTY2MjhcdTU5MjldIExUIixsYXN0V2VlazoiW1x1NGUwYV1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTkwMzEpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sbGUpe3N3aXRj''@;'; put 'put ''aChsZSl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gbSsiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBtKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBtfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0''@;'; put 'put ''OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1''@;'; put 'put ''NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShGKDE2Njc2KSl9LDE2Njc2OmZ1bmN0aW9uKGF0LEllLEYpeyhhdD1GLm5tZChhdCkpLmV4cG9ydHM9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGFlLFk7ZnVuY3Rpb24geCgpe3Jl''@;'; put 'put ''dHVybiBhZS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGUoa2Upe3JldHVybiBrZSBpbnN0YW5jZW9mIEFycmF5fHwiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGtlKX1mdW5jdGlvbiBNKGtlKXtyZXR1cm4gbnVsbCE9a2UmJiJbb2Jq''@;'; put 'put ''ZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGtlKX1mdW5jdGlvbiBPKGtlLCRlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGtlLCRlKX1mdW5jdGlvbiBSKGtlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyly''@;'; put 'put ''ZXR1cm4gMD09PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtlKS5sZW5ndGg7dmFyICRlO2ZvcigkZSBpbiBrZSlpZihPKGtlLCRlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB6KGtlKXtyZXR1cm4gdm9pZCAwPT09a2V9ZnVuY3Rpb24gSyhrZSl7cmV0dXJuIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBrZXx8IltvYmplY3QgTnVtYmVyXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoa2UpfWZ1bmN0aW9uIEkoa2Upe3JldHVybiBrZSBpbnN0YW5jZW9mIERhdGV8fCJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChrZSl9ZnVuY3Rp''@;'; put 'put ''b24gayhrZSwkZSl7dmFyIEx0LG10PVtdLEd0PWtlLmxlbmd0aDtmb3IoTHQ9MDtMdDxHdDsrK0x0KW10LnB1c2goJGUoa2VbTHRdLEx0KSk7cmV0dXJuIG10fWZ1bmN0aW9uIEUoa2UsJGUpe2Zvcih2YXIgbXQgaW4gJGUpTygkZSxtdCkmJihrZVttdF09JGVbbXRdKTtyZXR1cm4gTygkZSwi''@;'; put 'put ''dG9TdHJpbmciKSYmKGtlLnRvU3RyaW5nPSRlLnRvU3RyaW5nKSxPKCRlLCJ2YWx1ZU9mIikmJihrZS52YWx1ZU9mPSRlLnZhbHVlT2YpLGtlfWZ1bmN0aW9uIGooa2UsJGUsbXQsTHQpe3JldHVybiBrZChrZSwkZSxtdCxMdCwhMCkudXRjKCl9ZnVuY3Rpb24gQihrZSl7cmV0dXJuIG51bGw9''@;'; put 'put ''PWtlLl9wZiYmKGtlLl9wZj17ZW1wdHk6ITEsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ITEsaW52YWxpZEVyYTpudWxsLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ITEsdXNlckludmFsaWRhdGVk''@;'; put 'put ''OiExLGlzbzohMSxwYXJzZWREYXRlUGFydHM6W10sZXJhOm51bGwsbWVyaWRpZW06bnVsbCxyZmMyODIyOiExLHdlZWtkYXlNaXNtYXRjaDohMX0pLGtlLl9wZn1mdW5jdGlvbiBYKGtlKXtpZihudWxsPT1rZS5faXNWYWxpZCl7dmFyICRlPUIoa2UpLG10PVkuY2FsbCgkZS5wYXJzZWREYXRl''@;'; put 'put ''UGFydHMsZnVuY3Rpb24oR3Qpe3JldHVybiBudWxsIT1HdH0pLEx0PSFpc05hTihrZS5fZC5nZXRUaW1lKCkpJiYkZS5vdmVyZmxvdzwwJiYhJGUuZW1wdHkmJiEkZS5pbnZhbGlkRXJhJiYhJGUuaW52YWxpZE1vbnRoJiYhJGUuaW52YWxpZFdlZWtkYXkmJiEkZS53ZWVrZGF5TWlzbWF0Y2gm''@;'; put 'put ''JiEkZS5udWxsSW5wdXQmJiEkZS5pbnZhbGlkRm9ybWF0JiYhJGUudXNlckludmFsaWRhdGVkJiYoISRlLm1lcmlkaWVtfHwkZS5tZXJpZGllbSYmbXQpO2lmKGtlLl9zdHJpY3QmJihMdD1MdCYmMD09PSRlLmNoYXJzTGVmdE92ZXImJjA9PT0kZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lk''@;'; put 'put ''IDA9PT0kZS5iaWdIb3VyKSxudWxsIT1PYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0Zyb3plbihrZSkpcmV0dXJuIEx0O2tlLl9pc1ZhbGlkPUx0fXJldHVybiBrZS5faXNWYWxpZH1mdW5jdGlvbiBVKGtlKXt2YXIgJGU9aihOYU4pO3JldHVybiBudWxsIT1rZT9FKEIoJGUpLGtlKTpCKCRl''@;'; put 'put ''KS51c2VySW52YWxpZGF0ZWQ9ITAsJGV9WT1BcnJheS5wcm90b3R5cGUuc29tZT9BcnJheS5wcm90b3R5cGUuc29tZTpmdW5jdGlvbihrZSl7dmFyIEx0LCRlPU9iamVjdCh0aGlzKSxtdD0kZS5sZW5ndGg+Pj4wO2ZvcihMdD0wO0x0PG10O0x0KyspaWYoTHQgaW4gJGUmJmtlLmNhbGwodGhp''@;'; put 'put ''cywkZVtMdF0sTHQsJGUpKXJldHVybiEwO3JldHVybiExfTt2YXIgcT14Lm1vbWVudFByb3BlcnRpZXM9W10sZWU9ITE7ZnVuY3Rpb24gdGUoa2UsJGUpe3ZhciBtdCxMdCxHdCxVbj1xLmxlbmd0aDtpZih6KCRlLl9pc0FNb21lbnRPYmplY3QpfHwoa2UuX2lzQU1vbWVudE9iamVjdD0kZS5f''@;'; put 'put ''aXNBTW9tZW50T2JqZWN0KSx6KCRlLl9pKXx8KGtlLl9pPSRlLl9pKSx6KCRlLl9mKXx8KGtlLl9mPSRlLl9mKSx6KCRlLl9sKXx8KGtlLl9sPSRlLl9sKSx6KCRlLl9zdHJpY3QpfHwoa2UuX3N0cmljdD0kZS5fc3RyaWN0KSx6KCRlLl90em0pfHwoa2UuX3R6bT0kZS5fdHptKSx6KCRlLl9p''@;'; put 'put ''c1VUQyl8fChrZS5faXNVVEM9JGUuX2lzVVRDKSx6KCRlLl9vZmZzZXQpfHwoa2UuX29mZnNldD0kZS5fb2Zmc2V0KSx6KCRlLl9wZil8fChrZS5fcGY9QigkZSkpLHooJGUuX2xvY2FsZSl8fChrZS5fbG9jYWxlPSRlLl9sb2NhbGUpLFVuPjApZm9yKG10PTA7bXQ8VW47bXQrKyl6KEd0PSRl''@;'; put 'put ''W0x0PXFbbXRdXSl8fChrZVtMdF09R3QpO3JldHVybiBrZX1mdW5jdGlvbiBvZShrZSl7dGUodGhpcyxrZSksdGhpcy5fZD1uZXcgRGF0ZShudWxsIT1rZS5fZD9rZS5fZC5nZXRUaW1lKCk6TmFOKSx0aGlzLmlzVmFsaWQoKXx8KHRoaXMuX2Q9bmV3IERhdGUoTmFOKSksITE9PT1lZSYmKGVl''@;'; put 'put ''PSEwLHgudXBkYXRlT2Zmc2V0KHRoaXMpLGVlPSExKX1mdW5jdGlvbiBzZShrZSl7cmV0dXJuIGtlIGluc3RhbmNlb2Ygb2V8fG51bGwhPWtlJiZudWxsIT1rZS5faXNBTW9tZW50T2JqZWN0fWZ1bmN0aW9uIGhlKGtlKXshMT09PXguc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzJiZ0eXBl''@;'; put 'put ''b2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJEZXByZWNhdGlvbiB3YXJuaW5nOiAiK2tlKX1mdW5jdGlvbiB1ZShrZSwkZSl7dmFyIG10PSEwO3JldHVybiBFKGZ1bmN0aW9uKCl7aWYobnVsbCE9eC5kZXByZWNhdGlvbkhhbmRsZXImJnguZGVwcmVjYXRpb25I''@;'; put 'put ''YW5kbGVyKG51bGwsa2UpLG10KXt2YXIgR3QsVW4sSXIsTHQ9W10seW89YXJndW1lbnRzLmxlbmd0aDtmb3IoVW49MDtVbjx5bztVbisrKXtpZihHdD0iIiwib2JqZWN0Ij09dHlwZW9mIGFyZ3VtZW50c1tVbl0pe2ZvcihJciBpbiBHdCs9IlxuWyIrVW4rIl0gIixhcmd1bWVudHNbMF0pTyhh''@;'; put 'put ''cmd1bWVudHNbMF0sSXIpJiYoR3QrPUlyKyI6ICIrYXJndW1lbnRzWzBdW0lyXSsiLCAiKTtHdD1HdC5zbGljZSgwLC0yKX1lbHNlIEd0PWFyZ3VtZW50c1tVbl07THQucHVzaChHdCl9aGUoa2UrIlxuQXJndW1lbnRzOiAiK0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEx0KS5qb2luKCIi''@;'; put 'put ''KSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKSxtdD0hMX1yZXR1cm4gJGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfSwkZSl9dmFyIGcsY2U9e307ZnVuY3Rpb24gRyhrZSwkZSl7bnVsbCE9eC5kZXByZWNhdGlvbkhhbmRsZXImJnguZGVwcmVjYXRpb25IYW5kbGVyKGtlLCRlKSxjZVtrZV18fCho''@;'; put 'put ''ZSgkZSksY2Vba2VdPSEwKX1mdW5jdGlvbiBiKGtlKXtyZXR1cm4gdHlwZW9mIEZ1bmN0aW9uPCJ1IiYma2UgaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChrZSl9ZnVuY3Rpb24gSChrZSwkZSl7dmFyIEx0''@;'; put 'put ''LG10PUUoe30sa2UpO2ZvcihMdCBpbiAkZSlPKCRlLEx0KSYmKE0oa2VbTHRdKSYmTSgkZVtMdF0pPyhtdFtMdF09e30sRShtdFtMdF0sa2VbTHRdKSxFKG10W0x0XSwkZVtMdF0pKTpudWxsIT0kZVtMdF0/bXRbTHRdPSRlW0x0XTpkZWxldGUgbXRbTHRdKTtmb3IoTHQgaW4ga2UpTyhrZSxM''@;'; put 'put ''dCkmJiFPKCRlLEx0KSYmTShrZVtMdF0pJiYobXRbTHRdPUUoe30sbXRbTHRdKSk7cmV0dXJuIG10fWZ1bmN0aW9uIE4oa2Upe251bGwhPWtlJiZ0aGlzLnNldChrZSl9eC5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ITEseC5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxnPU9iamVjdC5r''@;'; put 'put ''ZXlzP09iamVjdC5rZXlzOmZ1bmN0aW9uKGtlKXt2YXIgJGUsbXQ9W107Zm9yKCRlIGluIGtlKU8oa2UsJGUpJiZtdC5wdXNoKCRlKTtyZXR1cm4gbXR9O2Z1bmN0aW9uIHYoa2UsJGUsbXQpe3ZhciBMdD0iIitNYXRoLmFicyhrZSk7cmV0dXJuKGtlPj0wP210PyIrIjoiIjoiLSIpK01hdGgu''@;'; put 'put ''cG93KDEwLE1hdGgubWF4KDAsJGUtTHQubGVuZ3RoKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkrTHR9dmFyIHA9LyhcW1teXFtdKlxdKXwoXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZ''@;'; put 'put ''WXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csdz0vKFxbW15cW10qXF0pfChcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxKPXt9LG5lPXt9O2Z1bmN0aW9u''@;'; put 'put ''IGRlKGtlLCRlLG10LEx0KXt2YXIgR3Q9THQ7InN0cmluZyI9PXR5cGVvZiBMdCYmKEd0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbTHRdKCl9KSxrZSYmKG5lW2tlXT1HdCksJGUmJihuZVskZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gdihHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksJGVbMV0s''@;'; put 'put ''JGVbMl0pfSksbXQmJihuZVttdF09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChHdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksa2UpfSl9ZnVuY3Rpb24gZmUoa2Upe3JldHVybiBrZS5tYXRjaCgvXFtbXHNcU10vKT9rZS5yZXBsYWNlKC9eXFt8XF0kL2csIiIp''@;'; put 'put ''OmtlLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIExlKGtlLCRlKXtyZXR1cm4ga2UuaXNWYWxpZCgpPygkZT1GZSgkZSxrZS5sb2NhbGVEYXRhKCkpLEpbJGVdPUpbJGVdfHxmdW5jdGlvbiB4ZShrZSl7dmFyIG10LEx0LCRlPWtlLm1hdGNoKHApO2ZvcihtdD0wLEx0PSRlLmxlbmd0aDtt''@;'; put 'put ''dDxMdDttdCsrKSRlW210XT1uZVskZVttdF1dP25lWyRlW210XV06ZmUoJGVbbXRdKTtyZXR1cm4gZnVuY3Rpb24oR3Qpe3ZhciBJcixVbj0iIjtmb3IoSXI9MDtJcjxMdDtJcisrKVVuKz1iKCRlW0lyXSk/JGVbSXJdLmNhbGwoR3Qsa2UpOiRlW0lyXTtyZXR1cm4gVW59fSgkZSksSlskZV0o''@;'; put 'put ''a2UpKTprZS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKX1mdW5jdGlvbiBGZShrZSwkZSl7dmFyIG10PTU7ZnVuY3Rpb24gTHQoR3Qpe3JldHVybiAkZS5sb25nRGF0ZUZvcm1hdChHdCl8fEd0fWZvcih3Lmxhc3RJbmRleD0wO210Pj0wJiZ3LnRlc3Qoa2UpOylrZT1rZS5yZXBsYWNlKHcs''@;'; put 'put ''THQpLHcubGFzdEluZGV4PTAsbXQtPTE7cmV0dXJuIGtlfXZhciBUZT17fTtmdW5jdGlvbiBxZShrZSwkZSl7dmFyIG10PWtlLnRvTG93ZXJDYXNlKCk7VGVbbXRdPVRlW210KyJzIl09VGVbJGVdPWtlfWZ1bmN0aW9uIFhlKGtlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGtlP1RlW2tlXXx8''@;'; put 'put ''VGVba2UudG9Mb3dlckNhc2UoKV06dm9pZCAwfWZ1bmN0aW9uIFVlKGtlKXt2YXIgbXQsTHQsJGU9e307Zm9yKEx0IGluIGtlKU8oa2UsTHQpJiYobXQ9WGUoTHQpKSYmKCRlW210XT1rZVtMdF0pO3JldHVybiAkZX12YXIgaHQ9e307ZnVuY3Rpb24gTWUoa2UsJGUpe2h0W2tlXT0kZX1mdW5j''@;'; put 'put ''dGlvbiB6ZShrZSl7cmV0dXJuIGtlJTQ9PTAmJmtlJTEwMCE9MHx8a2UlNDAwPT0wfWZ1bmN0aW9uIGl0KGtlKXtyZXR1cm4ga2U8MD9NYXRoLmNlaWwoa2UpfHwwOk1hdGguZmxvb3Ioa2UpfWZ1bmN0aW9uIHV0KGtlKXt2YXIgJGU9K2tlLG10PTA7cmV0dXJuIDAhPT0kZSYmaXNGaW5pdGUo''@;'; put 'put ''JGUpJiYobXQ9aXQoJGUpKSxtdH1mdW5jdGlvbiBNdChrZSwkZSl7cmV0dXJuIGZ1bmN0aW9uKG10KXtyZXR1cm4gbnVsbCE9bXQ/KFB0KHRoaXMsa2UsbXQpLHgudXBkYXRlT2Zmc2V0KHRoaXMsJGUpLHRoaXMpOkh0KHRoaXMsa2UpfX1mdW5jdGlvbiBIdChrZSwkZSl7cmV0dXJuIGtlLmlz''@;'; put 'put ''VmFsaWQoKT9rZS5fZFsiZ2V0Iisoa2UuX2lzVVRDPyJVVEMiOiIiKSskZV0oKTpOYU59ZnVuY3Rpb24gUHQoa2UsJGUsbXQpe2tlLmlzVmFsaWQoKSYmIWlzTmFOKG10KSYmKCJGdWxsWWVhciI9PT0kZSYmemUoa2UueWVhcigpKSYmMT09PWtlLm1vbnRoKCkmJjI5PT09a2UuZGF0ZSgpPyht''@;'; put 'put ''dD11dChtdCksa2UuX2RbInNldCIrKGtlLl9pc1VUQz8iVVRDIjoiIikrJGVdKG10LGtlLm1vbnRoKCksbm8obXQsa2UubW9udGgoKSkpKTprZS5fZFsic2V0Iisoa2UuX2lzVVRDPyJVVEMiOiIiKSskZV0obXQpKX12YXIgRHQsVXQ9L1xkLyxibj0vXGRcZC8sV249L1xkezN9Lyxlbj0vXGR7''@;'; put 'put ''NH0vLCRuPS9bKy1dP1xkezZ9LyxIbj0vXGRcZD8vLGZ0PS9cZFxkXGRcZD8vLGZuPS9cZFxkXGRcZFxkXGQ/Lyxobj0vXGR7MSwzfS8sd3Q9L1xkezEsNH0vLFh0PS9bKy1dP1xkezEsNn0vLF90PS9cZCsvLE50PS9bKy1dP1xkKy8sbW49L1p8WystXVxkXGQ6P1xkXGQvZ2kscnQ9L1p8Wyst''@;'; put 'put ''XVxkXGQoPzo6P1xkXGQpPy9naSxKdD0vWzAtOV17MCwyNTZ9WydhLXpcdTAwQTAtXHUwNUZGXHUwNzAwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRjA3XHVGRjEwLVx1RkZFRl17MSwyNTZ9fFtcdTA2MDAtXHUwNkZGXC9dezEsMjU2fShccyo/W1x1MDYwMC1cdTA2RkZdezEsMjU2''@;'; put 'put ''fSl7MSwyfS9pO2Z1bmN0aW9uIHB0KGtlLCRlLG10KXtEdFtrZV09YigkZSk/JGU6ZnVuY3Rpb24oTHQsR3Qpe3JldHVybiBMdCYmbXQ/bXQ6JGV9fWZ1bmN0aW9uIFl0KGtlLCRlKXtyZXR1cm4gTyhEdCxrZSk/RHRba2VdKCRlLl9zdHJpY3QsJGUuX2xvY2FsZSk6bmV3IFJlZ0V4cChmdW5j''@;'; put 'put ''dGlvbiBJbihrZSl7cmV0dXJuIHp0KGtlLnJlcGxhY2UoIlxcIiwiIikucmVwbGFjZSgvXFwoXFspfFxcKFxdKXxcWyhbXlxdXFtdKilcXXxcXCguKS9nLGZ1bmN0aW9uKCRlLG10LEx0LEd0LFVuKXtyZXR1cm4gbXR8fEx0fHxHdHx8VW59KSl9KGtlKSl9ZnVuY3Rpb24genQoa2Upe3JldHVy''@;'; put 'put ''biBrZS5yZXBsYWNlKC9bLVwvXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfUR0PXt9O3ZhciB5bj17fTtmdW5jdGlvbiB4bihrZSwkZSl7dmFyIG10LEd0LEx0PSRlO2Zvcigic3RyaW5nIj09dHlwZW9mIGtlJiYoa2U9W2tlXSksSygkZSkmJihMdD1mdW5jdGlvbihVbixJcil7SXJbJGVd''@;'; put 'put ''PXV0KFVuKX0pLEd0PWtlLmxlbmd0aCxtdD0wO210PEd0O210KyspeW5ba2VbbXRdXT1MdH1mdW5jdGlvbiBzbihrZSwkZSl7eG4oa2UsZnVuY3Rpb24obXQsTHQsR3QsVW4pe0d0Ll93PUd0Ll93fHx7fSwkZShtdCxHdC5fdyxHdCxVbil9KX1mdW5jdGlvbiBCbihrZSwkZSxtdCl7bnVsbCE9''@;'; put 'put ''JGUmJk8oeW4sa2UpJiZ5bltrZV0oJGUsbXQuX2EsbXQsa2UpfXZhciBLcixSbj0wLCR0PTEsUG49MixuaT0zLGxuPTQsam49NSxxcj02LGdpPTcseHI9ODtmdW5jdGlvbiBubyhrZSwkZSl7aWYoaXNOYU4oa2UpfHxpc05hTigkZSkpcmV0dXJuIE5hTjt2YXIgbXQ9ZnVuY3Rpb24gVWkoa2Us''@;'; put 'put ''JGUpe3JldHVybihrZSUkZSskZSklJGV9KCRlLDEyKTtyZXR1cm4ga2UrPSgkZS1tdCkvMTIsMT09PW10P3plKGtlKT8yOToyODozMS1tdCU3JTJ9S3I9QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/QXJyYXkucHJvdG90eXBlLmluZGV4T2Y6ZnVuY3Rpb24oa2Upe3ZhciAkZTtmb3IoJGU9MDsk''@;'; put 'put ''ZTx0aGlzLmxlbmd0aDsrKyRlKWlmKHRoaXNbJGVdPT09a2UpcmV0dXJuICRlO3JldHVybi0xfSxkZSgiTSIsWyJNTSIsMl0sIk1vIixmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pLGRlKCJNTU0iLDAsMCxmdW5jdGlvbihrZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1v''@;'; put 'put ''bnRoc1Nob3J0KHRoaXMsa2UpfSksZGUoIk1NTU0iLDAsMCxmdW5jdGlvbihrZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLGtlKX0pLHFlKCJtb250aCIsIk0iKSxNZSgibW9udGgiLDgpLHB0KCJNIixIbikscHQoIk1NIixIbixibikscHQoIk1NTSIsZnVuY3Rpb24o''@;'; put 'put ''a2UsJGUpe3JldHVybiAkZS5tb250aHNTaG9ydFJlZ2V4KGtlKX0pLHB0KCJNTU1NIixmdW5jdGlvbihrZSwkZSl7cmV0dXJuICRlLm1vbnRoc1JlZ2V4KGtlKX0pLHhuKFsiTSIsIk1NIl0sZnVuY3Rpb24oa2UsJGUpeyRlWyR0XT11dChrZSktMX0pLHhuKFsiTU1NIiwiTU1NTSJdLGZ1bmN0''@;'; put 'put ''aW9uKGtlLCRlLG10LEx0KXt2YXIgR3Q9bXQuX2xvY2FsZS5tb250aHNQYXJzZShrZSxMdCxtdC5fc3RyaWN0KTtudWxsIT1HdD8kZVskdF09R3Q6QihtdCkuaW52YWxpZE1vbnRoPWtlfSk7dmFyIEhyPSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0''@;'; put 'put ''X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLHFpPSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSxKaT0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLGFvPUp0LHJvPUp0O2Z1bmN0''@;'; put 'put ''aW9uIGhvKGtlLCRlLG10KXt2YXIgTHQsR3QsVW4sSXI9a2UudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2UpZm9yKHRoaXMuX21vbnRoc1BhcnNlPVtdLHRoaXMuX2xvbmdNb250aHNQYXJzZT1bXSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdLEx0PTA7THQ8MTI7''@;'; put 'put ''KytMdClVbj1qKFsyZTMsTHRdKSx0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0x0XT10aGlzLm1vbnRoc1Nob3J0KFVuLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpLHRoaXMuX2xvbmdNb250aHNQYXJzZVtMdF09dGhpcy5tb250aHMoVW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuIG10''@;'; put 'put ''PyJNTU0iPT09JGU/LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLElyKSk/R3Q6bnVsbDotMSE9PShHdD1Lci5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxJcikpP0d0Om51bGw6Ik1NTSI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFy''@;'; put 'put ''c2UsSXIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsSXIpKT9HdDpudWxsOi0xIT09KEd0PUtyLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLElyKSl8fC0xIT09KEd0PUtyLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxJcikpP0d0Om51bGx9ZnVuY3Rp''@;'; put 'put ''b24gUGkoa2UsJGUpe3ZhciBtdDtpZigha2UuaXNWYWxpZCgpKXJldHVybiBrZTtpZigic3RyaW5nIj09dHlwZW9mICRlKWlmKC9eXGQrJC8udGVzdCgkZSkpJGU9dXQoJGUpO2Vsc2UgaWYoIUsoJGU9a2UubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKCRlKSkpcmV0dXJuIGtlO3JldHVybiBt''@;'; put 'put ''dD1NYXRoLm1pbihrZS5kYXRlKCksbm8oa2UueWVhcigpLCRlKSksa2UuX2RbInNldCIrKGtlLl9pc1VUQz8iVVRDIjoiIikrIk1vbnRoIl0oJGUsbXQpLGtlfWZ1bmN0aW9uIExvKGtlKXtyZXR1cm4gbnVsbCE9a2U/KFBpKHRoaXMsa2UpLHgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXMp''@;'; put 'put ''Okh0KHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gdWwoKXtmdW5jdGlvbiBrZShJcix5byl7cmV0dXJuIHlvLmxlbmd0aC1Jci5sZW5ndGh9dmFyIEd0LFVuLCRlPVtdLG10PVtdLEx0PVtdO2ZvcihHdD0wO0d0PDEyO0d0KyspVW49aihbMmUzLEd0XSksJGUucHVzaCh0aGlzLm1vbnRoc1Nob3J0''@;'; put 'put ''KFVuLCIiKSksbXQucHVzaCh0aGlzLm1vbnRocyhVbiwiIikpLEx0LnB1c2godGhpcy5tb250aHMoVW4sIiIpKSxMdC5wdXNoKHRoaXMubW9udGhzU2hvcnQoVW4sIiIpKTtmb3IoJGUuc29ydChrZSksbXQuc29ydChrZSksTHQuc29ydChrZSksR3Q9MDtHdDwxMjtHdCsrKSRlW0d0XT16dCgk''@;'; put 'put ''ZVtHdF0pLG10W0d0XT16dChtdFtHdF0pO2ZvcihHdD0wO0d0PDI0O0d0KyspTHRbR3RdPXp0KEx0W0d0XSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0x0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9tb250aHNTaG9ydFJlZ2V4PXRoaXMuX21vbnRoc1JlZ2V4LHRoaXMu''@;'; put 'put ''X21vbnRoc1N0cmljdFJlZ2V4PW5ldyBSZWdFeHAoIl4oIittdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIFJjKGtlKXtyZXR1cm4gemUoa2UpPzM2NjozNjV9ZGUo''@;'; put 'put ''IlkiLDAsMCxmdW5jdGlvbigpe3ZhciBrZT10aGlzLnllYXIoKTtyZXR1cm4ga2U8PTk5OTk/dihrZSw0KToiKyIra2V9KSxkZSgwLFsiWVkiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksZGUoMCxbIllZWVkiLDRdLDAsInllYXIiKSxkZSgwLFsiWVlZWVkiLDVd''@;'; put 'put ''LDAsInllYXIiKSxkZSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFyIikscWUoInllYXIiLCJ5IiksTWUoInllYXIiLDEpLHB0KCJZIixOdCkscHQoIllZIixIbixibikscHQoIllZWVkiLHd0LGVuKSxwdCgiWVlZWVkiLFh0LCRuKSxwdCgiWVlZWVlZIixYdCwkbikseG4oWyJZWVlZWSIsIllZ''@;'; put 'put ''WVlZWSJdLFJuKSx4bigiWVlZWSIsZnVuY3Rpb24oa2UsJGUpeyRlW1JuXT0yPT09a2UubGVuZ3RoP3gucGFyc2VUd29EaWdpdFllYXIoa2UpOnV0KGtlKX0pLHhuKCJZWSIsZnVuY3Rpb24oa2UsJGUpeyRlW1JuXT14LnBhcnNlVHdvRGlnaXRZZWFyKGtlKX0pLHhuKCJZIixmdW5jdGlvbihr''@;'; put 'put ''ZSwkZSl7JGVbUm5dPXBhcnNlSW50KGtlLDEwKX0pLHgucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oa2Upe3JldHVybiB1dChrZSkrKHV0KGtlKT42OD8xOTAwOjJlMyl9O3ZhciBOMD1NdCgiRnVsbFllYXIiLCEwKTtmdW5jdGlvbiBrMihrZSwkZSxtdCxMdCxHdCxVbixJcil7dmFyIHlv''@;'; put 'put ''O3JldHVybiBrZTwxMDAmJmtlPj0wPyh5bz1uZXcgRGF0ZShrZSs0MDAsJGUsbXQsTHQsR3QsVW4sSXIpLGlzRmluaXRlKHlvLmdldEZ1bGxZZWFyKCkpJiZ5by5zZXRGdWxsWWVhcihrZSkpOnlvPW5ldyBEYXRlKGtlLCRlLG10LEx0LEd0LFVuLElyKSx5b31mdW5jdGlvbiBlMChrZSl7dmFy''@;'; put 'put ''ICRlLG10O3JldHVybiBrZTwxMDAmJmtlPj0wPygobXQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlbMF09a2UrNDAwLCRlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsbXQpKSxpc0Zpbml0ZSgkZS5nZXRVVENGdWxsWWVhcigpKSYmJGUuc2V0VVRDRnVsbFll''@;'; put 'put ''YXIoa2UpKTokZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLCRlfWZ1bmN0aW9uIHh1KGtlLCRlLG10KXt2YXIgTHQ9NyskZS1tdDtyZXR1cm4tKDcrZTAoa2UsMCxMdCkuZ2V0VVRDRGF5KCktJGUpJTcrTHQtMX1mdW5jdGlvbiBmcyhrZSwkZSxtdCxMdCxHdCl7''@;'; put 'put ''dmFyIGVzLHpzLHlvPTErNyooJGUtMSkrKDcrbXQtTHQpJTcreHUoa2UsTHQsR3QpO3JldHVybiB5bzw9MD96cz1SYyhlcz1rZS0xKSt5bzp5bz5SYyhrZSk/KGVzPWtlKzEsenM9eW8tUmMoa2UpKTooZXM9a2UsenM9eW8pLHt5ZWFyOmVzLGRheU9mWWVhcjp6c319ZnVuY3Rpb24gUGEoa2Us''@;'; put 'put ''JGUsbXQpe3ZhciBVbixJcixMdD14dShrZS55ZWFyKCksJGUsbXQpLEd0PU1hdGguZmxvb3IoKGtlLmRheU9mWWVhcigpLUx0LTEpLzcpKzE7cmV0dXJuIEd0PDE/VW49R3QrU3IoSXI9a2UueWVhcigpLTEsJGUsbXQpOkd0PlNyKGtlLnllYXIoKSwkZSxtdCk/KFVuPUd0LVNyKGtlLnllYXIo''@;'; put 'put ''KSwkZSxtdCksSXI9a2UueWVhcigpKzEpOihJcj1rZS55ZWFyKCksVW49R3QpLHt3ZWVrOlVuLHllYXI6SXJ9fWZ1bmN0aW9uIFNyKGtlLCRlLG10KXt2YXIgTHQ9eHUoa2UsJGUsbXQpLEd0PXh1KGtlKzEsJGUsbXQpO3JldHVybihSYyhrZSktTHQrR3QpLzd9ZGUoInciLFsid3ciLDJdLCJ3''@;'; put 'put ''byIsIndlZWsiKSxkZSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLHFlKCJ3ZWVrIiwidyIpLHFlKCJpc29XZWVrIiwiVyIpLE1lKCJ3ZWVrIiw1KSxNZSgiaXNvV2VlayIsNSkscHQoInciLEhuKSxwdCgid3ciLEhuLGJuKSxwdCgiVyIsSG4pLHB0KCJXVyIsSG4sYm4pLHNuKFsidyIs''@;'; put 'put ''Ind3IiwiVyIsIldXIl0sZnVuY3Rpb24oa2UsJGUsbXQsTHQpeyRlW0x0LnN1YnN0cigwLDEpXT11dChrZSl9KTtmdW5jdGlvbiBTYShrZSwkZSl7cmV0dXJuIGtlLnNsaWNlKCRlLDcpLmNvbmNhdChrZS5zbGljZSgwLCRlKSl9ZGUoImQiLDAsImRvIiwiZGF5IiksZGUoImRkIiwwLDAsZnVu''@;'; put 'put ''Y3Rpb24oa2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLGtlKX0pLGRlKCJkZGQiLDAsMCxmdW5jdGlvbihrZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcyxrZSl9KSxkZSgiZGRkZCIsMCwwLGZ1bmN0aW9uKGtlKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcyxrZSl9KSxkZSgiZSIsMCwwLCJ3ZWVrZGF5IiksZGUoIkUiLDAsMCwiaXNvV2Vla2RheSIpLHFlKCJkYXkiLCJkIikscWUoIndlZWtkYXkiLCJlIikscWUoImlzb1dlZWtkYXkiLCJFIiksTWUoImRheSIsMTEpLE1lKCJ3ZWVrZGF5''@;'; put 'put ''IiwxMSksTWUoImlzb1dlZWtkYXkiLDExKSxwdCgiZCIsSG4pLHB0KCJlIixIbikscHQoIkUiLEhuKSxwdCgiZGQiLGZ1bmN0aW9uKGtlLCRlKXtyZXR1cm4gJGUud2Vla2RheXNNaW5SZWdleChrZSl9KSxwdCgiZGRkIixmdW5jdGlvbihrZSwkZSl7cmV0dXJuICRlLndlZWtkYXlzU2hvcnRS''@;'; put 'put ''ZWdleChrZSl9KSxwdCgiZGRkZCIsZnVuY3Rpb24oa2UsJGUpe3JldHVybiAkZS53ZWVrZGF5c1JlZ2V4KGtlKX0pLHNuKFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24oa2UsJGUsbXQsTHQpe3ZhciBHdD1tdC5fbG9jYWxlLndlZWtkYXlzUGFyc2Uoa2UsTHQsbXQuX3N0cmljdCk7bnVs''@;'; put 'put ''bCE9R3Q/JGUuZD1HdDpCKG10KS5pbnZhbGlkV2Vla2RheT1rZX0pLHNuKFsiZCIsImUiLCJFIl0sZnVuY3Rpb24oa2UsJGUsbXQsTHQpeyRlW0x0XT11dChrZSl9KTt2YXIgRmg9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxp''@;'; put 'put ''dCgiXyIpLEV1PSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksQXM9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLG4wPUp0LHFhPUp0LHZjPUp0O2Z1bmN0aW9uIHIwKGtlLCRlLG10KXt2YXIgTHQsR3QsVW4sSXI9a2UudG9Mb2NhbGVMb3dlckNhc2Uo''@;'; put 'put ''KTtpZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxMdD0wO0x0PDc7KytMdClVbj1qKFsyZTMsMV0pLmRheShMdCksdGhpcy5fbWluV2Vla2RheXNQYXJz''@;'; put 'put ''ZVtMdF09dGhpcy53ZWVrZGF5c01pbihVbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbTHRdPXRoaXMud2Vla2RheXNTaG9ydChVbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0x0XT10aGlzLndlZWtkYXlzKFVu''@;'; put 'put ''LCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBtdD8iZGRkZCI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsSXIpKT9HdDpudWxsOiJkZGQiPT09JGU/LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsSXIpKT9HdDpudWxsOi0x''@;'; put 'put ''IT09KEd0PUtyLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxJcikpP0d0Om51bGw6ImRkZGQiPT09JGU/LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLElyKSl8fC0xIT09KEd0PUtyLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLElyKSl8fC0xIT09KEd0PUty''@;'; put 'put ''LmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxJcikpP0d0Om51bGw6ImRkZCI9PT0kZT8tMSE9PShHdD1Lci5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxJcikpfHwtMSE9PShHdD1Lci5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsSXIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlz''@;'; put 'put ''Ll9taW5XZWVrZGF5c1BhcnNlLElyKSk/R3Q6bnVsbDotMSE9PShHdD1Lci5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsSXIpKXx8LTEhPT0oR3Q9S3IuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLElyKSl8fC0xIT09KEd0PUtyLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLEly''@;'; put 'put ''KSk/R3Q6bnVsbH1mdW5jdGlvbiBvMCgpe2Z1bmN0aW9uIGtlKG9jLGYwKXtyZXR1cm4gZjAubGVuZ3RoLW9jLmxlbmd0aH12YXIgVW4sSXIseW8sZXMsenMsJGU9W10sbXQ9W10sTHQ9W10sR3Q9W107Zm9yKFVuPTA7VW48NztVbisrKUlyPWooWzJlMywxXSkuZGF5KFVuKSx5bz16dCh0aGlz''@;'; put 'put ''LndlZWtkYXlzTWluKElyLCIiKSksZXM9enQodGhpcy53ZWVrZGF5c1Nob3J0KElyLCIiKSksenM9enQodGhpcy53ZWVrZGF5cyhJciwiIikpLCRlLnB1c2goeW8pLG10LnB1c2goZXMpLEx0LnB1c2goenMpLEd0LnB1c2goeW8pLEd0LnB1c2goZXMpLEd0LnB1c2goenMpOyRlLnNvcnQoa2Up''@;'; put 'put ''LG10LnNvcnQoa2UpLEx0LnNvcnQoa2UpLEd0LnNvcnQoa2UpLHRoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0d0LmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRo''@;'; put 'put ''aXMuX3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrTHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrbXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''TWluU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiKyRlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBJMigpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIFFpKGtlLCRlKXtkZShrZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRp''@;'; put 'put ''ZW0odGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLCRlKX0pfWZ1bmN0aW9uIFluKGtlLCRlKXtyZXR1cm4gJGUuX21lcmlkaWVtUGFyc2V9ZGUoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxkZSgiaCIsWyJoaCIsMl0sMCxJMiksZGUoImsiLFsia2siLDJdLDAsZnVuY3Rpb24gTmgoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3VycygpfHwyNH0pLGRlKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK0kyLmFwcGx5KHRoaXMpK3YodGhpcy5taW51dGVzKCksMil9KSxkZSgiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK0kyLmFwcGx5KHRoaXMpK3YodGhpcy5taW51dGVzKCksMikrdih0''@;'; put 'put ''aGlzLnNlY29uZHMoKSwyKX0pLGRlKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKSt2KHRoaXMubWludXRlcygpLDIpfSksZGUoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrdih0aGlzLm1pbnV0ZXMoKSwyKSt2KHRoaXMuc2Vj''@;'; put 'put ''b25kcygpLDIpfSksUWkoImEiLCEwKSxRaSgiQSIsITEpLHFlKCJob3VyIiwiaCIpLE1lKCJob3VyIiwxMykscHQoImEiLFluKSxwdCgiQSIsWW4pLHB0KCJIIixIbikscHQoImgiLEhuKSxwdCgiayIsSG4pLHB0KCJISCIsSG4sYm4pLHB0KCJoaCIsSG4sYm4pLHB0KCJrayIsSG4sYm4pLHB0''@;'; put 'put ''KCJobW0iLGZ0KSxwdCgiaG1tc3MiLGZuKSxwdCgiSG1tIixmdCkscHQoIkhtbXNzIixmbikseG4oWyJIIiwiSEgiXSxuaSkseG4oWyJrIiwia2siXSxmdW5jdGlvbihrZSwkZSxtdCl7dmFyIEx0PXV0KGtlKTskZVtuaV09MjQ9PT1MdD8wOkx0fSkseG4oWyJhIiwiQSJdLGZ1bmN0aW9uKGtl''@;'; put 'put ''LCRlLG10KXttdC5faXNQbT1tdC5fbG9jYWxlLmlzUE0oa2UpLG10Ll9tZXJpZGllbT1rZX0pLHhuKFsiaCIsImhoIl0sZnVuY3Rpb24oa2UsJGUsbXQpeyRlW25pXT11dChrZSksQihtdCkuYmlnSG91cj0hMH0pLHhuKCJobW0iLGZ1bmN0aW9uKGtlLCRlLG10KXt2YXIgTHQ9a2UubGVuZ3Ro''@;'; put 'put ''LTI7JGVbbmldPXV0KGtlLnN1YnN0cigwLEx0KSksJGVbbG5dPXV0KGtlLnN1YnN0cihMdCkpLEIobXQpLmJpZ0hvdXI9ITB9KSx4bigiaG1tc3MiLGZ1bmN0aW9uKGtlLCRlLG10KXt2YXIgTHQ9a2UubGVuZ3RoLTQsR3Q9a2UubGVuZ3RoLTI7JGVbbmldPXV0KGtlLnN1YnN0cigwLEx0KSks''@;'; put 'put ''JGVbbG5dPXV0KGtlLnN1YnN0cihMdCwyKSksJGVbam5dPXV0KGtlLnN1YnN0cihHdCkpLEIobXQpLmJpZ0hvdXI9ITB9KSx4bigiSG1tIixmdW5jdGlvbihrZSwkZSxtdCl7dmFyIEx0PWtlLmxlbmd0aC0yOyRlW25pXT11dChrZS5zdWJzdHIoMCxMdCkpLCRlW2xuXT11dChrZS5zdWJzdHIo''@;'; put 'put ''THQpKX0pLHhuKCJIbW1zcyIsZnVuY3Rpb24oa2UsJGUsbXQpe3ZhciBMdD1rZS5sZW5ndGgtNCxHdD1rZS5sZW5ndGgtMjskZVtuaV09dXQoa2Uuc3Vic3RyKDAsTHQpKSwkZVtsbl09dXQoa2Uuc3Vic3RyKEx0LDIpKSwkZVtqbl09dXQoa2Uuc3Vic3RyKEd0KSl9KTt2YXIgb3M9TXQoIkhv''@;'; put 'put ''dXJzIiwhMCk7dmFyIERhLEhhPXtjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixz''@;'; put 'put ''YW1lRWxzZToiTCJ9LGxvbmdEYXRlRm9ybWF0OntMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0saW52YWxpZERhdGU6Iklu''@;'; put 'put ''dmFsaWQgZGF0ZSIsb3JkaW5hbDoiJWQiLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixo''@;'; put 'put ''OiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sbW9udGhzOkhyLG1vbnRoc1Nob3J0OnFpLHdlZWs6e2RvdzowLGRv''@;'; put 'put ''eTo2fSx3ZWVrZGF5czpGaCx3ZWVrZGF5c01pbjpBcyx3ZWVrZGF5c1Nob3J0OkV1LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSwkbz17fSxWMD17fTtmdW5jdGlvbiBWaChrZSwkZSl7dmFyIG10LEx0PU1hdGgubWluKGtlLmxlbmd0aCwkZS5sZW5ndGgpO2ZvcihtdD0wO210PEx0''@;'; put 'put ''O210Kz0xKWlmKGtlW210XSE9PSRlW210XSlyZXR1cm4gbXQ7cmV0dXJuIEx0fWZ1bmN0aW9uIEJoKGtlKXtyZXR1cm4ga2UmJmtlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgiXyIsIi0iKX1mdW5jdGlvbiBmcihrZSl7dmFyICRlPW51bGw7aWYodm9pZCAwPT09JG9ba2VdJiZhdCYmYXQuZXhw''@;'; put 'put ''b3J0cyYmZnVuY3Rpb24gYmMoa2Upe3JldHVybiBudWxsIT1rZS5tYXRjaCgiXlteL1xcXFxdKiQiKX0oa2UpKXRyeXskZT1EYS5fYWJicixGKDQ2NzAwKSgiLi8iK2tlKSxIbygkZSl9Y2F0Y2h7JG9ba2VdPW51bGx9cmV0dXJuICRvW2tlXX1mdW5jdGlvbiBIbyhrZSwkZSl7dmFyIG10O3Jl''@;'; put 'put ''dHVybiBrZSYmKChtdD16KCRlKT9sdShrZSk6eWMoa2UsJGUpKT9EYT1tdDp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitrZSsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksRGEuX2FiYnJ9ZnVuY3Rpb24g''@;'; put 'put ''eWMoa2UsJGUpe2lmKG51bGwhPT0kZSl7dmFyIG10LEx0PUhhO2lmKCRlLmFiYnI9a2UsbnVsbCE9JG9ba2VdKUcoImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBt''@;'; put 'put ''b21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIiksTHQ9JG9b''@;'; put 'put ''a2VdLl9jb25maWc7ZWxzZSBpZihudWxsIT0kZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9JG9bJGUucGFyZW50TG9jYWxlXSlMdD0kb1skZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0obXQ9ZnIoJGUucGFyZW50TG9jYWxlKSkpcmV0dXJuIFYwWyRlLnBhcmVudExvY2Fs''@;'; put 'put ''ZV18fChWMFskZS5wYXJlbnRMb2NhbGVdPVtdKSxWMFskZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6a2UsY29uZmlnOiRlfSksbnVsbDtMdD1tdC5fY29uZmlnfXJldHVybiAkb1trZV09bmV3IE4oSChMdCwkZSkpLFYwW2tlXSYmVjBba2VdLmZvckVhY2goZnVuY3Rpb24oR3Qpe3ljKEd0''@;'; put 'put ''Lm5hbWUsR3QuY29uZmlnKX0pLEhvKGtlKSwkb1trZV19cmV0dXJuIGRlbGV0ZSAkb1trZV0sbnVsbH1mdW5jdGlvbiBsdShrZSl7dmFyICRlO2lmKGtlJiZrZS5fbG9jYWxlJiZrZS5fbG9jYWxlLl9hYmJyJiYoa2U9a2UuX2xvY2FsZS5fYWJiciksIWtlKXJldHVybiBEYTtpZighbGUoa2Up''@;'; put 'put ''KXtpZigkZT1mcihrZSkpcmV0dXJuICRlO2tlPVtrZV19cmV0dXJuIGZ1bmN0aW9uIG9sKGtlKXtmb3IodmFyIG10LEx0LEd0LFVuLCRlPTA7JGU8a2UubGVuZ3RoOyl7Zm9yKG10PShVbj1CaChrZVskZV0pLnNwbGl0KCItIikpLmxlbmd0aCxMdD0oTHQ9Qmgoa2VbJGUrMV0pKT9MdC5zcGxp''@;'; put 'put ''dCgiLSIpOm51bGw7bXQ+MDspe2lmKEd0PWZyKFVuLnNsaWNlKDAsbXQpLmpvaW4oIi0iKSkpcmV0dXJuIEd0O2lmKEx0JiZMdC5sZW5ndGg+PW10JiZWaChVbixMdCk+PW10LTEpYnJlYWs7bXQtLX0kZSsrfXJldHVybiBEYX0oa2UpfWZ1bmN0aW9uIEwyKGtlKXt2YXIgJGUsbXQ9a2UuX2E7''@;'; put 'put ''cmV0dXJuIG10JiYtMj09PUIoa2UpLm92ZXJmbG93JiYoJGU9bXRbJHRdPDB8fG10WyR0XT4xMT8kdDptdFtQbl08MXx8bXRbUG5dPm5vKG10W1JuXSxtdFskdF0pP1BuOm10W25pXTwwfHxtdFtuaV0+MjR8fDI0PT09bXRbbmldJiYoMCE9PW10W2xuXXx8MCE9PW10W2puXXx8MCE9PW10W3Fy''@;'; put 'put ''XSk/bmk6bXRbbG5dPDB8fG10W2xuXT41OT9sbjptdFtqbl08MHx8bXRbam5dPjU5P2puOm10W3FyXTwwfHxtdFtxcl0+OTk5P3FyOi0xLEIoa2UpLl9vdmVyZmxvd0RheU9mWWVhciYmKCRlPFJufHwkZT5QbikmJigkZT1QbiksQihrZSkuX292ZXJmbG93V2Vla3MmJi0xPT09JGUmJigkZT1n''@;'; put 'put ''aSksQihrZSkuX292ZXJmbG93V2Vla2RheSYmLTE9PT0kZSYmKCRlPXhyKSxCKGtlKS5vdmVyZmxvdz0kZSksa2V9dmFyIG1pPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSktKD86XGRcZC1cZFxkfFdcZFxkLVxkfFdcZFxkfFxkXGRcZHxcZFxkKSkoPzooVHwgKShcZFxkKD86OlxkXGQoPzo6''@;'; put 'put ''XGRcZCg/OlsuLF1cZCspPyk/KT8pKFsrLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyx4ZD0vXlxzKigoPzpbKy1dXGR7Nn18XGR7NH0pKD86XGRcZFxkXGR8V1xkXGRcZHxXXGRcZHxcZFxkXGR8XGRcZHwpKSg/OihUfCApKFxkXGQoPzpcZFxkKD86XGRcZCg/OlsuLF1cZCspPyk/KT8p''@;'; put 'put ''KFsrLV1cZFxkKD86Oj9cZFxkKT98XHMqWik/KT8kLyxxNz0vWnxbKy1dXGRcZCg/Ojo/XGRcZCk/LyxCMD1bWyJZWVlZWVktTU0tREQiLC9bKy1dXGR7Nn0tXGRcZC1cZFxkL10sWyJZWVlZLU1NLUREIiwvXGR7NH0tXGRcZC1cZFxkL10sWyJHR0dHLVtXXVdXLUUiLC9cZHs0fS1XXGRcZC1c''@;'; put 'put ''ZC9dLFsiR0dHRy1bV11XVyIsL1xkezR9LVdcZFxkLywhMV0sWyJZWVlZLURERCIsL1xkezR9LVxkezN9L10sWyJZWVlZLU1NIiwvXGR7NH0tXGRcZC8sITFdLFsiWVlZWVlZTU1ERCIsL1srLV1cZHsxMH0vXSxbIllZWVlNTUREIiwvXGR7OH0vXSxbIkdHR0dbV11XV0UiLC9cZHs0fVdcZHsz''@;'; put 'put ''fS9dLFsiR0dHR1tXXVdXIiwvXGR7NH1XXGR7Mn0vLCExXSxbIllZWVlEREQiLC9cZHs3fS9dLFsiWVlZWU1NIiwvXGR7Nn0vLCExXSxbIllZWVkiLC9cZHs0fS8sITFdXSxIcz1bWyJISDptbTpzcy5TU1NTIiwvXGRcZDpcZFxkOlxkXGRcLlxkKy9dLFsiSEg6bW06c3MsU1NTUyIsL1xkXGQ6''@;'; put 'put ''XGRcZDpcZFxkLFxkKy9dLFsiSEg6bW06c3MiLC9cZFxkOlxkXGQ6XGRcZC9dLFsiSEg6bW0iLC9cZFxkOlxkXGQvXSxbIkhIbW1zcy5TU1NTIiwvXGRcZFxkXGRcZFxkXC5cZCsvXSxbIkhIbW1zcyxTU1NTIiwvXGRcZFxkXGRcZFxkLFxkKy9dLFsiSEhtbXNzIiwvXGRcZFxkXGRcZFxkL10s''@;'; put 'put ''WyJISG1tIiwvXGRcZFxkXGQvXSxbIkhIIiwvXGRcZC9dXSxubT0vXlwvP0RhdGVcKCgtP1xkKykvaSxjMz0vXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9ccyk/KFxkezEsMn0pXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXHMo''@;'; put 'put ''XGR7Miw0fSlccyhcZFxkKTooXGRcZCkoPzo6KFxkXGQpKT9ccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxkezR9KSkkLyxqaD17VVQ6MCxHTVQ6MCxFRFQ6LTI0MCxFU1Q6LTMwMCxDRFQ6LTMwMCxDU1Q6LTM2MCxNRFQ6LTM2MCxNU1Q6LTQyMCxQRFQ6LTQyMCxQU1Q6''@;'; put 'put ''LTQ4MH07ZnVuY3Rpb24gTnMoa2Upe3ZhciAkZSxtdCxVbixJcix5byxlcyxMdD1rZS5faSxHdD1taS5leGVjKEx0KXx8eGQuZXhlYyhMdCksenM9QjAubGVuZ3RoLG9jPUhzLmxlbmd0aDtpZihHdCl7Zm9yKEIoa2UpLmlzbz0hMCwkZT0wLG10PXpzOyRlPG10OyRlKyspaWYoQjBbJGVdWzFd''@;'; put 'put ''LmV4ZWMoR3RbMV0pKXtJcj1CMFskZV1bMF0sVW49ITEhPT1CMFskZV1bMl07YnJlYWt9aWYobnVsbD09SXIpcmV0dXJuIHZvaWQoa2UuX2lzVmFsaWQ9ITEpO2lmKEd0WzNdKXtmb3IoJGU9MCxtdD1vYzskZTxtdDskZSsrKWlmKEhzWyRlXVsxXS5leGVjKEd0WzNdKSl7eW89KEd0WzJdfHwi''@;'; put 'put ''ICIpK0hzWyRlXVswXTticmVha31pZihudWxsPT15bylyZXR1cm4gdm9pZChrZS5faXNWYWxpZD0hMSl9aWYoIVVuJiZudWxsIT15bylyZXR1cm4gdm9pZChrZS5faXNWYWxpZD0hMSk7aWYoR3RbNF0pe2lmKCFxNy5leGVjKEd0WzRdKSlyZXR1cm4gdm9pZChrZS5faXNWYWxpZD0hMSk7ZXM9''@;'; put 'put ''IloifWtlLl9mPUlyKyh5b3x8IiIpKyhlc3x8IiIpLHMwKGtlKX1lbHNlIGtlLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIG5zKGtlKXt2YXIgJGU9cGFyc2VJbnQoa2UsMTApO3JldHVybiAkZTw9NDk/MmUzKyRlOiRlPD05OTk/MTkwMCskZTokZX1mdW5jdGlvbiBXcyhrZSl7dmFyIG10LCRlPWMz''@;'; put 'put ''LmV4ZWMoZnVuY3Rpb24gaDQoa2Upe3JldHVybiBrZS5yZXBsYWNlKC9cKFteKCldKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIil9KGtlLl9pKSk7aWYoJGUpe2lmKG10PWZ1bmN0aW9uIEs3''@;'; put 'put ''KGtlLCRlLG10LEx0LEd0LFVuKXt2YXIgSXI9W25zKGtlKSxxaS5pbmRleE9mKCRlKSxwYXJzZUludChtdCwxMCkscGFyc2VJbnQoTHQsMTApLHBhcnNlSW50KEd0LDEwKV07cmV0dXJuIFVuJiZJci5wdXNoKHBhcnNlSW50KFVuLDEwKSksSXJ9KCRlWzRdLCRlWzNdLCRlWzJdLCRlWzVdLCRl''@;'; put 'put ''WzZdLCRlWzddKSwhZnVuY3Rpb24gc3Moa2UsJGUsbXQpe3JldHVybiFrZXx8RXUuaW5kZXhPZihrZSk9PT1uZXcgRGF0ZSgkZVswXSwkZVsxXSwkZVsyXSkuZ2V0RGF5KCl8fChCKG10KS53ZWVrZGF5TWlzbWF0Y2g9ITAsbXQuX2lzVmFsaWQ9ITEsITEpfSgkZVsxXSxtdCxrZSkpcmV0dXJu''@;'; put 'put ''O2tlLl9hPW10LGtlLl90em09ZnVuY3Rpb24gZGkoa2UsJGUsbXQpe2lmKGtlKXJldHVybiBqaFtrZV07aWYoJGUpcmV0dXJuIDA7dmFyIEx0PXBhcnNlSW50KG10LDEwKSxHdD1MdCUxMDA7cmV0dXJuKEx0LUd0KS8xMDAqNjArR3R9KCRlWzhdLCRlWzldLCRlWzEwXSksa2UuX2Q9ZTAuYXBw''@;'; put 'put ''bHkobnVsbCxrZS5fYSksa2UuX2Quc2V0VVRDTWludXRlcyhrZS5fZC5nZXRVVENNaW51dGVzKCkta2UuX3R6bSksQihrZSkucmZjMjgyMj0hMH1lbHNlIGtlLl9pc1ZhbGlkPSExfWZ1bmN0aW9uIE9pKGtlLCRlLG10KXtyZXR1cm4ga2U/PyRlPz9tdH1mdW5jdGlvbiBjdShrZSl7dmFyICRl''@;'; put 'put ''LG10LEd0LFVuLElyLEx0PVtdO2lmKCFrZS5fZCl7Zm9yKEd0PWZ1bmN0aW9uIHJtKGtlKXt2YXIgJGU9bmV3IERhdGUoeC5ub3coKSk7cmV0dXJuIGtlLl91c2VVVEM/WyRlLmdldFVUQ0Z1bGxZZWFyKCksJGUuZ2V0VVRDTW9udGgoKSwkZS5nZXRVVENEYXRlKCldOlskZS5nZXRGdWxsWWVh''@;'; put 'put ''cigpLCRlLmdldE1vbnRoKCksJGUuZ2V0RGF0ZSgpXX0oa2UpLGtlLl93JiZudWxsPT1rZS5fYVtQbl0mJm51bGw9PWtlLl9hWyR0XSYmZnVuY3Rpb24gRWQoa2Upe3ZhciAkZSxtdCxMdCxHdCxVbixJcix5byxlcyx6cztudWxsIT0oJGU9a2UuX3cpLkdHfHxudWxsIT0kZS5XfHxudWxsIT0k''@;'; put 'put ''ZS5FPyhVbj0xLElyPTQsbXQ9T2koJGUuR0csa2UuX2FbUm5dLFBhKGNhKCksMSw0KS55ZWFyKSxMdD1PaSgkZS5XLDEpLCgoR3Q9T2koJGUuRSwxKSk8MXx8R3Q+NykmJihlcz0hMCkpOihVbj1rZS5fbG9jYWxlLl93ZWVrLmRvdyxJcj1rZS5fbG9jYWxlLl93ZWVrLmRveSx6cz1QYShjYSgp''@;'; put 'put ''LFVuLElyKSxtdD1PaSgkZS5nZyxrZS5fYVtSbl0senMueWVhciksTHQ9T2koJGUudyx6cy53ZWVrKSxudWxsIT0kZS5kPygoR3Q9JGUuZCk8MHx8R3Q+NikmJihlcz0hMCk6bnVsbCE9JGUuZT8oR3Q9JGUuZStVbiwoJGUuZTwwfHwkZS5lPjYpJiYoZXM9ITApKTpHdD1VbiksTHQ8MXx8THQ+''@;'; put 'put ''U3IobXQsVW4sSXIpP0Ioa2UpLl9vdmVyZmxvd1dlZWtzPSEwOm51bGwhPWVzP0Ioa2UpLl9vdmVyZmxvd1dlZWtkYXk9ITA6KHlvPWZzKG10LEx0LEd0LFVuLElyKSxrZS5fYVtSbl09eW8ueWVhcixrZS5fZGF5T2ZZZWFyPXlvLmRheU9mWWVhcil9KGtlKSxudWxsIT1rZS5fZGF5T2ZZZWFy''@;'; put 'put ''JiYoSXI9T2koa2UuX2FbUm5dLEd0W1JuXSksKGtlLl9kYXlPZlllYXI+UmMoSXIpfHwwPT09a2UuX2RheU9mWWVhcikmJihCKGtlKS5fb3ZlcmZsb3dEYXlPZlllYXI9ITApLG10PWUwKElyLDAsa2UuX2RheU9mWWVhciksa2UuX2FbJHRdPW10LmdldFVUQ01vbnRoKCksa2UuX2FbUG5dPW10''@;'; put 'put ''LmdldFVUQ0RhdGUoKSksJGU9MDskZTwzJiZudWxsPT1rZS5fYVskZV07KyskZSlrZS5fYVskZV09THRbJGVdPUd0WyRlXTtmb3IoOyRlPDc7JGUrKylrZS5fYVskZV09THRbJGVdPW51bGw9PWtlLl9hWyRlXT8yPT09JGU/MTowOmtlLl9hWyRlXTsyND09PWtlLl9hW25pXSYmMD09PWtlLl9h''@;'; put 'put ''W2xuXSYmMD09PWtlLl9hW2puXSYmMD09PWtlLl9hW3FyXSYmKGtlLl9uZXh0RGF5PSEwLGtlLl9hW25pXT0wKSxrZS5fZD0oa2UuX3VzZVVUQz9lMDprMikuYXBwbHkobnVsbCxMdCksVW49a2UuX3VzZVVUQz9rZS5fZC5nZXRVVENEYXkoKTprZS5fZC5nZXREYXkoKSxudWxsIT1rZS5fdHpt''@;'; put 'put ''JiZrZS5fZC5zZXRVVENNaW51dGVzKGtlLl9kLmdldFVUQ01pbnV0ZXMoKS1rZS5fdHptKSxrZS5fbmV4dERheSYmKGtlLl9hW25pXT0yNCksa2UuX3cmJnR5cGVvZiBrZS5fdy5kPCJ1IiYma2UuX3cuZCE9PVVuJiYoQihrZSkud2Vla2RheU1pc21hdGNoPSEwKX19ZnVuY3Rpb24gczAoa2Up''@;'; put 'put ''e2lmKGtlLl9mIT09eC5JU09fODYwMSlpZihrZS5fZiE9PXguUkZDXzI4MjIpe2tlLl9hPVtdLEIoa2UpLmVtcHR5PSEwO3ZhciBtdCxMdCxHdCxVbixJcix6cyxvYywkZT0iIitrZS5faSx5bz0kZS5sZW5ndGgsZXM9MDtmb3Iob2M9KEd0PUZlKGtlLl9mLGtlLl9sb2NhbGUpLm1hdGNoKHAp''@;'; put 'put ''fHxbXSkubGVuZ3RoLG10PTA7bXQ8b2M7bXQrKykoTHQ9KCRlLm1hdGNoKFl0KFVuPUd0W210XSxrZSkpfHxbXSlbMF0pJiYoKElyPSRlLnN1YnN0cigwLCRlLmluZGV4T2YoTHQpKSkubGVuZ3RoPjAmJkIoa2UpLnVudXNlZElucHV0LnB1c2goSXIpLCRlPSRlLnNsaWNlKCRlLmluZGV4T2Yo''@;'; put 'put ''THQpK0x0Lmxlbmd0aCksZXMrPUx0Lmxlbmd0aCksbmVbVW5dPyhMdD9CKGtlKS5lbXB0eT0hMTpCKGtlKS51bnVzZWRUb2tlbnMucHVzaChVbiksQm4oVW4sTHQsa2UpKTprZS5fc3RyaWN0JiYhTHQmJkIoa2UpLnVudXNlZFRva2Vucy5wdXNoKFVuKTtCKGtlKS5jaGFyc0xlZnRPdmVyPXlv''@;'; put 'put ''LWVzLCRlLmxlbmd0aD4wJiZCKGtlKS51bnVzZWRJbnB1dC5wdXNoKCRlKSxrZS5fYVtuaV08PTEyJiYhMD09PUIoa2UpLmJpZ0hvdXImJmtlLl9hW25pXT4wJiYoQihrZSkuYmlnSG91cj12b2lkIDApLEIoa2UpLnBhcnNlZERhdGVQYXJ0cz1rZS5fYS5zbGljZSgwKSxCKGtlKS5tZXJpZGll''@;'; put 'put ''bT1rZS5fbWVyaWRpZW0sa2UuX2FbbmldPWZ1bmN0aW9uIGsxKGtlLCRlLG10KXt2YXIgTHQ7cmV0dXJuIG51bGw9PW10PyRlOm51bGwhPWtlLm1lcmlkaWVtSG91cj9rZS5tZXJpZGllbUhvdXIoJGUsbXQpOihudWxsIT1rZS5pc1BNJiYoKEx0PWtlLmlzUE0obXQpKSYmJGU8MTImJigkZSs9''@;'; put 'put ''MTIpLCFMdCYmMTI9PT0kZSYmKCRlPTApKSwkZSl9KGtlLl9sb2NhbGUsa2UuX2FbbmldLGtlLl9tZXJpZGllbSksbnVsbCE9PSh6cz1CKGtlKS5lcmEpJiYoa2UuX2FbUm5dPWtlLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKHpzLGtlLl9hW1JuXSkpLGN1KGtlKSxMMihrZSl9ZWxzZSBXcyhr''@;'; put 'put ''ZSk7ZWxzZSBOcyhrZSl9ZnVuY3Rpb24gaW0oa2Upe3ZhciAkZT1rZS5faSxtdD1rZS5fZjtyZXR1cm4ga2UuX2xvY2FsZT1rZS5fbG9jYWxlfHxsdShrZS5fbCksbnVsbD09PSRlfHx2b2lkIDA9PT1tdCYmIiI9PT0kZT9VKHtudWxsSW5wdXQ6ITB9KTooInN0cmluZyI9PXR5cGVvZiAkZSYm''@;'; put 'put ''KGtlLl9pPSRlPWtlLl9sb2NhbGUucHJlcGFyc2UoJGUpKSxzZSgkZSk/bmV3IG9lKEwyKCRlKSk6KEkoJGUpP2tlLl9kPSRlOmxlKG10KT9mdW5jdGlvbiBrdShrZSl7dmFyICRlLG10LEx0LEd0LFVuLElyLHlvPSExLGVzPWtlLl9mLmxlbmd0aDtpZigwPT09ZXMpcmV0dXJuIEIoa2UpLmlu''@;'; put 'put ''dmFsaWRGb3JtYXQ9ITAsdm9pZChrZS5fZD1uZXcgRGF0ZShOYU4pKTtmb3IoR3Q9MDtHdDxlcztHdCsrKVVuPTAsSXI9ITEsJGU9dGUoe30sa2UpLG51bGwhPWtlLl91c2VVVEMmJigkZS5fdXNlVVRDPWtlLl91c2VVVEMpLCRlLl9mPWtlLl9mW0d0XSxzMCgkZSksWCgkZSkmJihJcj0hMCks''@;'; put 'put ''VW4rPUIoJGUpLmNoYXJzTGVmdE92ZXIsVW4rPTEwKkIoJGUpLnVudXNlZFRva2Vucy5sZW5ndGgsQigkZSkuc2NvcmU9VW4seW8/VW48THQmJihMdD1VbixtdD0kZSk6KG51bGw9PUx0fHxVbjxMdHx8SXIpJiYoTHQ9VW4sbXQ9JGUsSXImJih5bz0hMCkpO0Uoa2UsbXR8fCRlKX0oa2UpOm10''@;'; put 'put ''P3MwKGtlKTpmdW5jdGlvbiBvbShrZSl7dmFyICRlPWtlLl9pO3ooJGUpP2tlLl9kPW5ldyBEYXRlKHgubm93KCkpOkkoJGUpP2tlLl9kPW5ldyBEYXRlKCRlLnZhbHVlT2YoKSk6InN0cmluZyI9PXR5cGVvZiAkZT9mdW5jdGlvbiBPbyhrZSl7dmFyICRlPW5tLmV4ZWMoa2UuX2kpO251bGw9''@;'; put 'put ''PT0kZT8oTnMoa2UpLCExPT09a2UuX2lzVmFsaWQmJihkZWxldGUga2UuX2lzVmFsaWQsV3Moa2UpLCExPT09a2UuX2lzVmFsaWQmJihkZWxldGUga2UuX2lzVmFsaWQsa2UuX3N0cmljdD9rZS5faXNWYWxpZD0hMTp4LmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGtlKSkpKTprZS5fZD1uZXcg''@;'; put 'put ''RGF0ZSgrJGVbMV0pfShrZSk6bGUoJGUpPyhrZS5fYT1rKCRlLnNsaWNlKDApLGZ1bmN0aW9uKG10KXtyZXR1cm4gcGFyc2VJbnQobXQsMTApfSksY3Uoa2UpKTpNKCRlKT9mdW5jdGlvbiB3YyhrZSl7aWYoIWtlLl9kKXt2YXIgJGU9VWUoa2UuX2kpO2tlLl9hPWsoWyRlLnllYXIsJGUubW9u''@;'; put 'put ''dGgsdm9pZCAwPT09JGUuZGF5PyRlLmRhdGU6JGUuZGF5LCRlLmhvdXIsJGUubWludXRlLCRlLnNlY29uZCwkZS5taWxsaXNlY29uZF0sZnVuY3Rpb24oTHQpe3JldHVybiBMdCYmcGFyc2VJbnQoTHQsMTApfSksY3Uoa2UpfX0oa2UpOksoJGUpP2tlLl9kPW5ldyBEYXRlKCRlKTp4LmNyZWF0''@;'; put 'put ''ZUZyb21JbnB1dEZhbGxiYWNrKGtlKX0oa2UpLFgoa2UpfHwoa2UuX2Q9bnVsbCksa2UpKX1mdW5jdGlvbiBrZChrZSwkZSxtdCxMdCxHdCl7dmFyIFVuPXt9O3JldHVybighMD09PSRlfHwhMT09PSRlKSYmKEx0PSRlLCRlPXZvaWQgMCksKCEwPT09bXR8fCExPT09bXQpJiYoTHQ9bXQsbXQ9''@;'; put 'put ''dm9pZCAwKSwoTShrZSkmJlIoa2UpfHxsZShrZSkmJjA9PT1rZS5sZW5ndGgpJiYoa2U9dm9pZCAwKSxVbi5faXNBTW9tZW50T2JqZWN0PSEwLFVuLl91c2VVVEM9VW4uX2lzVVRDPUd0LFVuLl9sPW10LFVuLl9pPWtlLFVuLl9mPSRlLFVuLl9zdHJpY3Q9THQsZnVuY3Rpb24gbmMoa2Upe3Zh''@;'; put 'put ''ciAkZT1uZXcgb2UoTDIoaW0oa2UpKSk7cmV0dXJuICRlLl9uZXh0RGF5JiYoJGUuYWRkKDEsImQiKSwkZS5fbmV4dERheT12b2lkIDApLCRlfShVbil9ZnVuY3Rpb24gY2Eoa2UsJGUsbXQsTHQpe3JldHVybiBrZChrZSwkZSxtdCxMdCwhMSl9eC5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjaz11''@;'; put 'put ''ZSgidmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksIHdoaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4g''@;'; put 'put ''Tm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uIixmdW5jdGlvbihrZSl7a2UuX2Q9bmV3IERhdGUoa2UuX2krKGtlLl91''@;'; put 'put ''c2VVVEM/IiBVVEMiOiIiKSl9KSx4LklTT184NjAxPWZ1bmN0aW9uKCl7fSx4LlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgQTE9dWUoIm1vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5p''@;'; put 'put ''bmdzL21pbi1tYXgvIixmdW5jdGlvbigpe3ZhciBrZT1jYS5hcHBseShudWxsLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiZrZS5pc1ZhbGlkKCk/a2U8dGhpcz90aGlzOmtlOlUoKX0pLFg3PXVlKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4g''@;'; put 'put ''aW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIga2U9Y2EuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYma2UuaXNWYWxpZCgpP2tlPnRoaXM/dGhpczprZTpVKCl9KTtmdW5jdGlv''@;'; put 'put ''biBhcihrZSwkZSl7dmFyIG10LEx0O2lmKDE9PT0kZS5sZW5ndGgmJmxlKCRlWzBdKSYmKCRlPSRlWzBdKSwhJGUubGVuZ3RoKXJldHVybiBjYSgpO2ZvcihtdD0kZVswXSxMdD0xO0x0PCRlLmxlbmd0aDsrK0x0KSghJGVbTHRdLmlzVmFsaWQoKXx8JGVbTHRdW2tlXShtdCkpJiYobXQ9JGVb''@;'; put 'put ''THRdKTtyZXR1cm4gbXR9dmFyIEtjPVsieWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBBZChrZSl7dmFyICRlPVVlKGtlKSxtdD0kZS55ZWFyfHwwLEx0PSRlLnF1YXJ0ZXJ8fDAsR3Q9''@;'; put 'put ''JGUubW9udGh8fDAsVW49JGUud2Vla3x8JGUuaXNvV2Vla3x8MCxJcj0kZS5kYXl8fDAseW89JGUuaG91cnx8MCxlcz0kZS5taW51dGV8fDAsenM9JGUuc2Vjb25kfHwwLG9jPSRlLm1pbGxpc2Vjb25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24gemgoa2Upe3ZhciAkZSxMdCxtdD0hMSxH''@;'; put 'put ''dD1LYy5sZW5ndGg7Zm9yKCRlIGluIGtlKWlmKE8oa2UsJGUpJiYoLTE9PT1Lci5jYWxsKEtjLCRlKXx8bnVsbCE9a2VbJGVdJiZpc05hTihrZVskZV0pKSlyZXR1cm4hMTtmb3IoTHQ9MDtMdDxHdDsrK0x0KWlmKGtlW0tjW0x0XV0pe2lmKG10KXJldHVybiExO3BhcnNlRmxvYXQoa2VbS2Nb''@;'; put 'put ''THRdXSkhPT11dChrZVtLY1tMdF1dKSYmKG10PSEwKX1yZXR1cm4hMH0oJGUpLHRoaXMuX21pbGxpc2Vjb25kcz0rb2MrMWUzKnpzKzZlNCplcysxZTMqeW8qNjAqNjAsdGhpcy5fZGF5cz0rSXIrNypVbix0aGlzLl9tb250aHM9K0d0KzMqTHQrMTIqbXQsdGhpcy5fZGF0YT17fSx0aGlzLl9s''@;'; put 'put ''b2NhbGU9bHUoKSx0aGlzLl9idWJibGUoKX1mdW5jdGlvbiBkdShrZSl7cmV0dXJuIGtlIGluc3RhbmNlb2YgQWR9ZnVuY3Rpb24gVDEoa2Upe3JldHVybiBrZTwwPy0xKk1hdGgucm91bmQoLTEqa2UpOk1hdGgucm91bmQoa2UpfWZ1bmN0aW9uIFhjKGtlLCRlKXtkZShrZSwwLDAsZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgbXQ9dGhpcy51dGNPZmZzZXQoKSxMdD0iKyI7cmV0dXJuIG10PDAmJihtdD0tbXQsTHQ9Ii0iKSxMdCt2KH5+KG10LzYwKSwyKSskZSt2KH5+bXQlNjAsMil9KX1YYygiWiIsIjoiKSxYYygiWloiLCIiKSxwdCgiWiIscnQpLHB0KCJaWiIscnQpLHhuKFsiWiIsIlpaIl0sZnVu''@;'; put 'put ''Y3Rpb24oa2UsJGUsbXQpe210Ll91c2VVVEM9ITAsbXQuX3R6bT1UZChydCxrZSl9KTt2YXIgU3M9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gVGQoa2UsJGUpe3ZhciBHdCxVbixtdD0oJGV8fCIiKS5tYXRjaChrZSk7cmV0dXJuIG51bGw9PT1tdD9udWxsOjA9PT0oVW49NjAqKEd0PSgo''@;'; put 'put ''bXRbbXQubGVuZ3RoLTFdfHxbXSkrIiIpLm1hdGNoKFNzKXx8WyItIiwwLDBdKVsxXSt1dChHdFsyXSkpPzA6IisiPT09R3RbMF0/VW46LVVufWZ1bmN0aW9uIFVoKGtlLCRlKXt2YXIgbXQsTHQ7cmV0dXJuICRlLl9pc1VUQz8obXQ9JGUuY2xvbmUoKSxMdD0oc2Uoa2UpfHxJKGtlKT9rZS52''@;'; put 'put ''YWx1ZU9mKCk6Y2Eoa2UpLnZhbHVlT2YoKSktbXQudmFsdWVPZigpLG10Ll9kLnNldFRpbWUobXQuX2QudmFsdWVPZigpK0x0KSx4LnVwZGF0ZU9mZnNldChtdCwhMSksbXQpOmNhKGtlKS5sb2NhbCgpfWZ1bmN0aW9uIEpjKGtlKXtyZXR1cm4tTWF0aC5yb3VuZChrZS5fZC5nZXRUaW1lem9u''@;'; put 'put ''ZU9mZnNldCgpKX1mdW5jdGlvbiBnNCgpe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fXgudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgSjc9L14oLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKTooXGQrKSg/OjooXGQrKShcLlxkKik/''@;'; put 'put ''KT8kLyx1Mz0vXigtfFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0q''@;'; put 'put ''KVMpPyk/JC87ZnVuY3Rpb24gTWEoa2UsJGUpe3ZhciBHdCxVbixJcixtdD1rZSxMdD1udWxsO3JldHVybiBkdShrZSk/bXQ9e21zOmtlLl9taWxsaXNlY29uZHMsZDprZS5fZGF5cyxNOmtlLl9tb250aHN9Oksoa2UpfHwhaXNOYU4oK2tlKT8obXQ9e30sJGU/bXRbJGVdPStrZTptdC5taWxs''@;'; put 'put ''aXNlY29uZHM9K2tlKTooTHQ9SjcuZXhlYyhrZSkpPyhHdD0iLSI9PT1MdFsxXT8tMToxLG10PXt5OjAsZDp1dChMdFtQbl0pKkd0LGg6dXQoTHRbbmldKSpHdCxtOnV0KEx0W2xuXSkqR3Qsczp1dChMdFtqbl0pKkd0LG1zOnV0KFQxKDFlMypMdFtxcl0pKSpHdH0pOihMdD11My5leGVjKGtl''@;'; put 'put ''KSk/bXQ9e3k6YzAoTHRbMl0sR3Q9Ii0iPT09THRbMV0/LTE6MSksTTpjMChMdFszXSxHdCksdzpjMChMdFs0XSxHdCksZDpjMChMdFs1XSxHdCksaDpjMChMdFs2XSxHdCksbTpjMChMdFs3XSxHdCksczpjMChMdFs4XSxHdCl9Om51bGw9PW10P210PXt9OiJvYmplY3QiPT10eXBlb2YgbXQm''@;'; put 'put ''JigiZnJvbSJpbiBtdHx8InRvImluIG10KSYmKElyPWZ1bmN0aW9uIGQzKGtlLCRlKXt2YXIgbXQ7cmV0dXJuIGtlLmlzVmFsaWQoKSYmJGUuaXNWYWxpZCgpPygkZT1VaCgkZSxrZSksa2UuaXNCZWZvcmUoJGUpP210PUZjKGtlLCRlKTooKG10PUZjKCRlLGtlKSkubWlsbGlzZWNvbmRzPS1t''@;'; put 'put ''dC5taWxsaXNlY29uZHMsbXQubW9udGhzPS1tdC5tb250aHMpLG10KTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShjYShtdC5mcm9tKSxjYShtdC50bykpLChtdD17fSkubXM9SXIubWlsbGlzZWNvbmRzLG10Lk09SXIubW9udGhzKSxVbj1uZXcgQWQobXQpLGR1KGtlKSYmTyhrZSwiX2xv''@;'; put 'put ''Y2FsZSIpJiYoVW4uX2xvY2FsZT1rZS5fbG9jYWxlKSxkdShrZSkmJk8oa2UsIl9pc1ZhbGlkIikmJihVbi5faXNWYWxpZD1rZS5faXNWYWxpZCksVW59ZnVuY3Rpb24gYzAoa2UsJGUpe3ZhciBtdD1rZSYmcGFyc2VGbG9hdChrZS5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4obXQp''@;'; put 'put ''PzA6bXQpKiRlfWZ1bmN0aW9uIEZjKGtlLCRlKXt2YXIgbXQ9e307cmV0dXJuIG10Lm1vbnRocz0kZS5tb250aCgpLWtlLm1vbnRoKCkrMTIqKCRlLnllYXIoKS1rZS55ZWFyKCkpLGtlLmNsb25lKCkuYWRkKG10Lm1vbnRocywiTSIpLmlzQWZ0ZXIoJGUpJiYtLW10Lm1vbnRocyxtdC5taWxs''@;'; put 'put ''aXNlY29uZHM9KyRlLStrZS5jbG9uZSgpLmFkZChtdC5tb250aHMsIk0iKSxtdH1mdW5jdGlvbiBtNChrZSwkZSl7cmV0dXJuIGZ1bmN0aW9uKG10LEx0KXt2YXIgVW47cmV0dXJuIG51bGwhPT1MdCYmIWlzTmFOKCtMdCkmJihHKCRlLCJtb21lbnQoKS4iKyRlKyIocGVyaW9kLCBudW1iZXIp''@;'; put 'put ''IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIiskZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLFVuPW10LG10PUx0LEx0PVVuKSxXaCh0aGlz''@;'; put 'put ''LE1hKG10LEx0KSxrZSksdGhpc319ZnVuY3Rpb24gV2goa2UsJGUsbXQsTHQpe3ZhciBHdD0kZS5fbWlsbGlzZWNvbmRzLFVuPVQxKCRlLl9kYXlzKSxJcj1UMSgkZS5fbW9udGhzKTtrZS5pc1ZhbGlkKCkmJihMdD1MdD8/ITAsSXImJlBpKGtlLEh0KGtlLCJNb250aCIpK0lyKm10KSxVbiYm''@;'; put 'put ''UHQoa2UsIkRhdGUiLEh0KGtlLCJEYXRlIikrVW4qbXQpLEd0JiZrZS5fZC5zZXRUaW1lKGtlLl9kLnZhbHVlT2YoKStHdCptdCksTHQmJngudXBkYXRlT2Zmc2V0KGtlLFVufHxJcikpfU1hLmZuPUFkLnByb3RvdHlwZSxNYS5pbnZhbGlkPWZ1bmN0aW9uIEF1KCl7cmV0dXJuIE1hKE5hTil9''@;'; put 'put ''O3ZhciBRNz1tNCgxLCJhZGQiKSxlOT1tNCgtMSwic3VidHJhY3QiKTtmdW5jdGlvbiB2NChrZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBrZXx8a2UgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gZGwoa2Upe3JldHVybiBzZShrZSl8fEkoa2UpfHx2NChrZSl8fEsoa2UpfHxmdW5jdGlv''@;'; put 'put ''biB0OShrZSl7dmFyICRlPWxlKGtlKSxtdD0hMTtyZXR1cm4gJGUmJihtdD0wPT09a2UuZmlsdGVyKGZ1bmN0aW9uKEx0KXtyZXR1cm4hSyhMdCkmJnY0KGtlKX0pLmxlbmd0aCksJGUmJm10fShrZSl8fGZ1bmN0aW9uIGFtKGtlKXt2YXIgR3QsJGU9TShrZSkmJiFSKGtlKSxtdD0hMSxMdD1b''@;'; put 'put ''InllYXJzIiwieWVhciIsInkiLCJtb250aHMiLCJtb250aCIsIk0iLCJkYXlzIiwiZGF5IiwiZCIsImRhdGVzIiwiZGF0ZSIsIkQiLCJob3VycyIsImhvdXIiLCJoIiwibWludXRlcyIsIm1pbnV0ZSIsIm0iLCJzZWNvbmRzIiwic2Vjb25kIiwicyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vj''@;'; put 'put ''b25kIiwibXMiXSxJcj1MdC5sZW5ndGg7Zm9yKEd0PTA7R3Q8SXI7R3QrPTEpbXQ9bXR8fE8oa2UsTHRbR3RdKTtyZXR1cm4gJGUmJm10fShrZSl8fG51bGw9PWtlfWZ1bmN0aW9uIEthKGtlLCRlKXtpZihrZS5kYXRlKCk8JGUuZGF0ZSgpKXJldHVybi1LYSgkZSxrZSk7dmFyIG10PTEyKigk''@;'; put 'put ''ZS55ZWFyKCkta2UueWVhcigpKSsoJGUubW9udGgoKS1rZS5tb250aCgpKSxMdD1rZS5jbG9uZSgpLmFkZChtdCwibW9udGhzIik7cmV0dXJuLShtdCsoJGUtTHQ8MD8oJGUtTHQpLyhMdC1rZS5jbG9uZSgpLmFkZChtdC0xLCJtb250aHMiKSk6KCRlLUx0KS8oa2UuY2xvbmUoKS5hZGQobXQr''@;'; put 'put ''MSwibW9udGhzIiktTHQpKSl8fDB9ZnVuY3Rpb24gSGkoa2Upe3ZhciAkZTtyZXR1cm4gdm9pZCAwPT09a2U/dGhpcy5fbG9jYWxlLl9hYmJyOihudWxsIT0oJGU9bHUoa2UpKSYmKHRoaXMuX2xvY2FsZT0kZSksdGhpcyl9eC5kZWZhdWx0Rm9ybWF0PSJZWVlZLU1NLUREVEhIOm1tOnNzWiIs''@;'; put 'put ''eC5kZWZhdWx0Rm9ybWF0VXRjPSJZWVlZLU1NLUREVEhIOm1tOnNzW1pdIjt2YXIgQmk9dWUoIm1vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVu''@;'; put 'put ''dCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuIixmdW5jdGlvbihrZSl7cmV0dXJuIHZvaWQgMD09PWtlP3RoaXMubG9jYWxlRGF0YSgpOnRoaXMubG9jYWxlKGtlKX0pO2Z1bmN0aW9uIERvKCl7cmV0dXJuIHRoaXMuX2xvY2FsZX12YXIgWGE9NmU0LEkxPTYwKlhhLHpvPTM1MDYz''@;'; put 'put ''MjgqSTE7ZnVuY3Rpb24gVHUoa2UsJGUpe3JldHVybihrZSUkZSskZSklJGV9ZnVuY3Rpb24gVmEoa2UsJGUsbXQpe3JldHVybiBrZTwxMDAmJmtlPj0wP25ldyBEYXRlKGtlKzQwMCwkZSxtdCktem86bmV3IERhdGUoa2UsJGUsbXQpLnZhbHVlT2YoKX1mdW5jdGlvbiBMZChrZSwkZSxtdCl7''@;'; put 'put ''cmV0dXJuIGtlPDEwMCYma2U+PTA/RGF0ZS5VVEMoa2UrNDAwLCRlLG10KS16bzpEYXRlLlVUQyhrZSwkZSxtdCl9ZnVuY3Rpb24gUmQoa2UsJGUpe3JldHVybiAkZS5lcmFzQWJiclJlZ2V4KGtlKX1mdW5jdGlvbiBpYygpe3ZhciBHdCxVbixrZT1bXSwkZT1bXSxtdD1bXSxMdD1bXSxJcj10''@;'; put 'put ''aGlzLmVyYXMoKTtmb3IoR3Q9MCxVbj1Jci5sZW5ndGg7R3Q8VW47KytHdCkkZS5wdXNoKHp0KElyW0d0XS5uYW1lKSksa2UucHVzaCh6dChJcltHdF0uYWJicikpLG10LnB1c2goenQoSXJbR3RdLm5hcnJvdykpLEx0LnB1c2goenQoSXJbR3RdLm5hbWUpKSxMdC5wdXNoKHp0KElyW0d0XS5h''@;'; put 'put ''YmJyKSksTHQucHVzaCh6dChJcltHdF0ubmFycm93KSk7dGhpcy5fZXJhc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitMdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc05hbWVSZWdleD1uZXcgUmVnRXhwKCJeKCIrJGUuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNBYmJyUmVnZXg9''@;'; put 'put ''bmV3IFJlZ0V4cCgiXigiK2tlLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl9lcmFzTmFycm93UmVnZXg9bmV3IFJlZ0V4cCgiXigiK210LmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBPZChrZSwkZSl7ZGUoMCxba2Usa2UubGVuZ3RoXSwwLCRlKX1mdW5jdGlvbiBzOShrZSwkZSxtdCxM''@;'; put 'put ''dCxHdCl7dmFyIFVuO3JldHVybiBudWxsPT1rZT9QYSh0aGlzLEx0LEd0KS55ZWFyOigkZT4oVW49U3Ioa2UsTHQsR3QpKSYmKCRlPVVuKSxhOS5jYWxsKHRoaXMsa2UsJGUsbXQsTHQsR3QpKX1mdW5jdGlvbiBhOShrZSwkZSxtdCxMdCxHdCl7dmFyIFVuPWZzKGtlLCRlLG10LEx0LEd0KSxJ''@;'; put 'put ''cj1lMChVbi55ZWFyLDAsVW4uZGF5T2ZZZWFyKTtyZXR1cm4gdGhpcy55ZWFyKElyLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgoSXIuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKElyLmdldFVUQ0RhdGUoKSksdGhpc31kZSgiTiIsMCwwLCJlcmFBYmJyIiksZGUoIk5OIiwwLDAsImVy''@;'; put 'put ''YUFiYnIiKSxkZSgiTk5OIiwwLDAsImVyYUFiYnIiKSxkZSgiTk5OTiIsMCwwLCJlcmFOYW1lIiksZGUoIk5OTk5OIiwwLDAsImVyYU5hcnJvdyIpLGRlKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxkZSgieSIsWyJ5eSIsMl0sMCwiZXJhWWVhciIpLGRlKCJ5IixbInl5eSIsM10sMCwi''@;'; put 'put ''ZXJhWWVhciIpLGRlKCJ5IixbInl5eXkiLDRdLDAsImVyYVllYXIiKSxwdCgiTiIsUmQpLHB0KCJOTiIsUmQpLHB0KCJOTk4iLFJkKSxwdCgiTk5OTiIsZnVuY3Rpb24gcmMoa2UsJGUpe3JldHVybiAkZS5lcmFzTmFtZVJlZ2V4KGtlKX0pLHB0KCJOTk5OTiIsZnVuY3Rpb24gVHcoa2UsJGUp''@;'; put 'put ''e3JldHVybiAkZS5lcmFzTmFycm93UmVnZXgoa2UpfSkseG4oWyJOIiwiTk4iLCJOTk4iLCJOTk5OIiwiTk5OTk4iXSxmdW5jdGlvbihrZSwkZSxtdCxMdCl7dmFyIEd0PW10Ll9sb2NhbGUuZXJhc1BhcnNlKGtlLEx0LG10Ll9zdHJpY3QpO0d0P0IobXQpLmVyYT1HdDpCKG10KS5pbnZhbGlk''@;'; put 'put ''RXJhPWtlfSkscHQoInkiLF90KSxwdCgieXkiLF90KSxwdCgieXl5IixfdCkscHQoInl5eXkiLF90KSxwdCgieW8iLGZ1bmN0aW9uIENjKGtlLCRlKXtyZXR1cm4gJGUuX2VyYVllYXJPcmRpbmFsUmVnZXh8fF90fSkseG4oWyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0sUm4pLHhuKFsieW8iXSxm''@;'; put 'put ''dW5jdGlvbihrZSwkZSxtdCxMdCl7dmFyIEd0O210Ll9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgmJihHdD1rZS5tYXRjaChtdC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksJGVbUm5dPW10Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZT9tdC5fbG9jYWxlLmVyYVllYXJP''@;'; put 'put ''cmRpbmFsUGFyc2Uoa2UsR3QpOnBhcnNlSW50KGtlLDEwKX0pLGRlKDAsWyJnZyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSksZGUoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxPZCgiZ2dnZyIsIndl''@;'; put 'put ''ZWtZZWFyIiksT2QoImdnZ2dnIiwid2Vla1llYXIiKSxPZCgiR0dHRyIsImlzb1dlZWtZZWFyIiksT2QoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxxZSgid2Vla1llYXIiLCJnZyIpLHFlKCJpc29XZWVrWWVhciIsIkdHIiksTWUoIndlZWtZZWFyIiwxKSxNZSgiaXNvV2Vla1llYXIiLDEpLHB0''@;'; put 'put ''KCJHIixOdCkscHQoImciLE50KSxwdCgiR0ciLEhuLGJuKSxwdCgiZ2ciLEhuLGJuKSxwdCgiR0dHRyIsd3QsZW4pLHB0KCJnZ2dnIix3dCxlbikscHQoIkdHR0dHIixYdCwkbikscHQoImdnZ2dnIixYdCwkbiksc24oWyJnZ2dnIiwiZ2dnZ2ciLCJHR0dHIiwiR0dHR0ciXSxmdW5jdGlvbihr''@;'; put 'put ''ZSwkZSxtdCxMdCl7JGVbTHQuc3Vic3RyKDAsMildPXV0KGtlKX0pLHNuKFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKGtlLCRlLG10LEx0KXskZVtMdF09eC5wYXJzZVR3b0RpZ2l0WWVhcihrZSl9KSxkZSgiUSIsMCwiUW8iLCJxdWFydGVyIikscWUoInF1YXJ0ZXIiLCJRIiksTWUoInF1YXJ0ZXIi''@;'; put 'put ''LDcpLHB0KCJRIixVdCkseG4oIlEiLGZ1bmN0aW9uKGtlLCRlKXskZVskdF09MyoodXQoa2UpLTEpfSksZGUoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxxZSgiZGF0ZSIsIkQiKSxNZSgiZGF0ZSIsOSkscHQoIkQiLEhuKSxwdCgiREQiLEhuLGJuKSxwdCgiRG8iLGZ1bmN0aW9uKGtlLCRl''@;'; put 'put ''KXtyZXR1cm4ga2U/JGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2V8fCRlLl9vcmRpbmFsUGFyc2U6JGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSkseG4oWyJEIiwiREQiXSxQbikseG4oIkRvIixmdW5jdGlvbihrZSwkZSl7JGVbUG5dPXV0KGtlLm1hdGNoKEhuKVswXSl9KTt2''@;'; put 'put ''YXIgaG09TXQoIkRhdGUiLCEwKTtkZSgiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIikscWUoImRheU9mWWVhciIsIkRERCIpLE1lKCJkYXlPZlllYXIiLDQpLHB0KCJEREQiLGhuKSxwdCgiRERERCIsV24pLHhuKFsiREREIiwiRERERCJdLGZ1bmN0aW9uKGtlLCRlLG10KXtt''@;'; put 'put ''dC5fZGF5T2ZZZWFyPXV0KGtlKX0pLGRlKCJtIixbIm1tIiwyXSwwLCJtaW51dGUiKSxxZSgibWludXRlIiwibSIpLE1lKCJtaW51dGUiLDE0KSxwdCgibSIsSG4pLHB0KCJtbSIsSG4sYm4pLHhuKFsibSIsIm1tIl0sbG4pO3ZhciBFND1NdCgiTWludXRlcyIsITEpO2RlKCJzIixbInNzIiwy''@;'; put 'put ''XSwwLCJzZWNvbmQiKSxxZSgic2Vjb25kIiwicyIpLE1lKCJzZWNvbmQiLDE1KSxwdCgicyIsSG4pLHB0KCJzcyIsSG4sYm4pLHhuKFsicyIsInNzIl0sam4pO3ZhciBGMSxmbSxsOT1NdCgiU2Vjb25kcyIsITEpO2ZvcihkZSgiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxs''@;'; put 'put ''aXNlY29uZCgpLzEwMCl9KSxkZSgwLFsiU1MiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm5+fih0aGlzLm1pbGxpc2Vjb25kKCkvMTApfSksZGUoMCxbIlNTUyIsM10sMCwibWlsbGlzZWNvbmQiKSxkZSgwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiAxMCp0aGlzLm1pbGxpc2Vjb25k''@;'; put 'put ''KCl9KSxkZSgwLFsiU1NTU1MiLDVdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMubWlsbGlzZWNvbmQoKX0pLGRlKDAsWyJTU1NTU1MiLDZdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWUzKnRoaXMubWlsbGlzZWNvbmQoKX0pLGRlKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIDFlNCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxkZSgwLFsiU1NTU1NTU1MiLDhdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU1KnRoaXMubWlsbGlzZWNvbmQoKX0pLGRlKDAsWyJTU1NTU1NTU1MiLDldLDAsZnVuY3Rpb24oKXtyZXR1cm4gMWU2KnRoaXMubWlsbGlzZWNvbmQoKX0pLHFlKCJt''@;'; put 'put ''aWxsaXNlY29uZCIsIm1zIiksTWUoIm1pbGxpc2Vjb25kIiwxNikscHQoIlMiLGhuLFV0KSxwdCgiU1MiLGhuLGJuKSxwdCgiU1NTIixobixXbiksRjE9IlNTU1MiO0YxLmxlbmd0aDw9OTtGMSs9IlMiKXB0KEYxLF90KTtmdW5jdGlvbiBJdyhrZSwkZSl7JGVbcXJdPXV0KDFlMyooIjAuIitr''@;'; put 'put ''ZSkpfWZvcihGMT0iUyI7RjEubGVuZ3RoPD05O0YxKz0iUyIpeG4oRjEsSXcpO2ZtPU10KCJNaWxsaXNlY29uZHMiLCExKSxkZSgieiIsMCwwLCJ6b25lQWJiciIpLGRlKCJ6eiIsMCwwLCJ6b25lTmFtZSIpO3ZhciB3aT1vZS5wcm90b3R5cGU7ZnVuY3Rpb24gazQoa2Upe3JldHVybiBrZX13''@;'; put 'put ''aS5hZGQ9UTcsd2kuY2FsZW5kYXI9ZnVuY3Rpb24gYjQoa2UsJGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYoYXJndW1lbnRzWzBdP2RsKGFyZ3VtZW50c1swXSk/KGtlPWFyZ3VtZW50c1swXSwkZT12b2lkIDApOmZ1bmN0aW9uIF80KGtlKXt2YXIgR3QsJGU9TShrZSkmJiFSKGtlKSxtdD0h''@;'; put 'put ''MSxMdD1bInNhbWVEYXkiLCJuZXh0RGF5IiwibGFzdERheSIsIm5leHRXZWVrIiwibGFzdFdlZWsiLCJzYW1lRWxzZSJdO2ZvcihHdD0wO0d0PEx0Lmxlbmd0aDtHdCs9MSltdD1tdHx8TyhrZSxMdFtHdF0pO3JldHVybiAkZSYmbXR9KGFyZ3VtZW50c1swXSkmJigkZT1hcmd1bWVudHNbMF0s''@;'; put 'put ''a2U9dm9pZCAwKTooa2U9dm9pZCAwLCRlPXZvaWQgMCkpO3ZhciBtdD1rZXx8Y2EoKSxMdD1VaChtdCx0aGlzKS5zdGFydE9mKCJkYXkiKSxHdD14LmNhbGVuZGFyRm9ybWF0KHRoaXMsTHQpfHwic2FtZUVsc2UiLFVuPSRlJiYoYigkZVtHdF0pPyRlW0d0XS5jYWxsKHRoaXMsbXQpOiRlW0d0''@;'; put 'put ''XSk7cmV0dXJuIHRoaXMuZm9ybWF0KFVufHx0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihHdCx0aGlzLGNhKG10KSkpfSx3aS5jbG9uZT1mdW5jdGlvbiB5NCgpe3JldHVybiBuZXcgb2UodGhpcyl9LHdpLmRpZmY9ZnVuY3Rpb24gUW8oa2UsJGUsbXQpe3ZhciBMdCxHdCxVbjtpZighdGhp''@;'; put 'put ''cy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtpZighKEx0PVVoKGtlLHRoaXMpKS5pc1ZhbGlkKCkpcmV0dXJuIE5hTjtzd2l0Y2goR3Q9NmU0KihMdC51dGNPZmZzZXQoKS10aGlzLnV0Y09mZnNldCgpKSwkZT1YZSgkZSkpe2Nhc2UieWVhciI6VW49S2EodGhpcyxMdCkvMTI7YnJlYWs7Y2FzZSJt''@;'; put 'put ''b250aCI6VW49S2EodGhpcyxMdCk7YnJlYWs7Y2FzZSJxdWFydGVyIjpVbj1LYSh0aGlzLEx0KS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjpVbj0odGhpcy1MdCkvMWUzO2JyZWFrO2Nhc2UibWludXRlIjpVbj0odGhpcy1MdCkvNmU0O2JyZWFrO2Nhc2UiaG91ciI6VW49KHRoaXMtTHQpLzM2ZTU7''@;'; put 'put ''YnJlYWs7Y2FzZSJkYXkiOlVuPSh0aGlzLUx0LUd0KS84NjRlNTticmVhaztjYXNlIndlZWsiOlVuPSh0aGlzLUx0LUd0KS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDpVbj10aGlzLUx0fXJldHVybiBtdD9VbjppdChVbil9LHdpLmVuZE9mPWZ1bmN0aW9uIFZvKGtlKXt2YXIgJGUsbXQ7aWYodm9p''@;'; put 'put ''ZCAwPT09KGtlPVhlKGtlKSl8fCJtaWxsaXNlY29uZCI9PT1rZXx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO3N3aXRjaChtdD10aGlzLl9pc1VUQz9MZDpWYSxrZSl7Y2FzZSJ5ZWFyIjokZT1tdCh0aGlzLnllYXIoKSsxLDAsMSktMTticmVhaztjYXNlInF1YXJ0ZXIiOiRlPW10KHRo''@;'; put 'put ''aXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKzEsMSktMTticmVhaztjYXNlIndlZWsiOiRlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlz''@;'; put 'put ''LndlZWtkYXkoKSs3KS0xO2JyZWFrO2Nhc2UiaXNvV2VlayI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOiRlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0''@;'; put 'put ''aGlzLmRhdGUoKSsxKS0xO2JyZWFrO2Nhc2UiaG91ciI6JGU9dGhpcy5fZC52YWx1ZU9mKCksJGUrPUkxLVR1KCRlKyh0aGlzLl9pc1VUQz8wOnRoaXMudXRjT2Zmc2V0KCkqWGEpLEkxKS0xO2JyZWFrO2Nhc2UibWludXRlIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZSs9WGEtVHUoJGUsWGEp''@;'; put 'put ''LTE7YnJlYWs7Y2FzZSJzZWNvbmQiOiRlPXRoaXMuX2QudmFsdWVPZigpLCRlKz0xZTMtVHUoJGUsMWUzKS0xfXJldHVybiB0aGlzLl9kLnNldFRpbWUoJGUpLHgudXBkYXRlT2Zmc2V0KHRoaXMsITApLHRoaXN9LHdpLmZvcm1hdD1mdW5jdGlvbiBDNChrZSl7a2V8fChrZT10aGlzLmlzVXRj''@;'; put 'put ''KCk/eC5kZWZhdWx0Rm9ybWF0VXRjOnguZGVmYXVsdEZvcm1hdCk7dmFyICRlPUxlKHRoaXMsa2UpO3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KCRlKX0sd2kuZnJvbT1mdW5jdGlvbiBjbShrZSwkZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoc2Uoa2UpJiZrZS5pc1Zh''@;'; put 'put ''bGlkKCl8fGNhKGtlKS5pc1ZhbGlkKCkpP01hKHt0bzp0aGlzLGZyb206a2V9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoISRlKTp0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfSx3aS5mcm9tTm93PWZ1bmN0aW9uIGYzKGtlKXtyZXR1cm4gdGhpcy5mcm9tKGNhKCks''@;'; put 'put ''a2UpfSx3aS50bz1mdW5jdGlvbiBuOShrZSwkZSl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpJiYoc2Uoa2UpJiZrZS5pc1ZhbGlkKCl8fGNhKGtlKS5pc1ZhbGlkKCkpP01hKHtmcm9tOnRoaXMsdG86a2V9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoISRlKTp0aGlzLmxvY2FsZURh''@;'; put 'put ''dGEoKS5pbnZhbGlkRGF0ZSgpfSx3aS50b05vdz1mdW5jdGlvbiByOShrZSl7cmV0dXJuIHRoaXMudG8oY2EoKSxrZSl9LHdpLmdldD1mdW5jdGlvbiBvbihrZSl7cmV0dXJuIGIodGhpc1trZT1YZShrZSldKT90aGlzW2tlXSgpOnRoaXN9LHdpLmludmFsaWRBdD1mdW5jdGlvbiBSMSgpe3Jl''@;'; put 'put ''dHVybiBCKHRoaXMpLm92ZXJmbG93fSx3aS5pc0FmdGVyPWZ1bmN0aW9uIGxtKGtlLCRlKXt2YXIgbXQ9c2Uoa2UpP2tlOmNhKGtlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNvbmQiPT09KCRlPVhlKCRlKXx8Im1pbGxpc2Vjb25kIik/dGhp''@;'; put 'put ''cy52YWx1ZU9mKCk+bXQudmFsdWVPZigpOm10LnZhbHVlT2YoKTx0aGlzLmNsb25lKCkuc3RhcnRPZigkZSkudmFsdWVPZigpKX0sd2kuaXNCZWZvcmU9ZnVuY3Rpb24gdmkoa2UsJGUpe3ZhciBtdD1zZShrZSk/a2U6Y2Eoa2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhbXQuaXNWYWxp''@;'; put 'put ''ZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oJGU9WGUoJGUpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKTxtdC52YWx1ZU9mKCk6dGhpcy5jbG9uZSgpLmVuZE9mKCRlKS52YWx1ZU9mKCk8bXQudmFsdWVPZigpKX0sd2kuaXNCZXR3ZWVuPWZ1bmN0aW9uIHc0KGtlLCRlLG10LEx0KXt2''@;'; put 'put ''YXIgR3Q9c2Uoa2UpP2tlOmNhKGtlKSxVbj1zZSgkZSk/JGU6Y2EoJGUpO3JldHVybiEhKHRoaXMuaXNWYWxpZCgpJiZHdC5pc1ZhbGlkKCkmJlVuLmlzVmFsaWQoKSkmJigiKCI9PT0oTHQ9THR8fCIoKSIpWzBdP3RoaXMuaXNBZnRlcihHdCxtdCk6IXRoaXMuaXNCZWZvcmUoR3QsbXQpKSYm''@;'; put 'put ''KCIpIj09PUx0WzFdP3RoaXMuaXNCZWZvcmUoVW4sbXQpOiF0aGlzLmlzQWZ0ZXIoVW4sbXQpKX0sd2kuaXNTYW1lPWZ1bmN0aW9uIGgzKGtlLCRlKXt2YXIgTHQsbXQ9c2Uoa2UpP2tlOmNhKGtlKTtyZXR1cm4hKCF0aGlzLmlzVmFsaWQoKXx8IW10LmlzVmFsaWQoKSkmJigibWlsbGlzZWNv''@;'; put 'put ''bmQiPT09KCRlPVhlKCRlKXx8Im1pbGxpc2Vjb25kIik/dGhpcy52YWx1ZU9mKCk9PT1tdC52YWx1ZU9mKCk6KEx0PW10LnZhbHVlT2YoKSx0aGlzLmNsb25lKCkuc3RhcnRPZigkZSkudmFsdWVPZigpPD1MdCYmTHQ8PXRoaXMuY2xvbmUoKS5lbmRPZigkZSkudmFsdWVPZigpKSl9LHdpLmlz''@;'; put 'put ''U2FtZU9yQWZ0ZXI9ZnVuY3Rpb24gQ3Ioa2UsJGUpe3JldHVybiB0aGlzLmlzU2FtZShrZSwkZSl8fHRoaXMuaXNBZnRlcihrZSwkZSl9LHdpLmlzU2FtZU9yQmVmb3JlPWZ1bmN0aW9uIE5hKGtlLCRlKXtyZXR1cm4gdGhpcy5pc1NhbWUoa2UsJGUpfHx0aGlzLmlzQmVmb3JlKGtlLCRlKX0s''@;'; put 'put ''d2kuaXNWYWxpZD1mdW5jdGlvbiBodSgpe3JldHVybiBYKHRoaXMpfSx3aS5sYW5nPUJpLHdpLmxvY2FsZT1IaSx3aS5sb2NhbGVEYXRhPURvLHdpLm1heD1YNyx3aS5taW49QTEsd2kucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uICRoKCl7cmV0dXJuIEUoe30sQih0aGlzKSl9LHdpLnNldD1mdW5j''@;'; put 'put ''dGlvbiBDbihrZSwkZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBrZSl7dmFyIEx0LG10PWZ1bmN0aW9uIERlKGtlKXt2YXIgbXQsJGU9W107Zm9yKG10IGluIGtlKU8oa2UsbXQpJiYkZS5wdXNoKHt1bml0Om10LHByaW9yaXR5Omh0W210XX0pO3JldHVybiAkZS5zb3J0KGZ1bmN0aW9uKEx0LEd0''@;'; put 'put ''KXtyZXR1cm4gTHQucHJpb3JpdHktR3QucHJpb3JpdHl9KSwkZX0oa2U9VWUoa2UpKSxHdD1tdC5sZW5ndGg7Zm9yKEx0PTA7THQ8R3Q7THQrKyl0aGlzW210W0x0XS51bml0XShrZVttdFtMdF0udW5pdF0pfWVsc2UgaWYoYih0aGlzW2tlPVhlKGtlKV0pKXJldHVybiB0aGlzW2tlXSgkZSk7''@;'; put 'put ''cmV0dXJuIHRoaXN9LHdpLnN0YXJ0T2Y9ZnVuY3Rpb24gTDEoa2Upe3ZhciAkZSxtdDtpZih2b2lkIDA9PT0oa2U9WGUoa2UpKXx8Im1pbGxpc2Vjb25kIj09PWtlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKG10PXRoaXMuX2lzVVRDP0xkOlZhLGtlKXtjYXNlInllYXIi''@;'; put 'put ''OiRlPW10KHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjokZT1tdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6JGU9bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Uid2VlayI6JGU9''@;'; put 'put ''bXQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOiRlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRh''@;'; put 'put ''dGUiOiRlPW10KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZS09VHUoJGUrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpYYSksSTEpO2JyZWFrO2Nhc2UibWludXRlIjokZT10aGlzLl9k''@;'; put 'put ''LnZhbHVlT2YoKSwkZS09VHUoJGUsWGEpO2JyZWFrO2Nhc2Uic2Vjb25kIjokZT10aGlzLl9kLnZhbHVlT2YoKSwkZS09VHUoJGUsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKCRlKSx4LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSx3aS5zdWJ0cmFjdD1lOSx3aS50b0FycmF5PWZ1''@;'; put 'put ''bmN0aW9uIEphKCl7dmFyIGtlPXRoaXM7cmV0dXJuW2tlLnllYXIoKSxrZS5tb250aCgpLGtlLmRhdGUoKSxrZS5ob3VyKCksa2UubWludXRlKCksa2Uuc2Vjb25kKCksa2UubWlsbGlzZWNvbmQoKV19LHdpLnRvT2JqZWN0PWZ1bmN0aW9uIE8yKCl7dmFyIGtlPXRoaXM7cmV0dXJue3llYXJz''@;'; put 'put ''OmtlLnllYXIoKSxtb250aHM6a2UubW9udGgoKSxkYXRlOmtlLmRhdGUoKSxob3VyczprZS5ob3VycygpLG1pbnV0ZXM6a2UubWludXRlcygpLHNlY29uZHM6a2Uuc2Vjb25kcygpLG1pbGxpc2Vjb25kczprZS5taWxsaXNlY29uZHMoKX19LHdpLnRvRGF0ZT1mdW5jdGlvbiBPbCgpe3JldHVy''@;'; put 'put ''biBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LHdpLnRvSVNPU3RyaW5nPWZ1bmN0aW9uIElkKGtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyICRlPSEwIT09a2UsbXQ9JGU/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIG10LnllYXIoKTwwfHxtdC55ZWFyKCk+''@;'; put 'put ''OTk5OT9MZShtdCwkZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOmIoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpPyRlP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSs2''@;'; put 'put ''MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNlKCJaIixMZShtdCwiWiIpKTpMZShtdCwkZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LHdpLmluc3BlY3Q9ZnVuY3Rpb24gSGMoKXtpZighdGhp''@;'; put 'put ''cy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIG10LEx0LGtlPSJtb21lbnQiLCRlPSIiO3JldHVybiB0aGlzLmlzTG9jYWwoKXx8KGtlPTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBhcnNlWm9uZSIsJGU9''@;'; put 'put ''IloiKSxtdD0iWyIra2UrJygiXScsTHQ9MDw9dGhpcy55ZWFyKCkmJnRoaXMueWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIix0aGlzLmZvcm1hdChtdCtMdCsiLU1NLUREW1RdSEg6bW06c3MuU1NTIiskZSsnWyIpXScpfSx0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLmZvciYm''@;'; put 'put ''KHdpW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uKCl7cmV0dXJuIk1vbWVudDwiK3RoaXMuZm9ybWF0KCkrIj4ifSksd2kudG9KU09OPWZ1bmN0aW9uIFAyKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSx3''@;'; put 'put ''aS50b1N0cmluZz1mdW5jdGlvbiBSbCgpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sd2kudW5peD1mdW5jdGlvbiBTNCgpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LHdp''@;'; put 'put ''LnZhbHVlT2Y9ZnVuY3Rpb24gR2goKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSx3aS5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24gTzEoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRo''@;'; put 'put ''aXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSx3aS5lcmFOYW1lPWZ1bmN0aW9uIHBzKCl7dmFyIGtlLCRlLG10LEx0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3Ioa2U9MCwkZT1MdC5sZW5ndGg7a2U8JGU7KytrZSlpZihtdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5Iiku''@;'; put 'put ''dmFsdWVPZigpLEx0W2tlXS5zaW5jZTw9bXQmJm10PD1MdFtrZV0udW50aWx8fEx0W2tlXS51bnRpbDw9bXQmJm10PD1MdFtrZV0uc2luY2UpcmV0dXJuIEx0W2tlXS5uYW1lO3JldHVybiIifSx3aS5lcmFOYXJyb3c9ZnVuY3Rpb24gQXcoKXt2YXIga2UsJGUsbXQsTHQ9dGhpcy5sb2NhbGVE''@;'; put 'put ''YXRhKCkuZXJhcygpO2ZvcihrZT0wLCRlPUx0Lmxlbmd0aDtrZTwkZTsrK2tlKWlmKG10PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksTHRba2VdLnNpbmNlPD1tdCYmbXQ8PUx0W2tlXS51bnRpbHx8THRba2VdLnVudGlsPD1tdCYmbXQ8PUx0W2tlXS5zaW5jZSlyZXR1''@;'; put 'put ''cm4gTHRba2VdLm5hcnJvdztyZXR1cm4iIn0sd2kuZXJhQWJicj1mdW5jdGlvbiBNNCgpe3ZhciBrZSwkZSxtdCxMdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKGtlPTAsJGU9THQubGVuZ3RoO2tlPCRlOysra2UpaWYobXQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLnZhbHVl''@;'; put 'put ''T2YoKSxMdFtrZV0uc2luY2U8PW10JiZtdDw9THRba2VdLnVudGlsfHxMdFtrZV0udW50aWw8PW10JiZtdDw9THRba2VdLnNpbmNlKXJldHVybiBMdFtrZV0uYWJicjtyZXR1cm4iIn0sd2kuZXJhWWVhcj1mdW5jdGlvbiB1bSgpe3ZhciBrZSwkZSxtdCxMdCxHdD10aGlzLmxvY2FsZURhdGEo''@;'; put 'put ''KS5lcmFzKCk7Zm9yKGtlPTAsJGU9R3QubGVuZ3RoO2tlPCRlOysra2UpaWYobXQ9R3Rba2VdLnNpbmNlPD1HdFtrZV0udW50aWw/MTotMSxMdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLEd0W2tlXS5zaW5jZTw9THQmJkx0PD1HdFtrZV0udW50aWx8fEd0W2tlXS51''@;'; put 'put ''bnRpbDw9THQmJkx0PD1HdFtrZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigpLXgoR3Rba2VdLnNpbmNlKS55ZWFyKCkpKm10K0d0W2tlXS5vZmZzZXQ7cmV0dXJuIHRoaXMueWVhcigpfSx3aS55ZWFyPU4wLHdpLmlzTGVhcFllYXI9ZnVuY3Rpb24gczMoKXtyZXR1cm4gemUodGhpcy55ZWFy''@;'; put 'put ''KCkpfSx3aS53ZWVrWWVhcj1mdW5jdGlvbiBQMShrZSl7cmV0dXJuIHM5LmNhbGwodGhpcyxrZSx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95KX0sd2kuaXNvV2Vla1llYXI9ZnVuY3Rpb24g''@;'; put 'put ''cWgoa2Upe3JldHVybiBzOS5jYWxsKHRoaXMsa2UsdGhpcy5pc29XZWVrKCksdGhpcy5pc29XZWVrZGF5KCksMSw0KX0sd2kucXVhcnRlcj13aS5xdWFydGVycz1mdW5jdGlvbiBkbShrZSl7cmV0dXJuIG51bGw9PWtlP01hdGguY2VpbCgodGhpcy5tb250aCgpKzEpLzMpOnRoaXMubW9udGgo''@;'; put 'put ''Myooa2UtMSkrdGhpcy5tb250aCgpJTMpfSx3aS5tb250aD1Mbyx3aS5kYXlzSW5Nb250aD1mdW5jdGlvbiBocygpe3JldHVybiBubyh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkpfSx3aS53ZWVrPXdpLndlZWtzPWZ1bmN0aW9uIGlzKGtlKXt2YXIgJGU9dGhpcy5sb2NhbGVEYXRhKCkud2Vl''@;'; put 'put ''ayh0aGlzKTtyZXR1cm4gbnVsbD09a2U/JGU6dGhpcy5hZGQoNyooa2UtJGUpLCJkIil9LHdpLmlzb1dlZWs9d2kuaXNvV2Vla3M9ZnVuY3Rpb24gV2koa2Upe3ZhciAkZT1QYSh0aGlzLDEsNCkud2VlaztyZXR1cm4gbnVsbD09a2U/JGU6dGhpcy5hZGQoNyooa2UtJGUpLCJkIil9LHdpLndl''@;'; put 'put ''ZWtzSW5ZZWFyPWZ1bmN0aW9uIGk5KCl7dmFyIGtlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBTcih0aGlzLnllYXIoKSxrZS5kb3csa2UuZG95KX0sd2kud2Vla3NJbldlZWtZZWFyPWZ1bmN0aW9uIG85KCl7dmFyIGtlPXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO3JldHVybiBT''@;'; put 'put ''cih0aGlzLndlZWtZZWFyKCksa2UuZG93LGtlLmRveSl9LHdpLmlzb1dlZWtzSW5ZZWFyPWZ1bmN0aW9uIFFjKCl7cmV0dXJuIFNyKHRoaXMueWVhcigpLDEsNCl9LHdpLmlzb1dlZWtzSW5JU09XZWVrWWVhcj1mdW5jdGlvbiB4NCgpe3JldHVybiBTcih0aGlzLmlzb1dlZWtZZWFyKCksMSw0''@;'; put 'put ''KX0sd2kuZGF0ZT1obSx3aS5kYXk9d2kuZGF5cz1mdW5jdGlvbiBEMihrZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBudWxsIT1rZT90aGlzOk5hTjt2YXIgJGU9dGhpcy5faXNVVEM/dGhpcy5fZC5nZXRVVENEYXkoKTp0aGlzLl9kLmdldERheSgpO3JldHVybiBudWxsIT1rZT8oa2U9''@;'; put 'put ''ZnVuY3Rpb24gJGEoa2UsJGUpe3JldHVybiJzdHJpbmciIT10eXBlb2Yga2U/a2U6aXNOYU4oa2UpPyJudW1iZXIiPT10eXBlb2Yoa2U9JGUud2Vla2RheXNQYXJzZShrZSkpP2tlOm51bGw6cGFyc2VJbnQoa2UsMTApfShrZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoa2UtJGUsImQi''@;'; put 'put ''KSk6JGV9LHdpLndlZWtkYXk9ZnVuY3Rpb24gbDMoa2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9a2U/dGhpczpOYU47dmFyICRlPSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1rZT8kZTp0aGlzLmFkZChrZS0kZSwi''@;'; put 'put ''ZCIpfSx3aS5pc29XZWVrZGF5PWZ1bmN0aW9uIEFyKGtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPWtlP3RoaXM6TmFOO2lmKG51bGwhPWtlKXt2YXIgJGU9ZnVuY3Rpb24gdDAoa2UsJGUpe3JldHVybiJzdHJpbmciPT10eXBlb2Yga2U/JGUud2Vla2RheXNQYXJzZShrZSkl''@;'; put 'put ''N3x8Nzppc05hTihrZSk/bnVsbDprZX0oa2UsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/JGU6JGUtNyl9cmV0dXJuIHRoaXMuZGF5KCl8fDd9LHdpLmRheU9mWWVhcj1mdW5jdGlvbiBEdyhrZSl7dmFyICRlPU1hdGgucm91bmQoKHRoaXMuY2xvbmUo''@;'; put 'put ''KS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09a2U/JGU6dGhpcy5hZGQoa2UtJGUsImQiKX0sd2kuaG91cj13aS5ob3Vycz1vcyx3aS5taW51dGU9d2kubWludXRlcz1FNCx3aS5zZWNvbmQ9d2kuc2Vjb25kcz1sOSx3''@;'; put 'put ''aS5taWxsaXNlY29uZD13aS5taWxsaXNlY29uZHM9Zm0sd2kudXRjT2Zmc2V0PWZ1bmN0aW9uIEQxKGtlLCRlLG10KXt2YXIgR3QsTHQ9dGhpcy5fb2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9a2U/dGhpczpOYU47aWYobnVsbCE9a2Upe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2Yga2Upe2lmKG51bGw9PT0oa2U9VGQocnQsa2UpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKGtlKTwxNiYmIW10JiYoa2UqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJiRlJiYoR3Q9SmModGhpcykpLHRoaXMuX29mZnNldD1rZSx0aGlzLl9pc1VUQz0hMCxudWxsIT1HdCYmdGhp''@;'; put 'put ''cy5hZGQoR3QsIm0iKSxMdCE9PWtlJiYoISRlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP1doKHRoaXMsTWEoa2UtTHQsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCx4LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9jaGFu''@;'; put 'put ''Z2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9MdDpKYyh0aGlzKX0sd2kudXRjPWZ1bmN0aW9uIFpoKGtlKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCxrZSl9LHdpLmxvY2FsPWZ1bmN0aW9uIG1hKGtlKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0Y09m''@;'; put 'put ''ZnNldCgwLGtlKSx0aGlzLl9pc1VUQz0hMSxrZSYmdGhpcy5zdWJ0cmFjdChKYyh0aGlzKSwibSIpKSx0aGlzfSx3aS5wYXJzZVpvbmU9ZnVuY3Rpb24gUGMoKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgdGhpcy5faSl7dmFyIGtlPVRkKG1uLHRoaXMuX2kpO251bGwhPWtlP3RoaXMudXRjT2Zmc2V0KGtlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sd2kuaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24gRGQoa2Upe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJihrZT1r''@;'; put 'put ''ZT9jYShrZSkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1rZSklNjA9PTApfSx3aS5pc0RTVD1mdW5jdGlvbiBSMigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25lKCku''@;'; put 'put ''bW9udGgoNSkudXRjT2Zmc2V0KCl9LHdpLmlzTG9jYWw9ZnVuY3Rpb24gWWgoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LHdpLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uIHA0KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LHdpLmlzVXRjPWc0LHdp''@;'; put 'put ''LmlzVVRDPWc0LHdpLnpvbmVBYmJyPWZ1bmN0aW9uIGM5KCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSx3aS56b25lTmFtZT1mdW5jdGlvbiB1OSgpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSx3aS5kYXRlcz11ZSgiZGF0ZXMgYWNj''@;'; put 'put ''ZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLGhtKSx3aS5tb250aHM9dWUoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsTG8pLHdpLnllYXJzPXVlKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBp''@;'; put 'put ''bnN0ZWFkIixOMCksd2kuem9uZT11ZSgibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLGZ1bmN0aW9uIGwwKGtlLCRlKXtyZXR1cm4gbnVsbCE9a2U/''@;'; put 'put ''KCJzdHJpbmciIT10eXBlb2Yga2UmJihrZT0ta2UpLHRoaXMudXRjT2Zmc2V0KGtlLCRlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLHdpLmlzRFNUU2hpZnRlZD11ZSgiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5p''@;'; put 'put ''bmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsZnVuY3Rpb24gZjQoKXtpZigheih0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyICRlLGtlPXt9O3JldHVybiB0ZShrZSx0aGlzKSwoa2U9aW0oa2UpKS5fYT8oJGU9a2UuX2lzVVRD''@;'; put 'put ''P2ooa2UuX2EpOmNhKGtlLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmZ1bmN0aW9uIE9jKGtlLCRlLG10KXt2YXIgSXIsTHQ9TWF0aC5taW4oa2UubGVuZ3RoLCRlLmxlbmd0aCksR3Q9TWF0aC5hYnMoa2UubGVuZ3RoLSRlLmxlbmd0aCksVW49MDtmb3IoSXI9MDtJ''@;'; put 'put ''cjxMdDtJcisrKShtdCYma2VbSXJdIT09JGVbSXJdfHwhbXQmJnV0KGtlW0lyXSkhPT11dCgkZVtJcl0pKSYmVW4rKztyZXR1cm4gVW4rR3R9KGtlLl9hLCRlLnRvQXJyYXkoKSk+MCk6dGhpcy5faXNEU1RTaGlmdGVkPSExLHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciBTbz1OLnByb3RvdHlw''@;'; put 'put ''ZTtmdW5jdGlvbiBQbChrZSwkZSxtdCxMdCl7dmFyIEd0PWx1KCksVW49aigpLnNldChMdCwkZSk7cmV0dXJuIEd0W210XShVbixrZSl9ZnVuY3Rpb24gaGwoa2UsJGUsbXQpe2lmKEsoa2UpJiYoJGU9a2Usa2U9dm9pZCAwKSxrZT1rZXx8IiIsbnVsbCE9JGUpcmV0dXJuIFBsKGtlLCRlLG10''@;'; put 'put ''LCJtb250aCIpO3ZhciBMdCxHdD1bXTtmb3IoTHQ9MDtMdDwxMjtMdCsrKUd0W0x0XT1QbChrZSxMdCxtdCwibW9udGgiKTtyZXR1cm4gR3R9ZnVuY3Rpb24gZnUoa2UsJGUsbXQsTHQpeyJib29sZWFuIj09dHlwZW9mIGtlPyhLKCRlKSYmKG10PSRlLCRlPXZvaWQgMCksJGU9JGV8fCIiKToo''@;'; put 'put ''bXQ9JGU9a2Usa2U9ITEsSygkZSkmJihtdD0kZSwkZT12b2lkIDApLCRlPSRlfHwiIik7dmFyIElyLEd0PWx1KCksVW49a2U/R3QuX3dlZWsuZG93OjAseW89W107aWYobnVsbCE9bXQpcmV0dXJuIFBsKCRlLChtdCtVbiklNyxMdCwiZGF5Iik7Zm9yKElyPTA7SXI8NztJcisrKXlvW0lyXT1Q''@;'; put 'put ''bCgkZSwoSXIrVW4pJTcsTHQsImRheSIpO3JldHVybiB5b31Tby5jYWxlbmRhcj1mdW5jdGlvbiBTKGtlLCRlLG10KXt2YXIgTHQ9dGhpcy5fY2FsZW5kYXJba2VdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gYihMdCk/THQuY2FsbCgkZSxtdCk6THR9LFNvLmxvbmdEYXRlRm9y''@;'; put 'put ''bWF0PWZ1bmN0aW9uIGplKGtlKXt2YXIgJGU9dGhpcy5fbG9uZ0RhdGVGb3JtYXRba2VdLG10PXRoaXMuX2xvbmdEYXRlRm9ybWF0W2tlLnRvVXBwZXJDYXNlKCldO3JldHVybiAkZXx8IW10PyRlOih0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZV09bXQubWF0Y2gocCkubWFwKGZ1bmN0aW9uKEx0''@;'; put 'put ''KXtyZXR1cm4iTU1NTSI9PT1MdHx8Ik1NIj09PUx0fHwiREQiPT09THR8fCJkZGRkIj09PUx0P0x0LnNsaWNlKDEpOkx0fSkuam9pbigiIiksdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2VdKX0sU28uaW52YWxpZERhdGU9ZnVuY3Rpb24gS2UoKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9LFNv''@;'; put 'put ''Lm9yZGluYWw9ZnVuY3Rpb24gbHQoa2Upe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIixrZSl9LFNvLnByZXBhcnNlPWs0LFNvLnBvc3Rmb3JtYXQ9azQsU28ucmVsYXRpdmVUaW1lPWZ1bmN0aW9uIGJlKGtlLCRlLG10LEx0KXt2YXIgR3Q9dGhpcy5fcmVsYXRpdmVUaW1lW210''@;'; put 'put ''XTtyZXR1cm4gYihHdCk/R3Qoa2UsJGUsbXQsTHQpOkd0LnJlcGxhY2UoLyVkL2ksa2UpfSxTby5wYXN0RnV0dXJlPWZ1bmN0aW9uIEFlKGtlLCRlKXt2YXIgbXQ9dGhpcy5fcmVsYXRpdmVUaW1lW2tlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gYihtdCk/bXQoJGUpOm10LnJlcGxhY2Uo''@;'; put 'put ''LyVzL2ksJGUpfSxTby5zZXQ9ZnVuY3Rpb24gRChrZSl7dmFyICRlLG10O2ZvcihtdCBpbiBrZSlPKGtlLG10KSYmKGIoJGU9a2VbbXRdKT90aGlzW210XT0kZTp0aGlzWyJfIittdF09JGUpO3RoaXMuX2NvbmZpZz1rZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1uZXcg''@;'; put 'put ''UmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSxTby5lcmFzPWZ1bmN0aW9uIHUwKGtlLCRlKXt2YXIgbXQsTHQsR3QsVW49dGhpcy5fZXJhc3x8bHUoImVuIikuX2VyYXM7''@;'; put 'put ''Zm9yKG10PTAsTHQ9VW4ubGVuZ3RoO210PEx0OysrbXQpc3dpdGNoKCJzdHJpbmciPT10eXBlb2YgVW5bbXRdLnNpbmNlJiYoR3Q9eChVblttdF0uc2luY2UpLnN0YXJ0T2YoImRheSIpLFVuW210XS5zaW5jZT1HdC52YWx1ZU9mKCkpLHR5cGVvZiBVblttdF0udW50aWwpe2Nhc2UidW5kZWZp''@;'; put 'put ''bmVkIjpVblttdF0udW50aWw9MS8wO2JyZWFrO2Nhc2Uic3RyaW5nIjpHdD14KFVuW210XS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLFVuW210XS51bnRpbD1HdC52YWx1ZU9mKCl9cmV0dXJuIFVufSxTby5lcmFzUGFyc2U9ZnVuY3Rpb24gcDMoa2UsJGUsbXQpe3ZhciBMdCxH''@;'; put 'put ''dCxJcix5byxlcyxVbj10aGlzLmVyYXMoKTtmb3Ioa2U9a2UudG9VcHBlckNhc2UoKSxMdD0wLEd0PVVuLmxlbmd0aDtMdDxHdDsrK0x0KWlmKElyPVVuW0x0XS5uYW1lLnRvVXBwZXJDYXNlKCkseW89VW5bTHRdLmFiYnIudG9VcHBlckNhc2UoKSxlcz1VbltMdF0ubmFycm93LnRvVXBwZXJD''@;'; put 'put ''YXNlKCksbXQpc3dpdGNoKCRlKXtjYXNlIk4iOmNhc2UiTk4iOmNhc2UiTk5OIjppZih5bz09PWtlKXJldHVybiBVbltMdF07YnJlYWs7Y2FzZSJOTk5OIjppZihJcj09PWtlKXJldHVybiBVbltMdF07YnJlYWs7Y2FzZSJOTk5OTiI6aWYoZXM9PT1rZSlyZXR1cm4gVW5bTHRdfWVsc2UgaWYo''@;'; put 'put ''W0lyLHlvLGVzXS5pbmRleE9mKGtlKT49MClyZXR1cm4gVW5bTHRdfSxTby5lcmFzQ29udmVydFllYXI9ZnVuY3Rpb24gZzMoa2UsJGUpe3ZhciBtdD1rZS5zaW5jZTw9a2UudW50aWw/MTotMTtyZXR1cm4gdm9pZCAwPT09JGU/eChrZS5zaW5jZSkueWVhcigpOngoa2Uuc2luY2UpLnllYXIo''@;'; put 'put ''KSsoJGUta2Uub2Zmc2V0KSptdH0sU28uZXJhc0FiYnJSZWdleD1mdW5jdGlvbiBGMihrZSl7cmV0dXJuIE8odGhpcywiX2VyYXNBYmJyUmVnZXgiKXx8aWMuY2FsbCh0aGlzKSxrZT90aGlzLl9lcmFzQWJiclJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sU28uZXJhc05hbWVSZWdleD1mdW5jdGlv''@;'; put 'put ''biBkMChrZSl7cmV0dXJuIE8odGhpcywiX2VyYXNOYW1lUmVnZXgiKXx8aWMuY2FsbCh0aGlzKSxrZT90aGlzLl9lcmFzTmFtZVJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sU28uZXJhc05hcnJvd1JlZ2V4PWZ1bmN0aW9uIEgyKGtlKXtyZXR1cm4gTyh0aGlzLCJfZXJhc05hcnJvd1JlZ2V4Iil8''@;'; put 'put ''fGljLmNhbGwodGhpcyksa2U/dGhpcy5fZXJhc05hcnJvd1JlZ2V4OnRoaXMuX2VyYXNSZWdleH0sU28ubW9udGhzPWZ1bmN0aW9uIGlvKGtlLCRlKXtyZXR1cm4ga2U/bGUodGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNba2UubW9udGgoKV06dGhpcy5fbW9udGhzWyh0aGlzLl9tb250aHMu''@;'; put 'put ''aXNGb3JtYXR8fEppKS50ZXN0KCRlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW2tlLm1vbnRoKCldOmxlKHRoaXMuX21vbnRocyk/dGhpcy5fbW9udGhzOnRoaXMuX21vbnRocy5zdGFuZGFsb25lfSxTby5tb250aHNTaG9ydD1mdW5jdGlvbiBHaShrZSwkZSl7cmV0dXJuIGtlP2xlKHRoaXMu''@;'; put 'put ''X21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFtrZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtKaS50ZXN0KCRlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW2tlLm1vbnRoKCldOmxlKHRoaXMuX21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydDp0aGlzLl9tb250aHNTaG9y''@;'; put 'put ''dC5zdGFuZGFsb25lfSxTby5tb250aHNQYXJzZT1mdW5jdGlvbiB5cihrZSwkZSxtdCl7dmFyIEx0LEd0LFVuO2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpcmV0dXJuIGhvLmNhbGwodGhpcyxrZSwkZSxtdCk7Zm9yKHRoaXMuX21vbnRoc1BhcnNlfHwodGhpcy5fbW9udGhzUGFyc2U9W10s''@;'; put 'put ''dGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10pLEx0PTA7THQ8MTI7THQrKyl7aWYoR3Q9aihbMmUzLEx0XSksbXQmJiF0aGlzLl9sb25nTW9udGhzUGFyc2VbTHRdJiYodGhpcy5fbG9uZ01vbnRoc1BhcnNlW0x0XT1uZXcgUmVnRXhwKCJeIit0aGlz''@;'; put 'put ''Lm1vbnRocyhHdCwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbTHRdPW5ldyBSZWdFeHAoIl4iK3RoaXMubW9udGhzU2hvcnQoR3QsIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKSksIW10JiYhdGhpcy5fbW9udGhzUGFyc2VbTHRdJiYoVW49''@;'; put 'put ''Il4iK3RoaXMubW9udGhzKEd0LCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQoR3QsIiIpLHRoaXMuX21vbnRoc1BhcnNlW0x0XT1uZXcgUmVnRXhwKFVuLnJlcGxhY2UoIi4iLCIiKSwiaSIpKSxtdCYmIk1NTU0iPT09JGUmJnRoaXMuX2xvbmdNb250aHNQYXJzZVtMdF0udGVzdChrZSkpcmV0''@;'; put 'put ''dXJuIEx0O2lmKG10JiYiTU1NIj09PSRlJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4gTHQ7aWYoIW10JiZ0aGlzLl9tb250aHNQYXJzZVtMdF0udGVzdChrZSkpcmV0dXJuIEx0fX0sU28ubW9udGhzUmVnZXg9ZnVuY3Rpb24gTGMoa2Upe3JldHVybiB0aGlz''@;'; put 'put ''Ll9tb250aHNQYXJzZUV4YWN0PyhPKHRoaXMsIl9tb250aHNSZWdleCIpfHx1bC5jYWxsKHRoaXMpLGtlP3RoaXMuX21vbnRoc1N0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1JlZ2V4KTooTyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8KHRoaXMuX21vbnRoc1JlZ2V4PXJvKSx0aGlzLl9tb250aHNT''@;'; put 'put ''dHJpY3RSZWdleCYma2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpfSxTby5tb250aHNTaG9ydFJlZ2V4PWZ1bmN0aW9uIHJzKGtlKXtyZXR1cm4gdGhpcy5fbW9udGhzUGFyc2VFeGFjdD8oTyh0aGlzLCJfbW9udGhzUmVnZXgiKXx8dWwuY2FsbCh0aGlzKSxr''@;'; put 'put ''ZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpOihPKHRoaXMsIl9tb250aHNTaG9ydFJlZ2V4Iil8fCh0aGlzLl9tb250aHNTaG9ydFJlZ2V4PWFvKSx0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4JiZrZT90aGlzLl9tb250aHNTaG9ydFN0''@;'; put 'put ''cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXgpfSxTby53ZWVrPWZ1bmN0aW9uIEEyKGtlKXtyZXR1cm4gUGEoa2UsdGhpcy5fd2Vlay5kb3csdGhpcy5fd2Vlay5kb3kpLndlZWt9LFNvLmZpcnN0RGF5T2ZZZWFyPWZ1bmN0aW9uIGVhKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95fSxT''@;'; put 'put ''by5maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBQaCgpe3JldHVybiB0aGlzLl93ZWVrLmRvd30sU28ud2Vla2RheXM9ZnVuY3Rpb24gSGgoa2UsJGUpe3ZhciBtdD1sZSh0aGlzLl93ZWVrZGF5cyk/dGhpcy5fd2Vla2RheXM6dGhpcy5fd2Vla2RheXNba2UmJiEwIT09a2UmJnRoaXMuX3dlZWtk''@;'; put 'put ''YXlzLmlzRm9ybWF0LnRlc3QoJGUpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl07cmV0dXJuITA9PT1rZT9TYShtdCx0aGlzLl93ZWVrLmRvdyk6a2U/bXRba2UuZGF5KCldOm10fSxTby53ZWVrZGF5c01pbj1mdW5jdGlvbiBibyhrZSl7cmV0dXJuITA9PT1rZT9TYSh0aGlzLl93ZWVrZGF5c01p''@;'; put 'put ''bix0aGlzLl93ZWVrLmRvdyk6a2U/dGhpcy5fd2Vla2RheXNNaW5ba2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufSxTby53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIElzKGtlKXtyZXR1cm4hMD09PWtlP1NhKHRoaXMuX3dlZWtkYXlzU2hvcnQsdGhpcy5fd2Vlay5kb3cpOmtlP3RoaXMuX3dl''@;'; put 'put ''ZWtkYXlzU2hvcnRba2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9LFNvLndlZWtkYXlzUGFyc2U9ZnVuY3Rpb24gVDIoa2UsJGUsbXQpe3ZhciBMdCxHdCxVbjtpZih0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpcmV0dXJuIHIwLmNhbGwodGhpcyxrZSwkZSxtdCk7Zm9yKHRoaXMuX3dl''@;'; put 'put ''ZWtkYXlzUGFyc2V8fCh0aGlzLl93ZWVrZGF5c1BhcnNlPVtdLHRoaXMuX21pbldlZWtkYXlzUGFyc2U9W10sdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdLHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdKSxMdD0wO0x0PDc7THQrKyl7aWYoR3Q9aihbMmUzLDFdKS5kYXkoTHQpLG10JiYh''@;'; put 'put ''dGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbTHRdJiYodGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbTHRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMoR3QsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0x0XT1uZXcgUmVnRXhwKCJe''@;'; put 'put ''Iit0aGlzLndlZWtkYXlzU2hvcnQoR3QsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIiksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtMdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c01pbihHdCwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKSksdGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNQYXJzZVtMdF18fChVbj0iXiIrdGhpcy53ZWVrZGF5cyhHdCwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQoR3QsIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c01pbihHdCwiIiksdGhpcy5fd2Vla2RheXNQYXJzZVtMdF09bmV3IFJlZ0V4cChVbi5yZXBsYWNlKCIuIiwiIiksImkiKSksbXQm''@;'; put 'put ''JiJkZGRkIj09PSRlJiZ0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtMdF0udGVzdChrZSkpcmV0dXJuIEx0O2lmKG10JiYiZGRkIj09PSRlJiZ0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbTHRdLnRlc3Qoa2UpKXJldHVybiBMdDtpZihtdCYmImRkIj09PSRlJiZ0aGlzLl9taW5XZWVrZGF5c1Bh''@;'; put 'put ''cnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4gTHQ7aWYoIW10JiZ0aGlzLl93ZWVrZGF5c1BhcnNlW0x0XS50ZXN0KGtlKSlyZXR1cm4gTHR9fSxTby53ZWVrZGF5c1JlZ2V4PWZ1bmN0aW9uIF9jKGtlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhPKHRoaXMsIl93ZWVrZGF5c1Jl''@;'; put 'put ''Z2V4Iil8fG8wLmNhbGwodGhpcyksa2U/dGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KTooTyh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHwodGhpcy5fd2Vla2RheXNSZWdleD1uMCksdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYma2U/dGhpcy5fd2Vla2Rh''@;'; put 'put ''eXNTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1JlZ2V4KX0sU28ud2Vla2RheXNTaG9ydFJlZ2V4PWZ1bmN0aW9uIGtvKGtlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhPKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fG8wLmNhbGwodGhpcyksa2U/dGhpcy5fd2Vla2RheXNT''@;'; put 'put ''aG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCk6KE8odGhpcywiX3dlZWtkYXlzU2hvcnRSZWdleCIpfHwodGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXFhKSx0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJmtlP3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RS''@;'; put 'put ''ZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpfSxTby53ZWVrZGF5c01pblJlZ2V4PWZ1bmN0aW9uIENzKGtlKXtyZXR1cm4gdGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0PyhPKHRoaXMsIl93ZWVrZGF5c1JlZ2V4Iil8fG8wLmNhbGwodGhpcyksa2U/dGhpcy5fd2Vla2RheXNNaW5TdHJp''@;'; put 'put ''Y3RSZWdleDp0aGlzLl93ZWVrZGF5c01pblJlZ2V4KTooTyh0aGlzLCJfd2Vla2RheXNNaW5SZWdleCIpfHwodGhpcy5fd2Vla2RheXNNaW5SZWdleD12YyksdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCYma2U/dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5''@;'; put 'put ''c01pblJlZ2V4KX0sU28uaXNQTT1mdW5jdGlvbiBiaShrZSl7cmV0dXJuInAiPT09KGtlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKX0sU28ubWVyaWRpZW09ZnVuY3Rpb24gRmEoa2UsJGUsbXQpe3JldHVybiBrZT4xMT9tdD8icG0iOiJQTSI6bXQ/ImFtIjoiQU0ifSxIbygiZW4iLHtl''@;'; put 'put ''cmFzOlt7c2luY2U6IjAwMDEtMDEtMDEiLHVudGlsOjEvMCxvZmZzZXQ6MSxuYW1lOiJBbm5vIERvbWluaSIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoi''@;'; put 'put ''QkMifV0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oa2Upe3ZhciAkZT1rZSUxMDtyZXR1cm4ga2UrKDE9PT11dChrZSUxMDAvMTApPyJ0aCI6MT09PSRlPyJzdCI6Mj09PSRlPyJuZCI6Mz09PSRlPyJyZCI6InRoIil9fSks''@;'; put 'put ''eC5sYW5nPXVlKCJtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLiIsSG8pLHgubGFuZ0RhdGE9dWUoIm1vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4iLGx1KTt2YXIgajA9TWF0aC5h''@;'; put 'put ''YnM7ZnVuY3Rpb24gTjIoa2UsJGUsbXQsTHQpe3ZhciBHdD1NYSgkZSxtdCk7cmV0dXJuIGtlLl9taWxsaXNlY29uZHMrPUx0Kkd0Ll9taWxsaXNlY29uZHMsa2UuX2RheXMrPUx0Kkd0Ll9kYXlzLGtlLl9tb250aHMrPUx0Kkd0Ll9tb250aHMsa2UuX2J1YmJsZSgpfWZ1bmN0aW9uIER1KGtl''@;'; put 'put ''KXtyZXR1cm4ga2U8MD9NYXRoLmZsb29yKGtlKTpNYXRoLmNlaWwoa2UpfWZ1bmN0aW9uIGZsKGtlKXtyZXR1cm4gNDgwMCprZS8xNDYwOTd9ZnVuY3Rpb24gdjMoa2Upe3JldHVybiAxNDYwOTcqa2UvNDgwMH1mdW5jdGlvbiBJdShrZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YXMoa2UpfX12YXIgYjM9SXUoIm1zIiksdm09SXUoInMiKSxoOT1JdSgibSIpLEx1PUl1KCJoIiksejA9SXUoImQiKSxmOT1JdSgidyIpLHkzPUl1KCJNIikscDk9SXUoIlEiKSxnOT1JdSgieSIpO2Z1bmN0aW9uIFUwKGtlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlk''@;'; put 'put ''KCk/dGhpcy5fZGF0YVtrZV06TmFOfX12YXIgX209VTAoIm1pbGxpc2Vjb25kcyIpLG05PVUwKCJzZWNvbmRzIiksdmE9VTAoIm1pbnV0ZXMiKSxUND1VMCgiaG91cnMiKSx2OT1VMCgiZGF5cyIpLF85PVUwKCJtb250aHMiKSxGbD1VMCgieWVhcnMiKTt2YXIgWjA9TWF0aC5yb3VuZCxSdT17''@;'; put 'put ''c3M6NDQsczo0NSxtOjQ1LGg6MjIsZDoyNix3Om51bGwsTToxMX07ZnVuY3Rpb24gRDQoa2UsJGUsbXQsTHQsR3Qpe3JldHVybiBHdC5yZWxhdGl2ZVRpbWUoJGV8fDEsISFtdCxrZSxMdCl9dmFyIEk0PU1hdGguYWJzO2Z1bmN0aW9uIFkwKGtlKXtyZXR1cm4oa2U+MCktKGtlPDApfHwra2V9''@;'; put 'put ''ZnVuY3Rpb24gSGwoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIEx0LEd0LFVuLElyLGVzLHpzLG9jLGYwLGtlPUk0KHRoaXMuX21pbGxpc2Vjb25kcykvMWUzLCRlPUk0KHRoaXMuX2RheXMpLG10PUk0KHRoaXMuX21vbnRo''@;'; put 'put ''cykseW89dGhpcy5hc1NlY29uZHMoKTtyZXR1cm4geW8/KEx0PWl0KGtlLzYwKSxHdD1pdChMdC82MCksa2UlPTYwLEx0JT02MCxVbj1pdChtdC8xMiksbXQlPTEyLElyPWtlP2tlLnRvRml4ZWQoMykucmVwbGFjZSgvXC4/MCskLywiIik6IiIsZXM9eW88MD8iLSI6IiIsenM9WTAodGhpcy5f''@;'; put 'put ''bW9udGhzKSE9PVkwKHlvKT8iLSI6IiIsb2M9WTAodGhpcy5fZGF5cykhPT1ZMCh5byk/Ii0iOiIiLGYwPVkwKHRoaXMuX21pbGxpc2Vjb25kcykhPT1ZMCh5byk/Ii0iOiIiLGVzKyJQIisoVW4/enMrVW4rIlkiOiIiKSsobXQ/enMrbXQrIk0iOiIiKSsoJGU/b2MrJGUrIkQiOiIiKSsoR3R8''@;'; put 'put ''fEx0fHxrZT8iVCI6IiIpKyhHdD9mMCtHdCsiSCI6IiIpKyhMdD9mMCtMdCsiTSI6IiIpKyhrZT9mMCtJcisiUyI6IiIpKToiUDBEIn12YXIgYnM9QWQucHJvdG90eXBlO3JldHVybiBicy5pc1ZhbGlkPWZ1bmN0aW9uIHNtKCl7cmV0dXJuIHRoaXMuX2lzVmFsaWR9LGJzLmFicz1mdW5jdGlv''@;'; put 'put ''biBIZCgpe3ZhciBrZT10aGlzLl9kYXRhO3JldHVybiB0aGlzLl9taWxsaXNlY29uZHM9ajAodGhpcy5fbWlsbGlzZWNvbmRzKSx0aGlzLl9kYXlzPWowKHRoaXMuX2RheXMpLHRoaXMuX21vbnRocz1qMCh0aGlzLl9tb250aHMpLGtlLm1pbGxpc2Vjb25kcz1qMChrZS5taWxsaXNlY29uZHMp''@;'; put 'put ''LGtlLnNlY29uZHM9ajAoa2Uuc2Vjb25kcyksa2UubWludXRlcz1qMChrZS5taW51dGVzKSxrZS5ob3Vycz1qMChrZS5ob3Vycyksa2UubW9udGhzPWowKGtlLm1vbnRocyksa2UueWVhcnM9ajAoa2UueWVhcnMpLHRoaXN9LGJzLmFkZD1mdW5jdGlvbiBWMihrZSwkZSl7cmV0dXJuIE4yKHRo''@;'; put 'put ''aXMsa2UsJGUsMSl9LGJzLnN1YnRyYWN0PWZ1bmN0aW9uIG1tKGtlLCRlKXtyZXR1cm4gTjIodGhpcyxrZSwkZSwtMSl9LGJzLmFzPWZ1bmN0aW9uIEE0KGtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIE5hTjt2YXIgJGUsbXQsTHQ9dGhpcy5fbWlsbGlzZWNvbmRzO2lmKCJtb250aCI9''@;'; put 'put ''PT0oa2U9WGUoa2UpKXx8InF1YXJ0ZXIiPT09a2V8fCJ5ZWFyIj09PWtlKXN3aXRjaCgkZT10aGlzLl9kYXlzK0x0Lzg2NGU1LG10PXRoaXMuX21vbnRocytmbCgkZSksa2Upe2Nhc2UibW9udGgiOnJldHVybiBtdDtjYXNlInF1YXJ0ZXIiOnJldHVybiBtdC8zO2Nhc2UieWVhciI6cmV0dXJu''@;'; put 'put ''IG10LzEyfWVsc2Ugc3dpdGNoKCRlPXRoaXMuX2RheXMrTWF0aC5yb3VuZCh2Myh0aGlzLl9tb250aHMpKSxrZSl7Y2FzZSJ3ZWVrIjpyZXR1cm4gJGUvNytMdC82MDQ4ZTU7Y2FzZSJkYXkiOnJldHVybiAkZStMdC84NjRlNTtjYXNlImhvdXIiOnJldHVybiAyNCokZStMdC8zNmU1O2Nhc2Ui''@;'; put 'put ''bWludXRlIjpyZXR1cm4gMTQ0MCokZStMdC82ZTQ7Y2FzZSJzZWNvbmQiOnJldHVybiA4NjQwMCokZStMdC8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IoODY0ZTUqJGUpK0x0O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHVuaXQgIitrZSl9fSxicy5h''@;'; put 'put ''c01pbGxpc2Vjb25kcz1iMyxicy5hc1NlY29uZHM9dm0sYnMuYXNNaW51dGVzPWg5LGJzLmFzSG91cnM9THUsYnMuYXNEYXlzPXowLGJzLmFzV2Vla3M9ZjksYnMuYXNNb250aHM9eTMsYnMuYXNRdWFydGVycz1wOSxicy5hc1llYXJzPWc5LGJzLnZhbHVlT2Y9ZnVuY3Rpb24gXzMoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fbWlsbGlzZWNvbmRzKzg2NGU1KnRoaXMuX2RheXMrdGhpcy5fbW9udGhzJTEyKjI1OTJlNiszMTUzNmU2KnV0KHRoaXMuX21vbnRocy8xMik6TmFOfSxicy5fYnViYmxlPWZ1bmN0aW9uIG0zKCl7dmFyIEd0LFVuLElyLHlvLGVzLGtlPXRoaXMuX21p''@;'; put 'put ''bGxpc2Vjb25kcywkZT10aGlzLl9kYXlzLG10PXRoaXMuX21vbnRocyxMdD10aGlzLl9kYXRhO3JldHVybiBrZT49MCYmJGU+PTAmJm10Pj0wfHxrZTw9MCYmJGU8PTAmJm10PD0wfHwoa2UrPTg2NGU1KkR1KHYzKG10KSskZSksJGU9MCxtdD0wKSxMdC5taWxsaXNlY29uZHM9a2UlMWUzLEd0''@;'; put 'put ''PWl0KGtlLzFlMyksTHQuc2Vjb25kcz1HdCU2MCxVbj1pdChHdC82MCksTHQubWludXRlcz1VbiU2MCxJcj1pdChVbi82MCksTHQuaG91cnM9SXIlMjQsJGUrPWl0KElyLzI0KSxtdCs9ZXM9aXQoZmwoJGUpKSwkZS09RHUodjMoZXMpKSx5bz1pdChtdC8xMiksbXQlPTEyLEx0LmRheXM9JGUs''@;'; put 'put ''THQubW9udGhzPW10LEx0LnllYXJzPXlvLHRoaXN9LGJzLmNsb25lPWZ1bmN0aW9uIFJ3KCl7cmV0dXJuIE1hKHRoaXMpfSxicy5nZXQ9ZnVuY3Rpb24gS2goa2Upe3JldHVybiBrZT1YZShrZSksdGhpcy5pc1ZhbGlkKCk/dGhpc1trZSsicyJdKCk6TmFOfSxicy5taWxsaXNlY29uZHM9X20s''@;'; put 'put ''YnMuc2Vjb25kcz1tOSxicy5taW51dGVzPXZhLGJzLmhvdXJzPVQ0LGJzLmRheXM9djksYnMud2Vla3M9ZnVuY3Rpb24gYm0oKXtyZXR1cm4gaXQodGhpcy5kYXlzKCkvNyl9LGJzLm1vbnRocz1fOSxicy55ZWFycz1GbCxicy5odW1hbml6ZT1mdW5jdGlvbiBfYShrZSwkZSl7aWYoIXRoaXMu''@;'; put 'put ''aXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBHdCxVbixtdD0hMSxMdD1SdTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGtlJiYoJGU9a2Usa2U9ITEpLCJib29sZWFuIj09dHlwZW9mIGtlJiYobXQ9a2UpLCJvYmplY3QiPT10eXBlb2YgJGUmJihM''@;'; put 'put ''dD1PYmplY3QuYXNzaWduKHt9LFJ1LCRlKSxudWxsIT0kZS5zJiZudWxsPT0kZS5zcyYmKEx0LnNzPSRlLnMtMSkpLFVuPWZ1bmN0aW9uIGgwKGtlLCRlLG10LEx0KXt2YXIgR3Q9TWEoa2UpLmFicygpLFVuPVowKEd0LmFzKCJzIikpLElyPVowKEd0LmFzKCJtIikpLHlvPVowKEd0LmFzKCJo''@;'; put 'put ''IikpLGVzPVowKEd0LmFzKCJkIikpLHpzPVowKEd0LmFzKCJNIikpLG9jPVowKEd0LmFzKCJ3IikpLGYwPVowKEd0LmFzKCJ5IikpLFcwPVVuPD1tdC5zcyYmWyJzIixVbl18fFVuPG10LnMmJlsic3MiLFVuXXx8SXI8PTEmJlsibSJdfHxJcjxtdC5tJiZbIm1tIixJcl18fHlvPD0xJiZbImgi''@;'; put 'put ''XXx8eW88bXQuaCYmWyJoaCIseW9dfHxlczw9MSYmWyJkIl18fGVzPG10LmQmJlsiZGQiLGVzXTtyZXR1cm4gbnVsbCE9bXQudyYmKFcwPVcwfHxvYzw9MSYmWyJ3Il18fG9jPG10LncmJlsid3ciLG9jXSksKFcwPVcwfHx6czw9MSYmWyJNIl18fHpzPG10Lk0mJlsiTU0iLHpzXXx8ZjA8PTEm''@;'; put 'put ''JlsieSJdfHxbInl5IixmMF0pWzJdPSRlLFcwWzNdPStrZT4wLFcwWzRdPUx0LEQ0LmFwcGx5KG51bGwsVzApfSh0aGlzLCFtdCxMdCxHdD10aGlzLmxvY2FsZURhdGEoKSksbXQmJihVbj1HdC5wYXN0RnV0dXJlKCt0aGlzLFVuKSksR3QucG9zdGZvcm1hdChVbil9LGJzLnRvSVNPU3RyaW5n''@;'; put 'put ''PUhsLGJzLnRvU3RyaW5nPUhsLGJzLnRvSlNPTj1IbCxicy5sb2NhbGU9SGksYnMubG9jYWxlRGF0YT1Ebyxicy50b0lzb1N0cmluZz11ZSgidG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyki''@;'; put 'put ''LEhsKSxicy5sYW5nPUJpLGRlKCJYIiwwLDAsInVuaXgiKSxkZSgieCIsMCwwLCJ2YWx1ZU9mIikscHQoIngiLE50KSxwdCgiWCIsL1srLV0/XGQrKFwuXGR7MSwzfSk/LykseG4oIlgiLGZ1bmN0aW9uKGtlLCRlLG10KXttdC5fZD1uZXcgRGF0ZSgxZTMqcGFyc2VGbG9hdChrZSkpfSkseG4o''@;'; put 'put ''IngiLGZ1bmN0aW9uKGtlLCRlLG10KXttdC5fZD1uZXcgRGF0ZSh1dChrZSkpfSkseC52ZXJzaW9uPSIyLjI5LjQiLGZ1bmN0aW9uIG0oa2Upe2FlPWtlfShjYSkseC5mbj13aSx4Lm1pbj1mdW5jdGlvbiB1dSgpe3JldHVybiBhcigiaXNCZWZvcmUiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRz''@;'; put 'put ''LDApKX0seC5tYXg9ZnVuY3Rpb24gRmkoKXtyZXR1cm4gYXIoImlzQWZ0ZXIiLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKX0seC5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3c/RGF0ZS5ub3coKTorbmV3IERhdGV9LHgudXRjPWoseC51bml4PWZ1bmN0aW9uIFBkKGtlKXtyZXR1''@;'; put 'put ''cm4gY2EoMWUzKmtlKX0seC5tb250aHM9ZnVuY3Rpb24gSDEoa2UsJGUpe3JldHVybiBobChrZSwkZSwibW9udGhzIil9LHguaXNEYXRlPUkseC5sb2NhbGU9SG8seC5pbnZhbGlkPVUseC5kdXJhdGlvbj1NYSx4LmlzTW9tZW50PXNlLHgud2Vla2RheXM9ZnVuY3Rpb24gZDkoa2UsJGUsbXQp''@;'; put 'put ''e3JldHVybiBmdShrZSwkZSxtdCwid2Vla2RheXMiKX0seC5wYXJzZVpvbmU9ZnVuY3Rpb24gTHcoKXtyZXR1cm4gY2EuYXBwbHkobnVsbCxhcmd1bWVudHMpLnBhcnNlWm9uZSgpfSx4LmxvY2FsZURhdGE9bHUseC5pc0R1cmF0aW9uPWR1LHgubW9udGhzU2hvcnQ9ZnVuY3Rpb24gcG0oa2Us''@;'; put 'put ''JGUpe3JldHVybiBobChrZSwkZSwibW9udGhzU2hvcnQiKX0seC53ZWVrZGF5c01pbj1mdW5jdGlvbiBnbShrZSwkZSxtdCl7cmV0dXJuIGZ1KGtlLCRlLG10LCJ3ZWVrZGF5c01pbiIpfSx4LmRlZmluZUxvY2FsZT15Yyx4LnVwZGF0ZUxvY2FsZT1mdW5jdGlvbiB1aShrZSwkZSl7aWYobnVs''@;'; put 'put ''bCE9JGUpe3ZhciBtdCxMdCxHdD1IYTtudWxsIT0kb1trZV0mJm51bGwhPSRvW2tlXS5wYXJlbnRMb2NhbGU/JG9ba2VdLnNldChIKCRvW2tlXS5fY29uZmlnLCRlKSk6KG51bGwhPShMdD1mcihrZSkpJiYoR3Q9THQuX2NvbmZpZyksJGU9SChHdCwkZSksbnVsbD09THQmJigkZS5hYmJyPWtl''@;'; put 'put ''KSwobXQ9bmV3IE4oJGUpKS5wYXJlbnRMb2NhbGU9JG9ba2VdLCRvW2tlXT1tdCksSG8oa2UpfWVsc2UgbnVsbCE9JG9ba2VdJiYobnVsbCE9JG9ba2VdLnBhcmVudExvY2FsZT8oJG9ba2VdPSRvW2tlXS5wYXJlbnRMb2NhbGUsa2U9PT1IbygpJiZIbyhrZSkpOm51bGwhPSRvW2tlXSYmZGVs''@;'; put 'put ''ZXRlICRvW2tlXSk7cmV0dXJuICRvW2tlXX0seC5sb2NhbGVzPWZ1bmN0aW9uIGhyKCl7cmV0dXJuIGcoJG8pfSx4LndlZWtkYXlzU2hvcnQ9ZnVuY3Rpb24gRmQoa2UsJGUsbXQpe3JldHVybiBmdShrZSwkZSxtdCwid2Vla2RheXNTaG9ydCIpfSx4Lm5vcm1hbGl6ZVVuaXRzPVhlLHgucmVs''@;'; put 'put ''YXRpdmVUaW1lUm91bmRpbmc9ZnVuY3Rpb24geW0oa2Upe3JldHVybiB2b2lkIDA9PT1rZT9aMDoiZnVuY3Rpb24iPT10eXBlb2Yga2UmJihaMD1rZSwhMCl9LHgucmVsYXRpdmVUaW1lVGhyZXNob2xkPWZ1bmN0aW9uIHdtKGtlLCRlKXtyZXR1cm4gdm9pZCAwIT09UnVba2VdJiYodm9pZCAw''@;'; put 'put ''PT09JGU/UnVba2VdOihSdVtrZV09JGUsInMiPT09a2UmJihSdS5zcz0kZS0xKSwhMCkpfSx4LmNhbGVuZGFyRm9ybWF0PWZ1bmN0aW9uIHdyKGtlLCRlKXt2YXIgbXQ9a2UuZGlmZigkZSwiZGF5cyIsITApO3JldHVybiBtdDwtNj8ic2FtZUVsc2UiOm10PC0xPyJsYXN0V2VlayI6bXQ8MD8i''@;'; put 'put ''bGFzdERheSI6bXQ8MT8ic2FtZURheSI6bXQ8Mj8ibmV4dERheSI6bXQ8Nz8ibmV4dFdlZWsiOiJzYW1lRWxzZSJ9LHgucHJvdG90eXBlPXdpLHguSFRNTDVfRk1UPXtEQVRFVElNRV9MT0NBTDoiWVlZWS1NTS1ERFRISDptbSIsREFURVRJTUVfTE9DQUxfU0VDT05EUzoiWVlZWS1NTS1ERFRI''@;'; put 'put ''SDptbTpzcyIsREFURVRJTUVfTE9DQUxfTVM6IllZWVktTU0tRERUSEg6bW06c3MuU1NTIixEQVRFOiJZWVlZLU1NLUREIixUSU1FOiJISDptbSIsVElNRV9TRUNPTkRTOiJISDptbTpzcyIsVElNRV9NUzoiSEg6bW06c3MuU1NTIixXRUVLOiJHR0dHLVtXXVdXIixNT05USDoiWVlZWS1NTSJ9''@;'; put 'put ''LHh9KCl9LDQ0MzE2OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbiBJZShGLGFlLHgpe2Z1bmN0aW9uIG0oTyxSKXtpZighYWVbT10pe2lmKCFGW09dKXtpZihsZSlyZXR1cm4gbGUoTywhMCk7dmFyIEs9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrTysiJyIpO3Rocm93IEsuY29k''@;'; put 'put ''ZT0iTU9EVUxFX05PVF9GT1VORCIsS312YXIgST1hZVtPXT17ZXhwb3J0czp7fX07RltPXVswXS5jYWxsKEkuZXhwb3J0cyxmdW5jdGlvbihrKXtyZXR1cm4gbShGW09dWzFdW2tdfHxrKX0sSSxJLmV4cG9ydHMsSWUsRixhZSx4KX1yZXR1cm4gYWVbT10uZXhwb3J0c31mb3IodmFyIGxlPXZv''@;'; put 'put ''aWQgMCxNPTA7TTx4Lmxlbmd0aDtNKyspbSh4W01dKTtyZXR1cm4gbX0oezE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wu''@;'; put 'put ''aXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9u''@;'; put 'put ''KGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJy''@;'; put 'put ''bz17fSkpLmJnPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7''@;'; put 'put ''dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxC''@;'; put 'put ''LEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiYmciLGRl''@;'; put 'put ''bGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0MTgiLG1pbGxpb246Ilx1MDQxMCIsYmlsbGlvbjoiTSIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0''@;'; put 'put ''M2JcdTA0MzIuIixjb2RlOiJCR04ifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9u''@;'; put 'put ''KHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0''@;'; put 'put ''cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuY3NDWj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lm''@;'; put 'put ''KCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1Rf''@;'; put 'put ''Rk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlz''@;'; put 'put ''LiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lG''@;'; put 'put ''b3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6''@;'; put 'put ''ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iixz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM6''@;'; put 'put ''W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQi''@;'; put 'put ''Om0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmRhREs9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''bGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyIn''@;'; put 'put ''Iik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZv''@;'; put 'put ''cih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJkYS1ESyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6''@;'; put 'put ''e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJl''@;'; put 'put ''bmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ6W2Z1bmN0''@;'; put 'put ''aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUp''@;'; put 'put ''KSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmRlQVQ9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxP''@;'; put 'put ''LFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhy''@;'; put 'put ''b3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIg''@;'; put 'put ''Sz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJkZS1BVCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0''@;'; put 'put ''aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBn''@;'; put 'put ''bG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3lt''@;'; put 'put ''Ym9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZGVDSD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1''@;'; put 'put ''cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlv''@;'; put 'put ''bihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8p''@;'; put 'put ''e00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiciLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4i''@;'; put 'put ''fSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJDSEYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExl''@;'; put 'put ''bmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNz''@;'; put 'put ''YToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUi''@;'; put 'put ''P2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3lt''@;'; put 'put ''Ym9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBl''@;'; put 'put ''b2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRo''@;'; put 'put ''aXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZGVERT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEw''@;'; put 'put ''KTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1''@;'; put 'put ''cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0''@;'; put 'put ''cz17bGFuZ3VhZ2VUYWc6ImRlLURFIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dG90YWxMZW5ndGg6NCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNl''@;'; put 'put ''bGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1i''@;'; put 'put ''b2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0''@;'; put 'put ''aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51''@;'; put 'put ''bWJybz17fSkpLmRlTEk9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhr''@;'; put 'put ''LCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8''@;'; put 'put ''WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJk''@;'; put 'put ''ZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixw''@;'; put 'put ''b3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxh''@;'; put 'put ''dmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDg6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0''@;'; put 'put ''b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2''@;'; put 'put ''YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkp''@;'; put 'put ''LmVsPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9''@;'; put 'put ''bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhw''@;'; put 'put ''b3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0cmlsbGlvbjoiXHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoi''@;'; put 'put ''XHUyMGFjIixjb2RlOiJFVVIifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sOTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1s''@;'; put 'put ''ZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZW5BVT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFP''@;'; put 'put ''W2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9V''@;'; put 'put ''TkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYm''@;'; put 'put ''SWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVuLUFVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlv''@;'; put 'put ''bjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PX5+KFIlMTAwLzEwKT8idGgiOjE9PT16PyJzdCI6Mj09PXo/Im5kIjozPT09ej8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVm''@;'; put 'put ''aXgiLGNvZGU6IkFVRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVs''@;'; put 'put ''bFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxMDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9u''@;'; put 'put ''KHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0''@;'; put 'put ''cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZW5HQj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lm''@;'; put 'put ''KCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1Rf''@;'; put 'put ''Rk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVuLUdCIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWls''@;'; put 'put ''bGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PX5+KFIlMTAwLzEwKT8idGgiOjE9PT16PyJzdCI6Mj09PXo/Im5kIjozPT09ej8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTMiLHBvc2l0aW9u''@;'; put 'put ''OiJwcmVmaXgiLGNvZGU6IkdCUCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZToh''@;'; put 'put ''MH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''Tm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxMTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJv''@;'; put 'put ''YmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZW5JRT1s''@;'; put 'put ''ZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBF''@;'; put 'put ''cnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMs''@;'; put 'put ''bGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVuLUlFIixkZWxpbWl0ZXJz''@;'; put 'put ''Ont0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PX5+KFIlMTAwLzEwKT8idGgiOjE9PT16PyJzdCI6''@;'; put 'put ''Mj09PXo/Im5kIjozPT09ej8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2lu''@;'; put 'put ''ZG93Ont9KX0se31dLDEyOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0''@;'; put 'put ''eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9''@;'; put 'put ''PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lbk5aPWxlKCl9KGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmlu''@;'; put 'put ''ZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJu''@;'; put 'put ''IE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tTloiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIs''@;'; put 'put ''ZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09fn4oUiUxMDAvMTApPyJ0aCI6MT09PXo/InN0IjoyPT09ej8ibmQiOjM9PT16''@;'; put 'put ''PyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiTlpEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7''@;'; put 'put ''dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVs''@;'; put 'put ''bFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/''@;'; put 'put ''d2luZG93Ont9KX0se31dLDEzOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lk''@;'; put 'put ''IDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lblpBPWxlKCl9KGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3Qg''@;'; put 'put ''ZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0''@;'; put 'put ''dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tWkEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi''@;'; put 'put ''ICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09fn4oUiUxMDAvMTApPyJ0aCI6MT09PXo/InN0IjoyPT09ej8ibmQiOjM9''@;'; put 'put ''PT16PyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiUiIscG9zaXRpb246InByZWZpeCIsY29kZToiWkFSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0''@;'; put 'put ''czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSI/d2luZG93Ont9KX0se31dLDE0OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3Jl''@;'; put 'put ''dHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2''@;'; put 'put ''b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc0FSPWxlKCl9KGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5u''@;'; put 'put ''b3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9''@;'; put 'put ''cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtQVIiLGRlbGltaXRlcnM6e3Rob3VzYW5k''@;'; put 'put ''czoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16''@;'; put 'put ''PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJBUlMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0p''@;'; put 'put ''fSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMTU6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9''@;'; put 'put ''PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQg''@;'; put 'put ''MCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVzQ0w9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0u''@;'; put 'put ''Y2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6''@;'; put 'put ''fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlcy1DTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGlu''@;'; put 'put ''YWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQ0xQIn0sY3VycmVu''@;'; put 'put ''Y3lGb3JtYXQ6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIs''@;'; put 'put ''c3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3Vz''@;'; put 'put ''YW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMTY6W2Z1bmN0aW9uKEllLEYsYWUpeyhm''@;'; put 'put ''dW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9G''@;'; put 'put ''LmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmVzQ089bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHoo''@;'; put 'put ''ayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RV''@;'; put 'put ''TEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJlcy1DTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6''@;'; put 'put ''e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxz''@;'; put 'put ''cGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6''@;'; put 'put ''dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDE3OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSko''@;'; put 'put ''bGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVt''@;'; put 'put ''YnJvfHwoTS5udW1icm89e30pKS5lc0NSPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEsp''@;'; put 'put ''cmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1b''@;'; put 'put ''a11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5n''@;'; put 'put ''dWFnZVRhZzoiZXMtQ1IiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16''@;'; put 'put ''fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhMSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNSQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwxODpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9u''@;'; put 'put ''KHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0''@;'; put 'put ''cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXNFUz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lm''@;'; put 'put ''KCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1Rf''@;'; put 'put ''Rk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVzLUVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWls''@;'; put 'put ''bGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVyIjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8iOjg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9s''@;'; put 'put ''OiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2Vw''@;'; put 'put ''YXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2Vw''@;'; put 'put ''YXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Yg''@;'; put 'put ''c2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMTk6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBT''@;'; put 'put ''eW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1''@;'; put 'put ''bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChN''@;'; put 'put ''Lm51bWJybz17fSkpLmVzTVg9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4g''@;'; put 'put ''SyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZ''@;'; put 'put ''XXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFn''@;'; put 'put ''OiJlcy1NWCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7dmFyIHo9UiUxMDtyZXR1cm4gMT09PXp8fDM9PT16''@;'; put 'put ''PyJlciI6Mj09PXo/ImRvIjo3PT09enx8MD09PXo/Im1vIjo4PT09ej8idm8iOjk9PT16PyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik1YTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0''@;'; put 'put ''LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFu''@;'; put 'put ''dGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyMDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXNOST1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZigh''@;'; put 'put ''TVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFy''@;'; put 'put ''IEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8''@;'; put 'put ''Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJp''@;'; put 'put ''bGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVyIjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8iOjg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiJDJCIscG9zaXRp''@;'; put 'put ''b246InByZWZpeCIsY29kZToiTklPIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdp''@;'; put 'put ''dGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlw''@;'; put 'put ''ZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDIxOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1''@;'; put 'put ''bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07''@;'; put 'put ''Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc1BF''@;'; put 'put ''PWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3''@;'; put 'put ''IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0''@;'; put 'put ''cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRl''@;'; put 'put ''cnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6''@;'; put 'put ''Nz09PXp8fDA9PT16PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IlMvLiIscG9zaXRpb246InByZWZpeCIsY29kZToiUEVOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19''@;'; put 'put ''LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDIyOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0o''@;'; put 'put ''bGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9''@;'; put 'put ''PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUi''@;'; put 'put ''P3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5lc1BSPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRz''@;'; put 'put ''Ont9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihS''@;'; put 'put ''W0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxp''@;'; put 'put ''b246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3ZhciB6PVIlMTA7cmV0dXJuIDE9PT16fHwzPT09ej8iZXIiOjI9PT16PyJkbyI6Nz09PXp8fDA9PT16PyJtbyI6OD09PXo/InZvIjo5PT09ej8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6''@;'; put 'put ''IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0''@;'; put 'put ''cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dp''@;'; put 'put ''bmRvdzp7fSl9LHt9XSwyMzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAw''@;'; put 'put ''PT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZXNTVj1sZSgpfShmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZp''@;'; put 'put ''bmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVy''@;'; put 'put ''biBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Iiwi''@;'; put 'put ''LGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT09enx8Mz09PXo/ImVyIjoyPT09ej8iZG8iOjc9PT16fHwwPT09ej8ibW8i''@;'; put 'put ''Ojg9PT16PyJ2byI6OT09PXo/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJTVkMifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3Jt''@;'; put 'put ''YXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVj''@;'; put 'put ''aW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2Fs''@;'; put 'put ''bCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjQ6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJv''@;'; put 'put ''bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/''@;'; put 'put ''eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmV0RUU9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYm''@;'; put 'put ''SWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChC''@;'; put 'put ''LmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpb''@;'; put 'put ''ZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxm''@;'; put 'put ''b3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdv''@;'; put 'put ''RGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSku''@;'; put 'put ''Y2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjU6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5''@;'; put 'put ''bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9''@;'; put 'put ''PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmZhSVI9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJ''@;'; put 'put ''ZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2Fs''@;'; put 'put ''bChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7''@;'; put 'put ''MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJmYS1JUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJcdTA2MGMiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNjQ3XHUwNjMyXHUwNjI3XHUwNjMxIixtaWxsaW9uOiJcdTA2NDVcdTA2''@;'; put 'put ''Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYiLGJpbGxpb246Ilx1MDY0NVx1MDZjY1x1MDY0NFx1MDZjY1x1MDYyN1x1MDYzMVx1MDYyZiIsdHJpbGxpb246Ilx1MDYyYVx1MDYzMVx1MDZjY1x1MDY0NFx1MDZjY1x1MDY0OFx1MDY0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHUw''@;'; put 'put ''NjI3XHUwNjQ1In0sY3VycmVuY3k6e3N5bWJvbDoiXHVmZGZjIixjb2RlOiJJUlIifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMjY6''@;'; put 'put ''W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlv''@;'; put 'put ''bihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQi''@;'; put 'put ''Om0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmZpRkk9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''bGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyIn''@;'; put 'put ''Iik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZv''@;'; put 'put ''cih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJmaS1GSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJi''@;'; put 'put ''cmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6''@;'; put 'put ''e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJl''@;'; put 'put ''bmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDI3OltmdW5j''@;'; put 'put ''dGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7''@;'; put 'put ''cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFl''@;'; put 'put ''KSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5maWxQSD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShN''@;'; put 'put ''LE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0''@;'; put 'put ''aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZh''@;'; put 'put ''ciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2''@;'; put 'put ''aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwO3JldHVybiAxPT1+fihSJTEwMC8xMCk/InRoIjoxPT09ej8ic3QiOjI9PT16PyJuZCI6Mz09PXo/InJkIjoidGgifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJcdTIwYjEiLGNvZGU6IlBIUCJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwyODpbZnVuY3Rpb24oSWUsRixhZSl7''@;'; put 'put ''KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1G''@;'; put 'put ''P0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZnJDQT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24g''@;'; put 'put ''eihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1P''@;'; put 'put ''RFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImZyLUNBIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2Fu''@;'; put 'put ''ZDoiayIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiRyIsdHJpbGxpb246IlQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3JldHVybiAxPT09Uj8iZXIiOiJceGU4bWUifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVVNEIn0sY3Vy''@;'; put 'put ''cmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTow''@;'; put 'put ''fX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDI5OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1''@;'; put 'put ''bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29u''@;'; put 'put ''c3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5mckNIPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2''@;'; put 'put ''YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2td''@;'; put 'put ''PXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0''@;'; put 'put ''aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJi''@;'; put 'put ''Iix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oUil7cmV0dXJuIDE9PT1SPyJlciI6Ilx4ZThtZSJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0''@;'; put 'put ''aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''bWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzMDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigo''@;'; put 'put ''TT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuZnJGUj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtp''@;'; put 'put ''ZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9''@;'; put 'put ''dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0w''@;'; put 'put ''O0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImZyLUZSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIs''@;'; put 'put ''YmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKFIpe3JldHVybiAxPT09Uj8iZXIiOiJceGU4bWUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5j''@;'; put 'put ''dGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4''@;'; put 'put ''cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmhlSUw9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxF''@;'; put 'put ''KXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVf''@;'; put 'put ''Tk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJoZS1JTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1''@;'; put 'put ''MDVkMFx1MDVkY1x1MDVlMyIsbWlsbGlvbjoiXHUwNWRlXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWRmIixiaWxsaW9uOiJcdTA1ZDFcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLHRyaWxsaW9uOiJcdTA1ZDhcdTA1ZThcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYifSxjdXJyZW5jeTp7''@;'; put 'put ''c3ltYm9sOiJcdTIwYWEiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IklMUyJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7''@;'; put 'put ''Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''Tm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhp''@;'; put 'put ''cyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDMyOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJv''@;'; put 'put ''dG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlw''@;'; put 'put ''ZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5odUhVPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lm''@;'; put 'put ''KCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBv''@;'; put 'put ''cnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0''@;'; put 'put ''aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiaHUtSFUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJFIixtaWxsaW9uOiJNIixiaWxsaW9uOiJNcmQiLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiRnQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJIVUYifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGln''@;'; put 'put ''aXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJl''@;'; put 'put ''bmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVv''@;'; put 'put ''ZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzM6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/''@;'; put 'put ''InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2Vs''@;'; put 'put ''ZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLmlkPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJl''@;'; put 'put ''dHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0''@;'; put 'put ''aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0s''@;'; put 'put ''Tyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiaWQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJyIixtaWxsaW9uOiJqIixiaWxsaW9uOiJtIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9''@;'; put 'put ''LGN1cnJlbmN5OntzeW1ib2w6IlJwIixjb2RlOiJJRFIifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sMzQ6W2Z1bmN0aW9uKEllLEYs''@;'; put 'put ''YWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYm''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAw''@;'; put 'put ''IT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLml0Q0g9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0''@;'; put 'put ''aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2Rl''@;'; put 'put ''PSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhv''@;'; put 'put ''dXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YjAifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2Jh''@;'; put 'put ''bDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzNTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9s''@;'; put 'put ''Ijp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9z''@;'; put 'put ''ZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuaXRJVD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4g''@;'; put 'put ''aihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZ''@;'; put 'put ''KXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00u''@;'; put 'put ''ZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Iml0LUlUIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsYSIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''XHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6''@;'; put 'put ''e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6''@;'; put 'put ''e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGds''@;'; put 'put ''b2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzNjpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3lt''@;'; put 'put ''Ym9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3lt''@;'; put 'put ''Ym9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuamFKUD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1''@;'; put 'put ''cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlv''@;'; put 'put ''bihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8p''@;'; put 'put ''e00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0''@;'; put 'put ''NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkpQWSJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6''@;'; put 'put ''ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1''@;'; put 'put ''Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSwzNzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5p''@;'; put 'put ''dGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24o''@;'; put 'put ''bGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJv''@;'; put 'put ''PXt9KSkua29LUj1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITAp''@;'; put 'put ''O3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0s''@;'; put 'put ''QixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6ImtvLUtS''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHVjYzljIixtaWxsaW9uOiJcdWJjMzFcdWI5Y2MiLGJpbGxpb246Ilx1YzJlZFx1YzViNSIsdHJpbGxpb246Ilx1Yzc3Y1x1Yzg3MCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhOSIsY29kZToiS1BXIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDM4Oltm''@;'; put 'put ''dW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24o''@;'; put 'put ''TSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjpt''@;'; put 'put ''KGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5sdkxWPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxl''@;'; put 'put ''KE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIp''@;'; put 'put ''O3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3Io''@;'; put 'put ''dmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJl''@;'; put 'put ''dmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIsbWlsbGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6''@;'; put 'put ''IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0''@;'; put 'put ''cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dp''@;'; put 'put ''bmRvdzp7fSl9LHt9XSwzOTpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4g''@;'; put 'put ''dHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAw''@;'; put 'put ''PT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkubmJOTz1sZSgpfShmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZp''@;'; put 'put ''bmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVy''@;'; put 'put ''biBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6Im5iLU5PIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAi''@;'; put 'put ''LGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidCIsbWlsbGlvbjoiTSIsYmlsbGlvbjoibWQiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIifSxjdXJyZW5jeTp7c3ltYm9sOiJrciIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik5PSyJ9LGN1''@;'; put 'put ''cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7''@;'; put 'put ''b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJy''@;'; put 'put ''ZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9''@;'; put 'put ''LHt9XSw0MDpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19''@;'; put 'put ''OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVu''@;'; put 'put ''ZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkubmI9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAn''@;'; put 'put ''IitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBv''@;'; put 'put ''cnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJuYiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0s''@;'; put 'put ''YWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlz''@;'; put 'put ''LHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90''@;'; put 'put ''b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBl''@;'; put 'put ''b2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLm5sQkU9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYo''@;'; put 'put ''IUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9y''@;'; put 'put ''dHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rp''@;'; put 'put ''b24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJubC1CRSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5j''@;'; put 'put ''dGlvbihSKXt2YXIgej1SJTEwMDtyZXR1cm4gMCE9PVImJno8PTF8fDg9PT16fHwyMDw9ej8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxM''@;'; put 'put ''ZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVk''@;'; put 'put ''OiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDI6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsi''@;'; put 'put ''dXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUo''@;'; put 'put ''KTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLm5sTkw9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1tr''@;'; put 'put ''XSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5E''@;'; put 'put ''IixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkll''@;'; put 'put ''LEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJubC1OTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246''@;'; put 'put ''Im1sbiIsYmlsbGlvbjoibXJkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbihSKXt2YXIgej1SJTEwMDtyZXR1cm4gMCE9PVImJno8PTF8fDg9PT16fHwyMDw9ej8ic3RlIjoiZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVV''@;'; put 'put ''UiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNp''@;'; put 'put ''bWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0''@;'; put 'put ''OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRv''@;'; put 'put ''dzp7fSl9LHt9XSw0MzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlw''@;'; put 'put ''ZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09''@;'; put 'put ''YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkubm49bGUoKX0oZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1v''@;'; put 'put ''ZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1tr''@;'; put 'put ''XS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJubiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFs''@;'; put 'put ''OiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixjb2RlOiJOT0sifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2Fs''@;'; put 'put ''bCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDQ6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJv''@;'; put 'put ''bC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/''@;'; put 'put ''eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnBsUEw9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYm''@;'; put 'put ''SWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChC''@;'; put 'put ''LmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpb''@;'; put 'put ''ZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJwbC1QTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3Jk''@;'; put 'put ''aW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIHpcdTAxNDIiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJQTE4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEw''@;'; put 'put ''fSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRo''@;'; put 'put ''VHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0p''@;'; put 'put ''fSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDU6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9''@;'; put 'put ''PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQg''@;'; put 'put ''MCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnB0QlI9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0u''@;'; put 'put ''Y2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6''@;'; put 'put ''fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJwdC1CUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbCIsbWlsbGlvbjoibWlsaFx4ZjVlcyIsYmlsbGlvbjoiYiIsdHJpbGxpb246''@;'; put 'put ''InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJSJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQlJMIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFn''@;'; put 'put ''ZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSko''@;'; put 'put ''MSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDQ2OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVy''@;'; put 'put ''bihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wm''@;'; put 'put ''Jk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2''@;'; put 'put ''b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5wdFBUPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2td''@;'; put 'put ''WzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1''@;'; put 'put ''cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoicHQtUFQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6''@;'; put 'put ''ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdp''@;'; put 'put ''dGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dfSx7fSxbMV0pKDEp''@;'; put 'put ''fSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0NzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4o''@;'; put 'put ''bT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZN''@;'; put 'put ''IT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9p''@;'; put 'put ''ZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucm9STz1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVsw''@;'; put 'put ''XS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJu''@;'; put 'put ''IHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJs''@;'; put 'put ''biJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxX''@;'; put 'put ''aXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgx''@;'; put 'put ''KX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNDg6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJu''@;'; put 'put ''KG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYm''@;'; put 'put ''TSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZv''@;'; put 'put ''aWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnJvPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBd''@;'; put 'put ''LmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4g''@;'; put 'put ''en0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxu''@;'; put 'put ''In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6''@;'; put 'put ''ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdp''@;'; put 'put ''dGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fX0se31dLDI6W2Z1bmN0aW9u''@;'; put 'put ''KGxlLE0sTyl7TS5leHBvcnRzPWxlKCIuL3JvLVJPIil9LHsiLi9yby1STyI6MX1dfSx7fSxbMl0pKDIpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7fSl9LHt9XSw0OTpbZnVuY3Rp''@;'; put 'put ''b24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9mIE19OmZ1bmN0aW9uKE0pe3Jl''@;'; put 'put ''dHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/InVuZGVmaW5lZCI6bShhZSkp''@;'; put 'put ''JiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkucnVSVT1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8s''@;'; put 'put ''Uil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJv''@;'; put 'put ''dyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxsKEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBL''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsxOltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InJ1LVJVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRp''@;'; put 'put ''b25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQ0MFx1MDQ0M1x1MDQzMS4iLHBvc2l0''@;'; put 'put ''aW9uOiJwb3N0Zml4Iixjb2RlOiJSVUIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxs''@;'; put 'put ''V2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0''@;'; put 'put ''eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTA6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIg''@;'; put 'put ''TTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnJ1''@;'; put 'put ''VUE9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1u''@;'; put 'put ''ZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBv''@;'; put 'put ''cnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJydS1VQSIsZGVsaW1p''@;'; put 'put ''dGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxj''@;'; put 'put ''dXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExl''@;'; put 'put ''bmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNz''@;'; put 'put ''YToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUi''@;'; put 'put ''P2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlw''@;'; put 'put ''ZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0''@;'; put 'put ''aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnNrU0s9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywh''@;'; put 'put ''MCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0''@;'; put 'put ''dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9y''@;'; put 'put ''dHM9e2xhbmd1YWdlVGFnOiJzay1TSyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiJceGEwIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InRpcy4iLG1pbGxpb246Im1pbC4iLGJpbGxpb246Im1sZC4iLHRyaWxsaW9uOiJiaWwuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiIuIn0sc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''Zm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0p''@;'; put 'put ''LmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDUyOltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1T''@;'; put 'put ''eW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAh''@;'; put 'put ''PT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5zbD1sZSgpfShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBsZShNLE8sUil7ZnVuY3Rpb24geihrLEUpe2lmKCFPW2tdKXtpZighTVtrXSl7dmFyIGo9ImZ1bmN0aW9uIj09dHlwZW9mIEll''@;'; put 'put ''JiZJZTtpZighRSYmailyZXR1cm4gaihrLCEwKTtpZihLKXJldHVybiBLKGssITApO3ZhciBWPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK2srIiciKTt0aHJvdyBWLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLFZ9dmFyIEI9T1trXT17ZXhwb3J0czp7fX07TVtrXVswXS5jYWxs''@;'; put 'put ''KEIuZXhwb3J0cyxmdW5jdGlvbihZKXtyZXR1cm4geihNW2tdWzFdW1ldfHxZKX0sQixCLmV4cG9ydHMsbGUsTSxPLFIpfXJldHVybiBPW2tdLmV4cG9ydHN9Zm9yKHZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUsST0wO0k8Ui5sZW5ndGg7SSsrKXooUltJXSk7cmV0dXJuIHp9KHsx''@;'; put 'put ''OltmdW5jdGlvbihsZSxNLE8pe00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InNsIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLGNvZGU6IkVVUiJ9fX0se31dfSx7fSxbMV0pKDEpfSl9KS5jYWxsKHRoaXMsdHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp7''@;'; put 'put ''fSl9LHt9XSw1MzpbZnVuY3Rpb24oSWUsRixhZSl7KGZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKGxlKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihNKXtyZXR1cm4gdHlwZW9m''@;'; put 'put ''IE19OmZ1bmN0aW9uKE0pe3JldHVybiBNJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZNLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZNIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgTX0pKGxlKX0hZnVuY3Rpb24obGUpe3ZhciBNOyJvYmplY3QiPT0odm9pZCAwPT09YWU/''@;'; put 'put ''InVuZGVmaW5lZCI6bShhZSkpJiZ2b2lkIDAhPT1GP0YuZXhwb3J0cz1sZSgpOigoTT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09eD94OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnRoaXMpLm51bWJyb3x8KE0ubnVtYnJvPXt9KSkuc3JDeXJsUlM9bGUoKX0oZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5k''@;'; put 'put ''IG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4g''@;'; put 'put ''T1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6''@;'; put 'put ''Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6''@;'; put 'put ''IlJTRCIsY29kZToiUlNEIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDU0OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7''@;'; put 'put ''InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxl''@;'; put 'put ''KCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS5zdlNFPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9b''@;'; put 'put ''a10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VO''@;'; put 'put ''RCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJ''@;'; put 'put ''ZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9u''@;'; put 'put ''OiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJTRUsifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6''@;'; put 'put ''NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAs''@;'; put 'put ''dGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1h''@;'; put 'put ''bnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTU6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0''@;'; put 'put ''cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv''@;'; put 'put ''bCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09''@;'; put 'put ''dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnRoVEg9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYo''@;'; put 'put ''IU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZh''@;'; put 'put ''ciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJ''@;'; put 'put ''PFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUxZVx1MGUzMVx1MGUx''@;'; put 'put ''OSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRyaWxsaW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkifSxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlz''@;'; put 'put ''LHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNTY6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90''@;'; put 'put ''b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBl''@;'; put 'put ''b2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnRyVFI9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYo''@;'; put 'put ''IUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9y''@;'; put 'put ''dHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rp''@;'; put 'put ''b24obGUsTSxPKXt2YXIgUj17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ1x4ZmNuY1x4ZmMiLDQ6IidceGZjbmNceGZjIiwxMDA6IidceGZjbmNceGZjIiw2OiInbmNc''@;'; put 'put ''dTAxMzEiLDk6Iid1bmN1IiwxMDoiJ3VuY3UiLDMwOiIndW5jdSIsNjA6IidcdTAxMzFuY1x1MDEzMSIsOTA6IidcdTAxMzFuY1x1MDEzMSJ9O00uZXhwb3J0cz17bGFuZ3VhZ2VUYWc6InRyLVRSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25z''@;'; put 'put ''Ont0aG91c2FuZDoiYmluIixtaWxsaW9uOiJtaWx5b24iLGJpbGxpb246Im1pbHlhciIsdHJpbGxpb246InRyaWx5b24ifSxvcmRpbmFsOmZ1bmN0aW9uKHope2lmKDA9PT16KXJldHVybiInXHUwMTMxbmNcdTAxMzEiO3ZhciBLPXolMTA7cmV0dXJuIFJbS118fFJbeiUxMDAtS118fFJbMTAw''@;'; put 'put ''PD16PzEwMDpudWxsXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGJhIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVFJZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91''@;'; put 'put ''ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9D''@;'; put 'put ''dXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0''@;'; put 'put ''eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDU3OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90''@;'; put 'put ''eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9m''@;'; put 'put ''IHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS51a1VBPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFF''@;'; put 'put ''JiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRz''@;'; put 'put ''LGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9u''@;'; put 'put ''KGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246Ilx1''@;'; put 'put ''MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1MDQzZCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGI0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiVUFIIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50''@;'; put 'put ''aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDU4OltmdW5jdGlvbihJZSxG''@;'; put 'put ''LGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0m''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0uY29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQg''@;'; put 'put ''MCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS56aENOPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5j''@;'; put 'put ''dGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2tdKXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29k''@;'; put 'put ''ZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1PW2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxlbmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiemgtQ04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Ro''@;'; put 'put ''b3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29kZToiQ05ZIn0s''@;'; put 'put ''Y3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxz''@;'; put 'put ''Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNz''@;'; put 'put ''YTowfX19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDU5OltmdW5jdGlvbihJZSxGLGFlKXsoZnVuY3Rpb24oeCl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O2Z1bmN0aW9uIG0obGUpe3JldHVybihtPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKE0pe3JldHVybiB0eXBlb2YgTX06ZnVuY3Rpb24oTSl7cmV0dXJuIE0mJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk0u''@;'; put 'put ''Y29uc3RydWN0b3I9PT1TeW1ib2wmJk0hPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBNfSkobGUpfSFmdW5jdGlvbihsZSl7dmFyIE07Im9iamVjdCI9PSh2b2lkIDA9PT1hZT8idW5kZWZpbmVkIjptKGFlKSkmJnZvaWQgMCE9PUY/Ri5leHBvcnRzPWxlKCk6KChNPXR5cGVv''@;'; put 'put ''ZiB3aW5kb3c8InUiP3dpbmRvdzp2b2lkIDAhPT14P3g6dHlwZW9mIHNlbGY8InUiP3NlbGY6dGhpcykubnVtYnJvfHwoTS5udW1icm89e30pKS56aE1PPWxlKCl9KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGxlKE0sTyxSKXtmdW5jdGlvbiB6KGssRSl7aWYoIU9ba10pe2lmKCFNW2td''@;'; put 'put ''KXt2YXIgaj0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllO2lmKCFFJiZqKXJldHVybiBqKGssITApO2lmKEspcmV0dXJuIEsoaywhMCk7dmFyIFY9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIraysiJyIpO3Rocm93IFYuY29kZT0iTU9EVUxFX05PVF9GT1VORCIsVn12YXIgQj1P''@;'; put 'put ''W2tdPXtleHBvcnRzOnt9fTtNW2tdWzBdLmNhbGwoQi5leHBvcnRzLGZ1bmN0aW9uKFkpe3JldHVybiB6KE1ba11bMV1bWV18fFkpfSxCLEIuZXhwb3J0cyxsZSxNLE8sUil9cmV0dXJuIE9ba10uZXhwb3J0c31mb3IodmFyIEs9ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZSxJPTA7STxSLmxl''@;'; put 'put ''bmd0aDtJKyspeihSW0ldKTtyZXR1cm4gen0oezE6W2Z1bmN0aW9uKGxlLE0sTyl7TS5leHBvcnRzPXtsYW5ndWFnZVRhZzoiemgtTU8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3''@;'; put 'put ''ZVx1ODQyYyIsYmlsbGlvbjoiXHU1MzQxXHU1MTA0Iix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiTU9QIixjb2RlOiJNT1AifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUi''@;'; put 'put ''P2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30pfSx7fV0sNjA6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBNfTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlw''@;'; put 'put ''ZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0''@;'; put 'put ''aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnpoU0c9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywh''@;'; put 'put ''MCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0''@;'; put 'put ''dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5leHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9y''@;'; put 'put ''dHM9e2xhbmd1YWdlVGFnOiJ6aC1TRyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU0ZTA3IixiaWxsaW9uOiJcdTUzNDFcdTRlYmYiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixjb2RlOiJTR0QifX19LHt9XX0se30sWzFdKSgxKX0pfSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6e30p''@;'; put 'put ''fSx7fV0sNjE6W2Z1bmN0aW9uKEllLEYsYWUpeyhmdW5jdGlvbih4KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShsZSl7cmV0dXJuKG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oTSl7cmV0dXJuIHR5cGVvZiBN''@;'; put 'put ''fTpmdW5jdGlvbihNKXtyZXR1cm4gTSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmTS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmTSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIE19KShsZSl9IWZ1bmN0aW9uKGxlKXt2YXIgTTsib2JqZWN0Ij09KHZvaWQgMD09PWFlPyJ1''@;'; put 'put ''bmRlZmluZWQiOm0oYWUpKSYmdm9pZCAwIT09Rj9GLmV4cG9ydHM9bGUoKTooKE09dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnZvaWQgMCE9PXg/eDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0aGlzKS5udW1icm98fChNLm51bWJybz17fSkpLnpoVFc9bGUoKX0oZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gbGUoTSxPLFIpe2Z1bmN0aW9uIHooayxFKXtpZighT1trXSl7aWYoIU1ba10pe3ZhciBqPSJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWU7aWYoIUUmJmopcmV0dXJuIGooaywhMCk7aWYoSylyZXR1cm4gSyhrLCEwKTt2YXIgVj1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVs''@;'; put 'put ''ZSAnIitrKyInIik7dGhyb3cgVi5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixWfXZhciBCPU9ba109e2V4cG9ydHM6e319O01ba11bMF0uY2FsbChCLmV4cG9ydHMsZnVuY3Rpb24oWSl7cmV0dXJuIHooTVtrXVsxXVtZXXx8WSl9LEIsQi5leHBvcnRzLGxlLE0sTyxSKX1yZXR1cm4gT1trXS5l''@;'; put 'put ''eHBvcnRzfWZvcih2YXIgSz0iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLEk9MDtJPFIubGVuZ3RoO0krKyl6KFJbSV0pO3JldHVybiB6fSh7MTpbZnVuY3Rpb24obGUsTSxPKXtNLmV4cG9ydHM9e2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFs''@;'; put 'put ''OiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIsY29k''@;'; put 'put ''ZToiVFdEIn19fSx7fV19LHt9LFsxXSkoMSl9KX0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ont9KX0se31dLDYyOltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7YWUuYmc9SWUo''@;'; put 'put ''Ii4vZGlzdC9sYW5ndWFnZXMvYmcubWluLmpzIiksYWVbImNzLUNaIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvY3MtQ1oubWluLmpzIiksYWVbImRhLURLIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZGEtREsubWluLmpzIiksYWVbImRlLUFUIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZGUtQVQu''@;'; put 'put ''bWluLmpzIiksYWVbImRlLUNIIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZGUtQ0gubWluLmpzIiksYWVbImRlLURFIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZGUtREUubWluLmpzIiksYWVbImRlLUxJIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZGUtTEkubWluLmpzIiksYWUuZWw9SWUoIi4v''@;'; put 'put ''ZGlzdC9sYW5ndWFnZXMvZWwubWluLmpzIiksYWVbImVuLUFVIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZW4tQVUubWluLmpzIiksYWVbImVuLUdCIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZW4tR0IubWluLmpzIiksYWVbImVuLUlFIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZW4tSUUubWlu''@;'; put 'put ''LmpzIiksYWVbImVuLU5aIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZW4tTloubWluLmpzIiksYWVbImVuLVpBIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZW4tWkEubWluLmpzIiksYWVbImVzLUFSIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtQVIubWluLmpzIiksYWVbImVzLUNMIl09SWUo''@;'; put 'put ''Ii4vZGlzdC9sYW5ndWFnZXMvZXMtQ0wubWluLmpzIiksYWVbImVzLUNPIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtQ08ubWluLmpzIiksYWVbImVzLUNSIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtQ1IubWluLmpzIiksYWVbImVzLUVTIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMt''@;'; put 'put ''RVMubWluLmpzIiksYWVbImVzLU1YIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtTVgubWluLmpzIiksYWVbImVzLU5JIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtTkkubWluLmpzIiksYWVbImVzLVBFIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtUEUubWluLmpzIiksYWVbImVzLVBS''@;'; put 'put ''Il09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtUFIubWluLmpzIiksYWVbImVzLVNWIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXMtU1YubWluLmpzIiksYWVbImV0LUVFIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZXQtRUUubWluLmpzIiksYWVbImZhLUlSIl09SWUoIi4vZGlzdC9sYW5ndWFn''@;'; put 'put ''ZXMvZmEtSVIubWluLmpzIiksYWVbImZpLUZJIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvZmktRkkubWluLmpzIiksYWVbImZpbC1QSCJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZpbC1QSC5taW4uanMiKSxhZVsiZnItQ0EiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9mci1DQS5taW4uanMiKSxh''@;'; put 'put ''ZVsiZnItQ0giXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9mci1DSC5taW4uanMiKSxhZVsiZnItRlIiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9mci1GUi5taW4uanMiKSxhZVsiaGUtSUwiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9oZS1JTC5taW4uanMiKSxhZVsiaHUtSFUiXT1JZSgiLi9kaXN0''@;'; put 'put ''L2xhbmd1YWdlcy9odS1IVS5taW4uanMiKSxhZS5pZD1JZSgiLi9kaXN0L2xhbmd1YWdlcy9pZC5taW4uanMiKSxhZVsiaXQtQ0giXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9pdC1DSC5taW4uanMiKSxhZVsiaXQtSVQiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9pdC1JVC5taW4uanMiKSxhZVsi''@;'; put 'put ''amEtSlAiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9qYS1KUC5taW4uanMiKSxhZVsia28tS1IiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9rby1LUi5taW4uanMiKSxhZVsibHYtTFYiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9sdi1MVi5taW4uanMiKSxhZVsibmItTk8iXT1JZSgiLi9kaXN0L2xh''@;'; put 'put ''bmd1YWdlcy9uYi1OTy5taW4uanMiKSxhZS5uYj1JZSgiLi9kaXN0L2xhbmd1YWdlcy9uYi5taW4uanMiKSxhZVsibmwtQkUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9ubC1CRS5taW4uanMiKSxhZVsibmwtTkwiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9ubC1OTC5taW4uanMiKSxhZS5ubj1J''@;'; put 'put ''ZSgiLi9kaXN0L2xhbmd1YWdlcy9ubi5taW4uanMiKSxhZVsicGwtUEwiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9wbC1QTC5taW4uanMiKSxhZVsicHQtQlIiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9wdC1CUi5taW4uanMiKSxhZVsicHQtUFQiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9wdC1Q''@;'; put 'put ''VC5taW4uanMiKSxhZVsicm8tUk8iXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9yby1STy5taW4uanMiKSxhZS5ybz1JZSgiLi9kaXN0L2xhbmd1YWdlcy9yby5taW4uanMiKSxhZVsicnUtUlUiXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9ydS1SVS5taW4uanMiKSxhZVsicnUtVUEiXT1JZSgiLi9k''@;'; put 'put ''aXN0L2xhbmd1YWdlcy9ydS1VQS5taW4uanMiKSxhZVsic2stU0siXT1JZSgiLi9kaXN0L2xhbmd1YWdlcy9zay1TSy5taW4uanMiKSxhZS5zbD1JZSgiLi9kaXN0L2xhbmd1YWdlcy9zbC5taW4uanMiKSxhZVsic3ItQ3lybC1SUyJdPUllKCIuL2Rpc3QvbGFuZ3VhZ2VzL3NyLUN5cmwtUlMu''@;'; put 'put ''bWluLmpzIiksYWVbInN2LVNFIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvc3YtU0UubWluLmpzIiksYWVbInRoLVRIIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvdGgtVEgubWluLmpzIiksYWVbInRyLVRSIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvdHItVFIubWluLmpzIiksYWVbInVrLVVBIl09''@;'; put 'put ''SWUoIi4vZGlzdC9sYW5ndWFnZXMvdWstVUEubWluLmpzIiksYWVbInpoLUNOIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvemgtQ04ubWluLmpzIiksYWVbInpoLU1PIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvemgtTU8ubWluLmpzIiksYWVbInpoLVNHIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMv''@;'; put 'put ''emgtU0cubWluLmpzIiksYWVbInpoLVRXIl09SWUoIi4vZGlzdC9sYW5ndWFnZXMvemgtVFcubWluLmpzIil9LHsiLi9kaXN0L2xhbmd1YWdlcy9iZy5taW4uanMiOjEsIi4vZGlzdC9sYW5ndWFnZXMvY3MtQ1oubWluLmpzIjoyLCIuL2Rpc3QvbGFuZ3VhZ2VzL2RhLURLLm1pbi5qcyI6Mywi''@;'; put 'put ''Li9kaXN0L2xhbmd1YWdlcy9kZS1BVC5taW4uanMiOjQsIi4vZGlzdC9sYW5ndWFnZXMvZGUtQ0gubWluLmpzIjo1LCIuL2Rpc3QvbGFuZ3VhZ2VzL2RlLURFLm1pbi5qcyI6NiwiLi9kaXN0L2xhbmd1YWdlcy9kZS1MSS5taW4uanMiOjcsIi4vZGlzdC9sYW5ndWFnZXMvZWwubWluLmpzIjo4''@;'; put 'put ''LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VuLUFVLm1pbi5qcyI6OSwiLi9kaXN0L2xhbmd1YWdlcy9lbi1HQi5taW4uanMiOjEwLCIuL2Rpc3QvbGFuZ3VhZ2VzL2VuLUlFLm1pbi5qcyI6MTEsIi4vZGlzdC9sYW5ndWFnZXMvZW4tTloubWluLmpzIjoxMiwiLi9kaXN0L2xhbmd1YWdlcy9lbi1aQS5t''@;'; put 'put ''aW4uanMiOjEzLCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLUFSLm1pbi5qcyI6MTQsIi4vZGlzdC9sYW5ndWFnZXMvZXMtQ0wubWluLmpzIjoxNSwiLi9kaXN0L2xhbmd1YWdlcy9lcy1DTy5taW4uanMiOjE2LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLUNSLm1pbi5qcyI6MTcsIi4vZGlzdC9sYW5ndWFn''@;'; put 'put ''ZXMvZXMtRVMubWluLmpzIjoxOCwiLi9kaXN0L2xhbmd1YWdlcy9lcy1NWC5taW4uanMiOjE5LCIuL2Rpc3QvbGFuZ3VhZ2VzL2VzLU5JLm1pbi5qcyI6MjAsIi4vZGlzdC9sYW5ndWFnZXMvZXMtUEUubWluLmpzIjoyMSwiLi9kaXN0L2xhbmd1YWdlcy9lcy1QUi5taW4uanMiOjIyLCIuL2Rp''@;'; put 'put ''c3QvbGFuZ3VhZ2VzL2VzLVNWLm1pbi5qcyI6MjMsIi4vZGlzdC9sYW5ndWFnZXMvZXQtRUUubWluLmpzIjoyNCwiLi9kaXN0L2xhbmd1YWdlcy9mYS1JUi5taW4uanMiOjI1LCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZpLUZJLm1pbi5qcyI6MjYsIi4vZGlzdC9sYW5ndWFnZXMvZmlsLVBILm1pbi5q''@;'; put 'put ''cyI6MjcsIi4vZGlzdC9sYW5ndWFnZXMvZnItQ0EubWluLmpzIjoyOCwiLi9kaXN0L2xhbmd1YWdlcy9mci1DSC5taW4uanMiOjI5LCIuL2Rpc3QvbGFuZ3VhZ2VzL2ZyLUZSLm1pbi5qcyI6MzAsIi4vZGlzdC9sYW5ndWFnZXMvaGUtSUwubWluLmpzIjozMSwiLi9kaXN0L2xhbmd1YWdlcy9o''@;'; put 'put ''dS1IVS5taW4uanMiOjMyLCIuL2Rpc3QvbGFuZ3VhZ2VzL2lkLm1pbi5qcyI6MzMsIi4vZGlzdC9sYW5ndWFnZXMvaXQtQ0gubWluLmpzIjozNCwiLi9kaXN0L2xhbmd1YWdlcy9pdC1JVC5taW4uanMiOjM1LCIuL2Rpc3QvbGFuZ3VhZ2VzL2phLUpQLm1pbi5qcyI6MzYsIi4vZGlzdC9sYW5n''@;'; put 'put ''dWFnZXMva28tS1IubWluLmpzIjozNywiLi9kaXN0L2xhbmd1YWdlcy9sdi1MVi5taW4uanMiOjM4LCIuL2Rpc3QvbGFuZ3VhZ2VzL25iLU5PLm1pbi5qcyI6MzksIi4vZGlzdC9sYW5ndWFnZXMvbmIubWluLmpzIjo0MCwiLi9kaXN0L2xhbmd1YWdlcy9ubC1CRS5taW4uanMiOjQxLCIuL2Rp''@;'; put 'put ''c3QvbGFuZ3VhZ2VzL25sLU5MLm1pbi5qcyI6NDIsIi4vZGlzdC9sYW5ndWFnZXMvbm4ubWluLmpzIjo0MywiLi9kaXN0L2xhbmd1YWdlcy9wbC1QTC5taW4uanMiOjQ0LCIuL2Rpc3QvbGFuZ3VhZ2VzL3B0LUJSLm1pbi5qcyI6NDUsIi4vZGlzdC9sYW5ndWFnZXMvcHQtUFQubWluLmpzIjo0''@;'; put 'put ''NiwiLi9kaXN0L2xhbmd1YWdlcy9yby1STy5taW4uanMiOjQ3LCIuL2Rpc3QvbGFuZ3VhZ2VzL3JvLm1pbi5qcyI6NDgsIi4vZGlzdC9sYW5ndWFnZXMvcnUtUlUubWluLmpzIjo0OSwiLi9kaXN0L2xhbmd1YWdlcy9ydS1VQS5taW4uanMiOjUwLCIuL2Rpc3QvbGFuZ3VhZ2VzL3NrLVNLLm1p''@;'; put 'put ''bi5qcyI6NTEsIi4vZGlzdC9sYW5ndWFnZXMvc2wubWluLmpzIjo1MiwiLi9kaXN0L2xhbmd1YWdlcy9zci1DeXJsLVJTLm1pbi5qcyI6NTMsIi4vZGlzdC9sYW5ndWFnZXMvc3YtU0UubWluLmpzIjo1NCwiLi9kaXN0L2xhbmd1YWdlcy90aC1USC5taW4uanMiOjU1LCIuL2Rpc3QvbGFuZ3Vh''@;'; put 'put ''Z2VzL3RyLVRSLm1pbi5qcyI6NTYsIi4vZGlzdC9sYW5ndWFnZXMvdWstVUEubWluLmpzIjo1NywiLi9kaXN0L2xhbmd1YWdlcy96aC1DTi5taW4uanMiOjU4LCIuL2Rpc3QvbGFuZ3VhZ2VzL3poLU1PLm1pbi5qcyI6NTksIi4vZGlzdC9sYW5ndWFnZXMvemgtU0cubWluLmpzIjo2MCwiLi9k''@;'; put 'put ''aXN0L2xhbmd1YWdlcy96aC1UVy5taW4uanMiOjYxfV19LHt9LFs2Ml0pKDYyKX0sMTExNzA6YXQ9PnthdC5leHBvcnRzPWZ1bmN0aW9uIEllKEYsYWUseCl7ZnVuY3Rpb24gbShPLFIpe2lmKCFhZVtPXSl7aWYoIUZbT10pe2lmKGxlKXJldHVybiBsZShPLCEwKTt2YXIgSz1uZXcgRXJyb3Io''@;'; put 'put ''IkNhbm5vdCBmaW5kIG1vZHVsZSAnIitPKyInIik7dGhyb3cgSy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixLfXZhciBJPWFlW09dPXtleHBvcnRzOnt9fTtGW09dWzBdLmNhbGwoSS5leHBvcnRzLGZ1bmN0aW9uKGspe3JldHVybiBtKEZbT11bMV1ba118fGspfSxJLEkuZXhwb3J0cyxJZSxG''@;'; put 'put ''LGFlLHgpfXJldHVybiBhZVtPXS5leHBvcnRzfWZvcih2YXIgbGU9dm9pZCAwLE09MDtNPHgubGVuZ3RoO00rKyltKHhbTV0pO3JldHVybiBtfSh7MTpbZnVuY3Rpb24oSWUsRixhZSl7IWZ1bmN0aW9uKHgpeyJ1c2Ugc3RyaWN0Ijt2YXIgbSxsZT0vXi0/KD86XGQrKD86XC5cZCopP3xcLlxk''@;'; put 'put ''KykoPzplWystXT9cZCspPyQvaSxNPU1hdGguY2VpbCxPPU1hdGguZmxvb3IsUj0iW0JpZ051bWJlciBFcnJvcl0gIix6PVIrIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsSz0xZTE0LEk9MTQsaz05MDA3MTk5MjU0NzQwOTkxLEU9WzEs''@;'; put 'put ''MTAsMTAwLDFlMywxZTQsMWU1LDFlNiwxZTcsMWU4LDFlOSwxZTEwLDFlMTEsMWUxMiwxZTEzXSxqPTFlNyxWPTFlOTtmdW5jdGlvbiBCKG9lKXt2YXIgc2U9MHxvZTtyZXR1cm4gMDxvZXx8b2U9PT1zZT9zZTpzZS0xfWZ1bmN0aW9uIFkob2Upe2Zvcih2YXIgc2UsaGUsdWU9MSxjZT1vZS5s''@;'; put 'put ''ZW5ndGgsRz1vZVswXSsiIjt1ZTxjZTspe2ZvcihzZT1vZVt1ZSsrXSsiIixoZT1JLXNlLmxlbmd0aDtoZS0tO3NlPSIwIitzZSk7Rys9c2V9Zm9yKGNlPUcubGVuZ3RoOzQ4PT09Ry5jaGFyQ29kZUF0KC0tY2UpOyk7cmV0dXJuIEcuc2xpY2UoMCxjZSsxfHwxKX1mdW5jdGlvbiBYKG9lLHNl''@;'; put 'put ''KXt2YXIgaGUsdWUsY2U9b2UuYyxHPXNlLmMsYj1vZS5zLEQ9c2UucyxIPW9lLmUsTj1zZS5lO2lmKCFifHwhRClyZXR1cm4gbnVsbDtpZih1ZT1HJiYhR1swXSwoaGU9Y2UmJiFjZVswXSl8fHVlKXJldHVybiBoZT91ZT8wOi1EOmI7aWYoYiE9RClyZXR1cm4gYjtpZihoZT1iPDAsdWU9SD09''@;'; put 'put ''TiwhY2V8fCFHKXJldHVybiB1ZT8wOiFjZV5oZT8xOi0xO2lmKCF1ZSlyZXR1cm4gTjxIXmhlPzE6LTE7Zm9yKEQ9KEg9Y2UubGVuZ3RoKTwoTj1HLmxlbmd0aCk/SDpOLGI9MDtiPEQ7YisrKWlmKGNlW2JdIT1HW2JdKXJldHVybiBjZVtiXT5HW2JdXmhlPzE6LTE7cmV0dXJuIEg9PU4/MDpO''@;'; put 'put ''PEheaGU/MTotMX1mdW5jdGlvbiBVKG9lLHNlLGhlLHVlKXtpZihvZTxzZXx8aGU8b2V8fG9lIT09KG9lPDA/TShvZSk6TyhvZSkpKXRocm93IEVycm9yKFIrKHVlfHwiQXJndW1lbnQiKSsoIm51bWJlciI9PXR5cGVvZiBvZT9vZTxzZXx8aGU8b2U/IiBvdXQgb2YgcmFuZ2U6ICI6IiBub3Qg''@;'; put 'put ''YW4gaW50ZWdlcjogIjoiIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICIpK1N0cmluZyhvZSkpfWZ1bmN0aW9uIHEob2Upe3ZhciBzZT1vZS5jLmxlbmd0aC0xO3JldHVybiBCKG9lLmUvSSk9PXNlJiZvZS5jW3NlXSUyIT0wfWZ1bmN0aW9uIGVlKG9lLHNlKXtyZXR1cm4oMTxvZS5sZW5ndGg/''@;'; put 'put ''b2UuY2hhckF0KDApKyIuIitvZS5zbGljZSgxKTpvZSkrKHNlPDA/ImUiOiJlKyIpK3NlfWZ1bmN0aW9uIHRlKG9lLHNlLGhlKXt2YXIgdWUsY2U7aWYoc2U8MCl7Zm9yKGNlPWhlKyIuIjsrK3NlO2NlKz1oZSk7b2U9Y2Urb2V9ZWxzZSBpZigrK3NlPih1ZT1vZS5sZW5ndGgpKXtmb3IoY2U9''@;'; put 'put ''aGUsc2UtPXVlOy0tc2U7Y2UrPWhlKTtvZSs9Y2V9ZWxzZSBzZTx1ZSYmKG9lPW9lLnNsaWNlKDAsc2UpKyIuIitvZS5zbGljZShzZSkpO3JldHVybiBvZX0obT1mdW5jdGlvbiBvZShzZSl7dmFyIGhlLHVlLGNlLEcsYixELEgsTixnLEMsUz1XZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOldl''@;'; put 'put ''LHRvU3RyaW5nOm51bGwsdmFsdWVPZjpudWxsfSx2PW5ldyBXZSgxKSxwPTIwLHc9NCxKPS03LG5lPTIxLGRlPS0xZTcsZmU9MWU3LHhlPSExLExlPTEsRmU9MCxPZT17cHJlZml4OiIiLGdyb3VwU2l6ZTozLHNlY29uZGFyeUdyb3VwU2l6ZTowLGdyb3VwU2VwYXJhdG9yOiIsIixkZWNpbWFs''@;'; put 'put ''U2VwYXJhdG9yOiIuIixmcmFjdGlvbkdyb3VwU2l6ZTowLGZyYWN0aW9uR3JvdXBTZXBhcmF0b3I6Ilx4YTAiLHN1ZmZpeDoiIn0samU9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7ZnVuY3Rpb24gV2UoYmUsQWUpe3ZhciBUZSxxZSxYZSxVZSxodCxNZSxEZSx6ZSxp''@;'; put 'put ''dD10aGlzO2lmKCEoaXQgaW5zdGFuY2VvZiBXZSkpcmV0dXJuIG5ldyBXZShiZSxBZSk7aWYobnVsbD09QWUpe2lmKGJlIGluc3RhbmNlb2YgV2UpcmV0dXJuIGl0LnM9YmUucyxpdC5lPWJlLmUsdm9pZChpdC5jPShiZT1iZS5jKT9iZS5zbGljZSgpOmJlKTtpZigoTWU9Im51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBiZSkmJjAqYmU9PTApe2lmKGl0LnM9MS9iZTwwPyhiZT0tYmUsLTEpOjEsYmU9PT1+fmJlKXtmb3IoVWU9MCxodD1iZTsxMDw9aHQ7aHQvPTEwLFVlKyspO3JldHVybiBpdC5lPVVlLHZvaWQoaXQuYz1bYmVdKX16ZT1TdHJpbmcoYmUpfWVsc2V7aWYoemU9U3RyaW5nKGJlKSwhbGUu''@;'; put 'put ''dGVzdCh6ZSkpcmV0dXJuIGNlKGl0LHplLE1lKTtpdC5zPTQ1PT16ZS5jaGFyQ29kZUF0KDApPyh6ZT16ZS5zbGljZSgxKSwtMSk6MX0tMTwoVWU9emUuaW5kZXhPZigiLiIpKSYmKHplPXplLnJlcGxhY2UoIi4iLCIiKSksMDwoaHQ9emUuc2VhcmNoKC9lL2kpKT8oVWU8MCYmKFVlPWh0KSxV''@;'; put 'put ''ZSs9K3plLnNsaWNlKGh0KzEpLHplPXplLnN1YnN0cmluZygwLGh0KSk6VWU8MCYmKFVlPXplLmxlbmd0aCl9ZWxzZXtpZihVKEFlLDIsamUubGVuZ3RoLCJCYXNlIiksemU9U3RyaW5nKGJlKSwxMD09QWUpcmV0dXJuIGx0KGl0PW5ldyBXZShiZSBpbnN0YW5jZW9mIFdlP2JlOnplKSxwK2l0''@;'; put 'put ''LmUrMSx3KTtpZihNZT0ibnVtYmVyIj09dHlwZW9mIGJlKXtpZigwKmJlIT0wKXJldHVybiBjZShpdCx6ZSxNZSxBZSk7aWYoaXQucz0xL2JlPDA/KHplPXplLnNsaWNlKDEpLC0xKToxLFdlLkRFQlVHJiYxNTx6ZS5yZXBsYWNlKC9eMFwuMCp8XC4vLCIiKS5sZW5ndGgpdGhyb3cgRXJyb3Io''@;'; put 'put ''eitiZSk7TWU9ITF9ZWxzZSBpdC5zPTQ1PT09emUuY2hhckNvZGVBdCgwKT8oemU9emUuc2xpY2UoMSksLTEpOjE7Zm9yKFRlPWplLnNsaWNlKDAsQWUpLFVlPWh0PTAsRGU9emUubGVuZ3RoO2h0PERlO2h0KyspaWYoVGUuaW5kZXhPZihxZT16ZS5jaGFyQXQoaHQpKTwwKXtpZigiLiI9PXFl''@;'; put 'put ''KXtpZihVZTxodCl7VWU9RGU7Y29udGludWV9fWVsc2UgaWYoIVhlJiYoemU9PXplLnRvVXBwZXJDYXNlKCkmJih6ZT16ZS50b0xvd2VyQ2FzZSgpKXx8emU9PXplLnRvTG93ZXJDYXNlKCkmJih6ZT16ZS50b1VwcGVyQ2FzZSgpKSkpe1hlPSEwLGh0PS0xLFVlPTA7Y29udGludWV9cmV0dXJu''@;'; put 'put ''IGNlKGl0LFN0cmluZyhiZSksTWUsQWUpfS0xPChVZT0oemU9dWUoemUsQWUsMTAsaXQucykpLmluZGV4T2YoIi4iKSk/emU9emUucmVwbGFjZSgiLiIsIiIpOlVlPXplLmxlbmd0aH1mb3IoaHQ9MDs0OD09PXplLmNoYXJDb2RlQXQoaHQpO2h0KyspO2ZvcihEZT16ZS5sZW5ndGg7NDg9PT16''@;'; put 'put ''ZS5jaGFyQ29kZUF0KC0tRGUpOyk7aWYoemU9emUuc2xpY2UoaHQsKytEZSkpe2lmKERlLT1odCxNZSYmV2UuREVCVUcmJjE1PERlJiYoazxiZXx8YmUhPT1PKGJlKSkpdGhyb3cgRXJyb3IoeitpdC5zKmJlKTtpZihmZTwoVWU9VWUtaHQtMSkpaXQuYz1pdC5lPW51bGw7ZWxzZSBpZihVZTxk''@;'; put 'put ''ZSlpdC5jPVtpdC5lPTBdO2Vsc2V7aWYoaXQuZT1VZSxpdC5jPVtdLGh0PShVZSsxKSVJLFVlPDAmJihodCs9SSksaHQ8RGUpe2ZvcihodCYmaXQuYy5wdXNoKCt6ZS5zbGljZSgwLGh0KSksRGUtPUk7aHQ8RGU7KWl0LmMucHVzaCgremUuc2xpY2UoaHQsaHQrPUkpKTt6ZT16ZS5zbGljZSho''@;'; put 'put ''dCksaHQ9SS16ZS5sZW5ndGh9ZWxzZSBodC09RGU7Zm9yKDtodC0tO3plKz0iMCIpO2l0LmMucHVzaCgremUpfX1lbHNlIGl0LmM9W2l0LmU9MF19ZnVuY3Rpb24gS2UoYmUsQWUsVGUscWUpe3ZhciBYZSxVZSxodCxNZSxEZTtpZihudWxsPT1UZT9UZT13OlUoVGUsMCw4KSwhYmUuYylyZXR1''@;'; put 'put ''cm4gYmUudG9TdHJpbmcoKTtpZihYZT1iZS5jWzBdLGh0PWJlLmUsbnVsbD09QWUpRGU9WShiZS5jKSxEZT0xPT1xZXx8Mj09cWUmJihodDw9Snx8bmU8PWh0KT9lZShEZSxodCk6dGUoRGUsaHQsIjAiKTtlbHNlIGlmKFVlPShiZT1sdChuZXcgV2UoYmUpLEFlLFRlKSkuZSxNZT0oRGU9WShi''@;'; put 'put ''ZS5jKSkubGVuZ3RoLDE9PXFlfHwyPT1xZSYmKEFlPD1VZXx8VWU8PUopKXtmb3IoO01lPEFlO0RlKz0iMCIsTWUrKyk7RGU9ZWUoRGUsVWUpfWVsc2UgaWYoQWUtPWh0LERlPXRlKERlLFVlLCIwIiksTWU8VWUrMSl7aWYoMDwtLUFlKWZvcihEZSs9Ii4iO0FlLS07RGUrPSIwIik7fWVsc2Ug''@;'; put 'put ''aWYoMDwoQWUrPVVlLU1lKSlmb3IoVWUrMT09TWUmJihEZSs9Ii4iKTtBZS0tO0RlKz0iMCIpO3JldHVybiBiZS5zPDAmJlhlPyItIitEZTpEZX1mdW5jdGlvbiBZZShiZSxBZSl7Zm9yKHZhciBUZSxxZT0xLFhlPW5ldyBXZShiZVswXSk7cWU8YmUubGVuZ3RoO3FlKyspe2lmKCEoVGU9bmV3''@;'; put 'put ''IFdlKGJlW3FlXSkpLnMpe1hlPVRlO2JyZWFrfUFlLmNhbGwoWGUsVGUpJiYoWGU9VGUpfXJldHVybiBYZX1mdW5jdGlvbiBKZShiZSxBZSxUZSl7Zm9yKHZhciBxZT0xLFhlPUFlLmxlbmd0aDshQWVbLS1YZV07QWUucG9wKCkpO2ZvcihYZT1BZVswXTsxMDw9WGU7WGUvPTEwLHFlKyspO3Jl''@;'; put 'put ''dHVybiBiZS5jPShUZT1xZStUZSpJLTEpPmZlP2JlLmU9bnVsbDpUZTxkZT9bYmUuZT0wXTooYmUuZT1UZSxBZSksYmV9ZnVuY3Rpb24gbHQoYmUsQWUsVGUscWUpe3ZhciBYZSxVZSxodCxNZSxEZSx6ZSxpdCx1dD1iZS5jLE10PUU7aWYodXQpe2U6e2ZvcihYZT0xLE1lPXV0WzBdOzEwPD1N''@;'; put 'put ''ZTtNZS89MTAsWGUrKyk7aWYoKFVlPUFlLVhlKTwwKVVlKz1JLGl0PShEZT11dFt6ZT0wXSkvTXRbWGUtKGh0PUFlKS0xXSUxMHwwO2Vsc2UgaWYoKHplPU0oKFVlKzEpL0kpKT49dXQubGVuZ3RoKXtpZighcWUpYnJlYWsgZTtmb3IoO3V0Lmxlbmd0aDw9emU7dXQucHVzaCgwKSk7RGU9aXQ9''@;'; put 'put ''MCxodD0oVWUlPUkpLUkrKFhlPTEpfWVsc2V7Zm9yKERlPU1lPXV0W3plXSxYZT0xOzEwPD1NZTtNZS89MTAsWGUrKyk7aXQ9KGh0PShVZSU9SSktSStYZSk8MD8wOkRlL010W1hlLWh0LTFdJTEwfDB9aWYocWU9cWV8fEFlPDB8fG51bGwhPXV0W3plKzFdfHwoaHQ8MD9EZTpEZSVNdFtYZS1o''@;'; put 'put ''dC0xXSkscWU9VGU8ND8oaXR8fHFlKSYmKDA9PVRlfHxUZT09KGJlLnM8MD8zOjIpKTo1PGl0fHw1PT1pdCYmKDQ9PVRlfHxxZXx8Nj09VGUmJigwPFVlPzA8aHQ/RGUvTXRbWGUtaHRdOjA6dXRbemUtMV0pJTEwJjF8fFRlPT0oYmUuczwwPzg6NykpLEFlPDF8fCF1dFswXSlyZXR1cm4gdXQu''@;'; put 'put ''bGVuZ3RoPTAscWU/KHV0WzBdPU10WyhJLShBZS09YmUuZSsxKSVJKSVJXSxiZS5lPS1BZXx8MCk6dXRbMF09YmUuZT0wLGJlO2lmKDA9PVVlPyh1dC5sZW5ndGg9emUsTWU9MSx6ZS0tKToodXQubGVuZ3RoPXplKzEsTWU9TXRbSS1VZV0sdXRbemVdPTA8aHQ/TyhEZS9NdFtYZS1odF0lTXRb''@;'; put 'put ''aHRdKSpNZTowKSxxZSlmb3IoOzspe2lmKDA9PXplKXtmb3IoVWU9MSxodD11dFswXTsxMDw9aHQ7aHQvPTEwLFVlKyspO2ZvcihodD11dFswXSs9TWUsTWU9MTsxMDw9aHQ7aHQvPTEwLE1lKyspO1VlIT1NZSYmKGJlLmUrKyx1dFswXT09SyYmKHV0WzBdPTEpKTticmVha31pZih1dFt6ZV0r''@;'; put 'put ''PU1lLHV0W3plXSE9SylicmVhazt1dFt6ZS0tXT0wLE1lPTF9Zm9yKFVlPXV0Lmxlbmd0aDswPT09dXRbLS1VZV07dXQucG9wKCkpO31iZS5lPmZlP2JlLmM9YmUuZT1udWxsOmJlLmU8ZGUmJihiZS5jPVtiZS5lPTBdKX1yZXR1cm4gYmV9ZnVuY3Rpb24gUGUoYmUpe3ZhciBBZSxUZT1iZS5l''@;'; put 'put ''O3JldHVybiBudWxsPT09VGU/YmUudG9TdHJpbmcoKTooQWU9WShiZS5jKSxBZT1UZTw9Snx8bmU8PVRlP2VlKEFlLFRlKTp0ZShBZSxUZSwiMCIpLGJlLnM8MD8iLSIrQWU6QWUpfXJldHVybiBXZS5jbG9uZT1vZSxXZS5ST1VORF9VUD0wLFdlLlJPVU5EX0RPV049MSxXZS5ST1VORF9DRUlM''@;'; put 'put ''PTIsV2UuUk9VTkRfRkxPT1I9MyxXZS5ST1VORF9IQUxGX1VQPTQsV2UuUk9VTkRfSEFMRl9ET1dOPTUsV2UuUk9VTkRfSEFMRl9FVkVOPTYsV2UuUk9VTkRfSEFMRl9DRUlMPTcsV2UuUk9VTkRfSEFMRl9GTE9PUj04LFdlLkVVQ0xJRD05LFdlLmNvbmZpZz1XZS5zZXQ9ZnVuY3Rpb24oYmUp''@;'; put 'put ''e3ZhciBBZSxUZTtpZihudWxsIT1iZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBiZSl0aHJvdyBFcnJvcihSKyJPYmplY3QgZXhwZWN0ZWQ6ICIrYmUpO2lmKGJlLmhhc093blByb3BlcnR5KEFlPSJERUNJTUFMX1BMQUNFUyIpJiYoVShUZT1iZVtBZV0sMCxWLEFlKSxwPVRlKSxiZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eShBZT0iUk9VTkRJTkdfTU9ERSIpJiYoVShUZT1iZVtBZV0sMCw4LEFlKSx3PVRlKSxiZS5oYXNPd25Qcm9wZXJ0eShBZT0iRVhQT05FTlRJQUxfQVQiKSYmKChUZT1iZVtBZV0pJiZUZS5wb3A/KFUoVGVbMF0sLVYsMCxBZSksVShUZVsxXSwwLFYsQWUpLEo9VGVbMF0sbmU9VGVb''@;'; put 'put ''MV0pOihVKFRlLC1WLFYsQWUpLEo9LShuZT1UZTwwPy1UZTpUZSkpKSxiZS5oYXNPd25Qcm9wZXJ0eShBZT0iUkFOR0UiKSlpZigoVGU9YmVbQWVdKSYmVGUucG9wKVUoVGVbMF0sLVYsLTEsQWUpLFUoVGVbMV0sMSxWLEFlKSxkZT1UZVswXSxmZT1UZVsxXTtlbHNle2lmKFUoVGUsLVYsVixB''@;'; put 'put ''ZSksIVRlKXRocm93IEVycm9yKFIrQWUrIiBjYW5ub3QgYmUgemVybzogIitUZSk7ZGU9LShmZT1UZTwwPy1UZTpUZSl9aWYoYmUuaGFzT3duUHJvcGVydHkoQWU9IkNSWVBUTyIpKXtpZigoVGU9YmVbQWVdKSE9PSEhVGUpdGhyb3cgRXJyb3IoUitBZSsiIG5vdCB0cnVlIG9yIGZhbHNlOiAi''@;'; put 'put ''K1RlKTtpZihUZSl7aWYodHlwZW9mIGNyeXB0bz4idSJ8fCFjcnlwdG98fCFjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiYhY3J5cHRvLnJhbmRvbUJ5dGVzKXRocm93IHhlPSFUZSxFcnJvcihSKyJjcnlwdG8gdW5hdmFpbGFibGUiKTt4ZT1UZX1lbHNlIHhlPVRlfWlmKGJlLmhhc093blByb3Bl''@;'; put 'put ''cnR5KEFlPSJNT0RVTE9fTU9ERSIpJiYoVShUZT1iZVtBZV0sMCw5LEFlKSxMZT1UZSksYmUuaGFzT3duUHJvcGVydHkoQWU9IlBPV19QUkVDSVNJT04iKSYmKFUoVGU9YmVbQWVdLDAsVixBZSksRmU9VGUpLGJlLmhhc093blByb3BlcnR5KEFlPSJGT1JNQVQiKSl7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZihUZT1iZVtBZV0pKXRocm93IEVycm9yKFIrQWUrIiBub3QgYW4gb2JqZWN0OiAiK1RlKTtPZT1UZX1pZihiZS5oYXNPd25Qcm9wZXJ0eShBZT0iQUxQSEFCRVQiKSl7aWYoInN0cmluZyIhPXR5cGVvZihUZT1iZVtBZV0pfHwvXi4kfFsrLS5cc118KC4pLipcMS8udGVzdChUZSkpdGhy''@;'; put 'put ''b3cgRXJyb3IoUitBZSsiIGludmFsaWQ6ICIrVGUpO2plPVRlfX1yZXR1cm57REVDSU1BTF9QTEFDRVM6cCxST1VORElOR19NT0RFOncsRVhQT05FTlRJQUxfQVQ6W0osbmVdLFJBTkdFOltkZSxmZV0sQ1JZUFRPOnhlLE1PRFVMT19NT0RFOkxlLFBPV19QUkVDSVNJT046RmUsRk9STUFUOk9l''@;'; put 'put ''LEFMUEhBQkVUOmplfX0sV2UuaXNCaWdOdW1iZXI9ZnVuY3Rpb24oYmUpe3JldHVybiBiZSBpbnN0YW5jZW9mIFdlfHxiZSYmITA9PT1iZS5faXNCaWdOdW1iZXJ8fCExfSxXZS5tYXhpbXVtPVdlLm1heD1mdW5jdGlvbigpe3JldHVybiBZZShhcmd1bWVudHMsUy5sdCl9LFdlLm1pbmltdW09''@;'; put 'put ''V2UubWluPWZ1bmN0aW9uKCl7cmV0dXJuIFllKGFyZ3VtZW50cyxTLmd0KX0sV2UucmFuZG9tPShHPTkwMDcxOTkyNTQ3NDA5OTIsYj1NYXRoLnJhbmRvbSgpKkcmMjA5NzE1MT9mdW5jdGlvbigpe3JldHVybiBPKE1hdGgucmFuZG9tKCkqRyl9OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgq''@;'; put 'put ''KDEwNzM3NDE4MjQqTWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRvbSgpfDApfSxmdW5jdGlvbihiZSl7dmFyIEFlLFRlLHFlLFhlLFVlLGh0PTAsTWU9W10sRGU9bmV3IFdlKHYpO2lmKG51bGw9PWJlP2JlPXA6VShiZSwwLFYpLFhlPU0oYmUvSSkseGUpaWYoY3J5cHRvLmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcyl7Zm9yKEFlPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KFhlKj0yKSk7aHQ8WGU7KTllMTU8PShVZT0xMzEwNzIqQWVbaHRdKyhBZVtodCsxXT4+PjExKSk/KFRlPWNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDIpKSxB''@;'; put 'put ''ZVtodF09VGVbMF0sQWVbaHQrMV09VGVbMV0pOihNZS5wdXNoKFVlJTFlMTQpLGh0Kz0yKTtodD1YZS8yfWVsc2V7aWYoIWNyeXB0by5yYW5kb21CeXRlcyl0aHJvdyB4ZT0hMSxFcnJvcihSKyJjcnlwdG8gdW5hdmFpbGFibGUiKTtmb3IoQWU9Y3J5cHRvLnJhbmRvbUJ5dGVzKFhlKj03KTto''@;'; put 'put ''dDxYZTspOWUxNTw9KFVlPTI4MTQ3NDk3NjcxMDY1NiooMzEmQWVbaHRdKSsxMDk5NTExNjI3Nzc2KkFlW2h0KzFdKzQyOTQ5NjcyOTYqQWVbaHQrMl0rMTY3NzcyMTYqQWVbaHQrM10rKEFlW2h0KzRdPDwxNikrKEFlW2h0KzVdPDw4KStBZVtodCs2XSk/Y3J5cHRvLnJhbmRvbUJ5dGVzKDcp''@;'; put 'put ''LmNvcHkoQWUsaHQpOihNZS5wdXNoKFVlJTFlMTQpLGh0Kz03KTtodD1YZS83fWlmKCF4ZSlmb3IoO2h0PFhlOykoVWU9YigpKTw5ZTE1JiYoTWVbaHQrK109VWUlMWUxNCk7Zm9yKFhlPU1lWy0taHRdLGJlJT1JLFhlJiZiZSYmKE1lW2h0XT1PKFhlLyhVZT1FW0ktYmVdKSkqVWUpOzA9PT1N''@;'; put 'put ''ZVtodF07TWUucG9wKCksaHQtLSk7aWYoaHQ8MClNZT1bcWU9MF07ZWxzZXtmb3IocWU9LTE7MD09PU1lWzBdO01lLnNwbGljZSgwLDEpLHFlLT1JKTtmb3IoaHQ9MSxVZT1NZVswXTsxMDw9VWU7VWUvPTEwLGh0KyspO2h0PEkmJihxZS09SS1odCl9cmV0dXJuIERlLmU9cWUsRGUuYz1NZSxE''@;'; put 'put ''ZX0pLFdlLnN1bT1mdW5jdGlvbigpe2Zvcih2YXIgYmU9MSxBZT1hcmd1bWVudHMsVGU9bmV3IFdlKEFlWzBdKTtiZTxBZS5sZW5ndGg7KVRlPVRlLnBsdXMoQWVbYmUrK10pO3JldHVybiBUZX0sdWU9ZnVuY3Rpb24oKXt2YXIgYmU9IjAxMjM0NTY3ODkiO2Z1bmN0aW9uIEFlKFRlLHFlLFhl''@;'; put 'put ''LFVlKXtmb3IodmFyIGh0LE1lLERlPVswXSx6ZT0wLGl0PVRlLmxlbmd0aDt6ZTxpdDspe2ZvcihNZT1EZS5sZW5ndGg7TWUtLTtEZVtNZV0qPXFlKTtmb3IoRGVbMF0rPVVlLmluZGV4T2YoVGUuY2hhckF0KHplKyspKSxodD0wO2h0PERlLmxlbmd0aDtodCsrKURlW2h0XT5YZS0xJiYobnVs''@;'; put 'put ''bD09RGVbaHQrMV0mJihEZVtodCsxXT0wKSxEZVtodCsxXSs9RGVbaHRdL1hlfDAsRGVbaHRdJT1YZSl9cmV0dXJuIERlLnJldmVyc2UoKX1yZXR1cm4gZnVuY3Rpb24oVGUscWUsWGUsVWUsaHQpe3ZhciBNZSxEZSx6ZSxpdCx1dCxNdCxIdCxQdCxvbj1UZS5pbmRleE9mKCIuIiksQ249cCxV''@;'; put 'put ''dD13O2ZvcigwPD1vbiYmKGl0PUZlLEZlPTAsVGU9VGUucmVwbGFjZSgiLiIsIiIpLE10PShQdD1uZXcgV2UocWUpKS5wb3coVGUubGVuZ3RoLW9uKSxGZT1pdCxQdC5jPUFlKHRlKFkoTXQuYyksTXQuZSwiMCIpLDEwLFhlLGJlKSxQdC5lPVB0LmMubGVuZ3RoKSx6ZT1pdD0oSHQ9QWUoVGUs''@;'; put 'put ''cWUsWGUsaHQ/KE1lPWplLGJlKTooTWU9YmUsamUpKSkubGVuZ3RoOzA9PUh0Wy0taXRdO0h0LnBvcCgpKTtpZighSHRbMF0pcmV0dXJuIE1lLmNoYXJBdCgwKTtpZihvbjwwPy0temU6KE10LmM9SHQsTXQuZT16ZSxNdC5zPVVlLEh0PShNdD1oZShNdCxQdCxDbixVdCxYZSkpLmMsdXQ9TXQu''@;'; put 'put ''cix6ZT1NdC5lKSxvbj1IdFtEZT16ZStDbisxXSxpdD1YZS8yLHV0PXV0fHxEZTwwfHxudWxsIT1IdFtEZSsxXSx1dD1VdDw0PyhudWxsIT1vbnx8dXQpJiYoMD09VXR8fFV0PT0oTXQuczwwPzM6MikpOml0PG9ufHxvbj09aXQmJig0PT1VdHx8dXR8fDY9PVV0JiYxJkh0W0RlLTFdfHxVdD09''@;'; put 'put ''KE10LnM8MD84OjcpKSxEZTwxfHwhSHRbMF0pVGU9dXQ/dGUoTWUuY2hhckF0KDEpLC1DbixNZS5jaGFyQXQoMCkpOk1lLmNoYXJBdCgwKTtlbHNle2lmKEh0Lmxlbmd0aD1EZSx1dClmb3IoLS1YZTsrK0h0Wy0tRGVdPlhlOylIdFtEZV09MCxEZXx8KCsremUsSHQ9WzFdLmNvbmNhdChIdCkp''@;'; put 'put ''O2ZvcihpdD1IdC5sZW5ndGg7IUh0Wy0taXRdOyk7Zm9yKG9uPTAsVGU9IiI7b248PWl0O1RlKz1NZS5jaGFyQXQoSHRbb24rK10pKTtUZT10ZShUZSx6ZSxNZS5jaGFyQXQoMCkpfXJldHVybiBUZX19KCksaGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBiZShxZSxYZSxVZSl7dmFyIGh0LE1lLERl''@;'; put 'put ''LHplLGl0PTAsdXQ9cWUubGVuZ3RoLE10PVhlJWosSHQ9WGUvanwwO2ZvcihxZT1xZS5zbGljZSgpO3V0LS07KWl0PSgoTWU9TXQqKERlPXFlW3V0XSVqKSsoaHQ9SHQqRGUrKHplPXFlW3V0XS9qfDApKk10KSVqKmoraXQpL1VlfDApKyhodC9qfDApK0h0KnplLHFlW3V0XT1NZSVVZTtyZXR1''@;'; put 'put ''cm4gaXQmJihxZT1baXRdLmNvbmNhdChxZSkpLHFlfWZ1bmN0aW9uIEFlKHFlLFhlLFVlLGh0KXt2YXIgTWUsRGU7aWYoVWUhPWh0KURlPWh0PFVlPzE6LTE7ZWxzZSBmb3IoTWU9RGU9MDtNZTxVZTtNZSsrKWlmKHFlW01lXSE9WGVbTWVdKXtEZT1xZVtNZV0+WGVbTWVdPzE6LTE7YnJlYWt9''@;'; put 'put ''cmV0dXJuIERlfWZ1bmN0aW9uIFRlKHFlLFhlLFVlLGh0KXtmb3IodmFyIE1lPTA7VWUtLTspcWVbVWVdLT1NZSxxZVtVZV09KE1lPXFlW1VlXTxYZVtVZV0/MTowKSpodCtxZVtVZV0tWGVbVWVdO2Zvcig7IXFlWzBdJiYxPHFlLmxlbmd0aDtxZS5zcGxpY2UoMCwxKSk7fXJldHVybiBmdW5j''@;'; put 'put ''dGlvbihxZSxYZSxVZSxodCxNZSl7dmFyIERlLHplLGl0LHV0LE10LEh0LFB0LG9uLENuLFV0LGJuLFduLGVuLCRuLEhuLGZ0LGZuLGhuPXFlLnM9PVhlLnM/MTotMSx3dD1xZS5jLFh0PVhlLmM7aWYoISh3dCYmd3RbMF0mJlh0JiZYdFswXSkpcmV0dXJuIG5ldyBXZShxZS5zJiZYZS5zJiYo''@;'; put 'put ''d3Q/IVh0fHx3dFswXSE9WHRbMF06WHQpP3d0JiYwPT13dFswXXx8IVh0PzAqaG46aG4vMDpOYU4pO2ZvcihDbj0ob249bmV3IFdlKGhuKSkuYz1bXSxobj1VZSsoemU9cWUuZS1YZS5lKSsxLE1lfHwoTWU9Syx6ZT1CKHFlLmUvSSktQihYZS5lL0kpLGhuPWhuL0l8MCksaXQ9MDtYdFtpdF09''@;'; put 'put ''PSh3dFtpdF18fDApO2l0KyspO2lmKFh0W2l0XT4od3RbaXRdfHwwKSYmemUtLSxobjwwKUNuLnB1c2goMSksdXQ9ITA7ZWxzZXtmb3IoJG49d3QubGVuZ3RoLGZ0PVh0Lmxlbmd0aCxobis9MiwxPChNdD1PKE1lLyhYdFtpdD0wXSsxKSkpJiYoWHQ9YmUoWHQsTXQsTWUpLHd0PWJlKHd0LE10''@;'; put 'put ''LE1lKSxmdD1YdC5sZW5ndGgsJG49d3QubGVuZ3RoKSxlbj1mdCxibj0oVXQ9d3Quc2xpY2UoMCxmdCkpLmxlbmd0aDtibjxmdDtVdFtibisrXT0wKTtmbj1YdC5zbGljZSgpLGZuPVswXS5jb25jYXQoZm4pLEhuPVh0WzBdLFh0WzFdPj1NZS8yJiZIbisrO2Rve2lmKE10PTAsKERlPUFlKFh0''@;'; put 'put ''LFV0LGZ0LGJuKSk8MCl7aWYoV249VXRbMF0sZnQhPWJuJiYoV249V24qTWUrKFV0WzFdfHwwKSksMTwoTXQ9TyhXbi9IbikpKWZvcihNZTw9TXQmJihNdD1NZS0xKSxQdD0oSHQ9YmUoWHQsTXQsTWUpKS5sZW5ndGgsYm49VXQubGVuZ3RoOzE9PUFlKEh0LFV0LFB0LGJuKTspTXQtLSxUZShI''@;'; put 'put ''dCxmdDxQdD9mbjpYdCxQdCxNZSksUHQ9SHQubGVuZ3RoLERlPTE7ZWxzZSAwPT1NdCYmKERlPU10PTEpLFB0PShIdD1YdC5zbGljZSgpKS5sZW5ndGg7aWYoUHQ8Ym4mJihIdD1bMF0uY29uY2F0KEh0KSksVGUoVXQsSHQsYm4sTWUpLGJuPVV0Lmxlbmd0aCwtMT09RGUpZm9yKDtBZShYdCxV''@;'; put 'put ''dCxmdCxibik8MTspTXQrKyxUZShVdCxmdDxibj9mbjpYdCxibixNZSksYm49VXQubGVuZ3RofWVsc2UgMD09PURlJiYoTXQrKyxVdD1bMF0pO0NuW2l0KytdPU10LFV0WzBdP1V0W2JuKytdPXd0W2VuXXx8MDooVXQ9W3d0W2VuXV0sYm49MSl9d2hpbGUoKGVuKys8JG58fG51bGwhPVV0WzBd''@;'; put 'put ''KSYmaG4tLSk7dXQ9bnVsbCE9VXRbMF0sQ25bMF18fENuLnNwbGljZSgwLDEpfWlmKE1lPT1LKXtmb3IoaXQ9MSxobj1DblswXTsxMDw9aG47aG4vPTEwLGl0KyspO2x0KG9uLFVlKyhvbi5lPWl0K3plKkktMSkrMSxodCx1dCl9ZWxzZSBvbi5lPXplLG9uLnI9K3V0O3JldHVybiBvbn19KCks''@;'; put 'put ''RD0vXigtPykwKFt4Ym9dKSg/PVx3W1x3Ll0qJCkvaSxIPS9eKFteLl0rKVwuJC8sTj0vXlwuKFteLl0rKSQvLGc9L14tPyhJbmZpbml0eXxOYU4pJC8sQz0vXlxzKlwrKD89W1x3Ll0pfF5ccyt8XHMrJC9nLGNlPWZ1bmN0aW9uKGJlLEFlLFRlLHFlKXt2YXIgWGUsVWU9VGU/QWU6QWUucmVw''@;'; put 'put ''bGFjZShDLCIiKTtpZihnLnRlc3QoVWUpKWJlLnM9aXNOYU4oVWUpP251bGw6VWU8MD8tMToxLGJlLmM9YmUuZT1udWxsO2Vsc2V7aWYoIVRlJiYoVWU9VWUucmVwbGFjZShELGZ1bmN0aW9uKGh0LE1lLERlKXtyZXR1cm4gWGU9IngiPT0oRGU9RGUudG9Mb3dlckNhc2UoKSk/MTY6ImIiPT1E''@;'; put 'put ''ZT8yOjgscWUmJnFlIT1YZT9odDpNZX0pLHFlJiYoWGU9cWUsVWU9VWUucmVwbGFjZShILCIkMSIpLnJlcGxhY2UoTiwiMC4kMSIpKSxBZSE9VWUpKXJldHVybiBuZXcgV2UoVWUsWGUpO2lmKFdlLkRFQlVHKXRocm93IEVycm9yKFIrIk5vdCBhIisocWU/IiBiYXNlICIrcWU6IiIpKyIgbnVt''@;'; put 'put ''YmVyOiAiK0FlKTtiZS5jPWJlLmU9YmUucz1udWxsfX0sUy5hYnNvbHV0ZVZhbHVlPVMuYWJzPWZ1bmN0aW9uKCl7dmFyIGJlPW5ldyBXZSh0aGlzKTtyZXR1cm4gYmUuczwwJiYoYmUucz0xKSxiZX0sUy5jb21wYXJlZFRvPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gWCh0aGlzLG5ldyBXZShi''@;'; put 'put ''ZSxBZSkpfSxTLmRlY2ltYWxQbGFjZXM9Uy5kcD1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlLFhlO2lmKG51bGwhPWJlKXJldHVybiBVKGJlLDAsViksbnVsbD09QWU/QWU9dzpVKEFlLDAsOCksbHQobmV3IFdlKHRoaXMpLGJlK3RoaXMuZSsxLEFlKTtpZighKFRlPXRoaXMuYykpcmV0dXJu''@;'; put 'put ''IG51bGw7aWYocWU9KChYZT1UZS5sZW5ndGgtMSktQih0aGlzLmUvSSkpKkksWGU9VGVbWGVdKWZvcig7WGUlMTA9PTA7WGUvPTEwLHFlLS0pO3JldHVybiBxZTwwJiYocWU9MCkscWV9LFMuZGl2aWRlZEJ5PVMuZGl2PWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gaGUodGhpcyxuZXcgV2UoYmUs''@;'; put 'put ''QWUpLHAsdyl9LFMuZGl2aWRlZFRvSW50ZWdlckJ5PVMuaWRpdj1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIGhlKHRoaXMsbmV3IFdlKGJlLEFlKSwwLDEpfSxTLmV4cG9uZW50aWF0ZWRCeT1TLnBvdz1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlLFhlLFVlLGh0LE1lLERlLHplLGl0PXRoaXM7''@;'; put 'put ''aWYoKGJlPW5ldyBXZShiZSkpLmMmJiFiZS5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcihSKyJFeHBvbmVudCBub3QgYW4gaW50ZWdlcjogIitQZShiZSkpO2lmKG51bGwhPUFlJiYoQWU9bmV3IFdlKEFlKSksaHQ9MTQ8YmUuZSwhaXQuY3x8IWl0LmNbMF18fDE9PWl0LmNbMF0mJiFpdC5lJiYx''@;'; put 'put ''PT1pdC5jLmxlbmd0aHx8IWJlLmN8fCFiZS5jWzBdKXJldHVybiB6ZT1uZXcgV2UoTWF0aC5wb3coK1BlKGl0KSxodD8yLXEoYmUpOitQZShiZSkpKSxBZT96ZS5tb2QoQWUpOnplO2lmKE1lPWJlLnM8MCxBZSl7aWYoQWUuYz8hQWUuY1swXTohQWUucylyZXR1cm4gbmV3IFdlKE5hTik7KHFl''@;'; put 'put ''PSFNZSYmaXQuaXNJbnRlZ2VyKCkmJkFlLmlzSW50ZWdlcigpKSYmKGl0PWl0Lm1vZChBZSkpfWVsc2V7aWYoOTxiZS5lJiYoMDxpdC5lfHxpdC5lPC0xfHwoMD09aXQuZT8xPGl0LmNbMF18fGh0JiYyNGU3PD1pdC5jWzFdOml0LmNbMF08OGUxM3x8aHQmJml0LmNbMF08PTk5OTk5NzVlNykp''@;'; put 'put ''KXJldHVybiBVZT1pdC5zPDAmJnEoYmUpPy0wOjAsLTE8aXQuZSYmKFVlPTEvVWUpLG5ldyBXZShNZT8xL1VlOlVlKTtGZSYmKFVlPU0oRmUvSSsyKSl9Zm9yKERlPWh0PyhUZT1uZXcgV2UoLjUpLE1lJiYoYmUucz0xKSxxKGJlKSk6KFhlPU1hdGguYWJzKCtQZShiZSkpKSUyLHplPW5ldyBX''@;'; put 'put ''ZSh2KTs7KXtpZihEZSl7aWYoISh6ZT16ZS50aW1lcyhpdCkpLmMpYnJlYWs7VWU/emUuYy5sZW5ndGg+VWUmJih6ZS5jLmxlbmd0aD1VZSk6cWUmJih6ZT16ZS5tb2QoQWUpKX1pZihYZSl7aWYoMD09PShYZT1PKFhlLzIpKSlicmVhaztEZT1YZSUyfWVsc2UgaWYobHQoYmU9YmUudGltZXMo''@;'; put 'put ''VGUpLGJlLmUrMSwxKSwxNDxiZS5lKURlPXEoYmUpO2Vsc2V7aWYoMD09KFhlPStQZShiZSkpKWJyZWFrO0RlPVhlJTJ9aXQ9aXQudGltZXMoaXQpLFVlP2l0LmMmJml0LmMubGVuZ3RoPlVlJiYoaXQuYy5sZW5ndGg9VWUpOnFlJiYoaXQ9aXQubW9kKEFlKSl9cmV0dXJuIHFlP3plOihNZSYm''@;'; put 'put ''KHplPXYuZGl2KHplKSksQWU/emUubW9kKEFlKTpVZT9sdCh6ZSxGZSx3LHZvaWQgMCk6emUpfSxTLmludGVnZXJWYWx1ZT1mdW5jdGlvbihiZSl7dmFyIEFlPW5ldyBXZSh0aGlzKTtyZXR1cm4gbnVsbD09YmU/YmU9dzpVKGJlLDAsOCksbHQoQWUsQWUuZSsxLGJlKX0sUy5pc0VxdWFsVG89''@;'; put 'put ''Uy5lcT1mdW5jdGlvbihiZSxBZSl7cmV0dXJuIDA9PT1YKHRoaXMsbmV3IFdlKGJlLEFlKSl9LFMuaXNGaW5pdGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY30sUy5pc0dyZWF0ZXJUaGFuPVMuZ3Q9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiAwPFgodGhpcyxuZXcgV2UoYmUsQWUpKX0sUy5p''@;'; put 'put ''c0dyZWF0ZXJUaGFuT3JFcXVhbFRvPVMuZ3RlPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4gMT09PShBZT1YKHRoaXMsbmV3IFdlKGJlLEFlKSkpfHwwPT09QWV9LFMuaXNJbnRlZ2VyPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJkIodGhpcy5lL0kpPnRoaXMuYy5sZW5ndGgtMn0sUy5pc0xl''@;'; put 'put ''c3NUaGFuPVMubHQ9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBYKHRoaXMsbmV3IFdlKGJlLEFlKSk8MH0sUy5pc0xlc3NUaGFuT3JFcXVhbFRvPVMubHRlPWZ1bmN0aW9uKGJlLEFlKXtyZXR1cm4tMT09PShBZT1YKHRoaXMsbmV3IFdlKGJlLEFlKSkpfHwwPT09QWV9LFMuaXNOYU49ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4hdGhpcy5zfSxTLmlzTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDB9LFMuaXNQb3NpdGl2ZT1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuc30sUy5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmMD09dGhpcy5jWzBdfSxTLm1pbnVzPWZ1bmN0''@;'; put 'put ''aW9uKGJlLEFlKXt2YXIgVGUscWUsWGUsVWUsaHQ9dGhpcyxNZT1odC5zO2lmKEFlPShiZT1uZXcgV2UoYmUsQWUpKS5zLCFNZXx8IUFlKXJldHVybiBuZXcgV2UoTmFOKTtpZihNZSE9QWUpcmV0dXJuIGJlLnM9LUFlLGh0LnBsdXMoYmUpO3ZhciBEZT1odC5lL0ksemU9YmUuZS9JLGl0PWh0''@;'; put 'put ''LmMsdXQ9YmUuYztpZighRGV8fCF6ZSl7aWYoIWl0fHwhdXQpcmV0dXJuIGl0PyhiZS5zPS1BZSxiZSk6bmV3IFdlKHV0P2h0Ok5hTik7aWYoIWl0WzBdfHwhdXRbMF0pcmV0dXJuIHV0WzBdPyhiZS5zPS1BZSxiZSk6bmV3IFdlKGl0WzBdP2h0OjM9PXc/LTA6MCl9aWYoRGU9QihEZSksemU9''@;'; put 'put ''Qih6ZSksaXQ9aXQuc2xpY2UoKSxNZT1EZS16ZSl7Zm9yKChYZT0oVWU9TWU8MCk/KE1lPS1NZSxpdCk6KHplPURlLHV0KSkucmV2ZXJzZSgpLEFlPU1lO0FlLS07WGUucHVzaCgwKSk7WGUucmV2ZXJzZSgpfWVsc2UgZm9yKHFlPShVZT0oTWU9aXQubGVuZ3RoKTwoQWU9dXQubGVuZ3RoKSk/''@;'; put 'put ''TWU6QWUsTWU9QWU9MDtBZTxxZTtBZSsrKWlmKGl0W0FlXSE9dXRbQWVdKXtVZT1pdFtBZV08dXRbQWVdO2JyZWFrfWlmKFVlJiYoWGU9aXQsaXQ9dXQsdXQ9WGUsYmUucz0tYmUucyksMDwoQWU9KHFlPXV0Lmxlbmd0aCktKFRlPWl0Lmxlbmd0aCkpKWZvcig7QWUtLTtpdFtUZSsrXT0wKTtm''@;'; put 'put ''b3IoQWU9Sy0xO01lPHFlOyl7aWYoaXRbLS1xZV08dXRbcWVdKXtmb3IoVGU9cWU7VGUmJiFpdFstLVRlXTtpdFtUZV09QWUpOy0taXRbVGVdLGl0W3FlXSs9S31pdFtxZV0tPXV0W3FlXX1mb3IoOzA9PWl0WzBdO2l0LnNwbGljZSgwLDEpLC0temUpO3JldHVybiBpdFswXT9KZShiZSxpdCx6''@;'; put 'put ''ZSk6KGJlLnM9Mz09dz8tMToxLGJlLmM9W2JlLmU9MF0sYmUpfSxTLm1vZHVsbz1TLm1vZD1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlLFhlPXRoaXM7cmV0dXJuIGJlPW5ldyBXZShiZSxBZSksIVhlLmN8fCFiZS5zfHxiZS5jJiYhYmUuY1swXT9uZXcgV2UoTmFOKTohYmUuY3x8WGUuYyYm''@;'; put 'put ''IVhlLmNbMF0/bmV3IFdlKFhlKTooOT09TGU/KHFlPWJlLnMsYmUucz0xLFRlPWhlKFhlLGJlLDAsMyksYmUucz1xZSxUZS5zKj1xZSk6VGU9aGUoWGUsYmUsMCxMZSksKGJlPVhlLm1pbnVzKFRlLnRpbWVzKGJlKSkpLmNbMF18fDEhPUxlfHwoYmUucz1YZS5zKSxiZSl9LFMubXVsdGlwbGll''@;'; put 'put ''ZEJ5PVMudGltZXM9ZnVuY3Rpb24oYmUsQWUpe3ZhciBUZSxxZSxYZSxVZSxodCxNZSxEZSx6ZSxpdCx1dCxNdCxIdCxQdCxvbixDbixVdD10aGlzLGJuPVV0LmMsV249KGJlPW5ldyBXZShiZSxBZSkpLmM7aWYoIShibiYmV24mJmJuWzBdJiZXblswXSkpcmV0dXJuIVV0LnN8fCFiZS5zfHxi''@;'; put 'put ''biYmIWJuWzBdJiYhV258fFduJiYhV25bMF0mJiFibj9iZS5jPWJlLmU9YmUucz1udWxsOihiZS5zKj1VdC5zLGJuJiZXbj8oYmUuYz1bMF0sYmUuZT0wKTpiZS5jPWJlLmU9bnVsbCksYmU7Zm9yKHFlPUIoVXQuZS9JKStCKGJlLmUvSSksYmUucyo9VXQucywoRGU9Ym4ubGVuZ3RoKTwodXQ9''@;'; put 'put ''V24ubGVuZ3RoKSYmKFB0PWJuLGJuPVduLFduPVB0LFhlPURlLERlPXV0LHV0PVhlKSxYZT1EZSt1dCxQdD1bXTtYZS0tO1B0LnB1c2goMCkpO2Zvcihvbj1LLENuPWosWGU9dXQ7MDw9LS1YZTspe2ZvcihUZT0wLE10PVduW1hlXSVDbixIdD1XbltYZV0vQ258MCxVZT1YZSsoaHQ9RGUpO1hl''@;'; put 'put ''PFVlOylUZT0oKHplPU10Kih6ZT1iblstLWh0XSVDbikrKE1lPUh0KnplKyhpdD1ibltodF0vQ258MCkqTXQpJUNuKkNuK1B0W1VlXStUZSkvb258MCkrKE1lL0NufDApK0h0Kml0LFB0W1VlLS1dPXplJW9uO1B0W1VlXT1UZX1yZXR1cm4gVGU/KytxZTpQdC5zcGxpY2UoMCwxKSxKZShiZSxQ''@;'; put 'put ''dCxxZSl9LFMubmVnYXRlZD1mdW5jdGlvbigpe3ZhciBiZT1uZXcgV2UodGhpcyk7cmV0dXJuIGJlLnM9LWJlLnN8fG51bGwsYmV9LFMucGx1cz1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlPXRoaXMsWGU9cWUucztpZihBZT0oYmU9bmV3IFdlKGJlLEFlKSkucywhWGV8fCFBZSlyZXR1cm4g''@;'; put 'put ''bmV3IFdlKE5hTik7aWYoWGUhPUFlKXJldHVybiBiZS5zPS1BZSxxZS5taW51cyhiZSk7dmFyIFVlPXFlLmUvSSxodD1iZS5lL0ksTWU9cWUuYyxEZT1iZS5jO2lmKCFVZXx8IWh0KXtpZighTWV8fCFEZSlyZXR1cm4gbmV3IFdlKFhlLzApO2lmKCFNZVswXXx8IURlWzBdKXJldHVybiBEZVsw''@;'; put 'put ''XT9iZTpuZXcgV2UoTWVbMF0/cWU6MCpYZSl9aWYoVWU9QihVZSksaHQ9QihodCksTWU9TWUuc2xpY2UoKSxYZT1VZS1odCl7Zm9yKChUZT0wPFhlPyhodD1VZSxEZSk6KFhlPS1YZSxNZSkpLnJldmVyc2UoKTtYZS0tO1RlLnB1c2goMCkpO1RlLnJldmVyc2UoKX1mb3IoKFhlPU1lLmxlbmd0''@;'; put 'put ''aCktKEFlPURlLmxlbmd0aCk8MCYmKFRlPURlLERlPU1lLE1lPVRlLEFlPVhlKSxYZT0wO0FlOylYZT0oTWVbLS1BZV09TWVbQWVdK0RlW0FlXStYZSkvS3wwLE1lW0FlXT1LPT09TWVbQWVdPzA6TWVbQWVdJUs7cmV0dXJuIFhlJiYoTWU9W1hlXS5jb25jYXQoTWUpLCsraHQpLEplKGJlLE1l''@;'; put 'put ''LGh0KX0sUy5wcmVjaXNpb249Uy5zZD1mdW5jdGlvbihiZSxBZSl7dmFyIFRlLHFlLFhlO2lmKG51bGwhPWJlJiZiZSE9PSEhYmUpcmV0dXJuIFUoYmUsMSxWKSxudWxsPT1BZT9BZT13OlUoQWUsMCw4KSxsdChuZXcgV2UodGhpcyksYmUsQWUpO2lmKCEoVGU9dGhpcy5jKSlyZXR1cm4gbnVs''@;'; put 'put ''bDtpZihxZT0oWGU9VGUubGVuZ3RoLTEpKkkrMSxYZT1UZVtYZV0pe2Zvcig7WGUlMTA9PTA7WGUvPTEwLHFlLS0pO2ZvcihYZT1UZVswXTsxMDw9WGU7WGUvPTEwLHFlKyspO31yZXR1cm4gYmUmJnRoaXMuZSsxPnFlJiYocWU9dGhpcy5lKzEpLHFlfSxTLnNoaWZ0ZWRCeT1mdW5jdGlvbihi''@;'; put 'put ''ZSl7cmV0dXJuIFUoYmUsLWssayksdGhpcy50aW1lcygiMWUiK2JlKX0sUy5zcXVhcmVSb290PVMuc3FydD1mdW5jdGlvbigpe3ZhciBiZSxBZSxUZSxxZSxYZSxVZT10aGlzLGh0PVVlLmMsTWU9VWUucyxEZT1VZS5lLHplPXArNCxpdD1uZXcgV2UoIjAuNSIpO2lmKDEhPT1NZXx8IWh0fHwh''@;'; put 'put ''aHRbMF0pcmV0dXJuIG5ldyBXZSghTWV8fE1lPDAmJighaHR8fGh0WzBdKT9OYU46aHQ/VWU6MS8wKTtpZigoVGU9MD09KE1lPU1hdGguc3FydCgrUGUoVWUpKSl8fE1lPT0xLzA/KCgoQWU9WShodCkpLmxlbmd0aCtEZSklMj09MCYmKEFlKz0iMCIpLE1lPU1hdGguc3FydCgrQWUpLERlPUIo''@;'; put 'put ''KERlKzEpLzIpLShEZTwwfHxEZSUyKSxuZXcgV2UoQWU9TWU9PTEvMD8iMWUiK0RlOihBZT1NZS50b0V4cG9uZW50aWFsKCkpLnNsaWNlKDAsQWUuaW5kZXhPZigiZSIpKzEpK0RlKSk6bmV3IFdlKE1lKyIiKSkuY1swXSlmb3IoKE1lPShEZT1UZS5lKSt6ZSk8MyYmKE1lPTApOzspaWYoVGU9''@;'; put 'put ''aXQudGltZXMoKFhlPVRlKS5wbHVzKGhlKFVlLFhlLHplLDEpKSksWShYZS5jKS5zbGljZSgwLE1lKT09PShBZT1ZKFRlLmMpKS5zbGljZSgwLE1lKSl7aWYoVGUuZTxEZSYmLS1NZSwiOTk5OSIhPShBZT1BZS5zbGljZShNZS0zLE1lKzEpKSYmKHFlfHwiNDk5OSIhPUFlKSl7K0FlJiYoK0Fl''@;'; put 'put ''LnNsaWNlKDEpfHwiNSIhPUFlLmNoYXJBdCgwKSl8fChsdChUZSxUZS5lK3ArMiwxKSxiZT0hVGUudGltZXMoVGUpLmVxKFVlKSk7YnJlYWt9aWYoIXFlJiYobHQoWGUsWGUuZStwKzIsMCksWGUudGltZXMoWGUpLmVxKFVlKSkpe1RlPVhlO2JyZWFrfXplKz00LE1lKz00LHFlPTF9cmV0dXJu''@;'; put 'put ''IGx0KFRlLFRlLmUrcCsxLHcsYmUpfSxTLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBudWxsIT1iZSYmKFUoYmUsMCxWKSxiZSsrKSxLZSh0aGlzLGJlLEFlLDEpfSxTLnRvRml4ZWQ9ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBudWxsIT1iZSYmKFUoYmUsMCxWKSxiZT1i''@;'; put 'put ''ZSt0aGlzLmUrMSksS2UodGhpcyxiZSxBZSl9LFMudG9Gb3JtYXQ9ZnVuY3Rpb24oYmUsQWUsVGUpe3ZhciBxZTtpZihudWxsPT1UZSludWxsIT1iZSYmQWUmJiJvYmplY3QiPT10eXBlb2YgQWU/KFRlPUFlLEFlPW51bGwpOmJlJiYib2JqZWN0Ij09dHlwZW9mIGJlPyhUZT1iZSxiZT1BZT1u''@;'; put 'put ''dWxsKTpUZT1PZTtlbHNlIGlmKCJvYmplY3QiIT10eXBlb2YgVGUpdGhyb3cgRXJyb3IoUisiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIitUZSk7aWYocWU9dGhpcy50b0ZpeGVkKGJlLEFlKSx0aGlzLmMpe3ZhciBYZSxVZT1xZS5zcGxpdCgiLiIpLGh0PStUZS5ncm91cFNpemUsTWU9K1Rl''@;'; put 'put ''LnNlY29uZGFyeUdyb3VwU2l6ZSxEZT1UZS5ncm91cFNlcGFyYXRvcnx8IiIsemU9VWVbMF0saXQ9VWVbMV0sdXQ9dGhpcy5zPDAsTXQ9dXQ/emUuc2xpY2UoMSk6emUsSHQ9TXQubGVuZ3RoO2lmKE1lJiYoWGU9aHQsaHQ9TWUsSHQtPU1lPVhlKSwwPGh0JiYwPEh0KXtmb3IoemU9TXQuc3Vi''@;'; put 'put ''c3RyKDAsWGU9SHQlaHR8fGh0KTtYZTxIdDtYZSs9aHQpemUrPURlK010LnN1YnN0cihYZSxodCk7MDxNZSYmKHplKz1EZStNdC5zbGljZShYZSkpLHV0JiYoemU9Ii0iK3plKX1xZT1pdD96ZSsoVGUuZGVjaW1hbFNlcGFyYXRvcnx8IiIpKygoTWU9K1RlLmZyYWN0aW9uR3JvdXBTaXplKT9p''@;'; put 'put ''dC5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcZHsiK01lKyJ9XFxCIiwiZyIpLCIkJiIrKFRlLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIiKSk6aXQpOnplfXJldHVybihUZS5wcmVmaXh8fCIiKStxZSsoVGUuc3VmZml4fHwiIil9LFMudG9GcmFjdGlvbj1mdW5jdGlvbihiZSl7dmFyIEFlLFRl''@;'; put 'put ''LHFlLFhlLFVlLGh0LE1lLERlLHplLGl0LHV0LE10LEh0PXRoaXMsUHQ9SHQuYztpZihudWxsIT1iZSYmKCEoTWU9bmV3IFdlKGJlKSkuaXNJbnRlZ2VyKCkmJihNZS5jfHwxIT09TWUucyl8fE1lLmx0KHYpKSl0aHJvdyBFcnJvcihSKyJBcmd1bWVudCAiKyhNZS5pc0ludGVnZXIoKT8ib3V0''@;'; put 'put ''IG9mIHJhbmdlOiAiOiJub3QgYW4gaW50ZWdlcjogIikrUGUoTWUpKTtpZighUHQpcmV0dXJuIG5ldyBXZShIdCk7Zm9yKEFlPW5ldyBXZSh2KSx6ZT1UZT1uZXcgV2UodikscWU9RGU9bmV3IFdlKHYpLE10PVkoUHQpLFVlPUFlLmU9TXQubGVuZ3RoLUh0LmUtMSxBZS5jWzBdPUVbKGh0PVVl''@;'; put 'put ''JUkpPDA/SStodDpodF0sYmU9IWJlfHwwPE1lLmNvbXBhcmVkVG8oQWUpPzA8VWU/QWU6emU6TWUsaHQ9ZmUsZmU9MS8wLE1lPW5ldyBXZShNdCksRGUuY1swXT0wO2l0PWhlKE1lLEFlLDAsMSksMSE9KFhlPVRlLnBsdXMoaXQudGltZXMocWUpKSkuY29tcGFyZWRUbyhiZSk7KVRlPXFlLHFl''@;'; put 'put ''PVhlLHplPURlLnBsdXMoaXQudGltZXMoWGU9emUpKSxEZT1YZSxBZT1NZS5taW51cyhpdC50aW1lcyhYZT1BZSkpLE1lPVhlO3JldHVybiBYZT1oZShiZS5taW51cyhUZSkscWUsMCwxKSxEZT1EZS5wbHVzKFhlLnRpbWVzKHplKSksVGU9VGUucGx1cyhYZS50aW1lcyhxZSkpLERlLnM9emUu''@;'; put 'put ''cz1IdC5zLHV0PWhlKHplLHFlLFVlKj0yLHcpLm1pbnVzKEh0KS5hYnMoKS5jb21wYXJlZFRvKGhlKERlLFRlLFVlLHcpLm1pbnVzKEh0KS5hYnMoKSk8MT9bemUscWVdOltEZSxUZV0sZmU9aHQsdXR9LFMudG9OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4rUGUodGhpcyl9LFMudG9QcmVjaXNp''@;'; put 'put ''b249ZnVuY3Rpb24oYmUsQWUpe3JldHVybiBudWxsIT1iZSYmVShiZSwxLFYpLEtlKHRoaXMsYmUsQWUsMil9LFMudG9TdHJpbmc9ZnVuY3Rpb24oYmUpe3ZhciBBZSxUZT10aGlzLHFlPVRlLnMsWGU9VGUuZTtyZXR1cm4gbnVsbD09PVhlP3FlPyhBZT0iSW5maW5pdHkiLHFlPDAmJihBZT0i''@;'; put 'put ''LSIrQWUpKTpBZT0iTmFOIjooQWU9bnVsbD09YmU/WGU8PUp8fG5lPD1YZT9lZShZKFRlLmMpLFhlKTp0ZShZKFRlLmMpLFhlLCIwIik6MTA9PT1iZT90ZShZKChUZT1sdChuZXcgV2UoVGUpLHArWGUrMSx3KSkuYyksVGUuZSwiMCIpOihVKGJlLDIsamUubGVuZ3RoLCJCYXNlIiksdWUodGUo''@;'; put 'put ''WShUZS5jKSxYZSwiMCIpLDEwLGJlLHFlLCEwKSkscWU8MCYmVGUuY1swXSYmKEFlPSItIitBZSkpLEFlfSxTLnZhbHVlT2Y9Uy50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyl9LFMuX2lzQmlnTnVtYmVyPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgU3ltYm9sLml0ZXJhdG9yJiYoU1tTeW1ib2wudG9TdHJpbmdUYWddPSJCaWdOdW1iZXIiLFNbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09Uy52YWx1ZU9mKSxudWxsIT1zZSYmV2Uuc2V0KHNlKSxXZX0oKSkuZGVmYXVsdD1tLkJpZ051bWJlcj1tLHZv''@;'; put 'put ''aWQgMCE9PUYmJkYuZXhwb3J0cz9GLmV4cG9ydHM9bTooeHx8KHg9dHlwZW9mIHNlbGY8InUiJiZzZWxmP3NlbGY6d2luZG93KSx4LkJpZ051bWJlcj1tKX0odGhpcyl9LHt9XSwyOltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPXtsYW5ndWFnZVRhZzoiZW4tVVMi''@;'; put 'put ''LGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oeCl7dmFyIG09eCUxMDtyZXR1cm4gMT09''@;'; put 'put ''fn4oeCUxMDAvMTApPyJ0aCI6MT09PW0/InN0IjoyPT09bT8ibmQiOjM9PT1tPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJl''@;'; put 'put ''bmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX19LHt9XSwzOltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChCLFkp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihYKXtpZihBcnJheS5pc0FycmF5KFgpKXJldHVybiBYfShCKXx8ZnVuY3Rpb24oWCxVKXt2YXIgcT1bXSxlZT0hMCx0ZT0hMSxvZT12b2lkIDA7dHJ5e2Zvcih2YXIgc2UsaGU9WFtTeW1ib2wuaXRlcmF0b3JdKCk7IShlZT0oc2U9aGUubmV4dCgpKS5kb25lKSYm''@;'; put 'put ''KHEucHVzaChzZS52YWx1ZSksIVV8fHEubGVuZ3RoIT09VSk7ZWU9ITApO31jYXRjaCh1ZSl7dGU9ITAsb2U9dWV9ZmluYWxseXt0cnl7ZWV8fG51bGw9PWhlLnJldHVybnx8aGUucmV0dXJuKCl9ZmluYWxseXtpZih0ZSl0aHJvdyBvZX19cmV0dXJuIHF9KEIsWSl8fGZ1bmN0aW9uKCl7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBtPUllKCIuL2dsb2JhbFN0YXRlIiksbGU9SWUoIi4vdmFsaWRhdGluZyIpLE09SWUoIi4vcGFyc2luZyIpLE89WyJCIiwiS0IiLCJNQiIsIkdCIiwi''@;'; put 'put ''VEIiLCJQQiIsIkVCIiwiWkIiLCJZQiJdLFI9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6TyxtYXJrZXI6ImJkIn0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdpQiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLG1hcmtlcjoiYiJ9''@;'; put 'put ''LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpPLG1hcmtlcjoiZCJ9fSx6PXt0b3RhbExlbmd0aDowLGNoYXJhY3RlcmlzdGljOjAsZm9yY2VBdmVyYWdlOiExLGF2ZXJhZ2U6ITEsbWFudGlzc2E6LTEsb3B0aW9uYWxNYW50aXNzYTohMCx0aG91c2FuZFNlcGFyYXRlZDohMSxzcGFjZVNl''@;'; put 'put ''cGFyYXRlZDohMSxuZWdhdGl2ZToic2lnbiIsZm9yY2VTaWduOiExfTtmdW5jdGlvbiBLKEIpe3ZhciBZPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxYPTI8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgWSYmKFk9TS5wYXJzZUZvcm1hdChZKSksIWxlLnZhbGlkYXRlRm9ybWF0KFkpKXJldHVybiJFUlJPUjogaW52YWxpZCBmb3JtYXQiO3ZhciBVPVkucHJlZml4fHwiIixxPVkucG9zdGZpeHx8IiIsZWU9ZnVuY3Rpb24odGUsb2Usc2Upe3N3aXRjaChvZS5vdXRwdXQp''@;'; put 'put ''e2Nhc2UiY3VycmVuY3kiOnJldHVybiBmdW5jdGlvbihqZSxXZSxLZSl7dmFyIFllPUtlLmN1cnJlbnRDdXJyZW5jeSgpLEplPU9iamVjdC5hc3NpZ24oe30seixXZSksbHQ9dm9pZCAwLFBlPSIiLGJlPSEhSmUudG90YWxMZW5ndGh8fCEhSmUuZm9yY2VBdmVyYWdlfHxKZS5hdmVyYWdlLEFl''@;'; put 'put ''PVdlLmN1cnJlbmN5UG9zaXRpb258fFllLnBvc2l0aW9uLFRlPVdlLmN1cnJlbmN5U3ltYm9sfHxZZS5zeW1ib2w7SmUuc3BhY2VTZXBhcmF0ZWQmJihQZT0iICIpLCJpbmZpeCI9PT1BZSYmKGx0PVBlK1RlK1BlKTt2YXIgcWU9aih7aW5zdGFuY2U6amUscHJvdmlkZWRGb3JtYXQ6V2Usc3Rh''@;'; put 'put ''dGU6S2UsZGVjaW1hbFNlcGFyYXRvcjpsdH0pO3JldHVybiJwcmVmaXgiPT09QWUmJihxZT1qZS5fdmFsdWU8MCYmInNpZ24iPT09SmUubmVnYXRpdmU/Ii0iLmNvbmNhdChQZSkuY29uY2F0KFRlKS5jb25jYXQocWUuc2xpY2UoMSkpOlRlK1BlK3FlKSxBZSYmInBvc3RmaXgiIT09QWV8fChx''@;'; put 'put ''ZT1xZSsoUGU9YmU/IiI6UGUpK1RlKSxxZX0odGUsb2U9VihvZSxtLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSksbSk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gb2U9VihvZSxtLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdCgpKSxLZT1tLEplPShXZT1vZSkucHJlZml4U3lt''@;'; put 'put ''Ym9sLGx0PWooe2luc3RhbmNlOnNlKDEwMCp0ZS5fdmFsdWUpLHByb3ZpZGVkRm9ybWF0OldlLHN0YXRlOktlfSksUGU9T2JqZWN0LmFzc2lnbih7fSx6LFdlKSxKZT8iJSIuY29uY2F0KFBlLnNwYWNlU2VwYXJhdGVkPyIgIjoiIikuY29uY2F0KGx0KToiIi5jb25jYXQobHQpLmNvbmNhdChQ''@;'; put 'put ''ZS5zcGFjZVNlcGFyYXRlZD8iICI6IiIsIiUiKTtjYXNlImJ5dGUiOnJldHVybiBvZT1WKG9lLG0uY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCkpLHc9bSxKPXNlLG5lPShwPW9lKS5iYXNlfHwiYmluYXJ5IixMZT0oZmU9SSh0ZS5fdmFsdWUsKGRlPVJbbmVdKS5zdWZmaXhlcyxkZS5zY2Fs''@;'; put 'put ''ZSkpLnN1ZmZpeCxGZT1qKHtpbnN0YW5jZTpKKGZlLnZhbHVlKSxwcm92aWRlZEZvcm1hdDpwLHN0YXRlOncsZGVmYXVsdHM6dy5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKX0pLE9lPXcuY3VycmVudEFiYnJldmlhdGlvbnMoKSwiIi5jb25jYXQoRmUpLmNvbmNhdChPZS5zcGFjZWQ/IiAi''@;'; put 'put ''OiIiKS5jb25jYXQoTGUpO2Nhc2UidGltZSI6cmV0dXJuIG9lPVYob2UsbS5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksTj10ZSxnPU1hdGguZmxvb3IoTi5fdmFsdWUvNjAvNjApLEM9TWF0aC5mbG9vcigoTi5fdmFsdWUtNjAqZyo2MCkvNjApLFM9TWF0aC5yb3VuZChOLl92YWx1ZS02''@;'; put 'put ''MCpnKjYwLTYwKkMpLCIiLmNvbmNhdChnLCI6IikuY29uY2F0KEM8MTA/IjAiOiIiKS5jb25jYXQoQywiOiIpLmNvbmNhdChTPDEwPyIwIjoiIikuY29uY2F0KFMpO2Nhc2Uib3JkaW5hbCI6cmV0dXJuIGhlPXRlLHVlPW9lPVYob2UsbS5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQoKSks''@;'; put 'put ''Rz0oY2U9bSkuY3VycmVudE9yZGluYWwoKSxiPU9iamVjdC5hc3NpZ24oe30seix1ZSksRD1qKHtpbnN0YW5jZTpoZSxwcm92aWRlZEZvcm1hdDp1ZSxzdGF0ZTpjZX0pLEg9RyhoZS5fdmFsdWUpLCIiLmNvbmNhdChEKS5jb25jYXQoYi5zcGFjZVNlcGFyYXRlZD8iICI6IiIpLmNvbmNhdChI''@;'; put 'put ''KTtkZWZhdWx0OnJldHVybiBqKHtpbnN0YW5jZTp0ZSxwcm92aWRlZEZvcm1hdDpvZSxudW1icm86c2V9KX12YXIgV2UsS2UsSmUsbHQsUGUsaGUsdWUsY2UsRyxiLEQsSCxOLGcsQyxTLHAsdyxKLG5lLGRlLGZlLExlLEZlLE9lfShCLFksWCk7cmV0dXJuKGVlPVUrZWUpK3F9ZnVuY3Rpb24g''@;'; put 'put ''SShCLFksWCl7dmFyIFU9WVswXSxxPU1hdGguYWJzKEIpO2lmKFg8PXEpe2Zvcih2YXIgZWU9MTtlZTxZLmxlbmd0aDsrK2VlKXt2YXIgdGU9TWF0aC5wb3coWCxlZSksb2U9TWF0aC5wb3coWCxlZSsxKTtpZih0ZTw9cSYmcTxvZSl7VT1ZW2VlXSxCLz10ZTticmVha319VT09PVlbMF0mJihC''@;'; put 'put ''Lz1NYXRoLnBvdyhYLFkubGVuZ3RoLTEpLFU9WVtZLmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOkIsc3VmZml4OlV9fWZ1bmN0aW9uIGsoQil7Zm9yKHZhciBZPSIiLFg9MDtYPEI7WCsrKVkrPSIwIjtyZXR1cm4gWX1mdW5jdGlvbiBqKEIpe3ZhciBZPUIuaW5zdGFuY2UsWD1CLnByb3ZpZGVk''@;'; put 'put ''Rm9ybWF0LFU9Qi5zdGF0ZSxxPXZvaWQgMD09PVU/bTpVLGVlPUIuZGVjaW1hbFNlcGFyYXRvcix0ZT1CLmRlZmF1bHRzLG9lPXZvaWQgMD09PXRlP3EuY3VycmVudERlZmF1bHRzKCk6dGUsc2U9WS5fdmFsdWU7aWYoMD09PXNlJiZxLmhhc1plcm9Gb3JtYXQoKSlyZXR1cm4gcS5nZXRaZXJv''@;'; put 'put ''Rm9ybWF0KCk7aWYoIWlzRmluaXRlKHNlKSlyZXR1cm4gc2UudG9TdHJpbmcoKTt2YXIgaGUsdWUsY2UsRyxiLEgsTixnPU9iamVjdC5hc3NpZ24oe30seixvZSxYKSxDPWcudG90YWxMZW5ndGgsUz1DPzA6Zy5jaGFyYWN0ZXJpc3RpYyx2PWcub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYyxwPWcu''@;'; put 'put ''Zm9yY2VBdmVyYWdlLHc9ISFDfHwhIXB8fGcuYXZlcmFnZSxKPUM/LTE6dyYmdm9pZCAwPT09WC5tYW50aXNzYT8wOmcubWFudGlzc2EsbmU9IUMmJih2b2lkIDA9PT1YLm9wdGlvbmFsTWFudGlzc2E/LTE9PT1KOmcub3B0aW9uYWxNYW50aXNzYSksZGU9Zy50cmltTWFudGlzc2EsZmU9Zy50''@;'; put 'put ''aG91c2FuZFNlcGFyYXRlZCx4ZT1nLnNwYWNlU2VwYXJhdGVkLExlPWcubmVnYXRpdmUsRmU9Zy5mb3JjZVNpZ24sT2U9Zy5leHBvbmVudGlhbCxqZT0iIjtpZih3KXt2YXIgV2U9ZnVuY3Rpb24oYmUpe3ZhciBBZT1iZS52YWx1ZSxUZT1iZS5mb3JjZUF2ZXJhZ2UscWU9YmUuYWJicmV2aWF0''@;'; put 'put ''aW9ucyxYZT1iZS5zcGFjZVNlcGFyYXRlZCxVZT12b2lkIDAhPT1YZSYmWGUsaHQ9YmUudG90YWxMZW5ndGgsTWU9dm9pZCAwPT09aHQ/MDpodCxEZT0iIix6ZT1NYXRoLmFicyhBZSksaXQ9LTE7aWYoemU+PU1hdGgucG93KDEwLDEyKSYmIVRlfHwidHJpbGxpb24iPT09VGU/KERlPXFlLnRy''@;'; put 'put ''aWxsaW9uLEFlLz1NYXRoLnBvdygxMCwxMikpOnplPE1hdGgucG93KDEwLDEyKSYmemU+PU1hdGgucG93KDEwLDkpJiYhVGV8fCJiaWxsaW9uIj09PVRlPyhEZT1xZS5iaWxsaW9uLEFlLz1NYXRoLnBvdygxMCw5KSk6emU8TWF0aC5wb3coMTAsOSkmJnplPj1NYXRoLnBvdygxMCw2KSYmIVRl''@;'; put 'put ''fHwibWlsbGlvbiI9PT1UZT8oRGU9cWUubWlsbGlvbixBZS89TWF0aC5wb3coMTAsNikpOih6ZTxNYXRoLnBvdygxMCw2KSYmemU+PU1hdGgucG93KDEwLDMpJiYhVGV8fCJ0aG91c2FuZCI9PT1UZSkmJihEZT1xZS50aG91c2FuZCxBZS89TWF0aC5wb3coMTAsMykpLERlJiYoRGU9KFVlPyIg''@;'; put 'put ''IjoiIikrRGUpLE1lKXt2YXIgdXQ9QWUudG9TdHJpbmcoKS5zcGxpdCgiLiIpWzBdO2l0PU1hdGgubWF4KE1lLXV0Lmxlbmd0aCwwKX1yZXR1cm57dmFsdWU6QWUsYWJicmV2aWF0aW9uOkRlLG1hbnRpc3NhUHJlY2lzaW9uOml0fX0oe3ZhbHVlOnNlLGZvcmNlQXZlcmFnZTpwLGFiYnJldmlh''@;'; put 'put ''dGlvbnM6cS5jdXJyZW50QWJicmV2aWF0aW9ucygpLHNwYWNlU2VwYXJhdGVkOnhlLHRvdGFsTGVuZ3RoOkN9KTtzZT1XZS52YWx1ZSxqZSs9V2UuYWJicmV2aWF0aW9uLEMmJihKPVdlLm1hbnRpc3NhUHJlY2lzaW9uKX1pZihPZSl7dmFyIEtlPSh1ZT0oaGU9e3ZhbHVlOnNlLGNoYXJhY3Rl''@;'; put 'put ''cmlzdGljUHJlY2lzaW9uOlN9KS52YWx1ZSxHPXZvaWQgMD09PShjZT1oZS5jaGFyYWN0ZXJpc3RpY1ByZWNpc2lvbik/MDpjZSxIPShiPXgodWUudG9FeHBvbmVudGlhbCgpLnNwbGl0KCJlIiksMikpWzFdLE49K2JbMF0sRyYmMTxHJiYoTio9TWF0aC5wb3coMTAsRy0xKSxIPTA8PShIPStI''@;'; put 'put ''LShHLTEpKT8iKyIuY29uY2F0KEgpOkgpLHt2YWx1ZTpOLGFiYnJldmlhdGlvbjoiZSIuY29uY2F0KEgpfSk7c2U9S2UudmFsdWUsamU9S2UuYWJicmV2aWF0aW9uK2plfXZhciBZZSxKZSxsdCxQZT1mdW5jdGlvbihiZSxBZSxUZSxxZSxYZSl7aWYoLTE9PT1xZSlyZXR1cm4gYmU7dmFyIFVl''@;'; put 'put ''PWZ1bmN0aW9uIEUoQixZKXtyZXR1cm4tMSE9PUIudG9TdHJpbmcoKS5pbmRleE9mKCJlIik/ZnVuY3Rpb24oWCxVKXt2YXIgcT1YLnRvU3RyaW5nKCksZWU9eChxLnNwbGl0KCJlIiksMiksb2U9ZWVbMV0sc2U9eChlZVswXS5zcGxpdCgiLiIpLDIpLGhlPXNlWzBdLHVlPXNlWzFdLGNlPXZv''@;'; put 'put ''aWQgMD09PXVlPyIiOnVlO2lmKDA8K29lKXE9aGUrY2UrayhvZS1jZS5sZW5ndGgpO2Vsc2V7dmFyIEc9Ii4iO0c9K2hlPDA/Ii0wIi5jb25jYXQoRyk6IjAiLmNvbmNhdChHKTt2YXIgYj0oaygtb2UtMSkrTWF0aC5hYnMoaGUpK2NlKS5zdWJzdHIoMCxVKTtiLmxlbmd0aDxVJiYoYis9ayhV''@;'; put 'put ''LWIubGVuZ3RoKSkscT1HK2J9cmV0dXJuIDA8K29lJiYwPFUmJihxKz0iLiIuY29uY2F0KGsoVSkpKSxxfShCLFkpOihNYXRoLnJvdW5kKCsiIi5jb25jYXQoQiwiZSsiKS5jb25jYXQoWSkpL01hdGgucG93KDEwLFkpKS50b0ZpeGVkKFkpfShBZSxxZSksaHQ9eChVZS50b1N0cmluZygpLnNw''@;'; put 'put ''bGl0KCIuIiksMiksTWU9aHRbMF0sRGU9aHRbMV0semU9dm9pZCAwPT09RGU/IiI6RGU7aWYoemUubWF0Y2goL14wKyQvKSYmKFRlfHxYZSkpcmV0dXJuIE1lO3ZhciBpdD16ZS5tYXRjaCgvMCskLyk7cmV0dXJuIFhlJiZpdD8iIi5jb25jYXQoTWUsIi4iKS5jb25jYXQoemUudG9TdHJpbmco''@;'; put 'put ''KS5zbGljZSgwLGl0LmluZGV4KSk6VWUudG9TdHJpbmcoKX0oc2UudG9TdHJpbmcoKSxzZSxuZSxKLGRlKTtyZXR1cm4gUGU9ZnVuY3Rpb24oYmUsQWUsVGUscWUsWGUpe3ZhciBVZT1xZS5jdXJyZW50RGVsaW1pdGVycygpLGh0PVVlLnRob3VzYW5kcztYZT1YZXx8VWUuZGVjaW1hbDt2YXIg''@;'; put 'put ''TWU9VWUudGhvdXNhbmRzU2l6ZXx8MyxEZT1iZS50b1N0cmluZygpLHplPURlLnNwbGl0KCIuIilbMF0saXQ9RGUuc3BsaXQoIi4iKVsxXTtyZXR1cm4gVGUmJihBZTwwJiYoemU9emUuc2xpY2UoMSkpLGZ1bmN0aW9uKHV0LE10KXtmb3IodmFyIEh0PVtdLFB0PTAsb249dXQ7MDxvbjtvbi0t''@;'; put 'put ''KVB0PT09TXQmJihIdC51bnNoaWZ0KG9uKSxQdD0wKSxQdCsrO3JldHVybiBIdH0oemUubGVuZ3RoLE1lKS5mb3JFYWNoKGZ1bmN0aW9uKHV0LE10KXt6ZT16ZS5zbGljZSgwLHV0K010KStodCt6ZS5zbGljZSh1dCtNdCl9KSxBZTwwJiYoemU9Ii0iLmNvbmNhdCh6ZSkpKSxpdD96ZStYZStp''@;'; put 'put ''dDp6ZX0oUGU9ZnVuY3Rpb24oYmUsQWUsVGUscWUpe3ZhciBYZT1iZSxVZT14KFhlLnRvU3RyaW5nKCkuc3BsaXQoIi4iKSwyKSxodD1VZVswXSxNZT1VZVsxXTtpZihodC5tYXRjaCgvXi0/MCQvKSYmVGUpcmV0dXJuIE1lPyIiLmNvbmNhdChodC5yZXBsYWNlKCIwIiwiIiksIi4iKS5jb25j''@;'; put 'put ''YXQoTWUpOmh0LnJlcGxhY2UoIjAiLCIiKTtpZihodC5sZW5ndGg8cWUpZm9yKHZhciBEZT1xZS1odC5sZW5ndGgsemU9MDt6ZTxEZTt6ZSsrKVhlPSIwIi5jb25jYXQoWGUpO3JldHVybiBYZS50b1N0cmluZygpfShQZSwwLHYsUyksc2UsZmUscSxlZSksKHd8fE9lKSYmKFBlKz1qZSksKEZl''@;'; put 'put ''fHxzZTwwKSYmKFllPVBlLGx0PUxlLFBlPTA9PT0oSmU9c2UpP1llOjA9PStZZT9ZZS5yZXBsYWNlKCItIiwiIik6MDxKZT8iKyIuY29uY2F0KFllKToic2lnbiI9PT1sdD9ZZToiKCIuY29uY2F0KFllLnJlcGxhY2UoIi0iLCIiKSwiKSIpKSxQZX1mdW5jdGlvbiBWKEIsWSl7aWYoIUIpcmV0''@;'; put 'put ''dXJuIFk7dmFyIFg9T2JqZWN0LmtleXMoQik7cmV0dXJuIDE9PT1YLmxlbmd0aCYmIm91dHB1dCI9PT1YWzBdP1k6Qn1GLmV4cG9ydHM9ZnVuY3Rpb24oQil7cmV0dXJue2Zvcm1hdDpmdW5jdGlvbigpe2Zvcih2YXIgWT1hcmd1bWVudHMubGVuZ3RoLFg9bmV3IEFycmF5KFkpLFU9MDtVPFk7''@;'; put 'put ''VSsrKVhbVV09YXJndW1lbnRzW1VdO3JldHVybiBLLmFwcGx5KHZvaWQgMCxYLmNvbmNhdChbQl0pKX0sZ2V0Qnl0ZVVuaXQ6ZnVuY3Rpb24oKXtmb3IodmFyIFk9YXJndW1lbnRzLmxlbmd0aCxYPW5ldyBBcnJheShZKSxVPTA7VTxZO1UrKylYW1VdPWFyZ3VtZW50c1tVXTtyZXR1cm4gZnVu''@;'; put 'put ''Y3Rpb24ocSl7dmFyIGVlPVIuZ2VuZXJhbDtyZXR1cm4gSShxLl92YWx1ZSxlZS5zdWZmaXhlcyxlZS5zY2FsZSkuc3VmZml4fS5hcHBseSh2b2lkIDAsWC5jb25jYXQoW0JdKSl9LGdldEJpbmFyeUJ5dGVVbml0OmZ1bmN0aW9uKCl7Zm9yKHZhciBZPWFyZ3VtZW50cy5sZW5ndGgsWD1uZXcg''@;'; put 'put ''QXJyYXkoWSksVT0wO1U8WTtVKyspWFtVXT1hcmd1bWVudHNbVV07cmV0dXJuIGZ1bmN0aW9uKHEpe3ZhciBlZT1SLmJpbmFyeTtyZXR1cm4gSShxLl92YWx1ZSxlZS5zdWZmaXhlcyxlZS5zY2FsZSkuc3VmZml4fS5hcHBseSh2b2lkIDAsWC5jb25jYXQoW0JdKSl9LGdldERlY2ltYWxCeXRl''@;'; put 'put ''VW5pdDpmdW5jdGlvbigpe2Zvcih2YXIgWT1hcmd1bWVudHMubGVuZ3RoLFg9bmV3IEFycmF5KFkpLFU9MDtVPFk7VSsrKVhbVV09YXJndW1lbnRzW1VdO3JldHVybiBmdW5jdGlvbihxKXt2YXIgZWU9Ui5kZWNpbWFsO3JldHVybiBJKHEuX3ZhbHVlLGVlLnN1ZmZpeGVzLGVlLnNjYWxlKS5z''@;'; put 'put ''dWZmaXh9LmFwcGx5KHZvaWQgMCxYLmNvbmNhdChbQl0pKX0sZm9ybWF0T3JEZWZhdWx0OlZ9fX0seyIuL2dsb2JhbFN0YXRlIjo0LCIuL3BhcnNpbmciOjgsIi4vdmFsaWRhdGluZyI6MTB9XSw0OltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7dmFyIHg9SWUoIi4vZW4tVVMiKSxt''@;'; put 'put ''PUllKCIuL3ZhbGlkYXRpbmciKSxsZT1JZSgiLi9wYXJzaW5nIiksTT17fSxPPXZvaWQgMCxSPXt9LHo9bnVsbCxLPXt9O2Z1bmN0aW9uIEkoRSl7Tz1FfWZ1bmN0aW9uIGsoKXtyZXR1cm4gUltPXX1NLmxhbmd1YWdlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LFIpfSxN''@;'; put 'put ''LmN1cnJlbnRMYW5ndWFnZT1mdW5jdGlvbigpe3JldHVybiBPfSxNLmN1cnJlbnRDdXJyZW5jeT1mdW5jdGlvbigpe3JldHVybiBrKCkuY3VycmVuY3l9LE0uY3VycmVudEFiYnJldmlhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gaygpLmFiYnJldmlhdGlvbnN9LE0uY3VycmVudERlbGltaXRl''@;'; put 'put ''cnM9ZnVuY3Rpb24oKXtyZXR1cm4gaygpLmRlbGltaXRlcnN9LE0uY3VycmVudE9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gaygpLm9yZGluYWx9LE0uY3VycmVudERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30saygpLmRlZmF1bHRzLEspfSxNLmN1cnJlbnRP''@;'; put 'put ''cmRpbmFsRGVmYXVsdEZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LE0uY3VycmVudERlZmF1bHRzKCksaygpLm9yZGluYWxGb3JtYXQpfSxNLmN1cnJlbnRCeXRlRGVmYXVsdEZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LE0uY3VycmVu''@;'; put 'put ''dERlZmF1bHRzKCksaygpLmJ5dGVGb3JtYXQpfSxNLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdD1mdW5jdGlvbigpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LE0uY3VycmVudERlZmF1bHRzKCksaygpLnBlcmNlbnRhZ2VGb3JtYXQpfSxNLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRG''@;'; put 'put ''b3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxNLmN1cnJlbnREZWZhdWx0cygpLGsoKS5jdXJyZW5jeUZvcm1hdCl9LE0uY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sTS5jdXJyZW50RGVmYXVsdHMoKSxr''@;'; put 'put ''KCkudGltZUZvcm1hdCl9LE0uc2V0RGVmYXVsdHM9ZnVuY3Rpb24oRSl7RT1sZS5wYXJzZUZvcm1hdChFKSxtLnZhbGlkYXRlRm9ybWF0KEUpJiYoSz1FKX0sTS5nZXRaZXJvRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHp9LE0uc2V0WmVyb0Zvcm1hdD1mdW5jdGlvbihFKXtyZXR1cm4gej0i''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIEU/RTpudWxsfSxNLmhhc1plcm9Gb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXp9LE0ubGFuZ3VhZ2VEYXRhPWZ1bmN0aW9uKEUpe2lmKEUpe2lmKFJbRV0pcmV0dXJuIFJbRV07dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHRhZyAiJy5jb25jYXQoRSwn''@;'; put 'put ''IicpKX1yZXR1cm4gaygpfSxNLnJlZ2lzdGVyTGFuZ3VhZ2U9ZnVuY3Rpb24oRSl7dmFyIGo9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZighbS52YWxpZGF0ZUxhbmd1YWdlKEUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsYW5n''@;'; put 'put ''dWFnZSBkYXRhIik7UltFLmxhbmd1YWdlVGFnXT1FLGomJkkoRS5sYW5ndWFnZVRhZyl9LE0uc2V0TGFuZ3VhZ2U9ZnVuY3Rpb24oRSl7dmFyIGo9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOngubGFuZ3VhZ2VUYWc7aWYoIVJbRV0pe3Zh''@;'; put 'put ''ciBWPUUuc3BsaXQoIi0iKVswXSxCPU9iamVjdC5rZXlzKFIpLmZpbmQoZnVuY3Rpb24oWSl7cmV0dXJuIFkuc3BsaXQoIi0iKVswXT09PVZ9KTtyZXR1cm4gUltCXT92b2lkIEkoQik6dm9pZCBJKGopfUkoRSl9LE0ucmVnaXN0ZXJMYW5ndWFnZSh4KSxPPXgubGFuZ3VhZ2VUYWcsRi5leHBv''@;'; put 'put ''cnRzPU19LHsiLi9lbi1VUyI6MiwiLi9wYXJzaW5nIjo4LCIuL3ZhbGlkYXRpbmciOjEwfV0sNTpbZnVuY3Rpb24oSWUsRixhZSl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbih4KXtyZXR1cm57bG9hZExhbmd1YWdlc0luTm9kZTpmdW5jdGlvbihtKXtyZXR1cm4gbGU9eCx2b2lk''@;'; put 'put ''IG0uZm9yRWFjaChmdW5jdGlvbihNKXt2YXIgTz12b2lkIDA7dHJ5e089SWUoIi4uL2xhbmd1YWdlcy8iLmNvbmNhdChNKSl9Y2F0Y2h7Y29uc29sZS5lcnJvcignVW5hYmxlIHRvIGxvYWQgIicuY29uY2F0KE0sJyIuIE5vIG1hdGNoaW5nIGxhbmd1YWdlIGZpbGUgZm91bmQuJykpfU8mJmxl''@;'; put 'put ''LnJlZ2lzdGVyTGFuZ3VhZ2UoTyl9KTt2YXIgbGV9fX19LHt9XSw2OltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7dmFyIHg9SWUoImJpZ251bWJlci5qcyIpO2Z1bmN0aW9uIG0obGUsTSxPKXt2YXIgUj1uZXcgeChsZS5fdmFsdWUpLHo9TTtyZXR1cm4gTy5pc051bWJybyhNKSYm''@;'; put 'put ''KHo9TS5fdmFsdWUpLHo9bmV3IHgoeiksbGUuX3ZhbHVlPVIubWludXMoeikudG9OdW1iZXIoKSxsZX1GLmV4cG9ydHM9ZnVuY3Rpb24obGUpe3JldHVybnthZGQ6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gej1PLEs9bGUsST1uZXcgeCgoUj1NKS5fdmFsdWUpLGs9eixLLmlzTnVtYnJvKHopJiYo''@;'; put 'put ''az16Ll92YWx1ZSksaz1uZXcgeChrKSxSLl92YWx1ZT1JLnBsdXMoaykudG9OdW1iZXIoKSxSO3ZhciBSLHosSyxJLGt9LHN1YnRyYWN0OmZ1bmN0aW9uKE0sTyl7cmV0dXJuIG0oTSxPLGxlKX0sbXVsdGlwbHk6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gej1PLEs9bGUsST1uZXcgeCgoUj1NKS5f''@;'; put 'put ''dmFsdWUpLGs9eixLLmlzTnVtYnJvKHopJiYoaz16Ll92YWx1ZSksaz1uZXcgeChrKSxSLl92YWx1ZT1JLnRpbWVzKGspLnRvTnVtYmVyKCksUjt2YXIgUix6LEssSSxrfSxkaXZpZGU6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gej1PLEs9bGUsST1uZXcgeCgoUj1NKS5fdmFsdWUpLGs9eixLLmlz''@;'; put 'put ''TnVtYnJvKHopJiYoaz16Ll92YWx1ZSksaz1uZXcgeChrKSxSLl92YWx1ZT1JLmRpdmlkZWRCeShrKS50b051bWJlcigpLFI7dmFyIFIseixLLEksa30sc2V0OmZ1bmN0aW9uKE0sTyl7cmV0dXJuIFI9TSxLPXo9TyxsZS5pc051bWJybyh6KSYmKEs9ei5fdmFsdWUpLFIuX3ZhbHVlPUssUjt2''@;'; put 'put ''YXIgUix6LEt9LGRpZmZlcmVuY2U6ZnVuY3Rpb24oTSxPKXtyZXR1cm4gUj1PLG0oSz0oej1sZSkoTS5fdmFsdWUpLFIseiksTWF0aC5hYnMoSy5fdmFsdWUpO3ZhciBSLHosS319fX0seyJiaWdudW1iZXIuanMiOjF9XSw3OltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rp''@;'; put 'put ''b24geChqLFYpe2Zvcih2YXIgQj0wO0I8Vi5sZW5ndGg7QisrKXt2YXIgWT1WW0JdO1kuZW51bWVyYWJsZT1ZLmVudW1lcmFibGV8fCExLFkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBZJiYoWS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGosWS5rZXksWSl9fXZhciBt''@;'; put 'put ''PUllKCIuL2dsb2JhbFN0YXRlIiksbGU9SWUoIi4vdmFsaWRhdGluZyIpLE09SWUoIi4vbG9hZGluZyIpKEUpLE89SWUoIi4vdW5mb3JtYXR0aW5nIiksUj1JZSgiLi9mb3JtYXR0aW5nIikoRSksej1JZSgiLi9tYW5pcHVsYXRpbmciKShFKSxLPUllKCIuL3BhcnNpbmciKSxJPWZ1bmN0aW9u''@;'; put 'put ''KCl7ZnVuY3Rpb24gaihYKXsoZnVuY3Rpb24oVSxxKXtpZighKFUgaW5zdGFuY2VvZiBxKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsaiksdGhpcy5fdmFsdWU9WH12YXIgVixCO3JldHVybiBWPWosKEI9W3trZXk6ImNs''@;'; put 'put ''b25lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBFKHRoaXMuX3ZhbHVlKX19LHtrZXk6ImZvcm1hdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gUi5mb3JtYXQodGhpcywwPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30pfX0se2tleToi''@;'; put 'put ''Zm9ybWF0Q3VycmVuY3kiLHZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiJzdHJpbmciPT10eXBlb2YgWCYmKFg9Sy5wYXJzZUZvcm1hdChYKSksKFg9Ui5mb3JtYXRPckRlZmF1bHQoWCxtLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSkpLm91dHB1dD0iY3VycmVuY3kiLFIuZm9ybWF0''@;'; put 'put ''KHRoaXMsWCl9fSx7a2V5OiJmb3JtYXRUaW1lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBYPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtyZXR1cm4gWC5vdXRwdXQ9InRpbWUiLFIuZm9ybWF0KHRoaXMsWCl9fSx7a2V5OiJiaW5hcnlC''@;'; put 'put ''eXRlVW5pdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIFIuZ2V0QmluYXJ5Qnl0ZVVuaXQodGhpcyl9fSx7a2V5OiJkZWNpbWFsQnl0ZVVuaXRzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBSLmdldERlY2ltYWxCeXRlVW5pdCh0aGlzKX19LHtrZXk6ImJ5dGVVbml0cyIsdmFsdWU6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gUi5nZXRCeXRlVW5pdCh0aGlzKX19LHtrZXk6ImRpZmZlcmVuY2UiLHZhbHVlOmZ1bmN0aW9uKFgpe3JldHVybiB6LmRpZmZlcmVuY2UodGhpcyxYKX19LHtrZXk6ImFkZCIsdmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIHouYWRkKHRoaXMsWCl9fSx7a2V5OiJzdWJ0''@;'; put 'put ''cmFjdCIsdmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIHouc3VidHJhY3QodGhpcyxYKX19LHtrZXk6Im11bHRpcGx5Iix2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gei5tdWx0aXBseSh0aGlzLFgpfX0se2tleToiZGl2aWRlIix2YWx1ZTpmdW5jdGlvbihYKXtyZXR1cm4gei5kaXZpZGUodGhp''@;'; put 'put ''cyxYKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oWCl7cmV0dXJuIHouc2V0KHRoaXMsayhYKSl9fSx7a2V5OiJ2YWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFsdWV9fSx7a2V5OiJ2YWx1ZU9mIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19''@;'; put 'put ''XSkmJngoVi5wcm90b3R5cGUsQiksan0oKTtmdW5jdGlvbiBrKGope3ZhciBWPWo7cmV0dXJuIEUuaXNOdW1icm8oaik/Vj1qLl92YWx1ZToic3RyaW5nIj09dHlwZW9mIGo/Vj1FLnVuZm9ybWF0KGopOmlzTmFOKGopJiYoVj1OYU4pLFZ9ZnVuY3Rpb24gRShqKXtyZXR1cm4gbmV3IEkoayhq''@;'; put 'put ''KSl9RS52ZXJzaW9uPSIyLjEuMiIsRS5pc051bWJybz1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIEl9LEUubGFuZ3VhZ2U9bS5jdXJyZW50TGFuZ3VhZ2UsRS5yZWdpc3Rlckxhbmd1YWdlPW0ucmVnaXN0ZXJMYW5ndWFnZSxFLnNldExhbmd1YWdlPW0uc2V0TGFuZ3VhZ2UsRS5s''@;'; put 'put ''YW5ndWFnZXM9bS5sYW5ndWFnZXMsRS5sYW5ndWFnZURhdGE9bS5sYW5ndWFnZURhdGEsRS56ZXJvRm9ybWF0PW0uc2V0WmVyb0Zvcm1hdCxFLmRlZmF1bHRGb3JtYXQ9bS5jdXJyZW50RGVmYXVsdHMsRS5zZXREZWZhdWx0cz1tLnNldERlZmF1bHRzLEUuZGVmYXVsdEN1cnJlbmN5Rm9ybWF0''@;'; put 'put ''PW0uY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCxFLnZhbGlkYXRlPWxlLnZhbGlkYXRlLEUubG9hZExhbmd1YWdlc0luTm9kZT1NLmxvYWRMYW5ndWFnZXNJbk5vZGUsRS51bmZvcm1hdD1PLnVuZm9ybWF0LEYuZXhwb3J0cz1FfSx7Ii4vZm9ybWF0dGluZyI6MywiLi9nbG9iYWxTdGF0''@;'; put 'put ''ZSI6NCwiLi9sb2FkaW5nIjo1LCIuL21hbmlwdWxhdGluZyI6NiwiLi9wYXJzaW5nIjo4LCIuL3VuZm9ybWF0dGluZyI6OSwiLi92YWxpZGF0aW5nIjoxMH1dLDg6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uKHgpe3ZhciBt''@;'; put 'put ''LGxlLE0sTyxSLHosSyxJLGssRSxqLFYsQixZLFgsVSxxLGVlLHRlLG9lLHNlPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHg/eDoobGU9c2UsUj1zZSxmdW5jdGlvbihoZSx1ZSl7aWYoLTE9''@;'; put 'put ''PT1oZS5pbmRleE9mKCIkIikpe2lmKC0xPT09aGUuaW5kZXhPZigiJSIpKXJldHVybi0xIT09aGUuaW5kZXhPZigiYmQiKT8odWUub3V0cHV0PSJieXRlIix1ZS5iYXNlPSJnZW5lcmFsIik6LTEhPT1oZS5pbmRleE9mKCJiIik/KHVlLm91dHB1dD0iYnl0ZSIsdWUuYmFzZT0iYmluYXJ5Iik6''@;'; put 'put ''LTEhPT1oZS5pbmRleE9mKCJkIik/KHVlLm91dHB1dD0iYnl0ZSIsdWUuYmFzZT0iZGVjaW1hbCIpOi0xPT09aGUuaW5kZXhPZigiOiIpPy0xIT09aGUuaW5kZXhPZigibyIpJiYodWUub3V0cHV0PSJvcmRpbmFsIik6dWUub3V0cHV0PSJ0aW1lIjt1ZS5vdXRwdXQ9InBlcmNlbnQifWVsc2Ug''@;'; put 'put ''dWUub3V0cHV0PSJjdXJyZW5jeSJ9KHg9KHo9KE89eD0oTT0obT14KS5tYXRjaCgvXnsoW159XSopfS8pKT8obGUucHJlZml4PU1bMV0sbS5zbGljZShNWzBdLmxlbmd0aCkpOm0pLm1hdGNoKC97KFtefV0qKX0kLykpPyhSLnBvc3RmaXg9elsxXSxPLnNsaWNlKDAsLXpbMF0ubGVuZ3RoKSk6''@;'; put 'put ''TyxzZSksSz1zZSwoST14Lm1hdGNoKC9bMS05XStbMC05XSovKSkmJihLLnRvdGFsTGVuZ3RoPStJWzBdKSxrPXNlLChFPXguc3BsaXQoIi4iKVswXS5tYXRjaCgvMCsvKSkmJihrLmNoYXJhY3RlcmlzdGljPUVbMF0ubGVuZ3RoKSxmdW5jdGlvbihoZSx1ZSl7aWYoLTEhPT1oZS5pbmRleE9m''@;'; put 'put ''KCIuIikpe3ZhciBjZT1oZS5zcGxpdCgiLiIpWzBdO3VlLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1jZS5pbmRleE9mKCIwIil9fSh4LHNlKSxqPXNlLC0xIT09eC5pbmRleE9mKCJhIikmJihqLmF2ZXJhZ2U9ITApLEI9c2UsLTEhPT0oVj14KS5pbmRleE9mKCJLIik/Qi5mb3JjZUF2''@;'; put 'put ''ZXJhZ2U9InRob3VzYW5kIjotMSE9PVYuaW5kZXhPZigiTSIpP0IuZm9yY2VBdmVyYWdlPSJtaWxsaW9uIjotMSE9PVYuaW5kZXhPZigiQiIpP0IuZm9yY2VBdmVyYWdlPSJiaWxsaW9uIjotMSE9PVYuaW5kZXhPZigiVCIpJiYoQi5mb3JjZUF2ZXJhZ2U9InRyaWxsaW9uIiksZnVuY3Rpb24o''@;'; put 'put ''aGUsdWUpe3ZhciBjZT1oZS5zcGxpdCgiLiIpWzFdO2lmKGNlKXt2YXIgRz1jZS5tYXRjaCgvMCsvKTtHJiYodWUubWFudGlzc2E9R1swXS5sZW5ndGgpfX0oeCxzZSksWD1zZSwoWT14KS5tYXRjaCgvXFtcLl0vKT9YLm9wdGlvbmFsTWFudGlzc2E9ITA6WS5tYXRjaCgvXC4vKSYmKFgub3B0''@;'; put 'put ''aW9uYWxNYW50aXNzYT0hMSksVT1zZSwtMSE9PXguaW5kZXhPZigiLCIpJiYoVS50aG91c2FuZFNlcGFyYXRlZD0hMCkscT1zZSwtMSE9PXguaW5kZXhPZigiICIpJiYocS5zcGFjZVNlcGFyYXRlZD0hMCksdGU9c2UsKGVlPXgpLm1hdGNoKC9eXCs/XChbXildKlwpJC8pJiYodGUubmVnYXRp''@;'; put 'put ''dmU9InBhcmVudGhlc2lzIiksZWUubWF0Y2goL15cKz8tLykmJih0ZS5uZWdhdGl2ZT0ic2lnbiIpLG9lPXNlLHgubWF0Y2goL15cKy8pJiYob2UuZm9yY2VTaWduPSEwKSxzZSl9fX0se31dLDk6W2Z1bmN0aW9uKEllLEYsYWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgeD1be2tleToiWmlCIixmYWN0''@;'; put 'put ''b3I6TWF0aC5wb3coMTAyNCw3KX0se2tleToiWkIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6IllpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsOCl9LHtrZXk6IllCIixmYWN0b3I6TWF0aC5wb3coMWUzLDgpfSx7a2V5OiJUaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDQpfSx7a2V5''@;'; put 'put ''OiJUQiIsZmFjdG9yOk1hdGgucG93KDFlMyw0KX0se2tleToiUGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw1KX0se2tleToiUEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9LHtrZXk6Ik1pQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMil9LHtrZXk6Ik1CIixmYWN0b3I6TWF0aC5wb3coMWUz''@;'; put 'put ''LDIpfSx7a2V5OiJLaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OiJLQiIsZmFjdG9yOk1hdGgucG93KDFlMywxKX0se2tleToiR2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwzKX0se2tleToiR0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtrZXk6IkVpQiIsZmFjdG9yOk1h''@;'; put 'put ''dGgucG93KDEwMjQsNil9LHtrZXk6IkVCIixmYWN0b3I6TWF0aC5wb3coMWUzLDYpfSx7a2V5OiJCIixmYWN0b3I6MX1dO2Z1bmN0aW9uIG0oTSl7cmV0dXJuIE0ucmVwbGFjZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfUYuZXhwb3J0cz17dW5mb3JtYXQ6ZnVuY3Rpb24oTSxP''@;'; put 'put ''KXt2YXIgUixJPUllKCIuL2dsb2JhbFN0YXRlIiksaz1JLmN1cnJlbnREZWxpbWl0ZXJzKCksRT1JLmN1cnJlbnRDdXJyZW5jeSgpLnN5bWJvbCxqPUkuY3VycmVudE9yZGluYWwoKSxWPUkuZ2V0WmVyb0Zvcm1hdCgpLEI9SS5jdXJyZW50QWJicmV2aWF0aW9ucygpLFk9dm9pZCAwO2lmKCJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgTSlZPWZ1bmN0aW9uKFgsVSl7aWYoIVguaW5kZXhPZigiOiIpfHwiOiI9PT1VLnRob3VzYW5kcylyZXR1cm4hMTt2YXIgcT1YLnNwbGl0KCI6Iik7aWYoMyE9PXEubGVuZ3RoKXJldHVybiExO3ZhciB0ZT0rcVsxXSxvZT0rcVsyXTtyZXR1cm4haXNOYU4oK3FbMF0p''@;'; put 'put ''JiYhaXNOYU4odGUpJiYhaXNOYU4ob2UpfShNLGspPysoUj1NLnNwbGl0KCI6IikpWzJdKzYwKitSWzFdKzM2MDAqK1JbMF06ZnVuY3Rpb24gbGUoTSxPKXt2YXIgUj0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06IiIsej0zPGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg/YXJndW1lbnRzWzNdOnZvaWQgMCxLPTQ8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNF06dm9pZCAwLEk9NTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s1XTp2b2lkIDAsaz02PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzZdOnZvaWQgMDtpZigiIiE9PU0pcmV0''@;'; put 'put ''dXJuIE09PT1LPzA6ZnVuY3Rpb24gRShqLFYpe3ZhciBCPTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIixZPTM8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbM106dm9pZCAwLFg9NDxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1s0''@;'; put 'put ''XTp2b2lkIDAsVT01PGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzVdOnZvaWQgMCxxPTY8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbNl06dm9pZCAwO2lmKCFpc05hTigraikpcmV0dXJuK2o7dmFyIGVlPSIiLHRlPWoucmVwbGFjZSgvKF5bXihdKilcKCguKilcKShbXildKiQpLywi''@;'; put 'put ''JDEkMiQzIik7aWYodGUhPT1qKXJldHVybi0xKkUodGUsVixCLFksWCxVLHEpO2Zvcih2YXIgb2U9MDtvZTx4Lmxlbmd0aDtvZSsrKXt2YXIgc2U9eFtvZV07aWYoKGVlPWoucmVwbGFjZShzZS5rZXksIiIpKSE9PWopcmV0dXJuIEUoZWUsVixCLFksWCxVLHEpKnNlLmZhY3Rvcn1pZigoZWU9''@;'; put 'put ''ai5yZXBsYWNlKCIlIiwiIikpIT09ailyZXR1cm4gRShlZSxWLEIsWSxYLFUscSkvMTAwO3ZhciBoZT1wYXJzZUZsb2F0KGopO2lmKCFpc05hTihoZSkpe3ZhciB1ZT1ZKGhlKTtpZih1ZSYmIi4iIT09dWUmJihlZT1qLnJlcGxhY2UobmV3IFJlZ0V4cCgiIi5jb25jYXQobSh1ZSksIiQiKSks''@;'; put 'put ''IiIpKSE9PWopcmV0dXJuIEUoZWUsVixCLFksWCxVLHEpO3ZhciBjZT17fTtPYmplY3Qua2V5cyhVKS5mb3JFYWNoKGZ1bmN0aW9uKEMpe2NlW1VbQ11dPUN9KTtmb3IodmFyIEc9T2JqZWN0LmtleXMoY2UpLnNvcnQoKS5yZXZlcnNlKCksYj1HLmxlbmd0aCxEPTA7RDxiO0QrKyl7dmFyIEg9''@;'; put 'put ''R1tEXSxOPWNlW0hdO2lmKChlZT1qLnJlcGxhY2UoSCwiIikpIT09ail7dmFyIGc9dm9pZCAwO3N3aXRjaChOKXtjYXNlInRob3VzYW5kIjpnPU1hdGgucG93KDEwLDMpO2JyZWFrO2Nhc2UibWlsbGlvbiI6Zz1NYXRoLnBvdygxMCw2KTticmVhaztjYXNlImJpbGxpb24iOmc9TWF0aC5wb3co''@;'; put 'put ''MTAsOSk7YnJlYWs7Y2FzZSJ0cmlsbGlvbiI6Zz1NYXRoLnBvdygxMCwxMil9cmV0dXJuIEUoZWUsVixCLFksWCxVLHEpKmd9fX19KGZ1bmN0aW9uKEUsail7dmFyIEI9RS5yZXBsYWNlKDI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIiwi''@;'; put 'put ''Iik7cmV0dXJuKEI9Qi5yZXBsYWNlKG5ldyBSZWdFeHAoIihbMC05XSkiLmNvbmNhdChtKGoudGhvdXNhbmRzKSwiKFswLTldKSIpLCJnIiksIiQxJDIiKSkucmVwbGFjZShqLmRlY2ltYWwsIi4iKX0oTSxPLFIpLE8sUix6LEssSSxrKX0oTSxrLEUsaixWLEIsTyk7ZWxzZXtpZigibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIE0pcmV0dXJuO1k9TX1pZih2b2lkIDAhPT1ZKXJldHVybiBZfX19LHsiLi9nbG9iYWxTdGF0ZSI6NH1dLDEwOltmdW5jdGlvbihJZSxGLGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShrKXtyZXR1cm4obT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihFKXtyZXR1cm4gdHlwZW9mIEV9OmZ1bmN0aW9uKEUpe3JldHVybiBFJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZFLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZFIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgRX0p''@;'; put 'put ''KGspfXZhciBsZT1JZSgiLi91bmZvcm1hdHRpbmciKSxNPS9eW2Etel17MiwzfSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9fFswLTldezN9KSk/JC8sTz17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJvcmRp''@;'; put 'put ''bmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2VuZXJhbCJdLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGssRSl7cmV0dXJuImJ5dGUiPT09RS5vdXRwdXR9LG1lc3NhZ2U6ImBiYXNlYCBtdXN0IGJlIHByb3ZpZGVkIG9u''@;'; put 'put ''bHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBieXRlYCIsbWFuZGF0b3J5OmZ1bmN0aW9uKGspe3JldHVybiJieXRlIj09PWsub3V0cHV0fX0sY2hhcmFjdGVyaXN0aWM6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246ZnVuY3Rpb24oayl7cmV0dXJuIDA8PWt9LG1lc3NhZ2U6InZhbHVlIG11c3Qg''@;'; put 'put ''YmUgcG9zaXRpdmUifSxwcmVmaXg6InN0cmluZyIscG9zdGZpeDoic3RyaW5nIixmb3JjZUF2ZXJhZ2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJ0cmlsbGlvbiIsImJpbGxpb24iLCJtaWxsaW9uIiwidGhvdXNhbmQiXX0sYXZlcmFnZToiYm9vbGVhbiIsY3VycmVuY3lQb3NpdGlv''@;'; put 'put ''bjp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInByZWZpeCIsImluZml4IiwicG9zdGZpeCJdfSxjdXJyZW5jeVN5bWJvbDoic3RyaW5nIix0b3RhbExlbmd0aDp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbnM6W3tyZXN0cmljdGlvbjpmdW5jdGlvbihrKXtyZXR1cm4gMDw9a30sbWVz''@;'; put 'put ''c2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHtyZXN0cmljdGlvbjpmdW5jdGlvbihrLEUpe3JldHVybiFFLmV4cG9uZW50aWFsfSxtZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBleHBvbmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBlOiJudW1iZXIi''@;'; put 'put ''LHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGspe3JldHVybiAwPD1rfSxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVhbiIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixvcHRpb25hbENoYXJhY3RlcmlzdGljOiJib29sZWFuIix0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOiJzdHJpbmciLG1pbGxpb246InN0cmluZyIsYmlsbGlvbjoic3RyaW5nIix0cmlsbGlvbjoic3RyaW5nIn19LG5lZ2F0aXZlOnt0''@;'; put 'put ''eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsic2lnbiIsInBhcmVudGhlc2lzIl19LGZvcmNlU2lnbjoiYm9vbGVhbiIsZXhwb25lbnRpYWw6e3R5cGU6ImJvb2xlYW4ifSxwcmVmaXhTeW1ib2w6e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGssRSl7cmV0dXJuInBlcmNl''@;'; put 'put ''bnQiPT09RS5vdXRwdXR9LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGAifX0sUj17bGFuZ3VhZ2VUYWc6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOmZ1bmN0aW9uKGspe3JldHVy''@;'; put 'put ''biBrLm1hdGNoKE0pfSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFnIG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxkZWxpbWl0ZXJzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZHM6''@;'; put 'put ''InN0cmluZyIsZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXplOiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sbWlsbGlvbjp7dHlwZToic3RyaW5nIixt''@;'; put 'put ''YW5kYXRvcnk6ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixvcmRpbmFsOnt0eXBlOiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEw''@;'; put 'put ''fSxjdXJyZW5jeTp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7c3ltYm9sOiJzdHJpbmciLHBvc2l0aW9uOiJzdHJpbmciLGNvZGU6InN0cmluZyJ9LG1hbmRhdG9yeTohMH0sZGVmYXVsdHM6ImZvcm1hdCIsb3JkaW5hbEZvcm1hdDoiZm9ybWF0IixieXRlRm9ybWF0OiJmb3JtYXQiLHBlcmNl''@;'; put 'put ''bnRhZ2VGb3JtYXQ6ImZvcm1hdCIsY3VycmVuY3lGb3JtYXQ6ImZvcm1hdCIsdGltZURlZmF1bHRzOiJmb3JtYXQiLGZvcm1hdHM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2ZvdXJEaWdpdHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0eXBl''@;'; put 'put ''OiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfX19fTtmdW5jdGlvbiB6KGspe3JldHVybiEhbGUudW5mb3Jt''@;'; put 'put ''YXQoayl9ZnVuY3Rpb24gSyhrLEUsail7dmFyIFY9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxCPU9iamVjdC5rZXlzKGspLm1hcChmdW5jdGlvbihZKXtpZighRVtZXSlyZXR1cm4gY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwiIElu''@;'; put 'put ''dmFsaWQga2V5OiAiKS5jb25jYXQoWSkpLCExO3ZhciBYPWtbWV0sVT1FW1ldO2lmKCJzdHJpbmciPT10eXBlb2YgVSYmKFU9e3R5cGU6VX0pLCJmb3JtYXQiPT09VS50eXBlKXtpZighSyhYLE8sIltWYWxpZGF0ZSAiLmNvbmNhdChZLCJdIiksITApKXJldHVybiExfWVsc2UgaWYobShYKSE9''@;'; put 'put ''PVUudHlwZSlyZXR1cm4gY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwiICIpLmNvbmNhdChZLCcgdHlwZSBtaXNtYXRjaGVkOiAiJykuY29uY2F0KFUudHlwZSwnIiBleHBlY3RlZCwgIicpLmNvbmNhdChtKFgpLCciIHByb3ZpZGVkJykpLCExO2lmKFUucmVzdHJpY3Rpb25zJiZVLnJlc3Ry''@;'; put 'put ''aWN0aW9ucy5sZW5ndGgpZm9yKHZhciBxPVUucmVzdHJpY3Rpb25zLmxlbmd0aCxlZT0wO2VlPHE7ZWUrKyl7dmFyIHRlPVUucmVzdHJpY3Rpb25zW2VlXSxzZT10ZS5tZXNzYWdlO2lmKCEoMCx0ZS5yZXN0cmljdGlvbikoWCxrKSlyZXR1cm4gY29uc29sZS5lcnJvcigiIi5jb25jYXQoaiwi''@;'; put 'put ''ICIpLmNvbmNhdChZLCIgaW52YWxpZCB2YWx1ZTogIikuY29uY2F0KHNlKSksITF9cmV0dXJuIFUucmVzdHJpY3Rpb24mJiFVLnJlc3RyaWN0aW9uKFgsayk/KGNvbnNvbGUuZXJyb3IoIiIuY29uY2F0KGosIiAiKS5jb25jYXQoWSwiIGludmFsaWQgdmFsdWU6ICIpLmNvbmNhdChVLm1lc3Nh''@;'; put 'put ''Z2UpKSwhMSk6VS52YWxpZFZhbHVlcyYmLTE9PT1VLnZhbGlkVmFsdWVzLmluZGV4T2YoWCk/KGNvbnNvbGUuZXJyb3IoIiIuY29uY2F0KGosIiAiKS5jb25jYXQoWSwiIGludmFsaWQgdmFsdWU6IG11c3QgYmUgYW1vbmcgIikuY29uY2F0KEpTT04uc3RyaW5naWZ5KFUudmFsaWRWYWx1ZXMp''@;'; put 'put ''LCcsICInKS5jb25jYXQoWCwnIiBwcm92aWRlZCcpKSwhMSk6IShVLmNoaWxkcmVuJiYhSyhYLFUuY2hpbGRyZW4sIltWYWxpZGF0ZSAiLmNvbmNhdChZLCJdIikpKX0pO3JldHVybiBWfHxCLnB1c2guYXBwbHkoQixmdW5jdGlvbiB4KGspe3JldHVybiBmdW5jdGlvbihFKXtpZihBcnJheS5p''@;'; put 'put ''c0FycmF5KEUpKXtmb3IodmFyIGo9MCxWPW5ldyBBcnJheShFLmxlbmd0aCk7ajxFLmxlbmd0aDtqKyspVltqXT1FW2pdO3JldHVybiBWfX0oayl8fGZ1bmN0aW9uKEUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoRSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZy5jYWxsKEUpKXJldHVybiBBcnJheS5mcm9tKEUpfShrKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfShPYmplY3Qua2V5cyhFKS5tYXAoZnVuY3Rpb24oWSl7''@;'; put 'put ''dmFyIFg9RVtZXTtpZigic3RyaW5nIj09dHlwZW9mIFgmJihYPXt0eXBlOlh9KSxYLm1hbmRhdG9yeSl7dmFyIFU9WC5tYW5kYXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUmJihVPVUoaykpLFUmJnZvaWQgMD09PWtbWV0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoIiIuY29uY2F0KGosJyBN''@;'; put 'put ''aXNzaW5nIG1hbmRhdG9yeSBrZXkgIicpLmNvbmNhdChZLCciJykpLCExfXJldHVybiEwfSkpKSxCLnJlZHVjZShmdW5jdGlvbihZLFgpe3JldHVybiBZJiZYfSwhMCl9ZnVuY3Rpb24gSShrKXtyZXR1cm4gSyhrLE8sIltWYWxpZGF0ZSBmb3JtYXRdIil9Ri5leHBvcnRzPXt2YWxpZGF0ZTpm''@;'; put 'put ''dW5jdGlvbihrLEUpe3ZhciBqPXooayksVj1JKEUpO3JldHVybiBqJiZWfSx2YWxpZGF0ZUZvcm1hdDpJLHZhbGlkYXRlSW5wdXQ6eix2YWxpZGF0ZUxhbmd1YWdlOmZ1bmN0aW9uKGspe3JldHVybiBLKGssUiwiW1ZhbGlkYXRlIGxhbmd1YWdlXSIpfX19LHsiLi91bmZvcm1hdHRpbmciOjl9''@;'; put 'put ''XX0se30sWzddKSg3KX0sODEzMjI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI3NDE0KTtJZS5jZXJ0aWZpY2F0ZT1GKDk3MjkwKTt2YXIgeD1hZS5kZWZpbmUoIlJTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5p''@;'; put 'put ''bnQoKSx0aGlzLmtleSgibW9kdWx1cyIpLmludCgpLHRoaXMua2V5KCJwdWJsaWNFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUxIikuaW50KCksdGhpcy5rZXkoInByaW1lMiIpLmludCgpLHRoaXMua2V5KCJleHBvbmVu''@;'; put 'put ''dDEiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQyIikuaW50KCksdGhpcy5rZXkoImNvZWZmaWNpZW50IikuaW50KCkpfSk7SWUuUlNBUHJpdmF0ZUtleT14O3ZhciBtPWFlLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVz''@;'; put 'put ''IikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7SWUuUlNBUHVibGljS2V5PW07dmFyIGxlPWFlLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShNKSx0aGlzLmtl''@;'; put 'put ''eSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO0llLlB1YmxpY0tleT1sZTt2YXIgTT1hZS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxs''@;'; put 'put ''XygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksTz1hZS5kZWZp''@;'; put 'put ''bmUoIlByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShNKSx0aGlzLmtleSgic3ViamVjdFByaXZhdGVLZXkiKS5vY3RzdHIoKSl9KTtJZS5Qcml2YXRlS2V5PU87dmFyIFI9''@;'; put 'put ''YWUuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNl''@;'; put 'put ''cSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmpp''@;'; put 'put ''ZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0llLkVuY3J5cHRlZFByaXZhdGVLZXk9Ujt2YXIgej1hZS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXko''@;'; put 'put ''InZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO0llLkRTQVByaXZhdGVLZXk9eixJZS5EU0FwYXJhbT1h''@;'; put 'put ''ZS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgSz1hZS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5r''@;'; put 'put ''ZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShJKSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtJZS5FQ1ByaXZhdGVLZXk9Szt2YXIgST1hZS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0''@;'; put 'put ''aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO0llLnNpZ25hdHVyZT1hZS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDk3MjkwOihhdCxJZSxGKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNzQxNCkseD1hZS5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5nZW50aW1lKCl9KX0pLG09YWUuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLGxlPWFlLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlz''@;'; put 'put ''LmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLE09YWUuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKGxlKSx0aGlz''@;'; put 'put ''LmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLE89YWUuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YobSl9KSxSPWFlLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihPKX0pLHo9YWUuZGVm''@;'; put 'put ''aW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShSKX0pfSksSz1hZS5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJub3RCZWZvcmUiKS51c2UoeCksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNl''@;'; put 'put ''KHgpKX0pLEk9YWUuZGVmaW5lKCJFeHRlbnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLGs9YWUuZGVmaW5l''@;'; put 'put ''KCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UobGUpLHRoaXMua2V5KCJp''@;'; put 'put ''c3N1ZXIiKS51c2UoeiksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKEspLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKHopLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZShNKSx0aGlzLmtleSgiaXNzdWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25h''@;'; put 'put ''bCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoSSkub3B0aW9uYWwoKSl9KSxFPWFlLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnNDZXJ0aWZpY2F0ZSIpLnVzZShrKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKGxlKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTthdC5leHBvcnRzPUV9LDE3NTIwOihhdCxJZSxGKT0+e3ZhciBhZT0v''@;'; put 'put ''UHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSx4PS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0v''@;'; put 'put ''bSxtPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLGxlPUYoMzY1MDUpLE09Rig4MjQ4OSksTz1GKDg0MykuQnVmZmVyO2F0LmV4cG9ydHM9ZnVuY3Rpb24oUix6KXt2YXIgayxLPVIudG9TdHJp''@;'; put 'put ''bmcoKSxJPUsubWF0Y2goYWUpO2lmKEkpe3ZhciBqPSJhZXMiK0lbMV0sVj1PLmZyb20oSVsyXSwiaGV4IiksQj1PLmZyb20oSVszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLFk9bGUoeixWLnNsaWNlKDAsOCkscGFyc2VJbnQoSVsxXSwxMCkpLmtleSxYPVtdLFU9TS5jcmVh''@;'; put 'put ''dGVEZWNpcGhlcml2KGosWSxWKTtYLnB1c2goVS51cGRhdGUoQikpLFgucHVzaChVLmZpbmFsKCkpLGs9Ty5jb25jYXQoWCl9ZWxzZXt2YXIgRT1LLm1hdGNoKG0pO2s9Ty5mcm9tKEVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOksubWF0Y2goeClbMV0s''@;'; put 'put ''ZGF0YTprfX19LDg3OTgzOihhdCxJZSxGKT0+e3ZhciBhZT1GKDgxMzIyKSx4PUYoMjI1NjIpLG09RigxNzUyMCksbGU9Rig4MjQ4OSksTT1GKDU3MTAwKSxPPUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24gUihLKXt2YXIgSTsib2JqZWN0Ij09dHlwZW9mIEsmJiFPLmlzQnVmZmVyKEspJiYoST1L''@;'; put 'put ''LnBhc3NwaHJhc2UsSz1LLmtleSksInN0cmluZyI9PXR5cGVvZiBLJiYoSz1PLmZyb20oSykpO3ZhciBWLEIsaz1tKEssSSksRT1rLnRhZyxqPWsuZGF0YTtzd2l0Y2goRSl7Y2FzZSJDRVJUSUZJQ0FURSI6Qj1hZS5jZXJ0aWZpY2F0ZS5kZWNvZGUoaiwiZGVyIikudGJzQ2VydGlmaWNhdGUu''@;'; put 'put ''c3ViamVjdFB1YmxpY0tleUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goQnx8KEI9YWUuUHVibGljS2V5LmRlY29kZShqLCJkZXIiKSksVj1CLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gYWUuUlNBUHVibGljS2V5''@;'; put 'put ''LmRlY29kZShCLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIEIuc3ViamVjdFByaXZhdGVLZXk9Qi5zdWJqZWN0UHVibGljS2V5LHt0eXBlOiJlYyIsZGF0YTpCfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gQi5hbGdv''@;'; put 'put ''cml0aG0ucGFyYW1zLnB1Yl9rZXk9YWUuRFNBcGFyYW0uZGVjb2RlKEIuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOkIuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVil9Y2FzZSJFTkNSWVBU''@;'; put 'put ''RUQgUFJJVkFURSBLRVkiOmo9ZnVuY3Rpb24geihLLEkpe3ZhciBrPUsuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEU9cGFyc2VJbnQoSy5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLGo9eFtLLmFsZ29yaXRobS5kZWNy''@;'; put 'put ''eXB0LmNpcGhlci5hbGdvLmpvaW4oIi4iKV0sVj1LLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixCPUsuc3ViamVjdFByaXZhdGVLZXksWT1wYXJzZUludChqLnNwbGl0KCItIilbMV0sMTApLzgsWD1NLnBia2RmMlN5bmMoSSxrLEUsWSwic2hhMSIpLFU9bGUuY3JlYXRlRGVjaXBoZXJp''@;'; put 'put ''dihqLFgsVikscT1bXTtyZXR1cm4gcS5wdXNoKFUudXBkYXRlKEIpKSxxLnB1c2goVS5maW5hbCgpKSxPLmNvbmNhdChxKX0oaj1hZS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShqLCJkZXIiKSxJKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVj0oQj1hZS5Qcml2YXRlS2V5LmRlY29k''@;'; put 'put ''ZShqLCJkZXIiKSkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBhZS5SU0FQcml2YXRlS2V5LmRlY29kZShCLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6''@;'; put 'put ''Qi5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTphZS5FQ1ByaXZhdGVLZXkuZGVjb2RlKEIuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiBCLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9YWUuRFNBcGFyYW0uZGVj''@;'; put 'put ''b2RlKEIuc3ViamVjdFByaXZhdGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpCLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1YpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiBhZS5SU0FQdWJsaWNLZXkuZGVjb2Rl''@;'; put 'put ''KGosImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gYWUuUlNBUHJpdmF0ZUtleS5kZWNvZGUoaiwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBlOiJkc2EiLHBhcmFtczphZS5EU0FQcml2YXRlS2V5LmRlY29kZShqLCJkZXIiKX07Y2FzZSJFQyBQUklW''@;'; put 'put ''QVRFIEtFWSI6cmV0dXJue2N1cnZlOihqPWFlLkVDUHJpdmF0ZUtleS5kZWNvZGUoaiwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpqLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIrRSl9fWF0LmV4cG9ydHM9UixSLnNp''@;'; put 'put ''Z25hdHVyZT1hZS5zaWduYXR1cmV9LDU3MTAwOihhdCxJZSxGKT0+e0llLnBia2RmMj1GKDI4NzgxKSxJZS5wYmtkZjJTeW5jPUYoNjgwNDcpfSwyODc4MTooYXQsSWUsRik9Pnt2YXIgTyxrLGFlPUYoODQzKS5CdWZmZXIseD1GKDQ4ODEpLG09Rig3NTk4MCksbGU9Rig2ODA0NyksTT1GKDY3''@;'; put 'put ''MzA2KSxSPWdsb2JhbC5jcnlwdG8mJmdsb2JhbC5jcnlwdG8uc3VidGxlLHo9e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hh''@;'; put 'put ''LTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LEs9W107ZnVuY3Rpb24gRSgpe3JldHVybiBrfHwoaz1nbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2s/Z2xvYmFsLnByb2Nlc3MubmV4dFRpY2s6Z2xvYmFsLnF1ZXVlTWljcm90YXNrP2dsb2JhbC5xdWV1ZU1p''@;'; put 'put ''Y3JvdGFzazpnbG9iYWwuc2V0SW1tZWRpYXRlP2dsb2JhbC5zZXRJbW1lZGlhdGU6Z2xvYmFsLnNldFRpbWVvdXQpfWZ1bmN0aW9uIGooQixZLFgsVSxxKXtyZXR1cm4gUi5pbXBvcnRLZXkoInJhdyIsQix7bmFtZToiUEJLREYyIn0sITEsWyJkZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24o''@;'; put 'put ''ZWUpe3JldHVybiBSLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpZLGl0ZXJhdGlvbnM6WCxoYXNoOntuYW1lOnF9fSxlZSxVPDwzKX0pLnRoZW4oZnVuY3Rpb24oZWUpe3JldHVybiBhZS5mcm9tKGVlKX0pfWF0LmV4cG9ydHM9ZnVuY3Rpb24oQixZLFgsVSxxLGVlKXsiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgcSYmKGVlPXEscT12b2lkIDApO3ZhciB0ZT16WyhxPXF8fCJzaGExIikudG9Mb3dlckNhc2UoKV07aWYodGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBnbG9iYWwuUHJvbWlzZSl7aWYoeChYLFUpLEI9TShCLG0sIlBhc3N3b3JkIiksWT1NKFksbSwiU2FsdCIpLCJmdW5jdGlv''@;'; put 'put ''biIhPXR5cGVvZiBlZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBWKEIsWSl7Qi50aGVuKGZ1bmN0aW9uKFgpe0UoKShmdW5jdGlvbigpe1kobnVsbCxYKX0pfSxmdW5jdGlvbihYKXtFKCkoZnVuY3Rpb24oKXtZKFgpfSl9KX0o''@;'; put 'put ''ZnVuY3Rpb24gSShCKXtpZihnbG9iYWwucHJvY2VzcyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFSfHwhUi5pbXBvcnRLZXl8fCFSLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09S1tCXSlyZXR1cm4gS1tCXTt2YXIgWT1qKE89T3x8YWUuYWxs''@;'; put 'put ''b2MoOCksTywxMCwxMjgsQikudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiBLW0JdPVksWX0odGUpLnRoZW4oZnVuY3Rpb24ob2Upe3JldHVybiBvZT9qKEIsWSxYLFUsdGUpOmxlKEIsWSxYLFUscSl9KSxlZSl9ZWxzZSBFKCko''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgb2U7dHJ5e29lPWxlKEIsWSxYLFUscSl9Y2F0Y2goc2Upe3JldHVybiBlZShzZSl9ZWUobnVsbCxvZSl9KX19LDc1OTgwOmF0PT57dmFyIEllO0llPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmds''@;'; put 'put ''b2JhbC5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04IixhdC5leHBvcnRzPUllfSw0ODgxOmF0PT57dmFyIEllPU1hdGgucG93KDIsMzApLTE7YXQuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihGLGFlKXtpZigibnVtYmVyIiE9dHlwZW9mIEYpdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihGPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIGFlKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoYWU8MHx8YWU+SWV8fGFlIT1hZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sNjgwNDc6KGF0LEllLEYpPT57dmFyIGFlPUYoODc1ODgpLHg9RigzOTcwNiksbT1GKDk3OTY1KSxsZT1GKDg0MykuQnVmZmVy''@;'; put 'put ''LE09Rig0ODgxKSxPPUYoNzU5ODApLFI9Rig2NzMwNiksej1sZS5hbGxvYygxMjgpLEs9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBJKGosVixCKXt2YXIgWT1mdW5jdGlvbiBr''@;'; put 'put ''KGope3JldHVybiJybWQxNjAiPT09anx8InJpcGVtZDE2MCI9PT1qP2Z1bmN0aW9uIEIoWSl7cmV0dXJuKG5ldyB4KS51cGRhdGUoWSkuZGlnZXN0KCl9OiJtZDUiPT09aj9hZTpmdW5jdGlvbiBWKFkpe3JldHVybiBtKGopLnVwZGF0ZShZKS5kaWdlc3QoKX19KGopLFg9InNoYTUxMiI9PT1q''@;'; put 'put ''fHwic2hhMzg0Ij09PWo/MTI4OjY0O1YubGVuZ3RoPlg/Vj1ZKFYpOlYubGVuZ3RoPFgmJihWPWxlLmNvbmNhdChbVix6XSxYKSk7Zm9yKHZhciBVPWxlLmFsbG9jVW5zYWZlKFgrS1tqXSkscT1sZS5hbGxvY1Vuc2FmZShYK0tbal0pLGVlPTA7ZWU8WDtlZSsrKVVbZWVdPTU0XlZbZWVdLHFb''@;'; put 'put ''ZWVdPTkyXlZbZWVdO3ZhciB0ZT1sZS5hbGxvY1Vuc2FmZShYK0IrNCk7VS5jb3B5KHRlLDAsMCxYKSx0aGlzLmlwYWQxPXRlLHRoaXMuaXBhZDI9VSx0aGlzLm9wYWQ9cSx0aGlzLmFsZz1qLHRoaXMuYmxvY2tzaXplPVgsdGhpcy5oYXNoPVksdGhpcy5zaXplPUtbal19SS5wcm90b3R5cGUu''@;'; put 'put ''cnVuPWZ1bmN0aW9uKGosVil7cmV0dXJuIGouY29weShWLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVikuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSxhdC5leHBvcnRzPWZ1bmN0aW9uIEUoaixWLEIsWSxYKXtNKEIsWSk7dmFyIFU9bmV3''@;'; put 'put ''IEkoWD1YfHwic2hhMSIsaj1SKGosTywiUGFzc3dvcmQiKSwoVj1SKFYsTywiU2FsdCIpKS5sZW5ndGgpLHE9bGUuYWxsb2NVbnNhZmUoWSksZWU9bGUuYWxsb2NVbnNhZmUoVi5sZW5ndGgrNCk7Vi5jb3B5KGVlLDAsMCxWLmxlbmd0aCk7Zm9yKHZhciB0ZT0wLG9lPUtbWF0sc2U9TWF0aC5j''@;'; put 'put ''ZWlsKFkvb2UpLGhlPTE7aGU8PXNlO2hlKyspe2VlLndyaXRlVUludDMyQkUoaGUsVi5sZW5ndGgpO2Zvcih2YXIgdWU9VS5ydW4oZWUsVS5pcGFkMSksY2U9dWUsRz0xO0c8QjtHKyspe2NlPVUucnVuKGNlLFUuaXBhZDIpO2Zvcih2YXIgYj0wO2I8b2U7YisrKXVlW2JdXj1jZVtiXX11ZS5j''@;'; put 'put ''b3B5KHEsdGUpLHRlKz1vZX1yZXR1cm4gcX19LDY3MzA2OihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2F0LmV4cG9ydHM9ZnVuY3Rpb24oeCxtLGxlKXtpZihhZS5pc0J1ZmZlcih4KSlyZXR1cm4geDtpZigic3RyaW5nIj09dHlwZW9mIHgpcmV0dXJuIGFlLmZyb20oeCxtKTtp''@;'; put 'put ''ZihBcnJheUJ1ZmZlci5pc1ZpZXcoeCkpcmV0dXJuIGFlLmZyb20oeC5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IobGUrIiBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSwxNzQ4MDpmdW5jdGlvbihhdCxJZSxGKXshZnVuY3Rp''@;'; put 'put ''b24oYWUseCl7InVzZSBzdHJpY3QiO3ZhciBtO3RyeXttPUYoMTY2NzYpfWNhdGNoe31hdC5leHBvcnRzPWZ1bmN0aW9uKGFlKXt2YXIgeD0iZnVuY3Rpb24iPT10eXBlb2YgYWUsbT0hIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyLGxlPXdpbmRvdy5kb2N1bWVudCxNPXdpbmRvdy5zZXRUaW1l''@;'; put 'put ''b3V0LE89ZnVuY3Rpb24oQyxTLHYscCl7bT9DLmFkZEV2ZW50TGlzdGVuZXIoUyx2LCEhcCk6Qy5hdHRhY2hFdmVudCgib24iK1Msdil9LFI9ZnVuY3Rpb24oQyxTLHYscCl7bT9DLnJlbW92ZUV2ZW50TGlzdGVuZXIoUyx2LCEhcCk6Qy5kZXRhY2hFdmVudCgib24iK1Msdil9LEs9ZnVuY3Rp''@;'; put 'put ''b24oQyxTKXtyZXR1cm4tMSE9PSgiICIrQy5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitTKyIgIil9LEk9ZnVuY3Rpb24oQyxTKXtLKEMsUyl8fChDLmNsYXNzTmFtZT0iIj09PUMuY2xhc3NOYW1lP1M6Qy5jbGFzc05hbWUrIiAiK1MpfSxrPWZ1bmN0aW9uKEMsUyl7Qy5jbGFzc05hbWU9''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIEMudHJpbT9DLnRyaW0oKTpDLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oKCIgIitDLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoIiAiK1MrIiAiLCIgIikpfSxFPWZ1bmN0aW9uKEMpe3JldHVybi9BcnJheS8udGVzdChPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwoQykpfSxqPWZ1bmN0aW9uKEMpe3JldHVybi9EYXRlLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDKSkmJiFpc05hTihDLmdldFRpbWUoKSl9LFY9ZnVuY3Rpb24oQyl7dmFyIFM9Qy5nZXREYXkoKTtyZXR1cm4gMD09PVN8fDY9PT1TfSxCPWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybiBDJTQ9PTAmJkMlMTAwIT0wfHxDJTQwMD09MH0sWT1mdW5jdGlvbihDLFMpe3JldHVyblszMSxCKEMpPzI5OjI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXVtTXX0sWD1mdW5jdGlvbihDKXtqKEMpJiZDLnNldEhvdXJzKDAsMCwwLDApfSxVPWZ1bmN0aW9uKEMs''@;'; put 'put ''Uyl7cmV0dXJuIEMuZ2V0VGltZSgpPT09Uy5nZXRUaW1lKCl9LHE9ZnVuY3Rpb24oQyxTLHYpe3ZhciBwLHc7Zm9yKHAgaW4gUykodz12b2lkIDAhPT1DW3BdKSYmIm9iamVjdCI9PXR5cGVvZiBTW3BdJiZudWxsIT09U1twXSYmdm9pZCAwPT09U1twXS5ub2RlTmFtZT9qKFNbcF0pP3YmJihD''@;'; put 'put ''W3BdPW5ldyBEYXRlKFNbcF0uZ2V0VGltZSgpKSk6RShTW3BdKT92JiYoQ1twXT1TW3BdLnNsaWNlKDApKTpDW3BdPXEoe30sU1twXSx2KToodnx8IXcpJiYoQ1twXT1TW3BdKTtyZXR1cm4gQ30sZWU9ZnVuY3Rpb24oQyxTLHYpe3ZhciBwO2xlLmNyZWF0ZUV2ZW50PygocD1sZS5jcmVhdGVF''@;'; put 'put ''dmVudCgiSFRNTEV2ZW50cyIpKS5pbml0RXZlbnQoUywhMCwhMSkscD1xKHAsdiksQy5kaXNwYXRjaEV2ZW50KHApKTpsZS5jcmVhdGVFdmVudE9iamVjdCYmKHA9bGUuY3JlYXRlRXZlbnRPYmplY3QoKSxwPXEocCx2KSxDLmZpcmVFdmVudCgib24iK1MscCkpfSx0ZT1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gQy5tb250aDwwJiYoQy55ZWFyLT1NYXRoLmNlaWwoTWF0aC5hYnMoQy5tb250aCkvMTIpLEMubW9udGgrPTEyKSxDLm1vbnRoPjExJiYoQy55ZWFyKz1NYXRoLmZsb29yKE1hdGguYWJzKEMubW9udGgpLzEyKSxDLm1vbnRoLT0xMiksQ30sb2U9e2ZpZWxkOm51bGwsYm91bmQ6dm9p''@;'; put 'put ''ZCAwLGFyaWFMYWJlbDoiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIHBpY2sgYSBkYXRlIixwb3NpdGlvbjoiYm90dG9tIGxlZnQiLHJlcG9zaXRpb246ITAsZm9ybWF0OiJZWVlZLU1NLUREIix0b1N0cmluZzpudWxsLHBhcnNlOm51bGwsZGVmYXVsdERhdGU6bnVsbCxzZXREZWZhdWx0RGF0ZToh''@;'; put 'put ''MSxmaXJzdERheTowLGZpcnN0V2Vla09mWWVhck1pbkRheXM6NCxmb3JtYXRTdHJpY3Q6ITEsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCx5ZWFyUmFuZ2U6MTAsc2hvd1dlZWtOdW1iZXI6ITEscGlja1dob2xlV2VlazohMSxtaW5ZZWFyOjAsbWF4WWVhcjo5OTk5LG1pbk1vbnRoOnZvaWQg''@;'; put 'put ''MCxtYXhNb250aDp2b2lkIDAsc3RhcnRSYW5nZTpudWxsLGVuZFJhbmdlOm51bGwsaXNSVEw6ITEseWVhclN1ZmZpeDoiIixzaG93TW9udGhBZnRlclllYXI6ITEsc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNN''@;'; put 'put ''b250aHM6ITEsbnVtYmVyT2ZNb250aHM6MSxtYWluQ2FsZW5kYXI6ImxlZnQiLGNvbnRhaW5lcjp2b2lkIDAsYmx1ckZpZWxkT25TZWxlY3Q6ITAsaTE4bjp7cHJldmlvdXNNb250aDoiUHJldmlvdXMgTW9udGgiLG5leHRNb250aDoiTmV4dCBNb250aCIsbW9udGhzOlsiSmFudWFyeSIsIkZl''@;'; put 'put ''YnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSx3ZWVrZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRh''@;'; put 'put ''eSIsIlNhdHVyZGF5Il0sd2Vla2RheXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdfSx0aGVtZTpudWxsLGV2ZW50czpbXSxvblNlbGVjdDpudWxsLG9uT3BlbjpudWxsLG9uQ2xvc2U6bnVsbCxvbkRyYXc6bnVsbCxrZXlib2FyZElucHV0OiEwfSxz''@;'; put 'put ''ZT1mdW5jdGlvbihDLFMsdil7Zm9yKFMrPUMuZmlyc3REYXk7Uz49NzspUy09NztyZXR1cm4gdj9DLmkxOG4ud2Vla2RheXNTaG9ydFtTXTpDLmkxOG4ud2Vla2RheXNbU119LGhlPWZ1bmN0aW9uKEMpe3ZhciBTPVtdLHY9ImZhbHNlIjtpZihDLmlzRW1wdHkpe2lmKCFDLnNob3dEYXlzSW5O''@;'; put 'put ''ZXh0QW5kUHJldmlvdXNNb250aHMpcmV0dXJuJzx0ZCBjbGFzcz0iaXMtZW1wdHkiPjwvdGQ+JztTLnB1c2goImlzLW91dHNpZGUtY3VycmVudC1tb250aCIpLEMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfHxTLnB1c2goImlzLXNlbGVjdGlvbi1kaXNhYmxl''@;'; put 'put ''ZCIpfXJldHVybiBDLmlzRGlzYWJsZWQmJlMucHVzaCgiaXMtZGlzYWJsZWQiKSxDLmlzVG9kYXkmJlMucHVzaCgiaXMtdG9kYXkiKSxDLmlzU2VsZWN0ZWQmJihTLnB1c2goImlzLXNlbGVjdGVkIiksdj0idHJ1ZSIpLEMuaGFzRXZlbnQmJlMucHVzaCgiaGFzLWV2ZW50IiksQy5pc0luUmFu''@;'; put 'put ''Z2UmJlMucHVzaCgiaXMtaW5yYW5nZSIpLEMuaXNTdGFydFJhbmdlJiZTLnB1c2goImlzLXN0YXJ0cmFuZ2UiKSxDLmlzRW5kUmFuZ2UmJlMucHVzaCgiaXMtZW5kcmFuZ2UiKSwnPHRkIGRhdGEtZGF5PSInK0MuZGF5KyciIGNsYXNzPSInK1Muam9pbigiICIpKyciIGFyaWEtc2VsZWN0ZWQ9''@;'; put 'put ''IicrdisnIj48YnV0dG9uIGNsYXNzPSJwaWthLWJ1dHRvbiBwaWthLWRheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBpa2EteWVhcj0iJytDLnllYXIrJyIgZGF0YS1waWthLW1vbnRoPSInK0MubW9udGgrJyIgZGF0YS1waWthLWRheT0iJytDLmRheSsnIj4nK0MuZGF5KyI8L2J1dHRvbj48L3Rk''@;'; put 'put ''PiJ9LGNlPWZ1bmN0aW9uKEMsUyx2LHApe3ZhciB3PW5ldyBEYXRlKHYsUyxDKTtyZXR1cm4nPHRkIGNsYXNzPSJwaWthLXdlZWsiPicrKHg/YWUodykuaXNvV2VlaygpOmZ1bmN0aW9uKEMsUyl7Qy5zZXRIb3VycygwLDAsMCwwKTt2YXIgdj1DLmdldERhdGUoKSxwPUMuZ2V0RGF5KCksdz1T''@;'; put 'put ''LEo9dy0xLGRlPWZ1bmN0aW9uKE9lKXtyZXR1cm4oT2UrNy0xKSU3fTtDLnNldERhdGUoditKLWRlKHApKTt2YXIgZmU9bmV3IERhdGUoQy5nZXRGdWxsWWVhcigpLDAsdyksTGU9KEMuZ2V0VGltZSgpLWZlLmdldFRpbWUoKSkvODY0ZTU7cmV0dXJuIDErTWF0aC5yb3VuZCgoTGUtSitkZShm''@;'; put 'put ''ZS5nZXREYXkoKSkpLzcpfSh3LHApKSsiPC90ZD4ifSxHPWZ1bmN0aW9uKEMsUyx2LHApe3JldHVybic8dHIgY2xhc3M9InBpa2Etcm93Jysodj8iIHBpY2std2hvbGUtd2VlayI6IiIpKyhwPyIgaXMtc2VsZWN0ZWQiOiIiKSsnIj4nKyhTP0MucmV2ZXJzZSgpOkMpLmpvaW4oIiIpKyI8L3Ry''@;'; put 'put ''PiJ9LEg9ZnVuY3Rpb24oQyxTLHYscCx3LEope3ZhciBuZSxkZSxmZSxqZSxXZSx4ZT1DLl9vLExlPXY9PT14ZS5taW5ZZWFyLEZlPXY9PT14ZS5tYXhZZWFyLE9lPSc8ZGl2IGlkPSInK0orJyIgY2xhc3M9InBpa2EtdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0iYXNzZXJ0aXZl''@;'; put 'put ''Ij4nLEtlPSEwLFllPSEwO2ZvcihmZT1bXSxuZT0wO25lPDEyO25lKyspZmUucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJysodj09PXc/bmUtUzoxMituZS1TKSsnIicrKG5lPT09cD8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsoTGUmJm5lPHhlLm1pbk1vbnRofHxGZSYmbmU+eGUubWF4TW9u''@;'; put 'put ''dGg/JyBkaXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK3hlLmkxOG4ubW9udGhzW25lXSsiPC9vcHRpb24+Iik7Zm9yKGplPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK3hlLmkxOG4ubW9udGhzW3BdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aCIg''@;'; put 'put ''dGFiaW5kZXg9Ii0xIj4nK2ZlLmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLEUoeGUueWVhclJhbmdlKT8obmU9eGUueWVhclJhbmdlWzBdLGRlPXhlLnllYXJSYW5nZVsxXSsxKToobmU9di14ZS55ZWFyUmFuZ2UsZGU9MSt2K3hlLnllYXJSYW5nZSksZmU9W107bmU8ZGUmJm5lPD14ZS5t''@;'; put 'put ''YXhZZWFyO25lKyspbmU+PXhlLm1pblllYXImJmZlLnB1c2goJzxvcHRpb24gdmFsdWU9IicrbmUrJyInKyhuZT09PXY/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK25lKyI8L29wdGlvbj4iKTtyZXR1cm4gV2U9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrdit4ZS55ZWFyU3Vm''@;'; put 'put ''Zml4Kyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC15ZWFyIiB0YWJpbmRleD0iLTEiPicrZmUuam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsT2UrPXhlLnNob3dNb250aEFmdGVyWWVhcj9XZStqZTpqZStXZSxMZSYmKDA9PT1wfHx4ZS5taW5Nb250aD49cCkmJihL''@;'; put 'put ''ZT0hMSksRmUmJigxMT09PXB8fHhlLm1heE1vbnRoPD1wKSYmKFllPSExKSwwPT09UyYmKE9lKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1wcmV2JysoS2U/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+Jyt4ZS5pMThuLnByZXZpb3VzTW9udGgrIjwvYnV0dG9uPiIpLFM9PT1D''@;'; put 'put ''Ll9vLm51bWJlck9mTW9udGhzLTEmJihPZSs9JzxidXR0b24gY2xhc3M9InBpa2EtbmV4dCcrKFllPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicreGUuaTE4bi5uZXh0TW9udGgrIjwvYnV0dG9uPiIpLE9lKyI8L2Rpdj4ifSxOPWZ1bmN0aW9uKEMsUyx2KXtyZXR1cm4n''@;'; put 'put ''PHRhYmxlIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBpa2EtdGFibGUiIHJvbGU9ImdyaWQiIGFyaWEtbGFiZWxsZWRieT0iJyt2KyciPicrZnVuY3Rpb24oQyl7dmFyIFMsdj1bXTtmb3IoQy5zaG93V2Vla051bWJlciYmdi5wdXNoKCI8dGg+PC90aD4iKSxTPTA7''@;'; put 'put ''Uzw3O1MrKyl2LnB1c2goJzx0aCBzY29wZT0iY29sIj48YWJiciB0aXRsZT0iJytzZShDLFMpKyciPicrc2UoQyxTLCEwKSsiPC9hYmJyPjwvdGg+Iik7cmV0dXJuIjx0aGVhZD48dHI+IisoQy5pc1JUTD92LnJldmVyc2UoKTp2KS5qb2luKCIiKSsiPC90cj48L3RoZWFkPiJ9KEMpK2Z1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiI8dGJvZHk+IitDLmpvaW4oIiIpKyI8L3Rib2R5PiJ9KFMpKyI8L3RhYmxlPiJ9LGc9ZnVuY3Rpb24oQyl7dmFyIFM9dGhpcyx2PVMuY29uZmlnKEMpO1MuX29uTW91c2VEb3duPWZ1bmN0aW9uKHcpe2lmKFMuX3Ype3ZhciBKPSh3PXd8fHdpbmRvdy5ldmVudCkudGFy''@;'; put 'put ''Z2V0fHx3LnNyY0VsZW1lbnQ7aWYoSilpZihLKEosImlzLWRpc2FibGVkIil8fCghSyhKLCJwaWthLWJ1dHRvbiIpfHxLKEosImlzLWVtcHR5Iil8fEsoSi5wYXJlbnROb2RlLCJpcy1kaXNhYmxlZCIpP0soSiwicGlrYS1wcmV2Iik/Uy5wcmV2TW9udGgoKTpLKEosInBpa2EtbmV4dCIpJiZT''@;'; put 'put ''Lm5leHRNb250aCgpOihTLnNldERhdGUobmV3IERhdGUoSi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksSi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLEouZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpKSx2LmJvdW5kJiZNKGZ1bmN0aW9uKCl7Uy5oaWRlKCks''@;'; put 'put ''di5ibHVyRmllbGRPblNlbGVjdCYmdi5maWVsZCYmdi5maWVsZC5ibHVyKCl9LDEwMCkpKSxLKEosInBpa2Etc2VsZWN0IikpUy5fYz0hMDtlbHNle2lmKCF3LnByZXZlbnREZWZhdWx0KXJldHVybiB3LnJldHVyblZhbHVlPSExLCExO3cucHJldmVudERlZmF1bHQoKX19fSxTLl9vbkNoYW5n''@;'; put 'put ''ZT1mdW5jdGlvbih3KXt2YXIgSj0odz13fHx3aW5kb3cuZXZlbnQpLnRhcmdldHx8dy5zcmNFbGVtZW50O0omJihLKEosInBpa2Etc2VsZWN0LW1vbnRoIik/Uy5nb3RvTW9udGgoSi52YWx1ZSk6SyhKLCJwaWthLXNlbGVjdC15ZWFyIikmJlMuZ290b1llYXIoSi52YWx1ZSkpfSxTLl9vbktl''@;'; put 'put ''eUNoYW5nZT1mdW5jdGlvbih3KXtpZih3PXd8fHdpbmRvdy5ldmVudCxTLmlzVmlzaWJsZSgpKXN3aXRjaCh3LmtleUNvZGUpe2Nhc2UgMTM6Y2FzZSAyNzp2LmZpZWxkJiZ2LmZpZWxkLmJsdXIoKTticmVhaztjYXNlIDM3OlMuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpO2JyZWFrO2Nhc2Ug''@;'; put 'put ''Mzg6Uy5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyk7YnJlYWs7Y2FzZSAzOTpTLmFkanVzdERhdGUoImFkZCIsMSk7YnJlYWs7Y2FzZSA0MDpTLmFkanVzdERhdGUoImFkZCIsNyk7YnJlYWs7Y2FzZSA4OmNhc2UgNDY6Uy5zZXREYXRlKG51bGwpfX0sUy5fcGFyc2VGaWVsZFZhbHVlPWZ1bmN0''@;'; put 'put ''aW9uKCl7aWYodi5wYXJzZSlyZXR1cm4gdi5wYXJzZSh2LmZpZWxkLnZhbHVlLHYuZm9ybWF0KTtpZih4KXt2YXIgdz1hZSh2LmZpZWxkLnZhbHVlLHYuZm9ybWF0LHYuZm9ybWF0U3RyaWN0KTtyZXR1cm4gdyYmdy5pc1ZhbGlkKCk/dy50b0RhdGUoKTpudWxsfXJldHVybiBuZXcgRGF0ZShE''@;'; put 'put ''YXRlLnBhcnNlKHYuZmllbGQudmFsdWUpKX0sUy5fb25JbnB1dENoYW5nZT1mdW5jdGlvbih3KXt2YXIgSjt3LmZpcmVkQnkhPT1TJiYoSj1TLl9wYXJzZUZpZWxkVmFsdWUoKSxqKEopJiZTLnNldERhdGUoSiksUy5fdnx8Uy5zaG93KCkpfSxTLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXtT''@;'; put 'put ''LnNob3coKX0sUy5fb25JbnB1dENsaWNrPWZ1bmN0aW9uKCl7Uy5zaG93KCl9LFMuX29uSW5wdXRCbHVyPWZ1bmN0aW9uKCl7dmFyIHc9bGUuYWN0aXZlRWxlbWVudDtkb3tpZihLKHcsInBpa2Etc2luZ2xlIikpcmV0dXJufXdoaWxlKHc9dy5wYXJlbnROb2RlKTtTLl9jfHwoUy5fYj1NKGZ1''@;'; put 'put ''bmN0aW9uKCl7Uy5oaWRlKCl9LDUwKSksUy5fYz0hMX0sUy5fb25DbGljaz1mdW5jdGlvbih3KXt2YXIgSj0odz13fHx3aW5kb3cuZXZlbnQpLnRhcmdldHx8dy5zcmNFbGVtZW50LG5lPUo7aWYoSil7IW0mJksoSiwicGlrYS1zZWxlY3QiKSYmKEoub25jaGFuZ2V8fChKLnNldEF0dHJpYnV0''@;'; put 'put ''ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksTyhKLCJjaGFuZ2UiLFMuX29uQ2hhbmdlKSkpO2Rve2lmKEsobmUsInBpa2Etc2luZ2xlIil8fG5lPT09di50cmlnZ2VyKXJldHVybn13aGlsZShuZT1uZS5wYXJlbnROb2RlKTtTLl92JiZKIT09di50cmlnZ2VyJiZuZSE9PXYudHJpZ2dlciYmUy5o''@;'; put 'put ''aWRlKCl9fSxTLmVsPWxlLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFMuZWwuY2xhc3NOYW1lPSJwaWthLXNpbmdsZSIrKHYuaXNSVEw/IiBpcy1ydGwiOiIiKSsodi50aGVtZT8iICIrdi50aGVtZToiIiksTyhTLmVsLCJtb3VzZWRvd24iLFMuX29uTW91c2VEb3duLCEwKSxPKFMuZWwsInRvdWNo''@;'; put 'put ''ZW5kIixTLl9vbk1vdXNlRG93biwhMCksTyhTLmVsLCJjaGFuZ2UiLFMuX29uQ2hhbmdlKSx2LmtleWJvYXJkSW5wdXQmJk8obGUsImtleWRvd24iLFMuX29uS2V5Q2hhbmdlKSx2LmZpZWxkJiYodi5jb250YWluZXI/di5jb250YWluZXIuYXBwZW5kQ2hpbGQoUy5lbCk6di5ib3VuZD9sZS5i''@;'; put 'put ''b2R5LmFwcGVuZENoaWxkKFMuZWwpOnYuZmllbGQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoUy5lbCx2LmZpZWxkLm5leHRTaWJsaW5nKSxPKHYuZmllbGQsImNoYW5nZSIsUy5fb25JbnB1dENoYW5nZSksdi5kZWZhdWx0RGF0ZXx8KHYuZGVmYXVsdERhdGU9Uy5fcGFyc2VGaWVsZFZhbHVl''@;'; put 'put ''KCksdi5zZXREZWZhdWx0RGF0ZT0hMCkpO3ZhciBwPXYuZGVmYXVsdERhdGU7aihwKT92LnNldERlZmF1bHREYXRlP1Muc2V0RGF0ZShwLCEwKTpTLmdvdG9EYXRlKHApOlMuZ290b0RhdGUobmV3IERhdGUpLHYuYm91bmQ/KHRoaXMuaGlkZSgpLFMuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5k''@;'; put 'put ''IixPKHYudHJpZ2dlciwiY2xpY2siLFMuX29uSW5wdXRDbGljayksTyh2LnRyaWdnZXIsImZvY3VzIixTLl9vbklucHV0Rm9jdXMpLE8odi50cmlnZ2VyLCJibHVyIixTLl9vbklucHV0Qmx1cikpOnRoaXMuc2hvdygpfTtyZXR1cm4gZy5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlvbihDKXt0''@;'; put 'put ''aGlzLl9vfHwodGhpcy5fbz1xKHt9LG9lLCEwKSk7dmFyIFM9cSh0aGlzLl9vLEMsITApO1MuaXNSVEw9ISFTLmlzUlRMLFMuZmllbGQ9Uy5maWVsZCYmUy5maWVsZC5ub2RlTmFtZT9TLmZpZWxkOm51bGwsUy50aGVtZT0ic3RyaW5nIj09dHlwZW9mIFMudGhlbWUmJlMudGhlbWU/Uy50aGVt''@;'; put 'put ''ZTpudWxsLFMuYm91bmQ9ISEodm9pZCAwIT09Uy5ib3VuZD9TLmZpZWxkJiZTLmJvdW5kOlMuZmllbGQpLFMudHJpZ2dlcj1TLnRyaWdnZXImJlMudHJpZ2dlci5ub2RlTmFtZT9TLnRyaWdnZXI6Uy5maWVsZCxTLmRpc2FibGVXZWVrZW5kcz0hIVMuZGlzYWJsZVdlZWtlbmRzLFMuZGlzYWJs''@;'; put 'put ''ZURheUZuPSJmdW5jdGlvbiI9PXR5cGVvZiBTLmRpc2FibGVEYXlGbj9TLmRpc2FibGVEYXlGbjpudWxsO3ZhciB2PXBhcnNlSW50KFMubnVtYmVyT2ZNb250aHMsMTApfHwxO2lmKFMubnVtYmVyT2ZNb250aHM9dj40PzQ6dixqKFMubWluRGF0ZSl8fChTLm1pbkRhdGU9ITEpLGooUy5tYXhE''@;'; put 'put ''YXRlKXx8KFMubWF4RGF0ZT0hMSksUy5taW5EYXRlJiZTLm1heERhdGUmJlMubWF4RGF0ZTxTLm1pbkRhdGUmJihTLm1heERhdGU9Uy5taW5EYXRlPSExKSxTLm1pbkRhdGUmJnRoaXMuc2V0TWluRGF0ZShTLm1pbkRhdGUpLFMubWF4RGF0ZSYmdGhpcy5zZXRNYXhEYXRlKFMubWF4RGF0ZSks''@;'; put 'put ''RShTLnllYXJSYW5nZSkpe3ZhciBwPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0xMDtTLnllYXJSYW5nZVswXT1wYXJzZUludChTLnllYXJSYW5nZVswXSwxMCl8fHAsUy55ZWFyUmFuZ2VbMV09cGFyc2VJbnQoUy55ZWFyUmFuZ2VbMV0sMTApfHxwfWVsc2UgUy55ZWFyUmFuZ2U9TWF0aC5h''@;'; put 'put ''YnMocGFyc2VJbnQoUy55ZWFyUmFuZ2UsMTApKXx8b2UueWVhclJhbmdlLFMueWVhclJhbmdlPjEwMCYmKFMueWVhclJhbmdlPTEwMCk7cmV0dXJuIFN9LHRvU3RyaW5nOmZ1bmN0aW9uKEMpe3JldHVybiBDPUN8fHRoaXMuX28uZm9ybWF0LGoodGhpcy5fZCk/dGhpcy5fby50b1N0cmluZz90''@;'; put 'put ''aGlzLl9vLnRvU3RyaW5nKHRoaXMuX2QsQyk6eD9hZSh0aGlzLl9kKS5mb3JtYXQoQyk6dGhpcy5fZC50b0RhdGVTdHJpbmcoKToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHg/YWUodGhpcy5fZCk6bnVsbH0sc2V0TW9tZW50OmZ1bmN0aW9uKEMsUyl7eCYmYWUuaXNNb21lbnQo''@;'; put 'put ''QykmJnRoaXMuc2V0RGF0ZShDLnRvRGF0ZSgpLFMpfSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGoodGhpcy5fZCk/bmV3IERhdGUodGhpcy5fZC5nZXRUaW1lKCkpOm51bGx9LHNldERhdGU6ZnVuY3Rpb24oQyxTKXtpZighQylyZXR1cm4gdGhpcy5fZD1udWxsLHRoaXMuX28uZmllbGQm''@;'; put 'put ''Jih0aGlzLl9vLmZpZWxkLnZhbHVlPSIiLGVlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSx0aGlzLmRyYXcoKTtpZigic3RyaW5nIj09dHlwZW9mIEMmJihDPW5ldyBEYXRlKERhdGUucGFyc2UoQykpKSxqKEMpKXt2YXIgdj10aGlzLl9vLm1pbkRhdGUscD10aGlz''@;'; put 'put ''Ll9vLm1heERhdGU7aih2KSYmQzx2P0M9djpqKHApJiZDPnAmJihDPXApLHRoaXMuX2Q9bmV3IERhdGUoQy5nZXRUaW1lKCkpLFgodGhpcy5fZCksdGhpcy5nb3RvRGF0ZSh0aGlzLl9kKSx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT10aGlzLnRvU3RyaW5nKCksZWUodGhp''@;'; put 'put ''cy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLCFTJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vblNlbGVjdCYmdGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXREYXRlKCkpfX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLnNldERhdGUobnVsbCl9LGdvdG9E''@;'; put 'put ''YXRlOmZ1bmN0aW9uKEMpe3ZhciBTPSEwO2lmKGooQykpe2lmKHRoaXMuY2FsZW5kYXJzKXt2YXIgdj1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLDEpLHA9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3Ro''@;'; put 'put ''LTFdLnllYXIsdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLDEpLHc9Qy5nZXRUaW1lKCk7cC5zZXRNb250aChwLmdldE1vbnRoKCkrMSkscC5zZXREYXRlKHAuZ2V0RGF0ZSgpLTEpLFM9dzx2LmdldFRpbWUoKXx8cC5nZXRUaW1lKCk8d31TJiYodGhpcy5j''@;'; put 'put ''YWxlbmRhcnM9W3ttb250aDpDLmdldE1vbnRoKCkseWVhcjpDLmdldEZ1bGxZZWFyKCl9XSwicmlnaHQiPT09dGhpcy5fby5tYWluQ2FsZW5kYXImJih0aGlzLmNhbGVuZGFyc1swXS5tb250aCs9MS10aGlzLl9vLm51bWJlck9mTW9udGhzKSksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX19LGFk''@;'; put 'put ''anVzdERhdGU6ZnVuY3Rpb24oQyxTKXt2YXIgdyx2PXRoaXMuZ2V0RGF0ZSgpfHxuZXcgRGF0ZSxwPTI0KnBhcnNlSW50KFMpKjYwKjYwKjFlMzsiYWRkIj09PUM/dz1uZXcgRGF0ZSh2LnZhbHVlT2YoKStwKToic3VidHJhY3QiPT09QyYmKHc9bmV3IERhdGUodi52YWx1ZU9mKCktcCkpLHRo''@;'; put 'put ''aXMuc2V0RGF0ZSh3KX0sYWRqdXN0Q2FsZW5kYXJzOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF09dGUodGhpcy5jYWxlbmRhcnNbMF0pO2Zvcih2YXIgQz0xO0M8dGhpcy5fby5udW1iZXJPZk1vbnRocztDKyspdGhpcy5jYWxlbmRhcnNbQ109dGUoe21vbnRoOnRoaXMuY2FsZW5kYXJz''@;'; put 'put ''WzBdLm1vbnRoK0MseWVhcjp0aGlzLmNhbGVuZGFyc1swXS55ZWFyfSk7dGhpcy5kcmF3KCl9LGdvdG9Ub2RheTpmdW5jdGlvbigpe3RoaXMuZ290b0RhdGUobmV3IERhdGUpfSxnb3RvTW9udGg6ZnVuY3Rpb24oQyl7aXNOYU4oQyl8fCh0aGlzLmNhbGVuZGFyc1swXS5tb250aD1wYXJzZUlu''@;'; put 'put ''dChDLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sbmV4dE1vbnRoOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrKyx0aGlzLmFkanVzdENhbGVuZGFycygpfSxwcmV2TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXS5tb250aC0tLHRoaXMuYWRqdXN0Q2Fs''@;'; put 'put ''ZW5kYXJzKCl9LGdvdG9ZZWFyOmZ1bmN0aW9uKEMpe2lzTmFOKEMpfHwodGhpcy5jYWxlbmRhcnNbMF0ueWVhcj1wYXJzZUludChDLDEwKSx0aGlzLmFkanVzdENhbGVuZGFycygpKX0sc2V0TWluRGF0ZTpmdW5jdGlvbihDKXtDIGluc3RhbmNlb2YgRGF0ZT8oWChDKSx0aGlzLl9vLm1pbkRh''@;'; put 'put ''dGU9Qyx0aGlzLl9vLm1pblllYXI9Qy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWluTW9udGg9Qy5nZXRNb250aCgpKToodGhpcy5fby5taW5EYXRlPW9lLm1pbkRhdGUsdGhpcy5fby5taW5ZZWFyPW9lLm1pblllYXIsdGhpcy5fby5taW5Nb250aD1vZS5taW5Nb250aCx0aGlzLl9vLnN0YXJ0''@;'; put 'put ''UmFuZ2U9b2Uuc3RhcnRSYW5nZSksdGhpcy5kcmF3KCl9LHNldE1heERhdGU6ZnVuY3Rpb24oQyl7QyBpbnN0YW5jZW9mIERhdGU/KFgoQyksdGhpcy5fby5tYXhEYXRlPUMsdGhpcy5fby5tYXhZZWFyPUMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPUMuZ2V0TW9udGgoKSk6KHRo''@;'; put 'put ''aXMuX28ubWF4RGF0ZT1vZS5tYXhEYXRlLHRoaXMuX28ubWF4WWVhcj1vZS5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9b2UubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1vZS5lbmRSYW5nZSksdGhpcy5kcmF3KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24oQyl7dGhpcy5fby5zdGFydFJh''@;'; put 'put ''bmdlPUN9LHNldEVuZFJhbmdlOmZ1bmN0aW9uKEMpe3RoaXMuX28uZW5kUmFuZ2U9Q30sZHJhdzpmdW5jdGlvbihDKXtpZih0aGlzLl92fHxDKXt2YXIgZGUsUz10aGlzLl9vLHY9Uy5taW5ZZWFyLHA9Uy5tYXhZZWFyLHc9Uy5taW5Nb250aCxKPVMubWF4TW9udGgsbmU9IiI7dGhpcy5feTw9''@;'; put 'put ''diYmKHRoaXMuX3k9diwhaXNOYU4odykmJnRoaXMuX208dyYmKHRoaXMuX209dykpLHRoaXMuX3k+PXAmJih0aGlzLl95PXAsIWlzTmFOKEopJiZ0aGlzLl9tPkomJih0aGlzLl9tPUopKTtmb3IodmFyIGZlPTA7ZmU8Uy5udW1iZXJPZk1vbnRocztmZSsrKWRlPSJwaWthLXRpdGxlLSIrTWF0''@;'; put 'put ''aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCIiKS5zdWJzdHIoMCwyKSxuZSs9JzxkaXYgY2xhc3M9InBpa2EtbGVuZGFyIj4nK0godGhpcyxmZSx0aGlzLmNhbGVuZGFyc1tmZV0ueWVhcix0aGlzLmNhbGVuZGFyc1tmZV0ubW9udGgsdGhpcy5jYWxlbmRhcnNb''@;'; put 'put ''MF0ueWVhcixkZSkrdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbZmVdLnllYXIsdGhpcy5jYWxlbmRhcnNbZmVdLm1vbnRoLGRlKSsiPC9kaXY+Ijt0aGlzLmVsLmlubmVySFRNTD1uZSxTLmJvdW5kJiYiaGlkZGVuIiE9PVMuZmllbGQudHlwZSYmTShmdW5jdGlvbigpe1MudHJpZ2dlci5m''@;'; put 'put ''b2N1cygpfSwxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMpLFMuYm91bmQmJlMuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixTLmFyaWFMYWJlbCl9fSxhZGp1c3RQb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBDLFMsdixwLHcs''@;'; put 'put ''SixuZSxkZSxmZSx4ZSxMZSxGZTtpZighdGhpcy5fby5jb250YWluZXIpe2lmKHRoaXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixTPUM9dGhpcy5fby50cmlnZ2VyLHY9dGhpcy5lbC5vZmZzZXRXaWR0aCxwPXRoaXMuZWwub2Zmc2V0SGVpZ2h0LHc9d2luZG93LmlubmVyV2lkdGh8''@;'; put 'put ''fGxlLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxKPXdpbmRvdy5pbm5lckhlaWdodHx8bGUuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxuZT13aW5kb3cucGFnZVlPZmZzZXR8fGxlLmJvZHkuc2Nyb2xsVG9wfHxsZS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLExlPSEwLEZl''@;'; put 'put ''PSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBDLmdldEJvdW5kaW5nQ2xpZW50UmVjdClkZT0oeGU9Qy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSkubGVmdCt3aW5kb3cucGFnZVhPZmZzZXQsZmU9eGUuYm90dG9tK3dpbmRvdy5wYWdlWU9mZnNldDtlbHNlIGZvcihkZT1TLm9mZnNldExlZnQsZmU9''@;'; put 'put ''Uy5vZmZzZXRUb3ArUy5vZmZzZXRIZWlnaHQ7Uz1TLm9mZnNldFBhcmVudDspZGUrPVMub2Zmc2V0TGVmdCxmZSs9Uy5vZmZzZXRUb3A7KHRoaXMuX28ucmVwb3NpdGlvbiYmZGUrdj53fHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJmRlLXYrQy5vZmZzZXRXaWR0aD4w''@;'; put 'put ''KSYmKGRlPWRlLXYrQy5vZmZzZXRXaWR0aCxMZT0hMSksKHRoaXMuX28ucmVwb3NpdGlvbiYmZmUrcD5KK25lfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPi0xJiZmZS1wLUMub2Zmc2V0SGVpZ2h0PjApJiYoZmU9ZmUtcC1DLm9mZnNldEhlaWdodCxGZT0hMSksdGhpcy5lbC5z''@;'; put 'put ''dHlsZS5sZWZ0PWRlKyJweCIsdGhpcy5lbC5zdHlsZS50b3A9ZmUrInB4IixJKHRoaXMuZWwsTGU/ImxlZnQtYWxpZ25lZCI6InJpZ2h0LWFsaWduZWQiKSxJKHRoaXMuZWwsRmU/ImJvdHRvbS1hbGlnbmVkIjoidG9wLWFsaWduZWQiKSxrKHRoaXMuZWwsTGU/InJpZ2h0LWFsaWduZWQiOiJs''@;'; put 'put ''ZWZ0LWFsaWduZWQiKSxrKHRoaXMuZWwsRmU/InRvcC1hbGlnbmVkIjoiYm90dG9tLWFsaWduZWQiKX19LHJlbmRlcjpmdW5jdGlvbihDLFMsdil7dmFyIHA9dGhpcy5fbyx3PW5ldyBEYXRlLEo9WShDLFMpLG5lPW5ldyBEYXRlKEMsUywxKS5nZXREYXkoKSxkZT1bXSxmZT1bXTtYKHcpLHAu''@;'; put 'put ''Zmlyc3REYXk+MCYmKG5lLT1wLmZpcnN0RGF5KTwwJiYobmUrPTcpO2Zvcih2YXIgeGU9MD09PVM/MTE6Uy0xLExlPTExPT09Uz8wOlMrMSxGZT0wPT09Uz9DLTE6QyxPZT0xMT09PVM/QysxOkMsamU9WShGZSx4ZSksV2U9SituZSxLZT1XZTtLZT43OylLZS09NztXZSs9Ny1LZTtmb3IodmFy''@;'; put 'put ''IFllPSExLEplPTAsbHQ9MDtKZTxXZTtKZSsrKXt2YXIgUGU9bmV3IERhdGUoQyxTLEplLW5lKzEpLGJlPSEhaih0aGlzLl9kKSYmVShQZSx0aGlzLl9kKSxBZT1VKFBlLHcpLFRlPS0xIT09cC5ldmVudHMuaW5kZXhPZihQZS50b0RhdGVTdHJpbmcoKSkscWU9SmU8bmV8fEplPj1KK25lLFhl''@;'; put 'put ''PUplLW5lKzEsVWU9UyxodD1DLE1lPXAuc3RhcnRSYW5nZSYmVShwLnN0YXJ0UmFuZ2UsUGUpLERlPXAuZW5kUmFuZ2UmJlUocC5lbmRSYW5nZSxQZSksemU9cC5zdGFydFJhbmdlJiZwLmVuZFJhbmdlJiZwLnN0YXJ0UmFuZ2U8UGUmJlBlPHAuZW5kUmFuZ2UsaXQ9cC5taW5EYXRlJiZQZTxw''@;'; put 'put ''Lm1pbkRhdGV8fHAubWF4RGF0ZSYmUGU+cC5tYXhEYXRlfHxwLmRpc2FibGVXZWVrZW5kcyYmVihQZSl8fHAuZGlzYWJsZURheUZuJiZwLmRpc2FibGVEYXlGbihQZSk7cWUmJihKZTxuZT8oWGU9amUrWGUsVWU9eGUsaHQ9RmUpOihYZS09SixVZT1MZSxodD1PZSkpLHAucGlja1dob2xlV2Vl''@;'; put 'put ''ayYmYmUmJihZZT0hMCksZmUucHVzaChoZSh7ZGF5OlhlLG1vbnRoOlVlLHllYXI6aHQsaGFzRXZlbnQ6VGUsaXNTZWxlY3RlZDpiZSxpc1RvZGF5OkFlLGlzRGlzYWJsZWQ6aXQsaXNFbXB0eTpxZSxpc1N0YXJ0UmFuZ2U6TWUsaXNFbmRSYW5nZTpEZSxpc0luUmFuZ2U6emUsc2hvd0RheXNJ''@;'; put 'put ''bk5leHRBbmRQcmV2aW91c01vbnRoczpwLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOnAuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkpLDc9PSsrbHQmJihwLnNob3dX''@;'; put 'put ''ZWVrTnVtYmVyJiZmZS51bnNoaWZ0KGNlKEplLW5lLFMsQyxwLmZpcnN0V2Vla09mWWVhck1pbkRheXMpKSxkZS5wdXNoKEcoZmUscC5pc1JUTCxwLnBpY2tXaG9sZVdlZWssWWUpKSxmZT1bXSxsdD0wLFllPSExKX1yZXR1cm4gTihwLGRlLHYpfSxpc1Zpc2libGU6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5fdn0sc2hvdzpmdW5jdGlvbigpe3RoaXMuaXNWaXNpYmxlKCl8fCh0aGlzLl92PSEwLHRoaXMuZHJhdygpLGsodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fby5ib3VuZCYmKE8obGUsImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLmFkanVzdFBvc2l0aW9uKCkpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uT3BlbiYmdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKSl9LGhpZGU6ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl92OyExIT09QyYmKHRoaXMuX28uYm91bmQmJlIobGUsImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMu''@;'; put 'put ''ZWwuc3R5bGUucG9zaXRpb249InN0YXRpYyIsdGhpcy5lbC5zdHlsZS5sZWZ0PSJhdXRvIix0aGlzLmVsLnN0eWxlLnRvcD0iYXV0byIpLEkodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2b2lkIDAhPT1DJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlz''@;'; put 'put ''Ll9vLm9uQ2xvc2UuY2FsbCh0aGlzKSl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgQz10aGlzLl9vO3RoaXMuaGlkZSgpLFIodGhpcy5lbCwibW91c2Vkb3duIix0aGlzLl9vbk1vdXNlRG93biwhMCksUih0aGlzLmVsLCJ0b3VjaGVuZCIsdGhpcy5fb25Nb3VzZURvd24sITApLFIodGhpcy5l''@;'; put 'put ''bCwiY2hhbmdlIix0aGlzLl9vbkNoYW5nZSksQy5rZXlib2FyZElucHV0JiZSKGxlLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSksQy5maWVsZCYmKFIoQy5maWVsZCwiY2hhbmdlIix0aGlzLl9vbklucHV0Q2hhbmdlKSxDLmJvdW5kJiYoUihDLnRyaWdnZXIsImNsaWNrIix0aGlzLl9v''@;'; put 'put ''bklucHV0Q2xpY2spLFIoQy50cmlnZ2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKSxSKEMudHJpZ2dlciwiYmx1ciIsdGhpcy5fb25JbnB1dEJsdXIpKSksdGhpcy5lbC5wYXJlbnROb2RlJiZ0aGlzLmVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5lbCl9fSxnfShtKX0oKX0s''@;'; put 'put ''MjcwNTA6KGF0LEllLEYpPT57SWUucHVibGljRW5jcnlwdD1GKDQ1NzM3KSxJZS5wcml2YXRlRGVjcnlwdD1GKDg1MjUyKSxJZS5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih4LG0pe3JldHVybiBJZS5wdWJsaWNFbmNyeXB0KHgsbSwhMCl9LEllLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oeCxt''@;'; put 'put ''KXtyZXR1cm4gSWUucHJpdmF0ZURlY3J5cHQoeCxtLCEwKX19LDE2NTE3OihhdCxJZSxGKT0+e3ZhciBhZT1GKDk2MzYyKSx4PUYoODQzKS5CdWZmZXI7ZnVuY3Rpb24gbShsZSl7dmFyIE09eC5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gTS53cml0ZVVJbnQzMkJFKGxlLDApLE19YXQuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihsZSxNKXtmb3IodmFyIHosTz14LmFsbG9jKDApLFI9MDtPLmxlbmd0aDxNOyl6PW0oUisrKSxPPXguY29uY2F0KFtPLGFlKCJzaGExIikudXBkYXRlKGxlKS51cGRhdGUoeikuZGlnZXN0KCldKTtyZXR1cm4gTy5zbGljZSgwLE0pfX0sNDgyMTE6ZnVuY3Rpb24oYXQsSWUs''@;'; put 'put ''Ril7IWZ1bmN0aW9uKGFlLHgpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcsYil7aWYoIUcpdGhyb3cgbmV3IEVycm9yKGJ8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gbGUoRyxiKXtHLnN1cGVyXz1iO3ZhciBEPWZ1bmN0aW9uKCl7fTtELnByb3RvdHlwZT1iLnByb3RvdHlwZSxH''@;'; put 'put ''LnByb3RvdHlwZT1uZXcgRCxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1HfWZ1bmN0aW9uIE0oRyxiLEQpe2lmKE0uaXNCTihHKSlyZXR1cm4gRzt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09RyYmKCgibGUiPT09Ynx8''@;'; put 'put ''ImJlIj09PWIpJiYoRD1iLGI9MTApLHRoaXMuX2luaXQoR3x8MCxifHwxMCxEfHwiYmUiKSl9dmFyIE87Im9iamVjdCI9PXR5cGVvZiBhZT9hZS5leHBvcnRzPU06eC5CTj1NLE0uQk49TSxNLndvcmRTaXplPTI2O3RyeXtPPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZl''@;'; put 'put ''cjwidSI/d2luZG93LkJ1ZmZlcjpGKDc3MTA4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIFIoRyxiKXt2YXIgRD1HLmNoYXJDb2RlQXQoYik7cmV0dXJuIEQ+PTY1JiZEPD03MD9ELTU1OkQ+PTk3JiZEPD0xMDI/RC04NzpELTQ4JjE1fWZ1bmN0aW9uIHooRyxiLEQpe3ZhciBIPVIoRyxEKTty''@;'; put 'put ''ZXR1cm4gRC0xPj1iJiYoSHw9UihHLEQtMSk8PDQpLEh9ZnVuY3Rpb24gSyhHLGIsRCxIKXtmb3IodmFyIE49MCxnPU1hdGgubWluKEcubGVuZ3RoLEQpLEM9YjtDPGc7QysrKXt2YXIgUz1HLmNoYXJDb2RlQXQoQyktNDg7Tio9SCxOKz1TPj00OT9TLTQ5KzEwOlM+PTE3P1MtMTcrMTA6U31y''@;'; put 'put ''ZXR1cm4gTn1NLmlzQk49ZnVuY3Rpb24oYil7cmV0dXJuIGIgaW5zdGFuY2VvZiBNfHxudWxsIT09YiYmIm9iamVjdCI9PXR5cGVvZiBiJiZiLmNvbnN0cnVjdG9yLndvcmRTaXplPT09TS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShiLndvcmRzKX0sTS5tYXg9ZnVuY3Rpb24oYixEKXtyZXR1''@;'; put 'put ''cm4gYi5jbXAoRCk+MD9iOkR9LE0ubWluPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIGIuY21wKEQpPDA/YjpEfSxNLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihiLEQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBiKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGIsRCxIKTtpZigib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGIpcmV0dXJuIHRoaXMuX2luaXRBcnJheShiLEQsSCk7ImhleCI9PT1EJiYoRD0xNiksbShEPT09KDB8RCkmJkQ+PTImJkQ8PTM2KTt2YXIgTj0wOyItIj09PShiPWIudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoTisrLHRoaXMubmVnYXRpdmU9MSksTjxiLmxlbmd0''@;'; put 'put ''aCYmKDE2PT09RD90aGlzLl9wYXJzZUhleChiLE4sSCk6KHRoaXMuX3BhcnNlQmFzZShiLEQsTiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxELEgpKSl9LE0ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGIsRCxIKXtiPDAmJih0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEsYj0tYiksYjw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmYl0sdGhpcy5sZW5ndGg9MSk6Yjw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZiLGIvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihtKGI8OTAwNzE5OTI1NDc0MDk5MiksdGhp''@;'; put 'put ''cy53b3Jkcz1bNjcxMDg4NjMmYixiLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksRCxIKX0sTS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihiLEQsSCl7aWYobSgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGIubGVuZ3RoKSxiLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChiLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBOPTA7Tjx0aGlzLmxlbmd0aDtOKyspdGhp''@;'; put 'put ''cy53b3Jkc1tOXT0wO3ZhciBnLEMsUz0wO2lmKCJiZSI9PT1IKWZvcihOPWIubGVuZ3RoLTEsZz0wO04+PTA7Ti09Myl0aGlzLndvcmRzW2ddfD0oQz1iW05dfGJbTi0xXTw8OHxiW04tMl08PDE2KTw8UyY2NzEwODg2Myx0aGlzLndvcmRzW2crMV09Qz4+PjI2LVMmNjcxMDg4NjMsKFMrPTI0''@;'; put 'put ''KT49MjYmJihTLT0yNixnKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKE49MCxnPTA7TjxiLmxlbmd0aDtOKz0zKXRoaXMud29yZHNbZ118PShDPWJbTl18YltOKzFdPDw4fGJbTisyXTw8MTYpPDxTJjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1DPj4+MjYtUyY2NzEwODg2MywoUys9MjQpPj0y''@;'; put 'put ''NiYmKFMtPTI2LGcrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGIsRCxIKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGIubGVuZ3RoLUQpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIE49MDtOPHRoaXMu''@;'; put 'put ''bGVuZ3RoO04rKyl0aGlzLndvcmRzW05dPTA7dmFyIFMsZz0wLEM9MDtpZigiYmUiPT09SClmb3IoTj1iLmxlbmd0aC0xO04+PUQ7Ti09MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODtl''@;'; put 'put ''bHNlIGZvcihOPShiLmxlbmd0aC1EKSUyPT0wP0QrMTpEO048Yi5sZW5ndGg7Tis9MilTPXooYixELE4pPDxnLHRoaXMud29yZHNbQ118PTY3MTA4ODYzJlMsZz49MTg/KGctPTE4LHRoaXMud29yZHNbQys9MV18PVM+Pj4yNik6Zys9ODt0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLl9wYXJz''@;'; put 'put ''ZUJhc2U9ZnVuY3Rpb24oYixELEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBOPTAsZz0xO2c8PTY3MTA4ODYzO2cqPUQpTisrO04tLSxnPWcvRHwwO2Zvcih2YXIgQz1iLmxlbmd0aC1ILFM9QyVOLHY9TWF0aC5taW4oQyxDLVMpK0gscD0wLHc9SDt3PHY7dys9Tilw''@;'; put 'put ''PUsoYix3LHcrTixEKSx0aGlzLmltdWxuKGcpLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApO2lmKDAhPT1TKXt2YXIgSj0xO2ZvcihwPUsoYix3LGIubGVuZ3RoLEQpLHc9MDt3PFM7dysrKUoqPUQ7dGhpcy5pbXVsbihKKSx0aGlzLndv''@;'; put 'put ''cmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKX10aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oYil7Yi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGg7RCsrKWIud29yZHNbRF09''@;'; put 'put ''dGhpcy53b3Jkc1tEXTtiLmxlbmd0aD10aGlzLmxlbmd0aCxiLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsYi5yZWQ9dGhpcy5yZWR9LE0ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGI9bmV3IE0obnVsbCk7cmV0dXJuIHRoaXMuY29weShiKSxifSxNLnByb3RvdHlwZS5fZXhwYW5k''@;'; put 'put ''PWZ1bmN0aW9uKGIpe2Zvcig7dGhpcy5sZW5ndGg8YjspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxNLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3Ro''@;'; put 'put ''LS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LE0ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxNLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''KHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBJPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAw''@;'; put 'put ''MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLGs9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcs''@;'; put 'put ''Nyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sRT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5''@;'; put 'put ''NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1''@;'; put 'put ''NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBWKEcsYixEKXtELm5lZ2F0aXZlPWIubmVnYXRpdmVeRy5uZWdhdGl2ZTt2YXIgSD1HLmxlbmd0aCtiLmxlbmd0aHwwO0QubGVuZ3RoPUgsSD1ILTF8MDt2YXIgTj0wfEcud29yZHNbMF0sZz0wfGIud29yZHNbMF0sQz1OKmcsdj1D''@;'; put 'put ''LzY3MTA4ODY0fDA7RC53b3Jkc1swXT02NzEwODg2MyZDO2Zvcih2YXIgcD0xO3A8SDtwKyspe2Zvcih2YXIgdz12Pj4+MjYsSj02NzEwODg2MyZ2LG5lPU1hdGgubWluKHAsYi5sZW5ndGgtMSksZGU9TWF0aC5tYXgoMCxwLUcubGVuZ3RoKzEpO2RlPD1uZTtkZSsrKXcrPShDPShOPTB8Ry53''@;'; put 'put ''b3Jkc1twLWRlfDBdKSooZz0wfGIud29yZHNbZGVdKStKKS82NzEwODg2NHwwLEo9NjcxMDg4NjMmQztELndvcmRzW3BdPTB8Six2PTB8d31yZXR1cm4gMCE9PXY/RC53b3Jkc1twXT0wfHY6RC5sZW5ndGgtLSxELnN0cmlwKCl9TS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oYixEKXt2''@;'; put 'put ''YXIgSDtpZihEPTB8RHx8MSwxNj09PShiPWJ8fDEwKXx8ImhleCI9PT1iKXtIPSIiO2Zvcih2YXIgTj0wLGc9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPXRoaXMud29yZHNbQ10sdj0oMTY3NzcyMTUmKFM8PE58ZykpLnRvU3RyaW5nKDE2KTtIPTAhPShnPVM+Pj4yNC1OJjE2Nzc3''@;'; put 'put ''MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/SVs2LXYubGVuZ3RoXSt2K0g6ditILChOKz0yKT49MjYmJihOLT0yNixDLS0pfWZvcigwIT09ZyYmKEg9Zy50b1N0cmluZygxNikrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfWlm''@;'; put 'put ''KGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpe3ZhciBwPWtbYl0sdz1FW2JdO0g9IiI7dmFyIEo9dGhpcy5jbG9uZSgpO2ZvcihKLm5lZ2F0aXZlPTA7IUouaXNaZXJvKCk7KXt2YXIgbmU9Si5tb2RuKHcpLnRvU3RyaW5nKGIpO0g9KEo9Si5pZGl2bih3KSkuaXNaZXJvKCk/bmUrSDpJW3AtbmUu''@;'; put 'put ''bGVuZ3RoXStuZStIfWZvcih0aGlzLmlzWmVybygpJiYoSD0iMCIrSCk7SC5sZW5ndGglRCE9MDspSD0iMCIrSDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihIPSItIitIKSxIfW0oITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sTS5wcm90b3R5cGUudG9OdW1iZXI9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgYj10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Yis9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2IrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxl''@;'; put 'put ''bmd0aD4yJiZtKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tYjpifSxNLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LE0ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0''@;'; put 'put ''aW9uKGIsRCl7cmV0dXJuIG0odHlwZW9mIE88InUiKSx0aGlzLnRvQXJyYXlMaWtlKE8sYixEKX0sTS5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGIsRCl9LE0ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGIsRCxI''@;'; put 'put ''KXt2YXIgTj10aGlzLmJ5dGVMZW5ndGgoKSxnPUh8fE1hdGgubWF4KDEsTik7bShOPD1nLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksbShnPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgdixwLEM9ImxlIj09PUQsUz1u''@;'; put 'put ''ZXcgYihnKSx3PXRoaXMuY2xvbmUoKTtpZihDKXtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcuYW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW3BdPXY7Zm9yKDtwPGc7cCsrKVNbcF09MH1lbHNle2ZvcihwPTA7cDxnLU47cCsrKVNbcF09MDtmb3IocD0wOyF3LmlzWmVybygpO3ArKyl2PXcu''@;'; put 'put ''YW5kbG4oMjU1KSx3Lml1c2hybig4KSxTW2ctcC0xXT12fXJldHVybiBTfSxNLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oYil7cmV0dXJuIDMyLU1hdGguY2x6MzIoYil9OmZ1bmN0aW9uKGIpe3ZhciBEPWIsSD0wO3JldHVybiBEPj00MDk2JiYoSCs9MTMsRD4+''@;'; put 'put ''Pj0xMyksRD49NjQmJihIKz03LEQ+Pj49NyksRD49OCYmKEgrPTQsRD4+Pj00KSxEPj0yJiYoSCs9MixEPj4+PTIpLEgrRH0sTS5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGIpe2lmKDA9PT1iKXJldHVybiAyNjt2YXIgRD1iLEg9MDtyZXR1cm4gODE5MSZEfHwoSCs9MTMsRD4+Pj0x''@;'; put 'put ''MyksMTI3JkR8fChIKz03LEQ+Pj49NyksMTUmRHx8KEgrPTQsRD4+Pj00KSwzJkR8fChIKz0yLEQ+Pj49MiksMSZEfHxIKyssSH0sTS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAy''@;'; put 'put ''NioodGhpcy5sZW5ndGgtMSkrRH0sTS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgYj0wLEQ9MDtEPHRoaXMubGVuZ3RoO0QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tEXSk7aWYoYis9SCwyNiE9PUgp''@;'; put 'put ''YnJlYWt9cmV0dXJuIGJ9LE0ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LE0ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihiKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihiKS5p''@;'; put 'put ''YWRkbigxKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnRlc3RuKGItMSk/dGhpcy5ub3RuKGIpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LE0ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlfSxNLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sTS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sTS5wcm90b3R5cGUuaXVvcj1mdW5jdGlv''@;'; put 'put ''bihiKXtmb3IoO3RoaXMubGVuZ3RoPGIubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBEPTA7RDxiLmxlbmd0aDtEKyspdGhpcy53b3Jkc1tEXT10aGlzLndvcmRzW0RdfGIud29yZHNbRF07cmV0dXJuIHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaW9yPWZ1''@;'; put 'put ''bmN0aW9uKGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1b3IoYil9LE0ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGIpOmIuY2xvbmUoKS5pb3IodGhpcyl9LE0ucHJv''@;'; put 'put ''dG90eXBlLnVvcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoYik6Yi5jbG9uZSgpLml1b3IodGhpcyl9LE0ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGIpe3ZhciBEO0Q9dGhpcy5sZW5ndGg+Yi5sZW5ndGg/Yjp0aGlzO2Zvcih2''@;'; put 'put ''YXIgSD0wO0g8RC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZiLndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1ELmxlbmd0aCx0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0oMD09KHRoaXMubmVnYXRpdmV8Yi5uZWdh''@;'; put 'put ''dGl2ZSkpLHRoaXMuaXVhbmQoYil9LE0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoYik6Yi5jbG9uZSgpLmlhbmQodGhpcyl9LE0ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChiKTpiLmNsb25lKCkuaXVhbmQodGhpcyl9LE0ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKGIpe3ZhciBELEg7dGhpcy5sZW5ndGg+Yi5sZW5ndGg/KEQ9dGhpcyxIPWIpOihEPWIsSD10aGlzKTtmb3IodmFyIE49MDtOPEgubGVuZ3Ro''@;'; put 'put ''O04rKyl0aGlzLndvcmRzW05dPUQud29yZHNbTl1eSC53b3Jkc1tOXTtpZih0aGlzIT09RClmb3IoO048RC5sZW5ndGg7TisrKXRoaXMud29yZHNbTl09RC53b3Jkc1tOXTtyZXR1cm4gdGhpcy5sZW5ndGg9RC5sZW5ndGgsdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9u''@;'; put 'put ''KGIpe3JldHVybiBtKDA9PSh0aGlzLm5lZ2F0aXZlfGIubmVnYXRpdmUpKSx0aGlzLml1eG9yKGIpfSxNLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMubGVuZ3RoPmIubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGIpOmIuY2xvbmUoKS5peG9yKHRoaXMpfSxNLnByb3Rv''@;'; put 'put ''dHlwZS51eG9yPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmxlbmd0aD5iLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoYik6Yi5jbG9uZSgpLml1eG9yKHRoaXMpfSxNLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYiYmYj49MCk7dmFyIEQ9MHxNYXRo''@;'; put 'put ''LmNlaWwoYi8yNiksSD1iJTI2O3RoaXMuX2V4cGFuZChEKSxIPjAmJkQtLTtmb3IodmFyIE49MDtOPEQ7TisrKXRoaXMud29yZHNbTl09NjcxMDg4NjMmfnRoaXMud29yZHNbTl07cmV0dXJuIEg+MCYmKHRoaXMud29yZHNbTl09fnRoaXMud29yZHNbTl0mNjcxMDg4NjM+PjI2LUgpLHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sTS5wcm90b3R5cGUubm90bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGIpfSxNLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGIsRCl7bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApO3ZhciBIPWIvMjZ8MCxOPWIlMjY7cmV0dXJuIHRoaXMuX2V4cGFu''@;'; put 'put ''ZChIKzEpLHRoaXMud29yZHNbSF09RD90aGlzLndvcmRzW0hdfDE8PE46dGhpcy53b3Jkc1tIXSZ+KDE8PE4pLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiKXt2YXIgRCxILE47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlKXJldHVybiB0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTAsRD10aGlzLmlzdWIoYiksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Yi5uZWdhdGl2ZSlyZXR1cm4gYi5uZWdhdGl2ZT0wLEQ9dGhpcy5pc3ViKGIpLGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpO3RoaXMu''@;'; put 'put ''bGVuZ3RoPmIubGVuZ3RoPyhIPXRoaXMsTj1iKTooSD1iLE49dGhpcyk7Zm9yKHZhciBnPTAsQz0wO0M8Ti5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKEQ9KDB8SC53b3Jkc1tDXSkrKDB8Ti53b3Jkc1tDXSkrZyksZz1EPj4+MjY7Zm9yKDswIT09ZyYmQzxILmxlbmd0aDtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoRD0oMHxILndvcmRzW0NdKStnKSxnPUQ+Pj4yNjtpZih0aGlzLmxlbmd0aD1ILmxlbmd0aCwwIT09Zyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1nLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihIIT09dGhpcylmb3IoO0M8SC5sZW5ndGg7QysrKXRo''@;'; put 'put ''aXMud29yZHNbQ109SC53b3Jkc1tDXTtyZXR1cm4gdGhpc30sTS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGIpe3ZhciBEO3JldHVybiAwIT09Yi5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGIubmVnYXRpdmU9MCxEPXRoaXMuc3ViKGIpLGIubmVnYXRpdmVePTEsRCk6MD09PWIubmVn''@;'; put 'put ''YXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsRD1iLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsRCk6dGhpcy5sZW5ndGg+Yi5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoYik6Yi5jbG9uZSgpLmlhZGQodGhpcyl9LE0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24o''@;'; put 'put ''Yil7aWYoMCE9PWIubmVnYXRpdmUpe2IubmVnYXRpdmU9MDt2YXIgRD10aGlzLmlhZGQoYik7cmV0dXJuIGIubmVnYXRpdmU9MSxELl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGIpLHRoaXMubmVnYXRpdmU9MSx0aGlz''@;'; put 'put ''Ll9ub3JtU2lnbigpO3ZhciBOLGcsSD10aGlzLmNtcChiKTtpZigwPT09SClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7SD4wPyhOPXRoaXMsZz1iKTooTj1iLGc9dGhpcyk7Zm9yKHZhciBDPTAsUz0wO1M8Zy5sZW5ndGg7UysrKUM9''@;'; put 'put ''KEQ9KDB8Ti53b3Jkc1tTXSktKDB8Zy53b3Jkc1tTXSkrQyk+PjI2LHRoaXMud29yZHNbU109NjcxMDg4NjMmRDtmb3IoOzAhPT1DJiZTPE4ubGVuZ3RoO1MrKylDPShEPSgwfE4ud29yZHNbU10pK0MpPj4yNix0aGlzLndvcmRzW1NdPTY3MTA4ODYzJkQ7aWYoMD09PUMmJlM8Ti5sZW5ndGgm''@;'; put 'put ''Jk4hPT10aGlzKWZvcig7UzxOLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1OLndvcmRzW1NdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKSxOIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24o''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGIpfTt2YXIgQj1mdW5jdGlvbihiLEQsSCl7dmFyIHYscCx3LE49Yi53b3JkcyxnPUQud29yZHMsQz1ILndvcmRzLFM9MCxKPTB8TlswXSxuZT04MTkxJkosZGU9Sj4+PjEzLGZlPTB8TlsxXSx4ZT04MTkxJmZlLExlPWZlPj4+MTMsRmU9MHxO''@;'; put 'put ''WzJdLE9lPTgxOTEmRmUsamU9RmU+Pj4xMyxXZT0wfE5bM10sS2U9ODE5MSZXZSxZZT1XZT4+PjEzLEplPTB8Tls0XSxsdD04MTkxJkplLFBlPUplPj4+MTMsYmU9MHxOWzVdLEFlPTgxOTEmYmUsVGU9YmU+Pj4xMyxxZT0wfE5bNl0sWGU9ODE5MSZxZSxVZT1xZT4+PjEzLGh0PTB8Tls3XSxN''@;'; put 'put ''ZT04MTkxJmh0LERlPWh0Pj4+MTMsemU9MHxOWzhdLGl0PTgxOTEmemUsdXQ9emU+Pj4xMyxNdD0wfE5bOV0sSHQ9ODE5MSZNdCxQdD1NdD4+PjEzLG9uPTB8Z1swXSxDbj04MTkxJm9uLFV0PW9uPj4+MTMsYm49MHxnWzFdLFduPTgxOTEmYm4sZW49Ym4+Pj4xMywkbj0wfGdbMl0sSG49ODE5''@;'; put 'put ''MSYkbixmdD0kbj4+PjEzLGZuPTB8Z1szXSxobj04MTkxJmZuLHd0PWZuPj4+MTMsWHQ9MHxnWzRdLF90PTgxOTEmWHQsTnQ9WHQ+Pj4xMyxtbj0wfGdbNV0scnQ9ODE5MSZtbixJdD1tbj4+PjEzLEp0PTB8Z1s2XSxEdD04MTkxJkp0LHB0PUp0Pj4+MTMsWXQ9MHxnWzddLEluPTgxOTEmWXQs''@;'; put 'put ''enQ9WXQ+Pj4xMyx5bj0wfGdbOF0seG49ODE5MSZ5bixzbj15bj4+PjEzLEJuPTB8Z1s5XSxSbj04MTkxJkJuLCR0PUJuPj4+MTM7SC5uZWdhdGl2ZT1iLm5lZ2F0aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFBuPShTKyh2PU1hdGguaW11bChuZSxDbikpfDApKygoODE5MSYocD0o''@;'; put 'put ''cD1NYXRoLmltdWwobmUsVXQpKStNYXRoLmltdWwoZGUsQ24pfDApKTw8MTMpfDA7Uz0oKHc9TWF0aC5pbXVsKGRlLFV0KSkrKHA+Pj4xMyl8MCkrKFBuPj4+MjYpfDAsUG4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKHhlLENuKSxwPShwPU1hdGguaW11bCh4ZSxVdCkpK01hdGguaW11bChMZSxD''@;'; put 'put ''bil8MCx3PU1hdGguaW11bChMZSxVdCk7dmFyIG5pPShTKyh2PXYrTWF0aC5pbXVsKG5lLFduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bChkZSxXbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxlbil8MCkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KG5pPj4+MjYpfDAsbmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKE9lLENuKSxwPShwPU1hdGguaW11bChPZSxVdCkpK01hdGguaW11bChqZSxDbil8MCx3PU1hdGguaW11bChqZSxVdCksdj12K01hdGguaW11bCh4ZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''TGUsV24pfDAsdz13K01hdGguaW11bChMZSxlbil8MDt2YXIgbG49KFMrKHY9ditNYXRoLmltdWwobmUsSG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxmdCl8MCkrTWF0aC5pbXVsKGRlLEhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLGZ0KXwwKSsocD4+''@;'; put 'put ''PjEzKXwwKSsobG4+Pj4yNil8MCxsbiY9NjcxMDg4NjMsdj1NYXRoLmltdWwoS2UsQ24pLHA9KHA9TWF0aC5pbXVsKEtlLFV0KSkrTWF0aC5pbXVsKFllLENuKXwwLHc9TWF0aC5pbXVsKFllLFV0KSx2PXYrTWF0aC5pbXVsKE9lLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsZW4pfDApK01h''@;'; put 'put ''dGguaW11bChqZSxXbil8MCx3PXcrTWF0aC5pbXVsKGplLGVuKXwwLHY9ditNYXRoLmltdWwoeGUsSG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxmdCl8MCkrTWF0aC5pbXVsKExlLEhuKXwwLHc9dytNYXRoLmltdWwoTGUsZnQpfDA7dmFyIGpuPShTKyh2PXYrTWF0aC5pbXVsKG5lLGhuKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsd3QpfDApK01hdGguaW11bChkZSxobil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx3dCl8MCkrKHA+Pj4xMyl8MCkrKGpuPj4+MjYpfDAsam4mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGx0LENuKSxwPShwPU1hdGguaW11''@;'; put 'put ''bChsdCxVdCkpK01hdGguaW11bChQZSxDbil8MCx3PU1hdGguaW11bChQZSxVdCksdj12K01hdGguaW11bChLZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLGVuKXwwKStNYXRoLmltdWwoWWUsV24pfDAsdz13K01hdGguaW11bChZZSxlbil8MCx2PXYrTWF0aC5pbXVsKE9lLEhuKXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoT2UsZnQpfDApK01hdGguaW11bChqZSxIbil8MCx3PXcrTWF0aC5pbXVsKGplLGZ0KXwwLHY9ditNYXRoLmltdWwoeGUsaG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx3dCl8MCkrTWF0aC5pbXVsKExlLGhuKXwwLHc9dytNYXRoLmltdWwoTGUsd3QpfDA7dmFyIHFy''@;'; put 'put ''PShTKyh2PXYrTWF0aC5pbXVsKG5lLF90KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsTnQpfDApK01hdGguaW11bChkZSxfdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxOdCl8MCkrKHA+Pj4xMyl8MCkrKHFyPj4+MjYpfDAscXImPTY3MTA4ODYzLHY9TWF0''@;'; put 'put ''aC5pbXVsKEFlLENuKSxwPShwPU1hdGguaW11bChBZSxVdCkpK01hdGguaW11bChUZSxDbil8MCx3PU1hdGguaW11bChUZSxVdCksdj12K01hdGguaW11bChsdCxXbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LGVuKXwwKStNYXRoLmltdWwoUGUsV24pfDAsdz13K01hdGguaW11bChQZSxlbil8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKEtlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZnQpfDApK01hdGguaW11bChZZSxIbil8MCx3PXcrTWF0aC5pbXVsKFllLGZ0KXwwLHY9ditNYXRoLmltdWwoT2UsaG4pfDAscD0ocD1wK01hdGguaW11bChPZSx3dCl8MCkrTWF0aC5pbXVsKGplLGhuKXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoamUsd3QpfDAsdj12K01hdGguaW11bCh4ZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLE50KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsdz13K01hdGguaW11bChMZSxOdCl8MDt2YXIgZ2k9KFMrKHY9ditNYXRoLmltdWwobmUscnQpfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChuZSxJdCl8MCkrTWF0aC5pbXVsKGRlLHJ0KXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLEl0KXwwKSsocD4+PjEzKXwwKSsoZ2k+Pj4yNil8MCxnaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoWGUsQ24pLHA9KHA9TWF0aC5pbXVsKFhlLFV0KSkrTWF0aC5pbXVs''@;'; put 'put ''KFVlLENuKXwwLHc9TWF0aC5pbXVsKFVlLFV0KSx2PXYrTWF0aC5pbXVsKEFlLFduKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZW4pfDApK01hdGguaW11bChUZSxXbil8MCx3PXcrTWF0aC5pbXVsKFRlLGVuKXwwLHY9ditNYXRoLmltdWwobHQsSG4pfDAscD0ocD1wK01hdGguaW11bChsdCxm''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFBlLEhuKXwwLHc9dytNYXRoLmltdWwoUGUsZnQpfDAsdj12K01hdGguaW11bChLZSxobil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHd0KXwwKStNYXRoLmltdWwoWWUsaG4pfDAsdz13K01hdGguaW11bChZZSx3dCl8MCx2PXYrTWF0aC5pbXVsKE9lLF90KXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoT2UsTnQpfDApK01hdGguaW11bChqZSxfdCl8MCx3PXcrTWF0aC5pbXVsKGplLE50KXwwLHY9ditNYXRoLmltdWwoeGUscnQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxJdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLHc9dytNYXRoLmltdWwoTGUsSXQpfDA7dmFyIHhy''@;'; put 'put ''PShTKyh2PXYrTWF0aC5pbXVsKG5lLER0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bChkZSxEdCl8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKHhyPj4+MjYpfDAseHImPTY3MTA4ODYzLHY9TWF0''@;'; put 'put ''aC5pbXVsKE1lLENuKSxwPShwPU1hdGguaW11bChNZSxVdCkpK01hdGguaW11bChEZSxDbil8MCx3PU1hdGguaW11bChEZSxVdCksdj12K01hdGguaW11bChYZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKFhlLGVuKXwwKStNYXRoLmltdWwoVWUsV24pfDAsdz13K01hdGguaW11bChVZSxlbil8''@;'; put 'put ''MCx2PXYrTWF0aC5pbXVsKEFlLEhuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZnQpfDApK01hdGguaW11bChUZSxIbil8MCx3PXcrTWF0aC5pbXVsKFRlLGZ0KXwwLHY9ditNYXRoLmltdWwobHQsaG4pfDAscD0ocD1wK01hdGguaW11bChsdCx3dCl8MCkrTWF0aC5pbXVsKFBlLGhuKXwwLHc9''@;'; put 'put ''dytNYXRoLmltdWwoUGUsd3QpfDAsdj12K01hdGguaW11bChLZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLE50KXwwKStNYXRoLmltdWwoWWUsX3QpfDAsdz13K01hdGguaW11bChZZSxOdCl8MCx2PXYrTWF0aC5pbXVsKE9lLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsSXQpfDApK01h''@;'; put 'put ''dGguaW11bChqZSxydCl8MCx3PXcrTWF0aC5pbXVsKGplLEl0KXwwLHY9ditNYXRoLmltdWwoeGUsRHQpfDAscD0ocD1wK01hdGguaW11bCh4ZSxwdCl8MCkrTWF0aC5pbXVsKExlLER0KXwwLHc9dytNYXRoLmltdWwoTGUscHQpfDA7dmFyIFVpPShTKyh2PXYrTWF0aC5pbXVsKG5lLEluKXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsenQpfDApK01hdGguaW11bChkZSxJbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSx6dCl8MCkrKHA+Pj4xMyl8MCkrKFVpPj4+MjYpfDAsVWkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKGl0LENuKSxwPShwPU1hdGguaW11''@;'; put 'put ''bChpdCxVdCkpK01hdGguaW11bCh1dCxDbil8MCx3PU1hdGguaW11bCh1dCxVdCksdj12K01hdGguaW11bChNZSxXbil8MCxwPShwPXArTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwoRGUsV24pfDAsdz13K01hdGguaW11bChEZSxlbil8MCx2PXYrTWF0aC5pbXVsKFhlLEhuKXwwLHA9''@;'; put 'put ''KHA9cCtNYXRoLmltdWwoWGUsZnQpfDApK01hdGguaW11bChVZSxIbil8MCx3PXcrTWF0aC5pbXVsKFVlLGZ0KXwwLHY9ditNYXRoLmltdWwoQWUsaG4pfDAscD0ocD1wK01hdGguaW11bChBZSx3dCl8MCkrTWF0aC5pbXVsKFRlLGhuKXwwLHc9dytNYXRoLmltdWwoVGUsd3QpfDAsdj12K01h''@;'; put 'put ''dGguaW11bChsdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LE50KXwwKStNYXRoLmltdWwoUGUsX3QpfDAsdz13K01hdGguaW11bChQZSxOdCl8MCx2PXYrTWF0aC5pbXVsKEtlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsSXQpfDApK01hdGguaW11bChZZSxydCl8MCx3PXcrTWF0aC5p''@;'; put 'put ''bXVsKFllLEl0KXwwLHY9ditNYXRoLmltdWwoT2UsRHQpfDAscD0ocD1wK01hdGguaW11bChPZSxwdCl8MCkrTWF0aC5pbXVsKGplLER0KXwwLHc9dytNYXRoLmltdWwoamUscHQpfDAsdj12K01hdGguaW11bCh4ZSxJbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHp0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''TGUsSW4pfDAsdz13K01hdGguaW11bChMZSx6dCl8MDt2YXIgS3I9KFMrKHY9ditNYXRoLmltdWwobmUseG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxzbil8MCkrTWF0aC5pbXVsKGRlLHhuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKGRlLHNuKXwwKSsocD4+''@;'; put 'put ''PjEzKXwwKSsoS3I+Pj4yNil8MCxLciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsQ24pLHA9KHA9TWF0aC5pbXVsKEh0LFV0KSkrTWF0aC5pbXVsKFB0LENuKXwwLHc9TWF0aC5pbXVsKFB0LFV0KSx2PXYrTWF0aC5pbXVsKGl0LFduKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsZW4pfDApK01h''@;'; put 'put ''dGguaW11bCh1dCxXbil8MCx3PXcrTWF0aC5pbXVsKHV0LGVuKXwwLHY9ditNYXRoLmltdWwoTWUsSG4pfDAscD0ocD1wK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKERlLEhuKXwwLHc9dytNYXRoLmltdWwoRGUsZnQpfDAsdj12K01hdGguaW11bChYZSxobil8MCxwPShwPXArTWF0''@;'; put 'put ''aC5pbXVsKFhlLHd0KXwwKStNYXRoLmltdWwoVWUsaG4pfDAsdz13K01hdGguaW11bChVZSx3dCl8MCx2PXYrTWF0aC5pbXVsKEFlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsTnQpfDApK01hdGguaW11bChUZSxfdCl8MCx3PXcrTWF0aC5pbXVsKFRlLE50KXwwLHY9ditNYXRoLmltdWwo''@;'; put 'put ''bHQscnQpfDAscD0ocD1wK01hdGguaW11bChsdCxJdCl8MCkrTWF0aC5pbXVsKFBlLHJ0KXwwLHc9dytNYXRoLmltdWwoUGUsSXQpfDAsdj12K01hdGguaW11bChLZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoWWUsRHQpfDAsdz13K01hdGguaW11bChZZSxw''@;'; put 'put ''dCl8MCx2PXYrTWF0aC5pbXVsKE9lLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoT2UsenQpfDApK01hdGguaW11bChqZSxJbil8MCx3PXcrTWF0aC5pbXVsKGplLHp0KXwwLHY9ditNYXRoLmltdWwoeGUseG4pfDAscD0ocD1wK01hdGguaW11bCh4ZSxzbil8MCkrTWF0aC5pbXVsKExlLHhuKXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoTGUsc24pfDA7dmFyIG5vPShTKyh2PXYrTWF0aC5pbXVsKG5lLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsJHQpfDApK01hdGguaW11bChkZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChkZSwkdCl8MCkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LFduKSxwPShwPU1hdGguaW11bChIdCxlbikpK01hdGguaW11bChQdCxXbil8MCx3PU1hdGguaW11bChQdCxlbiksdj12K01hdGguaW11bChpdCxIbil8MCxwPShwPXArTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwo''@;'; put 'put ''dXQsSG4pfDAsdz13K01hdGguaW11bCh1dCxmdCl8MCx2PXYrTWF0aC5pbXVsKE1lLGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoTWUsd3QpfDApK01hdGguaW11bChEZSxobil8MCx3PXcrTWF0aC5pbXVsKERlLHd0KXwwLHY9ditNYXRoLmltdWwoWGUsX3QpfDAscD0ocD1wK01hdGguaW11bChY''@;'; put 'put ''ZSxOdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLHc9dytNYXRoLmltdWwoVWUsTnQpfDAsdj12K01hdGguaW11bChBZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEl0KXwwKStNYXRoLmltdWwoVGUscnQpfDAsdz13K01hdGguaW11bChUZSxJdCl8MCx2PXYrTWF0aC5pbXVsKGx0LER0KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwobHQscHQpfDApK01hdGguaW11bChQZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFBlLHB0KXwwLHY9ditNYXRoLmltdWwoS2UsSW4pfDAscD0ocD1wK01hdGguaW11bChLZSx6dCl8MCkrTWF0aC5pbXVsKFllLEluKXwwLHc9dytNYXRoLmltdWwoWWUsenQpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChPZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKE9lLHNuKXwwKStNYXRoLmltdWwoamUseG4pfDAsdz13K01hdGguaW11bChqZSxzbil8MDt2YXIgSHI9KFMrKHY9ditNYXRoLmltdWwoeGUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bCh4ZSwkdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKExlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKExlLCR0KXwwKSsocD4+PjEzKXwwKSsoSHI+Pj4yNil8MCxIciY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsSG4pLHA9KHA9TWF0aC5pbXVsKEh0LGZ0KSkrTWF0aC5pbXVsKFB0LEhuKXwwLHc9TWF0aC5pbXVsKFB0''@;'; put 'put ''LGZ0KSx2PXYrTWF0aC5pbXVsKGl0LGhuKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsd3QpfDApK01hdGguaW11bCh1dCxobil8MCx3PXcrTWF0aC5pbXVsKHV0LHd0KXwwLHY9ditNYXRoLmltdWwoTWUsX3QpfDAscD0ocD1wK01hdGguaW11bChNZSxOdCl8MCkrTWF0aC5pbXVsKERlLF90KXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoRGUsTnQpfDAsdj12K01hdGguaW11bChYZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLEl0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsdz13K01hdGguaW11bChVZSxJdCl8MCx2PXYrTWF0aC5pbXVsKEFlLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscHQpfDAp''@;'; put 'put ''K01hdGguaW11bChUZSxEdCl8MCx3PXcrTWF0aC5pbXVsKFRlLHB0KXwwLHY9ditNYXRoLmltdWwobHQsSW4pfDAscD0ocD1wK01hdGguaW11bChsdCx6dCl8MCkrTWF0aC5pbXVsKFBlLEluKXwwLHc9dytNYXRoLmltdWwoUGUsenQpfDAsdj12K01hdGguaW11bChLZSx4bil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKEtlLHNuKXwwKStNYXRoLmltdWwoWWUseG4pfDAsdz13K01hdGguaW11bChZZSxzbil8MDt2YXIgcWk9KFMrKHY9ditNYXRoLmltdWwoT2UsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSwkdCl8MCkrTWF0aC5pbXVsKGplLFJuKXwwKSk8PDEzKXwwO1M9''@;'; put 'put ''KCh3PXcrTWF0aC5pbXVsKGplLCR0KXwwKSsocD4+PjEzKXwwKSsocWk+Pj4yNil8MCxxaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsaG4pLHA9KHA9TWF0aC5pbXVsKEh0LHd0KSkrTWF0aC5pbXVsKFB0LGhuKXwwLHc9TWF0aC5pbXVsKFB0LHd0KSx2PXYrTWF0aC5pbXVsKGl0LF90KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoaXQsTnQpfDApK01hdGguaW11bCh1dCxfdCl8MCx3PXcrTWF0aC5pbXVsKHV0LE50KXwwLHY9ditNYXRoLmltdWwoTWUscnQpfDAscD0ocD1wK01hdGguaW11bChNZSxJdCl8MCkrTWF0aC5pbXVsKERlLHJ0KXwwLHc9dytNYXRoLmltdWwoRGUsSXQpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChYZSxEdCl8MCxwPShwPXArTWF0aC5pbXVsKFhlLHB0KXwwKStNYXRoLmltdWwoVWUsRHQpfDAsdz13K01hdGguaW11bChVZSxwdCl8MCx2PXYrTWF0aC5pbXVsKEFlLEluKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsenQpfDApK01hdGguaW11bChUZSxJbil8MCx3PXcrTWF0''@;'; put 'put ''aC5pbXVsKFRlLHp0KXwwLHY9ditNYXRoLmltdWwobHQseG4pfDAscD0ocD1wK01hdGguaW11bChsdCxzbil8MCkrTWF0aC5pbXVsKFBlLHhuKXwwLHc9dytNYXRoLmltdWwoUGUsc24pfDA7dmFyIEppPShTKyh2PXYrTWF0aC5pbXVsKEtlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo''@;'; put 'put ''LmltdWwoS2UsJHQpfDApK01hdGguaW11bChZZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChZZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LF90KSxwPShwPU1hdGguaW11bChIdCxOdCkpK01hdGguaW11bChQdCxf''@;'; put 'put ''dCl8MCx3PU1hdGguaW11bChQdCxOdCksdj12K01hdGguaW11bChpdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGl0LEl0KXwwKStNYXRoLmltdWwodXQscnQpfDAsdz13K01hdGguaW11bCh1dCxJdCl8MCx2PXYrTWF0aC5pbXVsKE1lLER0KXwwLHA9KHA9cCtNYXRoLmltdWwoTWUscHQpfDAp''@;'; put 'put ''K01hdGguaW11bChEZSxEdCl8MCx3PXcrTWF0aC5pbXVsKERlLHB0KXwwLHY9ditNYXRoLmltdWwoWGUsSW4pfDAscD0ocD1wK01hdGguaW11bChYZSx6dCl8MCkrTWF0aC5pbXVsKFVlLEluKXwwLHc9dytNYXRoLmltdWwoVWUsenQpfDAsdj12K01hdGguaW11bChBZSx4bil8MCxwPShwPXAr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHNuKXwwKStNYXRoLmltdWwoVGUseG4pfDAsdz13K01hdGguaW11bChUZSxzbil8MDt2YXIgYW89KFMrKHY9ditNYXRoLmltdWwobHQsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCwkdCl8MCkrTWF0aC5pbXVsKFBlLFJuKXwwKSk8PDEzKXwwO1M9''@;'; put 'put ''KCh3PXcrTWF0aC5pbXVsKFBlLCR0KXwwKSsocD4+PjEzKXwwKSsoYW8+Pj4yNil8MCxhbyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQscnQpLHA9KHA9TWF0aC5pbXVsKEh0LEl0KSkrTWF0aC5pbXVsKFB0LHJ0KXwwLHc9TWF0aC5pbXVsKFB0LEl0KSx2PXYrTWF0aC5pbXVsKGl0LER0KXww''@;'; put 'put ''LHA9KHA9cCtNYXRoLmltdWwoaXQscHQpfDApK01hdGguaW11bCh1dCxEdCl8MCx3PXcrTWF0aC5pbXVsKHV0LHB0KXwwLHY9ditNYXRoLmltdWwoTWUsSW4pfDAscD0ocD1wK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKERlLEluKXwwLHc9dytNYXRoLmltdWwoRGUsenQpfDAsdj12''@;'; put 'put ''K01hdGguaW11bChYZSx4bil8MCxwPShwPXArTWF0aC5pbXVsKFhlLHNuKXwwKStNYXRoLmltdWwoVWUseG4pfDAsdz13K01hdGguaW11bChVZSxzbil8MDt2YXIgcm89KFMrKHY9ditNYXRoLmltdWwoQWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSwkdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKFRlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKFRlLCR0KXwwKSsocD4+PjEzKXwwKSsocm8+Pj4yNil8MCxybyY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQsRHQpLHA9KHA9TWF0aC5pbXVsKEh0LHB0KSkrTWF0aC5pbXVsKFB0LER0KXwwLHc9TWF0aC5pbXVsKFB0''@;'; put 'put ''LHB0KSx2PXYrTWF0aC5pbXVsKGl0LEluKXwwLHA9KHA9cCtNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCh1dCxJbil8MCx3PXcrTWF0aC5pbXVsKHV0LHp0KXwwLHY9ditNYXRoLmltdWwoTWUseG4pfDAscD0ocD1wK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKERlLHhuKXww''@;'; put 'put ''LHc9dytNYXRoLmltdWwoRGUsc24pfDA7dmFyIGlvPShTKyh2PXYrTWF0aC5pbXVsKFhlLFJuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoWGUsJHQpfDApK01hdGguaW11bChVZSxSbil8MCkpPDwxMyl8MDtTPSgodz13K01hdGguaW11bChVZSwkdCl8MCkrKHA+Pj4xMyl8MCkr''@;'; put 'put ''KGlvPj4+MjYpfDAsaW8mPTY3MTA4ODYzLHY9TWF0aC5pbXVsKEh0LEluKSxwPShwPU1hdGguaW11bChIdCx6dCkpK01hdGguaW11bChQdCxJbil8MCx3PU1hdGguaW11bChQdCx6dCksdj12K01hdGguaW11bChpdCx4bil8MCxwPShwPXArTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwo''@;'; put 'put ''dXQseG4pfDAsdz13K01hdGguaW11bCh1dCxzbil8MDt2YXIgR2k9KFMrKHY9ditNYXRoLmltdWwoTWUsUm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChNZSwkdCl8MCkrTWF0aC5pbXVsKERlLFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKERlLCR0KXwwKSsocD4+''@;'; put 'put ''PjEzKXwwKSsoR2k+Pj4yNil8MCxHaSY9NjcxMDg4NjMsdj1NYXRoLmltdWwoSHQseG4pLHA9KHA9TWF0aC5pbXVsKEh0LHNuKSkrTWF0aC5pbXVsKFB0LHhuKXwwLHc9TWF0aC5pbXVsKFB0LHNuKTt2YXIgaG89KFMrKHY9ditNYXRoLmltdWwoaXQsUm4pfDApfDApKygoODE5MSYocD0ocD1w''@;'; put 'put ''K01hdGguaW11bChpdCwkdCl8MCkrTWF0aC5pbXVsKHV0LFJuKXwwKSk8PDEzKXwwO1M9KCh3PXcrTWF0aC5pbXVsKHV0LCR0KXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjM7dmFyIHlyPShTKyh2PU1hdGguaW11bChIdCxSbikpfDApKygoODE5MSYocD0ocD1NYXRo''@;'; put 'put ''LmltdWwoSHQsJHQpKStNYXRoLmltdWwoUHQsUm4pfDApKTw8MTMpfDA7cmV0dXJuIFM9KCh3PU1hdGguaW11bChQdCwkdCkpKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxDWzBdPVBuLENbMV09bmksQ1syXT1sbixDWzNdPWpuLENbNF09cXIsQ1s1XT1naSxDWzZdPXhy''@;'; put 'put ''LENbN109VWksQ1s4XT1LcixDWzldPW5vLENbMTBdPUhyLENbMTFdPXFpLENbMTJdPUppLENbMTNdPWFvLENbMTRdPXJvLENbMTVdPWlvLENbMTZdPUdpLENbMTddPWhvLENbMThdPXlyLDAhPT1TJiYoQ1sxOV09UyxILmxlbmd0aCsrKSxIfTtmdW5jdGlvbiBYKEcsYixEKXtyZXR1cm4obmV3''@;'; put 'put ''IFUpLm11bHAoRyxiLEQpfWZ1bmN0aW9uIFUoRyxiKXt0aGlzLng9Ryx0aGlzLnk9Yn1NYXRoLmltdWx8fChCPVYpLE0ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGIsRCl7dmFyIEgsTj10aGlzLmxlbmd0aCtiLmxlbmd0aDtyZXR1cm4gSD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PWIubGVu''@;'; put 'put ''Z3RoP0IodGhpcyxiLEQpOk48NjM/Vih0aGlzLGIsRCk6TjwxMDI0P2Z1bmN0aW9uIFkoRyxiLEQpe0QubmVnYXRpdmU9Yi5uZWdhdGl2ZV5HLm5lZ2F0aXZlLEQubGVuZ3RoPUcubGVuZ3RoK2IubGVuZ3RoO2Zvcih2YXIgSD0wLE49MCxnPTA7ZzxELmxlbmd0aC0xO2crKyl7dmFyIEM9TjtO''@;'; put 'put ''PTA7Zm9yKHZhciBTPTY3MTA4ODYzJkgsdj1NYXRoLm1pbihnLGIubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxnLUcubGVuZ3RoKzEpO3A8PXY7cCsrKXt2YXIgZGU9KDB8Ry53b3Jkc1tnLXBdKSooMHxiLndvcmRzW3BdKSxmZT02NzEwODg2MyZkZTtTPTY3MTA4ODYzJihmZT1mZStTfDApLE4r''@;'; put 'put ''PShDPShDPUMrKGRlLzY3MTA4ODY0fDApfDApKyhmZT4+PjI2KXwwKT4+PjI2LEMmPTY3MTA4ODYzfUQud29yZHNbZ109UyxIPUMsQz1OfXJldHVybiAwIT09SD9ELndvcmRzW2ddPUg6RC5sZW5ndGgtLSxELnN0cmlwKCl9KHRoaXMsYixEKTpYKHRoaXMsYixEKSxIfSxVLnByb3RvdHlwZS5t''@;'; put 'put ''YWtlUkJUPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD1uZXcgQXJyYXkoYiksSD1NLnByb3RvdHlwZS5fY291bnRCaXRzKGIpLTEsTj0wO048YjtOKyspRFtOXT10aGlzLnJldkJpbihOLEgsYik7cmV0dXJuIER9LFUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihiLEQsSCl7aWYoMD09PWJ8fGI9''@;'; put 'put ''PT1ILTEpcmV0dXJuIGI7Zm9yKHZhciBOPTAsZz0wO2c8RDtnKyspTnw9KDEmYik8PEQtZy0xLGI+Pj0xO3JldHVybiBOfSxVLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGIsRCxILE4sZyxDKXtmb3IodmFyIFM9MDtTPEM7UysrKU5bU109RFtiW1NdXSxnW1NdPUhbYltTXV19LFUucHJv''@;'; put 'put ''dG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihiLEQsSCxOLGcsQyl7dGhpcy5wZXJtdXRlKEMsYixELEgsTixnKTtmb3IodmFyIFM9MTtTPGc7Uzw8PTEpZm9yKHZhciB2PVM8PDEscD1NYXRoLmNvcygyKk1hdGguUEkvdiksdz1NYXRoLnNpbigyKk1hdGguUEkvdiksSj0wO0o8ZztKKz12KWZv''@;'; put 'put ''cih2YXIgbmU9cCxkZT13LGZlPTA7ZmU8UztmZSsrKXt2YXIgeGU9SFtKK2ZlXSxMZT1OW0orZmVdLEZlPUhbSitmZStTXSxPZT1OW0orZmUrU10samU9bmUqRmUtZGUqT2U7T2U9bmUqT2UrZGUqRmUsSFtKK2ZlXT14ZSsoRmU9amUpLE5bSitmZV09TGUrT2UsSFtKK2ZlK1NdPXhlLUZlLE5b''@;'; put 'put ''SitmZStTXT1MZS1PZSxmZSE9PXYmJihqZT1wKm5lLXcqZGUsZGU9cCpkZSt3Km5lLG5lPWplKX19LFUucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGIsRCl7dmFyIEg9MXxNYXRoLm1heChELGIpLE49MSZILGc9MDtmb3IoSD1ILzJ8MDtIO0g+Pj49MSlnKys7cmV0dXJuIDE8PGcr''@;'; put 'put ''MStOfSxVLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oYixELEgpe2lmKCEoSDw9MSkpZm9yKHZhciBOPTA7TjxILzI7TisrKXt2YXIgZz1iW05dO2JbTl09YltILU4tMV0sYltILU4tMV09ZyxnPURbTl0sRFtOXT0tRFtILU4tMV0sRFtILU4tMV09LWd9fSxVLnByb3RvdHlwZS5ub3Jt''@;'; put 'put ''YWxpemUxM2I9ZnVuY3Rpb24oYixEKXtmb3IodmFyIEg9MCxOPTA7TjxELzI7TisrKXt2YXIgZz04MTkyKk1hdGgucm91bmQoYlsyKk4rMV0vRCkrTWF0aC5yb3VuZChiWzIqTl0vRCkrSDtiW05dPTY3MTA4ODYzJmcsSD1nPDY3MTA4ODY0PzA6Zy82NzEwODg2NHwwfXJldHVybiBifSxVLnBy''@;'; put 'put ''b3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGIsRCxILE4pe2Zvcih2YXIgZz0wLEM9MDtDPEQ7QysrKUhbMipDXT04MTkxJihnKz0wfGJbQ10pLEhbMipDKzFdPTgxOTEmKGc+Pj49MTMpLGc+Pj49MTM7Zm9yKEM9MipEO0M8TjsrK0MpSFtDXT0wO20oMD09PWcpLG0oMD09KC04MTkyJmcp''@;'; put 'put ''KX0sVS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihiKXtmb3IodmFyIEQ9bmV3IEFycmF5KGIpLEg9MDtIPGI7SCsrKURbSF09MDtyZXR1cm4gRH0sVS5wcm90b3R5cGUubXVscD1mdW5jdGlvbihiLEQsSCl7dmFyIE49Mip0aGlzLmd1ZXNzTGVuMTNiKGIubGVuZ3RoLEQubGVuZ3RoKSxnPXRo''@;'; put 'put ''aXMubWFrZVJCVChOKSxDPXRoaXMuc3R1YihOKSxTPW5ldyBBcnJheShOKSx2PW5ldyBBcnJheShOKSxwPW5ldyBBcnJheShOKSx3PW5ldyBBcnJheShOKSxKPW5ldyBBcnJheShOKSxuZT1uZXcgQXJyYXkoTiksZGU9SC53b3JkcztkZS5sZW5ndGg9Tix0aGlzLmNvbnZlcnQxM2IoYi53b3Jk''@;'; put 'put ''cyxiLmxlbmd0aCxTLE4pLHRoaXMuY29udmVydDEzYihELndvcmRzLEQubGVuZ3RoLHcsTiksdGhpcy50cmFuc2Zvcm0oUyxDLHYscCxOLGcpLHRoaXMudHJhbnNmb3JtKHcsQyxKLG5lLE4sZyk7Zm9yKHZhciBmZT0wO2ZlPE47ZmUrKyl7dmFyIHhlPXZbZmVdKkpbZmVdLXBbZmVdKm5lW2Zl''@;'; put 'put ''XTtwW2ZlXT12W2ZlXSpuZVtmZV0rcFtmZV0qSltmZV0sdltmZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHYscCxOKSx0aGlzLnRyYW5zZm9ybSh2LHAsZGUsQyxOLGcpLHRoaXMuY29uanVnYXRlKGRlLEMsTiksdGhpcy5ub3JtYWxpemUxM2IoZGUsTiksSC5uZWdhdGl2ZT1iLm5lZ2F0''@;'; put 'put ''aXZlXkQubmVnYXRpdmUsSC5sZW5ndGg9Yi5sZW5ndGgrRC5sZW5ndGgsSC5zdHJpcCgpfSxNLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSx0aGlzLm11bFRvKGIsRCl9LE0u''@;'; put 'put ''cHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oYil7dmFyIEQ9bmV3IE0obnVsbCk7cmV0dXJuIEQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2IubGVuZ3RoKSxYKHRoaXMsYixEKX0sTS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGIsdGhp''@;'; put 'put ''cyl9LE0ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiKSxtKGI8NjcxMDg4NjQpO2Zvcih2YXIgRD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIE49KDB8dGhpcy53b3Jkc1tIXSkqYixnPSg2NzEwODg2MyZOKSsoNjcxMDg4NjMmRCk7RD4+PTI2''@;'; put 'put ''LEQrPU4vNjcxMDg4NjR8MCxEKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09RCYmKHRoaXMud29yZHNbSF09RCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxNLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oYil9LE0u''@;'; put 'put ''cHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sTS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sTS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIpe3ZhciBEPWZ1bmN0aW9uIGooRyl7Zm9yKHZhciBi''@;'; put 'put ''PW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxEPTA7RDxiLmxlbmd0aDtEKyspe3ZhciBOPUQlMjY7YltEXT0oRy53b3Jkc1tELzI2fDBdJjE8PE4pPj4+Tn1yZXR1cm4gYn0oYik7aWYoMD09PUQubGVuZ3RoKXJldHVybiBuZXcgTSgxKTtmb3IodmFyIEg9dGhpcyxOPTA7TjxELmxlbmd0aCYm''@;'; put 'put ''MD09PURbTl07TisrLEg9SC5zcXIoKSk7aWYoKytOPEQubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO048RC5sZW5ndGg7TisrLGc9Zy5zcXIoKSkwIT09RFtOXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSxNLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oYil7bSgibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGImJmI+PTApO3ZhciBnLEQ9YiUyNixIPShiLUQpLzI2LE49NjcxMDg4NjM+Pj4yNi1EPDwyNi1EO2lmKDAhPT1EKXt2YXIgQz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciBTPXRoaXMud29yZHNbZ10mTjt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLVM8PER8QyxD''@;'; put 'put ''PVM+Pj4yNi1EfUMmJih0aGlzLndvcmRzW2ddPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1''@;'; put 'put ''cm4gdGhpcy5zdHJpcCgpfSxNLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oYil9LE0ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihiLEQsSCl7dmFyIE47bSgibnVtYmVyIj09dHlwZW9mIGImJmI+PTApLE49RD8o''@;'; put 'put ''RC1EJTI2KS8yNjowO3ZhciBnPWIlMjYsQz1NYXRoLm1pbigoYi1nKS8yNix0aGlzLmxlbmd0aCksUz02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsdj1IO2lmKE4tPUMsTj1NYXRoLm1heCgwLE4pLHYpe2Zvcih2YXIgcD0wO3A8QztwKyspdi53b3Jkc1twXT10aGlzLndvcmRzW3BdO3YubGVu''@;'; put 'put ''Z3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHc9MDtmb3IocD10aGlzLmxlbmd0aC0x''@;'; put 'put ''O3A+PTAmJigwIT09d3x8cD49Tik7cC0tKXt2YXIgSj0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT13PDwyNi1nfEo+Pj5nLHc9SiZTfXJldHVybiB2JiYwIT09dyYmKHYud29yZHNbdi5sZW5ndGgrK109dyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVu''@;'; put 'put ''Z3RoPTEpLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oYixELEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihiLEQsSCl9LE0ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihiKX0sTS5w''@;'; put 'put ''cm90b3R5cGUudXNobG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oYil9LE0ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihiKX0sTS5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pdXNocm4oYil9LE0ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEQpKX0sTS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0''@;'; put 'put ''aW9uKGIpe20oIm51bWJlciI9PXR5cGVvZiBiJiZiPj0wKTt2YXIgRD1iJTI2LEg9KGItRCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1EJiZIKyssdGhpcy5s''@;'; put 'put ''ZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PkQ8PEQpLHRoaXMuc3RyaXAoKSl9LE0ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGIp''@;'; put 'put ''fSxNLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihiKXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwP3RoaXMuaXN1Ym4oLWIpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Yj8odGhpcy53b3Jkc1swXT1i''@;'; put 'put ''LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oYiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGIpfSxNLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oYil7dGhpcy53b3Jkc1swXSs9Yjtmb3IodmFy''@;'; put 'put ''IEQ9MDtEPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0RdPj02NzEwODg2NDtEKyspdGhpcy53b3Jkc1tEXS09NjcxMDg4NjQsRD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tEKzFdPTE6dGhpcy53b3Jkc1tEKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3Ro''@;'; put 'put ''LEQrMSksdGhpc30sTS5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oYil7aWYobSgibnVtYmVyIj09dHlwZW9mIGIpLG0oYjw2NzEwODg2NCksYjwwKXJldHVybiB0aGlzLmlhZGRuKC1iKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oYiks''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09YiwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgRD0wO0Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbRF08''@;'; put 'put ''MDtEKyspdGhpcy53b3Jkc1tEXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tEKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LE0ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihiKX0sTS5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihiKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlzdWJuKGIpfSxNLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxNLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sTS5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0''@;'; put 'put ''aW9uKGIsRCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoYi5sZW5ndGgrSCk7dmFyIEMsUz0wO2ZvcihnPTA7ZzxiLmxlbmd0aDtnKyspe0M9KDB8dGhpcy53b3Jkc1tnK0hdKStTO3ZhciB2PSgwfGIud29yZHNbZ10pKkQ7Uz0oKEMtPTY3MTA4ODYzJnYpPj4yNiktKHYvNjcxMDg4NjR8MCksdGhp''@;'; put 'put ''cy53b3Jkc1tnK0hdPTY3MTA4ODYzJkN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKVM9KEM9KDB8dGhpcy53b3Jkc1tnK0hdKStTKT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJkM7aWYoMD09PVMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PVMpLFM9MCxnPTA7Zzx0aGlz''@;'; put 'put ''Lmxlbmd0aDtnKyspUz0oQz0tKDB8dGhpcy53b3Jkc1tnXSkrUyk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmQztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sTS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oYixEKXt2YXIgSCxOPXRoaXMuY2xvbmUoKSxnPWIs''@;'; put 'put ''Qz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKGc9Zy51c2hsbihIKSxOLml1c2hsbihIKSxDPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsdj1OLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUQpeyhwPW5ldyBNKG51bGwpKS5sZW5n''@;'; put 'put ''dGg9disxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIHc9MDt3PHAubGVuZ3RoO3crKylwLndvcmRzW3ddPTB9dmFyIEo9Ti5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsdik7MD09PUoubmVnYXRpdmUmJihOPUoscCYmKHAud29yZHNbdl09MSkpO2Zvcih2YXIgbmU9di0x''@;'; put 'put ''O25lPj0wO25lLS0pe3ZhciBkZT02NzEwODg2NCooMHxOLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8Ti53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKGRlPU1hdGgubWluKGRlL0N8MCw2NzEwODg2MyksTi5faXNobG5zdWJtdWwoZyxkZSxuZSk7MCE9PU4ubmVnYXRpdmU7KWRlLS0sTi5uZWdh''@;'; put 'put ''dGl2ZT0wLE4uX2lzaGxuc3VibXVsKGcsMSxuZSksTi5pc1plcm8oKXx8KE4ubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT1kZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxOLnN0cmlwKCksImRpdiIhPT1EJiYwIT09SCYmTi5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpOfX0sTS5wcm90''@;'; put 'put ''b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGIsRCxIKXtyZXR1cm4gbSghYi5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBNKDApLG1vZDpuZXcgTSgwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1iLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIsRCksIm1vZCIhPT1EJiYo''@;'; put 'put ''Tj1DLmRpdi5uZWcoKSksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKGIpKSx7ZGl2Ok4sbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWIubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoYi5uZWcoKSxEKSwibW9kIiE9PUQmJihOPUMuZGl2''@;'; put 'put ''Lm5lZygpKSx7ZGl2Ok4sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZiLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGIubmVnKCksRCksImRpdiIhPT1EJiYoZz1DLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKGIpKSx7ZGl2OkMuZGl2LG1vZDpnfSk6Yi5sZW5n''@;'; put 'put ''dGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGIpPDA/e2RpdjpuZXcgTSgwKSxtb2Q6dGhpc306MT09PWIubGVuZ3RoPyJkaXYiPT09RD97ZGl2OnRoaXMuZGl2bihiLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1EP3tkaXY6bnVsbCxtb2Q6bmV3IE0odGhpcy5tb2RuKGIud29yZHNbMF0p''@;'; put 'put ''KX06e2Rpdjp0aGlzLmRpdm4oYi53b3Jkc1swXSksbW9kOm5ldyBNKHRoaXMubW9kbihiLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoYixEKTt2YXIgTixnLEN9LE0ucHJvdG90eXBlLmRpdj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwiZGl2IiwhMSkuZGl2fSxNLnByb3Rv''@;'; put 'put ''dHlwZS5tb2Q9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuZGl2bW9kKGIsIm1vZCIsITEpLm1vZH0sTS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5kaXZtb2QoYiwibW9kIiwhMCkubW9kfSxNLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihiKXt2YXIgRD10aGlz''@;'; put 'put ''LmRpdm1vZChiKTtpZihELm1vZC5pc1plcm8oKSlyZXR1cm4gRC5kaXY7dmFyIEg9MCE9PUQuZGl2Lm5lZ2F0aXZlP0QubW9kLmlzdWIoYik6RC5tb2QsTj1iLnVzaHJuKDEpLGc9Yi5hbmRsbigxKSxDPUguY21wKE4pO3JldHVybiBDPDB8fDE9PT1nJiYwPT09Qz9ELmRpdjowIT09RC5kaXYu''@;'; put 'put ''bmVnYXRpdmU/RC5kaXYuaXN1Ym4oMSk6RC5kaXYuaWFkZG4oMSl9LE0ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPSgxPDwyNiklYixIPTAsTj10aGlzLmxlbmd0aC0xO04+PTA7Ti0tKUg9KEQqSCsoMHx0aGlzLndvcmRzW05dKSklYjtyZXR1''@;'; put 'put ''cm4gSH0sTS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oYil7bShiPD02NzEwODg2Myk7Zm9yKHZhciBEPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgTj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpEO3RoaXMud29yZHNbSF09Ti9ifDAsRD1OJWJ9cmV0dXJuIHRoaXMuc3Ry''@;'; put 'put ''aXAoKX0sTS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGIpfSxNLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkpO3ZhciBEPXRoaXMsSD1iLmNsb25lKCk7RD0wIT09RC5uZWdhdGl2''@;'; put 'put ''ZT9ELnVtb2QoYik6RC5jbG9uZSgpO2Zvcih2YXIgTj1uZXcgTSgxKSxnPW5ldyBNKDApLEM9bmV3IE0oMCksUz1uZXcgTSgxKSx2PTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspRC5pdXNocm4oMSksSC5pdXNocm4oMSksKyt2O2Zvcih2YXIgcD1ILmNsb25lKCksdz1ELmNsb25lKCk7IUQu''@;'; put 'put ''aXNaZXJvKCk7KXtmb3IodmFyIEo9MCxuZT0xOyEoRC53b3Jkc1swXSZuZSkmJko8MjY7KytKLG5lPDw9MSk7aWYoSj4wKWZvcihELml1c2hybihKKTtKLS0gPjA7KShOLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihOLmlhZGQocCksZy5pc3ViKHcpKSxOLml1c2hybigxKSxnLml1c2hybigxKTtm''@;'; put 'put ''b3IodmFyIGRlPTAsZmU9MTshKEgud29yZHNbMF0mZmUpJiZkZTwyNjsrK2RlLGZlPDw9MSk7aWYoZGU+MClmb3IoSC5pdXNocm4oZGUpO2RlLS0gPjA7KShDLmlzT2RkKCl8fFMuaXNPZGQoKSkmJihDLmlhZGQocCksUy5pc3ViKHcpKSxDLml1c2hybigxKSxTLml1c2hybigxKTtELmNtcChI''@;'; put 'put ''KT49MD8oRC5pc3ViKEgpLE4uaXN1YihDKSxnLmlzdWIoUykpOihILmlzdWIoRCksQy5pc3ViKE4pLFMuaXN1YihnKSl9cmV0dXJue2E6QyxiOlMsZ2NkOkguaXVzaGxuKHYpfX0sTS5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGIpe20oMD09PWIubmVnYXRpdmUpLG0oIWIuaXNaZXJvKCkp''@;'; put 'put ''O3ZhciBKLEQ9dGhpcyxIPWIuY2xvbmUoKTtEPTAhPT1ELm5lZ2F0aXZlP0QudW1vZChiKTpELmNsb25lKCk7Zm9yKHZhciBOPW5ldyBNKDEpLGc9bmV3IE0oMCksQz1ILmNsb25lKCk7RC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBTPTAsdj0xOyEoRC53b3Jkc1swXSZ2KSYm''@;'; put 'put ''UzwyNjsrK1Msdjw8PTEpO2lmKFM+MClmb3IoRC5pdXNocm4oUyk7Uy0tID4wOylOLmlzT2RkKCkmJk4uaWFkZChDKSxOLml1c2hybigxKTtmb3IodmFyIHA9MCx3PTE7IShILndvcmRzWzBdJncpJiZwPDI2OysrcCx3PDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNP''@;'; put 'put ''ZGQoKSYmZy5pYWRkKEMpLGcuaXVzaHJuKDEpO0QuY21wKEgpPj0wPyhELmlzdWIoSCksTi5pc3ViKGcpKTooSC5pc3ViKEQpLGcuaXN1YihOKSl9cmV0dXJuKEo9MD09PUQuY21wbigxKT9OOmcpLmNtcG4oMCk8MCYmSi5pYWRkKGIpLEp9LE0ucHJvdG90eXBlLmdjZD1mdW5jdGlvbihiKXtp''@;'; put 'put ''Zih0aGlzLmlzWmVybygpKXJldHVybiBiLmFicygpO2lmKGIuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEQ9dGhpcy5jbG9uZSgpLEg9Yi5jbG9uZSgpO0QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBOPTA7RC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtOKyspRC5pdXNo''@;'; put 'put ''cm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0QuaXNFdmVuKCk7KUQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9RC5jbXAoSCk7aWYoZzwwKXt2YXIgQz1EO0Q9SCxIPUN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztELmlzdWIo''@;'; put 'put ''SCl9cmV0dXJuIEguaXVzaGxuKE4pfSxNLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmVnY2QoYikuYS51bW9kKGIpfSxNLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09KDEmdGhpcy53b3Jkc1swXSl9LE0ucHJvdG90eXBlLmlzT2RkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDE9PSgxJnRoaXMud29yZHNbMF0pfSxNLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZifSxNLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihiKXttKCJudW1iZXIiPT10eXBlb2YgYik7dmFyIEQ9YiUyNixIPShiLUQpLzI2LE49''@;'; put 'put ''MTw8RDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9Tix0aGlzO2Zvcih2YXIgZz1OLEM9SDswIT09ZyYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBTPTB8dGhpcy53b3Jkc1tDXTtnPShTKz1nKT4+PjI2LHRoaXMud29yZHNbQ109UyY9''@;'; put 'put ''NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tDXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LE0ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxNLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKGIpe3Zh''@;'; put 'put ''ciBILEQ9YjwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhRClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmRClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtEJiYoYj0tYiksbShiPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIg''@;'; put 'put ''Tj0wfHRoaXMud29yZHNbMF07SD1OPT09Yj8wOk48Yj8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LE0ucHJvdG90eXBlLmNtcD1mdW5jdGlvbihiKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWIubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''JjAhPT1iLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBEPXRoaXMudWNtcChiKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtRDpEfSxNLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGIpe2lmKHRoaXMubGVuZ3RoPmIubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGIubGVuZ3RoKXJl''@;'; put 'put ''dHVybi0xO2Zvcih2YXIgRD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIE49MHx0aGlzLndvcmRzW0hdLGc9MHxiLndvcmRzW0hdO2lmKE4hPT1nKXtOPGc/RD0tMTpOPmcmJihEPTEpO2JyZWFrfX1yZXR1cm4gRH0sTS5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGIpe3JldHVybiAx''@;'; put 'put ''PT09dGhpcy5jbXBuKGIpfSxNLnByb3RvdHlwZS5ndD1mdW5jdGlvbihiKXtyZXR1cm4gMT09PXRoaXMuY21wKGIpfSxNLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLmNtcG4oYik+PTB9LE0ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXAo''@;'; put 'put ''Yik+PTB9LE0ucHJvdG90eXBlLmx0bj1mdW5jdGlvbihiKXtyZXR1cm4tMT09PXRoaXMuY21wbihiKX0sTS5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oYil7cmV0dXJuLTE9PT10aGlzLmNtcChiKX0sTS5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5jbXBuKGIpPD0wfSxN''@;'; put 'put ''LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oYil7cmV0dXJuIHRoaXMuY21wKGIpPD0wfSxNLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oYil7cmV0dXJuIDA9PT10aGlzLmNtcG4oYil9LE0ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGIpe3JldHVybiAwPT09dGhpcy5jbXAoYil9LE0ucmVkPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiBuZXcgdWUoYil9LE0ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVz''@;'; put 'put ''IiksYi5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGIpfSxNLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlz''@;'; put 'put ''KX0sTS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiB0aGlzLnJlZD1iLHRoaXN9LE0ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGIpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNl''@;'; put 'put ''UmVkKGIpfSxNLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJl''@;'; put 'put ''ZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0''@;'; put 'put ''aGlzLGIpfSxNLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxiKX0sTS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGIpe3JldHVybiBtKHRoaXMu''@;'; put 'put ''cmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihiKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp''@;'; put 'put ''ZnkyKHRoaXMsYiksdGhpcy5yZWQubXVsKHRoaXMsYil9LE0ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGIpLHRoaXMucmVkLmltdWwodGhp''@;'; put 'put ''cyxiKX0sTS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LE0ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxNLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sTS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMu''@;'; put 'put ''cmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LE0ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRo''@;'; put 'put ''aXMpfSxNLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oYil7cmV0dXJuIG0odGhpcy5yZWQmJiFiLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxiKX07dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxs''@;'; put 'put ''LHAyNTUxOTpudWxsfTtmdW5jdGlvbiBlZShHLGIpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgTShiLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgTSgxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUo''@;'; put 'put ''KXtlZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG9lKCl7ZWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe2VlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gaGUoKXtlZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHVlKEcpe2lmKCJzdHJpbmciPT10eXBlb2YgRyl7dmFyIGI9TS5fcHJpbWUoRyk7dGhpcy5tPWIucCx0aGlzLnByaW1lPWJ9ZWxzZSBtKEcuZ3RuKDEpLCJtb2R1''@;'; put 'put ''bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Ryx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gY2UoRyl7dWUuY2FsbCh0aGlzLEcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0''@;'; put 'put ''aGlzLnI9bmV3IE0oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlz''@;'; put 'put ''Lm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9ZWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgYj1uZXcgTShudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGJ9LGVlLnByb3RvdHlwZS5pcmVk''@;'; put 'put ''dWNlPWZ1bmN0aW9uKGIpe3ZhciBILEQ9Yjtkb3t0aGlzLnNwbGl0KEQsdGhpcy50bXApLEg9KEQ9KEQ9dGhpcy5pbXVsSyhEKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgTj1IPHRoaXMubj8tMTpELnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PU4/''@;'; put 'put ''KEQud29yZHNbMF09MCxELmxlbmd0aD0xKTpOPjA/RC5pc3ViKHRoaXMucCk6dm9pZCAwIT09RC5zdHJpcD9ELnN0cmlwKCk6RC5fc3RyaXAoKSxEfSxlZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oYixEKXtiLml1c2hybih0aGlzLm4sMCxEKX0sZWUucHJvdG90eXBlLmltdWxLPWZ1bmN0''@;'; put 'put ''aW9uKGIpe3JldHVybiBiLmltdWwodGhpcy5rKX0sbGUodGUsZWUpLHRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihiLEQpe2Zvcih2YXIgSD00MTk0MzAzLE49TWF0aC5taW4oYi5sZW5ndGgsOSksZz0wO2c8TjtnKyspRC53b3Jkc1tnXT1iLndvcmRzW2ddO2lmKEQubGVuZ3RoPU4sYi5s''@;'; put 'put ''ZW5ndGg8PTkpcmV0dXJuIGIud29yZHNbMF09MCx2b2lkKGIubGVuZ3RoPTEpO3ZhciBDPWIud29yZHNbOV07Zm9yKEQud29yZHNbRC5sZW5ndGgrK109QyZILGc9MTA7ZzxiLmxlbmd0aDtnKyspe3ZhciBTPTB8Yi53b3Jkc1tnXTtiLndvcmRzW2ctMTBdPShTJkgpPDw0fEM+Pj4yMixDPVN9''@;'; put 'put ''Yi53b3Jkc1tnLTEwXT1DPj4+PTIyLGIubGVuZ3RoLT0wPT09QyYmYi5sZW5ndGg+MTA/MTA6OX0sdGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Iud29yZHNbYi5sZW5ndGhdPTAsYi53b3Jkc1tiLmxlbmd0aCsxXT0wLGIubGVuZ3RoKz0yO2Zvcih2YXIgRD0wLEg9MDtIPGIubGVu''@;'; put 'put ''Z3RoO0grKyl7dmFyIE49MHxiLndvcmRzW0hdO2Iud29yZHNbSF09NjcxMDg4NjMmKEQrPTk3NypOKSxEPTY0Kk4rKEQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1iLndvcmRzW2IubGVuZ3RoLTFdJiYoYi5sZW5ndGgtLSwwPT09Yi53b3Jkc1tiLmxlbmd0aC0xXSYmYi5sZW5ndGgtLSksYn0s''@;'; put 'put ''bGUob2UsZWUpLGxlKHNlLGVlKSxsZShoZSxlZSksaGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGIpe2Zvcih2YXIgRD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIE49MTkqKDB8Yi53b3Jkc1tIXSkrRCxnPTY3MTA4ODYzJk47Tj4+Pj0yNixiLndvcmRzW0hdPWcsRD1OfXJldHVybiAw''@;'; put 'put ''IT09RCYmKGIud29yZHNbYi5sZW5ndGgrK109RCksYn0sTS5fcHJpbWU9ZnVuY3Rpb24oYil7aWYocVtiXSlyZXR1cm4gcVtiXTt2YXIgRDtpZigiazI1NiI9PT1iKUQ9bmV3IHRlO2Vsc2UgaWYoInAyMjQiPT09YilEPW5ldyBvZTtlbHNlIGlmKCJwMTkyIj09PWIpRD1uZXcgc2U7ZWxzZXtp''@;'; put 'put ''ZigicDI1NTE5IiE9PWIpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrYik7RD1uZXcgaGV9cmV0dXJuIHFbYl09RCxEfSx1ZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oYil7bSgwPT09Yi5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGIu''@;'; put 'put ''cmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHVlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihiLEQpe20oMD09KGIubmVnYXRpdmV8RC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbShiLnJlZCYmYi5yZWQ9PT1ELnJlZCwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSx1ZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoYikuX2ZvcmNlUmVkKHRoaXMpOmIudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLm5l''@;'; put 'put ''Zz1mdW5jdGlvbihiKXtyZXR1cm4gYi5pc1plcm8oKT9iLmNsb25lKCk6dGhpcy5tLnN1YihiKS5fZm9yY2VSZWQodGhpcyl9LHVlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5hZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkgu''@;'; put 'put ''aXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSx1ZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihiLEQpe3RoaXMuX3ZlcmlmeTIoYixEKTt2YXIgSD1iLmlhZGQoRCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHVlLnByb3RvdHlwZS5zdWI9ZnVuY3Rp''@;'; put 'put ''b24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5zdWIoRCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sdWUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oYixEKXt0aGlzLl92ZXJpZnkyKGIsRCk7dmFyIEg9Yi5pc3ViKEQpO3Jl''@;'; put 'put ''dHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sdWUucHJvdG90eXBlLnNobD1mdW5jdGlvbihiLEQpe3JldHVybiB0aGlzLl92ZXJpZnkxKGIpLHRoaXMuaW1vZChiLnVzaGxuKEQpKX0sdWUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oYixEKXtyZXR1cm4gdGhpcy5fdmVyaWZ5''@;'; put 'put ''MihiLEQpLHRoaXMuaW1vZChiLmltdWwoRCkpfSx1ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGIsRCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoYixEKSx0aGlzLmltb2QoYi5tdWwoRCkpfSx1ZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbXVsKGIsYi5jbG9uZSgp''@;'; put 'put ''KX0sdWUucHJvdG90eXBlLnNxcj1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5tdWwoYixiKX0sdWUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBEPXRoaXMubS5hbmRsbigzKTtpZihtKEQlMj09MSksMz09PUQpe3ZhciBIPXRo''@;'; put 'put ''aXMubS5hZGQobmV3IE0oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coYixIKX1mb3IodmFyIE49dGhpcy5tLnN1Ym4oMSksZz0wOyFOLmlzWmVybygpJiYwPT09Ti5hbmRsbigxKTspZysrLE4uaXVzaHJuKDEpO20oIU4uaXNaZXJvKCkpO3ZhciBDPW5ldyBNKDEpLnRvUmVkKHRoaXMp''@;'; put 'put ''LFM9Qy5yZWROZWcoKSx2PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgTSgyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsdikuY21wKFMpOylwLnJlZElBZGQoUyk7Zm9yKHZhciB3PXRoaXMucG93KHAsTiksSj10aGlzLnBv''@;'; put 'put ''dyhiLE4uYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KGIsTiksZGU9ZzswIT09bmUuY21wKEMpOyl7Zm9yKHZhciBmZT1uZSx4ZT0wOzAhPT1mZS5jbXAoQyk7eGUrKylmZT1mZS5yZWRTcXIoKTttKHhlPGRlKTt2YXIgTGU9dGhpcy5wb3codyxuZXcgTSgxKS5pdXNobG4oZGUteGUt''@;'; put 'put ''MSkpO0o9Si5yZWRNdWwoTGUpLHc9TGUucmVkU3FyKCksbmU9bmUucmVkTXVsKHcpLGRlPXhlfXJldHVybiBKfSx1ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihiKXt2YXIgRD1iLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09RC5uZWdhdGl2ZT8oRC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChE''@;'; put 'put ''KS5yZWROZWcoKSk6dGhpcy5pbW9kKEQpfSx1ZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGIsRCl7aWYoRC5pc1plcm8oKSlyZXR1cm4gbmV3IE0oMSkudG9SZWQodGhpcyk7aWYoMD09PUQuY21wbigxKSlyZXR1cm4gYi5jbG9uZSgpO3ZhciBOPW5ldyBBcnJheSgxNik7TlswXT1uZXcgTSgx''@;'; put 'put ''KS50b1JlZCh0aGlzKSxOWzFdPWI7Zm9yKHZhciBnPTI7ZzxOLmxlbmd0aDtnKyspTltnXT10aGlzLm11bChOW2ctMV0sYik7dmFyIEM9TlswXSxTPTAsdj0wLHA9RC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUQubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgdz1ELndv''@;'; put 'put ''cmRzW2ddLEo9cC0xO0o+PTA7Si0tKXt2YXIgbmU9dz4+SiYxO0MhPT1OWzBdJiYoQz10aGlzLnNxcihDKSksMCE9PW5lfHwwIT09Uz8oUzw8PTEsU3w9bmUsKDQ9PSsrdnx8MD09PWcmJjA9PT1KKSYmKEM9dGhpcy5tdWwoQyxOW1NdKSx2PTAsUz0wKSk6dj0wfXA9MjZ9cmV0dXJuIEN9LHVl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oYil7dmFyIEQ9Yi51bW9kKHRoaXMubSk7cmV0dXJuIEQ9PT1iP0QuY2xvbmUoKTpEfSx1ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9Yi5jbG9uZSgpO3JldHVybiBELnJlZD1udWxsLER9LE0ubW9udD1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gbmV3IGNlKGIpfSxsZShjZSx1ZSksY2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIudXNobG4odGhpcy5zaGlmdCkpfSxjZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oYil7dmFyIEQ9dGhpcy5pbW9kKGIu''@;'; put 'put ''bXVsKHRoaXMucmludikpO3JldHVybiBELnJlZD1udWxsLER9LGNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGIsRCl7aWYoYi5pc1plcm8oKXx8RC5pc1plcm8oKSlyZXR1cm4gYi53b3Jkc1swXT0wLGIubGVuZ3RoPTEsYjt2YXIgSD1iLmltdWwoRCksTj1ILm1hc2tuKHRoaXMuc2hpZnQp''@;'; put 'put ''Lm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihOKS5pdXNocm4odGhpcy5zaGlmdCksQz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP0M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihDPWcuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKX0sY2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihiLEQpe2lmKGIuaXNaZXJvKCl8fEQuaXNaZXJvKCkpcmV0dXJuIG5ldyBNKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgSD1iLm11bChEKSxOPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hp''@;'; put 'put ''ZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKE4pLml1c2hybih0aGlzLnNoaWZ0KSxDPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Qz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKEM9Zy5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUuaW52bT1mdW5j''@;'; put 'put ''dGlvbihiKXtyZXR1cm4gdGhpcy5pbW9kKGIuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fShhdD1GLm5tZChhdCksdGhpcyl9LDg1MjUyOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg3OTgzKSx4PUYoMTY1MTcpLG09RigyMTgxNyksbGU9Rig0ODIxMSksTT1G''@;'; put 'put ''KDcxOTQ2KSxPPUYoOTYzNjIpLFI9Rig3MDczNSksej1GKDg0MykuQnVmZmVyO2F0LmV4cG9ydHM9ZnVuY3Rpb24oaixWLEIpe3ZhciBZO1k9ai5wYWRkaW5nP2oucGFkZGluZzpCPzE6NDt2YXIgcSxYPWFlKGopLFU9WC5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihWLmxlbmd0aD5VfHxuZXcg''@;'; put 'put ''bGUoVikuY21wKFgubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cT1CP1IobmV3IGxlKFYpLFgpOk0oVixYKTt2YXIgZWU9ei5hbGxvYyhVLXEubGVuZ3RoKTtpZihxPXouY29uY2F0KFtlZSxxXSxVKSw0PT09WSlyZXR1cm4gZnVuY3Rpb24gSyhFLGop''@;'; put 'put ''e3ZhciBWPUUubW9kdWx1cy5ieXRlTGVuZ3RoKCksQj1PKCJzaGExIikudXBkYXRlKHouYWxsb2MoMCkpLmRpZ2VzdCgpLFk9Qi5sZW5ndGg7aWYoMCE9PWpbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIFg9ai5zbGljZSgxLFkrMSksVT1qLnNsaWNlKFkrMSks''@;'; put 'put ''cT1tKFgseChVLFkpKSxlZT1tKFUseChxLFYtWS0xKSk7aWYoZnVuY3Rpb24gayhFLGope0U9ei5mcm9tKEUpLGo9ei5mcm9tKGopO3ZhciBWPTAsQj1FLmxlbmd0aDtFLmxlbmd0aCE9PWoubGVuZ3RoJiYoVisrLEI9TWF0aC5taW4oRS5sZW5ndGgsai5sZW5ndGgpKTtmb3IodmFyIFk9LTE7''@;'; put 'put ''KytZPEI7KVYrPUVbWV1ealtZXTtyZXR1cm4gVn0oQixlZS5zbGljZSgwLFkpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIHRlPVk7MD09PWVlW3RlXTspdGUrKztpZigxIT09ZWVbdGUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7''@;'; put 'put ''cmV0dXJuIGVlLnNsaWNlKHRlKX0oWCxxKTtpZigxPT09WSlyZXR1cm4gZnVuY3Rpb24gSShFLGosVil7Zm9yKHZhciBCPWouc2xpY2UoMCwyKSxZPTIsWD0wOzAhPT1qW1krK107KWlmKFk+PWoubGVuZ3RoKXtYKys7YnJlYWt9dmFyIFU9ai5zbGljZSgyLFktMSk7aWYoKCIwMDAyIiE9PUIu''@;'; put 'put ''dG9TdHJpbmcoImhleCIpJiYhVnx8IjAwMDEiIT09Qi50b1N0cmluZygiaGV4IikmJlYpJiZYKyssVS5sZW5ndGg8OCYmWCsrLFgpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGouc2xpY2UoWSl9KDAscSxCKTtpZigzPT09WSlyZXR1cm4gcTt0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNDU3Mzc6KGF0LEllLEYpPT57dmFyIGFlPUYoODc5ODMpLHg9Rig0NDAxOSksbT1GKDk2MzYyKSxsZT1GKDE2NTE3KSxNPUYoMjE4MTcpLE89Rig0ODIxMSksUj1GKDcwNzM1KSx6PUYoNzE5NDYpLEs9Rig4NDMpLkJ1ZmZlcjthdC5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKFYsQixZKXt2YXIgWDtYPVYucGFkZGluZz9WLnBhZGRpbmc6WT8xOjQ7dmFyIHEsVT1hZShWKTtpZig0PT09WClxPWZ1bmN0aW9uIEkoaixWKXt2YXIgQj1qLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9Vi5sZW5ndGgsWD1tKCJzaGExIikudXBkYXRlKEsuYWxsb2MoMCkpLmRp''@;'; put 'put ''Z2VzdCgpLFU9WC5sZW5ndGgscT0yKlU7aWYoWT5CLXEtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgZWU9Sy5hbGxvYyhCLVktcS0yKSx0ZT1CLVUtMSxvZT14KFUpLHNlPU0oSy5jb25jYXQoW1gsZWUsSy5hbGxvYygxLDEpLFZdLHRlKSxsZShvZSx0ZSkpLGhl''@;'; put 'put ''PU0ob2UsbGUoc2UsVSkpO3JldHVybiBuZXcgTyhLLmNvbmNhdChbSy5hbGxvYygxKSxoZSxzZV0sQikpfShVLEIpO2Vsc2UgaWYoMT09PVgpcT1mdW5jdGlvbiBrKGosVixCKXt2YXIgVSxZPVYubGVuZ3RoLFg9ai5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihZPlgtMTEpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIFU9Qj9LLmFsbG9jKFgtWS0zLDI1NSk6ZnVuY3Rpb24gRShqKXtmb3IodmFyIFUsVj1LLmFsbG9jVW5zYWZlKGopLEI9MCxZPXgoMipqKSxYPTA7QjxqOylYPT09WS5sZW5ndGgmJihZPXgoMipqKSxYPTApLChVPVlbWCsrXSkmJihWW0Ir''@;'; put 'put ''K109VSk7cmV0dXJuIFZ9KFgtWS0zKSxuZXcgTyhLLmNvbmNhdChbSy5mcm9tKFswLEI/MToyXSksVSxLLmFsbG9jKDEpLFZdLFgpKX0oVSxCLFkpO2Vsc2V7aWYoMyE9PVgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigocT1uZXcgTyhCKSkuY21wKFUubW9kdWx1cyk+''@;'; put 'put ''PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIFk/eihxLFUpOlIocSxVKX19LDcwNzM1OihhdCxJZSxGKT0+e3ZhciBhZT1GKDQ4MjExKSx4PUYoODQzKS5CdWZmZXI7YXQuZXhwb3J0cz1mdW5jdGlvbiBtKGxlLE0pe3JldHVybiB4LmZyb20o''@;'; put 'put ''bGUudG9SZWQoYWUubW9udChNLm1vZHVsdXMpKS5yZWRQb3cobmV3IGFlKE0ucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDIxODE3OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbihGLGFlKXtmb3IodmFyIHg9Ri5sZW5ndGgsbT0tMTsrK208eDspRlttXV49YWVbbV07''@;'; put 'put ''cmV0dXJuIEZ9fSw0NDAxOTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGxlPUYoODQzKS5CdWZmZXIsTT1nbG9iYWwuY3J5cHRvfHxnbG9iYWwubXNDcnlwdG87YXQuZXhwb3J0cz1NJiZNLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBPKFIseil7aWYoUj40Mjk0OTY3Mjk1KXRocm93''@;'; put 'put ''IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIEs9bGUuYWxsb2NVbnNhZmUoUik7aWYoUj4wKWlmKFI+NjU1MzYpZm9yKHZhciBJPTA7STxSO0krPTY1NTM2KU0uZ2V0UmFuZG9tVmFsdWVzKEsuc2xpY2UoSSxJKzY1NTM2KSk7ZWxzZSBNLmdl''@;'; put 'put ''dFJhbmRvbVZhbHVlcyhLKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygej9wcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7eihudWxsLEspfSk6S306ZnVuY3Rpb24gbSgpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVk''@;'; put 'put ''IGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDYxMjM3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhZSgpe3Rocm93IG5ldyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qg''@;'; put 'put ''c3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfXZhciB4PUYoODQzKSxtPUYoNDQwMTkpLGxlPXguQnVmZmVyLE09eC5rTWF4TGVuZ3RoLE89Z2xvYmFsLmNyeXB0b3x8Z2xvYmFsLm1zQ3J5cHRvLFI9TWF0aC5w''@;'; put 'put ''b3coMiwzMiktMTtmdW5jdGlvbiB6KGosVil7aWYoIm51bWJlciIhPXR5cGVvZiBqfHxqIT1qKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoaj5SfHxqPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihq''@;'; put 'put ''Pk18fGo+Vil0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEsoaixWLEIpe2lmKCJudW1iZXIiIT10eXBlb2Yganx8aiE9ail0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihqPlJ8fGo8MCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihqK1Y+Qnx8aj5NKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gayhqLFYsQixZKXtpZihwcm9jZXNzLmJyb3dzZXIpe3ZhciBVPW5ldyBVaW50OEFycmF5KGouYnVmZmVyLFYsQik7''@;'; put 'put ''cmV0dXJuIE8uZ2V0UmFuZG9tVmFsdWVzKFUpLFk/dm9pZCBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7WShudWxsLGopfSk6an1pZighWSlyZXR1cm4gbShCKS5jb3B5KGosViksajttKEIsZnVuY3Rpb24oZWUsdGUpe2lmKGVlKXJldHVybiBZKGVlKTt0ZS5jb3B5KGosViksWShudWxs''@;'; put 'put ''LGopfSl9TyYmTy5nZXRSYW5kb21WYWx1ZXN8fCFwcm9jZXNzLmJyb3dzZXI/KEllLnJhbmRvbUZpbGw9ZnVuY3Rpb24gSShqLFYsQixZKXtpZighKGxlLmlzQnVmZmVyKGopfHxqIGluc3RhbmNlb2YgZ2xvYmFsLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWKVk9VixWPTAsQj1qLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBCKVk9QixCPWoubGVuZ3RoLVY7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgWSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCciY2IiIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlvbicpO3JldHVybiB6KFYsai5sZW5ndGgpLEsoQixWLGoubGVuZ3RoKSxrKGosVixCLFkpfSxJZS5yYW5kb21GaWxsU3luYz1mdW5jdGlvbiBFKGosVixCKXtpZih0eXBlb2YgVj4idSImJihWPTApLCEobGUuaXNCdWZm''@;'; put 'put ''ZXIoail8fGogaW5zdGFuY2VvZiBnbG9iYWwuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIHooVixqLmxlbmd0aCksdm9pZCAwPT09QiYmKEI9ai5sZW5ndGgtViksSyhCLFYsai5s''@;'; put 'put ''ZW5ndGgpLGsoaixWLEIpfSk6KEllLnJhbmRvbUZpbGw9YWUsSWUucmFuZG9tRmlsbFN5bmM9YWUpfSw5NzIxODphdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRj17fTtmdW5jdGlvbiBhZShPLFIseil7enx8KHo9RXJyb3IpO3ZhciBJPWZ1bmN0aW9uKGspe2Z1bmN0aW9uIEUoaixWLEIpe3JldHVy''@;'; put 'put ''biBrLmNhbGwodGhpcyxmdW5jdGlvbiBLKGssRSxqKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFI/UjpSKGssRSxqKX0oaixWLEIpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gSWUoTyxSKXtPLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFIucHJvdG90eXBlKSxPLnByb3RvdHlwZS5jb25zdHJ1''@;'; put 'put ''Y3Rvcj1PLE8uX19wcm90b19fPVJ9KEUsayksRX0oeik7SS5wcm90b3R5cGUubmFtZT16Lm5hbWUsSS5wcm90b3R5cGUuY29kZT1PLEZbT109SX1mdW5jdGlvbiB4KE8sUil7aWYoQXJyYXkuaXNBcnJheShPKSl7dmFyIHo9Ty5sZW5ndGg7cmV0dXJuIE89Ty5tYXAoZnVuY3Rpb24oSyl7cmV0''@;'; put 'put ''dXJuIFN0cmluZyhLKX0pLHo+Mj8ib25lIG9mICIuY29uY2F0KFIsIiAiKS5jb25jYXQoTy5zbGljZSgwLHotMSkuam9pbigiLCAiKSwiLCBvciAiKStPW3otMV06Mj09PXo/Im9uZSBvZiAiLmNvbmNhdChSLCIgIikuY29uY2F0KE9bMF0sIiBvciAiKS5jb25jYXQoT1sxXSk6Im9mICIuY29u''@;'; put 'put ''Y2F0KFIsIiAiKS5jb25jYXQoT1swXSl9cmV0dXJuIm9mICIuY29uY2F0KFIsIiAiKS5jb25jYXQoU3RyaW5nKE8pKX1hZSgiRVJSX0lOVkFMSURfT1BUX1ZBTFVFIixmdW5jdGlvbihPLFIpe3JldHVybidUaGUgdmFsdWUgIicrUisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrTysnIid9''@;'; put 'put ''LFR5cGVFcnJvciksYWUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihPLFIseil7dmFyIEssSTtpZigic3RyaW5nIj09dHlwZW9mIFImJmZ1bmN0aW9uIG0oTyxSLHope3JldHVybiBPLnN1YnN0cighenx8ejwwPzA6K3osUi5sZW5ndGgpPT09Un0oUiwibm90ICIpPyhLPSJtdXN0''@;'; put 'put ''IG5vdCBiZSIsUj1SLnJlcGxhY2UoL15ub3QgLywiIikpOks9Im11c3QgYmUiLGZ1bmN0aW9uIGxlKE8sUix6KXtyZXR1cm4odm9pZCAwPT09enx8ej5PLmxlbmd0aCkmJih6PU8ubGVuZ3RoKSxPLnN1YnN0cmluZyh6LVIubGVuZ3RoLHopPT09Un0oTywiIGFyZ3VtZW50IikpST0iVGhlICIu''@;'; put 'put ''Y29uY2F0KE8sIiAiKS5jb25jYXQoSywiICIpLmNvbmNhdCh4KFIsInR5cGUiKSk7ZWxzZXt2YXIgaz1mdW5jdGlvbiBNKE8sUix6KXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHomJih6PTApLCEoeitSLmxlbmd0aD5PLmxlbmd0aCkmJi0xIT09Ty5pbmRleE9mKFIseil9KE8sIi4iKT8icHJv''@;'; put 'put ''cGVydHkiOiJhcmd1bWVudCI7ST0nVGhlICInLmNvbmNhdChPLCciICcpLmNvbmNhdChrLCIgIikuY29uY2F0KEssIiAiKS5jb25jYXQoeChSLCJ0eXBlIikpfXJldHVybiBJKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIHopfSxUeXBlRXJyb3IpLGFlKCJFUlJfU1RSRUFNX1BV''@;'; put 'put ''U0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxhZSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKE8pe3JldHVybiJUaGUgIitPKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxhZSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQ''@;'; put 'put ''cmVtYXR1cmUgY2xvc2UiKSxhZSgiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKE8pe3JldHVybiJDYW5ub3QgY2FsbCAiK08rIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLGFlKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUg''@;'; put 'put ''dGltZXMiKSxhZSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxhZSgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxhZSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2''@;'; put 'put ''YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLGFlKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oTyl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrT30sVHlwZUVycm9yKSxhZSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkg''@;'; put 'put ''YWZ0ZXIgZW5kIGV2ZW50IiksYXQuZXhwb3J0cy5xPUZ9LDcwMjQ3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEkpe3ZhciBrPVtdO2Zvcih2YXIgRSBpbiBJKWsucHVzaChFKTtyZXR1cm4ga307YXQuZXhwb3J0cz1SO3ZhciB4PUYoODAz''@;'; put 'put ''MDkpLG09Rig1NjU2Myk7Rig2NjY5OCkoUix4KTtmb3IodmFyIGxlPWFlKG0ucHJvdG90eXBlKSxNPTA7TTxsZS5sZW5ndGg7TSsrKXt2YXIgTz1sZVtNXTtSLnByb3RvdHlwZVtPXXx8KFIucHJvdG90eXBlW09dPW0ucHJvdG90eXBlW09dKX1mdW5jdGlvbiBSKEkpe2lmKCEodGhpcyBpbnN0''@;'; put 'put ''YW5jZW9mIFIpKXJldHVybiBuZXcgUihJKTt4LmNhbGwodGhpcyxJKSxtLmNhbGwodGhpcyxJKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsSSYmKCExPT09SS5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09SS53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09SS5hbGxv''@;'; put 'put ''d0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIix6KSkpfWZ1bmN0aW9uIHooKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxwcm9jZXNzLm5leHRUaWNrKEssdGhpcyl9ZnVuY3Rpb24gSyhJKXtJLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShS''@;'; put 'put ''LnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVt''@;'; put 'put ''ZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKGspe3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1rLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPWspfX0pfSw5NTA5NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz14O3ZhciBhZT1GKDE2MzA3KTtmdW5jdGlvbiB4KG0pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHgpKXJldHVy''@;'; put 'put ''biBuZXcgeChtKTthZS5jYWxsKHRoaXMsbSl9Rig2NjY5OCkoeCxhZSkseC5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihtLGxlLE0pe00obnVsbCxtKX19LDgwMzA5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU7YXQuZXhwb3J0cz1HLEcuUmVhZGFibGVTdGF0ZT1jZSxG''@;'; put 'put ''KDgyMDE2KTt2YXIgSSxtPWZ1bmN0aW9uKEplLGx0KXtyZXR1cm4gSmUubGlzdGVuZXJzKGx0KS5sZW5ndGh9LGxlPUYoNzgyNDApLE09RigzOTAwNykuQnVmZmVyLE89KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3Nl''@;'; put 'put ''bGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxLPUYoOTQ2MTYpO0k9SyYmSy5kZWJ1Z2xvZz9LLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGVlLHRlLG9lLGs9RigyOTYwKSxFPUYoNjU2MDEpLFY9Rig3ODc4MikuZ2V0SGlnaFdhdGVyTWFyayxCPUYoOTcyMTgp''@;'; put 'put ''LnEsWT1CLkVSUl9JTlZBTElEX0FSR19UWVBFLFg9Qi5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLFU9Qi5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxxPUIuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtGKDY2Njk4KShHLGxlKTt2YXIgc2U9RS5lcnJvck9yRGVzdHJv''@;'; put 'put ''eSxoZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBjZShZZSxKZSxsdCl7YWU9YWV8fEYoNzAyNDcpLCJib29sZWFuIiE9dHlwZW9mIGx0JiYobHQ9SmUgaW5zdGFuY2VvZiBhZSksdGhpcy5vYmplY3RNb2RlPSEhKFllPVllfHx7fSkub2Jq''@;'; put 'put ''ZWN0TW9kZSxsdCYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhWWUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Vih0aGlzLFllLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLGx0KSx0aGlzLmJ1ZmZlcj1uZXcgayx0aGlzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''cGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFi''@;'; put 'put ''bGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1ZZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIVllLmF1dG9EZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPVllLmRl''@;'; put 'put ''ZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLFllLmVuY29kaW5nJiYoZWV8fChlZT1GKDcyMDI0KS5zKSx0aGlzLmRlY29kZXI9bmV3IGVlKFllLmVuY29kaW5nKSx0''@;'; put 'put ''aGlzLmVuY29kaW5nPVllLmVuY29kaW5nKX1mdW5jdGlvbiBHKFllKXtpZihhZT1hZXx8Rig3MDI0NyksISh0aGlzIGluc3RhbmNlb2YgRykpcmV0dXJuIG5ldyBHKFllKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBjZShZZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiBhZSksdGhpcy5yZWFkYWJs''@;'; put 'put ''ZT0hMCxZZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBZZS5yZWFkJiYodGhpcy5fcmVhZD1ZZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgWWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9WWUuZGVzdHJveSkpLGxlLmNhbGwodGhpcyl9ZnVuY3Rpb24gYihZZSxKZSxsdCxQZSxiZSl7SSgicmVh''@;'; put 'put ''ZGFibGVBZGRDaHVuayIsSmUpO3ZhciBUZSxBZT1ZZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09SmUpQWUucmVhZGluZz0hMSxmdW5jdGlvbiBTKFllLEplKXtpZihJKCJvbkVvZkNodW5rIiksIUplLmVuZGVkKXtpZihKZS5kZWNvZGVyKXt2YXIgbHQ9SmUuZGVjb2Rlci5lbmQoKTtsdCYm''@;'; put 'put ''bHQubGVuZ3RoJiYoSmUuYnVmZmVyLnB1c2gobHQpLEplLmxlbmd0aCs9SmUub2JqZWN0TW9kZT8xOmx0Lmxlbmd0aCl9SmUuZW5kZWQ9ITAsSmUuc3luYz92KFllKTooSmUubmVlZFJlYWRhYmxlPSExLEplLmVtaXR0ZWRSZWFkYWJsZXx8KEplLmVtaXR0ZWRSZWFkYWJsZT0hMCxwKFllKSkp''@;'; put 'put ''fX0oWWUsQWUpO2Vsc2UgaWYoYmV8fChUZT1mdW5jdGlvbiBIKFllLEplKXt2YXIgbHQ7cmV0dXJuIWZ1bmN0aW9uIHooWWUpe3JldHVybiBNLmlzQnVmZmVyKFllKXx8WWUgaW5zdGFuY2VvZiBPfShKZSkmJiJzdHJpbmciIT10eXBlb2YgSmUmJnZvaWQgMCE9PUplJiYhWWUub2JqZWN0TW9k''@;'; put 'put ''ZSYmKGx0PW5ldyBZKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sSmUpKSxsdH0oQWUsSmUpKSxUZSlzZShZZSxUZSk7ZWxzZSBpZihBZS5vYmplY3RNb2RlfHxKZSYmSmUubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBKZSYmIUFlLm9iamVjdE1vZGUmJk9i''@;'; put 'put ''amVjdC5nZXRQcm90b3R5cGVPZihKZSkhPT1NLnByb3RvdHlwZSYmKEplPWZ1bmN0aW9uIFIoWWUpe3JldHVybiBNLmZyb20oWWUpfShKZSkpLFBlKUFlLmVuZEVtaXR0ZWQ/c2UoWWUsbmV3IHEpOkQoWWUsQWUsSmUsITApO2Vsc2UgaWYoQWUuZW5kZWQpc2UoWWUsbmV3IFgpO2Vsc2V7aWYo''@;'; put 'put ''QWUuZGVzdHJveWVkKXJldHVybiExO0FlLnJlYWRpbmc9ITEsQWUuZGVjb2RlciYmIWx0PyhKZT1BZS5kZWNvZGVyLndyaXRlKEplKSxBZS5vYmplY3RNb2RlfHwwIT09SmUubGVuZ3RoP0QoWWUsQWUsSmUsITEpOncoWWUsQWUpKTpEKFllLEFlLEplLCExKX1lbHNlIFBlfHwoQWUucmVhZGlu''@;'; put 'put ''Zz0hMSx3KFllLEFlKSk7cmV0dXJuIUFlLmVuZGVkJiYoQWUubGVuZ3RoPEFlLmhpZ2hXYXRlck1hcmt8fDA9PT1BZS5sZW5ndGgpfWZ1bmN0aW9uIEQoWWUsSmUsbHQsUGUpe0plLmZsb3dpbmcmJjA9PT1KZS5sZW5ndGgmJiFKZS5zeW5jPyhKZS5hd2FpdERyYWluPTAsWWUuZW1pdCgiZGF0''@;'; put 'put ''YSIsbHQpKTooSmUubGVuZ3RoKz1KZS5vYmplY3RNb2RlPzE6bHQubGVuZ3RoLFBlP0plLmJ1ZmZlci51bnNoaWZ0KGx0KTpKZS5idWZmZXIucHVzaChsdCksSmUubmVlZFJlYWRhYmxlJiZ2KFllKSksdyhZZSxKZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEcucHJvdG90eXBlLCJkZXN0cm95''@;'; put 'put ''ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEplKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0''@;'; put 'put ''cm95ZWQ9SmUpfX0pLEcucHJvdG90eXBlLmRlc3Ryb3k9RS5kZXN0cm95LEcucHJvdG90eXBlLl91bmRlc3Ryb3k9RS51bmRlc3Ryb3ksRy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oWWUsSmUpe0plKFllKX0sRy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihZZSxKZSl7dmFyIFBlLGx0''@;'; put 'put ''PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGx0Lm9iamVjdE1vZGU/UGU9ITA6InN0cmluZyI9PXR5cGVvZiBZZSYmKChKZT1KZXx8bHQuZGVmYXVsdEVuY29kaW5nKSE9PWx0LmVuY29kaW5nJiYoWWU9TS5mcm9tKFllLEplKSxKZT0iIiksUGU9ITApLGIodGhpcyxZZSxKZSwhMSxQZSl9''@;'; put 'put ''LEcucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oWWUpe3JldHVybiBiKHRoaXMsWWUsbnVsbCwhMCwhMSl9LEcucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEcucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0''@;'; put 'put ''aW9uKFllKXtlZXx8KGVlPUYoNzIwMjQpLnMpO3ZhciBKZT1uZXcgZWUoWWUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1KZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIGx0PXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuYnVmZmVyLmhlYWQsUGU9IiI7bnVsbCE9PWx0OylQZSs9SmUud3JpdGUobHQuZGF0YSksbHQ9bHQubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PVBlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFBlKSx0aGlzLl9y''@;'; put 'put ''ZWFkYWJsZVN0YXRlLmxlbmd0aD1QZS5sZW5ndGgsdGhpc307dmFyIE49MTA3Mzc0MTgyNDtmdW5jdGlvbiBDKFllLEplKXtyZXR1cm4gWWU8PTB8fDA9PT1KZS5sZW5ndGgmJkplLmVuZGVkPzA6SmUub2JqZWN0TW9kZT8xOlllIT1ZZT9KZS5mbG93aW5nJiZKZS5sZW5ndGg/SmUuYnVmZmVy''@;'; put 'put ''LmhlYWQuZGF0YS5sZW5ndGg6SmUubGVuZ3RoOihZZT5KZS5oaWdoV2F0ZXJNYXJrJiYoSmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBnKFllKXtyZXR1cm4gWWU+PU4/WWU9TjooWWUtLSxZZXw9WWU+Pj4xLFllfD1ZZT4+PjIsWWV8PVllPj4+NCxZZXw9WWU+Pj44LFllfD1ZZT4+PjE2LFll''@;'; put 'put ''KyspLFllfShZZSkpLFllPD1KZS5sZW5ndGg/WWU6SmUuZW5kZWQ/SmUubGVuZ3RoOihKZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIHYoWWUpe3ZhciBKZT1ZZS5fcmVhZGFibGVTdGF0ZTtJKCJlbWl0UmVhZGFibGUiLEplLm5lZWRSZWFkYWJsZSxKZS5lbWl0dGVkUmVhZGFibGUp''@;'; put 'put ''LEplLm5lZWRSZWFkYWJsZT0hMSxKZS5lbWl0dGVkUmVhZGFibGV8fChJKCJlbWl0UmVhZGFibGUiLEplLmZsb3dpbmcpLEplLmVtaXR0ZWRSZWFkYWJsZT0hMCxwcm9jZXNzLm5leHRUaWNrKHAsWWUpKX1mdW5jdGlvbiBwKFllKXt2YXIgSmU9WWUuX3JlYWRhYmxlU3RhdGU7SSgiZW1pdFJl''@;'; put 'put ''YWRhYmxlXyIsSmUuZGVzdHJveWVkLEplLmxlbmd0aCxKZS5lbmRlZCksIUplLmRlc3Ryb3llZCYmKEplLmxlbmd0aHx8SmUuZW5kZWQpJiYoWWUuZW1pdCgicmVhZGFibGUiKSxKZS5lbWl0dGVkUmVhZGFibGU9ITEpLEplLm5lZWRSZWFkYWJsZT0hSmUuZmxvd2luZyYmIUplLmVuZGVkJiZK''@;'; put 'put ''ZS5sZW5ndGg8PUplLmhpZ2hXYXRlck1hcmssRmUoWWUpfWZ1bmN0aW9uIHcoWWUsSmUpe0plLnJlYWRpbmdNb3JlfHwoSmUucmVhZGluZ01vcmU9ITAscHJvY2Vzcy5uZXh0VGljayhKLFllLEplKSl9ZnVuY3Rpb24gSihZZSxKZSl7Zm9yKDshSmUucmVhZGluZyYmIUplLmVuZGVkJiYoSmUu''@;'; put 'put ''bGVuZ3RoPEplLmhpZ2hXYXRlck1hcmt8fEplLmZsb3dpbmcmJjA9PT1KZS5sZW5ndGgpOyl7dmFyIGx0PUplLmxlbmd0aDtpZihJKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLFllLnJlYWQoMCksbHQ9PT1KZS5sZW5ndGgpYnJlYWt9SmUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gZGUoWWUp''@;'; put 'put ''e3ZhciBKZT1ZZS5fcmVhZGFibGVTdGF0ZTtKZS5yZWFkYWJsZUxpc3RlbmluZz1ZZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsSmUucmVzdW1lU2NoZWR1bGVkJiYhSmUucGF1c2VkP0plLmZsb3dpbmc9ITA6WWUubGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJlllLnJlc3VtZSgpfWZ1''@;'; put 'put ''bmN0aW9uIGZlKFllKXtJKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxZZS5yZWFkKDApfWZ1bmN0aW9uIExlKFllLEplKXtJKCJyZXN1bWUiLEplLnJlYWRpbmcpLEplLnJlYWRpbmd8fFllLnJlYWQoMCksSmUucmVzdW1lU2NoZWR1bGVkPSExLFllLmVtaXQoInJlc3VtZSIpLEZlKFll''@;'; put 'put ''KSxKZS5mbG93aW5nJiYhSmUucmVhZGluZyYmWWUucmVhZCgwKX1mdW5jdGlvbiBGZShZZSl7dmFyIEplPVllLl9yZWFkYWJsZVN0YXRlO2ZvcihJKCJmbG93IixKZS5mbG93aW5nKTtKZS5mbG93aW5nJiZudWxsIT09WWUucmVhZCgpOyk7fWZ1bmN0aW9uIE9lKFllLEplKXtyZXR1cm4gMD09''@;'; put 'put ''PUplLmxlbmd0aD9udWxsOihKZS5vYmplY3RNb2RlP2x0PUplLmJ1ZmZlci5zaGlmdCgpOiFZZXx8WWU+PUplLmxlbmd0aD8obHQ9SmUuZGVjb2Rlcj9KZS5idWZmZXIuam9pbigiIik6MT09PUplLmJ1ZmZlci5sZW5ndGg/SmUuYnVmZmVyLmZpcnN0KCk6SmUuYnVmZmVyLmNvbmNhdChKZS5s''@;'; put 'put ''ZW5ndGgpLEplLmJ1ZmZlci5jbGVhcigpKTpsdD1KZS5idWZmZXIuY29uc3VtZShZZSxKZS5kZWNvZGVyKSxsdCk7dmFyIGx0fWZ1bmN0aW9uIGplKFllKXt2YXIgSmU9WWUuX3JlYWRhYmxlU3RhdGU7SSgiZW5kUmVhZGFibGUiLEplLmVuZEVtaXR0ZWQpLEplLmVuZEVtaXR0ZWR8fChKZS5l''@;'; put 'put ''bmRlZD0hMCxwcm9jZXNzLm5leHRUaWNrKFdlLEplLFllKSl9ZnVuY3Rpb24gV2UoWWUsSmUpe2lmKEkoImVuZFJlYWRhYmxlTlQiLFllLmVuZEVtaXR0ZWQsWWUubGVuZ3RoKSwhWWUuZW5kRW1pdHRlZCYmMD09PVllLmxlbmd0aCYmKFllLmVuZEVtaXR0ZWQ9ITAsSmUucmVhZGFibGU9ITEs''@;'; put 'put ''SmUuZW1pdCgiZW5kIiksWWUuYXV0b0Rlc3Ryb3kpKXt2YXIgbHQ9SmUuX3dyaXRhYmxlU3RhdGU7KCFsdHx8bHQuYXV0b0Rlc3Ryb3kmJmx0LmZpbmlzaGVkKSYmSmUuZGVzdHJveSgpfX1mdW5jdGlvbiBLZShZZSxKZSl7Zm9yKHZhciBsdD0wLFBlPVllLmxlbmd0aDtsdDxQZTtsdCsrKWlm''@;'; put 'put ''KFllW2x0XT09PUplKXJldHVybiBsdDtyZXR1cm4tMX1HLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKFllKXtJKCJyZWFkIixZZSksWWU9cGFyc2VJbnQoWWUsMTApO3ZhciBKZT10aGlzLl9yZWFkYWJsZVN0YXRlLGx0PVllO2lmKDAhPT1ZZSYmKEplLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09''@;'; put 'put ''PVllJiZKZS5uZWVkUmVhZGFibGUmJigoMCE9PUplLmhpZ2hXYXRlck1hcms/SmUubGVuZ3RoPj1KZS5oaWdoV2F0ZXJNYXJrOkplLmxlbmd0aD4wKXx8SmUuZW5kZWQpKXJldHVybiBJKCJyZWFkOiBlbWl0UmVhZGFibGUiLEplLmxlbmd0aCxKZS5lbmRlZCksMD09PUplLmxlbmd0aCYmSmUu''@;'; put 'put ''ZW5kZWQ/amUodGhpcyk6dih0aGlzKSxudWxsO2lmKDA9PT0oWWU9QyhZZSxKZSkpJiZKZS5lbmRlZClyZXR1cm4gMD09PUplLmxlbmd0aCYmamUodGhpcyksbnVsbDt2YXIgYmUsUGU9SmUubmVlZFJlYWRhYmxlO3JldHVybiBJKCJuZWVkIHJlYWRhYmxlIixQZSksKDA9PT1KZS5sZW5ndGh8''@;'; put 'put ''fEplLmxlbmd0aC1ZZTxKZS5oaWdoV2F0ZXJNYXJrKSYmSSgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLFBlPSEwKSxKZS5lbmRlZHx8SmUucmVhZGluZz9JKCJyZWFkaW5nIG9yIGVuZGVkIixQZT0hMSk6UGUmJihJKCJkbyByZWFkIiksSmUucmVhZGluZz0hMCxKZS5zeW5jPSEwLDA9''@;'; put 'put ''PT1KZS5sZW5ndGgmJihKZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoSmUuaGlnaFdhdGVyTWFyayksSmUuc3luYz0hMSxKZS5yZWFkaW5nfHwoWWU9QyhsdCxKZSkpKSxudWxsPT09KGJlPVllPjA/T2UoWWUsSmUpOm51bGwpPyhKZS5uZWVkUmVhZGFibGU9SmUubGVuZ3RoPD1KZS5o''@;'; put 'put ''aWdoV2F0ZXJNYXJrLFllPTApOihKZS5sZW5ndGgtPVllLEplLmF3YWl0RHJhaW49MCksMD09PUplLmxlbmd0aCYmKEplLmVuZGVkfHwoSmUubmVlZFJlYWRhYmxlPSEwKSxsdCE9PVllJiZKZS5lbmRlZCYmamUodGhpcykpLG51bGwhPT1iZSYmdGhpcy5lbWl0KCJkYXRhIixiZSksYmV9LEcu''@;'; put 'put ''cHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKFllKXtzZSh0aGlzLG5ldyBVKCJfcmVhZCgpIikpfSxHLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKFllLEplKXt2YXIgbHQ9dGhpcyxQZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChQZS5waXBlc0NvdW50KXtjYXNlIDA6UGUucGlwZXM9WWU7''@;'; put 'put ''YnJlYWs7Y2FzZSAxOlBlLnBpcGVzPVtQZS5waXBlcyxZZV07YnJlYWs7ZGVmYXVsdDpQZS5waXBlcy5wdXNoKFllKX1QZS5waXBlc0NvdW50Kz0xLEkoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsUGUucGlwZXNDb3VudCxKZSk7dmFyIEFlPUplJiYhMT09PUplLmVuZHx8WWU9PT1wcm9jZXNz''@;'; put 'put ''LnN0ZG91dHx8WWU9PT1wcm9jZXNzLnN0ZGVycj91dDpxZTtmdW5jdGlvbiBxZSgpe0koIm9uZW5kIiksWWUuZW5kKCl9UGUuZW5kRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKEFlKTpsdC5vbmNlKCJlbmQiLEFlKSxZZS5vbigidW5waXBlIixmdW5jdGlvbiBUZShNdCxIdCl7SSgib251bnBp''@;'; put 'put ''cGUiKSxNdD09PWx0JiZIdCYmITE9PT1IdC5oYXNVbnBpcGVkJiYoSHQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiBodCgpe0koImNsZWFudXAiKSxZZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHplKSxZZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixpdCksWWUucmVtb3ZlTGlzdGVuZXIoImRy''@;'; put 'put ''YWluIixYZSksWWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixEZSksWWUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsVGUpLGx0LnJlbW92ZUxpc3RlbmVyKCJlbmQiLHFlKSxsdC5yZW1vdmVMaXN0ZW5lcigiZW5kIix1dCksbHQucmVtb3ZlTGlzdGVuZXIoImRhdGEiLE1lKSxVZT0hMCxQZS5h''@;'; put 'put ''d2FpdERyYWluJiYoIVllLl93cml0YWJsZVN0YXRlfHxZZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZYZSgpfSgpKX0pO3ZhciBYZT1mdW5jdGlvbiBuZShZZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGx0PVllLl9yZWFkYWJsZVN0YXRlO0koInBpcGVPbkRyYWluIixsdC5hd2FpdERy''@;'; put 'put ''YWluKSxsdC5hd2FpdERyYWluJiZsdC5hd2FpdERyYWluLS0sMD09PWx0LmF3YWl0RHJhaW4mJm0oWWUsImRhdGEiKSYmKGx0LmZsb3dpbmc9ITAsRmUoWWUpKX19KGx0KTtZZS5vbigiZHJhaW4iLFhlKTt2YXIgVWU9ITE7ZnVuY3Rpb24gTWUoTXQpe0koIm9uZGF0YSIpO3ZhciBIdD1ZZS53''@;'; put 'put ''cml0ZShNdCk7SSgiZGVzdC53cml0ZSIsSHQpLCExPT09SHQmJigoMT09PVBlLnBpcGVzQ291bnQmJlBlLnBpcGVzPT09WWV8fFBlLnBpcGVzQ291bnQ+MSYmLTEhPT1LZShQZS5waXBlcyxZZSkpJiYhVWUmJihJKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLFBlLmF3YWl0RHJhaW4p''@;'; put 'put ''LFBlLmF3YWl0RHJhaW4rKyksbHQucGF1c2UoKSl9ZnVuY3Rpb24gRGUoTXQpe0koIm9uZXJyb3IiLE10KSx1dCgpLFllLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRGUpLDA9PT1tKFllLCJlcnJvciIpJiZzZShZZSxNdCl9ZnVuY3Rpb24gemUoKXtZZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNo''@;'; put 'put ''IixpdCksdXQoKX1mdW5jdGlvbiBpdCgpe0koIm9uZmluaXNoIiksWWUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix6ZSksdXQoKX1mdW5jdGlvbiB1dCgpe0koInVucGlwZSIpLGx0LnVucGlwZShZZSl9cmV0dXJuIGx0Lm9uKCJkYXRhIixNZSksZnVuY3Rpb24gdWUoWWUsSmUsbHQpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBZZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIFllLnByZXBlbmRMaXN0ZW5lcihKZSxsdCk7WWUuX2V2ZW50cyYmWWUuX2V2ZW50c1tKZV0/QXJyYXkuaXNBcnJheShZZS5fZXZlbnRzW0plXSk/WWUuX2V2ZW50c1tKZV0udW5zaGlmdChsdCk6WWUuX2V2ZW50c1tK''@;'; put 'put ''ZV09W2x0LFllLl9ldmVudHNbSmVdXTpZZS5vbihKZSxsdCl9KFllLCJlcnJvciIsRGUpLFllLm9uY2UoImNsb3NlIix6ZSksWWUub25jZSgiZmluaXNoIixpdCksWWUuZW1pdCgicGlwZSIsbHQpLFBlLmZsb3dpbmd8fChJKCJwaXBlIHJlc3VtZSIpLGx0LnJlc3VtZSgpKSxZZX0sRy5wcm90''@;'; put 'put ''b3R5cGUudW5waXBlPWZ1bmN0aW9uKFllKXt2YXIgSmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxsdD17aGFzVW5waXBlZDohMX07aWYoMD09PUplLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PUplLnBpcGVzQ291bnQpcmV0dXJuIFllJiZZZSE9PUplLnBpcGVzfHwoWWV8fChZZT1KZS5w''@;'; put 'put ''aXBlcyksSmUucGlwZXM9bnVsbCxKZS5waXBlc0NvdW50PTAsSmUuZmxvd2luZz0hMSxZZSYmWWUuZW1pdCgidW5waXBlIix0aGlzLGx0KSksdGhpcztpZighWWUpe3ZhciBQZT1KZS5waXBlcyxiZT1KZS5waXBlc0NvdW50O0plLnBpcGVzPW51bGwsSmUucGlwZXNDb3VudD0wLEplLmZsb3dp''@;'; put 'put ''bmc9ITE7Zm9yKHZhciBBZT0wO0FlPGJlO0FlKyspUGVbQWVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBUZT1LZShKZS5waXBlcyxZZSk7cmV0dXJuLTE9PT1UZXx8KEplLnBpcGVzLnNwbGljZShUZSwxKSxKZS5waXBlc0NvdW50LT0xLDE9''@;'; put 'put ''PT1KZS5waXBlc0NvdW50JiYoSmUucGlwZXM9SmUucGlwZXNbMF0pLFllLmVtaXQoInVucGlwZSIsdGhpcyxsdCkpLHRoaXN9LEcucHJvdG90eXBlLmFkZExpc3RlbmVyPUcucHJvdG90eXBlLm9uPWZ1bmN0aW9uKFllLEplKXt2YXIgbHQ9bGUucHJvdG90eXBlLm9uLmNhbGwodGhpcyxZZSxK''@;'; put 'put ''ZSksUGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1ZZT8oUGUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1QZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09WWUmJiFQZS5lbmRFbWl0dGVkJiYh''@;'; put 'put ''UGUucmVhZGFibGVMaXN0ZW5pbmcmJihQZS5yZWFkYWJsZUxpc3RlbmluZz1QZS5uZWVkUmVhZGFibGU9ITAsUGUuZmxvd2luZz0hMSxQZS5lbWl0dGVkUmVhZGFibGU9ITEsSSgib24gcmVhZGFibGUiLFBlLmxlbmd0aCxQZS5yZWFkaW5nKSxQZS5sZW5ndGg/dih0aGlzKTpQZS5yZWFkaW5n''@;'; put 'put ''fHxwcm9jZXNzLm5leHRUaWNrKGZlLHRoaXMpKSxsdH0sRy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oWWUsSmUpe3ZhciBsdD1sZS5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIuY2FsbCh0aGlzLFllLEplKTtyZXR1cm4icmVhZGFibGUiPT09WWUmJnByb2Nlc3MubmV4dFRp''@;'; put 'put ''Y2soZGUsdGhpcyksbHR9LEcucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihZZSl7dmFyIEplPWxlLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09WWV8fHZvaWQgMD09PVllKSYmcHJvY2Vz''@;'; put 'put ''cy5uZXh0VGljayhkZSx0aGlzKSxKZX0sRy5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIFllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFllLmZsb3dpbmd8fChJKCJyZXN1bWUiKSxZZS5mbG93aW5nPSFZZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiB4ZShZZSxKZSl7''@;'; put 'put ''SmUucmVzdW1lU2NoZWR1bGVkfHwoSmUucmVzdW1lU2NoZWR1bGVkPSEwLHByb2Nlc3MubmV4dFRpY2soTGUsWWUsSmUpKX0odGhpcyxZZSkpLFllLnBhdXNlZD0hMSx0aGlzfSxHLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBJKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihJKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LEcucHJv''@;'; put 'put ''dG90eXBlLndyYXA9ZnVuY3Rpb24oWWUpe3ZhciBKZT10aGlzLGx0PXRoaXMuX3JlYWRhYmxlU3RhdGUsUGU9ITE7Zm9yKHZhciBiZSBpbiBZZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEkoIndyYXBwZWQgZW5kIiksbHQuZGVjb2RlciYmIWx0LmVuZGVkKXt2YXIgVGU9bHQuZGVjb2Rlci5l''@;'; put 'put ''bmQoKTtUZSYmVGUubGVuZ3RoJiZKZS5wdXNoKFRlKX1KZS5wdXNoKG51bGwpfSksWWUub24oImRhdGEiLGZ1bmN0aW9uKFRlKXtJKCJ3cmFwcGVkIGRhdGEiKSxsdC5kZWNvZGVyJiYoVGU9bHQuZGVjb2Rlci53cml0ZShUZSkpLGx0Lm9iamVjdE1vZGUmJm51bGw9PVRlfHwhKGx0Lm9iamVj''@;'; put 'put ''dE1vZGV8fFRlJiZUZS5sZW5ndGgpfHxKZS5wdXNoKFRlKXx8KFBlPSEwLFllLnBhdXNlKCkpfSksWWUpdm9pZCAwPT09dGhpc1tiZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBZZVtiZV0mJih0aGlzW2JlXT1mdW5jdGlvbihxZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFllW3FlXS5hcHBs''@;'; put 'put ''eShZZSxhcmd1bWVudHMpfX0oYmUpKTtmb3IodmFyIEFlPTA7QWU8aGUubGVuZ3RoO0FlKyspWWUub24oaGVbQWVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsaGVbQWVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oVGUpe0koIndyYXBwZWQgX3JlYWQiLFRlKSxQZSYmKFBlPSExLFllLnJl''@;'; put 'put ''c3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEcucHJvdG90eXBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10ZSYmKHRlPUYoMTA0NTcpKSx0ZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLnByb3RvdHlw''@;'; put 'put ''ZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRy5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKEplKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPUplKX19KSxHLl9mcm9tTGlzdD1PZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRy5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3Ro''@;'; put 'put ''Iix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKEcuZnJvbT1mdW5jdGlvbihZZSxKZSl7cmV0dXJuIHZvaWQgMD09PW9lJiYob2U9RigzMzMzNSkpLG9lKEcsWWUsSmUp''@;'; put 'put ''fSl9LDE2MzA3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXo7dmFyIGFlPUYoOTcyMTgpLnEseD1hZS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxtPWFlLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxsZT1hZS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5H''@;'; put 'put ''LE09YWUuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLE89Rig3MDI0Nyk7ZnVuY3Rpb24gUihrLEUpe3ZhciBqPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2oudHJhbnNmb3JtaW5nPSExO3ZhciBWPWoud3JpdGVjYjtpZihudWxsPT09VilyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IG0p''@;'; put 'put ''O2oud3JpdGVjaHVuaz1udWxsLGoud3JpdGVjYj1udWxsLG51bGwhPUUmJnRoaXMucHVzaChFKSxWKGspO3ZhciBCPXRoaXMuX3JlYWRhYmxlU3RhdGU7Qi5yZWFkaW5nPSExLChCLm5lZWRSZWFkYWJsZXx8Qi5sZW5ndGg8Qi5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChCLmhpZ2hXYXRl''@;'; put 'put ''ck1hcmspfWZ1bmN0aW9uIHooayl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KGspO08uY2FsbCh0aGlzLGspLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpSLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVj''@;'; put 'put ''YjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxrJiYoImZ1bmN0aW9uIj09dHlwZW9mIGsudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPWsudHJh''@;'; put 'put ''bnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2Ygay5mbHVzaCYmKHRoaXMuX2ZsdXNoPWsuZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLEspfWZ1bmN0aW9uIEsoKXt2YXIgaz10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95''@;'; put 'put ''ZWQ/SSh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oRSxqKXtJKGssRSxqKX0pfWZ1bmN0aW9uIEkoayxFLGope2lmKEUpcmV0dXJuIGsuZW1pdCgiZXJyb3IiLEUpO2lmKG51bGwhPWomJmsucHVzaChqKSxrLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgTTtp''@;'; put 'put ''ZihrLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IGxlO3JldHVybiBrLnB1c2gobnVsbCl9Rig2NjY5OCkoeixPKSx6LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGssRSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsTy5wcm90b3R5''@;'; put 'put ''cGUucHVzaC5jYWxsKHRoaXMsayxFKX0sei5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihrLEUsail7aihuZXcgeCgiX3RyYW5zZm9ybSgpIikpfSx6LnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oayxFLGope3ZhciBWPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKFYud3JpdGVjYj1q''@;'; put 'put ''LFYud3JpdGVjaHVuaz1rLFYud3JpdGVlbmNvZGluZz1FLCFWLnRyYW5zZm9ybWluZyl7dmFyIEI9dGhpcy5fcmVhZGFibGVTdGF0ZTsoVi5uZWVkVHJhbnNmb3JtfHxCLm5lZWRSZWFkYWJsZXx8Qi5sZW5ndGg8Qi5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChCLmhpZ2hXYXRlck1hcmsp''@;'; put 'put ''fX0sei5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oayl7dmFyIEU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PUUud3JpdGVjaHVua3x8RS50cmFuc2Zvcm1pbmc/RS5uZWVkVHJhbnNmb3JtPSEwOihFLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oRS53cml0ZWNodW5rLEUu''@;'; put 'put ''d3JpdGVlbmNvZGluZyxFLmFmdGVyVHJhbnNmb3JtKSl9LHoucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKGssRSl7Ty5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLGssZnVuY3Rpb24oail7RShqKX0pfX0sNTY1NjM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHgo''@;'; put 'put ''RmUpe3ZhciBPZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBMZShGZSxPZSxqZSl7dmFyIFdlPUZlLmVudHJ5O2ZvcihGZS5lbnRyeT1udWxsO1dlOyl7dmFyIEtlPVdlLmNhbGxiYWNrO09lLnBlbmRpbmdjYi0t''@;'; put 'put ''LEtlKGplKSxXZT1XZS5uZXh0fU9lLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PUZlfShPZSxGZSl9fXZhciBtO2F0LmV4cG9ydHM9Y2UsY2UuV3JpdGFibGVTdGF0ZT1oZTt2YXIgdWUsbGU9e2RlcHJlY2F0ZTpGKDkwNDk2KX0sTT1GKDc4MjQwKSxPPUYoMzkwMDcpLkJ1ZmZlcixSPSh0eXBl''@;'; put 'put ''b2YgZ2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sST1GKDY1NjAxKSxFPUYoNzg3ODIpLmdldEhpZ2hXYXRlck1hcmssaj1GKDk3MjE4KS5xLFY9ai5FUlJfSU5WQUxJRF9B''@;'; put 'put ''UkdfVFlQRSxCPWouRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsWT1qLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxYPWouRVJSX1NUUkVBTV9DQU5OT1RfUElQRSxVPWouRVJSX1NUUkVBTV9ERVNUUk9ZRUQscT1qLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsZWU9ai5FUlJfU1RSRUFNX1dSSVRF''@;'; put 'put ''X0FGVEVSX0VORCx0ZT1qLkVSUl9VTktOT1dOX0VOQ09ESU5HLG9lPUkuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gc2UoKXt9ZnVuY3Rpb24gaGUoRmUsT2UsamUpe209bXx8Rig3MDI0NyksImJvb2xlYW4iIT10eXBlb2YgamUmJihqZT1PZSBpbnN0YW5jZW9mIG0pLHRoaXMub2JqZWN0TW9k''@;'; put 'put ''ZT0hIShGZT1GZXx8e30pLm9iamVjdE1vZGUsamUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUZlLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPUUodGhpcyxGZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixqZSksdGhpcy5maW5hbENhbGxlZD0h''@;'; put 'put ''MSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1GZS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1GZS5kZWZhdWx0RW5jb2Rp''@;'; put 'put ''bmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKEtlKXshZnVuY3Rpb24gUyhGZSxPZSl7dmFyIGplPUZlLl93cml0YWJsZVN0YXRlLFdl''@;'; put 'put ''PWplLnN5bmMsS2U9amUud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgS2UpdGhyb3cgbmV3IFk7aWYoZnVuY3Rpb24gQyhGZSl7RmUud3JpdGluZz0hMSxGZS53cml0ZWNiPW51bGwsRmUubGVuZ3RoLT1GZS53cml0ZWxlbixGZS53cml0ZWxlbj0wfShqZSksT2UpIWZ1bmN0aW9uIGco''@;'; put 'put ''RmUsT2UsamUsV2UsS2Upey0tT2UucGVuZGluZ2NiLGplPyhwcm9jZXNzLm5leHRUaWNrKEtlLFdlKSxwcm9jZXNzLm5leHRUaWNrKGZlLEZlLE9lKSxGZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsb2UoRmUsV2UpKTooS2UoV2UpLEZlLl93cml0YWJsZVN0YXRlLmVycm9yRW1p''@;'; put 'put ''dHRlZD0hMCxvZShGZSxXZSksZmUoRmUsT2UpKX0oRmUsamUsV2UsT2UsS2UpO2Vsc2V7dmFyIFllPUooamUpfHxGZS5kZXN0cm95ZWQ7IVllJiYhamUuY29ya2VkJiYhamUuYnVmZmVyUHJvY2Vzc2luZyYmamUuYnVmZmVyZWRSZXF1ZXN0JiZ3KEZlLGplKSxXZT9wcm9jZXNzLm5leHRUaWNr''@;'; put 'put ''KHYsRmUsamUsWWUsS2UpOnYoRmUsamUsWWUsS2UpfX0oT2UsS2UpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9''@;'; put 'put ''ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1GZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIUZlLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgeCh0aGlzKX1mdW5jdGlvbiBj''@;'; put 'put ''ZShGZSl7dmFyIE9lPXRoaXMgaW5zdGFuY2VvZihtPW18fEYoNzAyNDcpKTtpZighT2UmJiF1ZS5jYWxsKGNlLHRoaXMpKXJldHVybiBuZXcgY2UoRmUpO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IGhlKEZlLHRoaXMsT2UpLHRoaXMud3JpdGFibGU9ITAsRmUmJigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgRmUud3JpdGUmJih0aGlzLl93cml0ZT1GZS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIEZlLndyaXRldiYmKHRoaXMuX3dyaXRldj1GZS53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1GZS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgRmUuZmluYWwmJih0aGlzLl9maW5hbD1GZS5maW5hbCkpLE0uY2FsbCh0aGlzKX1mdW5jdGlvbiBOKEZlLE9lLGplLFdlLEtlLFllLEplKXtPZS53cml0ZWxlbj1XZSxPZS53cml0ZWNiPUplLE9lLndyaXRpbmc9ITAsT2Uuc3luYz0hMCxPZS5kZXN0cm95ZWQ/T2Uub253cml0ZShuZXcg''@;'; put 'put ''VSgid3JpdGUiKSk6amU/RmUuX3dyaXRldihLZSxPZS5vbndyaXRlKTpGZS5fd3JpdGUoS2UsWWUsT2Uub253cml0ZSksT2Uuc3luYz0hMX1mdW5jdGlvbiB2KEZlLE9lLGplLFdlKXtqZXx8ZnVuY3Rpb24gcChGZSxPZSl7MD09PU9lLmxlbmd0aCYmT2UubmVlZERyYWluJiYoT2UubmVlZERy''@;'; put 'put ''YWluPSExLEZlLmVtaXQoImRyYWluIikpfShGZSxPZSksT2UucGVuZGluZ2NiLS0sV2UoKSxmZShGZSxPZSl9ZnVuY3Rpb24gdyhGZSxPZSl7T2UuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgamU9T2UuYnVmZmVyZWRSZXF1ZXN0O2lmKEZlLl93cml0ZXYmJmplJiZqZS5uZXh0KXt2YXIgS2U9''@;'; put 'put ''bmV3IEFycmF5KE9lLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxZZT1PZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7WWUuZW50cnk9amU7Zm9yKHZhciBKZT0wLGx0PSEwO2plOylLZVtKZV09amUsamUuaXNCdWZ8fChsdD0hMSksamU9amUubmV4dCxKZSs9MTtLZS5hbGxCdWZmZXJzPWx0LE4oRmUsT2Us''@;'; put 'put ''ITAsT2UubGVuZ3RoLEtlLCIiLFllLmZpbmlzaCksT2UucGVuZGluZ2NiKyssT2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLFllLm5leHQ/KE9lLmNvcmtlZFJlcXVlc3RzRnJlZT1ZZS5uZXh0LFllLm5leHQ9bnVsbCk6T2UuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyB4KE9lKSxPZS5idWZm''@;'; put 'put ''ZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtqZTspe3ZhciBQZT1qZS5jaHVuaztpZihOKEZlLE9lLCExLE9lLm9iamVjdE1vZGU/MTpQZS5sZW5ndGgsUGUsamUuZW5jb2RpbmcsamUuY2FsbGJhY2spLGplPWplLm5leHQsT2UuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxPZS53cml0aW5n''@;'; put 'put ''KWJyZWFrfW51bGw9PT1qZSYmKE9lLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9T2UuYnVmZmVyZWRSZXF1ZXN0PWplLE9lLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gSihGZSl7cmV0dXJuIEZlLmVuZGluZyYmMD09PUZlLmxlbmd0aCYmbnVsbD09PUZlLmJ1ZmZlcmVkUmVxdWVz''@;'; put 'put ''dCYmIUZlLmZpbmlzaGVkJiYhRmUud3JpdGluZ31mdW5jdGlvbiBuZShGZSxPZSl7RmUuX2ZpbmFsKGZ1bmN0aW9uKGplKXtPZS5wZW5kaW5nY2ItLSxqZSYmb2UoRmUsamUpLE9lLnByZWZpbmlzaGVkPSEwLEZlLmVtaXQoInByZWZpbmlzaCIpLGZlKEZlLE9lKX0pfWZ1bmN0aW9uIGZlKEZl''@;'; put 'put ''LE9lKXt2YXIgamU9SihPZSk7aWYoamUmJihmdW5jdGlvbiBkZShGZSxPZSl7IU9lLnByZWZpbmlzaGVkJiYhT2UuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iIT10eXBlb2YgRmUuX2ZpbmFsfHxPZS5kZXN0cm95ZWQ/KE9lLnByZWZpbmlzaGVkPSEwLEZlLmVtaXQoInByZWZpbmlzaCIpKToo''@;'; put 'put ''T2UucGVuZGluZ2NiKyssT2UuZmluYWxDYWxsZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhuZSxGZSxPZSkpKX0oRmUsT2UpLDA9PT1PZS5wZW5kaW5nY2ImJihPZS5maW5pc2hlZD0hMCxGZS5lbWl0KCJmaW5pc2giKSxPZS5hdXRvRGVzdHJveSkpKXt2YXIgV2U9RmUuX3JlYWRhYmxlU3RhdGU7''@;'; put 'put ''KCFXZXx8V2UuYXV0b0Rlc3Ryb3kmJldlLmVuZEVtaXR0ZWQpJiZGZS5kZXN0cm95KCl9cmV0dXJuIGplfUYoNjY2OTgpKGNlLE0pLGhlLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIE9lPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGplPVtdO09lOylqZS5wdXNoKE9lKSxP''@;'; put 'put ''ZT1PZS5uZXh0O3JldHVybiBqZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGhlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OmxlLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJl''@;'; put 'put ''Y2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFz''@;'; put 'put ''SW5zdGFuY2VdPyh1ZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihPZSl7cmV0dXJuISF1ZS5jYWxsKHRoaXMsT2UpfHx0aGlzPT09Y2UmJk9lJiZPZS5fd3Jp''@;'; put 'put ''dGFibGVTdGF0ZSBpbnN0YW5jZW9mIGhlfX0pKTp1ZT1mdW5jdGlvbihPZSl7cmV0dXJuIE9lIGluc3RhbmNlb2YgdGhpc30sY2UucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtvZSh0aGlzLG5ldyBYKX0sY2UucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEZlLE9lLGplKXt2YXIgV2U9dGhp''@;'; put 'put ''cy5fd3JpdGFibGVTdGF0ZSxLZT0hMSxZZT0hV2Uub2JqZWN0TW9kZSYmZnVuY3Rpb24gSyhGZSl7cmV0dXJuIE8uaXNCdWZmZXIoRmUpfHxGZSBpbnN0YW5jZW9mIFJ9KEZlKTtyZXR1cm4gWWUmJiFPLmlzQnVmZmVyKEZlKSYmKEZlPWZ1bmN0aW9uIHooRmUpe3JldHVybiBPLmZyb20oRmUp''@;'; put 'put ''fShGZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBPZSYmKGplPU9lLE9lPW51bGwpLFllP09lPSJidWZmZXIiOk9lfHwoT2U9V2UuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgamUmJihqZT1zZSksV2UuZW5kaW5nP2Z1bmN0aW9uIEcoRmUsT2Upe3ZhciBqZT1uZXcgZWU7b2Uo''@;'; put 'put ''RmUsamUpLHByb2Nlc3MubmV4dFRpY2soT2UsamUpfSh0aGlzLGplKTooWWV8fGZ1bmN0aW9uIGIoRmUsT2UsamUsV2Upe3ZhciBLZTtyZXR1cm4gbnVsbD09PWplP0tlPW5ldyBxOiJzdHJpbmciIT10eXBlb2YgamUmJiFPZS5vYmplY3RNb2RlJiYoS2U9bmV3IFYoImNodW5rIixbInN0cmlu''@;'; put 'put ''ZyIsIkJ1ZmZlciJdLGplKSksIUtlfHwob2UoRmUsS2UpLHByb2Nlc3MubmV4dFRpY2soV2UsS2UpLCExKX0odGhpcyxXZSxGZSxqZSkpJiYoV2UucGVuZGluZ2NiKyssS2U9ZnVuY3Rpb24gSChGZSxPZSxqZSxXZSxLZSxZZSl7aWYoIWplKXt2YXIgSmU9ZnVuY3Rpb24gRChGZSxPZSxqZSl7''@;'; put 'put ''cmV0dXJuIUZlLm9iamVjdE1vZGUmJiExIT09RmUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBPZSYmKE9lPU8uZnJvbShPZSxqZSkpLE9lfShPZSxXZSxLZSk7V2UhPT1KZSYmKGplPSEwLEtlPSJidWZmZXIiLFdlPUplKX12YXIgbHQ9T2Uub2JqZWN0TW9kZT8xOldlLmxlbmd0''@;'; put 'put ''aDtPZS5sZW5ndGgrPWx0O3ZhciBQZT1PZS5sZW5ndGg8T2UuaGlnaFdhdGVyTWFyaztpZihQZXx8KE9lLm5lZWREcmFpbj0hMCksT2Uud3JpdGluZ3x8T2UuY29ya2VkKXt2YXIgYmU9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDtPZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpXZSxlbmNv''@;'; put 'put ''ZGluZzpLZSxpc0J1ZjpqZSxjYWxsYmFjazpZZSxuZXh0Om51bGx9LGJlP2JlLm5leHQ9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdDpPZS5idWZmZXJlZFJlcXVlc3Q9T2UubGFzdEJ1ZmZlcmVkUmVxdWVzdCxPZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIE4oRmUsT2UsITEsbHQsV2Us''@;'; put 'put ''S2UsWWUpO3JldHVybiBQZX0odGhpcyxXZSxZZSxGZSxPZSxqZSkpLEtlfSxjZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGNlLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgRmU9dGhpcy5fd3JpdGFibGVTdGF0ZTtGZS5j''@;'; put 'put ''b3JrZWQmJihGZS5jb3JrZWQtLSwhRmUud3JpdGluZyYmIUZlLmNvcmtlZCYmIUZlLmJ1ZmZlclByb2Nlc3NpbmcmJkZlLmJ1ZmZlcmVkUmVxdWVzdCYmdyh0aGlzLEZlKSl9LGNlLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24oT2Upe2lmKCJzdHJpbmciPT10eXBlb2Yg''@;'; put 'put ''T2UmJihPZT1PZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChPZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyB0''@;'; put 'put ''ZShPZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPU9lLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1h''@;'; put 'put ''cmt9fSksY2UucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihGZSxPZSxqZSl7amUobmV3IEIoIl93cml0ZSgpIikpfSxjZS5wcm90b3R5cGUuX3dyaXRldj1udWxsLGNlLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oRmUsT2UsamUpe3ZhciBXZT10aGlzLl93cml0YWJsZVN0YXRlO3JldHVybiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBGZT8oamU9RmUsRmU9bnVsbCxPZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgT2UmJihqZT1PZSxPZT1udWxsKSxudWxsIT1GZSYmdGhpcy53cml0ZShGZSxPZSksV2UuY29ya2VkJiYoV2UuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksV2UuZW5kaW5nfHxmdW5j''@;'; put 'put ''dGlvbiB4ZShGZSxPZSxqZSl7T2UuZW5kaW5nPSEwLGZlKEZlLE9lKSxqZSYmKE9lLmZpbmlzaGVkP3Byb2Nlc3MubmV4dFRpY2soamUpOkZlLm9uY2UoImZpbmlzaCIsamUpKSxPZS5lbmRlZD0hMCxGZS53cml0YWJsZT0hMX0odGhpcyxXZSxqZSksdGhpc30sT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KGNlLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoY2UucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdl''@;'; put 'put ''dDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKE9lKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9T2UpfX0pLGNlLnByb3Rv''@;'; put 'put ''dHlwZS5kZXN0cm95PUkuZGVzdHJveSxjZS5wcm90b3R5cGUuX3VuZGVzdHJveT1JLnVuZGVzdHJveSxjZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRmUsT2Upe09lKEZlKX19LDEwNDU3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU7ZnVuY3Rpb24geChlZSx0ZSxvZSl7''@;'; put 'put ''cmV0dXJuIHRlPWZ1bmN0aW9uIG0oZWUpe3ZhciB0ZT1mdW5jdGlvbiBsZShlZSx0ZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBlZXx8bnVsbD09PWVlKXJldHVybiBlZTt2YXIgb2U9ZWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1vZSl7dmFyIHNlPW9lLmNhbGwoZWUsdGV8fCJk''@;'; put 'put ''ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBzZSlyZXR1cm4gc2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT10ZT9TdHJpbmc6TnVtYmVyKShlZSl9KGVlLCJzdHJpbmciKTty''@;'; put 'put ''ZXR1cm4ic3ltYm9sIj09dHlwZW9mIHRlP3RlOlN0cmluZyh0ZSl9KHRlKSx0ZSBpbiBlZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsdGUse3ZhbHVlOm9lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZWVbdGVdPW9lLGVlfXZhciBNPUYoNTQ2MTgpLE89''@;'; put 'put ''U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLFI9U3ltYm9sKCJsYXN0UmVqZWN0Iiksej1TeW1ib2woImVycm9yIiksSz1TeW1ib2woImVuZGVkIiksST1TeW1ib2woImxhc3RQcm9taXNlIiksaz1TeW1ib2woImhhbmRsZVByb21pc2UiKSxFPVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gaihlZSx0''@;'; put 'put ''ZSl7cmV0dXJue3ZhbHVlOmVlLGRvbmU6dGV9fWZ1bmN0aW9uIFYoZWUpe3ZhciB0ZT1lZVtPXTtpZihudWxsIT09dGUpe3ZhciBvZT1lZVtFXS5yZWFkKCk7bnVsbCE9PW9lJiYoZWVbSV09bnVsbCxlZVtPXT1udWxsLGVlW1JdPW51bGwsdGUoaihvZSwhMSkpKX19ZnVuY3Rpb24gQihlZSl7''@;'; put 'put ''cHJvY2Vzcy5uZXh0VGljayhWLGVlKX12YXIgWD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxVPU9iamVjdC5zZXRQcm90b3R5cGVPZigoeChhZT17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW0VdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIHRlPXRoaXMsb2U9dGhpc1t6XTtp''@;'; put 'put ''ZihudWxsIT09b2UpcmV0dXJuIFByb21pc2UucmVqZWN0KG9lKTtpZih0aGlzW0tdKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih2b2lkIDAsITApKTtpZih0aGlzW0VdLmRlc3Ryb3llZClyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7cHJvY2Vzcy5uZXh0VGljayhmdW5jdGlv''@;'; put 'put ''bigpe3RlW3pdP0codGVbel0pOmNlKGoodm9pZCAwLCEwKSl9KX0pO3ZhciBoZSxzZT10aGlzW0ldO2lmKHNlKWhlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIFkoZWUsdGUpe3JldHVybiBmdW5jdGlvbihvZSxzZSl7ZWUudGhlbihmdW5jdGlvbigpe3RlW0tdP29lKGoodm9pZCAwLCEwKSk6dGVb''@;'; put 'put ''a10ob2Usc2UpfSxzZSl9fShzZSx0aGlzKSk7ZWxzZXt2YXIgdWU9dGhpc1tFXS5yZWFkKCk7aWYobnVsbCE9PXVlKXJldHVybiBQcm9taXNlLnJlc29sdmUoaih1ZSwhMSkpO2hlPW5ldyBQcm9taXNlKHRoaXNba10pfXJldHVybiB0aGlzW0ldPWhlLGhlfX0sU3ltYm9sLmFzeW5jSXRlcmF0''@;'; put 'put ''b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHgoYWUsInJldHVybiIsZnVuY3Rpb24oKXt2YXIgdGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ob2Usc2Upe3RlW0VdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihoZSl7aGU/c2UoaGUpOm9lKGoodm9pZCAwLCEwKSl9KX0pfSks''@;'; put 'put ''YWUpLFgpO2F0LmV4cG9ydHM9ZnVuY3Rpb24odGUpe3ZhciBvZSxzZT1PYmplY3QuY3JlYXRlKFUsKHgob2U9e30sRSx7dmFsdWU6dGUsd3JpdGFibGU6ITB9KSx4KG9lLE8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSx4KG9lLFIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSx4KG9lLHos''@;'; put 'put ''e3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSx4KG9lLEsse3ZhbHVlOnRlLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSx4KG9lLGsse3ZhbHVlOmZ1bmN0aW9uKHVlLGNlKXt2YXIgRz1zZVtFXS5yZWFkKCk7Rz8oc2VbSV09bnVsbCxzZVtPXT1udWxsLHNlW1JdPW51''@;'; put 'put ''bGwsdWUoaihHLCExKSkpOihzZVtPXT11ZSxzZVtSXT1jZSl9LHdyaXRhYmxlOiEwfSksb2UpKTtyZXR1cm4gc2VbSV09bnVsbCxNKHRlLGZ1bmN0aW9uKGhlKXtpZihoZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PWhlLmNvZGUpe3ZhciB1ZT1zZVtSXTtyZXR1cm4gbnVsbCE9''@;'; put 'put ''PXVlJiYoc2VbSV09bnVsbCxzZVtPXT1udWxsLHNlW1JdPW51bGwsdWUoaGUpKSx2b2lkKHNlW3pdPWhlKX12YXIgY2U9c2VbT107bnVsbCE9PWNlJiYoc2VbSV09bnVsbCxzZVtPXT1udWxsLHNlW1JdPW51bGwsY2Uoaih2b2lkIDAsITApKSksc2VbS109ITB9KSx0ZS5vbigicmVhZGFibGUi''@;'; put 'put ''LEIuYmluZChudWxsLHNlKSksc2V9fSwyOTYwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhZShCLFkpe3ZhciBYPU9iamVjdC5rZXlzKEIpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBVPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoQik7WSYm''@;'; put 'put ''KFU9VS5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQixxKS5lbnVtZXJhYmxlfSkpLFgucHVzaC5hcHBseShYLFUpfXJldHVybiBYfWZ1bmN0aW9uIHgoQil7Zm9yKHZhciBZPTE7WTxhcmd1bWVudHMubGVuZ3RoO1krKyl7dmFyIFg9''@;'; put 'put ''bnVsbCE9YXJndW1lbnRzW1ldP2FyZ3VtZW50c1tZXTp7fTtZJTI/YWUoT2JqZWN0KFgpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKFUpe20oQixVLFhbVV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQixPYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9ycyhYKSk6YWUoT2JqZWN0KFgpKS5mb3JFYWNoKGZ1bmN0aW9uKFUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShCLFUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihYLFUpKX0pfXJldHVybiBCfWZ1bmN0aW9uIG0oQixZLFgpe3JldHVybihZPVIoWSkpaW4g''@;'; put 'put ''Qj9PYmplY3QuZGVmaW5lUHJvcGVydHkoQixZLHt2YWx1ZTpYLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6QltZXT1YLEJ9ZnVuY3Rpb24gTShCLFkpe2Zvcih2YXIgWD0wO1g8WS5sZW5ndGg7WCsrKXt2YXIgVT1ZW1hdO1UuZW51bWVyYWJsZT1VLmVudW1l''@;'; put 'put ''cmFibGV8fCExLFUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBVJiYoVS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsUihVLmtleSksVSl9fWZ1bmN0aW9uIFIoQil7dmFyIFk9ZnVuY3Rpb24geihCLFkpe2lmKCJvYmplY3QiIT10eXBlb2YgQnx8bnVsbD09PUIpcmV0''@;'; put 'put ''dXJuIEI7dmFyIFg9QltTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PVgpe3ZhciBVPVguY2FsbChCLFl8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBVKXJldHVybiBVO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09WT9TdHJpbmc6TnVtYmVyKShCKX0oQiwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBZP1k6U3RyaW5nKFkpfXZhciBJPUYoMzkwMDcpLkJ1ZmZlcixFPUYoNTIzNjEpLmluc3BlY3Qsaj1FJiZFLmN1c3RvbXx8Imluc3BlY3Qi''@;'; put 'put ''O2Z1bmN0aW9uIFYoQixZLFgpe0kucHJvdG90eXBlLmNvcHkuY2FsbChCLFksWCl9YXQuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoKXsoZnVuY3Rpb24gbGUoQixZKXtpZighKEIgaW5zdGFuY2VvZiBZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFz''@;'; put 'put ''IGEgZnVuY3Rpb24iKX0pKHRoaXMsQiksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gTyhCLFksWCl7WSYmTShCLnByb3RvdHlwZSxZKSxYJiZNKEIsWCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIsInByb3RvdHlwZSIse3dyaXRh''@;'; put 'put ''YmxlOiExfSl9KEIsW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKFgpe3ZhciBVPXtkYXRhOlgsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PVU6dGhpcy5oZWFkPVUsdGhpcy50YWlsPVUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0''@;'; put 'put ''aW9uKFgpe3ZhciBVPXtkYXRhOlgsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1VKSx0aGlzLmhlYWQ9VSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgWD10aGlzLmhlYWQuZGF0''@;'; put 'put ''YTtyZXR1cm4gdGhpcy5oZWFkPTE9PT10aGlzLmxlbmd0aD90aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQubmV4dCwtLXRoaXMubGVuZ3RoLFh9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2lu''@;'; put 'put ''Iix2YWx1ZTpmdW5jdGlvbihYKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBVPXRoaXMuaGVhZCxxPSIiK1UuZGF0YTtVPVUubmV4dDspcSs9WCtVLmRhdGE7cmV0dXJuIHF9fSx7a2V5OiJjb25jYXQiLHZhbHVlOmZ1bmN0aW9uKFgpe2lmKDA9PT10aGlzLmxlbmd0aCly''@;'; put 'put ''ZXR1cm4gSS5hbGxvYygwKTtmb3IodmFyIFU9SS5hbGxvY1Vuc2FmZShYPj4+MCkscT10aGlzLmhlYWQsZWU9MDtxOylWKHEuZGF0YSxVLGVlKSxlZSs9cS5kYXRhLmxlbmd0aCxxPXEubmV4dDtyZXR1cm4gVX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKFgsVSl7dmFyIHE7cmV0''@;'; put 'put ''dXJuIFg8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhxPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsWCksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoWCkpOnE9WD09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6VT90aGlzLl9nZXRTdHJpbmcoWCk6dGhpcy5f''@;'; put 'put ''Z2V0QnVmZmVyKFgpLHF9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihYKXt2YXIgVT10aGlzLmhlYWQscT0xLGVlPVUuZGF0YTtmb3IoWC09ZWUubGVuZ3RoO1U9VS5uZXh0Oyl7''@;'; put 'put ''dmFyIHRlPVUuZGF0YSxvZT1YPnRlLmxlbmd0aD90ZS5sZW5ndGg6WDtpZihlZSs9b2U9PT10ZS5sZW5ndGg/dGU6dGUuc2xpY2UoMCxYKSwwPT0oWC09b2UpKXtvZT09PXRlLmxlbmd0aD8oKytxLHRoaXMuaGVhZD1VLm5leHQ/VS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPVUs''@;'; put 'put ''VS5kYXRhPXRlLnNsaWNlKG9lKSk7YnJlYWt9KytxfXJldHVybiB0aGlzLmxlbmd0aC09cSxlZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKFgpe3ZhciBVPUkuYWxsb2NVbnNhZmUoWCkscT10aGlzLmhlYWQsZWU9MTtmb3IocS5kYXRhLmNvcHkoVSksWC09cS5kYXRhLmxl''@;'; put 'put ''bmd0aDtxPXEubmV4dDspe3ZhciB0ZT1xLmRhdGEsb2U9WD50ZS5sZW5ndGg/dGUubGVuZ3RoOlg7aWYodGUuY29weShVLFUubGVuZ3RoLVgsMCxvZSksMD09KFgtPW9lKSl7b2U9PT10ZS5sZW5ndGg/KCsrZWUsdGhpcy5oZWFkPXEubmV4dD9xLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlz''@;'; put 'put ''LmhlYWQ9cSxxLmRhdGE9dGUuc2xpY2Uob2UpKTticmVha30rK2VlfXJldHVybiB0aGlzLmxlbmd0aC09ZWUsVX19LHtrZXk6aix2YWx1ZTpmdW5jdGlvbihYLFUpe3JldHVybiBFKHRoaXMseCh4KHt9LFUpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLEJ9KCl9LDY1NjAx''@;'; put 'put ''OmF0PT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEYoTSxPKXttKE0sTyksYWUoTSl9ZnVuY3Rpb24gYWUoTSl7TS5fd3JpdGFibGVTdGF0ZSYmIU0uX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxNLl9yZWFkYWJsZVN0YXRlJiYhTS5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE0uZW1pdCgi''@;'; put 'put ''Y2xvc2UiKX1mdW5jdGlvbiBtKE0sTyl7TS5lbWl0KCJlcnJvciIsTyl9YXQuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiBJZShNLE8pe3ZhciBSPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0''@;'; put 'put ''YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD8oTz9PKE0pOk0mJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhtLHRoaXMsTSkp''@;'; put 'put ''OnByb2Nlc3MubmV4dFRpY2sobSx0aGlzLE0pKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koTXx8''@;'; put 'put ''bnVsbCxmdW5jdGlvbihJKXshTyYmST9SLl93cml0YWJsZVN0YXRlP1IuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP3Byb2Nlc3MubmV4dFRpY2soYWUsUik6KFIuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soRixSLEkpKTpwcm9jZXNzLm5leHRU''@;'; put 'put ''aWNrKEYsUixJKTpPPyhwcm9jZXNzLm5leHRUaWNrKGFlLFIpLE8oSSkpOnByb2Nlc3MubmV4dFRpY2soYWUsUil9KSx0aGlzKX0sdW5kZXN0cm95OmZ1bmN0aW9uIHgoKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0h''@;'; put 'put ''MSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRl''@;'; put 'put ''ZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uIGxlKE0sTyl7dmFyIFI9TS5fcmVhZGFibGVTdGF0ZSx6PU0uX3dyaXRhYmxlU3RhdGU7UiYmUi5hdXRvRGVzdHJveXx8eiYmei5hdXRvRGVzdHJveT9NLmRlc3Ryb3koTyk6TS5lbWl0KCJlcnJvciIsTyl9fX0sNTQ2MTg6KGF0LEllLEYp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk3MjE4KS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFO2Z1bmN0aW9uIG0oKXt9YXQuZXhwb3J0cz1mdW5jdGlvbiBNKE8sUix6KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgUilyZXR1cm4gTShPLG51bGwsUik7Unx8KFI9e30pLHo9ZnVuY3Rp''@;'; put 'put ''b24geChPKXt2YXIgUj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighUil7Uj0hMDtmb3IodmFyIHo9YXJndW1lbnRzLmxlbmd0aCxLPW5ldyBBcnJheSh6KSxJPTA7STx6O0krKylLW0ldPWFyZ3VtZW50c1tJXTtPLmFwcGx5KHRoaXMsSyl9fX0oenx8bSk7dmFyIEs9Ui5yZWFkYWJsZXx8ITEh''@;'; put 'put ''PT1SLnJlYWRhYmxlJiZPLnJlYWRhYmxlLEk9Ui53cml0YWJsZXx8ITEhPT1SLndyaXRhYmxlJiZPLndyaXRhYmxlLGs9ZnVuY3Rpb24oKXtPLndyaXRhYmxlfHxqKCl9LEU9Ty5fd3JpdGFibGVTdGF0ZSYmTy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxqPWZ1bmN0aW9uKCl7ST0hMSxFPSEw''@;'; put 'put ''LEt8fHouY2FsbChPKX0sVj1PLl9yZWFkYWJsZVN0YXRlJiZPLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsQj1mdW5jdGlvbigpe0s9ITEsVj0hMCxJfHx6LmNhbGwoTyl9LFk9ZnVuY3Rpb24oZWUpe3ouY2FsbChPLGVlKX0sWD1mdW5jdGlvbigpe3ZhciBlZTtyZXR1cm4gSyYmIVY/KCgh''@;'; put 'put ''Ty5fcmVhZGFibGVTdGF0ZXx8IU8uX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoZWU9bmV3IGFlKSx6LmNhbGwoTyxlZSkpOkkmJiFFPygoIU8uX3dyaXRhYmxlU3RhdGV8fCFPLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGVlPW5ldyBhZSksei5jYWxsKE8sZWUpKTp2b2lkIDB9LFU9ZnVuY3Rp''@;'; put 'put ''b24oKXtPLnJlcS5vbigiZmluaXNoIixqKX07cmV0dXJuIGZ1bmN0aW9uIGxlKE8pe3JldHVybiBPLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIE8uYWJvcnR9KE8pPyhPLm9uKCJjb21wbGV0ZSIsaiksTy5vbigiYWJvcnQiLFgpLE8ucmVxP1UoKTpPLm9uKCJyZXF1ZXN0IixVKSk6''@;'; put 'put ''SSYmIU8uX3dyaXRhYmxlU3RhdGUmJihPLm9uKCJlbmQiLGspLE8ub24oImNsb3NlIixrKSksTy5vbigiZW5kIixCKSxPLm9uKCJmaW5pc2giLGopLCExIT09Ui5lcnJvciYmTy5vbigiZXJyb3IiLFkpLE8ub24oImNsb3NlIixYKSxmdW5jdGlvbigpe08ucmVtb3ZlTGlzdGVuZXIoImNvbXBs''@;'; put 'put ''ZXRlIixqKSxPLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsWCksTy5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsVSksTy5yZXEmJk8ucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLGopLE8ucmVtb3ZlTGlzdGVuZXIoImVuZCIsayksTy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGspLE8ucmVt''@;'; put 'put ''b3ZlTGlzdGVuZXIoImZpbmlzaCIsaiksTy5yZW1vdmVMaXN0ZW5lcigiZW5kIixCKSxPLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWSksTy5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFgpfX19LDMzMzM1OmF0PT57YXQuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFi''@;'; put 'put ''bGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw4NDUxNDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlLG09Rig5NzIxOCkucSxsZT1tLkVSUl9NSVNTSU5HX0FSR1MsTT1tLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIE8oail7aWYoail0aHJv''@;'; put 'put ''dyBqfWZ1bmN0aW9uIEsoail7aigpfWZ1bmN0aW9uIEkoaixWKXtyZXR1cm4gai5waXBlKFYpfWF0LmV4cG9ydHM9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgaj1hcmd1bWVudHMubGVuZ3RoLFY9bmV3IEFycmF5KGopLEI9MDtCPGo7QisrKVZbQl09YXJndW1lbnRzW0JdO3ZhciBZPWZ1bmN0aW9u''@;'; put 'put ''IGsoail7cmV0dXJuIGoubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgaltqLmxlbmd0aC0xXT9qLnBvcCgpOk99KFYpO2lmKEFycmF5LmlzQXJyYXkoVlswXSkmJihWPVZbMF0pLFYubGVuZ3RoPDIpdGhyb3cgbmV3IGxlKCJzdHJlYW1zIik7dmFyIFgsVT1WLm1hcChmdW5jdGlvbihxLGVl''@;'; put 'put ''KXt2YXIgdGU9ZWU8Vi5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24geihqLFYsQixZKXtZPWZ1bmN0aW9uIHgoail7dmFyIFY9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7Vnx8KFY9ITAsai5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShZKTt2YXIgWD0hMTtqLm9uKCJjbG9zZSIsZnVuY3Rpb24o''@;'; put 'put ''KXtYPSEwfSksdm9pZCAwPT09YWUmJihhZT1GKDU0NjE4KSksYWUoaix7cmVhZGFibGU6Vix3cml0YWJsZTpCfSxmdW5jdGlvbihxKXtpZihxKXJldHVybiBZKHEpO1g9ITAsWSgpfSk7dmFyIFU9ITE7cmV0dXJuIGZ1bmN0aW9uKHEpe2lmKCFYJiYhVSl7aWYoVT0hMCxmdW5jdGlvbiBSKGop''@;'; put 'put ''e3JldHVybiBqLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIGouYWJvcnR9KGopKXJldHVybiBqLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGouZGVzdHJveSlyZXR1cm4gai5kZXN0cm95KCk7WShxfHxuZXcgTSgicGlwZSIpKX19fShxLHRlLGVlPjAsZnVuY3Rpb24oc2Up''@;'; put 'put ''e1h8fChYPXNlKSxzZSYmVS5mb3JFYWNoKEspLCF0ZSYmKFUuZm9yRWFjaChLKSxZKFgpKX0pfSk7cmV0dXJuIFYucmVkdWNlKEkpfX0sNzg3ODI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk3MjE4KS5xLkVSUl9JTlZBTElEX09QVF9WQUxVRTthdC5leHBvcnRzPXtnZXRI''@;'; put 'put ''aWdoV2F0ZXJNYXJrOmZ1bmN0aW9uIG0obGUsTSxPLFIpe3ZhciB6PWZ1bmN0aW9uIHgobGUsTSxPKXtyZXR1cm4gbnVsbCE9bGUuaGlnaFdhdGVyTWFyaz9sZS5oaWdoV2F0ZXJNYXJrOk0/bGVbT106bnVsbH0oTSxSLE8pO2lmKG51bGwhPXope2lmKCFpc0Zpbml0ZSh6KXx8TWF0aC5mbG9v''@;'; put 'put ''cih6KSE9PXp8fHo8MCl0aHJvdyBuZXcgYWUoUj9POiJoaWdoV2F0ZXJNYXJrIix6KTtyZXR1cm4gTWF0aC5mbG9vcih6KX1yZXR1cm4gbGUub2JqZWN0TW9kZT8xNjoxNjM4NH19fSw3ODI0MDooYXQsSWUsRik9PnthdC5leHBvcnRzPUYoODIwMTYpLkV2ZW50RW1pdHRlcn0sOTY3NDU6KGF0''@;'; put 'put ''LEllLEYpPT57KEllPWF0LmV4cG9ydHM9Rig4MDMwOSkpLlN0cmVhbT1JZSxJZS5SZWFkYWJsZT1JZSxJZS5Xcml0YWJsZT1GKDU2NTYzKSxJZS5EdXBsZXg9Rig3MDI0NyksSWUuVHJhbnNmb3JtPUYoMTYzMDcpLEllLlBhc3NUaHJvdWdoPUYoOTUwOTYpLEllLmZpbmlzaGVkPUYoNTQ2MTgp''@;'; put 'put ''LEllLnBpcGVsaW5lPUYoODQ1MTQpfSwzOTcwNjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzkwMDcpLkJ1ZmZlcix4PUYoNjY2OTgpLG09Rig2MDM4MCksbGU9bmV3IEFycmF5KDE2KSxNPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywx''@;'; put 'put ''LDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLE89WzUsMTQsNywwLDksMiwxMSw0''@;'; put 'put ''LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCww''@;'; put 'put ''LDMsOSwxMV0sUj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgs''@;'; put 'put ''Niw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sej1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywx''@;'; put 'put ''Myw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sSz1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxJPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgz''@;'; put 'put ''NjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIGsoKXttLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIEUoVSxxKXtyZXR1''@;'; put 'put ''cm4gVTw8cXxVPj4+MzItcX1mdW5jdGlvbiBqKFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIEUoVSsocV5lZV50ZSkrc2UraGV8MCx1ZSkrb2V8MH1mdW5jdGlvbiBWKFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIEUoVSsocSZlZXx+cSZ0ZSkrc2UraGV8MCx1ZSkrb2V8MH1m''@;'; put 'put ''dW5jdGlvbiBCKFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIEUoVSsoKHF8fmVlKV50ZSkrc2UraGV8MCx1ZSkrb2V8MH1mdW5jdGlvbiBZKFUscSxlZSx0ZSxvZSxzZSxoZSx1ZSl7cmV0dXJuIEUoVSsocSZ0ZXxlZSZ+dGUpK3NlK2hlfDAsdWUpK29lfDB9ZnVuY3Rpb24gWChVLHEs''@;'; put 'put ''ZWUsdGUsb2Usc2UsaGUsdWUpe3JldHVybiBFKFUrKHFeKGVlfH50ZSkpK3NlK2hlfDAsdWUpK29lfDB9eChrLG0pLGsucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIFU9bGUscT0wO3E8MTY7KytxKVVbcV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUoNCpxKTtmb3IodmFy''@;'; put 'put ''IGVlPTB8dGhpcy5fYSx0ZT0wfHRoaXMuX2Isb2U9MHx0aGlzLl9jLHNlPTB8dGhpcy5fZCxoZT0wfHRoaXMuX2UsdWU9MHx0aGlzLl9hLGNlPTB8dGhpcy5fYixHPTB8dGhpcy5fYyxiPTB8dGhpcy5fZCxEPTB8dGhpcy5fZSxIPTA7SDw4MDtIKz0xKXt2YXIgTixnO0g8MTY/KE49aihlZSx0''@;'; put 'put ''ZSxvZSxzZSxoZSxVW01bSF1dLEtbMF0sUltIXSksZz1YKHVlLGNlLEcsYixELFVbT1tIXV0sSVswXSx6W0hdKSk6SDwzMj8oTj1WKGVlLHRlLG9lLHNlLGhlLFVbTVtIXV0sS1sxXSxSW0hdKSxnPVkodWUsY2UsRyxiLEQsVVtPW0hdXSxJWzFdLHpbSF0pKTpIPDQ4PyhOPUIoZWUsdGUsb2Us''@;'; put 'put ''c2UsaGUsVVtNW0hdXSxLWzJdLFJbSF0pLGc9Qih1ZSxjZSxHLGIsRCxVW09bSF1dLElbMl0seltIXSkpOkg8NjQ/KE49WShlZSx0ZSxvZSxzZSxoZSxVW01bSF1dLEtbM10sUltIXSksZz1WKHVlLGNlLEcsYixELFVbT1tIXV0sSVszXSx6W0hdKSk6KE49WChlZSx0ZSxvZSxzZSxoZSxVW01b''@;'; put 'put ''SF1dLEtbNF0sUltIXSksZz1qKHVlLGNlLEcsYixELFVbT1tIXV0sSVs0XSx6W0hdKSksZWU9aGUsaGU9c2Usc2U9RShvZSwxMCksb2U9dGUsdGU9Tix1ZT1ELEQ9YixiPUUoRywxMCksRz1jZSxjZT1nfXZhciBDPXRoaXMuX2Irb2UrYnwwO3RoaXMuX2I9dGhpcy5fYytzZStEfDAsdGhpcy5f''@;'; put 'put ''Yz10aGlzLl9kK2hlK3VlfDAsdGhpcy5fZD10aGlzLl9lK2VlK2NlfDAsdGhpcy5fZT10aGlzLl9hK3RlK0d8MCx0aGlzLl9hPUN9LGsucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aGlzLl9ibG9ja1t0aGlzLl9ibG9ja09mZnNldCsrXT0xMjgsdGhpcy5fYmxvY2tPZmZzZXQ+NTYm''@;'; put 'put ''Jih0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNjQpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTApLHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMF0sNTYp''@;'; put 'put ''LHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzFdLDYwKSx0aGlzLl91cGRhdGUoKTt2YXIgVT1hZS5hbGxvYz9hZS5hbGxvYygyMCk6bmV3IGFlKDIwKTtyZXR1cm4gVS53cml0ZUludDMyTEUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJMRSh0aGlzLl9iLDQpLFUud3Jp''@;'; put 'put ''dGVJbnQzMkxFKHRoaXMuX2MsOCksVS53cml0ZUludDMyTEUodGhpcy5fZCwxMiksVS53cml0ZUludDMyTEUodGhpcy5fZSwxNiksVX0sYXQuZXhwb3J0cz1rfSw4NDM6KGF0LEllLEYpPT57dmFyIGFlPUYoMzkwMDcpLHg9YWUuQnVmZmVyO2Z1bmN0aW9uIG0oTSxPKXtmb3IodmFyIFIgaW4g''@;'; put 'put ''TSlPW1JdPU1bUl19ZnVuY3Rpb24gbGUoTSxPLFIpe3JldHVybiB4KE0sTyxSKX14LmZyb20mJnguYWxsb2MmJnguYWxsb2NVbnNhZmUmJnguYWxsb2NVbnNhZmVTbG93P2F0LmV4cG9ydHM9YWU6KG0oYWUsSWUpLEllLkJ1ZmZlcj1sZSksbGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeC5w''@;'; put 'put ''cm90b3R5cGUpLG0oeCxsZSksbGUuZnJvbT1mdW5jdGlvbihNLE8sUil7aWYoIm51bWJlciI9PXR5cGVvZiBNKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHgoTSxPLFIpfSxsZS5hbGxvYz1mdW5jdGlvbihNLE8sUil7aWYoIm51''@;'; put 'put ''bWJlciIhPXR5cGVvZiBNKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgej14KE0pO3JldHVybiB2b2lkIDAhPT1PPyJzdHJpbmciPT10eXBlb2YgUj96LmZpbGwoTyxSKTp6LmZpbGwoTyk6ei5maWxsKDApLHp9LGxlLmFsbG9jVW5zYWZlPWZ1''@;'; put 'put ''bmN0aW9uKE0pe2lmKCJudW1iZXIiIT10eXBlb2YgTSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHgoTSl9LGxlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihNKXtpZigibnVtYmVyIiE9dHlwZW9mIE0pdGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBhZS5TbG93QnVmZmVyKE0pfX0sMjQxNzk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBsZSxhZT1GKDM5MDA3KSx4PWFlLkJ1ZmZlcixtPXt9O2ZvcihsZSBpbiBhZSlhZS5oYXNPd25Qcm9wZXJ0eShsZSkmJigiU2xv''@;'; put 'put ''d0J1ZmZlciI9PT1sZXx8IkJ1ZmZlciI9PT1sZXx8KG1bbGVdPWFlW2xlXSkpO3ZhciBNPW0uQnVmZmVyPXt9O2ZvcihsZSBpbiB4KXguaGFzT3duUHJvcGVydHkobGUpJiYoImFsbG9jVW5zYWZlIj09PWxlfHwiYWxsb2NVbnNhZmVTbG93Ij09PWxlfHwoTVtsZV09eFtsZV0pKTtpZihtLkJ1''@;'; put 'put ''ZmZlci5wcm90b3R5cGU9eC5wcm90b3R5cGUsKCFNLmZyb218fE0uZnJvbT09PVVpbnQ4QXJyYXkuZnJvbSkmJihNLmZyb209ZnVuY3Rpb24oTyxSLHope2lmKCJudW1iZXIiPT10eXBlb2YgTyl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBv''@;'; put 'put ''ZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBPKTtpZihPJiZ0eXBlb2YgTy5sZW5ndGg+InUiKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9y''@;'; put 'put ''IEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICIrdHlwZW9mIE8pO3JldHVybiB4KE8sUix6KX0pLE0uYWxsb2N8fChNLmFsbG9jPWZ1bmN0aW9uKE8sUix6KXtpZigibnVtYmVyIiE9dHlwZW9mIE8pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzaXplIiBhcmd1bWVudCBtdXN0''@;'; put 'put ''IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIE8pO2lmKE88MHx8Tz49MiooMTw8MzApKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrTysnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIEs9eChPKTtyZXR1cm4gUiYmMCE9PVIu''@;'; put 'put ''bGVuZ3RoPyJzdHJpbmciPT10eXBlb2Ygej9LLmZpbGwoUix6KTpLLmZpbGwoUik6Sy5maWxsKDApLEt9KSwhbS5rU3RyaW5nTWF4TGVuZ3RoKXRyeXttLmtTdHJpbmdNYXhMZW5ndGg9cHJvY2Vzcy5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5nTWF4TGVuZ3RofWNhdGNoe31tLmNvbnN0YW50''@;'; put 'put ''c3x8KG0uY29uc3RhbnRzPXtNQVhfTEVOR1RIOm0ua01heExlbmd0aH0sbS5rU3RyaW5nTWF4TGVuZ3RoJiYobS5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9bS5rU3RyaW5nTWF4TGVuZ3RoKSksYXQuZXhwb3J0cz1tfSw4ODcwMDooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciBhZTsh''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgeD1JZXx8e307dm9pZCAwIT09KGFlPWZ1bmN0aW9uKCl7cmV0dXJuIHh9LmFwcGx5KEllLFtdKSkmJihhdC5leHBvcnRzPWFlKSx4LmRlZmF1bHQ9eDt2YXIgbT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLE09Imh0dHA6Ly93d3cudzMub3JnLzIwMDAv''@;'; put 'put ''c3ZnIixSPS91cmxcKFsiJ10/KC4rPylbIiddP1wpLyx6PXt3b2ZmMjoiZm9udC93b2ZmMiIsd29mZjoiZm9udC93b2ZmIixvdGY6ImFwcGxpY2F0aW9uL3gtZm9udC1vcGVudHlwZSIsdHRmOiJhcHBsaWNhdGlvbi94LWZvbnQtdHRmIixlb3Q6ImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2Jq''@;'; put 'put ''ZWN0IixzZm50OiJhcHBsaWNhdGlvbi9mb250LXNmbnQiLHN2ZzoiaW1hZ2Uvc3ZnK3htbCJ9LEs9ZnVuY3Rpb24oRCl7cmV0dXJuIEQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudHx8RCBpbnN0YW5jZW9mIFNWR0VsZW1lbnR9LEk9ZnVuY3Rpb24oRCl7aWYoIUsoRCkpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3QgIitEKX0saz1mdW5jdGlvbihEKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oSCxOKXtLKEQpP0goRCk6TihuZXcgRXJyb3IoImFuIEhUTUxFbGVtZW50IG9yIFNWR0VsZW1lbnQgaXMgcmVxdWlyZWQ7''@;'; put 'put ''IGdvdCAiK0QpKX0pfSxqPWZ1bmN0aW9uKEQpe3ZhciBIPU9iamVjdC5rZXlzKHopLmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4gRC5pbmRleE9mKCIuIitOKT4wfSkubWFwKGZ1bmN0aW9uKE4pe3JldHVybiB6W05dfSk7cmV0dXJuIEg/SFswXTooY29uc29sZS5lcnJvcigiVW5rbm93biBm''@;'; put 'put ''b250IGZvcm1hdCBmb3IgIitEKyIuIEZvbnRzIG1heSBub3QgYmUgd29ya2luZyBjb3JyZWN0bHkuIiksImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpfSxCPWZ1bmN0aW9uKEQsSCxOKXt2YXIgZz1ELnZpZXdCb3gmJkQudmlld0JveC5iYXNlVmFsJiZELnZpZXdCb3guYmFzZVZhbFtOXXx8''@;'; put 'put ''bnVsbCE9PUguZ2V0QXR0cmlidXRlKE4pJiYhSC5nZXRBdHRyaWJ1dGUoTikubWF0Y2goLyUkLykmJnBhcnNlSW50KEguZ2V0QXR0cmlidXRlKE4pKXx8RC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtOXXx8cGFyc2VJbnQoSC5zdHlsZVtOXSl8fHBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRl''@;'; put 'put ''ZFN0eWxlKEQpLmdldFByb3BlcnR5VmFsdWUoTikpO3JldHVybiB0eXBlb2YgZz4idSJ8fG51bGw9PT1nfHxpc05hTihwYXJzZUZsb2F0KGcpKT8wOmd9LFU9ZnVuY3Rpb24oRCl7Zm9yKHZhciBIPXdpbmRvdy5hdG9iKEQuc3BsaXQoIiwiKVsxXSksTj1ELnNwbGl0KCIsIilbMF0uc3BsaXQo''@;'; put 'put ''IjoiKVsxXS5zcGxpdCgiOyIpWzBdLGc9bmV3IEFycmF5QnVmZmVyKEgubGVuZ3RoKSxDPW5ldyBVaW50OEFycmF5KGcpLFM9MDtTPEgubGVuZ3RoO1MrKylDW1NdPUguY2hhckNvZGVBdChTKTtyZXR1cm4gbmV3IEJsb2IoW2ddLHt0eXBlOk59KX0sb2U9e30saGU9bnVsbCxjZT1mdW5jdGlv''@;'; put 'put ''bihELEgpe3ZhciBOPUh8fHt9LGc9Ti5zZWxlY3RvclJlbWFwLEM9Ti5tb2RpZnlTdHlsZSx2PU4uZm9udHMscD1OLmV4Y2x1ZGVVbnVzZWRDc3Msdz1OLm1vZGlmeUNzc3x8ZnVuY3Rpb24oZmUseGUpe3JldHVybihnP2coZmUpOmZlKSsieyIrKEM/Qyh4ZSk6eGUpKyJ9XG4ifSxKPVtdLG5l''@;'; put 'put ''PXR5cGVvZiB2PiJ1IixkZT12fHxbXTtyZXR1cm4oaGV8fChoZT1BcnJheS5mcm9tKGRvY3VtZW50LnN0eWxlU2hlZXRzKS5tYXAoZnVuY3Rpb24oRCl7dHJ5e3JldHVybntydWxlczpELmNzc1J1bGVzLGhyZWY6RC5ocmVmfX1jYXRjaChIKXtyZXR1cm4gY29uc29sZS53YXJuKCJTdHlsZXNo''@;'; put 'put ''ZWV0IGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICIrRC5ocmVmLEgpLHt9fX0pKSkuZm9yRWFjaChmdW5jdGlvbihmZSl7dmFyIHhlPWZlLnJ1bGVzLExlPWZlLmhyZWY7eGUmJkFycmF5LmZyb20oeGUpLmZvckVhY2goZnVuY3Rpb24oRmUpe2lmKHR5cGVvZiBGZS5zdHlsZTwidSIpaWYoZnVuY3Rp''@;'; put 'put ''b24oRCxIKXtpZihIKXRyeXtyZXR1cm4gRC5xdWVyeVNlbGVjdG9yKEgpfHxELnBhcmVudE5vZGUmJkQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yKEgpfWNhdGNoKE4pe2NvbnNvbGUud2FybignSW52YWxpZCBDU1Mgc2VsZWN0b3IgIicrSCsnIicsTil9fShELEZlLnNlbGVjdG9yVGV4dCkp''@;'; put 'put ''Si5wdXNoKHcoRmUuc2VsZWN0b3JUZXh0LEZlLnN0eWxlLmNzc1RleHQpKTtlbHNlIGlmKG5lJiZGZS5jc3NUZXh0Lm1hdGNoKC9eQGZvbnQtZmFjZS8pKXt2YXIgT2U9ZnVuY3Rpb24oRCxIKXt2YXIgTj1ELmNzc1RleHQubWF0Y2goUiksZz1OJiZOWzFdfHwiIjtpZihnJiYhZy5tYXRjaCgv''@;'; put 'put ''XmRhdGE6LykmJiJhYm91dDpibGFuayIhPT1nKXt2YXIgQz1nLnN0YXJ0c1dpdGgoIi4uLyIpP0grIi8uLi8iK2c6Zy5zdGFydHNXaXRoKCIuLyIpP0grIi8uIitnOmc7cmV0dXJue3RleHQ6RC5jc3NUZXh0LGZvcm1hdDpqKEMpLHVybDpDfX19KEZlLExlKTtPZSYmZGUucHVzaChPZSl9ZWxz''@;'; put 'put ''ZSBwfHxKLnB1c2goRmUuY3NzVGV4dCl9KX0pLGZ1bmN0aW9uKEQpe3JldHVybiBQcm9taXNlLmFsbChELm1hcChmdW5jdGlvbihIKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oTixnKXtpZihvZVtILnVybF0pcmV0dXJuIE4ob2VbSC51cmxdKTt2YXIgQz1uZXcgWE1MSHR0cFJlcXVl''@;'; put 'put ''c3Q7Qy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKEQpe2Zvcih2YXIgSD0iIixOPW5ldyBVaW50OEFycmF5KEQpLGc9MDtnPE4uYnl0ZUxlbmd0aDtnKyspSCs9U3RyaW5nLmZyb21DaGFyQ29kZShOW2ddKTtyZXR1cm4gd2luZG93LmJ0b2EoSCl9''@;'; put 'put ''KEMucmVzcG9uc2UpLHY9SC50ZXh0LnJlcGxhY2UoUiwndXJsKCJkYXRhOicrSC5mb3JtYXQrIjtiYXNlNjQsIitTKyciKScpKyJcbiI7b2VbSC51cmxdPXYsTih2KX0pLEMuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGZ1bmN0aW9uKFMpe2NvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQg''@;'; put 'put ''Zm9udCBmcm9tOiAiK0gudXJsLFMpLG9lW0gudXJsXT1udWxsLE4obnVsbCl9KSxDLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmdW5jdGlvbihTKXtjb25zb2xlLndhcm4oIkFib3J0ZWQgbG9hZGluZyBmb250IGZyb206ICIrSC51cmwsUyksTihudWxsKX0pLEMub3BlbigiR0VUIixILnVy''@;'; put 'put ''bCksQy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixDLnNlbmQoKX0pfSkpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIEguZmlsdGVyKGZ1bmN0aW9uKE4pe3JldHVybiBOfSkuam9pbigiIil9KX0oZGUpLnRoZW4oZnVuY3Rpb24oZmUpe3JldHVybiBKLmpvaW4oIlxuIikrZmV9KX0sRz1m''@;'; put 'put ''dW5jdGlvbigpe2lmKCFuYXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYiYmISgiZG93bmxvYWQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKSlyZXR1cm57cG9wdXA6d2luZG93Lm9wZW4oKX19O3gucHJlcGFyZVN2Zz1mdW5jdGlvbihiLEQsSCl7SShiKTt2YXIgTj1EfHx7fSxnPU4u''@;'; put 'put ''bGVmdCxDPXZvaWQgMD09PWc/MDpnLFM9Ti50b3Asdj12b2lkIDA9PT1TPzA6UyxwPU4ud2lkdGgsdz1OLmhlaWdodCxKPU4uc2NhbGUsbmU9dm9pZCAwPT09Sj8xOkosZGU9Ti5yZXNwb25zaXZlLGZlPXZvaWQgMCE9PWRlJiZkZSx4ZT1OLmV4Y2x1ZGVDc3MsTGU9dm9pZCAwIT09eGUmJnhl''@;'; put 'put ''O3JldHVybiBmdW5jdGlvbihEKXtyZXR1cm4gUHJvbWlzZS5hbGwoQXJyYXkuZnJvbShELnF1ZXJ5U2VsZWN0b3JBbGwoImltYWdlIikpLm1hcChmdW5jdGlvbihIKXt2YXIgTj1ILmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwiaHJlZiIpfHxILmdldEF0''@;'; put 'put ''dHJpYnV0ZSgiaHJlZiIpO3JldHVybiBOPyhmdW5jdGlvbihEKXtyZXR1cm4gRCYmMD09PUQubGFzdEluZGV4T2YoImh0dHAiLDApJiYtMT09PUQubGFzdEluZGV4T2Yod2luZG93LmxvY2F0aW9uLmhvc3QpfShOKSYmKE4rPSgtMT09PU4uaW5kZXhPZigiPyIpPyI/IjoiJiIpKyJ0PSIrKG5l''@;'; put 'put ''dyBEYXRlKS52YWx1ZU9mKCkpLG5ldyBQcm9taXNlKGZ1bmN0aW9uKGcsQyl7dmFyIFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdj1uZXcgSW1hZ2U7di5jcm9zc09yaWdpbj0iYW5vbnltb3VzIix2LnNyYz1OLHYub25lcnJvcj1mdW5jdGlvbigpe3JldHVybiBDKG5ldyBF''@;'; put 'put ''cnJvcigiQ291bGQgbm90IGxvYWQgIitOKSl9LHYub25sb2FkPWZ1bmN0aW9uKCl7Uy53aWR0aD12LndpZHRoLFMuaGVpZ2h0PXYuaGVpZ2h0LFMuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodiwwLDApLEguc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsi''@;'; put 'put ''LCJocmVmIixTLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikpLGcoITApfX0pKTpQcm9taXNlLnJlc29sdmUobnVsbCl9KSl9KGIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgRmU9Yi5jbG9uZU5vZGUoITApO0ZlLnN0eWxlLmJhY2tncm91bmRDb2xvcj0oRHx8e30pLmJhY2tncm91bmRDb2xvcnx8Yi5z''@;'; put 'put ''dHlsZS5iYWNrZ3JvdW5kQ29sb3I7dmFyIE9lPWZ1bmN0aW9uKEQsSCxOLGcpe2lmKCJzdmciPT09RC50YWdOYW1lKXJldHVybnt3aWR0aDpOfHxCKEQsSCwid2lkdGgiKSxoZWlnaHQ6Z3x8QihELEgsImhlaWdodCIpfTtpZihELmdldEJCb3gpe3ZhciBDPUQuZ2V0QkJveCgpO3JldHVybnt3''@;'; put 'put ''aWR0aDpDLngrQy53aWR0aCxoZWlnaHQ6Qy55K0MuaGVpZ2h0fX19KGIsRmUscCx3KSxqZT1PZS53aWR0aCxXZT1PZS5oZWlnaHQ7aWYoInN2ZyIhPT1iLnRhZ05hbWUpe2lmKCFiLmdldEJCb3gpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiQXR0ZW1wdGVkIHRvIHJlbmRlciBub24tU1ZH''@;'; put 'put ''IGVsZW1lbnQiLGIpO251bGwhPUZlLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikmJkZlLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIixGZS5nZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIpLnJlcGxhY2UoL3RyYW5zbGF0ZVwoLio/XCkvLCIiKSk7dmFyIEtlPWRvY3VtZW50LmNyZWF0ZUVsZW1l''@;'; put 'put ''bnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtLZS5hcHBlbmRDaGlsZChGZSksRmU9S2V9aWYoRmUuc2V0QXR0cmlidXRlKCJ2ZXJzaW9uIiwiMS4xIiksRmUuc2V0QXR0cmlidXRlKCJ2aWV3Qm94IixbQyx2LGplLFdlXS5qb2luKCIgIikpLEZlLmdldEF0dHJpYnV0''@;'; put 'put ''ZSgieG1sbnMiKXx8RmUuc2V0QXR0cmlidXRlTlMobSwieG1sbnMiLE0pLEZlLmdldEF0dHJpYnV0ZSgieG1sbnM6eGxpbmsiKXx8RmUuc2V0QXR0cmlidXRlTlMobSwieG1sbnM6eGxpbmsiLCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiksZmU/KEZlLnJlbW92ZUF0dHJpYnV0ZSgi''@;'; put 'put ''d2lkdGgiKSxGZS5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpLEZlLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsInhNaW5ZTWluIG1lZXQiKSk6KEZlLnNldEF0dHJpYnV0ZSgid2lkdGgiLGplKm5lKSxGZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsV2UqbmUpKSxBcnJheS5m''@;'; put 'put ''cm9tKEZlLnF1ZXJ5U2VsZWN0b3JBbGwoImZvcmVpZ25PYmplY3QgPiAqIikpLmZvckVhY2goZnVuY3Rpb24obHQpe2x0LnNldEF0dHJpYnV0ZU5TKG0sInhtbG5zIiwic3ZnIj09PWx0LnRhZ05hbWU/TToiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIpfSksIUxlKXJldHVybiBjZShi''@;'; put 'put ''LEQpLnRoZW4oZnVuY3Rpb24obHQpe3ZhciBQZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO1BlLnNldEF0dHJpYnV0ZSgidHlwZSIsInRleHQvY3NzIiksUGUuaW5uZXJIVE1MPSI8IVtDREFUQVtcbiIrbHQrIlxuXV0+Ijt2YXIgYmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''ZGVmcyIpO2JlLmFwcGVuZENoaWxkKFBlKSxGZS5pbnNlcnRCZWZvcmUoYmUsRmUuZmlyc3RDaGlsZCk7dmFyIEFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO0FlLmFwcGVuZENoaWxkKEZlKTt2YXIgVGU9QWUuaW5uZXJIVE1MLnJlcGxhY2UoL05TXGQrOmhyZWYvZ2ksJ3htbG5z''@;'; put 'put ''OnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bGluazpocmVmJyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEgpcmV0dXJue3NyYzpUZSx3aWR0aDpqZSxoZWlnaHQ6V2V9O0goVGUsamUsV2UpfSk7dmFyIFllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO1llLmFw''@;'; put 'put ''cGVuZENoaWxkKEZlKTt2YXIgSmU9WWUuaW5uZXJIVE1MO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBIKXJldHVybntzcmM6SmUsd2lkdGg6amUsaGVpZ2h0OldlfTtIKEplLGplLFdlKX0pfSx4LnN2Z0FzRGF0YVVyaT1mdW5jdGlvbihiLEQsSCl7cmV0dXJuIEkoYikseC5wcmVwYXJlU3ZnKGIs''@;'; put 'put ''RCkudGhlbihmdW5jdGlvbihOKXt2YXIgQz1OLndpZHRoLFM9Ti5oZWlnaHQsdj0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK3dpbmRvdy5idG9hKGZ1bmN0aW9uKEQpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KEQpLnJlcGxhY2UoLyUoWzAtOUEt''@;'; put 'put ''Rl17Mn0pL2csZnVuY3Rpb24oSCxOKXt2YXIgZz1TdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrTik7cmV0dXJuIiUiPT09Zz8iJTI1IjpnfSkpfSgnPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9F''@;'; put 'put ''TiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCIgWzwhRU5USVRZIG5ic3AgIiYjMTYwOyI+XT4nK04uc3JjKSk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEgmJkgodixDLFMpLHZ9KX0seC5zdmdBc1BuZ1VyaT1mdW5jdGlvbihiLEQsSCl7SShi''@;'; put 'put ''KTt2YXIgTj1EfHx7fSxnPU4uZW5jb2RlclR5cGUsQz12b2lkIDA9PT1nPyJpbWFnZS9wbmciOmcsUz1OLmVuY29kZXJPcHRpb25zLHY9dm9pZCAwPT09Uz8uODpTLHA9Ti5jYW52Zyx3PWZ1bmN0aW9uKG5lKXt2YXIgZGU9bmUuc3JjLGZlPW5lLndpZHRoLHhlPW5lLmhlaWdodCxMZT1kb2N1''@;'; put 'put ''bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxGZT1MZS5nZXRDb250ZXh0KCIyZCIpLE9lPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO0xlLndpZHRoPWZlKk9lLExlLmhlaWdodD14ZSpPZSxMZS5zdHlsZS53aWR0aD1MZS53aWR0aCsicHgiLExlLnN0eWxlLmhlaWdodD1MZS5oZWln''@;'; put 'put ''aHQrInB4IixGZS5zZXRUcmFuc2Zvcm0oT2UsMCwwLE9lLDAsMCkscD9wKExlLGRlKTpGZS5kcmF3SW1hZ2UoZGUsMCwwKTt2YXIgamU9dm9pZCAwO3RyeXtqZT1MZS50b0RhdGFVUkwoQyx2KX1jYXRjaChXZSl7aWYodHlwZW9mIFNlY3VyaXR5RXJyb3I8InUiJiZXZSBpbnN0YW5jZW9mIFNl''@;'; put 'put ''Y3VyaXR5RXJyb3J8fCJTZWN1cml0eUVycm9yIj09PVdlLm5hbWUpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiUmVuZGVyZWQgU1ZHIGltYWdlcyBjYW5ub3QgYmUgZG93bmxvYWRlZCBpbiB0aGlzIGJyb3dzZXIuIik7dGhyb3cgV2V9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEgmJkgo''@;'; put 'put ''amUsTGUud2lkdGgsTGUuaGVpZ2h0KSxQcm9taXNlLnJlc29sdmUoamUpfTtyZXR1cm4gcD94LnByZXBhcmVTdmcoYixEKS50aGVuKHcpOnguc3ZnQXNEYXRhVXJpKGIsRCkudGhlbihmdW5jdGlvbihKKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24obmUsZGUpe3ZhciBmZT1uZXcgSW1h''@;'; put 'put ''Z2U7ZmUub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIG5lKHcoe3NyYzpmZSx3aWR0aDpmZS53aWR0aCxoZWlnaHQ6ZmUuaGVpZ2h0fSkpfSxmZS5vbmVycm9yPWZ1bmN0aW9uKCl7ZGUoIlRoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHRoZSBkYXRhIFVSSSBhcyBhbiBpbWFnZSBvbiB0aGUg''@;'; put 'put ''Zm9sbG93aW5nIFNWR1xuIit3aW5kb3cuYXRvYihKLnNsaWNlKDI2KSkrIk9wZW4gdGhlIGZvbGxvd2luZyBsaW5rIHRvIHNlZSBicm93c2VyJ3MgZGlhZ25vc2lzXG4iK0opfSxmZS5zcmM9Sn0pfSl9LHguZG93bmxvYWQ9ZnVuY3Rpb24oYixELEgpe2lmKG5hdmlnYXRvci5tc1NhdmVPck9w''@;'; put 'put ''ZW5CbG9iKW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKFUoRCksYik7ZWxzZXt2YXIgTj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7aWYoImRvd25sb2FkImluIE4pe04uZG93bmxvYWQ9YixOLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTik7''@;'; put 'put ''dHJ5e3ZhciBnPVUoRCksQz1VUkwuY3JlYXRlT2JqZWN0VVJMKGcpO04uaHJlZj1DLE4ub25jbGljaz1mdW5jdGlvbigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChDKX0pfX1jYXRjaChTKXtjb25zb2xlLmVycm9y''@;'; put 'put ''KFMpLGNvbnNvbGUud2FybigiRXJyb3Igd2hpbGUgZ2V0dGluZyBvYmplY3QgVVJMLiBGYWxsaW5nIGJhY2sgdG8gc3RyaW5nIFVSTC4iKSxOLmhyZWY9RH1OLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChOKX1lbHNlIEgmJkgucG9wdXAmJihILnBvcHVwLmRvY3VtZW50LnRp''@;'; put 'put ''dGxlPWIsSC5wb3B1cC5sb2NhdGlvbi5yZXBsYWNlKEQpKX19LHguc2F2ZVN2Zz1mdW5jdGlvbihiLEQsSCl7dmFyIE49RygpO3JldHVybiBrKGIpLnRoZW4oZnVuY3Rpb24oZyl7cmV0dXJuIHguc3ZnQXNEYXRhVXJpKGcsSHx8e30pfSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4geC5kb3du''@;'; put 'put ''bG9hZChELGcsTil9KX0seC5zYXZlU3ZnQXNQbmc9ZnVuY3Rpb24oYixELEgpe3ZhciBOPUcoKTtyZXR1cm4gayhiKS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybiB4LnN2Z0FzUG5nVXJpKGcsSHx8e30pfSkudGhlbihmdW5jdGlvbihnKXtyZXR1cm4geC5kb3dubG9hZChELGcsTil9KX19KCl9''@;'; put 'put ''LDgzNTgxOihhdCxJZSxGKT0+e3ZhciBhZT1GKDg0MykuQnVmZmVyO2Z1bmN0aW9uIHgobSxsZSl7dGhpcy5fYmxvY2s9YWUuYWxsb2MobSksdGhpcy5fZmluYWxTaXplPWxlLHRoaXMuX2Jsb2NrU2l6ZT1tLHRoaXMuX2xlbj0wfXgucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihtLGxlKXsi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIG0mJihtPWFlLmZyb20obSxsZT1sZXx8InV0ZjgiKSk7Zm9yKHZhciBNPXRoaXMuX2Jsb2NrLE89dGhpcy5fYmxvY2tTaXplLFI9bS5sZW5ndGgsej10aGlzLl9sZW4sSz0wO0s8Ujspe2Zvcih2YXIgST16JU8saz1NYXRoLm1pbihSLUssTy1JKSxFPTA7RTxrO0Ur''@;'; put 'put ''KylNW0krRV09bVtLK0VdO0srPWssKHorPWspJU89PTAmJnRoaXMuX3VwZGF0ZShNKX1yZXR1cm4gdGhpcy5fbGVuKz1SLHRoaXN9LHgucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihtKXt2YXIgbGU9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tsZV09MTI4LHRoaXMu''@;'; put 'put ''X2Jsb2NrLmZpbGwoMCxsZSsxKSxsZT49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKTt2YXIgTT04KnRoaXMuX2xlbjtpZihNPD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoTSx0aGlzLl9ibG9ja1Np''@;'; put 'put ''emUtNCk7ZWxzZXt2YXIgTz0oNDI5NDk2NzI5NSZNKT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgoTS1PKS80Mjk0OTY3Mjk2LHRoaXMuX2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKE8sdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9i''@;'; put 'put ''bG9jayk7dmFyIHo9dGhpcy5faGFzaCgpO3JldHVybiBtP3oudG9TdHJpbmcobSk6en0seC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LGF0LmV4cG9ydHM9eH0sOTc5NjU6KGF0''@;'; put 'put ''LEllLEYpPT57dmFyIGFlPWF0LmV4cG9ydHM9ZnVuY3Rpb24obSl7bT1tLnRvTG93ZXJDYXNlKCk7dmFyIGxlPWFlW21dO2lmKCFsZSl0aHJvdyBuZXcgRXJyb3IobSsiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgbGV9O2FlLnNoYT1G''@;'; put 'put ''KDc3OTE1KSxhZS5zaGExPUYoMTIyOSksYWUuc2hhMjI0PUYoNzI5NTkpLGFlLnNoYTI1Nj1GKDUwNDUwKSxhZS5zaGEzODQ9Rig2MTcyMyksYWUuc2hhNTEyPUYoNDc5MTQpfSw3NzkxNTooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NjY5OCkseD1GKDgzNTgxKSxtPUYoODQzKS5CdWZmZXIsbGU9''@;'; put 'put ''WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSxNPW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9TSx4LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gUihJKXtyZXR1cm4gSTw8NXxJPj4+Mjd9ZnVuY3Rpb24geihJKXty''@;'; put 'put ''ZXR1cm4gSTw8MzB8ST4+PjJ9ZnVuY3Rpb24gSyhJLGssRSxqKXtyZXR1cm4gMD09PUk/ayZFfH5rJmo6Mj09PUk/ayZFfGsmanxFJmo6a15FXmp9YWUoTyx4KSxPLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcs''@;'; put 'put ''dGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEkpe2Zvcih2YXIgaz10aGlzLl93LEU9MHx0aGlzLl9hLGo9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLEI9MHx0aGlzLl9kLFk9MHx0''@;'; put 'put ''aGlzLl9lLFg9MDtYPDE2OysrWClrW1hdPUkucmVhZEludDMyQkUoNCpYKTtmb3IoO1g8ODA7KytYKWtbWF09a1tYLTNdXmtbWC04XV5rW1gtMTRdXmtbWC0xNl07Zm9yKHZhciBVPTA7VTw4MDsrK1Upe3ZhciBxPX5+KFUvMjApLGVlPVIoRSkrSyhxLGosVixCKStZK2tbVV0rbGVbcV18MDtZ''@;'; put 'put ''PUIsQj1WLFY9eihqKSxqPUUsRT1lZX10aGlzLl9hPUUrdGhpcy5fYXwwLHRoaXMuX2I9ait0aGlzLl9ifDAsdGhpcy5fYz1WK3RoaXMuX2N8MCx0aGlzLl9kPUIrdGhpcy5fZHwwLHRoaXMuX2U9WSt0aGlzLl9lfDB9LE8ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEk9bS5hbGxv''@;'; put 'put ''Y1Vuc2FmZSgyMCk7cmV0dXJuIEkud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxJLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksSS53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEkud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksSS53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxJfSxh''@;'; put 'put ''dC5leHBvcnRzPU99LDEyMjk6KGF0LEllLEYpPT57dmFyIGFlPUYoNjY2OTgpLHg9Rig4MzU4MSksbT1GKDg0MykuQnVmZmVyLGxlPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sTT1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIE8oKXt0aGlzLmluaXQoKSx0''@;'; put 'put ''aGlzLl93PU0seC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFIoayl7cmV0dXJuIGs8PDF8az4+PjMxfWZ1bmN0aW9uIHooayl7cmV0dXJuIGs8PDV8az4+PjI3fWZ1bmN0aW9uIEsoayl7cmV0dXJuIGs8PDMwfGs+Pj4yfWZ1bmN0aW9uIEkoayxFLGosVil7cmV0dXJuIDA9PT1rP0Umanx+''@;'; put 'put ''RSZWOjI9PT1rP0UmanxFJlZ8aiZWOkVeal5WfWFlKE8seCksTy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAs''@;'; put 'put ''dGhpc30sTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihrKXtmb3IodmFyIEU9dGhpcy5fdyxqPTB8dGhpcy5fYSxWPTB8dGhpcy5fYixCPTB8dGhpcy5fYyxZPTB8dGhpcy5fZCxYPTB8dGhpcy5fZSxVPTA7VTwxNjsrK1UpRVtVXT1rLnJlYWRJbnQzMkJFKDQqVSk7Zm9yKDtVPDgwOysr''@;'; put 'put ''VSlFW1VdPVIoRVtVLTNdXkVbVS04XV5FW1UtMTRdXkVbVS0xNl0pO2Zvcih2YXIgcT0wO3E8ODA7KytxKXt2YXIgZWU9fn4ocS8yMCksdGU9eihqKStJKGVlLFYsQixZKStYK0VbcV0rbGVbZWVdfDA7WD1ZLFk9QixCPUsoViksVj1qLGo9dGV9dGhpcy5fYT1qK3RoaXMuX2F8MCx0aGlzLl9i''@;'; put 'put ''PVYrdGhpcy5fYnwwLHRoaXMuX2M9Qit0aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPVgrdGhpcy5fZXwwfSxPLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBrPW0uYWxsb2NVbnNhZmUoMjApO3JldHVybiBrLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksay53''@;'; put 'put ''cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLGsud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxrLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLGsud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksa30sYXQuZXhwb3J0cz1PfSw3Mjk1OTooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NjY5OCkseD1G''@;'; put 'put ''KDUwNDUwKSxtPUYoODM1ODEpLGxlPUYoODQzKS5CdWZmZXIsTT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIE8oKXt0aGlzLmluaXQoKSx0aGlzLl93PU0sbS5jYWxsKHRoaXMsNjQsNTYpfWFlKE8seCksTy5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEw''@;'; put 'put ''MzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxPLnByb3RvdHlwZS5faGFzaD1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBSPWxlLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gUi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxSLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFIud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksUi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksUi53cml0ZUludDMyQkUodGhpcy5fZSwx''@;'; put 'put ''NiksUi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksUi53cml0ZUludDMyQkUodGhpcy5fZywyNCksUn0sYXQuZXhwb3J0cz1PfSw1MDQ1MDooYXQsSWUsRik9Pnt2YXIgYWU9Rig2NjY5OCkseD1GKDgzNTgxKSxtPUYoODQzKS5CdWZmZXIsbGU9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5''@;'; put 'put ''MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0''@;'; put 'put ''Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3''@;'; put 'put ''MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAy''@;'; put 'put ''Mjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5''@;'; put 'put ''OF0sTT1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIE8oKXt0aGlzLmluaXQoKSx0aGlzLl93PU0seC5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIFIoaixWLEIpe3JldHVybiBCXmomKFZeQil9ZnVuY3Rpb24geihqLFYsQil7cmV0dXJuIGomVnxCJihqfFYpfWZ1bmN0aW9uIEsoail7cmV0dXJu''@;'; put 'put ''KGo+Pj4yfGo8PDMwKV4oaj4+PjEzfGo8PDE5KV4oaj4+PjIyfGo8PDEwKX1mdW5jdGlvbiBJKGope3JldHVybihqPj4+NnxqPDwyNileKGo+Pj4xMXxqPDwyMSleKGo+Pj4yNXxqPDw3KX1mdW5jdGlvbiBrKGope3JldHVybihqPj4+N3xqPDwyNSleKGo+Pj4xOHxqPDwxNCleaj4+PjN9ZnVu''@;'; put 'put ''Y3Rpb24gRShqKXtyZXR1cm4oaj4+PjE3fGo8PDE1KV4oaj4+PjE5fGo8PDEzKV5qPj4+MTB9YWUoTyx4KSxPLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3''@;'; put 'put ''MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGope2Zvcih2YXIgVj10aGlzLl93LEI9MHx0aGlzLl9hLFk9MHx0aGlzLl9iLFg9''@;'; put 'put ''MHx0aGlzLl9jLFU9MHx0aGlzLl9kLHE9MHx0aGlzLl9lLGVlPTB8dGhpcy5fZix0ZT0wfHRoaXMuX2csb2U9MHx0aGlzLl9oLHNlPTA7c2U8MTY7KytzZSlWW3NlXT1qLnJlYWRJbnQzMkJFKDQqc2UpO2Zvcig7c2U8NjQ7KytzZSlWW3NlXT1FKFZbc2UtMl0pK1Zbc2UtN10rayhWW3NlLTE1''@;'; put 'put ''XSkrVltzZS0xNl18MDtmb3IodmFyIGhlPTA7aGU8NjQ7KytoZSl7dmFyIHVlPW9lK0kocSkrUihxLGVlLHRlKStsZVtoZV0rVltoZV18MCxjZT1LKEIpK3ooQixZLFgpfDA7b2U9dGUsdGU9ZWUsZWU9cSxxPVUrdWV8MCxVPVgsWD1ZLFk9QixCPXVlK2NlfDB9dGhpcy5fYT1CK3RoaXMuX2F8''@;'; put 'put ''MCx0aGlzLl9iPVkrdGhpcy5fYnwwLHRoaXMuX2M9WCt0aGlzLl9jfDAsdGhpcy5fZD1VK3RoaXMuX2R8MCx0aGlzLl9lPXErdGhpcy5fZXwwLHRoaXMuX2Y9ZWUrdGhpcy5fZnwwLHRoaXMuX2c9dGUrdGhpcy5fZ3wwLHRoaXMuX2g9b2UrdGhpcy5faHwwfSxPLnByb3RvdHlwZS5faGFzaD1m''@;'; put 'put ''dW5jdGlvbigpe3ZhciBqPW0uYWxsb2NVbnNhZmUoMzIpO3JldHVybiBqLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLGoud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksai53cml0ZUludDMyQkUodGhpcy5fYyw4KSxqLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxqLndyaXRlSW50MzJCRSh0aGlz''@;'; put 'put ''Ll9lLDE2KSxqLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxqLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxqLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxqfSxhdC5leHBvcnRzPU99LDYxNzIzOihhdCxJZSxGKT0+e3ZhciBhZT1GKDY2Njk4KSx4PUYoNDc5MTQpLG09Rig4MzU4MSksbGU9''@;'; put 'put ''Rig4NDMpLkJ1ZmZlcixNPW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIE8oKXt0aGlzLmluaXQoKSx0aGlzLl93PU0sbS5jYWxsKHRoaXMsMTI4LDExMil9YWUoTyx4KSxPLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3''@;'; put 'put ''MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRo''@;'; put 'put ''aXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sTy5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgUj1sZS5hbGxv''@;'; put 'put ''Y1Vuc2FmZSg0OCk7ZnVuY3Rpb24geihLLEksayl7Ui53cml0ZUludDMyQkUoSyxrKSxSLndyaXRlSW50MzJCRShJLGsrNCl9cmV0dXJuIHoodGhpcy5fYWgsdGhpcy5fYWwsMCkseih0aGlzLl9iaCx0aGlzLl9ibCw4KSx6KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx6KHRoaXMuX2RoLHRoaXMu''@;'; put 'put ''X2RsLDI0KSx6KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx6KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxSfSxhdC5leHBvcnRzPU99LDQ3OTE0OihhdCxJZSxGKT0+e3ZhciBhZT1GKDY2Njk4KSx4PUYoODM1ODEpLG09Rig4NDMpLkJ1ZmZlcixsZT1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0''@;'; put 'put ''NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgz''@;'; put 'put ''Mzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEs''@;'; put 'put ''MjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0''@;'; put 'put ''MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5''@;'; put 'put ''MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3''@;'; put 'put ''LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwy''@;'; put 'put ''NzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5''@;'; put 'put ''OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5''@;'; put 'put ''LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4''@;'; put 'put ''OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2''@;'; put 'put ''NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLE09bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gTygpe3RoaXMuaW5pdCgpLHRoaXMuX3c9TSx4LmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBSKFksWCxVKXtyZXR1cm4gVV5ZJihYXlUpfWZ1bmN0aW9uIHoo''@;'; put 'put ''WSxYLFUpe3JldHVybiBZJlh8VSYoWXxYKX1mdW5jdGlvbiBLKFksWCl7cmV0dXJuKFk+Pj4yOHxYPDw0KV4oWD4+PjJ8WTw8MzApXihYPj4+N3xZPDwyNSl9ZnVuY3Rpb24gSShZLFgpe3JldHVybihZPj4+MTR8WDw8MTgpXihZPj4+MTh8WDw8MTQpXihYPj4+OXxZPDwyMyl9ZnVuY3Rpb24g''@;'; put 'put ''ayhZLFgpe3JldHVybihZPj4+MXxYPDwzMSleKFk+Pj44fFg8PDI0KV5ZPj4+N31mdW5jdGlvbiBFKFksWCl7cmV0dXJuKFk+Pj4xfFg8PDMxKV4oWT4+Pjh8WDw8MjQpXihZPj4+N3xYPDwyNSl9ZnVuY3Rpb24gaihZLFgpe3JldHVybihZPj4+MTl8WDw8MTMpXihYPj4+Mjl8WTw8MyleWT4+''@;'; put 'put ''PjZ9ZnVuY3Rpb24gVihZLFgpe3JldHVybihZPj4+MTl8WDw8MTMpXihYPj4+Mjl8WTw8MyleKFk+Pj42fFg8PDI2KX1mdW5jdGlvbiBCKFksWCl7cmV0dXJuIFk+Pj4wPFg+Pj4wPzE6MH1hZShPLHgpLE8ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAz''@;'; put 'put ''MzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0''@;'; put 'put ''aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxPLnByb3RvdHlwZS5fdXBkYXRlPWZ1''@;'; put 'put ''bmN0aW9uKFkpe2Zvcih2YXIgWD10aGlzLl93LFU9MHx0aGlzLl9haCxxPTB8dGhpcy5fYmgsZWU9MHx0aGlzLl9jaCx0ZT0wfHRoaXMuX2RoLG9lPTB8dGhpcy5fZWgsc2U9MHx0aGlzLl9maCxoZT0wfHRoaXMuX2doLHVlPTB8dGhpcy5faGgsY2U9MHx0aGlzLl9hbCxHPTB8dGhpcy5fYmws''@;'; put 'put ''Yj0wfHRoaXMuX2NsLEQ9MHx0aGlzLl9kbCxIPTB8dGhpcy5fZWwsTj0wfHRoaXMuX2ZsLGc9MHx0aGlzLl9nbCxDPTB8dGhpcy5faGwsUz0wO1M8MzI7Uys9MilYW1NdPVkucmVhZEludDMyQkUoNCpTKSxYW1MrMV09WS5yZWFkSW50MzJCRSg0KlMrNCk7Zm9yKDtTPDE2MDtTKz0yKXt2YXIg''@;'; put 'put ''dj1YW1MtMzBdLHA9WFtTLTMwKzFdLHc9ayh2LHApLEo9RShwLHYpLG5lPWoodj1YW1MtNF0scD1YW1MtNCsxXSksZGU9VihwLHYpLExlPVhbUy0zMl0sRmU9WFtTLTMyKzFdLE9lPUorWFtTLTE0KzFdfDAsamU9dytYW1MtMTRdK0IoT2UsSil8MDtqZT0oamU9amUrbmUrQihPZT1PZStkZXww''@;'; put 'put ''LGRlKXwwKStMZStCKE9lPU9lK0ZlfDAsRmUpfDAsWFtTXT1qZSxYW1MrMV09T2V9Zm9yKHZhciBXZT0wO1dlPDE2MDtXZSs9Mil7amU9WFtXZV0sT2U9WFtXZSsxXTt2YXIgS2U9eihVLHEsZWUpLFllPXooY2UsRyxiKSxKZT1LKFUsY2UpLGx0PUsoY2UsVSksUGU9SShvZSxIKSxiZT1JKEgs''@;'; put 'put ''b2UpLEFlPWxlW1dlXSxUZT1sZVtXZSsxXSxxZT1SKG9lLHNlLGhlKSxYZT1SKEgsTixnKSxVZT1DK2JlfDAsaHQ9dWUrUGUrQihVZSxDKXwwO2h0PShodD0oaHQ9aHQrcWUrQihVZT1VZStYZXwwLFhlKXwwKStBZStCKFVlPVVlK1RlfDAsVGUpfDApK2plK0IoVWU9VWUrT2V8MCxPZSl8MDt2''@;'; put 'put ''YXIgTWU9bHQrWWV8MCxEZT1KZStLZStCKE1lLGx0KXwwO3VlPWhlLEM9ZyxoZT1zZSxnPU4sc2U9b2UsTj1ILG9lPXRlK2h0K0IoSD1EK1VlfDAsRCl8MCx0ZT1lZSxEPWIsZWU9cSxiPUcscT1VLEc9Y2UsVT1odCtEZStCKGNlPVVlK01lfDAsVWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwrY2V8''@;'; put 'put ''MCx0aGlzLl9ibD10aGlzLl9ibCtHfDAsdGhpcy5fY2w9dGhpcy5fY2wrYnwwLHRoaXMuX2RsPXRoaXMuX2RsK0R8MCx0aGlzLl9lbD10aGlzLl9lbCtIfDAsdGhpcy5fZmw9dGhpcy5fZmwrTnwwLHRoaXMuX2dsPXRoaXMuX2dsK2d8MCx0aGlzLl9obD10aGlzLl9obCtDfDAsdGhpcy5fYWg9''@;'; put 'put ''dGhpcy5fYWgrVStCKHRoaXMuX2FsLGNlKXwwLHRoaXMuX2JoPXRoaXMuX2JoK3ErQih0aGlzLl9ibCxHKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2VlK0IodGhpcy5fY2wsYil8MCx0aGlzLl9kaD10aGlzLl9kaCt0ZStCKHRoaXMuX2RsLEQpfDAsdGhpcy5fZWg9dGhpcy5fZWgrb2UrQih0aGlz''@;'; put 'put ''Ll9lbCxIKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK3NlK0IodGhpcy5fZmwsTil8MCx0aGlzLl9naD10aGlzLl9naCtoZStCKHRoaXMuX2dsLGcpfDAsdGhpcy5faGg9dGhpcy5faGgrdWUrQih0aGlzLl9obCxDKXwwfSxPLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBZPW0uYWxsb2NV''@;'; put 'put ''bnNhZmUoNjQpO2Z1bmN0aW9uIFgoVSxxLGVlKXtZLndyaXRlSW50MzJCRShVLGVlKSxZLndyaXRlSW50MzJCRShxLGVlKzQpfXJldHVybiBYKHRoaXMuX2FoLHRoaXMuX2FsLDApLFgodGhpcy5fYmgsdGhpcy5fYmwsOCksWCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksWCh0aGlzLl9kaCx0aGlz''@;'; put 'put ''Ll9kbCwyNCksWCh0aGlzLl9laCx0aGlzLl9lbCwzMiksWCh0aGlzLl9maCx0aGlzLl9mbCw0MCksWCh0aGlzLl9naCx0aGlzLl9nbCw0OCksWCh0aGlzLl9oaCx0aGlzLl9obCw1NiksWX0sYXQuZXhwb3J0cz1PfSw1MTc5MzooYXQsSWUsRik9PnthdC5leHBvcnRzPW07dmFyIGFlPUYoODIw''@;'; put 'put ''MTYpLkV2ZW50RW1pdHRlcjtmdW5jdGlvbiBtKCl7YWUuY2FsbCh0aGlzKX1GKDY2Njk4KShtLGFlKSxtLlJlYWRhYmxlPUYoODAzMDkpLG0uV3JpdGFibGU9Rig1NjU2MyksbS5EdXBsZXg9Rig3MDI0NyksbS5UcmFuc2Zvcm09RigxNjMwNyksbS5QYXNzVGhyb3VnaD1GKDk1MDk2KSxtLmZp''@;'; put 'put ''bmlzaGVkPUYoNTQ2MTgpLG0ucGlwZWxpbmU9Rig4NDUxNCksbS5TdHJlYW09bSxtLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKGxlLE0pe3ZhciBPPXRoaXM7ZnVuY3Rpb24gUihWKXtsZS53cml0YWJsZSYmITE9PT1sZS53cml0ZShWKSYmTy5wYXVzZSYmTy5wYXVzZSgpfWZ1bmN0aW9uIHoo''@;'; put 'put ''KXtPLnJlYWRhYmxlJiZPLnJlc3VtZSYmTy5yZXN1bWUoKX1PLm9uKCJkYXRhIixSKSxsZS5vbigiZHJhaW4iLHopLCFsZS5faXNTdGRpbyYmKCFNfHwhMSE9PU0uZW5kKSYmKE8ub24oImVuZCIsSSksTy5vbigiY2xvc2UiLGspKTt2YXIgSz0hMTtmdW5jdGlvbiBJKCl7S3x8KEs9ITAsbGUu''@;'; put 'put ''ZW5kKCkpfWZ1bmN0aW9uIGsoKXtLfHwoSz0hMCwiZnVuY3Rpb24iPT10eXBlb2YgbGUuZGVzdHJveSYmbGUuZGVzdHJveSgpKX1mdW5jdGlvbiBFKFYpe2lmKGooKSwwPT09YWUubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFZ9ZnVuY3Rpb24gaigpe08ucmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIoImRhdGEiLFIpLGxlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIseiksTy5yZW1vdmVMaXN0ZW5lcigiZW5kIixJKSxPLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsayksTy5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEUpLGxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRSksTy5yZW1vdmVMaXN0''@;'; put 'put ''ZW5lcigiZW5kIixqKSxPLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaiksbGUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixqKX1yZXR1cm4gTy5vbigiZXJyb3IiLEUpLGxlLm9uKCJlcnJvciIsRSksTy5vbigiZW5kIixqKSxPLm9uKCJjbG9zZSIsaiksbGUub24oImNsb3NlIixqKSxsZS5lbWl0''@;'; put 'put ''KCJwaXBlIixPKSxsZX19LDcyMDI0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NDMpLkJ1ZmZlcix4PWFlLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKFUpe3N3aXRjaCgoVT0iIitVKSYmVS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04Ijpj''@;'; put 'put ''YXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIE0oVSl7dmFyIHE7c3dpdGNoKHRoaXMuZW5jb2Rp''@;'; put 'put ''bmc9ZnVuY3Rpb24gbGUoVSl7dmFyIHE9ZnVuY3Rpb24gbShVKXtpZighVSlyZXR1cm4idXRmOCI7Zm9yKHZhciBxOzspc3dpdGNoKFUpe2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxl''@;'; put 'put ''IjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBVO2RlZmF1bHQ6aWYocSlyZXR1cm47VT0oIiIrVSkudG9Mb3dlckNhc2UoKSxxPSEwfX0oVSk7aWYoInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiBxJiYoYWUuaXNFbmNvZGluZz09PXh8fCF4KFUpKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrVSk7cmV0dXJuIHF8fFV9KFUpLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUUsdGhpcy5lbmQ9aixxPTQ7YnJlYWs7Y2FzZSJ1''@;'; put 'put ''dGY4Ijp0aGlzLmZpbGxMYXN0PUsscT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vix0aGlzLmVuZD1CLHE9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVksdm9pZCh0aGlzLmVuZD1YKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RD''@;'; put 'put ''aGFyPWFlLmFsbG9jVW5zYWZlKHEpfWZ1bmN0aW9uIE8oVSl7cmV0dXJuIFU8PTEyNz8wOlU+PjU9PTY/MjpVPj40PT0xND8zOlU+PjM9PTMwPzQ6VT4+Nj09Mj8tMTotMn1mdW5jdGlvbiBLKFUpe3ZhciBxPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsZWU9ZnVuY3Rpb24geihVLHEs''@;'; put 'put ''ZWUpe2lmKDEyOCE9KDE5MiZxWzBdKSlyZXR1cm4gVS5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKFUubGFzdE5lZWQ+MSYmcS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnFbMV0pKXJldHVybiBVLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoVS5sYXN0TmVlZD4yJiZxLmxlbmd0aD4yJiYxMjghPSgx''@;'; put 'put ''OTImcVsyXSkpcmV0dXJuIFUubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsVSk7cmV0dXJuIHZvaWQgMCE9PWVlP2VlOnRoaXMubGFzdE5lZWQ8PVUubGVuZ3RoPyhVLmNvcHkodGhpcy5sYXN0Q2hhcixxLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVu''@;'; put 'put ''Y29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooVS5jb3B5KHRoaXMubGFzdENoYXIscSwwLFUubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPVUubGVuZ3RoKSl9ZnVuY3Rpb24gRShVLHEpe2lmKChVLmxlbmd0aC1xKSUyPT0wKXt2YXIgZWU9VS50b1N0cmluZygidXRmMTZsZSIscSk7aWYo''@;'; put 'put ''ZWUpe3ZhciB0ZT1lZS5jaGFyQ29kZUF0KGVlLmxlbmd0aC0xKTtpZih0ZT49NTUyOTYmJnRlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09VVtVLmxlbmd0aC0xXSxl''@;'; put 'put ''ZS5zbGljZSgwLC0xKX1yZXR1cm4gZWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0xXSxVLnRvU3RyaW5nKCJ1dGYxNmxlIixxLFUubGVuZ3RoLTEpfWZ1bmN0aW9uIGooVSl7dmFyIHE9VSYmVS5sZW5ndGg/dGhp''@;'; put 'put ''cy53cml0ZShVKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9xK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cX1mdW5jdGlvbiBWKFUscSl7dmFyIGVlPShVLmxlbmd0aC1xKSUzO3JldHVybiAwPT09ZWU/VS50b1N0cmlu''@;'; put 'put ''ZygiYmFzZTY0IixxKToodGhpcy5sYXN0TmVlZD0zLWVlLHRoaXMubGFzdFRvdGFsPTMsMT09PWVlP3RoaXMubGFzdENoYXJbMF09VVtVLmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT1VW1UubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09VVtVLmxlbmd0aC0xXSksVS50b1N0cmluZygi''@;'; put 'put ''YmFzZTY0IixxLFUubGVuZ3RoLWVlKSl9ZnVuY3Rpb24gQihVKXt2YXIgcT1VJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3ErdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6cX1mdW5jdGlvbiBZKFUpe3Jl''@;'; put 'put ''dHVybiBVLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIFgoVSl7cmV0dXJuIFUmJlUubGVuZ3RoP3RoaXMud3JpdGUoVSk6IiJ9SWUucz1NLE0ucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKFUpe2lmKDA9PT1VLmxlbmd0aClyZXR1cm4iIjt2YXIgcSxlZTtpZih0aGlzLmxhc3RO''@;'; put 'put ''ZWVkKXtpZih2b2lkIDA9PT0ocT10aGlzLmZpbGxMYXN0KFUpKSlyZXR1cm4iIjtlZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGVlPTA7cmV0dXJuIGVlPFUubGVuZ3RoP3E/cSt0aGlzLnRleHQoVSxlZSk6dGhpcy50ZXh0KFUsZWUpOnF8fCIifSxNLnByb3RvdHlwZS5l''@;'; put 'put ''bmQ9ZnVuY3Rpb24gayhVKXt2YXIgcT1VJiZVLmxlbmd0aD90aGlzLndyaXRlKFUpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3ErIlx1ZmZmZCI6cX0sTS5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBJKFUscSl7dmFyIGVlPWZ1bmN0aW9uIFIoVSxxLGVlKXt2YXIgdGU9cS5sZW5ndGgtMTtp''@;'; put 'put ''Zih0ZTxlZSlyZXR1cm4gMDt2YXIgb2U9TyhxW3RlXSk7cmV0dXJuIG9lPj0wPyhvZT4wJiYoVS5sYXN0TmVlZD1vZS0xKSxvZSk6LS10ZTxlZXx8LTI9PT1vZT8wOihvZT1PKHFbdGVdKSk+PTA/KG9lPjAmJihVLmxhc3ROZWVkPW9lLTIpLG9lKTotLXRlPGVlfHwtMj09PW9lPzA6KG9lPU8o''@;'; put 'put ''cVt0ZV0pKT49MD8ob2U+MCYmKDI9PT1vZT9vZT0wOlUubGFzdE5lZWQ9b2UtMyksb2UpOjB9KHRoaXMsVSxxKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gVS50b1N0cmluZygidXRmOCIscSk7dGhpcy5sYXN0VG90YWw9ZWU7dmFyIHRlPVUubGVuZ3RoLShlZS10aGlzLmxhc3ROZWVkKTty''@;'; put 'put ''ZXR1cm4gVS5jb3B5KHRoaXMubGFzdENoYXIsMCx0ZSksVS50b1N0cmluZygidXRmOCIscSx0ZSl9LE0ucHJvdG90eXBlLmZpbGxMYXN0PWZ1bmN0aW9uKFUpe2lmKHRoaXMubGFzdE5lZWQ8PVUubGVuZ3RoKXJldHVybiBVLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlz''@;'; put 'put ''Lmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpO1UuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxVLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09VS5sZW5n''@;'; put 'put ''dGh9fSw2NjMwNDooYXQsSWUsRik9Pnt2YXIgYWU9Rig0MDI5MCk7YXQuZXhwb3J0cz17VGV4dEVuY29kZXI6YWUuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6YWUuVGV4dERlY29kZXJ9fSwxNjQxMzpmdW5jdGlvbihhdCl7IWZ1bmN0aW9uKEllKXsidXNlIHN0cmljdCI7YXQuZXhwb3J0cyYm''@;'; put 'put ''KGF0LmV4cG9ydHM9SWUpLEllWyJlbmNvZGluZy1pbmRleGVzIl09e2JpZzU6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE3MzkyLDE5NTA2LDE3OTIzLDE3ODMwLDE3Nzg0''@;'; put 'put ''LDE2MDM1OSwxOTgzMSwxNzg0MywxNjI5OTMsMTk2ODIsMTYzMDEzLDE1MjUzLDE4MjMwLDE4MjQ0LDE5NTI3LDE5NTIwLDE0ODE1OSwxNDQ5MTksMTYwNTk0LDE1OTM3MSwxNTk5NTQsMTk1NDMsMTcyODgxLDE4MjU1LDE3ODgyLDE5NTg5LDE2MjkyNCwxOTcxOSwxOTEwOCwxODA4MSwxNTg0''@;'; put 'put ''OTksMjkyMjEsMTU0MTk2LDEzNzgyNywxNDY5NTAsMTQ3Mjk3LDI2MTg5LDIyMjY3LG51bGwsMzIxNDksMjI4MTMsMTY2ODQxLDE1ODYwLDM4NzA4LDE2Mjc5OSwyMzUxNSwxMzg1OTAsMjMyMDQsMTM4NjEsMTcxNjk2LDIzMjQ5LDIzNDc5LDIzODA0LDI2NDc4LDM0MTk1LDE3MDMwOSwyOTc5''@;'; put 'put ''MywyOTg1MywxNDQ1MywxMzg1NzksMTQ1MDU0LDE1NTY4MSwxNjEwOCwxNTM4MjIsMTUwOTMsMzE0ODQsNDA4NTUsMTQ3ODA5LDE2NjE1NywxNDM4NTAsMTMzNzcwLDE0Mzk2NiwxNzE2MiwzMzkyNCw0MDg1NCwzNzkzNSwxODczNiwzNDMyMywyMjY3OCwzODczMCwzNzQwMCwzMTE4NCwzMTI4''@;'; put 'put ''MiwyNjIwOCwyNzE3NywzNDk3MywyOTc3MiwzMTY4NSwyNjQ5OCwzMTI3NiwyMTA3MSwzNjkzNCwxMzU0MiwyOTYzNiwxNTUwNjUsMjk4OTQsNDA5MDMsMjI0NTEsMTg3MzUsMjE1ODAsMTY2ODksMTQ1MDM4LDIyNTUyLDMxMzQ2LDE2MjY2MSwzNTcyNywxODA5NCwxNTkzNjgsMTY3NjksMTU1''@;'; put 'put ''MDMzLDMxNjYyLDE0MDQ3Niw0MDkwNCwxNDA0ODEsMTQwNDg5LDE0MDQ5Miw0MDkwNSwzNDA1MiwxNDQ4MjcsMTY1NjQsNDA5MDYsMTc2MzMsMTc1NjE1LDI1MjgxLDI4NzgyLDQwOTA3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI3MzYsMTI3MzcsMTI3MzgsMTI3MzksMTI3NDAsMTMxMzQwLDEyNzQxLDEzMTI4MSwxMzEyNzcsMTI3NDIsMTI3NDMs''@;'; put 'put ''MTMxMjc1LDEzOTI0MCwxMjc0NCwxMzEyNzQsMTI3NDUsMTI3NDYsMTI3NDcsMTI3NDgsMTMxMzQyLDEyNzQ5LDEyNzUwLDI1NiwxOTMsNDYxLDE5MiwyNzQsMjAxLDI4MiwyMDAsMzMyLDIxMSw0NjUsMjEwLG51bGwsNzg3MCxudWxsLDc4NzIsMjAyLDI1NywyMjUsNDYyLDIyNCw1OTMsMjc1''@;'; put 'put ''LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsbnVsbCw3ODcxLG51bGwsNzg3MywyMzQsNjA5LDkxNzgsOTE3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzI5NjksMTM1NDkzLG51bGwsMjU4NjYsbnVsbCxudWxsLDIwMDI5LDI4MzgxLDQwMjcwLDM3MzQzLG51bGwsbnVsbCwxNjE1ODksMjU3NDUsMjAyNTAsMjAyNjQsMjAzOTIsMjA4MjIsMjA4NTIsMjA4OTIsMjA5''@;'; put 'put ''NjQsMjExNTMsMjExNjAsMjEzMDcsMjEzMjYsMjE0NTcsMjE0NjQsMjIyNDIsMjI3NjgsMjI3ODgsMjI3OTEsMjI4MzQsMjI4MzYsMjMzOTgsMjM0NTQsMjM0NTUsMjM3MDYsMjQxOTgsMjQ2MzUsMjU5OTMsMjY2MjIsMjY2MjgsMjY3MjUsMjc5ODIsMjg4NjAsMzAwMDUsMzI0MjAsMzI0Mjgs''@;'; put 'put ''MzI0NDIsMzI0NTUsMzI0NjMsMzI0NzksMzI1MTgsMzI1NjcsMzM0MDIsMzM0ODcsMzM2NDcsMzUyNzAsMzU3NzQsMzU4MTAsMzY3MTAsMzY3MTEsMzY3MTgsMjk3MTMsMzE5OTYsMzIyMDUsMjY5NTAsMzE0MzMsMjEwMzEsbnVsbCxudWxsLG51bGwsbnVsbCwzNzI2MCwzMDkwNCwzNzIxNCwz''@;'; put 'put ''Mjk1NixudWxsLDM2MTA3LDMzMDE0LDEzMzYwNyxudWxsLG51bGwsMzI5MjcsNDA2NDcsMTk2NjEsNDAzOTMsNDA0NjAsMTk1MTgsMTcxNTEwLDE1OTc1OCw0MDQ1OCwxNzIzMzksMTM3NjEsbnVsbCwyODMxNCwzMzM0MiwyOTk3NyxudWxsLDE4NzA1LDM5NTMyLDM5NTY3LDQwODU3LDMxMTEx''@;'; put 'put ''LDE2NDk3MiwxMzg2OTgsMTMyNTYwLDE0MjA1NCwyMDAwNCwyMDA5NywyMDA5NiwyMDEwMywyMDE1OSwyMDIwMywyMDI3OSwxMzM4OCwyMDQxMywxNTk0NCwyMDQ4MywyMDYxNiwxMzQzNywxMzQ1OSwxMzQ3NywyMDg3MCwyMjc4OSwyMDk1NSwyMDk4OCwyMDk5NywyMDEwNSwyMTExMywyMTEz''@;'; put 'put ''NiwyMTI4NywxMzc2NywyMTQxNywxMzY0OSwyMTQyNCwxMzY1MSwyMTQ0MiwyMTUzOSwxMzY3NywxMzY4MiwxMzk1MywyMTY1MSwyMTY2NywyMTY4NCwyMTY4OSwyMTcxMiwyMTc0MywyMTc4NCwyMTc5NSwyMTgwMCwxMzcyMCwyMTgyMywxMzczMywxMzc1OSwyMTk3NSwxMzc2NSwxNjMyMDQs''@;'; put 'put ''MjE3OTcsbnVsbCwxMzQyMTAsMTM0NDIxLDE1MTg1MSwyMTkwNCwxNDI1MzQsMTQ4MjgsMTMxOTA1LDM2NDIyLDE1MDk2OCwxNjkxODksMTY0NjcsMTY0MDMwLDMwNTg2LDE0MjM5MiwxNDkwMCwxODM4OSwxNjQxODksMTU4MTk0LDE1MTAxOCwyNTgyMSwxMzQ1MjQsMTM1MDkyLDEzNDM1Nywx''@;'; put 'put ''MzU0MTIsMjU3NDEsMzY0NzgsMTM0ODA2LDEzNDE1NSwxMzUwMTIsMTQyNTA1LDE2NDQzOCwxNDg2OTEsbnVsbCwxMzQ0NzAsMTcwNTczLDE2NDA3MywxODQyMCwxNTEyMDcsMTQyNTMwLDM5NjAyLDE0OTUxLDE2OTQ2MCwxNjM2NSwxMzU3NCwxNTIyNjMsMTY5OTQwLDE2MTk5MiwxNDI2NjAs''@;'; put 'put ''NDAzMDIsMzg5MzMsbnVsbCwxNzM2OSwxNTU4MTMsMjU3ODAsMjE3MzEsMTQyNjY4LDE0MjI4MiwxMzUyODcsMTQ4NDMsMTM1Mjc5LDE1NzQwMiwxNTc0NjIsMTYyMjA4LDI1ODM0LDE1MTYzNCwxMzQyMTEsMzY0NTYsMTM5NjgxLDE2NjczMiwxMzI5MTMsbnVsbCwxODQ0MywxMzE0OTcsMTYz''@;'; put 'put ''NzgsMjI2NDMsMTQyNzMzLG51bGwsMTQ4OTM2LDEzMjM0OCwxNTU3OTksMTM0OTg4LDEzNDU1MCwyMTg4MSwxNjU3MSwxNzMzOCxudWxsLDE5MTI0LDE0MTkyNiwxMzUzMjUsMzMxOTQsMzkxNTcsMTM0NTU2LDI1NDY1LDE0ODQ2LDE0MTE3MywzNjI4OCwyMjE3NywyNTcyNCwxNTkzOSxudWxs''@;'; put 'put ''LDE3MzU2OSwxMzQ2NjUsMTQyMDMxLDE0MjUzNyxudWxsLDEzNTM2OCwxNDU4NTgsMTQ3MzgsMTQ4NTQsMTY0NTA3LDEzNjg4LDE1NTIwOSwxMzk0NjMsMjIwOTgsMTM0OTYxLDE0MjUxNCwxNjk3NjAsMTM1MDAsMjc3MDksMTUxMDk5LG51bGwsbnVsbCwxNjExNDAsMTQyOTg3LDEzOTc4NCwx''@;'; put 'put ''NzM2NTksMTY3MTE3LDEzNDc3OCwxMzQxOTYsMTU3NzI0LDMyNjU5LDEzNTM3NSwxNDEzMTUsMTQxNjI1LDEzODE5LDE1MjAzNSwxMzQ3OTYsMTM1MDUzLDEzNDgyNiwxNjI3NSwxMzQ5NjAsMTM0NDcxLDEzNTUwMywxMzQ3MzIsbnVsbCwxMzQ4MjcsMTM0MDU3LDEzNDQ3MiwxMzUzNjAsMTM1''@;'; put 'put ''NDg1LDE2Mzc3LDE0MDk1MCwyNTY1MCwxMzUwODUsMTQ0MzcyLDE2MTMzNywxNDIyODYsMTM0NTI2LDEzNDUyNywxNDI0MTcsMTQyNDIxLDE0ODcyLDEzNDgwOCwxMzUzNjcsMTM0OTU4LDE3MzYxOCwxNTg1NDQsMTY3MTIyLDE2NzMyMSwxNjcxMTQsMzgzMTQsMjE3MDgsMzM0NzYsMjE5NDUs''@;'; put 'put ''bnVsbCwxNzE3MTUsMzk5NzQsMzk2MDYsMTYxNjMwLDE0MjgzMCwyODk5MiwzMzEzMywzMzAwNCwyMzU4MCwxNTcwNDIsMzMwNzYsMTQyMzEsMjEzNDMsMTY0MDI5LDM3MzAyLDEzNDkwNiwxMzQ2NzEsMTM0Nzc1LDEzNDkwNywxMzc4OSwxNTEwMTksMTM4MzMsMTM0MzU4LDIyMTkxLDE0MTIz''@;'; put 'put ''NywxMzUzNjksMTM0NjcyLDEzNDc3NiwxMzUyODgsMTM1NDk2LDE2NDM1OSwxMzYyNzcsMTM0Nzc3LDE1MTEyMCwxNDI3NTYsMjMxMjQsMTM1MTk3LDEzNTE5OCwxMzU0MTMsMTM1NDE0LDIyNDI4LDEzNDY3MywxNjE0MjgsMTY0NTU3LDEzNTA5MywxMzQ3NzksMTUxOTM0LDE0MDgzLDEzNTA5''@;'; put 'put ''NCwxMzU1NTIsMTUyMjgwLDE3MjczMywxNDk5NzgsMTM3Mjc0LDE0NzgzMSwxNjQ0NzYsMjI2ODEsMjEwOTYsMTM4NTAsMTUzNDA1LDMxNjY2LDIzNDAwLDE4NDMyLDE5MjQ0LDQwNzQzLDE4OTE5LDM5OTY3LDM5ODIxLDE1NDQ4NCwxNDM2NzcsMjIwMTEsMTM4MTAsMjIxNTMsMjAwMDgsMjI3''@;'; put 'put ''ODYsMTM4MTc3LDE5NDY4MCwzODczNywxMzEyMDYsMjAwNTksMjAxNTUsMTM2MzAsMjM1ODcsMjQ0MDEsMjQ1MTYsMTQ1ODYsMjUxNjQsMjU5MDksMjc1MTQsMjc3MDEsMjc3MDYsMjg3ODAsMjkyMjcsMjAwMTIsMjkzNTcsMTQ5NzM3LDMyNTk0LDMxMDM1LDMxOTkzLDMyNTk1LDE1NjI2Niwx''@;'; put 'put ''MzUwNSxudWxsLDE1NjQ5MSwzMjc3MCwzMjg5NiwxNTcyMDIsMTU4MDMzLDIxMzQxLDM0OTE2LDM1MjY1LDE2MTk3MCwzNTc0NCwzNjEyNSwzODAyMSwzODI2NCwzODI3MSwzODM3NiwxNjc0MzksMzg4ODYsMzkwMjksMzkxMTgsMzkxMzQsMzkyNjcsMTdlNCw0MDA2MCw0MDQ3OSw0MDY0NCwy''@;'; put 'put ''NzUwMyw2Mzc1MSwyMDAyMywxMzEyMDcsMzg0MjksMjUxNDMsMzgwNTAsbnVsbCwyMDUzOSwyODE1OCwxNzExMjMsNDA4NzAsMTU4MTcsMzQ5NTksMTQ3NzkwLDI4NzkxLDIzNzk3LDE5MjMyLDE1MjAxMywxMzY1NywxNTQ5MjgsMjQ4NjYsMTY2NDUwLDM2Nzc1LDM3MzY2LDI5MDczLDI2Mzkz''@;'; put 'put ''LDI5NjI2LDE0NDAwMSwxNzIyOTUsMTU0OTksMTM3NjAwLDE5MjE2LDMwOTQ4LDI5Njk4LDIwOTEwLDE2NTY0NywxNjM5MywyNzIzNSwxNzI3MzAsMTY5MzEsMzQzMTksMTMzNzQzLDMxMjc0LDE3MDMxMSwxNjY2MzQsMzg3NDEsMjg3NDksMjEyODQsMTM5MzkwLDM3ODc2LDMwNDI1LDE2NjM3''@;'; put 'put ''MSw0MDg3MSwzMDY4NSwyMDEzMSwyMDQ2NCwyMDY2OCwyMDAxNSwyMDI0Nyw0MDg3MiwyMTU1NiwzMjEzOSwyMjY3NCwyMjczNiwxMzg2NzgsMjQyMTAsMjQyMTcsMjQ1MTQsMTQxMDc0LDI1OTk1LDE0NDM3NywyNjkwNSwyNzIwMywxNDY1MzEsMjc5MDMsbnVsbCwyOTE4NCwxNDg3NDEsMjk1''@;'; put 'put ''ODAsMTYwOTEsMTUwMDM1LDIzMzE3LDI5ODgxLDM1NzE1LDE1NDc4OCwxNTMyMzcsMzEzNzksMzE3MjQsMzE5MzksMzIzNjQsMzM1MjgsMzQxOTksNDA4NzMsMzQ5NjAsNDA4NzQsMzY1MzcsNDA4NzUsMzY4MTUsMzQxNDMsMzkzOTIsMzc0MDksNDA4NzYsMTY3MzUzLDEzNjI1NSwxNjQ5Nywx''@;'; put 'put ''NzA1OCwyMzA2NixudWxsLG51bGwsbnVsbCwzOTAxNiwyNjQ3NSwxNzAxNCwyMjMzMyxudWxsLDM0MjYyLDE0OTg4MywzMzQ3MSwxNjAwMTMsMTk1ODUsMTU5MDkyLDIzOTMxLDE1ODQ4NSwxNTk2NzgsNDA4NzcsNDA4NzgsMjM0NDYsNDA4NzksMjYzNDMsMzIzNDcsMjgyNDcsMzExNzgsMTU3''@;'; put 'put ''NTIsMTc2MDMsMTQzOTU4LDE0MTIwNiwxNzMwNiwxNzcxOCxudWxsLDIzNzY1LDE0NjIwMiwzNTU3NywyMzY3MiwxNTYzNCwxNDQ3MjEsMjM5MjgsNDA4ODIsMjkwMTUsMTc3NTIsMTQ3NjkyLDEzODc4NywxOTU3NSwxNDcxMiwxMzM4NiwxMzE0OTIsMTU4Nzg1LDM1NTMyLDIwNDA0LDEzMTY0''@;'; put 'put ''MSwyMjk3NSwzMzEzMiwzODk5OCwxNzAyMzQsMjQzNzksMTM0MDQ3LG51bGwsMTM5NzEzLDE2NjI1MywxNjY0MiwxODEwNywxNjgwNTcsMTYxMzUsNDA4ODMsMTcyNDY5LDE2NjMyLDE0Mjk0LDE4MTY3LDE1ODc5MCwxNjc2NCwxNjU1NTQsMTYwNzY3LDE3NzczLDE0NTQ4LDE1MjczMCwxNzc2''@;'; put 'put ''MSwxNzY5MSwxOTg0OSwxOTU3OSwxOTgzMCwxNzg5OCwxNjMyOCwxNTAyODcsMTM5MjEsMTc2MzAsMTc1OTcsMTY4NzcsMjM4NzAsMjM4ODAsMjM4OTQsMTU4NjgsMTQzNTEsMjM5NzIsMjM5OTMsMTQzNjgsMTQzOTIsMjQxMzAsMjQyNTMsMjQzNTcsMjQ0NTEsMTQ2MDAsMTQ2MTIsMTQ2NTUs''@;'; put 'put ''MTQ2NjksMjQ3OTEsMjQ4OTMsMjM3ODEsMTQ3MjksMjUwMTUsMjUwMTcsMjUwMzksMTQ3NzYsMjUxMzIsMjUyMzIsMjUzMTcsMjUzNjgsMTQ4NDAsMjIxOTMsMTQ4NTEsMjU1NzAsMjU1OTUsMjU2MDcsMjU2OTAsMTQ5MjMsMjU3OTIsMjM4MjksMjIwNDksNDA4NjMsMTQ5OTksMjU5OTAsMTUw''@;'; put 'put ''MzcsMjYxMTEsMjYxOTUsMTUwOTAsMjYyNTgsMTUxMzgsMjYzOTAsMTUxNzAsMjY1MzIsMjY2MjQsMTUxOTIsMjY2OTgsMjY3NTYsMTUyMTgsMTUyMTcsMTUyMjcsMjY4ODksMjY5NDcsMjkyNzYsMjY5ODAsMjcwMzksMjcwMTMsMTUyOTIsMjcwOTQsMTUzMjUsMjcyMzcsMjcyNTIsMjcyNDks''@;'; put 'put ''MjcyNjYsMTUzNDAsMjcyODksMTUzNDYsMjczMDcsMjczMTcsMjczNDgsMjczODIsMjc1MjEsMjc1ODUsMjc2MjYsMjc3NjUsMjc4MTgsMTU1NjMsMjc5MDYsMjc5MTAsMjc5NDIsMjgwMzMsMTU1OTksMjgwNjgsMjgwODEsMjgxODEsMjgxODQsMjgyMDEsMjgyOTQsMTY2MzM2LDI4MzQ3LDI4''@;'; put 'put ''Mzg2LDI4Mzc4LDQwODMxLDI4MzkyLDI4MzkzLDI4NDUyLDI4NDY4LDE1Njg2LDE0NzI2NSwyODU0NSwyODYwNiwxNTcyMiwxNTczMywyOTExMSwyMzcwNSwxNTc1NCwyODcxNiwxNTc2MSwyODc1MiwyODc1NiwyODc4MywyODc5OSwyODgwOSwxMzE4NzcsMTczNDUsMTM4MDksMTM0ODcyLDE0''@;'; put 'put ''NzE1OSwyMjQ2MiwxNTk0NDMsMjg5OTAsMTUzNTY4LDEzOTAyLDI3MDQyLDE2Njg4OSwyMzQxMiwzMTMwNSwxNTM4MjUsMTY5MTc3LDMxMzMzLDMxMzU3LDE1NDAyOCwzMTQxOSwzMTQwOCwzMTQyNiwzMTQyNywyOTEzNywxNTY4MTMsMTY4NDIsMzE0NTAsMzE0NTMsMzE0NjYsMTY4NzksMjE2''@;'; put 'put ''ODIsMTU0NjI1LDMxNDk5LDMxNTczLDMxNTI5LDE1MjMzNCwxNTQ4NzgsMzE2NTAsMzE1OTksMzM2OTIsMTU0NTQ4LDE1ODg0NywzMTY5NiwzMzgyNSwzMTYzNCwzMTY3MiwxNTQ5MTIsMTU3ODksMTU0NzI1LDMzOTM4LDMxNzM4LDMxNzUwLDMxNzk3LDE1NDgxNywzMTgxMiwzMTg3NSwxNDk2''@;'; put 'put ''MzQsMzE5MTAsMjYyMzcsMTQ4ODU2LDMxOTQ1LDMxOTQzLDMxOTc0LDMxODYwLDMxOTg3LDMxOTg5LDMxOTUwLDMyMzU5LDE3NjkzLDE1OTMwMCwzMjA5MywxNTk0NDYsMjk4MzcsMzIxMzcsMzIxNzEsMjg5ODEsMzIxNzksMzIyMTAsMTQ3NTQzLDE1NTY4OSwzMjIyOCwxNTYzNSwzMjI0NSwx''@;'; put 'put ''MzcyMDksMzIyMjksMTY0NzE3LDMyMjg1LDE1NTkzNywxNTU5OTQsMzIzNjYsMzI0MDIsMTcxOTUsMzc5OTYsMzIyOTUsMzI1NzYsMzI1NzcsMzI1ODMsMzEwMzAsMTU2MzY4LDM5MzkzLDMyNjYzLDE1NjQ5NywzMjY3NSwxMzY4MDEsMTMxMTc2LDE3NzU2LDE0NTI1NCwxNzY2NywxNjQ2NjYs''@;'; put 'put ''MzI3NjIsMTU2ODA5LDMyNzczLDMyNzc2LDMyNzk3LDMyODA4LDMyODE1LDE3MjE2NywxNTg5MTUsMzI4MjcsMzI4MjgsMzI4NjUsMTQxMDc2LDE4ODI1LDE1NzIyMiwxNDY5MTUsMTU3NDE2LDI2NDA1LDMyOTM1LDE2NjQ3MiwzMzAzMSwzMzA1MCwyMjcwNCwxNDEwNDYsMjc3NzUsMTU2ODI0''@;'; put 'put ''LDE1MTQ4MCwyNTgzMSwxMzYzMzAsMzMzMDQsMTM3MzEwLDI3MjE5LDE1MDExNywxNTAxNjUsMTc1MzAsMzMzMjEsMTMzOTAxLDE1ODI5MCwxNDY4MTQsMjA0NzMsMTM2NDQ1LDM0MDE4LDMzNjM0LDE1ODQ3NCwxNDk5MjcsMTQ0Njg4LDEzNzA3NSwxNDY5MzYsMzM0NTAsMjY5MDcsMTk0OTY0''@;'; put 'put ''LDE2ODU5LDM0MTIzLDMzNDg4LDMzNTYyLDEzNDY3OCwxMzcxNDAsMTQwMTcsMTQzNzQxLDE0NDczMCwzMzQwMywzMzUwNiwzMzU2MCwxNDcwODMsMTU5MTM5LDE1ODQ2OSwxNTg2MTUsMTQ0ODQ2LDE1ODA3LDMzNTY1LDIxOTk2LDMzNjY5LDE3Njc1LDE1OTE0MSwzMzcwOCwzMzcyOSwzMzc0''@;'; put 'put ''NywxMzQzOCwxNTk0NDQsMjcyMjMsMzQxMzgsMTM0NjIsMTU5Mjk4LDE0MzA4NywzMzg4MCwxNTQ1OTYsMzM5MDUsMTU4MjcsMTc2MzYsMjczMDMsMzM4NjYsMTQ2NjEzLDMxMDY0LDMzOTYwLDE1ODYxNCwxNTkzNTEsMTU5Mjk5LDM0MDE0LDMzODA3LDMzNjgxLDE3NTY4LDMzOTM5LDM0MDIw''@;'; put 'put ''LDE1NDc2OSwxNjk2MCwxNTQ4MTYsMTc3MzEsMzQxMDAsMjMyODIsMTU5Mzg1LDE3NzAzLDM0MTYzLDE3Njg2LDI2NTU5LDM0MzI2LDE2NTQxMywxNjU0MzUsMzQyNDEsMTU5ODgwLDM0MzA2LDEzNjU3OCwxNTk5NDksMTk0OTk0LDE3NzcwLDM0MzQ0LDEzODk2LDEzNzM3OCwyMTQ5NSwxNjA2''@;'; put 'put ''NjYsMzQ0MzAsMzQ2NzMsMTcyMjgwLDM0Nzk4LDE0MjM3NSwzNDczNywzNDc3OCwzNDgzMSwyMjExMywzNDQxMiwyNjcxMCwxNzkzNSwzNDg4NSwzNDg4NiwxNjEyNDgsMTQ2ODczLDE2MTI1MiwzNDkxMCwzNDk3MiwxODAxMSwzNDk5NiwzNDk5NywyNTUzNywzNTAxMywzMDU4MywxNjE1NTEs''@;'; put 'put ''MzUyMDcsMzUyMTAsMzUyMzgsMzUyNDEsMzUyMzksMzUyNjAsMTY2NDM3LDM1MzAzLDE2MjA4NCwxNjI0OTMsMzU0ODQsMzA2MTEsMzczNzQsMzU0NzIsMTYyMzkzLDMxNDY1LDE2MjYxOCwxNDczNDMsMTgxOTUsMTYyNjE2LDI5MDUyLDM1NTk2LDM1NjE1LDE1MjYyNCwxNTI5MzMsMzU2NDcs''@;'; put 'put ''MzU2NjAsMzU2NjEsMzU0OTcsMTUwMTM4LDM1NzI4LDM1NzM5LDM1NTAzLDEzNjkyNywxNzk0MSwzNDg5NSwzNTk5NSwxNjMxNTYsMTYzMjE1LDE5NTAyOCwxNDExNywxNjMxNTUsMzYwNTQsMTYzMjI0LDE2MzI2MSwzNjExNCwzNjA5OSwxMzc0ODgsMzYwNTksMjg3NjQsMzYxMTMsMTUwNzI5''@;'; put 'put ''LDE2MDgwLDM2MjE1LDM2MjY1LDE2Mzg0MiwxMzUxODgsMTQ5ODk4LDE1MjI4LDE2NDI4NCwxNjAwMTIsMzE0NjMsMzY1MjUsMzY1MzQsMzY1NDcsMzc1ODgsMzY2MzMsMzY2NTMsMTY0NzA5LDE2NDg4MiwzNjc3MywzNzYzNSwxNzI3MDMsMTMzNzEyLDM2Nzg3LDE4NzMwLDE2NjM2NiwxNjUx''@;'; put 'put ''ODEsMTQ2ODc1LDI0MzEyLDE0Mzk3MCwzNjg1NywxNzIwNTIsMTY1NTY0LDE2NTEyMSwxNDAwNjksMTQ3MjAsMTU5NDQ3LDM2OTE5LDE2NTE4MCwxNjI0OTQsMzY5NjEsMTY1MjI4LDE2NTM4NywzNzAzMiwxNjU2NTEsMzcwNjAsMTY1NjA2LDM3MDM4LDM3MTE3LDM3MjIzLDE1MDg4LDM3Mjg5''@;'; put 'put ''LDM3MzE2LDMxOTE2LDE2NjE5NSwxMzg4ODksMzczOTAsMjc4MDcsMzc0NDEsMzc0NzQsMTUzMDE3LDM3NTYxLDE2NjU5OCwxNDY1ODcsMTY2NjY4LDE1MzA1MSwxMzQ0NDksMzc2NzYsMzc3MzksMTY2NjI1LDE2Njg5MSwyODgxNSwyMzIzNSwxNjY2MjYsMTY2NjI5LDE4Nzg5LDM3NDQ0LDE2''@;'; put 'put ''Njg5MiwxNjY5NjksMTY2OTExLDM3NzQ3LDM3OTc5LDM2NTQwLDM4Mjc3LDM4MzEwLDM3OTI2LDM4MzA0LDI4NjYyLDE3MDgxLDE0MDkyMiwxNjU1OTIsMTM1ODA0LDE0Njk5MCwxODkxMSwyNzY3NiwzODUyMywzODU1MCwxNjc0OCwzODU2MywxNTk0NDUsMjUwNTAsMzg1ODIsMzA5NjUsMTY2''@;'; put 'put ''NjI0LDM4NTg5LDIxNDUyLDE4ODQ5LDE1ODkwNCwxMzE3MDAsMTU2Njg4LDE2ODExMSwxNjgxNjUsMTUwMjI1LDEzNzQ5MywxNDQxMzgsMzg3MDUsMzQzNzAsMzg3MTAsMTg5NTksMTc3MjUsMTc3OTcsMTUwMjQ5LDI4Nzg5LDIzMzYxLDM4NjgzLDM4NzQ4LDE2ODQwNSwzODc0MywyMzM3MCwx''@;'; put 'put ''Njg0MjcsMzg3NTEsMzc5MjUsMjA2ODgsMTQzNTQzLDE0MzU0OCwzODc5MywzODgxNSwzODgzMywzODg0NiwzODg0OCwzODg2NiwzODg4MCwxNTI2ODQsMzg4OTQsMjk3MjQsMTY5MDExLDM4OTExLDM4OTAxLDE2ODk4OSwxNjIxNzAsMTkxNTMsMzg5NjQsMzg5NjMsMzg5ODcsMzkwMTQsMTUx''@;'; put 'put ''MTgsMTYwMTE3LDE1Njk3LDEzMjY1NiwxNDc4MDQsMTUzMzUwLDM5MTE0LDM5MDk1LDM5MTEyLDM5MTExLDE5MTk5LDE1OTAxNSwxMzY5MTUsMjE5MzYsMzkxMzcsMzkxNDIsMzkxNDgsMzc3NTIsMzkyMjUsMTUwMDU3LDE5MzE0LDE3MDA3MSwxNzAyNDUsMzk0MTMsMzk0MzYsMzk0ODMsMzk0''@;'; put 'put ''NDAsMzk1MTIsMTUzMzgxLDE0MDIwLDE2ODExMywxNzA5NjUsMzk2NDgsMzk2NTAsMTcwNzU3LDM5NjY4LDE5NDcwLDM5NzAwLDM5NzI1LDE2NTM3NiwyMDUzMiwzOTczMiwxNTgxMjAsMTQ1MzEsMTQzNDg1LDM5NzYwLDM5NzQ0LDE3MTMyNiwyMzEwOSwxMzczMTUsMzk4MjIsMTQ4MDQzLDM5''@;'; put 'put ''OTM4LDM5OTM1LDM5OTQ4LDE3MTYyNCw0MDQwNCwxNzE5NTksMTcyNDM0LDE3MjQ1OSwxNzIyNTcsMTcyMzIzLDE3MjUxMSw0MDMxOCw0MDMyMywxNzIzNDAsNDA0NjIsMjY3NjAsNDAzODgsMTM5NjExLDE3MjQzNSwxNzI1NzYsMTM3NTMxLDE3MjU5NSw0MDI0OSwxNzIyMTcsMTcyNzI0LDQw''@;'; put 'put ''NTkyLDQwNTk3LDQwNjA2LDQwNjEwLDE5NzY0LDQwNjE4LDQwNjIzLDE0ODMyNCw0MDY0MSwxNTIwMCwxNDgyMSwxNTY0NSwyMDI3NCwxNDI3MCwxNjY5NTUsNDA3MDYsNDA3MTIsMTkzNTAsMzc5MjQsMTU5MTM4LDQwNzI3LDQwNzI2LDQwNzYxLDIyMTc1LDIyMTU0LDQwNzczLDM5MzUyLDE2''@;'; put 'put ''ODA3NSwzODg5OCwzMzkxOSw0MDgwMiw0MDgwOSwzMTQ1Miw0MDg0NiwyOTIwNiwxOTM5MCwxNDk4NzcsMTQ5OTQ3LDI5MDQ3LDE1MDAwOCwxNDgyOTYsMTUwMDk3LDI5NTk4LDE2Njg3NCwxMzc0NjYsMzExMzUsMTY2MjcwLDE2NzQ3OCwzNzczNywzNzg3NSwxNjY0NjgsMzc2MTIsMzc3NjEs''@;'; put 'put ''Mzc4MzUsMTY2MjUyLDE0ODY2NSwyOTIwNywxNjEwNywzMDU3OCwzMTI5OSwyODg4MCwxNDg1OTUsMTQ4NDcyLDI5MDU0LDEzNzE5OSwyODgzNSwxMzc0MDYsMTQ0NzkzLDE2MDcxLDEzNzM0OSwxNTI2MjMsMTM3MjA4LDE0MTE0LDEzNjk1NSwxMzcyNzMsMTQwNDksMTM3MDc2LDEzNzQyNSwx''@;'; put 'put ''NTU0NjcsMTQxMTUsMTM2ODk2LDIyMzYzLDE1MDA1MywxMzYxOTAsMTM1ODQ4LDEzNjEzNCwxMzYzNzQsMzQwNTEsMTQ1MDYyLDM0MDUxLDMzODc3LDE0OTkwOCwxNjAxMDEsMTQ2OTkzLDE1MjkyNCwxNDcxOTUsMTU5ODI2LDE3NjUyLDE0NTEzNCwxNzAzOTcsMTU5NTI2LDI2NjE3LDE0MTMx''@;'; put 'put ''LDE1MzgxLDE1ODQ3LDIyNjM2LDEzNzUwNiwyNjY0MCwxNjQ3MSwxNDUyMTUsMTQ3NjgxLDE0NzU5NSwxNDc3MjcsMTU4NzUzLDIxNzA3LDIyMTc0LDE1NzM2MSwyMjE2MiwxMzUxMzUsMTM0MDU2LDEzNDY2OSwzNzgzMCwxNjY2NzUsMzc3ODgsMjAyMTYsMjA3NzksMTQzNjEsMTQ4NTM0LDIw''@;'; put 'put ''MTU2LDEzMjE5NywxMzE5NjcsMjAyOTksMjAzNjIsMTUzMTY5LDIzMTQ0LDEzMTQ5OSwxMzIwNDMsMTQ3NDUsMTMxODUwLDEzMjExNiwxMzM2NSwyMDI2NSwxMzE3NzYsMTY3NjAzLDEzMTcwMSwzNTU0NiwxMzE1OTYsMjAxMjAsMjA2ODUsMjA3NDksMjAzODYsMjAyMjcsMTUwMDMwLDE0NzA4''@;'; put 'put ''MiwyMDI5MCwyMDUyNiwyMDU4OCwyMDYwOSwyMDQyOCwyMDQ1MywyMDU2OCwyMDczMiwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyODI3OCwxNDQ3ODksMTQ3MDAxLDE0NzEzNSwyODAxOCwxMzczNDgsMTQ3MDgxLDIwOTA0LDIwOTMxLDEzMjU3NiwxNzYyOSwxMzIyNTksMTMyMjQyLDEzMjI0''@;'; put 'put ''MSwzNjIxOCwxNjY1NTYsMTMyODc4LDIxMDgxLDIxMTU2LDEzMzIzNSwyMTIxNywzNzc0MiwxODA0MiwyOTA2OCwxNDgzNjQsMTM0MTc2LDE0OTkzMiwxMzUzOTYsMjcwODksMTM0Njg1LDI5ODE3LDE2MDk0LDI5ODQ5LDI5NzE2LDI5NzgyLDI5NTkyLDE5MzQyLDE1MDIwNCwxNDc1OTcsMjE0''@;'; put 'put ''NTYsMTM3MDAsMjkxOTksMTQ3NjU3LDIxOTQwLDEzMTkwOSwyMTcwOSwxMzQwODYsMjIzMDEsMzc0NjksMzg2NDQsMzc3MzQsMjI0OTMsMjI0MTMsMjIzOTksMTM4ODYsMjI3MzEsMjMxOTMsMTY2NDcwLDEzNjk1NCwxMzcwNzEsMTM2OTc2LDIzMDg0LDIyOTY4LDM3NTE5LDIzMTY2LDIzMjQ3''@;'; put 'put ''LDIzMDU4LDE1MzkyNiwxMzc3MTUsMTM3MzEzLDE0ODExNywxNDA2OSwyNzkwOSwyOTc2MywyMzA3MywxNTUyNjcsMjMxNjksMTY2ODcxLDEzMjExNSwzNzg1NiwyOTgzNiwxMzU5MzksMjg5MzMsMTg4MDIsMzc4OTYsMTY2Mzk1LDM3ODIxLDE0MjQwLDIzNTgyLDIzNzEwLDI0MTU4LDI0MTM2''@;'; put 'put ''LDEzNzYyMiwxMzc1OTYsMTQ2MTU4LDI0MjY5LDIzMzc1LDEzNzQ3NSwxMzc0NzYsMTQwODEsMTM3Mzc2LDE0MDQ1LDEzNjk1OCwxNDAzNSwzMzA2NiwxNjY0NzEsMTM4NjgyLDE0NDQ5OCwxNjYzMTIsMjQzMzIsMjQzMzQsMTM3NTExLDEzNzEzMSwyMzE0NywxMzcwMTksMjMzNjQsMzQzMjQs''@;'; put 'put ''MTYxMjc3LDM0OTEyLDI0NzAyLDE0MTQwOCwxNDA4NDMsMjQ1MzksMTYwNTYsMTQwNzE5LDE0MDczNCwxNjgwNzIsMTU5NjAzLDI1MDI0LDEzMTEzNCwxMzExNDIsMTQwODI3LDI0OTg1LDI0OTg0LDI0NjkzLDE0MjQ5MSwxNDI1OTksMTQ5MjA0LDE2ODI2OSwyNTcxMywxNDkwOTMsMTQyMTg2''@;'; put 'put ''LDE0ODg5LDE0MjExNCwxNDQ0NjQsMTcwMjE4LDE0Mjk2OCwyNTM5OSwxNzMxNDcsMjU3ODIsMjUzOTMsMjU1NTMsMTQ5OTg3LDE0MjY5NSwyNTI1MiwxNDI0OTcsMjU2NTksMjU5NjMsMjY5OTQsMTUzNDgsMTQzNTAyLDE0NDA0NSwxNDk4OTcsMTQ0MDQzLDIxNzczLDE0NDA5NiwxMzc0MzMs''@;'; put 'put ''MTY5MDIzLDI2MzE4LDE0NDAwOSwxNDM3OTUsMTUwNzIsMTY3ODQsMTUyOTY0LDE2NjY5MCwxNTI5NzUsMTM2OTU2LDE1MjkyMywxNTI2MTMsMzA5NTgsMTQzNjE5LDEzNzI1OCwxNDM5MjQsMTM0MTIsMTQzODg3LDE0Mzc0NiwxNDgxNjksMjYyNTQsMTU5MDEyLDI2MjE5LDE5MzQ3LDI2MTYw''@;'; put 'put ''LDE2MTkwNCwxMzg3MzEsMjYyMTEsMTQ0MDgyLDE0NDA5NywyNjE0MiwxNTM3MTQsMTQ1NDUsMTQ1NDY2LDE0NTM0MCwxNTI1NywxNDUzMTQsMTQ0MzgyLDI5OTA0LDE1MjU0LDI2NTExLDE0OTAzNCwyNjgwNiwyNjY1NCwxNTMwMCwyNzMyNiwxNDQzNSwxNDUzNjUsMTQ4NjE1LDI3MTg3LDI3''@;'; put 'put ''MjE4LDI3MzM3LDI3Mzk3LDEzNzQ5MCwyNTg3MywyNjc3NiwyNzIxMiwxNTMxOSwyNzI1OCwyNzQ3OSwxNDczOTIsMTQ2NTg2LDM3NzkyLDM3NjE4LDE2Njg5MCwxNjY2MDMsMzc1MTMsMTYzODcwLDE2NjM2NCwzNzk5MSwyODA2OSwyODQyNywxNDk5OTYsMjgwMDcsMTQ3MzI3LDE1NzU5LDI4''@;'; put 'put ''MTY0LDE0NzUxNiwyMzEwMSwyODE3MCwyMjU5OSwyNzk0MCwzMDc4NiwyODk4NywxNDgyNTAsMTQ4MDg2LDI4OTEzLDI5MjY0LDI5MzE5LDI5MzMyLDE0OTM5MSwxNDkyODUsMjA4NTcsMTUwMTgwLDEzMjU4NywyOTgxOCwxNDcxOTIsMTQ0OTkxLDE1MDA5MCwxNDk3ODMsMTU1NjE3LDE2MTM0''@;'; put 'put ''LDE2MDQ5LDE1MDIzOSwxNjY5NDcsMTQ3MjUzLDI0NzQzLDE2MTE1LDI5OTAwLDI5NzU2LDM3NzY3LDI5NzUxLDE3NTY3LDE1OTIxMCwxNzc0NSwzMDA4MywxNjIyNywxNTA3NDUsMTUwNzkwLDE2MjE2LDMwMDM3LDMwMzIzLDE3MzUxMCwxNTEyOSwyOTgwMCwxNjY2MDQsMTQ5OTMxLDE0OTkw''@;'; put 'put ''MiwxNTA5OSwxNTgyMSwxNTAwOTQsMTYxMjcsMTQ5OTU3LDE0OTc0NywzNzM3MCwyMjMyMiwzNzY5OCwxNjY2MjcsMTM3MzE2LDIwNzAzLDE1MjA5NywxNTIwMzksMzA1ODQsMTQzOTIyLDMwNDc4LDMwNDc5LDMwNTg3LDE0OTE0MywxNDUyODEsMTQ5NDIsMTQ5NzQ0LDI5NzUyLDI5ODUxLDE2''@;'; put 'put ''MDYzLDE1MDIwMiwxNTAyMTUsMTY1ODQsMTUwMTY2LDE1NjA3OCwzNzYzOSwxNTI5NjEsMzA3NTAsMzA4NjEsMzA4NTYsMzA5MzAsMjk2NDgsMzEwNjUsMTYxNjAxLDE1MzMxNSwxNjY1NCwzMTEzMSwzMzk0MiwzMTE0MSwyNzE4MSwxNDcxOTQsMzEyOTAsMzEyMjAsMTY3NTAsMTM2OTM0LDE2''@;'; put 'put ''NjkwLDM3NDI5LDMxMjE3LDEzNDQ3NiwxNDk5MDAsMTMxNzM3LDE0Njg3NCwxMzcwNzAsMTM3MTksMjE4NjcsMTM2ODAsMTM5OTQsMTMxNTQwLDEzNDE1NywzMTQ1OCwyMzEyOSwxNDEwNDUsMTU0Mjg3LDE1NDI2OCwyMzA1MywxMzE2NzUsMzA5NjAsMjMwODIsMTU0NTY2LDMxNDg2LDE2ODg5''@;'; put 'put ''LDMxODM3LDMxODUzLDE2OTEzLDE1NDU0NywxNTUzMjQsMTU1MzAyLDMxOTQ5LDE1MDAwOSwxMzcxMzYsMzE4ODYsMzE4NjgsMzE5MTgsMjczMTQsMzIyMjAsMzIyNjMsMzIyMTEsMzI1OTAsMTU2MjU3LDE1NTk5NiwxNjI2MzIsMzIxNTEsMTU1MjY2LDE3MDAyLDE1ODU4MSwxMzMzOTgsMjY1''@;'; put 'put ''ODIsMTMxMTUwLDE0NDg0NywyMjQ2OCwxNTY2OTAsMTU2NjY0LDE0OTg1OCwzMjczMywzMTUyNywxMzMxNjQsMTU0MzQ1LDE1NDk0NywzMTUwMCwxNTUxNTAsMzkzOTgsMzQzNzMsMzk1MjMsMjcxNjQsMTQ0NDQ3LDE0ODE4LDE1MDAwNywxNTcxMDEsMzk0NTUsMTU3MDg4LDMzOTIwLDE2MDAz''@;'; put 'put ''OSwxNTg5MjksMTc2NDIsMzMwNzksMTc0MTAsMzI5NjYsMzMwMzMsMzMwOTAsMTU3NjIwLDM5MTA3LDE1ODI3NCwzMzM3OCwzMzM4MSwxNTgyODksMzM4NzUsMTU5MTQzLDM0MzIwLDE2MDI4MywyMzE3NCwxNjc2NywxMzcyODAsMjMzMzksMTM3Mzc3LDIzMjY4LDEzNzQzMiwzNDQ2NCwxOTUw''@;'; put 'put ''MDQsMTQ2ODMxLDM0ODYxLDE2MDgwMiwyMzA0MiwzNDkyNiwyMDI5MywzNDk1MSwzNTAwNywzNTA0NiwzNTE3MywzNTE0OSwxNTMyMTksMzUxNTYsMTYxNjY5LDE2MTY2OCwxNjY5MDEsMTY2ODczLDE2NjgxMiwxNjYzOTMsMTYwNDUsMzM5NTUsMTgxNjUsMTgxMjcsMTQzMjIsMzUzODksMzUz''@;'; put 'put ''NTYsMTY5MDMyLDI0Mzk3LDM3NDE5LDE0ODEwMCwyNjA2OCwyODk2OSwyODg2OCwxMzcyODUsNDAzMDEsMzU5OTksMzYwNzMsMTYzMjkyLDIyOTM4LDMwNjU5LDIzMDI0LDE3MjYyLDE0MDM2LDM2Mzk0LDM2NTE5LDE1MDUzNywzNjY1NiwzNjY4MiwxNzE0MCwyNzczNiwyODYwMywxNDAwNjUs''@;'; put 'put ''MTg1ODcsMjg1MzcsMjgyOTksMTM3MTc4LDM5OTEzLDE0MDA1LDE0OTgwNywzNzA1MSwzNzAxNSwyMTg3MywxODY5NCwzNzMwNywzNzg5MiwxNjY0NzUsMTY0ODIsMTY2NjUyLDM3OTI3LDE2Njk0MSwxNjY5NzEsMzQwMjEsMzUzNzEsMzgyOTcsMzgzMTEsMzgyOTUsMzgyOTQsMTY3MjIwLDI5''@;'; put 'put ''NzY1LDE2MDY2LDE0OTc1OSwxNTAwODIsMTQ4NDU4LDE2MTAzLDE0MzkwOSwzODU0MywxNjc2NTUsMTY3NTI2LDE2NzUyNSwxNjA3NiwxNDk5OTcsMTUwMTM2LDE0NzQzOCwyOTcxNCwyOTgwMywxNjEyNCwzODcyMSwxNjgxMTIsMjY2OTUsMTg5NzMsMTY4MDgzLDE1MzU2NywzODc0OSwzNzcz''@;'; put 'put ''NiwxNjYyODEsMTY2OTUwLDE2NjcwMywxNTY2MDYsMzc1NjIsMjMzMTMsMzU2ODksMTg3NDgsMjk2ODksMTQ3OTk1LDM4ODExLDM4NzY5LDM5MjI0LDEzNDk1MCwyNDAwMSwxNjY4NTMsMTUwMTk0LDM4OTQzLDE2OTE3OCwzNzYyMiwxNjk0MzEsMzczNDksMTc2MDAsMTY2NzM2LDE1MDExOSwx''@;'; put 'put ''NjY3NTYsMzkxMzIsMTY2NDY5LDE2MTI4LDM3NDE4LDE4NzI1LDMzODEyLDM5MjI3LDM5MjQ1LDE2MjU2NiwxNTg2OSwzOTMyMywxOTMxMSwzOTMzOCwzOTUxNiwxNjY3NTcsMTUzODAwLDI3Mjc5LDM5NDU3LDIzMjk0LDM5NDcxLDE3MDIyNSwxOTM0NCwxNzAzMTIsMzkzNTYsMTkzODksMTkz''@;'; put 'put ''NTEsMzc3NTcsMjI2NDIsMTM1OTM4LDIyNTYyLDE0OTk0NCwxMzY0MjQsMzA3ODgsMTQxMDg3LDE0Njg3MiwyNjgyMSwxNTc0MSwzNzk3NiwxNDYzMSwyNDkxMiwxNDExODUsMTQxNjc1LDI0ODM5LDQwMDE1LDQwMDE5LDQwMDU5LDM5OTg5LDM5OTUyLDM5ODA3LDM5ODg3LDE3MTU2NSwzOTgz''@;'; put 'put ''OSwxNzI1MzMsMTcyMjg2LDQwMjI1LDE5NjMwLDE0NzcxNiw0MDQ3MiwxOTYzMiw0MDIwNCwxNzI0NjgsMTcyMjY5LDE3MjI3NSwxNzAyODcsNDAzNTcsMzM5ODEsMTU5MjUwLDE1OTcxMSwxNTg1OTQsMzQzMDAsMTc3MTUsMTU5MTQwLDE1OTM2NCwxNTkyMTYsMzM4MjQsMzQyODYsMTU5MjMy''@;'; put 'put ''LDE0NTM2NywxNTU3NDgsMzEyMDIsMTQ0Nzk2LDE0NDk2MCwxODczMywxNDk5ODIsMTU3MTQsMzc4NTEsMzc1NjYsMzc3MDQsMTMxNzc1LDMwOTA1LDM3NDk1LDM3OTY1LDIwNDUyLDEzMzc2LDM2OTY0LDE1MjkyNSwzMDc4MSwzMDgwNCwzMDkwMiwzMDc5NSwxMzcwNDcsMTQzODE3LDE0OTgy''@;'; put 'put ''NSwxMzk3OCwyMDMzOCwyODYzNCwyODYzMywyODcwMiwyODcwMiwyMTUyNCwxNDc4OTMsMjI0NTksMjI3NzEsMjI0MTAsNDAyMTQsMjI0ODcsMjg5ODAsMTM0ODcsMTQ3ODg0LDI5MTYzLDE1ODc4NCwxNTE0NDcsMjMzMzYsMTM3MTQxLDE2NjQ3MywyNDg0NCwyMzI0NiwyMzA1MSwxNzA4NCwx''@;'; put 'put ''NDg2MTYsMTQxMjQsMTkzMjMsMTY2Mzk2LDM3ODE5LDM3ODE2LDEzNzQzMCwxMzQ5NDEsMzM5MDYsMTU4OTEyLDEzNjIxMSwxNDgyMTgsMTQyMzc0LDE0ODQxNywyMjkzMiwxNDY4NzEsMTU3NTA1LDMyMTY4LDE1NTk5NSwxNTU4MTIsMTQ5OTQ1LDE0OTg5OSwxNjYzOTQsMzc2MDUsMjk2NjYs''@;'; put 'put ''MTYxMDUsMjk4NzYsMTY2NzU1LDEzNzM3NSwxNjA5NywxNTAxOTUsMjczNTIsMjk2ODMsMjk2OTEsMTYwODYsMTUwMDc4LDE1MDE2NCwxMzcxNzcsMTUwMTE4LDEzMjAwNywxMzYyMjgsMTQ5OTg5LDI5NzY4LDE0OTc4MiwyODgzNywxNDk4NzgsMzc1MDgsMjk2NzAsMzc3MjcsMTMyMzUwLDM3''@;'; put 'put ''NjgxLDE2NjYwNiwxNjY0MjIsMzc3NjYsMTY2ODg3LDE1MzA0NSwxODc0MSwxNjY1MzAsMjkwMzUsMTQ5ODI3LDEzNDM5OSwyMjE4MCwxMzI2MzQsMTM0MTIzLDEzNDMyOCwyMTc2MiwzMTE3MiwxMzcyMTAsMzIyNTQsMTM2ODk4LDE1MDA5NiwxMzcyOTgsMTc3MTAsMzc4ODksMTQwOTAsMTY2''@;'; put 'put ''NTkyLDE0OTkzMywyMjk2MCwxMzc0MDcsMTM3MzQ3LDE2MDkwMCwyMzIwMSwxNDA1MCwxNDY3NzksMTRlMywzNzQ3MSwyMzE2MSwxNjY1MjksMTM3MzE0LDM3NzQ4LDE1NTY1LDEzMzgxMiwxOTA5NCwxNDczMCwyMDcyNCwxNTcyMSwxNTY5MiwxMzYwOTIsMjkwNDUsMTcxNDcsMTY0Mzc2LDI4''@;'; put 'put ''MTc1LDE2ODE2NCwxNzY0MywyNzk5MSwxNjM0MDcsMjg3NzUsMjc4MjMsMTU1NzQsMTQ3NDM3LDE0Njk4OSwyODE2MiwyODQyOCwxNTcyNywxMzIwODUsMzAwMzMsMTQwMTIsMTM1MTIsMTgwNDgsMTYwOTAsMTg1NDUsMjI5ODAsMzc0ODYsMTg3NTAsMzY2NzMsMTY2OTQwLDE1ODY1NiwyMjU0''@;'; put 'put ''NiwyMjQ3MiwxNDAzOCwxMzYyNzQsMjg5MjYsMTQ4MzIyLDE1MDEyOSwxNDMzMzEsMTM1ODU2LDE0MDIyMSwyNjgwOSwyNjk4MywxMzYwODgsMTQ0NjEzLDE2MjgwNCwxNDUxMTksMTY2NTMxLDE0NTM2NiwxNDQzNzgsMTUwNjg3LDI3MTYyLDE0NTA2OSwxNTg5MDMsMzM4NTQsMTc2MzEsMTc2''@;'; put 'put ''MTQsMTU5MDE0LDE1OTA1NywxNTg4NTAsMTU5NzEwLDI4NDM5LDE2MDAwOSwzMzU5NywxMzcwMTgsMzM3NzMsMTU4ODQ4LDE1OTgyNywxMzcxNzksMjI5MjEsMjMxNzAsMTM3MTM5LDIzMTM3LDIzMTUzLDEzNzQ3NywxNDc5NjQsMTQxMjUsMjMwMjMsMTM3MDIwLDE0MDIzLDI5MDcwLDM3Nzc2''@;'; put 'put ''LDI2MjY2LDE0ODEzMywyMzE1MCwyMzA4MywxNDgxMTUsMjcxNzksMTQ3MTkzLDE2MTU5MCwxNDg1NzEsMTQ4MTcwLDI4OTU3LDE0ODA1NywxNjYzNjksMjA0MDAsMTU5MDE2LDIzNzQ2LDE0ODY4NiwxNjM0MDUsMTQ4NDEzLDI3MTQ4LDE0ODA1NCwxMzU5NDAsMjg4MzgsMjg5NzksMTQ4NDU3''@;'; put 'put ''LDE1NzgxLDI3ODcxLDE5NDU5NywxNTAwOTUsMzIzNTcsMjMwMTksMjM4NTUsMTU4NTksMjQ0MTIsMTUwMTA5LDEzNzE4MywzMjE2NCwzMzgzMCwyMTYzNywxNDYxNzAsMTQ0MTI4LDEzMTYwNCwyMjM5OCwxMzMzMzMsMTMyNjMzLDE2MzU3LDEzOTE2NiwxNzI3MjYsMjg2NzUsMTY4MjgzLDIz''@;'; put 'put ''OTIwLDI5NTgzLDMxOTU1LDE2NjQ4OSwxNjg5OTIsMjA0MjQsMzI3NDMsMjkzODksMjk0NTYsMTYyNTQ4LDI5NDk2LDI5NDk3LDE1MzMzNCwyOTUwNSwyOTUxMiwxNjA0MSwxNjI1ODQsMzY5NzIsMjkxNzMsMTQ5NzQ2LDI5NjY1LDMzMjcwLDE2MDc0LDMwNDc2LDE2MDgxLDI3ODEwLDIyMjY5''@;'; put 'put ''LDI5NzIxLDI5NzI2LDI5NzI3LDE2MDk4LDE2MTEyLDE2MTE2LDE2MTIyLDI5OTA3LDE2MTQyLDE2MjExLDMwMDE4LDMwMDYxLDMwMDY2LDMwMDkzLDE2MjUyLDMwMTUyLDMwMTcyLDE2MzIwLDMwMjg1LDE2MzQzLDMwMzI0LDE2MzQ4LDMwMzMwLDE1MTM4OCwyOTA2NCwyMjA1MSwzNTIwMCwy''@;'; put 'put ''MjYzMywxNjQxMywzMDUzMSwxNjQ0MSwyNjQ2NSwxNjQ1MywxMzc4NywzMDYxNiwxNjQ5MCwxNjQ5NSwyMzY0NiwzMDY1NCwzMDY2NywyMjc3MCwzMDc0NCwyODg1NywzMDc0OCwxNjU1MiwzMDc3NywzMDc5MSwzMDgwMSwzMDgyMiwzMzg2NCwxNTI4ODUsMzEwMjcsMjY2MjcsMzEwMjYsMTY2''@;'; put 'put ''NDMsMTY2NDksMzExMjEsMzExMjksMzY3OTUsMzEyMzgsMzY3OTYsMTY3NDMsMzEzNzcsMTY4MTgsMzE0MjAsMzM0MDEsMTY4MzYsMzE0MzksMzE0NTEsMTY4NDcsMjAwMDEsMzE1ODYsMzE1OTYsMzE2MTEsMzE3NjIsMzE3NzEsMTY5OTIsMTcwMTgsMzE4NjcsMzE5MDAsMTcwMzYsMzE5Mjgs''@;'; put 'put ''MTcwNDQsMzE5ODEsMzY3NTUsMjg4NjQsMTM0MzUxLDMyMjA3LDMyMjEyLDMyMjA4LDMyMjUzLDMyNjg2LDMyNjkyLDI5MzQzLDE3MzAzLDMyODAwLDMyODA1LDMxNTQ1LDMyODE0LDMyODE3LDMyODUyLDE1ODIwLDIyNDUyLDI4ODMyLDMyOTUxLDMzMDAxLDE3Mzg5LDMzMDM2LDI5NDgyLDMz''@;'; put 'put ''MDM4LDMzMDQyLDMwMDQ4LDMzMDQ0LDE3NDA5LDE1MTYxLDMzMTEwLDMzMTEzLDMzMTE0LDE3NDI3LDIyNTg2LDMzMTQ4LDMzMTU2LDE3NDQ1LDMzMTcxLDE3NDUzLDMzMTg5LDIyNTExLDMzMjE3LDMzMjUyLDMzMzY0LDE3NTUxLDMzNDQ2LDMzMzk4LDMzNDgyLDMzNDk2LDMzNTM1LDE3NTg0''@;'; put 'put ''LDMzNjIzLDM4NTA1LDI3MDE4LDMzNzk3LDI4OTE3LDMzODkyLDI0ODAzLDMzOTI4LDE3NjY4LDMzOTgyLDM0MDE3LDM0MDQwLDM0MDY0LDM0MTA0LDM0MTMwLDE3NzIzLDM0MTU5LDM0MTYwLDM0MjcyLDE3NzgzLDM0NDE4LDM0NDUwLDM0NDgyLDM0NTQzLDM4NDY5LDM0Njk5LDE3OTI2LDE3''@;'; put 'put ''OTQzLDM0OTkwLDM1MDcxLDM1MTA4LDM1MTQzLDM1MjE3LDE2MjE1MSwzNTM2OSwzNTM4NCwzNTQ3NiwzNTUwOCwzNTkyMSwzNjA1MiwzNjA4MiwzNjEyNCwxODMyOCwyMjYyMywzNjI5MSwxODQxMywyMDIwNiwzNjQxMCwyMTk3NiwyMjM1NiwzNjQ2NSwyMjAwNSwzNjUyOCwxODQ4NywzNjU1''@;'; put 'put ''OCwzNjU3OCwzNjU4MCwzNjU4OSwzNjU5NCwzNjc5MSwzNjgwMSwzNjgxMCwzNjgxMiwzNjkxNSwzOTM2NCwxODYwNSwzOTEzNiwzNzM5NSwxODcxOCwzNzQxNiwzNzQ2NCwzNzQ4MywzNzU1MywzNzU1MCwzNzU2NywzNzYwMywzNzYxMSwzNzYxOSwzNzYyMCwzNzYyOSwzNzY5OSwzNzc2NCwz''@;'; put 'put ''NzgwNSwxODc1NywxODc2OSw0MDYzOSwzNzkxMSwyMTI0OSwzNzkxNywzNzkzMywzNzk1MCwxODc5NCwzNzk3MiwzODAwOSwzODE4OSwzODMwNiwxODg1NSwzODM4OCwzODQ1MSwxODkxNywyNjUyOCwxODk4MCwzODcyMCwxODk5NywzODgzNCwzODg1MCwyMjEwMCwxOTE3MiwyNDgwOCwzOTA5''@;'; put 'put ''NywxOTIyNSwzOTE1MywyMjU5NiwzOTE4MiwzOTE5MywyMDkxNiwzOTE5NiwzOTIyMywzOTIzNCwzOTI2MSwzOTI2NiwxOTMxMiwzOTM2NSwxOTM1NywzOTQ4NCwzOTY5NSwzMTM2MywzOTc4NSwzOTgwOSwzOTkwMSwzOTkyMSwzOTkyNCwxOTU2NSwzOTk2OCwxNDE5MSwxMzgxNzgsNDAyNjUs''@;'; put 'put ''Mzk5OTQsNDA3MDIsMjIwOTYsNDAzMzksNDAzODEsNDAzODQsNDA0NDQsMzgxMzQsMzY3OTAsNDA1NzEsNDA2MjAsNDA2MjUsNDA2MzcsNDA2NDYsMzgxMDgsNDA2NzQsNDA2ODksNDA2OTYsMzE0MzIsNDA3NzIsMTMxMjIwLDEzMTc2NywxMzJlMywyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEs''@;'; put 'put ''MjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQyMjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1''@;'; put 'put ''LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwxMzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEz''@;'; put 'put ''ODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEzNzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1''@;'; put 'put ''MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywzNTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4''@;'; put 'put ''MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMzMDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0''@;'; put 'put ''OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0''@;'; put 'put ''LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcsMTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5''@;'; put 'put ''MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAxLDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4NiwxNTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgy''@;'; put 'put ''MDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQyODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDksMjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1''@;'; put 'put ''NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1''@;'; put 'put ''NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQsMTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5''@;'; put 'put ''MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAz''@;'; put 'put ''OTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEyMDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAs''@;'; put 'put ''MTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcs''@;'; put 'put ''MTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwxNjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1''@;'; put 'put ''MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQsMTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQs''@;'; put 'put ''MTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIsMTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5''@;'; put 'put ''MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwxOTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2Nzkz''@;'; put 'put ''LDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4''@;'; put 'put ''LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIxNTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAsMjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5''@;'; put 'put ''NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUyNywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYz''@;'; put 'put ''NTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyZTMsMjE5NDYsMjE2NTUsMjE4NzQsMTM0MjA5LDEzNDI5NCwyNDI3MiwxNTE4ODAsMTM0Nzc0LDE0MjQzNCwxMzQ4MTgsNDA2MTksMzIwOTAsMjE5ODIsMTM1Mjg1LDI1MjQ1LDM4NzY1LDIxNjUyLDM2MDQ1LDI5MTc0LDM3MjM4LDI1NTk2LDI1NTI5''@;'; put 'put ''LDI1NTk4LDIxODY1LDE0MjE0Nyw0MDA1MCwxNDMwMjcsMjA4OTAsMTM1MzUsMTM0NTY3LDIwOTAzLDIxNTgxLDIxNzkwLDIxNzc5LDMwMzEwLDM2Mzk3LDE1NzgzNCwzMDEyOSwzMjk1MCwzNDgyMCwzNDY5NCwzNTAxNSwzMzIwNiwzMzgyMCwxMzUzNjEsMTc2NDQsMjk0NDQsMTQ5MjU0LDIz''@;'; put 'put ''NDQwLDMzNTQ3LDE1Nzg0MywyMjEzOSwxNDEwNDQsMTYzMTE5LDE0Nzg3NSwxNjMxODcsMTU5NDQwLDE2MDQzOCwzNzIzMiwxMzU2NDEsMzczODQsMTQ2Njg0LDE3MzczNywxMzQ4MjgsMTM0OTA1LDI5Mjg2LDEzODQwMiwxODI1NCwxNTE0OTAsMTYzODMzLDEzNTE0NywxNjYzNCw0MDAyOSwy''@;'; put 'put ''NTg4NywxNDI3NTIsMTg2NzUsMTQ5NDcyLDE3MTM4OCwxMzUxNDgsMTM0NjY2LDI0Njc0LDE2MTE4NywxMzUxNDksbnVsbCwxNTU3MjAsMTM1NTU5LDI5MDkxLDMyMzk4LDQwMjcyLDE5OTk0LDE5OTcyLDEzNjg3LDIzMzA5LDI3ODI2LDIxMzUxLDEzOTk2LDE0ODEyLDIxMzczLDEzOTg5LDE0''@;'; put 'put ''OTAxNiwyMjY4MiwxNTAzODIsMzMzMjUsMjE1NzksMjI0NDIsMTU0MjYxLDEzMzQ5NyxudWxsLDE0OTMwLDE0MDM4OSwyOTU1NiwxNzE2OTIsMTk3MjEsMzk5MTcsMTQ2Njg2LDE3MTgyNCwxOTU0NywxNTE0NjUsMTY5Mzc0LDE3MTk5OCwzMzg4NCwxNDY4NzAsMTYwNDM0LDE1NzYxOSwxNDUx''@;'; put 'put ''ODQsMjUzOTAsMzIwMzcsMTQ3MTkxLDE0Njk4OCwxNDg5MCwzNjg3MiwyMTE5NiwxNTk4OCwxMzk0NiwxNzg5NywxMzIyMzgsMzAyNzIsMjMyODAsMTM0ODM4LDMwODQyLDE2MzYzMCwyMjY5NSwxNjU3NSwyMjE0MCwzOTgxOSwyMzkyNCwzMDI5MiwxNzMxMDgsNDA1ODEsMTk2ODEsMzAyMDEs''@;'; put 'put ''MTQzMzEsMjQ4NTcsMTQzNTc4LDE0ODQ2NixudWxsLDIyMTA5LDEzNTg0OSwyMjQzOSwxNDk4NTksMTcxNTI2LDIxMDQ0LDE1OTkxOCwxMzc0MSwyNzcyMiw0MDMxNiwzMTgzMCwzOTczNywyMjQ5NCwxMzcwNjgsMjM2MzUsMjU4MTEsMTY5MTY4LDE1NjQ2OSwxNjAxMDAsMzQ0NzcsMTM0NDQw''@;'; put 'put ''LDE1OTAxMCwxNTAyNDIsMTM0NTEzLG51bGwsMjA5OTAsMTM5MDIzLDIzOTUwLDM4NjU5LDEzODcwNSw0MDU3NywzNjk0MCwzMTUxOSwzOTY4MiwyMzc2MSwzMTY1MSwyNTE5MiwyNTM5NywzOTY3OSwzMTY5NSwzOTcyMiwzMTg3MCwzOTcyNiwzMTgxMCwzMTg3OCwzOTk1NywzMTc0MCwzOTY4''@;'; put 'put ''OSw0MDcyNywzOTk2MywxNDk4MjIsNDA3OTQsMjE4NzUsMjM0OTEsMjA0NzcsNDA2MDAsMjA0NjYsMjEwODgsMTU4NzgsMjEyMDEsMjIzNzUsMjA1NjYsMjI5NjcsMjQwODIsMzg4NTYsNDAzNjMsMzY3MDAsMjE2MDksMzg4MzYsMzkyMzIsMzg4NDIsMjEyOTIsMjQ4ODAsMjY5MjQsMjE0NjYs''@;'; put 'put ''Mzk5NDYsNDAxOTQsMTk1MTUsMzg0NjUsMjcwMDgsMjA2NDYsMzAwMjIsMTM3MDY5LDM5Mzg2LDIxMTA3LG51bGwsMzcyMDksMzg1MjksMzcyMTIsbnVsbCwzNzIwMSwxNjc1NzUsMjU0NzEsMTU5MDExLDI3MzM4LDIyMDMzLDM3MjYyLDMwMDc0LDI1MjIxLDEzMjA5MiwyOTUxOSwzMTg1Niwx''@;'; put 'put ''NTQ2NTcsMTQ2Njg1LG51bGwsMTQ5Nzg1LDMwNDIyLDM5ODM3LDIwMDEwLDEzNDM1NiwzMzcyNiwzNDg4MixudWxsLDIzNjI2LDI3MDcyLDIwNzE3LDIyMzk0LDIxMDIzLDI0MDUzLDIwMTc0LDI3Njk3LDEzMTU3MCwyMDI4MSwyMTY2MCwyMTcyMiwyMTE0NiwzNjIyNiwxMzgyMiwyNDMzMiwx''@;'; put 'put ''MzgxMSxudWxsLDI3NDc0LDM3MjQ0LDQwODY5LDM5ODMxLDM4OTU4LDM5MDkyLDM5NjEwLDQwNjE2LDQwNTgwLDI5MDUwLDMxNTA4LG51bGwsMjc2NDIsMzQ4NDAsMzI2MzIsbnVsbCwyMjA0OCwxNzM2NDIsMzY0NzEsNDA3ODcsbnVsbCwzNjMwOCwzNjQzMSw0MDQ3NiwzNjM1MywyNTIxOCwx''@;'; put 'put ''NjQ3MzMsMzYzOTIsMzY0NjksMzE0NDMsMTUwMTM1LDMxMjk0LDMwOTM2LDI3ODgyLDM1NDMxLDMwMjE1LDE2NjQ5MCw0MDc0MiwyNzg1NCwzNDc3NCwzMDE0NywxNzI3MjIsMzA4MDMsMTk0NjI0LDM2MTA4LDI5NDEwLDI5NTUzLDM1NjI5LDI5NDQyLDI5OTM3LDM2MDc1LDE1MDIwMywzNDM1''@;'; put 'put ''MSwyNDUwNiwzNDk3NiwxNzU5MSxudWxsLDEzNzI3NSwxNTkyMzcsbnVsbCwzNTQ1NCwxNDA1NzEsbnVsbCwyNDgyOSwzMDMxMSwzOTYzOSw0MDI2MCwzNzc0MiwzOTgyMywzNDgwNSxudWxsLDM0ODMxLDM2MDg3LDI5NDg0LDM4Njg5LDM5ODU2LDEzNzgyLDI5MzYyLDE5NDYzLDMxODI1LDM5''@;'; put 'put ''MjQyLDE1NTk5MywyNDkyMSwxOTQ2MCw0MDU5OCwyNDk1NyxudWxsLDIyMzY3LDI0OTQzLDI1MjU0LDI1MTQ1LDI1Mjk0LDE0OTQwLDI1MDU4LDIxNDE4LDE0NDM3MywyNTQ0NCwyNjYyNiwxMzc3OCwyMzg5NSwxNjY4NTAsMzY4MjYsMTY3NDgxLG51bGwsMjA2OTcsMTM4NTY2LDMwOTgyLDIx''@;'; put 'put ''Mjk4LDM4NDU2LDEzNDk3MSwxNjQ4NSxudWxsLDMwNzE4LG51bGwsMzE5MzgsMTU1NDE4LDMxOTYyLDMxMjc3LDMyODcwLDMyODY3LDMyMDc3LDI5OTU3LDI5OTM4LDM1MjIwLDMzMzA2LDI2MzgwLDMyODY2LDE2MDkwMiwzMjg1OSwyOTkzNiwzMzAyNywzMDUwMCwzNTIwOSwxNTc2NDQsMzAw''@;'; put 'put ''MzUsMTU5NDQxLDM0NzI5LDM0NzY2LDMzMjI0LDM0NzAwLDM1NDAxLDM2MDEzLDM1NjUxLDMwNTA3LDI5OTQ0LDM0MDEwLDEzODc3LDI3MDU4LDM2MjYyLG51bGwsMzUyNDEsMjk4MDAsMjgwODksMzQ3NTMsMTQ3NDczLDI5OTI3LDE1ODM1LDI5MDQ2LDI0NzQwLDI0OTg4LDE1NTY5LDI5MDI2''@;'; put 'put ''LDI0Njk1LG51bGwsMzI2MjUsMTY2NzAxLDI5MjY0LDI0ODA5LDE5MzI2LDIxMDI0LDE1Mzg0LDE0NjYzMSwxNTUzNTEsMTYxMzY2LDE1Mjg4MSwxMzc1NDAsMTM1OTM0LDE3MDI0MywxNTkxOTYsMTU5OTE3LDIzNzQ1LDE1NjA3NywxNjY0MTUsMTQ1MDE1LDEzMTMxMCwxNTc3NjYsMTUxMzEw''@;'; put 'put ''LDE3NzYyLDIzMzI3LDE1NjQ5Miw0MDc4NCw0MDYxNCwxNTYyNjcsMTIyODgsNjUyOTIsMTIyODksMTIyOTAsNjUyOTQsODIzMSw2NTMwNyw2NTMwNiw2NTMxMSw2NTI4MSw2NTA3Miw4MjMwLDgyMjksNjUxMDQsNjUxMDUsNjUxMDYsMTgzLDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1Mzcy''@;'; put 'put ''LDgyMTEsNjUwNzMsODIxMiw2NTA3NSw5NTg4LDY1MDc2LDY1MTAzLDY1Mjg4LDY1Mjg5LDY1MDc3LDY1MDc4LDY1MzcxLDY1MzczLDY1MDc5LDY1MDgwLDEyMzA4LDEyMzA5LDY1MDgxLDY1MDgyLDEyMzA0LDEyMzA1LDY1MDgzLDY1MDg0LDEyMjk4LDEyMjk5LDY1MDg1LDY1MDg2LDEyMjk2''@;'; put 'put ''LDEyMjk3LDY1MDg3LDY1MDg4LDEyMzAwLDEyMzAxLDY1MDg5LDY1MDkwLDEyMzAyLDEyMzAzLDY1MDkxLDY1MDkyLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMTcsMTIzMTgsODI0NSw4MjQyLDY1MjgzLDY1Mjg2LDY1MjkwLDgy''@;'; put 'put ''NTEsMTY3LDEyMjkxLDk2NzUsOTY3OSw5NjUxLDk2NTAsOTY3OCw5NzM0LDk3MzMsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjYxLDk2NjAsMTI5NjMsODQ1MywxNzUsNjU1MDcsNjUzNDMsNzE3LDY1MDk3LDY1MDk4LDY1MTAxLDY1MTAyLDY1MDk5LDY1MTAwLDY1MTE5LDY1MTIwLDY1MTIxLDY1''@;'; put 'put ''MjkxLDY1MjkzLDIxNSwyNDcsMTc3LDg3MzAsNjUzMDgsNjUzMTAsNjUzMDksODgwNiw4ODA3LDg4MDAsODczNCw4Nzg2LDg4MDEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUzNzQsODc0NSw4NzQ2LDg4NjksODczNiw4NzM1LDg4OTUsMTMyNjYsMTMyNjUsODc0Nyw4NzUwLDg3''@;'; put 'put ''NTcsODc1Niw5NzkyLDk3OTQsODg1Myw4ODU3LDg1OTMsODU5NSw4NTkyLDg1OTQsODU5OCw4NTk5LDg2MDEsODYwMCw4NzQxLDg3MzksNjUyOTUsNjUzNDAsODcyNSw2NTEyOCw2NTI4NCw2NTUwOSwxMjMwNiw2NTUwNCw2NTUwNSw2NTI4NSw2NTMxMiw4NDUxLDg0NTcsNjUxMjksNjUxMzAs''@;'; put 'put ''NjUxMzEsMTMyNjksMTMyMTIsMTMyMTMsMTMyMTQsMTMyNjIsMTMyMTcsMTMxOTgsMTMxOTksMTMyNTIsMTc2LDIwODI1LDIwODI3LDIwODMwLDIwODI5LDIwODMzLDIwODM1LDIxOTkxLDI5OTI5LDMxOTUwLDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjE1LDk2''@;'; put 'put ''MTQsOTYxMyw5NjEyLDk2MTEsOTYxMCw5NjA5LDk1MzIsOTUyNCw5NTE2LDk1MDgsOTUwMCw5NjIwLDk0NzIsOTQ3NCw5NjIxLDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTU4MSw5NTgyLDk1ODQsOTU4Myw5NTUyLDk1NjYsOTU3OCw5NTY5LDk2OTgsOTY5OSw5NzAxLDk3MDAsOTU4NSw5NTg2LDk1''@;'; put 'put ''ODcsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MywxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMy''@;'; put 'put ''OSwyMTMxMywyMTMxNiwyMTMxNyw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2''@;'; put 'put ''NTMzNyw2NTMzOCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3''@;'; put 'put ''MCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYx''@;'; put 'put ''LDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3''@;'; put 'put ''MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw3MjksNzEzLDcxNCw3MTEsNzE1LDkyMTYsOTIxNyw5MjE4LDkyMTksOTIyMCw5MjIxLDkyMjIsOTIyMyw5MjI0LDkyMjUsOTIyNiw5MjI3''@;'; put 'put ''LDkyMjgsOTIyOSw5MjMwLDkyMzEsOTIzMiw5MjMzLDkyMzQsOTIzNSw5MjM2LDkyMzcsOTIzOCw5MjM5LDkyNDAsOTI0MSw5MjQyLDkyNDMsOTI0NCw5MjQ1LDkyNDYsOTI0Nyw5MjQ5LDgzNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTY4LDIwMDU3LDE5OTY5LDE5OTcxLDIwMDM1LDIwMDYxLDIwMTAyLDIwMTA4LDIwMTU0LDIwNzk5LDIwODM3LDIwODQzLDIw''@;'; put 'put ''OTYwLDIwOTkyLDIwOTkzLDIxMTQ3LDIxMjY5LDIxMzEzLDIxMzQwLDIxNDQ4LDE5OTc3LDE5OTc5LDE5OTc2LDE5OTc4LDIwMDExLDIwMDI0LDIwOTYxLDIwMDM3LDIwMDQwLDIwMDYzLDIwMDYyLDIwMTEwLDIwMTI5LDIwODAwLDIwOTk1LDIxMjQyLDIxMzE1LDIxNDQ5LDIxNDc1LDIyMzAz''@;'; put 'put ''LDIyNzYzLDIyODA1LDIyODIzLDIyODk5LDIzMzc2LDIzMzc3LDIzMzc5LDIzNTQ0LDIzNTY3LDIzNTg2LDIzNjA4LDIzNjY1LDI0MDI5LDI0MDM3LDI0MDQ5LDI0MDUwLDI0MDUxLDI0MDYyLDI0MTc4LDI0MzE4LDI0MzMxLDI0MzM5LDI1MTY1LDE5OTg1LDE5OTg0LDE5OTgxLDIwMDEzLDIw''@;'; put 'put ''MDE2LDIwMDI1LDIwMDQzLDIzNjA5LDIwMTA0LDIwMTEzLDIwMTE3LDIwMTE0LDIwMTE2LDIwMTMwLDIwMTYxLDIwMTYwLDIwMTYzLDIwMTY2LDIwMTY3LDIwMTczLDIwMTcwLDIwMTcxLDIwMTY0LDIwODAzLDIwODAxLDIwODM5LDIwODQ1LDIwODQ2LDIwODQ0LDIwODg3LDIwOTgyLDIwOTk4''@;'; put 'put ''LDIwOTk5LDIxZTMsMjEyNDMsMjEyNDYsMjEyNDcsMjEyNzAsMjEzMDUsMjEzMjAsMjEzMTksMjEzMTcsMjEzNDIsMjEzODAsMjE0NTEsMjE0NTAsMjE0NTMsMjI3NjQsMjI4MjUsMjI4MjcsMjI4MjYsMjI4MjksMjMzODAsMjM1NjksMjM1ODgsMjM2MTAsMjM2NjMsMjQwNTIsMjQxODcsMjQz''@;'; put 'put ''MTksMjQzNDAsMjQzNDEsMjQ1MTUsMjUwOTYsMjUxNDIsMjUxNjMsMjUxNjYsMjU5MDMsMjU5OTEsMjYwMDcsMjYwMjAsMjYwNDEsMjYwODUsMjYzNTIsMjYzNzYsMjY0MDgsMjc0MjQsMjc0OTAsMjc1MTMsMjc1OTUsMjc2MDQsMjc2MTEsMjc2NjMsMjc3MDAsMjg3NzksMjkyMjYsMjkyMzgs''@;'; put 'put ''MjkyNDMsMjkyNTUsMjkyNzMsMjkyNzUsMjkzNTYsMjk1NzksMTk5OTMsMTk5OTAsMTk5ODksMTk5ODgsMTk5OTIsMjAwMjcsMjAwNDUsMjAwNDcsMjAwNDYsMjAxOTcsMjAxODQsMjAxODAsMjAxODEsMjAxODIsMjAxODMsMjAxOTUsMjAxOTYsMjAxODUsMjAxOTAsMjA4MDUsMjA4MDQsMjA4''@;'; put 'put ''NzMsMjA4NzQsMjA5MDgsMjA5ODUsMjA5ODYsMjA5ODQsMjEwMDIsMjExNTIsMjExNTEsMjEyNTMsMjEyNTQsMjEyNzEsMjEyNzcsMjAxOTEsMjEzMjIsMjEzMjEsMjEzNDUsMjEzNDQsMjEzNTksMjEzNTgsMjE0MzUsMjE0ODcsMjE0NzYsMjE0OTEsMjE0ODQsMjE0ODYsMjE0ODEsMjE0ODAs''@;'; put 'put ''MjE1MDAsMjE0OTYsMjE0OTMsMjE0ODMsMjE0NzgsMjE0ODIsMjE0OTAsMjE0ODksMjE0ODgsMjE0NzcsMjE0ODUsMjE0OTksMjIyMzUsMjIyMzQsMjI4MDYsMjI4MzAsMjI4MzMsMjI5MDAsMjI5MDIsMjMzODEsMjM0MjcsMjM2MTIsMjQwNDAsMjQwMzksMjQwMzgsMjQwNjYsMjQwNjcsMjQx''@;'; put 'put ''NzksMjQxODgsMjQzMjEsMjQzNDQsMjQzNDMsMjQ1MTcsMjUwOTgsMjUxNzEsMjUxNzIsMjUxNzAsMjUxNjksMjYwMjEsMjYwODYsMjY0MTQsMjY0MTIsMjY0MTAsMjY0MTEsMjY0MTMsMjc0OTEsMjc1OTcsMjc2NjUsMjc2NjQsMjc3MDQsMjc3MTMsMjc3MTIsMjc3MTAsMjkzNTksMjk1NzIs''@;'; put 'put ''Mjk1NzcsMjk5MTYsMjk5MjYsMjk5NzYsMjk5ODMsMjk5OTIsMjk5OTMsM2U0LDMwMDAxLDMwMDAyLDMwMDAzLDMwMDkxLDMwMzMzLDMwMzgyLDMwMzk5LDMwNDQ2LDMwNjgzLDMwNjkwLDMwNzA3LDMxMDM0LDMxMTY2LDMxMzQ4LDMxNDM1LDE5OTk4LDE5OTk5LDIwMDUwLDIwMDUxLDIwMDcz''@;'; put 'put ''LDIwMTIxLDIwMTMyLDIwMTM0LDIwMTMzLDIwMjIzLDIwMjMzLDIwMjQ5LDIwMjM0LDIwMjQ1LDIwMjM3LDIwMjQwLDIwMjQxLDIwMjM5LDIwMjEwLDIwMjE0LDIwMjE5LDIwMjA4LDIwMjExLDIwMjIxLDIwMjI1LDIwMjM1LDIwODA5LDIwODA3LDIwODA2LDIwODA4LDIwODQwLDIwODQ5LDIw''@;'; put 'put ''ODc3LDIwOTEyLDIxMDE1LDIxMDA5LDIxMDEwLDIxMDA2LDIxMDE0LDIxMTU1LDIxMjU2LDIxMjgxLDIxMjgwLDIxMzYwLDIxMzYxLDIxNTEzLDIxNTE5LDIxNTE2LDIxNTE0LDIxNTIwLDIxNTA1LDIxNTE1LDIxNTA4LDIxNTIxLDIxNTE3LDIxNTEyLDIxNTA3LDIxNTE4LDIxNTEwLDIxNTIy''@;'; put 'put ''LDIyMjQwLDIyMjM4LDIyMjM3LDIyMzIzLDIyMzIwLDIyMzEyLDIyMzE3LDIyMzE2LDIyMzE5LDIyMzEzLDIyODA5LDIyODEwLDIyODM5LDIyODQwLDIyOTE2LDIyOTA0LDIyOTE1LDIyOTA5LDIyOTA1LDIyOTE0LDIyOTEzLDIzMzgzLDIzMzg0LDIzNDMxLDIzNDMyLDIzNDI5LDIzNDMzLDIz''@;'; put 'put ''NTQ2LDIzNTc0LDIzNjczLDI0MDMwLDI0MDcwLDI0MTgyLDI0MTgwLDI0MzM1LDI0MzQ3LDI0NTM3LDI0NTM0LDI1MTAyLDI1MTAwLDI1MTAxLDI1MTA0LDI1MTg3LDI1MTc5LDI1MTc2LDI1OTEwLDI2MDg5LDI2MDg4LDI2MDkyLDI2MDkzLDI2MzU0LDI2MzU1LDI2Mzc3LDI2NDI5LDI2NDIw''@;'; put 'put ''LDI2NDE3LDI2NDIxLDI3NDI1LDI3NDkyLDI3NTE1LDI3NjcwLDI3NzQxLDI3NzM1LDI3NzM3LDI3NzQzLDI3NzQ0LDI3NzI4LDI3NzMzLDI3NzQ1LDI3NzM5LDI3NzI1LDI3NzI2LDI4Nzg0LDI5Mjc5LDI5Mjc3LDMwMzM0LDMxNDgxLDMxODU5LDMxOTkyLDMyNTY2LDMyNjUwLDMyNzAxLDMy''@;'; put 'put ''NzY5LDMyNzcxLDMyNzgwLDMyNzg2LDMyODE5LDMyODk1LDMyOTA1LDMyOTA3LDMyOTA4LDMzMjUxLDMzMjU4LDMzMjY3LDMzMjc2LDMzMjkyLDMzMzA3LDMzMzExLDMzMzkwLDMzMzk0LDMzNDA2LDM0NDExLDM0ODgwLDM0ODkyLDM0OTE1LDM1MTk5LDM4NDMzLDIwMDE4LDIwMTM2LDIwMzAx''@;'; put 'put ''LDIwMzAzLDIwMjk1LDIwMzExLDIwMzE4LDIwMjc2LDIwMzE1LDIwMzA5LDIwMjcyLDIwMzA0LDIwMzA1LDIwMjg1LDIwMjgyLDIwMjgwLDIwMjkxLDIwMzA4LDIwMjg0LDIwMjk0LDIwMzIzLDIwMzE2LDIwMzIwLDIwMjcxLDIwMzAyLDIwMjc4LDIwMzEzLDIwMzE3LDIwMjk2LDIwMzE0LDIw''@;'; put 'put ''ODEyLDIwODExLDIwODEzLDIwODUzLDIwOTE4LDIwOTE5LDIxMDI5LDIxMDI4LDIxMDMzLDIxMDM0LDIxMDMyLDIxMTYzLDIxMTYxLDIxMTYyLDIxMTY0LDIxMjgzLDIxMzYzLDIxMzY1LDIxNTMzLDIxNTQ5LDIxNTM0LDIxNTY2LDIxNTQyLDIxNTgyLDIxNTQzLDIxNTc0LDIxNTcxLDIxNTU1''@;'; put 'put ''LDIxNTc2LDIxNTcwLDIxNTMxLDIxNTQ1LDIxNTc4LDIxNTYxLDIxNTYzLDIxNTYwLDIxNTUwLDIxNTU3LDIxNTU4LDIxNTM2LDIxNTY0LDIxNTY4LDIxNTUzLDIxNTQ3LDIxNTM1LDIxNTQ4LDIyMjUwLDIyMjU2LDIyMjQ0LDIyMjUxLDIyMzQ2LDIyMzUzLDIyMzM2LDIyMzQ5LDIyMzQzLDIy''@;'; put 'put ''MzUwLDIyMzM0LDIyMzUyLDIyMzUxLDIyMzMxLDIyNzY3LDIyODQ2LDIyOTQxLDIyOTMwLDIyOTUyLDIyOTQyLDIyOTQ3LDIyOTM3LDIyOTM0LDIyOTI1LDIyOTQ4LDIyOTMxLDIyOTIyLDIyOTQ5LDIzMzg5LDIzMzg4LDIzMzg2LDIzMzg3LDIzNDM2LDIzNDM1LDIzNDM5LDIzNTk2LDIzNjE2''@;'; put 'put ''LDIzNjE3LDIzNjE1LDIzNjE0LDIzNjk2LDIzNjk3LDIzNzAwLDIzNjkyLDI0MDQzLDI0MDc2LDI0MjA3LDI0MTk5LDI0MjAyLDI0MzExLDI0MzI0LDI0MzUxLDI0NDIwLDI0NDE4LDI0NDM5LDI0NDQxLDI0NTM2LDI0NTI0LDI0NTM1LDI0NTI1LDI0NTYxLDI0NTU1LDI0NTY4LDI0NTU0LDI1''@;'; put 'put ''MTA2LDI1MTA1LDI1MjIwLDI1MjM5LDI1MjM4LDI1MjE2LDI1MjA2LDI1MjI1LDI1MTk3LDI1MjI2LDI1MjEyLDI1MjE0LDI1MjA5LDI1MjAzLDI1MjM0LDI1MTk5LDI1MjQwLDI1MTk4LDI1MjM3LDI1MjM1LDI1MjMzLDI1MjIyLDI1OTEzLDI1OTE1LDI1OTEyLDI2MDk3LDI2MzU2LDI2NDYz''@;'; put 'put ''LDI2NDQ2LDI2NDQ3LDI2NDQ4LDI2NDQ5LDI2NDYwLDI2NDU0LDI2NDYyLDI2NDQxLDI2NDM4LDI2NDY0LDI2NDUxLDI2NDU1LDI3NDkzLDI3NTk5LDI3NzE0LDI3NzQyLDI3ODAxLDI3Nzc3LDI3Nzg0LDI3Nzg1LDI3NzgxLDI3ODAzLDI3NzU0LDI3NzcwLDI3NzkyLDI3NzYwLDI3Nzg4LDI3''@;'; put 'put ''NzUyLDI3Nzk4LDI3Nzk0LDI3NzczLDI3Nzc5LDI3NzYyLDI3Nzc0LDI3NzY0LDI3NzgyLDI3NzY2LDI3Nzg5LDI3Nzk2LDI3ODAwLDI3Nzc4LDI4NzkwLDI4Nzk2LDI4Nzk3LDI4NzkyLDI5MjgyLDI5MjgxLDI5MjgwLDI5MzgwLDI5Mzc4LDI5NTkwLDI5OTk2LDI5OTk1LDMwMDA3LDMwMDA4''@;'; put 'put ''LDMwMzM4LDMwNDQ3LDMwNjkxLDMxMTY5LDMxMTY4LDMxMTY3LDMxMzUwLDMxOTk1LDMyNTk3LDMyOTE4LDMyOTE1LDMyOTI1LDMyOTIwLDMyOTIzLDMyOTIyLDMyOTQ2LDMzMzkxLDMzNDI2LDMzNDE5LDMzNDIxLDM1MjExLDM1MjgyLDM1MzI4LDM1ODk1LDM1OTEwLDM1OTI1LDM1OTk3LDM2''@;'; put 'put ''MTk2LDM2MjA4LDM2Mjc1LDM2NTIzLDM2NTU0LDM2NzYzLDM2Nzg0LDM2ODAyLDM2ODA2LDM2ODA1LDM2ODA0LDI0MDMzLDM3MDA5LDM3MDI2LDM3MDM0LDM3MDMwLDM3MDI3LDM3MTkzLDM3MzE4LDM3MzI0LDM4NDUwLDM4NDQ2LDM4NDQ5LDM4NDQyLDM4NDQ0LDIwMDA2LDIwMDU0LDIwMDgz''@;'; put 'put ''LDIwMTA3LDIwMTIzLDIwMTI2LDIwMTM5LDIwMTQwLDIwMzM1LDIwMzgxLDIwMzY1LDIwMzM5LDIwMzUxLDIwMzMyLDIwMzc5LDIwMzYzLDIwMzU4LDIwMzU1LDIwMzM2LDIwMzQxLDIwMzYwLDIwMzI5LDIwMzQ3LDIwMzc0LDIwMzUwLDIwMzY3LDIwMzY5LDIwMzQ2LDIwODIwLDIwODE4LDIw''@;'; put 'put ''ODIxLDIwODQxLDIwODU1LDIwODU0LDIwODU2LDIwOTI1LDIwOTg5LDIxMDUxLDIxMDQ4LDIxMDQ3LDIxMDUwLDIxMDQwLDIxMDM4LDIxMDQ2LDIxMDU3LDIxMTgyLDIxMTc5LDIxMzMwLDIxMzMyLDIxMzMxLDIxMzI5LDIxMzUwLDIxMzY3LDIxMzY4LDIxMzY5LDIxNDYyLDIxNDYwLDIxNDYz''@;'; put 'put ''LDIxNjE5LDIxNjIxLDIxNjU0LDIxNjI0LDIxNjUzLDIxNjMyLDIxNjI3LDIxNjIzLDIxNjM2LDIxNjUwLDIxNjM4LDIxNjI4LDIxNjQ4LDIxNjE3LDIxNjIyLDIxNjQ0LDIxNjU4LDIxNjAyLDIxNjA4LDIxNjQzLDIxNjI5LDIxNjQ2LDIyMjY2LDIyNDAzLDIyMzkxLDIyMzc4LDIyMzc3LDIy''@;'; put 'put ''MzY5LDIyMzc0LDIyMzcyLDIyMzk2LDIyODEyLDIyODU3LDIyODU1LDIyODU2LDIyODUyLDIyODY4LDIyOTc0LDIyOTcxLDIyOTk2LDIyOTY5LDIyOTU4LDIyOTkzLDIyOTgyLDIyOTkyLDIyOTg5LDIyOTg3LDIyOTk1LDIyOTg2LDIyOTU5LDIyOTYzLDIyOTk0LDIyOTgxLDIzMzkxLDIzMzk2''@;'; put 'put ''LDIzMzk1LDIzNDQ3LDIzNDUwLDIzNDQ4LDIzNDUyLDIzNDQ5LDIzNDUxLDIzNTc4LDIzNjI0LDIzNjIxLDIzNjIyLDIzNzM1LDIzNzEzLDIzNzM2LDIzNzIxLDIzNzIzLDIzNzI5LDIzNzMxLDI0MDg4LDI0MDkwLDI0MDg2LDI0MDg1LDI0MDkxLDI0MDgxLDI0MTg0LDI0MjE4LDI0MjE1LDI0''@;'; put 'put ''MjIwLDI0MjEzLDI0MjE0LDI0MzEwLDI0MzU4LDI0MzU5LDI0MzYxLDI0NDQ4LDI0NDQ5LDI0NDQ3LDI0NDQ0LDI0NTQxLDI0NTQ0LDI0NTczLDI0NTY1LDI0NTc1LDI0NTkxLDI0NTk2LDI0NjIzLDI0NjI5LDI0NTk4LDI0NjE4LDI0NTk3LDI0NjA5LDI0NjE1LDI0NjE3LDI0NjE5LDI0NjAz''@;'; put 'put ''LDI1MTEwLDI1MTA5LDI1MTUxLDI1MTUwLDI1MTUyLDI1MjE1LDI1Mjg5LDI1MjkyLDI1Mjg0LDI1Mjc5LDI1MjgyLDI1MjczLDI1Mjk4LDI1MzA3LDI1MjU5LDI1Mjk5LDI1MzAwLDI1MjkxLDI1Mjg4LDI1MjU2LDI1Mjc3LDI1Mjc2LDI1Mjk2LDI1MzA1LDI1Mjg3LDI1MjkzLDI1MjY5LDI1''@;'; put 'put ''MzA2LDI1MjY1LDI1MzA0LDI1MzAyLDI1MzAzLDI1Mjg2LDI1MjYwLDI1Mjk0LDI1OTE4LDI2MDIzLDI2MDQ0LDI2MTA2LDI2MTMyLDI2MTMxLDI2MTI0LDI2MTE4LDI2MTE0LDI2MTI2LDI2MTEyLDI2MTI3LDI2MTMzLDI2MTIyLDI2MTE5LDI2MzgxLDI2Mzc5LDI2NDc3LDI2NTA3LDI2NTE3''@;'; put 'put ''LDI2NDgxLDI2NTI0LDI2NDgzLDI2NDg3LDI2NTAzLDI2NTI1LDI2NTE5LDI2NDc5LDI2NDgwLDI2NDk1LDI2NTA1LDI2NDk0LDI2NTEyLDI2NDg1LDI2NTIyLDI2NTE1LDI2NDkyLDI2NDc0LDI2NDgyLDI3NDI3LDI3NDk0LDI3NDk1LDI3NTE5LDI3NjY3LDI3Njc1LDI3ODc1LDI3ODgwLDI3''@;'; put 'put ''ODkxLDI3ODI1LDI3ODUyLDI3ODc3LDI3ODI3LDI3ODM3LDI3ODM4LDI3ODM2LDI3ODc0LDI3ODE5LDI3ODYxLDI3ODU5LDI3ODMyLDI3ODQ0LDI3ODMzLDI3ODQxLDI3ODIyLDI3ODYzLDI3ODQ1LDI3ODg5LDI3ODM5LDI3ODM1LDI3ODczLDI3ODY3LDI3ODUwLDI3ODIwLDI3ODg3LDI3ODY4''@;'; put 'put ''LDI3ODYyLDI3ODcyLDI4ODIxLDI4ODE0LDI4ODE4LDI4ODEwLDI4ODI1LDI5MjI4LDI5MjI5LDI5MjQwLDI5MjU2LDI5Mjg3LDI5Mjg5LDI5Mzc2LDI5MzkwLDI5NDAxLDI5Mzk5LDI5MzkyLDI5NjA5LDI5NjA4LDI5NTk5LDI5NjExLDI5NjA1LDMwMDEzLDMwMTA5LDMwMTA1LDMwMTA2LDMw''@;'; put 'put ''MzQwLDMwNDAyLDMwNDUwLDMwNDUyLDMwNjkzLDMwNzE3LDMxMDM4LDMxMDQwLDMxMDQxLDMxMTc3LDMxMTc2LDMxMzU0LDMxMzUzLDMxNDgyLDMxOTk4LDMyNTk2LDMyNjUyLDMyNjUxLDMyNzczLDMyOTU0LDMyOTMzLDMyOTMwLDMyOTQ1LDMyOTI5LDMyOTM5LDMyOTM3LDMyOTQ4LDMyOTM4''@;'; put 'put ''LDMyOTQzLDMzMjUzLDMzMjc4LDMzMjkzLDMzNDU5LDMzNDM3LDMzNDMzLDMzNDUzLDMzNDY5LDMzNDM5LDMzNDY1LDMzNDU3LDMzNDUyLDMzNDQ1LDMzNDU1LDMzNDY0LDMzNDQzLDMzNDU2LDMzNDcwLDMzNDYzLDM0MzgyLDM0NDE3LDIxMDIxLDM0OTIwLDM2NTU1LDM2ODE0LDM2ODIwLDM2''@;'; put 'put ''ODE3LDM3MDQ1LDM3MDQ4LDM3MDQxLDM3MDQ2LDM3MzE5LDM3MzI5LDM4MjYzLDM4MjcyLDM4NDI4LDM4NDY0LDM4NDYzLDM4NDU5LDM4NDY4LDM4NDY2LDM4NTg1LDM4NjMyLDM4NzM4LDM4NzUwLDIwMTI3LDIwMTQxLDIwMTQyLDIwNDQ5LDIwNDA1LDIwMzk5LDIwNDE1LDIwNDQ4LDIwNDMz''@;'; put 'put ''LDIwNDMxLDIwNDQ1LDIwNDE5LDIwNDA2LDIwNDQwLDIwNDQ3LDIwNDI2LDIwNDM5LDIwMzk4LDIwNDMyLDIwNDIwLDIwNDE4LDIwNDQyLDIwNDMwLDIwNDQ2LDIwNDA3LDIwODIzLDIwODgyLDIwODgxLDIwODk2LDIxMDcwLDIxMDU5LDIxMDY2LDIxMDY5LDIxMDY4LDIxMDY3LDIxMDYzLDIx''@;'; put 'put ''MTkxLDIxMTkzLDIxMTg3LDIxMTg1LDIxMjYxLDIxMzM1LDIxMzcxLDIxNDAyLDIxNDY3LDIxNjc2LDIxNjk2LDIxNjcyLDIxNzEwLDIxNzA1LDIxNjg4LDIxNjcwLDIxNjgzLDIxNzAzLDIxNjk4LDIxNjkzLDIxNjc0LDIxNjk3LDIxNzAwLDIxNzA0LDIxNjc5LDIxNjc1LDIxNjgxLDIxNjkx''@;'; put 'put ''LDIxNjczLDIxNjcxLDIxNjk1LDIyMjcxLDIyNDAyLDIyNDExLDIyNDMyLDIyNDM1LDIyNDM0LDIyNDc4LDIyNDQ2LDIyNDE5LDIyODY5LDIyODY1LDIyODYzLDIyODYyLDIyODY0LDIzMDA0LDIzZTMsMjMwMzksMjMwMTEsMjMwMTYsMjMwNDMsMjMwMTMsMjMwMTgsMjMwMDIsMjMwMTQsMjMw''@;'; put 'put ''NDEsMjMwMzUsMjM0MDEsMjM0NTksMjM0NjIsMjM0NjAsMjM0NTgsMjM0NjEsMjM1NTMsMjM2MzAsMjM2MzEsMjM2MjksMjM2MjcsMjM3NjksMjM3NjIsMjQwNTUsMjQwOTMsMjQxMDEsMjQwOTUsMjQxODksMjQyMjQsMjQyMzAsMjQzMTQsMjQzMjgsMjQzNjUsMjQ0MjEsMjQ0NTYsMjQ0NTMs''@;'; put 'put ''MjQ0NTgsMjQ0NTksMjQ0NTUsMjQ0NjAsMjQ0NTcsMjQ1OTQsMjQ2MDUsMjQ2MDgsMjQ2MTMsMjQ1OTAsMjQ2MTYsMjQ2NTMsMjQ2ODgsMjQ2ODAsMjQ2NzQsMjQ2NDYsMjQ2NDMsMjQ2ODQsMjQ2ODMsMjQ2ODIsMjQ2NzYsMjUxNTMsMjUzMDgsMjUzNjYsMjUzNTMsMjUzNDAsMjUzMjUsMjUz''@;'; put 'put ''NDUsMjUzMjYsMjUzNDEsMjUzNTEsMjUzMjksMjUzMzUsMjUzMjcsMjUzMjQsMjUzNDIsMjUzMzIsMjUzNjEsMjUzNDYsMjU5MTksMjU5MjUsMjYwMjcsMjYwNDUsMjYwODIsMjYxNDksMjYxNTcsMjYxNDQsMjYxNTEsMjYxNTksMjYxNDMsMjYxNTIsMjYxNjEsMjYxNDgsMjYzNTksMjY2MjMs''@;'; put 'put ''MjY1NzksMjY2MDksMjY1ODAsMjY1NzYsMjY2MDQsMjY1NTAsMjY1NDMsMjY2MTMsMjY2MDEsMjY2MDcsMjY1NjQsMjY1NzcsMjY1NDgsMjY1ODYsMjY1OTcsMjY1NTIsMjY1NzUsMjY1OTAsMjY2MTEsMjY1NDQsMjY1ODUsMjY1OTQsMjY1ODksMjY1NzgsMjc0OTgsMjc1MjMsMjc1MjYsMjc1''@;'; put 'put ''NzMsMjc2MDIsMjc2MDcsMjc2NzksMjc4NDksMjc5MTUsMjc5NTQsMjc5NDYsMjc5NjksMjc5NDEsMjc5MTYsMjc5NTMsMjc5MzQsMjc5MjcsMjc5NjMsMjc5NjUsMjc5NjYsMjc5NTgsMjc5MzEsMjc4OTMsMjc5NjEsMjc5NDMsMjc5NjAsMjc5NDUsMjc5NTAsMjc5NTcsMjc5MTgsMjc5NDcs''@;'; put 'put ''Mjg4NDMsMjg4NTgsMjg4NTEsMjg4NDQsMjg4NDcsMjg4NDUsMjg4NTYsMjg4NDYsMjg4MzYsMjkyMzIsMjkyOTgsMjkyOTUsMjkzMDAsMjk0MTcsMjk0MDgsMjk0MDksMjk2MjMsMjk2NDIsMjk2MjcsMjk2MTgsMjk2NDUsMjk2MzIsMjk2MTksMjk5NzgsMjk5OTcsMzAwMzEsMzAwMjgsMzAw''@;'; put 'put ''MzAsMzAwMjcsMzAxMjMsMzAxMTYsMzAxMTcsMzAxMTQsMzAxMTUsMzAzMjgsMzAzNDIsMzAzNDMsMzAzNDQsMzA0MDgsMzA0MDYsMzA0MDMsMzA0MDUsMzA0NjUsMzA0NTcsMzA0NTYsMzA0NzMsMzA0NzUsMzA0NjIsMzA0NjAsMzA0NzEsMzA2ODQsMzA3MjIsMzA3NDAsMzA3MzIsMzA3MzMs''@;'; put 'put ''MzEwNDYsMzEwNDksMzEwNDgsMzEwNDcsMzExNjEsMzExNjIsMzExODUsMzExODYsMzExNzksMzEzNTksMzEzNjEsMzE0ODcsMzE0ODUsMzE4NjksMzIwMDIsMzIwMDUsMzJlMywzMjAwOSwzMjAwNywzMjAwNCwzMjAwNiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4''@;'; put 'put ''NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwzMzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwzMzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwz''@;'; put 'put ''MzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMzMSwzNTk5OCwzNmUzLDM2MjEyLDM2MjExLDM2Mjc2LDM2NTU3LDM2NTU2''@;'; put 'put ''LDM2ODQ4LDM2ODM4LDM2ODM0LDM2ODQyLDM2ODM3LDM2ODQ1LDM2ODQzLDM2ODM2LDM2ODQwLDM3MDY2LDM3MDcwLDM3MDU3LDM3MDU5LDM3MTk1LDM3MTk0LDM3MzI1LDM4Mjc0LDM4NDgwLDM4NDc1LDM4NDc2LDM4NDc3LDM4NzU0LDM4NzYxLDM4ODU5LDM4ODkzLDM4ODk5LDM4OTEzLDM5''@;'; put 'put ''MDgwLDM5MTMxLDM5MTM1LDM5MzE4LDM5MzIxLDIwMDU2LDIwMTQ3LDIwNDkyLDIwNDkzLDIwNTE1LDIwNDYzLDIwNTE4LDIwNTE3LDIwNDcyLDIwNTIxLDIwNTAyLDIwNDg2LDIwNTQwLDIwNTExLDIwNTA2LDIwNDk4LDIwNDk3LDIwNDc0LDIwNDgwLDIwNTAwLDIwNTIwLDIwNDY1LDIwNTEz''@;'; put 'put ''LDIwNDkxLDIwNTA1LDIwNTA0LDIwNDY3LDIwNDYyLDIwNTI1LDIwNTIyLDIwNDc4LDIwNTIzLDIwNDg5LDIwODYwLDIwOTAwLDIwOTAxLDIwODk4LDIwOTQxLDIwOTQwLDIwOTM0LDIwOTM5LDIxMDc4LDIxMDg0LDIxMDc2LDIxMDgzLDIxMDg1LDIxMjkwLDIxMzc1LDIxNDA3LDIxNDA1LDIx''@;'; put 'put ''NDcxLDIxNzM2LDIxNzc2LDIxNzYxLDIxODE1LDIxNzU2LDIxNzMzLDIxNzQ2LDIxNzY2LDIxNzU0LDIxNzgwLDIxNzM3LDIxNzQxLDIxNzI5LDIxNzY5LDIxNzQyLDIxNzM4LDIxNzM0LDIxNzk5LDIxNzY3LDIxNzU3LDIxNzc1LDIyMjc1LDIyMjc2LDIyNDY2LDIyNDg0LDIyNDc1LDIyNDY3''@;'; put 'put ''LDIyNTM3LDIyNzk5LDIyODcxLDIyODcyLDIyODc0LDIzMDU3LDIzMDY0LDIzMDY4LDIzMDcxLDIzMDY3LDIzMDU5LDIzMDIwLDIzMDcyLDIzMDc1LDIzMDgxLDIzMDc3LDIzMDUyLDIzMDQ5LDIzNDAzLDIzNjQwLDIzNDcyLDIzNDc1LDIzNDc4LDIzNDc2LDIzNDcwLDIzNDc3LDIzNDgxLDIz''@;'; put 'put ''NDgwLDIzNTU2LDIzNjMzLDIzNjM3LDIzNjMyLDIzNzg5LDIzODA1LDIzODAzLDIzNzg2LDIzNzg0LDIzNzkyLDIzNzk4LDIzODA5LDIzNzk2LDI0MDQ2LDI0MTA5LDI0MTA3LDI0MjM1LDI0MjM3LDI0MjMxLDI0MzY5LDI0NDY2LDI0NDY1LDI0NDY0LDI0NjY1LDI0Njc1LDI0Njc3LDI0NjU2''@;'; put 'put ''LDI0NjYxLDI0Njg1LDI0NjgxLDI0Njg3LDI0NzA4LDI0NzM1LDI0NzMwLDI0NzE3LDI0NzI0LDI0NzE2LDI0NzA5LDI0NzI2LDI1MTU5LDI1MzMxLDI1MzUyLDI1MzQzLDI1NDIyLDI1NDA2LDI1MzkxLDI1NDI5LDI1NDEwLDI1NDE0LDI1NDIzLDI1NDE3LDI1NDAyLDI1NDI0LDI1NDA1LDI1''@;'; put 'put ''Mzg2LDI1Mzg3LDI1Mzg0LDI1NDIxLDI1NDIwLDI1OTI4LDI1OTI5LDI2MDA5LDI2MDQ5LDI2MDUzLDI2MTc4LDI2MTg1LDI2MTkxLDI2MTc5LDI2MTk0LDI2MTg4LDI2MTgxLDI2MTc3LDI2MzYwLDI2Mzg4LDI2Mzg5LDI2MzkxLDI2NjU3LDI2NjgwLDI2Njk2LDI2Njk0LDI2NzA3LDI2Njgx''@;'; put 'put ''LDI2NjkwLDI2NzA4LDI2NjY1LDI2ODAzLDI2NjQ3LDI2NzAwLDI2NzA1LDI2Njg1LDI2NjEyLDI2NzA0LDI2Njg4LDI2Njg0LDI2NjkxLDI2NjY2LDI2NjkzLDI2NjQzLDI2NjQ4LDI2Njg5LDI3NTMwLDI3NTI5LDI3NTc1LDI3NjgzLDI3Njg3LDI3Njg4LDI3Njg2LDI3Njg0LDI3ODg4LDI4''@;'; put 'put ''MDEwLDI4MDUzLDI4MDQwLDI4MDM5LDI4MDA2LDI4MDI0LDI4MDIzLDI3OTkzLDI4MDUxLDI4MDEyLDI4MDQxLDI4MDE0LDI3OTk0LDI4MDIwLDI4MDA5LDI4MDQ0LDI4MDQyLDI4MDI1LDI4MDM3LDI4MDA1LDI4MDUyLDI4ODc0LDI4ODg4LDI4OTAwLDI4ODg5LDI4ODcyLDI4ODc5LDI5MjQx''@;'; put 'put ''LDI5MzA1LDI5NDM2LDI5NDMzLDI5NDM3LDI5NDMyLDI5NDMxLDI5NTc0LDI5Njc3LDI5NzA1LDI5Njc4LDI5NjY0LDI5Njc0LDI5NjYyLDMwMDM2LDMwMDQ1LDMwMDQ0LDMwMDQyLDMwMDQxLDMwMTQyLDMwMTQ5LDMwMTUxLDMwMTMwLDMwMTMxLDMwMTQxLDMwMTQwLDMwMTM3LDMwMTQ2LDMw''@;'; put 'put ''MTM2LDMwMzQ3LDMwMzg0LDMwNDEwLDMwNDEzLDMwNDE0LDMwNTA1LDMwNDk1LDMwNDk2LDMwNTA0LDMwNjk3LDMwNzY4LDMwNzU5LDMwNzc2LDMwNzQ5LDMwNzcyLDMwNzc1LDMwNzU3LDMwNzY1LDMwNzUyLDMwNzUxLDMwNzcwLDMxMDYxLDMxMDU2LDMxMDcyLDMxMDcxLDMxMDYyLDMxMDcw''@;'; put 'put ''LDMxMDY5LDMxMDYzLDMxMDY2LDMxMjA0LDMxMjAzLDMxMjA3LDMxMTk5LDMxMjA2LDMxMjA5LDMxMTkyLDMxMzY0LDMxMzY4LDMxNDQ5LDMxNDk0LDMxNTA1LDMxODgxLDMyMDMzLDMyMDIzLDMyMDExLDMyMDEwLDMyMDMyLDMyMDM0LDMyMDIwLDMyMDE2LDMyMDIxLDMyMDI2LDMyMDI4LDMy''@;'; put 'put ''MDEzLDMyMDI1LDMyMDI3LDMyNTcwLDMyNjA3LDMyNjYwLDMyNzA5LDMyNzA1LDMyNzc0LDMyNzkyLDMyNzg5LDMyNzkzLDMyNzkxLDMyODI5LDMyODMxLDMzMDA5LDMzMDI2LDMzMDA4LDMzMDI5LDMzMDA1LDMzMDEyLDMzMDMwLDMzMDE2LDMzMDExLDMzMDMyLDMzMDIxLDMzMDM0LDMzMDIw''@;'; put 'put ''LDMzMDA3LDMzMjYxLDMzMjYwLDMzMjgwLDMzMjk2LDMzMzIyLDMzMzIzLDMzMzIwLDMzMzI0LDMzNDY3LDMzNTc5LDMzNjE4LDMzNjIwLDMzNjEwLDMzNTkyLDMzNjE2LDMzNjA5LDMzNTg5LDMzNTg4LDMzNjE1LDMzNTg2LDMzNTkzLDMzNTkwLDMzNTU5LDMzNjAwLDMzNTg1LDMzNTc2LDMz''@;'; put 'put ''NjAzLDM0Mzg4LDM0NDQyLDM0NDc0LDM0NDUxLDM0NDY4LDM0NDczLDM0NDQ0LDM0NDY3LDM0NDYwLDM0OTI4LDM0OTM1LDM0OTQ1LDM0OTQ2LDM0OTQxLDM0OTM3LDM1MzUyLDM1MzQ0LDM1MzQyLDM1MzQwLDM1MzQ5LDM1MzM4LDM1MzUxLDM1MzQ3LDM1MzUwLDM1MzQzLDM1MzQ1LDM1OTEy''@;'; put 'put ''LDM1OTYyLDM1OTYxLDM2MDAxLDM2MDAyLDM2MjE1LDM2NTI0LDM2NTYyLDM2NTY0LDM2NTU5LDM2Nzg1LDM2ODY1LDM2ODcwLDM2ODU1LDM2ODY0LDM2ODU4LDM2ODUyLDM2ODY3LDM2ODYxLDM2ODY5LDM2ODU2LDM3MDEzLDM3MDg5LDM3MDg1LDM3MDkwLDM3MjAyLDM3MTk3LDM3MTk2LDM3''@;'; put 'put ''MzM2LDM3MzQxLDM3MzM1LDM3MzQwLDM3MzM3LDM4Mjc1LDM4NDk4LDM4NDk5LDM4NDk3LDM4NDkxLDM4NDkzLDM4NTAwLDM4NDg4LDM4NDk0LDM4NTg3LDM5MTM4LDM5MzQwLDM5NTkyLDM5NjQwLDM5NzE3LDM5NzMwLDM5NzQwLDIwMDk0LDIwNjAyLDIwNjA1LDIwNTcyLDIwNTUxLDIwNTQ3''@;'; put 'put ''LDIwNTU2LDIwNTcwLDIwNTUzLDIwNTgxLDIwNTk4LDIwNTU4LDIwNTY1LDIwNTk3LDIwNTk2LDIwNTk5LDIwNTU5LDIwNDk1LDIwNTkxLDIwNTg5LDIwODI4LDIwODg1LDIwOTc2LDIxMDk4LDIxMTAzLDIxMjAyLDIxMjA5LDIxMjA4LDIxMjA1LDIxMjY0LDIxMjYzLDIxMjczLDIxMzExLDIx''@;'; put 'put ''MzEyLDIxMzEwLDIxNDQzLDI2MzY0LDIxODMwLDIxODY2LDIxODYyLDIxODI4LDIxODU0LDIxODU3LDIxODI3LDIxODM0LDIxODA5LDIxODQ2LDIxODM5LDIxODQ1LDIxODA3LDIxODYwLDIxODE2LDIxODA2LDIxODUyLDIxODA0LDIxODU5LDIxODExLDIxODI1LDIxODQ3LDIyMjgwLDIyMjgz''@;'; put 'put ''LDIyMjgxLDIyNDk1LDIyNTMzLDIyNTM4LDIyNTM0LDIyNDk2LDIyNTAwLDIyNTIyLDIyNTMwLDIyNTgxLDIyNTE5LDIyNTIxLDIyODE2LDIyODgyLDIzMDk0LDIzMTA1LDIzMTEzLDIzMTQyLDIzMTQ2LDIzMTA0LDIzMTAwLDIzMTM4LDIzMTMwLDIzMTEwLDIzMTE0LDIzNDA4LDIzNDk1LDIz''@;'; put 'put ''NDkzLDIzNDkyLDIzNDkwLDIzNDg3LDIzNDk0LDIzNTYxLDIzNTYwLDIzNTU5LDIzNjQ4LDIzNjQ0LDIzNjQ1LDIzODE1LDIzODE0LDIzODIyLDIzODM1LDIzODMwLDIzODQyLDIzODI1LDIzODQ5LDIzODI4LDIzODMzLDIzODQ0LDIzODQ3LDIzODMxLDI0MDM0LDI0MTIwLDI0MTE4LDI0MTE1''@;'; put 'put ''LDI0MTE5LDI0MjQ3LDI0MjQ4LDI0MjQ2LDI0MjQ1LDI0MjU0LDI0MzczLDI0Mzc1LDI0NDA3LDI0NDI4LDI0NDI1LDI0NDI3LDI0NDcxLDI0NDczLDI0NDc4LDI0NDcyLDI0NDgxLDI0NDgwLDI0NDc2LDI0NzAzLDI0NzM5LDI0NzEzLDI0NzM2LDI0NzQ0LDI0Nzc5LDI0NzU2LDI0ODA2LDI0''@;'; put 'put ''NzY1LDI0NzczLDI0NzYzLDI0NzU3LDI0Nzk2LDI0NzY0LDI0NzkyLDI0Nzg5LDI0Nzc0LDI0Nzk5LDI0NzYwLDI0Nzk0LDI0Nzc1LDI1MTE0LDI1MTE1LDI1MTYwLDI1NTA0LDI1NTExLDI1NDU4LDI1NDk0LDI1NTA2LDI1NTA5LDI1NDYzLDI1NDQ3LDI1NDk2LDI1NTE0LDI1NDU3LDI1NTEz''@;'; put 'put ''LDI1NDgxLDI1NDc1LDI1NDk5LDI1NDUxLDI1NTEyLDI1NDc2LDI1NDgwLDI1NDk3LDI1NTA1LDI1NTE2LDI1NDkwLDI1NDg3LDI1NDcyLDI1NDY3LDI1NDQ5LDI1NDQ4LDI1NDY2LDI1OTQ5LDI1OTQyLDI1OTM3LDI1OTQ1LDI1OTQzLDIxODU1LDI1OTM1LDI1OTQ0LDI1OTQxLDI1OTQwLDI2''@;'; put 'put ''MDEyLDI2MDExLDI2MDI4LDI2MDYzLDI2MDU5LDI2MDYwLDI2MDYyLDI2MjA1LDI2MjAyLDI2MjEyLDI2MjE2LDI2MjE0LDI2MjA2LDI2MzYxLDIxMjA3LDI2Mzk1LDI2NzUzLDI2Nzk5LDI2Nzg2LDI2NzcxLDI2ODA1LDI2NzUxLDI2NzQyLDI2ODAxLDI2NzkxLDI2Nzc1LDI2ODAwLDI2NzU1''@;'; put 'put ''LDI2ODIwLDI2Nzk3LDI2NzU4LDI2NzU3LDI2NzcyLDI2NzgxLDI2NzkyLDI2NzgzLDI2Nzg1LDI2NzU0LDI3NDQyLDI3NTc4LDI3NjI3LDI3NjI4LDI3NjkxLDI4MDQ2LDI4MDkyLDI4MTQ3LDI4MTIxLDI4MDgyLDI4MTI5LDI4MTA4LDI4MTMyLDI4MTU1LDI4MTU0LDI4MTY1LDI4MTAzLDI4''@;'; put 'put ''MTA3LDI4MDc5LDI4MTEzLDI4MDc4LDI4MTI2LDI4MTUzLDI4MDg4LDI4MTUxLDI4MTQ5LDI4MTAxLDI4MTE0LDI4MTg2LDI4MDg1LDI4MTIyLDI4MTM5LDI4MTIwLDI4MTM4LDI4MTQ1LDI4MTQyLDI4MTM2LDI4MTAyLDI4MTAwLDI4MDc0LDI4MTQwLDI4MDk1LDI4MTM0LDI4OTIxLDI4OTM3''@;'; put 'put ''LDI4OTM4LDI4OTI1LDI4OTExLDI5MjQ1LDI5MzA5LDI5MzEzLDI5NDY4LDI5NDY3LDI5NDYyLDI5NDU5LDI5NDY1LDI5NTc1LDI5NzAxLDI5NzA2LDI5Njk5LDI5NzAyLDI5Njk0LDI5NzA5LDI5OTIwLDI5OTQyLDI5OTQzLDI5OTgwLDI5OTg2LDMwMDUzLDMwMDU0LDMwMDUwLDMwMDY0LDMw''@;'; put 'put ''MDk1LDMwMTY0LDMwMTY1LDMwMTMzLDMwMTU0LDMwMTU3LDMwMzUwLDMwNDIwLDMwNDE4LDMwNDI3LDMwNTE5LDMwNTI2LDMwNTI0LDMwNTE4LDMwNTIwLDMwNTIyLDMwODI3LDMwNzg3LDMwNzk4LDMxMDc3LDMxMDgwLDMxMDg1LDMxMjI3LDMxMzc4LDMxMzgxLDMxNTIwLDMxNTI4LDMxNTE1''@;'; put 'put ''LDMxNTMyLDMxNTI2LDMxNTEzLDMxNTE4LDMxNTM0LDMxODkwLDMxODk1LDMxODkzLDMyMDcwLDMyMDY3LDMyMTEzLDMyMDQ2LDMyMDU3LDMyMDYwLDMyMDY0LDMyMDQ4LDMyMDUxLDMyMDY4LDMyMDQ3LDMyMDY2LDMyMDUwLDMyMDQ5LDMyNTczLDMyNjcwLDMyNjY2LDMyNzE2LDMyNzE4LDMy''@;'; put 'put ''NzIyLDMyNzk2LDMyODQyLDMyODM4LDMzMDcxLDMzMDQ2LDMzMDU5LDMzMDY3LDMzMDY1LDMzMDcyLDMzMDYwLDMzMjgyLDMzMzMzLDMzMzM1LDMzMzM0LDMzMzM3LDMzNjc4LDMzNjk0LDMzNjg4LDMzNjU2LDMzNjk4LDMzNjg2LDMzNzI1LDMzNzA3LDMzNjgyLDMzNjc0LDMzNjgzLDMzNjcz''@;'; put 'put ''LDMzNjk2LDMzNjU1LDMzNjU5LDMzNjYwLDMzNjcwLDMzNzAzLDM0Mzg5LDI0NDI2LDM0NTAzLDM0NDk2LDM0NDg2LDM0NTAwLDM0NDg1LDM0NTAyLDM0NTA3LDM0NDgxLDM0NDc5LDM0NTA1LDM0ODk5LDM0OTc0LDM0OTUyLDM0OTg3LDM0OTYyLDM0OTY2LDM0OTU3LDM0OTU1LDM1MjE5LDM1''@;'; put 'put ''MjE1LDM1MzcwLDM1MzU3LDM1MzYzLDM1MzY1LDM1Mzc3LDM1MzczLDM1MzU5LDM1MzU1LDM1MzYyLDM1OTEzLDM1OTMwLDM2MDA5LDM2MDEyLDM2MDExLDM2MDA4LDM2MDEwLDM2MDA3LDM2MTk5LDM2MTk4LDM2Mjg2LDM2MjgyLDM2NTcxLDM2NTc1LDM2ODg5LDM2ODc3LDM2ODkwLDM2ODg3''@;'; put 'put ''LDM2ODk5LDM2ODk1LDM2ODkzLDM2ODgwLDM2ODg1LDM2ODk0LDM2ODk2LDM2ODc5LDM2ODk4LDM2ODg2LDM2ODkxLDM2ODg0LDM3MDk2LDM3MTAxLDM3MTE3LDM3MjA3LDM3MzI2LDM3MzY1LDM3MzUwLDM3MzQ3LDM3MzUxLDM3MzU3LDM3MzUzLDM4MjgxLDM4NTA2LDM4NTE3LDM4NTE1LDM4''@;'; put 'put ''NTIwLDM4NTEyLDM4NTE2LDM4NTE4LDM4NTE5LDM4NTA4LDM4NTkyLDM4NjM0LDM4NjMzLDMxNDU2LDMxNDU1LDM4OTE0LDM4OTE1LDM5NzcwLDQwMTY1LDQwNTY1LDQwNTc1LDQwNjEzLDQwNjM1LDIwNjQyLDIwNjIxLDIwNjEzLDIwNjMzLDIwNjI1LDIwNjA4LDIwNjMwLDIwNjMyLDIwNjM0''@;'; put 'put ''LDI2MzY4LDIwOTc3LDIxMTA2LDIxMTA4LDIxMTA5LDIxMDk3LDIxMjE0LDIxMjEzLDIxMjExLDIxMzM4LDIxNDEzLDIxODgzLDIxODg4LDIxOTI3LDIxODg0LDIxODk4LDIxOTE3LDIxOTEyLDIxODkwLDIxOTE2LDIxOTMwLDIxOTA4LDIxODk1LDIxODk5LDIxODkxLDIxOTM5LDIxOTM0LDIx''@;'; put 'put ''OTE5LDIxODIyLDIxOTM4LDIxOTE0LDIxOTQ3LDIxOTMyLDIxOTM3LDIxODg2LDIxODk3LDIxOTMxLDIxOTEzLDIyMjg1LDIyNTc1LDIyNTcwLDIyNTgwLDIyNTY0LDIyNTc2LDIyNTc3LDIyNTYxLDIyNTU3LDIyNTYwLDIyNzc3LDIyNzc4LDIyODgwLDIzMTU5LDIzMTk0LDIzMTY3LDIzMTg2''@;'; put 'put ''LDIzMTk1LDIzMjA3LDIzNDExLDIzNDA5LDIzNTA2LDIzNTAwLDIzNTA3LDIzNTA0LDIzNTYyLDIzNTYzLDIzNjAxLDIzODg0LDIzODg4LDIzODYwLDIzODc5LDI0MDYxLDI0MTMzLDI0MTI1LDI0MTI4LDI0MTMxLDI0MTkwLDI0MjY2LDI0MjU3LDI0MjU4LDI0MjYwLDI0MzgwLDI0NDI5LDI0''@;'; put 'put ''NDg5LDI0NDkwLDI0NDg4LDI0Nzg1LDI0ODAxLDI0NzU0LDI0NzU4LDI0ODAwLDI0ODYwLDI0ODY3LDI0ODI2LDI0ODUzLDI0ODE2LDI0ODI3LDI0ODIwLDI0OTM2LDI0ODE3LDI0ODQ2LDI0ODIyLDI0ODQxLDI0ODMyLDI0ODUwLDI1MTE5LDI1MTYxLDI1NTA3LDI1NDg0LDI1NTUxLDI1NTM2''@;'; put 'put ''LDI1NTc3LDI1NTQ1LDI1NTQyLDI1NTQ5LDI1NTU0LDI1NTcxLDI1NTUyLDI1NTY5LDI1NTU4LDI1NTgxLDI1NTgyLDI1NDYyLDI1NTg4LDI1NTc4LDI1NTYzLDI1NjgyLDI1NTYyLDI1NTkzLDI1OTUwLDI1OTU4LDI1OTU0LDI1OTU1LDI2MDAxLDI2ZTMsMjYwMzEsMjYyMjIsMjYyMjQsMjYy''@;'; put 'put ''MjgsMjYyMzAsMjYyMjMsMjYyNTcsMjYyMzQsMjYyMzgsMjYyMzEsMjYzNjYsMjYzNjcsMjYzOTksMjYzOTcsMjY4NzQsMjY4MzcsMjY4NDgsMjY4NDAsMjY4MzksMjY4ODUsMjY4NDcsMjY4NjksMjY4NjIsMjY4NTUsMjY4NzMsMjY4MzQsMjY4NjYsMjY4NTEsMjY4MjcsMjY4MjksMjY4OTMs''@;'; put 'put ''MjY4OTgsMjY4OTQsMjY4MjUsMjY4NDIsMjY5OTAsMjY4NzUsMjc0NTQsMjc0NTAsMjc0NTMsMjc1NDQsMjc1NDIsMjc1ODAsMjc2MzEsMjc2OTQsMjc2OTUsMjc2OTIsMjgyMDcsMjgyMTYsMjgyNDQsMjgxOTMsMjgyMTAsMjgyNjMsMjgyMzQsMjgxOTIsMjgxOTcsMjgxOTUsMjgxODcsMjgy''@;'; put 'put ''NTEsMjgyNDgsMjgxOTYsMjgyNDYsMjgyNzAsMjgyMDUsMjgxOTgsMjgyNzEsMjgyMTIsMjgyMzcsMjgyMTgsMjgyMDQsMjgyMjcsMjgxODksMjgyMjIsMjgzNjMsMjgyOTcsMjgxODUsMjgyMzgsMjgyNTksMjgyMjgsMjgyNzQsMjgyNjUsMjgyNTUsMjg5NTMsMjg5NTQsMjg5NjYsMjg5NzYs''@;'; put 'put ''Mjg5NjEsMjg5ODIsMjkwMzgsMjg5NTYsMjkyNjAsMjkzMTYsMjkzMTIsMjk0OTQsMjk0NzcsMjk0OTIsMjk0ODEsMjk3NTQsMjk3MzgsMjk3NDcsMjk3MzAsMjk3MzMsMjk3NDksMjk3NTAsMjk3NDgsMjk3NDMsMjk3MjMsMjk3MzQsMjk3MzYsMjk5ODksMjk5OTAsMzAwNTksMzAwNTgsMzAx''@;'; put 'put ''NzgsMzAxNzEsMzAxNzksMzAxNjksMzAxNjgsMzAxNzQsMzAxNzYsMzAzMzEsMzAzMzIsMzAzNTgsMzAzNTUsMzAzODgsMzA0MjgsMzA1NDMsMzA3MDEsMzA4MTMsMzA4MjgsMzA4MzEsMzEyNDUsMzEyNDAsMzEyNDMsMzEyMzcsMzEyMzIsMzEzODQsMzEzODMsMzEzODIsMzE0NjEsMzE0NTks''@;'; put 'put ''MzE1NjEsMzE1NzQsMzE1NTgsMzE1NjgsMzE1NzAsMzE1NzIsMzE1NjUsMzE1NjMsMzE1NjcsMzE1NjksMzE5MDMsMzE5MDksMzIwOTQsMzIwODAsMzIxMDQsMzIwODUsMzIwNDMsMzIxMTAsMzIxMTQsMzIwOTcsMzIxMDIsMzIwOTgsMzIxMTIsMzIxMTUsMjE4OTIsMzI3MjQsMzI3MjUsMzI3''@;'; put 'put ''NzksMzI4NTAsMzI5MDEsMzMxMDksMzMxMDgsMzMwOTksMzMxMDUsMzMxMDIsMzMwODEsMzMwOTQsMzMwODYsMzMxMDAsMzMxMDcsMzMxNDAsMzMyOTgsMzMzMDgsMzM3NjksMzM3OTUsMzM3ODQsMzM4MDUsMzM3NjAsMzM3MzMsMzM4MDMsMzM3MjksMzM3NzUsMzM3NzcsMzM3ODAsMzM4Nzks''@;'; put 'put ''MzM4MDIsMzM3NzYsMzM4MDQsMzM3NDAsMzM3ODksMzM3NzgsMzM3MzgsMzM4NDgsMzM4MDYsMzM3OTYsMzM3NTYsMzM3OTksMzM3NDgsMzM3NTksMzQzOTUsMzQ1MjcsMzQ1MjEsMzQ1NDEsMzQ1MTYsMzQ1MjMsMzQ1MzIsMzQ1MTIsMzQ1MjYsMzQ5MDMsMzUwMDksMzUwMTAsMzQ5OTMsMzUy''@;'; put 'put ''MDMsMzUyMjIsMzUzODcsMzU0MjQsMzU0MTMsMzU0MjIsMzUzODgsMzUzOTMsMzU0MTIsMzU0MTksMzU0MDgsMzUzOTgsMzUzODAsMzUzODYsMzUzODIsMzU0MTQsMzU5MzcsMzU5NzAsMzYwMTUsMzYwMjgsMzYwMTksMzYwMjksMzYwMzMsMzYwMjcsMzYwMzIsMzYwMjAsMzYwMjMsMzYwMjIs''@;'; put 'put ''MzYwMzEsMzYwMjQsMzYyMzQsMzYyMjksMzYyMjUsMzYzMDIsMzYzMTcsMzYyOTksMzYzMTQsMzYzMDUsMzYzMDAsMzYzMTUsMzYyOTQsMzY2MDMsMzY2MDAsMzY2MDQsMzY3NjQsMzY5MTAsMzY5MTcsMzY5MTMsMzY5MjAsMzY5MTQsMzY5MTgsMzcxMjIsMzcxMDksMzcxMjksMzcxMTgsMzcy''@;'; put 'put ''MTksMzcyMjEsMzczMjcsMzczOTYsMzczOTcsMzc0MTEsMzczODUsMzc0MDYsMzczODksMzczOTIsMzczODMsMzczOTMsMzgyOTIsMzgyODcsMzgyODMsMzgyODksMzgyOTEsMzgyOTAsMzgyODYsMzg1MzgsMzg1NDIsMzg1MzksMzg1MjUsMzg1MzMsMzg1MzQsMzg1NDEsMzg1MTQsMzg1MzIs''@;'; put 'put ''Mzg1OTMsMzg1OTcsMzg1OTYsMzg1OTgsMzg1OTksMzg2MzksMzg2NDIsMzg4NjAsMzg5MTcsMzg5MTgsMzg5MjAsMzkxNDMsMzkxNDYsMzkxNTEsMzkxNDUsMzkxNTQsMzkxNDksMzkzNDIsMzkzNDEsNDA2NDMsNDA2NTMsNDA2NTcsMjAwOTgsMjA2NTMsMjA2NjEsMjA2NTgsMjA2NTksMjA2''@;'; put 'put ''NzcsMjA2NzAsMjA2NTIsMjA2NjMsMjA2NjcsMjA2NTUsMjA2NzksMjExMTksMjExMTEsMjExMTcsMjEyMTUsMjEyMjIsMjEyMjAsMjEyMTgsMjEyMTksMjEyOTUsMjE5ODMsMjE5OTIsMjE5NzEsMjE5OTAsMjE5NjYsMjE5ODAsMjE5NTksMjE5NjksMjE5ODcsMjE5ODgsMjE5OTksMjE5Nzgs''@;'; put 'put ''MjE5ODUsMjE5NTcsMjE5NTgsMjE5ODksMjE5NjEsMjIyOTAsMjIyOTEsMjI2MjIsMjI2MDksMjI2MTYsMjI2MTUsMjI2MTgsMjI2MTIsMjI2MzUsMjI2MDQsMjI2MzcsMjI2MDIsMjI2MjYsMjI2MTAsMjI2MDMsMjI4ODcsMjMyMzMsMjMyNDEsMjMyNDQsMjMyMzAsMjMyMjksMjMyMjgsMjMy''@;'; put 'put ''MTksMjMyMzQsMjMyMTgsMjM5MTMsMjM5MTksMjQxNDAsMjQxODUsMjQyNjUsMjQyNjQsMjQzMzgsMjQ0MDksMjQ0OTIsMjQ0OTQsMjQ4NTgsMjQ4NDcsMjQ5MDQsMjQ4NjMsMjQ4MTksMjQ4NTksMjQ4MjUsMjQ4MzMsMjQ4NDAsMjQ5MTAsMjQ5MDgsMjQ5MDAsMjQ5MDksMjQ4OTQsMjQ4ODQs''@;'; put 'put ''MjQ4NzEsMjQ4NDUsMjQ4MzgsMjQ4ODcsMjUxMjEsMjUxMjIsMjU2MTksMjU2NjIsMjU2MzAsMjU2NDIsMjU2NDUsMjU2NjEsMjU2NDQsMjU2MTUsMjU2MjgsMjU2MjAsMjU2MTMsMjU2NTQsMjU2MjIsMjU2MjMsMjU2MDYsMjU5NjQsMjYwMTUsMjYwMzIsMjYyNjMsMjYyNDksMjYyNDcsMjYy''@;'; put 'put ''NDgsMjYyNjIsMjYyNDQsMjYyNjQsMjYyNTMsMjYzNzEsMjcwMjgsMjY5ODksMjY5NzAsMjY5OTksMjY5NzYsMjY5NjQsMjY5OTcsMjY5MjgsMjcwMTAsMjY5NTQsMjY5ODQsMjY5ODcsMjY5NzQsMjY5NjMsMjcwMDEsMjcwMTQsMjY5NzMsMjY5NzksMjY5NzEsMjc0NjMsMjc1MDYsMjc1ODQs''@;'; put 'put ''Mjc1ODMsMjc2MDMsMjc2NDUsMjgzMjIsMjgzMzUsMjgzNzEsMjgzNDIsMjgzNTQsMjgzMDQsMjgzMTcsMjgzNTksMjgzNTcsMjgzMjUsMjgzMTIsMjgzNDgsMjgzNDYsMjgzMzEsMjgzNjksMjgzMTAsMjgzMTYsMjgzNTYsMjgzNzIsMjgzMzAsMjgzMjcsMjgzNDAsMjkwMDYsMjkwMTcsMjkw''@;'; put 'put ''MzMsMjkwMjgsMjkwMDEsMjkwMzEsMjkwMjAsMjkwMzYsMjkwMzAsMjkwMDQsMjkwMjksMjkwMjIsMjg5OTgsMjkwMzIsMjkwMTQsMjkyNDIsMjkyNjYsMjk0OTUsMjk1MDksMjk1MDMsMjk1MDIsMjk4MDcsMjk3ODYsMjk3ODEsMjk3OTEsMjk3OTAsMjk3NjEsMjk3NTksMjk3ODUsMjk3ODcs''@;'; put 'put ''Mjk3ODgsMzAwNzAsMzAwNzIsMzAyMDgsMzAxOTIsMzAyMDksMzAxOTQsMzAxOTMsMzAyMDIsMzAyMDcsMzAxOTYsMzAxOTUsMzA0MzAsMzA0MzEsMzA1NTUsMzA1NzEsMzA1NjYsMzA1NTgsMzA1NjMsMzA1ODUsMzA1NzAsMzA1NzIsMzA1NTYsMzA1NjUsMzA1NjgsMzA1NjIsMzA3MDIsMzA4''@;'; put 'put ''NjIsMzA4OTYsMzA4NzEsMzA4NzIsMzA4NjAsMzA4NTcsMzA4NDQsMzA4NjUsMzA4NjcsMzA4NDcsMzEwOTgsMzExMDMsMzExMDUsMzM4MzYsMzExNjUsMzEyNjAsMzEyNTgsMzEyNjQsMzEyNTIsMzEyNjMsMzEyNjIsMzEzOTEsMzEzOTIsMzE2MDcsMzE2ODAsMzE1ODQsMzE1OTgsMzE1OTEs''@;'; put 'put ''MzE5MjEsMzE5MjMsMzE5MjUsMzIxNDcsMzIxMjEsMzIxNDUsMzIxMjksMzIxNDMsMzIwOTEsMzI2MjIsMzI2MTcsMzI2MTgsMzI2MjYsMzI2ODEsMzI2ODAsMzI2NzYsMzI4NTQsMzI4NTYsMzI5MDIsMzI5MDAsMzMxMzcsMzMxMzYsMzMxNDQsMzMxMjUsMzMxMzQsMzMxMzksMzMxMzEsMzMx''@;'; put 'put ''NDUsMzMxNDYsMzMxMjYsMzMyODUsMzMzNTEsMzM5MjIsMzM5MTEsMzM4NTMsMzM4NDEsMzM5MDksMzM4OTQsMzM4OTksMzM4NjUsMzM5MDAsMzM4ODMsMzM4NTIsMzM4NDUsMzM4ODksMzM4OTEsMzM4OTcsMzM5MDEsMzM4NjIsMzQzOTgsMzQzOTYsMzQzOTksMzQ1NTMsMzQ1NzksMzQ1Njgs''@;'; put 'put ''MzQ1NjcsMzQ1NjAsMzQ1NTgsMzQ1NTUsMzQ1NjIsMzQ1NjMsMzQ1NjYsMzQ1NzAsMzQ5MDUsMzUwMzksMzUwMjgsMzUwMzMsMzUwMzYsMzUwMzIsMzUwMzcsMzUwNDEsMzUwMTgsMzUwMjksMzUwMjYsMzUyMjgsMzUyOTksMzU0MzUsMzU0NDIsMzU0NDMsMzU0MzAsMzU0MzMsMzU0NDAsMzU0''@;'; put 'put ''NjMsMzU0NTIsMzU0MjcsMzU0ODgsMzU0NDEsMzU0NjEsMzU0MzcsMzU0MjYsMzU0MzgsMzU0MzYsMzU0NDksMzU0NTEsMzUzOTAsMzU0MzIsMzU5MzgsMzU5NzgsMzU5NzcsMzYwNDIsMzYwMzksMzYwNDAsMzYwMzYsMzYwMTgsMzYwMzUsMzYwMzQsMzYwMzcsMzYzMjEsMzYzMTksMzYzMjgs''@;'; put 'put ''MzYzMzUsMzYzMzksMzYzNDYsMzYzMzAsMzYzMjQsMzYzMjYsMzY1MzAsMzY2MTEsMzY2MTcsMzY2MDYsMzY2MTgsMzY3NjcsMzY3ODYsMzY5MzksMzY5MzgsMzY5NDcsMzY5MzAsMzY5NDgsMzY5MjQsMzY5NDksMzY5NDQsMzY5MzUsMzY5NDMsMzY5NDIsMzY5NDEsMzY5NDUsMzY5MjYsMzY5''@;'; put 'put ''MjksMzcxMzgsMzcxNDMsMzcyMjgsMzcyMjYsMzcyMjUsMzczMjEsMzc0MzEsMzc0NjMsMzc0MzIsMzc0MzcsMzc0NDAsMzc0MzgsMzc0NjcsMzc0NTEsMzc0NzYsMzc0NTcsMzc0MjgsMzc0NDksMzc0NTMsMzc0NDUsMzc0MzMsMzc0MzksMzc0NjYsMzgyOTYsMzg1NTIsMzg1NDgsMzg1NDks''@;'; put 'put ''Mzg2MDUsMzg2MDMsMzg2MDEsMzg2MDIsMzg2NDcsMzg2NTEsMzg2NDksMzg2NDYsMzg3NDIsMzg3NzIsMzg3NzQsMzg5MjgsMzg5MjksMzg5MzEsMzg5MjIsMzg5MzAsMzg5MjQsMzkxNjQsMzkxNTYsMzkxNjUsMzkxNjYsMzkzNDcsMzkzNDUsMzkzNDgsMzk2NDksNDAxNjksNDA1NzgsNDA3''@;'; put 'put ''MTgsNDA3MjMsNDA3MzYsMjA3MTEsMjA3MTgsMjA3MDksMjA2OTQsMjA3MTcsMjA2OTgsMjA2OTMsMjA2ODcsMjA2ODksMjA3MjEsMjA2ODYsMjA3MTMsMjA4MzQsMjA5NzksMjExMjMsMjExMjIsMjEyOTcsMjE0MjEsMjIwMTQsMjIwMTYsMjIwNDMsMjIwMzksMjIwMTMsMjIwMzYsMjIwMjIs''@;'; put 'put ''MjIwMjUsMjIwMjksMjIwMzAsMjIwMDcsMjIwMzgsMjIwNDcsMjIwMjQsMjIwMzIsMjIwMDYsMjIyOTYsMjIyOTQsMjI2NDUsMjI2NTQsMjI2NTksMjI2NzUsMjI2NjYsMjI2NDksMjI2NjEsMjI2NTMsMjI3ODEsMjI4MjEsMjI4MTgsMjI4MjAsMjI4OTAsMjI4ODksMjMyNjUsMjMyNzAsMjMy''@;'; put 'put ''NzMsMjMyNTUsMjMyNTQsMjMyNTYsMjMyNjcsMjM0MTMsMjM1MTgsMjM1MjcsMjM1MjEsMjM1MjUsMjM1MjYsMjM1MjgsMjM1MjIsMjM1MjQsMjM1MTksMjM1NjUsMjM2NTAsMjM5NDAsMjM5NDMsMjQxNTUsMjQxNjMsMjQxNDksMjQxNTEsMjQxNDgsMjQyNzUsMjQyNzgsMjQzMzAsMjQzOTAs''@;'; put 'put ''MjQ0MzIsMjQ1MDUsMjQ5MDMsMjQ4OTUsMjQ5MDcsMjQ5NTEsMjQ5MzAsMjQ5MzEsMjQ5MjcsMjQ5MjIsMjQ5MjAsMjQ5NDksMjUxMzAsMjU3MzUsMjU2ODgsMjU2ODQsMjU3NjQsMjU3MjAsMjU2OTUsMjU3MjIsMjU2ODEsMjU3MDMsMjU2NTIsMjU3MDksMjU3MjMsMjU5NzAsMjYwMTcsMjYw''@;'; put 'put ''NzEsMjYwNzAsMjYyNzQsMjYyODAsMjYyNjksMjcwMzYsMjcwNDgsMjcwMjksMjcwNzMsMjcwNTQsMjcwOTEsMjcwODMsMjcwMzUsMjcwNjMsMjcwNjcsMjcwNTEsMjcwNjAsMjcwODgsMjcwODUsMjcwNTMsMjcwODQsMjcwNDYsMjcwNzUsMjcwNDMsMjc0NjUsMjc0NjgsMjc2OTksMjg0Njcs''@;'; put 'put ''Mjg0MzYsMjg0MTQsMjg0MzUsMjg0MDQsMjg0NTcsMjg0NzgsMjg0NDgsMjg0NjAsMjg0MzEsMjg0MTgsMjg0NTAsMjg0MTUsMjgzOTksMjg0MjIsMjg0NjUsMjg0NzIsMjg0NjYsMjg0NTEsMjg0MzcsMjg0NTksMjg0NjMsMjg1NTIsMjg0NTgsMjgzOTYsMjg0MTcsMjg0MDIsMjgzNjQsMjg0''@;'; put 'put ''MDcsMjkwNzYsMjkwODEsMjkwNTMsMjkwNjYsMjkwNjAsMjkwNzQsMjkyNDYsMjkzMzAsMjkzMzQsMjk1MDgsMjk1MjAsMjk3OTYsMjk3OTUsMjk4MDIsMjk4MDgsMjk4MDUsMjk5NTYsMzAwOTcsMzAyNDcsMzAyMjEsMzAyMTksMzAyMTcsMzAyMjcsMzA0MzMsMzA0MzUsMzA1OTYsMzA1ODks''@;'; put 'put ''MzA1OTEsMzA1NjEsMzA5MTMsMzA4NzksMzA4ODcsMzA4OTksMzA4ODksMzA4ODMsMzExMTgsMzExMTksMzExMTcsMzEyNzgsMzEyODEsMzE0MDIsMzE0MDEsMzE0NjksMzE0NzEsMzE2NDksMzE2MzcsMzE2MjcsMzE2MDUsMzE2MzksMzE2NDUsMzE2MzYsMzE2MzEsMzE2NzIsMzE2MjMsMzE2''@;'; put 'put ''MjAsMzE5MjksMzE5MzMsMzE5MzQsMzIxODcsMzIxNzYsMzIxNTYsMzIxODksMzIxOTAsMzIxNjAsMzIyMDIsMzIxODAsMzIxNzgsMzIxNzcsMzIxODYsMzIxNjIsMzIxOTEsMzIxODEsMzIxODQsMzIxNzMsMzIyMTAsMzIxOTksMzIxNzIsMzI2MjQsMzI3MzYsMzI3MzcsMzI3MzUsMzI4NjIs''@;'; put 'put ''MzI4NTgsMzI5MDMsMzMxMDQsMzMxNTIsMzMxNjcsMzMxNjAsMzMxNjIsMzMxNTEsMzMxNTQsMzMyNTUsMzMyNzQsMzMyODcsMzMzMDAsMzMzMTAsMzMzNTUsMzM5OTMsMzM5ODMsMzM5OTAsMzM5ODgsMzM5NDUsMzM5NTAsMzM5NzAsMzM5NDgsMzM5OTUsMzM5NzYsMzM5ODQsMzQwMDMsMzM5''@;'; put 'put ''MzYsMzM5ODAsMzQwMDEsMzM5OTQsMzQ2MjMsMzQ1ODgsMzQ2MTksMzQ1OTQsMzQ1OTcsMzQ2MTIsMzQ1ODQsMzQ2NDUsMzQ2MTUsMzQ2MDEsMzUwNTksMzUwNzQsMzUwNjAsMzUwNjUsMzUwNjQsMzUwNjksMzUwNDgsMzUwOTgsMzUwNTUsMzU0OTQsMzU0NjgsMzU0ODYsMzU0OTEsMzU0Njks''@;'; put 'put ''MzU0ODksMzU0NzUsMzU0OTIsMzU0OTgsMzU0OTMsMzU0OTYsMzU0ODAsMzU0NzMsMzU0ODIsMzU0OTUsMzU5NDYsMzU5ODEsMzU5ODAsMzYwNTEsMzYwNDksMzYwNTAsMzYyMDMsMzYyNDksMzYyNDUsMzYzNDgsMzY2MjgsMzY2MjYsMzY2MjksMzY2MjcsMzY3NzEsMzY5NjAsMzY5NTIsMzY5''@;'; put 'put ''NTYsMzY5NjMsMzY5NTMsMzY5NTgsMzY5NjIsMzY5NTcsMzY5NTUsMzcxNDUsMzcxNDQsMzcxNTAsMzcyMzcsMzcyNDAsMzcyMzksMzcyMzYsMzc0OTYsMzc1MDQsMzc1MDksMzc1MjgsMzc1MjYsMzc0OTksMzc1MjMsMzc1MzIsMzc1NDQsMzc1MDAsMzc1MjEsMzgzMDUsMzgzMTIsMzgzMTMs''@;'; put 'put ''MzgzMDcsMzgzMDksMzgzMDgsMzg1NTMsMzg1NTYsMzg1NTUsMzg2MDQsMzg2MTAsMzg2NTYsMzg3ODAsMzg3ODksMzg5MDIsMzg5MzUsMzg5MzYsMzkwODcsMzkwODksMzkxNzEsMzkxNzMsMzkxODAsMzkxNzcsMzkzNjEsMzk1OTksMzk2MDAsMzk2NTQsMzk3NDUsMzk3NDYsNDAxODAsNDAx''@;'; put 'put ''ODIsNDAxNzksNDA2MzYsNDA3NjMsNDA3NzgsMjA3NDAsMjA3MzYsMjA3MzEsMjA3MjUsMjA3MjksMjA3MzgsMjA3NDQsMjA3NDUsMjA3NDEsMjA5NTYsMjExMjcsMjExMjgsMjExMjksMjExMzMsMjExMzAsMjEyMzIsMjE0MjYsMjIwNjIsMjIwNzUsMjIwNzMsMjIwNjYsMjIwNzksMjIwNjgs''@;'; put 'put ''MjIwNTcsMjIwOTksMjIwOTQsMjIxMDMsMjIxMzIsMjIwNzAsMjIwNjMsMjIwNjQsMjI2NTYsMjI2ODcsMjI2ODYsMjI3MDcsMjI2ODQsMjI3MDIsMjI2OTcsMjI2OTQsMjI4OTMsMjMzMDUsMjMyOTEsMjMzMDcsMjMyODUsMjMzMDgsMjMzMDQsMjM1MzQsMjM1MzIsMjM1MjksMjM1MzEsMjM2''@;'; put 'put ''NTIsMjM2NTMsMjM5NjUsMjM5NTYsMjQxNjIsMjQxNTksMjQxNjEsMjQyOTAsMjQyODIsMjQyODcsMjQyODUsMjQyOTEsMjQyODgsMjQzOTIsMjQ0MzMsMjQ1MDMsMjQ1MDEsMjQ5NTAsMjQ5MzUsMjQ5NDIsMjQ5MjUsMjQ5MTcsMjQ5NjIsMjQ5NTYsMjQ5NDQsMjQ5MzksMjQ5NTgsMjQ5OTks''@;'; put 'put ''MjQ5NzYsMjUwMDMsMjQ5NzQsMjUwMDQsMjQ5ODYsMjQ5OTYsMjQ5ODAsMjUwMDYsMjUxMzQsMjU3MDUsMjU3MTEsMjU3MjEsMjU3NTgsMjU3NzgsMjU3MzYsMjU3NDQsMjU3NzYsMjU3NjUsMjU3NDcsMjU3NDksMjU3NjksMjU3NDYsMjU3NzQsMjU3NzMsMjU3NzEsMjU3NTQsMjU3NzIsMjU3''@;'; put 'put ''NTMsMjU3NjIsMjU3NzksMjU5NzMsMjU5NzUsMjU5NzYsMjYyODYsMjYyODMsMjYyOTIsMjYyODksMjcxNzEsMjcxNjcsMjcxMTIsMjcxMzcsMjcxNjYsMjcxNjEsMjcxMzMsMjcxNjksMjcxNTUsMjcxNDYsMjcxMjMsMjcxMzgsMjcxNDEsMjcxMTcsMjcxNTMsMjc0NzIsMjc0NzAsMjc1NTYs''@;'; put 'put ''Mjc1ODksMjc1OTAsMjg0NzksMjg1NDAsMjg1NDgsMjg0OTcsMjg1MTgsMjg1MDAsMjg1NTAsMjg1MjUsMjg1MDcsMjg1MzYsMjg1MjYsMjg1NTgsMjg1MzgsMjg1MjgsMjg1MTYsMjg1NjcsMjg1MDQsMjgzNzMsMjg1MjcsMjg1MTIsMjg1MTEsMjkwODcsMjkxMDAsMjkxMDUsMjkwOTYsMjky''@;'; put 'put ''NzAsMjkzMzksMjk1MTgsMjk1MjcsMjk4MDEsMjk4MzUsMjk4MjcsMjk4MjIsMjk4MjQsMzAwNzksMzAyNDAsMzAyNDksMzAyMzksMzAyNDQsMzAyNDYsMzAyNDEsMzAyNDIsMzAzNjIsMzAzOTQsMzA0MzYsMzA2MDYsMzA1OTksMzA2MDQsMzA2MDksMzA2MDMsMzA5MjMsMzA5MTcsMzA5MDYs''@;'; put 'put ''MzA5MjIsMzA5MTAsMzA5MzMsMzA5MDgsMzA5MjgsMzEyOTUsMzEyOTIsMzEyOTYsMzEyOTMsMzEyODcsMzEyOTEsMzE0MDcsMzE0MDYsMzE2NjEsMzE2NjUsMzE2ODQsMzE2NjgsMzE2ODYsMzE2ODcsMzE2ODEsMzE2NDgsMzE2OTIsMzE5NDYsMzIyMjQsMzIyNDQsMzIyMzksMzIyNTEsMzIy''@;'; put 'put ''MTYsMzIyMzYsMzIyMjEsMzIyMzIsMzIyMjcsMzIyMTgsMzIyMjIsMzIyMzMsMzIxNTgsMzIyMTcsMzIyNDIsMzIyNDksMzI2MjksMzI2MzEsMzI2ODcsMzI3NDUsMzI4MDYsMzMxNzksMzMxODAsMzMxODEsMzMxODQsMzMxNzgsMzMxNzYsMzQwNzEsMzQxMDksMzQwNzQsMzQwMzAsMzQwOTIs''@;'; put 'put ''MzQwOTMsMzQwNjcsMzQwNjUsMzQwODMsMzQwODEsMzQwNjgsMzQwMjgsMzQwODUsMzQwNDcsMzQwNTQsMzQ2OTAsMzQ2NzYsMzQ2NzgsMzQ2NTYsMzQ2NjIsMzQ2ODAsMzQ2NjQsMzQ2NDksMzQ2NDcsMzQ2MzYsMzQ2NDMsMzQ5MDcsMzQ5MDksMzUwODgsMzUwNzksMzUwOTAsMzUwOTEsMzUw''@;'; put 'put ''OTMsMzUwODIsMzU1MTYsMzU1MzgsMzU1MjcsMzU1MjQsMzU0NzcsMzU1MzEsMzU1NzYsMzU1MDYsMzU1MjksMzU1MjIsMzU1MTksMzU1MDQsMzU1NDIsMzU1MzMsMzU1MTAsMzU1MTMsMzU1NDcsMzU5MTYsMzU5MTgsMzU5NDgsMzYwNjQsMzYwNjIsMzYwNzAsMzYwNjgsMzYwNzYsMzYwNzcs''@;'; put 'put ''MzYwNjYsMzYwNjcsMzYwNjAsMzYwNzQsMzYwNjUsMzYyMDUsMzYyNTUsMzYyNTksMzYzOTUsMzYzNjgsMzYzODEsMzYzODYsMzYzNjcsMzYzOTMsMzYzODMsMzYzODUsMzYzODIsMzY1MzgsMzY2MzcsMzY2MzUsMzY2MzksMzY2NDksMzY2NDYsMzY2NTAsMzY2MzYsMzY2MzgsMzY2NDUsMzY5''@;'; put 'put ''NjksMzY5NzQsMzY5NjgsMzY5NzMsMzY5ODMsMzcxNjgsMzcxNjUsMzcxNTksMzcxNjksMzcyNTUsMzcyNTcsMzcyNTksMzcyNTEsMzc1NzMsMzc1NjMsMzc1NTksMzc2MTAsMzc1NDgsMzc2MDQsMzc1NjksMzc1NTUsMzc1NjQsMzc1ODYsMzc1NzUsMzc2MTYsMzc1NTQsMzgzMTcsMzgzMjEs''@;'; put 'put ''Mzg2NjAsMzg2NjIsMzg2NjMsMzg2NjUsMzg3NTIsMzg3OTcsMzg3OTUsMzg3OTksMzg5NDUsMzg5NTUsMzg5NDAsMzkwOTEsMzkxNzgsMzkxODcsMzkxODYsMzkxOTIsMzkzODksMzkzNzYsMzkzOTEsMzkzODcsMzkzNzcsMzkzODEsMzkzNzgsMzkzODUsMzk2MDcsMzk2NjIsMzk2NjMsMzk3''@;'; put 'put ''MTksMzk3NDksMzk3NDgsMzk3OTksMzk3OTEsNDAxOTgsNDAyMDEsNDAxOTUsNDA2MTcsNDA2MzgsNDA2NTQsMjI2OTYsNDA3ODYsMjA3NTQsMjA3NjAsMjA3NTYsMjA3NTIsMjA3NTcsMjA4NjQsMjA5MDYsMjA5NTcsMjExMzcsMjExMzksMjEyMzUsMjIxMDUsMjIxMjMsMjIxMzcsMjIxMjEs''@;'; put 'put ''MjIxMTYsMjIxMzYsMjIxMjIsMjIxMjAsMjIxMTcsMjIxMjksMjIxMjcsMjIxMjQsMjIxMTQsMjIxMzQsMjI3MjEsMjI3MTgsMjI3MjcsMjI3MjUsMjI4OTQsMjMzMjUsMjMzNDgsMjM0MTYsMjM1MzYsMjM1NjYsMjQzOTQsMjUwMTAsMjQ5NzcsMjUwMDEsMjQ5NzAsMjUwMzcsMjUwMTQsMjUw''@;'; put 'put ''MjIsMjUwMzQsMjUwMzIsMjUxMzYsMjU3OTcsMjU3OTMsMjU4MDMsMjU3ODcsMjU3ODgsMjU4MTgsMjU3OTYsMjU3OTksMjU3OTQsMjU4MDUsMjU3OTEsMjU4MTAsMjU4MTIsMjU3OTAsMjU5NzIsMjYzMTAsMjYzMTMsMjYyOTcsMjYzMDgsMjYzMTEsMjYyOTYsMjcxOTcsMjcxOTIsMjcxOTQs''@;'; put 'put ''MjcyMjUsMjcyNDMsMjcyMjQsMjcxOTMsMjcyMDQsMjcyMzQsMjcyMzMsMjcyMTEsMjcyMDcsMjcxODksMjcyMzEsMjcyMDgsMjc0ODEsMjc1MTEsMjc2NTMsMjg2MTAsMjg1OTMsMjg1NzcsMjg2MTEsMjg1ODAsMjg2MDksMjg1ODMsMjg1OTUsMjg2MDgsMjg2MDEsMjg1OTgsMjg1ODIsMjg1''@;'; put 'put ''NzYsMjg1OTYsMjkxMTgsMjkxMjksMjkxMzYsMjkxMzgsMjkxMjgsMjkxNDEsMjkxMTMsMjkxMzQsMjkxNDUsMjkxNDgsMjkxMjMsMjkxMjQsMjk1NDQsMjk4NTIsMjk4NTksMjk4NDgsMjk4NTUsMjk4NTQsMjk5MjIsMjk5NjQsMjk5NjUsMzAyNjAsMzAyNjQsMzAyNjYsMzA0MzksMzA0Mzcs''@;'; put 'put ''MzA2MjQsMzA2MjIsMzA2MjMsMzA2MjksMzA5NTIsMzA5MzgsMzA5NTYsMzA5NTEsMzExNDIsMzEzMDksMzEzMTAsMzEzMDIsMzEzMDgsMzEzMDcsMzE0MTgsMzE3MDUsMzE3NjEsMzE2ODksMzE3MTYsMzE3MDcsMzE3MTMsMzE3MjEsMzE3MTgsMzE5NTcsMzE5NTgsMzIyNjYsMzIyNzMsMzIy''@;'; put 'put ''NjQsMzIyODMsMzIyOTEsMzIyODYsMzIyODUsMzIyNjUsMzIyNzIsMzI2MzMsMzI2OTAsMzI3NTIsMzI3NTMsMzI3NTAsMzI4MDgsMzMyMDMsMzMxOTMsMzMxOTIsMzMyNzUsMzMyODgsMzMzNjgsMzMzNjksMzQxMjIsMzQxMzcsMzQxMjAsMzQxNTIsMzQxNTMsMzQxMTUsMzQxMjEsMzQxNTcs''@;'; put 'put ''MzQxNTQsMzQxNDIsMzQ2OTEsMzQ3MTksMzQ3MTgsMzQ3MjIsMzQ3MDEsMzQ5MTMsMzUxMTQsMzUxMjIsMzUxMDksMzUxMTUsMzUxMDUsMzUyNDIsMzUyMzgsMzU1NTgsMzU1NzgsMzU1NjMsMzU1NjksMzU1ODQsMzU1NDgsMzU1NTksMzU1NjYsMzU1ODIsMzU1ODUsMzU1ODYsMzU1NzUsMzU1''@;'; put 'put ''NjUsMzU1NzEsMzU1NzQsMzU1ODAsMzU5NDcsMzU5NDksMzU5ODcsMzYwODQsMzY0MjAsMzY0MDEsMzY0MDQsMzY0MTgsMzY0MDksMzY0MDUsMzY2NjcsMzY2NTUsMzY2NjQsMzY2NTksMzY3NzYsMzY3NzQsMzY5ODEsMzY5ODAsMzY5ODQsMzY5NzgsMzY5ODgsMzY5ODYsMzcxNzIsMzcyNjYs''@;'; put 'put ''Mzc2NjQsMzc2ODYsMzc2MjQsMzc2ODMsMzc2NzksMzc2NjYsMzc2MjgsMzc2NzUsMzc2MzYsMzc2NTgsMzc2NDgsMzc2NzAsMzc2NjUsMzc2NTMsMzc2NzgsMzc2NTcsMzgzMzEsMzg1NjcsMzg1NjgsMzg1NzAsMzg2MTMsMzg2NzAsMzg2NzMsMzg2NzgsMzg2NjksMzg2NzUsMzg2NzEsMzg3''@;'; put 'put ''NDcsMzg3NDgsMzg3NTgsMzg4MDgsMzg5NjAsMzg5NjgsMzg5NzEsMzg5NjcsMzg5NTcsMzg5NjksMzg5NDgsMzkxODQsMzkyMDgsMzkxOTgsMzkxOTUsMzkyMDEsMzkxOTQsMzk0MDUsMzkzOTQsMzk0MDksMzk2MDgsMzk2MTIsMzk2NzUsMzk2NjEsMzk3MjAsMzk4MjUsNDAyMTMsNDAyMjcs''@;'; put 'put ''NDAyMzAsNDAyMzIsNDAyMTAsNDAyMTksNDA2NjQsNDA2NjAsNDA4NDUsNDA4NjAsMjA3NzgsMjA3NjcsMjA3NjksMjA3ODYsMjEyMzcsMjIxNTgsMjIxNDQsMjIxNjAsMjIxNDksMjIxNTEsMjIxNTksMjI3NDEsMjI3MzksMjI3MzcsMjI3MzQsMjMzNDQsMjMzMzgsMjMzMzIsMjM0MTgsMjM2''@;'; put 'put ''MDcsMjM2NTYsMjM5OTYsMjM5OTQsMjM5OTcsMjM5OTIsMjQxNzEsMjQzOTYsMjQ1MDksMjUwMzMsMjUwMjYsMjUwMzEsMjUwNjIsMjUwMzUsMjUxMzgsMjUxNDAsMjU4MDYsMjU4MDIsMjU4MTYsMjU4MjQsMjU4NDAsMjU4MzAsMjU4MzYsMjU4NDEsMjU4MjYsMjU4MzcsMjU5ODYsMjU5ODcs''@;'; put 'put ''MjYzMjksMjYzMjYsMjcyNjQsMjcyODQsMjcyNjgsMjcyOTgsMjcyOTIsMjczNTUsMjcyOTksMjcyNjIsMjcyODcsMjcyODAsMjcyOTYsMjc0ODQsMjc1NjYsMjc2MTAsMjc2NTYsMjg2MzIsMjg2NTcsMjg2MzksMjg2NDAsMjg2MzUsMjg2NDQsMjg2NTEsMjg2NTUsMjg1NDQsMjg2NTIsMjg2''@;'; put 'put ''NDEsMjg2NDksMjg2MjksMjg2NTQsMjg2NTYsMjkxNTksMjkxNTEsMjkxNjYsMjkxNTgsMjkxNTcsMjkxNjUsMjkxNjQsMjkxNzIsMjkxNTIsMjkyMzcsMjkyNTQsMjk1NTIsMjk1NTQsMjk4NjUsMjk4NzIsMjk4NjIsMjk4NjQsMzAyNzgsMzAyNzQsMzAyODQsMzA0NDIsMzA2NDMsMzA2MzQs''@;'; put 'put ''MzA2NDAsMzA2MzYsMzA2MzEsMzA2MzcsMzA3MDMsMzA5NjcsMzA5NzAsMzA5NjQsMzA5NTksMzA5NzcsMzExNDMsMzExNDYsMzEzMTksMzE0MjMsMzE3NTEsMzE3NTcsMzE3NDIsMzE3MzUsMzE3NTYsMzE3MTIsMzE5NjgsMzE5NjQsMzE5NjYsMzE5NzAsMzE5NjcsMzE5NjEsMzE5NjUsMzIz''@;'; put 'put ''MDIsMzIzMTgsMzIzMjYsMzIzMTEsMzIzMDYsMzIzMjMsMzIyOTksMzIzMTcsMzIzMDUsMzIzMjUsMzIzMjEsMzIzMDgsMzIzMTMsMzIzMjgsMzIzMDksMzIzMTksMzIzMDMsMzI1ODAsMzI3NTUsMzI3NjQsMzI4ODEsMzI4ODIsMzI4ODAsMzI4NzksMzI4ODMsMzMyMjIsMzMyMTksMzMyMTAs''@;'; put 'put ''MzMyMTgsMzMyMTYsMzMyMTUsMzMyMTMsMzMyMjUsMzMyMTQsMzMyNTYsMzMyODksMzMzOTMsMzQyMTgsMzQxODAsMzQxNzQsMzQyMDQsMzQxOTMsMzQxOTYsMzQyMjMsMzQyMDMsMzQxODMsMzQyMTYsMzQxODYsMzQ0MDcsMzQ3NTIsMzQ3NjksMzQ3MzksMzQ3NzAsMzQ3NTgsMzQ3MzEsMzQ3''@;'; put 'put ''NDcsMzQ3NDYsMzQ3NjAsMzQ3NjMsMzUxMzEsMzUxMjYsMzUxNDAsMzUxMjgsMzUxMzMsMzUyNDQsMzU1OTgsMzU2MDcsMzU2MDksMzU2MTEsMzU1OTQsMzU2MTYsMzU2MTMsMzU1ODgsMzU2MDAsMzU5MDUsMzU5MDMsMzU5NTUsMzYwOTAsMzYwOTMsMzYwOTIsMzYwODgsMzYwOTEsMzYyNjQs''@;'; put 'put ''MzY0MjUsMzY0MjcsMzY0MjQsMzY0MjYsMzY2NzYsMzY2NzAsMzY2NzQsMzY2NzcsMzY2NzEsMzY5OTEsMzY5ODksMzY5OTYsMzY5OTMsMzY5OTQsMzY5OTIsMzcxNzcsMzcyODMsMzcyNzgsMzcyNzYsMzc3MDksMzc3NjIsMzc2NzIsMzc3NDksMzc3MDYsMzc3MzMsMzc3MDcsMzc2NTYsMzc3''@;'; put 'put ''NTgsMzc3NDAsMzc3MjMsMzc3NDQsMzc3MjIsMzc3MTYsMzgzNDYsMzgzNDcsMzgzNDgsMzgzNDQsMzgzNDIsMzg1NzcsMzg1ODQsMzg2MTQsMzg2ODQsMzg2ODYsMzg4MTYsMzg4NjcsMzg5ODIsMzkwOTQsMzkyMjEsMzk0MjUsMzk0MjMsMzk4NTQsMzk4NTEsMzk4NTAsMzk4NTMsNDAyNTEs''@;'; put 'put ''NDAyNTUsNDA1ODcsNDA2NTUsNDA2NzAsNDA2NjgsNDA2NjksNDA2NjcsNDA3NjYsNDA3NzksMjE0NzQsMjIxNjUsMjIxOTAsMjI3NDUsMjI3NDQsMjMzNTIsMjQ0MTMsMjUwNTksMjUxMzksMjU4NDQsMjU4NDIsMjU4NTQsMjU4NjIsMjU4NTAsMjU4NTEsMjU4NDcsMjYwMzksMjYzMzIsMjY0''@;'; put 'put ''MDYsMjczMTUsMjczMDgsMjczMzEsMjczMjMsMjczMjAsMjczMzAsMjczMTAsMjczMTEsMjc0ODcsMjc1MTIsMjc1NjcsMjg2ODEsMjg2ODMsMjg2NzAsMjg2NzgsMjg2NjYsMjg2ODksMjg2ODcsMjkxNzksMjkxODAsMjkxODIsMjkxNzYsMjk1NTksMjk1NTcsMjk4NjMsMjk4ODcsMjk5NzMs''@;'; put 'put ''MzAyOTQsMzAyOTYsMzAyOTAsMzA2NTMsMzA2NTUsMzA2NTEsMzA2NTIsMzA5OTAsMzExNTAsMzEzMjksMzEzMzAsMzEzMjgsMzE0MjgsMzE0MjksMzE3ODcsMzE3ODMsMzE3ODYsMzE3NzQsMzE3NzksMzE3NzcsMzE5NzUsMzIzNDAsMzIzNDEsMzIzNTAsMzIzNDYsMzIzNTMsMzIzMzgsMzIz''@;'; put 'put ''NDUsMzI1ODQsMzI3NjEsMzI3NjMsMzI4ODcsMzI4ODYsMzMyMjksMzMyMzEsMzMyOTAsMzQyNTUsMzQyMTcsMzQyNTMsMzQyNTYsMzQyNDksMzQyMjQsMzQyMzQsMzQyMzMsMzQyMTQsMzQ3OTksMzQ3OTYsMzQ4MDIsMzQ3ODQsMzUyMDYsMzUyNTAsMzUzMTYsMzU2MjQsMzU2NDEsMzU2Mjgs''@;'; put 'put ''MzU2MjcsMzU5MjAsMzYxMDEsMzY0NDEsMzY0NTEsMzY0NTQsMzY0NTIsMzY0NDcsMzY0MzcsMzY1NDQsMzY2ODEsMzY2ODUsMzY5OTksMzY5OTUsMzdlMywzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4''@;'; put 'put ''NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwzODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwzOTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwz''@;'; put 'put ''OTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3''@;'; put 'put ''OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwyODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0NiwyOTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4Niwz''@;'; put 'put ''MDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2''@;'; put 'put ''MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3NiwzNTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwzNTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwz''@;'; put 'put ''NjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgzMiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5''@;'; put 'put ''OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOWUzLDM5MDAzLDM5MTAwLDM5MjM3LDM5MjQxLDM5NDQ2LDM5NDQ5LDM5NjkzLDM5OTEyLDM5OTExLDM5ODk0LDM5ODk5LDQwMzI5LDQwMjg5LDQwMzA2LDQwMjk4LDQwMzAwLDQwNTk0LDQwNTk5LDQwNTk1LDQwNjI4LDIxMjQwLDIy''@;'; put 'put ''MTg0LDIyMTk5LDIyMTk4LDIyMTk2LDIyMjA0LDIyNzU2LDIzMzYwLDIzMzYzLDIzNDIxLDIzNTQyLDI0MDA5LDI1MDgwLDI1MDgyLDI1ODgwLDI1ODc2LDI1ODgxLDI2MzQyLDI2NDA3LDI3MzcyLDI4NzM0LDI4NzIwLDI4NzIyLDI5MjAwLDI5NTYzLDI5OTAzLDMwMzA2LDMwMzA5LDMxMDE0''@;'; put 'put ''LDMxMDE4LDMxMDIwLDMxMDE5LDMxNDMxLDMxNDc4LDMxODIwLDMxODExLDMxODIxLDMxOTgzLDMxOTg0LDM2NzgyLDMyMzgxLDMyMzgwLDMyMzg2LDMyNTg4LDMyNzY4LDMzMjQyLDMzMzgyLDM0Mjk5LDM0Mjk3LDM0MzIxLDM0Mjk4LDM0MzEwLDM0MzE1LDM0MzExLDM0MzE0LDM0ODM2LDM0''@;'; put 'put ''ODM3LDM1MTcyLDM1MjU4LDM1MzIwLDM1Njk2LDM1NjkyLDM1Njg2LDM1Njk1LDM1Njc5LDM1NjkxLDM2MTExLDM2MTA5LDM2NDg5LDM2NDgxLDM2NDg1LDM2NDgyLDM3MzAwLDM3MzIzLDM3OTEyLDM3ODkxLDM3ODg1LDM4MzY5LDM4NzA0LDM5MTA4LDM5MjUwLDM5MjQ5LDM5MzM2LDM5NDY3''@;'; put 'put ''LDM5NDcyLDM5NDc5LDM5NDc3LDM5OTU1LDM5OTQ5LDQwNTY5LDQwNjI5LDQwNjgwLDQwNzUxLDQwNzk5LDQwODAzLDQwODAxLDIwNzkxLDIwNzkyLDIyMjA5LDIyMjA4LDIyMjEwLDIyODA0LDIzNjYwLDI0MDEzLDI1MDg0LDI1MDg2LDI1ODg1LDI1ODg0LDI2MDA1LDI2MzQ1LDI3Mzg3LDI3''@;'; put 'put ''Mzk2LDI3Mzg2LDI3NTcwLDI4NzQ4LDI5MjExLDI5MzUxLDI5OTEwLDI5OTA4LDMwMzEzLDMwNjc1LDMxODI0LDMyMzk5LDMyMzk2LDMyNzAwLDM0MzI3LDM0MzQ5LDM0MzMwLDM0ODUxLDM0ODUwLDM0ODQ5LDM0ODQ3LDM1MTc4LDM1MTgwLDM1MjYxLDM1NzAwLDM1NzAzLDM1NzA5LDM2MTE1''@;'; put 'put ''LDM2NDkwLDM2NDkzLDM2NDkxLDM2NzAzLDM2NzgzLDM3MzA2LDM3OTM0LDM3OTM5LDM3OTQxLDM3OTQ2LDM3OTQ0LDM3OTM4LDM3OTMxLDM4MzcwLDM4NzEyLDM4NzEzLDM4NzA2LDM4OTExLDM5MDE1LDM5MDEzLDM5MjU1LDM5NDkzLDM5NDkxLDM5NDg4LDM5NDg2LDM5NjMxLDM5NzY0LDM5''@;'; put 'put ''NzYxLDM5OTgxLDM5OTczLDQwMzY3LDQwMzcyLDQwMzg2LDQwMzc2LDQwNjA1LDQwNjg3LDQwNzI5LDQwNzk2LDQwODA2LDQwODA3LDIwNzk2LDIwNzk1LDIyMjE2LDIyMjE4LDIyMjE3LDIzNDIzLDI0MDIwLDI0MDE4LDI0Mzk4LDI1MDg3LDI1ODkyLDI3NDAyLDI3NDg5LDI4NzUzLDI4NzYw''@;'; put 'put ''LDI5NTY4LDI5OTI0LDMwMDkwLDMwMzE4LDMwMzE2LDMxMTU1LDMxODQwLDMxODM5LDMyODk0LDMyODkzLDMzMjQ3LDM1MTg2LDM1MTgzLDM1MzI0LDM1NzEyLDM2MTE4LDM2MTE5LDM2NDk3LDM2NDk5LDM2NzA1LDM3MTkyLDM3OTU2LDM3OTY5LDM3OTcwLDM4NzE3LDM4NzE4LDM4ODUxLDM4''@;'; put 'put ''ODQ5LDM5MDE5LDM5MjUzLDM5NTA5LDM5NTAxLDM5NjM0LDM5NzA2LDQwMDA5LDM5OTg1LDM5OTk4LDM5OTk1LDQwNDAzLDQwNDA3LDQwNzU2LDQwODEyLDQwODEwLDQwODUyLDIyMjIwLDI0MDIyLDI1MDg4LDI1ODkxLDI1ODk5LDI1ODk4LDI2MzQ4LDI3NDA4LDI5OTE0LDMxNDM0LDMxODQ0''@;'; put 'put ''LDMxODQzLDMxODQ1LDMyNDAzLDMyNDA2LDMyNDA0LDMzMjUwLDM0MzYwLDM0MzY3LDM0ODY1LDM1NzIyLDM3MDA4LDM3MDA3LDM3OTg3LDM3OTg0LDM3OTg4LDM4NzYwLDM5MDIzLDM5MjYwLDM5NTE0LDM5NTE1LDM5NTExLDM5NjM1LDM5NjM2LDM5NjMzLDQwMDIwLDQwMDIzLDQwMDIyLDQw''@;'; put 'put ''NDIxLDQwNjA3LDQwNjkyLDIyMjI1LDIyNzYxLDI1OTAwLDI4NzY2LDMwMzIxLDMwMzIyLDMwNjc5LDMyNTkyLDMyNjQ4LDM0ODcwLDM0ODczLDM0OTE0LDM1NzMxLDM1NzMwLDM1NzM0LDMzMzk5LDM2MTIzLDM3MzEyLDM3OTk0LDM4NzIyLDM4NzI4LDM4NzI0LDM4ODU0LDM5MDI0LDM5NTE5''@;'; put 'put ''LDM5NzE0LDM5NzY4LDQwMDMxLDQwNDQxLDQwNDQyLDQwNTcyLDQwNTczLDQwNzExLDQwODIzLDQwODE4LDI0MzA3LDI3NDE0LDI4NzcxLDMxODUyLDMxODU0LDM0ODc1LDM1MjY0LDM2NTEzLDM3MzEzLDM4MDAyLDM4ZTMsMzkwMjUsMzkyNjIsMzk2MzgsMzk3MTUsNDA2NTIsMjg3NzIsMzA2''@;'; put 'put ''ODIsMzU3MzgsMzgwMDcsMzg4NTcsMzk1MjIsMzk1MjUsMzI0MTIsMzU3NDAsMzY1MjIsMzczMTcsMzgwMTMsMzgwMTQsMzgwMTIsNDAwNTUsNDAwNTYsNDA2OTUsMzU5MjQsMzgwMTUsNDA0NzQsMjkyMjQsMzk1MzAsMzk3MjksNDA0NzUsNDA0NzgsMzE4NTgsOTMxMiw5MzEzLDkzMTQsOTMx''@;'; put 'put ''NSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksMjAwMjIsMjAwMzEsMjAxMDEsMjAxMjgsMjA4NjYsMjA4''@;'; put 'put ''ODYsMjA5MDcsMjEyNDEsMjEzMDQsMjEzNTMsMjE0MzAsMjI3OTQsMjM0MjQsMjQwMjcsMTIwODMsMjQxOTEsMjQzMDgsMjQ0MDAsMjQ0MTcsMjU5MDgsMjYwODAsMzAwOTgsMzAzMjYsMzY3ODksMzg1ODIsMTY4LDcxMCwxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5''@;'; put 'put ''MywxMjI5NCwxMjI5NSwxMjU0MCw2NTMzOSw2NTM0MSwxMDA0NSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3Mywx''@;'; put 'put ''MjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQw''@;'; put 'put ''MSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwx''@;'; put 'put ''MjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2''@;'; put 'put ''OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5Niwx''@;'; put 'put ''MjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUy''@;'; put 'put ''NCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1''@;'; put 'put ''OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5''@;'; put 'put ''MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4Njc5LDg2MzIsODYzMywxMjc1MSwxMzEyNzYsMjAwNTgsMTMxMjEwLDIwOTk0LDE3NTUzLDQwODgwLDIwODcyLDQwODgxLDE2MTI4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSwxMjQ0MywxMjQ0NCwxMTkwNCwxMTkwOCwxMTkxMCwxMTkxMSwxMTkxMiwxMTkxNCwxMTkxNiwxMTkxNywxMTkyNSwxMTkzMiwxMTkzMywxMTk0MSwxMTk0MywxMTk0NiwxMTk0OCwxMTk1MCwxMTk1OCwx''@;'; put 'put ''MTk2NCwxMTk2NiwxMTk3NCwxMTk3OCwxMTk4MCwxMTk4MSwxMTk4MywxMTk5MCwxMTk5MSwxMTk5OCwxMjAwMyxudWxsLG51bGwsbnVsbCw2NDMsNTkyLDYwMyw1OTYsNjI5LDMzOSwyNDgsMzMxLDY1MCw2MTgsMjAwMzQsMjAwNjAsMjA5ODEsMjEyNzQsMjEzNzgsMTk5NzUsMTk5ODAsMjAw''@;'; put 'put ''MzksMjAxMDksMjIyMzEsNjQwMTIsMjM2NjIsMjQ0MzUsMTk5ODMsMjA4NzEsMTk5ODIsMjAwMTQsMjAxMTUsMjAxNjIsMjAxNjksMjAxNjgsMjA4ODgsMjEyNDQsMjEzNTYsMjE0MzMsMjIzMDQsMjI3ODcsMjI4MjgsMjM1NjgsMjQwNjMsMjYwODEsMjc1NzEsMjc1OTYsMjc2NjgsMjkyNDcs''@;'; put 'put ''MjAwMTcsMjAwMjgsMjAyMDAsMjAxODgsMjAyMDEsMjAxOTMsMjAxODksMjAxODYsMjEwMDQsMjEyNzYsMjEzMjQsMjIzMDYsMjIzMDcsMjI4MDcsMjI4MzEsMjM0MjUsMjM0MjgsMjM1NzAsMjM2MTEsMjM2NjgsMjM2NjcsMjQwNjgsMjQxOTIsMjQxOTQsMjQ1MjEsMjUwOTcsMjUxNjgsMjc2''@;'; put 'put ''NjksMjc3MDIsMjc3MTUsMjc3MTEsMjc3MDcsMjkzNTgsMjkzNjAsMjk1NzgsMzExNjAsMzI5MDYsMzg0MzAsMjAyMzgsMjAyNDgsMjAyNjgsMjAyMTMsMjAyNDQsMjAyMDksMjAyMjQsMjAyMTUsMjAyMzIsMjAyNTMsMjAyMjYsMjAyMjksMjAyNTgsMjAyNDMsMjAyMjgsMjAyMTIsMjAyNDIs''@;'; put 'put ''MjA5MTMsMjEwMTEsMjEwMDEsMjEwMDgsMjExNTgsMjEyODIsMjEyNzksMjEzMjUsMjEzODYsMjE1MTEsMjIyNDEsMjIyMzksMjIzMTgsMjIzMTQsMjIzMjQsMjI4NDQsMjI5MTIsMjI5MDgsMjI5MTcsMjI5MDcsMjI5MTAsMjI5MDMsMjI5MTEsMjMzODIsMjM1NzMsMjM1ODksMjM2NzYsMjM2''@;'; put 'put ''NzQsMjM2NzUsMjM2NzgsMjQwMzEsMjQxODEsMjQxOTYsMjQzMjIsMjQzNDYsMjQ0MzYsMjQ1MzMsMjQ1MzIsMjQ1MjcsMjUxODAsMjUxODIsMjUxODgsMjUxODUsMjUxOTAsMjUxODYsMjUxNzcsMjUxODQsMjUxNzgsMjUxODksMjYwOTUsMjYwOTQsMjY0MzAsMjY0MjUsMjY0MjQsMjY0Mjcs''@;'; put 'put ''MjY0MjYsMjY0MzEsMjY0MjgsMjY0MTksMjc2NzIsMjc3MTgsMjc3MzAsMjc3NDAsMjc3MjcsMjc3MjIsMjc3MzIsMjc3MjMsMjc3MjQsMjg3ODUsMjkyNzgsMjkzNjQsMjkzNjUsMjk1ODIsMjk5OTQsMzAzMzUsMzEzNDksMzI1OTMsMzM0MDAsMzM0MDQsMzM0MDgsMzM0MDUsMzM0MDcsMzQz''@;'; put 'put ''ODEsMzUxOTgsMzcwMTcsMzcwMTUsMzcwMTYsMzcwMTksMzcwMTIsMzg0MzQsMzg0MzYsMzg0MzIsMzg0MzUsMjAzMTAsMjAyODMsMjAzMjIsMjAyOTcsMjAzMDcsMjAzMjQsMjAyODYsMjAzMjcsMjAzMDYsMjAzMTksMjAyODksMjAzMTIsMjAyNjksMjAyNzUsMjAyODcsMjAzMjEsMjA4Nzks''@;'; put 'put ''MjA5MjEsMjEwMjAsMjEwMjIsMjEwMjUsMjExNjUsMjExNjYsMjEyNTcsMjEzNDcsMjEzNjIsMjEzOTAsMjEzOTEsMjE1NTIsMjE1NTksMjE1NDYsMjE1ODgsMjE1NzMsMjE1MjksMjE1MzIsMjE1NDEsMjE1MjgsMjE1NjUsMjE1ODMsMjE1NjksMjE1NDQsMjE1NDAsMjE1NzUsMjIyNTQsMjIy''@;'; put 'put ''NDcsMjIyNDUsMjIzMzcsMjIzNDEsMjIzNDgsMjIzNDUsMjIzNDcsMjIzNTQsMjI3OTAsMjI4NDgsMjI5NTAsMjI5MzYsMjI5NDQsMjI5MzUsMjI5MjYsMjI5NDYsMjI5MjgsMjI5MjcsMjI5NTEsMjI5NDUsMjM0MzgsMjM0NDIsMjM1OTIsMjM1OTQsMjM2OTMsMjM2OTUsMjM2ODgsMjM2OTEs''@;'; put 'put ''MjM2ODksMjM2OTgsMjM2OTAsMjM2ODYsMjM2OTksMjM3MDEsMjQwMzIsMjQwNzQsMjQwNzgsMjQyMDMsMjQyMDEsMjQyMDQsMjQyMDAsMjQyMDUsMjQzMjUsMjQzNDksMjQ0NDAsMjQ0MzgsMjQ1MzAsMjQ1MjksMjQ1MjgsMjQ1NTcsMjQ1NTIsMjQ1NTgsMjQ1NjMsMjQ1NDUsMjQ1NDgsMjQ1''@;'; put 'put ''NDcsMjQ1NzAsMjQ1NTksMjQ1NjcsMjQ1NzEsMjQ1NzYsMjQ1NjQsMjUxNDYsMjUyMTksMjUyMjgsMjUyMzAsMjUyMzEsMjUyMzYsMjUyMjMsMjUyMDEsMjUyMTEsMjUyMTAsMjUyMDAsMjUyMTcsMjUyMjQsMjUyMDcsMjUyMTMsMjUyMDIsMjUyMDQsMjU5MTEsMjYwOTYsMjYxMDAsMjYwOTks''@;'; put 'put ''MjYwOTgsMjYxMDEsMjY0MzcsMjY0MzksMjY0NTcsMjY0NTMsMjY0NDQsMjY0NDAsMjY0NjEsMjY0NDUsMjY0NTgsMjY0NDMsMjc2MDAsMjc2NzMsMjc2NzQsMjc3NjgsMjc3NTEsMjc3NTUsMjc3ODAsMjc3ODcsMjc3OTEsMjc3NjEsMjc3NTksMjc3NTMsMjc4MDIsMjc3NTcsMjc3ODMsMjc3''@;'; put 'put ''OTcsMjc4MDQsMjc3NTAsMjc3NjMsMjc3NDksMjc3NzEsMjc3OTAsMjg3ODgsMjg3OTQsMjkyODMsMjkzNzUsMjkzNzMsMjkzNzksMjkzODIsMjkzNzcsMjkzNzAsMjkzODEsMjk1ODksMjk1OTEsMjk1ODcsMjk1ODgsMjk1ODYsMzAwMTAsMzAwMDksMzAxMDAsMzAxMDEsMzAzMzcsMzEwMzcs''@;'; put 'put ''MzI4MjAsMzI5MTcsMzI5MjEsMzI5MTIsMzI5MTQsMzI5MjQsMzM0MjQsMzM0MjMsMzM0MTMsMzM0MjIsMzM0MjUsMzM0MjcsMzM0MTgsMzM0MTEsMzM0MTIsMzU5NjAsMzY4MDksMzY3OTksMzcwMjMsMzcwMjUsMzcwMjksMzcwMjIsMzcwMzEsMzcwMjQsMzg0NDgsMzg0NDAsMzg0NDcsMzg0''@;'; put 'put ''NDUsMjAwMTksMjAzNzYsMjAzNDgsMjAzNTcsMjAzNDksMjAzNTIsMjAzNTksMjAzNDIsMjAzNDAsMjAzNjEsMjAzNTYsMjAzNDMsMjAzMDAsMjAzNzUsMjAzMzAsMjAzNzgsMjAzNDUsMjAzNTMsMjAzNDQsMjAzNjgsMjAzODAsMjAzNzIsMjAzODIsMjAzNzAsMjAzNTQsMjAzNzMsMjAzMzEs''@;'; put 'put ''MjAzMzQsMjA4OTQsMjA5MjQsMjA5MjYsMjEwNDUsMjEwNDIsMjEwNDMsMjEwNjIsMjEwNDEsMjExODAsMjEyNTgsMjEyNTksMjEzMDgsMjEzOTQsMjEzOTYsMjE2MzksMjE2MzEsMjE2MzMsMjE2NDksMjE2MzQsMjE2NDAsMjE2MTEsMjE2MjYsMjE2MzAsMjE2MDUsMjE2MTIsMjE2MjAsMjE2''@;'; put 'put ''MDYsMjE2NDUsMjE2MTUsMjE2MDEsMjE2MDAsMjE2NTYsMjE2MDMsMjE2MDcsMjE2MDQsMjIyNjMsMjIyNjUsMjIzODMsMjIzODYsMjIzODEsMjIzNzksMjIzODUsMjIzODQsMjIzOTAsMjI0MDAsMjIzODksMjIzOTUsMjIzODcsMjIzODgsMjIzNzAsMjIzNzYsMjIzOTcsMjI3OTYsMjI4NTMs''@;'; put 'put ''MjI5NjUsMjI5NzAsMjI5OTEsMjI5OTAsMjI5NjIsMjI5ODgsMjI5NzcsMjI5NjYsMjI5NzIsMjI5NzksMjI5OTgsMjI5NjEsMjI5NzMsMjI5NzYsMjI5ODQsMjI5NjQsMjI5ODMsMjMzOTQsMjMzOTcsMjM0NDMsMjM0NDUsMjM2MjAsMjM2MjMsMjM3MjYsMjM3MTYsMjM3MTIsMjM3MzMsMjM3''@;'; put 'put ''MjcsMjM3MjAsMjM3MjQsMjM3MTEsMjM3MTUsMjM3MjUsMjM3MTQsMjM3MjIsMjM3MTksMjM3MDksMjM3MTcsMjM3MzQsMjM3MjgsMjM3MTgsMjQwODcsMjQwODQsMjQwODksMjQzNjAsMjQzNTQsMjQzNTUsMjQzNTYsMjQ0MDQsMjQ0NTAsMjQ0NDYsMjQ0NDUsMjQ1NDIsMjQ1NDksMjQ2MjEs''@;'; put 'put ''MjQ2MTQsMjQ2MDEsMjQ2MjYsMjQ1ODcsMjQ2MjgsMjQ1ODYsMjQ1OTksMjQ2MjcsMjQ2MDIsMjQ2MDYsMjQ2MjAsMjQ2MTAsMjQ1ODksMjQ1OTIsMjQ2MjIsMjQ1OTUsMjQ1OTMsMjQ1ODgsMjQ1ODUsMjQ2MDQsMjUxMDgsMjUxNDksMjUyNjEsMjUyNjgsMjUyOTcsMjUyNzgsMjUyNTgsMjUy''@;'; put 'put ''NzAsMjUyOTAsMjUyNjIsMjUyNjcsMjUyNjMsMjUyNzUsMjUyNTcsMjUyNjQsMjUyNzIsMjU5MTcsMjYwMjQsMjYwNDMsMjYxMjEsMjYxMDgsMjYxMTYsMjYxMzAsMjYxMjAsMjYxMDcsMjYxMTUsMjYxMjMsMjYxMjUsMjYxMTcsMjYxMDksMjYxMjksMjYxMjgsMjYzNTgsMjYzNzgsMjY1MDEs''@;'; put 'put ''MjY0NzYsMjY1MTAsMjY1MTQsMjY0ODYsMjY0OTEsMjY1MjAsMjY1MDIsMjY1MDAsMjY0ODQsMjY1MDksMjY1MDgsMjY0OTAsMjY1MjcsMjY1MTMsMjY1MjEsMjY0OTksMjY0OTMsMjY0OTcsMjY0ODgsMjY0ODksMjY1MTYsMjc0MjksMjc1MjAsMjc1MTgsMjc2MTQsMjc2NzcsMjc3OTUsMjc4''@;'; put 'put ''ODQsMjc4ODMsMjc4ODYsMjc4NjUsMjc4MzAsMjc4NjAsMjc4MjEsMjc4NzksMjc4MzEsMjc4NTYsMjc4NDIsMjc4MzQsMjc4NDMsMjc4NDYsMjc4ODUsMjc4OTAsMjc4NTgsMjc4NjksMjc4MjgsMjc3ODYsMjc4MDUsMjc3NzYsMjc4NzAsMjc4NDAsMjc5NTIsMjc4NTMsMjc4NDcsMjc4MjQs''@;'; put 'put ''Mjc4OTcsMjc4NTUsMjc4ODEsMjc4NTcsMjg4MjAsMjg4MjQsMjg4MDUsMjg4MTksMjg4MDYsMjg4MDQsMjg4MTcsMjg4MjIsMjg4MDIsMjg4MjYsMjg4MDMsMjkyOTAsMjkzOTgsMjkzODcsMjk0MDAsMjkzODUsMjk0MDQsMjkzOTQsMjkzOTYsMjk0MDIsMjkzODgsMjkzOTMsMjk2MDQsMjk2''@;'; put 'put ''MDEsMjk2MTMsMjk2MDYsMjk2MDIsMjk2MDAsMjk2MTIsMjk1OTcsMjk5MTcsMjk5MjgsMzAwMTUsMzAwMTYsMzAwMTQsMzAwOTIsMzAxMDQsMzAzODMsMzA0NTEsMzA0NDksMzA0NDgsMzA0NTMsMzA3MTIsMzA3MTYsMzA3MTMsMzA3MTUsMzA3MTQsMzA3MTEsMzEwNDIsMzEwMzksMzExNzMs''@;'; put 'put ''MzEzNTIsMzEzNTUsMzE0ODMsMzE4NjEsMzE5OTcsMzI4MjEsMzI5MTEsMzI5NDIsMzI5MzEsMzI5NTIsMzI5NDksMzI5NDEsMzMzMTIsMzM0NDAsMzM0NzIsMzM0NTEsMzM0MzQsMzM0MzIsMzM0MzUsMzM0NjEsMzM0NDcsMzM0NTQsMzM0NjgsMzM0MzgsMzM0NjYsMzM0NjAsMzM0NDgsMzM0''@;'; put 'put ''NDEsMzM0NDksMzM0NzQsMzM0NDQsMzM0NzUsMzM0NjIsMzM0NDIsMzQ0MTYsMzQ0MTUsMzQ0MTMsMzQ0MTQsMzU5MjYsMzY4MTgsMzY4MTEsMzY4MTksMzY4MTMsMzY4MjIsMzY4MjEsMzY4MjMsMzcwNDIsMzcwNDQsMzcwMzksMzcwNDMsMzcwNDAsMzg0NTcsMzg0NjEsMzg0NjAsMzg0NTgs''@;'; put 'put ''Mzg0NjcsMjA0MjksMjA0MjEsMjA0MzUsMjA0MDIsMjA0MjUsMjA0MjcsMjA0MTcsMjA0MzYsMjA0NDQsMjA0NDEsMjA0MTEsMjA0MDMsMjA0NDMsMjA0MjMsMjA0MzgsMjA0MTAsMjA0MTYsMjA0MDksMjA0NjAsMjEwNjAsMjEwNjUsMjExODQsMjExODYsMjEzMDksMjEzNzIsMjEzOTksMjEz''@;'; put 'put ''OTgsMjE0MDEsMjE0MDAsMjE2OTAsMjE2NjUsMjE2NzcsMjE2NjksMjE3MTEsMjE2OTksMzM1NDksMjE2ODcsMjE2NzgsMjE3MTgsMjE2ODYsMjE3MDEsMjE3MDIsMjE2NjQsMjE2MTYsMjE2OTIsMjE2NjYsMjE2OTQsMjE2MTgsMjE3MjYsMjE2ODAsMjI0NTMsMjI0MzAsMjI0MzEsMjI0MzYs''@;'; put 'put ''MjI0MTIsMjI0MjMsMjI0MjksMjI0MjcsMjI0MjAsMjI0MjQsMjI0MTUsMjI0MjUsMjI0MzcsMjI0MjYsMjI0MjEsMjI3NzIsMjI3OTcsMjI4NjcsMjMwMDksMjMwMDYsMjMwMjIsMjMwNDAsMjMwMjUsMjMwMDUsMjMwMzQsMjMwMzcsMjMwMzYsMjMwMzAsMjMwMTIsMjMwMjYsMjMwMzEsMjMw''@;'; put 'put ''MDMsMjMwMTcsMjMwMjcsMjMwMjksMjMwMDgsMjMwMzgsMjMwMjgsMjMwMjEsMjM0NjQsMjM2MjgsMjM3NjAsMjM3NjgsMjM3NTYsMjM3NjcsMjM3NTUsMjM3NzEsMjM3NzQsMjM3NzAsMjM3NTMsMjM3NTEsMjM3NTQsMjM3NjYsMjM3NjMsMjM3NjQsMjM3NTksMjM3NTIsMjM3NTAsMjM3NTgs''@;'; put 'put ''MjM3NzUsMjM4MDAsMjQwNTcsMjQwOTcsMjQwOTgsMjQwOTksMjQwOTYsMjQxMDAsMjQyNDAsMjQyMjgsMjQyMjYsMjQyMTksMjQyMjcsMjQyMjksMjQzMjcsMjQzNjYsMjQ0MDYsMjQ0NTQsMjQ2MzEsMjQ2MzMsMjQ2NjAsMjQ2OTAsMjQ2NzAsMjQ2NDUsMjQ2NTksMjQ2NDcsMjQ2NDksMjQ2''@;'; put 'put ''NjcsMjQ2NTIsMjQ2NDAsMjQ2NDIsMjQ2NzEsMjQ2MTIsMjQ2NDQsMjQ2NjQsMjQ2NzgsMjQ2ODYsMjUxNTQsMjUxNTUsMjUyOTUsMjUzNTcsMjUzNTUsMjUzMzMsMjUzNTgsMjUzNDcsMjUzMjMsMjUzMzcsMjUzNTksMjUzNTYsMjUzMzYsMjUzMzQsMjUzNDQsMjUzNjMsMjUzNjQsMjUzMzgs''@;'; put 'put ''MjUzNjUsMjUzMzksMjUzMjgsMjU5MjEsMjU5MjMsMjYwMjYsMjYwNDcsMjYxNjYsMjYxNDUsMjYxNjIsMjYxNjUsMjYxNDAsMjYxNTAsMjYxNDYsMjYxNjMsMjYxNTUsMjYxNzAsMjYxNDEsMjYxNjQsMjYxNjksMjYxNTgsMjYzODMsMjYzODQsMjY1NjEsMjY2MTAsMjY1NjgsMjY1NTQsMjY1''@;'; put 'put ''ODgsMjY1NTUsMjY2MTYsMjY1ODQsMjY1NjAsMjY1NTEsMjY1NjUsMjY2MDMsMjY1OTYsMjY1OTEsMjY1NDksMjY1NzMsMjY1NDcsMjY2MTUsMjY2MTQsMjY2MDYsMjY1OTUsMjY1NjIsMjY1NTMsMjY1NzQsMjY1OTksMjY2MDgsMjY1NDYsMjY2MjAsMjY1NjYsMjY2MDUsMjY1NzIsMjY1NDIs''@;'; put 'put ''MjY1OTgsMjY1ODcsMjY2MTgsMjY1NjksMjY1NzAsMjY1NjMsMjY2MDIsMjY1NzEsMjc0MzIsMjc1MjIsMjc1MjQsMjc1NzQsMjc2MDYsMjc2MDgsMjc2MTYsMjc2ODAsMjc2ODEsMjc5NDQsMjc5NTYsMjc5NDksMjc5MzUsMjc5NjQsMjc5NjcsMjc5MjIsMjc5MTQsMjc4NjYsMjc5NTUsMjc5''@;'; put 'put ''MDgsMjc5MjksMjc5NjIsMjc5MzAsMjc5MjEsMjc5MDQsMjc5MzMsMjc5NzAsMjc5MDUsMjc5MjgsMjc5NTksMjc5MDcsMjc5MTksMjc5NjgsMjc5MTEsMjc5MzYsMjc5NDgsMjc5MTIsMjc5MzgsMjc5MTMsMjc5MjAsMjg4NTUsMjg4MzEsMjg4NjIsMjg4NDksMjg4NDgsMjg4MzMsMjg4NTIs''@;'; put 'put ''Mjg4NTMsMjg4NDEsMjkyNDksMjkyNTcsMjkyNTgsMjkyOTIsMjkyOTYsMjkyOTksMjkyOTQsMjkzODYsMjk0MTIsMjk0MTYsMjk0MTksMjk0MDcsMjk0MTgsMjk0MTQsMjk0MTEsMjk1NzMsMjk2NDQsMjk2MzQsMjk2NDAsMjk2MzcsMjk2MjUsMjk2MjIsMjk2MjEsMjk2MjAsMjk2NzUsMjk2''@;'; put 'put ''MzEsMjk2MzksMjk2MzAsMjk2MzUsMjk2MzgsMjk2MjQsMjk2NDMsMjk5MzIsMjk5MzQsMjk5OTgsMzAwMjMsMzAwMjQsMzAxMTksMzAxMjIsMzAzMjksMzA0MDQsMzA0NzIsMzA0NjcsMzA0NjgsMzA0NjksMzA0NzQsMzA0NTUsMzA0NTksMzA0NTgsMzA2OTUsMzA2OTYsMzA3MjYsMzA3Mzcs''@;'; put 'put ''MzA3MzgsMzA3MjUsMzA3MzYsMzA3MzUsMzA3MzQsMzA3MjksMzA3MjMsMzA3MzksMzEwNTAsMzEwNTIsMzEwNTEsMzEwNDUsMzEwNDQsMzExODksMzExODEsMzExODMsMzExOTAsMzExODIsMzEzNjAsMzEzNTgsMzE0NDEsMzE0ODgsMzE0ODksMzE4NjYsMzE4NjQsMzE4NjUsMzE4NzEsMzE4''@;'; put 'put ''NzIsMzE4NzMsMzIwMDMsMzIwMDgsMzIwMDEsMzI2MDAsMzI2NTcsMzI2NTMsMzI3MDIsMzI3NzUsMzI3ODIsMzI3ODMsMzI3ODgsMzI4MjMsMzI5ODQsMzI5NjcsMzI5OTIsMzI5NzcsMzI5NjgsMzI5NjIsMzI5NzYsMzI5NjUsMzI5OTUsMzI5ODUsMzI5ODgsMzI5NzAsMzI5ODEsMzI5Njks''@;'; put 'put ''MzI5NzUsMzI5ODMsMzI5OTgsMzI5NzMsMzMyNzksMzMzMTMsMzM0MjgsMzM0OTcsMzM1MzQsMzM1MjksMzM1NDMsMzM1MTIsMzM1MzYsMzM0OTMsMzM1OTQsMzM1MTUsMzM0OTQsMzM1MjQsMzM1MTYsMzM1MDUsMzM1MjIsMzM1MjUsMzM1NDgsMzM1MzEsMzM1MjYsMzM1MjAsMzM1MTQsMzM1''@;'; put 'put ''MDgsMzM1MDQsMzM1MzAsMzM1MjMsMzM1MTcsMzQ0MjMsMzQ0MjAsMzQ0MjgsMzQ0MTksMzQ4ODEsMzQ4OTQsMzQ5MTksMzQ5MjIsMzQ5MjEsMzUyODMsMzUzMzIsMzUzMzUsMzYyMTAsMzY4MzUsMzY4MzMsMzY4NDYsMzY4MzIsMzcxMDUsMzcwNTMsMzcwNTUsMzcwNzcsMzcwNjEsMzcwNTQs''@;'; put 'put ''MzcwNjMsMzcwNjcsMzcwNjQsMzczMzIsMzczMzEsMzg0ODQsMzg0NzksMzg0ODEsMzg0ODMsMzg0NzQsMzg0NzgsMjA1MTAsMjA0ODUsMjA0ODcsMjA0OTksMjA1MTQsMjA1MjgsMjA1MDcsMjA0NjksMjA0NjgsMjA1MzEsMjA1MzUsMjA1MjQsMjA0NzAsMjA0NzEsMjA1MDMsMjA1MDgsMjA1''@;'; put 'put ''MTIsMjA1MTksMjA1MzMsMjA1MjcsMjA1MjksMjA0OTQsMjA4MjYsMjA4ODQsMjA4ODMsMjA5MzgsMjA5MzIsMjA5MzMsMjA5MzYsMjA5NDIsMjEwODksMjEwODIsMjEwNzQsMjEwODYsMjEwODcsMjEwNzcsMjEwOTAsMjExOTcsMjEyNjIsMjE0MDYsMjE3OTgsMjE3MzAsMjE3ODMsMjE3Nzgs''@;'; put 'put ''MjE3MzUsMjE3NDcsMjE3MzIsMjE3ODYsMjE3NTksMjE3NjQsMjE3NjgsMjE3MzksMjE3NzcsMjE3NjUsMjE3NDUsMjE3NzAsMjE3NTUsMjE3NTEsMjE3NTIsMjE3MjgsMjE3NzQsMjE3NjMsMjE3NzEsMjIyNzMsMjIyNzQsMjI0NzYsMjI1NzgsMjI0ODUsMjI0ODIsMjI0NTgsMjI0NzAsMjI0''@;'; put 'put ''NjEsMjI0NjAsMjI0NTYsMjI0NTQsMjI0NjMsMjI0NzEsMjI0ODAsMjI0NTcsMjI0NjUsMjI3OTgsMjI4NTgsMjMwNjUsMjMwNjIsMjMwODUsMjMwODYsMjMwNjEsMjMwNTUsMjMwNjMsMjMwNTAsMjMwNzAsMjMwOTEsMjM0MDQsMjM0NjMsMjM0NjksMjM0NjgsMjM1NTUsMjM2MzgsMjM2MzYs''@;'; put 'put ''MjM3ODgsMjM4MDcsMjM3OTAsMjM3OTMsMjM3OTksMjM4MDgsMjM4MDEsMjQxMDUsMjQxMDQsMjQyMzIsMjQyMzgsMjQyMzQsMjQyMzYsMjQzNzEsMjQzNjgsMjQ0MjMsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ3MzgsMjQ3MTIsMjQ3MDQsMjQ3MjIsMjQ3MDUsMjQ3MzMsMjQ3MDcsMjQ3''@;'; put 'put ''MjUsMjQ3MzEsMjQ3MjcsMjQ3MTEsMjQ3MzIsMjQ3MTgsMjUxMTMsMjUxNTgsMjUzMzAsMjUzNjAsMjU0MzAsMjUzODgsMjU0MTIsMjU0MTMsMjUzOTgsMjU0MTEsMjU1NzIsMjU0MDEsMjU0MTksMjU0MTgsMjU0MDQsMjUzODUsMjU0MDksMjUzOTYsMjU0MzIsMjU0MjgsMjU0MzMsMjUzODks''@;'; put 'put ''MjU0MTUsMjUzOTUsMjU0MzQsMjU0MjUsMjU0MDAsMjU0MzEsMjU0MDgsMjU0MTYsMjU5MzAsMjU5MjYsMjYwNTQsMjYwNTEsMjYwNTIsMjYwNTAsMjYxODYsMjYyMDcsMjYxODMsMjYxOTMsMjYzODYsMjYzODcsMjY2NTUsMjY2NTAsMjY2OTcsMjY2NzQsMjY2NzUsMjY2ODMsMjY2OTksMjY3''@;'; put 'put ''MDMsMjY2NDYsMjY2NzMsMjY2NTIsMjY2NzcsMjY2NjcsMjY2NjksMjY2NzEsMjY3MDIsMjY2OTIsMjY2NzYsMjY2NTMsMjY2NDIsMjY2NDQsMjY2NjIsMjY2NjQsMjY2NzAsMjY3MDEsMjY2ODIsMjY2NjEsMjY2NTYsMjc0MzYsMjc0MzksMjc0MzcsMjc0NDEsMjc0NDQsMjc1MDEsMzI4OTgs''@;'; put 'put ''Mjc1MjgsMjc2MjIsMjc2MjAsMjc2MjQsMjc2MTksMjc2MTgsMjc2MjMsMjc2ODUsMjgwMjYsMjgwMDMsMjgwMDQsMjgwMjIsMjc5MTcsMjgwMDEsMjgwNTAsMjc5OTIsMjgwMDIsMjgwMTMsMjgwMTUsMjgwNDksMjgwNDUsMjgxNDMsMjgwMzEsMjgwMzgsMjc5OTgsMjgwMDcsMjhlMywyODA1''@;'; put 'put ''NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywyODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwyODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwy''@;'; put 'put ''ODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQzNCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2''@;'; put 'put ''NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwyOTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwzMDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwz''@;'; put 'put ''MDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1''@;'; put 'put ''NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2NiwzMTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2NywzMTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5Niwz''@;'; put 'put ''MTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAxNCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAxNSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYw''@;'; put 'put ''MywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwzMzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwzMzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwz''@;'; put 'put ''MzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2''@;'; put 'put ''NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwzNDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwzNDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwz''@;'; put 'put ''NDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIxNCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2''@;'; put 'put ''MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwzNzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5MiwzODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5Miwy''@;'; put 'put ''MDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUwMSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0''@;'; put 'put ''NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwyMTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwyMTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywy''@;'; put 'put ''MTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUwOSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5''@;'; put 'put ''NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwyMzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwyMzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywy''@;'; put 'put ''MzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEyMSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0''@;'; put 'put ''MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwyNDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3NiwyNDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2Niwy''@;'; put 'put ''NDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUx''@;'; put 'put ''NSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywyNTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1NiwyNTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwy''@;'; put 'put ''NjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1''@;'; put 'put ''MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0MywyNzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwyNzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3Niwy''@;'; put 'put ''ODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEyNSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0''@;'; put 'put ''NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwyODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0NywyODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwy''@;'; put 'put ''OTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcwMywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4''@;'; put 'put ''NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwzMDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwzMDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5Mywz''@;'; put 'put ''MDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIyNiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUy''@;'; put 'put ''NCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5NiwzMTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwzMjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2Miwz''@;'; put 'put ''MjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcxMSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgzOSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2''@;'; put 'put ''OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwzMzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwzMzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwz''@;'; put 'put ''MzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5''@;'; put 'put ''NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwzNDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4NiwzNDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwz''@;'; put 'put ''NDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAwNSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4''@;'; put 'put ''NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5NywzNzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywzNzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwz''@;'; put 'put ''NzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUxMywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYz''@;'; put 'put ''NSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwyMDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwyMTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwy''@;'; put 'put ''MTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkwMiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1''@;'; put 'put ''NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2MiwyMzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwyMzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwy''@;'; put 'put ''MzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUwNSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4''@;'; put 'put ''NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2MiwyMzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4NiwyNDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4Miwy''@;'; put 'put ''NDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUz''@;'; put 'put ''OSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwyNTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0NywyNTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2Miwy''@;'; put 'put ''NTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIyNSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgzNSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5''@;'; put 'put ''NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwyNjg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwyNjg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwy''@;'; put 'put ''NjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIz''@;'; put 'put ''MSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwyODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwyODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1Niwy''@;'; put 'put ''ODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3''@;'; put 'put ''OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwyOTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwyOTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwy''@;'; put 'put ''OTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUz''@;'; put 'put ''NCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwzMDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwzMDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwz''@;'; put 'put ''MTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkwNSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEw''@;'; put 'put ''NiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwzMjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0NywzMjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywz''@;'; put 'put ''MzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgxMCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzcz''@;'; put 'put ''NiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywzMzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwzMzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwz''@;'; put 'put ''MzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUzMSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkw''@;'; put 'put ''MSwzNTAwMiwzNTAzMSwzNTAwMSwzNWUzLDM1MDA4LDM1MDA2LDM0OTk4LDM1MDA0LDM0OTk5LDM1MDA1LDM0OTk0LDM1MDczLDM1MDE3LDM1MjIxLDM1MjI0LDM1MjIzLDM1MjkzLDM1MjkwLDM1MjkxLDM1NDA2LDM1NDA1LDM1Mzg1LDM1NDE3LDM1MzkyLDM1NDE1LDM1NDE2LDM1Mzk2LDM1''@;'; put 'put ''Mzk3LDM1NDEwLDM1NDAwLDM1NDA5LDM1NDAyLDM1NDA0LDM1NDA3LDM1OTM1LDM1OTY5LDM1OTY4LDM2MDI2LDM2MDMwLDM2MDE2LDM2MDI1LDM2MDIxLDM2MjI4LDM2MjI0LDM2MjMzLDM2MzEyLDM2MzA3LDM2MzAxLDM2Mjk1LDM2MzEwLDM2MzE2LDM2MzAzLDM2MzA5LDM2MzEzLDM2Mjk2''@;'; put 'put ''LDM2MzExLDM2MjkzLDM2NTkxLDM2NTk5LDM2NjAyLDM2NjAxLDM2NTgyLDM2NTkwLDM2NTgxLDM2NTk3LDM2NTgzLDM2NTg0LDM2NTk4LDM2NTg3LDM2NTkzLDM2NTg4LDM2NTk2LDM2NTg1LDM2OTA5LDM2OTE2LDM2OTExLDM3MTI2LDM3MTY0LDM3MTI0LDM3MTE5LDM3MTE2LDM3MTI4LDM3''@;'; put 'put ''MTEzLDM3MTE1LDM3MTIxLDM3MTIwLDM3MTI3LDM3MTI1LDM3MTIzLDM3MjE3LDM3MjIwLDM3MjE1LDM3MjE4LDM3MjE2LDM3Mzc3LDM3Mzg2LDM3NDEzLDM3Mzc5LDM3NDAyLDM3NDE0LDM3MzkxLDM3Mzg4LDM3Mzc2LDM3Mzk0LDM3Mzc1LDM3MzczLDM3MzgyLDM3MzgwLDM3NDE1LDM3Mzc4''@;'; put 'put ''LDM3NDA0LDM3NDEyLDM3NDAxLDM3Mzk5LDM3MzgxLDM3Mzk4LDM4MjY3LDM4Mjg1LDM4Mjg0LDM4Mjg4LDM4NTM1LDM4NTI2LDM4NTM2LDM4NTM3LDM4NTMxLDM4NTI4LDM4NTk0LDM4NjAwLDM4NTk1LDM4NjQxLDM4NjQwLDM4NzY0LDM4NzY4LDM4NzY2LDM4OTE5LDM5MDgxLDM5MTQ3LDQw''@;'; put 'put ''MTY2LDQwNjk3LDIwMDk5LDIwMTAwLDIwMTUwLDIwNjY5LDIwNjcxLDIwNjc4LDIwNjU0LDIwNjc2LDIwNjgyLDIwNjYwLDIwNjgwLDIwNjc0LDIwNjU2LDIwNjczLDIwNjY2LDIwNjU3LDIwNjgzLDIwNjgxLDIwNjYyLDIwNjY0LDIwOTUxLDIxMTE0LDIxMTEyLDIxMTE1LDIxMTE2LDIxOTU1''@;'; put 'put ''LDIxOTc5LDIxOTY0LDIxOTY4LDIxOTYzLDIxOTYyLDIxOTgxLDIxOTUyLDIxOTcyLDIxOTU2LDIxOTkzLDIxOTUxLDIxOTcwLDIxOTAxLDIxOTY3LDIxOTczLDIxOTg2LDIxOTc0LDIxOTYwLDIyMDAyLDIxOTY1LDIxOTc3LDIxOTU0LDIyMjkyLDIyNjExLDIyNjMyLDIyNjI4LDIyNjA3LDIy''@;'; put 'put ''NjA1LDIyNjAxLDIyNjM5LDIyNjEzLDIyNjA2LDIyNjIxLDIyNjE3LDIyNjI5LDIyNjE5LDIyNTg5LDIyNjI3LDIyNjQxLDIyNzgwLDIzMjM5LDIzMjM2LDIzMjQzLDIzMjI2LDIzMjI0LDIzMjE3LDIzMjIxLDIzMjE2LDIzMjMxLDIzMjQwLDIzMjI3LDIzMjM4LDIzMjIzLDIzMjMyLDIzMjQy''@;'; put 'put ''LDIzMjIwLDIzMjIyLDIzMjQ1LDIzMjI1LDIzMTg0LDIzNTEwLDIzNTEyLDIzNTEzLDIzNTgzLDIzNjAzLDIzOTIxLDIzOTA3LDIzODgyLDIzOTA5LDIzOTIyLDIzOTE2LDIzOTAyLDIzOTEyLDIzOTExLDIzOTA2LDI0MDQ4LDI0MTQzLDI0MTQyLDI0MTM4LDI0MTQxLDI0MTM5LDI0MjYxLDI0''@;'; put 'put ''MjY4LDI0MjYyLDI0MjY3LDI0MjYzLDI0Mzg0LDI0NDk1LDI0NDkzLDI0ODIzLDI0OTA1LDI0OTA2LDI0ODc1LDI0OTAxLDI0ODg2LDI0ODgyLDI0ODc4LDI0OTAyLDI0ODc5LDI0OTExLDI0ODczLDI0ODk2LDI1MTIwLDM3MjI0LDI1MTIzLDI1MTI1LDI1MTI0LDI1NTQxLDI1NTg1LDI1NTc5''@;'; put 'put ''LDI1NjE2LDI1NjE4LDI1NjA5LDI1NjMyLDI1NjM2LDI1NjUxLDI1NjY3LDI1NjMxLDI1NjIxLDI1NjI0LDI1NjU3LDI1NjU1LDI1NjM0LDI1NjM1LDI1NjEyLDI1NjM4LDI1NjQ4LDI1NjQwLDI1NjY1LDI1NjUzLDI1NjQ3LDI1NjEwLDI1NjI2LDI1NjY0LDI1NjM3LDI1NjM5LDI1NjExLDI1''@;'; put 'put ''NTc1LDI1NjI3LDI1NjQ2LDI1NjMzLDI1NjE0LDI1OTY3LDI2MDAyLDI2MDY3LDI2MjQ2LDI2MjUyLDI2MjYxLDI2MjU2LDI2MjUxLDI2MjUwLDI2MjY1LDI2MjYwLDI2MjMyLDI2NDAwLDI2OTgyLDI2OTc1LDI2OTM2LDI2OTU4LDI2OTc4LDI2OTkzLDI2OTQzLDI2OTQ5LDI2OTg2LDI2OTM3''@;'; put 'put ''LDI2OTQ2LDI2OTY3LDI2OTY5LDI3MDAyLDI2OTUyLDI2OTUzLDI2OTMzLDI2OTg4LDI2OTMxLDI2OTQxLDI2OTgxLDI2ODY0LDI3ZTMsMjY5MzIsMjY5ODUsMjY5NDQsMjY5OTEsMjY5NDgsMjY5OTgsMjY5NjgsMjY5NDUsMjY5OTYsMjY5NTYsMjY5MzksMjY5NTUsMjY5MzUsMjY5NzIsMjY5''@;'; put 'put ''NTksMjY5NjEsMjY5MzAsMjY5NjIsMjY5MjcsMjcwMDMsMjY5NDAsMjc0NjIsMjc0NjEsMjc0NTksMjc0NTgsMjc0NjQsMjc0NTcsMjc1NDcsNjQwMTMsMjc2NDMsMjc2NDQsMjc2NDEsMjc2MzksMjc2NDAsMjgzMTUsMjgzNzQsMjgzNjAsMjgzMDMsMjgzNTIsMjgzMTksMjgzMDcsMjgzMDgs''@;'; put 'put ''MjgzMjAsMjgzMzcsMjgzNDUsMjgzNTgsMjgzNzAsMjgzNDksMjgzNTMsMjgzMTgsMjgzNjEsMjgzNDMsMjgzMzYsMjgzNjUsMjgzMjYsMjgzNjcsMjgzMzgsMjgzNTAsMjgzNTUsMjgzODAsMjgzNzYsMjgzMTMsMjgzMDYsMjgzMDIsMjgzMDEsMjgzMjQsMjgzMjEsMjgzNTEsMjgzMzksMjgz''@;'; put 'put ''NjgsMjgzNjIsMjgzMTEsMjgzMzQsMjgzMjMsMjg5OTksMjkwMTIsMjkwMTAsMjkwMjcsMjkwMjQsMjg5OTMsMjkwMjEsMjkwMjYsMjkwNDIsMjkwNDgsMjkwMzQsMjkwMjUsMjg5OTQsMjkwMTYsMjg5OTUsMjkwMDMsMjkwNDAsMjkwMjMsMjkwMDgsMjkwMTEsMjg5OTYsMjkwMDUsMjkwMTgs''@;'; put 'put ''MjkyNjMsMjkzMjUsMjkzMjQsMjkzMjksMjkzMjgsMjkzMjYsMjk1MDAsMjk1MDYsMjk0OTksMjk0OTgsMjk1MDQsMjk1MTQsMjk1MTMsMjk3NjQsMjk3NzAsMjk3NzEsMjk3NzgsMjk3NzcsMjk3ODMsMjk3NjAsMjk3NzUsMjk3NzYsMjk3NzQsMjk3NjIsMjk3NjYsMjk3NzMsMjk3ODAsMjk5''@;'; put 'put ''MjEsMjk5NTEsMjk5NTAsMjk5NDksMjk5ODEsMzAwNzMsMzAwNzEsMjcwMTEsMzAxOTEsMzAyMjMsMzAyMTEsMzAxOTksMzAyMDYsMzAyMDQsMzAyMDEsMzAyMDAsMzAyMjQsMzAyMDMsMzAxOTgsMzAxODksMzAxOTcsMzAyMDUsMzAzNjEsMzAzODksMzA0MjksMzA1NDksMzA1NTksMzA1NjAs''@;'; put 'put ''MzA1NDYsMzA1NTAsMzA1NTQsMzA1NjksMzA1NjcsMzA1NDgsMzA1NTMsMzA1NzMsMzA2ODgsMzA4NTUsMzA4NzQsMzA4NjgsMzA4NjMsMzA4NTIsMzA4NjksMzA4NTMsMzA4NTQsMzA4ODEsMzA4NTEsMzA4NDEsMzA4NzMsMzA4NDgsMzA4NzAsMzA4NDMsMzExMDAsMzExMDYsMzExMDEsMzEw''@;'; put 'put ''OTcsMzEyNDksMzEyNTYsMzEyNTcsMzEyNTAsMzEyNTUsMzEyNTMsMzEyNjYsMzEyNTEsMzEyNTksMzEyNDgsMzEzOTUsMzEzOTQsMzEzOTAsMzE0NjcsMzE1OTAsMzE1ODgsMzE1OTcsMzE2MDQsMzE1OTMsMzE2MDIsMzE1ODksMzE2MDMsMzE2MDEsMzE2MDAsMzE1ODUsMzE2MDgsMzE2MDYs''@;'; put 'put ''MzE1ODcsMzE5MjIsMzE5MjQsMzE5MTksMzIxMzYsMzIxMzQsMzIxMjgsMzIxNDEsMzIxMjcsMzIxMzMsMzIxMjIsMzIxNDIsMzIxMjMsMzIxMzEsMzIxMjQsMzIxNDAsMzIxNDgsMzIxMzIsMzIxMjUsMzIxNDYsMzI2MjEsMzI2MTksMzI2MTUsMzI2MTYsMzI2MjAsMzI2NzgsMzI2NzcsMzI2''@;'; put 'put ''NzksMzI3MzEsMzI3MzIsMzI4MDEsMzMxMjQsMzMxMjAsMzMxNDMsMzMxMTYsMzMxMjksMzMxMTUsMzMxMjIsMzMxMzgsMjY0MDEsMzMxMTgsMzMxNDIsMzMxMjcsMzMxMzUsMzMwOTIsMzMxMjEsMzMzMDksMzMzNTMsMzMzNDgsMzMzNDQsMzMzNDYsMzMzNDksMzQwMzMsMzM4NTUsMzM4Nzgs''@;'; put 'put ''MzM5MTAsMzM5MTMsMzM5MzUsMzM5MzMsMzM4OTMsMzM4NzMsMzM4NTYsMzM5MjYsMzM4OTUsMzM4NDAsMzM4NjksMzM5MTcsMzM4ODIsMzM4ODEsMzM5MDgsMzM5MDcsMzM4ODUsMzQwNTUsMzM4ODYsMzM4NDcsMzM4NTAsMzM4NDQsMzM5MTQsMzM4NTksMzM5MTIsMzM4NDIsMzM4NjEsMzM4''@;'; put 'put ''MzMsMzM3NTMsMzM4NjcsMzM4MzksMzM4NTgsMzM4MzcsMzM4ODcsMzM5MDQsMzM4NDksMzM4NzAsMzM4NjgsMzM4NzQsMzM5MDMsMzM5ODksMzM5MzQsMzM4NTEsMzM4NjMsMzM4NDYsMzM4NDMsMzM4OTYsMzM5MTgsMzM4NjAsMzM4MzUsMzM4ODgsMzM4NzYsMzM5MDIsMzM4NzIsMzQ1NzEs''@;'; put 'put ''MzQ1NjQsMzQ1NTEsMzQ1NzIsMzQ1NTQsMzQ1MTgsMzQ1NDksMzQ2MzcsMzQ1NTIsMzQ1NzQsMzQ1NjksMzQ1NjEsMzQ1NTAsMzQ1NzMsMzQ1NjUsMzUwMzAsMzUwMTksMzUwMjEsMzUwMjIsMzUwMzgsMzUwMzUsMzUwMzQsMzUwMjAsMzUwMjQsMzUyMDUsMzUyMjcsMzUyOTUsMzUzMDEsMzUz''@;'; put 'put ''MDAsMzUyOTcsMzUyOTYsMzUyOTgsMzUyOTIsMzUzMDIsMzU0NDYsMzU0NjIsMzU0NTUsMzU0MjUsMzUzOTEsMzU0NDcsMzU0NTgsMzU0NjAsMzU0NDUsMzU0NTksMzU0NTcsMzU0NDQsMzU0NTAsMzU5MDAsMzU5MTUsMzU5MTQsMzU5NDEsMzU5NDAsMzU5NDIsMzU5NzQsMzU5NzIsMzU5NzMs''@;'; put 'put ''MzYwNDQsMzYyMDAsMzYyMDEsMzYyNDEsMzYyMzYsMzYyMzgsMzYyMzksMzYyMzcsMzYyNDMsMzYyNDQsMzYyNDAsMzYyNDIsMzYzMzYsMzYzMjAsMzYzMzIsMzYzMzcsMzYzMzQsMzYzMDQsMzYzMjksMzYzMjMsMzYzMjIsMzYzMjcsMzYzMzgsMzYzMzEsMzYzNDAsMzY2MTQsMzY2MDcsMzY2''@;'; put 'put ''MDksMzY2MDgsMzY2MTMsMzY2MTUsMzY2MTYsMzY2MTAsMzY2MTksMzY5NDYsMzY5MjcsMzY5MzIsMzY5MzcsMzY5MjUsMzcxMzYsMzcxMzMsMzcxMzUsMzcxMzcsMzcxNDIsMzcxNDAsMzcxMzEsMzcxMzQsMzcyMzAsMzcyMzEsMzc0NDgsMzc0NTgsMzc0MjQsMzc0MzQsMzc0NzgsMzc0Mjcs''@;'; put 'put ''Mzc0NzcsMzc0NzAsMzc1MDcsMzc0MjIsMzc0NTAsMzc0NDYsMzc0ODUsMzc0ODQsMzc0NTUsMzc0NzIsMzc0NzksMzc0ODcsMzc0MzAsMzc0NzMsMzc0ODgsMzc0MjUsMzc0NjAsMzc0NzUsMzc0NTYsMzc0OTAsMzc0NTQsMzc0NTksMzc0NTIsMzc0NjIsMzc0MjYsMzgzMDMsMzgzMDAsMzgz''@;'; put 'put ''MDIsMzgyOTksMzg1NDYsMzg1NDcsMzg1NDUsMzg1NTEsMzg2MDYsMzg2NTAsMzg2NTMsMzg2NDgsMzg2NDUsMzg3NzEsMzg3NzUsMzg3NzYsMzg3NzAsMzg5MjcsMzg5MjUsMzg5MjYsMzkwODQsMzkxNTgsMzkxNjEsMzkzNDMsMzkzNDYsMzkzNDQsMzkzNDksMzk1OTcsMzk1OTUsMzk3NzEs''@;'; put 'put ''NDAxNzAsNDAxNzMsNDAxNjcsNDA1NzYsNDA3MDEsMjA3MTAsMjA2OTIsMjA2OTUsMjA3MTIsMjA3MjMsMjA2OTksMjA3MTQsMjA3MDEsMjA3MDgsMjA2OTEsMjA3MTYsMjA3MjAsMjA3MTksMjA3MDcsMjA3MDQsMjA5NTIsMjExMjAsMjExMjEsMjEyMjUsMjEyMjcsMjEyOTYsMjE0MjAsMjIw''@;'; put 'put ''NTUsMjIwMzcsMjIwMjgsMjIwMzQsMjIwMTIsMjIwMzEsMjIwNDQsMjIwMTcsMjIwMzUsMjIwMTgsMjIwMTAsMjIwNDUsMjIwMjAsMjIwMTUsMjIwMDksMjI2NjUsMjI2NTIsMjI2NzIsMjI2ODAsMjI2NjIsMjI2NTcsMjI2NTUsMjI2NDQsMjI2NjcsMjI2NTAsMjI2NjMsMjI2NzMsMjI2NzAs''@;'; put 'put ''MjI2NDYsMjI2NTgsMjI2NjQsMjI2NTEsMjI2NzYsMjI2NzEsMjI3ODIsMjI4OTEsMjMyNjAsMjMyNzgsMjMyNjksMjMyNTMsMjMyNzQsMjMyNTgsMjMyNzcsMjMyNzUsMjMyODMsMjMyNjYsMjMyNjQsMjMyNTksMjMyNzYsMjMyNjIsMjMyNjEsMjMyNTcsMjMyNzIsMjMyNjMsMjM0MTUsMjM1''@;'; put 'put ''MjAsMjM1MjMsMjM2NTEsMjM5MzgsMjM5MzYsMjM5MzMsMjM5NDIsMjM5MzAsMjM5MzcsMjM5MjcsMjM5NDYsMjM5NDUsMjM5NDQsMjM5MzQsMjM5MzIsMjM5NDksMjM5MjksMjM5MzUsMjQxNTIsMjQxNTMsMjQxNDcsMjQyODAsMjQyNzMsMjQyNzksMjQyNzAsMjQyODQsMjQyNzcsMjQyODEs''@;'; put 'put ''MjQyNzQsMjQyNzYsMjQzODgsMjQzODcsMjQ0MzEsMjQ1MDIsMjQ4NzYsMjQ4NzIsMjQ4OTcsMjQ5MjYsMjQ5NDUsMjQ5NDcsMjQ5MTQsMjQ5MTUsMjQ5NDYsMjQ5NDAsMjQ5NjAsMjQ5NDgsMjQ5MTYsMjQ5NTQsMjQ5MjMsMjQ5MzMsMjQ4OTEsMjQ5MzgsMjQ5MjksMjQ5MTgsMjUxMjksMjUx''@;'; put 'put ''MjcsMjUxMzEsMjU2NDMsMjU2NzcsMjU2OTEsMjU2OTMsMjU3MTYsMjU3MTgsMjU3MTQsMjU3MTUsMjU3MjUsMjU3MTcsMjU3MDIsMjU3NjYsMjU2NzgsMjU3MzAsMjU2OTQsMjU2OTIsMjU2NzUsMjU2ODMsMjU2OTYsMjU2ODAsMjU3MjcsMjU2NjMsMjU3MDgsMjU3MDcsMjU2ODksMjU3MDEs''@;'; put 'put ''MjU3MTksMjU5NzEsMjYwMTYsMjYyNzMsMjYyNzIsMjYyNzEsMjYzNzMsMjYzNzIsMjY0MDIsMjcwNTcsMjcwNjIsMjcwODEsMjcwNDAsMjcwODYsMjcwMzAsMjcwNTYsMjcwNTIsMjcwNjgsMjcwMjUsMjcwMzMsMjcwMjIsMjcwNDcsMjcwMjEsMjcwNDksMjcwNzAsMjcwNTUsMjcwNzEsMjcw''@;'; put 'put ''NzYsMjcwNjksMjcwNDQsMjcwOTIsMjcwNjUsMjcwODIsMjcwMzQsMjcwODcsMjcwNTksMjcwMjcsMjcwNTAsMjcwNDEsMjcwMzgsMjcwOTcsMjcwMzEsMjcwMjQsMjcwNzQsMjcwNjEsMjcwNDUsMjcwNzgsMjc0NjYsMjc0NjksMjc0NjcsMjc1NTAsMjc1NTEsMjc1NTIsMjc1ODcsMjc1ODgs''@;'; put 'put ''Mjc2NDYsMjgzNjYsMjg0MDUsMjg0MDEsMjg0MTksMjg0NTMsMjg0MDgsMjg0NzEsMjg0MTEsMjg0NjIsMjg0MjUsMjg0OTQsMjg0NDEsMjg0NDIsMjg0NTUsMjg0NDAsMjg0NzUsMjg0MzQsMjgzOTcsMjg0MjYsMjg0NzAsMjg1MzEsMjg0MDksMjgzOTgsMjg0NjEsMjg0ODAsMjg0NjQsMjg0''@;'; put 'put ''NzYsMjg0NjksMjgzOTUsMjg0MjMsMjg0MzAsMjg0ODMsMjg0MjEsMjg0MTMsMjg0MDYsMjg0NzMsMjg0NDQsMjg0MTIsMjg0NzQsMjg0NDcsMjg0MjksMjg0NDYsMjg0MjQsMjg0NDksMjkwNjMsMjkwNzIsMjkwNjUsMjkwNTYsMjkwNjEsMjkwNTgsMjkwNzEsMjkwNTEsMjkwNjIsMjkwNTcs''@;'; put 'put ''MjkwNzksMjkyNTIsMjkyNjcsMjkzMzUsMjkzMzMsMjkzMzEsMjk1MDcsMjk1MTcsMjk1MjEsMjk1MTYsMjk3OTQsMjk4MTEsMjk4MDksMjk4MTMsMjk4MTAsMjk3OTksMjk4MDYsMjk5NTIsMjk5NTQsMjk5NTUsMzAwNzcsMzAwOTYsMzAyMzAsMzAyMTYsMzAyMjAsMzAyMjksMzAyMjUsMzAy''@;'; put 'put ''MTgsMzAyMjgsMzAzOTIsMzA1OTMsMzA1ODgsMzA1OTcsMzA1OTQsMzA1NzQsMzA1OTIsMzA1NzUsMzA1OTAsMzA1OTUsMzA4OTgsMzA4OTAsMzA5MDAsMzA4OTMsMzA4ODgsMzA4NDYsMzA4OTEsMzA4NzgsMzA4ODUsMzA4ODAsMzA4OTIsMzA4ODIsMzA4ODQsMzExMjgsMzExMTQsMzExMTUs''@;'; put 'put ''MzExMjYsMzExMjUsMzExMjQsMzExMjMsMzExMjcsMzExMTIsMzExMjIsMzExMjAsMzEyNzUsMzEzMDYsMzEyODAsMzEyNzksMzEyNzIsMzEyNzAsMzE0MDAsMzE0MDMsMzE0MDQsMzE0NzAsMzE2MjQsMzE2NDQsMzE2MjYsMzE2MzMsMzE2MzIsMzE2MzgsMzE2MjksMzE2MjgsMzE2NDMsMzE2''@;'; put 'put ''MzAsMzE2MjEsMzE2NDAsMjExMjQsMzE2NDEsMzE2NTIsMzE2MTgsMzE5MzEsMzE5MzUsMzE5MzIsMzE5MzAsMzIxNjcsMzIxODMsMzIxOTQsMzIxNjMsMzIxNzAsMzIxOTMsMzIxOTIsMzIxOTcsMzIxNTcsMzIyMDYsMzIxOTYsMzIxOTgsMzIyMDMsMzIyMDQsMzIxNzUsMzIxODUsMzIxNTAs''@;'; put 'put ''MzIxODgsMzIxNTksMzIxNjYsMzIxNzQsMzIxNjksMzIxNjEsMzIyMDEsMzI2MjcsMzI3MzgsMzI3MzksMzI3NDEsMzI3MzQsMzI4MDQsMzI4NjEsMzI4NjAsMzMxNjEsMzMxNTgsMzMxNTUsMzMxNTksMzMxNjUsMzMxNjQsMzMxNjMsMzMzMDEsMzM5NDMsMzM5NTYsMzM5NTMsMzM5NTEsMzM5''@;'; put 'put ''NzgsMzM5OTgsMzM5ODYsMzM5NjQsMzM5NjYsMzM5NjMsMzM5NzcsMzM5NzIsMzM5ODUsMzM5OTcsMzM5NjIsMzM5NDYsMzM5NjksMzRlMywzMzk0OSwzMzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5NiwzMzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwz''@;'; put 'put ''Mzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYwNiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYwNCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYw''@;'; put 'put ''NSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2MywzNTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwzNTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwz''@;'; put 'put ''NTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1''@;'; put 'put ''OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwzNzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwzNzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwz''@;'; put 'put ''NzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUyNSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUxMCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUz''@;'; put 'put ''MywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwzODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwzOTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2Mywz''@;'; put 'put ''OTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0''@;'; put 'put ''OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4NiwyMjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwyMjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwy''@;'; put 'put ''MjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMxMSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1''@;'; put 'put ''NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwyNDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwyNTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwy''@;'; put 'put ''NDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3''@;'; put 'put ''OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwyNzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwyNzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwy''@;'; put 'put ''NzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0''@;'; put 'put ''NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwyODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwyODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwy''@;'; put 'put ''ODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEwNiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5''@;'; put 'put ''OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwyOTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwyOTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwy''@;'; put 'put ''OTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkwNywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkx''@;'; put 'put ''NSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwzMTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3MywzMTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0Nywz''@;'; put 'put ''MjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4''@;'; put 'put ''MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2MywzNDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwzNDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1Niwz''@;'; put 'put ''NDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAzOCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0''@;'; put 'put ''MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwzNDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwzNDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1Mywz''@;'; put 'put ''NDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIz''@;'; put 'put ''NSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwzNTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwzNTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3Miwz''@;'; put 'put ''NjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0''@;'; put 'put ''NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwzNzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwzNzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwz''@;'; put 'put ''NzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYwOCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1''@;'; put 'put ''NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwzODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2MywzODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwz''@;'; put 'put ''ODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1''@;'; put 'put ''MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwy''@;'; put 'put ''MDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEyNSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcyOCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcy''@;'; put 'put ''NiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwyMzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4MiwyMzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2Nywy''@;'; put 'put ''NDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNWUzLDI0OTgyLDI1MDI5LDI1MDEyLDI1MDMwLDI1MDI1LDI1MDM2LDI1MDE4LDI1MDIzLDI1MDE2LDI0OTcyLDI1ODE1LDI1ODE0LDI1ODA4LDI1ODA3LDI1ODAxLDI1Nzg5''@;'; put 'put ''LDI1NzM3LDI1Nzk1LDI1ODE5LDI1ODQzLDI1ODE3LDI1OTA3LDI1OTgzLDI1OTgwLDI2MDE4LDI2MzEyLDI2MzAyLDI2MzA0LDI2MzE0LDI2MzE1LDI2MzE5LDI2MzAxLDI2Mjk5LDI2Mjk4LDI2MzE2LDI2NDAzLDI3MTg4LDI3MjM4LDI3MjA5LDI3MjM5LDI3MTg2LDI3MjQwLDI3MTk4LDI3''@;'; put 'put ''MjI5LDI3MjQ1LDI3MjU0LDI3MjI3LDI3MjE3LDI3MTc2LDI3MjI2LDI3MTk1LDI3MTk5LDI3MjAxLDI3MjQyLDI3MjM2LDI3MjE2LDI3MjE1LDI3MjIwLDI3MjQ3LDI3MjQxLDI3MjMyLDI3MTk2LDI3MjMwLDI3MjIyLDI3MjIxLDI3MjEzLDI3MjE0LDI3MjA2LDI3NDc3LDI3NDc2LDI3NDc4''@;'; put 'put ''LDI3NTU5LDI3NTYyLDI3NTYzLDI3NTkyLDI3NTkxLDI3NjUyLDI3NjUxLDI3NjU0LDI4NTg5LDI4NjE5LDI4NTc5LDI4NjE1LDI4NjA0LDI4NjIyLDI4NjE2LDI4NTEwLDI4NjEyLDI4NjA1LDI4NTc0LDI4NjE4LDI4NTg0LDI4Njc2LDI4NTgxLDI4NTkwLDI4NjAyLDI4NTg4LDI4NTg2LDI4''@;'; put 'put ''NjIzLDI4NjA3LDI4NjAwLDI4NTc4LDI4NjE3LDI4NTg3LDI4NjIxLDI4NTkxLDI4NTk0LDI4NTkyLDI5MTI1LDI5MTIyLDI5MTE5LDI5MTEyLDI5MTQyLDI5MTIwLDI5MTIxLDI5MTMxLDI5MTQwLDI5MTMwLDI5MTI3LDI5MTM1LDI5MTE3LDI5MTQ0LDI5MTE2LDI5MTI2LDI5MTQ2LDI5MTQ3''@;'; put 'put ''LDI5MzQxLDI5MzQyLDI5NTQ1LDI5NTQyLDI5NTQzLDI5NTQ4LDI5NTQxLDI5NTQ3LDI5NTQ2LDI5ODIzLDI5ODUwLDI5ODU2LDI5ODQ0LDI5ODQyLDI5ODQ1LDI5ODU3LDI5OTYzLDMwMDgwLDMwMjU1LDMwMjUzLDMwMjU3LDMwMjY5LDMwMjU5LDMwMjY4LDMwMjYxLDMwMjU4LDMwMjU2LDMw''@;'; put 'put ''Mzk1LDMwNDM4LDMwNjE4LDMwNjIxLDMwNjI1LDMwNjIwLDMwNjE5LDMwNjI2LDMwNjI3LDMwNjEzLDMwNjE3LDMwNjE1LDMwOTQxLDMwOTUzLDMwOTQ5LDMwOTU0LDMwOTQyLDMwOTQ3LDMwOTM5LDMwOTQ1LDMwOTQ2LDMwOTU3LDMwOTQzLDMwOTQ0LDMxMTQwLDMxMzAwLDMxMzA0LDMxMzAz''@;'; put 'put ''LDMxNDE0LDMxNDE2LDMxNDEzLDMxNDA5LDMxNDE1LDMxNzEwLDMxNzE1LDMxNzE5LDMxNzA5LDMxNzAxLDMxNzE3LDMxNzA2LDMxNzIwLDMxNzM3LDMxNzAwLDMxNzIyLDMxNzE0LDMxNzA4LDMxNzIzLDMxNzA0LDMxNzExLDMxOTU0LDMxOTU2LDMxOTU5LDMxOTUyLDMxOTUzLDMyMjc0LDMy''@;'; put 'put ''Mjg5LDMyMjc5LDMyMjY4LDMyMjg3LDMyMjg4LDMyMjc1LDMyMjcwLDMyMjg0LDMyMjc3LDMyMjgyLDMyMjkwLDMyMjY3LDMyMjcxLDMyMjc4LDMyMjY5LDMyMjc2LDMyMjkzLDMyMjkyLDMyNTc5LDMyNjM1LDMyNjM2LDMyNjM0LDMyNjg5LDMyNzUxLDMyODEwLDMyODA5LDMyODc2LDMzMjAx''@;'; put 'put ''LDMzMTkwLDMzMTk4LDMzMjA5LDMzMjA1LDMzMTk1LDMzMjAwLDMzMTk2LDMzMjA0LDMzMjAyLDMzMjA3LDMzMTkxLDMzMjY2LDMzMzY1LDMzMzY2LDMzMzY3LDM0MTM0LDM0MTE3LDM0MTU1LDM0MTI1LDM0MTMxLDM0MTQ1LDM0MTM2LDM0MTEyLDM0MTE4LDM0MTQ4LDM0MTEzLDM0MTQ2LDM0''@;'; put 'put ''MTE2LDM0MTI5LDM0MTE5LDM0MTQ3LDM0MTEwLDM0MTM5LDM0MTYxLDM0MTI2LDM0MTU4LDM0MTY1LDM0MTMzLDM0MTUxLDM0MTQ0LDM0MTg4LDM0MTUwLDM0MTQxLDM0MTMyLDM0MTQ5LDM0MTU2LDM0NDAzLDM0NDA1LDM0NDA0LDM0NzE1LDM0NzAzLDM0NzExLDM0NzA3LDM0NzA2LDM0Njk2''@;'; put 'put ''LDM0Njg5LDM0NzEwLDM0NzEyLDM0NjgxLDM0Njk1LDM0NzIzLDM0NjkzLDM0NzA0LDM0NzA1LDM0NzE3LDM0NjkyLDM0NzA4LDM0NzE2LDM0NzE0LDM0Njk3LDM1MTAyLDM1MTEwLDM1MTIwLDM1MTE3LDM1MTE4LDM1MTExLDM1MTIxLDM1MTA2LDM1MTEzLDM1MTA3LDM1MTE5LDM1MTE2LDM1''@;'; put 'put ''MTAzLDM1MzEzLDM1NTUyLDM1NTU0LDM1NTcwLDM1NTcyLDM1NTczLDM1NTQ5LDM1NjA0LDM1NTU2LDM1NTUxLDM1NTY4LDM1NTI4LDM1NTUwLDM1NTUzLDM1NTYwLDM1NTgzLDM1NTY3LDM1NTc5LDM1OTg1LDM1OTg2LDM1OTg0LDM2MDg1LDM2MDc4LDM2MDgxLDM2MDgwLDM2MDgzLDM2MjA0''@;'; put 'put ''LDM2MjA2LDM2MjYxLDM2MjYzLDM2NDAzLDM2NDE0LDM2NDA4LDM2NDE2LDM2NDIxLDM2NDA2LDM2NDEyLDM2NDEzLDM2NDE3LDM2NDAwLDM2NDE1LDM2NTQxLDM2NjYyLDM2NjU0LDM2NjYxLDM2NjU4LDM2NjY1LDM2NjYzLDM2NjYwLDM2OTgyLDM2OTg1LDM2OTg3LDM2OTk4LDM3MTE0LDM3''@;'; put 'put ''MTcxLDM3MTczLDM3MTc0LDM3MjY3LDM3MjY0LDM3MjY1LDM3MjYxLDM3MjYzLDM3NjcxLDM3NjYyLDM3NjQwLDM3NjYzLDM3NjM4LDM3NjQ3LDM3NzU0LDM3Njg4LDM3NjkyLDM3NjU5LDM3NjY3LDM3NjUwLDM3NjMzLDM3NzAyLDM3Njc3LDM3NjQ2LDM3NjQ1LDM3NTc5LDM3NjYxLDM3NjI2''@;'; put 'put ''LDM3NjY5LDM3NjUxLDM3NjI1LDM3NjIzLDM3Njg0LDM3NjM0LDM3NjY4LDM3NjMxLDM3NjczLDM3Njg5LDM3Njg1LDM3Njc0LDM3NjUyLDM3NjQ0LDM3NjQzLDM3NjMwLDM3NjQxLDM3NjMyLDM3NjI3LDM3NjU0LDM4MzMyLDM4MzQ5LDM4MzM0LDM4MzI5LDM4MzMwLDM4MzI2LDM4MzM1LDM4''@;'; put 'put ''MzI1LDM4MzMzLDM4NTY5LDM4NjEyLDM4NjY3LDM4Njc0LDM4NjcyLDM4ODA5LDM4ODA3LDM4ODA0LDM4ODk2LDM4OTA0LDM4OTY1LDM4OTU5LDM4OTYyLDM5MjA0LDM5MTk5LDM5MjA3LDM5MjA5LDM5MzI2LDM5NDA2LDM5NDA0LDM5Mzk3LDM5Mzk2LDM5NDA4LDM5Mzk1LDM5NDAyLDM5NDAx''@;'; put 'put ''LDM5Mzk5LDM5NjA5LDM5NjE1LDM5NjA0LDM5NjExLDM5NjcwLDM5Njc0LDM5NjczLDM5NjcxLDM5NzMxLDM5ODA4LDM5ODEzLDM5ODE1LDM5ODA0LDM5ODA2LDM5ODAzLDM5ODEwLDM5ODI3LDM5ODI2LDM5ODI0LDM5ODAyLDM5ODI5LDM5ODA1LDM5ODE2LDQwMjI5LDQwMjE1LDQwMjI0LDQw''@;'; put 'put ''MjIyLDQwMjEyLDQwMjMzLDQwMjIxLDQwMjE2LDQwMjI2LDQwMjA4LDQwMjE3LDQwMjIzLDQwNTg0LDQwNTgyLDQwNTgzLDQwNjIyLDQwNjIxLDQwNjYxLDQwNjYyLDQwNjk4LDQwNzIyLDQwNzY1LDIwNzc0LDIwNzczLDIwNzcwLDIwNzcyLDIwNzY4LDIwNzc3LDIxMjM2LDIyMTYzLDIyMTU2''@;'; put 'put ''LDIyMTU3LDIyMTUwLDIyMTQ4LDIyMTQ3LDIyMTQyLDIyMTQ2LDIyMTQzLDIyMTQ1LDIyNzQyLDIyNzQwLDIyNzM1LDIyNzM4LDIzMzQxLDIzMzMzLDIzMzQ2LDIzMzMxLDIzMzQwLDIzMzM1LDIzMzM0LDIzMzQzLDIzMzQyLDIzNDE5LDIzNTM3LDIzNTM4LDIzOTkxLDI0MTcyLDI0MTcwLDI0''@;'; put 'put ''NTEwLDI0NTA3LDI1MDI3LDI1MDEzLDI1MDIwLDI1MDYzLDI1MDU2LDI1MDYxLDI1MDYwLDI1MDY0LDI1MDU0LDI1ODM5LDI1ODMzLDI1ODI3LDI1ODM1LDI1ODI4LDI1ODMyLDI1OTg1LDI1OTg0LDI2MDM4LDI2MDc0LDI2MzIyLDI3Mjc3LDI3Mjg2LDI3MjY1LDI3MzAxLDI3MjczLDI3Mjk1''@;'; put 'put ''LDI3MjkxLDI3Mjk3LDI3Mjk0LDI3MjcxLDI3MjgzLDI3Mjc4LDI3Mjg1LDI3MjY3LDI3MzA0LDI3MzAwLDI3MjgxLDI3MjYzLDI3MzAyLDI3MjkwLDI3MjY5LDI3Mjc2LDI3MjgyLDI3NDgzLDI3NTY1LDI3NjU3LDI4NjIwLDI4NTg1LDI4NjYwLDI4NjI4LDI4NjQzLDI4NjM2LDI4NjUzLDI4''@;'; put 'put ''NjQ3LDI4NjQ2LDI4NjM4LDI4NjU4LDI4NjM3LDI4NjQyLDI4NjQ4LDI5MTUzLDI5MTY5LDI5MTYwLDI5MTcwLDI5MTU2LDI5MTY4LDI5MTU0LDI5NTU1LDI5NTUwLDI5NTUxLDI5ODQ3LDI5ODc0LDI5ODY3LDI5ODQwLDI5ODY2LDI5ODY5LDI5ODczLDI5ODYxLDI5ODcxLDI5OTY4LDI5OTY5''@;'; put 'put ''LDI5OTcwLDI5OTY3LDMwMDg0LDMwMjc1LDMwMjgwLDMwMjgxLDMwMjc5LDMwMzcyLDMwNDQxLDMwNjQ1LDMwNjM1LDMwNjQyLDMwNjQ3LDMwNjQ2LDMwNjQ0LDMwNjQxLDMwNjMyLDMwNzA0LDMwOTYzLDMwOTczLDMwOTc4LDMwOTcxLDMwOTcyLDMwOTYyLDMwOTgxLDMwOTY5LDMwOTc0LDMw''@;'; put 'put ''OTgwLDMxMTQ3LDMxMTQ0LDMxMzI0LDMxMzIzLDMxMzE4LDMxMzIwLDMxMzE2LDMxMzIyLDMxNDIyLDMxNDI0LDMxNDI1LDMxNzQ5LDMxNzU5LDMxNzMwLDMxNzQ0LDMxNzQzLDMxNzM5LDMxNzU4LDMxNzMyLDMxNzU1LDMxNzMxLDMxNzQ2LDMxNzUzLDMxNzQ3LDMxNzQ1LDMxNzM2LDMxNzQx''@;'; put 'put ''LDMxNzUwLDMxNzI4LDMxNzI5LDMxNzYwLDMxNzU0LDMxOTc2LDMyMzAxLDMyMzE2LDMyMzIyLDMyMzA3LDM4OTg0LDMyMzEyLDMyMjk4LDMyMzI5LDMyMzIwLDMyMzI3LDMyMjk3LDMyMzMyLDMyMzA0LDMyMzE1LDMyMzEwLDMyMzI0LDMyMzE0LDMyNTgxLDMyNjM5LDMyNjM4LDMyNjM3LDMy''@;'; put 'put ''NzU2LDMyNzU0LDMyODEyLDMzMjExLDMzMjIwLDMzMjI4LDMzMjI2LDMzMjIxLDMzMjIzLDMzMjEyLDMzMjU3LDMzMzcxLDMzMzcwLDMzMzcyLDM0MTc5LDM0MTc2LDM0MTkxLDM0MjE1LDM0MTk3LDM0MjA4LDM0MTg3LDM0MjExLDM0MTcxLDM0MjEyLDM0MjAyLDM0MjA2LDM0MTY3LDM0MTcy''@;'; put 'put ''LDM0MTg1LDM0MjA5LDM0MTcwLDM0MTY4LDM0MTM1LDM0MTkwLDM0MTk4LDM0MTgyLDM0MTg5LDM0MjAxLDM0MjA1LDM0MTc3LDM0MjEwLDM0MTc4LDM0MTg0LDM0MTgxLDM0MTY5LDM0MTY2LDM0MjAwLDM0MTkyLDM0MjA3LDM0NDA4LDM0NzUwLDM0NzMwLDM0NzMzLDM0NzU3LDM0NzM2LDM0''@;'; put 'put ''NzMyLDM0NzQ1LDM0NzQxLDM0NzQ4LDM0NzM0LDM0NzYxLDM0NzU1LDM0NzU0LDM0NzY0LDM0NzQzLDM0NzM1LDM0NzU2LDM0NzYyLDM0NzQwLDM0NzQyLDM0NzUxLDM0NzQ0LDM0NzQ5LDM0NzgyLDM0NzM4LDM1MTI1LDM1MTIzLDM1MTMyLDM1MTM0LDM1MTM3LDM1MTU0LDM1MTI3LDM1MTM4''@;'; put 'put ''LDM1MjQ1LDM1MjQ3LDM1MjQ2LDM1MzE0LDM1MzE1LDM1NjE0LDM1NjA4LDM1NjA2LDM1NjAxLDM1NTg5LDM1NTk1LDM1NjE4LDM1NTk5LDM1NjAyLDM1NjA1LDM1NTkxLDM1NTk3LDM1NTkyLDM1NTkwLDM1NjEyLDM1NjAzLDM1NjEwLDM1OTE5LDM1OTUyLDM1OTU0LDM1OTUzLDM1OTUxLDM1''@;'; put 'put ''OTg5LDM1OTg4LDM2MDg5LDM2MjA3LDM2NDMwLDM2NDI5LDM2NDM1LDM2NDMyLDM2NDI4LDM2NDIzLDM2Njc1LDM2NjcyLDM2OTk3LDM2OTkwLDM3MTc2LDM3Mjc0LDM3MjgyLDM3Mjc1LDM3MjczLDM3Mjc5LDM3MjgxLDM3Mjc3LDM3MjgwLDM3NzkzLDM3NzYzLDM3ODA3LDM3NzMyLDM3NzE4''@;'; put 'put ''LDM3NzAzLDM3NzU2LDM3NzIwLDM3NzI0LDM3NzUwLDM3NzA1LDM3NzEyLDM3NzEzLDM3NzI4LDM3NzQxLDM3Nzc1LDM3NzA4LDM3NzM4LDM3NzUzLDM3NzE5LDM3NzE3LDM3NzE0LDM3NzExLDM3NzQ1LDM3NzUxLDM3NzU1LDM3NzI5LDM3NzI2LDM3NzMxLDM3NzM1LDM3NzYwLDM3NzEwLDM3''@;'; put 'put ''NzIxLDM4MzQzLDM4MzM2LDM4MzQ1LDM4MzM5LDM4MzQxLDM4MzI3LDM4NTc0LDM4NTc2LDM4NTcyLDM4Njg4LDM4Njg3LDM4NjgwLDM4Njg1LDM4NjgxLDM4ODEwLDM4ODE3LDM4ODEyLDM4ODE0LDM4ODEzLDM4ODY5LDM4ODY4LDM4ODk3LDM4OTc3LDM4OTgwLDM4OTg2LDM4OTg1LDM4OTgx''@;'; put 'put ''LDM4OTc5LDM5MjA1LDM5MjExLDM5MjEyLDM5MjEwLDM5MjE5LDM5MjE4LDM5MjE1LDM5MjEzLDM5MjE3LDM5MjE2LDM5MzIwLDM5MzMxLDM5MzI5LDM5NDI2LDM5NDE4LDM5NDEyLDM5NDE1LDM5NDE3LDM5NDE2LDM5NDE0LDM5NDE5LDM5NDIxLDM5NDIyLDM5NDIwLDM5NDI3LDM5NjE0LDM5''@;'; put 'put ''Njc4LDM5Njc3LDM5NjgxLDM5Njc2LDM5NzUyLDM5ODM0LDM5ODQ4LDM5ODM4LDM5ODM1LDM5ODQ2LDM5ODQxLDM5ODQ1LDM5ODQ0LDM5ODE0LDM5ODQyLDM5ODQwLDM5ODU1LDQwMjQzLDQwMjU3LDQwMjk1LDQwMjQ2LDQwMjM4LDQwMjM5LDQwMjQxLDQwMjQ4LDQwMjQwLDQwMjYxLDQwMjU4''@;'; put 'put ''LDQwMjU5LDQwMjU0LDQwMjQ3LDQwMjU2LDQwMjUzLDMyNzU3LDQwMjM3LDQwNTg2LDQwNTg1LDQwNTg5LDQwNjI0LDQwNjQ4LDQwNjY2LDQwNjk5LDQwNzAzLDQwNzQwLDQwNzM5LDQwNzM4LDQwNzg4LDQwODY0LDIwNzg1LDIwNzgxLDIwNzgyLDIyMTY4LDIyMTcyLDIyMTY3LDIyMTcwLDIy''@;'; put 'put ''MTczLDIyMTY5LDIyODk2LDIzMzU2LDIzNjU3LDIzNjU4LDI0ZTMsMjQxNzMsMjQxNzQsMjUwNDgsMjUwNTUsMjUwNjksMjUwNzAsMjUwNzMsMjUwNjYsMjUwNzIsMjUwNjcsMjUwNDYsMjUwNjUsMjU4NTUsMjU4NjAsMjU4NTMsMjU4NDgsMjU4NTcsMjU4NTksMjU4NTIsMjYwMDQsMjYwNzUs''@;'; put 'put ''MjYzMzAsMjYzMzEsMjYzMjgsMjczMzMsMjczMjEsMjczMjUsMjczNjEsMjczMzQsMjczMjIsMjczMTgsMjczMTksMjczMzUsMjczMTYsMjczMDksMjc0ODYsMjc1OTMsMjc2NTksMjg2NzksMjg2ODQsMjg2ODUsMjg2NzMsMjg2NzcsMjg2OTIsMjg2ODYsMjg2NzEsMjg2NzIsMjg2NjcsMjg3''@;'; put 'put ''MTAsMjg2NjgsMjg2NjMsMjg2ODIsMjkxODUsMjkxODMsMjkxNzcsMjkxODcsMjkxODEsMjk1NTgsMjk4ODAsMjk4ODgsMjk4NzcsMjk4ODksMjk4ODYsMjk4NzgsMjk4ODMsMjk4OTAsMjk5NzIsMjk5NzEsMzAzMDAsMzAzMDgsMzAyOTcsMzAyODgsMzAyOTEsMzAyOTUsMzAyOTgsMzAzNzQs''@;'; put 'put ''MzAzOTcsMzA0NDQsMzA2NTgsMzA2NTAsMzA5NzUsMzA5ODgsMzA5OTUsMzA5OTYsMzA5ODUsMzA5OTIsMzA5OTQsMzA5OTMsMzExNDksMzExNDgsMzEzMjcsMzE3NzIsMzE3ODUsMzE3NjksMzE3NzYsMzE3NzUsMzE3ODksMzE3NzMsMzE3ODIsMzE3ODQsMzE3NzgsMzE3ODEsMzE3OTIsMzIz''@;'; put 'put ''NDgsMzIzMzYsMzIzNDIsMzIzNTUsMzIzNDQsMzIzNTQsMzIzNTEsMzIzMzcsMzIzNTIsMzIzNDMsMzIzMzksMzI2OTMsMzI2OTEsMzI3NTksMzI3NjAsMzI4ODUsMzMyMzMsMzMyMzQsMzMyMzIsMzMzNzUsMzMzNzQsMzQyMjgsMzQyNDYsMzQyNDAsMzQyNDMsMzQyNDIsMzQyMjcsMzQyMjks''@;'; put 'put ''MzQyMzcsMzQyNDcsMzQyNDQsMzQyMzksMzQyNTEsMzQyNTQsMzQyNDgsMzQyNDUsMzQyMjUsMzQyMzAsMzQyNTgsMzQzNDAsMzQyMzIsMzQyMzEsMzQyMzgsMzQ0MDksMzQ3OTEsMzQ3OTAsMzQ3ODYsMzQ3NzksMzQ3OTUsMzQ3OTQsMzQ3ODksMzQ3ODMsMzQ4MDMsMzQ3ODgsMzQ3NzIsMzQ3''@;'; put 'put ''ODAsMzQ3NzEsMzQ3OTcsMzQ3NzYsMzQ3ODcsMzQ3MjQsMzQ3NzUsMzQ3NzcsMzQ4MTcsMzQ4MDQsMzQ3OTIsMzQ3ODEsMzUxNTUsMzUxNDcsMzUxNTEsMzUxNDgsMzUxNDIsMzUxNTIsMzUxNTMsMzUxNDUsMzU2MjYsMzU2MjMsMzU2MTksMzU2MzUsMzU2MzIsMzU2MzcsMzU2NTUsMzU2MzEs''@;'; put 'put ''MzU2NDQsMzU2NDYsMzU2MzMsMzU2MjEsMzU2MzksMzU2MjIsMzU2MzgsMzU2MzAsMzU2MjAsMzU2NDMsMzU2NDUsMzU2NDIsMzU5MDYsMzU5NTcsMzU5OTMsMzU5OTIsMzU5OTEsMzYwOTQsMzYxMDAsMzYwOTgsMzYwOTYsMzY0NDQsMzY0NTAsMzY0NDgsMzY0MzksMzY0MzgsMzY0NDYsMzY0''@;'; put 'put ''NTMsMzY0NTUsMzY0NDMsMzY0NDIsMzY0NDksMzY0NDUsMzY0NTcsMzY0MzYsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODMsMzcxNjAsMzcxNzgsMzcxNzksMzcxODIsMzcyODgsMzcyODUsMzcyODcsMzcyOTUsMzcyOTAsMzc4MTMsMzc3NzIsMzc3NzgsMzc4MTUsMzc3ODcsMzc3ODksMzc3Njks''@;'; put 'put ''Mzc3OTksMzc3NzQsMzc4MDIsMzc3OTAsMzc3OTgsMzc3ODEsMzc3NjgsMzc3ODUsMzc3OTEsMzc3NzMsMzc4MDksMzc3NzcsMzc4MTAsMzc3OTYsMzc4MDAsMzc4MTIsMzc3OTUsMzc3OTcsMzgzNTQsMzgzNTUsMzgzNTMsMzg1NzksMzg2MTUsMzg2MTgsMjQwMDIsMzg2MjMsMzg2MTYsMzg2''@;'; put 'put ''MjEsMzg2OTEsMzg2OTAsMzg2OTMsMzg4MjgsMzg4MzAsMzg4MjQsMzg4MjcsMzg4MjAsMzg4MjYsMzg4MTgsMzg4MjEsMzg4NzEsMzg4NzMsMzg4NzAsMzg4NzIsMzg5MDYsMzg5OTIsMzg5OTMsMzg5OTQsMzkwOTYsMzkyMzMsMzkyMjgsMzkyMjYsMzk0MzksMzk0MzUsMzk0MzMsMzk0Mzcs''@;'; put 'put ''Mzk0MjgsMzk0NDEsMzk0MzQsMzk0MjksMzk0MzEsMzk0MzAsMzk2MTYsMzk2NDQsMzk2ODgsMzk2ODQsMzk2ODUsMzk3MjEsMzk3MzMsMzk3NTQsMzk3NTYsMzk3NTUsMzk4NzksMzk4NzgsMzk4NzUsMzk4NzEsMzk4NzMsMzk4NjEsMzk4NjQsMzk4OTEsMzk4NjIsMzk4NzYsMzk4NjUsMzk4''@;'; put 'put ''NjksNDAyODQsNDAyNzUsNDAyNzEsNDAyNjYsNDAyODMsNDAyNjcsNDAyODEsNDAyNzgsNDAyNjgsNDAyNzksNDAyNzQsNDAyNzYsNDAyODcsNDAyODAsNDAyODIsNDA1OTAsNDA1ODgsNDA2NzEsNDA3MDUsNDA3MDQsNDA3MjYsNDA3NDEsNDA3NDcsNDA3NDYsNDA3NDUsNDA3NDQsNDA3ODAs''@;'; put 'put ''NDA3ODksMjA3ODgsMjA3ODksMjExNDIsMjEyMzksMjE0MjgsMjIxODcsMjIxODksMjIxODIsMjIxODMsMjIxODYsMjIxODgsMjI3NDYsMjI3NDksMjI3NDcsMjI4MDIsMjMzNTcsMjMzNTgsMjMzNTksMjQwMDMsMjQxNzYsMjQ1MTEsMjUwODMsMjU4NjMsMjU4NzIsMjU4NjksMjU4NjUsMjU4''@;'; put 'put ''NjgsMjU4NzAsMjU5ODgsMjYwNzgsMjYwNzcsMjYzMzQsMjczNjcsMjczNjAsMjczNDAsMjczNDUsMjczNTMsMjczMzksMjczNTksMjczNTYsMjczNDQsMjczNzEsMjczNDMsMjczNDEsMjczNTgsMjc0ODgsMjc1NjgsMjc2NjAsMjg2OTcsMjg3MTEsMjg3MDQsMjg2OTQsMjg3MTUsMjg3MDUs''@;'; put 'put ''Mjg3MDYsMjg3MDcsMjg3MTMsMjg2OTUsMjg3MDgsMjg3MDAsMjg3MTQsMjkxOTYsMjkxOTQsMjkxOTEsMjkxODYsMjkxODksMjkzNDksMjkzNTAsMjkzNDgsMjkzNDcsMjkzNDUsMjk4OTksMjk4OTMsMjk4NzksMjk4OTEsMjk5NzQsMzAzMDQsMzA2NjUsMzA2NjYsMzA2NjAsMzA3MDUsMzEw''@;'; put 'put ''MDUsMzEwMDMsMzEwMDksMzEwMDQsMzA5OTksMzEwMDYsMzExNTIsMzEzMzUsMzEzMzYsMzE3OTUsMzE4MDQsMzE4MDEsMzE3ODgsMzE4MDMsMzE5ODAsMzE5NzgsMzIzNzQsMzIzNzMsMzIzNzYsMzIzNjgsMzIzNzUsMzIzNjcsMzIzNzgsMzIzNzAsMzIzNzIsMzIzNjAsMzI1ODcsMzI1ODYs''@;'; put 'put ''MzI2NDMsMzI2NDYsMzI2OTUsMzI3NjUsMzI3NjYsMzI4ODgsMzMyMzksMzMyMzcsMzMzODAsMzMzNzcsMzMzNzksMzQyODMsMzQyODksMzQyODUsMzQyNjUsMzQyNzMsMzQyODAsMzQyNjYsMzQyNjMsMzQyODQsMzQyOTAsMzQyOTYsMzQyNjQsMzQyNzEsMzQyNzUsMzQyNjgsMzQyNTcsMzQy''@;'; put 'put ''ODgsMzQyNzgsMzQyODcsMzQyNzAsMzQyNzQsMzQ4MTYsMzQ4MTAsMzQ4MTksMzQ4MDYsMzQ4MDcsMzQ4MjUsMzQ4MjgsMzQ4MjcsMzQ4MjIsMzQ4MTIsMzQ4MjQsMzQ4MTUsMzQ4MjYsMzQ4MTgsMzUxNzAsMzUxNjIsMzUxNjMsMzUxNTksMzUxNjksMzUxNjQsMzUxNjAsMzUxNjUsMzUxNjEs''@;'; put 'put ''MzUyMDgsMzUyNTUsMzUyNTQsMzUzMTgsMzU2NjQsMzU2NTYsMzU2NTgsMzU2NDgsMzU2NjcsMzU2NzAsMzU2NjgsMzU2NTksMzU2NjksMzU2NjUsMzU2NTAsMzU2NjYsMzU2NzEsMzU5MDcsMzU5NTksMzU5NTgsMzU5OTQsMzYxMDIsMzYxMDMsMzYxMDUsMzYyNjgsMzYyNjYsMzYyNjksMzYy''@;'; put 'put ''NjcsMzY0NjEsMzY0NzIsMzY0NjcsMzY0NTgsMzY0NjMsMzY0NzUsMzY1NDYsMzY2OTAsMzY2ODksMzY2ODcsMzY2ODgsMzY2OTEsMzY3ODgsMzcxODQsMzcxODMsMzcyOTYsMzcyOTMsMzc4NTQsMzc4MzEsMzc4MzksMzc4MjYsMzc4NTAsMzc4NDAsMzc4ODEsMzc4NjgsMzc4MzYsMzc4NDks''@;'; put 'put ''Mzc4MDEsMzc4NjIsMzc4MzQsMzc4NDQsMzc4NzAsMzc4NTksMzc4NDUsMzc4MjgsMzc4MzgsMzc4MjQsMzc4NDIsMzc4NjMsMzgyNjksMzgzNjIsMzgzNjMsMzg2MjUsMzg2OTcsMzg2OTksMzg3MDAsMzg2OTYsMzg2OTQsMzg4MzUsMzg4MzksMzg4MzgsMzg4NzcsMzg4NzgsMzg4NzksMzkw''@;'; put 'put ''MDQsMzkwMDEsMzkwMDUsMzg5OTksMzkxMDMsMzkxMDEsMzkwOTksMzkxMDIsMzkyNDAsMzkyMzksMzkyMzUsMzkzMzQsMzkzMzUsMzk0NTAsMzk0NDUsMzk0NjEsMzk0NTMsMzk0NjAsMzk0NTEsMzk0NTgsMzk0NTYsMzk0NjMsMzk0NTksMzk0NTQsMzk0NTIsMzk0NDQsMzk2MTgsMzk2OTEs''@;'; put 'put ''Mzk2OTAsMzk2OTQsMzk2OTIsMzk3MzUsMzk5MTQsMzk5MTUsMzk5MDQsMzk5MDIsMzk5MDgsMzk5MTAsMzk5MDYsMzk5MjAsMzk4OTIsMzk4OTUsMzk5MTYsMzk5MDAsMzk4OTcsMzk5MDksMzk4OTMsMzk5MDUsMzk4OTgsNDAzMTEsNDAzMjEsNDAzMzAsNDAzMjQsNDAzMjgsNDAzMDUsNDAz''@;'; put 'put ''MjAsNDAzMTIsNDAzMjYsNDAzMzEsNDAzMzIsNDAzMTcsNDAyOTksNDAzMDgsNDAzMDksNDAzMDQsNDAyOTcsNDAzMjUsNDAzMDcsNDAzMTUsNDAzMjIsNDAzMDMsNDAzMTMsNDAzMTksNDAzMjcsNDAyOTYsNDA1OTYsNDA1OTMsNDA2NDAsNDA3MDAsNDA3NDksNDA3NjgsNDA3NjksNDA3ODEs''@;'; put 'put ''NDA3OTAsNDA3OTEsNDA3OTIsMjEzMDMsMjIxOTQsMjIxOTcsMjIxOTUsMjI3NTUsMjMzNjUsMjQwMDYsMjQwMDcsMjQzMDIsMjQzMDMsMjQ1MTIsMjQ1MTMsMjUwODEsMjU4NzksMjU4NzgsMjU4NzcsMjU4NzUsMjYwNzksMjYzNDQsMjYzMzksMjYzNDAsMjczNzksMjczNzYsMjczNzAsMjcz''@;'; put 'put ''NjgsMjczODUsMjczNzcsMjczNzQsMjczNzUsMjg3MzIsMjg3MjUsMjg3MTksMjg3MjcsMjg3MjQsMjg3MjEsMjg3MzgsMjg3MjgsMjg3MzUsMjg3MzAsMjg3MjksMjg3MzYsMjg3MzEsMjg3MjMsMjg3MzcsMjkyMDMsMjkyMDQsMjkzNTIsMjk1NjUsMjk1NjQsMjk4ODIsMzAzNzksMzAzNzgs''@;'; put 'put ''MzAzOTgsMzA0NDUsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NjksMzA3MDYsMzEwMTMsMzEwMTEsMzEwMTUsMzEwMTYsMzEwMTIsMzEwMTcsMzExNTQsMzEzNDIsMzEzNDAsMzEzNDEsMzE0NzksMzE4MTcsMzE4MTYsMzE4MTgsMzE4MTUsMzE4MTMsMzE5ODIsMzIzNzksMzIzODIsMzIzODUsMzIz''@;'; put 'put ''ODQsMzI2OTgsMzI3NjcsMzI4ODksMzMyNDMsMzMyNDEsMzMyOTEsMzMzODQsMzMzODUsMzQzMzgsMzQzMDMsMzQzMDUsMzQzMDIsMzQzMzEsMzQzMDQsMzQyOTQsMzQzMDgsMzQzMTMsMzQzMDksMzQzMTYsMzQzMDEsMzQ4NDEsMzQ4MzIsMzQ4MzMsMzQ4MzksMzQ4MzUsMzQ4MzgsMzUxNzEs''@;'; put 'put ''MzUxNzQsMzUyNTcsMzUzMTksMzU2ODAsMzU2OTAsMzU2NzcsMzU2ODgsMzU2ODMsMzU2ODUsMzU2ODcsMzU2OTMsMzYyNzAsMzY0ODYsMzY0ODgsMzY0ODQsMzY2OTcsMzY2OTQsMzY2OTUsMzY2OTMsMzY2OTYsMzY2OTgsMzcwMDUsMzcxODcsMzcxODUsMzczMDMsMzczMDEsMzcyOTgsMzcy''@;'; put 'put ''OTksMzc4OTksMzc5MDcsMzc4ODMsMzc5MjAsMzc5MDMsMzc5MDgsMzc4ODYsMzc5MDksMzc5MDQsMzc5MjgsMzc5MTMsMzc5MDEsMzc4NzcsMzc4ODgsMzc4NzksMzc4OTUsMzc5MDIsMzc5MTAsMzc5MDYsMzc4ODIsMzc4OTcsMzc4ODAsMzc4OTgsMzc4ODcsMzc4ODQsMzc5MDAsMzc4Nzgs''@;'; put 'put ''Mzc5MDUsMzc4OTQsMzgzNjYsMzgzNjgsMzgzNjcsMzg3MDIsMzg3MDMsMzg4NDEsMzg4NDMsMzg5MDksMzg5MTAsMzkwMDgsMzkwMTAsMzkwMTEsMzkwMDcsMzkxMDUsMzkxMDYsMzkyNDgsMzkyNDYsMzkyNTcsMzkyNDQsMzkyNDMsMzkyNTEsMzk0NzQsMzk0NzYsMzk0NzMsMzk0NjgsMzk0''@;'; put 'put ''NjYsMzk0NzgsMzk0NjUsMzk0NzAsMzk0ODAsMzk0NjksMzk2MjMsMzk2MjYsMzk2MjIsMzk2OTYsMzk2OTgsMzk2OTcsMzk5NDcsMzk5NDQsMzk5MjcsMzk5NDEsMzk5NTQsMzk5MjgsNGU0LDM5OTQzLDM5OTUwLDM5OTQyLDM5OTU5LDM5OTU2LDM5OTQ1LDQwMzUxLDQwMzQ1LDQwMzU2LDQw''@;'; put 'put ''MzQ5LDQwMzM4LDQwMzQ0LDQwMzM2LDQwMzQ3LDQwMzUyLDQwMzQwLDQwMzQ4LDQwMzYyLDQwMzQzLDQwMzUzLDQwMzQ2LDQwMzU0LDQwMzYwLDQwMzUwLDQwMzU1LDQwMzgzLDQwMzYxLDQwMzQyLDQwMzU4LDQwMzU5LDQwNjAxLDQwNjAzLDQwNjAyLDQwNjc3LDQwNjc2LDQwNjc5LDQwNjc4''@;'; put 'put ''LDQwNzUyLDQwNzUwLDQwNzk1LDQwODAwLDQwNzk4LDQwNzk3LDQwNzkzLDQwODQ5LDIwNzk0LDIwNzkzLDIxMTQ0LDIxMTQzLDIyMjExLDIyMjA1LDIyMjA2LDIzMzY4LDIzMzY3LDI0MDExLDI0MDE1LDI0MzA1LDI1MDg1LDI1ODgzLDI3Mzk0LDI3Mzg4LDI3Mzk1LDI3Mzg0LDI3MzkyLDI4''@;'; put 'put ''NzM5LDI4NzQwLDI4NzQ2LDI4NzQ0LDI4NzQ1LDI4NzQxLDI4NzQyLDI5MjEzLDI5MjEwLDI5MjA5LDI5NTY2LDI5OTc1LDMwMzE0LDMwNjcyLDMxMDIxLDMxMDI1LDMxMDIzLDMxODI4LDMxODI3LDMxOTg2LDMyMzk0LDMyMzkxLDMyMzkyLDMyMzk1LDMyMzkwLDMyMzk3LDMyNTg5LDMyNjk5''@;'; put 'put ''LDMyODE2LDMzMjQ1LDM0MzI4LDM0MzQ2LDM0MzQyLDM0MzM1LDM0MzM5LDM0MzMyLDM0MzI5LDM0MzQzLDM0MzUwLDM0MzM3LDM0MzM2LDM0MzQ1LDM0MzM0LDM0MzQxLDM0ODU3LDM0ODQ1LDM0ODQzLDM0ODQ4LDM0ODUyLDM0ODQ0LDM0ODU5LDM0ODkwLDM1MTgxLDM1MTc3LDM1MTgyLDM1''@;'; put 'put ''MTc5LDM1MzIyLDM1NzA1LDM1NzA0LDM1NjUzLDM1NzA2LDM1NzA3LDM2MTEyLDM2MTE2LDM2MjcxLDM2NDk0LDM2NDkyLDM2NzAyLDM2Njk5LDM2NzAxLDM3MTkwLDM3MTg4LDM3MTg5LDM3MzA1LDM3OTUxLDM3OTQ3LDM3OTQyLDM3OTI5LDM3OTQ5LDM3OTQ4LDM3OTM2LDM3OTQ1LDM3OTMw''@;'; put 'put ''LDM3OTQzLDM3OTMyLDM3OTUyLDM3OTM3LDM4MzczLDM4MzcyLDM4MzcxLDM4NzA5LDM4NzE0LDM4ODQ3LDM4ODgxLDM5MDEyLDM5MTEzLDM5MTEwLDM5MTA0LDM5MjU2LDM5MjU0LDM5NDgxLDM5NDg1LDM5NDk0LDM5NDkyLDM5NDkwLDM5NDg5LDM5NDgyLDM5NDg3LDM5NjI5LDM5NzAxLDM5''@;'; put 'put ''NzAzLDM5NzA0LDM5NzAyLDM5NzM4LDM5NzYyLDM5OTc5LDM5OTY1LDM5OTY0LDM5OTgwLDM5OTcxLDM5OTc2LDM5OTc3LDM5OTcyLDM5OTY5LDQwMzc1LDQwMzc0LDQwMzgwLDQwMzg1LDQwMzkxLDQwMzk0LDQwMzk5LDQwMzgyLDQwMzg5LDQwMzg3LDQwMzc5LDQwMzczLDQwMzk4LDQwMzc3''@;'; put 'put ''LDQwMzc4LDQwMzY0LDQwMzkyLDQwMzY5LDQwMzY1LDQwMzk2LDQwMzcxLDQwMzk3LDQwMzcwLDQwNTcwLDQwNjA0LDQwNjgzLDQwNjg2LDQwNjg1LDQwNzMxLDQwNzI4LDQwNzMwLDQwNzUzLDQwNzgyLDQwODA1LDQwODA0LDQwODUwLDIwMTUzLDIyMjE0LDIyMjEzLDIyMjE5LDIyODk3LDIz''@;'; put 'put ''MzcxLDIzMzcyLDI0MDIxLDI0MDE3LDI0MzA2LDI1ODg5LDI1ODg4LDI1ODk0LDI1ODkwLDI3NDAzLDI3NDAwLDI3NDAxLDI3NjYxLDI4NzU3LDI4NzU4LDI4NzU5LDI4NzU0LDI5MjE0LDI5MjE1LDI5MzUzLDI5NTY3LDI5OTEyLDI5OTA5LDI5OTEzLDI5OTExLDMwMzE3LDMwMzgxLDMxMDI5''@;'; put 'put ''LDMxMTU2LDMxMzQ0LDMxMzQ1LDMxODMxLDMxODM2LDMxODMzLDMxODM1LDMxODM0LDMxOTg4LDMxOTg1LDMyNDAxLDMyNTkxLDMyNjQ3LDMzMjQ2LDMzMzg3LDM0MzU2LDM0MzU3LDM0MzU1LDM0MzQ4LDM0MzU0LDM0MzU4LDM0ODYwLDM0ODU2LDM0ODU0LDM0ODU4LDM0ODUzLDM1MTg1LDM1''@;'; put 'put ''MjYzLDM1MjYyLDM1MzIzLDM1NzEwLDM1NzE2LDM1NzE0LDM1NzE4LDM1NzE3LDM1NzExLDM2MTE3LDM2NTAxLDM2NTAwLDM2NTA2LDM2NDk4LDM2NDk2LDM2NTAyLDM2NTAzLDM2NzA0LDM2NzA2LDM3MTkxLDM3OTY0LDM3OTY4LDM3OTYyLDM3OTYzLDM3OTY3LDM3OTU5LDM3OTU3LDM3OTYw''@;'; put 'put ''LDM3OTYxLDM3OTU4LDM4NzE5LDM4ODgzLDM5MDE4LDM5MDE3LDM5MTE1LDM5MjUyLDM5MjU5LDM5NTAyLDM5NTA3LDM5NTA4LDM5NTAwLDM5NTAzLDM5NDk2LDM5NDk4LDM5NDk3LDM5NTA2LDM5NTA0LDM5NjMyLDM5NzA1LDM5NzIzLDM5NzM5LDM5NzY2LDM5NzY1LDQwMDA2LDQwMDA4LDM5''@;'; put 'put ''OTk5LDQwMDA0LDM5OTkzLDM5OTg3LDQwMDAxLDM5OTk2LDM5OTkxLDM5OTg4LDM5OTg2LDM5OTk3LDM5OTkwLDQwNDExLDQwNDAyLDQwNDE0LDQwNDEwLDQwMzk1LDQwNDAwLDQwNDEyLDQwNDAxLDQwNDE1LDQwNDI1LDQwNDA5LDQwNDA4LDQwNDA2LDQwNDM3LDQwNDA1LDQwNDEzLDQwNjMw''@;'; put 'put ''LDQwNjg4LDQwNzU3LDQwNzU1LDQwNzU0LDQwNzcwLDQwODExLDQwODUzLDQwODY2LDIwNzk3LDIxMTQ1LDIyNzYwLDIyNzU5LDIyODk4LDIzMzczLDI0MDI0LDM0ODYzLDI0Mzk5LDI1MDg5LDI1MDkxLDI1MDkyLDI1ODk3LDI1ODkzLDI2MDA2LDI2MzQ3LDI3NDA5LDI3NDEwLDI3NDA3LDI3''@;'; put 'put ''NTk0LDI4NzYzLDI4NzYyLDI5MjE4LDI5NTcwLDI5NTY5LDI5NTcxLDMwMzIwLDMwNjc2LDMxODQ3LDMxODQ2LDMyNDA1LDMzMzg4LDM0MzYyLDM0MzY4LDM0MzYxLDM0MzY0LDM0MzUzLDM0MzYzLDM0MzY2LDM0ODY0LDM0ODY2LDM0ODYyLDM0ODY3LDM1MTkwLDM1MTg4LDM1MTg3LDM1MzI2''@;'; put 'put ''LDM1NzI0LDM1NzI2LDM1NzIzLDM1NzIwLDM1OTA5LDM2MTIxLDM2NTA0LDM2NzA4LDM2NzA3LDM3MzA4LDM3OTg2LDM3OTczLDM3OTgxLDM3OTc1LDM3OTgyLDM4ODUyLDM4ODUzLDM4OTEyLDM5NTEwLDM5NTEzLDM5NzEwLDM5NzExLDM5NzEyLDQwMDE4LDQwMDI0LDQwMDE2LDQwMDEwLDQw''@;'; put 'put ''MDEzLDQwMDExLDQwMDIxLDQwMDI1LDQwMDEyLDQwMDE0LDQwNDQzLDQwNDM5LDQwNDMxLDQwNDE5LDQwNDI3LDQwNDQwLDQwNDIwLDQwNDM4LDQwNDE3LDQwNDMwLDQwNDIyLDQwNDM0LDQwNDMyLDQwNDE4LDQwNDI4LDQwNDM2LDQwNDM1LDQwNDI0LDQwNDI5LDQwNjQyLDQwNjU2LDQwNjkw''@;'; put 'put ''LDQwNjkxLDQwNzEwLDQwNzMyLDQwNzYwLDQwNzU5LDQwNzU4LDQwNzcxLDQwNzgzLDQwODE3LDQwODE2LDQwODE0LDQwODE1LDIyMjI3LDIyMjIxLDIzMzc0LDIzNjYxLDI1OTAxLDI2MzQ5LDI2MzUwLDI3NDExLDI4NzY3LDI4NzY5LDI4NzY1LDI4NzY4LDI5MjE5LDI5OTE1LDI5OTI1LDMw''@;'; put 'put ''Njc3LDMxMDMyLDMxMTU5LDMxMTU4LDMxODUwLDMyNDA3LDMyNjQ5LDMzMzg5LDM0MzcxLDM0ODcyLDM0ODcxLDM0ODY5LDM0ODkxLDM1NzMyLDM1NzMzLDM2NTEwLDM2NTExLDM2NTEyLDM2NTA5LDM3MzEwLDM3MzA5LDM3MzE0LDM3OTk1LDM3OTkyLDM3OTkzLDM4NjI5LDM4NzI2LDM4NzIz''@;'; put 'put ''LDM4NzI3LDM4ODU1LDM4ODg1LDM5NTE4LDM5NjM3LDM5NzY5LDQwMDM1LDQwMDM5LDQwMDM4LDQwMDM0LDQwMDMwLDQwMDMyLDQwNDUwLDQwNDQ2LDQwNDU1LDQwNDUxLDQwNDU0LDQwNDUzLDQwNDQ4LDQwNDQ5LDQwNDU3LDQwNDQ3LDQwNDQ1LDQwNDUyLDQwNjA4LDQwNzM0LDQwNzc0LDQw''@;'; put 'put ''ODIwLDQwODIxLDQwODIyLDIyMjI4LDI1OTAyLDI2MDQwLDI3NDE2LDI3NDE3LDI3NDE1LDI3NDE4LDI4NzcwLDI5MjIyLDI5MzU0LDMwNjgwLDMwNjgxLDMxMDMzLDMxODQ5LDMxODUxLDMxOTkwLDMyNDEwLDMyNDA4LDMyNDExLDMyNDA5LDMzMjQ4LDMzMjQ5LDM0Mzc0LDM0Mzc1LDM0Mzc2''@;'; put 'put ''LDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk1LDM1MzI3LDM1NzM2LDM1NzM3LDM2NTE3LDM2NTE2LDM2NTE1LDM3OTk4LDM3OTk3LDM3OTk5LDM4MDAxLDM4MDAzLDM4NzI5LDM5MDI2LDM5MjYzLDQwMDQwLDQwMDQ2LDQwMDQ1LDQwNDU5LDQwNDYxLDQwNDY0LDQwNDYzLDQwNDY2LDQwNDY1LDQw''@;'; put 'put ''NjA5LDQwNjkzLDQwNzEzLDQwNzc1LDQwODI0LDQwODI3LDQwODI2LDQwODI1LDIyMzAyLDI4Nzc0LDMxODU1LDM0ODc2LDM2Mjc0LDM2NTE4LDM3MzE1LDM4MDA0LDM4MDA4LDM4MDA2LDM4MDA1LDM5NTIwLDQwMDUyLDQwMDUxLDQwMDQ5LDQwMDUzLDQwNDY4LDQwNDY3LDQwNjk0LDQwNzE0''@;'; put 'put ''LDQwODY4LDI4Nzc2LDI4NzczLDMxOTkxLDM0NDEwLDM0ODc4LDM0ODc3LDM0ODc5LDM1NzQyLDM1OTk2LDM2NTIxLDM2NTUzLDM4NzMxLDM5MDI3LDM5MDI4LDM5MTE2LDM5MjY1LDM5MzM5LDM5NTI0LDM5NTI2LDM5NTI3LDM5NzE2LDQwNDY5LDQwNDcxLDQwNzc2LDI1MDk1LDI3NDIyLDI5''@;'; put 'put ''MjIzLDM0MzgwLDM2NTIwLDM4MDE4LDM4MDE2LDM4MDE3LDM5NTI5LDM5NTI4LDM5NzI2LDQwNDczLDI5MjI1LDM0Mzc5LDM1NzQzLDM4MDE5LDQwMDU3LDQwNjMxLDMwMzI1LDM5NTMxLDQwMDU4LDQwNDc3LDI4Nzc3LDI4Nzc4LDQwNjEyLDQwODMwLDQwNzc3LDQwODU2LDMwODQ5LDM3NTYx''@;'; put 'put ''LDM1MDIzLDIyNzE1LDI0NjU4LDMxOTExLDIzMjkwLDk1NTYsOTU3NCw5NTU5LDk1NjgsOTU4MCw5NTcxLDk1NjIsOTU3Nyw5NTY1LDk1NTQsOTU3Miw5NTU3LDk1NjYsOTU3OCw5NTY5LDk1NjAsOTU3NSw5NTYzLDk1NTUsOTU3Myw5NTU4LDk1NjcsOTU3OSw5NTcwLDk1NjEsOTU3Niw5NTY0''@;'; put 'put ''LDk1NTMsOTU1Miw5NTgxLDk1ODIsOTU4NCw5NTgzLDY1NTE3LDEzMjQyMywzNzU5NSwxMzI1NzUsMTQ3Mzk3LDM0MTI0LDE3MDc3LDI5Njc5LDIwOTE3LDEzODk3LDE0OTgyNiwxNjYzNzIsMzc3MDAsMTM3NjkxLDMzNTE4LDE0NjYzMiwzMDc4MCwyNjQzNiwyNTMxMSwxNDk4MTEsMTY2MzE0''@;'; put 'put ''LDEzMTc0NCwxNTg2NDMsMTM1OTQxLDIwMzk1LDE0MDUyNSwyMDQ4OCwxNTkwMTcsMTYyNDM2LDE0NDg5NiwxNTAxOTMsMTQwNTYzLDIwNTIxLDEzMTk2NiwyNDQ4NCwxMzE5NjgsMTMxOTExLDI4Mzc5LDEzMjEyNywyMDYwNSwyMDczNywxMzQzNCwyMDc1MCwzOTAyMCwxNDE0NywzMzgxNCwx''@;'; put 'put ''NDk5MjQsMTMyMjMxLDIwODMyLDE0NDMwOCwyMDg0MiwxMzQxNDMsMTM5NTE2LDEzMTgxMywxNDA1OTIsMTMyNDk0LDE0MzkyMywxMzc2MDMsMjM0MjYsMzQ2ODUsMTMyNTMxLDE0NjU4NSwyMDkxNCwyMDkyMCw0MDI0NCwyMDkzNywyMDk0MywyMDk0NSwxNTU4MCwyMDk0NywxNTAxODIsMjA5''@;'; put 'put ''MTUsMjA5NjIsMjEzMTQsMjA5NzMsMzM3NDEsMjY5NDIsMTQ1MTk3LDI0NDQzLDIxMDAzLDIxMDMwLDIxMDUyLDIxMTczLDIxMDc5LDIxMTQwLDIxMTc3LDIxMTg5LDMxNzY1LDM0MTE0LDIxMjE2LDM0MzE3LDE1ODQ4MywyMTI1MywxNjY2MjIsMjE4MzMsMjgzNzcsMTQ3MzI4LDEzMzQ2MCwx''@;'; put 'put ''NDc0MzYsMjEyOTksMjEzMTYsMTM0MTE0LDI3ODUxLDEzNjk5OCwyNjY1MSwyOTY1MywyNDY1MCwxNjA0MiwxNDU0MCwxMzY5MzYsMjkxNDksMTc1NzAsMjEzNTcsMjEzNjQsMTY1NTQ3LDIxMzc0LDIxMzc1LDEzNjU5OCwxMzY3MjMsMzA2OTQsMjEzOTUsMTY2NTU1LDIxNDA4LDIxNDE5LDIx''@;'; put 'put ''NDIyLDI5NjA3LDE1MzQ1OCwxNjIxNywyOTU5NiwyMTQ0MSwyMTQ0NSwyNzcyMSwyMDA0MSwyMjUyNiwyMTQ2NSwxNTAxOSwxMzQwMzEsMjE0NzIsMTQ3NDM1LDE0Mjc1NSwyMTQ5NCwxMzQyNjMsMjE1MjMsMjg3OTMsMjE4MDMsMjYxOTksMjc5OTUsMjE2MTMsMTU4NTQ3LDEzNDUxNiwyMTg1''@;'; put 'put ''MywyMTY0NywyMTY2OCwxODM0MiwxMzY5NzMsMTM0ODc3LDE1Nzk2LDEzNDQ3NywxNjYzMzIsMTQwOTUyLDIxODMxLDE5NjkzLDIxNTUxLDI5NzE5LDIxODk0LDIxOTI5LDIyMDIxLDEzNzQzMSwxNDc1MTQsMTc3NDYsMTQ4NTMzLDI2MjkxLDEzNTM0OCwyMjA3MSwyNjMxNywxNDQwMTAsMjYy''@;'; put 'put ''NzYsMjYyODUsMjIwOTMsMjIwOTUsMzA5NjEsMjIyNTcsMzg3OTEsMjE1MDIsMjIyNzIsMjIyNTUsMjIyNTMsMTY2NzU4LDEzODU5LDEzNTc1OSwyMjM0MiwxNDc4NzcsMjc3NTgsMjg4MTEsMjIzMzgsMTQwMDEsMTU4ODQ2LDIyNTAyLDEzNjIxNCwyMjUzMSwxMzYyNzYsMTQ4MzIzLDIyNTY2''@;'; put 'put ''LDE1MDUxNywyMjYyMCwyMjY5OCwxMzY2NSwyMjc1MiwyMjc0OCwxMzU3NDAsMjI3NzksMjM1NTEsMjIzMzksMTcyMzY4LDE0ODA4OCwzNzg0MywxMzcyOSwyMjgxNSwyNjc5MCwxNDAxOSwyODI0OSwxMzY3NjYsMjMwNzYsMjE4NDMsMTM2ODUwLDM0MDUzLDIyOTg1LDEzNDQ3OCwxNTg4NDks''@;'; put 'put ''MTU5MDE4LDEzNzE4MCwyMzAwMSwxMzcyMTEsMTM3MTM4LDE1OTE0MiwyODAxNywxMzcyNTYsMTM2OTE3LDIzMDMzLDE1OTMwMSwyMzIxMSwyMzEzOSwxNDA1NCwxNDk5MjksMjMxNTksMTQwODgsMjMxOTAsMjk3OTcsMjMyNTEsMTU5NjQ5LDE0MDYyOCwxNTc0OSwxMzc0ODksMTQxMzAsMTM2''@;'; put 'put ''ODg4LDI0MTk1LDIxMjAwLDIzNDE0LDI1OTkyLDIzNDIwLDE2MjMxOCwxNjM4OCwxODUyNSwxMzE1ODgsMjM1MDksMjQ5MjgsMTM3NzgwLDE1NDA2MCwxMzI1MTcsMjM1MzksMjM0NTMsMTk3MjgsMjM1NTcsMTM4MDUyLDIzNTcxLDI5NjQ2LDIzNTcyLDEzODQwNSwxNTg1MDQsMjM2MjUsMTg2''@;'; put 'put ''NTMsMjM2ODUsMjM3ODUsMjM3OTEsMjM5NDcsMTM4NzQ1LDEzODgwNywyMzgyNCwyMzgzMiwyMzg3OCwxMzg5MTYsMjM3MzgsMjQwMjMsMzM1MzIsMTQzODEsMTQ5NzYxLDEzOTMzNywxMzk2MzUsMzM0MTUsMTQzOTAsMTUyOTgsMjQxMTAsMjcyNzQsMjQxODEsMjQxODYsMTQ4NjY4LDEzNDM1''@;'; put 'put ''NSwyMTQxNCwyMDE1MSwyNDI3MiwyMTQxNiwxMzcwNzMsMjQwNzMsMjQzMDgsMTY0OTk0LDI0MzEzLDI0MzE1LDE0NDk2LDI0MzE2LDI2Njg2LDM3OTE1LDI0MzMzLDEzMTUyMSwxOTQ3MDgsMTUwNzAsMTg2MDYsMTM1OTk0LDI0Mzc4LDE1NzgzMiwxNDAyNDAsMjQ0MDgsMTQwNDAxLDI0NDE5''@;'; put 'put ''LDM4ODQ1LDE1OTM0MiwyNDQzNCwzNzY5NiwxNjY0NTQsMjQ0ODcsMjM5OTAsMTU3MTEsMTUyMTQ0LDEzOTExNCwxNTk5OTIsMTQwOTA0LDM3MzM0LDEzMTc0MiwxNjY0NDEsMjQ2MjUsMjYyNDUsMTM3MzM1LDE0NjkxLDE1ODE1LDEzODgxLDIyNDE2LDE0MTIzNiwzMTA4OSwxNTkzNiwyNDcz''@;'; put 'put ''NCwyNDc0MCwyNDc1NSwxNDk4OTAsMTQ5OTAzLDE2MjM4NywyOTg2MCwyMDcwNSwyMzIwMCwyNDkzMiwzMzgyOCwyNDg5OCwxOTQ3MjYsMTU5NDQyLDI0OTYxLDIwOTgwLDEzMjY5NCwyNDk2NywyMzQ2NiwxNDczODMsMTQxNDA3LDI1MDQzLDE2NjgxMywxNzAzMzMsMjUwNDAsMTQ2NDIsMTQx''@;'; put 'put ''Njk2LDE0MTUwNSwyNDYxMSwyNDkyNCwyNTg4NiwyNTQ4MywxMzEzNTIsMjUyODUsMTM3MDcyLDI1MzAxLDE0Mjg2MSwyNTQ1MiwxNDk5ODMsMTQ4NzEsMjU2NTYsMjU1OTIsMTM2MDc4LDEzNzIxMiwyNTc0NCwyODU1NCwxNDI5MDIsMzg5MzIsMTQ3NTk2LDE1MzM3MywyNTgyNSwyNTgyOSwz''@;'; put 'put ''ODAxMSwxNDk1MCwyNTY1OCwxNDkzNSwyNTkzMywyODQzOCwxNTAwNTYsMTUwMDUxLDI1OTg5LDI1OTY1LDI1OTUxLDE0MzQ4NiwyNjAzNywxNDk4MjQsMTkyNTUsMjYwNjUsMTY2MDAsMTM3MjU3LDI2MDgwLDI2MDgzLDI0NTQzLDE0NDM4NCwyNjEzNiwxNDM4NjMsMTQzODY0LDI2MTgwLDE0''@;'; put 'put ''Mzc4MCwxNDM3ODEsMjYxODcsMTM0NzczLDI2MjE1LDE1MjAzOCwyNjIyNywyNjIyOCwxMzg4MTMsMTQzOTIxLDE2NTM2NCwxNDM4MTYsMTUyMzM5LDMwNjYxLDE0MTU1OSwzOTMzMiwyNjM3MCwxNDgzODAsMTUwMDQ5LDE1MTQ3LDI3MTMwLDE0NTM0NiwyNjQ2MiwyNjQ3MSwyNjQ2NiwxNDc5''@;'; put 'put ''MTcsMTY4MTczLDI2NTgzLDE3NjQxLDI2NjU4LDI4MjQwLDM3NDM2LDI2NjI1LDE0NDM1OCwxNTkxMzYsMjY3MTcsMTQ0NDk1LDI3MTA1LDI3MTQ3LDE2NjYyMywyNjk5NSwyNjgxOSwxNDQ4NDUsMjY4ODEsMjY4ODAsMTU2NjYsMTQ4NDksMTQ0OTU2LDE1MjMyLDI2NTQwLDI2OTc3LDE2NjQ3''@;'; put 'put ''NCwxNzE0OCwyNjkzNCwyNzAzMiwxNTI2NSwxMzIwNDEsMzM2MzUsMjA2MjQsMjcxMjksMTQ0OTg1LDEzOTU2MiwyNzIwNSwxNDUxNTUsMjcyOTMsMTUzNDcsMjY1NDUsMjczMzYsMTY4MzQ4LDE1MzczLDI3NDIxLDEzMzQxMSwyNDc5OCwyNzQ0NSwyNzUwOCwxNDEyNjEsMjgzNDEsMTQ2MTM5''@;'; put 'put ''LDEzMjAyMSwxMzc1NjAsMTQxNDQsMjE1MzcsMTQ2MjY2LDI3NjE3LDE0NzE5NiwyNzYxMiwyNzcwMywxNDA0MjcsMTQ5NzQ1LDE1ODU0NSwyNzczOCwzMzMxOCwyNzc2OSwxNDY4NzYsMTc2MDUsMTQ2ODc3LDE0Nzg3NiwxNDk3NzIsMTQ5NzYwLDE0NjYzMywxNDA1MywxNTU5NSwxMzQ0NTAs''@;'; put 'put ''Mzk4MTEsMTQzODY1LDE0MDQzMywzMjY1NSwyNjY3OSwxNTkwMTMsMTU5MTM3LDE1OTIxMSwyODA1NCwyNzk5NiwyODI4NCwyODQyMCwxNDk4ODcsMTQ3NTg5LDE1OTM0NiwzNDA5OSwxNTk2MDQsMjA5MzUsMjc4MDQsMjgxODksMzM4MzgsMTY2Njg5LDI4MjA3LDE0Njk5MSwyOTc3OSwxNDcz''@;'; put 'put ''MzAsMzExODAsMjgyMzksMjMxODUsMTQzNDM1LDI4NjY0LDE0MDkzLDI4NTczLDE0Njk5MiwyODQxMCwxMzYzNDMsMTQ3NTE3LDE3NzQ5LDM3ODcyLDI4NDg0LDI4NTA4LDE1Njk0LDI4NTMyLDE2ODMwNCwxNTY3NSwyODU3NSwxNDc3ODAsMjg2MjcsMTQ3NjAxLDE0Nzc5NywxNDc1MTMsMTQ3''@;'; put 'put ''NDQwLDE0NzM4MCwxNDc3NzUsMjA5NTksMTQ3Nzk4LDE0Nzc5OSwxNDc3NzYsMTU2MTI1LDI4NzQ3LDI4Nzk4LDI4ODM5LDI4ODAxLDI4ODc2LDI4ODg1LDI4ODg2LDI4ODk1LDE2NjQ0LDE1ODQ4LDI5MTA4LDI5MDc4LDE0ODA4NywyODk3MSwyODk5NywyMzE3NiwyOTAwMiwyOTAzOCwyMzcw''@;'; put 'put ''OCwxNDgzMjUsMjkwMDcsMzc3MzAsMTQ4MTYxLDI4OTcyLDE0ODU3MCwxNTAwNTUsMTUwMDUwLDI5MTE0LDE2Njg4OCwyODg2MSwyOTE5OCwzNzk1NCwyOTIwNSwyMjgwMSwzNzk1NSwyOTIyMCwzNzY5NywxNTMwOTMsMjkyMzAsMjkyNDgsMTQ5ODc2LDI2ODEzLDI5MjY5LDI5MjcxLDE1OTU3''@;'; put 'put ''LDE0MzQyOCwyNjYzNywyODQ3NywyOTMxNCwyOTQ4MiwyOTQ4MywxNDk1MzksMTY1OTMxLDE4NjY5LDE2NTg5MiwyOTQ4MCwyOTQ4NiwyOTY0NywyOTYxMCwxMzQyMDIsMTU4MjU0LDI5NjQxLDI5NzY5LDE0NzkzOCwxMzY5MzUsMTUwMDUyLDI2MTQ3LDE0MDIxLDE0OTk0MywxNDk5MDEsMTUw''@;'; put 'put ''MDExLDI5Njg3LDI5NzE3LDI2ODgzLDE1MDA1NCwyOTc1MywxMzI1NDcsMTYwODcsMjk3ODgsMTQxNDg1LDI5NzkyLDE2NzYwMiwyOTc2NywyOTY2OCwyOTgxNCwzMzcyMSwyOTgwNCwxNDEyOCwyOTgxMiwzNzg3MywyNzE4MCwyOTgyNiwxODc3MSwxNTAxNTYsMTQ3ODA3LDE1MDEzNywxNjY3''@;'; put 'put ''OTksMjMzNjYsMTY2OTE1LDEzNzM3NCwyOTg5NiwxMzc2MDgsMjk5NjYsMjk5MjksMjk5ODIsMTY3NjQxLDEzNzgwMywyMzUxMSwxNjc1OTYsMzc3NjUsMzAwMjksMzAwMjYsMzAwNTUsMzAwNjIsMTUxNDI2LDE2MTMyLDE1MDgwMywzMDA5NCwyOTc4OSwzMDExMCwzMDEzMiwzMDIxMCwzMDI1''@;'; put 'put ''MiwzMDI4OSwzMDI4NywzMDMxOSwzMDMyNiwxNTY2NjEsMzAzNTIsMzMyNjMsMTQzMjgsMTU3OTY5LDE1Nzk2NiwzMDM2OSwzMDM3MywzMDM5MSwzMDQxMiwxNTk2NDcsMzM4OTAsMTUxNzA5LDE1MTkzMywxMzg3ODAsMzA0OTQsMzA1MDIsMzA1MjgsMjU3NzUsMTUyMDk2LDMwNTUyLDE0NDA0''@;'; put 'put ''NCwzMDYzOSwxNjYyNDQsMTY2MjQ4LDEzNjg5NywzMDcwOCwzMDcyOSwxMzYwNTQsMTUwMDM0LDI2ODI2LDMwODk1LDMwOTE5LDMwOTMxLDM4NTY1LDMxMDIyLDE1MzA1NiwzMDkzNSwzMTAyOCwzMDg5NywxNjEyOTIsMzY3OTIsMzQ5NDgsMTY2Njk5LDE1NTc3OSwxNDA4MjgsMzExMTAsMzUw''@;'; put 'put ''NzIsMjY4ODIsMzExMDQsMTUzNjg3LDMxMTMzLDE2MjYxNywzMTAzNiwzMTE0NSwyODIwMiwxNjAwMzgsMTYwNDAsMzExNzQsMTY4MjA1LDMxMTg4XSwiZXVjLWtyIjpbNDQwMzQsNDQwMzUsNDQwMzcsNDQwMzgsNDQwNDMsNDQwNDQsNDQwNDUsNDQwNDYsNDQwNDcsNDQwNTYsNDQwNjIsNDQw''@;'; put 'put ''NjMsNDQwNjUsNDQwNjYsNDQwNjcsNDQwNjksNDQwNzAsNDQwNzEsNDQwNzIsNDQwNzMsNDQwNzQsNDQwNzUsNDQwNzgsNDQwODIsNDQwODMsNDQwODQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQwODUsNDQwODYsNDQwODcsNDQwOTAsNDQwOTEsNDQwOTMsNDQwOTQsNDQwOTUs''@;'; put 'put ''NDQwOTcsNDQwOTgsNDQwOTksNDQxMDAsNDQxMDEsNDQxMDIsNDQxMDMsNDQxMDQsNDQxMDUsNDQxMDYsNDQxMDgsNDQxMTAsNDQxMTEsNDQxMTIsNDQxMTMsNDQxMTQsNDQxMTUsNDQxMTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQxMTgsNDQxMTksNDQxMjEsNDQxMjIsNDQx''@;'; put 'put ''MjMsNDQxMjUsNDQxMjYsNDQxMjcsNDQxMjgsNDQxMjksNDQxMzAsNDQxMzEsNDQxMzIsNDQxMzMsNDQxMzQsNDQxMzUsNDQxMzYsNDQxMzcsNDQxMzgsNDQxMzksNDQxNDAsNDQxNDEsNDQxNDIsNDQxNDMsNDQxNDYsNDQxNDcsNDQxNDksNDQxNTAsNDQxNTMsNDQxNTUsNDQxNTYsNDQxNTcs''@;'; put 'put ''NDQxNTgsNDQxNTksNDQxNjIsNDQxNjcsNDQxNjgsNDQxNzMsNDQxNzQsNDQxNzUsNDQxNzcsNDQxNzgsNDQxNzksNDQxODEsNDQxODIsNDQxODMsNDQxODQsNDQxODUsNDQxODYsNDQxODcsNDQxOTAsNDQxOTQsNDQxOTUsNDQxOTYsNDQxOTcsNDQxOTgsNDQxOTksNDQyMDMsNDQyMDUsNDQy''@;'; put 'put ''MDYsNDQyMDksNDQyMTAsNDQyMTEsNDQyMTIsNDQyMTMsNDQyMTQsNDQyMTUsNDQyMTgsNDQyMjIsNDQyMjMsNDQyMjQsNDQyMjYsNDQyMjcsNDQyMjksNDQyMzAsNDQyMzEsNDQyMzMsNDQyMzQsNDQyMzUsNDQyMzcsNDQyMzgsNDQyMzksNDQyNDAsNDQyNDEsNDQyNDIsNDQyNDMsNDQyNDQs''@;'; put 'put ''NDQyNDYsNDQyNDgsNDQyNDksNDQyNTAsNDQyNTEsNDQyNTIsNDQyNTMsNDQyNTQsNDQyNTUsNDQyNTgsNDQyNTksNDQyNjEsNDQyNjIsNDQyNjUsNDQyNjcsNDQyNjksNDQyNzAsNDQyNzQsNDQyNzYsNDQyNzksNDQyODAsNDQyODEsNDQyODIsNDQyODMsNDQyODYsNDQyODcsNDQyODksNDQy''@;'; put 'put ''OTAsNDQyOTEsNDQyOTMsNDQyOTUsNDQyOTYsNDQyOTcsNDQyOTgsNDQyOTksNDQzMDIsNDQzMDQsNDQzMDYsNDQzMDcsNDQzMDgsNDQzMDksNDQzMTAsNDQzMTEsNDQzMTMsNDQzMTQsNDQzMTUsNDQzMTcsNDQzMTgsNDQzMTksNDQzMjEsNDQzMjIsNDQzMjMsNDQzMjQsNDQzMjUsNDQzMjYs''@;'; put 'put ''NDQzMjcsNDQzMjgsNDQzMzAsNDQzMzEsNDQzMzQsNDQzMzUsNDQzMzYsNDQzMzcsNDQzMzgsNDQzMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNDIsNDQzNDMsNDQzNDUsNDQzNDYsNDQzNDcsNDQzNDksNDQzNTAsNDQzNTEsNDQzNTIsNDQzNTMsNDQzNTQsNDQzNTUsNDQz''@;'; put 'put ''NTgsNDQzNjAsNDQzNjIsNDQzNjMsNDQzNjQsNDQzNjUsNDQzNjYsNDQzNjcsNDQzNjksNDQzNzAsNDQzNzEsNDQzNzMsNDQzNzQsNDQzNzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNzcsNDQzNzgsNDQzNzksNDQzODAsNDQzODEsNDQzODIsNDQzODMsNDQzODQsNDQzODYs''@;'; put 'put ''NDQzODgsNDQzODksNDQzOTAsNDQzOTEsNDQzOTIsNDQzOTMsNDQzOTQsNDQzOTUsNDQzOTgsNDQzOTksNDQ0MDEsNDQ0MDIsNDQ0MDcsNDQ0MDgsNDQ0MDksNDQ0MTAsNDQ0MTQsNDQ0MTYsNDQ0MTksNDQ0MjAsNDQ0MjEsNDQ0MjIsNDQ0MjMsNDQ0MjYsNDQ0MjcsNDQ0MjksNDQ0MzAsNDQ0''@;'; put 'put ''MzEsNDQ0MzMsNDQ0MzQsNDQ0MzUsNDQ0MzYsNDQ0MzcsNDQ0MzgsNDQ0MzksNDQ0NDAsNDQ0NDEsNDQ0NDIsNDQ0NDMsNDQ0NDYsNDQ0NDcsNDQ0NDgsNDQ0NDksNDQ0NTAsNDQ0NTEsNDQ0NTMsNDQ0NTQsNDQ0NTUsNDQ0NTYsNDQ0NTcsNDQ0NTgsNDQ0NTksNDQ0NjAsNDQ0NjEsNDQ0NjIs''@;'; put 'put ''NDQ0NjMsNDQ0NjQsNDQ0NjUsNDQ0NjYsNDQ0NjcsNDQ0NjgsNDQ0NjksNDQ0NzAsNDQ0NzIsNDQ0NzMsNDQ0NzQsNDQ0NzUsNDQ0NzYsNDQ0NzcsNDQ0NzgsNDQ0NzksNDQ0ODIsNDQ0ODMsNDQ0ODUsNDQ0ODYsNDQ0ODcsNDQ0ODksNDQ0OTAsNDQ0OTEsNDQ0OTIsNDQ0OTMsNDQ0OTQsNDQ0''@;'; put 'put ''OTUsNDQ0OTgsNDQ1MDAsNDQ1MDEsNDQ1MDIsNDQ1MDMsNDQ1MDQsNDQ1MDUsNDQ1MDYsNDQ1MDcsNDQ1MDksNDQ1MTAsNDQ1MTEsNDQ1MTMsNDQ1MTQsNDQ1MTUsNDQ1MTcsNDQ1MTgsNDQ1MTksNDQ1MjAsNDQ1MjEsNDQ1MjIsNDQ1MjMsNDQ1MjQsNDQ1MjUsNDQ1MjYsNDQ1MjcsNDQ1Mjgs''@;'; put 'put ''NDQ1MjksNDQ1MzAsNDQ1MzEsNDQ1MzIsNDQ1MzMsNDQ1MzQsNDQ1MzUsNDQ1MzgsNDQ1MzksNDQ1NDEsNDQ1NDIsNDQ1NDYsNDQ1NDcsNDQ1NDgsNDQ1NDksNDQ1NTAsNDQ1NTEsNDQ1NTQsNDQ1NTYsNDQ1NTgsNDQ1NTksNDQ1NjAsNDQ1NjEsNDQ1NjIsNDQ1NjMsNDQ1NjUsNDQ1NjYsNDQ1''@;'; put 'put ''NjcsNDQ1NjgsNDQ1NjksNDQ1NzAsNDQ1NzEsNDQ1NzIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ1NzMsNDQ1NzQsNDQ1NzUsNDQ1NzYsNDQ1NzcsNDQ1NzgsNDQ1NzksNDQ1ODAsNDQ1ODEsNDQ1ODIsNDQ1ODMsNDQ1ODQsNDQ1ODUsNDQ1ODYsNDQ1ODcsNDQ1ODgsNDQ1ODks''@;'; put 'put ''NDQ1OTAsNDQ1OTEsNDQ1OTQsNDQ1OTUsNDQ1OTcsNDQ1OTgsNDQ2MDEsNDQ2MDMsNDQ2MDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ2MDUsNDQ2MDYsNDQ2MDcsNDQ2MTAsNDQ2MTIsNDQ2MTUsNDQ2MTYsNDQ2MTcsNDQ2MTksNDQ2MjMsNDQ2MjUsNDQ2MjYsNDQ2MjcsNDQ2''@;'; put 'put ''MjksNDQ2MzEsNDQ2MzIsNDQ2MzMsNDQ2MzQsNDQ2MzUsNDQ2MzgsNDQ2NDIsNDQ2NDMsNDQ2NDQsNDQ2NDYsNDQ2NDcsNDQ2NTAsNDQ2NTEsNDQ2NTMsNDQ2NTQsNDQ2NTUsNDQ2NTcsNDQ2NTgsNDQ2NTksNDQ2NjAsNDQ2NjEsNDQ2NjIsNDQ2NjMsNDQ2NjYsNDQ2NzAsNDQ2NzEsNDQ2NzIs''@;'; put 'put ''NDQ2NzMsNDQ2NzQsNDQ2NzUsNDQ2NzgsNDQ2NzksNDQ2ODAsNDQ2ODEsNDQ2ODIsNDQ2ODMsNDQ2ODUsNDQ2ODYsNDQ2ODcsNDQ2ODgsNDQ2ODksNDQ2OTAsNDQ2OTEsNDQ2OTIsNDQ2OTMsNDQ2OTQsNDQ2OTUsNDQ2OTYsNDQ2OTcsNDQ2OTgsNDQ2OTksNDQ3MDAsNDQ3MDEsNDQ3MDIsNDQ3''@;'; put 'put ''MDMsNDQ3MDQsNDQ3MDUsNDQ3MDYsNDQ3MDcsNDQ3MDgsNDQ3MDksNDQ3MTAsNDQ3MTEsNDQ3MTIsNDQ3MTMsNDQ3MTQsNDQ3MTUsNDQ3MTYsNDQ3MTcsNDQ3MTgsNDQ3MTksNDQ3MjAsNDQ3MjEsNDQ3MjIsNDQ3MjMsNDQ3MjQsNDQ3MjUsNDQ3MjYsNDQ3MjcsNDQ3MjgsNDQ3MjksNDQ3MzAs''@;'; put 'put ''NDQ3MzEsNDQ3MzUsNDQ3MzcsNDQ3MzgsNDQ3MzksNDQ3NDEsNDQ3NDIsNDQ3NDMsNDQ3NDQsNDQ3NDUsNDQ3NDYsNDQ3NDcsNDQ3NTAsNDQ3NTQsNDQ3NTUsNDQ3NTYsNDQ3NTcsNDQ3NTgsNDQ3NTksNDQ3NjIsNDQ3NjMsNDQ3NjUsNDQ3NjYsNDQ3NjcsNDQ3NjgsNDQ3NjksNDQ3NzAsNDQ3''@;'; put 'put ''NzEsNDQ3NzIsNDQ3NzMsNDQ3NzQsNDQ3NzUsNDQ3NzcsNDQ3NzgsNDQ3ODAsNDQ3ODIsNDQ3ODMsNDQ3ODQsNDQ3ODUsNDQ3ODYsNDQ3ODcsNDQ3ODksNDQ3OTAsNDQ3OTEsNDQ3OTMsNDQ3OTQsNDQ3OTUsNDQ3OTcsNDQ3OTgsNDQ3OTksNDQ4MDAsNDQ4MDEsNDQ4MDIsNDQ4MDMsNDQ4MDQs''@;'; put 'put ''NDQ4MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MDYsNDQ4MDksNDQ4MTAsNDQ4MTEsNDQ4MTIsNDQ4MTQsNDQ4MTUsNDQ4MTcsNDQ4MTgsNDQ4MTksNDQ4MjAsNDQ4MjEsNDQ4MjIsNDQ4MjMsNDQ4MjQsNDQ4MjUsNDQ4MjYsNDQ4MjcsNDQ4MjgsNDQ4MjksNDQ4MzAsNDQ4''@;'; put 'put ''MzEsNDQ4MzIsNDQ4MzMsNDQ4MzQsNDQ4MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MzYsNDQ4MzcsNDQ4MzgsNDQ4MzksNDQ4NDAsNDQ4NDEsNDQ4NDIsNDQ4NDMsNDQ4NDYsNDQ4NDcsNDQ4NDksNDQ4NTEsNDQ4NTMsNDQ4NTQsNDQ4NTUsNDQ4NTYsNDQ4NTcsNDQ4NTgs''@;'; put 'put ''NDQ4NTksNDQ4NjIsNDQ4NjQsNDQ4NjgsNDQ4NjksNDQ4NzAsNDQ4NzEsNDQ4NzQsNDQ4NzUsNDQ4NzYsNDQ4NzcsNDQ4NzgsNDQ4NzksNDQ4ODEsNDQ4ODIsNDQ4ODMsNDQ4ODQsNDQ4ODUsNDQ4ODYsNDQ4ODcsNDQ4ODgsNDQ4ODksNDQ4OTAsNDQ4OTEsNDQ4OTQsNDQ4OTUsNDQ4OTYsNDQ4''@;'; put 'put ''OTcsNDQ4OTgsNDQ4OTksNDQ5MDIsNDQ5MDMsNDQ5MDQsNDQ5MDUsNDQ5MDYsNDQ5MDcsNDQ5MDgsNDQ5MDksNDQ5MTAsNDQ5MTEsNDQ5MTIsNDQ5MTMsNDQ5MTQsNDQ5MTUsNDQ5MTYsNDQ5MTcsNDQ5MTgsNDQ5MTksNDQ5MjAsNDQ5MjIsNDQ5MjMsNDQ5MjQsNDQ5MjUsNDQ5MjYsNDQ5Mjcs''@;'; put 'put ''NDQ5MjksNDQ5MzAsNDQ5MzEsNDQ5MzMsNDQ5MzQsNDQ5MzUsNDQ5MzcsNDQ5MzgsNDQ5MzksNDQ5NDAsNDQ5NDEsNDQ5NDIsNDQ5NDMsNDQ5NDYsNDQ5NDcsNDQ5NDgsNDQ5NTAsNDQ5NTEsNDQ5NTIsNDQ5NTMsNDQ5NTQsNDQ5NTUsNDQ5NTcsNDQ5NTgsNDQ5NTksNDQ5NjAsNDQ5NjEsNDQ5''@;'; put 'put ''NjIsNDQ5NjMsNDQ5NjQsNDQ5NjUsNDQ5NjYsNDQ5NjcsNDQ5NjgsNDQ5NjksNDQ5NzAsNDQ5NzEsNDQ5NzIsNDQ5NzMsNDQ5NzQsNDQ5NzUsNDQ5NzYsNDQ5NzcsNDQ5NzgsNDQ5NzksNDQ5ODAsNDQ5ODEsNDQ5ODIsNDQ5ODMsNDQ5ODYsNDQ5ODcsNDQ5ODksNDQ5OTAsNDQ5OTEsNDQ5OTMs''@;'; put 'put ''NDQ5OTQsNDQ5OTUsNDQ5OTYsNDQ5OTcsNDQ5OTgsNDUwMDIsNDUwMDQsNDUwMDcsNDUwMDgsNDUwMDksNDUwMTAsNDUwMTEsNDUwMTMsNDUwMTQsNDUwMTUsNDUwMTYsNDUwMTcsNDUwMTgsNDUwMTksNDUwMjEsNDUwMjIsNDUwMjMsNDUwMjQsNDUwMjUsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNDUwMjYsNDUwMjcsNDUwMjgsNDUwMjksNDUwMzAsNDUwMzEsNDUwMzQsNDUwMzUsNDUwMzYsNDUwMzcsNDUwMzgsNDUwMzksNDUwNDIsNDUwNDMsNDUwNDUsNDUwNDYsNDUwNDcsNDUwNDksNDUwNTAsNDUwNTEsNDUwNTIsNDUwNTMsNDUwNTQsNDUwNTUsNDUwNTgsNDUwNTks''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwNjEsNDUwNjIsNDUwNjMsNDUwNjQsNDUwNjUsNDUwNjYsNDUwNjcsNDUwNjksNDUwNzAsNDUwNzEsNDUwNzMsNDUwNzQsNDUwNzUsNDUwNzcsNDUwNzgsNDUwNzksNDUwODAsNDUwODEsNDUwODIsNDUwODMsNDUwODYsNDUwODcsNDUw''@;'; put 'put ''ODgsNDUwODksNDUwOTAsNDUwOTEsNDUwOTIsNDUwOTMsNDUwOTQsNDUwOTUsNDUwOTcsNDUwOTgsNDUwOTksNDUxMDAsNDUxMDEsNDUxMDIsNDUxMDMsNDUxMDQsNDUxMDUsNDUxMDYsNDUxMDcsNDUxMDgsNDUxMDksNDUxMTAsNDUxMTEsNDUxMTIsNDUxMTMsNDUxMTQsNDUxMTUsNDUxMTYs''@;'; put 'put ''NDUxMTcsNDUxMTgsNDUxMTksNDUxMjAsNDUxMjEsNDUxMjIsNDUxMjMsNDUxMjYsNDUxMjcsNDUxMjksNDUxMzEsNDUxMzMsNDUxMzUsNDUxMzYsNDUxMzcsNDUxMzgsNDUxNDIsNDUxNDQsNDUxNDYsNDUxNDcsNDUxNDgsNDUxNTAsNDUxNTEsNDUxNTIsNDUxNTMsNDUxNTQsNDUxNTUsNDUx''@;'; put 'put ''NTYsNDUxNTcsNDUxNTgsNDUxNTksNDUxNjAsNDUxNjEsNDUxNjIsNDUxNjMsNDUxNjQsNDUxNjUsNDUxNjYsNDUxNjcsNDUxNjgsNDUxNjksNDUxNzAsNDUxNzEsNDUxNzIsNDUxNzMsNDUxNzQsNDUxNzUsNDUxNzYsNDUxNzcsNDUxNzgsNDUxNzksNDUxODIsNDUxODMsNDUxODUsNDUxODYs''@;'; put 'put ''NDUxODcsNDUxODksNDUxOTAsNDUxOTEsNDUxOTIsNDUxOTMsNDUxOTQsNDUxOTUsNDUxOTgsNDUyMDAsNDUyMDIsNDUyMDMsNDUyMDQsNDUyMDUsNDUyMDYsNDUyMDcsNDUyMTEsNDUyMTMsNDUyMTQsNDUyMTksNDUyMjAsNDUyMjEsNDUyMjIsNDUyMjMsNDUyMjYsNDUyMzIsNDUyMzQsNDUy''@;'; put 'put ''MzgsNDUyMzksNDUyNDEsNDUyNDIsNDUyNDMsNDUyNDUsNDUyNDYsNDUyNDcsNDUyNDgsNDUyNDksNDUyNTAsNDUyNTEsNDUyNTQsNDUyNTgsNDUyNTksNDUyNjAsNDUyNjEsNDUyNjIsNDUyNjMsNDUyNjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyNjcsNDUyNjksNDUyNzAs''@;'; put 'put ''NDUyNzEsNDUyNzMsNDUyNzQsNDUyNzUsNDUyNzYsNDUyNzcsNDUyNzgsNDUyNzksNDUyODEsNDUyODIsNDUyODMsNDUyODQsNDUyODYsNDUyODcsNDUyODgsNDUyODksNDUyOTAsNDUyOTEsNDUyOTIsNDUyOTMsNDUyOTQsNDUyOTUsNDUyOTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDUyOTcsNDUyOTgsNDUyOTksNDUzMDAsNDUzMDEsNDUzMDIsNDUzMDMsNDUzMDQsNDUzMDUsNDUzMDYsNDUzMDcsNDUzMDgsNDUzMDksNDUzMTAsNDUzMTEsNDUzMTIsNDUzMTMsNDUzMTQsNDUzMTUsNDUzMTYsNDUzMTcsNDUzMTgsNDUzMTksNDUzMjIsNDUzMjUsNDUzMjYsNDUzMjcs''@;'; put 'put ''NDUzMjksNDUzMzIsNDUzMzMsNDUzMzQsNDUzMzUsNDUzMzgsNDUzNDIsNDUzNDMsNDUzNDQsNDUzNDUsNDUzNDYsNDUzNTAsNDUzNTEsNDUzNTMsNDUzNTQsNDUzNTUsNDUzNTcsNDUzNTgsNDUzNTksNDUzNjAsNDUzNjEsNDUzNjIsNDUzNjMsNDUzNjYsNDUzNzAsNDUzNzEsNDUzNzIsNDUz''@;'; put 'put ''NzMsNDUzNzQsNDUzNzUsNDUzNzgsNDUzNzksNDUzODEsNDUzODIsNDUzODMsNDUzODUsNDUzODYsNDUzODcsNDUzODgsNDUzODksNDUzOTAsNDUzOTEsNDUzOTQsNDUzOTUsNDUzOTgsNDUzOTksNDU0MDEsNDU0MDIsNDU0MDMsNDU0MDUsNDU0MDYsNDU0MDcsNDU0MDksNDU0MTAsNDU0MTEs''@;'; put 'put ''NDU0MTIsNDU0MTMsNDU0MTQsNDU0MTUsNDU0MTYsNDU0MTcsNDU0MTgsNDU0MTksNDU0MjAsNDU0MjEsNDU0MjIsNDU0MjMsNDU0MjQsNDU0MjUsNDU0MjYsNDU0MjcsNDU0MjgsNDU0MjksNDU0MzAsNDU0MzEsNDU0MzQsNDU0MzUsNDU0MzcsNDU0MzgsNDU0MzksNDU0NDEsNDU0NDMsNDU0''@;'; put 'put ''NDQsNDU0NDUsNDU0NDYsNDU0NDcsNDU0NTAsNDU0NTIsNDU0NTQsNDU0NTUsNDU0NTYsNDU0NTcsNDU0NjEsNDU0NjIsNDU0NjMsNDU0NjUsNDU0NjYsNDU0NjcsNDU0NjksNDU0NzAsNDU0NzEsNDU0NzIsNDU0NzMsNDU0NzQsNDU0NzUsNDU0NzYsNDU0NzcsNDU0NzgsNDU0NzksNDU0ODEs''@;'; put 'put ''NDU0ODIsNDU0ODMsNDU0ODQsNDU0ODUsNDU0ODYsNDU0ODcsNDU0ODgsNDU0ODksNDU0OTAsNDU0OTEsNDU0OTIsNDU0OTMsNDU0OTQsNDU0OTUsNDU0OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU0OTcsNDU0OTgsNDU0OTksNDU1MDAsNDU1MDEsNDU1MDIsNDU1MDMsNDU1''@;'; put 'put ''MDQsNDU1MDUsNDU1MDYsNDU1MDcsNDU1MDgsNDU1MDksNDU1MTAsNDU1MTEsNDU1MTIsNDU1MTMsNDU1MTQsNDU1MTUsNDU1MTcsNDU1MTgsNDU1MTksNDU1MjEsNDU1MjIsNDU1MjMsNDU1MjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU1MjYsNDU1MjcsNDU1MjgsNDU1Mjks''@;'; put 'put ''NDU1MzAsNDU1MzEsNDU1MzQsNDU1MzYsNDU1MzcsNDU1MzgsNDU1MzksNDU1NDAsNDU1NDEsNDU1NDIsNDU1NDMsNDU1NDYsNDU1NDcsNDU1NDksNDU1NTAsNDU1NTEsNDU1NTMsNDU1NTQsNDU1NTUsNDU1NTYsNDU1NTcsNDU1NTgsNDU1NTksNDU1NjAsNDU1NjIsNDU1NjQsNDU1NjYsNDU1''@;'; put 'put ''NjcsNDU1NjgsNDU1NjksNDU1NzAsNDU1NzEsNDU1NzQsNDU1NzUsNDU1NzcsNDU1NzgsNDU1ODEsNDU1ODIsNDU1ODMsNDU1ODQsNDU1ODUsNDU1ODYsNDU1ODcsNDU1OTAsNDU1OTIsNDU1OTQsNDU1OTUsNDU1OTYsNDU1OTcsNDU1OTgsNDU1OTksNDU2MDEsNDU2MDIsNDU2MDMsNDU2MDQs''@;'; put 'put ''NDU2MDUsNDU2MDYsNDU2MDcsNDU2MDgsNDU2MDksNDU2MTAsNDU2MTEsNDU2MTIsNDU2MTMsNDU2MTQsNDU2MTUsNDU2MTYsNDU2MTcsNDU2MTgsNDU2MTksNDU2MjEsNDU2MjIsNDU2MjMsNDU2MjQsNDU2MjUsNDU2MjYsNDU2MjcsNDU2MjksNDU2MzAsNDU2MzEsNDU2MzIsNDU2MzMsNDU2''@;'; put 'put ''MzQsNDU2MzUsNDU2MzYsNDU2MzcsNDU2MzgsNDU2MzksNDU2NDAsNDU2NDEsNDU2NDIsNDU2NDMsNDU2NDQsNDU2NDUsNDU2NDYsNDU2NDcsNDU2NDgsNDU2NDksNDU2NTAsNDU2NTEsNDU2NTIsNDU2NTMsNDU2NTQsNDU2NTUsNDU2NTcsNDU2NTgsNDU2NTksNDU2NjEsNDU2NjIsNDU2NjMs''@;'; put 'put ''NDU2NjUsNDU2NjYsNDU2NjcsNDU2NjgsNDU2NjksNDU2NzAsNDU2NzEsNDU2NzQsNDU2NzUsNDU2NzYsNDU2NzcsNDU2NzgsNDU2NzksNDU2ODAsNDU2ODEsNDU2ODIsNDU2ODMsNDU2ODYsNDU2ODcsNDU2ODgsNDU2ODksNDU2OTAsNDU2OTEsNDU2OTMsNDU2OTQsNDU2OTUsNDU2OTYsNDU2''@;'; put 'put ''OTcsNDU2OTgsNDU2OTksNDU3MDIsNDU3MDMsNDU3MDQsNDU3MDYsNDU3MDcsNDU3MDgsNDU3MDksNDU3MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3MTEsNDU3MTQsNDU3MTUsNDU3MTcsNDU3MTgsNDU3MTksNDU3MjMsNDU3MjQsNDU3MjUsNDU3MjYsNDU3MjcsNDU3MzAs''@;'; put 'put ''NDU3MzIsNDU3MzUsNDU3MzYsNDU3MzcsNDU3MzksNDU3NDEsNDU3NDIsNDU3NDMsNDU3NDUsNDU3NDYsNDU3NDcsNDU3NDksNDU3NTAsNDU3NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3NTIsNDU3NTMsNDU3NTQsNDU3NTUsNDU3NTYsNDU3NTcsNDU3NTgsNDU3NTksNDU3''@;'; put 'put ''NjAsNDU3NjEsNDU3NjIsNDU3NjMsNDU3NjQsNDU3NjUsNDU3NjYsNDU3NjcsNDU3NzAsNDU3NzEsNDU3NzMsNDU3NzQsNDU3NzUsNDU3NzcsNDU3NzksNDU3ODAsNDU3ODEsNDU3ODIsNDU3ODMsNDU3ODYsNDU3ODgsNDU3OTAsNDU3OTEsNDU3OTIsNDU3OTMsNDU3OTUsNDU3OTksNDU4MDEs''@;'; put 'put ''NDU4MDIsNDU4MDgsNDU4MDksNDU4MTAsNDU4MTQsNDU4MjAsNDU4MjEsNDU4MjIsNDU4MjYsNDU4MjcsNDU4MjksNDU4MzAsNDU4MzEsNDU4MzMsNDU4MzQsNDU4MzUsNDU4MzYsNDU4MzcsNDU4MzgsNDU4MzksNDU4NDIsNDU4NDYsNDU4NDcsNDU4NDgsNDU4NDksNDU4NTAsNDU4NTEsNDU4''@;'; put 'put ''NTMsNDU4NTQsNDU4NTUsNDU4NTYsNDU4NTcsNDU4NTgsNDU4NTksNDU4NjAsNDU4NjEsNDU4NjIsNDU4NjMsNDU4NjQsNDU4NjUsNDU4NjYsNDU4NjcsNDU4NjgsNDU4NjksNDU4NzAsNDU4NzEsNDU4NzIsNDU4NzMsNDU4NzQsNDU4NzUsNDU4NzYsNDU4NzcsNDU4NzgsNDU4NzksNDU4ODAs''@;'; put 'put ''NDU4ODEsNDU4ODIsNDU4ODMsNDU4ODQsNDU4ODUsNDU4ODYsNDU4ODcsNDU4ODgsNDU4ODksNDU4OTAsNDU4OTEsNDU4OTIsNDU4OTMsNDU4OTQsNDU4OTUsNDU4OTYsNDU4OTcsNDU4OTgsNDU4OTksNDU5MDAsNDU5MDEsNDU5MDIsNDU5MDMsNDU5MDQsNDU5MDUsNDU5MDYsNDU5MDcsNDU5''@;'; put 'put ''MTEsNDU5MTMsNDU5MTQsNDU5MTcsNDU5MjAsNDU5MjEsNDU5MjIsNDU5MjMsNDU5MjYsNDU5MjgsNDU5MzAsNDU5MzIsNDU5MzMsNDU5MzUsNDU5MzgsNDU5MzksNDU5NDEsNDU5NDIsNDU5NDMsNDU5NDUsNDU5NDYsNDU5NDcsNDU5NDgsNDU5NDksNDU5NTAsNDU5NTEsNDU5NTQsNDU5NTgs''@;'; put 'put ''NDU5NTksNDU5NjAsNDU5NjEsNDU5NjIsNDU5NjMsNDU5NjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5NjYsNDU5NjcsNDU5NjksNDU5NzAsNDU5NzEsNDU5NzMsNDU5NzQsNDU5NzUsNDU5NzYsNDU5NzcsNDU5NzgsNDU5NzksNDU5ODAsNDU5ODEsNDU5ODIsNDU5ODMsNDU5''@;'; put 'put ''ODYsNDU5ODcsNDU5ODgsNDU5ODksNDU5OTAsNDU5OTEsNDU5OTMsNDU5OTQsNDU5OTUsNDU5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5OTgsNDU5OTksNDZlMyw0NjAwMSw0NjAwMiw0NjAwMyw0NjAwNCw0NjAwNSw0NjAwNiw0NjAwNyw0NjAwOCw0NjAwOSw0NjAxMCw0''@;'; put 'put ''NjAxMSw0NjAxMiw0NjAxMyw0NjAxNCw0NjAxNSw0NjAxNiw0NjAxNyw0NjAxOCw0NjAxOSw0NjAyMiw0NjAyMyw0NjAyNSw0NjAyNiw0NjAyOSw0NjAzMSw0NjAzMyw0NjAzNCw0NjAzNSw0NjAzOCw0NjA0MCw0NjA0Miw0NjA0NCw0NjA0Niw0NjA0Nyw0NjA0OSw0NjA1MCw0NjA1MSw0NjA1''@;'; put 'put ''Myw0NjA1NCw0NjA1NSw0NjA1Nyw0NjA1OCw0NjA1OSw0NjA2MCw0NjA2MSw0NjA2Miw0NjA2Myw0NjA2NCw0NjA2NSw0NjA2Niw0NjA2Nyw0NjA2OCw0NjA2OSw0NjA3MCw0NjA3MSw0NjA3Miw0NjA3Myw0NjA3NCw0NjA3NSw0NjA3Nyw0NjA3OCw0NjA3OSw0NjA4MCw0NjA4MSw0NjA4Miw0''@;'; put 'put ''NjA4Myw0NjA4NCw0NjA4NSw0NjA4Niw0NjA4Nyw0NjA4OCw0NjA4OSw0NjA5MCw0NjA5MSw0NjA5Miw0NjA5Myw0NjA5NCw0NjA5NSw0NjA5Nyw0NjA5OCw0NjA5OSw0NjEwMCw0NjEwMSw0NjEwMiw0NjEwMyw0NjEwNSw0NjEwNiw0NjEwNyw0NjEwOSw0NjExMCw0NjExMSw0NjExMyw0NjEx''@;'; put 'put ''NCw0NjExNSw0NjExNiw0NjExNyw0NjExOCw0NjExOSw0NjEyMiw0NjEyNCw0NjEyNSw0NjEyNiw0NjEyNyw0NjEyOCw0NjEyOSw0NjEzMCw0NjEzMSw0NjEzMyw0NjEzNCw0NjEzNSw0NjEzNiw0NjEzNyw0NjEzOCw0NjEzOSw0NjE0MCw0NjE0MSw0NjE0Miw0NjE0Myw0NjE0NCw0NjE0NSw0''@;'; put 'put ''NjE0Niw0NjE0Nyw0NjE0OCw0NjE0OSw0NjE1MCw0NjE1MSw0NjE1Miw0NjE1Myw0NjE1NCw0NjE1NSw0NjE1Niw0NjE1Nyw0NjE1OCw0NjE1OSw0NjE2Miw0NjE2Myw0NjE2NSw0NjE2Niw0NjE2Nyw0NjE2OSw0NjE3MCw0NjE3MSw0NjE3Miw0NjE3Myw0NjE3NCw0NjE3NSw0NjE3OCw0NjE4''@;'; put 'put ''MCw0NjE4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjE4Myw0NjE4NCw0NjE4NSw0NjE4Niw0NjE4Nyw0NjE4OSw0NjE5MCw0NjE5MSw0NjE5Miw0NjE5Myw0NjE5NCw0NjE5NSw0NjE5Niw0NjE5Nyw0NjE5OCw0NjE5OSw0NjIwMCw0NjIwMSw0NjIwMiw0NjIwMyw0NjIwNCw0''@;'; put 'put ''NjIwNSw0NjIwNiw0NjIwNyw0NjIwOSw0NjIxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjIxMSw0NjIxMiw0NjIxMyw0NjIxNCw0NjIxNSw0NjIxNyw0NjIxOCw0NjIxOSw0NjIyMCw0NjIyMSw0NjIyMiw0NjIyMyw0NjIyNCw0NjIyNSw0NjIyNiw0NjIyNyw0NjIyOCw0NjIy''@;'; put 'put ''OSw0NjIzMCw0NjIzMSw0NjIzMiw0NjIzMyw0NjIzNCw0NjIzNSw0NjIzNiw0NjIzOCw0NjIzOSw0NjI0MCw0NjI0MSw0NjI0Miw0NjI0Myw0NjI0NSw0NjI0Niw0NjI0Nyw0NjI0OSw0NjI1MCw0NjI1MSw0NjI1Myw0NjI1NCw0NjI1NSw0NjI1Niw0NjI1Nyw0NjI1OCw0NjI1OSw0NjI2MCw0''@;'; put 'put ''NjI2Miw0NjI2NCw0NjI2Niw0NjI2Nyw0NjI2OCw0NjI2OSw0NjI3MCw0NjI3MSw0NjI3Myw0NjI3NCw0NjI3NSw0NjI3Nyw0NjI3OCw0NjI3OSw0NjI4MSw0NjI4Miw0NjI4Myw0NjI4NCw0NjI4NSw0NjI4Niw0NjI4Nyw0NjI4OSw0NjI5MCw0NjI5MSw0NjI5Miw0NjI5NCw0NjI5NSw0NjI5''@;'; put 'put ''Niw0NjI5Nyw0NjI5OCw0NjI5OSw0NjMwMiw0NjMwMyw0NjMwNSw0NjMwNiw0NjMwOSw0NjMxMSw0NjMxMiw0NjMxMyw0NjMxNCw0NjMxNSw0NjMxOCw0NjMyMCw0NjMyMiw0NjMyMyw0NjMyNCw0NjMyNSw0NjMyNiw0NjMyNyw0NjMyOSw0NjMzMCw0NjMzMSw0NjMzMiw0NjMzMyw0NjMzNCw0''@;'; put 'put ''NjMzNSw0NjMzNiw0NjMzNyw0NjMzOCw0NjMzOSw0NjM0MCw0NjM0MSw0NjM0Miw0NjM0Myw0NjM0NCw0NjM0NSw0NjM0Niw0NjM0Nyw0NjM0OCw0NjM0OSw0NjM1MCw0NjM1MSw0NjM1Miw0NjM1Myw0NjM1NCw0NjM1NSw0NjM1OCw0NjM1OSw0NjM2MSw0NjM2Miw0NjM2NSw0NjM2Niw0NjM2''@;'; put 'put ''Nyw0NjM2OCw0NjM2OSw0NjM3MCw0NjM3MSw0NjM3NCw0NjM3OSw0NjM4MCw0NjM4MSw0NjM4Miw0NjM4Myw0NjM4Niw0NjM4Nyw0NjM4OSw0NjM5MCw0NjM5MSw0NjM5Myw0NjM5NCw0NjM5NSw0NjM5Niw0NjM5Nyw0NjM5OCw0NjM5OSw0NjQwMiw0NjQwNixudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw0NjQwNyw0NjQwOCw0NjQwOSw0NjQxMCw0NjQxNCw0NjQxNSw0NjQxNyw0NjQxOCw0NjQxOSw0NjQyMSw0NjQyMiw0NjQyMyw0NjQyNCw0NjQyNSw0NjQyNiw0NjQyNyw0NjQzMCw0NjQzNCw0NjQzNSw0NjQzNiw0NjQzNyw0NjQzOCw0NjQzOSw0NjQ0MCw0NjQ0MSw0NjQ0''@;'; put 'put ''MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjQ0Myw0NjQ0NCw0NjQ0NSw0NjQ0Niw0NjQ0Nyw0NjQ0OCw0NjQ0OSw0NjQ1MCw0NjQ1MSw0NjQ1Miw0NjQ1Myw0NjQ1NCw0NjQ1NSw0NjQ1Niw0NjQ1Nyw0NjQ1OCw0NjQ1OSw0NjQ2MCw0NjQ2MSw0NjQ2Miw0NjQ2Myw0NjQ2NCw0''@;'; put 'put ''NjQ2NSw0NjQ2Niw0NjQ2Nyw0NjQ2OCw0NjQ2OSw0NjQ3MCw0NjQ3MSw0NjQ3Miw0NjQ3Myw0NjQ3NCw0NjQ3NSw0NjQ3Niw0NjQ3Nyw0NjQ3OCw0NjQ3OSw0NjQ4MCw0NjQ4MSw0NjQ4Miw0NjQ4Myw0NjQ4NCw0NjQ4NSw0NjQ4Niw0NjQ4Nyw0NjQ4OCw0NjQ4OSw0NjQ5MCw0NjQ5MSw0NjQ5''@;'; put 'put ''Miw0NjQ5Myw0NjQ5NCw0NjQ5NSw0NjQ5OCw0NjQ5OSw0NjUwMSw0NjUwMiw0NjUwMyw0NjUwNSw0NjUwOCw0NjUwOSw0NjUxMCw0NjUxMSw0NjUxNCw0NjUxOCw0NjUxOSw0NjUyMCw0NjUyMSw0NjUyMiw0NjUyNiw0NjUyNyw0NjUyOSw0NjUzMCw0NjUzMSw0NjUzMyw0NjUzNCw0NjUzNSw0''@;'; put 'put ''NjUzNiw0NjUzNyw0NjUzOCw0NjUzOSw0NjU0Miw0NjU0Niw0NjU0Nyw0NjU0OCw0NjU0OSw0NjU1MCw0NjU1MSw0NjU1Myw0NjU1NCw0NjU1NSw0NjU1Niw0NjU1Nyw0NjU1OCw0NjU1OSw0NjU2MCw0NjU2MSw0NjU2Miw0NjU2Myw0NjU2NCw0NjU2NSw0NjU2Niw0NjU2Nyw0NjU2OCw0NjU2''@;'; put 'put ''OSw0NjU3MCw0NjU3MSw0NjU3Myw0NjU3NCw0NjU3NSw0NjU3Niw0NjU3Nyw0NjU3OCw0NjU3OSw0NjU4MCw0NjU4MSw0NjU4Miw0NjU4Myw0NjU4NCw0NjU4NSw0NjU4Niw0NjU4Nyw0NjU4OCw0NjU4OSw0NjU5MCw0NjU5MSw0NjU5Miw0NjU5Myw0NjU5NCw0NjU5NSw0NjU5Niw0NjU5Nyw0''@;'; put 'put ''NjU5OCw0NjU5OSw0NjYwMCw0NjYwMSw0NjYwMiw0NjYwMyw0NjYwNCw0NjYwNSw0NjYwNiw0NjYwNyw0NjYxMCw0NjYxMSw0NjYxMyw0NjYxNCw0NjYxNSw0NjYxNyw0NjYxOCw0NjYxOSw0NjYyMCw0NjYyMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjYyMiw0NjYyMyw0NjYy''@;'; put 'put ''NCw0NjYyNSw0NjYyNiw0NjYyNyw0NjYyOCw0NjYzMCw0NjYzMSw0NjYzMiw0NjYzMyw0NjYzNCw0NjYzNSw0NjYzNyw0NjYzOCw0NjYzOSw0NjY0MCw0NjY0MSw0NjY0Miw0NjY0Myw0NjY0NSw0NjY0Niw0NjY0Nyw0NjY0OCw0NjY0OSw0NjY1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw0NjY1MSw0NjY1Miw0NjY1Myw0NjY1NCw0NjY1NSw0NjY1Niw0NjY1Nyw0NjY1OCw0NjY1OSw0NjY2MCw0NjY2MSw0NjY2Miw0NjY2Myw0NjY2NSw0NjY2Niw0NjY2Nyw0NjY2OCw0NjY2OSw0NjY3MCw0NjY3MSw0NjY3Miw0NjY3Myw0NjY3NCw0NjY3NSw0NjY3Niw0NjY3Nyw0NjY3''@;'; put 'put ''OCw0NjY3OSw0NjY4MCw0NjY4MSw0NjY4Miw0NjY4Myw0NjY4NCw0NjY4NSw0NjY4Niw0NjY4Nyw0NjY4OCw0NjY4OSw0NjY5MCw0NjY5MSw0NjY5Myw0NjY5NCw0NjY5NSw0NjY5Nyw0NjY5OCw0NjY5OSw0NjcwMCw0NjcwMSw0NjcwMiw0NjcwMyw0NjcwNCw0NjcwNSw0NjcwNiw0NjcwNyw0''@;'; put 'put ''NjcwOCw0NjcwOSw0NjcxMCw0NjcxMSw0NjcxMiw0NjcxMyw0NjcxNCw0NjcxNSw0NjcxNiw0NjcxNyw0NjcxOCw0NjcxOSw0NjcyMCw0NjcyMSw0NjcyMiw0NjcyMyw0NjcyNCw0NjcyNSw0NjcyNiw0NjcyNyw0NjcyOCw0NjcyOSw0NjczMCw0NjczMSw0NjczMiw0NjczMyw0NjczNCw0Njcz''@;'; put 'put ''NSw0NjczNiw0NjczNyw0NjczOCw0NjczOSw0Njc0MCw0Njc0MSw0Njc0Miw0Njc0Myw0Njc0NCw0Njc0NSw0Njc0Niw0Njc0Nyw0Njc1MCw0Njc1MSw0Njc1Myw0Njc1NCw0Njc1NSw0Njc1Nyw0Njc1OCw0Njc1OSw0Njc2MCw0Njc2MSw0Njc2Miw0Njc2NSw0Njc2Niw0Njc2Nyw0Njc2OCw0''@;'; put 'put ''Njc3MCw0Njc3MSw0Njc3Miw0Njc3Myw0Njc3NCw0Njc3NSw0Njc3Niw0Njc3Nyw0Njc3OCw0Njc3OSw0Njc4MCw0Njc4MSw0Njc4Miw0Njc4Myw0Njc4NCw0Njc4NSw0Njc4Niw0Njc4Nyw0Njc4OCw0Njc4OSw0Njc5MCw0Njc5MSw0Njc5Miw0Njc5Myw0Njc5NCw0Njc5NSw0Njc5Niw0Njc5''@;'; put 'put ''Nyw0Njc5OCw0Njc5OSw0NjgwMCw0NjgwMSw0NjgwMiw0NjgwMyw0NjgwNSw0NjgwNiw0NjgwNyw0NjgwOCw0NjgwOSw0NjgxMCw0NjgxMSw0NjgxMiw0NjgxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjgxNCw0NjgxNSw0NjgxNiw0NjgxNyw0NjgxOCw0NjgxOSw0NjgyMCw0''@;'; put 'put ''NjgyMSw0NjgyMiw0NjgyMyw0NjgyNCw0NjgyNSw0NjgyNiw0NjgyNyw0NjgyOCw0NjgyOSw0NjgzMCw0NjgzMSw0NjgzMyw0NjgzNCw0NjgzNSw0NjgzNyw0NjgzOCw0NjgzOSw0Njg0MSw0Njg0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Njg0Myw0Njg0NCw0Njg0NSw0Njg0''@;'; put 'put ''Niw0Njg0Nyw0Njg1MCw0Njg1MSw0Njg1Miw0Njg1NCw0Njg1NSw0Njg1Niw0Njg1Nyw0Njg1OCw0Njg1OSw0Njg2MCw0Njg2MSw0Njg2Miw0Njg2Myw0Njg2NCw0Njg2NSw0Njg2Niw0Njg2Nyw0Njg2OCw0Njg2OSw0Njg3MCw0Njg3MSw0Njg3Miw0Njg3Myw0Njg3NCw0Njg3NSw0Njg3Niw0''@;'; put 'put ''Njg3Nyw0Njg3OCw0Njg3OSw0Njg4MCw0Njg4MSw0Njg4Miw0Njg4Myw0Njg4NCw0Njg4NSw0Njg4Niw0Njg4Nyw0Njg5MCw0Njg5MSw0Njg5Myw0Njg5NCw0Njg5Nyw0Njg5OCw0Njg5OSw0NjkwMCw0NjkwMSw0NjkwMiw0NjkwMyw0NjkwNiw0NjkwOCw0NjkwOSw0NjkxMCw0NjkxMSw0Njkx''@;'; put 'put ''Miw0NjkxMyw0NjkxNCw0NjkxNSw0NjkxNyw0NjkxOCw0NjkxOSw0NjkyMSw0NjkyMiw0NjkyMyw0NjkyNSw0NjkyNiw0NjkyNyw0NjkyOCw0NjkyOSw0NjkzMCw0NjkzMSw0NjkzNCw0NjkzNSw0NjkzNiw0NjkzNyw0NjkzOCw0NjkzOSw0Njk0MCw0Njk0MSw0Njk0Miw0Njk0Myw0Njk0NSw0''@;'; put 'put ''Njk0Niw0Njk0Nyw0Njk0OSw0Njk1MCw0Njk1MSw0Njk1Myw0Njk1NCw0Njk1NSw0Njk1Niw0Njk1Nyw0Njk1OCw0Njk1OSw0Njk2Miw0Njk2NCw0Njk2Niw0Njk2Nyw0Njk2OCw0Njk2OSw0Njk3MCw0Njk3MSw0Njk3NCw0Njk3NSw0Njk3Nyw0Njk3OCw0Njk3OSw0Njk4MSw0Njk4Miw0Njk4''@;'; put 'put ''Myw0Njk4NCw0Njk4NSw0Njk4Niw0Njk4Nyw0Njk5MCw0Njk5NSw0Njk5Niw0Njk5Nyw0NzAwMiw0NzAwMyw0NzAwNSw0NzAwNiw0NzAwNyw0NzAwOSw0NzAxMCw0NzAxMSw0NzAxMiw0NzAxMyw0NzAxNCw0NzAxNSw0NzAxOCw0NzAyMiw0NzAyMyw0NzAyNCw0NzAyNSw0NzAyNiw0NzAyNyw0''@;'; put 'put ''NzAzMCw0NzAzMSw0NzAzMyw0NzAzNCw0NzAzNSw0NzAzNiw0NzAzNyw0NzAzOCw0NzAzOSw0NzA0MCw0NzA0MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzA0Miw0NzA0Myw0NzA0NCw0NzA0NSw0NzA0Niw0NzA0OCw0NzA1MCw0NzA1MSw0NzA1Miw0NzA1Myw0NzA1NCw0NzA1''@;'; put 'put ''NSw0NzA1Niw0NzA1Nyw0NzA1OCw0NzA1OSw0NzA2MCw0NzA2MSw0NzA2Miw0NzA2Myw0NzA2NCw0NzA2NSw0NzA2Niw0NzA2Nyw0NzA2OCw0NzA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzA3MCw0NzA3MSw0NzA3Miw0NzA3Myw0NzA3NCw0NzA3NSw0NzA3Niw0NzA3Nyw0''@;'; put 'put ''NzA3OCw0NzA3OSw0NzA4MCw0NzA4MSw0NzA4Miw0NzA4Myw0NzA4Niw0NzA4Nyw0NzA4OSw0NzA5MCw0NzA5MSw0NzA5Myw0NzA5NCw0NzA5NSw0NzA5Niw0NzA5Nyw0NzA5OCw0NzA5OSw0NzEwMiw0NzEwNiw0NzEwNyw0NzEwOCw0NzEwOSw0NzExMCw0NzExNCw0NzExNSw0NzExNyw0NzEx''@;'; put 'put ''OCw0NzExOSw0NzEyMSw0NzEyMiw0NzEyMyw0NzEyNCw0NzEyNSw0NzEyNiw0NzEyNyw0NzEzMCw0NzEzMiw0NzEzNCw0NzEzNSw0NzEzNiw0NzEzNyw0NzEzOCw0NzEzOSw0NzE0Miw0NzE0Myw0NzE0NSw0NzE0Niw0NzE0Nyw0NzE0OSw0NzE1MCw0NzE1MSw0NzE1Miw0NzE1Myw0NzE1NCw0''@;'; put 'put ''NzE1NSw0NzE1OCw0NzE2Miw0NzE2Myw0NzE2NCw0NzE2NSw0NzE2Niw0NzE2Nyw0NzE2OSw0NzE3MCw0NzE3MSw0NzE3Myw0NzE3NCw0NzE3NSw0NzE3Niw0NzE3Nyw0NzE3OCw0NzE3OSw0NzE4MCw0NzE4MSw0NzE4Miw0NzE4Myw0NzE4NCw0NzE4Niw0NzE4OCw0NzE4OSw0NzE5MCw0NzE5''@;'; put 'put ''MSw0NzE5Miw0NzE5Myw0NzE5NCw0NzE5NSw0NzE5OCw0NzE5OSw0NzIwMSw0NzIwMiw0NzIwMyw0NzIwNSw0NzIwNiw0NzIwNyw0NzIwOCw0NzIwOSw0NzIxMCw0NzIxMSw0NzIxNCw0NzIxNiw0NzIxOCw0NzIxOSw0NzIyMCw0NzIyMSw0NzIyMiw0NzIyMyw0NzIyNSw0NzIyNiw0NzIyNyw0''@;'; put 'put ''NzIyOSw0NzIzMCw0NzIzMSw0NzIzMiw0NzIzMyw0NzIzNCw0NzIzNSw0NzIzNiw0NzIzNyw0NzIzOCw0NzIzOSw0NzI0MCw0NzI0MSw0NzI0Miw0NzI0Myw0NzI0NCw0NzI0Niw0NzI0Nyw0NzI0OCw0NzI0OSw0NzI1MCw0NzI1MSw0NzI1Miw0NzI1Myw0NzI1NCw0NzI1NSw0NzI1Niw0NzI1''@;'; put 'put ''Nyw0NzI1OCw0NzI1OSw0NzI2MCw0NzI2MSw0NzI2Miw0NzI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzI2NCw0NzI2NSw0NzI2Niw0NzI2Nyw0NzI2OCw0NzI2OSw0NzI3MCw0NzI3MSw0NzI3Myw0NzI3NCw0NzI3NSw0NzI3Niw0NzI3Nyw0NzI3OCw0NzI3OSw0NzI4MSw0''@;'; put 'put ''NzI4Miw0NzI4Myw0NzI4NSw0NzI4Niw0NzI4Nyw0NzI4OSw0NzI5MCw0NzI5MSw0NzI5Miw0NzI5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzI5NCw0NzI5NSw0NzI5OCw0NzMwMCw0NzMwMiw0NzMwMyw0NzMwNCw0NzMwNSw0NzMwNiw0NzMwNyw0NzMwOSw0NzMxMCw0NzMx''@;'; put 'put ''MSw0NzMxMyw0NzMxNCw0NzMxNSw0NzMxNyw0NzMxOCw0NzMxOSw0NzMyMCw0NzMyMSw0NzMyMiw0NzMyMyw0NzMyNCw0NzMyNiw0NzMyOCw0NzMzMCw0NzMzMSw0NzMzMiw0NzMzMyw0NzMzNCw0NzMzNSw0NzMzOCw0NzMzOSw0NzM0MSw0NzM0Miw0NzM0Myw0NzM0NSw0NzM0Niw0NzM0Nyw0''@;'; put 'put ''NzM0OCw0NzM0OSw0NzM1MCw0NzM1MSw0NzM1NCw0NzM1Niw0NzM1OCw0NzM1OSw0NzM2MCw0NzM2MSw0NzM2Miw0NzM2Myw0NzM2NSw0NzM2Niw0NzM2Nyw0NzM2OCw0NzM2OSw0NzM3MCw0NzM3MSw0NzM3Miw0NzM3Myw0NzM3NCw0NzM3NSw0NzM3Niw0NzM3Nyw0NzM3OCw0NzM3OSw0NzM4''@;'; put 'put ''MCw0NzM4MSw0NzM4Miw0NzM4Myw0NzM4NSw0NzM4Niw0NzM4Nyw0NzM4OCw0NzM4OSw0NzM5MCw0NzM5MSw0NzM5Myw0NzM5NCw0NzM5NSw0NzM5Niw0NzM5Nyw0NzM5OCw0NzM5OSw0NzQwMCw0NzQwMSw0NzQwMiw0NzQwMyw0NzQwNCw0NzQwNSw0NzQwNiw0NzQwNyw0NzQwOCw0NzQwOSw0''@;'; put 'put ''NzQxMCw0NzQxMSw0NzQxMiw0NzQxMyw0NzQxNCw0NzQxNSw0NzQxNiw0NzQxNyw0NzQxOCw0NzQxOSw0NzQyMiw0NzQyMyw0NzQyNSw0NzQyNiw0NzQyNyw0NzQyOSw0NzQzMCw0NzQzMSw0NzQzMiw0NzQzMyw0NzQzNCw0NzQzNSw0NzQzNyw0NzQzOCw0NzQ0MCw0NzQ0Miw0NzQ0Myw0NzQ0''@;'; put 'put ''NCw0NzQ0NSw0NzQ0Niw0NzQ0Nyw0NzQ1MCw0NzQ1MSw0NzQ1Myw0NzQ1NCw0NzQ1NSw0NzQ1Nyw0NzQ1OCw0NzQ1OSw0NzQ2MCw0NzQ2MSw0NzQ2Miw0NzQ2Myw0NzQ2Niw0NzQ2OCw0NzQ3MCw0NzQ3MSw0NzQ3Miw0NzQ3Myw0NzQ3NCw0NzQ3NSw0NzQ3OCw0NzQ3OSw0NzQ4MSw0NzQ4Miw0''@;'; put 'put ''NzQ4Myw0NzQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzQ4Niw0NzQ4Nyw0NzQ4OCw0NzQ4OSw0NzQ5MCw0NzQ5MSw0NzQ5NCw0NzQ5Niw0NzQ5OSw0NzUwMCw0NzUwMyw0NzUwNCw0NzUwNSw0NzUwNiw0NzUwNyw0NzUwOCw0NzUwOSw0NzUxMCw0NzUxMSw0NzUxMiw0NzUx''@;'; put 'put ''Myw0NzUxNCw0NzUxNSw0NzUxNiw0NzUxNyw0NzUxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzUxOSw0NzUyMCw0NzUyMSw0NzUyMiw0NzUyMyw0NzUyNCw0NzUyNSw0NzUyNiw0NzUyNyw0NzUyOCw0NzUyOSw0NzUzMCw0NzUzMSw0NzUzNCw0NzUzNSw0NzUzNyw0NzUzOCw0''@;'; put 'put ''NzUzOSw0NzU0MSw0NzU0Miw0NzU0Myw0NzU0NCw0NzU0NSw0NzU0Niw0NzU0Nyw0NzU1MCw0NzU1Miw0NzU1NCw0NzU1NSw0NzU1Niw0NzU1Nyw0NzU1OCw0NzU1OSw0NzU2Miw0NzU2Myw0NzU2NSw0NzU3MSw0NzU3Miw0NzU3Myw0NzU3NCw0NzU3NSw0NzU3OCw0NzU4MCw0NzU4Myw0NzU4''@;'; put 'put ''NCw0NzU4Niw0NzU5MCw0NzU5MSw0NzU5Myw0NzU5NCw0NzU5NSw0NzU5Nyw0NzU5OCw0NzU5OSw0NzYwMCw0NzYwMSw0NzYwMiw0NzYwMyw0NzYwNiw0NzYxMSw0NzYxMiw0NzYxMyw0NzYxNCw0NzYxNSw0NzYxOCw0NzYxOSw0NzYyMCw0NzYyMSw0NzYyMiw0NzYyMyw0NzYyNSw0NzYyNiw0''@;'; put 'put ''NzYyNyw0NzYyOCw0NzYyOSw0NzYzMCw0NzYzMSw0NzYzMiw0NzYzMyw0NzYzNCw0NzYzNSw0NzYzNiw0NzYzOCw0NzYzOSw0NzY0MCw0NzY0MSw0NzY0Miw0NzY0Myw0NzY0NCw0NzY0NSw0NzY0Niw0NzY0Nyw0NzY0OCw0NzY0OSw0NzY1MCw0NzY1MSw0NzY1Miw0NzY1Myw0NzY1NCw0NzY1''@;'; put 'put ''NSw0NzY1Niw0NzY1Nyw0NzY1OCw0NzY1OSw0NzY2MCw0NzY2MSw0NzY2Miw0NzY2Myw0NzY2NCw0NzY2NSw0NzY2Niw0NzY2Nyw0NzY2OCw0NzY2OSw0NzY3MCw0NzY3MSw0NzY3NCw0NzY3NSw0NzY3Nyw0NzY3OCw0NzY3OSw0NzY4MSw0NzY4Myw0NzY4NCw0NzY4NSw0NzY4Niw0NzY4Nyw0''@;'; put 'put ''NzY5MCw0NzY5Miw0NzY5NSw0NzY5Niw0NzY5Nyw0NzY5OCw0NzcwMiw0NzcwMyw0NzcwNSw0NzcwNiw0NzcwNyw0NzcwOSw0NzcxMCw0NzcxMSw0NzcxMiw0NzcxMyw0NzcxNCw0NzcxNSw0NzcxOCw0NzcyMiw0NzcyMyw0NzcyNCw0NzcyNSw0NzcyNiw0NzcyNyxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw0NzczMCw0NzczMSw0NzczMyw0NzczNCw0NzczNSw0NzczNyw0NzczOCw0NzczOSw0Nzc0MCw0Nzc0MSw0Nzc0Miw0Nzc0Myw0Nzc0NCw0Nzc0NSw0Nzc0Niw0Nzc1MCw0Nzc1Miw0Nzc1Myw0Nzc1NCw0Nzc1NSw0Nzc1Nyw0Nzc1OCw0Nzc1OSw0Nzc2MCw0Nzc2MSw0''@;'; put 'put ''Nzc2MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzc2Myw0Nzc2NCw0Nzc2NSw0Nzc2Niw0Nzc2Nyw0Nzc2OCw0Nzc2OSw0Nzc3MCw0Nzc3MSw0Nzc3Miw0Nzc3Myw0Nzc3NCw0Nzc3NSw0Nzc3Niw0Nzc3Nyw0Nzc3OCw0Nzc3OSw0Nzc4MCw0Nzc4MSw0Nzc4Miw0Nzc4Myw0Nzc4''@;'; put 'put ''Niw0Nzc4OSw0Nzc5MCw0Nzc5MSw0Nzc5Myw0Nzc5NSw0Nzc5Niw0Nzc5Nyw0Nzc5OCw0Nzc5OSw0NzgwMiw0NzgwNCw0NzgwNiw0NzgwNyw0NzgwOCw0NzgwOSw0NzgxMCw0NzgxMSw0NzgxMyw0NzgxNCw0NzgxNSw0NzgxNyw0NzgxOCw0NzgxOSw0NzgyMCw0NzgyMSw0NzgyMiw0NzgyMyw0''@;'; put 'put ''NzgyNCw0NzgyNSw0NzgyNiw0NzgyNyw0NzgyOCw0NzgyOSw0NzgzMCw0NzgzMSw0NzgzNCw0NzgzNSw0NzgzNiw0NzgzNyw0NzgzOCw0NzgzOSw0Nzg0MCw0Nzg0MSw0Nzg0Miw0Nzg0Myw0Nzg0NCw0Nzg0NSw0Nzg0Niw0Nzg0Nyw0Nzg0OCw0Nzg0OSw0Nzg1MCw0Nzg1MSw0Nzg1Miw0Nzg1''@;'; put 'put ''Myw0Nzg1NCw0Nzg1NSw0Nzg1Niw0Nzg1Nyw0Nzg1OCw0Nzg1OSw0Nzg2MCw0Nzg2MSw0Nzg2Miw0Nzg2Myw0Nzg2NCw0Nzg2NSw0Nzg2Niw0Nzg2Nyw0Nzg2OSw0Nzg3MCw0Nzg3MSw0Nzg3Myw0Nzg3NCw0Nzg3NSw0Nzg3Nyw0Nzg3OCw0Nzg3OSw0Nzg4MCw0Nzg4MSw0Nzg4Miw0Nzg4Myw0''@;'; put 'put ''Nzg4NCw0Nzg4Niw0Nzg4OCw0Nzg5MCw0Nzg5MSw0Nzg5Miw0Nzg5Myw0Nzg5NCw0Nzg5NSw0Nzg5Nyw0Nzg5OCw0Nzg5OSw0NzkwMSw0NzkwMiw0NzkwMyw0NzkwNSw0NzkwNiw0NzkwNyw0NzkwOCw0NzkwOSw0NzkxMCw0NzkxMSw0NzkxMiw0NzkxNCw0NzkxNiw0NzkxNyw0NzkxOCw0Nzkx''@;'; put 'put ''OSw0NzkyMCw0NzkyMSw0NzkyMiw0NzkyMyw0NzkyNyw0NzkyOSw0NzkzMCw0NzkzNSw0NzkzNiw0NzkzNyw0NzkzOCw0NzkzOSw0Nzk0Miw0Nzk0NCw0Nzk0Niw0Nzk0Nyw0Nzk0OCw0Nzk1MCw0Nzk1Myw0Nzk1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzk1NSw0Nzk1Nyw0''@;'; put 'put ''Nzk1OCw0Nzk1OSw0Nzk2MSw0Nzk2Miw0Nzk2Myw0Nzk2NCw0Nzk2NSw0Nzk2Niw0Nzk2Nyw0Nzk2OCw0Nzk3MCw0Nzk3Miw0Nzk3Myw0Nzk3NCw0Nzk3NSw0Nzk3Niw0Nzk3Nyw0Nzk3OCw0Nzk3OSw0Nzk4MSw0Nzk4Miw0Nzk4Myw0Nzk4NCw0Nzk4NSxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw0Nzk4Niw0Nzk4Nyw0Nzk4OCw0Nzk4OSw0Nzk5MCw0Nzk5MSw0Nzk5Miw0Nzk5Myw0Nzk5NCw0Nzk5NSw0Nzk5Niw0Nzk5Nyw0Nzk5OCw0Nzk5OSw0OGUzLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4''@;'; put 'put ''MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1''@;'; put 'put ''LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4''@;'; put 'put ''MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAwLDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3''@;'; put 'put ''LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4''@;'; put 'put ''MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5''@;'; put 'put ''LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4''@;'; put 'put ''MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQyLDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5''@;'; put 'put ''LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4''@;'; put 'put ''MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEyLDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIxLDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5''@;'; put 'put ''LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4''@;'; put 'put ''MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4MzgzLDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4MzkyLDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAx''@;'; put 'put ''LDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4''@;'; put 'put ''NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQyLDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUw''@;'; put 'put ''LDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4''@;'; put 'put ''NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAwLDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1''@;'; put 'put ''LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4''@;'; put 'put ''NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcyLDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1''@;'; put 'put ''LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4''@;'; put 'put ''NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2''@;'; put 'put ''LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4''@;'; put 'put ''Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4NjkwLDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAz''@;'; put 'put ''LDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4''@;'; put 'put ''NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4NzcwLDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5''@;'; put 'put ''LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4''@;'; put 'put ''ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQwLDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3''@;'; put 'put ''LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4''@;'; put 'put ''ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAz''@;'; put 'put ''LDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4''@;'; put 'put ''OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUyLDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5''@;'; put 'put ''LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5''@;'; put 'put ''ZTMsNDkwMDEsNDkwMDIsNDkwMDMsNDkwMDQsNDkwMDUsNDkwMDYsNDkwMDcsNDkwMDgsNDkwMDksNDkwMTAsNDkwMTEsNDkwMTIsNDkwMTMsNDkwMTQsNDkwMTUsNDkwMTYsNDkwMTcsNDkwMTgsNDkwMTksNDkwMjAsNDkwMjEsNDkwMjIsNDkwMjMsNDkwMjQsNDkwMjUsNDkwMjYsNDkwMjcs''@;'; put 'put ''NDkwMjgsNDkwMjksNDkwMzAsNDkwMzEsNDkwMzIsNDkwMzMsNDkwMzQsNDkwMzUsNDkwMzYsNDkwMzcsNDkwMzgsNDkwMzksNDkwNDAsNDkwNDEsNDkwNDIsNDkwNDMsNDkwNDUsNDkwNDYsNDkwNDcsNDkwNDgsNDkwNDksNDkwNTAsNDkwNTEsNDkwNTIsNDkwNTMsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNDkwNTQsNDkwNTUsNDkwNTYsNDkwNTcsNDkwNTgsNDkwNTksNDkwNjAsNDkwNjEsNDkwNjIsNDkwNjMsNDkwNjQsNDkwNjUsNDkwNjYsNDkwNjcsNDkwNjgsNDkwNjksNDkwNzAsNDkwNzEsNDkwNzMsNDkwNzQsNDkwNzUsNDkwNzYsNDkwNzcsNDkwNzgsNDkwNzks''@;'; put 'put ''NDkwODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwODEsNDkwODIsNDkwODMsNDkwODQsNDkwODUsNDkwODYsNDkwODcsNDkwODgsNDkwODksNDkwOTAsNDkwOTEsNDkwOTIsNDkwOTQsNDkwOTUsNDkwOTYsNDkwOTcsNDkwOTgsNDkwOTksNDkxMDIsNDkxMDMsNDkxMDUsNDkx''@;'; put 'put ''MDYsNDkxMDcsNDkxMDksNDkxMTAsNDkxMTEsNDkxMTIsNDkxMTMsNDkxMTQsNDkxMTUsNDkxMTcsNDkxMTgsNDkxMjAsNDkxMjIsNDkxMjMsNDkxMjQsNDkxMjUsNDkxMjYsNDkxMjcsNDkxMjgsNDkxMjksNDkxMzAsNDkxMzEsNDkxMzIsNDkxMzMsNDkxMzQsNDkxMzUsNDkxMzYsNDkxMzcs''@;'; put 'put ''NDkxMzgsNDkxMzksNDkxNDAsNDkxNDEsNDkxNDIsNDkxNDMsNDkxNDQsNDkxNDUsNDkxNDYsNDkxNDcsNDkxNDgsNDkxNDksNDkxNTAsNDkxNTEsNDkxNTIsNDkxNTMsNDkxNTQsNDkxNTUsNDkxNTYsNDkxNTcsNDkxNTgsNDkxNTksNDkxNjAsNDkxNjEsNDkxNjIsNDkxNjMsNDkxNjQsNDkx''@;'; put 'put ''NjUsNDkxNjYsNDkxNjcsNDkxNjgsNDkxNjksNDkxNzAsNDkxNzEsNDkxNzIsNDkxNzMsNDkxNzQsNDkxNzUsNDkxNzYsNDkxNzcsNDkxNzgsNDkxNzksNDkxODAsNDkxODEsNDkxODIsNDkxODMsNDkxODQsNDkxODUsNDkxODYsNDkxODcsNDkxODgsNDkxODksNDkxOTAsNDkxOTEsNDkxOTIs''@;'; put 'put ''NDkxOTMsNDkxOTQsNDkxOTUsNDkxOTYsNDkxOTcsNDkxOTgsNDkxOTksNDkyMDAsNDkyMDEsNDkyMDIsNDkyMDMsNDkyMDQsNDkyMDUsNDkyMDYsNDkyMDcsNDkyMDgsNDkyMDksNDkyMTAsNDkyMTEsNDkyMTMsNDkyMTQsNDkyMTUsNDkyMTYsNDkyMTcsNDkyMTgsNDkyMTksNDkyMjAsNDky''@;'; put 'put ''MjEsNDkyMjIsNDkyMjMsNDkyMjQsNDkyMjUsNDkyMjYsNDkyMjcsNDkyMjgsNDkyMjksNDkyMzAsNDkyMzEsNDkyMzIsNDkyMzQsNDkyMzUsNDkyMzYsNDkyMzcsNDkyMzgsNDkyMzksNDkyNDEsNDkyNDIsNDkyNDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNDUsNDkyNDYs''@;'; put 'put ''NDkyNDcsNDkyNDksNDkyNTAsNDkyNTEsNDkyNTIsNDkyNTMsNDkyNTQsNDkyNTUsNDkyNTgsNDkyNTksNDkyNjAsNDkyNjEsNDkyNjIsNDkyNjMsNDkyNjQsNDkyNjUsNDkyNjYsNDkyNjcsNDkyNjgsNDkyNjksNDkyNzAsNDkyNzEsNDkyNzIsNDkyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNDkyNzQsNDkyNzUsNDkyNzYsNDkyNzcsNDkyNzgsNDkyNzksNDkyODAsNDkyODEsNDkyODIsNDkyODMsNDkyODQsNDkyODUsNDkyODYsNDkyODcsNDkyODgsNDkyODksNDkyOTAsNDkyOTEsNDkyOTIsNDkyOTMsNDkyOTQsNDkyOTUsNDkyOTgsNDkyOTksNDkzMDEsNDkzMDIs''@;'; put 'put ''NDkzMDMsNDkzMDUsNDkzMDYsNDkzMDcsNDkzMDgsNDkzMDksNDkzMTAsNDkzMTEsNDkzMTQsNDkzMTYsNDkzMTgsNDkzMTksNDkzMjAsNDkzMjEsNDkzMjIsNDkzMjMsNDkzMjYsNDkzMjksNDkzMzAsNDkzMzUsNDkzMzYsNDkzMzcsNDkzMzgsNDkzMzksNDkzNDIsNDkzNDYsNDkzNDcsNDkz''@;'; put 'put ''NDgsNDkzNTAsNDkzNTEsNDkzNTQsNDkzNTUsNDkzNTcsNDkzNTgsNDkzNTksNDkzNjEsNDkzNjIsNDkzNjMsNDkzNjQsNDkzNjUsNDkzNjYsNDkzNjcsNDkzNzAsNDkzNzQsNDkzNzUsNDkzNzYsNDkzNzcsNDkzNzgsNDkzNzksNDkzODIsNDkzODMsNDkzODUsNDkzODYsNDkzODcsNDkzODks''@;'; put 'put ''NDkzOTAsNDkzOTEsNDkzOTIsNDkzOTMsNDkzOTQsNDkzOTUsNDkzOTgsNDk0MDAsNDk0MDIsNDk0MDMsNDk0MDQsNDk0MDUsNDk0MDYsNDk0MDcsNDk0MDksNDk0MTAsNDk0MTEsNDk0MTMsNDk0MTQsNDk0MTUsNDk0MTcsNDk0MTgsNDk0MTksNDk0MjAsNDk0MjEsNDk0MjIsNDk0MjMsNDk0''@;'; put 'put ''MjUsNDk0MjYsNDk0MjcsNDk0MjgsNDk0MzAsNDk0MzEsNDk0MzIsNDk0MzMsNDk0MzQsNDk0MzUsNDk0NDEsNDk0NDIsNDk0NDUsNDk0NDgsNDk0NDksNDk0NTAsNDk0NTEsNDk0NTQsNDk0NTgsNDk0NTksNDk0NjAsNDk0NjEsNDk0NjMsNDk0NjYsNDk0NjcsNDk0NjksNDk0NzAsNDk0NzEs''@;'; put 'put ''NDk0NzMsNDk0NzQsNDk0NzUsNDk0NzYsNDk0NzcsNDk0NzgsNDk0NzksNDk0ODIsNDk0ODYsNDk0ODcsNDk0ODgsNDk0ODksNDk0OTAsNDk0OTEsNDk0OTQsNDk0OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk0OTcsNDk0OTgsNDk0OTksNDk1MDEsNDk1MDIsNDk1MDMsNDk1''@;'; put 'put ''MDQsNDk1MDUsNDk1MDYsNDk1MDcsNDk1MTAsNDk1MTQsNDk1MTUsNDk1MTYsNDk1MTcsNDk1MTgsNDk1MTksNDk1MjEsNDk1MjIsNDk1MjMsNDk1MjUsNDk1MjYsNDk1MjcsNDk1MjksNDk1MzAsNDk1MzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk1MzIsNDk1MzMsNDk1MzQs''@;'; put 'put ''NDk1MzUsNDk1MzYsNDk1MzcsNDk1MzgsNDk1MzksNDk1NDAsNDk1NDIsNDk1NDMsNDk1NDQsNDk1NDUsNDk1NDYsNDk1NDcsNDk1NTEsNDk1NTMsNDk1NTQsNDk1NTUsNDk1NTcsNDk1NTksNDk1NjAsNDk1NjEsNDk1NjIsNDk1NjMsNDk1NjYsNDk1NjgsNDk1NzAsNDk1NzEsNDk1NzIsNDk1''@;'; put 'put ''NzQsNDk1NzUsNDk1NzgsNDk1NzksNDk1ODEsNDk1ODIsNDk1ODMsNDk1ODUsNDk1ODYsNDk1ODcsNDk1ODgsNDk1ODksNDk1OTAsNDk1OTEsNDk1OTIsNDk1OTMsNDk1OTQsNDk1OTUsNDk1OTYsNDk1OTgsNDk1OTksNDk2MDAsNDk2MDEsNDk2MDIsNDk2MDMsNDk2MDUsNDk2MDYsNDk2MDcs''@;'; put 'put ''NDk2MDksNDk2MTAsNDk2MTEsNDk2MTMsNDk2MTQsNDk2MTUsNDk2MTYsNDk2MTcsNDk2MTgsNDk2MTksNDk2MjEsNDk2MjIsNDk2MjUsNDk2MjYsNDk2MjcsNDk2MjgsNDk2MjksNDk2MzAsNDk2MzEsNDk2MzMsNDk2MzQsNDk2MzUsNDk2MzcsNDk2MzgsNDk2MzksNDk2NDEsNDk2NDIsNDk2''@;'; put 'put ''NDMsNDk2NDQsNDk2NDUsNDk2NDYsNDk2NDcsNDk2NTAsNDk2NTIsNDk2NTMsNDk2NTQsNDk2NTUsNDk2NTYsNDk2NTcsNDk2NTgsNDk2NTksNDk2NjIsNDk2NjMsNDk2NjUsNDk2NjYsNDk2NjcsNDk2NjksNDk2NzAsNDk2NzEsNDk2NzIsNDk2NzMsNDk2NzQsNDk2NzUsNDk2NzgsNDk2ODAs''@;'; put 'put ''NDk2ODIsNDk2ODMsNDk2ODQsNDk2ODUsNDk2ODYsNDk2ODcsNDk2OTAsNDk2OTEsNDk2OTMsNDk2OTQsNDk2OTcsNDk2OTgsNDk2OTksNDk3MDAsNDk3MDEsNDk3MDIsNDk3MDMsNDk3MDYsNDk3MDgsNDk3MTAsNDk3MTIsNDk3MTUsNDk3MTcsNDk3MTgsNDk3MTksNDk3MjAsNDk3MjEsNDk3''@;'; put 'put ''MjIsNDk3MjMsNDk3MjQsNDk3MjUsNDk3MjYsNDk3MjcsNDk3MjgsNDk3MjksNDk3MzAsNDk3MzEsNDk3MzIsNDk3MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3MzQsNDk3MzUsNDk3MzcsNDk3MzgsNDk3MzksNDk3NDAsNDk3NDEsNDk3NDIsNDk3NDMsNDk3NDYsNDk3NDcs''@;'; put 'put ''NDk3NDksNDk3NTAsNDk3NTEsNDk3NTMsNDk3NTQsNDk3NTUsNDk3NTYsNDk3NTcsNDk3NTgsNDk3NTksNDk3NjEsNDk3NjIsNDk3NjMsNDk3NjQsNDk3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3NjcsNDk3NjgsNDk3NjksNDk3NzAsNDk3NzEsNDk3NzQsNDk3NzUsNDk3''@;'; put 'put ''NzcsNDk3NzgsNDk3NzksNDk3ODEsNDk3ODIsNDk3ODMsNDk3ODQsNDk3ODUsNDk3ODYsNDk3ODcsNDk3OTAsNDk3OTIsNDk3OTQsNDk3OTUsNDk3OTYsNDk3OTcsNDk3OTgsNDk3OTksNDk4MDIsNDk4MDMsNDk4MDQsNDk4MDUsNDk4MDYsNDk4MDcsNDk4MDksNDk4MTAsNDk4MTEsNDk4MTIs''@;'; put 'put ''NDk4MTMsNDk4MTQsNDk4MTUsNDk4MTcsNDk4MTgsNDk4MjAsNDk4MjIsNDk4MjMsNDk4MjQsNDk4MjUsNDk4MjYsNDk4MjcsNDk4MzAsNDk4MzEsNDk4MzMsNDk4MzQsNDk4MzUsNDk4MzgsNDk4MzksNDk4NDAsNDk4NDEsNDk4NDIsNDk4NDMsNDk4NDYsNDk4NDgsNDk4NTAsNDk4NTEsNDk4''@;'; put 'put ''NTIsNDk4NTMsNDk4NTQsNDk4NTUsNDk4NTYsNDk4NTcsNDk4NTgsNDk4NTksNDk4NjAsNDk4NjEsNDk4NjIsNDk4NjMsNDk4NjQsNDk4NjUsNDk4NjYsNDk4NjcsNDk4NjgsNDk4NjksNDk4NzAsNDk4NzEsNDk4NzIsNDk4NzMsNDk4NzQsNDk4NzUsNDk4NzYsNDk4NzcsNDk4NzgsNDk4Nzks''@;'; put 'put ''NDk4ODAsNDk4ODEsNDk4ODIsNDk4ODMsNDk4ODYsNDk4ODcsNDk4ODksNDk4OTAsNDk4OTMsNDk4OTQsNDk4OTUsNDk4OTYsNDk4OTcsNDk4OTgsNDk5MDIsNDk5MDQsNDk5MDYsNDk5MDcsNDk5MDgsNDk5MDksNDk5MTEsNDk5MTQsNDk5MTcsNDk5MTgsNDk5MTksNDk5MjEsNDk5MjIsNDk5''@;'; put 'put ''MjMsNDk5MjQsNDk5MjUsNDk5MjYsNDk5MjcsNDk5MzAsNDk5MzEsNDk5MzQsNDk5MzUsNDk5MzYsNDk5MzcsNDk5MzgsNDk5NDIsNDk5NDMsNDk5NDUsNDk5NDYsNDk5NDcsNDk5NDksNDk5NTAsNDk5NTEsNDk5NTIsNDk5NTMsNDk5NTQsNDk5NTUsNDk5NTgsNDk5NTksNDk5NjIsNDk5NjMs''@;'; put 'put ''NDk5NjQsNDk5NjUsNDk5NjYsNDk5NjcsNDk5NjgsNDk5NjksNDk5NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5NzEsNDk5NzIsNDk5NzMsNDk5NzQsNDk5NzUsNDk5NzYsNDk5NzcsNDk5NzgsNDk5NzksNDk5ODAsNDk5ODEsNDk5ODIsNDk5ODMsNDk5ODQsNDk5ODUsNDk5''@;'; put 'put ''ODYsNDk5ODcsNDk5ODgsNDk5OTAsNDk5OTEsNDk5OTIsNDk5OTMsNDk5OTQsNDk5OTUsNDk5OTYsNDk5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5OTgsNDk5OTksNWU0LDUwMDAxLDUwMDAyLDUwMDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUw''@;'; put 'put ''MDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2''@;'; put 'put ''LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUwMDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUwMDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUw''@;'; put 'put ''MDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkxLDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0''@;'; put 'put ''LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUwMTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUwMTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUw''@;'; put 'put ''MTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYyLDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcy''@;'; put 'put ''LDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUwMTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUwMTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUw''@;'; put 'put ''MTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEzLDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIx''@;'; put 'put ''LDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUwMjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUwMjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUw''@;'; put 'put ''MjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1''@;'; put 'put ''LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUwMzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUwMzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUw''@;'; put 'put ''MzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMzLDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2''@;'; put 'put ''LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUwMzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUwMzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkxLDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4''@;'; put 'put ''LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUwNDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUwNDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUw''@;'; put 'put ''NDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUzLDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYx''@;'; put 'put ''LDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUwNDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUwNDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUw''@;'; put 'put ''NDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2''@;'; put 'put ''LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUwNTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUwNTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUw''@;'; put 'put ''NTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4''@;'; put 'put ''LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUwNjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUwNjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgzLDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4''@;'; put 'put ''LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUwNzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUwNzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUw''@;'; put 'put ''NzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzky''@;'; put 'put ''LDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUwODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUwODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUw''@;'; put 'put ''ODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5''@;'; put 'put ''LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUwODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUw''@;'; put 'put ''OTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIzLDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMz''@;'; put 'put ''LDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUwOTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUwOTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUw''@;'; put 'put ''OTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkwLDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxZTMsNTEwMDEsNTEwMDIsNTEwMDMsNTEwMDYsNTEwMDcsNTEwMDksNTEwMTAsNTEwMTEs''@;'; put 'put ''NTEwMTMsNTEwMTQsNTEwMTUsNTEwMTYsNTEwMTcsNTEwMTksNTEwMjIsNTEwMjQsNTEwMzMsNTEwMzQsNTEwMzUsNTEwMzcsNTEwMzgsNTEwMzksNTEwNDEsNTEwNDIsNTEwNDMsNTEwNDQsNTEwNDUsNTEwNDYsNTEwNDcsNTEwNDksNTEwNTAsNTEwNTIsNTEwNTMsNTEwNTQsNTEwNTUsNTEw''@;'; put 'put ''NTYsNTEwNTcsNTEwNTgsNTEwNTksNTEwNjIsNTEwNjMsNTEwNjUsNTEwNjYsNTEwNjcsNTEwNzEsNTEwNzIsNTEwNzMsNTEwNzQsNTEwNzgsNTEwODMsNTEwODQsNTEwODUsNTEwODcsNTEwOTAsNTEwOTEsNTEwOTMsNTEwOTcsNTEwOTksNTExMDAsNTExMDEsNTExMDIsNTExMDMsNTExMDYs''@;'; put 'put ''NTExMTEsNTExMTIsNTExMTMsNTExMTQsNTExMTUsNTExMTgsNTExMTksNTExMjEsNTExMjIsNTExMjMsNTExMjUsNTExMjYsNTExMjcsNTExMjgsNTExMjksNTExMzAsNTExMzEsNTExMzQsNTExMzgsNTExMzksNTExNDAsNTExNDEsNTExNDIsNTExNDMsNTExNDYsNTExNDcsNTExNDksNTEx''@;'; put 'put ''NTEsNTExNTMsNTExNTQsNTExNTUsNTExNTYsNTExNTcsNTExNTgsNTExNTksNTExNjEsNTExNjIsNTExNjMsNTExNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExNjYsNTExNjcsNTExNjgsNTExNjksNTExNzAsNTExNzEsNTExNzMsNTExNzQsNTExNzUsNTExNzcsNTExNzgs''@;'; put 'put ''NTExNzksNTExODEsNTExODIsNTExODMsNTExODQsNTExODUsNTExODYsNTExODcsNTExODgsNTExODksNTExOTAsNTExOTEsNTExOTIsNTExOTMsNTExOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExOTUsNTExOTYsNTExOTcsNTExOTgsNTExOTksNTEyMDIsNTEyMDMsNTEy''@;'; put 'put ''MDUsNTEyMDYsNTEyMDcsNTEyMDksNTEyMTEsNTEyMTIsNTEyMTMsNTEyMTQsNTEyMTUsNTEyMTgsNTEyMjAsNTEyMjMsNTEyMjQsNTEyMjUsNTEyMjYsNTEyMjcsNTEyMzAsNTEyMzEsNTEyMzMsNTEyMzQsNTEyMzUsNTEyMzcsNTEyMzgsNTEyMzksNTEyNDAsNTEyNDEsNTEyNDIsNTEyNDMs''@;'; put 'put ''NTEyNDYsNTEyNDgsNTEyNTAsNTEyNTEsNTEyNTIsNTEyNTMsNTEyNTQsNTEyNTUsNTEyNTcsNTEyNTgsNTEyNTksNTEyNjEsNTEyNjIsNTEyNjMsNTEyNjUsNTEyNjYsNTEyNjcsNTEyNjgsNTEyNjksNTEyNzAsNTEyNzEsNTEyNzQsNTEyNzUsNTEyNzgsNTEyNzksNTEyODAsNTEyODEsNTEy''@;'; put 'put ''ODIsNTEyODMsNTEyODUsNTEyODYsNTEyODcsNTEyODgsNTEyODksNTEyOTAsNTEyOTEsNTEyOTIsNTEyOTMsNTEyOTQsNTEyOTUsNTEyOTYsNTEyOTcsNTEyOTgsNTEyOTksNTEzMDAsNTEzMDEsNTEzMDIsNTEzMDMsNTEzMDQsNTEzMDUsNTEzMDYsNTEzMDcsNTEzMDgsNTEzMDksNTEzMTAs''@;'; put 'put ''NTEzMTEsNTEzMTQsNTEzMTUsNTEzMTcsNTEzMTgsNTEzMTksNTEzMjEsNTEzMjMsNTEzMjQsNTEzMjUsNTEzMjYsNTEzMjcsNTEzMzAsNTEzMzIsNTEzMzYsNTEzMzcsNTEzMzgsNTEzNDIsNTEzNDMsNTEzNDQsNTEzNDUsNTEzNDYsNTEzNDcsNTEzNDksNTEzNTAsNTEzNTEsNTEzNTIsNTEz''@;'; put 'put ''NTMsNTEzNTQsNTEzNTUsNTEzNTYsNTEzNTgsNTEzNjAsNTEzNjIsNTEzNjMsNTEzNjQsNTEzNjUsNTEzNjYsNTEzNjcsNTEzNjksNTEzNzAsNTEzNzEsNTEzNzIsNTEzNzMsNTEzNzQsNTEzNzUsNTEzNzYsNTEzNzcsNTEzNzgsNTEzNzksNTEzODAsNTEzODEsNTEzODIsNTEzODMsNTEzODQs''@;'; put 'put ''NTEzODUsNTEzODYsNTEzODcsNTEzOTAsNTEzOTEsNTEzOTIsNTEzOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEzOTQsNTEzOTUsNTEzOTcsNTEzOTgsNTEzOTksNTE0MDEsNTE0MDIsNTE0MDMsNTE0MDUsNTE0MDYsNTE0MDcsNTE0MDgsNTE0MDksNTE0MTAsNTE0MTEsNTE0''@;'; put 'put ''MTQsNTE0MTYsNTE0MTgsNTE0MTksNTE0MjAsNTE0MjEsNTE0MjIsNTE0MjMsNTE0MjYsNTE0MjcsNTE0MjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE0MzAsNTE0MzEsNTE0MzIsNTE0MzMsNTE0MzQsNTE0MzUsNTE0MzYsNTE0MzcsNTE0MzgsNTE0MzksNTE0NDAsNTE0NDEs''@;'; put 'put ''NTE0NDIsNTE0NDMsNTE0NDQsNTE0NDYsNTE0NDcsNTE0NDgsNTE0NDksNTE0NTAsNTE0NTEsNTE0NTQsNTE0NTUsNTE0NTcsNTE0NTgsNTE0NTksNTE0NjMsNTE0NjQsNTE0NjUsNTE0NjYsNTE0NjcsNTE0NzAsMTIyODgsMTIyODksMTIyOTAsMTgzLDgyMjksODIzMCwxNjgsMTIyOTEsMTcz''@;'; put 'put ''LDgyMTMsODc0MSw2NTM0MCw4NzY0LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsMTc3LDIxNSwyNDcsODgwMCw4ODA0LDg4MDUsODczNCw4NzU2LDE3Niw4MjQyLDgyNDMs''@;'; put 'put ''ODQ1MSw4NDkxLDY1NTA0LDY1NTA1LDY1NTA5LDk3OTQsOTc5Miw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDE2Nyw4MjUxLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODU5NCw4NTkyLDg1OTMsODU5''@;'; put 'put ''NSw4NTk2LDEyMzA3LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsODc0Myw4NzQ0LDY1NTA2LDUxNDcyLDUxNDc0LDUxNDc1LDUxNDc2LDUxNDc3LDUxNDc4LDUxNDc5LDUxNDgxLDUxNDgyLDUx''@;'; put 'put ''NDgzLDUxNDg0LDUxNDg1LDUxNDg2LDUxNDg3LDUxNDg4LDUxNDg5LDUxNDkwLDUxNDkxLDUxNDkyLDUxNDkzLDUxNDk0LDUxNDk1LDUxNDk2LDUxNDk3LDUxNDk4LDUxNDk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTAxLDUxNTAyLDUxNTAzLDUxNTA0LDUxNTA1LDUxNTA2''@;'; put 'put ''LDUxNTA3LDUxNTA5LDUxNTEwLDUxNTExLDUxNTEyLDUxNTEzLDUxNTE0LDUxNTE1LDUxNTE2LDUxNTE3LDUxNTE4LDUxNTE5LDUxNTIwLDUxNTIxLDUxNTIyLDUxNTIzLDUxNTI0LDUxNTI1LDUxNTI2LDUxNTI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTI4LDUxNTI5LDUx''@;'; put 'put ''NTMwLDUxNTMxLDUxNTMyLDUxNTMzLDUxNTM0LDUxNTM1LDUxNTM4LDUxNTM5LDUxNTQxLDUxNTQyLDUxNTQzLDUxNTQ1LDUxNTQ2LDUxNTQ3LDUxNTQ4LDUxNTQ5LDUxNTUwLDUxNTUxLDUxNTU0LDUxNTU2LDUxNTU3LDUxNTU4LDUxNTU5LDUxNTYwLDUxNTYxLDUxNTYyLDUxNTYzLDUxNTY1''@;'; put 'put ''LDUxNTY2LDUxNTY3LDg2NTgsODY2MCw4NzA0LDg3MDcsMTgwLDY1Mzc0LDcxMSw3MjgsNzMzLDczMCw3MjksMTg0LDczMSwxNjEsMTkxLDcyMCw4NzUwLDg3MjEsODcxOSwxNjQsODQ1Nyw4MjQwLDk2NjUsOTY2NCw5NjU1LDk2NTQsOTgyOCw5ODI0LDk4MjUsOTgyOSw5ODMxLDk4MjcsODg1''@;'; put 'put ''Nyw5NjcyLDk2MzUsOTY4MCw5NjgxLDk2MTgsOTYzNiw5NjM3LDk2NDAsOTYzOSw5NjM4LDk2NDEsOTgzMiw5NzQzLDk3NDIsOTc1Niw5NzU4LDE4Miw4MjI0LDgyMjUsODU5Nyw4NTk5LDg2MDEsODU5OCw4NjAwLDk4MzcsOTgzMyw5ODM0LDk4MzYsMTI5MjcsMTI4MjgsODQ3MCwxMzI1NSw4''@;'; put 'put ''NDgyLDEzMjUwLDEzMjcyLDg0ODEsODM2NCwxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTY5LDUxNTcwLDUxNTcxLDUx''@;'; put 'put ''NTczLDUxNTc0LDUxNTc1LDUxNTc2LDUxNTc3LDUxNTc4LDUxNTc5LDUxNTgxLDUxNTgyLDUxNTgzLDUxNTg0LDUxNTg1LDUxNTg2LDUxNTg3LDUxNTg4LDUxNTg5LDUxNTkwLDUxNTkxLDUxNTk0LDUxNTk1LDUxNTk3LDUxNTk4LDUxNTk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDUxNjAxLDUxNjAyLDUxNjAzLDUxNjA0LDUxNjA1LDUxNjA2LDUxNjA3LDUxNjEwLDUxNjEyLDUxNjE0LDUxNjE1LDUxNjE2LDUxNjE3LDUxNjE4LDUxNjE5LDUxNjIwLDUxNjIxLDUxNjIyLDUxNjIzLDUxNjI0LDUxNjI1LDUxNjI2LDUxNjI3LDUxNjI4LDUxNjI5LDUxNjMwLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjMxLDUxNjMyLDUxNjMzLDUxNjM0LDUxNjM1LDUxNjM2LDUxNjM3LDUxNjM4LDUxNjM5LDUxNjQwLDUxNjQxLDUxNjQyLDUxNjQzLDUxNjQ0LDUxNjQ1LDUxNjQ2LDUxNjQ3LDUxNjUwLDUxNjUxLDUxNjUzLDUxNjU0LDUxNjU3LDUxNjU5LDUxNjYw''@;'; put 'put ''LDUxNjYxLDUxNjYyLDUxNjYzLDUxNjY2LDUxNjY4LDUxNjcxLDUxNjcyLDUxNjc1LDY1MjgxLDY1MjgyLDY1MjgzLDY1Mjg0LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1''@;'; put 'put ''MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3''@;'; put 'put ''LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1NTEwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1''@;'; put 'put ''MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDUxNjc4LDUxNjc5LDUxNjgxLDUxNjgzLDUxNjg1LDUxNjg2LDUxNjg4LDUxNjg5''@;'; put 'put ''LDUxNjkwLDUxNjkxLDUxNjk0LDUxNjk4LDUxNjk5LDUxNzAwLDUxNzAxLDUxNzAyLDUxNzAzLDUxNzA2LDUxNzA3LDUxNzA5LDUxNzEwLDUxNzExLDUxNzEzLDUxNzE0LDUxNzE1LDUxNzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzE3LDUxNzE4LDUxNzE5LDUxNzIyLDUx''@;'; put 'put ''NzI2LDUxNzI3LDUxNzI4LDUxNzI5LDUxNzMwLDUxNzMxLDUxNzMzLDUxNzM0LDUxNzM1LDUxNzM3LDUxNzM4LDUxNzM5LDUxNzQwLDUxNzQxLDUxNzQyLDUxNzQzLDUxNzQ0LDUxNzQ1LDUxNzQ2LDUxNzQ3LDUxNzQ4LDUxNzQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzUw''@;'; put 'put ''LDUxNzUxLDUxNzUyLDUxNzU0LDUxNzU1LDUxNzU2LDUxNzU3LDUxNzU4LDUxNzU5LDUxNzYwLDUxNzYxLDUxNzYyLDUxNzYzLDUxNzY0LDUxNzY1LDUxNzY2LDUxNzY3LDUxNzY4LDUxNzY5LDUxNzcwLDUxNzcxLDUxNzcyLDUxNzczLDUxNzc0LDUxNzc1LDUxNzc2LDUxNzc3LDUxNzc4LDUx''@;'; put 'put ''Nzc5LDUxNzgwLDUxNzgxLDUxNzgyLDEyNTkzLDEyNTk0LDEyNTk1LDEyNTk2LDEyNTk3LDEyNTk4LDEyNTk5LDEyNjAwLDEyNjAxLDEyNjAyLDEyNjAzLDEyNjA0LDEyNjA1LDEyNjA2LDEyNjA3LDEyNjA4LDEyNjA5LDEyNjEwLDEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2''@;'; put 'put ''LDEyNjE3LDEyNjE4LDEyNjE5LDEyNjIwLDEyNjIxLDEyNjIyLDEyNjIzLDEyNjI0LDEyNjI1LDEyNjI2LDEyNjI3LDEyNjI4LDEyNjI5LDEyNjMwLDEyNjMxLDEyNjMyLDEyNjMzLDEyNjM0LDEyNjM1LDEyNjM2LDEyNjM3LDEyNjM4LDEyNjM5LDEyNjQwLDEyNjQxLDEyNjQyLDEyNjQzLDEy''@;'; put 'put ''NjQ0LDEyNjQ1LDEyNjQ2LDEyNjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2LDEyNjU3LDEyNjU4LDEyNjU5LDEyNjYwLDEyNjYxLDEyNjYyLDEyNjYzLDEyNjY0LDEyNjY1LDEyNjY2LDEyNjY3LDEyNjY4LDEyNjY5LDEyNjcwLDEyNjcx''@;'; put 'put ''LDEyNjcyLDEyNjczLDEyNjc0LDEyNjc1LDEyNjc2LDEyNjc3LDEyNjc4LDEyNjc5LDEyNjgwLDEyNjgxLDEyNjgyLDEyNjgzLDEyNjg0LDEyNjg1LDEyNjg2LDUxNzgzLDUxNzg0LDUxNzg1LDUxNzg2LDUxNzg3LDUxNzkwLDUxNzkxLDUxNzkzLDUxNzk0LDUxNzk1LDUxNzk3LDUxNzk4LDUx''@;'; put 'put ''Nzk5LDUxODAwLDUxODAxLDUxODAyLDUxODAzLDUxODA2LDUxODEwLDUxODExLDUxODEyLDUxODEzLDUxODE0LDUxODE1LDUxODE3LDUxODE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODE5LDUxODIwLDUxODIxLDUxODIyLDUxODIzLDUxODI0LDUxODI1LDUxODI2LDUxODI3''@;'; put 'put ''LDUxODI4LDUxODI5LDUxODMwLDUxODMxLDUxODMyLDUxODMzLDUxODM0LDUxODM1LDUxODM2LDUxODM4LDUxODM5LDUxODQwLDUxODQxLDUxODQyLDUxODQzLDUxODQ1LDUxODQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODQ3LDUxODQ4LDUxODQ5LDUxODUwLDUxODUxLDUx''@;'; put 'put ''ODUyLDUxODUzLDUxODU0LDUxODU1LDUxODU2LDUxODU3LDUxODU4LDUxODU5LDUxODYwLDUxODYxLDUxODYyLDUxODYzLDUxODY1LDUxODY2LDUxODY3LDUxODY4LDUxODY5LDUxODcwLDUxODcxLDUxODcyLDUxODczLDUxODc0LDUxODc1LDUxODc2LDUxODc3LDUxODc4LDUxODc5LDg1NjAs''@;'; put 'put ''ODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkx''@;'; put 'put ''NSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0''@;'; put 'put ''LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4ODAsNTE4ODEsNTE4ODIsNTE4ODMsNTE4ODQsNTE4ODUsNTE4ODYsNTE4ODcsNTE4ODgsNTE4ODksNTE4OTAsNTE4OTEsNTE4OTIs''@;'; put 'put ''NTE4OTMsNTE4OTQsNTE4OTUsNTE4OTYsNTE4OTcsNTE4OTgsNTE4OTksNTE5MDIsNTE5MDMsNTE5MDUsNTE5MDYsNTE5MDcsNTE5MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5MTAsNTE5MTEsNTE5MTIsNTE5MTMsNTE5MTQsNTE5MTUsNTE5MTgsNTE5MjAsNTE5MjIsNTE5''@;'; put 'put ''MjQsNTE5MjUsNTE5MjYsNTE5MjcsNTE5MzAsNTE5MzEsNTE5MzIsNTE5MzMsNTE5MzQsNTE5MzUsNTE5MzcsNTE5MzgsNTE5MzksNTE5NDAsNTE5NDEsNTE5NDIsNTE5NDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5NDQsNTE5NDUsNTE5NDYsNTE5NDcsNTE5NDksNTE5NTAs''@;'; put 'put ''NTE5NTEsNTE5NTIsNTE5NTMsNTE5NTQsNTE5NTUsNTE5NTcsNTE5NTgsNTE5NTksNTE5NjAsNTE5NjEsNTE5NjIsNTE5NjMsNTE5NjQsNTE5NjUsNTE5NjYsNTE5NjcsNTE5NjgsNTE5NjksNTE5NzAsNTE5NzEsNTE5NzIsNTE5NzMsNTE5NzQsNTE5NzUsNTE5NzcsNTE5NzgsOTQ3Miw5NDc0''@;'; put 'put ''LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LDk0OTAsOTQ4OSw5NDk4''@;'; put 'put ''LDk0OTcsOTQ5NCw5NDkzLDk0ODYsOTQ4NSw5NTAyLDk1MDMsOTUwNSw5NTA2LDk1MTAsOTUxMSw5NTEzLDk1MTQsOTUxNyw5NTE4LDk1MjEsOTUyMiw5NTI1LDk1MjYsOTUyOSw5NTMwLDk1MzMsOTUzNCw5NTM2LDk1MzcsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MTk3OSw1MTk4MCw1MTk4MSw1MTk4Miw1MTk4Myw1MTk4''@;'; put 'put ''NSw1MTk4Niw1MTk4Nyw1MTk4OSw1MTk5MCw1MTk5MSw1MTk5Myw1MTk5NCw1MTk5NSw1MTk5Niw1MTk5Nyw1MTk5OCw1MTk5OSw1MjAwMiw1MjAwMyw1MjAwNCw1MjAwNSw1MjAwNiw1MjAwNyw1MjAwOCw1MjAwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAxMCw1MjAxMSw1''@;'; put 'put ''MjAxMiw1MjAxMyw1MjAxNCw1MjAxNSw1MjAxNiw1MjAxNyw1MjAxOCw1MjAxOSw1MjAyMCw1MjAyMSw1MjAyMiw1MjAyMyw1MjAyNCw1MjAyNSw1MjAyNiw1MjAyNyw1MjAyOCw1MjAyOSw1MjAzMCw1MjAzMSw1MjAzMiw1MjAzNCw1MjAzNSw1MjAzNixudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw1MjAzNyw1MjAzOCw1MjAzOSw1MjA0Miw1MjA0Myw1MjA0NSw1MjA0Niw1MjA0Nyw1MjA0OSw1MjA1MCw1MjA1MSw1MjA1Miw1MjA1Myw1MjA1NCw1MjA1NSw1MjA1OCw1MjA1OSw1MjA2MCw1MjA2Miw1MjA2Myw1MjA2NCw1MjA2NSw1MjA2Niw1MjA2Nyw1MjA2OSw1MjA3MCw1''@;'; put 'put ''MjA3MSw1MjA3Miw1MjA3Myw1MjA3NCw1MjA3NSw1MjA3NiwxMzIwNSwxMzIwNiwxMzIwNyw4NDY3LDEzMjA4LDEzMjUyLDEzMjE5LDEzMjIwLDEzMjIxLDEzMjIyLDEzMjA5LDEzMjEwLDEzMjExLDEzMjEyLDEzMjEzLDEzMjE0LDEzMjE1LDEzMjE2LDEzMjE3LDEzMjE4LDEzMjU4LDEzMTk3''@;'; put 'put ''LDEzMTk4LDEzMTk5LDEzMjYzLDEzMTkyLDEzMTkzLDEzMjU2LDEzMjIzLDEzMjI0LDEzMjMyLDEzMjMzLDEzMjM0LDEzMjM1LDEzMjM2LDEzMjM3LDEzMjM4LDEzMjM5LDEzMjQwLDEzMjQxLDEzMTg0LDEzMTg1LDEzMTg2LDEzMTg3LDEzMTg4LDEzMjQyLDEzMjQzLDEzMjQ0LDEzMjQ1LDEz''@;'; put 'put ''MjQ2LDEzMjQ3LDEzMjAwLDEzMjAxLDEzMjAyLDEzMjAzLDEzMjA0LDg0ODYsMTMyNDgsMTMyNDksMTMxOTQsMTMxOTUsMTMxOTYsMTMyNzAsMTMyNTMsMTMyMjksMTMyMzAsMTMyMzEsMTMyNzUsMTMyMjUsMTMyMjYsMTMyMjcsMTMyMjgsMTMyNzcsMTMyNjQsMTMyNjcsMTMyNTEsMTMyNTcs''@;'; put 'put ''MTMyNzYsMTMyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwNzcsNTIwNzgsNTIwNzksNTIwODAsNTIwODEsNTIwODIsNTIwODMsNTIwODQsNTIwODUsNTIwODYsNTIwODcsNTIwOTAsNTIwOTEs''@;'; put 'put ''NTIwOTIsNTIwOTMsNTIwOTQsNTIwOTUsNTIwOTYsNTIwOTcsNTIwOTgsNTIwOTksNTIxMDAsNTIxMDEsNTIxMDIsNTIxMDMsNTIxMDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMDUsNTIxMDYsNTIxMDcsNTIxMDgsNTIxMDksNTIxMTAsNTIxMTEsNTIxMTIsNTIxMTMsNTIx''@;'; put 'put ''MTQsNTIxMTUsNTIxMTYsNTIxMTcsNTIxMTgsNTIxMTksNTIxMjAsNTIxMjEsNTIxMjIsNTIxMjMsNTIxMjUsNTIxMjYsNTIxMjcsNTIxMjgsNTIxMjksNTIxMzAsNTIxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMzIsNTIxMzMsNTIxMzQsNTIxMzUsNTIxMzYsNTIxMzcs''@;'; put 'put ''NTIxMzgsNTIxMzksNTIxNDAsNTIxNDEsNTIxNDIsNTIxNDMsNTIxNDQsNTIxNDUsNTIxNDYsNTIxNDcsNTIxNDgsNTIxNDksNTIxNTAsNTIxNTEsNTIxNTMsNTIxNTQsNTIxNTUsNTIxNTYsNTIxNTcsNTIxNTgsNTIxNTksNTIxNjAsNTIxNjEsNTIxNjIsNTIxNjMsNTIxNjQsMTk4LDIwOCwx''@;'; put 'put ''NzAsMjk0LG51bGwsMzA2LG51bGwsMzE5LDMyMSwyMTYsMzM4LDE4NiwyMjIsMzU4LDMzMCxudWxsLDEyODk2LDEyODk3LDEyODk4LDEyODk5LDEyOTAwLDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEyOTA2LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLDEyOTExLDEyOTEyLDEyOTEz''@;'; put 'put ''LDEyOTE0LDEyOTE1LDEyOTE2LDEyOTE3LDEyOTE4LDEyOTE5LDEyOTIwLDEyOTIxLDEyOTIyLDEyOTIzLDk0MjQsOTQyNSw5NDI2LDk0MjcsOTQyOCw5NDI5LDk0MzAsOTQzMSw5NDMyLDk0MzMsOTQzNCw5NDM1LDk0MzYsOTQzNyw5NDM4LDk0MzksOTQ0MCw5NDQxLDk0NDIsOTQ0Myw5NDQ0''@;'; put 'put ''LDk0NDUsOTQ0Niw5NDQ3LDk0NDgsOTQ0OSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiwxODksODUzMSw4NTMyLDE4OCwxOTAsODUzOSw4NTQwLDg1NDEsODU0Miw1MjE2NSw1MjE2Niw1MjE2Nyw1MjE2''@;'; put 'put ''OCw1MjE2OSw1MjE3MCw1MjE3MSw1MjE3Miw1MjE3Myw1MjE3NCw1MjE3NSw1MjE3Niw1MjE3Nyw1MjE3OCw1MjE3OSw1MjE4MSw1MjE4Miw1MjE4Myw1MjE4NCw1MjE4NSw1MjE4Niw1MjE4Nyw1MjE4OCw1MjE4OSw1MjE5MCw1MjE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MjE5Miw1MjE5Myw1MjE5NCw1MjE5NSw1MjE5Nyw1MjE5OCw1MjIwMCw1MjIwMiw1MjIwMyw1MjIwNCw1MjIwNSw1MjIwNiw1MjIwNyw1MjIwOCw1MjIwOSw1MjIxMCw1MjIxMSw1MjIxMiw1MjIxMyw1MjIxNCw1MjIxNSw1MjIxNiw1MjIxNyw1MjIxOCw1MjIxOSw1MjIyMCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw1MjIyMSw1MjIyMiw1MjIyMyw1MjIyNCw1MjIyNSw1MjIyNiw1MjIyNyw1MjIyOCw1MjIyOSw1MjIzMCw1MjIzMSw1MjIzMiw1MjIzMyw1MjIzNCw1MjIzNSw1MjIzOCw1MjIzOSw1MjI0MSw1MjI0Miw1MjI0Myw1MjI0NSw1MjI0Niw1MjI0Nyw1MjI0OCw1''@;'; put 'put ''MjI0OSw1MjI1MCw1MjI1MSw1MjI1NCw1MjI1NSw1MjI1Niw1MjI1OSw1MjI2MCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIwLDMyMiwyNDgsMzM5LDIyMywyNTQsMzU5LDMzMSwzMjksMTI4MDAsMTI4MDEsMTI4MDIsMTI4MDMsMTI4MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgs''@;'; put 'put ''MTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMsMTI4MTQsMTI4MTUsMTI4MTYsMTI4MTcsMTI4MTgsMTI4MTksMTI4MjAsMTI4MjEsMTI4MjIsMTI4MjMsMTI4MjQsMTI4MjUsMTI4MjYsMTI4MjcsOTM3Miw5MzczLDkzNzQsOTM3NSw5Mzc2LDkzNzcsOTM3OCw5Mzc5LDkzODAsOTM4MSw5''@;'; put 'put ''MzgyLDkzODMsOTM4NCw5Mzg1LDkzODYsOTM4Nyw5Mzg4LDkzODksOTM5MCw5MzkxLDkzOTIsOTM5Myw5Mzk0LDkzOTUsOTM5Niw5Mzk3LDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQwLDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDE4NSwxNzgsMTc5''@;'; put 'put ''LDgzMDgsODMxOSw4MzIxLDgzMjIsODMyMyw4MzI0LDUyMjYxLDUyMjYyLDUyMjY2LDUyMjY3LDUyMjY5LDUyMjcxLDUyMjczLDUyMjc0LDUyMjc1LDUyMjc2LDUyMjc3LDUyMjc4LDUyMjc5LDUyMjgyLDUyMjg3LDUyMjg4LDUyMjg5LDUyMjkwLDUyMjkxLDUyMjk0LDUyMjk1LDUyMjk3LDUy''@;'; put 'put ''Mjk4LDUyMjk5LDUyMzAxLDUyMzAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzAzLDUyMzA0LDUyMzA1LDUyMzA2LDUyMzA3LDUyMzEwLDUyMzE0LDUyMzE1LDUyMzE2LDUyMzE3LDUyMzE4LDUyMzE5LDUyMzIxLDUyMzIyLDUyMzIzLDUyMzI1LDUyMzI3LDUyMzI5LDUyMzMw''@;'; put 'put ''LDUyMzMxLDUyMzMyLDUyMzMzLDUyMzM0LDUyMzM1LDUyMzM3LDUyMzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzM5LDUyMzQwLDUyMzQyLDUyMzQzLDUyMzQ0LDUyMzQ1LDUyMzQ2LDUyMzQ3LDUyMzQ4LDUyMzQ5LDUyMzUwLDUyMzUxLDUyMzUyLDUyMzUzLDUyMzU0LDUy''@;'; put 'put ''MzU1LDUyMzU2LDUyMzU3LDUyMzU4LDUyMzU5LDUyMzYwLDUyMzYxLDUyMzYyLDUyMzYzLDUyMzY0LDUyMzY1LDUyMzY2LDUyMzY3LDUyMzY4LDUyMzY5LDUyMzcwLDUyMzcxLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYz''@;'; put 'put ''LDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEy''@;'; put 'put ''MzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4''@;'; put 'put ''LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjM3Miw1''@;'; put 'put ''MjM3Myw1MjM3NCw1MjM3NSw1MjM3OCw1MjM3OSw1MjM4MSw1MjM4Miw1MjM4Myw1MjM4NSw1MjM4Niw1MjM4Nyw1MjM4OCw1MjM4OSw1MjM5MCw1MjM5MSw1MjM5NCw1MjM5OCw1MjM5OSw1MjQwMCw1MjQwMSw1MjQwMiw1MjQwMyw1MjQwNiw1MjQwNyw1MjQwOSxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCw1MjQxMCw1MjQxMSw1MjQxMyw1MjQxNCw1MjQxNSw1MjQxNiw1MjQxNyw1MjQxOCw1MjQxOSw1MjQyMiw1MjQyNCw1MjQyNiw1MjQyNyw1MjQyOCw1MjQyOSw1MjQzMCw1MjQzMSw1MjQzMyw1MjQzNCw1MjQzNSw1MjQzNyw1MjQzOCw1MjQzOSw1MjQ0MCw1MjQ0MSw1''@;'; put 'put ''MjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ0Myw1MjQ0NCw1MjQ0NSw1MjQ0Niw1MjQ0Nyw1MjQ0OCw1MjQ0OSw1MjQ1MCw1MjQ1MSw1MjQ1Myw1MjQ1NCw1MjQ1NSw1MjQ1Niw1MjQ1Nyw1MjQ1OCw1MjQ1OSw1MjQ2MSw1MjQ2Miw1MjQ2Myw1MjQ2NSw1MjQ2Niw1MjQ2''@;'; put 'put ''Nyw1MjQ2OCw1MjQ2OSw1MjQ3MCw1MjQ3MSw1MjQ3Miw1MjQ3Myw1MjQ3NCw1MjQ3NSw1MjQ3Niw1MjQ3NywxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwx''@;'; put 'put ''MjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5''@;'; put 'put ''MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwx''@;'; put 'put ''MjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI0NzgsNTI0NzksNTI0ODAsNTI0ODIsNTI0ODMsNTI0ODQsNTI0ODUs''@;'; put 'put ''NTI0ODYsNTI0ODcsNTI0OTAsNTI0OTEsNTI0OTMsNTI0OTQsNTI0OTUsNTI0OTcsNTI0OTgsNTI0OTksNTI1MDAsNTI1MDEsNTI1MDIsNTI1MDMsNTI1MDYsNTI1MDgsNTI1MTAsNTI1MTEsNTI1MTIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1MTMsNTI1MTQsNTI1MTUsNTI1''@;'; put 'put ''MTcsNTI1MTgsNTI1MTksNTI1MjEsNTI1MjIsNTI1MjMsNTI1MjUsNTI1MjYsNTI1MjcsNTI1MjgsNTI1MjksNTI1MzAsNTI1MzEsNTI1MzIsNTI1MzMsNTI1MzQsNTI1MzUsNTI1MzYsNTI1MzgsNTI1MzksNTI1NDAsNTI1NDEsNTI1NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTI1NDMsNTI1NDQsNTI1NDUsNTI1NDYsNTI1NDcsNTI1NDgsNTI1NDksNTI1NTAsNTI1NTEsNTI1NTIsNTI1NTMsNTI1NTQsNTI1NTUsNTI1NTYsNTI1NTcsNTI1NTgsNTI1NTksNTI1NjAsNTI1NjEsNTI1NjIsNTI1NjMsNTI1NjQsNTI1NjUsNTI1NjYsNTI1NjcsNTI1NjgsNTI1NjksNTI1''@;'; put 'put ''NzAsNTI1NzEsNTI1NzMsNTI1NzQsNTI1NzUsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2''@;'; put 'put ''NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4''@;'; put 'put ''MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCw1MjU3Nyw1MjU3OCw1MjU3OSw1MjU4MSw1MjU4Miw1MjU4Myw1MjU4NCw1MjU4NSw1MjU4Niw1MjU4Nyw1MjU5MCw1MjU5Miw1MjU5NCw1MjU5NSw1MjU5Niw1MjU5Nyw1MjU5OCw1MjU5OSw1MjYwMSw1MjYwMiw1MjYwMyw1MjYwNCw1MjYwNSw1MjYwNiw1MjYwNyw1MjYwOCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjYwOSw1MjYxMCw1MjYxMSw1MjYxMiw1MjYxMyw1MjYxNCw1MjYxNSw1MjYxNyw1MjYxOCw1MjYxOSw1MjYyMCw1MjYyMSw1MjYyMiw1MjYyMyw1MjYyNCw1MjYyNSw1MjYyNiw1MjYyNyw1MjYzMCw1MjYzMSw1MjYzMyw1MjYzNCw1MjYzNSw1MjYz''@;'; put 'put ''Nyw1MjYzOCw1MjYzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY0MCw1MjY0MSw1MjY0Miw1MjY0Myw1MjY0Niw1MjY0OCw1MjY1MCw1MjY1MSw1MjY1Miw1MjY1Myw1MjY1NCw1MjY1NSw1MjY1Nyw1MjY1OCw1MjY1OSw1MjY2MCw1MjY2MSw1MjY2Miw1MjY2Myw1MjY2NCw1''@;'; put 'put ''MjY2NSw1MjY2Niw1MjY2Nyw1MjY2OCw1MjY2OSw1MjY3MCw1MjY3MSw1MjY3Miw1MjY3Myw1MjY3NCw1MjY3NSw1MjY3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjc4LDUyNjc5LDUyNjgwLDUyNjgxLDUyNjgyLDUyNjgzLDUyNjg1LDUyNjg2LDUyNjg3LDUyNjg5LDUyNjkwLDUyNjkxLDUyNjkyLDUyNjkzLDUyNjk0LDUyNjk1LDUyNjk2LDUyNjk3LDUyNjk4LDUyNjk5''@;'; put 'put ''LDUyNzAwLDUyNzAxLDUyNzAyLDUyNzAzLDUyNzA0LDUyNzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzA2LDUyNzA3LDUyNzA4LDUyNzA5LDUyNzEwLDUyNzExLDUyNzEzLDUyNzE0LDUyNzE1LDUyNzE3LDUyNzE4LDUyNzE5LDUyNzIxLDUyNzIyLDUyNzIzLDUyNzI0LDUy''@;'; put 'put ''NzI1LDUyNzI2LDUyNzI3LDUyNzMwLDUyNzMyLDUyNzM0LDUyNzM1LDUyNzM2LDUyNzM3LDUyNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzM5LDUyNzQxLDUyNzQyLDUyNzQzLDUyNzQ1LDUyNzQ2LDUyNzQ3LDUyNzQ5LDUyNzUwLDUyNzUxLDUyNzUyLDUyNzUzLDUyNzU0''@;'; put 'put ''LDUyNzU1LDUyNzU3LDUyNzU4LDUyNzU5LDUyNzYwLDUyNzYyLDUyNzYzLDUyNzY0LDUyNzY1LDUyNzY2LDUyNzY3LDUyNzcwLDUyNzcxLDUyNzczLDUyNzc0LDUyNzc1LDUyNzc3LDUyNzc4LDUyNzc5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3ODAsNTI3ODEsNTI3ODIsNTI3ODMsNTI3ODYsNTI3ODgsNTI3OTAsNTI3OTEsNTI3OTIsNTI3OTMsNTI3OTQsNTI3OTUsNTI3''@;'; put 'put ''OTYsNTI3OTcsNTI3OTgsNTI3OTksNTI4MDAsNTI4MDEsNTI4MDIsNTI4MDMsNTI4MDQsNTI4MDUsNTI4MDYsNTI4MDcsNTI4MDgsNTI4MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4MTAsNTI4MTEsNTI4MTIsNTI4MTMsNTI4MTQsNTI4MTUsNTI4MTYsNTI4MTcsNTI4MTgs''@;'; put 'put ''NTI4MTksNTI4MjAsNTI4MjEsNTI4MjIsNTI4MjMsNTI4MjYsNTI4MjcsNTI4MjksNTI4MzAsNTI4MzQsNTI4MzUsNTI4MzYsNTI4MzcsNTI4MzgsNTI4MzksNTI4NDIsNTI4NDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4NDYsNTI4NDcsNTI4NDgsNTI4NDksNTI4NTAsNTI4''@;'; put 'put ''NTEsNTI4NTQsNTI4NTUsNTI4NTcsNTI4NTgsNTI4NTksNTI4NjEsNTI4NjIsNTI4NjMsNTI4NjQsNTI4NjUsNTI4NjYsNTI4NjcsNTI4NzAsNTI4NzIsNTI4NzQsNTI4NzUsNTI4NzYsNTI4NzcsNTI4NzgsNTI4NzksNTI4ODIsNTI4ODMsNTI4ODUsNTI4ODYsNTI4ODcsNTI4ODksbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjg5MCw1Mjg5MSw1Mjg5Miw1Mjg5Myw1Mjg5NCw1''@;'; put 'put ''Mjg5NSw1Mjg5OCw1MjkwMiw1MjkwMyw1MjkwNCw1MjkwNSw1MjkwNiw1MjkwNyw1MjkxMCw1MjkxMSw1MjkxMiw1MjkxMyw1MjkxNCw1MjkxNSw1MjkxNiw1MjkxNyw1MjkxOCw1MjkxOSw1MjkyMCw1MjkyMSw1MjkyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjkyMyw1Mjky''@;'; put 'put ''NCw1MjkyNSw1MjkyNiw1MjkyNyw1MjkyOCw1MjkzMCw1MjkzMSw1MjkzMiw1MjkzMyw1MjkzNCw1MjkzNSw1MjkzNiw1MjkzNyw1MjkzOCw1MjkzOSw1Mjk0MCw1Mjk0MSw1Mjk0Miw1Mjk0Myw1Mjk0NCw1Mjk0NSw1Mjk0Niw1Mjk0Nyw1Mjk0OCw1Mjk0OSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1Mjk1MCw1Mjk1MSw1Mjk1Miw1Mjk1Myw1Mjk1NCw1Mjk1NSw1Mjk1Niw1Mjk1Nyw1Mjk1OCw1Mjk1OSw1Mjk2MCw1Mjk2MSw1Mjk2Miw1Mjk2Myw1Mjk2Niw1Mjk2Nyw1Mjk2OSw1Mjk3MCw1Mjk3Myw1Mjk3NCw1Mjk3NSw1Mjk3Niw1Mjk3Nyw1Mjk3OCw1Mjk3OSw1Mjk4''@;'; put 'put ''Miw1Mjk4Niw1Mjk4Nyw1Mjk4OCw1Mjk4OSw1Mjk5MCw1Mjk5MSw0NDAzMiw0NDAzMyw0NDAzNiw0NDAzOSw0NDA0MCw0NDA0MSw0NDA0Miw0NDA0OCw0NDA0OSw0NDA1MCw0NDA1MSw0NDA1Miw0NDA1Myw0NDA1NCw0NDA1NSw0NDA1Nyw0NDA1OCw0NDA1OSw0NDA2MCw0NDA2MSw0NDA2NCw0''@;'; put 'put ''NDA2OCw0NDA3Niw0NDA3Nyw0NDA3OSw0NDA4MCw0NDA4MSw0NDA4OCw0NDA4OSw0NDA5Miw0NDA5Niw0NDEwNyw0NDEwOSw0NDExNiw0NDEyMCw0NDEyNCw0NDE0NCw0NDE0NSw0NDE0OCw0NDE1MSw0NDE1Miw0NDE1NCw0NDE2MCw0NDE2MSw0NDE2Myw0NDE2NCw0NDE2NSw0NDE2Niw0NDE2''@;'; put 'put ''OSw0NDE3MCw0NDE3MSw0NDE3Miw0NDE3Niw0NDE4MCw0NDE4OCw0NDE4OSw0NDE5MSw0NDE5Miw0NDE5Myw0NDIwMCw0NDIwMSw0NDIwMiw0NDIwNCw0NDIwNyw0NDIwOCw0NDIxNiw0NDIxNyw0NDIxOSw0NDIyMCw0NDIyMSw0NDIyNSw0NDIyOCw0NDIzMiw0NDIzNiw0NDI0NSw0NDI0Nyw0''@;'; put 'put ''NDI1Niw0NDI1Nyw0NDI2MCw0NDI2Myw0NDI2NCw0NDI2Niw0NDI2OCw0NDI3MSw0NDI3Miw0NDI3Myw0NDI3NSw0NDI3Nyw0NDI3OCw0NDI4NCw0NDI4NSw0NDI4OCw0NDI5Miw0NDI5NCw1Mjk5NCw1Mjk5NSw1Mjk5Nyw1Mjk5OCw1Mjk5OSw1MzAwMSw1MzAwMiw1MzAwMyw1MzAwNCw1MzAw''@;'; put 'put ''NSw1MzAwNiw1MzAwNyw1MzAxMCw1MzAxMiw1MzAxNCw1MzAxNSw1MzAxNiw1MzAxNyw1MzAxOCw1MzAxOSw1MzAyMSw1MzAyMiw1MzAyMyw1MzAyNSw1MzAyNiw1MzAyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzAyOSw1MzAzMCw1MzAzMSw1MzAzMiw1MzAzMyw1MzAzNCw1''@;'; put 'put ''MzAzNSw1MzAzOCw1MzA0Miw1MzA0Myw1MzA0NCw1MzA0NSw1MzA0Niw1MzA0Nyw1MzA0OSw1MzA1MCw1MzA1MSw1MzA1Miw1MzA1Myw1MzA1NCw1MzA1NSw1MzA1Niw1MzA1Nyw1MzA1OCw1MzA1OSw1MzA2MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzA2MSw1MzA2Miw1MzA2''@;'; put 'put ''Myw1MzA2NCw1MzA2NSw1MzA2Niw1MzA2Nyw1MzA2OCw1MzA2OSw1MzA3MCw1MzA3MSw1MzA3Miw1MzA3Myw1MzA3NCw1MzA3NSw1MzA3OCw1MzA3OSw1MzA4MSw1MzA4Miw1MzA4Myw1MzA4NSw1MzA4Niw1MzA4Nyw1MzA4OCw1MzA4OSw1MzA5MCw1MzA5MSw1MzA5NCw1MzA5Niw1MzA5OCw1''@;'; put 'put ''MzA5OSw1MzEwMCw0NDMwMCw0NDMwMSw0NDMwMyw0NDMwNSw0NDMxMiw0NDMxNiw0NDMyMCw0NDMyOSw0NDMzMiw0NDMzMyw0NDM0MCw0NDM0MSw0NDM0NCw0NDM0OCw0NDM1Niw0NDM1Nyw0NDM1OSw0NDM2MSw0NDM2OCw0NDM3Miw0NDM3Niw0NDM4NSw0NDM4Nyw0NDM5Niw0NDM5Nyw0NDQw''@;'; put 'put ''MCw0NDQwMyw0NDQwNCw0NDQwNSw0NDQwNiw0NDQxMSw0NDQxMiw0NDQxMyw0NDQxNSw0NDQxNyw0NDQxOCw0NDQyNCw0NDQyNSw0NDQyOCw0NDQzMiw0NDQ0NCw0NDQ0NSw0NDQ1Miw0NDQ3MSw0NDQ4MCw0NDQ4MSw0NDQ4NCw0NDQ4OCw0NDQ5Niw0NDQ5Nyw0NDQ5OSw0NDUwOCw0NDUxMiw0''@;'; put 'put ''NDUxNiw0NDUzNiw0NDUzNyw0NDU0MCw0NDU0Myw0NDU0NCw0NDU0NSw0NDU1Miw0NDU1Myw0NDU1NSw0NDU1Nyw0NDU2NCw0NDU5Miw0NDU5Myw0NDU5Niw0NDU5OSw0NDYwMCw0NDYwMiw0NDYwOCw0NDYwOSw0NDYxMSw0NDYxMyw0NDYxNCw0NDYxOCw0NDYyMCw0NDYyMSw0NDYyMiw0NDYy''@;'; put 'put ''NCw0NDYyOCw0NDYzMCw0NDYzNiw0NDYzNyw0NDYzOSw0NDY0MCw0NDY0MSw0NDY0NSw0NDY0OCw0NDY0OSw0NDY1Miw0NDY1Niw0NDY2NCw1MzEwMSw1MzEwMiw1MzEwMyw1MzEwNiw1MzEwNyw1MzEwOSw1MzExMCw1MzExMSw1MzExMyw1MzExNCw1MzExNSw1MzExNiw1MzExNyw1MzExOCw1''@;'; put 'put ''MzExOSw1MzEyMSw1MzEyMiw1MzEyMyw1MzEyNCw1MzEyNiw1MzEyNyw1MzEyOCw1MzEyOSw1MzEzMCw1MzEzMSw1MzEzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzEzNCw1MzEzNSw1MzEzNiw1MzEzNyw1MzEzOCw1MzEzOSw1MzE0MCw1MzE0MSw1MzE0Miw1MzE0Myw1MzE0''@;'; put 'put ''NCw1MzE0NSw1MzE0Niw1MzE0Nyw1MzE0OCw1MzE0OSw1MzE1MCw1MzE1MSw1MzE1Miw1MzE1NCw1MzE1NSw1MzE1Niw1MzE1Nyw1MzE1OCw1MzE1OSw1MzE2MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzE2Miw1MzE2Myw1MzE2NCw1MzE2NSw1MzE2Niw1MzE2Nyw1MzE2OSw1''@;'; put 'put ''MzE3MCw1MzE3MSw1MzE3Miw1MzE3Myw1MzE3NCw1MzE3NSw1MzE3Niw1MzE3Nyw1MzE3OCw1MzE3OSw1MzE4MCw1MzE4MSw1MzE4Miw1MzE4Myw1MzE4NCw1MzE4NSw1MzE4Niw1MzE4Nyw1MzE4OSw1MzE5MCw1MzE5MSw1MzE5Miw1MzE5Myw1MzE5NCw1MzE5NSw0NDY2NSw0NDY2Nyw0NDY2''@;'; put 'put ''OCw0NDY2OSw0NDY3Niw0NDY3Nyw0NDY4NCw0NDczMiw0NDczMyw0NDczNCw0NDczNiw0NDc0MCw0NDc0OCw0NDc0OSw0NDc1MSw0NDc1Miw0NDc1Myw0NDc2MCw0NDc2MSw0NDc2NCw0NDc3Niw0NDc3OSw0NDc4MSw0NDc4OCw0NDc5Miw0NDc5Niw0NDgwNyw0NDgwOCw0NDgxMyw0NDgxNiw0''@;'; put 'put ''NDg0NCw0NDg0NSw0NDg0OCw0NDg1MCw0NDg1Miw0NDg2MCw0NDg2MSw0NDg2Myw0NDg2NSw0NDg2Niw0NDg2Nyw0NDg3Miw0NDg3Myw0NDg4MCw0NDg5Miw0NDg5Myw0NDkwMCw0NDkwMSw0NDkyMSw0NDkyOCw0NDkzMiw0NDkzNiw0NDk0NCw0NDk0NSw0NDk0OSw0NDk1Niw0NDk4NCw0NDk4''@;'; put 'put ''NSw0NDk4OCw0NDk5Miw0NDk5OSw0NWUzLDQ1MDAxLDQ1MDAzLDQ1MDA1LDQ1MDA2LDQ1MDEyLDQ1MDIwLDQ1MDMyLDQ1MDMzLDQ1MDQwLDQ1MDQxLDQ1MDQ0LDQ1MDQ4LDQ1MDU2LDQ1MDU3LDQ1MDYwLDQ1MDY4LDQ1MDcyLDQ1MDc2LDQ1MDg0LDQ1MDg1LDQ1MDk2LDQ1MTI0LDQ1MTI1LDQ1''@;'; put 'put ''MTI4LDQ1MTMwLDQ1MTMyLDQ1MTM0LDQ1MTM5LDQ1MTQwLDQ1MTQxLDQ1MTQzLDQ1MTQ1LDUzMTk2LDUzMTk3LDUzMTk4LDUzMTk5LDUzMjAwLDUzMjAxLDUzMjAyLDUzMjAzLDUzMjA0LDUzMjA1LDUzMjA2LDUzMjA3LDUzMjA4LDUzMjA5LDUzMjEwLDUzMjExLDUzMjEyLDUzMjEzLDUzMjE0''@;'; put 'put ''LDUzMjE1LDUzMjE4LDUzMjE5LDUzMjIxLDUzMjIyLDUzMjIzLDUzMjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMjI2LDUzMjI3LDUzMjI4LDUzMjI5LDUzMjMwLDUzMjMxLDUzMjM0LDUzMjM2LDUzMjM4LDUzMjM5LDUzMjQwLDUzMjQxLDUzMjQyLDUzMjQzLDUzMjQ1LDUz''@;'; put 'put ''MjQ2LDUzMjQ3LDUzMjQ5LDUzMjUwLDUzMjUxLDUzMjUzLDUzMjU0LDUzMjU1LDUzMjU2LDUzMjU3LDUzMjU4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMjU5LDUzMjYwLDUzMjYxLDUzMjYyLDUzMjYzLDUzMjY0LDUzMjY2LDUzMjY3LDUzMjY4LDUzMjY5LDUzMjcwLDUzMjcx''@;'; put 'put ''LDUzMjczLDUzMjc0LDUzMjc1LDUzMjc2LDUzMjc3LDUzMjc4LDUzMjc5LDUzMjgwLDUzMjgxLDUzMjgyLDUzMjgzLDUzMjg0LDUzMjg1LDUzMjg2LDUzMjg3LDUzMjg4LDUzMjg5LDUzMjkwLDUzMjkxLDUzMjkyLDQ1MTQ5LDQ1MTgwLDQ1MTgxLDQ1MTg0LDQ1MTg4LDQ1MTk2LDQ1MTk3LDQ1''@;'; put 'put ''MTk5LDQ1MjAxLDQ1MjA4LDQ1MjA5LDQ1MjEwLDQ1MjEyLDQ1MjE1LDQ1MjE2LDQ1MjE3LDQ1MjE4LDQ1MjI0LDQ1MjI1LDQ1MjI3LDQ1MjI4LDQ1MjI5LDQ1MjMwLDQ1MjMxLDQ1MjMzLDQ1MjM1LDQ1MjM2LDQ1MjM3LDQ1MjQwLDQ1MjQ0LDQ1MjUyLDQ1MjUzLDQ1MjU1LDQ1MjU2LDQ1MjU3''@;'; put 'put ''LDQ1MjY0LDQ1MjY1LDQ1MjY4LDQ1MjcyLDQ1MjgwLDQ1Mjg1LDQ1MzIwLDQ1MzIxLDQ1MzIzLDQ1MzI0LDQ1MzI4LDQ1MzMwLDQ1MzMxLDQ1MzM2LDQ1MzM3LDQ1MzM5LDQ1MzQwLDQ1MzQxLDQ1MzQ3LDQ1MzQ4LDQ1MzQ5LDQ1MzUyLDQ1MzU2LDQ1MzY0LDQ1MzY1LDQ1MzY3LDQ1MzY4LDQ1''@;'; put 'put ''MzY5LDQ1Mzc2LDQ1Mzc3LDQ1MzgwLDQ1Mzg0LDQ1MzkyLDQ1MzkzLDQ1Mzk2LDQ1Mzk3LDQ1NDAwLDQ1NDA0LDQ1NDA4LDQ1NDMyLDQ1NDMzLDQ1NDM2LDQ1NDQwLDQ1NDQyLDQ1NDQ4LDQ1NDQ5LDQ1NDUxLDQ1NDUzLDQ1NDU4LDQ1NDU5LDQ1NDYwLDQ1NDY0LDQ1NDY4LDQ1NDgwLDQ1NTE2''@;'; put 'put ''LDQ1NTIwLDQ1NTI0LDQ1NTMyLDQ1NTMzLDUzMjk0LDUzMjk1LDUzMjk2LDUzMjk3LDUzMjk4LDUzMjk5LDUzMzAyLDUzMzAzLDUzMzA1LDUzMzA2LDUzMzA3LDUzMzA5LDUzMzEwLDUzMzExLDUzMzEyLDUzMzEzLDUzMzE0LDUzMzE1LDUzMzE4LDUzMzIwLDUzMzIyLDUzMzIzLDUzMzI0LDUz''@;'; put 'put ''MzI1LDUzMzI2LDUzMzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzI5LDUzMzMwLDUzMzMxLDUzMzMzLDUzMzM0LDUzMzM1LDUzMzM3LDUzMzM4LDUzMzM5LDUzMzQwLDUzMzQxLDUzMzQyLDUzMzQzLDUzMzQ1LDUzMzQ2LDUzMzQ3LDUzMzQ4LDUzMzQ5LDUzMzUwLDUzMzUx''@;'; put 'put ''LDUzMzUyLDUzMzUzLDUzMzU0LDUzMzU1LDUzMzU4LDUzMzU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzYxLDUzMzYyLDUzMzYzLDUzMzY1LDUzMzY2LDUzMzY3LDUzMzY4LDUzMzY5LDUzMzcwLDUzMzcxLDUzMzc0LDUzMzc1LDUzMzc2LDUzMzc4LDUzMzc5LDUzMzgwLDUz''@;'; put 'put ''MzgxLDUzMzgyLDUzMzgzLDUzMzg0LDUzMzg1LDUzMzg2LDUzMzg3LDUzMzg4LDUzMzg5LDUzMzkwLDUzMzkxLDUzMzkyLDUzMzkzLDUzMzk0LDUzMzk1LDUzMzk2LDQ1NTM1LDQ1NTQ0LDQ1NTQ1LDQ1NTQ4LDQ1NTUyLDQ1NTYxLDQ1NTYzLDQ1NTY1LDQ1NTcyLDQ1NTczLDQ1NTc2LDQ1NTc5''@;'; put 'put ''LDQ1NTgwLDQ1NTg4LDQ1NTg5LDQ1NTkxLDQ1NTkzLDQ1NjAwLDQ1NjIwLDQ1NjI4LDQ1NjU2LDQ1NjYwLDQ1NjY0LDQ1NjcyLDQ1NjczLDQ1Njg0LDQ1Njg1LDQ1NjkyLDQ1NzAwLDQ1NzAxLDQ1NzA1LDQ1NzEyLDQ1NzEzLDQ1NzE2LDQ1NzIwLDQ1NzIxLDQ1NzIyLDQ1NzI4LDQ1NzI5LDQ1''@;'; put 'put ''NzMxLDQ1NzMzLDQ1NzM0LDQ1NzM4LDQ1NzQwLDQ1NzQ0LDQ1NzQ4LDQ1NzY4LDQ1NzY5LDQ1NzcyLDQ1Nzc2LDQ1Nzc4LDQ1Nzg0LDQ1Nzg1LDQ1Nzg3LDQ1Nzg5LDQ1Nzk0LDQ1Nzk2LDQ1Nzk3LDQ1Nzk4LDQ1ODAwLDQ1ODAzLDQ1ODA0LDQ1ODA1LDQ1ODA2LDQ1ODA3LDQ1ODExLDQ1ODEy''@;'; put 'put ''LDQ1ODEzLDQ1ODE1LDQ1ODE2LDQ1ODE3LDQ1ODE4LDQ1ODE5LDQ1ODIzLDQ1ODI0LDQ1ODI1LDQ1ODI4LDQ1ODMyLDQ1ODQwLDQ1ODQxLDQ1ODQzLDQ1ODQ0LDQ1ODQ1LDQ1ODUyLDQ1OTA4LDQ1OTA5LDQ1OTEwLDQ1OTEyLDQ1OTE1LDQ1OTE2LDQ1OTE4LDQ1OTE5LDQ1OTI0LDQ1OTI1LDUz''@;'; put 'put ''Mzk3LDUzMzk4LDUzMzk5LDUzNDAwLDUzNDAxLDUzNDAyLDUzNDAzLDUzNDA0LDUzNDA1LDUzNDA2LDUzNDA3LDUzNDA4LDUzNDA5LDUzNDEwLDUzNDExLDUzNDE0LDUzNDE1LDUzNDE3LDUzNDE4LDUzNDE5LDUzNDIxLDUzNDIyLDUzNDIzLDUzNDI0LDUzNDI1LDUzNDI2LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDUzNDI3LDUzNDMwLDUzNDMyLDUzNDM0LDUzNDM1LDUzNDM2LDUzNDM3LDUzNDM4LDUzNDM5LDUzNDQyLDUzNDQzLDUzNDQ1LDUzNDQ2LDUzNDQ3LDUzNDUwLDUzNDUxLDUzNDUyLDUzNDUzLDUzNDU0LDUzNDU1LDUzNDU4LDUzNDYyLDUzNDYzLDUzNDY0LDUz''@;'; put 'put ''NDY1LDUzNDY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNDY3LDUzNDcwLDUzNDcxLDUzNDczLDUzNDc0LDUzNDc1LDUzNDc3LDUzNDc4LDUzNDc5LDUzNDgwLDUzNDgxLDUzNDgyLDUzNDgzLDUzNDg2LDUzNDkwLDUzNDkxLDUzNDkyLDUzNDkzLDUzNDk0LDUzNDk1LDUzNDk3''@;'; put 'put ''LDUzNDk4LDUzNDk5LDUzNTAwLDUzNTAxLDUzNTAyLDUzNTAzLDUzNTA0LDUzNTA1LDUzNTA2LDUzNTA3LDUzNTA4LDQ1OTI3LDQ1OTI5LDQ1OTMxLDQ1OTM0LDQ1OTM2LDQ1OTM3LDQ1OTQwLDQ1OTQ0LDQ1OTUyLDQ1OTUzLDQ1OTU1LDQ1OTU2LDQ1OTU3LDQ1OTY0LDQ1OTY4LDQ1OTcyLDQ1''@;'; put 'put ''OTg0LDQ1OTg1LDQ1OTkyLDQ1OTk2LDQ2MDIwLDQ2MDIxLDQ2MDI0LDQ2MDI3LDQ2MDI4LDQ2MDMwLDQ2MDMyLDQ2MDM2LDQ2MDM3LDQ2MDM5LDQ2MDQxLDQ2MDQzLDQ2MDQ1LDQ2MDQ4LDQ2MDUyLDQ2MDU2LDQ2MDc2LDQ2MDk2LDQ2MTA0LDQ2MTA4LDQ2MTEyLDQ2MTIwLDQ2MTIxLDQ2MTIz''@;'; put 'put ''LDQ2MTMyLDQ2MTYwLDQ2MTYxLDQ2MTY0LDQ2MTY4LDQ2MTc2LDQ2MTc3LDQ2MTc5LDQ2MTgxLDQ2MTg4LDQ2MjA4LDQ2MjE2LDQ2MjM3LDQ2MjQ0LDQ2MjQ4LDQ2MjUyLDQ2MjYxLDQ2MjYzLDQ2MjY1LDQ2MjcyLDQ2Mjc2LDQ2MjgwLDQ2Mjg4LDQ2MjkzLDQ2MzAwLDQ2MzAxLDQ2MzA0LDQ2''@;'; put 'put ''MzA3LDQ2MzA4LDQ2MzEwLDQ2MzE2LDQ2MzE3LDQ2MzE5LDQ2MzIxLDQ2MzI4LDQ2MzU2LDQ2MzU3LDQ2MzYwLDQ2MzYzLDQ2MzY0LDQ2MzcyLDQ2MzczLDQ2Mzc1LDQ2Mzc2LDQ2Mzc3LDQ2Mzc4LDQ2Mzg0LDQ2Mzg1LDQ2Mzg4LDQ2MzkyLDUzNTA5LDUzNTEwLDUzNTExLDUzNTEyLDUzNTEz''@;'; put 'put ''LDUzNTE0LDUzNTE1LDUzNTE2LDUzNTE4LDUzNTE5LDUzNTIwLDUzNTIxLDUzNTIyLDUzNTIzLDUzNTI0LDUzNTI1LDUzNTI2LDUzNTI3LDUzNTI4LDUzNTI5LDUzNTMwLDUzNTMxLDUzNTMyLDUzNTMzLDUzNTM0LDUzNTM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNTM2LDUz''@;'; put 'put ''NTM3LDUzNTM4LDUzNTM5LDUzNTQwLDUzNTQxLDUzNTQyLDUzNTQzLDUzNTQ0LDUzNTQ1LDUzNTQ2LDUzNTQ3LDUzNTQ4LDUzNTQ5LDUzNTUwLDUzNTUxLDUzNTU0LDUzNTU1LDUzNTU3LDUzNTU4LDUzNTU5LDUzNTYxLDUzNTYzLDUzNTY0LDUzNTY1LDUzNTY2LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDUzNTY3LDUzNTcwLDUzNTc0LDUzNTc1LDUzNTc2LDUzNTc3LDUzNTc4LDUzNTc5LDUzNTgyLDUzNTgzLDUzNTg1LDUzNTg2LDUzNTg3LDUzNTg5LDUzNTkwLDUzNTkxLDUzNTkyLDUzNTkzLDUzNTk0LDUzNTk1LDUzNTk4LDUzNjAwLDUzNjAyLDUzNjAzLDUzNjA0LDUz''@;'; put 'put ''NjA1LDUzNjA2LDUzNjA3LDUzNjA5LDUzNjEwLDUzNjExLDUzNjEzLDQ2NDAwLDQ2NDAxLDQ2NDAzLDQ2NDA0LDQ2NDA1LDQ2NDExLDQ2NDEyLDQ2NDEzLDQ2NDE2LDQ2NDIwLDQ2NDI4LDQ2NDI5LDQ2NDMxLDQ2NDMyLDQ2NDMzLDQ2NDk2LDQ2NDk3LDQ2NTAwLDQ2NTA0LDQ2NTA2LDQ2NTA3''@;'; put 'put ''LDQ2NTEyLDQ2NTEzLDQ2NTE1LDQ2NTE2LDQ2NTE3LDQ2NTIzLDQ2NTI0LDQ2NTI1LDQ2NTI4LDQ2NTMyLDQ2NTQwLDQ2NTQxLDQ2NTQzLDQ2NTQ0LDQ2NTQ1LDQ2NTUyLDQ2NTcyLDQ2NjA4LDQ2NjA5LDQ2NjEyLDQ2NjE2LDQ2NjI5LDQ2NjM2LDQ2NjQ0LDQ2NjY0LDQ2NjkyLDQ2Njk2LDQ2''@;'; put 'put ''NzQ4LDQ2NzQ5LDQ2NzUyLDQ2NzU2LDQ2NzYzLDQ2NzY0LDQ2NzY5LDQ2ODA0LDQ2ODMyLDQ2ODM2LDQ2ODQwLDQ2ODQ4LDQ2ODQ5LDQ2ODUzLDQ2ODg4LDQ2ODg5LDQ2ODkyLDQ2ODk1LDQ2ODk2LDQ2OTA0LDQ2OTA1LDQ2OTA3LDQ2OTE2LDQ2OTIwLDQ2OTI0LDQ2OTMyLDQ2OTMzLDQ2OTQ0''@;'; put 'put ''LDQ2OTQ4LDQ2OTUyLDQ2OTYwLDQ2OTYxLDQ2OTYzLDQ2OTY1LDQ2OTcyLDQ2OTczLDQ2OTc2LDQ2OTgwLDQ2OTg4LDQ2OTg5LDQ2OTkxLDQ2OTkyLDQ2OTkzLDQ2OTk0LDQ2OTk4LDQ2OTk5LDUzNjE0LDUzNjE1LDUzNjE2LDUzNjE3LDUzNjE4LDUzNjE5LDUzNjIwLDUzNjIxLDUzNjIyLDUz''@;'; put 'put ''NjIzLDUzNjI0LDUzNjI1LDUzNjI2LDUzNjI3LDUzNjI5LDUzNjMwLDUzNjMxLDUzNjMyLDUzNjMzLDUzNjM0LDUzNjM1LDUzNjM3LDUzNjM4LDUzNjM5LDUzNjQxLDUzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNjQzLDUzNjQ0LDUzNjQ1LDUzNjQ2LDUzNjQ3LDUzNjQ4''@;'; put 'put ''LDUzNjQ5LDUzNjUwLDUzNjUxLDUzNjUyLDUzNjUzLDUzNjU0LDUzNjU1LDUzNjU2LDUzNjU3LDUzNjU4LDUzNjU5LDUzNjYwLDUzNjYxLDUzNjYyLDUzNjYzLDUzNjY2LDUzNjY3LDUzNjY5LDUzNjcwLDUzNjcxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNjczLDUzNjc0LDUz''@;'; put 'put ''Njc1LDUzNjc2LDUzNjc3LDUzNjc4LDUzNjc5LDUzNjgyLDUzNjg0LDUzNjg2LDUzNjg3LDUzNjg4LDUzNjg5LDUzNjkxLDUzNjkzLDUzNjk0LDUzNjk1LDUzNjk3LDUzNjk4LDUzNjk5LDUzNzAwLDUzNzAxLDUzNzAyLDUzNzAzLDUzNzA0LDUzNzA1LDUzNzA2LDUzNzA3LDUzNzA4LDUzNzA5''@;'; put 'put ''LDUzNzEwLDUzNzExLDQ3ZTMsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcwNDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcxMDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcx''@;'; put 'put ''MTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAsNDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYsNDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcs''@;'; put 'put ''NDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDczMjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDczNDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDcz''@;'; put 'put ''OTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIsNTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgsNTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYs''@;'; put 'put ''NTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3''@;'; put 'put ''NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUsNTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUs''@;'; put 'put ''NTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0''@;'; put 'put ''NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAsNDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEsNDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYs''@;'; put 'put ''NDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2''@;'; put 'put ''OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3MjksNDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEsNDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQs''@;'; put 'put ''NDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4''@;'; put 'put ''MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4MzgsNTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQsNTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEs''@;'; put 'put ''NTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4''@;'; put 'put ''NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMsNTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAsNDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAs''@;'; put 'put ''NDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgw''@;'; put 'put ''NDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAsNDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMsNDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUs''@;'; put 'put ''NDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgxOTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgyMDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgy''@;'; put 'put ''NjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMsNTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEsNTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5Mjks''@;'; put 'put ''NTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5''@;'; put 'put ''NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMsNTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEsNTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAs''@;'; put 'put ''NTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQwMDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgyOTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgz''@;'; put 'put ''MDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQsNDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMsNDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcs''@;'; put 'put ''NDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2''@;'; put 'put ''MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgsNDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUsNDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAs''@;'; put 'put ''NTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQwMzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQwNDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcsNTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgsNTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcs''@;'; put 'put ''NTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQwOTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQxMDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQx''@;'; put 'put ''MTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIsNDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQsNDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQs''@;'; put 'put ''NDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5''@;'; put 'put ''NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAsNDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcsNDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQs''@;'; put 'put ''NDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkzNTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkzNzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQx''@;'; put 'put ''MjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIsNTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAsNTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIs''@;'; put 'put ''NTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQxNzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQxODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUsNTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEsNTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIs''@;'; put 'put ''NTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0''@;'; put 'put ''NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQsNDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgsNDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1Mjgs''@;'; put 'put ''NDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2''@;'; put 'put ''NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYsNDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMsNTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAs''@;'; put 'put ''NTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQyNjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQy''@;'; put 'put ''NzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgsNTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYs''@;'; put 'put ''NTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQzMTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQzMTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQz''@;'; put 'put ''MjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIsNDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEsNDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEs''@;'; put 'put ''NDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5''@;'; put 'put ''MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgsNTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUsNTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAs''@;'; put 'put ''NTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQzMjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQzMzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQz''@;'; put 'put ''NDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgsNTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYs''@;'; put 'put ''NTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQzODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQz''@;'; put 'put ''OTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcsNTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQsNTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYs''@;'; put 'put ''NTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0''@;'; put 'put ''NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDksNTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAsNTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYs''@;'; put 'put ''NTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2''@;'; put 'put ''MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQsNTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAsNTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgs''@;'; put 'put ''NTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0''@;'; put 'put ''NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODksNTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgs''@;'; put 'put ''NTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2''@;'; put 'put ''NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODksNTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQsNTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3Mjgs''@;'; put 'put ''NTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4''@;'; put 'put ''MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQsNTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAsNTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAs''@;'; put 'put ''NTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1''@;'; put 'put ''NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMsNTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1NjksNTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYs''@;'; put 'put ''NTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2''@;'; put 'put ''MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUsNTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYsNTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQs''@;'; put 'put ''NTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEwMDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEwMjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEw''@;'; put 'put ''MzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzksNTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODksNTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUs''@;'; put 'put ''NTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTExNDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTExNzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEy''@;'; put 'put ''MTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDksNTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYsNTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2''@;'; put 'put ''OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIsNTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgsNTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUs''@;'; put 'put ''NTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEyMTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEyMzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEy''@;'; put 'put ''NjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMsNTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgsNTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYs''@;'; put 'put ''NTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1''@;'; put 'put ''NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMsNTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgsNTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQs''@;'; put 'put ''NTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3''@;'; put 'put ''NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcsNTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUsNTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4''@;'; put 'put ''MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAsNTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUsNTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAs''@;'; put 'put ''NTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5''@;'; put 'put ''MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTJlMyw1MjAwMSw1MjAzMyw1MjA0MCw1MjA0MSw1MjA0NCw1MjA0OCw1MjA1Niw1MjA1Nyw1MjA2MSw1MjA2OCw1MjA4OCw1MjA4OSw1MjEyNCw1MjE1Miw1MjE4MCw1MjE5Niw1''@;'; put 'put ''MjE5OSw1MjIwMSw1MjIzNiw1MjIzNyw1MjI0MCw1MjI0NCw1MjI1Miw1MjI1Myw1MjI1Nyw1MjI1OCw1MjI2Myw1MjI2NCw1MjI2NSw1MjI2OCw1MjI3MCw1MjI3Miw1MjI4MCw1MjI4MSw1MjI4Myw1NDg0NSw1NDg0Niw1NDg0Nyw1NDg0OSw1NDg1MCw1NDg1MSw1NDg1Miw1NDg1NCw1NDg1''@;'; put 'put ''NSw1NDg1OCw1NDg2MCw1NDg2Miw1NDg2Myw1NDg2NCw1NDg2Niw1NDg2Nyw1NDg3MCw1NDg3MSw1NDg3Myw1NDg3NCw1NDg3NSw1NDg3Nyw1NDg3OCw1NDg3OSw1NDg4MCw1NDg4MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDg4Miw1NDg4Myw1NDg4NCw1NDg4NSw1NDg4Niw1''@;'; put 'put ''NDg4OCw1NDg5MCw1NDg5MSw1NDg5Miw1NDg5Myw1NDg5NCw1NDg5NSw1NDg5OCw1NDg5OSw1NDkwMSw1NDkwMiw1NDkwMyw1NDkwNCw1NDkwNSw1NDkwNiw1NDkwNyw1NDkwOCw1NDkwOSw1NDkxMCw1NDkxMSw1NDkxMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDkxMyw1NDkx''@;'; put 'put ''NCw1NDkxNiw1NDkxOCw1NDkxOSw1NDkyMCw1NDkyMSw1NDkyMiw1NDkyMyw1NDkyNiw1NDkyNyw1NDkyOSw1NDkzMCw1NDkzMSw1NDkzMyw1NDkzNCw1NDkzNSw1NDkzNiw1NDkzNyw1NDkzOCw1NDkzOSw1NDk0MCw1NDk0Miw1NDk0NCw1NDk0Niw1NDk0Nyw1NDk0OCw1NDk0OSw1NDk1MCw1''@;'; put 'put ''NDk1MSw1NDk1Myw1NDk1NCw1MjI4NCw1MjI4NSw1MjI4Niw1MjI5Miw1MjI5Myw1MjI5Niw1MjMwMCw1MjMwOCw1MjMwOSw1MjMxMSw1MjMxMiw1MjMxMyw1MjMyMCw1MjMyNCw1MjMyNiw1MjMyOCw1MjMzNiw1MjM0MSw1MjM3Niw1MjM3Nyw1MjM4MCw1MjM4NCw1MjM5Miw1MjM5Myw1MjM5''@;'; put 'put ''NSw1MjM5Niw1MjM5Nyw1MjQwNCw1MjQwNSw1MjQwOCw1MjQxMiw1MjQyMCw1MjQyMSw1MjQyMyw1MjQyNSw1MjQzMiw1MjQzNiw1MjQ1Miw1MjQ2MCw1MjQ2NCw1MjQ4MSw1MjQ4OCw1MjQ4OSw1MjQ5Miw1MjQ5Niw1MjUwNCw1MjUwNSw1MjUwNyw1MjUwOSw1MjUxNiw1MjUyMCw1MjUyNCw1''@;'; put 'put ''MjUzNyw1MjU3Miw1MjU3Niw1MjU4MCw1MjU4OCw1MjU4OSw1MjU5MSw1MjU5Myw1MjYwMCw1MjYxNiw1MjYyOCw1MjYyOSw1MjYzMiw1MjYzNiw1MjY0NCw1MjY0NSw1MjY0Nyw1MjY0OSw1MjY1Niw1MjY3Niw1MjY4NCw1MjY4OCw1MjcxMiw1MjcxNiw1MjcyMCw1MjcyOCw1MjcyOSw1Mjcz''@;'; put 'put ''MSw1MjczMyw1Mjc0MCw1Mjc0NCw1Mjc0OCw1Mjc1Niw1Mjc2MSw1Mjc2OCw1Mjc2OSw1Mjc3Miw1Mjc3Niw1Mjc4NCw1Mjc4NSw1Mjc4Nyw1Mjc4OSw1NDk1NSw1NDk1Nyw1NDk1OCw1NDk1OSw1NDk2MSw1NDk2Miw1NDk2Myw1NDk2NCw1NDk2NSw1NDk2Niw1NDk2Nyw1NDk2OCw1NDk3MCw1''@;'; put 'put ''NDk3Miw1NDk3Myw1NDk3NCw1NDk3NSw1NDk3Niw1NDk3Nyw1NDk3OCw1NDk3OSw1NDk4Miw1NDk4Myw1NDk4NSw1NDk4Niw1NDk4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDk4OSw1NDk5MCw1NDk5MSw1NDk5Miw1NDk5NCw1NDk5NSw1NDk5Nyw1NDk5OCw1NWUzLDU1MDAy''@;'; put 'put ''LDU1MDAzLDU1MDA0LDU1MDA1LDU1MDA2LDU1MDA3LDU1MDA5LDU1MDEwLDU1MDExLDU1MDEzLDU1MDE0LDU1MDE1LDU1MDE3LDU1MDE4LDU1MDE5LDU1MDIwLDU1MDIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDU1MDIyLDU1MDIzLDU1MDI1LDU1MDI2LDU1MDI3LDU1MDI4LDU1''@;'; put 'put ''MDMwLDU1MDMxLDU1MDMyLDU1MDMzLDU1MDM0LDU1MDM1LDU1MDM4LDU1MDM5LDU1MDQxLDU1MDQyLDU1MDQzLDU1MDQ1LDU1MDQ2LDU1MDQ3LDU1MDQ4LDU1MDQ5LDU1MDUwLDU1MDUxLDU1MDUyLDU1MDUzLDU1MDU0LDU1MDU1LDU1MDU2LDU1MDU4LDU1MDU5LDU1MDYwLDUyODI0LDUyODI1''@;'; put 'put ''LDUyODI4LDUyODMxLDUyODMyLDUyODMzLDUyODQwLDUyODQxLDUyODQzLDUyODQ1LDUyODUyLDUyODUzLDUyODU2LDUyODYwLDUyODY4LDUyODY5LDUyODcxLDUyODczLDUyODgwLDUyODgxLDUyODg0LDUyODg4LDUyODk2LDUyODk3LDUyODk5LDUyOTAwLDUyOTAxLDUyOTA4LDUyOTA5LDUy''@;'; put 'put ''OTI5LDUyOTY0LDUyOTY1LDUyOTY4LDUyOTcxLDUyOTcyLDUyOTgwLDUyOTgxLDUyOTgzLDUyOTg0LDUyOTg1LDUyOTkyLDUyOTkzLDUyOTk2LDUzZTMsNTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQsNTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgs''@;'; put 'put ''NTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMxMzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMyMTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMy''@;'; put 'put ''NDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcsNTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUsNTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYs''@;'; put 'put ''NTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUwOTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUxMDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUx''@;'; put 'put ''MTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIsNTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEs''@;'; put 'put ''NTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUxNzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUxNzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMz''@;'; put 'put ''MzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0MjksNTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgsNTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0Njgs''@;'; put 'put ''NTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2''@;'; put 'put ''MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAsNTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3NjcsNTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAs''@;'; put 'put ''NTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUxOTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUyMDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYsNTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUsNTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMs''@;'; put 'put ''NTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTRlMyw1NDAwMSw1NDAwNCw1NDAwOCw1NDAxNiw1NDAxNyw1NDAxOSw1NDAyMSw1NDAyOCw1NDAyOSw1NDAzMCw1NDAzMiw1NDAzNiw1NDAzOCw1NDA0NCw1NDA0NSw1NDA0Nyw1NDA0OCw1NDA0OSw1NDA1Myw1NDA1Niw1NDA1Nyw1NDA2''@;'; put 'put ''MCw1NDA2NCw1NDA3Miw1NDA3Myw1NDA3NSw1NDA3Niw1NDA3Nyw1NDA4NCw1NDA4NSw1NDE0MCw1NDE0MSw1NDE0NCw1NDE0OCw1NDE1Niw1NDE1Nyw1NDE1OSw1NDE2MCw1NDE2MSw1NDE2OCw1NDE2OSw1NDE3Miw1NDE3Niw1NDE4NCw1NDE4NSw1NDE4Nyw1NDE4OSw1NDE5Niw1NDIwMCw1''@;'; put 'put ''NDIwNCw1NDIxMiw1NDIxMyw1NDIxNiw1NDIxNyw1NDIyNCw1NDIzMiw1NDI0MSw1NDI0Myw1NDI1Miw1NDI1Myw1NDI1Niw1NDI2MCw1NDI2OCw1NDI2OSw1NDI3MSw1NDI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI4MCw1NDMwMSw1NDMzNiw1NDM0MCw1NDM2NCw1NDM2OCw1NDM3Miw1NDM4MSw1NDM4Myw1NDM5Miw1NDM5Myw1NDM5Niw1NDM5OSw1''@;'; put 'put ''NDQwMCw1NDQwMiw1NDQwOCw1NDQwOSw1NDQxMSw1NDQxMyw1NDQyMCw1NDQ0MSw1NDQ3Niw1NDQ4MCw1NDQ4NCw1NDQ5Miw1NDQ5NSw1NDUwNCw1NDUwOCw1NDUxMiw1NDUyMCw1NDUyMyw1NDUyNSw1NDUzMiw1NDUzNiw1NDU0MCw1NDU0OCw1NDU0OSw1NDU1MSw1NDU4OCw1NDU4OSw1NDU5''@;'; put 'put ''Miw1NDU5Niw1NDYwNCw1NDYwNSw1NDYwNyw1NDYwOSw1NDYxNiw1NDYxNyw1NDYyMCw1NDYyNCw1NDYyOSw1NDYzMiw1NDYzMyw1NDYzNSw1NDYzNyw1NDY0NCw1NDY0NSw1NDY0OCw1NDY1Miw1NDY2MCw1NDY2MSw1NDY2Myw1NDY2NCw1NDY2NSw1NDY3Miw1NDY5Myw1NDcyOCw1NDcyOSw1''@;'; put 'put ''NDczMiw1NDczNiw1NDczOCw1NDc0NCw1NDc0NSw1NDc0Nyw1NDc0OSw1NDc1Niw1NDc1Nyw1NDc2MCw1NDc2NCw1NDc3Miw1NDc3Myw1NDc3NSw1NDc3Nyw1NDc4NCw1NDc4NSw1NDc4OCw1NDc5Miw1NDgwMCw1NDgwMSw1NDgwMyw1NDgwNCw1NDgwNSw1NDgxMiw1NDgxNixudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDgyMCw1NDgyOSw1NDg0MCw1NDg0MSw1''@;'; put 'put ''NDg0NCw1NDg0OCw1NDg1Myw1NDg1Niw1NDg1Nyw1NDg1OSw1NDg2MSw1NDg2NSw1NDg2OCw1NDg2OSw1NDg3Miw1NDg3Niw1NDg4Nyw1NDg4OSw1NDg5Niw1NDg5Nyw1NDkwMCw1NDkxNSw1NDkxNyw1NDkyNCw1NDkyNSw1NDkyOCw1NDkzMiw1NDk0MSw1NDk0Myw1NDk0NSw1NDk1Miw1NDk1''@;'; put 'put ''Niw1NDk2MCw1NDk2OSw1NDk3MSw1NDk4MCw1NDk4MSw1NDk4NCw1NDk4OCw1NDk5Myw1NDk5Niw1NDk5OSw1NTAwMSw1NTAwOCw1NTAxMiw1NTAxNiw1NTAyNCw1NTAyOSw1NTAzNiw1NTAzNyw1NTA0MCw1NTA0NCw1NTA1Nyw1NTA2NCw1NTA2NSw1NTA2OCw1NTA3Miw1NTA4MCw1NTA4MSw1''@;'; put 'put ''NTA4Myw1NTA4NSw1NTA5Miw1NTA5Myw1NTA5Niw1NTEwMCw1NTEwOCw1NTExMSw1NTExMyw1NTEyMCw1NTEyMSw1NTEyNCw1NTEyNiw1NTEyNyw1NTEyOCw1NTEyOSw1NTEzNiw1NTEzNyw1NTEzOSw1NTE0MSw1NTE0NSw1NTE0OCw1NTE1Miw1NTE1Niw1NTE2NCw1NTE2NSw1NTE2OSw1NTE3''@;'; put 'put ''Niw1NTE3Nyw1NTE4MCw1NTE4NCw1NTE5Miw1NTE5Myw1NTE5NSw1NTE5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMjg1LDIwMzM5''@;'; put 'put ''LDIwNTUxLDIwNzI5LDIxMTUyLDIxNDg3LDIxNjIxLDIxNzMzLDIyMDI1LDIzMjMzLDIzNDc4LDI2MjQ3LDI2NTUwLDI2NTUxLDI2NjA3LDI3NDY4LDI5NjM0LDMwMTQ2LDMxMjkyLDMzNDk5LDMzNTQwLDM0OTAzLDM0OTUyLDM1MzgyLDM2MDQwLDM2MzAzLDM2NjAzLDM2ODM4LDM5MzgxLDIx''@;'; put 'put ''MDUxLDIxMzY0LDIxNTA4LDI0NjgyLDI0OTMyLDI3NTgwLDI5NjQ3LDMzMDUwLDM1MjU4LDM1MjgyLDM4MzA3LDIwMzU1LDIxMDAyLDIyNzE4LDIyOTA0LDIzMDE0LDI0MTc4LDI0MTg1LDI1MDMxLDI1NTM2LDI2NDM4LDI2NjA0LDI2NzUxLDI4NTY3LDMwMjg2LDMwNDc1LDMwOTY1LDMxMjQw''@;'; put 'put ''LDMxNDg3LDMxNzc3LDMyOTI1LDMzMzkwLDMzMzkzLDM1NTYzLDM4MjkxLDIwMDc1LDIxOTE3LDI2MzU5LDI4MjEyLDMwODgzLDMxNDY5LDMzODgzLDM1MDg4LDM0NjM4LDM4ODI0LDIxMjA4LDIyMzUwLDIyNTcwLDIzODg0LDI0ODYzLDI1MDIyLDI1MTIxLDI1OTU0LDI2NTc3LDI3MjA0LDI4''@;'; put 'put ''MTg3LDI5OTc2LDMwMTMxLDMwNDM1LDMwNjQwLDMyMDU4LDM3MDM5LDM3OTY5LDM3OTcwLDQwODUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMjgzLDIzNzI0LDMwMDAyLDMyOTg3LDM3NDQwLDM4Mjk2LDIxMDgzLDIyNTM2LDIzMDA0LDIzNzEzLDIzODMxLDI0MjQ3LDI0Mzc4LDI0Mzk0LDI0OTUxLDI3NzQzLDMwMDc0LDMwMDg2LDMxOTY4LDMyMTE1LDMy''@;'; put 'put ''MTc3LDMyNjUyLDMzMTA4LDMzMzEzLDM0MTkzLDM1MTM3LDM1NjExLDM3NjI4LDM4NDc3LDQwMDA3LDIwMTcxLDIwMjE1LDIwNDkxLDIwOTc3LDIyNjA3LDI0ODg3LDI0ODk0LDI0OTM2LDI1OTEzLDI3MTE0LDI4NDMzLDMwMTE3LDMwMzQyLDMwNDIyLDMxNjIzLDMzNDQ1LDMzOTk1LDYzNzQ0''@;'; put 'put ''LDM3Nzk5LDM4MjgzLDIxODg4LDIzNDU4LDIyMzUzLDYzNzQ1LDMxOTIzLDMyNjk3LDM3MzAxLDIwNTIwLDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1NDU0LDI1ODE4LDI1ODMxLDI4MTkyLDI4ODQ0LDMxMDY3LDM2MzE3LDM2MzgyLDYzNzQ2LDM2OTg5LDM3NDQ1LDM3NjI0LDIwMDk0LDIw''@;'; put 'put ''MjE0LDIwNTgxLDI0MDYyLDI0MzE0LDI0ODM4LDI2OTY3LDMzMTM3LDM0Mzg4LDM2NDIzLDM3NzQ5LDM5NDY3LDIwMDYyLDIwNjI1LDI2NDgwLDI2Njg4LDIwNzQ1LDIxMTMzLDIxMTM4LDI3Mjk4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwNjUyLDM3MzkyLDQwNjYwLDIxMTYzLDI0NjIzLDM2ODUwLDIwNTUyLDI1MDAxLDI1NTgxLDI1ODAyLDI2Njg0LDI3''@;'; put 'put ''MjY4LDI4NjA4LDMzMTYwLDM1MjMzLDM4NTQ4LDIyNTMzLDI5MzA5LDI5MzU2LDI5OTU2LDMyMTIxLDMyMzY1LDMyOTM3LDM1MjExLDM1NzAwLDM2OTYzLDQwMjczLDI1MjI1LDI3NzcwLDI4NTAwLDMyMDgwLDMyNTcwLDM1MzYzLDIwODYwLDI0OTA2LDMxNjQ1LDM1NjA5LDM3NDYzLDM3Nzcy''@;'; put 'put ''LDIwMTQwLDIwNDM1LDIwNTEwLDIwNjcwLDIwNzQyLDIxMTg1LDIxMTk3LDIxMzc1LDIyMzg0LDIyNjU5LDI0MjE4LDI0NDY1LDI0OTUwLDI1MDA0LDI1ODA2LDI1OTY0LDI2MjIzLDI2Mjk5LDI2MzU2LDI2Nzc1LDI4MDM5LDI4ODA1LDI4OTEzLDI5ODU1LDI5ODYxLDI5ODk4LDMwMTY5LDMw''@;'; put 'put ''ODI4LDMwOTU2LDMxNDU1LDMxNDc4LDMyMDY5LDMyMTQ3LDMyNzg5LDMyODMxLDMzMDUxLDMzNjg2LDM1Njg2LDM2NjI5LDM2ODg1LDM3ODU3LDM4OTE1LDM4OTY4LDM5NTE0LDM5OTEyLDIwNDE4LDIxODQzLDIyNTg2LDIyODY1LDIzMzk1LDIzNjIyLDI0NzYwLDI1MTA2LDI2NjkwLDI2ODAw''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODU2LDI4MzMwLDMw''@;'; put 'put ''MDI4LDMwMzI4LDMwOTI2LDMxMjkzLDMxOTk1LDMyMzYzLDMyMzgwLDM1MzM2LDM1NDg5LDM1OTAzLDM4NTQyLDQwMzg4LDIxNDc2LDIxNDgxLDIxNTc4LDIxNjE3LDIyMjY2LDIyOTkzLDIzMzk2LDIzNjExLDI0MjM1LDI1MzM1LDI1OTExLDI1OTI1LDI1OTcwLDI2MjcyLDI2NTQzLDI3MDcz''@;'; put 'put ''LDI3ODM3LDMwMjA0LDMwMzUyLDMwNTkwLDMxMjk1LDMyNjYwLDMyNzcxLDMyOTI5LDMzMTY3LDMzNTEwLDMzNTMzLDMzNzc2LDM0MjQxLDM0ODY1LDM0OTk2LDM1NDkzLDYzNzQ3LDM2NzY0LDM3Njc4LDM4NTk5LDM5MDE1LDM5NjQwLDQwNzIzLDIxNzQxLDI2MDExLDI2MzU0LDI2NzY3LDMx''@;'; put 'put ''Mjk2LDM1ODk1LDQwMjg4LDIyMjU2LDIyMzcyLDIzODI1LDI2MTE4LDI2ODAxLDI2ODI5LDI4NDE0LDI5NzM2LDM0OTc0LDM5OTA4LDI3NzUyLDYzNzQ4LDM5NTkyLDIwMzc5LDIwODQ0LDIwODQ5LDIxMTUxLDIzMzgwLDI0MDM3LDI0NjU2LDI0Njg1LDI1MzI5LDI1NTExLDI1OTE1LDI5NjU3''@;'; put 'put ''LDMxMzU0LDM0NDY3LDM2MDAyLDM4Nzk5LDIwMDE4LDIzNTIxLDI1MDk2LDI2NTI0LDI5OTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTg1LDMzNzQ3LDM1NDYzLDM1NTA2LDM2MzI4LDM2OTQyLDM3NzA3LDM4OTgyLDI0Mjc1LDI3MTEyLDM0MzAzLDM3MTAxLDYzNzQ5LDIwODk2LDIzNDQ4LDIzNTMyLDI0OTMxLDI2ODc0LDI3NDU0LDI4NzQ4LDI5NzQz''@;'; put 'put ''LDI5OTEyLDMxNjQ5LDMyNTkyLDMzNzMzLDM1MjY0LDM2MDExLDM4MzY0LDM5MjA4LDIxMDM4LDI0NjY5LDI1MzI0LDM2ODY2LDIwMzYyLDIwODA5LDIxMjgxLDIyNzQ1LDI0MjkxLDI2MzM2LDI3OTYwLDI4ODI2LDI5Mzc4LDI5NjU0LDMxNTY4LDMzMDA5LDM3OTc5LDIxMzUwLDI1NDk5LDMy''@;'; put 'put ''NjE5LDIwMDU0LDIwNjA4LDIyNjAyLDIyNzUwLDI0NjE4LDI0ODcxLDI1Mjk2LDI3MDg4LDM5NzQ1LDIzNDM5LDMyMDI0LDMyOTQ1LDM2NzAzLDIwMTMyLDIwNjg5LDIxNjc2LDIxOTMyLDIzMzA4LDIzOTY4LDI0MDM5LDI1ODk4LDI1OTM0LDI2NjU3LDI3MjExLDI5NDA5LDMwMzUwLDMwNzAz''@;'; put 'put ''LDMyMDk0LDMyNzYxLDMzMTg0LDM0MTI2LDM0NTI3LDM2NjExLDM2Njg2LDM3MDY2LDM5MTcxLDM5NTA5LDM5ODUxLDE5OTkyLDIwMDM3LDIwMDYxLDIwMTY3LDIwNDY1LDIwODU1LDIxMjQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMzEyLDIxNDc1LDIxNDc3LDIxNjQ2LDIyMDM2LDIyMzg5LDIyNDM0LDIzNDk1LDIzOTQzLDI0MjcyLDI1MDg0LDI1MzA0''@;'; put 'put ''LDI1OTM3LDI2NTUyLDI2NjAxLDI3MDgzLDI3NDcyLDI3NTkwLDI3NjI4LDI3NzE0LDI4MzE3LDI4NzkyLDI5Mzk5LDI5NTkwLDI5Njk5LDMwNjU1LDMwNjk3LDMxMzUwLDMyMTI3LDMyNzc3LDMzMjc2LDMzMjg1LDMzMjkwLDMzNTAzLDM0OTE0LDM1NjM1LDM2MDkyLDM2NTQ0LDM2ODgxLDM3''@;'; put 'put ''MDQxLDM3NDc2LDM3NTU4LDM5Mzc4LDM5NDkzLDQwMTY5LDQwNDA3LDQwODYwLDIyMjgzLDIzNjE2LDMzNzM4LDM4ODE2LDM4ODI3LDQwNjI4LDIxNTMxLDMxMzg0LDMyNjc2LDM1MDMzLDM2NTU3LDM3MDg5LDIyNTI4LDIzNjI0LDI1NDk2LDMxMzkxLDIzNDcwLDI0MzM5LDMxMzUzLDMxNDA2''@;'; put 'put ''LDMzNDIyLDM2NTI0LDIwNTE4LDIxMDQ4LDIxMjQwLDIxMzY3LDIyMjgwLDI1MzMxLDI1NDU4LDI3NDAyLDI4MDk5LDMwNTE5LDIxNDEzLDI5NTI3LDM0MTUyLDM2NDcwLDM4MzU3LDI2NDI2LDI3MzMxLDI4NTI4LDM1NDM3LDM2NTU2LDM5MjQzLDYzNzUwLDI2MjMxLDI3NTEyLDM2MDIwLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM5NzQwLDYzNzUxLDIxNDgz''@;'; put 'put ''LDIyMzE3LDIyODYyLDI1NTQyLDI3MTMxLDI5Njc0LDMwNzg5LDMxNDE4LDMxNDI5LDMxOTk4LDMzOTA5LDM1MjE1LDM2MjExLDM2OTE3LDM4MzEyLDIxMjQzLDIyMzQzLDMwMDIzLDMxNTg0LDMzNzQwLDM3NDA2LDYzNzUyLDI3MjI0LDIwODExLDIxMDY3LDIxMTI3LDI1MTE5LDI2ODQwLDI2''@;'; put 'put ''OTk3LDM4NTUzLDIwNjc3LDIxMTU2LDIxMjIwLDI1MDI3LDI2MDIwLDI2NjgxLDI3MTM1LDI5ODIyLDMxNTYzLDMzNDY1LDMzNzcxLDM1MjUwLDM1NjQxLDM2ODE3LDM5MjQxLDYzNzUzLDIwMTcwLDIyOTM1LDI1ODEwLDI2MTI5LDI3Mjc4LDI5NzQ4LDMxMTA1LDMxMTY1LDMzNDQ5LDM0OTQy''@;'; put 'put ''LDM0OTQzLDM1MTY3LDYzNzU0LDM3NjcwLDIwMjM1LDIxNDUwLDI0NjEzLDI1MjAxLDI3NzYyLDMyMDI2LDMyMTAyLDIwMTIwLDIwODM0LDMwNjg0LDMyOTQzLDIwMjI1LDIwMjM4LDIwODU0LDIwODY0LDIxOTgwLDIyMTIwLDIyMzMxLDIyNTIyLDIyNTI0LDIyODA0LDIyODU1LDIyOTMxLDIz''@;'; put 'put ''NDkyLDIzNjk2LDIzODIyLDI0MDQ5LDI0MTkwLDI0NTI0LDI1MjE2LDI2MDcxLDI2MDgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2Mzk4LDI2Mzk5LDI2NDYyLDI2ODI3LDI2ODIwLDI3MjMxLDI3NDUwLDI3NjgzLDI3NzczLDI3Nzc4LDI4MTAzLDI5NTkyLDI5NzM0LDI5NzM4LDI5ODI2LDI5ODU5LDMwMDcyLDMwMDc5LDMwODQ5LDMwOTU5LDMxMDQxLDMx''@;'; put 'put ''MDQ3LDMxMDQ4LDMxMDk4LDMxNjM3LDMyZTMsMzIxODYsMzI2NDgsMzI3NzQsMzI4MTMsMzI5MDgsMzUzNTIsMzU2NjMsMzU5MTIsMzYyMTUsMzc2NjUsMzc2NjgsMzkxMzgsMzkyNDksMzk0MzgsMzk0MzksMzk1MjUsNDA1OTQsMzIyMDIsMjAzNDIsMjE1MTMsMjUzMjYsMjY3MDgsMzczMjks''@;'; put 'put ''MjE5MzEsMjA3OTQsNjM3NTUsNjM3NTYsMjMwNjgsMjUwNjIsNjM3NTcsMjUyOTUsMjUzNDMsNjM3NTgsNjM3NTksNjM3NjAsNjM3NjEsNjM3NjIsNjM3NjMsMzcwMjcsNjM3NjQsNjM3NjUsNjM3NjYsNjM3NjcsNjM3NjgsMzU1ODIsNjM3NjksNjM3NzAsNjM3NzEsNjM3NzIsMjYyNjIsNjM3''@;'; put 'put ''NzMsMjkwMTQsNjM3NzQsNjM3NzUsMzg2MjcsNjM3NzYsMjU0MjMsMjU0NjYsMjEzMzUsNjM3NzcsMjY1MTEsMjY5NzYsMjgyNzUsNjM3NzgsMzAwMDcsNjM3NzksNjM3ODAsNjM3ODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIwMTMsNjM3ODIsNjM3ODMsMzQ5MzAsMjIyMTgsMjMwNjQsNjM3ODQsNjM3ODUsNjM3ODYsNjM3ODcsNjM3ODgsMjAwMzUsNjM3''@;'; put 'put ''ODksMjA4MzksMjI4NTYsMjY2MDgsMzI3ODQsNjM3OTAsMjI4OTksMjQxODAsMjU3NTQsMzExNzgsMjQ1NjUsMjQ2ODQsMjUyODgsMjU0NjcsMjM1MjcsMjM1MTEsMjExNjIsNjM3OTEsMjI5MDAsMjQzNjEsMjQ1OTQsNjM3OTIsNjM3OTMsNjM3OTQsMjk3ODUsNjM3OTUsNjM3OTYsNjM3OTcs''@;'; put 'put ''NjM3OTgsNjM3OTksNjM4MDAsMzkzNzcsNjM4MDEsNjM4MDIsNjM4MDMsNjM4MDQsNjM4MDUsNjM4MDYsNjM4MDcsNjM4MDgsNjM4MDksNjM4MTAsNjM4MTEsMjg2MTEsNjM4MTIsNjM4MTMsMzMyMTUsMzY3ODYsMjQ4MTcsNjM4MTQsNjM4MTUsMzMxMjYsNjM4MTYsNjM4MTcsMjM2MTUsNjM4''@;'; put 'put ''MTgsNjM4MTksNjM4MjAsNjM4MjEsNjM4MjIsNjM4MjMsNjM4MjQsNjM4MjUsMjMyNzMsMzUzNjUsMjY0OTEsMzIwMTYsNjM4MjYsNjM4MjcsNjM4MjgsNjM4MjksNjM4MzAsNjM4MzEsMzMwMjEsNjM4MzIsNjM4MzMsMjM2MTIsMjc4NzcsMjEzMTEsMjgzNDYsMjI4MTAsMzM1OTAsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjAwMjUsMjAxNTAsMjAyOTQsMjE5''@;'; put 'put ''MzQsMjIyOTYsMjI3MjcsMjQ0MDYsMjYwMzksMjYwODYsMjcyNjQsMjc1NzMsMjgyMzcsMzA3MDEsMzE0NzEsMzE3NzQsMzIyMjIsMzQ1MDcsMzQ5NjIsMzcxNzAsMzc3MjMsMjU3ODcsMjg2MDYsMjk1NjIsMzAxMzYsMzY5NDgsMjE4NDYsMjIzNDksMjUwMTgsMjU4MTIsMjYzMTEsMjgxMjks''@;'; put 'put ''MjgyNTEsMjg1MjUsMjg2MDEsMzAxOTIsMzI4MzUsMzMyMTMsMzQxMTMsMzUyMDMsMzU1MjcsMzU2NzQsMzc2NjMsMjc3OTUsMzAwMzUsMzE1NzIsMzYzNjcsMzY5NTcsMjE3NzYsMjI1MzAsMjI2MTYsMjQxNjIsMjUwOTUsMjU3NTgsMjY4NDgsMzAwNzAsMzE5NTgsMzQ3MzksNDA2ODAsMjAx''@;'; put 'put ''OTUsMjI0MDgsMjIzODIsMjI4MjMsMjM1NjUsMjM3MjksMjQxMTgsMjQ0NTMsMjUxNDAsMjU4MjUsMjk2MTksMzMyNzQsMzQ5NTUsMzYwMjQsMzg1MzgsNDA2NjcsMjM0MjksMjQ1MDMsMjQ3NTUsMjA0OTgsMjA5OTIsMjEwNDAsMjIyOTQsMjI1ODEsMjI2MTUsMjM1NjYsMjM2NDgsMjM3OTgs''@;'; put 'put ''MjM5NDcsMjQyMzAsMjQ0NjYsMjQ3NjQsMjUzNjEsMjU0ODEsMjU2MjMsMjY2OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NzMsMjczMzAsMjgxMjAsMjgxOTMsMjgzNzIsMjg2NDQsMjkxODIsMzA0MjgsMzA1ODUsMzExNTMsMzEyOTEsMzM3OTYsMzUyNDEsMzYwNzcsMzYzMzksMzY0MjQsMzY4NjcsMzY4ODQsMzY5NDcsMzcxMTcsMzc3MDksMzg1MTgs''@;'; put 'put ''Mzg4NzYsMjc2MDIsMjg2NzgsMjkyNzIsMjkzNDYsMjk1NDQsMzA1NjMsMzExNjcsMzE3MTYsMzI0MTEsMzU3MTIsMjI2OTcsMjQ3NzUsMjU5NTgsMjYxMDksMjYzMDIsMjc3ODgsMjg5NTgsMjkxMjksMzU5MzAsMzg5MzEsMjAwNzcsMzEzNjEsMjAxODksMjA5MDgsMjA5NDEsMjEyMDUsMjE1''@;'; put 'put ''MTYsMjQ5OTksMjY0ODEsMjY3MDQsMjY4NDcsMjc5MzQsMjg1NDAsMzAxNDAsMzA2NDMsMzE0NjEsMzMwMTIsMzM4OTEsMzc1MDksMjA4MjgsMjYwMDcsMjY0NjAsMjY1MTUsMzAxNjgsMzE0MzEsMzM2NTEsNjM4MzQsMzU5MTAsMzY4ODcsMzg5NTcsMjM2NjMsMzMyMTYsMzM0MzQsMzY5Mjks''@;'; put 'put ''MzY5NzUsMzczODksMjQ0NzEsMjM5NjUsMjcyMjUsMjkxMjgsMzAzMzEsMzE1NjEsMzQyNzYsMzU1ODgsMzcxNTksMzk0NzIsMjE4OTUsMjUwNzgsNjM4MzUsMzAzMTMsMzI2NDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQzNjcsMzQ3NDYsMzUwNjQsMzcwMDcsNjM4MzYsMjc5MzEsMjg4ODksMjk2NjIsMzIwOTcsMzM4NTMsNjM4MzcsMzcyMjYsMzk0MDks''@;'; put 'put ''NjM4MzgsMjAwOTgsMjEzNjUsMjczOTYsMjc0MTAsMjg3MzQsMjkyMTEsMzQzNDksNDA0NzgsMjEwNjgsMzY3NzEsMjM4ODgsMjU4MjksMjU5MDAsMjc0MTQsMjg2NTEsMzE4MTEsMzI0MTIsMzQyNTMsMzUxNzIsMzUyNjEsMjUyODksMzMyNDAsMzQ4NDcsMjQyNjYsMjYzOTEsMjgwMTAsMjk0''@;'; put 'put ''MzYsMjk3MDEsMjk4MDcsMzQ2OTAsMzcwODYsMjAzNTgsMjM4MjEsMjQ0ODAsMzM4MDIsMjA5MTksMjU1MDQsMzAwNTMsMjAxNDIsMjA0ODYsMjA4NDEsMjA5MzcsMjY3NTMsMjcxNTMsMzE5MTgsMzE5MjEsMzE5NzUsMzMzOTEsMzU1MzgsMzY2MzUsMzczMjcsMjA0MDYsMjA3OTEsMjEyMzcs''@;'; put 'put ''MjE1NzAsMjQzMDAsMjQ5NDIsMjUxNTAsMjYwNTMsMjczNTQsMjg2NzAsMzEwMTgsMzQyNjgsMzQ4NTEsMzgzMTcsMzk1MjIsMzk1MzAsNDA1OTksNDA2NTQsMjExNDcsMjYzMTAsMjc1MTEsMjg3MDEsMzEwMTksMzY3MDYsMzg3MjIsMjQ5NzYsMjUwODgsMjU4OTEsMjg0NTEsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkwMDEsMjk4MzMsMzIyNDQsMzI4Nzks''@;'; put 'put ''MzQwMzAsMzY2NDYsMzY4OTksMzc3MDYsMjA5MjUsMjEwMTUsMjExNTUsMjc5MTYsMjg4NzIsMzUwMTAsMjQyNjUsMjU5ODYsMjc1NjYsMjg2MTAsMzE4MDYsMjk1NTcsMjAxOTYsMjAyNzgsMjIyNjUsNjM4MzksMjM3MzgsMjM5OTQsMjQ2MDQsMjk2MTgsMzE1MzMsMzI2NjYsMzI3MTgsMzI4''@;'; put 'put ''MzgsMzY4OTQsMzc0MjgsMzg2NDYsMzg3MjgsMzg5MzYsNDA4MDEsMjAzNjMsMjg1ODMsMzExNTAsMzczMDAsMzg1ODMsMjEyMTQsNjM4NDAsMjU3MzYsMjU3OTYsMjczNDcsMjg1MTAsMjg2OTYsMjkyMDAsMzA0MzksMzI3NjksMzQzMTAsMzQzOTYsMzYzMzUsMzY2MTMsMzg3MDYsMzk3OTEs''@;'; put 'put ''NDA0NDIsNDA1NjUsMzA4NjAsMzExMDMsMzIxNjAsMzM3MzcsMzc2MzYsNDA1NzUsNDA1OTUsMzU1NDIsMjI3NTEsMjQzMjQsMjY0MDcsMjg3MTEsMjk5MDMsMzE4NDAsMzI4OTQsMjA3NjksMjg3MTIsMjkyODIsMzA5MjIsMzYwMzQsMzYwNTgsMzYwODQsMzg2NDcsMjAxMDIsMjA2OTgsMjM1''@;'; put 'put ''MzQsMjQyNzgsMjYwMDksMjkxMzQsMzAyNzQsMzA2MzcsMzI4NDIsMzQwNDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5ODgsMzk3MTksNDA4NDUsMjI3NDQsMjMxMDUsMjM2NTAsMjcxNTUsMjgxMjIsMjg0MzEsMzAyNjcsMzIwNDcsMzIzMTEsMzQwNzgsMzUxMjgsMzc4NjAsMzg0NzUsMjExMjksMjYwNjYsMjY2MTEsMjcwNjAsMjc5NjksMjgzMTYsMjg2''@;'; put 'put ''ODcsMjk3MDUsMjk3OTIsMzAwNDEsMzAyNDQsMzA4MjcsMzU2MjgsMzkwMDYsMjA4NDUsMjUxMzQsMzg1MjAsMjAzNzQsMjA1MjMsMjM4MzMsMjgxMzgsMzIxODQsMzY2NTAsMjQ0NTksMjQ5MDAsMjY2NDcsNjM4NDEsMzg1MzQsMjEyMDIsMzI5MDcsMjA5NTYsMjA5NDAsMjY5NzQsMzEyNjAs''@;'; put 'put ''MzIxOTAsMzM3NzcsMzg1MTcsMjA0NDIsMjEwMzMsMjE0MDAsMjE1MTksMjE3NzQsMjM2NTMsMjQ3NDMsMjY0NDYsMjY3OTIsMjgwMTIsMjkzMTMsMjk0MzIsMjk3MDIsMjk4MjcsNjM4NDIsMzAxNzgsMzE4NTIsMzI2MzMsMzI2OTYsMzM2NzMsMzUwMjMsMzUwNDEsMzczMjQsMzczMjgsMzg2''@;'; put 'put ''MjYsMzk4ODEsMjE1MzMsMjg1NDIsMjkxMzYsMjk4NDgsMzQyOTgsMzY1MjIsMzg1NjMsNDAwMjMsNDA2MDcsMjY1MTksMjgxMDcsMjk3NDcsMzMyNTYsMzg2NzgsMzA3NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzE0MzUsMzE1MjAsMzE4OTAsMjU3MDUsMjk4MDIsMzAxOTQsMzA5MDgsMzA5NTIsMzkzNDAsMzk3NjQsNDA2MzUsMjM1MTgsMjQxNDksMjg0''@;'; put 'put ''NDgsMzMxODAsMzM3MDcsMzdlMywxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwyODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywzOTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwz''@;'; put 'put ''NTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0''@;'; put 'put ''OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywyMDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5NiwzMjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEy''@;'; put 'put ''NiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4MiwyMTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwyNjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwy''@;'; put 'put ''OTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMwMiw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4''@;'; put 'put ''MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwyNzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwzMzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwy''@;'; put 'put ''MjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwyMTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwyNjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwz''@;'; put 'put ''MjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQy''@;'; put 'put ''MCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3NiwyMTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1NiwyNjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0Miwz''@;'; put 'put ''MDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwzNjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwyMDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwy''@;'; put 'put ''NTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3''@;'; put 'put ''OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwyNDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwyNDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwz''@;'; put 'put ''NDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcyMSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwy''@;'; put 'put ''MTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0''@;'; put 'put ''NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3NiwzNjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0MywyNDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwz''@;'; put 'put ''NTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODkyNSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3''@;'; put 'put ''OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIzOCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNmUzLDM2MDcwLDM2MDkx''@;'; put 'put ''LDM2MjEyLDM2MjgyLDM3MDk2LDM3MzQwLDM4NDI4LDM4NDY4LDM5Mzg1LDQwMTY3LDIxMjcxLDIwOTk4LDIxNTQ1LDIyMTMyLDIyNzA3LDIyODY4LDIyODk0LDI0NTc1LDI0OTk2LDI1MTk4LDI2MTI4LDI3Nzc0LDI4OTU0LDMwNDA2LDMxODgxLDMxOTY2LDMyMDI3LDMzNDUyLDM2MDMzLDM4''@;'; put 'put ''NjQwLDYzODQ3LDIwMzE1LDI0MzQzLDI0NDQ3LDI1MjgyLDIzODQ5LDI2Mzc5LDI2ODQyLDMwODQ0LDMyMzIzLDQwMzAwLDE5OTg5LDIwNjMzLDIxMjY5LDIxMjkwLDIxMzI5LDIyOTE1LDIzMTM4LDI0MTk5LDI0NzU0LDI0OTcwLDI1MTYxLDI1MjA5LDI2ZTMsMjY1MDMsMjcwNDcsMjc2MDQs''@;'; put 'put ''Mjc2MDYsMjc2MDcsMjc2MDgsMjc4MzIsNjM4NDgsMjk3NDksMzAyMDIsMzA3MzgsMzA4NjUsMzExODksMzExOTIsMzE4NzUsMzIyMDMsMzI3MzcsMzI5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzMwODYsMzMyMTgsMzM3NzgsMzQ1ODYsMzUwNDgsMzU1MTMsMzU2OTIsMzYwMjcsMzcxNDUsMzg3NTAsMzkxMzEsNDA3NjMsMjIxODgsMjMzMzgsMjQ0Mjgs''@;'; put 'put ''MjU5OTYsMjczMTUsMjc1NjcsMjc5OTYsMjg2NTcsMjg2OTMsMjkyNzcsMjk2MTMsMzYwMDcsMzYwNTEsMzg5NzEsMjQ5NzcsMjc3MDMsMzI4NTYsMzk0MjUsMjAwNDUsMjAxMDcsMjAxMjMsMjAxODEsMjAyODIsMjAyODQsMjAzNTEsMjA0NDcsMjA3MzUsMjE0OTAsMjE0OTYsMjE3NjYsMjE5''@;'; put 'put ''ODcsMjIyMzUsMjI3NjMsMjI4ODIsMjMwNTcsMjM1MzEsMjM1NDYsMjM1NTYsMjQwNTEsMjQxMDcsMjQ0NzMsMjQ2MDUsMjU0NDgsMjYwMTIsMjYwMzEsMjY2MTQsMjY2MTksMjY3OTcsMjc1MTUsMjc4MDEsMjc4NjMsMjgxOTUsMjg2ODEsMjk1MDksMzA3MjIsMzEwMzgsMzEwNDAsMzEwNzIs''@;'; put 'put ''MzExNjksMzE3MjEsMzIwMjMsMzIxMTQsMzI5MDIsMzMyOTMsMzM2NzgsMzQwMDEsMzQ1MDMsMzUwMzksMzU0MDgsMzU0MjIsMzU2MTMsMzYwNjAsMzYxOTgsMzY3ODEsMzcwMzQsMzkxNjQsMzkzOTEsNDA2MDUsMjEwNjYsNjM4NDksMjYzODgsNjM4NTAsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjA2MzIsMjEwMzQsMjM2NjUsMjU5NTUsMjc3MzMsMjk2NDIs''@;'; put 'put ''Mjk5ODcsMzAxMDksMzE2MzksMzM5NDgsMzcyNDAsMzg3MDQsMjAwODcsMjU3NDYsMjc1NzgsMjkwMjIsMzQyMTcsMTk5NzcsNjM4NTEsMjY0NDEsMjY4NjIsMjgxODMsMzM0MzksMzQwNzIsMzQ5MjMsMjU1OTEsMjg1NDUsMzczOTQsMzkwODcsMTk5NzgsMjA2NjMsMjA2ODcsMjA3NjcsMjE4''@;'; put 'put ''MzAsMjE5MzAsMjIwMzksMjMzNjAsMjM1NzcsMjM3NzYsMjQxMjAsMjQyMDIsMjQyMjQsMjQyNTgsMjQ4MTksMjY3MDUsMjcyMzMsMjgyNDgsMjkyNDUsMjkyNDgsMjkzNzYsMzA0NTYsMzEwNzcsMzE2NjUsMzI3MjQsMzUwNTksMzUzMTYsMzU0NDMsMzU5MzcsMzYwNjIsMzg2ODQsMjI2MjIs''@;'; put 'put ''Mjk4ODUsMzYwOTMsMjE5NTksNjM4NTIsMzEzMjksMzIwMzQsMzMzOTQsMjkyOTgsMjk5ODMsMjk5ODksNjM4NTMsMzE1MTMsMjI2NjEsMjI3NzksMjM5OTYsMjQyMDcsMjQyNDYsMjQ0NjQsMjQ2NjEsMjUyMzQsMjU0NzEsMjU5MzMsMjYyNTcsMjYzMjksMjYzNjAsMjY2NDYsMjY4NjYsMjkz''@;'; put 'put ''MTIsMjk3OTAsMzE1OTgsMzIxMTAsMzIyMTQsMzI2MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsMzI5OTcsMzMyOTgsMzQyMjMsMzUxOTksMzU0NzUsMzY4OTMsMzc2MDQsNDA2NTMsNDA3MzYsMjI4MDUsMjI4OTMsMjQxMDksMjQ3OTYsMjYxMzIsMjYyMjcsMjY1MTIsMjc3MjgsMjgxMDEsMjg1MTEsMzA3MDcsMzA4ODksMzM5OTAsMzczMjMsMzc2NzUsMjAx''@;'; put 'put ''ODUsMjA2ODIsMjA4MDgsMjE4OTIsMjMzMDcsMjM0NTksMjUxNTksMjU5ODIsMjYwNTksMjgyMTAsMjkwNTMsMjk2OTcsMjk3NjQsMjk4MzEsMjk4ODcsMzAzMTYsMzExNDYsMzIyMTgsMzIzNDEsMzI2ODAsMzMxNDYsMzMyMDMsMzMzMzcsMzQzMzAsMzQ3OTYsMzU0NDUsMzYzMjMsMzY5ODQs''@;'; put 'put ''Mzc1MjEsMzc5MjUsMzkyNDUsMzk4NTQsMjEzNTIsMjM2MzMsMjY5NjQsMjc4NDQsMjc5NDUsMjgyMDMsMzMyOTIsMzQyMDMsMzUxMzEsMzUzNzMsMzU0OTgsMzg2MzQsNDA4MDcsMjEwODksMjYyOTcsMjc1NzAsMzI0MDYsMzQ4MTQsMzYxMDksMzgyNzUsMzg0OTMsMjU4ODUsMjgwNDEsMjkx''@;'; put 'put ''NjYsNjM4NTQsMjI0NzgsMjI5OTUsMjM0NjgsMjQ2MTUsMjQ4MjYsMjUxMDQsMjYxNDMsMjYyMDcsMjk0ODEsMjk2ODksMzA0MjcsMzA0NjUsMzE1OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzI4NTQsMzI4ODIsMzMxMjUsMzU0ODgsMzcyNjYsMTk5OTAsMjEyMTgsMjc1MDYsMjc5MjcsMzEyMzcsMzE1NDUsMzIwNDgsNjM4NTUsMzYwMTYsMjE0ODQsMjIw''@;'; put 'put ''NjMsMjI2MDksMjM0NzcsMjM1NjcsMjM1NjksMjQwMzQsMjUxNTIsMjU0NzUsMjU2MjAsMjYxNTcsMjY4MDMsMjc4MzYsMjgwNDAsMjgzMzUsMjg3MDMsMjg4MzYsMjkxMzgsMjk5OTAsMzAwOTUsMzAwOTQsMzAyMzMsMzE1MDUsMzE3MTIsMzE3ODcsMzIwMzIsMzIwNTcsMzQwOTIsMzQxNTcs''@;'; put 'put ''MzQzMTEsMzUzODAsMzY4NzcsMzY5NjEsMzcwNDUsMzc1NTksMzg5MDIsMzk0NzksMjA0MzksMjM2NjAsMjY0NjMsMjgwNDksMzE5MDMsMzIzOTYsMzU2MDYsMzYxMTgsMzY4OTUsMjM0MDMsMjQwNjEsMjU2MTMsMzM5ODQsMzY5NTYsMzkxMzcsMjk1NzUsMjM0MzUsMjQ3MzAsMjY0OTQsMjgx''@;'; put 'put ''MjYsMzUzNTksMzU0OTQsMzY4NjUsMzg5MjQsMjEwNDcsNjM4NTYsMjg3NTMsMzA4NjIsMzc3ODIsMzQ5MjgsMzczMzUsMjA0NjIsMjE0NjMsMjIwMTMsMjIyMzQsMjI0MDIsMjI3ODEsMjMyMzQsMjM0MzIsMjM3MjMsMjM3NDQsMjQxMDEsMjQ4MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjUxMDEsMjUxNjMsMjU0ODAsMjU2MjgsMjU5MTAsMjU5NzYsMjcx''@;'; put 'put ''OTMsMjc1MzAsMjc3MDAsMjc5MjksMjg0NjUsMjkxNTksMjk0MTcsMjk1NjAsMjk3MDMsMjk4NzQsMzAyNDYsMzA1NjEsMzExNjgsMzEzMTksMzE0NjYsMzE5MjksMzIxNDMsMzIxNzIsMzIzNTMsMzI2NzAsMzMwNjUsMzM1ODUsMzM5MzYsMzQwMTAsMzQyODIsMzQ5NjYsMzU1MDQsMzU3Mjgs''@;'; put 'put ''MzY2NjQsMzY5MzAsMzY5OTUsMzcyMjgsMzc1MjYsMzc1NjEsMzg1MzksMzg1NjcsMzg1NjgsMzg2MTQsMzg2NTYsMzg5MjAsMzkzMTgsMzk2MzUsMzk3MDYsMjE0NjAsMjI2NTQsMjI4MDksMjM0MDgsMjM0ODcsMjgxMTMsMjg1MDYsMjkwODcsMjk3MjksMjk4ODEsMzI5MDEsMzM3ODksMjQw''@;'; put 'put ''MzMsMjQ0NTUsMjQ0OTAsMjQ2NDIsMjYwOTIsMjY2NDIsMjY5OTEsMjcyMTksMjc1MjksMjc5NTcsMjgxNDcsMjk2NjcsMzA0NjIsMzA2MzYsMzE1NjUsMzIwMjAsMzMwNTksMzMzMDgsMzM2MDAsMzQwMzYsMzQxNDcsMzU0MjYsMzU1MjQsMzcyNTUsMzc2NjIsMzg5MTgsMzkzNDgsMjUxMDAs''@;'; put 'put ''MzQ4OTksMzY4NDgsMzc0NzcsMjM4MTUsMjM4NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsMjM5MTMsMjk3OTEsMzMxODEsMzQ2NjQsMjg2MjksMjUzNDIsMzI3MjIsMzUxMjYsMzUxODYsMTk5OTgsMjAwNTYsMjA3MTEsMjEyMTMsMjEzMTksMjUyMTUsMjYxMTksMzIzNjEsMzQ4MjEsMzg0OTQsMjAzNjUsMjEyNzMsMjIwNzAsMjI5ODcsMjMyMDQsMjM2MDgs''@;'; put 'put ''MjM2MzAsMjM2MjksMjQwNjYsMjQzMzcsMjQ2NDMsMjYwNDUsMjYxNTksMjYxNzgsMjY1NTgsMjY2MTIsMjk0NjgsMzA2OTAsMzEwMzQsMzI3MDksMzM5NDAsMzM5OTcsMzUyMjIsMzU0MzAsMzU0MzMsMzU1NTMsMzU5MjUsMzU5NjIsMjI1MTYsMjM1MDgsMjQzMzUsMjQ2ODcsMjUzMjUsMjY4''@;'; put 'put ''OTMsMjc1NDIsMjgyNTIsMjkwNjAsMzE2OTgsMzQ2NDUsMzU2NzIsMzY2MDYsMzkxMzUsMzkxNjYsMjAyODAsMjAzNTMsMjA0NDksMjE2MjcsMjMwNzIsMjM0ODAsMjQ4OTIsMjYwMzIsMjYyMTYsMjkxODAsMzAwMDMsMzEwNzAsMzIwNTEsMzMxMDIsMzMyNTEsMzM2ODgsMzQyMTgsMzQyNTQs''@;'; put 'put ''MzQ1NjMsMzUzMzgsMzY1MjMsMzY3NjMsNjM4NTcsMzY4MDUsMjI4MzMsMjM0NjAsMjM1MjYsMjQ3MTMsMjM1MjksMjM1NjMsMjQ1MTUsMjc3NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM4NTgsMjgxNDUsMjg2ODMsMjk5NzgsMzM0NTUsMzU1NzQsMjAxNjAsMjEzMTMsNjM4NTksMzg2MTcsMjc2NjMsMjAxMjYsMjA0MjAsMjA4MTgsMjE4NTQsMjMwNzcs''@;'; put 'put ''MjM3ODQsMjUxMDUsMjkyNzMsMzM0NjksMzM3MDYsMzQ1NTgsMzQ5MDUsMzUzNTcsMzg0NjMsMzg1OTcsMzkxODcsNDAyMDEsNDAyODUsMjI1MzgsMjM3MzEsMjM5OTcsMjQxMzIsMjQ4MDEsMjQ4NTMsMjU1NjksMjcxMzgsMjgxOTcsMzcxMjIsMzc3MTYsMzg5OTAsMzk5NTIsNDA4MjMsMjM0''@;'; put 'put ''MzMsMjM3MzYsMjUzNTMsMjYxOTEsMjY2OTYsMzA1MjQsMzg1OTMsMzg3OTcsMzg5OTYsMzk4MzksMjYwMTcsMzU1ODUsMzY1NTUsMzgzMzIsMjE4MTMsMjM3MjEsMjQwMjIsMjQyNDUsMjYyNjMsMzAyODQsMzM3ODAsMzgzNDMsMjI3MzksMjUyNzYsMjkzOTAsNDAyMzIsMjAyMDgsMjI4MzAs''@;'; put 'put ''MjQ1OTEsMjYxNzEsMjc1MjMsMzEyMDcsNDAyMzAsMjEzOTUsMjE2OTYsMjI0NjcsMjM4MzAsMjQ4NTksMjYzMjYsMjgwNzksMzA4NjEsMzM0MDYsMzg1NTIsMzg3MjQsMjEzODAsMjUyMTIsMjU0OTQsMjgwODIsMzIyNjYsMzMwOTksMzg5ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjczODcsMzI1ODgsNDAzNjcsNDA0NzQsMjAwNjMsMjA1MzksMjA5MTgs''@;'; put 'put ''MjI4MTIsMjQ4MjUsMjU1OTAsMjY5MjgsMjkyNDIsMzI4MjIsNjM4NjAsMzczMjYsMjQzNjksNjM4NjEsNjM4NjIsMzIwMDQsMzM1MDksMzM5MDMsMzM5NzksMzQyNzcsMzY0OTMsNjM4NjMsMjAzMzUsNjM4NjQsNjM4NjUsMjI3NTYsMjMzNjMsMjQ2NjUsMjU1NjIsMjU4ODAsMjU5NjUsMjYy''@;'; put 'put ''NjQsNjM4NjYsMjY5NTQsMjcxNzEsMjc5MTUsMjg2NzMsMjkwMzYsMzAxNjIsMzAyMjEsMzExNTUsMzEzNDQsNjM4NjcsMzI2NTAsNjM4NjgsMzUxNDAsNjM4NjksMzU3MzEsMzczMTIsMzg1MjUsNjM4NzAsMzkxNzgsMjIyNzYsMjQ0ODEsMjYwNDQsMjg0MTcsMzAyMDgsMzExNDIsMzU0ODYs''@;'; put 'put ''MzkzNDEsMzk3NzAsNDA4MTIsMjA3NDAsMjUwMTQsMjUyMzMsMjcyNzcsMzMyMjIsMjA1NDcsMjI1NzYsMjQ0MjIsMjg5MzcsMzUzMjgsMzU1NzgsMjM0MjAsMzQzMjYsMjA0NzQsMjA3OTYsMjIxOTYsMjI4NTIsMjU1MTMsMjgxNTMsMjM5NzgsMjY5ODksMjA4NzAsMjAxMDQsMjAzMTMsNjM4''@;'; put 'put ''NzEsNjM4NzIsNjM4NzMsMjI5MTQsNjM4NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNjM4NzUsMjc0ODcsMjc3NDEsNjM4NzYsMjk4NzcsMzA5OTgsNjM4NzcsMzMyODcsMzMzNDksMzM1OTMsMzY2NzEsMzY3MDEsNjM4NzgsMzkxOTIsNjM4NzksNjM4ODAsNjM4ODEsMjAxMzQsNjM4ODIsMjI0OTUsMjQ0NDEsMjYxMzEsNjM4ODMsNjM4ODQsMzAxMjMsMzIz''@;'; put 'put ''NzcsMzU2OTUsNjM4ODUsMzY4NzAsMzk1MTUsMjIxODEsMjI1NjcsMjMwMzIsMjMwNzEsMjM0NzYsNjM4ODYsMjQzMTAsNjM4ODcsNjM4ODgsMjU0MjQsMjU0MDMsNjM4ODksMjY5NDEsMjc3ODMsMjc4MzksMjgwNDYsMjgwNTEsMjgxNDksMjg0MzYsNjM4OTAsMjg4OTUsMjg5ODIsMjkwMTcs''@;'; put 'put ''NjM4OTEsMjkxMjMsMjkxNDEsNjM4OTIsMzA3OTksMzA4MzEsNjM4OTMsMzE2MDUsMzIyMjcsNjM4OTQsMzIzMDMsNjM4OTUsMzQ4OTMsMzY1NzUsNjM4OTYsNjM4OTcsNjM4OTgsMzc0NjcsNjM4OTksNDAxODIsNjM5MDAsNjM5MDEsNjM5MDIsMjQ3MDksMjgwMzcsNjM5MDMsMjkxMDUsNjM5''@;'; put 'put ''MDQsNjM5MDUsMzgzMjEsMjE0MjEsNjM5MDYsNjM5MDcsNjM5MDgsMjY1NzksNjM5MDksMjg4MTQsMjg5NzYsMjk3NDQsMzMzOTgsMzM0OTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5MTAsMzgzMzEsMzk2NTMsNDA1NzMsMjYzMDgsNjM5MTEsMjkxMjEsMzM4NjUsNjM5MTIsNjM5MTMsMjI2MDMsNjM5MTQsNjM5MTUsMjM5OTIsMjQ0MzMsNjM5MTYsMjYx''@;'; put 'put ''NDQsMjYyNTQsMjcwMDEsMjcwNTQsMjc3MDQsMjc4OTEsMjgyMTQsMjg0ODEsMjg2MzQsMjg2OTksMjg3MTksMjkwMDgsMjkxNTEsMjk1NTIsNjM5MTcsMjk3ODcsNjM5MTgsMjk5MDgsMzA0MDgsMzEzMTAsMzI0MDMsNjM5MTksNjM5MjAsMzM1MjEsMzU0MjQsMzY4MTQsNjM5MjEsMzc3MDQs''@;'; put 'put ''NjM5MjIsMzg2ODEsNjM5MjMsNjM5MjQsMjAwMzQsMjA1MjIsNjM5MjUsMjFlMywyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMzMCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQyNywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODky''@;'; put 'put ''OCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwyNzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcx''@;'; put 'put ''MSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5MywyOTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwzOTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwz''@;'; put 'put ''NDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0''@;'; put 'put ''MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwyMzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywyNTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2''@;'; put 'put ''MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5MiwzOTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwzNjc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwy''@;'; put 'put ''MzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4''@;'; put 'put ''OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwzNDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywzODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwy''@;'; put 'put ''OTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywzNDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywyMTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwy''@;'; put 'put ''MzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2MCw2Mzk0MiwzODQ5OCwzOWUzLDQwMjE5LDI2Mzc2LDM2MjM0LDM3NDcwLDIwMzAxLDIwNTUzLDIwNzAyLDIxMzYxLDIyMjg1LDIyOTk2''@;'; put 'put ''LDIzMDQxLDIzNTYxLDI0OTQ0LDI2MjU2LDI4MjA1LDI5MjM0LDI5NzcxLDMyMjM5LDMyOTYzLDMzODA2LDMzODk0LDM0MTExLDM0NjU1LDM0OTA3LDM1MDk2LDM1NTg2LDM2OTQ5LDM4ODU5LDM5NzU5LDIwMDgzLDIwMzY5LDIwNzU0LDIwODQyLDYzOTQzLDIxODA3LDIxOTI5LDIzNDE4LDIz''@;'; put 'put ''NDYxLDI0MTg4LDI0MTg5LDI0MjU0LDI0NzM2LDI0Nzk5LDI0ODQwLDI0ODQxLDI1NTQwLDI1OTEyLDI2Mzc3LDYzOTQ0LDI2NTgwLDI2NTg2LDYzOTQ1LDI2OTc3LDI2OTc4LDI3ODMzLDI3OTQzLDYzOTQ2LDI4MjE2LDYzOTQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4NjQxLDI5NDk0LDI5NDk1LDYzOTQ4LDI5Nzg4LDMwMDAxLDYzOTQ5LDMwMjkwLDYz''@;'; put 'put ''OTUwLDYzOTUxLDMyMTczLDMzMjc4LDMzODQ4LDM1MDI5LDM1NDgwLDM1NTQ3LDM1NTY1LDM2NDAwLDM2NDE4LDM2OTM4LDM2OTI2LDM2OTg2LDM3MTkzLDM3MzIxLDM3NzQyLDYzOTUyLDYzOTUzLDIyNTM3LDYzOTU0LDI3NjAzLDMyOTA1LDMyOTQ2LDYzOTU1LDYzOTU2LDIwODAxLDIyODkx''@;'; put 'put ''LDIzNjA5LDYzOTU3LDYzOTU4LDI4NTE2LDI5NjA3LDMyOTk2LDM2MTAzLDYzOTU5LDM3Mzk5LDM4Mjg3LDYzOTYwLDYzOTYxLDYzOTYyLDYzOTYzLDMyODk1LDI1MTAyLDI4NzAwLDMyMTA0LDM0NzAxLDYzOTY0LDIyNDMyLDI0NjgxLDI0OTAzLDI3NTc1LDM1NTE4LDM3NTA0LDM4NTc3LDIw''@;'; put 'put ''MDU3LDIxNTM1LDI4MTM5LDM0MDkzLDM4NTEyLDM4ODk5LDM5MTUwLDI1NTU4LDI3ODc1LDM3MDA5LDIwOTU3LDI1MDMzLDMzMjEwLDQwNDQxLDIwMzgxLDIwNTA2LDIwNzM2LDIzNDUyLDI0ODQ3LDI1MDg3LDI1ODM2LDI2ODg1LDI3NTg5LDMwMDk3LDMwNjkxLDMyNjgxLDMzMzgwLDM0MTkx''@;'; put 'put ''LDM0ODExLDM0OTE1LDM1NTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDM1Njk2LDM3MjkxLDIwMTA4LDIwMTk3LDIwMjM0LDYzOTY1LDYzOTY2LDIyODM5LDIzMDE2LDYzOTY3LDI0MDUwLDI0MzQ3LDI0NDExLDI0NjA5LDYzOTY4LDYzOTY5LDYzOTcwLDYzOTcxLDI5MjQ2LDI5NjY5LDYzOTcyLDMwMDY0LDMwMTU3LDYzOTczLDMxMjI3LDYzOTc0LDMyNzgw''@;'; put 'put ''LDMyODE5LDMyOTAwLDMzNTA1LDMzNjE3LDYzOTc1LDYzOTc2LDM2MDI5LDM2MDE5LDM2OTk5LDYzOTc3LDYzOTc4LDM5MTU2LDM5MTgwLDYzOTc5LDYzOTgwLDI4NzI3LDMwNDEwLDMyNzE0LDMyNzE2LDMyNzY0LDM1NjEwLDIwMTU0LDIwMTYxLDIwOTk1LDIxMzYwLDYzOTgxLDIxNjkzLDIy''@;'; put 'put ''MjQwLDIzMDM1LDIzNDkzLDI0MzQxLDI0NTI1LDI4MjcwLDYzOTgyLDYzOTgzLDMyMTA2LDMzNTg5LDYzOTg0LDM0NDUxLDM1NDY5LDYzOTg1LDM4NzY1LDM4Nzc1LDYzOTg2LDYzOTg3LDE5OTY4LDIwMzE0LDIwMzUwLDIyNzc3LDI2MDg1LDI4MzIyLDM2OTIwLDM3ODA4LDM5MzUzLDIwMjE5''@;'; put 'put ''LDIyNzY0LDIyOTIyLDIzMDAxLDI0NjQxLDYzOTg4LDYzOTg5LDMxMjUyLDYzOTkwLDMzNjE1LDM2MDM1LDIwODM3LDIxMzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTkxLDYzOTkyLDYzOTkzLDIwMTczLDIxMDk3LDIzMzgxLDMzNDcxLDIwMTgwLDIxMDUwLDIxNjcyLDIyOTg1LDIzMDM5LDIzMzc2LDIzMzgzLDIzMzg4LDI0Njc1LDI0OTA0LDI4MzYz''@;'; put 'put ''LDI4ODI1LDI5MDM4LDI5NTc0LDI5OTQzLDMwMTMzLDMwOTEzLDMyMDQzLDMyNzczLDMzMjU4LDMzNTc2LDM0MDcxLDM0MjQ5LDM1NTY2LDM2MDM5LDM4NjA0LDIwMzE2LDIxMjQyLDIyMjA0LDI2MDI3LDI2MTUyLDI4Nzk2LDI4ODU2LDI5MjM3LDMyMTg5LDMzNDIxLDM3MTk2LDM4NTkyLDQw''@;'; put 'put ''MzA2LDIzNDA5LDI2ODU1LDI3NTQ0LDI4NTM4LDMwNDMwLDIzNjk3LDI2MjgzLDI4NTA3LDMxNjY4LDMxNzg2LDM0ODcwLDM4NjIwLDE5OTc2LDIwMTgzLDIxMjgwLDIyNTgwLDIyNzE1LDIyNzY3LDIyODkyLDIzNTU5LDI0MTE1LDI0MTk2LDI0MzczLDI1NDg0LDI2MjkwLDI2NDU0LDI3MTY3''@;'; put 'put ''LDI3Mjk5LDI3NDA0LDI4NDc5LDI5MjU0LDYzOTk0LDI5NTIwLDI5ODM1LDMxNDU2LDMxOTExLDMzMTQ0LDMzMjQ3LDMzMjU1LDMzNjc0LDMzOTAwLDM0MDgzLDM0MTk2LDM0MjU1LDM1MDM3LDM2MTE1LDM3MjkyLDM4MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NTU2LDIwODc3LDIxNzA1LDIyMzEyLDIzNDcyLDI1MTY1LDI2NDQ4LDI2Njg1LDI2Nzcx''@;'; put 'put ''LDI4MjIxLDI4MzcxLDI4Nzk3LDMyMjg5LDM1MDA5LDM2MDAxLDM2NjE3LDQwNzc5LDQwNzgyLDI5MjI5LDMxNjMxLDM1NTMzLDM3NjU4LDIwMjk1LDIwMzAyLDIwNzg2LDIxNjMyLDIyOTkyLDI0MjEzLDI1MjY5LDI2NDg1LDI2OTkwLDI3MTU5LDI3ODIyLDI4MTg2LDI5NDAxLDI5NDgyLDMw''@;'; put 'put ''MTQxLDMxNjcyLDMyMDUzLDMzNTExLDMzNzg1LDMzODc5LDM0Mjk1LDM1NDE5LDM2MDE1LDM2NDg3LDM2ODg5LDM3MDQ4LDM4NjA2LDQwNzk5LDIxMjE5LDIxNTE0LDIzMjY1LDIzNDkwLDI1Njg4LDI1OTczLDI4NDA0LDI5MzgwLDYzOTk1LDMwMzQwLDMxMzA5LDMxNTE1LDMxODIxLDMyMzE4''@;'; put 'put ''LDMyNzM1LDMzNjU5LDM1NjI3LDM2MDQyLDM2MTk2LDM2MzIxLDM2NDQ3LDM2ODQyLDM2ODU3LDM2OTY5LDM3ODQxLDIwMjkxLDIwMzQ2LDIwNjU5LDIwODQwLDIwODU2LDIxMDY5LDIxMDk4LDIyNjI1LDIyNjUyLDIyODgwLDIzNTYwLDIzNjM3LDI0MjgzLDI0NzMxLDI1MTM2LDI2NjQzLDI3''@;'; put 'put ''NTgzLDI3NjU2LDI4NTkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDI5MDA2LDI5NzI4LDNlNCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQzOSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAxOSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQz''@;'; put 'put ''NCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwxOTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3NiwyMjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3Mywy''@;'; put 'put ''NTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1''@;'; put 'put ''MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3''@;'; put 'put ''NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywyNTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwyNjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwy''@;'; put 'put ''OTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1''@;'; put 'put ''MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwyOTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYx''@;'; put 'put ''OCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwyNjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwyODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwz''@;'; put 'put ''MjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkwOSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgwMywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2''@;'; put 'put ''MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4NywyNzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywyODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwy''@;'; put 'put ''MDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3''@;'; put 'put ''NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwyODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwzMjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2''@;'; put 'put ''Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMzNywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5''@;'; put 'put ''NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwzODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwyNDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4Nywz''@;'; put 'put ''NDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwyMDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0NiwyNzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwz''@;'; put 'put ''Njk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAxMywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0''@;'; put 'put ''NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwyMzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwyNjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwz''@;'; put 'put ''MTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwyNDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1Nywy''@;'; put 'put ''NTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAyOSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMwNywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQz''@;'; put 'put ''MywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwyODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwzNTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwz''@;'; put 'put ''MDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NGUzLDIxMDU5LDI2MzY3LDI4MDUzLDI4Mzk5LDMyMjI0LDM1NTU4LDM2OTEwLDM2OTU4LDM5NjM2LDIxMDIxLDIxMTE5LDIxNzM2LDI0OTgwLDI1MjIwLDI1MzA3''@;'; put 'put ''LDI2Nzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODk4LDI2''@;'; put 'put ''OTcwLDI3MTg5LDI4ODE4LDI4OTY2LDMwODEzLDMwOTc3LDMwOTkwLDMxMTg2LDMxMjQ1LDMyOTE4LDMzNDAwLDMzNDkzLDMzNjA5LDM0MTIxLDM1OTcwLDM2MjI5LDM3MjE4LDM3MjU5LDM3Mjk0LDIwNDE5LDIyMjI1LDI5MTY1LDMwNjc5LDM0NTYwLDM1MzIwLDIzNTQ0LDI0NTM0LDI2NDQ5''@;'; put 'put ''LDM3MDMyLDIxNDc0LDIyNjE4LDIzNTQxLDI0NzQwLDI0OTYxLDI1Njk2LDMyMzE3LDMyODgwLDM0MDg1LDM3NTA3LDI1Nzc0LDIwNjUyLDIzODI4LDI2MzY4LDIyNjg0LDI1Mjc3LDI1NTEyLDI2ODk0LDI3ZTMsMjcxNjYsMjgyNjcsMzAzOTQsMzExNzksMzM0NjcsMzM4MzMsMzU1MzUsMzYy''@;'; put 'put ''NjQsMzY4NjEsMzcxMzgsMzcxOTUsMzcyNzYsMzc2NDgsMzc2NTYsMzc3ODYsMzg2MTksMzk0NzgsMzk5NDksMTk5ODUsMzAwNDQsMzEwNjksMzE0ODIsMzE1NjksMzE2ODksMzIzMDIsMzM5ODgsMzY0NDEsMzY0NjgsMzY2MDAsMzY4ODAsMjYxNDksMjY5NDMsMjk3NjMsMjA5ODYsMjY0MTQs''@;'; put 'put ''NDA2NjgsMjA4MDUsMjQ1NDQsMjc3OTgsMzQ4MDIsMzQ5MDksMzQ5MzUsMjQ3NTYsMzMyMDUsMzM3OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYxMDEsMjE0NjIsMjE1NjEsMjIwNjgsMjMwOTQsMjM2MDEsMjg4MTAsMzI3MzYsMzI4NTgsMzMwMzAsMzMyNjEsMzYyNTksMzcyNTcsMzk1MTksNDA0MzQsMjA1OTYsMjAxNjQsMjE0MDgsMjQ4MjcsMjgyMDQs''@;'; put 'put ''MjM2NTIsMjAzNjAsMjA1MTYsMjE5ODgsMjM3NjksMjQxNTksMjQ2NzcsMjY3NzIsMjc4MzUsMjgxMDAsMjkxMTgsMzAxNjQsMzAxOTYsMzAzMDUsMzEyNTgsMzEzMDUsMzIxOTksMzIyNTEsMzI2MjIsMzMyNjgsMzQ0NzMsMzY2MzYsMzg2MDEsMzkzNDcsNDA3ODYsMjEwNjMsMjExODksMzkx''@;'; put 'put ''NDksMzUyNDIsMTk5NzEsMjY1NzgsMjg0MjIsMjA0MDUsMjM1MjIsMjY1MTcsMjc3ODQsMjgwMjQsMjk3MjMsMzA3NTksMzczNDEsMzc3NTYsMzQ3NTYsMzEyMDQsMzEyODEsMjQ1NTUsMjAxODIsMjE2NjgsMjE4MjIsMjI3MDIsMjI5NDksMjQ4MTYsMjUxNzEsMjUzMDIsMjY0MjIsMjY5NjUs''@;'; put 'put ''MzMzMzMsMzg0NjQsMzkzNDUsMzkzODksMjA1MjQsMjEzMzEsMjE4MjgsMjIzOTYsNjQwMDEsMjUxNzYsNjQwMDIsMjU4MjYsMjYyMTksMjY1ODksMjg2MDksMjg2NTUsMjk3MzAsMjk3NTIsMzUzNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc5NDQsMjE1ODUsMjIwMjIsMjIzNzQsMjQzOTIsMjQ5ODYsMjc0NzAsMjg3NjAsMjg4NDUsMzIxODcsMzU0Nzcs''@;'; put 'put ''MjI4OTAsMzMwNjcsMjU1MDYsMzA0NzIsMzI4MjksMzYwMTAsMjI2MTIsMjU2NDUsMjcwNjcsMjM0NDUsMjQwODEsMjgyNzEsNjQwMDMsMzQxNTMsMjA4MTIsMjE0ODgsMjI4MjYsMjQ2MDgsMjQ5MDcsMjc1MjYsMjc3NjAsMjc4ODgsMzE1MTgsMzI5NzQsMzM0OTIsMzYyOTQsMzcwNDAsMzkw''@;'; put 'put ''ODksNjQwMDQsMjU3OTksMjg1ODAsMjU3NDUsMjU4NjAsMjA4MTQsMjE1MjAsMjIzMDMsMzUzNDIsMjQ5MjcsMjY3NDIsNjQwMDUsMzAxNzEsMzE1NzAsMzIxMTMsMzY4OTAsMjI1MzQsMjcwODQsMzMxNTEsMzUxMTQsMzY4NjQsMzg5NjksMjA2MDAsMjI4NzEsMjI5NTYsMjUyMzcsMzY4Nzks''@;'; put 'put ''Mzk3MjIsMjQ5MjUsMjkzMDUsMzgzNTgsMjIzNjksMjMxMTAsMjQwNTIsMjUyMjYsMjU3NzMsMjU4NTAsMjY0ODcsMjc4NzQsMjc5NjYsMjkyMjgsMjk3NTAsMzA3NzIsMzI2MzEsMzM0NTMsMzYzMTUsMzg5MzUsMjEwMjgsMjIzMzgsMjY0OTUsMjkyNTYsMjk5MjMsMzYwMDksMzY3NzQsMzcz''@;'; put 'put ''OTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg0NDIsMjA4NDMs''@;'; put 'put ''MjE0ODUsMjU0MjAsMjAzMjksMjE3NjQsMjQ3MjYsMjU5NDMsMjc4MDMsMjgwMzEsMjkyNjAsMjk0MzcsMzEyNTUsMzUyMDcsMzU5OTcsMjQ0MjksMjg1NTgsMjg5MjEsMzMxOTIsMjQ4NDYsMjA0MTUsMjA1NTksMjUxNTMsMjkyNTUsMzE2ODcsMzIyMzIsMzI3NDUsMzY5NDEsMzg4MjksMzk0''@;'; put 'put ''NDksMzYwMjIsMjIzNzgsMjQxNzksMjY1NDQsMzM4MDUsMzU0MTMsMjE1MzYsMjMzMTgsMjQxNjMsMjQyOTAsMjQzMzAsMjU5ODcsMzI5NTQsMzQxMDksMzgyODEsMzg0OTEsMjAyOTYsMjEyNTMsMjEyNjEsMjEyNjMsMjE2MzgsMjE3NTQsMjIyNzUsMjQwNjcsMjQ1OTgsMjUyNDMsMjUyNjUs''@;'; put 'put ''MjU0MjksNjQwMDYsMjc4NzMsMjgwMDYsMzAxMjksMzA3NzAsMzI5OTAsMzMwNzEsMzM1MDIsMzM4ODksMzM5NzAsMzQ5NTcsMzUwOTAsMzY4NzUsMzc2MTAsMzkxNjUsMzk4MjUsMjQxMzMsMjYyOTIsMjYzMzMsMjg2ODksMjkxOTAsNjQwMDcsMjA0NjksMjExMTcsMjQ0MjYsMjQ5MTUsMjY0''@;'; put 'put ''NTEsMjcxNjEsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU5NjEsMzkxMTEsMzkxMDgsMzk0OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2OTcsMzEyNjMsMjY5NjMsMzU1NzUsMzU5MTQsMzkwODAsMzkzNDIsMjQ0NDQsMjUyNTksMzAxMzAsMzAzODIsMzQ5ODcsMzY5OTEsMzg0NjYsMjEzMDUsMjQzODAsMjQ1MTcsMjc4NTIsMjk2NDQsMzAwNTAsMzAw''@;'; put 'put ''OTEsMzE1NTgsMzM1MzQsMzkzMjUsMjAwNDcsMzY5MjQsMTk5NzksMjAzMDksMjE0MTQsMjI3OTksMjQyNjQsMjYxNjAsMjc4MjcsMjk3ODEsMzM2NTUsMzQ2NjIsMzYwMzIsMzY5NDQsMzg2ODYsMzk5NTcsMjI3MzcsMjM0MTYsMzQzODQsMzU2MDQsNDAzNzIsMjM1MDYsMjQ2ODAsMjQ3MTcs''@;'; put 'put ''MjYwOTcsMjc3MzUsMjg0NTAsMjg1NzksMjg2OTgsMzI1OTcsMzI3NTIsMzgyODksMzgyOTAsMzg0ODAsMzg4NjcsMjExMDYsMzY2NzYsMjA5ODksMjE1NDcsMjE2ODgsMjE4NTksMjE4OTgsMjczMjMsMjgwODUsMzIyMTYsMzMzODIsMzc1MzIsMzg1MTksNDA1NjksMjE1MTIsMjE3MDQsMzA0''@;'; put 'put ''MTgsMzQ1MzIsMzgzMDgsMzgzNTYsMzg0OTIsMjAxMzAsMjAyMzMsMjMwMjIsMjMyNzAsMjQwNTUsMjQ2NTgsMjUyMzksMjY0NzcsMjY2ODksMjc3ODIsMjgyMDcsMzI1NjgsMzI5MjMsMzMzMjIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjQwMDgsNjQwMDksMzg5MTcsMjAxMzMsMjA1NjUsMjE2ODMsMjI0MTksMjI4NzQsMjM0MDEsMjM0NzUsMjUwMzIsMjY5''@;'; put 'put ''OTksMjgwMjMsMjg3MDcsMzQ4MDksMzUyOTksMzU0NDIsMzU1NTksMzY5OTQsMzk0MDUsMzk2MDgsMjExODIsMjY2ODAsMjA1MDIsMjQxODQsMjY0NDcsMzM2MDcsMzQ4OTIsMjAxMzksMjE1MjEsMjIxOTAsMjk2NzAsMzcxNDEsMzg5MTEsMzkxNzcsMzkyNTUsMzkzMjEsMjIwOTksMjI2ODcs''@;'; put 'put ''MzQzOTUsMzUzNzcsMjUwMTAsMjczODIsMjk1NjMsMzY1NjIsMjc0NjMsMzg1NzAsMzk1MTEsMjI4NjksMjkxODQsMzYyMDMsMzg3NjEsMjA0MzYsMjM3OTYsMjQzNTgsMjUwODAsMjYyMDMsMjc4ODMsMjg4NDMsMjk1NzIsMjk2MjUsMjk2OTQsMzA1MDUsMzA1NDEsMzIwNjcsMzIwOTgsMzIy''@;'; put 'put ''OTEsMzMzMzUsMzQ4OTgsNjQwMTAsMzYwNjYsMzc0NDksMzkwMjMsMjMzNzcsMzEzNDgsMzQ4ODAsMzg5MTMsMjMyNDQsMjA0NDgsMjEzMzIsMjI4NDYsMjM4MDUsMjU0MDYsMjgwMjUsMjk0MzMsMzMwMjksMzMwMzEsMzM2OTgsMzc1ODMsMzg5NjAsMjAxMzYsMjA4MDQsMjEwMDksMjI0MTEs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQ0MTgsMjc4NDIsMjgz''@;'; put 'put ''NjYsMjg2NzcsMjg3NTIsMjg4NDcsMjkwNzQsMjk2NzMsMjk4MDEsMzM2MTAsMzQ3MjIsMzQ5MTMsMzY4NzIsMzcwMjYsMzc3OTUsMzkzMzYsMjA4NDYsMjQ0MDcsMjQ4MDAsMjQ5MzUsMjYyOTEsMzQxMzcsMzY0MjYsMzcyOTUsMzg3OTUsMjAwNDYsMjAxMTQsMjE2MjgsMjI3NDEsMjI3Nzgs''@;'; put 'put ''MjI5MDksMjM3MzMsMjQzNTksMjUxNDIsMjUxNjAsMjYxMjIsMjYyMTUsMjc2MjcsMjgwMDksMjgxMTEsMjgyNDYsMjg0MDgsMjg1NjQsMjg2NDAsMjg2NDksMjg3NjUsMjkzOTIsMjk3MzMsMjk3ODYsMjk5MjAsMzAzNTUsMzEwNjgsMzE5NDYsMzIyODYsMzI5OTMsMzM0NDYsMzM4OTksMzM5''@;'; put 'put ''ODMsMzQzODIsMzQzOTksMzQ2NzYsMzU3MDMsMzU5NDYsMzc4MDQsMzg5MTIsMzkwMTMsMjQ3ODUsMjUxMTAsMzcyMzksMjMxMzAsMjYxMjcsMjgxNTEsMjgyMjIsMjk3NTksMzk3NDYsMjQ1NzMsMjQ3OTQsMzE1MDMsMjE3MDAsMjQzNDQsMjc3NDIsMjc4NTksMjc5NDYsMjg4ODgsMzIwMDUs''@;'; put 'put ''MzQ0MjUsMzUzNDAsNDAyNTEsMjEyNzAsMjE2NDQsMjMzMDEsMjcxOTQsMjg3NzksMzAwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExMTcsMzExNjYsMzM0NTcsMzM3NzUsMzU0NDEsMzU2NDksMzYwMDgsMzg3NzIsNjQwMTEsMjU4NDQsMjU4OTksMzA5MDYsMzA5MDcsMzEzMzksMjAwMjQsMjE5MTQsMjI4NjQsMjM0NjIsMjQxODcsMjQ3MzksMjU1NjMs''@;'; put 'put ''Mjc0ODksMjYyMTMsMjY3MDcsMjgxODUsMjkwMjksMjk4NzIsMzIwMDgsMzY5OTYsMzk1MjksMzk5NzMsMjc5NjMsMjgzNjksMjk1MDIsMzU5MDUsMzgzNDYsMjA5NzYsMjQxNDAsMjQ0ODgsMjQ2NTMsMjQ4MjIsMjQ4ODAsMjQ5MDgsMjYxNzksMjYxODAsMjcwNDUsMjc4NDEsMjgyNTUsMjgz''@;'; put 'put ''NjEsMjg1MTQsMjkwMDQsMjk4NTIsMzAzNDMsMzE2ODEsMzE3ODMsMzM2MTgsMzQ2NDcsMzY5NDUsMzg1NDEsNDA2NDMsMjEyOTUsMjIyMzgsMjQzMTUsMjQ0NTgsMjQ2NzQsMjQ3MjQsMjUwNzksMjYyMTQsMjYzNzEsMjcyOTIsMjgxNDIsMjg1OTAsMjg3ODQsMjk1NDYsMzIzNjIsMzMyMTQs''@;'; put 'put ''MzM1ODgsMzQ1MTYsMzU0OTYsMzYwMzYsMjExMjMsMjk1NTQsMjM0NDYsMjcyNDMsMzc4OTIsMjE3NDIsMjIxNTAsMjMzODksMjU5MjgsMjU5ODksMjYzMTMsMjY3ODMsMjgwNDUsMjgxMDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkyNDMsMzI5NDgsMzcyMzcsMzk1MDEsMjAzOTksMjA1MDUsMjE0MDIsMjE1MTgsMjE1NjQsMjE4OTcsMjE5NTcsMjQxMjcs''@;'; put 'put ''MjQ0NjAsMjY0MjksMjkwMzAsMjk2NjEsMzY4NjksMjEyMTEsMjEyMzUsMjI2MjgsMjI3MzQsMjg5MzIsMjkwNzEsMjkxNzksMzQyMjQsMzUzNDcsMjYyNDgsMzQyMTYsMjE5MjcsMjYyNDQsMjkwMDIsMzM4NDEsMjEzMjEsMjE5MTMsMjc1ODUsMjQ0MDksMjQ1MDksMjU1ODIsMjYyNDksMjg5''@;'; put 'put ''OTksMzU1NjksMzY2MzcsNDA2MzgsMjAyNDEsMjU2NTgsMjg4NzUsMzAwNTQsMzQ0MDcsMjQ2NzYsMzU2NjIsNDA0NDAsMjA4MDcsMjA5ODIsMjEyNTYsMjc5NTgsMzMwMTYsNDA2NTcsMjYxMzMsMjc0MjcsMjg4MjQsMzAxNjUsMjE1MDcsMjM2NzMsMzIwMDcsMzUzNTAsMjc0MjQsMjc0NTMs''@;'; put 'put ''Mjc0NjIsMjE1NjAsMjQ2ODgsMjc5NjUsMzI3MjUsMzMyODgsMjA2OTQsMjA5NTgsMjE5MTYsMjIxMjMsMjIyMjEsMjMwMjAsMjMzMDUsMjQwNzYsMjQ5ODUsMjQ5ODQsMjUxMzcsMjYyMDYsMjYzNDIsMjkwODEsMjkxMTMsMjkxMTQsMjkzNTEsMzExNDMsMzEyMzIsMzI2OTAsMzU0NDAsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sZ2IxODAzMDpbMTk5NzAsMTk5NzIsMTk5NzMsMTk5NzQsMTk5ODMsMTk5''@;'; put 'put ''ODYsMTk5OTEsMTk5OTksMmU0LDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIwMDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIwMDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIw''@;'; put 'put ''MDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkzLDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAx''@;'; put 'put ''LDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIwMTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIwMTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIw''@;'; put 'put ''MTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2''@;'; put 'put ''LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIwMjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIw''@;'; put 'put ''Mjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMxLDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0''@;'; put 'put ''LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIwMzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIwMzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIw''@;'; put 'put ''NDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUw''@;'; put 'put ''LDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIwNDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIw''@;'; put 'put ''NDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMwLDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3''@;'; put 'put ''LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIwNTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIw''@;'; put 'put ''NTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkzLDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAxLDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEy''@;'; put 'put ''LDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIwNjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIwNjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIw''@;'; put 'put ''NjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcyLDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5''@;'; put 'put ''LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIwNjk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIwNzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIw''@;'; put 'put ''NzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMyLDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4''@;'; put 'put ''LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIwNzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIw''@;'; put 'put ''Nzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2''@;'; put 'put ''LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIwODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIwODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIw''@;'; put 'put ''ODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAyLDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEwLDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5''@;'; put 'put ''LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIwOTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIwOTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIw''@;'; put 'put ''OTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIzLDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0''@;'; put 'put ''LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIxMDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIx''@;'; put 'put ''MDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2''@;'; put 'put ''LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIx''@;'; put 'put ''MTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTkyLDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAxLDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjEx''@;'; put 'put ''LDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIxMjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIxMjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIx''@;'; put 'put ''MjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkx''@;'; put 'put ''LDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIxMzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIxMzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIx''@;'; put 'put ''MzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzkyLDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAx''@;'; put 'put ''LDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIxNDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIx''@;'; put 'put ''NDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDczLDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAzLDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4''@;'; put 'put ''LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIxNTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIxNTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIx''@;'; put 'put ''NTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1''@;'; put 'put ''LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIxNjg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIxNjk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIx''@;'; put 'put ''NzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUxLDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYyLDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcy''@;'; put 'put ''LDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIxNzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIxODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIx''@;'; put 'put ''ODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQyLDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUwLDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5''@;'; put 'put ''LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIxODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIxOTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIx''@;'; put 'put ''OTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4''@;'; put 'put ''LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIxOTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIyZTMsMjIwMDEsMjIwMDQsMjIwMDYsMjIwMDgsMjIwMDksMjIwMTAsMjIw''@;'; put 'put ''MTEsMjIwMTIsMjIwMTUsMjIwMTgsMjIwMTksMjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjYsMjIwMjcsMjIwMjksMjIwMzIsMjIwMzMsMjIwMzQsMjIwMzUsMjIwMzYsMjIwMzcsMjIwMzgsMjIwMzksMjIwNDEsMjIwNDIsMjIwNDQsMjIwNDUsMjIwNDgsMjIwNDksMjIwNTAsMjIwNTMs''@;'; put 'put ''MjIwNTQsMjIwNTYsMjIwNTcsMjIwNTgsMjIwNTksMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzIsMjIwNzQsMjIwNzYsMjIwNzcsMjIwNzgsMjIwODAsMjIwODEsMjIwODIsMjIwODMsMjIwODQsMjIwODUsMjIwODYsMjIwODcsMjIwODgsMjIwODksMjIwOTAsMjIw''@;'; put 'put ''OTEsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDEsMjIxMDIsMjIxMDYsMjIxMDcsMjIxMDksMjIxMTAsMjIxMTEsMjIxMTIsMjIxMTMsMjIxMTUsMjIxMTcsMjIxMTgsMjIxMTksMjIxMjUsMjIxMjYsMjIxMjcsMjIxMjgsMjIxMzAsMjIxMzEsMjIxMzIsMjIxMzMsMjIxMzUs''@;'; put 'put ''MjIxMzYsMjIxMzcsMjIxMzgsMjIxNDEsMjIxNDIsMjIxNDMsMjIxNDQsMjIxNDUsMjIxNDYsMjIxNDcsMjIxNDgsMjIxNTEsMjIxNTIsMjIxNTMsMjIxNTQsMjIxNTUsMjIxNTYsMjIxNTcsMjIxNjAsMjIxNjEsMjIxNjIsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcsMjIxNjgsMjIxNjksMjIx''@;'; put 'put ''NzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsMjIxNzUsMjIxNzYsMjIxNzcsMjIxNzgsMjIxODAsMjIxODEsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODYsMjIxODcsMjIxODgsMjIxODksMjIxOTAsMjIxOTIsMjIxOTMsMjIxOTQsMjIxOTUsMjIxOTYsMjIxOTcsMjIxOTgsMjIyMDAs''@;'; put 'put ''MjIyMDEsMjIyMDIsMjIyMDMsMjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsMjIyMTEsMjIyMTIsMjIyMTMsMjIyMTQsMjIyMTUsMjIyMTYsMjIyMTcsMjIyMTksMjIyMjAsMjIyMjEsMjIyMjIsMjIyMjMsMjIyMjQsMjIyMjUsMjIyMjYsMjIyMjcsMjIyMjksMjIyMzAsMjIy''@;'; put 'put ''MzIsMjIyMzMsMjIyMzYsMjIyNDMsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNDksMjIyNTAsMjIyNTIsMjIyNTQsMjIyNTUsMjIyNTgsMjIyNTksMjIyNjIsMjIyNjMsMjIyNjQsMjIyNjcsMjIyNjgsMjIyNzIsMjIyNzMsMjIyNzQsMjIyNzcsMjIyNzksMjIyODMsMjIyODQsMjIyODUs''@;'; put 'put ''MjIyODYsMjIyODcsMjIyODgsMjIyODksMjIyOTAsMjIyOTEsMjIyOTIsMjIyOTMsMjIyOTQsMjIyOTUsMjIyOTYsMjIyOTcsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDIsMjIzMDQsMjIzMDUsMjIzMDYsMjIzMDgsMjIzMDksMjIzMTAsMjIzMTEsMjIzMTUsMjIzMjEsMjIzMjIsMjIzMjQsMjIz''@;'; put 'put ''MjUsMjIzMjYsMjIzMjcsMjIzMjgsMjIzMzIsMjIzMzMsMjIzMzUsMjIzMzcsMjIzMzksMjIzNDAsMjIzNDEsMjIzNDIsMjIzNDQsMjIzNDUsMjIzNDcsMjIzNTQsMjIzNTUsMjIzNTYsMjIzNTcsMjIzNTgsMjIzNjAsMjIzNjEsMjIzNzAsMjIzNzEsMjIzNzMsMjIzNzUsMjIzODAsMjIzODIs''@;'; put 'put ''MjIzODQsMjIzODUsMjIzODYsMjIzODgsMjIzODksMjIzOTIsMjIzOTMsMjIzOTQsMjIzOTcsMjIzOTgsMjIzOTksMjI0MDAsMjI0MDEsMjI0MDcsMjI0MDgsMjI0MDksMjI0MTAsMjI0MTMsMjI0MTQsMjI0MTUsMjI0MTYsMjI0MTcsMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0''@;'; put 'put ''MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzcsMjI0NDAsMjI0NDIsMjI0NDQsMjI0NDcsMjI0NDgsMjI0NDksMjI0NTEsMjI0NTMsMjI0NTQsMjI0NTUsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAsMjI0NjEsMjI0NjIsMjI0NjMsMjI0NjQsMjI0NjUsMjI0NjgsMjI0Njks''@;'; put 'put ''MjI0NzAsMjI0NzEsMjI0NzIsMjI0NzMsMjI0NzQsMjI0NzYsMjI0NzcsMjI0ODAsMjI0ODEsMjI0ODMsMjI0ODYsMjI0ODcsMjI0OTEsMjI0OTIsMjI0OTQsMjI0OTcsMjI0OTgsMjI0OTksMjI1MDEsMjI1MDIsMjI1MDMsMjI1MDQsMjI1MDUsMjI1MDYsMjI1MDcsMjI1MDgsMjI1MTAsMjI1''@;'; put 'put ''MTIsMjI1MTMsMjI1MTQsMjI1MTUsMjI1MTcsMjI1MTgsMjI1MTksMjI1MjMsMjI1MjQsMjI1MjYsMjI1MjcsMjI1MjksMjI1MzEsMjI1MzIsMjI1MzMsMjI1MzYsMjI1MzcsMjI1MzgsMjI1NDAsMjI1NDIsMjI1NDMsMjI1NDQsMjI1NDYsMjI1NDcsMjI1NDgsMjI1NTAsMjI1NTEsMjI1NTIs''@;'; put 'put ''MjI1NTQsMjI1NTUsMjI1NTYsMjI1NTcsMjI1NTksMjI1NjIsMjI1NjMsMjI1NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzEsMjI1NzIsMjI1NzMsMjI1NzQsMjI1NzUsMjI1NzcsMjI1NzgsMjI1NzksMjI1ODAsMjI1ODIsMjI1ODMsMjI1ODQsMjI1ODUsMjI1ODYsMjI1ODcsMjI1''@;'; put 'put ''ODgsMjI1ODksMjI1OTAsMjI1OTEsMjI1OTIsMjI1OTMsMjI1OTQsMjI1OTUsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2MDIsMjI2MDMsMjI2MDYsMjI2MDcsMjI2MDgsMjI2MTAsMjI2MTEsMjI2MTMsMjI2MTQsMjI2MTUsMjI2MTcsMjI2MTgsMjI2MTksMjI2MjAsMjI2MjEs''@;'; put 'put ''MjI2MjMsMjI2MjQsMjI2MjUsMjI2MjYsMjI2MjcsMjI2MjgsMjI2MzAsMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzcsMjI2MzgsMjI2MzksMjI2NDAsMjI2NDEsMjI2NDIsMjI2NDMsMjI2NDQsMjI2NDUsMjI2NDYsMjI2NDcsMjI2NDgsMjI2NDksMjI2NTAsMjI2NTEsMjI2NTIsMjI2''@;'; put 'put ''NTMsMjI2NTUsMjI2NTgsMjI2NjAsMjI2NjIsMjI2NjMsMjI2NjQsMjI2NjYsMjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMsMjI2NzYsMjI2NzcsMjI2NzgsMjI2NzksMjI2ODAsMjI2ODMsMjI2ODQsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTEsMjI2OTIs''@;'; put 'put ''MjI2OTMsMjI2OTQsMjI2OTUsMjI2OTgsMjI2OTksMjI3MDAsMjI3MDEsMjI3MDIsMjI3MDMsMjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3MTMsMjI3MTQsMjI3MTUsMjI3MTcsMjI3MTgsMjI3MTksMjI3MjAsMjI3MjIsMjI3MjMsMjI3''@;'; put 'put ''MjQsMjI3MjYsMjI3MjcsMjI3MjgsMjI3MjksMjI3MzAsMjI3MzEsMjI3MzIsMjI3MzMsMjI3MzQsMjI3MzUsMjI3MzYsMjI3MzgsMjI3MzksMjI3NDAsMjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcsMjI3NDgsMjI3NDksMjI3NTAsMjI3NTEsMjI3NTIsMjI3NTMsMjI3NTQs''@;'; put 'put ''MjI3NTUsMjI3NTcsMjI3NTgsMjI3NTksMjI3NjAsMjI3NjEsMjI3NjIsMjI3NjUsMjI3NjcsMjI3NjksMjI3NzAsMjI3NzIsMjI3NzMsMjI3NzUsMjI3NzYsMjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3ODMsMjI3ODQsMjI3ODUsMjI3ODcsMjI3ODksMjI3OTAsMjI3OTIsMjI3''@;'; put 'put ''OTMsMjI3OTQsMjI3OTUsMjI3OTYsMjI3OTgsMjI4MDAsMjI4MDEsMjI4MDIsMjI4MDMsMjI4MDcsMjI4MDgsMjI4MTEsMjI4MTMsMjI4MTQsMjI4MTYsMjI4MTcsMjI4MTgsMjI4MTksMjI4MjIsMjI4MjQsMjI4MjgsMjI4MzIsMjI4MzQsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDMsMjI4NDUs''@;'; put 'put ''MjI4NDYsMjI4NDcsMjI4NDgsMjI4NTEsMjI4NTMsMjI4NTQsMjI4NTgsMjI4NjAsMjI4NjEsMjI4NjQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzYsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4ODQsMjI4ODYsMjI4ODcsMjI4ODgsMjI4ODksMjI4OTAsMjI4OTEsMjI4''@;'; put 'put ''OTIsMjI4OTMsMjI4OTQsMjI4OTUsMjI4OTYsMjI4OTcsMjI4OTgsMjI5MDEsMjI5MDMsMjI5MDYsMjI5MDcsMjI5MDgsMjI5MTAsMjI5MTEsMjI5MTIsMjI5MTcsMjI5MjEsMjI5MjMsMjI5MjQsMjI5MjYsMjI5MjcsMjI5MjgsMjI5MjksMjI5MzIsMjI5MzMsMjI5MzYsMjI5MzgsMjI5Mzks''@;'; put 'put ''MjI5NDAsMjI5NDEsMjI5NDMsMjI5NDQsMjI5NDUsMjI5NDYsMjI5NTAsMjI5NTEsMjI5NTYsMjI5NTcsMjI5NjAsMjI5NjEsMjI5NjMsMjI5NjQsMjI5NjUsMjI5NjYsMjI5NjcsMjI5NjgsMjI5NzAsMjI5NzIsMjI5NzMsMjI5NzUsMjI5NzYsMjI5NzcsMjI5NzgsMjI5NzksMjI5ODAsMjI5''@;'; put 'put ''ODEsMjI5ODMsMjI5ODQsMjI5ODUsMjI5ODgsMjI5ODksMjI5OTAsMjI5OTEsMjI5OTcsMjI5OTgsMjMwMDEsMjMwMDMsMjMwMDYsMjMwMDcsMjMwMDgsMjMwMDksMjMwMTAsMjMwMTIsMjMwMTQsMjMwMTUsMjMwMTcsMjMwMTgsMjMwMTksMjMwMjEsMjMwMjIsMjMwMjMsMjMwMjQsMjMwMjUs''@;'; put 'put ''MjMwMjYsMjMwMjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzQsMjMwMzYsMjMwMzcsMjMwMzgsMjMwNDAsMjMwNDIsMjMwNTAsMjMwNTEsMjMwNTMsMjMwNTQsMjMwNTUsMjMwNTYsMjMwNTgsMjMwNjAsMjMwNjEsMjMwNjIsMjMwNjMsMjMwNjUsMjMwNjYsMjMwNjcsMjMw''@;'; put 'put ''NjksMjMwNzAsMjMwNzMsMjMwNzQsMjMwNzYsMjMwNzgsMjMwNzksMjMwODAsMjMwODIsMjMwODMsMjMwODQsMjMwODUsMjMwODYsMjMwODcsMjMwODgsMjMwOTEsMjMwOTMsMjMwOTUsMjMwOTYsMjMwOTcsMjMwOTgsMjMwOTksMjMxMDEsMjMxMDIsMjMxMDMsMjMxMDUsMjMxMDYsMjMxMDcs''@;'; put 'put ''MjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTUsMjMxMTYsMjMxMTcsMjMxMTgsMjMxMTksMjMxMjAsMjMxMjEsMjMxMjIsMjMxMjMsMjMxMjQsMjMxMjYsMjMxMjcsMjMxMjgsMjMxMjksMjMxMzEsMjMxMzIsMjMxMzMsMjMxMzQsMjMxMzUsMjMxMzYsMjMxMzcsMjMxMzksMjMxNDAsMjMx''@;'; put 'put ''NDEsMjMxNDIsMjMxNDQsMjMxNDUsMjMxNDcsMjMxNDgsMjMxNDksMjMxNTAsMjMxNTEsMjMxNTIsMjMxNTMsMjMxNTQsMjMxNTUsMjMxNjAsMjMxNjEsMjMxNjMsMjMxNjQsMjMxNjUsMjMxNjYsMjMxNjgsMjMxNjksMjMxNzAsMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMxNzUsMjMxNzYs''@;'; put 'put ''MjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsMjMxODMsMjMxODQsMjMxODUsMjMxODcsMjMxODgsMjMxODksMjMxOTAsMjMxOTEsMjMxOTIsMjMxOTMsMjMxOTYsMjMxOTcsMjMxOTgsMjMxOTksMjMyMDAsMjMyMDEsMjMyMDIsMjMyMDMsMjMyMDQsMjMyMDUsMjMyMDYsMjMy''@;'; put 'put ''MDcsMjMyMDgsMjMyMDksMjMyMTEsMjMyMTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMjAsMjMyMjIsMjMyMjMsMjMyMjUsMjMyMjYsMjMyMjcsMjMyMjgsMjMyMjksMjMyMzEsMjMyMzIsMjMyMzUsMjMyMzYsMjMyMzcsMjMyMzgsMjMyMzksMjMyNDAsMjMyNDIsMjMyNDMs''@;'; put 'put ''MjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMyNDksMjMyNTEsMjMyNTMsMjMyNTUsMjMyNTcsMjMyNTgsMjMyNTksMjMyNjEsMjMyNjIsMjMyNjMsMjMyNjYsMjMyNjgsMjMyNjksMjMyNzEsMjMyNzIsMjMyNzQsMjMyNzYsMjMyNzcsMjMyNzgsMjMyNzksMjMyODAsMjMyODIsMjMyODMsMjMy''@;'; put 'put ''ODQsMjMyODUsMjMyODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsMjMyOTEsMjMyOTIsMjMyOTMsMjMyOTQsMjMyOTUsMjMyOTYsMjMyOTcsMjMyOTgsMjMyOTksMjMzMDAsMjMzMDEsMjMzMDIsMjMzMDMsMjMzMDQsMjMzMDYsMjMzMDcsMjMzMDgsMjMzMDksMjMzMTAsMjMzMTEsMjMzMTIs''@;'; put 'put ''MjMzMTMsMjMzMTQsMjMzMTUsMjMzMTYsMjMzMTcsMjMzMjAsMjMzMjEsMjMzMjIsMjMzMjMsMjMzMjQsMjMzMjUsMjMzMjYsMjMzMjcsMjMzMjgsMjMzMjksMjMzMzAsMjMzMzEsMjMzMzIsMjMzMzMsMjMzMzQsMjMzMzUsMjMzMzYsMjMzMzcsMjMzMzgsMjMzMzksMjMzNDAsMjMzNDEsMjMz''@;'; put 'put ''NDIsMjMzNDMsMjMzNDQsMjMzNDUsMjMzNDcsMjMzNDksMjMzNTAsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTksMjMzNjEsMjMzNjIsMjMzNjMsMjMzNjQsMjMzNjUsMjMzNjYsMjMzNjcsMjMzNjgsMjMzNjksMjMzNzAsMjMzNzEsMjMzNzIsMjMzNzMs''@;'; put 'put ''MjMzNzQsMjMzNzUsMjMzNzgsMjMzODIsMjMzOTAsMjMzOTIsMjMzOTMsMjMzOTksMjM0MDAsMjM0MDMsMjM0MDUsMjM0MDYsMjM0MDcsMjM0MTAsMjM0MTIsMjM0MTQsMjM0MTUsMjM0MTYsMjM0MTcsMjM0MTksMjM0MjAsMjM0MjIsMjM0MjMsMjM0MjYsMjM0MzAsMjM0MzQsMjM0MzcsMjM0''@;'; put 'put ''MzgsMjM0NDAsMjM0NDEsMjM0NDIsMjM0NDQsMjM0NDYsMjM0NTUsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzAsMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODMsMjM0ODQsMjM0ODgsMjM0ODksMjM0OTEsMjM0OTYsMjM0OTcsMjM0OTgsMjM0OTksMjM1MDEs''@;'; put 'put ''MjM1MDIsMjM1MDMsMjM1MDUsMjM1MDgsMjM1MDksMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MTUsMjM1MTYsMjM1MjAsMjM1MjIsMjM1MjMsMjM1MjYsMjM1MjcsMjM1MjksMjM1MzAsMjM1MzEsMjM1MzIsMjM1MzMsMjM1MzUsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1''@;'; put 'put ''NDEsMjM1NDIsMjM1NDMsMjM1NDksMjM1NTAsMjM1NTIsMjM1NTQsMjM1NTUsMjM1NTcsMjM1NTksMjM1NjAsMjM1NjMsMjM1NjQsMjM1NjUsMjM1NjYsMjM1NjgsMjM1NzAsMjM1NzEsMjM1NzUsMjM1NzcsMjM1NzksMjM1ODIsMjM1ODMsMjM1ODQsMjM1ODUsMjM1ODcsMjM1OTAsMjM1OTIs''@;'; put 'put ''MjM1OTMsMjM1OTQsMjM1OTUsMjM1OTcsMjM1OTgsMjM1OTksMjM2MDAsMjM2MDIsMjM2MDMsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MTksMjM2MjAsMjM2MjIsMjM2MjMsMjM2MjgsMjM2MjksMjM2MzQsMjM2MzUsMjM2MzYsMjM2MzgsMjM2MzksMjM2NDAsMjM2NDIsMjM2NDMsMjM2NDQsMjM2''@;'; put 'put ''NDUsMjM2NDcsMjM2NTAsMjM2NTIsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NTgsMjM2NTksMjM2NjAsMjM2NjEsMjM2NjQsMjM2NjYsMjM2NjcsMjM2NjgsMjM2NjksMjM2NzAsMjM2NzEsMjM2NzIsMjM2NzUsMjM2NzYsMjM2NzcsMjM2NzgsMjM2ODAsMjM2ODMsMjM2ODQsMjM2ODUsMjM2ODYs''@;'; put 'put ''MjM2ODcsMjM2ODksMjM2OTAsMjM2OTEsMjM2OTQsMjM2OTUsMjM2OTgsMjM2OTksMjM3MDEsMjM3MDksMjM3MTAsMjM3MTEsMjM3MTIsMjM3MTMsMjM3MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAsMjM3MjIsMjM3MjYsMjM3MjcsMjM3MjgsMjM3MzAsMjM3MzIsMjM3MzQsMjM3MzcsMjM3''@;'; put 'put ''MzgsMjM3MzksMjM3NDAsMjM3NDIsMjM3NDQsMjM3NDYsMjM3NDcsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTYsMjM3NTcsMjM3NTgsMjM3NTksMjM3NjAsMjM3NjEsMjM3NjMsMjM3NjQsMjM3NjUsMjM3NjYsMjM3NjcsMjM3NjgsMjM3NzAsMjM3NzEsMjM3NzIs''@;'; put 'put ''MjM3NzMsMjM3NzQsMjM3NzUsMjM3NzYsMjM3NzgsMjM3NzksMjM3ODMsMjM3ODUsMjM3ODcsMjM3ODgsMjM3OTAsMjM3OTEsMjM3OTMsMjM3OTQsMjM3OTUsMjM3OTYsMjM3OTcsMjM3OTgsMjM3OTksMjM4MDAsMjM4MDEsMjM4MDIsMjM4MDQsMjM4MDUsMjM4MDYsMjM4MDcsMjM4MDgsMjM4''@;'; put 'put ''MDksMjM4MTIsMjM4MTMsMjM4MTYsMjM4MTcsMjM4MTgsMjM4MTksMjM4MjAsMjM4MjEsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4MjksMjM4MzEsMjM4MzIsMjM4MzMsMjM4MzQsMjM4MzYsMjM4MzcsMjM4MzksMjM4NDAsMjM4NDEsMjM4NDIsMjM4NDMsMjM4NDUsMjM4NDgs''@;'; put 'put ''MjM4NTAsMjM4NTEsMjM4NTIsMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4NTksMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsMjM4NjcsMjM4NjgsMjM4NzEsMjM4NzIsMjM4NzMsMjM4NzQsMjM4NzUsMjM4NzYsMjM4NzcsMjM4NzgsMjM4ODAsMjM4ODEsMjM4ODUsMjM4''@;'; put 'put ''ODYsMjM4ODcsMjM4ODgsMjM4ODksMjM4OTAsMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4OTcsMjM4OTgsMjM5MDAsMjM5MDIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDcsMjM5MDgsMjM5MDksMjM5MTAsMjM5MTEsMjM5MTIsMjM5MTQsMjM5MTcsMjM5MTgsMjM5MjAs''@;'; put 'put ''MjM5MjEsMjM5MjIsMjM5MjMsMjM5MjUsMjM5MjYsMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5MzMsMjM5MzQsMjM5MzUsMjM5MzYsMjM5MzcsMjM5MzksMjM5NDAsMjM5NDEsMjM5NDIsMjM5NDMsMjM5NDQsMjM5NDUsMjM5NDYsMjM5NDcsMjM5NDgsMjM5NDksMjM5''@;'; put 'put ''NTAsMjM5NTEsMjM5NTIsMjM5NTMsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NTgsMjM5NTksMjM5NjAsMjM5NjIsMjM5NjMsMjM5NjQsMjM5NjYsMjM5NjcsMjM5NjgsMjM5NjksMjM5NzAsMjM5NzEsMjM5NzIsMjM5NzMsMjM5NzQsMjM5NzUsMjM5NzYsMjM5NzcsMjM5NzgsMjM5Nzks''@;'; put 'put ''MjM5ODAsMjM5ODEsMjM5ODIsMjM5ODMsMjM5ODQsMjM5ODUsMjM5ODYsMjM5ODcsMjM5ODgsMjM5ODksMjM5OTAsMjM5OTIsMjM5OTMsMjM5OTQsMjM5OTUsMjM5OTYsMjM5OTcsMjM5OTgsMjM5OTksMjRlMywyNDAwMSwyNDAwMiwyNDAwMywyNDAwNCwyNDAwNiwyNDAwNywyNDAwOCwyNDAw''@;'; put 'put ''OSwyNDAxMCwyNDAxMSwyNDAxMiwyNDAxNCwyNDAxNSwyNDAxNiwyNDAxNywyNDAxOCwyNDAxOSwyNDAyMCwyNDAyMSwyNDAyMiwyNDAyMywyNDAyNCwyNDAyNSwyNDAyNiwyNDAyOCwyNDAzMSwyNDAzMiwyNDAzNSwyNDAzNiwyNDA0MiwyNDA0NCwyNDA0NSwyNDA0OCwyNDA1MywyNDA1NCwy''@;'; put 'put ''NDA1NiwyNDA1NywyNDA1OCwyNDA1OSwyNDA2MCwyNDA2MywyNDA2NCwyNDA2OCwyNDA3MSwyNDA3MywyNDA3NCwyNDA3NSwyNDA3NywyNDA3OCwyNDA4MiwyNDA4MywyNDA4NywyNDA5NCwyNDA5NSwyNDA5NiwyNDA5NywyNDA5OCwyNDA5OSwyNDEwMCwyNDEwMSwyNDEwNCwyNDEwNSwyNDEw''@;'; put 'put ''NiwyNDEwNywyNDEwOCwyNDExMSwyNDExMiwyNDExNCwyNDExNSwyNDExNiwyNDExNywyNDExOCwyNDEyMSwyNDEyMiwyNDEyNiwyNDEyNywyNDEyOCwyNDEyOSwyNDEzMSwyNDEzNCwyNDEzNSwyNDEzNiwyNDEzNywyNDEzOCwyNDEzOSwyNDE0MSwyNDE0MiwyNDE0MywyNDE0NCwyNDE0NSwy''@;'; put 'put ''NDE0NiwyNDE0NywyNDE1MCwyNDE1MSwyNDE1MiwyNDE1MywyNDE1NCwyNDE1NiwyNDE1NywyNDE1OSwyNDE2MCwyNDE2MywyNDE2NCwyNDE2NSwyNDE2NiwyNDE2NywyNDE2OCwyNDE2OSwyNDE3MCwyNDE3MSwyNDE3MiwyNDE3MywyNDE3NCwyNDE3NSwyNDE3NiwyNDE3NywyNDE4MSwyNDE4''@;'; put 'put ''MywyNDE4NSwyNDE5MCwyNDE5MywyNDE5NCwyNDE5NSwyNDE5NywyNDIwMCwyNDIwMSwyNDIwNCwyNDIwNSwyNDIwNiwyNDIxMCwyNDIxNiwyNDIxOSwyNDIyMSwyNDIyNSwyNDIyNiwyNDIyNywyNDIyOCwyNDIzMiwyNDIzMywyNDIzNCwyNDIzNSwyNDIzNiwyNDIzOCwyNDIzOSwyNDI0MCwy''@;'; put 'put ''NDI0MSwyNDI0MiwyNDI0NCwyNDI1MCwyNDI1MSwyNDI1MiwyNDI1MywyNDI1NSwyNDI1NiwyNDI1NywyNDI1OCwyNDI1OSwyNDI2MCwyNDI2MSwyNDI2MiwyNDI2MywyNDI2NCwyNDI2NywyNDI2OCwyNDI2OSwyNDI3MCwyNDI3MSwyNDI3MiwyNDI3NiwyNDI3NywyNDI3OSwyNDI4MCwyNDI4''@;'; put 'put ''MSwyNDI4MiwyNDI4NCwyNDI4NSwyNDI4NiwyNDI4NywyNDI4OCwyNDI4OSwyNDI5MCwyNDI5MSwyNDI5MiwyNDI5MywyNDI5NCwyNDI5NSwyNDI5NywyNDI5OSwyNDMwMCwyNDMwMSwyNDMwMiwyNDMwMywyNDMwNCwyNDMwNSwyNDMwNiwyNDMwNywyNDMwOSwyNDMxMiwyNDMxMywyNDMxNSwy''@;'; put 'put ''NDMxNiwyNDMxNywyNDMyNSwyNDMyNiwyNDMyNywyNDMyOSwyNDMzMiwyNDMzMywyNDMzNCwyNDMzNiwyNDMzOCwyNDM0MCwyNDM0MiwyNDM0NSwyNDM0NiwyNDM0OCwyNDM0OSwyNDM1MCwyNDM1MywyNDM1NCwyNDM1NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3''@;'; put 'put ''MCwyNDM3MSwyNDM3MiwyNDM3MywyNDM3NCwyNDM3NSwyNDM3NiwyNDM3OSwyNDM4MSwyNDM4MiwyNDM4MywyNDM4NSwyNDM4NiwyNDM4NywyNDM4OCwyNDM4OSwyNDM5MCwyNDM5MSwyNDM5MiwyNDM5MywyNDM5NCwyNDM5NSwyNDM5NiwyNDM5NywyNDM5OCwyNDM5OSwyNDQwMSwyNDQwNCwy''@;'; put 'put ''NDQwOSwyNDQxMCwyNDQxMSwyNDQxMiwyNDQxNCwyNDQxNSwyNDQxNiwyNDQxOSwyNDQyMSwyNDQyMywyNDQyNCwyNDQyNywyNDQzMCwyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQzOCwyNDQ0MCwyNDQ0MiwyNDQ0NSwyNDQ0NiwyNDQ0NywyNDQ1MSwyNDQ1NCwyNDQ2MSwyNDQ2MiwyNDQ2''@;'; put 'put ''MywyNDQ2NSwyNDQ2NywyNDQ2OCwyNDQ3MCwyNDQ3NCwyNDQ3NSwyNDQ3NywyNDQ3OCwyNDQ3OSwyNDQ4MCwyNDQ4MiwyNDQ4MywyNDQ4NCwyNDQ4NSwyNDQ4NiwyNDQ4NywyNDQ4OSwyNDQ5MSwyNDQ5MiwyNDQ5NSwyNDQ5NiwyNDQ5NywyNDQ5OCwyNDQ5OSwyNDUwMCwyNDUwMiwyNDUwNCwy''@;'; put 'put ''NDUwNSwyNDUwNiwyNDUwNywyNDUxMCwyNDUxMSwyNDUxMiwyNDUxMywyNDUxNCwyNDUxOSwyNDUyMCwyNDUyMiwyNDUyMywyNDUyNiwyNDUzMSwyNDUzMiwyNDUzMywyNDUzOCwyNDUzOSwyNDU0MCwyNDU0MiwyNDU0MywyNDU0NiwyNDU0NywyNDU0OSwyNDU1MCwyNDU1MiwyNDU1MywyNDU1''@;'; put 'put ''NiwyNDU1OSwyNDU2MCwyNDU2MiwyNDU2MywyNDU2NCwyNDU2NiwyNDU2NywyNDU2OSwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NCwyNDU4NSwyNDU4NywyNDU4OCwyNDU5MiwyNDU5MywyNDU5NSwyNDU5OSwyNDYwMCwyNDYwMiwyNDYwNiwyNDYwNywyNDYxMCwyNDYxMSwyNDYxMiwyNDYyMCwy''@;'; put 'put ''NDYyMSwyNDYyMiwyNDYyNCwyNDYyNSwyNDYyNiwyNDYyNywyNDYyOCwyNDYzMCwyNDYzMSwyNDYzMiwyNDYzMywyNDYzNCwyNDYzNywyNDYzOCwyNDY0MCwyNDY0NCwyNDY0NSwyNDY0NiwyNDY0NywyNDY0OCwyNDY0OSwyNDY1MCwyNDY1MiwyNDY1NCwyNDY1NSwyNDY1NywyNDY1OSwyNDY2''@;'; put 'put ''MCwyNDY2MiwyNDY2MywyNDY2NCwyNDY2NywyNDY2OCwyNDY3MCwyNDY3MSwyNDY3MiwyNDY3MywyNDY3NywyNDY3OCwyNDY4NiwyNDY4OSwyNDY5MCwyNDY5MiwyNDY5MywyNDY5NSwyNDcwMiwyNDcwNCwyNDcwNSwyNDcwNiwyNDcwOSwyNDcxMCwyNDcxMSwyNDcxMiwyNDcxNCwyNDcxNSwy''@;'; put 'put ''NDcxOCwyNDcxOSwyNDcyMCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyNywyNDcyOCwyNDcyOSwyNDczMiwyNDczNCwyNDczNywyNDczOCwyNDc0MCwyNDc0MSwyNDc0MywyNDc0NSwyNDc0NiwyNDc1MCwyNDc1MiwyNDc1NSwyNDc1NywyNDc1OCwyNDc1OSwyNDc2MSwyNDc2MiwyNDc2NSwyNDc2''@;'; put 'put ''NiwyNDc2NywyNDc2OCwyNDc2OSwyNDc3MCwyNDc3MSwyNDc3MiwyNDc3NSwyNDc3NiwyNDc3NywyNDc4MCwyNDc4MSwyNDc4MiwyNDc4MywyNDc4NCwyNDc4NiwyNDc4NywyNDc4OCwyNDc5MCwyNDc5MSwyNDc5MywyNDc5NSwyNDc5OCwyNDgwMSwyNDgwMiwyNDgwMywyNDgwNCwyNDgwNSwy''@;'; put 'put ''NDgxMCwyNDgxNywyNDgxOCwyNDgyMSwyNDgyMywyNDgyNCwyNDgyNywyNDgyOCwyNDgyOSwyNDgzMCwyNDgzMSwyNDgzNCwyNDgzNSwyNDgzNiwyNDgzNywyNDgzOSwyNDg0MiwyNDg0MywyNDg0NCwyNDg0OCwyNDg0OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NiwyNDg1''@;'; put 'put ''NywyNDg1OSwyNDg2MCwyNDg2MSwyNDg2MiwyNDg2NSwyNDg2NiwyNDg2OSwyNDg3MiwyNDg3MywyNDg3NCwyNDg3NiwyNDg3NywyNDg3OCwyNDg3OSwyNDg4MCwyNDg4MSwyNDg4MiwyNDg4MywyNDg4NCwyNDg4NSwyNDg4NiwyNDg4NywyNDg4OCwyNDg4OSwyNDg5MCwyNDg5MSwyNDg5Miwy''@;'; put 'put ''NDg5MywyNDg5NCwyNDg5NiwyNDg5NywyNDg5OCwyNDg5OSwyNDkwMCwyNDkwMSwyNDkwMiwyNDkwMywyNDkwNSwyNDkwNywyNDkwOSwyNDkxMSwyNDkxMiwyNDkxNCwyNDkxNSwyNDkxNiwyNDkxOCwyNDkxOSwyNDkyMCwyNDkyMSwyNDkyMiwyNDkyMywyNDkyNCwyNDkyNiwyNDkyNywyNDky''@;'; put 'put ''OCwyNDkyOSwyNDkzMSwyNDkzMiwyNDkzMywyNDkzNCwyNDkzNywyNDkzOCwyNDkzOSwyNDk0MCwyNDk0MSwyNDk0MiwyNDk0MywyNDk0NSwyNDk0NiwyNDk0NywyNDk0OCwyNDk1MCwyNDk1MiwyNDk1MywyNDk1NCwyNDk1NSwyNDk1NiwyNDk1NywyNDk1OCwyNDk1OSwyNDk2MCwyNDk2MSwy''@;'; put 'put ''NDk2MiwyNDk2MywyNDk2NCwyNDk2NSwyNDk2NiwyNDk2NywyNDk2OCwyNDk2OSwyNDk3MCwyNDk3MiwyNDk3MywyNDk3NSwyNDk3NiwyNDk3NywyNDk3OCwyNDk3OSwyNDk4MSwyNDk4MiwyNDk4MywyNDk4NCwyNDk4NSwyNDk4NiwyNDk4NywyNDk4OCwyNDk5MCwyNDk5MSwyNDk5MiwyNDk5''@;'; put 'put ''MywyNDk5NCwyNDk5NSwyNDk5NiwyNDk5NywyNDk5OCwyNTAwMiwyNTAwMywyNTAwNSwyNTAwNiwyNTAwNywyNTAwOCwyNTAwOSwyNTAxMCwyNTAxMSwyNTAxMiwyNTAxMywyNTAxNCwyNTAxNiwyNTAxNywyNTAxOCwyNTAxOSwyNTAyMCwyNTAyMSwyNTAyMywyNTAyNCwyNTAyNSwyNTAyNywy''@;'; put 'put ''NTAyOCwyNTAyOSwyNTAzMCwyNTAzMSwyNTAzMywyNTAzNiwyNTAzNywyNTAzOCwyNTAzOSwyNTA0MCwyNTA0MywyNTA0NSwyNTA0NiwyNTA0NywyNTA0OCwyNTA0OSwyNTA1MCwyNTA1MSwyNTA1MiwyNTA1MywyNTA1NCwyNTA1NSwyNTA1NiwyNTA1NywyNTA1OCwyNTA1OSwyNTA2MCwyNTA2''@;'; put 'put ''MSwyNTA2MywyNTA2NCwyNTA2NSwyNTA2NiwyNTA2NywyNTA2OCwyNTA2OSwyNTA3MCwyNTA3MSwyNTA3MiwyNTA3MywyNTA3NCwyNTA3NSwyNTA3NiwyNTA3OCwyNTA3OSwyNTA4MCwyNTA4MSwyNTA4MiwyNTA4MywyNTA4NCwyNTA4NSwyNTA4NiwyNTA4OCwyNTA4OSwyNTA5MCwyNTA5MSwy''@;'; put 'put ''NTA5MiwyNTA5MywyNTA5NSwyNTA5NywyNTEwNywyNTEwOCwyNTExMywyNTExNiwyNTExNywyNTExOCwyNTEyMCwyNTEyMywyNTEyNiwyNTEyNywyNTEyOCwyNTEyOSwyNTEzMSwyNTEzMywyNTEzNSwyNTEzNiwyNTEzNywyNTEzOCwyNTE0MSwyNTE0MiwyNTE0NCwyNTE0NSwyNTE0NiwyNTE0''@;'; put 'put ''NywyNTE0OCwyNTE1NCwyNTE1NiwyNTE1NywyNTE1OCwyNTE2MiwyNTE2NywyNTE2OCwyNTE3MywyNTE3NCwyNTE3NSwyNTE3NywyNTE3OCwyNTE4MCwyNTE4MSwyNTE4MiwyNTE4MywyNTE4NCwyNTE4NSwyNTE4NiwyNTE4OCwyNTE4OSwyNTE5MiwyNTIwMSwyNTIwMiwyNTIwNCwyNTIwNSwy''@;'; put 'put ''NTIwNywyNTIwOCwyNTIxMCwyNTIxMSwyNTIxMywyNTIxNywyNTIxOCwyNTIxOSwyNTIyMSwyNTIyMiwyNTIyMywyNTIyNCwyNTIyNywyNTIyOCwyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTIzNiwyNTI0MSwyNTI0NCwyNTI0NSwyNTI0NiwyNTI1MSwyNTI1NCwyNTI1NSwyNTI1NywyNTI1''@;'; put 'put ''OCwyNTI2MSwyNTI2MiwyNTI2MywyNTI2NCwyNTI2NiwyNTI2NywyNTI2OCwyNTI3MCwyNTI3MSwyNTI3MiwyNTI3NCwyNTI3OCwyNTI4MCwyNTI4MSwyNTI4MywyNTI5MSwyNTI5NSwyNTI5NywyNTMwMSwyNTMwOSwyNTMxMCwyNTMxMiwyNTMxMywyNTMxNiwyNTMyMiwyNTMyMywyNTMyOCwy''@;'; put 'put ''NTMzMCwyNTMzMywyNTMzNiwyNTMzNywyNTMzOCwyNTMzOSwyNTM0NCwyNTM0NywyNTM0OCwyNTM0OSwyNTM1MCwyNTM1NCwyNTM1NSwyNTM1NiwyNTM1NywyNTM1OSwyNTM2MCwyNTM2MiwyNTM2MywyNTM2NCwyNTM2NSwyNTM2NywyNTM2OCwyNTM2OSwyNTM3MiwyNTM4MiwyNTM4MywyNTM4''@;'; put 'put ''NSwyNTM4OCwyNTM4OSwyNTM5MCwyNTM5MiwyNTM5MywyNTM5NSwyNTM5NiwyNTM5NywyNTM5OCwyNTM5OSwyNTQwMCwyNTQwMywyNTQwNCwyNTQwNiwyNTQwNywyNTQwOCwyNTQwOSwyNTQxMiwyNTQxNSwyNTQxNiwyNTQxOCwyNTQyNSwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMCwyNTQzMSwy''@;'; put 'put ''NTQzMiwyNTQzMywyNTQzNCwyNTQzNSwyNTQzNiwyNTQzNywyNTQ0MCwyNTQ0NCwyNTQ0NSwyNTQ0NiwyNTQ0OCwyNTQ1MCwyNTQ1MSwyNTQ1MiwyNTQ1NSwyNTQ1NiwyNTQ1OCwyNTQ1OSwyNTQ2MCwyNTQ2MSwyNTQ2NCwyNTQ2NSwyNTQ2OCwyNTQ2OSwyNTQ3MCwyNTQ3MSwyNTQ3MywyNTQ3''@;'; put 'put ''NSwyNTQ3NiwyNTQ3NywyNTQ3OCwyNTQ4MywyNTQ4NSwyNTQ4OSwyNTQ5MSwyNTQ5MiwyNTQ5MywyNTQ5NSwyNTQ5NywyNTQ5OCwyNTQ5OSwyNTUwMCwyNTUwMSwyNTUwMiwyNTUwMywyNTUwNSwyNTUwOCwyNTUxMCwyNTUxNSwyNTUxOSwyNTUyMSwyNTUyMiwyNTUyNSwyNTUyNiwyNTUyOSwy''@;'; put 'put ''NTUzMSwyNTUzMywyNTUzNSwyNTUzNiwyNTUzNywyNTUzOCwyNTUzOSwyNTU0MSwyNTU0MywyNTU0NCwyNTU0NiwyNTU0NywyNTU0OCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU1OSwyNTU2MCwyNTU2MSwyNTU2MiwyNTU2MywyNTU2NCwyNTU2NSwyNTU2NywyNTU3MCwyNTU3MiwyNTU3''@;'; put 'put ''MywyNTU3NCwyNTU3NSwyNTU3NiwyNTU3OSwyNTU4MCwyNTU4MiwyNTU4MywyNTU4NCwyNTU4NSwyNTU4NywyNTU4OSwyNTU5MSwyNTU5MywyNTU5NCwyNTU5NSwyNTU5NiwyNTU5OCwyNTYwMywyNTYwNCwyNTYwNiwyNTYwNywyNTYwOCwyNTYwOSwyNTYxMCwyNTYxMywyNTYxNCwyNTYxNywy''@;'; put 'put ''NTYxOCwyNTYyMSwyNTYyMiwyNTYyMywyNTYyNCwyNTYyNSwyNTYyNiwyNTYyOSwyNTYzMSwyNTYzNCwyNTYzNSwyNTYzNiwyNTYzNywyNTYzOSwyNTY0MCwyNTY0MSwyNTY0MywyNTY0NiwyNTY0NywyNTY0OCwyNTY0OSwyNTY1MCwyNTY1MSwyNTY1MywyNTY1NCwyNTY1NSwyNTY1NiwyNTY1''@;'; put 'put ''NywyNTY1OSwyNTY2MCwyNTY2MiwyNTY2NCwyNTY2NiwyNTY2NywyNTY3MywyNTY3NSwyNTY3NiwyNTY3NywyNTY3OCwyNTY3OSwyNTY4MCwyNTY4MSwyNTY4MywyNTY4NSwyNTY4NiwyNTY4NywyNTY4OSwyNTY5MCwyNTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OCwy''@;'; put 'put ''NTY5OSwyNTcwMCwyNTcwMSwyNTcwMiwyNTcwNCwyNTcwNiwyNTcwNywyNTcwOCwyNTcxMCwyNTcxMSwyNTcxMiwyNTcxMywyNTcxNCwyNTcxNSwyNTcxNiwyNTcxNywyNTcxOCwyNTcxOSwyNTcyMywyNTcyNCwyNTcyNSwyNTcyNiwyNTcyNywyNTcyOCwyNTcyOSwyNTczMSwyNTczNCwyNTcz''@;'; put 'put ''NiwyNTczNywyNTczOCwyNTczOSwyNTc0MCwyNTc0MSwyNTc0MiwyNTc0MywyNTc0NCwyNTc0NywyNTc0OCwyNTc1MSwyNTc1MiwyNTc1NCwyNTc1NSwyNTc1NiwyNTc1NywyNTc1OSwyNTc2MCwyNTc2MSwyNTc2MiwyNTc2MywyNTc2NSwyNTc2NiwyNTc2NywyNTc2OCwyNTc3MCwyNTc3MSwy''@;'; put 'put ''NTc3NSwyNTc3NywyNTc3OCwyNTc3OSwyNTc4MCwyNTc4MiwyNTc4NSwyNTc4NywyNTc4OSwyNTc5MCwyNTc5MSwyNTc5MywyNTc5NSwyNTc5NiwyNTc5OCwyNTc5OSwyNTgwMCwyNTgwMSwyNTgwMiwyNTgwMywyNTgwNCwyNTgwNywyNTgwOSwyNTgxMSwyNTgxMiwyNTgxMywyNTgxNCwyNTgx''@;'; put 'put ''NywyNTgxOCwyNTgxOSwyNTgyMCwyNTgyMSwyNTgyMywyNTgyNCwyNTgyNSwyNTgyNywyNTgyOSwyNTgzMSwyNTgzMiwyNTgzMywyNTgzNCwyNTgzNSwyNTgzNiwyNTgzNywyNTgzOCwyNTgzOSwyNTg0MCwyNTg0MSwyNTg0MiwyNTg0MywyNTg0NCwyNTg0NSwyNTg0NiwyNTg0NywyNTg0OCwy''@;'; put 'put ''NTg0OSwyNTg1MCwyNTg1MSwyNTg1MiwyNTg1MywyNTg1NCwyNTg1NSwyNTg1NywyNTg1OCwyNTg1OSwyNTg2MCwyNTg2MSwyNTg2MiwyNTg2MywyNTg2NCwyNTg2NiwyNTg2NywyNTg2OCwyNTg2OSwyNTg3MCwyNTg3MSwyNTg3MiwyNTg3MywyNTg3NSwyNTg3NiwyNTg3NywyNTg3OCwyNTg3''@;'; put 'put ''OSwyNTg4MSwyNTg4MiwyNTg4MywyNTg4NCwyNTg4NSwyNTg4NiwyNTg4NywyNTg4OCwyNTg4OSwyNTg5MCwyNTg5MSwyNTg5MiwyNTg5NCwyNTg5NSwyNTg5NiwyNTg5NywyNTg5OCwyNTkwMCwyNTkwMSwyNTkwNCwyNTkwNSwyNTkwNiwyNTkwNywyNTkxMSwyNTkxNCwyNTkxNiwyNTkxNywy''@;'; put 'put ''NTkyMCwyNTkyMSwyNTkyMiwyNTkyMywyNTkyNCwyNTkyNiwyNTkyNywyNTkzMCwyNTkzMSwyNTkzMywyNTkzNCwyNTkzNiwyNTkzOCwyNTkzOSwyNTk0MCwyNTk0MywyNTk0NCwyNTk0NiwyNTk0OCwyNTk1MSwyNTk1MiwyNTk1MywyNTk1NiwyNTk1NywyNTk1OSwyNTk2MCwyNTk2MSwyNTk2''@;'; put 'put ''MiwyNTk2NSwyNTk2NiwyNTk2NywyNTk2OSwyNTk3MSwyNTk3MywyNTk3NCwyNTk3NiwyNTk3NywyNTk3OCwyNTk3OSwyNTk4MCwyNTk4MSwyNTk4MiwyNTk4MywyNTk4NCwyNTk4NSwyNTk4NiwyNTk4NywyNTk4OCwyNTk4OSwyNTk5MCwyNTk5MiwyNTk5MywyNTk5NCwyNTk5NywyNTk5OCwy''@;'; put 'put ''NTk5OSwyNjAwMiwyNjAwNCwyNjAwNSwyNjAwNiwyNjAwOCwyNjAxMCwyNjAxMywyNjAxNCwyNjAxNiwyNjAxOCwyNjAxOSwyNjAyMiwyNjAyNCwyNjAyNiwyNjAyOCwyNjAzMCwyNjAzMywyNjAzNCwyNjAzNSwyNjAzNiwyNjAzNywyNjAzOCwyNjAzOSwyNjA0MCwyNjA0MiwyNjA0MywyNjA0''@;'; put 'put ''NiwyNjA0NywyNjA0OCwyNjA1MCwyNjA1NSwyNjA1NiwyNjA1NywyNjA1OCwyNjA2MSwyNjA2NCwyNjA2NSwyNjA2NywyNjA2OCwyNjA2OSwyNjA3MiwyNjA3MywyNjA3NCwyNjA3NSwyNjA3NiwyNjA3NywyNjA3OCwyNjA3OSwyNjA4MSwyNjA4MywyNjA4NCwyNjA5MCwyNjA5MSwyNjA5OCwy''@;'; put 'put ''NjA5OSwyNjEwMCwyNjEwMSwyNjEwNCwyNjEwNSwyNjEwNywyNjEwOCwyNjEwOSwyNjExMCwyNjExMSwyNjExMywyNjExNiwyNjExNywyNjExOSwyNjEyMCwyNjEyMSwyNjEyMywyNjEyNSwyNjEyOCwyNjEyOSwyNjEzMCwyNjEzNCwyNjEzNSwyNjEzNiwyNjEzOCwyNjEzOSwyNjE0MCwyNjE0''@;'; put 'put ''MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MiwyNjE2MywyNjE2NywyNjE2OCwyNjE2OSwyNjE3MCwyNjE3MSwyNjE3MywyNjE3NSwyNjE3NiwyNjE3OCwyNjE4MCwyNjE4MSwyNjE4MiwyNjE4MywyNjE4NCwy''@;'; put 'put ''NjE4NSwyNjE4NiwyNjE4OSwyNjE5MCwyNjE5MiwyNjE5MywyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwNSwyNjIwNiwyNjIwOCwyNjIxMCwyNjIxMSwyNjIxMywyNjIxNSwyNjIxNywyNjIxOCwyNjIxOSwyNjIyMCwyNjIyMSwyNjIyNSwyNjIyNiwyNjIyNywyNjIyOSwyNjIzMiwyNjIz''@;'; put 'put ''MywyNjIzNSwyNjIzNiwyNjIzNywyNjIzOSwyNjI0MCwyNjI0MSwyNjI0MywyNjI0NSwyNjI0NiwyNjI0OCwyNjI0OSwyNjI1MCwyNjI1MSwyNjI1MywyNjI1NCwyNjI1NSwyNjI1NiwyNjI1OCwyNjI1OSwyNjI2MCwyNjI2MSwyNjI2NCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MCwy''@;'; put 'put ''NjI3MSwyNjI3MiwyNjI3MywyNjI3NCwyNjI3NSwyNjI3NiwyNjI3NywyNjI3OCwyNjI4MSwyNjI4MiwyNjI4MywyNjI4NCwyNjI4NSwyNjI4NywyNjI4OCwyNjI4OSwyNjI5MCwyNjI5MSwyNjI5MywyNjI5NCwyNjI5NSwyNjI5NiwyNjI5OCwyNjI5OSwyNjMwMCwyNjMwMSwyNjMwMywyNjMw''@;'; put 'put ''NCwyNjMwNSwyNjMwNiwyNjMwNywyNjMwOCwyNjMwOSwyNjMxMCwyNjMxMSwyNjMxMiwyNjMxMywyNjMxNCwyNjMxNSwyNjMxNiwyNjMxNywyNjMxOCwyNjMxOSwyNjMyMCwyNjMyMSwyNjMyMiwyNjMyMywyNjMyNCwyNjMyNSwyNjMyNiwyNjMyNywyNjMyOCwyNjMzMCwyNjMzNCwyNjMzNSwy''@;'; put 'put ''NjMzNiwyNjMzNywyNjMzOCwyNjMzOSwyNjM0MCwyNjM0MSwyNjM0MywyNjM0NCwyNjM0NiwyNjM0NywyNjM0OCwyNjM0OSwyNjM1MCwyNjM1MSwyNjM1MywyNjM1NywyNjM1OCwyNjM2MCwyNjM2MiwyNjM2MywyNjM2NSwyNjM2OSwyNjM3MCwyNjM3MSwyNjM3MiwyNjM3MywyNjM3NCwyNjM3''@;'; put 'put ''NSwyNjM4MCwyNjM4MiwyNjM4MywyNjM4NSwyNjM4NiwyNjM4NywyNjM5MCwyNjM5MiwyNjM5MywyNjM5NCwyNjM5NiwyNjM5OCwyNjQwMCwyNjQwMSwyNjQwMiwyNjQwMywyNjQwNCwyNjQwNSwyNjQwNywyNjQwOSwyNjQxNCwyNjQxNiwyNjQxOCwyNjQxOSwyNjQyMiwyNjQyMywyNjQyNCwy''@;'; put 'put ''NjQyNSwyNjQyNywyNjQyOCwyNjQzMCwyNjQzMSwyNjQzMywyNjQzNiwyNjQzNywyNjQzOSwyNjQ0MiwyNjQ0MywyNjQ0NSwyNjQ1MCwyNjQ1MiwyNjQ1MywyNjQ1NSwyNjQ1NiwyNjQ1NywyNjQ1OCwyNjQ1OSwyNjQ2MSwyNjQ2NiwyNjQ2NywyNjQ2OCwyNjQ3MCwyNjQ3MSwyNjQ3NSwyNjQ3''@;'; put 'put ''NiwyNjQ3OCwyNjQ4MSwyNjQ4NCwyNjQ4NiwyNjQ4OCwyNjQ4OSwyNjQ5MCwyNjQ5MSwyNjQ5MywyNjQ5NiwyNjQ5OCwyNjQ5OSwyNjUwMSwyNjUwMiwyNjUwNCwyNjUwNiwyNjUwOCwyNjUwOSwyNjUxMCwyNjUxMSwyNjUxMywyNjUxNCwyNjUxNSwyNjUxNiwyNjUxOCwyNjUyMSwyNjUyMywy''@;'; put 'put ''NjUyNywyNjUyOCwyNjUyOSwyNjUzMiwyNjUzNCwyNjUzNywyNjU0MCwyNjU0MiwyNjU0NSwyNjU0NiwyNjU0OCwyNjU1MywyNjU1NCwyNjU1NSwyNjU1NiwyNjU1NywyNjU1OCwyNjU1OSwyNjU2MCwyNjU2MiwyNjU2NSwyNjU2NiwyNjU2NywyNjU2OCwyNjU2OSwyNjU3MCwyNjU3MSwyNjU3''@;'; put 'put ''MiwyNjU3MywyNjU3NCwyNjU4MSwyNjU4MiwyNjU4MywyNjU4NywyNjU5MSwyNjU5MywyNjU5NSwyNjU5NiwyNjU5OCwyNjU5OSwyNjYwMCwyNjYwMiwyNjYwMywyNjYwNSwyNjYwNiwyNjYxMCwyNjYxMywyNjYxNCwyNjYxNSwyNjYxNiwyNjYxNywyNjYxOCwyNjYxOSwyNjYyMCwyNjYyMiwy''@;'; put 'put ''NjYyNSwyNjYyNiwyNjYyNywyNjYyOCwyNjYzMCwyNjYzNywyNjY0MCwyNjY0MiwyNjY0NCwyNjY0NSwyNjY0OCwyNjY0OSwyNjY1MCwyNjY1MSwyNjY1MiwyNjY1NCwyNjY1NSwyNjY1NiwyNjY1OCwyNjY1OSwyNjY2MCwyNjY2MSwyNjY2MiwyNjY2MywyNjY2NCwyNjY2NywyNjY2OCwyNjY2''@;'; put 'put ''OSwyNjY3MCwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NiwyNjY3NywyNjY3OCwyNjY4MiwyNjY4MywyNjY4NywyNjY5NSwyNjY5OSwyNjcwMSwyNjcwMywyNjcwNiwyNjcxMCwyNjcxMSwyNjcxMiwyNjcxMywyNjcxNCwyNjcxNSwyNjcxNiwyNjcxNywyNjcxOCwyNjcxOSwyNjczMCwyNjczMiwy''@;'; put 'put ''NjczMywyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjczOSwyNjc0MSwyNjc0NCwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc0OSwyNjc1MCwyNjc1MSwyNjc1MiwyNjc1NCwyNjc1NiwyNjc1OSwyNjc2MCwyNjc2MSwyNjc2MiwyNjc2MywyNjc2NCwyNjc2NSwyNjc2NiwyNjc2''@;'; put 'put ''OCwyNjc2OSwyNjc3MCwyNjc3MiwyNjc3MywyNjc3NCwyNjc3NiwyNjc3NywyNjc3OCwyNjc3OSwyNjc4MCwyNjc4MSwyNjc4MiwyNjc4MywyNjc4NCwyNjc4NSwyNjc4NywyNjc4OCwyNjc4OSwyNjc5MywyNjc5NCwyNjc5NSwyNjc5NiwyNjc5OCwyNjgwMSwyNjgwMiwyNjgwNCwyNjgwNiwy''@;'; put 'put ''NjgwNywyNjgwOCwyNjgwOSwyNjgxMCwyNjgxMSwyNjgxMiwyNjgxMywyNjgxNCwyNjgxNSwyNjgxNywyNjgxOSwyNjgyMCwyNjgyMSwyNjgyMiwyNjgyMywyNjgyNCwyNjgyNiwyNjgyOCwyNjgzMCwyNjgzMSwyNjgzMiwyNjgzMywyNjgzNSwyNjgzNiwyNjgzOCwyNjgzOSwyNjg0MSwyNjg0''@;'; put 'put ''MywyNjg0NCwyNjg0NSwyNjg0NiwyNjg0NywyNjg0OSwyNjg1MCwyNjg1MiwyNjg1MywyNjg1NCwyNjg1NSwyNjg1NiwyNjg1NywyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2MywyNjg2NiwyNjg2NywyNjg2OCwyNjg3MCwyNjg3MSwyNjg3MiwyNjg3NSwyNjg3NywyNjg3OCwyNjg3OSwy''@;'; put 'put ''Njg4MCwyNjg4MiwyNjg4MywyNjg4NCwyNjg4NiwyNjg4NywyNjg4OCwyNjg4OSwyNjg5MCwyNjg5MiwyNjg5NSwyNjg5NywyNjg5OSwyNjkwMCwyNjkwMSwyNjkwMiwyNjkwMywyNjkwNCwyNjkwNSwyNjkwNiwyNjkwNywyNjkwOCwyNjkwOSwyNjkxMCwyNjkxMywyNjkxNCwyNjkxNSwyNjkx''@;'; put 'put ''NywyNjkxOCwyNjkxOSwyNjkyMCwyNjkyMSwyNjkyMiwyNjkyMywyNjkyNCwyNjkyNiwyNjkyNywyNjkyOSwyNjkzMCwyNjkzMSwyNjkzMywyNjkzNCwyNjkzNSwyNjkzNiwyNjkzOCwyNjkzOSwyNjk0MCwyNjk0MiwyNjk0NCwyNjk0NSwyNjk0NywyNjk0OCwyNjk0OSwyNjk1MCwyNjk1MSwy''@;'; put 'put ''Njk1MiwyNjk1MywyNjk1NCwyNjk1NSwyNjk1NiwyNjk1NywyNjk1OCwyNjk1OSwyNjk2MCwyNjk2MSwyNjk2MiwyNjk2MywyNjk2NSwyNjk2NiwyNjk2OCwyNjk2OSwyNjk3MSwyNjk3MiwyNjk3NSwyNjk3NywyNjk3OCwyNjk4MCwyNjk4MSwyNjk4MywyNjk4NCwyNjk4NSwyNjk4NiwyNjk4''@;'; put 'put ''OCwyNjk4OSwyNjk5MSwyNjk5MiwyNjk5NCwyNjk5NSwyNjk5NiwyNjk5NywyNjk5OCwyNzAwMiwyNzAwMywyNzAwNSwyNzAwNiwyNzAwNywyNzAwOSwyNzAxMSwyNzAxMywyNzAxOCwyNzAxOSwyNzAyMCwyNzAyMiwyNzAyMywyNzAyNCwyNzAyNSwyNzAyNiwyNzAyNywyNzAzMCwyNzAzMSwy''@;'; put 'put ''NzAzMywyNzAzNCwyNzAzNywyNzAzOCwyNzAzOSwyNzA0MCwyNzA0MSwyNzA0MiwyNzA0MywyNzA0NCwyNzA0NSwyNzA0NiwyNzA0OSwyNzA1MCwyNzA1MiwyNzA1NCwyNzA1NSwyNzA1NiwyNzA1OCwyNzA1OSwyNzA2MSwyNzA2MiwyNzA2NCwyNzA2NSwyNzA2NiwyNzA2OCwyNzA2OSwyNzA3''@;'; put 'put ''MCwyNzA3MSwyNzA3MiwyNzA3NCwyNzA3NSwyNzA3NiwyNzA3NywyNzA3OCwyNzA3OSwyNzA4MCwyNzA4MSwyNzA4MywyNzA4NSwyNzA4NywyNzA4OSwyNzA5MCwyNzA5MSwyNzA5MywyNzA5NCwyNzA5NSwyNzA5NiwyNzA5NywyNzA5OCwyNzEwMCwyNzEwMSwyNzEwMiwyNzEwNSwyNzEwNiwy''@;'; put 'put ''NzEwNywyNzEwOCwyNzEwOSwyNzExMCwyNzExMSwyNzExMiwyNzExMywyNzExNCwyNzExNSwyNzExNiwyNzExOCwyNzExOSwyNzEyMCwyNzEyMSwyNzEyMywyNzEyNCwyNzEyNSwyNzEyNiwyNzEyNywyNzEyOCwyNzEyOSwyNzEzMCwyNzEzMSwyNzEzMiwyNzEzNCwyNzEzNiwyNzEzNywyNzEz''@;'; put 'put ''OCwyNzEzOSwyNzE0MCwyNzE0MSwyNzE0MiwyNzE0MywyNzE0NCwyNzE0NSwyNzE0NywyNzE0OCwyNzE0OSwyNzE1MCwyNzE1MSwyNzE1MiwyNzE1MywyNzE1NCwyNzE1NSwyNzE1NiwyNzE1NywyNzE1OCwyNzE2MSwyNzE2MiwyNzE2MywyNzE2NCwyNzE2NSwyNzE2NiwyNzE2OCwyNzE3MCwy''@;'; put 'put ''NzE3MSwyNzE3MiwyNzE3MywyNzE3NCwyNzE3NSwyNzE3NywyNzE3OSwyNzE4MCwyNzE4MSwyNzE4MiwyNzE4NCwyNzE4NiwyNzE4NywyNzE4OCwyNzE5MCwyNzE5MSwyNzE5MiwyNzE5MywyNzE5NCwyNzE5NSwyNzE5NiwyNzE5OSwyNzIwMCwyNzIwMSwyNzIwMiwyNzIwMywyNzIwNSwyNzIw''@;'; put 'put ''NiwyNzIwOCwyNzIwOSwyNzIxMCwyNzIxMSwyNzIxMiwyNzIxMywyNzIxNCwyNzIxNSwyNzIxNywyNzIxOCwyNzIxOSwyNzIyMCwyNzIyMSwyNzIyMiwyNzIyMywyNzIyNiwyNzIyOCwyNzIyOSwyNzIzMCwyNzIzMSwyNzIzMiwyNzIzNCwyNzIzNSwyNzIzNiwyNzIzOCwyNzIzOSwyNzI0MCwy''@;'; put 'put ''NzI0MSwyNzI0MiwyNzI0MywyNzI0NCwyNzI0NSwyNzI0NiwyNzI0NywyNzI0OCwyNzI1MCwyNzI1MSwyNzI1MiwyNzI1MywyNzI1NCwyNzI1NSwyNzI1NiwyNzI1OCwyNzI1OSwyNzI2MSwyNzI2MiwyNzI2MywyNzI2NSwyNzI2NiwyNzI2NywyNzI2OSwyNzI3MCwyNzI3MSwyNzI3MiwyNzI3''@;'; put 'put ''MywyNzI3NCwyNzI3NSwyNzI3NiwyNzI3NywyNzI3OSwyNzI4MiwyNzI4MywyNzI4NCwyNzI4NSwyNzI4NiwyNzI4OCwyNzI4OSwyNzI5MCwyNzI5MSwyNzI5MiwyNzI5MywyNzI5NCwyNzI5NSwyNzI5NywyNzI5OCwyNzI5OSwyNzMwMCwyNzMwMSwyNzMwMiwyNzMwMywyNzMwNCwyNzMwNiwy''@;'; put 'put ''NzMwOSwyNzMxMCwyNzMxMSwyNzMxMiwyNzMxMywyNzMxNCwyNzMxNSwyNzMxNiwyNzMxNywyNzMxOCwyNzMxOSwyNzMyMCwyNzMyMSwyNzMyMiwyNzMyMywyNzMyNCwyNzMyNSwyNzMyNiwyNzMyNywyNzMyOCwyNzMyOSwyNzMzMCwyNzMzMSwyNzMzMiwyNzMzMywyNzMzNCwyNzMzNSwyNzMz''@;'; put 'put ''NiwyNzMzNywyNzMzOCwyNzMzOSwyNzM0MCwyNzM0MSwyNzM0MiwyNzM0MywyNzM0NCwyNzM0NSwyNzM0NiwyNzM0NywyNzM0OCwyNzM0OSwyNzM1MCwyNzM1MSwyNzM1MiwyNzM1MywyNzM1NCwyNzM1NSwyNzM1NiwyNzM1NywyNzM1OCwyNzM1OSwyNzM2MCwyNzM2MSwyNzM2MiwyNzM2Mywy''@;'; put 'put ''NzM2NCwyNzM2NSwyNzM2NiwyNzM2NywyNzM2OCwyNzM2OSwyNzM3MCwyNzM3MSwyNzM3MiwyNzM3MywyNzM3NCwyNzM3NSwyNzM3NiwyNzM3NywyNzM3OCwyNzM3OSwyNzM4MCwyNzM4MSwyNzM4MiwyNzM4MywyNzM4NCwyNzM4NSwyNzM4NiwyNzM4NywyNzM4OCwyNzM4OSwyNzM5MCwyNzM5''@;'; put 'put ''MSwyNzM5MiwyNzM5MywyNzM5NCwyNzM5NSwyNzM5NiwyNzM5NywyNzM5OCwyNzM5OSwyNzQwMCwyNzQwMSwyNzQwMiwyNzQwMywyNzQwNCwyNzQwNSwyNzQwNiwyNzQwNywyNzQwOCwyNzQwOSwyNzQxMCwyNzQxMSwyNzQxMiwyNzQxMywyNzQxNCwyNzQxNSwyNzQxNiwyNzQxNywyNzQxOCwy''@;'; put 'put ''NzQxOSwyNzQyMCwyNzQyMSwyNzQyMiwyNzQyMywyNzQyOSwyNzQzMCwyNzQzMiwyNzQzMywyNzQzNCwyNzQzNSwyNzQzNiwyNzQzNywyNzQzOCwyNzQzOSwyNzQ0MCwyNzQ0MSwyNzQ0MywyNzQ0NCwyNzQ0NSwyNzQ0NiwyNzQ0OCwyNzQ1MSwyNzQ1MiwyNzQ1MywyNzQ1NSwyNzQ1NiwyNzQ1''@;'; put 'put ''NywyNzQ1OCwyNzQ2MCwyNzQ2MSwyNzQ2NCwyNzQ2NiwyNzQ2NywyNzQ2OSwyNzQ3MCwyNzQ3MSwyNzQ3MiwyNzQ3MywyNzQ3NCwyNzQ3NSwyNzQ3NiwyNzQ3NywyNzQ3OCwyNzQ3OSwyNzQ4MCwyNzQ4MiwyNzQ4MywyNzQ4NCwyNzQ4NSwyNzQ4NiwyNzQ4NywyNzQ4OCwyNzQ4OSwyNzQ5Niwy''@;'; put 'put ''NzQ5NywyNzQ5OSwyNzUwMCwyNzUwMSwyNzUwMiwyNzUwMywyNzUwNCwyNzUwNSwyNzUwNiwyNzUwNywyNzUwOCwyNzUwOSwyNzUxMCwyNzUxMSwyNzUxMiwyNzUxNCwyNzUxNywyNzUxOCwyNzUxOSwyNzUyMCwyNzUyNSwyNzUyOCwyNzUzMiwyNzUzNCwyNzUzNSwyNzUzNiwyNzUzNywyNzU0''@;'; put 'put ''MCwyNzU0MSwyNzU0MywyNzU0NCwyNzU0NSwyNzU0OCwyNzU0OSwyNzU1MCwyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU1NiwyNzU1NywyNzU1OCwyNzU1OSwyNzU2MCwyNzU2MSwyNzU2MywyNzU2NCwyNzU2NSwyNzU2NiwyNzU2NywyNzU2OCwyNzU2OSwyNzU3MCwyNzU3NCwyNzU3Niwy''@;'; put 'put ''NzU3NywyNzU3OCwyNzU3OSwyNzU4MCwyNzU4MSwyNzU4MiwyNzU4NCwyNzU4NywyNzU4OCwyNzU5MCwyNzU5MSwyNzU5MiwyNzU5MywyNzU5NCwyNzU5NiwyNzU5OCwyNzYwMCwyNzYwMSwyNzYwOCwyNzYxMCwyNzYxMiwyNzYxMywyNzYxNCwyNzYxNSwyNzYxNiwyNzYxOCwyNzYxOSwyNzYy''@;'; put 'put ''MCwyNzYyMSwyNzYyMiwyNzYyMywyNzYyNCwyNzYyNSwyNzYyOCwyNzYyOSwyNzYzMCwyNzYzMiwyNzYzMywyNzYzNCwyNzYzNiwyNzYzOCwyNzYzOSwyNzY0MCwyNzY0MiwyNzY0MywyNzY0NCwyNzY0NiwyNzY0NywyNzY0OCwyNzY0OSwyNzY1MCwyNzY1MSwyNzY1MiwyNzY1NiwyNzY1Nywy''@;'; put 'put ''NzY1OCwyNzY1OSwyNzY2MCwyNzY2MiwyNzY2NiwyNzY3MSwyNzY3NiwyNzY3NywyNzY3OCwyNzY4MCwyNzY4MywyNzY4NSwyNzY5MSwyNzY5MiwyNzY5MywyNzY5NywyNzY5OSwyNzcwMiwyNzcwMywyNzcwNSwyNzcwNiwyNzcwNywyNzcwOCwyNzcxMCwyNzcxMSwyNzcxNSwyNzcxNiwyNzcx''@;'; put 'put ''NywyNzcyMCwyNzcyMywyNzcyNCwyNzcyNSwyNzcyNiwyNzcyNywyNzcyOSwyNzczMCwyNzczMSwyNzczNCwyNzczNiwyNzczNywyNzczOCwyNzc0NiwyNzc0NywyNzc0OSwyNzc1MCwyNzc1MSwyNzc1NSwyNzc1NiwyNzc1NywyNzc1OCwyNzc1OSwyNzc2MSwyNzc2MywyNzc2NSwyNzc2Nywy''@;'; put 'put ''Nzc2OCwyNzc3MCwyNzc3MSwyNzc3MiwyNzc3NSwyNzc3NiwyNzc4MCwyNzc4MywyNzc4NiwyNzc4NywyNzc4OSwyNzc5MCwyNzc5MywyNzc5NCwyNzc5NywyNzc5OCwyNzc5OSwyNzgwMCwyNzgwMiwyNzgwNCwyNzgwNSwyNzgwNiwyNzgwOCwyNzgxMCwyNzgxNiwyNzgyMCwyNzgyMywyNzgy''@;'; put 'put ''NCwyNzgyOCwyNzgyOSwyNzgzMCwyNzgzMSwyNzgzNCwyNzg0MCwyNzg0MSwyNzg0MiwyNzg0MywyNzg0NiwyNzg0NywyNzg0OCwyNzg1MSwyNzg1MywyNzg1NCwyNzg1NSwyNzg1NywyNzg1OCwyNzg2NCwyNzg2NSwyNzg2NiwyNzg2OCwyNzg2OSwyNzg3MSwyNzg3NiwyNzg3OCwyNzg3OSwy''@;'; put 'put ''Nzg4MSwyNzg4NCwyNzg4NSwyNzg5MCwyNzg5MiwyNzg5NywyNzkwMywyNzkwNCwyNzkwNiwyNzkwNywyNzkwOSwyNzkxMCwyNzkxMiwyNzkxMywyNzkxNCwyNzkxNywyNzkxOSwyNzkyMCwyNzkyMSwyNzkyMywyNzkyNCwyNzkyNSwyNzkyNiwyNzkyOCwyNzkzMiwyNzkzMywyNzkzNSwyNzkz''@;'; put 'put ''NiwyNzkzNywyNzkzOCwyNzkzOSwyNzk0MCwyNzk0MiwyNzk0NCwyNzk0NSwyNzk0OCwyNzk0OSwyNzk1MSwyNzk1MiwyNzk1NiwyNzk1OCwyNzk1OSwyNzk2MCwyNzk2MiwyNzk2NywyNzk2OCwyNzk3MCwyNzk3MiwyNzk3NywyNzk4MCwyNzk4NCwyNzk4OSwyNzk5MCwyNzk5MSwyNzk5Miwy''@;'; put 'put ''Nzk5NSwyNzk5NywyNzk5OSwyODAwMSwyODAwMiwyODAwNCwyODAwNSwyODAwNywyODAwOCwyODAxMSwyODAxMiwyODAxMywyODAxNiwyODAxNywyODAxOCwyODAxOSwyODAyMSwyODAyMiwyODAyNSwyODAyNiwyODAyNywyODAyOSwyODAzMCwyODAzMSwyODAzMiwyODAzMywyODAzNSwyODAz''@;'; put 'put ''NiwyODAzOCwyODAzOSwyODA0MiwyODA0MywyODA0NSwyODA0NywyODA0OCwyODA1MCwyODA1NCwyODA1NSwyODA1NiwyODA1NywyODA1OCwyODA2MCwyODA2NiwyODA2OSwyODA3NiwyODA3NywyODA4MCwyODA4MSwyODA4MywyODA4NCwyODA4NiwyODA4NywyODA4OSwyODA5MCwyODA5MSwy''@;'; put 'put ''ODA5MiwyODA5MywyODA5NCwyODA5NywyODA5OCwyODA5OSwyODEwNCwyODEwNSwyODEwNiwyODEwOSwyODExMCwyODExMSwyODExMiwyODExNCwyODExNSwyODExNiwyODExNywyODExOSwyODEyMiwyODEyMywyODEyNCwyODEyNywyODEzMCwyODEzMSwyODEzMywyODEzNSwyODEzNiwyODEz''@;'; put 'put ''NywyODEzOCwyODE0MSwyODE0MywyODE0NCwyODE0NiwyODE0OCwyODE0OSwyODE1MCwyODE1MiwyODE1NCwyODE1NywyODE1OCwyODE1OSwyODE2MCwyODE2MSwyODE2MiwyODE2MywyODE2NCwyODE2NiwyODE2NywyODE2OCwyODE2OSwyODE3MSwyODE3NSwyODE3OCwyODE3OSwyODE4MSwy''@;'; put 'put ''ODE4NCwyODE4NSwyODE4NywyODE4OCwyODE5MCwyODE5MSwyODE5NCwyODE5OCwyODE5OSwyODIwMCwyODIwMiwyODIwNCwyODIwNiwyODIwOCwyODIwOSwyODIxMSwyODIxMywyODIxNCwyODIxNSwyODIxNywyODIxOSwyODIyMCwyODIyMSwyODIyMiwyODIyMywyODIyNCwyODIyNSwyODIy''@;'; put 'put ''NiwyODIyOSwyODIzMCwyODIzMSwyODIzMiwyODIzMywyODIzNCwyODIzNSwyODIzNiwyODIzOSwyODI0MCwyODI0MSwyODI0MiwyODI0NSwyODI0NywyODI0OSwyODI1MCwyODI1MiwyODI1MywyODI1NCwyODI1NiwyODI1NywyODI1OCwyODI1OSwyODI2MCwyODI2MSwyODI2MiwyODI2Mywy''@;'; put 'put ''ODI2NCwyODI2NSwyODI2NiwyODI2OCwyODI2OSwyODI3MSwyODI3MiwyODI3MywyODI3NCwyODI3NSwyODI3NiwyODI3NywyODI3OCwyODI3OSwyODI4MCwyODI4MSwyODI4MiwyODI4MywyODI4NCwyODI4NSwyODI4OCwyODI4OSwyODI5MCwyODI5MiwyODI5NSwyODI5NiwyODI5OCwyODI5''@;'; put 'put ''OSwyODMwMCwyODMwMSwyODMwMiwyODMwNSwyODMwNiwyODMwNywyODMwOCwyODMwOSwyODMxMCwyODMxMSwyODMxMywyODMxNCwyODMxNSwyODMxNywyODMxOCwyODMyMCwyODMyMSwyODMyMywyODMyNCwyODMyNiwyODMyOCwyODMyOSwyODMzMSwyODMzMiwyODMzMywyODMzNCwyODMzNiwy''@;'; put 'put ''ODMzOSwyODM0MSwyODM0NCwyODM0NSwyODM0OCwyODM1MCwyODM1MSwyODM1MiwyODM1NSwyODM1NiwyODM1NywyODM1OCwyODM2MCwyODM2MSwyODM2MiwyODM2NCwyODM2NSwyODM2NiwyODM2OCwyODM3MCwyODM3NCwyODM3NiwyODM3NywyODM3OSwyODM4MCwyODM4MSwyODM4NywyODM5''@;'; put 'put ''MSwyODM5NCwyODM5NSwyODM5NiwyODM5NywyODM5OCwyODM5OSwyODQwMCwyODQwMSwyODQwMiwyODQwMywyODQwNSwyODQwNiwyODQwNywyODQwOCwyODQxMCwyODQxMSwyODQxMiwyODQxMywyODQxNCwyODQxNSwyODQxNiwyODQxNywyODQxOSwyODQyMCwyODQyMSwyODQyMywyODQyNCwy''@;'; put 'put ''ODQyNiwyODQyNywyODQyOCwyODQyOSwyODQzMCwyODQzMiwyODQzMywyODQzNCwyODQzOCwyODQzOSwyODQ0MCwyODQ0MSwyODQ0MiwyODQ0MywyODQ0NCwyODQ0NSwyODQ0NiwyODQ0NywyODQ0OSwyODQ1MCwyODQ1MSwyODQ1MywyODQ1NCwyODQ1NSwyODQ1NiwyODQ2MCwyODQ2MiwyODQ2''@;'; put 'put ''NCwyODQ2NiwyODQ2OCwyODQ2OSwyODQ3MSwyODQ3MiwyODQ3MywyODQ3NCwyODQ3NSwyODQ3NiwyODQ3NywyODQ3OSwyODQ4MCwyODQ4MSwyODQ4MiwyODQ4MywyODQ4NCwyODQ4NSwyODQ4OCwyODQ4OSwyODQ5MCwyODQ5MiwyODQ5NCwyODQ5NSwyODQ5NiwyODQ5NywyODQ5OCwyODQ5OSwy''@;'; put 'put ''ODUwMCwyODUwMSwyODUwMiwyODUwMywyODUwNSwyODUwNiwyODUwNywyODUwOSwyODUxMSwyODUxMiwyODUxMywyODUxNSwyODUxNiwyODUxNywyODUxOSwyODUyMCwyODUyMSwyODUyMiwyODUyMywyODUyNCwyODUyNywyODUyOCwyODUyOSwyODUzMSwyODUzMywyODUzNCwyODUzNSwyODUz''@;'; put 'put ''NywyODUzOSwyODU0MSwyODU0MiwyODU0MywyODU0NCwyODU0NSwyODU0NiwyODU0NywyODU0OSwyODU1MCwyODU1MSwyODU1NCwyODU1NSwyODU1OSwyODU2MCwyODU2MSwyODU2MiwyODU2MywyODU2NCwyODU2NSwyODU2NiwyODU2NywyODU2OCwyODU2OSwyODU3MCwyODU3MSwyODU3Mywy''@;'; put 'put ''ODU3NCwyODU3NSwyODU3NiwyODU3OCwyODU3OSwyODU4MCwyODU4MSwyODU4MiwyODU4NCwyODU4NSwyODU4NiwyODU4NywyODU4OCwyODU4OSwyODU5MCwyODU5MSwyODU5MiwyODU5MywyODU5NCwyODU5NiwyODU5NywyODU5OSwyODYwMCwyODYwMiwyODYwMywyODYwNCwyODYwNSwyODYw''@;'; put 'put ''NiwyODYwNywyODYwOSwyODYxMSwyODYxMiwyODYxMywyODYxNCwyODYxNSwyODYxNiwyODYxOCwyODYxOSwyODYyMCwyODYyMSwyODYyMiwyODYyMywyODYyNCwyODYyNywyODYyOCwyODYyOSwyODYzMCwyODYzMSwyODYzMiwyODYzMywyODYzNCwyODYzNSwyODYzNiwyODYzNywyODYzOSwy''@;'; put 'put ''ODY0MiwyODY0MywyODY0NCwyODY0NSwyODY0NiwyODY0NywyODY0OCwyODY0OSwyODY1MCwyODY1MSwyODY1MiwyODY1MywyODY1NiwyODY1NywyODY1OCwyODY1OSwyODY2MCwyODY2MSwyODY2MiwyODY2MywyODY2NCwyODY2NSwyODY2NiwyODY2NywyODY2OCwyODY2OSwyODY3MCwyODY3''@;'; put 'put ''MSwyODY3MiwyODY3MywyODY3NCwyODY3NSwyODY3NiwyODY3NywyODY3OCwyODY3OSwyODY4MCwyODY4MSwyODY4MiwyODY4MywyODY4NCwyODY4NSwyODY4NiwyODY4NywyODY4OCwyODY5MCwyODY5MSwyODY5MiwyODY5MywyODY5NCwyODY5NSwyODY5NiwyODY5NywyODcwMCwyODcwMSwy''@;'; put 'put ''ODcwMiwyODcwMywyODcwNCwyODcwNSwyODcwNiwyODcwOCwyODcwOSwyODcxMCwyODcxMSwyODcxMiwyODcxMywyODcxNCwyODcxNSwyODcxNiwyODcxNywyODcxOCwyODcxOSwyODcyMCwyODcyMSwyODcyMiwyODcyMywyODcyNCwyODcyNiwyODcyNywyODcyOCwyODczMCwyODczMSwyODcz''@;'; put 'put ''MiwyODczMywyODczNCwyODczNSwyODczNiwyODczNywyODczOCwyODczOSwyODc0MCwyODc0MSwyODc0MiwyODc0MywyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc0OSwyODc1MCwyODc1MiwyODc1MywyODc1NCwyODc1NSwyODc1NiwyODc1NywyODc1OCwyODc1OSwyODc2MCwyODc2MSwy''@;'; put 'put ''ODc2MiwyODc2MywyODc2NCwyODc2NSwyODc2NywyODc2OCwyODc2OSwyODc3MCwyODc3MSwyODc3MiwyODc3MywyODc3NCwyODc3NSwyODc3NiwyODc3NywyODc3OCwyODc4MiwyODc4NSwyODc4NiwyODc4NywyODc4OCwyODc5MSwyODc5MywyODc5NCwyODc5NSwyODc5NywyODgwMSwyODgw''@;'; put 'put ''MiwyODgwMywyODgwNCwyODgwNiwyODgwNywyODgwOCwyODgxMSwyODgxMiwyODgxMywyODgxNSwyODgxNiwyODgxNywyODgxOSwyODgyMywyODgyNCwyODgyNiwyODgyNywyODgzMCwyODgzMSwyODgzMiwyODgzMywyODgzNCwyODgzNSwyODgzNiwyODgzNywyODgzOCwyODgzOSwyODg0MCwy''@;'; put 'put ''ODg0MSwyODg0MiwyODg0OCwyODg1MCwyODg1MiwyODg1MywyODg1NCwyODg1OCwyODg2MiwyODg2MywyODg2OCwyODg2OSwyODg3MCwyODg3MSwyODg3MywyODg3NSwyODg3NiwyODg3NywyODg3OCwyODg3OSwyODg4MCwyODg4MSwyODg4MiwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4''@;'; put 'put ''NywyODg5MCwyODg5MiwyODg5MywyODg5NCwyODg5NiwyODg5NywyODg5OCwyODg5OSwyODkwMSwyODkwNiwyODkxMCwyODkxMiwyODkxMywyODkxNCwyODkxNSwyODkxNiwyODkxNywyODkxOCwyODkyMCwyODkyMiwyODkyMywyODkyNCwyODkyNiwyODkyNywyODkyOCwyODkyOSwyODkzMCwy''@;'; put 'put ''ODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzNiwyODkzOSwyODk0MCwyODk0MSwyODk0MiwyODk0MywyODk0NSwyODk0NiwyODk0OCwyODk1MSwyODk1NSwyODk1NiwyODk1NywyODk1OCwyODk1OSwyODk2MCwyODk2MSwyODk2MiwyODk2MywyODk2NCwyODk2NSwyODk2NywyODk2''@;'; put 'put ''OCwyODk2OSwyODk3MCwyODk3MSwyODk3MiwyODk3MywyODk3NCwyODk3OCwyODk3OSwyODk4MCwyODk4MSwyODk4MywyODk4NCwyODk4NSwyODk4NiwyODk4NywyODk4OCwyODk4OSwyODk5MCwyODk5MSwyODk5MiwyODk5MywyODk5NCwyODk5NSwyODk5NiwyODk5OCwyODk5OSwyOWUzLDI5''@;'; put 'put ''MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3''@;'; put 'put ''LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5''@;'; put 'put ''MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkzLDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAxLDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEw''@;'; put 'put ''LDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5''@;'; put 'put ''MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYwLDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0''@;'; put 'put ''LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5''@;'; put 'put ''MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQy''@;'; put 'put ''LDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5''@;'; put 'put ''Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMx''@;'; put 'put ''LDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5''@;'; put 'put ''MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5''@;'; put 'put ''LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4''@;'; put 'put ''NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjExLDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0''@;'; put 'put ''LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4''@;'; put 'put ''NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzExLDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIzMCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEy''@;'; put 'put ''Mjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAx''@;'; put 'put ''LDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMz''@;'; put 'put ''LDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4''@;'; put 'put ''MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1''@;'; put 'put ''ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcyMyw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcyOSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODcz''@;'; put 'put ''Niw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1''@;'; put 'put ''NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5''@;'; put 'put ''MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEy''@;'; put 'put ''ODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0''@;'; put 'put ''LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4''@;'; put 'put ''NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEyLDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5''@;'; put 'put ''LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4''@;'; put 'put ''ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAx''@;'; put 'put ''LDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1''@;'; put 'put ''MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2''@;'; put 'put ''LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4''@;'; put 'put ''ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgzLDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkw''@;'; put 'put ''LDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4''@;'; put 'put ''OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMyLDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1''@;'; put 'put ''LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEy''@;'; put 'put ''Mzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAz''@;'; put 'put ''LDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEy''@;'; put 'put ''NDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYx''@;'; put 'put ''LDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4''@;'; put 'put ''OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5ZTMsNTkwMDEsNTkwMDIsNTkwMDMsNTkwMDQsNTkwMDUsNTkwMDYsNTkwMDcsNTkwMDgsNTkwMDksNTkwMTAsNTkwMTEsNTkwMTIsNTkwMTMsNTkwMTQsNTkwMTUsNTkwMTYs''@;'; put 'put ''NTkwMTcsNTkwMTgsNTkwMTksNTkwMjAsNTkwMjEsNTkwMjIsNTkwMjMsNTkwMjQsNTkwMjUsNTkwMjYsNTkwMjcsNTkwMjgsNTkwMjksNTkwMzAsNTkwMzEsNTkwMzIsNTkwMzMsNTkwMzQsNTkwMzUsNTkwMzYsNTkwMzcsNTkwMzgsNTkwMzksNTkwNDAsNTkwNDEsNTkwNDIsNTkwNDMsNTkw''@;'; put 'put ''NDQsNTkwNDUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQs''@;'; put 'put ''MTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1''@;'; put 'put ''MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1Mjks''@;'; put 'put ''MTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsNTkyNjEsNTkyNjIsNTkyNjMsNTkyNjQsNTkyNjUsNTkyNjYsNTkyNjcsNTkyNjgsNTkwNDYsNTkwNDcsNTkwNDgsNTkwNDksNTkwNTAsNTkwNTEsNTkwNTIsNTkwNTMsNTkwNTQsNTkwNTUsNTkwNTYsNTkwNTcsNTkwNTgsNTkwNTksNTkw''@;'; put 'put ''NjAsNTkwNjEsNTkwNjIsNTkwNjMsNTkwNjQsNTkwNjUsNTkwNjYsNTkwNjcsNTkwNjgsNTkwNjksNTkwNzAsNTkwNzEsNTkwNzIsNTkwNzMsNTkwNzQsNTkwNzUsNTkwNzYsNTkwNzcsNTkwNzgsNTkwNzksNTkwODAsNTkwODEsNTkwODIsNTkwODMsNTkwODQsNTkwODUsNTkwODYsNTkwODcs''@;'; put 'put ''NTkwODgsNTkwODksNTkwOTAsNTkwOTEsNTkwOTIsNTkwOTMsNTkwOTQsNTkwOTUsNTkwOTYsNTkwOTcsNTkwOTgsNTkwOTksNTkxMDAsNTkxMDEsNTkxMDIsNTkxMDMsNTkxMDQsNTkxMDUsNTkxMDYsNTkxMDcsNTkxMDgsNTkxMDksNTkxMTAsNTkxMTEsNTkxMTIsNTkxMTMsNTkxMTQsNTkx''@;'; put 'put ''MTUsNTkxMTYsNTkxMTcsNTkxMTgsNTkxMTksNTkxMjAsNTkxMjEsNTkxMjIsNTkxMjMsNTkxMjQsNTkxMjUsNTkxMjYsNTkxMjcsNTkxMjgsNTkxMjksNTkxMzAsNTkxMzEsNTkxMzIsNTkxMzMsNTkxMzQsNTkxMzUsNTkxMzYsNTkxMzcsNTkxMzgsNTkxMzksNTkxNDAsNTkxNDEsOTEzLDkx''@;'; put 'put ''NCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsNTkyNjksNTkyNzAsNTkyNzEsNTkyNzIsNTkyNzMsNTkyNzQsNTkyNzUsNTkyNzYsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUx''@;'; put 'put ''LDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksNTkyNzcsNTkyNzgsNTkyNzksNTkyODAsNTkyODEsNTkyODIsNTkyODMsNjUwNzcsNjUwNzgsNjUwODEsNjUwODIsNjUwODcsNjUwODgsNjUwODUsNjUwODYsNjUwODks''@;'; put 'put ''NjUwOTAsNjUwOTEsNjUwOTIsNTkyODQsNTkyODUsNjUwODMsNjUwODQsNjUwNzksNjUwODAsNjUwNzMsNTkyODYsNjUwNzUsNjUwNzYsNTkyODcsNTkyODgsNTkyODksNTkyOTAsNTkyOTEsNTkyOTIsNTkyOTMsNTkyOTQsNTkyOTUsNTkxNDIsNTkxNDMsNTkxNDQsNTkxNDUsNTkxNDYsNTkx''@;'; put 'put ''NDcsNTkxNDgsNTkxNDksNTkxNTAsNTkxNTEsNTkxNTIsNTkxNTMsNTkxNTQsNTkxNTUsNTkxNTYsNTkxNTcsNTkxNTgsNTkxNTksNTkxNjAsNTkxNjEsNTkxNjIsNTkxNjMsNTkxNjQsNTkxNjUsNTkxNjYsNTkxNjcsNTkxNjgsNTkxNjksNTkxNzAsNTkxNzEsNTkxNzIsNTkxNzMsNTkxNzQs''@;'; put 'put ''NTkxNzUsNTkxNzYsNTkxNzcsNTkxNzgsNTkxNzksNTkxODAsNTkxODEsNTkxODIsNTkxODMsNTkxODQsNTkxODUsNTkxODYsNTkxODcsNTkxODgsNTkxODksNTkxOTAsNTkxOTEsNTkxOTIsNTkxOTMsNTkxOTQsNTkxOTUsNTkxOTYsNTkxOTcsNTkxOTgsNTkxOTksNTkyMDAsNTkyMDEsNTky''@;'; put 'put ''MDIsNTkyMDMsNTkyMDQsNTkyMDUsNTkyMDYsNTkyMDcsNTkyMDgsNTkyMDksNTkyMTAsNTkyMTEsNTkyMTIsNTkyMTMsNTkyMTQsNTkyMTUsNTkyMTYsNTkyMTcsNTkyMTgsNTkyMTksNTkyMjAsNTkyMjEsNTkyMjIsNTkyMjMsNTkyMjQsNTkyMjUsNTkyMjYsNTkyMjcsNTkyMjgsNTkyMjks''@;'; put 'put ''NTkyMzAsNTkyMzEsNTkyMzIsNTkyMzMsNTkyMzQsNTkyMzUsNTkyMzYsNTkyMzcsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEw''@;'; put 'put ''NjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsNTkyOTYsNTkyOTcsNTkyOTgsNTkyOTksNTkzMDAsNTkzMDEsNTkzMDIsNTkzMDMsNTkzMDQsNTkzMDUsNTkzMDYsNTkzMDcsNTkzMDgsNTkzMDksNTkzMTAsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEw''@;'; put 'put ''NzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsNTkzMTEsNTkzMTIsNTkzMTMsNTkzMTQsNTkz''@;'; put 'put ''MTUsNTkzMTYsNTkzMTcsNTkzMTgsNTkzMTksNTkzMjAsNTkzMjEsNTkzMjIsNTkzMjMsNzE0LDcxNSw3MjksODIxMSw4MjEzLDgyMjksODI0NSw4NDUzLDg0NTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NzI1LDg3MzUsODczOSw4Nzg2LDg4MDYsODgwNyw4ODk1LDk1NTIsOTU1Myw5NTU0LDk1''@;'; put 'put ''NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NTgxLDk1ODIsOTU4Myw5NTg0LDk1ODUsOTU4Niw5NTg3LDk2''@;'; put 'put ''MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjA5LDk2MTAsOTYxMSw5NjEyLDk2MTMsOTYxNCw5NjE1LDk2MTksOTYyMCw5NjIxLDk2NjAsOTY2MSw5Njk4LDk2OTksOTcwMCw5NzAxLDk3MzcsODg1MywxMjMwNiwxMjMxNywxMjMxOCw1OTMyNCw1OTMyNSw1OTMyNiw1''@;'; put 'put ''OTMyNyw1OTMyOCw1OTMyOSw1OTMzMCw1OTMzMSw1OTMzMiw1OTMzMyw1OTMzNCwyNTcsMjI1LDQ2MiwyMjQsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsMjM0LDU5Myw3NzQzLDMyNCwz''@;'; put 'put ''MjgsNTA1LDYwOSw1OTMzNyw1OTMzOCw1OTMzOSw1OTM0MCwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3''@;'; put 'put ''MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw1OTM0MSw1OTM0Miw1OTM0Myw1OTM0NCw1OTM0NSw1OTM0Niw1OTM0Nyw1OTM0OCw1OTM0OSw1OTM1MCw1OTM1MSw1OTM1Miw1''@;'; put 'put ''OTM1Myw1OTM1NCw1OTM1NSw1OTM1Niw1OTM1Nyw1OTM1OCw1OTM1OSw1OTM2MCw1OTM2MSwxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwxMjk2MywxMzE5OCwxMzE5OSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNywxMzI1MiwxMzI2MiwxMzI2''@;'; put 'put ''NSwxMzI2NiwxMzI2OSw2NTA3Miw2NTUwNiw2NTUwOCw1OTM2Miw4NDgxLDEyODQ5LDU5MzYzLDgyMDgsNTkzNjQsNTkzNjUsNTkzNjYsMTI1NDAsMTI0NDMsMTI0NDQsMTI1NDEsMTI1NDIsMTIyOTQsMTI0NDUsMTI0NDYsNjUwOTcsNjUwOTgsNjUwOTksNjUxMDAsNjUxMDEsNjUxMDIsNjUx''@;'; put 'put ''MDMsNjUxMDQsNjUxMDUsNjUxMDYsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsNjUxMTksNjUxMjAsNjUxMjEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUxMjgsNjUxMjksNjUxMzAsNjUxMzEsMTIzNTAsMTIyNzIs''@;'; put 'put ''MTIyNzMsMTIyNzQsMTIyNzUsMTIyNzYsMTIyNzcsMTIyNzgsMTIyNzksMTIyODAsMTIyODEsMTIyODIsMTIyODMsMTIyOTUsNTkzODAsNTkzODEsNTkzODIsNTkzODMsNTkzODQsNTkzODUsNTkzODYsNTkzODcsNTkzODgsNTkzODksNTkzOTAsNTkzOTEsNTkzOTIsOTQ3Miw5NDczLDk0NzQs''@;'; put 'put ''OTQ3NSw5NDc2LDk0NzcsOTQ3OCw5NDc5LDk0ODAsOTQ4MSw5NDgyLDk0ODMsOTQ4NCw5NDg1LDk0ODYsOTQ4Nyw5NDg4LDk0ODksOTQ5MCw5NDkxLDk0OTIsOTQ5Myw5NDk0LDk0OTUsOTQ5Niw5NDk3LDk0OTgsOTQ5OSw5NTAwLDk1MDEsOTUwMiw5NTAzLDk1MDQsOTUwNSw5NTA2LDk1MDcs''@;'; put 'put ''OTUwOCw5NTA5LDk1MTAsOTUxMSw5NTEyLDk1MTMsOTUxNCw5NTE1LDk1MTYsOTUxNyw5NTE4LDk1MTksOTUyMCw5NTIxLDk1MjIsOTUyMyw5NTI0LDk1MjUsOTUyNiw5NTI3LDk1MjgsOTUyOSw5NTMwLDk1MzEsOTUzMiw5NTMzLDk1MzQsOTUzNSw5NTM2LDk1MzcsOTUzOCw5NTM5LDk1NDAs''@;'; put 'put ''OTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsOTU0Nyw1OTM5Myw1OTM5NCw1OTM5NSw1OTM5Niw1OTM5Nyw1OTM5OCw1OTM5OSw1OTQwMCw1OTQwMSw1OTQwMiw1OTQwMyw1OTQwNCw1OTQwNSw1OTQwNiw1OTQwNywyOTQwNCwyOTQwNSwyOTQwNywyOTQxMCwyOTQxMSwyOTQxMiwyOTQx''@;'; put 'put ''MywyOTQxNCwyOTQxNSwyOTQxOCwyOTQxOSwyOTQyOSwyOTQzMCwyOTQzMywyOTQzNywyOTQzOCwyOTQzOSwyOTQ0MCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NiwyOTQ0NywyOTQ0OCwyOTQ0OSwyOTQ1MSwyOTQ1MiwyOTQ1MywyOTQ1NSwyOTQ1NiwyOTQ1NywyOTQ1OCwyOTQ2MCwyOTQ2NCwy''@;'; put 'put ''OTQ2NSwyOTQ2NiwyOTQ3MSwyOTQ3MiwyOTQ3NSwyOTQ3NiwyOTQ3OCwyOTQ3OSwyOTQ4MCwyOTQ4NSwyOTQ4NywyOTQ4OCwyOTQ5MCwyOTQ5MSwyOTQ5MywyOTQ5NCwyOTQ5OCwyOTQ5OSwyOTUwMCwyOTUwMSwyOTUwNCwyOTUwNSwyOTUwNiwyOTUwNywyOTUwOCwyOTUwOSwyOTUxMCwyOTUx''@;'; put 'put ''MSwyOTUxMiwyOTUxMywyOTUxNCwyOTUxNSwyOTUxNiwyOTUxOCwyOTUxOSwyOTUyMSwyOTUyMywyOTUyNCwyOTUyNSwyOTUyNiwyOTUyOCwyOTUyOSwyOTUzMCwyOTUzMSwyOTUzMiwyOTUzMywyOTUzNCwyOTUzNSwyOTUzNywyOTUzOCwyOTUzOSwyOTU0MCwyOTU0MSwyOTU0MiwyOTU0Mywy''@;'; put 'put ''OTU0NCwyOTU0NSwyOTU0NiwyOTU0NywyOTU1MCwyOTU1MiwyOTU1Myw1NzM0NCw1NzM0NSw1NzM0Niw1NzM0Nyw1NzM0OCw1NzM0OSw1NzM1MCw1NzM1MSw1NzM1Miw1NzM1Myw1NzM1NCw1NzM1NSw1NzM1Niw1NzM1Nyw1NzM1OCw1NzM1OSw1NzM2MCw1NzM2MSw1NzM2Miw1NzM2Myw1NzM2''@;'; put 'put ''NCw1NzM2NSw1NzM2Niw1NzM2Nyw1NzM2OCw1NzM2OSw1NzM3MCw1NzM3MSw1NzM3Miw1NzM3Myw1NzM3NCw1NzM3NSw1NzM3Niw1NzM3Nyw1NzM3OCw1NzM3OSw1NzM4MCw1NzM4MSw1NzM4Miw1NzM4Myw1NzM4NCw1NzM4NSw1NzM4Niw1NzM4Nyw1NzM4OCw1NzM4OSw1NzM5MCw1NzM5MSw1''@;'; put 'put ''NzM5Miw1NzM5Myw1NzM5NCw1NzM5NSw1NzM5Niw1NzM5Nyw1NzM5OCw1NzM5OSw1NzQwMCw1NzQwMSw1NzQwMiw1NzQwMyw1NzQwNCw1NzQwNSw1NzQwNiw1NzQwNyw1NzQwOCw1NzQwOSw1NzQxMCw1NzQxMSw1NzQxMiw1NzQxMyw1NzQxNCw1NzQxNSw1NzQxNiw1NzQxNyw1NzQxOCw1NzQx''@;'; put 'put ''OSw1NzQyMCw1NzQyMSw1NzQyMiw1NzQyMyw1NzQyNCw1NzQyNSw1NzQyNiw1NzQyNyw1NzQyOCw1NzQyOSw1NzQzMCw1NzQzMSw1NzQzMiw1NzQzMyw1NzQzNCw1NzQzNSw1NzQzNiw1NzQzNywyOTU1NCwyOTU1NSwyOTU1NiwyOTU1NywyOTU1OCwyOTU1OSwyOTU2MCwyOTU2MSwyOTU2Miwy''@;'; put 'put ''OTU2MywyOTU2NCwyOTU2NSwyOTU2NywyOTU2OCwyOTU2OSwyOTU3MCwyOTU3MSwyOTU3MywyOTU3NCwyOTU3NiwyOTU3OCwyOTU4MCwyOTU4MSwyOTU4MywyOTU4NCwyOTU4NiwyOTU4NywyOTU4OCwyOTU4OSwyOTU5MSwyOTU5MiwyOTU5MywyOTU5NCwyOTU5NiwyOTU5NywyOTU5OCwyOTYw''@;'; put 'put ''MCwyOTYwMSwyOTYwMywyOTYwNCwyOTYwNSwyOTYwNiwyOTYwNywyOTYwOCwyOTYxMCwyOTYxMiwyOTYxMywyOTYxNywyOTYyMCwyOTYyMSwyOTYyMiwyOTYyNCwyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMCwyOTYzMSwyOTYzMywyOTYzNSwyOTYzNiwyOTYzNywyOTYzOCwyOTYzOSwyOTY0Mywy''@;'; put 'put ''OTY0NCwyOTY0NiwyOTY1MCwyOTY1MSwyOTY1MiwyOTY1MywyOTY1NCwyOTY1NSwyOTY1NiwyOTY1OCwyOTY1OSwyOTY2MCwyOTY2MSwyOTY2MywyOTY2NSwyOTY2NiwyOTY2NywyOTY2OCwyOTY3MCwyOTY3MiwyOTY3NCwyOTY3NSwyOTY3NiwyOTY3OCwyOTY3OSwyOTY4MCwyOTY4MSwyOTY4''@;'; put 'put ''MywyOTY4NCwyOTY4NSwyOTY4NiwyOTY4Nyw1NzQzOCw1NzQzOSw1NzQ0MCw1NzQ0MSw1NzQ0Miw1NzQ0Myw1NzQ0NCw1NzQ0NSw1NzQ0Niw1NzQ0Nyw1NzQ0OCw1NzQ0OSw1NzQ1MCw1NzQ1MSw1NzQ1Miw1NzQ1Myw1NzQ1NCw1NzQ1NSw1NzQ1Niw1NzQ1Nyw1NzQ1OCw1NzQ1OSw1NzQ2MCw1''@;'; put 'put ''NzQ2MSw1NzQ2Miw1NzQ2Myw1NzQ2NCw1NzQ2NSw1NzQ2Niw1NzQ2Nyw1NzQ2OCw1NzQ2OSw1NzQ3MCw1NzQ3MSw1NzQ3Miw1NzQ3Myw1NzQ3NCw1NzQ3NSw1NzQ3Niw1NzQ3Nyw1NzQ3OCw1NzQ3OSw1NzQ4MCw1NzQ4MSw1NzQ4Miw1NzQ4Myw1NzQ4NCw1NzQ4NSw1NzQ4Niw1NzQ4Nyw1NzQ4''@;'; put 'put ''OCw1NzQ4OSw1NzQ5MCw1NzQ5MSw1NzQ5Miw1NzQ5Myw1NzQ5NCw1NzQ5NSw1NzQ5Niw1NzQ5Nyw1NzQ5OCw1NzQ5OSw1NzUwMCw1NzUwMSw1NzUwMiw1NzUwMyw1NzUwNCw1NzUwNSw1NzUwNiw1NzUwNyw1NzUwOCw1NzUwOSw1NzUxMCw1NzUxMSw1NzUxMiw1NzUxMyw1NzUxNCw1NzUxNSw1''@;'; put 'put ''NzUxNiw1NzUxNyw1NzUxOCw1NzUxOSw1NzUyMCw1NzUyMSw1NzUyMiw1NzUyMyw1NzUyNCw1NzUyNSw1NzUyNiw1NzUyNyw1NzUyOCw1NzUyOSw1NzUzMCw1NzUzMSwyOTY4OCwyOTY4OSwyOTY5MCwyOTY5MSwyOTY5MiwyOTY5MywyOTY5NCwyOTY5NSwyOTY5NiwyOTY5NywyOTY5OCwyOTcw''@;'; put 'put ''MCwyOTcwMywyOTcwNCwyOTcwNywyOTcwOCwyOTcwOSwyOTcxMCwyOTcxMywyOTcxNCwyOTcxNSwyOTcxNiwyOTcxNywyOTcxOCwyOTcxOSwyOTcyMCwyOTcyMSwyOTcyNCwyOTcyNSwyOTcyNiwyOTcyNywyOTcyOCwyOTcyOSwyOTczMSwyOTczMiwyOTczNSwyOTczNywyOTczOSwyOTc0MSwy''@;'; put 'put ''OTc0MywyOTc0NSwyOTc0NiwyOTc1MSwyOTc1MiwyOTc1MywyOTc1NCwyOTc1NSwyOTc1NywyOTc1OCwyOTc1OSwyOTc2MCwyOTc2MiwyOTc2MywyOTc2NCwyOTc2NSwyOTc2NiwyOTc2NywyOTc2OCwyOTc2OSwyOTc3MCwyOTc3MSwyOTc3MiwyOTc3MywyOTc3NCwyOTc3NSwyOTc3NiwyOTc3''@;'; put 'put ''NywyOTc3OCwyOTc3OSwyOTc4MCwyOTc4MiwyOTc4NCwyOTc4OSwyOTc5MiwyOTc5MywyOTc5NCwyOTc5NSwyOTc5NiwyOTc5NywyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMSwyOTgwMiwyOTgwMywyOTgwNCwyOTgwNiwyOTgwNywyOTgwOSwyOTgxMCwyOTgxMSwyOTgxMiwyOTgxMywyOTgxNiwy''@;'; put 'put ''OTgxNywyOTgxOCw1NzUzMiw1NzUzMyw1NzUzNCw1NzUzNSw1NzUzNiw1NzUzNyw1NzUzOCw1NzUzOSw1NzU0MCw1NzU0MSw1NzU0Miw1NzU0Myw1NzU0NCw1NzU0NSw1NzU0Niw1NzU0Nyw1NzU0OCw1NzU0OSw1NzU1MCw1NzU1MSw1NzU1Miw1NzU1Myw1NzU1NCw1NzU1NSw1NzU1Niw1NzU1''@;'; put 'put ''Nyw1NzU1OCw1NzU1OSw1NzU2MCw1NzU2MSw1NzU2Miw1NzU2Myw1NzU2NCw1NzU2NSw1NzU2Niw1NzU2Nyw1NzU2OCw1NzU2OSw1NzU3MCw1NzU3MSw1NzU3Miw1NzU3Myw1NzU3NCw1NzU3NSw1NzU3Niw1NzU3Nyw1NzU3OCw1NzU3OSw1NzU4MCw1NzU4MSw1NzU4Miw1NzU4Myw1NzU4NCw1''@;'; put 'put ''NzU4NSw1NzU4Niw1NzU4Nyw1NzU4OCw1NzU4OSw1NzU5MCw1NzU5MSw1NzU5Miw1NzU5Myw1NzU5NCw1NzU5NSw1NzU5Niw1NzU5Nyw1NzU5OCw1NzU5OSw1NzYwMCw1NzYwMSw1NzYwMiw1NzYwMyw1NzYwNCw1NzYwNSw1NzYwNiw1NzYwNyw1NzYwOCw1NzYwOSw1NzYxMCw1NzYxMSw1NzYx''@;'; put 'put ''Miw1NzYxMyw1NzYxNCw1NzYxNSw1NzYxNiw1NzYxNyw1NzYxOCw1NzYxOSw1NzYyMCw1NzYyMSw1NzYyMiw1NzYyMyw1NzYyNCw1NzYyNSwyOTgxOSwyOTgyMCwyOTgyMSwyOTgyMywyOTgyNiwyOTgyOCwyOTgyOSwyOTgzMCwyOTgzMiwyOTgzMywyOTgzNCwyOTgzNiwyOTgzNywyOTgzOSwy''@;'; put 'put ''OTg0MSwyOTg0MiwyOTg0MywyOTg0NCwyOTg0NSwyOTg0NiwyOTg0NywyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MSwyOTg1MywyOTg1NSwyOTg1NiwyOTg1NywyOTg1OCwyOTg1OSwyOTg2MCwyOTg2MSwyOTg2MiwyOTg2NiwyOTg2NywyOTg2OCwyOTg2OSwyOTg3MCwyOTg3MSwyOTg3MiwyOTg3''@;'; put 'put ''MywyOTg3NCwyOTg3NSwyOTg3NiwyOTg3NywyOTg3OCwyOTg3OSwyOTg4MCwyOTg4MSwyOTg4MywyOTg4NCwyOTg4NSwyOTg4NiwyOTg4NywyOTg4OCwyOTg4OSwyOTg5MCwyOTg5MSwyOTg5MiwyOTg5MywyOTg5NCwyOTg5NSwyOTg5NiwyOTg5NywyOTg5OCwyOTg5OSwyOTkwMCwyOTkwMSwy''@;'; put 'put ''OTkwMiwyOTkwMywyOTkwNCwyOTkwNSwyOTkwNywyOTkwOCwyOTkwOSwyOTkxMCwyOTkxMSwyOTkxMiwyOTkxMywyOTkxNCwyOTkxNSwyOTkxNywyOTkxOSwyOTkyMSwyOTkyNSwyOTkyNywyOTkyOCwyOTkyOSwyOTkzMCwyOTkzMSwyOTkzMiwyOTkzMywyOTkzNiwyOTkzNywyOTkzOCw1NzYy''@;'; put 'put ''Niw1NzYyNyw1NzYyOCw1NzYyOSw1NzYzMCw1NzYzMSw1NzYzMiw1NzYzMyw1NzYzNCw1NzYzNSw1NzYzNiw1NzYzNyw1NzYzOCw1NzYzOSw1NzY0MCw1NzY0MSw1NzY0Miw1NzY0Myw1NzY0NCw1NzY0NSw1NzY0Niw1NzY0Nyw1NzY0OCw1NzY0OSw1NzY1MCw1NzY1MSw1NzY1Miw1NzY1Myw1''@;'; put 'put ''NzY1NCw1NzY1NSw1NzY1Niw1NzY1Nyw1NzY1OCw1NzY1OSw1NzY2MCw1NzY2MSw1NzY2Miw1NzY2Myw1NzY2NCw1NzY2NSw1NzY2Niw1NzY2Nyw1NzY2OCw1NzY2OSw1NzY3MCw1NzY3MSw1NzY3Miw1NzY3Myw1NzY3NCw1NzY3NSw1NzY3Niw1NzY3Nyw1NzY3OCw1NzY3OSw1NzY4MCw1NzY4''@;'; put 'put ''MSw1NzY4Miw1NzY4Myw1NzY4NCw1NzY4NSw1NzY4Niw1NzY4Nyw1NzY4OCw1NzY4OSw1NzY5MCw1NzY5MSw1NzY5Miw1NzY5Myw1NzY5NCw1NzY5NSw1NzY5Niw1NzY5Nyw1NzY5OCw1NzY5OSw1NzcwMCw1NzcwMSw1NzcwMiw1NzcwMyw1NzcwNCw1NzcwNSw1NzcwNiw1NzcwNyw1NzcwOCw1''@;'; put 'put ''NzcwOSw1NzcxMCw1NzcxMSw1NzcxMiw1NzcxMyw1NzcxNCw1NzcxNSw1NzcxNiw1NzcxNyw1NzcxOCw1NzcxOSwyOTkzOSwyOTk0MSwyOTk0NCwyOTk0NSwyOTk0NiwyOTk0NywyOTk0OCwyOTk0OSwyOTk1MCwyOTk1MiwyOTk1MywyOTk1NCwyOTk1NSwyOTk1NywyOTk1OCwyOTk1OSwyOTk2''@;'; put 'put ''MCwyOTk2MSwyOTk2MiwyOTk2MywyOTk2NCwyOTk2NiwyOTk2OCwyOTk3MCwyOTk3MiwyOTk3MywyOTk3NCwyOTk3NSwyOTk3OSwyOTk4MSwyOTk4MiwyOTk4NCwyOTk4NSwyOTk4NiwyOTk4NywyOTk4OCwyOTk5MCwyOTk5MSwyOTk5NCwyOTk5OCwzMDAwNCwzMDAwNiwzMDAwOSwzMDAxMiwz''@;'; put 'put ''MDAxMywzMDAxNSwzMDAxNywzMDAxOCwzMDAxOSwzMDAyMCwzMDAyMiwzMDAyMywzMDAyNSwzMDAyNiwzMDAyOSwzMDAzMiwzMDAzMywzMDAzNCwzMDAzNSwzMDAzNywzMDAzOCwzMDAzOSwzMDA0MCwzMDA0NSwzMDA0NiwzMDA0NywzMDA0OCwzMDA0OSwzMDA1MCwzMDA1MSwzMDA1MiwzMDA1''@;'; put 'put ''NSwzMDA1NiwzMDA1NywzMDA1OSwzMDA2MCwzMDA2MSwzMDA2MiwzMDA2MywzMDA2NCwzMDA2NSwzMDA2NywzMDA2OSwzMDA3MCwzMDA3MSwzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MCwzMDA4MSwzMDA4MiwzMDA4NCwzMDA4NSwzMDA4Nyw1NzcyMCw1NzcyMSw1NzcyMiw1''@;'; put 'put ''NzcyMyw1NzcyNCw1NzcyNSw1NzcyNiw1NzcyNyw1NzcyOCw1NzcyOSw1NzczMCw1NzczMSw1NzczMiw1NzczMyw1NzczNCw1NzczNSw1NzczNiw1NzczNyw1NzczOCw1NzczOSw1Nzc0MCw1Nzc0MSw1Nzc0Miw1Nzc0Myw1Nzc0NCw1Nzc0NSw1Nzc0Niw1Nzc0Nyw1Nzc0OCw1Nzc0OSw1Nzc1''@;'; put 'put ''MCw1Nzc1MSw1Nzc1Miw1Nzc1Myw1Nzc1NCw1Nzc1NSw1Nzc1Niw1Nzc1Nyw1Nzc1OCw1Nzc1OSw1Nzc2MCw1Nzc2MSw1Nzc2Miw1Nzc2Myw1Nzc2NCw1Nzc2NSw1Nzc2Niw1Nzc2Nyw1Nzc2OCw1Nzc2OSw1Nzc3MCw1Nzc3MSw1Nzc3Miw1Nzc3Myw1Nzc3NCw1Nzc3NSw1Nzc3Niw1Nzc3Nyw1''@;'; put 'put ''Nzc3OCw1Nzc3OSw1Nzc4MCw1Nzc4MSw1Nzc4Miw1Nzc4Myw1Nzc4NCw1Nzc4NSw1Nzc4Niw1Nzc4Nyw1Nzc4OCw1Nzc4OSw1Nzc5MCw1Nzc5MSw1Nzc5Miw1Nzc5Myw1Nzc5NCw1Nzc5NSw1Nzc5Niw1Nzc5Nyw1Nzc5OCw1Nzc5OSw1NzgwMCw1NzgwMSw1NzgwMiw1NzgwMyw1NzgwNCw1Nzgw''@;'; put 'put ''NSw1NzgwNiw1NzgwNyw1NzgwOCw1NzgwOSw1NzgxMCw1NzgxMSw1NzgxMiw1NzgxMywzMDA4OCwzMDA4OSwzMDA5MCwzMDA5MiwzMDA5MywzMDA5NCwzMDA5NiwzMDA5OSwzMDEwMSwzMDEwNCwzMDEwNywzMDEwOCwzMDExMCwzMDExNCwzMDExOCwzMDExOSwzMDEyMCwzMDEyMSwzMDEyMiwz''@;'; put 'put ''MDEyNSwzMDEzNCwzMDEzNSwzMDEzOCwzMDEzOSwzMDE0MywzMDE0NCwzMDE0NSwzMDE1MCwzMDE1NSwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2MCwzMDE2MSwzMDE2MywzMDE2NywzMDE2OSwzMDE3MCwzMDE3MiwzMDE3MywzMDE3NSwzMDE3NiwzMDE3NywzMDE4MSwzMDE4NSwzMDE4OCwzMDE4''@;'; put 'put ''OSwzMDE5MCwzMDE5MSwzMDE5NCwzMDE5NSwzMDE5NywzMDE5OCwzMDE5OSwzMDIwMCwzMDIwMiwzMDIwMywzMDIwNSwzMDIwNiwzMDIxMCwzMDIxMiwzMDIxNCwzMDIxNSwzMDIxNiwzMDIxNywzMDIxOSwzMDIyMSwzMDIyMiwzMDIyMywzMDIyNSwzMDIyNiwzMDIyNywzMDIyOCwzMDIzMCwz''@;'; put 'put ''MDIzNCwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MSwzMDI0MywzMDI0NywzMDI0OCwzMDI1MiwzMDI1NCwzMDI1NSwzMDI1NywzMDI1OCwzMDI2MiwzMDI2MywzMDI2NSwzMDI2NiwzMDI2NywzMDI2OSwzMDI3MywzMDI3NCwzMDI3Niw1NzgxNCw1NzgxNSw1NzgxNiw1NzgxNyw1NzgxOCw1Nzgx''@;'; put 'put ''OSw1NzgyMCw1NzgyMSw1NzgyMiw1NzgyMyw1NzgyNCw1NzgyNSw1NzgyNiw1NzgyNyw1NzgyOCw1NzgyOSw1NzgzMCw1NzgzMSw1NzgzMiw1NzgzMyw1NzgzNCw1NzgzNSw1NzgzNiw1NzgzNyw1NzgzOCw1NzgzOSw1Nzg0MCw1Nzg0MSw1Nzg0Miw1Nzg0Myw1Nzg0NCw1Nzg0NSw1Nzg0Niw1''@;'; put 'put ''Nzg0Nyw1Nzg0OCw1Nzg0OSw1Nzg1MCw1Nzg1MSw1Nzg1Miw1Nzg1Myw1Nzg1NCw1Nzg1NSw1Nzg1Niw1Nzg1Nyw1Nzg1OCw1Nzg1OSw1Nzg2MCw1Nzg2MSw1Nzg2Miw1Nzg2Myw1Nzg2NCw1Nzg2NSw1Nzg2Niw1Nzg2Nyw1Nzg2OCw1Nzg2OSw1Nzg3MCw1Nzg3MSw1Nzg3Miw1Nzg3Myw1Nzg3''@;'; put 'put ''NCw1Nzg3NSw1Nzg3Niw1Nzg3Nyw1Nzg3OCw1Nzg3OSw1Nzg4MCw1Nzg4MSw1Nzg4Miw1Nzg4Myw1Nzg4NCw1Nzg4NSw1Nzg4Niw1Nzg4Nyw1Nzg4OCw1Nzg4OSw1Nzg5MCw1Nzg5MSw1Nzg5Miw1Nzg5Myw1Nzg5NCw1Nzg5NSw1Nzg5Niw1Nzg5Nyw1Nzg5OCw1Nzg5OSw1NzkwMCw1NzkwMSw1''@;'; put 'put ''NzkwMiw1NzkwMyw1NzkwNCw1NzkwNSw1NzkwNiw1NzkwNywzMDI3NywzMDI3OCwzMDI3OSwzMDI4MCwzMDI4MSwzMDI4MiwzMDI4MywzMDI4NiwzMDI4NywzMDI4OCwzMDI4OSwzMDI5MCwzMDI5MSwzMDI5MywzMDI5NSwzMDI5NiwzMDI5NywzMDI5OCwzMDI5OSwzMDMwMSwzMDMwMywzMDMw''@;'; put 'put ''NCwzMDMwNSwzMDMwNiwzMDMwOCwzMDMwOSwzMDMxMCwzMDMxMSwzMDMxMiwzMDMxMywzMDMxNCwzMDMxNiwzMDMxNywzMDMxOCwzMDMyMCwzMDMyMSwzMDMyMiwzMDMyMywzMDMyNCwzMDMyNSwzMDMyNiwzMDMyNywzMDMyOSwzMDMzMCwzMDMzMiwzMDMzNSwzMDMzNiwzMDMzNywzMDMzOSwz''@;'; put 'put ''MDM0MSwzMDM0NSwzMDM0NiwzMDM0OCwzMDM0OSwzMDM1MSwzMDM1MiwzMDM1NCwzMDM1NiwzMDM1NywzMDM1OSwzMDM2MCwzMDM2MiwzMDM2MywzMDM2NCwzMDM2NSwzMDM2NiwzMDM2NywzMDM2OCwzMDM2OSwzMDM3MCwzMDM3MSwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3NywzMDM3''@;'; put 'put ''OCwzMDM3OSwzMDM4MCwzMDM4MSwzMDM4MywzMDM4NCwzMDM4NywzMDM4OSwzMDM5MCwzMDM5MSwzMDM5MiwzMDM5MywzMDM5NCwzMDM5NSwzMDM5NiwzMDM5NywzMDM5OCwzMDQwMCwzMDQwMSwzMDQwMywyMTgzNCwzODQ2MywyMjQ2NywyNTM4NCwyMTcxMCwyMTc2OSwyMTY5NiwzMDM1Mywz''@;'; put 'put ''MDI4NCwzNDEwOCwzMDcwMiwzMzQwNiwzMDg2MSwyOTIzMywzODU1MiwzODc5NywyNzY4OCwyMzQzMywyMDQ3NCwyNTM1MywyNjI2MywyMzczNiwzMzAxOCwyNjY5NiwzMjk0MiwyNjExNCwzMDQxNCwyMDk4NSwyNTk0MiwyOTEwMCwzMjc1MywzNDk0OCwyMDY1OCwyMjg4NSwyNTAzNCwyODU5''@;'; put 'put ''NSwzMzQ1MywyNTQyMCwyNTE3MCwyMTQ4NSwyMTU0MywzMTQ5NCwyMDg0MywzMDExNiwyNDA1MiwyNTMwMCwzNjI5OSwzODc3NCwyNTIyNiwzMjc5MywyMjM2NSwzODcxMiwzMjYxMCwyOTI0MCwzMDMzMywyNjU3NSwzMDMzNCwyNTY3MCwyMDMzNiwzNjEzMywyNTMwOCwzMTI1NSwyNjAwMSwy''@;'; put 'put ''OTY3NywyNTY0NCwyNTIwMywzMzMyNCwzOTA0MSwyNjQ5NSwyOTI1NiwyNTE5OCwyNTI5MiwyMDI3NiwyOTkyMywyMTMyMiwyMTE1MCwzMjQ1OCwzNzAzMCwyNDExMCwyNjc1OCwyNzAzNiwzMzE1MiwzMjQ2NSwyNjgzNCwzMDkxNywzNDQ0NCwzODIyNSwyMDYyMSwzNTg3NiwzMzUwMiwzMjk5''@;'; put 'put ''MCwyMTI1MywzNTA5MCwyMTA5MywzMDQwNCwzMDQwNywzMDQwOSwzMDQxMSwzMDQxMiwzMDQxOSwzMDQyMSwzMDQyNSwzMDQyNiwzMDQyOCwzMDQyOSwzMDQzMCwzMDQzMiwzMDQzMywzMDQzNCwzMDQzNSwzMDQzNiwzMDQzOCwzMDQzOSwzMDQ0MCwzMDQ0MSwzMDQ0MiwzMDQ0MywzMDQ0NCwz''@;'; put 'put ''MDQ0NSwzMDQ0OCwzMDQ1MSwzMDQ1MywzMDQ1NCwzMDQ1NSwzMDQ1OCwzMDQ1OSwzMDQ2MSwzMDQ2MywzMDQ2NCwzMDQ2NiwzMDQ2NywzMDQ2OSwzMDQ3MCwzMDQ3NCwzMDQ3NiwzMDQ3OCwzMDQ3OSwzMDQ4MCwzMDQ4MSwzMDQ4MiwzMDQ4MywzMDQ4NCwzMDQ4NSwzMDQ4NiwzMDQ4NywzMDQ4''@;'; put 'put ''OCwzMDQ5MSwzMDQ5MiwzMDQ5MywzMDQ5NCwzMDQ5NywzMDQ5OSwzMDUwMCwzMDUwMSwzMDUwMywzMDUwNiwzMDUwNywzMDUwOCwzMDUxMCwzMDUxMiwzMDUxMywzMDUxNCwzMDUxNSwzMDUxNiwzMDUyMSwzMDUyMywzMDUyNSwzMDUyNiwzMDUyNywzMDUzMCwzMDUzMiwzMDUzMywzMDUzNCwz''@;'; put 'put ''MDUzNiwzMDUzNywzMDUzOCwzMDUzOSwzMDU0MCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU0NywzMDU0OCwzMDU0OSwzMDU1MCwzMDU1MSwzMDU1MiwzMDU1MywzMDU1NiwzNDE4MCwzODY0OSwyMDQ0NSwyMjU2MSwzOTI4MSwyMzQ1MywyNTI2NSwyNTI1MywyNjI5MiwzNTk2MSw0MDA3''@;'; put 'put ''NywyOTE5MCwyNjQ3OSwzMDg2NSwyNDc1NCwyMTMyOSwyMTI3MSwzNjc0NCwzMjk3MiwzNjEyNSwzODA0OSwyMDQ5MywyOTM4NCwyMjc5MSwyNDgxMSwyODk1MywzNDk4NywyMjg2OCwzMzUxOSwyNjQxMiwzMTUyOCwyMzg0OSwzMjUwMywyOTk5NywyNzg5MywzNjQ1NCwzNjg1NiwzNjkyNCw0''@;'; put 'put ''MDc2MywyNzYwNCwzNzE0NSwzMTUwOCwyNDQ0NCwzMDg4NywzNDAwNiwzNDEwOSwyNzYwNSwyNzYwOSwyNzYwNiwyNDA2NSwyNDE5OSwzMDIwMSwzODM4MSwyNTk0OSwyNDMzMCwyNDUxNywzNjc2NywyMjcyMSwzMzIxOCwzNjk5MSwzODQ5MSwzODgyOSwzNjc5MywzMjUzNCwzNjE0MCwyNTE1''@;'; put 'put ''MywyMDQxNSwyMTQ2NCwyMTM0MiwzNjc3NiwzNjc3NywzNjc3OSwzNjk0MSwyNjYzMSwyNDQyNiwzMzE3NiwzNDkyMCw0MDE1MCwyNDk3MSwyMTAzNSwzMDI1MCwyNDQyOCwyNTk5NiwyODYyNiwyODM5MiwyMzQ4NiwyNTY3MiwyMDg1MywyMDkxMiwyNjU2NCwxOTk5MywzMTE3NywzOTI5Miwy''@;'; put 'put ''ODg1MSwzMDU1NywzMDU1OCwzMDU1OSwzMDU2MCwzMDU2NCwzMDU2NywzMDU2OSwzMDU3MCwzMDU3MywzMDU3NCwzMDU3NSwzMDU3NiwzMDU3NywzMDU3OCwzMDU3OSwzMDU4MCwzMDU4MSwzMDU4MiwzMDU4MywzMDU4NCwzMDU4NiwzMDU4NywzMDU4OCwzMDU5MywzMDU5NCwzMDU5NSwzMDU5''@;'; put 'put ''OCwzMDU5OSwzMDYwMCwzMDYwMSwzMDYwMiwzMDYwMywzMDYwNywzMDYwOCwzMDYxMSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxNSwzMDYxNiwzMDYxNywzMDYxOCwzMDYxOSwzMDYyMCwzMDYyMSwzMDYyMiwzMDYyNSwzMDYyNywzMDYyOCwzMDYzMCwzMDYzMiwzMDYzNSwzMDYzNywzMDYzOCwz''@;'; put 'put ''MDYzOSwzMDY0MSwzMDY0MiwzMDY0NCwzMDY0NiwzMDY0NywzMDY0OCwzMDY0OSwzMDY1MCwzMDY1MiwzMDY1NCwzMDY1NiwzMDY1NywzMDY1OCwzMDY1OSwzMDY2MCwzMDY2MSwzMDY2MiwzMDY2MywzMDY2NCwzMDY2NSwzMDY2NiwzMDY2NywzMDY2OCwzMDY3MCwzMDY3MSwzMDY3MiwzMDY3''@;'; put 'put ''MywzMDY3NCwzMDY3NSwzMDY3NiwzMDY3NywzMDY3OCwzMDY4MCwzMDY4MSwzMDY4MiwzMDY4NSwzMDY4NiwzMDY4NywzMDY4OCwzMDY4OSwzMDY5MiwzMDE0OSwyNDE4MiwyOTYyNywzMzc2MCwyNTc3MywyNTMyMCwzODA2OSwyNzg3NCwyMTMzOCwyMTE4NywyNTYxNSwzODA4MiwzMTYzNiwy''@;'; put 'put ''MDI3MSwyNDA5MSwzMzMzNCwzMzA0NiwzMzE2MiwyODE5NiwyNzg1MCwzOTUzOSwyNTQyOSwyMTM0MCwyMTc1NCwzNDkxNywyMjQ5NiwxOTk4MSwyNDA2NywyNzQ5MywzMTgwNywzNzA5NiwyNDU5OCwyNTgzMCwyOTQ2OCwzNTAwOSwyNjQ0OCwyNTE2NSwzNjEzMCwzMDU3MiwzNjM5MywzNzMx''@;'; put 'put ''OSwyNDQyNSwzMzc1NiwzNDA4MSwzOTE4NCwyMTQ0MiwzNDQ1MywyNzUzMSwyNDgxMywyNDgwOCwyODc5OSwzMzQ4NSwzMzMyOSwyMDE3OSwyNzgxNSwzNDI1NSwyNTgwNSwzMTk2MSwyNzEzMywyNjM2MSwzMzYwOSwyMTM5NywzMTU3NCwyMDM5MSwyMDg3NiwyNzk3OSwyMzYxOCwzNjQ2MSwy''@;'; put 'put ''NTU1NCwyMTQ0OSwzMzU4MCwzMzU5MCwyNjU5NywzMDkwMCwyNTY2MSwyMzUxOSwyMzcwMCwyNDA0NiwzNTgxNSwyNTI4NiwyNjYxMiwzNTk2MiwyNTYwMCwyNTUzMCwzNDYzMywzOTMwNywzNTg2MywzMjU0NCwzODEzMCwyMDEzNSwzODQxNiwzOTA3NiwyNjEyNCwyOTQ2MiwzMDY5NCwzMDY5''@;'; put 'put ''NiwzMDY5OCwzMDcwMywzMDcwNCwzMDcwNSwzMDcwNiwzMDcwOCwzMDcwOSwzMDcxMSwzMDcxMywzMDcxNCwzMDcxNSwzMDcxNiwzMDcyMywzMDcyNCwzMDcyNSwzMDcyNiwzMDcyNywzMDcyOCwzMDczMCwzMDczMSwzMDczNCwzMDczNSwzMDczNiwzMDczOSwzMDc0MSwzMDc0NSwzMDc0Nywz''@;'; put 'put ''MDc1MCwzMDc1MiwzMDc1MywzMDc1NCwzMDc1NiwzMDc2MCwzMDc2MiwzMDc2MywzMDc2NiwzMDc2NywzMDc2OSwzMDc3MCwzMDc3MSwzMDc3MywzMDc3NCwzMDc4MSwzMDc4MywzMDc4NSwzMDc4NiwzMDc4NywzMDc4OCwzMDc5MCwzMDc5MiwzMDc5MywzMDc5NCwzMDc5NSwzMDc5NywzMDc5''@;'; put 'put ''OSwzMDgwMSwzMDgwMywzMDgwNCwzMDgwOCwzMDgwOSwzMDgxMCwzMDgxMSwzMDgxMiwzMDgxNCwzMDgxNSwzMDgxNiwzMDgxNywzMDgxOCwzMDgxOSwzMDgyMCwzMDgyMSwzMDgyMiwzMDgyMywzMDgyNCwzMDgyNSwzMDgzMSwzMDgzMiwzMDgzMywzMDgzNCwzMDgzNSwzMDgzNiwzMDgzNywz''@;'; put 'put ''MDgzOCwzMDg0MCwzMDg0MSwzMDg0MiwzMDg0MywzMDg0NSwzMDg0NiwzMDg0NywzMDg0OCwzMDg0OSwzMDg1MCwzMDg1MSwyMjMzMCwyMzU4MSwyNDEyMCwzODI3MSwyMDYwNywzMjkyOCwyMTM3OCwyNTk1MCwzMDAyMSwyMTgwOSwyMDUxMywzNjIyOSwyNTIyMCwzODA0NiwyNjM5NywyMjA2''@;'; put 'put ''NiwyODUyNiwyNDAzNCwyMTU1NywyODgxOCwzNjcxMCwyNTE5OSwyNTc2NCwyNTUwNywyNDQ0MywyODU1MiwzNzEwOCwzMzI1MSwzNjc4NCwyMzU3NiwyNjIxNiwyNDU2MSwyNzc4NSwzODQ3MiwzNjIyNSwzNDkyNCwyNTc0NSwzMTIxNiwyMjQ3OCwyNzIyNSwyNTEwNCwyMTU3NiwyMDA1Niwz''@;'; put 'put ''MTI0MywyNDgwOSwyODU0OCwzNTgwMiwyNTIxNSwzNjg5NCwzOTU2MywzMTIwNCwyMTUwNywzMDE5NiwyNTM0NSwyMTI3MywyNzc0NCwzNjgzMSwyNDM0NywzOTUzNiwzMjgyNyw0MDgzMSwyMDM2MCwyMzYxMCwzNjE5NiwzMjcwOSwyNjAyMSwyODg2MSwyMDgwNSwyMDkxNCwzNDQxMSwyMzgx''@;'; put 'put ''NSwyMzQ1NiwyNTI3NywzNzIyOCwzMDA2OCwzNjM2NCwzMTI2NCwyNDgzMywzMTYwOSwyMDE2NywzMjUwNCwzMDU5NywxOTk4NSwzMzI2MSwyMTAyMSwyMDk4NiwyNzI0OSwyMTQxNiwzNjQ4NywzODE0OCwzODYwNywyODM1MywzODUwMCwyNjk3MCwzMDg1MiwzMDg1MywzMDg1NCwzMDg1Niwz''@;'; put 'put ''MDg1OCwzMDg1OSwzMDg2MywzMDg2NCwzMDg2NiwzMDg2OCwzMDg2OSwzMDg3MCwzMDg3MywzMDg3NywzMDg3OCwzMDg4MCwzMDg4MiwzMDg4NCwzMDg4NiwzMDg4OCwzMDg4OSwzMDg5MCwzMDg5MSwzMDg5MiwzMDg5MywzMDg5NCwzMDg5NSwzMDkwMSwzMDkwMiwzMDkwMywzMDkwNCwzMDkw''@;'; put 'put ''NiwzMDkwNywzMDkwOCwzMDkwOSwzMDkxMSwzMDkxMiwzMDkxNCwzMDkxNSwzMDkxNiwzMDkxOCwzMDkxOSwzMDkyMCwzMDkyNCwzMDkyNSwzMDkyNiwzMDkyNywzMDkyOSwzMDkzMCwzMDkzMSwzMDkzNCwzMDkzNSwzMDkzNiwzMDkzOCwzMDkzOSwzMDk0MCwzMDk0MSwzMDk0MiwzMDk0Mywz''@;'; put 'put ''MDk0NCwzMDk0NSwzMDk0NiwzMDk0NywzMDk0OCwzMDk0OSwzMDk1MCwzMDk1MSwzMDk1MywzMDk1NCwzMDk1NSwzMDk1NywzMDk1OCwzMDk1OSwzMDk2MCwzMDk2MSwzMDk2MywzMDk2NSwzMDk2NiwzMDk2OCwzMDk2OSwzMDk3MSwzMDk3MiwzMDk3MywzMDk3NCwzMDk3NSwzMDk3NiwzMDk3''@;'; put 'put ''OCwzMDk3OSwzMDk4MCwzMDk4MiwzMDk4MywzMDk4NCwzMDk4NSwzMDk4NiwzMDk4NywzMDk4OCwzMDc4NCwyMDY0OCwzMDY3OSwyNTYxNiwzNTMwMiwyMjc4OCwyNTU3MSwyNDAyOSwzMTM1OSwyNjk0MSwyMDI1NiwzMzMzNywyMTkxMiwyMDAxOCwzMDEyNiwzMTM4MywyNDE2MiwyNDIwMiwz''@;'; put 'put ''ODM4MywyMTAxOSwyMTU2MSwyODgxMCwyNTQ2MiwzODE4MCwyMjQwMiwyNjE0OSwyNjk0MywzNzI1NSwyMTc2NywyODE0NywzMjQzMSwzNDg1MCwyNTEzOSwzMjQ5NiwzMDEzMywzMzU3NiwzMDkxMywzODYwNCwzNjc2NiwyNDkwNCwyOTk0MywzNTc4OSwyNzQ5MiwyMTA1MCwzNjE3NiwyNzQy''@;'; put 'put ''NSwzMjg3NCwzMzkwNSwyMjI1NywyMTI1NCwyMDE3NCwxOTk5NSwyMDk0NSwzMTg5NSwzNzI1OSwzMTc1MSwyMDQxOSwzNjQ3OSwzMTcxMywzMTM4OCwyNTcwMywyMzgyOCwyMDY1MiwzMzAzMCwzMDIwOSwzMTkyOSwyODE0MCwzMjczNiwyNjQ0OSwyMzM4NCwyMzU0NCwzMDkyMywyNTc3NCwy''@;'; put 'put ''NTYxOSwyNTUxNCwyNTM4NywzODE2OSwyNTY0NSwzNjc5OCwzMTU3MiwzMDI0OSwyNTE3MSwyMjgyMywyMTU3NCwyNzUxMywyMDY0MywyNTE0MCwyNDEwMiwyNzUyNiwyMDE5NSwzNjE1MSwzNDk1NSwyNDQ1MywzNjkxMCwzMDk4OSwzMDk5MCwzMDk5MSwzMDk5MiwzMDk5MywzMDk5NCwzMDk5''@;'; put 'put ''NiwzMDk5NywzMDk5OCwzMDk5OSwzMWUzLDMxMDAxLDMxMDAyLDMxMDAzLDMxMDA0LDMxMDA1LDMxMDA3LDMxMDA4LDMxMDA5LDMxMDEwLDMxMDExLDMxMDEzLDMxMDE0LDMxMDE1LDMxMDE2LDMxMDE3LDMxMDE4LDMxMDE5LDMxMDIwLDMxMDIxLDMxMDIyLDMxMDIzLDMxMDI0LDMxMDI1LDMx''@;'; put 'put ''MDI2LDMxMDI3LDMxMDI5LDMxMDMwLDMxMDMxLDMxMDMyLDMxMDMzLDMxMDM3LDMxMDM5LDMxMDQyLDMxMDQzLDMxMDQ0LDMxMDQ1LDMxMDQ3LDMxMDUwLDMxMDUxLDMxMDUyLDMxMDUzLDMxMDU0LDMxMDU1LDMxMDU2LDMxMDU3LDMxMDU4LDMxMDYwLDMxMDYxLDMxMDY0LDMxMDY1LDMxMDcz''@;'; put 'put ''LDMxMDc1LDMxMDc2LDMxMDc4LDMxMDgxLDMxMDgyLDMxMDgzLDMxMDg0LDMxMDg2LDMxMDg4LDMxMDg5LDMxMDkwLDMxMDkxLDMxMDkyLDMxMDkzLDMxMDk0LDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAxLDMxMTAyLDMxMTAzLDMxMTA2LDMxMTA3LDMxMTEwLDMxMTExLDMxMTEyLDMxMTEzLDMx''@;'; put 'put ''MTE1LDMxMTE2LDMxMTE3LDMxMTE4LDMxMTIwLDMxMTIxLDMxMTIyLDI0NjA4LDMyODI5LDI1Mjg1LDIwMDI1LDIxMzMzLDM3MTEyLDI1NTI4LDMyOTY2LDI2MDg2LDI3Njk0LDIwMjk0LDI0ODE0LDI4MTI5LDM1ODA2LDI0Mzc3LDM0NTA3LDI0NDAzLDI1Mzc3LDIwODI2LDMzNjMzLDI2NzIz''@;'; put 'put ''LDIwOTkyLDI1NDQzLDM2NDI0LDIwNDk4LDIzNzA3LDMxMDk1LDIzNTQ4LDIxMDQwLDMxMjkxLDI0NzY0LDM2OTQ3LDMwNDIzLDI0NTAzLDI0NDcxLDMwMzQwLDM2NDYwLDI4NzgzLDMwMzMxLDMxNTYxLDMwNjM0LDIwOTc5LDM3MDExLDIyNTY0LDIwMzAyLDI4NDA0LDM2ODQyLDI1OTMyLDMx''@;'; put 'put ''NTE1LDI5MzgwLDI4MDY4LDMyNzM1LDIzMjY1LDI1MjY5LDI0MjEzLDIyMzIwLDMzOTIyLDMxNTMyLDI0MDkzLDI0MzUxLDM2ODgyLDMyNTMyLDM5MDcyLDI1NDc0LDI4MzU5LDMwODcyLDI4ODU3LDIwODU2LDM4NzQ3LDIyNDQzLDMwMDA1LDIwMjkxLDMwMDA4LDI0MjE1LDI0ODA2LDIyODgw''@;'; put 'put ''LDI4MDk2LDI3NTgzLDMwODU3LDIxNTAwLDM4NjEzLDIwOTM5LDIwOTkzLDI1NDgxLDIxNTE0LDM4MDM1LDM1ODQzLDM2MzAwLDI5MjQxLDMwODc5LDM0Njc4LDM2ODQ1LDM1ODUzLDIxNDcyLDMxMTIzLDMxMTI0LDMxMTI1LDMxMTI2LDMxMTI3LDMxMTI4LDMxMTI5LDMxMTMxLDMxMTMyLDMx''@;'; put 'put ''MTMzLDMxMTM0LDMxMTM1LDMxMTM2LDMxMTM3LDMxMTM4LDMxMTM5LDMxMTQwLDMxMTQxLDMxMTQyLDMxMTQ0LDMxMTQ1LDMxMTQ2LDMxMTQ3LDMxMTQ4LDMxMTQ5LDMxMTUwLDMxMTUxLDMxMTUyLDMxMTUzLDMxMTU0LDMxMTU2LDMxMTU3LDMxMTU4LDMxMTU5LDMxMTYwLDMxMTY0LDMxMTY3''@;'; put 'put ''LDMxMTcwLDMxMTcyLDMxMTczLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgwLDMxMTgyLDMxMTgzLDMxMTg0LDMxMTg3LDMxMTg4LDMxMTkwLDMxMTkxLDMxMTkzLDMxMTk0LDMxMTk1LDMxMTk2LDMxMTk3LDMxMTk4LDMxMjAwLDMxMjAxLDMxMjAyLDMxMjA1LDMxMjA4LDMxMjEwLDMxMjEyLDMx''@;'; put 'put ''MjE0LDMxMjE3LDMxMjE4LDMxMjE5LDMxMjIwLDMxMjIxLDMxMjIyLDMxMjIzLDMxMjI1LDMxMjI2LDMxMjI4LDMxMjMwLDMxMjMxLDMxMjMzLDMxMjM2LDMxMjM3LDMxMjM5LDMxMjQwLDMxMjQxLDMxMjQyLDMxMjQ0LDMxMjQ3LDMxMjQ4LDMxMjQ5LDMxMjUwLDMxMjUxLDMxMjUzLDMxMjU0''@;'; put 'put ''LDMxMjU2LDMxMjU3LDMxMjU5LDMxMjYwLDE5OTY5LDMwNDQ3LDIxNDg2LDM4MDI1LDM5MDMwLDQwNzE4LDM4MTg5LDIzNDUwLDM1NzQ2LDIwMDAyLDE5OTk2LDIwOTA4LDMzODkxLDI1MDI2LDIxMTYwLDI2NjM1LDIwMzc1LDI0NjgzLDIwOTIzLDI3OTM0LDIwODI4LDI1MjM4LDI2MDA3LDM4''@;'; put 'put ''NDk3LDM1OTEwLDM2ODg3LDMwMTY4LDM3MTE3LDMwNTYzLDI3NjAyLDI5MzIyLDI5NDIwLDM1ODM1LDIyNTgxLDMwNTg1LDM2MTcyLDI2NDYwLDM4MjA4LDMyOTIyLDI0MjMwLDI4MTkzLDIyOTMwLDMxNDcxLDMwNzAxLDM4MjAzLDI3NTczLDI2MDI5LDMyNTI2LDIyNTM0LDIwODE3LDM4NDMx''@;'; put 'put ''LDIzNTQ1LDIyNjk3LDIxNTQ0LDM2NDY2LDI1OTU4LDM5MDM5LDIyMjQ0LDM4MDQ1LDMwNDYyLDM2OTI5LDI1NDc5LDIxNzAyLDIyODEwLDIyODQyLDIyNDI3LDM2NTMwLDI2NDIxLDM2MzQ2LDMzMzMzLDIxMDU3LDI0ODE2LDIyNTQ5LDM0NTU4LDIzNzg0LDQwNTE3LDIwNDIwLDM5MDY5LDM1''@;'; put 'put ''NzY5LDIzMDc3LDI0Njk0LDIxMzgwLDI1MjEyLDM2OTQzLDM3MTIyLDM5Mjk1LDI0NjgxLDMyNzgwLDIwNzk5LDMyODE5LDIzNTcyLDM5Mjg1LDI3OTUzLDIwMTA4LDMxMjYxLDMxMjYzLDMxMjY1LDMxMjY2LDMxMjY4LDMxMjY5LDMxMjcwLDMxMjcxLDMxMjcyLDMxMjczLDMxMjc0LDMxMjc1''@;'; put 'put ''LDMxMjc2LDMxMjc3LDMxMjc4LDMxMjc5LDMxMjgwLDMxMjgxLDMxMjgyLDMxMjg0LDMxMjg1LDMxMjg2LDMxMjg4LDMxMjkwLDMxMjk0LDMxMjk2LDMxMjk3LDMxMjk4LDMxMjk5LDMxMzAwLDMxMzAxLDMxMzAzLDMxMzA0LDMxMzA1LDMxMzA2LDMxMzA3LDMxMzA4LDMxMzA5LDMxMzEwLDMx''@;'; put 'put ''MzExLDMxMzEyLDMxMzE0LDMxMzE1LDMxMzE2LDMxMzE3LDMxMzE4LDMxMzIwLDMxMzIxLDMxMzIyLDMxMzIzLDMxMzI0LDMxMzI1LDMxMzI2LDMxMzI3LDMxMzI4LDMxMzI5LDMxMzMwLDMxMzMxLDMxMzMyLDMxMzMzLDMxMzM0LDMxMzM1LDMxMzM2LDMxMzM3LDMxMzM4LDMxMzM5LDMxMzQw''@;'; put 'put ''LDMxMzQxLDMxMzQyLDMxMzQzLDMxMzQ1LDMxMzQ2LDMxMzQ3LDMxMzQ5LDMxMzU1LDMxMzU2LDMxMzU3LDMxMzU4LDMxMzYyLDMxMzY1LDMxMzY3LDMxMzY5LDMxMzcwLDMxMzcxLDMxMzcyLDMxMzc0LDMxMzc1LDMxMzc2LDMxMzc5LDMxMzgwLDMxMzg1LDMxMzg2LDMxMzg3LDMxMzkwLDMx''@;'; put 'put ''MzkzLDMxMzk0LDM2MTQ0LDIxNDU3LDMyNjAyLDMxNTY3LDIwMjQwLDIwMDQ3LDM4NDAwLDI3ODYxLDI5NjQ4LDM0MjgxLDI0MDcwLDMwMDU4LDMyNzYzLDI3MTQ2LDMwNzE4LDM4MDM0LDMyMzIxLDIwOTYxLDI4OTAyLDIxNDUzLDM2ODIwLDMzNTM5LDM2MTM3LDI5MzU5LDM5Mjc3LDI3ODY3''@;'; put 'put ''LDIyMzQ2LDMzNDU5LDI2MDQxLDMyOTM4LDI1MTUxLDM4NDUwLDIyOTUyLDIwMjIzLDM1Nzc1LDMyNDQyLDI1OTE4LDMzNzc4LDM4NzUwLDIxODU3LDM5MTM0LDMyOTMzLDIxMjkwLDM1ODM3LDIxNTM2LDMyOTU0LDI0MjIzLDI3ODMyLDM2MTUzLDMzNDUyLDM3MjEwLDIxNTQ1LDI3Njc1LDIw''@;'; put 'put ''OTk4LDMyNDM5LDIyMzY3LDI4OTU0LDI3Nzc0LDMxODgxLDIyODU5LDIwMjIxLDI0NTc1LDI0ODY4LDMxOTE0LDIwMDE2LDIzNTUzLDI2NTM5LDM0NTYyLDIzNzkyLDM4MTU1LDM5MTE4LDMwMTI3LDI4OTI1LDM2ODk4LDIwOTExLDMyNTQxLDM1NzczLDIyODU3LDIwOTY0LDIwMzE1LDIxNTQy''@;'; put 'put ''LDIyODI3LDI1OTc1LDMyOTMyLDIzNDEzLDI1MjA2LDI1MjgyLDM2NzUyLDI0MTMzLDI3Njc5LDMxNTI2LDIwMjM5LDIwNDQwLDI2MzgxLDMxMzk1LDMxMzk2LDMxMzk5LDMxNDAxLDMxNDAyLDMxNDAzLDMxNDA2LDMxNDA3LDMxNDA4LDMxNDA5LDMxNDEwLDMxNDEyLDMxNDEzLDMxNDE0LDMx''@;'; put 'put ''NDE1LDMxNDE2LDMxNDE3LDMxNDE4LDMxNDE5LDMxNDIwLDMxNDIxLDMxNDIyLDMxNDI0LDMxNDI1LDMxNDI2LDMxNDI3LDMxNDI4LDMxNDI5LDMxNDMwLDMxNDMxLDMxNDMyLDMxNDMzLDMxNDM0LDMxNDM2LDMxNDM3LDMxNDM4LDMxNDM5LDMxNDQwLDMxNDQxLDMxNDQyLDMxNDQzLDMxNDQ0''@;'; put 'put ''LDMxNDQ1LDMxNDQ3LDMxNDQ4LDMxNDUwLDMxNDUxLDMxNDUyLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYwLDMxNDYzLDMxNDY0LDMxNDY1LDMxNDY2LDMxNDY3LDMxNDY4LDMxNDcwLDMxNDcyLDMxNDczLDMxNDc0LDMxNDc1LDMxNDc2LDMxNDc3LDMxNDc4LDMxNDc5LDMxNDgwLDMxNDgzLDMx''@;'; put 'put ''NDg0LDMxNDg2LDMxNDg4LDMxNDg5LDMxNDkwLDMxNDkzLDMxNDk1LDMxNDk3LDMxNTAwLDMxNTAxLDMxNTAyLDMxNTA0LDMxNTA2LDMxNTA3LDMxNTEwLDMxNTExLDMxNTEyLDMxNTE0LDMxNTE2LDMxNTE3LDMxNTE5LDMxNTIxLDMxNTIyLDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMzLDI4MDE0''@;'; put 'put ''LDI4MDc0LDMxMTE5LDM0OTkzLDI0MzQzLDI5OTk1LDI1MjQyLDM2NzQxLDIwNDYzLDM3MzQwLDI2MDIzLDMzMDcxLDMzMTA1LDI0MjIwLDMzMTA0LDM2MjEyLDIxMTAzLDM1MjA2LDM2MTcxLDIyNzk3LDIwNjEzLDIwMTg0LDM4NDI4LDI5MjM4LDMzMTQ1LDM2MTI3LDIzNTAwLDM1NzQ3LDM4''@;'; put 'put ''NDY4LDIyOTE5LDMyNTM4LDIxNjQ4LDIyMTM0LDIyMDMwLDM1ODEzLDI1OTEzLDI3MDEwLDM4MDQxLDMwNDIyLDI4Mjk3LDI0MTc4LDI5OTc2LDI2NDM4LDI2NTc3LDMxNDg3LDMyOTI1LDM2MjE0LDI0ODYzLDMxMTc0LDI1OTU0LDM2MTk1LDIwODcyLDIxMDE4LDM4MDUwLDMyNTY4LDMyOTIz''@;'; put 'put ''LDMyNDM0LDIzNzAzLDI4MjA3LDI2NDY0LDMxNzA1LDMwMzQ3LDM5NjQwLDMzMTY3LDMyNjYwLDMxOTU3LDI1NjMwLDM4MjI0LDMxMjk1LDIxNTc4LDIxNzMzLDI3NDY4LDI1NjAxLDI1MDk2LDQwNTA5LDMzMDExLDMwMTA1LDIxMTA2LDM4NzYxLDMzODgzLDI2Njg0LDM0NTMyLDM4NDAxLDM4''@;'; put 'put ''NTQ4LDM4MTI0LDIwMDEwLDIxNTA4LDMyNDczLDI2NjgxLDM2MzE5LDMyNzg5LDI2MzU2LDI0MjE4LDMyNjk3LDMxNTM1LDMxNTM2LDMxNTM4LDMxNTQwLDMxNTQxLDMxNTQyLDMxNTQzLDMxNTQ1LDMxNTQ3LDMxNTQ5LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU0LDMxNTU1LDMxNTU2LDMxNTU4''@;'; put 'put ''LDMxNTYwLDMxNTYyLDMxNTY1LDMxNTY2LDMxNTcxLDMxNTczLDMxNTc1LDMxNTc3LDMxNTgwLDMxNTgyLDMxNTgzLDMxNTg1LDMxNTg3LDMxNTg4LDMxNTg5LDMxNTkwLDMxNTkxLDMxNTkyLDMxNTkzLDMxNTk0LDMxNTk1LDMxNTk2LDMxNTk3LDMxNTk5LDMxNjAwLDMxNjAzLDMxNjA0LDMx''@;'; put 'put ''NjA2LDMxNjA4LDMxNjEwLDMxNjEyLDMxNjEzLDMxNjE1LDMxNjE3LDMxNjE4LDMxNjE5LDMxNjIwLDMxNjIyLDMxNjIzLDMxNjI0LDMxNjI1LDMxNjI2LDMxNjI3LDMxNjI4LDMxNjMwLDMxNjMxLDMxNjMzLDMxNjM0LDMxNjM1LDMxNjM4LDMxNjQwLDMxNjQxLDMxNjQyLDMxNjQzLDMxNjQ2''@;'; put 'put ''LDMxNjQ3LDMxNjQ4LDMxNjUxLDMxNjUyLDMxNjUzLDMxNjYyLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY3LDMxNjY5LDMxNjcwLDMxNjcxLDMxNjczLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjc4LDMxNjc5LDMxNjgwLDMxNjgyLDMxNjgzLDMxNjg0LDIyNDY2LDMyODMxLDI2Nzc1LDI0''@;'; put 'put ''MDM3LDI1OTE1LDIxMTUxLDI0Njg1LDQwODU4LDIwMzc5LDM2NTI0LDIwODQ0LDIzNDY3LDI0MzM5LDI0MDQxLDI3NzQyLDI1MzI5LDM2MTI5LDIwODQ5LDM4MDU3LDIxMjQ2LDI3ODA3LDMzNTAzLDI5Mzk5LDIyNDM0LDI2NTAwLDM2MTQxLDIyODE1LDM2NzY0LDMzNzM1LDIxNjUzLDMxNjI5''@;'; put 'put ''LDIwMjcyLDI3ODM3LDIzMzk2LDIyOTkzLDQwNzIzLDIxNDc2LDM0NTA2LDM5NTkyLDM1ODk1LDMyOTI5LDI1OTI1LDM5MDM4LDIyMjY2LDM4NTk5LDIxMDM4LDI5OTE2LDIxMDcyLDIzNTIxLDI1MzQ2LDM1MDc0LDIwMDU0LDI1Mjk2LDI0NjE4LDI2ODc0LDIwODUxLDIzNDQ4LDIwODk2LDM1''@;'; put 'put ''MjY2LDMxNjQ5LDM5MzAyLDMyNTkyLDI0ODE1LDI4NzQ4LDM2MTQzLDIwODA5LDI0MTkxLDM2ODkxLDI5ODA4LDM1MjY4LDIyMzE3LDMwNzg5LDI0NDAyLDQwODYzLDM4Mzk0LDM2NzEyLDM5NzQwLDM1ODA5LDMwMzI4LDI2NjkwLDI2NTg4LDM2MzMwLDM2MTQ5LDIxMDUzLDM2NzQ2LDI4Mzc4''@;'; put 'put ''LDI2ODI5LDM4MTQ5LDM3MTAxLDIyMjY5LDI2NTI0LDM1MDY1LDM2ODA3LDIxNzA0LDMxNjg1LDMxNjg4LDMxNjg5LDMxNjkwLDMxNjkxLDMxNjkzLDMxNjk0LDMxNjk1LDMxNjk2LDMxNjk4LDMxNzAwLDMxNzAxLDMxNzAyLDMxNzAzLDMxNzA0LDMxNzA3LDMxNzA4LDMxNzEwLDMxNzExLDMx''@;'; put 'put ''NzEyLDMxNzE0LDMxNzE1LDMxNzE2LDMxNzE5LDMxNzIwLDMxNzIxLDMxNzIzLDMxNzI0LDMxNzI1LDMxNzI3LDMxNzI4LDMxNzMwLDMxNzMxLDMxNzMyLDMxNzMzLDMxNzM0LDMxNzM2LDMxNzM3LDMxNzM4LDMxNzM5LDMxNzQxLDMxNzQzLDMxNzQ0LDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4''@;'; put 'put ''LDMxNzQ5LDMxNzUwLDMxNzUyLDMxNzUzLDMxNzU0LDMxNzU3LDMxNzU4LDMxNzYwLDMxNzYxLDMxNzYyLDMxNzYzLDMxNzY0LDMxNzY1LDMxNzY3LDMxNzY4LDMxNzY5LDMxNzcwLDMxNzcxLDMxNzcyLDMxNzczLDMxNzc0LDMxNzc2LDMxNzc3LDMxNzc4LDMxNzc5LDMxNzgwLDMxNzgxLDMx''@;'; put 'put ''Nzg0LDMxNzg1LDMxNzg3LDMxNzg4LDMxNzg5LDMxNzkwLDMxNzkxLDMxNzkyLDMxNzkzLDMxNzk0LDMxNzk1LDMxNzk2LDMxNzk3LDMxNzk4LDMxNzk5LDMxODAxLDMxODAyLDMxODAzLDMxODA0LDMxODA1LDMxODA2LDMxODEwLDM5NjA4LDIzNDAxLDI4MDIzLDI3Njg2LDIwMTMzLDIzNDc1''@;'; put 'put ''LDM5NTU5LDM3MjE5LDI1ZTMsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYwOTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcw''@;'; put 'put ''ODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgsMzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgsNDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgs''@;'; put 'put ''MjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4''@;'; put 'put ''OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTksMzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYsMzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMs''@;'; put 'put ''MzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4''@;'; put 'put ''NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAsMzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcsMzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTks''@;'; put 'put ''MzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQzODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3''@;'; put 'put ''MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUsMjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYsMzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgs''@;'; put 'put ''MjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUzODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEy''@;'; put 'put ''MjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMsMjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2NjksMzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIs''@;'; put 'put ''MzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5''@;'; put 'put ''NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODksMzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcsMzE5OTgsMzE5OTksMzJlMywzMjAwMSwzMjAwMiwzMjAwMywzMjAwNCwz''@;'; put 'put ''MjAwNSwzMjAwNiwzMjAwNywzMjAwOCwzMjAwOSwzMjAxMSwzMjAxMiwzMjAxMywzMjAxNCwzMjAxNSwzMjAxNiwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMCwzMjAyMSwzMjAyMiwzMjAyMywzMjAyNCwzMjAyNSwzMjAyNiwzMjAyNywzMjAyOCwzMjAyOSwzMjAzMCwzMjAzMSwzMjAzMywzMjAz''@;'; put 'put ''NSwzMjAzNiwzMjAzNywzMjAzOCwzMjA0MCwzMjA0MSwzMjA0MiwzMjA0NCwzMjA0NSwzMjA0NiwzMjA0OCwzMjA0OSwzMjA1MCwzMjA1MSwzMjA1MiwzMjA1MywzMjA1NCwzMjkwOCwzOTI2OSwzNjg1NywyODYwOCwzNTc0OSw0MDQ4MSwyMzAyMCwzMjQ4OSwzMjUyMSwyMTUxMywyNjQ5Nywy''@;'; put 'put ''Njg0MCwzNjc1MywzMTgyMSwzODU5OCwyMTQ1MCwyNDYxMywzMDE0MiwyNzc2MiwyMTM2MywyMzI0MSwzMjQyMywyNTM4MCwyMDk2MCwzMzAzNCwyNDA0OSwzNDAxNSwyNTIxNiwyMDg2NCwyMzM5NSwyMDIzOCwzMTA4NSwyMTA1OCwyNDc2MCwyNzk4MiwyMzQ5MiwyMzQ5MCwzNTc0NSwzNTc2''@;'; put 'put ''MCwyNjA4MiwyNDUyNCwzODQ2OSwyMjkzMSwzMjQ4NywzMjQyNiwyMjAyNSwyNjU1MSwyMjg0MSwyMDMzOSwyMzQ3OCwyMTE1MiwzMzYyNiwzOTA1MCwzNjE1OCwzMDAwMiwzODA3OCwyMDU1MSwzMTI5MiwyMDIxNSwyNjU1MCwzOTU1MCwyMzIzMywyNzUxNiwzMDQxNywyMjM2MiwyMzU3NCwz''@;'; put 'put ''MTU0NiwzODM4OCwyOTAwNiwyMDg2MCwzMjkzNywzMzM5MiwyMjkwNCwzMjUxNiwzMzU3NSwyNjgxNiwyNjYwNCwzMDg5NywzMDgzOSwyNTMxNSwyNTQ0MSwzMTYxNiwyMDQ2MSwyMTA5OCwyMDk0MywzMzYxNiwyNzA5OSwzNzQ5MiwzNjM0MSwzNjE0NSwzNTI2NSwzODE5MCwzMTY2MSwyMDIx''@;'; put 'put ''NCwzMjA1NSwzMjA1NiwzMjA1NywzMjA1OCwzMjA1OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2MywzMjA2NCwzMjA2NSwzMjA2NiwzMjA2NywzMjA2OCwzMjA2OSwzMjA3MCwzMjA3MSwzMjA3MiwzMjA3MywzMjA3NCwzMjA3NSwzMjA3NiwzMjA3NywzMjA3OCwzMjA3OSwzMjA4MCwzMjA4MSwz''@;'; put 'put ''MjA4MiwzMjA4MywzMjA4NCwzMjA4NSwzMjA4NiwzMjA4NywzMjA4OCwzMjA4OSwzMjA5MCwzMjA5MSwzMjA5MiwzMjA5MywzMjA5NCwzMjA5NSwzMjA5NiwzMjA5NywzMjA5OCwzMjA5OSwzMjEwMCwzMjEwMSwzMjEwMiwzMjEwMywzMjEwNCwzMjEwNSwzMjEwNiwzMjEwNywzMjEwOCwzMjEw''@;'; put 'put ''OSwzMjExMSwzMjExMiwzMjExMywzMjExNCwzMjExNSwzMjExNiwzMjExNywzMjExOCwzMjEyMCwzMjEyMSwzMjEyMiwzMjEyMywzMjEyNCwzMjEyNSwzMjEyNiwzMjEyNywzMjEyOCwzMjEyOSwzMjEzMCwzMjEzMSwzMjEzMiwzMjEzMywzMjEzNCwzMjEzNSwzMjEzNiwzMjEzNywzMjEzOCwz''@;'; put 'put ''MjEzOSwzMjE0MCwzMjE0MSwzMjE0MiwzMjE0MywzMjE0NCwzMjE0NSwzMjE0NiwzMjE0NywzMjE0OCwzMjE0OSwzMjE1MCwzMjE1MSwzMjE1MiwyMDU4MSwzMzMyOCwyMTA3MywzOTI3OSwyODE3NiwyODI5MywyODA3MSwyNDMxNCwyMDcyNSwyMzAwNCwyMzU1OCwyNzk3NCwyNzc0MywzMDA4''@;'; put 'put ''NiwzMzkzMSwyNjcyOCwyMjg3MCwzNTc2MiwyMTI4MCwzNzIzMywzODQ3NywzNDEyMSwyNjg5OCwzMDk3NywyODk2NiwzMzAxNCwyMDEzMiwzNzA2NiwyNzk3NSwzOTU1NiwyMzA0NywyMjIwNCwyNTYwNSwzODEyOCwzMDY5OSwyMDM4OSwzMzA1MCwyOTQwOSwzNTI4MiwzOTI5MCwzMjU2NCwz''@;'; put 'put ''MjQ3OCwyMTExOSwyNTk0NSwzNzIzNywzNjczNSwzNjczOSwyMTQ4MywzMTM4MiwyNTU4MSwyNTUwOSwzMDM0MiwzMTIyNCwzNDkwMywzODQ1NCwyNTEzMCwyMTE2MywzMzQxMCwyNjcwOCwyNjQ4MCwyNTQ2MywzMDU3MSwzMTQ2OSwyNzkwNSwzMjQ2NywzNTI5OSwyMjk5MiwyNTEwNiwzNDI0''@;'; put 'put ''OSwzMzQ0NSwzMDAyOCwyMDUxMSwyMDE3MSwzMDExNywzNTgxOSwyMzYyNiwyNDA2MiwzMTU2MywyNjAyMCwzNzMyOSwyMDE3MCwyNzk0MSwzNTE2NywzMjAzOSwzODE4MiwyMDE2NSwzNTg4MCwzNjgyNywzODc3MSwyNjE4NywzMTEwNSwzNjgxNywyODkwOCwyODAyNCwzMjE1MywzMjE1NCwz''@;'; put 'put ''MjE1NSwzMjE1NiwzMjE1NywzMjE1OCwzMjE1OSwzMjE2MCwzMjE2MSwzMjE2MiwzMjE2MywzMjE2NCwzMjE2NSwzMjE2NywzMjE2OCwzMjE2OSwzMjE3MCwzMjE3MSwzMjE3MiwzMjE3MywzMjE3NSwzMjE3NiwzMjE3NywzMjE3OCwzMjE3OSwzMjE4MCwzMjE4MSwzMjE4MiwzMjE4MywzMjE4''@;'; put 'put ''NCwzMjE4NSwzMjE4NiwzMjE4NywzMjE4OCwzMjE4OSwzMjE5MCwzMjE5MSwzMjE5MiwzMjE5MywzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjE5OSwzMjIwMCwzMjIwMSwzMjIwMiwzMjIwMywzMjIwNCwzMjIwNSwzMjIwNiwzMjIwNywzMjIwOCwzMjIwOSwzMjIxMCwzMjIxMSwz''@;'; put 'put ''MjIxMiwzMjIxMywzMjIxNCwzMjIxNSwzMjIxNiwzMjIxNywzMjIxOCwzMjIxOSwzMjIyMCwzMjIyMSwzMjIyMiwzMjIyMywzMjIyNCwzMjIyNSwzMjIyNiwzMjIyNywzMjIyOCwzMjIyOSwzMjIzMCwzMjIzMSwzMjIzMiwzMjIzMywzMjIzNCwzMjIzNSwzMjIzNiwzMjIzNywzMjIzOCwzMjIz''@;'; put 'put ''OSwzMjI0MCwzMjI0MSwzMjI0MiwzMjI0MywzMjI0NCwzMjI0NSwzMjI0NiwzMjI0NywzMjI0OCwzMjI0OSwzMjI1MCwyMzYxMywyMTE3MCwzMzYwNiwyMDgzNCwzMzU1MCwzMDU1NSwyNjIzMCw0MDEyMCwyMDE0MCwyNDc3OCwzMTkzNCwzMTkyMywzMjQ2MywyMDExNywzNTY4NiwyNjIyMywz''@;'; put 'put ''OTA0OCwzODc0NSwyMjY1OSwyNTk2NCwzODIzNiwyNDQ1MiwzMDE1MywzODc0MiwzMTQ1NSwzMTQ1NCwyMDkyOCwyODg0NywzMTM4NCwyNTU3OCwzMTM1MCwzMjQxNiwyOTU5MCwzODg5MywyMDAzNywyODc5MiwyMDA2MSwzNzIwMiwyMTQxNywyNTkzNywyNjA4NywzMzI3NiwzMzI4NSwyMTY0''@;'; put 'put ''NiwyMzYwMSwzMDEwNiwzODgxNiwyNTMwNCwyOTQwMSwzMDE0MSwyMzYyMSwzOTU0NSwzMzczOCwyMzYxNiwyMTYzMiwzMDY5NywyMDAzMCwyNzgyMiwzMjg1OCwyNTI5OCwyNTQ1NCwyNDA0MCwyMDg1NSwzNjMxNywzNjM4MiwzODE5MSwyMDQ2NSwyMTQ3NywyNDgwNywyODg0NCwyMTA5NSwy''@;'; put 'put ''NTQyNCw0MDUxNSwyMzA3MSwyMDUxOCwzMDUxOSwyMTM2NywzMjQ4MiwyNTczMywyNTg5OSwyNTIyNSwyNTQ5NiwyMDUwMCwyOTIzNywzNTI3MywyMDkxNSwzNTc3NiwzMjQ3NywyMjM0MywzMzc0MCwzODA1NSwyMDg5MSwyMTUzMSwyMzgwMywzMjI1MSwzMjI1MiwzMjI1MywzMjI1NCwzMjI1''@;'; put 'put ''NSwzMjI1NiwzMjI1NywzMjI1OCwzMjI1OSwzMjI2MCwzMjI2MSwzMjI2MiwzMjI2MywzMjI2NCwzMjI2NSwzMjI2NiwzMjI2NywzMjI2OCwzMjI2OSwzMjI3MCwzMjI3MSwzMjI3MiwzMjI3MywzMjI3NCwzMjI3NSwzMjI3NiwzMjI3NywzMjI3OCwzMjI3OSwzMjI4MCwzMjI4MSwzMjI4Miwz''@;'; put 'put ''MjI4MywzMjI4NCwzMjI4NSwzMjI4NiwzMjI4NywzMjI4OCwzMjI4OSwzMjI5MCwzMjI5MSwzMjI5MiwzMjI5MywzMjI5NCwzMjI5NSwzMjI5NiwzMjI5NywzMjI5OCwzMjI5OSwzMjMwMCwzMjMwMSwzMjMwMiwzMjMwMywzMjMwNCwzMjMwNSwzMjMwNiwzMjMwNywzMjMwOCwzMjMwOSwzMjMx''@;'; put 'put ''MCwzMjMxMSwzMjMxMiwzMjMxMywzMjMxNCwzMjMxNiwzMjMxNywzMjMxOCwzMjMxOSwzMjMyMCwzMjMyMiwzMjMyMywzMjMyNCwzMjMyNSwzMjMyNiwzMjMyOCwzMjMyOSwzMjMzMCwzMjMzMSwzMjMzMiwzMjMzMywzMjMzNCwzMjMzNSwzMjMzNiwzMjMzNywzMjMzOCwzMjMzOSwzMjM0MCwz''@;'; put 'put ''MjM0MSwzMjM0MiwzMjM0MywzMjM0NCwzMjM0NSwzMjM0NiwzMjM0NywzMjM0OCwzMjM0OSwyMDQyNiwzMTQ1OSwyNzk5NCwzNzA4OSwzOTU2NywyMTg4OCwyMTY1NCwyMTM0NSwyMTY3OSwyNDMyMCwyNTU3NywyNjk5OSwyMDk3NSwyNDkzNiwyMTAwMiwyMjU3MCwyMTIwOCwyMjM1MCwzMDcz''@;'; put 'put ''MywzMDQ3NSwyNDI0NywyNDk1MSwzMTk2OCwyNTE3OSwyNTIzOSwyMDEzMCwyODgyMSwzMjc3MSwyNTMzNSwyODkwMCwzODc1MiwyMjM5MSwzMzQ5OSwyNjYwNywyNjg2OSwzMDkzMywzOTA2MywzMTE4NSwyMjc3MSwyMTY4MywyMTQ4NywyODIxMiwyMDgxMSwyMTA1MSwyMzQ1OCwzNTgzOCwz''@;'; put 'put ''Mjk0MywyMTgyNywyMjQzOCwyNDY5MSwyMjM1MywyMTU0OSwzMTM1NCwyNDY1NiwyMzM4MCwyNTUxMSwyNTI0OCwyMTQ3NSwyNTE4NywyMzQ5NSwyNjU0MywyMTc0MSwzMTM5MSwzMzUxMCwzNzIzOSwyNDIxMSwzNTA0NCwyMjg0MCwyMjQ0NiwyNTM1OCwzNjMyOCwzMzAwNywyMjM1OSwzMTYw''@;'; put 'put ''NywyMDM5MywyNDU1NSwyMzQ4NSwyNzQ1NCwyMTI4MSwzMTU2OCwyOTM3OCwyNjY5NCwzMDcxOSwzMDUxOCwyNjEwMywyMDkxNywyMDExMSwzMDQyMCwyMzc0MywzMTM5NywzMzkwOSwyMjg2MiwzOTc0NSwyMDYwOCwzMjM1MCwzMjM1MSwzMjM1MiwzMjM1MywzMjM1NCwzMjM1NSwzMjM1Niwz''@;'; put 'put ''MjM1NywzMjM1OCwzMjM1OSwzMjM2MCwzMjM2MSwzMjM2MiwzMjM2MywzMjM2NCwzMjM2NSwzMjM2NiwzMjM2NywzMjM2OCwzMjM2OSwzMjM3MCwzMjM3MSwzMjM3MiwzMjM3MywzMjM3NCwzMjM3NSwzMjM3NiwzMjM3NywzMjM3OCwzMjM3OSwzMjM4MCwzMjM4MSwzMjM4MiwzMjM4MywzMjM4''@;'; put 'put ''NCwzMjM4NSwzMjM4NywzMjM4OCwzMjM4OSwzMjM5MCwzMjM5MSwzMjM5MiwzMjM5MywzMjM5NCwzMjM5NSwzMjM5NiwzMjM5NywzMjM5OCwzMjM5OSwzMjQwMCwzMjQwMSwzMjQwMiwzMjQwMywzMjQwNCwzMjQwNSwzMjQwNiwzMjQwNywzMjQwOCwzMjQwOSwzMjQxMCwzMjQxMiwzMjQxMywz''@;'; put 'put ''MjQxNCwzMjQzMCwzMjQzNiwzMjQ0MywzMjQ0NCwzMjQ3MCwzMjQ4NCwzMjQ5MiwzMjUwNSwzMjUyMiwzMjUyOCwzMjU0MiwzMjU2NywzMjU2OSwzMjU3MSwzMjU3MiwzMjU3MywzMjU3NCwzMjU3NSwzMjU3NiwzMjU3NywzMjU3OSwzMjU4MiwzMjU4MywzMjU4NCwzMjU4NSwzMjU4NiwzMjU4''@;'; put 'put ''NywzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MSwzMjU5NCwzMjU5NSwzOTMwNCwyNDg3MSwyODI5MSwyMjM3MiwyNjExOCwyNTQxNCwyMjI1NiwyNTMyNCwyNTE5MywyNDI3NSwzODQyMCwyMjQwMywyNTI4OSwyMTg5NSwzNDU5MywzMzA5OCwzNjc3MSwyMTg2MiwzMzcxMywyNjQ2OSwzNjE4Miwz''@;'; put 'put ''NDAxMywyMzE0NiwyNjYzOSwyNTMxOCwzMTcyNiwzODQxNywyMDg0OCwyODU3MiwzNTg4OCwyNTU5NywzNTI3MiwyNTA0MiwzMjUxOCwyODg2NiwyODM4OSwyOTcwMSwyNzAyOCwyOTQzNiwyNDI2NiwzNzA3MCwyNjM5MSwyODAxMCwyNTQzOCwyMTE3MSwyOTI4MiwzMjc2OSwyMDMzMiwyMzAx''@;'; put 'put ''MywzNzIyNiwyODg4OSwyODA2MSwyMTIwMiwyMDA0OCwzODY0NywzODI1MywzNDE3NCwzMDkyMiwzMjA0NywyMDc2OSwyMjQxOCwyNTc5NCwzMjkwNywzMTg2NywyNzg4MiwyNjg2NSwyNjk3NCwyMDkxOSwyMTQwMCwyNjc5MiwyOTMxMyw0MDY1NCwzMTcyOSwyOTQzMiwzMTE2MywyODQzNSwy''@;'; put 'put ''OTcwMiwyNjQ0NiwzNzMyNCw0MDEwMCwzMTAzNiwzMzY3MywzMzYyMCwyMTUxOSwyNjY0NywyMDAyOSwyMTM4NSwyMTE2OSwzMDc4MiwyMTM4MiwyMTAzMywyMDYxNiwyMDM2MywyMDQzMiwzMjU5OCwzMjYwMSwzMjYwMywzMjYwNCwzMjYwNSwzMjYwNiwzMjYwOCwzMjYxMSwzMjYxMiwzMjYx''@;'; put 'put ''MywzMjYxNCwzMjYxNSwzMjYxOSwzMjYyMCwzMjYyMSwzMjYyMywzMjYyNCwzMjYyNywzMjYyOSwzMjYzMCwzMjYzMSwzMjYzMiwzMjYzNCwzMjYzNSwzMjYzNiwzMjYzNywzMjYzOSwzMjY0MCwzMjY0MiwzMjY0MywzMjY0NCwzMjY0NSwzMjY0NiwzMjY0NywzMjY0OCwzMjY0OSwzMjY1MSwz''@;'; put 'put ''MjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY1OCwzMjY1OSwzMjY2MSwzMjY2MiwzMjY2MywzMjY2NCwzMjY2NSwzMjY2NywzMjY2OCwzMjY3MiwzMjY3NCwzMjY3NSwzMjY3NywzMjY3OCwzMjY4MCwzMjY4MSwzMjY4MiwzMjY4MywzMjY4NCwzMjY4NSwzMjY4NiwzMjY4OSwzMjY5MSwzMjY5''@;'; put 'put ''MiwzMjY5MywzMjY5NCwzMjY5NSwzMjY5OCwzMjY5OSwzMjcwMiwzMjcwNCwzMjcwNiwzMjcwNywzMjcwOCwzMjcxMCwzMjcxMSwzMjcxMiwzMjcxMywzMjcxNSwzMjcxNywzMjcxOSwzMjcyMCwzMjcyMSwzMjcyMiwzMjcyMywzMjcyNiwzMjcyNywzMjcyOSwzMjczMCwzMjczMSwzMjczMiwz''@;'; put 'put ''MjczMywzMjczNCwzMjczOCwzMjczOSwzMDE3OCwzMTQzNSwzMTg5MCwyNzgxMywzODU4MiwyMTE0NywyOTgyNywyMTczNywyMDQ1NywzMjg1MiwzMzcxNCwzNjgzMCwzODI1NiwyNDI2NSwyNDYwNCwyODA2MywyNDA4OCwyNTk0NywzMzA4MCwzODE0MiwyNDY1MSwyODg2MCwzMjQ1MSwzMTkx''@;'; put 'put ''OCwyMDkzNywyNjc1MywzMTkyMSwzMzM5MSwyMDAwNCwzNjc0MiwzNzMyNywyNjIzOCwyMDE0MiwzNTg0NSwyNTc2OSwzMjg0MiwyMDY5OCwzMDEwMywyOTEzNCwyMzUyNSwzNjc5NywyODUxOCwyMDEwMiwyNTczMCwzODI0MywyNDI3OCwyNjAwOSwyMTAxNSwzNTAxMCwyODg3MiwyMTE1NSwy''@;'; put 'put ''OTQ1NCwyOTc0NywyNjUxOSwzMDk2NywzODY3OCwyMDAyMCwzNzA1MSw0MDE1OCwyODEwNywyMDk1NSwzNjE2MSwyMTUzMywyNTI5NCwyOTYxOCwzMzc3NywzODY0Niw0MDgzNiwzODA4MywyMDI3OCwzMjY2NiwyMDk0MCwyODc4OSwzODUxNywyMzcyNSwzOTA0NiwyMTQ3OCwyMDE5NiwyODMx''@;'; put 'put ''NiwyOTcwNSwyNzA2MCwzMDgyNywzOTMxMSwzMDA0MSwyMTAxNiwzMDI0NCwyNzk2OSwyNjYxMSwyMDg0NSw0MDg1NywzMjg0MywyMTY1NywzMTU0OCwzMTQyMywzMjc0MCwzMjc0MywzMjc0NCwzMjc0NiwzMjc0NywzMjc0OCwzMjc0OSwzMjc1MSwzMjc1NCwzMjc1NiwzMjc1NywzMjc1OCwz''@;'; put 'put ''Mjc1OSwzMjc2MCwzMjc2MSwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3MCwzMjc3NSwzMjc3NiwzMjc3NywzMjc3OCwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc5NCwzMjc5NSwzMjc5NywzMjc5OCwzMjc5OSwzMjgwMSwzMjgwMywzMjgwNCwzMjgxMSwzMjgxMiwzMjgxMywzMjgx''@;'; put 'put ''NCwzMjgxNSwzMjgxNiwzMjgxOCwzMjgyMCwzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzMywzMjgzNiwzMjgzNywzMjgzOSwzMjg0MCwzMjg0MSwzMjg0NiwzMjg0NywzMjg0OCwzMjg0OSwzMjg1MSwzMjg1MywzMjg1NCwzMjg1NSwzMjg1NywzMjg1OSwzMjg2MCwzMjg2MSwz''@;'; put 'put ''Mjg2MiwzMjg2MywzMjg2NCwzMjg2NSwzMjg2NiwzMjg2NywzMjg2OCwzMjg2OSwzMjg3MCwzMjg3MSwzMjg3MiwzMjg3NSwzMjg3NiwzMjg3NywzMjg3OCwzMjg3OSwzMjg4MCwzMjg4MiwzMjg4MywzMjg4NCwzMjg4NSwzMjg4NiwzMjg4NywzMjg4OCwzMjg4OSwzMjg5MCwzMjg5MSwzMjg5''@;'; put 'put ''MiwzMjg5MywzODUzNCwyMjQwNCwyNTMxNCwzODQ3MSwyNzAwNCwyMzA0NCwyNTYwMiwzMTY5OSwyODQzMSwzODQ3NSwzMzQ0NiwyMTM0NiwzOTA0NSwyNDIwOCwyODgwOSwyNTUyMywyMTM0OCwzNDM4Myw0MDA2NSw0MDU5NSwzMDg2MCwzODcwNiwzNjMzNSwzNjE2Miw0MDU3NSwyODUxMCwz''@;'; put 'put ''MTEwOCwyNDQwNSwzODQ3MCwyNTEzNCwzOTU0MCwyMTUyNSwzODEwOSwyMDM4NywyNjA1MywyMzY1MywyMzY0OSwzMjUzMywzNDM4NSwyNzY5NSwyNDQ1OSwyOTU3NSwyODM4OCwzMjUxMSwyMzc4MiwyNTM3MSwyMzQwMiwyODM5MCwyMTM2NSwyMDA4MSwyNTUwNCwzMDA1MywyNTI0OSwzNjcx''@;'; put 'put ''OCwyMDI2MiwyMDE3NywyNzgxNCwzMjQzOCwzNTc3MCwzMzgyMSwzNDc0NiwzMjU5OSwzNjkyMywzODE3OSwzMTY1NywzOTU4NSwzNTA2NCwzMzg1MywyNzkzMSwzOTU1OCwzMjQ3NiwyMjkyMCw0MDYzNSwyOTU5NSwzMDcyMSwzNDQzNCwzOTUzMiwzOTU1NCwyMjA0MywyMTUyNywyMjQ3NSwy''@;'; put 'put ''MDA4MCw0MDYxNCwyMTMzNCwzNjgwOCwzMzAzMywzMDYxMCwzOTMxNCwzNDU0MiwyODM4NSwzNDA2NywyNjM2NCwyNDkzMCwyODQ1OSwzMjg5NCwzMjg5NywzMjg5OCwzMjkwMSwzMjkwNCwzMjkwNiwzMjkwOSwzMjkxMCwzMjkxMSwzMjkxMiwzMjkxMywzMjkxNCwzMjkxNiwzMjkxNywzMjkx''@;'; put 'put ''OSwzMjkyMSwzMjkyNiwzMjkzMSwzMjkzNCwzMjkzNSwzMjkzNiwzMjk0MCwzMjk0NCwzMjk0NywzMjk0OSwzMjk1MCwzMjk1MiwzMjk1MywzMjk1NSwzMjk2NSwzMjk2NywzMjk2OCwzMjk2OSwzMjk3MCwzMjk3MSwzMjk3NSwzMjk3NiwzMjk3NywzMjk3OCwzMjk3OSwzMjk4MCwzMjk4MSwz''@;'; put 'put ''Mjk4NCwzMjk5MSwzMjk5MiwzMjk5NCwzMjk5NSwzMjk5OCwzMzAwNiwzMzAxMywzMzAxNSwzMzAxNywzMzAxOSwzMzAyMiwzMzAyMywzMzAyNCwzMzAyNSwzMzAyNywzMzAyOCwzMzAyOSwzMzAzMSwzMzAzMiwzMzAzNSwzMzAzNiwzMzA0NSwzMzA0NywzMzA0OSwzMzA1MSwzMzA1MiwzMzA1''@;'; put 'put ''MywzMzA1NSwzMzA1NiwzMzA1NywzMzA1OCwzMzA1OSwzMzA2MCwzMzA2MSwzMzA2MiwzMzA2MywzMzA2NCwzMzA2NSwzMzA2NiwzMzA2NywzMzA2OSwzMzA3MCwzMzA3MiwzMzA3NSwzMzA3NiwzMzA3NywzMzA3OSwzMzA4MSwzMzA4MiwzMzA4MywzMzA4NCwzMzA4NSwzMzA4NywzNTg4MSwz''@;'; put 'put ''MzQyNiwzMzU3OSwzMDQ1MCwyNzY2NywyNDUzNywzMzcyNSwyOTQ4MywzMzU0MSwzODE3MCwyNzYxMSwzMDY4MywzODA4NiwyMTM1OSwzMzUzOCwyMDg4MiwyNDEyNSwzNTk4MCwzNjE1MiwyMDA0MCwyOTYxMSwyNjUyMiwyNjc1NywzNzIzOCwzODY2NSwyOTAyOCwyNzgwOSwzMDQ3MywyMzE4''@;'; put 'put ''NiwzODIwOSwyNzU5OSwzMjY1NCwyNjE1MSwyMzUwNCwyMjk2OSwyMzE5NCwzODM3NiwzODM5MSwyMDIwNCwzMzgwNCwzMzk0NSwyNzMwOCwzMDQzMSwzODE5MiwyOTQ2NywyNjc5MCwyMzM5MSwzMDUxMSwzNzI3NCwzODc1MywzMTk2NCwzNjg1NSwzNTg2OCwyNDM1NywzMTg1OSwzMTE5Miwz''@;'; put 'put ''NTI2OSwyNzg1MiwzNDU4OCwyMzQ5NCwyNDEzMCwyNjgyNSwzMDQ5NiwzMjUwMSwyMDg4NSwyMDgxMywyMTE5MywyMzA4MSwzMjUxNywzODc1NCwzMzQ5NSwyNTU1MSwzMDU5NiwzNDI1NiwzMTE4NiwyODIxOCwyNDIxNywyMjkzNywzNDA2NSwyODc4MSwyNzY2NSwyNTI3OSwzMDM5OSwyNTkz''@;'; put 'put ''NSwyNDc1MSwzODM5NywyNjEyNiwzNDcxOSw0MDQ4MywzODEyNSwyMTUxNywyMTYyOSwzNTg4NCwyNTcyMCwzMzA4OCwzMzA4OSwzMzA5MCwzMzA5MSwzMzA5MiwzMzA5MywzMzA5NSwzMzA5NywzMzEwMSwzMzEwMiwzMzEwMywzMzEwNiwzMzExMCwzMzExMSwzMzExMiwzMzExNSwzMzExNiwz''@;'; put 'put ''MzExNywzMzExOCwzMzExOSwzMzEyMSwzMzEyMiwzMzEyMywzMzEyNCwzMzEyNiwzMzEyOCwzMzEzMCwzMzEzMSwzMzEzMiwzMzEzNSwzMzEzOCwzMzEzOSwzMzE0MSwzMzE0MiwzMzE0MywzMzE0NCwzMzE1MywzMzE1NSwzMzE1NiwzMzE1NywzMzE1OCwzMzE1OSwzMzE2MSwzMzE2MywzMzE2''@;'; put 'put ''NCwzMzE2NSwzMzE2NiwzMzE2OCwzMzE3MCwzMzE3MSwzMzE3MiwzMzE3MywzMzE3NCwzMzE3NSwzMzE3NywzMzE3OCwzMzE4MiwzMzE4MywzMzE4NCwzMzE4NSwzMzE4NiwzMzE4OCwzMzE4OSwzMzE5MSwzMzE5MywzMzE5NSwzMzE5NiwzMzE5NywzMzE5OCwzMzE5OSwzMzIwMCwzMzIwMSwz''@;'; put 'put ''MzIwMiwzMzIwNCwzMzIwNSwzMzIwNiwzMzIwNywzMzIwOCwzMzIwOSwzMzIxMiwzMzIxMywzMzIxNCwzMzIxNSwzMzIyMCwzMzIyMSwzMzIyMywzMzIyNCwzMzIyNSwzMzIyNywzMzIyOSwzMzIzMCwzMzIzMSwzMzIzMiwzMzIzMywzMzIzNCwzMzIzNSwyNTcyMSwzNDMyMSwyNzE2OSwzMzE4''@;'; put 'put ''MCwzMDk1MiwyNTcwNSwzOTc2NCwyNTI3MywyNjQxMSwzMzcwNywyMjY5Niw0MDY2NCwyNzgxOSwyODQ0OCwyMzUxOCwzODQ3NiwzNTg1MSwyOTI3OSwyNjU3NiwyNTI4NywyOTI4MSwyMDEzNywyMjk4MiwyNzU5NywyMjY3NSwyNjI4NiwyNDE0OSwyMTIxNSwyNDkxNywyNjQwOCwzMDQ0Niwz''@;'; put 'put ''MDU2NiwyOTI4NywzMTMwMiwyNTM0MywyMTczOCwyMTU4NCwzODA0OCwzNzAyNywyMzA2OCwzMjQzNSwyNzY3MCwyMDAzNSwyMjkwMiwzMjc4NCwyMjg1NiwyMTMzNSwzMDAwNywzODU5MCwyMjIxOCwyNTM3NiwzMzA0MSwyNDcwMCwzODM5MywyODExOCwyMTYwMiwzOTI5NywyMDg2OSwyMzI3''@;'; put 'put ''MywzMzAyMSwyMjk1OCwzODY3NSwyMDUyMiwyNzg3NywyMzYxMiwyNTMxMSwyMDMyMCwyMTMxMSwzMzE0NywzNjg3MCwyODM0NiwzNDA5MSwyNTI4OCwyNDE4MCwzMDkxMCwyNTc4MSwyNTQ2NywyNDU2NSwyMzA2NCwzNzI0Nyw0MDQ3OSwyMzYxNSwyNTQyMywzMjgzNCwyMzQyMSwyMTg3MCwz''@;'; put 'put ''ODIxOCwzODIyMSwyODAzNywyNDc0NCwyNjU5MiwyOTQwNiwyMDk1NywyMzQyNSwzMzIzNiwzMzIzNywzMzIzOCwzMzIzOSwzMzI0MCwzMzI0MSwzMzI0MiwzMzI0MywzMzI0NCwzMzI0NSwzMzI0NiwzMzI0NywzMzI0OCwzMzI0OSwzMzI1MCwzMzI1MiwzMzI1MywzMzI1NCwzMzI1NiwzMzI1''@;'; put 'put ''NywzMzI1OSwzMzI2MiwzMzI2MywzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MSwzMzI3MiwzMzI3MywzMzI3NCwzMzI3NywzMzI3OSwzMzI4MywzMzI4NywzMzI4OCwzMzI4OSwzMzI5MCwzMzI5MSwzMzI5NCwzMzI5NSwzMzI5NywzMzI5OSwzMzMwMSwzMzMwMiwzMzMwMywz''@;'; put 'put ''MzMwNCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMiwzMzMxNiwzMzMxNywzMzMxOCwzMzMxOSwzMzMyMSwzMzMyNiwzMzMzMCwzMzMzOCwzMzM0MCwzMzM0MSwzMzM0MywzMzM0NCwzMzM0NSwzMzM0NiwzMzM0NywzMzM0OSwzMzM1MCwzMzM1MiwzMzM1NCwzMzM1NiwzMzM1NywzMzM1OCwzMzM2''@;'; put 'put ''MCwzMzM2MSwzMzM2MiwzMzM2MywzMzM2NCwzMzM2NSwzMzM2NiwzMzM2NywzMzM2OSwzMzM3MSwzMzM3MiwzMzM3MywzMzM3NCwzMzM3NiwzMzM3NywzMzM3OCwzMzM3OSwzMzM4MCwzMzM4MSwzMzM4MiwzMzM4MywzMzM4NSwyNTMxOSwyNzg3MCwyOTI3NSwyNTE5NywzODA2MiwzMjQ0NSwz''@;'; put 'put ''MzA0MywyNzk4NywyMDg5MiwyNDMyNCwyMjkwMCwyMTE2MiwyNDU5NCwyMjg5OSwyNjI2MiwzNDM4NCwzMDExMSwyNTM4NiwyNTA2MiwzMTk4MywzNTgzNCwyMTczNCwyNzQzMSw0MDQ4NSwyNzU3MiwzNDI2MSwyMTU4OSwyMDU5OCwyNzgxMiwyMTg2NiwzNjI3NiwyOTIyOCwyNDA4NSwyNDU5''@;'; put 'put ''NywyOTc1MCwyNTI5MywyNTQ5MCwyOTI2MCwyNDQ3MiwyODIyNywyNzk2NiwyNTg1NiwyODUwNCwzMDQyNCwzMDkyOCwzMDQ2MCwzMDAzNiwyMTAyOCwyMTQ2NywyMDA1MSwyNDIyMiwyNjA0OSwzMjgxMCwzMjk4MiwyNTI0MywyMTYzOCwyMTAzMiwyODg0NiwzNDk1NywzNjMwNSwyNzg3Mywy''@;'; put 'put ''MTYyNCwzMjk4NiwyMjUyMSwzNTA2MCwzNjE4MCwzODUwNiwzNzE5NywyMDMyOSwyNzgwMywyMTk0MywzMDQwNiwzMDc2OCwyNTI1NiwyODkyMSwyODU1OCwyNDQyOSwzNDAyOCwyNjg0MiwzMDg0NCwzMTczNSwzMzE5MiwyNjM3OSw0MDUyNywyNTQ0NywzMDg5NiwyMjM4MywzMDczOCwzODcx''@;'; put 'put ''MywyNTIwOSwyNTI1OSwyMTEyOCwyOTc0OSwyNzYwNywzMzM4NiwzMzM4NywzMzM4OCwzMzM4OSwzMzM5MywzMzM5NywzMzM5OCwzMzM5OSwzMzQwMCwzMzQwMywzMzQwNCwzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMywzMzQxNCwzMzQxNSwzMzQxNywzMzQyMCwzMzQyNCwzMzQyNywzMzQyOCwz''@;'; put 'put ''MzQyOSwzMzQzMCwzMzQzNCwzMzQzNSwzMzQzOCwzMzQ0MCwzMzQ0MiwzMzQ0MywzMzQ0NywzMzQ1OCwzMzQ2MSwzMzQ2MiwzMzQ2NiwzMzQ2NywzMzQ2OCwzMzQ3MSwzMzQ3MiwzMzQ3NCwzMzQ3NSwzMzQ3NywzMzQ3OCwzMzQ4MSwzMzQ4OCwzMzQ5NCwzMzQ5NywzMzQ5OCwzMzUwMSwzMzUw''@;'; put 'put ''NiwzMzUxMSwzMzUxMiwzMzUxMywzMzUxNCwzMzUxNiwzMzUxNywzMzUxOCwzMzUyMCwzMzUyMiwzMzUyMywzMzUyNSwzMzUyNiwzMzUyOCwzMzUzMCwzMzUzMiwzMzUzMywzMzUzNCwzMzUzNSwzMzUzNiwzMzU0NiwzMzU0NywzMzU0OSwzMzU1MiwzMzU1NCwzMzU1NSwzMzU1OCwzMzU2MCwz''@;'; put 'put ''MzU2MSwzMzU2NSwzMzU2NiwzMzU2NywzMzU2OCwzMzU2OSwzMzU3MCwzMzU3MSwzMzU3MiwzMzU3MywzMzU3NCwzMzU3NywzMzU3OCwzMzU4MiwzMzU4NCwzMzU4NiwzMzU5MSwzMzU5NSwzMzU5NywyMTg2MCwzMzA4NiwzMDEzMCwzMDM4MiwyMTMwNSwzMDE3NCwyMDczMSwyMzYxNywzNTY5''@;'; put 'put ''MiwzMTY4NywyMDU1OSwyOTI1NSwzOTU3NSwzOTEyOCwyODQxOCwyOTkyMiwzMTA4MCwyNTczNSwzMDYyOSwyNTM0MCwzOTA1NywzNjEzOSwyMTY5NywzMjg1NiwyMDA1MCwyMjM3OCwzMzUyOSwzMzgwNSwyNDE3OSwyMDk3MywyOTk0MiwzNTc4MCwyMzYzMSwyMjM2OSwyNzkwMCwzOTA0Nywy''@;'; put 'put ''MzExMCwzMDc3MiwzOTc0OCwzNjg0MywzMTg5MywyMTA3OCwyNTE2OSwzODEzOCwyMDE2NiwzMzY3MCwzMzg4OSwzMzc2OSwzMzk3MCwyMjQ4NCwyNjQyMCwyMjI3NSwyNjIyMiwyODAwNiwzNTg4OSwyNjMzMywyODY4OSwyNjM5OSwyNzQ1MCwyNjY0NiwyNTExNCwyMjk3MSwxOTk3MSwyMDkz''@;'; put 'put ''MiwyODQyMiwyNjU3OCwyNzc5MSwyMDg1NCwyNjgyNywyMjg1NSwyNzQ5NSwzMDA1NCwyMzgyMiwzMzA0MCw0MDc4NCwyNjA3MSwzMTA0OCwzMTA0MSwzOTU2OSwzNjIxNSwyMzY4MiwyMDA2MiwyMDIyNSwyMTU1MSwyMjg2NSwzMDczMiwyMjEyMCwyNzY2OCwzNjgwNCwyNDMyMywyNzc3Mywy''@;'; put 'put ''Nzg3NSwzNTc1NSwyNTQ4OCwzMzU5OCwzMzU5OSwzMzYwMSwzMzYwMiwzMzYwNCwzMzYwNSwzMzYwOCwzMzYxMCwzMzYxMSwzMzYxMiwzMzYxMywzMzYxNCwzMzYxOSwzMzYyMSwzMzYyMiwzMzYyMywzMzYyNCwzMzYyNSwzMzYyOSwzMzYzNCwzMzY0OCwzMzY0OSwzMzY1MCwzMzY1MSwzMzY1''@;'; put 'put ''MiwzMzY1MywzMzY1NCwzMzY1NywzMzY1OCwzMzY2MiwzMzY2MywzMzY2NCwzMzY2NSwzMzY2NiwzMzY2NywzMzY2OCwzMzY3MSwzMzY3MiwzMzY3NCwzMzY3NSwzMzY3NiwzMzY3NywzMzY3OSwzMzY4MCwzMzY4MSwzMzY4NCwzMzY4NSwzMzY4NiwzMzY4NywzMzY4OSwzMzY5MCwzMzY5Mywz''@;'; put 'put ''MzY5NSwzMzY5NywzMzY5OCwzMzY5OSwzMzcwMCwzMzcwMSwzMzcwMiwzMzcwMywzMzcwOCwzMzcwOSwzMzcxMCwzMzcxMSwzMzcxNywzMzcyMywzMzcyNiwzMzcyNywzMzczMCwzMzczMSwzMzczMiwzMzczNCwzMzczNiwzMzczNywzMzczOSwzMzc0MSwzMzc0MiwzMzc0NCwzMzc0NSwzMzc0''@;'; put 'put ''NiwzMzc0NywzMzc0OSwzMzc1MSwzMzc1MywzMzc1NCwzMzc1NSwzMzc1OCwzMzc2MiwzMzc2MywzMzc2NCwzMzc2NiwzMzc2NywzMzc2OCwzMzc3MSwzMzc3MiwzMzc3MywyNDY4OCwyNzk2NSwyOTMwMSwyNTE5MCwzODAzMCwzODA4NSwyMTMxNSwzNjgwMSwzMTYxNCwyMDE5MSwzNTg3OCwy''@;'; put 'put ''MDA5NCw0MDY2MCwzODA2NSwzODA2NywyMTA2OSwyODUwOCwzNjk2MywyNzk3MywzNTg5MiwyMjU0NSwyMzg4NCwyNzQyNCwyNzQ2NSwyNjUzOCwyMTU5NSwzMzEwOCwzMjY1MiwyMjY4MSwzNDEwMywyNDM3OCwyNTI1MCwyNzIwNywzODIwMSwyNTk3MCwyNDcwOCwyNjcyNSwzMDYzMSwyMDA1''@;'; put 'put ''MiwyMDM5MiwyNDAzOSwzODgwOCwyNTc3MiwzMjcyOCwyMzc4OSwyMDQzMSwzMTM3MywyMDk5OSwzMzU0MCwxOTk4OCwyNDYyMywzMTM2MywzODA1NCwyMDQwNSwyMDE0NiwzMTIwNiwyOTc0OCwyMTIyMCwzMzQ2NSwyNTgxMCwzMTE2NSwyMzUxNywyNzc3NywzODczOCwzNjczMSwyNzY4Miwy''@;'; put 'put ''MDU0MiwyMTM3NSwyODE2NSwyNTgwNiwyNjIyOCwyNzY5NiwyNDc3MywzOTAzMSwzNTgzMSwyNDE5OCwyOTc1NiwzMTM1MSwzMTE3OSwxOTk5MiwzNzA0MSwyOTY5OSwyNzcxNCwyMjIzNCwzNzE5NSwyNzg0NSwzNjIzNSwyMTMwNiwzNDUwMiwyNjM1NCwzNjUyNywyMzYyNCwzOTUzNywyODE5''@;'; put 'put ''MiwzMzc3NCwzMzc3NSwzMzc3OSwzMzc4MCwzMzc4MSwzMzc4MiwzMzc4MywzMzc4NiwzMzc4NywzMzc4OCwzMzc5MCwzMzc5MSwzMzc5MiwzMzc5NCwzMzc5NywzMzc5OSwzMzgwMCwzMzgwMSwzMzgwMiwzMzgwOCwzMzgxMCwzMzgxMSwzMzgxMiwzMzgxMywzMzgxNCwzMzgxNSwzMzgxNywz''@;'; put 'put ''MzgxOCwzMzgxOSwzMzgyMiwzMzgyMywzMzgyNCwzMzgyNSwzMzgyNiwzMzgyNywzMzgzMywzMzgzNCwzMzgzNSwzMzgzNiwzMzgzNywzMzgzOCwzMzgzOSwzMzg0MCwzMzg0MiwzMzg0MywzMzg0NCwzMzg0NSwzMzg0NiwzMzg0NywzMzg0OSwzMzg1MCwzMzg1MSwzMzg1NCwzMzg1NSwzMzg1''@;'; put 'put ''NiwzMzg1NywzMzg1OCwzMzg1OSwzMzg2MCwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NSwzMzg2NiwzMzg2NywzMzg2OCwzMzg2OSwzMzg3MCwzMzg3MSwzMzg3MiwzMzg3NCwzMzg3NSwzMzg3NiwzMzg3NywzMzg3OCwzMzg4MCwzMzg4NSwzMzg4NiwzMzg4NywzMzg4OCwzMzg5MCwzMzg5Miwz''@;'; put 'put ''Mzg5MywzMzg5NCwzMzg5NSwzMzg5NiwzMzg5OCwzMzkwMiwzMzkwMywzMzkwNCwzMzkwNiwzMzkwOCwzMzkxMSwzMzkxMywzMzkxNSwzMzkxNiwyMTQ2MiwyMzA5NCw0MDg0MywzNjI1OSwyMTQzNSwyMjI4MCwzOTA3OSwyNjQzNSwzNzI3NSwyNzg0OSwyMDg0MCwzMDE1NCwyNTMzMSwyOTM1''@;'; put 'put ''NiwyMTA0OCwyMTE0OSwzMjU3MCwyODgyMCwzMDI2NCwyMTM2NCw0MDUyMiwyNzA2MywzMDgzMCwzODU5MiwzNTAzMywzMjY3NiwyODk4MiwyOTEyMywyMDg3MywyNjU3OSwyOTkyNCwyMjc1NiwyNTg4MCwyMjE5OSwzNTc1MywzOTI4NiwyNTIwMCwzMjQ2OSwyNDgyNSwyODkwOSwyMjc2NCwy''@;'; put 'put ''MDE2MSwyMDE1NCwyNDUyNSwzODg4NywyMDIxOSwzNTc0OCwyMDk5NSwyMjkyMiwzMjQyNywyNTE3MiwyMDE3MywyNjA4NSwyNTEwMiwzMzU5MiwzMzk5MywzMzYzNSwzNDcwMSwyOTA3NiwyODM0MiwyMzQ4MSwzMjQ2NiwyMDg4NywyNTU0NSwyNjU4MCwzMjkwNSwzMzU5MywzNDgzNywyMDc1''@;'; put 'put ''NCwyMzQxOCwyMjkxNCwzNjc4NSwyMDA4MywyNzc0MSwyMDgzNywzNTEwOSwzNjcxOSwzODQ0NiwzNDEyMiwyOTc5MCwzODE2MCwzODM4NCwyODA3MCwzMzUwOSwyNDM2OSwyNTc0NiwyNzkyMiwzMzgzMiwzMzEzNCw0MDEzMSwyMjYyMiwzNjE4NywxOTk3NywyMTQ0MSwzMzkxNywzMzkxOCwz''@;'; put 'put ''MzkxOSwzMzkyMCwzMzkyMSwzMzkyMywzMzkyNCwzMzkyNSwzMzkyNiwzMzkzMCwzMzkzMywzMzkzNSwzMzkzNiwzMzkzNywzMzkzOCwzMzkzOSwzMzk0MCwzMzk0MSwzMzk0MiwzMzk0NCwzMzk0NiwzMzk0NywzMzk0OSwzMzk1MCwzMzk1MSwzMzk1MiwzMzk1NCwzMzk1NSwzMzk1NiwzMzk1''@;'; put 'put ''NywzMzk1OCwzMzk1OSwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2MywzMzk2NCwzMzk2NSwzMzk2NiwzMzk2OCwzMzk2OSwzMzk3MSwzMzk3MywzMzk3NCwzMzk3NSwzMzk3OSwzMzk4MCwzMzk4MiwzMzk4NCwzMzk4NiwzMzk4NywzMzk4OSwzMzk5MCwzMzk5MSwzMzk5MiwzMzk5NSwzMzk5Niwz''@;'; put 'put ''Mzk5OCwzMzk5OSwzNDAwMiwzNDAwNCwzNDAwNSwzNDAwNywzNDAwOCwzNDAwOSwzNDAxMCwzNDAxMSwzNDAxMiwzNDAxNCwzNDAxNywzNDAxOCwzNDAyMCwzNDAyMywzNDAyNCwzNDAyNSwzNDAyNiwzNDAyNywzNDAyOSwzNDAzMCwzNDAzMSwzNDAzMywzNDAzNCwzNDAzNSwzNDAzNiwzNDAz''@;'; put 'put ''NywzNDAzOCwzNDAzOSwzNDA0MCwzNDA0MSwzNDA0MiwzNDA0MywzNDA0NSwzNDA0NiwzNDA0OCwzNDA0OSwzNDA1MCwyMDI1NCwyNTk1NSwyNjcwNSwyMTk3MSwyMDAwNywyNTYyMCwzOTU3OCwyNTE5NSwyMzIzNCwyOTc5MSwzMzM5NCwyODA3MywyNjg2MiwyMDcxMSwzMzY3OCwzMDcyMiwy''@;'; put 'put ''NjQzMiwyMTA0OSwyNzgwMSwzMjQzMywyMDY2NywyMTg2MSwyOTAyMiwzMTU3OSwyNjE5NCwyOTY0MiwzMzUxNSwyNjQ0MSwyMzY2NSwyMTAyNCwyOTA1MywzNDkyMywzODM3OCwzODQ4NSwyNTc5NywzNjE5MywzMzIwMywyMTg5MiwyNzczMywyNTE1OSwzMjU1OCwyMjY3NCwyMDI2MCwyMTgz''@;'; put 'put ''MCwzNjE3NSwyNjE4OCwxOTk3OCwyMzU3OCwzNTA1OSwyNjc4NiwyNTQyMiwzMTI0NSwyODkwMywzMzQyMSwyMTI0MiwzODkwMiwyMzU2OSwyMTczNiwzNzA0NSwzMjQ2MSwyMjg4MiwzNjE3MCwzNDUwMywzMzI5MiwzMzI5MywzNjE5OCwyNTY2OCwyMzU1NiwyNDkxMywyODA0MSwzMTAzOCwz''@;'; put 'put ''NTc3NCwzMDc3NSwzMDAwMywyMTYyNywyMDI4MCwzNjUyMywyODE0NSwyMzA3MiwzMjQ1MywzMTA3MCwyNzc4NCwyMzQ1NywyMzE1OCwyOTk3OCwzMjk1OCwyNDkxMCwyODE4MywyMjc2OCwyOTk4MywyOTk4OSwyOTI5OCwyMTMxOSwzMjQ5OSwzNDA1MSwzNDA1MiwzNDA1MywzNDA1NCwzNDA1''@;'; put 'put ''NSwzNDA1NiwzNDA1NywzNDA1OCwzNDA1OSwzNDA2MSwzNDA2MiwzNDA2MywzNDA2NCwzNDA2NiwzNDA2OCwzNDA2OSwzNDA3MCwzNDA3MiwzNDA3MywzNDA3NSwzNDA3NiwzNDA3NywzNDA3OCwzNDA4MCwzNDA4MiwzNDA4MywzNDA4NCwzNDA4NSwzNDA4NiwzNDA4NywzNDA4OCwzNDA4OSwz''@;'; put 'put ''NDA5MCwzNDA5MywzNDA5NCwzNDA5NSwzNDA5NiwzNDA5NywzNDA5OCwzNDA5OSwzNDEwMCwzNDEwMSwzNDEwMiwzNDExMCwzNDExMSwzNDExMiwzNDExMywzNDExNCwzNDExNiwzNDExNywzNDExOCwzNDExOSwzNDEyMywzNDEyNCwzNDEyNSwzNDEyNiwzNDEyNywzNDEyOCwzNDEyOSwzNDEz''@;'; put 'put ''MCwzNDEzMSwzNDEzMiwzNDEzMywzNDEzNSwzNDEzNiwzNDEzOCwzNDEzOSwzNDE0MCwzNDE0MSwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0NywzNDE0OSwzNDE1MCwzNDE1MSwzNDE1MywzNDE1NCwzNDE1NSwzNDE1NiwzNDE1NywzNDE1OCwzNDE1OSwzNDE2MCwzNDE2MSwzNDE2Mywz''@;'; put 'put ''NDE2NSwzNDE2NiwzNDE2NywzNDE2OCwzNDE3MiwzNDE3MywzNDE3NSwzNDE3NiwzNDE3NywzMDQ2NSwzMDQyNywyMTA5NywzMjk4OCwyMjMwNywyNDA3MiwyMjgzMywyOTQyMiwyNjA0NSwyODI4NywzNTc5OSwyMzYwOCwzNDQxNywyMTMxMywzMDcwNywyNTM0MiwyNjEwMiwyMDE2MCwzOTEz''@;'; put 'put ''NSwzNDQzMiwyMzQ1NCwzNTc4MiwyMTQ5MCwzMDY5MCwyMDM1MSwyMzYzMCwzOTU0MiwyMjk4NywyNDMzNSwzMTAzNCwyMjc2MywxOTk5MCwyNjYyMywyMDEwNywyNTMyNSwzNTQ3NSwzNjg5MywyMTE4MywyNjE1OSwyMTk4MCwyMjEyNCwzNjg2NiwyMDE4MSwyMDM2NSwzNzMyMiwzOTI4MCwy''@;'; put 'put ''NzY2MywyNDA2NiwyNDY0MywyMzQ2MCwzNTI3MCwzNTc5NywyNTkxMCwyNTE2MywzOTMxOCwyMzQzMiwyMzU1MSwyNTQ4MCwyMTgwNiwyMTQ2MywzMDI0NiwyMDg2MSwzNDA5MiwyNjUzMCwyNjgwMywyNzUzMCwyNTIzNCwzNjc1NSwyMTQ2MCwzMzI5OCwyODExMywzMDA5NSwyMDA3MCwzNjE3''@;'; put 'put ''NCwyMzQwOCwyOTA4NywzNDIyMywyNjI1NywyNjMyOSwzMjYyNiwzNDU2MCw0MDY1Myw0MDczNiwyMzY0NiwyNjQxNSwzNjg0OCwyNjY0MSwyNjQ2MywyNTEwMSwzMTQ0NiwyMjY2MSwyNDI0NiwyNTk2OCwyODQ2NSwzNDE3OCwzNDE3OSwzNDE4MiwzNDE4NCwzNDE4NSwzNDE4NiwzNDE4Nywz''@;'; put 'put ''NDE4OCwzNDE4OSwzNDE5MCwzNDE5MiwzNDE5MywzNDE5NCwzNDE5NSwzNDE5NiwzNDE5NywzNDE5OCwzNDE5OSwzNDIwMCwzNDIwMSwzNDIwMiwzNDIwNSwzNDIwNiwzNDIwNywzNDIwOCwzNDIwOSwzNDIxMCwzNDIxMSwzNDIxMywzNDIxNCwzNDIxNSwzNDIxNywzNDIxOSwzNDIyMCwzNDIy''@;'; put 'put ''MSwzNDIyNSwzNDIyNiwzNDIyNywzNDIyOCwzNDIyOSwzNDIzMCwzNDIzMiwzNDIzNCwzNDIzNSwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MCwzNDI0MiwzNDI0MywzNDI0NCwzNDI0NSwzNDI0NiwzNDI0NywzNDI0OCwzNDI1MCwzNDI1MSwzNDI1MiwzNDI1MywzNDI1NCwzNDI1Nywz''@;'; put 'put ''NDI1OCwzNDI2MCwzNDI2MiwzNDI2MywzNDI2NCwzNDI2NSwzNDI2NiwzNDI2NywzNDI2OSwzNDI3MCwzNDI3MSwzNDI3MiwzNDI3MywzNDI3NCwzNDI3NSwzNDI3NywzNDI3OCwzNDI3OSwzNDI4MCwzNDI4MiwzNDI4MywzNDI4NCwzNDI4NSwzNDI4NiwzNDI4NywzNDI4OCwzNDI4OSwzNDI5''@;'; put 'put ''MCwzNDI5MSwzNDI5MiwzNDI5MywzNDI5NCwzNDI5NSwzNDI5NiwyNDY2MSwyMTA0NywzMjc4MSwyNTY4NCwzNDkyOCwyOTk5MywyNDA2OSwyNjY0MywyNTMzMiwzODY4NCwyMTQ1MiwyOTI0NSwzNTg0MSwyNzcwMCwzMDU2MSwzMTI0NiwyMTU1MCwzMDYzNiwzOTAzNCwzMzMwOCwzNTgyOCwz''@;'; put 'put ''MDgwNSwyNjM4OCwyODg2NSwyNjAzMSwyNTc0OSwyMjA3MCwyNDYwNSwzMTE2OSwyMTQ5NiwxOTk5NywyNzUxNSwzMjkwMiwyMzU0NiwyMTk4NywyMjIzNSwyMDI4MiwyMDI4NCwzOTI4MiwyNDA1MSwyNjQ5NCwzMjgyNCwyNDU3OCwzOTA0MiwzNjg2NSwyMzQzNSwzNTc3MiwzNTgyOSwyNTYy''@;'; put 'put ''OCwzMzM2OCwyNTgyMiwyMjAxMywzMzQ4NywzNzIyMSwyMDQzOSwzMjAzMiwzNjg5NSwzMTkwMywyMDcyMywyMjYwOSwyODMzNSwyMzQ4NywzNTc4NSwzMjg5OSwzNzI0MCwzMzk0OCwzMTYzOSwzNDQyOSwzODUzOSwzODU0MywzMjQ4NSwzOTYzNSwzMDg2MiwyMzY4MSwzMTMxOSwzNjkzMCwz''@;'; put 'put ''ODU2NywzMTA3MSwyMzM4NSwyNTQzOSwzMTQ5OSwzNDAwMSwyNjc5NywyMTc2NiwzMjU1MywyOTcxMiwzMjAzNCwzODE0NSwyNTE1MiwyMjYwNCwyMDE4MiwyMzQyNywyMjkwNSwyMjYxMiwzNDI5NywzNDI5OCwzNDMwMCwzNDMwMSwzNDMwMiwzNDMwNCwzNDMwNSwzNDMwNiwzNDMwNywzNDMw''@;'; put 'put ''OCwzNDMxMCwzNDMxMSwzNDMxMiwzNDMxMywzNDMxNCwzNDMxNSwzNDMxNiwzNDMxNywzNDMxOCwzNDMxOSwzNDMyMCwzNDMyMiwzNDMyMywzNDMyNCwzNDMyNSwzNDMyNywzNDMyOCwzNDMyOSwzNDMzMCwzNDMzMSwzNDMzMiwzNDMzMywzNDMzNCwzNDMzNSwzNDMzNiwzNDMzNywzNDMzOCwz''@;'; put 'put ''NDMzOSwzNDM0MCwzNDM0MSwzNDM0MiwzNDM0NCwzNDM0NiwzNDM0NywzNDM0OCwzNDM0OSwzNDM1MCwzNDM1MSwzNDM1MiwzNDM1MywzNDM1NCwzNDM1NSwzNDM1NiwzNDM1NywzNDM1OCwzNDM1OSwzNDM2MSwzNDM2MiwzNDM2MywzNDM2NSwzNDM2NiwzNDM2NywzNDM2OCwzNDM2OSwzNDM3''@;'; put 'put ''MCwzNDM3MSwzNDM3MiwzNDM3MywzNDM3NCwzNDM3NSwzNDM3NiwzNDM3NywzNDM3OCwzNDM3OSwzNDM4MCwzNDM4NiwzNDM4NywzNDM4OSwzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NSwzNDM5NiwzNDM5NywzNDM5OSwzNDQwMCwzNDQwMSwzNDQwMywzNDQwNCwzNDQwNSwzNDQwNiwz''@;'; put 'put ''NDQwNywzNDQwOCwzNDQwOSwzNDQxMCwyOTU0OSwyNTM3NCwzNjQyNywzNjM2NywzMjk3NCwzMzQ5MiwyNTI2MCwyMTQ4OCwyNzg4OCwzNzIxNCwyMjgyNiwyNDU3NywyNzc2MCwyMjM0OSwyNTY3NCwzNjEzOCwzMDI1MSwyODM5MywyMjM2MywyNzI2NCwzMDE5MiwyODUyNSwzNTg4NSwzNTg0''@;'; put 'put ''OCwyMjM3NCwyNzYzMSwzNDk2MiwzMDg5OSwyNTUwNiwyMTQ5NywyODg0NSwyNzc0OCwyMjYxNiwyNTY0MiwyMjUzMCwyNjg0OCwzMzE3OSwyMTc3NiwzMTk1OCwyMDUwNCwzNjUzOCwyODEwOCwzNjI1NSwyODkwNywyNTQ4NywyODA1OSwyODM3MiwzMjQ4NiwzMzc5NiwyNjY5MSwzNjg2Nywy''@;'; put 'put ''ODEyMCwzODUxOCwzNTc1MiwyMjg3MSwyOTMwNSwzNDI3NiwzMzE1MCwzMDE0MCwzNTQ2NiwyNjc5OSwyMTA3NiwzNjM4NiwzODE2MSwyNTU1MiwzOTA2NCwzNjQyMCwyMTg4NCwyMDMwNywyNjM2NywyMjE1OSwyNDc4OSwyODA1MywyMTA1OSwyMzYyNSwyMjgyNSwyODE1NSwyMjYzNSwzZTQs''@;'; put 'put ''Mjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0''@;'; put 'put ''MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcsMzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUsMzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIs''@;'; put 'put ''MzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1''@;'; put 'put ''MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYsMzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYsMzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAs''@;'; put 'put ''MzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAxNzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEz''@;'; put 'put ''NjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEsMzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIsMjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUs''@;'; put 'put ''MjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgyODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5''@;'; put 'put ''NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcsMzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTksMzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgs''@;'; put 'put ''MzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2''@;'; put 'put ''NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2NjgsMzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2NzcsMzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODks''@;'; put 'put ''MzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0''@;'; put 'put ''OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUsMjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTksMzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTks''@;'; put 'put ''MjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUxMDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgw''@;'; put 'put ''NTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAsMzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQsMjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIs''@;'; put 'put ''MjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3''@;'; put 'put ''NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIsMzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcs''@;'; put 'put ''MzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4''@;'; put 'put ''MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4MzksMzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYsMzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMs''@;'; put 'put ''MzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgxMTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAz''@;'; put 'put ''ODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAsMzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQsMzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMs''@;'; put 'put ''MjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcyMzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEw''@;'; put 'put ''NjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgsMzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQsMzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIs''@;'; put 'put ''MzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5''@;'; put 'put ''MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5MzcsMzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAsMzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAs''@;'; put 'put ''MzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5''@;'; put 'put ''MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAsMjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQsMjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIs''@;'; put 'put ''MjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcyNjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0''@;'; put 'put ''NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQsMzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcsMzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMs''@;'; put 'put ''MjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzVlMywzNTAwMSwzNTAwMiwzNTAwMywzNTAwNSwzNTAwNiwzNTAwNywzNTAwOCwzNTAxMSwzNTAxMiwzNTAxNSwzNTAxNiwzNTAxOCwzNTAx''@;'; put 'put ''OSwzNTAyMCwzNTAyMSwzNTAyMywzNTAyNCwzNTAyNSwzNTAyNywzNTAzMCwzNTAzMSwzNTAzNCwzNTAzNSwzNTAzNiwzNTAzNywzNTAzOCwzNTA0MCwzNTA0MSwzNTA0NiwzNTA0NywzNTA0OSwzNTA1MCwzNTA1MSwzNTA1MiwzNTA1MywzNTA1NCwzNTA1NSwzNTA1OCwzNTA2MSwzNTA2Miwz''@;'; put 'put ''NTA2MywzNTA2NiwzNTA2NywzNTA2OSwzNTA3MSwzNTA3MiwzNTA3MywzNTA3NSwzNTA3NiwzNTA3NywzNTA3OCwzNTA3OSwzNTA4MCwzNTA4MSwzNTA4MywzNTA4NCwzNTA4NSwzNTA4NiwzNTA4NywzNTA4OSwzNTA5MiwzNTA5MywzNTA5NCwzNTA5NSwzNTA5NiwzNTEwMCwzNTEwMSwzNTEw''@;'; put 'put ''MiwzNTEwMywzNTEwNCwzNTEwNiwzNTEwNywzNTEwOCwzNTExMCwzNTExMSwzNTExMiwzNTExMywzNTExNiwzNTExNywzNTExOCwzNTExOSwzNTEyMSwzNTEyMiwzNTEyMywzNTEyNSwzNTEyNywzNjg3MywzMDMwNywzMDUwNSwzMjQ3NCwzODc3MiwzNDIwMywyMzM5OCwzMTM0OCwzODYzNCwz''@;'; put 'put ''NDg4MCwyMTE5NSwyOTA3MSwyNDQ5MCwyNjA5MiwzNTgxMCwyMzU0NywzOTUzNSwyNDAzMywyNzUyOSwyNzczOSwzNTc1NywzNTc1OSwzNjg3NCwzNjgwNSwyMTM4NywyNTI3Niw0MDQ4Niw0MDQ5MywyMTU2OCwyMDAxMSwzMzQ2OSwyOTI3MywzNDQ2MCwyMzgzMCwzNDkwNSwyODA3OSwzODU5''@;'; put 'put ''NywyMTcxMywyMDEyMiwzNTc2NiwyODkzNywyMTY5MywzODQwOSwyODg5NSwyODE1MywzMDQxNiwyMDAwNSwzMDc0MCwzNDU3OCwyMzcyMSwyNDMxMCwzNTMyOCwzOTA2OCwzODQxNCwyODgxNCwyNzgzOSwyMjg1MiwyNTUxMywzMDUyNCwzNDg5MywyODQzNiwzMzM5NSwyMjU3NiwyOTE0MSwy''@;'; put 'put ''MTM4OCwzMDc0NiwzODU5MywyMTc2MSwyNDQyMiwyODk3NiwyMzQ3NiwzNTg2NiwzOTU2NCwyNzUyMywyMjgzMCw0MDQ5NSwzMTIwNywyNjQ3MiwyNTE5NiwyMDMzNSwzMDExMywzMjY1MCwyNzkxNSwzODQ1MSwyNzY4NywyMDIwOCwzMDE2MiwyMDg1OSwyNjY3OSwyODQ3OCwzNjk5MiwzMzEz''@;'; put 'put ''NiwyMjkzNCwyOTgxNCwzNTEyOCwzNTEyOSwzNTEzMCwzNTEzMSwzNTEzMiwzNTEzMywzNTEzNCwzNTEzNSwzNTEzNiwzNTEzOCwzNTEzOSwzNTE0MSwzNTE0MiwzNTE0MywzNTE0NCwzNTE0NSwzNTE0NiwzNTE0NywzNTE0OCwzNTE0OSwzNTE1MCwzNTE1MSwzNTE1MiwzNTE1MywzNTE1NCwz''@;'; put 'put ''NTE1NSwzNTE1NiwzNTE1NywzNTE1OCwzNTE1OSwzNTE2MCwzNTE2MSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2NSwzNTE2OCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3MiwzNTE3MywzNTE3NSwzNTE3NiwzNTE3NywzNTE3OCwzNTE3OSwzNTE4MCwzNTE4MSwzNTE4MiwzNTE4MywzNTE4NCwzNTE4''@;'; put 'put ''NSwzNTE4NiwzNTE4NywzNTE4OCwzNTE4OSwzNTE5MCwzNTE5MSwzNTE5MiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NywzNTE5OCwzNTIwMCwzNTIwMiwzNTIwNCwzNTIwNSwzNTIwNywzNTIwOCwzNTIwOSwzNTIxMCwzNTIxMSwzNTIxMiwzNTIxMywzNTIxNCwzNTIxNSwzNTIxNiwzNTIxNywz''@;'; put 'put ''NTIxOCwzNTIxOSwzNTIyMCwzNTIyMSwzNTIyMiwzNTIyMywzNTIyNCwzNTIyNSwzNTIyNiwzNTIyNywzNTIyOCwzNTIyOSwzNTIzMCwzNTIzMSwzNTIzMiwzNTIzMywyNTY3MSwyMzU5MSwzNjk2NSwzMTM3NywzNTg3NSwyMzAwMiwyMTY3NiwzMzI4MCwzMzY0NywzNTIwMSwzMjc2OCwyNjky''@;'; put 'put ''OCwyMjA5NCwzMjgyMiwyOTIzOSwzNzMyNiwyMDkxOCwyMDA2MywzOTAyOSwyNTQ5NCwxOTk5NCwyMTQ5NCwyNjM1NSwzMzA5OSwyMjgxMiwyODA4MiwxOTk2OCwyMjc3NywyMTMwNywyNTU1OCwzODEyOSwyMDM4MSwyMDIzNCwzNDkxNSwzOTA1NiwyMjgzOSwzNjk1MSwzMTIyNywyMDIwMiwz''@;'; put 'put ''MzAwOCwzMDA5NywyNzc3OCwyMzQ1MiwyMzAxNiwyNDQxMywyNjg4NSwzNDQzMywyMDUwNiwyNDA1MCwyMDA1NywzMDY5MSwyMDE5NywzMzQwMiwyNTIzMywyNjEzMSwzNzAwOSwyMzY3MywyMDE1OSwyNDQ0MSwzMzIyMiwzNjkyMCwzMjkwMCwzMDEyMywyMDEzNCwzNTAyOCwyNDg0NywyNzU4''@;'; put 'put ''OSwyNDUxOCwyMDA0MSwzMDQxMCwyODMyMiwzNTgxMSwzNTc1OCwzNTg1MCwzNTc5MywyNDMyMiwzMjc2NCwzMjcxNiwzMjQ2MiwzMzU4OSwzMzY0MywyMjI0MCwyNzU3NSwzODg5OSwzODQ1MiwyMzAzNSwyMTUzNSwzODEzNCwyODEzOSwyMzQ5MywzOTI3OCwyMzYwOSwyNDM0MSwzODU0NCwz''@;'; put 'put ''NTIzNCwzNTIzNSwzNTIzNiwzNTIzNywzNTIzOCwzNTIzOSwzNTI0MCwzNTI0MSwzNTI0MiwzNTI0MywzNTI0NCwzNTI0NSwzNTI0NiwzNTI0NywzNTI0OCwzNTI0OSwzNTI1MCwzNTI1MSwzNTI1MiwzNTI1MywzNTI1NCwzNTI1NSwzNTI1NiwzNTI1NywzNTI1OCwzNTI1OSwzNTI2MCwzNTI2''@;'; put 'put ''MSwzNTI2MiwzNTI2MywzNTI2NCwzNTI2NywzNTI3NywzNTI4MywzNTI4NCwzNTI4NSwzNTI4NywzNTI4OCwzNTI4OSwzNTI5MSwzNTI5MywzNTI5NSwzNTI5NiwzNTI5NywzNTI5OCwzNTMwMCwzNTMwMywzNTMwNCwzNTMwNSwzNTMwNiwzNTMwOCwzNTMwOSwzNTMxMCwzNTMxMiwzNTMxMywz''@;'; put 'put ''NTMxNCwzNTMxNiwzNTMxNywzNTMxOCwzNTMxOSwzNTMyMCwzNTMyMSwzNTMyMiwzNTMyMywzNTMyNCwzNTMyNSwzNTMyNiwzNTMyNywzNTMyOSwzNTMzMCwzNTMzMSwzNTMzMiwzNTMzMywzNTMzNCwzNTMzNiwzNTMzNywzNTMzOCwzNTMzOSwzNTM0MCwzNTM0MSwzNTM0MiwzNTM0MywzNTM0''@;'; put 'put ''NCwzNTM0NSwzNTM0NiwzNTM0NywzNTM0OCwzNTM0OSwzNTM1MCwzNTM1MSwzNTM1MiwzNTM1MywzNTM1NCwzNTM1NSwzNTM1NiwzNTM1NywyMTM2MCwzMzUyMSwyNzE4NSwyMzE1Niw0MDU2MCwyNDIxMiwzMjU1MiwzMzcyMSwzMzgyOCwzMzgyOSwzMzYzOSwzNDYzMSwzNjgxNCwzNjE5NCwz''@;'; put 'put ''MDQwOCwyNDQzMywzOTA2MiwzMDgyOCwyNjE0NCwyMTcyNywyNTMxNywyMDMyMywzMzIxOSwzMDE1MiwyNDI0OCwzODYwNSwzNjM2MiwzNDU1MywyMTY0NywyNzg5MSwyODA0NCwyNzcwNCwyNDcwMywyMTE5MSwyOTk5MiwyNDE4OSwyMDI0OCwyNDczNiwyNDU1MSwyMzU4OCwzMDAwMSwzNzAz''@;'; put 'put ''OCwzODA4MCwyOTM2OSwyNzgzMywyODIxNiwzNzE5MywyNjM3NywyMTQ1MSwyMTQ5MSwyMDMwNSwzNzMyMSwzNTgyNSwyMTQ0OCwyNDE4OCwzNjgwMiwyODEzMiwyMDExMCwzMDQwMiwyNzAxNCwzNDM5OCwyNDg1OCwzMzI4NiwyMDMxMywyMDQ0NiwzNjkyNiw0MDA2MCwyNDg0MSwyODE4OSwy''@;'; put 'put ''ODE4MCwzODUzMywyMDEwNCwyMzA4OSwzODYzMiwxOTk4MiwyMzY3OSwzMTE2MSwyMzQzMSwzNTgyMSwzMjcwMSwyOTU3NywyMjQ5NSwzMzQxOSwzNzA1NywyMTUwNSwzNjkzNSwyMTk0NywyMzc4NiwyNDQ4MSwyNDg0MCwyNzQ0MiwyOTQyNSwzMjk0NiwzNTQ2NSwzNTM1OCwzNTM1OSwzNTM2''@;'; put 'put ''MCwzNTM2MSwzNTM2MiwzNTM2MywzNTM2NCwzNTM2NSwzNTM2NiwzNTM2NywzNTM2OCwzNTM2OSwzNTM3MCwzNTM3MSwzNTM3MiwzNTM3MywzNTM3NCwzNTM3NSwzNTM3NiwzNTM3NywzNTM3OCwzNTM3OSwzNTM4MCwzNTM4MSwzNTM4MiwzNTM4MywzNTM4NCwzNTM4NSwzNTM4NiwzNTM4Nywz''@;'; put 'put ''NTM4OCwzNTM4OSwzNTM5MSwzNTM5MiwzNTM5MywzNTM5NCwzNTM5NSwzNTM5NiwzNTM5NywzNTM5OCwzNTM5OSwzNTQwMSwzNTQwMiwzNTQwMywzNTQwNCwzNTQwNSwzNTQwNiwzNTQwNywzNTQwOCwzNTQwOSwzNTQxMCwzNTQxMSwzNTQxMiwzNTQxMywzNTQxNCwzNTQxNSwzNTQxNiwzNTQx''@;'; put 'put ''NywzNTQxOCwzNTQxOSwzNTQyMCwzNTQyMSwzNTQyMiwzNTQyMywzNTQyNCwzNTQyNSwzNTQyNiwzNTQyNywzNTQyOCwzNTQyOSwzNTQzMCwzNTQzMSwzNTQzMiwzNTQzMywzNTQzNCwzNTQzNSwzNTQzNiwzNTQzNywzNTQzOCwzNTQzOSwzNTQ0MCwzNTQ0MSwzNTQ0MiwzNTQ0MywzNTQ0NCwz''@;'; put 'put ''NTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OCwzNTQ1MCwzNTQ1MSwzNTQ1MiwzNTQ1MywzNTQ1NCwzNTQ1NSwzNTQ1NiwyODAyMCwyMzUwNywzNTAyOSwzOTA0NCwzNTk0NywzOTUzMyw0MDQ5OSwyODE3MCwyMDkwMCwyMDgwMywyMjQzNSwzNDk0NSwyMTQwNywyNTU4OCwzNjc1NywyMjI1MywyMTU5''@;'; put 'put ''MiwyMjI3OCwyOTUwMywyODMwNCwzMjUzNiwzNjgyOCwzMzQ4OSwyNDg5NSwyNDYxNiwzODQ5OCwyNjM1MiwzMjQyMiwzNjIzNCwzNjI5MSwzODA1MywyMzczMSwzMTkwOCwyNjM3NiwyNDc0MiwzODQwNSwzMjc5MiwyMDExMywzNzA5NSwyMTI0OCwzODUwNCwyMDgwMSwzNjgxNiwzNDE2NCwz''@;'; put 'put ''NzIxMywyNjE5NywzODkwMSwyMzM4MSwyMTI3NywzMDc3NiwyNjQzNCwyNjY4NSwyMTcwNSwyODc5OCwyMzQ3MiwzNjczMywyMDg3NywyMjMxMiwyMTY4MSwyNTg3NCwyNjI0MiwzNjE5MCwzNjE2MywzMzAzOSwzMzkwMCwzNjk3MywzMTk2NywyMDk5MSwzNDI5OSwyNjUzMSwyNjA4OSwyODU3''@;'; put 'put ''NywzNDQ2OCwzNjQ4MSwyMjEyMiwzNjg5NiwzMDMzOCwyODc5MCwyOTE1NywzNjEzMSwyNTMyMSwyMTAxNywyNzkwMSwzNjE1NiwyNDU5MCwyMjY4NiwyNDk3NCwyNjM2NiwzNjE5MiwyNTE2NiwyMTkzOSwyODE5NSwyNjQxMywzNjcxMSwzNTQ1NywzNTQ1OCwzNTQ1OSwzNTQ2MCwzNTQ2MSwz''@;'; put 'put ''NTQ2MiwzNTQ2MywzNTQ2NCwzNTQ2NywzNTQ2OCwzNTQ2OSwzNTQ3MCwzNTQ3MSwzNTQ3MiwzNTQ3MywzNTQ3NCwzNTQ3NiwzNTQ3NywzNTQ3OCwzNTQ3OSwzNTQ4MCwzNTQ4MSwzNTQ4MiwzNTQ4MywzNTQ4NCwzNTQ4NSwzNTQ4NiwzNTQ4NywzNTQ4OCwzNTQ4OSwzNTQ5MCwzNTQ5MSwzNTQ5''@;'; put 'put ''MiwzNTQ5MywzNTQ5NCwzNTQ5NSwzNTQ5NiwzNTQ5NywzNTQ5OCwzNTQ5OSwzNTUwMCwzNTUwMSwzNTUwMiwzNTUwMywzNTUwNCwzNTUwNSwzNTUwNiwzNTUwNywzNTUwOCwzNTUwOSwzNTUxMCwzNTUxMSwzNTUxMiwzNTUxMywzNTUxNCwzNTUxNSwzNTUxNiwzNTUxNywzNTUxOCwzNTUxOSwz''@;'; put 'put ''NTUyMCwzNTUyMSwzNTUyMiwzNTUyMywzNTUyNCwzNTUyNSwzNTUyNiwzNTUyNywzNTUyOCwzNTUyOSwzNTUzMCwzNTUzMSwzNTUzMiwzNTUzMywzNTUzNCwzNTUzNSwzNTUzNiwzNTUzNywzNTUzOCwzNTUzOSwzNTU0MCwzNTU0MSwzNTU0MiwzNTU0MywzNTU0NCwzNTU0NSwzNTU0NiwzNTU0''@;'; put 'put ''NywzNTU0OCwzNTU0OSwzNTU1MCwzNTU1MSwzNTU1MiwzNTU1MywzNTU1NCwzNTU1NSwzODExMywzODM5MiwzMDUwNCwyNjYyOSwyNzA0OCwyMTY0MywyMDA0NSwyODg1NiwzNTc4NCwyNTY4OCwyNTk5NSwyMzQyOSwzMTM2NCwyMDUzOCwyMzUyOCwzMDY1MSwyNzYxNywzNTQ0OSwzMTg5Niwy''@;'; put 'put ''NzgzOCwzMDQxNSwyNjAyNSwzNjc1OSwyMzg1MywyMzYzNywzNDM2MCwyNjYzMiwyMTM0NCwyNTExMiwzMTQ0OSwyODI1MSwzMjUwOSwyNzE2NywzMTQ1NiwyNDQzMiwyODQ2NywyNDM1MiwyNTQ4NCwyODA3MiwyNjQ1NCwxOTk3NiwyNDA4MCwzNjEzNCwyMDE4MywzMjk2MCwzMDI2MCwzODU1''@;'; put 'put ''NiwyNTMwNywyNjE1NywyNTIxNCwyNzgzNiwzNjIxMywyOTAzMSwzMjYxNywyMDgwNiwzMjkwMywyMTQ4NCwzNjk3NCwyNTI0MCwyMTc0NiwzNDU0NCwzNjc2MSwzMjc3MywzODE2NywzNDA3MSwzNjgyNSwyNzk5MywyOTY0NSwyNjAxNSwzMDQ5NSwyOTk1NiwzMDc1OSwzMzI3NSwzNjEyNiwz''@;'; put 'put ''ODAyNCwyMDM5MCwyNjUxNywzMDEzNywzNTc4NiwzODY2MywyNTM5MSwzODIxNSwzODQ1MywzMzk3NiwyNTM3OSwzMDUyOSwyNDQ0OSwyOTQyNCwyMDEwNSwyNDU5NiwyNTk3MiwyNTMyNywyNzQ5MSwyNTkxOSwzNTU1NiwzNTU1NywzNTU1OCwzNTU1OSwzNTU2MCwzNTU2MSwzNTU2MiwzNTU2''@;'; put 'put ''MywzNTU2NCwzNTU2NSwzNTU2NiwzNTU2NywzNTU2OCwzNTU2OSwzNTU3MCwzNTU3MSwzNTU3MiwzNTU3MywzNTU3NCwzNTU3NSwzNTU3NiwzNTU3NywzNTU3OCwzNTU3OSwzNTU4MCwzNTU4MSwzNTU4MiwzNTU4MywzNTU4NCwzNTU4NSwzNTU4NiwzNTU4NywzNTU4OCwzNTU4OSwzNTU5MCwz''@;'; put 'put ''NTU5MiwzNTU5MywzNTU5NCwzNTU5NSwzNTU5NiwzNTU5NywzNTU5OCwzNTU5OSwzNTYwMCwzNTYwMSwzNTYwMiwzNTYwMywzNTYwNCwzNTYwNSwzNTYwNiwzNTYwNywzNTYwOCwzNTYwOSwzNTYxMCwzNTYxMSwzNTYxMiwzNTYxMywzNTYxNCwzNTYxNSwzNTYxNiwzNTYxNywzNTYxOCwzNTYx''@;'; put 'put ''OSwzNTYyMCwzNTYyMSwzNTYyMywzNTYyNCwzNTYyNSwzNTYyNiwzNTYyNywzNTYyOCwzNTYyOSwzNTYzMCwzNTYzMSwzNTYzMiwzNTYzMywzNTYzNCwzNTYzNSwzNTYzNiwzNTYzNywzNTYzOCwzNTYzOSwzNTY0MCwzNTY0MSwzNTY0MiwzNTY0MywzNTY0NCwzNTY0NSwzNTY0NiwzNTY0Nywz''@;'; put 'put ''NTY0OCwzNTY0OSwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywyNDEwMywzMDE1MSwzNzA3MywzNTc3NywzMzQzNywyNjUyNSwyNTkwMywyMTU1MywzNDU4NCwzMDY5MywzMjkzMCwzMzAyNiwyNzcxMywyMDA0MywzMjQ1NSwzMjg0NCwzMDQ1MiwyNjg5MywyNzU0MiwyNTE5MSwyMDU0MCwyMDM1''@;'; put 'put ''NiwyMjMzNiwyNTM1MSwyNzQ5MCwzNjI4NiwyMTQ4MiwyNjA4OCwzMjQ0MCwyNDUzNSwyNTM3MCwyNTUyNywzMzI2NywzMzI2OCwzMjYyMiwyNDA5MiwyMzc2OSwyMTA0NiwyNjIzNCwzMTIwOSwzMTI1OCwzNjEzNiwyODgyNSwzMDE2NCwyODM4MiwyNzgzNSwzMTM3OCwyMDAxMywzMDQwNSwy''@;'; put 'put ''NDU0NCwzODA0NywzNDkzNSwzMjQ1NiwzMTE4MSwzMjk1OSwzNzMyNSwyMDIxMCwyMDI0NywzMzMxMSwyMTYwOCwyNDAzMCwyNzk1NCwzNTc4OCwzMTkwOSwzNjcyNCwzMjkyMCwyNDA5MCwyMTY1MCwzMDM4NSwyMzQ0OSwyNjE3MiwzOTU4OCwyOTY2NCwyNjY2NiwzNDUyMywyNjQxNywyOTQ4''@;'; put 'put ''MiwzNTgzMiwzNTgwMywzNjg4MCwzMTQ4MSwyODg5MSwyOTAzOCwyNTI4NCwzMDYzMywyMjA2NSwyMDAyNywzMzg3OSwyNjYwOSwyMTE2MSwzNDQ5NiwzNjE0MiwzODEzNiwzMTU2OSwzNTY1NCwzNTY1NSwzNTY1NiwzNTY1NywzNTY1OCwzNTY1OSwzNTY2MCwzNTY2MSwzNTY2MiwzNTY2Mywz''@;'; put 'put ''NTY2NCwzNTY2NSwzNTY2NiwzNTY2NywzNTY2OCwzNTY2OSwzNTY3MCwzNTY3MSwzNTY3MiwzNTY3MywzNTY3NCwzNTY3NSwzNTY3NiwzNTY3NywzNTY3OCwzNTY3OSwzNTY4MCwzNTY4MSwzNTY4MiwzNTY4MywzNTY4NCwzNTY4NSwzNTY4NywzNTY4OCwzNTY4OSwzNTY5MCwzNTY5MSwzNTY5''@;'; put 'put ''MywzNTY5NCwzNTY5NSwzNTY5NiwzNTY5NywzNTY5OCwzNTY5OSwzNTcwMCwzNTcwMSwzNTcwMiwzNTcwMywzNTcwNCwzNTcwNSwzNTcwNiwzNTcwNywzNTcwOCwzNTcwOSwzNTcxMCwzNTcxMSwzNTcxMiwzNTcxMywzNTcxNCwzNTcxNSwzNTcxNiwzNTcxNywzNTcxOCwzNTcxOSwzNTcyMCwz''@;'; put 'put ''NTcyMSwzNTcyMiwzNTcyMywzNTcyNCwzNTcyNSwzNTcyNiwzNTcyNywzNTcyOCwzNTcyOSwzNTczMCwzNTczMSwzNTczMiwzNTczMywzNTczNCwzNTczNSwzNTczNiwzNTczNywzNTczOCwzNTczOSwzNTc0MCwzNTc0MSwzNTc0MiwzNTc0MywzNTc1NiwzNTc2MSwzNTc3MSwzNTc4MywzNTc5''@;'; put 'put ''MiwzNTgxOCwzNTg0OSwzNTg3MCwyMDMwMywyNzg4MCwzMTA2OSwzOTU0NywyNTIzNSwyOTIyNiwyNTM0MSwxOTk4NywzMDc0MiwzNjcxNiwyNTc3NiwzNjE4NiwzMTY4NiwyNjcyOSwyNDE5NiwzNTAxMywyMjkxOCwyNTc1OCwyMjc2NiwyOTM2NiwyNjg5NCwzODE4MSwzNjg2MSwzNjE4NCwy''@;'; put 'put ''MjM2OCwzMjUxMiwzNTg0NiwyMDkzNCwyNTQxNywyNTMwNSwyMTMzMSwyNjcwMCwyOTczMCwzMzUzNywzNzE5NiwyMTgyOCwzMDUyOCwyODc5NiwyNzk3OCwyMDg1NywyMTY3MiwzNjE2NCwyMzAzOSwyODM2MywyODEwMCwyMzM4OCwzMjA0MywyMDE4MCwzMTg2OSwyODM3MSwyMzM3NiwzMzI1''@;'; put 'put ''OCwyODE3MywyMzM4MywzOTY4MywyNjgzNywzNjM5NCwyMzQ0NywzMjUwOCwyNDYzNSwzMjQzNywzNzA0OSwzNjIwOCwyMjg2MywyNTU0OSwzMTE5OSwzNjI3NSwyMTMzMCwyNjA2MywzMTA2MiwzNTc4MSwzODQ1OSwzMjQ1MiwzODA3NSwzMjM4NiwyMjA2OCwzNzI1NywyNjM2OCwzMjYxOCwy''@;'; put 'put ''MzU2MiwzNjk4MSwyNjE1MiwyNDAzOCwyMDMwNCwyNjU5MCwyMDU3MCwyMDMxNiwyMjM1MiwyNDIzMSw1OTQwOCw1OTQwOSw1OTQxMCw1OTQxMSw1OTQxMiwzNTg5NiwzNTg5NywzNTg5OCwzNTg5OSwzNTkwMCwzNTkwMSwzNTkwMiwzNTkwMywzNTkwNCwzNTkwNiwzNTkwNywzNTkwOCwzNTkw''@;'; put 'put ''OSwzNTkxMiwzNTkxNCwzNTkxNSwzNTkxNywzNTkxOCwzNTkxOSwzNTkyMCwzNTkyMSwzNTkyMiwzNTkyMywzNTkyNCwzNTkyNiwzNTkyNywzNTkyOCwzNTkyOSwzNTkzMSwzNTkzMiwzNTkzMywzNTkzNCwzNTkzNSwzNTkzNiwzNTkzOSwzNTk0MCwzNTk0MSwzNTk0MiwzNTk0MywzNTk0NCwz''@;'; put 'put ''NTk0NSwzNTk0OCwzNTk0OSwzNTk1MCwzNTk1MSwzNTk1MiwzNTk1MywzNTk1NCwzNTk1NiwzNTk1NywzNTk1OCwzNTk1OSwzNTk2MywzNTk2NCwzNTk2NSwzNTk2NiwzNTk2NywzNTk2OCwzNTk2OSwzNTk3MSwzNTk3MiwzNTk3NCwzNTk3NSwzNTk3NiwzNTk3OSwzNTk4MSwzNTk4MiwzNTk4''@;'; put 'put ''MywzNTk4NCwzNTk4NSwzNTk4NiwzNTk4NywzNTk4OSwzNTk5MCwzNTk5MSwzNTk5MywzNTk5NCwzNTk5NSwzNTk5NiwzNTk5NywzNTk5OCwzNTk5OSwzNmUzLDM2MDAxLDM2MDAyLDM2MDAzLDM2MDA0LDM2MDA1LDM2MDA2LDM2MDA3LDM2MDA4LDM2MDA5LDM2MDEwLDM2MDExLDM2MDEyLDM2''@;'; put 'put ''MDEzLDIwMTA5LDE5OTgwLDIwODAwLDE5OTg0LDI0MzE5LDIxMzE3LDE5OTg5LDIwMTIwLDE5OTk4LDM5NzMwLDIzNDA0LDIyMTIxLDIwMDA4LDMxMTYyLDIwMDMxLDIxMjY5LDIwMDM5LDIyODI5LDI5MjQzLDIxMzU4LDI3NjY0LDIyMjM5LDMyOTk2LDM5MzE5LDI3NjAzLDMwNTkwLDQwNzI3''@;'; put 'put ''LDIwMDIyLDIwMTI3LDQwNzIwLDIwMDYwLDIwMDczLDIwMTE1LDMzNDE2LDIzMzg3LDIxODY4LDIyMDMxLDIwMTY0LDIxMzg5LDIxNDA1LDIxNDExLDIxNDEzLDIxNDIyLDM4NzU3LDM2MTg5LDIxMjc0LDIxNDkzLDIxMjg2LDIxMjk0LDIxMzEwLDM2MTg4LDIxMzUwLDIxMzQ3LDIwOTk0LDIx''@;'; put 'put ''ZTMsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYsMjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjksMjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEs''@;'; put 'put ''MjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYwMTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYwMjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYw''@;'; put 'put ''MjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMsMzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDksMzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYs''@;'; put 'put ''MzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYwNzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYwNzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYw''@;'; put 'put ''ODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgsMzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQsMzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEs''@;'; put 'put ''MjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1''@;'; put 'put ''MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgsMjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQsMjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcs''@;'; put 'put ''MjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEyNDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMw''@;'; put 'put ''NDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQsMzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAsMzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgs''@;'; put 'put ''MzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYyMTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYyMjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYy''@;'; put 'put ''MzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMsMzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEsMzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgs''@;'; put 'put ''MzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYyOTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYzMDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3''@;'; put 'put ''NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYsMzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgsMzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAs''@;'; put 'put ''MzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4''@;'; put 'put ''OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMsMzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYsMzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEs''@;'; put 'put ''MzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYzMjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYzMzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYz''@;'; put 'put ''NTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAsMzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcsMzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODks''@;'; put 'put ''MzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0''@;'; put 'put ''MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMsMzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUsMzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAs''@;'; put 'put ''MzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcxNjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEy''@;'; put 'put ''MDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEsMjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMsMjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQs''@;'; put 'put ''MjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1''@;'; put 'put ''MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAsMzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODksMzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgs''@;'; put 'put ''MzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1''@;'; put 'put ''MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgsMzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQsMzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIs''@;'; put 'put ''MzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2''@;'; put 'put ''MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgsMzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEsMzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIs''@;'; put 'put ''MzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1''@;'; put 'put ''NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUsMzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMsMzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcs''@;'; put 'put ''MzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2''@;'; put 'put ''MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAsMzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYsMzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMs''@;'; put 'put ''MzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2''@;'; put 'put ''NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUsMzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIsMzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYs''@;'; put 'put ''MzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4''@;'; put 'put ''MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQsMzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5MjgsMzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAs''@;'; put 'put ''MzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzRlMywzNDAyMiwzMzk4MSwzNDAwMywzMzk5NCwzMzk4MywzMzk3OCwzNDAxNiwzMzk1MywzMzk3NywzMzk3MiwzMzk0MywzNDAyMSwzNDAxOSwzNDA2MCwyOTk2NSwzNDEwNCwzNDAzMiwzNDEwNSwzNDA3OSwzNDEwNiwzNjY3''@;'; put 'put ''NywzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MSwzNjY4MiwzNjY4MywzNjY4NCwzNjY4NSwzNjY4NiwzNjY4NywzNjY4OCwzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NCwzNjY5NSwzNjY5NiwzNjY5NywzNjY5OCwzNjY5OSwzNjcwMCwzNjcwMSwzNjcwMiwzNjcwMywzNjcwNCwz''@;'; put 'put ''NjcwNSwzNjcwNiwzNjcwNywzNjcwOCwzNjcwOSwzNjcxNCwzNjczNiwzNjc0OCwzNjc1NCwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MCwzNjc3MiwzNjc3MywzNjc3NCwzNjc3NSwzNjc3OCwzNjc4MCwzNjc4MSwzNjc4MiwzNjc4MywzNjc4NiwzNjc4NywzNjc4OCwzNjc4OSwzNjc5MSwzNjc5''@;'; put 'put ''MiwzNjc5NCwzNjc5NSwzNjc5NiwzNjc5OSwzNjgwMCwzNjgwMywzNjgwNiwzNjgwOSwzNjgxMCwzNjgxMSwzNjgxMiwzNjgxMywzNjgxNSwzNjgxOCwzNjgyMiwzNjgyMywzNjgyNiwzNjgzMiwzNjgzMywzNjgzNSwzNjgzOSwzNjg0NCwzNjg0NywzNjg0OSwzNjg1MCwzNjg1MiwzNjg1Mywz''@;'; put 'put ''Njg1NCwzNjg1OCwzNjg1OSwzNjg2MCwzNjg2MiwzNjg2MywzNjg3MSwzNjg3MiwzNjg3NiwzNjg3OCwzNjg4MywzNjg4NSwzNjg4OCwzNDEzNCwzNDEwNywzNDA0NywzNDA0NCwzNDEzNywzNDEyMCwzNDE1MiwzNDE0OCwzNDE0MiwzNDE3MCwzMDYyNiwzNDExNSwzNDE2MiwzNDE3MSwzNDIx''@;'; put 'put ''MiwzNDIxNiwzNDE4MywzNDE5MSwzNDE2OSwzNDIyMiwzNDIwNCwzNDE4MSwzNDIzMywzNDIzMSwzNDIyNCwzNDI1OSwzNDI0MSwzNDI2OCwzNDMwMywzNDM0MywzNDMwOSwzNDM0NSwzNDMyNiwzNDM2NCwyNDMxOCwyNDMyOCwyMjg0NCwyMjg0OSwzMjgyMywyMjg2OSwyMjg3NCwyMjg3Miwy''@;'; put 'put ''MTI2MywyMzU4NiwyMzU4OSwyMzU5NiwyMzYwNCwyNTE2NCwyNTE5NCwyNTI0NywyNTI3NSwyNTI5MCwyNTMwNiwyNTMwMywyNTMyNiwyNTM3OCwyNTMzNCwyNTQwMSwyNTQxOSwyNTQxMSwyNTUxNywyNTU5MCwyNTQ1NywyNTQ2NiwyNTQ4NiwyNTUyNCwyNTQ1MywyNTUxNiwyNTQ4MiwyNTQ0''@;'; put 'put ''OSwyNTUxOCwyNTUzMiwyNTU4NiwyNTU5MiwyNTU2OCwyNTU5OSwyNTU0MCwyNTU2NiwyNTU1MCwyNTY4MiwyNTU0MiwyNTUzNCwyNTY2OSwyNTY2NSwyNTYxMSwyNTYyNywyNTYzMiwyNTYxMiwyNTYzOCwyNTYzMywyNTY5NCwyNTczMiwyNTcwOSwyNTc1MCwzNjg4OSwzNjg5MiwzNjg5OSwz''@;'; put 'put ''NjkwMCwzNjkwMSwzNjkwMywzNjkwNCwzNjkwNSwzNjkwNiwzNjkwNywzNjkwOCwzNjkxMiwzNjkxMywzNjkxNCwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyMSwzNjkyMiwzNjkyNSwzNjkyNywzNjkyOCwzNjkzMSwzNjkzMywzNjkzNCwzNjkzNiwzNjkzNywzNjkzOCwzNjkzOSwzNjk0MCwzNjk0''@;'; put 'put ''MiwzNjk0OCwzNjk0OSwzNjk1MCwzNjk1MywzNjk1NCwzNjk1NiwzNjk1NywzNjk1OCwzNjk1OSwzNjk2MCwzNjk2MSwzNjk2NCwzNjk2NiwzNjk2NywzNjk2OSwzNjk3MCwzNjk3MSwzNjk3MiwzNjk3NSwzNjk3NiwzNjk3NywzNjk3OCwzNjk3OSwzNjk4MiwzNjk4MywzNjk4NCwzNjk4NSwz''@;'; put 'put ''Njk4NiwzNjk4NywzNjk4OCwzNjk5MCwzNjk5MywzNjk5NiwzNjk5NywzNjk5OCwzNjk5OSwzNzAwMSwzNzAwMiwzNzAwNCwzNzAwNSwzNzAwNiwzNzAwNywzNzAwOCwzNzAxMCwzNzAxMiwzNzAxNCwzNzAxNiwzNzAxOCwzNzAyMCwzNzAyMiwzNzAyMywzNzAyNCwzNzAyOCwzNzAyOSwzNzAz''@;'; put 'put ''MSwzNzAzMiwzNzAzMywzNzAzNSwzNzAzNywzNzA0MiwzNzA0NywzNzA1MiwzNzA1MywzNzA1NSwzNzA1NiwyNTcyMiwyNTc4MywyNTc4NCwyNTc1MywyNTc4NiwyNTc5MiwyNTgwOCwyNTgxNSwyNTgyOCwyNTgyNiwyNTg2NSwyNTg5MywyNTkwMiwyNDMzMSwyNDUzMCwyOTk3NywyNDMzNywy''@;'; put 'put ''MTM0MywyMTQ4OSwyMTUwMSwyMTQ4MSwyMTQ4MCwyMTQ5OSwyMTUyMiwyMTUyNiwyMTUxMCwyMTU3OSwyMTU4NiwyMTU4NywyMTU4OCwyMTU5MCwyMTU3MSwyMTUzNywyMTU5MSwyMTU5MywyMTUzOSwyMTU1NCwyMTYzNCwyMTY1MiwyMTYyMywyMTYxNywyMTYwNCwyMTY1OCwyMTY1OSwyMTYz''@;'; put 'put ''NiwyMTYyMiwyMTYwNiwyMTY2MSwyMTcxMiwyMTY3NywyMTY5OCwyMTY4NCwyMTcxNCwyMTY3MSwyMTY3MCwyMTcxNSwyMTcxNiwyMTYxOCwyMTY2NywyMTcxNywyMTY5MSwyMTY5NSwyMTcwOCwyMTcyMSwyMTcyMiwyMTcyNCwyMTY3MywyMTY3NCwyMTY2OCwyMTcyNSwyMTcxMSwyMTcyNiwy''@;'; put 'put ''MTc4NywyMTczNSwyMTc5MiwyMTc1NywyMTc4MCwyMTc0NywyMTc5NCwyMTc5NSwyMTc3NSwyMTc3NywyMTc5OSwyMTgwMiwyMTg2MywyMTkwMywyMTk0MSwyMTgzMywyMTg2OSwyMTgyNSwyMTg0NSwyMTgyMywyMTg0MCwyMTgyMCwzNzA1OCwzNzA1OSwzNzA2MiwzNzA2NCwzNzA2NSwzNzA2''@;'; put 'put ''NywzNzA2OCwzNzA2OSwzNzA3NCwzNzA3NiwzNzA3NywzNzA3OCwzNzA4MCwzNzA4MSwzNzA4MiwzNzA4NiwzNzA4NywzNzA4OCwzNzA5MSwzNzA5MiwzNzA5MywzNzA5NywzNzA5OCwzNzEwMCwzNzEwMiwzNzEwNCwzNzEwNSwzNzEwNiwzNzEwNywzNzEwOSwzNzExMCwzNzExMSwzNzExMywz''@;'; put 'put ''NzExNCwzNzExNSwzNzExNiwzNzExOSwzNzEyMCwzNzEyMSwzNzEyMywzNzEyNSwzNzEyNiwzNzEyNywzNzEyOCwzNzEyOSwzNzEzMCwzNzEzMSwzNzEzMiwzNzEzMywzNzEzNCwzNzEzNSwzNzEzNiwzNzEzNywzNzEzOCwzNzEzOSwzNzE0MCwzNzE0MSwzNzE0MiwzNzE0MywzNzE0NCwzNzE0''@;'; put 'put ''NiwzNzE0NywzNzE0OCwzNzE0OSwzNzE1MSwzNzE1MiwzNzE1MywzNzE1NiwzNzE1NywzNzE1OCwzNzE1OSwzNzE2MCwzNzE2MSwzNzE2MiwzNzE2MywzNzE2NCwzNzE2NSwzNzE2NiwzNzE2OCwzNzE3MCwzNzE3MSwzNzE3MiwzNzE3MywzNzE3NCwzNzE3NSwzNzE3NiwzNzE3OCwzNzE3OSwz''@;'; put 'put ''NzE4MCwzNzE4MSwzNzE4MiwzNzE4MywzNzE4NCwzNzE4NSwzNzE4NiwzNzE4OCwyMTgxNSwyMTg0NiwyMTg3NywyMTg3OCwyMTg3OSwyMTgxMSwyMTgwOCwyMTg1MiwyMTg5OSwyMTk3MCwyMTg5MSwyMTkzNywyMTk0NSwyMTg5NiwyMTg4OSwyMTkxOSwyMTg4NiwyMTk3NCwyMTkwNSwyMTg4''@;'; put 'put ''MywyMTk4MywyMTk0OSwyMTk1MCwyMTkwOCwyMTkxMywyMTk5NCwyMjAwNywyMTk2MSwyMjA0NywyMTk2OSwyMTk5NSwyMTk5NiwyMTk3MiwyMTk5MCwyMTk4MSwyMTk1NiwyMTk5OSwyMTk4OSwyMjAwMiwyMjAwMywyMTk2NCwyMTk2NSwyMTk5MiwyMjAwNSwyMTk4OCwzNjc1NiwyMjA0Niwy''@;'; put 'put ''MjAyNCwyMjAyOCwyMjAxNywyMjA1MiwyMjA1MSwyMjAxNCwyMjAxNiwyMjA1NSwyMjA2MSwyMjEwNCwyMjA3MywyMjEwMywyMjA2MCwyMjA5MywyMjExNCwyMjEwNSwyMjEwOCwyMjA5MiwyMjEwMCwyMjE1MCwyMjExNiwyMjEyOSwyMjEyMywyMjEzOSwyMjE0MCwyMjE0OSwyMjE2MywyMjE5''@;'; put 'put ''MSwyMjIyOCwyMjIzMSwyMjIzNywyMjI0MSwyMjI2MSwyMjI1MSwyMjI2NSwyMjI3MSwyMjI3NiwyMjI4MiwyMjI4MSwyMjMwMCwyNDA3OSwyNDA4OSwyNDA4NCwyNDA4MSwyNDExMywyNDEyMywyNDEyNCwzNzE4OSwzNzE5MSwzNzE5MiwzNzIwMSwzNzIwMywzNzIwNCwzNzIwNSwzNzIwNiwz''@;'; put 'put ''NzIwOCwzNzIwOSwzNzIxMSwzNzIxMiwzNzIxNSwzNzIxNiwzNzIyMiwzNzIyMywzNzIyNCwzNzIyNywzNzIyOSwzNzIzNSwzNzI0MiwzNzI0MywzNzI0NCwzNzI0OCwzNzI0OSwzNzI1MCwzNzI1MSwzNzI1MiwzNzI1NCwzNzI1NiwzNzI1OCwzNzI2MiwzNzI2MywzNzI2NywzNzI2OCwzNzI2''@;'; put 'put ''OSwzNzI3MCwzNzI3MSwzNzI3MiwzNzI3MywzNzI3NiwzNzI3NywzNzI3OCwzNzI3OSwzNzI4MCwzNzI4MSwzNzI4NCwzNzI4NSwzNzI4NiwzNzI4NywzNzI4OCwzNzI4OSwzNzI5MSwzNzI5MiwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwMywzNzMwNCwzNzMwNSwzNzMwNywz''@;'; put 'put ''NzMwOCwzNzMwOSwzNzMxMCwzNzMxMSwzNzMxMiwzNzMxMywzNzMxNCwzNzMxNSwzNzMxNiwzNzMxNywzNzMxOCwzNzMyMCwzNzMyMywzNzMyOCwzNzMzMCwzNzMzMSwzNzMzMiwzNzMzMywzNzMzNCwzNzMzNSwzNzMzNiwzNzMzNywzNzMzOCwzNzMzOSwzNzM0MSwzNzM0MiwzNzM0MywzNzM0''@;'; put 'put ''NCwzNzM0NSwzNzM0NiwzNzM0NywzNzM0OCwzNzM0OSwyNDExOSwyNDEzMiwyNDE0OCwyNDE1NSwyNDE1OCwyNDE2MSwyMzY5MiwyMzY3NCwyMzY5MywyMzY5NiwyMzcwMiwyMzY4OCwyMzcwNCwyMzcwNSwyMzY5NywyMzcwNiwyMzcwOCwyMzczMywyMzcxNCwyMzc0MSwyMzcyNCwyMzcyMywy''@;'; put 'put ''MzcyOSwyMzcxNSwyMzc0NSwyMzczNSwyMzc0OCwyMzc2MiwyMzc4MCwyMzc1NSwyMzc4MSwyMzgxMCwyMzgxMSwyMzg0NywyMzg0NiwyMzg1NCwyMzg0NCwyMzgzOCwyMzgxNCwyMzgzNSwyMzg5NiwyMzg3MCwyMzg2MCwyMzg2OSwyMzkxNiwyMzg5OSwyMzkxOSwyMzkwMSwyMzkxNSwyMzg4''@;'; put 'put ''MywyMzg4MiwyMzkxMywyMzkyNCwyMzkzOCwyMzk2MSwyMzk2NSwzNTk1NSwyMzk5MSwyNDAwNSwyNDQzNSwyNDQzOSwyNDQ1MCwyNDQ1NSwyNDQ1NywyNDQ2MCwyNDQ2OSwyNDQ3MywyNDQ3NiwyNDQ4OCwyNDQ5MywyNDUwMSwyNDUwOCwzNDkxNCwyNDQxNywyOTM1NywyOTM2MCwyOTM2NCwy''@;'; put 'put ''OTM2NywyOTM2OCwyOTM3OSwyOTM3NywyOTM5MCwyOTM4OSwyOTM5NCwyOTQxNiwyOTQyMywyOTQxNywyOTQyNiwyOTQyOCwyOTQzMSwyOTQ0MSwyOTQyNywyOTQ0MywyOTQzNCwzNzM1MCwzNzM1MSwzNzM1MiwzNzM1MywzNzM1NCwzNzM1NSwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2''@;'; put 'put ''MCwzNzM2MSwzNzM2MiwzNzM2MywzNzM2NCwzNzM2NSwzNzM2NiwzNzM2NywzNzM2OCwzNzM2OSwzNzM3MCwzNzM3MSwzNzM3MiwzNzM3MywzNzM3NCwzNzM3NSwzNzM3NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM4Nywz''@;'; put 'put ''NzM4OCwzNzM4OSwzNzM5MCwzNzM5MSwzNzM5MiwzNzM5MywzNzM5NCwzNzM5NSwzNzM5NiwzNzM5NywzNzM5OCwzNzM5OSwzNzQwMCwzNzQwMSwzNzQwMiwzNzQwMywzNzQwNCwzNzQwNSwzNzQwNiwzNzQwNywzNzQwOCwzNzQwOSwzNzQxMCwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQx''@;'; put 'put ''NSwzNzQxNiwzNzQxNywzNzQxOCwzNzQxOSwzNzQyMCwzNzQyMSwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNSwzNzQyNiwzNzQyNywzNzQyOCwzNzQyOSwzNzQzMCwzNzQzMSwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNSwzNzQzNiwzNzQzNywzNzQzOCwzNzQzOSwzNzQ0MCwzNzQ0MSwzNzQ0Miwz''@;'; put 'put ''NzQ0MywzNzQ0NCwzNzQ0NSwyOTQzNSwyOTQ2MywyOTQ1OSwyOTQ3MywyOTQ1MCwyOTQ3MCwyOTQ2OSwyOTQ2MSwyOTQ3NCwyOTQ5NywyOTQ3NywyOTQ4NCwyOTQ5NiwyOTQ4OSwyOTUyMCwyOTUxNywyOTUyNywyOTUzNiwyOTU0OCwyOTU1MSwyOTU2NiwzMzMwNywyMjgyMSwzOTE0MywyMjgy''@;'; put 'put ''MCwyMjc4NiwzOTI2NywzOTI3MSwzOTI3MiwzOTI3MywzOTI3NCwzOTI3NSwzOTI3NiwzOTI4NCwzOTI4NywzOTI5MywzOTI5NiwzOTMwMCwzOTMwMywzOTMwNiwzOTMwOSwzOTMxMiwzOTMxMywzOTMxNSwzOTMxNiwzOTMxNywyNDE5MiwyNDIwOSwyNDIwMywyNDIxNCwyNDIyOSwyNDIyNCwy''@;'; put 'put ''NDI0OSwyNDI0NSwyNDI1NCwyNDI0MywzNjE3OSwyNDI3NCwyNDI3MywyNDI4MywyNDI5NiwyNDI5OCwzMzIxMCwyNDUxNiwyNDUyMSwyNDUzNCwyNDUyNywyNDU3OSwyNDU1OCwyNDU4MCwyNDU0NSwyNDU0OCwyNDU3NCwyNDU4MSwyNDU4MiwyNDU1NCwyNDU1NywyNDU2OCwyNDYwMSwyNDYy''@;'; put 'put ''OSwyNDYxNCwyNDYwMywyNDU5MSwyNDU4OSwyNDYxNywyNDYxOSwyNDU4NiwyNDYzOSwyNDYwOSwyNDY5NiwyNDY5NywyNDY5OSwyNDY5OCwyNDY0MiwzNzQ0NiwzNzQ0NywzNzQ0OCwzNzQ0OSwzNzQ1MCwzNzQ1MSwzNzQ1MiwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NiwzNzQ1NywzNzQ1OCwz''@;'; put 'put ''NzQ1OSwzNzQ2MCwzNzQ2MSwzNzQ2MiwzNzQ2MywzNzQ2NCwzNzQ2NSwzNzQ2NiwzNzQ2NywzNzQ2OCwzNzQ2OSwzNzQ3MCwzNzQ3MSwzNzQ3MiwzNzQ3MywzNzQ3NCwzNzQ3NSwzNzQ3NiwzNzQ3NywzNzQ3OCwzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4MiwzNzQ4MywzNzQ4NCwzNzQ4NSwzNzQ4''@;'; put 'put ''NiwzNzQ4NywzNzQ4OCwzNzQ4OSwzNzQ5MCwzNzQ5MSwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OCwzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMiwzNzUwMywzNzUwNCwzNzUwNSwzNzUwNiwzNzUwNywzNzUwOCwzNzUwOSwzNzUxMCwzNzUxMSwzNzUxMiwzNzUxMywzNzUxNCwz''@;'; put 'put ''NzUxNSwzNzUxNiwzNzUxNywzNzUxOSwzNzUyMCwzNzUyMSwzNzUyMiwzNzUyMywzNzUyNCwzNzUyNSwzNzUyNiwzNzUyNywzNzUyOCwzNzUyOSwzNzUzMCwzNzUzMSwzNzUzMiwzNzUzMywzNzUzNCwzNzUzNSwzNzUzNiwzNzUzNywzNzUzOCwzNzUzOSwzNzU0MCwzNzU0MSwzNzU0MiwzNzU0''@;'; put 'put ''MywyNDY4MiwyNDcwMSwyNDcyNiwyNDczMCwyNDc0OSwyNDczMywyNDcwNywyNDcyMiwyNDcxNiwyNDczMSwyNDgxMiwyNDc2MywyNDc1MywyNDc5NywyNDc5MiwyNDc3NCwyNDc5NCwyNDc1NiwyNDg2NCwyNDg3MCwyNDg1MywyNDg2NywyNDgyMCwyNDgzMiwyNDg0NiwyNDg3NSwyNDkwNiwy''@;'; put 'put ''NDk0OSwyNTAwNCwyNDk4MCwyNDk5OSwyNTAxNSwyNTA0NCwyNTA3NywyNDU0MSwzODU3OSwzODM3NywzODM3OSwzODM4NSwzODM4NywzODM4OSwzODM5MCwzODM5NiwzODM5OCwzODQwMywzODQwNCwzODQwNiwzODQwOCwzODQxMCwzODQxMSwzODQxMiwzODQxMywzODQxNSwzODQxOCwzODQy''@;'; put 'put ''MSwzODQyMiwzODQyMywzODQyNSwzODQyNiwyMDAxMiwyOTI0NywyNTEwOSwyNzcwMSwyNzczMiwyNzc0MCwyNzcyMiwyNzgxMSwyNzc4MSwyNzc5MiwyNzc5NiwyNzc4OCwyNzc1MiwyNzc1MywyNzc2NCwyNzc2NiwyNzc4MiwyNzgxNywyNzg1NiwyNzg2MCwyNzgyMSwyNzg5NSwyNzg5Niwy''@;'; put 'put ''Nzg4OSwyNzg2MywyNzgyNiwyNzg3MiwyNzg2MiwyNzg5OCwyNzg4MywyNzg4NiwyNzgyNSwyNzg1OSwyNzg4NywyNzkwMiwzNzU0NCwzNzU0NSwzNzU0NiwzNzU0NywzNzU0OCwzNzU0OSwzNzU1MSwzNzU1MiwzNzU1MywzNzU1NCwzNzU1NSwzNzU1NiwzNzU1NywzNzU1OCwzNzU1OSwzNzU2''@;'; put 'put ''MCwzNzU2MSwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NiwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MiwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NywzNzU3OCwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4MywzNzU4NCwzNzU4NSwzNzU4NiwzNzU4NywzNzU4OCwz''@;'; put 'put ''NzU4OSwzNzU5MCwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NCwzNzU5NSwzNzU5NiwzNzU5NywzNzU5OCwzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMiwzNzYwMywzNzYwNCwzNzYwNSwzNzYwNiwzNzYwNywzNzYwOCwzNzYwOSwzNzYxMCwzNzYxMSwzNzYxMiwzNzYxMywzNzYxNCwzNzYxNSwzNzYx''@;'; put 'put ''NiwzNzYxNywzNzYxOCwzNzYxOSwzNzYyMCwzNzYyMSwzNzYyMiwzNzYyMywzNzYyNCwzNzYyNSwzNzYyNiwzNzYyNywzNzYyOCwzNzYyOSwzNzYzMCwzNzYzMSwzNzYzMiwzNzYzMywzNzYzNCwzNzYzNSwzNzYzNiwzNzYzNywzNzYzOCwzNzYzOSwzNzY0MCwzNzY0MSwyNzk2MSwyNzk0Mywy''@;'; put 'put ''NzkxNiwyNzk3MSwyNzk3NiwyNzkxMSwyNzkwOCwyNzkyOSwyNzkxOCwyNzk0NywyNzk4MSwyNzk1MCwyNzk1NywyNzkzMCwyNzk4MywyNzk4NiwyNzk4OCwyNzk1NSwyODA0OSwyODAxNSwyODA2MiwyODA2NCwyNzk5OCwyODA1MSwyODA1MiwyNzk5NiwyOGUzLDI4MDI4LDI4MDAzLDI4MTg2''@;'; put 'put ''LDI4MTAzLDI4MTAxLDI4MTI2LDI4MTc0LDI4MDk1LDI4MTI4LDI4MTc3LDI4MTM0LDI4MTI1LDI4MTIxLDI4MTgyLDI4MDc1LDI4MTcyLDI4MDc4LDI4MjAzLDI4MjcwLDI4MjM4LDI4MjY3LDI4MzM4LDI4MjU1LDI4Mjk0LDI4MjQzLDI4MjQ0LDI4MjEwLDI4MTk3LDI4MjI4LDI4MzgzLDI4''@;'; put 'put ''MzM3LDI4MzEyLDI4Mzg0LDI4NDYxLDI4Mzg2LDI4MzI1LDI4MzI3LDI4MzQ5LDI4MzQ3LDI4MzQzLDI4Mzc1LDI4MzQwLDI4MzY3LDI4MzAzLDI4MzU0LDI4MzE5LDI4NTE0LDI4NDg2LDI4NDg3LDI4NDUyLDI4NDM3LDI4NDA5LDI4NDYzLDI4NDcwLDI4NDkxLDI4NTMyLDI4NDU4LDI4NDI1''@;'; put 'put ''LDI4NDU3LDI4NTUzLDI4NTU3LDI4NTU2LDI4NTM2LDI4NTMwLDI4NTQwLDI4NTM4LDI4NjI1LDM3NjQyLDM3NjQzLDM3NjQ0LDM3NjQ1LDM3NjQ2LDM3NjQ3LDM3NjQ4LDM3NjQ5LDM3NjUwLDM3NjUxLDM3NjUyLDM3NjUzLDM3NjU0LDM3NjU1LDM3NjU2LDM3NjU3LDM3NjU4LDM3NjU5LDM3''@;'; put 'put ''NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY0LDM3NjY1LDM3NjY2LDM3NjY3LDM3NjY4LDM3NjY5LDM3NjcwLDM3NjcxLDM3NjcyLDM3NjczLDM3Njc0LDM3Njc1LDM3Njc2LDM3Njc3LDM3Njc4LDM3Njc5LDM3NjgwLDM3NjgxLDM3NjgyLDM3NjgzLDM3Njg0LDM3Njg1LDM3Njg2LDM3Njg3''@;'; put 'put ''LDM3Njg4LDM3Njg5LDM3NjkwLDM3NjkxLDM3NjkyLDM3NjkzLDM3Njk1LDM3Njk2LDM3Njk3LDM3Njk4LDM3Njk5LDM3NzAwLDM3NzAxLDM3NzAyLDM3NzAzLDM3NzA0LDM3NzA1LDM3NzA2LDM3NzA3LDM3NzA4LDM3NzA5LDM3NzEwLDM3NzExLDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE1LDM3''@;'; put 'put ''NzE2LDM3NzE3LDM3NzE4LDM3NzE5LDM3NzIwLDM3NzIxLDM3NzIyLDM3NzIzLDM3NzI0LDM3NzI1LDM3NzI2LDM3NzI3LDM3NzI4LDM3NzI5LDM3NzMwLDM3NzMxLDM3NzMyLDM3NzMzLDM3NzM0LDM3NzM1LDM3NzM2LDM3NzM3LDM3NzM5LDI4NjE3LDI4NTgzLDI4NjAxLDI4NTk4LDI4NjEw''@;'; put 'put ''LDI4NjQxLDI4NjU0LDI4NjM4LDI4NjQwLDI4NjU1LDI4Njk4LDI4NzA3LDI4Njk5LDI4NzI5LDI4NzI1LDI4NzUxLDI4NzY2LDIzNDI0LDIzNDI4LDIzNDQ1LDIzNDQzLDIzNDYxLDIzNDgwLDI5OTk5LDM5NTgyLDI1NjUyLDIzNTI0LDIzNTM0LDM1MTIwLDIzNTM2LDM2NDIzLDM1NTkxLDM2''@;'; put 'put ''NzkwLDM2ODE5LDM2ODIxLDM2ODM3LDM2ODQ2LDM2ODM2LDM2ODQxLDM2ODM4LDM2ODUxLDM2ODQwLDM2ODY5LDM2ODY4LDM2ODc1LDM2OTAyLDM2ODgxLDM2ODc3LDM2ODg2LDM2ODk3LDM2OTE3LDM2OTE4LDM2OTA5LDM2OTExLDM2OTMyLDM2OTQ1LDM2OTQ2LDM2OTQ0LDM2OTY4LDM2OTUy''@;'; put 'put ''LDM2OTYyLDM2OTU1LDI2Mjk3LDM2OTgwLDM2OTg5LDM2OTk0LDM3ZTMsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2''@;'; put 'put ''NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcsMzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMsMzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAs''@;'; put 'put ''Mzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3''@;'; put 'put ''ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMsMzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDksMzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYs''@;'; put 'put ''Mzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5''@;'; put 'put ''NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjNlMywyMzAzMywyMzA1MiwyMzA0OSwyMzA5MCwyMzA5MiwyMzA1NywyMzA3NSwyMzA1OSwyMzEwNCwyMzE0MywyMzExNCwyMzEyNSwyMzEwMCwyMzEzOCwyMzE1NywzMzAwNCwyMzIxMCwyMzE5NSwyMzE1OSwy''@;'; put 'put ''MzE2MiwyMzIzMCwyMzI3NSwyMzIxOCwyMzI1MCwyMzI1MiwyMzIyNCwyMzI2NCwyMzI2NywyMzI4MSwyMzI1NCwyMzI3MCwyMzI1NiwyMzI2MCwyMzMwNSwyMzMxOSwyMzMxOCwyMzM0NiwyMzM1MSwyMzM2MCwyMzU3MywyMzU4MCwyMzM4NiwyMzM5NywyMzQxMSwyMzM3NywyMzM3OSwyMzM5''@;'; put 'put ''NCwzOTU0MSwzOTU0MywzOTU0NCwzOTU0NiwzOTU1MSwzOTU0OSwzOTU1MiwzOTU1MywzOTU1NywzOTU2MCwzOTU2MiwzOTU2OCwzOTU3MCwzOTU3MSwzOTU3NCwzOTU3NiwzOTU3OSwzOTU4MCwzOTU4MSwzOTU4MywzOTU4NCwzOTU4NiwzOTU4NywzOTU4OSwzOTU5MSwzMjQxNSwzMjQxNywz''@;'; put 'put ''MjQxOSwzMjQyMSwzMjQyNCwzMjQyNSwzNzgzOCwzNzgzOSwzNzg0MCwzNzg0MSwzNzg0MiwzNzg0MywzNzg0NCwzNzg0NSwzNzg0NywzNzg0OCwzNzg0OSwzNzg1MCwzNzg1MSwzNzg1MiwzNzg1MywzNzg1NCwzNzg1NSwzNzg1NiwzNzg1NywzNzg1OCwzNzg1OSwzNzg2MCwzNzg2MSwzNzg2''@;'; put 'put ''MiwzNzg2MywzNzg2NCwzNzg2NSwzNzg2NiwzNzg2NywzNzg2OCwzNzg2OSwzNzg3MCwzNzg3MSwzNzg3MiwzNzg3MywzNzg3NCwzNzg3NSwzNzg3NiwzNzg3NywzNzg3OCwzNzg3OSwzNzg4MCwzNzg4MSwzNzg4MiwzNzg4MywzNzg4NCwzNzg4NSwzNzg4NiwzNzg4NywzNzg4OCwzNzg4OSwz''@;'; put 'put ''Nzg5MCwzNzg5MSwzNzg5MiwzNzg5MywzNzg5NCwzNzg5NSwzNzg5NiwzNzg5NywzNzg5OCwzNzg5OSwzNzkwMCwzNzkwMSwzNzkwMiwzNzkwMywzNzkwNCwzNzkwNSwzNzkwNiwzNzkwNywzNzkwOCwzNzkwOSwzNzkxMCwzNzkxMSwzNzkxMiwzNzkxMywzNzkxNCwzNzkxNSwzNzkxNiwzNzkx''@;'; put 'put ''NywzNzkxOCwzNzkxOSwzNzkyMCwzNzkyMSwzNzkyMiwzNzkyMywzNzkyNCwzNzkyNSwzNzkyNiwzNzkyNywzNzkyOCwzNzkyOSwzNzkzMCwzNzkzMSwzNzkzMiwzNzkzMywzNzkzNCwzMjQyOSwzMjQzMiwzMjQ0NiwzMjQ0OCwzMjQ0OSwzMjQ1MCwzMjQ1NywzMjQ1OSwzMjQ2MCwzMjQ2NCwz''@;'; put 'put ''MjQ2OCwzMjQ3MSwzMjQ3NSwzMjQ4MCwzMjQ4MSwzMjQ4OCwzMjQ5MSwzMjQ5NCwzMjQ5NSwzMjQ5NywzMjQ5OCwzMjUyNSwzMjUwMiwzMjUwNiwzMjUwNywzMjUxMCwzMjUxMywzMjUxNCwzMjUxNSwzMjUxOSwzMjUyMCwzMjUyMywzMjUyNCwzMjUyNywzMjUyOSwzMjUzMCwzMjUzNSwzMjUz''@;'; put 'put ''NywzMjU0MCwzMjUzOSwzMjU0MywzMjU0NSwzMjU0NiwzMjU0NywzMjU0OCwzMjU0OSwzMjU1MCwzMjU1MSwzMjU1NCwzMjU1NSwzMjU1NiwzMjU1NywzMjU1OSwzMjU2MCwzMjU2MSwzMjU2MiwzMjU2MywzMjU2NSwyNDE4NiwzMDA3OSwyNDAyNywzMDAxNCwzNzAxMywyOTU4MiwyOTU4NSwy''@;'; put 'put ''OTYxNCwyOTYwMiwyOTU5OSwyOTY0NywyOTYzNCwyOTY0OSwyOTYyMywyOTYxOSwyOTYzMiwyOTY0MSwyOTY0MCwyOTY2OSwyOTY1NywzOTAzNiwyOTcwNiwyOTY3MywyOTY3MSwyOTY2MiwyOTYyNiwyOTY4MiwyOTcxMSwyOTczOCwyOTc4NywyOTczNCwyOTczMywyOTczNiwyOTc0NCwyOTc0''@;'; put 'put ''MiwyOTc0MCwzNzkzNSwzNzkzNiwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0MSwzNzk0MiwzNzk0MywzNzk0NCwzNzk0NSwzNzk0NiwzNzk0NywzNzk0OCwzNzk0OSwzNzk1MSwzNzk1MiwzNzk1MywzNzk1NCwzNzk1NSwzNzk1NiwzNzk1NywzNzk1OCwzNzk1OSwzNzk2MCwzNzk2MSwz''@;'; put 'put ''Nzk2MiwzNzk2MywzNzk2NCwzNzk2NSwzNzk2NiwzNzk2NywzNzk2OCwzNzk2OSwzNzk3MCwzNzk3MSwzNzk3MiwzNzk3MywzNzk3NCwzNzk3NSwzNzk3NiwzNzk3NywzNzk3OCwzNzk3OSwzNzk4MCwzNzk4MSwzNzk4MiwzNzk4MywzNzk4NCwzNzk4NSwzNzk4NiwzNzk4NywzNzk4OCwzNzk4''@;'; put 'put ''OSwzNzk5MCwzNzk5MSwzNzk5MiwzNzk5MywzNzk5NCwzNzk5NiwzNzk5NywzNzk5OCwzNzk5OSwzOGUzLDM4MDAxLDM4MDAyLDM4MDAzLDM4MDA0LDM4MDA1LDM4MDA2LDM4MDA3LDM4MDA4LDM4MDA5LDM4MDEwLDM4MDExLDM4MDEyLDM4MDEzLDM4MDE0LDM4MDE1LDM4MDE2LDM4MDE3LDM4''@;'; put 'put ''MDE4LDM4MDE5LDM4MDIwLDM4MDMzLDM4MDM4LDM4MDQwLDM4MDg3LDM4MDk1LDM4MDk5LDM4MTAwLDM4MTA2LDM4MTE4LDM4MTM5LDM4MTcyLDM4MTc2LDI5NzIzLDI5NzIyLDI5NzYxLDI5Nzg4LDI5NzgzLDI5NzgxLDI5Nzg1LDI5ODE1LDI5ODA1LDI5ODIyLDI5ODUyLDI5ODM4LDI5ODI0''@;'; put 'put ''LDI5ODI1LDI5ODMxLDI5ODM1LDI5ODU0LDI5ODY0LDI5ODY1LDI5ODQwLDI5ODYzLDI5OTA2LDI5ODgyLDM4ODkwLDM4ODkxLDM4ODkyLDI2NDQ0LDI2NDUxLDI2NDYyLDI2NDQwLDI2NDczLDI2NTMzLDI2NTAzLDI2NDc0LDI2NDgzLDI2NTIwLDI2NTM1LDI2NDg1LDI2NTM2LDI2NTI2LDI2''@;'; put 'put ''NTQxLDI2NTA3LDI2NDg3LDI2NDkyLDI2NjA4LDI2NjMzLDI2NTg0LDI2NjM0LDI2NjAxLDI2NTQ0LDI2NjM2LDI2NTg1LDI2NTQ5LDI2NTg2LDI2NTQ3LDI2NTg5LDI2NjI0LDI2NTYzLDI2NTUyLDI2NTk0LDI2NjM4LDI2NTYxLDI2NjIxLDI2Njc0LDI2Njc1LDI2NzIwLDI2NzIxLDI2NzAy''@;'; put 'put ''LDI2NzIyLDI2NjkyLDI2NzI0LDI2NzU1LDI2NjUzLDI2NzA5LDI2NzI2LDI2Njg5LDI2NzI3LDI2Njg4LDI2Njg2LDI2Njk4LDI2Njk3LDI2NjY1LDI2ODA1LDI2NzY3LDI2NzQwLDI2NzQzLDI2NzcxLDI2NzMxLDI2ODE4LDI2OTkwLDI2ODc2LDI2OTExLDI2OTEyLDI2ODczLDM4MTgzLDM4''@;'; put 'put ''MTk1LDM4MjA1LDM4MjExLDM4MjE2LDM4MjE5LDM4MjI5LDM4MjM0LDM4MjQwLDM4MjU0LDM4MjYwLDM4MjYxLDM4MjYzLDM4MjY0LDM4MjY1LDM4MjY2LDM4MjY3LDM4MjY4LDM4MjY5LDM4MjcwLDM4MjcyLDM4MjczLDM4Mjc0LDM4Mjc1LDM4Mjc2LDM4Mjc3LDM4Mjc4LDM4Mjc5LDM4Mjgw''@;'; put 'put ''LDM4MjgxLDM4MjgyLDM4MjgzLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4Mjg3LDM4Mjg4LDM4Mjg5LDM4MjkwLDM4MjkxLDM4MjkyLDM4MjkzLDM4Mjk0LDM4Mjk1LDM4Mjk2LDM4Mjk3LDM4Mjk4LDM4Mjk5LDM4MzAwLDM4MzAxLDM4MzAyLDM4MzAzLDM4MzA0LDM4MzA1LDM4MzA2LDM4MzA3LDM4''@;'; put 'put ''MzA4LDM4MzA5LDM4MzEwLDM4MzExLDM4MzEyLDM4MzEzLDM4MzE0LDM4MzE1LDM4MzE2LDM4MzE3LDM4MzE4LDM4MzE5LDM4MzIwLDM4MzIxLDM4MzIyLDM4MzIzLDM4MzI0LDM4MzI1LDM4MzI2LDM4MzI3LDM4MzI4LDM4MzI5LDM4MzMwLDM4MzMxLDM4MzMyLDM4MzMzLDM4MzM0LDM4MzM1''@;'; put 'put ''LDM4MzM2LDM4MzM3LDM4MzM4LDM4MzM5LDM4MzQwLDM4MzQxLDM4MzQyLDM4MzQzLDM4MzQ0LDM4MzQ1LDM4MzQ2LDM4MzQ3LDI2OTE2LDI2ODY0LDI2ODkxLDI2ODgxLDI2OTY3LDI2ODUxLDI2ODk2LDI2OTkzLDI2OTM3LDI2OTc2LDI2OTQ2LDI2OTczLDI3MDEyLDI2OTg3LDI3MDA4LDI3''@;'; put 'put ''MDMyLDI3ZTMsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEsMjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMsMjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTks''@;'; put 'put ''MjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcyNjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1''@;'; put 'put ''MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3MjcsMzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3MzgsMzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEs''@;'; put 'put ''MzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgzNzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0''@;'; put 'put ''MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUsMzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgsMzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEs''@;'; put 'put ''Mzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1''@;'; put 'put ''MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIsMzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIsMjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAs''@;'; put 'put ''Mjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYxNjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYy''@;'; put 'put ''MDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAsMzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgsMzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQs''@;'; put 'put ''MzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkzMjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1''@;'; put 'put ''NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1NjksMzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUsMzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYs''@;'; put 'put ''Mzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2''@;'; put 'put ''MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMsMzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2NjcsMzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2Nzks''@;'; put 'put ''Mzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2''@;'; put 'put ''OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgsMzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEsMzI5OTksMzNlMywzMzAwMSwzMzAwMiwzMjk4NywzMjk2MiwzMjk2NCwz''@;'; put 'put ''Mjk4NSwzMjk3MywzMjk4MywyNjM4NCwzMjk4OSwzMzAwMywzMzAwOSwzMzAxMiwzMzAwNSwzMzAzNywzMzAzOCwzMzAxMCwzMzAyMCwyNjM4OSwzMzA0MiwzNTkzMCwzMzA3OCwzMzA1NCwzMzA2OCwzMzA0OCwzMzA3NCwzMzA5NiwzMzEwMCwzMzEwNywzMzE0MCwzMzExMywzMzExNCwzMzEz''@;'; put 'put ''NywzMzEyMCwzMzEyOSwzMzE0OCwzMzE0OSwzMzEzMywzMzEyNywyMjYwNSwyMzIyMSwzMzE2MCwzMzE1NCwzMzE2OSwyODM3MywzMzE4NywzMzE5NCwzMzIyOCwyNjQwNiwzMzIyNiwzMzIxMSwzODY4OSwzODY5MCwzODY5MSwzODY5MiwzODY5MywzODY5NCwzODY5NSwzODY5NiwzODY5Nywz''@;'; put 'put ''ODY5OSwzODcwMCwzODcwMiwzODcwMywzODcwNSwzODcwNywzODcwOCwzODcwOSwzODcxMCwzODcxMSwzODcxNCwzODcxNSwzODcxNiwzODcxNywzODcxOSwzODcyMCwzODcyMSwzODcyMiwzODcyMywzODcyNCwzODcyNSwzODcyNiwzODcyNywzODcyOCwzODcyOSwzODczMCwzODczMSwzODcz''@;'; put 'put ''MiwzODczMywzODczNCwzODczNSwzODczNiwzODczNywzODc0MCwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0OCwzODc0OSwzODc1MSwzODc1NSwzODc1NiwzODc1OCwzODc1OSwzODc2MCwzODc2MiwzODc2MywzODc2NCwzODc2NSwzODc2NiwzODc2NywzODc2OCwzODc2OSwzODc3MCwz''@;'; put 'put ''ODc3MywzODc3NSwzODc3NiwzODc3NywzODc3OCwzODc3OSwzODc4MSwzODc4MiwzODc4MywzODc4NCwzODc4NSwzODc4NiwzODc4NywzODc4OCwzODc5MCwzODc5MSwzODc5MiwzODc5MywzODc5NCwzODc5NiwzODc5OCwzODc5OSwzODgwMCwzODgwMywzODgwNSwzODgwNiwzODgwNywzODgw''@;'; put 'put ''OSwzODgxMCwzODgxMSwzODgxMiwzODgxMywzMzIxNywzMzE5MCwyNzQyOCwyNzQ0NywyNzQ0OSwyNzQ1OSwyNzQ2MiwyNzQ4MSwzOTEyMSwzOTEyMiwzOTEyMywzOTEyNSwzOTEyOSwzOTEzMCwyNzU3MSwyNDM4NCwyNzU4NiwzNTMxNSwyNmUzLDQwNzg1LDI2MDAzLDI2MDQ0LDI2MDU0LDI2''@;'; put 'put ''MDUyLDI2MDUxLDI2MDYwLDI2MDYyLDI2MDY2LDI2MDcwLDI4ODAwLDI4ODI4LDI4ODIyLDI4ODI5LDI4ODU5LDI4ODY0LDI4ODU1LDI4ODQzLDI4ODQ5LDI4OTA0LDI4ODc0LDI4OTQ0LDI4OTQ3LDI4OTUwLDI4OTc1LDI4OTc3LDI5MDQzLDI5MDIwLDI5MDMyLDI4OTk3LDI5MDQyLDI5MDAy''@;'; put 'put ''LDI5MDQ4LDI5MDUwLDI5MDgwLDI5MTA3LDI5MTA5LDI5MDk2LDI5MDg4LDI5MTUyLDI5MTQwLDI5MTU5LDI5MTc3LDI5MjEzLDI5MjI0LDI4NzgwLDI4OTUyLDI5MDMwLDI5MTEzLDI1MTUwLDI1MTQ5LDI1MTU1LDI1MTYwLDI1MTYxLDMxMDM1LDMxMDQwLDMxMDQ2LDMxMDQ5LDMxMDY3LDMx''@;'; put 'put ''MDY4LDMxMDU5LDMxMDY2LDMxMDc0LDMxMDYzLDMxMDcyLDMxMDg3LDMxMDc5LDMxMDk4LDMxMTA5LDMxMTE0LDMxMTMwLDMxMTQzLDMxMTU1LDI0NTI5LDI0NTI4LDM4ODE0LDM4ODE1LDM4ODE3LDM4ODE4LDM4ODIwLDM4ODIxLDM4ODIyLDM4ODIzLDM4ODI0LDM4ODI1LDM4ODI2LDM4ODI4''@;'; put 'put ''LDM4ODMwLDM4ODMyLDM4ODMzLDM4ODM1LDM4ODM3LDM4ODM4LDM4ODM5LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQzLDM4ODQ0LDM4ODQ1LDM4ODQ2LDM4ODQ3LDM4ODQ4LDM4ODQ5LDM4ODUwLDM4ODUxLDM4ODUyLDM4ODUzLDM4ODU0LDM4ODU1LDM4ODU2LDM4ODU3LDM4ODU4LDM4ODU5LDM4''@;'; put 'put ''ODYwLDM4ODYxLDM4ODYyLDM4ODYzLDM4ODY0LDM4ODY1LDM4ODY2LDM4ODY3LDM4ODY4LDM4ODY5LDM4ODcwLDM4ODcxLDM4ODcyLDM4ODczLDM4ODc0LDM4ODc1LDM4ODc2LDM4ODc3LDM4ODc4LDM4ODc5LDM4ODgwLDM4ODgxLDM4ODgyLDM4ODgzLDM4ODg0LDM4ODg1LDM4ODg4LDM4ODk0''@;'; put 'put ''LDM4ODk1LDM4ODk2LDM4ODk3LDM4ODk4LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA1LDM4OTA2LDM4OTA3LDM4OTA4LDM4OTA5LDM4OTEwLDM4OTExLDM4OTEyLDM4OTEzLDM4OTE0LDM4OTE1LDM4OTE2LDM4OTE3LDM4OTE4LDM4OTE5LDM4OTIwLDM4OTIxLDM4OTIyLDM4OTIzLDM4OTI0LDM4''@;'; put 'put ''OTI1LDM4OTI2LDI0NjM2LDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NjY1LDI0Njc1LDI0NzQ3LDI0ODM4LDI0ODQ1LDI0OTI1LDI1MDAxLDI0OTg5LDI1MDM1LDI1MDQxLDI1MDk0LDMyODk2LDMyODk1LDI3Nzk1LDI3ODk0LDI4MTU2LDMwNzEwLDMwNzEyLDMwNzIwLDMwNzI5LDMwNzQz''@;'; put 'put ''LDMwNzQ0LDMwNzM3LDI2MDI3LDMwNzY1LDMwNzQ4LDMwNzQ5LDMwNzc3LDMwNzc4LDMwNzc5LDMwNzUxLDMwNzgwLDMwNzU3LDMwNzY0LDMwNzU1LDMwNzYxLDMwNzk4LDMwODI5LDMwODA2LDMwODA3LDMwNzU4LDMwODAwLDMwNzkxLDMwNzk2LDMwODI2LDMwODc1LDMwODY3LDMwODc0LDMw''@;'; put 'put ''ODU1LDMwODc2LDMwODgxLDMwODgzLDMwODk4LDMwOTA1LDMwODg1LDMwOTMyLDMwOTM3LDMwOTIxLDMwOTU2LDMwOTYyLDMwOTgxLDMwOTY0LDMwOTk1LDMxMDEyLDMxMDA2LDMxMDI4LDQwODU5LDQwNjk3LDQwNjk5LDQwNzAwLDMwNDQ5LDMwNDY4LDMwNDc3LDMwNDU3LDMwNDcxLDMwNDcy''@;'; put 'put ''LDMwNDkwLDMwNDk4LDMwNDg5LDMwNTA5LDMwNTAyLDMwNTE3LDMwNTIwLDMwNTQ0LDMwNTQ1LDMwNTM1LDMwNTMxLDMwNTU0LDMwNTY4LDM4OTI3LDM4OTI4LDM4OTI5LDM4OTMwLDM4OTMxLDM4OTMyLDM4OTMzLDM4OTM0LDM4OTM1LDM4OTM2LDM4OTM3LDM4OTM4LDM4OTM5LDM4OTQwLDM4''@;'; put 'put ''OTQxLDM4OTQyLDM4OTQzLDM4OTQ0LDM4OTQ1LDM4OTQ2LDM4OTQ3LDM4OTQ4LDM4OTQ5LDM4OTUwLDM4OTUxLDM4OTUyLDM4OTUzLDM4OTU0LDM4OTU1LDM4OTU2LDM4OTU3LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYxLDM4OTYyLDM4OTYzLDM4OTY0LDM4OTY1LDM4OTY2LDM4OTY3LDM4OTY4''@;'; put 'put ''LDM4OTY5LDM4OTcwLDM4OTcxLDM4OTcyLDM4OTczLDM4OTc0LDM4OTc1LDM4OTc2LDM4OTc3LDM4OTc4LDM4OTc5LDM4OTgwLDM4OTgxLDM4OTgyLDM4OTgzLDM4OTg0LDM4OTg1LDM4OTg2LDM4OTg3LDM4OTg4LDM4OTg5LDM4OTkwLDM4OTkxLDM4OTkyLDM4OTkzLDM4OTk0LDM4OTk1LDM4''@;'; put 'put ''OTk2LDM4OTk3LDM4OTk4LDM4OTk5LDM5ZTMsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAsMzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYsMzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIs''@;'; put 'put ''MzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAwMzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAwODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2''@;'; put 'put ''MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEsMzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMsMzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAs''@;'; put 'put ''MzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgwODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgwOTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgx''@;'; put 'put ''MDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYsMzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEsMzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQs''@;'; put 'put ''MzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkwOTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkxMDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkx''@;'; put 'put ''MTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYsMzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIsMzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEs''@;'; put 'put ''MzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkxNjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkxNzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgx''@;'; put 'put ''MjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQsMzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQsMzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUs''@;'; put 'put ''MzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgyMTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgyMjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgy''@;'; put 'put ''MzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDksMzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgsMzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMs''@;'; put 'put ''MzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkxODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkxOTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkx''@;'; put 'put ''OTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEsMzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgsMzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUs''@;'; put 'put ''MzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzkyNDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzky''@;'; put 'put ''NTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMsMzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTksMzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQs''@;'; put 'put ''MzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1''@;'; put 'put ''MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAsNDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYsNDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIs''@;'; put 'put ''MzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAxODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAxOTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAy''@;'; put 'put ''MzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgsMzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUsMzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMs''@;'; put 'put ''MzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkzNTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkzNjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkz''@;'; put 'put ''NzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUsMzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEsMzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgs''@;'; put 'put ''MzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAyNjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAy''@;'; put 'put ''NjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMsMzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIsMzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAs''@;'; put 'put ''MzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUwNjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUwOTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUx''@;'; put 'put ''NzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYsMzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEsMzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMs''@;'; put 'put ''MzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0''@;'; put 'put ''NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYsMzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIsMzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0Njks''@;'; put 'put ''Mzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0''@;'; put 'put ''OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEsMzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUsMzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQs''@;'; put 'put ''MzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0''@;'; put 'put ''NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAsMzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAsMzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYs''@;'; put 'put ''MzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3''@;'; put 'put ''NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1MjcsMzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUsMzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAs''@;'; put 'put ''Mzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2''@;'; put 'put ''MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAsMzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2Njks''@;'; put 'put ''Mzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3''@;'; put 'put ''NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMsMzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYsMzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgs''@;'; put 'put ''MzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2''@;'; put 'put ''NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIsMzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYsMzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODks''@;'; put 'put ''Mzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3''@;'; put 'put ''MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAsMzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMs''@;'; put 'put ''Mzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3''@;'; put 'put ''OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIsMzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIsMzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUs''@;'; put 'put ''MzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMzODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUxNjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4''@;'; put 'put ''NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQsMzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMsMzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAs''@;'; put 'put ''MzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYxOTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcxOTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4''@;'; put 'put ''MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIsMzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4MjgsMzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUs''@;'; put 'put ''Mzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4''@;'; put 'put ''NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4NzcsMzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMsMzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAs''@;'; put 'put ''Mzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcyNDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcyNTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcy''@;'; put 'put ''OTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcsMzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQsMzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMs''@;'; put 'put ''MzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0''@;'; put 'put ''NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIsMzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIsMzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYs''@;'; put 'put ''Mzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5''@;'; put 'put ''MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgsMzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQsMzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEs''@;'; put 'put ''Mzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5''@;'; put 'put ''ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMsMzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAsMzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4Mzcs''@;'; put 'put ''NDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAw''@;'; put 'put ''NjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQsNDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEsNDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAs''@;'; put 'put ''NDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAxMzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5OTgsMzk5OTksNGU0LDQwMDAxLDQwMDAyLDQwMDAzLDQwMDA0LDQwMDA1''@;'; put 'put ''LDQwMDA2LDQwMDA3LDQwMDA4LDQwMDA5LDQwMDEwLDQwMDExLDQwMDEyLDQwMDEzLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE3LDQwMDE4LDQwMDE5LDQwMDIwLDQwMDIxLDQwMDIyLDQwMDIzLDQwMDI0LDQwMDI1LDQwMDI2LDQwMDI3LDQwMDI4LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDMyLDQw''@;'; put 'put ''MDMzLDQwMDM0LDQwMDM1LDQwMDM2LDQwMDM3LDQwMDM4LDQwMDM5LDQwMDQwLDQwMDQxLDQwMDQyLDQwMDQzLDQwMDQ0LDQwMDQ1LDQwMDQ2LDQwMDQ3LDQwMDQ4LDQwMDQ5LDQwMDUwLDQwMDUxLDQwMDUyLDQwMDUzLDQwMDU0LDQwMDU1LDQwMDU2LDQwMDU3LDQwMDU4LDQwMDU5LDQwMDYx''@;'; put 'put ''LDQwMDYyLDQwMDY0LDQwMDY3LDQwMDY4LDQwMDczLDQwMDc0LDQwMDc2LDQwMDc5LDQwMDgzLDQwMDg2LDQwMDg3LDQwMDg4LDQwMDg5LDQwMDkzLDQwMTA2LDQwMTA4LDQwMTExLDQwMTIxLDQwMTI2LDQwMTI3LDQwMTI4LDQwMTI5LDQwMTMwLDQwMTM2LDQwMTM3LDQwMTQ1LDQwMTQ2LDQw''@;'; put 'put ''MTU0LDQwMTU1LDQwMTYwLDQwMTYxLDQwMTQwLDQwMTQxLDQwMTQyLDQwMTQzLDQwMTQ0LDQwMTQ3LDQwMTQ4LDQwMTQ5LDQwMTUxLDQwMTUyLDQwMTUzLDQwMTU2LDQwMTU3LDQwMTU5LDQwMTYyLDM4NzgwLDM4Nzg5LDM4ODAxLDM4ODAyLDM4ODA0LDM4ODMxLDM4ODI3LDM4ODE5LDM4ODM0''@;'; put 'put ''LDM4ODM2LDM5NjAxLDM5NjAwLDM5NjA3LDQwNTM2LDM5NjA2LDM5NjEwLDM5NjEyLDM5NjE3LDM5NjE2LDM5NjIxLDM5NjE4LDM5NjI3LDM5NjI4LDM5NjMzLDM5NzQ5LDM5NzQ3LDM5NzUxLDM5NzUzLDM5NzUyLDM5NzU3LDM5NzYxLDM5MTQ0LDM5MTgxLDM5MjE0LDM5MjUzLDM5MjUyLDM5''@;'; put 'put ''NjQ3LDM5NjQ5LDM5NjU0LDM5NjYzLDM5NjU5LDM5Njc1LDM5NjYxLDM5NjczLDM5Njg4LDM5Njk1LDM5Njk5LDM5NzExLDM5NzE1LDQwNjM3LDQwNjM4LDMyMzE1LDQwNTc4LDQwNTgzLDQwNTg0LDQwNTg3LDQwNTk0LDM3ODQ2LDQwNjA1LDQwNjA3LDQwNjY3LDQwNjY4LDQwNjY5LDQwNjcy''@;'; put 'put ''LDQwNjcxLDQwNjc0LDQwNjgxLDQwNjc5LDQwNjc3LDQwNjgyLDQwNjg3LDQwNzM4LDQwNzQ4LDQwNzUxLDQwNzYxLDQwNzU5LDQwNzY1LDQwNzY2LDQwNzcyLDQwMTYzLDQwMTY0LDQwMTY1LDQwMTY2LDQwMTY3LDQwMTY4LDQwMTY5LDQwMTcwLDQwMTcxLDQwMTcyLDQwMTczLDQwMTc0LDQw''@;'; put 'put ''MTc1LDQwMTc2LDQwMTc3LDQwMTc4LDQwMTc5LDQwMTgwLDQwMTgxLDQwMTgyLDQwMTgzLDQwMTg0LDQwMTg1LDQwMTg2LDQwMTg3LDQwMTg4LDQwMTg5LDQwMTkwLDQwMTkxLDQwMTkyLDQwMTkzLDQwMTk0LDQwMTk1LDQwMTk2LDQwMTk3LDQwMTk4LDQwMTk5LDQwMjAwLDQwMjAxLDQwMjAy''@;'; put 'put ''LDQwMjAzLDQwMjA0LDQwMjA1LDQwMjA2LDQwMjA3LDQwMjA4LDQwMjA5LDQwMjEwLDQwMjExLDQwMjEyLDQwMjEzLDQwMjE0LDQwMjE1LDQwMjE2LDQwMjE3LDQwMjE4LDQwMjE5LDQwMjIwLDQwMjIxLDQwMjIyLDQwMjIzLDQwMjI0LDQwMjI1LDQwMjI2LDQwMjI3LDQwMjI4LDQwMjI5LDQw''@;'; put 'put ''MjMwLDQwMjMxLDQwMjMyLDQwMjMzLDQwMjM0LDQwMjM1LDQwMjM2LDQwMjM3LDQwMjM4LDQwMjM5LDQwMjQwLDQwMjQxLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjQ1LDQwMjQ2LDQwMjQ3LDQwMjQ4LDQwMjQ5LDQwMjUwLDQwMjUxLDQwMjUyLDQwMjUzLDQwMjU0LDQwMjU1LDQwMjU2LDQwMjU3''@;'; put 'put ''LDQwMjU4LDU3OTA4LDU3OTA5LDU3OTEwLDU3OTExLDU3OTEyLDU3OTEzLDU3OTE0LDU3OTE1LDU3OTE2LDU3OTE3LDU3OTE4LDU3OTE5LDU3OTIwLDU3OTIxLDU3OTIyLDU3OTIzLDU3OTI0LDU3OTI1LDU3OTI2LDU3OTI3LDU3OTI4LDU3OTI5LDU3OTMwLDU3OTMxLDU3OTMyLDU3OTMzLDU3''@;'; put 'put ''OTM0LDU3OTM1LDU3OTM2LDU3OTM3LDU3OTM4LDU3OTM5LDU3OTQwLDU3OTQxLDU3OTQyLDU3OTQzLDU3OTQ0LDU3OTQ1LDU3OTQ2LDU3OTQ3LDU3OTQ4LDU3OTQ5LDU3OTUwLDU3OTUxLDU3OTUyLDU3OTUzLDU3OTU0LDU3OTU1LDU3OTU2LDU3OTU3LDU3OTU4LDU3OTU5LDU3OTYwLDU3OTYx''@;'; put 'put ''LDU3OTYyLDU3OTYzLDU3OTY0LDU3OTY1LDU3OTY2LDU3OTY3LDU3OTY4LDU3OTY5LDU3OTcwLDU3OTcxLDU3OTcyLDU3OTczLDU3OTc0LDU3OTc1LDU3OTc2LDU3OTc3LDU3OTc4LDU3OTc5LDU3OTgwLDU3OTgxLDU3OTgyLDU3OTgzLDU3OTg0LDU3OTg1LDU3OTg2LDU3OTg3LDU3OTg4LDU3''@;'; put 'put ''OTg5LDU3OTkwLDU3OTkxLDU3OTkyLDU3OTkzLDU3OTk0LDU3OTk1LDU3OTk2LDU3OTk3LDU3OTk4LDU3OTk5LDU4ZTMsNTgwMDEsNDAyNTksNDAyNjAsNDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYsNDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMs''@;'; put 'put ''NDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAyODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAyOTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAz''@;'; put 'put ''MDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUsNDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEsNDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgs''@;'; put 'put ''NDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAzNDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgw''@;'; put 'put ''MDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcsNTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMsNTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAs''@;'; put 'put ''NTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgwNDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgwNTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgw''@;'; put 'put ''NTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIsNTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgsNTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUs''@;'; put 'put ''NTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAzNTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAzNjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAz''@;'; put 'put ''NzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYsNDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIsNDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTks''@;'; put 'put ''NDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0''@;'; put 'put ''MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEsNDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcsNDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTks''@;'; put 'put ''NTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgxMTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgxMjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgx''@;'; put 'put ''MjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEsNTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcsNTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQs''@;'; put 'put ''NTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgxNjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgxNzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgx''@;'; put 'put ''ODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcsNDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMsNDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAs''@;'; put 'put ''NDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1''@;'; put 'put ''NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMsNDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIsNDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIs''@;'; put 'put ''NDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgx''@;'; put 'put ''OTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAsNTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYsNTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMs''@;'; put 'put ''NTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgyMzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgyNDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgy''@;'; put 'put ''NTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUsNTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEsNTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgs''@;'; put 'put ''NTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2''@;'; put 'put ''NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMsNDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQsNDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIs''@;'; put 'put ''NDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3''@;'; put 'put ''MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcsNDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUsNTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIs''@;'; put 'put ''NTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgzMDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgzMTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgz''@;'; put 'put ''MjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQsNTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAsNTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcs''@;'; put 'put ''NTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgzNjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgzNjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgz''@;'; put 'put ''NzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAsNDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3NzcsNDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYs''@;'; put 'put ''NDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4''@;'; put 'put ''MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4MjgsNDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYsNDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMs''@;'; put 'put ''NDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgzODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgz''@;'; put 'put ''ODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMsNTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDksNTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYs''@;'; put 'put ''NTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0''@;'; put 'put ''NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgsNTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQsNTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEs''@;'; put 'put ''NjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQwNDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4''@;'; put 'put ''NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAsMTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAsMTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEs''@;'; put 'put ''MTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2''@;'; put 'put ''MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIsNTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0NzgsNTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUs''@;'; put 'put ''NTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1''@;'; put 'put ''MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1MjcsNTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMsNTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAs''@;'; put 'put ''NTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLCJnYjE4MDMwLXJhbmdl''@;'; put 'put ''cyI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEwMCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNdLFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxb''@;'; put 'put ''MTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcxXSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQxLDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3''@;'; put 'put ''MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0sWzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0sWzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQs''@;'; put 'put ''ODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgz''@;'; put 'put ''ODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQsODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYsODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10s''@;'; put 'put ''Wzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkwNDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYy''@;'; put 'put ''Ml0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0sWzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10sWzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsx''@;'; put 'put ''MTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRdLFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJd''@;'; put 'put ''LFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsxMTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5''@;'; put 'put ''NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjddLFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMsMTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMs''@;'; put 'put ''MTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUxODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0''@;'; put 'put ''MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUsMTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxbMTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxb''@;'; put 'put ''MTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0''@;'; put 'put ''XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxbMzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5''@;'; put 'put ''NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4''@;'; put 'put ''LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4OWUzLDY1NTM2XV0samlzMDIwODpbMTIyODgsMTIyODksMTIyOTAsNjUy''@;'; put 'put ''OTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAs''@;'; put 'put ''NjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMwMCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5''@;'; put 'put ''MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5''@;'; put 'put ''Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1''@;'; put 'put ''LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcx''@;'; put 'put ''MSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwxODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUz''@;'; put 'put ''MTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQsNjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUzNjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUz''@;'; put 'put ''NzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3''@;'; put 'put ''NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywx''@;'; put 'put ''MjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQz''@;'; put 'put ''MSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIs''@;'; put 'put ''MTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0''@;'; put 'put ''OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcs''@;'; put 'put ''MTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4''@;'; put 'put ''LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcs''@;'; put 'put ''OTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1Nywx''@;'; put 'put ''MDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwx''@;'; put 'put ''MDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5''@;'; put 'put ''NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5''@;'; put 'put ''MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3NiwxMzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwxMzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwx''@;'; put 'put ''MzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEyOTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEy''@;'; put 'put ''ODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3''@;'; put 'put ''MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywyNDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5NywyNjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwy''@;'; put 'put ''MjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIzOSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1''@;'; put 'put ''OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwyNDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwzODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwz''@;'; put 'put ''MjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0''@;'; put 'put ''MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywzNTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwyNDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwy''@;'; put 'put ''MjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUwMywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgz''@;'; put 'put ''MCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwyMzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwzMzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwy''@;'; put 'put ''ODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIzMywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5''@;'; put 'put ''MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4NiwzNDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwzMzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwy''@;'; put 'put ''MDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkxMywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAyOCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5''@;'; put 'put ''NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwzOTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywzNDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywy''@;'; put 'put ''NTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEw''@;'; put 'put ''NiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwzODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwzNzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwy''@;'; put 'put ''MWUzLDMzNDc3LDI5OTI2LDIwMDk0LDIwMzU1LDIwODk2LDIzNTA2LDIxMDAyLDIxMjA4LDIxMjIzLDI0MDU5LDIxOTE0LDIyNTcwLDIzMDE0LDIzNDM2LDIzNDQ4LDIzNTE1LDI0MTc4LDI0MTg1LDI0NzM5LDI0ODYzLDI0OTMxLDI1MDIyLDI1NTYzLDI1OTU0LDI2NTc3LDI2NzA3LDI2ODc0''@;'; put 'put ''LDI3NDU0LDI3NDc1LDI3NzM1LDI4NDUwLDI4NTY3LDI4NDg1LDI5ODcyLDI5OTc2LDMwNDM1LDMwNDc1LDMxNDg3LDMxNjQ5LDMxNzc3LDMyMjMzLDMyNTY2LDMyNzUyLDMyOTI1LDMzMzgyLDMzNjk0LDM1MjUxLDM1NTMyLDM2MDExLDM2OTk2LDM3OTY5LDM4MjkxLDM4Mjg5LDM4MzA2LDM4''@;'; put 'put ''NTAxLDM4ODY3LDM5MjA4LDMzMzA0LDIwMDI0LDIxNTQ3LDIzNzM2LDI0MDEyLDI5NjA5LDMwMjg0LDMwNTI0LDIzNzIxLDMyNzQ3LDM2MTA3LDM4NTkzLDM4OTI5LDM4OTk2LDM5ZTMsMjAyMjUsMjAyMzgsMjEzNjEsMjE5MTYsMjIxMjAsMjI1MjIsMjI4NTUsMjMzMDUsMjM0OTIsMjM2OTYs''@;'; put 'put ''MjQwNzYsMjQxOTAsMjQ1MjQsMjU1ODIsMjY0MjYsMjYwNzEsMjYwODIsMjYzOTksMjY4MjcsMjY4MjAsMjcyMzEsMjQxMTIsMjc1ODksMjc2NzEsMjc3NzMsMzAwNzksMzEwNDgsMjMzOTUsMzEyMzIsMzJlMywyNDUwOSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEz''@;'; put 'put ''OCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0NywzMjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwzODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwz''@;'; put 'put ''MDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAy''@;'; put 'put ''NiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywzNzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwyMDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwy''@;'; put 'put ''MDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAxNiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1''@;'; put 'put ''NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwyMjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1MywyOTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwz''@;'; put 'put ''NDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUxMCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUz''@;'; put 'put ''MywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwyNjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwzNDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1Miwz''@;'; put 'put ''MTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkzNSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMz''@;'; put 'put ''MSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywyNTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwyNzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2Mywy''@;'; put 'put ''NjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIx''@;'; put 'put ''MSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwyODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwzNTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwy''@;'; put 'put ''MjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3''@;'; put 'put ''NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2MiwzOTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwyMDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwy''@;'; put 'put ''MTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIxOCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMwNCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1''@;'; put 'put ''NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwzMjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwzMzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwz''@;'; put 'put ''NjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5''@;'; put 'put ''NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwyMDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwyNTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwz''@;'; put 'put ''MjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQwOCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3''@;'; put 'put ''MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwzMzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwyNjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4Niwy''@;'; put 'put ''NzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgz''@;'; put 'put ''MCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0MiwyMzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwyOTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwz''@;'; put 'put ''NzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAz''@;'; put 'put ''MSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwzMzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwzNTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywy''@;'; put 'put ''MDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkxMywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYw''@;'; put 'put ''MCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwzNDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwzNDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwy''@;'; put 'put ''NjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQx''@;'; put 'put ''NywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5MywzMjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0NywyMzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwz''@;'; put 'put ''MTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIyOCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMxMywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5''@;'; put 'put ''NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwyMDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwzOTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0Nywy''@;'; put 'put ''ODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYw''@;'; put 'put ''NCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwyMzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5NiwyNDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwy''@;'; put 'put ''NTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1''@;'; put 'put ''MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwzODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwyMDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwy''@;'; put 'put ''NDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4''@;'; put 'put ''MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwyODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwzMjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywz''@;'; put 'put ''Njc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgwNSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIxOCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUx''@;'; put 'put ''MiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwyMzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwyNjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwy''@;'; put 'put ''NTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2''@;'; put 'put ''OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5NiwyNTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwzMTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0Nywz''@;'; put 'put ''MDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0''@;'; put 'put ''OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywzMzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwzNjk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5Miwy''@;'; put 'put ''ODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQwMSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDcz''@;'; put 'put ''NiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwyNTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwyNjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwz''@;'; put 'put ''MDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5''@;'; put 'put ''NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwzNDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2MiwyNTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwz''@;'; put 'put ''NTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkwNywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5''@;'; put 'put ''MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwyODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3NiwyNTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwy''@;'; put 'put ''ODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUwNCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4''@;'; put 'put ''NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0MywyMjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3MywzMDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3Nywy''@;'; put 'put ''NjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAxMywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4''@;'; put 'put ''MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwyMDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5MywyNDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwy''@;'; put 'put ''NjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4''@;'; put 'put ''NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwzNDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwyMjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3Miwy''@;'; put 'put ''MDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcxNiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQy''@;'; put 'put ''MCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwyODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwzNzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwz''@;'; put 'put ''MjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzZTQsMzg2NTEsMjA4MTQsMjE1MjAsMjI1ODEsMjI2MTUsMjI5NTYsMjM2NDgsMjQ0NjYsMjYwMDcsMjY0NjAsMjgxOTMsMzAzMzEsMzM3NTksMzYwNzcsMzY4ODQsMzcxMTcsMzc3MDksMzA3NTcs''@;'; put 'put ''MzA3NzgsMjExNjIsMjQyMzAsMjIzMDMsMjI5MDAsMjQ1OTQsMjA0OTgsMjA4MjYsMjA5MDgsMjA5NDEsMjA5OTIsMjE3NzYsMjI2MTIsMjI2MTYsMjI4NzEsMjM0NDUsMjM3OTgsMjM5NDcsMjQ3NjQsMjUyMzcsMjU2NDUsMjY0ODEsMjY2OTEsMjY4MTIsMjY4NDcsMzA0MjMsMjgxMjAsMjgy''@;'; put 'put ''NzEsMjgwNTksMjg3ODMsMjkxMjgsMjQ0MDMsMzAxNjgsMzEwOTUsMzE1NjEsMzE1NzIsMzE1NzAsMzE5NTgsMzIxMTMsMjEwNDAsMzM4OTEsMzQxNTMsMzQyNzYsMzUzNDIsMzU1ODgsMzU5MTAsMzYzNjcsMzY4NjcsMzY4NzksMzc5MTMsMzg1MTgsMzg5NTcsMzk0NzIsMzgzNjAsMjA2ODUs''@;'; put 'put ''MjEyMDUsMjE1MTYsMjI1MzAsMjM1NjYsMjQ5OTksMjU3NTgsMjc5MzQsMzA2NDMsMzE0NjEsMzMwMTIsMzM3OTYsMzY5NDcsMzc1MDksMjM3NzYsNDAxOTksMjEzMTEsMjQ0NzEsMjQ0OTksMjgwNjAsMjkzMDUsMzA1NjMsMzExNjcsMzE3MTYsMjc2MDIsMjk0MjAsMzU1MDEsMjY2MjcsMjcy''@;'; put 'put ''MzMsMjA5ODQsMzEzNjEsMjY5MzIsMjM2MjYsNDAxODIsMzM1MTUsMjM0OTMsMzcxOTMsMjg3MDIsMjIxMzYsMjM2NjMsMjQ3NzUsMjU5NTgsMjc3ODgsMzU5MzAsMzY5MjksMzg5MzEsMjE1ODUsMjYzMTEsMzczODksMjI4NTYsMzcwMjcsMjA4NjksMjAwNDUsMjA5NzAsMzQyMDEsMzU1OTgs''@;'; put 'put ''Mjg3NjAsMjU0NjYsMzc3MDcsMjY5NzgsMzkzNDgsMzIyNjAsMzAwNzEsMjEzMzUsMjY5NzYsMzY1NzUsMzg2MjcsMjc3NDEsMjAxMDgsMjM2MTIsMjQzMzYsMzY4NDEsMjEyNTAsMzYwNDksMzI5MDUsMzQ0MjUsMjQzMTksMjYwODUsMjAwODMsMjA4MzcsMjI5MTQsMjM2MTUsMzg4OTQsMjAy''@;'; put 'put ''MTksMjI5MjIsMjQ1MjUsMzU0NjksMjg2NDEsMzExNTIsMzEwNzQsMjM1MjcsMzM5MDUsMjk0ODMsMjkxMDUsMjQxODAsMjQ1NjUsMjU0NjcsMjU3NTQsMjkxMjMsMzE4OTYsMjAwMzUsMjQzMTYsMjAwNDMsMjI0OTIsMjIxNzgsMjQ3NDUsMjg2MTEsMzIwMTMsMzMwMjEsMzMwNzUsMzMyMTUs''@;'; put 'put ''MzY3ODYsMzUyMjMsMzQ0NjgsMjQwNTIsMjUyMjYsMjU3NzMsMzUyMDcsMjY0ODcsMjc4NzQsMjc5NjYsMjk3NTAsMzA3NzIsMjMxMTAsMzI2MjksMzM0NTMsMzkzNDAsMjA0NjcsMjQyNTksMjUzMDksMjU0OTAsMjU5NDMsMjY0NzksMzA0MDMsMjkyNjAsMzI5NzIsMzI5NTQsMzY2NDksMzcx''@;'; put 'put ''OTcsMjA0OTMsMjI1MjEsMjMxODYsMjY3NTcsMjY5OTUsMjkwMjgsMjk0MzcsMzYwMjMsMjI3NzAsMzYwNjQsMzg1MDYsMzY4ODksMzQ2ODcsMzEyMDQsMzA2OTUsMzM4MzMsMjAyNzEsMjEwOTMsMjEzMzgsMjUyOTMsMjY1NzUsMjc4NTAsMzAzMzMsMzE2MzYsMzE4OTMsMzMzMzQsMzQxODAs''@;'; put 'put ''MzY4NDMsMjYzMzMsMjg0NDgsMjkxOTAsMzIyODMsMzM3MDcsMzkzNjEsNDA2MTQsMjA5ODksMzE2NjUsMzA4MzQsMzE2NzIsMzI5MDMsMzE1NjAsMjczNjgsMjQxNjEsMzI5MDgsMzAwMzMsMzAwNDgsMjA4NDMsMzc0NzQsMjgzMDAsMzAzMzAsMzcyNzEsMzk2NTgsMjAyNDAsMzI2MjQsMjUy''@;'; put 'put ''NDQsMzE1NjcsMzgzMDksNDAxNjksMjIxMzgsMjI2MTcsMzQ1MzIsMzg1ODgsMjAyNzYsMjEwMjgsMjEzMjIsMjE0NTMsMjE0NjcsMjQwNzAsMjU2NDQsMjYwMDEsMjY0OTUsMjc3MTAsMjc3MjYsMjkyNTYsMjkzNTksMjk2NzcsMzAwMzYsMzIzMjEsMzMzMjQsMzQyODEsMzYwMDksMzE2ODQs''@;'; put 'put ''MzczMTgsMjkwMzMsMzg5MzAsMzkxNTEsMjU0MDUsMjYyMTcsMzAwNTgsMzA0MzYsMzA5MjgsMzQxMTUsMzQ1NDIsMjEyOTAsMjEzMjksMjE1NDIsMjI5MTUsMjQxOTksMjQ0NDQsMjQ3NTQsMjUxNjEsMjUyMDksMjUyNTksMjZlMywyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5''@;'; put 'put ''MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwyNjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2MywyNjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwz''@;'; put 'put ''Mzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQyNiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDkyMCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5''@;'; put 'put ''NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwyOTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0MiwyMzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwy''@;'; put 'put ''NjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNmUzLDM2MDcwLDM2MjEyLDM4NDI4LDM4NDY4LDIwMzk4LDI1NzcxLDI3NDk0LDMzMzEwLDMzODg5LDM0MTU0LDM3MDk2LDIzNTUzLDI2OTYzLDM5MDgwLDMzOTE0LDM0MTM1LDIwMjM5LDIxMTAz''@;'; put 'put ''LDI0NDg5LDI0MTMzLDI2MzgxLDMxMTE5LDMzMTQ1LDM1MDc5LDM1MjA2LDI4MTQ5LDI0MzQzLDI1MTczLDI3ODMyLDIwMTc1LDI5Mjg5LDM5ODI2LDIwOTk4LDIxNTYzLDIyMTMyLDIyNzA3LDI0OTk2LDI1MTk4LDI4OTU0LDIyODk0LDMxODgxLDMxOTY2LDMyMDI3LDM4NjQwLDI1OTkxLDMy''@;'; put 'put ''ODYyLDE5OTkzLDIwMzQxLDIwODUzLDIyNTkyLDI0MTYzLDI0MTc5LDI0MzMwLDI2NTY0LDIwMDA2LDM0MTA5LDM4MjgxLDM4NDkxLDMxODU5LDM4OTEzLDIwNzMxLDIyNzIxLDMwMjk0LDMwODg3LDIxMDI5LDMwNjI5LDM0MDY1LDMxNjIyLDIwNTU5LDIyNzkzLDI5MjU1LDMxNjg3LDMyMjMy''@;'; put 'put ''LDM2Nzk0LDM2ODIwLDM2OTQxLDIwNDE1LDIxMTkzLDIzMDgxLDI0MzIxLDM4ODI5LDIwNDQ1LDMzMzAzLDM3NjEwLDIyMjc1LDI1NDI5LDI3NDk3LDI5OTk1LDM1MDM2LDM2NjI4LDMxMjk4LDIxMjE1LDIyNjc1LDI0OTE3LDI1MDk4LDI2Mjg2LDI3NTk3LDMxODA3LDMzNzY5LDIwNTE1LDIw''@;'; put 'put ''NDcyLDIxMjUzLDIxNTc0LDIyNTc3LDIyODU3LDIzNDUzLDIzNzkyLDIzNzkxLDIzODQ5LDI0MjE0LDI1MjY1LDI1NDQ3LDI1OTE4LDI2MDQxLDI2Mzc5LDI3ODYxLDI3ODczLDI4OTIxLDMwNzcwLDMyMjk5LDMyOTkwLDMzNDU5LDMzODA0LDM0MDI4LDM0NTYyLDM1MDkwLDM1MzcwLDM1OTE0''@;'; put 'put ''LDM3MDMwLDM3NTg2LDM5MTY1LDQwMTc5LDQwMzAwLDIwMDQ3LDIwMTI5LDIwNjIxLDIxMDc4LDIyMzQ2LDIyOTUyLDI0MTI1LDI0NTM2LDI0NTM3LDI1MTUxLDI2MjkyLDI2Mzk1LDI2NTc2LDI2ODM0LDIwODgyLDMyMDMzLDMyOTM4LDMzMTkyLDM1NTg0LDM1OTgwLDM2MDMxLDM3NTAyLDM4''@;'; put 'put ''NDUwLDIxNTM2LDM4OTU2LDIxMjcxLDIwNjkzLDIxMzQwLDIyNjk2LDI1Nzc4LDI2NDIwLDI5Mjg3LDMwNTY2LDMxMzAyLDM3MzUwLDIxMTg3LDI3ODA5LDI3NTI2LDIyNTI4LDI0MTQwLDIyODY4LDI2NDEyLDMyNzYzLDIwOTYxLDMwNDA2LDI1NzA1LDMwOTUyLDM5NzY0LDQwNjM1LDIyNDc1''@;'; put 'put ''LDIyOTY5LDI2MTUxLDI2NTIyLDI3NTk4LDIxNzM3LDI3MDk3LDI0MTQ5LDMzMTgwLDI2NTE3LDM5ODUwLDI2NjIyLDQwMDE4LDI2NzE3LDIwMTM0LDIwNDUxLDIxNDQ4LDI1MjczLDI2NDExLDI3ODE5LDM2ODA0LDIwMzk3LDMyMzY1LDQwNjM5LDE5OTc1LDI0OTMwLDI4Mjg4LDI4NDU5LDM0''@;'; put 'put ''MDY3LDIxNjE5LDI2NDEwLDM5NzQ5LDI0MDUxLDMxNjM3LDIzNzI0LDIzNDk0LDM0NTg4LDI4MjM0LDM0MDAxLDMxMjUyLDMzMDMyLDIyOTM3LDMxODg1LDI3NjY1LDMwNDk2LDIxMjA5LDIyODE4LDI4OTYxLDI5Mjc5LDMwNjgzLDM4Njk1LDQwMjg5LDI2ODkxLDIzMTY3LDIzMDY0LDIwOTAx''@;'; put 'put ''LDIxNTE3LDIxNjI5LDI2MTI2LDMwNDMxLDM2ODU1LDM3NTI4LDQwMTgwLDIzMDE4LDI5Mjc3LDI4MzU3LDIwODEzLDI2ODI1LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjM0LDI1NzIwLDI3MTY5LDMzNTM4LDIyOTE2LDIzMzkxLDI3NjExLDI5NDY3LDMwNDUwLDMyMTc4LDMyNzkxLDMzOTQ1LDIw''@;'; put 'put ''Nzg2LDI2NDA4LDQwNjY1LDMwNDQ2LDI2NDY2LDIxMjQ3LDM5MTczLDIzNTg4LDI1MTQ3LDMxODcwLDM2MDE2LDIxODM5LDI0NzU4LDMyMDExLDM4MjcyLDIxMjQ5LDIwMDYzLDIwOTE4LDIyODEyLDI5MjQyLDMyODIyLDM3MzI2LDI0MzU3LDMwNjkwLDIxMzgwLDI0NDQxLDMyMDA0LDM0MjIw''@;'; put 'put ''LDM1Mzc5LDM2NDkzLDM4NzQyLDI2NjExLDM0MjIyLDM3OTcxLDI0ODQxLDI0ODQwLDI3ODMzLDMwMjkwLDM1NTY1LDM2NjY0LDIxODA3LDIwMzA1LDIwNzc4LDIxMTkxLDIxNDUxLDIzNDYxLDI0MTg5LDI0NzM2LDI0OTYyLDI1NTU4LDI2Mzc3LDI2NTg2LDI4MjYzLDI4MDQ0LDI5NDk0LDI5''@;'; put 'put ''NDk1LDMwMDAxLDMxMDU2LDM1MDI5LDM1NDgwLDM2OTM4LDM3MDA5LDM3MTA5LDM4NTk2LDM0NzAxLDIyODA1LDIwMTA0LDIwMzEzLDE5OTgyLDM1NDY1LDM2NjcxLDM4OTI4LDIwNjUzLDI0MTg4LDIyOTM0LDIzNDgxLDI0MjQ4LDI1NTYyLDI1NTk0LDI1NzkzLDI2MzMyLDI2OTU0LDI3MDk2''@;'; put 'put ''LDI3OTE1LDI4MzQyLDI5MDc2LDI5OTkyLDMxNDA3LDMyNjUwLDMyNzY4LDMzODY1LDMzOTkzLDM1MjAxLDM1NjE3LDM2MzYyLDM2OTY1LDM4NTI1LDM5MTc4LDI0OTU4LDI1MjMzLDI3NDQyLDI3Nzc5LDI4MDIwLDMyNzE2LDMyNzY0LDI4MDk2LDMyNjQ1LDM0NzQ2LDM1MDY0LDI2NDY5LDMz''@;'; put 'put ''NzEzLDM4OTcyLDM4NjQ3LDI3OTMxLDMyMDk3LDMzODUzLDM3MjI2LDIwMDgxLDIxMzY1LDIzODg4LDI3Mzk2LDI4NjUxLDM0MjUzLDM0MzQ5LDM1MjM5LDIxMDMzLDIxNTE5LDIzNjUzLDI2NDQ2LDI2NzkyLDI5NzAyLDI5ODI3LDMwMTc4LDM1MDIzLDM1MDQxLDM3MzI0LDM4NjI2LDM4NTIw''@;'; put 'put ''LDI0NDU5LDI5NTc1LDMxNDM1LDMzODcwLDI1NTA0LDMwMDUzLDIxMTI5LDI3OTY5LDI4MzE2LDI5NzA1LDMwMDQxLDMwODI3LDMxODkwLDM4NTM0LDMxNDUyLDQwODQ1LDIwNDA2LDI0OTQyLDI2MDUzLDM0Mzk2LDIwMTAyLDIwMTQyLDIwNjk4LDIwMDAxLDIwOTQwLDIzNTM0LDI2MDA5LDI2''@;'; put 'put ''NzUzLDI4MDkyLDI5NDcxLDMwMjc0LDMwNjM3LDMxMjYwLDMxOTc1LDMzMzkxLDM1NTM4LDM2OTg4LDM3MzI3LDM4NTE3LDM4OTM2LDIxMTQ3LDMyMjA5LDIwNTIzLDIxNDAwLDI2NTE5LDI4MTA3LDI5MTM2LDI5NzQ3LDMzMjU2LDM2NjUwLDM4NTYzLDQwMDIzLDQwNjA3LDI5NzkyLDIyNTkz''@;'; put 'put ''LDI4MDU3LDMyMDQ3LDM5MDA2LDIwMTk2LDIwMjc4LDIwMzYzLDIwOTE5LDIxMTY5LDIzOTk0LDI0NjA0LDI5NjE4LDMxMDM2LDMzNDkxLDM3NDI4LDM4NTgzLDM4NjQ2LDM4NjY2LDQwNTk5LDQwODAyLDI2Mjc4LDI3NTA4LDIxMDE1LDIxMTU1LDI4ODcyLDM1MDEwLDI0MjY1LDI0NjUxLDI0''@;'; put 'put ''OTc2LDI4NDUxLDI5MDAxLDMxODA2LDMyMjQ0LDMyODc5LDM0MDMwLDM2ODk5LDM3Njc2LDIxNTcwLDM5NzkxLDI3MzQ3LDI4ODA5LDM2MDM0LDM2MzM1LDM4NzA2LDIxMTcyLDIzMTA1LDI0MjY2LDI0MzI0LDI2MzkxLDI3MDA0LDI3MDI4LDI4MDEwLDI4NDMxLDI5MjgyLDI5NDM2LDMxNzI1''@;'; put 'put ''LDMyNzY5LDMyODk0LDM0NjM1LDM3MDcwLDIwODQ1LDQwNTk1LDMxMTA4LDMyOTA3LDM3NjgyLDM1NTQyLDIwNTI1LDIxNjQ0LDM1NDQxLDI3NDk4LDM2MDM2LDMzMDMxLDI0Nzg1LDI2NTI4LDQwNDM0LDIwMTIxLDIwMTIwLDM5OTUyLDM1NDM1LDM0MjQxLDM0MTUyLDI2ODgwLDI4Mjg2LDMw''@;'; put 'put ''ODcxLDMzMTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQzMzIsMTk5ODQsMTk5ODksMjAwMTAsMjAwMTcsMjAwMjIsMjAwMjgsMjAwMzEsMjAwMzQsMjAwNTQsMjAwNTYsMjAwOTgsMjAxMDEsMzU5NDcsMjAxMDYsMzMyOTgsMjQzMzMsMjAx''@;'; put 'put ''MTAsMjAxMjYsMjAxMjcsMjAxMjgsMjAxMzAsMjAxNDQsMjAxNDcsMjAxNTAsMjAxNzQsMjAxNzMsMjAxNjQsMjAxNjYsMjAxNjIsMjAxODMsMjAxOTAsMjAyMDUsMjAxOTEsMjAyMTUsMjAyMzMsMjAzMTQsMjAyNzIsMjAzMTUsMjAzMTcsMjAzMTEsMjAyOTUsMjAzNDIsMjAzNjAsMjAzNjcs''@;'; put 'put ''MjAzNzYsMjAzNDcsMjAzMjksMjAzMzYsMjAzNjksMjAzMzUsMjAzNTgsMjAzNzQsMjA3NjAsMjA0MzYsMjA0NDcsMjA0MzAsMjA0NDAsMjA0NDMsMjA0MzMsMjA0NDIsMjA0MzIsMjA0NTIsMjA0NTMsMjA1MDYsMjA1MjAsMjA1MDAsMjA1MjIsMjA1MTcsMjA0ODUsMjAyNTIsMjA0NzAsMjA1''@;'; put 'put ''MTMsMjA1MjEsMjA1MjQsMjA0NzgsMjA0NjMsMjA0OTcsMjA0ODYsMjA1NDcsMjA1NTEsMjYzNzEsMjA1NjUsMjA1NjAsMjA1NTIsMjA1NzAsMjA1NjYsMjA1ODgsMjA2MDAsMjA2MDgsMjA2MzQsMjA2MTMsMjA2NjAsMjA2NTgsMjA2ODEsMjA2ODIsMjA2NTksMjA2NzQsMjA2OTQsMjA3MDIs''@;'; put 'put ''MjA3MDksMjA3MTcsMjA3MDcsMjA3MTgsMjA3MjksMjA3MjUsMjA3NDUsMjA3MzcsMjA3MzgsMjA3NTgsMjA3NTcsMjA3NTYsMjA3NjIsMjA3NjksMjA3OTQsMjA3OTEsMjA3OTYsMjA3OTUsMjA3OTksMjA4MDAsMjA4MTgsMjA4MTIsMjA4MjAsMjA4MzQsMzE0ODAsMjA4NDEsMjA4NDIsMjA4''@;'; put 'put ''NDYsMjA4NjQsMjA4NjYsMjIyMzIsMjA4NzYsMjA4NzMsMjA4NzksMjA4ODEsMjA4ODMsMjA4ODUsMjA4ODYsMjA5MDAsMjA5MDIsMjA4OTgsMjA5MDUsMjA5MDYsMjA5MDcsMjA5MTUsMjA5MTMsMjA5MTQsMjA5MTIsMjA5MTcsMjA5MjUsMjA5MzMsMjA5MzcsMjA5NTUsMjA5NjAsMzQzODks''@;'; put 'put ''MjA5NjksMjA5NzMsMjA5NzYsMjA5ODEsMjA5OTAsMjA5OTYsMjEwMDMsMjEwMTIsMjEwMDYsMjEwMzEsMjEwMzQsMjEwMzgsMjEwNDMsMjEwNDksMjEwNzEsMjEwNjAsMjEwNjcsMjEwNjgsMjEwODYsMjEwNzYsMjEwOTgsMjExMDgsMjEwOTcsMjExMDcsMjExMTksMjExMTcsMjExMzMsMjEx''@;'; put 'put ''NDAsMjExMzgsMjExMDUsMjExMjgsMjExMzcsMzY3NzYsMzY3NzUsMjExNjQsMjExNjUsMjExODAsMjExNzMsMjExODUsMjExOTcsMjEyMDcsMjEyMTQsMjEyMTksMjEyMjIsMzkxNDksMjEyMTYsMjEyMzUsMjEyMzcsMjEyNDAsMjEyNDEsMjEyNTQsMjEyNTYsMzAwMDgsMjEyNjEsMjEyNjQs''@;'; put 'put ''MjEyNjMsMjEyNjksMjEyNzQsMjEyODMsMjEyOTUsMjEyOTcsMjEyOTksMjEzMDQsMjEzMTIsMjEzMTgsMjEzMTcsMTk5OTEsMjEzMjEsMjEzMjUsMjA5NTAsMjEzNDIsMjEzNTMsMjEzNTgsMjI4MDgsMjEzNzEsMjEzNjcsMjEzNzgsMjEzOTgsMjE0MDgsMjE0MTQsMjE0MTMsMjE0MjIsMjE0''@;'; put 'put ''MjQsMjE0MzAsMjE0NDMsMzE3NjIsMzg2MTcsMjE0NzEsMjYzNjQsMjkxNjYsMjE0ODYsMjE0ODAsMjE0ODUsMjE0OTgsMjE1MDUsMjE1NjUsMjE1NjgsMjE1NDgsMjE1NDksMjE1NjQsMjE1NTAsMjE1NTgsMjE1NDUsMjE1MzMsMjE1ODIsMjE2NDcsMjE2MjEsMjE2NDYsMjE1OTksMjE2MTcs''@;'; put 'put ''MjE2MjMsMjE2MTYsMjE2NTAsMjE2MjcsMjE2MzIsMjE2MjIsMjE2MzYsMjE2NDgsMjE2MzgsMjE3MDMsMjE2NjYsMjE2ODgsMjE2NjksMjE2NzYsMjE3MDAsMjE3MDQsMjE2NzIsMjE2NzUsMjE2OTgsMjE2NjgsMjE2OTQsMjE2OTIsMjE3MjAsMjE3MzMsMjE3MzQsMjE3NzUsMjE3ODAsMjE3''@;'; put 'put ''NTcsMjE3NDIsMjE3NDEsMjE3NTQsMjE3MzAsMjE4MTcsMjE4MjQsMjE4NTksMjE4MzYsMjE4MDYsMjE4NTIsMjE4MjksMjE4NDYsMjE4NDcsMjE4MTYsMjE4MTEsMjE4NTMsMjE5MTMsMjE4ODgsMjE2NzksMjE4OTgsMjE5MTksMjE4ODMsMjE4ODYsMjE5MTIsMjE5MTgsMjE5MzQsMjE4ODQs''@;'; put 'put ''MjE4OTEsMjE5MjksMjE4OTUsMjE5MjgsMjE5NzgsMjE5NTcsMjE5ODMsMjE5NTYsMjE5ODAsMjE5ODgsMjE5NzIsMjIwMzYsMjIwMDcsMjIwMzgsMjIwMTQsMjIwMTMsMjIwNDMsMjIwMDksMjIwOTQsMjIwOTYsMjkxNTEsMjIwNjgsMjIwNzAsMjIwNjYsMjIwNzIsMjIxMjMsMjIxMTYsMjIw''@;'; put 'put ''NjMsMjIxMjQsMjIxMjIsMjIxNTAsMjIxNDQsMjIxNTQsMjIxNzYsMjIxNjQsMjIxNTksMjIxODEsMjIxOTAsMjIxOTgsMjIxOTYsMjIyMTAsMjIyMDQsMjIyMDksMjIyMTEsMjIyMDgsMjIyMTYsMjIyMjIsMjIyMjUsMjIyMjcsMjIyMzEsMjIyNTQsMjIyNjUsMjIyNzIsMjIyNzEsMjIyNzYs''@;'; put 'put ''MjIyODEsMjIyODAsMjIyODMsMjIyODUsMjIyOTEsMjIyOTYsMjIyOTQsMjE5NTksMjIzMDAsMjIzMTAsMjIzMjcsMjIzMjgsMjIzNTAsMjIzMzEsMjIzMzYsMjIzNTEsMjIzNzcsMjI0NjQsMjI0MDgsMjIzNjksMjIzOTksMjI0MDksMjI0MTksMjI0MzIsMjI0NTEsMjI0MzYsMjI0NDIsMjI0''@;'; put 'put ''NDgsMjI0NjcsMjI0NzAsMjI0ODQsMjI0ODIsMjI0ODMsMjI1MzgsMjI0ODYsMjI0OTksMjI1MzksMjI1NTMsMjI1NTcsMjI2NDIsMjI1NjEsMjI2MjYsMjI2MDMsMjI2NDAsMjc1ODQsMjI2MTAsMjI1ODksMjI2NDksMjI2NjEsMjI3MTMsMjI2ODcsMjI2OTksMjI3MTQsMjI3NTAsMjI3MTUs''@;'; put 'put ''MjI3MTIsMjI3MDIsMjI3MjUsMjI3MzksMjI3MzcsMjI3NDMsMjI3NDUsMjI3NDQsMjI3NTcsMjI3NDgsMjI3NTYsMjI3NTEsMjI3NjcsMjI3NzgsMjI3NzcsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODYsMjI3OTQsMjI4MDAsMjI4MTEsMjY3OTAsMjI4MjEsMjI4MjgsMjI4MjksMjI4MzQsMjI4''@;'; put 'put ''NDAsMjI4NDYsMzE0NDIsMjI4NjksMjI4NjQsMjI4NjIsMjI4NzQsMjI4NzIsMjI4ODIsMjI4ODAsMjI4ODcsMjI4OTIsMjI4ODksMjI5MDQsMjI5MTMsMjI5NDEsMjAzMTgsMjAzOTUsMjI5NDcsMjI5NjIsMjI5ODIsMjMwMTYsMjMwMDQsMjI5MjUsMjMwMDEsMjMwMDIsMjMwNzcsMjMwNzEs''@;'; put 'put ''MjMwNTcsMjMwNjgsMjMwNDksMjMwNjYsMjMxMDQsMjMxNDgsMjMxMTMsMjMwOTMsMjMwOTQsMjMxMzgsMjMxNDYsMjMxOTQsMjMyMjgsMjMyMzAsMjMyNDMsMjMyMzQsMjMyMjksMjMyNjcsMjMyNTUsMjMyNzAsMjMyNzMsMjMyNTQsMjMyOTAsMjMyOTEsMjMzMDgsMjMzMDcsMjMzMTgsMjMz''@;'; put 'put ''NDYsMjMyNDgsMjMzMzgsMjMzNTAsMjMzNTgsMjMzNjMsMjMzNjUsMjMzNjAsMjMzNzcsMjMzODEsMjMzODYsMjMzODcsMjMzOTcsMjM0MDEsMjM0MDgsMjM0MTEsMjM0MTMsMjM0MTYsMjU5OTIsMjM0MTgsMjM0MjQsMjM0MjcsMjM0NjIsMjM0ODAsMjM0OTEsMjM0OTUsMjM0OTcsMjM1MDgs''@;'; put 'put ''MjM1MDQsMjM1MjQsMjM1MjYsMjM1MjIsMjM1MTgsMjM1MjUsMjM1MzEsMjM1MzYsMjM1NDIsMjM1MzksMjM1NTcsMjM1NTksMjM1NjAsMjM1NjUsMjM1NzEsMjM1ODQsMjM1ODYsMjM1OTIsMjM2MDgsMjM2MDksMjM2MTcsMjM2MjIsMjM2MzAsMjM2MzUsMjM2MzIsMjM2MzEsMjM0MDksMjM2''@;'; put 'put ''NjAsMjM2NjIsMjAwNjYsMjM2NzAsMjM2NzMsMjM2OTIsMjM2OTcsMjM3MDAsMjI5MzksMjM3MjMsMjM3MzksMjM3MzQsMjM3NDAsMjM3MzUsMjM3NDksMjM3NDIsMjM3NTEsMjM3NjksMjM3ODUsMjM4MDUsMjM4MDIsMjM3ODksMjM5NDgsMjM3ODYsMjM4MTksMjM4MjksMjM4MzEsMjM5MDAs''@;'; put 'put ''MjM4MzksMjM4MzUsMjM4MjUsMjM4MjgsMjM4NDIsMjM4MzQsMjM4MzMsMjM4MzIsMjM4ODQsMjM4OTAsMjM4ODYsMjM4ODMsMjM5MTYsMjM5MjMsMjM5MjYsMjM5NDMsMjM5NDAsMjM5MzgsMjM5NzAsMjM5NjUsMjM5ODAsMjM5ODIsMjM5OTcsMjM5NTIsMjM5OTEsMjM5OTYsMjQwMDksMjQw''@;'; put 'put ''MTMsMjQwMTksMjQwMTgsMjQwMjIsMjQwMjcsMjQwNDMsMjQwNTAsMjQwNTMsMjQwNzUsMjQwOTAsMjQwODksMjQwODEsMjQwOTEsMjQxMTgsMjQxMTksMjQxMzIsMjQxMzEsMjQxMjgsMjQxNDIsMjQxNTEsMjQxNDgsMjQxNTksMjQxNjIsMjQxNjQsMjQxMzUsMjQxODEsMjQxODIsMjQxODYs''@;'; put 'put ''NDA2MzYsMjQxOTEsMjQyMjQsMjQyNTcsMjQyNTgsMjQyNjQsMjQyNzIsMjQyNzEsMjQyNzgsMjQyOTEsMjQyODUsMjQyODIsMjQyODMsMjQyOTAsMjQyODksMjQyOTYsMjQyOTcsMjQzMDAsMjQzMDUsMjQzMDcsMjQzMDQsMjQzMDgsMjQzMTIsMjQzMTgsMjQzMjMsMjQzMjksMjQ0MTMsMjQ0''@;'; put 'put ''MTIsMjQzMzEsMjQzMzcsMjQzNDIsMjQzNjEsMjQzNjUsMjQzNzYsMjQzODUsMjQzOTIsMjQzOTYsMjQzOTgsMjQzNjcsMjQ0MDEsMjQ0MDYsMjQ0MDcsMjQ0MDksMjQ0MTcsMjQ0MjksMjQ0MzUsMjQ0MzksMjQ0NTEsMjQ0NTAsMjQ0NDcsMjQ0NTgsMjQ0NTYsMjQ0NjUsMjQ0NTUsMjQ0Nzgs''@;'; put 'put ''MjQ0NzMsMjQ0NzIsMjQ0ODAsMjQ0ODgsMjQ0OTMsMjQ1MDgsMjQ1MzQsMjQ1NzEsMjQ1NDgsMjQ1NjgsMjQ1NjEsMjQ1NDEsMjQ3NTUsMjQ1NzUsMjQ2MDksMjQ2NzIsMjQ2MDEsMjQ1OTIsMjQ2MTcsMjQ1OTAsMjQ2MjUsMjQ2MDMsMjQ1OTcsMjQ2MTksMjQ2MTQsMjQ1OTEsMjQ2MzQsMjQ2''@;'; put 'put ''NjYsMjQ2NDEsMjQ2ODIsMjQ2OTUsMjQ2NzEsMjQ2NTAsMjQ2NDYsMjQ2NTMsMjQ2NzUsMjQ2NDMsMjQ2NzYsMjQ2NDIsMjQ2ODQsMjQ2ODMsMjQ2NjUsMjQ3MDUsMjQ3MTcsMjQ4MDcsMjQ3MDcsMjQ3MzAsMjQ3MDgsMjQ3MzEsMjQ3MjYsMjQ3MjcsMjQ3MjIsMjQ3NDMsMjQ3MTUsMjQ4MDEs''@;'; put 'put ''MjQ3NjAsMjQ4MDAsMjQ3ODcsMjQ3NTYsMjQ1NjAsMjQ3NjUsMjQ3NzQsMjQ3NTcsMjQ3OTIsMjQ5MDksMjQ4NTMsMjQ4MzgsMjQ4MjIsMjQ4MjMsMjQ4MzIsMjQ4MjAsMjQ4MjYsMjQ4MzUsMjQ4NjUsMjQ4MjcsMjQ4MTcsMjQ4NDUsMjQ4NDYsMjQ5MDMsMjQ4OTQsMjQ4NzIsMjQ4NzEsMjQ5''@;'; put 'put ''MDYsMjQ4OTUsMjQ4OTIsMjQ4NzYsMjQ4ODQsMjQ4OTMsMjQ4OTgsMjQ5MDAsMjQ5NDcsMjQ5NTEsMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MzksMjQ5NDgsMjQ5NDMsMjQ5MzMsMjQ5NDUsMjQ5MjcsMjQ5MjUsMjQ5MTUsMjQ5NDksMjQ5ODUsMjQ5ODIsMjQ5NjcsMjUwMDQsMjQ5ODAsMjQ5ODYs''@;'; put 'put ''MjQ5NzAsMjQ5NzcsMjUwMDMsMjUwMDYsMjUwMzYsMjUwMzQsMjUwMzMsMjUwNzksMjUwMzIsMjUwMjcsMjUwMzAsMjUwMTgsMjUwMzUsMzI2MzMsMjUwMzcsMjUwNjIsMjUwNTksMjUwNzgsMjUwODIsMjUwNzYsMjUwODcsMjUwODUsMjUwODQsMjUwODYsMjUwODgsMjUwOTYsMjUwOTcsMjUx''@;'; put 'put ''MDEsMjUxMDAsMjUxMDgsMjUxMTUsMjUxMTgsMjUxMjEsMjUxMzAsMjUxMzQsMjUxMzYsMjUxMzgsMjUxMzksMjUxNTMsMjUxNjYsMjUxODIsMjUxODcsMjUxNzksMjUxODQsMjUxOTIsMjUyMTIsMjUyMTgsMjUyMjUsMjUyMTQsMjUyMzQsMjUyMzUsMjUyMzgsMjUzMDAsMjUyMTksMjUyMzYs''@;'; put 'put ''MjUzMDMsMjUyOTcsMjUyNzUsMjUyOTUsMjUzNDMsMjUyODYsMjU4MTIsMjUyODgsMjUzMDgsMjUyOTIsMjUyOTAsMjUyODIsMjUyODcsMjUyNDMsMjUyODksMjUzNTYsMjUzMjYsMjUzMjksMjUzODMsMjUzNDYsMjUzNTIsMjUzMjcsMjUzMzMsMjU0MjQsMjU0MDYsMjU0MjEsMjU2MjgsMjU0''@;'; put 'put ''MjMsMjU0OTQsMjU0ODYsMjU0NzIsMjU1MTUsMjU0NjIsMjU1MDcsMjU0ODcsMjU0ODEsMjU1MDMsMjU1MjUsMjU0NTEsMjU0NDksMjU1MzQsMjU1NzcsMjU1MzYsMjU1NDIsMjU1NzEsMjU1NDUsMjU1NTQsMjU1OTAsMjU1NDAsMjU2MjIsMjU2NTIsMjU2MDYsMjU2MTksMjU2MzgsMjU2NTQs''@;'; put 'put ''MjU4ODUsMjU2MjMsMjU2NDAsMjU2MTUsMjU3MDMsMjU3MTEsMjU3MTgsMjU2NzgsMjU4OTgsMjU3NDksMjU3NDcsMjU3NjUsMjU3NjksMjU3MzYsMjU3ODgsMjU4MTgsMjU4MTAsMjU3OTcsMjU3OTksMjU3ODcsMjU4MTYsMjU3OTQsMjU4NDEsMjU4MzEsMzMyODksMjU4MjQsMjU4MjUsMjUy''@;'; put 'put ''NjAsMjU4MjcsMjU4MzksMjU5MDAsMjU4NDYsMjU4NDQsMjU4NDIsMjU4NTAsMjU4NTYsMjU4NTMsMjU4ODAsMjU4ODQsMjU4NjEsMjU4OTIsMjU4OTEsMjU4OTksMjU5MDgsMjU5MDksMjU5MTEsMjU5MTAsMjU5MTIsMzAwMjcsMjU5MjgsMjU5NDIsMjU5NDEsMjU5MzMsMjU5NDQsMjU5NTAs''@;'; put 'put ''MjU5NDksMjU5NzAsMjU5NzYsMjU5ODYsMjU5ODcsMzU3MjIsMjYwMTEsMjYwMTUsMjYwMjcsMjYwMzksMjYwNTEsMjYwNTQsMjYwNDksMjYwNTIsMjYwNjAsMjYwNjYsMjYwNzUsMjYwNzMsMjYwODAsMjYwODEsMjYwOTcsMjY0ODIsMjYxMjIsMjYxMTUsMjYxMDcsMjY0ODMsMjYxNjUsMjYx''@;'; put 'put ''NjYsMjYxNjQsMjYxNDAsMjYxOTEsMjYxODAsMjYxODUsMjYxNzcsMjYyMDYsMjYyMDUsMjYyMTIsMjYyMTUsMjYyMTYsMjYyMDcsMjYyMTAsMjYyMjQsMjYyNDMsMjYyNDgsMjYyNTQsMjYyNDksMjYyNDQsMjYyNjQsMjYyNjksMjYzMDUsMjYyOTcsMjYzMTMsMjYzMDIsMjYzMDAsMjYzMDgs''@;'; put 'put ''MjYyOTYsMjYzMjYsMjYzMzAsMjYzMzYsMjYxNzUsMjYzNDIsMjYzNDUsMjYzNTIsMjYzNTcsMjYzNTksMjYzODMsMjYzOTAsMjYzOTgsMjY0MDYsMjY0MDcsMzg3MTIsMjY0MTQsMjY0MzEsMjY0MjIsMjY0MzMsMjY0MjQsMjY0MjMsMjY0MzgsMjY0NjIsMjY0NjQsMjY0NTcsMjY0NjcsMjY0''@;'; put 'put ''NjgsMjY1MDUsMjY0ODAsMjY1MzcsMjY0OTIsMjY0NzQsMjY1MDgsMjY1MDcsMjY1MzQsMjY1MjksMjY1MDEsMjY1NTEsMjY2MDcsMjY1NDgsMjY2MDQsMjY1NDcsMjY2MDEsMjY1NTIsMjY1OTYsMjY1OTAsMjY1ODksMjY1OTQsMjY2MDYsMjY1NTMsMjY1NzQsMjY1NjYsMjY1OTksMjcyOTIs''@;'; put 'put ''MjY2NTQsMjY2OTQsMjY2NjUsMjY2ODgsMjY3MDEsMjY2NzQsMjY3MDIsMjY4MDMsMjY2NjcsMjY3MTMsMjY3MjMsMjY3NDMsMjY3NTEsMjY3ODMsMjY3NjcsMjY3OTcsMjY3NzIsMjY3ODEsMjY3NzksMjY3NTUsMjczMTAsMjY4MDksMjY3NDAsMjY4MDUsMjY3ODQsMjY4MTAsMjY4OTUsMjY3''@;'; put 'put ''NjUsMjY3NTAsMjY4ODEsMjY4MjYsMjY4ODgsMjY4NDAsMjY5MTQsMjY5MTgsMjY4NDksMjY4OTIsMjY4MjksMjY4MzYsMjY4NTUsMjY4MzcsMjY5MzQsMjY4OTgsMjY4ODQsMjY4MzksMjY4NTEsMjY5MTcsMjY4NzMsMjY4NDgsMjY4NjMsMjY5MjAsMjY5MjIsMjY5MDYsMjY5MTUsMjY5MTMs''@;'; put 'put ''MjY4MjIsMjcwMDEsMjY5OTksMjY5NzIsMjdlMywyNjk4NywyNjk2NCwyNzAwNiwyNjk5MCwyNjkzNywyNjk5NiwyNjk0MSwyNjk2OSwyNjkyOCwyNjk3NywyNjk3NCwyNjk3MywyNzAwOSwyNjk4NiwyNzA1OCwyNzA1NCwyNzA4OCwyNzA3MSwyNzA3MywyNzA5MSwyNzA3MCwyNzA4NiwyMzUy''@;'; put 'put ''OCwyNzA4MiwyNzEwMSwyNzA2NywyNzA3NSwyNzA0NywyNzE4MiwyNzAyNSwyNzA0MCwyNzAzNiwyNzAyOSwyNzA2MCwyNzEwMiwyNzExMiwyNzEzOCwyNzE2MywyNzEzNSwyNzQwMiwyNzEyOSwyNzEyMiwyNzExMSwyNzE0MSwyNzA1NywyNzE2NiwyNzExNywyNzE1NiwyNzExNSwyNzE0Niwy''@;'; put 'put ''NzE1NCwyNzMyOSwyNzE3MSwyNzE1NSwyNzIwNCwyNzE0OCwyNzI1MCwyNzE5MCwyNzI1NiwyNzIwNywyNzIzNCwyNzIyNSwyNzIzOCwyNzIwOCwyNzE5MiwyNzE3MCwyNzI4MCwyNzI3NywyNzI5NiwyNzI2OCwyNzI5OCwyNzI5OSwyNzI4NywzNDMyNywyNzMyMywyNzMzMSwyNzMzMCwyNzMy''@;'; put 'put ''MCwyNzMxNSwyNzMwOCwyNzM1OCwyNzM0NSwyNzM1OSwyNzMwNiwyNzM1NCwyNzM3MCwyNzM4NywyNzM5NywzNDMyNiwyNzM4NiwyNzQxMCwyNzQxNCwzOTcyOSwyNzQyMywyNzQ0OCwyNzQ0NywzMDQyOCwyNzQ0OSwzOTE1MCwyNzQ2MywyNzQ1OSwyNzQ2NSwyNzQ3MiwyNzQ4MSwyNzQ3Niwy''@;'; put 'put ''NzQ4MywyNzQ4NywyNzQ4OSwyNzUxMiwyNzUxMywyNzUxOSwyNzUyMCwyNzUyNCwyNzUyMywyNzUzMywyNzU0NCwyNzU0MSwyNzU1MCwyNzU1NiwyNzU2MiwyNzU2MywyNzU2NywyNzU3MCwyNzU2OSwyNzU3MSwyNzU3NSwyNzU4MCwyNzU5MCwyNzU5NSwyNzYwMywyNzYxNSwyNzYyOCwyNzYy''@;'; put 'put ''NywyNzYzNSwyNzYzMSw0MDYzOCwyNzY1NiwyNzY2NywyNzY2OCwyNzY3NSwyNzY4NCwyNzY4MywyNzc0MiwyNzczMywyNzc0NiwyNzc1NCwyNzc3OCwyNzc4OSwyNzgwMiwyNzc3NywyNzgwMywyNzc3NCwyNzc1MiwyNzc2MywyNzc5NCwyNzc5MiwyNzg0NCwyNzg4OSwyNzg1OSwyNzgzNywy''@;'; put 'put ''Nzg2MywyNzg0NSwyNzg2OSwyNzgyMiwyNzgyNSwyNzgzOCwyNzgzNCwyNzg2NywyNzg4NywyNzg2NSwyNzg4MiwyNzkzNSwzNDg5MywyNzk1OCwyNzk0NywyNzk2NSwyNzk2MCwyNzkyOSwyNzk1NywyNzk1NSwyNzkyMiwyNzkxNiwyODAwMywyODA1MSwyODAwNCwyNzk5NCwyODAyNSwyNzk5''@;'; put 'put ''MywyODA0NiwyODA1MywyODY0NCwyODAzNywyODE1MywyODE4MSwyODE3MCwyODA4NSwyODEwMywyODEzNCwyODA4OCwyODEwMiwyODE0MCwyODEyNiwyODEwOCwyODEzNiwyODExNCwyODEwMSwyODE1NCwyODEyMSwyODEzMiwyODExNywyODEzOCwyODE0MiwyODIwNSwyODI3MCwyODIwNiwy''@;'; put 'put ''ODE4NSwyODI3NCwyODI1NSwyODIyMiwyODE5NSwyODI2NywyODIwMywyODI3OCwyODIzNywyODE5MSwyODIyNywyODIxOCwyODIzOCwyODE5NiwyODQxNSwyODE4OSwyODIxNiwyODI5MCwyODMzMCwyODMxMiwyODM2MSwyODM0MywyODM3MSwyODM0OSwyODMzNSwyODM1NiwyODMzOCwyODM3''@;'; put 'put ''MiwyODM3MywyODMwMywyODMyNSwyODM1NCwyODMxOSwyODQ4MSwyODQzMywyODc0OCwyODM5NiwyODQwOCwyODQxNCwyODQ3OSwyODQwMiwyODQ2NSwyODM5OSwyODQ2NiwyODM2NCwyODQ3OCwyODQzNSwyODQwNywyODU1MCwyODUzOCwyODUzNiwyODU0NSwyODU0NCwyODUyNywyODUwNywy''@;'; put 'put ''ODY1OSwyODUyNSwyODU0NiwyODU0MCwyODUwNCwyODU1OCwyODU2MSwyODYxMCwyODUxOCwyODU5NSwyODU3OSwyODU3NywyODU4MCwyODYwMSwyODYxNCwyODU4NiwyODYzOSwyODYyOSwyODY1MiwyODYyOCwyODYzMiwyODY1NywyODY1NCwyODYzNSwyODY4MSwyODY4MywyODY2NiwyODY4''@;'; put 'put ''OSwyODY3MywyODY4NywyODY3MCwyODY5OSwyODY5OCwyODUzMiwyODcwMSwyODY5NiwyODcwMywyODcyMCwyODczNCwyODcyMiwyODc1MywyODc3MSwyODgyNSwyODgxOCwyODg0NywyODkxMywyODg0NCwyODg1NiwyODg1MSwyODg0NiwyODg5NSwyODg3NSwyODg5MywyODg4OSwyODkzNywy''@;'; put 'put ''ODkyNSwyODk1NiwyODk1MywyOTAyOSwyOTAxMywyOTA2NCwyOTAzMCwyOTAyNiwyOTAwNCwyOTAxNCwyOTAzNiwyOTA3MSwyOTE3OSwyOTA2MCwyOTA3NywyOTA5NiwyOTEwMCwyOTE0MywyOTExMywyOTExOCwyOTEzOCwyOTEyOSwyOTE0MCwyOTEzNCwyOTE1MiwyOTE2NCwyOTE1OSwyOTE3''@;'; put 'put ''MywyOTE4MCwyOTE3NywyOTE4MywyOTE5NywyOTIwMCwyOTIxMSwyOTIyNCwyOTIyOSwyOTIyOCwyOTIzMiwyOTIzNCwyOTI0MywyOTI0NCwyOTI0NywyOTI0OCwyOTI1NCwyOTI1OSwyOTI3MiwyOTMwMCwyOTMxMCwyOTMxNCwyOTMxMywyOTMxOSwyOTMzMCwyOTMzNCwyOTM0NiwyOTM1MSwy''@;'; put 'put ''OTM2OSwyOTM2MiwyOTM3OSwyOTM4MiwyOTM4MCwyOTM5MCwyOTM5NCwyOTQxMCwyOTQwOCwyOTQwOSwyOTQzMywyOTQzMSwyMDQ5NSwyOTQ2MywyOTQ1MCwyOTQ2OCwyOTQ2MiwyOTQ2OSwyOTQ5MiwyOTQ4NywyOTQ4MSwyOTQ3NywyOTUwMiwyOTUxOCwyOTUxOSw0MDY2NCwyOTUyNywyOTU0''@;'; put 'put ''NiwyOTU0NCwyOTU1MiwyOTU2MCwyOTU1NywyOTU2MywyOTU2MiwyOTY0MCwyOTYxOSwyOTY0NiwyOTYyNywyOTYzMiwyOTY2OSwyOTY3OCwyOTY2MiwyOTg1OCwyOTcwMSwyOTgwNywyOTczMywyOTY4OCwyOTc0NiwyOTc1NCwyOTc4MSwyOTc1OSwyOTc5MSwyOTc4NSwyOTc2MSwyOTc4OCwy''@;'; put 'put ''OTgwMSwyOTgwOCwyOTc5NSwyOTgwMiwyOTgxNCwyOTgyMiwyOTgzNSwyOTg1NCwyOTg2MywyOTg5OCwyOTkwMywyOTkwOCwyOTY4MSwyOTkyMCwyOTkyMywyOTkyNywyOTkyOSwyOTkzNCwyOTkzOCwyOTkzNiwyOTkzNywyOTk0NCwyOTk0MywyOTk1NiwyOTk1NSwyOTk1NywyOTk2NCwyOTk2''@;'; put 'put ''NiwyOTk2NSwyOTk3MywyOTk3MSwyOTk4MiwyOTk5MCwyOTk5NiwzMDAxMiwzMDAyMCwzMDAyOSwzMDAyNiwzMDAyNSwzMDA0MywzMDAyMiwzMDA0MiwzMDA1NywzMDA1MiwzMDA1NSwzMDA1OSwzMDA2MSwzMDA3MiwzMDA3MCwzMDA4NiwzMDA4NywzMDA2OCwzMDA5MCwzMDA4OSwzMDA4Miwz''@;'; put 'put ''MDEwMCwzMDEwNiwzMDEwOSwzMDExNywzMDExNSwzMDE0NiwzMDEzMSwzMDE0NywzMDEzMywzMDE0MSwzMDEzNiwzMDE0MCwzMDEyOSwzMDE1NywzMDE1NCwzMDE2MiwzMDE2OSwzMDE3OSwzMDE3NCwzMDIwNiwzMDIwNywzMDIwNCwzMDIwOSwzMDE5MiwzMDIwMiwzMDE5NCwzMDE5NSwzMDIx''@;'; put 'put ''OSwzMDIyMSwzMDIxNywzMDIzOSwzMDI0NywzMDI0MCwzMDI0MSwzMDI0MiwzMDI0NCwzMDI2MCwzMDI1NiwzMDI2NywzMDI3OSwzMDI4MCwzMDI3OCwzMDMwMCwzMDI5NiwzMDMwNSwzMDMwNiwzMDMxMiwzMDMxMywzMDMxNCwzMDMxMSwzMDMxNiwzMDMyMCwzMDMyMiwzMDMyNiwzMDMyOCwz''@;'; put 'put ''MDMzMiwzMDMzNiwzMDMzOSwzMDM0NCwzMDM0NywzMDM1MCwzMDM1OCwzMDM1NSwzMDM2MSwzMDM2MiwzMDM4NCwzMDM4OCwzMDM5MiwzMDM5MywzMDM5NCwzMDQwMiwzMDQxMywzMDQyMiwzMDQxOCwzMDQzMCwzMDQzMywzMDQzNywzMDQzOSwzMDQ0MiwzNDM1MSwzMDQ1OSwzMDQ3MiwzMDQ3''@;'; put 'put ''MSwzMDQ2OCwzMDUwNSwzMDUwMCwzMDQ5NCwzMDUwMSwzMDUwMiwzMDQ5MSwzMDUxOSwzMDUyMCwzMDUzNSwzMDU1NCwzMDU2OCwzMDU3MSwzMDU1NSwzMDU2NSwzMDU5MSwzMDU5MCwzMDU4NSwzMDYwNiwzMDYwMywzMDYwOSwzMDYyNCwzMDYyMiwzMDY0MCwzMDY0NiwzMDY0OSwzMDY1NSwz''@;'; put 'put ''MDY1MiwzMDY1MywzMDY1MSwzMDY2MywzMDY2OSwzMDY3OSwzMDY4MiwzMDY4NCwzMDY5MSwzMDcwMiwzMDcxNiwzMDczMiwzMDczOCwzMTAxNCwzMDc1MiwzMTAxOCwzMDc4OSwzMDg2MiwzMDgzNiwzMDg1NCwzMDg0NCwzMDg3NCwzMDg2MCwzMDg4MywzMDkwMSwzMDg5MCwzMDg5NSwzMDky''@;'; put 'put ''OSwzMDkxOCwzMDkyMywzMDkzMiwzMDkxMCwzMDkwOCwzMDkxNywzMDkyMiwzMDk1NiwzMDk1MSwzMDkzOCwzMDk3MywzMDk2NCwzMDk4MywzMDk5NCwzMDk5MywzMTAwMSwzMTAyMCwzMTAxOSwzMTA0MCwzMTA3MiwzMTA2MywzMTA3MSwzMTA2NiwzMTA2MSwzMTA1OSwzMTA5OCwzMTEwMywz''@;'; put 'put ''MTExNCwzMTEzMywzMTE0Myw0MDc3OSwzMTE0NiwzMTE1MCwzMTE1NSwzMTE2MSwzMTE2MiwzMTE3NywzMTE4OSwzMTIwNywzMTIxMiwzMTIwMSwzMTIwMywzMTI0MCwzMTI0NSwzMTI1NiwzMTI1NywzMTI2NCwzMTI2MywzMTEwNCwzMTI4MSwzMTI5MSwzMTI5NCwzMTI4NywzMTI5OSwzMTMx''@;'; put 'put ''OSwzMTMwNSwzMTMyOSwzMTMzMCwzMTMzNyw0MDg2MSwzMTM0NCwzMTM1MywzMTM1NywzMTM2OCwzMTM4MywzMTM4MSwzMTM4NCwzMTM4MiwzMTQwMSwzMTQzMiwzMTQwOCwzMTQxNCwzMTQyOSwzMTQyOCwzMTQyMywzNjk5NSwzMTQzMSwzMTQzNCwzMTQzNywzMTQzOSwzMTQ0NSwzMTQ0Mywz''@;'; put 'put ''MTQ0OSwzMTQ1MCwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MiwzMTQ2OSwzMTQ3MiwzMTQ5MCwzMTUwMywzMTQ5OCwzMTQ5NCwzMTUzOSwzMTUxMiwzMTUxMywzMTUxOCwzMTU0MSwzMTUyOCwzMTU0MiwzMTU2OCwzMTYxMCwzMTQ5MiwzMTU2NSwzMTQ5OSwzMTU2NCwzMTU1NywzMTYwNSwzMTU4''@;'; put 'put ''OSwzMTYwNCwzMTU5MSwzMTYwMCwzMTYwMSwzMTU5NiwzMTU5OCwzMTY0NSwzMTY0MCwzMTY0NywzMTYyOSwzMTY0NCwzMTY0MiwzMTYyNywzMTYzNCwzMTYzMSwzMTU4MSwzMTY0MSwzMTY5MSwzMTY4MSwzMTY5MiwzMTY5NSwzMTY2OCwzMTY4NiwzMTcwOSwzMTcyMSwzMTc2MSwzMTc2NCwz''@;'; put 'put ''MTcxOCwzMTcxNywzMTg0MCwzMTc0NCwzMTc1MSwzMTc2MywzMTczMSwzMTczNSwzMTc2NywzMTc1NywzMTczNCwzMTc3OSwzMTc4MywzMTc4NiwzMTc3NSwzMTc5OSwzMTc4NywzMTgwNSwzMTgyMCwzMTgxMSwzMTgyOCwzMTgyMywzMTgwOCwzMTgyNCwzMTgzMiwzMTgzOSwzMTg0NCwzMTgz''@;'; put 'put ''MCwzMTg0NSwzMTg1MiwzMTg2MSwzMTg3NSwzMTg4OCwzMTkwOCwzMTkxNywzMTkwNiwzMTkxNSwzMTkwNSwzMTkxMiwzMTkyMywzMTkyMiwzMTkyMSwzMTkxOCwzMTkyOSwzMTkzMywzMTkzNiwzMTk0MSwzMTkzOCwzMTk2MCwzMTk1NCwzMTk2NCwzMTk3MCwzOTczOSwzMTk4MywzMTk4Niwz''@;'; put 'put ''MTk4OCwzMTk5MCwzMTk5NCwzMjAwNiwzMjAwMiwzMjAyOCwzMjAyMSwzMjAxMCwzMjA2OSwzMjA3NSwzMjA0NiwzMjA1MCwzMjA2MywzMjA1MywzMjA3MCwzMjExNSwzMjA4NiwzMjA3OCwzMjExNCwzMjEwNCwzMjExMCwzMjA3OSwzMjA5OSwzMjE0NywzMjEzNywzMjA5MSwzMjE0MywzMjEy''@;'; put 'put ''NSwzMjE1NSwzMjE4NiwzMjE3NCwzMjE2MywzMjE4MSwzMjE5OSwzMjE4OSwzMjE3MSwzMjMxNywzMjE2MiwzMjE3NSwzMjIyMCwzMjE4NCwzMjE1OSwzMjE3NiwzMjIxNiwzMjIyMSwzMjIyOCwzMjIyMiwzMjI1MSwzMjI0MiwzMjIyNSwzMjI2MSwzMjI2NiwzMjI5MSwzMjI4OSwzMjI3NCwz''@;'; put 'put ''MjMwNSwzMjI4NywzMjI2NSwzMjI2NywzMjI5MCwzMjMyNiwzMjM1OCwzMjMxNSwzMjMwOSwzMjMxMywzMjMyMywzMjMxMSwzMjMwNiwzMjMxNCwzMjM1OSwzMjM0OSwzMjM0MiwzMjM1MCwzMjM0NSwzMjM0NiwzMjM3NywzMjM2MiwzMjM2MSwzMjM4MCwzMjM3OSwzMjM4NywzMjIxMywzMjM4''@;'; put 'put ''MSwzNjc4MiwzMjM4MywzMjM5MiwzMjM5MywzMjM5NiwzMjQwMiwzMjQwMCwzMjQwMywzMjQwNCwzMjQwNiwzMjM5OCwzMjQxMSwzMjQxMiwzMjU2OCwzMjU3MCwzMjU4MSwzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MiwzMjU5MywzMjU5NywzMjU5NiwzMjYwMCwzMjYwNywzMjYwOCwzMjYxNiwz''@;'; put 'put ''MjYxNywzMjYxNSwzMjYzMiwzMjY0MiwzMjY0NiwzMjY0MywzMjY0OCwzMjY0NywzMjY1MiwzMjY2MCwzMjY3MCwzMjY2OSwzMjY2NiwzMjY3NSwzMjY4NywzMjY5MCwzMjY5NywzMjY4NiwzMjY5NCwzMjY5NiwzNTY5NywzMjcwOSwzMjcxMCwzMjcxNCwzMjcyNSwzMjcyNCwzMjczNywzMjc0''@;'; put 'put ''MiwzMjc0NSwzMjc1NSwzMjc2MSwzOTEzMiwzMjc3NCwzMjc3MiwzMjc3OSwzMjc4NiwzMjc5MiwzMjc5MywzMjc5NiwzMjgwMSwzMjgwOCwzMjgzMSwzMjgyNywzMjg0MiwzMjgzOCwzMjg1MCwzMjg1NiwzMjg1OCwzMjg2MywzMjg2NiwzMjg3MiwzMjg4MywzMjg4MiwzMjg4MCwzMjg4Niwz''@;'; put 'put ''Mjg4OSwzMjg5MywzMjg5NSwzMjkwMCwzMjkwMiwzMjkwMSwzMjkyMywzMjkxNSwzMjkyMiwzMjk0MSwyMDg4MCwzMjk0MCwzMjk4NywzMjk5NywzMjk4NSwzMjk4OSwzMjk2NCwzMjk4NiwzMjk4MiwzMzAzMywzMzAwNywzMzAwOSwzMzA1MSwzMzA2NSwzMzA1OSwzMzA3MSwzMzA5OSwzODUz''@;'; put 'put ''OSwzMzA5NCwzMzA4NiwzMzEwNywzMzEwNSwzMzAyMCwzMzEzNywzMzEzNCwzMzEyNSwzMzEyNiwzMzE0MCwzMzE1NSwzMzE2MCwzMzE2MiwzMzE1MiwzMzE1NCwzMzE4NCwzMzE3MywzMzE4OCwzMzE4NywzMzExOSwzMzE3MSwzMzE5MywzMzIwMCwzMzIwNSwzMzIxNCwzMzIwOCwzMzIxMywz''@;'; put 'put ''MzIxNiwzMzIxOCwzMzIxMCwzMzIyNSwzMzIyOSwzMzIzMywzMzI0MSwzMzI0MCwzMzIyNCwzMzI0MiwzMzI0NywzMzI0OCwzMzI1NSwzMzI3NCwzMzI3NSwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NSwzMzI4NywzMzI5MCwzMzI5MywzMzI5NiwzMzMwMiwzMzMyMSwzMzMyMywzMzMzNiwzMzMz''@;'; put 'put ''MSwzMzM0NCwzMzM2OSwzMzM2OCwzMzM3MywzMzM3MCwzMzM3NSwzMzM4MCwzMzM3OCwzMzM4NCwzMzM4NiwzMzM4NywzMzMyNiwzMzM5MywzMzM5OSwzMzQwMCwzMzQwNiwzMzQyMSwzMzQyNiwzMzQ1MSwzMzQzOSwzMzQ2NywzMzQ1MiwzMzUwNSwzMzUwNywzMzUwMywzMzQ5MCwzMzUyNCwz''@;'; put 'put ''MzUyMywzMzUzMCwzMzY4MywzMzUzOSwzMzUzMSwzMzUyOSwzMzUwMiwzMzU0MiwzMzUwMCwzMzU0NSwzMzQ5NywzMzU4OSwzMzU4OCwzMzU1OCwzMzU4NiwzMzU4NSwzMzYwMCwzMzU5MywzMzYxNiwzMzYwNSwzMzU4MywzMzU3OSwzMzU1OSwzMzU2MCwzMzY2OSwzMzY5MCwzMzcwNiwzMzY5''@;'; put 'put ''NSwzMzY5OCwzMzY4NiwzMzU3MSwzMzY3OCwzMzY3MSwzMzY3NCwzMzY2MCwzMzcxNywzMzY1MSwzMzY1MywzMzY5NiwzMzY3MywzMzcwNCwzMzc4MCwzMzgxMSwzMzc3MSwzMzc0MiwzMzc4OSwzMzc5NSwzMzc1MiwzMzgwMywzMzcyOSwzMzc4MywzMzc5OSwzMzc2MCwzMzc3OCwzMzgwNSwz''@;'; put 'put ''MzgyNiwzMzgyNCwzMzcyNSwzMzg0OCwzNDA1NCwzMzc4NywzMzkwMSwzMzgzNCwzMzg1MiwzNDEzOCwzMzkyNCwzMzkxMSwzMzg5OSwzMzk2NSwzMzkwMiwzMzkyMiwzMzg5NywzMzg2MiwzMzgzNiwzMzkwMywzMzkxMywzMzg0NSwzMzk5NCwzMzg5MCwzMzk3NywzMzk4MywzMzk1MSwzNDAw''@;'; put 'put ''OSwzMzk5NywzMzk3OSwzNDAxMCwzNGUzLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0''@;'; put 'put ''MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAy''@;'; put 'put ''LDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0''@;'; put 'put ''NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTczLDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2''@;'; put 'put ''LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0''@;'; put 'put ''Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcwLDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0''@;'; put 'put ''LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1''@;'; put 'put ''MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgxLDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4''@;'; put 'put ''LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1''@;'; put 'put ''MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDczLDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMzLDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5''@;'; put 'put ''LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1''@;'; put 'put ''Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcw''@;'; put 'put ''LDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2''@;'; put 'put ''MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEwLDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIz''@;'; put 'put ''LDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2''@;'; put 'put ''NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUwLDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcxLDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEz''@;'; put 'put ''LDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2''@;'; put 'put ''NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAzLDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1''@;'; put 'put ''LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3''@;'; put 'put ''MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAxLDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4''@;'; put 'put ''LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3''@;'; put 'put ''NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3''@;'; put 'put ''LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3''@;'; put 'put ''NDE3LDM4ZTMsMzgwMDUsMzgwMDcsMzgwMTMsMzc5NzgsMzgwMTIsMzgwMTQsMzgwMTcsMzgwMTUsMzgyNzQsMzgyNzksMzgyODIsMzgyOTIsMzgyOTQsMzgyOTYsMzgyOTcsMzgzMDQsMzgzMTIsMzgzMTEsMzgzMTcsMzgzMzIsMzgzMzEsMzgzMjksMzgzMzQsMzgzNDYsMjg2NjIsMzgzMzks''@;'; put 'put ''MzgzNDksMzgzNDgsMzgzNTcsMzgzNTYsMzgzNTgsMzgzNjQsMzgzNjksMzgzNzMsMzgzNzAsMzg0MzMsMzg0NDAsMzg0NDYsMzg0NDcsMzg0NjYsMzg0NzYsMzg0NzksMzg0NzUsMzg1MTksMzg0OTIsMzg0OTQsMzg0OTMsMzg0OTUsMzg1MDIsMzg1MTQsMzg1MDgsMzg1NDEsMzg1NTIsMzg1''@;'; put 'put ''NDksMzg1NTEsMzg1NzAsMzg1NjcsMzg1NzcsMzg1NzgsMzg1NzYsMzg1ODAsMzg1ODIsMzg1ODQsMzg1ODUsMzg2MDYsMzg2MDMsMzg2MDEsMzg2MDUsMzUxNDksMzg2MjAsMzg2NjksMzg2MTMsMzg2NDksMzg2NjAsMzg2NjIsMzg2NjQsMzg2NzUsMzg2NzAsMzg2NzMsMzg2NzEsMzg2Nzgs''@;'; put 'put ''Mzg2ODEsMzg2OTIsMzg2OTgsMzg3MDQsMzg3MTMsMzg3MTcsMzg3MTgsMzg3MjQsMzg3MjYsMzg3MjgsMzg3MjIsMzg3MjksMzg3NDgsMzg3NTIsMzg3NTYsMzg3NTgsMzg3NjAsMjEyMDIsMzg3NjMsMzg3NjksMzg3NzcsMzg3ODksMzg3ODAsMzg3ODUsMzg3NzgsMzg3OTAsMzg3OTUsMzg3''@;'; put 'put ''OTksMzg4MDAsMzg4MTIsMzg4MjQsMzg4MjIsMzg4MTksMzg4MzUsMzg4MzYsMzg4NTEsMzg4NTQsMzg4NTYsMzg4NTksMzg4NzYsMzg4OTMsNDA3ODMsMzg4OTgsMzE0NTUsMzg5MDIsMzg5MDEsMzg5MjcsMzg5MjQsMzg5NjgsMzg5NDgsMzg5NDUsMzg5NjcsMzg5NzMsMzg5ODIsMzg5OTEs''@;'; put 'put ''Mzg5ODcsMzkwMTksMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjgsMzkwMjcsMzkwODIsMzkwODcsMzkwODksMzkwOTQsMzkxMDgsMzkxMDcsMzkxMTAsMzkxNDUsMzkxNDcsMzkxNzEsMzkxNzcsMzkxODYsMzkxODgsMzkxOTIsMzkyMDEsMzkxOTcsMzkxOTgsMzkyMDQsMzkyMDAsMzkyMTIsMzky''@;'; put 'put ''MTQsMzkyMjksMzkyMzAsMzkyMzQsMzkyNDEsMzkyMzcsMzkyNDgsMzkyNDMsMzkyNDksMzkyNTAsMzkyNDQsMzkyNTMsMzkzMTksMzkzMjAsMzkzMzMsMzkzNDEsMzkzNDIsMzkzNTYsMzkzOTEsMzkzODcsMzkzODksMzkzODQsMzkzNzcsMzk0MDUsMzk0MDYsMzk0MDksMzk0MTAsMzk0MTks''@;'; put 'put ''Mzk0MTYsMzk0MjUsMzk0MzksMzk0MjksMzkzOTQsMzk0NDksMzk0NjcsMzk0NzksMzk0OTMsMzk0OTAsMzk0ODgsMzk0OTEsMzk0ODYsMzk1MDksMzk1MDEsMzk1MTUsMzk1MTEsMzk1MTksMzk1MjIsMzk1MjUsMzk1MjQsMzk1MjksMzk1MzEsMzk1MzAsMzk1OTcsMzk2MDAsMzk2MTIsMzk2''@;'; put 'put ''MTYsMzk2MzEsMzk2MzMsMzk2MzUsMzk2MzYsMzk2NDYsMzk2NDcsMzk2NTAsMzk2NTEsMzk2NTQsMzk2NjMsMzk2NTksMzk2NjIsMzk2NjgsMzk2NjUsMzk2NzEsMzk2NzUsMzk2ODYsMzk3MDQsMzk3MDYsMzk3MTEsMzk3MTQsMzk3MTUsMzk3MTcsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIs''@;'; put 'put ''Mzk3MjYsMzk3MjcsMzk3MzAsMzk3NDgsMzk3NDcsMzk3NTksMzk3NTcsMzk3NTgsMzk3NjEsMzk3NjgsMzk3OTYsMzk4MjcsMzk4MTEsMzk4MjUsMzk4MzAsMzk4MzEsMzk4MzksMzk4NDAsMzk4NDgsMzk4NjAsMzk4NzIsMzk4ODIsMzk4NjUsMzk4NzgsMzk4ODcsMzk4ODksMzk4OTAsMzk5''@;'; put 'put ''MDcsMzk5MDYsMzk5MDgsMzk4OTIsMzk5MDUsMzk5OTQsMzk5MjIsMzk5MjEsMzk5MjAsMzk5NTcsMzk5NTYsMzk5NDUsMzk5NTUsMzk5NDgsMzk5NDIsMzk5NDQsMzk5NTQsMzk5NDYsMzk5NDAsMzk5ODIsMzk5NjMsMzk5NzMsMzk5NzIsMzk5NjksMzk5ODQsNDAwMDcsMzk5ODYsNDAwMDYs''@;'; put 'put ''Mzk5OTgsNDAwMjYsNDAwMzIsNDAwMzksNDAwNTQsNDAwNTYsNDAxNjcsNDAxNzIsNDAxNzYsNDAyMDEsNDAyMDAsNDAxNzEsNDAxOTUsNDAxOTgsNDAyMzQsNDAyMzAsNDAzNjcsNDAyMjcsNDAyMjMsNDAyNjAsNDAyMTMsNDAyMTAsNDAyNTcsNDAyNTUsNDAyNTQsNDAyNjIsNDAyNjQsNDAy''@;'; put 'put ''ODUsNDAyODYsNDAyOTIsNDAyNzMsNDAyNzIsNDAyODEsNDAzMDYsNDAzMjksNDAzMjcsNDAzNjMsNDAzMDMsNDAzMTQsNDAzNDYsNDAzNTYsNDAzNjEsNDAzNzAsNDAzODgsNDAzODUsNDAzNzksNDAzNzYsNDAzNzgsNDAzOTAsNDAzOTksNDAzODYsNDA0MDksNDA0MDMsNDA0NDAsNDA0MjIs''@;'; put 'put ''NDA0MjksNDA0MzEsNDA0NDUsNDA0NzQsNDA0NzUsNDA0NzgsNDA1NjUsNDA1NjksNDA1NzMsNDA1NzcsNDA1ODQsNDA1ODcsNDA1ODgsNDA1OTQsNDA1OTcsNDA1OTMsNDA2MDUsNDA2MTMsNDA2MTcsNDA2MzIsNDA2MTgsNDA2MjEsMzg3NTMsNDA2NTIsNDA2NTQsNDA2NTUsNDA2NTYsNDA2''@;'; put 'put ''NjAsNDA2NjgsNDA2NzAsNDA2NjksNDA2NzIsNDA2NzcsNDA2ODAsNDA2ODcsNDA2OTIsNDA2OTQsNDA2OTUsNDA2OTcsNDA2OTksNDA3MDAsNDA3MDEsNDA3MTEsNDA3MTIsMzAzOTEsNDA3MjUsNDA3MzcsNDA3NDgsNDA3NjYsNDA3NzgsNDA3ODYsNDA3ODgsNDA4MDMsNDA3OTksNDA4MDAs''@;'; put 'put ''NDA4MDEsNDA4MDYsNDA4MDcsNDA4MTIsNDA4MTAsNDA4MjMsNDA4MTgsNDA4MjIsNDA4NTMsNDA4NjAsNDA4NjQsMjI1NzUsMjcwNzksMzY5NTMsMjk3OTYsMjA5NTYsMjkwODEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0''@;'; put 'put ''LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIw''@;'; put 'put ''ODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2''@;'; put 'put ''LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0''@;'; put 'put ''MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQy''@;'; put 'put ''LDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3''@;'; put 'put ''MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYx''@;'; put 'put ''LDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5''@;'; put 'put ''NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYz''@;'; put 'put ''LDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0''@;'; put 'put ''ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQy''@;'; put 'put ''LDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3''@;'; put 'put ''NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQx''@;'; put 'put ''LDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2''@;'; put 'put ''NSw4NTY2LDg1NjcsODU2OCw4NTY5LDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU2MCw4NTYx''@;'; put 'put ''LDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSw4NzU3LDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEy''@;'; put 'put ''LDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIw''@;'; put 'put ''NzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0''@;'; put 'put ''LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIz''@;'; put 'put ''OTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMz''@;'; put 'put ''LDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3''@;'; put 'put ''MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIw''@;'; put 'put ''LDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5''@;'; put 'put ''NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0''@;'; put 'put ''LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0''@;'; put 'put ''MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQx''@;'; put 'put ''LDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3''@;'; put 'put ''NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIz''@;'; put 'put ''LDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0samlzMDIxMjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMxLDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVsbCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVsbCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2''@;'; put 'put ''Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDEx''@;'; put 'put ''MTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGws''@;'; put 'put ''MzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMy''@;'; put 'put ''OSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAsMTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIw''@;'; put 'put ''MywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgsMzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEsMjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0''@;'; put 'put ''NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3MiwyMjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTks''@;'; put 'put ''NDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4''@;'; put 'put ''LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgwLDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0''@;'; put 'put ''LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIwMDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIwMTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIw''@;'; put 'put ''MTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5''@;'; put 'put ''LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIwMzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIw''@;'; put 'put ''MzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgzLDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1''@;'; put 'put ''LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIwNDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIw''@;'; put 'put ''NTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2''@;'; put 'put ''LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIw''@;'; put 'put ''NjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAzLDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQz''@;'; put 'put ''LDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIwNzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIw''@;'; put 'put ''ODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkzLDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2''@;'; put 'put ''LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIxMDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIxMDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIx''@;'; put 'put ''MDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIyLDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4''@;'; put 'put ''LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIxMTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIxMjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIx''@;'; put 'put ''MjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5''@;'; put 'put ''LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIxNDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIx''@;'; put 'put ''NDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUx''@;'; put 'put ''LDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIxNjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIxNjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIx''@;'; put 'put ''NjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5''@;'; put 'put ''LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIxODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIxODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIx''@;'; put 'put ''ODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0''@;'; put 'put ''LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIyMDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIyMDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIy''@;'; put 'put ''MDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAwLDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4''@;'; put 'put ''LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIyMjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIy''@;'; put 'put ''MjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUzLDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgyLDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0''@;'; put 'put ''LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIyMzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIyMzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIy''@;'; put 'put ''Mzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIwLDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMwLDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0''@;'; put 'put ''LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIyNTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIyNTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIy''@;'; put 'put ''NTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMxLDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYz''@;'; put 'put ''LDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIyNjk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIyNzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIy''@;'; put 'put ''NzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEzLDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMyLDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2''@;'; put 'put ''LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIyOTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIyOTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIy''@;'; put 'put ''OTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIyLDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0''@;'; put 'put ''LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIzMTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIz''@;'; put 'put ''MTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYw''@;'; put 'put ''LDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIzMzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIzMzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIz''@;'; put 'put ''NDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDczLDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAx''@;'; put 'put ''LDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIzNTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIzNTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIz''@;'; put 'put ''NjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzExLDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMy''@;'; put 'put ''LDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIzODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIzODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIz''@;'; put 'put ''ODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYz''@;'; put 'put ''LDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0''@;'; put 'put ''MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTczLDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4''@;'; put 'put ''LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0''@;'; put 'put ''MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0MzgxLDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIw''@;'; put 'put ''LDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0''@;'; put 'put ''NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcwLDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5''@;'; put 'put ''LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0''@;'; put 'put ''NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3''@;'; put 'put ''LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0''@;'; put 'put ''ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcxLDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5''@;'; put 'put ''LDI0OTkxLDI0OTkyLDI0OTk3LDI1ZTMsMjUwMDIsMjUwMDUsMjUwMTYsMjUwMTcsMjUwMjAsMjUwMjQsMjUwMjUsMjUwMjYsMjUwMzgsMjUwMzksMjUwNDUsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTcsMjUwNTgsMjUwNjMsMjUwNjUsMjUwNjEsMjUwNjgsMjUwNjksMjUwNzEsMjUw''@;'; put 'put ''ODksMjUwOTEsMjUwOTIsMjUwOTUsMjUxMDcsMjUxMDksMjUxMTYsMjUxMjAsMjUxMjIsMjUxMjMsMjUxMjcsMjUxMjksMjUxMzEsMjUxNDUsMjUxNDksMjUxNTQsMjUxNTUsMjUxNTYsMjUxNTgsMjUxNjQsMjUxNjgsMjUxNjksMjUxNzAsMjUxNzIsMjUxNzQsMjUxNzgsMjUxODAsMjUxODgs''@;'; put 'put ''MjUxOTcsMjUxOTksMjUyMDMsMjUyMTAsMjUyMTMsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyNTQsMjUyNTYsMjUyNjcsMjUyNzAsMjUyNzEsMjUyNzQsMjUyNzgsMjUyNzksMjUyODQsMjUyOTQsMjUzMDEsMjUzMDIsMjUzMDYsMjUzMjIsMjUzMzAsMjUzMzIsMjUzNDAsMjUzNDEsMjUz''@;'; put 'put ''NDcsMjUzNDgsMjUzNTQsMjUzNTUsMjUzNTcsMjUzNjAsMjUzNjMsMjUzNjYsMjUzNjgsMjUzODUsMjUzODYsMjUzODksMjUzOTcsMjUzOTgsMjU0MDEsMjU0MDQsMjU0MDksMjU0MTAsMjU0MTEsMjU0MTIsMjU0MTQsMjU0MTgsMjU0MTksMjU0MjIsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzIs''@;'; put 'put ''MjU0MzUsMjU0NDUsMjU0NDYsMjU0NTIsMjU0NTMsMjU0NTcsMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjgsMjU0NjksMjU0NzEsMjU0NzQsMjU0NzYsMjU0NzksMjU0ODIsMjU0ODgsMjU0OTIsMjU0OTMsMjU0OTcsMjU0OTgsMjU1MDIsMjU1MDgsMjU1MTAsMjU1MTcsMjU1MTgsMjU1MTksMjU1''@;'; put 'put ''MzMsMjU1MzcsMjU1NDEsMjU1NDQsMjU1NTAsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NjQsMjU1NjgsMjU1NzMsMjU1NzgsMjU1ODAsMjU1ODYsMjU1ODcsMjU1ODksMjU1OTIsMjU1OTMsMjU2MDksMjU2MTAsMjU2MTYsMjU2MTgsMjU2MjAsMjU2MjQsMjU2MzAsMjU2MzIsMjU2MzQs''@;'; put 'put ''MjU2MzYsMjU2MzcsMjU2NDEsMjU2NDIsMjU2NDcsMjU2NDgsMjU2NTMsMjU2NjEsMjU2NjMsMjU2NzUsMjU2NzksMjU2ODEsMjU2ODIsMjU2ODMsMjU2ODQsMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2OTYsMjU2OTcsMjU2OTksMjU3MDksMjU3MTUsMjU3MTYsMjU3MjMsMjU3''@;'; put 'put ''MjUsMjU3MzMsMjU3MzUsMjU3NDMsMjU3NDQsMjU3NDUsMjU3NTIsMjU3NTMsMjU3NTUsMjU3NTcsMjU3NTksMjU3NjEsMjU3NjMsMjU3NjYsMjU3NjgsMjU3NzIsMjU3NzksMjU3ODksMjU3OTAsMjU3OTEsMjU3OTYsMjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDYsMjU4MDgsMjU4MDks''@;'; put 'put ''MjU4MTMsMjU4MTUsMjU4MjgsMjU4MjksMjU4MzMsMjU4MzQsMjU4MzcsMjU4NDAsMjU4NDUsMjU4NDcsMjU4NTEsMjU4NTUsMjU4NTcsMjU4NjAsMjU4NjQsMjU4NjUsMjU4NjYsMjU4NzEsMjU4NzUsMjU4NzYsMjU4NzgsMjU4ODEsMjU4ODMsMjU4ODYsMjU4ODcsMjU4OTAsMjU4OTQsMjU4''@;'; put 'put ''OTcsMjU5MDIsMjU5MDUsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjMsMjU5MjcsMjU5MjksMjU5MzYsMjU5MzgsMjU5NDAsMjU5NTEsMjU5NTIsMjU5NTksMjU5NjMsMjU5NzgsMjU5ODEsMjU5ODUsMjU5ODksMjU5OTQsMjYwMDIsMjYwMDUsMjYwMDgsMjYwMTMsMjYwMTYsMjYwMTksMjYwMjIs''@;'; put 'put ''MjYwMzAsMjYwMzQsMjYwMzUsMjYwMzYsMjYwNDcsMjYwNTAsMjYwNTYsMjYwNTcsMjYwNjIsMjYwNjQsMjYwNjgsMjYwNzAsMjYwNzIsMjYwNzksMjYwOTYsMjYwOTgsMjYxMDAsMjYxMDEsMjYxMDUsMjYxMTAsMjYxMTEsMjYxMTIsMjYxMTYsMjYxMjAsMjYxMjEsMjYxMjUsMjYxMjksMjYx''@;'; put 'put ''MzAsMjYxMzMsMjYxMzQsMjYxNDEsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjEsMjYxNjMsMjYxNjksMjYxNjcsMjYxNzYsMjYxODEsMjYxODIsMjYxODYsMjYxODgsMjYxOTMsMjYxOTAsMjYxOTks''@;'; put 'put ''MjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDgsMjYyMDksMjYzNjMsMjYyMTgsMjYyMTksMjYyMjAsMjYyMzgsMjYyMjcsMjYyMjksMjYyMzksMjYyMzEsMjYyMzIsMjYyMzMsMjYyMzUsMjYyNDAsMjYyMzYsMjYyNTEsMjYyNTIsMjYyNTMsMjYyNTYsMjYyNTgsMjYyNjUsMjYyNjYsMjYy''@;'; put 'put ''NjcsMjYyNjgsMjYyNzEsMjYyNzIsMjYyNzYsMjYyODUsMjYyODksMjYyOTAsMjYyOTMsMjYyOTksMjYzMDMsMjYzMDQsMjYzMDYsMjYzMDcsMjYzMTIsMjYzMTYsMjYzMTgsMjYzMTksMjYzMjQsMjYzMzEsMjYzMzUsMjYzNDQsMjYzNDcsMjYzNDgsMjYzNTAsMjYzNjIsMjYzNzMsMjYzNzUs''@;'; put 'put ''MjYzODIsMjYzODcsMjYzOTMsMjYzOTYsMjY0MDAsMjY0MDIsMjY0MTksMjY0MzAsMjY0MzcsMjY0MzksMjY0NDAsMjY0NDQsMjY0NTIsMjY0NTMsMjY0NjEsMjY0NzAsMjY0NzYsMjY0NzgsMjY0ODQsMjY0ODYsMjY0OTEsMjY0OTcsMjY1MDAsMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTUsMjY1''@;'; put 'put ''MTgsMjY1MjAsMjY1MjEsMjY1MjMsMjY1NDQsMjY1NDUsMjY1NDYsMjY1NDksMjY1NTUsMjY1NTYsMjY1NTcsMjY2MTcsMjY1NjAsMjY1NjIsMjY1NjMsMjY1NjUsMjY1NjgsMjY1NjksMjY1NzgsMjY1ODMsMjY1ODUsMjY1ODgsMjY1OTMsMjY1OTgsMjY2MDgsMjY2MTAsMjY2MTQsMjY2MTUs''@;'; put 'put ''MjY3MDYsMjY2NDQsMjY2NDksMjY2NTMsMjY2NTUsMjY2NjQsMjY2NjMsMjY2NjgsMjY2NjksMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzUsMjY2ODMsMjY2ODcsMjY2OTIsMjY2OTMsMjY2OTgsMjY3MDAsMjY3MDksMjY3MTEsMjY3MTIsMjY3MTUsMjY3MzEsMjY3MzQsMjY3MzUsMjY3MzYsMjY3''@;'; put 'put ''MzcsMjY3MzgsMjY3NDEsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NTQsMjY3NTYsMjY3NTgsMjY3NjAsMjY3NzQsMjY3NzYsMjY3NzgsMjY3ODAsMjY3ODUsMjY3ODcsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTgsMjY4MDIsMjY4MTEsMjY4MjEsMjY4MjQsMjY4MjgsMjY4MzEsMjY4MzIs''@;'; put 'put ''MjY4MzMsMjY4MzUsMjY4MzgsMjY4NDEsMjY4NDQsMjY4NDUsMjY4NTMsMjY4NTYsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjQsMjY4NjUsMjY4NjksMjY4NzAsMjY4NzUsMjY4NzYsMjY4NzcsMjY4ODYsMjY4ODksMjY4OTAsMjY4OTYsMjY4OTcsMjY4OTksMjY5MDIsMjY5MDMsMjY5''@;'; put 'put ''MjksMjY5MzEsMjY5MzMsMjY5MzYsMjY5MzksMjY5NDYsMjY5NDksMjY5NTMsMjY5NTgsMjY5NjcsMjY5NzEsMjY5NzksMjY5ODAsMjY5ODEsMjY5ODIsMjY5ODQsMjY5ODUsMjY5ODgsMjY5OTIsMjY5OTMsMjY5OTQsMjcwMDIsMjcwMDMsMjcwMDcsMjcwMDgsMjcwMjEsMjcwMjYsMjcwMzAs''@;'; put 'put ''MjcwMzIsMjcwNDEsMjcwNDUsMjcwNDYsMjcwNDgsMjcwNTEsMjcwNTMsMjcwNTUsMjcwNjMsMjcwNjQsMjcwNjYsMjcwNjgsMjcwNzcsMjcwODAsMjcwODksMjcwOTQsMjcwOTUsMjcxMDYsMjcxMDksMjcxMTgsMjcxMTksMjcxMjEsMjcxMjMsMjcxMjUsMjcxMzQsMjcxMzYsMjcxMzcsMjcx''@;'; put 'put ''MzksMjcxNTEsMjcxNTMsMjcxNTcsMjcxNjIsMjcxNjUsMjcxNjgsMjcxNzIsMjcxNzYsMjcxODQsMjcxODYsMjcxODgsMjcxOTEsMjcxOTUsMjcxOTgsMjcxOTksMjcyMDUsMjcyMDYsMjcyMDksMjcyMTAsMjcyMTQsMjcyMTYsMjcyMTcsMjcyMTgsMjcyMjEsMjcyMjIsMjcyMjcsMjcyMzYs''@;'; put 'put ''MjcyMzksMjcyNDIsMjcyNDksMjcyNTEsMjcyNjIsMjcyNjUsMjcyNjcsMjcyNzAsMjcyNzEsMjcyNzMsMjcyNzUsMjcyODEsMjcyOTEsMjcyOTMsMjcyOTQsMjcyOTUsMjczMDEsMjczMDcsMjczMTEsMjczMTIsMjczMTMsMjczMTYsMjczMjUsMjczMjYsMjczMjcsMjczMzQsMjczMzcsMjcz''@;'; put 'put ''MzYsMjczNDAsMjczNDQsMjczNDgsMjczNDksMjczNTAsMjczNTYsMjczNTcsMjczNjQsMjczNjcsMjczNzIsMjczNzYsMjczNzcsMjczNzgsMjczODgsMjczODksMjczOTQsMjczOTUsMjczOTgsMjczOTksMjc0MDEsMjc0MDcsMjc0MDgsMjc0MDksMjc0MTUsMjc0MTksMjc0MjIsMjc0Mjgs''@;'; put 'put ''Mjc0MzIsMjc0MzUsMjc0MzYsMjc0MzksMjc0NDUsMjc0NDYsMjc0NTEsMjc0NTUsMjc0NjIsMjc0NjYsMjc0NjksMjc0NzQsMjc0NzgsMjc0ODAsMjc0ODUsMjc0ODgsMjc0OTUsMjc0OTksMjc1MDIsMjc1MDQsMjc1MDksMjc1MTcsMjc1MTgsMjc1MjIsMjc1MjUsMjc1NDMsMjc1NDcsMjc1''@;'; put 'put ''NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NjAsMjc1NjEsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjgsMjc1NzYsMjc1NzcsMjc1ODEsMjc1ODIsMjc1ODcsMjc1ODgsMjc1OTMsMjc1OTYsMjc2MDYsMjc2MTAsMjc2MTcsMjc2MTksMjc2MjIsMjc2MjMsMjc2MzAsMjc2MzMsMjc2MzksMjc2NDEs''@;'; put 'put ''Mjc2NDcsMjc2NTAsMjc2NTIsMjc2NTMsMjc2NTcsMjc2NjEsMjc2NjIsMjc2NjQsMjc2NjYsMjc2NzMsMjc2NzksMjc2ODYsMjc2ODcsMjc2ODgsMjc2OTIsMjc2OTQsMjc2OTksMjc3MDEsMjc3MDIsMjc3MDYsMjc3MDcsMjc3MTEsMjc3MjIsMjc3MjMsMjc3MjUsMjc3MjcsMjc3MzAsMjc3''@;'; put 'put ''MzIsMjc3MzcsMjc3MzksMjc3NDAsMjc3NTUsMjc3NTcsMjc3NTksMjc3NjQsMjc3NjYsMjc3NjgsMjc3NjksMjc3NzEsMjc3ODEsMjc3ODIsMjc3ODMsMjc3ODUsMjc3OTYsMjc3OTcsMjc3OTksMjc4MDAsMjc4MDQsMjc4MDcsMjc4MjQsMjc4MjYsMjc4MjgsMjc4NDIsMjc4NDYsMjc4NTMs''@;'; put 'put ''Mjc4NTUsMjc4NTYsMjc4NTcsMjc4NTgsMjc4NjAsMjc4NjIsMjc4NjYsMjc4NjgsMjc4NzIsMjc4NzksMjc4ODEsMjc4ODMsMjc4ODQsMjc4ODYsMjc4OTAsMjc4OTIsMjc5MDgsMjc5MTEsMjc5MTQsMjc5MTgsMjc5MTksMjc5MjEsMjc5MjMsMjc5MzAsMjc5NDIsMjc5NDMsMjc5NDQsMjc3''@;'; put 'put ''NTEsMjc5NTAsMjc5NTEsMjc5NTMsMjc5NjEsMjc5NjQsMjc5NjcsMjc5OTEsMjc5OTgsMjc5OTksMjgwMDEsMjgwMDUsMjgwMDcsMjgwMTUsMjgwMTYsMjgwMjgsMjgwMzQsMjgwMzksMjgwNDksMjgwNTAsMjgwNTIsMjgwNTQsMjgwNTUsMjgwNTYsMjgwNzQsMjgwNzYsMjgwODQsMjgwODcs''@;'; put 'put ''MjgwODksMjgwOTMsMjgwOTUsMjgxMDAsMjgxMDQsMjgxMDYsMjgxMTAsMjgxMTEsMjgxMTgsMjgxMjMsMjgxMjUsMjgxMjcsMjgxMjgsMjgxMzAsMjgxMzMsMjgxMzcsMjgxNDMsMjgxNDQsMjgxNDgsMjgxNTAsMjgxNTYsMjgxNjAsMjgxNjQsMjgxOTAsMjgxOTQsMjgxOTksMjgyMTAsMjgy''@;'; put 'put ''MTQsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjgsMjgyMjksMjgyMzIsMjgyMzMsMjgyMzUsMjgyMzksMjgyNDEsMjgyNDIsMjgyNDMsMjgyNDQsMjgyNDcsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTgsMjgyNTksMjgyNjQsMjgyNzUsMjgyODMsMjgyODUsMjgzMDEsMjgzMDcsMjgzMTMsMjgzMjAs''@;'; put 'put ''MjgzMjcsMjgzMzMsMjgzMzQsMjgzMzcsMjgzMzksMjgzNDcsMjgzNTEsMjgzNTIsMjgzNTMsMjgzNTUsMjgzNTksMjgzNjAsMjgzNjIsMjgzNjUsMjgzNjYsMjgzNjcsMjgzOTUsMjgzOTcsMjgzOTgsMjg0MDksMjg0MTEsMjg0MTMsMjg0MjAsMjg0MjQsMjg0MjYsMjg0MjgsMjg0MjksMjg0''@;'; put 'put ''MzgsMjg0NDAsMjg0NDIsMjg0NDMsMjg0NTQsMjg0NTcsMjg0NTgsMjg0NjMsMjg0NjQsMjg0NjcsMjg0NzAsMjg0NzUsMjg0NzYsMjg0NjEsMjg0OTUsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDMsMjg1MDUsMjg1MDYsMjg1MDksMjg1MTAsMjg1MTMsMjg1MTQsMjg1MjAsMjg1MjQsMjg1NDEs''@;'; put 'put ''Mjg1NDIsMjg1NDcsMjg1NTEsMjg1NTIsMjg1NTUsMjg1NTYsMjg1NTcsMjg1NjAsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjYsMjg1NzAsMjg1NzUsMjg1NzYsMjg1ODEsMjg1ODIsMjg1ODMsMjg1ODQsMjg1OTAsMjg1OTEsMjg1OTIsMjg1OTcsMjg1OTgsMjg2MDQsMjg2MTMsMjg2MTUsMjg2''@;'; put 'put ''MTYsMjg2MTgsMjg2MzQsMjg2MzgsMjg2NDgsMjg2NDksMjg2NTYsMjg2NjEsMjg2NjUsMjg2NjgsMjg2NjksMjg2NzIsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODUsMjg2OTUsMjg3MDQsMjg3MDcsMjg3MTksMjg3MjQsMjg3MjcsMjg3MjksMjg3MzIsMjg3MzksMjg3NDAsMjg3NDQsMjg3NDUs''@;'; put 'put ''Mjg3NDYsMjg3NDcsMjg3NTYsMjg3NTcsMjg3NjUsMjg3NjYsMjg3NTAsMjg3NzIsMjg3NzMsMjg3ODAsMjg3ODIsMjg3ODksMjg3OTAsMjg3OTgsMjg4MDEsMjg4MDUsMjg4MDYsMjg4MjAsMjg4MjEsMjg4MjIsMjg4MjMsMjg4MjQsMjg4MjcsMjg4MzYsMjg4NDMsMjg4NDgsMjg4NDksMjg4''@;'; put 'put ''NTIsMjg4NTUsMjg4NzQsMjg4ODEsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODgsMjg4OTIsMjg5MDAsMjg5MjIsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzksMjg5NDAsMjg5NDMsMjg5NTgsMjg5NjAsMjg5NzEsMjg5NzMsMjg5NzUsMjg5NzYsMjg5NzcsMjg5ODQs''@;'; put 'put ''Mjg5OTMsMjg5OTcsMjg5OTgsMjg5OTksMjkwMDIsMjkwMDMsMjkwMDgsMjkwMTAsMjkwMTUsMjkwMTgsMjkwMjAsMjkwMjIsMjkwMjQsMjkwMzIsMjkwNDksMjkwNTYsMjkwNjEsMjkwNjMsMjkwNjgsMjkwNzQsMjkwODIsMjkwODMsMjkwODgsMjkwOTAsMjkxMDMsMjkxMDQsMjkxMDYsMjkx''@;'; put 'put ''MDcsMjkxMTQsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjQsMjkxMzEsMjkxMzIsMjkxMzksMjkxNDIsMjkxNDUsMjkxNDYsMjkxNDgsMjkxNzYsMjkxODIsMjkxODQsMjkxOTEsMjkxOTIsMjkxOTMsMjkyMDMsMjkyMDcsMjkyMTAsMjkyMTMsMjkyMTUsMjkyMjAsMjkyMjcsMjkyMzEsMjkyMzYs''@;'; put 'put ''MjkyNDAsMjkyNDEsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTMsMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjcsMjkyNjksMjkyNzAsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODgsMjkyOTEsMjkyOTQsMjkyOTUsMjkyOTcsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMTEsMjkz''@;'; put 'put ''MTYsMjkzMjEsMjkzMjUsMjkzMjYsMjkzMzEsMjkzMzksMjkzNTIsMjkzNTcsMjkzNTgsMjkzNjEsMjkzNjQsMjkzNzQsMjkzNzcsMjkzODMsMjkzODUsMjkzODgsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDcsMjk0MTMsMjk0MjcsMjk0MjgsMjk0MzQsMjk0MzUsMjk0MzgsMjk0NDIsMjk0NDQs''@;'; put 'put ''Mjk0NDUsMjk0NDcsMjk0NTEsMjk0NTMsMjk0NTgsMjk0NTksMjk0NjQsMjk0NjUsMjk0NzAsMjk0NzQsMjk0NzYsMjk0NzksMjk0ODAsMjk0ODQsMjk0ODksMjk0OTAsMjk0OTMsMjk0OTgsMjk0OTksMjk1MDEsMjk1MDcsMjk1MTcsMjk1MjAsMjk1MjIsMjk1MjYsMjk1MjgsMjk1MzMsMjk1''@;'; put 'put ''MzQsMjk1MzUsMjk1MzYsMjk1NDIsMjk1NDMsMjk1NDUsMjk1NDcsMjk1NDgsMjk1NTAsMjk1NTEsMjk1NTMsMjk1NTksMjk1NjEsMjk1NjQsMjk1NjgsMjk1NjksMjk1NzEsMjk1NzMsMjk1NzQsMjk1ODIsMjk1ODQsMjk1ODcsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTYsMjk1OTgsMjk1OTks''@;'; put 'put ''Mjk2MDAsMjk2MDIsMjk2MDUsMjk2MDYsMjk2MTAsMjk2MTEsMjk2MTMsMjk2MjEsMjk2MjMsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzEsMjk2MzcsMjk2MzgsMjk2NDEsMjk2NDMsMjk2NDQsMjk2NDcsMjk2NTAsMjk2NTEsMjk2NTQsMjk2NTcsMjk2NjEsMjk2NjUsMjk2NjcsMjk2NzAsMjk2''@;'; put 'put ''NzEsMjk2NzMsMjk2ODQsMjk2ODUsMjk2ODcsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTMsMjk2OTUsMjk2OTYsMjk2OTcsMjk3MDAsMjk3MDMsMjk3MDYsMjk3MTMsMjk3MjIsMjk3MjMsMjk3MzIsMjk3MzQsMjk3MzYsMjk3MzcsMjk3MzgsMjk3MzksMjk3NDAsMjk3NDEsMjk3NDIsMjk3NDMs''@;'; put 'put ''Mjk3NDQsMjk3NDUsMjk3NTMsMjk3NjAsMjk3NjMsMjk3NjQsMjk3NjYsMjk3NjcsMjk3NzEsMjk3NzMsMjk3NzcsMjk3NzgsMjk3ODMsMjk3ODksMjk3OTQsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDMsMjk4MDUsMjk4MDYsMjk4MDksMjk4MTAsMjk4MjQsMjk4MjUsMjk4MjksMjk4MzAsMjk4''@;'; put 'put ''MzEsMjk4MzMsMjk4MzksMjk4NDAsMjk4NDEsMjk4NDIsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTIsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTksMjk4NjIsMjk4NjQsMjk4NjUsMjk4NjYsMjk4NjcsMjk4NzAsMjk4NzEsMjk4NzMsMjk4NzQsMjk4NzcsMjk4ODEsMjk4ODMsMjk4ODcsMjk4OTYs''@;'; put 'put ''Mjk4OTcsMjk5MDAsMjk5MDQsMjk5MDcsMjk5MTIsMjk5MTQsMjk5MTUsMjk5MTgsMjk5MTksMjk5MjQsMjk5MjgsMjk5MzAsMjk5MzEsMjk5MzUsMjk5NDAsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NTEsMjk5NTgsMjk5NzAsMjk5NzQsMjk5NzUsMjk5ODQsMjk5ODUsMjk5ODgsMjk5OTEsMjk5''@;'; put 'put ''OTMsMjk5OTQsMjk5OTksMzAwMDYsMzAwMDksMzAwMTMsMzAwMTQsMzAwMTUsMzAwMTYsMzAwMTksMzAwMjMsMzAwMjQsMzAwMzAsMzAwMzIsMzAwMzQsMzAwMzksMzAwNDYsMzAwNDcsMzAwNDksMzAwNjMsMzAwNjUsMzAwNzMsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODEs''@;'; put 'put ''MzAwODUsMzAwOTYsMzAwOTgsMzAwOTksMzAxMDEsMzAxMDUsMzAxMDgsMzAxMTQsMzAxMTYsMzAxMzIsMzAxMzgsMzAxNDMsMzAxNDQsMzAxNDUsMzAxNDgsMzAxNTAsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjcsMzAxNzIsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODAsMzAxODMsMzAxODgsMzAx''@;'; put 'put ''OTAsMzAxOTEsMzAxOTMsMzAyMDEsMzAyMDgsMzAyMTAsMzAyMTEsMzAyMTIsMzAyMTUsMzAyMTYsMzAyMTgsMzAyMjAsMzAyMjMsMzAyMjYsMzAyMjcsMzAyMjksMzAyMzAsMzAyMzMsMzAyMzUsMzAyMzYsMzAyMzcsMzAyMzgsMzAyNDMsMzAyNDUsMzAyNDYsMzAyNDksMzAyNTMsMzAyNTgs''@;'; put 'put ''MzAyNTksMzAyNjEsMzAyNjQsMzAyNjUsMzAyNjYsMzAyNjgsMzAyODIsMzAyNzIsMzAyNzMsMzAyNzUsMzAyNzYsMzAyNzcsMzAyODEsMzAyODMsMzAyOTMsMzAyOTcsMzAzMDMsMzAzMDgsMzAzMDksMzAzMTcsMzAzMTgsMzAzMTksMzAzMjEsMzAzMjQsMzAzMzcsMzAzNDEsMzAzNDgsMzAz''@;'; put 'put ''NDksMzAzNTcsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjcsMzAzNjgsMzAzNzAsMzAzNzEsMzAzNzIsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzgsMzAzODEsMzAzOTcsMzA0MDEsMzA0MDUsMzA0MDksMzA0MTEsMzA0MTIsMzA0MTQsMzA0MjAsMzA0MjUsMzA0MzIsMzA0MzgsMzA0NDAs''@;'; put 'put ''MzA0NDQsMzA0NDgsMzA0NDksMzA0NTQsMzA0NTcsMzA0NjAsMzA0NjQsMzA0NzAsMzA0NzQsMzA0NzgsMzA0ODIsMzA0ODQsMzA0ODUsMzA0ODcsMzA0ODksMzA0OTAsMzA0OTIsMzA0OTgsMzA1MDQsMzA1MDksMzA1MTAsMzA1MTEsMzA1MTYsMzA1MTcsMzA1MTgsMzA1MjEsMzA1MjUsMzA1''@;'; put 'put ''MjYsMzA1MzAsMzA1MzMsMzA1MzQsMzA1MzgsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NTAsMzA1NTEsMzA1NTYsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjIsMzA1NjQsMzA1NjcsMzA1NzAsMzA1NzIsMzA1NzYsMzA1NzgsMzA1NzksMzA1ODAsMzA1ODYsMzA1ODksMzA1OTIsMzA1OTYs''@;'; put 'put ''MzA2MDQsMzA2MDUsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTgsMzA2MjMsMzA2MjYsMzA2MzEsMzA2MzQsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDUsMzA2NTQsMzA2NTksMzA2NjUsMzA2NzMsMzA2NzQsMzA2NzcsMzA2ODEsMzA2ODYsMzA2ODcsMzA2ODgsMzA2OTIsMzA2OTQsMzA2OTgsMzA3''@;'; put 'put ''MDAsMzA3MDQsMzA3MDUsMzA3MDgsMzA3MTIsMzA3MTUsMzA3MjUsMzA3MjYsMzA3MjksMzA3MzMsMzA3MzQsMzA3MzcsMzA3NDksMzA3NTMsMzA3NTQsMzA3NTUsMzA3NjUsMzA3NjYsMzA3NjgsMzA3NzMsMzA3NzUsMzA3ODcsMzA3ODgsMzA3OTEsMzA3OTIsMzA3OTYsMzA3OTgsMzA4MDIs''@;'; put 'put ''MzA4MTIsMzA4MTQsMzA4MTYsMzA4MTcsMzA4MTksMzA4MjAsMzA4MjQsMzA4MjYsMzA4MzAsMzA4NDIsMzA4NDYsMzA4NTgsMzA4NjMsMzA4NjgsMzA4NzIsMzA4ODEsMzA4NzcsMzA4NzgsMzA4NzksMzA4ODQsMzA4ODgsMzA4OTIsMzA4OTMsMzA4OTYsMzA4OTcsMzA4OTgsMzA4OTksMzA5''@;'; put 'put ''MDcsMzA5MDksMzA5MTEsMzA5MTksMzA5MjAsMzA5MjEsMzA5MjQsMzA5MjYsMzA5MzAsMzA5MzEsMzA5MzMsMzA5MzQsMzA5NDgsMzA5MzksMzA5NDMsMzA5NDQsMzA5NDUsMzA5NTAsMzA5NTQsMzA5NjIsMzA5NjMsMzA5NzYsMzA5NjYsMzA5NjcsMzA5NzAsMzA5NzEsMzA5NzUsMzA5ODIs''@;'; put 'put ''MzA5ODgsMzA5OTIsMzEwMDIsMzEwMDQsMzEwMDYsMzEwMDcsMzEwMDgsMzEwMTMsMzEwMTUsMzEwMTcsMzEwMjEsMzEwMjUsMzEwMjgsMzEwMjksMzEwMzUsMzEwMzcsMzEwMzksMzEwNDQsMzEwNDUsMzEwNDYsMzEwNTAsMzEwNTEsMzEwNTUsMzEwNTcsMzEwNjAsMzEwNjQsMzEwNjcsMzEw''@;'; put 'put ''NjgsMzEwNzksMzEwODEsMzEwODMsMzEwOTAsMzEwOTcsMzEwOTksMzExMDAsMzExMDIsMzExMTUsMzExMTYsMzExMjEsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjgsMzExMzEsMzExMzIsMzExMzcsMzExNDQsMzExNDUsMzExNDcsMzExNTEsMzExNTMsMzExNTYsMzExNjAsMzExNjMs''@;'; put 'put ''MzExNzAsMzExNzIsMzExNzUsMzExNzYsMzExNzgsMzExODMsMzExODgsMzExOTAsMzExOTQsMzExOTcsMzExOTgsMzEyMDAsMzEyMDIsMzEyMDUsMzEyMTAsMzEyMTEsMzEyMTMsMzEyMTcsMzEyMjQsMzEyMjgsMzEyMzQsMzEyMzUsMzEyMzksMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDksMzEy''@;'; put 'put ''NTMsMzEyNTksMzEyNjIsMzEyNjUsMzEyNzEsMzEyNzUsMzEyNzcsMzEyNzksMzEyODAsMzEyODQsMzEyODUsMzEyODgsMzEyODksMzEyOTAsMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDgsMzEzMTcsMzEzMTgsMzEzMjEsMzEzMjQsMzEzMjUsMzEzMjcsMzEzMjgsMzEzMzMsMzEzMzUs''@;'; put 'put ''MzEzMzgsMzEzNDEsMzEzNDksMzEzNTIsMzEzNTgsMzEzNjAsMzEzNjIsMzEzNjUsMzEzNjYsMzEzNzAsMzEzNzEsMzEzNzYsMzEzNzcsMzEzODAsMzEzOTAsMzEzOTIsMzEzOTUsMzE0MDQsMzE0MTEsMzE0MTMsMzE0MTcsMzE0MTksMzE0MjAsMzE0MzAsMzE0MzMsMzE0MzYsMzE0MzgsMzE0''@;'; put 'put ''NDEsMzE0NTEsMzE0NjQsMzE0NjUsMzE0NjcsMzE0NjgsMzE0NzMsMzE0NzYsMzE0ODMsMzE0ODUsMzE0ODYsMzE0OTUsMzE1MDgsMzE1MTksMzE1MjMsMzE1MjcsMzE1MjksMzE1MzAsMzE1MzEsMzE1MzMsMzE1MzQsMzE1MzUsMzE1MzYsMzE1MzcsMzE1NDAsMzE1NDksMzE1NTEsMzE1NTIs''@;'; put 'put ''MzE1NTMsMzE1NTksMzE1NjYsMzE1NzMsMzE1ODQsMzE1ODgsMzE1OTAsMzE1OTMsMzE1OTQsMzE1OTcsMzE1OTksMzE2MDIsMzE2MDMsMzE2MDcsMzE2MjAsMzE2MjUsMzE2MzAsMzE2MzIsMzE2MzMsMzE2MzgsMzE2NDMsMzE2NDYsMzE2NDgsMzE2NTMsMzE2NjAsMzE2NjMsMzE2NjQsMzE2''@;'; put 'put ''NjYsMzE2NjksMzE2NzAsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2ODIsMzE2ODUsMzE2ODgsMzE2OTAsMzE3MDAsMzE3MDIsMzE3MDMsMzE3MDUsMzE3MDYsMzE3MDcsMzE3MjAsMzE3MjIsMzE3MzAsMzE3MzIsMzE3MzMsMzE3MzYsMzE3MzcsMzE3MzgsMzE3NDAsMzE3NDIsMzE3NDUs''@;'; put 'put ''MzE3NDYsMzE3NDcsMzE3NDgsMzE3NTAsMzE3NTMsMzE3NTUsMzE3NTYsMzE3NTgsMzE3NTksMzE3NjksMzE3NzEsMzE3NzYsMzE3ODEsMzE3ODIsMzE3ODQsMzE3ODgsMzE3OTMsMzE3OTUsMzE3OTYsMzE3OTgsMzE4MDEsMzE4MDIsMzE4MTQsMzE4MTgsMzE4MjksMzE4MjUsMzE4MjYsMzE4''@;'; put 'put ''MjcsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4NDEsMzE4NDMsMzE4NDcsMzE4NDksMzE4NTMsMzE4NTQsMzE4NTYsMzE4NTgsMzE4NjUsMzE4NjgsMzE4NjksMzE4NzgsMzE4NzksMzE4ODcsMzE4OTIsMzE5MDIsMzE5MDQsMzE5MTAsMzE5MjAsMzE5MjYsMzE5Mjcs''@;'; put 'put ''MzE5MzAsMzE5MzEsMzE5MzIsMzE5MzUsMzE5NDAsMzE5NDMsMzE5NDQsMzE5NDUsMzE5NDksMzE5NTEsMzE5NTUsMzE5NTYsMzE5NTcsMzE5NTksMzE5NjEsMzE5NjIsMzE5NjUsMzE5NzQsMzE5NzcsMzE5NzksMzE5ODksMzIwMDMsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTUsMzIwMTcsMzIw''@;'; put 'put ''MTgsMzIwMTksMzIwMjIsMzIwMjksMzIwMzAsMzIwMzUsMzIwMzgsMzIwNDIsMzIwNDUsMzIwNDksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjQsMzIwNjUsMzIwNzEsMzIwNzIsMzIwNzcsMzIwODEsMzIwODMsMzIwODcsMzIwODksMzIwOTAsMzIwOTIsMzIwOTMsMzIxMDEsMzIxMDMsMzIxMDYs''@;'; put 'put ''MzIxMTIsMzIxMjAsMzIxMjIsMzIxMjMsMzIxMjcsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzMsMzIxMzQsMzIxMzYsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDUsMzIxNTAsMzIxNTEsMzIxNTcsMzIxNTgsMzIxNjYsMzIxNjcsMzIxNzAsMzIxNzksMzIxODIsMzIxODMsMzIxODUsMzIxOTQsMzIx''@;'; put 'put ''OTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMTUsMzIyMTcsMzIyNTYsMzIyMjYsMzIyMjksMzIyMzAsMzIyMzQsMzIyMzUsMzIyMzcsMzIyNDEsMzIyNDUsMzIyNDYsMzIyNDksMzIyNTAsMzIyNjQsMzIyNzIsMzIyNzMsMzIyNzcsMzIyNzksMzIyODQsMzIyODUs''@;'; put 'put ''MzIyODgsMzIyOTUsMzIyOTYsMzIzMDAsMzIzMDEsMzIzMDMsMzIzMDcsMzIzMTAsMzIzMTksMzIzMjQsMzIzMjUsMzIzMjcsMzIzMzQsMzIzMzYsMzIzMzgsMzIzNDQsMzIzNTEsMzIzNTMsMzIzNTQsMzIzNTcsMzIzNjMsMzIzNjYsMzIzNjcsMzIzNzEsMzIzNzYsMzIzODIsMzIzODUsMzIz''@;'; put 'put ''OTAsMzIzOTEsMzIzOTQsMzIzOTcsMzI0MDEsMzI0MDUsMzI0MDgsMzI0MTAsMzI0MTMsMzI0MTQsMzI1NzIsMzI1NzEsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzksMzI1ODAsMzI1ODMsMzI1OTEsMzI1OTQsMzI1OTUsMzI2MDMsMzI2MDQsMzI2MDUsMzI2MDksMzI2MTEsMzI2MTIsMzI2MTMs''@;'; put 'put ''MzI2MTQsMzI2MjEsMzI2MjUsMzI2MzcsMzI2MzgsMzI2MzksMzI2NDAsMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NjIsMzI2NjMsMzI2NjgsMzI2NzMsMzI2NzQsMzI2NzgsMzI2ODIsMzI2ODUsMzI2OTIsMzI3MDAsMzI3MDMsMzI3MDQsMzI3MDcsMzI3MTIsMzI3MTgsMzI3''@;'; put 'put ''MTksMzI3MzEsMzI3MzUsMzI3MzksMzI3NDEsMzI3NDQsMzI3NDgsMzI3NTAsMzI3NTEsMzI3NTQsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzUsMzI3NzYsMzI3NzgsMzI3ODEsMzI3ODIsMzI3ODMsMzI3ODUsMzI3ODcsMzI3ODgsMzI3OTAsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDAs''@;'; put 'put ''MzI4MDQsMzI4MDYsMzI4MTIsMzI4MTQsMzI4MTYsMzI4MjAsMzI4MjEsMzI4MjMsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzYsMzI4NjQsMzI4NjgsMzI4NzAsMzI4NzcsMzI4ODEsMzI4ODUsMzI4OTcsMzI5MDQsMzI5MTAsMzI5MjQsMzI5MjYsMzI5MzQsMzI5MzUsMzI5''@;'; put 'put ''MzksMzI5NTIsMzI5NTMsMzI5NjgsMzI5NzMsMzI5NzUsMzI5NzgsMzI5ODAsMzI5ODEsMzI5ODMsMzI5ODQsMzI5OTIsMzMwMDUsMzMwMDYsMzMwMDgsMzMwMTAsMzMwMTEsMzMwMTQsMzMwMTcsMzMwMTgsMzMwMjIsMzMwMjcsMzMwMzUsMzMwNDYsMzMwNDcsMzMwNDgsMzMwNTIsMzMwNTQs''@;'; put 'put ''MzMwNTYsMzMwNjAsMzMwNjMsMzMwNjgsMzMwNzIsMzMwNzcsMzMwODIsMzMwODQsMzMwOTMsMzMwOTUsMzMwOTgsMzMxMDAsMzMxMDYsMzMxMTEsMzMxMjAsMzMxMjEsMzMxMjcsMzMxMjgsMzMxMjksMzMxMzMsMzMxMzUsMzMxNDMsMzMxNTMsMzMxNjgsMzMxNTYsMzMxNTcsMzMxNTgsMzMx''@;'; put 'put ''NjMsMzMxNjYsMzMxNzQsMzMxNzYsMzMxNzksMzMxODIsMzMxODYsMzMxOTgsMzMyMDIsMzMyMDQsMzMyMTEsMzMyMjcsMzMyMTksMzMyMjEsMzMyMjYsMzMyMzAsMzMyMzEsMzMyMzcsMzMyMzksMzMyNDMsMzMyNDUsMzMyNDYsMzMyNDksMzMyNTIsMzMyNTksMzMyNjAsMzMyNjQsMzMyNjUs''@;'; put 'put ''MzMyNjYsMzMyNjksMzMyNzAsMzMyNzIsMzMyNzMsMzMyNzcsMzMyNzksMzMyODAsMzMyODMsMzMyOTUsMzMyOTksMzMzMDAsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTMsMzMzMTQsMzMzMjAsMzMzMzAsMzMzMzIsMzMzMzgsMzMzNDcsMzMzNDgsMzMzNDksMzMzNTAsMzMzNTUsMzMzNTgsMzMz''@;'; put 'put ''NTksMzMzNjEsMzMzNjYsMzMzNzIsMzMzNzYsMzMzNzksMzMzODMsMzMzODksMzMzOTYsMzM0MDMsMzM0MDUsMzM0MDcsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTIsMzM0MTUsMzM0MTcsMzM0MTgsMzM0MjIsMzM0MjUsMzM0MjgsMzM0MzAsMzM0MzIsMzM0MzQsMzM0MzUsMzM0NDAsMzM0NDEs''@;'; put 'put ''MzM0NDMsMzM0NDQsMzM0NDcsMzM0NDgsMzM0NDksMzM0NTAsMzM0NTQsMzM0NTYsMzM0NTgsMzM0NjAsMzM0NjMsMzM0NjYsMzM0NjgsMzM0NzAsMzM0NzEsMzM0NzgsMzM0ODgsMzM0OTMsMzM0OTgsMzM1MDQsMzM1MDYsMzM1MDgsMzM1MTIsMzM1MTQsMzM1MTcsMzM1MTksMzM1MjYsMzM1''@;'; put 'put ''MjcsMzM1MzMsMzM1MzQsMzM1MzYsMzM1MzcsMzM1NDMsMzM1NDQsMzM1NDYsMzM1NDcsMzM2MjAsMzM1NjMsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjksMzM1NzAsMzM1ODAsMzM1ODEsMzM1ODIsMzM1ODQsMzM1ODcsMzM1OTEsMzM1OTQsMzM1OTYsMzM1OTcsMzM2MDIsMzM2MDMsMzM2MDQs''@;'; put 'put ''MzM2MDcsMzM2MTMsMzM2MTQsMzM2MTcsMzM2MjEsMzM2MjIsMzM2MjMsMzM2NDgsMzM2NTYsMzM2NjEsMzM2NjMsMzM2NjQsMzM2NjYsMzM2NjgsMzM2NzAsMzM2NzcsMzM2ODIsMzM2ODQsMzM2ODUsMzM2ODgsMzM2ODksMzM2OTEsMzM2OTIsMzM2OTMsMzM3MDIsMzM3MDMsMzM3MDUsMzM3''@;'; put 'put ''MDgsMzM3MjYsMzM3MjcsMzM3MjgsMzM3MzUsMzM3MzcsMzM3NDMsMzM3NDQsMzM3NDUsMzM3NDgsMzM3NTcsMzM2MTksMzM3NjgsMzM3NzAsMzM3ODIsMzM3ODQsMzM3ODUsMzM3ODgsMzM3OTMsMzM3OTgsMzM4MDIsMzM4MDcsMzM4MDksMzM4MTMsMzM4MTcsMzM3MDksMzM4MzksMzM4NDks''@;'; put 'put ''MzM4NjEsMzM4NjMsMzM4NjQsMzM4NjYsMzM4NjksMzM4NzEsMzM4NzMsMzM4NzQsMzM4NzgsMzM4ODAsMzM4ODEsMzM4ODIsMzM4ODQsMzM4ODgsMzM4OTIsMzM4OTMsMzM4OTUsMzM4OTgsMzM5MDQsMzM5MDcsMzM5MDgsMzM5MTAsMzM5MTIsMzM5MTYsMzM5MTcsMzM5MjEsMzM5MjUsMzM5''@;'; put 'put ''MzgsMzM5MzksMzM5NDEsMzM5NTAsMzM5NTgsMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjcsMzM5NjksMzM5NzIsMzM5NzgsMzM5ODEsMzM5ODIsMzM5ODQsMzM5ODYsMzM5OTEsMzM5OTIsMzM5OTYsMzM5OTksMzQwMDMsMzQwMTIsMzQwMjMsMzQwMjYsMzQwMzEsMzQwMzIsMzQwMzMsMzQwMzQs''@;'; put 'put ''MzQwMzksMzQwOTgsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNTAsMzQwNTEsMzQwNTUsMzQwNjAsMzQwNjIsMzQwNjQsMzQwNzYsMzQwNzgsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODcsMzQwOTAsMzQwOTEsMzQwOTUsMzQwOTksMzQxMDAsMzQxMDIsMzQxMTEsMzQxMTgsMzQxMjcsMzQx''@;'; put 'put ''MjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzQsMzQxMzcsMzQxNDAsMzQxNDEsMzQxNDIsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDgsMzQxNTUsMzQxNTksMzQxNjksMzQxNzAsMzQxNzEsMzQxNzMsMzQxNzUsMzQxNzcsMzQxODEsMzQxODIsMzQxODUsMzQxODcsMzQxODgsMzQxOTEs''@;'; put 'put ''MzQxOTUsMzQyMDAsMzQyMDUsMzQyMDcsMzQyMDgsMzQyMTAsMzQyMTMsMzQyMTUsMzQyMjgsMzQyMzAsMzQyMzEsMzQyMzIsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDIsMzQyNDcsMzQyNTAsMzQyNTEsMzQyNTQsMzQyMjEsMzQyNjQsMzQyNjYsMzQyNzEsMzQyNzIsMzQyNzgsMzQy''@;'; put 'put ''ODAsMzQyODUsMzQyOTEsMzQyOTQsMzQzMDAsMzQzMDMsMzQzMDQsMzQzMDgsMzQzMDksMzQzMTcsMzQzMTgsMzQzMjAsMzQzMjEsMzQzMjIsMzQzMjgsMzQzMjksMzQzMzEsMzQzMzQsMzQzMzcsMzQzNDMsMzQzNDUsMzQzNTgsMzQzNjAsMzQzNjIsMzQzNjQsMzQzNjUsMzQzNjgsMzQzNzAs''@;'; put 'put ''MzQzNzQsMzQzODYsMzQzODcsMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTcsMzQ0MDAsMzQ0MDEsMzQ0MDIsMzQ0MDMsMzQ0MDQsMzQ0MDksMzQ0MTIsMzQ0MTUsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjYsMzQ0NDUsMzQ0NDksMzQ0NTQsMzQ0NTYsMzQ0NTgsMzQ0NjAsMzQ0NjUsMzQ0''@;'; put 'put ''NzAsMzQ0NzEsMzQ0NzIsMzQ0NzcsMzQ0ODEsMzQ0ODMsMzQ0ODQsMzQ0ODUsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTUsMzQ0OTYsMzQ0OTcsMzQ0OTksMzQ1MDEsMzQ1MTMsMzQ1MTQsMzQ1MTcsMzQ1MTksMzQ1MjIsMzQ1MjQsMzQ1MjgsMzQ1MzEsMzQ1MzMsMzQ1MzUsMzQ0NDAsMzQ1NTQs''@;'; put 'put ''MzQ1NTYsMzQ1NTcsMzQ1NjQsMzQ1NjUsMzQ1NjcsMzQ1NzEsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzksMzQ1ODAsMzQ1ODUsMzQ1OTAsMzQ1OTEsMzQ1OTMsMzQ1OTUsMzQ2MDAsMzQ2MDYsMzQ2MDcsMzQ2MDksMzQ2MTAsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjIsMzQ2MjQsMzQ2''@;'; put 'put ''MjcsMzQ2MjksMzQ2MzcsMzQ2NDgsMzQ2NTMsMzQ2NTcsMzQ2NjAsMzQ2NjEsMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2ODMsMzQ2OTEsMzQ2OTIsMzQ2OTMsMzQ2OTQsMzQ2OTUsMzQ2OTYsMzQ2OTcsMzQ2OTksMzQ3MDAsMzQ3MDQsMzQ3MDcsMzQ3MDksMzQ3MTEsMzQ3MTIsMzQ3MTMsMzQ3MTgs''@;'; put 'put ''MzQ3MjAsMzQ3MjMsMzQ3MjcsMzQ3MzIsMzQ3MzMsMzQ3MzQsMzQ3MzcsMzQ3NDEsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NjAsMzQ3NjEsMzQ3NjIsMzQ3NjYsMzQ3NzMsMzQ3NzQsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3ODMsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTQsMzQ3OTUsMzQ3OTcsMzQ4''@;'; put 'put ''MDEsMzQ4MDMsMzQ4MDgsMzQ4MTAsMzQ4MTUsMzQ4MTcsMzQ4MTksMzQ4MjIsMzQ4MjUsMzQ4MjYsMzQ4MjcsMzQ4MzIsMzQ4NDEsMzQ4MzQsMzQ4MzUsMzQ4MzYsMzQ4NDAsMzQ4NDIsMzQ4NDMsMzQ4NDQsMzQ4NDYsMzQ4NDcsMzQ4NTYsMzQ4NjEsMzQ4NjIsMzQ4NjQsMzQ4NjYsMzQ4Njks''@;'; put 'put ''MzQ4NzQsMzQ4NzYsMzQ4ODEsMzQ4ODMsMzQ4ODUsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTcsMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDgsMzQ5MTEsMzQ5MTIsMzQ5MTYsMzQ5MjEsMzQ5MjksMzQ5MzcsMzQ5MzksMzQ5NDQsMzQ5NjgsMzQ5NzAsMzQ5NzEsMzQ5''@;'; put 'put ''NzIsMzQ5NzUsMzQ5NzYsMzQ5ODQsMzQ5ODYsMzUwMDIsMzUwMDUsMzUwMDYsMzUwMDgsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjIsMzUwMjUsMzUwMjYsMzUwMjcsMzUwMzUsMzUwMzgsMzUwNDcsMzUwNTUsMzUwNTYsMzUwNTcsMzUwNjEsMzUwNjMsMzUwNzMsMzUwNzgsMzUwODUs''@;'; put 'put ''MzUwODYsMzUwODcsMzUwOTMsMzUwOTQsMzUwOTYsMzUwOTcsMzUwOTgsMzUxMDAsMzUxMDQsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMjAsMzUxMjEsMzUxMjIsMzUxMjUsMzUxMjksMzUxMzAsMzUxMzQsMzUxMzYsMzUxMzgsMzUxNDEsMzUxNDIsMzUxNDUsMzUxNTEsMzUxNTQsMzUxNTksMzUx''@;'; put 'put ''NjIsMzUxNjMsMzUxNjQsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzksMzUxODIsMzUxODQsMzUxODcsMzUxODksMzUxOTQsMzUxOTUsMzUxOTYsMzUxOTcsMzUyMDksMzUyMTMsMzUyMTYsMzUyMjAsMzUyMjEsMzUyMjcsMzUyMjgsMzUyMzEsMzUyMzIsMzUyMzcsMzUyNDgsMzUyNTIsMzUyNTMs''@;'; put 'put ''MzUyNTQsMzUyNTUsMzUyNjAsMzUyODQsMzUyODUsMzUyODYsMzUyODcsMzUyODgsMzUzMDEsMzUzMDUsMzUzMDcsMzUzMDksMzUzMTMsMzUzMTUsMzUzMTgsMzUzMjEsMzUzMjUsMzUzMjcsMzUzMzIsMzUzMzMsMzUzMzUsMzUzNDMsMzUzNDUsMzUzNDYsMzUzNDgsMzUzNDksMzUzNTgsMzUz''@;'; put 'put ''NjAsMzUzNjIsMzUzNjQsMzUzNjYsMzUzNzEsMzUzNzIsMzUzNzUsMzUzODEsMzUzODMsMzUzODksMzUzOTAsMzUzOTIsMzUzOTUsMzUzOTcsMzUzOTksMzU0MDEsMzU0MDUsMzU0MDYsMzU0MTEsMzU0MTQsMzU0MTUsMzU0MTYsMzU0MjAsMzU0MjEsMzU0MjUsMzU0MjksMzU0MzEsMzU0NDUs''@;'; put 'put ''MzU0NDYsMzU0NDcsMzU0NDksMzU0NTAsMzU0NTEsMzU0NTQsMzU0NTUsMzU0NTYsMzU0NTksMzU0NjIsMzU0NjcsMzU0NzEsMzU0NzIsMzU0NzQsMzU0NzgsMzU0NzksMzU0ODEsMzU0ODcsMzU0OTUsMzU0OTcsMzU1MDIsMzU1MDMsMzU1MDcsMzU1MTAsMzU1MTEsMzU1MTUsMzU1MTgsMzU1''@;'; put 'put ''MjMsMzU1MjYsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzcsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDMsMzU1NDksMzU1NTEsMzU1NjQsMzU1NjgsMzU1NzIsMzU1NzMsMzU1NzQsMzU1ODAsMzU1ODMsMzU1ODksMzU1OTAsMzU1OTUsMzU2MDEsMzU2MTIsMzU2MTQsMzU2MTUsMzU1OTQsMzU2Mjks''@;'; put 'put ''MzU2MzIsMzU2MzksMzU2NDQsMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMzU2NTQsMzU2NTYsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NzMsMzU2NjEsMzU2NzgsMzU2ODMsMzU2OTMsMzU3MDIsMzU3MDQsMzU3MDUsMzU3MDgsMzU3MTAsMzU3MTMsMzU3MTYsMzU3MTcsMzU3MjMsMzU3MjUsMzU3''@;'; put 'put ''MjcsMzU3MzIsMzU3MzMsMzU3NDAsMzU3NDIsMzU3NDMsMzU4OTYsMzU4OTcsMzU5MDEsMzU5MDIsMzU5MDksMzU5MTEsMzU5MTMsMzU5MTUsMzU5MTksMzU5MjEsMzU5MjMsMzU5MjQsMzU5MjcsMzU5MjgsMzU5MzEsMzU5MzMsMzU5MjksMzU5MzksMzU5NDAsMzU5NDIsMzU5NDQsMzU5NDUs''@;'; put 'put ''MzU5NDksMzU5NTUsMzU5NTcsMzU5NTgsMzU5NjMsMzU5NjYsMzU5NzQsMzU5NzUsMzU5NzksMzU5ODQsMzU5ODYsMzU5ODcsMzU5OTMsMzU5OTUsMzU5OTYsMzYwMDQsMzYwMjUsMzYwMjYsMzYwMzcsMzYwMzgsMzYwNDEsMzYwNDMsMzYwNDcsMzYwNTQsMzYwNTMsMzYwNTcsMzYwNjEsMzYw''@;'; put 'put ''NjUsMzYwNzIsMzYwNzYsMzYwNzksMzYwODAsMzYwODIsMzYwODUsMzYwODcsMzYwODgsMzYwOTQsMzYwOTUsMzYwOTcsMzYwOTksMzYxMDUsMzYxMTQsMzYxMTksMzYxMjMsMzYxOTcsMzYyMDEsMzYyMDQsMzYyMDYsMzYyMjMsMzYyMjYsMzYyMjgsMzYyMzIsMzYyMzcsMzYyNDAsMzYyNDEs''@;'; put 'put ''MzYyNDUsMzYyNTQsMzYyNTUsMzYyNTYsMzYyNjIsMzYyNjcsMzYyNjgsMzYyNzEsMzYyNzQsMzYyNzcsMzYyNzksMzYyODEsMzYyODMsMzYyODgsMzYyOTMsMzYyOTQsMzYyOTUsMzYyOTYsMzYyOTgsMzYzMDIsMzYzMDUsMzYzMDgsMzYzMDksMzYzMTEsMzYzMTMsMzYzMjQsMzYzMjUsMzYz''@;'; put 'put ''MjcsMzYzMzIsMzYzMzYsMzYyODQsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDksMzYzNTMsMzYzNTYsMzYzNTcsMzYzNTgsMzYzNjMsMzYzNjksMzYzNzIsMzYzNzQsMzYzODQsMzYzODUsMzYzODYsMzYzODcsMzYzOTAsMzYzOTEsMzY0MDEsMzY0MDMsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MDks''@;'; put 'put ''MzY0MTMsMzY0MTYsMzY0MTcsMzY0MjcsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzYsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDksMzY0NTAsMzY0NTcsMzY0NjAsMzY0NjEsMzY0NjMsMzY0NjQsMzY0NjUsMzY0NzMsMzY0NzQsMzY0NzUsMzY0ODIsMzY0ODMsMzY0ODksMzY0OTYsMzY0''@;'; put 'put ''OTgsMzY1MDEsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTAsMzY1MTQsMzY1MTksMzY1MjEsMzY1MjUsMzY1MjYsMzY1MzEsMzY1MzMsMzY1MzgsMzY1MzksMzY1NDQsMzY1NDUsMzY1NDcsMzY1NDgsMzY1NTEsMzY1NTksMzY1NjEsMzY1NjQsMzY1NzIsMzY1ODQsMzY1OTAsMzY1OTIsMzY1OTMs''@;'; put 'put ''MzY1OTksMzY2MDEsMzY2MDIsMzY1ODksMzY2MDgsMzY2MTAsMzY2MTUsMzY2MTYsMzY2MjMsMzY2MjQsMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzgsMzY2NDAsMzY2NDEsMzY2NDMsMzY2NDUsMzY2NDcsMzY2NDgsMzY2NTIsMzY2NTMsMzY2NTQsMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2''@;'; put 'put ''NjYsMzY2NzIsMzY2NzMsMzY2NzUsMzY2NzksMzY2ODcsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTYsMzY3MDEsMzY3MDIsMzY3MDksMzY3NjUsMzY3NjgsMzY3NjksMzY3NzIsMzY3NzMsMzY3NzQsMzY3ODksMzY3OTAsMzY3OTIsMzY3OTgsMzY4MDAsMzY4MDEsMzY4MDYs''@;'; put 'put ''MzY4MTAsMzY4MTEsMzY4MTMsMzY4MTYsMzY4MTgsMzY4MTksMzY4MjEsMzY4MzIsMzY4MzUsMzY4MzYsMzY4NDAsMzY4NDYsMzY4NDksMzY4NTMsMzY4NTQsMzY4NTksMzY4NjIsMzY4NjYsMzY4NjgsMzY4NzIsMzY4NzYsMzY4ODgsMzY4OTEsMzY5MDQsMzY5MDUsMzY5MTEsMzY5MDYsMzY5''@;'; put 'put ''MDgsMzY5MDksMzY5MTUsMzY5MTYsMzY5MTksMzY5MjcsMzY5MzEsMzY5MzIsMzY5NDAsMzY5NTUsMzY5NTcsMzY5NjIsMzY5NjYsMzY5NjcsMzY5NzIsMzY5NzYsMzY5ODAsMzY5ODUsMzY5OTcsMzdlMywzNzAwMywzNzAwNCwzNzAwNiwzNzAwOCwzNzAxMywzNzAxNSwzNzAxNiwzNzAxNywz''@;'; put 'put ''NzAxOSwzNzAyNCwzNzAyNSwzNzAyNiwzNzAyOSwzNzA0MCwzNzA0MiwzNzA0MywzNzA0NCwzNzA0NiwzNzA1MywzNzA2OCwzNzA1NCwzNzA1OSwzNzA2MCwzNzA2MSwzNzA2MywzNzA2NCwzNzA3NywzNzA3OSwzNzA4MCwzNzA4MSwzNzA4NCwzNzA4NSwzNzA4NywzNzA5MywzNzA3NCwzNzEx''@;'; put 'put ''MCwzNzA5OSwzNzEwMywzNzEwNCwzNzEwOCwzNzExOCwzNzExOSwzNzEyMCwzNzEyNCwzNzEyNSwzNzEyNiwzNzEyOCwzNzEzMywzNzEzNiwzNzE0MCwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0OCwzNzE1MCwzNzE1MiwzNzE1NywzNzE1NCwzNzE1NSwzNzE1OSwzNzE2MSwzNzE2Niwz''@;'; put 'put ''NzE2NywzNzE2OSwzNzE3MiwzNzE3NCwzNzE3NSwzNzE3NywzNzE3OCwzNzE4MCwzNzE4MSwzNzE4NywzNzE5MSwzNzE5MiwzNzE5OSwzNzIwMywzNzIwNywzNzIwOSwzNzIxMCwzNzIxMSwzNzIxNywzNzIyMCwzNzIyMywzNzIyOSwzNzIzNiwzNzI0MSwzNzI0MiwzNzI0MywzNzI0OSwzNzI1''@;'; put 'put ''MSwzNzI1MywzNzI1NCwzNzI1OCwzNzI2MiwzNzI2NSwzNzI2NywzNzI2OCwzNzI2OSwzNzI3MiwzNzI3OCwzNzI4MSwzNzI4NiwzNzI4OCwzNzI5MiwzNzI5MywzNzI5NCwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwzNzMwMiwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMSwzNzMxNCwzNzMxNSwz''@;'; put 'put ''NzMxNywzNzMzMSwzNzMzMiwzNzMzNSwzNzMzNywzNzMzOCwzNzM0MiwzNzM0OCwzNzM0OSwzNzM1MywzNzM1NCwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2NywzNzM2OSwzNzM3MSwzNzM3MywzNzM3NiwzNzM3NywzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4''@;'; put 'put ''NSwzNzM4NiwzNzM4OCwzNzM5MiwzNzM5NCwzNzM5NSwzNzM5OCwzNzQwMCwzNzQwNCwzNzQwNSwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNiwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNywzNzQyOSwzNzQzMCwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNiwzNzQzOCwzNzQ0MCwzNzQ0Miwz''@;'; put 'put ''NzQ0MywzNzQ0NiwzNzQ0NywzNzQ1MCwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NywzNzQ2NCwzNzQ2NSwzNzQ2OCwzNzQ2OSwzNzQ3MiwzNzQ3MywzNzQ3NywzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OSwzNzUw''@;'; put 'put ''MCwzNzUwMSwzNzUwMywzNzUxMiwzNzUxMywzNzUxNCwzNzUxNywzNzUxOCwzNzUyMiwzNzUyNywzNzUyOSwzNzUzNSwzNzUzNiwzNzU0MCwzNzU0MSwzNzU0MywzNzU0NCwzNzU0NywzNzU1MSwzNzU1NCwzNzU1OCwzNzU2MCwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NywzNzU2OCwz''@;'; put 'put ''NzU2OSwzNzU3MCwzNzU3MSwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NiwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4NCwzNzU4NywzNzU4OSwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NiwzNzU5NywzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMywzNzYwNSwzNzYwNywzNzYwOCwzNzYxMiwzNzYx''@;'; put 'put ''NCwzNzYxNiwzNzYyNSwzNzYyNywzNzYzMSwzNzYzMiwzNzYzNCwzNzY0MCwzNzY0NSwzNzY0OSwzNzY1MiwzNzY1MywzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NSwzNzY2OCwzNzY2OSwzNzY3MSwzNzY3MywzNzY3NCwzNzY4MywzNzY4NCwzNzY4NiwzNzY4NywzNzcwMywzNzcwNCwz''@;'; put 'put ''NzcwNSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNywzNzcxOSwzNzcyMCwzNzcyMiwzNzcyNiwzNzczMiwzNzczMywzNzczNSwzNzczNywzNzczOCwzNzc0MSwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NywzNzc0OCwzNzc1MCwzNzc1NCwzNzc1NywzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2''@;'; put 'put ''OCwzNzc3MCwzNzc3MSwzNzc3MywzNzc3NSwzNzc3OCwzNzc4MSwzNzc4NCwzNzc4NywzNzc5MCwzNzc5MywzNzc5NSwzNzc5NiwzNzc5OCwzNzgwMCwzNzgwMywzNzgxMiwzNzgxMywzNzgxNCwzNzgxOCwzNzgwMSwzNzgyNSwzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMywzNzgzNCwz''@;'; put 'put ''NzgzNSwzNzgzNiwzNzgzNywzNzg0MywzNzg0OSwzNzg1MiwzNzg1NCwzNzg1NSwzNzg1OCwzNzg2MiwzNzg2MywzNzg4MSwzNzg3OSwzNzg4MCwzNzg4MiwzNzg4MywzNzg4NSwzNzg4OSwzNzg5MCwzNzg5MiwzNzg5NiwzNzg5NywzNzkwMSwzNzkwMiwzNzkwMywzNzkwOSwzNzkxMCwzNzkx''@;'; put 'put ''MSwzNzkxOSwzNzkzNCwzNzkzNSwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0NywzNzk1MSwzNzk0OSwzNzk1NSwzNzk1NywzNzk2MCwzNzk2MiwzNzk2NCwzNzk3MywzNzk3NywzNzk4MCwzNzk4MywzNzk4NSwzNzk4NywzNzk5MiwzNzk5NSwzNzk5NywzNzk5OCwzNzk5OSwzODAwMSwz''@;'; put 'put ''ODAwMiwzODAyMCwzODAxOSwzODI2NCwzODI2NSwzODI3MCwzODI3NiwzODI4MCwzODI4NCwzODI4NSwzODI4NiwzODMwMSwzODMwMiwzODMwMywzODMwNSwzODMxMCwzODMxMywzODMxNSwzODMxNiwzODMyNCwzODMyNiwzODMzMCwzODMzMywzODMzNSwzODM0MiwzODM0NCwzODM0NSwzODM0''@;'; put 'put ''NywzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM2MSwzODM2MiwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM3MiwzODM3NCwzODQyOSwzODQzMCwzODQzNCwzODQzNiwzODQzNywzODQzOCwzODQ0NCwzODQ0OSwzODQ1MSwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MCwzODQ2MSwz''@;'; put 'put ''ODQ2NSwzODQ4MiwzODQ4NCwzODQ4NiwzODQ4NywzODQ4OCwzODQ5NywzODUxMCwzODUxNiwzODUyMywzODUyNCwzODUyNiwzODUyNywzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNywzODU0NSwzODU1MCwzODU1NCwzODU1NywzODU1OSwzODU2NCwzODU2NSwzODU2NiwzODU2OSwzODU3''@;'; put 'put ''NCwzODU3NSwzODU3OSwzODU4NiwzODYwMiwzODYxMCwyMzk4NiwzODYxNiwzODYxOCwzODYyMSwzODYyMiwzODYyMywzODYzMywzODYzOSwzODY0MSwzODY1MCwzODY1OCwzODY1OSwzODY2MSwzODY2NSwzODY4MiwzODY4MywzODY4NSwzODY4OSwzODY5MCwzODY5MSwzODY5NiwzODcwNSwz''@;'; put 'put ''ODcwNywzODcyMSwzODcyMywzODczMCwzODczNCwzODczNSwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0NywzODc1NSwzODc1OSwzODc2MiwzODc2NiwzODc3MSwzODc3NCwzODc3NSwzODc3NiwzODc3OSwzODc4MSwzODc4MywzODc4NCwzODc5MywzODgwNSwzODgwNiwzODgwNywzODgw''@;'; put 'put ''OSwzODgxMCwzODgxNCwzODgxNSwzODgxOCwzODgyOCwzODgzMCwzODgzMywzODgzNCwzODgzNywzODgzOCwzODg0MCwzODg0MSwzODg0MiwzODg0NCwzODg0NiwzODg0NywzODg0OSwzODg1MiwzODg1MywzODg1NSwzODg1NywzODg1OCwzODg2MCwzODg2MSwzODg2MiwzODg2NCwzODg2NSwz''@;'; put 'put ''ODg2OCwzODg3MSwzODg3MiwzODg3MywzODg3NywzODg3OCwzODg4MCwzODg3NSwzODg4MSwzODg4NCwzODg5NSwzODg5NywzODkwMCwzODkwMywzODkwNCwzODkwNiwzODkxOSwzODkyMiwzODkzNywzODkyNSwzODkyNiwzODkzMiwzODkzNCwzODk0MCwzODk0MiwzODk0NCwzODk0NywzODk1''@;'; put 'put ''MCwzODk1NSwzODk1OCwzODk1OSwzODk2MCwzODk2MiwzODk2MywzODk2NSwzODk0OSwzODk3NCwzODk4MCwzODk4MywzODk4NiwzODk5MywzODk5NCwzODk5NSwzODk5OCwzODk5OSwzOTAwMSwzOTAwMiwzOTAxMCwzOTAxMSwzOTAxMywzOTAxNCwzOTAxOCwzOTAyMCwzOTA4MywzOTA4NSwz''@;'; put 'put ''OTA4NiwzOTA4OCwzOTA5MiwzOTA5NSwzOTA5NiwzOTA5OCwzOTA5OSwzOTEwMywzOTEwNiwzOTEwOSwzOTExMiwzOTExNiwzOTEzNywzOTEzOSwzOTE0MSwzOTE0MiwzOTE0MywzOTE0NiwzOTE1NSwzOTE1OCwzOTE3MCwzOTE3NSwzOTE3NiwzOTE4NSwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5''@;'; put 'put ''NCwzOTE5NSwzOTE5NiwzOTE5OSwzOTIwMiwzOTIwNiwzOTIwNywzOTIxMSwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIzMiwzOTIzMywzOTIzOCwzOTIzOSwzOTI0MCwzOTI0NSwzOTI0NiwzOTI1MiwzOTI1NiwzOTI1NywzOTI1OSwz''@;'; put 'put ''OTI2MCwzOTI2MiwzOTI2MywzOTI2NCwzOTMyMywzOTMyNSwzOTMyNywzOTMzNCwzOTM0NCwzOTM0NSwzOTM0NiwzOTM0OSwzOTM1MywzOTM1NCwzOTM1NywzOTM1OSwzOTM2MywzOTM2OSwzOTM3OSwzOTM4MCwzOTM4NSwzOTM4NiwzOTM4OCwzOTM5MCwzOTM5OSwzOTQwMiwzOTQwMywzOTQw''@;'; put 'put ''NCwzOTQwOCwzOTQxMiwzOTQxMywzOTQxNywzOTQyMSwzOTQyMiwzOTQyNiwzOTQyNywzOTQyOCwzOTQzNSwzOTQzNiwzOTQ0MCwzOTQ0MSwzOTQ0NiwzOTQ1NCwzOTQ1NiwzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2MywzOTQ2OSwzOTQ3MCwzOTQ3NSwzOTQ3NywzOTQ3OCwzOTQ4MCwzOTQ5NSwz''@;'; put 'put ''OTQ4OSwzOTQ5MiwzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMiwzOTUwNSwzOTUwOCwzOTUxMCwzOTUxNywzOTU5NCwzOTU5NiwzOTU5OCwzOTU5OSwzOTYwMiwzOTYwNCwzOTYwNSwzOTYwNiwzOTYwOSwzOTYxMSwzOTYxNCwzOTYxNSwzOTYxNywzOTYxOSwzOTYyMiwzOTYyNCwzOTYzMCwzOTYz''@;'; put 'put ''MiwzOTYzNCwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MywzOTY0NCwzOTY0OCwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NywzOTY2MCwzOTY2NiwzOTY2NywzOTY2OSwzOTY3MywzOTY3NCwzOTY3NywzOTY3OSwzOTY4MCwzOTY4MSwzOTY4MiwzOTY4MywzOTY4NCwzOTY4NSwzOTY4OCwzOTY4OSwz''@;'; put 'put ''OTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5OCwzOTcwMiwzOTcwNSwzOTcwNywzOTcwOCwzOTcxMiwzOTcxOCwzOTcyMywzOTcyNSwzOTczMSwzOTczMiwzOTczMywzOTczNSwzOTczNywzOTczOCwzOTc0MSwzOTc1MiwzOTc1NSwzOTc1NiwzOTc2NSwzOTc2NiwzOTc2NywzOTc3''@;'; put 'put ''MSwzOTc3NCwzOTc3NywzOTc3OSwzOTc4MSwzOTc4MiwzOTc4NCwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5NSwzOTc5NywzOTc5OSwzOTgwMCwzOTgwMSwzOTgwNywzOTgwOCwzOTgxMiwzOTgxMywzOTgxNCwzOTgxNSwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMSwzOTgyMywz''@;'; put 'put ''OTgyNCwzOTgyOCwzOTgzNCwzOTgzNywzOTgzOCwzOTg0NiwzOTg0NywzOTg0OSwzOTg1MiwzOTg1NiwzOTg1NywzOTg1OCwzOTg2MywzOTg2NCwzOTg2NywzOTg2OCwzOTg3MCwzOTg3MSwzOTg3MywzOTg3OSwzOTg4MCwzOTg4NiwzOTg4OCwzOTg5NSwzOTg5NiwzOTkwMSwzOTkwMywzOTkw''@;'; put 'put ''OSwzOTkxMSwzOTkxNCwzOTkxNSwzOTkxOSwzOTkyMywzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMywzOTkzNSwzOTkzNiwzOTkzOCwzOTk0NywzOTk1MSwzOTk1MywzOTk1OCwzOTk2MCwzOTk2MSwzOTk2MiwzOTk2NCwzOTk2NiwzOTk3MCwzOTk3MSwzOTk3NCwzOTk3NSwzOTk3Niwz''@;'; put 'put ''OTk3NywzOTk3OCwzOTk4NSwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5Nyw0MDAwMSw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwOSw0MDAxMCw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxOSw0MDAyMCw0MDAyMiw0MDAyNCw0MDAyNyw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzNSw0MDA0MSw0MDA0Miw0MDAy''@;'; put 'put ''OCw0MDA0Myw0MDA0MCw0MDA0Niw0MDA0OCw0MDA1MCw0MDA1Myw0MDA1NSw0MDA1OSw0MDE2Niw0MDE3OCw0MDE4Myw0MDE4NSw0MDIwMyw0MDE5NCw0MDIwOSw0MDIxNSw0MDIxNiw0MDIyMCw0MDIyMSw0MDIyMiw0MDIzOSw0MDI0MCw0MDI0Miw0MDI0Myw0MDI0NCw0MDI1MCw0MDI1Miw0''@;'; put 'put ''MDI2MSw0MDI1Myw0MDI1OCw0MDI1OSw0MDI2Myw0MDI2Niw0MDI3NSw0MDI3Niw0MDI4Nyw0MDI5MSw0MDI5MCw0MDI5Myw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwNCw0MDMxMCw0MDMxMSw0MDMxNSw0MDMxNiw0MDMxOCw0MDMyMyw0MDMyNCw0MDMyNiw0MDMzMCw0MDMzMyw0MDMzNCw0MDMz''@;'; put 'put ''OCw0MDMzOSw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM1Myw0MDM2Miw0MDM2NCw0MDM2Niw0MDM2OSw0MDM3Myw0MDM3Nyw0MDM4MCw0MDM4Myw0MDM4Nyw0MDM5MSw0MDM5Myw0MDM5NCw0MDQwNCw0MDQwNSw0MDQwNiw0MDQwNyw0MDQxMCw0MDQxNCw0MDQxNSw0MDQxNiw0MDQyMSw0''@;'; put 'put ''MDQyMyw0MDQyNSw0MDQyNyw0MDQzMCw0MDQzMiw0MDQzNSw0MDQzNiw0MDQ0Niw0MDQ1OCw0MDQ1MCw0MDQ1NSw0MDQ2Miw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2OSw0MDQ3MCw0MDQ3Myw0MDQ3Niw0MDQ3Nyw0MDU3MCw0MDU3MSw0MDU3Miw0MDU3Niw0MDU3OCw0MDU3OSw0MDU4MCw0MDU4''@;'; put 'put ''MSw0MDU4Myw0MDU5MCw0MDU5MSw0MDU5OCw0MDYwMCw0MDYwMyw0MDYwNiw0MDYxMiw0MDYxNiw0MDYyMCw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNyw0MDYyOCw0MDYyOSw0MDY0Niw0MDY0OCw0MDY1MSw0MDY2MSw0MDY3MSw0MDY3Niw0MDY3OSw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0''@;'; put 'put ''MDY4OSw0MDY5MCw0MDY5Myw0MDY5Niw0MDcwMyw0MDcwNiw0MDcwNyw0MDcxMyw0MDcxOSw0MDcyMCw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNiw0MDcyNyw0MDcyOSw0MDczMCw0MDczMSw0MDczNSw0MDczOCw0MDc0Miw0MDc0Niw0MDc0Nyw0MDc1MSw0MDc1Myw0MDc1NCw0MDc1Niw0MDc1''@;'; put 'put ''OSw0MDc2MSw0MDc2Miw0MDc2NCw0MDc2NSw0MDc2Nyw0MDc2OSw0MDc3MSw0MDc3Miw0MDc3Myw0MDc3NCw0MDc3NSw0MDc4Nyw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5NCw0MDc5Nyw0MDc5OCw0MDgwOCw0MDgwOSw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOSw0''@;'; put 'put ''MDgyMSw0MDgyNiw0MDgyOSw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1Miw0MDg1NCw0MDg1NSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLGlibTg2NjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEw''@;'; put 'put ''NDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEw''@;'; put 'put ''NzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsOTYxNyw5NjE4LDk2MTksOTQ3NCw5NTA4LDk1NjksOTU3MCw5NTU4LDk1NTcsOTU3MSw5NTUzLDk1NTksOTU2NSw5NTY0LDk1NjMsOTQ4OCw5NDkyLDk1MjQsOTUxNiw5NTAwLDk0NzIsOTUzMiw5NTY2LDk1''@;'; put 'put ''NjcsOTU2Miw5NTU2LDk1NzcsOTU3NCw5NTY4LDk1NTIsOTU4MCw5NTc1LDk1NzYsOTU3Miw5NTczLDk1NjEsOTU2MCw5NTU0LDk1NTUsOTU3OSw5NTc4LDk0OTYsOTQ4NCw5NjA4LDk2MDQsOTYxMiw5NjE2LDk2MDAsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEw''@;'; put 'put ''OTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMDI1LDExMDUsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDM4LDExMTgsMTc2LDg3MjksMTgzLDg3MzAsODQ3MCwxNjQsOTYzMiwxNjBdLCJpc28tODg1OS0yIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYs''@;'; put 'put ''MTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDcyOCwzMjEsMTY0LDMxNywzNDYsMTY3LDE2OCwzNTIsMzUwLDM1NiwzNzcsMTczLDM4MSwzNzksMTc2LDI2MSw3''@;'; put 'put ''MzEsMzIyLDE4MCwzMTgsMzQ3LDcxMSwxODQsMzUzLDM1MSwzNTcsMzc4LDczMywzODIsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIsMzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2''@;'; put 'put ''OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2NywyNTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sImlzby04ODU5LTMiOlsxMjgs''@;'; put 'put ''MTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyOTQsNzI4LDE2MywxNjQsbnVsbCwyOTIsMTY3LDE2OCwzMDQs''@;'; put 'put ''MzUwLDI4NiwzMDgsMTczLG51bGwsMzc5LDE3NiwyOTUsMTc4LDE3OSwxODAsMTgxLDI5MywxODMsMTg0LDMwNSwzNTEsMjg3LDMwOSwxODksbnVsbCwzODAsMTkyLDE5MywxOTQsbnVsbCwxOTYsMjY2LDI2NCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNyxudWxsLDIwOSwy''@;'; put 'put ''MTAsMjExLDIxMiwyODgsMjE0LDIxNSwyODQsMjE3LDIxOCwyMTksMjIwLDM2NCwzNDgsMjIzLDIyNCwyMjUsMjI2LG51bGwsMjI4LDI2NywyNjUsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksbnVsbCwyNDEsMjQyLDI0MywyNDQsMjg5LDI0NiwyNDcsMjg1LDI0OSwyNTAs''@;'; put 'put ''MjUxLDI1MiwzNjUsMzQ5LDcyOV0sImlzby04ODU5LTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2''@;'; put 'put ''MCwyNjAsMzEyLDM0MiwxNjQsMjk2LDMxNSwxNjcsMTY4LDM1MiwyNzQsMjkwLDM1OCwxNzMsMzgxLDE3NSwxNzYsMjYxLDczMSwzNDMsMTgwLDI5NywzMTYsNzExLDE4NCwzNTMsMjc1LDI5MSwzNTksMzMwLDM4MiwzMzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAx''@;'; put 'put ''LDI4MCwyMDMsMjc4LDIwNSwyMDYsMjk4LDI3MiwzMjUsMzMyLDMxMCwyMTIsMjEzLDIxNCwyMTUsMjE2LDM3MCwyMTgsMjE5LDIyMCwzNjAsMzYyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyOTksMjczLDMyNiwzMzMs''@;'; put 'put ''MzExLDI0NCwyNDUsMjQ2LDI0NywyNDgsMzcxLDI1MCwyNTEsMjUyLDM2MSwzNjMsNzI5XSwiaXNvLTg4NTktNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1''@;'; put 'put ''MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDE3MywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEw''@;'; put 'put ''NTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEw''@;'; put 'put ''ODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4NDcwLDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDE2''@;'; put 'put ''NywxMTE4LDExMTldLCJpc28tODg1OS02IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU0OCwxNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNTYzLG51bGwsbnVsbCxudWxsLDE1NjcsbnVsbCwxNTY5LDE1NzAsMTU3''@;'; put 'put ''MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDE1OTEsMTU5MiwxNTkzLDE1OTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE2MDAsMTYwMSwxNjAyLDE2MDMsMTYw''@;'; put 'put ''NCwxNjA1LDE2MDYsMTYwNywxNjA4LDE2MDksMTYxMCwxNjExLDE2MTIsMTYxMywxNjE0LDE2MTUsMTYxNiwxNjE3LDE2MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sImlzby04ODU5LTciOlsxMjgsMTI5LDEzMCwx''@;'; put 'put ''MzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjE2LDgyMTcsMTYzLDgzNjQsODM2NywxNjYsMTY3LDE2OCwxNjksODkwLDE3''@;'; put 'put ''MSwxNzIsMTczLG51bGwsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDkwMSw5MDIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEs''@;'; put 'put ''OTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5''@;'; put 'put ''NzMsOTc0LG51bGxdLCJpc28tODg1OS04IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCwx''@;'; put 'put ''NjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4MjE1LDE0ODgsMTQ4OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcs''@;'; put 'put ''MTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sImlzby04ODU5LTEwIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3''@;'; put 'put ''LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI3NCwyOTAsMjk4LDI5NiwzMTAsMTY3LDMxNSwyNzIsMzUyLDM1OCwzODEsMTczLDM2MiwzMzAsMTc2LDI2MSwyNzUs''@;'; put 'put ''MjkxLDI5OSwyOTcsMzExLDE4MywzMTYsMjczLDM1MywzNTksMzgyLDgyMTMsMzYzLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyMDcsMjA4LDMyNSwzMzIsMjExLDIxMiwyMTMsMjE0LDM2MCwyMTYsMzcwLDIxOCwyMTks''@;'; put 'put ''MjIwLDIyMSwyMjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDIzOSwyNDAsMzI2LDMzMywyNDMsMjQ0LDI0NSwyNDYsMzYxLDI0OCwzNzEsMjUwLDI1MSwyNTIsMjUzLDI1NCwzMTJdLCJpc28tODg1OS0xMyI6WzEyOCwx''@;'; put 'put ''MjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDgyMjEsMTYyLDE2MywxNjQsODIyMiwxNjYsMTY3LDIxNiwxNjks''@;'; put 'put ''MzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDgyMjAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUs''@;'; put 'put ''MjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2Mywy''@;'; put 'put ''NTIsMzgwLDM4Miw4MjE3XSwiaXNvLTg4NTktMTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw3''@;'; put 'put ''NjgyLDc2ODMsMTYzLDI2NiwyNjcsNzY5MCwxNjcsNzgwOCwxNjksNzgxMCw3NjkxLDc5MjIsMTczLDE3NCwzNzYsNzcxMCw3NzExLDI4OCwyODksNzc0NCw3NzQ1LDE4Miw3NzY2LDc4MDksNzc2Nyw3ODExLDc3NzYsNzkyMyw3ODEyLDc4MTMsNzc3NywxOTIsMTkzLDE5NCwxOTUsMTk2LDE5''@;'; put 'put ''NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMzcyLDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDc3ODYsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMzc0LDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIz''@;'; put 'put ''OCwyMzksMzczLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDc3ODcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMzc1LDI1NV0sImlzby04ODU5LTE1IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0''@;'; put 'put ''NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2NCwxNjUsMzUyLDE2NywzNTMsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwzODEsMTgxLDE4MiwxODMsMzgyLDE4NSwxODYsMTg3LDMz''@;'; put 'put ''OCwzMzksMzc2LDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5''@;'; put 'put ''LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLCJpc28tODg1OS0xNiI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgs''@;'; put 'put ''MTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNjEsMzIxLDgzNjQsODIyMiwzNTIsMTY3LDM1MywxNjksNTM2LDE3MSwzNzcsMTczLDM3OCwzNzksMTc2LDE3NywyNjgsMzIy''@;'; put 'put ''LDM4MSw4MjIxLDE4MiwxODMsMzgyLDI2OSw1MzcsMTg3LDMzOCwzMzksMzc2LDM4MCwxOTIsMTkzLDE5NCwyNTgsMTk2LDI2MiwxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjcyLDMyMywyMTAsMjExLDIxMiwzMzYsMjE0LDM0NiwzNjgsMjE3LDIxOCwyMTksMjIw''@;'; put 'put ''LDI4MCw1MzgsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjYzLDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNzMsMzI0LDI0MiwyNDMsMjQ0LDMzNywyNDYsMzQ3LDM2OSwyNDksMjUwLDI1MSwyNTIsMjgxLDUzOSwyNTVdLCJrb2k4LXIiOls5NDcyLDk0NzQsOTQ4''@;'; put 'put ''NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsOTU1''@;'; put 'put ''NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3''@;'; put 'put ''LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYw''@;'; put 'put ''LDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLCJrb2k4LXUiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5''@;'; put 'put ''Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsMTEwOCw5NTU2LDExMTAsMTEx''@;'; put 'put ''MSw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsMTE2OSwxMTE4LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSwxMDI4LDk1NzEsMTAzMCwxMDMxLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCwxMTY4LDEwMzgsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkz''@;'; put 'put ''LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4''@;'; put 'put ''LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLG1hY2ludG9zaDpbMTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIy''@;'; put 'put ''OCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4''@;'; put 'put ''MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3''@;'; put 'put ''NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwyMDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3''@;'; put 'put ''MzMsNzMxLDcxMV0sIndpbmRvd3MtODc0IjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwx''@;'; put 'put ''NjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAxLDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgsMzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2''@;'; put 'put ''MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEsMzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2''@;'; put 'put ''NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQsMzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSwid2luZG93cy0xMjUwIjpb''@;'; put 'put ''ODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUzLDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQs''@;'; put 'put ''MjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUxLDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwy''@;'; put 'put ''MDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMsMjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0''@;'; put 'put ''NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwid2luZG93cy0xMjUxIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEwMzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjEx''@;'; put 'put ''LDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwxNjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4''@;'; put 'put ''LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcs''@;'; put 'put ''MTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAs''@;'; put 'put ''MTEwMSwxMTAyLDExMDNdLCJ3aW5kb3dzLTEyNTIiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzks''@;'; put 'put ''MTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5Nywx''@;'; put 'put ''OTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIz''@;'; put 'put ''OSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLCJ3aW5kb3dzLTEyNTMiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEzNiw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4''@;'; put 'put ''MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQs''@;'; put 'put ''OTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUs''@;'; put 'put ''OTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwid2luZG93cy0xMjU0IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMw''@;'; put 'put ''LDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcx''@;'; put 'put ''LDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIs''@;'; put 'put ''MjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwz''@;'; put 'put ''NTEsMjU1XSwid2luZG93cy0xMjU1IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgs''@;'; put 'put ''MTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0''@;'; put 'put ''NjIsMTQ2MywxNDY0LDE0NjUsMTQ2NiwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIzLDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0''@;'; put 'put ''OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxdLCJ3aW5kb3dzLTEyNTYiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4''@;'; put 'put ''MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgyMDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2Nywx''@;'; put 'put ''NjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIsMTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1''@;'; put 'put ''ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIsMTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYwOCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2''@;'; put 'put ''MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSwid2luZG93cy0xMjU3IjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0''@;'; put 'put ''LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcyLDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4Miwx''@;'; put 'put ''ODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2''@;'; put 'put ''MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3MjldLCJ3aW5kb3dzLTEyNTgiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIy''@;'; put 'put ''LDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3''@;'; put 'put ''MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjEx''@;'; put 'put ''LDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgwMywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIs''@;'; put 'put ''NDMyLDgzNjMsMjU1XSwieC1tYWMtY3lyaWxsaWMiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2''@;'; put 'put ''NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTExMCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywx''@;'; put 'put ''MTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEwOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDEx''@;'; put 'put ''MDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XX19''@;'; put 'put ''KHRoaXN8fHt9KX0sNDAyOTA6ZnVuY3Rpb24oYXQsSWUsRil7IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geChUZSxxZSxYZSl7cmV0dXJuIHFlPD1UZSYmVGU8PVhlfWF0LmV4cG9ydHMmJiFhZVsiZW5jb2RpbmctaW5kZXhlcyJdJiYoYWVbImVuY29kaW5nLWluZGV4ZXMi''@;'; put 'put ''XT1GKDE2NDEzKVsiZW5jb2RpbmctaW5kZXhlcyJdKTt2YXIgbGU9TWF0aC5mbG9vcjtmdW5jdGlvbiBNKFRlKXtpZih2b2lkIDA9PT1UZSlyZXR1cm57fTtpZihUZT09PU9iamVjdChUZSkpcmV0dXJuIFRlO3Rocm93IFR5cGVFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgdG8g''@;'; put 'put ''ZGljdGlvbmFyeSIpfWZ1bmN0aW9uIHooVGUpe3JldHVybiAwPD1UZSYmVGU8PTEyN312YXIgSz16LEk9LTE7ZnVuY3Rpb24gayhUZSl7dGhpcy50b2tlbnM9W10uc2xpY2UuY2FsbChUZSksdGhpcy50b2tlbnMucmV2ZXJzZSgpfWsucHJvdG90eXBlPXtlbmRPZlN0cmVhbTpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiF0aGlzLnRva2Vucy5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoP3RoaXMudG9rZW5zLnBvcCgpOkl9LHByZXBlbmQ6ZnVuY3Rpb24oVGUpe2lmKEFycmF5LmlzQXJyYXkoVGUpKWZvcih2YXIgcWU9VGU7cWUubGVuZ3RoOyl0aGlzLnRv''@;'; put 'put ''a2Vucy5wdXNoKHFlLnBvcCgpKTtlbHNlIHRoaXMudG9rZW5zLnB1c2goVGUpfSxwdXNoOmZ1bmN0aW9uKFRlKXtpZihBcnJheS5pc0FycmF5KFRlKSlmb3IodmFyIHFlPVRlO3FlLmxlbmd0aDspdGhpcy50b2tlbnMudW5zaGlmdChxZS5zaGlmdCgpKTtlbHNlIHRoaXMudG9rZW5zLnVuc2hp''@;'; put 'put ''ZnQoVGUpfX07dmFyIEU9LTE7ZnVuY3Rpb24gaihUZSxxZSl7aWYoVGUpdGhyb3cgVHlwZUVycm9yKCJEZWNvZGVyIGVycm9yIik7cmV0dXJuIHFlfHw2NTUzM31mdW5jdGlvbiBWKFRlKXt0aHJvdyBUeXBlRXJyb3IoIlRoZSBjb2RlIHBvaW50ICIrVGUrIiBjb3VsZCBub3QgYmUgZW5jb2Rl''@;'; put 'put ''ZC4iKX1mdW5jdGlvbiBYKFRlKXtyZXR1cm4gVGU9U3RyaW5nKFRlKS50cmltKCkudG9Mb3dlckNhc2UoKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocSxUZSk/cVtUZV06bnVsbH12YXIgVT1be2VuY29kaW5nczpbe2xhYmVsczpbInVuaWNvZGUtMS0xLXV0Zi04Iiwi''@;'; put 'put ''dXRmLTgiLCJ1dGY4Il0sbmFtZToiVVRGLTgifV0saGVhZGluZzoiVGhlIEVuY29kaW5nIn0se2VuY29kaW5nczpbe2xhYmVsczpbIjg2NiIsImNwODY2IiwiY3NpYm04NjYiLCJpYm04NjYiXSxuYW1lOiJJQk04NjYifSx7bGFiZWxzOlsiY3Npc29sYXRpbjIiLCJpc28tODg1OS0yIiwiaXNv''@;'; put 'put ''LWlyLTEwMSIsImlzbzg4NTktMiIsImlzbzg4NTkyIiwiaXNvXzg4NTktMiIsImlzb184ODU5LTI6MTk4NyIsImwyIiwibGF0aW4yIl0sbmFtZToiSVNPLTg4NTktMiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluMyIsImlzby04ODU5LTMiLCJpc28taXItMTA5IiwiaXNvODg1OS0zIiwiaXNvODg1''@;'; put 'put ''OTMiLCJpc29fODg1OS0zIiwiaXNvXzg4NTktMzoxOTg4IiwibDMiLCJsYXRpbjMiXSxuYW1lOiJJU08tODg1OS0zIn0se2xhYmVsczpbImNzaXNvbGF0aW40IiwiaXNvLTg4NTktNCIsImlzby1pci0xMTAiLCJpc284ODU5LTQiLCJpc284ODU5NCIsImlzb184ODU5LTQiLCJpc29fODg1OS00''@;'; put 'put ''OjE5ODgiLCJsNCIsImxhdGluNCJdLG5hbWU6IklTTy04ODU5LTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbmN5cmlsbGljIiwiY3lyaWxsaWMiLCJpc28tODg1OS01IiwiaXNvLWlyLTE0NCIsImlzbzg4NTktNSIsImlzbzg4NTk1IiwiaXNvXzg4NTktNSIsImlzb184ODU5LTU6MTk4OCJdLG5h''@;'; put 'put ''bWU6IklTTy04ODU5LTUifSx7bGFiZWxzOlsiYXJhYmljIiwiYXNtby03MDgiLCJjc2lzbzg4NTk2ZSIsImNzaXNvODg1OTZpIiwiY3Npc29sYXRpbmFyYWJpYyIsImVjbWEtMTE0IiwiaXNvLTg4NTktNiIsImlzby04ODU5LTYtZSIsImlzby04ODU5LTYtaSIsImlzby1pci0xMjciLCJpc284''@;'; put 'put ''ODU5LTYiLCJpc284ODU5NiIsImlzb184ODU5LTYiLCJpc29fODg1OS02OjE5ODciXSxuYW1lOiJJU08tODg1OS02In0se2xhYmVsczpbImNzaXNvbGF0aW5ncmVlayIsImVjbWEtMTE4IiwiZWxvdF85MjgiLCJncmVlayIsImdyZWVrOCIsImlzby04ODU5LTciLCJpc28taXItMTI2IiwiaXNv''@;'; put 'put ''ODg1OS03IiwiaXNvODg1OTciLCJpc29fODg1OS03IiwiaXNvXzg4NTktNzoxOTg3Iiwic3VuX2V1X2dyZWVrIl0sbmFtZToiSVNPLTg4NTktNyJ9LHtsYWJlbHM6WyJjc2lzbzg4NTk4ZSIsImNzaXNvbGF0aW5oZWJyZXciLCJoZWJyZXciLCJpc28tODg1OS04IiwiaXNvLTg4NTktOC1lIiwi''@;'; put 'put ''aXNvLWlyLTEzOCIsImlzbzg4NTktOCIsImlzbzg4NTk4IiwiaXNvXzg4NTktOCIsImlzb184ODU5LTg6MTk4OCIsInZpc3VhbCJdLG5hbWU6IklTTy04ODU5LTgifSx7bGFiZWxzOlsiY3Npc284ODU5OGkiLCJpc28tODg1OS04LWkiLCJsb2dpY2FsIl0sbmFtZToiSVNPLTg4NTktOC1JIn0s''@;'; put 'put ''e2xhYmVsczpbImNzaXNvbGF0aW42IiwiaXNvLTg4NTktMTAiLCJpc28taXItMTU3IiwiaXNvODg1OS0xMCIsImlzbzg4NTkxMCIsImw2IiwibGF0aW42Il0sbmFtZToiSVNPLTg4NTktMTAifSx7bGFiZWxzOlsiaXNvLTg4NTktMTMiLCJpc284ODU5LTEzIiwiaXNvODg1OTEzIl0sbmFtZToi''@;'; put 'put ''SVNPLTg4NTktMTMifSx7bGFiZWxzOlsiaXNvLTg4NTktMTQiLCJpc284ODU5LTE0IiwiaXNvODg1OTE0Il0sbmFtZToiSVNPLTg4NTktMTQifSx7bGFiZWxzOlsiY3Npc29sYXRpbjkiLCJpc28tODg1OS0xNSIsImlzbzg4NTktMTUiLCJpc284ODU5MTUiLCJpc29fODg1OS0xNSIsImw5Il0s''@;'; put 'put ''bmFtZToiSVNPLTg4NTktMTUifSx7bGFiZWxzOlsiaXNvLTg4NTktMTYiXSxuYW1lOiJJU08tODg1OS0xNiJ9LHtsYWJlbHM6WyJjc2tvaThyIiwia29pIiwia29pOCIsImtvaTgtciIsImtvaThfciJdLG5hbWU6IktPSTgtUiJ9LHtsYWJlbHM6WyJrb2k4LXJ1Iiwia29pOC11Il0sbmFtZToi''@;'; put 'put ''S09JOC1VIn0se2xhYmVsczpbImNzbWFjaW50b3NoIiwibWFjIiwibWFjaW50b3NoIiwieC1tYWMtcm9tYW4iXSxuYW1lOiJtYWNpbnRvc2gifSx7bGFiZWxzOlsiZG9zLTg3NCIsImlzby04ODU5LTExIiwiaXNvODg1OS0xMSIsImlzbzg4NTkxMSIsInRpcy02MjAiLCJ3aW5kb3dzLTg3NCJd''@;'; put 'put ''LG5hbWU6IndpbmRvd3MtODc0In0se2xhYmVsczpbImNwMTI1MCIsIndpbmRvd3MtMTI1MCIsIngtY3AxMjUwIl0sbmFtZToid2luZG93cy0xMjUwIn0se2xhYmVsczpbImNwMTI1MSIsIndpbmRvd3MtMTI1MSIsIngtY3AxMjUxIl0sbmFtZToid2luZG93cy0xMjUxIn0se2xhYmVsczpbImFu''@;'; put 'put ''c2lfeDMuNC0xOTY4IiwiYXNjaWkiLCJjcDEyNTIiLCJjcDgxOSIsImNzaXNvbGF0aW4xIiwiaWJtODE5IiwiaXNvLTg4NTktMSIsImlzby1pci0xMDAiLCJpc284ODU5LTEiLCJpc284ODU5MSIsImlzb184ODU5LTEiLCJpc29fODg1OS0xOjE5ODciLCJsMSIsImxhdGluMSIsInVzLWFzY2lp''@;'; put 'put ''Iiwid2luZG93cy0xMjUyIiwieC1jcDEyNTIiXSxuYW1lOiJ3aW5kb3dzLTEyNTIifSx7bGFiZWxzOlsiY3AxMjUzIiwid2luZG93cy0xMjUzIiwieC1jcDEyNTMiXSxuYW1lOiJ3aW5kb3dzLTEyNTMifSx7bGFiZWxzOlsiY3AxMjU0IiwiY3Npc29sYXRpbjUiLCJpc28tODg1OS05IiwiaXNv''@;'; put 'put ''LWlyLTE0OCIsImlzbzg4NTktOSIsImlzbzg4NTk5IiwiaXNvXzg4NTktOSIsImlzb184ODU5LTk6MTk4OSIsImw1IiwibGF0aW41Iiwid2luZG93cy0xMjU0IiwieC1jcDEyNTQiXSxuYW1lOiJ3aW5kb3dzLTEyNTQifSx7bGFiZWxzOlsiY3AxMjU1Iiwid2luZG93cy0xMjU1IiwieC1jcDEy''@;'; put 'put ''NTUiXSxuYW1lOiJ3aW5kb3dzLTEyNTUifSx7bGFiZWxzOlsiY3AxMjU2Iiwid2luZG93cy0xMjU2IiwieC1jcDEyNTYiXSxuYW1lOiJ3aW5kb3dzLTEyNTYifSx7bGFiZWxzOlsiY3AxMjU3Iiwid2luZG93cy0xMjU3IiwieC1jcDEyNTciXSxuYW1lOiJ3aW5kb3dzLTEyNTcifSx7bGFiZWxz''@;'; put 'put ''OlsiY3AxMjU4Iiwid2luZG93cy0xMjU4IiwieC1jcDEyNTgiXSxuYW1lOiJ3aW5kb3dzLTEyNTgifSx7bGFiZWxzOlsieC1tYWMtY3lyaWxsaWMiLCJ4LW1hYy11a3JhaW5pYW4iXSxuYW1lOiJ4LW1hYy1jeXJpbGxpYyJ9XSxoZWFkaW5nOiJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2Rpbmdz''@;'; put 'put ''In0se2VuY29kaW5nczpbe2xhYmVsczpbImNoaW5lc2UiLCJjc2diMjMxMiIsImNzaXNvNThnYjIzMTI4MCIsImdiMjMxMiIsImdiXzIzMTIiLCJnYl8yMzEyLTgwIiwiZ2JrIiwiaXNvLWlyLTU4IiwieC1nYmsiXSxuYW1lOiJHQksifSx7bGFiZWxzOlsiZ2IxODAzMCJdLG5hbWU6ImdiMTgw''@;'; put 'put ''MzAifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAoc2ltcGxpZmllZCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImJpZzUiLCJiaWc1LWhrc2NzIiwiY24tYmlnNSIsImNzYmlnNSIsIngteC1iaWc1Il0sbmFtZToiQmlnNSJ9XSxoZWFkaW5nOiJMZWdh''@;'; put 'put ''Y3kgbXVsdGktYnl0ZSBDaGluZXNlICh0cmFkaXRpb25hbCkgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVjcGtkZm10amFwYW5lc2UiLCJldWMtanAiLCJ4LWV1Yy1qcCJdLG5hbWU6IkVVQy1KUCJ9LHtsYWJlbHM6WyJjc2lzbzIwMjJqcCIsImlzby0yMDIyLWpwIl0s''@;'; put 'put ''bmFtZToiSVNPLTIwMjItSlAifSx7bGFiZWxzOlsiY3NzaGlmdGppcyIsIm1zOTMyIiwibXNfa2FuamkiLCJzaGlmdC1qaXMiLCJzaGlmdF9qaXMiLCJzamlzIiwid2luZG93cy0zMWoiLCJ4LXNqaXMiXSxuYW1lOiJTaGlmdF9KSVMifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgSmFw''@;'; put 'put ''YW5lc2UgZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzZXVja3IiLCJjc2tzYzU2MDExOTg3IiwiZXVjLWtyIiwiaXNvLWlyLTE0OSIsImtvcmVhbiIsImtzX2NfNTYwMS0xOTg3Iiwia3NfY181NjAxLTE5ODkiLCJrc2M1NjAxIiwia3NjXzU2MDEiLCJ3aW5kb3dzLTk0OSJd''@;'; put 'put ''LG5hbWU6IkVVQy1LUiJ9XSxoZWFkaW5nOiJMZWdhY3kgbXVsdGktYnl0ZSBLb3JlYW4gZW5jb2RpbmdzIn0se2VuY29kaW5nczpbe2xhYmVsczpbImNzaXNvMjAyMmtyIiwiaHotZ2ItMjMxMiIsImlzby0yMDIyLWNuIiwiaXNvLTIwMjItY24tZXh0IiwiaXNvLTIwMjIta3IiXSxuYW1lOiJy''@;'; put 'put ''ZXBsYWNlbWVudCJ9LHtsYWJlbHM6WyJ1dGYtMTZiZSJdLG5hbWU6IlVURi0xNkJFIn0se2xhYmVsczpbInV0Zi0xNiIsInV0Zi0xNmxlIl0sbmFtZToiVVRGLTE2TEUifSx7bGFiZWxzOlsieC11c2VyLWRlZmluZWQiXSxuYW1lOiJ4LXVzZXItZGVmaW5lZCJ9XSxoZWFkaW5nOiJMZWdhY3kg''@;'; put 'put ''bWlzY2VsbGFuZW91cyBlbmNvZGluZ3MifV0scT17fTtVLmZvckVhY2goZnVuY3Rpb24oVGUpe1RlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtxZS5sYWJlbHMuZm9yRWFjaChmdW5jdGlvbihYZSl7cVtYZV09cWV9KX0pfSk7dmFyIGIsZWU9e30sdGU9e307ZnVuY3Rpb24gb2Uo''@;'; put 'put ''VGUscWUpe3JldHVybiBxZSYmcWVbVGVdfHxudWxsfWZ1bmN0aW9uIHNlKFRlLHFlKXt2YXIgWGU9cWUuaW5kZXhPZihUZSk7cmV0dXJuLTE9PT1YZT9udWxsOlhlfWZ1bmN0aW9uIGhlKFRlKXtpZighKCJlbmNvZGluZy1pbmRleGVzImluIGFlKSl0aHJvdyBFcnJvcigiSW5kZXhlcyBtaXNz''@;'; put 'put ''aW5nLiBEaWQgeW91IGZvcmdldCB0byBpbmNsdWRlIGVuY29kaW5nLWluZGV4ZXMuanMgZmlyc3Q/Iik7cmV0dXJuIGFlWyJlbmNvZGluZy1pbmRleGVzIl1bVGVdfXZhciBILE49InV0Zi04IjtmdW5jdGlvbiBnKFRlLHFlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSl0aHJvdyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbGxlZCBhcyBhIGZ1bmN0aW9uLiBEaWQgeW91IGZvcmdldCAnbmV3Jz8iKTtUZT12b2lkIDAhPT1UZT9TdHJpbmcoVGUpOk4scWU9TShxZSksdGhpcy5fZW5jb2Rpbmc9bnVsbCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5faWdub3JlQk9NPSExLHRoaXMuX0JPTXNlZW49ITEsdGhp''@;'; put 'put ''cy5fZXJyb3JfbW9kZT0icmVwbGFjZW1lbnQiLHRoaXMuX2RvX25vdF9mbHVzaD0hMTt2YXIgWGU9WChUZSk7aWYobnVsbD09PVhlfHwicmVwbGFjZW1lbnQiPT09WGUubmFtZSl0aHJvdyBSYW5nZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1RlKTtpZighdGVbWGUubmFtZV0pdGhyb3cg''@;'; put 'put ''RXJyb3IoIkRlY29kZXIgbm90IHByZXNlbnQuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTt2YXIgVWU9dGhpcztyZXR1cm4gVWUuX2VuY29kaW5nPVhlLHFlLmZhdGFsJiYoVWUuX2Vycm9yX21vZGU9ImZhdGFsIikscWUuaWdub3JlQk9N''@;'; put 'put ''JiYoVWUuX2lnbm9yZUJPTT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5fHwodGhpcy5lbmNvZGluZz1VZS5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpLHRoaXMuZmF0YWw9ImZhdGFsIj09PVVlLl9lcnJvcl9tb2RlLHRoaXMuaWdub3JlQk9NPVVlLl9pZ25vcmVCT00pLFVlfWZ1bmN0''@;'; put 'put ''aW9uIEMoVGUscWUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEMpKXRocm93IFR5cGVFcnJvcigiQ2FsbGVkIGFzIGEgZnVuY3Rpb24uIERpZCB5b3UgZm9yZ2V0ICduZXcnPyIpO2lmKHFlPU0ocWUpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZW5jb2Rlcj1udWxsLHRoaXMuX2RvX25vdF9m''@;'; put 'put ''bHVzaD0hMSx0aGlzLl9mYXRhbD1xZS5mYXRhbD8iZmF0YWwiOiJyZXBsYWNlbWVudCIscWUuTk9OU1RBTkRBUkRfYWxsb3dMZWdhY3lFbmNvZGluZyl7dmFyIFVlPVgoVGU9dm9pZCAwIT09VGU/U3RyaW5nKFRlKTpOKTtpZihudWxsPT09VWV8fCJyZXBsYWNlbWVudCI9PT1VZS5uYW1lKXRo''@;'; put 'put ''cm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrVGUpO2lmKCFlZVtVZS5uYW1lXSl0aHJvdyBFcnJvcigiRW5jb2RlciBub3QgcHJlc2VudC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3RoaXMuX2VuY29kaW5nPVVlfWVs''@;'; put 'put ''c2UgdGhpcy5fZW5jb2Rpbmc9WCgidXRmLTgiKSx2b2lkIDAhPT1UZSYmImNvbnNvbGUiaW4gYWUmJmNvbnNvbGUud2FybigiVGV4dEVuY29kZXIgY29uc3RydWN0b3IgY2FsbGVkIHdpdGggZW5jb2RpbmcgbGFiZWwsIHdoaWNoIGlzIGlnbm9yZWQuIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9dGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpKSx0aGlzfWZ1bmN0aW9uIFMoVGUpe3ZhciBxZT1UZS5mYXRhbCxYZT0wLFVlPTAsaHQ9MCxNZT0xMjgsRGU9MTkxO3RoaXMuaGFuZGxlcj1mdW5jdGlvbih6ZSxpdCl7aWYoaXQ9PT1JJiYw''@;'; put 'put ''IT09aHQpcmV0dXJuIGh0PTAsaihxZSk7aWYoaXQ9PT1JKXJldHVybiBFO2lmKDA9PT1odCl7aWYoeChpdCwwLDEyNykpcmV0dXJuIGl0O2lmKHgoaXQsMTk0LDIyMykpaHQ9MSxYZT0zMSZpdDtlbHNlIGlmKHgoaXQsMjI0LDIzOSkpMjI0PT09aXQmJihNZT0xNjApLDIzNz09PWl0JiYoRGU9''@;'; put 'put ''MTU5KSxodD0yLFhlPTE1Jml0O2Vsc2V7aWYoIXgoaXQsMjQwLDI0NCkpcmV0dXJuIGoocWUpOzI0MD09PWl0JiYoTWU9MTQ0KSwyNDQ9PT1pdCYmKERlPTE0MyksaHQ9MyxYZT03Jml0fXJldHVybiBudWxsfWlmKCF4KGl0LE1lLERlKSlyZXR1cm4gWGU9aHQ9VWU9MCxNZT0xMjgsRGU9MTkx''@;'; put 'put ''LHplLnByZXBlbmQoaXQpLGoocWUpO2lmKE1lPTEyOCxEZT0xOTEsWGU9WGU8PDZ8NjMmaXQsKFVlKz0xKSE9PWh0KXJldHVybiBudWxsO3ZhciB1dD1YZTtyZXR1cm4gWGU9aHQ9VWU9MCx1dH19ZnVuY3Rpb24gdihUZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFhlLFVlKXtpZihVZT09PUkp''@;'; put 'put ''cmV0dXJuIEU7aWYoSyhVZSkpcmV0dXJuIFVlO3ZhciBodCxNZTt4KFVlLDEyOCwyMDQ3KT8oaHQ9MSxNZT0xOTIpOngoVWUsMjA0OCw2NTUzNSk/KGh0PTIsTWU9MjI0KTp4KFVlLDY1NTM2LDExMTQxMTEpJiYoaHQ9MyxNZT0yNDApO2Zvcih2YXIgRGU9WyhVZT4+NipodCkrTWVdO2h0PjA7''@;'; put 'put ''KURlLnB1c2goMTI4fDYzJlVlPj42KihodC0xKSksaHQtPTE7cmV0dXJuIERlfX1mdW5jdGlvbiBwKFRlLHFlKXt2YXIgWGU9cWUuZmF0YWw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFVlLGh0KXtpZihodD09PUkpcmV0dXJuIEU7aWYoeihodCkpcmV0dXJuIGh0O3ZhciBNZT1UZVtodC0xMjhd''@;'; put 'put ''O3JldHVybiBudWxsPT09TWU/aihYZSk6TWV9fWZ1bmN0aW9uIHcoVGUscWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxodCl7aWYoaHQ9PT1JKXJldHVybiBFO2lmKEsoaHQpKXJldHVybiBodDt2YXIgTWU9c2UoaHQsVGUpO3JldHVybiBudWxsPT09TWUmJlYoaHQpLE1lKzEyOH19ZnVu''@;'; put 'put ''Y3Rpb24gSihUZSl7dmFyIHFlPVRlLmZhdGFsLFhlPTAsVWU9MCxodD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihNZSxEZSl7aWYoRGU9PT1JJiYwPT09WGUmJjA9PT1VZSYmMD09PWh0KXJldHVybiBFO3ZhciB6ZTtpZihEZT09PUkmJigwIT09WGV8fDAhPT1VZXx8MCE9PWh0KSYmKFhlPTAs''@;'; put 'put ''VWU9MCxodD0wLGoocWUpKSwwIT09aHQpe3plPW51bGwseChEZSw0OCw1NykmJih6ZT1mdW5jdGlvbiB1ZShUZSl7aWYoVGU+Mzk0MTkmJlRlPDE4OWUzfHxUZT4xMjM3NTc1KXJldHVybiBudWxsO2lmKDc0NTc9PT1UZSlyZXR1cm4gNTkzMzU7dmFyIGh0LHFlPTAsWGU9MCxVZT1oZSgiZ2Ix''@;'; put 'put ''ODAzMC1yYW5nZXMiKTtmb3IoaHQ9MDtodDxVZS5sZW5ndGg7KytodCl7dmFyIE1lPVVlW2h0XTtpZighKE1lWzBdPD1UZSkpYnJlYWs7cWU9TWVbMF0sWGU9TWVbMV19cmV0dXJuIFhlK1RlLXFlfSgxMCooMTI2KigxMCooWGUtMTI5KStVZS00OCkraHQtMTI5KStEZS00OCkpO3ZhciBpdD1b''@;'; put 'put ''VWUsaHQsRGVdO3JldHVybiBYZT0wLFVlPTAsaHQ9MCxudWxsPT09emU/KE1lLnByZXBlbmQoaXQpLGoocWUpKTp6ZX1pZigwIT09VWUpcmV0dXJuIHgoRGUsMTI5LDI1NCk/KGh0PURlLG51bGwpOihNZS5wcmVwZW5kKFtVZSxEZV0pLFhlPTAsVWU9MCxqKHFlKSk7aWYoMCE9PVhlKXtpZih4''@;'; put 'put ''KERlLDQ4LDU3KSlyZXR1cm4gVWU9RGUsbnVsbDt2YXIgdXQ9WGUsTXQ9bnVsbDtYZT0wO3ZhciBIdD1EZTwxMjc/NjQ6NjU7cmV0dXJuKHgoRGUsNjQsMTI2KXx8eChEZSwxMjgsMjU0KSkmJihNdD0xOTAqKHV0LTEyOSkrKERlLUh0KSksbnVsbD09PSh6ZT1udWxsPT09TXQ/bnVsbDpvZShN''@;'; put 'put ''dCxoZSgiZ2IxODAzMCIpKSkmJnooRGUpJiZNZS5wcmVwZW5kKERlKSxudWxsPT09emU/aihxZSk6emV9cmV0dXJuIHooRGUpP0RlOjEyOD09PURlPzgzNjQ6eChEZSwxMjksMjU0KT8oWGU9RGUsbnVsbCk6aihxZSl9fWZ1bmN0aW9uIG5lKFRlLHFlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24o''@;'; put 'put ''VWUsaHQpe2lmKGh0PT09SSlyZXR1cm4gRTtpZihLKGh0KSlyZXR1cm4gaHQ7aWYoNTg4NTM9PT1odClyZXR1cm4gVihodCk7aWYocWUmJjgzNjQ9PT1odClyZXR1cm4gMTI4O3ZhciBNZT1zZShodCxoZSgiZ2IxODAzMCIpKTtpZihudWxsIT09TWUpe3ZhciB6ZT1NZSUxOTA7cmV0dXJuW2xl''@;'; put 'put ''KE1lLzE5MCkrMTI5LHplKyh6ZTw2Mz82NDo2NSldfWlmKHFlKXJldHVybiBWKGh0KTtNZT1mdW5jdGlvbiBjZShUZSl7aWYoNTkzMzU9PT1UZSlyZXR1cm4gNzQ1Nzt2YXIgaHQscWU9MCxYZT0wLFVlPWhlKCJnYjE4MDMwLXJhbmdlcyIpO2ZvcihodD0wO2h0PFVlLmxlbmd0aDsrK2h0KXt2''@;'; put 'put ''YXIgTWU9VWVbaHRdO2lmKCEoTWVbMV08PVRlKSlicmVhaztxZT1NZVsxXSxYZT1NZVswXX1yZXR1cm4gWGUrVGUtcWV9KGh0KTt2YXIgdXQ9bGUoTWUvMTAvMTI2LzEwKSxNdD1sZSgoTWUtPTEwKnV0KjEyNioxMCkvMTAvMTI2KSxIdD1sZSgoTWUtPTEwKk10KjEyNikvMTApO3JldHVyblt1''@;'; put 'put ''dCsxMjksTXQrNDgsSHQrMTI5LE1lLTEwKkh0KzQ4XX19ZnVuY3Rpb24gZGUoVGUpe3ZhciBxZT1UZS5mYXRhbCxYZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxodCl7aWYoaHQ9PT1JJiYwIT09WGUpcmV0dXJuIFhlPTAsaihxZSk7aWYoaHQ9PT1JJiYwPT09WGUpcmV0dXJuIEU7aWYo''@;'; put 'put ''MCE9PVhlKXt2YXIgTWU9WGUsRGU9bnVsbDtYZT0wO3ZhciB6ZT1odDwxMjc/NjQ6OTg7c3dpdGNoKCh4KGh0LDY0LDEyNil8fHgoaHQsMTYxLDI1NCkpJiYoRGU9MTU3KihNZS0xMjkpKyhodC16ZSkpLERlKXtjYXNlIDExMzM6cmV0dXJuWzIwMiw3NzJdO2Nhc2UgMTEzNTpyZXR1cm5bMjAy''@;'; put 'put ''LDc4MF07Y2FzZSAxMTY0OnJldHVyblsyMzQsNzcyXTtjYXNlIDExNjY6cmV0dXJuWzIzNCw3ODBdfXZhciBpdD1udWxsPT09RGU/bnVsbDpvZShEZSxoZSgiYmlnNSIpKTtyZXR1cm4gbnVsbD09PWl0JiZ6KGh0KSYmVWUucHJlcGVuZChodCksbnVsbD09PWl0P2oocWUpOml0fXJldHVybiB6''@;'; put 'put ''KGh0KT9odDp4KGh0LDEyOSwyNTQpPyhYZT1odCxudWxsKTpqKHFlKX19ZnVuY3Rpb24gZmUoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihYZSxVZSl7aWYoVWU9PT1JKXJldHVybiBFO2lmKEsoVWUpKXJldHVybiBVZTt2YXIgaHQ9ZnVuY3Rpb24gRChUZSl7dmFyIHFlPUg9SHx8aGUoImJp''@;'; put 'put ''ZzUiKS5tYXAoZnVuY3Rpb24oWGUsVWUpe3JldHVybiBVZTw1MDI0P251bGw6WGV9KTtyZXR1cm4gOTU1Mj09PVRlfHw5NTY2PT09VGV8fDk1Njk9PT1UZXx8OTU3OD09PVRlfHwyMTMxMz09PVRlfHwyMTMxNz09PVRlP3FlLmxhc3RJbmRleE9mKFRlKTpzZShUZSxxZSl9KFVlKTtpZihudWxs''@;'; put 'put ''PT09aHQpcmV0dXJuIFYoVWUpO3ZhciBNZT1sZShodC8xNTcpKzEyOTtpZihNZTwxNjEpcmV0dXJuIFYoVWUpO3ZhciBEZT1odCUxNTc7cmV0dXJuW01lLERlKyhEZTw2Mz82NDo5OCldfX1mdW5jdGlvbiB4ZShUZSl7dmFyIHFlPVRlLmZhdGFsLFhlPSExLFVlPTA7dGhpcy5oYW5kbGVyPWZ1''@;'; put 'put ''bmN0aW9uKGh0LE1lKXtpZihNZT09PUkmJjAhPT1VZSlyZXR1cm4gVWU9MCxqKHFlKTtpZihNZT09PUkmJjA9PT1VZSlyZXR1cm4gRTtpZigxNDI9PT1VZSYmeChNZSwxNjEsMjIzKSlyZXR1cm4gVWU9MCw2NTIxNitNZTtpZigxNDM9PT1VZSYmeChNZSwxNjEsMjU0KSlyZXR1cm4gWGU9ITAs''@;'; put 'put ''VWU9TWUsbnVsbDtpZigwIT09VWUpe3ZhciBEZT1VZTtVZT0wO3ZhciB6ZT1udWxsO3JldHVybiB4KERlLDE2MSwyNTQpJiZ4KE1lLDE2MSwyNTQpJiYoemU9b2UoOTQqKERlLTE2MSkrKE1lLTE2MSksaGUoWGU/ImppczAyMTIiOiJqaXMwMjA4IikpKSxYZT0hMSx4KE1lLDE2MSwyNTQpfHxo''@;'; put 'put ''dC5wcmVwZW5kKE1lKSxudWxsPT09emU/aihxZSk6emV9cmV0dXJuIHooTWUpP01lOjE0Mj09PU1lfHwxNDM9PT1NZXx8eChNZSwxNjEsMjU0KT8oVWU9TWUsbnVsbCk6aihxZSl9fWZ1bmN0aW9uIExlKFRlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWGUsVWUpe2lmKFVlPT09SSlyZXR1cm4g''@;'; put 'put ''RTtpZihLKFVlKSlyZXR1cm4gVWU7aWYoMTY1PT09VWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1VZSlyZXR1cm4gMTI2O2lmKHgoVWUsNjUzNzcsNjU0MzkpKXJldHVyblsxNDIsVWUtNjUzNzcrMTYxXTs4NzIyPT09VWUmJihVZT02NTI5Myk7dmFyIGh0PXNlKFVlLGhlKCJqaXMwMjA4IikpO3Jl''@;'; put 'put ''dHVybiBudWxsPT09aHQ/VihVZSk6W2xlKGh0Lzk0KSsxNjEsaHQlOTQrMTYxXX19ZnVuY3Rpb24gRmUoVGUpe3ZhciBxZT1UZS5mYXRhbCxVZT0wLE1lPTAsRGU9ITE7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHplLGl0KXtzd2l0Y2goVWUpe2RlZmF1bHQ6Y2FzZSAwOnJldHVybiAyNz09PWl0''@;'; put 'put ''PyhVZT01LG51bGwpOngoaXQsMCwxMjcpJiYxNCE9PWl0JiYxNSE9PWl0JiYyNyE9PWl0PyhEZT0hMSxpdCk6aXQ9PT1JP0U6KERlPSExLGoocWUpKTtjYXNlIDE6cmV0dXJuIDI3PT09aXQ/KFVlPTUsbnVsbCk6OTI9PT1pdD8oRGU9ITEsMTY1KToxMjY9PT1pdD8oRGU9ITEsODI1NCk6eChp''@;'; put 'put ''dCwwLDEyNykmJjE0IT09aXQmJjE1IT09aXQmJjI3IT09aXQmJjkyIT09aXQmJjEyNiE9PWl0PyhEZT0hMSxpdCk6aXQ9PT1JP0U6KERlPSExLGoocWUpKTtjYXNlIDI6cmV0dXJuIDI3PT09aXQ/KFVlPTUsbnVsbCk6eChpdCwzMyw5NSk/KERlPSExLDY1MzQ0K2l0KTppdD09PUk/RTooRGU9''@;'; put 'put ''ITEsaihxZSkpO2Nhc2UgMzpyZXR1cm4gMjc9PT1pdD8oVWU9NSxudWxsKTp4KGl0LDMzLDEyNik/KERlPSExLE1lPWl0LFVlPTQsbnVsbCk6aXQ9PT1JP0U6KERlPSExLGoocWUpKTtjYXNlIDQ6aWYoMjc9PT1pdClyZXR1cm4gVWU9NSxqKHFlKTtpZih4KGl0LDMzLDEyNikpe1VlPTM7dmFy''@;'; put 'put ''IE10PW9lKDk0KihNZS0zMykraXQtMzMsaGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1NdD9qKHFlKTpNdH1yZXR1cm4gaXQ9PT1JPyhVZT0zLHplLnByZXBlbmQoaXQpLGoocWUpKTooVWU9MyxqKHFlKSk7Y2FzZSA1OnJldHVybiAzNj09PWl0fHw0MD09PWl0PyhNZT1pdCxVZT02LG51''@;'; put 'put ''bGwpOih6ZS5wcmVwZW5kKGl0KSxEZT0hMSxVZT0wLGoocWUpKTtjYXNlIDY6dmFyIEh0PU1lO01lPTA7dmFyIFB0PW51bGw7aWYoNDA9PT1IdCYmNjY9PT1pdCYmKFB0PTApLDQwPT09SHQmJjc0PT09aXQmJihQdD0xKSw0MD09PUh0JiY3Mz09PWl0JiYoUHQ9MiksMzY9PT1IdCYmKDY0PT09''@;'; put 'put ''aXR8fDY2PT09aXQpJiYoUHQ9MyksbnVsbCE9PVB0KXtVZT1VZT1QdDt2YXIgb249RGU7cmV0dXJuIERlPSEwLG9uP2oocWUpOm51bGx9cmV0dXJuIHplLnByZXBlbmQoW0h0LGl0XSksRGU9ITEsVWU9MCxqKHFlKX19fWZ1bmN0aW9uIE9lKFRlKXt2YXIgVWU9MDt0aGlzLmhhbmRsZXI9ZnVu''@;'; put 'put ''Y3Rpb24oaHQsTWUpe2lmKE1lPT09SSYmMCE9PVVlKXJldHVybiBodC5wcmVwZW5kKE1lKSxVZT0wLFsyNyw0MCw2Nl07aWYoTWU9PT1JJiYwPT09VWUpcmV0dXJuIEU7aWYoISgwIT09VWUmJjEhPT1VZXx8MTQhPT1NZSYmMTUhPT1NZSYmMjchPT1NZSkpcmV0dXJuIFYoNjU1MzMpO2lmKDA9''@;'; put 'put ''PT1VZSYmSyhNZSkpcmV0dXJuIE1lO2lmKDE9PT1VZSYmKEsoTWUpJiY5MiE9PU1lJiYxMjYhPT1NZXx8MTY1PT1NZXx8ODI1ND09TWUpKXtpZihLKE1lKSlyZXR1cm4gTWU7aWYoMTY1PT09TWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1NZSlyZXR1cm4gMTI2fWlmKEsoTWUpJiYwIT09VWUpcmV0''@;'; put 'put ''dXJuIGh0LnByZXBlbmQoTWUpLFVlPTAsWzI3LDQwLDY2XTtpZigoMTY1PT09TWV8fDgyNTQ9PT1NZSkmJjEhPT1VZSlyZXR1cm4gaHQucHJlcGVuZChNZSksVWU9MSxbMjcsNDAsNzRdOzg3MjI9PT1NZSYmKE1lPTY1MjkzKTt2YXIgRGU9c2UoTWUsaGUoImppczAyMDgiKSk7cmV0dXJuIG51''@;'; put 'put ''bGw9PT1EZT9WKE1lKToyIT09VWU/KGh0LnByZXBlbmQoTWUpLFVlPTIsWzI3LDM2LDY2XSk6W2xlKERlLzk0KSszMyxEZSU5NCszM119fWZ1bmN0aW9uIGplKFRlKXt2YXIgcWU9VGUuZmF0YWwsWGU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oVWUsaHQpe2lmKGh0PT09SSYmMCE9PVhlKXJl''@;'; put 'put ''dHVybiBYZT0wLGoocWUpO2lmKGh0PT09SSYmMD09PVhlKXJldHVybiBFO2lmKDAhPT1YZSl7dmFyIE1lPVhlLERlPW51bGw7WGU9MDt2YXIgemU9aHQ8MTI3PzY0OjY1LGl0PU1lPDE2MD8xMjk6MTkzO2lmKCh4KGh0LDY0LDEyNil8fHgoaHQsMTI4LDI1MikpJiYoRGU9MTg4KihNZS1pdCkr''@;'; put 'put ''aHQtemUpLHgoRGUsODgzNiwxMDcxNSkpcmV0dXJuIDQ4NTA4K0RlO3ZhciB1dD1udWxsPT09RGU/bnVsbDpvZShEZSxoZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PXV0JiZ6KGh0KSYmVWUucHJlcGVuZChodCksbnVsbD09PXV0P2oocWUpOnV0fXJldHVybiB6KGh0KXx8MTI4PT09aHQ/''@;'; put 'put ''aHQ6eChodCwxNjEsMjIzKT82NTIxNitodDp4KGh0LDEyOSwxNTkpfHx4KGh0LDIyNCwyNTIpPyhYZT1odCxudWxsKTpqKHFlKX19ZnVuY3Rpb24gV2UoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihYZSxVZSl7aWYoVWU9PT1JKXJldHVybiBFO2lmKEsoVWUpfHwxMjg9PT1VZSlyZXR1cm4g''@;'; put 'put ''VWU7aWYoMTY1PT09VWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1VZSlyZXR1cm4gMTI2O2lmKHgoVWUsNjUzNzcsNjU0MzkpKXJldHVybiBVZS02NTM3NysxNjE7ODcyMj09PVVlJiYoVWU9NjUyOTMpO3ZhciBodD1mdW5jdGlvbiBHKFRlKXtyZXR1cm4oYj1ifHxoZSgiamlzMDIwOCIpLm1hcChm''@;'; put 'put ''dW5jdGlvbihYZSxVZSl7cmV0dXJuIHgoVWUsODI3Miw4ODM1KT9udWxsOlhlfSkpLmluZGV4T2YoVGUpfShVZSk7aWYobnVsbD09PWh0KXJldHVybiBWKFVlKTt2YXIgTWU9bGUoaHQvMTg4KSx6ZT1odCUxODg7cmV0dXJuW01lKyhNZTwzMT8xMjk6MTkzKSx6ZSsoemU8NjM/NjQ6NjUpXX19''@;'; put 'put ''ZnVuY3Rpb24gS2UoVGUpe3ZhciBxZT1UZS5mYXRhbCxYZT0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxodCl7aWYoaHQ9PT1JJiYwIT09WGUpcmV0dXJuIFhlPTAsaihxZSk7aWYoaHQ9PT1JJiYwPT09WGUpcmV0dXJuIEU7aWYoMCE9PVhlKXt2YXIgTWU9WGUsRGU9bnVsbDtYZT0wLHgo''@;'; put 'put ''aHQsNjUsMjU0KSYmKERlPTE5MCooTWUtMTI5KSsoaHQtNjUpKTt2YXIgemU9bnVsbD09PURlP251bGw6b2UoRGUsaGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PURlJiZ6KGh0KSYmVWUucHJlcGVuZChodCksbnVsbD09PXplP2oocWUpOnplfXJldHVybiB6KGh0KT9odDp4KGh0LDEyOSwy''@;'; put 'put ''NTQpPyhYZT1odCxudWxsKTpqKHFlKX19ZnVuY3Rpb24gWWUoVGUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihYZSxVZSl7aWYoVWU9PT1JKXJldHVybiBFO2lmKEsoVWUpKXJldHVybiBVZTt2YXIgaHQ9c2UoVWUsaGUoImV1Yy1rciIpKTtyZXR1cm4gbnVsbD09PWh0P1YoVWUpOltsZShodC8x''@;'; put 'put ''OTApKzEyOSxodCUxOTArNjVdfX1mdW5jdGlvbiBKZShUZSxxZSl7dmFyIFhlPVRlPj44LFVlPTI1NSZUZTtyZXR1cm4gcWU/W1hlLFVlXTpbVWUsWGVdfWZ1bmN0aW9uIGx0KFRlLHFlKXt2YXIgWGU9cWUuZmF0YWwsVWU9bnVsbCxodD1udWxsO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihNZSxE''@;'; put 'put ''ZSl7aWYoRGU9PT1JJiYobnVsbCE9PVVlfHxudWxsIT09aHQpKXJldHVybiBqKFhlKTtpZihEZT09PUkmJm51bGw9PT1VZSYmbnVsbD09PWh0KXJldHVybiBFO2lmKG51bGw9PT1VZSlyZXR1cm4gVWU9RGUsbnVsbDt2YXIgemU7aWYoemU9VGU/KFVlPDw4KStEZTooRGU8PDgpK1VlLFVlPW51''@;'; put 'put ''bGwsbnVsbCE9PWh0KXt2YXIgaXQ9aHQ7cmV0dXJuIGh0PW51bGwseCh6ZSw1NjMyMCw1NzM0Myk/NjU1MzYrMTAyNCooaXQtNTUyOTYpKyh6ZS01NjMyMCk6KE1lLnByZXBlbmQoSmUoemUsVGUpKSxqKFhlKSl9cmV0dXJuIHgoemUsNTUyOTYsNTYzMTkpPyhodD16ZSxudWxsKTp4KHplLDU2''@;'; put 'put ''MzIwLDU3MzQzKT9qKFhlKTp6ZX19ZnVuY3Rpb24gUGUoVGUscWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihVZSxodCl7aWYoaHQ9PT1JKXJldHVybiBFO2lmKHgoaHQsMCw2NTUzNSkpcmV0dXJuIEplKGh0LFRlKTt2YXIgTWU9SmUoNTUyOTYrKGh0LTY1NTM2Pj4xMCksVGUpLERlPUplKDU2''@;'; put 'put ''MzIwKyhodC02NTUzNiYxMDIzKSxUZSk7cmV0dXJuIE1lLmNvbmNhdChEZSl9fWZ1bmN0aW9uIGJlKFRlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oWGUsVWUpe3JldHVybiBVZT09PUk/RTp6KFVlKT9VZTo2MzM2MCtVZS0xMjh9fWZ1bmN0aW9uIEFlKFRlKXt0aGlzLmhhbmRsZXI9ZnVuY3Rp''@;'; put 'put ''b24oWGUsVWUpe3JldHVybiBVZT09PUk/RTpLKFVlKT9VZTp4KFVlLDYzMzYwLDYzNDg3KT9VZS02MzM2MCsxMjg6VihVZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLnByb3RvdHlwZSwiZmF0YWwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4iZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZy5wcm90b3R5cGUs''@;'; put 'put ''Imlnbm9yZUJPTSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pZ25vcmVCT019fSkpLGcucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihxZSxYZSl7dmFyIFVlO1VlPSJvYmplY3QiPT10eXBlb2YgcWUmJnFlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bmV3IFVpbnQ4QXJyYXkocWUp''@;'; put 'put ''OiJvYmplY3QiPT10eXBlb2YgcWUmJiJidWZmZXIiaW4gcWUmJnFlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KHFlLmJ1ZmZlcixxZS5ieXRlT2Zmc2V0LHFlLmJ5dGVMZW5ndGgpOm5ldyBVaW50OEFycmF5KDApLFhlPU0oWGUpLHRoaXMuX2RvX25vdF9m''@;'; put 'put ''bHVzaHx8KHRoaXMuX2RlY29kZXI9dGVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9lcnJvcl9tb2RlfSksdGhpcy5fQk9Nc2Vlbj0hMSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhWGUuc3RyZWFtO2Zvcih2YXIgRGUsaHQ9bmV3IGsoVWUpLE1lPVtdOzspe3Zh''@;'; put 'put ''ciB6ZT1odC5yZWFkKCk7aWYoemU9PT1JfHwoRGU9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKGh0LHplKSk9PT1FKWJyZWFrO251bGwhPT1EZSYmKEFycmF5LmlzQXJyYXkoRGUpP01lLnB1c2guYXBwbHkoTWUsRGUpOk1lLnB1c2goRGUpKX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtkb3tpZigo''@;'; put 'put ''RGU9dGhpcy5fZGVjb2Rlci5oYW5kbGVyKGh0LGh0LnJlYWQoKSkpPT09RSlicmVhaztudWxsIT09RGUmJihBcnJheS5pc0FycmF5KERlKT9NZS5wdXNoLmFwcGx5KE1lLERlKTpNZS5wdXNoKERlKSl9d2hpbGUoIWh0LmVuZE9mU3RyZWFtKCkpO3RoaXMuX2RlY29kZXI9bnVsbH1yZXR1cm4g''@;'; put 'put ''ZnVuY3Rpb24gaXQodXQpe3JldHVybiBmdW5jdGlvbiBtKFRlLHFlKXtyZXR1cm4tMSE9PVRlLmluZGV4T2YocWUpfShbIlVURi04IiwiVVRGLTE2TEUiLCJVVEYtMTZCRSJdLHRoaXMuX2VuY29kaW5nLm5hbWUpJiYhdGhpcy5faWdub3JlQk9NJiYhdGhpcy5fQk9Nc2VlbiYmKHV0Lmxlbmd0''@;'; put 'put ''aD4wJiY2NTI3OT09PXV0WzBdPyh0aGlzLl9CT01zZWVuPSEwLHV0LnNoaWZ0KCkpOnV0Lmxlbmd0aD4wJiYodGhpcy5fQk9Nc2Vlbj0hMCkpLGZ1bmN0aW9uIFIoVGUpe2Zvcih2YXIgcWU9IiIsWGU9MDtYZTxUZS5sZW5ndGg7KytYZSl7dmFyIFVlPVRlW1hlXTtVZTw9NjU1MzU/cWUrPVN0''@;'; put 'put ''cmluZy5mcm9tQ2hhckNvZGUoVWUpOihVZS09NjU1MzYscWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKFVlPj4xMCksNTYzMjArKDEwMjMmVWUpKSl9cmV0dXJuIHFlfSh1dCl9LmNhbGwodGhpcyxNZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KEMucHJvdG90eXBlLCJlbmNvZGluZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCl9fSksQy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHFlLFhlKXtxZT12b2lkIDA9PT1xZT8iIjpTdHJpbmcocWUpLFhlPU0oWGUpLHRoaXMuX2Rv''@;'; put 'put ''X25vdF9mbHVzaHx8KHRoaXMuX2VuY29kZXI9ZWVbdGhpcy5fZW5jb2RpbmcubmFtZV0oe2ZhdGFsOiJmYXRhbCI9PT10aGlzLl9mYXRhbH0pKSx0aGlzLl9kb19ub3RfZmx1c2g9ISFYZS5zdHJlYW07Zm9yKHZhciBNZSxVZT1uZXcgayhmdW5jdGlvbiBPKFRlKXtmb3IodmFyIHFlPVN0cmlu''@;'; put 'put ''ZyhUZSksWGU9cWUubGVuZ3RoLFVlPTAsaHQ9W107VWU8WGU7KXt2YXIgTWU9cWUuY2hhckNvZGVBdChVZSk7aWYoTWU8NTUyOTZ8fE1lPjU3MzQzKWh0LnB1c2goTWUpO2Vsc2UgaWYoNTYzMjA8PU1lJiZNZTw9NTczNDMpaHQucHVzaCg2NTUzMyk7ZWxzZSBpZig1NTI5Njw9TWUmJk1lPD01''@;'; put 'put ''NjMxOSlpZihVZT09PVhlLTEpaHQucHVzaCg2NTUzMyk7ZWxzZXt2YXIgRGU9cWUuY2hhckNvZGVBdChVZSsxKTs1NjMyMDw9RGUmJkRlPD01NzM0Mz8oaHQucHVzaCg2NTUzNisoKDEwMjMmTWUpPDwxMCkrKDEwMjMmRGUpKSxVZSs9MSk6aHQucHVzaCg2NTUzMyl9VWUrPTF9cmV0dXJuIGh0''@;'; put 'put ''fShxZSkpLGh0PVtdOzspe3ZhciBEZT1VZS5yZWFkKCk7aWYoRGU9PT1JfHwoTWU9dGhpcy5fZW5jb2Rlci5oYW5kbGVyKFVlLERlKSk9PT1FKWJyZWFrO0FycmF5LmlzQXJyYXkoTWUpP2h0LnB1c2guYXBwbHkoaHQsTWUpOmh0LnB1c2goTWUpfWlmKCF0aGlzLl9kb19ub3RfZmx1c2gpe2Zv''@;'; put 'put ''cig7KE1lPXRoaXMuX2VuY29kZXIuaGFuZGxlcihVZSxVZS5yZWFkKCkpKSE9PUU7KUFycmF5LmlzQXJyYXkoTWUpP2h0LnB1c2guYXBwbHkoaHQsTWUpOmh0LnB1c2goTWUpO3RoaXMuX2VuY29kZXI9bnVsbH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaHQpfSxlZVsiVVRGLTgiXT1mdW5jdGlv''@;'; put 'put ''bihUZSl7cmV0dXJuIG5ldyB2KFRlKX0sdGVbIlVURi04Il09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgUyhUZSl9LCJlbmNvZGluZy1pbmRleGVzImluIGFlJiZVLmZvckVhY2goZnVuY3Rpb24oVGUpeyJMZWdhY3kgc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIj09PVRlLmhlYWRpbmcmJlRlLmVu''@;'; put 'put ''Y29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKHFlKXt2YXIgWGU9cWUubmFtZSxVZT1oZShYZS50b0xvd2VyQ2FzZSgpKTt0ZVtYZV09ZnVuY3Rpb24oaHQpe3JldHVybiBuZXcgcChVZSxodCl9LGVlW1hlXT1mdW5jdGlvbihodCl7cmV0dXJuIG5ldyB3KFVlLGh0KX19KX0pLHRlLkdCSz1mdW5j''@;'; put 'put ''dGlvbihUZSl7cmV0dXJuIG5ldyBKKFRlKX0sZWUuR0JLPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IG5lKFRlLCEwKX0sZWUuZ2IxODAzMD1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBuZShUZSl9LHRlLmdiMTgwMzA9ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgSihUZSl9LGVlLkJpZzU9ZnVu''@;'; put 'put ''Y3Rpb24oVGUpe3JldHVybiBuZXcgZmUoVGUpfSx0ZS5CaWc1PWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IGRlKFRlKX0sZWVbIkVVQy1KUCJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IExlKFRlKX0sdGVbIkVVQy1KUCJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IHhlKFRlKX0sZWVbIklT''@;'; put 'put ''Ty0yMDIyLUpQIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgT2UoVGUpfSx0ZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBGZShUZSl9LGVlLlNoaWZ0X0pJUz1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBXZShUZSl9LHRlLlNoaWZ0X0pJUz1mdW5jdGlvbihUZSl7''@;'; put 'put ''cmV0dXJuIG5ldyBqZShUZSl9LGVlWyJFVUMtS1IiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBZZShUZSl9LHRlWyJFVUMtS1IiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBLZShUZSl9LGVlWyJVVEYtMTZCRSJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IFBlKCEwLFRlKX0sdGVbIlVU''@;'; put 'put ''Ri0xNkJFIl09ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgbHQoITAsVGUpfSxlZVsiVVRGLTE2TEUiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBQZSghMSxUZSl9LHRlWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKFRlKXtyZXR1cm4gbmV3IGx0KCExLFRlKX0sZWVbIngtdXNlci1kZWZpbmVkIl09''@;'; put 'put ''ZnVuY3Rpb24oVGUpe3JldHVybiBuZXcgQWUoVGUpfSx0ZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihUZSl7cmV0dXJuIG5ldyBiZShUZSl9LGFlLlRleHRFbmNvZGVyfHwoYWUuVGV4dEVuY29kZXI9QyksYWUuVGV4dERlY29kZXJ8fChhZS5UZXh0RGVjb2Rlcj1nKSxhdC5leHBvcnRz''@;'; put 'put ''JiYoYXQuZXhwb3J0cz17VGV4dEVuY29kZXI6YWUuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6YWUuVGV4dERlY29kZXIsRW5jb2RpbmdJbmRleGVzOmFlWyJlbmNvZGluZy1pbmRleGVzIl19KX0odGhpc3x8e30pfSw5MDQ5NjphdD0+e2Z1bmN0aW9uIEYoYWUpe3RyeXtpZighZ2xvYmFsLmxv''@;'; put 'put ''Y2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaHtyZXR1cm4hMX12YXIgeD1nbG9iYWwubG9jYWxTdG9yYWdlW2FlXTtyZXR1cm4gbnVsbCE9eCYmInRydWUiPT09U3RyaW5nKHgpLnRvTG93ZXJDYXNlKCl9YXQuZXhwb3J0cz1mdW5jdGlvbiBJZShhZSx4KXtpZihGKCJub0RlcHJlY2F0aW9uIikp''@;'; put 'put ''cmV0dXJuIGFlO3ZhciBtPSExO3JldHVybiBmdW5jdGlvbiBsZSgpe2lmKCFtKXtpZihGKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHgpO0YoInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKHgpOmNvbnNvbGUud2Fybih4KSxtPSEwfXJldHVybiBhZS5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9fX0sNzg1MzI6KGF0LEllLEYpPT57IWZ1bmN0aW9uKGFlKXsidXNlIHN0cmljdCI7YWUuZXhwb3J0cy5pc191cmk9bSxhZS5leHBvcnRzLmlzX2h0dHBfdXJpPWxlLGFlLmV4cG9ydHMuaXNfaHR0cHNfdXJpPU0sYWUuZXhwb3J0cy5pc193ZWJfdXJpPU8sYWUu''@;'; put 'put ''ZXhwb3J0cy5pc1VyaT1tLGFlLmV4cG9ydHMuaXNIdHRwVXJpPWxlLGFlLmV4cG9ydHMuaXNIdHRwc1VyaT1NLGFlLmV4cG9ydHMuaXNXZWJVcmk9Tzt2YXIgeD1mdW5jdGlvbihSKXtyZXR1cm4gUi5tYXRjaCgvKD86KFteOlwvPyNdKyk6KT8oPzpcL1wvKFteXC8/I10qKSk/KFtePyNdKiko''@;'; put 'put ''PzpcPyhbXiNdKikpPyg/OiMoLiopKT8vKX07ZnVuY3Rpb24gbShSKXtpZihSJiYhL1teYS16MC05XDpcL1w/XCNcW1xdXEBcIVwkXCZcJ1woXClcKlwrXCxcO1w9XC5cLVxfXH5cJV0vaS50ZXN0KFIpJiYhLyVbXjAtOWEtZl0vaS50ZXN0KFIpJiYhLyVbMC05YS1mXSg6P1teMC05YS1mXXwk''@;'; put 'put ''KS9pLnRlc3QoUikpe3ZhciB6LEksayxFLGosSz0iIixWPSIiO2lmKEk9KHo9eChSKSlbMl0saz16WzNdLEU9els0XSxqPXpbNV0sKEs9elsxXSkmJksubGVuZ3RoJiZrLmxlbmd0aD49MCl7aWYoSSYmSS5sZW5ndGgpe2lmKDAhPT1rLmxlbmd0aCYmIS9eXC8vLnRlc3QoaykpcmV0dXJufWVs''@;'; put 'put ''c2UgaWYoL15cL1wvLy50ZXN0KGspKXJldHVybjtpZigvXlthLXpdW2EtejAtOVwrXC1cLl0qJC8udGVzdChLLnRvTG93ZXJDYXNlKCkpKXJldHVybiBWKz1LKyI6IixJJiZJLmxlbmd0aCYmKFYrPSIvLyIrSSksVis9ayxFJiZFLmxlbmd0aCYmKFYrPSI/IitFKSxqJiZqLmxlbmd0aCYmKFYr''@;'; put 'put ''PSIjIitqKSxWfX19ZnVuY3Rpb24gbGUoUix6KXtpZihtKFIpKXt2YXIgSyxFLFYsQixJPSIiLGs9IiIsaj0iIixZPSIiO2lmKGs9KEs9eChSKSlbMl0sRT1LWzNdLFY9S1s0XSxCPUtbNV0sST1LWzFdKXtpZih6KXtpZigiaHR0cHMiIT1JLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYo''@;'; put 'put ''Imh0dHAiIT1JLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKGspcmV0dXJuLzooXGQrKSQvLnRlc3QoaykmJihqPWsubWF0Y2goLzooXGQrKSQvKVswXSxrPWsucmVwbGFjZSgvOlxkKyQvLCIiKSksWSs9SSsiOiIsWSs9Ii8vIitrLGomJihZKz1qKSxZKz1FLFYmJlYubGVuZ3RoJiYoWSs9Ij8i''@;'; put 'put ''K1YpLEImJkIubGVuZ3RoJiYoWSs9IiMiK0IpLFl9fX1mdW5jdGlvbiBNKFIpe3JldHVybiBsZShSLCEwKX1mdW5jdGlvbiBPKFIpe3JldHVybiBsZShSKXx8TShSKX19KGF0PUYubm1kKGF0KSl9LDgxNDUwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMjAxNCkseD1GKDk0''@;'; put 'put ''Njc2KSxtPVR5cGVFcnJvcjthdC5leHBvcnRzPWZ1bmN0aW9uKGxlKXtpZihhZShsZSkpcmV0dXJuIGxlO3Rocm93IG0oeChsZSkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfX0sNzAwODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTIwMTQpLHg9U3RyaW5nLG09VHlwZUVycm9y''@;'; put 'put ''O2F0LmV4cG9ydHM9ZnVuY3Rpb24obGUpe2lmKCJvYmplY3QiPT10eXBlb2YgbGV8fGFlKGxlKSlyZXR1cm4gbGU7dGhyb3cgbSgiQ2FuJ3Qgc2V0ICIreChsZSkrIiBhcyBhIHByb3RvdHlwZSIpfX0sNzQ5NjU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDI1NDYpLHg9Rig3''@;'; put 'put ''NDQxMCksbT1GKDUxMTgzKS5mLGxlPWFlKCJ1bnNjb3BhYmxlcyIpLE09QXJyYXkucHJvdG90eXBlO251bGw9PU1bbGVdJiZtKE0sbGUse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp4KG51bGwpfSksYXQuZXhwb3J0cz1mdW5jdGlvbihPKXtNW2xlXVtPXT0hMH19LDU4NjQ3OihhdCxJZSxGKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMzg0OSkseD1TdHJpbmcsbT1UeXBlRXJyb3I7YXQuZXhwb3J0cz1mdW5jdGlvbihsZSl7aWYoYWUobGUpKXJldHVybiBsZTt0aHJvdyBtKHgobGUpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sMzYzMDU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBhZT1GKDUwMzI3KSx4PUYoNzYxNjMpLG09Rig1NDQ1MCksbGU9ZnVuY3Rpb24oTSl7cmV0dXJuIGZ1bmN0aW9uKE8sUix6KXt2YXIgRSxLPWFlKE8pLEk9bShLKSxrPXgoeixJKTtpZihNJiZSIT1SKXtmb3IoO0k+azspaWYoKEU9S1trKytdKSE9RSlyZXR1cm4hMH1lbHNlIGZvcig7ST5r''@;'; put 'put ''O2srKylpZigoTXx8ayBpbiBLKSYmS1trXT09PVIpcmV0dXJuIE18fGt8fDA7cmV0dXJuIU0mJi0xfX07YXQuZXhwb3J0cz17aW5jbHVkZXM6bGUoITApLGluZGV4T2Y6bGUoITEpfX0sODY3NTk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjI0KSx4PUYoMjkxMDYpLG09''@;'; put 'put ''VHlwZUVycm9yLGxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTT1hZSYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKE8pe3JldHVy''@;'; put 'put ''biBPIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKTthdC5leHBvcnRzPU0/ZnVuY3Rpb24oTyxSKXtpZih4KE8pJiYhbGUoTywibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbSgiQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCIpO3JldHVybiBPLmxlbmd0aD1SfTpmdW5jdGlvbihPLFIpe3Jl''@;'; put 'put ''dHVybiBPLmxlbmd0aD1SfX0sNDA5MzA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpO2F0LmV4cG9ydHM9YWUoW10uc2xpY2UpfSw5NDcyMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1hZSh7fS50b1N0cmluZyksbT1hZSgiIi5zbGlj''@;'; put 'put ''ZSk7YXQuZXhwb3J0cz1mdW5jdGlvbihsZSl7cmV0dXJuIG0oeChsZSksOCwtMSl9fSw3OTUyMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjc0OTApLHg9RigxMjAxNCksbT1GKDk0NzIzKSxNPUYoMjU0NikoInRvU3RyaW5nVGFnIiksTz1PYmplY3QsUj0iQXJndW1lbnRz''@;'; put 'put ''Ij09bShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpO2F0LmV4cG9ydHM9YWU/bTpmdW5jdGlvbihLKXt2YXIgSSxrLEU7cmV0dXJuIHZvaWQgMD09PUs/IlVuZGVmaW5lZCI6bnVsbD09PUs/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yoaz1mdW5jdGlvbihLLEkpe3RyeXtyZXR1cm4g''@;'; put 'put ''S1tJXX1jYXRjaHt9fShJPU8oSyksTSkpP2s6Uj9tKEkpOiJPYmplY3QiPT0oRT1tKEkpKSYmeChJLmNhbGxlZSk/IkFyZ3VtZW50cyI6RX19LDc3NTQ4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0ODgxMSkseD1GKDIxMTk5KSxtPUYoNDc5ODcpLGxlPUYoNTExODMpO2F0''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oTSxPLFIpe2Zvcih2YXIgej14KE8pLEs9bGUuZixJPW0uZixrPTA7azx6Lmxlbmd0aDtrKyspe3ZhciBFPXpba107IWFlKE0sRSkmJighUnx8IWFlKFIsRSkpJiZLKE0sRSxJKE8sRSkpfX19LDE2MDE3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9''@;'; put 'put ''Rig4NTYyNCkseD1GKDUxMTgzKSxtPUYoNzM5MjApO2F0LmV4cG9ydHM9YWU/ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4geC5mKGxlLE0sbSgxLE8pKX06ZnVuY3Rpb24obGUsTSxPKXtyZXR1cm4gbGVbTV09TyxsZX19LDczOTIwOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ZnVuY3Rp''@;'; put 'put ''b24oSWUsRil7cmV0dXJue2VudW1lcmFibGU6ISgxJkllKSxjb25maWd1cmFibGU6ISgyJkllKSx3cml0YWJsZTohKDQmSWUpLHZhbHVlOkZ9fX0sMjU2NjY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDEyMDE0KSx4PUYoNTExODMpLG09RigzNDQ2OCksbGU9Rig3MzQ3MCk7''@;'; put 'put ''YXQuZXhwb3J0cz1mdW5jdGlvbihNLE8sUix6KXt6fHwoej17fSk7dmFyIEs9ei5lbnVtZXJhYmxlLEk9dm9pZCAwIT09ei5uYW1lP3oubmFtZTpPO2lmKGFlKFIpJiZtKFIsSSx6KSx6Lmdsb2JhbClLP01bT109UjpsZShPLFIpO2Vsc2V7dHJ5e3oudW5zYWZlP01bT10mJihLPSEwKTpkZWxl''@;'; put 'put ''dGUgTVtPXX1jYXRjaHt9Sz9NW09dPVI6eC5mKE0sTyx7dmFsdWU6UixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohei5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IXoubm9uV3JpdGFibGV9KX1yZXR1cm4gTX19LDczNDcwOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3''@;'; put 'put ''MDcwNSkseD1PYmplY3QuZGVmaW5lUHJvcGVydHk7YXQuZXhwb3J0cz1mdW5jdGlvbihtLGxlKXt0cnl7eChhZSxtLHt2YWx1ZTpsZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaHthZVttXT1sZX1yZXR1cm4gbGV9fSw0NjI4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgYWU9Rig5NDY3NikseD1UeXBlRXJyb3I7YXQuZXhwb3J0cz1mdW5jdGlvbihtLGxlKXtpZighZGVsZXRlIG1bbGVdKXRocm93IHgoIkNhbm5vdCBkZWxldGUgcHJvcGVydHkgIithZShsZSkrIiBvZiAiK2FlKG0pKX19LDg1NjI0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9''@;'; put 'put ''RigyMzUyMyk7YXQuZXhwb3J0cz0hYWUoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSl9LDMxMjcwOmF0PT57InVzZSBzdHJpY3QiO3ZhciBJZT0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZk''@;'; put 'put ''b2N1bWVudC5hbGw7YXQuZXhwb3J0cz17YWxsOkllLElTX0hUTUxEREE6dHlwZW9mIEllPiJ1IiYmdm9pZCAwIT09SWV9fSw0NjMxMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzA3MDUpLHg9RigxMzg0OSksbT1hZS5kb2N1bWVudCxsZT14KG0pJiZ4KG0uY3JlYXRlRWxl''@;'; put 'put ''bWVudCk7YXQuZXhwb3J0cz1mdW5jdGlvbihNKXtyZXR1cm4gbGU/bS5jcmVhdGVFbGVtZW50KE0pOnt9fX0sMjMxMjQ6YXQ9PnsidXNlIHN0cmljdCI7dmFyIEllPVR5cGVFcnJvcjthdC5leHBvcnRzPWZ1bmN0aW9uKGFlKXtpZihhZT45MDA3MTk5MjU0NzQwOTkxKXRocm93IEllKCJNYXhp''@;'; put 'put ''bXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWQiKTtyZXR1cm4gYWV9fSw4MzQ2MDphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBCdW4mJkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbn0sNzg1MjA6KGF0LEllLEYpPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBhZT1GKDc3ODM5KTthdC5leHBvcnRzPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KGFlKX0sODcyNDQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDk0NzIzKTthdC5leHBvcnRzPXR5cGVvZiBwcm9jZXNzPCJ1IiYmInByb2Nlc3MiPT1h''@;'; put 'put ''ZShwcm9jZXNzKX0sNzc4Mzk6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz10eXBlb2YgbmF2aWdhdG9yPCJ1IiYmU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpfHwiIn0sMjkzODU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBSLHosYWU9Rig3MDcwNSkseD1GKDc3ODM5KSxt''@;'; put 'put ''PWFlLnByb2Nlc3MsbGU9YWUuRGVubyxNPW0mJm0udmVyc2lvbnN8fGxlJiZsZS52ZXJzaW9uLE89TSYmTS52ODtPJiYoej0oUj1PLnNwbGl0KCIuIikpWzBdPjAmJlJbMF08ND8xOisoUlswXStSWzFdKSksIXomJngmJighKFI9eC5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fFJbMV0+PTc0KSYm''@;'; put 'put ''KFI9eC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKHo9K1JbMV0pLGF0LmV4cG9ydHM9en0sNDc4MzM6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xv''@;'; put 'put ''Y2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSwyMzcwNTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1FcnJvcixtPWFlKCIiLnJlcGxhY2UpLGxlPVN0cmluZyh4KCJ6eGNhc2QiKS5zdGFjayksTT0vXG5ccyphdCBbXjpdKjpbXlxuXSovLE89TS50''@;'; put 'put ''ZXN0KGxlKTthdC5leHBvcnRzPWZ1bmN0aW9uKFIseil7aWYoTyYmInN0cmluZyI9PXR5cGVvZiBSJiYheC5wcmVwYXJlU3RhY2tUcmFjZSlmb3IoO3otLTspUj1tKFIsTSwiIik7cmV0dXJuIFJ9fSw4Nzg3NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTYwMTcpLHg9Rigy''@;'; put 'put ''MzcwNSksbT1GKDQxNDEzKSxsZT1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTthdC5leHBvcnRzPWZ1bmN0aW9uKE0sTyxSLHope20mJihsZT9sZShNLE8pOmFlKE0sInN0YWNrIix4KFIseikpKX19LDQxNDEzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyMzUyMykseD1GKDcz''@;'; put 'put ''OTIwKTthdC5leHBvcnRzPSFhZShmdW5jdGlvbigpe3ZhciBtPUVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gbSl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkobSwic3RhY2siLHgoMSw3KSksNyE9PW0uc3RhY2spfSl9LDg1NjQ4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9''@;'; put 'put ''Rig3MDcwNSkseD1GKDQ3OTg3KS5mLG09RigxNjAxNyksbGU9RigyNTY2NiksTT1GKDczNDcwKSxPPUYoNzc1NDgpLFI9Rig2NzUwNyk7YXQuZXhwb3J0cz1mdW5jdGlvbih6LEspe3ZhciBWLEIsWSxYLFUsST16LnRhcmdldCxrPXouZ2xvYmFsLEU9ei5zdGF0O2lmKFY9az9hZTpFP2FlW0ld''@;'; put 'put ''fHxNKEkse30pOihhZVtJXXx8e30pLnByb3RvdHlwZSlmb3IoQiBpbiBLKXtpZihYPUtbQl0sWT16LmRvbnRDYWxsR2V0U2V0PyhVPXgoVixCKSkmJlUudmFsdWU6VltCXSwhUihrP0I6SSsoRT8iLiI6IiMiKStCLHouZm9yY2VkKSYmdm9pZCAwIT09WSl7aWYodHlwZW9mIFg9PXR5cGVvZiBZ''@;'; put 'put ''KWNvbnRpbnVlO08oWCxZKX0oei5zaGFtfHxZJiZZLnNoYW0pJiZtKFgsInNoYW0iLCEwKSxsZShWLEIsWCx6KX19fSwyMzUyMzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPWZ1bmN0aW9uKEllKXt0cnl7cmV0dXJuISFJZSgpfWNhdGNoe3JldHVybiEwfX19LDExMzA2OihhdCxJZSxG''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzNjU2MSkseD1GdW5jdGlvbi5wcm90b3R5cGUsbT14LmFwcGx5LGxlPXguY2FsbDthdC5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGFlP2xlLmJpbmQobSk6ZnVuY3Rpb24oKXtyZXR1cm4gbGUuYXBw''@;'; put 'put ''bHkobSxhcmd1bWVudHMpfSl9LDg1NDk6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDExNTEpLHg9Rig4MTQ1MCksbT1GKDM2NTYxKSxsZT1hZShhZS5iaW5kKTthdC5leHBvcnRzPWZ1bmN0aW9uKE0sTyl7cmV0dXJuIHgoTSksdm9pZCAwPT09Tz9NOm0/bGUoTSxPKTpmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiBNLmFwcGx5KE8sYXJndW1lbnRzKX19fSwzNjU2MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjM1MjMpO2F0LmV4cG9ydHM9IWFlKGZ1bmN0aW9uKCl7dmFyIHg9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgeHx8''@;'; put 'put ''eC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KX0sMzU2MjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzY1NjEpLHg9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7YXQuZXhwb3J0cz1hZT94LmJpbmQoeCk6ZnVuY3Rpb24oKXtyZXR1cm4geC5hcHBseSh4LGFyZ3VtZW50''@;'; put 'put ''cyl9fSwxMzg2OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2MjQpLHg9Rig0ODgxMSksbT1GdW5jdGlvbi5wcm90b3R5cGUsbGU9YWUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTT14KG0sIm5hbWUiKSxPPU0mJiJzb21ldGhpbmciPT09ZnVuY3Rpb24o''@;'; put 'put ''KXt9Lm5hbWUsUj1NJiYoIWFlfHxhZSYmbGUobSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7YXQuZXhwb3J0cz17RVhJU1RTOk0sUFJPUEVSOk8sQ09ORklHVVJBQkxFOlJ9fSw0NTkzODooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD1GKDgxNDUwKTthdC5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uKG0sbGUsTSl7dHJ5e3JldHVybiBhZSh4KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSxsZSlbTV0pKX1jYXRjaHt9fX0sMTE1MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoOTQ3MjMpLHg9Rig2NjEzKTthdC5leHBvcnRzPWZ1bmN0aW9uKG0p''@;'; put 'put ''e2lmKCJGdW5jdGlvbiI9PT1hZShtKSlyZXR1cm4geChtKX19LDY2MTM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDM2NTYxKSx4PUZ1bmN0aW9uLnByb3RvdHlwZSxtPXguY2FsbCxsZT1hZSYmeC5iaW5kLmJpbmQobSxtKTthdC5leHBvcnRzPWFlP2xlOmZ1bmN0aW9uKE0p''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbigpe3JldHVybiBtLmFwcGx5KE0sYXJndW1lbnRzKX19fSw0NjY5MzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzA3MDUpLHg9RigxMjAxNCk7YXQuZXhwb3J0cz1mdW5jdGlvbihsZSxNKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2Z1bmN0''@;'; put 'put ''aW9uKGxlKXtyZXR1cm4geChsZSk/bGU6dm9pZCAwfShhZVtsZV0pOmFlW2xlXSYmYWVbbGVdW01dfX0sMzg1ODY6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9RigyOTEwNiksbT1GKDEyMDE0KSxsZT1GKDk0NzIzKSxNPUYoOTIxKSxPPWFlKFtdLnB1c2gpO2F0''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oUil7aWYobShSKSlyZXR1cm4gUjtpZih4KFIpKXtmb3IodmFyIHo9Ui5sZW5ndGgsSz1bXSxJPTA7STx6O0krKyl7dmFyIGs9UltJXTsic3RyaW5nIj09dHlwZW9mIGs/TyhLLGspOigibnVtYmVyIj09dHlwZW9mIGt8fCJOdW1iZXIiPT1sZShrKXx8IlN0cmlu''@;'; put 'put ''ZyI9PWxlKGspKSYmTyhLLE0oaykpfXZhciBFPUsubGVuZ3RoLGo9ITA7cmV0dXJuIGZ1bmN0aW9uKFYsQil7aWYoailyZXR1cm4gaj0hMSxCO2lmKHgodGhpcykpcmV0dXJuIEI7Zm9yKHZhciBZPTA7WTxFO1krKylpZihLW1ldPT09VilyZXR1cm4gQn19fX0sMjA5NDg6KGF0LEllLEYpPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBhZT1GKDgxNDUwKSx4PUYoNjM3NCk7YXQuZXhwb3J0cz1mdW5jdGlvbihtLGxlKXt2YXIgTT1tW2xlXTtyZXR1cm4geChNKT92b2lkIDA6YWUoTSl9fSw3MDcwNTpmdW5jdGlvbihhdCl7InVzZSBzdHJpY3QiO3ZhciBJZT1mdW5jdGlvbihGKXtyZXR1cm4gRiYm''@;'; put 'put ''Ri5NYXRoPT1NYXRoJiZGfTthdC5leHBvcnRzPUllKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fEllKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxJZSgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxJZSgib2JqZWN0Ij09dHlwZW9mIGds''@;'; put 'put ''b2JhbCYmZ2xvYmFsKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8dGhpc3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sNDg4MTE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9Rig2ODA3MSksbT1hZSh7fS5oYXNPd25Qcm9wZXJ0eSk7YXQuZXhwb3J0''@;'; put 'put ''cz1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihNLE8pe3JldHVybiBtKHgoTSksTyl9fSwxOTkwOTphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPXt9fSw1OTQwNjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDY2OTMpO2F0LmV4cG9ydHM9YWUoImRvY3VtZW50IiwiZG9j''@;'; put 'put ''dW1lbnRFbGVtZW50Iil9LDk0Njc1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTYyNCkseD1GKDIzNTIzKSxtPUYoNDYzMTMpO2F0LmV4cG9ydHM9IWFlJiYheChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkobSgiZGl2IiksImEiLHtnZXQ6''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDU2NjA3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PUYoMjM1MjMpLG09Rig5NDcyMyksbGU9T2JqZWN0LE09YWUoIiIuc3BsaXQpO2F0LmV4cG9ydHM9eChmdW5jdGlvbigpe3JldHVybiFsZSgieiIpLnByb3Bl''@;'; put 'put ''cnR5SXNFbnVtZXJhYmxlKDApfSk/ZnVuY3Rpb24oTyl7cmV0dXJuIlN0cmluZyI9PW0oTyk/TShPLCIiKTpsZShPKX06bGV9LDUxODQ5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMjAxNCkseD1GKDEzODQ5KSxtPUYoMTk1ODcpO2F0LmV4cG9ydHM9ZnVuY3Rpb24obGUs''@;'; put 'put ''TSxPKXt2YXIgUix6O3JldHVybiBtJiZhZShSPU0uY29uc3RydWN0b3IpJiZSIT09TyYmeCh6PVIucHJvdG90eXBlKSYmeiE9PU8ucHJvdG90eXBlJiZtKGxlLHopLGxlfX0sNTczNzE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9RigxMjAxNCksbT1GKDgxMDY5''@;'; put 'put ''KSxsZT1hZShGdW5jdGlvbi50b1N0cmluZyk7eChtLmluc3BlY3RTb3VyY2UpfHwobS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKE0pe3JldHVybiBsZShNKX0pLGF0LmV4cG9ydHM9bS5pbnNwZWN0U291cmNlfSw0OTQyNzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTM4NDkp''@;'; put 'put ''LHg9RigxNjAxNyk7YXQuZXhwb3J0cz1mdW5jdGlvbihtLGxlKXthZShsZSkmJiJjYXVzZSJpbiBsZSYmeChtLCJjYXVzZSIsbGUuY2F1c2UpfX0sNzI3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRSxqLFYsYWU9RigxNzU0MikseD1GKDcwNzA1KSxtPUYoMTM4NDkpLGxlPUYoMTYw''@;'; put 'put ''MTcpLE09Rig0ODgxMSksTz1GKDgxMDY5KSxSPUYoMjcyMzApLHo9RigxOTkwOSksSz0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLEk9eC5UeXBlRXJyb3I7aWYoYWV8fE8uc3RhdGUpe3ZhciBYPU8uc3RhdGV8fChPLnN0YXRlPW5ldygwLHguV2Vha01hcCkpO1guZ2V0PVguZ2V0LFgu''@;'; put 'put ''aGFzPVguaGFzLFguc2V0PVguc2V0LEU9ZnVuY3Rpb24ocSxlZSl7aWYoWC5oYXMocSkpdGhyb3cgSShLKTtyZXR1cm4gZWUuZmFjYWRlPXEsWC5zZXQocSxlZSksZWV9LGo9ZnVuY3Rpb24ocSl7cmV0dXJuIFguZ2V0KHEpfHx7fX0sVj1mdW5jdGlvbihxKXtyZXR1cm4gWC5oYXMocSl9fWVs''@;'; put 'put ''c2V7dmFyIFU9Uigic3RhdGUiKTt6W1VdPSEwLEU9ZnVuY3Rpb24ocSxlZSl7aWYoTShxLFUpKXRocm93IEkoSyk7cmV0dXJuIGVlLmZhY2FkZT1xLGxlKHEsVSxlZSksZWV9LGo9ZnVuY3Rpb24ocSl7cmV0dXJuIE0ocSxVKT9xW1VdOnt9fSxWPWZ1bmN0aW9uKHEpe3JldHVybiBNKHEsVSl9''@;'; put 'put ''fWF0LmV4cG9ydHM9e3NldDpFLGdldDpqLGhhczpWLGVuZm9yY2U6ZnVuY3Rpb24ocSl7cmV0dXJuIFYocSk/aihxKTpFKHEse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24ocSl7cmV0dXJuIGZ1bmN0aW9uKGVlKXt2YXIgdGU7aWYoIW0oZWUpfHwodGU9aihlZSkpLnR5cGUhPT1xKXRocm93IEko''@;'; put 'put ''IkluY29tcGF0aWJsZSByZWNlaXZlciwgIitxKyIgcmVxdWlyZWQiKTtyZXR1cm4gdGV9fX19LDI5MTA2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig5NDcyMyk7YXQuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihtKXtyZXR1cm4iQXJyYXkiPT1hZShtKX19LDEy''@;'; put 'put ''MDE0OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigzMTI3MCkseD1hZS5hbGw7YXQuZXhwb3J0cz1hZS5JU19IVE1MRERBP2Z1bmN0aW9uKG0pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBtfHxtPT09eH06ZnVuY3Rpb24obSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG19''@;'; put 'put ''fSw2NzUwNzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjM1MjMpLHg9RigxMjAxNCksbT0vI3xcLnByb3RvdHlwZVwuLyxsZT1mdW5jdGlvbihLLEkpe3ZhciBrPU9bTShLKV07cmV0dXJuIGs9PXp8fGshPVImJih4KEkpP2FlKEkpOiEhSSl9LE09bGUubm9ybWFsaXplPWZ1''@;'; put 'put ''bmN0aW9uKEspe3JldHVybiBTdHJpbmcoSykucmVwbGFjZShtLCIuIikudG9Mb3dlckNhc2UoKX0sTz1sZS5kYXRhPXt9LFI9bGUuTkFUSVZFPSJOIix6PWxlLlBPTFlGSUxMPSJQIjthdC5leHBvcnRzPWxlfSw2Mzc0OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ZnVuY3Rpb24oSWUp''@;'; put 'put ''e3JldHVybiBudWxsPT1JZX19LDEzODQ5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigxMjAxNCkseD1GKDMxMjcwKSxtPXguYWxsO2F0LmV4cG9ydHM9eC5JU19IVE1MRERBP2Z1bmN0aW9uKGxlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGxlP251bGwhPT1sZTphZShsZSl8''@;'; put 'put ''fGxlPT09bX06ZnVuY3Rpb24obGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgbGU/bnVsbCE9PWxlOmFlKGxlKX19LDEwMDE3OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9ITF9LDY5NzU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NjkzKSx4PUYoMTIwMTQpLG09''@;'; put 'put ''RigzNzQ3NCksbGU9RigyMzk2MSksTT1PYmplY3Q7YXQuZXhwb3J0cz1sZT9mdW5jdGlvbihPKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIE99OmZ1bmN0aW9uKE8pe3ZhciBSPWFlKCJTeW1ib2wiKTtyZXR1cm4geChSKSYmbShSLnByb3RvdHlwZSxNKE8pKX19LDU0NDUwOihhdCxJZSxGKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NTMxNik7YXQuZXhwb3J0cz1mdW5jdGlvbih4KXtyZXR1cm4gYWUoeC5sZW5ndGgpfX0sMzQ0Njg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2MTMpLHg9RigyMzUyMyksbT1GKDEyMDE0KSxsZT1GKDQ4ODExKSxNPUYoODU2MjQp''@;'; put 'put ''LE89RigxMzg2OSkuQ09ORklHVVJBQkxFLFI9Rig1NzM3MSksej1GKDcyNyksSz16LmVuZm9yY2UsST16LmdldCxrPVN0cmluZyxFPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxqPWFlKCIiLnNsaWNlKSxWPWFlKCIiLnJlcGxhY2UpLEI9YWUoW10uam9pbiksWT1NJiYheChmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiA4IT09RShmdW5jdGlvbigpe30sImxlbmd0aCIse3ZhbHVlOjh9KS5sZW5ndGh9KSxYPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKSxVPWF0LmV4cG9ydHM9ZnVuY3Rpb24ocSxlZSx0ZSl7IlN5bWJvbCgiPT09aihrKGVlKSwwLDcpJiYoZWU9IlsiK1YoayhlZSksL15TeW1i''@;'; put 'put ''b2xcKChbXildKilcKS8sIiQxIikrIl0iKSx0ZSYmdGUuZ2V0dGVyJiYoZWU9ImdldCAiK2VlKSx0ZSYmdGUuc2V0dGVyJiYoZWU9InNldCAiK2VlKSwoIWxlKHEsIm5hbWUiKXx8TyYmcS5uYW1lIT09ZWUpJiYoTT9FKHEsIm5hbWUiLHt2YWx1ZTplZSxjb25maWd1cmFibGU6ITB9KTpxLm5h''@;'; put 'put ''bWU9ZWUpLFkmJnRlJiZsZSh0ZSwiYXJpdHkiKSYmcS5sZW5ndGghPT10ZS5hcml0eSYmRShxLCJsZW5ndGgiLHt2YWx1ZTp0ZS5hcml0eX0pO3RyeXt0ZSYmbGUodGUsImNvbnN0cnVjdG9yIikmJnRlLmNvbnN0cnVjdG9yP00mJkUocSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KTpxLnBy''@;'; put 'put ''b3RvdHlwZSYmKHEucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2h7fXZhciBvZT1LKHEpO3JldHVybiBsZShvZSwic291cmNlIil8fChvZS5zb3VyY2U9QihYLCJzdHJpbmciPT10eXBlb2YgZWU/ZWU6IiIpKSxxfTtGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc9VShmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBtKHRoaXMpJiZJKHRoaXMpLnNvdXJjZXx8Uih0aGlzKX0sInRvU3RyaW5nIil9LDg0NzQ0OmF0PT57InVzZSBzdHJpY3QiO3ZhciBJZT1NYXRoLmNlaWwsRj1NYXRoLmZsb29yO2F0LmV4cG9ydHM9TWF0aC50cnVuY3x8ZnVuY3Rpb24oeCl7dmFyIG09K3g7cmV0dXJuKG0+MD9GOkllKSht''@;'; put 'put ''KX19LDgyMTQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDkyMSk7YXQuZXhwb3J0cz1mdW5jdGlvbih4LG0pe3JldHVybiB2b2lkIDA9PT14P2FyZ3VtZW50cy5sZW5ndGg8Mj8iIjptOmFlKHgpfX0sNzQ0MTA6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBYLGFlPUYo''@;'; put 'put ''NTg2NDcpLHg9Rig3NzMyOCksbT1GKDQ3ODMzKSxsZT1GKDE5OTA5KSxNPUYoNTk0MDYpLE89Rig0NjMxMyksUj1GKDI3MjMwKSxJPSJwcm90b3R5cGUiLGs9InNjcmlwdCIsRT1SKCJJRV9QUk9UTyIpLGo9ZnVuY3Rpb24oKXt9LFY9ZnVuY3Rpb24ocSl7cmV0dXJuIjwiK2srIj4iK3ErIjwv''@;'; put 'put ''IitrKyI+In0sQj1mdW5jdGlvbihxKXtxLndyaXRlKFYoIiIpKSxxLmNsb3NlKCk7dmFyIGVlPXEucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gcT1udWxsLGVlfSxVPWZ1bmN0aW9uKCl7dHJ5e1g9bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2h7fVU9dHlwZW9mIGRvY3Vt''@;'; put 'put ''ZW50PCJ1Ij9kb2N1bWVudC5kb21haW4mJlg/QihYKTpmdW5jdGlvbigpe3ZhciB0ZSxxPU8oImlmcmFtZSIpLGVlPSJqYXZhIitrKyI6IjtyZXR1cm4gcS5zdHlsZS5kaXNwbGF5PSJub25lIixNLmFwcGVuZENoaWxkKHEpLHEuc3JjPVN0cmluZyhlZSksKHRlPXEuY29udGVudFdpbmRvdy5k''@;'; put 'put ''b2N1bWVudCkub3BlbigpLHRlLndyaXRlKFYoImRvY3VtZW50LkY9T2JqZWN0IikpLHRlLmNsb3NlKCksdGUuRn0oKTpCKFgpO2Zvcih2YXIgcT1tLmxlbmd0aDtxLS07KWRlbGV0ZSBVW0ldW21bcV1dO3JldHVybiBVKCl9O2xlW0VdPSEwLGF0LmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVu''@;'; put 'put ''Y3Rpb24oZWUsdGUpe3ZhciBvZTtyZXR1cm4gbnVsbCE9PWVlPyhqW0ldPWFlKGVlKSxvZT1uZXcgaixqW0ldPW51bGwsb2VbRV09ZWUpOm9lPVUoKSx2b2lkIDA9PT10ZT9vZTp4LmYob2UsdGUpfX0sNzczMjg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjI0KSx4PUYo''@;'; put 'put ''MjAxMTgpLG09Rig1MTE4MyksbGU9Rig1ODY0NyksTT1GKDUwMzI3KSxPPUYoMTQ1NDUpO0llLmY9YWUmJiF4P09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHosSyl7bGUoeik7Zm9yKHZhciBWLEk9TShLKSxrPU8oSyksRT1rLmxlbmd0aCxqPTA7RT5qOyltLmYoeixWPWtbaisr''@;'; put 'put ''XSxJW1ZdKTtyZXR1cm4gen19LDUxMTgzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTYyNCkseD1GKDk0Njc1KSxtPUYoMjAxMTgpLGxlPUYoNTg2NDcpLE09Rig4NDA5NCksTz1UeXBlRXJyb3IsUj1PYmplY3QuZGVmaW5lUHJvcGVydHksej1PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9yLEs9ImVudW1lcmFibGUiLEk9ImNvbmZpZ3VyYWJsZSIsaz0id3JpdGFibGUiO0llLmY9YWU/bT9mdW5jdGlvbihqLFYsQil7aWYobGUoaiksVj1NKFYpLGxlKEIpLCJmdW5jdGlvbiI9PXR5cGVvZiBqJiYicHJvdG90eXBlIj09PVYmJiJ2YWx1ZSJpbiBCJiZrIGlu''@;'; put 'put ''IEImJiFCW2tdKXt2YXIgWT16KGosVik7WSYmWVtrXSYmKGpbVl09Qi52YWx1ZSxCPXtjb25maWd1cmFibGU6SSBpbiBCP0JbSV06WVtJXSxlbnVtZXJhYmxlOksgaW4gQj9CW0tdOllbS10sd3JpdGFibGU6ITF9KX1yZXR1cm4gUihqLFYsQil9OlI6ZnVuY3Rpb24oaixWLEIpe2lmKGxlKGop''@;'; put 'put ''LFY9TShWKSxsZShCKSx4KXRyeXtyZXR1cm4gUihqLFYsQil9Y2F0Y2h7fWlmKCJnZXQiaW4gQnx8InNldCJpbiBCKXRocm93IE8oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIEImJihqW1ZdPUIudmFsdWUpLGp9fSw0Nzk4NzooYXQsSWUsRik9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIGFlPUYoODU2MjQpLHg9RigzNTYyKSxtPUYoNDY5MDEpLGxlPUYoNzM5MjApLE09Rig1MDMyNyksTz1GKDg0MDk0KSxSPUYoNDg4MTEpLHo9Rig5NDY3NSksSz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO0llLmY9YWU/SzpmdW5jdGlvbihrLEUpe2lmKGs9TShr''@;'; put 'put ''KSxFPU8oRSkseil0cnl7cmV0dXJuIEsoayxFKX1jYXRjaHt9aWYoUihrLEUpKXJldHVybiBsZSgheChtLmYsayxFKSxrW0VdKX19LDc1NDMxOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyNDk2NyksbT1GKDQ3ODMzKS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO0ll''@;'; put 'put ''LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKE0pe3JldHVybiBhZShNLG0pfX0sNTUzNDooYXQsSWUpPT57InVzZSBzdHJpY3QiO0llLmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sMzc0NzQ6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDY2''@;'; put 'put ''MTMpO2F0LmV4cG9ydHM9YWUoe30uaXNQcm90b3R5cGVPZil9LDI0OTY3OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig2NjEzKSx4PUYoNDg4MTEpLG09Rig1MDMyNyksbGU9RigzNjMwNSkuaW5kZXhPZixNPUYoMTk5MDkpLE89YWUoW10ucHVzaCk7YXQuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihSLHope3ZhciBFLEs9bShSKSxJPTAsaz1bXTtmb3IoRSBpbiBLKSF4KE0sRSkmJngoSyxFKSYmTyhrLEUpO2Zvcig7ei5sZW5ndGg+STspeChLLEU9eltJKytdKSYmKH5sZShrLEUpfHxPKGssRSkpO3JldHVybiBrfX0sMTQ1NDU6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBh''@;'; put 'put ''ZT1GKDI0OTY3KSx4PUYoNDc4MzMpO2F0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGxlKXtyZXR1cm4gYWUobGUseCl9fSw0NjkwMTooYXQsSWUpPT57InVzZSBzdHJpY3QiO3ZhciBGPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGFlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IseD1hZSYmIUYuY2FsbCh7MToyfSwxKTtJZS5mPXg/ZnVuY3Rpb24obGUpe3ZhciBNPWFlKHRoaXMsbGUpO3JldHVybiEhTSYmTS5lbnVtZXJhYmxlfTpGfSwxOTU4NzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNDU5MzgpLHg9Rig1ODY0NyksbT1GKDcwMDgpO2F0''@;'; put 'put ''LmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIE8sbGU9ITEsTT17fTt0cnl7KE89YWUoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIiwic2V0IikpKE0sW10pLGxlPU0gaW5zdGFuY2VvZiBBcnJheX1jYXRjaHt9cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKHosSyl7cmV0dXJuIHgoeiksbShLKSxsZT9PKHosSyk6ei5fX3Byb3RvX189Syx6fX0oKTp2b2lkIDApfSw2MzQxNTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMzU2MikseD1GKDEyMDE0KSxtPUYoMTM4NDkpLGxlPVR5cGVFcnJvcjthdC5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKE0sTyl7dmFyIFIsejtpZigic3RyaW5nIj09PU8mJngoUj1NLnRvU3RyaW5nKSYmIW0oej1hZShSLE0pKXx8eChSPU0udmFsdWVPZikmJiFtKHo9YWUoUixNKSl8fCJzdHJpbmciIT09TyYmeChSPU0udG9TdHJpbmcpJiYhbSh6PWFlKFIsTSkpKXJldHVybiB6O3Rocm93IGxlKCJD''@;'; put 'put ''YW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDIxMTk5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig0NjY5MykseD1GKDY2MTMpLG09Rig3NTQzMSksbGU9Rig1NTM0KSxNPUYoNTg2NDcpLE89eChbXS5jb25jYXQpO2F0LmV4cG9ydHM9YWUoIlJl''@;'; put 'put ''ZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHope3ZhciBLPW0uZihNKHopKSxJPWxlLmY7cmV0dXJuIEk/TyhLLEkoeikpOkt9fSw5MjQwMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNTExODMpLmY7YXQuZXhwb3J0cz1mdW5jdGlvbih4LG0sbGUpe2xlIGluIHh8fGFl''@;'; put 'put ''KHgsbGUse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbVtsZV19LHNldDpmdW5jdGlvbihNKXttW2xlXT1NfX0pfX0sMjQ1NzI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDYzNzQpLHg9VHlwZUVycm9yO2F0LmV4cG9ydHM9ZnVuY3Rpb24obSl7aWYo''@;'; put 'put ''YWUobSkpdGhyb3cgeCgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIittKTtyZXR1cm4gbX19LDk1ODk1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxhZT1GKDcwNzA1KSx4PUYoMTEzMDYpLG09RigxMjAxNCksbGU9Rig4MzQ2MCksTT1GKDc3ODM5KSxPPUYoNDA5MzApLFI9Rig3OTU0''@;'; put 'put ''NSksej1hZS5GdW5jdGlvbixLPS9NU0lFIC5cLi8udGVzdChNKXx8bGUmJigoST1hZS5CdW4udmVyc2lvbi5zcGxpdCgiLiIpKS5sZW5ndGg8M3x8MD09SVswXSYmKElbMV08M3x8Mz09SVsxXSYmMD09SVsyXSkpO2F0LmV4cG9ydHM9ZnVuY3Rpb24oSSxrKXt2YXIgRT1rPzI6MTtyZXR1cm4g''@;'; put 'put ''Sz9mdW5jdGlvbihqLFYpe3ZhciBCPVIoYXJndW1lbnRzLmxlbmd0aCwxKT5FLFk9bShqKT9qOnooaiksWD1CP08oYXJndW1lbnRzLEUpOltdLFU9Qj9mdW5jdGlvbigpe3goWSx0aGlzLFgpfTpZO3JldHVybiBrP0koVSxWKTpJKFUpfTpJfX0sMjcyMzA6KGF0LEllLEYpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBhZT1GKDY4ODM1KSx4PUYoNTI4MTApLG09YWUoImtleXMiKTthdC5leHBvcnRzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gbVtsZV18fChtW2xlXT14KGxlKSl9fSw4MTA2OTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzA3MDUpLHg9Rig3MzQ3MCksbT0iX19jb3Jl''@;'; put 'put ''LWpzX3NoYXJlZF9fIixsZT1hZVttXXx8eChtLHt9KTthdC5leHBvcnRzPWxlfSw2ODgzNTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMTAwMTcpLHg9Rig4MTA2OSk7KGF0LmV4cG9ydHM9ZnVuY3Rpb24obSxsZSl7cmV0dXJuIHhbbV18fCh4W21dPXZvaWQgMCE9PWxlP2xl''@;'; put 'put ''Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246IjMuMzIuMCIsbW9kZTphZT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2Nv''@;'; put 'put ''cmUtanMvYmxvYi92My4zMi4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSl9LDI5MzM5OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9RigyOTM4NSkseD1GKDIzNTIzKSxsZT1GKDcwNzA1KS5TdHJpbmc7YXQuZXhwb3J0cz0h''@;'; put 'put ''IU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiF4KGZ1bmN0aW9uKCl7dmFyIE09U3ltYm9sKCk7cmV0dXJuIWxlKE0pfHwhKE9iamVjdChNKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZhZSYmYWU8NDF9KX0sNTUyNjE6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBzZSxoZSx1ZSxjZSxhZT1GKDcwNzA1KSx4PUYoMTEzMDYpLG09Rig4NTQ5KSxsZT1GKDEyMDE0KSxNPUYoNDg4MTEpLE89RigyMzUyMyksUj1GKDU5NDA2KSx6PUYoNDA5MzApLEs9Rig0NjMxMyksST1GKDc5NTQ1KSxrPUYoNzg1MjApLEU9Rig4NzI0NCksaj1hZS5zZXRJbW1lZGlhdGUs''@;'; put 'put ''Vj1hZS5jbGVhckltbWVkaWF0ZSxCPWFlLnByb2Nlc3MsWT1hZS5EaXNwYXRjaCxYPWFlLkZ1bmN0aW9uLFU9YWUuTWVzc2FnZUNoYW5uZWwscT1hZS5TdHJpbmcsZWU9MCx0ZT17fSxvZT0ib25yZWFkeXN0YXRlY2hhbmdlIjtPKGZ1bmN0aW9uKCl7c2U9YWUubG9jYXRpb259KTt2YXIgRz1m''@;'; put 'put ''dW5jdGlvbihOKXtpZihNKHRlLE4pKXt2YXIgZz10ZVtOXTtkZWxldGUgdGVbTl0sZygpfX0sYj1mdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oKXtHKE4pfX0sRD1mdW5jdGlvbihOKXtHKE4uZGF0YSl9LEg9ZnVuY3Rpb24oTil7YWUucG9zdE1lc3NhZ2UocShOKSxzZS5wcm90b2NvbCsi''@;'; put 'put ''Ly8iK3NlLmhvc3QpfTsoIWp8fCFWKSYmKGo9ZnVuY3Rpb24oZyl7SShhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBDPWxlKGcpP2c6WChnKSxTPXooYXJndW1lbnRzLDEpO3JldHVybiB0ZVsrK2VlXT1mdW5jdGlvbigpe3goQyx2b2lkIDAsUyl9LGhlKGVlKSxlZX0sVj1mdW5jdGlvbihnKXtk''@;'; put 'put ''ZWxldGUgdGVbZ119LEU/aGU9ZnVuY3Rpb24oTil7Qi5uZXh0VGljayhiKE4pKX06WSYmWS5ub3c/aGU9ZnVuY3Rpb24oTil7WS5ub3coYihOKSl9OlUmJiFrPyhjZT0odWU9bmV3IFUpLnBvcnQyLHVlLnBvcnQxLm9ubWVzc2FnZT1ELGhlPW0oY2UucG9zdE1lc3NhZ2UsY2UpKTphZS5hZGRF''@;'; put 'put ''dmVudExpc3RlbmVyJiZsZShhZS5wb3N0TWVzc2FnZSkmJiFhZS5pbXBvcnRTY3JpcHRzJiZzZSYmImZpbGU6IiE9PXNlLnByb3RvY29sJiYhTyhIKT8oaGU9SCxhZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixELCExKSk6aGU9b2UgaW4gSygic2NyaXB0Iik/ZnVuY3Rpb24oTil7Ui5h''@;'; put 'put ''cHBlbmRDaGlsZChLKCJzY3JpcHQiKSlbb2VdPWZ1bmN0aW9uKCl7Ui5yZW1vdmVDaGlsZCh0aGlzKSxHKE4pfX06ZnVuY3Rpb24oTil7c2V0VGltZW91dChiKE4pLDApfSksYXQuZXhwb3J0cz17c2V0OmosY2xlYXI6Vn19LDc2MTYzOihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9''@;'; put 'put ''Rig0MDcwMikseD1NYXRoLm1heCxtPU1hdGgubWluO2F0LmV4cG9ydHM9ZnVuY3Rpb24obGUsTSl7dmFyIE89YWUobGUpO3JldHVybiBPPDA/eChPK00sMCk6bShPLE0pfX0sNTAzMjc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDU2NjA3KSx4PUYoMjQ1NzIpO2F0LmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24obSl7cmV0dXJuIGFlKHgobSkpfX0sNDA3MDI6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg0NzQ0KTthdC5leHBvcnRzPWZ1bmN0aW9uKHgpe3ZhciBtPSt4O3JldHVybiBtIT1tfHwwPT09bT8wOmFlKG0pfX0sNjUzMTY6KGF0LEllLEYpPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBhZT1GKDQwNzAyKSx4PU1hdGgubWluO2F0LmV4cG9ydHM9ZnVuY3Rpb24obSl7cmV0dXJuIG0+MD94KGFlKG0pLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSw2ODA3MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjQ1NzIpLHg9T2JqZWN0O2F0LmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24obSl7cmV0dXJuIHgoYWUobSkpfX0sNzU1Mzc6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDM1NjIpLHg9RigxMzg0OSksbT1GKDY5NzUpLGxlPUYoMjA5NDgpLE09Rig2MzQxNSksTz1GKDI1NDYpLFI9VHlwZUVycm9yLHo9TygidG9QcmltaXRpdmUiKTthdC5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKEssSSl7aWYoIXgoSyl8fG0oSykpcmV0dXJuIEs7dmFyIEUsaz1sZShLLHopO2lmKGspe2lmKHZvaWQgMD09PUkmJihJPSJkZWZhdWx0IiksRT1hZShrLEssSSksIXgoRSl8fG0oRSkpcmV0dXJuIEU7dGhyb3cgUigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJp''@;'; put 'put ''bWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PUkmJihJPSJudW1iZXIiKSxNKEssSSl9fSw4NDA5NDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzU1MzcpLHg9Rig2OTc1KTthdC5leHBvcnRzPWZ1bmN0aW9uKG0pe3ZhciBsZT1hZShtLCJzdHJpbmciKTtyZXR1cm4g''@;'; put 'put ''eChsZSk/bGU6bGUrIiJ9fSwyNzQ5MDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIG09e307bVtGKDI1NDYpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsYXQuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcobSl9LDkyMTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzk1''@;'; put 'put ''MjApLHg9U3RyaW5nO2F0LmV4cG9ydHM9ZnVuY3Rpb24obSl7aWYoIlN5bWJvbCI9PT1hZShtKSl0aHJvdyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHgobSl9fSw5NDY3NjphdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSWU9U3Ry''@;'; put 'put ''aW5nO2F0LmV4cG9ydHM9ZnVuY3Rpb24oRil7dHJ5e3JldHVybiBJZShGKX1jYXRjaHtyZXR1cm4iT2JqZWN0In19fSw1MjgxMDooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNjYxMykseD0wLG09TWF0aC5yYW5kb20oKSxsZT1hZSgxLi50b1N0cmluZyk7YXQuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbihNKXtyZXR1cm4iU3ltYm9sKCIrKHZvaWQgMD09PU0/IiI6TSkrIilfIitsZSgrK3grbSwzNil9fSwyMzk2MTooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoMjkzMzkpO2F0LmV4cG9ydHM9YWUmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wu''@;'; put 'put ''aXRlcmF0b3J9LDIwMTE4OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTYyNCkseD1GKDIzNTIzKTthdC5leHBvcnRzPWFlJiZ4KGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3''@;'; put 'put ''cml0YWJsZTohMX0pLnByb3RvdHlwZX0pfSw3OTU0NTphdD0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSWU9VHlwZUVycm9yO2F0LmV4cG9ydHM9ZnVuY3Rpb24oRixhZSl7aWYoRjxhZSl0aHJvdyBJZSgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gRn19LDE3NTQyOihhdCxJZSxGKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgYWU9Rig3MDcwNSkseD1GKDEyMDE0KSxtPWFlLldlYWtNYXA7YXQuZXhwb3J0cz14KG0pJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKG0pKX0sMjU0NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoNzA3MDUpLHg9Rig2ODgzNSksbT1GKDQ4ODEx''@;'; put 'put ''KSxsZT1GKDUyODEwKSxNPUYoMjkzMzkpLE89RigyMzk2MSksUj1hZS5TeW1ib2wsej14KCJ3a3MiKSxLPU8/Ui5mb3J8fFI6UiYmUi53aXRob3V0U2V0dGVyfHxsZTthdC5leHBvcnRzPWZ1bmN0aW9uKEkpe3JldHVybiBtKHosSSl8fCh6W0ldPU0mJm0oUixJKT9SW0ldOksoIlN5bWJvbC4i''@;'; put 'put ''K0kpKSx6W0ldfX0sNjc2Nzg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDQ2NjkzKSx4PUYoNDg4MTEpLG09RigxNjAxNyksbGU9RigzNzQ3NCksTT1GKDE5NTg3KSxPPUYoNzc1NDgpLFI9Rig5MjQwMCksej1GKDUxODQ5KSxLPUYoODIxNCksST1GKDQ5NDI3KSxrPUYoODc4''@;'; put 'put ''NzcpLEU9Rig4NTYyNCksaj1GKDEwMDE3KTthdC5leHBvcnRzPWZ1bmN0aW9uKFYsQixZLFgpe3ZhciBVPSJzdGFja1RyYWNlTGltaXQiLHE9WD8yOjEsZWU9Vi5zcGxpdCgiLiIpLHRlPWVlW2VlLmxlbmd0aC0xXSxvZT1hZS5hcHBseShudWxsLGVlKTtpZihvZSl7dmFyIHNlPW9lLnByb3Rv''@;'; put 'put ''dHlwZTtpZighaiYmeChzZSwiY2F1c2UiKSYmZGVsZXRlIHNlLmNhdXNlLCFZKXJldHVybiBvZTt2YXIgaGU9YWUoIkVycm9yIiksdWU9QihmdW5jdGlvbihjZSxHKXt2YXIgYj1LKFg/RzpjZSx2b2lkIDApLEQ9WD9uZXcgb2UoY2UpOm5ldyBvZTtyZXR1cm4gdm9pZCAwIT09YiYmbShELCJt''@;'; put 'put ''ZXNzYWdlIixiKSxrKEQsdWUsRC5zdGFjaywyKSx0aGlzJiZsZShzZSx0aGlzKSYmeihELHRoaXMsdWUpLGFyZ3VtZW50cy5sZW5ndGg+cSYmSShELGFyZ3VtZW50c1txXSksRH0pO2lmKHVlLnByb3RvdHlwZT1zZSwiRXJyb3IiIT09dGU/TT9NKHVlLGhlKTpPKHVlLGhlLHtuYW1lOiEwfSk6''@;'; put 'put ''RSYmVSBpbiBvZSYmKFIodWUsb2UsVSksUih1ZSxvZSwicHJlcGFyZVN0YWNrVHJhY2UiKSksTyh1ZSxvZSksIWopdHJ5e3NlLm5hbWUhPT10ZSYmbShzZSwibmFtZSIsdGUpLHNlLmNvbnN0cnVjdG9yPXVlfWNhdGNoe31yZXR1cm4gdWV9fX0sNTEwMTooYXQsSWUsRik9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIGFlPUYoODU2NDgpLHg9Rig2ODA3MSksbT1GKDU0NDUwKSxsZT1GKDQwNzAyKSxNPUYoNzQ5NjUpO2FlKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2F0OmZ1bmN0aW9uKFIpe3ZhciB6PXgodGhpcyksSz1tKHopLEk9bGUoUiksaz1JPj0wP0k6SytJO3JldHVybiBrPDB8fGs+''@;'; put 'put ''PUs/dm9pZCAwOnpba119fSksTSgiYXQiKX0sODcxMzooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2NDgpLHg9Rig2ODA3MSksbT1GKDU0NDUwKSxsZT1GKDg2NzU5KSxNPUYoMjMxMjQpO2FlKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpGKDIz''@;'; put 'put ''NTIzKShmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goSSl7cmV0dXJuIEkg''@;'; put 'put ''aW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbihrKXt2YXIgRT14KHRoaXMpLGo9bShFKSxWPWFyZ3VtZW50cy5sZW5ndGg7TShqK1YpO2Zvcih2YXIgQj0wO0I8VjtCKyspRVtqXT1hcmd1bWVudHNbQl0saisrO3JldHVybiBsZShFLGopLGp9fSl9LDE2MDAxOihhdCxJ''@;'; put 'put ''ZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTY0OCkseD1GKDY4MDcxKSxtPUYoNTQ0NTApLGxlPUYoODY3NTkpLE09Rig0NjI4KSxPPUYoMjMxMjQpO2FlKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5zaGlmdCgwKXx8IWZ1bmN0aW9uKCl7''@;'; put 'put ''dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihrKXt2YXIgRT14KHRoaXMpLGo9bShFKSxWPWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg7aWYoVil7TyhqK1YpO2Zvcih2YXIgQj1qO0ItLTspe3ZhciBZPUIrVjtCIGluIEU/RVtZXT1FW0JdOk0oRSxZKX1mb3IodmFyIFg9MDtYPFY7WCsrKUVbWF09YXJndW1lbnRzW1hdfXJldHVybiBsZShFLGorVil9fSl9LDU2NTg6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1G''@;'; put 'put ''KDg1NjQ4KSx4PUYoNzA3MDUpLG09RigxMTMwNiksbGU9Rig2NzY3OCksTT0iV2ViQXNzZW1ibHkiLE89eFtNXSxSPTchPT1FcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSx6PWZ1bmN0aW9uKEksayl7dmFyIEU9e307RVtJXT1sZShJLGssUiksYWUoe2dsb2JhbDohMCxjb25zdHJ1Y3Rvcjoh''@;'; put 'put ''MCxhcml0eToxLGZvcmNlZDpSfSxFKX0sSz1mdW5jdGlvbihJLGspe2lmKE8mJk9bSV0pe3ZhciBFPXt9O0VbSV09bGUoTSsiLiIrSSxrLFIpLGFlKHt0YXJnZXQ6TSxzdGF0OiEwLGNvbnN0cnVjdG9yOiEwLGFyaXR5OjEsZm9yY2VkOlJ9LEUpfX07eigiRXJyb3IiLGZ1bmN0aW9uKEkpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSx6KCJFdmFsRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSx6KCJSYW5nZUVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''RSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3VtZW50cyl9fSkseigiUmVmZXJlbmNlRXJyb3IiLGZ1bmN0aW9uKEkpe3JldHVybiBmdW5jdGlvbihFKXtyZXR1cm4gbShJLHRoaXMsYXJndW1lbnRzKX19KSx6KCJTeW50YXhFcnJvciIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVy''@;'; put 'put ''biBtKEksdGhpcyxhcmd1bWVudHMpfX0pLHooIlR5cGVFcnJvciIsZnVuY3Rpb24oSSl7cmV0dXJuIGZ1bmN0aW9uKEUpe3JldHVybiBtKEksdGhpcyxhcmd1bWVudHMpfX0pLHooIlVSSUVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyl9fSksSygiQ29tcGlsZUVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3VtZW50cyl9fSksSygiTGlua0Vycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3VtZW50cyl9fSksSygi''@;'; put 'put ''UnVudGltZUVycm9yIixmdW5jdGlvbihJKXtyZXR1cm4gZnVuY3Rpb24oRSl7cmV0dXJuIG0oSSx0aGlzLGFyZ3VtZW50cyl9fSl9LDEzMDA2OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgYWU9Rig4NTY0OCkseD1GKDQ2NjkzKSxtPUYoMTEzMDYpLGxlPUYoMzU2MiksTT1GKDY2MTMp''@;'; put 'put ''LE89RigyMzUyMyksUj1GKDEyMDE0KSx6PUYoNjk3NSksSz1GKDQwOTMwKSxJPUYoMzg1ODYpLGs9RigyOTMzOSksRT1TdHJpbmcsaj14KCJKU09OIiwic3RyaW5naWZ5IiksVj1NKC8uLy5leGVjKSxCPU0oIiIuY2hhckF0KSxZPU0oIiIuY2hhckNvZGVBdCksWD1NKCIiLnJlcGxhY2UpLFU9''@;'; put 'put ''TSgxLi50b1N0cmluZykscT0vW1x1RDgwMC1cdURGRkZdL2csZWU9L15bXHVEODAwLVx1REJGRl0kLyx0ZT0vXltcdURDMDAtXHVERkZGXSQvLG9lPSFrfHxPKGZ1bmN0aW9uKCl7dmFyIGNlPXgoIlN5bWJvbCIpKCk7cmV0dXJuIltudWxsXSIhPWooW2NlXSl8fCJ7fSIhPWooe2E6Y2V9KXx8''@;'; put 'put ''Int9IiE9aihPYmplY3QoY2UpKX0pLHNlPU8oZnVuY3Rpb24oKXtyZXR1cm4nIlxcdWRmMDZcXHVkODM0IichPT1qKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1qKCJcdWRlYWQiKX0pLGhlPWZ1bmN0aW9uKGNlLEcpe3ZhciBiPUsoYXJndW1lbnRzKSxEPUkoRyk7aWYoUihEKXx8''@;'; put 'put ''dm9pZCAwIT09Y2UmJiF6KGNlKSlyZXR1cm4gYlsxXT1mdW5jdGlvbihILE4pe2lmKFIoRCkmJihOPWxlKEQsdGhpcyxFKEgpLE4pKSwheihOKSlyZXR1cm4gTn0sbShqLG51bGwsYil9LHVlPWZ1bmN0aW9uKGNlLEcsYil7dmFyIEQ9QihiLEctMSksSD1CKGIsRysxKTtyZXR1cm4gVihlZSxj''@;'; put 'put ''ZSkmJiFWKHRlLEgpfHxWKHRlLGNlKSYmIVYoZWUsRCk/IlxcdSIrVShZKGNlLDApLDE2KTpjZX07aiYmYWUoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpvZXx8c2V9LHtzdHJpbmdpZnk6ZnVuY3Rpb24oRyxiLEQpe3ZhciBIPUsoYXJndW1lbnRzKSxOPW0ob2U/aGU6''@;'; put 'put ''aixudWxsLEgpO3JldHVybiBzZSYmInN0cmluZyI9PXR5cGVvZiBOP1goTixxLHVlKTpOfX0pfSwyMjQ5NjooYXQsSWUsRik9PnsidXNlIHN0cmljdCI7dmFyIGFlPUYoODU2NDgpLHg9Rig3MDcwNSksbT1GKDU1MjYxKS5jbGVhcjthZSh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZToh''@;'; put 'put ''MCxmb3JjZWQ6eC5jbGVhckltbWVkaWF0ZSE9PW19LHtjbGVhckltbWVkaWF0ZTptfSl9LDkxOTQ1OihhdCxJZSxGKT0+eyJ1c2Ugc3RyaWN0IjtGKDIyNDk2KSxGKDM0NDQzKX0sMzQ0NDM6KGF0LEllLEYpPT57InVzZSBzdHJpY3QiO3ZhciBhZT1GKDg1NjQ4KSx4PUYoNzA3MDUpLG09Rig1''@;'; put 'put ''NTI2MSkuc2V0LGxlPUYoOTU4OTUpLE09eC5zZXRJbW1lZGlhdGU/bGUobSwhMSk6bTthZSh7Z2xvYmFsOiEwLGJpbmQ6ITAsZW51bWVyYWJsZTohMCxmb3JjZWQ6eC5zZXRJbW1lZGlhdGUhPT1NfSx7c2V0SW1tZWRpYXRlOk19KX0sNDY3MDA6KGF0LEllLEYpPT57dmFyIGFlPXsiLi9hZiI6''@;'; put 'put ''ODMyNzQsIi4vYWYuanMiOjgzMjc0LCIuL2FyIjoyMjA5NywiLi9hci1keiI6NjE4NjcsIi4vYXItZHouanMiOjYxODY3LCIuL2FyLWt3IjoxNzA3OCwiLi9hci1rdy5qcyI6MTcwNzgsIi4vYXItbHkiOjc3Nzc2LCIuL2FyLWx5LmpzIjo3Nzc3NiwiLi9hci1tYSI6NTY3ODksIi4vYXItbWEu''@;'; put 'put ''anMiOjU2Nzg5LCIuL2FyLXNhIjo2ODk3LCIuL2FyLXNhLmpzIjo2ODk3LCIuL2FyLXRuIjo3MTU4NSwiLi9hci10bi5qcyI6NzE1ODUsIi4vYXIuanMiOjIyMDk3LCIuL2F6IjoxNTYxMSwiLi9hei5qcyI6MTU2MTEsIi4vYmUiOjYyNDU5LCIuL2JlLmpzIjo2MjQ1OSwiLi9iZyI6OTE4MjUs''@;'; put 'put ''Ii4vYmcuanMiOjkxODI1LCIuL2JtIjo3NTkxOCwiLi9ibS5qcyI6NzU5MTgsIi4vYm4iOjM0MDY1LCIuL2JuLWJkIjo0OTY4MywiLi9ibi1iZC5qcyI6NDk2ODMsIi4vYm4uanMiOjM0MDY1LCIuL2JvIjoxMTAzNCwiLi9iby5qcyI6MTEwMzQsIi4vYnIiOjI3NjcxLCIuL2JyLmpzIjoyNzY3''@;'; put 'put ''MSwiLi9icyI6MzgxNTMsIi4vYnMuanMiOjM4MTUzLCIuL2NhIjo1NDI4NywiLi9jYS5qcyI6NTQyODcsIi4vY3MiOjcyNjE2LCIuL2NzLmpzIjo3MjYxNiwiLi9jdiI6MjcwNDksIi4vY3YuanMiOjI3MDQ5LCIuL2N5Ijo5OTE3MiwiLi9jeS5qcyI6OTkxNzIsIi4vZGEiOjIwNjA1LCIuL2Rh''@;'; put 'put ''LmpzIjoyMDYwNSwiLi9kZSI6OTQwMTMsIi4vZGUtYXQiOjkzMzk1LCIuL2RlLWF0LmpzIjo5MzM5NSwiLi9kZS1jaCI6OTk4MzUsIi4vZGUtY2guanMiOjk5ODM1LCIuL2RlLmpzIjo5NDAxMywiLi9kdiI6MTQ1NzAsIi4vZHYuanMiOjE0NTcwLCIuL2VsIjozMTg1OSwiLi9lbC5qcyI6MzE4''@;'; put 'put ''NTksIi4vZW4tYXUiOjU1Nzg1LCIuL2VuLWF1LmpzIjo1NTc4NSwiLi9lbi1jYSI6ODM3OTIsIi4vZW4tY2EuanMiOjgzNzkyLCIuL2VuLWdiIjo1NzY1MSwiLi9lbi1nYi5qcyI6NTc2NTEsIi4vZW4taWUiOjgxOTI5LCIuL2VuLWllLmpzIjo4MTkyOSwiLi9lbi1pbCI6MTk4MTgsIi4vZW4t''@;'; put 'put ''aWwuanMiOjE5ODE4LCIuL2VuLWluIjo2NjEyLCIuL2VuLWluLmpzIjo2NjEyLCIuL2VuLW56IjoyNDkwMCwiLi9lbi1uei5qcyI6MjQ5MDAsIi4vZW4tc2ciOjcyNzIxLCIuL2VuLXNnLmpzIjo3MjcyMSwiLi9lbyI6OTUxNTksIi4vZW8uanMiOjk1MTU5LCIuL2VzIjoyMTk1NCwiLi9lcy1k''@;'; put 'put ''byI6MTE3ODAsIi4vZXMtZG8uanMiOjExNzgwLCIuL2VzLW14IjoyMzQ2OCwiLi9lcy1teC5qcyI6MjM0NjgsIi4vZXMtdXMiOjQ0OTM4LCIuL2VzLXVzLmpzIjo0NDkzOCwiLi9lcy5qcyI6MjE5NTQsIi4vZXQiOjExNDUzLCIuL2V0LmpzIjoxMTQ1MywiLi9ldSI6NDQ2OTcsIi4vZXUuanMi''@;'; put 'put ''OjQ0Njk3LCIuL2ZhIjo1MjkwMCwiLi9mYS5qcyI6NTI5MDAsIi4vZmkiOjQ5Nzc1LCIuL2ZpLmpzIjo0OTc3NSwiLi9maWwiOjY0MjgyLCIuL2ZpbC5qcyI6NjQyODIsIi4vZm8iOjg0MjM2LCIuL2ZvLmpzIjo4NDIzNiwiLi9mciI6ODkzNjEsIi4vZnItY2EiOjkyODMwLCIuL2ZyLWNhLmpz''@;'; put 'put ''Ijo5MjgzMCwiLi9mci1jaCI6MjE0MTIsIi4vZnItY2guanMiOjIxNDEyLCIuL2ZyLmpzIjo4OTM2MSwiLi9meSI6NjY5ODQsIi4vZnkuanMiOjY2OTg0LCIuL2dhIjo5Mzk2MSwiLi9nYS5qcyI6OTM5NjEsIi4vZ2QiOjc4ODQ5LCIuL2dkLmpzIjo3ODg0OSwiLi9nbCI6MzQyNzMsIi4vZ2wu''@;'; put 'put ''anMiOjM0MjczLCIuL2dvbS1kZXZhIjo0MDYyMywiLi9nb20tZGV2YS5qcyI6NDA2MjMsIi4vZ29tLWxhdG4iOjYyNjk2LCIuL2dvbS1sYXRuLmpzIjo2MjY5NiwiLi9ndSI6NjY5MjgsIi4vZ3UuanMiOjY2OTI4LCIuL2hlIjoyNDgwNCwiLi9oZS5qcyI6MjQ4MDQsIi4vaGkiOjIzMDE1LCIu''@;'; put 'put ''L2hpLmpzIjoyMzAxNSwiLi9ociI6MTcxMzQsIi4vaHIuanMiOjE3MTM0LCIuL2h1Ijo1MDY3MCwiLi9odS5qcyI6NTA2NzAsIi4vaHktYW0iOjQ1MjMsIi4vaHktYW0uanMiOjQ1MjMsIi4vaWQiOjk5MjMzLCIuL2lkLmpzIjo5OTIzMywiLi9pcyI6OTQ2OTMsIi4vaXMuanMiOjk0NjkzLCIu''@;'; put 'put ''L2l0Ijo2MzkzNiwiLi9pdC1jaCI6NzgxMTgsIi4vaXQtY2guanMiOjc4MTE4LCIuL2l0LmpzIjo2MzkzNiwiLi9qYSI6ODY4NzEsIi4vamEuanMiOjg2ODcxLCIuL2p2Ijo2ODcxMCwiLi9qdi5qcyI6Njg3MTAsIi4va2EiOjE3MTI1LCIuL2thLmpzIjoxNzEyNSwiLi9rayI6ODI0NjEsIi4v''@;'; put 'put ''a2suanMiOjgyNDYxLCIuL2ttIjo3NzM5OSwiLi9rbS5qcyI6NzczOTksIi4va24iOjM4NzIwLCIuL2tuLmpzIjozODcyMCwiLi9rbyI6ODUzMDYsIi4va28uanMiOjg1MzA2LCIuL2t1Ijo4Mjk5NSwiLi9rdS5qcyI6ODI5OTUsIi4va3kiOjg3NzksIi4va3kuanMiOjg3NzksIi4vbGIiOjYy''@;'; put 'put ''MDU3LCIuL2xiLmpzIjo2MjA1NywiLi9sbyI6MTcxOTIsIi4vbG8uanMiOjE3MTkyLCIuL2x0IjoxNTQzMCwiLi9sdC5qcyI6MTU0MzAsIi4vbHYiOjUzMzYzLCIuL2x2LmpzIjo1MzM2MywiLi9tZSI6NzI5MzksIi4vbWUuanMiOjcyOTM5LCIuL21pIjozODIxMiwiLi9taS5qcyI6MzgyMTIs''@;'; put 'put ''Ii4vbWsiOjY5NzE4LCIuL21rLmpzIjo2OTcxOCwiLi9tbCI6NTA1NjEsIi4vbWwuanMiOjUwNTYxLCIuL21uIjo2ODkyOSwiLi9tbi5qcyI6Njg5MjksIi4vbXIiOjg0ODgwLCIuL21yLmpzIjo4NDg4MCwiLi9tcyI6NjMxOTMsIi4vbXMtbXkiOjQyMDc0LCIuL21zLW15LmpzIjo0MjA3NCwi''@;'; put 'put ''Li9tcy5qcyI6NjMxOTMsIi4vbXQiOjU0MDgyLCIuL210LmpzIjo1NDA4MiwiLi9teSI6ODIyNjEsIi4vbXkuanMiOjgyMjYxLCIuL25iIjoxNTI3MywiLi9uYi5qcyI6MTUyNzMsIi4vbmUiOjE5ODc0LCIuL25lLmpzIjoxOTg3NCwiLi9ubCI6NTE2NjcsIi4vbmwtYmUiOjgxNDg0LCIuL25s''@;'; put 'put ''LWJlLmpzIjo4MTQ4NCwiLi9ubC5qcyI6NTE2NjcsIi4vbm4iOjE3MjYyLCIuL25uLmpzIjoxNzI2MiwiLi9vYy1sbmMiOjE5Njc5LCIuL29jLWxuYy5qcyI6MTk2NzksIi4vcGEtaW4iOjk2ODMwLCIuL3BhLWluLmpzIjo5NjgzMCwiLi9wbCI6OTM2MTYsIi4vcGwuanMiOjkzNjE2LCIuL3B0''@;'; put 'put ''Ijo1NTEzOCwiLi9wdC1iciI6MzI3NTEsIi4vcHQtYnIuanMiOjMyNzUxLCIuL3B0LmpzIjo1NTEzOCwiLi9ybyI6MTc5NjgsIi4vcm8uanMiOjE3OTY4LCIuL3J1Ijo4MTgyOCwiLi9ydS5qcyI6ODE4MjgsIi4vc2QiOjYyMTg4LCIuL3NkLmpzIjo2MjE4OCwiLi9zZSI6NjU2MiwiLi9zZS5q''@;'; put 'put ''cyI6NjU2MiwiLi9zaSI6ODcxNzIsIi4vc2kuanMiOjg3MTcyLCIuL3NrIjo5OTk2NiwiLi9zay5qcyI6OTk5NjYsIi4vc2wiOjQyODcsIi4vc2wuanMiOjQyODcsIi4vc3EiOjE1MjkxLCIuL3NxLmpzIjoxNTI5MSwiLi9zciI6ODA0NTAsIi4vc3ItY3lybCI6Mzc2MDMsIi4vc3ItY3lybC5q''@;'; put 'put ''cyI6Mzc2MDMsIi4vc3IuanMiOjgwNDUwLCIuL3NzIjozMDM4MywiLi9zcy5qcyI6MzAzODMsIi4vc3YiOjM3MjIxLCIuL3N2LmpzIjozNzIyMSwiLi9zdyI6NTE3NDMsIi4vc3cuanMiOjUxNzQzLCIuL3RhIjo2MzUxLCIuL3RhLmpzIjo2MzUxLCIuL3RlIjo5ODExOCwiLi90ZS5qcyI6OTgx''@;'; put 'put ''MTgsIi4vdGV0IjoyNjI3OCwiLi90ZXQuanMiOjI2Mjc4LCIuL3RnIjozNjk4NywiLi90Zy5qcyI6MzY5ODcsIi4vdGgiOjM5MzI1LCIuL3RoLmpzIjozOTMyNSwiLi90ayI6NDM0ODUsIi4vdGsuanMiOjQzNDg1LCIuL3RsLXBoIjo2ODE0OCwiLi90bC1waC5qcyI6NjgxNDgsIi4vdGxoIjo1''@;'; put 'put ''OTYxNiwiLi90bGguanMiOjU5NjE2LCIuL3RyIjoyNDA0MCwiLi90ci5qcyI6MjQwNDAsIi4vdHpsIjo1OTQsIi4vdHpsLmpzIjo1OTQsIi4vdHptIjo4MDY3MywiLi90em0tbGF0biI6MjMyMjYsIi4vdHptLWxhdG4uanMiOjIzMjI2LCIuL3R6bS5qcyI6ODA2NzMsIi4vdWctY24iOjY5NTgw''@;'; put 'put ''LCIuL3VnLWNuLmpzIjo2OTU4MCwiLi91ayI6ODcyNzAsIi4vdWsuanMiOjg3MjcwLCIuL3VyIjoxMTY1NiwiLi91ci5qcyI6MTE2NTYsIi4vdXoiOjY4MzY0LCIuL3V6LWxhdG4iOjE4NzQ0LCIuL3V6LWxhdG4uanMiOjE4NzQ0LCIuL3V6LmpzIjo2ODM2NCwiLi92aSI6NzUwNDksIi4vdmku''@;'; put 'put ''anMiOjc1MDQ5LCIuL3gtcHNldWRvIjoxNTEwNiwiLi94LXBzZXVkby5qcyI6MTUxMDYsIi4veW8iOjYxOTksIi4veW8uanMiOjYxOTksIi4vemgtY24iOjI3MjgwLCIuL3poLWNuLmpzIjoyNzI4MCwiLi96aC1oayI6MzY4NjAsIi4vemgtaGsuanMiOjM2ODYwLCIuL3poLW1vIjo3ODM2NCwi''@;'; put 'put ''Li96aC1tby5qcyI6NzgzNjQsIi4vemgtdHciOjQ4MiwiLi96aC10dy5qcyI6NDgyfTtmdW5jdGlvbiB4KGxlKXt2YXIgTT1tKGxlKTtyZXR1cm4gRihNKX1mdW5jdGlvbiBtKGxlKXtpZighRi5vKGFlLGxlKSl7dmFyIE09bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbGUrIici''@;'; put 'put ''KTt0aHJvdyBNLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLE19cmV0dXJuIGFlW2xlXX14LmtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoYWUpfSx4LnJlc29sdmU9bSxhdC5leHBvcnRzPXgseC5pZD00NjcwMH0sNzg3NzM6KCk9Pnt9LDgwOTUwOigpPT57fSw0NjYwMTooKT0+''@;'; put 'put ''e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sODU1Njg6KCk9Pnt9LDE5NTI3OigpPT57fSw2OTMzMTooKT0+e30sNTY2MTk6KCk9Pnt9LDc3MTA4OigpPT57fSw1MjM2MTooKT0+e30sOTQ2MTY6KCk9Pnt9LDE3MTU2OmF0PT57ZnVuY3Rpb24gSWUoYWUseCxtLGxlLE0sTyxSKXt0cnl7dmFy''@;'; put 'put ''IHo9YWVbT10oUiksSz16LnZhbHVlfWNhdGNoKEkpe3JldHVybiB2b2lkIG0oSSl9ei5kb25lP3goSyk6UHJvbWlzZS5yZXNvbHZlKEspLnRoZW4obGUsTSl9YXQuZXhwb3J0cz1mdW5jdGlvbiBGKGFlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgeD10aGlzLG09YXJndW1lbnRzO3JldHVybiBu''@;'; put 'put ''ZXcgUHJvbWlzZShmdW5jdGlvbihsZSxNKXt2YXIgTz1hZS5hcHBseSh4LG0pO2Z1bmN0aW9uIFIoSyl7SWUoTyxsZSxNLFIseiwibmV4dCIsSyl9ZnVuY3Rpb24geihLKXtJZShPLGxlLE0sUix6LCJ0aHJvdyIsSyl9Uih2b2lkIDApfSl9fSxhdC5leHBvcnRzLl9fZXNNb2R1bGU9ITAsYXQu''@;'; put 'put ''ZXhwb3J0cy5kZWZhdWx0PWF0LmV4cG9ydHN9LDQ0OTQ2OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2Ii''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJB''@;'; put 'put ''RVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5Ijoy''@;'; put 'put ''NTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNC''@;'; put 'put ''QyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVh''@;'; put 'put ''bSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMt''@;'; put 'put ''MTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1j''@;'; put 'put ''ZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBo''@;'; put 'put ''ZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMi''@;'; put 'put ''LCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5''@;'; put 'put ''MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEy''@;'; put 'put ''LCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00i''@;'; put 'put ''LCJ0eXBlIjoiYXV0aCJ9fScpfSw3NTIwNzphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ3sic2hhMjI0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAw''@;'; put 'put ''NDFjIn0sIlJTQS1TSEEyMjQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjIn0sInNoYTI1NldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIz''@;'; put 'put ''MDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJSU0EtU0hBMjU2Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCJ9LCJzaGEzODRXaXRoUlNBRW5jcnlwdGlvbiI6eyJz''@;'; put 'put ''aWduIjoicnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAifSwiUlNBLVNIQTM4NCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0''@;'; put 'put ''MzAifSwic2hhNTEyV2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEE1MTIiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IjMw''@;'; put 'put ''NTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwIn0sIlJTQS1TSEExIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0In0sImVjZHNhLXdpdGgtU0hBMSI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMSIs''@;'; put 'put ''ImlkIjoiIn0sInNoYTI1NiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwic2hhMjI0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJzaGEzODQiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sInNoYTUx''@;'; put 'put ''MiI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtU0hBMSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EiOnsic2lnbiI6ImRzYSIsImhhc2gi''@;'; put 'put ''OiJzaGExIiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6''@;'; put 'put ''InNoYTI1NiIsImlkIjoiIn0sIkRTQS1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hh''@;'; put 'put ''Mzg0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1SSVBFTUQxNjAiOnsic2lnbiI6ImRzYSIsImhhc2giOiJybWQx''@;'; put 'put ''NjAiLCJpZCI6IiJ9LCJyaXBlbWQxNjBXaXRoUlNBIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwiUlNBLVJJUEVNRDE2MCI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1''@;'; put 'put ''MmIyNDAzMDIwMTA1MDAwNDE0In0sIm1kNVdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifSwiUlNBLU1ENSI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMw''@;'; put 'put ''MGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn19Jyl9LDEzMDg6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEu''@;'; put 'put ''Mi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwyOTc5OTphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk''@;'; put 'put ''ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1l''@;'; put 'put ''IjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0''@;'; put 'put ''NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1Mjkw''@;'; put 'put ''NzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2Ix''@;'; put 'put ''MzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNk''@;'; put 'put ''YzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4''@;'; put 'put ''M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIy''@;'; put 'put ''MTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3''@;'; put 'put ''ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3''@;'; put 'put ''NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFi''@;'; put 'put ''ZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1''@;'; put 'put ''ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEy''@;'; put 'put ''OTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0''@;'; put 'put ''MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUz''@;'; put 'put ''NmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBh''@;'; put 'put ''OGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0''@;'; put 'put ''ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRl''@;'; put 'put ''NmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJn''@;'; put 'put ''ZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4''@;'; put 'put ''NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2''@;'; put 'put ''MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEw''@;'; put 'put ''NTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4''@;'; put 'put ''NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0Njgz''@;'; put 'put ''NGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhm''@;'; put 'put ''ZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0''@;'; put 'put ''NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdh''@;'; put 'put ''N2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUz''@;'; put 'put ''YzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxOCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3''@;'; put 'put ''NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4''@;'; put 'put ''NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMx''@;'; put 'put ''ODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBj''@;'; put 'put ''N2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNk''@;'; put 'put ''YjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRm''@;'; put 'put ''YTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEz''@;'; put 'put ''N2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2Yw''@;'; put 'put ''MzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVl''@;'; put 'put ''ZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMy''@;'; put 'put ''ZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzcz''@;'; put 'put ''NDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEw''@;'; put 'put ''YmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYifX0nKX0sMTg1OTc6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz17aTg6IjYuNS40In19LDYzNDgwOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siODc0MCIsIlx1NDNmMFx1NGMzMlx1NDYwM1x1NDVhNlx1NDU3OFx1ezI3MjY3fVx1NGQ3N1x1''@;'; put 'put ''NDViM1x1ezI3Y2IxfVx1NGNlMlx1ezI3Y2M1fVx1M2I5NVx1NDczNlx1NDc0NFx1NGM0N1x1NGM0MFx1ezI0MmJmfVx1ezIzNjE3fVx1ezI3MzUyfVx1ezI2ZThifVx1ezI3MGQyfVx1NGM1N1x1ezJhMzUxfVx1NDc0Zlx1NDVkYVx1NGM4NVx1ezI3YzZjfVx1NGQwN1x1NGFhNFx1NDZhMVx1''@;'; put 'put ''ezI2YjIzfVx1NzIyNVx1ezI1YTU0fVx1ezIxYTYzfVx1ezIzZTA2fVx1ezIzZjYxfVx1NjY0ZFx1NTZmYiJdLFsiODc2NyIsIlx1N2Q5NVx1NTkxZFx1ezI4YmI5fVx1M2RmNFx1OTczNFx1ezI3YmVmfVx1NWJkYlx1ezIxZDVlfVx1NWFhNFx1MzYyNVx1ezI5ZWIwfVx1NWFkMVx1NWJiN1x1''@;'; put 'put ''NWNmY1x1Njc2ZVx1ODU5M1x1ezI5OTQ1fVx1NzQ2MVx1NzQ5ZFx1Mzg3NVx1ezIxZDUzfVx1ezIzNjllfVx1ezI2MDIxfVx1M2VlYyJdLFsiODdhMSIsIlx1ezI1OGRlfVx1M2FmNVx1N2FmY1x1OWY5N1x1ezI0MTYxfVx1ezI4OTBkfVx1ezIzMWVhfVx1ezIwYThhfVx1ezIzMjVlfVx1NDMw''@;'; put 'put ''YVx1ODQ4NFx1OWY5Nlx1OTQyZlx1NDkzMFx1ODYxM1x1NTg5Nlx1OTc0YVx1OTIxOFx1NzlkMFx1N2EzMlx1NjY2MFx1NmEyOVx1ODg5ZFx1NzQ0Y1x1N2JjNVx1Njc4Mlx1N2EyY1x1NTI0Zlx1OTA0Nlx1MzRlNlx1NzNjNFx1ezI1ZGI5fVx1NzRjNlx1OWZjN1x1NTdiM1x1NDkyZlx1NTQ0''@;'; put 'put ''Y1x1NDEzMVx1ezIzNjhlfVx1NTgxOFx1N2E3Mlx1ezI3YjY1fVx1OGI4Zlx1NDZhZVx1ezI2ZTg4fVx1NDE4MVx1ezI1ZDk5fVx1N2JhZVx1ezIyNGJjfVx1OWZjOFx1ezIyNGMxfVx1ezIyNGM5fVx1ezIyNGNjfVx1OWZjOVx1ODUwNFx1ezIzNWJifVx1NDBiNFx1OWZjYVx1NDRlMVx1ezJh''@;'; put 'put ''ZGZmfVx1NjJjMVx1NzA2ZVx1OWZjYiJdLFsiODg0MCIsIlx1MzFjMCIsNCwiXHV7MjAxMGN9XHUzMWM1XHV7MjAwZDF9XHV7MjAwY2R9XHUzMWM2XHUzMWM3XHV7MjAwY2J9XHV7MjFmZTh9XHUzMWM4XHV7MjAwY2F9XHUzMWM5XHUzMWNhXHUzMWNiXHUzMWNjXHV7MjAxMGV9XHUzMWNkXHUz''@;'; put 'put ''MWNlXHUwMTAwXHhjMVx1MDFjZFx4YzBcdTAxMTJceGM5XHUwMTFhXHhjOFx1MDE0Y1x4ZDNcdTAxZDFceGQyXHUwZmZmXHhjYVx1MDMwNFx1MWViZVx1MGZmZlx4Y2FcdTAzMGNcdTFlYzBceGNhXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAyNTFcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4''@;'; put 'put ''ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYSJdLFsiODhhMSIsIlx1MDFkY1x4ZmNcdTBmZmZceGVhXHUwMzA0XHUxZWJmXHUwZmZmXHhlYVx1MDMwY1x1MWVjMVx4ZWFcdTAyNjFcdTIzZGFcdTIzZGIiXSxbIjg5''@;'; put 'put ''NDAiLCJcdXsyYTNhOX1cdXsyMTE0NX0iXSxbIjg5NDMiLCJcdTY1MGEiXSxbIjg5NDYiLCJcdTRlM2RcdTZlZGRcdTlkNGVcdTkxZGYiXSxbIjg5NGMiLCJcdXsyNzczNX1cdTY0OTFcdTRmMWFcdTRmMjhcdTRmYThcdTUxNTZcdTUxNzRcdTUxOWNcdTUxZTRcdTUyYTFcdTUyYThcdTUzM2Jc''@;'; put 'put ''dTUzNGVcdTUzZDFcdTUzZDhcdTU2ZTJcdTU4ZjBcdTU5MDRcdTU5MDdcdTU5MzJcdTU5MzRcdTViNjZcdTViOWVcdTViOWZcdTVjOWFcdTVlODZcdTYwM2JcdTY1ODlcdTY3ZmVcdTY4MDRcdTY4NjVcdTZkNGVcdTcwYmNcdTc1MzVcdTdlYTRcdTdlYWNcdTdlYmFcdTdlYzdcdTdlY2ZcdTdl''@;'; put 'put ''ZGZcdTdmMDZcdTdmMzdcdTgyN2FcdTgyY2ZcdTgzNmZcdTg5YzZcdThiYmVcdThiZTJcdThmNjZcdThmNjdcdThmNmUiXSxbIjg5YTEiLCJcdTc0MTFcdTdjZmNcdTdkY2RcdTY5NDZcdTdhYzlcdTUyMjciXSxbIjg5YWIiLCJcdTkxOGNcdTc4YjhcdTkxNWVcdTgwYmMiXSxbIjg5YjAiLCJc''@;'; put 'put ''dThkMGJcdTgwZjZcdXsyMDllN30iXSxbIjg5YjUiLCJcdTgwOWZcdTllYzdcdTRjY2RcdTlkYzlcdTllMGNcdTRjM2VcdXsyOWRmNn1cdXsyNzAwZX1cdTllMGFcdXsyYTEzM31cdTM1YzEiXSxbIjg5YzEiLCJcdTZlOWFcdTgyM2VcdTc1MTkiXSxbIjg5YzUiLCJcdTQ5MTFcdTlhNmNcdTlh''@;'; put 'put ''OGZcdTlmOTlcdTc5ODdcdXsyODQ2Y31cdXsyMWRjYX1cdXsyMDVkMH1cdXsyMmFlNn1cdTRlMjRcdTRlODFcdTRlODBcdTRlODdcdTRlYmZcdTRlZWJcdTRmMzdcdTM0NGNcdTRmYmRcdTNlNDhcdTUwMDNcdTUwODhcdTM0N2RcdTM0OTNcdTM0YTVcdTUxODZcdTU5MDVcdTUxZGJcdTUxZmNc''@;'; put 'put ''dTUyMDVcdTRlODlcdTUyNzlcdTUyOTBcdTUzMjdcdTM1YzdcdTUzYTlcdTM1NTFcdTUzYjBcdTM1NTNcdTUzYzJcdTU0MjNcdTM1NmRcdTM1NzJcdTM2ODFcdTU0OTNcdTU0YTNcdTU0YjRcdTU0YjlcdTU0ZDBcdTU0ZWZcdTU1MThcdTU1MjNcdTU1MjhcdTM1OThcdTU1M2ZcdTM1YTVcdTM1''@;'; put 'put ''YmZcdTU1ZDdcdTM1YzUiXSxbIjhhNDAiLCJcdXsyN2Q4NH1cdTU1MjUiXSxbIjhhNDMiLCJcdXsyMGM0Mn1cdXsyMGQxNX1cdXsyNTEyYn1cdTU1OTBcdXsyMmNjNn1cdTM5ZWNcdXsyMDM0MX1cdThlNDZcdXsyNGRiOH1cdXsyOTRlNX1cdTQwNTNcdXsyODBiZX1cdTc3N2FcdXsyMmMzOH1c''@;'; put 'put ''dTNhMzRcdTQ3ZDVcdXsyODE1ZH1cdXsyNjlmMn1cdXsyNGRlYX1cdTY0ZGRcdXsyMGQ3Y31cdXsyMGZiNH1cdXsyMGNkNX1cdXsyMTBmNH1cdTY0OGRcdThlN2VcdXsyMGU5Nn1cdXsyMGMwYn1cdXsyMGY2NH1cdXsyMmNhOX1cdXsyODI1Nn1cdXsyNDRkM30iXSxbIjhhNjQiLCJcdXsyMGQ0''@;'; put 'put ''Nn1cdXsyOWE0ZH1cdXsyODBlOX1cdTQ3ZjRcdXsyNGVhN31cdXsyMmNjMn1cdTlhYjJcdTNhNjdcdXsyOTVmNH1cdTNmZWRcdTM1MDZcdXsyNTJjN31cdXsyOTdkNH1cdXsyNzhjOH1cdXsyMmQ0NH1cdTlkNmVcdTk4MTUiXSxbIjhhNzYiLCJcdTQzZDlcdXsyNjBhNX1cdTY0YjRcdTU0ZTNc''@;'; put 'put ''dXsyMmQ0Y31cdXsyMmJjYX1cdXsyMTA3N31cdTM5ZmJcdXsyMTA2Zn0iXSxbIjhhYTEiLCJcdXsyNjZkYX1cdXsyNjcxNn1cdXsyNzlhMH1cdTY0ZWFcdXsyNTA1Mn1cdXsyMGM0M31cdThlNjhcdXsyMjFhMX1cdXsyOGI0Y31cdXsyMDczMX0iXSxbIjhhYWMiLCJcdTQ4MGJcdXsyMDFhOX1c''@;'; put 'put ''dTNmZmFcdTU4NzNcdXsyMmQ4ZH0iXSxbIjhhYjIiLCJcdXsyNDVjOH1cdXsyMDRmY31cdXsyNjA5N31cdXsyMGY0Y31cdXsyMGQ5Nn1cdTU1NzlcdTQwYmJcdTQzYmEiXSxbIjhhYmIiLCJcdTRhYjRcdXsyMmE2Nn1cdXsyMTA5ZH1cdTgxYWFcdTk4ZjVcdXsyMGQ5Y31cdTYzNzlcdTM5ZmVc''@;'; put 'put ''dXsyMjc3NX1cdThkYzBcdTU2YTFcdTY0N2NcdTNlNDMiXSxbIjhhYzkiLCJcdXsyYTYwMX1cdXsyMGUwOX1cdXsyMmFjZn1cdXsyMmNjOX0iXSxbIjhhY2UiLCJcdXsyMTBjOH1cdXsyMzljMn1cdTM5OTJcdTNhMDZcdXsyODI5Yn1cdTM1NzhcdXsyNWU0OX1cdXsyMjBjN31cdTU2NTJcdXsy''@;'; put 'put ''MGYzMX1cdXsyMmNiMn1cdXsyOTcyMH1cdTM0YmNcdTZjM2RcdXsyNGUzYn0iXSxbIjhhZGYiLCJcdXsyNzU3NH1cdXsyMmU4Yn1cdXsyMjIwOH1cdXsyYTY1Yn1cdXsyOGNjZH1cdXsyMGU3YX1cdXsyMGMzNH1cdXsyNjgxY31cdTdmOTNcdXsyMTBjZn1cdXsyMjgwM31cdXsyMjkzOX1cdTM1''@;'; put 'put ''ZmJcdXsyNTFlM31cdXsyMGU4Y31cdXsyMGY4ZH1cdXsyMGVhYX1cdTNmOTNcdXsyMGYzMH1cdXsyMGQ0N31cdXsyMTE0Zn1cdXsyMGU0Y30iXSxbIjhhZjYiLCJcdXsyMGVhYn1cdXsyMGJhOX1cdXsyMGQ0OH1cdXsyMTBjMH1cdXsyMTEzZH1cdTNmZjlcdXsyMjY5Nn1cdTY0MzJcdXsyMGZh''@;'; put 'put ''ZH0iXSxbIjhiNDAiLCJcdXsyMzNmNH1cdXsyNzYzOX1cdXsyMmJjZX1cdXsyMGQ3ZX1cdXsyMGQ3Zn1cdXsyMmM1MX1cdXsyMmM1NX1cdTNhMThcdXsyMGU5OH1cdXsyMTBjN31cdXsyMGYyZX1cdXsyYTYzMn1cdXsyNmI1MH1cdXsyOGNkMn1cdXsyOGQ5OX1cdXsyOGNjYX1cdTk1YWFcdTU0''@;'; put 'put ''Y2NcdTgyYzRcdTU1YjkiXSxbIjhiNTUiLCJcdXsyOWVjM31cdTljMjZcdTlhYjZcdXsyNzc1ZX1cdXsyMmRlZX1cdTcxNDBcdTgxNmRcdTgwZWNcdTVjMWNcdXsyNjU3Mn1cdTgxMzRcdTM3OTdcdTUzNWZcdXsyODBiZH1cdTkxYjZcdXsyMGVmYX1cdXsyMGUwZn1cdXsyMGU3N31cdXsyMGVm''@;'; put 'put ''Yn1cdTM1ZGRcdXsyNGRlYn1cdTM2MDlcdXsyMGNkNn1cdTU2YWZcdXsyMjdiNX1cdXsyMTBjOX1cdXsyMGUxMH1cdXsyMGU3OH1cdXsyMTA3OH1cdXsyMTE0OH1cdXsyODIwN31cdXsyMTQ1NX1cdXsyMGU3OX1cdXsyNGU1MH1cdXsyMmRhNH1cdTVhNTRcdXsyMTAxZH1cdXsyMTAxZX1cdXsy''@;'; put 'put ''MTBmNX1cdXsyMTBmNn1cdTU3OWNcdXsyMGUxMX0iXSxbIjhiYTEiLCJcdXsyNzY5NH1cdXsyODJjZH1cdXsyMGZiNX1cdXsyMGU3Yn1cdXsyNTE3ZX1cdTM3MDNcdXsyMGZiNn1cdXsyMTE4MH1cdXsyNTJkOH1cdXsyYTJiZH1cdXsyNDlkYX1cdXsyMTgzYX1cdXsyNDE3N31cdXsyODI3Y31c''@;'; put 'put ''dTU4OTlcdTUyNjhcdTM2MWFcdXsyNTczZH1cdTdiYjJcdTViNjhcdTQ4MDBcdTRiMmNcdTlmMjdcdTQ5ZTdcdTljMWZcdTliOGRcdXsyNWI3NH1cdXsyMzEzZH1cdTU1ZmJcdTM1ZjJcdTU2ODlcdTRlMjhcdTU5MDJcdXsyMWJjMX1cdXsyZjg3OH1cdTk3NTFcdXsyMDA4Nn1cdTRlNWJcdTRl''@;'; put 'put ''YmJcdTM1M2VcdTVjMjNcdTVmNTFcdTVmYzRcdTM4ZmFcdTYyNGNcdTY1MzVcdTZiN2FcdTZjMzVcdTZjM2FcdTcwNmNcdTcyMmJcdTRlMmNcdTcyYWRcdXsyNDhlOX1cdTdmNTJcdTc5M2JcdTdjZjlcdTdmNTNcdXsyNjI2YX1cdTM0YzEiXSxbIjhiZGUiLCJcdXsyNjM0Yn1cdTgwMDJcdTgw''@;'; put 'put ''ODBcdXsyNjYxMn1cdXsyNjk1MX1cdTUzNWRcdTg4NjRcdTg5YzFcdXsyNzhiMn1cdThiYTBcdThkMWRcdTk0ODVcdTk1NzhcdTk1N2ZcdTk1ZThcdXsyOGUwZn1cdTk3ZTZcdTk4NzVcdTk4Y2VcdTk4ZGVcdTk5NjNcdXsyOTgxMH1cdTljN2NcdTllMWZcdTllYzRcdTZiNmZcdWY5MDdcdTRl''@;'; put 'put ''MzdcdXsyMDA4N31cdTk2MWRcdTYyMzdcdTk0YTIiXSxbIjhjNDAiLCJcdTUwM2JcdTZkZmVcdXsyOWM3M31cdTlmYTZcdTNkYzlcdTg4OGZcdXsyNDE0ZX1cdTcwNzdcdTVjZjVcdTRiMjBcdXsyNTFjZH1cdTM1NTlcdXsyNWQzMH1cdTYxMjJcdXsyOGEzMn1cdThmYTdcdTkxZjZcdTcxOTFc''@;'; put 'put ''dTY3MTlcdTczYmFcdXsyMzI4MX1cdXsyYTEwN31cdTNjOGJcdXsyMTk4MH1cdTRiMTBcdTc4ZTRcdTc0MDJcdTUxYWVcdXsyODcwZn1cdTQwMDlcdTZhNjNcdXsyYTJiYX1cdTQyMjNcdTg2MGZcdXsyMGE2Zn1cdTdhMmFcdXsyOTk0N31cdXsyOGFlYX1cdTk3NTVcdTcwNGRcdTUzMjRcdXsy''@;'; put 'put ''MjA3ZX1cdTkzZjRcdTc2ZDlcdXsyODllM31cdTlmYTdcdTc3ZGRcdTRlYTNcdTRmZjBcdTUwYmNcdTRlMmZcdTRmMTdcdTlmYThcdTU0MzRcdTdkOGJcdTU4OTJcdTU4ZDBcdXsyMWRiNn1cdTVlOTJcdTVlOTlcdTVmYzJcdXsyMjcxMn1cdTY1OGIiXSxbIjhjYTEiLCJcdXsyMzNmOX1cdTY5''@;'; put 'put ''MTlcdTZhNDNcdXsyM2M2M31cdTZjZmYiXSxbIjhjYTciLCJcdTcyMDBcdXsyNDUwNX1cdTczOGNcdTNlZGJcdXsyNGExM31cdTViMTVcdTc0YjlcdThiODNcdXsyNWNhNH1cdXsyNTY5NX1cdTdhOTNcdTdiZWNcdTdjYzNcdTdlNmNcdTgyZjhcdTg1OTdcdTlmYTlcdTg4OTBcdTlmYWFcdThl''@;'; put 'put ''YjlcdTlmYWJcdThmY2ZcdTg1NWZcdTk5ZTBcdTkyMjFcdTlmYWNcdXsyOGRiOX1cdXsyMTQzZn1cdTQwNzFcdTQyYTJcdTVhMWEiXSxbIjhjYzkiLCJcdTk4NjhcdTY3NmJcdTQyNzZcdTU3M2QiXSxbIjhjY2UiLCJcdTg1ZDZcdXsyNDk3Yn1cdTgyYmZcdXsyNzEwZH1cdTRjODFcdXsyNmQ3''@;'; put 'put ''NH1cdTVkN2JcdXsyNmIxNX1cdXsyNmZiZX1cdTlmYWRcdTlmYWVcdTViOTZcdTlmYWZcdTY2ZTdcdTdlNWJcdTZlNTdcdTc5Y2FcdTNkODhcdTQ0YzNcdXsyMzI1Nn1cdXsyMjc5Nn1cdTQzOWFcdTQ1MzYiXSxbIjhjZTYiLCJcdTVjZDVcdXsyM2IxYX1cdThhZjlcdTVjNzhcdTNkMTJcdXsy''@;'; put 'put ''MzU1MX1cdTVkNzhcdTlmYjJcdTcxNTdcdTQ1NThcdXsyNDBlY31cdXsyMWUyM31cdTRjNzdcdTM5NzhcdTM0NGFcdXsyMDFhNH1cdXsyNmM0MX1cdThhY2NcdTRmYjRcdXsyMDIzOX1cdTU5YmZcdTgxNmNcdTk4NTZcdXsyOThmYX1cdTVmM2IiXSxbIjhkNDAiLCJcdXsyMGI5Zn0iXSxbIjhk''@;'; put 'put ''NDIiLCJcdXsyMjFjMX1cdXsyODk2ZH1cdTQxMDJcdTQ2YmJcdXsyOTA3OX1cdTNmMDdcdTlmYjNcdXsyYTFiNX1cdTQwZjhcdTM3ZDZcdTQ2ZjdcdXsyNmM0Nn1cdTQxN2NcdXsyODZiMn1cdXsyNzNmZn1cdTQ1NmRcdTM4ZDRcdXsyNTQ5YX1cdTQ1NjFcdTQ1MWJcdTRkODlcdTRjN2JcdTRk''@;'; put 'put ''NzZcdTQ1ZWFcdTNmYzhcdXsyNGIwZn1cdTM2NjFcdTQ0ZGVcdTQ0YmRcdTQxZWRcdTVkM2VcdTVkNDhcdTVkNTZcdTNkZmNcdTM4MGZcdTVkYTRcdTVkYjlcdTM4MjBcdTM4MzhcdTVlNDJcdTVlYmRcdTVmMjVcdTVmODNcdTM5MDhcdTM5MTRcdTM5M2ZcdTM5NGRcdTYwZDdcdTYxM2RcdTVj''@;'; put 'put ''ZTVcdTM5ODlcdTYxYjdcdTYxYjlcdTYxY2ZcdTM5YjhcdTYyMmNcdTYyOTBcdTYyZTVcdTYzMThcdTM5ZjhcdTU2YjEiXSxbIjhkYTEiLCJcdTNhMDNcdTYzZTJcdTYzZmJcdTY0MDdcdTY0NWFcdTNhNGJcdTY0YzBcdTVkMTVcdTU2MjFcdTlmOWZcdTNhOTdcdTY1ODZcdTNhYmRcdTY1ZmZc''@;'; put 'put ''dTY2NTNcdTNhZjJcdTY2OTJcdTNiMjJcdTY3MTZcdTNiNDJcdTY3YTRcdTY4MDBcdTNiNThcdTY4NGFcdTY4ODRcdTNiNzJcdTNiNzFcdTNiN2JcdTY5MDlcdTY5NDNcdTcyNWNcdTY5NjRcdTY5OWZcdTY5ODVcdTNiYmNcdTY5ZDZcdTNiZGRcdTZhNjVcdTZhNzRcdTZhNzFcdTZhODJcdTNi''@;'; put 'put ''ZWNcdTZhOTlcdTNiZjJcdTZhYWJcdTZhYjVcdTZhZDRcdTZhZjZcdTZiODFcdTZiYzFcdTZiZWFcdTZjNzVcdTZjYWFcdTNjY2JcdTZkMDJcdTZkMDZcdTZkMjZcdTZkODFcdTNjZWZcdTZkYTRcdTZkYjFcdTZlMTVcdTZlMThcdTZlMjlcdTZlODZcdXsyODljMH1cdTZlYmJcdTZlZTJcdTZl''@;'; put 'put ''ZGFcdTlmN2ZcdTZlZThcdTZlZTlcdTZmMjRcdTZmMzRcdTNkNDZcdXsyM2Y0MX1cdTZmODFcdTZmYmVcdTNkNmFcdTNkNzVcdTcxYjdcdTVjOTlcdTNkOGFcdTcwMmNcdTNkOTFcdTcwNTBcdTcwNTRcdTcwNmZcdTcwN2ZcdTcwODlcdXsyMDMyNX1cdTQzYzFcdTM1ZjFcdXsyMGVkOH0iXSxb''@;'; put 'put ''IjhlNDAiLCJcdXsyM2VkN31cdTU3YmVcdXsyNmVkM31cdTcxM2VcdXsyNTdlMH1cdTM2NGVcdTY5YTJcdXsyOGJlOX1cdTViNzRcdTdhNDlcdXsyNThlMX1cdXsyOTRkOX1cdTdhNjVcdTdhN2RcdXsyNTlhY31cdTdhYmJcdTdhYjBcdTdhYzJcdTdhYzNcdTcxZDFcdXsyNjQ4ZH1cdTQxY2Fc''@;'; put 'put ''dTdhZGFcdTdhZGRcdTdhZWFcdTQxZWZcdTU0YjJcdXsyNWMwMX1cdTdiMGJcdTdiNTVcdTdiMjlcdXsyNTMwZX1cdXsyNWNmZX1cdTdiYTJcdTdiNmZcdTgzOWNcdXsyNWJiNH1cdXsyNmM3Zn1cdTdiZDBcdTg0MjFcdTdiOTJcdTdiYjhcdXsyNWQyMH1cdTNkYWRcdXsyNWM2NX1cdTg0OTJc''@;'; put 'put ''dTdiZmFcdTdjMDZcdTdjMzVcdXsyNWNjMX1cdTdjNDRcdTdjODNcdXsyNDg4Mn1cdTdjYTZcdTY2N2RcdXsyNDU3OH1cdTdjYzlcdTdjYzdcdTdjZTZcdTdjNzRcdTdjZjNcdTdjZjVcdTdjY2UiXSxbIjhlYTEiLCJcdTdlNjdcdTQ1MWRcdXsyNmU0NH1cdTdkNWRcdXsyNmVkNn1cdTc0OGRc''@;'; put 'put ''dTdkODlcdTdkYWJcdTcxMzVcdTdkYjNcdTdkZDJcdXsyNDA1N31cdXsyNjAyOX1cdTdkZTRcdTNkMTNcdTdkZjVcdXsyMTdmOX1cdTdkZTVcdXsyODM2ZH1cdTdlMWRcdXsyNjEyMX1cdXsyNjE1YX1cdTdlNmVcdTdlOTJcdTQzMmJcdTk0NmNcdTdlMjdcdTdmNDBcdTdmNDFcdTdmNDdcdTc5''@;'; put 'put ''MzZcdXsyNjJkMH1cdTk5ZTFcdTdmOTdcdXsyNjM1MX1cdTdmYTNcdXsyMTY2MX1cdXsyMDA2OH1cdTQ1NWNcdXsyMzc2Nn1cdTQ1MDNcdXsyODMzYX1cdTdmZmFcdXsyNjQ4OX1cdTgwMDVcdTgwMDhcdTgwMWRcdTgwMjhcdTgwMmZcdXsyYTA4N31cdXsyNmNjM31cdTgwM2JcdTgwM2NcdTgw''@;'; put 'put ''NjFcdXsyMjcxNH1cdTQ5ODlcdXsyNjYyNn1cdXsyM2RlM31cdXsyNjZlOH1cdTY3MjVcdTgwYTdcdXsyOGE0OH1cdTgxMDdcdTgxMWFcdTU4YjBcdXsyMjZmNn1cdTZjN2ZcdXsyNjQ5OH1cdXsyNGZiOH1cdTY0ZTdcdXsyMTQ4YX1cdTgyMThcdXsyMTg1ZX1cdTZhNTNcdXsyNGE2NX1cdXsy''@;'; put 'put ''NGE5NX1cdTQ0N2FcdTgyMjlcdXsyMGIwZH1cdXsyNmE1Mn1cdXsyM2Q3ZX1cdTRmZjlcdXsyMTRmZH1cdTg0ZTJcdTgzNjJcdXsyNmIwYX1cdXsyNDlhN31cdXsyMzUzMH1cdXsyMTc3M31cdXsyM2RmOH1cdTgyYWFcdTY5MWJcdXsyZjk5NH1cdTQxZGIiXSxbIjhmNDAiLCJcdTg1NGJcdTgy''@;'; put 'put ''ZDBcdTgzMWFcdXsyMGUxNn1cdXsyMTdiNH1cdTM2YzFcdXsyMzE3ZH1cdXsyMzU1YX1cdTgyN2JcdTgyZTJcdTgzMThcdXsyM2U4Yn1cdXsyNmRhM31cdXsyNmIwNX1cdXsyNmI5N31cdXsyMzVjZX1cdTNkYmZcdTgzMWRcdTU1ZWNcdTgzODVcdTQ1MGJcdXsyNmRhNX1cdTgzYWNcdTgzYzFc''@;'; put 'put ''dTgzZDNcdTM0N2VcdXsyNmVkNH1cdTZhNTdcdTg1NWFcdTM0OTZcdXsyNmU0Mn1cdXsyMmVlZn1cdTg0NThcdXsyNWJlNH1cdTg0NzFcdTNkZDNcdTQ0ZTRcdTZhYTdcdTg0NGFcdXsyM2NiNX1cdTc5NThcdTg0YThcdXsyNmI5Nn1cdXsyNmU3N31cdXsyNmU0M31cdTg0ZGVcdTg0MGZcdTgz''@;'; put 'put ''OTFcdTQ0YTBcdTg0OTNcdTg0ZTRcdXsyNWM5MX1cdTQyNDBcdXsyNWNjMH1cdTQ1NDNcdTg1MzRcdTVhZjJcdXsyNmU5OX1cdTQ1MjdcdTg1NzNcdTQ1MTZcdTY3YmZcdTg2MTYiXSxbIjhmYTEiLCJcdXsyODYyNX1cdXsyODYzYn1cdTg1YzFcdXsyNzA4OH1cdTg2MDJcdXsyMTU4Mn1cdXsy''@;'; put 'put ''NzBjZH1cdXsyZjliMn1cdTQ1NmFcdTg2MjhcdTM2NDhcdXsyMThhMn1cdTUzZjdcdXsyNzM5YX1cdTg2N2VcdTg3NzFcdXsyYTBmOH1cdTg3ZWVcdXsyMmMyN31cdTg3YjFcdTg3ZGFcdTg4MGZcdTU2NjFcdTg2NmNcdTY4NTZcdTQ2MGZcdTg4NDVcdTg4NDZcdXsyNzVlMH1cdXsyM2RiOX1c''@;'; put 'put ''dXsyNzVlNH1cdTg4NWVcdTg4OWNcdTQ2NWJcdTg4YjRcdTg4YjVcdTYzYzFcdTg4YzVcdTc3NzdcdXsyNzcwZn1cdTg5ODdcdTg5OGFcdTg5YTZcdTg5YTlcdTg5YTdcdTg5YmNcdXsyOGEyNX1cdTg5ZTdcdXsyNzkyNH1cdXsyN2FiZH1cdThhOWNcdTc3OTNcdTkxZmVcdThhOTBcdXsyN2E1''@;'; put 'put ''OX1cdTdhZTlcdXsyN2IzYX1cdXsyM2Y4Zn1cdTQ3MTNcdXsyN2IzOH1cdTcxN2NcdThiMGNcdThiMWZcdXsyNTQzMH1cdXsyNTU2NX1cdThiM2ZcdThiNGNcdThiNGRcdThhYTlcdXsyNGE3YX1cdThiOTBcdThiOWJcdThhYWZcdXsyMTZkZn1cdTQ2MTVcdTg4NGZcdThjOWJcdXsyN2Q1NH1c''@;'; put 'put ''dXsyN2Q4Zn1cdXsyZjlkNH1cdTM3MjVcdXsyN2Q1M31cdThjZDZcdXsyN2Q5OH1cdXsyN2RiZH1cdThkMTJcdThkMDNcdXsyMTkxMH1cdThjZGJcdTcwNWNcdThkMTFcdXsyNGNjOX1cdTNlZDBcdThkNzciXSxbIjkwNDAiLCJcdThkYTlcdXsyODAwMn1cdXsyMTAxNH1cdXsyNDk4YX1cdTNi''@;'; put 'put ''N2NcdXsyODFiY31cdXsyNzEwY31cdTdhZTdcdThlYWRcdThlYjZcdThlYzNcdTkyZDRcdThmMTlcdThmMmRcdXsyODM2NX1cdXsyODQxMn1cdThmYTVcdTkzMDNcdXsyYTI5Zn1cdXsyMGE1MH1cdThmYjNcdTQ5MmFcdXsyODlkZX1cdXsyODUzZH1cdXsyM2RiYn1cdTVlZjhcdXsyMzI2Mn1c''@;'; put 'put ''dThmZjlcdXsyYTAxNH1cdXsyODZiY31cdXsyODUwMX1cdXsyMjMyNX1cdTM5ODBcdXsyNmVkN31cdTkwMzdcdXsyODUzY31cdXsyN2FiZX1cdTkwNjFcdXsyODU2Y31cdXsyODYwYn1cdTkwYThcdXsyODcxM31cdTkwYzRcdXsyODZlNn1cdTkwYWVcdTkwZmRcdTkxNjdcdTNhZjBcdTkxYTlc''@;'; put 'put ''dTkxYzRcdTdjYWNcdXsyODkzM31cdXsyMWU4OX1cdTkyMGVcdTZjOWZcdTkyNDFcdTkyNjJcdXsyNTViOX1cdTkyYjlcdXsyOGFjNn1cdXsyM2M5Yn1cdXsyOGIwY31cdXsyNTVkYn0iXSxbIjkwYTEiLCJcdXsyMGQzMX1cdTkzMmNcdTkzNmJcdXsyOGFlMX1cdXsyOGJlYn1cdTcwOGZcdTVh''@;'; put 'put ''YzNcdXsyOGFlMn1cdXsyOGFlNX1cdTQ5NjVcdTkyNDRcdXsyOGJlY31cdXsyOGMzOX1cdXsyOGJmZn1cdTkzNzNcdTk0NWJcdThlYmNcdTk1ODVcdTk1YTZcdTk0MjZcdTk1YTBcdTZmZjZcdTQyYjlcdXsyMjY3YX1cdXsyODZkOH1cdXsyMTI3Y31cdXsyM2UyZX1cdTQ5ZGZcdTZjMWNcdTk2''@;'; put 'put ''N2JcdTk2OTZcdTQxNmNcdTk2YTNcdXsyNmVkNX1cdTYxZGFcdTk2YjZcdTc4ZjVcdXsyOGFlMH1cdTk2YmRcdTUzY2NcdTQ5YTFcdXsyNmNiOH1cdXsyMDI3NH1cdXsyNjQxMH1cdXsyOTBhZn1cdXsyOTBlNX1cdXsyNGFkMX1cdXsyMTkxNX1cdXsyMzMwYX1cdTk3MzFcdTg2NDJcdTk3MzZc''@;'; put 'put ''dTRhMGZcdTQ1M2RcdTQ1ODVcdXsyNGFlOX1cdTcwNzVcdTViNDFcdTk3MWJcdTk3NWNcdXsyOTFkNX1cdTk3NTdcdTViNGFcdXsyOTFlYn1cdTk3NWZcdTk0MjVcdTUwZDBcdXsyMzBiN31cdXsyMzBiY31cdTk3ODlcdTk3OWZcdTk3YjFcdTk3YmVcdTk3YzBcdTk3ZDJcdTk3ZTBcdXsyNTQ2''@;'; put 'put ''Y31cdTk3ZWVcdTc0MWNcdXsyOTQzM31cdTk3ZmZcdTk3ZjVcdXsyOTQxZH1cdXsyNzk3YX1cdTRhZDFcdTk4MzRcdTk4MzNcdTk4NGJcdTk4NjZcdTNiMGVcdXsyNzE3NX1cdTNkNTFcdXsyMDYzMH1cdXsyNDE1Y30iXSxbIjkxNDAiLCJcdXsyNTcwNn1cdTk4Y2FcdTk4YjdcdTk4YzhcdTk4''@;'; put 'put ''YzdcdTRhZmZcdXsyNmQyN31cdXsyMTZkM31cdTU1YjBcdTk4ZTFcdTk4ZTZcdTk4ZWNcdTkzNzhcdTk5MzlcdXsyNGEyOX1cdTRiNzJcdXsyOTg1N31cdXsyOTkwNX1cdTk5ZjVcdTlhMGNcdTlhM2JcdTlhMTBcdTlhNThcdXsyNTcyNX1cdTM2YzRcdXsyOTBiMX1cdXsyOWJkNX1cdTlhZTBc''@;'; put 'put ''dTlhZTJcdXsyOWIwNX1cdTlhZjRcdTRjMGVcdTliMTRcdTliMmRcdXsyODYwMH1cdTUwMzRcdTliMzRcdXsyNjlhOH1cdTM4YzNcdXsyMzA3ZH1cdTliNTBcdTliNDBcdXsyOWQzZX1cdTVhNDVcdXsyMTg2M31cdTliOGVcdXsyNDI0Yn1cdTljMDJcdTliZmZcdTljMGNcdXsyOWU2OH1cdTlk''@;'; put 'put ''ZDRcdXsyOWZiN31cdXsyYTE5Mn1cdXsyYTFhYn1cdXsyYTBlMX1cdXsyYTEyM31cdXsyYTFkZn1cdTlkN2VcdTlkODNcdXsyYTEzNH1cdTllMGVcdTY4ODgiXSxbIjkxYTEiLCJcdTlkYzRcdXsyMjE1Yn1cdXsyYTE5M31cdXsyYTIyMH1cdXsyMTkzYn1cdXsyYTIzM31cdTlkMzlcdXsyYTBi''@;'; put 'put ''OX1cdXsyYTJiNH1cdTllOTBcdTllOTVcdTllOWVcdTllYTJcdTRkMzRcdTllYWFcdTllYWZcdXsyNDM2NH1cdTllYzFcdTNiNjBcdTM5ZTVcdTNkMWRcdTRmMzJcdTM3YmVcdXsyOGMyYn1cdTlmMDJcdTlmMDhcdTRiOTZcdTk0MjRcdXsyNmRhMn1cdTlmMTdcdTlmMTZcdTlmMzlcdTU2OWZc''@;'; put 'put ''dTU2OGFcdTlmNDVcdTk5YjhcdXsyOTA4Yn1cdTk3ZjJcdTg0N2ZcdTlmNjJcdTlmNjlcdTdhZGNcdTlmOGVcdTcyMTZcdTRiYmVcdXsyNDk3NX1cdXsyNDliYn1cdTcxNzdcdXsyNDlmOH1cdXsyNDM0OH1cdXsyNGE1MX1cdTczOWVcdXsyOGJkYX1cdXsyMThmYX1cdTc5OWZcdXsyODk3ZX1c''@;'; put 'put ''dXsyOGUzNn1cdTkzNjlcdTkzZjNcdXsyOGE0NH1cdTkyZWNcdTkzODFcdTkzY2JcdXsyODk2Y31cdXsyNDRiOX1cdTcyMTdcdTNlZWJcdTc3NzJcdTdhNDNcdTcwZDBcdXsyNDQ3M31cdXsyNDNmOH1cdTcxN2VcdXsyMTdlZn1cdTcwYTNcdXsyMThiZX1cdXsyMzU5OX1cdTNlYzdcdXsyMTg4''@;'; put 'put ''NX1cdXsyNTQyZn1cdXsyMTdmOH1cdTM3MjJcdXsyMTZmYn1cdXsyMTgzOX1cdTM2ZTFcdXsyMTc3NH1cdXsyMThkMX1cdXsyNWY0Yn1cdTM3MjNcdXsyMTZjMH1cdTU3NWJcdXsyNGEyNX1cdXsyMTNmZX1cdXsyMTJhOH0iXSxbIjkyNDAiLCJcdXsyMTNjNn1cdXsyMTRiNn1cdTg1MDNcdXsy''@;'; put 'put ''MzZhNn1cdTg1MDNcdTg0NTVcdXsyNDk5NH1cdXsyNzE2NX1cdXsyM2UzMX1cdXsyNTU1Y31cdXsyM2VmYn1cdXsyNzA1Mn1cdTQ0ZjRcdXsyMzZlZX1cdXsyOTk5ZH1cdXsyNmYyNn1cdTY3ZjlcdTM3MzNcdTNjMTVcdTNkZTdcdTU4NmNcdXsyMTkyMn1cdTY4MTBcdTQwNTdcdXsyMzczZn1c''@;'; put 'put ''dXsyNDBlMX1cdXsyNDA4Yn1cdXsyNDEwZn1cdXsyNmMyMX1cdTU0Y2JcdTU2OWVcdXsyNjZiMX1cdTU2OTJcdXsyMGZkZn1cdXsyMGJhOH1cdXsyMGUwZH1cdTkzYzZcdXsyOGIxM31cdTkzOWNcdTRlZjhcdTUxMmJcdTM4MTlcdXsyNDQzNn1cdTRlYmNcdXsyMDQ2NX1cdXsyMDM3Zn1cdTRm''@;'; put 'put ''NGJcdTRmOGFcdXsyNTY1MX1cdTVhNjhcdXsyMDFhYn1cdXsyMDNjYn1cdTM5OTlcdXsyMDMwYX1cdXsyMDQxNH1cdTM0MzVcdTRmMjlcdXsyMDJjMH1cdXsyOGViM31cdXsyMDI3NX1cdThhZGFcdXsyMDIwY31cdTRlOTgiXSxbIjkyYTEiLCJcdTUwY2RcdTUxMGRcdTRmYTJcdTRmMDNcdXsy''@;'; put 'put ''NGEwZX1cdXsyM2U4YX1cdTRmNDJcdTUwMmVcdTUwNmNcdTUwODFcdTRmY2NcdTRmZTVcdTUwNThcdTUwZmNcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTZlNzZcdXsyMzU5NX1cdXsyM2UzOX1cdXsyM2ViZn1cdTZkNzJcdXsyMTg4NH1cdXsyM2U4OX1cdTUxYThcdTUxYzNcdXsyMDVlMH1c''@;'; put 'put ''dTQ0ZGRcdXsyMDRhM31cdXsyMDQ5Mn1cdXsyMDQ5MX1cdThkN2FcdXsyOGE5Y31cdXsyMDcwZX1cdTUyNTlcdTUyYTRcdXsyMDg3M31cdTUyZTFcdTkzNmVcdTQ2N2FcdTcxOGNcdXsyNDM4Y31cdXsyMGMyMH1cdXsyNDlhY31cdXsyMTBlNH1cdTY5ZDFcdXsyMGUxZH1cdTc0NzlcdTNlZGVc''@;'; put 'put ''dTc0OTlcdTc0MTRcdTc0NTZcdTczOThcdTRiOGVcdXsyNGFiY31cdXsyNDA4ZH1cdTUzZDBcdTM1ODRcdTcyMGZcdXsyNDBjOX1cdTU1YjRcdXsyMDM0NX1cdTU0Y2RcdXsyMGJjNn1cdTU3MWRcdTkyNWRcdTk2ZjRcdTkzNjZcdTU3ZGRcdTU3OGRcdTU3N2ZcdTM2M2VcdTU4Y2JcdTVhOTlc''@;'; put 'put ''dXsyOGE0Nn1cdXsyMTZmYX1cdXsyMTc2Zn1cdXsyMTcxMH1cdTVhMmNcdTU5YjhcdTkyOGZcdTVhN2VcdTVhY2ZcdTVhMTJcdXsyNTk0Nn1cdXsyMTlmM31cdXsyMTg2MX1cdXsyNDI5NX1cdTM2ZjVcdTZkMDVcdTc0NDNcdTVhMjFcdXsyNWU4M30iXSxbIjkzNDAiLCJcdTVhODFcdXsyOGJk''@;'; put 'put ''N31cdXsyMDQxM31cdTkzZTBcdTc0OGNcdXsyMTMwM31cdTcxMDVcdTQ5NzJcdTk0MDhcdXsyODlmYn1cdTkzYmRcdTM3YTBcdTVjMWVcdTVjOWVcdTVlNWVcdTVlNDhcdXsyMTk5Nn1cdXsyMTk3Y31cdXsyM2FlZX1cdTVlY2RcdTViNGZcdXsyMTkwM31cdXsyMTkwNH1cdTM3MDFcdXsyMThh''@;'; put 'put ''MH1cdTM2ZGRcdXsyMTZmZX1cdTM2ZDNcdTgxMmFcdXsyOGE0N31cdXsyMWRiYX1cdXsyMzQ3Mn1cdXsyODlhOH1cdTVmMGNcdTVmMGVcdXsyMTkyN31cdXsyMTdhYn1cdTVhNmJcdXsyMTczYn1cdTViNDRcdTg2MTRcdXsyNzVmZH1cdTg4NjBcdTYwN2VcdXsyMjg2MH1cdXsyMjYyYn1cdTVm''@;'; put 'put ''ZGJcdTNlYjhcdXsyMjVhZn1cdXsyMjViZX1cdXsyOTA4OH1cdXsyNmY3M31cdTYxYzBcdXsyMDAzZX1cdXsyMDA0Nn1cdXsyMjYxYn1cdTYxOTlcdTYxOThcdTYwNzVcdXsyMmM5Yn1cdXsyMmQwN31cdXsyNDZkNH1cdXsyOTE0ZH0iXSxbIjkzYTEiLCJcdTY0NzFcdXsyNDY2NX1cdXsyMmI2''@;'; put 'put ''YX1cdTNhMjlcdXsyMmIyMn1cdXsyMzQ1MH1cdXsyOThlYX1cdXsyMmU3OH1cdTYzMzdcdXsyYTQ1Yn1cdTY0YjZcdTYzMzFcdTYzZDFcdXsyNDllM31cdXsyMmQ2N31cdTYyYTRcdXsyMmNhMX1cdTY0M2JcdTY1NmJcdTY5NzJcdTNiZjRcdXsyMzA4ZX1cdXsyMzJhZH1cdXsyNDk4OX1cdXsy''@;'; put 'put ''MzJhYn1cdTU1MGRcdXsyMzJlMH1cdXsyMThkOX1cdXsyOTQzZn1cdTY2Y2VcdXsyMzI4OX1cdXsyMzFiM31cdTNhZTBcdTQxOTBcdXsyNTU4NH1cdXsyOGIyMn1cdXsyNTU4Zn1cdXsyMTZmY31cdXsyNTU1Yn1cdXsyNTQyNX1cdTc4ZWVcdXsyMzEwM31cdXsyMTgyYX1cdXsyMzIzNH1cdTM0''@;'; put 'put ''NjRcdXsyMzIwZn1cdXsyMzE4Mn1cdXsyNDJjOX1cdTY2OGVcdXsyNmQyNH1cdTY2NmJcdTRiOTNcdTY2MzBcdXsyNzg3MH1cdXsyMWRlYn1cdTY2NjNcdXsyMzJkMn1cdXsyMzJlMX1cdTY2MWVcdXsyNTg3Mn1cdTM4ZDFcdXsyMzgzYX1cdXsyMzdiY31cdTNiOTlcdXsyMzdhMn1cdXsyMzNm''@;'; put 'put ''ZX1cdTc0ZDBcdTNiOTZcdTY3OGZcdXsyNDYyYX1cdTY4YjZcdTY4MWVcdTNiYzRcdTZhYmVcdTM4NjNcdXsyMzdkNX1cdXsyNDQ4N31cdTZhMzNcdTZhNTJcdTZhYzlcdTZiMDVcdXsyMTkxMn1cdTY1MTFcdTY4OThcdTZhNGNcdTNiZDdcdTZhN2FcdTZiNTdcdXsyM2ZjMH1cdXsyM2M5YX1c''@;'; put 'put ''dTkzYTBcdTkyZjJcdXsyOGJlYX1cdXsyOGFjYn0iXSxbIjk0NDAiLCJcdTkyODlcdXsyODAxZX1cdXsyODlkY31cdTk0NjdcdTZkYTVcdTZmMGJcdXsyNDllY31cdTZkNjdcdXsyM2Y3Zn1cdTNkOGZcdTZlMDRcdXsyNDAzY31cdTVhM2RcdTZlMGFcdTU4NDdcdTZkMjRcdTc4NDJcdTcxM2Jc''@;'; put 'put ''dXsyNDMxYX1cdXsyNDI3Nn1cdTcwZjFcdTcyNTBcdTcyODdcdTcyOTRcdXsyNDc4Zn1cdXsyNDcyNX1cdTUxNzlcdXsyNGFhNH1cdXsyMDVlYn1cdTc0N2FcdXsyM2VmOH1cdXsyMzY1Zn1cdXsyNGE0YX1cdXsyNDkxN31cdXsyNWZlMX1cdTNmMDZcdTNlYjFcdXsyNGFkZn1cdXsyOGMyM31c''@;'; put 'put ''dXsyM2YzNX1cdTYwYTdcdTNlZjNcdTc0Y2NcdTc0M2NcdTkzODdcdTc0MzdcdTQ0OWZcdXsyNmRlYX1cdTQ1NTFcdTc1ODNcdTNmNjNcdXsyNGNkOX1cdXsyNGQwNn1cdTNmNThcdTc1NTVcdTc2NzNcdXsyYTVjNn1cdTNiMTlcdTc0NjhcdXsyOGFjY31cdXsyNDlhYn1cdXsyNDk4ZX1cdTNh''@;'; put 'put ''ZmIiXSxbIjk0YTEiLCJcdTNkY2RcdXsyNGE0ZX1cdTNlZmZcdXsyNDljNX1cdXsyNDhmM31cdTkxZmFcdTU3MzJcdTkzNDJcdXsyOGFlM31cdXsyMTg2NH1cdTUwZGZcdXsyNTIyMX1cdXsyNTFlN31cdTc3NzhcdXsyMzIzMn1cdTc3MGVcdTc3MGZcdTc3N2JcdXsyNDY5N31cdXsyMzc4MX1c''@;'; put 'put ''dTNhNWVcdXsyNDhmMH1cdTc0MzhcdTc0OWJcdTNlYmZcdXsyNGFiYX1cdXsyNGFjN31cdTQwYzhcdXsyNGE5Nn1cdXsyNjFhZX1cdTkzMDdcdXsyNTU4MX1cdTc4MWVcdTc4OGRcdTc4ODhcdTc4ZDJcdTczZDBcdTc5NTlcdXsyNzc0MX1cdXsyNTZlM31cdTQxMGVcdTc5OWJcdTg0OTZcdTc5''@;'; put 'put ''YTVcdTZhMmRcdXsyM2VmYX1cdTdhM2FcdTc5ZjRcdTQxNmVcdXsyMTZlNn1cdTQxMzJcdTkyMzVcdTc5ZjFcdXsyMGQ0Y31cdXsyNDk4Y31cdXsyMDI5OX1cdXsyM2RiYX1cdXsyMTc2ZX1cdTM1OTdcdTU1NmJcdTM1NzBcdTM2YWFcdXsyMDFkNH1cdXsyMGMwZH1cdTdhZTJcdTVhNTlcdXsy''@;'; put 'put ''MjZmNX1cdXsyNWFhZn1cdXsyNWE5Y31cdTVhMGRcdXsyMDI1Yn1cdTc4ZjBcdTVhMmFcdXsyNWJjNn1cdTdhZmVcdTQxZjlcdTdjNWRcdTdjNmRcdTQyMTFcdXsyNWJiM31cdXsyNWViY31cdXsyNWVhNn1cdTdjY2RcdXsyNDlmOX1cdXsyMTdiMH1cdTdjOGVcdTdjN2NcdTdjYWVcdTZhYjJc''@;'; put 'put ''dTdkZGNcdTdlMDdcdTdkZDNcdTdmNGVcdXsyNjI2MX0iXSxbIjk1NDAiLCJcdXsyNjE1Y31cdXsyN2I0OH1cdTdkOTdcdXsyNWU4Mn1cdTQyNmFcdXsyNmI3NX1cdXsyMDkxNn1cdTY3ZDZcdXsyMDA0ZX1cdXsyMzVjZn1cdTU3YzRcdXsyNjQxMn1cdXsyNjNmOH1cdXsyNDk2Mn1cdTdmZGRc''@;'; put 'put ''dTdiMjdcdXsyMDgyY31cdXsyNWFlOX1cdXsyNWQ0M31cdTdiMGNcdXsyNWUwZX1cdTk5ZTZcdTg2NDVcdTlhNjNcdTZhMWNcdXsyMzQzZn1cdTM5ZTJcdXsyNDlmN31cdXsyNjVhZH1cdTlhMWZcdXsyNjVhMH1cdTg0ODBcdXsyNzEyN31cdXsyNmNkMX1cdTQ0ZWFcdTgxMzdcdTQ0MDJcdTgw''@;'; put 'put ''YzZcdTgxMDlcdTgxNDJcdXsyNjdiNH1cdTk4YzNcdXsyNmE0Mn1cdTgyNjJcdTgyNjVcdXsyNmE1MX1cdTg0NTNcdXsyNmRhN31cdTg2MTBcdXsyNzIxYn1cdTVhODZcdTQxN2ZcdXsyMTg0MH1cdTViMmJcdXsyMThhMX1cdTVhZTRcdXsyMThkOH1cdTg2YTBcdXsyZjliY31cdXsyM2Q4Zn1c''@;'; put 'put ''dTg4MmRcdXsyNzQyMn1cdTVhMDIiXSxbIjk1YTEiLCJcdTg4NmVcdTRmNDVcdTg4ODdcdTg4YmZcdTg4ZTZcdTg5NjVcdTg5NGRcdXsyNTY4M31cdTg5NTRcdXsyNzc4NX1cdXsyNzc4NH1cdXsyOGJmNX1cdXsyOGJkOX1cdXsyOGI5Y31cdXsyODlmOX1cdTNlYWRcdTg0YTNcdTQ2ZjVcdTQ2''@;'; put 'put ''Y2ZcdTM3ZjJcdThhM2RcdThhMWNcdXsyOTQ0OH1cdTVmNGRcdTkyMmJcdXsyNDI4NH1cdTY1ZDRcdTcxMjlcdTcwYzRcdXsyMTg0NX1cdTlkNmRcdThjOWZcdThjZTlcdXsyN2RkY31cdTU5OWFcdTc3YzNcdTU5ZjBcdTQzNmVcdTM2ZDRcdThlMmFcdThlYTdcdXsyNGMwOX1cdThmMzBcdThm''@;'; put 'put ''NGFcdTQyZjRcdTZjNThcdTZmYmJcdXsyMjMyMX1cdTQ4OWJcdTZmNzlcdTZlOGJcdXsyMTdkYX1cdTliZTlcdTM2YjVcdXsyNDkyZn1cdTkwYmJcdTkwOTdcdTU1NzFcdTQ5MDZcdTkxYmJcdTk0MDRcdXsyOGE0Yn1cdTQwNjJcdXsyOGFmY31cdTk0MjdcdXsyOGMxZH1cdXsyOGMzYn1cdTg0''@;'; put 'put ''ZTVcdThhMmJcdTk1OTlcdTk1YTdcdTk1OTdcdTk1OTZcdXsyOGQzNH1cdTc0NDVcdTNlYzJcdXsyNDhmZn1cdXsyNGE0Mn1cdXsyNDNlYX1cdTNlZTdcdXsyMzIyNX1cdTk2OGZcdXsyOGVlN31cdXsyOGU2Nn1cdXsyOGU2NX1cdTNlY2NcdXsyNDllZH1cdXsyNGE3OH1cdXsyM2ZlZX1cdTc0''@;'; put 'put ''MTJcdTc0NmJcdTNlZmNcdTk3NDFcdXsyOTBiMH0iXSxbIjk2NDAiLCJcdTY4NDdcdTRhMWRcdXsyOTA5M31cdXsyNTdkZn1cdTk3NWRcdTkzNjhcdXsyODk4OX1cdXsyOGMyNn1cdXsyOGIyZn1cdXsyNjNiZX1cdTkyYmFcdTViMTFcdThiNjlcdTQ5M2NcdTczZjlcdXsyNDIxYn1cdTk3OWJc''@;'; put 'put ''dTk3NzFcdTk5MzhcdXsyMGYyNn1cdTVkYzFcdXsyOGJjNX1cdXsyNGFiMn1cdTk4MWZcdXsyOTRkYX1cdTkyZjZcdXsyOTVkN31cdTkxZTVcdTQ0YzBcdXsyOGI1MH1cdXsyNGE2N31cdXsyOGI2NH1cdTk4ZGNcdXsyOGE0NX1cdTNmMDBcdTkyMmFcdTQ5MjVcdTg0MTRcdTk5M2JcdTk5NGRc''@;'; put 'put ''dXsyN2IwNn1cdTNkZmRcdTk5OWJcdTRiNmZcdTk5YWFcdTlhNWNcdXsyOGI2NX1cdXsyNThjOH1cdTZhOGZcdTlhMjFcdTVhZmVcdTlhMmZcdXsyOThmMX1cdTRiOTBcdXsyOTk0OH1cdTk5YmNcdTRiYmRcdTRiOTdcdTkzN2RcdTU4NzJcdXsyMTMwMn1cdTU4MjJcdXsyNDliOH0iXSxbIjk2''@;'; put 'put ''YTEiLCJcdXsyMTRlOH1cdTc4NDRcdXsyMjcxZn1cdXsyM2RiOH1cdTY4YzVcdTNkN2RcdTk0NThcdTM5MjdcdTYxNTBcdXsyMjc4MX1cdXsyMjk2Yn1cdTYxMDdcdTljNGZcdTljNTNcdTljN2JcdTljMzVcdTljMTBcdTliN2ZcdTliY2ZcdXsyOWUyZH1cdTliOWZcdXsyYTFmNX1cdXsyYTBm''@;'; put 'put ''ZX1cdTlkMjFcdTRjYWVcdXsyNDEwNH1cdTllMThcdTRjYjBcdTlkMGNcdXsyYTFiNH1cdXsyYTBlZH1cdXsyYTBmM31cdXsyOTkyZn1cdTlkYTVcdTg0YmRcdXsyNmUxMn1cdXsyNmZkZn1cdXsyNmI4Mn1cdTg1ZmNcdTQ1MzNcdXsyNmRhNH1cdXsyNmU4NH1cdXsyNmRmMH1cdTg0MjBcdTg1''@;'; put 'put ''ZWVcdXsyNmUwMH1cdXsyMzdkN31cdXsyNjA2NH1cdTc5ZTJcdXsyMzU5Y31cdXsyMzY0MH1cdTQ5MmRcdXsyNDlkZX1cdTNkNjJcdTkzZGJcdTkyYmVcdTkzNDhcdXsyMDJiZn1cdTc4YjlcdTkyNzdcdTk0NGRcdTRmZTRcdTM0NDBcdTkwNjRcdXsyNTU1ZH1cdTc4M2RcdTc4NTRcdTc4YjZc''@;'; put 'put ''dTc4NGJcdXsyMTc1N31cdXsyMzFjOX1cdXsyNDk0MX1cdTM2OWFcdTRmNzJcdTZmZGFcdTZmZDlcdTcwMWVcdTcwMWVcdTU0MTRcdXsyNDFiNX1cdTU3YmJcdTU4ZjNcdTU3OGFcdTlkMTZcdTU3ZDdcdTcxMzRcdTM0YWZcdXsyNDFhY31cdTcxZWJcdXsyNmM0MH1cdXsyNGY5N31cdTViMjhc''@;'; put 'put ''dXsyMTdiNX1cdXsyOGE0OX0iXSxbIjk3NDAiLCJcdTYxMGNcdTVhY2VcdTVhMGJcdTQyYmNcdXsyNDQ4OH1cdTM3MmNcdTRiN2JcdXsyODlmY31cdTkzYmJcdTkzYjhcdXsyMThkNn1cdXsyMGYxZH1cdTg0NzJcdXsyNmNjMH1cdXsyMTQxM31cdXsyNDJmYX1cdXsyMmMyNn1cdXsyNDNjMX1c''@;'; put 'put ''dTU5OTRcdXsyM2RiN31cdXsyNjc0MX1cdTdkYThcdXsyNjE1Yn1cdXsyNjBhNH1cdXsyNDliOX1cdXsyNDk4Yn1cdXsyODlmYX1cdTkyZTVcdTczZTJcdTNlZTlcdTc0YjRcdXsyOGI2M31cdXsyMTg5Zn1cdTNlZTFcdXsyNGFiM31cdTZhZDhcdTczZjNcdTczZmJcdTNlZDZcdXsyNGEzZX1c''@;'; put 'put ''dXsyNGE5NH1cdXsyMTdkOX1cdXsyNGE2Nn1cdXsyMDNhN31cdXsyMTQyNH1cdXsyNDllNX1cdTc0NDhcdXsyNDkxNn1cdTcwYTVcdXsyNDk3Nn1cdTkyODRcdTczZTZcdTkzNWZcdXsyMDRmZX1cdTkzMzFcdXsyOGFjZX1cdXsyOGExNn1cdTkzODZcdXsyOGJlN31cdXsyNTVkNX1cdTQ5MzVc''@;'; put 'put ''dXsyOGE4Mn1cdTcxNmIiXSxbIjk3YTEiLCJcdXsyNDk0M31cdXsyMGNmZn1cdTU2YTRcdXsyMDYxYX1cdXsyMGJlYn1cdXsyMGNiOH1cdTU1MDJcdTc5YzRcdXsyMTdmYX1cdTdkZmVcdXsyMTZjMn1cdXsyNGE1MH1cdXsyMTg1Mn1cdTQ1MmVcdTk0MDFcdTM3MGFcdXsyOGFjMH1cdXsyNDlh''@;'; put 'put ''ZH1cdTU5YjBcdXsyMThiZn1cdXsyMTg4M31cdXsyNzQ4NH1cdTVhYTFcdTM2ZTJcdXsyM2Q1Yn1cdTM2YjBcdTkyNWZcdTVhNzlcdXsyOGE4MX1cdXsyMTg2Mn1cdTkzNzRcdTNjY2RcdXsyMGFiNH1cdTRhOTZcdTM5OGFcdTUwZjRcdTNkNjlcdTNkNGNcdXsyMTM5Y31cdTcxNzVcdTQyZmJc''@;'; put 'put ''dXsyODIxOH1cdTZlMGZcdXsyOTBlNH1cdTQ0ZWJcdTZkNTdcdXsyN2U0Zn1cdTcwNjdcdTZjYWZcdTNjZDZcdXsyM2ZlZH1cdXsyM2UyZH1cdTZlMDJcdTZmMGNcdTNkNmZcdXsyMDNmNX1cdTc1NTFcdTM2YmNcdTM0YzhcdTQ2ODBcdTNlZGFcdTQ4NzFcdTU5YzRcdTkyNmVcdTQ5M2VcdThm''@;'; put 'put ''NDFcdXsyOGMxY31cdXsyNmJjMH1cdTU4MTJcdTU3YzhcdTM2ZDZcdXsyMTQ1Mn1cdTcwZmVcdXsyNDM2Mn1cdXsyNGE3MX1cdXsyMmZlM31cdXsyMTJiMH1cdXsyMjNiZH1cdTY4YjlcdTY5NjdcdXsyMTM5OH1cdXsyMzRlNX1cdXsyN2JmNH1cdXsyMzZkZn1cdXsyOGE4M31cdXsyMzdkNn1c''@;'; put 'put ''dXsyMzNmYX1cdXsyNGM5Zn1cdTZhMWFcdXsyMzZhZH1cdXsyNmNiN31cdTg0M2VcdTQ0ZGZcdTQ0Y2UiXSxbIjk4NDAiLCJcdXsyNmQyNn1cdXsyNmQ1MX1cdXsyNmM4Mn1cdXsyNmZkZX1cdTZmMTdcdXsyNzEwOX1cdTgzM2RcdXsyMTczYX1cdTgzZWRcdXsyNmM4MH1cdXsyNzA1M31cdXsy''@;'; put 'put ''MTdkYn1cdTU5ODlcdTVhODJcdXsyMTdiM31cdTVhNjFcdTVhNzFcdXsyMTkwNX1cdXsyNDFmY31cdTM3MmRcdTU5ZWZcdXsyMTczY31cdTM2YzdcdTcxOGVcdTkzOTBcdTY2OWFcdXsyNDJhNX1cdTVhNmVcdTVhMmJcdXsyNDI5M31cdTZhMmJcdXsyM2VmOX1cdXsyNzczNn1cdXsyNDQ1Yn1c''@;'; put 'put ''dXsyNDJjYX1cdTcxMWRcdXsyNDI1OX1cdXsyODllMX1cdTRmYjBcdXsyNmQyOH1cdTVjYzJcdXsyNDRjZX1cdXsyN2U0ZH1cdXsyNDNiZH1cdTZhMGNcdXsyNDI1Nn1cdXsyMTMwNH1cdTcwYTZcdTcxMzNcdXsyNDNlOX1cdTNkYTVcdTZjZGZcdXsyZjgyNX1cdXsyNGE0Zn1cdTdlNjVcdTU5''@;'; put 'put ''ZWJcdTVkMmZcdTNkZjNcdTVmNWNcdXsyNGE1ZH1cdXsyMTdkZn1cdTdkYTRcdTg0MjYiXSxbIjk4YTEiLCJcdTU0ODVcdXsyM2FmYX1cdXsyMzMwMH1cdXsyMDIxNH1cdTU3N2VcdXsyMDhkNX1cdXsyMDYxOX1cdTNmZTVcdXsyMWY5ZX1cdXsyYTJiNn1cdTcwMDNcdXsyOTE1Yn1cdTVkNzBc''@;'; put 'put ''dTczOGZcdTdjZDNcdXsyOGE1OX1cdXsyOTQyMH1cdTRmYzhcdTdmZTdcdTcyY2RcdTczMTBcdXsyN2FmNH1cdTczMzhcdTczMzlcdXsyNTZmNn1cdTczNDFcdTczNDhcdTNlYTlcdXsyN2IxOH1cdTkwNmNcdTcxZjVcdXsyNDhmMn1cdTczZTFcdTgxZjZcdTNlY2FcdTc3MGNcdTNlZDFcdTZj''@;'; put 'put ''YTJcdTU2ZmRcdTc0MTlcdTc0MWVcdTc0MWZcdTNlZTJcdTNlZjBcdTNlZjRcdTNlZmFcdTc0ZDNcdTNmMGVcdTNmNTNcdTc1NDJcdTc1NmRcdTc1NzJcdTc1OGRcdTNmN2NcdTc1YzhcdTc1ZGNcdTNmYzBcdTc2NGRcdTNmZDdcdTc2NzRcdTNmZGNcdTc2N2FcdXsyNGY1Y31cdTcxODhcdTU2''@;'; put 'put ''MjNcdTg5ODBcdTU4NjlcdTQwMWRcdTc3NDNcdTQwMzlcdTY3NjFcdTQwNDVcdTM1ZGJcdTc3OThcdTQwNmFcdTQwNmZcdTVjNWVcdTc3YmVcdTc3Y2JcdTU4ZjJcdTc4MThcdTcwYjlcdTc4MWNcdTQwYThcdTc4MzlcdTc4NDdcdTc4NTFcdTc4NjZcdTg0NDhcdXsyNTUzNX1cdTc5MzNcdTY4''@;'; put 'put ''MDNcdTc5MzJcdTQxMDMiXSxbIjk5NDAiLCJcdTQxMDlcdTc5OTFcdTc5OTlcdThmYmJcdTdhMDZcdThmYmNcdTQxNjdcdTdhOTFcdTQxYjJcdTdhYmNcdTgyNzlcdTQxYzRcdTdhY2ZcdTdhZGJcdTQxY2ZcdTRlMjFcdTdiNjJcdTdiNmNcdTdiN2JcdTdjMTJcdTdjMWJcdTQyNjBcdTQyN2Fc''@;'; put 'put ''dTdjN2JcdTdjOWNcdTQyOGNcdTdjYjhcdTQyOTRcdTdjZWRcdThmOTNcdTcwYzBcdXsyMGNjZn1cdTdkY2ZcdTdkZDRcdTdkZDBcdTdkZmRcdTdmYWVcdTdmYjRcdTcyOWZcdTQzOTdcdTgwMjBcdTgwMjVcdTdiMzlcdTgwMmVcdTgwMzFcdTgwNTRcdTNkY2NcdTU3YjRcdTcwYTBcdTgwYjdc''@;'; put 'put ''dTgwZTlcdTQzZWRcdTgxMGNcdTczMmFcdTgxMGVcdTgxMTJcdTc1NjBcdTgxMTRcdTQ0MDFcdTNiMzlcdTgxNTZcdTgxNTlcdTgxNWEiXSxbIjk5YTEiLCJcdTQ0MTNcdTU4M2FcdTgxN2NcdTgxODRcdTQ0MjVcdTgxOTNcdTQ0MmRcdTgxYTVcdTU3ZWZcdTgxYzFcdTgxZTRcdTgyNTRcdTQ0''@;'; put 'put ''OGZcdTgyYTZcdTgyNzZcdTgyY2FcdTgyZDhcdTgyZmZcdTQ0YjBcdTgzNTdcdTk2NjlcdTY5OGFcdTg0MDVcdTcwZjVcdTg0NjRcdTYwZTNcdTg0ODhcdTQ1MDRcdTg0YmVcdTg0ZTFcdTg0ZjhcdTg1MTBcdTg1MzhcdTg1NTJcdTQ1M2JcdTg1NmZcdTg1NzBcdTg1ZTBcdTQ1NzdcdTg2NzJc''@;'; put 'put ''dTg2OTJcdTg2YjJcdTg2ZWZcdTk2NDVcdTg3OGJcdTQ2MDZcdTQ2MTdcdTg4YWVcdTg4ZmZcdTg5MjRcdTg5NDdcdTg5OTFcdXsyNzk2N31cdThhMjlcdThhMzhcdThhOTRcdThhYjRcdThjNTFcdThjZDRcdThjZjJcdThkMWNcdTQ3OThcdTU4NWZcdThkYzNcdTQ3ZWRcdTRlZWVcdThlM2Fc''@;'; put 'put ''dTU1ZDhcdTU3NTRcdThlNzFcdTU1ZjVcdThlYjBcdTQ4MzdcdThlY2VcdThlZTJcdThlZTRcdThlZWRcdThlZjJcdThmYjdcdThmYzFcdThmY2FcdThmY2NcdTkwMzNcdTk5YzRcdTQ4YWRcdTk4ZTBcdTkyMTNcdTQ5MWVcdTkyMjhcdTkyNThcdTkyNmJcdTkyYjFcdTkyYWVcdTkyYmYiXSxb''@;'; put 'put ''IjlhNDAiLCJcdTkyZTNcdTkyZWJcdTkyZjNcdTkyZjRcdTkyZmRcdTkzNDNcdTkzODRcdTkzYWRcdTQ5NDVcdTQ5NTFcdTllYmZcdTk0MTdcdTUzMDFcdTk0MWRcdTk0MmRcdTk0M2VcdTQ5NmFcdTk0NTRcdTk0NzlcdTk1MmRcdTk1YTJcdTQ5YTdcdTk1ZjRcdTk2MzNcdTQ5ZTVcdTY3YTBc''@;'; put 'put ''dTRhMjRcdTk3NDBcdTRhMzVcdTk3YjJcdTk3YzJcdTU2NTRcdTRhZTRcdTYwZThcdTk4YjlcdTRiMTlcdTk4ZjFcdTU4NDRcdTk5MGVcdTk5MTlcdTUxYjRcdTk5MWNcdTk5MzdcdTk5NDJcdTk5NWRcdTk5NjJcdTRiNzBcdTk5YzVcdTRiOWRcdTlhM2NcdTliMGZcdTdhODNcdTliNjlcdTli''@;'; put 'put ''ODFcdTliZGRcdTliZjFcdTliZjRcdTRjNmRcdTljMjBcdTM3NmZcdXsyMWJjMn1cdTlkNDlcdTljM2EiXSxbIjlhYTEiLCJcdTllZmVcdTU2NTBcdTlkOTNcdTlkYmRcdTlkYzBcdTlkZmNcdTk0ZjZcdThmYjZcdTllN2JcdTllYWNcdTllYjFcdTllYmRcdTllYzZcdTk0ZGNcdTllZTJcdTll''@;'; put 'put ''ZjFcdTllZjhcdTdhYzhcdTlmNDRcdXsyMDA5NH1cdXsyMDJiN31cdXsyMDNhMH1cdTY5MWFcdTk0YzNcdTU5YWNcdXsyMDRkN31cdTU4NDBcdTk0YzFcdTM3YjlcdXsyMDVkNX1cdXsyMDYxNX1cdXsyMDY3Nn1cdXsyMTZiYX1cdTU3NTdcdTcxNzNcdXsyMGFjMn1cdXsyMGFjZH1cdXsyMGJi''@;'; put 'put ''Zn1cdTU0NmFcdXsyZjgzYn1cdXsyMGJjYn1cdTU0OWVcdXsyMGJmYn1cdXsyMGMzYn1cdXsyMGM1M31cdXsyMGM2NX1cdXsyMGM3Y31cdTYwZTdcdXsyMGM4ZH1cdTU2N2FcdXsyMGNiNX1cdXsyMGNkZH1cdXsyMGNlZH1cdXsyMGQ2Zn1cdXsyMGRiMn1cdXsyMGRjOH1cdTY5NTVcdTljMmZc''@;'; put 'put ''dTg3YTVcdXsyMGUwNH1cdXsyMGUwZX1cdXsyMGVkN31cdXsyMGY5MH1cdXsyMGYyZH1cdXsyMGU3M31cdTVjMjBcdXsyMGZiY31cdTVlMGJcdXsyMTA1Y31cdXsyMTA0Zn1cdXsyMTA3Nn1cdTY3MWVcdXsyMTA3Yn1cdXsyMTA4OH1cdXsyMTA5Nn1cdTM2NDdcdXsyMTBiZn1cdXsyMTBkM31c''@;'; put 'put ''dXsyMTEyZn1cdXsyMTEzYn1cdTUzNjRcdTg0YWRcdXsyMTJlM31cdXsyMTM3NX1cdXsyMTMzNn1cdThiODFcdXsyMTU3N31cdXsyMTYxOX1cdXsyMTdjM31cdXsyMTdjN31cdTRlNzhcdTcwYmJcdXsyMTgyZH1cdXsyMTk2YX0iXSxbIjliNDAiLCJcdXsyMWEyZH1cdXsyMWE0NX1cdXsyMWMy''@;'; put 'put ''YX1cdXsyMWM3MH1cdXsyMWNhY31cdXsyMWVjOH1cdTYyYzNcdXsyMWVkNX1cdXsyMWYxNX1cdTcxOThcdTY4NTVcdXsyMjA0NX1cdTY5ZTlcdTM2YzhcdXsyMjI3Y31cdXsyMjNkN31cdXsyMjNmYX1cdXsyMjcyYX1cdXsyMjg3MX1cdXsyMjk0Zn1cdTgyZmRcdXsyMjk2N31cdXsyMjk5M31c''@;'; put 'put ''dXsyMmFkNX1cdTg5YTVcdXsyMmFlOH1cdThmYTBcdXsyMmIwZX1cdTk3YjhcdXsyMmIzZn1cdTk4NDdcdTlhYmRcdXsyMmM0Y30iXSxbIjliNjIiLCJcdXsyMmM4OH1cdXsyMmNiN31cdXsyNWJlOH1cdXsyMmQwOH1cdXsyMmQxMn1cdXsyMmRiN31cdXsyMmQ5NX1cdXsyMmU0Mn1cdXsyMmY3''@;'; put 'put ''NH1cdXsyMmZjY31cdXsyMzAzM31cdXsyMzA2Nn1cdXsyMzMxZn1cdXsyMzNkZX1cdTVmYjFcdTY2NDhcdTY2YmZcdXsyN2E3OX1cdXsyMzU2N31cdXsyMzVmM31cdTcyMDFcdXsyNDliYX1cdTc3ZDdcdXsyMzYxYX1cdXsyMzcxNn1cdTdlODdcdXsyMDM0Nn1cdTU4YjVcdTY3MGUiXSxbIjli''@;'; put 'put ''YTEiLCJcdTY5MThcdXsyM2FhN31cdXsyNzY1N31cdXsyNWZlMn1cdXsyM2UxMX1cdXsyM2ViOX1cdXsyNzVmZX1cdXsyMjA5YX1cdTQ4ZDBcdTRhYjhcdXsyNDExOX1cdXsyOGE5YX1cdXsyNDJlZX1cdXsyNDMwZH1cdXsyNDAzYn1cdXsyNDMzNH1cdXsyNDM5Nn1cdXsyNGE0NX1cdXsyMDVj''@;'; put 'put ''YX1cdTUxZDJcdXsyMDYxMX1cdTU5OWZcdXsyMWVhOH1cdTNiYmVcdXsyM2NmZn1cdXsyNDQwNH1cdXsyNDRkNn1cdTU3ODhcdXsyNDY3NH1cdTM5OWJcdXsyNDcyZn1cdXsyODVlOH1cdXsyOTljOX1cdTM3NjJcdXsyMjFjM31cdThiNWVcdXsyOGI0ZX1cdTk5ZDZcdXsyNDgxMn1cdXsyNDhm''@;'; put 'put ''Yn1cdXsyNGExNX1cdTcyMDlcdXsyNGFjMH1cdXsyMGM3OH1cdTU5NjVcdXsyNGVhNX1cdXsyNGY4Nn1cdXsyMDc3OX1cdThlZGFcdXsyNTAyY31cdTUyOGZcdTU3M2ZcdTcxNzFcdXsyNTI5OX1cdXsyNTQxOX1cdXsyM2Y0YX1cdXsyNGFhN31cdTU1YmNcdXsyNTQ0Nn1cdXsyNTQ2ZX1cdXsy''@;'; put 'put ''NmI1Mn1cdTkxZDRcdTM0NzNcdXsyNTUzZn1cdXsyNzYzMn1cdXsyNTU1ZX1cdTQ3MThcdXsyNTU2Mn1cdXsyNTU2Nn1cdXsyNTdjN31cdXsyNDkzZn1cdXsyNTg1ZH1cdTUwNjZcdTM0ZmJcdXsyMzNjY31cdTYwZGVcdXsyNTkwM31cdTQ3N2NcdXsyODk0OH1cdXsyNWFhZX1cdXsyNWI4OX1c''@;'; put 'put ''dXsyNWMwNn1cdXsyMWQ5MH1cdTU3YTFcdTcxNTFcdTZmYjZcdXsyNjEwMn1cdXsyN2MxMn1cdTkwNTZcdXsyNjFiMn1cdXsyNGY5YX1cdThiNjJcdXsyNjQwMn1cdXsyNjQ0YX0iXSxbIjljNDAiLCJcdTVkNWJcdXsyNmJmN31cdThmMzZcdXsyNjQ4NH1cdXsyMTkxY31cdThhZWFcdXsyNDlm''@;'; put 'put ''Nn1cdXsyNjQ4OH1cdXsyM2ZlZn1cdXsyNjUxMn1cdTRiYzBcdXsyNjViZn1cdXsyNjZiNX1cdXsyMjcxYn1cdTk0NjVcdXsyNTdlMX1cdTYxOTVcdTVhMjdcdXsyZjhjZH1cdTRmYmJcdTU2YjlcdXsyNDUyMX1cdXsyNjZmY31cdTRlNmFcdXsyNDkzNH1cdTk2NTZcdTZkOGZcdXsyNmNiZH1c''@;'; put 'put ''dTM2MThcdTg5NzdcdXsyNjc5OX1cdXsyNjg2ZX1cdXsyNjQxMX1cdXsyNjg1ZX1cdTcxZGZcdXsyNjhjN31cdTdiNDJcdXsyOTBjMH1cdXsyMGExMX1cdXsyNjkyNn1cdTkxMDRcdXsyNjkzOX1cdTdhNDVcdTlkZjBcdXsyNjlmYX1cdTlhMjZcdXsyNmEyZH1cdTM2NWZcdXsyNjQ2OX1cdXsy''@;'; put 'put ''MDAyMX1cdTc5ODNcdXsyNmEzNH1cdXsyNmI1Yn1cdTVkMmNcdXsyMzUxOX1cdTgzY2ZcdXsyNmI5ZH1cdTQ2ZDBcdXsyNmNhNH1cdTc1M2JcdTg4NjVcdXsyNmRhZX1cdTU4YjYiXSxbIjljYTEiLCJcdTM3MWNcdXsyMjU4ZH1cdXsyNzA0Yn1cdXsyNzFjZH1cdTNjNTRcdXsyNzI4MH1cdXsy''@;'; put 'put ''NzI4NX1cdTkyODFcdXsyMjE3YX1cdXsyNzI4Yn1cdTkzMzBcdXsyNzJlNn1cdXsyNDlkMH1cdTZjMzlcdTk0OWZcdXsyNzQ1MH1cdXsyMGVmOH1cdTg4MjdcdTg4ZjVcdXsyMjkyNn1cdXsyODQ3M31cdXsyMTdiMX1cdTZlYjhcdXsyNGEyYX1cdXsyMTgyMH1cdTM5YTRcdTM2YjlcdTVjMTBc''@;'; put 'put ''dTc5ZTNcdTQ1M2ZcdTY2YjZcdXsyOWNhZH1cdXsyOThhNH1cdTg5NDNcdXsyNzdjY31cdXsyNzg1OH1cdTU2ZDZcdTQwZGZcdXsyMTYwYX1cdTM5YTFcdXsyMzcyZn1cdXsyODBlOH1cdXsyMTNjNX1cdTcxYWRcdTgzNjZcdXsyNzlkZH1cdXsyOTFhOH1cdTVhNjdcdTRjYjdcdXsyNzBhZn1c''@;'; put 'put ''dXsyODlhYn1cdXsyNzlmZH1cdXsyN2EwYX1cdXsyN2IwYn1cdXsyN2Q2Nn1cdXsyNDE3YX1cdTdiNDNcdTc5N2VcdXsyODAwOX1cdTZmYjVcdXsyYTJkZn1cdTZhMDNcdXsyODMxOH1cdTUzYTJcdXsyNmUwN31cdTkzYmZcdTY4MzZcdTk3NWRcdXsyODE2Zn1cdXsyODAyM31cdXsyNjliNX1c''@;'; put 'put ''dXsyMTNlZH1cdXsyMzIyZn1cdXsyODA0OH1cdTVkODVcdXsyOGMzMH1cdXsyODA4M31cdTU3MTVcdTk4MjNcdXsyODk0OX1cdTVkYWJcdXsyNDk4OH1cdTY1YmVcdTY5ZDVcdTUzZDJcdXsyNGFhNX1cdXsyM2Y4MX1cdTNjMTFcdTY3MzZcdXsyODA5MH1cdXsyODBmNH1cdXsyODEyZX1cdXsy''@;'; put 'put ''MWZhMX1cdXsyODE0Zn0iXSxbIjlkNDAiLCJcdXsyODE4OX1cdXsyODFhZn1cdXsyODIxYX1cdXsyODMwNn1cdXsyODMyZn1cdXsyODM4YX1cdTM1Y2FcdXsyODQ2OH1cdXsyODZhYX1cdTQ4ZmFcdTYzZTZcdXsyODk1Nn1cdTc4MDhcdTkyNTVcdXsyODliOH1cdTQzZjJcdXsyODllN31cdTQz''@;'; put 'put ''ZGZcdXsyODllOH1cdXsyOGI0Nn1cdXsyOGJkNH1cdTU5ZjhcdXsyOGMwOX1cdThmMGJcdXsyOGZjNX1cdXsyOTBlY31cdTdiNTFcdXsyOTExMH1cdXsyOTEzY31cdTNkZjdcdXsyOTE1ZX1cdXsyNGFjYX1cdThmZDBcdTcyOGZcdTU2OGJcdXsyOTRlN31cdXsyOTVlOX1cdXsyOTViMH1cdXsy''@;'; put 'put ''OTViOH1cdXsyOTczMn1cdXsyOThkMX1cdXsyOTk0OX1cdXsyOTk2YX1cdXsyOTljM31cdXsyOWEyOH1cdXsyOWIwZX1cdXsyOWQ1YX1cdXsyOWQ5Yn1cdTdlOWZcdXsyOWVmOH1cdXsyOWYyM31cdTRjYTRcdTk1NDdcdXsyYTI5M31cdTcxYTJcdXsyYTJmZn1cdTRkOTFcdTkwMTJcdXsyYTVj''@;'; put 'put ''Yn1cdTRkOWNcdXsyMGM5Y31cdThmYmVcdTU1YzEiXSxbIjlkYTEiLCJcdThmYmFcdXsyMjRiMH1cdThmYjlcdXsyNGE5M31cdTQ1MDlcdTdlN2ZcdTZmNTZcdTZhYjFcdTRlZWFcdTM0ZTRcdXsyOGIyY31cdXsyNzg5ZH1cdTM3M2FcdThlODBcdXsyMTdmNX1cdXsyODAyNH1cdXsyOGI2Y31c''@;'; put 'put ''dXsyOGI5OX1cdXsyN2EzZX1cdXsyNjZhZn1cdTNkZWJcdXsyNzY1NX1cdXsyM2NiN31cdXsyNTYzNX1cdXsyNTk1Nn1cdTRlOWFcdXsyNWU4MX1cdXsyNjI1OH1cdTU2YmZcdXsyMGU2ZH1cdThlMGVcdTViNmRcdXsyM2U4OH1cdXsyNGM5ZX1cdTYzZGVcdTYyZDBcdXsyMTdmNn1cdXsyMTg3''@;'; put 'put ''Yn1cdTY1MzBcdTU2MmRcdXsyNWM0YX1cdTU0MWFcdXsyNTMxMX1cdTNkYzZcdXsyOWQ5OH1cdTRjN2RcdTU2MjJcdTU2MWVcdTdmNDlcdXsyNWVkOH1cdTU5NzVcdXsyM2Q0MH1cdTg3NzBcdTRlMWNcdXsyMGZlYX1cdXsyMGQ0OX1cdXsyMzZiYX1cdTgxMTdcdTlkNWVcdThkMThcdTc2M2Jc''@;'; put 'put ''dTljNDVcdTc2NGVcdTc3YjlcdTkzNDVcdTU0MzJcdTgxNDhcdTgyZjdcdTU2MjVcdTgxMzJcdTg0MThcdTgwYmRcdTU1ZWFcdTc5NjJcdTU2NDNcdTU0MTZcdXsyMGU5ZH1cdTM1Y2VcdTU2MDVcdTU1ZjFcdTY2ZjFcdXsyODJlMn1cdTM2MmRcdTc1MzRcdTU1ZjBcdTU1YmFcdTU0OTdcdTU1''@;'; put 'put ''NzJcdXsyMGM0MX1cdXsyMGM5Nn1cdTVlZDBcdXsyNTE0OH1cdXsyMGU3Nn1cdXsyMmM2Mn0iXSxbIjllNDAiLCJcdXsyMGVhMn1cdTllYWJcdTdkNWFcdTU1ZGVcdXsyMTA3NX1cdTYyOWRcdTk3NmRcdTU0OTRcdThjY2RcdTcxZjZcdTkxNzZcdTYzZmNcdTYzYjlcdTYzZmVcdTU1NjlcdXsy''@;'; put 'put ''MmI0M31cdTljNzJcdXsyMmViM31cdTUxOWFcdTM0ZGZcdXsyMGRhN31cdTUxYTdcdTU0NGRcdTU1MWVcdTU1MTNcdTc2NjZcdThlMmRcdXsyNjg4YX1cdTc1YjFcdTgwYjZcdTg4MDRcdTg3ODZcdTg4YzdcdTgxYjZcdTg0MWNcdXsyMTBjMX1cdTQ0ZWNcdTczMDRcdXsyNDcwNn1cdTViOTBc''@;'; put 'put ''dTgzMGJcdXsyNjg5M31cdTU2N2JcdXsyMjZmNH1cdXsyN2QyZn1cdXsyNDFhM31cdXsyN2Q3M31cdXsyNmVkMH1cdXsyNzJiNn1cdTkxNzBcdXsyMTFkOX1cdTkyMDhcdXsyM2NmY31cdXsyYTZhOX1cdXsyMGVhY31cdXsyMGVmOX1cdTcyNjZcdXsyMWNhMn1cdTQ3NGVcdXsyNGZjMn1cdXsy''@;'; put 'put ''N2ZmOX1cdXsyMGZlYn1cdTQwZmEiXSxbIjllYTEiLCJcdTljNWRcdTY1MWZcdXsyMmRhMH1cdTQ4ZjNcdXsyNDdlMH1cdXsyOWQ3Y31cdXsyMGZlY31cdXsyMGUwYX1cdTYwNjJcdXsyNzVhM31cdXsyMGZlZH0iXSxbIjllYWQiLCJcdXsyNjA0OH1cdXsyMTE4N31cdTcxYTNcdTdlOGVcdTlk''@;'; put 'put ''NTBcdTRlMWFcdTRlMDRcdTM1NzdcdTViMGRcdTZjYjJcdTUzNjdcdTM2YWNcdTM5ZGNcdTUzN2RcdTM2YTVcdXsyNDYxOH1cdTU4OWFcdXsyNGI2ZX1cdTgyMmRcdTU0NGJcdTU3YWFcdXsyNWE5NX1cdXsyMDk3OX0iXSxbIjllYzUiLCJcdTNhNTJcdXsyMjQ2NX1cdTczNzRcdXsyOWVhY31c''@;'; put 'put ''dTRkMDlcdTliZWRcdXsyM2NmZX1cdXsyOWYzMH1cdTRjNWJcdXsyNGZhOX1cdXsyOTU5ZX1cdXsyOWZkZX1cdTg0NWNcdXsyM2RiNn1cdXsyNzJiMn1cdXsyNjdiM31cdXsyMzcyMH1cdTYzMmVcdTdkMjVcdXsyM2VmN31cdXsyM2UyY31cdTNhMmFcdTkwMDhcdTUyY2NcdTNlNzRcdTM2N2Fc''@;'; put 'put ''dTQ1ZTlcdXsyMDQ4ZX1cdTc2NDBcdTVhZjBcdXsyMGViNn1cdTc4N2FcdXsyN2YyZX1cdTU4YTdcdTQwYmZcdTU2N2NcdTliOGJcdTVkNzRcdTc2NTRcdXsyYTQzNH1cdTllODVcdTRjZTFcdTc1ZjlcdTM3ZmJcdTYxMTlcdXsyMzBkYX1cdXsyNDNmMn0iXSxbIjllZjUiLCJcdTU2NWRcdXsy''@;'; put 'put ''MTJhOX1cdTU3YTdcdXsyNDk2M31cdXsyOWUwNn1cdTUyMzRcdXsyNzBhZX1cdTM1YWRcdTZjNGFcdTlkN2MiXSxbIjlmNDAiLCJcdTdjNTZcdTliMzlcdTU3ZGVcdXsyMTc2Y31cdTVjNTNcdTY0ZDNcdXsyOTRkMH1cdXsyNjMzNX1cdXsyNzE2NH1cdTg2YWRcdXsyMGQyOH1cdXsyNmQyMn1c''@;'; put 'put ''dXsyNGFlMn1cdXsyMGQ3MX0iXSxbIjlmNGYiLCJcdTUxZmVcdXsyMWYwZn1cdTVkOGVcdTk3MDNcdXsyMWRkMX1cdTllODFcdTkwNGNcdTdiMWZcdTliMDJcdTVjZDFcdTdiYTNcdTYyNjhcdTYzMzVcdTlhZmZcdTdiY2ZcdTliMmFcdTdjN2VcdTliMmVcdTdjNDJcdTdjODZcdTljMTVcdTdi''@;'; put 'put ''ZmNcdTliMDlcdTlmMTdcdTljMWJcdXsyNDkzZX1cdTlmNWFcdTU1NzNcdTViYzNcdTRmZmRcdTllOThcdTRmZjJcdTUyNjBcdTNlMDZcdTUyZDFcdTU3NjdcdTUwNTZcdTU5YjdcdTVlMTJcdTk3YzhcdTlkYWJcdThmNWNcdTU0NjlcdTk3YjRcdTk5NDBcdTk3YmFcdTUzMmNcdTYxMzAiXSxb''@;'; put 'put ''IjlmYTEiLCJcdTY5MmNcdTUzZGFcdTljMGFcdTlkMDJcdTRjM2JcdTk2NDFcdTY5ODBcdTUwYTZcdTc1NDZcdXsyMTc2ZH1cdTk5ZGFcdTUyNzMiXSxbIjlmYWUiLCJcdTkxNTlcdTk2ODFcdTkxNWMiXSxbIjlmYjIiLCJcdTkxNTFcdXsyOGU5N31cdTYzN2ZcdXsyNmQyM31cdTZhY2FcdTU2''@;'; put 'put ''MTFcdTkxOGVcdTc1N2FcdTYyODVcdXsyMDNmY31cdTczNGZcdTdjNzBcdXsyNWMyMX1cdXsyM2NmZH0iXSxbIjlmYzEiLCJcdXsyNDkxOX1cdTc2ZDZcdTliOWRcdTRlMmFcdXsyMGNkNH1cdTgzYmVcdTg4NDIiXSxbIjlmYzkiLCJcdTVjNGFcdTY5YzBcdTUwZWRcdTU3N2FcdTUyMWZcdTVk''@;'; put 'put ''ZjVcdTRlY2VcdTZjMzFcdXsyMDFmMn1cdTRmMzlcdTU0OWNcdTU0ZGFcdTUyOWFcdThkODJcdTM1ZmVcdTVmMGNcdTM1ZjMiXSxbIjlmZGIiLCJcdTZiNTJcdTkxN2NcdTlmYTVcdTliOTdcdTk4MmVcdTk4YjRcdTlhYmFcdTllYThcdTllODRcdTcxN2FcdTdiMTQiXSxbIjlmZTciLCJcdTZi''@;'; put 'put ''ZmFcdTg4MThcdTdmNzgiXSxbIjlmZWIiLCJcdTU2MjBcdXsyYTY0YX1cdThlNzdcdTlmNTMiXSxbIjlmZjAiLCJcdThkZDRcdThlNGZcdTllMWNcdThlMDFcdTYyODJcdXsyODM3ZH1cdThlMjhcdThlNzVcdTdhZDNcdXsyNGE3N31cdTdhM2VcdTc4ZDhcdTZjZWFcdThhNjdcdTc2MDciXSxb''@;'; put 'put ''ImEwNDAiLCJcdXsyOGE1YX1cdTlmMjZcdTZjY2VcdTg3ZDZcdTc1YzNcdXsyYTJiMn1cdTc4NTNcdXsyZjg0MH1cdThkMGNcdTcyZTJcdTczNzFcdThiMmRcdTczMDJcdTc0ZjFcdThjZWJcdXsyNGFiYn1cdTg2MmZcdTVmYmFcdTg4YTBcdTQ0YjciXSxbImEwNTUiLCJcdXsyMTgzYn1cdXsy''@;'; put 'put ''NmUwNX0iXSxbImEwNTgiLCJcdThhN2VcdXsyMjUxYn0iXSxbImEwNWIiLCJcdTYwZmRcdTc2NjdcdTlhZDdcdTlkNDRcdTkzNmVcdTliOGZcdTg3ZjUiXSxbImEwNjMiLCJcdTg4MGZcdThjZjdcdTczMmNcdTk3MjFcdTliYjBcdTM1ZDZcdTcyYjJcdTRjMDdcdTdjNTFcdTk5NGFcdXsyNjE1''@;'; put 'put ''OX1cdTYxNTlcdTRjMDRcdTllOTZcdTYxN2QiXSxbImEwNzMiLCJcdTU3NWZcdTYxNmZcdTYyYTZcdTYyMzlcdTYyY2VcdTNhNWNcdTYxZTJcdTUzYWFcdXsyMzNmNX1cdTYzNjRcdTY4MDJcdTM1ZDIiXSxbImEwYTEiLCJcdTVkNTdcdXsyOGJjMn1cdThmZGFcdXsyOGUzOX0iXSxbImEwYTYi''@;'; put 'put ''LCJcdTUwZDlcdXsyMWQ0Nn1cdTc5MDZcdTUzMzJcdTk2MzhcdXsyMGYzYn1cdTQwNjUiXSxbImEwYWUiLCJcdTc3ZmUiXSxbImEwYjAiLCJcdTdjYzJcdXsyNWYxYX1cdTdjZGFcdTdhMmRcdTgwNjZcdTgwNjNcdTdkNGRcdTc1MDVcdTc0ZjJcdTg5OTRcdTgyMWFcdTY3MGNcdTgwNjJcdXsy''@;'; put 'put ''NzQ4Nn1cdTgwNWJcdTc0ZjBcdTgxMDNcdTc3MjRcdTg5ODlcdXsyNjdjY31cdTc1NTNcdXsyNmVkMX1cdTg3YTlcdTg3Y2VcdTgxYzhcdTg3OGNcdThhNDlcdThjYWRcdThiNDNcdTc3MmJcdTc0ZjhcdTg0ZGFcdTM2MzVcdTY5YjJcdThkYTYiXSxbImEwZDQiLCJcdTg5YTlcdTc0NjhcdTZk''@;'; put 'put ''YjlcdTg3YzFcdXsyNDAxMX1cdTc0ZTdcdTNkZGJcdTcxNzZcdTYwYTRcdTYxOWNcdTNjZDFcdTcxNjJcdTYwNzciXSxbImEwZTIiLCJcdTdmNzFcdXsyOGIyZH1cdTcyNTBcdTYwZTlcdTRiN2VcdTUyMjBcdTNjMThcdXsyM2NjN31cdXsyNWVkN31cdXsyNzY1Nn1cdXsyNTUzMX1cdXsyMTk0''@;'; put 'put ''NH1cdXsyMTJmZX1cdXsyOTkwM31cdXsyNmRkY31cdXsyNzBhZH1cdTVjYzFcdXsyNjFhZH1cdXsyOGEwZn1cdXsyMzY3N31cdXsyMDBlZX1cdXsyNjg0Nn1cdXsyNGYwZX1cdTQ1NjJcdTViMWZcdXsyNjM0Y31cdTlmNTBcdTllYTZcdXsyNjI2Yn0iXSxbImEzYzAiLCJcdTI0MDAiLDMxLCJc''@;'; put 'put ''dTI0MjEiXSxbImM2YTEiLCJcdTI0NjAiLDksIlx1MjQ3NCIsOSwiXHUyMTcwIiw5LCJcdTRlMzZcdTRlM2ZcdTRlODVcdTRlYTBcdTUxODJcdTUxOTZcdTUxYWJcdTUyZjlcdTUzMzhcdTUzNjlcdTUzYjZcdTU5MGFcdTViODBcdTVkZGJcdTJmMzNcdTVlN2ZcdTVlZjRcdTVmNTBcdTVmNjFc''@;'; put 'put ''dTY1MzRcdTY1ZTBcdTc1OTJcdTc2NzZcdThmYjVcdTk2YjZceGE4XHUwMmM2XHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHVmZjNiXHVmZjNkXHUyNzNkXHUzMDQxIiwyM10sWyJjNzQwIiwiXHUzMDU5Iiw1OCwiXHUzMGExXHUz''@;'; put 'put ''MGEyXHUzMGEzXHUzMGE0Il0sWyJjN2ExIiwiXHUzMGE1Iiw4MSwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDRdLFsiYzg0MCIsIlx1MDQxYiIsMjYsIlx1MDQ1MVx1MDQzNiIsMjUsIlx1MjFlN1x1MjFiOFx1MjFiOVx1MzFjZlx1ezIwMGNjfVx1NGU1YVx1ezIwMDhhfVx1NTIwMlx1NDQ5''@;'; put 'put ''MSJdLFsiYzhhMSIsIlx1OWZiMFx1NTE4OFx1OWZiMVx1ezI3NjA3fSJdLFsiYzhjZCIsIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MzA5Ylx1MzA5Y1x1MmU4MFx1MmU4NFx1MmU4Nlx1MmU4N1x1MmU4OFx1MmU4YVx1MmU4Y1x1MmU4ZFx1MmU5NVx1MmU5''@;'; put 'put ''Y1x1MmU5ZFx1MmVhNVx1MmVhN1x1MmVhYVx1MmVhY1x1MmVhZVx1MmViNlx1MmViY1x1MmViZVx1MmVjNlx1MmVjYVx1MmVjY1x1MmVjZFx1MmVjZlx1MmVkNlx1MmVkN1x1MmVkZVx1MmVlMyJdLFsiYzhmNSIsIlx1MDI4M1x1MDI1MFx1MDI1Ylx1MDI1NFx1MDI3NVx1MDE1M1x4ZjhcdTAx''@;'; put 'put ''NGJcdTAyOGFcdTAyNmEiXSxbImY5ZmUiLCJcdWZmZWQiXSxbImZhNDAiLCJcdXsyMDU0N31cdTkyZGJcdXsyMDVkZn1cdXsyM2ZjNX1cdTg1NGNcdTQyYjVcdTczZWZcdTUxYjVcdTM2NDlcdXsyNDk0Mn1cdXsyODllNH1cdTkzNDRcdXsyMTlkYn1cdTgyZWVcdXsyM2NjOH1cdTc4M2NcdTY3''@;'; put 'put ''NDRcdTYyZGZcdXsyNDkzM31cdXsyODlhYX1cdXsyMDJhMH1cdXsyNmJiM31cdXsyMTMwNX1cdTRmYWJcdXsyMjRlZH1cdTUwMDhcdXsyNmQyOX1cdXsyN2E4NH1cdXsyMzYwMH1cdXsyNGFiMX1cdXsyMjUxM31cdTUwMjlcdXsyMDM3ZX1cdTVmYTRcdXsyMDM4MH1cdXsyMDM0N31cdTZlZGJc''@;'; put 'put ''dXsyMDQxZn1cdTUwN2RcdTUxMDFcdTM0N2FcdTUxMGVcdTk4NmNcdTM3NDNcdTg0MTZcdXsyNDlhNH1cdXsyMDQ4N31cdTUxNjBcdXsyMzNiNH1cdTUxNmFcdXsyMGJmZn1cdXsyMjBmY31cdXsyMDJlNX1cdXsyMjUzMH1cdXsyMDU4ZX1cdXsyMzIzM31cdXsyMTk4M31cdTViODJcdTg3N2Rc''@;'; put 'put ''dXsyMDViM31cdXsyM2M5OX1cdTUxYjJcdTUxYjgiXSxbImZhYTEiLCJcdTlkMzRcdTUxYzlcdTUxY2ZcdTUxZDFcdTNjZGNcdTUxZDNcdXsyNGFhNn1cdTUxYjNcdTUxZTJcdTUzNDJcdTUxZWRcdTgzY2RcdTY5M2VcdXsyMzcyZH1cdTVmN2JcdTUyMGJcdTUyMjZcdTUyM2NcdTUyYjVcdTUy''@;'; put 'put ''NTdcdTUyOTRcdTUyYjlcdTUyYzVcdTdjMTVcdTg1NDJcdTUyZTBcdTg2MGRcdXsyNmIxM31cdTUzMDVcdXsyOGFkZX1cdTU1NDlcdTZlZDlcdXsyM2Y4MH1cdXsyMDk1NH1cdXsyM2ZlY31cdTUzMzNcdTUzNDRcdXsyMGJlMn1cdTZjY2JcdXsyMTcyNn1cdTY4MWJcdTczZDVcdTYwNGFcdTNl''@;'; put 'put ''YWFcdTM4Y2NcdXsyMTZlOH1cdTcxZGRcdTQ0YTJcdTUzNmRcdTUzNzRcdXsyODZhYn1cdTUzN2VcdTUzN2ZcdXsyMTU5Nn1cdXsyMTYxM31cdTc3ZTZcdTUzOTNcdXsyOGE5Yn1cdTUzYTBcdTUzYWJcdTUzYWVcdTczYTdcdXsyNTc3Mn1cdTNmNTlcdTczOWNcdTUzYzFcdTUzYzVcdTZjNDlc''@;'; put 'put ''dTRlNDlcdTU3ZmVcdTUzZDlcdTNhYWJcdXsyMGI4Zn1cdTUzZTBcdXsyM2ZlYn1cdXsyMmRhM31cdTUzZjZcdXsyMGM3N31cdTU0MTNcdTcwNzlcdTU1MmJcdTY2NTdcdTZkNWJcdTU0NmRcdXsyNmI1M31cdXsyMGQ3NH1cdTU1NWRcdTU0OGZcdTU0YTRcdTQ3YTZcdXsyMTcwZH1cdXsyMGVk''@;'; put 'put ''ZH1cdTNkYjRcdXsyMGQ0ZH0iXSxbImZiNDAiLCJcdXsyODliY31cdXsyMjY5OH1cdTU1NDdcdTRjZWRcdTU0MmZcdTc0MTdcdTU1ODZcdTU1YTlcdTU2MDVcdXsyMThkN31cdXsyNDAzYX1cdTQ1NTJcdXsyNDQzNX1cdTY2YjNcdXsyMTBiNH1cdTU2MzdcdTY2Y2RcdXsyMzI4YX1cdTY2YTRc''@;'; put 'put ''dTY2YWRcdTU2NGRcdTU2NGZcdTc4ZjFcdTU2ZjFcdTk3ODdcdTUzZmVcdTU3MDBcdTU2ZWZcdTU2ZWRcdXsyOGI2Nn1cdTM2MjNcdXsyMTI0Zn1cdTU3NDZcdXsyNDFhNX1cdTZjNmVcdTcwOGJcdTU3NDJcdTM2YjFcdXsyNmM3ZX1cdTU3ZTZcdXsyMTQxNn1cdTU4MDNcdXsyMTQ1NH1cdXsy''@;'; put 'put ''NDM2M31cdTU4MjZcdXsyNGJmNX1cdTU4NWNcdTU4YWFcdTM1NjFcdTU4ZTBcdTU4ZGNcdXsyMTIzY31cdTU4ZmJcdTViZmZcdTU3NDNcdXsyYTE1MH1cdXsyNDI3OH1cdTkzZDNcdTM1YTFcdTU5MWZcdTY4YTZcdTM2YzNcdTZlNTkiXSxbImZiYTEiLCJcdXsyMTYzZX1cdTVhMjRcdTU1NTNc''@;'; put 'put ''dXsyMTY5Mn1cdTg1MDVcdTU5YzlcdXsyMGQ0ZX1cdXsyNmM4MX1cdXsyNmQyYX1cdXsyMTdkY31cdTU5ZDlcdXsyMTdmYn1cdXsyMTdiMn1cdXsyNmRhNn1cdTZkNzFcdXsyMTgyOH1cdXsyMTZkNX1cdTU5ZjlcdXsyNmU0NX1cdTVhYWJcdTVhNjNcdTM2ZTZcdXsyNDlhOX1cdTVhNzdcdTM3''@;'; put 'put ''MDhcdTVhOTZcdTc0NjVcdTVhZDNcdXsyNmZhMX1cdXsyMjU1NH1cdTNkODVcdXsyMTkxMX1cdTM3MzJcdXsyMTZiOH1cdTVlODNcdTUyZDBcdTViNzZcdTY1ODhcdTViN2NcdXsyN2EwZX1cdTQwMDRcdTQ4NWRcdXsyMDIwNH1cdTViZDVcdTYxNjBcdXsyMWEzNH1cdXsyNTljY31cdXsyMDVh''@;'; put 'put ''NX1cdTViZjNcdTViOWRcdTRkMTBcdTVjMDVcdXsyMWI0NH1cdTVjMTNcdTczY2VcdTVjMTRcdXsyMWNhNX1cdXsyNmIyOH1cdTVjNDlcdTQ4ZGRcdTVjODVcdTVjZTlcdTVjZWZcdTVkOGJcdXsyMWRmOX1cdXsyMWUzN31cdTVkMTBcdTVkMThcdTVkNDZcdXsyMWVhNH1cdTVjYmFcdTVkZDdc''@;'; put 'put ''dTgyZmNcdTM4MmRcdXsyNDkwMX1cdXsyMjA0OX1cdXsyMjE3M31cdTgyODdcdTM4MzZcdTNiYzJcdTVlMmVcdTZhOGFcdTVlNzVcdTVlN2FcdXsyNDRiY31cdXsyMGNkM31cdTUzYTZcdTRlYjdcdTVlZDBcdTUzYThcdXsyMTc3MX1cdTVlMDlcdTVlZjRcdXsyODQ4Mn0iXSxbImZjNDAiLCJc''@;'; put 'put ''dTVlZjlcdTVlZmJcdTM4YTBcdTVlZmNcdTY4M2VcdTk0MWJcdTVmMGRcdXsyMDFjMX1cdXsyZjg5NH1cdTNhZGVcdTQ4YWVcdXsyMTMzYX1cdTVmM2FcdXsyNjg4OH1cdXsyMjNkMH1cdTVmNThcdXsyMjQ3MX1cdTVmNjNcdTk3YmRcdXsyNmU2ZX1cdTVmNzJcdTkzNDBcdXsyOGEzNn1cdTVm''@;'; put 'put ''YTdcdTVkYjZcdTNkNWZcdXsyNTI1MH1cdXsyMWY2YX1cdXsyNzBmOH1cdXsyMjY2OH1cdTkxZDZcdXsyMDI5ZX1cdXsyOGEyOX1cdTYwMzFcdTY2ODVcdXsyMTg3N31cdTM5NjNcdTNkYzdcdTM2MzlcdTU3OTBcdXsyMjdiNH1cdTc5NzFcdTNlNDBcdTYwOWVcdTYwYTRcdTYwYjNcdXsyNDk4''@;'; put 'put ''Mn1cdXsyNDk4Zn1cdXsyN2E1M31cdTc0YTRcdTUwZTFcdTVhYTBcdTYxNjRcdTg0MjRcdTYxNDJcdXsyZjhhNn1cdXsyNmVkMn1cdTYxODFcdTUxZjRcdXsyMDY1Nn1cdTYxODdcdTViYWFcdXsyM2ZiN30iXSxbImZjYTEiLCJcdXsyMjg1Zn1cdTYxZDNcdXsyOGI5ZH1cdXsyOTk1ZH1cdTYx''@;'; put 'put ''ZDBcdTM5MzJcdXsyMjk4MH1cdXsyMjhjMX1cdTYwMjNcdTYxNWNcdTY1MWVcdTYzOGJcdXsyMDExOH1cdTYyYzVcdXsyMTc3MH1cdTYyZDVcdXsyMmUwZH1cdTYzNmNcdXsyNDlkZn1cdTNhMTdcdTY0MzhcdTYzZjhcdXsyMTM4ZX1cdXsyMTdmY31cdTY0OTBcdTZmOGFcdXsyMmUzNn1cdTk4''@;'; put 'put ''MTRcdXsyNDA4Y31cdXsyNTcxZH1cdTY0ZTFcdTY0ZTVcdTk0N2JcdTNhNjZcdTY0M2FcdTNhNTdcdTY1NGRcdTZmMTZcdXsyNGEyOH1cdXsyNGEyM31cdTY1ODVcdTY1NmRcdTY1NWZcdXsyMzA3ZX1cdTY1YjVcdXsyNDk0MH1cdTRiMzdcdTY1ZDFcdTQwZDhcdXsyMTgyOX1cdTY1ZTBcdTY1''@;'; put 'put ''ZTNcdTVmZGZcdXsyMzQwMH1cdTY2MThcdXsyMzFmN31cdXsyMzFmOH1cdTY2NDRcdXsyMzFhNH1cdXsyMzFhNX1cdTY2NGJcdXsyMGU3NX1cdTY2NjdcdXsyNTFlNn1cdTY2NzNcdTY2NzRcdXsyMWUzZH1cdXsyMzIzMX1cdXsyODVmNH1cdXsyMzFjOH1cdXsyNTMxM31cdTc3YzVcdXsyMjhm''@;'; put 'put ''N31cdTk5YTRcdTY3MDJcdXsyNDM5Y31cdXsyNGEyMX1cdTNiMmJcdTY5ZmFcdXsyMzdjMn1cdTY3NWVcdTY3NjdcdTY3NjJcdXsyNDFjZH1cdXsyOTBlZH1cdTY3ZDdcdTQ0ZTlcdTY4MjJcdTZlNTBcdTkyM2NcdTY4MDFcdXsyMzNlNn1cdXsyNmRhMH1cdTY4NWQiXSxbImZkNDAiLCJcdXsy''@;'; put 'put ''MzQ2Zn1cdTY5ZTFcdTZhMGJcdXsyOGFkZn1cdTY5NzNcdTY4YzNcdXsyMzVjZH1cdTY5MDFcdTY5MDBcdTNkMzJcdTNhMDFcdXsyMzYzY31cdTNiODBcdTY3YWNcdTY5NjFcdXsyOGE0YX1cdTQyZmNcdTY5MzZcdTY5OThcdTNiYTFcdXsyMDNjOX1cdTgzNjNcdTUwOTBcdTY5ZjlcdXsyMzY1''@;'; put 'put ''OX1cdXsyMjEyYX1cdTZhNDVcdXsyMzcwM31cdTZhOWRcdTNiZjNcdTY3YjFcdTZhYzhcdXsyOTE5Y31cdTNjMGRcdTZiMWRcdXsyMDkyM31cdTYwZGVcdTZiMzVcdTZiNzRcdXsyMjdjZH1cdTZlYjVcdXsyM2FkYn1cdXsyMDNiNX1cdXsyMTk1OH1cdTM3NDBcdTU0MjFcdXsyM2I1YX1cdTZi''@;'; put 'put ''ZTFcdXsyM2VmY31cdTZiZGNcdTZjMzdcdXsyMjQ4Yn1cdXsyNDhmMX1cdXsyNmI1MX1cdTZjNWFcdTgyMjZcdTZjNzlcdXsyM2RiY31cdTQ0YzVcdXsyM2RiZH1cdXsyNDFhNH1cdXsyNDkwY31cdXsyNDkwMH0iXSxbImZkYTEiLCJcdXsyM2NjOX1cdTM2ZTVcdTNjZWJcdXsyMGQzMn1cdTli''@;'; put 'put ''ODNcdXsyMzFmOX1cdXsyMjQ5MX1cdTdmOGZcdTY4MzdcdXsyNmQyNX1cdXsyNmRhMX1cdXsyNmRlYn1cdTZkOTZcdTZkNWNcdTZlN2NcdTZmMDRcdXsyNDk3Zn1cdXsyNDA4NX1cdXsyNmU3Mn1cdTg1MzNcdXsyNmY3NH1cdTUxYzdcdTZjOWNcdTZlMWRcdTg0MmVcdXsyOGIyMX1cdTZlMmZc''@;'; put 'put ''dXsyM2UyZn1cdTc0NTNcdXsyM2Y4Mn1cdTc5Y2NcdTZlNGZcdTVhOTFcdXsyMzA0Yn1cdTZmZjhcdTM3MGRcdTZmOWRcdXsyM2UzMH1cdTZlZmFcdXsyMTQ5N31cdXsyNDAzZH1cdTQ1NTVcdTkzZjBcdTZmNDRcdTZmNWNcdTNkNGVcdTZmNzRcdXsyOTE3MH1cdTNkM2JcdTZmOWZcdXsyNDE0''@;'; put 'put ''NH1cdTZmZDNcdXsyNDA5MX1cdXsyNDE1NX1cdXsyNDAzOX1cdXsyM2ZmMH1cdXsyM2ZiNH1cdXsyNDEzZn1cdTUxZGZcdXsyNDE1Nn1cdXsyNDE1N31cdXsyNDE0MH1cdXsyNjFkZH1cdTcwNGJcdTcwN2VcdTcwYTdcdTcwODFcdTcwY2NcdTcwZDVcdTcwZDZcdTcwZGZcdTQxMDRcdTNkZThc''@;'; put 'put ''dTcxYjRcdTcxOTZcdXsyNDI3N31cdTcxMmJcdTcxNDVcdTVhODhcdTcxNGFcdTcxNmVcdTVjOWNcdXsyNDM2NX1cdTcxNGZcdTkzNjJcdXsyNDJjMX1cdTcxMmNcdXsyNDQ1YX1cdXsyNGEyN31cdXsyNGEyMn1cdTcxYmFcdXsyOGJlOH1cdTcwYmRcdTcyMGUiXSxbImZlNDAiLCJcdTk0NDJc''@;'; put 'put ''dTcyMTVcdTU5MTFcdTk0NDNcdTcyMjRcdTkzNDFcdXsyNTYwNX1cdTcyMmVcdTcyNDBcdXsyNDk3NH1cdTY4YmRcdTcyNTVcdTcyNTdcdTNlNTVcdXsyMzA0NH1cdTY4MGRcdTZmM2RcdTcyODJcdTczMmFcdTczMmJcdXsyNDgyM31cdXsyODgyYn1cdTQ4ZWRcdXsyODgwNH1cdTczMjhcdTcz''@;'; put 'put ''MmVcdTczY2ZcdTczYWFcdXsyMGMzYX1cdXsyNmEyZX1cdTczYzlcdTc0NDlcdXsyNDFlMn1cdXsyMTZlN31cdXsyNGEyNH1cdTY2MjNcdTM2YzVcdXsyNDliN31cdXsyNDk4ZH1cdXsyNDlmYn1cdTczZjdcdTc0MTVcdTY5MDNcdXsyNGEyNn1cdTc0MzlcdXsyMDVjM31cdTNlZDdcdTc0NWNc''@;'; put 'put ''dXsyMjhhZH1cdTc0NjBcdXsyOGViMn1cdTc0NDdcdTczZTRcdTc0NzZcdTgzYjlcdTc0NmNcdTM3MzBcdTc0NzRcdTkzZjFcdTZhMmNcdTc0ODJcdTQ5NTNcdXsyNGE4Y30iXSxbImZlYTEiLCJcdXsyNDE1Zn1cdXsyNGE3OX1cdXsyOGI4Zn1cdTViNDZcdXsyOGMwM31cdXsyMTg5ZX1cdTc0''@;'; put 'put ''YzhcdXsyMTk4OH1cdTc1MGVcdTc0ZTlcdTc1MWVcdXsyOGVkOX1cdXsyMWE0Yn1cdTViZDdcdXsyOGVhY31cdTkzODVcdTc1NGRcdTc1NGFcdTc1NjdcdTc1NmVcdXsyNGY4Mn1cdTNmMDRcdXsyNGQxM31cdTc1OGVcdTc0NWRcdTc1OWVcdTc1YjRcdTc2MDJcdTc2MmNcdTc2NTFcdTc2NGZc''@;'; put 'put ''dTc2NmZcdTc2NzZcdXsyNjNmNX1cdTc2OTBcdTgxZWZcdTM3ZjhcdXsyNjkxMX1cdXsyNjkwZX1cdTc2YTFcdTc2YTVcdTc2YjdcdTc2Y2NcdXsyNmY5Zn1cdTg0NjJcdXsyNTA5ZH1cdXsyNTE3ZH1cdXsyMWUxY31cdTc3MWVcdTc3MjZcdTc3NDBcdTY0YWZcdXsyNTIyMH1cdTc3NThcdXsy''@;'; put 'put ''MzJhY31cdTc3YWZcdXsyODk2NH1cdXsyODk2OH1cdXsyMTZjMX1cdTc3ZjRcdTc4MDlcdXsyMTM3Nn1cdXsyNGExMn1cdTY4Y2FcdTc4YWZcdTc4YzdcdTc4ZDNcdTk2YTVcdTc5MmVcdXsyNTVlMH1cdTc4ZDdcdTc5MzRcdTc4YjFcdXsyNzYwY31cdThmYjhcdTg4ODRcdXsyOGIyYn1cdXsy''@;'; put 'put ''NjA4M31cdXsyMjYxY31cdTc5ODZcdTg5MDBcdTY5MDJcdTc5ODBcdXsyNTg1N31cdTc5OWRcdXsyN2IzOX1cdTc5M2NcdTc5YTlcdTZlMmFcdXsyNzEyNn1cdTNlYThcdTc5YzZcdXsyOTEwZH1cdTc5ZDQiXV0nKX0sMTMzMzY6YXQ9PnsidXNlIHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBh''@;'; put 'put ''cnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3LCJcdTIwYWMiXSxbIjgxNDAiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2Nc''@;'; put 'put ''dTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmEiLDUsIlx1NGU3Mlx1NGU3NCIsOSwiXHU0ZTdmIiw2LCJcdTRlODdcdTRlOGEiXSxbIjgxODAiLCJc''@;'; put 'put ''dTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRl''@;'; put 'put ''ZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDIiLDYsIlx1NGYwYlx1NGYwY1x1NGYxMiIsNCwiXHU0ZjFjXHU0ZjFkXHU0ZjIxXHU0ZjIzXHU0ZjI4XHU0''@;'; put 'put ''ZjI5XHU0ZjJjXHU0ZjJkXHU0ZjJlXHU0ZjMxXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5XHU0ZjNiXHU0ZjNlIiw0LCJcdTRmNDRcdTRmNDVcdTRmNDciLDUsIlx1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1''@;'; put 'put ''NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZh''@;'; put 'put ''MVx1NGZhMiJdLFsiODI0MCIsIlx1NGZhNFx1NGZhYlx1NGZhZFx1NGZiMCIsNCwiXHU0ZmI2Iiw4LCJcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmZDIiLDQsIlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZl''@;'; put 'put ''NVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZiIsMTFdLFsiODI4MCIsIlx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAx''@;'; put 'put ''ZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZiIsMTAsIlx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MCIsNCwiXHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1''@;'; put 'put ''MDViXHU1MDVkIiw3LCJcdTUwNjYiLDUsIlx1NTA2ZCIsOCwiXHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhjXHU1MDhlIiwyMCwiXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1''@;'; put 'put ''MGFkIiw0LCJcdTUwYjMiLDYsIlx1NTBiYyJdLFsiODM0MCIsIlx1NTBiZCIsMTcsIlx1NTBkMCIsNSwiXHU1MGQ3XHU1MGQ4XHU1MGQ5XHU1MGRiIiwxMCwiXHU1MGU4XHU1MGU5XHU1MGVhXHU1MGViXHU1MGVmXHU1MGYwXHU1MGYxXHU1MGYyXHU1MGY0XHU1MGY2Iiw0LCJcdTUwZmMiLDks''@;'; put 'put ''Ilx1NTEwOCJdLFsiODM4MCIsIlx1NTEwOVx1NTEwYVx1NTEwYyIsNSwiXHU1MTEzIiwxMywiXHU1MTIyIiwyOCwiXHU1MTQyXHU1MTQ3XHU1MTRhXHU1MTRjXHU1MTRlXHU1MTRmXHU1MTUwXHU1MTUyXHU1MTUzXHU1MTU3XHU1MTU4XHU1MTU5XHU1MTViXHU1MTVkIiw0LCJcdTUxNjNcdTUx''@;'; put 'put ''NjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUxOWVcdTUxOWZcdTUxYTFc''@;'; put 'put ''dTUxYTNcdTUxYTYiLDQsIlx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMiIsNV0sWyI4NDQwIiwiXHU1MWQ4XHU1MWQ5XHU1MWRhXHU1MWRjXHU1''@;'; put 'put ''MWRlXHU1MWRmXHU1MWUyXHU1MWUzXHU1MWU1Iiw1LCJcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJc''@;'; put 'put ''dTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDQiLDUsIlx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OCJdLFsiODQ4MCIsIlx1NTI1OVx1NTI1YVx1NTI1''@;'; put 'put ''Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3MyIsOSwiXHU1MjdlXHU1MjgwXHU1MjgzIiw0LCJcdTUyODkiLDYsIlx1NTI5MVx1NTI5Mlx1NTI5NCIsNiwiXHU1MjljXHU1MmE0''@;'; put 'put ''XHU1MmE1XHU1MmE2XHU1MmE3XHU1MmFlXHU1MmFmXHU1MmIwXHU1MmI0Iiw5LCJcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDkiLDUsIlx1NTJl''@;'; put 'put ''MFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNSIsMTAsIlx1NTJmMSIsNywiXHU1MmZiXHU1MmZjXHU1MmZkXHU1MzAxXHU1MzAyXHU1MzAzXHU1MzA0XHU1MzA3XHU1MzA5XHU1MzBhXHU1MzBiXHU1MzBjXHU1MzBlIl0sWyI4NTQwIiwiXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1''@;'; put 'put ''MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmIiw5LCJcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlc''@;'; put 'put ''dTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUzNmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGYiXSxbIjg1ODAiLCJcdTUzOTAiLDQsIlx1NTM5Nlx1NTM5''@;'; put 'put ''N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1NTNhYlx1NTNhY1x1NTNhZFx1NTNhZiIsNiwiXHU1M2I3XHU1M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzIiw0LCJcdTUzY2VcdTUzY2ZcdTUzZDBcdTUz''@;'; put 'put ''ZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlcdTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFc''@;'; put 'put ''dTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWQiLDQsIlx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OSIsNywiXHU1NDc0XHU1NDc5''@;'; put 'put ''XHU1NDdhXHU1NDdlXHU1NDdmXHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExIl0sWyI4NjQwIiwiXHU1NGEyXHU1NGE1XHU1NGFlXHU1NGIwXHU1NGIyXHU1''@;'; put 'put ''NGI1XHU1NGI2XHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJjXHU1NGJlXHU1NGMzXHU1NGM1XHU1NGNhXHU1NGNiXHU1NGQ2XHU1NGQ4XHU1NGRiXHU1NGUwIiw0LCJcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjQiLDUsIlx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1''@;'; put 'put ''NTUwNFx1NTUwNVx1NTUwOFx1NTUwYSIsNCwiXHU1NTEyXHU1NTEzXHU1NTE1Iiw1LCJcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjYiXSxbIjg2ODAiLCJcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVcdTU1MzZcdTU1MzhcdTU1Mzlc''@;'; put 'put ''dTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGIiLDQsIlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1NyIsNCwiXHU1NTVkXHU1NTVlXHU1NTVmXHU1NTYwXHU1NTYyXHU1NTYzXHU1NTY4XHU1NTY5XHU1NTZiXHU1NTZmIiw1LCJcdTU1Nzlc''@;'; put 'put ''dTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdcdTU1OWFcdTU1OWJcdTU1OWVcdTU1YTAiLDYsIlx1NTVhOCIsOCwiXHU1NWIyXHU1NWI0XHU1NWI2XHU1NWI4XHU1NWJhXHU1NWJjXHU1NWJm''@;'; put 'put ''Iiw0LCJcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDciLDQsIlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOCIsNCwiXHU1NWZmXHU1NjAyXHU1NjAz''@;'; put 'put ''XHU1NjA0XHU1NjA1Il0sWyI4NzQwIiwiXHU1NjA2XHU1NjA3XHU1NjBhXHU1NjBiXHU1NjBkXHU1NjEwIiw3LCJcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2''@;'; put 'put ''MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDAiLDExLCJcdTU2NGYiLDQsIlx1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZCIsNF0sWyI4NzgwIiwiXHU1NjYzXHU1NjY1XHU1NjY2XHU1NjY3XHU1NjZkXHU1NjZlXHU1NjZmXHU1NjcwXHU1Njcy''@;'; put 'put ''XHU1NjczXHU1Njc0XHU1Njc1XHU1Njc3XHU1Njc4XHU1Njc5XHU1NjdhXHU1NjdkIiw3LCJcdTU2ODciLDYsIlx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NCIsMTQsIlx1NTZhNCIsMTAsIlx1NTZiMCIsNiwiXHU1NmI4XHU1NmI5XHU1NmJhXHU1NmJiXHU1NmJkIiwxMiwiXHU1NmNiIiw4LCJc''@;'; put 'put ''dTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTUiLDUsIlx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYiIsNl0sWyI4ODQwIiwiXHU1NzEyIiw5''@;'; put 'put ''LCJcdTU3MWRcdTU3MWVcdTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzQiLDQsIlx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1MiIsNCwiXHU1''@;'; put 'put ''NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwIl0sWyI4ODgwIiwiXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1Nzhk''@;'; put 'put ''Iiw0LCJcdTU3OTQiLDYsIlx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOSIsOCwiXHU1N2M0Iiw2LCJcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZc''@;'; put 'put ''dTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVcdTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTUiLDcsIlx1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgw''@;'; put 'put ''YVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgxMlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNSIsNCwiXHU1ODJiIiw0LCJcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzYiLDddLFsiODk0''@;'; put 'put ''MCIsIlx1NTgzZSIsNSwiXHU1ODQ1Iiw2LCJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTkiLDQsIlx1NTg1ZiIsNSwiXHU1ODY2Iiw0LCJcdTU4NmQiLDE2LCJcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4''@;'; put 'put ''OGJcdTU4OGMiXSxbIjg5ODAiLCJcdTU4OGQiLDQsIlx1NTg5NCIsNCwiXHU1ODliXHU1ODljXHU1ODlkXHU1OGEwIiw3LCJcdTU4YWEiLDE3LCJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzYiLDEwLCJcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDYiLDEz''@;'; put 'put ''LCJcdTU4ZTUiLDUsIlx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYSIsNywiXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4Iiw0LCJcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThcdTU5MWJcdTU5MWRcdTU5MWVcdTU5''@;'; put 'put ''MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2IiXSxbIjhhNDAiLCJcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNc''@;'; put 'put ''dTU5NTlcdTU5NWIiLDQsIlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2NiIsMTIsIlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5''@;'; put 'put ''YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNiJdLFsiOGE4MCIsIlx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliMyIsNSwiXHU1OWJhXHU1OWJjXHU1OWJkXHU1OWJmIiw2LCJcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5''@;'; put 'put ''Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGUiLDQsIlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZCIsMTEsIlx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1''@;'; put 'put ''NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYSIsNiwiXHU1YTMzXHU1YTM1XHU1YTM3Iiw0LCJcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDEiLDQsIlx1NWE0N1x1''@;'; put 'put ''NWE0OFx1NWE0YiIsOSwiXHU1YTU2XHU1YTU3XHU1YTU4XHU1YTU5XHU1YTViIiw1XSxbIjhiNDAiLCJcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhcdTVhNjlcdTVhNmIiLDgsIlx1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MCIsMTcsIlx1NWE5''@;'; put 'put ''MyIsNiwiXHU1YTljIiwxMywiXHU1YWFiXHU1YWFjIl0sWyI4YjgwIiwiXHU1YWFkIiw0LCJcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjkiLDQsIlx1NWFiZlx1NWFjMFx1NWFjMyIsNSwiXHU1YWNhXHU1YWNiXHU1YWNkIiw0LCJcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJc''@;'; put 'put ''dTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWMiLDQsIlx1NWFmMiIsMjIsIlx1NWIwYSIsMTEsIlx1NWIxOCIsMjUsIlx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOCIsNywiXHU1YjQxIiw2XSxbIjhjNDAiLCJcdTViNDgiLDcsIlx1NWI1''@;'; put 'put ''Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1''@;'; put 'put ''NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZiJdLFsi''@;'; put 'put ''OGM4MCIsIlx1NWJkMVx1NWJkNCIsOCwiXHU1YmUwXHU1YmUyXHU1YmUzXHU1YmU2XHU1YmU3XHU1YmU5Iiw0LCJcdTViZWZcdTViZjEiLDYsIlx1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMx''@;'; put 'put ''Mlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1''@;'; put 'put ''NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2NyIsNiwiXHU1YzcwXHU1YzcyIiw2LCJcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODMiLDQsIlx1NWM4OVx1''@;'; put 'put ''NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZCIsNCwiXHU1Y2E0Iiw0XSxbIjhkNDAiLCJcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVj''@;'; put 'put ''YzUiLDUsIlx1NWNjYyIsNSwiXHU1Y2QzIiw1LCJcdTVjZGEiLDYsIlx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMSIsOSwiXHU1Y2ZjIiw0XSxbIjhkODAiLCJcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDgiLDUsIlx1NWQwZiIsNCwiXHU1ZDE1''@;'; put 'put ''XHU1ZDE3XHU1ZDE4XHU1ZDE5XHU1ZDFhXHU1ZDFjXHU1ZDFkXHU1ZDFmIiw0LCJcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmYiLDQsIlx1NWQzNSIsNywiXHU1ZDNmIiw3LCJcdTVkNDhcdTVkNDlcdTVkNGQiLDEwLCJcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWUiLDEwLCJc''@;'; put 'put ''dTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzUiLDEyLCJcdTVkODMiLDIxLCJcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTAiXSxbIjhlNDAiLCJcdTVkYTEiLDIxLCJcdTVkYjgiLDEyLCJcdTVkYzYiLDYsIlx1NWRjZSIsMTIsIlx1NWRk''@;'; put 'put ''Y1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1NWRlZCJdLFsiOGU4MCIsIlx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOCIsNCwiXHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlIiw3''@;'; put 'put ''LCJcdTVlMjgiLDQsIlx1NWUyZlx1NWUzMFx1NWUzMiIsNCwiXHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2Iiw1LCJcdTVlNGQiLDYsIlx1NWU1NiIsNCwiXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzIiwxNCwiXHU1ZTc1XHU1ZTc3XHU1ZTc5''@;'; put 'put ''XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4Iiw0LCJcdTVlYWUiLDQsIlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWVi''@;'; put 'put ''ZiIsNl0sWyI4ZjQwIiwiXHU1ZWM2XHU1ZWM3XHU1ZWM4XHU1ZWNiIiw1LCJcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGMiLDExLCJcdTVlZTlcdTVlZWIiLDgsIlx1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1''@;'; put 'put ''NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNCJdLFsiOGY4MCIsIlx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMiIsNiwiXHU1ZjNiXHU1ZjNk''@;'; put 'put ''XHU1ZjNlXHU1ZjNmXHU1ZjQxIiwxNCwiXHU1ZjUxXHU1ZjU0XHU1ZjU5XHU1ZjVhXHU1ZjViXHU1ZjVjXHU1ZjVlXHU1ZjVmXHU1ZjYwXHU1ZjYzXHU1ZjY1XHU1ZjY3XHU1ZjY4XHU1ZjZiXHU1ZjZlXHU1ZjZmXHU1ZjcyXHU1Zjc0XHU1Zjc1XHU1Zjc2XHU1Zjc4XHU1ZjdhXHU1ZjdkXHU1''@;'; put 'put ''ZjdlXHU1ZjdmXHU1ZjgzXHU1Zjg2XHU1ZjhkXHU1ZjhlXHU1ZjhmXHU1ZjkxXHU1ZjkzXHU1Zjk0XHU1Zjk2XHU1ZjlhXHU1ZjliXHU1ZjlkXHU1ZjllXHU1ZjlmXHU1ZmEwXHU1ZmEyIiw1LCJcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWYiLDUsIlx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1''@;'; put 'put ''NWZiYlx1NWZiZSIsNCwiXHU1ZmM3XHU1ZmM4XHU1ZmNhXHU1ZmNiXHU1ZmNlXHU1ZmQzXHU1ZmQ0XHU1ZmQ1XHU1ZmRhXHU1ZmRiXHU1ZmRjXHU1ZmRlXHU1ZmRmXHU1ZmUyXHU1ZmUzXHU1ZmU1XHU1ZmU2XHU1ZmU4XHU1ZmU5XHU1ZmVjXHU1ZmVmXHU1ZmYwXHU1ZmYyXHU1ZmYzXHU1ZmY0''@;'; put 'put ''XHU1ZmY2XHU1ZmY3XHU1ZmY5XHU1ZmZhXHU1ZmZjXHU2MDA3Il0sWyI5MDQwIiwiXHU2MDA4XHU2MDA5XHU2MDBiXHU2MDBjXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFlXHU2MDFmXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJjXHU2MDJkXHU2MDJlXHU2MDMwIiw0''@;'; put 'put ''LCJcdTYwMzYiLDQsIlx1NjAzZFx1NjAzZVx1NjA0MFx1NjA0NCIsNiwiXHU2MDRjXHU2MDRlXHU2MDRmXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDViXHU2MDVjXHU2MDVlXHU2MDVmXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZlXHU2MDcxXHU2MDcyXHU2''@;'; put 'put ''MDc0XHU2MDc1XHU2MDc3XHU2MDdlXHU2MDgwIl0sWyI5MDgwIiwiXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhhXHU2MDhiXHU2MDhlXHU2MDhmXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDljXHU2MDllXHU2MGExXHU2MGEy''@;'; put 'put ''XHU2MGE0XHU2MGE1XHU2MGE3XHU2MGE5XHU2MGFhXHU2MGFlXHU2MGIwXHU2MGIzXHU2MGI1XHU2MGI2XHU2MGI3XHU2MGI5XHU2MGJhXHU2MGJkIiw3LCJcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2MiLDQsIlx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBk''@;'; put 'put ''ZVx1NjBlMSIsNCwiXHU2MGVhXHU2MGYxXHU2MGYyXHU2MGY1XHU2MGY3XHU2MGY4XHU2MGZiIiw0LCJcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjEx''@;'; put 'put ''ZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyYyIsMTgsIlx1NjE0MCIsNl0sWyI5MTQwIiwiXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2Iiw2LCJcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNc''@;'; put 'put ''dTYxNjRcdTYxNjVcdTYxNjZcdTYxNjkiLDYsIlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OCIsMTgsIlx1NjE4Y1x1NjE4ZFx1NjE4ZiIsNCwiXHU2MTk1Il0sWyI5MTgwIiwiXHU2MTk2Iiw2LCJcdTYxOWUiLDgsIlx1NjFhYVx1NjFhYlx1NjFhZCIsOSwiXHU2MWI4Iiw1''@;'; put 'put ''LCJcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzMiLDQsIlx1NjFjOVx1NjFjYyIsNCwiXHU2MWQzXHU2MWQ1IiwxNiwiXHU2MWU3IiwxMywiXHU2MWY2Iiw4LCJcdTYyMDAiLDUsIlx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1NjIxZVx1NjIyMFx1NjIyM1x1NjIy''@;'; put 'put ''Nlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOCIsNCwiXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhIl0sWyI5MjQwIiwiXHU2MjRmXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVhXHU2''@;'; put 'put ''MjVjIiw2LCJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYyNzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGIiLDUsIlx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1''@;'; put 'put ''NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMSJdLFsiOTI4MCIsIlx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJk''@;'; put 'put ''ZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1''@;'; put 'put ''NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzMyIsNSwiXHU2MzNiXHU2MzNjXHU2MzNlXHU2MzNmXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRhXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0''@;'; put 'put ''XHU2MzU2Iiw3LCJcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2VcdTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYz''@;'; put 'put ''OGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTkiLDYsIlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMCJdLFsiOTM0MCIsIlx1NjNjMVx1NjNjMlx1NjNjM1x1''@;'; put 'put ''NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkNyIsNiwiXHU2M2RmXHU2M2UyXHU2M2U0Iiw0LCJcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJc''@;'; put 'put ''dTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDYiLDQsIlx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1NjQxNSIsNSwiXHU2NDFkXHU2NDFmXHU2NDIyXHU2NDIzXHU2NDI0Il0sWyI5MzgwIiwiXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJiXHU2NDJlIiw1LCJcdTY0MzUiLDQsIlx1''@;'; put 'put ''NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0YiIsNiwiXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5Iiw0LCJcdTY0NWYiLDcsIlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZSIsOSwiXHU2NDdiIiw2LCJcdTY0ODNcdTY0ODZcdTY0ODgiLDgs''@;'; put 'put ''Ilx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5ZiIsNCwiXHU2NGE1XHU2NGE2XHU2NGE3XHU2NGE4XHU2NGFhXHU2NGFiXHU2NGFmXHU2NGIxXHU2NGIyXHU2NGIzXHU2NGI0XHU2NGI2XHU2NGI5XHU2NGJiXHU2NGJkXHU2NGJlXHU2NGJmXHU2''@;'; put 'put ''NGMxXHU2NGMzXHU2NGM0XHU2NGM2Iiw2LCJcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGEiXSxbIjk0NDAiLCJcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTciLDI0LCJcdTY1MDEiLDcsIlx1NjUwYSIs''@;'; put 'put ''NywiXHU2NTEzIiw0LCJcdTY1MTkiLDhdLFsiOTQ4MCIsIlx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNiIsNCwiXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwIiw0LCJcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRc''@;'; put 'put ''dTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdcdTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzgiLDE0LCJcdTY1''@;'; put 'put ''ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNcdTY1YWVcdTY1YjEiLDcsIlx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1''@;'; put 'put ''NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOCIsNywiXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViIl0sWyI5NTQwIiwiXHU2NWYyXHU2NWYzXHU2NWY0XHU2NWY1XHU2NWY4XHU2NWY5XHU2NWZi''@;'; put 'put ''Iiw0LCJcdTY2MDFcdTY2MDRcdTY2MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2''@;'; put 'put ''MmNcdTY2MmVcdTY2MzBcdTY2MzJcdTY2MzNcdTY2MzciLDQsIlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NCIsNiwiXHU2NjRkXHU2NjRlXHU2NjUwXHU2NjUxXHU2NjU4Il0sWyI5NTgwIiwiXHU2NjU5XHU2NjViXHU2NjVjXHU2NjVkXHU2NjVlXHU2NjYwXHU2NjYyXHU2NjYzXHU2''@;'; put 'put ''NjY1XHU2NjY3XHU2NjY5Iiw0LCJcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlcdTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJc''@;'; put 'put ''dTY2OTNcdTY2OTRcdTY2OTVcdTY2OTgiLDQsIlx1NjY5ZSIsOCwiXHU2NmE5Iiw0LCJcdTY2YWYiLDQsIlx1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZiIsMjUsIlx1NjZkYVx1NjZkZSIsNywiXHU2NmU3XHU2NmU4XHU2NmVhIiw1LCJcdTY2''@;'; put 'put ''ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDMiXSxbIjk2NDAiLCJcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVc''@;'; put 'put ''dTY3MjAiLDUsIlx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1Njc1NyIsNCwi''@;'; put 'put ''XHU2NzVkXHU2NzYyXHU2NzYzXHU2NzY0XHU2NzY2XHU2NzY3XHU2NzZiXHU2NzZjXHU2NzZlXHU2NzcxXHU2Nzc0XHU2Nzc2Il0sWyI5NjgwIiwiXHU2Nzc4XHU2Nzc5XHU2NzdhXHU2NzdiXHU2NzdkXHU2NzgwXHU2NzgyXHU2NzgzXHU2Nzg1XHU2Nzg2XHU2Nzg4XHU2NzhhXHU2NzhjXHU2''@;'; put 'put ''NzhkXHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkyXHU2NzkzXHU2Nzk0XHU2Nzk2XHU2Nzk5XHU2NzliXHU2NzlmXHU2N2EwXHU2N2ExXHU2N2E0XHU2N2E2XHU2N2E5XHU2N2FjXHU2N2FlXHU2N2IxXHU2N2IyXHU2N2I0XHU2N2I5Iiw3LCJcdTY3YzJcdTY3YzUiLDksIlx1NjdkNVx1NjdkNlx1''@;'; put 'put ''NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1NjdlYVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNSIsNywiXHU2N2ZlXHU2ODAxXHU2ODAyXHU2ODAzXHU2ODA0XHU2ODA2XHU2ODBkXHU2ODEwXHU2ODEyXHU2ODE0XHU2ODE1XHU2ODE4''@;'; put 'put ''Iiw0LCJcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjIiLDYsIlx1NjgyYiIsNiwiXHU2ODM0XHU2ODM1XHU2ODM2XHU2ODNhXHU2ODNiXHU2ODNmXHU2ODQ3XHU2ODRiXHU2ODRkXHU2ODRmXHU2ODUyXHU2ODU2Iiw1XSxbIjk3NDAiLCJcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4''@;'; put 'put ''NmMiLDcsIlx1Njg3NVx1Njg3OCIsOCwiXHU2ODgyXHU2ODg0XHU2ODg3Iiw3LCJcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRcdTY4OTVcdTY4OTZcdTY4OTgiLDksIlx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1Njhi''@;'; put 'put ''Nlx1NjhiN1x1NjhiOCJdLFsiOTc4MCIsIlx1NjhiOSIsNiwiXHU2OGMxXHU2OGMzIiw1LCJcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGIiLDQsIlx1NjhlMVx1NjhlMlx1NjhlNCIsOSwiXHU2OGVmXHU2OGYy''@;'; put 'put ''XHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2Iiw0LCJcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTMiLDExLCJcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjUiLDcsIlx1NjkyZVx1NjkyZlx1Njkz''@;'; put 'put ''MVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0MyIsMTYsIlx1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1ZiJdLFsiOTg0MCIsIlx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1''@;'; put 'put ''Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3MiIsNCwiXHU2OTdhXHU2OTdiXHU2OTdkXHU2OTdlXHU2OTdmXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThhXHU2OThiXHU2OThjXHU2OThlIiw1LCJcdTY5OTZcdTY5OTdcdTY5OTlcdTY5OWFcdTY5OWQi''@;'; put 'put ''LDksIlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZCJdLFsiOTg4MCIsIlx1NjliZVx1NjliZlx1NjljMFx1NjljMiIsNywiXHU2OWNiXHU2OWNkXHU2OWNmXHU2OWQxXHU2OWQy''@;'; put 'put ''XHU2OWQzXHU2OWQ1Iiw1LCJcdTY5ZGNcdTY5ZGRcdTY5ZGVcdTY5ZTEiLDExLCJcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjMiLDksIlx1NjlmZVx1NmEwMCIsOSwiXHU2YTBiIiwxMSwiXHU2YTE5Iiw1LCJcdTZhMjBcdTZhMjIiLDUsIlx1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1''@;'; put 'put ''NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNiIsNiwiXHU2YTNmIiw0LCJcdTZhNDVcdTZhNDZcdTZhNDgiLDcsIlx1NmE1MSIsNiwiXHU2YTVhIl0sWyI5OTQwIiwiXHU2YTVjIiw0LCJcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjYiLDEwLCJcdTZhNzIiLDYsIlx1NmE3YVx1NmE3''@;'; put 'put ''Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NSIsOCwiXHU2YThmXHU2YTkyIiw0LCJcdTZhOTgiLDcsIlx1NmFhMSIsNV0sWyI5OTgwIiwiXHU2YWE3XHU2YWE4XHU2YWFhXHU2YWFkIiwxMTQsIlx1NmIyNVx1NmIyNlx1NmIyOCIsNl0sWyI5YTQwIiwiXHU2YjJm''@;'; put 'put ''XHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2YjRhXHU2YjRiXHU2YjRkIiwxMSwiXHU2YjVhIiw3LCJcdTZiNjhcdTZiNjlcdTZiNmIiLDEzLCJcdTZi''@;'; put 'put ''N2FcdTZiN2RcdTZiN2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODgiXSxbIjlhODAiLCJcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWMiLDQsIlx1NmJhMiIsNywiXHU2YmFiIiw3LCJcdTZiYjZcdTZiYjgiLDYsIlx1NmJj''@;'; put 'put ''MFx1NmJjM1x1NmJjNFx1NmJjNiIsNCwiXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjIiw0LCJcdTZiZTIiLDcsIlx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJm''@;'; put 'put ''ZSIsNiwiXHU2YzA4Iiw0LCJcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZjMzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZj''@;'; put 'put ''NDVcdTZjNDhcdTZjNGIiLDQsIlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OCJdLFsiOWI0MCIsIlx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2YiIsNCwiXHU2YzcxXHU2YzczXHU2Yzc1XHU2Yzc3XHU2Yzc4XHU2YzdhXHU2YzdiXHU2YzdjXHU2''@;'; put 'put ''YzdmXHU2YzgwXHU2Yzg0XHU2Yzg3XHU2YzhhXHU2YzhiXHU2YzhkXHU2YzhlXHU2YzkxXHU2YzkyXHU2Yzk1XHU2Yzk2XHU2Yzk3XHU2Yzk4XHU2YzlhXHU2YzljXHU2YzlkXHU2YzllXHU2Y2EwXHU2Y2EyXHU2Y2E4XHU2Y2FjXHU2Y2FmXHU2Y2IwXHU2Y2I0XHU2Y2I1XHU2Y2I2XHU2Y2I3''@;'; put 'put ''XHU2Y2JhXHU2Y2MwXHU2Y2MxXHU2Y2MyXHU2Y2MzXHU2Y2M2XHU2Y2M3XHU2Y2M4XHU2Y2NiXHU2Y2NkXHU2Y2NlXHU2Y2NmXHU2Y2QxXHU2Y2QyXHU2Y2Q4Il0sWyI5YjgwIiwiXHU2Y2Q5XHU2Y2RhXHU2Y2RjXHU2Y2RkXHU2Y2RmXHU2Y2U0XHU2Y2U2XHU2Y2U3XHU2Y2U5XHU2Y2VjXHU2''@;'; put 'put ''Y2VkXHU2Y2YyXHU2Y2Y0XHU2Y2Y5XHU2Y2ZmXHU2ZDAwXHU2ZDAyXHU2ZDAzXHU2ZDA1XHU2ZDA2XHU2ZDA4XHU2ZDA5XHU2ZDBhXHU2ZDBkXHU2ZDBmXHU2ZDEwXHU2ZDExXHU2ZDEzXHU2ZDE0XHU2ZDE1XHU2ZDE2XHU2ZDE4XHU2ZDFjXHU2ZDFkXHU2ZDFmIiw1LCJcdTZkMjZcdTZkMjhc''@;'; put 'put ''dTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZkMzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZk''@;'; put 'put ''NjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRcdTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2QiLDQsIlx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5NiIs''@;'; put 'put ''NCwiXHU2ZDljXHU2ZGEyXHU2ZGE1XHU2ZGFjXHU2ZGFkXHU2ZGIwXHU2ZGIxXHU2ZGIzXHU2ZGI0XHU2ZGI2XHU2ZGI3XHU2ZGI5Iiw1LCJcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2EiXSxbIjljNDAiLCJcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNc''@;'; put 'put ''dTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmQiLDcsIlx1NmUwNlx1NmUwN1x1NmUw''@;'; put 'put ''OFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUzM1x1NmUzNSJdLFsiOWM4MCIsIlx1NmUzNlx1NmUzN1x1''@;'; put 'put ''NmUzOVx1NmUzYiIsNywiXHU2ZTQ1Iiw3LCJcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjAiLDEwLCJcdTZlNmNcdTZlNmRcdTZlNmYiLDE0LCJcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhc''@;'; put 'put ''dTZlOGEiLDQsIlx1NmU5MSIsNiwiXHU2ZTk5XHU2ZTlhXHU2ZTliXHU2ZTlkXHU2ZTllXHU2ZWEwXHU2ZWExXHU2ZWEzXHU2ZWE0XHU2ZWE2XHU2ZWE4XHU2ZWE5XHU2ZWFiXHU2ZWFjXHU2ZWFkXHU2ZWFlXHU2ZWIwXHU2ZWIzXHU2ZWI1XHU2ZWI4XHU2ZWI5XHU2ZWJjXHU2ZWJlXHU2ZWJm''@;'; put 'put ''XHU2ZWMwXHU2ZWMzXHU2ZWM0XHU2ZWM1XHU2ZWM2XHU2ZWM4XHU2ZWM5XHU2ZWNhXHU2ZWNjXHU2ZWNkXHU2ZWNlXHU2ZWQwXHU2ZWQyXHU2ZWQ2XHU2ZWQ4XHU2ZWQ5XHU2ZWRiXHU2ZWRjXHU2ZWRkXHU2ZWUzXHU2ZWU3XHU2ZWVhIiw1XSxbIjlkNDAiLCJcdTZlZjBcdTZlZjFcdTZlZjJc''@;'; put 'put ''dTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmEiLDcsIlx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYSIsNCwiXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2Iiw5LCJcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVc''@;'; put 'put ''dTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZmMzciLDYsIlx1NmYzZlx1NmY0MFx1NmY0MVx1NmY0MiJdLFsiOWQ4MCIsIlx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZSIsOSwiXHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYx''@;'; put 'put ''XHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3Iiw1LCJcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2QiLDYsIlx1NmY4NVx1NmY4Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4ZiIsMTIsIlx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZh''@;'; put 'put ''MiIsNCwiXHU2ZmE4IiwxMCwiXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhIiw1LCJcdTZmYzFcdTZmYzMiLDUsIlx1NmZjYSIsNiwiXHU2ZmQzIiwxMCwiXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1Il0sWyI5ZTQwIiwiXHU2ZmU2Iiw3LCJcdTZmZjAiLDMyLCJcdTcwMTIi''@;'; put 'put ''LDcsIlx1NzAxYyIsNiwiXHU3MDI0Iiw2XSxbIjllODAiLCJcdTcwMmIiLDksIlx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYSIsMTcsIlx1NzA0ZFx1NzA0ZVx1NzA1MCIsMTMsIlx1NzA1ZiIsMTEsIlx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3''@;'; put 'put ''Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZSIsMTIsIlx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1''@;'; put 'put ''NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYiIsMTIsIlx1NzBkYSJdLFsiOWY0MCIsIlx1NzBkY1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMCIsNiwiXHU3MGY4XHU3MGZhXHU3MGZiXHU3MGZj''@;'; put 'put ''XHU3MGZlIiwxMCwiXHU3MTBiIiw0LCJcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWIiLDEwLCJcdTcxMjciLDcsIlx1NzEzMlx1NzEzM1x1NzEzNCJdLFsiOWY4MCIsIlx1NzEzNVx1NzEzNyIsMTMsIlx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1NzE0Ylx1NzE0ZFx1NzE0ZiIsMTIs''@;'; put 'put ''Ilx1NzE1ZFx1NzE1ZiIsNCwiXHU3MTY1XHU3MTY5Iiw0LCJcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2UiLDUsIlx1NzE4NSIsNCwiXHU3MThiXHU3MThjXHU3MThkXHU3MThlXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkz''@;'; put 'put ''XHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlhIiw0LCJcdTcxYTEiLDYsIlx1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZCIsNSwiXHU3MWI0XHU3MWI2XHU3MWI3XHU3MWI4XHU3MWJhIiw4LCJcdTcxYzQiLDksIlx1NzFjZiIsNF0sWyJhMDQwIiwiXHU3MWQ2Iiw5LCJcdTcxZTFcdTcxZTJcdTcxZTNc''@;'; put 'put ''dTcxZTRcdTcxZTZcdTcxZTgiLDUsIlx1NzFlZiIsOSwiXHU3MWZhIiwxMSwiXHU3MjA3IiwxOV0sWyJhMDgwIiwiXHU3MjFiXHU3MjFjXHU3MjFlIiw5LCJcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDAiLDYs''@;'; put 'put ''Ilx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1''@;'; put 'put ''NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NSIsNCwiXHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzIiwxMSwiXHU3MmEwIiwxMSwiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhIiw2LCJcdTcyYzVcdTcyYzZc''@;'; put 'put ''dTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFcdTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGIiXSxbImExYTEiLCJcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1''@;'; put 'put ''MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsNywiXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIw''@;'; put 'put ''XHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBc''@;'; put 'put ''eGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmExIiwiXHUyMTcwIiw5XSxbImEyYjEiLCJcdTI0ODgiLDE5LCJcdTI0NzQiLDE5''@;'; put 'put ''LCJcdTI0NjAiLDldLFsiYTJlNSIsIlx1MzIyMCIsOV0sWyJhMmYxIiwiXHUyMTYwIiwxMV0sWyJhM2ExIiwiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1Iiw4OCwiXHVmZmUzIl0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJhNmExIiwiXHUwMzkx''@;'; put 'put ''IiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTZlMCIsIlx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NCJdLFsiYTZlZSIsIlx1ZmUzYlx1ZmUzY1x1ZmUzN1x1ZmUz''@;'; put 'put ''OFx1ZmUzMSJdLFsiYTZmNCIsIlx1ZmUzM1x1ZmUzNCJdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4NDAiLCJcdTAyY2FcdTAyY2JcdTAyZDlcdTIwMTNcdTIwMTVcdTIwMjVcdTIwMzVcdTIx''@;'; put 'put ''MDVcdTIxMDlcdTIxOTZcdTIxOTdcdTIxOThcdTIxOTlcdTIyMTVcdTIyMWZcdTIyMjNcdTIyNTJcdTIyNjZcdTIyNjdcdTIyYmZcdTI1NTAiLDM1LCJcdTI1ODEiLDZdLFsiYTg4MCIsIlx1MjU4OCIsNywiXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0''@;'; put 'put ''XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlIl0sWyJhOGExIiwiXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFk''@;'; put 'put ''YVx1MDFkY1x4ZmNceGVhXHUwMjUxIl0sWyJhOGJkIiwiXHUwMTQ0XHUwMTQ4Il0sWyJhOGMwIiwiXHUwMjYxIl0sWyJhOGM1IiwiXHUzMTA1IiwzNl0sWyJhOTQwIiwiXHUzMDIxIiw4LCJcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMz''@;'; put 'put ''ZDFcdTMzZDJcdTMzZDVcdWZlMzBcdWZmZTJcdWZmZTQiXSxbImE5NTkiLCJcdTIxMjFcdTMyMzEiXSxbImE5NWMiLCJcdTIwMTAiXSxbImE5NjAiLCJcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDkiLDksIlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1''@;'; put 'put ''ZmU1N1x1ZmU1OSIsOF0sWyJhOTgwIiwiXHVmZTYyIiw0LCJcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmIiXSxbImE5OTYiLCJcdTMwMDciXSxbImE5YTQiLCJcdTI1MDAiLDc1XSxbImFhNDAiLCJcdTcyZGNcdTcyZGRcdTcyZGZcdTcyZTIiLDUsIlx1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1''@;'; put 'put ''NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNCIsNSwiXHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJm''@;'; put 'put ''XHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwIiw4XSxbImFhODAiLCJcdTczNDlcdTczNGFcdTczNGJcdTczNGNcdTczNGVcdTczNGZcdTczNTFcdTczNTNcdTczNTRcdTczNTVcdTczNTZcdTczNTgiLDcsIlx1NzM2MSIsMTAsIlx1''@;'; put 'put ''NzM2ZVx1NzM3MFx1NzM3MSJdLFsiYWI0MCIsIlx1NzM3MiIsMTEsIlx1NzM3ZiIsNCwiXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3Mzll''@;'; put 'put ''XHU3M2EwXHU3M2ExXHU3M2EzIiw1LCJcdTczYWFcdTczYWNcdTczYWRcdTczYjFcdTczYjRcdTczYjVcdTczYjZcdTczYjhcdTczYjlcdTczYmNcdTczYmRcdTczYmVcdTczYmZcdTczYzFcdTczYzMiLDRdLFsiYWI4MCIsIlx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMiIsNiwiXHU3M2RhXHU3''@;'; put 'put ''M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzIiw0XSxbImFjNDAiLCJcdTczZjgiLDEwLCJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MGJcdTc0MGNcdTc0''@;'; put 'put ''MGRcdTc0MGVcdTc0MTEiLDgsIlx1NzQxYyIsNSwiXHU3NDIzXHU3NDI0XHU3NDI3XHU3NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3Iiw0LCJcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDIiLDExXSxbImFjODAiLCJcdTc0NGUiLDYsIlx1NzQ1Nlx1NzQ1OFx1''@;'; put 'put ''NzQ1ZFx1NzQ2MCIsMTIsIlx1NzQ2ZVx1NzQ2Zlx1NzQ3MSIsNCwiXHU3NDc4XHU3NDc5XHU3NDdhIl0sWyJhZDQwIiwiXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxIiwxMCwi''@;'; put 'put ''XHU3NDlkXHU3NDlmIiw3LCJcdTc0YWEiLDE1LCJcdTc0YmIiLDEyXSxbImFkODAiLCJcdTc0YzgiLDksIlx1NzRkMyIsOCwiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3Iiw2LCJcdTc0ZjBcdTc0ZjFcdTc0ZjIiXSxbImFlNDAiLCJcdTc0ZjNcdTc0ZjVcdTc0ZjgiLDYsIlx1NzUw''@;'; put 'put ''MFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNSIsNywiXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwIiw0LCJcdTc1MjZcdTc1MjdcdTc1MmFcdTc1MmVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M2NcdTc1M2RcdTc1M2ZcdTc1''@;'; put 'put ''NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NGFcdTc1NGRcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NTgiXSxbImFlODAiLCJcdTc1NWQiLDcsIlx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2YiIsNiwiXHU3NTczXHU3NTc1XHU3''@;'; put 'put ''NTc2XHU3NTc3XHU3NTdhIiw0LCJcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODciXSxbImFmNDAiLCJcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTYiLDQsIlx1''@;'; put 'put ''NzVhZFx1NzViNlx1NzViN1x1NzViYVx1NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVl''@;'; put 'put ''ZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVmM1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwNyJdLFsiYWY4MCIsIlx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1''@;'; put 'put ''NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NCJdLFsiYjA0MCIsIlx1NzY0NSIsNiwi''@;'; put 'put ''XHU3NjRlIiw1LCJcdTc2NTVcdTc2NTciLDQsIlx1NzY1ZFx1NzY1Zlx1NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NCIsNiwiXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwIiw3LCJcdTc2NzlcdTc2N2FcdTc2N2NcdTc2N2ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OGFcdTc2OGNc''@;'; put 'put ''dTc2OGRcdTc2OGZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OWFcdTc2OWIiXSxbImIwODAiLCJcdTc2OWMiLDcsIlx1NzZhNSIsOCwiXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1Iiw5LCJcdTc2YzBcdTc2YzFcdTc2YzNcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhc''@;'; put 'put ''dTU0Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4''@;'; put 'put ''ODRcdTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBc''@;'; put 'put ''dThkMjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1''@;'; put 'put ''NTFcdTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjUiXSxbImIxNDAiLCJcdTc2YzRcdTc2YzdcdTc2YzlcdTc2Y2JcdTc2Y2NcdTc2ZDNcdTc2ZDVcdTc2ZDlcdTc2ZGFcdTc2ZGNcdTc2ZGRcdTc2ZGVcdTc2ZTAiLDQsIlx1NzZlNiIsNywiXHU3NmYwXHU3NmYzXHU3''@;'; put 'put ''NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlIiwxMCwiXHU3NzFiXHU3NzFjXHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiIl0sWyJi''@;'; put 'put ''MTgwIiwiXHU3NzJjXHU3NzJlXHU3NzMwIiw0LCJcdTc3MzlcdTc3M2JcdTc3M2RcdTc3M2VcdTc3M2ZcdTc3NDJcdTc3NDRcdTc3NDVcdTc3NDZcdTc3NDgiLDcsIlx1Nzc1MiIsNywiXHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0''@;'; put 'put ''XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4''@;'; put 'put ''ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2''@;'; put 'put ''XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3''@;'; put 'put ''OWM5XHU5OTdjXHU3MGIzIl0sWyJiMjQwIiwiXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkIiwxMSwiXHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3NzgyXHU3NzgzXHU3Nzg2Iiw1LCJcdTc3OGZcdTc3OTBcdTc3OTMiLDExLCJcdTc3YTFc''@;'; put 'put ''dTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjJcdTc3YjRcdTc3YjYiLDRdLFsiYjI4MCIsIlx1NzdiY1x1NzdiZVx1NzdjMCIsMTIsIlx1NzdjZSIsOCwiXHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkIiw0LCJcdTc3ZTRcdTc1YzVcdTVl''@;'; put 'put ''NzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVc''@;'; put 'put ''dTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0''@;'; put 'put ''Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFc''@;'; put 'put ''dTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTYiXSxbImIzNDAiLCJcdTc3ZTZcdTc3ZThcdTc3ZWFcdTc3ZWZcdTc3ZjBcdTc3ZjFcdTc3ZjJcdTc3ZjRcdTc3ZjVcdTc3ZjdcdTc3ZjlcdTc3ZmFcdTc3ZmJcdTc3ZmNcdTc4MDMiLDUs''@;'; put 'put ''Ilx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1NzgzNVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1''@;'; put 'put ''Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YSJdLFsiYjM4MCIsIlx1Nzg1Ylx1Nzg1Y1x1Nzg1ZSIsMTEsIlx1Nzg2ZiIsNywiXHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdi''@;'; put 'put ''XHU3ODdkIiw2LCJcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZm''@;'; put 'put ''ODhcdTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRc''@;'; put 'put ''dTYzMDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdl''@;'; put 'put ''ZjhcdTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWEiXSxbImI0NDAiLCJcdTc4ODRcdTc4ODVcdTc4ODZcdTc4ODhcdTc4OGFcdTc4OGJcdTc4OGZcdTc4OTBcdTc4OTJcdTc4OTRcdTc4OTVcdTc4OTZc''@;'; put 'put ''dTc4OTlcdTc4OWRcdTc4OWVcdTc4YTBcdTc4YTJcdTc4YTRcdTc4YTZcdTc4YTgiLDcsIlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1Nzhj''@;'; put 'put ''ZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYSIsOV0sWyJiNDgwIiwiXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkIiw0LCJcdTc4ZjNcdTc4ZjVcdTc4ZjZcdTc4ZjhcdTc4ZjlcdTc4ZmIiLDUsIlx1NzkwMlx1''@;'; put 'put ''NzkwM1x1NzkwNFx1NzkwNiIsNiwiXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0''@;'; put 'put ''XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0''@;'; put 'put ''ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJl''@;'; put 'put ''XHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlIl0sWyJiNTQwIiwiXHU3OTBkIiw1LCJcdTc5MTQiLDksIlx1NzkxZiIsNCwiXHU3OTI1IiwxNCwiXHU3OTM1Iiw0LCJcdTc5M2Rc''@;'; put 'put ''dTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGEiLDgsIlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2MyJdLFsiYjU4MCIsIlx1Nzk2NFx1Nzk2Nlx1Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MCIsNiwiXHU3OTc5XHU3OTdiIiw0LCJc''@;'; put 'put ''dTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVm''@;'; put 'put ''MzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNc''@;'; put 'put ''dTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3''@;'; put 'put ''YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTAiXSxbImI2NDAiLCJcdTc5OTMi''@;'; put 'put ''LDYsIlx1Nzk5YiIsMTEsIlx1NzlhOCIsMTAsIlx1NzliNCIsNCwiXHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5Iiw1LCJcdTc5ZTBcdTc5ZTFcdTc5ZTJc''@;'; put 'put ''dTc5ZTVcdTc5ZThcdTc5ZWEiXSxbImI2ODAiLCJcdTc5ZWNcdTc5ZWVcdTc5ZjEiLDYsIlx1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZiIsNCwiXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5''@;'; put 'put ''XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5''@;'; put 'put ''MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5''@;'; put 'put ''XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2''@;'; put 'put ''MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjIl0sWyJiNzQwIiwiXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0IiwxNCwiXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNl''@;'; put 'put ''XHU3YTQwIiw1LCJcdTdhNDciLDksIlx1N2E1MiIsNCwiXHU3YTU4IiwxNl0sWyJiNzgwIiwiXHU3YTY5Iiw2LCJcdTdhNzFcdTdhNzJcdTdhNzNcdTdhNzVcdTdhN2JcdTdhN2NcdTdhN2RcdTdhN2VcdTdhODJcdTdhODVcdTdhODdcdTdhODlcdTdhOGFcdTdhOGJcdTdhOGNcdTdhOGVcdTdh''@;'; put 'put ''OGZcdTdhOTBcdTdhOTNcdTdhOTRcdTdhOTlcdTdhOWFcdTdhOWJcdTdhOWVcdTdhYTFcdTdhYTJcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFc''@;'; put 'put ''dTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgw''@;'; put 'put ''YmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRc''@;'; put 'put ''dTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGQiXSxbImI4NDAiLCJcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdh''@;'; put 'put ''YWFcdTdhYWJcdTdhYWUiLDQsIlx1N2FiNCIsMTAsIlx1N2FjMCIsMTAsIlx1N2FjYyIsOSwiXHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3Iiw1LCJcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjMiXSxbImI4ODAiLCJcdTdh''@;'; put 'put ''ZjQiLDQsIlx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2IxYVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1''@;'; put 'put ''N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQx''@;'; put 'put ''Zlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1''@;'; put 'put ''OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1Njgz''@;'; put 'put ''Y1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOSJdLFsiYjk0MCIsIlx1N2IyZlx1N2IzMFx1N2IzMlx1N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZiIsNSwiXHU3''@;'; put 'put ''YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzIiwxMCwiXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3Yjgz''@;'; put 'put ''XHU3Yjg0XHU3Yjg2Iiw2LCJcdTdiOGVcdTdiOGYiXSxbImI5ODAiLCJcdTdiOTFcdTdiOTJcdTdiOTNcdTdiOTZcdTdiOThcdTdiOTlcdTdiOWFcdTdiOWJcdTdiOWVcdTdiOWZcdTdiYTBcdTdiYTNcdTdiYTRcdTdiYTVcdTdiYWVcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjNcdTdiYjVcdTdi''@;'; put 'put ''YjZcdTdiYjdcdTdiYjkiLDcsIlx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1''@;'; put 'put ''ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJl''@;'; put 'put ''MVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1''@;'; put 'put ''OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOCJdLFsiYmE0MCIsIlx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2Jj''@;'; put 'put ''Zlx1N2JkMFx1N2JkMlx1N2JkNCIsNCwiXHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyIiw0LCJcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmJcdTdiZmRcdTdi''@;'; put 'put ''ZmYiLDcsIlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMCIsNSwiXHU3YzE3XHU3YzE4XHU3YzE5Il0sWyJiYTgwIiwiXHU3YzFhIiw0LCJcdTdjMjAiLDUsIlx1N2MyOFx1N2MyOVx1N2MyYiIsMTIsIlx1N2MzOSIsNSwiXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2''@;'; put 'put ''XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4''@;'; put 'put ''YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1''@;'; put 'put ''XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3''@;'; put 'put ''NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2Il0sWyJiYjQwIiwiXHU3YzQzIiw5LCJcdTdjNGUiLDM2LCJcdTdjNzUiLDUsIlx1N2M3ZSIsOV0sWyJiYjgwIiwiXHU3Yzg4XHU3YzhhIiw2LCJcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJc''@;'; put 'put ''dTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjQiLDQsIlx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVk''@;'; put 'put ''MVx1NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1''@;'; put 'put ''ODc1N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0''@;'; put 'put ''N1x1OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NSJd''@;'; put 'put ''LFsiYmM0MCIsIlx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZSIsNiwiXHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxIiw2LCJcdTdjZTkiLDUsIlx1N2NmMCIsNywiXHU3Y2Y5XHU3Y2ZhXHU3Y2ZjIiwxMywiXHU3ZDBiIiw1''@;'; put 'put ''XSxbImJjODAiLCJcdTdkMTEiLDE0LCJcdTdkMjFcdTdkMjNcdTdkMjRcdTdkMjVcdTdkMjZcdTdkMjhcdTdkMjlcdTdkMmFcdTdkMmNcdTdkMmRcdTdkMmVcdTdkMzAiLDYsIlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4''@;'; put 'put ''MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1''@;'; put 'put ''OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMx''@;'; put 'put ''Nlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1''@;'; put 'put ''NGVmNiJdLFsiYmQ0MCIsIlx1N2QzNyIsNTQsIlx1N2Q2ZiIsN10sWyJiZDgwIiwiXHU3ZDc4IiwzMiwiXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4''@;'; put 'put ''YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1''@;'; put 'put ''XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0''@;'; put 'put ''ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4Il0sWyJiZTQwIiwiXHU3ZDk5IiwxMiwiXHU3ZGE3Iiw2LCJc''@;'; put 'put ''dTdkYWYiLDQyXSxbImJlODAiLCJcdTdkZGEiLDMyLCJcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRc''@;'; put 'put ''dTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1''@;'; put 'put ''YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdc''@;'; put 'put ''dTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmIiXSxbImJmNDAiLCJcdTdkZmIiLDYyXSxbImJmODAiLCJcdTdlM2FcdTdlM2MiLDQsIlx1N2U0MiIsNCwiXHU3''@;'; put 'put ''ZTQ4IiwyMSwiXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEy''@;'; put 'put ''XHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2''@;'; put 'put ''MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMy''@;'; put 'put ''XHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwIl0sWyJjMDQwIiwiXHU3ZTVlIiwzNSwiXHU3ZTgzIiwyMywiXHU3ZTljXHU3ZTlkXHU3ZTllIl0sWyJjMDgwIiwiXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3''@;'; put 'put ''ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiIiw2LCJcdTdmNDNcdTdmNDYiLDksIlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1''@;'; put 'put ''NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJm''@;'; put 'put ''Y1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1''@;'; put 'put ''Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZk''@;'; put 'put ''MCJdLFsiYzE0MCIsIlx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2MyIsNCwiXHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3''@;'; put 'put ''ZjgyIiw3LCJcdTdmOGJcdTdmOGRcdTdmOGYiLDQsIlx1N2Y5NSIsNCwiXHU3ZjliXHU3ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4Iiw2LCJcdTdmYjEiXSxbImMxODAiLCJcdTdmYjMiLDQsIlx1N2ZiYVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2Zj''@;'; put 'put ''NFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZiIsNCwiXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5Iiw1LCJcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVl''@;'; put 'put ''YzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRc''@;'; put 'put ''dTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0''@;'; put 'put ''YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmYiXSxbImMyNDAiLCJc''@;'; put 'put ''dTdmZTRcdTdmZTdcdTdmZThcdTdmZWFcdTdmZWJcdTdmZWNcdTdmZWRcdTdmZWZcdTdmZjJcdTdmZjQiLDYsIlx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAx''@;'; put 'put ''Zlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYiIsNSwiXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3Il0sWyJjMjgw''@;'; put 'put ''IiwiXHU4MDU5XHU4MDViIiwxMywiXHU4MDZiIiw1LCJcdTgwNzIiLDExLCJcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNc''@;'; put 'put ''dTc4OGNcdTk3MzJcdThkZWZcdThkNDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZl''@;'; put 'put ''ZTZcdTUzNzVcdTRlNzFcdTYzYTBcdTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFc''@;'; put 'put ''dTg2ODJcdTlhNmNcdTlhODJcdTU2MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmIiXSxbImMzNDAiLCJcdTgwN2VcdTgwODFcdTgwODJcdTgwODVcdTgwODhcdTgwOGFcdTgw''@;'; put 'put ''OGQiLDUsIlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjNyIsNCwiXHU4MGNmIiw2LCJcdTgwZDhcdTgwZGZcdTgwZTBcdTgwZTJcdTgw''@;'; put 'put ''ZTNcdTgwZTZcdTgwZWVcdTgwZjVcdTgwZjdcdTgwZjlcdTgwZmJcdTgwZmVcdTgwZmZcdTgxMDBcdTgxMDFcdTgxMDNcdTgxMDRcdTgxMDVcdTgxMDdcdTgxMDhcdTgxMGIiXSxbImMzODAiLCJcdTgxMGNcdTgxMTVcdTgxMTdcdTgxMTlcdTgxMWJcdTgxMWNcdTgxMWRcdTgxMWYiLDEyLCJc''@;'; put 'put ''dTgxMmRcdTgxMmVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzkiLDQsIlx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4''@;'; put 'put ''Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1''@;'; put 'put ''NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4''@;'; put 'put ''NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OCJdLFsiYzQ0MCIsIlx1ODE0MCIsNSwiXHU4MTQ3XHU4MTQ5XHU4''@;'; put 'put ''MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTViIiw0LCJcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODMiLDQsIlx1''@;'; put 'put ''ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5MiIsNSwiXHU4MTk5XHU4MTlhXHU4MTllIiw0LCJcdTgxYTRcdTgxYTUiXSxbImM0ODAiLCJcdTgxYTdcdTgxYTlcdTgxYWIiLDcsIlx1ODFiNCIsNSwiXHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4''@;'; put 'put ''MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkIiw2LCJcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlc''@;'; put 'put ''dTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2''@;'; put 'put ''Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2Jc''@;'; put 'put ''dTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODEiXSxbImM1NDAiLCJcdTgxZDQiLDE0LCJcdTgxZTRcdTgxZTVcdTgxZTZcdTgxZThcdTgxZTlcdTgxZWJcdTgx''@;'; put 'put ''ZWUiLDQsIlx1ODFmNSIsNSwiXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3Iiw0LCJcdTgyMGVcdTgyMGZcdTgyMTFcdTgyMTNcdTgyMTUiLDUsIlx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIzZFx1ODIzZiJdLFsi''@;'; put 'put ''YzU4MCIsIlx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MCIsNywiXHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwIiw3LCJcdTgyNjlcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdl''@;'; put 'put ''YmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYzMmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVc''@;'; put 'put ''dTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBcdTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZj''@;'; put 'put ''ZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJc''@;'; put 'put ''dTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDciXSxbImM2NDAiLCJcdTgyNmFcdTgyNmJcdTgyNmNcdTgyNmRcdTgyNzFcdTgyNzVcdTgyNzZcdTgyNzdcdTgyNzhcdTgyN2JcdTgyN2NcdTgyODBcdTgyODFcdTgyODNcdTgyODVcdTgyODZcdTgyODdcdTgyODlcdTgyOGNcdTgy''@;'; put 'put ''OTBcdTgyOTNcdTgyOTRcdTgyOTVcdTgyOTZcdTgyOWFcdTgyOWJcdTgyOWVcdTgyYTBcdTgyYTJcdTgyYTNcdTgyYTdcdTgyYjJcdTgyYjVcdTgyYjZcdTgyYmFcdTgyYmJcdTgyYmNcdTgyYmZcdTgyYzBcdTgyYzJcdTgyYzNcdTgyYzVcdTgyYzZcdTgyYzlcdTgyZDBcdTgyZDZcdTgyZDlc''@;'; put 'put ''dTgyZGFcdTgyZGRcdTgyZTJcdTgyZTdcdTgyZThcdTgyZTlcdTgyZWFcdTgyZWNcdTgyZWRcdTgyZWVcdTgyZjBcdTgyZjJcdTgyZjNcdTgyZjVcdTgyZjZcdTgyZjgiXSxbImM2ODAiLCJcdTgyZmFcdTgyZmMiLDQsIlx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMx''@;'; put 'put ''Nlx1ODMxOFx1ODMxOVx1ODMxZCIsOSwiXHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3''@;'; put 'put ''NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUx''@;'; put 'put ''XHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2''@;'; put 'put ''YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwIl0sWyJjNzQwIiwiXHU4MzNlXHU4MzNm''@;'; put 'put ''XHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhIiw0LCJcdTgzNTNcdTgzNTUiLDQsIlx1ODM1ZFx1ODM2Mlx1ODM3MCIsNiwiXHU4Mzc5XHU4MzdhXHU4MzdlIiw2LCJcdTgzODdcdTgzODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRc''@;'; put 'put ''dTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTEiLDYsIlx1ODNhY1x1ODNhZFx1ODNhZSJdLFsiYzc4MCIsIlx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNj''@;'; put 'put ''ZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1''@;'; put 'put ''N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4''@;'; put 'put ''NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1''@;'; put 'put ''OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVh''@;'; put 'put ''Zlx1NWM0OFx1OWE3MVx1NmUyMCJdLFsiYzg0MCIsIlx1ODNlZVx1ODNlZlx1ODNmMyIsNCwiXHU4M2ZhXHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyIiw1LCJcdTg0MTlcdTg0MWFcdTg0MWJcdTg0''@;'; put 'put ''MWUiLDUsIlx1ODQyOSIsNywiXHU4NDMyIiw1LCJcdTg0MzlcdTg0M2FcdTg0M2JcdTg0M2UiLDcsIlx1ODQ0N1x1ODQ0OFx1ODQ0OSJdLFsiYzg4MCIsIlx1ODQ0YSIsNiwiXHU4NDUyIiw0LCJcdTg0NThcdTg0NWRcdTg0NWVcdTg0NWZcdTg0NjBcdTg0NjJcdTg0NjQiLDQsIlx1ODQ2YVx1''@;'; put 'put ''ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYz''@;'; put 'put ''OFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1''@;'; put 'put ''OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1''@;'; put 'put ''ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMSJdLFsiYzk0MCIsIlx1ODQ3ZCIsNCwiXHU4NDgzXHU4NDg0XHU4NDg1XHU4''@;'; put 'put ''NDg2XHU4NDhhXHU4NDhkXHU4NDhmIiw3LCJcdTg0OThcdTg0OWFcdTg0OWJcdTg0OWRcdTg0OWVcdTg0OWZcdTg0YTBcdTg0YTIiLDEyLCJcdTg0YjBcdTg0YjFcdTg0YjNcdTg0YjVcdTg0YjZcdTg0YjdcdTg0YmJcdTg0YmNcdTg0YmVcdTg0YzBcdTg0YzJcdTg0YzNcdTg0YzVcdTg0YzZc''@;'; put 'put ''dTg0YzdcdTg0YzhcdTg0Y2JcdTg0Y2NcdTg0Y2VcdTg0Y2ZcdTg0ZDJcdTg0ZDRcdTg0ZDVcdTg0ZDciXSxbImM5ODAiLCJcdTg0ZDgiLDQsIlx1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlNyIsNCwiXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxIiwxMCwiXHU4NGZkXHU4NGZlXHU4NTAw''@;'; put 'put ''XHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3''@;'; put 'put ''M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3''@;'; put 'put ''XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3''@;'; put 'put ''OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzIl0sWyJjYTQwIiwiXHU4NTAzIiw4LCJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlc''@;'; put 'put ''dTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjIiLDgsIlx1ODUyZCIsOSwiXHU4NTNlIiw0LCJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGIiLDEwXSxbImNhODAiLCJcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWYiLDQsIlx1ODU2NVx1ODU2''@;'; put 'put ''Nlx1ODU2N1x1ODU2OSIsOCwiXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3''@;'; put 'put ''N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAy''@;'; put 'put ''XHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4''@;'; put 'put ''MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxIl0sWyJjYjQwIiwiXHU4NTgy''@;'; put 'put ''XHU4NTgzXHU4NTg2XHU4NTg4Iiw2LCJcdTg1OTAiLDEwLCJcdTg1OWQiLDYsIlx1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMSIsNSwiXHU4NWI4XHU4NWJhIiw2LCJcdTg1YzIiLDYsIlx1ODVjYSIsNCwiXHU4NWQxXHU4NWQyIl0sWyJjYjgwIiwiXHU4''@;'; put 'put ''NWQ0XHU4NWQ2Iiw1LCJcdTg1ZGQiLDYsIlx1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYSIsMTQsIlx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1''@;'; put 'put ''NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAw''@;'; put 'put ''MVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1''@;'; put 'put ''Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NCJdLFsiY2M0MCIsIlx1ODVmOVx1ODVmYVx1ODVmY1x1ODVm''@;'; put 'put ''ZFx1ODVmZVx1ODYwMCIsNCwiXHU4NjA2IiwxMCwiXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3IiwxNSwiXHU4NjI4XHU4NjJhIiwxMywiXHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwIl0sWyJjYzgwIiwiXHU4NjQxIiwxMSwiXHU4NjUyXHU4NjUzXHU4''@;'; put 'put ''NjU1Iiw0LCJcdTg2NWJcdTg2NWNcdTg2NWRcdTg2NWZcdTg2NjBcdTg2NjFcdTg2NjMiLDcsIlx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1''@;'; put 'put ''NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5''@;'; put 'put ''Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1''@;'; put 'put ''NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjMyJdLFsiY2Q0MCIsIlx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3MiIsNiwi''@;'; put 'put ''XHU4NjgzIiw2LCJcdTg2OGUiLDQsIlx1ODY5NFx1ODY5NiIsNSwiXHU4NjllIiw0LCJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmIiLDQsIlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1''@;'; put 'put ''ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkYyJdLFsiY2Q4MCIsIlx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZm''@;'; put 'put ''Y1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVhZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1''@;'; put 'put ''NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcx''@;'; put 'put ''NVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRjN1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1''@;'; put 'put ''NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMSJdLFsiY2U0MCIs''@;'; put 'put ''Ilx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MCIsNiwiXHU4NzRhXHU4''@;'; put 'put ''NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhIiw1LCJcdTg3NjFcdTg3NjJcdTg3NjYiLDcsIlx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NSJdLFsiY2U4MCIsIlx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1''@;'; put 'put ''ODc4MFx1ODc4MVx1ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZSIsNCwiXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4Iiw2LCJcdTg3YTAiLDQsIlx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1''@;'; put 'put ''N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQz''@;'; put 'put ''Ylx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1''@;'; put 'put ''NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3''@;'; put 'put ''YSJdLFsiY2Y0MCIsIlx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMSIsNCwiXHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjIiw0LCJcdTg3''@;'; put 'put ''ZDQiLDYsIlx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZiIsOV0sWyJjZjgwIiwiXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAy''@;'; put 'put ''XHU4ODA0Iiw1LCJcdTg4MGIiLDcsIlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxYyIsNCwiXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYw''@;'; put 'put ''XHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1''@;'; put 'put ''NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYx''@;'; put 'put ''XHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzIl0sWyJkMDQwIiwiXHU4ODI0IiwxMywiXHU4''@;'; put 'put ''ODMzIiw1LCJcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDYiLDUsIlx1ODg0ZSIsNSwiXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhIiw2LCJcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4''@;'; put 'put ''NzZcdTg4NzhcdTg4NzlcdTg4N2EiXSxbImQwODAiLCJcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNcdTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTciLDQsIlx1ODg5ZCIsNCwiXHU4OGEzXHU4OGE1Iiw1''@;'; put 'put ''LCJcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJc''@;'; put 'put ''dTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUx''@;'; put 'put ''ZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZc''@;'; put 'put ''dTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODQiXSxbImQxNDAiLCJcdTg4YWNcdTg4YWVcdTg4YWZcdTg4YjBcdTg4YjIiLDQsIlx1ODhiOFx1ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhj''@;'; put 'put ''MFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYSIsNCwiXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5Iiw2LCJcdTg4ZjJcdTg4ZjVcdTg4ZjZcdTg4ZjdcdTg4ZmFcdTg4''@;'; put 'put ''ZmJcdTg4ZmRcdTg4ZmZcdTg5MDBcdTg5MDFcdTg5MDMiLDVdLFsiZDE4MCIsIlx1ODkwOVx1ODkwYiIsNCwiXHU4OTExXHU4OTE0Iiw0LCJcdTg5MWMiLDQsIlx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkzMVx1''@;'; put 'put ''ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZj''@;'; put 'put ''NVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1''@;'; put 'put ''OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2''@;'; put 'put ''Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3NiJdLFsiZDI0MCIsIlx1ODkzOCIsOCwiXHU4OTQyXHU4OTQzXHU4OTQ1IiwyNCwiXHU4OTYwIiw1LCJcdTg5NjciLDE5LCJcdTg5''@;'; put 'put ''N2MiXSxbImQyODAiLCJcdTg5N2RcdTg5N2VcdTg5ODBcdTg5ODJcdTg5ODRcdTg5ODVcdTg5ODciLDI2LCJcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZc''@;'; put 'put ''dTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVm''@;'; put 'put ''NWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNc''@;'; put 'put ''dThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTAiXSxbImQzNDAiLCJcdTg5YTIiLDMwLCJcdTg5YzNcdTg5''@;'; put 'put ''Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlcdTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjQiLDZdLFsiZDM4MCIsIlx1ODlm''@;'; put 'put ''YiIsNCwiXHU4YTAxIiw1LCJcdThhMDgiLDIxLCJcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgx''@;'; put 'put ''YzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNc''@;'; put 'put ''dTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTVi''@;'; put 'put ''ODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODkiXSxbImQ0NDAiLCJcdThhMWUiLDMxLCJcdThhM2YiLDgsIlx1OGE0OSIsMjFdLFsiZDQ4MCIsIlx1OGE1ZiIsMjUs''@;'; put 'put ''Ilx1OGE3YSIsNiwiXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5''@;'; put 'put ''NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5''@;'; put 'put ''XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2''@;'; put 'put ''MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3Il0sWyJkNTQwIiwiXHU4YTgxIiw3LCJcdThhOGIiLDcsIlx1OGE5NCIsNDZdLFsiZDU4MCIsIlx1OGFjMyIsMzIsIlx1OTRlMVx1OTVmOFx1Nzcy''@;'; put 'put ''OFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1''@;'; put 'put ''NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2''@;'; put 'put ''ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1''@;'; put 'put ''Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZiJdLFsiZDY0MCIsIlx1OGFlNCIsMzQsIlx1OGIwOCIsMjddLFsiZDY4MCIsIlx1OGIyNFx1OGIyNVx1OGIyNyIsMzAsIlx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1''@;'; put 'put ''NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2''@;'; put 'put ''ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2ExYVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1''@;'; put 'put ''OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJh''@;'; put 'put ''OVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MSJdLFsiZDc0MCIsIlx1OGI0NiIsMzEsIlx1OGI2NyIsNCwiXHU4YjZkIiwyNV0sWyJkNzgwIiwiXHU4Yjg3IiwyNCwiXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdi''@;'; put 'put ''XHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2''@;'; put 'put ''ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZj''@;'; put 'put ''XHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0''@;'; put 'put ''ZjVjXHU1NzUwXHU1ZWE3Il0sWyJkODQwIiwiXHU4YzM4Iiw4LCJcdThjNDJcdThjNDNcdThjNDRcdThjNDVcdThjNDhcdThjNGFcdThjNGJcdThjNGQiLDcsIlx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1YiIsNSwiXHU4YzYzIiw2LCJcdThjNmMiLDYsIlx1OGM3NFx1OGM3NVx1OGM3''@;'; put 'put ''Nlx1OGM3N1x1OGM3YiIsNiwiXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3Il0sWyJkODgwIiwiXHU4Yzg4XHU4YzhiXHU4YzhkIiw2LCJcdThjOTVcdThjOTZcdThjOTdcdThjOTkiLDIwLCJcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTli''@;'; put 'put ''MzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZc''@;'; put 'put ''dTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0''@;'; put 'put ''YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1Mzhc''@;'; put 'put ''dTRmNWFcdTRmNWQiXSxbImQ5NDAiLCJcdThjYWUiLDYyXSxbImQ5ODAiLCJcdThjZWQiLDMyLCJcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThc''@;'; put 'put ''dTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUw''@;'; put 'put ''YTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRc''@;'; put 'put ''dThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmMiXSxbImRhNDAiLCJcdThkMGUiLDE0LCJcdThkMjBcdThkNTFcdThk''@;'; put 'put ''NTJcdThkNTdcdThkNWZcdThkNjVcdThkNjhcdThkNjlcdThkNmFcdThkNmNcdThkNmVcdThkNmZcdThkNzFcdThkNzJcdThkNzgiLDgsIlx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4YyIsNCwiXHU4ZDkyXHU4ZDkzXHU4ZDk1Iiw5LCJcdThkYTBcdThkYTEiXSxb''@;'; put 'put ''ImRhODAiLCJcdThkYTJcdThkYTQiLDEyLCJcdThkYjJcdThkYjZcdThkYjdcdThkYjlcdThkYmJcdThkYmRcdThkYzBcdThkYzFcdThkYzJcdThkYzVcdThkYzdcdThkYzhcdThkYzlcdThkY2FcdThkY2RcdThkZDBcdThkZDJcdThkZDNcdThkZDRcdTUxYzdcdTUxOTZcdTUxYTJcdTUxYTVc''@;'; put 'put ''dThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThiZjNcdThi''@;'; put 'put ''ZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVcdThjMmZc''@;'; put 'put ''dThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkwOWJcdTkw''@;'; put 'put ''OWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmEiXSxbImRiNDAiLCJcdThkZDVcdThkZDhcdThkZDlcdThkZGNcdThkZTBcdThkZTFcdThkZTJcdThkZTVcdThkZTZcdThkZTdcdThkZTlcdThkZWRcdThkZWVcdThkZjBcdThkZjFcdThkZjJcdThkZjRcdThkZjZc''@;'; put 'put ''dThkZmNcdThkZmUiLDYsIlx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNSIsNywiXHU4ZTIwXHU4ZTIxXHU4ZTI0Iiw0LCJcdThlMmJcdThlMmRcdThlMzBcdThlMzJcdThlMzNcdThlMzRcdThlMzZcdThlMzdcdThlMzhc''@;'; put 'put ''dThlM2JcdThlM2NcdThlM2UiXSxbImRiODAiLCJcdThlM2ZcdThlNDNcdThlNDVcdThlNDZcdThlNGMiLDQsIlx1OGU1MyIsNSwiXHU4ZTVhIiwxMSwiXHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0''@;'; put 'put ''XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1''@;'; put 'put ''MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVj''@;'; put 'put ''XHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1''@;'; put 'put ''N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkIl0sWyJkYzQwIiwiXHU4ZTczXHU4ZTc1XHU4ZTc3Iiw0LCJcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODgiLDYsIlx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NSIsNiwiXHU4ZTlkXHU4ZTlmIiwxMSwiXHU4''@;'; put 'put ''ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzIiw2LCJcdThlYmIiLDddLFsiZGM4MCIsIlx1OGVjMyIsMTAsIlx1OGVjZiIsMjEsIlx1NTgwYlx1NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4''@;'; put 'put ''MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1''@;'; put 'put ''ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJk''@;'; put 'put ''NVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NSJdLFsiZGQ0MCIsIlx1OGVlNSIs''@;'; put 'put ''NjJdLFsiZGQ4MCIsIlx1OGYyNCIsMzIsIlx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1''@;'; put 'put ''ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQy''@;'; put 'put ''Nlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1''@;'; put 'put ''ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYSJdLFsiZGU0MCIsIlx1OGY0NSIsMzIsIlx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZh''@;'; put 'put ''Mlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNiJdLFsiZGU4MCIsIlx1OGZjOSIsNCwiXHU4ZmNmXHU4''@;'; put 'put ''ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRhXHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2''@;'; put 'put ''XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4''@;'; put 'put ''NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIy''@;'; put 'put ''XHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2''@;'; put 'put ''NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2Il0sWyJkZjQwIiwiXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3Iiw1LCJcdTkwMzAiLDQsIlx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1''@;'; put 'put ''OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OCIsNCwiXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjIiw1LCJcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmYiLDQsIlx1OTA3NiIsNiwiXHU5MDdlXHU5MDgxIl0sWyJkZjgwIiwiXHU5''@;'; put 'put ''MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjIiw0LCJcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRc''@;'; put 'put ''dTkwYmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0''@;'; put 'put ''MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJc''@;'; put 'put ''dTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1''@;'; put 'put ''MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2MiXSxbImUwNDAiLCJcdTkwYzJcdTkwYzNcdTkwYzZcdTkwYzhcdTkwYzlcdTkwY2JcdTkwY2NcdTkwY2RcdTkwZDJcdTkwZDRcdTkwZDVcdTkwZDZc''@;'; put 'put ''dTkwZDhcdTkwZDlcdTkwZGFcdTkwZGVcdTkwZGZcdTkwZTBcdTkwZTNcdTkwZTRcdTkwZTVcdTkwZTlcdTkwZWFcdTkwZWNcdTkwZWVcdTkwZjBcdTkwZjFcdTkwZjJcdTkwZjNcdTkwZjVcdTkwZjZcdTkwZjdcdTkwZjlcdTkwZmFcdTkwZmJcdTkwZmNcdTkwZmZcdTkxMDBcdTkxMDFcdTkx''@;'; put 'put ''MDNcdTkxMDUiLDE5LCJcdTkxMWFcdTkxMWJcdTkxMWMiXSxbImUwODAiLCJcdTkxMWRcdTkxMWZcdTkxMjBcdTkxMjFcdTkxMjQiLDEwLCJcdTkxMzBcdTkxMzIiLDYsIlx1OTEzYSIsOCwiXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1''@;'; put 'put ''NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0''@;'; put 'put ''XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1''@;'; put 'put ''NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTEx''@;'; put 'put ''XHU1ZTMxXHU1ZTNiXHU1ZTNjIl0sWyJlMTQwIiwiXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVmXHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5''@;'; put 'put ''MTdjXHU5MTgwIiw0LCJcdTkxODZcdTkxODhcdTkxOGFcdTkxOGVcdTkxOGZcdTkxOTMiLDYsIlx1OTE5YyIsNSwiXHU5MWE0Iiw1LCJcdTkxYWJcdTkxYWNcdTkxYjBcdTkxYjFcdTkxYjJcdTkxYjNcdTkxYjZcdTkxYjdcdTkxYjhcdTkxYjlcdTkxYmIiXSxbImUxODAiLCJcdTkxYmMiLDEw''@;'; put 'put ''LCJcdTkxYzhcdTkxY2JcdTkxZDBcdTkxZDIiLDksIlx1OTFkZCIsOCwiXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1''@;'; put 'put ''Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVk''@;'; put 'put ''XHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3''@;'; put 'put ''MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhIl0sWyJlMjQwIiwiXHU5MWU2Iiw2Ml0sWyJlMjgwIiwiXHU5MjI1IiwzMiwiXHU3MmZiXHU3''@;'; put 'put ''MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3Iiw1LCJc''@;'; put 'put ''dTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVl''@;'; put 'put ''ZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2Zc''@;'; put 'put ''dTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDIiXSxbImUzNDAiLCJcdTkyNDYiLDQ1LCJcdTkyNzUiLDE2XSxbImUzODAiLCJcdTkyODYiLDcsIlx1OTI4ZiIsMjQsIlx1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1''@;'; put 'put ''NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVl''@;'; put 'put ''Ylx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1''@;'; put 'put ''NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNl''@;'; put 'put ''Zlx1NmNmZSJdLFsiZTQ0MCIsIlx1OTJhOCIsNSwiXHU5MmFmIiwyNCwiXHU5MmM5IiwzMV0sWyJlNDgwIiwiXHU5MmU5IiwzMiwiXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRm''@;'; put 'put ''XHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2''@;'; put 'put ''ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNm''@;'; put 'put ''XHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxIl0sWyJlNTQwIiwiXHU5MzBhIiw1''@;'; put 'put ''MSwiXHU5MzNmIiwxMF0sWyJlNTgwIiwiXHU5MzRhIiwzMSwiXHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1''@;'; put 'put ''YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBk''@;'; put 'put ''XHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1''@;'; put 'put ''YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzIl0sWyJlNjQwIiwiXHU5MzZjIiwzNCwiXHU5MzkwIiwyN10sWyJlNjgwIiwiXHU5M2FjIiwy''@;'; put 'put ''OSwiXHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEz''@;'; put 'put ''XHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1''@;'; put 'put ''YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4''@;'; put 'put ''XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5Il0sWyJlNzQwIiwiXHU5M2NlIiw3LCJcdTkzZDciLDU0XSxbImU3ODAiLCJcdTk0MGUiLDMyLCJcdTdlYWRcdTdlYjBcdTdlYmVc''@;'; put 'put ''dTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdm''@;'; put 'put ''MDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjEiLDYsIlx1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZiIsNCwiXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3''@;'; put 'put ''M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJj''@;'; put 'put ''Il0sWyJlODQwIiwiXHU5NDJmIiwxNCwiXHU5NDNmIiw0MywiXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmIl0sWyJlODgwIiwiXHU5NDcwIiwyMCwiXHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3''@;'; put 'put ''NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVl''@;'; put 'put ''XHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2''@;'; put 'put ''ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhm''@;'; put 'put ''XHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5Il0sWyJlOTQwIiwiXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3Iiw3LCJcdTk1ODAiLDQy''@;'; put 'put ''XSxbImU5ODAiLCJcdTk1YWIiLDMyLCJcdTY5MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5''@;'; put 'put ''NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdcdTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJc''@;'; put 'put ''dTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZhMjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThm''@;'; put 'put ''NzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZcdThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGIiXSxbImVhNDAiLCJcdTk1Y2MiLDI3LCJcdTk1ZWNcdTk1ZmZcdTk2MDdcdTk2MTNcdTk2MThcdTk2MWJcdTk2MWVcdTk2MjBc''@;'; put 'put ''dTk2MjMiLDYsIlx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1NyJdLFsiZWE4MCIsIlx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1''@;'; put 'put ''Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZCIsNCwiXHU5NjczXHU5Njc4IiwxMiwiXHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2''@;'; put 'put ''MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2''@;'; put 'put ''XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4''@;'; put 'put ''ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwIl0sWyJl''@;'; put 'put ''YjQwIiwiXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkIiw5LCJcdTk2YTgiLDcsIlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZj''@;'; put 'put ''Ylx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNiIsOSwiXHU5NmUxIiw2LCJcdTk2ZWIiXSxbImViODAiLCJcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3''@;'; put 'put ''MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTciLDQsIlx1OTcxZFx1OTcxZlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1''@;'; put 'put ''NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBl''@;'; put 'put ''N1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBlYlx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1''@;'; put 'put ''ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYiJdLFsiZWM0MCIsIlx1OTcy''@;'; put 'put ''MSIsOCwiXHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzIiw0LCJcdTk3M2FcdTk3M2JcdTk3M2NcdTk3M2RcdTk3M2YiLDE4LCJcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NWFcdTk3NWNcdTk3NWRcdTk3NWZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3''@;'; put 'put ''NmEiLDddLFsiZWM4MCIsIlx1OTc3Mlx1OTc3NVx1OTc3NyIsNCwiXHU5NzdkIiw3LCJcdTk3ODYiLDQsIlx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OSIsNCwiXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2''@;'; put 'put ''YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMw''@;'; put 'put ''XHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3''@;'; put 'put ''MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlh''@;'; put 'put ''XHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwIl0sWyJlZDQwIiwiXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0Iiw2LCJcdTk3YWNcdTk3YWVcdTk3YjBcdTk3YjFcdTk3YjNcdTk3YjUiLDQ2XSxbImVkODAiLCJcdTk3ZTRcdTk3ZTVcdTk3ZThcdTk3ZWUiLDQsIlx1OTdmNFx1OTdmNyIs''@;'; put 'put ''MjMsIlx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1Nzgx''@;'; put 'put ''OFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1''@;'; put 'put ''Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1Nzcx''@;'; put 'put ''YVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OCJdLFsiZWU0MCIsIlx1OTgwZiIsNjJdLFsiZWU4MCIsIlx1OTg0ZSIsMzIsIlx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5''@;'; put 'put ''MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1''@;'; put 'put ''OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNiIsNCwiXHU5NGJj''@;'; put 'put ''XHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4Iiw2LCJcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWEiXSxbImVmNDAiLCJcdTk4NmYiLDUsIlx1OTg4''@;'; put 'put ''Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOCIsMzcsIlx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMCIsNF0sWyJlZjgwIiwiXHU5OGU1XHU5OGU2XHU5OGU5IiwzMCwiXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYz''@;'; put 'put ''XHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyIiw0LCJcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1''@;'; put 'put ''MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVc''@;'; put 'put ''dTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjQiLDgsIlx1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNCJdLFsiZjA0MCIsIlx1OTkwOCIsNCwi''@;'; put 'put ''XHU5OTBlXHU5OTBmXHU5OTExIiwyOCwiXHU5OTJmIiwyNl0sWyJmMDgwIiwiXHU5OTRhIiw5LCJcdTk5NTYiLDEyLCJcdTk5NjRcdTk5NjZcdTk5NzNcdTk5NzhcdTk5NzlcdTk5N2JcdTk5N2VcdTk5ODJcdTk5ODNcdTk5ODlcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBc''@;'; put 'put ''dTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjgiLDQsIlx1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0''@;'; put 'put ''Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2NiIsNiwiXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3''@;'; put 'put ''NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5Il0sWyJmMTQwIiwiXHU5OThj''@;'; put 'put ''XHU5OThlXHU5OTlhIiwxMCwiXHU5OWE2XHU5OWE3XHU5OWE5Iiw0N10sWyJmMTgwIiwiXHU5OWQ5IiwzMiwiXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2''@;'; put 'put ''XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4''@;'; put 'put ''OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0''@;'; put 'put ''XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzIl0sWyJmMjQwIiwiXHU5OWZhIiw2Ml0sWyJmMjgwIiwi''@;'; put 'put ''XHU5YTM5IiwzMiwiXHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4''@;'; put 'put ''NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4''@;'; put 'put ''XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4''@;'; put 'put ''NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyIl0sWyJmMzQwIiwiXHU5YTVhIiwxNywiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5''@;'; put 'put ''Iiw2LCJcdTlhYjJcdTlhYjNcdTlhYjRcdTlhYjVcdTlhYjlcdTlhYmJcdTlhYmRcdTlhYmVcdTlhYmZcdTlhYzNcdTlhYzRcdTlhYzYiLDQsIlx1OWFjZFx1OWFjZVx1OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkYyJdLFsi''@;'; put 'put ''ZjM4MCIsIlx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMCIsOCwiXHU5YWZhXHU5YWZjIiw2LCJcdTliMDRcdTliMDVcdTliMDZcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3''@;'; put 'put ''ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVc''@;'; put 'put ''dTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdi''@;'; put 'put ''NWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFc''@;'; put 'put ''dTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGIiXSxbImY0NDAiLCJcdTliMDdcdTliMDkiLDUsIlx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNCIsMTAsIlx1OWIyMFx1OWIyMVx1OWIyMlx1OWIyNCIsMTAsIlx1OWIzMFx1OWIzMVx1OWIzMyIsNywiXHU5YjNkXHU5YjNlXHU5YjNm''@;'; put 'put ''XHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5YjU1Iiw1XSxbImY0ODAiLCJcdTliNWIiLDMyLCJcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFc''@;'; put 'put ''dTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdm''@;'; put 'put ''YWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFc''@;'; put 'put ''dTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjQiXSxbImY1NDAi''@;'; put 'put ''LCJcdTliN2MiLDYyXSxbImY1ODAiLCJcdTliYmIiLDMyLCJcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlcdTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkx''@;'; put 'put ''YjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThkYjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlc''@;'; put 'put ''dThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNcdThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThl''@;'; put 'put ''NzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThjODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGMiXSxbImY2NDAiLCJcdTliZGMiLDYyXSxbImY2ODAiLCJcdTljMWIiLDMyLCJcdTg5ZTVcdTg5ZWJcdTg5''@;'; put 'put ''ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODUiLDUsIlx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZiY1x1OTZiZFx1OTZjZVx1''@;'; put 'put ''OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1OWM5NVx1OWM5YVx1OWM5''@;'; put 'put ''Ylx1OWM5ZSIsNSwiXHU5Y2E1Iiw0LCJcdTljYWJcdTljYWRcdTljYWVcdTljYjAiLDcsIlx1OWNiYVx1OWNiYlx1OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYiJdLFsiZjc0MCIsIlx1OWMzYyIsNjJdLFsiZjc4MCIsIlx1OWM3Ylx1OWM3ZFx1OWM3ZVx1''@;'; put 'put ''OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZSIsNCwiXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2Nj''@;'; put 'put ''Iiw0LCJcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThcdTlhYjZcdTlhYmFcdTlh''@;'; put 'put ''YmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlc''@;'; put 'put ''dTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVcdTllZWFcdTllZWZcdTlm''@;'; put 'put ''MjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDQiXSxbImY4NDAiLCJcdTljZTMiLDYyXSxbImY4ODAiLCJcdTlkMjIiLDMyXSxbImY5NDAiLCJcdTlkNDMiLDYyXSxbImY5ODAiLCJcdTlkODIiLDMyXSxbImZhNDAiLCJcdTlkYTMiLDYyXSxbImZhODAiLCJcdTlk''@;'; put 'put ''ZTIiLDMyXSxbImZiNDAiLCJcdTllMDMiLDI3LCJcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTllNGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTll''@;'; put 'put ''NmZcdTllNzJcdTllNzQiLDksIlx1OWU4MCJdLFsiZmI4MCIsIlx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4YyIsNSwiXHU5ZTk0Iiw4LCJcdTllOWVcdTllYTAiLDUsIlx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYSJdLFsiZmM0MCIsIlx1OWVhYiIsOCwi''@;'; put 'put ''XHU5ZWI1XHU5ZWI2XHU5ZWI3XHU5ZWI5XHU5ZWJhXHU5ZWJjXHU5ZWJmIiw0LCJcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTll''@;'; put 'put ''ZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjAiLDgsIlx1OWVmYVx1OWVmZFx1OWVmZiIsNl0sWyJmYzgwIiwiXHU5ZjA2Iiw0LCJcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWEiLDUsIlx1OWYyMVx1OWYyMyIsOCwiXHU5''@;'; put 'put ''ZjJkXHU5ZjJlXHU5ZjMwXHU5ZjMxIl0sWyJmZDQwIiwiXHU5ZjMyIiw0LCJcdTlmMzhcdTlmM2FcdTlmM2NcdTlmM2YiLDQsIlx1OWY0NSIsMTAsIlx1OWY1MiIsMzhdLFsiZmQ4MCIsIlx1OWY3OSIsNSwiXHU5ZjgxXHU5ZjgyXHU5ZjhkIiwxMSwiXHU5ZjljXHU5ZjlkXHU5ZjllXHU5ZmEx''@;'; put 'put ''Iiw0LCJcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjEiXSxbImZlNDAiLCJcdWZhMGNcdWZhMGRcdWZhMGVcdWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjkiXV0nKX0sNzczNDg6YXQ9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7YXQuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI3XSxbIjgxNDEiLCJcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGIiLDQsIlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNSIsNiwiXHVhYzJlXHVhYzMyXHVhYzMzXHVh''@;'; put 'put ''YzM0Il0sWyI4MTYxIiwiXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxIiw5LCJcdWFjNGNcdWFjNGUiLDUsIlx1YWM1NSJdLFsiODE4MSIsIlx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZCIsMTgsIlx1YWM3Mlx1YWM3M1x1''@;'; put 'put ''YWM3NVx1YWM3Nlx1YWM3OVx1YWM3YiIsNCwiXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1Iiw2LCJcdWFjOWVcdWFjYTIiLDUsIlx1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMSIsNiwiXHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVh''@;'; put 'put ''Y2MyXHVhY2MzXHVhY2M1XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkIiw3LCJcdWFjZDZcdWFjZDgiLDcsIlx1YWNlMlx1YWNlM1x1YWNlNVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmNyIsNCwiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVh''@;'; put 'put ''ZDAyXHVhZDAzXHVhZDA1XHVhZDA3Iiw0LCJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTMiXSxbIjgyNDEiLCJcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjEiLDcsIlx1YWQyYVx1YWQyYlx1YWQyZSIsNV0sWyI4MjYxIiwi''@;'; put 'put ''XHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkIiw2LCJcdWFkNDZcdWFkNDhcdWFkNGEiLDUsIlx1YWQ1MVx1YWQ1Mlx1YWQ1M1x1YWQ1NVx1YWQ1Nlx1YWQ1NyJdLFsiODI4MSIsIlx1YWQ1OSIsNywiXHVhZDYyXHVhZDY0Iiw3LCJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJc''@;'; put 'put ''dWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODMiLDQsIlx1YWQ4YVx1YWQ4Ylx1YWQ4ZFx1YWQ4ZVx1YWQ4Zlx1YWQ5MSIsMTAsIlx1YWQ5ZSIsNSwiXHVhZGE1IiwxNywiXHVhZGI4Iiw3LCJcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzkiLDYsIlx1''@;'; put 'put ''YWRkMlx1YWRkNCIsNywiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1IiwxOF0sWyI4MzQxIiwiXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyIiw1LCJcdWFlMGFcdWFlMGNcdWFlMGUiLDUsIlx1YWUxNSIsN10sWyI4MzYxIiwiXHVhZTFkIiwxOCwiXHVh''@;'; put 'put ''ZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjIl0sWyI4MzgxIiwiXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3Iiw0LCJcdWFlNWVcdWFlNjJcdWFlNjNc''@;'; put 'put ''dWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzEiLDYsIlx1YWU3YVx1YWU3ZSIsNSwiXHVhZTg2Iiw1LCJcdWFlOGQiLDQ2LCJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzUiLDYsIlx1YWVjZVx1YWVkMiIsNSwiXHVhZWRhXHVhZWRiXHVh''@;'; put 'put ''ZWRkIiw4XSxbIjg0NDEiLCJcdWFlZTZcdWFlZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWUiLDUsIlx1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZCIsOF0sWyI4NDYxIiwiXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExIiwx''@;'; put 'put ''OF0sWyI4NDgxIiwiXHVhZjI0Iiw3LCJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzUiLDYsIlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YSIsNSwiXHVhZjUxIiwxMCwiXHVhZjVlIiw1LCJcdWFmNjYiLDE4LCJcdWFmN2EiLDUsIlx1YWY4MVx1YWY4Mlx1''@;'; put 'put ''YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OSIsNiwiXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2Iiw1LCJcdWFmOWQiLDI2LCJcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmUiXSxbIjg1NDEiLCJcdWFmYmZcdWFmYzEiLDUsIlx1YWZjYVx1YWZjY1x1YWZjZiIsNCwiXHVhZmQ1Iiw2LCJcdWFm''@;'; put 'put ''ZGQiLDRdLFsiODU2MSIsIlx1YWZlMiIsNSwiXHVhZmVhIiw1LCJcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjkiLDYsIlx1YjAwMlx1YjAwMyJdLFsiODU4MSIsIlx1YjAwNSIsNiwiXHViMDBkXHViMDBlXHViMDBmXHViMDExXHViMDEyXHViMDEzXHViMDE1Iiw2LCJcdWIw''@;'; put 'put ''MWUiLDksIlx1YjAyOSIsMjYsIlx1YjA0Nlx1YjA0N1x1YjA0OVx1YjA0Ylx1YjA0ZFx1YjA0Zlx1YjA1MFx1YjA1MVx1YjA1Mlx1YjA1Nlx1YjA1OFx1YjA1YVx1YjA1Ylx1YjA1Y1x1YjA1ZSIsMjksIlx1YjA3ZVx1YjA3Zlx1YjA4MVx1YjA4Mlx1YjA4M1x1YjA4NSIsNiwiXHViMDhlXHVi''@;'; put 'put ''MDkwXHViMDkyIiw1LCJcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTQiXSxbIjg2NDEiLCJcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmQiLDYsIlx1YjBjNlx1YjBjYSIsNSwiXHViMGQyIl0sWyI4NjYx''@;'; put 'put ''IiwiXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5Iiw2LCJcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTYiLDEwXSxbIjg2ODEiLCJcdWIwZjEiLDIyLCJcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWUiLDQs''@;'; put 'put ''Ilx1YjEyNlx1YjEyN1x1YjEyOVx1YjEyYVx1YjEyYlx1YjEyZCIsNiwiXHViMTM2XHViMTNhIiw1LCJcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDkiLDYsIlx1YjE1Mlx1YjE1M1x1YjE1Nlx1YjE1N1x1YjE1OVx1YjE1YVx1YjE1Ylx1YjE1ZFx1YjE1ZVx1YjE1Zlx1YjE2''@;'; put 'put ''MSIsMjIsIlx1YjE3YVx1YjE3Ylx1YjE3ZFx1YjE3ZVx1YjE3Zlx1YjE4MVx1YjE4MyIsNCwiXHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkIl0sWyI4NzQxIiwiXHViMTllIiw5LCJcdWIxYTkiLDE1''@;'; put 'put ''XSxbIjg3NjEiLCJcdWIxYjkiLDE4LCJcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDUiXSxbIjg3ODEiLCJcdWIxZDYiLDUsIlx1YjFkZVx1YjFlMCIsNywiXHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxIiw3LCJcdWIxZmFcdWIxZmNcdWIxZmUi''@;'; put 'put ''LDUsIlx1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZCIsNiwiXHViMjE2XHViMjE4XHViMjFhIiw1LCJcdWIyMjEiLDE4LCJcdWIyMzUiLDYsIlx1YjIzZCIsMjYsIlx1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1YjI1Zlx1YjI2MSIsNiwiXHViMjZhIiw0XSxbIjg4NDEiLCJc''@;'; put 'put ''dWIyNmYiLDQsIlx1YjI3NiIsNSwiXHViMjdkIiw2LCJcdWIyODZcdWIyODdcdWIyODhcdWIyOGEiLDRdLFsiODg2MSIsIlx1YjI4Zlx1YjI5Mlx1YjI5M1x1YjI5NVx1YjI5Nlx1YjI5N1x1YjI5YiIsNCwiXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFl''@;'; put 'put ''XHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3Il0sWyI4ODgxIiwiXHViMmI4IiwxNSwiXHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzIiw0LCJcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIy''@;'; put 'put ''ZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDkiLDYsIlx1YjMxMlx1YjMxNiIsNSwiXHViMzFkIiw1NCwiXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHVi''@;'; put 'put ''MzYzIl0sWyI4OTQxIiwiXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5Iiw2LCJcdWIzODJcdWIzODYiLDUsIlx1YjM4ZCJdLFsiODk2MSIsIlx1YjM4ZVx1YjM4Zlx1YjM5MVx1YjM5Mlx1YjM5M1x1YjM5NSIs''@;'; put 'put ''MTAsIlx1YjNhMiIsNSwiXHViM2E5XHViM2FhXHViM2FiXHViM2FkIl0sWyI4OTgxIiwiXHViM2FlIiwyMSwiXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2Uy''@;'; put 'put ''XHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5IiwxOCwiXHViM2ZkIiwxOCwiXHViNDExIiw2LCJcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0MWVcdWI0MWZcdWI0MjEiLDYsIlx1YjQyYVx1YjQyYyIsNywiXHViNDM1IiwxNV0sWyI4YTQxIiwiXHViNDQ1IiwxMCwiXHViNDUyXHVi''@;'; put 'put ''NDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5Iiw2LCJcdWI0NjJcdWI0NjRcdWI0NjYiXSxbIjhhNjEiLCJcdWI0NjciLDQsIlx1YjQ2ZCIsMTgsIlx1YjQ4MVx1YjQ4MiJdLFsiOGE4MSIsIlx1YjQ4MyIsNCwiXHViNDg5IiwxOSwiXHViNDllIiw1LCJcdWI0YTVcdWI0YTZcdWI0YTdcdWI0''@;'; put 'put ''YTlcdWI0YWFcdWI0YWJcdWI0YWQiLDcsIlx1YjRiNlx1YjRiOFx1YjRiYSIsNSwiXHViNGMxXHViNGMyXHViNGMzXHViNGM1XHViNGM2XHViNGM3XHViNGM5Iiw2LCJcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDYiLDUsIlx1YjRkZVx1YjRkZlx1YjRlMVx1YjRlMlx1YjRlNVx1YjRl''@;'; put 'put ''NyIsNCwiXHViNGVlXHViNGYwXHViNGYyIiw1LCJcdWI0ZjkiLDI2LCJcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWQiXSxbIjhiNDEiLCJcdWI1MWUiLDUsIlx1YjUyNlx1YjUyYiIsNCwiXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5Iiw2LCJcdWI1NDJcdWI1NDYi''@;'; put 'put ''XSxbIjhiNjEiLCJcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTUiLDYsIlx1YjU1ZVx1YjU2MiIsOF0sWyI4YjgxIiwiXHViNTZiIiw1MiwiXHViNWEyXHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHVi''@;'; put 'put ''NWFlXHViNWFmXHViNWIyXHViNWI2Iiw0LCJcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzUiLDYsIlx1YjVjZVx1YjVkMiIsNSwiXHViNWQ5IiwxOCwiXHViNWVkIiwxOF0sWyI4YzQxIiwiXHViNjAwIiwxNSwiXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5''@;'; put 'put ''Iiw0XSxbIjhjNjEiLCJcdWI2MWUiLDYsIlx1YjYyNiIsNSwiXHViNjJkIiw2LCJcdWI2MzUiLDVdLFsiOGM4MSIsIlx1YjYzYiIsMTIsIlx1YjY0OSIsMjYsIlx1YjY2NVx1YjY2Nlx1YjY2N1x1YjY2OSIsNTAsIlx1YjY5ZVx1YjY5Zlx1YjZhMVx1YjZhMlx1YjZhM1x1YjZhNSIsNSwiXHVi''@;'; put 'put ''NmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyIiwxNl0sWyI4ZDQxIiwiXHViNmMzIiwxNiwiXHViNmQ1Iiw4XSxbIjhkNjEiLCJcdWI2ZGUiLDE3LCJcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmEiXSxbIjhkODEiLCJcdWI2ZmIiLDQsIlx1YjcwMlx1''@;'; put 'put ''YjcwM1x1YjcwNFx1YjcwNiIsMzMsIlx1YjcyYVx1YjcyYlx1YjcyZFx1YjcyZVx1YjczMSIsNiwiXHViNzNhXHViNzNjIiw3LCJcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGQiLDYsIlx1Yjc1NiIsOSwiXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHVi''@;'; put 'put ''NzY3XHViNzY5Iiw2LCJcdWI3NzJcdWI3NzRcdWI3NzYiLDUsIlx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NSIsNiwiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllIl0sWyI4ZTQxIiwiXHViNzlmXHViN2ExIiw2LCJcdWI3YWFcdWI3''@;'; put 'put ''YWUiLDUsIlx1YjdiNlx1YjdiN1x1YjdiOSIsOF0sWyI4ZTYxIiwiXHViN2MyIiw0LCJcdWI3YzhcdWI3Y2EiLDE5XSxbIjhlODEiLCJcdWI3ZGUiLDEzLCJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjUiLDYsIlx1YjdmZVx1YjgwMiIsNCwiXHViODBhXHViODBiXHViODBk''@;'; put 'put ''XHViODBlXHViODBmXHViODExIiw2LCJcdWI4MWFcdWI4MWNcdWI4MWUiLDUsIlx1YjgyNlx1YjgyN1x1YjgyOVx1YjgyYVx1YjgyYlx1YjgyZCIsNiwiXHViODM2XHViODNhIiw1LCJcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDUiLDExLCJcdWI4NTJcdWI4NTQiLDcsIlx1Yjg1ZVx1Yjg1Zlx1''@;'; put 'put ''Yjg2MVx1Yjg2Mlx1Yjg2M1x1Yjg2NSIsNiwiXHViODZlXHViODcwXHViODcyIiw1LCJcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2QiLDddLFsiOGY0MSIsIlx1Yjg4NSIsNywiXHViODhlIiwxN10sWyI4ZjYxIiwiXHViOGEwIiw3LCJcdWI4YTkiLDYsIlx1YjhiMVx1YjhiMlx1YjhiM1x1Yjhi''@;'; put 'put ''NVx1YjhiNlx1YjhiN1x1YjhiOSIsNF0sWyI4ZjgxIiwiXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2Iiw1LCJcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDUiLDcsIlx1YjhkZVx1YjhlMFx1YjhlMiIsNSwiXHViOGVhXHViOGViXHViOGVkXHViOGVlXHVi''@;'; put 'put ''OGVmXHViOGYxIiw2LCJcdWI4ZmFcdWI4ZmNcdWI4ZmUiLDUsIlx1YjkwNSIsMTgsIlx1YjkxOSIsNiwiXHViOTIxIiwyNiwiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1Iiw2LCJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTIiLDVdLFsiOTA0MSIsIlx1Yjk1YVx1Yjk1Ylx1''@;'; put 'put ''Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MSIsNiwiXHViOTZhXHViOTZjXHViOTZlIiw1LCJcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2QiXSxbIjkwNjEiLCJcdWI5N2UiLDUsIlx1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4ZiIsMTVdLFsiOTA4MSIsIlx1Yjk5ZiIsMTIs''@;'; put 'put ''Ilx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNSIsNiwiXHViOWJlXHViOWMwXHViOWMyIiw1LCJcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDMiLDQsIlx1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZCIsNiwi''@;'; put 'put ''XHViOWY2XHViOWZiIiw0LCJcdWJhMDIiLDUsIlx1YmEwOSIsMTEsIlx1YmExNiIsMzMsIlx1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0NiJdLFsiOTE0MSIsIlx1YmE0N1x1YmE0YVx1YmE0Y1x1YmE0Zlx1YmE1MFx1YmE1MVx1YmE1''@;'; put 'put ''Mlx1YmE1Nlx1YmE1N1x1YmE1OVx1YmE1YVx1YmE1Ylx1YmE1ZCIsNiwiXHViYTY2XHViYTZhIiw1XSxbIjkxNjEiLCJcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzkiLDksIlx1YmE4Nlx1YmE4OFx1YmE4OVx1YmE4YVx1YmE4Ylx1YmE4ZCIsNV0sWyI5MTgxIiwiXHViYTkz''@;'; put 'put ''IiwyMCwiXHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzIiw0LCJcdWJhYmFcdWJhYmNcdWJhYmUiLDUsIlx1YmFjNVx1YmFjNlx1YmFjN1x1YmFjOSIsMTQsIlx1YmFkYSIsMzMsIlx1YmFmZFx1YmFmZVx1YmFmZlx1YmIwMVx1YmIwMlx1YmIwM1x1YmIwNSIsNywiXHViYjBl''@;'; put 'put ''XHViYjEwXHViYjEyIiw1LCJcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjEiLDZdLFsiOTI0MSIsIlx1YmIyOFx1YmIyYVx1YmIyYyIsNywiXHViYjM3XHViYjM5XHViYjNhXHViYjNmIiw0LCJcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJi''@;'; put 'put ''NTFcdWJiNTIiXSxbIjkyNjEiLCJcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTkiLDcsIlx1YmI2Mlx1YmI2NCIsNywiXHViYjZkIiw0XSxbIjkyODEiLCJcdWJiNzIiLDIxLCJcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTEiLDE4LCJcdWJiYTVcdWJiYTZc''@;'; put 'put ''dWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWQiLDYsIlx1YmJiNVx1YmJiNlx1YmJiOCIsNywiXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5Iiw2LCJcdWJiZDFcdWJiZDJcdWJiZDQiLDM1LCJcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDEiXSxbIjkz''@;'; put 'put ''NDEiLCJcdWJjMDMiLDQsIlx1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMyMVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNSJdLFsiOTM2MSIsIlx1YmMzNlx1YmMz''@;'; put 'put ''N1x1YmMzOSIsNiwiXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRiXHViYzRlXHViYzRmXHViYzUxIiw4XSxbIjkzODEiLCJcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWUiLDM3LCJcdWJjODZcdWJjODdcdWJjODlcdWJjOGFcdWJjOGRcdWJjOGYiLDQsIlx1YmM5Nlx1YmM5OFx1''@;'; put 'put ''YmM5YiIsNCwiXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5Iiw2LCJcdWJjYjJcdWJjYjYiLDUsIlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNSIsNywiXHViY2NlXHViY2QyXHViY2QzXHViY2Q0XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkIiwy''@;'; put 'put ''MiwiXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkIl0sWyI5NDQxIiwiXHViY2ZlIiw1LCJcdWJkMDZcdWJkMDhcdWJkMGEiLDUsIlx1YmQxMVx1YmQxMlx1YmQxM1x1YmQxNSIsOF0sWyI5NDYxIiwiXHViZDFlIiw1LCJcdWJkMjUiLDYsIlx1YmQyZCIsMTJdLFsiOTQ4MSIsIlx1YmQz''@;'; put 'put ''YSIsNSwiXHViZDQxIiw2LCJcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTEiLDYsIlx1YmQ1YSIsOSwiXHViZDY1XHViZDY2XHViZDY3XHViZDY5IiwyMiwiXHViZDgyXHViZDgzXHViZDg1XHViZDg2XHViZDhiIiw0LCJcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThc''@;'; put 'put ''dWJkOWJcdWJkOWQiLDYsIlx1YmRhNSIsMTAsIlx1YmRiMSIsNiwiXHViZGI5IiwyNF0sWyI5NTQxIiwiXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkIiwxMSwiXHViZGVhIiw1LCJcdWJkZjEiXSxbIjk1NjEiLCJcdWJkZjJcdWJkZjNcdWJkZjVcdWJk''@;'; put 'put ''ZjZcdWJkZjdcdWJkZjkiLDYsIlx1YmUwMVx1YmUwMlx1YmUwNFx1YmUwNiIsNSwiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzIl0sWyI5NTgxIiwiXHViZTE1Iiw2LCJcdWJlMWVcdWJlMjAiLDM1LCJcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGYiLDQs''@;'; put 'put ''Ilx1YmU1Nlx1YmU1OFx1YmU1Y1x1YmU1ZFx1YmU1ZVx1YmU1Zlx1YmU2Mlx1YmU2M1x1YmU2NVx1YmU2Nlx1YmU2N1x1YmU2OVx1YmU2YiIsNCwiXHViZTcyXHViZTc2Iiw0LCJcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODUiLDYsIlx1YmU4ZVx1YmU5MiIsNSwiXHViZTlh''@;'; put 'put ''IiwxMywiXHViZWE5IiwxNF0sWyI5NjQxIiwiXHViZWI4IiwyMywiXHViZWQyXHViZWQzIl0sWyI5NjYxIiwiXHViZWQ1XHViZWQ2XHViZWQ5Iiw2LCJcdWJlZTFcdWJlZTJcdWJlZTYiLDUsIlx1YmVlZCIsOF0sWyI5NjgxIiwiXHViZWY2IiwxMCwiXHViZjAyIiw1LCJcdWJmMGEiLDEzLCJc''@;'; put 'put ''dWJmMWFcdWJmMWUiLDMzLCJcdWJmNDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDkiLDYsIlx1YmY1Mlx1YmY1M1x1YmY1NFx1YmY1NiIsNDRdLFsiOTc0MSIsIlx1YmY4MyIsMTYsIlx1YmY5NSIsOF0sWyI5NzYxIiwiXHViZjllIiwxNywiXHViZmIxIiw3XSxbIjk3ODEiLCJcdWJm''@;'; put 'put ''YjkiLDExLCJcdWJmYzYiLDUsIlx1YmZjZVx1YmZjZlx1YmZkMVx1YmZkMlx1YmZkM1x1YmZkNSIsNiwiXHViZmRkXHViZmRlXHViZmUwXHViZmUyIiw4OSwiXHVjMDNkXHVjMDNlXHVjMDNmIl0sWyI5ODQxIiwiXHVjMDQwIiwxNiwiXHVjMDUyIiw1LCJcdWMwNTlcdWMwNWFcdWMwNWIiXSxb''@;'; put 'put ''Ijk4NjEiLCJcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjEiLDYsIlx1YzA2YSIsMTVdLFsiOTg4MSIsIlx1YzA3YSIsMjEsIlx1YzA5Mlx1YzA5M1x1YzA5NVx1YzA5Nlx1YzA5N1x1YzA5OSIsNiwiXHVjMGEyXHVjMGE0XHVjMGE2Iiw1LCJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjciLDQsIlx1''@;'; put 'put ''YzBiZVx1YzBjMlx1YzBjM1x1YzBjNFx1YzBjNlx1YzBjN1x1YzBjYVx1YzBjYlx1YzBjZFx1YzBjZVx1YzBjZlx1YzBkMSIsNiwiXHVjMGRhXHVjMGRlIiw1LCJcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWQiLDYsIlx1YzBmNlx1YzBmOFx1YzBmYSIsNSwiXHVjMTAxXHVj''@;'; put 'put ''MTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5Iiw2LCJcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTYiLDUsIlx1YzEyMVx1YzEyMlx1YzEyNVx1YzEyOFx1YzEyOVx1YzEyYVx1YzEyYlx1YzEyZSJdLFsiOTk0MSIsIlx1YzEzMlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1''@;'; put 'put ''YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MSIsNiwiXHVjMTRhXHVjMTRlIiw1LCJcdWMxNTZcdWMxNTciXSxbIjk5NjEiLCJcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWQiLDYsIlx1YzE2Nlx1YzE2YSIsNSwiXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVj''@;'; put 'put ''MTc5XHVjMTdhXHVjMTdiIl0sWyI5OTgxIiwiXHVjMTdjIiw4LCJcdWMxODYiLDUsIlx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1YzE5NVx1YzE5NyIsNCwiXHVjMTllXHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVj''@;'; put 'put ''MWIxIiwxMSwiXHVjMWJlIiw1LCJcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMxY2JcdWMxY2QiLDYsIlx1YzFkNVx1YzFkNlx1YzFkOSIsNiwiXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1XHVjMWU2XHVjMWU3XHVjMWU5Iiw2LCJcdWMxZjJcdWMxZjQiLDcsIlx1YzFmZVx1YzFm''@;'; put 'put ''Zlx1YzIwMVx1YzIwMlx1YzIwM1x1YzIwNSIsNiwiXHVjMjBlXHVjMjEwXHVjMjEyIiw1LCJcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjMiXSxbIjlhNDEiLCJcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMy''@;'; put 'put ''MzUiLDE2XSxbIjlhNjEiLCJcdWMyNDZcdWMyNDdcdWMyNDkiLDYsIlx1YzI1Mlx1YzI1M1x1YzI1NVx1YzI1Nlx1YzI1N1x1YzI1OSIsNiwiXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2Il0sWyI5YTgxIiwiXHVjMjY3Iiw0LCJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNc''@;'; put 'put ''dWMyNzUiLDYsIlx1YzI3ZVx1YzI4MFx1YzI4MiIsNSwiXHVjMjhhIiw1LCJcdWMyOTEiLDYsIlx1YzI5OVx1YzI5YVx1YzI5Y1x1YzI5ZSIsNSwiXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVjMmFiXHVjMmFlIiw1LCJcdWMyYjZcdWMyYjhcdWMyYmEiLDMzLCJcdWMyZGVcdWMyZGZcdWMy''@;'; put 'put ''ZTFcdWMyZTJcdWMyZTUiLDUsIlx1YzJlZVx1YzJmMFx1YzJmMlx1YzJmM1x1YzJmNFx1YzJmNVx1YzJmN1x1YzJmYVx1YzJmZFx1YzJmZVx1YzJmZlx1YzMwMSIsNiwiXHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmIl0sWyI5YjQxIiwiXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVj''@;'; put 'put ''MzE5XHVjMzFhXHVjMzFiXHVjMzFkIiw2LCJcdWMzMjZcdWMzMjdcdWMzMmEiLDhdLFsiOWI2MSIsIlx1YzMzMyIsMTcsIlx1YzM0NiIsN10sWyI5YjgxIiwiXHVjMzRlIiwyNSwiXHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczIiw0LCJcdWMzN2FcdWMzN2JcdWMz''@;'; put 'put ''N2UiLDUsIlx1YzM4NVx1YzM4Nlx1YzM4N1x1YzM4OVx1YzM4YVx1YzM4Ylx1YzM4ZCIsNTAsIlx1YzNjMSIsMjIsIlx1YzNkYSJdLFsiOWM0MSIsIlx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlMyIsNCwiXHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlIiw1LCJcdWMzZjZcdWMzZjdcdWMz''@;'; put 'put ''ZjkiLDVdLFsiOWM2MSIsIlx1YzNmZiIsOCwiXHVjNDA5Iiw2LCJcdWM0MTEiLDldLFsiOWM4MSIsIlx1YzQxYiIsOCwiXHVjNDI1Iiw2LCJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzUiLDYsIlx1YzQzZSIsOSwiXHVjNDQ5IiwyNiwiXHVjNDY2XHVjNDY3XHVj''@;'; put 'put ''NDY5XHVjNDZhXHVjNDZiXHVjNDZkIiw2LCJcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2EiLDUsIlx1YzQ4MSIsMTgsIlx1YzQ5NSIsNiwiXHVjNDlkIiwxMl0sWyI5ZDQxIiwiXHVjNGFhIiwxMywiXHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkIiw4XSxbIjlkNjEiLCJcdWM0YzYiLDI1XSxbIjlk''@;'; put 'put ''ODEiLCJcdWM0ZTAiLDgsIlx1YzRlYSIsNSwiXHVjNGYyXHVjNGYzXHVjNGY1XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyIiw5LCJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTUiLDYsIlx1YzUxZCIsMTAsIlx1YzUyYVx1''@;'; put 'put ''YzUyYlx1YzUyZFx1YzUyZVx1YzUyZlx1YzUzMSIsNiwiXHVjNTNhXHVjNTNjXHVjNTNlIiw1LCJcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1Njki''@;'; put 'put ''LDYsIlx1YzU3Mlx1YzU3NiIsNSwiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0Il0sWyI5ZTQxIiwiXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTll''@;'; put 'put ''XHVjNTlmXHVjNWExIiw3LCJcdWM1YWEiLDksIlx1YzViNiJdLFsiOWU2MSIsIlx1YzViN1x1YzViYVx1YzViZiIsNCwiXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5Iiw2LCJcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTciXSxbIjllODEiLCJc''@;'; put 'put ''dWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTEiLDYsIlx1YzYxYVx1YzYxZCIsNiwiXHVjNjI2''@;'; put 'put ''XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5Iiw2LCJcdWM2NTJcdWM2NTYiLDUsIlx1YzY1ZVx1YzY1Zlx1YzY2MSIsMTAs''@;'; put 'put ''Ilx1YzY2ZFx1YzY2ZVx1YzY3MFx1YzY3MiIsNSwiXHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxIiw2LCJcdWM2OGFcdWM2OGNcdWM2OGUiLDUsIlx1YzY5Nlx1YzY5N1x1YzY5OVx1YzY5YVx1YzY5Ylx1YzY5ZCIsNiwiXHVjNmE2Il0sWyI5ZjQxIiwiXHVjNmE4XHVjNmFh''@;'; put 'put ''Iiw1LCJcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmIiLDQsIlx1YzZjMlx1YzZjNFx1YzZjNiIsNSwiXHVjNmNlIl0sWyI5ZjYxIiwiXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1Iiw2LCJcdWM2ZGVcdWM2ZGZcdWM2ZTIiLDUsIlx1YzZlYVx1YzZlYlx1YzZlZFx1''@;'; put 'put ''YzZlZVx1YzZlZlx1YzZmMVx1YzZmMiJdLFsiOWY4MSIsIlx1YzZmMyIsNCwiXHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlIiw1LCJcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGQiLDYsIlx1YzcxNlx1YzcxOFx1YzcxYSIsNSwiXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVj''@;'; put 'put ''NzI3XHVjNzI5Iiw2LCJcdWM3MzJcdWM3MzRcdWM3MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDUiLDQsIlx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MSIsNiwiXHVj''@;'; put 'put ''NzY5XHVjNzZhXHVjNzZjIiw3LCJcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWIiLDQsIlx1YzdhMlx1YzdhNyIsNCwiXHVjN2FlXHVj''@;'; put 'put ''N2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1XHVjN2I2XHVjN2I3Il0sWyJhMDQxIiwiXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyIiw1LCJcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDEiLDYsIlx1YzdkOVx1YzdkYVx1YzdkYlx1YzdkYyJdLFsiYTA2MSIsIlx1''@;'; put 'put ''YzdkZSIsNSwiXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkIiwxM10sWyJhMDgxIiwiXHVjN2ZiIiw0LCJcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGIiLDQsIlx1YzgxMlx1YzgxNFx1YzgxNyIsNCwiXHVjODFlXHVjODFmXHVjODIx''@;'; put 'put ''XHVjODIyXHVjODIzXHVjODI1Iiw2LCJcdWM4MmVcdWM4MzBcdWM4MzIiLDUsIlx1YzgzOVx1YzgzYVx1YzgzYlx1YzgzZFx1YzgzZVx1YzgzZlx1Yzg0MSIsNiwiXHVjODRhXHVjODRiXHVjODRlIiw1LCJcdWM4NTUiLDI2LCJcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4Nzlc''@;'; put 'put ''dWM4N2IiLDQsIlx1Yzg4Mlx1Yzg4NFx1Yzg4OFx1Yzg4OVx1Yzg4YVx1Yzg4ZSIsNSwiXHVjODk1Iiw3LCJcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTQiXSxbImExNDEiLCJcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTkiLDE4LCJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzEiXSxbImEx''@;'; put 'put ''NjEiLCJcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2QiLDYsIlx1YzhkNlx1YzhkOFx1YzhkYSIsNSwiXHVjOGUyXHVjOGUzXHVjOGU1Il0sWyJhMTgxIiwiXHVjOGU2IiwxNCwiXHVjOGY2Iiw1LCJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJc''@;'; put 'put ''dWM5MDNcdWM5MDciLDQsIlx1YzkwZVx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTIwMjVcdTIwMjZceGE4XHUzMDAzXHhhZFx1MjAxNVx1MjIyNVx1ZmYzY1x1MjIzY1x1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOCIsOSwiXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0''@;'; put 'put ''XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1Yzdc''@;'; put 'put ''dTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIy''@;'; put 'put ''MmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTIiXSxbImEyNDEiLCJcdWM5MTBcdWM5MTIiLDUsIlx1YzkxOSIsMThdLFsiYTI2MSIsIlx1YzkyZCIsNiwiXHVjOTM1IiwxOF0sWyJhMjgxIiwiXHVjOTQ4Iiw3LCJcdWM5NTJcdWM5NTNcdWM5NTVcdWM5NTZcdWM5NTdcdWM5NTkiLDYsIlx1Yzk2''@;'; put 'put ''Mlx1Yzk2NCIsNywiXHVjOTZkXHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBc''@;'; put 'put ''dTI1YjdcdTI1YjZcdTI2NjRcdTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIx''@;'; put 'put ''XHUyMTk1XHUyMTk3XHUyMTk5XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZSJdLFsiYTM0MSIsIlx1Yzk3MVx1Yzk3Mlx1Yzk3M1x1Yzk3NSIsNiwiXHVjOTdkIiwxMCwi''@;'; put 'put ''XHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmIl0sWyJhMzYxIiwiXHVjOTkxIiw2LCJcdWM5OWFcdWM5OWNcdWM5OWUiLDE2XSxbImEzODEiLCJcdWM5YWYiLDE2LCJcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2IiLDQsIlx1YzlkMlx1YzlkNFx1YzlkN1x1YzlkOFx1''@;'; put 'put ''YzlkYlx1ZmYwMSIsNTgsIlx1ZmZlNlx1ZmYzZCIsMzIsIlx1ZmZlMyJdLFsiYTQ0MSIsIlx1YzlkZVx1YzlkZlx1YzllMVx1YzllM1x1YzllNVx1YzllNlx1YzllOFx1YzllOVx1YzllYVx1YzllYlx1YzllZVx1YzlmMiIsNSwiXHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAx''@;'; put 'put ''XHVjYTAyXHVjYTAzXHVjYTA0Il0sWyJhNDYxIiwiXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlIiw1LCJcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTkiLDEyXSxbImE0ODEiLCJcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmEiLDI4LCJcdTMxMzEiLDkzXSxbImE1NDEiLCJcdWNhNDciLDQs''@;'; put 'put ''Ilx1Y2E0ZVx1Y2E0Zlx1Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NSIsNiwiXHVjYTVlXHVjYTYyIiw1LCJcdWNhNjlcdWNhNmEiXSxbImE1NjEiLCJcdWNhNmIiLDE3LCJcdWNhN2UiLDUsIlx1Y2E4NVx1Y2E4NiJdLFsiYTU4MSIsIlx1Y2E4NyIsMTYsIlx1Y2E5OSIsMTQsIlx1MjE3MCIsOV0s''@;'; put 'put ''WyJhNWIwIiwiXHUyMTYwIiw5XSxbImE1YzEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTVlMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNjQxIiwiXHVjYWE4IiwxOSwiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1Il0sWyJhNjYxIiwiXHVjYWM2Iiw1LCJc''@;'; put 'put ''dWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGEiLDUsIlx1Y2FlMSIsNl0sWyJhNjgxIiwiXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVkIiw2LCJcdWNhZjUiLDE4LCJcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1''@;'; put 'put ''MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJc''@;'; put 'put ''dTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1''@;'; put 'put ''NDMiLDddLFsiYTc0MSIsIlx1Y2IwYiIsNCwiXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5Iiw2LCJcdWNiMjIiLDddLFsiYTc2MSIsIlx1Y2IyYSIsMjIsIlx1Y2I0Mlx1Y2I0M1x1Y2I0NCJdLFsiYTc4MSIsIlx1Y2I0NVx1Y2I0Nlx1Y2I0N1x1Y2I0YVx1Y2I0''@;'; put 'put ''Ylx1Y2I0ZFx1Y2I0ZVx1Y2I0Zlx1Y2I1MSIsNiwiXHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlIiw1LCJcdWNiNjUiLDcsIlx1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNjNFx1MzNhM1x1MzNhNFx1MzNhNVx1MzNhNlx1MzM5OSIsOSwiXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhm''@;'; put 'put ''XHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwIiw5LCJcdTMzODAiLDQsIlx1MzNiYSIsNSwiXHUzMzkwIiw0LCJcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMzOGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFc''@;'; put 'put ''dTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzYiXSxbImE4NDEiLCJcdWNiNmQiLDEwLCJcdWNiN2EiLDE0XSxbImE4NjEiLCJcdWNiODkiLDE4LCJcdWNiOWQiLDZdLFsiYTg4MSIsIlx1Y2JhNCIsMTksIlx1Y2JiOSIsMTEsIlx4YzZceGQwXHhh''@;'; put 'put ''YVx1MDEyNiJdLFsiYThhNiIsIlx1MDEzMiJdLFsiYThhOCIsIlx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YSJdLFsiYThiMSIsIlx1MzI2MCIsMjcsIlx1MjRkMCIsMjUsIlx1MjQ2MCIsMTQsIlx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1''@;'; put 'put ''MjE1ZFx1MjE1ZSJdLFsiYTk0MSIsIlx1Y2JjNSIsMTQsIlx1Y2JkNSIsMTBdLFsiYTk2MSIsIlx1Y2JlMFx1Y2JlMVx1Y2JlMlx1Y2JlM1x1Y2JlNVx1Y2JlNlx1Y2JlOFx1Y2JlYSIsMThdLFsiYTk4MSIsIlx1Y2JmZCIsMTQsIlx1Y2MwZVx1Y2MwZlx1Y2MxMVx1Y2MxMlx1Y2MxM1x1Y2Mx''@;'; put 'put ''NSIsNiwiXHVjYzFlXHVjYzFmXHVjYzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDAiLDI3LCJcdTI0OWMiLDI1LCJcdTI0NzQiLDE0LCJceGI5XHhi''@;'; put 'put ''Mlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODQiXSxbImFhNDEiLCJcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzEiLDYsIlx1Y2MzYVx1Y2MzZiIsNCwiXHVjYzQ2XHVjYzQ3XHVjYzQ5XHVjYzRhXHVjYzRiXHVjYzRkXHVjYzRlIl0sWyJh''@;'; put 'put ''YTYxIiwiXHVjYzRmIiw0LCJcdWNjNTZcdWNjNWEiLDUsIlx1Y2M2MVx1Y2M2Mlx1Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OSIsNiwiXHVjYzcxXHVjYzcyIl0sWyJhYTgxIiwiXHVjYzczXHVjYzc0XHVjYzc2IiwyOSwiXHUzMDQxIiw4Ml0sWyJhYjQxIiwiXHVjYzk0XHVjYzk1XHVjYzk2XHVj''@;'; put 'put ''Yzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExIiw2LCJcdWNjYWFcdWNjYWUiLDUsIlx1Y2NiNlx1Y2NiN1x1Y2NiOSJdLFsiYWI2MSIsIlx1Y2NiYVx1Y2NiYlx1Y2NiZCIsNiwiXHVjY2M2XHVjY2M4XHVjY2NhIiw1LCJcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDUiLDVd''@;'; put 'put ''LFsiYWI4MSIsIlx1Y2NkYiIsOCwiXHVjY2U1Iiw2LCJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjEiLDEyLCJcdTMwYTEiLDg1XSxbImFjNDEiLCJcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDIiLDUsIlx1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMSIsNiwiXHVjZDFhXHVjZDFj''@;'; put 'put ''XHVjZDFlXHVjZDFmXHVjZDIwIl0sWyJhYzYxIiwiXHVjZDIxXHVjZDIyXHVjZDIzXHVjZDI1XHVjZDI2XHVjZDI3XHVjZDI5XHVjZDJhXHVjZDJiXHVjZDJkIiwxMSwiXHVjZDNhIiw0XSxbImFjODEiLCJcdWNkM2YiLDI4LCJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTAiLDUsIlx1MDQwMVx1''@;'; put 'put ''MDQxNiIsMjVdLFsiYWNkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhZDQxIiwiXHVjZDYxXHVjZDYyXHVjZDYzXHVjZDY1Iiw2LCJcdWNkNmVcdWNkNzBcdWNkNzIiLDUsIlx1Y2Q3OSIsN10sWyJhZDYxIiwiXHVjZDgxIiw2LCJcdWNkODkiLDEwLCJcdWNkOTZcdWNkOTdc''@;'; put 'put ''dWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWYiXSxbImFkODEiLCJcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWEiLDUsIlx1Y2RiMSIsMTgsIlx1Y2RjNSJdLFsiYWU0MSIsIlx1Y2RjNiIsNSwiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxIiwxNl0s''@;'; put 'put ''WyJhZTYxIiwiXHVjZGUyIiw1LCJcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjEiLDYsIlx1Y2RmYVx1Y2RmY1x1Y2RmZSIsNF0sWyJhZTgxIiwiXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkIiw2LCJcdWNlMTVcdWNlMTZc''@;'; put 'put ''dWNlMTdcdWNlMThcdWNlMWEiLDUsIlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1Y2UyOVx1Y2UyYVx1Y2UyYiJdLFsiYWY0MSIsIlx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNiIsMTldLFsiYWY2MSIsIlx1Y2U0YSIsMTMsIlx1Y2U1YVx1Y2U1Ylx1''@;'; put 'put ''Y2U1ZFx1Y2U1ZVx1Y2U2MiIsNSwiXHVjZTZhXHVjZTZjIl0sWyJhZjgxIiwiXHVjZTZlIiw1LCJcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2QiLDYsIlx1Y2U4Nlx1Y2U4OFx1Y2U4YSIsNSwiXHVjZTkyXHVjZTkzXHVjZTk1XHVjZTk2XHVjZTk3XHVjZTk5Il0sWyJiMDQx''@;'; put 'put ''IiwiXHVjZTlhIiw1LCJcdWNlYTJcdWNlYTYiLDUsIlx1Y2VhZSIsMTJdLFsiYjA2MSIsIlx1Y2ViYiIsNSwiXHVjZWMyIiwxOV0sWyJiMDgxIiwiXHVjZWQ2IiwxMywiXHVjZWU2XHVjZWU3XHVjZWU5XHVjZWVhXHVjZWVkIiw2LCJcdWNlZjZcdWNlZmEiLDUsIlx1YWMwMFx1YWMwMVx1YWMw''@;'; put 'put ''NFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMCIsNywiXHVhYzE5Iiw0LCJcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFj''@;'; put 'put ''NzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlc''@;'; put 'put ''dWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDYiXSxb''@;'; put 'put ''ImIxNDEiLCJcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDkiLDYsIlx1Y2YxMlx1Y2YxNFx1Y2YxNiIsNSwiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzIl0sWyJiMTYxIiwiXHVjZjI1Iiw2LCJcdWNmMmVcdWNmMzIiLDUsIlx1Y2YzOSIsMTFdLFsiYjE4''@;'; put 'put ''MSIsIlx1Y2Y0NSIsMTQsIlx1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZCIsNiwiXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBjXHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4''@;'; put 'put ''XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVhZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVh''@;'; put 'put ''ZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0''@;'; put 'put ''XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVhZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4Il0sWyJiMjQx''@;'; put 'put ''IiwiXHVjZjZkXHVjZjZlXHVjZjZmXHVjZjcyXHVjZjczXHVjZjc1XHVjZjc2XHVjZjc3XHVjZjc5Iiw2LCJcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODYiLDUsIlx1Y2Y4ZCJdLFsiYjI2MSIsIlx1Y2Y4ZSIsMTgsIlx1Y2ZhMiIsNSwiXHVjZmE5Il0sWyJiMjgxIiwiXHVjZmFhIiw1''@;'; put 'put ''LCJcdWNmYjEiLDE4LCJcdWNmYzUiLDYsIlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1''@;'; put 'put ''YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4''@;'; put 'put ''NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1''@;'; put 'put ''YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OSJdLFsiYjM0MSIsIlx1Y2ZjYyIsMTksIlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOSJdLFsiYjM2MSIs''@;'; put 'put ''Ilx1Y2ZlYSIsNSwiXHVjZmYyXHVjZmY0XHVjZmY2Iiw1LCJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDUiLDVdLFsiYjM4MSIsIlx1ZDAwYiIsNSwiXHVkMDEyIiw1LCJcdWQwMTkiLDE5LCJcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIw''@;'; put 'put ''OGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWIiLDQsIlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1''@;'; put 'put ''YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0''@;'; put 'put ''MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1''@;'; put 'put ''YjFkY1x1YjFkZCJdLFsiYjQ0MSIsIlx1ZDAyZSIsNSwiXHVkMDM2XHVkMDM3XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkIiw2LCJcdWQwNDZcdWQwNDhcdWQwNGEiLDVdLFsiYjQ2MSIsIlx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OSIsNiwiXHVkMDYxIiwxMCwi''@;'; put 'put ''XHVkMDZlXHVkMDZmIl0sWyJiNDgxIiwiXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1Iiw2LCJcdWQwN2VcdWQwN2ZcdWQwODBcdWQwODIiLDE4LCJcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIxZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIy''@;'; put 'put ''MTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFcdWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVc''@;'; put 'put ''dWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIyZWIiLDQsIlx1YjJmM1x1YjJmNFx1YjJmNVx1YjJmNyIsNCwiXHViMmZmXHViMzAw''@;'; put 'put ''XHViMzAxXHViMzA0XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1Il0sWyJiNTQxIiwiXHVkMDk1IiwxNCwiXHVkMGE2XHVkMGE3XHVkMGE5XHVkMGFhXHVk''@;'; put 'put ''MGFiXHVkMGFkIiw1XSxbImI1NjEiLCJcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmEiLDUsIlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYSIsNSwiXHVkMGQyXHVkMGQ2Iiw0XSxbImI1ODEiLCJcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTUiLDYs''@;'; put 'put ''Ilx1ZDBlZVx1ZDBmMiIsNSwiXHVkMGY5IiwxMSwiXHViMzY3XHViMzY5XHViMzZiXHViMzZlXHViMzcwXHViMzcxXHViMzc0XHViMzc4XHViMzgwXHViMzgxXHViMzgzXHViMzg0XHViMzg1XHViMzhjXHViMzkwXHViMzk0XHViM2EwXHViM2ExXHViM2E4XHViM2FjXHViM2M0XHViM2M1XHVi''@;'; put 'put ''M2M4XHViM2NiXHViM2NjXHViM2NlXHViM2QwXHViM2Q0XHViM2Q1XHViM2Q3XHViM2Q5XHViM2RiXHViM2RkXHViM2UwXHViM2U0XHViM2U4XHViM2ZjXHViNDEwXHViNDE4XHViNDFjXHViNDIwXHViNDI4XHViNDI5XHViNDJiXHViNDM0XHViNDUwXHViNDUxXHViNDU0XHViNDU4XHViNDYw''@;'; put 'put ''XHViNDYxXHViNDYzXHViNDY1XHViNDZjXHViNDgwXHViNDg4XHViNDlkXHViNGE0XHViNGE4XHViNGFjXHViNGI1XHViNGI3XHViNGI5XHViNGMwXHViNGM0XHViNGM4XHViNGQwXHViNGQ1XHViNGRjXHViNGRkXHViNGUwXHViNGUzXHViNGU0XHViNGU2XHViNGVjXHViNGVkXHViNGVmXHVi''@;'; put 'put ''NGYxXHViNGY4XHViNTE0XHViNTE1XHViNTE4XHViNTFiXHViNTFjXHViNTI0XHViNTI1XHViNTI3XHViNTI4XHViNTI5XHViNTJhXHViNTMwXHViNTMxXHViNTM0XHViNTM4Il0sWyJiNjQxIiwiXHVkMTA1Iiw3LCJcdWQxMGUiLDE3XSxbImI2NjEiLCJcdWQxMjAiLDE1LCJcdWQxMzJcdWQx''@;'; put 'put ''MzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2UiXSxbImI2ODEiLCJcdWQxM2ZcdWQxNDJcdWQxNDYiLDUsIlx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1ZDE1NSIsNiwiXHVkMTVlXHVkMTYwXHVkMTYyIiw1LCJcdWQxNjlcdWQxNmFcdWQx''@;'; put 'put ''NmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVc''@;'; put 'put ''dWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2''@;'; put 'put ''YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNc''@;'; put 'put ''dWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTciXSxbImI3NDEiLCJcdWQxNmUiLDEzLCJcdWQxN2QiLDYsIlx1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YSJdLFsiYjc2MSIsIlx1ZDE4YiIsMjAs''@;'; put 'put ''Ilx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhNyJdLFsiYjc4MSIsIlx1ZDFhOSIsNiwiXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxIiwxNCwiXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHVi''@;'; put 'put ''N2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHViN2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1''@;'; put 'put ''XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHVi''@;'; put 'put ''OGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHViOGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4''@;'; put 'put ''XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5Il0sWyJiODQxIiwiXHVkMWQwIiw3LCJcdWQxZDkiLDE3XSxbImI4NjEiLCJcdWQxZWIiLDgsIlx1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOSIsMTNdLFsiYjg4MSIsIlx1ZDIwOFx1ZDIwYSIsNSwiXHVkMjExIiwyNCwiXHViOTZiXHViOTZk''@;'; put 'put ''XHViOTc0XHViOTc1XHViOTc4XHViOTdjXHViOTg0XHViOTg1XHViOTg3XHViOTg5XHViOThhXHViOThkXHViOThlXHViOWFjXHViOWFkXHViOWIwXHViOWI0XHViOWJjXHViOWJkXHViOWJmXHViOWMxXHViOWM4XHViOWM5XHViOWNjXHViOWNlIiw0LCJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5''@;'; put 'put ''ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJhM2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVc''@;'; put 'put ''dWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThcdWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJh''@;'; put 'put ''YmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmMiXSxbImI5NDEiLCJcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzUiLDYsIlx1ZDIzZVx1ZDI0MFx1ZDI0MiIsNSwiXHVkMjQ5XHVkMjRhXHVkMjRiXHVkMjRjIl0sWyJiOTYxIiwiXHVk''@;'; put 'put ''MjRkIiwxNCwiXHVkMjVkIiw2LCJcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjgiXSxbImI5ODEiLCJcdWQyNjkiLDIyLCJcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNc''@;'; put 'put ''dWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJi''@;'; put 'put ''YThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTQiLDQsIlx1YmMxYiIsNCwiXHViYzI0XHViYzI1XHVi''@;'; put 'put ''YzI3XHViYzI5XHViYzJkXHViYzMwXHViYzMxXHViYzM0XHViYzM4XHViYzQwXHViYzQxXHViYzQzXHViYzQ0XHViYzQ1XHViYzQ5XHViYzRjXHViYzRkXHViYzUwXHViYzVkXHViYzg0XHViYzg1XHViYzg4XHViYzhiXHViYzhjXHViYzhlXHViYzk0XHViYzk1XHViYzk3Il0sWyJiYTQxIiwi''@;'; put 'put ''XHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2Iiw1LCJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTUiLDYsIlx1ZDJhZCJdLFsiYmE2MSIsIlx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMiIsNSwiXHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJl''@;'; put 'put ''XHVkMmMxXHVkMmMzIiw0LCJcdWQyY2FcdWQyY2MiLDVdLFsiYmE4MSIsIlx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZCIsNiwiXHVkMmU2Iiw5LCJcdWQyZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJj''@;'; put 'put ''OWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVcdWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRc''@;'; put 'put ''dWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJkODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJk''@;'; put 'put ''OTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBcdWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNc''@;'; put 'put ''dWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjQiXSxbImJiNDEiLCJcdWQyZmIiLDQsIlx1ZDMwMlx1ZDMwNFx1ZDMwNiIsNSwiXHVkMzBmXHVkMzExXHVkMzEyXHVkMzEzXHVkMzE1XHVkMzE3Iiw0LCJcdWQzMWVcdWQzMjJcdWQzMjMi''@;'; put 'put ''XSxbImJiNjEiLCJcdWQzMjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzEiLDYsIlx1ZDMzYVx1ZDMzZSIsNSwiXHVkMzQ2XHVkMzQ3XHVkMzQ4XHVkMzQ5Il0sWyJiYjgxIiwiXHVkMzRhIiwzMSwiXHViZTY4XHViZTZhXHViZTcwXHViZTcxXHViZTcz''@;'; put 'put ''XHViZTc0XHViZTc1XHViZTdiXHViZTdjXHViZTdkXHViZTgwXHViZTg0XHViZThjXHViZThkXHViZThmXHViZTkwXHViZTkxXHViZTk4XHViZTk5XHViZWE4XHViZWQwXHViZWQxXHViZWQ0XHViZWQ3XHViZWQ4XHViZWUwXHViZWUzXHViZWU0XHViZWU1XHViZWVjXHViZjAxXHViZjA4XHVi''@;'; put 'put ''ZjA5XHViZjE4XHViZjE5XHViZjFiXHViZjFjXHViZjFkXHViZjQwXHViZjQxXHViZjQ0XHViZjQ4XHViZjUwXHViZjUxXHViZjU1XHViZjk0XHViZmIwXHViZmM1XHViZmNjXHViZmNkXHViZmQwXHViZmQ0XHViZmRjXHViZmRmXHViZmUxXHVjMDNjXHVjMDUxXHVjMDU4XHVjMDVjXHVjMDYw''@;'; put 'put ''XHVjMDY4XHVjMDY5XHVjMDkwXHVjMDkxXHVjMDk0XHVjMDk4XHVjMGEwXHVjMGExXHVjMGEzXHVjMGE1XHVjMGFjXHVjMGFkXHVjMGFmXHVjMGIwXHVjMGIzXHVjMGI0XHVjMGI1XHVjMGI2XHVjMGJjXHVjMGJkXHVjMGJmXHVjMGMwXHVjMGMxXHVjMGM1XHVjMGM4XHVjMGM5XHVjMGNjXHVj''@;'; put 'put ''MGQwXHVjMGQ4XHVjMGQ5XHVjMGRiXHVjMGRjXHVjMGRkXHVjMGU0Il0sWyJiYzQxIiwiXHVkMzZhIiwxNywiXHVkMzdlXHVkMzdmXHVkMzgxXHVkMzgyXHVkMzgzXHVkMzg1XHVkMzg2XHVkMzg3Il0sWyJiYzYxIiwiXHVkMzg4XHVkMzg5XHVkMzhhXHVkMzhiXHVkMzhlXHVkMzkyIiw1LCJc''@;'; put 'put ''dWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTEiLDYsIlx1ZDNhYVx1ZDNhY1x1ZDNhZSJdLFsiYmM4MSIsIlx1ZDNhZiIsNCwiXHVkM2I1XHVkM2I2XHVkM2I3XHVkM2I5XHVkM2JhXHVkM2JiXHVkM2JkIiw2LCJcdWQzYzZcdWQzYzdcdWQzY2EiLDUsIlx1ZDNkMSIsNSwiXHVj''@;'; put 'put ''MGU1XHVjMGU4XHVjMGVjXHVjMGY0XHVjMGY1XHVjMGY3XHVjMGY5XHVjMTAwXHVjMTA0XHVjMTA4XHVjMTEwXHVjMTE1XHVjMTFjIiw0LCJcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBc''@;'; put 'put ''dWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMx''@;'; put 'put ''YTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThc''@;'; put 'put ''dWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmQiXSxbImJkNDEiLCJcdWQzZDdcdWQzZDkiLDcsIlx1ZDNlMlx1ZDNlNCIsNywiXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3Il0sWyJiZDYxIiwiXHVkM2Y4XHVkM2Y5''@;'; put 'put ''XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyIiw1LCJcdWQ0MDkiLDEzXSxbImJkODEiLCJcdWQ0MTciLDUsIlx1ZDQxZSIsMjUsIlx1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1''@;'; put 'put ''YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJl''@;'; put 'put ''ZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMwMFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1''@;'; put 'put ''YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMCJdLFsiYmU0MSIsIlx1ZDQz''@;'; put 'put ''OCIsNywiXHVkNDQxXHVkNDQyXHVkNDQzXHVkNDQ1IiwxNF0sWyJiZTYxIiwiXHVkNDU0Iiw3LCJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjUiLDcsIlx1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3MiJdLFsiYmU4MSIsIlx1ZDQ3MyIsNCwiXHVkNDdhXHVkNDdiXHVk''@;'; put 'put ''NDdkXHVkNDdlXHVkNDgxXHVkNDgzIiw0LCJcdWQ0OGFcdWQ0OGNcdWQ0OGUiLDUsIlx1ZDQ5NSIsOCwiXHVjNDM0XHVjNDNjXHVjNDNkXHVjNDQ4XHVjNDY0XHVjNDY1XHVjNDY4XHVjNDZjXHVjNDc0XHVjNDc1XHVjNDc5XHVjNDgwXHVjNDk0XHVjNDljXHVjNGI4XHVjNGJjXHVjNGU5XHVj''@;'; put 'put ''NGYwXHVjNGYxXHVjNGY0XHVjNGY4XHVjNGZhXHVjNGZmXHVjNTAwXHVjNTAxXHVjNTBjXHVjNTEwXHVjNTE0XHVjNTFjXHVjNTI4XHVjNTI5XHVjNTJjXHVjNTMwXHVjNTM4XHVjNTM5XHVjNTNiXHVjNTNkXHVjNTQ0XHVjNTQ1XHVjNTQ4XHVjNTQ5XHVjNTRhXHVjNTRjXHVjNTRkXHVjNTRl''@;'; put 'put ''XHVjNTUzXHVjNTU0XHVjNTU1XHVjNTU3XHVjNTU4XHVjNTU5XHVjNTVkXHVjNTVlXHVjNTYwXHVjNTYxXHVjNTY0XHVjNTY4XHVjNTcwXHVjNTcxXHVjNTczXHVjNTc0XHVjNTc1XHVjNTdjXHVjNTdkXHVjNTgwXHVjNTg0XHVjNTg3XHVjNThjXHVjNThkXHVjNThmXHVjNTkxXHVjNTk1XHVj''@;'; put 'put ''NTk3XHVjNTk4XHVjNTljXHVjNWEwXHVjNWE5XHVjNWI0XHVjNWI1XHVjNWI4XHVjNWI5XHVjNWJiXHVjNWJjXHVjNWJkXHVjNWJlXHVjNWM0Iiw2LCJcdWM1Y2NcdWM1Y2UiXSxbImJmNDEiLCJcdWQ0OWUiLDEwLCJcdWQ0YWEiLDE0XSxbImJmNjEiLCJcdWQ0YjkiLDE4LCJcdWQ0Y2RcdWQ0''@;'; put 'put ''Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDUiXSxbImJmODEiLCJcdWQ0ZDYiLDUsIlx1ZDRkZFx1ZDRkZVx1ZDRlMCIsNywiXHVkNGU5XHVkNGVhXHVkNGViXHVkNGVkXHVkNGVlXHVkNGVmXHVkNGYxIiw2LCJcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1''@;'; put 'put ''ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmMiLDUsIlx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1''@;'; put 'put ''YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4''@;'; put 'put ''MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1''@;'; put 'put ''YzZkZFx1YzZlMFx1YzZlMVx1YzZlOCJdLFsiYzA0MSIsIlx1ZDRmZSIsNSwiXHVkNTA1XHVkNTA2XHVkNTA3XHVkNTA5XHVkNTBhXHVkNTBiXHVkNTBkIiw2LCJcdWQ1MTZcdWQ1MTgiLDVdLFsiYzA2MSIsIlx1ZDUxZSIsMjVdLFsiYzA4MSIsIlx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1''@;'; put 'put ''ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NSIsNiwiXHVkNTRlXHVkNTUwXHVkNTUyIiw1LCJcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhc''@;'; put 'put ''dWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTEiLDcsIlx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2''@;'; put 'put ''Ylx1Yzc3NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1''@;'; put 'put ''YzdhY1x1YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYSJdLFsiYzE0MSIsIlx1ZDU2NFx1ZDU2''@;'; put 'put ''Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZSIsNSwiXHVkNTc2XHVkNTc3XHVkNTc5XHVkNTdhXHVkNTdiXHVkNTdkIiw2LCJcdWQ1ODZcdWQ1OGFcdWQ1OGIiXSxbImMxNjEiLCJcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTEiLDE5LCJcdWQ1YTZcdWQ1YTciXSxbImMxODEiLCJcdWQ1''@;'; put 'put ''YTgiLDMxLCJcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRcdWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2Fc''@;'; put 'put ''dWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4''@;'; put 'put ''ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZcdWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBc''@;'; put 'put ''dWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDMiXSxbImMyNDEiLCJcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDMiLDQsIlx1ZDVkYVx1ZDVkY1x1ZDVkZSIsNSwiXHVkNWU2''@;'; put 'put ''XHVkNWU3XHVkNWU5XHVkNWVhXHVkNWViXHVkNWVkXHVkNWVlIl0sWyJjMjYxIiwiXHVkNWVmIiw0LCJcdWQ1ZjZcdWQ1ZjhcdWQ1ZmEiLDUsIlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOSIsNiwiXHVkNjEyIl0sWyJjMjgxIiwiXHVkNjE2Iiw1LCJcdWQ2MWRcdWQ2MWVc''@;'; put 'put ''dWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjUiLDcsIlx1ZDYyZSIsOSwiXHVkNjNhXHVkNjNiXHVjOWQ1XHVjOWQ2XHVjOWQ5XHVjOWRhXHVjOWRjXHVjOWRkXHVjOWUwXHVjOWUyXHVjOWU0XHVjOWU3XHVjOWVjXHVjOWVkXHVjOWVmXHVjOWYwXHVjOWYxXHVjOWY4XHVjOWY5XHVjOWZj''@;'; put 'put ''XHVjYTAwXHVjYTA4XHVjYTA5XHVjYTBiXHVjYTBjXHVjYTBkXHVjYTE0XHVjYTE4XHVjYTI5XHVjYTRjXHVjYTRkXHVjYTUwXHVjYTU0XHVjYTVjXHVjYTVkXHVjYTVmXHVjYTYwXHVjYTYxXHVjYTY4XHVjYTdkXHVjYTg0XHVjYTk4XHVjYWJjXHVjYWJkXHVjYWMwXHVjYWM0XHVjYWNjXHVj''@;'; put 'put ''YWNkXHVjYWNmXHVjYWQxXHVjYWQzXHVjYWQ4XHVjYWQ5XHVjYWUwXHVjYWVjXHVjYWY0XHVjYjA4XHVjYjEwXHVjYjE0XHVjYjE4XHVjYjIwXHVjYjIxXHVjYjQxXHVjYjQ4XHVjYjQ5XHVjYjRjXHVjYjUwXHVjYjU4XHVjYjU5XHVjYjVkXHVjYjY0XHVjYjc4XHVjYjc5XHVjYjljXHVjYmI4''@;'; put 'put ''XHVjYmQ0XHVjYmU0XHVjYmU3XHVjYmU5XHVjYzBjXHVjYzBkXHVjYzEwXHVjYzE0XHVjYzFjXHVjYzFkXHVjYzIxXHVjYzIyXHVjYzI3XHVjYzI4XHVjYzI5XHVjYzJjXHVjYzJlXHVjYzMwXHVjYzM4XHVjYzM5XHVjYzNiIl0sWyJjMzQxIiwiXHVkNjNkXHVkNjNlXHVkNjNmXHVkNjQxXHVk''@;'; put 'put ''NjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkIiw0XSxbImMzNjEiLCJcdWQ2NjIiLDQsIlx1ZDY2OFx1ZDY2YSIsNSwiXHVkNjcyXHVkNjczXHVkNjc1''@;'; put 'put ''IiwxMV0sWyJjMzgxIiwiXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2Iiw1LCJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTUiLDcsIlx1ZDY5ZVx1ZDZhMFx1ZDZhMiIsNSwiXHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVj''@;'; put 'put ''YzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcwXHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5''@;'; put 'put ''XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVjZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVj''@;'; put 'put ''ZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4''@;'; put 'put ''XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1Il0sWyJjNDQxIiwiXHVkNmFiXHVkNmFkXHVkNmFlXHVkNmFmXHVkNmIxIiw3LCJcdWQ2YmFcdWQ2YmMiLDcsIlx1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYiJdLFsiYzQ2MSIsIlx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZk''@;'; put 'put ''M1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYSIsNSwiXHVkNmUxXHVkNmUyXHVkNmUzXHVkNmU1XHVkNmU2XHVkNmU3XHVkNmU5Iiw0XSxbImM0ODEiLCJcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2ZjRcdWQ2ZjYiLDUsIlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1''@;'; put 'put ''ZDcwNSIsMTEsIlx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2Vh''@;'; put 'put ''MFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1''@;'; put 'put ''Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2Zl''@;'; put 'put ''MVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzYyJdLFsiYzU0MSIsIlx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMSIs''@;'; put 'put ''NiwiXHVkNzJhXHVkNzJjXHVkNzJlIiw1LCJcdWQ3MzZcdWQ3MzdcdWQ3MzkiXSxbImM1NjEiLCJcdWQ3M2FcdWQ3M2JcdWQ3M2QiLDYsIlx1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YSIsNSwiXHVkNzUyXHVkNzUzXHVkNzU1XHVkNzVhIiw0XSxbImM1ODEiLCJcdWQ3NWZcdWQ3NjJcdWQ3NjRc''@;'; put 'put ''dWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzUiLDYsIlx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4MiIsNSwiXHVkNzhhXHVkNzhiXHVkMDQ0XHVkMDQ1XHVkMDQ3XHVkMDQ5XHVkMDUwXHVkMDU0XHVkMDU4XHVkMDYw''@;'; put 'put ''XHVkMDZjXHVkMDZkXHVkMDcwXHVkMDc0XHVkMDdjXHVkMDdkXHVkMDgxXHVkMGE0XHVkMGE1XHVkMGE4XHVkMGFjXHVkMGI0XHVkMGI1XHVkMGI3XHVkMGI5XHVkMGMwXHVkMGMxXHVkMGM0XHVkMGM4XHVkMGM5XHVkMGQwXHVkMGQxXHVkMGQzXHVkMGQ0XHVkMGQ1XHVkMGRjXHVkMGRkXHVk''@;'; put 'put ''MGUwXHVkMGU0XHVkMGVjXHVkMGVkXHVkMGVmXHVkMGYwXHVkMGYxXHVkMGY4XHVkMTBkXHVkMTMwXHVkMTMxXHVkMTM0XHVkMTM4XHVkMTNhXHVkMTQwXHVkMTQxXHVkMTQzXHVkMTQ0XHVkMTQ1XHVkMTRjXHVkMTRkXHVkMTUwXHVkMTU0XHVkMTVjXHVkMTVkXHVkMTVmXHVkMTYxXHVkMTY4''@;'; put 'put ''XHVkMTZjXHVkMTdjXHVkMTg0XHVkMTg4XHVkMWEwXHVkMWExXHVkMWE0XHVkMWE4XHVkMWIwXHVkMWIxXHVkMWIzXHVkMWI1XHVkMWJhXHVkMWJjXHVkMWMwXHVkMWQ4XHVkMWY0XHVkMWY4XHVkMjA3XHVkMjA5XHVkMjEwXHVkMjJjXHVkMjJkXHVkMjMwXHVkMjM0XHVkMjNjXHVkMjNkXHVk''@;'; put 'put ''MjNmXHVkMjQxXHVkMjQ4XHVkMjVjIl0sWyJjNjQxIiwiXHVkNzhkXHVkNzhlXHVkNzhmXHVkNzkxIiw2LCJcdWQ3OWFcdWQ3OWNcdWQ3OWUiLDVdLFsiYzZhMSIsIlx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJh''@;'; put 'put ''Y1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMwMFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1''@;'; put 'put ''ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5''@;'; put 'put ''MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNlY1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMSJd''@;'; put 'put ''LFsiYzdhMSIsIlx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRk''@;'; put 'put ''Zlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1''@;'; put 'put ''ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVm''@;'; put 'put ''NVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMCJdLFsiYzhhMSIsIlx1ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1''@;'; put 'put ''ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZk''@;'; put 'put ''MVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1''@;'; put 'put ''ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZCJdLFsi''@;'; put 'put ''Y2FhMSIsIlx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRjZlx1''@;'; put 'put ''OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1NzY0''@;'; put 'put ''ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIyMVx1''@;'; put 'put ''NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NSJdLFsiY2JhMSIsIlx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYz''@;'; put 'put ''YVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1''@;'; put 'put ''NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1''@;'; put 'put ''Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMiJdLFsiY2Nh''@;'; put 'put ''MSIsIlx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1''@;'; put 'put ''MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1''@;'; put 'put ''NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgz''@;'; put 'put ''OFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMCJdLFsiY2RhMSIsIlx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1''@;'; put 'put ''OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlkMVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJm''@;'; put 'put ''ZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1''@;'; put 'put ''ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkYyJdLFsiY2VhMSIs''@;'; put 'put ''Ilx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1''@;'; put 'put ''OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEy''@;'; put 'put ''N1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1''@;'; put 'put ''OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZSJdLFsiY2ZhMSIsIlx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1Njdi''@;'; put 'put ''OFx1NjdlOVx1NjljYlx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1''@;'; put 'put ''OTJiNlx1OTlkMlx1OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVh''@;'; put 'put ''Y1x1NTAyNlx1NTIzOFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNCJdLFsiZDBhMSIsIlx1''@;'; put 'put ''OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4''@;'; put 'put ''N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1''@;'; put 'put ''NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkx''@;'; put 'put ''NFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlMyJdLFsiZDFhMSIsIlx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1''@;'; put 'put ''NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2''@;'; put 'put ''NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZSIsNSwiXHU5MGEzXHVmOTE0Iiw0LCJcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5''@;'; put 'put ''MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZcdTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjUiXSxbImQyYTEiLCJcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjgiLDQsIlx1''@;'; put 'put ''NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1ZjkzMyIsNSwi''@;'; put 'put ''XHU5OWQxXHVmOTM5IiwxMCwiXHU2ZmMzXHVmOTQ0XHVmOTQ1XHU4MWJmXHU4ZmIyXHU2MGYxXHVmOTQ2XHVmOTQ3XHU4MTY2XHVmOTQ4XHVmOTQ5XHU1YzNmXHVmOTRhIiw3LCJcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTIiLDUsIlx1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNl''@;'; put 'put ''NVx1NTMzZlx1NmViYVx1NTkxYVx1ODMzNiJdLFsiZDNhMSIsIlx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjViN1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1''@;'; put 'put ''NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgw''@;'; put 'put ''Mlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMwZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1''@;'; put 'put ''NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1NjMxMVx1NjM4OVx1NjQxN1x1Njg0MyJdLFsiZDRhMSIsIlx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZk''@;'; put 'put ''Y1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1''@;'; put 'put ''NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1''@;'; put 'put ''Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1''@;'; put 'put ''NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NSJdLFsiZDVhMSIsIlx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUx''@;'; put 'put ''ZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1''@;'; put 'put ''NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2NhZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVk''@;'; put 'put ''Y1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyMyJdLFsiZDZhMSIsIlx1NzE0OVx1NzQ4OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1''@;'; put 'put ''NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0''@;'; put 'put ''OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYwNVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1''@;'; put 'put ''N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0''@;'; put 'put ''Mlx1NzdhZFx1ODA0YVx1ODRmYyJdLFsiZDdhMSIsIlx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1''@;'; put 'put ''NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2Ex''@;'; put 'put ''Y1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1''@;'; put 'put ''OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyYyJdLFsiZDhhMSIsIlx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlh''@;'; put 'put ''Y1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1''@;'; put 'put ''NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNiZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2''@;'; put 'put ''NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1''@;'; put 'put ''OTc2Mlx1OWViNVx1NmVjNSJdLFsiZDlhMSIsIlx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1''@;'; put 'put ''NVx1NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1''@;'; put 'put ''NTkyMlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNm''@;'; put 'put ''N1x1NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4NyJdLFsiZGFhMSIsIlx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1''@;'; put 'put ''NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMx''@;'; put 'put ''MVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1''@;'; put 'put ''NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRh''@;'; put 'put ''NVx1NmUyNFx1NmY1MSJdLFsiZGJhMSIsIlx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1''@;'; put 'put ''ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBkYVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNl''@;'; put 'put ''MFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1''@;'; put 'put ''NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1NiJdLFsiZGNhMSIsIlx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZh''@;'; put 'put ''Zlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1''@;'; put 'put ''NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhkY1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMx''@;'; put 'put ''Mlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1''@;'; put 'put ''NTkyYlx1NWE2NiJdLFsiZGRhMSIsIlx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNm''@;'; put 'put ''Ylx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1''@;'; put 'put ''OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJk''@;'; put 'put ''NFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNSJdLFsiZGVhMSIsIlx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1''@;'; put 'put ''OThkYlx1OWYzYlx1NTZhY1x1NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZk''@;'; put 'put ''Zlx1NTBmZlx1NTNmMlx1NTNmOFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1''@;'; put 'put ''NzM0NVx1NzgwMlx1NzkzZVx1Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1Njcx''@;'; put 'put ''NFx1Zjk2YSJdLFsiZGZhMSIsIlx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1''@;'; put 'put ''ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNlMFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2''@;'; put 'put ''NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1''@;'; put 'put ''NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3MiJdLFsiZTBhMSIsIlx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2''@;'; put 'put ''ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1''@;'; put 'put ''NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEy''@;'; put 'put ''ZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1''@;'; put 'put ''N2I2YyJdLFsiZTFhMSIsIlx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYy''@;'; put 'put ''ZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1''@;'; put 'put ''NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5''@;'; put 'put ''Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMSJdLFsiZTJhMSIsIlx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1''@;'; put 'put ''NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFiMFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5''@;'; put 'put ''Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1''@;'; put 'put ''NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTliNFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQy''@;'; put 'put ''NyJdLFsiZTNhMSIsIlx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1''@;'; put 'put ''NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1Njkw''@;'; put 'put ''ZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1''@;'; put 'put ''ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MSJdLFsiZTRhMSIsIlx1Zjk3Mlx1NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5''@;'; put 'put ''ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1''@;'; put 'put ''OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJi''@;'; put 'put ''Y1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZCJd''@;'; put 'put ''LFsiZTVhMSIsIlx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2''@;'; put 'put ''Zlx1Zjk3OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1''@;'; put 'put ''Zjk3ZVx1OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZi''@;'; put 'put ''NFx1NTk0NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4MiJdLFsiZTZhMSIsIlx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1''@;'; put 'put ''Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1''@;'; put 'put ''MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1''@;'; put 'put ''Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMiJdLFsi''@;'; put 'put ''ZTdhMSIsIlx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUzNlx1NmY0MVx1NmZkYVx1NzAxYlx1''@;'; put 'put ''NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1ZjliNVx1NTIwOFx1NTNlMVx1NjZm''@;'; put 'put ''M1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQzZVx1NTQzM1x1NTVkYVx1NTg2Mlx1''@;'; put 'put ''NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiMyJdLFsiZThhMSIsIlx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIz''@;'; put 'put ''YVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThjNVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1''@;'; put 'put ''NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRj''@;'; put 'put ''ZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTkyZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMSJdLFsiZTlh''@;'; put 'put ''MSIsIlx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJi''@;'; put 'put ''OVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1''@;'; put 'put ''NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1''@;'; put 'put ''Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1MyJdLFsiZWFhMSIsIlx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1''@;'; put 'put ''NTcxMlx1NTdhM1x1NWE5Ylx1NWFjNFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0''@;'; put 'put ''OVx1NTBkZVx1NTM3MVx1NTcwZFx1NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1''@;'; put 'put ''ZjljN1x1NTUyZlx1NTVhOVx1NWI3YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYiJdLFsiZWJhMSIs''@;'; put 'put ''Ilx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1''@;'; put 'put ''NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4''@;'; put 'put ''ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThlZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1''@;'; put 'put ''NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiYyJdLFsiZWNhMSIsIlx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1Ylx1NjAy''@;'; put 'put ''MVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1ZjllYlx1''@;'; put 'put ''ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1ZjlmMVx1OTc2''@;'; put 'put ''ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NCJdLFsiZWRhMSIsIlx1''@;'; put 'put ''ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTljOVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMy''@;'; put 'put ''OFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1''@;'; put 'put ''N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMwN1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3''@;'; put 'put ''OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1OTU3NyJdLFsiZWVhMSIsIlx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1''@;'; put 'put ''OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1''@;'; put 'put ''N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2UzZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1''@;'; put 'put ''OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1NmJiZlx1NmMwOFx1NmZiMSJdLFsiZWZhMSIsIlx1NzE0''@;'; put 'put ''ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1''@;'; put 'put ''N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMz''@;'; put 'put ''YVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1''@;'; put 'put ''OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1NiJdLFsiZjBhMSIsIlx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2Iy''@;'; put 'put ''Y1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1''@;'; put 'put ''NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYz''@;'; put 'put ''Ylx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2YiJdLFsiZjFhMSIsIlx1OGUyYVx1''@;'; put 'put ''OGUzNVx1OTM3ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQz''@;'; put 'put ''Mlx1NmU0YVx1NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1''@;'; put 'put ''NWJlZlx1NWNmYlx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZm''@;'; put 'put ''ZVx1NjJlZlx1NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYSJdLFsiZjJhMSIsIlx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1''@;'; put 'put ''NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0''@;'; put 'put ''OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1''@;'; put 'put ''OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZiJdLFsiZjNhMSIsIlx1OTNmNlx1OTZj''@;'; put 'put ''Nlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1OWY2YVx1NjRiMFx1NmZhZlx1''@;'; put 'put ''NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVhY1x1N2FkOVx1OGI5Mlx1OGI5''@;'; put 'put ''Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1NWJjMFx1NWJlOFx1NWY2OVx1''@;'; put 'put ''NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1NiJdLFsiZjRhMSIsIlx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYy''@;'; put 'put ''MFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1''@;'; put 'put ''NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNiZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3''@;'; put 'put ''NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMiJdLFsiZjVhMSIsIlx1NjkxMlx1Njk1YVx1''@;'; put 'put ''NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBh''@;'; put 'put ''OFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1''@;'; put 'put ''OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVk''@;'; put 'put ''Y1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwMyJdLFsiZjZhMSIsIlx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1''@;'; put 'put ''NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTli''@;'; put 'put ''M1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThlZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1''@;'; put 'put ''NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExNyJdLFsiZjdhMSIsIlx1OTQzOFx1NTQ1MVx1NTYw''@;'; put 'put ''Nlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1''@;'; put 'put ''NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQxMFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3''@;'; put 'put ''Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1''@;'; put 'put ''OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMSJdLFsiZjhhMSIsIlx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1NmY4''@;'; put 'put ''ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUzZFx1''@;'; put 'put ''OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1OTJl''@;'; put 'put ''YVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0MyJdLFsiZjlhMSIsIlx1NTRjMVx1N2ExZlx1Njk1M1x1''@;'; put 'put ''OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVj''@;'; put 'put ''OFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1''@;'; put 'put ''OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1''@;'; put 'put ''Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYSJdLFsiZmFhMSIsIlx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1''@;'; put 'put ''OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVk''@;'; put 'put ''Mlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1''@;'; put 'put ''OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4YiJdLFsiZmJhMSIsIlx1NWY2Mlx1NmNjMlx1NmVjZVx1NzAw''@;'; put 'put ''NVx1NzA1MFx1NzBhZlx1NzE5Mlx1NzNlOVx1NzQ2OVx1ODM0YVx1ODdhMlx1ODg2MVx1OTAwOFx1OTBhMlx1OTNhM1x1OTlhOFx1NTE2ZVx1NWY1N1x1NjBlMFx1NjE2N1x1NjZiM1x1ODU1OVx1OGU0YVx1OTFhZlx1OTc4Ylx1NGU0ZVx1NGU5Mlx1NTQ3Y1x1NThkNVx1NThmYVx1NTk3ZFx1''@;'; put 'put ''NWNiNVx1NWYyN1x1NjIzNlx1NjI0OFx1NjYwYVx1NjY2N1x1NmJlYlx1NmQ2OVx1NmRjZlx1NmU1Nlx1NmVmOFx1NmY5NFx1NmZlMFx1NmZlOVx1NzA1ZFx1NzJkMFx1NzQyNVx1NzQ1YVx1NzRlMFx1NzY5M1x1Nzk1Y1x1N2NjYVx1N2UxZVx1ODBlMVx1ODJhNlx1ODQ2Ylx1ODRiZlx1ODY0''@;'; put 'put ''ZVx1ODY1Zlx1ODc3NFx1OGI3N1x1OGM2YVx1OTNhY1x1OTgwMFx1OTg2NVx1NjBkMVx1NjIxNlx1OTE3N1x1NWE1YVx1NjYwZlx1NmRmN1x1NmUzZVx1NzQzZlx1OWI0Mlx1NWZmZFx1NjBkYVx1N2IwZlx1NTRjNFx1NWYxOFx1NmM1ZVx1NmNkM1x1NmQyYVx1NzBkOFx1N2QwNVx1ODY3OVx1''@;'; put 'put ''OGEwY1x1OWQzYlx1NTMxNlx1NTQ4Y1x1NWIwNVx1NmEzYVx1NzA2Ylx1NzU3NSJdLFsiZmNhMSIsIlx1Nzk4ZFx1NzliZVx1ODJiMVx1ODNlZlx1OGE3MVx1OGI0MVx1OGNhOFx1OTc3NFx1ZmEwYlx1NjRmNFx1NjUyYlx1NzhiYVx1NzhiYlx1N2E2Ylx1NGUzOFx1NTU5YVx1NTk1MFx1NWJh''@;'; put 'put ''Nlx1NWU3Ylx1NjBhM1x1NjNkYlx1NmI2MVx1NjY2NVx1Njg1M1x1NmUxOVx1NzE2NVx1NzRiMFx1N2QwOFx1OTA4NFx1OWE2OVx1OWMyNVx1NmQzYlx1NmVkMVx1NzMzZVx1OGM0MVx1OTVjYVx1NTFmMFx1NWU0Y1x1NWZhOFx1NjA0ZFx1NjBmNlx1NjEzMFx1NjE0Y1x1NjY0M1x1NjY0NFx1''@;'; put 'put ''NjlhNVx1NmNjMVx1NmU1Zlx1NmVjOVx1NmY2Mlx1NzE0Y1x1NzQ5Y1x1NzY4N1x1N2JjMVx1N2MyN1x1ODM1Mlx1ODc1N1x1OTA1MVx1OTY4ZFx1OWVjM1x1NTMyZlx1NTZkZVx1NWVmYlx1NWY4YVx1NjA2Mlx1NjA5NFx1NjFmN1x1NjY2Nlx1NjcwM1x1NmE5Y1x1NmRlZVx1NmZhZVx1NzA3''@;'; put 'put ''MFx1NzM2YVx1N2U2YVx1ODFiZVx1ODMzNFx1ODZkNFx1OGFhOFx1OGNjNFx1NTI4M1x1NzM3Mlx1NWI5Nlx1NmE2Ylx1OTQwNFx1NTRlZVx1NTY4Nlx1NWI1ZFx1NjU0OFx1NjU4NVx1NjZjOVx1Njg5Zlx1NmQ4ZFx1NmRjNiJdLFsiZmRhMSIsIlx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0ZFx1''@;'; put 'put ''NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1ODQz''@;'; put 'put ''MVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIyM1x1''@;'; put 'put ''NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1NzE5''@;'; put 'put ''OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MCJdXScpfSw3NDI4NDphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiYTE0MCIsIlx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1''@;'; put 'put ''ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJc''@;'; put 'put ''dWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZl''@;'; put 'put ''NTlcdWZlNWEiXSxbImExYTEiLCJcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUy''@;'; put 'put ''NjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1''@;'; put 'put ''ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2MiIsNCwiXHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkx''@;'; put 'put ''XHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmIl0sWyJhMjQwIiwiXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUz''@;'; put 'put ''M2Q1XHUzMzljXHUzMzlkXHUzMzllXHUzM2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MSIsNywiXHUyNThmXHUyNThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUy''@;'; put 'put ''NTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkIl0sWyJhMmExIiwiXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcx''@;'; put 'put ''XHUyNTcyXHUyNTczXHVmZjEwIiw5LCJcdTIxNjAiLDksIlx1MzAyMSIsOCwiXHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxIiwyNSwiXHVmZjQxIiwyMV0sWyJhMzQwIiwiXHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHUwMzkxIiwxNiwiXHUwM2EzIiw2LCJcdTAzYjEiLDE2LCJcdTAzYzMiLDYs''@;'; put 'put ''Ilx1MzEwNSIsMTBdLFsiYTNhMSIsIlx1MzExMCIsMjUsIlx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYiJdLFsiYTNlMSIsIlx1MjBhYyJdLFsiYTQ0MCIsIlx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2''@;'; put 'put ''Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1''@;'; put 'put ''NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZCJdLFsiYTRhMSIsIlx1NGUxMVx1NGUx''@;'; put 'put ''MFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2Y1x1''@;'; put 'put ''NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1NWM2''@;'; put 'put ''Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMzNFx1''@;'; put 'put ''NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOSJdLFsiYTU0MCIsIlx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVkN1x1NGVlM1x1NGVl''@;'; put 'put ''NFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1NTNlZlx1NTNlNFx1''@;'; put 'put ''NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNiJdLFsiYTVhMSIsIlx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4''@;'; put 'put ''M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1NjcyY1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1''@;'; put 'put ''NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1Nzli''@;'; put 'put ''ZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVmMlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1''@;'; put 'put ''NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OCJdLFsiYTY0MCIsIlx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQw''@;'; put 'put ''MVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1''@;'; put 'put ''NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NCJdLFsiYTZhMSIsIlx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1''@;'; put 'put ''Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1''@;'; put 'put ''NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2''@;'; put 'put ''ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1''@;'; put 'put ''NGY0Nlx1NGY2MyJdLFsiYTc0MCIsIlx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJh''@;'; put 'put ''Y1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1''@;'; put 'put ''NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZCJdLFsiYTdhMSIsIlx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5''@;'; put 'put ''OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1''@;'; put 'put ''NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3''@;'; put 'put ''OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MCJdLFsiYTg0MCIsIlx1''@;'; put 'put ''Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4''@;'; put 'put ''ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1''@;'; put 'put ''ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5MiJdLFsiYThhMSIsIlx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZj''@;'; put 'put ''Nlx1OGZjNVx1OGZjNFx1NWRlMVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1''@;'; put 'put ''NGY3M1x1NGY3Zlx1NGY2Y1x1NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIz''@;'; put 'put ''OFx1NTIzN1x1NTIzYVx1NTIzMFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NSJdLFsiYTk0MCIsIlx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1''@;'; put 'put ''NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0''@;'; put 'put ''N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1''@;'; put 'put ''NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NSJdLFsiYTlhMSIsIlx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYy''@;'; put 'put ''Nlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1''@;'; put 'put ''NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJk''@;'; put 'put ''N1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYSJdLFsiYWE0MCIsIlx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1''@;'; put 'put ''Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNj''@;'; put 'put ''Y1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNhY1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMCJd''@;'; put 'put ''LFsiYWFhMSIsIlx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNhOVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4''@;'; put 'put ''NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1''@;'; put 'put ''ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJiZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZk''@;'; put 'put ''MVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NCJdLFsiYWI0MCIsIlx1OTY0Mlx1OTZiOVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1''@;'; put 'put ''NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0''@;'; put 'put ''Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRhNlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMSJdLFsiYWJhMSIsIlx1NTRjNFx1NTRjOFx1''@;'; put 'put ''NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdhMlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTll''@;'; put 'put ''NVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1''@;'; put 'put ''NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAyNVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMx''@;'; put 'put ''Nlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmNyJdLFsiYWM0MCIsIlx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1''@;'; put 'put ''NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1Njdl''@;'; put 'put ''Mlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxNyJdLFsiYWNhMSIsIlx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1''@;'; put 'put ''NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNi''@;'; put 'put ''Mlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1''@;'; put 'put ''NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2Qw''@;'; put 'put ''NFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNCJdLFsiYWQ0MCIsIlx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1''@;'; put 'put ''ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlk''@;'; put 'put ''NFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNhMFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNSJdLFsiYWRhMSIsIlx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1''@;'; put 'put ''OTFjZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAx''@;'; put 'put ''Nlx1NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1''@;'; put 'put ''NTFjY1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRl''@;'; put 'put ''ZVx1NTRlYSJdLFsiYWU0MCIsIlx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1NWEyMFx1''@;'; put 'put ''NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQwMVx1NWNm''@;'; put 'put ''NFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OSJdLFsiYWVhMSIsIlx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1''@;'; put 'put ''NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0''@;'; put 'put ''OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1''@;'; put 'put ''NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1NmQ3N1x1NmQ1OVx1NmQ5MyJdLFsiYWY0MCIsIlx1NmQ2''@;'; put 'put ''Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1''@;'; put 'put ''NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1Nzcy''@;'; put 'put ''OFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzNyJdLFsiYWZhMSIsIlx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1''@;'; put 'put ''NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2Zj''@;'; put 'put ''MVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1''@;'; put 'put ''ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0MyJdLFsiYjA0MCIsIlx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZh''@;'; put 'put ''NFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1''@;'; put 'put ''OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZmOFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4''@;'; put 'put ''M1x1OTY2Mlx1OTY2M1x1OTY2MSJdLFsiYjBhMSIsIlx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1''@;'; put 'put ''NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZm''@;'; put 'put ''Y1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1''@;'; put 'put ''NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MCJdLFsiYjE0MCIsIlx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJj''@;'; put 'put ''NFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1''@;'; put 'put ''NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZCJdLFsi''@;'; put 'put ''YjFhMSIsIlx1NjBjNVx1NjBiYlx1NjBiNVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1''@;'; put 'put ''NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1''@;'; put 'put ''NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVjZlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1''@;'; put 'put ''Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYSJdLFsiYjI0MCIsIlx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRm''@;'; put 'put ''YVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1''@;'; put 'put ''NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNiJdLFsiYjJhMSIsIlx1NzRmN1x1NzUxY1x1NzUy''@;'; put 'put ''Mlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1''@;'; put 'put ''N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2Yz''@;'; put 'put ''ZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1''@;'; put 'put ''ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3YyJdLFsiYjM0MCIsIlx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1ODZjOVx1ODg1M1x1ODg5ZVx1ODg4''@;'; put 'put ''OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNhN1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1''@;'; put 'put ''OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNCJdLFsiYjNhMSIsIlx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFl''@;'; put 'put ''Nlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1''@;'; put 'put ''NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNhNVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4''@;'; put 'put ''Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1''@;'; put 'put ''NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MCJdLFsiYjQ0MCIsIlx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0''@;'; put 'put ''NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBlMFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1''@;'; put 'put ''NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZCJdLFsiYjRhMSIsIlx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNk''@;'; put 'put ''Ylx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1''@;'; put 'put ''NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1NjkxMlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMy''@;'; put 'put ''Zlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1''@;'; put 'put ''NmVjYiJdLFsiYjU0MCIsIlx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQy''@;'; put 'put ''YVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1''@;'; put 'put ''Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OCJdLFsiYjVhMSIsIlx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5''@;'; put 'put ''Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1''@;'; put 'put ''ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNk''@;'; put 'put ''Y1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MSJdLFsiYjY0MCIsIlx1OGE1NFx1''@;'; put 'put ''OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRk''@;'; put 'put ''YVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVmOFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1''@;'; put 'put ''OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1OTU5MSJdLFsiYjZhMSIsIlx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZm''@;'; put 'put ''Mlx1OTdjY1x1OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1''@;'; put 'put ''NTI3Zlx1NTI3N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcx''@;'; put 'put ''M1x1NTg1ZVx1NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiYyJdLFsiYjc0MCIsIlx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1''@;'; put 'put ''NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIy''@;'; put 'put ''MVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1''@;'; put 'put ''NjcwM1x1Njk5NFx1Njk2ZCJdLFsiYjdhMSIsIlx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJm''@;'; put 'put ''ZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1''@;'; put 'put ''NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3''@;'; put 'put ''OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2MyJdLFsiYjg0MCIsIlx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1''@;'; put 'put ''NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2Ni''@;'; put 'put ''MVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2YiJdLFsiYjhh''@;'; put 'put ''MSIsIlx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcx''@;'; put 'put ''M1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1''@;'; put 'put ''OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRk''@;'; put 'put ''Zlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYSJdLFsiYjk0MCIsIlx1OGY5Zlx1OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1''@;'; put 'put ''OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIzZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5''@;'; put 'put ''OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNCJdLFsiYjlhMSIsIlx1OThmZFx1OThmZVx1OTliM1x1''@;'; put 'put ''OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYw''@;'; put 'put ''MFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYxZlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1''@;'; put 'put ''NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1''@;'; put 'put ''N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0NyJdLFsiYmE0MCIsIlx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1''@;'; put 'put ''NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZhMlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1Njlj''@;'; put 'put ''Y1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMiJdLFsiYmFhMSIsIlx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1''@;'; put 'put ''NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5''@;'; put 'put ''MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYxM1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1''@;'; put 'put ''N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2Ri''@;'; put 'put ''OFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhYyJdLFsiYmI0MCIsIlx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1''@;'; put 'put ''ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhm''@;'; put 'put ''NFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNCJdLFsiYmJhMSIsIlx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1''@;'; put 'put ''OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3''@;'; put 'put ''OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1''@;'; put 'put ''OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFk''@;'; put 'put ''YyJdLFsiYmM0MCIsIlx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5Zlx1NTg5ZVx1NThiM1x1''@;'; put 'put ''NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1NWVkZFx1NWVlM1x1NWVl''@;'; put 'put ''MFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4MiJdLFsiYmNhMSIsIlx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1''@;'; put 'put ''NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEy''@;'; put 'put ''M1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1''@;'; put 'put ''NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1N1x1NzQ2OVx1NzQ4Ylx1NzQ4MyJdLFsiYmQ0MCIsIlx1NzQ3ZVx1NzQ4''@;'; put 'put ''MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1NzhiYVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1''@;'; put 'put ''N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5''@;'; put 'put ''ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZiJdLFsiYmRhMSIsIlx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1''@;'; put 'put ''ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5''@;'; put 'put ''NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1''@;'; put 'put ''OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYxZlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZSJdLFsiYmU0MCIsIlx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3''@;'; put 'put ''N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1''@;'; put 'put ''OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2''@;'; put 'put ''Zlx1OWQwNlx1OWQwOSJdLFsiYmVhMSIsIlx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1''@;'; put 'put ''NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFj''@;'; put 'put ''OFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1''@;'; put 'put ''NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMSJdLFsiYmY0MCIsIlx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZh''@;'; put 'put ''MFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFkNVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1''@;'; put 'put ''NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYSJdLFsiYmZhMSIs''@;'; put 'put ''Ilx1N2UxMVx1N2UwOFx1N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1''@;'; put 'put ''ODU0OVx1ODU2ZFx1ODU2YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIw''@;'; put 'put ''Mlx1OGFmN1x1OGFlZFx1OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1''@;'; put 'put ''OTEzNFx1OTE5Mlx1OTMyMFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYSJdLFsiYzA0MCIsIlx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcx''@;'; put 'put ''Nlx1OTcwZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1''@;'; put 'put ''OWIyOFx1OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4NyJdLFsiYzBhMSIsIlx1NTY4Zlx1NThkNVx1NThkM1x1NThk''@;'; put 'put ''MVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRkOFx1NjRlMFx1NjRmMFx1NjRlNlx1''@;'; put 'put ''NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1NmZmMVx1NmZkZlx1NmZlMFx1NmZk''@;'; put 'put ''Ylx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRhOVx1NzRiMFx1NzRhNlx1NzRhOFx1''@;'; put 'put ''NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhYyJdLFsiYzE0MCIsIlx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2Jl''@;'; put 'put ''MFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1''@;'; put 'put ''ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYSJdLFsiYzFhMSIsIlx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4''@;'; put 'put ''N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1''@;'; put 'put ''OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5''@;'; put 'put ''ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1''@;'; put 'put ''OTg0Nlx1OThiNlx1OTkzNVx1OWEwMSJdLFsiYzI0MCIsIlx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVkY1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1''@;'; put 'put ''ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1''@;'; put 'put ''NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OCJdLFsiYzJhMSIsIlx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2Fj''@;'; put 'put ''NVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1''@;'; put 'put ''ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4''@;'; put 'put ''M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNiMFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNiJd''@;'; put 'put ''LFsiYzM0MCIsIlx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkzZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1''@;'; put 'put ''MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1''@;'; put 'put ''NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OCJdLFsiYzNhMSIsIlx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2Mz''@;'; put 'put ''OFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1''@;'; put 'put ''ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFh''@;'; put 'put ''ZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNkY1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZSJdLFsiYzQ0MCIsIlx1OTg1OFx1OTg1Ylx1''@;'; put 'put ''OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0''@;'; put 'put ''M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1''@;'; put 'put ''N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3YyJdLFsiYzRhMSIsIlx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2''@;'; put 'put ''Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1''@;'; put 'put ''OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJh''@;'; put 'put ''N1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NCJdLFsiYzU0MCIsIlx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4ZFx1OGU4Ylx1''@;'; put 'put ''OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1OWMyNVx1OWRh''@;'; put 'put ''Zlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRlNFx1NzU4YVx1''@;'; put 'put ''NzY2ZVx1NzY2YyJdLFsiYzVhMSIsIlx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2''@;'; put 'put ''Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1''@;'; put 'put ''N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFkNFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5''@;'; put 'put ''Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5MiJdLFsiYzY0MCIsIlx1OGI5Nlx1ODI3N1x1OGQxYlx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1''@;'; put 'put ''OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2''@;'; put 'put ''NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIyOFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3MiJdLFsiYzk0MCIsIlx1''@;'; put 'put ''NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTky''@;'; put 'put ''Y1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1''@;'; put 'put ''NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNSJdLFsiYzlhMSIsIlx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVm''@;'; put 'put ''N1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1''@;'; put 'put ''NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1''@;'; put 'put ''OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0YiJdLFsiY2E0MCIsIlx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1''@;'; put 'put ''NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2''@;'; put 'put ''NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1''@;'; put 'put ''NTQxOVx1NTQxY1x1NTQyNVx1NTQxOCJdLFsiY2FhMSIsIlx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4''@;'; put 'put ''ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1''@;'; put 'put ''NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZmYlx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3''@;'; put 'put ''MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0NyJdLFsiY2I0MCIsIlx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1''@;'; put 'put ''NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJj''@;'; put 'put ''M1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAzNFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5MyJd''@;'; put 'put ''LFsiY2JhMSIsIlx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4''@;'; put 'put ''OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1''@;'; put 'put ''NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZm''@;'; put 'put ''OVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1NTc3NFx1NTc2MiJdLFsiY2M0MCIsIlx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1''@;'; put 'put ''NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNh''@;'; put 'put ''N1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYiJdLFsiY2NhMSIsIlx1NjAzNFx1NjAwYVx1''@;'; put 'put ''NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJh''@;'; put 'put ''OVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1''@;'; put 'put ''Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNh''@;'; put 'put ''ZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMiJdLFsiY2Q0MCIsIlx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1''@;'; put 'put ''NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNh''@;'; put 'put ''MFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRlOFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYSJdLFsiY2RhMSIsIlx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3Ylx1''@;'; put 'put ''N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1ODJj''@;'; put 'put ''Mlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZjZFx1''@;'; put 'put ''NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1NTM5''@;'; put 'put ''OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZiJdLFsiY2U0MCIsIlx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1NTc5Zlx1NTdhNFx1''@;'; put 'put ''NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlmMlx1NTlmN1x1NTlk''@;'; put 'put ''Ylx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYiJdLFsiY2VhMSIsIlx1NWNkZVx1NWNkYVx1NWNjOVx1NWNjN1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1''@;'; put 'put ''NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0''@;'; put 'put ''N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJmOVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1''@;'; put 'put ''NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1Njdj''@;'; put 'put ''OFx1NjdiYSJdLFsiY2Y0MCIsIlx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1''@;'; put 'put ''NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQx''@;'; put 'put ''Mlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0MiJdLFsiY2ZhMSIsIlx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1''@;'; put 'put ''NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNj''@;'; put 'put ''NVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1''@;'; put 'put ''NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MCJdLFsiZDA0MCIsIlx1N2E3''@;'; put 'put ''ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1''@;'; put 'put ''ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIyMVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJl''@;'; put 'put ''MVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYSJdLFsiZDBhMSIsIlx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1''@;'; put 'put ''OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAx''@;'; put 'put ''Ylx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAxY1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1''@;'; put 'put ''NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMSJdLFsiZDE0MCIsIlx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRl''@;'; put 'put ''MFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1''@;'; put 'put ''NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJhZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2''@;'; put 'put ''N1x1NjA1ZFx1NjA1YVx1NjA2NyJdLFsiZDFhMSIsIlx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1''@;'; put 'put ''NjMzNlx1NjM0M1x1NjNlNFx1NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVj''@;'; put 'put ''Mlx1NjY0YVx1NjY1Zlx1NjY0N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1''@;'; put 'put ''NjgyNlx1NjgyOFx1NjgyZVx1Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNCJdLFsiZDI0MCIsIlx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3''@;'; put 'put ''Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1''@;'; put 'put ''NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OCJdLFsi''@;'; put 'put ''ZDJhMSIsIlx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1''@;'; put 'put ''NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1Nzcx''@;'; put 'put ''YVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1''@;'; put 'put ''NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMCJdLFsiZDM0MCIsIlx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4''@;'; put 'put ''Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2ZjM1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1''@;'; put 'put ''ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMiJdLFsiZDNhMSIsIlx1ODM0Mlx1ODM0ZVx1ODMx''@;'; put 'put ''Ylx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1''@;'; put 'put ''ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3''@;'; put 'put ''ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1''@;'; put 'put ''OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MCJdLFsiZDQ0MCIsIlx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2''@;'; put 'put ''MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1''@;'; put 'put ''NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1NTU1Mlx1NTU0NSJdLFsiZDRhMSIsIlx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUy''@;'; put 'put ''ZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1''@;'; put 'put ''NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1''@;'; put 'put ''ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1''@;'; put 'put ''NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZiJdLFsiZDU0MCIsIlx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBi''@;'; put 'put ''ZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1''@;'; put 'put ''NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5ZiJdLFsiZDVhMSIsIlx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1''@;'; put 'put ''Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1''@;'; put 'put ''Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRi''@;'; put 'put ''NFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1''@;'; put 'put ''NmRjOSJdLFsiZDY0MCIsIlx1NmRkMFx1NmRmMlx1NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBm''@;'; put 'put ''Nlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1''@;'; put 'put ''NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZiJdLFsiZDZhMSIsIlx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1Nzcz''@;'; put 'put ''ZFx1NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1''@;'; put 'put ''N2IzNVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2Qz''@;'; put 'put ''YVx1N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZiJdLFsiZDc0MCIsIlx1ODAxZVx1''@;'; put 'put ''ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNhOFx1ODM4''@;'; put 'put ''ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1ODM4N1x1''@;'; put 'put ''ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiNyJdLFsiZDdhMSIsIlx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5''@;'; put 'put ''NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEzMFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1''@;'; put 'put ''OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBm''@;'; put 'put ''MFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYSJdLFsiZDg0MCIsIlx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1''@;'; put 'put ''OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1''@;'; put 'put ''Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1''@;'; put 'put ''NTcwY1x1NTgyOVx1NTgzNyJdLFsiZDhhMSIsIlx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5''@;'; put 'put ''Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1''@;'; put 'put ''NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQz''@;'; put 'put ''Mlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNCJdLFsiZDk0MCIsIlx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1''@;'; put 'put ''NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNlOFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNi''@;'; put 'put ''ZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMiJdLFsiZDlh''@;'; put 'put ''MSIsIlx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1Njhl''@;'; put 'put ''MVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1NjhmOFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1''@;'; put 'put ''NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUz''@;'; put 'put ''Zlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUwM1x1NmUyZVx1NmU1ZSJdLFsiZGE0MCIsIlx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1''@;'; put 'put ''NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUzNVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4''@;'; put 'put ''OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNiJdLFsiZGFhMSIsIlx1NzQxYVx1NzQyMVx1NzQyZFx1''@;'; put 'put ''NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0''@;'; put 'put ''YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1NzdkZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1''@;'; put 'put ''N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1''@;'; put 'put ''Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NSJdLFsiZGI0MCIsIlx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1''@;'; put 'put ''ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNi''@;'; put 'put ''Zlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmMyJdLFsiZGJhMSIsIlx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1''@;'; put 'put ''ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhi''@;'; put 'put ''YVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1''@;'; put 'put ''OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRk''@;'; put 'put ''N1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYSJdLFsiZGM0MCIsIlx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEyY1x1OTEwNFx1OTBmZlx1OTBmY1x1''@;'; put 'put ''OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1OTFmZFx1OTIwNlx1OTIwNFx1OTIy''@;'; put 'put ''N1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OCJdLFsiZGNhMSIsIlx1OTY4OVx1OTY4M1x1OTY4MFx1OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1''@;'; put 'put ''OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBiYVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3''@;'; put 'put ''OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1''@;'; put 'put ''NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFiYVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFj''@;'; put 'put ''NiJdLFsiZGQ0MCIsIlx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1''@;'; put 'put ''NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIy''@;'; put 'put ''M1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNCJdLFsiZGRhMSIsIlx1NjQzM1x1NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1''@;'; put 'put ''NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1Njkz''@;'; put 'put ''OFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1''@;'; put 'put ''Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1NjkzY1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmYyJdLFsiZGU0MCIsIlx1NmJmOVx1NmJm''@;'; put 'put ''N1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1''@;'; put 'put ''NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1''@;'; put 'put ''OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1MyJdLFsiZGVhMSIsIlx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1''@;'; put 'put ''NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYx''@;'; put 'put ''MFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1''@;'; put 'put ''Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExMyJdLFsiZGY0MCIsIlx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2Fl''@;'; put 'put ''Ylx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1''@;'; put 'put ''N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3''@;'; put 'put ''Nlx1ODE2N1x1ODE2ZiJdLFsiZGZhMSIsIlx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1''@;'; put 'put ''ODQ1YVx1ODQ1OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2''@;'; put 'put ''Zlx1ODRjNVx1ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1''@;'; put 'put ''ODcwZFx1ODcwNVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNCJdLFsiZTA0MCIsIlx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEz''@;'; put 'put ''Zlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1''@;'; put 'put ''OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZiJdLFsiZTBhMSIs''@;'; put 'put ''Ilx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIyZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1''@;'; put 'put ''OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZm''@;'; put 'put ''ZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1''@;'; put 'put ''NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMCJdLFsiZTE0MCIsIlx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYx''@;'; put 'put ''Y1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1''@;'; put 'put ''NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMCJdLFsiZTFhMSIsIlx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4''@;'; put 'put ''MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1''@;'; put 'put ''NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1''@;'; put 'put ''Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1''@;'; put 'put ''NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOSJdLFsiZTI0MCIsIlx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1NjliY1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1Njlh''@;'; put 'put ''NFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1''@;'; put 'put ''NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYxMlx1NmVlZFx1NmYwYSJdLFsiZTJhMSIsIlx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYz''@;'; put 'put ''Y1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVmY1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1''@;'; put 'put ''NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYw''@;'; put 'put ''YVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1''@;'; put 'put ''Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5MyJdLFsiZTM0MCIsIlx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4''@;'; put 'put ''Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1''@;'; put 'put ''N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZSJdLFsiZTNhMSIsIlx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5''@;'; put 'put ''N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRjZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1''@;'; put 'put ''ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0''@;'; put 'put ''Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODczY1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYiJd''@;'; put 'put ''LFsiZTQ0MCIsIlx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRm''@;'; put 'put ''Zlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1''@;'; put 'put ''OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZCJdLFsiZTRhMSIsIlx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4''@;'; put 'put ''YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1''@;'; put 'put ''OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEw''@;'; put 'put ''M1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OCJdLFsiZTU0MCIsIlx1NTY1YVx1NTY0MFx1''@;'; put 'put ''NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1NWIwMlx1NWFmOVx1NWIw''@;'; put 'put ''MVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0OVx1NWZiMlx1NjE4Ylx1''@;'; put 'put ''NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OSJdLFsiZTVhMSIsIlx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4''@;'; put 'put ''Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1''@;'; put 'put ''NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1NjlmY1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1Njlm''@;'; put 'put ''Nlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5MiJdLFsiZTY0MCIsIlx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1''@;'; put 'put ''NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3''@;'; put 'put ''Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1''@;'; put 'put ''NzM1YVx1NzM1OSJdLFsiZTZhMSIsIlx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5''@;'; put 'put ''Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1''@;'; put 'put ''N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2NjYlx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2Rl''@;'; put 'put ''ZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1ODE5ZiJdLFsiZTc0MCIsIlx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1''@;'; put 'put ''ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUx''@;'; put 'put ''Mlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2MiJdLFsiZTdhMSIsIlx1''@;'; put 'put ''ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3''@;'; put 'put ''Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1''@;'; put 'put ''OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUy''@;'; put 'put ''MFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyNyJdLFsiZTg0MCIsIlx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1''@;'; put 'put ''OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJm''@;'; put 'put ''MVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJlZlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkMyJdLFsiZThhMSIsIlx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1''@;'; put 'put ''OTU3Y1x1OTVhY1x1OTVhYlx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThm''@;'; put 'put ''YVx1OTkxMVx1OTkxNFx1OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1''@;'; put 'put ''OWI3MVx1OWI2Nlx1OWI3Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTEx''@;'; put 'put ''YVx1NTExMVx1NTFkZVx1NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZSJdLFsiZTk0MCIsIlx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1''@;'; put 'put ''NWIxOVx1NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2''@;'; put 'put ''Nlx1NWU2Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYSJdLFsiZTlhMSIsIlx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRkNlx1NjRkMFx1NjRjZlx1NjRjOVx1''@;'; put 'put ''NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1NmE2N1x1NmEzMlx1NmE2OFx1NmEz''@;'; put 'put ''ZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1''@;'; put 'put ''NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1NmZhZVx1NmZiYVx1NmZhY1x1NmZh''@;'; put 'put ''YVx1NmZjZlx1NmZiZlx1NmZiOCJdLFsiZWE0MCIsIlx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1''@;'; put 'put ''NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYz''@;'; put 'put ''NVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OSJdLFsiZWFhMSIsIlx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1''@;'; put 'put ''NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2Nk''@;'; put 'put ''NFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1''@;'; put 'put ''N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OCJdLFsi''@;'; put 'put ''ZWI0MCIsIlx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1''@;'; put 'put ''ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODky''@;'; put 'put ''N1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMCJdLFsiZWJhMSIsIlx1OGFlMlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1''@;'; put 'put ''OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYz''@;'; put 'put ''Mlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1''@;'; put 'put ''OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwYyJdLFsiZWM0MCIsIlx1OTMwYlx1OTJmZVx1OTMw''@;'; put 'put ''OVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1''@;'; put 'put ''OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTllOVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4''@;'; put 'put ''Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NSJdLFsiZWNhMSIsIlx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1''@;'; put 'put ''OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIz''@;'; put 'put ''Mlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIyZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1''@;'; put 'put ''NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZSJdLFsiZWQ0MCIsIlx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFh''@;'; put 'put ''Nlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1''@;'; put 'put ''NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1Nzdi''@;'; put 'put ''N1x1NzdiNiJdLFsiZWRhMSIsIlx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1''@;'; put 'put ''N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0''@;'; put 'put ''OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1''@;'; put 'put ''ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZSJdLFsiZWU0MCIsIlx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1ODU4Nlx1ODU4''@;'; put 'put ''ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdjMlx1ODdjY1x1''@;'; put 'put ''ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZSJdLFsiZWVhMSIsIlx1OGIx''@;'; put 'put ''OFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1''@;'; put 'put ''OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1''@;'; put 'put ''MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1''@;'; put 'put ''OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5YyJdLFsiZWY0MCIsIlx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTky''@;'; put 'put ''YVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlmY1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1''@;'; put 'put ''OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1OWQzMCJdLFsiZWZhMSIsIlx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQz''@;'; put 'put ''N1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1''@;'; put 'put ''NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFlOVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZk''@;'; put 'put ''OFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1''@;'; put 'put ''NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3NiJdLFsiZjA0MCIsIlx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZi''@;'; put 'put ''ZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1''@;'; put 'put ''N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMiJdLFsiZjBhMSIsIlx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODVi''@;'; put 'put ''M1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1''@;'; put 'put ''ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0''@;'; put 'put ''N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1''@;'; put 'put ''OGU1ZVx1OGU2NVx1OGU2NyJdLFsiZjE0MCIsIlx1OGU1Ylx1OGU1YVx1OGU2MVx1OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNi''@;'; put 'put ''N1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNhNlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1''@;'; put 'put ''NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYSJdLFsiZjFhMSIsIlx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkz''@;'; put 'put ''Y1x1OTkzYVx1OWEwZlx1OWEwYlx1OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1''@;'; put 'put ''OWJiOFx1OWJkM1x1OWJiNlx1OWJjNFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYy''@;'; put 'put ''NVx1OWYyYlx1OWYyYVx1OWYyOVx1OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MCJdLFsiZjI0''@;'; put 'put ''MCIsIlx1NWZiZlx1NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJi''@;'; put 'put ''MFx1NmMwY1x1NzAxOVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1''@;'; put 'put ''NzRjM1x1NzUxNlx1NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYiJdLFsiZjJhMSIsIlx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1N2U3Nlx1N2U3NVx1N2U3''@;'; put 'put ''OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVlMVx1ODVlOFx1ODVkYVx1''@;'; put 'put ''ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1ODdmZlx1ODgwYVx1ODgw''@;'; put 'put ''Mlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NSJdLFsiZjM0MCIsIlx1OGI1MVx1OGI0Mlx1OGI1Mlx1''@;'; put 'put ''OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFi''@;'; put 'put ''MFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1''@;'; put 'put ''OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNiJdLFsiZjNhMSIsIlx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWEx''@;'; put 'put ''NVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1''@;'; put 'put ''OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4''@;'; put 'put ''Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMiJdLFsiZjQ0MCIsIlx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1''@;'; put 'put ''NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFmMVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAz''@;'; put 'put ''OFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1''@;'; put 'put ''NzkyOSJdLFsiZjRhMSIsIlx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVm''@;'; put 'put ''Zlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgxMVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1''@;'; put 'put ''OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQy''@;'; put 'put ''OFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQwYVx1OTNmZiJdLFsiZjU0MCIsIlx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1''@;'; put 'put ''OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFj''@;'; put 'put ''Nlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5YiJdLFsiZjVhMSIsIlx1OWRhMFx1''@;'; put 'put ''OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1''@;'; put 'put ''ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZjM1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1''@;'; put 'put ''NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYx''@;'; put 'put ''Zlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYyMFx1ODYyOVx1ODYxZVx1ODYyNSJdLFsiZjY0MCIsIlx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1''@;'; put 'put ''OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQz''@;'; put 'put ''MVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYSJdLFsiZjZhMSIsIlx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1''@;'; put 'put ''OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRh''@;'; put 'put ''Y1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1''@;'; put 'put ''NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3''@;'; put 'put ''MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YSJdLFsiZjc0MCIsIlx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3MVx1''@;'; put 'put ''ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1OTQ0''@;'; put 'put ''OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YSJdLFsiZjdhMSIsIlx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1''@;'; put 'put ''OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRlOVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRk''@;'; put 'put ''NVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1''@;'; put 'put ''NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgzMFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3''@;'; put 'put ''NFx1ODk3M1x1ODlmZSJdLFsiZjg0MCIsIlx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdjNVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1''@;'; put 'put ''OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRl''@;'; put 'put ''OFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0ZiJdLFsiZjhhMSIsIlx1OWY3MVx1OWY3MFx1OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1''@;'; put 'put ''NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgzN1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFj''@;'; put 'put ''Mlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1''@;'; put 'put ''OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YSJdLFsiZjk0MCIs''@;'; put 'put ''Ilx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1''@;'; put 'put ''OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2''@;'; put 'put ''MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYSJdLFsiZjlhMSIsIlx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1''@;'; put 'put ''OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2''@;'; put 'put ''Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1''@;'; put 'put ''MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5MyJdXScpfSwzMTUzMjphdD0+eyJ1c2Ugc3RyaWN0IjthdC5l''@;'; put 'put ''eHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiOGVhMSIsIlx1ZmY2MSIsNjJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVm''@;'; put 'put ''ZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0''@;'; put 'put ''XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZmMGRceGIxXHhkN1x4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUw''@;'; put 'put ''XHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjNyJdLFsiYTJhMSIsIlx1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5''@;'; put 'put ''M1x1MzAxMyJdLFsiYTJiYSIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiYTJjYSIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiYTJkYyIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1''@;'; put 'put ''MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyYyJdLFsiYTJmMiIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbImEyZmUiLCJcdTI1ZWYiXSxbImEzYjAiLCJcdWZmMTAiLDldLFsiYTNjMSIs''@;'; put 'put ''Ilx1ZmYyMSIsMjVdLFsiYTNlMSIsIlx1ZmY0MSIsMjVdLFsiYTRhMSIsIlx1MzA0MSIsODJdLFsiYTVhMSIsIlx1MzBhMSIsODVdLFsiYTZhMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNmMxIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2XSxbImE3YTEiLCJcdTA0MTAiLDUsIlx1MDQw''@;'; put 'put ''MVx1MDQxNiIsMjVdLFsiYTdkMSIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2IiwyNV0sWyJhOGExIiwiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUy''@;'; put 'put ''NTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyIl0sWyJhZGExIiwiXHUyNDYwIiwxOSwiXHUyMTYwIiw5XSxbImFkYzAiLCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMz''@;'; put 'put ''MjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTEiXSxbImFkZGYiLCJcdTMzN2JcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTQiLDQsIlx1''@;'; put 'put ''MzIzMVx1MzIzMlx1MzIzOVx1MzM3ZVx1MzM3ZFx1MzM3Y1x1MjI1Mlx1MjI2MVx1MjIyYlx1MjIyZVx1MjIxMVx1MjIxYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MjIzNVx1MjIyOVx1MjIyYSJdLFsiYjBhMSIsIlx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMy''@;'; put 'put ''OFx1NTlmNlx1OTAyMlx1ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1''@;'; put 'put ''NWViNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2Rl''@;'; put 'put ''Zlx1ODBjM1x1ODQwZVx1ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1''@;'; put 'put ''NWYxNVx1OThmMlx1NmRlYlx1ODBlNFx1ODUyZCJdLFsiYjFhMSIsIlx1OTY2Mlx1OTY3MFx1OTZhMFx1OTdmYlx1NTQwYlx1NTNmM1x1NWI4N1x1NzBjZlx1N2ZiZFx1OGZjMlx1OTZlOFx1NTM2Zlx1OWQ1Y1x1N2FiYVx1NGUxMVx1Nzg5M1x1ODFmY1x1NmUyNlx1NTYxOFx1NTUwNFx1NmIx''@;'; put 'put ''ZFx1ODUxYVx1OWMzYlx1NTllNVx1NTNhOVx1NmQ2Nlx1NzRkY1x1OTU4Zlx1NTY0Mlx1NGU5MVx1OTA0Ylx1OTZmMlx1ODM0Zlx1OTkwY1x1NTNlMVx1NTViNlx1NWIzMFx1NWY3MVx1NjYyMFx1NjZmM1x1NjgwNFx1NmMzOFx1NmNmM1x1NmQyOVx1NzQ1Ylx1NzZjOFx1N2E0ZVx1OTgzNFx1''@;'; put 'put ''ODJmMVx1ODg1Ylx1OGE2MFx1OTJlZFx1NmRiMlx1NzVhYlx1NzZjYVx1OTljNVx1NjBhNlx1OGIwMVx1OGQ4YVx1OTViMlx1Njk4ZVx1NTNhZFx1NTE4Nlx1NTcxMlx1NTgzMFx1NTk0NFx1NWJiNFx1NWVmNlx1NjAyOFx1NjNhOVx1NjNmNFx1NmNiZlx1NmYxNFx1NzA4ZVx1NzExNFx1NzE1''@;'; put 'put ''OVx1NzFkNVx1NzMzZlx1N2UwMVx1ODI3Nlx1ODJkMVx1ODU5N1x1OTA2MFx1OTI1Ylx1OWQxYlx1NTg2OVx1NjViY1x1NmM1YVx1NzUyNVx1NTFmOVx1NTkyZVx1NTk2NVx1NWY4MFx1NWZkYyJdLFsiYjJhMSIsIlx1NjJiY1x1NjVmYVx1NmEyYVx1NmIyN1x1NmJiNFx1NzM4Ylx1N2ZjMVx1''@;'; put 'put ''ODk1Nlx1OWQyY1x1OWQwZVx1OWVjNFx1NWNhMVx1NmM5Nlx1ODM3Ylx1NTEwNFx1NWM0Ylx1NjFiNlx1ODFjNlx1Njg3Nlx1NzI2MVx1NGU1OVx1NGZmYVx1NTM3OFx1NjA2OVx1NmUyOVx1N2E0Zlx1OTdmM1x1NGUwYlx1NTMxNlx1NGVlZVx1NGY1NVx1NGYzZFx1NGZhMVx1NGY3M1x1NTJh''@;'; put 'put ''MFx1NTNlZlx1NTYwOVx1NTkwZlx1NWFjMVx1NWJiNlx1NWJlMVx1NzlkMVx1NjY4N1x1Njc5Y1x1NjdiNlx1NmI0Y1x1NmNiM1x1NzA2Ylx1NzNjMlx1Nzk4ZFx1NzliZVx1N2EzY1x1N2I4N1x1ODJiMVx1ODJkYlx1ODMwNFx1ODM3N1x1ODNlZlx1ODNkM1x1ODc2Nlx1OGFiMlx1NTYyOVx1''@;'; put 'put ''OGNhOFx1OGZlNlx1OTA0ZVx1OTcxZVx1ODY4YVx1NGZjNFx1NWNlOFx1NjIxMVx1NzI1OVx1NzUzYlx1ODFlNVx1ODJiZFx1ODZmZVx1OGNjMFx1OTZjNVx1OTkxM1x1OTlkNVx1NGVjYlx1NGYxYVx1ODllM1x1NTZkZVx1NTg0YVx1NThjYVx1NWVmYlx1NWZlYlx1NjAyYVx1NjA5NFx1NjA2''@;'; put 'put ''Mlx1NjFkMFx1NjIxMlx1NjJkMFx1NjUzOSJdLFsiYjNhMSIsIlx1OWI0MVx1NjY2Nlx1NjhiMFx1NmQ3N1x1NzA3MFx1NzU0Y1x1NzY4Nlx1N2Q3NVx1ODJhNVx1ODdmOVx1OTU4Ylx1OTY4ZVx1OGM5ZFx1NTFmMVx1NTJiZVx1NTkxNlx1NTRiM1x1NWJiM1x1NWQxNlx1NjE2OFx1Njk4Mlx1''@;'; put 'put ''NmRhZlx1Nzg4ZFx1ODRjYlx1ODg1N1x1OGE3Mlx1OTNhN1x1OWFiOFx1NmQ2Y1x1OTlhOFx1ODZkOVx1NTdhM1x1NjdmZlx1ODZjZVx1OTIwZVx1NTI4M1x1NTY4N1x1NTQwNFx1NWVkM1x1NjJlMVx1NjRiOVx1NjgzY1x1NjgzOFx1NmJiYlx1NzM3Mlx1NzhiYVx1N2E2Ylx1ODk5YVx1ODlk''@;'; put 'put ''Mlx1OGQ2Ylx1OGYwM1x1OTBlZFx1OTVhM1x1OTY5NFx1OTc2OVx1NWI2Nlx1NWNiM1x1Njk3ZFx1OTg0ZFx1OTg0ZVx1NjM5Ylx1N2IyMFx1NmEyYlx1NmE3Zlx1NjhiNlx1OWMwZFx1NmY1Zlx1NTI3Mlx1NTU5ZFx1NjA3MFx1NjJlY1x1NmQzYlx1NmUwN1x1NmVkMVx1ODQ1Ylx1ODkxMFx1''@;'; put 'put ''OGY0NFx1NGUxNFx1OWMzOVx1NTNmNlx1NjkxYlx1NmEzYVx1OTc4NFx1NjgyYVx1NTE1Y1x1N2FjM1x1ODRiMlx1OTFkY1x1OTM4Y1x1NTY1Ylx1OWQyOFx1NjgyMlx1ODMwNVx1ODQzMSJdLFsiYjRhMSIsIlx1N2NhNVx1NTIwOFx1ODJjNVx1NzRlNlx1NGU3ZVx1NGY4M1x1NTFhMFx1NWJk''@;'; put 'put ''Mlx1NTIwYVx1NTJkOFx1NTJlN1x1NWRmYlx1NTU5YVx1NTgyYVx1NTllNlx1NWI4Y1x1NWI5OFx1NWJkYlx1NWU3Mlx1NWU3OVx1NjBhM1x1NjExZlx1NjE2M1x1NjFiZVx1NjNkYlx1NjU2Mlx1NjdkMVx1Njg1M1x1NjhmYVx1NmIzZVx1NmI1M1x1NmM1N1x1NmYyMlx1NmY5N1x1NmY0NVx1''@;'; put 'put ''NzRiMFx1NzUxOFx1NzZlM1x1NzcwYlx1N2FmZlx1N2JhMVx1N2MyMVx1N2RlOVx1N2YzNlx1N2ZmMFx1ODA5ZFx1ODI2Nlx1ODM5ZVx1ODliM1x1OGFjY1x1OGNhYlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVhMlx1OTY2NVx1OTdkM1x1OTkyOFx1ODIxOFx1NGUzOFx1NTQyYlx1NWNi''@;'; put 'put ''OFx1NWRjY1x1NzNhOVx1NzY0Y1x1NzczY1x1NWNhOVx1N2ZlYlx1OGQwYlx1OTZjMVx1OTgxMVx1OTg1NFx1OTg1OFx1NGYwMVx1NGYwZVx1NTM3MVx1NTU5Y1x1NTY2OFx1NTdmYVx1NTk0N1x1NWIwOVx1NWJjNFx1NWM5MFx1NWUwY1x1NWU3ZVx1NWZjY1x1NjNlZVx1NjczYVx1NjVkN1x1''@;'; put 'put ''NjVlMlx1NjcxZlx1NjhjYlx1NjhjNCJdLFsiYjVhMSIsIlx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3''@;'; put 'put ''ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1''@;'; put 'put ''NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1''@;'; put 'put ''Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhYyJdLFsiYjZhMSIsIlx1NGY5Ylx1NGZhMFx1NTBkMVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1''@;'; put 'put ''NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVm''@;'; put 'put ''MFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1''@;'; put 'put ''OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFk''@;'; put 'put ''Ylx1OTFlN1x1NWM1MVx1NWM0OCJdLFsiYjdhMSIsIlx1NjM5OFx1N2E5Zlx1NmM5M1x1OTc3NFx1OGY2MVx1N2FhYVx1NzE4YVx1OTY4OFx1N2M4Mlx1NjgxN1x1N2U3MFx1Njg1MVx1OTM2Y1x1NTJmMlx1NTQxYlx1ODVhYlx1OGExM1x1N2ZhNFx1OGVjZFx1OTBlMVx1NTM2Nlx1ODg4OFx1''@;'; put 'put ''Nzk0MVx1NGZjMlx1NTBiZVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyZFx1NzNlYVx1NTc4Ylx1NTk1MVx1NWY2Mlx1NWY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFhOVx1NjNiMlx1NjQzYVx1NjU2Y1x1NjY2Zlx1Njg0Mlx1NmUxM1x1NzU2Nlx1N2EzZFx1N2NmYlx1N2Q0Y1x1N2Q5OVx1N2U0''@;'; put 'put ''Ylx1N2Y2Ylx1ODMwZVx1ODM0YVx1ODZjZFx1OGEwOFx1OGE2M1x1OGI2Nlx1OGVmZFx1OTgxYVx1OWQ4Zlx1ODJiOFx1OGZjZVx1OWJlOFx1NTI4N1x1NjIxZlx1NjQ4M1x1NmZjMFx1OTY5OVx1Njg0MVx1NTA5MVx1NmIyMFx1NmM3YVx1NmY1NFx1N2E3NFx1N2Q1MFx1ODg0MFx1OGEyM1x1''@;'; put 'put ''NjcwOFx1NGVmNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Y1x1NTIzOFx1NTI2M1x1NTVhN1x1NTcwZlx1NTgwNVx1NWFjY1x1NWVmYVx1NjFiMlx1NjFmOFx1NjJmM1x1NjM3MiJdLFsiYjhhMSIsIlx1NjkxY1x1NmEyOVx1NzI3ZFx1NzJhY1x1NzMyZVx1NzgxNFx1Nzg2Zlx1N2Q3OVx1Nzcw''@;'; put 'put ''Y1x1ODBhOVx1ODk4Ylx1OGIxOVx1OGNlMlx1OGVkMlx1OTA2M1x1OTM3NVx1OTY3YVx1OTg1NVx1OWExM1x1OWU3OFx1NTE0M1x1NTM5Zlx1NTNiM1x1NWU3Ylx1NWYyNlx1NmUxYlx1NmU5MFx1NzM4NFx1NzNmZVx1N2Q0M1x1ODIzN1x1OGEwMFx1OGFmYVx1OTY1MFx1NGU0ZVx1NTAwYlx1''@;'; put 'put ''NTNlNFx1NTQ3Y1x1NTZmYVx1NTlkMVx1NWI2NFx1NWRmMVx1NWVhYlx1NWYyN1x1NjIzOFx1NjU0NVx1NjdhZlx1NmU1Nlx1NzJkMFx1N2NjYVx1ODhiNFx1ODBhMVx1ODBlMVx1ODNmMFx1ODY0ZVx1OGE4N1x1OGRlOFx1OTIzN1x1OTZjN1x1OTg2N1x1OWYxM1x1NGU5NFx1NGU5Mlx1NGYw''@;'; put 'put ''ZFx1NTM0OFx1NTQ0OVx1NTQzZVx1NWEyZlx1NWY4Y1x1NWZhMVx1NjA5Zlx1NjhhN1x1NmE4ZVx1NzQ1YVx1Nzg4MVx1OGE5ZVx1OGFhNFx1OGI3N1x1OTE5MFx1NGU1ZVx1OWJjOVx1NGVhNFx1NGY3Y1x1NGZhZlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Y1x1NTI5Zlx1NTJiOVx1NTJmZVx1''@;'; put 'put ''NTM5YVx1NTNlM1x1NTQxMSJdLFsiYjlhMSIsIlx1NTQwZVx1NTU4OVx1NTc1MVx1NTdhMlx1NTk3ZFx1NWI1NFx1NWI1ZFx1NWI4Zlx1NWRlNVx1NWRlN1x1NWRmN1x1NWU3OFx1NWU4M1x1NWU5YVx1NWViN1x1NWYxOFx1NjA1Mlx1NjE0Y1x1NjI5N1x1NjJkOFx1NjNhN1x1NjUzYlx1NjYw''@;'; put 'put ''Mlx1NjY0M1x1NjZmNFx1Njc2ZFx1NjgyMVx1Njg5N1x1NjljYlx1NmM1Zlx1NmQyYVx1NmQ2OVx1NmUyZlx1NmU5ZFx1NzUzMlx1NzY4N1x1Nzg2Y1x1N2EzZlx1N2NlMFx1N2QwNVx1N2QxOFx1N2Q1ZVx1N2RiMVx1ODAxNVx1ODAwM1x1ODBhZlx1ODBiMVx1ODE1NFx1ODE4Zlx1ODIyYVx1''@;'; put 'put ''ODM1Mlx1ODg0Y1x1ODg2MVx1OGIxYlx1OGNhMlx1OGNmY1x1OTBjYVx1OTE3NVx1OTI3MVx1NzgzZlx1OTJmY1x1OTVhNFx1OTY0ZFx1OTgwNVx1OTk5OVx1OWFkOFx1OWQzYlx1NTI1Ylx1NTJhYlx1NTNmN1x1NTQwOFx1NThkNVx1NjJmN1x1NmZlMFx1OGM2YVx1OGY1Zlx1OWViOVx1NTE0''@;'; put 'put ''Ylx1NTIzYlx1NTQ0YVx1NTZmZFx1N2E0MFx1OTE3N1x1OWQ2MFx1OWVkMlx1NzM0NFx1NmYwOVx1ODE3MFx1NzUxMVx1NWZmZFx1NjBkYVx1OWFhOFx1NzJkYlx1OGZiYyJdLFsiYmFhMSIsIlx1NmI2NFx1OTgwM1x1NGVjYVx1NTZmMFx1NTc2NFx1NThiZVx1NWE1YVx1NjA2OFx1NjFjN1x1''@;'; put 'put ''NjYwZlx1NjYwNlx1NjgzOVx1NjhiMVx1NmRmN1x1NzVkNVx1N2QzYVx1ODI2ZVx1OWI0Mlx1NGU5Ylx1NGY1MFx1NTNjOVx1NTUwNlx1NWQ2Zlx1NWRlNlx1NWRlZVx1NjdmYlx1NmM5OVx1NzQ3M1x1NzgwMlx1OGE1MFx1OTM5Nlx1ODhkZlx1NTc1MFx1NWVhN1x1NjMyYlx1NTBiNVx1NTBh''@;'; put 'put ''Y1x1NTE4ZFx1NjcwMFx1NTRjOVx1NTg1ZVx1NTliYlx1NWJiMFx1NWY2OVx1NjI0ZFx1NjNhMVx1NjgzZFx1NmI3M1x1NmUwOFx1NzA3ZFx1OTFjN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2ZFx1NjU4ZVx1N2QzMFx1ODNkY1x1ODhjMVx1OGYwOVx1OTY5Ylx1NTI2NFx1NTcyOFx1Njc1MFx1''@;'; put 'put ''N2Y2YVx1OGNhMVx1NTFiNFx1NTc0Mlx1OTYyYVx1NTgzYVx1Njk4YVx1ODBiNFx1NTRiMlx1NWQwZVx1NTdmY1x1Nzg5NVx1OWRmYVx1NGY1Y1x1NTI0YVx1NTQ4Ylx1NjQzZVx1NjYyOFx1NjcxNFx1NjdmNVx1N2E4NFx1N2I1Nlx1N2QyMlx1OTMyZlx1Njg1Y1x1OWJhZFx1N2IzOVx1NTMx''@;'; put 'put ''OVx1NTE4YVx1NTIzNyJdLFsiYmJhMSIsIlx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1''@;'; put 'put ''NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0''@;'; put 'put ''ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1''@;'; put 'put ''OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1NWJmYVx1NjE0OFx1NjMwMVx1NjY0MiJdLFsiYmNhMSIsIlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAz''@;'; put 'put ''M1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNmMVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1''@;'; put 'put ''NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFj''@;'; put 'put ''OFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2EyZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1''@;'; put 'put ''NTNjZVx1NTQ2OCJdLFsiYmRhMSIsIlx1NWI5N1x1NWMzMVx1NWRkZVx1NGZlZVx1NjEwMVx1NjJmZVx1NmQzMlx1NzljMFx1NzljYlx1N2Q0Mlx1N2U0ZFx1N2ZkMlx1ODFlZFx1ODIxZlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OGI5MFx1OGU3NFx1OGYyZlx1OTAzMVx1OTE0Ylx1OTE2Y1x1OTZj''@;'; put 'put ''Nlx1OTE5Y1x1NGVjMFx1NGY0Zlx1NTE0NVx1NTM0MVx1NWY5M1x1NjIwZVx1NjdkNFx1NmM0MVx1NmUwYlx1NzM2M1x1N2UyNlx1OTFjZFx1OTI4M1x1NTNkNFx1NTkxOVx1NWJiZlx1NmRkMVx1Nzk1ZFx1N2UyZVx1N2M5Ylx1NTg3ZVx1NzE5Zlx1NTFmYVx1ODg1M1x1OGZmMFx1NGZjYVx1''@;'; put 'put ''NWNmYlx1NjYyNVx1NzdhY1x1N2FlM1x1ODIxY1x1OTlmZlx1NTFjNlx1NWZhYVx1NjVlY1x1Njk2Zlx1NmI4OVx1NmRmM1x1NmU5Nlx1NmY2NFx1NzZmZVx1N2QxNFx1NWRlMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFlNlx1NTIxZFx1NjI0MFx1NjY5MVx1NjZkOVx1NmUxYVx1NWViNlx1N2Rk''@;'; put 'put ''Mlx1N2Y3Mlx1NjZmOFx1ODVhZlx1ODVmN1x1OGFmOFx1NTJhOVx1NTNkOVx1NTk3M1x1NWU4Zlx1NWY5MFx1NjA1NVx1OTJlNFx1OTY2NFx1NTBiN1x1NTExZiJdLFsiYmVhMSIsIlx1NTJkZFx1NTMyMFx1NTM0N1x1NTNlY1x1NTRlOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTliZVx1''@;'; put 'put ''NWEzY1x1NWJiNVx1NWMwNlx1NWMwZlx1NWMxMVx1NWMxYVx1NWU4NFx1NWU4YVx1NWVlMFx1NWY3MFx1NjI3Zlx1NjI4NFx1NjJkYlx1NjM4Y1x1NjM3N1x1NjYwN1x1NjYwY1x1NjYyZFx1NjY3Nlx1Njc3ZVx1NjhhMlx1NmExZlx1NmEzNVx1NmNiY1x1NmQ4OFx1NmUwOVx1NmU1OFx1NzEz''@;'; put 'put ''Y1x1NzEyNlx1NzE2N1x1NzVjN1x1NzcwMVx1Nzg1ZFx1NzkwMVx1Nzk2NVx1NzlmMFx1N2FlMFx1N2IxMVx1N2NhN1x1N2QzOVx1ODA5Nlx1ODNkNlx1ODQ4Ylx1ODU0OVx1ODg1ZFx1ODhmM1x1OGExZlx1OGEzY1x1OGE1NFx1OGE3M1x1OGM2MVx1OGNkZVx1OTFhNFx1OTI2Nlx1OTM3ZVx1''@;'; put 'put ''OTQxOFx1OTY5Y1x1OTc5OFx1NGUwYVx1NGUwOFx1NGUxZVx1NGU1N1x1NTE5N1x1NTI3MFx1NTdjZVx1NTgzNFx1NThjY1x1NWIyMlx1NWUzOFx1NjBjNVx1NjRmZVx1Njc2MVx1Njc1Nlx1NmQ0NFx1NzJiNlx1NzU3M1x1N2E2M1x1ODRiOFx1OGI3Mlx1OTFiOFx1OTMyMFx1NTYzMVx1NTdm''@;'; put 'put ''NFx1OThmZSJdLFsiYmZhMSIsIlx1NjJlZFx1NjkwZFx1NmI5Nlx1NzFlZFx1N2U1NFx1ODA3N1x1ODI3Mlx1ODllNlx1OThkZlx1ODc1NVx1OGZiMVx1NWMzYlx1NGYzOFx1NGZlMVx1NGZiNVx1NTUwN1x1NWEyMFx1NWJkZFx1NWJlOVx1NWZjM1x1NjE0ZVx1NjMyZlx1NjViMFx1NjY0Ylx1''@;'; put 'put ''NjhlZVx1Njk5Ylx1NmQ3OFx1NmRmMVx1NzUzM1x1NzViOVx1NzcxZlx1Nzk1ZVx1NzllNlx1N2QzM1x1ODFlM1x1ODJhZlx1ODVhYVx1ODlhYVx1OGEzYVx1OGVhYlx1OGY5Ylx1OTAzMlx1OTFkZFx1OTcwN1x1NGViYVx1NGVjMVx1NTIwM1x1NTg3NVx1NThlY1x1NWMwYlx1NzUxYVx1NWMz''@;'; put 'put ''ZFx1ODE0ZVx1OGEwYVx1OGZjNVx1OTY2M1x1OTc2ZFx1N2IyNVx1OGFjZlx1OTgwOFx1OTE2Mlx1NTZmM1x1NTNhOFx1OTAxN1x1NTQzOVx1NTc4Mlx1NWUyNVx1NjNhOFx1NmMzNFx1NzA4YVx1Nzc2MVx1N2M4Ylx1N2ZlMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Zlx1''@;'; put 'put ''NzQ1ZVx1OWFjNFx1NWQwN1x1NWQ2OVx1NjU3MFx1NjdhMlx1OGRhOFx1OTZkYlx1NjM2ZVx1Njc0OVx1NjkxOVx1ODNjNVx1OTgxN1x1OTZjMFx1ODhmZSJdLFsiYzBhMSIsIlx1NmY4NFx1NjQ3YVx1NWJmOFx1NGUxNlx1NzAyY1x1NzU1ZFx1NjYyZlx1NTFjNFx1NTIzNlx1NTJlMlx1NTlk''@;'; put 'put ''M1x1NWY4MVx1NjAyN1x1NjIxMFx1NjUzZlx1NjU3NFx1NjYxZlx1NjY3NFx1NjhmMlx1NjgxNlx1NmI2M1x1NmUwNVx1NzI3Mlx1NzUxZlx1NzZkYlx1N2NiZVx1ODA1Nlx1NThmMFx1ODhmZFx1ODk3Zlx1OGFhMFx1OGE5M1x1OGFjYlx1OTAxZFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1''@;'; put 'put ''N2EwZVx1ODEwNlx1OTZiYlx1NWUyZFx1NjBkY1x1NjIxYVx1NjVhNVx1NjYxNFx1Njc5MFx1NzdmM1x1N2E0ZFx1N2M0ZFx1N2UzZVx1ODEwYVx1OGNhY1x1OGQ2NFx1OGRlMVx1OGU1Zlx1NzhhOVx1NTIwN1x1NjJkOVx1NjNhNVx1NjQ0Mlx1NjI5OFx1OGEyZFx1N2E4M1x1N2JjMFx1OGFh''@;'; put 'put ''Y1x1OTZlYVx1N2Q3Nlx1ODIwY1x1ODc0OVx1NGVkOVx1NTE0OFx1NTM0M1x1NTM2MFx1NWJhM1x1NWMwMlx1NWMxNlx1NWRkZFx1NjIyNlx1NjI0N1x1NjRiMFx1NjgxM1x1NjgzNFx1NmNjOVx1NmQ0NVx1NmQxN1x1NjdkM1x1NmY1Y1x1NzE0ZVx1NzE3ZFx1NjVjYlx1N2E3Zlx1N2JhZFx1''@;'; put 'put ''N2RkYSJdLFsiYzFhMSIsIlx1N2U0YVx1N2ZhOFx1ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0''@;'; put 'put ''Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZmZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1''@;'; put 'put ''NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0''@;'; put 'put ''OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVmYlx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZSJdLFsiYzJhMSIsIlx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1''@;'; put 'put ''NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1''@;'; put 'put ''M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEyOFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1''@;'; put 'put ''OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNl''@;'; put 'put ''YSJdLFsiYzNhMSIsIlx1NTNlOVx1NGY0Nlx1OTA1NFx1OGZiMFx1NTk2YVx1ODEzMVx1NWRmZFx1N2FlYVx1OGZiZlx1NjhkYVx1OGMzN1x1NzJmOFx1OWM0OFx1NmEzZFx1OGFiMFx1NGUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJjNVx1NjNhMlx1NjVlNlx1NmI0ZVx1NmRlMVx1NmU1Ylx1''@;'; put 'put ''NzBhZFx1NzdlZFx1N2FlZlx1N2JhYVx1N2RiYlx1ODAzZFx1ODBjNlx1ODZjYlx1OGE5NVx1OTM1Ylx1NTZlM1x1NThjN1x1NWYzZVx1NjVhZFx1NjY5Nlx1NmE4MFx1NmJiNVx1NzUzN1x1OGFjN1x1NTAyNFx1NzdlNVx1NTczMFx1NWYxYlx1NjA2NVx1NjY3YVx1NmM2MFx1NzVmNFx1N2Ex''@;'; put 'put ''YVx1N2Y2ZVx1ODFmNFx1ODcxOFx1OTA0NVx1OTliM1x1N2JjOVx1NzU1Y1x1N2FmOVx1N2I1MVx1ODRjNFx1OTAxMFx1NzllOVx1N2E5Mlx1ODMzNlx1NWFlMVx1Nzc0MFx1NGUyZFx1NGVmMlx1NWI5OVx1NWZlMFx1NjJiZFx1NjYzY1x1NjdmMVx1NmNlOFx1ODY2Ylx1ODg3N1x1OGEzYlx1''@;'; put 'put ''OTE0ZVx1OTJmM1x1OTlkMFx1NmExN1x1NzAyNlx1NzMyYVx1ODJlN1x1ODQ1N1x1OGNhZlx1NGUwMVx1NTE0Nlx1NTFjYlx1NTU4Ylx1NWJmNSJdLFsiYzRhMSIsIlx1NWUxNlx1NWUzM1x1NWU4MVx1NWYxNFx1NWYzNVx1NWY2Ylx1NWZiNFx1NjFmMlx1NjMxMVx1NjZhMlx1NjcxZFx1NmY2''@;'; put 'put ''ZVx1NzI1Mlx1NzUzYVx1NzczYVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OGFiZlx1OGFkY1x1OGQ4NVx1OGRmM1x1OTI5YVx1OTU3N1x1OTgwMlx1OWNlNVx1NTJjNVx1NjM1N1x1NzZmNFx1NjcxNVx1NmM4OFx1NzNjZFx1OGNjM1x1OTNhZVx1OTY3M1x1NmQyNVx1NTg5Y1x1NjkwZVx1''@;'; put 'put ''NjljY1x1OGZmZFx1OTM5YVx1NzVkYlx1OTAxYVx1NTg1YVx1NjgwMlx1NjNiNFx1NjlmYlx1NGY0M1x1NmYyY1x1NjdkOFx1OGZiYlx1ODUyNlx1N2RiNFx1OTM1NFx1NjkzZlx1NmY3MFx1NTc2YVx1NThmN1x1NWIyY1x1N2QyY1x1NzIyYVx1NTQwYVx1OTFlM1x1OWRiNFx1NGVhZFx1NGY0''@;'; put 'put ''ZVx1NTA1Y1x1NTA3NVx1NTI0M1x1OGM5ZVx1NTQ0OFx1NTgyNFx1NWI5YVx1NWUxZFx1NWU5NVx1NWVhZFx1NWVmN1x1NWYxZlx1NjA4Y1x1NjJiNVx1NjMzYVx1NjNkMFx1NjhhZlx1NmM0MFx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2RlMFx1ODI0N1x1OGEwMlx1OGFlNlx1OGU0NFx1OTAxMyJd''@;'; put 'put ''LFsiYzVhMSIsIlx1OTBiOFx1OTEyZFx1OTFkOFx1OWYwZVx1NmNlNVx1NjQ1OFx1NjRlMlx1NjU3NVx1NmVmNFx1NzY4NFx1N2IxYlx1OTA2OVx1OTNkMVx1NmViYVx1NTRmMlx1NWZiOVx1NjRhNFx1OGY0ZFx1OGZlZFx1OTI0NFx1NTE3OFx1NTg2Ylx1NTkyOVx1NWM1NVx1NWU5N1x1NmRm''@;'; put 'put ''Ylx1N2U4Zlx1NzUxY1x1OGNiY1x1OGVlMlx1OTg1Ylx1NzBiOVx1NGYxZFx1NmJiZlx1NmZiMVx1NzUzMFx1OTZmYlx1NTE0ZVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlhY1x1NWM2MFx1NWY5Mlx1NjU5N1x1Njc1Y1x1NmUyMVx1NzY3Ylx1ODNkZlx1OGNlZFx1OTAxNFx1OTBmZFx1OTM0ZFx1''@;'; put 'put ''NzgyNVx1NzgzYVx1NTJhYVx1NWVhNlx1NTcxZlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1YVx1NTFhY1x1NTFjZFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NWI5NVx1NWNmNlx1NWQ4Ylx1NjBiY1x1NjI5NVx1NjQyZFx1Njc3MVx1Njg0M1x1NjhiY1x1NjhkZlx1NzZkN1x1NmRk''@;'; put 'put ''OFx1NmU2Zlx1NmQ5Ylx1NzA2Zlx1NzFjOFx1NWY1M1x1NzVkOFx1Nzk3N1x1N2I0OVx1N2I1NFx1N2I1Mlx1N2NkNlx1N2Q3MVx1NTIzMCJdLFsiYzZhMSIsIlx1ODQ2M1x1ODU2OVx1ODVlNFx1OGEwZVx1OGIwNFx1OGM0Nlx1OGUwZlx1OTAwM1x1OTAwZlx1OTQxOVx1OTY3Nlx1OTgyZFx1''@;'; put 'put ''OWEzMFx1OTVkOFx1NTBjZFx1NTJkNVx1NTQwY1x1NTgwMlx1NWMwZVx1NjFhN1x1NjQ5ZVx1NmQxZVx1NzdiM1x1N2FlNVx1ODBmNFx1ODQwNFx1OTA1M1x1OTI4NVx1NWNlMFx1OWQwN1x1NTMzZlx1NWY5N1x1NWZiM1x1NmQ5Y1x1NzI3OVx1Nzc2M1x1NzliZlx1N2JlNFx1NmJkMlx1NzJl''@;'; put 'put ''Y1x1OGFhZFx1NjgwM1x1NmE2MVx1NTFmOFx1N2E4MVx1NjkzNFx1NWM0YVx1OWNmNlx1ODJlYlx1NWJjNVx1OTE0OVx1NzAxZVx1NTY3OFx1NWM2Zlx1NjBjN1x1NjU2Nlx1NmM4Y1x1OGM1YVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZjN1x1OTIwZFx1NTk0OFx1OTBhM1x1NTE4NVx1NGU0ZFx1''@;'; put 'put ''NTFlYVx1ODU5OVx1OGIwZVx1NzA1OFx1NjM3YVx1OTM0Ylx1Njk2Mlx1OTliNFx1N2UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OGVkZlx1OTZlM1x1NmM1ZFx1NGU4Y1x1NWMzY1x1NWYxMFx1OGZlOVx1NTMwMlx1OGNkMVx1ODA4OVx1ODY3OVx1NWVmZlx1NjVlNVx1NGU3M1x1NTE2NSJdLFsi''@;'; put 'put ''YzdhMSIsIlx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1NTdkY1x1NTZhMlx1NjBhOVx1''@;'; put 'put ''NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5Mlx1NjU1N1x1Njc2Zlx1NzZj''@;'; put 'put ''M1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1''@;'; put 'put ''NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNiJdLFsiYzhhMSIsIlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2MFx1NTE2Ylx1OTI2''@;'; put 'put ''Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1NzI0OFx1NzJhZlx1''@;'; put 'put ''NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0OVx1NjI3OVx1NjJh''@;'; put 'put ''Ylx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1N2Y4ZSJdLFsiYzlh''@;'; put 'put ''MSIsIlx1OWYzYlx1NjdjYVx1N2ExN1x1NTMzOVx1NzU4Ylx1OWFlZFx1NWY2Nlx1ODE5ZFx1ODNmMVx1ODA5OFx1NWYzY1x1NWZjNVx1NzU2Mlx1N2I0Nlx1OTAzY1x1Njg2N1x1NTllYlx1NWE5Ylx1N2QxMFx1NzY3ZVx1OGIyY1x1NGZmNVx1NWY2YVx1NmExOVx1NmMzN1x1NmYwMlx1NzRl''@;'; put 'put ''Mlx1Nzk2OFx1ODg2OFx1OGE1NVx1OGM3OVx1NWVkZlx1NjNjZlx1NzVjNVx1NzlkMlx1ODJkN1x1OTMyOFx1OTJmMlx1ODQ5Y1x1ODZlZFx1OWMyZFx1NTRjMVx1NWY2Y1x1NjU4Y1x1NmQ1Y1x1NzAxNVx1OGNhN1x1OGNkM1x1OTgzYlx1NjU0Zlx1NzRmNlx1NGUwZFx1NGVkOFx1NTdlMFx1''@;'; put 'put ''NTkyYlx1NWE2Nlx1NWJjY1x1NTFhOFx1NWUwM1x1NWU5Y1x1NjAxNlx1NjI3Nlx1NjU3N1x1NjVhN1x1NjY2ZVx1NmQ2ZVx1NzIzNlx1N2IyNlx1ODE1MFx1ODE5YVx1ODI5OVx1OGI1Y1x1OGNhMFx1OGNlNlx1OGQ3NFx1OTYxY1x1OTY0NFx1NGZhZVx1NjRhYlx1NmI2Nlx1ODIxZVx1ODQ2''@;'; put 'put ''MVx1ODU2YVx1OTBlOFx1NWMwMVx1Njk1M1x1OThhOFx1ODQ3YVx1ODU1N1x1NGYwZlx1NTI2Zlx1NWZhOVx1NWU0NVx1NjcwZCJdLFsiY2FhMSIsIlx1Nzk4Zlx1ODE3OVx1ODkwN1x1ODk4Nlx1NmRmNVx1NWYxN1x1NjI1NVx1NmNiOFx1NGVjZlx1NzI2OVx1OWI5Mlx1NTIwNlx1NTQzYlx1''@;'; put 'put ''NTY3NFx1NThiM1x1NjFhNFx1NjI2ZVx1NzExYVx1NTk2ZVx1N2M4OVx1N2NkZVx1N2QxYlx1OTZmMFx1NjU4N1x1ODA1ZVx1NGUxOVx1NGY3NVx1NTE3NVx1NTg0MFx1NWU2M1x1NWU3M1x1NWYwYVx1NjdjNFx1NGUyNlx1ODUzZFx1OTU4OVx1OTY1Ylx1N2M3M1x1OTgwMVx1NTBmYlx1NThj''@;'; put 'put ''MVx1NzY1Nlx1NzhhN1x1NTIyNVx1NzdhNVx1ODUxMVx1N2I4Nlx1NTA0Zlx1NTkwOVx1NzI0N1x1N2JjN1x1N2RlOFx1OGZiYVx1OGZkNFx1OTA0ZFx1NGZiZlx1NTJjOVx1NWEyOVx1NWYwMVx1OTdhZFx1NGZkZFx1ODIxN1x1OTJlYVx1NTcwM1x1NjM1NVx1NmI2OVx1NzUyYlx1ODhkY1x1''@;'; put 'put ''OGYxNFx1N2E0Mlx1NTJkZlx1NTg5M1x1NjE1NVx1NjIwYVx1NjZhZVx1NmJjZFx1N2MzZlx1ODNlOVx1NTAyM1x1NGZmOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NWI5ZFx1NWNmMFx1NWNlZlx1NWQyOVx1NWU5Nlx1NjJiMVx1NjM2N1x1NjUzZVx1NjViOVx1NjcwYiJdLFsiY2JhMSIs''@;'; put 'put ''Ilx1NmNkNVx1NmNlMVx1NzBmOVx1NzgzMlx1N2UyYlx1ODBkZVx1ODJiM1x1ODQwY1x1ODRlY1x1ODcwMlx1ODkxMlx1OGEyYVx1OGM0YVx1OTBhNlx1OTJkMlx1OThmZFx1OWNmM1x1OWQ2Y1x1NGU0Zlx1NGVhMVx1NTA4ZFx1NTI1Nlx1NTc0YVx1NTlhOFx1NWUzZFx1NWZkOFx1NWZkOVx1''@;'; put 'put ''NjIzZlx1NjZiNFx1NjcxYlx1NjdkMFx1NjhkMlx1NTE5Mlx1N2QyMVx1ODBhYVx1ODFhOFx1OGIwMFx1OGM4Y1x1OGNiZlx1OTI3ZVx1OTYzMlx1NTQyMFx1OTgyY1x1NTMxN1x1NTBkNVx1NTM1Y1x1NThhOFx1NjRiMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N2E0Nlx1OTFlNlx1NTJjM1x1NmNh''@;'; put 'put ''MVx1NmI4Nlx1NTgwMFx1NWU0Y1x1NTk1NFx1NjcyY1x1N2ZmYlx1NTFlMVx1NzZjNlx1NjQ2OVx1NzhlOFx1OWI1NFx1OWViYlx1NTdjYlx1NTliOVx1NjYyN1x1Njc5YVx1NmJjZVx1NTRlOVx1NjlkOVx1NWU1NVx1ODE5Y1x1Njc5NVx1OWJhYVx1NjdmZVx1OWM1Mlx1Njg1ZFx1NGVhNlx1''@;'; put 'put ''NGZlM1x1NTNjOFx1NjJiOVx1NjcyYlx1NmNhYlx1OGZjNFx1NGZhZFx1N2U2ZFx1OWViZlx1NGUwN1x1NjE2Mlx1NmU4MCJdLFsiY2NhMSIsIlx1NmYyYlx1ODUxM1x1NTQ3M1x1NjcyYVx1OWI0NVx1NWRmM1x1N2I5NVx1NWNhY1x1NWJjNlx1ODcxY1x1NmU0YVx1ODRkMVx1N2ExNFx1ODEw''@;'; put 'put ''OFx1NTk5OVx1N2M4ZFx1NmMxMVx1NzcyMFx1NTJkOVx1NTkyMlx1NzEyMVx1NzI1Zlx1NzdkYlx1OTcyN1x1OWQ2MVx1NjkwYlx1NWE3Zlx1NWExOFx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NzZkZlx1OGZmN1x1OTI5OFx1OWNmNFx1NTllYVx1NzI1ZFx1NmVjNVx1NTE0ZFx1NjhjOVx1''@;'; put 'put ''N2RiZlx1N2RlY1x1OTc2Mlx1OWViYVx1NjQ3OFx1NmEyMVx1ODMwMlx1NTk4NFx1NWI1Zlx1NmJkYlx1NzMxYlx1NzZmMlx1N2RiMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OWVkOVx1NzZlZVx1Njc2Mlx1NTJmZlx1OTkwNVx1NWMyNFx1NjIzYlx1N2M3ZVx1OGNiMFx1NTU0Zlx1NjBi''@;'; put 'put ''Nlx1N2QwYlx1OTU4MFx1NTMwMVx1NGU1Zlx1NTFiNlx1NTkxY1x1NzIzYVx1ODAzNlx1OTFjZVx1NWYyNVx1NzdlMlx1NTM4NFx1NWY3OVx1N2QwNFx1ODVhY1x1OGEzM1x1OGU4ZFx1OTc1Nlx1NjdmM1x1ODVhZVx1OTQ1M1x1NjEwOVx1NjEwOFx1NmNiOVx1NzY1MiJdLFsiY2RhMSIsIlx1''@;'; put 'put ''OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkx''@;'; put 'put ''NVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1''@;'; put 'put ''OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhmOFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIw''@;'; put 'put ''NFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4MyJdLFsiY2VhMSIsIlx1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1''@;'; put 'put ''NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJlZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFk''@;'; put 'put ''Mlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1''@;'; put 'put ''NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVjOVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2ZiJdLFsiY2ZhMSIsIlx1ODRl''@;'; put 'put ''ZVx1OTAyM1x1OTMyY1x1NTQ0Mlx1OWI2Zlx1NmFkM1x1NzA4OVx1OGNjMlx1OGRlZlx1OTczMlx1NTJiNFx1NWE0MVx1NWVjYVx1NWYwNFx1NjcxN1x1Njk3Y1x1Njk5NFx1NmQ2YVx1NmYwZlx1NzI2Mlx1NzJmY1x1N2JlZFx1ODAwMVx1ODA3ZVx1ODc0Ylx1OTBjZVx1NTE2ZFx1OWU5M1x1''@;'; put 'put ''Nzk4NFx1ODA4Ylx1OTMzMlx1OGFkNlx1NTAyZFx1NTQ4Y1x1OGE3MVx1NmI2YVx1OGNjNFx1ODEwN1x1NjBkMVx1NjdhMFx1OWRmMlx1NGU5OVx1NGU5OFx1OWMxMFx1OGE2Ylx1ODVjMVx1ODU2OFx1NjkwMFx1NmU3ZVx1Nzg5N1x1ODE1NSJdLFsiZDBhMSIsIlx1NWYwY1x1NGUxMFx1NGUx''@;'; put 'put ''NVx1NGUyYVx1NGUzMVx1NGUzNlx1NGUzY1x1NGUzZlx1NGU0Mlx1NGU1Nlx1NGU1OFx1NGU4Mlx1NGU4NVx1OGM2Ylx1NGU4YVx1ODIxMlx1NWYwZFx1NGU4ZVx1NGU5ZVx1NGU5Zlx1NGVhMFx1NGVhMlx1NGViMFx1NGViM1x1NGViNlx1NGVjZVx1NGVjZFx1NGVjNFx1NGVjNlx1NGVjMlx1''@;'; put 'put ''NGVkN1x1NGVkZVx1NGVlZFx1NGVkZlx1NGVmN1x1NGYwOVx1NGY1YVx1NGYzMFx1NGY1Ylx1NGY1ZFx1NGY1N1x1NGY0N1x1NGY3Nlx1NGY4OFx1NGY4Zlx1NGY5OFx1NGY3Ylx1NGY2OVx1NGY3MFx1NGY5MVx1NGY2Zlx1NGY4Nlx1NGY5Nlx1NTExOFx1NGZkNFx1NGZkZlx1NGZjZVx1NGZk''@;'; put 'put ''OFx1NGZkYlx1NGZkMVx1NGZkYVx1NGZkMFx1NGZlNFx1NGZlNVx1NTAxYVx1NTAyOFx1NTAxNFx1NTAyYVx1NTAyNVx1NTAwNVx1NGYxY1x1NGZmNlx1NTAyMVx1NTAyOVx1NTAyY1x1NGZmZVx1NGZlZlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1''@;'; put 'put ''NTA1YVx1NTA1Nlx1NTA2Y1x1NTA3OFx1NTA4MFx1NTA5YVx1NTA4NVx1NTBiNFx1NTBiMiJdLFsiZDFhMSIsIlx1NTBjOVx1NTBjYVx1NTBiM1x1NTBjMlx1NTBkNlx1NTBkZVx1NTBlNVx1NTBlZFx1NTBlM1x1NTBlZVx1NTBmOVx1NTBmNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTEx''@;'; put 'put ''NVx1NTExNFx1NTExYVx1NTEyMVx1NTEzYVx1NTEzN1x1NTEzY1x1NTEzYlx1NTEzZlx1NTE0MFx1NTE1Mlx1NTE0Y1x1NTE1NFx1NTE2Mlx1N2FmOFx1NTE2OVx1NTE2YVx1NTE2ZVx1NTE4MFx1NTE4Mlx1NTZkOFx1NTE4Y1x1NTE4OVx1NTE4Zlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1''@;'; put 'put ''NTFhNFx1NTFhNlx1NTFhMlx1NTFhOVx1NTFhYVx1NTFhYlx1NTFiM1x1NTFiMVx1NTFiMlx1NTFiMFx1NTFiNVx1NTFiZFx1NTFjNVx1NTFjOVx1NTFkYlx1NTFlMFx1ODY1NVx1NTFlOVx1NTFlZFx1NTFmMFx1NTFmNVx1NTFmZVx1NTIwNFx1NTIwYlx1NTIxNFx1NTIwZVx1NTIyN1x1NTIy''@;'; put 'put ''YVx1NTIyZVx1NTIzM1x1NTIzOVx1NTI0Zlx1NTI0NFx1NTI0Ylx1NTI0Y1x1NTI1ZVx1NTI1NFx1NTI2YVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Zlx1NTI3ZFx1NTI4ZFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OGZhOCJdLFsiZDJhMSIsIlx1OGZhN1x1NTJhY1x1NTJhZFx1''@;'; put 'put ''NTJiY1x1NTJiNVx1NTJjMVx1NTJjZFx1NTJkN1x1NTJkZVx1NTJlM1x1NTJlNlx1OThlZFx1NTJlMFx1NTJmM1x1NTJmNVx1NTJmOFx1NTJmOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwZFx1NTMxMFx1NTMwZlx1NTMxNVx1NTMxYVx1NTMyM1x1NTMyZlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0''@;'; put 'put ''MFx1NTM0Nlx1NTM0NVx1NGUxN1x1NTM0OVx1NTM0ZFx1NTFkNlx1NTM1ZVx1NTM2OVx1NTM2ZVx1NTkxOFx1NTM3Ylx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNhMFx1NTNhNlx1NTNhNVx1NTNhZVx1NTNiMFx1NTNiNlx1NTNjM1x1N2MxMlx1OTZkOVx1NTNkZlx1NjZmY1x1NzFlZVx1NTNlZVx1''@;'; put 'put ''NTNlOFx1NTNlZFx1NTNmYVx1NTQwMVx1NTQzZFx1NTQ0MFx1NTQyY1x1NTQyZFx1NTQzY1x1NTQyZVx1NTQzNlx1NTQyOVx1NTQxZFx1NTQ0ZVx1NTQ4Zlx1NTQ3NVx1NTQ4ZVx1NTQ1Zlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Ylx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4''@;'; put 'put ''Nlx1NTRjN1x1NTRhMlx1NTRiOFx1NTRhNVx1NTRhY1x1NTRjNFx1NTRjOFx1NTRhOCJdLFsiZDNhMSIsIlx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1''@;'; put 'put ''NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVk''@;'; put 'put ''Zlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1NTY2Ylx1NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1''@;'; put 'put ''NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZmZlx1NTcwNFx1NTcwOSJdLFsiZDRhMSIsIlx1NTcwOFx1NTcwYlx1NTcwZFx1NTcx''@;'; put 'put ''M1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1''@;'; put 'put ''NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThkZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThk''@;'; put 'put ''MVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1''@;'; put 'put ''NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OSJdLFsiZDVhMSIsIlx1NTk3OFx1NTk4MVx1NTk5ZFx1NGY1ZVx1NGZhYlx1NTlhM1x1NTliMlx1NTljNlx1NTllOFx1NTlkY1x1NTk4ZFx1NTlkOVx1NTlkYVx1NWEyNVx1NWExZlx1NWExMVx1NWExY1x1NWEw''@;'; put 'put ''OVx1NWExYVx1NWE0MFx1NWE2Y1x1NWE0OVx1NWEzNVx1NWEzNlx1NWE2Mlx1NWE2YVx1NWE5YVx1NWFiY1x1NWFiZVx1NWFjYlx1NWFjMlx1NWFiZFx1NWFlM1x1NWFkN1x1NWFlNlx1NWFlOVx1NWFkNlx1NWFmYVx1NWFmYlx1NWIwY1x1NWIwYlx1NWIxNlx1NWIzMlx1NWFkMFx1NWIyYVx1''@;'; put 'put ''NWIzNlx1NWIzZVx1NWI0M1x1NWI0NVx1NWI0MFx1NWI1MVx1NWI1NVx1NWI1YVx1NWI1Ylx1NWI2NVx1NWI2OVx1NWI3MFx1NWI3M1x1NWI3NVx1NWI3OFx1NjU4OFx1NWI3YVx1NWI4MFx1NWI4M1x1NWJhNlx1NWJiOFx1NWJjM1x1NWJjN1x1NWJjOVx1NWJkNFx1NWJkMFx1NWJlNFx1NWJl''@;'; put 'put ''Nlx1NWJlMlx1NWJkZVx1NWJlNVx1NWJlYlx1NWJmMFx1NWJmNlx1NWJmM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwZFx1NWMxM1x1NWMyMFx1NWMyMlx1NWMyOFx1NWMzOFx1NWMzOVx1NWM0MVx1NWM0Nlx1NWM0ZVx1NWM1MyJdLFsiZDZhMSIsIlx1NWM1MFx1NWM0Zlx1NWI3MVx1NWM2Y1x1''@;'; put 'put ''NWM2ZVx1NGU2Mlx1NWM3Nlx1NWM3OVx1NWM4Y1x1NWM5MVx1NWM5NFx1NTk5Ylx1NWNhYlx1NWNiYlx1NWNiNlx1NWNiY1x1NWNiN1x1NWNjNVx1NWNiZVx1NWNjN1x1NWNkOVx1NWNlOVx1NWNmZFx1NWNmYVx1NWNlZFx1NWQ4Y1x1NWNlYVx1NWQwYlx1NWQxNVx1NWQxN1x1NWQ1Y1x1NWQx''@;'; put 'put ''Zlx1NWQxYlx1NWQxMVx1NWQxNFx1NWQyMlx1NWQxYVx1NWQxOVx1NWQxOFx1NWQ0Y1x1NWQ1Mlx1NWQ0ZVx1NWQ0Ylx1NWQ2Y1x1NWQ3M1x1NWQ3Nlx1NWQ4N1x1NWQ4NFx1NWQ4Mlx1NWRhMlx1NWQ5ZFx1NWRhY1x1NWRhZVx1NWRiZFx1NWQ5MFx1NWRiN1x1NWRiY1x1NWRjOVx1NWRjZFx1''@;'; put 'put ''NWRkM1x1NWRkMlx1NWRkNlx1NWRkYlx1NWRlYlx1NWRmMlx1NWRmNVx1NWUwYlx1NWUxYVx1NWUxOVx1NWUxMVx1NWUxYlx1NWUzNlx1NWUzN1x1NWU0NFx1NWU0M1x1NWU0MFx1NWU0ZVx1NWU1N1x1NWU1NFx1NWU1Zlx1NWU2Mlx1NWU2NFx1NWU0N1x1NWU3NVx1NWU3Nlx1NWU3YVx1OWVi''@;'; put 'put ''Y1x1NWU3Zlx1NWVhMFx1NWVjMVx1NWVjMlx1NWVjOFx1NWVkMFx1NWVjZiJdLFsiZDdhMSIsIlx1NWVkNlx1NWVlM1x1NWVkZFx1NWVkYVx1NWVkYlx1NWVlMlx1NWVlMVx1NWVlOFx1NWVlOVx1NWVlY1x1NWVmMVx1NWVmM1x1NWVmMFx1NWVmNFx1NWVmOFx1NWVmZVx1NWYwM1x1NWYwOVx1''@;'; put 'put ''NWY1ZFx1NWY1Y1x1NWYwYlx1NWYxMVx1NWYxNlx1NWYyOVx1NWYyZFx1NWYzOFx1NWY0MVx1NWY0OFx1NWY0Y1x1NWY0ZVx1NWYyZlx1NWY1MVx1NWY1Nlx1NWY1N1x1NWY1OVx1NWY2MVx1NWY2ZFx1NWY3M1x1NWY3N1x1NWY4M1x1NWY4Mlx1NWY3Zlx1NWY4YVx1NWY4OFx1NWY5MVx1NWY4''@;'; put 'put ''N1x1NWY5ZVx1NWY5OVx1NWY5OFx1NWZhMFx1NWZhOFx1NWZhZFx1NWZiY1x1NWZkNlx1NWZmYlx1NWZlNFx1NWZmOFx1NWZmMVx1NWZkZFx1NjBiM1x1NWZmZlx1NjAyMVx1NjA2MFx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwZVx1NjAzMVx1NjAxYlx1NjAxNVx1NjAyYlx1NjAyNlx1NjAwZlx1''@;'; put 'put ''NjAzYVx1NjA1YVx1NjA0MVx1NjA2YVx1NjA3N1x1NjA1Zlx1NjA0YVx1NjA0Nlx1NjA0ZFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Y1x1NjA2Ylx1NjA1OVx1NjA4MVx1NjA4ZFx1NjBlN1x1NjA4M1x1NjA5YSJdLFsiZDhhMSIsIlx1NjA4NFx1NjA5Ylx1NjA5Nlx1NjA5N1x1NjA5''@;'; put 'put ''Mlx1NjBhN1x1NjA4Ylx1NjBlMVx1NjBiOFx1NjBlMFx1NjBkM1x1NjBiNFx1NWZmMFx1NjBiZFx1NjBjNlx1NjBiNVx1NjBkOFx1NjE0ZFx1NjExNVx1NjEwNlx1NjBmNlx1NjBmN1x1NjEwMFx1NjBmNFx1NjBmYVx1NjEwM1x1NjEyMVx1NjBmYlx1NjBmMVx1NjEwZFx1NjEwZVx1NjE0N1x1''@;'; put 'put ''NjEzZVx1NjEyOFx1NjEyN1x1NjE0YVx1NjEzZlx1NjEzY1x1NjEyY1x1NjEzNFx1NjEzZFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE2Ylx1NjE3NFx1NjE2Zlx1NjE2NVx1NjE3MVx1NjE1Zlx1NjE1ZFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4''@;'; put 'put ''N1x1NjFhY1x1NjE5NFx1NjE5YVx1NjE4YVx1NjE5MVx1NjFhYlx1NjFhZVx1NjFjY1x1NjFjYVx1NjFjOVx1NjFmN1x1NjFjOFx1NjFjM1x1NjFjNlx1NjFiYVx1NjFjYlx1N2Y3OVx1NjFjZFx1NjFlNlx1NjFlM1x1NjFmNlx1NjFmYVx1NjFmNFx1NjFmZlx1NjFmZFx1NjFmY1x1NjFmZVx1''@;'; put 'put ''NjIwMFx1NjIwOFx1NjIwOVx1NjIwZFx1NjIwY1x1NjIxNFx1NjIxYiJdLFsiZDlhMSIsIlx1NjIxZVx1NjIyMVx1NjIyYVx1NjIyZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5''@;'; put 'put ''Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1''@;'; put 'put ''NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQx''@;'; put 'put ''Nlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiYyJdLFsiZGFhMSIsIlx1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1''@;'; put 'put ''NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRmMlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUz''@;'; put 'put ''OFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1''@;'; put 'put ''NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5''@;'; put 'put ''OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiYyJdLFsiZGJhMSIsIlx1NjZjNFx1NjZiOFx1NjZkNlx1NjZkYVx1NjZlMFx1NjYzZlx1NjZlNlx1NjZlOVx1NjZmMFx1NjZmNVx1NjZmN1x1NjcwZlx1NjcxNlx1NjcxZVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyZVx1NjczZlx1''@;'; put 'put ''NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1ZVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdhOVx1Njc3Y1x1Njc2YVx1Njc4Y1x1Njc4Ylx1NjdhNlx1NjdhMVx1Njc4NVx1NjdiN1x1NjdlZlx1NjdiNFx1NjdlY1x1NjdiM1x1NjdlOVx1NjdiOFx1Njdl''@;'; put 'put ''NFx1NjdkZVx1NjdkZFx1NjdlMlx1NjdlZVx1NjdiOVx1NjdjZVx1NjdjNlx1NjdlN1x1NmE5Y1x1NjgxZVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0ZFx1NjgzMlx1Njg0ZVx1NjhiM1x1NjgyYlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Zlx1Njg5Zlx1Njg4Zlx1NjhhZFx1Njg5NFx1Njg5ZFx1''@;'; put 'put ''Njg5Ylx1Njg4M1x1NmFhZVx1NjhiOVx1Njg3NFx1NjhiNVx1NjhhMFx1NjhiYVx1NjkwZlx1Njg4ZFx1Njg3ZVx1NjkwMVx1NjhjYVx1NjkwOFx1NjhkOFx1NjkyMlx1NjkyNlx1NjhlMVx1NjkwY1x1NjhjZCJdLFsiZGNhMSIsIlx1NjhkNFx1NjhlN1x1NjhkNVx1NjkzNlx1NjkxMlx1Njkw''@;'; put 'put ''NFx1NjhkN1x1NjhlM1x1NjkyNVx1NjhmOVx1NjhlMFx1NjhlZlx1NjkyOFx1NjkyYVx1NjkxYVx1NjkyM1x1NjkyMVx1NjhjNlx1Njk3OVx1Njk3N1x1Njk1Y1x1Njk3OFx1Njk2Ylx1Njk1NFx1Njk3ZVx1Njk2ZVx1NjkzOVx1Njk3NFx1NjkzZFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1ZVx1''@;'; put 'put ''Njk1ZFx1Njk4MVx1Njk2YVx1NjliMlx1NjlhZVx1NjlkMFx1NjliZlx1NjljMVx1NjlkM1x1NjliZVx1NjljZVx1NWJlOFx1NjljYVx1NjlkZFx1NjliYlx1NjljM1x1NjlhN1x1NmEyZVx1Njk5MVx1NjlhMFx1Njk5Y1x1Njk5NVx1NjliNFx1NjlkZVx1NjllOFx1NmEwMlx1NmExYlx1Njlm''@;'; put 'put ''Zlx1NmIwYVx1NjlmOVx1NjlmMlx1NjllN1x1NmEwNVx1NjliMVx1NmExZVx1NjllZFx1NmExNFx1NjllYlx1NmEwYVx1NmExMlx1NmFjMVx1NmEyM1x1NmExM1x1NmE0NFx1NmEwY1x1NmE3Mlx1NmEzNlx1NmE3OFx1NmE0N1x1NmE2Mlx1NmE1OVx1NmE2Nlx1NmE0OFx1NmEzOFx1NmEyMlx1''@;'; put 'put ''NmE5MFx1NmE4ZFx1NmFhMFx1NmE4NFx1NmFhMlx1NmFhMyJdLFsiZGRhMSIsIlx1NmE5N1x1ODYxN1x1NmFiYlx1NmFjM1x1NmFjMlx1NmFiOFx1NmFiM1x1NmFhY1x1NmFkZVx1NmFkMVx1NmFkZlx1NmFhYVx1NmFkYVx1NmFlYVx1NmFmYlx1NmIwNVx1ODYxNlx1NmFmYVx1NmIxMlx1NmIx''@;'; put 'put ''Nlx1OWIzMVx1NmIxZlx1NmIzOFx1NmIzN1x1NzZkY1x1NmIzOVx1OThlZVx1NmI0N1x1NmI0M1x1NmI0OVx1NmI1MFx1NmI1OVx1NmI1NFx1NmI1Ylx1NmI1Zlx1NmI2MVx1NmI3OFx1NmI3OVx1NmI3Zlx1NmI4MFx1NmI4NFx1NmI4M1x1NmI4ZFx1NmI5OFx1NmI5NVx1NmI5ZVx1NmJhNFx1''@;'; put 'put ''NmJhYVx1NmJhYlx1NmJhZlx1NmJiMlx1NmJiMVx1NmJiM1x1NmJiN1x1NmJiY1x1NmJjNlx1NmJjYlx1NmJkM1x1NmJkZlx1NmJlY1x1NmJlYlx1NmJmM1x1NmJlZlx1OWViZVx1NmMwOFx1NmMxM1x1NmMxNFx1NmMxYlx1NmMyNFx1NmMyM1x1NmM1ZVx1NmM1NVx1NmM2Mlx1NmM2YVx1NmM4''@;'; put 'put ''Mlx1NmM4ZFx1NmM5YVx1NmM4MVx1NmM5Ylx1NmM3ZVx1NmM2OFx1NmM3M1x1NmM5Mlx1NmM5MFx1NmNjNFx1NmNmMVx1NmNkM1x1NmNiZFx1NmNkN1x1NmNjNVx1NmNkZFx1NmNhZVx1NmNiMVx1NmNiZSJdLFsiZGVhMSIsIlx1NmNiYVx1NmNkYlx1NmNlZlx1NmNkOVx1NmNlYVx1NmQxZlx1''@;'; put 'put ''ODg0ZFx1NmQzNlx1NmQyYlx1NmQzZFx1NmQzOFx1NmQxOVx1NmQzNVx1NmQzM1x1NmQxMlx1NmQwY1x1NmQ2M1x1NmQ5M1x1NmQ2NFx1NmQ1YVx1NmQ3OVx1NmQ1OVx1NmQ4ZVx1NmQ5NVx1NmZlNFx1NmQ4NVx1NmRmOVx1NmUxNVx1NmUwYVx1NmRiNVx1NmRjN1x1NmRlNlx1NmRiOFx1NmRj''@;'; put 'put ''Nlx1NmRlY1x1NmRkZVx1NmRjY1x1NmRlOFx1NmRkMlx1NmRjNVx1NmRmYVx1NmRkOVx1NmRlNFx1NmRkNVx1NmRlYVx1NmRlZVx1NmUyZFx1NmU2ZVx1NmUyZVx1NmUxOVx1NmU3Mlx1NmU1Zlx1NmUzZVx1NmUyM1x1NmU2Ylx1NmUyYlx1NmU3Nlx1NmU0ZFx1NmUxZlx1NmU0M1x1NmUzYVx1''@;'; put 'put ''NmU0ZVx1NmUyNFx1NmVmZlx1NmUxZFx1NmUzOFx1NmU4Mlx1NmVhYVx1NmU5OFx1NmVjOVx1NmViN1x1NmVkM1x1NmViZFx1NmVhZlx1NmVjNFx1NmViMlx1NmVkNFx1NmVkNVx1NmU4Zlx1NmVhNVx1NmVjMlx1NmU5Zlx1NmY0MVx1NmYxMVx1NzA0Y1x1NmVlY1x1NmVmOFx1NmVmZVx1NmYz''@;'; put 'put ''Zlx1NmVmMlx1NmYzMVx1NmVlZlx1NmYzMlx1NmVjYyJdLFsiZGZhMSIsIlx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1''@;'; put 'put ''NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZjNlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAz''@;'; put 'put ''MFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1''@;'; put 'put ''NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmYyJdLFsiZTBhMSIsIlx1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIy''@;'; put 'put ''ZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1''@;'; put 'put ''NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMxN1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNi''@;'; put 'put ''M1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1''@;'; put 'put ''NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMSJdLFsiZTFhMSIsIlx1NzRlMFx1NzRlM1x1NzRlN1x1NzRlOVx1NzRlZVx1NzRmMlx1NzRmMFx1NzRmMVx1NzRmOFx1NzRmN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwY1x1NzUwZVx1NzUwZFx1NzUxNVx1NzUxM1x1NzUxZVx1NzUyNlx1NzUy''@;'; put 'put ''Y1x1NzUzY1x1NzU0NFx1NzU0ZFx1NzU0YVx1NzU0OVx1NzU1Ylx1NzU0Nlx1NzU1YVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Ylx1NzU2ZFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4YVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5YVx1NzU5ZFx1NzVhNVx1NzVhM1x1NzVjMlx1''@;'; put 'put ''NzViM1x1NzVjM1x1NzViNVx1NzViZFx1NzViOFx1NzViY1x1NzViMVx1NzVjZFx1NzVjYVx1NzVkMlx1NzVkOVx1NzVlM1x1NzVkZVx1NzVmZVx1NzVmZlx1NzVmY1x1NzYwMVx1NzVmMFx1NzVmYVx1NzVmMlx1NzVmM1x1NzYwYlx1NzYwZFx1NzYwOVx1NzYxZlx1NzYyN1x1NzYyMFx1NzYy''@;'; put 'put ''MVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzYlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Y1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2YVx1NzY2N1x1NzY2Y1x1NzY3MCJdLFsiZTJhMSIsIlx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Y1x1NzY4MFx1NzY4M1x1NzY4OFx1''@;'; put 'put ''NzY4Ylx1NzY4ZVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5YVx1NzZiMFx1NzZiNFx1NzZiOFx1NzZiOVx1NzZiYVx1NzZjMlx1NzZjZFx1NzZkNlx1NzZkMlx1NzZkZVx1NzZlMVx1NzZlNVx1NzZlN1x1NzZlYVx1ODYyZlx1NzZmYlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1Nzcx''@;'; put 'put ''ZVx1NzcyNVx1NzcyNlx1NzcxYlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1YVx1Nzc2OFx1Nzc2Ylx1Nzc1Ylx1Nzc2NVx1Nzc3Zlx1Nzc3ZVx1Nzc3OVx1Nzc4ZVx1Nzc4Ylx1Nzc5MVx1NzdhMFx1Nzc5ZVx1NzdiMFx1NzdiNlx1NzdiOVx1NzdiZlx1NzdiY1x1NzdiZFx1NzdiYlx1NzdjN1x1''@;'; put 'put ''NzdjZFx1NzdkN1x1NzdkYVx1NzdkY1x1NzdlM1x1NzdlZVx1NzdmY1x1NzgwY1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyYVx1Nzg0NVx1Nzg4ZVx1Nzg3NFx1Nzg4Nlx1Nzg3Y1x1Nzg5YVx1Nzg4Y1x1NzhhM1x1NzhiNVx1NzhhYVx1NzhhZlx1NzhkMVx1NzhjNlx1NzhjYlx1NzhkNFx1Nzhi''@;'; put 'put ''ZVx1NzhiY1x1NzhjNVx1NzhjYVx1NzhlYyJdLFsiZTNhMSIsIlx1NzhlN1x1NzhkYVx1NzhmZFx1NzhmNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyY1x1NzkyYlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Zlx1Nzk1YVx1Nzk1NVx1Nzk1M1x1Nzk3YVx1Nzk3Zlx1Nzk4YVx1Nzk5ZFx1''@;'; put 'put ''NzlhN1x1OWY0Ylx1NzlhYVx1NzlhZVx1NzliM1x1NzliOVx1NzliYVx1NzljOVx1NzlkNVx1NzllN1x1NzllY1x1NzllMVx1NzllM1x1N2EwOFx1N2EwZFx1N2ExOFx1N2ExOVx1N2EyMFx1N2ExZlx1Nzk4MFx1N2EzMVx1N2EzYlx1N2EzZVx1N2EzN1x1N2E0M1x1N2E1N1x1N2E0OVx1N2E2''@;'; put 'put ''MVx1N2E2Mlx1N2E2OVx1OWY5ZFx1N2E3MFx1N2E3OVx1N2E3ZFx1N2E4OFx1N2E5N1x1N2E5NVx1N2E5OFx1N2E5Nlx1N2FhOVx1N2FjOFx1N2FiMFx1N2FiNlx1N2FjNVx1N2FjNFx1N2FiZlx1OTA4M1x1N2FjN1x1N2FjYVx1N2FjZFx1N2FjZlx1N2FkNVx1N2FkM1x1N2FkOVx1N2FkYVx1''@;'; put 'put ''N2FkZFx1N2FlMVx1N2FlMlx1N2FlNlx1N2FlZFx1N2FmMFx1N2IwMlx1N2IwZlx1N2IwYVx1N2IwNlx1N2IzM1x1N2IxOFx1N2IxOVx1N2IxZVx1N2IzNVx1N2IyOFx1N2IzNlx1N2I1MCJdLFsiZTRhMSIsIlx1N2I3YVx1N2IwNFx1N2I0ZFx1N2IwYlx1N2I0Y1x1N2I0NVx1N2I3NVx1N2I2''@;'; put 'put ''NVx1N2I3NFx1N2I2N1x1N2I3MFx1N2I3MVx1N2I2Y1x1N2I2ZVx1N2I5ZFx1N2I5OFx1N2I5Zlx1N2I4ZFx1N2I5Y1x1N2I5YVx1N2I4Ylx1N2I5Mlx1N2I4Zlx1N2I1ZFx1N2I5OVx1N2JjYlx1N2JjMVx1N2JjY1x1N2JjZlx1N2JiNFx1N2JjNlx1N2JkZFx1N2JlOVx1N2MxMVx1N2MxNFx1''@;'; put 'put ''N2JlNlx1N2JlNVx1N2M2MFx1N2MwMFx1N2MwN1x1N2MxM1x1N2JmM1x1N2JmN1x1N2MxN1x1N2MwZFx1N2JmNlx1N2MyM1x1N2MyN1x1N2MyYVx1N2MxZlx1N2MzN1x1N2MyYlx1N2MzZFx1N2M0Y1x1N2M0M1x1N2M1NFx1N2M0Zlx1N2M0MFx1N2M1MFx1N2M1OFx1N2M1Zlx1N2M2NFx1N2M1''@;'; put 'put ''Nlx1N2M2NVx1N2M2Y1x1N2M3NVx1N2M4M1x1N2M5MFx1N2NhNFx1N2NhZFx1N2NhMlx1N2NhYlx1N2NhMVx1N2NhOFx1N2NiM1x1N2NiMlx1N2NiMVx1N2NhZVx1N2NiOVx1N2NiZFx1N2NjMFx1N2NjNVx1N2NjMlx1N2NkOFx1N2NkMlx1N2NkY1x1N2NlMlx1OWIzYlx1N2NlZlx1N2NmMlx1''@;'; put 'put ''N2NmNFx1N2NmNlx1N2NmYVx1N2QwNiJdLFsiZTVhMSIsIlx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1''@;'; put 'put ''Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2RlMVx1N2UwNVx1N2UwYVx1N2UyM1x1''@;'; put 'put ''N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4''@;'; put 'put ''M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYSJdLFsiZTZhMSIsIlx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1MVx1N2Y1NVx1N2Y1NFx1''@;'; put 'put ''N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1N2ZjNVx1N2ZjNlx1N2Zj''@;'; put 'put ''YVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1Zlx1ODA2Mlx1ODA2OFx1''@;'; put 'put ''ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1ODBmMVx1ODExYlx1ODEy''@;'; put 'put ''OVx1ODEyM1x1ODEyZlx1ODE0YiJdLFsiZTdhMSIsIlx1OTY4Ylx1ODE0Nlx1ODEzZVx1ODE1M1x1ODE1MVx1ODBmY1x1ODE3MVx1ODE2ZVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4YVx1ODE4MFx1ODE4Mlx1ODFhMFx1ODE5NVx1ODFhNFx1ODFhM1x1ODE1Zlx1ODE5M1x1''@;'; put 'put ''ODFhOVx1ODFiMFx1ODFiNVx1ODFiZVx1ODFiOFx1ODFiZFx1ODFjMFx1ODFjMlx1ODFiYVx1ODFjOVx1ODFjZFx1ODFkMVx1ODFkOVx1ODFkOFx1ODFjOFx1ODFkYVx1ODFkZlx1ODFlMFx1ODFlN1x1ODFmYVx1ODFmYlx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwYVx1ODIw''@;'; put 'put ''ZFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyYlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1ZFx1ODI1YVx1ODI1Zlx1ODI2NFx1ODI2Mlx1ODI2OFx1ODI2YVx1ODI2Ylx1ODIyZVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3ZVx1ODI4ZFx1ODI5Mlx1ODJhYlx1ODI5Zlx1ODJiYlx1''@;'; put 'put ''ODJhY1x1ODJlMVx1ODJlM1x1ODJkZlx1ODJkMlx1ODJmNFx1ODJmM1x1ODJmYVx1ODM5M1x1ODMwM1x1ODJmYlx1ODJmOVx1ODJkZVx1ODMwNlx1ODJkY1x1ODMwOVx1ODJkOSJdLFsiZThhMSIsIlx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0''@;'; put 'put ''NVx1ODMyZlx1ODMyYlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5YVx1ODNhYVx1ODM5Zlx1ODNhMlx1ODM5Nlx1ODMyM1x1ODM4ZVx1ODM4N1x1ODM4YVx1ODM3Y1x1ODNiNVx1ODM3M1x1ODM3NVx1ODNhMFx1ODM4OVx1ODNhOFx1ODNmNFx1ODQxM1x1ODNlYlx1ODNjZVx1ODNmZFx1ODQwM1x1''@;'; put 'put ''ODNkOFx1ODQwYlx1ODNjMVx1ODNmN1x1ODQwN1x1ODNlMFx1ODNmMlx1ODQwZFx1ODQyMlx1ODQyMFx1ODNiZFx1ODQzOFx1ODUwNlx1ODNmYlx1ODQ2ZFx1ODQyYVx1ODQzY1x1ODU1YVx1ODQ4NFx1ODQ3N1x1ODQ2Ylx1ODRhZFx1ODQ2ZVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyY1x1ODQ2''@;'; put 'put ''Zlx1ODQ3OVx1ODQzNVx1ODRjYVx1ODQ2Mlx1ODRiOVx1ODRiZlx1ODQ5Zlx1ODRkOVx1ODRjZFx1ODRiYlx1ODRkYVx1ODRkMFx1ODRjMVx1ODRjNlx1ODRkNlx1ODRhMVx1ODUyMVx1ODRmZlx1ODRmNFx1ODUxN1x1ODUxOFx1ODUyY1x1ODUxZlx1ODUxNVx1ODUxNFx1ODRmY1x1ODU0MFx1''@;'; put 'put ''ODU2M1x1ODU1OFx1ODU0OCJdLFsiZTlhMSIsIlx1ODU0MVx1ODYwMlx1ODU0Ylx1ODU1NVx1ODU4MFx1ODVhNFx1ODU4OFx1ODU5MVx1ODU4YVx1ODVhOFx1ODU2ZFx1ODU5NFx1ODU5Ylx1ODVlYVx1ODU4N1x1ODU5Y1x1ODU3N1x1ODU3ZVx1ODU5MFx1ODVjOVx1ODViYVx1ODVjZlx1ODVi''@;'; put 'put ''OVx1ODVkMFx1ODVkNVx1ODVkZFx1ODVlNVx1ODVkY1x1ODVmOVx1ODYwYVx1ODYxM1x1ODYwYlx1ODVmZVx1ODVmYVx1ODYwNlx1ODYyMlx1ODYxYVx1ODYzMFx1ODYzZlx1ODY0ZFx1NGU1NVx1ODY1NFx1ODY1Zlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZhM1x1ODZhOVx1ODZhYVx1ODY4Ylx1''@;'; put 'put ''ODY4Y1x1ODZiNlx1ODZhZlx1ODZjNFx1ODZjNlx1ODZiMFx1ODZjOVx1ODgyM1x1ODZhYlx1ODZkNFx1ODZkZVx1ODZlOVx1ODZlY1x1ODZkZlx1ODZkYlx1ODZlZlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZmYlx1ODcxMVx1ODcwOVx1ODcwZFx1ODZmOVx1ODcwYVx1ODcz''@;'; put 'put ''NFx1ODczZlx1ODczN1x1ODczYlx1ODcyNVx1ODcyOVx1ODcxYVx1ODc2MFx1ODc1Zlx1ODc3OFx1ODc0Y1x1ODc0ZVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2ZVx1ODc1OSJdLFsiZWFhMSIsIlx1ODc1M1x1ODc2M1x1ODc2YVx1ODgwNVx1ODdhMlx1ODc5Zlx1ODc4Mlx1ODdhZlx1ODdjYlx1''@;'; put 'put ''ODdiZFx1ODdjMFx1ODdkMFx1OTZkNlx1ODdhYlx1ODdjNFx1ODdiM1x1ODdjN1x1ODdjNlx1ODdiYlx1ODdlZlx1ODdmMlx1ODdlMFx1ODgwZlx1ODgwZFx1ODdmZVx1ODdmNlx1ODdmN1x1ODgwZVx1ODdkMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgz''@;'; put 'put ''OVx1ODgyN1x1ODgzYlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1ZVx1ODg2Mlx1ODg2Ylx1ODg4MVx1ODg3ZVx1ODg5ZVx1ODg3NVx1ODg3ZFx1ODhiNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhhZVx1ODg5OVx1ODhhMlx1ODg4ZFx1ODhhNFx1ODhiMFx1ODhiZlx1ODhiMVx1''@;'; put 'put ''ODhjM1x1ODhjNFx1ODhkNFx1ODhkOFx1ODhkOVx1ODhkZFx1ODhmOVx1ODkwMlx1ODhmY1x1ODhmNFx1ODhlOFx1ODhmMlx1ODkwNFx1ODkwY1x1ODkwYVx1ODkxM1x1ODk0M1x1ODkxZVx1ODkyNVx1ODkyYVx1ODkyYlx1ODk0MVx1ODk0NFx1ODkzYlx1ODkzNlx1ODkzOFx1ODk0Y1x1ODkx''@;'; put 'put ''ZFx1ODk2MFx1ODk1ZSJdLFsiZWJhMSIsIlx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1''@;'; put 'put ''ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFh''@;'; put 'put ''MVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1OGFlNFx1OGFmMVx1OGIxNFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1''@;'; put 'put ''OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1OGI2YiJdLFsiZWNhMSIsIlx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5''@;'; put 'put ''M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1''@;'; put 'put ''OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3''@;'; put 'put ''MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRmY1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1''@;'; put 'put ''OGUzNFx1OGU0YSJdLFsiZWRhMSIsIlx1OGU0N1x1OGU0OVx1OGU0Y1x1OGU1MFx1OGU0OFx1OGU1OVx1OGU2NFx1OGU2MFx1OGUyYVx1OGU2M1x1OGU1NVx1OGU3Nlx1OGU3Mlx1OGU3Y1x1OGU4MVx1OGU4N1x1OGU4NVx1OGU4NFx1OGU4Ylx1OGU4YVx1OGU5M1x1OGU5MVx1OGU5NFx1OGU5''@;'; put 'put ''OVx1OGVhYVx1OGVhMVx1OGVhY1x1OGViMFx1OGVjNlx1OGViMVx1OGViZVx1OGVjNVx1OGVjOFx1OGVjYlx1OGVkYlx1OGVlM1x1OGVmY1x1OGVmYlx1OGVlYlx1OGVmZVx1OGYwYVx1OGYwNVx1OGYxNVx1OGYxMlx1OGYxOVx1OGYxM1x1OGYxY1x1OGYxZlx1OGYxYlx1OGYwY1x1OGYyNlx1''@;'; put 'put ''OGYzM1x1OGYzYlx1OGYzOVx1OGY0NVx1OGY0Mlx1OGYzZVx1OGY0Y1x1OGY0OVx1OGY0Nlx1OGY0ZVx1OGY1N1x1OGY1Y1x1OGY2Mlx1OGY2M1x1OGY2NFx1OGY5Y1x1OGY5Zlx1OGZhM1x1OGZhZFx1OGZhZlx1OGZiN1x1OGZkYVx1OGZlNVx1OGZlMlx1OGZlYVx1OGZlZlx1OTA4N1x1OGZm''@;'; put 'put ''NFx1OTAwNVx1OGZmOVx1OGZmYVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwZFx1OTAxZVx1OTAxNlx1OTAwYlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OGZmOCJdLFsiZWVhMSIsIlx1OTA0Zlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwZVx1OTA0OVx1OTAzZVx1OTA1Nlx1OTA1OFx1OTA1ZVx1''@;'; put 'put ''OTA2OFx1OTA2Zlx1OTA3Nlx1OTZhOFx1OTA3Mlx1OTA4Mlx1OTA3ZFx1OTA4MVx1OTA4MFx1OTA4YVx1OTA4OVx1OTA4Zlx1OTBhOFx1OTBhZlx1OTBiMVx1OTBiNVx1OTBlMlx1OTBlNFx1NjI0OFx1OTBkYlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0YVx1OTE1Nlx1OTE1''@;'; put 'put ''OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Ylx1OTE4OVx1OTE4Mlx1OTFhMlx1OTFhYlx1OTFhZlx1OTFhYVx1OTFiNVx1OTFiNFx1OTFiYVx1OTFjMFx1OTFjMVx1OTFjOVx1OTFjYlx1OTFkMFx1OTFkNlx1OTFkZlx1OTFlMVx1OTFkYlx1OTFmY1x1OTFmNVx1OTFmNlx1''@;'; put 'put ''OTIxZVx1OTFmZlx1OTIxNFx1OTIyY1x1OTIxNVx1OTIxMVx1OTI1ZVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzZlx1OTI0Ylx1OTI1MFx1OTI5Y1x1OTI5Nlx1OTI5M1x1OTI5Ylx1OTI1YVx1OTJjZlx1OTJiOVx1OTJiN1x1OTJlOVx1OTMwZlx1OTJmYVx1OTM0''@;'; put 'put ''NFx1OTMyZSJdLFsiZWZhMSIsIlx1OTMxOVx1OTMyMlx1OTMxYVx1OTMyM1x1OTMzYVx1OTMzNVx1OTMzYlx1OTM1Y1x1OTM2MFx1OTM3Y1x1OTM2ZVx1OTM1Nlx1OTNiMFx1OTNhY1x1OTNhZFx1OTM5NFx1OTNiOVx1OTNkNlx1OTNkN1x1OTNlOFx1OTNlNVx1OTNkOFx1OTNjM1x1OTNkZFx1''@;'; put 'put ''OTNkMFx1OTNjOFx1OTNlNFx1OTQxYVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyYlx1OTQzNVx1OTQyMVx1OTQzYVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Ylx1OTQ2MFx1OTQ2Mlx1OTQ1ZVx1OTQ2YVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3ZFx1OTQ1''@;'; put 'put ''YVx1OTQ3Y1x1OTQ3ZVx1OTQ4MVx1OTQ3Zlx1OTU4Mlx1OTU4N1x1OTU4YVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVx1OTVhMFx1OTVhOFx1OTVhN1x1OTVhZFx1OTViY1x1OTViYlx1OTViOVx1OTViZVx1OTVjYVx1NmZmNlx1OTVjM1x1OTVjZFx1OTVjY1x1OTVkNVx1OTVkNFx1OTVkNlx1''@;'; put 'put ''OTVkY1x1OTVlMVx1OTVlNVx1OTVlMlx1OTYyMVx1OTYyOFx1OTYyZVx1OTYyZlx1OTY0Mlx1OTY0Y1x1OTY0Zlx1OTY0Ylx1OTY3N1x1OTY1Y1x1OTY1ZSJdLFsiZjBhMSIsIlx1OTY1ZFx1OTY1Zlx1OTY2Nlx1OTY3Mlx1OTY2Y1x1OTY4ZFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZhYVx1OTZh''@;'; put 'put ''N1x1OTZiMVx1OTZiMlx1OTZiMFx1OTZiNFx1OTZiNlx1OTZiOFx1OTZiOVx1OTZjZVx1OTZjYlx1OTZjOVx1OTZjZFx1ODk0ZFx1OTZkY1x1OTcwZFx1OTZkNVx1OTZmOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwZVx1OTcxMVx1OTcwZlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyYVx1''@;'; put 'put ''OTczMFx1OTczOVx1OTczZFx1OTczZVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Y1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJkMlx1OTc2Ylx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Y1x1OTc4MVx1OTc3YVx1OTc4Nlx1OTc4Ylx1OTc4Zlx1OTc5MFx1OTc5Y1x1OTdh''@;'; put 'put ''OFx1OTdhNlx1OTdhM1x1OTdiM1x1OTdiNFx1OTdjM1x1OTdjNlx1OTdjOFx1OTdjYlx1OTdkY1x1OTdlZFx1OWY0Zlx1OTdmMlx1N2FkZlx1OTdmNlx1OTdmNVx1OTgwZlx1OTgwY1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzZFx1OTg0Nlx1OTg0Zlx1OTg0Ylx1OTg2Ylx1OTg2Zlx1''@;'; put 'put ''OTg3MCJdLFsiZjFhMSIsIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkz''@;'; put 'put ''ZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1''@;'; put 'put ''OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1OWE0Mlx1OWE0MFx1OWE0M1x1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFj''@;'; put 'put ''Zlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFlM1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmNyJdLFsiZjJhMSIsIlx1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1''@;'; put 'put ''OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJk''@;'; put 'put ''Mlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJmMFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1''@;'; put 'put ''OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0''@;'; put 'put ''OCJdLFsiZjNhMSIsIlx1OWQ1ZFx1OWQ1ZVx1OWQ2NFx1OWQ1MVx1OWQ1MFx1OWQ1OVx1OWQ3Mlx1OWQ4OVx1OWQ4N1x1OWRhYlx1OWQ2Zlx1OWQ3YVx1OWQ5YVx1OWRhNFx1OWRhOVx1OWRiMlx1OWRjNFx1OWRjMVx1OWRiYlx1OWRiOFx1OWRiYVx1OWRjNlx1OWRjZlx1OWRjMlx1OWRkOVx1''@;'; put 'put ''OWRkM1x1OWRmOFx1OWRlNlx1OWRlZFx1OWRlZlx1OWRmZFx1OWUxYVx1OWUxYlx1OWUxZVx1OWU3NVx1OWU3OVx1OWU3ZFx1OWU4MVx1OWU4OFx1OWU4Ylx1OWU4Y1x1OWU5Mlx1OWU5NVx1OWU5MVx1OWU5ZFx1OWVhNVx1OWVhOVx1OWViOFx1OWVhYVx1OWVhZFx1OTc2MVx1OWVjY1x1OWVj''@;'; put 'put ''ZVx1OWVjZlx1OWVkMFx1OWVkNFx1OWVkY1x1OWVkZVx1OWVkZFx1OWVlMFx1OWVlNVx1OWVlOFx1OWVlZlx1OWVmNFx1OWVmNlx1OWVmN1x1OWVmOVx1OWVmYlx1OWVmY1x1OWVmZFx1OWYwN1x1OWYwOFx1NzZiN1x1OWYxNVx1OWYyMVx1OWYyY1x1OWYzZVx1OWY0YVx1OWY1Mlx1OWY1NFx1''@;'; put 'put ''OWY2M1x1OWY1Zlx1OWY2MFx1OWY2MVx1OWY2Nlx1OWY2N1x1OWY2Y1x1OWY2YVx1OWY3N1x1OWY3Mlx1OWY3Nlx1OWY5NVx1OWY5Y1x1OWZhMCJdLFsiZjRhMSIsIlx1NTgyZlx1NjljN1x1OTA1OVx1NzQ2NFx1NTFkY1x1NzE5OSJdLFsiZjlhMSIsIlx1N2U4YVx1ODkxY1x1OTM0OFx1OTI4''@;'; put 'put ''OFx1ODRkY1x1NGZjOVx1NzBiYlx1NjYzMVx1NjhjOFx1OTJmOVx1NjZmYlx1NWY0NVx1NGUyOFx1NGVlMVx1NGVmY1x1NGYwMFx1NGYwM1x1NGYzOVx1NGY1Nlx1NGY5Mlx1NGY4YVx1NGY5YVx1NGY5NFx1NGZjZFx1NTA0MFx1NTAyMlx1NGZmZlx1NTAxZVx1NTA0Nlx1NTA3MFx1NTA0Mlx1''@;'; put 'put ''NTA5NFx1NTBmNFx1NTBkOFx1NTE0YVx1NTE2NFx1NTE5ZFx1NTFiZVx1NTFlY1x1NTIxNVx1NTI5Y1x1NTJhNlx1NTJjMFx1NTJkYlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNiMlx1NTNkZFx1ZmEwZVx1NTQ5Y1x1NTQ4YVx1NTRhOVx1NTRmZlx1NTU4Nlx1NTc1OVx1NTc2''@;'; put 'put ''NVx1NTdhY1x1NTdjOFx1NTdjN1x1ZmEwZlx1ZmExMFx1NTg5ZVx1NThiMlx1NTkwYlx1NTk1M1x1NTk1Ylx1NTk1ZFx1NTk2M1x1NTlhNFx1NTliYVx1NWI1Nlx1NWJjMFx1NzUyZlx1NWJkOFx1NWJlY1x1NWMxZVx1NWNhNlx1NWNiYVx1NWNmNVx1NWQyN1x1NWQ1M1x1ZmExMVx1NWQ0Mlx1''@;'; put 'put ''NWQ2ZFx1NWRiOFx1NWRiOVx1NWRkMFx1NWYyMVx1NWYzNFx1NWY2N1x1NWZiNyJdLFsiZmFhMSIsIlx1NWZkZVx1NjA1ZFx1NjA4NVx1NjA4YVx1NjBkZVx1NjBkNVx1NjEyMFx1NjBmMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJhNlx1NjNmNVx1NjQ2MFx1NjQ5ZFx1NjRj''@;'; put 'put ''ZVx1NjU0ZVx1NjYwMFx1NjYxNVx1NjYzYlx1NjYwOVx1NjYyZVx1NjYxZVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1ZmExMlx1NjY3M1x1NjY5OVx1NjZhMFx1NjZiMlx1NjZiZlx1NjZmYVx1NjcwZVx1ZjkyOVx1Njc2Nlx1NjdiYlx1Njg1Mlx1NjdjMFx1NjgwMVx1Njg0NFx1NjhjZlx1''@;'; put 'put ''ZmExM1x1Njk2OFx1ZmExNFx1Njk5OFx1NjllMlx1NmEzMFx1NmE2Ylx1NmE0Nlx1NmE3M1x1NmE3ZVx1NmFlMlx1NmFlNFx1NmJkNlx1NmMzZlx1NmM1Y1x1NmM4Nlx1NmM2Zlx1NmNkYVx1NmQwNFx1NmQ4N1x1NmQ2Zlx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUz''@;'; put 'put ''OVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMSJdLFsiZmJhMSIsIlx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1''@;'; put 'put ''NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3''@;'; put 'put ''YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1''@;'; put 'put ''ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEy''@;'; put 'put ''NFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYSJdLFsiZmNhMSIsIlx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1''@;'; put 'put ''OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5''@;'; put 'put ''Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1''@;'; put 'put ''OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMSJdLFsiZmNmMSIsIlx1MjE3MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyIl0sWyI4ZmEyYWYiLCJcdTAyZDhcdTAyYzdceGI4XHUwMmQ5XHUwMmRkXHhhZlx1MDJkYlx1MDJkYVx1ZmY1ZVx1MDM4NFx1MDM4NSJdLFsiOGZhMmMyIiwi''@;'; put 'put ''XHhhMVx4YTZceGJmIl0sWyI4ZmEyZWIiLCJceGJhXHhhYVx4YTlceGFlXHUyMTIyXHhhNFx1MjExNiJdLFsiOGZhNmUxIiwiXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwM2FhIl0sWyI4ZmE2ZTciLCJcdTAzOGMiXSxbIjhmYTZlOSIsIlx1MDM4ZVx1MDNhYiJdLFsiOGZhNmVjIiwiXHUw''@;'; put 'put ''MzhmIl0sWyI4ZmE2ZjEiLCJcdTAzYWNcdTAzYWRcdTAzYWVcdTAzYWZcdTAzY2FcdTAzOTBcdTAzY2NcdTAzYzJcdTAzY2RcdTAzY2JcdTAzYjBcdTAzY2UiXSxbIjhmYTdjMiIsIlx1MDQwMiIsMTAsIlx1MDQwZVx1MDQwZiJdLFsiOGZhN2YyIiwiXHUwNDUyIiwxMCwiXHUwNDVlXHUwNDVm''@;'; put 'put ''Il0sWyI4ZmE5YTEiLCJceGM2XHUwMTEwIl0sWyI4ZmE5YTQiLCJcdTAxMjYiXSxbIjhmYTlhNiIsIlx1MDEzMiJdLFsiOGZhOWE4IiwiXHUwMTQxXHUwMTNmIl0sWyI4ZmE5YWIiLCJcdTAxNGFceGQ4XHUwMTUyIl0sWyI4ZmE5YWYiLCJcdTAxNjZceGRlIl0sWyI4ZmE5YzEiLCJceGU2XHUw''@;'; put 'put ''MTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0Mlx1MDE0MFx1MDE0OVx1MDE0Ylx4ZjhcdTAxNTNceGRmXHUwMTY3XHhmZSJdLFsiOGZhYWExIiwiXHhjMVx4YzBceGM0XHhjMlx1MDEwMlx1MDFjZFx1MDEwMFx1MDEwNFx4YzVceGMzXHUwMTA2XHUwMTA4XHUwMTBjXHhjN1x1''@;'; put 'put ''MDEwYVx1MDEwZVx4YzlceGM4XHhjYlx4Y2FcdTAxMWFcdTAxMTZcdTAxMTJcdTAxMTgiXSxbIjhmYWFiYSIsIlx1MDExY1x1MDExZVx1MDEyMlx1MDEyMFx1MDEyNFx4Y2RceGNjXHhjZlx4Y2VcdTAxY2ZcdTAxMzBcdTAxMmFcdTAxMmVcdTAxMjhcdTAxMzRcdTAxMzZcdTAxMzlcdTAxM2Rc''@;'; put 'put ''dTAxM2JcdTAxNDNcdTAxNDdcdTAxNDVceGQxXHhkM1x4ZDJceGQ2XHhkNFx1MDFkMVx1MDE1MFx1MDE0Y1x4ZDVcdTAxNTRcdTAxNThcdTAxNTZcdTAxNWFcdTAxNWNcdTAxNjBcdTAxNWVcdTAxNjRcdTAxNjJceGRhXHhkOVx4ZGNceGRiXHUwMTZjXHUwMWQzXHUwMTcwXHUwMTZhXHUwMTcy''@;'; put 'put ''XHUwMTZlXHUwMTY4XHUwMWQ3XHUwMWRiXHUwMWQ5XHUwMWQ1XHUwMTc0XHhkZFx1MDE3OFx1MDE3Nlx1MDE3OVx1MDE3ZFx1MDE3YiJdLFsiOGZhYmExIiwiXHhlMVx4ZTBceGU0XHhlMlx1MDEwM1x1MDFjZVx1MDEwMVx1MDEwNVx4ZTVceGUzXHUwMTA3XHUwMTA5XHUwMTBkXHhlN1x1MDEw''@;'; put 'put ''Ylx1MDEwZlx4ZTlceGU4XHhlYlx4ZWFcdTAxMWJcdTAxMTdcdTAxMTNcdTAxMTlcdTAxZjVcdTAxMWRcdTAxMWYiXSxbIjhmYWJiZCIsIlx1MDEyMVx1MDEyNVx4ZWRceGVjXHhlZlx4ZWVcdTAxZDAiXSxbIjhmYWJjNSIsIlx1MDEyYlx1MDEyZlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzYVx1''@;'; put 'put ''MDEzZVx1MDEzY1x1MDE0NFx1MDE0OFx1MDE0Nlx4ZjFceGYzXHhmMlx4ZjZceGY0XHUwMWQyXHUwMTUxXHUwMTRkXHhmNVx1MDE1NVx1MDE1OVx1MDE1N1x1MDE1Ylx1MDE1ZFx1MDE2MVx1MDE1Zlx1MDE2NVx1MDE2M1x4ZmFceGY5XHhmY1x4ZmJcdTAxNmRcdTAxZDRcdTAxNzFcdTAxNmJc''@;'; put 'put ''dTAxNzNcdTAxNmZcdTAxNjlcdTAxZDhcdTAxZGNcdTAxZGFcdTAxZDZcdTAxNzVceGZkXHhmZlx1MDE3N1x1MDE3YVx1MDE3ZVx1MDE3YyJdLFsiOGZiMGExIiwiXHU0ZTAyXHU0ZTA0XHU0ZTA1XHU0ZTBjXHU0ZTEyXHU0ZTFmXHU0ZTIzXHU0ZTI0XHU0ZTI4XHU0ZTJiXHU0ZTJlXHU0ZTJm''@;'; put 'put ''XHU0ZTMwXHU0ZTM1XHU0ZTQwXHU0ZTQxXHU0ZTQ0XHU0ZTQ3XHU0ZTUxXHU0ZTVhXHU0ZTVjXHU0ZTYzXHU0ZTY4XHU0ZTY5XHU0ZTc0XHU0ZTc1XHU0ZTc5XHU0ZTdmXHU0ZThkXHU0ZTk2XHU0ZTk3XHU0ZTlkXHU0ZWFmXHU0ZWI5XHU0ZWMzXHU0ZWQwXHU0ZWRhXHU0ZWRiXHU0ZWUwXHU0''@;'; put 'put ''ZWUxXHU0ZWUyXHU0ZWU4XHU0ZWVmXHU0ZWYxXHU0ZWYzXHU0ZWY1XHU0ZWZkXHU0ZWZlXHU0ZWZmXHU0ZjAwXHU0ZjAyXHU0ZjAzXHU0ZjA4XHU0ZjBiXHU0ZjBjXHU0ZjEyXHU0ZjE1XHU0ZjE2XHU0ZjE3XHU0ZjE5XHU0ZjJlXHU0ZjMxXHU0ZjYwXHU0ZjMzXHU0ZjM1XHU0ZjM3XHU0ZjM5''@;'; put 'put ''XHU0ZjNiXHU0ZjNlXHU0ZjQwXHU0ZjQyXHU0ZjQ4XHU0ZjQ5XHU0ZjRiXHU0ZjRjXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjU4XHU0ZjVmXHU0ZjYzXHU0ZjZhXHU0ZjZjXHU0ZjZlXHU0ZjcxXHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjdlXHU0ZjgxXHU0ZjgyXHU0Zjg0Il0s''@;'; put 'put ''WyI4ZmIxYTEiLCJcdTRmODVcdTRmODlcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTRcdTRmOTdcdTRmOTlcdTRmOWFcdTRmOWVcdTRmOWZcdTRmYjJcdTRmYjdcdTRmYjlcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzVcdTRmYzZcdTRm''@;'; put 'put ''YzhcdTRmYzlcdTRmY2JcdTRmY2NcdTRmY2RcdTRmY2ZcdTRmZDJcdTRmZGNcdTRmZTBcdTRmZTJcdTRmZjBcdTRmZjJcdTRmZmNcdTRmZmRcdTRmZmZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMGFcdTUwMGNcdTUwMGVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMWJcdTUwMWNc''@;'; put 'put ''dTUwMWRcdTUwMWVcdTUwMjJcdTUwMjdcdTUwMmVcdTUwMzBcdTUwMzJcdTUwMzNcdTUwMzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZcdTUwNGFcdTUwNGNcdTUwNGVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNWZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUw''@;'; put 'put ''NjdcdTUwNmFcdTUwNmRcdTUwNzBcdTUwNzFcdTUwM2JcdTUwODFcdTUwODNcdTUwODRcdTUwODZcdTUwOGFcdTUwOGVcdTUwOGZcdTUwOTAiXSxbIjhmYjJhMSIsIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Ylx1NTA5Y1x1NTA5ZSIsNCwiXHU1MGFhXHU1MGFmXHU1MGIwXHU1MGI5''@;'; put 'put ''XHU1MGJhXHU1MGJkXHU1MGMwXHU1MGMzXHU1MGM0XHU1MGM3XHU1MGNjXHU1MGNlXHU1MGQwXHU1MGQzXHU1MGQ0XHU1MGQ4XHU1MGRjXHU1MGRkXHU1MGRmXHU1MGUyXHU1MGU0XHU1MGU2XHU1MGU4XHU1MGU5XHU1MGVmXHU1MGYxXHU1MGY2XHU1MGZhXHU1MGZlXHU1MTAzXHU1MTA2XHU1''@;'; put 'put ''MTA3XHU1MTA4XHU1MTBiXHU1MTBjXHU1MTBkXHU1MTBlXHU1MGYyXHU1MTEwXHU1MTE3XHU1MTE5XHU1MTFiXHU1MTFjXHU1MTFkXHU1MTFlXHU1MTIzXHU1MTI3XHU1MTI4XHU1MTJjXHU1MTJkXHU1MTJmXHU1MTMxXHU1MTMzXHU1MTM0XHU1MTM1XHU1MTM4XHU1MTM5XHU1MTQyXHU1MTRh''@;'; put 'put ''XHU1MTRmXHU1MTUzXHU1MTU1XHU1MTU3XHU1MTU4XHU1MTVmXHU1MTY0XHU1MTY2XHU1MTdlXHU1MTgzXHU1MTg0XHU1MThiXHU1MThlXHU1MTk4XHU1MTlkXHU1MWExXHU1MWEzXHU1MWFkXHU1MWI4XHU1MWJhXHU1MWJjXHU1MWJlXHU1MWJmXHU1MWMyIl0sWyI4ZmIzYTEiLCJcdTUxYzhc''@;'; put 'put ''dTUxY2ZcdTUxZDFcdTUxZDJcdTUxZDNcdTUxZDVcdTUxZDhcdTUxZGVcdTUxZTJcdTUxZTVcdTUxZWVcdTUxZjJcdTUxZjNcdTUxZjRcdTUxZjdcdTUyMDFcdTUyMDJcdTUyMDVcdTUyMTJcdTUyMTNcdTUyMTVcdTUyMTZcdTUyMThcdTUyMjJcdTUyMjhcdTUyMzFcdTUyMzJcdTUyMzVcdTUy''@;'; put 'put ''M2NcdTUyNDVcdTUyNDlcdTUyNTVcdTUyNTdcdTUyNThcdTUyNWFcdTUyNWNcdTUyNWZcdTUyNjBcdTUyNjFcdTUyNjZcdTUyNmVcdTUyNzdcdTUyNzhcdTUyNzlcdTUyODBcdTUyODJcdTUyODVcdTUyOGFcdTUyOGNcdTUyOTNcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOWFcdTUyOWNc''@;'; put 'put ''dTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWZcdTUyYjBcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYmFcdTUyYmJcdTUyYmRcdTUyYzBcdTUyYzRcdTUyYzZcdTUyYzhcdTUyY2NcdTUyY2ZcdTUyZDFcdTUyZDRcdTUyZDZcdTUyZGJcdTUyZGNcdTUyZTFcdTUyZTVcdTUyZThcdTUyZTlcdTUy''@;'; put 'put ''ZWFcdTUyZWNcdTUyZjBcdTUyZjFcdTUyZjRcdTUyZjZcdTUyZjdcdTUzMDBcdTUzMDNcdTUzMGFcdTUzMGIiXSxbIjhmYjRhMSIsIlx1NTMwY1x1NTMxMVx1NTMxM1x1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMy''@;'; put 'put ''ZFx1NTMzMFx1NTMzMlx1NTMzNVx1NTMzY1x1NTMzZFx1NTMzZVx1NTM0Mlx1NTM0Y1x1NTM0Ylx1NTM1OVx1NTM1Ylx1NTM2MVx1NTM2M1x1NTM2NVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3OVx1NTM3ZVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4ZVx1NTM5M1x1NTM5NFx1NTM5OVx1NTM5ZFx1''@;'; put 'put ''NTNhMVx1NTNhNFx1NTNhYVx1NTNhYlx1NTNhZlx1NTNiMlx1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiYVx1NTNiZFx1NTNjMFx1NTNjNVx1NTNjZlx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkZFx1NTNkZVx1NTNlMFx1NTNlNlx1NTNlN1x1NTNmNVx1NTQwMlx1NTQxM1x1NTQx''@;'; put 'put ''YVx1NTQyMVx1NTQyN1x1NTQyOFx1NTQyYVx1NTQyZlx1NTQzMVx1NTQzNFx1NTQzNVx1NTQ0M1x1NTQ0NFx1NTQ0N1x1NTQ0ZFx1NTQ0Zlx1NTQ1ZVx1NTQ2Mlx1NTQ2NFx1NTQ2Nlx1NTQ2N1x1NTQ2OVx1NTQ2Ylx1NTQ2ZFx1NTQ2ZVx1NTQ3NFx1NTQ3ZiJdLFsiOGZiNWExIiwiXHU1NDgx''@;'; put 'put ''XHU1NDgzXHU1NDg1XHU1NDg4XHU1NDg5XHU1NDhkXHU1NDkxXHU1NDk1XHU1NDk2XHU1NDljXHU1NDlmXHU1NGExXHU1NGE2XHU1NGE3XHU1NGE5XHU1NGFhXHU1NGFkXHU1NGFlXHU1NGIxXHU1NGI3XHU1NGI5XHU1NGJhXHU1NGJiXHU1NGJmXHU1NGM2XHU1NGNhXHU1NGNkXHU1NGNlXHU1''@;'; put 'put ''NGUwXHU1NGVhXHU1NGVjXHU1NGVmXHU1NGY2XHU1NGZjXHU1NGZlXHU1NGZmXHU1NTAwXHU1NTAxXHU1NTA1XHU1NTA4XHU1NTA5XHU1NTBjXHU1NTBkXHU1NTBlXHU1NTE1XHU1NTJhXHU1NTJiXHU1NTMyXHU1NTM1XHU1NTM2XHU1NTNiXHU1NTNjXHU1NTNkXHU1NTQxXHU1NTQ3XHU1NTQ5''@;'; put 'put ''XHU1NTRhXHU1NTRkXHU1NTUwXHU1NTUxXHU1NTU4XHU1NTVhXHU1NTViXHU1NTVlXHU1NTYwXHU1NTYxXHU1NTY0XHU1NTY2XHU1NTdmXHU1NTgxXHU1NTgyXHU1NTg2XHU1NTg4XHU1NThlXHU1NThmXHU1NTkxXHU1NTkyXHU1NTkzXHU1NTk0XHU1NTk3XHU1NWEzXHU1NWE0XHU1NWFkXHU1''@;'; put 'put ''NWIyXHU1NWJmXHU1NWMxXHU1NWMzXHU1NWM2XHU1NWM5XHU1NWNiXHU1NWNjXHU1NWNlXHU1NWQxXHU1NWQyIl0sWyI4ZmI2YTEiLCJcdTU1ZDNcdTU1ZDdcdTU1ZDhcdTU1ZGJcdTU1ZGVcdTU1ZTJcdTU1ZTlcdTU1ZjZcdTU1ZmZcdTU2MDVcdTU2MDhcdTU2MGFcdTU2MGQiLDUsIlx1NTYx''@;'; put 'put ''OVx1NTYyY1x1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOVx1NTYzYlx1NTYzY1x1NTYzZFx1NTYzZlx1NTY0MFx1NTY0MVx1NTY0M1x1NTY0NFx1NTY0Nlx1NTY0OVx1NTY0Ylx1NTY0ZFx1NTY0Zlx1NTY1NFx1NTY1ZVx1NTY2MFx1NTY2MVx1NTY2Mlx1NTY2M1x1NTY2Nlx1NTY2OVx1''@;'; put 'put ''NTY2ZFx1NTY2Zlx1NTY3MVx1NTY3Mlx1NTY3NVx1NTY4NFx1NTY4NVx1NTY4OFx1NTY4Ylx1NTY4Y1x1NTY5NVx1NTY5OVx1NTY5YVx1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZiMVx1NTZiM1x1NTZiN1x1NTZiZVx1NTZj''@;'; put 'put ''NVx1NTZjOVx1NTZjYVx1NTZjYlx1NTZjZlx1NTZkMFx1NTZjY1x1NTZjZFx1NTZkOVx1NTZkY1x1NTZkZFx1NTZkZlx1NTZlMVx1NTZlNCIsNCwiXHU1NmYxXHU1NmViXHU1NmVkIl0sWyI4ZmI3YTEiLCJcdTU2ZjZcdTU2ZjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MGFcdTU3MGNcdTU3MTFc''@;'; put 'put ''dTU3MTVcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MjBcdTU3MjJcdTU3MjNcdTU3MjRcdTU3MjVcdTU3MjlcdTU3MmFcdTU3MmNcdTU3MmVcdTU3MmZcdTU3MzNcdTU3MzRcdTU3M2RcdTU3M2VcdTU3M2ZcdTU3NDVcdTU3NDZcdTU3NGNcdTU3NGRcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3''@;'; put 'put ''NjhcdTU3NmJcdTU3NmQiLDQsIlx1NTc3M1x1NTc3NFx1NTc3NVx1NTc3N1x1NTc3OVx1NTc3YVx1NTc3Ylx1NTc3Y1x1NTc3ZVx1NTc4MVx1NTc4M1x1NTc4Y1x1NTc5NFx1NTc5N1x1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhMVx1NTc5NVx1NTdhN1x1NTdhOFx1''@;'; put 'put ''NTdhOVx1NTdhY1x1NTdiOFx1NTdiZFx1NTdjN1x1NTdjOFx1NTdjY1x1NTdjZlx1NTdkNVx1NTdkZFx1NTdkZVx1NTdlNFx1NTdlNlx1NTdlN1x1NTdlOVx1NTdlZFx1NTdmMFx1NTdmNVx1NTdmNlx1NTdmOFx1NTdmZFx1NTdmZVx1NTdmZlx1NTgwM1x1NTgwNFx1NTgwOFx1NTgwOVx1NTdl''@;'; put 'put ''MSJdLFsiOGZiOGExIiwiXHU1ODBjXHU1ODBkXHU1ODFiXHU1ODFlXHU1ODFmXHU1ODIwXHU1ODI2XHU1ODI3XHU1ODJkXHU1ODMyXHU1ODM5XHU1ODNmXHU1ODQ5XHU1ODRjXHU1ODRkXHU1ODRmXHU1ODUwXHU1ODU1XHU1ODVmXHU1ODYxXHU1ODY0XHU1ODY3XHU1ODY4XHU1ODc4XHU1ODdj''@;'; put 'put ''XHU1ODdmXHU1ODgwXHU1ODgxXHU1ODg3XHU1ODg4XHU1ODg5XHU1ODhhXHU1ODhjXHU1ODhkXHU1ODhmXHU1ODkwXHU1ODk0XHU1ODk2XHU1ODlkXHU1OGEwXHU1OGExXHU1OGEyXHU1OGE2XHU1OGE5XHU1OGIxXHU1OGIyXHU1OGM0XHU1OGJjXHU1OGMyXHU1OGM4XHU1OGNkXHU1OGNlXHU1''@;'; put 'put ''OGQwXHU1OGQyXHU1OGQ0XHU1OGQ2XHU1OGRhXHU1OGRkXHU1OGUxXHU1OGUyXHU1OGU5XHU1OGYzXHU1OTA1XHU1OTA2XHU1OTBiXHU1OTBjXHU1OTEyXHU1OTEzXHU1OTE0XHU4NjQxXHU1OTFkXHU1OTIxXHU1OTIzXHU1OTI0XHU1OTI4XHU1OTJmXHU1OTMwXHU1OTMzXHU1OTM1XHU1OTM2''@;'; put 'put ''XHU1OTNmXHU1OTQzXHU1OTQ2XHU1OTUyXHU1OTUzXHU1OTU5XHU1OTViXHU1OTVkXHU1OTVlXHU1OTVmXHU1OTYxXHU1OTYzXHU1OTZiXHU1OTZkIl0sWyI4ZmI5YTEiLCJcdTU5NmZcdTU5NzJcdTU5NzVcdTU5NzZcdTU5NzlcdTU5N2JcdTU5N2NcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OTJc''@;'; put 'put ''dTU5OTVcdTU5OTdcdTU5OWZcdTU5YTRcdTU5YTdcdTU5YWRcdTU5YWVcdTU5YWZcdTU5YjBcdTU5YjNcdTU5YjdcdTU5YmFcdTU5YmNcdTU5YzFcdTU5YzNcdTU5YzRcdTU5YzhcdTU5Y2FcdTU5Y2RcdTU5ZDJcdTU5ZGRcdTU5ZGVcdTU5ZGZcdTU5ZTNcdTU5ZTRcdTU5ZTdcdTU5ZWVcdTU5''@;'; put 'put ''ZWZcdTU5ZjFcdTU5ZjJcdTU5ZjRcdTU5ZjdcdTVhMDBcdTVhMDRcdTVhMGNcdTVhMGRcdTVhMGVcdTVhMTJcdTVhMTNcdTVhMWVcdTVhMjNcdTVhMjRcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmRcdTVhMzBcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGNcdTVhNTBcdTVhNTVcdTVhNWVc''@;'; put 'put ''dTVhNjNcdTVhNjVcdTVhNjdcdTVhNmRcdTVhNzdcdTVhN2FcdTVhN2JcdTVhN2VcdTVhOGJcdTVhOTBcdTVhOTNcdTVhOTZcdTVhOTlcdTVhOWNcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTJcdTVhYTdcdTVhYWNcdTVhYjFcdTVhYjJcdTVhYjNcdTVhYjVcdTVhYjhcdTVhYmFcdTVhYmJcdTVh''@;'; put 'put ''YmYiXSxbIjhmYmFhMSIsIlx1NWFjNFx1NWFjNlx1NWFjOFx1NWFjZlx1NWFkYVx1NWFkY1x1NWFlMFx1NWFlNVx1NWFlYVx1NWFlZVx1NWFmNVx1NWFmNlx1NWFmZFx1NWIwMFx1NWIwMVx1NWIwOFx1NWIxN1x1NWIzNFx1NWIxOVx1NWIxYlx1NWIxZFx1NWIyMVx1NWIyNVx1NWIyZFx1NWIz''@;'; put 'put ''OFx1NWI0MVx1NWI0Ylx1NWI0Y1x1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2OFx1NWI2ZVx1NWI2Zlx1NWI3Y1x1NWI3ZFx1NWI3ZVx1NWI3Zlx1NWI4MVx1NWI4NFx1NWI4Nlx1NWI4YVx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5M1x1NWI5NFx1NWI5Nlx1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1''@;'; put 'put ''NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjZFx1NWJjZlx1NWJkNiIsNCwiXHU1YmUwXHU1YmVmXHU1YmYxXHU1YmY0XHU1YmZkXHU1YzBjXHU1YzE3XHU1YzFlXHU1YzFmXHU1YzIzXHU1YzI2XHU1YzI5XHU1YzJiXHU1YzJjXHU1YzJlXHU1YzMw''@;'; put 'put ''XHU1YzMyXHU1YzM1XHU1YzM2XHU1YzU5XHU1YzVhXHU1YzVjXHU1YzYyXHU1YzYzXHU1YzY3XHU1YzY4XHU1YzY5Il0sWyI4ZmJiYTEiLCJcdTVjNmRcdTVjNzBcdTVjNzRcdTVjNzVcdTVjN2FcdTVjN2JcdTVjN2NcdTVjN2RcdTVjODdcdTVjODhcdTVjOGFcdTVjOGZcdTVjOTJcdTVjOWRc''@;'; put 'put ''dTVjOWZcdTVjYTBcdTVjYTJcdTVjYTNcdTVjYTZcdTVjYWFcdTVjYjJcdTVjYjRcdTVjYjVcdTVjYmFcdTVjYzlcdTVjY2JcdTVjZDJcdTVjZGRcdTVjZDdcdTVjZWVcdTVjZjFcdTVjZjJcdTVjZjRcdTVkMDFcdTVkMDZcdTVkMGRcdTVkMTJcdTVkMmJcdTVkMjNcdTVkMjRcdTVkMjZcdTVk''@;'; put 'put ''MjdcdTVkMzFcdTVkMzRcdTVkMzlcdTVkM2RcdTVkM2ZcdTVkNDJcdTVkNDNcdTVkNDZcdTVkNDhcdTVkNTVcdTVkNTFcdTVkNTlcdTVkNGFcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjRcdTVkNmFcdTVkNmRcdTVkNzBcdTVkNzlcdTVkN2FcdTVkN2VcdTVkN2ZcdTVkODFcdTVkODNc''@;'; put 'put ''dTVkODhcdTVkOGFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTlcdTVkOWJcdTVkOWZcdTVkYTBcdTVkYTdcdTVkYWJcdTVkYjBcdTVkYjRcdTVkYjhcdTVkYjlcdTVkYzNcdTVkYzdcdTVkY2JcdTVkZDBcdTVkY2VcdTVkZDhcdTVkZDlcdTVkZTBcdTVkZTQiXSxbIjhmYmNhMSIsIlx1''@;'; put 'put ''NWRlOVx1NWRmOFx1NWRmOVx1NWUwMFx1NWUwN1x1NWUwZFx1NWUxMlx1NWUxNFx1NWUxNVx1NWUxOFx1NWUxZlx1NWUyMFx1NWUyZVx1NWUyOFx1NWUzMlx1NWUzNVx1NWUzZVx1NWU0Ylx1NWU1MFx1NWU0OVx1NWU1MVx1NWU1Nlx1NWU1OFx1NWU1Ylx1NWU1Y1x1NWU1ZVx1NWU2OFx1NWU2''@;'; put 'put ''YSIsNCwiXHU1ZTcwXHU1ZTgwXHU1ZThiXHU1ZThlXHU1ZWEyXHU1ZWE0XHU1ZWE1XHU1ZWE4XHU1ZWFhXHU1ZWFjXHU1ZWIxXHU1ZWIzXHU1ZWJkXHU1ZWJlXHU1ZWJmXHU1ZWM2XHU1ZWNjXHU1ZWNiXHU1ZWNlXHU1ZWQxXHU1ZWQyXHU1ZWQ0XHU1ZWQ1XHU1ZWRjXHU1ZWRlXHU1ZWU1XHU1''@;'; put 'put ''ZWViXHU1ZjAyXHU1ZjA2XHU1ZjA3XHU1ZjA4XHU1ZjBlXHU1ZjE5XHU1ZjFjXHU1ZjFkXHU1ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjM0XHU1ZjM2XHU1ZjNiXHU1ZjNkXHU1ZjNmXHU1ZjQwXHU1ZjQ0XHU1ZjQ1XHU1ZjQ3XHU1ZjRk''@;'; put 'put ''XHU1ZjUwXHU1ZjU0XHU1ZjU4XHU1ZjViXHU1ZjYwXHU1ZjYzXHU1ZjY0XHU1ZjY3Il0sWyI4ZmJkYTEiLCJcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmODlcdTVmOGRcdTVmOGZcdTVmOTZcdTVmOWNcdTVmOWRcdTVmYTJcdTVmYTdcdTVmYWJc''@;'; put 'put ''dTVmYTRcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjhcdTVmYzRcdTVmYzdcdTVmYzhcdTVmYzlcdTVmY2JcdTVmZDAiLDQsIlx1NWZkZVx1NWZlMVx1NWZlMlx1NWZlOFx1NWZlOVx1NWZlYVx1NWZlY1x1NWZlZFx1NWZlZVx1NWZlZlx1NWZmMlx1NWZmM1x1NWZmNlx1NWZmYVx1NWZm''@;'; put 'put ''Y1x1NjAwN1x1NjAwYVx1NjAwZFx1NjAxM1x1NjAxNFx1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZlx1NjAyNFx1NjAyZFx1NjAzM1x1NjAzNVx1NjA0MFx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0Y1x1NjA1MVx1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1ZFx1NjA2MVx1NjA2N1x1NjA3MVx1NjA3ZVx1''@;'; put 'put ''NjA3Zlx1NjA4Mlx1NjA4Nlx1NjA4OFx1NjA4YVx1NjA4ZVx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5OFx1NjA5ZFx1NjA5ZVx1NjBhMlx1NjBhNFx1NjBhNVx1NjBhOFx1NjBiMFx1NjBiMVx1NjBiNyJdLFsiOGZiZWExIiwiXHU2MGJiXHU2MGJlXHU2MGMyXHU2MGM0XHU2MGM4XHU2MGM5XHU2''@;'; put 'put ''MGNhXHU2MGNiXHU2MGNlXHU2MGNmXHU2MGQ0XHU2MGQ1XHU2MGQ5XHU2MGRiXHU2MGRkXHU2MGRlXHU2MGUyXHU2MGU1XHU2MGYyXHU2MGY1XHU2MGY4XHU2MGZjXHU2MGZkXHU2MTAyXHU2MTA3XHU2MTBhXHU2MTBjXHU2MTEwIiw0LCJcdTYxMTZcdTYxMTdcdTYxMTlcdTYxMWNcdTYxMWVc''@;'; put 'put ''dTYxMjJcdTYxMmFcdTYxMmJcdTYxMzBcdTYxMzFcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzlcdTYxNDFcdTYxNDVcdTYxNDZcdTYxNDlcdTYxNWVcdTYxNjBcdTYxNmNcdTYxNzJcdTYxNzhcdTYxN2JcdTYxN2NcdTYxN2ZcdTYxODBcdTYxODFcdTYxODNcdTYxODRcdTYxOGJcdTYxOGRcdTYx''@;'; put 'put ''OTJcdTYxOTNcdTYxOTdcdTYxOThcdTYxOWNcdTYxOWRcdTYxOWZcdTYxYTBcdTYxYTVcdTYxYThcdTYxYWFcdTYxYWRcdTYxYjhcdTYxYjlcdTYxYmNcdTYxYzBcdTYxYzFcdTYxYzJcdTYxY2VcdTYxY2ZcdTYxZDVcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTFcdTYxZTJcdTYxZTdc''@;'; put 'put ''dTYxZTlcdTYxZTUiXSxbIjhmYmZhMSIsIlx1NjFlY1x1NjFlZFx1NjFlZlx1NjIwMVx1NjIwM1x1NjIwNFx1NjIwN1x1NjIxM1x1NjIxNVx1NjIxY1x1NjIyMFx1NjIyMlx1NjIyM1x1NjIyN1x1NjIyOVx1NjIyYlx1NjIzOVx1NjIzZFx1NjI0Mlx1NjI0M1x1NjI0NFx1NjI0Nlx1NjI0Y1x1''@;'; put 'put ''NjI1MFx1NjI1MVx1NjI1Mlx1NjI1NFx1NjI1Nlx1NjI1YVx1NjI1Y1x1NjI2NFx1NjI2ZFx1NjI2Zlx1NjI3M1x1NjI3YVx1NjI3ZFx1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjJhNlx1NjJhOFx1NjJiM1x1NjJiNlx1NjJiN1x1NjJiYVx1NjJiZVx1NjJiZlx1NjJjNFx1NjJjZVx1NjJk''@;'; put 'put ''NVx1NjJkNlx1NjJkYVx1NjJlYVx1NjJmMlx1NjJmNFx1NjJmY1x1NjJmZFx1NjMwM1x1NjMwNFx1NjMwYVx1NjMwYlx1NjMwZFx1NjMxMFx1NjMxM1x1NjMxNlx1NjMxOFx1NjMyOVx1NjMyYVx1NjMyZFx1NjMzNVx1NjMzNlx1NjMzOVx1NjMzY1x1NjM0MVx1NjM0Mlx1NjM0M1x1NjM0NFx1''@;'; put 'put ''NjM0Nlx1NjM0YVx1NjM0Ylx1NjM0ZVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1OFx1NjM1Ylx1NjM2NVx1NjM2Nlx1NjM2Y1x1NjM2ZFx1NjM3MVx1NjM3NFx1NjM3NSJdLFsiOGZjMGExIiwiXHU2Mzc4XHU2MzdjXHU2MzdkXHU2MzdmXHU2MzgyXHU2Mzg0XHU2Mzg3XHU2MzhhXHU2MzkwXHU2''@;'; put 'put ''Mzk0XHU2Mzk1XHU2Mzk5XHU2MzlhXHU2MzllXHU2M2E0XHU2M2E2XHU2M2FkXHU2M2FlXHU2M2FmXHU2M2JkXHU2M2MxXHU2M2M1XHU2M2M4XHU2M2NlXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2RjXHU2M2UwXHU2M2U1XHU2M2VhXHU2M2VjXHU2M2YyXHU2M2YzXHU2M2Y1XHU2M2Y4''@;'; put 'put ''XHU2M2Y5XHU2NDA5XHU2NDBhXHU2NDEwXHU2NDEyXHU2NDE0XHU2NDE4XHU2NDFlXHU2NDIwXHU2NDIyXHU2NDI0XHU2NDI1XHU2NDI5XHU2NDJhXHU2NDJmXHU2NDMwXHU2NDM1XHU2NDNkXHU2NDNmXHU2NDRiXHU2NDRmXHU2NDUxXHU2NDUyXHU2NDUzXHU2NDU0XHU2NDVhXHU2NDViXHU2''@;'; put 'put ''NDVjXHU2NDVkXHU2NDVmXHU2NDYwXHU2NDYxXHU2NDYzXHU2NDZkXHU2NDczXHU2NDc0XHU2NDdiXHU2NDdkXHU2NDg1XHU2NDg3XHU2NDhmXHU2NDkwXHU2NDkxXHU2NDk4XHU2NDk5XHU2NDliXHU2NDlkXHU2NDlmXHU2NGExXHU2NGEzXHU2NGE2XHU2NGE4XHU2NGFjXHU2NGIzXHU2NGJk''@;'; put 'put ''XHU2NGJlXHU2NGJmIl0sWyI4ZmMxYTEiLCJcdTY0YzRcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2VcdTY0ZDBcdTY0ZDFcdTY0ZDVcdTY0ZDdcdTY0ZTRcdTY0ZTVcdTY0ZTlcdTY0ZWFcdTY0ZWRcdTY0ZjBcdTY0ZjVcdTY0ZjdcdTY0ZmJcdTY0ZmZcdTY1MDFcdTY1MDRcdTY1MDhc''@;'; put 'put ''dTY1MDlcdTY1MGFcdTY1MGZcdTY1MTNcdTY1MTRcdTY1MTZcdTY1MTlcdTY1MWJcdTY1MWVcdTY1MWZcdTY1MjJcdTY1MjZcdTY1MjlcdTY1MmVcdTY1MzFcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDNcdTY1NDdcdTY1NDlcdTY1NTBcdTY1NTJcdTY1NTRcdTY1NWZcdTY1NjBcdTY1NjdcdTY1''@;'; put 'put ''NmJcdTY1N2FcdTY1N2RcdTY1ODFcdTY1ODVcdTY1OGFcdTY1OTJcdTY1OTVcdTY1OThcdTY1OWRcdTY1YTBcdTY1YTNcdTY1YTZcdTY1YWVcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YmZcdTY1YzJcdTY1YzhcdTY1YzlcdTY1Y2VcdTY1ZDBcdTY1ZDRcdTY1ZDZcdTY1ZDhcdTY1ZGZcdTY1ZjBc''@;'; put 'put ''dTY1ZjJcdTY1ZjRcdTY1ZjVcdTY1ZjlcdTY1ZmVcdTY1ZmZcdTY2MDBcdTY2MDRcdTY2MDhcdTY2MDlcdTY2MGRcdTY2MTFcdTY2MTJcdTY2MTVcdTY2MTZcdTY2MWQiXSxbIjhmYzJhMSIsIlx1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1''@;'; put 'put ''NjYyY1x1NjYyZVx1NjYzMFx1NjYzMVx1NjYzM1x1NjYzOVx1NjYzN1x1NjY0MFx1NjY0NVx1NjY0Nlx1NjY0YVx1NjY0Y1x1NjY1MVx1NjY0ZVx1NjY1N1x1NjY1OFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY2MFx1NjY2MVx1NjZmYlx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY3ZVx1NjY3M1x1NjY3''@;'; put 'put ''NVx1NjY3Zlx1NjY3N1x1NjY3OFx1NjY3OVx1NjY3Ylx1NjY4MFx1NjY3Y1x1NjY4Ylx1NjY4Y1x1NjY4ZFx1NjY5MFx1NjY5Mlx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5Zlx1NjZhMFx1NjZhNFx1NjZhZFx1NjZiMVx1NjZiMlx1NjZiNVx1NjZiYlx1NjZiZlx1NjZjMFx1NjZjMlx1''@;'; put 'put ''NjZjM1x1NjZjOFx1NjZjY1x1NjZjZVx1NjZjZlx1NjZkNFx1NjZkYlx1NjZkZlx1NjZlOFx1NjZlYlx1NjZlY1x1NjZlZVx1NjZmYVx1NjcwNVx1NjcwN1x1NjcwZVx1NjcxM1x1NjcxOVx1NjcxY1x1NjcyMFx1NjcyMlx1NjczM1x1NjczZVx1Njc0NVx1Njc0N1x1Njc0OFx1Njc0Y1x1Njc1''@;'; put 'put ''NFx1Njc1NVx1Njc1ZCJdLFsiOGZjM2ExIiwiXHU2NzY2XHU2NzZjXHU2NzZlXHU2Nzc0XHU2Nzc2XHU2NzdiXHU2NzgxXHU2Nzg0XHU2NzhlXHU2NzhmXHU2NzkxXHU2NzkzXHU2Nzk2XHU2Nzk4XHU2Nzk5XHU2NzliXHU2N2IwXHU2N2IxXHU2N2IyXHU2N2I1XHU2N2JiXHU2N2JjXHU2N2Jk''@;'; put 'put ''XHU2N2Y5XHU2N2MwXHU2N2MyXHU2N2MzXHU2N2M1XHU2N2M4XHU2N2M5XHU2N2QyXHU2N2Q3XHU2N2Q5XHU2N2RjXHU2N2UxXHU2N2U2XHU2N2YwXHU2N2YyXHU2N2Y2XHU2N2Y3XHU2ODUyXHU2ODE0XHU2ODE5XHU2ODFkXHU2ODFmXHU2ODI4XHU2ODI3XHU2ODJjXHU2ODJkXHU2ODJmXHU2''@;'; put 'put ''ODMwXHU2ODMxXHU2ODMzXHU2ODNiXHU2ODNmXHU2ODQ0XHU2ODQ1XHU2ODRhXHU2ODRjXHU2ODU1XHU2ODU3XHU2ODU4XHU2ODViXHU2ODZiXHU2ODZlIiw0LCJcdTY4NzVcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OWFc''@;'; put 'put ''dTY4OWNcdTY4YTFcdTY4YTNcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWVcdTY4YjJcdTY4YmJcdTY4YzVcdTY4YzhcdTY4Y2NcdTY4Y2YiXSxbIjhmYzRhMSIsIlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNlx1NjhkOVx1NjhkY1x1NjhkZFx1NjhlNVx1NjhlOFx1NjhlYVx1NjhlYlx1NjhlY1x1''@;'; put 'put ''NjhlZFx1NjhmMFx1NjhmMVx1NjhmNVx1NjhmNlx1NjhmYlx1NjhmY1x1NjhmZFx1NjkwNlx1NjkwOVx1NjkwYVx1NjkxMFx1NjkxMVx1NjkxM1x1NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzYlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0ZVx1Njk1N1x1Njk1Ylx1Njk2''@;'; put 'put ''M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Y1x1Njk3MFx1Njk3MVx1Njk3Mlx1Njk3YVx1Njk3Ylx1Njk3Zlx1Njk4MFx1Njk4ZFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlhMVx1NjlhNVx1NjlhNlx1NjlhOFx1NjlhYlx1NjlhZFx1NjlhZlx1NjliN1x1NjliOFx1NjliYVx1''@;'; put 'put ''NjliY1x1NjljNVx1NjljOFx1NjlkMVx1NjlkNlx1NjlkN1x1NjllMlx1NjllNVx1NjllZVx1NjllZlx1NjlmMVx1NjlmM1x1NjlmNVx1NjlmZVx1NmEwMFx1NmEwMVx1NmEwM1x1NmEwZlx1NmExMVx1NmExNVx1NmExYVx1NmExZFx1NmEyMFx1NmEyNFx1NmEyOFx1NmEzMFx1NmEzMiJdLFsi''@;'; put 'put ''OGZjNWExIiwiXHU2YTM0XHU2YTM3XHU2YTNiXHU2YTNlXHU2YTNmXHU2YTQ1XHU2YTQ2XHU2YTQ5XHU2YTRhXHU2YTRlXHU2YTUwXHU2YTUxXHU2YTUyXHU2YTU1XHU2YTU2XHU2YTViXHU2YTY0XHU2YTY3XHU2YTZhXHU2YTcxXHU2YTczXHU2YTdlXHU2YTgxXHU2YTgzXHU2YTg2XHU2YTg3''@;'; put 'put ''XHU2YTg5XHU2YThiXHU2YTkxXHU2YTliXHU2YTlkXHU2YTllXHU2YTlmXHU2YWE1XHU2YWFiXHU2YWFmXHU2YWIwXHU2YWIxXHU2YWI0XHU2YWJkXHU2YWJlXHU2YWJmXHU2YWM2XHU2YWM5XHU2YWM4XHU2YWNjXHU2YWQwXHU2YWQ0XHU2YWQ1XHU2YWQ2XHU2YWRjXHU2YWRkXHU2YWU0XHU2''@;'; put 'put ''YWU3XHU2YWVjXHU2YWYwXHU2YWYxXHU2YWYyXHU2YWZjXHU2YWZkXHU2YjAyXHU2YjAzXHU2YjA2XHU2YjA3XHU2YjA5XHU2YjBmXHU2YjEwXHU2YjExXHU2YjE3XHU2YjFiXHU2YjFlXHU2YjI0XHU2YjI4XHU2YjJiXHU2YjJjXHU2YjJmXHU2YjM1XHU2YjM2XHU2YjNiXHU2YjNmXHU2YjQ2''@;'; put 'put ''XHU2YjRhXHU2YjRkXHU2YjUyXHU2YjU2XHU2YjU4XHU2YjVkXHU2YjYwXHU2YjY3XHU2YjZiXHU2YjZlXHU2YjcwXHU2Yjc1XHU2YjdkIl0sWyI4ZmM2YTEiLCJcdTZiN2VcdTZiODJcdTZiODVcdTZiOTdcdTZiOWJcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYThcdTZiYTlcdTZiYWNc''@;'; put 'put ''dTZiYWRcdTZiYWVcdTZiYjBcdTZiYjhcdTZiYjlcdTZiYmRcdTZiYmVcdTZiYzNcdTZiYzRcdTZiYzlcdTZiY2NcdTZiZDZcdTZiZGFcdTZiZTFcdTZiZTNcdTZiZTZcdTZiZTdcdTZiZWVcdTZiZjFcdTZiZjdcdTZiZjlcdTZiZmZcdTZjMDJcdTZjMDRcdTZjMDVcdTZjMDlcdTZjMGRcdTZj''@;'; put 'put ''MGVcdTZjMTBcdTZjMTJcdTZjMTlcdTZjMWZcdTZjMjZcdTZjMjdcdTZjMjhcdTZjMmNcdTZjMmVcdTZjMzNcdTZjMzVcdTZjMzZcdTZjM2FcdTZjM2JcdTZjM2ZcdTZjNGFcdTZjNGJcdTZjNGRcdTZjNGZcdTZjNTJcdTZjNTRcdTZjNTlcdTZjNWJcdTZjNWNcdTZjNmJcdTZjNmRcdTZjNmZc''@;'; put 'put ''dTZjNzRcdTZjNzZcdTZjNzhcdTZjNzlcdTZjN2JcdTZjODVcdTZjODZcdTZjODdcdTZjODlcdTZjOTRcdTZjOTVcdTZjOTdcdTZjOThcdTZjOWNcdTZjOWZcdTZjYjBcdTZjYjJcdTZjYjRcdTZjYzJcdTZjYzZcdTZjY2RcdTZjY2ZcdTZjZDBcdTZjZDFcdTZjZDJcdTZjZDRcdTZjZDYiXSxb''@;'; put 'put ''IjhmYzdhMSIsIlx1NmNkYVx1NmNkY1x1NmNlMFx1NmNlN1x1NmNlOVx1NmNlYlx1NmNlY1x1NmNlZVx1NmNmMlx1NmNmNFx1NmQwNFx1NmQwN1x1NmQwYVx1NmQwZVx1NmQwZlx1NmQxMVx1NmQxM1x1NmQxYVx1NmQyNlx1NmQyN1x1NmQyOFx1NmM2N1x1NmQyZVx1NmQyZlx1NmQzMVx1NmQz''@;'; put 'put ''OVx1NmQzY1x1NmQzZlx1NmQ1N1x1NmQ1ZVx1NmQ1Zlx1NmQ2MVx1NmQ2NVx1NmQ2N1x1NmQ2Zlx1NmQ3MFx1NmQ3Y1x1NmQ4Mlx1NmQ4N1x1NmQ5MVx1NmQ5Mlx1NmQ5NFx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmRhYVx1NmRhY1x1NmRiNFx1NmRiN1x1NmRiOVx1NmRiZFx1NmRiZlx1NmRjNFx1''@;'; put 'put ''NmRjOFx1NmRjYVx1NmRjZVx1NmRjZlx1NmRkNlx1NmRkYlx1NmRkZFx1NmRkZlx1NmRlMFx1NmRlMlx1NmRlNVx1NmRlOVx1NmRlZlx1NmRmMFx1NmRmNFx1NmRmNlx1NmRmY1x1NmUwMFx1NmUwNFx1NmUxZVx1NmUyMlx1NmUyN1x1NmUzMlx1NmUzNlx1NmUzOVx1NmUzYlx1NmUzY1x1NmU0''@;'; put 'put ''NFx1NmU0NVx1NmU0OFx1NmU0OVx1NmU0Ylx1NmU0Zlx1NmU1MVx1NmU1Mlx1NmU1M1x1NmU1NFx1NmU1N1x1NmU1Y1x1NmU1ZFx1NmU1ZSJdLFsiOGZjOGExIiwiXHU2ZTYyXHU2ZTYzXHU2ZTY4XHU2ZTczXHU2ZTdiXHU2ZTdkXHU2ZThkXHU2ZTkzXHU2ZTk5XHU2ZWEwXHU2ZWE3XHU2ZWFk''@;'; put 'put ''XHU2ZWFlXHU2ZWIxXHU2ZWIzXHU2ZWJiXHU2ZWJmXHU2ZWMwXHU2ZWMxXHU2ZWMzXHU2ZWM3XHU2ZWM4XHU2ZWNhXHU2ZWNkXHU2ZWNlXHU2ZWNmXHU2ZWViXHU2ZWVkXHU2ZWVlXHU2ZWY5XHU2ZWZiXHU2ZWZkXHU2ZjA0XHU2ZjA4XHU2ZjBhXHU2ZjBjXHU2ZjBkXHU2ZjE2XHU2ZjE4XHU2''@;'; put 'put ''ZjFhXHU2ZjFiXHU2ZjI2XHU2ZjI5XHU2ZjJhXHU2ZjJmXHU2ZjMwXHU2ZjMzXHU2ZjM2XHU2ZjNiXHU2ZjNjXHU2ZjJkXHU2ZjRmXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjVkXHU2ZjVlXHU2ZjYxXHU2ZjYyXHU2ZjY4XHU2ZjZjXHU2ZjdkXHU2ZjdlXHU2Zjgz''@;'; put 'put ''XHU2Zjg3XHU2Zjg4XHU2ZjhiXHU2ZjhjXHU2ZjhkXHU2ZjkwXHU2ZjkyXHU2ZjkzXHU2Zjk0XHU2Zjk2XHU2ZjlhXHU2ZjlmXHU2ZmEwXHU2ZmE1XHU2ZmE2XHU2ZmE3XHU2ZmE4XHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2ZmI1XHU2ZmI2XHU2ZmJjXHU2ZmM1XHU2ZmM3XHU2ZmM4XHU2ZmNhIl0s''@;'; put 'put ''WyI4ZmM5YTEiLCJcdTZmZGFcdTZmZGVcdTZmZThcdTZmZTlcdTZmZjBcdTZmZjVcdTZmZjlcdTZmZmNcdTZmZmRcdTcwMDBcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMGRcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMmZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM2NcdTcwNDNcdTcwNDRcdTcwNDhcdTcw''@;'; put 'put ''NDlcdTcwNGFcdTcwNGJcdTcwNTRcdTcwNTVcdTcwNWRcdTcwNWVcdTcwNGVcdTcwNjRcdTcwNjVcdTcwNmNcdTcwNmVcdTcwNzVcdTcwNzZcdTcwN2VcdTcwODFcdTcwODVcdTcwODZcdTcwOTQiLDQsIlx1NzA5Ylx1NzBhNFx1NzBhYlx1NzBiMFx1NzBiMVx1NzBiNFx1NzBiN1x1NzBjYVx1''@;'; put 'put ''NzBkMVx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkOFx1NzBkY1x1NzBlNFx1NzBmYVx1NzEwMyIsNCwiXHU3MTBiXHU3MTBjXHU3MTBmXHU3MTFlXHU3MTIwXHU3MTJiXHU3MTJkXHU3MTJmXHU3MTMwXHU3MTMxXHU3MTM4XHU3MTQxXHU3MTQ1XHU3MTQ2XHU3MTQ3XHU3MTRhXHU3MTRi''@;'; put 'put ''XHU3MTUwXHU3MTUyXHU3MTU3XHU3MTVhXHU3MTVjXHU3MTVlXHU3MTYwIl0sWyI4ZmNhYTEiLCJcdTcxNjhcdTcxNzlcdTcxODBcdTcxODVcdTcxODdcdTcxOGNcdTcxOTJcdTcxOWFcdTcxOWJcdTcxYTBcdTcxYTJcdTcxYWZcdTcxYjBcdTcxYjJcdTcxYjNcdTcxYmFcdTcxYmZcdTcxYzBc''@;'; put 'put ''dTcxYzFcdTcxYzRcdTcxY2JcdTcxY2NcdTcxZDNcdTcxZDZcdTcxZDlcdTcxZGFcdTcxZGNcdTcxZjhcdTcxZmVcdTcyMDBcdTcyMDdcdTcyMDhcdTcyMDlcdTcyMTNcdTcyMTdcdTcyMWFcdTcyMWRcdTcyMWZcdTcyMjRcdTcyMmJcdTcyMmZcdTcyMzRcdTcyMzhcdTcyMzlcdTcyNDFcdTcy''@;'; put 'put ''NDJcdTcyNDNcdTcyNDVcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTNcdTcyNTVcdTcyNTZcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjhcdTcyNmJcdTcyNmVcdTcyNmZcdTcyNzFcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2ZcdTcyODRcdTcyODlcdTcyOGRcdTcyOGVc''@;'; put 'put ''dTcyOTNcdTcyOWJcdTcyYThcdTcyYWRcdTcyYWVcdTcyYjFcdTcyYjRcdTcyYmVcdTcyYzFcdTcyYzdcdTcyYzlcdTcyY2NcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGZcdTcyZTVcdTcyZjNcdTcyZjRcdTcyZmFcdTcyZmIiXSxbIjhmY2JhMSIsIlx1NzJmZVx1NzMwMlx1NzMwNFx1NzMwNVx1''@;'; put 'put ''NzMwN1x1NzMwYlx1NzMwZFx1NzMxMlx1NzMxM1x1NzMxOFx1NzMxOVx1NzMxZVx1NzMyMlx1NzMyNFx1NzMyN1x1NzMyOFx1NzMyY1x1NzMzMVx1NzMzMlx1NzMzNVx1NzMzYVx1NzMzYlx1NzMzZFx1NzM0M1x1NzM0ZFx1NzM1MFx1NzM1Mlx1NzM1Nlx1NzM1OFx1NzM1ZFx1NzM1ZVx1NzM1''@;'; put 'put ''Zlx1NzM2MFx1NzM2Nlx1NzM2N1x1NzM2OVx1NzM2Ylx1NzM2Y1x1NzM2ZVx1NzM2Zlx1NzM3MVx1NzM3N1x1NzM3OVx1NzM3Y1x1NzM4MFx1NzM4MVx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4ZVx1NzM5MFx1NzM5M1x1NzM5NVx1NzM5N1x1NzM5OFx1NzM5Y1x1NzM5ZVx1NzM5Zlx1NzNhMFx1''@;'; put 'put ''NzNhMlx1NzNhNVx1NzNhNlx1NzNhYVx1NzNhYlx1NzNhZFx1NzNiNVx1NzNiN1x1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZlx1NzNjNVx1NzNjNlx1NzNjOVx1NzNjYlx1NzNjY1x1NzNjZlx1NzNkMlx1NzNkM1x1NzNkNlx1NzNkOVx1NzNkZFx1NzNlMVx1NzNlM1x1NzNlNlx1NzNlN1x1NzNl''@;'; put 'put ''OVx1NzNmNFx1NzNmNVx1NzNmN1x1NzNmOVx1NzNmYVx1NzNmYlx1NzNmZCJdLFsiOGZjY2ExIiwiXHU3M2ZmXHU3NDAwXHU3NDAxXHU3NDA0XHU3NDA3XHU3NDBhXHU3NDExXHU3NDFhXHU3NDFiXHU3NDI0XHU3NDI2XHU3NDI4Iiw5LCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZc''@;'; put 'put ''dTc0NDdcdTc0NGJcdTc0NGRcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NWRcdTc0NjJcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NmJcdTc0NmRcdTc0NmVcdTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OGZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0''@;'; put 'put ''OTlcdTc0OWFcdTc0OWNcdTc0OWZcdTc0YTBcdTc0YTFcdTc0YTNcdTc0YTZcdTc0YThcdTc0YTlcdTc0YWFcdTc0YWJcdTc0YWVcdTc0YWZcdTc0YjFcdTc0YjJcdTc0YjVcdTc0YjlcdTc0YmJcdTc0YmZcdTc0YzhcdTc0YzlcdTc0Y2NcdTc0ZDBcdTc0ZDNcdTc0ZDhcdTc0ZGFcdTc0ZGJc''@;'; put 'put ''dTc0ZGVcdTc0ZGZcdTc0ZTRcdTc0ZThcdTc0ZWFcdTc0ZWJcdTc0ZWZcdTc0ZjRcdTc0ZmFcdTc0ZmJcdTc0ZmNcdTc0ZmZcdTc1MDYiXSxbIjhmY2RhMSIsIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyYVx1NzUyZlx1NzUzNlx1NzUzOVx1''@;'; put 'put ''NzUzZFx1NzUzZVx1NzUzZlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0ZVx1NzU1MFx1NzU1Mlx1NzU1N1x1NzU1ZVx1NzU1Zlx1NzU2MVx1NzU2Zlx1NzU3MVx1NzU3OSIsNSwiXHU3NTgxXHU3NTg1XHU3NTkwXHU3NTkyXHU3NTkzXHU3NTk1XHU3NTk5XHU3NTljXHU3NWEyXHU3NWE0''@;'; put 'put ''XHU3NWI0XHU3NWJhXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM0XHU3NWM2XHU3NWNjXHU3NWNlXHU3NWNmXHU3NWQ3XHU3NWRjXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU0XHU3NWU3XHU3NWVjXHU3NWVlXHU3NWVmXHU3NWYxXHU3NWY5XHU3NjAwXHU3NjAyXHU3NjAzXHU3NjA0XHU3NjA3XHU3''@;'; put 'put ''NjA4XHU3NjBhXHU3NjBjXHU3NjBmXHU3NjEyXHU3NjEzXHU3NjE1XHU3NjE2XHU3NjE5XHU3NjFiXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIzXHU3NjI1XHU3NjI2XHU3NjI5XHU3NjJkXHU3NjMyXHU3NjMzXHU3NjM1XHU3NjM4XHU3NjM5Il0sWyI4ZmNlYTEiLCJcdTc2M2FcdTc2M2NcdTc2''@;'; put 'put ''NGFcdTc2NDBcdTc2NDFcdTc2NDNcdTc2NDRcdTc2NDVcdTc2NDlcdTc2NGJcdTc2NTVcdTc2NTlcdTc2NWZcdTc2NjRcdTc2NjVcdTc2NmRcdTc2NmVcdTc2NmZcdTc2NzFcdTc2NzRcdTc2ODFcdTc2ODVcdTc2OGNcdTc2OGRcdTc2OTVcdTc2OWJcdTc2OWNcdTc2OWRcdTc2OWZcdTc2YTBc''@;'; put 'put ''dTc2YTIiLDYsIlx1NzZhYVx1NzZhZFx1NzZiZFx1NzZjMVx1NzZjNVx1NzZjOVx1NzZjYlx1NzZjY1x1NzZjZVx1NzZkNFx1NzZkOVx1NzZlMFx1NzZlNlx1NzZlOFx1NzZlY1x1NzZmMFx1NzZmMVx1NzZmNlx1NzZmOVx1NzZmY1x1NzcwMFx1NzcwNlx1NzcwYVx1NzcwZVx1NzcxMlx1Nzcx''@;'; put 'put ''NFx1NzcxNVx1NzcxN1x1NzcxOVx1NzcxYVx1NzcxY1x1NzcyMlx1NzcyOFx1NzcyZFx1NzcyZVx1NzcyZlx1NzczNFx1NzczNVx1NzczNlx1NzczOVx1NzczZFx1NzczZVx1Nzc0Mlx1Nzc0NVx1Nzc0Nlx1Nzc0YVx1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1Nlx1Nzc1N1x1Nzc1Y1x1''@;'; put 'put ''Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2MiJdLFsiOGZjZmExIiwiXHU3NzY0XHU3NzY3XHU3NzZhXHU3NzZjXHU3NzcwXHU3NzcyXHU3NzczXHU3Nzc0XHU3NzdhXHU3NzdkXHU3NzgwXHU3Nzg0XHU3NzhjXHU3NzhkXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3NzlhXHU3NzlmXHU3N2EyXHU3N2E3XHU3''@;'; put 'put ''N2FhXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2I1XHU3N2JlXHU3N2MzXHU3N2M5XHU3N2QxXHU3N2QyXHU3N2Q1XHU3N2Q5XHU3N2RlXHU3N2RmXHU3N2UwXHU3N2U0XHU3N2U2XHU3N2VhXHU3N2VjXHU3N2YwXHU3N2YxXHU3N2Y0XHU3N2Y4XHU3N2ZiXHU3ODA1XHU3ODA2XHU3ODA5XHU3ODBk''@;'; put 'put ''XHU3ODBlXHU3ODExXHU3ODFkXHU3ODIxXHU3ODIyXHU3ODIzXHU3ODJkXHU3ODJlXHU3ODMwXHU3ODM1XHU3ODM3XHU3ODQzXHU3ODQ0XHU3ODQ3XHU3ODQ4XHU3ODRjXHU3ODRlXHU3ODUyXHU3ODVjXHU3ODVlXHU3ODYwXHU3ODYxXHU3ODYzXHU3ODY0XHU3ODY4XHU3ODZhXHU3ODZlXHU3''@;'; put 'put ''ODdhXHU3ODdlXHU3ODhhXHU3ODhmXHU3ODk0XHU3ODk4XHU3OGExXHU3ODlkXHU3ODllXHU3ODlmXHU3OGE0XHU3OGE4XHU3OGFjXHU3OGFkXHU3OGIwXHU3OGIxXHU3OGIyXHU3OGIzIl0sWyI4ZmQwYTEiLCJcdTc4YmJcdTc4YmRcdTc4YmZcdTc4YzdcdTc4YzhcdTc4YzlcdTc4Y2NcdTc4''@;'; put 'put ''Y2VcdTc4ZDJcdTc4ZDNcdTc4ZDVcdTc4ZDZcdTc4ZTRcdTc4ZGJcdTc4ZGZcdTc4ZTBcdTc4ZTFcdTc4ZTZcdTc4ZWFcdTc4ZjJcdTc4ZjNcdTc5MDBcdTc4ZjZcdTc4ZjdcdTc4ZmFcdTc4ZmJcdTc4ZmZcdTc5MDZcdTc5MGNcdTc5MTBcdTc5MWFcdTc5MWNcdTc5MWVcdTc5MWZcdTc5MjBc''@;'; put 'put ''dTc5MjVcdTc5MjdcdTc5MjlcdTc5MmRcdTc5MzFcdTc5MzRcdTc5MzVcdTc5M2JcdTc5M2RcdTc5M2ZcdTc5NDRcdTc5NDVcdTc5NDZcdTc5NGFcdTc5NGJcdTc5NGZcdTc5NTFcdTc5NTRcdTc5NThcdTc5NWJcdTc5NWNcdTc5NjdcdTc5NjlcdTc5NmJcdTc5NzJcdTc5NzlcdTc5N2JcdTc5''@;'; put 'put ''N2NcdTc5N2VcdTc5OGJcdTc5OGNcdTc5OTFcdTc5OTNcdTc5OTRcdTc5OTVcdTc5OTZcdTc5OThcdTc5OWJcdTc5OWNcdTc5YTFcdTc5YThcdTc5YTlcdTc5YWJcdTc5YWZcdTc5YjFcdTc5YjRcdTc5YjhcdTc5YmJcdTc5YzJcdTc5YzRcdTc5YzdcdTc5YzhcdTc5Y2FcdTc5Y2ZcdTc5ZDRc''@;'; put 'put ''dTc5ZDZcdTc5ZGFcdTc5ZGRcdTc5ZGUiXSxbIjhmZDFhMSIsIlx1NzllMFx1NzllMlx1NzllNVx1NzllYVx1NzllYlx1NzllZFx1NzlmMVx1NzlmOFx1NzlmY1x1N2EwMlx1N2EwM1x1N2EwN1x1N2EwOVx1N2EwYVx1N2EwY1x1N2ExMVx1N2ExNVx1N2ExYlx1N2ExZVx1N2EyMVx1N2EyN1x1''@;'; put 'put ''N2EyYlx1N2EyZFx1N2EyZlx1N2EzMFx1N2EzNFx1N2EzNVx1N2EzOFx1N2EzOVx1N2EzYVx1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0Y1x1N2E1NVx1N2E1Nlx1N2E1OVx1N2E1Y1x1N2E1ZFx1N2E1Zlx1N2E2MFx1N2E2NVx1N2E2N1x1N2E2YVx1N2E2ZFx1N2E3NVx1N2E3OFx1N2E3''@;'; put 'put ''ZVx1N2E4MFx1N2E4Mlx1N2E4NVx1N2E4Nlx1N2E4YVx1N2E4Ylx1N2E5MFx1N2E5MVx1N2E5NFx1N2E5ZVx1N2FhMFx1N2FhM1x1N2FhY1x1N2FiM1x1N2FiNVx1N2FiOVx1N2FiYlx1N2FiY1x1N2FjNlx1N2FjOVx1N2FjY1x1N2FjZVx1N2FkMVx1N2FkYlx1N2FlOFx1N2FlOVx1N2FlYlx1''@;'; put 'put ''N2FlY1x1N2FmMVx1N2FmNFx1N2FmYlx1N2FmZFx1N2FmZVx1N2IwN1x1N2IxNFx1N2IxZlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyYVx1N2IyYlx1N2IyZFx1N2IyZVx1N2IyZlx1N2IzMCJdLFsiOGZkMmExIiwiXHU3YjMxXHU3YjM0XHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQxXHU3YjQ3XHU3''@;'; put 'put ''YjRlXHU3YjU1XHU3YjYwXHU3YjY0XHU3YjY2XHU3YjY5XHU3YjZhXHU3YjZkXHU3YjZmXHU3YjcyXHU3YjczXHU3Yjc3XHU3Yjg0XHU3Yjg5XHU3YjhlXHU3YjkwXHU3YjkxXHU3Yjk2XHU3YjliXHU3YjllXHU3YmEwXHU3YmE1XHU3YmFjXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmI1XHU3YmI2''@;'; put 'put ''XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmMyXHU3YmM1XHU3YmM4XHU3YmNhXHU3YmQ0XHU3YmQ2XHU3YmQ3XHU3YmQ5XHU3YmRhXHU3YmRiXHU3YmU4XHU3YmVhXHU3YmYyXHU3YmY0XHU3YmY1XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZjXHU3YmZlXHU3YzAxXHU3YzAyXHU3YzAzXHU3''@;'; put 'put ''YzA0XHU3YzA2XHU3YzA5XHU3YzBiXHU3YzBjXHU3YzBlXHU3YzBmXHU3YzE5XHU3YzFiXHU3YzIwXHU3YzI1XHU3YzI2XHU3YzI4XHU3YzJjXHU3YzMxXHU3YzMzXHU3YzM0XHU3YzM2XHU3YzM5XHU3YzNhXHU3YzQ2XHU3YzRhXHU3YzU1XHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU5Iiw1XSxb''@;'; put 'put ''IjhmZDNhMSIsIlx1N2M2MVx1N2M2M1x1N2M2N1x1N2M2OVx1N2M2ZFx1N2M2ZVx1N2M3MFx1N2M3Mlx1N2M3OVx1N2M3Y1x1N2M3ZFx1N2M4Nlx1N2M4N1x1N2M4Zlx1N2M5NFx1N2M5ZVx1N2NhMFx1N2NhNlx1N2NiMFx1N2NiNlx1N2NiN1x1N2NiYVx1N2NiYlx1N2NiY1x1N2NiZlx1N2Nj''@;'; put 'put ''NFx1N2NjN1x1N2NjOFx1N2NjOVx1N2NjZFx1N2NjZlx1N2NkM1x1N2NkNFx1N2NkNVx1N2NkN1x1N2NkOVx1N2NkYVx1N2NkZFx1N2NlNlx1N2NlOVx1N2NlYlx1N2NmNVx1N2QwM1x1N2QwN1x1N2QwOFx1N2QwOVx1N2QwZlx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNlx1N2QxZFx1N2QxZVx1''@;'; put 'put ''N2QyM1x1N2QyNlx1N2QyYVx1N2QyZFx1N2QzMVx1N2QzY1x1N2QzZFx1N2QzZVx1N2Q0MFx1N2Q0MVx1N2Q0N1x1N2Q0OFx1N2Q0ZFx1N2Q1MVx1N2Q1M1x1N2Q1N1x1N2Q1OVx1N2Q1YVx1N2Q1Y1x1N2Q1ZFx1N2Q2NVx1N2Q2N1x1N2Q2YVx1N2Q3MFx1N2Q3OFx1N2Q3YVx1N2Q3Ylx1N2Q3''@;'; put 'put ''Zlx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NVx1N2Q4Nlx1N2Q4OFx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q5MVx1N2Q5Nlx1N2Q5N1x1N2Q5ZCJdLFsiOGZkNGExIiwiXHU3ZDllXHU3ZGE2XHU3ZGE3XHU3ZGFhXHU3ZGIzXHU3ZGI2XHU3ZGI3XHU3ZGI5XHU3ZGMyIiw0LCJcdTdkY2NcdTdkY2Rc''@;'; put 'put ''dTdkY2VcdTdkZDdcdTdkZDlcdTdlMDBcdTdkZTJcdTdkZTVcdTdkZTZcdTdkZWFcdTdkZWJcdTdkZWRcdTdkZjFcdTdkZjVcdTdkZjZcdTdkZjlcdTdkZmFcdTdlMDhcdTdlMTBcdTdlMTFcdTdlMTVcdTdlMTdcdTdlMWNcdTdlMWRcdTdlMjBcdTdlMjdcdTdlMjhcdTdlMmNcdTdlMmRcdTdl''@;'; put 'put ''MmZcdTdlMzNcdTdlMzZcdTdlM2ZcdTdlNDRcdTdlNDVcdTdlNDdcdTdlNGVcdTdlNTBcdTdlNTJcdTdlNThcdTdlNWZcdTdlNjFcdTdlNjJcdTdlNjVcdTdlNmJcdTdlNmVcdTdlNmZcdTdlNzNcdTdlNzhcdTdlN2VcdTdlODFcdTdlODZcdTdlODdcdTdlOGFcdTdlOGRcdTdlOTFcdTdlOTVc''@;'; put 'put ''dTdlOThcdTdlOWFcdTdlOWRcdTdlOWVcdTdmM2NcdTdmM2JcdTdmM2RcdTdmM2VcdTdmM2ZcdTdmNDNcdTdmNDRcdTdmNDdcdTdmNGZcdTdmNTJcdTdmNTNcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNjFcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNmQiXSxbIjhmZDVhMSIsIlx1N2Y3MVx1''@;'; put 'put ''N2Y3ZFx1N2Y3ZVx1N2Y3Zlx1N2Y4MFx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Nlx1N2Y5N1x1N2Y5Y1x1N2ZhMVx1N2ZhMlx1N2ZhNlx1N2ZhYVx1N2ZhZFx1N2ZiNFx1N2ZiY1x1N2ZiZlx1N2ZjMFx1N2ZjM1x1N2ZjOFx1N2ZjZVx1N2ZjZlx1N2ZkYlx1N2ZkZlx1N2Zl''@;'; put 'put ''M1x1N2ZlNVx1N2ZlOFx1N2ZlY1x1N2ZlZVx1N2ZlZlx1N2ZmMlx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwN1x1ODAwOFx1ODAwYVx1ODAwZFx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyY1x1''@;'; put 'put ''ODAyZVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1ODA2ZFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4ZVx1ODA5Y1x1ODA5ZVx1ODBhNlx1ODBhN1x1ODBhYlx1ODBiOFx1ODBiOVx1ODBj''@;'; put 'put ''OFx1ODBjZFx1ODBjZlx1ODBkMlx1ODBkNFx1ODBkNVx1ODBkN1x1ODBkOFx1ODBlMFx1ODBlZFx1ODBlZSJdLFsiOGZkNmExIiwiXHU4MGYwXHU4MGYyXHU4MGYzXHU4MGY2XHU4MGY5XHU4MGZhXHU4MGZlXHU4MTAzXHU4MTBiXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFjXHU4MTFlXHU4MTIw''@;'; put 'put ''XHU4MTI0XHU4MTI3XHU4MTJjXHU4MTMwXHU4MTM1XHU4MTNhXHU4MTNjXHU4MTQ1XHU4MTQ3XHU4MTRhXHU4MTRjXHU4MTUyXHU4MTU3XHU4MTYwXHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZkXHU4MTZmXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThiXHU4''@;'; put 'put ''MThlXHU4MTk2XHU4MTk4XHU4MTliXHU4MTllXHU4MWEyXHU4MWFlXHU4MWIyXHU4MWI0XHU4MWJiXHU4MWNiXHU4MWMzXHU4MWM1XHU4MWNhXHU4MWNlXHU4MWNmXHU4MWQ1XHU4MWQ3XHU4MWRiXHU4MWRkXHU4MWRlXHU4MWUxXHU4MWU0XHU4MWViXHU4MWVjXHU4MWYwXHU4MWYxXHU4MWYy''@;'; put 'put ''XHU4MWY1XHU4MWY2XHU4MWY4XHU4MWY5XHU4MWZkXHU4MWZmXHU4MjAwXHU4MjAzXHU4MjBmXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNhXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2Il0sWyI4ZmQ3YTEiLCJcdTgyNGJc''@;'; put 'put ''dTgyNGVcdTgyNGZcdTgyNTFcdTgyNTZcdTgyNWNcdTgyNjBcdTgyNjNcdTgyNjdcdTgyNmRcdTgyNzRcdTgyN2JcdTgyN2RcdTgyN2ZcdTgyODBcdTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOGFcdTgyOGVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOWFcdTgyOWJcdTgy''@;'; put 'put ''YTBcdTgyYTFcdTgyYTNcdTgyYTRcdTgyYTdcdTgyYThcdTgyYTlcdTgyYWFcdTgyYWVcdTgyYjBcdTgyYjJcdTgyYjRcdTgyYjdcdTgyYmFcdTgyYmNcdTgyYmVcdTgyYmZcdTgyYzZcdTgyZDBcdTgyZDVcdTgyZGFcdTgyZTBcdTgyZTJcdTgyZTRcdTgyZThcdTgyZWFcdTgyZWRcdTgyZWZc''@;'; put 'put ''dTgyZjZcdTgyZjdcdTgyZmRcdTgyZmVcdTgzMDBcdTgzMDFcdTgzMDdcdTgzMDhcdTgzMGFcdTgzMGJcdTgzNTRcdTgzMWJcdTgzMWRcdTgzMWVcdTgzMWZcdTgzMjFcdTgzMjJcdTgzMmNcdTgzMmRcdTgzMmVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM2FcdTgzM2NcdTgzM2RcdTgzNDJcdTgz''@;'; put 'put ''NDNcdTgzNDRcdTgzNDdcdTgzNGRcdTgzNGVcdTgzNTFcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNzBcdTgzNzgiXSxbIjhmZDhhMSIsIlx1ODM3ZFx1ODM3Zlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4ZFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Ylx1ODM5Y1x1ODM5''@;'; put 'put ''ZFx1ODNhNlx1ODNhN1x1ODNhOVx1ODNhY1x1ODNiZVx1ODNiZlx1ODNjMFx1ODNjN1x1ODNjOVx1ODNjZlx1ODNkMFx1ODNkMVx1ODNkNFx1ODNkZFx1ODM1M1x1ODNlOFx1ODNlYVx1ODNmNlx1ODNmOFx1ODNmOVx1ODNmY1x1ODQwMVx1ODQwNlx1ODQwYVx1ODQwZlx1ODQxMVx1ODQxNVx1''@;'; put 'put ''ODQxOVx1ODNhZFx1ODQyZlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0YVx1ODQ0ZFx1ODQ0Zlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1ODQ1OVx1ODQ1YVx1ODQ1Y1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2YVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3''@;'; put 'put ''Y1x1ODQ3ZFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5ZVx1ODRhNlx1ODRhOFx1ODRhOVx1ODRhYVx1ODRhZlx1ODRiMVx1ODRiNFx1ODRiYVx1ODRiZFx1ODRiZVx1ODRjMFx1ODRjMlx1ODRjN1x1ODRjOFx1ODRjY1x1ODRjZlx1ODRkMyJdLFsiOGZkOWExIiwiXHU4NGRj''@;'; put 'put ''XHU4NGU3XHU4NGVhXHU4NGVmXHU4NGYwXHU4NGYxXHU4NGYyXHU4NGY3XHU4NTMyXHU4NGZhXHU4NGZiXHU4NGZkXHU4NTAyXHU4NTAzXHU4NTA3XHU4NTBjXHU4NTBlXHU4NTEwXHU4NTFjXHU4NTFlXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJhXHU4NTJiXHU4NTJmXHU4''@;'; put 'put ''NTMzXHU4NTM0XHU4NTM2XHU4NTNmXHU4NTQ2XHU4NTRmIiw0LCJcdTg1NTZcdTg1NTlcdTg1NWMiLDYsIlx1ODU2NFx1ODU2Ylx1ODU2Zlx1ODU3OVx1ODU3YVx1ODU3Ylx1ODU3ZFx1ODU3Zlx1ODU4MVx1ODU4NVx1ODU4Nlx1ODU4OVx1ODU4Ylx1ODU4Y1x1ODU4Zlx1ODU5M1x1ODU5OFx1''@;'; put 'put ''ODU5ZFx1ODU5Zlx1ODVhMFx1ODVhMlx1ODVhNVx1ODVhN1x1ODViNFx1ODViNlx1ODViN1x1ODViOFx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMlx1ODVjN1x1ODVjYVx1ODVjYlx1ODVjZVx1ODVhZFx1ODVkOFx1ODVkYVx1ODVkZlx1ODVlMFx1ODVlNlx1ODVlOFx1ODVlZFx1ODVm''@;'; put 'put ''M1x1ODVmNlx1ODVmYyJdLFsiOGZkYWExIiwiXHU4NWZmXHU4NjAwXHU4NjA0XHU4NjA1XHU4NjBkXHU4NjBlXHU4NjEwXHU4NjExXHU4NjEyXHU4NjE4XHU4NjE5XHU4NjFiXHU4NjFlXHU4NjIxXHU4NjI3XHU4NjI5XHU4NjM2XHU4NjM4XHU4NjNhXHU4NjNjXHU4NjNkXHU4NjQwXHU4NjQy''@;'; put 'put ''XHU4NjQ2XHU4NjUyXHU4NjUzXHU4NjU2XHU4NjU3XHU4NjU4XHU4NjU5XHU4NjVkXHU4NjYwIiw0LCJcdTg2NjlcdTg2NmNcdTg2NmZcdTg2NzVcdTg2NzZcdTg2NzdcdTg2N2FcdTg2OGRcdTg2OTFcdTg2OTZcdTg2OThcdTg2OWFcdTg2OWNcdTg2YTFcdTg2YTZcdTg2YTdcdTg2YThcdTg2''@;'; put 'put ''YWRcdTg2YjFcdTg2YjNcdTg2YjRcdTg2YjVcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmZcdTg2YzBcdTg2YzFcdTg2YzNcdTg2YzVcdTg2ZDFcdTg2ZDJcdTg2ZDVcdTg2ZDdcdTg2ZGFcdTg2ZGNcdTg2ZTBcdTg2ZTNcdTg2ZTVcdTg2ZTdcdTg2ODhcdTg2ZmFcdTg2ZmNcdTg2ZmRcdTg3MDRc''@;'; put 'put ''dTg3MDVcdTg3MDdcdTg3MGJcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTNcdTg3MTRcdTg3MTlcdTg3MWVcdTg3MWZcdTg3MjFcdTg3MjMiXSxbIjhmZGJhMSIsIlx1ODcyOFx1ODcyZVx1ODcyZlx1ODczMVx1ODczMlx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODczZVx1ODc0MFx1ODc0M1x1''@;'; put 'put ''ODc0NVx1ODc0ZFx1ODc1OFx1ODc1ZFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3Ylx1ODc4MyIsNiwiXHU4NzhiXHU4NzhjXHU4NzkwXHU4NzkzXHU4Nzk1XHU4Nzk3XHU4Nzk4XHU4Nzk5XHU4NzllXHU4N2EwXHU4N2EzXHU4N2E3XHU4N2FjXHU4N2FkXHU4N2Fl''@;'; put 'put ''XHU4N2IxXHU4N2I1XHU4N2JlXHU4N2JmXHU4N2MxXHU4N2M4XHU4N2M5XHU4N2NhXHU4N2NlXHU4N2Q1XHU4N2Q2XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RmXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2VhXHU4N2ViXHU4N2VkXHU4N2YxXHU4N2YzXHU4N2Y4XHU4N2ZhXHU4N2ZmXHU4ODAxXHU4''@;'; put 'put ''ODAzXHU4ODA2XHU4ODA5XHU4ODBhXHU4ODBiXHU4ODEwXHU4ODE5XHU4ODEyXHU4ODEzXHU4ODE0XHU4ODE4XHU4ODFhXHU4ODFiXHU4ODFjXHU4ODFlXHU4ODFmXHU4ODI4XHU4ODJkXHU4ODJlXHU4ODMwXHU4ODMyXHU4ODM1Il0sWyI4ZmRjYTEiLCJcdTg4M2FcdTg4M2NcdTg4NDFcdTg4''@;'; put 'put ''NDNcdTg4NDVcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NTFcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWNcdTg4NWZcdTg4NjBcdTg4NjRcdTg4NjlcdTg4NzFcdTg4NzlcdTg4N2JcdTg4ODBcdTg4OThcdTg4OWFcdTg4OWJcdTg4OWNcdTg4OWZcdTg4YTBcdTg4YThc''@;'; put 'put ''dTg4YWFcdTg4YmFcdTg4YmRcdTg4YmVcdTg4YzBcdTg4Y2EiLDQsIlx1ODhkMVx1ODhkMlx1ODhkM1x1ODhkYlx1ODhkZVx1ODhlN1x1ODhlZlx1ODhmMFx1ODhmMVx1ODhmNVx1ODhmN1x1ODkwMVx1ODkwNlx1ODkwZFx1ODkwZVx1ODkwZlx1ODkxNVx1ODkxNlx1ODkxOFx1ODkxOVx1ODkx''@;'; put 'put ''YVx1ODkxY1x1ODkyMFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkzMFx1ODkzMVx1ODkzMlx1ODkzNVx1ODkzOVx1ODkzYVx1ODkzZVx1ODk0MFx1ODk0Mlx1ODk0NVx1ODk0Nlx1ODk0OVx1ODk0Zlx1ODk1Mlx1ODk1N1x1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2Ylx1''@;'; put 'put ''ODk2ZVx1ODk3MFx1ODk3M1x1ODk3NVx1ODk3YSJdLFsiOGZkZGExIiwiXHU4OTdiXHU4OTdjXHU4OTdkXHU4OTg5XHU4OThkXHU4OTkwXHU4OTk0XHU4OTk1XHU4OTliXHU4OTljXHU4OTlmXHU4OWEwXHU4OWE1XHU4OWIwXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWJjXHU4OWQ0Iiw0''@;'; put 'put ''LCJcdTg5ZTVcdTg5ZTlcdTg5ZWJcdTg5ZWRcdTg5ZjFcdTg5ZjNcdTg5ZjZcdTg5ZjlcdTg5ZmRcdTg5ZmZcdThhMDRcdThhMDVcdThhMDdcdThhMGZcdThhMTFcdThhMTJcdThhMTRcdThhMTVcdThhMWVcdThhMjBcdThhMjJcdThhMjRcdThhMjZcdThhMmJcdThhMmNcdThhMmZcdThhMzVc''@;'; put 'put ''dThhMzdcdThhM2RcdThhM2VcdThhNDBcdThhNDNcdThhNDVcdThhNDdcdThhNDlcdThhNGRcdThhNGVcdThhNTNcdThhNTZcdThhNTdcdThhNThcdThhNWNcdThhNWRcdThhNjFcdThhNjVcdThhNjdcdThhNzVcdThhNzZcdThhNzdcdThhNzlcdThhN2FcdThhN2JcdThhN2VcdThhN2ZcdThh''@;'; put 'put ''ODBcdThhODNcdThhODZcdThhOGJcdThhOGZcdThhOTBcdThhOTJcdThhOTZcdThhOTdcdThhOTlcdThhOWZcdThhYTdcdThhYTlcdThhYWVcdThhYWZcdThhYjMiXSxbIjhmZGVhMSIsIlx1OGFiNlx1OGFiN1x1OGFiYlx1OGFiZVx1OGFjM1x1OGFjNlx1OGFjOFx1OGFjOVx1OGFjYVx1OGFk''@;'; put 'put ''MVx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkN1x1OGFkZFx1OGFkZlx1OGFlY1x1OGFmMFx1OGFmNFx1OGFmNVx1OGFmNlx1OGFmY1x1OGFmZlx1OGIwNVx1OGIwNlx1OGIwYlx1OGIxMVx1OGIxY1x1OGIxZVx1OGIxZlx1OGIwYVx1OGIyZFx1OGIzMFx1OGIzN1x1OGIzY1x1OGI0MiIsNCwiXHU4''@;'; put 'put ''YjQ4XHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU5XHU4YjRkXHU4YjVlXHU4YjYzXHU4YjZkXHU4Yjc2XHU4Yjc4XHU4Yjc5XHU4YjdjXHU4YjdlXHU4YjgxXHU4Yjg0XHU4Yjg1XHU4YjhiXHU4YjhkXHU4YjhmXHU4Yjk0XHU4Yjk1XHU4YjljXHU4YjllXHU4YjlmXHU4YzM4XHU4YzM5XHU4YzNk''@;'; put 'put ''XHU4YzNlXHU4YzQ1XHU4YzQ3XHU4YzQ5XHU4YzRiXHU4YzRmXHU4YzUxXHU4YzUzXHU4YzU0XHU4YzU3XHU4YzU4XHU4YzViXHU4YzVkXHU4YzU5XHU4YzYzXHU4YzY0XHU4YzY2XHU4YzY4XHU4YzY5XHU4YzZkXHU4YzczXHU4Yzc1XHU4Yzc2XHU4YzdiXHU4YzdlXHU4Yzg2Il0sWyI4ZmRm''@;'; put 'put ''YTEiLCJcdThjODdcdThjOGJcdThjOTBcdThjOTJcdThjOTNcdThjOTlcdThjOWJcdThjOWNcdThjYTRcdThjYjlcdThjYmFcdThjYzVcdThjYzZcdThjYzlcdThjY2JcdThjY2ZcdThjZDZcdThjZDVcdThjZDlcdThjZGRcdThjZTFcdThjZThcdThjZWNcdThjZWZcdThjZjBcdThjZjJcdThj''@;'; put 'put ''ZjVcdThjZjdcdThjZjhcdThjZmVcdThjZmZcdThkMDFcdThkMDNcdThkMDlcdThkMTJcdThkMTdcdThkMWJcdThkNjVcdThkNjlcdThkNmNcdThkNmVcdThkN2ZcdThkODJcdThkODRcdThkODhcdThkOGRcdThkOTBcdThkOTFcdThkOTVcdThkOWVcdThkOWZcdThkYTBcdThkYTZcdThkYWJc''@;'; put 'put ''dThkYWNcdThkYWZcdThkYjJcdThkYjVcdThkYjdcdThkYjlcdThkYmJcdThkYzBcdThkYzVcdThkYzZcdThkYzdcdThkYzhcdThkY2FcdThkY2VcdThkZDFcdThkZDRcdThkZDVcdThkZDdcdThkZDlcdThkZTRcdThkZTVcdThkZTdcdThkZWNcdThkZjBcdThkYmNcdThkZjFcdThkZjJcdThk''@;'; put 'put ''ZjRcdThkZmRcdThlMDFcdThlMDRcdThlMDVcdThlMDZcdThlMGJcdThlMTFcdThlMTRcdThlMTZcdThlMjBcdThlMjFcdThlMjIiXSxbIjhmZTBhMSIsIlx1OGUyM1x1OGUyNlx1OGUyN1x1OGUzMVx1OGUzM1x1OGUzNlx1OGUzN1x1OGUzOFx1OGUzOVx1OGUzZFx1OGU0MFx1OGU0MVx1OGU0''@;'; put 'put ''Ylx1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1NFx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU2MVx1OGU2Mlx1OGU2OVx1OGU2Y1x1OGU2ZFx1OGU2Zlx1OGU3MFx1OGU3MVx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU4Mlx1OGU4M1x1OGU4OVx1OGU5MFx1OGU5Mlx1OGU5NVx1OGU5YVx1OGU5Ylx1''@;'; put 'put ''OGU5ZFx1OGU5ZVx1OGVhMlx1OGVhN1x1OGVhOVx1OGVhZFx1OGVhZVx1OGViM1x1OGViNVx1OGViYVx1OGViYlx1OGVjMFx1OGVjMVx1OGVjM1x1OGVjNFx1OGVjN1x1OGVjZlx1OGVkMVx1OGVkNFx1OGVkY1x1OGVlOFx1OGVlZVx1OGVmMFx1OGVmMVx1OGVmN1x1OGVmOVx1OGVmYVx1OGVl''@;'; put 'put ''ZFx1OGYwMFx1OGYwMlx1OGYwN1x1OGYwOFx1OGYwZlx1OGYxMFx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxZVx1OGYyMFx1OGYyMVx1OGYyM1x1OGYyNVx1OGYyN1x1OGYyOFx1OGYyY1x1OGYyZFx1OGYyZVx1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzYVx1OGY0MFx1OGY0MSJdLFsiOGZl''@;'; put 'put ''MWExIiwiXHU4ZjQzXHU4ZjQ3XHU4ZjRmXHU4ZjUxIiw0LCJcdThmNThcdThmNWRcdThmNWVcdThmNjVcdThmOWRcdThmYTBcdThmYTFcdThmYTRcdThmYTVcdThmYTZcdThmYjVcdThmYjZcdThmYjhcdThmYmVcdThmYzBcdThmYzFcdThmYzZcdThmY2FcdThmY2JcdThmY2RcdThmZDBcdThm''@;'; put 'put ''ZDJcdThmZDNcdThmZDVcdThmZTBcdThmZTNcdThmZTRcdThmZThcdThmZWVcdThmZjFcdThmZjVcdThmZjZcdThmZmJcdThmZmVcdTkwMDJcdTkwMDRcdTkwMDhcdTkwMGNcdTkwMThcdTkwMWJcdTkwMjhcdTkwMjlcdTkwMmZcdTkwMmFcdTkwMmNcdTkwMmRcdTkwMzNcdTkwMzRcdTkwMzdc''@;'; put 'put ''dTkwM2ZcdTkwNDNcdTkwNDRcdTkwNGNcdTkwNWJcdTkwNWRcdTkwNjJcdTkwNjZcdTkwNjdcdTkwNmNcdTkwNzBcdTkwNzRcdTkwNzlcdTkwODVcdTkwODhcdTkwOGJcdTkwOGNcdTkwOGVcdTkwOTBcdTkwOTVcdTkwOTdcdTkwOThcdTkwOTlcdTkwOWJcdTkwYTBcdTkwYTFcdTkwYTJcdTkw''@;'; put 'put ''YTVcdTkwYjBcdTkwYjJcdTkwYjNcdTkwYjRcdTkwYjZcdTkwYmRcdTkwY2NcdTkwYmVcdTkwYzMiXSxbIjhmZTJhMSIsIlx1OTBjNFx1OTBjNVx1OTBjN1x1OTBjOFx1OTBkNVx1OTBkN1x1OTBkOFx1OTBkOVx1OTBkY1x1OTBkZFx1OTBkZlx1OTBlNVx1OTBkMlx1OTBmNlx1OTBlYlx1OTBl''@;'; put 'put ''Zlx1OTBmMFx1OTBmNFx1OTBmZVx1OTBmZlx1OTEwMFx1OTEwNFx1OTEwNVx1OTEwNlx1OTEwOFx1OTEwZFx1OTExMFx1OTExNFx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExY1x1OTExZVx1OTEyMFx1OTEyNVx1OTEyMlx1OTEyM1x1OTEyN1x1OTEyOVx1OTEyZVx1OTEyZlx1OTEzMVx1''@;'; put 'put ''OTEzNFx1OTEzNlx1OTEzN1x1OTEzOVx1OTEzYVx1OTEzY1x1OTEzZFx1OTE0M1x1OTE0N1x1OTE0OFx1OTE0Zlx1OTE1M1x1OTE1N1x1OTE1OVx1OTE1YVx1OTE1Ylx1OTE2MVx1OTE2NFx1OTE2N1x1OTE2ZFx1OTE3NFx1OTE3OVx1OTE3YVx1OTE3Ylx1OTE4MVx1OTE4M1x1OTE4NVx1OTE4''@;'; put 'put ''Nlx1OTE4YVx1OTE4ZVx1OTE5MVx1OTE5M1x1OTE5NFx1OTE5NVx1OTE5OFx1OTE5ZVx1OTFhMVx1OTFhNlx1OTFhOFx1OTFhY1x1OTFhZFx1OTFhZVx1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiYlx1OTFiY1x1OTFiZFx1OTFiZiJdLFsiOGZlM2ExIiwiXHU5MWMyXHU5MWMz''@;'; put 'put ''XHU5MWM1XHU5MWQzXHU5MWQ0XHU5MWQ3XHU5MWQ5XHU5MWRhXHU5MWRlXHU5MWU0XHU5MWU1XHU5MWU5XHU5MWVhXHU5MWVjIiw1LCJcdTkxZjdcdTkxZjlcdTkxZmJcdTkxZmRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMGFcdTkyMGNcdTkyMTBcdTky''@;'; put 'put ''MTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMWNcdTkyMWRcdTkyMjNcdTkyMjRcdTkyMjVcdTkyMjZcdTkyMjhcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2NcdTkyM2VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNGFc''@;'; put 'put ''dTkyNGRcdTkyNGVcdTkyNGZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNWNcdTkyNWRcdTkyNjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNmVcdTkyNmZcdTkyNzBcdTkyNzUiLDQsIlx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3Zlx1OTI4OFx1OTI4OVx1OTI4YVx1OTI4ZFx1OTI4''@;'; put 'put ''ZVx1OTI5Mlx1OTI5NyJdLFsiOGZlNGExIiwiXHU5Mjk5XHU5MjlmXHU5MmEwXHU5MmE0XHU5MmE1XHU5MmE3XHU5MmE4XHU5MmFiXHU5MmFmXHU5MmIyXHU5MmI2XHU5MmI4XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJmIiw0LCJcdTkyYzVcdTkyYzZcdTkyYzdcdTkyYzhcdTkyY2Jc''@;'; put 'put ''dTkyY2NcdTkyY2RcdTkyY2VcdTkyZDBcdTkyZDNcdTkyZDVcdTkyZDdcdTkyZDhcdTkyZDlcdTkyZGNcdTkyZGRcdTkyZGZcdTkyZTBcdTkyZTFcdTkyZTNcdTkyZTVcdTkyZTdcdTkyZThcdTkyZWNcdTkyZWVcdTkyZjBcdTkyZjlcdTkyZmJcdTkyZmZcdTkzMDBcdTkzMDJcdTkzMDhcdTkz''@;'; put 'put ''MGRcdTkzMTFcdTkzMTRcdTkzMTVcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjFcdTkzMjRcdTkzMjVcdTkzMjdcdTkzMjlcdTkzMmFcdTkzMzNcdTkzMzRcdTkzMzZcdTkzMzdcdTkzNDdcdTkzNDhcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTVcdTkzNTdcdTkzNThcdTkzNWFc''@;'; put 'put ''dTkzNWVcdTkzNjRcdTkzNjVcdTkzNjdcdTkzNjlcdTkzNmFcdTkzNmRcdTkzNmZcdTkzNzBcdTkzNzFcdTkzNzNcdTkzNzRcdTkzNzYiXSxbIjhmZTVhMSIsIlx1OTM3YVx1OTM3ZFx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1OTM4OFx1OTM4YVx1OTM4Ylx1OTM4ZFx1OTM4Zlx1OTM5Mlx1''@;'; put 'put ''OTM5NVx1OTM5OFx1OTM5Ylx1OTM5ZVx1OTNhMVx1OTNhM1x1OTNhNFx1OTNhNlx1OTNhOFx1OTNhYlx1OTNiNFx1OTNiNVx1OTNiNlx1OTNiYVx1OTNhOVx1OTNjMVx1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOSIsNCwiXHU5M2QzXHU5M2Q5XHU5M2RjXHU5M2RlXHU5M2RmXHU5M2Uy''@;'; put 'put ''XHU5M2U2XHU5M2U3XHU5M2Y5XHU5M2Y3XHU5M2Y4XHU5M2ZhXHU5M2ZiXHU5M2ZkXHU5NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBkXHU5NDBlXHU5NDBmXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFmXHU5NDJlXHU5NDJmXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNiXHU5''@;'; put 'put ''NDNmXHU5NDNkXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRhXHU5NDRjXHU5NDU1XHU5NDU5XHU5NDVjXHU5NDVmXHU5NDYxXHU5NDYzXHU5NDY4XHU5NDZiXHU5NDZkXHU5NDZlXHU5NDZmXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5Il0sWyI4ZmU2YTEiLCJcdTk1N2VcdTk1''@;'; put 'put ''ODRcdTk1ODhcdTk1OGNcdTk1OGRcdTk1OGVcdTk1OWRcdTk1OWVcdTk1OWZcdTk1YTFcdTk1YTZcdTk1YTlcdTk1YWJcdTk1YWNcdTk1YjRcdTk1YjZcdTk1YmFcdTk1YmRcdTk1YmZcdTk1YzZcdTk1YzhcdTk1YzlcdTk1Y2JcdTk1ZDBcdTk1ZDFcdTk1ZDJcdTk1ZDNcdTk1ZDlcdTk1ZGFc''@;'; put 'put ''dTk1ZGRcdTk1ZGVcdTk1ZGZcdTk1ZTBcdTk1ZTRcdTk1ZTZcdTk2MWRcdTk2MWVcdTk2MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MmNcdTk2MzFcdTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M2FcdTk2M2NcdTk2M2RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2''@;'; put 'put ''NjFcdTk2NmVcdTk2NzRcdTk2N2JcdTk2N2NcdTk2N2VcdTk2N2ZcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2OWFcdTk2OWRcdTk2OWZcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YTlcdTk2YWVcdTk2YWZcdTk2YjNcdTk2YmFcdTk2Y2FcdTk2ZDJcdTVkYjJc''@;'; put 'put ''dTk2ZDhcdTk2ZGFcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTlcdTk2ZWZcdTk2ZjFcdTk2ZmFcdTk3MDIiXSxbIjhmZTdhMSIsIlx1OTcwM1x1OTcwNVx1OTcwOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0YVx1''@;'; put 'put ''OTc0ZVx1OTc0Zlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Ylx1OTc2M1x1OTc2N1x1OTc2YVx1OTc2ZVx1OTc3M1x1OTc3Nlx1OTc3N1x1OTc3OFx1OTc3Ylx1OTc3ZFx1OTc3Zlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5YVx1OTc5ZVx1OTc5Zlx1OTdh''@;'; put 'put ''Mlx1OTdhY1x1OTdhZVx1OTdiMVx1OTdiMlx1OTdiNVx1OTdiNlx1OTdiOFx1OTdiOVx1OTdiYVx1OTdiY1x1OTdiZVx1OTdiZlx1OTdjMVx1OTdjNFx1OTdjNVx1OTdjN1x1OTdjOVx1OTdjYVx1OTdjY1x1OTdjZFx1OTdjZVx1OTdkMFx1OTdkMVx1OTdkNFx1OTdkN1x1OTdkOFx1OTdkOVx1''@;'; put 'put ''OTdkZFx1OTdkZVx1OTdlMFx1OTdkYlx1OTdlMVx1OTdlNFx1OTdlZlx1OTdmMVx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmYVx1OTgwN1x1OTgwYVx1OTgxOVx1OTgwZFx1OTgwZVx1OTgxNFx1OTgxNlx1OTgxY1x1OTgxZVx1OTgyMFx1OTgyM1x1OTgyNiJdLFsiOGZlOGExIiwiXHU5ODJiXHU5''@;'; put 'put ''ODJlXHU5ODJmXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNlXHU5ODQ0XHU5ODQ3XHU5ODRhXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU2XHU5ODU3XHU5ODU5XHU5ODVhXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZhXHU5ODZjXHU5OGFiXHU5OGFkXHU5OGFlXHU5OGIw''@;'; put 'put ''XHU5OGI0XHU5OGI3XHU5OGI4XHU5OGJhXHU5OGJiXHU5OGJmXHU5OGMyXHU5OGM1XHU5OGM4XHU5OGNjXHU5OGUxXHU5OGUzXHU5OGU1XHU5OGU2XHU5OGU3XHU5OGVhXHU5OGYzXHU5OGY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFhXHU5OTFiXHU5''@;'; put 'put ''OTFjXHU5OTFmXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJiXHU5OTMxIiw0LCJcdTk5MzlcdTk5M2FcdTk5M2JcdTk5M2NcdTk5NDBcdTk5NDFcdTk5NDZcdTk5NDdcdTk5NDhcdTk5NGRcdTk5NGVcdTk5NTRcdTk5NThcdTk5NTlcdTk5NWJcdTk5NWNcdTk5NWVcdTk5NWZcdTk5NjBcdTk5OWJc''@;'; put 'put ''dTk5OWRcdTk5OWZcdTk5YTZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjUiXSxbIjhmZTlhMSIsIlx1OTliOVx1OTliYVx1OTliZFx1OTliZlx1OTljM1x1OTljOVx1OTlkM1x1OTlkNFx1OTlkOVx1OTlkYVx1OTlkY1x1OTlkZVx1OTllN1x1OTllYVx1OTllYlx1OTllY1x1OTlmMFx1OTlmNFx1''@;'; put 'put ''OTlmNVx1OTlmOVx1OTlmZFx1OTlmZVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwYlx1OWEwY1x1OWExMFx1OWExMVx1OWExNlx1OWExZVx1OWEyMFx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyN1x1OWEyZFx1OWEyZVx1OWEzM1x1OWEzNVx1OWEzNlx1OWEzOFx1OWE0N1x1OWE0MVx1OWE0NFx1OWE0''@;'; put 'put ''YVx1OWE0Ylx1OWE0Y1x1OWE0ZVx1OWE1MVx1OWE1NFx1OWE1Nlx1OWE1ZFx1OWFhYVx1OWFhY1x1OWFhZVx1OWFhZlx1OWFiMlx1OWFiNFx1OWFiNVx1OWFiNlx1OWFiOVx1OWFiYlx1OWFiZVx1OWFiZlx1OWFjMVx1OWFjM1x1OWFjNlx1OWFjOFx1OWFjZVx1OWFkMFx1OWFkMlx1OWFkNVx1''@;'; put 'put ''OWFkNlx1OWFkN1x1OWFkYlx1OWFkY1x1OWFlMFx1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOVx1OWFlY1x1OWFmMlx1OWFmM1x1OWFmNVx1OWFmOVx1OWFmYVx1OWFmZFx1OWFmZiIsNF0sWyI4ZmVhYTEiLCJcdTliMDRcdTliMDVcdTliMDhcdTliMDlcdTliMGJcdTliMGNcdTliMGRcdTliMGVc''@;'; put 'put ''dTliMTBcdTliMTJcdTliMTZcdTliMTlcdTliMWJcdTliMWNcdTliMjBcdTliMjZcdTliMmJcdTliMmRcdTliMzNcdTliMzRcdTliMzVcdTliMzdcdTliMzlcdTliM2FcdTliM2RcdTliNDhcdTliNGJcdTliNGNcdTliNTVcdTliNTZcdTliNTdcdTliNWJcdTliNWVcdTliNjFcdTliNjNcdTli''@;'; put 'put ''NjVcdTliNjZcdTliNjhcdTliNmEiLDQsIlx1OWI3M1x1OWI3NVx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3Zlx1OWI4MFx1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4ZFx1OWI4Zlx1OWI5MFx1OWI5NFx1OWI5YVx1OWI5ZFx1OWI5ZVx1OWJhNlx1OWJhN1x1''@;'; put 'put ''OWJhOVx1OWJhY1x1OWJiMFx1OWJiMVx1OWJiMlx1OWJiN1x1OWJiOFx1OWJiYlx1OWJiY1x1OWJiZVx1OWJiZlx1OWJjMVx1OWJjN1x1OWJjOFx1OWJjZVx1OWJkMFx1OWJkN1x1OWJkOFx1OWJkZFx1OWJkZlx1OWJlNVx1OWJlN1x1OWJlYVx1OWJlYlx1OWJlZlx1OWJmM1x1OWJmN1x1OWJm''@;'; put 'put ''OCJdLFsiOGZlYmExIiwiXHU5YmY5XHU5YmZhXHU5YmZkXHU5YmZmXHU5YzAwXHU5YzAyXHU5YzBiXHU5YzBmXHU5YzExXHU5YzE2XHU5YzE4XHU5YzE5XHU5YzFhXHU5YzFjXHU5YzFlXHU5YzIyXHU5YzIzXHU5YzI2Iiw0LCJcdTljMzFcdTljMzVcdTljMzZcdTljMzdcdTljM2RcdTljNDFc''@;'; put 'put ''dTljNDNcdTljNDRcdTljNDVcdTljNDlcdTljNGFcdTljNGVcdTljNGZcdTljNTBcdTljNTNcdTljNTRcdTljNTZcdTljNThcdTljNWJcdTljNWRcdTljNWVcdTljNWZcdTljNjNcdTljNjlcdTljNmFcdTljNWNcdTljNmJcdTljNjhcdTljNmVcdTljNzBcdTljNzJcdTljNzVcdTljNzdcdTlj''@;'; put 'put ''N2JcdTljZTZcdTljZjJcdTljZjdcdTljZjlcdTlkMGJcdTlkMDJcdTlkMTFcdTlkMTdcdTlkMThcdTlkMWNcdTlkMWRcdTlkMWVcdTlkMmZcdTlkMzBcdTlkMzJcdTlkMzNcdTlkMzRcdTlkM2FcdTlkM2NcdTlkNDVcdTlkM2RcdTlkNDJcdTlkNDNcdTlkNDdcdTlkNGFcdTlkNTNcdTlkNTRc''@;'; put 'put ''dTlkNWZcdTlkNjNcdTlkNjJcdTlkNjVcdTlkNjlcdTlkNmFcdTlkNmJcdTlkNzBcdTlkNzZcdTlkNzdcdTlkN2IiXSxbIjhmZWNhMSIsIlx1OWQ3Y1x1OWQ3ZVx1OWQ4M1x1OWQ4NFx1OWQ4Nlx1OWQ4YVx1OWQ4ZFx1OWQ4ZVx1OWQ5Mlx1OWQ5M1x1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1''@;'; put 'put ''OWRhMVx1OWRhYVx1OWRhY1x1OWRhZVx1OWRiMVx1OWRiNVx1OWRiOVx1OWRiY1x1OWRiZlx1OWRjM1x1OWRjN1x1OWRjOVx1OWRjYVx1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkYVx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlNVx1OWRlN1x1OWRlOVx1OWRlYlx1OWRlZVx1OWRmMFx1OWRm''@;'; put 'put ''M1x1OWRmNFx1OWRmZVx1OWUwYVx1OWUwMlx1OWUwN1x1OWUwZVx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxNVx1OWUxNlx1OWUxOVx1OWUxY1x1OWUxZFx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU4MFx1OWU4Mlx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4N1x1OWU4ZVx1OWU4Zlx1OWU5Nlx1OWU5OFx1''@;'; put 'put ''OWU5Ylx1OWU5ZVx1OWVhNFx1OWVhOFx1OWVhY1x1OWVhZVx1OWVhZlx1OWViMFx1OWViM1x1OWViNFx1OWViNVx1OWVjNlx1OWVjOFx1OWVjYlx1OWVkNVx1OWVkZlx1OWVlNFx1OWVlN1x1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmNSJdLFsiOGZlZGExIiwiXHU5''@;'; put 'put ''ZWY4XHU5ZWZmXHU5ZjAyXHU5ZjAzXHU5ZjA5XHU5ZjBmXHU5ZjEwXHU5ZjExXHU5ZjEyXHU5ZjE0XHU5ZjE2XHU5ZjE3XHU5ZjE5XHU5ZjFhXHU5ZjFiXHU5ZjFmXHU5ZjIyXHU5ZjI2XHU5ZjJhXHU5ZjJiXHU5ZjJmXHU5ZjMxXHU5ZjMyXHU5ZjM0XHU5ZjM3XHU5ZjM5XHU5ZjNhXHU5ZjNj''@;'; put 'put ''XHU5ZjNkXHU5ZjNmXHU5ZjQxXHU5ZjQzIiw0LCJcdTlmNTNcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNWFcdTlmNWRcdTlmNWVcdTlmNjhcdTlmNjlcdTlmNmQiLDQsIlx1OWY3M1x1OWY3NVx1OWY3YVx1OWY3ZFx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5NFx1OWY5Nlx1OWY5''@;'; put 'put ''N1x1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNSJdXScpfSwzNjI1ODphdD0+eyJ1c2Ugc3RyaWN0IjthdC5leHBvcnRzPUpTT04ucGFyc2UoJ3sidUNoYXJzIjpbMTI4LDE2NSwxNjksMTc4LDE4NCwyMTYsMjI2LDIzNSwyMzgsMjQ0LDI0OCwyNTEsMjUzLDI1OCwyNzYsMjg0LDMwMCwz''@;'; put 'put ''MjUsMzI5LDMzNCwzNjQsNDYzLDQ2NSw0NjcsNDY5LDQ3MSw0NzMsNDc1LDQ3Nyw1MDYsNTk0LDYxMCw3MTIsNzE2LDczMCw5MzAsOTM4LDk2Miw5NzAsMTAyNiwxMTA0LDExMDYsODIwOSw4MjE1LDgyMTgsODIyMiw4MjMxLDgyNDEsODI0NCw4MjQ2LDgyNTIsODM2NSw4NDUyLDg0NTQsODQ1''@;'; put 'put ''OCw4NDcxLDg0ODIsODU1Niw4NTcwLDg1OTYsODYwMiw4NzEzLDg3MjAsODcyMiw4NzI2LDg3MzEsODczNyw4NzQwLDg3NDIsODc0OCw4NzUxLDg3NjAsODc2Niw4Nzc3LDg3ODEsODc4Nyw4ODAyLDg4MDgsODgxNiw4ODU0LDg4NTgsODg3MCw4ODk2LDg5NzksOTMyMiw5MzcyLDk1NDgsOTU4''@;'; put 'put ''OCw5NjE2LDk2MjIsOTYzNCw5NjUyLDk2NjIsOTY3Miw5Njc2LDk2ODAsOTcwMiw5NzM1LDk3MzgsOTc5Myw5Nzk1LDExOTA2LDExOTA5LDExOTEzLDExOTE3LDExOTI4LDExOTQ0LDExOTQ3LDExOTUxLDExOTU2LDExOTYwLDExOTY0LDExOTc5LDEyMjg0LDEyMjkyLDEyMzEyLDEyMzE5LDEy''@;'; put 'put ''MzMwLDEyMzUxLDEyNDM2LDEyNDQ3LDEyNTM1LDEyNTQzLDEyNTg2LDEyODQyLDEyODUwLDEyOTY0LDEzMjAwLDEzMjE1LDEzMjE4LDEzMjUzLDEzMjYzLDEzMjY3LDEzMjcwLDEzMzg0LDEzNDI4LDEzNzI3LDEzODM5LDEzODUxLDE0NjE3LDE0NzAzLDE0ODAxLDE0ODE2LDE0OTY0LDE1MTgz''@;'; put 'put ''LDE1NDcxLDE1NTg1LDE2NDcxLDE2NzM2LDE3MjA4LDE3MzI1LDE3MzMwLDE3Mzc0LDE3NjIzLDE3OTk3LDE4MDE4LDE4MjEyLDE4MjE4LDE4MzAxLDE4MzE4LDE4NzYwLDE4ODExLDE4ODE0LDE4ODIwLDE4ODIzLDE4ODQ0LDE4ODQ4LDE4ODcyLDE5NTc2LDE5NjIwLDE5NzM4LDE5ODg3LDQw''@;'; put 'put ''ODcwLDU5MjQ0LDU5MzM2LDU5MzY3LDU5NDEzLDU5NDE3LDU5NDIzLDU5NDMxLDU5NDM3LDU5NDQzLDU5NDUyLDU5NDYwLDU5NDc4LDU5NDkzLDYzNzg5LDYzODY2LDYzODk0LDYzOTc2LDYzOTg2LDY0MDE2LDY0MDE4LDY0MDIxLDY0MDI1LDY0MDM0LDY0MDM3LDY0MDQyLDY1MDc0LDY1MDkz''@;'; put 'put ''LDY1MTA3LDY1MTEyLDY1MTI3LDY1MTMyLDY1Mzc1LDY1NTEwLDY1NTM2XSwiZ2JDaGFycyI6WzAsMzYsMzgsNDUsNTAsODEsODksOTUsOTYsMTAwLDEwMywxMDQsMTA1LDEwOSwxMjYsMTMzLDE0OCwxNzIsMTc1LDE3OSwyMDgsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzNDEs''@;'; put 'put ''NDI4LDQ0Myw1NDQsNTQ1LDU1OCw3NDEsNzQyLDc0OSw3NTAsODA1LDgxOSw4MjAsNzkyMiw3OTI0LDc5MjUsNzkyNyw3OTM0LDc5NDMsNzk0NCw3OTQ1LDc5NTAsODA2Miw4MTQ4LDgxNDksODE1Miw4MTY0LDgxNzQsODIzNiw4MjQwLDgyNjIsODI2NCw4Mzc0LDgzODAsODM4MSw4Mzg0LDgz''@;'; put 'put ''ODgsODM5MCw4MzkyLDgzOTMsODM5NCw4Mzk2LDg0MDEsODQwNiw4NDE2LDg0MTksODQyNCw4NDM3LDg0MzksODQ0NSw4NDgyLDg0ODUsODQ5Niw4NTIxLDg2MDMsODkzNiw4OTQ2LDkwNDYsOTA1MCw5MDYzLDkwNjYsOTA3Niw5MDkyLDkxMDAsOTEwOCw5MTExLDkxMTMsOTEzMSw5MTYyLDkx''@;'; put 'put ''NjQsOTIxOCw5MjE5LDExMzI5LDExMzMxLDExMzM0LDExMzM2LDExMzQ2LDExMzYxLDExMzYzLDExMzY2LDExMzcwLDExMzcyLDExMzc1LDExMzg5LDExNjgyLDExNjg2LDExNjg3LDExNjkyLDExNjk0LDExNzE0LDExNzE2LDExNzIzLDExNzI1LDExNzMwLDExNzM2LDExOTgyLDExOTg5LDEy''@;'; put 'put ''MTAyLDEyMzM2LDEyMzQ4LDEyMzUwLDEyMzg0LDEyMzkzLDEyMzk1LDEyMzk3LDEyNTEwLDEyNTUzLDEyODUxLDEyOTYyLDEyOTczLDEzNzM4LDEzODIzLDEzOTE5LDEzOTMzLDE0MDgwLDE0Mjk4LDE0NTg1LDE0Njk4LDE1NTgzLDE1ODQ3LDE2MzE4LDE2NDM0LDE2NDM4LDE2NDgxLDE2NzI5''@;'; put 'put ''LDE3MTAyLDE3MTIyLDE3MzE1LDE3MzIwLDE3NDAyLDE3NDE4LDE3ODU5LDE3OTA5LDE3OTExLDE3OTE1LDE3OTE2LDE3OTM2LDE3OTM5LDE3OTYxLDE4NjY0LDE4NzAzLDE4ODE0LDE4OTYyLDE5MDQzLDMzNDY5LDMzNDcwLDMzNDcxLDMzNDg0LDMzNDg1LDMzNDkwLDMzNDk3LDMzNTAxLDMz''@;'; put 'put ''NTA1LDMzNTEzLDMzNTIwLDMzNTM2LDMzNTUwLDM3ODQ1LDM3OTIxLDM3OTQ4LDM4MDI5LDM4MDM4LDM4MDY0LDM4MDY1LDM4MDY2LDM4MDY5LDM4MDc1LDM4MDc2LDM4MDc4LDM5MTA4LDM5MTA5LDM5MTEzLDM5MTE0LDM5MTE1LDM5MTE2LDM5MjY1LDM5Mzk0LDE4OTAwMF19Jyl9LDQ0MzQ2''@;'; put 'put ''OmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siYTE0MCIsIlx1ZTRjNiIsNjJdLFsiYTE4MCIsIlx1ZTUwNSIsMzJdLFsiYTI0MCIsIlx1ZTUyNiIsNjJdLFsiYTI4MCIsIlx1ZTU2NSIsMzJdLFsiYTJhYiIsIlx1ZTc2NiIsNV0sWyJhMmUzIiwiXHUyMGFjXHVl''@;'; put 'put ''NzZkIl0sWyJhMmVmIiwiXHVlNzZlXHVlNzZmIl0sWyJhMmZkIiwiXHVlNzcwXHVlNzcxIl0sWyJhMzQwIiwiXHVlNTg2Iiw2Ml0sWyJhMzgwIiwiXHVlNWM1IiwzMSwiXHUzMDAwIl0sWyJhNDQwIiwiXHVlNWU2Iiw2Ml0sWyJhNDgwIiwiXHVlNjI1IiwzMl0sWyJhNGY0IiwiXHVlNzcyIiwx''@;'; put 'put ''MF0sWyJhNTQwIiwiXHVlNjQ2Iiw2Ml0sWyJhNTgwIiwiXHVlNjg1IiwzMl0sWyJhNWY3IiwiXHVlNzdkIiw3XSxbImE2NDAiLCJcdWU2YTYiLDYyXSxbImE2ODAiLCJcdWU2ZTUiLDMyXSxbImE2YjkiLCJcdWU3ODUiLDddLFsiYTZkOSIsIlx1ZTc4ZCIsNl0sWyJhNmVjIiwiXHVlNzk0XHVl''@;'; put 'put ''Nzk1Il0sWyJhNmYzIiwiXHVlNzk2Il0sWyJhNmY2IiwiXHVlNzk3Iiw4XSxbImE3NDAiLCJcdWU3MDYiLDYyXSxbImE3ODAiLCJcdWU3NDUiLDMyXSxbImE3YzIiLCJcdWU3YTAiLDE0XSxbImE3ZjIiLCJcdWU3YWYiLDEyXSxbImE4OTYiLCJcdWU3YmMiLDEwXSxbImE4YmMiLCJcdWU3Yzci''@;'; put 'put ''XSxbImE4YmYiLCJcdTAxZjkiXSxbImE4YzEiLCJcdWU3YzlcdWU3Y2FcdWU3Y2JcdWU3Y2MiXSxbImE4ZWEiLCJcdWU3Y2QiLDIwXSxbImE5NTgiLCJcdWU3ZTIiXSxbImE5NWIiLCJcdWU3ZTMiXSxbImE5NWQiLCJcdWU3ZTRcdWU3ZTVcdWU3ZTYiXSxbImE5ODkiLCJcdTMwM2VcdTJmZjAi''@;'; put 'put ''LDExXSxbImE5OTciLCJcdWU3ZjQiLDEyXSxbImE5ZjAiLCJcdWU4MDEiLDE0XSxbImFhYTEiLCJcdWUwMDAiLDkzXSxbImFiYTEiLCJcdWUwNWUiLDkzXSxbImFjYTEiLCJcdWUwYmMiLDkzXSxbImFkYTEiLCJcdWUxMWEiLDkzXSxbImFlYTEiLCJcdWUxNzgiLDkzXSxbImFmYTEiLCJcdWUx''@;'; put 'put ''ZDYiLDkzXSxbImQ3ZmEiLCJcdWU4MTAiLDRdLFsiZjhhMSIsIlx1ZTIzNCIsOTNdLFsiZjlhMSIsIlx1ZTI5MiIsOTNdLFsiZmFhMSIsIlx1ZTJmMCIsOTNdLFsiZmJhMSIsIlx1ZTM0ZSIsOTNdLFsiZmNhMSIsIlx1ZTNhYyIsOTNdLFsiZmRhMSIsIlx1ZTQwYSIsOTNdLFsiZmU1MCIsIlx1''@;'; put 'put ''MmU4MVx1ZTgxNlx1ZTgxN1x1ZTgxOFx1MmU4NFx1MzQ3M1x1MzQ0N1x1MmU4OFx1MmU4Ylx1ZTgxZVx1MzU5ZVx1MzYxYVx1MzYwZVx1MmU4Y1x1MmU5N1x1Mzk2ZVx1MzkxOFx1ZTgyNlx1MzljZlx1MzlkZlx1M2E3M1x1MzlkMFx1ZTgyYlx1ZTgyY1x1M2I0ZVx1M2M2ZVx1M2NlMFx1MmVh''@;'; put 'put ''N1x1ZTgzMVx1ZTgzMlx1MmVhYVx1NDA1Nlx1NDE1Zlx1MmVhZVx1NDMzN1x1MmViM1x1MmViNlx1MmViN1x1ZTgzYlx1NDNiMVx1NDNhY1x1MmViYlx1NDNkZFx1NDRkNlx1NDY2MVx1NDY0Y1x1ZTg0MyJdLFsiZmU4MCIsIlx1NDcyM1x1NDcyOVx1NDc3Y1x1NDc4ZFx1MmVjYVx1NDk0N1x1''@;'; put 'put ''NDk3YVx1NDk3ZFx1NDk4Mlx1NDk4M1x1NDk4NVx1NDk4Nlx1NDk5Zlx1NDk5Ylx1NDliN1x1NDliNlx1ZTg1NFx1ZTg1NVx1NGNhM1x1NGM5Zlx1NGNhMFx1NGNhMVx1NGM3N1x1NGNhMlx1NGQxMyIsNiwiXHU0ZGFlXHVlODY0XHVlNDY4Iiw5M11dJyl9LDI3MDE0OmF0PT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyOF0sWyJhMSIsIlx1ZmY2MSIsNjJdLFsiODE0MCIsIlx1MzAwMFx1MzAwMVx1MzAwMlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVm''@;'; put 'put ''ZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBmXHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5''@;'; put 'put ''XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4Iiw5LCJcdWZmMGJcdWZmMGRceGIxXHhkNyJdLFsiODE4MCIsIlx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAz''@;'; put 'put ''XHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5''@;'; put 'put ''MVx1MjE5M1x1MzAxMyJdLFsiODFiOCIsIlx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOSJdLFsiODFjOCIsIlx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwMyJdLFsiODFkYSIsIlx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1''@;'; put 'put ''MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyYyJdLFsiODFmMCIsIlx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjYiXSxbIjgxZmMiLCJcdTI1ZWYiXSxbIjgyNGYiLCJcdWZmMTAiLDldLFsi''@;'; put 'put ''ODI2MCIsIlx1ZmYyMSIsMjVdLFsiODI4MSIsIlx1ZmY0MSIsMjVdLFsiODI5ZiIsIlx1MzA0MSIsODJdLFsiODM0MCIsIlx1MzBhMSIsNjJdLFsiODM4MCIsIlx1MzBlMCIsMjJdLFsiODM5ZiIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyI4M2JmIiwiXHUwM2IxIiwxNiwiXHUwM2MzIiw2''@;'; put 'put ''XSxbIjg0NDAiLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsMjVdLFsiODQ3MCIsIlx1MDQzMCIsNSwiXHUwNDUxXHUwNDM2Iiw3XSxbIjg0ODAiLCJcdTA0M2UiLDE3XSxbIjg0OWYiLCJcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1''@;'; put 'put ''MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDIiXSxbIjg3NDAiLCJcdTI0NjAiLDE5LCJcdTIxNjAi''@;'; put 'put ''LDldLFsiODc1ZiIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiODc3ZSIsIlx1''@;'; put 'put ''MzM3YiJdLFsiODc4MCIsIlx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5''@;'; put 'put ''XHUyMjJhIl0sWyI4ODlmIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1''@;'; put 'put ''OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRm''@;'; put 'put ''XHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3''@;'; put 'put ''YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyI4OTQwIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4''@;'; put 'put ''XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2''@;'; put 'put ''NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2Il0sWyI4OTgwIiwiXHU1NzEy''@;'; put 'put ''XHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1''@;'; put 'put ''OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5''@;'; put 'put ''XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3''@;'; put 'put ''Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNi''@;'; put 'put ''XHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyI4YTQwIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5''@;'; put 'put ''NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQz''@;'; put 'put ''XHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiIl0sWyI4YTgwIiwiXHU2YTdmXHU2''@;'; put 'put ''OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIy''@;'; put 'put ''XHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2''@;'; put 'put ''NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUx''@;'; put 'put ''XHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1''@;'; put 'put ''OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyI4YjQwIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThm''@;'; put 'put ''XHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1''@;'; put 'put ''NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxIl0sWyI4YjgwIiwiXHU2NzNkXHU2YzQy''@;'; put 'put ''XHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0''@;'; put 'put ''ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2Vm''@;'; put 'put ''XHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2''@;'; put 'put ''YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3''@;'; put 'put ''XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyI4YzQwIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5''@;'; put 'put ''MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNh''@;'; put 'put ''XHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4Il0sWyI4YzgwIiwiXHU1Mjg3XHU2MjFmXHU2''@;'; put 'put ''NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYz''@;'; put 'put ''XHU2MzcyXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2''@;'; put 'put ''ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2Yw''@;'; put 'put ''XHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0''@;'; put 'put ''ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyI4ZDQwIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgz''@;'; put 'put ''XHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3''@;'; put 'put ''ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkIl0sWyI4ZDgwIiwiXHU5ODA1XHU5OTk5XHU5YWQ4''@;'; put 'put ''XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4''@;'; put 'put ''ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5''@;'; put 'put ''XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3''@;'; put 'put ''OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4''@;'; put 'put ''XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyI4ZTQwIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3''@;'; put 'put ''NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNh''@;'; put 'put ''XHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyIl0sWyI4ZTgwIiwiXHU2YjdiXHU2YzBmXHU3MzQ1XHU3''@;'; put 'put ''OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2MzAxXHU2NjQy''@;'; put 'put ''XHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1''@;'; put 'put ''YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZl''@;'; put 'put ''XHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5''@;'; put 'put ''OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyI4ZjQwIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFm''@;'; put 'put ''XHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2''@;'; put 'put ''ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzIl0sWyI4ZjgwIiwiXHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0''@;'; put 'put ''XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1''@;'; put 'put ''MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJk''@;'; put 'put ''XHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4''@;'; put 'put ''OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2''@;'; put 'put ''XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyI5MDQwIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0''@;'; put 'put ''ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMy''@;'; put 'put ''XHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4Il0sWyI5MDgwIiwiXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2''@;'; put 'put ''M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0''@;'; put 'put ''XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4''@;'; put 'put ''OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVm''@;'; put 'put ''XHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2''@;'; put 'put ''Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhIl0sWyI5MTQwIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFl''@;'; put 'put ''XHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5''@;'; put 'put ''NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiIl0sWyI5MTgwIiwiXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNk''@;'; put 'put ''XHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4''@;'; put 'put ''NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVj''@;'; put 'put ''XHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2''@;'; put 'put ''Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2Ey''@;'; put 'put ''XHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0sWyI5MjQwIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0''@;'; put 'put ''ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3''@;'; put 'put ''XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0Il0sWyI5MjgwIiwiXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3''@;'; put 'put ''NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMz''@;'; put 'put ''XHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3''@;'; put 'put ''NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2Zjcw''@;'; put 'put ''XHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2''@;'; put 'put ''YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyI5MzQwIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5''@;'; put 'put ''XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1''@;'; put 'put ''ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjIl0sWyI5MzgwIiwiXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3''@;'; put 'put ''XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4''@;'; put 'put ''NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3''@;'; put 'put ''XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4''@;'; put 'put ''YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEw''@;'; put 'put ''XHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyI5NDQwIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2''@;'; put 'put ''MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2''@;'; put 'put ''XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1Il0sWyI5NDgwIiwiXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5''@;'; put 'put ''NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcy''@;'; put 'put ''XHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1''@;'; put 'put ''M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVl''@;'; put 'put ''XHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3''@;'; put 'put ''YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyI5NTQwIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWVi''@;'; put 'put ''XHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2''@;'; put 'put ''ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3Il0sWyI5NTgwIiwiXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlh''@;'; put 'put ''XHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4''@;'; put 'put ''OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTcz''@;'; put 'put ''XHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1''@;'; put 'put ''ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2Yw''@;'; put 'put ''XHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyI5NjQwIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5''@;'; put 'put ''ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1''@;'; put 'put ''XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2Il0sWyI5NjgwIiwiXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2''@;'; put 'put ''NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJh''@;'; put 'put ''XHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2''@;'; put 'put ''NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5''@;'; put 'put ''XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5''@;'; put 'put ''NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyI5NzQwIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3''@;'; put 'put ''XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2''@;'; put 'put ''ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyIl0sWyI5NzgwIiwiXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4''@;'; put 'put ''XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5''@;'; put 'put ''NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVl''@;'; put 'put ''XHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3''@;'; put 'put ''NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5''@;'; put 'put ''XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyI5ODQwIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2''@;'; put 'put ''ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMx''@;'; put 'put ''XHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyI5ODlmIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0''@;'; put 'put ''ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5''@;'; put 'put ''XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0''@;'; put 'put ''ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyI5OTQwIiwiXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1''@;'; put 'put ''XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1''@;'; put 'put ''MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5''@;'; put 'put ''XHU1MWVkIl0sWyI5OTgwIiwiXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1''@;'; put 'put ''MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBk''@;'; put 'put ''XHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1''@;'; put 'put ''M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVm''@;'; put 'put ''XHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyI5YTQwIiwiXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1''@;'; put 'put ''NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4''@;'; put 'put ''XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1''@;'; put 'put ''NjM4Il0sWyI5YTgwIiwiXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3''@;'; put 'put ''XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1''@;'; put 'put ''NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5''@;'; put 'put ''XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2''@;'; put 'put ''OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyI5YjQwIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2''@;'; put 'put ''XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1''@;'; put 'put ''YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1Yjgw''@;'; put 'put ''Il0sWyI5YjgwIiwiXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1''@;'; put 'put ''YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5''@;'; put 'put ''XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1''@;'; put 'put ''ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRl''@;'; put 'put ''XHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyI5YzQwIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1''@;'; put 'put ''ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYx''@;'; put 'put ''XHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwIl0s''@;'; put 'put ''WyI5YzgwIiwiXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5''@;'; put 'put ''XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2''@;'; put 'put ''MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0''@;'; put 'put ''XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2''@;'; put 'put ''MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyI5ZDQwIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRl''@;'; put 'put ''XHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2''@;'; put 'put ''MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiIl0sWyI5''@;'; put 'put ''ZDgwIiwiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2''@;'; put 'put ''NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4''@;'; put 'put ''XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2''@;'; put 'put ''NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3''@;'; put 'put ''XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyI5ZTQwIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2''@;'; put 'put ''NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2''@;'; put 'put ''XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2ODMyXHU2ODRlIl0sWyI5ZTgw''@;'; put 'put ''IiwiXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4XHU2OGQ4XHU2OTIy''@;'; put 'put ''XHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2''@;'; put 'put ''OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJl''@;'; put 'put ''XHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2''@;'; put 'put ''YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyI5ZjQwIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQx''@;'; put 'put ''XHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2''@;'; put 'put ''Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmIl0sWyI5ZjgwIiwi''@;'; put 'put ''XHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2''@;'; put 'put ''Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1''@;'; put 'put ''XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2''@;'; put 'put ''ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThm''@;'; put 'put ''XHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJlMDQwIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2''@;'; put 'put ''ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDEx''@;'; put 'put ''XHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkIl0sWyJlMDgwIiwiXHU3''@;'; put 'put ''MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVj''@;'; put 'put ''XHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3''@;'; put 'put ''MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4''@;'; put 'put ''XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3''@;'; put 'put ''NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMTQwIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0''@;'; put 'put ''XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3''@;'; put 'put ''NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmIl0sWyJlMTgwIiwiXHU3NWZj''@;'; put 'put ''XHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3''@;'; put 'put ''NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1''@;'; put 'put ''XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3''@;'; put 'put ''N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlh''@;'; put 'put ''XHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlMjQwIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3''@;'; put 'put ''OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIw''@;'; put 'put ''XHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwIl0sWyJlMjgwIiwiXHU3YWI2XHU3''@;'; put 'put ''YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4''@;'; put 'put ''XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3''@;'; put 'put ''YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNk''@;'; put 'put ''XHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3''@;'; put 'put ''Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlMzQwIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDcz''@;'; put 'put ''XHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3''@;'; put 'put ''ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3Il0sWyJlMzgwIiwiXHU3ZTMyXHU3ZTNh''@;'; put 'put ''XHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3''@;'; put 'put ''ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEz''@;'; put 'put ''XHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4''@;'; put 'put ''MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1''@;'; put 'put ''XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlNDQwIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4''@;'; put 'put ''MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUw''@;'; put 'put ''XHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0Il0sWyJlNDgwIiwiXHU4MjYyXHU4MjY4XHU4''@;'; put 'put ''MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5''@;'; put 'put ''XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4''@;'; put 'put ''Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVh''@;'; put 'put ''XHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4''@;'; put 'put ''NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlNTQwIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTli''@;'; put 'put ''XHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0''@;'; put 'put ''ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjIl0sWyJlNTgwIiwiXHU4NmRmXHU4NmRiXHU4NmVm''@;'; put 'put ''XHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4''@;'; put 'put ''NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3''@;'; put 'put ''XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4''@;'; put 'put ''ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFl''@;'; put 'put ''XHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlNjQwIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4''@;'; put 'put ''OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2''@;'; put 'put ''XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3Il0sWyJlNjgwIiwiXHU4YWU0XHU4YWYxXHU4YjE0XHU4''@;'; put 'put ''YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZi''@;'; put 'put ''XHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4''@;'; put 'put ''Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBm''@;'; put 'put ''XHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4''@;'; put 'put ''ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlNzQwIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdj''@;'; put 'put ''XHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4''@;'; put 'put ''ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjIl0sWyJlNzgwIiwiXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4Zjlj''@;'; put 'put ''XHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5''@;'; put 'put ''MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0''@;'; put 'put ''XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5''@;'; put 'put ''MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2''@;'; put 'put ''XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlODQwIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5''@;'; put 'put ''M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDVi''@;'; put 'put ''XHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5Il0sWyJlODgwIiwiXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5''@;'; put 'put ''NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVk''@;'; put 'put ''XHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5''@;'; put 'put ''NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5''@;'; put 'put ''XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5''@;'; put 'put ''ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwIl0sWyJlOTQwIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEy''@;'; put 'put ''XHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5''@;'; put 'put ''OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzIl0sWyJlOTgwIiwiXHU5YTNlXHU5YTU1XHU5YTRkXHU5YTViXHU5YTU3''@;'; put 'put ''XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5YWY3XHU5YWZiXHU5''@;'; put 'put ''YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5Yjlm''@;'; put 'put ''XHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5''@;'; put 'put ''YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFm''@;'; put 'put ''XHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0sWyJlYTQwIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5''@;'; put 'put ''ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1''@;'; put 'put ''XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmIl0sWyJlYTgwIiwiXHU5ZWY0XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5''@;'; put 'put ''ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3''@;'; put 'put ''XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJlZDQwIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0''@;'; put 'put ''ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1Mzkz''@;'; put 'put ''XHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmIl0sWyJlZDgwIiwiXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1''@;'; put 'put ''YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYy''@;'; put 'put ''XHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2''@;'; put 'put ''NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2Rh''@;'; put 'put ''XHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVm''@;'; put 'put ''YTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJlZTQwIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3Njlj''@;'; put 'put ''XHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3''@;'; put 'put ''ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5Il0sWyJlZTgwIiwiXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJl''@;'; put 'put ''XHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5''@;'; put 'put ''MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAy''@;'; put 'put ''XHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5''@;'; put 'put ''OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJlZWVmIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxbImYwNDAiLCJcdWUwMDAiLDYyXSxbImYwODAi''@;'; put 'put ''LCJcdWUwM2YiLDEyNF0sWyJmMTQwIiwiXHVlMGJjIiw2Ml0sWyJmMTgwIiwiXHVlMGZiIiwxMjRdLFsiZjI0MCIsIlx1ZTE3OCIsNjJdLFsiZjI4MCIsIlx1ZTFiNyIsMTI0XSxbImYzNDAiLCJcdWUyMzQiLDYyXSxbImYzODAiLCJcdWUyNzMiLDEyNF0sWyJmNDQwIiwiXHVlMmYwIiw2Ml0s''@;'; put 'put ''WyJmNDgwIiwiXHVlMzJmIiwxMjRdLFsiZjU0MCIsIlx1ZTNhYyIsNjJdLFsiZjU4MCIsIlx1ZTNlYiIsMTI0XSxbImY2NDAiLCJcdWU0NjgiLDYyXSxbImY2ODAiLCJcdWU0YTciLDEyNF0sWyJmNzQwIiwiXHVlNTI0Iiw2Ml0sWyJmNzgwIiwiXHVlNTYzIiwxMjRdLFsiZjg0MCIsIlx1ZTVl''@;'; put 'put ''MCIsNjJdLFsiZjg4MCIsIlx1ZTYxZiIsMTI0XSxbImY5NDAiLCJcdWU2OWMiXSxbImZhNDAiLCJcdTIxNzAiLDksIlx1MjE2MCIsOSwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3''@;'; put 'put ''MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4''@;'; put 'put ''XHU1MTRhIl0sWyJmYTgwIiwiXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1''@;'; put 'put ''N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZk''@;'; put 'put ''XHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2''@;'; put 'put ''NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0''@;'; put 'put ''XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmIl0sWyJmYjQwIiwiXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2''@;'; put 'put ''ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2''@;'; put 'put ''XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVm''@;'; put 'put ''YTE5Il0sWyJmYjgwIiwiXHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4''@;'; put 'put ''XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVm''@;'; put 'put ''YTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3''@;'; put 'put ''XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5''@;'; put 'put ''NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5Il0sWyJmYzQwIiwiXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcw''@;'; put 'put ''XHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl1dJyl9LDIyNTYyOmF0PT57InVzZSBzdHJpY3QiO2F0LmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0''@;'; put 'put ''MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAx''@;'; put 'put ''LjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu''@;'; put 'put ''MS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxhdD0+e2F0KGF0LnM9ODIwMjUpfV0pOw=='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=polyfills.87dbbd3faabed513-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s0MjldLHs1NTMyMTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoNDI0NCksdCg3NzY1NyksdCg4ODgxMyksdCg1MzEwKSx0KDUxNzcxKSx0KDYyMzE0KSx0''@;'; put 'put ''KDE2MzQzKSx0KDM3MDQyKSx0KDc2NzcpLHQoODI2OTEpLHQoMjkxMzIpLHQoMTc4NzgpLHQoNTIyOTgpLHQoNDM0OTkpLHQoNjc3OTUpLHQoNDgzMzIpLHQoMzA3NTgpO3ZhciB2dD10KDM5MDA3KTt3aW5kb3cuZ2xvYmFsPXdpbmRvdyx3aW5kb3cuZ2xvYmFsLkJ1ZmZlcj13aW5kb3cuZ2xv''@;'; put 'put ''YmFsLkJ1ZmZlcnx8dnQuQnVmZmVyLHdpbmRvdy5wcm9jZXNzPXt2ZXJzaW9uOiIifX0sOTkxOTooYyxsKT0+eyJ1c2Ugc3RyaWN0IjtsLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gaShFKXt2YXIgaj1mKEUpLFI9alsxXTtyZXR1cm4gMyooalswXStSKS80LVJ9LGwudG9CeXRlQXJyYXk9ZnVuY3Rp''@;'; put 'put ''b24geShFKXt2YXIgaixTLHc9ZihFKSxSPXdbMF0sRj13WzFdLEI9bmV3IGUoZnVuY3Rpb24gcChFLGosdyl7cmV0dXJuIDMqKGordykvNC13fSgwLFIsRikpLGI9MCxPPUY+MD9SLTQ6Ujtmb3IoUz0wO1M8TztTKz00KWo9bltFLmNoYXJDb2RlQXQoUyldPDwxOHxuW0UuY2hhckNvZGVBdChT''@;'; put 'put ''KzEpXTw8MTJ8bltFLmNoYXJDb2RlQXQoUysyKV08PDZ8bltFLmNoYXJDb2RlQXQoUyszKV0sQltiKytdPWo+PjE2JjI1NSxCW2IrK109aj4+OCYyNTUsQltiKytdPTI1NSZqO3JldHVybiAyPT09RiYmKGo9bltFLmNoYXJDb2RlQXQoUyldPDwyfG5bRS5jaGFyQ29kZUF0KFMrMSldPj40LEJb''@;'; put 'put ''YisrXT0yNTUmaiksMT09PUYmJihqPW5bRS5jaGFyQ29kZUF0KFMpXTw8MTB8bltFLmNoYXJDb2RlQXQoUysxKV08PDR8bltFLmNoYXJDb2RlQXQoUysyKV0+PjIsQltiKytdPWo+PjgmMjU1LEJbYisrXT0yNTUmaiksQn0sbC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIHgoRSl7Zm9yKHZhciBq''@;'; put 'put ''LHc9RS5sZW5ndGgsUj13JTMsRj1bXSxCPTE2MzgzLGI9MCxPPXctUjtiPE87Yis9QilGLnB1c2goZyhFLGIsYitCPk8/TzpiK0IpKTtyZXR1cm4gMT09PVI/Ri5wdXNoKHRbKGo9RVt3LTFdKT4+Ml0rdFtqPDw0JjYzXSsiPT0iKToyPT09UiYmRi5wdXNoKHRbKGo9KEVbdy0yXTw8OCkrRVt3''@;'; put 'put ''LTFdKT4+MTBdK3Rbaj4+NCY2M10rdFtqPDwyJjYzXSsiPSIpLEYuam9pbigiIil9O2Zvcih2YXIgdD1bXSxuPVtdLGU9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXkscz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx''@;'; put 'put ''MjM0NTY3ODkrLyIsbz0wO288NjQ7KytvKXRbb109c1tvXSxuW3MuY2hhckNvZGVBdChvKV09bztmdW5jdGlvbiBmKEUpe3ZhciBqPUUubGVuZ3RoO2lmKGolND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciB3''@;'; put 'put ''PUUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09dyYmKHc9aiksW3csdz09PWo/MDo0LXclNF19ZnVuY3Rpb24gdihFKXtyZXR1cm4gdFtFPj4xOCY2M10rdFtFPj4xMiY2M10rdFtFPj42JjYzXSt0WzYzJkVdfWZ1bmN0aW9uIGcoRSxqLHcpe2Zvcih2YXIgRj1bXSxCPWo7Qjx3O0IrPTMpRi5w''@;'; put 'put ''dXNoKHYoKEVbQl08PDE2JjE2NzExNjgwKSsoRVtCKzFdPDw4JjY1MjgwKSsoMjU1JkVbQisyXSkpKTtyZXR1cm4gRi5qb2luKCIiKX1uWyItIi5jaGFyQ29kZUF0KDApXT02MixuWyJfIi5jaGFyQ29kZUF0KDApXT02M30sMzkwMDc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk5''@;'; put 'put ''MTkpLGU9dCgyMjYwMSkscz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7bC5CdWZmZXI9aSxsLlNsb3dCdWZmZXI9ZnVuY3Rpb24gQihkKXtyZXR1cm4r''@;'; put 'put ''ZCE9ZCYmKGQ9MCksaS5hbGxvYygrZCl9LGwuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIG89MjE0NzQ4MzY0NztmdW5jdGlvbiBmKGQpe2lmKGQ+byl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK2QrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciByPW5l''@;'; put 'put ''dyBVaW50OEFycmF5KGQpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixpLnByb3RvdHlwZSkscn1mdW5jdGlvbiBpKGQscixhKXtpZigibnVtYmVyIj09dHlwZW9mIGQpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1l''@;'; put 'put ''bnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gZyhkKX1yZXR1cm4gcChkLHIsYSl9ZnVuY3Rpb24gcChkLHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiB4KGQscil7aWYoKCJzdHJpbmciIT10eXBlb2Ygcnx8''@;'; put 'put ''IiI9PT1yKSYmKHI9InV0ZjgiKSwhaS5pc0VuY29kaW5nKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcik7dmFyIGE9MHxiKGQsciksbT1mKGEpLEQ9bS53cml0ZShkLHIpO3JldHVybiBEIT09YSYmKG09bS5zbGljZSgwLEQpKSxtfShkLHIpO2lmKEFycmF5''@;'; put 'put ''QnVmZmVyLmlzVmlldyhkKSlyZXR1cm4gZnVuY3Rpb24gaihkKXtpZihadChkLFVpbnQ4QXJyYXkpKXt2YXIgcj1uZXcgVWludDhBcnJheShkKTtyZXR1cm4gdyhyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKX1yZXR1cm4gRShkKX0oZCk7aWYobnVsbD09ZCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBkKTtpZihadChkLEFycmF5QnVmZmVyKXx8ZCYmWnQoZC5i''@;'; put 'put ''dWZmZXIsQXJyYXlCdWZmZXIpfHx0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiJiYoWnQoZCxTaGFyZWRBcnJheUJ1ZmZlcil8fGQmJlp0KGQuYnVmZmVyLFNoYXJlZEFycmF5QnVmZmVyKSkpcmV0dXJuIHcoZCxyLGEpO2lmKCJudW1iZXIiPT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgbT1kLnZhbHVlT2YmJmQudmFsdWVPZigpO2lmKG51bGwhPW0mJm0hPT1kKXJldHVybiBpLmZyb20obSxyLGEpO3ZhciBEPWZ1bmN0aW9uIFIoZCl7''@;'; put 'put ''aWYoaS5pc0J1ZmZlcihkKSl7dmFyIHI9MHxGKGQubGVuZ3RoKSxhPWYocik7cmV0dXJuIDA9PT1hLmxlbmd0aHx8ZC5jb3B5KGEsMCwwLHIpLGF9cmV0dXJuIHZvaWQgMCE9PWQubGVuZ3RoPyJudW1iZXIiIT10eXBlb2YgZC5sZW5ndGh8fGVuKGQubGVuZ3RoKT9mKDApOkUoZCk6IkJ1ZmZl''@;'; put 'put ''ciI9PT1kLnR5cGUmJkFycmF5LmlzQXJyYXkoZC5kYXRhKT9FKGQuZGF0YSk6dm9pZCAwfShkKTtpZihEKXJldHVybiBEO2lmKHR5cGVvZiBTeW1ib2w8InUiJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBkW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJu''@;'; put 'put ''IGkuZnJvbShkW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHIsYSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJl''@;'; put 'put ''Y2VpdmVkIHR5cGUgIit0eXBlb2YgZCl9ZnVuY3Rpb24geShkKXtpZigibnVtYmVyIiE9dHlwZW9mIGQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytk''@;'; put 'put ''KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBnKGQpe3JldHVybiB5KGQpLGYoZDwwPzA6MHxGKGQpKX1mdW5jdGlvbiBFKGQpe2Zvcih2YXIgcj1kLmxlbmd0aDwwPzA6MHxGKGQubGVuZ3RoKSxhPWYociksbT0wO208cjttKz0xKWFbbV09MjU1JmRbbV07cmV0''@;'; put 'put ''dXJuIGF9ZnVuY3Rpb24gdyhkLHIsYSl7aWYocjwwfHxkLmJ5dGVMZW5ndGg8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoZC5ieXRlTGVuZ3RoPHIrKGF8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBp''@;'; put 'put ''cyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTt2YXIgbTtyZXR1cm4gbT12b2lkIDA9PT1yJiZ2b2lkIDA9PT1hP25ldyBVaW50OEFycmF5KGQpOnZvaWQgMD09PWE/bmV3IFVpbnQ4QXJyYXkoZCxyKTpuZXcgVWludDhBcnJheShkLHIsYSksT2JqZWN0LnNldFByb3RvdHlwZU9mKG0saS5w''@;'; put 'put ''cm90b3R5cGUpLG19ZnVuY3Rpb24gRihkKXtpZihkPj1vKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8ZH1mdW5jdGlvbiBiKGQscil7''@;'; put 'put ''aWYoaS5pc0J1ZmZlcihkKSlyZXR1cm4gZC5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KGQpfHxadChkLEFycmF5QnVmZmVyKSlyZXR1cm4gZC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgZCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVz''@;'; put 'put ''dCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZCk7dmFyIGE9ZC5sZW5ndGgsbT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFtJiYwPT09YSlyZXR1cm4gMDtmb3IodmFyIEQ9ITE7''@;'; put 'put ''Oylzd2l0Y2gocil7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gYTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBubihkKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiAyKmE7''@;'; put 'put ''Y2FzZSJoZXgiOnJldHVybiBhPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG9uKGQpLmxlbmd0aDtkZWZhdWx0OmlmKEQpcmV0dXJuIG0/LTE6bm4oZCkubGVuZ3RoO3I9KCIiK3IpLnRvTG93ZXJDYXNlKCksRD0hMH19ZnVuY3Rpb24gTyhkLHIsYSl7dmFyIG09ITE7aWYoKHZvaWQgMD09PXJ8''@;'; put 'put ''fHI8MCkmJihyPTApLHI+dGhpcy5sZW5ndGh8fCgodm9pZCAwPT09YXx8YT50aGlzLmxlbmd0aCkmJihhPXRoaXMubGVuZ3RoKSxhPD0wKXx8KGE+Pj49MCk8PShyPj4+PTApKXJldHVybiIiO2ZvcihkfHwoZD0idXRmOCIpOzspc3dpdGNoKGQpe2Nhc2UiaGV4IjpyZXR1cm4gdnQodGhpcyxy''@;'; put 'put ''LGEpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIFgodGhpcyxyLGEpO2Nhc2UiYXNjaWkiOnJldHVybiBZKHRoaXMscixhKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBmdCh0aGlzLHIsYSk7Y2FzZSJiYXNlNjQiOnJldHVybiBzdCh0aGlzLHIsYSk7Y2FzZSJ1Y3My''@;'; put 'put ''IjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBNdCh0aGlzLHIsYSk7ZGVmYXVsdDppZihtKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrZCk7ZD0oZCsiIikudG9Mb3dlckNhc2UoKSxtPSEwfX1mdW5jdGlvbiBTKGQscixh''@;'; put 'put ''KXt2YXIgbT1kW3JdO2Rbcl09ZFthXSxkW2FdPW19ZnVuY3Rpb24gQyhkLHIsYSxtLEQpe2lmKDA9PT1kLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGE/KG09YSxhPTApOmE+MjE0NzQ4MzY0Nz9hPTIxNDc0ODM2NDc6YTwtMjE0NzQ4MzY0OCYmKGE9LTIxNDc0ODM2NDgp''@;'; put 'put ''LGVuKGE9K2EpJiYoYT1EPzA6ZC5sZW5ndGgtMSksYTwwJiYoYT1kLmxlbmd0aCthKSxhPj1kLmxlbmd0aCl7aWYoRClyZXR1cm4tMTthPWQubGVuZ3RoLTF9ZWxzZSBpZihhPDApe2lmKCFEKXJldHVybi0xO2E9MH1pZigic3RyaW5nIj09dHlwZW9mIHImJihyPWkuZnJvbShyLG0pKSxpLmlz''@;'; put 'put ''QnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6SyhkLHIsYSxtLEQpO2lmKCJudW1iZXIiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP0Q/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxs''@;'; put 'put ''KGQscixhKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGQscixhKTpLKGQsW3JdLGEsbSxEKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBLKGQscixhLG0sRCl7dmFyIFQsJD0xLGg9ZC5s''@;'; put 'put ''ZW5ndGgsUD1yLmxlbmd0aDtpZih2b2lkIDAhPT1tJiYoInVjczIiPT09KG09U3RyaW5nKG0pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bXx8InV0ZjE2bGUiPT09bXx8InV0Zi0xNmxlIj09PW0pKXtpZihkLmxlbmd0aDwyfHxyLmxlbmd0aDwyKXJldHVybi0xOyQ9MixoLz0yLFAvPTIs''@;'; put 'put ''YS89Mn1mdW5jdGlvbiBJKHosb3Qpe3JldHVybiAxPT09JD96W290XTp6LnJlYWRVSW50MTZCRShvdCokKX1pZihEKXt2YXIgQT0tMTtmb3IoVD1hO1Q8aDtUKyspaWYoSShkLFQpPT09SShyLC0xPT09QT8wOlQtQSkpe2lmKC0xPT09QSYmKEE9VCksVC1BKzE9PT1QKXJldHVybiBBKiR9ZWxz''@;'; put 'put ''ZS0xIT09QSYmKFQtPVQtQSksQT0tMX1lbHNlIGZvcihhK1A+aCYmKGE9aC1QKSxUPWE7VD49MDtULS0pe2Zvcih2YXIgaz0hMCxKPTA7SjxQO0orKylpZihJKGQsVCtKKSE9PUkocixKKSl7az0hMTticmVha31pZihrKXJldHVybiBUfXJldHVybi0xfWZ1bmN0aW9uIFUoZCxyLGEsbSl7YT1O''@;'; put 'put ''dW1iZXIoYSl8fDA7dmFyIEQ9ZC5sZW5ndGgtYTttPyhtPU51bWJlcihtKSk+RCYmKG09RCk6bT1EO3ZhciAkPXIubGVuZ3RoO20+JC8yJiYobT0kLzIpO2Zvcih2YXIgaD0wO2g8bTsrK2gpe3ZhciBQPXBhcnNlSW50KHIuc3Vic3RyKDIqaCwyKSwxNik7aWYoZW4oUCkpcmV0dXJuIGg7ZFth''@;'; put 'put ''K2hdPVB9cmV0dXJuIGh9ZnVuY3Rpb24gWihkLHIsYSxtKXtyZXR1cm4gWXQobm4ocixkLmxlbmd0aC1hKSxkLGEsbSl9ZnVuY3Rpb24gdHQoZCxyLGEsbSl7cmV0dXJuIFl0KGZ1bmN0aW9uIGFuKGQpe2Zvcih2YXIgcj1bXSxhPTA7YTxkLmxlbmd0aDsrK2Epci5wdXNoKDI1NSZkLmNoYXJD''@;'; put 'put ''b2RlQXQoYSkpO3JldHVybiByfShyKSxkLGEsbSl9ZnVuY3Rpb24gXyhkLHIsYSxtKXtyZXR1cm4gWXQob24ociksZCxhLG0pfWZ1bmN0aW9uIG50KGQscixhLG0pe3JldHVybiBZdChmdW5jdGlvbiBmbihkLHIpe2Zvcih2YXIgYSxtLCQ9W10saD0wO2g8ZC5sZW5ndGgmJiEoKHItPTIpPDAp''@;'; put 'put ''OysraCltPShhPWQuY2hhckNvZGVBdChoKSk+PjgsJC5wdXNoKGElMjU2KSwkLnB1c2gobSk7cmV0dXJuICR9KHIsZC5sZW5ndGgtYSksZCxhLG0pfWZ1bmN0aW9uIHN0KGQscixhKXtyZXR1cm4gbi5mcm9tQnl0ZUFycmF5KDA9PT1yJiZhPT09ZC5sZW5ndGg/ZDpkLnNsaWNlKHIsYSkpfWZ1''@;'; put 'put ''bmN0aW9uIFgoZCxyLGEpe2E9TWF0aC5taW4oZC5sZW5ndGgsYSk7Zm9yKHZhciBtPVtdLEQ9cjtEPGE7KXt2YXIgSSxULEEsaywkPWRbRF0saD1udWxsLFA9JD4yMzk/NDokPjIyMz8zOiQ+MTkxPzI6MTtpZihEK1A8PWEpc3dpdGNoKFApe2Nhc2UgMTokPDEyOCYmKGg9JCk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOjEyOD09KDE5MiYoST1kW0QrMV0pKSYmKGs9KDMxJiQpPDw2fDYzJkkpPjEyNyYmKGg9ayk7YnJlYWs7Y2FzZSAzOlQ9ZFtEKzJdLDEyOD09KDE5MiYoST1kW0QrMV0pKSYmMTI4PT0oMTkyJlQpJiYoaz0oMTUmJCk8PDEyfCg2MyZJKTw8Nnw2MyZUKT4yMDQ3JiYoazw1NTI5Nnx8az41''@;'; put 'put ''NzM0MykmJihoPWspO2JyZWFrO2Nhc2UgNDpUPWRbRCsyXSxBPWRbRCszXSwxMjg9PSgxOTImKEk9ZFtEKzFdKSkmJjEyOD09KDE5MiZUKSYmMTI4PT0oMTkyJkEpJiYoaz0oMTUmJCk8PDE4fCg2MyZJKTw8MTJ8KDYzJlQpPDw2fDYzJkEpPjY1NTM1JiZrPDExMTQxMTImJihoPWspfW51bGw9''@;'; put 'put ''PT1oPyhoPTY1NTMzLFA9MSk6aD42NTUzNSYmKG0ucHVzaCgoaC09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksaD01NjMyMHwxMDIzJmgpLG0ucHVzaChoKSxEKz1QfXJldHVybiBmdW5jdGlvbiBRKGQpe3ZhciByPWQubGVuZ3RoO2lmKHI8PVYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUu''@;'; put 'put ''YXBwbHkoU3RyaW5nLGQpO2Zvcih2YXIgYT0iIixtPTA7bTxyOylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxkLnNsaWNlKG0sbSs9VikpO3JldHVybiBhfShtKX1sLmtNYXhMZW5ndGg9bywhKGkuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB1KCl7dHJ5e3ZhciBk''@;'; put 'put ''PW5ldyBVaW50OEFycmF5KDEpLHI9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocixVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKGQsciksNDI9PT1kLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5''@;'; put 'put ''cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZl''@;'; put 'put ''cmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihpLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoaS5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLGkucG9vbFNpemU9ODE5MixpLmZyb209ZnVuY3Rpb24oZCxyLGEpe3JldHVybiBwKGQs''@;'; put 'put ''cixhKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKGkucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoaSxVaW50OEFycmF5KSxpLmFsbG9jPWZ1bmN0aW9uKGQscixhKXtyZXR1cm4gZnVuY3Rpb24gdihkLHIsYSl7cmV0dXJuIHkoZCksZDw9MD9m''@;'; put 'put ''KGQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBhP2YoZCkuZmlsbChyLGEpOmYoZCkuZmlsbChyKTpmKGQpfShkLHIsYSl9LGkuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZCl7cmV0dXJuIGcoZCl9LGkuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGQpe3JldHVybiBnKGQpfSxpLmlzQnVm''@;'; put 'put ''ZmVyPWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT1yJiYhMD09PXIuX2lzQnVmZmVyJiZyIT09aS5wcm90b3R5cGV9LGkuY29tcGFyZT1mdW5jdGlvbihyLGEpe2lmKFp0KHIsVWludDhBcnJheSkmJihyPWkuZnJvbShyLHIub2Zmc2V0LHIuYnl0ZUxlbmd0aCkpLFp0KGEsVWludDhBcnJheSkm''@;'; put 'put ''JihhPWkuZnJvbShhLGEub2Zmc2V0LGEuYnl0ZUxlbmd0aCkpLCFpLmlzQnVmZmVyKHIpfHwhaS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihy''@;'; put 'put ''PT09YSlyZXR1cm4gMDtmb3IodmFyIG09ci5sZW5ndGgsRD1hLmxlbmd0aCwkPTAsaD1NYXRoLm1pbihtLEQpOyQ8aDsrKyQpaWYoclskXSE9PWFbJF0pe209clskXSxEPWFbJF07YnJlYWt9cmV0dXJuIG08RD8tMTpEPG0/MTowfSxpLmlzRW5jb2Rpbmc9ZnVuY3Rpb24ocil7c3dpdGNoKFN0''@;'; put 'put ''cmluZyhyKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJu''@;'; put 'put ''ITA7ZGVmYXVsdDpyZXR1cm4hMX19LGkuY29uY2F0PWZ1bmN0aW9uKHIsYSl7aWYoIUFycmF5LmlzQXJyYXkocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1yLmxlbmd0aClyZXR1cm4gaS5hbGxvYygw''@;'; put 'put ''KTt2YXIgbTtpZih2b2lkIDA9PT1hKWZvcihhPTAsbT0wO208ci5sZW5ndGg7KyttKWErPXJbbV0ubGVuZ3RoO3ZhciBEPWkuYWxsb2NVbnNhZmUoYSksJD0wO2ZvcihtPTA7bTxyLmxlbmd0aDsrK20pe3ZhciBoPXJbbV07aWYoWnQoaCxVaW50OEFycmF5KSkkK2gubGVuZ3RoPkQubGVuZ3Ro''@;'; put 'put ''P2kuZnJvbShoKS5jb3B5KEQsJCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoRCxoLCQpO2Vsc2V7aWYoIWkuaXNCdWZmZXIoaCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2guY29weShELCQpfSQrPWgu''@;'; put 'put ''bGVuZ3RofXJldHVybiBEfSxpLmJ5dGVMZW5ndGg9YixpLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsaS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7aWYociUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlw''@;'; put 'put ''bGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgYT0wO2E8cjthKz0yKVModGhpcyxhLGErMSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciByPXRoaXMubGVuZ3RoO2lmKHIlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBh''@;'; put 'put ''IG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGE9MDthPHI7YSs9NClTKHRoaXMsYSxhKzMpLFModGhpcyxhKzEsYSsyKTtyZXR1cm4gdGhpc30saS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7aWYociU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9y''@;'; put 'put ''KCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgYT0wO2E8cjthKz04KVModGhpcyxhLGErNyksUyh0aGlzLGErMSxhKzYpLFModGhpcyxhKzIsYSs1KSxTKHRoaXMsYSszLGErNCk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLnRvTG9jYWxlU3Ry''@;'; put 'put ''aW5nPWkucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT1yPyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1godGhpcywwLHIpOk8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24ocil7aWYoIWku''@;'; put 'put ''aXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09cnx8MD09PWkuY29tcGFyZSh0aGlzLHIpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHI9IiIsYT1sLklOU1BFQ1RfTUFYX0JZVEVTO3Jl''@;'; put 'put ''dHVybiByPXRoaXMudG9TdHJpbmcoImhleCIsMCxhKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmEmJihyKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3IrIj4ifSxzJiYoaS5wcm90b3R5cGVbc109aS5wcm90b3R5cGUuaW5zcGVjdCksaS5wcm90b3R5cGUuY29t''@;'; put 'put ''cGFyZT1mdW5jdGlvbihyLGEsbSxELCQpe2lmKFp0KHIsVWludDhBcnJheSkmJihyPWkuZnJvbShyLHIub2Zmc2V0LHIuYnl0ZUxlbmd0aCkpLCFpLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZl''@;'; put 'put ''ciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHIpO2lmKHZvaWQgMD09PWEmJihhPTApLHZvaWQgMD09PW0mJihtPXI/ci5sZW5ndGg6MCksdm9pZCAwPT09RCYmKEQ9MCksdm9pZCAwPT09JCYmKCQ9dGhpcy5sZW5ndGgpLGE8MHx8bT5yLmxlbmd0aHx8RDwwfHwkPnRo''@;'; put 'put ''aXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihEPj0kJiZhPj1tKXJldHVybiAwO2lmKEQ+PSQpcmV0dXJuLTE7aWYoYT49bSlyZXR1cm4gMTtpZih0aGlzPT09cilyZXR1cm4gMDtmb3IodmFyIGg9KCQ+Pj49MCktKEQ+Pj49MCksUD0obT4+''@;'; put 'put ''Pj0wKS0oYT4+Pj0wKSxJPU1hdGgubWluKGgsUCksVD10aGlzLnNsaWNlKEQsJCksQT1yLnNsaWNlKGEsbSksaz0wO2s8STsrK2spaWYoVFtrXSE9PUFba10pe2g9VFtrXSxQPUFba107YnJlYWt9cmV0dXJuIGg8UD8tMTpQPGg/MTowfSxpLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihy''@;'; put 'put ''LGEsbSl7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YocixhLG0pfSxpLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gQyh0aGlzLHIsYSxtLCEwKX0saS5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBDKHRoaXMscixhLG0sITEpfSxp''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihyLGEsbSxEKXtpZih2b2lkIDA9PT1hKUQ9InV0ZjgiLG09dGhpcy5sZW5ndGgsYT0wO2Vsc2UgaWYodm9pZCAwPT09bSYmInN0cmluZyI9PXR5cGVvZiBhKUQ9YSxtPXRoaXMubGVuZ3RoLGE9MDtlbHNle2lmKCFpc0Zpbml0ZShhKSl0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7YT4+Pj0wLGlzRmluaXRlKG0pPyhtPj4+PTAsdm9pZCAwPT09RCYmKEQ9InV0ZjgiKSk6KEQ9bSxtPXZvaWQgMCl9dmFyICQ9dGhpcy5sZW5n''@;'; put 'put ''dGgtYTtpZigodm9pZCAwPT09bXx8bT4kKSYmKG09JCksci5sZW5ndGg+MCYmKG08MHx8YTwwKXx8YT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMiKTtEfHwoRD0idXRmOCIpO2Zvcih2YXIgaD0hMTs7KXN3''@;'; put 'put ''aXRjaChEKXtjYXNlImhleCI6cmV0dXJuIFUodGhpcyxyLGEsbSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gWih0aGlzLHIsYSxtKTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiB0dCh0aGlzLHIsYSxtKTtjYXNlImJhc2U2NCI6cmV0dXJuIF8o''@;'; put 'put ''dGhpcyxyLGEsbSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBudCh0aGlzLHIsYSxtKTtkZWZhdWx0OmlmKGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitEKTtEPSgiIitEKS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LGg9ITB9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBWPTQwOTY7ZnVuY3Rpb24gWShkLHIsYSl7dmFyIG09IiI7YT1NYXRoLm1pbihkLmxl''@;'; put 'put ''bmd0aCxhKTtmb3IodmFyIEQ9cjtEPGE7KytEKW0rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JmRbRF0pO3JldHVybiBtfWZ1bmN0aW9uIGZ0KGQscixhKXt2YXIgbT0iIjthPU1hdGgubWluKGQubGVuZ3RoLGEpO2Zvcih2YXIgRD1yO0Q8YTsrK0QpbSs9U3RyaW5nLmZyb21DaGFyQ29kZShk''@;'; put 'put ''W0RdKTtyZXR1cm4gbX1mdW5jdGlvbiB2dChkLHIsYSl7dmFyIG09ZC5sZW5ndGg7KCFyfHxyPDApJiYocj0wKSwoIWF8fGE8MHx8YT5tKSYmKGE9bSk7Zm9yKHZhciBEPSIiLCQ9cjskPGE7KyskKUQrPWxuW2RbJF1dO3JldHVybiBEfWZ1bmN0aW9uIE10KGQscixhKXtmb3IodmFyIG09ZC5z''@;'; put 'put ''bGljZShyLGEpLEQ9IiIsJD0wOyQ8bS5sZW5ndGgtMTskKz0yKUQrPVN0cmluZy5mcm9tQ2hhckNvZGUobVskXSsyNTYqbVskKzFdKTtyZXR1cm4gRH1mdW5jdGlvbiBFdChkLHIsYSl7aWYoZCUxIT0wfHxkPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lm''@;'; put 'put ''KGQrcj5hKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gRnQoZCxyLGEsbSxELCQpe2lmKCFpLmlzQnVmZmVyKGQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZm''@;'; put 'put ''ZXIgaW5zdGFuY2UnKTtpZihyPkR8fHI8JCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoYSttPmQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBqdChkLHIsYSxtLEQs''@;'; put 'put ''JCl7aWYoYSttPmQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihhPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFh0KGQscixhLG0sRCl7cmV0dXJuIHI9K3IsYT4+Pj0wLER8fGp0KGQsMCxh''@;'; put 'put ''LDQpLGUud3JpdGUoZCxyLGEsbSwyMyw0KSxhKzR9ZnVuY3Rpb24gQnQoZCxyLGEsbSxEKXtyZXR1cm4gcj0rcixhPj4+PTAsRHx8anQoZCwwLGEsOCksZS53cml0ZShkLHIsYSxtLDUyLDgpLGErOH1pLnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihyLGEpe3ZhciBtPXRoaXMubGVuZ3RoOyhy''@;'; put 'put ''PX5+cik8MD8ocis9bSk8MCYmKHI9MCk6cj5tJiYocj1tKSwoYT12b2lkIDA9PT1hP206fn5hKTwwPyhhKz1tKTwwJiYoYT0wKTphPm0mJihhPW0pLGE8ciYmKGE9cik7dmFyIEQ9dGhpcy5zdWJhcnJheShyLGEpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YoRCxpLnByb3RvdHlwZSks''@;'; put 'put ''RH0saS5wcm90b3R5cGUucmVhZFVpbnRMRT1pLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHIsYSxtKXtyPj4+PTAsYT4+Pj0wLG18fEV0KHIsYSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBEPXRoaXNbcl0sJD0xLGg9MDsrK2g8YSYmKCQqPTI1Nik7KUQrPXRoaXNbcitoXSokO3JldHVy''@;'; put 'put ''biBEfSxpLnByb3RvdHlwZS5yZWFkVWludEJFPWkucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24ocixhLG0pe3I+Pj49MCxhPj4+PTAsbXx8RXQocixhLHRoaXMubGVuZ3RoKTtmb3IodmFyIEQ9dGhpc1tyKy0tYV0sJD0xO2E+MCYmKCQqPTI1Nik7KUQrPXRoaXNbcistLWFdKiQ7cmV0''@;'; put 'put ''dXJuIER9LGkucHJvdG90eXBlLnJlYWRVaW50OD1pLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsMSx0aGlzLmxlbmd0aCksdGhpc1tyXX0saS5wcm90b3R5cGUucmVhZFVpbnQxNkxFPWkucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5j''@;'; put 'put ''dGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwyLHRoaXMubGVuZ3RoKSx0aGlzW3JdfHRoaXNbcisxXTw8OH0saS5wcm90b3R5cGUucmVhZFVpbnQxNkJFPWkucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwyLHRoaXMubGVu''@;'; put 'put ''Z3RoKSx0aGlzW3JdPDw4fHRoaXNbcisxXX0saS5wcm90b3R5cGUucmVhZFVpbnQzMkxFPWkucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw0LHRoaXMubGVuZ3RoKSwodGhpc1tyXXx0aGlzW3IrMV08PDh8dGhpc1tyKzJdPDwxNikr''@;'; put 'put ''MTY3NzcyMTYqdGhpc1tyKzNdfSxpLnByb3RvdHlwZS5yZWFkVWludDMyQkU9aS5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbcl0rKHRoaXNbcisxXTw8MTZ8dGhpc1tyKzJdPDw4''@;'; put 'put ''fHRoaXNbciszXSl9LGkucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxFdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgRD10aGlzW3JdLCQ9MSxoPTA7KytoPGEmJigkKj0yNTYpOylEKz10aGlzW3IraF0qJDtyZXR1cm4gRD49KCQqPTEyOCkm''@;'; put 'put ''JihELT1NYXRoLnBvdygyLDgqYSkpLER9LGkucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihyLGEsbSl7cj4+Pj0wLGE+Pj49MCxtfHxFdChyLGEsdGhpcy5sZW5ndGgpO2Zvcih2YXIgRD1hLCQ9MSxoPXRoaXNbcistLURdO0Q+MCYmKCQqPTI1Nik7KWgrPXRoaXNbcistLURdKiQ7cmV0''@;'; put 'put ''dXJuIGg+PSgkKj0xMjgpJiYoaC09TWF0aC5wb3coMiw4KmEpKSxofSxpLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tyXT8tMSooMjU1LXRoaXNbcl0rMSk6dGhpc1tyXX0saS5wcm90b3R5cGUu''@;'; put 'put ''cmVhZEludDE2TEU9ZnVuY3Rpb24ocixhKXtyPj4+PTAsYXx8RXQociwyLHRoaXMubGVuZ3RoKTt2YXIgbT10aGlzW3JdfHRoaXNbcisxXTw8ODtyZXR1cm4gMzI3NjgmbT80Mjk0OTAxNzYwfG06bX0saS5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24ocixhKXtyPj4+PTAsYXx8RXQo''@;'; put 'put ''ciwyLHRoaXMubGVuZ3RoKTt2YXIgbT10aGlzW3IrMV18dGhpc1tyXTw8ODtyZXR1cm4gMzI3NjgmbT80Mjk0OTAxNzYwfG06bX0saS5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24ocixhKXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsNCx0aGlzLmxlbmd0aCksdGhpc1tyXXx0aGlzW3Ir''@;'; put 'put ''MV08PDh8dGhpc1tyKzJdPDwxNnx0aGlzW3IrM108PDI0fSxpLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw0LHRoaXMubGVuZ3RoKSx0aGlzW3JdPDwyNHx0aGlzW3IrMV08PDE2fHRoaXNbcisyXTw8OHx0aGlzW3IrM119LGkucHJv''@;'; put 'put ''dG90eXBlLnJlYWRGbG9hdExFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5ndGgpLGUucmVhZCh0aGlzLHIsITAsMjMsNCl9LGkucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHIsYSl7cmV0dXJuIHI+Pj49MCxhfHxFdChyLDQsdGhpcy5sZW5n''@;'; put 'put ''dGgpLGUucmVhZCh0aGlzLHIsITEsMjMsNCl9LGkucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihyLGEpe3JldHVybiByPj4+PTAsYXx8RXQociw4LHRoaXMubGVuZ3RoKSxlLnJlYWQodGhpcyxyLCEwLDUyLDgpfSxpLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24ocixh''@;'; put 'put ''KXtyZXR1cm4gcj4+Pj0wLGF8fEV0KHIsOCx0aGlzLmxlbmd0aCksZS5yZWFkKHRoaXMsciwhMSw1Miw4KX0saS5wcm90b3R5cGUud3JpdGVVaW50TEU9aS5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24ocixhLG0sRCl7cj0rcixhPj4+PTAsbT4+Pj0wLER8fEZ0KHRoaXMscixhLG0s''@;'; put 'put ''TWF0aC5wb3coMiw4Km0pLTEsMCk7dmFyIGg9MSxQPTA7Zm9yKHRoaXNbYV09MjU1JnI7KytQPG0mJihoKj0yNTYpOyl0aGlzW2ErUF09ci9oJjI1NTtyZXR1cm4gYSttfSxpLnByb3RvdHlwZS53cml0ZVVpbnRCRT1pLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbihyLGEsbSxEKXty''@;'; put 'put ''PStyLGE+Pj49MCxtPj4+PTAsRHx8RnQodGhpcyxyLGEsbSxNYXRoLnBvdygyLDgqbSktMSwwKTt2YXIgaD1tLTEsUD0xO2Zvcih0aGlzW2EraF09MjU1JnI7LS1oPj0wJiYoUCo9MjU2KTspdGhpc1thK2hdPXIvUCYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVVaW50OD1pLnBy''@;'; put 'put ''b3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMSwyNTUsMCksdGhpc1thXT0yNTUmcixhKzF9LGkucHJvdG90eXBlLndyaXRlVWludDE2TEU9aS5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihyLGEsbSl7''@;'; put 'put ''cmV0dXJuIHI9K3IsYT4+Pj0wLG18fEZ0KHRoaXMscixhLDIsNjU1MzUsMCksdGhpc1thXT0yNTUmcix0aGlzW2ErMV09cj4+PjgsYSsyfSxpLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPWkucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiByPStyLGE+Pj49''@;'; put 'put ''MCxtfHxGdCh0aGlzLHIsYSwyLDY1NTM1LDApLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1pLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEs''@;'; put 'put ''NCw0Mjk0OTY3Mjk1LDApLHRoaXNbYSszXT1yPj4+MjQsdGhpc1thKzJdPXI+Pj4xNix0aGlzW2ErMV09cj4+PjgsdGhpc1thXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndyaXRlVWludDMyQkU9aS5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIHI9K3Is''@;'; put 'put ''YT4+Pj0wLG18fEZ0KHRoaXMscixhLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2FdPXI+Pj4yNCx0aGlzW2ErMV09cj4+PjE2LHRoaXNbYSsyXT1yPj4+OCx0aGlzW2ErM109MjU1JnIsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHIsYSxtLEQpe2lmKHI9K3IsYT4+Pj0wLCFE''@;'; put 'put ''KXt2YXIgJD1NYXRoLnBvdygyLDgqbS0xKTtGdCh0aGlzLHIsYSxtLCQtMSwtJCl9dmFyIGg9MCxQPTEsST0wO2Zvcih0aGlzW2FdPTI1NSZyOysraDxtJiYoUCo9MjU2KTspcjwwJiYwPT09SSYmMCE9PXRoaXNbYStoLTFdJiYoST0xKSx0aGlzW2EraF09KHIvUD4+MCktSSYyNTU7cmV0dXJu''@;'; put 'put ''IGErbX0saS5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihyLGEsbSxEKXtpZihyPStyLGE+Pj49MCwhRCl7dmFyICQ9TWF0aC5wb3coMiw4Km0tMSk7RnQodGhpcyxyLGEsbSwkLTEsLSQpfXZhciBoPW0tMSxQPTEsST0wO2Zvcih0aGlzW2EraF09MjU1JnI7LS1oPj0wJiYoUCo9MjU2''@;'; put 'put ''KTspcjwwJiYwPT09SSYmMCE9PXRoaXNbYStoKzFdJiYoST0xKSx0aGlzW2EraF09KHIvUD4+MCktSSYyNTU7cmV0dXJuIGErbX0saS5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMSwxMjcsLTEyOCkscjwwJiYo''@;'; put 'put ''cj0yNTUrcisxKSx0aGlzW2FdPTI1NSZyLGErMX0saS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09MjU1JnIsdGhpc1thKzFdPXI+Pj44LGErMn0saS5wcm90b3R5''@;'; put 'put ''cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gcj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsMiwzMjc2NywtMzI3NjgpLHRoaXNbYV09cj4+PjgsdGhpc1thKzFdPTI1NSZyLGErMn0saS5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4g''@;'; put 'put ''cj0rcixhPj4+PTAsbXx8RnQodGhpcyxyLGEsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2FdPTI1NSZyLHRoaXNbYSsxXT1yPj4+OCx0aGlzW2ErMl09cj4+PjE2LHRoaXNbYSszXT1yPj4+MjQsYSs0fSxpLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24ocixhLG0pe3Jl''@;'; put 'put ''dHVybiByPStyLGE+Pj49MCxtfHxGdCh0aGlzLHIsYSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHI8MCYmKHI9NDI5NDk2NzI5NStyKzEpLHRoaXNbYV09cj4+PjI0LHRoaXNbYSsxXT1yPj4+MTYsdGhpc1thKzJdPXI+Pj44LHRoaXNbYSszXT0yNTUmcixhKzR9LGkucHJvdG90eXBlLndy''@;'; put 'put ''aXRlRmxvYXRMRT1mdW5jdGlvbihyLGEsbSl7cmV0dXJuIFh0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24ocixhLG0pe3JldHVybiBYdCh0aGlzLHIsYSwhMSxtKX0saS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihyLGEsbSl7cmV0''@;'; put 'put ''dXJuIEJ0KHRoaXMscixhLCEwLG0pfSxpLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKHIsYSxtKXtyZXR1cm4gQnQodGhpcyxyLGEsITEsbSl9LGkucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocixhLG0sRCl7aWYoIWkuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''YXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYobXx8KG09MCksIUQmJjAhPT1EJiYoRD10aGlzLmxlbmd0aCksYT49ci5sZW5ndGgmJihhPXIubGVuZ3RoKSxhfHwoYT0wKSxEPjAmJkQ8bSYmKEQ9bSksRD09PW18fDA9PT1yLmxlbmd0aHx8MD09PXRoaXMubGVuZ3RoKXJldHVybiAw''@;'; put 'put ''O2lmKGE8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG08MHx8bT49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91''@;'; put 'put ''dCBvZiBib3VuZHMiKTtEPnRoaXMubGVuZ3RoJiYoRD10aGlzLmxlbmd0aCksci5sZW5ndGgtYTxELW0mJihEPXIubGVuZ3RoLWErbSk7dmFyICQ9RC1tO3JldHVybiB0aGlzPT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5''@;'; put 'put ''V2l0aGluKGEsbSxEKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChyLHRoaXMuc3ViYXJyYXkobSxEKSxhKSwkfSxpLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHIsYSxtLEQpe2lmKCJzdHJpbmciPT10eXBlb2Ygcil7aWYoInN0cmluZyI9PXR5cGVvZiBhPyhEPWEsYT0wLG09dGhp''@;'; put 'put ''cy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgbSYmKEQ9bSxtPXRoaXMubGVuZ3RoKSx2b2lkIDAhPT1EJiYic3RyaW5nIiE9dHlwZW9mIEQpdGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgRCYmIWkuaXNFbmNvZGlu''@;'; put 'put ''ZyhEKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0QpO2lmKDE9PT1yLmxlbmd0aCl7dmFyICQ9ci5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1EJiYkPDEyOHx8ImxhdGluMSI9PT1EKSYmKHI9JCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIHI/ciY9MjU1OiJib29s''@;'; put 'put ''ZWFuIj09dHlwZW9mIHImJihyPU51bWJlcihyKSk7aWYoYTwwfHx0aGlzLmxlbmd0aDxhfHx0aGlzLmxlbmd0aDxtKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihtPD1hKXJldHVybiB0aGlzO3ZhciBoO2lmKGE+Pj49MCxtPXZvaWQgMD09PW0/dGhpcy5s''@;'; put 'put ''ZW5ndGg6bT4+PjAscnx8KHI9MCksIm51bWJlciI9PXR5cGVvZiByKWZvcihoPWE7aDxtOysraCl0aGlzW2hdPXI7ZWxzZXt2YXIgUD1pLmlzQnVmZmVyKHIpP3I6aS5mcm9tKHIsRCksST1QLmxlbmd0aDtpZigwPT09SSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrcisnIiBp''@;'; put 'put ''cyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKGg9MDtoPG0tYTsrK2gpdGhpc1toK2FdPVBbaCVJXX1yZXR1cm4gdGhpc307dmFyIFF0PS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gbm4oZCxyKXtyPXJ8fDEvMDtmb3IodmFyIGEsbT1kLmxlbmd0aCxEPW51bGwsJD1b''@;'; put 'put ''XSxoPTA7aDxtOysraCl7aWYoKGE9ZC5jaGFyQ29kZUF0KGgpKT41NTI5NSYmYTw1NzM0NCl7aWYoIUQpe2lmKGE+NTYzMTkpeyhyLT0zKT4tMSYmJC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihoKzE9PT1tKXsoci09Myk+LTEmJiQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9''@;'; put 'put ''RD1hO2NvbnRpbnVlfWlmKGE8NTYzMjApeyhyLT0zKT4tMSYmJC5wdXNoKDIzOSwxOTEsMTg5KSxEPWE7Y29udGludWV9YT02NTUzNisoRC01NTI5Njw8MTB8YS01NjMyMCl9ZWxzZSBEJiYoci09Myk+LTEmJiQucHVzaCgyMzksMTkxLDE4OSk7aWYoRD1udWxsLGE8MTI4KXtpZigoci09MSk8''@;'; put 'put ''MClicmVhazskLnB1c2goYSl9ZWxzZSBpZihhPDIwNDgpe2lmKChyLT0yKTwwKWJyZWFrOyQucHVzaChhPj42fDE5Miw2MyZhfDEyOCl9ZWxzZSBpZihhPDY1NTM2KXtpZigoci09Myk8MClicmVhazskLnB1c2goYT4+MTJ8MjI0LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX1lbHNle2lmKCEoYTwx''@;'; put 'put ''MTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChyLT00KTwwKWJyZWFrOyQucHVzaChhPj4xOHwyNDAsYT4+MTImNjN8MTI4LGE+PjYmNjN8MTI4LDYzJmF8MTI4KX19cmV0dXJuICR9ZnVuY3Rpb24gb24oZCl7cmV0dXJuIG4udG9CeXRlQXJyYXkoZnVu''@;'; put 'put ''Y3Rpb24gcm4oZCl7aWYoKGQ9KGQ9ZC5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShRdCwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZC5sZW5ndGglNCE9MDspZCs9Ij0iO3JldHVybiBkfShkKSl9ZnVuY3Rpb24gWXQoZCxyLGEsbSl7Zm9yKHZhciBEPTA7RDxtJiYhKEQrYT49''@;'; put 'put ''ci5sZW5ndGh8fEQ+PWQubGVuZ3RoKTsrK0QpcltEK2FdPWRbRF07cmV0dXJuIER9ZnVuY3Rpb24gWnQoZCxyKXtyZXR1cm4gZCBpbnN0YW5jZW9mIHJ8fG51bGwhPWQmJm51bGwhPWQuY29uc3RydWN0b3ImJm51bGwhPWQuY29uc3RydWN0b3IubmFtZSYmZC5jb25zdHJ1Y3Rvci5uYW1lPT09''@;'; put 'put ''ci5uYW1lfWZ1bmN0aW9uIGVuKGQpe3JldHVybiBkIT1kfXZhciBsbj1mdW5jdGlvbigpe2Zvcih2YXIgZD0iMDEyMzQ1Njc4OWFiY2RlZiIscj1uZXcgQXJyYXkoMjU2KSxhPTA7YTwxNjsrK2EpZm9yKHZhciBtPTE2KmEsRD0wO0Q8MTY7KytEKXJbbStEXT1kW2FdK2RbRF07cmV0dXJuIHJ9''@;'; put 'put ''KCl9LDIyNjAxOihjLGwpPT57bC5yZWFkPWZ1bmN0aW9uKHQsbixlLHMsbyl7dmFyIHUsZixpPTgqby1zLTEscD0oMTw8aSktMSx5PXA+PjEsdj0tNyxnPWU/by0xOjAseD1lPy0xOjEsRT10W24rZ107Zm9yKGcrPXgsdT1FJigxPDwtdiktMSxFPj49LXYsdis9aTt2PjA7dT0yNTYqdSt0W24r''@;'; put 'put ''Z10sZys9eCx2LT04KTtmb3IoZj11JigxPDwtdiktMSx1Pj49LXYsdis9czt2PjA7Zj0yNTYqZit0W24rZ10sZys9eCx2LT04KTtpZigwPT09dSl1PTEteTtlbHNle2lmKHU9PT1wKXJldHVybiBmP05hTjoxLzAqKEU/LTE6MSk7Zis9TWF0aC5wb3coMixzKSx1LT15fXJldHVybihFPy0xOjEp''@;'; put 'put ''KmYqTWF0aC5wb3coMix1LXMpfSxsLndyaXRlPWZ1bmN0aW9uKHQsbixlLHMsbyx1KXt2YXIgZixpLHAseT04KnUtby0xLHY9KDE8PHkpLTEsZz12Pj4xLHg9MjM9PT1vP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxFPXM/MDp1LTEsaj1zPzE6LTEsdz1uPDB8fDA9PT1uJiYx''@;'; put 'put ''L248MD8xOjA7Zm9yKG49TWF0aC5hYnMobiksaXNOYU4obil8fG49PT0xLzA/KGk9aXNOYU4obik/MTowLGY9dik6KGY9TWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMiksbioocD1NYXRoLnBvdygyLC1mKSk8MSYmKGYtLSxwKj0yKSwobis9ZitnPj0xP3gvcDp4Kk1hdGgucG93KDIs''@;'; put 'put ''MS1nKSkqcD49MiYmKGYrKyxwLz0yKSxmK2c+PXY/KGk9MCxmPXYpOmYrZz49MT8oaT0obipwLTEpKk1hdGgucG93KDIsbyksZis9Zyk6KGk9bipNYXRoLnBvdygyLGctMSkqTWF0aC5wb3coMixvKSxmPTApKTtvPj04O3RbZStFXT0yNTUmaSxFKz1qLGkvPTI1NixvLT04KTtmb3IoZj1mPDxv''@;'; put 'put ''fGkseSs9bzt5PjA7dFtlK0VdPTI1NSZmLEUrPWosZi89MjU2LHktPTgpO3RbZStFLWpdfD0xMjgqd319LDQ4MzMyOigpPT57InVzZSBzdHJpY3QiOyFmdW5jdGlvbihoKXtjb25zdCBQPWgucGVyZm9ybWFuY2U7ZnVuY3Rpb24gSShJdCl7UCYmUC5tYXJrJiZQLm1hcmsoSXQpfWZ1bmN0aW9u''@;'; put 'put ''IFQoSXQsYXQpe1AmJlAubWVhc3VyZSYmUC5tZWFzdXJlKEl0LGF0KX1JKCJab25lIik7Y29uc3QgQT1oLl9fWm9uZV9zeW1ib2xfcHJlZml4fHwiX196b25lX3N5bWJvbF9fIjtmdW5jdGlvbiBrKEl0KXtyZXR1cm4gQStJdH1jb25zdCBKPSEwPT09aFtrKCJmb3JjZUR1cGxpY2F0ZVpvbmVD''@;'; put 'put ''aGVjayIpXTtpZihoLlpvbmUpe2lmKEp8fCJmdW5jdGlvbiIhPXR5cGVvZiBoLlpvbmUuX19zeW1ib2xfXyl0aHJvdyBuZXcgRXJyb3IoIlpvbmUgYWxyZWFkeSBsb2FkZWQuIik7cmV0dXJuIGguWm9uZX1sZXQgej0oKCk9PntjbGFzcyBJdHtzdGF0aWMgYXNzZXJ0Wm9uZVBhdGNoZWQoKXtp''@;'; put 'put ''ZihoLlByb21pc2UhPT1fdC5ab25lQXdhcmVQcm9taXNlKXRocm93IG5ldyBFcnJvcigiWm9uZS5qcyBoYXMgZGV0ZWN0ZWQgdGhhdCBab25lQXdhcmVQcm9taXNlIGAod2luZG93fGdsb2JhbCkuUHJvbWlzZWAgaGFzIGJlZW4gb3ZlcndyaXR0ZW4uXG5Nb3N0IGxpa2VseSBjYXVzZSBpcyB0''@;'; put 'put ''aGF0IGEgUHJvbWlzZSBwb2x5ZmlsbCBoYXMgYmVlbiBsb2FkZWQgYWZ0ZXIgWm9uZS5qcyAoUG9seWZpbGxpbmcgUHJvbWlzZSBhcGkgaXMgbm90IG5lY2Vzc2FyeSB3aGVuIHpvbmUuanMgaXMgbG9hZGVkLiBJZiB5b3UgbXVzdCBsb2FkIG9uZSwgZG8gc28gYmVmb3JlIGxvYWRpbmcgem9u''@;'; put 'put ''ZS5qcy4pIil9c3RhdGljIGdldCByb290KCl7bGV0IE09SXQuY3VycmVudDtmb3IoO00ucGFyZW50OylNPU0ucGFyZW50O3JldHVybiBNfXN0YXRpYyBnZXQgY3VycmVudCgpe3JldHVybiBMdC56b25lfXN0YXRpYyBnZXQgY3VycmVudFRhc2soKXtyZXR1cm4gcXR9c3RhdGljIF9fbG9hZF9w''@;'; put 'put ''YXRjaChNLE4saHQ9ITEpe2lmKF90Lmhhc093blByb3BlcnR5KE0pKXtpZighaHQmJkopdGhyb3cgRXJyb3IoIkFscmVhZHkgbG9hZGVkIHBhdGNoOiAiK00pfWVsc2UgaWYoIWhbIl9fWm9uZV9kaXNhYmxlXyIrTV0pe2NvbnN0IG10PSJab25lOiIrTTtJKG10KSxfdFtNXT1OKGgsSXQsSHQp''@;'; put 'put ''LFQobXQsbXQpfX1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3BhcmVudH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWNvbnN0cnVjdG9yKE0sTil7dGhpcy5fcGFyZW50PU0sdGhpcy5fbmFtZT1OP04ubmFtZXx8InVubmFtZWQiOiI8cm9vdD4iLHRoaXMuX3Byb3BlcnRpZXM9TiYm''@;'; put 'put ''Ti5wcm9wZXJ0aWVzfHx7fSx0aGlzLl96b25lRGVsZWdhdGU9bmV3IGN0KHRoaXMsdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3pvbmVEZWxlZ2F0ZSxOKX1nZXQoTSl7Y29uc3QgTj10aGlzLmdldFpvbmVXaXRoKE0pO2lmKE4pcmV0dXJuIE4uX3Byb3BlcnRpZXNbTV19Z2V0Wm9uZVdp''@;'; put 'put ''dGgoTSl7bGV0IE49dGhpcztmb3IoO047KXtpZihOLl9wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KE0pKXJldHVybiBOO049Ti5fcGFyZW50fXJldHVybiBudWxsfWZvcmsoTSl7aWYoIU0pdGhyb3cgbmV3IEVycm9yKCJab25lU3BlYyByZXF1aXJlZCEiKTtyZXR1cm4gdGhpcy5fem9uZURl''@;'; put 'put ''bGVnYXRlLmZvcmsodGhpcyxNKX13cmFwKE0sTil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE0pdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RpbmcgZnVuY3Rpb24gZ290OiAiK00pO2NvbnN0IGh0PXRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnRlcmNlcHQodGhpcyxNLE4pLG10PXRoaXM7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIG10LnJ1bkd1YXJkZWQoaHQsdGhpcyxhcmd1bWVudHMsTil9fXJ1bihNLE4saHQsbXQpe0x0PXtwYXJlbnQ6THQsem9uZTp0aGlzfTt0cnl7cmV0dXJuIHRoaXMuX3pvbmVEZWxlZ2F0ZS5pbnZva2UodGhpcyxNLE4saHQsbXQpfWZpbmFsbHl7THQ9THQucGFyZW50''@;'; put 'put ''fX1ydW5HdWFyZGVkKE0sTj1udWxsLGh0LG10KXtMdD17cGFyZW50Okx0LHpvbmU6dGhpc307dHJ5e3RyeXtyZXR1cm4gdGhpcy5fem9uZURlbGVnYXRlLmludm9rZSh0aGlzLE0sTixodCxtdCl9Y2F0Y2goV3Qpe2lmKHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLFd0KSl0''@;'; put 'put ''aHJvdyBXdH19ZmluYWxseXtMdD1MdC5wYXJlbnR9fXJ1blRhc2soTSxOLGh0KXtpZihNLnpvbmUhPXRoaXMpdGhyb3cgbmV3IEVycm9yKCJBIHRhc2sgY2FuIG9ubHkgYmUgcnVuIGluIHRoZSB6b25lIG9mIGNyZWF0aW9uISAoQ3JlYXRpb246ICIrKE0uem9uZXx8R3QpLm5hbWUrIjsgRXhl''@;'; put 'put ''Y3V0aW9uOiAiK3RoaXMubmFtZSsiKSIpO2lmKE0uc3RhdGU9PT1EdCYmKE0udHlwZT09PXp0fHxNLnR5cGU9PT1kdCkpcmV0dXJuO2NvbnN0IG10PU0uc3RhdGUhPXJ0O210JiZNLl90cmFuc2l0aW9uVG8ocnQsd3QpLE0ucnVuQ291bnQrKztjb25zdCBXdD1xdDtxdD1NLEx0PXtwYXJlbnQ6''@;'; put 'put ''THQsem9uZTp0aGlzfTt0cnl7TS50eXBlPT1kdCYmTS5kYXRhJiYhTS5kYXRhLmlzUGVyaW9kaWMmJihNLmNhbmNlbEZuPXZvaWQgMCk7dHJ5e3JldHVybiB0aGlzLl96b25lRGVsZWdhdGUuaW52b2tlVGFzayh0aGlzLE0sTixodCl9Y2F0Y2goSCl7aWYodGhpcy5fem9uZURlbGVnYXRlLmhh''@;'; put 'put ''bmRsZUVycm9yKHRoaXMsSCkpdGhyb3cgSH19ZmluYWxseXtNLnN0YXRlIT09RHQmJk0uc3RhdGUhPT1xJiYoTS50eXBlPT16dHx8TS5kYXRhJiZNLmRhdGEuaXNQZXJpb2RpYz9tdCYmTS5fdHJhbnNpdGlvblRvKHd0LHJ0KTooTS5ydW5Db3VudD0wLHRoaXMuX3VwZGF0ZVRhc2tDb3VudChN''@;'; put 'put ''LC0xKSxtdCYmTS5fdHJhbnNpdGlvblRvKER0LHJ0LER0KSkpLEx0PUx0LnBhcmVudCxxdD1XdH19c2NoZWR1bGVUYXNrKE0pe2lmKE0uem9uZSYmTS56b25lIT09dGhpcyl7bGV0IGh0PXRoaXM7Zm9yKDtodDspe2lmKGh0PT09TS56b25lKXRocm93IEVycm9yKGBjYW4gbm90IHJlc2NoZWR1''@;'; put 'put ''bGUgdGFzayB0byAke3RoaXMubmFtZX0gd2hpY2ggaXMgZGVzY2VuZGFudHMgb2YgdGhlIG9yaWdpbmFsIHpvbmUgJHtNLnpvbmUubmFtZX1gKTtodD1odC5wYXJlbnR9fU0uX3RyYW5zaXRpb25UbyhVdCxEdCk7Y29uc3QgTj1bXTtNLl96b25lRGVsZWdhdGVzPU4sTS5fem9uZT10aGlzO3Ry''@;'; put 'put ''eXtNPXRoaXMuX3pvbmVEZWxlZ2F0ZS5zY2hlZHVsZVRhc2sodGhpcyxNKX1jYXRjaChodCl7dGhyb3cgTS5fdHJhbnNpdGlvblRvKHEsVXQsRHQpLHRoaXMuX3pvbmVEZWxlZ2F0ZS5oYW5kbGVFcnJvcih0aGlzLGh0KSxodH1yZXR1cm4gTS5fem9uZURlbGVnYXRlcz09PU4mJnRoaXMuX3Vw''@;'; put 'put ''ZGF0ZVRhc2tDb3VudChNLDEpLE0uc3RhdGU9PVV0JiZNLl90cmFuc2l0aW9uVG8od3QsVXQpLE19c2NoZWR1bGVNaWNyb1Rhc2soTSxOLGh0LG10KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IGl0KFB0LE0sTixodCxtdCx2b2lkIDApKX1zY2hlZHVsZU1hY3JvVGFzayhNLE4saHQs''@;'; put 'put ''bXQsV3Qpe3JldHVybiB0aGlzLnNjaGVkdWxlVGFzayhuZXcgaXQoZHQsTSxOLGh0LG10LFd0KSl9c2NoZWR1bGVFdmVudFRhc2soTSxOLGh0LG10LFd0KXtyZXR1cm4gdGhpcy5zY2hlZHVsZVRhc2sobmV3IGl0KHp0LE0sTixodCxtdCxXdCkpfWNhbmNlbFRhc2soTSl7aWYoTS56b25lIT10''@;'; put 'put ''aGlzKXRocm93IG5ldyBFcnJvcigiQSB0YXNrIGNhbiBvbmx5IGJlIGNhbmNlbGxlZCBpbiB0aGUgem9uZSBvZiBjcmVhdGlvbiEgKENyZWF0aW9uOiAiKyhNLnpvbmV8fEd0KS5uYW1lKyI7IEV4ZWN1dGlvbjogIit0aGlzLm5hbWUrIikiKTtpZihNLnN0YXRlPT09d3R8fE0uc3RhdGU9PT1y''@;'; put 'put ''dCl7TS5fdHJhbnNpdGlvblRvKEN0LHd0LHJ0KTt0cnl7dGhpcy5fem9uZURlbGVnYXRlLmNhbmNlbFRhc2sodGhpcyxNKX1jYXRjaChOKXt0aHJvdyBNLl90cmFuc2l0aW9uVG8ocSxDdCksdGhpcy5fem9uZURlbGVnYXRlLmhhbmRsZUVycm9yKHRoaXMsTiksTn1yZXR1cm4gdGhpcy5fdXBk''@;'; put 'put ''YXRlVGFza0NvdW50KE0sLTEpLE0uX3RyYW5zaXRpb25UbyhEdCxDdCksTS5ydW5Db3VudD0wLE19fV91cGRhdGVUYXNrQ291bnQoTSxOKXtjb25zdCBodD1NLl96b25lRGVsZWdhdGVzOy0xPT1OJiYoTS5fem9uZURlbGVnYXRlcz1udWxsKTtmb3IobGV0IG10PTA7bXQ8aHQubGVuZ3RoO210''@;'; put 'put ''KyspaHRbbXRdLl91cGRhdGVUYXNrQ291bnQoTS50eXBlLE4pfX1yZXR1cm4gSXQuX19zeW1ib2xfXz1rLEl0fSkoKTtjb25zdCBvdD17bmFtZToiIixvbkhhc1Rhc2s6KEl0LGF0LE0sTik9Pkl0Lmhhc1Rhc2soTSxOKSxvblNjaGVkdWxlVGFzazooSXQsYXQsTSxOKT0+SXQuc2NoZWR1bGVU''@;'; put 'put ''YXNrKE0sTiksb25JbnZva2VUYXNrOihJdCxhdCxNLE4saHQsbXQpPT5JdC5pbnZva2VUYXNrKE0sTixodCxtdCksb25DYW5jZWxUYXNrOihJdCxhdCxNLE4pPT5JdC5jYW5jZWxUYXNrKE0sTil9O2NsYXNzIGN0e2NvbnN0cnVjdG9yKGF0LE0sTil7dGhpcy5fdGFza0NvdW50cz17bWljcm9U''@;'; put 'put ''YXNrOjAsbWFjcm9UYXNrOjAsZXZlbnRUYXNrOjB9LHRoaXMuem9uZT1hdCx0aGlzLl9wYXJlbnREZWxlZ2F0ZT1NLHRoaXMuX2ZvcmtaUz1OJiYoTiYmTi5vbkZvcms/TjpNLl9mb3JrWlMpLHRoaXMuX2ZvcmtEbGd0PU4mJihOLm9uRm9yaz9NOk0uX2ZvcmtEbGd0KSx0aGlzLl9mb3JrQ3Vy''@;'; put 'put ''clpvbmU9TiYmKE4ub25Gb3JrP3RoaXMuem9uZTpNLl9mb3JrQ3VyclpvbmUpLHRoaXMuX2ludGVyY2VwdFpTPU4mJihOLm9uSW50ZXJjZXB0P046TS5faW50ZXJjZXB0WlMpLHRoaXMuX2ludGVyY2VwdERsZ3Q9TiYmKE4ub25JbnRlcmNlcHQ/TTpNLl9pbnRlcmNlcHREbGd0KSx0aGlzLl9p''@;'; put 'put ''bnRlcmNlcHRDdXJyWm9uZT1OJiYoTi5vbkludGVyY2VwdD90aGlzLnpvbmU6TS5faW50ZXJjZXB0Q3VyclpvbmUpLHRoaXMuX2ludm9rZVpTPU4mJihOLm9uSW52b2tlP046TS5faW52b2tlWlMpLHRoaXMuX2ludm9rZURsZ3Q9TiYmKE4ub25JbnZva2U/TTpNLl9pbnZva2VEbGd0KSx0aGlz''@;'; put 'put ''Ll9pbnZva2VDdXJyWm9uZT1OJiYoTi5vbkludm9rZT90aGlzLnpvbmU6TS5faW52b2tlQ3VyclpvbmUpLHRoaXMuX2hhbmRsZUVycm9yWlM9TiYmKE4ub25IYW5kbGVFcnJvcj9OOk0uX2hhbmRsZUVycm9yWlMpLHRoaXMuX2hhbmRsZUVycm9yRGxndD1OJiYoTi5vbkhhbmRsZUVycm9yP006''@;'; put 'put ''TS5faGFuZGxlRXJyb3JEbGd0KSx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lPU4mJihOLm9uSGFuZGxlRXJyb3I/dGhpcy56b25lOk0uX2hhbmRsZUVycm9yQ3VyclpvbmUpLHRoaXMuX3NjaGVkdWxlVGFza1pTPU4mJihOLm9uU2NoZWR1bGVUYXNrP046TS5fc2NoZWR1bGVUYXNrWlMpLHRo''@;'; put 'put ''aXMuX3NjaGVkdWxlVGFza0RsZ3Q9TiYmKE4ub25TY2hlZHVsZVRhc2s/TTpNLl9zY2hlZHVsZVRhc2tEbGd0KSx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZT1OJiYoTi5vblNjaGVkdWxlVGFzaz90aGlzLnpvbmU6TS5fc2NoZWR1bGVUYXNrQ3VyclpvbmUpLHRoaXMuX2ludm9rZVRhc2ta''@;'; put 'put ''Uz1OJiYoTi5vbkludm9rZVRhc2s/TjpNLl9pbnZva2VUYXNrWlMpLHRoaXMuX2ludm9rZVRhc2tEbGd0PU4mJihOLm9uSW52b2tlVGFzaz9NOk0uX2ludm9rZVRhc2tEbGd0KSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9TiYmKE4ub25JbnZva2VUYXNrP3RoaXMuem9uZTpNLl9pbnZva2VU''@;'; put 'put ''YXNrQ3VyclpvbmUpLHRoaXMuX2NhbmNlbFRhc2taUz1OJiYoTi5vbkNhbmNlbFRhc2s/TjpNLl9jYW5jZWxUYXNrWlMpLHRoaXMuX2NhbmNlbFRhc2tEbGd0PU4mJihOLm9uQ2FuY2VsVGFzaz9NOk0uX2NhbmNlbFRhc2tEbGd0KSx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmU9TiYmKE4ub25D''@;'; put 'put ''YW5jZWxUYXNrP3RoaXMuem9uZTpNLl9jYW5jZWxUYXNrQ3VyclpvbmUpLHRoaXMuX2hhc1Rhc2taUz1udWxsLHRoaXMuX2hhc1Rhc2tEbGd0PW51bGwsdGhpcy5faGFzVGFza0RsZ3RPd25lcj1udWxsLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1udWxsO2NvbnN0IGh0PU4mJk4ub25IYXNUYXNr''@;'; put 'put ''OyhodHx8TSYmTS5faGFzVGFza1pTKSYmKHRoaXMuX2hhc1Rhc2taUz1odD9OOm90LHRoaXMuX2hhc1Rhc2tEbGd0PU0sdGhpcy5faGFzVGFza0RsZ3RPd25lcj10aGlzLHRoaXMuX2hhc1Rhc2tDdXJyWm9uZT1hdCxOLm9uU2NoZWR1bGVUYXNrfHwodGhpcy5fc2NoZWR1bGVUYXNrWlM9b3Qs''@;'; put 'put ''dGhpcy5fc2NoZWR1bGVUYXNrRGxndD1NLHRoaXMuX3NjaGVkdWxlVGFza0N1cnJab25lPXRoaXMuem9uZSksTi5vbkludm9rZVRhc2t8fCh0aGlzLl9pbnZva2VUYXNrWlM9b3QsdGhpcy5faW52b2tlVGFza0RsZ3Q9TSx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmU9dGhpcy56b25lKSxOLm9u''@;'; put 'put ''Q2FuY2VsVGFza3x8KHRoaXMuX2NhbmNlbFRhc2taUz1vdCx0aGlzLl9jYW5jZWxUYXNrRGxndD1NLHRoaXMuX2NhbmNlbFRhc2tDdXJyWm9uZT10aGlzLnpvbmUpKX1mb3JrKGF0LE0pe3JldHVybiB0aGlzLl9mb3JrWlM/dGhpcy5fZm9ya1pTLm9uRm9yayh0aGlzLl9mb3JrRGxndCx0aGlz''@;'; put 'put ''LnpvbmUsYXQsTSk6bmV3IHooYXQsTSl9aW50ZXJjZXB0KGF0LE0sTil7cmV0dXJuIHRoaXMuX2ludGVyY2VwdFpTP3RoaXMuX2ludGVyY2VwdFpTLm9uSW50ZXJjZXB0KHRoaXMuX2ludGVyY2VwdERsZ3QsdGhpcy5faW50ZXJjZXB0Q3VyclpvbmUsYXQsTSxOKTpNfWludm9rZShhdCxNLE4s''@;'; put 'put ''aHQsbXQpe3JldHVybiB0aGlzLl9pbnZva2VaUz90aGlzLl9pbnZva2VaUy5vbkludm9rZSh0aGlzLl9pbnZva2VEbGd0LHRoaXMuX2ludm9rZUN1cnJab25lLGF0LE0sTixodCxtdCk6TS5hcHBseShOLGh0KX1oYW5kbGVFcnJvcihhdCxNKXtyZXR1cm4hdGhpcy5faGFuZGxlRXJyb3JaU3x8''@;'; put 'put ''dGhpcy5faGFuZGxlRXJyb3JaUy5vbkhhbmRsZUVycm9yKHRoaXMuX2hhbmRsZUVycm9yRGxndCx0aGlzLl9oYW5kbGVFcnJvckN1cnJab25lLGF0LE0pfXNjaGVkdWxlVGFzayhhdCxNKXtsZXQgTj1NO2lmKHRoaXMuX3NjaGVkdWxlVGFza1pTKXRoaXMuX2hhc1Rhc2taUyYmTi5fem9uZURl''@;'; put 'put ''bGVnYXRlcy5wdXNoKHRoaXMuX2hhc1Rhc2tEbGd0T3duZXIpLE49dGhpcy5fc2NoZWR1bGVUYXNrWlMub25TY2hlZHVsZVRhc2sodGhpcy5fc2NoZWR1bGVUYXNrRGxndCx0aGlzLl9zY2hlZHVsZVRhc2tDdXJyWm9uZSxhdCxNKSxOfHwoTj1NKTtlbHNlIGlmKE0uc2NoZWR1bGVGbilNLnNj''@;'; put 'put ''aGVkdWxlRm4oTSk7ZWxzZXtpZihNLnR5cGUhPVB0KXRocm93IG5ldyBFcnJvcigiVGFzayBpcyBtaXNzaW5nIHNjaGVkdWxlRm4uIik7eXQoTSl9cmV0dXJuIE59aW52b2tlVGFzayhhdCxNLE4saHQpe3JldHVybiB0aGlzLl9pbnZva2VUYXNrWlM/dGhpcy5faW52b2tlVGFza1pTLm9uSW52''@;'; put 'put ''b2tlVGFzayh0aGlzLl9pbnZva2VUYXNrRGxndCx0aGlzLl9pbnZva2VUYXNrQ3VyclpvbmUsYXQsTSxOLGh0KTpNLmNhbGxiYWNrLmFwcGx5KE4saHQpfWNhbmNlbFRhc2soYXQsTSl7bGV0IE47aWYodGhpcy5fY2FuY2VsVGFza1pTKU49dGhpcy5fY2FuY2VsVGFza1pTLm9uQ2FuY2VsVGFz''@;'; put 'put ''ayh0aGlzLl9jYW5jZWxUYXNrRGxndCx0aGlzLl9jYW5jZWxUYXNrQ3VyclpvbmUsYXQsTSk7ZWxzZXtpZighTS5jYW5jZWxGbil0aHJvdyBFcnJvcigiVGFzayBpcyBub3QgY2FuY2VsYWJsZSIpO049TS5jYW5jZWxGbihNKX1yZXR1cm4gTn1oYXNUYXNrKGF0LE0pe3RyeXt0aGlzLl9oYXNU''@;'; put 'put ''YXNrWlMmJnRoaXMuX2hhc1Rhc2taUy5vbkhhc1Rhc2sodGhpcy5faGFzVGFza0RsZ3QsdGhpcy5faGFzVGFza0N1cnJab25lLGF0LE0pfWNhdGNoKE4pe3RoaXMuaGFuZGxlRXJyb3IoYXQsTil9fV91cGRhdGVUYXNrQ291bnQoYXQsTSl7Y29uc3QgTj10aGlzLl90YXNrQ291bnRzLGh0PU5b''@;'; put 'put ''YXRdLG10PU5bYXRdPWh0K007aWYobXQ8MCl0aHJvdyBuZXcgRXJyb3IoIk1vcmUgdGFza3MgZXhlY3V0ZWQgdGhlbiB3ZXJlIHNjaGVkdWxlZC4iKTswIT1odCYmMCE9bXR8fHRoaXMuaGFzVGFzayh0aGlzLnpvbmUse21pY3JvVGFzazpOLm1pY3JvVGFzaz4wLG1hY3JvVGFzazpOLm1hY3Jv''@;'; put 'put ''VGFzaz4wLGV2ZW50VGFzazpOLmV2ZW50VGFzaz4wLGNoYW5nZTphdH0pfX1jbGFzcyBpdHtjb25zdHJ1Y3RvcihhdCxNLE4saHQsbXQsV3Qpe2lmKHRoaXMuX3pvbmU9bnVsbCx0aGlzLnJ1bkNvdW50PTAsdGhpcy5fem9uZURlbGVnYXRlcz1udWxsLHRoaXMuX3N0YXRlPSJub3RTY2hlZHVs''@;'; put 'put ''ZWQiLHRoaXMudHlwZT1hdCx0aGlzLnNvdXJjZT1NLHRoaXMuZGF0YT1odCx0aGlzLnNjaGVkdWxlRm49bXQsdGhpcy5jYW5jZWxGbj1XdCwhTil0aHJvdyBuZXcgRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkIik7dGhpcy5jYWxsYmFjaz1OO2NvbnN0IEg9dGhpczt0aGlzLmludm9r''@;'; put 'put ''ZT1hdD09PXp0JiZodCYmaHQudXNlRz9pdC5pbnZva2VUYXNrOmZ1bmN0aW9uKCl7cmV0dXJuIGl0Lmludm9rZVRhc2suY2FsbChoLEgsdGhpcyxhcmd1bWVudHMpfX1zdGF0aWMgaW52b2tlVGFzayhhdCxNLE4pe2F0fHwoYXQ9dGhpcyksVnQrKzt0cnl7cmV0dXJuIGF0LnJ1bkNvdW50Kyss''@;'; put 'put ''YXQuem9uZS5ydW5UYXNrKGF0LE0sTil9ZmluYWxseXsxPT1WdCYmZXQoKSxWdC0tfX1nZXQgem9uZSgpe3JldHVybiB0aGlzLl96b25lfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLl9zdGF0ZX1jYW5jZWxTY2hlZHVsZVJlcXVlc3QoKXt0aGlzLl90cmFuc2l0aW9uVG8oRHQsVXQpfV90cmFu''@;'; put 'put ''c2l0aW9uVG8oYXQsTSxOKXtpZih0aGlzLl9zdGF0ZSE9PU0mJnRoaXMuX3N0YXRlIT09Til0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy50eXBlfSAnJHt0aGlzLnNvdXJjZX0nOiBjYW4gbm90IHRyYW5zaXRpb24gdG8gJyR7YXR9JywgZXhwZWN0aW5nIHN0YXRlICcke019JyR7Tj8iIG9yICci''@;'; put 'put ''K04rIiciOiIifSwgd2FzICcke3RoaXMuX3N0YXRlfScuYCk7dGhpcy5fc3RhdGU9YXQsYXQ9PUR0JiYodGhpcy5fem9uZURlbGVnYXRlcz1udWxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLmRhdGEmJnR5cGVvZiB0aGlzLmRhdGEuaGFuZGxlSWQ8InUiP3RoaXMuZGF0YS5oYW5kbGVJZC50''@;'; put 'put ''b1N0cmluZygpOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzKX10b0pTT04oKXtyZXR1cm57dHlwZTp0aGlzLnR5cGUsc3RhdGU6dGhpcy5zdGF0ZSxzb3VyY2U6dGhpcy5zb3VyY2Usem9uZTp0aGlzLnpvbmUubmFtZSxydW5Db3VudDp0aGlzLnJ1bkNvdW50fX19Y29uc3Qg''@;'; put 'put ''QXQ9aygic2V0VGltZW91dCIpLFN0PWsoIlByb21pc2UiKSxPdD1rKCJ0aGVuIik7bGV0IEp0LGt0PVtdLFJ0PSExO2Z1bmN0aW9uICR0KEl0KXtpZihKdHx8aFtTdF0mJihKdD1oW1N0XS5yZXNvbHZlKDApKSxKdCl7bGV0IGF0PUp0W090XTthdHx8KGF0PUp0LnRoZW4pLGF0LmNhbGwoSnQs''@;'; put 'put ''SXQpfWVsc2UgaFtBdF0oSXQsMCl9ZnVuY3Rpb24geXQoSXQpezA9PT1WdCYmMD09PWt0Lmxlbmd0aCYmJHQoZXQpLEl0JiZrdC5wdXNoKEl0KX1mdW5jdGlvbiBldCgpe2lmKCFSdCl7Zm9yKFJ0PSEwO2t0Lmxlbmd0aDspe2NvbnN0IEl0PWt0O2t0PVtdO2ZvcihsZXQgYXQ9MDthdDxJdC5s''@;'; put 'put ''ZW5ndGg7YXQrKyl7Y29uc3QgTT1JdFthdF07dHJ5e00uem9uZS5ydW5UYXNrKE0sbnVsbCxudWxsKX1jYXRjaChOKXtIdC5vblVuaGFuZGxlZEVycm9yKE4pfX19SHQubWljcm90YXNrRHJhaW5Eb25lKCksUnQ9ITF9fWNvbnN0IEd0PXtuYW1lOiJOTyBaT05FIn0sRHQ9Im5vdFNjaGVkdWxl''@;'; put 'put ''ZCIsVXQ9InNjaGVkdWxpbmciLHd0PSJzY2hlZHVsZWQiLHJ0PSJydW5uaW5nIixDdD0iY2FuY2VsaW5nIixxPSJ1bmtub3duIixQdD0ibWljcm9UYXNrIixkdD0ibWFjcm9UYXNrIix6dD0iZXZlbnRUYXNrIixfdD17fSxIdD17c3ltYm9sOmssY3VycmVudFpvbmVGcmFtZTooKT0+THQsb25V''@;'; put 'put ''bmhhbmRsZWRFcnJvcjpLdCxtaWNyb3Rhc2tEcmFpbkRvbmU6S3Qsc2NoZWR1bGVNaWNyb1Rhc2s6eXQsc2hvd1VuY2F1Z2h0RXJyb3I6KCk9PiF6W2soImlnbm9yZUNvbnNvbGVFcnJvclVuY2F1Z2h0RXJyb3IiKV0scGF0Y2hFdmVudFRhcmdldDooKT0+W10scGF0Y2hPblByb3BlcnRpZXM6''@;'; put 'put ''S3QscGF0Y2hNZXRob2Q6KCk9Pkt0LGJpbmRBcmd1bWVudHM6KCk9PltdLHBhdGNoVGhlbjooKT0+S3QscGF0Y2hNYWNyb1Rhc2s6KCk9Pkt0LHBhdGNoRXZlbnRQcm90b3R5cGU6KCk9Pkt0LGlzSUVPckVkZ2U6KCk9PiExLGdldEdsb2JhbE9iamVjdHM6KCk9Pnt9LE9iamVjdERlZmluZVBy''@;'; put 'put ''b3BlcnR5OigpPT5LdCxPYmplY3RHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6KCk9Pnt9LE9iamVjdENyZWF0ZTooKT0+e30sQXJyYXlTbGljZTooKT0+W10scGF0Y2hDbGFzczooKT0+S3Qsd3JhcFdpdGhDdXJyZW50Wm9uZTooKT0+S3QsZmlsdGVyUHJvcGVydGllczooKT0+W10sYXR0YWNo''@;'; put 'put ''T3JpZ2luVG9QYXRjaGVkOigpPT5LdCxfcmVkZWZpbmVQcm9wZXJ0eTooKT0+S3QscGF0Y2hDYWxsYmFja3M6KCk9Pkt0LG5hdGl2ZVNjaGVkdWxlTWljcm9UYXNrOiR0fTtsZXQgTHQ9e3BhcmVudDpudWxsLHpvbmU6bmV3IHoobnVsbCxudWxsKX0scXQ9bnVsbCxWdD0wO2Z1bmN0aW9uIEt0''@;'; put 'put ''KCl7fVQoIlpvbmUiLCJab25lIiksaC5ab25lPXp9KHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3d8fHR5cGVvZiBzZWxmPCJ1IiYmc2VsZnx8Z2xvYmFsKTtjb25zdCBjPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbD1PYmplY3QuZGVmaW5lUHJvcGVydHksdD1PYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2Ysbj1PYmplY3QuY3JlYXRlLGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9ImFkZEV2ZW50TGlzdGVuZXIiLG89InJlbW92ZUV2ZW50TGlzdGVuZXIiLHU9Wm9uZS5fX3N5bWJvbF9fKHMpLGY9Wm9uZS5fX3N5bWJvbF9fKG8pLGk9InRydWUiLHA9ImZhbHNlIix5PVpvbmUu''@;'; put 'put ''X19zeW1ib2xfXygiIik7ZnVuY3Rpb24gdihoLFApe3JldHVybiBab25lLmN1cnJlbnQud3JhcChoLFApfWZ1bmN0aW9uIGcoaCxQLEksVCxBKXtyZXR1cm4gWm9uZS5jdXJyZW50LnNjaGVkdWxlTWFjcm9UYXNrKGgsUCxJLFQsQSl9Y29uc3QgeD1ab25lLl9fc3ltYm9sX18sRT10eXBlb2Yg''@;'; put 'put ''d2luZG93PCJ1IixqPUU/d2luZG93OnZvaWQgMCx3PUUmJmp8fCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZnx8Z2xvYmFsLFI9InJlbW92ZUF0dHJpYnV0ZSI7ZnVuY3Rpb24gRihoLFApe2ZvcihsZXQgST1oLmxlbmd0aC0xO0k+PTA7SS0tKSJmdW5jdGlvbiI9PXR5cGVvZiBoW0ldJiYo''@;'; put 'put ''aFtJXT12KGhbSV0sUCsiXyIrSSkpO3JldHVybiBofWZ1bmN0aW9uIGIoaCl7cmV0dXJuIWh8fCExIT09aC53cml0YWJsZSYmISgiZnVuY3Rpb24iPT10eXBlb2YgaC5nZXQmJnR5cGVvZiBoLnNldD4idSIpfWNvbnN0IE89dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0''@;'; put 'put ''YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlLFM9ISgibnciaW4gdykmJnR5cGVvZiB3LnByb2Nlc3M8InUiJiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHcucHJvY2VzcyksQz0hUyYmIU8mJiEoIUV8fCFqLkhUTUxFbGVtZW50KSxLPXR5cGVvZiB3LnByb2Nlc3M8InUi''@;'; put 'put ''JiYiW29iamVjdCBwcm9jZXNzXSI9PT17fS50b1N0cmluZy5jYWxsKHcucHJvY2VzcykmJiFPJiYhKCFFfHwhai5IVE1MRWxlbWVudCksVT17fSxaPWZ1bmN0aW9uKGgpe2lmKCEoaD1ofHx3LmV2ZW50KSlyZXR1cm47bGV0IFA9VVtoLnR5cGVdO1B8fChQPVVbaC50eXBlXT14KCJPTl9QUk9Q''@;'; put 'put ''RVJUWSIraC50eXBlKSk7Y29uc3QgST10aGlzfHxoLnRhcmdldHx8dyxUPUlbUF07bGV0IEE7cmV0dXJuIEMmJkk9PT1qJiYiZXJyb3IiPT09aC50eXBlPyhBPVQmJlQuY2FsbCh0aGlzLGgubWVzc2FnZSxoLmZpbGVuYW1lLGgubGluZW5vLGguY29sbm8saC5lcnJvciksITA9PT1BJiZoLnBy''@;'; put 'put ''ZXZlbnREZWZhdWx0KCkpOihBPVQmJlQuYXBwbHkodGhpcyxhcmd1bWVudHMpLG51bGwhPUEmJiFBJiZoLnByZXZlbnREZWZhdWx0KCkpLEF9O2Z1bmN0aW9uIHR0KGgsUCxJKXtsZXQgVD1jKGgsUCk7aWYoIVQmJkkmJmMoSSxQKSYmKFQ9e2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw''@;'; put 'put ''fSksIVR8fCFULmNvbmZpZ3VyYWJsZSlyZXR1cm47Y29uc3QgQT14KCJvbiIrUCsicGF0Y2hlZCIpO2lmKGguaGFzT3duUHJvcGVydHkoQSkmJmhbQV0pcmV0dXJuO2RlbGV0ZSBULndyaXRhYmxlLGRlbGV0ZSBULnZhbHVlO2NvbnN0IGs9VC5nZXQsSj1ULnNldCx6PVAuc2xpY2UoMik7bGV0''@;'; put 'put ''IG90PVVbel07b3R8fChvdD1VW3pdPXgoIk9OX1BST1BFUlRZIit6KSksVC5zZXQ9ZnVuY3Rpb24oY3Qpe2xldCBpdD10aGlzOyFpdCYmaD09PXcmJihpdD13KSxpdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBpdFtvdF0mJml0LnJlbW92ZUV2ZW50TGlzdGVuZXIoeixaKSxKJiZKLmNhbGwoaXQs''@;'; put 'put ''bnVsbCksaXRbb3RdPWN0LCJmdW5jdGlvbiI9PXR5cGVvZiBjdCYmaXQuYWRkRXZlbnRMaXN0ZW5lcih6LFosITEpKX0sVC5nZXQ9ZnVuY3Rpb24oKXtsZXQgY3Q9dGhpcztpZighY3QmJmg9PT13JiYoY3Q9dyksIWN0KXJldHVybiBudWxsO2NvbnN0IGl0PWN0W290XTtpZihpdClyZXR1cm4g''@;'; put 'put ''aXQ7aWYoayl7bGV0IEF0PWsuY2FsbCh0aGlzKTtpZihBdClyZXR1cm4gVC5zZXQuY2FsbCh0aGlzLEF0KSwiZnVuY3Rpb24iPT10eXBlb2YgY3RbUl0mJmN0LnJlbW92ZUF0dHJpYnV0ZShQKSxBdH1yZXR1cm4gbnVsbH0sbChoLFAsVCksaFtBXT0hMH1mdW5jdGlvbiBfKGgsUCxJKXtpZihQ''@;'; put 'put ''KWZvcihsZXQgVD0wO1Q8UC5sZW5ndGg7VCsrKXR0KGgsIm9uIitQW1RdLEkpO2Vsc2V7Y29uc3QgVD1bXTtmb3IoY29uc3QgQSBpbiBoKSJvbiI9PUEuc2xpY2UoMCwyKSYmVC5wdXNoKEEpO2ZvcihsZXQgQT0wO0E8VC5sZW5ndGg7QSsrKXR0KGgsVFtBXSxJKX19Y29uc3QgbnQ9eCgib3Jp''@;'; put 'put ''Z2luYWxJbnN0YW5jZSIpO2Z1bmN0aW9uIHN0KGgpe2NvbnN0IFA9d1toXTtpZighUClyZXR1cm47d1t4KGgpXT1QLHdbaF09ZnVuY3Rpb24oKXtjb25zdCBBPUYoYXJndW1lbnRzLGgpO3N3aXRjaChBLmxlbmd0aCl7Y2FzZSAwOnRoaXNbbnRdPW5ldyBQO2JyZWFrO2Nhc2UgMTp0aGlzW250''@;'; put 'put ''XT1uZXcgUChBWzBdKTticmVhaztjYXNlIDI6dGhpc1tudF09bmV3IFAoQVswXSxBWzFdKTticmVhaztjYXNlIDM6dGhpc1tudF09bmV3IFAoQVswXSxBWzFdLEFbMl0pO2JyZWFrO2Nhc2UgNDp0aGlzW250XT1uZXcgUChBWzBdLEFbMV0sQVsyXSxBWzNdKTticmVhaztkZWZhdWx0OnRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiQXJnIGxpc3QgdG9vIGxvbmcuIil9fSxRKHdbaF0sUCk7Y29uc3QgST1uZXcgUChmdW5jdGlvbigpe30pO2xldCBUO2ZvcihUIGluIEkpIlhNTEh0dHBSZXF1ZXN0Ij09PWgmJiJyZXNwb25zZUJsb2IiPT09VHx8ZnVuY3Rpb24oQSl7ImZ1bmN0aW9uIj09dHlwZW9mIElb''@;'; put 'put ''QV0/d1toXS5wcm90b3R5cGVbQV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tudF1bQV0uYXBwbHkodGhpc1tudF0sYXJndW1lbnRzKX06bCh3W2hdLnByb3RvdHlwZSxBLHtzZXQ6ZnVuY3Rpb24oayl7ImZ1bmN0aW9uIj09dHlwZW9mIGs/KHRoaXNbbnRdW0FdPXYoayxoKyIuIitBKSxRKHRo''@;'; put 'put ''aXNbbnRdW0FdLGspKTp0aGlzW250XVtBXT1rfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tudF1bQV19fSl9KFQpO2ZvcihUIGluIFApInByb3RvdHlwZSIhPT1UJiZQLmhhc093blByb3BlcnR5KFQpJiYod1toXVtUXT1QW1RdKX1mdW5jdGlvbiBYKGgsUCxJKXtsZXQgVD1oO2Zvcig7''@;'; put 'put ''VCYmIVQuaGFzT3duUHJvcGVydHkoUCk7KVQ9dChUKTshVCYmaFtQXSYmKFQ9aCk7Y29uc3QgQT14KFApO2xldCBrPW51bGw7aWYoVCYmKCEoaz1UW0FdKXx8IVQuaGFzT3duUHJvcGVydHkoQSkpJiYoaz1UW0FdPVRbUF0sYihUJiZjKFQsUCkpKSl7Y29uc3Qgej1JKGssQSxQKTtUW1BdPWZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHoodGhpcyxhcmd1bWVudHMpfSxRKFRbUF0sayl9cmV0dXJuIGt9ZnVuY3Rpb24gVihoLFAsSSl7bGV0IFQ9bnVsbDtmdW5jdGlvbiBBKGspe2NvbnN0IEo9ay5kYXRhO3JldHVybiBKLmFyZ3NbSi5jYklkeF09ZnVuY3Rpb24oKXtrLmludm9rZS5hcHBseSh0aGlz''@;'; put 'put ''LGFyZ3VtZW50cyl9LFQuYXBwbHkoSi50YXJnZXQsSi5hcmdzKSxrfVQ9WChoLFAsaz0+ZnVuY3Rpb24oSix6KXtjb25zdCBvdD1JKEoseik7cmV0dXJuIG90LmNiSWR4Pj0wJiYiZnVuY3Rpb24iPT10eXBlb2YgeltvdC5jYklkeF0/ZyhvdC5uYW1lLHpbb3QuY2JJZHhdLG90LEEpOmsuYXBw''@;'; put 'put ''bHkoSix6KX0pfWZ1bmN0aW9uIFEoaCxQKXtoW3goIk9yaWdpbmFsRGVsZWdhdGUiKV09UH1sZXQgWT0hMSxmdD0hMTtmdW5jdGlvbiBNdCgpe2lmKFkpcmV0dXJuIGZ0O1k9ITA7dHJ5e2NvbnN0IGg9ai5uYXZpZ2F0b3IudXNlckFnZW50OygtMSE9PWguaW5kZXhPZigiTVNJRSAiKXx8LTEh''@;'; put 'put ''PT1oLmluZGV4T2YoIlRyaWRlbnQvIil8fC0xIT09aC5pbmRleE9mKCJFZGdlLyIpKSYmKGZ0PSEwKX1jYXRjaHt9cmV0dXJuIGZ0fVpvbmUuX19sb2FkX3BhdGNoKCJab25lQXdhcmVQcm9taXNlIiwoaCxQLEkpPT57Y29uc3QgVD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEE9''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5LEo9SS5zeW1ib2wsej1bXSxvdD0hMD09PWhbSigiRElTQUJMRV9XUkFQUElOR19VTkNBVUdIVF9QUk9NSVNFX1JFSkVDVElPTiIpXSxjdD1KKCJQcm9taXNlIiksaXQ9SigidGhlbiIpLEF0PSJfX2NyZWF0aW9uVHJhY2VfXyI7SS5vblVuaGFuZGxlZEVy''@;'; put 'put ''cm9yPUg9PntpZihJLnNob3dVbmNhdWdodEVycm9yKCkpe2NvbnN0IFc9SCYmSC5yZWplY3Rpb247Vz9jb25zb2xlLmVycm9yKCJVbmhhbmRsZWQgUHJvbWlzZSByZWplY3Rpb246IixXIGluc3RhbmNlb2YgRXJyb3I/Vy5tZXNzYWdlOlcsIjsgWm9uZToiLEguem9uZS5uYW1lLCI7IFRhc2s6''@;'; put 'put ''IixILnRhc2smJkgudGFzay5zb3VyY2UsIjsgVmFsdWU6IixXLFcgaW5zdGFuY2VvZiBFcnJvcj9XLnN0YWNrOnZvaWQgMCk6Y29uc29sZS5lcnJvcihIKX19LEkubWljcm90YXNrRHJhaW5Eb25lPSgpPT57Zm9yKDt6Lmxlbmd0aDspe2NvbnN0IEg9ei5zaGlmdCgpO3RyeXtILnpvbmUucnVu''@;'; put 'put ''R3VhcmRlZCgoKT0+e3Rocm93IEgudGhyb3dPcmlnaW5hbD9ILnJlamVjdGlvbjpIfSl9Y2F0Y2goVyl7T3QoVyl9fX07Y29uc3QgU3Q9SigidW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbkhhbmRsZXIiKTtmdW5jdGlvbiBPdChIKXtJLm9uVW5oYW5kbGVkRXJyb3IoSCk7dHJ5e2NvbnN0IFc9''@;'; put 'put ''UFtTdF07ImZ1bmN0aW9uIj09dHlwZW9mIFcmJlcuY2FsbCh0aGlzLEgpfWNhdGNoe319ZnVuY3Rpb24ga3QoSCl7cmV0dXJuIEgmJkgudGhlbn1mdW5jdGlvbiBSdChIKXtyZXR1cm4gSH1mdW5jdGlvbiBKdChIKXtyZXR1cm4gTS5yZWplY3QoSCl9Y29uc3QgJHQ9Sigic3RhdGUiKSx5dD1K''@;'; put 'put ''KCJ2YWx1ZSIpLGV0PUooImZpbmFsbHkiKSxHdD1KKCJwYXJlbnRQcm9taXNlVmFsdWUiKSxEdD1KKCJwYXJlbnRQcm9taXNlU3RhdGUiKSxVdD0iUHJvbWlzZS50aGVuIix3dD1udWxsLHJ0PSEwLEN0PSExLHE9MDtmdW5jdGlvbiBQdChILFcpe3JldHVybiBMPT57dHJ5e0h0KEgsVyxMKX1j''@;'; put 'put ''YXRjaChHKXtIdChILCExLEcpfX19Y29uc3QgZHQ9ZnVuY3Rpb24oKXtsZXQgSD0hMTtyZXR1cm4gZnVuY3Rpb24oTCl7cmV0dXJuIGZ1bmN0aW9uKCl7SHx8KEg9ITAsTC5hcHBseShudWxsLGFyZ3VtZW50cykpfX19LHp0PSJQcm9taXNlIHJlc29sdmVkIHdpdGggaXRzZWxmIixfdD1KKCJj''@;'; put 'put ''dXJyZW50VGFza1RyYWNlIik7ZnVuY3Rpb24gSHQoSCxXLEwpe2NvbnN0IEc9ZHQoKTtpZihIPT09TCl0aHJvdyBuZXcgVHlwZUVycm9yKHp0KTtpZihIWyR0XT09PXd0KXtsZXQgbHQ9bnVsbDt0cnl7KCJvYmplY3QiPT10eXBlb2YgTHx8ImZ1bmN0aW9uIj09dHlwZW9mIEwpJiYobHQ9TCYm''@;'; put 'put ''TC50aGVuKX1jYXRjaChwdCl7cmV0dXJuIEcoKCk9PntIdChILCExLHB0KX0pKCksSH1pZihXIT09Q3QmJkwgaW5zdGFuY2VvZiBNJiZMLmhhc093blByb3BlcnR5KCR0KSYmTC5oYXNPd25Qcm9wZXJ0eSh5dCkmJkxbJHRdIT09d3QpcXQoTCksSHQoSCxMWyR0XSxMW3l0XSk7ZWxzZSBpZihX''@;'; put 'put ''IT09Q3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBsdCl0cnl7bHQuY2FsbChMLEcoUHQoSCxXKSksRyhQdChILCExKSkpfWNhdGNoKHB0KXtHKCgpPT57SHQoSCwhMSxwdCl9KSgpfWVsc2V7SFskdF09Vztjb25zdCBwdD1IW3l0XTtpZihIW3l0XT1MLEhbZXRdPT09ZXQmJlc9PT1ydCYmKEhbJHRd''@;'; put 'put ''PUhbRHRdLEhbeXRdPUhbR3RdKSxXPT09Q3QmJkwgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3QgdXQ9UC5jdXJyZW50VGFzayYmUC5jdXJyZW50VGFzay5kYXRhJiZQLmN1cnJlbnRUYXNrLmRhdGFbQXRdO3V0JiZBKEwsX3Qse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxl''@;'; put 'put ''OiEwLHZhbHVlOnV0fSl9Zm9yKGxldCB1dD0wO3V0PHB0Lmxlbmd0aDspVnQoSCxwdFt1dCsrXSxwdFt1dCsrXSxwdFt1dCsrXSxwdFt1dCsrXSk7aWYoMD09cHQubGVuZ3RoJiZXPT1DdCl7SFskdF09cTtsZXQgdXQ9TDt0cnl7dGhyb3cgbmV3IEVycm9yKCJVbmNhdWdodCAoaW4gcHJvbWlz''@;'; put 'put ''ZSk6ICIrZnVuY3Rpb24gayhIKXtyZXR1cm4gSCYmSC50b1N0cmluZz09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc/KEguY29uc3RydWN0b3ImJkguY29uc3RydWN0b3IubmFtZXx8IiIpKyI6ICIrSlNPTi5zdHJpbmdpZnkoSCk6SD9ILnRvU3RyaW5nKCk6T2JqZWN0LnByb3RvdHlwZS50''@;'; put 'put ''b1N0cmluZy5jYWxsKEgpfShMKSsoTCYmTC5zdGFjaz8iXG4iK0wuc3RhY2s6IiIpKX1jYXRjaChndCl7dXQ9Z3R9b3QmJih1dC50aHJvd09yaWdpbmFsPSEwKSx1dC5yZWplY3Rpb249TCx1dC5wcm9taXNlPUgsdXQuem9uZT1QLmN1cnJlbnQsdXQudGFzaz1QLmN1cnJlbnRUYXNrLHoucHVz''@;'; put 'put ''aCh1dCksSS5zY2hlZHVsZU1pY3JvVGFzaygpfX19cmV0dXJuIEh9Y29uc3QgTHQ9SigicmVqZWN0aW9uSGFuZGxlZEhhbmRsZXIiKTtmdW5jdGlvbiBxdChIKXtpZihIWyR0XT09PXEpe3RyeXtjb25zdCBXPVBbTHRdO1cmJiJmdW5jdGlvbiI9PXR5cGVvZiBXJiZXLmNhbGwodGhpcyx7cmVq''@;'; put 'put ''ZWN0aW9uOkhbeXRdLHByb21pc2U6SH0pfWNhdGNoe31IWyR0XT1DdDtmb3IobGV0IFc9MDtXPHoubGVuZ3RoO1crKylIPT09eltXXS5wcm9taXNlJiZ6LnNwbGljZShXLDEpfX1mdW5jdGlvbiBWdChILFcsTCxHLGx0KXtxdChIKTtjb25zdCBwdD1IWyR0XSx1dD1wdD8iZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgRz9HOlJ0OiJmdW5jdGlvbiI9PXR5cGVvZiBsdD9sdDpKdDtXLnNjaGVkdWxlTWljcm9UYXNrKFV0LCgpPT57dHJ5e2NvbnN0IGd0PUhbeXRdLHh0PSEhTCYmZXQ9PT1MW2V0XTt4dCYmKExbR3RdPWd0LExbRHRdPXB0KTtjb25zdCBUdD1XLnJ1bih1dCx2b2lkIDAseHQmJnV0IT09''@;'; put 'put ''SnQmJnV0IT09UnQ/W106W2d0XSk7SHQoTCwhMCxUdCl9Y2F0Y2goZ3Qpe0h0KEwsITEsZ3QpfX0sTCl9Y29uc3QgSXQ9ZnVuY3Rpb24oKXt9LGF0PWguQWdncmVnYXRlRXJyb3I7Y2xhc3MgTXtzdGF0aWMgdG9TdHJpbmcoKXtyZXR1cm4iZnVuY3Rpb24gWm9uZUF3YXJlUHJvbWlzZSgpIHsg''@;'; put 'put ''W25hdGl2ZSBjb2RlXSB9In1zdGF0aWMgcmVzb2x2ZShXKXtyZXR1cm4gSHQobmV3IHRoaXMobnVsbCkscnQsVyl9c3RhdGljIHJlamVjdChXKXtyZXR1cm4gSHQobmV3IHRoaXMobnVsbCksQ3QsVyl9c3RhdGljIGFueShXKXtpZighV3x8ImZ1bmN0aW9uIiE9dHlwZW9mIFdbU3ltYm9sLml0''@;'; put 'put ''ZXJhdG9yXSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGF0KFtdLCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKTtjb25zdCBMPVtdO2xldCBHPTA7dHJ5e2ZvcihsZXQgdXQgb2YgVylHKyssTC5wdXNoKE0ucmVzb2x2ZSh1dCkpfWNhdGNoe3JldHVybiBQcm9taXNlLnJlamVjdChu''@;'; put 'put ''ZXcgYXQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpfWlmKDA9PT1HKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgYXQoW10sIkFsbCBwcm9taXNlcyB3ZXJlIHJlamVjdGVkIikpO2xldCBsdD0hMTtjb25zdCBwdD1bXTtyZXR1cm4gbmV3IE0oKHV0LGd0KT0+e2ZvcihsZXQg''@;'; put 'put ''eHQ9MDt4dDxMLmxlbmd0aDt4dCsrKUxbeHRdLnRoZW4oVHQ9PntsdHx8KGx0PSEwLHV0KFR0KSl9LFR0PT57cHQucHVzaChUdCksRy0tLDA9PT1HJiYobHQ9ITAsZ3QobmV3IGF0KHB0LCJBbGwgcHJvbWlzZXMgd2VyZSByZWplY3RlZCIpKSl9KX0pfXN0YXRpYyByYWNlKFcpe2xldCBMLEcs''@;'; put 'put ''bHQ9bmV3IHRoaXMoKGd0LHh0KT0+e0w9Z3QsRz14dH0pO2Z1bmN0aW9uIHB0KGd0KXtMKGd0KX1mdW5jdGlvbiB1dChndCl7RyhndCl9Zm9yKGxldCBndCBvZiBXKWt0KGd0KXx8KGd0PXRoaXMucmVzb2x2ZShndCkpLGd0LnRoZW4ocHQsdXQpO3JldHVybiBsdH1zdGF0aWMgYWxsKFcpe3Jl''@;'; put 'put ''dHVybiBNLmFsbFdpdGhDYWxsYmFjayhXKX1zdGF0aWMgYWxsU2V0dGxlZChXKXtyZXR1cm4odGhpcyYmdGhpcy5wcm90b3R5cGUgaW5zdGFuY2VvZiBNP3RoaXM6TSkuYWxsV2l0aENhbGxiYWNrKFcse3RoZW5DYWxsYmFjazpHPT4oe3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTpHfSksZXJy''@;'; put 'put ''b3JDYWxsYmFjazpHPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpHfSl9KX1zdGF0aWMgYWxsV2l0aENhbGxiYWNrKFcsTCl7bGV0IEcsbHQscHQ9bmV3IHRoaXMoKFR0LGJ0KT0+e0c9VHQsbHQ9YnR9KSx1dD0yLGd0PTA7Y29uc3QgeHQ9W107Zm9yKGxldCBUdCBvZiBXKXtrdChUdCl8''@;'; put 'put ''fChUdD10aGlzLnJlc29sdmUoVHQpKTtjb25zdCBidD1ndDt0cnl7VHQudGhlbihOdD0+e3h0W2J0XT1MP0wudGhlbkNhbGxiYWNrKE50KTpOdCx1dC0tLDA9PT11dCYmRyh4dCl9LE50PT57TD8oeHRbYnRdPUwuZXJyb3JDYWxsYmFjayhOdCksdXQtLSwwPT09dXQmJkcoeHQpKTpsdChOdCl9''@;'; put 'put ''KX1jYXRjaChOdCl7bHQoTnQpfXV0KyssZ3QrK31yZXR1cm4gdXQtPTIsMD09PXV0JiZHKHh0KSxwdH1jb25zdHJ1Y3RvcihXKXtjb25zdCBMPXRoaXM7aWYoIShMIGluc3RhbmNlb2YgTSkpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGFuIGluc3RhbmNlb2YgUHJvbWlzZS4iKTtMWyR0XT13''@;'; put 'put ''dCxMW3l0XT1bXTt0cnl7Y29uc3QgRz1kdCgpO1cmJlcoRyhQdChMLHJ0KSksRyhQdChMLEN0KSkpfWNhdGNoKEcpe0h0KEwsITEsRyl9fWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIlByb21pc2UifWdldFtTeW1ib2wuc3BlY2llc10oKXtyZXR1cm4gTX10aGVuKFcsTCl7bGV0''@;'; put 'put ''IEc9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIUd8fCJmdW5jdGlvbiIhPXR5cGVvZiBHKSYmKEc9dGhpcy5jb25zdHJ1Y3Rvcnx8TSk7Y29uc3QgbHQ9bmV3IEcoSXQpLHB0PVAuY3VycmVudDtyZXR1cm4gdGhpc1skdF09PXd0P3RoaXNbeXRdLnB1c2gocHQsbHQsVyxM''@;'; put 'put ''KTpWdCh0aGlzLHB0LGx0LFcsTCksbHR9Y2F0Y2goVyl7cmV0dXJuIHRoaXMudGhlbihudWxsLFcpfWZpbmFsbHkoVyl7bGV0IEw9dGhpcy5jb25zdHJ1Y3Rvcj8uW1N5bWJvbC5zcGVjaWVzXTsoIUx8fCJmdW5jdGlvbiIhPXR5cGVvZiBMKSYmKEw9TSk7Y29uc3QgRz1uZXcgTChJdCk7R1tl''@;'; put 'put ''dF09ZXQ7Y29uc3QgbHQ9UC5jdXJyZW50O3JldHVybiB0aGlzWyR0XT09d3Q/dGhpc1t5dF0ucHVzaChsdCxHLFcsVyk6VnQodGhpcyxsdCxHLFcsVyksR319TS5yZXNvbHZlPU0ucmVzb2x2ZSxNLnJlamVjdD1NLnJlamVjdCxNLnJhY2U9TS5yYWNlLE0uYWxsPU0uYWxsO2NvbnN0IE49aFtj''@;'; put 'put ''dF09aC5Qcm9taXNlO2guUHJvbWlzZT1NO2NvbnN0IGh0PUooInRoZW5QYXRjaGVkIik7ZnVuY3Rpb24gbXQoSCl7Y29uc3QgVz1ILnByb3RvdHlwZSxMPVQoVywidGhlbiIpO2lmKEwmJighMT09PUwud3JpdGFibGV8fCFMLmNvbmZpZ3VyYWJsZSkpcmV0dXJuO2NvbnN0IEc9Vy50aGVuO1db''@;'; put 'put ''aXRdPUcsSC5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihsdCxwdCl7cmV0dXJuIG5ldyBNKChndCx4dCk9PntHLmNhbGwodGhpcyxndCx4dCl9KS50aGVuKGx0LHB0KX0sSFtodF09ITB9cmV0dXJuIEkucGF0Y2hUaGVuPW10LE4mJihtdChOKSxYKGgsImZldGNoIixIPT5mdW5jdGlvbiBXdChI''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oVyxMKXtsZXQgRz1ILmFwcGx5KFcsTCk7aWYoRyBpbnN0YW5jZW9mIE0pcmV0dXJuIEc7bGV0IGx0PUcuY29uc3RydWN0b3I7cmV0dXJuIGx0W2h0XXx8bXQobHQpLEd9fShIKSkpLFByb21pc2VbUC5fX3N5bWJvbF9fKCJ1bmNhdWdodFByb21pc2VFcnJvcnMi''@;'; put 'put ''KV09eixNfSksWm9uZS5fX2xvYWRfcGF0Y2goInRvU3RyaW5nIixoPT57Y29uc3QgUD1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsST14KCJPcmlnaW5hbERlbGVnYXRlIiksVD14KCJQcm9taXNlIiksQT14KCJFcnJvciIpLGs9ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dGhpcyl7Y29uc3QgY3Q9dGhpc1tJXTtpZihjdClyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY3Q/UC5jYWxsKGN0KTpPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY3QpO2lmKHRoaXM9PT1Qcm9taXNlKXtjb25zdCBpdD1oW1RdO2lmKGl0KXJldHVybiBQLmNhbGwoaXQpfWlmKHRo''@;'; put 'put ''aXM9PT1FcnJvcil7Y29uc3QgaXQ9aFtBXTtpZihpdClyZXR1cm4gUC5jYWxsKGl0KX19cmV0dXJuIFAuY2FsbCh0aGlzKX07a1tJXT1QLEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1rO2NvbnN0IEo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2UmJnRoaXMgaW5zdGFuY2VvZiBQcm9taXNlPyJbb2JqZWN0IFByb21pc2VdIjpKLmNhbGwodGhpcyl9fSk7bGV0IEV0PSExO2lmKHR5cGVvZiB3aW5kb3c8InUiKXRyeXtjb25zdCBoPU9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDpmdW5jdGlvbigpe0V0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixoLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixoLGgpfWNhdGNoe0V0PSExfWNvbnN0IEZ0PXt1c2VHOiEwfSxqdD17fSxYdD17fSxC''@;'; put 'put ''dD1uZXcgUmVnRXhwKCJeIit5KyIoXFx3KykodHJ1ZXxmYWxzZSkkIiksUXQ9eCgicHJvcGFnYXRpb25TdG9wcGVkIik7ZnVuY3Rpb24gcm4oaCxQKXtjb25zdCBJPShQP1AoaCk6aCkrcCxUPShQP1AoaCk6aCkraSxBPXkrSSxrPXkrVDtqdFtoXT17fSxqdFtoXVtwXT1BLGp0W2hdW2ldPWt9''@;'; put 'put ''ZnVuY3Rpb24gbm4oaCxQLEksVCl7Y29uc3QgQT1UJiZULmFkZHx8cyxrPVQmJlQucm18fG8sSj1UJiZULmxpc3RlbmVyc3x8ImV2ZW50TGlzdGVuZXJzIix6PVQmJlQucm1BbGx8fCJyZW1vdmVBbGxMaXN0ZW5lcnMiLG90PXgoQSksY3Q9Ii4iK0ErIjoiLGl0PSJwcmVwZW5kTGlzdGVuZXIi''@;'; put 'put ''LEF0PSIuIitpdCsiOiIsU3Q9ZnVuY3Rpb24oeXQsZXQsR3Qpe2lmKHl0LmlzUmVtb3ZlZClyZXR1cm47Y29uc3QgRHQ9eXQuY2FsbGJhY2s7bGV0IFV0OyJvYmplY3QiPT10eXBlb2YgRHQmJkR0LmhhbmRsZUV2ZW50JiYoeXQuY2FsbGJhY2s9cnQ9PkR0LmhhbmRsZUV2ZW50KHJ0KSx5dC5v''@;'; put 'put ''cmlnaW5hbERlbGVnYXRlPUR0KTt0cnl7eXQuaW52b2tlKHl0LGV0LFtHdF0pfWNhdGNoKHJ0KXtVdD1ydH1jb25zdCB3dD15dC5vcHRpb25zO3JldHVybiB3dCYmIm9iamVjdCI9PXR5cGVvZiB3dCYmd3Qub25jZSYmZXRba10uY2FsbChldCxHdC50eXBlLHl0Lm9yaWdpbmFsRGVsZWdhdGU/''@;'; put 'put ''eXQub3JpZ2luYWxEZWxlZ2F0ZTp5dC5jYWxsYmFjayx3dCksVXR9O2Z1bmN0aW9uIE90KHl0LGV0LEd0KXtpZighKGV0PWV0fHxoLmV2ZW50KSlyZXR1cm47Y29uc3QgRHQ9eXR8fGV0LnRhcmdldHx8aCxVdD1EdFtqdFtldC50eXBlXVtHdD9pOnBdXTtpZihVdCl7Y29uc3Qgd3Q9W107aWYo''@;'; put 'put ''MT09PVV0Lmxlbmd0aCl7Y29uc3QgcnQ9U3QoVXRbMF0sRHQsZXQpO3J0JiZ3dC5wdXNoKHJ0KX1lbHNle2NvbnN0IHJ0PVV0LnNsaWNlKCk7Zm9yKGxldCBDdD0wO0N0PHJ0Lmxlbmd0aCYmKCFldHx8ITAhPT1ldFtRdF0pO0N0Kyspe2NvbnN0IHE9U3QocnRbQ3RdLER0LGV0KTtxJiZ3dC5w''@;'; put 'put ''dXNoKHEpfX1pZigxPT09d3QubGVuZ3RoKXRocm93IHd0WzBdO2ZvcihsZXQgcnQ9MDtydDx3dC5sZW5ndGg7cnQrKyl7Y29uc3QgQ3Q9d3RbcnRdO1AubmF0aXZlU2NoZWR1bGVNaWNyb1Rhc2soKCk9Pnt0aHJvdyBDdH0pfX19Y29uc3Qga3Q9ZnVuY3Rpb24oeXQpe3JldHVybiBPdCh0aGlz''@;'; put 'put ''LHl0LCExKX0sUnQ9ZnVuY3Rpb24oeXQpe3JldHVybiBPdCh0aGlzLHl0LCEwKX07ZnVuY3Rpb24gSnQoeXQsZXQpe2lmKCF5dClyZXR1cm4hMTtsZXQgR3Q9ITA7ZXQmJnZvaWQgMCE9PWV0LnVzZUcmJihHdD1ldC51c2VHKTtjb25zdCBEdD1ldCYmZXQudmg7bGV0IFV0PSEwO2V0JiZ2b2lk''@;'; put 'put ''IDAhPT1ldC5jaGtEdXAmJihVdD1ldC5jaGtEdXApO2xldCB3dD0hMTtldCYmdm9pZCAwIT09ZXQucnQmJih3dD1ldC5ydCk7bGV0IHJ0PXl0O2Zvcig7cnQmJiFydC5oYXNPd25Qcm9wZXJ0eShBKTspcnQ9dChydCk7aWYoIXJ0JiZ5dFtBXSYmKHJ0PXl0KSwhcnR8fHJ0W290XSlyZXR1cm4h''@;'; put 'put ''MTtjb25zdCBDdD1ldCYmZXQuZXZlbnROYW1lVG9TdHJpbmcscT17fSxQdD1ydFtvdF09cnRbQV0sZHQ9cnRbeChrKV09cnRba10senQ9cnRbeChKKV09cnRbSl0sX3Q9cnRbeCh6KV09cnRbel07bGV0IEh0O2V0JiZldC5wcmVwZW5kJiYoSHQ9cnRbeChldC5wcmVwZW5kKV09cnRbZXQucHJl''@;'; put 'put ''cGVuZF0pO2NvbnN0IE09R3Q/ZnVuY3Rpb24oTCl7aWYoIXEuaXNFeGlzdGluZylyZXR1cm4gUHQuY2FsbChxLnRhcmdldCxxLmV2ZW50TmFtZSxxLmNhcHR1cmU/UnQ6a3QscS5vcHRpb25zKX06ZnVuY3Rpb24oTCl7cmV0dXJuIFB0LmNhbGwocS50YXJnZXQscS5ldmVudE5hbWUsTC5pbnZv''@;'; put 'put ''a2UscS5vcHRpb25zKX0sTj1HdD9mdW5jdGlvbihMKXtpZighTC5pc1JlbW92ZWQpe2NvbnN0IEc9anRbTC5ldmVudE5hbWVdO2xldCBsdDtHJiYobHQ9R1tMLmNhcHR1cmU/aTpwXSk7Y29uc3QgcHQ9bHQmJkwudGFyZ2V0W2x0XTtpZihwdClmb3IobGV0IHV0PTA7dXQ8cHQubGVuZ3RoO3V0''@;'; put 'put ''KyspaWYocHRbdXRdPT09TCl7cHQuc3BsaWNlKHV0LDEpLEwuaXNSZW1vdmVkPSEwLDA9PT1wdC5sZW5ndGgmJihMLmFsbFJlbW92ZWQ9ITAsTC50YXJnZXRbbHRdPW51bGwpO2JyZWFrfX1pZihMLmFsbFJlbW92ZWQpcmV0dXJuIGR0LmNhbGwoTC50YXJnZXQsTC5ldmVudE5hbWUsTC5jYXB0''@;'; put 'put ''dXJlP1J0Omt0LEwub3B0aW9ucyl9OmZ1bmN0aW9uKEwpe3JldHVybiBkdC5jYWxsKEwudGFyZ2V0LEwuZXZlbnROYW1lLEwuaW52b2tlLEwub3B0aW9ucyl9LG10PWV0JiZldC5kaWZmP2V0LmRpZmY6ZnVuY3Rpb24oTCxHKXtjb25zdCBsdD10eXBlb2YgRztyZXR1cm4iZnVuY3Rpb24iPT09''@;'; put 'put ''bHQmJkwuY2FsbGJhY2s9PT1HfHwib2JqZWN0Ij09PWx0JiZMLm9yaWdpbmFsRGVsZWdhdGU9PT1HfSxXdD1ab25lW3goIlVOUEFUQ0hFRF9FVkVOVFMiKV0sSD1oW3goIlBBU1NJVkVfRVZFTlRTIildLFc9ZnVuY3Rpb24oTCxHLGx0LHB0LHV0PSExLGd0PSExKXtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''KXtjb25zdCB4dD10aGlzfHxoO2xldCBUdD1hcmd1bWVudHNbMF07ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoVHQ9ZXQudHJhbnNmZXJFdmVudE5hbWUoVHQpKTtsZXQgYnQ9YXJndW1lbnRzWzFdO2lmKCFidClyZXR1cm4gTC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoUyYmInVuY2F1''@;'; put 'put ''Z2h0RXhjZXB0aW9uIj09PVR0KXJldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtsZXQgTnQ9ITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGJ0KXtpZighYnQuaGFuZGxlRXZlbnQpcmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpO050PSEwfWlmKER0JiYhRHQoTCxidCx4dCxhcmd1''@;'; put 'put ''bWVudHMpKXJldHVybjtjb25zdCBzbj1FdCYmISFIJiYtMSE9PUguaW5kZXhPZihUdCksdG49ZnVuY3Rpb24gTHQoTCxHKXtyZXR1cm4hRXQmJiJvYmplY3QiPT10eXBlb2YgTCYmTD8hIUwuY2FwdHVyZTpFdCYmRz8iYm9vbGVhbiI9PXR5cGVvZiBMP3tjYXB0dXJlOkwscGFzc2l2ZTohMH06''@;'; put 'put ''TD8ib2JqZWN0Ij09dHlwZW9mIEwmJiExIT09TC5wYXNzaXZlP3suLi5MLHBhc3NpdmU6ITB9Okw6e3Bhc3NpdmU6ITB9Okx9KGFyZ3VtZW50c1syXSxzbik7aWYoV3QpZm9yKGxldCBjbj0wO2NuPFd0Lmxlbmd0aDtjbisrKWlmKFR0PT09V3RbY25dKXJldHVybiBzbj9MLmNhbGwoeHQsVHQs''@;'; put 'put ''YnQsdG4pOkwuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnN0IHBuPSEhdG4mJigiYm9vbGVhbiI9PXR5cGVvZiB0bnx8dG4uY2FwdHVyZSksbW49ISghdG58fCJvYmplY3QiIT10eXBlb2YgdG4pJiZ0bi5vbmNlLE1uPVpvbmUuY3VycmVudDtsZXQgeW49anRbVHRdO3lufHwocm4oVHQsQ3Qp''@;'; put 'put ''LHluPWp0W1R0XSk7Y29uc3QgZ249eW5bcG4/aTpwXTtsZXQgdm4saG49eHRbZ25dLEVuPSExO2lmKGhuKXtpZihFbj0hMCxVdClmb3IobGV0IGNuPTA7Y248aG4ubGVuZ3RoO2NuKyspaWYobXQoaG5bY25dLGJ0KSlyZXR1cm59ZWxzZSBobj14dFtnbl09W107Y29uc3QgeG49eHQuY29uc3Ry''@;'; put 'put ''dWN0b3IubmFtZSxUbj1YdFt4bl07VG4mJih2bj1UbltUdF0pLHZufHwodm49eG4rRysoQ3Q/Q3QoVHQpOlR0KSkscS5vcHRpb25zPXRuLG1uJiYocS5vcHRpb25zLm9uY2U9ITEpLHEudGFyZ2V0PXh0LHEuY2FwdHVyZT1wbixxLmV2ZW50TmFtZT1UdCxxLmlzRXhpc3Rpbmc9RW47Y29uc3Qg''@;'; put 'put ''ZG49R3Q/RnQ6dm9pZCAwO2RuJiYoZG4udGFza0RhdGE9cSk7Y29uc3QgdW49TW4uc2NoZWR1bGVFdmVudFRhc2sodm4sYnQsZG4sbHQscHQpO3JldHVybiBxLnRhcmdldD1udWxsLGRuJiYoZG4udGFza0RhdGE9bnVsbCksbW4mJih0bi5vbmNlPSEwKSwhRXQmJiJib29sZWFuIj09dHlwZW9m''@;'; put 'put ''IHVuLm9wdGlvbnN8fCh1bi5vcHRpb25zPXRuKSx1bi50YXJnZXQ9eHQsdW4uY2FwdHVyZT1wbix1bi5ldmVudE5hbWU9VHQsTnQmJih1bi5vcmlnaW5hbERlbGVnYXRlPWJ0KSxndD9obi51bnNoaWZ0KHVuKTpobi5wdXNoKHVuKSx1dD94dDp2b2lkIDB9fTtyZXR1cm4gcnRbQV09VyhQdCxj''@;'; put 'put ''dCxNLE4sd3QpLEh0JiYocnRbaXRdPVcoSHQsQXQsZnVuY3Rpb24oTCl7cmV0dXJuIEh0LmNhbGwocS50YXJnZXQscS5ldmVudE5hbWUsTC5pbnZva2UscS5vcHRpb25zKX0sTix3dCwhMCkpLHJ0W2tdPWZ1bmN0aW9uKCl7Y29uc3QgTD10aGlzfHxoO2xldCBHPWFyZ3VtZW50c1swXTtldCYm''@;'; put 'put ''ZXQudHJhbnNmZXJFdmVudE5hbWUmJihHPWV0LnRyYW5zZmVyRXZlbnROYW1lKEcpKTtjb25zdCBsdD1hcmd1bWVudHNbMl0scHQ9ISFsdCYmKCJib29sZWFuIj09dHlwZW9mIGx0fHxsdC5jYXB0dXJlKSx1dD1hcmd1bWVudHNbMV07aWYoIXV0KXJldHVybiBkdC5hcHBseSh0aGlzLGFyZ3Vt''@;'; put 'put ''ZW50cyk7aWYoRHQmJiFEdChkdCx1dCxMLGFyZ3VtZW50cykpcmV0dXJuO2NvbnN0IGd0PWp0W0ddO2xldCB4dDtndCYmKHh0PWd0W3B0P2k6cF0pO2NvbnN0IFR0PXh0JiZMW3h0XTtpZihUdClmb3IobGV0IGJ0PTA7YnQ8VHQubGVuZ3RoO2J0Kyspe2NvbnN0IE50PVR0W2J0XTtpZihtdChO''@;'; put 'put ''dCx1dCkpcmV0dXJuIFR0LnNwbGljZShidCwxKSxOdC5pc1JlbW92ZWQ9ITAsMD09PVR0Lmxlbmd0aCYmKE50LmFsbFJlbW92ZWQ9ITAsTFt4dF09bnVsbCwic3RyaW5nIj09dHlwZW9mIEcpJiYoTFt5KyJPTl9QUk9QRVJUWSIrR109bnVsbCksTnQuem9uZS5jYW5jZWxUYXNrKE50KSx3dD9M''@;'; put 'put ''OnZvaWQgMH1yZXR1cm4gZHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxydFtKXT1mdW5jdGlvbigpe2NvbnN0IEw9dGhpc3x8aDtsZXQgRz1hcmd1bWVudHNbMF07ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ldC50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgbHQ9W10scHQ9YW4o''@;'; put 'put ''TCxDdD9DdChHKTpHKTtmb3IobGV0IHV0PTA7dXQ8cHQubGVuZ3RoO3V0Kyspe2NvbnN0IGd0PXB0W3V0XTtsdC5wdXNoKGd0Lm9yaWdpbmFsRGVsZWdhdGU/Z3Qub3JpZ2luYWxEZWxlZ2F0ZTpndC5jYWxsYmFjayl9cmV0dXJuIGx0fSxydFt6XT1mdW5jdGlvbigpe2NvbnN0IEw9dGhpc3x8''@;'; put 'put ''aDtsZXQgRz1hcmd1bWVudHNbMF07aWYoRyl7ZXQmJmV0LnRyYW5zZmVyRXZlbnROYW1lJiYoRz1ldC50cmFuc2ZlckV2ZW50TmFtZShHKSk7Y29uc3QgbHQ9anRbR107aWYobHQpe2NvbnN0IGd0PUxbbHRbcF1dLHh0PUxbbHRbaV1dO2lmKGd0KXtjb25zdCBUdD1ndC5zbGljZSgpO2Zvcihs''@;'; put 'put ''ZXQgYnQ9MDtidDxUdC5sZW5ndGg7YnQrKyl7Y29uc3QgTnQ9VHRbYnRdO3RoaXNba10uY2FsbCh0aGlzLEcsTnQub3JpZ2luYWxEZWxlZ2F0ZT9OdC5vcmlnaW5hbERlbGVnYXRlOk50LmNhbGxiYWNrLE50Lm9wdGlvbnMpfX1pZih4dCl7Y29uc3QgVHQ9eHQuc2xpY2UoKTtmb3IobGV0IGJ0''@;'; put 'put ''PTA7YnQ8VHQubGVuZ3RoO2J0Kyspe2NvbnN0IE50PVR0W2J0XTt0aGlzW2tdLmNhbGwodGhpcyxHLE50Lm9yaWdpbmFsRGVsZWdhdGU/TnQub3JpZ2luYWxEZWxlZ2F0ZTpOdC5jYWxsYmFjayxOdC5vcHRpb25zKX19fX1lbHNle2NvbnN0IGx0PU9iamVjdC5rZXlzKEwpO2ZvcihsZXQgcHQ9''@;'; put 'put ''MDtwdDxsdC5sZW5ndGg7cHQrKyl7Y29uc3QgZ3Q9QnQuZXhlYyhsdFtwdF0pO2xldCB4dD1ndCYmZ3RbMV07eHQmJiJyZW1vdmVMaXN0ZW5lciIhPT14dCYmdGhpc1t6XS5jYWxsKHRoaXMseHQpfXRoaXNbel0uY2FsbCh0aGlzLCJyZW1vdmVMaXN0ZW5lciIpfWlmKHd0KXJldHVybiB0aGlz''@;'; put 'put ''fSxRKHJ0W0FdLFB0KSxRKHJ0W2tdLGR0KSxfdCYmUShydFt6XSxfdCksenQmJlEocnRbSl0senQpLCEwfWxldCAkdD1bXTtmb3IobGV0IHl0PTA7eXQ8SS5sZW5ndGg7eXQrKykkdFt5dF09SnQoSVt5dF0sVCk7cmV0dXJuICR0fWZ1bmN0aW9uIGFuKGgsUCl7aWYoIVApe2NvbnN0IGs9W107''@;'; put 'put ''Zm9yKGxldCBKIGluIGgpe2NvbnN0IHo9QnQuZXhlYyhKKTtsZXQgb3Q9eiYmelsxXTtpZihvdCYmKCFQfHxvdD09PVApKXtjb25zdCBjdD1oW0pdO2lmKGN0KWZvcihsZXQgaXQ9MDtpdDxjdC5sZW5ndGg7aXQrKylrLnB1c2goY3RbaXRdKX19cmV0dXJuIGt9bGV0IEk9anRbUF07SXx8KHJu''@;'; put 'put ''KFApLEk9anRbUF0pO2NvbnN0IFQ9aFtJW3BdXSxBPWhbSVtpXV07cmV0dXJuIFQ/QT9ULmNvbmNhdChBKTpULnNsaWNlKCk6QT9BLnNsaWNlKCk6W119ZnVuY3Rpb24gZm4oaCxQKXtjb25zdCBJPWguRXZlbnQ7SSYmSS5wcm90b3R5cGUmJlAucGF0Y2hNZXRob2QoSS5wcm90b3R5cGUsInN0''@;'; put 'put ''b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsVD0+ZnVuY3Rpb24oQSxrKXtBW1F0XT0hMCxUJiZULmFwcGx5KEEsayl9KX1mdW5jdGlvbiBvbihoLFAsSSxULEEpe2NvbnN0IGs9Wm9uZS5fX3N5bWJvbF9fKFQpO2lmKFBba10pcmV0dXJuO2NvbnN0IEo9UFtrXT1QW1RdO1BbVF09ZnVuY3Rpb24o''@;'; put 'put ''eixvdCxjdCl7cmV0dXJuIG90JiZvdC5wcm90b3R5cGUmJkEuZm9yRWFjaChmdW5jdGlvbihpdCl7Y29uc3QgQXQ9YCR7SX0uJHtUfTo6YCtpdCxTdD1vdC5wcm90b3R5cGU7dHJ5e2lmKFN0Lmhhc093blByb3BlcnR5KGl0KSl7Y29uc3QgT3Q9aC5PYmplY3RHZXRPd25Qcm9wZXJ0eURlc2Ny''@;'; put 'put ''aXB0b3IoU3QsaXQpO090JiZPdC52YWx1ZT8oT3QudmFsdWU9aC53cmFwV2l0aEN1cnJlbnRab25lKE90LnZhbHVlLEF0KSxoLl9yZWRlZmluZVByb3BlcnR5KG90LnByb3RvdHlwZSxpdCxPdCkpOlN0W2l0XSYmKFN0W2l0XT1oLndyYXBXaXRoQ3VycmVudFpvbmUoU3RbaXRdLEF0KSl9ZWxz''@;'; put 'put ''ZSBTdFtpdF0mJihTdFtpdF09aC53cmFwV2l0aEN1cnJlbnRab25lKFN0W2l0XSxBdCkpfWNhdGNoe319KSxKLmNhbGwoUCx6LG90LGN0KX0saC5hdHRhY2hPcmlnaW5Ub1BhdGNoZWQoUFtUXSxKKX1mdW5jdGlvbiBZdChoLFAsSSl7aWYoIUl8fDA9PT1JLmxlbmd0aClyZXR1cm4gUDtjb25z''@;'; put 'put ''dCBUPUkuZmlsdGVyKGs9PmsudGFyZ2V0PT09aCk7aWYoIVR8fDA9PT1ULmxlbmd0aClyZXR1cm4gUDtjb25zdCBBPVRbMF0uaWdub3JlUHJvcGVydGllcztyZXR1cm4gUC5maWx0ZXIoaz0+LTE9PT1BLmluZGV4T2YoaykpfWZ1bmN0aW9uIFp0KGgsUCxJLFQpe2gmJl8oaCxZdChoLFAsSSks''@;'; put 'put ''VCl9ZnVuY3Rpb24gZW4oaCl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGgpLmZpbHRlcihQPT5QLnN0YXJ0c1dpdGgoIm9uIikmJlAubGVuZ3RoPjIpLm1hcChQPT5QLnN1YnN0cmluZygyKSl9Wm9uZS5fX2xvYWRfcGF0Y2goInV0aWwiLChoLFAsSSk9Pntjb25zdCBUPWVu''@;'; put 'put ''KGgpO0kucGF0Y2hPblByb3BlcnRpZXM9XyxJLnBhdGNoTWV0aG9kPVgsSS5iaW5kQXJndW1lbnRzPUYsSS5wYXRjaE1hY3JvVGFzaz1WO2NvbnN0IEE9UC5fX3N5bWJvbF9fKCJCTEFDS19MSVNURURfRVZFTlRTIiksaz1QLl9fc3ltYm9sX18oIlVOUEFUQ0hFRF9FVkVOVFMiKTtoW2tdJiYo''@;'; put 'put ''aFtBXT1oW2tdKSxoW0FdJiYoUFtBXT1QW2tdPWhbQV0pLEkucGF0Y2hFdmVudFByb3RvdHlwZT1mbixJLnBhdGNoRXZlbnRUYXJnZXQ9bm4sSS5pc0lFT3JFZGdlPU10LEkuT2JqZWN0RGVmaW5lUHJvcGVydHk9bCxJLk9iamVjdEdldE93blByb3BlcnR5RGVzY3JpcHRvcj1jLEkuT2JqZWN0''@;'; put 'put ''Q3JlYXRlPW4sSS5BcnJheVNsaWNlPWUsSS5wYXRjaENsYXNzPXN0LEkud3JhcFdpdGhDdXJyZW50Wm9uZT12LEkuZmlsdGVyUHJvcGVydGllcz1ZdCxJLmF0dGFjaE9yaWdpblRvUGF0Y2hlZD1RLEkuX3JlZGVmaW5lUHJvcGVydHk9T2JqZWN0LmRlZmluZVByb3BlcnR5LEkucGF0Y2hDYWxs''@;'; put 'put ''YmFja3M9b24sSS5nZXRHbG9iYWxPYmplY3RzPSgpPT4oe2dsb2JhbFNvdXJjZXM6WHQsem9uZVN5bWJvbEV2ZW50TmFtZXM6anQsZXZlbnROYW1lczpULGlzQnJvd3NlcjpDLGlzTWl4OkssaXNOb2RlOlMsVFJVRV9TVFI6aSxGQUxTRV9TVFI6cCxaT05FX1NZTUJPTF9QUkVGSVg6eSxBRERf''@;'; put 'put ''RVZFTlRfTElTVEVORVJfU1RSOnMsUkVNT1ZFX0VWRU5UX0xJU1RFTkVSX1NUUjpvfSl9KTtjb25zdCByPXgoInpvbmVUYXNrIik7ZnVuY3Rpb24gYShoLFAsSSxUKXtsZXQgQT1udWxsLGs9bnVsbDtJKz1UO2NvbnN0IEo9e307ZnVuY3Rpb24geihjdCl7Y29uc3QgaXQ9Y3QuZGF0YTtyZXR1''@;'; put 'put ''cm4gaXQuYXJnc1swXT1mdW5jdGlvbigpe3JldHVybiBjdC5pbnZva2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxpdC5oYW5kbGVJZD1BLmFwcGx5KGgsaXQuYXJncyksY3R9ZnVuY3Rpb24gb3QoY3Qpe3JldHVybiBrLmNhbGwoaCxjdC5kYXRhLmhhbmRsZUlkKX1BPVgoaCxQKz1ULGN0PT5m''@;'; put 'put ''dW5jdGlvbihpdCxBdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEF0WzBdKXtjb25zdCBTdD17aXNQZXJpb2RpYzoiSW50ZXJ2YWwiPT09VCxkZWxheToiVGltZW91dCI9PT1UfHwiSW50ZXJ2YWwiPT09VD9BdFsxXXx8MDp2b2lkIDAsYXJnczpBdH0sT3Q9QXRbMF07QXRbMF09ZnVuY3Rpb24o''@;'; put 'put ''KXt0cnl7cmV0dXJuIE90LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1maW5hbGx5e1N0LmlzUGVyaW9kaWN8fCgibnVtYmVyIj09dHlwZW9mIFN0LmhhbmRsZUlkP2RlbGV0ZSBKW1N0LmhhbmRsZUlkXTpTdC5oYW5kbGVJZCYmKFN0LmhhbmRsZUlkW3JdPW51bGwpKX19O2NvbnN0IGt0PWcoUCxB''@;'; put 'put ''dFswXSxTdCx6LG90KTtpZigha3QpcmV0dXJuIGt0O2NvbnN0IFJ0PWt0LmRhdGEuaGFuZGxlSWQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBSdD9KW1J0XT1rdDpSdCYmKFJ0W3JdPWt0KSxSdCYmUnQucmVmJiZSdC51bnJlZiYmImZ1bmN0aW9uIj09dHlwZW9mIFJ0LnJlZiYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIFJ0LnVucmVmJiYoa3QucmVmPVJ0LnJlZi5iaW5kKFJ0KSxrdC51bnJlZj1SdC51bnJlZi5iaW5kKFJ0KSksIm51bWJlciI9PXR5cGVvZiBSdHx8UnQ/UnQ6a3R9cmV0dXJuIGN0LmFwcGx5KGgsQXQpfSksaz1YKGgsSSxjdD0+ZnVuY3Rpb24oaXQsQXQpe2NvbnN0IFN0PUF0''@;'; put 'put ''WzBdO2xldCBPdDsibnVtYmVyIj09dHlwZW9mIFN0P090PUpbU3RdOihPdD1TdCYmU3Rbcl0sT3R8fChPdD1TdCkpLE90JiYic3RyaW5nIj09dHlwZW9mIE90LnR5cGU/Im5vdFNjaGVkdWxlZCIhPT1PdC5zdGF0ZSYmKE90LmNhbmNlbEZuJiZPdC5kYXRhLmlzUGVyaW9kaWN8fDA9PT1PdC5y''@;'; put 'put ''dW5Db3VudCkmJigibnVtYmVyIj09dHlwZW9mIFN0P2RlbGV0ZSBKW1N0XTpTdCYmKFN0W3JdPW51bGwpLE90LnpvbmUuY2FuY2VsVGFzayhPdCkpOmN0LmFwcGx5KGgsQXQpfSl9Wm9uZS5fX2xvYWRfcGF0Y2goImxlZ2FjeSIsaD0+e2NvbnN0IFA9aFtab25lLl9fc3ltYm9sX18oImxlZ2Fj''@;'; put 'put ''eVBhdGNoIildO1AmJlAoKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJ0aW1lcnMiLGg9Pntjb25zdCBQPSJzZXQiLEk9ImNsZWFyIjthKGgsUCxJLCJUaW1lb3V0IiksYShoLFAsSSwiSW50ZXJ2YWwiKSxhKGgsUCxJLCJJbW1lZGlhdGUiKX0pLFpvbmUuX19sb2FkX3BhdGNoKCJyZXF1ZXN0QW5p''@;'; put 'put ''bWF0aW9uRnJhbWUiLGg9PnthKGgsInJlcXVlc3QiLCJjYW5jZWwiLCJBbmltYXRpb25GcmFtZSIpLGEoaCwibW96UmVxdWVzdCIsIm1vekNhbmNlbCIsIkFuaW1hdGlvbkZyYW1lIiksYShoLCJ3ZWJraXRSZXF1ZXN0Iiwid2Via2l0Q2FuY2VsIiwiQW5pbWF0aW9uRnJhbWUiKX0pLFpvbmUu''@;'; put 'put ''X19sb2FkX3BhdGNoKCJibG9ja2luZyIsKGgsUCk9Pntjb25zdCBJPVsiYWxlcnQiLCJwcm9tcHQiLCJjb25maXJtIl07Zm9yKGxldCBUPTA7VDxJLmxlbmd0aDtUKyspWChoLElbVF0sKGssSix6KT0+ZnVuY3Rpb24ob3QsY3Qpe3JldHVybiBQLmN1cnJlbnQucnVuKGssaCxjdCx6KX0pfSks''@;'; put 'put ''Wm9uZS5fX2xvYWRfcGF0Y2goIkV2ZW50VGFyZ2V0IiwoaCxQLEkpPT57KGZ1bmN0aW9uICQoaCxQKXtQLnBhdGNoRXZlbnRQcm90b3R5cGUoaCxQKX0pKGgsSSksZnVuY3Rpb24gRChoLFApe2lmKFpvbmVbUC5zeW1ib2woInBhdGNoRXZlbnRUYXJnZXQiKV0pcmV0dXJuO2NvbnN0e2V2ZW50''@;'; put 'put ''TmFtZXM6SSx6b25lU3ltYm9sRXZlbnROYW1lczpULFRSVUVfU1RSOkEsRkFMU0VfU1RSOmssWk9ORV9TWU1CT0xfUFJFRklYOkp9PVAuZ2V0R2xvYmFsT2JqZWN0cygpO2ZvcihsZXQgb3Q9MDtvdDxJLmxlbmd0aDtvdCsrKXtjb25zdCBjdD1JW290XSxTdD1KKyhjdCtrKSxPdD1KKyhjdCtB''@;'; put 'put ''KTtUW2N0XT17fSxUW2N0XVtrXT1TdCxUW2N0XVtBXT1PdH1jb25zdCB6PWguRXZlbnRUYXJnZXQ7eiYmei5wcm90b3R5cGUmJlAucGF0Y2hFdmVudFRhcmdldChoLFAsW3omJnoucHJvdG90eXBlXSl9KGgsSSk7Y29uc3QgVD1oLlhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ7VCYmVC5wcm90''@;'; put 'put ''b3R5cGUmJkkucGF0Y2hFdmVudFRhcmdldChoLEksW1QucHJvdG90eXBlXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiTXV0YXRpb25PYnNlcnZlciIsKGgsUCxJKT0+e3N0KCJNdXRhdGlvbk9ic2VydmVyIiksc3QoIldlYktpdE11dGF0aW9uT2JzZXJ2ZXIiKX0pLFpvbmUuX19sb2FkX3BhdGNo''@;'; put 'put ''KCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsKGgsUCxJKT0+e3N0KCJJbnRlcnNlY3Rpb25PYnNlcnZlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIkZpbGVSZWFkZXIiLChoLFAsSSk9PntzdCgiRmlsZVJlYWRlciIpfSksWm9uZS5fX2xvYWRfcGF0Y2goIm9uX3Byb3BlcnR5IiwoaCxQLEkpPT57''@;'; put 'put ''IWZ1bmN0aW9uIGxuKGgsUCl7aWYoUyYmIUt8fFpvbmVbaC5zeW1ib2woInBhdGNoRXZlbnRzIildKXJldHVybjtjb25zdCBJPVAuX19ab25lX2lnbm9yZV9vbl9wcm9wZXJ0aWVzO2xldCBUPVtdO2lmKEMpe2NvbnN0IEE9d2luZG93O1Q9VC5jb25jYXQoWyJEb2N1bWVudCIsIlNWR0VsZW1l''@;'; put 'put ''bnQiLCJFbGVtZW50IiwiSFRNTEVsZW1lbnQiLCJIVE1MQm9keUVsZW1lbnQiLCJIVE1MTWVkaWFFbGVtZW50IiwiSFRNTEZyYW1lU2V0RWxlbWVudCIsIkhUTUxGcmFtZUVsZW1lbnQiLCJIVE1MSUZyYW1lRWxlbWVudCIsIkhUTUxNYXJxdWVlRWxlbWVudCIsIldvcmtlciJdKTtjb25zdCBr''@;'; put 'put ''PWZ1bmN0aW9uIHZ0KCl7dHJ5e2NvbnN0IGg9ai5uYXZpZ2F0b3IudXNlckFnZW50O2lmKC0xIT09aC5pbmRleE9mKCJNU0lFICIpfHwtMSE9PWguaW5kZXhPZigiVHJpZGVudC8iKSlyZXR1cm4hMH1jYXRjaHt9cmV0dXJuITF9KCk/W3t0YXJnZXQ6QSxpZ25vcmVQcm9wZXJ0aWVzOlsiZXJy''@;'; put 'put ''b3IiXX1dOltdO1p0KEEsZW4oQSksSSYmSS5jb25jYXQoayksdChBKSl9VD1ULmNvbmNhdChbIlhNTEh0dHBSZXF1ZXN0IiwiWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldCIsIklEQkluZGV4IiwiSURCUmVxdWVzdCIsIklEQk9wZW5EQlJlcXVlc3QiLCJJREJEYXRhYmFzZSIsIklEQlRyYW5z''@;'; put 'put ''YWN0aW9uIiwiSURCQ3Vyc29yIiwiV2ViU29ja2V0Il0pO2ZvcihsZXQgQT0wO0E8VC5sZW5ndGg7QSsrKXtjb25zdCBrPVBbVFtBXV07ayYmay5wcm90b3R5cGUmJlp0KGsucHJvdG90eXBlLGVuKGsucHJvdG90eXBlKSxJKX19KEksaCl9KSxab25lLl9fbG9hZF9wYXRjaCgiY3VzdG9tRWxl''@;'; put 'put ''bWVudHMiLChoLFAsSSk9PnshZnVuY3Rpb24gbShoLFApe2NvbnN0e2lzQnJvd3NlcjpJLGlzTWl4OlR9PVAuZ2V0R2xvYmFsT2JqZWN0cygpOyhJfHxUKSYmaC5jdXN0b21FbGVtZW50cyYmImN1c3RvbUVsZW1lbnRzImluIGgmJlAucGF0Y2hDYWxsYmFja3MoUCxoLmN1c3RvbUVsZW1lbnRz''@;'; put 'put ''LCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsWyJjb25uZWN0ZWRDYWxsYmFjayIsImRpc2Nvbm5lY3RlZENhbGxiYWNrIiwiYWRvcHRlZENhbGxiYWNrIiwiYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrIl0pfShoLEkpfSksWm9uZS5fX2xvYWRfcGF0Y2goIlhIUiIsKGgsUCk9PnshZnVuY3Rp''@;'; put 'put ''b24gb3QoY3Qpe2NvbnN0IGl0PWN0LlhNTEh0dHBSZXF1ZXN0O2lmKCFpdClyZXR1cm47Y29uc3QgQXQ9aXQucHJvdG90eXBlO2xldCBPdD1BdFt1XSxrdD1BdFtmXTtpZighT3Qpe2NvbnN0IHE9Y3QuWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDtpZihxKXtjb25zdCBQdD1xLnByb3RvdHlw''@;'; put 'put ''ZTtPdD1QdFt1XSxrdD1QdFtmXX19Y29uc3QgUnQ9InJlYWR5c3RhdGVjaGFuZ2UiLEp0PSJzY2hlZHVsZWQiO2Z1bmN0aW9uICR0KHEpe2NvbnN0IFB0PXEuZGF0YSxkdD1QdC50YXJnZXQ7ZHRba109ITEsZHRbel09ITE7Y29uc3QgenQ9ZHRbQV07T3R8fChPdD1kdFt1XSxrdD1kdFtmXSks''@;'; put 'put ''enQmJmt0LmNhbGwoZHQsUnQsenQpO2NvbnN0IF90PWR0W0FdPSgpPT57aWYoZHQucmVhZHlTdGF0ZT09PWR0LkRPTkUpaWYoIVB0LmFib3J0ZWQmJmR0W2tdJiZxLnN0YXRlPT09SnQpe2NvbnN0IEx0PWR0W1AuX19zeW1ib2xfXygibG9hZGZhbHNlIildO2lmKDAhPT1kdC5zdGF0dXMmJkx0''@;'; put 'put ''JiZMdC5sZW5ndGg+MCl7Y29uc3QgcXQ9cS5pbnZva2U7cS5pbnZva2U9ZnVuY3Rpb24oKXtjb25zdCBWdD1kdFtQLl9fc3ltYm9sX18oImxvYWRmYWxzZSIpXTtmb3IobGV0IEt0PTA7S3Q8VnQubGVuZ3RoO0t0KyspVnRbS3RdPT09cSYmVnQuc3BsaWNlKEt0LDEpOyFQdC5hYm9ydGVkJiZx''@;'; put 'put ''LnN0YXRlPT09SnQmJnF0LmNhbGwocSl9LEx0LnB1c2gocSl9ZWxzZSBxLmludm9rZSgpfWVsc2UhUHQuYWJvcnRlZCYmITE9PT1kdFtrXSYmKGR0W3pdPSEwKX07cmV0dXJuIE90LmNhbGwoZHQsUnQsX3QpLGR0W0ldfHwoZHRbSV09cSkscnQuYXBwbHkoZHQsUHQuYXJncyksZHRba109ITAs''@;'; put 'put ''cX1mdW5jdGlvbiB5dCgpe31mdW5jdGlvbiBldChxKXtjb25zdCBQdD1xLmRhdGE7cmV0dXJuIFB0LmFib3J0ZWQ9ITAsQ3QuYXBwbHkoUHQudGFyZ2V0LFB0LmFyZ3MpfWNvbnN0IEd0PVgoQXQsIm9wZW4iLCgpPT5mdW5jdGlvbihxLFB0KXtyZXR1cm4gcVtUXT0wPT1QdFsyXSxxW0pdPVB0''@;'; put 'put ''WzFdLEd0LmFwcGx5KHEsUHQpfSksVXQ9eCgiZmV0Y2hUYXNrQWJvcnRpbmciKSx3dD14KCJmZXRjaFRhc2tTY2hlZHVsaW5nIikscnQ9WChBdCwic2VuZCIsKCk9PmZ1bmN0aW9uKHEsUHQpe2lmKCEwPT09UC5jdXJyZW50W3d0XXx8cVtUXSlyZXR1cm4gcnQuYXBwbHkocSxQdCk7e2NvbnN0''@;'; put 'put ''IGR0PXt0YXJnZXQ6cSx1cmw6cVtKXSxpc1BlcmlvZGljOiExLGFyZ3M6UHQsYWJvcnRlZDohMX0senQ9ZygiWE1MSHR0cFJlcXVlc3Quc2VuZCIseXQsZHQsJHQsZXQpO3EmJiEwPT09cVt6XSYmIWR0LmFib3J0ZWQmJnp0LnN0YXRlPT09SnQmJnp0Lmludm9rZSgpfX0pLEN0PVgoQXQsImFi''@;'; put 'put ''b3J0IiwoKT0+ZnVuY3Rpb24ocSxQdCl7Y29uc3QgZHQ9ZnVuY3Rpb24gU3QocSl7cmV0dXJuIHFbSV19KHEpO2lmKGR0JiYic3RyaW5nIj09dHlwZW9mIGR0LnR5cGUpe2lmKG51bGw9PWR0LmNhbmNlbEZufHxkdC5kYXRhJiZkdC5kYXRhLmFib3J0ZWQpcmV0dXJuO2R0LnpvbmUuY2FuY2Vs''@;'; put 'put ''VGFzayhkdCl9ZWxzZSBpZighMD09PVAuY3VycmVudFtVdF0pcmV0dXJuIEN0LmFwcGx5KHEsUHQpfSl9KGgpO2NvbnN0IEk9eCgieGhyVGFzayIpLFQ9eCgieGhyU3luYyIpLEE9eCgieGhyTGlzdGVuZXIiKSxrPXgoInhoclNjaGVkdWxlZCIpLEo9eCgieGhyVVJMIiksej14KCJ4aHJFcnJv''@;'; put 'put ''ckJlZm9yZVNjaGVkdWxlZCIpfSksWm9uZS5fX2xvYWRfcGF0Y2goImdlb2xvY2F0aW9uIixoPT57aC5uYXZpZ2F0b3ImJmgubmF2aWdhdG9yLmdlb2xvY2F0aW9uJiZmdW5jdGlvbiBCKGgsUCl7Y29uc3QgST1oLmNvbnN0cnVjdG9yLm5hbWU7Zm9yKGxldCBUPTA7VDxQLmxlbmd0aDtUKysp''@;'; put 'put ''e2NvbnN0IEE9UFtUXSxrPWhbQV07aWYoayl7aWYoIWIoYyhoLEEpKSljb250aW51ZTtoW0FdPSh6PT57Y29uc3Qgb3Q9ZnVuY3Rpb24oKXtyZXR1cm4gei5hcHBseSh0aGlzLEYoYXJndW1lbnRzLEkrIi4iK0EpKX07cmV0dXJuIFEob3Qseiksb3R9KShrKX19fShoLm5hdmlnYXRvci5nZW9s''@;'; put 'put ''b2NhdGlvbixbImdldEN1cnJlbnRQb3NpdGlvbiIsIndhdGNoUG9zaXRpb24iXSl9KSxab25lLl9fbG9hZF9wYXRjaCgiUHJvbWlzZVJlamVjdGlvbkV2ZW50IiwoaCxQKT0+e2Z1bmN0aW9uIEkoVCl7cmV0dXJuIGZ1bmN0aW9uKEEpe2FuKGgsVCkuZm9yRWFjaChKPT57Y29uc3Qgej1oLlBy''@;'; put 'put ''b21pc2VSZWplY3Rpb25FdmVudDtpZih6KXtjb25zdCBvdD1uZXcgeihULHtwcm9taXNlOkEucHJvbWlzZSxyZWFzb246QS5yZWplY3Rpb259KTtKLmludm9rZShvdCl9fSl9fWguUHJvbWlzZVJlamVjdGlvbkV2ZW50JiYoUFt4KCJ1bmhhbmRsZWRQcm9taXNlUmVqZWN0aW9uSGFuZGxlciIp''@;'; put 'put ''XT1JKCJ1bmhhbmRsZWRyZWplY3Rpb24iKSxQW3goInJlamVjdGlvbkhhbmRsZWRIYW5kbGVyIildPUkoInJlamVjdGlvbmhhbmRsZWQiKSl9KSxab25lLl9fbG9hZF9wYXRjaCgicXVldWVNaWNyb3Rhc2siLChoLFAsSSk9PnshZnVuY3Rpb24gZChoLFApe1AucGF0Y2hNZXRob2QoaCwicXVl''@;'; put 'put ''dWVNaWNyb3Rhc2siLEk9PmZ1bmN0aW9uKFQsQSl7Wm9uZS5jdXJyZW50LnNjaGVkdWxlTWljcm9UYXNrKCJxdWV1ZU1pY3JvdGFzayIsQVswXSl9KX0oaCxJKX0pfSwzMDc1ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO2NvbnN0IG49dCgxMjAzMCk7SW50bC5EYXRlVGltZUZvcm1hdC5wcm90''@;'; put 'put ''b3R5cGUuZm9ybWF0VG9QYXJ0cz1mdW5jdGlvbihiKXtsZXQgTz10aGlzLnJlc29sdmVkT3B0aW9ucygpLFM9ZnVuY3Rpb24gQihiKXt2YXIgWix0dCxfLG50LHN0LE89Yi5hdmFpbGFibGVGb3JtYXRzLFM9Yi50aW1lRm9ybWF0cyxDPWIuZGF0ZUZvcm1hdHMsSz1iLm1lZGl1bSxVPVtdLFg9''@;'; put 'put ''W10sVj1bXTtmdW5jdGlvbiBRKFksZnQpe3ZhciB2dD1uZXcgQXJyYXkoKFkubWF0Y2goL00vZyl8fFtdKS5sZW5ndGgrMSksTXQ9bmV3IEFycmF5KChZLm1hdGNoKC9FL2cpfHxbXSkubGVuZ3RoKzEpO3JldHVybiB2dC5sZW5ndGg+MiYmKGZ0PWZ0LnJlcGxhY2UoLyhNfEwpKy8sdnQuam9p''@;'; put 'put ''bigiJDEiKSkpLE10Lmxlbmd0aD4yJiYoZnQ9ZnQucmVwbGFjZSgvKFtFZWNdKSsvLE10LmpvaW4oIiQxIikpKSxmdH1mb3IoWiBpbiBPKU8uaGFzT3duUHJvcGVydHkoWikmJigoXz1GKHR0PVEoWixPW1pdKSkpJiYoVS5wdXNoKF8pLHcoXyk/Vi5wdXNoKHR0KTpSKF8pJiZYLnB1c2godHQp''@;'; put 'put ''KSk7Zm9yKG50PTA7bnQ8WC5sZW5ndGg7bnQrPTEpZm9yKHN0PTA7c3Q8Vi5sZW5ndGg7c3QrPTEpKF89Rih0dD1LLnJlcGxhY2UoInswfSIsWFtudF0pLnJlcGxhY2UoInsxfSIsVltzdF0pLnJlcGxhY2UoL15bLFxzXSt8Wyxcc10rJC9naSwiIikpKSYmVS5wdXNoKF8pO2ZvcihaIGluIFMp''@;'; put 'put ''Uy5oYXNPd25Qcm9wZXJ0eShaKSYmKChfPUYodHQ9UShaLFNbWl0pKSkmJlUucHVzaChfKSk7Zm9yKFogaW4gQylDLmhhc093blByb3BlcnR5KFopJiYoKF89Rih0dD1RKFosQ1taXSkpKSYmVS5wdXNoKF8pKTtyZXR1cm4gVX0obi5kYXRlLmZvcm1hdHMpLEM9e307Zm9yKHZhciBLIGluIGYp''@;'; put 'put ''cy5jYWxsKGYsSykmJihDWyJbWyIrSysiXV0iXT1PW0tdKTtsZXQgWj1mdW5jdGlvbiBpKGIsTyxTKXtmb3IodmFyIFgsc3Q9LTEvMCxWPTAsUT1PLmxlbmd0aDtWPFE7KXt2YXIgWT1PW1ZdLGZ0PTA7Zm9yKHZhciB2dCBpbiBmKWlmKHMuY2FsbChmLHZ0KSl7dmFyIE10PWJbIltbIit2dCsi''@;'; put 'put ''XV0iXSxFdD1zLmNhbGwoWSx2dCk/WVt2dF06dm9pZCAwO2lmKHZvaWQgMD09PU10JiZ2b2lkIDAhPT1FdClmdC09MjA7ZWxzZSBpZih2b2lkIDAhPT1NdCYmdm9pZCAwPT09RXQpZnQtPTEyMDtlbHNle3ZhciBGdD1bIjItZGlnaXQiLCJudW1lcmljIiwibmFycm93Iiwic2hvcnQiLCJsb25n''@;'; put 'put ''Il0sanQ9by5jYWxsKEZ0LE10KSxYdD1vLmNhbGwoRnQsRXQpLEJ0PU1hdGgubWF4KE1hdGgubWluKFh0LWp0LDIpLC0yKTtTJiYoKCJudW1lcmljIj09PU10fHwiMi1kaWdpdCI9PT1NdCkmJiJudW1lcmljIiE9PUV0JiYiMi1kaWdpdCIhPT1FdHx8Im51bWVyaWMiIT09TXQmJiIyLWRpZ2l0''@;'; put 'put ''IiE9PU10JiYoIjItZGlnaXQiPT09RXR8fCJudW1lcmljIj09PUV0KSkmJihmdC09OCksMj09PUJ0P2Z0LT02OjE9PT1CdD9mdC09MzotMT09PUJ0P2Z0LT02Oi0yPT09QnQmJihmdC09OCl9fWZ0PnN0JiYoc3Q9ZnQsWD1ZKSxWKyt9cmV0dXJuIFh9KEMsUyk7cmV0dXJuIGZ1bmN0aW9uIGUo''@;'; put 'put ''YixPKXtpZighaXNGaW5pdGUoTykpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdmFsaWQgZGF0ZSBwYXNzZWQgdG8gZm9ybWF0VG9QYXJ0cyIpO2Zvcih2YXIgWCxTPSJlbi1VUyIsQz1iLnBhdHRlcm4sWj0obmV3IEludGwuTnVtYmVyRm9ybWF0KFtTXSx7dXNlR3JvdXBpbmc6ITF9''@;'; put 'put ''KSxuZXcgSW50bC5OdW1iZXJGb3JtYXQoW1NdLHttaW5pbXVtSW50ZWdlckRpZ2l0czoyLHVzZUdyb3VwaW5nOiExfSksZnVuY3Rpb24gcChiLE8sUyl7dmFyIEM9bmV3IERhdGUoYiksSz0iZ2V0IisoU3x8IiIpO3JldHVybnsiW1t3ZWVrZGF5XV0iOkNbSysiRGF5Il0oKSwiW1tlcmFdXSI6''@;'; put 'put ''KyhDW0srIkZ1bGxZZWFyIl0oKT49MCksIltbeWVhcl1dIjpDW0srIkZ1bGxZZWFyIl0oKSwiW1ttb250aF1dIjpDW0srIk1vbnRoIl0oKSwiW1tkYXldXSI6Q1tLKyJEYXRlIl0oKSwiW1tob3VyXV0iOkNbSysiSG91cnMiXSgpLCJbW21pbnV0ZV1dIjpDW0srIk1pbnV0ZXMiXSgpLCJbW3Nl''@;'; put 'put ''Y29uZF1dIjpDW0srIlNlY29uZHMiXSgpLCJbW2luRFNUXV0iOiExfX0oTykpLHR0PSJncmVnb3J5IixfPW4uZGF0ZS5jYWxlbmRhcnMsbnQ9W10sc3Q9L3soW159XSspfS9nLFY9MDtudWxsIT09KFg9c3QuZXhlYyhDKSk7KXtWPFguaW5kZXgmJm50LnB1c2goe3R5cGU6InNlcGFyYXRvciIs''@;'; put 'put ''dmFsdWU6Qy5zdWJzdHIoVixYLmluZGV4LVYpfSk7dmFyIFE9WFsxXSxZPW51bGw7aWYocy5jYWxsKGIsUSkpe3ZhciBmdCx2dD1iW1FdLE10PVpbIltbIitRKyJdXSJdO2lmKCJ5ZWFyIj09PVEmJk10PD0wP010PTEtTXQ6Im1vbnRoIj09PVE/TXQrKzoiaG91ciI9PT1RJiYhMD09PWJbIltb''@;'; put 'put ''aG91cjEyXV0iXSYmKGZ0PShNdCU9MTIpIT09WlsiW1siK1ErIl1dIl0sMD09PU10JiYhMD09PWJbIltbaG91ck5vMF1dIl0mJihNdD0xMikpLCJudW1lcmljIj09PXZ0KVk9TXQ7ZWxzZSBpZigiMi1kaWdpdCI9PT12dCkoWT1NdCkubGVuZ3RoPjImJihZPVkuc2xpY2UoLTIpKTtlbHNlIGlm''@;'; put 'put ''KHZ0IGluIHUpc3dpdGNoKFEpe2Nhc2UibW9udGgiOlk9eShfLHR0LCJtb250aHMiLHZ0LFpbIltbIitRKyJdXSJdKTticmVhaztjYXNlIndlZWtkYXkiOnRyeXtZPXkoXyx0dCwiZGF5cyIsdnQsWlsiW1siK1ErIl1dIl0pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQg''@;'; put 'put ''d2Vla2RheSBkYXRhIGZvciBsb2NhbGUgIitTKX1icmVhaztjYXNlInRpbWVab25lTmFtZSI6WT0iIjticmVhaztkZWZhdWx0Olk9WlsiW1siK1ErIl1dIl19fWVsc2UiYW1wbSI9PT1RJiYoWT15KF8sdHQsImRheVBlcmlvZHMiLGZ0PyJwbSI6ImFtIikpO251bGwhPT1ZJiYobnQucHVzaCh7''@;'; put 'put ''dHlwZTpYWzFdLHZhbHVlOll9KSxWPVguaW5kZXgrWFswXS5sZW5ndGgpfXJldHVybiBWPEMubGVuZ3RoJiZudC5wdXNoKHt0eXBlOiJzZXBhcmF0b3IiLHZhbHVlOkMuc3Vic3RyKFYpfSksbnR9KFosYil9O3ZhciBzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1BcnJheS5w''@;'; put 'put ''cm90b3R5cGUuaW5kZXhPZix1PU9iamVjdC5jcmVhdGUobnVsbCx7bmFycm93Ont9LHNob3J0Ont9LGxvbmc6e319KSxmPXt3ZWVrZGF5OlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0sZXJhOlsibmFycm93Iiwic2hvcnQiLCJsb25nIl0seWVhcjpbIjItZGlnaXQiLCJudW1lcmljIl0sbW9u''@;'; put 'put ''dGg6WyIyLWRpZ2l0IiwibnVtZXJpYyIsIm5hcnJvdyIsInNob3J0IiwibG9uZyJdLGRheTpbIjItZGlnaXQiLCJudW1lcmljIl0saG91cjpbIjItZGlnaXQiLCJudW1lcmljIl0sbWludXRlOlsiMi1kaWdpdCIsIm51bWVyaWMiXSxzZWNvbmQ6WyIyLWRpZ2l0IiwibnVtZXJpYyJdLHRpbWVa''@;'; put 'put ''b25lTmFtZTpbInNob3J0IiwibG9uZyJdfTtmdW5jdGlvbiB5KGIsTyxTLEMsSyl7dmFyIFU9YltPXSYmYltPXVtTXT9iW09dW1NdOmIuZ3JlZ29yeVtTXSxaPXtuYXJyb3c6WyJzaG9ydCIsImxvbmciXSxzaG9ydDpbImxvbmciLCJuYXJyb3ciXSxsb25nOlsic2hvcnQiLCJuYXJyb3ciXX0s''@;'; put 'put ''dHQ9cy5jYWxsKFUsQyk/VVtDXTpzLmNhbGwoVSxaW0NdWzBdKT9VW1pbQ11bMF1dOlVbWltDXVsxXV07cmV0dXJuIG51bGwhPUs/dHRbS106dHR9dmFyIHY9Lyg/OltFZWNdezEsNn18R3sxLDV9fCg/Olt5WXVdK3xVezEsNX0pfFtNTF17MSw1fXxkezEsMn18YXxbaGtIS117MSwyfXxtezEs''@;'; put 'put ''Mn18c3sxLDJ9fHp7MSw0fSkoPz0oW14nXSonW14nXSonKSpbXiddKiQpL2csZz0vW1F4WFZPdlpBU2pnRkR3V0lRcUhdLyx4PXttb250aDpbIm51bWVyaWMiLCIyLWRpZ2l0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il0sd2Vla2RheTpbInNob3J0Iiwic2hvcnQiLCJzaG9ydCIsImxvbmci''@;'; put 'put ''LCJuYXJyb3ciXSxlcmE6WyJzaG9ydCIsInNob3J0Iiwic2hvcnQiLCJsb25nIiwibmFycm93Il19LEU9WyJ3ZWVrZGF5IiwiZXJhIiwieWVhciIsIm1vbnRoIiwiZGF5Il0saj1bImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0aW1lWm9uZU5hbWUiXTtmdW5jdGlvbiB3KGIpe2Zvcih2YXIg''@;'; put 'put ''Tz0wO088ai5sZW5ndGg7Tys9MSlpZihiLmhhc093blByb3BlcnR5KGpbT10pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIFIoYil7Zm9yKHZhciBPPTA7TzxFLmxlbmd0aDtPKz0xKWlmKGIuaGFzT3duUHJvcGVydHkoRVtPXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gRihiKXtp''@;'; put 'put ''ZighZy50ZXN0KGIpKXt2YXIgTz17fTtyZXR1cm4gTy5wYXR0ZXJuPWIucmVwbGFjZSh2LGZ1bmN0aW9uKFMpe3N3aXRjaChTLmNoYXJBdCgwKSl7Y2FzZSJFIjpjYXNlImUiOmNhc2UiYyI6cmV0dXJuIE8ud2Vla2RheT14LndlZWtkYXlbUy5sZW5ndGgtMV0sInt3ZWVrZGF5fSI7Y2FzZSJH''@;'; put 'put ''IjpyZXR1cm4gTy5lcmE9eC5lcmFbUy5sZW5ndGgtMV0sIntlcmF9IjtjYXNlInkiOmNhc2UiWSI6Y2FzZSJ1IjpjYXNlIlUiOnJldHVybiBPLnllYXI9Mj09PVMubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInt5ZWFyfSI7Y2FzZSJNIjpjYXNlIkwiOnJldHVybiBPLm1vbnRoPXgubW9u''@;'; put 'put ''dGhbUy5sZW5ndGgtMV0sInttb250aH0iO2Nhc2UiZCI6cmV0dXJuIE8uZGF5PTI9PT1TLmxlbmd0aD8iMi1kaWdpdCI6Im51bWVyaWMiLCJ7ZGF5fSI7Y2FzZSJhIjpyZXR1cm4ie2FtcG19IjtjYXNlImgiOmNhc2UiSCI6Y2FzZSJrIjpjYXNlIksiOnJldHVybiBPLmhvdXI9Mj09PVMubGVu''@;'; put 'put ''Z3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsIntob3VyfSI7Y2FzZSJtIjpyZXR1cm4gTy5taW51dGU9Mj09PVMubGVuZ3RoPyIyLWRpZ2l0IjoibnVtZXJpYyIsInttaW51dGV9IjtjYXNlInMiOnJldHVybiBPLnNlY29uZD0yPT09Uy5sZW5ndGg/IjItZGlnaXQiOiJudW1lcmljIiwie3NlY29u''@;'; put 'put ''ZH0iO2Nhc2UieiI6cmV0dXJuIE8udGltZVpvbmVOYW1lPVMubGVuZ3RoPDQ/InNob3J0IjoibG9uZyIsInt0aW1lWm9uZU5hbWV9In19KSxPLnBhdHRlcm49Ty5wYXR0ZXJuLnJlcGxhY2UoLycoW14nXSopJy9nLGZ1bmN0aW9uKFMsQyl7cmV0dXJuIEN8fCInIn0pLE8ucGF0dGVybi5pbmRl''@;'; put 'put ''eE9mKCJ7YW1wbX0iKT4tMSYmKE8uaG91cjEyPSEwLE8ucGF0dGVybjEyPU8ucGF0dGVybixPLnBhdHRlcm49Ty5wYXR0ZXJuLnJlcGxhY2UoInthbXBtfSIsIiIpLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKSksT319fSw4MjY5MTooYyxsLHQpPT57''@;'; put 'put ''dCgzOTExNSksdCgyMDc3NCksdCgzMDUyMiksdCg1ODI5NSksdCg4Nzg0MiksdCg1MDExMCksdCgyMDA3NSksdCgyNDMzNiksdCgxOTM3MSksdCg5ODgzNyksdCgyNjc3MyksdCgxNTc0NSksdCgzMzA1NyksdCgzNzUwKSx0KDIzMzY5KSx0KDk5NTY0KSx0KDMyZTMpLHQoNDg5NzcpLHQoNTIz''@;'; put 'put ''MTApLHQoOTQ4OTkpLHQoMzE4NDIpLHQoNTY5OTcpLHQoMjU2NDUpfSw3Njc3OihjLGwsdCk9Pnt0KDgxODIyKSx0KDE5OTc3KSx0KDkxMDMxKSx0KDQ2MzMxKSx0KDQxNTYwKSxjLmV4cG9ydHM9RGF0ZX0sODg4MTM6KGMsbCx0KT0+e3QoMzk3MzApLHQoNjA1OSksdCg0ODM3NyksdCgyNTY0''@;'; put 'put ''NSl9LDE3ODc4OihjLGwsdCk9Pnt0KDk2MjUzKSx0KDM5MTE1KSx0KDkxMTgxKSx0KDg4NDE2KSx0KDI1NjQ1KX0sMTYzNDM6KGMsbCx0KT0+e3QoNzY1MDMpLHQoNjY3ODYpLHQoNTA5MzIpLHQoNTc1MjYpLHQoMjE1OTEpLHQoOTA3MyksdCg4MDM0NyksdCgzMDU3OSksdCg0NjY5KSx0KDY3''@;'; put 'put ''NzEwKSx0KDQ1Nzg5KSx0KDMzNTE0KSx0KDk5OTc4KSx0KDU4NDcyKSx0KDg2OTQ2KSx0KDM1MDY4KSx0KDQxMyksdCgyNTY0NSl9LDYyMzE0OihjLGwsdCk9Pnt0KDExMjQ2KSx0KDMwNzI2KSx0KDE5MDEpLHQoNzU5NzIpLHQoNTM0MDMpLHQoOTI1MTYpLHQoNDkzNzEpLHQoODY0NzkpLHQo''@;'; put 'put ''OTE3MzYpLHQoNTE4ODkpLHQoNjUxNzcpLHQoODEyNDYpLHQoMjU2NDUpfSw3NzY1NzooYyxsLHQpPT57dCg5NTc2NyksdCg2ODEzMiksdCg0ODM4OCksdCgzNzQ3MCksdCg5NDg4MiksdCg0MTUyMCksdCgyNzQ3NiksdCg3OTYyMiksdCg4OTM3NSksdCg0MzUzMyksdCg4NDY3MiksdCg2NDE1''@;'; put 'put ''NyksdCgzNTA5NSksdCg0OTg5MiksdCg3NTExNSksdCg5OTE3NiksdCg2ODgzOCksdCg5NjI1MyksdCgyNTY0NSl9LDUxNzcxOihjLGwsdCk9Pnt0KDY0Mjk5KSx0KDI1NjQ1KX0sNTMxMDooYyxsLHQpPT57dCg3MTA4NCksdCgyNTY0NSl9LDQzNDk5OihjLGwsdCk9Pnt0KDIxNTcyKSx0KDgy''@;'; put 'put ''MTM5KSx0KDEwNjg1KSx0KDg1NTM1KSx0KDE3MzQ3KSx0KDgzMDQ5KSx0KDk2NjMzKSx0KDY4OTg5KSx0KDc4MjcwKSx0KDY0NTEwKSx0KDczOTg0KSx0KDc1NzY5KSx0KDUwMDU1KSx0KDk2MDE0KSx0KDI1NjQ1KX0sMjkxMzI6KGMsbCx0KT0+e3QoODM5NDYpLHQoMTgyNjkpLHQoNjYxMDgp''@;'; put 'put ''LHQoNzY3NzQpLHQoMjE0NjYpLHQoNTkzNTcpLHQoNzYxNDIpLHQoNTE4NzYpLHQoMjU2NDUpfSw1MjI5ODooYyxsLHQpPT57dCg5NjI1MyksdCgzOTExNSksdCg5MTE4MSksdCg5ODE4NCksdCgyNTY0NSl9LDM3MDQyOihjLGwsdCk9Pnt0KDUwMTkxKSx0KDk4MzA2KSx0KDY0NTY0KSx0KDM5''@;'; put 'put ''MTE1KSx0KDI5NTM5KSx0KDk2NjIwKSx0KDYyODUwKSx0KDEwODIzKSx0KDE3NzMyKSx0KDQwODU2KSx0KDgwNzAzKSx0KDkxNTM5KSx0KDUyOTIpLHQoNDUxNzcpLHQoNzM2OTQpLHQoMzc2NDgpLHQoMjc3OTUpLHQoNDUzMSksdCgyMzYwNSksdCg2NzgwKSx0KDY5OTM3KSx0KDEwNTExKSx0''@;'; put 'put ''KDIxNDY2KSx0KDU5MzU3KSx0KDc2MTQyKSx0KDUxODc2KSx0KDI1NjQ1KX0sNDI0NDooYyxsLHQpPT57dCg5NTc2NyksdCg5NjI1MyksdCgyNTY0NSl9LDY3Nzk1OihjLGwsdCk9Pnt0KDUzMzY0KSx0KDUxNDMyKSx0KDI2NTYyKSx0KDg0NDE2KSx0KDk4NjgxKSx0KDMyMjEzKSx0KDYzNDcx''@;'; put 'put ''KSx0KDQzMjkpLHQoMjUxNTkpLHQoMjU2NDUpfSwyNDk2MzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IFR5cGVFcnJvcihsKyIgaXMgbm90IGEgZnVuY3Rpb24hIik7cmV0dXJuIGx9fSw4MzM2NTooYyxsLHQpPT57dmFyIG49dCg5MjAz''@;'; put 'put ''Mik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIm51bWJlciIhPXR5cGVvZiBlJiYiTnVtYmVyIiE9bihlKSl0aHJvdyBUeXBlRXJyb3Iocyk7cmV0dXJuK2V9fSwxNzcyMjooYyxsLHQpPT57dmFyIG49dCg4NjMxNCkoInVuc2NvcGFibGVzIiksZT1BcnJheS5wcm90b3R5cGU7bnVsbD09''@;'; put 'put ''ZVtuXSYmdCg4NzcyOCkoZSxuLHt9KSxjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7ZVtuXVtzXT0hMH19LDc2NzkzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgyNDQ5NikoITApO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMsbyl7cmV0dXJuIHMrKG8/bihlLHMpLmxlbmd0aDoxKX19LDgz''@;'; put 'put ''MzI4OmM9PntjLmV4cG9ydHM9ZnVuY3Rpb24obCx0LG4sZSl7aWYoIShsIGluc3RhbmNlb2YgdCl8fHZvaWQgMCE9PWUmJmUgaW4gbCl0aHJvdyBUeXBlRXJyb3IobisiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEiKTtyZXR1cm4gbH19LDI3MDA3OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KTtj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sNTIxNjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjA1MDgpLGU9dCg5MjMzNykscz10KDEwODc1KTtjLmV4cG9ydHM9W10uY29weVdp''@;'; put 'put ''dGhpbnx8ZnVuY3Rpb24odSxmKXt2YXIgaT1uKHRoaXMpLHA9cyhpLmxlbmd0aCkseT1lKHUscCksdj1lKGYscCksZz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCx4PU1hdGgubWluKCh2b2lkIDA9PT1nP3A6ZShnLHApKS12LHAteSksRT0xO2Zvcih2PHkmJnk8dit4''@;'; put 'put ''JiYoRT0tMSx2Kz14LTEseSs9eC0xKTt4LS0gPjA7KXYgaW4gaT9pW3ldPWlbdl06ZGVsZXRlIGlbeV0seSs9RSx2Kz1FO3JldHVybiBpfX0sNDY4NTI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDIwNTA4KSxlPXQoOTIzMzcpLHM9dCgxMDg3NSk7Yy5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHUpe2Zvcih2YXIgZj1uKHRoaXMpLGk9cyhmLmxlbmd0aCkscD1hcmd1bWVudHMubGVuZ3RoLHk9ZShwPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpKSx2PXA+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGc9dm9pZCAwPT09dj9pOmUodixpKTtnPnk7KWZbeSsrXT11O3JldHVybiBmfX0sOTQ5MDoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCgzNTMxKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzKXt2YXIgbz1bXTtyZXR1cm4gbihlLCExLG8ucHVzaCxvLHMpLG99fSw3OTMxNTooYyxsLHQpPT57dmFyIG49dCgyMjExMCksZT10KDEwODc1KSxzPXQoOTIzMzcpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24odSxmLGkpe3ZhciBnLHA9bih1KSx5PWUocC5sZW5ndGgpLHY9cyhpLHkpO2lmKG8mJmYhPWYpe2Zvcig7eT52OylpZigoZz1wW3YrK10pIT1nKXJldHVybiEwfWVsc2UgZm9yKDt5PnY7disrKWlmKChvfHx2IGluIHApJiZwW3ZdPT09ZilyZXR1cm4gb3x8dnx8MDtyZXR1''@;'; put 'put ''cm4hbyYmLTF9fX0sMTAwNTA6KGMsbCx0KT0+e3ZhciBuPXQoNzQxKSxlPXQoNDk3OTcpLHM9dCgyMDUwOCksbz10KDEwODc1KSx1PXQoMTY4ODYpO2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciBwPTE9PWYseT0yPT1mLHY9Mz09ZixnPTQ9PWYseD02PT1mLEU9NT09Znx8eCxqPWl8fHU7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKHcsUixGKXtmb3IodmFyIFUsWixCPXModyksYj1lKEIpLE89bihSLEYsMyksUz1vKGIubGVuZ3RoKSxDPTAsSz1wP2oodyxTKTp5P2oodywwKTp2b2lkIDA7Uz5DO0MrKylpZigoRXx8QyBpbiBiKSYmKFo9TyhVPWJbQ10sQyxCKSxmKSlpZihwKUtbQ109WjtlbHNl''@;'; put 'put ''IGlmKFopc3dpdGNoKGYpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIFU7Y2FzZSA2OnJldHVybiBDO2Nhc2UgMjpLLnB1c2goVSl9ZWxzZSBpZihnKXJldHVybiExO3JldHVybiB4Py0xOnZ8fGc/ZzpLfX19LDM3NjI4OihjLGwsdCk9Pnt2YXIgbj10KDI0OTYzKSxlPXQoMjA1MDgp''@;'; put 'put ''LHM9dCg0OTc5Nyksbz10KDEwODc1KTtjLmV4cG9ydHM9ZnVuY3Rpb24odSxmLGkscCx5KXtuKGYpO3ZhciB2PWUodSksZz1zKHYpLHg9byh2Lmxlbmd0aCksRT15P3gtMTowLGo9eT8tMToxO2lmKGk8Milmb3IoOzspe2lmKEUgaW4gZyl7cD1nW0VdLEUrPWo7YnJlYWt9aWYoRSs9aix5P0U8''@;'; put 'put ''MDp4PD1FKXRocm93IFR5cGVFcnJvcigiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZSIpfWZvcig7eT9FPj0wOng+RTtFKz1qKUUgaW4gZyYmKHA9ZihwLGdbRV0sRSx2KSk7cmV0dXJuIHB9fSw0MjczNjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDQz''@;'; put 'put ''MDIpLHM9dCg4NjMxNCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7dmFyIHU7cmV0dXJuIGUobykmJigiZnVuY3Rpb24iPT10eXBlb2YodT1vLmNvbnN0cnVjdG9yKSYmKHU9PT1BcnJheXx8ZSh1LnByb3RvdHlwZSkpJiYodT12b2lkIDApLG4odSkmJm51bGw9PT0odT11W3Nd''@;'; put 'put ''KSYmKHU9dm9pZCAwKSksdm9pZCAwPT09dT9BcnJheTp1fX0sMTY4ODY6KGMsbCx0KT0+e3ZhciBuPXQoNDI3MzYpO2MuZXhwb3J0cz1mdW5jdGlvbihlLHMpe3JldHVybiBuZXcobihlKSkocyl9fSwzNDM5ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ5NjMpLGU9dCg1NTI4''@;'; put 'put ''Nikscz10KDk3MjQyKSxvPVtdLnNsaWNlLHU9e307Yy5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHApe3ZhciB5PW4odGhpcyksdj1vLmNhbGwoYXJndW1lbnRzLDEpLGc9ZnVuY3Rpb24oKXt2YXIgeD12LmNvbmNhdChvLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5z''@;'; put 'put ''dGFuY2VvZiBnP2Z1bmN0aW9uKGkscCx5KXtpZighKHAgaW4gdSkpe2Zvcih2YXIgdj1bXSxnPTA7ZzxwO2crKyl2W2ddPSJhWyIrZysiXSI7dVtwXT1GdW5jdGlvbigiRixhIiwicmV0dXJuIG5ldyBGKCIrdi5qb2luKCIsIikrIikiKX1yZXR1cm4gdVtwXShpLHkpfSh5LHgubGVuZ3RoLHgp''@;'; put 'put ''OnMoeSx4LHApfTtyZXR1cm4gZSh5LnByb3RvdHlwZSkmJihnLnByb3RvdHlwZT15LnByb3RvdHlwZSksZ319LDQxNDg4OihjLGwsdCk9Pnt2YXIgbj10KDkyMDMyKSxlPXQoODYzMTQpKCJ0b1N0cmluZ1RhZyIpLHM9IkFyZ3VtZW50cyI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRz''@;'; put 'put ''fSgpKTtjLmV4cG9ydHM9ZnVuY3Rpb24odSl7dmFyIGYsaSxwO3JldHVybiB2b2lkIDA9PT11PyJVbmRlZmluZWQiOm51bGw9PT11PyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKGk9ZnVuY3Rpb24odSxmKXt0cnl7cmV0dXJuIHVbZl19Y2F0Y2h7fX0oZj1PYmplY3QodSksZSkpP2k6cz9uKGYp''@;'; put 'put ''OiJPYmplY3QiPT0ocD1uKGYpKSYmImZ1bmN0aW9uIj09dHlwZW9mIGYuY2FsbGVlPyJBcmd1bWVudHMiOnB9fSw5MjAzMjpjPT57dmFyIGw9e30udG9TdHJpbmc7Yy5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBsLmNhbGwodCkuc2xpY2UoOCwtMSl9fSw5ODI0OihjLGwsdCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCg5OTI3NSkuZixlPXQoNDI1MDMpLHM9dCgyNDQwOCksbz10KDc0MSksdT10KDgzMzI4KSxmPXQoMzUzMSksaT10KDQyOTIzKSxwPXQoMTU0MzYpLHk9dCgyOTc0KSx2PXQoNjcwNTcpLGc9dCg4NDcyOCkuZmFzdEtleSx4PXQoMTYxNiksRT12PyJfcyI6InNpemUi''@;'; put 'put ''LGo9ZnVuY3Rpb24odyxSKXt2YXIgQixGPWcoUik7aWYoIkYiIT09RilyZXR1cm4gdy5faVtGXTtmb3IoQj13Ll9mO0I7Qj1CLm4paWYoQi5rPT1SKXJldHVybiBCfTtjLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKHcsUixGLEIpe3ZhciBiPXcoZnVuY3Rpb24oTyxTKXt1KE8s''@;'; put 'put ''YixSLCJfaSIpLE8uX3Q9UixPLl9pPWUobnVsbCksTy5fZj12b2lkIDAsTy5fbD12b2lkIDAsT1tFXT0wLG51bGwhPVMmJmYoUyxGLE9bQl0sTyl9KTtyZXR1cm4gcyhiLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIFM9eCh0aGlzLFIpLEM9Uy5faSxLPVMuX2Y7SztLPUsu''@;'; put 'put ''bilLLnI9ITAsSy5wJiYoSy5wPUsucC5uPXZvaWQgMCksZGVsZXRlIENbSy5pXTtTLl9mPVMuX2w9dm9pZCAwLFNbRV09MH0sZGVsZXRlOmZ1bmN0aW9uKE8pe3ZhciBTPXgodGhpcyxSKSxDPWooUyxPKTtpZihDKXt2YXIgSz1DLm4sVT1DLnA7ZGVsZXRlIFMuX2lbQy5pXSxDLnI9ITAsVSYm''@;'; put 'put ''KFUubj1LKSxLJiYoSy5wPVUpLFMuX2Y9PUMmJihTLl9mPUspLFMuX2w9PUMmJihTLl9sPVUpLFNbRV0tLX1yZXR1cm4hIUN9LGZvckVhY2g6ZnVuY3Rpb24oUyl7eCh0aGlzLFIpO2Zvcih2YXIgSyxDPW8oUyxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtLPUs/''@;'; put 'put ''Sy5uOnRoaXMuX2Y7KWZvcihDKEsudixLLmssdGhpcyk7SyYmSy5yOylLPUsucH0saGFzOmZ1bmN0aW9uKFMpe3JldHVybiEhaih4KHRoaXMsUiksUyl9fSksdiYmbihiLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsUilbRV19fSksYn0sZGVmOmZ1bmN0''@;'; put 'put ''aW9uKHcsUixGKXt2YXIgYixPLEI9aih3LFIpO3JldHVybiBCP0Iudj1GOih3Ll9sPUI9e2k6Tz1nKFIsITApLGs6Uix2OkYscDpiPXcuX2wsbjp2b2lkIDAscjohMX0sdy5fZnx8KHcuX2Y9QiksYiYmKGIubj1CKSx3W0VdKyssIkYiIT09TyYmKHcuX2lbT109QikpLHd9LGdldEVudHJ5Omos''@;'; put 'put ''c2V0U3Ryb25nOmZ1bmN0aW9uKHcsUixGKXtpKHcsUixmdW5jdGlvbihCLGIpe3RoaXMuX3Q9eChCLFIpLHRoaXMuX2s9Yix0aGlzLl9sPXZvaWQgMH0sZnVuY3Rpb24oKXtmb3IodmFyIEI9dGhpcyxiPUIuX2ssTz1CLl9sO08mJk8ucjspTz1PLnA7cmV0dXJuIEIuX3QmJihCLl9sPU89Tz9P''@;'; put 'put ''Lm46Qi5fdC5fZik/cCgwLCJrZXlzIj09Yj9PLms6InZhbHVlcyI9PWI/Ty52OltPLmssTy52XSk6KEIuX3Q9dm9pZCAwLHAoMSkpfSxGPyJlbnRyaWVzIjoidmFsdWVzIiwhRiwhMCkseShSKX19fSwyMzY1NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ0MDgpLGU9dCg4NDcy''@;'; put 'put ''OCkuZ2V0V2VhayxzPXQoMjcwMDcpLG89dCg1NTI4NiksdT10KDgzMzI4KSxmPXQoMzUzMSksaT10KDEwMDUwKSxwPXQoNzkxODEpLHk9dCgxNjE2KSx2PWkoNSksZz1pKDYpLHg9MCxFPWZ1bmN0aW9uKFIpe3JldHVybiBSLl9sfHwoUi5fbD1uZXcgail9LGo9ZnVuY3Rpb24oKXt0aGlzLmE9''@;'; put 'put ''W119LHc9ZnVuY3Rpb24oUixGKXtyZXR1cm4gdihSLmEsZnVuY3Rpb24oQil7cmV0dXJuIEJbMF09PT1GfSl9O2oucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oUil7dmFyIEY9dyh0aGlzLFIpO2lmKEYpcmV0dXJuIEZbMV19LGhhczpmdW5jdGlvbihSKXtyZXR1cm4hIXcodGhpcyxSKX0sc2V0''@;'; put 'put ''OmZ1bmN0aW9uKFIsRil7dmFyIEI9dyh0aGlzLFIpO0I/QlsxXT1GOnRoaXMuYS5wdXNoKFtSLEZdKX0sZGVsZXRlOmZ1bmN0aW9uKFIpe3ZhciBGPWcodGhpcy5hLGZ1bmN0aW9uKEIpe3JldHVybiBCWzBdPT09Un0pO3JldHVybn5GJiZ0aGlzLmEuc3BsaWNlKEYsMSksISF+Rn19LGMuZXhw''@;'; put 'put ''b3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oUixGLEIsYil7dmFyIE89UihmdW5jdGlvbihTLEMpe3UoUyxPLEYsIl9pIiksUy5fdD1GLFMuX2k9eCsrLFMuX2w9dm9pZCAwLG51bGwhPUMmJmYoQyxCLFNbYl0sUyl9KTtyZXR1cm4gbihPLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9u''@;'; put 'put ''KFMpe2lmKCFvKFMpKXJldHVybiExO3ZhciBDPWUoUyk7cmV0dXJuITA9PT1DP0UoeSh0aGlzLEYpKS5kZWxldGUoUyk6QyYmcChDLHRoaXMuX2kpJiZkZWxldGUgQ1t0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKEMpe2lmKCFvKEMpKXJldHVybiExO3ZhciBLPWUoQyk7cmV0dXJuITA9PT1LP0Uo''@;'; put 'put ''eSh0aGlzLEYpKS5oYXMoQyk6SyYmcChLLHRoaXMuX2kpfX0pLE99LGRlZjpmdW5jdGlvbihSLEYsQil7dmFyIGI9ZShzKEYpLCEwKTtyZXR1cm4hMD09PWI/RShSKS5zZXQoRixCKTpiW1IuX2ldPUIsUn0sdWZzdG9yZTpFfX0sNDU3OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10''@;'; put 'put ''KDM4MTYpLGU9dCg0Mjk4NSkscz10KDc3MjM0KSxvPXQoMjQ0MDgpLHU9dCg4NDcyOCksZj10KDM1MzEpLGk9dCg4MzMyOCkscD10KDU1Mjg2KSx5PXQoNzQyNTMpLHY9dCg3NDYyKSxnPXQoMjI5NDMpLHg9dCg0MDI2Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKEUsaix3LFIsRixCKXt2YXIgYj1u''@;'; put 'put ''W0VdLE89YixTPUY/InNldCI6ImFkZCIsQz1PJiZPLnByb3RvdHlwZSxLPXt9LFU9ZnVuY3Rpb24oWCl7dmFyIFY9Q1tYXTtzKEMsWCwiZGVsZXRlIj09WD9mdW5jdGlvbihRKXtyZXR1cm4hKEImJiFwKFEpKSYmVi5jYWxsKHRoaXMsMD09PVE/MDpRKX06ImhhcyI9PVg/ZnVuY3Rpb24oWSl7''@;'; put 'put ''cmV0dXJuIShCJiYhcChZKSkmJlYuY2FsbCh0aGlzLDA9PT1ZPzA6WSl9OiJnZXQiPT1YP2Z1bmN0aW9uKFkpe3JldHVybiBCJiYhcChZKT92b2lkIDA6Vi5jYWxsKHRoaXMsMD09PVk/MDpZKX06ImFkZCI9PVg/ZnVuY3Rpb24oWSl7cmV0dXJuIFYuY2FsbCh0aGlzLDA9PT1ZPzA6WSksdGhp''@;'; put 'put ''c306ZnVuY3Rpb24oWSxmdCl7cmV0dXJuIFYuY2FsbCh0aGlzLDA9PT1ZPzA6WSxmdCksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgTyYmKEJ8fEMuZm9yRWFjaCYmIXkoZnVuY3Rpb24oKXsobmV3IE8pLmVudHJpZXMoKS5uZXh0KCl9KSkpe3ZhciBaPW5ldyBPLHR0PVpbU10oQj97''@;'; put 'put ''fTotMCwxKSE9WixfPXkoZnVuY3Rpb24oKXtaLmhhcygxKX0pLG50PXYoZnVuY3Rpb24oWCl7bmV3IE8oWCl9KSxzdD0hQiYmeShmdW5jdGlvbigpe2Zvcih2YXIgWD1uZXcgTyxWPTU7Vi0tOylYW1NdKFYsVik7cmV0dXJuIVguaGFzKC0wKX0pO250fHwoKE89aihmdW5jdGlvbihYLFYpe2ko''@;'; put 'put ''WCxPLEUpO3ZhciBRPXgobmV3IGIsWCxPKTtyZXR1cm4gbnVsbCE9ViYmZihWLEYsUVtTXSxRKSxRfSkpLnByb3RvdHlwZT1DLEMuY29uc3RydWN0b3I9TyksKF98fHN0KSYmKFUoImRlbGV0ZSIpLFUoImhhcyIpLEYmJlUoImdldCIpKSwoc3R8fHR0KSYmVShTKSxCJiZDLmNsZWFyJiZkZWxl''@;'; put 'put ''dGUgQy5jbGVhcn1lbHNlIE89Ui5nZXRDb25zdHJ1Y3RvcihqLEUsRixTKSxvKE8ucHJvdG90eXBlLHcpLHUuTkVFRD0hMDtyZXR1cm4gZyhPLEUpLEtbRV09TyxlKGUuRytlLlcrZS5GKihPIT1iKSxLKSxCfHxSLnNldFN0cm9uZyhPLEUsRiksT319LDI1NjQ1OmM9Pnt2YXIgbD1jLmV4cG9y''@;'; put 'put ''dHM9e3ZlcnNpb246IjIuNi4xMiJ9OyJudW1iZXIiPT10eXBlb2YgX19lJiYoX19lPWwpfSw5MjgxMTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoOTkyNzUpLGU9dCg5MDY4MSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtvIGluIHM/bi5mKHMsbyxlKDAsdSkpOnNbb109dX19''@;'; put 'put ''LDc0MTooYyxsLHQpPT57dmFyIG49dCgyNDk2Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvKXtpZihuKGUpLHZvaWQgMD09PXMpcmV0dXJuIGU7c3dpdGNoKG8pe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIGUuY2FsbChzLHUpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHUs''@;'; put 'put ''Zil7cmV0dXJuIGUuY2FsbChzLHUsZil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24odSxmLGkpe3JldHVybiBlLmNhbGwocyx1LGYsaSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHMsYXJndW1lbnRzKX19fSw1MzUzNzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQo''@;'; put 'put ''NzQyNTMpLGU9RGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxzPURhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nLG89ZnVuY3Rpb24odSl7cmV0dXJuIHU+OT91OiIwIit1fTtjLmV4cG9ydHM9bihmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT1zLmNhbGwobmV3IERh''@;'; put 'put ''dGUoLTUwMDAwMDAwMDAwMDAxKSl9KXx8IW4oZnVuY3Rpb24oKXtzLmNhbGwobmV3IERhdGUoTmFOKSl9KT9mdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShlLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO3ZhciBmPXRoaXMsaT1mLmdldFVUQ0Z1bGxZ''@;'; put 'put ''ZWFyKCkscD1mLmdldFVUQ01pbGxpc2Vjb25kcygpLHk9aTwwPyItIjppPjk5OTk/IisiOiIiO3JldHVybiB5KygiMDAwMDAiK01hdGguYWJzKGkpKS5zbGljZSh5Py02Oi00KSsiLSIrbyhmLmdldFVUQ01vbnRoKCkrMSkrIi0iK28oZi5nZXRVVENEYXRlKCkpKyJUIitvKGYuZ2V0VVRDSG91''@;'; put 'put ''cnMoKSkrIjoiK28oZi5nZXRVVENNaW51dGVzKCkpKyI6IitvKGYuZ2V0VVRDU2Vjb25kcygpKSsiLiIrKHA+OTk/cDoiMCIrbyhwKSkrIloifTpzfSw4NzA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDI3MDA3KSxlPXQoMjE2ODkpLHM9Im51bWJlciI7Yy5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKG8pe2lmKCJzdHJpbmciIT09byYmbyE9PXMmJiJkZWZhdWx0IiE9PW8pdGhyb3cgVHlwZUVycm9yKCJJbmNvcnJlY3QgaGludCIpO3JldHVybiBlKG4odGhpcyksbyE9cyl9fSw5MTM1NTpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe2lmKG51bGw9PWwpdGhyb3cgVHlwZUVycm9yKCJD''@;'; put 'put ''YW4ndCBjYWxsIG1ldGhvZCBvbiAgIitsKTtyZXR1cm4gbH19LDY3MDU3OihjLGwsdCk9PntjLmV4cG9ydHM9IXQoNzQyNTMpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sNjI0NTc6KGMs''@;'; put 'put ''bCx0KT0+e3ZhciBuPXQoNTUyODYpLGU9dCgzODE2KS5kb2N1bWVudCxzPW4oZSkmJm4oZS5jcmVhdGVFbGVtZW50KTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHM/ZS5jcmVhdGVFbGVtZW50KG8pOnt9fX0sNzQ0MzA6Yz0+e2MuZXhwb3J0cz0iY29uc3RydWN0b3IsaGFzT3duUHJv''@;'; put 'put ''cGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mIi5zcGxpdCgiLCIpfSw1NTQxOihjLGwsdCk9Pnt2YXIgbj10KDQ3MTg0KSxlPXQoNjQ1NDgpLHM9dCgxNDY4Mik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8pe3ZhciB1''@;'; put 'put ''PW4obyksZj1lLmY7aWYoZilmb3IodmFyIHYsaT1mKG8pLHA9cy5mLHk9MDtpLmxlbmd0aD55OylwLmNhbGwobyx2PWlbeSsrXSkmJnUucHVzaCh2KTtyZXR1cm4gdX19LDQyOTg1OihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLGU9dCgyNTY0NSkscz10KDg3NzI4KSxvPXQoNzcyMzQpLHU9dCg3''@;'; put 'put ''NDEpLGY9InByb3RvdHlwZSIsaT1mdW5jdGlvbihwLHksdil7dmFyIGIsTyxTLEMsZz1wJmkuRix4PXAmaS5HLGo9cCZpLlAsdz1wJmkuQixSPXg/bjpwJmkuUz9uW3ldfHwoblt5XT17fSk6KG5beV18fHt9KVtmXSxGPXg/ZTplW3ldfHwoZVt5XT17fSksQj1GW2ZdfHwoRltmXT17fSk7Zm9y''@;'; put 'put ''KGIgaW4geCYmKHY9eSksdilTPSgoTz0hZyYmUiYmdm9pZCAwIT09UltiXSk/Ujp2KVtiXSxDPXcmJk8/dShTLG4pOmomJiJmdW5jdGlvbiI9PXR5cGVvZiBTP3UoRnVuY3Rpb24uY2FsbCxTKTpTLFImJm8oUixiLFMscCZpLlUpLEZbYl0hPVMmJnMoRixiLEMpLGomJkJbYl0hPVMmJihCW2Jd''@;'; put 'put ''PVMpfTtuLmNvcmU9ZSxpLkY9MSxpLkc9MixpLlM9NCxpLlA9OCxpLkI9MTYsaS5XPTMyLGkuVT02NCxpLlI9MTI4LGMuZXhwb3J0cz1pfSw4ODUyOihjLGwsdCk9Pnt2YXIgbj10KDg2MzE0KSgibWF0Y2giKTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHM9Ly4vO3RyeXsiLy4vIltlXShz''@;'; put 'put ''KX1jYXRjaHt0cnl7cmV0dXJuIHNbbl09ITEsISIvLi8iW2VdKHMpfWNhdGNoe319cmV0dXJuITB9fSw3NDI1MzpjPT57Yy5leHBvcnRzPWZ1bmN0aW9uKGwpe3RyeXtyZXR1cm4hIWwoKX1jYXRjaHtyZXR1cm4hMH19fSwyODA4MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMTgyNjkpO3Zh''@;'; put 'put ''ciBuPXQoNzcyMzQpLGU9dCg4NzcyOCkscz10KDc0MjUzKSxvPXQoOTEzNTUpLHU9dCg4NjMxNCksZj10KDIxMTY1KSxpPXUoInNwZWNpZXMiKSxwPSFzKGZ1bmN0aW9uKCl7dmFyIHY9Ly4vO3JldHVybiB2LmV4ZWM9ZnVuY3Rpb24oKXt2YXIgZz1bXTtyZXR1cm4gZy5ncm91cHM9e2E6Ijci''@;'; put 'put ''fSxnfSwiNyIhPT0iIi5yZXBsYWNlKHYsIiQ8YT4iKX0pLHk9ZnVuY3Rpb24oKXt2YXIgdj0vKD86KS8sZz12LmV4ZWM7di5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIGcuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgeD0iYWIiLnNwbGl0KHYpO3JldHVybiAyPT09eC5sZW5ndGgmJiJhIj09''@;'; put 'put ''PXhbMF0mJiJiIj09PXhbMV19KCk7Yy5leHBvcnRzPWZ1bmN0aW9uKHYsZyx4KXt2YXIgRT11KHYpLGo9IXMoZnVuY3Rpb24oKXt2YXIgTz17fTtyZXR1cm4gT1tFXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIlt2XShPKX0pLHc9aj8hcyhmdW5jdGlvbigpe3ZhciBPPSExLFM9L2EvO3Jl''@;'; put 'put ''dHVybiBTLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gTz0hMCxudWxsfSwic3BsaXQiPT09diYmKFMuY29uc3RydWN0b3I9e30sUy5jb25zdHJ1Y3RvcltpXT1mdW5jdGlvbigpe3JldHVybiBTfSksU1tFXSgiIiksIU99KTp2b2lkIDA7aWYoIWp8fCF3fHwicmVwbGFjZSI9PT12JiYhcHx8InNw''@;'; put 'put ''bGl0Ij09PXYmJiF5KXt2YXIgUj0vLi9bRV0sRj14KG8sRSwiIlt2XSxmdW5jdGlvbihTLEMsSyxVLFope3JldHVybiBDLmV4ZWM9PT1mP2omJiFaP3tkb25lOiEwLHZhbHVlOlIuY2FsbChDLEssVSl9Ontkb25lOiEwLHZhbHVlOlMuY2FsbChLLEMsVSl9Ontkb25lOiExfX0pLGI9RlsxXTtu''@;'; put 'put ''KFN0cmluZy5wcm90b3R5cGUsdixGWzBdKSxlKFJlZ0V4cC5wcm90b3R5cGUsRSwyPT1nP2Z1bmN0aW9uKE8sUyl7cmV0dXJuIGIuY2FsbChPLHRoaXMsUyl9OmZ1bmN0aW9uKE8pe3JldHVybiBiLmNhbGwoTyx0aGlzKX0pfX19LDUzMjE4OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgyNzAwNyk7Yy5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9bih0aGlzKSxzPSIiO3JldHVybiBlLmdsb2JhbCYmKHMrPSJnIiksZS5pZ25vcmVDYXNlJiYocys9ImkiKSxlLm11bHRpbGluZSYmKHMrPSJtIiksZS51bmljb2RlJiYocys9InUiKSxlLnN0aWNreSYmKHMrPSJ5Iiksc319LDM1''@;'; put 'put ''MzE6KGMsbCx0KT0+e3ZhciBuPXQoNzQxKSxlPXQoMjg4NTEpLHM9dCg4NjU1NSksbz10KDI3MDA3KSx1PXQoMTA4NzUpLGY9dCg2OTAwMiksaT17fSxwPXt9LHk9Yy5leHBvcnRzPWZ1bmN0aW9uKHYsZyx4LEUsail7dmFyIEIsYixPLFMsdz1qP2Z1bmN0aW9uKCl7cmV0dXJuIHZ9OmYodiks''@;'; put 'put ''Uj1uKHgsRSxnPzI6MSksRj0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB3KXRocm93IFR5cGVFcnJvcih2KyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKHModykpe2ZvcihCPXUodi5sZW5ndGgpO0I+RjtGKyspaWYoKFM9Zz9SKG8oYj12W0ZdKVswXSxiWzFdKTpSKHZbRl0pKT09PWl8fFM9PT1w''@;'; put 'put ''KXJldHVybiBTfWVsc2UgZm9yKE89dy5jYWxsKHYpOyEoYj1PLm5leHQoKSkuZG9uZTspaWYoKFM9ZShPLFIsYi52YWx1ZSxnKSk9PT1pfHxTPT09cClyZXR1cm4gU307eS5CUkVBSz1pLHkuUkVUVVJOPXB9LDQwMDE4OihjLGwsdCk9PntjLmV4cG9ydHM9dCgzODI1KSgibmF0aXZlLWZ1bmN0''@;'; put 'put ''aW9uLXRvLXN0cmluZyIsRnVuY3Rpb24udG9TdHJpbmcpfSwzODE2OmM9Pnt2YXIgbD1jLmV4cG9ydHM9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSImJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIp''@;'; put 'put ''KCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bCl9LDc5MTgxOmM9Pnt2YXIgbD17fS5oYXNPd25Qcm9wZXJ0eTtjLmV4cG9ydHM9ZnVuY3Rpb24odCxuKXtyZXR1cm4gbC5jYWxsKHQsbil9fSw4NzcyODooYyxsLHQpPT57dmFyIG49dCg5OTI3NSksZT10KDkwNjgxKTtjLmV4cG9ydHM9''@;'; put 'put ''dCg2NzA1Nyk/ZnVuY3Rpb24ocyxvLHUpe3JldHVybiBuLmYocyxvLGUoMSx1KSl9OmZ1bmN0aW9uKHMsbyx1KXtyZXR1cm4gc1tvXT11LHN9fSw0MDYzOTooYyxsLHQpPT57dmFyIG49dCgzODE2KS5kb2N1bWVudDtjLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LDE3MzQ6KGMsbCx0''@;'; put 'put ''KT0+e2MuZXhwb3J0cz0hdCg2NzA1NykmJiF0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkodCg2MjQ1NykoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSw0MDI2NjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10''@;'; put 'put ''KDI3Mzc1KS5zZXQ7Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXt2YXIgaSxmPW8uY29uc3RydWN0b3I7cmV0dXJuIGYhPT11JiYiZnVuY3Rpb24iPT10eXBlb2YgZiYmKGk9Zi5wcm90b3R5cGUpIT09dS5wcm90b3R5cGUmJm4oaSkmJmUmJmUocyxpKSxzfX0sOTcyNDI6Yz0+e2MuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihsLHQsbil7dmFyIGU9dm9pZCAwPT09bjtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gZT9sKCk6bC5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gZT9sKHRbMF0pOmwuY2FsbChuLHRbMF0pO2Nhc2UgMjpyZXR1cm4gZT9sKHRbMF0sdFsxXSk6bC5jYWxsKG4sdFswXSx0''@;'; put 'put ''WzFdKTtjYXNlIDM6cmV0dXJuIGU/bCh0WzBdLHRbMV0sdFsyXSk6bC5jYWxsKG4sdFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gZT9sKHRbMF0sdFsxXSx0WzJdLHRbM10pOmwuY2FsbChuLHRbMF0sdFsxXSx0WzJdLHRbM10pfXJldHVybiBsLmFwcGx5KG4sdCl9fSw0OTc5NzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5MjAzMik7Yy5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09bihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSw4NjU1NTooYyxsLHQpPT57dmFyIG49dCg4NzIzNCksZT10''@;'; put 'put ''KDg2MzE0KSgiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtjLmV4cG9ydHM9ZnVuY3Rpb24obyl7cmV0dXJuIHZvaWQgMCE9PW8mJihuLkFycmF5PT09b3x8c1tlXT09PW8pfX0sNDMwMjooYyxsLHQpPT57dmFyIG49dCg5MjAzMik7Yy5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0''@;'; put 'put ''aW9uKHMpe3JldHVybiJBcnJheSI9PW4ocyl9fSwxODM2NzooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT1NYXRoLmZsb29yO2MuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4hbihvKSYmaXNGaW5pdGUobykmJmUobyk9PT1vfX0sNTUyODY6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsKXty''@;'; put 'put ''ZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGw/bnVsbCE9PWw6ImZ1bmN0aW9uIj09dHlwZW9mIGx9fSw1NTM2NDooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDkyMDMyKSxzPXQoODYzMTQpKCJtYXRjaCIpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdTtyZXR1cm4gbihvKSYmKHZvaWQg''@;'; put 'put ''MCE9PSh1PW9bc10pPyEhdToiUmVnRXhwIj09ZShvKSl9fSwyODg1MTooYyxsLHQpPT57dmFyIG49dCgyNzAwNyk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyxvLHUpe3RyeXtyZXR1cm4gdT9zKG4obylbMF0sb1sxXSk6cyhvKX1jYXRjaChpKXt2YXIgZj1lLnJldHVybjt0aHJvdyB2b2lkIDAh''@;'; put 'put ''PT1mJiZuKGYuY2FsbChlKSksaX19fSw0OTk4ODooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI1MDMpLGU9dCg5MDY4MSkscz10KDIyOTQzKSxvPXt9O3QoODc3MjgpKG8sdCg4NjMxNCkoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGMuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbih1LGYsaSl7dS5wcm90b3R5cGU9bihvLHtuZXh0OmUoMSxpKX0pLHModSxmKyIgSXRlcmF0b3IiKX19LDQyOTIzOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0NDYxKSxlPXQoNDI5ODUpLHM9dCg3NzIzNCksbz10KDg3NzI4KSx1PXQoODcyMzQpLGY9dCg0OTk4OCksaT10''@;'; put 'put ''KDIyOTQzKSxwPXQoNDY4KSx5PXQoODYzMTQpKCJpdGVyYXRvciIpLHY9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSkseD0ia2V5cyIsRT0idmFsdWVzIixqPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2MuZXhwb3J0cz1mdW5jdGlvbih3LFIsRixCLGIsTyxTKXtmKEYsUixCKTt2YXIg''@;'; put 'put ''VixRLFksQz1mdW5jdGlvbihmdCl7aWYoIXYmJmZ0IGluIHR0KXJldHVybiB0dFtmdF07c3dpdGNoKGZ0KXtjYXNlIHg6Y2FzZSBFOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgRih0aGlzLGZ0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGKHRoaXMsZnQpfX0sSz1SKyIg''@;'; put 'put ''SXRlcmF0b3IiLFU9Yj09RSxaPSExLHR0PXcucHJvdG90eXBlLF89dHRbeV18fHR0WyJAQGl0ZXJhdG9yIl18fGImJnR0W2JdLG50PV98fEMoYiksc3Q9Yj9VP0MoImVudHJpZXMiKTpudDp2b2lkIDAsWD0iQXJyYXkiPT1SJiZ0dC5lbnRyaWVzfHxfO2lmKFgmJihZPXAoWC5jYWxsKG5ldyB3''@;'; put 'put ''KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmWS5uZXh0JiYoaShZLEssITApLCFuJiYiZnVuY3Rpb24iIT10eXBlb2YgWVt5XSYmbyhZLHksaikpLFUmJl8mJl8ubmFtZSE9PUUmJihaPSEwLG50PWZ1bmN0aW9uKCl7cmV0dXJuIF8uY2FsbCh0aGlzKX0pLCghbnx8UykmJih2fHxafHwhdHRbeV0p''@;'; put 'put ''JiZvKHR0LHksbnQpLHVbUl09bnQsdVtLXT1qLGIpaWYoVj17dmFsdWVzOlU/bnQ6QyhFKSxrZXlzOk8/bnQ6Qyh4KSxlbnRyaWVzOnN0fSxTKWZvcihRIGluIFYpUSBpbiB0dHx8cyh0dCxRLFZbUV0pO2Vsc2UgZShlLlArZS5GKih2fHxaKSxSLFYpO3JldHVybiBWfX0sNzQ2MjooYyxsLHQp''@;'; put 'put ''PT57dmFyIG49dCg4NjMxNCkoIml0ZXJhdG9yIiksZT0hMTt0cnl7dmFyIHM9WzddW25dKCk7cy5yZXR1cm49ZnVuY3Rpb24oKXtlPSEwfSxBcnJheS5mcm9tKHMsZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2h7fWMuZXhwb3J0cz1mdW5jdGlvbihvLHUpe2lmKCF1JiYhZSlyZXR1cm4hMTt2''@;'; put 'put ''YXIgZj0hMTt0cnl7dmFyIGk9WzddLHA9aVtuXSgpO3AubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOmY9ITB9fSxpW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHB9LG8oaSl9Y2F0Y2h7fXJldHVybiBmfX0sMTU0MzY6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybnt2YWx1ZTp0''@;'; put 'put ''LGRvbmU6ISFsfX19LDg3MjM0OmM9PntjLmV4cG9ydHM9e319LDQ0NjE6Yz0+e2MuZXhwb3J0cz0hMX0sMTMwODY6Yz0+e3ZhciBsPU1hdGguZXhwbTE7Yy5leHBvcnRzPSFsfHxsKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fGwoMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1sKC0y''@;'; put 'put ''ZS0xNyk/ZnVuY3Rpb24obil7cmV0dXJuIDA9PShuPStuKT9uOm4+LTFlLTYmJm48MWUtNj9uK24qbi8yOk1hdGguZXhwKG4pLTF9Omx9LDM0OTM0OihjLGwsdCk9Pnt2YXIgbj10KDYxODAxKSxlPU1hdGgucG93LHM9ZSgyLC01Miksbz1lKDIsLTIzKSx1PWUoMiwxMjcpKigyLW8pLGY9ZSgy''@;'; put 'put ''LC0xMjYpO2MuZXhwb3J0cz1NYXRoLmZyb3VuZHx8ZnVuY3Rpb24oeSl7dmFyIHgsRSx2PU1hdGguYWJzKHkpLGc9bih5KTtyZXR1cm4gdjxmP2cqKHYvZi9vKzEvcy0xL3MpKmYqbzooRT0oeD0oMStvL3MpKnYpLSh4LXYpKT51fHxFIT1FP2cqKDEvMCk6ZypFfX0sNDYyMDY6Yz0+e2MuZXhw''@;'; put 'put ''b3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSw2MTgwMTpjPT57Yy5leHBvcnRzPU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KXx8dCE9dD90OnQ8MD8tMToxfX0sODQ3Mjg6''@;'; put 'put ''KGMsbCx0KT0+e3ZhciBuPXQoOTM5NTMpKCJtZXRhIiksZT10KDU1Mjg2KSxzPXQoNzkxODEpLG89dCg5OTI3NSkuZix1PTAsZj1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxpPSF0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiBmKE9iamVjdC5wcmV2ZW50RXh0''@;'; put 'put ''ZW5zaW9ucyh7fSkpfSkscD1mdW5jdGlvbihFKXtvKEUsbix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX0seD1jLmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihFLGope2lmKCFlKEUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgRT9FOigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IEU/IlMiOiJQIikrRTtpZighcyhFLG4pKXtpZighZihFKSlyZXR1cm4iRiI7aWYoIWopcmV0dXJuIkUiO3AoRSl9cmV0dXJuIEVbbl0uaX0sZ2V0V2VhazpmdW5jdGlvbihFLGope2lmKCFzKEUsbikpe2lmKCFmKEUpKXJldHVybiEwO2lmKCFqKXJldHVybiExO3AoRSl9cmV0dXJuIEVbbl0u''@;'; put 'put ''d30sb25GcmVlemU6ZnVuY3Rpb24oRSl7cmV0dXJuIGkmJnguTkVFRCYmZihFKSYmIXMoRSxuKSYmcChFKSxFfX19LDUwMTMzOihjLGwsdCk9Pnt2YXIgbj10KDg4NDE2KSxlPXQoNDI5ODUpLHM9dCgzODI1KSgibWV0YWRhdGEiKSxvPXMuc3RvcmV8fChzLnN0b3JlPW5ldyh0KDMwMTQ3KSkp''@;'; put 'put ''LHU9ZnVuY3Rpb24oeCxFLGope3ZhciB3PW8uZ2V0KHgpO2lmKCF3KXtpZighailyZXR1cm47by5zZXQoeCx3PW5ldyBuKX12YXIgUj13LmdldChFKTtpZighUil7aWYoIWopcmV0dXJuO3cuc2V0KEUsUj1uZXcgbil9cmV0dXJuIFJ9O2MuZXhwb3J0cz17c3RvcmU6byxtYXA6dSxoYXM6ZnVu''@;'; put 'put ''Y3Rpb24oeCxFLGope3ZhciB3PXUoRSxqLCExKTtyZXR1cm4gdm9pZCAwIT09dyYmdy5oYXMoeCl9LGdldDpmdW5jdGlvbih4LEUsail7dmFyIHc9dShFLGosITEpO3JldHVybiB2b2lkIDA9PT13P3ZvaWQgMDp3LmdldCh4KX0sc2V0OmZ1bmN0aW9uKHgsRSxqLHcpe3Uoaix3LCEwKS5zZXQo''@;'; put 'put ''eCxFKX0sa2V5czpmdW5jdGlvbih4LEUpe3ZhciBqPXUoeCxFLCExKSx3PVtdO3JldHVybiBqJiZqLmZvckVhY2goZnVuY3Rpb24oUixGKXt3LnB1c2goRil9KSx3fSxrZXk6ZnVuY3Rpb24oeCl7cmV0dXJuIHZvaWQgMD09PXh8fCJzeW1ib2wiPT10eXBlb2YgeD94OlN0cmluZyh4KX0sZXhw''@;'; put 'put ''OmZ1bmN0aW9uKHgpe2UoZS5TLCJSZWZsZWN0Iix4KX19fSwzNTM0NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNjcwNTcpLGU9dCg0NzE4NCkscz10KDY0NTQ4KSxvPXQoMTQ2ODIpLHU9dCgyMDUwOCksZj10KDQ5Nzk3KSxpPU9iamVjdC5hc3NpZ247Yy5leHBvcnRzPSFpfHx0''@;'; put 'put ''KDc0MjUzKShmdW5jdGlvbigpe3ZhciBwPXt9LHk9e30sdj1TeW1ib2woKSxnPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCI7cmV0dXJuIHBbdl09NyxnLnNwbGl0KCIiKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3lbeF09eH0pLDchPWkoe30scClbdl18fE9iamVjdC5rZXlzKGkoe30seSkpLmpvaW4o''@;'; put 'put ''IiIpIT1nfSk/ZnVuY3Rpb24oeSx2KXtmb3IodmFyIGc9dSh5KSx4PWFyZ3VtZW50cy5sZW5ndGgsRT0xLGo9cy5mLHc9by5mO3g+RTspZm9yKHZhciBPLFI9Zihhcmd1bWVudHNbRSsrXSksRj1qP2UoUikuY29uY2F0KGooUikpOmUoUiksQj1GLmxlbmd0aCxiPTA7Qj5iOylPPUZbYisrXSwo''@;'; put 'put ''IW58fHcuY2FsbChSLE8pKSYmKGdbT109UltPXSk7cmV0dXJuIGd9Oml9LDQyNTAzOihjLGwsdCk9Pnt2YXIgbj10KDI3MDA3KSxlPXQoMzU1ODgpLHM9dCg3NDQzMCksbz10KDY5MzM1KSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxmPSJwcm90b3R5cGUiLGk9ZnVuY3Rpb24oKXt2YXIg''@;'; put 'put ''eCxwPXQoNjI0NTcpKCJpZnJhbWUiKSx5PXMubGVuZ3RoO2ZvcihwLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQoNDA2MzkpLmFwcGVuZENoaWxkKHApLHAuc3JjPSJqYXZhc2NyaXB0OiIsKHg9cC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCkseC53cml0ZSgiPHNjcmlwdD5kb2N1bWVu''@;'; put 'put ''dC5GPU9iamVjdDxcL3NjcmlwdD4iKSx4LmNsb3NlKCksaT14LkY7eS0tOylkZWxldGUgaVtmXVtzW3ldXTtyZXR1cm4gaSgpfTtjLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oeSx2KXt2YXIgZztyZXR1cm4gbnVsbCE9PXk/KHVbZl09bih5KSxnPW5ldyB1LHVbZl09bnVsbCxn''@;'; put 'put ''W29dPXkpOmc9aSgpLHZvaWQgMD09PXY/ZzplKGcsdil9fSw5OTI3NTooYyxsLHQpPT57dmFyIG49dCgyNzAwNyksZT10KDE3MzQpLHM9dCgyMTY4OSksbz1PYmplY3QuZGVmaW5lUHJvcGVydHk7bC5mPXQoNjcwNTcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihmLGkscCl7aWYo''@;'; put 'put ''bihmKSxpPXMoaSwhMCksbihwKSxlKXRyeXtyZXR1cm4gbyhmLGkscCl9Y2F0Y2h7fWlmKCJnZXQiaW4gcHx8InNldCJpbiBwKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIHAmJihmW2ldPXAudmFsdWUpLGZ9fSwzNTU4ODooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5OTI3NSksZT10KDI3MDA3KSxzPXQoNDcxODQpO2MuZXhwb3J0cz10KDY3MDU3KT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih1LGYpe2UodSk7Zm9yKHZhciB2LGk9cyhmKSxwPWkubGVuZ3RoLHk9MDtwPnk7KW4uZih1LHY9aVt5KytdLGZbdl0pO3Jl''@;'; put 'put ''dHVybiB1fX0sMTg2OTM6KGMsbCx0KT0+e3ZhciBuPXQoMTQ2ODIpLGU9dCg5MDY4MSkscz10KDIyMTEwKSxvPXQoMjE2ODkpLHU9dCg3OTE4MSksZj10KDE3MzQpLGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtsLmY9dCg2NzA1Nyk/aTpmdW5jdGlvbih5LHYpe2lmKHk9cyh5''@;'; put 'put ''KSx2PW8odiwhMCksZil0cnl7cmV0dXJuIGkoeSx2KX1jYXRjaHt9aWYodSh5LHYpKXJldHVybiBlKCFuLmYuY2FsbCh5LHYpLHlbdl0pfX0sMzkzMjc6KGMsbCx0KT0+e3ZhciBuPXQoMjIxMTApLGU9dCgyMDYxNikuZixzPXt9LnRvU3RyaW5nLG89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cm''@;'; put 'put ''JndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtjLmV4cG9ydHMuZj1mdW5jdGlvbihpKXtyZXR1cm4gbyYmIltvYmplY3QgV2luZG93XSI9PXMuY2FsbChpKT9mdW5jdGlvbihmKXt0cnl7cmV0dXJuIGUoZil9''@;'; put 'put ''Y2F0Y2h7cmV0dXJuIG8uc2xpY2UoKX19KGkpOmUobihpKSl9fSwyMDYxNjooYyxsLHQpPT57dmFyIG49dCg2MDE4OSksZT10KDc0NDMwKS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO2wuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxl''@;'; put 'put ''KX19LDY0NTQ4OihjLGwpPT57bC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDQ2ODooYyxsLHQpPT57dmFyIG49dCg3OTE4MSksZT10KDIwNTA4KSxzPXQoNjkzMzUpKCJJRV9QUk9UTyIpLG89T2JqZWN0LnByb3RvdHlwZTtjLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9m''@;'; put 'put ''fHxmdW5jdGlvbih1KXtyZXR1cm4gdT1lKHUpLG4odSxzKT91W3NdOiJmdW5jdGlvbiI9PXR5cGVvZiB1LmNvbnN0cnVjdG9yJiZ1IGluc3RhbmNlb2YgdS5jb25zdHJ1Y3Rvcj91LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp1IGluc3RhbmNlb2YgT2JqZWN0P286bnVsbH19LDYwMTg5OihjLGws''@;'; put 'put ''dCk9Pnt2YXIgbj10KDc5MTgxKSxlPXQoMjIxMTApLHM9dCg3OTMxNSkoITEpLG89dCg2OTMzNSkoIklFX1BST1RPIik7Yy5leHBvcnRzPWZ1bmN0aW9uKHUsZil7dmFyIHYsaT1lKHUpLHA9MCx5PVtdO2Zvcih2IGluIGkpdiE9byYmbihpLHYpJiZ5LnB1c2godik7Zm9yKDtmLmxlbmd0aD5w''@;'; put 'put ''OyluKGksdj1mW3ArK10pJiYofnMoeSx2KXx8eS5wdXNoKHYpKTtyZXR1cm4geX19LDQ3MTg0OihjLGwsdCk9Pnt2YXIgbj10KDYwMTg5KSxlPXQoNzQ0MzApO2MuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24obyl7cmV0dXJuIG4obyxlKX19LDE0NjgyOihjLGwpPT57bC5mPXt9LnBy''@;'; put 'put ''b3BlcnR5SXNFbnVtZXJhYmxlfSwzMzE2MDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDI1NjQ1KSxzPXQoNzQyNTMpO2MuZXhwb3J0cz1mdW5jdGlvbihvLHUpe3ZhciBmPShlLk9iamVjdHx8e30pW29dfHxPYmplY3Rbb10saT17fTtpW29dPXUoZiksbihuLlMrbi5GKnMoZnVuY3Rp''@;'; put 'put ''b24oKXtmKDEpfSksIk9iamVjdCIsaSl9fSw1NzY0MzooYyxsLHQpPT57dmFyIG49dCgyMDYxNiksZT10KDY0NTQ4KSxzPXQoMjcwMDcpLG89dCgzODE2KS5SZWZsZWN0O2MuZXhwb3J0cz1vJiZvLm93bktleXN8fGZ1bmN0aW9uKGYpe3ZhciBpPW4uZihzKGYpKSxwPWUuZjtyZXR1cm4gcD9p''@;'; put 'put ''LmNvbmNhdChwKGYpKTppfX0sNDc3NDM6KGMsbCx0KT0+e3ZhciBuPXQoMzgxNikucGFyc2VGbG9hdCxlPXQoMjk1OTkpLnRyaW07Yy5leHBvcnRzPTEvbih0KDg0NjQ0KSsiLTAiKSE9LTEvMD9mdW5jdGlvbihvKXt2YXIgdT1lKFN0cmluZyhvKSwzKSxmPW4odSk7cmV0dXJuIDA9PT1mJiYi''@;'; put 'put ''LSI9PXUuY2hhckF0KDApPy0wOmZ9Om59LDU1OTYwOihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLnBhcnNlSW50LGU9dCgyOTU5OSkudHJpbSxzPXQoODQ2NDQpLG89L15bLStdPzBbeFhdLztjLmV4cG9ydHM9OCE9PW4ocysiMDgiKXx8MjIhPT1uKHMrIjB4MTYiKT9mdW5jdGlvbihmLGkpe3Zh''@;'; put 'put ''ciBwPWUoU3RyaW5nKGYpLDMpO3JldHVybiBuKHAsaT4+PjB8fChvLnRlc3QocCk/MTY6MTApKX06bn0sOTA2ODE6Yz0+e2MuZXhwb3J0cz1mdW5jdGlvbihsLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZsKSxjb25maWd1cmFibGU6ISgyJmwpLHdyaXRhYmxlOiEoNCZsKSx2YWx1ZTp0fX19''@;'; put 'put ''LDI0NDA4OihjLGwsdCk9Pnt2YXIgbj10KDc3MjM0KTtjLmV4cG9ydHM9ZnVuY3Rpb24oZSxzLG8pe2Zvcih2YXIgdSBpbiBzKW4oZSx1LHNbdV0sbyk7cmV0dXJuIGV9fSw3NzIzNDooYyxsLHQpPT57dmFyIG49dCgzODE2KSxlPXQoODc3MjgpLHM9dCg3OTE4MSksbz10KDkzOTUzKSgic3Jj''@;'; put 'put ''IiksdT10KDQwMDE4KSxmPSJ0b1N0cmluZyIsaT0oIiIrdSkuc3BsaXQoZik7dCgyNTY0NSkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihwKXtyZXR1cm4gdS5jYWxsKHApfSwoYy5leHBvcnRzPWZ1bmN0aW9uKHAseSx2LGcpe3ZhciB4PSJmdW5jdGlvbiI9PXR5cGVvZiB2O3gmJihzKHYsIm5h''@;'; put 'put ''bWUiKXx8ZSh2LCJuYW1lIix5KSkscFt5XSE9PXYmJih4JiYocyh2LG8pfHxlKHYsbyxwW3ldPyIiK3BbeV06aS5qb2luKFN0cmluZyh5KSkpKSxwPT09bj9wW3ldPXY6Zz9wW3ldP3BbeV09djplKHAseSx2KTooZGVsZXRlIHBbeV0sZShwLHksdikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxm''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHUuY2FsbCh0aGlzKX0pfSwyNzc4NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDE0ODgpLGU9UmVnRXhwLnByb3RvdHlwZS5leGVjO2MuZXhwb3J0cz1mdW5jdGlvbihzLG8pe3ZhciB1''@;'; put 'put ''PXMuZXhlYztpZigiZnVuY3Rpb24iPT10eXBlb2YgdSl7dmFyIGY9dS5jYWxsKHMsbyk7aWYoIm9iamVjdCIhPXR5cGVvZiBmKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCIpO3Jl''@;'; put 'put ''dHVybiBmfWlmKCJSZWdFeHAiIT09bihzKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyIik7cmV0dXJuIGUuY2FsbChzLG8pfX0sMjExNjU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeSx2LG49dCg1MzIxOCksZT1S''@;'; put 'put ''ZWdFeHAucHJvdG90eXBlLmV4ZWMscz1TdHJpbmcucHJvdG90eXBlLnJlcGxhY2Usbz1lLHU9Imxhc3RJbmRleCIsZj0odj0vYiovZyxlLmNhbGwoeT0vYS8sImEiKSxlLmNhbGwodiwiYSIpLDAhPT15W3VdfHwwIT09dlt1XSksaT12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KGZ8fGkp''@;'; put 'put ''JiYobz1mdW5jdGlvbih2KXt2YXIgeCxFLGosdyxnPXRoaXM7cmV0dXJuIGkmJihFPW5ldyBSZWdFeHAoIl4iK2cuc291cmNlKyIkKD8hXFxzKSIsbi5jYWxsKGcpKSksZiYmKHg9Z1t1XSksaj1lLmNhbGwoZyx2KSxmJiZqJiYoZ1t1XT1nLmdsb2JhbD9qLmluZGV4K2pbMF0ubGVuZ3RoOngp''@;'; put 'put ''LGkmJmomJmoubGVuZ3RoPjEmJnMuY2FsbChqWzBdLEUsZnVuY3Rpb24oKXtmb3Iodz0xO3c8YXJndW1lbnRzLmxlbmd0aC0yO3crKyl2b2lkIDA9PT1hcmd1bWVudHNbd10mJihqW3ddPXZvaWQgMCl9KSxqfSksYy5leHBvcnRzPW99LDI3MTk1OmM9PntjLmV4cG9ydHM9T2JqZWN0LmlzfHxm''@;'; put 'put ''dW5jdGlvbih0LG4pe3JldHVybiB0PT09bj8wIT09dHx8MS90PT0xL246dCE9dCYmbiE9bn19LDI3Mzc1OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoMjcwMDcpLHM9ZnVuY3Rpb24obyx1KXtpZihlKG8pLCFuKHUpJiZudWxsIT09dSl0aHJvdyBUeXBlRXJyb3IodSsiOiBjYW4ndCBz''@;'; put 'put ''ZXQgYXMgcHJvdG90eXBlISIpfTtjLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24obyx1LGYpe3RyeXsoZj10KDc0MSkoRnVuY3Rpb24uY2FsbCx0KDE4NjkzKS5mKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCwy''@;'; put 'put ''KSkobyxbXSksdT0hKG8gaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2h7dT0hMH1yZXR1cm4gZnVuY3Rpb24ocCx5KXtyZXR1cm4gcyhwLHkpLHU/cC5fX3Byb3RvX189eTpmKHAseSkscH19KHt9LCExKTp2b2lkIDApLGNoZWNrOnN9fSwyOTc0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49''@;'; put 'put ''dCgzODE2KSxlPXQoOTkyNzUpLHM9dCg2NzA1Nyksbz10KDg2MzE0KSgic3BlY2llcyIpO2MuZXhwb3J0cz1mdW5jdGlvbih1KXt2YXIgZj1uW3VdO3MmJmYmJiFmW29dJiZlLmYoZixvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSwyMjk0MzooYyxs''@;'; put 'put ''LHQpPT57dmFyIG49dCg5OTI3NSkuZixlPXQoNzkxODEpLHM9dCg4NjMxNCkoInRvU3RyaW5nVGFnIik7Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSxmKXtvJiYhZShvPWY/bzpvLnByb3RvdHlwZSxzKSYmbihvLHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp1fSl9fSw2OTMzNTooYyxsLHQpPT57''@;'; put 'put ''dmFyIG49dCgzODI1KSgia2V5cyIpLGU9dCg5Mzk1Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuW3NdfHwobltzXT1lKHMpKX19LDM4MjU6KGMsbCx0KT0+e3ZhciBuPXQoMjU2NDUpLGU9dCgzODE2KSxzPSJfX2NvcmUtanNfc2hhcmVkX18iLG89ZVtzXXx8KGVbc109e30pOyhj''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odSxmKXtyZXR1cm4gb1t1XXx8KG9bdV09dm9pZCAwIT09Zj9mOnt9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246bi52ZXJzaW9uLG1vZGU6dCg0NDYxKT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiJceGE5IDIwMjAgRGVuaXMgUHVzaGthcmV2''@;'; put 'put ''ICh6bG9pcm9jay5ydSkifSl9LDU4MzY0OihjLGwsdCk9Pnt2YXIgbj10KDI3MDA3KSxlPXQoMjQ5NjMpLHM9dCg4NjMxNCkoInNwZWNpZXMiKTtjLmV4cG9ydHM9ZnVuY3Rpb24obyx1KXt2YXIgaSxmPW4obykuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWZ8fG51bGw9PShpPW4oZilb''@;'; put 'put ''c10pP3U6ZShpKX19LDc3NzE3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg3NDI1Myk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7cmV0dXJuISFlJiZuKGZ1bmN0aW9uKCl7cz9lLmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6ZS5jYWxsKG51bGwpfSl9fSwyNDQ5NjooYyxsLHQp''@;'; put 'put ''PT57dmFyIG49dCg4MTQ2NyksZT10KDkxMzU1KTtjLmV4cG9ydHM9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKG8sdSl7dmFyIHksdixmPVN0cmluZyhlKG8pKSxpPW4odSkscD1mLmxlbmd0aDtyZXR1cm4gaTwwfHxpPj1wP3M/IiI6dm9pZCAwOih5PWYuY2hhckNvZGVBdChpKSk8NTUy''@;'; put 'put ''OTZ8fHk+NTYzMTl8fGkrMT09PXB8fCh2PWYuY2hhckNvZGVBdChpKzEpKTw1NjMyMHx8dj41NzM0Mz9zP2YuY2hhckF0KGkpOnk6cz9mLnNsaWNlKGksaSsyKTp2LTU2MzIwKyh5LTU1Mjk2PDwxMCkrNjU1MzZ9fX0sNDIwOTQ6KGMsbCx0KT0+e3ZhciBuPXQoNTUzNjQpLGU9dCg5MTM1NSk7''@;'; put 'put ''Yy5leHBvcnRzPWZ1bmN0aW9uKHMsbyx1KXtpZihuKG8pKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrdSsiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoZShzKSl9fSwyOTM5NTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDc0MjUzKSxzPXQoOTEzNTUpLG89''@;'; put 'put ''LyIvZyx1PWZ1bmN0aW9uKGYsaSxwLHkpe3ZhciB2PVN0cmluZyhzKGYpKSxnPSI8IitpO3JldHVybiIiIT09cCYmKGcrPSIgIitwKyc9IicrU3RyaW5nKHkpLnJlcGxhY2UobywiJnF1b3Q7IikrJyInKSxnKyI+Iit2KyI8LyIraSsiPiJ9O2MuZXhwb3J0cz1mdW5jdGlvbihmLGkpe3ZhciBw''@;'; put 'put ''PXt9O3BbZl09aSh1KSxuKG4uUCtuLkYqZShmdW5jdGlvbigpe3ZhciB5PSIiW2ZdKCciJyk7cmV0dXJuIHkhPT15LnRvTG93ZXJDYXNlKCl8fHkuc3BsaXQoJyInKS5sZW5ndGg+M30pLCJTdHJpbmciLHApfX0sNjg1OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDgxNDY3KSxl''@;'; put 'put ''PXQoOTEzNTUpO2MuZXhwb3J0cz1mdW5jdGlvbihvKXt2YXIgdT1TdHJpbmcoZSh0aGlzKSksZj0iIixpPW4obyk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHUrPXUpKTEmaSYmKGYrPXUpO3Jl''@;'; put 'put ''dHVybiBmfX0sMjk1OTk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg5MTM1NSkscz10KDc0MjUzKSxvPXQoODQ2NDQpLHU9IlsiK28rIl0iLGk9UmVnRXhwKCJeIit1K3UrIioiKSxwPVJlZ0V4cCh1K3UrIiokIikseT1mdW5jdGlvbihnLHgsRSl7dmFyIGo9e30sdz1zKGZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuISFvW2ddKCl8fCJcdTIwMGJceDg1IiE9Ilx1MjAwYlx4ODUiW2ddKCl9KSxSPWpbZ109dz94KHYpOm9bZ107RSYmKGpbRV09UiksbihuLlArbi5GKncsIlN0cmluZyIsail9LHY9eS50cmltPWZ1bmN0aW9uKGcseCl7cmV0dXJuIGc9U3RyaW5nKGUoZykpLDEmeCYmKGc9Zy5y''@;'; put 'put ''ZXBsYWNlKGksIiIpKSwyJngmJihnPWcucmVwbGFjZShwLCIiKSksZ307Yy5leHBvcnRzPXl9LDg0NjQ0OmM9PntjLmV4cG9ydHM9Ilx0XG5cdlxmXHIgXHhhMFx1MTY4MFx1MTgwZVx1MjAwMFx1MjAwMVx1MjAwMlx1MjAwM1x1MjAwNFx1MjAwNVx1MjAwNlx1MjAwN1x1MjAwOFx1MjAwOVx1''@;'; put 'put ''MjAwYVx1MjAyZlx1MjA1Zlx1MzAwMFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDkyMzM3OihjLGwsdCk9Pnt2YXIgbj10KDgxNDY3KSxlPU1hdGgubWF4LHM9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKG8sdSl7cmV0dXJuKG89bihvKSk8MD9lKG8rdSwwKTpzKG8sdSl9fSw4MTQ2NzpjPT57''@;'; put 'put ''dmFyIGw9TWF0aC5jZWlsLHQ9TWF0aC5mbG9vcjtjLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGlzTmFOKG49K24pPzA6KG4+MD90OmwpKG4pfX0sMjIxMTA6KGMsbCx0KT0+e3ZhciBuPXQoNDk3OTcpLGU9dCg5MTM1NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBuKGUocykp''@;'; put 'put ''fX0sMTA4NzU6KGMsbCx0KT0+e3ZhciBuPXQoODE0NjcpLGU9TWF0aC5taW47Yy5leHBvcnRzPWZ1bmN0aW9uKHMpe3JldHVybiBzPjA/ZShuKHMpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSwyMDUwODooYyxsLHQpPT57dmFyIG49dCg5MTM1NSk7Yy5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVy''@;'; put 'put ''biBPYmplY3QobihlKSl9fSwyMTY4OTooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7Yy5leHBvcnRzPWZ1bmN0aW9uKGUscyl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIG8sdTtpZihzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpfHwiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2Yobz1lLnZhbHVlT2YpJiYhbih1PW8uY2FsbChlKSl8fCFzJiYiZnVuY3Rpb24iPT10eXBlb2Yobz1lLnRvU3RyaW5nKSYmIW4odT1vLmNhbGwoZSkpKXJldHVybiB1O3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw5''@;'; put 'put ''Mzk1MzpjPT57dmFyIGw9MCx0PU1hdGgucmFuZG9tKCk7Yy5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiJTeW1ib2woIi5jb25jYXQodm9pZCAwPT09bj8iIjpuLCIpXyIsKCsrbCt0KS50b1N0cmluZygzNikpfX0sMTYxNjooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7Yy5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKGUscyl7aWYoIW4oZSl8fGUuX3QhPT1zKXRocm93IFR5cGVFcnJvcigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3MrIiByZXF1aXJlZCEiKTtyZXR1cm4gZX19LDM2MDc0OihjLGwsdCk9Pnt2YXIgbj10KDM4MTYpLGU9dCgyNTY0NSkscz10KDQ0NjEpLG89dCgyODc4NyksdT10''@;'; put 'put ''KDk5Mjc1KS5mO2MuZXhwb3J0cz1mdW5jdGlvbihmKXt2YXIgaT1lLlN5bWJvbHx8KGUuU3ltYm9sPXM/e306bi5TeW1ib2x8fHt9KTsiXyIhPWYuY2hhckF0KDApJiYhKGYgaW4gaSkmJnUoaSxmLHt2YWx1ZTpvLmYoZil9KX19LDI4Nzg3OihjLGwsdCk9PntsLmY9dCg4NjMxNCl9LDg2MzE0''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDM4MjUpKCJ3a3MiKSxlPXQoOTM5NTMpLHM9dCgzODE2KS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgczsoYy5leHBvcnRzPWZ1bmN0aW9uKGYpe3JldHVybiBuW2ZdfHwobltmXT1vJiZzW2ZdfHwobz9zOmUpKCJTeW1ib2wuIitmKSl9KS5zdG9yZT1u''@;'; put 'put ''fSw2OTAwMjooYyxsLHQpPT57dmFyIG49dCg0MTQ4OCksZT10KDg2MzE0KSgiaXRlcmF0b3IiKSxzPXQoODcyMzQpO2MuZXhwb3J0cz10KDI1NjQ1KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihvKXtpZihudWxsIT1vKXJldHVybiBvW2VdfHxvWyJAQGl0ZXJhdG9yIl18fHNbbihvKV19''@;'; put 'put ''fSwzMmUzOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUCwiQXJyYXkiLHtjb3B5V2l0aGluOnQoNTIxNil9KSx0KDE3NzIyKSgiY29weVdpdGhpbiIpfSwxNTc0NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgxMDA1MCkoNCk7bihuLlArbi5GKiF0KDc3''@;'; put 'put ''NzE3KShbXS5ldmVyeSwhMCksIkFycmF5Iix7ZXZlcnk6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50c1sxXSl9fSl9LDQ4OTc3OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUCwiQXJyYXkiLHtmaWxsOnQoNDY4NTIpfSksdCgxNzcyMikoImZpbGwiKX0sOTg4Mzc6''@;'; put 'put ''KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDIpO24obi5QK24uRiohdCg3NzcxNykoW10uZmlsdGVyLCEwKSwiQXJyYXkiLHtmaWx0ZXI6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50c1sxXSl9fSl9LDk0ODk5OihjLGwsdCk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSg2KSxzPSJmaW5kSW5kZXgiLG89ITA7cyBpbltdJiZBcnJheSgxKVtzXShmdW5jdGlvbigpe289ITF9KSxuKG4uUCtuLkYqbywiQXJyYXkiLHtmaW5kSW5kZXg6ZnVuY3Rpb24oZil7cmV0dXJuIGUodGhpcyxmLGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSx0KDE3NzIyKShzKX0sNTIzMTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDUpLHM9ImZpbmQiLG89ITA7cyBpbltdJiZBcnJheSgxKVtzXShmdW5jdGlvbigpe289ITF9KSxuKG4uUCtu''@;'; put 'put ''LkYqbywiQXJyYXkiLHtmaW5kOmZ1bmN0aW9uKGYpe3JldHVybiBlKHRoaXMsZixhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSksdCgxNzcyMikocyl9LDI0MzM2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSgwKSxzPXQo''@;'; put 'put ''Nzc3MTcpKFtdLmZvckVhY2gsITApO24obi5QK24uRiohcywiQXJyYXkiLHtmb3JFYWNoOmZ1bmN0aW9uKHUpe3JldHVybiBlKHRoaXMsdSxhcmd1bWVudHNbMV0pfX0pfSwzMDUyMjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNzQxKSxlPXQoNDI5ODUpLHM9dCgyMDUwOCksbz10''@;'; put 'put ''KDI4ODUxKSx1PXQoODY1NTUpLGY9dCgxMDg3NSksaT10KDkyODExKSxwPXQoNjkwMDIpO2UoZS5TK2UuRiohdCg3NDYyKShmdW5jdGlvbih5KXtBcnJheS5mcm9tKHkpfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbih2KXt2YXIgQixiLE8sUyxnPXModikseD0iZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''dGhpcz90aGlzOkFycmF5LEU9YXJndW1lbnRzLmxlbmd0aCxqPUU+MT9hcmd1bWVudHNbMV06dm9pZCAwLHc9dm9pZCAwIT09aixSPTAsRj1wKGcpO2lmKHcmJihqPW4oaixFPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09Rnx8eD09QXJyYXkmJnUoRikpZm9yKGI9bmV3IHgoQj1m''@;'; put 'put ''KGcubGVuZ3RoKSk7Qj5SO1IrKylpKGIsUix3P2ooZ1tSXSxSKTpnW1JdKTtlbHNlIGZvcihTPUYuY2FsbChnKSxiPW5ldyB4OyEoTz1TLm5leHQoKSkuZG9uZTtSKyspaShiLFIsdz9vKFMsaixbTy52YWx1ZSxSXSwhMCk6Ty52YWx1ZSk7cmV0dXJuIGIubGVuZ3RoPVIsYn19KX0sMjMzNjk6''@;'; put 'put ''KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNzkzMTUpKCExKSxzPVtdLmluZGV4T2Ysbz0hIXMmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKG98fCF0KDc3NzE3KShzKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihmKXtyZXR1cm4gbz9zLmFw''@;'; put 'put ''cGx5KHRoaXMsYXJndW1lbnRzKXx8MDplKHRoaXMsZixhcmd1bWVudHNbMV0pfX0pfSwyMDc3NDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIkFycmF5Iix7aXNBcnJheTp0KDQzMDIpfSl9LDU2OTk3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgxNzcyMiksZT10KDE1''@;'; put 'put ''NDM2KSxzPXQoODcyMzQpLG89dCgyMjExMCk7Yy5leHBvcnRzPXQoNDI5MjMpKEFycmF5LCJBcnJheSIsZnVuY3Rpb24odSxmKXt0aGlzLl90PW8odSksdGhpcy5faT0wLHRoaXMuX2s9Zn0sZnVuY3Rpb24oKXt2YXIgdT10aGlzLl90LGY9dGhpcy5fayxpPXRoaXMuX2krKztyZXR1cm4hdXx8''@;'; put 'put ''aT49dS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGUoMSkpOmUoMCwia2V5cyI9PWY/aToidmFsdWVzIj09Zj91W2ldOltpLHVbaV1dKX0sInZhbHVlcyIpLHMuQXJndW1lbnRzPXMuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sODc4NDI6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMjIxMTApLHM9W10uam9pbjtuKG4uUCtuLkYqKHQoNDk3OTcpIT1PYmplY3R8fCF0KDc3NzE3KShzKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbih1KXtyZXR1cm4gcy5jYWxsKGUodGhpcyksdm9pZCAwPT09dT8iLCI6dSl9fSl9LDk5NTY0Oihj''@;'; put 'put ''LGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDIyMTEwKSxzPXQoODE0NjcpLG89dCgxMDg3NSksdT1bXS5sYXN0SW5kZXhPZixmPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGZ8fCF0KDc3NzE3KSh1KSksIkFycmF5Iix7bGFzdEluZGV4''@;'; put 'put ''T2Y6ZnVuY3Rpb24ocCl7aWYoZilyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHk9ZSh0aGlzKSx2PW8oeS5sZW5ndGgpLGc9di0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihnPU1hdGgubWluKGcscyhhcmd1bWVudHNbMV0pKSksZzwwJiYoZz12K2cpO2c+PTA7Zy0t''@;'; put 'put ''KWlmKGcgaW4geSYmeVtnXT09PXApcmV0dXJuIGd8fDA7cmV0dXJuLTF9fSl9LDE5MzcxOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwMDUwKSgxKTtuKG4uUCtuLkYqIXQoNzc3MTcpKFtdLm1hcCwhMCksIkFycmF5Iix7bWFwOmZ1bmN0aW9uKG8pe3JldHVy''@;'; put 'put ''biBlKHRoaXMsbyxhcmd1bWVudHNbMV0pfX0pfSw1ODI5NTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCg5MjgxMSk7bihuLlMrbi5GKnQoNzQyNTMpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcygpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwocylpbnN0YW5jZW9mIHMp''@;'; put 'put ''fSksIkFycmF5Iix7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIG89MCx1PWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkodSk7dT5vOyllKGYsbyxhcmd1bWVudHNbbysrXSk7cmV0dXJuIGYubGVuZ3RoPXUsZn19KX0sMzc1MDooYyxsLHQp''@;'; put 'put ''PT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgzNzYyOCk7bihuLlArbi5GKiF0KDc3NzE3KShbXS5yZWR1Y2VSaWdodCwhMCksIkFycmF5Iix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19''@;'; put 'put ''KX0sMzMwNTc6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMzc2MjgpO24obi5QK24uRiohdCg3NzcxNykoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24obyl7cmV0dXJuIGUodGhpcyxvLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFd''@;'; put 'put ''LCExKX19KX0sNTAxMTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNDA2MzkpLHM9dCg5MjAzMiksbz10KDkyMzM3KSx1PXQoMTA4NzUpLGY9W10uc2xpY2U7bihuLlArbi5GKnQoNzQyNTMpKGZ1bmN0aW9uKCl7ZSYmZi5jYWxsKGUpfSksIkFycmF5Iix7c2xp''@;'; put 'put ''Y2U6ZnVuY3Rpb24ocCx5KXt2YXIgdj11KHRoaXMubGVuZ3RoKSxnPXModGhpcyk7aWYoeT12b2lkIDA9PT15P3Y6eSwiQXJyYXkiPT1nKXJldHVybiBmLmNhbGwodGhpcyxwLHkpO2Zvcih2YXIgeD1vKHAsdiksRT1vKHksdiksaj11KEUteCksdz1uZXcgQXJyYXkoaiksUj0wO1I8ajtSKysp''@;'; put 'put ''d1tSXT0iU3RyaW5nIj09Zz90aGlzLmNoYXJBdCh4K1IpOnRoaXNbeCtSXTtyZXR1cm4gd319KX0sMjY3NzM6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMTAwNTApKDMpO24obi5QK24uRiohdCg3NzcxNykoW10uc29tZSwhMCksIkFycmF5Iix7c29tZTpmdW5j''@;'; put 'put ''dGlvbihvKXtyZXR1cm4gZSh0aGlzLG8sYXJndW1lbnRzWzFdKX19KX0sMjAwNzU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoMjQ5NjMpLHM9dCgyMDUwOCksbz10KDc0MjUzKSx1PVtdLnNvcnQsZj1bMSwyLDNdO24obi5QK24uRioobyhmdW5jdGlvbigpe2Yu''@;'; put 'put ''c29ydCh2b2lkIDApfSl8fCFvKGZ1bmN0aW9uKCl7Zi5zb3J0KG51bGwpfSl8fCF0KDc3NzE3KSh1KSksIkFycmF5Iix7c29ydDpmdW5jdGlvbihwKXtyZXR1cm4gdm9pZCAwPT09cD91LmNhbGwocyh0aGlzKSk6dS5jYWxsKHModGhpcyksZShwKSl9fSl9LDMxODQyOihjLGwsdCk9Pnt0KDI5''@;'; put 'put ''NzQpKCJBcnJheSIpfSw4MTgyMjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIkRhdGUiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sOTEwMzE6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg1MzUzNyk7bihuLlArbi5GKihEYXRlLnBy''@;'; put 'put ''b3RvdHlwZS50b0lTT1N0cmluZyE9PWUpLCJEYXRlIix7dG9JU09TdHJpbmc6ZX0pfSwxOTk3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgyMDUwOCkscz10KDIxNjg5KTtuKG4uUCtuLkYqdCg3NDI1MykoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBE''@;'; put 'put ''YXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLCJEYXRlIix7dG9KU09OOmZ1bmN0aW9uKHUpe3ZhciBmPWUodGhpcyksaT1zKGYpO3JldHVybiJudW1iZXIiIT10eXBlb2YgaXx8aXNG''@;'; put 'put ''aW5pdGUoaSk/Zi50b0lTT1N0cmluZygpOm51bGx9fSl9LDQxNTYwOihjLGwsdCk9Pnt2YXIgbj10KDg2MzE0KSgidG9QcmltaXRpdmUiKSxlPURhdGUucHJvdG90eXBlO24gaW4gZXx8dCg4NzcyOCkoZSxuLHQoODcwKSl9LDQ2MzMxOihjLGwsdCk9Pnt2YXIgbj1EYXRlLnByb3RvdHlwZSxl''@;'; put 'put ''PSJJbnZhbGlkIERhdGUiLHM9InRvU3RyaW5nIixvPW5bc10sdT1uLmdldFRpbWU7bmV3IERhdGUoTmFOKSsiIiE9ZSYmdCg3NzIzNCkobixzLGZ1bmN0aW9uKCl7dmFyIGk9dS5jYWxsKHRoaXMpO3JldHVybiBpPT1pP28uY2FsbCh0aGlzKTplfSl9LDM5NzMwOihjLGwsdCk9Pnt2YXIgbj10''@;'; put 'put ''KDQyOTg1KTtuKG4uUCwiRnVuY3Rpb24iLHtiaW5kOnQoMzQzOTgpfSl9LDQ4Mzc3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg1NTI4NiksZT10KDQ2OCkscz10KDg2MzE0KSgiaGFzSW5zdGFuY2UiKSxvPUZ1bmN0aW9uLnByb3RvdHlwZTtzIGluIG98fHQoOTkyNzUpLmYobyxz''@;'; put 'put ''LHt2YWx1ZTpmdW5jdGlvbih1KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IW4odSkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB1IGluc3RhbmNlb2YgdGhpcztmb3IoO3U9ZSh1KTspaWYodGhpcy5wcm90b3R5cGU9PT11KXJldHVybiEwO3JldHVybiExfX0p''@;'; put 'put ''fSw2MDU5OihjLGwsdCk9Pnt2YXIgbj10KDk5Mjc1KS5mLGU9RnVuY3Rpb24ucHJvdG90eXBlLHM9L15ccypmdW5jdGlvbiAoW14gKF0qKS8sbz0ibmFtZSI7byBpbiBlfHx0KDY3MDU3KSYmbihlLG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuKCIiK3RoaXMp''@;'; put 'put ''Lm1hdGNoKHMpWzFdfWNhdGNoe3JldHVybiIifX19KX0sODg0MTY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDk4MjQpLGU9dCgxNjE2KSxzPSJNYXAiO2MuZXhwb3J0cz10KDQ1Nzk1KShzLGZ1bmN0aW9uKG8pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvKHRoaXMsYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih1KXt2YXIgZj1uLmdldEVudHJ5KGUodGhpcyxzKSx1KTtyZXR1cm4gZiYmZi52fSxzZXQ6ZnVuY3Rpb24odSxmKXtyZXR1cm4gbi5kZWYoZSh0aGlzLHMpLDA9PT11PzA6dSxmKX19LG4sITApfSw3NjUw''@;'; put 'put ''MzooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQ2MjA2KSxzPU1hdGguc3FydCxvPU1hdGguYWNvc2g7bihuLlMrbi5GKiEobyYmNzEwPT1NYXRoLmZsb29yKG8oTnVtYmVyLk1BWF9WQUxVRSkpJiZvKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihmKXtyZXR1cm4oZj0r''@;'; put 'put ''Zik8MT9OYU46Zj45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhmKStNYXRoLkxOMjplKGYtMStzKGYtMSkqcyhmKzEpKX19KX0sNjY3ODY6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5hc2luaDtuKG4uUytuLkYqIShlJiYxL2UoMCk+MCksIk1hdGgiLHthc2luaDpmdW5jdGlv''@;'; put 'put ''biBzKG8pe3JldHVybiBpc0Zpbml0ZShvPStvKSYmMCE9bz9vPDA/LXMoLW8pOk1hdGgubG9nKG8rTWF0aC5zcXJ0KG8qbysxKSk6b319KX0sNTA5MzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5hdGFuaDtuKG4uUytuLkYqIShlJiYxL2UoLTApPDApLCJNYXRoIix7YXRhbmg6''@;'; put 'put ''ZnVuY3Rpb24obyl7cmV0dXJuIDA9PShvPStvKT9vOk1hdGgubG9nKCgxK28pLygxLW8pKS8yfX0pfSw1NzUyNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDYxODAxKTtuKG4uUywiTWF0aCIse2NicnQ6ZnVuY3Rpb24obyl7cmV0dXJuIGUobz0rbykqTWF0aC5wb3coTWF0aC5hYnMo''@;'; put 'put ''byksMS8zKX19KX0sMjE1OTE6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7Y2x6MzI6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+Pj49MCk/MzEtTWF0aC5mbG9vcihNYXRoLmxvZyhzKy41KSpNYXRoLkxPRzJFKTozMn19KX0sOTA3MzooYyxsLHQpPT57dmFyIG49dCg0Mjk4''@;'; put 'put ''NSksZT1NYXRoLmV4cDtuKG4uUywiTWF0aCIse2Nvc2g6ZnVuY3Rpb24obyl7cmV0dXJuKGUobz0rbykrZSgtbykpLzJ9fSl9LDgwMzQ3OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMTMwODYpO24obi5TK24uRiooZSE9TWF0aC5leHBtMSksIk1hdGgiLHtleHBtMTplfSl9LDMwNTc5''@;'; put 'put ''OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiTWF0aCIse2Zyb3VuZDp0KDM0OTM0KX0pfSw0NjY5OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPU1hdGguYWJzO24obi5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24obyx1KXtmb3IodmFyIHYsZyxmPTAsaT0wLHA9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aCx5PTA7aTxwOyl5PCh2PWUoYXJndW1lbnRzW2krK10pKT8oZj1mKihnPXkvdikqZysxLHk9dik6Zis9dj4wPyhnPXYveSkqZzp2O3JldHVybiB5PT09MS8wPzEvMDp5Kk1hdGguc3FydChmKX19KX0sNjc3MTA6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9TWF0aC5pbXVsO24o''@;'; put 'put ''bi5TK24uRip0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybi01IT1lKDQyOTQ5NjcyOTUsNSl8fDIhPWUubGVuZ3RofSksIk1hdGgiLHtpbXVsOmZ1bmN0aW9uKG8sdSl7dmFyIGY9NjU1MzUsaT0rbyxwPSt1LHk9ZiZpLHY9ZiZwO3JldHVybiAwfHkqdisoKGYmaT4+PjE2KSp2K3kqKGYmcD4+''@;'; put 'put ''PjE2KTw8MTY+Pj4wKX19KX0sNDU3ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7bG9nMTA6ZnVuY3Rpb24ocyl7cmV0dXJuIE1hdGgubG9nKHMpKk1hdGguTE9HMTBFfX0pfSwzMzUxNDooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk1hdGgiLHtsb2cx''@;'; put 'put ''cDp0KDQ2MjA2KX0pfSw5OTk3ODooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKHMpe3JldHVybiBNYXRoLmxvZyhzKS9NYXRoLkxOMn19KX0sNTg0NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7c2lnbjp0KDYxODAx''@;'; put 'put ''KX0pfSw4Njk0NjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDEzMDg2KSxzPU1hdGguZXhwO24obi5TK24uRip0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKHUpe3JldHVybiBNYXRoLmFicyh1''@;'; put 'put ''PSt1KTwxPyhlKHUpLWUoLXUpKS8yOihzKHUtMSktcygtdS0xKSkqKE1hdGguRS8yKX19KX0sMzUwNjg6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgxMzA4Nikscz1NYXRoLmV4cDtuKG4uUywiTWF0aCIse3Rhbmg6ZnVuY3Rpb24odSl7dmFyIGY9ZSh1PSt1KSxpPWUoLXUpO3JldHVy''@;'; put 'put ''biBmPT0xLzA/MTppPT0xLzA/LTE6KGYtaSkvKHModSkrcygtdSkpfX0pfSw0MTM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJNYXRoIix7dHJ1bmM6ZnVuY3Rpb24ocyl7cmV0dXJuKHM+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkocyl9fSl9LDExMjQ2OihjLGwsdCk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIG49dCgzODE2KSxlPXQoNzkxODEpLHM9dCg5MjAzMiksbz10KDQwMjY2KSx1PXQoMjE2ODkpLGY9dCg3NDI1MyksaT10KDIwNjE2KS5mLHA9dCgxODY5MykuZix5PXQoOTkyNzUpLmYsdj10KDI5NTk5KS50cmltLGc9Ik51bWJlciIseD1uW2ddLEU9eCxqPXgucHJvdG90''@;'; put 'put ''eXBlLHc9cyh0KDQyNTAzKShqKSk9PWcsUj0idHJpbSJpbiBTdHJpbmcucHJvdG90eXBlLEY9ZnVuY3Rpb24oUyl7dmFyIEM9dShTLCExKTtpZigic3RyaW5nIj09dHlwZW9mIEMmJkMubGVuZ3RoPjIpe3ZhciBVLFosdHQsSz0oQz1SP0MudHJpbSgpOnYoQywzKSkuY2hhckNvZGVBdCgwKTtp''@;'; put 'put ''Zig0Mz09PUt8fDQ1PT09Syl7aWYoODg9PT0oVT1DLmNoYXJDb2RlQXQoMikpfHwxMjA9PT1VKXJldHVybiBOYU59ZWxzZSBpZig0OD09PUspe3N3aXRjaChDLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpaPTIsdHQ9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpaPTgsdHQ9NTU7''@;'; put 'put ''YnJlYWs7ZGVmYXVsdDpyZXR1cm4rQ31mb3IodmFyIFgsXz1DLnNsaWNlKDIpLG50PTAsc3Q9Xy5sZW5ndGg7bnQ8c3Q7bnQrKylpZigoWD1fLmNoYXJDb2RlQXQobnQpKTw0OHx8WD50dClyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChfLFopfX1yZXR1cm4rQ307aWYoIXgoIiAwbzEiKXx8''@;'; put 'put ''IXgoIjBiMSIpfHx4KCIrMHgxIikpe3g9ZnVuY3Rpb24oQyl7dmFyIEs9YXJndW1lbnRzLmxlbmd0aDwxPzA6QyxVPXRoaXM7cmV0dXJuIFUgaW5zdGFuY2VvZiB4JiYodz9mKGZ1bmN0aW9uKCl7ai52YWx1ZU9mLmNhbGwoVSl9KTpzKFUpIT1nKT9vKG5ldyBFKEYoSykpLFUseCk6RihLKX07''@;'; put 'put ''Zm9yKHZhciBPLEI9dCg2NzA1Nyk/aShFKToiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVH''@;'; put 'put ''RVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXIiLnNwbGl0KCIsIiksYj0wO0IubGVuZ3RoPmI7YisrKWUoRSxPPUJbYl0pJiYhZSh4LE8pJiZ5KHgsTyxwKEUsTykpO3gucHJvdG90eXBlPWosai5jb25zdHJ1Y3Rvcj14LHQoNzcyMzQpKG4sZyx4KX19LDc1OTcyOihjLGwsdCk9Pnt2''@;'; put 'put ''YXIgbj10KDQyOTg1KTtuKG4uUywiTnVtYmVyIix7RVBTSUxPTjpNYXRoLnBvdygyLC01Mil9KX0sNTM0MDM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgzODE2KS5pc0Zpbml0ZTtuKG4uUywiTnVtYmVyIix7aXNGaW5pdGU6ZnVuY3Rpb24obyl7cmV0dXJuIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBvJiZlKG8pfX0pfSw5MjUxNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse2lzSW50ZWdlcjp0KDE4MzY3KX0pfSw0OTM3MTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse2lzTmFOOmZ1bmN0aW9uKHMpe3JldHVybiBzIT1zfX0pfSw4''@;'; put 'put ''NjQ3OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDE4MzY3KSxzPU1hdGguYWJzO24obi5TLCJOdW1iZXIiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHUpe3JldHVybiBlKHUpJiZzKHUpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSw5MTczNjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7''@;'; put 'put ''bihuLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSw1MTg4OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk51bWJlciIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sNjUxNzc6KGMsbCx0KT0+e3ZhciBuPXQoNDI5''@;'; put 'put ''ODUpLGU9dCg0Nzc0Myk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9ZSksIk51bWJlciIse3BhcnNlRmxvYXQ6ZX0pfSw4MTI0NjooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDU1OTYwKTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUludCE9ZSksIk51bWJlciIse3BhcnNlSW50''@;'; put 'put ''OmV9KX0sMzA3MjY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoODE0NjcpLHM9dCg4MzM2NSksbz10KDY4NTk1KSx1PTEuLnRvRml4ZWQsZj1NYXRoLmZsb29yLGk9WzAsMCwwLDAsMCwwXSxwPSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24h''@;'; put 'put ''Iix5PSIwIix2PWZ1bmN0aW9uKHcsUil7Zm9yKHZhciBGPS0xLEI9UjsrK0Y8NjspaVtGXT0oQis9dyppW0ZdKSUxZTcsQj1mKEIvMWU3KX0sZz1mdW5jdGlvbih3KXtmb3IodmFyIFI9NixGPTA7LS1SPj0wOylpW1JdPWYoKEYrPWlbUl0pL3cpLEY9RiV3KjFlN30seD1mdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgdz02LFI9IiI7LS13Pj0wOylpZigiIiE9PVJ8fDA9PT13fHwwIT09aVt3XSl7dmFyIEY9U3RyaW5nKGlbd10pO1I9IiI9PT1SP0Y6UitvLmNhbGwoeSw3LUYubGVuZ3RoKStGfXJldHVybiBSfSxFPWZ1bmN0aW9uKHcsUixGKXtyZXR1cm4gMD09PVI/RjpSJTI9PTE/RSh3LFItMSxG''@;'; put 'put ''KncpOkUodyp3LFIvMixGKX07bihuLlArbi5GKighIXUmJigiMC4wMDAiIT09OGUtNS50b0ZpeGVkKDMpfHwiMSIhPT0uOS50b0ZpeGVkKDApfHwiMS4yNSIhPT0xLjI1NS50b0ZpeGVkKDIpfHwiMTAwMDAwMDAwMDAwMDAwMDEyOCIhPT0oMHhkZTBiNmIzYTc2NDAwODApLnRvRml4ZWQoMCkp''@;'; put 'put ''fHwhdCg3NDI1MykoZnVuY3Rpb24oKXt1LmNhbGwoe30pfSkpLCJOdW1iZXIiLHt0b0ZpeGVkOmZ1bmN0aW9uKFIpe3ZhciBTLEMsSyxVLEY9cyh0aGlzLHApLEI9ZShSKSxiPSIiLE89eTtpZihCPDB8fEI+MjApdGhyb3cgUmFuZ2VFcnJvcihwKTtpZihGIT1GKXJldHVybiJOYU4iO2lmKEY8''@;'; put 'put ''PS0xZTIxfHxGPj0xZTIxKXJldHVybiBTdHJpbmcoRik7aWYoRjwwJiYoYj0iLSIsRj0tRiksRj4xZS0yMSlpZihTPWZ1bmN0aW9uKHcpe2Zvcih2YXIgUj0wLEY9dztGPj00MDk2OylSKz0xMixGLz00MDk2O2Zvcig7Rj49MjspUis9MSxGLz0yO3JldHVybiBSfShGKkUoMiw2OSwxKSktNjks''@;'; put 'put ''Qz1TPDA/RipFKDIsLVMsMSk6Ri9FKDIsUywxKSxDKj00NTAzNTk5NjI3MzcwNDk2LChTPTUyLVMpPjApe2Zvcih2KDAsQyksSz1CO0s+PTc7KXYoMWU3LDApLEstPTc7Zm9yKHYoRSgxMCxLLDEpLDApLEs9Uy0xO0s+PTIzOylnKDE8PDIzKSxLLT0yMztnKDE8PEspLHYoMSwxKSxnKDIpLE89''@;'; put 'put ''eCgpfWVsc2UgdigwLEMpLHYoMTw8LVMsMCksTz14KCkrby5jYWxsKHksQik7cmV0dXJuIE89Qj4wP2IrKChVPU8ubGVuZ3RoKTw9Qj8iMC4iK28uY2FsbCh5LEItVSkrTzpPLnNsaWNlKDAsVS1CKSsiLiIrTy5zbGljZShVLUIpKTpiK099fSl9LDE5MDE6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgbj10KDQyOTg1KSxlPXQoNzQyNTMpLHM9dCg4MzM2NSksbz0xLi50b1ByZWNpc2lvbjtuKG4uUCtuLkYqKGUoZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1vLmNhbGwoMSx2b2lkIDApfSl8fCFlKGZ1bmN0aW9uKCl7by5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9QcmVjaXNpb246ZnVu''@;'; put 'put ''Y3Rpb24oZil7dmFyIGk9cyh0aGlzLCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiB2b2lkIDA9PT1mP28uY2FsbChpKTpvLmNhbGwoaSxmKX19KX0sNzUxMTU6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TK24uRiwiT2JqZWN0Iix7YXNz''@;'; put 'put ''aWduOnQoMzUzNDUpfSl9LDY4MTMyOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiT2JqZWN0Iix7Y3JlYXRlOnQoNDI1MDMpfSl9LDM3NDcwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUytuLkYqIXQoNjcwNTcpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0aWVzOnQoMzU1''@;'; put 'put ''ODgpfSl9LDQ4Mzg4OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUytuLkYqIXQoNjcwNTcpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0eTp0KDk5Mjc1KS5mfSl9LDg5Mzc1OihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoODQ3MjgpLm9uRnJlZXplO3QoMzMxNjApKCJmcmVlemUi''@;'; put 'put ''LGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDk0ODgyOihjLGwsdCk9Pnt2YXIgbj10KDIyMTEwKSxlPXQoMTg2OTMpLmY7dCgzMzE2MCkoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24obyx1KXtyZXR1cm4gZShuKG8pLHUpfX0pfSw3OTYyMjooYyxsLHQpPT57dCgzMzE2MCkoImdldE93blByb3BlcnR5TmFtZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHQoMzkzMjcpLmZ9KX0sNDE1MjA6KGMsbCx0KT0+e3ZhciBuPXQoMjA1MDgpLGU9dCg0NjgpO3QoMzMxNjApKCJnZXRQcm90''@;'; put 'put ''b3R5cGVPZiIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIGUobihvKSl9fSl9LDQ5ODkyOihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KTt0KDMzMTYwKSgiaXNFeHRlbnNpYmxlIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuISFuKG8pJiYoIWV8fGUo''@;'; put 'put ''bykpfX0pfSw2NDE1NzooYyxsLHQpPT57dmFyIG49dCg1NTI4Nik7dCgzMzE2MCkoImlzRnJvemVuIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obyl7cmV0dXJuIW4obyl8fCEhZSYmZShvKX19KX0sMzUwOTU6KGMsbCx0KT0+e3ZhciBuPXQoNTUyODYpO3QoMzMxNjApKCJpc1NlYWxl''@;'; put 'put ''ZCIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiFuKG8pfHwhIWUmJmUobyl9fSl9LDk5MTc2OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiT2JqZWN0Iix7aXM6dCgyNzE5NSl9KX0sMjc0NzY6KGMsbCx0KT0+e3ZhciBuPXQoMjA1MDgpLGU9dCg0NzE4NCk7''@;'; put 'put ''dCgzMzE2MCkoImtleXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKG8pe3JldHVybiBlKG4obykpfX0pfSw4NDY3MjooYyxsLHQpPT57dmFyIG49dCg1NTI4NiksZT10KDg0NzI4KS5vbkZyZWV6ZTt0KDMzMTYwKSgicHJldmVudEV4dGVuc2lvbnMiLGZ1bmN0aW9uKHMpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbih1KXtyZXR1cm4gcyYmbih1KT9zKGUodSkpOnV9fSl9LDQzNTMzOihjLGwsdCk9Pnt2YXIgbj10KDU1Mjg2KSxlPXQoODQ3MjgpLm9uRnJlZXplO3QoMzMxNjApKCJzZWFsIixmdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24odSl7cmV0dXJuIHMmJm4odSk/cyhlKHUpKTp1fX0p''@;'; put 'put ''fSw2ODgzODooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSk7bihuLlMsIk9iamVjdCIse3NldFByb3RvdHlwZU9mOnQoMjczNzUpLnNldH0pfSw5NjI1MzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDE0ODgpLGU9e307ZVt0KDg2MzE0KSgidG9TdHJpbmdUYWciKV09InoiLGUrIiIh''@;'; put 'put ''PSJbb2JqZWN0IHpdIiYmdCg3NzIzNCkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgIituKHRoaXMpKyJdIn0sITApfSw2NDI5OTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQ3NzQzKTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWUp''@;'; put 'put ''LHtwYXJzZUZsb2F0OmV9KX0sNzEwODQ6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg1NTk2MCk7bihuLkcrbi5GKihwYXJzZUludCE9ZSkse3BhcnNlSW50OmV9KX0sMjE1NzI6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCgyNDk2Mykscz10KDI3MDA3KSxvPSh0KDM4MTYpLlJl''@;'; put 'put ''ZmxlY3R8fHt9KS5hcHBseSx1PUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohdCg3NDI1MykoZnVuY3Rpb24oKXtvKGZ1bmN0aW9uKCl7fSl9KSwiUmVmbGVjdCIse2FwcGx5OmZ1bmN0aW9uKGkscCx5KXt2YXIgdj1lKGkpLGc9cyh5KTtyZXR1cm4gbz9vKHYscCxnKTp1LmNhbGwodixwLGcp''@;'; put 'put ''fX0pfSw4MjEzOTooYyxsLHQpPT57dmFyIG49dCg0Mjk4NSksZT10KDQyNTAzKSxzPXQoMjQ5NjMpLG89dCgyNzAwNyksdT10KDU1Mjg2KSxmPXQoNzQyNTMpLGk9dCgzNDM5OCkscD0odCgzODE2KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LHk9ZihmdW5jdGlvbigpe2Z1bmN0aW9uIGcoKXt9''@;'; put 'put ''cmV0dXJuIShwKGZ1bmN0aW9uKCl7fSxbXSxnKWluc3RhbmNlb2YgZyl9KSx2PSFmKGZ1bmN0aW9uKCl7cChmdW5jdGlvbigpe30pfSk7bihuLlMrbi5GKih5fHx2KSwiUmVmbGVjdCIse2NvbnN0cnVjdDpmdW5jdGlvbih4LEUpe3MoeCksbyhFKTt2YXIgaj1hcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''eDpzKGFyZ3VtZW50c1syXSk7aWYodiYmIXkpcmV0dXJuIHAoeCxFLGopO2lmKHg9PWope3N3aXRjaChFLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgeDtjYXNlIDE6cmV0dXJuIG5ldyB4KEVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHgoRVswXSxFWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB4''@;'; put 'put ''KEVbMF0sRVsxXSxFWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB4KEVbMF0sRVsxXSxFWzJdLEVbM10pfXZhciB3PVtudWxsXTtyZXR1cm4gdy5wdXNoLmFwcGx5KHcsRSksbmV3KGkuYXBwbHkoeCx3KSl9dmFyIFI9ai5wcm90b3R5cGUsRj1lKHUoUik/UjpPYmplY3QucHJvdG90eXBlKSxCPUZ1''@;'; put 'put ''bmN0aW9uLmFwcGx5LmNhbGwoeCxGLEUpO3JldHVybiB1KEIpP0I6Rn19KX0sMTA2ODU6KGMsbCx0KT0+e3ZhciBuPXQoOTkyNzUpLGU9dCg0Mjk4NSkscz10KDI3MDA3KSxvPXQoMjE2ODkpO2UoZS5TK2UuRip0KDc0MjUzKShmdW5jdGlvbigpe1JlZmxlY3QuZGVmaW5lUHJvcGVydHkobi5m''@;'; put 'put ''KHt9LDEse3ZhbHVlOjF9KSwxLHt2YWx1ZToyfSl9KSwiUmVmbGVjdCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKGYsaSxwKXtzKGYpLGk9byhpLCEwKSxzKHApO3RyeXtyZXR1cm4gbi5mKGYsaSxwKSwhMH1jYXRjaHtyZXR1cm4hMX19fSl9LDg1NTM1OihjLGwsdCk9Pnt2YXIgbj10KDQy''@;'; put 'put ''OTg1KSxlPXQoMTg2OTMpLmYscz10KDI3MDA3KTtuKG4uUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHUsZil7dmFyIGk9ZShzKHUpLGYpO3JldHVybiEoaSYmIWkuY29uZmlndXJhYmxlKSYmZGVsZXRlIHVbZl19fSl9LDE3MzQ3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIG49dCg0Mjk4NSksZT10KDI3MDA3KSxzPWZ1bmN0aW9uKG8pe3RoaXMuX3Q9ZShvKSx0aGlzLl9pPTA7dmFyIGYsdT10aGlzLl9rPVtdO2ZvcihmIGluIG8pdS5wdXNoKGYpfTt0KDQ5OTg4KShzLCJPYmplY3QiLGZ1bmN0aW9uKCl7dmFyIGYsbz10aGlzLHU9by5faztkb3tpZihvLl9p''@;'; put 'put ''Pj11Lmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXdoaWxlKCEoKGY9dVtvLl9pKytdKWluIG8uX3QpKTtyZXR1cm57dmFsdWU6Zixkb25lOiExfX0pLG4obi5TLCJSZWZsZWN0Iix7ZW51bWVyYXRlOmZ1bmN0aW9uKHUpe3JldHVybiBuZXcgcyh1KX19KX0sOTY2MzM6KGMs''@;'; put 'put ''bCx0KT0+e3ZhciBuPXQoMTg2OTMpLGU9dCg0Mjk4NSkscz10KDI3MDA3KTtlKGUuUywiUmVmbGVjdCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih1LGYpe3JldHVybiBuLmYocyh1KSxmKX19KX0sNjg5ODk6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpLGU9dCg0NjgpLHM9''@;'; put 'put ''dCgyNzAwNyk7bihuLlMsIlJlZmxlY3QiLHtnZXRQcm90b3R5cGVPZjpmdW5jdGlvbih1KXtyZXR1cm4gZShzKHUpKX19KX0sODMwNDk6KGMsbCx0KT0+e3ZhciBuPXQoMTg2OTMpLGU9dCg0NjgpLHM9dCg3OTE4MSksbz10KDQyOTg1KSx1PXQoNTUyODYpLGY9dCgyNzAwNyk7byhvLlMsIlJl''@;'; put 'put ''ZmxlY3QiLHtnZXQ6ZnVuY3Rpb24gaShwLHkpe3ZhciBnLHgsdj1hcmd1bWVudHMubGVuZ3RoPDM/cDphcmd1bWVudHNbMl07cmV0dXJuIGYocCk9PT12P3BbeV06KGc9bi5mKHAseSkpP3MoZywidmFsdWUiKT9nLnZhbHVlOnZvaWQgMCE9PWcuZ2V0P2cuZ2V0LmNhbGwodik6dm9pZCAwOnUo''@;'; put 'put ''eD1lKHApKT9pKHgseSx2KTp2b2lkIDB9fSl9LDc4MjcwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KTtuKG4uUywiUmVmbGVjdCIse2hhczpmdW5jdGlvbihzLG8pe3JldHVybiBvIGluIHN9fSl9LDY0NTEwOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMjcwMDcpLHM9T2JqZWN0Lmlz''@;'; put 'put ''RXh0ZW5zaWJsZTtuKG4uUywiUmVmbGVjdCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih1KXtyZXR1cm4gZSh1KSwhc3x8cyh1KX19KX0sNzM5ODQ6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5TLCJSZWZsZWN0Iix7b3duS2V5czp0KDU3NjQzKX0pfSw3NTc2OTooYyxsLHQpPT57dmFy''@;'; put 'put ''IG49dCg0Mjk4NSksZT10KDI3MDA3KSxzPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztuKG4uUywiUmVmbGVjdCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHUpe2UodSk7dHJ5e3JldHVybiBzJiZzKHUpLCEwfWNhdGNoe3JldHVybiExfX19KX0sOTYwMTQ6KGMsbCx0KT0+e3ZhciBu''@;'; put 'put ''PXQoNDI5ODUpLGU9dCgyNzM3NSk7ZSYmbihuLlMsIlJlZmxlY3QiLHtzZXRQcm90b3R5cGVPZjpmdW5jdGlvbihvLHUpe2UuY2hlY2sobyx1KTt0cnl7cmV0dXJuIGUuc2V0KG8sdSksITB9Y2F0Y2h7cmV0dXJuITF9fX0pfSw1MDA1NTooYyxsLHQpPT57dmFyIG49dCg5OTI3NSksZT10KDE4''@;'; put 'put ''NjkzKSxzPXQoNDY4KSxvPXQoNzkxODEpLHU9dCg0Mjk4NSksZj10KDkwNjgxKSxpPXQoMjcwMDcpLHA9dCg1NTI4Nik7dSh1LlMsIlJlZmxlY3QiLHtzZXQ6ZnVuY3Rpb24geSh2LGcseCl7dmFyIHcsUixFPWFyZ3VtZW50cy5sZW5ndGg8ND92OmFyZ3VtZW50c1szXSxqPWUuZihpKHYpLGcp''@;'; put 'put ''O2lmKCFqKXtpZihwKFI9cyh2KSkpcmV0dXJuIHkoUixnLHgsRSk7aj1mKDApfWlmKG8oaiwidmFsdWUiKSl7aWYoITE9PT1qLndyaXRhYmxlfHwhcChFKSlyZXR1cm4hMTtpZih3PWUuZihFLGcpKXtpZih3LmdldHx8dy5zZXR8fCExPT09dy53cml0YWJsZSlyZXR1cm4hMTt3LnZhbHVlPXgs''@;'; put 'put ''bi5mKEUsZyx3KX1lbHNlIG4uZihFLGcsZigwLHgpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09ai5zZXQmJihqLnNldC5jYWxsKEUseCksITApfX0pfSw4Mzk0NjooYyxsLHQpPT57dmFyIG49dCgzODE2KSxlPXQoNDAyNjYpLHM9dCg5OTI3NSkuZixvPXQoMjA2MTYpLmYsdT10KDU1MzY0''@;'; put 'put ''KSxmPXQoNTMyMTgpLGk9bi5SZWdFeHAscD1pLHk9aS5wcm90b3R5cGUsdj0vYS9nLGc9L2EvZyx4PW5ldyBpKHYpIT09djtpZih0KDY3MDU3KSYmKCF4fHx0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiBnW3QoODYzMTQpKCJtYXRjaCIpXT0hMSxpKHYpIT12fHxpKGcpPT1nfHwiL2EvaSIh''@;'; put 'put ''PWkodiwiaSIpfSkpKXtpPWZ1bmN0aW9uKEYsQil7dmFyIGI9dGhpcyBpbnN0YW5jZW9mIGksTz11KEYpLFM9dm9pZCAwPT09QjtyZXR1cm4hYiYmTyYmRi5jb25zdHJ1Y3Rvcj09PWkmJlM/RjplKHg/bmV3IHAoTyYmIVM/Ri5zb3VyY2U6RixCKTpwKChPPUYgaW5zdGFuY2VvZiBpKT9GLnNv''@;'; put 'put ''dXJjZTpGLE8mJlM/Zi5jYWxsKEYpOkIpLGI/dGhpczp5LGkpfTtmb3IodmFyIEU9ZnVuY3Rpb24oUil7UiBpbiBpfHxzKGksUix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBwW1JdfSxzZXQ6ZnVuY3Rpb24oRil7cFtSXT1GfX0pfSxqPW8ocCksdz0wO2oubGVuZ3Ro''@;'; put 'put ''Pnc7KUUoalt3KytdKTt5LmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGU9eSx0KDc3MjM0KShuLCJSZWdFeHAiLGkpfXQoMjk3NCkoIlJlZ0V4cCIpfSwxODI2OTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjExNjUpO3QoNDI5ODUpKHt0YXJnZXQ6IlJlZ0V4cCIscHJvdG86ITAs''@;'; put 'put ''Zm9yY2VkOm4hPT0vLi8uZXhlY30se2V4ZWM6bn0pfSw3Njc3NDooYyxsLHQpPT57dCg2NzA1NykmJiJnIiE9Ly4vZy5mbGFncyYmdCg5OTI3NSkuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6dCg1MzIxOCl9KX0sMjE0NjY6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgbj10KDI3MDA3KSxlPXQoMTA4NzUpLHM9dCg3Njc5Myksbz10KDI3Nzg3KTt0KDI4MDgyKSgibWF0Y2giLDEsZnVuY3Rpb24odSxmLGkscCl7cmV0dXJuW2Z1bmN0aW9uKHYpe3ZhciBnPXUodGhpcykseD12Py5bZl07cmV0dXJuIHZvaWQgMCE9PXg/eC5jYWxsKHYsZyk6''@;'; put 'put ''bmV3IFJlZ0V4cCh2KVtmXShTdHJpbmcoZykpfSxmdW5jdGlvbih5KXt2YXIgdj1wKGkseSx0aGlzKTtpZih2LmRvbmUpcmV0dXJuIHYudmFsdWU7dmFyIGc9bih5KSx4PVN0cmluZyh0aGlzKTtpZighZy5nbG9iYWwpcmV0dXJuIG8oZyx4KTt2YXIgRT1nLnVuaWNvZGU7Zy5sYXN0SW5kZXg9''@;'; put 'put ''MDtmb3IodmFyIFIsaj1bXSx3PTA7bnVsbCE9PShSPW8oZyx4KSk7KXt2YXIgRj1TdHJpbmcoUlswXSk7alt3XT1GLCIiPT09RiYmKGcubGFzdEluZGV4PXMoeCxlKGcubGFzdEluZGV4KSxFKSksdysrfXJldHVybiAwPT09dz9udWxsOmp9XX0pfSw1OTM1NzooYyxsLHQpPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBuPXQoMjcwMDcpLGU9dCgyMDUwOCkscz10KDEwODc1KSxvPXQoODE0NjcpLHU9dCg3Njc5MyksZj10KDI3Nzg3KSxpPU1hdGgubWF4LHA9TWF0aC5taW4seT1NYXRoLmZsb29yLHY9L1wkKFskJmAnXXxcZFxkP3w8W14+XSo+KS9nLGc9L1wkKFskJmAnXXxcZFxkPykvZyx4PWZ1''@;'; put 'put ''bmN0aW9uKEUpe3JldHVybiB2b2lkIDA9PT1FP0U6U3RyaW5nKEUpfTt0KDI4MDgyKSgicmVwbGFjZSIsMixmdW5jdGlvbihFLGosdyxSKXtyZXR1cm5bZnVuY3Rpb24oYixPKXt2YXIgUz1FKHRoaXMpLEM9Yj8uW2pdO3JldHVybiB2b2lkIDAhPT1DP0MuY2FsbChiLFMsTyk6dy5jYWxsKFN0''@;'; put 'put ''cmluZyhTKSxiLE8pfSxmdW5jdGlvbihCLGIpe3ZhciBPPVIodyxCLHRoaXMsYik7aWYoTy5kb25lKXJldHVybiBPLnZhbHVlO3ZhciBTPW4oQiksQz1TdHJpbmcodGhpcyksSz0iZnVuY3Rpb24iPT10eXBlb2YgYjtLfHwoYj1TdHJpbmcoYikpO3ZhciBVPVMuZ2xvYmFsO2lmKFUpe3ZhciBa''@;'; put 'put ''PVMudW5pY29kZTtTLmxhc3RJbmRleD0wfWZvcih2YXIgdHQ9W107Oyl7dmFyIF89ZihTLEMpO2lmKG51bGw9PT1ffHwodHQucHVzaChfKSwhVSkpYnJlYWs7IiI9PT1TdHJpbmcoX1swXSkmJihTLmxhc3RJbmRleD11KEMscyhTLmxhc3RJbmRleCksWikpfWZvcih2YXIgc3Q9IiIsWD0wLFY9''@;'; put 'put ''MDtWPHR0Lmxlbmd0aDtWKyspe189dHRbVl07Zm9yKHZhciBRPVN0cmluZyhfWzBdKSxZPWkocChvKF8uaW5kZXgpLEMubGVuZ3RoKSwwKSxmdD1bXSx2dD0xO3Z0PF8ubGVuZ3RoO3Z0KyspZnQucHVzaCh4KF9bdnRdKSk7dmFyIE10PV8uZ3JvdXBzO2lmKEspe3ZhciBFdD1bUV0uY29uY2F0''@;'; put 'put ''KGZ0LFksQyk7dm9pZCAwIT09TXQmJkV0LnB1c2goTXQpO3ZhciBGdD1TdHJpbmcoYi5hcHBseSh2b2lkIDAsRXQpKX1lbHNlIEZ0PUYoUSxDLFksZnQsTXQsYik7WT49WCYmKHN0Kz1DLnNsaWNlKFgsWSkrRnQsWD1ZK1EubGVuZ3RoKX1yZXR1cm4gc3QrQy5zbGljZShYKX1dO2Z1bmN0aW9u''@;'; put 'put ''IEYoQixiLE8sUyxDLEspe3ZhciBVPU8rQi5sZW5ndGgsWj1TLmxlbmd0aCx0dD1nO3JldHVybiB2b2lkIDAhPT1DJiYoQz1lKEMpLHR0PXYpLHcuY2FsbChLLHR0LGZ1bmN0aW9uKF8sbnQpe3ZhciBzdDtzd2l0Y2gobnQuY2hhckF0KDApKXtjYXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJl''@;'; put 'put ''dHVybiBCO2Nhc2UiYCI6cmV0dXJuIGIuc2xpY2UoMCxPKTtjYXNlIiciOnJldHVybiBiLnNsaWNlKFUpO2Nhc2UiPCI6c3Q9Q1tudC5zbGljZSgxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgWD0rbnQ7aWYoMD09PVgpcmV0dXJuIF87aWYoWD5aKXt2YXIgVj15KFgvMTApO3JldHVybiAwPT09''@;'; put 'put ''Vj9fOlY8PVo/dm9pZCAwPT09U1tWLTFdP250LmNoYXJBdCgxKTpTW1YtMV0rbnQuY2hhckF0KDEpOl99c3Q9U1tYLTFdfXJldHVybiB2b2lkIDA9PT1zdD8iIjpzdH0pfX0pfSw3NjE0MjooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjcwMDcpLGU9dCgyNzE5NSkscz10KDI3Nzg3''@;'; put 'put ''KTt0KDI4MDgyKSgic2VhcmNoIiwxLGZ1bmN0aW9uKG8sdSxmLGkpe3JldHVybltmdW5jdGlvbih5KXt2YXIgdj1vKHRoaXMpLGc9eT8uW3VdO3JldHVybiB2b2lkIDAhPT1nP2cuY2FsbCh5LHYpOm5ldyBSZWdFeHAoeSlbdV0oU3RyaW5nKHYpKX0sZnVuY3Rpb24ocCl7dmFyIHk9aShmLHAs''@;'; put 'put ''dGhpcyk7aWYoeS5kb25lKXJldHVybiB5LnZhbHVlO3ZhciB2PW4ocCksZz1TdHJpbmcodGhpcykseD12Lmxhc3RJbmRleDtlKHgsMCl8fCh2Lmxhc3RJbmRleD0wKTt2YXIgRT1zKHYsZyk7cmV0dXJuIGUodi5sYXN0SW5kZXgseCl8fCh2Lmxhc3RJbmRleD14KSxudWxsPT09RT8tMTpFLmlu''@;'; put 'put ''ZGV4fV19KX0sNTE4NzY6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDU1MzY0KSxlPXQoMjcwMDcpLHM9dCg1ODM2NCksbz10KDc2NzkzKSx1PXQoMTA4NzUpLGY9dCgyNzc4NyksaT10KDIxMTY1KSxwPXQoNzQyNTMpLHk9TWF0aC5taW4sdj1bXS5wdXNoLGc9InNwbGl0Iix4PSJs''@;'; put 'put ''ZW5ndGgiLEU9Imxhc3RJbmRleCIsaj00Mjk0OTY3Mjk1LHc9IXAoZnVuY3Rpb24oKXtSZWdFeHAoaiwieSIpfSk7dCgyODA4MikoInNwbGl0IiwyLGZ1bmN0aW9uKFIsRixCLGIpe3ZhciBPO3JldHVybiBPPSJjIj09ImFiYmMiW2ddKC8oYikqLylbMV18fDQhPSJ0ZXN0IltnXSgvKD86KS8s''@;'; put 'put ''LTEpW3hdfHwyIT0iYWIiW2ddKC8oPzphYikqLylbeF18fDQhPSIuIltnXSgvKC4/KSguPykvKVt4XXx8Ii4iW2ddKC8oKSgpLylbeF0+MXx8IiJbZ10oLy4/LylbeF0/ZnVuY3Rpb24oUyxDKXt2YXIgSz1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09UyYmMD09PUMpcmV0dXJuW107aWYoIW4o''@;'; put 'put ''UykpcmV0dXJuIEIuY2FsbChLLFMsQyk7Zm9yKHZhciBzdCxYLFYsVT1bXSx0dD0wLF89dm9pZCAwPT09Qz9qOkM+Pj4wLG50PW5ldyBSZWdFeHAoUy5zb3VyY2UsKFMuaWdub3JlQ2FzZT8iaSI6IiIpKyhTLm11bHRpbGluZT8ibSI6IiIpKyhTLnVuaWNvZGU/InUiOiIiKSsoUy5zdGlja3k/''@;'; put 'put ''InkiOiIiKSsiZyIpOyhzdD1pLmNhbGwobnQsSykpJiYhKChYPW50W0VdKT50dCYmKFUucHVzaChLLnNsaWNlKHR0LHN0LmluZGV4KSksc3RbeF0+MSYmc3QuaW5kZXg8S1t4XSYmdi5hcHBseShVLHN0LnNsaWNlKDEpKSxWPXN0WzBdW3hdLHR0PVgsVVt4XT49XykpOyludFtFXT09PXN0Lmlu''@;'; put 'put ''ZGV4JiZudFtFXSsrO3JldHVybiB0dD09PUtbeF0/KFZ8fCFudC50ZXN0KCIiKSkmJlUucHVzaCgiIik6VS5wdXNoKEsuc2xpY2UodHQpKSxVW3hdPl8/VS5zbGljZSgwLF8pOlV9OiIwIltnXSh2b2lkIDAsMClbeF0/ZnVuY3Rpb24oUyxDKXtyZXR1cm4gdm9pZCAwPT09UyYmMD09PUM/W106''@;'; put 'put ''Qi5jYWxsKHRoaXMsUyxDKX06QixbZnVuY3Rpb24oQyxLKXt2YXIgVT1SKHRoaXMpLFo9Qz8uW0ZdO3JldHVybiB2b2lkIDAhPT1aP1ouY2FsbChDLFUsSyk6Ty5jYWxsKFN0cmluZyhVKSxDLEspfSxmdW5jdGlvbihTLEMpe3ZhciBLPWIoTyxTLHRoaXMsQyxPIT09Qik7aWYoSy5kb25lKXJl''@;'; put 'put ''dHVybiBLLnZhbHVlO3ZhciBVPWUoUyksWj1TdHJpbmcodGhpcyksdHQ9cyhVLFJlZ0V4cCksXz1VLnVuaWNvZGUsc3Q9bmV3IHR0KHc/VToiXig/OiIrVS5zb3VyY2UrIikiLChVLmlnbm9yZUNhc2U/ImkiOiIiKSsoVS5tdWx0aWxpbmU/Im0iOiIiKSsoVS51bmljb2RlPyJ1IjoiIikrKHc/''@;'; put 'put ''InkiOiJnIikpLFg9dm9pZCAwPT09Qz9qOkM+Pj4wO2lmKDA9PT1YKXJldHVybltdO2lmKDA9PT1aLmxlbmd0aClyZXR1cm4gbnVsbD09PWYoc3QsWik/W1pdOltdO2Zvcih2YXIgVj0wLFE9MCxZPVtdO1E8Wi5sZW5ndGg7KXtzdC5sYXN0SW5kZXg9dz9ROjA7dmFyIHZ0LGZ0PWYoc3Qsdz9a''@;'; put 'put ''Olouc2xpY2UoUSkpO2lmKG51bGw9PT1mdHx8KHZ0PXkodShzdC5sYXN0SW5kZXgrKHc/MDpRKSksWi5sZW5ndGgpKT09PVYpUT1vKFosUSxfKTtlbHNle2lmKFkucHVzaChaLnNsaWNlKFYsUSkpLFkubGVuZ3RoPT09WClyZXR1cm4gWTtmb3IodmFyIE10PTE7TXQ8PWZ0Lmxlbmd0aC0xO010''@;'; put 'put ''KyspaWYoWS5wdXNoKGZ0W010XSksWS5sZW5ndGg9PT1YKXJldHVybiBZO1E9Vj12dH19cmV0dXJuIFkucHVzaChaLnNsaWNlKFYpKSxZfV19KX0sNjYxMDg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDc2Nzc0KTt2YXIgbj10KDI3MDA3KSxlPXQoNTMyMTgpLHM9dCg2NzA1Nyksbz0idG9T''@;'; put 'put ''dHJpbmciLHU9Ly4vW29dLGY9ZnVuY3Rpb24oaSl7dCg3NzIzNCkoUmVnRXhwLnByb3RvdHlwZSxvLGksITApfTt0KDc0MjUzKShmdW5jdGlvbigpe3JldHVybiIvYS9iIiE9dS5jYWxsKHtzb3VyY2U6ImEiLGZsYWdzOiJiIn0pfSk/ZihmdW5jdGlvbigpe3ZhciBwPW4odGhpcyk7cmV0dXJu''@;'; put 'put ''Ii8iLmNvbmNhdChwLnNvdXJjZSwiLyIsImZsYWdzImluIHA/cC5mbGFnczohcyYmcCBpbnN0YW5jZW9mIFJlZ0V4cD9lLmNhbGwocCk6dm9pZCAwKX0pOnUubmFtZSE9byYmZihmdW5jdGlvbigpe3JldHVybiB1LmNhbGwodGhpcyl9KX0sOTgxODQ6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgbj10KDk4MjQpLGU9dCgxNjE2KTtjLmV4cG9ydHM9dCg0NTc5NSkoIlNldCIsZnVuY3Rpb24obyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHUpe3JldHVybiBuLmRlZihl''@;'; put 'put ''KHRoaXMsIlNldCIpLHU9MD09PXU/MDp1LHUpfX0sbil9LDQwODU2OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoImFuY2hvciIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBuKHRoaXMsImEiLCJuYW1lIixzKX19KX0sODA3MDM6KGMsbCx0KT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt0KDI5Mzk1KSgiYmlnIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLCJiaWciLCIiLCIiKX19KX0sOTE1Mzk6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiYmxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBuKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LDUyOTI6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiYm9sZCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiYiIsIiIsIiIpfX0pfSwyOTUzOTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBu''@;'; put 'put ''PXQoNDI5ODUpLGU9dCgyNDQ5NikoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihvKXtyZXR1cm4gZSh0aGlzLG8pfX0pfSw5NjYyMDooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoNDI5ODUpLGU9dCgxMDg3NSkscz10KDQyMDk0KSxvPSJlbmRzV2l0aCIs''@;'; put 'put ''dT0iIltvXTtuKG4uUCtuLkYqdCg4ODUyKShvKSwiU3RyaW5nIix7ZW5kc1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHA9cyh0aGlzLGksbykseT1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PWUocC5sZW5ndGgpLGc9dm9pZCAwPT09eT92Ok1hdGgubWluKGUoeSksdiks''@;'; put 'put ''eD1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHAseCxnKTpwLnNsaWNlKGcteC5sZW5ndGgsZyk9PT14fX0pfSw0NTE3NzooYyxsLHQpPT57InVzZSBzdHJpY3QiO3QoMjkzOTUpKCJmaXhlZCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywidHQiLCIiLCIi''@;'; put 'put ''KX19KX0sNzM2OTQ6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiZm9udGNvbG9yIixmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIG4odGhpcywiZm9udCIsImNvbG9yIixzKX19KX0sMzc2NDg6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgiZm9u''@;'; put 'put ''dHNpemUiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJmb250Iiwic2l6ZSIscyl9fSl9LDUwMTkxOihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoOTIzMzcpLHM9U3RyaW5nLmZyb21DaGFyQ29kZSxvPVN0cmluZy5mcm9tQ29kZVBvaW50O24obi5T''@;'; put 'put ''K24uRiooISFvJiYxIT1vLmxlbmd0aCksIlN0cmluZyIse2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZil7Zm9yKHZhciB2LGk9W10scD1hcmd1bWVudHMubGVuZ3RoLHk9MDtwPnk7KXtpZih2PSthcmd1bWVudHNbeSsrXSxlKHYsMTExNDExMSkhPT12KXRocm93IFJhbmdlRXJyb3IodisiIGlz''@;'; put 'put ''IG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtpLnB1c2godjw2NTUzNj9zKHYpOnMoNTUyOTYrKCh2LT02NTUzNik+PjEwKSx2JTEwMjQrNTYzMjApKX1yZXR1cm4gaS5qb2luKCIiKX19KX0sNjI4NTA6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KDQyOTg1KSxlPXQoNDIwOTQpLHM9''@;'; put 'put ''ImluY2x1ZGVzIjtuKG4uUCtuLkYqdCg4ODUyKShzKSwiU3RyaW5nIix7aW5jbHVkZXM6ZnVuY3Rpb24odSl7cmV0dXJuISF+ZSh0aGlzLHUscykuaW5kZXhPZih1LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjc3OTU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt0KDI5Mzk1KSgiaXRhbGljcyIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywiaSIsIiIsIiIpfX0pfSwzOTExNTooYyxsLHQpPT57InVzZSBzdHJpY3QiO3ZhciBuPXQoMjQ0OTYpKCEwKTt0KDQyOTIzKShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7''@;'; put 'put ''dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBvLGU9dGhpcy5fdCxzPXRoaXMuX2k7cmV0dXJuIHM+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KG89bihlLHMpLHRoaXMuX2krPW8ubGVuZ3RoLHt2YWx1ZTpvLGRvbmU6ITF9KX0pfSw0NTMxOihj''@;'; put 'put ''LGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoImxpbmsiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gbih0aGlzLCJhIiwiaHJlZiIscyl9fSl9LDk4MzA2OihjLGwsdCk9Pnt2YXIgbj10KDQyOTg1KSxlPXQoMjIxMTApLHM9dCgxMDg3NSk7bihuLlMsIlN0cmlu''@;'; put 'put ''ZyIse3JhdzpmdW5jdGlvbih1KXtmb3IodmFyIGY9ZSh1LnJhdyksaT1zKGYubGVuZ3RoKSxwPWFyZ3VtZW50cy5sZW5ndGgseT1bXSx2PTA7aT52Oyl5LnB1c2goU3RyaW5nKGZbdisrXSkpLHY8cCYmeS5wdXNoKFN0cmluZyhhcmd1bWVudHNbdl0pKTtyZXR1cm4geS5qb2luKCIiKX19KX0s''@;'; put 'put ''MTA4MjM6KGMsbCx0KT0+e3ZhciBuPXQoNDI5ODUpO24obi5QLCJTdHJpbmciLHtyZXBlYXQ6dCg2ODU5NSl9KX0sMjM2MDU6KGMsbCx0KT0+eyJ1c2Ugc3RyaWN0Ijt0KDI5Mzk1KSgic21hbGwiLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsInNtYWxsIiwi''@;'; put 'put ''IiwiIil9fSl9LDE3NzMyOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCg0Mjk4NSksZT10KDEwODc1KSxzPXQoNDIwOTQpLG89InN0YXJ0c1dpdGgiLHU9IiJbb107bihuLlArbi5GKnQoODg1MikobyksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oaSl7dmFyIHA9cyh0aGlz''@;'; put 'put ''LGksbykseT1lKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHAubGVuZ3RoKSksdj1TdHJpbmcoaSk7cmV0dXJuIHU/dS5jYWxsKHAsdix5KTpwLnNsaWNlKHkseSt2Lmxlbmd0aCk9PT12fX0pfSw2NzgwOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgy''@;'; put 'put ''OTM5NSkoInN0cmlrZSIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3RyaWtlIiwiIiwiIil9fSl9LDY5OTM3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoInN1YiIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhp''@;'; put 'put ''cywic3ViIiwiIiwiIil9fSl9LDEwNTExOihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTM5NSkoInN1cCIsZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcywic3VwIiwiIiwiIil9fSl9LDY0NTY0OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dCgyOTU5OSkoInRy''@;'; put 'put ''aW0iLGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBuKHRoaXMsMyl9fSl9LDk1NzY3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIG49dCgzODE2KSxlPXQoNzkxODEpLHM9dCg2NzA1Nyksbz10KDQyOTg1KSx1PXQoNzcyMzQpLGY9dCg4NDcyOCkuS0VZLGk9dCg3NDI1''@;'; put 'put ''MykscD10KDM4MjUpLHk9dCgyMjk0Myksdj10KDkzOTUzKSxnPXQoODYzMTQpLHg9dCgyODc4NyksRT10KDM2MDc0KSxqPXQoNTU0MSksdz10KDQzMDIpLFI9dCgyNzAwNyksRj10KDU1Mjg2KSxCPXQoMjA1MDgpLGI9dCgyMjExMCksTz10KDIxNjg5KSxTPXQoOTA2ODEpLEM9dCg0MjUwMyks''@;'; put 'put ''Sz10KDM5MzI3KSxVPXQoMTg2OTMpLFo9dCg2NDU0OCksdHQ9dCg5OTI3NSksXz10KDQ3MTg0KSxudD1VLmYsc3Q9dHQuZixYPUsuZixWPW4uU3ltYm9sLFE9bi5KU09OLFk9USYmUS5zdHJpbmdpZnksZnQ9InByb3RvdHlwZSIsdnQ9ZygiX2hpZGRlbiIpLE10PWcoInRvUHJpbWl0aXZlIiks''@;'; put 'put ''RXQ9e30ucHJvcGVydHlJc0VudW1lcmFibGUsRnQ9cCgic3ltYm9sLXJlZ2lzdHJ5IiksanQ9cCgic3ltYm9scyIpLFh0PXAoIm9wLXN5bWJvbHMiKSxCdD1PYmplY3RbZnRdLFF0PSJmdW5jdGlvbiI9PXR5cGVvZiBWJiYhIVouZixybj1uLlFPYmplY3Qsbm49IXJufHwhcm5bZnRdfHwhcm5b''@;'; put 'put ''ZnRdLmZpbmRDaGlsZCxhbj1zJiZpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPUMoc3Qoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc3QodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24oSSxULEEpe3ZhciBrPW50KEJ0LFQpO2smJmRlbGV0ZSBCdFtUXSxzdChJLFQs''@;'; put 'put ''QSksayYmSSE9PUJ0JiZzdChCdCxULGspfTpzdCxmbj1mdW5jdGlvbihJKXt2YXIgVD1qdFtJXT1DKFZbZnRdKTtyZXR1cm4gVC5faz1JLFR9LG9uPVF0JiYic3ltYm9sIj09dHlwZW9mIFYuaXRlcmF0b3I/ZnVuY3Rpb24oSSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBJfTpmdW5jdGlvbihJ''@;'; put 'put ''KXtyZXR1cm4gSSBpbnN0YW5jZW9mIFZ9LFl0PWZ1bmN0aW9uKFQsQSxrKXtyZXR1cm4gVD09PUJ0JiZZdChYdCxBLGspLFIoVCksQT1PKEEsITApLFIoayksZShqdCxBKT8oay5lbnVtZXJhYmxlPyhlKFQsdnQpJiZUW3Z0XVtBXSYmKFRbdnRdW0FdPSExKSxrPUMoayx7ZW51bWVyYWJsZTpT''@;'; put 'put ''KDAsITEpfSkpOihlKFQsdnQpfHxzdChULHZ0LFMoMSx7fSkpLFRbdnRdW0FdPSEwKSxhbihULEEsaykpOnN0KFQsQSxrKX0sWnQ9ZnVuY3Rpb24oVCxBKXtSKFQpO2Zvcih2YXIgb3Qsaz1qKEE9YihBKSksSj0wLHo9ay5sZW5ndGg7ej5KOylZdChULG90PWtbSisrXSxBW290XSk7cmV0dXJu''@;'; put 'put ''IFR9LGxuPWZ1bmN0aW9uKFQpe3ZhciBBPUV0LmNhbGwodGhpcyxUPU8oVCwhMCkpO3JldHVybiEodGhpcz09PUJ0JiZlKGp0LFQpJiYhZShYdCxUKSkmJighKEF8fCFlKHRoaXMsVCl8fCFlKGp0LFQpfHxlKHRoaXMsdnQpJiZ0aGlzW3Z0XVtUXSl8fEEpfSxkPWZ1bmN0aW9uKFQsQSl7aWYo''@;'; put 'put ''VD1iKFQpLEE9TyhBLCEwKSxUIT09QnR8fCFlKGp0LEEpfHxlKFh0LEEpKXt2YXIgaz1udChULEEpO3JldHVybiBrJiZlKGp0LEEpJiYhKGUoVCx2dCkmJlRbdnRdW0FdKSYmKGsuZW51bWVyYWJsZT0hMCksa319LHI9ZnVuY3Rpb24oVCl7Zm9yKHZhciB6LEE9WChiKFQpKSxrPVtdLEo9MDtB''@;'; put 'put ''Lmxlbmd0aD5KOykhZShqdCx6PUFbSisrXSkmJnohPXZ0JiZ6IT1mJiZrLnB1c2goeik7cmV0dXJuIGt9LGE9ZnVuY3Rpb24oVCl7Zm9yKHZhciBvdCxBPVQ9PT1CdCxrPVgoQT9YdDpiKFQpKSxKPVtdLHo9MDtrLmxlbmd0aD56OyllKGp0LG90PWtbeisrXSkmJighQXx8ZShCdCxvdCkpJiZK''@;'; put 'put ''LnB1c2goanRbb3RdKTtyZXR1cm4gSn07UXR8fCh1KChWPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFYpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIFQ9dihhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksQT1m''@;'; put 'put ''dW5jdGlvbihrKXt0aGlzPT09QnQmJkEuY2FsbChYdCxrKSxlKHRoaXMsdnQpJiZlKHRoaXNbdnRdLFQpJiYodGhpc1t2dF1bVF09ITEpLGFuKHRoaXMsVCxTKDEsaykpfTtyZXR1cm4gcyYmbm4mJmFuKEJ0LFQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6QX0pLGZuKFQpfSlbZnRdLCJ0b1N0cmlu''@;'; put 'put ''ZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFUuZj1kLHR0LmY9WXQsdCgyMDYxNikuZj1LLmY9cix0KDE0NjgyKS5mPWxuLFouZj1hLHMmJiF0KDQ0NjEpJiZ1KEJ0LCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsbG4sITApLHguZj1mdW5jdGlvbihJKXtyZXR1cm4gZm4oZyhJKSl9KSxv''@;'; put 'put ''KG8uRytvLlcrby5GKiFRdCx7U3ltYm9sOlZ9KTtmb3IodmFyIG09Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIpLEQ9''@;'; put 'put ''MDttLmxlbmd0aD5EOylnKG1bRCsrXSk7Zm9yKHZhciAkPV8oZy5zdG9yZSksaD0wOyQubGVuZ3RoPmg7KUUoJFtoKytdKTtvKG8uUytvLkYqIVF0LCJTeW1ib2wiLHtmb3I6ZnVuY3Rpb24oSSl7cmV0dXJuIGUoRnQsSSs9IiIpP0Z0W0ldOkZ0W0ldPVYoSSl9LGtleUZvcjpmdW5jdGlvbihU''@;'; put 'put ''KXtpZighb24oVCkpdGhyb3cgVHlwZUVycm9yKFQrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciBBIGluIEZ0KWlmKEZ0W0FdPT09VClyZXR1cm4gQX0sdXNlU2V0dGVyOmZ1bmN0aW9uKCl7bm49ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe25uPSExfX0pLG8oby5TK28uRiohUXQsIk9i''@;'; put 'put ''amVjdCIse2NyZWF0ZTpmdW5jdGlvbihULEEpe3JldHVybiB2b2lkIDA9PT1BP0MoVCk6WnQoQyhUKSxBKX0sZGVmaW5lUHJvcGVydHk6WXQsZGVmaW5lUHJvcGVydGllczpadCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZCxnZXRPd25Qcm9wZXJ0eU5hbWVzOnIsZ2V0T3duUHJvcGVydHlT''@;'; put 'put ''eW1ib2xzOmF9KTt2YXIgUD1pKGZ1bmN0aW9uKCl7Wi5mKDEpfSk7byhvLlMrby5GKlAsIk9iamVjdCIse2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbihUKXtyZXR1cm4gWi5mKEIoVCkpfX0pLFEmJm8oby5TK28uRiooIVF0fHxpKGZ1bmN0aW9uKCl7dmFyIEk9VigpO3JldHVybiJb''@;'; put 'put ''bnVsbF0iIT1ZKFtJXSl8fCJ7fSIhPVkoe2E6SX0pfHwie30iIT1ZKE9iamVjdChJKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oVCl7Zm9yKHZhciBKLHosQT1bVF0saz0xO2FyZ3VtZW50cy5sZW5ndGg+azspQS5wdXNoKGFyZ3VtZW50c1trKytdKTtpZih6PUo9QVsxXSwoRihK''@;'; put 'put ''KXx8dm9pZCAwIT09VCkmJiFvbihUKSlyZXR1cm4gdyhKKXx8KEo9ZnVuY3Rpb24ob3QsY3Qpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB6JiYoY3Q9ei5jYWxsKHRoaXMsb3QsY3QpKSwhb24oY3QpKXJldHVybiBjdH0pLEFbMV09SixZLmFwcGx5KFEsQSl9fSksVltmdF1bTXRdfHx0KDg3NzI4''@;'; put 'put ''KShWW2Z0XSxNdCxWW2Z0XS52YWx1ZU9mKSx5KFYsIlN5bWJvbCIpLHkoTWF0aCwiTWF0aCIsITApLHkobi5KU09OLCJKU09OIiwhMCl9LDMwMTQ3OihjLGwsdCk9PnsidXNlIHN0cmljdCI7dmFyIHcsbj10KDM4MTYpLGU9dCgxMDA1MCkoMCkscz10KDc3MjM0KSxvPXQoODQ3MjgpLHU9dCgz''@;'; put 'put ''NTM0NSksZj10KDIzNjU3KSxpPXQoNTUyODYpLHA9dCgxNjE2KSx5PXQoMTYxNiksdj0hbi5BY3RpdmVYT2JqZWN0JiYiQWN0aXZlWE9iamVjdCJpbiBuLGc9IldlYWtNYXAiLHg9by5nZXRXZWFrLEU9T2JqZWN0LmlzRXh0ZW5zaWJsZSxqPWYudWZzdG9yZSxSPWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3JldHVybiBiKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0sRj17Z2V0OmZ1bmN0aW9uKE8pe2lmKGkoTykpe3ZhciBTPXgoTyk7cmV0dXJuITA9PT1TP2oocCh0aGlzLGcpKS5nZXQoTyk6Uz9TW3RoaXMuX2ldOnZvaWQgMH19LHNl''@;'; put 'put ''dDpmdW5jdGlvbihPLFMpe3JldHVybiBmLmRlZihwKHRoaXMsZyksTyxTKX19LEI9Yy5leHBvcnRzPXQoNDU3OTUpKGcsUixGLGYsITAsITApO3kmJnYmJih1KCh3PWYuZ2V0Q29uc3RydWN0b3IoUixnKSkucHJvdG90eXBlLEYpLG8uTkVFRD0hMCxlKFsiZGVsZXRlIiwiaGFzIiwiZ2V0Iiwi''@;'; put 'put ''c2V0Il0sZnVuY3Rpb24oYil7dmFyIE89Qi5wcm90b3R5cGUsUz1PW2JdO3MoTyxiLGZ1bmN0aW9uKEMsSyl7aWYoaShDKSYmIUUoQykpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyB3KTt2YXIgVT10aGlzLl9mW2JdKEMsSyk7cmV0dXJuInNldCI9PWI/dGhpczpVfXJldHVybiBTLmNhbGwodGhp''@;'; put 'put ''cyxDLEspfSl9KSl9LDUzMzY0OihjLGwsdCk9Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5rZXksbz1uLnNldDtuLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24oZixpLHAseSl7byhmLGksZShwKSxzKHkpKX19KX0sNTE0MzI6KGMsbCx0KT0+e3ZhciBuPXQoNTAxMzMpLGU9''@;'; put 'put ''dCgyNzAwNykscz1uLmtleSxvPW4ubWFwLHU9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24oaSxwKXt2YXIgeT1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOnMoYXJndW1lbnRzWzJdKSx2PW8oZShwKSx5LCExKTtpZih2b2lkIDA9PT12fHwhdi5kZWxldGUoaSkpcmV0''@;'; put 'put ''dXJuITE7aWYodi5zaXplKXJldHVybiEwO3ZhciBnPXUuZ2V0KHApO3JldHVybiBnLmRlbGV0ZSh5KSwhIWcuc2l6ZXx8dS5kZWxldGUocCl9fSl9LDg0NDE2OihjLGwsdCk9Pnt2YXIgbj10KDk4MTg0KSxlPXQoOTQ5MCkscz10KDUwMTMzKSxvPXQoMjcwMDcpLHU9dCg0NjgpLGY9cy5rZXlz''@;'; put 'put ''LGk9cy5rZXkscD1mdW5jdGlvbih5LHYpe3ZhciBnPWYoeSx2KSx4PXUoeSk7aWYobnVsbD09PXgpcmV0dXJuIGc7dmFyIEU9cCh4LHYpO3JldHVybiBFLmxlbmd0aD9nLmxlbmd0aD9lKG5ldyBuKGcuY29uY2F0KEUpKSk6RTpnfTtzLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHYp''@;'; put 'put ''e3JldHVybiBwKG8odiksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDppKGFyZ3VtZW50c1sxXSkpfX0pfSwyNjU2MjooYyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoNDY4KSxvPW4uaGFzLHU9bi5nZXQsZj1uLmtleSxpPWZ1bmN0aW9uKHAseSx2KXtpZihvKHAseSx2''@;'; put 'put ''KSlyZXR1cm4gdShwLHksdik7dmFyIHg9cyh5KTtyZXR1cm4gbnVsbCE9PXg/aShwLHgsdik6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24oeSx2KXtyZXR1cm4gaSh5LGUodiksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpmKGFyZ3VtZW50c1syXSkpfX0pfSwzMjIxMzoo''@;'; put 'put ''YyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPW4ua2V5cyxvPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24oZil7cmV0dXJuIHMoZShmKSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOm8oYXJndW1lbnRzWzFdKSl9fSl9LDk4NjgxOihjLGwsdCk9''@;'; put 'put ''Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5nZXQsbz1uLmtleTtuLmV4cCh7Z2V0T3duTWV0YWRhdGE6ZnVuY3Rpb24oZixpKXtyZXR1cm4gcyhmLGUoaSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSw2MzQ3MTooYyxsLHQpPT57dmFyIG49''@;'; put 'put ''dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoNDY4KSxvPW4uaGFzLHU9bi5rZXksZj1mdW5jdGlvbihpLHAseSl7aWYobyhpLHAseSkpcmV0dXJuITA7dmFyIGc9cyhwKTtyZXR1cm4gbnVsbCE9PWcmJmYoaSxnLHkpfTtuLmV4cCh7aGFzTWV0YWRhdGE6ZnVuY3Rpb24ocCx5KXtyZXR1cm4gZihw''@;'; put 'put ''LGUoeSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDp1KGFyZ3VtZW50c1syXSkpfX0pfSw0MzI5OihjLGwsdCk9Pnt2YXIgbj10KDUwMTMzKSxlPXQoMjcwMDcpLHM9bi5oYXMsbz1uLmtleTtuLmV4cCh7aGFzT3duTWV0YWRhdGE6ZnVuY3Rpb24oZixpKXtyZXR1cm4gcyhmLGUoaSksYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpvKGFyZ3VtZW50c1syXSkpfX0pfSwyNTE1OTooYyxsLHQpPT57dmFyIG49dCg1MDEzMyksZT10KDI3MDA3KSxzPXQoMjQ5NjMpLG89bi5rZXksdT1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oaSxwKXtyZXR1cm4gZnVuY3Rpb24odixnKXt1''@;'; put 'put ''KGkscCwodm9pZCAwIT09Zz9lOnMpKHYpLG8oZykpfX19KX0sOTExODE6KGMsbCx0KT0+e2Zvcih2YXIgbj10KDU2OTk3KSxlPXQoNDcxODQpLHM9dCg3NzIzNCksbz10KDM4MTYpLHU9dCg4NzcyOCksZj10KDg3MjM0KSxpPXQoODYzMTQpLHA9aSgiaXRlcmF0b3IiKSx5PWkoInRvU3RyaW5n''@;'; put 'put ''VGFnIiksdj1mLkFycmF5LGc9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZp''@;'; put 'put ''bGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDoh''@;'; put 'put ''MSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlz''@;'; put 'put ''dDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSx4PWUoZyksRT0wO0U8eC5sZW5ndGg7RSsrKXt2YXIgQixqPXhbRV0sdz1nW2pdLFI9b1tqXSxGPVImJlIucHJvdG90eXBlO2lmKEYmJihGW3BdfHx1KEYscCx2KSxGW3ldfHx1KEYseSxqKSxm''@;'; put 'put ''W2pdPXYsdykpZm9yKEIgaW4gbilGW0JdfHxzKEYsQixuW0JdLCEwKX19LDEyMDMwOmM9PnsidXNlIHN0cmljdCI7Yy5leHBvcnRzPUpTT04ucGFyc2UoJ3sibG9jYWxlIjoiZW4iLCJkYXRlIjp7ImNhIjpbImdyZWdvcnkiLCJidWRkaGlzdCIsImNoaW5lc2UiLCJjb3B0aWMiLCJkYW5naSIs''@;'; put 'put ''ImV0aGlvYWEiLCJldGhpb3BpYyIsImdlbmVyaWMiLCJoZWJyZXciLCJpbmRpYW4iLCJpc2xhbWljIiwiaXNsYW1pY2MiLCJqYXBhbmVzZSIsInBlcnNpYW4iLCJyb2MiXSwiaG91ck5vMCI6dHJ1ZSwiaG91cjEyIjp0cnVlLCJmb3JtYXRzIjp7InNob3J0IjoiezF9LCB7MH0iLCJtZWRpdW0i''@;'; put 'put ''OiJ7MX0sIHswfSIsImZ1bGwiOiJ7MX0gXCdhdFwnIHswfSIsImxvbmciOiJ7MX0gXCdhdFwnIHswfSIsImF2YWlsYWJsZUZvcm1hdHMiOnsiZCI6ImQiLCJFIjoiY2NjIiwiRWQiOiJkIEUiLCJFaG0iOiJFIGg6bW0gYSIsIkVIbSI6IkUgSEg6bW0iLCJFaG1zIjoiRSBoOm1tOnNzIGEiLCJF''@;'; put 'put ''SG1zIjoiRSBISDptbTpzcyIsIkd5IjoieSBHIiwiR3lNTU0iOiJNTU0geSBHIiwiR3lNTU1kIjoiTU1NIGQsIHkgRyIsIkd5TU1NRWQiOiJFLCBNTU0gZCwgeSBHIiwiaCI6ImggYSIsIkgiOiJISCIsImhtIjoiaDptbSBhIiwiSG0iOiJISDptbSIsImhtcyI6Img6bW06c3MgYSIsIkhtcyI6''@;'; put 'put ''IkhIOm1tOnNzIiwiaG1zdiI6Img6bW06c3MgYSB2IiwiSG1zdiI6IkhIOm1tOnNzIHYiLCJobXYiOiJoOm1tIGEgdiIsIkhtdiI6IkhIOm1tIHYiLCJNIjoiTCIsIk1kIjoiTS9kIiwiTUVkIjoiRSwgTS9kIiwiTU1NIjoiTExMIiwiTU1NZCI6Ik1NTSBkIiwiTU1NRWQiOiJFLCBNTU0gZCIs''@;'; put 'put ''Ik1NTU1kIjoiTU1NTSBkIiwibXMiOiJtbTpzcyIsInkiOiJ5IiwieU0iOiJNL3kiLCJ5TWQiOiJNL2QveSIsInlNRWQiOiJFLCBNL2QveSIsInlNTU0iOiJNTU0geSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TU1NRWQiOiJFLCBNTU0gZCwgeSIsInlNTU1NIjoiTU1NTSB5IiwieVFRUSI6IlFR''@;'; put 'put ''USB5IiwieVFRUVEiOiJRUVFRIHkifSwiZGF0ZUZvcm1hdHMiOnsieU1NTU1FRUVFZCI6IkVFRUUsIE1NTU0gZCwgeSIsInlNTU1NZCI6Ik1NTU0gZCwgeSIsInlNTU1kIjoiTU1NIGQsIHkiLCJ5TWQiOiJNL2QveXkifSwidGltZUZvcm1hdHMiOnsiaG1tc3N6enp6IjoiaDptbTpzcyBhIHp6''@;'; put 'put ''enoiLCJobXN6IjoiaDptbTpzcyBhIHoiLCJobXMiOiJoOm1tOnNzIGEiLCJobSI6Img6bW0gYSJ9fSwiY2FsZW5kYXJzIjp7ImJ1ZGRoaXN0Ijp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwiQSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkph''@;'; put 'put ''biIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIi''@;'; put 'put ''LCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRu''@;'; put 'put ''ZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJCRSJdLCJzaG9ydCI6WyJCRSJdLCJsb25nIjpbIkJFIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJjaGluZXNlIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIs''@;'; put 'put ''IjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk1vMSIsIk1vMiIsIk1vMyIsIk1vNCIsIk1vNSIsIk1vNiIsIk1vNyIsIk1vOCIsIk1vOSIsIk1vMTAiLCJNbzExIiwiTW8xMiJdLCJsb25nIjpbIk1vbnRoMSIsIk1vbnRoMiIsIk1vbnRo''@;'; put 'put ''MyIsIk1vbnRoNCIsIk1vbnRoNSIsIk1vbnRoNiIsIk1vbnRoNyIsIk1vbnRoOCIsIk1vbnRoOSIsIk1vbnRoMTAiLCJNb250aDExIiwiTW9udGgxMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJX''@;'; put 'put ''ZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiY29wdGljIjp7Im1vbnRocyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiXSwic2hvcnQiOlsiVG91dCIsIkJhYmEiLCJIYXRvciIsIktpYWhrIiwiVG9iYSIsIkFtc2hpciIsIkJhcmFtaGF0IiwiQmFyYW1vdWRhIiwiQmFzaGFucyIsIlBhb25hIiwiRXBlcCIs''@;'; put 'put ''Ik1lc3JhIiwiTmFzaWUiXSwibG9uZyI6WyJUb3V0IiwiQmFiYSIsIkhhdG9yIiwiS2lhaGsiLCJUb2JhIiwiQW1zaGlyIiwiQmFyYW1oYXQiLCJCYXJhbW91ZGEiLCJCYXNoYW5zIiwiUGFvbmEiLCJFcGVwIiwiTWVzcmEiLCJOYXNpZSJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJU''@;'; put 'put ''IiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJy''@;'; put 'put ''b3ciOlsiRVJBMCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZGFuZ2kiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIs''@;'; put 'put ''IjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiTW8xIiwiTW8yIiwiTW8zIiwiTW80IiwiTW81IiwiTW82IiwiTW83IiwiTW84IiwiTW85IiwiTW8xMCIsIk1vMTEiLCJNbzEyIl0sImxvbmciOlsiTW9udGgxIiwiTW9udGgyIiwiTW9udGgzIiwiTW9udGg0IiwiTW9udGg1IiwiTW9udGg2''@;'; put 'put ''IiwiTW9udGg3IiwiTW9udGg4IiwiTW9udGg5IiwiTW9udGgxMCIsIk1vbnRoMTEiLCJNb250aDEyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25n''@;'; put 'put ''IjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJldGhpb3BpYyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1Iiwi''@;'; put 'put ''NiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIl0sInNob3J0IjpbIk1lc2tlcmVtIiwiVGVrZW10IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl0sImxv''@;'; put 'put ''bmciOlsiTWVza2VyZW0iLCJUZWtlbXQiLCJIZWRhciIsIlRhaHNhcyIsIlRlciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNzZSIsIlBhZ3VtZW4iXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIs''@;'; put 'put ''IlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkVSQTAiLCJF''@;'; put 'put ''UkExIl0sInNob3J0IjpbIkVSQTAiLCJFUkExIl0sImxvbmciOlsiRVJBMCIsIkVSQTEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImV0aGlvYWEiOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjEx''@;'; put 'put ''IiwiMTIiLCIxMyJdLCJzaG9ydCI6WyJNZXNrZXJlbSIsIlRla2VtdCIsIkhlZGFyIiwiVGFoc2FzIiwiVGVyIiwiWWVrYXRpdCIsIk1lZ2FiaXQiLCJNaWF6aWEiLCJHZW5ib3QiLCJTZW5lIiwiSGFtbGUiLCJOZWhhc3NlIiwiUGFndW1lbiJdLCJsb25nIjpbIk1lc2tlcmVtIiwiVGVrZW10''@;'; put 'put ''IiwiSGVkYXIiLCJUYWhzYXMiLCJUZXIiLCJZZWthdGl0IiwiTWVnYWJpdCIsIk1pYXppYSIsIkdlbmJvdCIsIlNlbmUiLCJIYW1sZSIsIk5laGFzc2UiLCJQYWd1bWVuIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJFUkEwIl0sInNob3J0IjpbIkVSQTAiXSwibG9uZyI6''@;'; put 'put ''WyJFUkEwIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJnZW5lcmljIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk0wMSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0w''@;'; put 'put ''NSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdLCJsb25nIjpbIk0wMSIsIk0wMiIsIk0wMyIsIk0wNCIsIk0wNSIsIk0wNiIsIk0wNyIsIk0wOCIsIk0wOSIsIk0xMCIsIk0xMSIsIk0xMiJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQi''@;'; put 'put ''LCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiRVJB''@;'; put 'put ''MCIsIkVSQTEiXSwic2hvcnQiOlsiRVJBMCIsIkVSQTEiXSwibG9uZyI6WyJFUkEwIiwiRVJBMSJdfSwiZGF5UGVyaW9kcyI6eyJhbSI6IkFNIiwicG0iOiJQTSJ9fSwiZ3JlZ29yeSI6eyJtb250aHMiOnsibmFycm93IjpbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8i''@;'; put 'put ''LCJOIiwiRCJdLCJzaG9ydCI6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSwibG9uZyI6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3Qi''@;'; put 'put ''LCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdfSwiZGF5cyI6eyJuYXJyb3ciOlsiUyIsIk0iLCJUIiwiVyIsIlQiLCJGIiwiUyJdLCJzaG9ydCI6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSwibG9uZyI6WyJTdW5kYXkiLCJN''@;'; put 'put ''b25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdfSwiZXJhcyI6eyJuYXJyb3ciOlsiQiIsIkEiLCJCQ0UiLCJDRSJdLCJzaG9ydCI6WyJCQyIsIkFEIiwiQkNFIiwiQ0UiXSwibG9uZyI6WyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21p''@;'; put 'put ''bmkiLCJCZWZvcmUgQ29tbW9uIEVyYSIsIkNvbW1vbiBFcmEiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImhlYnJldyI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiNyJd''@;'; put 'put ''LCJzaG9ydCI6WyJUaXNocmkiLCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXSwibG9uZyI6WyJUaXNocmkiLCJIZXNodmFuIiwiS2lzbGV2IiwiVGV2''@;'; put 'put ''ZXQiLCJTaGV2YXQiLCJBZGFyIEkiLCJBZGFyIiwiTmlzYW4iLCJJeWFyIiwiU2l2YW4iLCJUYW11eiIsIkF2IiwiRWx1bCIsIkFkYXIgSUkiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwi''@;'; put 'put ''VGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFNIl0sInNob3J0IjpbIkFNIl0sImxvbmciOlsiQU0iXX0sImRheVBlcmlvZHMi''@;'; put 'put ''OnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImluZGlhbiI6eyJtb250aHMiOnsibmFycm93IjpbIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiJdLCJzaG9ydCI6WyJDaGFpdHJhIiwiVmFpc2FraGEiLCJKeWFpc3RoYSIsIkFzYWRoYSIsIlNyYXZhbmEi''@;'; put 'put ''LCJCaGFkcmEiLCJBc3ZpbmEiLCJLYXJ0aWthIiwiQWdyYWhheWFuYSIsIlBhdXNhIiwiTWFnaGEiLCJQaGFsZ3VuYSJdLCJsb25nIjpbIkNoYWl0cmEiLCJWYWlzYWtoYSIsIkp5YWlzdGhhIiwiQXNhZGhhIiwiU3JhdmFuYSIsIkJoYWRyYSIsIkFzdmluYSIsIkthcnRpa2EiLCJBZ3JhaGF5''@;'; put 'put ''YW5hIiwiUGF1c2EiLCJNYWdoYSIsIlBoYWxndW5hIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNk''@;'; put 'put ''YXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJTYWthIl0sInNob3J0IjpbIlNha2EiXSwibG9uZyI6WyJTYWthIl19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJpc2xhbWljIjp7Im1vbnRocyI6''@;'; put 'put ''eyJuYXJyb3ciOlsiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJhbS4iLCJTaGF3LiIsIkRodVx1MDJiYmwt''@;'; put 'put ''US4iLCJEaHVcdTAyYmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHVcdTAyYmJsLVFpXHUwMmJi''@;'; put 'put ''ZGFoIiwiRGh1XHUwMmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldl''@;'; put 'put ''ZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImlzbGFtaWNjIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsi''@;'; put 'put ''MSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIl0sInNob3J0IjpbIk11aC4iLCJTYWYuIiwiUmFiLiBJIiwiUmFiLiBJSSIsIkp1bS4gSSIsIkp1bS4gSUkiLCJSYWouIiwiU2hhLiIsIlJhbS4iLCJTaGF3LiIsIkRodVx1MDJiYmwtUS4iLCJEaHVcdTAy''@;'; put 'put ''YmJsLUguIl0sImxvbmciOlsiTXVoYXJyYW0iLCJTYWZhciIsIlJhYmlcdTAyYmIgSSIsIlJhYmlcdTAyYmIgSUkiLCJKdW1hZGEgSSIsIkp1bWFkYSBJSSIsIlJhamFiIiwiU2hhXHUwMmJiYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHVcdTAyYmJsLVFpXHUwMmJiZGFoIiwiRGh1XHUw''@;'; put 'put ''MmJibC1IaWpqYWgiXX0sImRheXMiOnsibmFycm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRo''@;'; put 'put ''dXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXX0sImVyYXMiOnsibmFycm93IjpbIkFIIl0sInNob3J0IjpbIkFIIl0sImxvbmciOlsiQUgiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sImphcGFuZXNlIjp7Im1vbnRocyI6eyJuYXJyb3ciOlsiSiIsIkYiLCJNIiwi''@;'; put 'put ''QSIsIk0iLCJKIiwiSiIsIkEiLCJTIiwiTyIsIk4iLCJEIl0sInNob3J0IjpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLCJsb25nIjpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJN''@;'; put 'put ''YXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIs''@;'; put 'put ''IlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJUYWlrYSAoNjQ1XHUyMDEzNjUwKSIsIkhha3VjaGkgKDY1MFx1MjAxMzY3MSkiLCJIYWt1aFx1MDE0''@;'; put 'put ''ZCAoNjcyXHUyMDEzNjg2KSIsIlNodWNoXHUwMTRkICg2ODZcdTIwMTM3MDEpIiwiVGFpaFx1MDE0ZCAoNzAxXHUyMDEzNzA0KSIsIktlaXVuICg3MDRcdTIwMTM3MDgpIiwiV2FkXHUwMTRkICg3MDhcdTIwMTM3MTUpIiwiUmVpa2kgKDcxNVx1MjAxMzcxNykiLCJZXHUwMTRkclx1MDE0ZCAo''@;'; put 'put ''NzE3XHUyMDEzNzI0KSIsIkppbmtpICg3MjRcdTIwMTM3MjkpIiwiVGVucHlcdTAxNGQgKDcyOVx1MjAxMzc0OSkiLCJUZW5weVx1MDE0ZC1rYW1wXHUwMTRkICg3NDktNzQ5KSIsIlRlbnB5XHUwMTRkLXNoXHUwMTRkaFx1MDE0ZCAoNzQ5LTc1NykiLCJUZW5weVx1MDE0ZC1oXHUwMTRkamkg''@;'; put 'put ''KDc1Ny03NjUpIiwiVGVucHlcdTAxNGQtamluZ28gKDc2NS03NjcpIiwiSmluZ28ta2VpdW4gKDc2Ny03NzApIiwiSFx1MDE0ZGtpICg3NzBcdTIwMTM3ODApIiwiVGVuLVx1MDE0ZCAoNzgxLTc4MikiLCJFbnJ5YWt1ICg3ODJcdTIwMTM4MDYpIiwiRGFpZFx1MDE0ZCAoODA2XHUyMDEzODEw''@;'; put 'put ''KSIsIktcdTAxNGRuaW4gKDgxMFx1MjAxMzgyNCkiLCJUZW5jaFx1MDE0ZCAoODI0XHUyMDEzODM0KSIsIkpcdTAxNGR3YSAoODM0XHUyMDEzODQ4KSIsIkthalx1MDE0ZCAoODQ4XHUyMDEzODUxKSIsIk5pbmp1ICg4NTFcdTIwMTM4NTQpIiwiU2Fpa1x1MDE0ZCAoODU0XHUyMDEzODU3KSIs''@;'; put 'put ''IlRlbi1hbiAoODU3LTg1OSkiLCJKXHUwMTRkZ2FuICg4NTlcdTIwMTM4NzcpIiwiR2FuZ3lcdTAxNGQgKDg3N1x1MjAxMzg4NSkiLCJOaW5uYSAoODg1XHUyMDEzODg5KSIsIkthbnB5XHUwMTRkICg4ODlcdTIwMTM4OTgpIiwiU2hcdTAxNGR0YWkgKDg5OFx1MjAxMzkwMSkiLCJFbmdpICg5''@;'; put 'put ''MDFcdTIwMTM5MjMpIiwiRW5jaFx1MDE0ZCAoOTIzXHUyMDEzOTMxKSIsIkpcdTAxNGRoZWkgKDkzMVx1MjAxMzkzOCkiLCJUZW5neVx1MDE0ZCAoOTM4XHUyMDEzOTQ3KSIsIlRlbnJ5YWt1ICg5NDdcdTIwMTM5NTcpIiwiVGVudG9rdSAoOTU3XHUyMDEzOTYxKSIsIlx1MDE0Y3dhICg5NjFc''@;'; put 'put ''dTIwMTM5NjQpIiwiS1x1MDE0ZGhcdTAxNGQgKDk2NFx1MjAxMzk2OCkiLCJBbm5hICg5NjhcdTIwMTM5NzApIiwiVGVucm9rdSAoOTcwXHUyMDEzOTczKSIsIlRlblx1MjAxOWVuICg5NzNcdTIwMTM5NzYpIiwiSlx1MDE0ZGdlbiAoOTc2XHUyMDEzOTc4KSIsIlRlbmdlbiAoOTc4XHUyMDEz''@;'; put 'put ''OTgzKSIsIkVpa2FuICg5ODNcdTIwMTM5ODUpIiwiS2FubmEgKDk4NVx1MjAxMzk4NykiLCJFaWVuICg5ODdcdTIwMTM5ODkpIiwiRWlzbyAoOTg5XHUyMDEzOTkwKSIsIlNoXHUwMTRkcnlha3UgKDk5MFx1MjAxMzk5NSkiLCJDaFx1MDE0ZHRva3UgKDk5NVx1MjAxMzk5OSkiLCJDaFx1MDE0''@;'; put 'put ''ZGhcdTAxNGQgKDk5OVx1MjAxMzEwMDQpIiwiS2Fua1x1MDE0ZCAoMTAwNFx1MjAxMzEwMTIpIiwiQ2hcdTAxNGR3YSAoMTAxMlx1MjAxMzEwMTcpIiwiS2FubmluICgxMDE3XHUyMDEzMTAyMSkiLCJKaWFuICgxMDIxXHUyMDEzMTAyNCkiLCJNYW5qdSAoMTAyNFx1MjAxMzEwMjgpIiwiQ2hc''@;'; put 'put ''dTAxNGRnZW4gKDEwMjhcdTIwMTMxMDM3KSIsIkNoXHUwMTRkcnlha3UgKDEwMzdcdTIwMTMxMDQwKSIsIkNoXHUwMTRka3lcdTAxNmIgKDEwNDBcdTIwMTMxMDQ0KSIsIkthbnRva3UgKDEwNDRcdTIwMTMxMDQ2KSIsIkVpc2hcdTAxNGQgKDEwNDZcdTIwMTMxMDUzKSIsIlRlbmdpICgxMDUz''@;'; put 'put ''XHUyMDEzMTA1OCkiLCJLXHUwMTRkaGVpICgxMDU4XHUyMDEzMTA2NSkiLCJKaXJ5YWt1ICgxMDY1XHUyMDEzMTA2OSkiLCJFbmt5XHUwMTZiICgxMDY5XHUyMDEzMTA3NCkiLCJTaFx1MDE0ZGhvICgxMDc0XHUyMDEzMTA3NykiLCJTaFx1MDE0ZHJ5YWt1ICgxMDc3XHUyMDEzMTA4MSkiLCJF''@;'; put 'put ''aWhcdTAxNGQgKDEwODFcdTIwMTMxMDg0KSIsIlx1MDE0Y3Rva3UgKDEwODRcdTIwMTMxMDg3KSIsIkthbmppICgxMDg3XHUyMDEzMTA5NCkiLCJLYWhcdTAxNGQgKDEwOTRcdTIwMTMxMDk2KSIsIkVpY2hcdTAxNGQgKDEwOTZcdTIwMTMxMDk3KSIsIkpcdTAxNGR0b2t1ICgxMDk3XHUyMDEz''@;'; put 'put ''MTA5OSkiLCJLXHUwMTRkd2EgKDEwOTlcdTIwMTMxMTA0KSIsIkNoXHUwMTRkamkgKDExMDRcdTIwMTMxMTA2KSIsIkthc2hcdTAxNGQgKDExMDZcdTIwMTMxMTA4KSIsIlRlbm5pbiAoMTEwOFx1MjAxMzExMTApIiwiVGVuLWVpICgxMTEwLTExMTMpIiwiRWlreVx1MDE2YiAoMTExM1x1MjAx''@;'; put 'put ''MzExMTgpIiwiR2VuXHUyMDE5ZWkgKDExMThcdTIwMTMxMTIwKSIsIkhcdTAxNGRhbiAoMTEyMFx1MjAxMzExMjQpIiwiVGVuamkgKDExMjRcdTIwMTMxMTI2KSIsIkRhaWppICgxMTI2XHUyMDEzMTEzMSkiLCJUZW5zaFx1MDE0ZCAoMTEzMVx1MjAxMzExMzIpIiwiQ2hcdTAxNGRzaFx1MDE0''@;'; put 'put ''ZCAoMTEzMlx1MjAxMzExMzUpIiwiSFx1MDE0ZGVuICgxMTM1XHUyMDEzMTE0MSkiLCJFaWppICgxMTQxXHUyMDEzMTE0MikiLCJLXHUwMTRkamkgKDExNDJcdTIwMTMxMTQ0KSIsIlRlblx1MjAxOXlcdTAxNGQgKDExNDRcdTIwMTMxMTQ1KSIsIkt5XHUwMTZiYW4gKDExNDVcdTIwMTMxMTUx''@;'; put 'put ''KSIsIk5pbnBlaSAoMTE1MVx1MjAxMzExNTQpIiwiS3lcdTAxNmJqdSAoMTE1NFx1MjAxMzExNTYpIiwiSFx1MDE0ZGdlbiAoMTE1Nlx1MjAxMzExNTkpIiwiSGVpamkgKDExNTlcdTIwMTMxMTYwKSIsIkVpcnlha3UgKDExNjBcdTIwMTMxMTYxKSIsIlx1MDE0Y2hvICgxMTYxXHUyMDEzMTE2''@;'; put 'put ''MykiLCJDaFx1MDE0ZGthbiAoMTE2M1x1MjAxMzExNjUpIiwiRWltYW4gKDExNjVcdTIwMTMxMTY2KSIsIk5pblx1MjAxOWFuICgxMTY2XHUyMDEzMTE2OSkiLCJLYVx1MDE0ZCAoMTE2OVx1MjAxMzExNzEpIiwiU2hcdTAxNGRhbiAoMTE3MVx1MjAxMzExNzUpIiwiQW5nZW4gKDExNzVcdTIw''@;'; put 'put ''MTMxMTc3KSIsIkppc2hcdTAxNGQgKDExNzdcdTIwMTMxMTgxKSIsIllcdTAxNGR3YSAoMTE4MVx1MjAxMzExODIpIiwiSnVlaSAoMTE4Mlx1MjAxMzExODQpIiwiR2Vucnlha3UgKDExODRcdTIwMTMxMTg1KSIsIkJ1bmppICgxMTg1XHUyMDEzMTE5MCkiLCJLZW5reVx1MDE2YiAoMTE5MFx1''@;'; put 'put ''MjAxMzExOTkpIiwiU2hcdTAxNGRqaSAoMTE5OVx1MjAxMzEyMDEpIiwiS2VubmluICgxMjAxXHUyMDEzMTIwNCkiLCJHZW5reVx1MDE2YiAoMTIwNFx1MjAxMzEyMDYpIiwiS2VuXHUyMDE5ZWkgKDEyMDZcdTIwMTMxMjA3KSIsIkpcdTAxNGRnZW4gKDEyMDdcdTIwMTMxMjExKSIsIktlbnJ5''@;'; put 'put ''YWt1ICgxMjExXHUyMDEzMTIxMykiLCJLZW5wXHUwMTRkICgxMjEzXHUyMDEzMTIxOSkiLCJKXHUwMTRka3lcdTAxNmIgKDEyMTlcdTIwMTMxMjIyKSIsIkpcdTAxNGRcdTAxNGQgKDEyMjJcdTIwMTMxMjI0KSIsIkdlbm5pbiAoMTIyNFx1MjAxMzEyMjUpIiwiS2Fyb2t1ICgxMjI1XHUyMDEz''@;'; put 'put ''MTIyNykiLCJBbnRlaSAoMTIyN1x1MjAxMzEyMjkpIiwiS2Fua2kgKDEyMjlcdTIwMTMxMjMyKSIsIkpcdTAxNGRlaSAoMTIzMlx1MjAxMzEyMzMpIiwiVGVucHVrdSAoMTIzM1x1MjAxMzEyMzQpIiwiQnVucnlha3UgKDEyMzRcdTIwMTMxMjM1KSIsIkthdGVpICgxMjM1XHUyMDEzMTIzOCki''@;'; put 'put ''LCJSeWFrdW5pbiAoMTIzOFx1MjAxMzEyMzkpIiwiRW5cdTIwMTlcdTAxNGQgKDEyMzlcdTIwMTMxMjQwKSIsIk5pbmppICgxMjQwXHUyMDEzMTI0MykiLCJLYW5nZW4gKDEyNDNcdTIwMTMxMjQ3KSIsIkhcdTAxNGRqaSAoMTI0N1x1MjAxMzEyNDkpIiwiS2VuY2hcdTAxNGQgKDEyNDlcdTIw''@;'; put 'put ''MTMxMjU2KSIsIktcdTAxNGRnZW4gKDEyNTZcdTIwMTMxMjU3KSIsIlNoXHUwMTRka2EgKDEyNTdcdTIwMTMxMjU5KSIsIlNoXHUwMTRkZ2VuICgxMjU5XHUyMDEzMTI2MCkiLCJCdW5cdTIwMTlcdTAxNGQgKDEyNjBcdTIwMTMxMjYxKSIsIktcdTAxNGRjaFx1MDE0ZCAoMTI2MVx1MjAxMzEy''@;'; put 'put ''NjQpIiwiQnVuXHUyMDE5ZWkgKDEyNjRcdTIwMTMxMjc1KSIsIktlbmppICgxMjc1XHUyMDEzMTI3OCkiLCJLXHUwMTRkYW4gKDEyNzhcdTIwMTMxMjg4KSIsIlNoXHUwMTRkXHUwMTRkICgxMjg4XHUyMDEzMTI5MykiLCJFaW5pbiAoMTI5M1x1MjAxMzEyOTkpIiwiU2hcdTAxNGRhbiAoMTI5''@;'; put 'put ''OVx1MjAxMzEzMDIpIiwiS2VuZ2VuICgxMzAyXHUyMDEzMTMwMykiLCJLYWdlbiAoMTMwM1x1MjAxMzEzMDYpIiwiVG9rdWppICgxMzA2XHUyMDEzMTMwOCkiLCJFbmt5XHUwMTRkICgxMzA4XHUyMDEzMTMxMSkiLCJcdTAxNGNjaFx1MDE0ZCAoMTMxMVx1MjAxMzEzMTIpIiwiU2hcdTAxNGR3''@;'; put 'put ''YSAoMTMxMlx1MjAxMzEzMTcpIiwiQnVucFx1MDE0ZCAoMTMxN1x1MjAxMzEzMTkpIiwiR2VuXHUwMTRkICgxMzE5XHUyMDEzMTMyMSkiLCJHZW5rXHUwMTRkICgxMzIxXHUyMDEzMTMyNCkiLCJTaFx1MDE0ZGNoXHUwMTZiICgxMzI0XHUyMDEzMTMyNikiLCJLYXJ5YWt1ICgxMzI2XHUyMDEz''@;'; put 'put ''MTMyOSkiLCJHZW50b2t1ICgxMzI5XHUyMDEzMTMzMSkiLCJHZW5rXHUwMTRkICgxMzMxXHUyMDEzMTMzNCkiLCJLZW5tdSAoMTMzNFx1MjAxMzEzMzYpIiwiRW5nZW4gKDEzMzZcdTIwMTMxMzQwKSIsIktcdTAxNGRrb2t1ICgxMzQwXHUyMDEzMTM0NikiLCJTaFx1MDE0ZGhlaSAoMTM0Nlx1''@;'; put 'put ''MjAxMzEzNzApIiwiS2VudG9rdSAoMTM3MFx1MjAxMzEzNzIpIiwiQnVuY2hcdTAxNmIgKDEzNzJcdTIwMTMxMzc1KSIsIlRlbmp1ICgxMzc1XHUyMDEzMTM3OSkiLCJLXHUwMTRkcnlha3UgKDEzNzlcdTIwMTMxMzgxKSIsIktcdTAxNGR3YSAoMTM4MVx1MjAxMzEzODQpIiwiR2VuY2hcdTAx''@;'; put 'put ''NmIgKDEzODRcdTIwMTMxMzkyKSIsIk1laXRva3UgKDEzODRcdTIwMTMxMzg3KSIsIktha2VpICgxMzg3XHUyMDEzMTM4OSkiLCJLXHUwMTRkXHUwMTRkICgxMzg5XHUyMDEzMTM5MCkiLCJNZWl0b2t1ICgxMzkwXHUyMDEzMTM5NCkiLCJcdTAxNGNlaSAoMTM5NFx1MjAxMzE0MjgpIiwiU2hc''@;'; put 'put ''dTAxNGRjaFx1MDE0ZCAoMTQyOFx1MjAxMzE0MjkpIiwiRWlreVx1MDE0ZCAoMTQyOVx1MjAxMzE0NDEpIiwiS2FraXRzdSAoMTQ0MVx1MjAxMzE0NDQpIiwiQnVuXHUyMDE5YW4gKDE0NDRcdTIwMTMxNDQ5KSIsIkhcdTAxNGR0b2t1ICgxNDQ5XHUyMDEzMTQ1MikiLCJLeVx1MDE0ZHRva3Ug''@;'; put 'put ''KDE0NTJcdTIwMTMxNDU1KSIsIktcdTAxNGRzaFx1MDE0ZCAoMTQ1NVx1MjAxMzE0NTcpIiwiQ2hcdTAxNGRyb2t1ICgxNDU3XHUyMDEzMTQ2MCkiLCJLYW5zaFx1MDE0ZCAoMTQ2MFx1MjAxMzE0NjYpIiwiQnVuc2hcdTAxNGQgKDE0NjZcdTIwMTMxNDY3KSIsIlx1MDE0Y25pbiAoMTQ2N1x1''@;'; put 'put ''MjAxMzE0NjkpIiwiQnVubWVpICgxNDY5XHUyMDEzMTQ4NykiLCJDaFx1MDE0ZGt5XHUwMTRkICgxNDg3XHUyMDEzMTQ4OSkiLCJFbnRva3UgKDE0ODlcdTIwMTMxNDkyKSIsIk1laVx1MDE0ZCAoMTQ5Mlx1MjAxMzE1MDEpIiwiQnVua2kgKDE1MDFcdTIwMTMxNTA0KSIsIkVpc2hcdTAxNGQg''@;'; put 'put ''KDE1MDRcdTIwMTMxNTIxKSIsIlRhaWVpICgxNTIxXHUyMDEzMTUyOCkiLCJLeVx1MDE0ZHJva3UgKDE1MjhcdTIwMTMxNTMyKSIsIlRlbmJ1biAoMTUzMlx1MjAxMzE1NTUpIiwiS1x1MDE0ZGppICgxNTU1XHUyMDEzMTU1OCkiLCJFaXJva3UgKDE1NThcdTIwMTMxNTcwKSIsIkdlbmtpICgx''@;'; put 'put ''NTcwXHUyMDEzMTU3MykiLCJUZW5zaFx1MDE0ZCAoMTU3M1x1MjAxMzE1OTIpIiwiQnVucm9rdSAoMTU5Mlx1MjAxMzE1OTYpIiwiS2VpY2hcdTAxNGQgKDE1OTZcdTIwMTMxNjE1KSIsIkdlbm5hICgxNjE1XHUyMDEzMTYyNCkiLCJLYW5cdTIwMTllaSAoMTYyNFx1MjAxMzE2NDQpIiwiU2hc''@;'; put 'put ''dTAxNGRobyAoMTY0NFx1MjAxMzE2NDgpIiwiS2VpYW4gKDE2NDhcdTIwMTMxNjUyKSIsIkpcdTAxNGRcdTAxNGQgKDE2NTJcdTIwMTMxNjU1KSIsIk1laXJla2kgKDE2NTVcdTIwMTMxNjU4KSIsIk1hbmppICgxNjU4XHUyMDEzMTY2MSkiLCJLYW5idW4gKDE2NjFcdTIwMTMxNjczKSIsIkVu''@;'; put 'put ''cFx1MDE0ZCAoMTY3M1x1MjAxMzE2ODEpIiwiVGVubmEgKDE2ODFcdTIwMTMxNjg0KSIsIkpcdTAxNGRreVx1MDE0ZCAoMTY4NFx1MjAxMzE2ODgpIiwiR2Vucm9rdSAoMTY4OFx1MjAxMzE3MDQpIiwiSFx1MDE0ZGVpICgxNzA0XHUyMDEzMTcxMSkiLCJTaFx1MDE0ZHRva3UgKDE3MTFcdTIw''@;'; put 'put ''MTMxNzE2KSIsIkt5XHUwMTRkaFx1MDE0ZCAoMTcxNlx1MjAxMzE3MzYpIiwiR2VuYnVuICgxNzM2XHUyMDEzMTc0MSkiLCJLYW5wXHUwMTRkICgxNzQxXHUyMDEzMTc0NCkiLCJFbmt5XHUwMTRkICgxNzQ0XHUyMDEzMTc0OCkiLCJLYW5cdTIwMTllbiAoMTc0OFx1MjAxMzE3NTEpIiwiSFx1''@;'; put 'put ''MDE0ZHJla2kgKDE3NTFcdTIwMTMxNzY0KSIsIk1laXdhICgxNzY0XHUyMDEzMTc3MikiLCJBblx1MjAxOWVpICgxNzcyXHUyMDEzMTc4MSkiLCJUZW5tZWkgKDE3ODFcdTIwMTMxNzg5KSIsIkthbnNlaSAoMTc4OVx1MjAxMzE4MDEpIiwiS3lcdTAxNGR3YSAoMTgwMVx1MjAxMzE4MDQpIiwi''@;'; put 'put ''QnVua2EgKDE4MDRcdTIwMTMxODE4KSIsIkJ1bnNlaSAoMTgxOFx1MjAxMzE4MzApIiwiVGVucFx1MDE0ZCAoMTgzMFx1MjAxMzE4NDQpIiwiS1x1MDE0ZGthICgxODQ0XHUyMDEzMTg0OCkiLCJLYWVpICgxODQ4XHUyMDEzMTg1NCkiLCJBbnNlaSAoMTg1NFx1MjAxMzE4NjApIiwiTWFuXHUy''@;'; put 'put ''MDE5ZW4gKDE4NjBcdTIwMTMxODYxKSIsIkJ1bmt5XHUwMTZiICgxODYxXHUyMDEzMTg2NCkiLCJHZW5qaSAoMTg2NFx1MjAxMzE4NjUpIiwiS2VpXHUwMTRkICgxODY1XHUyMDEzMTg2OCkiLCJNIiwiVCIsIlMiLCJIIl0sInNob3J0IjpbIlRhaWthICg2NDVcdTIwMTM2NTApIiwiSGFrdWNo''@;'; put 'put ''aSAoNjUwXHUyMDEzNjcxKSIsIkhha3VoXHUwMTRkICg2NzJcdTIwMTM2ODYpIiwiU2h1Y2hcdTAxNGQgKDY4Nlx1MjAxMzcwMSkiLCJUYWloXHUwMTRkICg3MDFcdTIwMTM3MDQpIiwiS2VpdW4gKDcwNFx1MjAxMzcwOCkiLCJXYWRcdTAxNGQgKDcwOFx1MjAxMzcxNSkiLCJSZWlraSAoNzE1''@;'; put 'put ''XHUyMDEzNzE3KSIsIllcdTAxNGRyXHUwMTRkICg3MTdcdTIwMTM3MjQpIiwiSmlua2kgKDcyNFx1MjAxMzcyOSkiLCJUZW5weVx1MDE0ZCAoNzI5XHUyMDEzNzQ5KSIsIlRlbnB5XHUwMTRkLWthbXBcdTAxNGQgKDc0OS03NDkpIiwiVGVucHlcdTAxNGQtc2hcdTAxNGRoXHUwMTRkICg3NDkt''@;'; put 'put ''NzU3KSIsIlRlbnB5XHUwMTRkLWhcdTAxNGRqaSAoNzU3LTc2NSkiLCJUZW5weVx1MDE0ZC1qaW5nbyAoNzY1LTc2NykiLCJKaW5nby1rZWl1biAoNzY3LTc3MCkiLCJIXHUwMTRka2kgKDc3MFx1MjAxMzc4MCkiLCJUZW4tXHUwMTRkICg3ODEtNzgyKSIsIkVucnlha3UgKDc4Mlx1MjAxMzgw''@;'; put 'put ''NikiLCJEYWlkXHUwMTRkICg4MDZcdTIwMTM4MTApIiwiS1x1MDE0ZG5pbiAoODEwXHUyMDEzODI0KSIsIlRlbmNoXHUwMTRkICg4MjRcdTIwMTM4MzQpIiwiSlx1MDE0ZHdhICg4MzRcdTIwMTM4NDgpIiwiS2FqXHUwMTRkICg4NDhcdTIwMTM4NTEpIiwiTmluanUgKDg1MVx1MjAxMzg1NCki''@;'; put 'put ''LCJTYWlrXHUwMTRkICg4NTRcdTIwMTM4NTcpIiwiVGVuLWFuICg4NTctODU5KSIsIkpcdTAxNGRnYW4gKDg1OVx1MjAxMzg3NykiLCJHYW5neVx1MDE0ZCAoODc3XHUyMDEzODg1KSIsIk5pbm5hICg4ODVcdTIwMTM4ODkpIiwiS2FucHlcdTAxNGQgKDg4OVx1MjAxMzg5OCkiLCJTaFx1MDE0''@;'; put 'put ''ZHRhaSAoODk4XHUyMDEzOTAxKSIsIkVuZ2kgKDkwMVx1MjAxMzkyMykiLCJFbmNoXHUwMTRkICg5MjNcdTIwMTM5MzEpIiwiSlx1MDE0ZGhlaSAoOTMxXHUyMDEzOTM4KSIsIlRlbmd5XHUwMTRkICg5MzhcdTIwMTM5NDcpIiwiVGVucnlha3UgKDk0N1x1MjAxMzk1NykiLCJUZW50b2t1ICg5''@;'; put 'put ''NTdcdTIwMTM5NjEpIiwiXHUwMTRjd2EgKDk2MVx1MjAxMzk2NCkiLCJLXHUwMTRkaFx1MDE0ZCAoOTY0XHUyMDEzOTY4KSIsIkFubmEgKDk2OFx1MjAxMzk3MCkiLCJUZW5yb2t1ICg5NzBcdTIwMTM5NzMpIiwiVGVuXHUyMDE5ZW4gKDk3M1x1MjAxMzk3NikiLCJKXHUwMTRkZ2VuICg5NzZc''@;'; put 'put ''dTIwMTM5NzgpIiwiVGVuZ2VuICg5NzhcdTIwMTM5ODMpIiwiRWlrYW4gKDk4M1x1MjAxMzk4NSkiLCJLYW5uYSAoOTg1XHUyMDEzOTg3KSIsIkVpZW4gKDk4N1x1MjAxMzk4OSkiLCJFaXNvICg5ODlcdTIwMTM5OTApIiwiU2hcdTAxNGRyeWFrdSAoOTkwXHUyMDEzOTk1KSIsIkNoXHUwMTRk''@;'; put 'put ''dG9rdSAoOTk1XHUyMDEzOTk5KSIsIkNoXHUwMTRkaFx1MDE0ZCAoOTk5XHUyMDEzMTAwNCkiLCJLYW5rXHUwMTRkICgxMDA0XHUyMDEzMTAxMikiLCJDaFx1MDE0ZHdhICgxMDEyXHUyMDEzMTAxNykiLCJLYW5uaW4gKDEwMTdcdTIwMTMxMDIxKSIsIkppYW4gKDEwMjFcdTIwMTMxMDI0KSIs''@;'; put 'put ''Ik1hbmp1ICgxMDI0XHUyMDEzMTAyOCkiLCJDaFx1MDE0ZGdlbiAoMTAyOFx1MjAxMzEwMzcpIiwiQ2hcdTAxNGRyeWFrdSAoMTAzN1x1MjAxMzEwNDApIiwiQ2hcdTAxNGRreVx1MDE2YiAoMTA0MFx1MjAxMzEwNDQpIiwiS2FudG9rdSAoMTA0NFx1MjAxMzEwNDYpIiwiRWlzaFx1MDE0ZCAo''@;'; put 'put ''MTA0Nlx1MjAxMzEwNTMpIiwiVGVuZ2kgKDEwNTNcdTIwMTMxMDU4KSIsIktcdTAxNGRoZWkgKDEwNThcdTIwMTMxMDY1KSIsIkppcnlha3UgKDEwNjVcdTIwMTMxMDY5KSIsIkVua3lcdTAxNmIgKDEwNjlcdTIwMTMxMDc0KSIsIlNoXHUwMTRkaG8gKDEwNzRcdTIwMTMxMDc3KSIsIlNoXHUw''@;'; put 'put ''MTRkcnlha3UgKDEwNzdcdTIwMTMxMDgxKSIsIkVpaFx1MDE0ZCAoMTA4MVx1MjAxMzEwODQpIiwiXHUwMTRjdG9rdSAoMTA4NFx1MjAxMzEwODcpIiwiS2FuamkgKDEwODdcdTIwMTMxMDk0KSIsIkthaFx1MDE0ZCAoMTA5NFx1MjAxMzEwOTYpIiwiRWljaFx1MDE0ZCAoMTA5Nlx1MjAxMzEw''@;'; put 'put ''OTcpIiwiSlx1MDE0ZHRva3UgKDEwOTdcdTIwMTMxMDk5KSIsIktcdTAxNGR3YSAoMTA5OVx1MjAxMzExMDQpIiwiQ2hcdTAxNGRqaSAoMTEwNFx1MjAxMzExMDYpIiwiS2FzaFx1MDE0ZCAoMTEwNlx1MjAxMzExMDgpIiwiVGVubmluICgxMTA4XHUyMDEzMTExMCkiLCJUZW4tZWkgKDExMTAt''@;'; put 'put ''MTExMykiLCJFaWt5XHUwMTZiICgxMTEzXHUyMDEzMTExOCkiLCJHZW5cdTIwMTllaSAoMTExOFx1MjAxMzExMjApIiwiSFx1MDE0ZGFuICgxMTIwXHUyMDEzMTEyNCkiLCJUZW5qaSAoMTEyNFx1MjAxMzExMjYpIiwiRGFpamkgKDExMjZcdTIwMTMxMTMxKSIsIlRlbnNoXHUwMTRkICgxMTMx''@;'; put 'put ''XHUyMDEzMTEzMikiLCJDaFx1MDE0ZHNoXHUwMTRkICgxMTMyXHUyMDEzMTEzNSkiLCJIXHUwMTRkZW4gKDExMzVcdTIwMTMxMTQxKSIsIkVpamkgKDExNDFcdTIwMTMxMTQyKSIsIktcdTAxNGRqaSAoMTE0Mlx1MjAxMzExNDQpIiwiVGVuXHUyMDE5eVx1MDE0ZCAoMTE0NFx1MjAxMzExNDUp''@;'; put 'put ''IiwiS3lcdTAxNmJhbiAoMTE0NVx1MjAxMzExNTEpIiwiTmlucGVpICgxMTUxXHUyMDEzMTE1NCkiLCJLeVx1MDE2Ymp1ICgxMTU0XHUyMDEzMTE1NikiLCJIXHUwMTRkZ2VuICgxMTU2XHUyMDEzMTE1OSkiLCJIZWlqaSAoMTE1OVx1MjAxMzExNjApIiwiRWlyeWFrdSAoMTE2MFx1MjAxMzEx''@;'; put 'put ''NjEpIiwiXHUwMTRjaG8gKDExNjFcdTIwMTMxMTYzKSIsIkNoXHUwMTRka2FuICgxMTYzXHUyMDEzMTE2NSkiLCJFaW1hbiAoMTE2NVx1MjAxMzExNjYpIiwiTmluXHUyMDE5YW4gKDExNjZcdTIwMTMxMTY5KSIsIkthXHUwMTRkICgxMTY5XHUyMDEzMTE3MSkiLCJTaFx1MDE0ZGFuICgxMTcx''@;'; put 'put ''XHUyMDEzMTE3NSkiLCJBbmdlbiAoMTE3NVx1MjAxMzExNzcpIiwiSmlzaFx1MDE0ZCAoMTE3N1x1MjAxMzExODEpIiwiWVx1MDE0ZHdhICgxMTgxXHUyMDEzMTE4MikiLCJKdWVpICgxMTgyXHUyMDEzMTE4NCkiLCJHZW5yeWFrdSAoMTE4NFx1MjAxMzExODUpIiwiQnVuamkgKDExODVcdTIw''@;'; put 'put ''MTMxMTkwKSIsIktlbmt5XHUwMTZiICgxMTkwXHUyMDEzMTE5OSkiLCJTaFx1MDE0ZGppICgxMTk5XHUyMDEzMTIwMSkiLCJLZW5uaW4gKDEyMDFcdTIwMTMxMjA0KSIsIkdlbmt5XHUwMTZiICgxMjA0XHUyMDEzMTIwNikiLCJLZW5cdTIwMTllaSAoMTIwNlx1MjAxMzEyMDcpIiwiSlx1MDE0''@;'; put 'put ''ZGdlbiAoMTIwN1x1MjAxMzEyMTEpIiwiS2Vucnlha3UgKDEyMTFcdTIwMTMxMjEzKSIsIktlbnBcdTAxNGQgKDEyMTNcdTIwMTMxMjE5KSIsIkpcdTAxNGRreVx1MDE2YiAoMTIxOVx1MjAxMzEyMjIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTIyMlx1MjAxMzEyMjQpIiwiR2VubmluICgxMjI0XHUy''@;'; put 'put ''MDEzMTIyNSkiLCJLYXJva3UgKDEyMjVcdTIwMTMxMjI3KSIsIkFudGVpICgxMjI3XHUyMDEzMTIyOSkiLCJLYW5raSAoMTIyOVx1MjAxMzEyMzIpIiwiSlx1MDE0ZGVpICgxMjMyXHUyMDEzMTIzMykiLCJUZW5wdWt1ICgxMjMzXHUyMDEzMTIzNCkiLCJCdW5yeWFrdSAoMTIzNFx1MjAxMzEy''@;'; put 'put ''MzUpIiwiS2F0ZWkgKDEyMzVcdTIwMTMxMjM4KSIsIlJ5YWt1bmluICgxMjM4XHUyMDEzMTIzOSkiLCJFblx1MjAxOVx1MDE0ZCAoMTIzOVx1MjAxMzEyNDApIiwiTmluamkgKDEyNDBcdTIwMTMxMjQzKSIsIkthbmdlbiAoMTI0M1x1MjAxMzEyNDcpIiwiSFx1MDE0ZGppICgxMjQ3XHUyMDEz''@;'; put 'put ''MTI0OSkiLCJLZW5jaFx1MDE0ZCAoMTI0OVx1MjAxMzEyNTYpIiwiS1x1MDE0ZGdlbiAoMTI1Nlx1MjAxMzEyNTcpIiwiU2hcdTAxNGRrYSAoMTI1N1x1MjAxMzEyNTkpIiwiU2hcdTAxNGRnZW4gKDEyNTlcdTIwMTMxMjYwKSIsIkJ1blx1MjAxOVx1MDE0ZCAoMTI2MFx1MjAxMzEyNjEpIiwi''@;'; put 'put ''S1x1MDE0ZGNoXHUwMTRkICgxMjYxXHUyMDEzMTI2NCkiLCJCdW5cdTIwMTllaSAoMTI2NFx1MjAxMzEyNzUpIiwiS2VuamkgKDEyNzVcdTIwMTMxMjc4KSIsIktcdTAxNGRhbiAoMTI3OFx1MjAxMzEyODgpIiwiU2hcdTAxNGRcdTAxNGQgKDEyODhcdTIwMTMxMjkzKSIsIkVpbmluICgxMjkz''@;'; put 'put ''XHUyMDEzMTI5OSkiLCJTaFx1MDE0ZGFuICgxMjk5XHUyMDEzMTMwMikiLCJLZW5nZW4gKDEzMDJcdTIwMTMxMzAzKSIsIkthZ2VuICgxMzAzXHUyMDEzMTMwNikiLCJUb2t1amkgKDEzMDZcdTIwMTMxMzA4KSIsIkVua3lcdTAxNGQgKDEzMDhcdTIwMTMxMzExKSIsIlx1MDE0Y2NoXHUwMTRk''@;'; put 'put ''ICgxMzExXHUyMDEzMTMxMikiLCJTaFx1MDE0ZHdhICgxMzEyXHUyMDEzMTMxNykiLCJCdW5wXHUwMTRkICgxMzE3XHUyMDEzMTMxOSkiLCJHZW5cdTAxNGQgKDEzMTlcdTIwMTMxMzIxKSIsIkdlbmtcdTAxNGQgKDEzMjFcdTIwMTMxMzI0KSIsIlNoXHUwMTRkY2hcdTAxNmIgKDEzMjRcdTIw''@;'; put 'put ''MTMxMzI2KSIsIkthcnlha3UgKDEzMjZcdTIwMTMxMzI5KSIsIkdlbnRva3UgKDEzMjlcdTIwMTMxMzMxKSIsIkdlbmtcdTAxNGQgKDEzMzFcdTIwMTMxMzM0KSIsIktlbm11ICgxMzM0XHUyMDEzMTMzNikiLCJFbmdlbiAoMTMzNlx1MjAxMzEzNDApIiwiS1x1MDE0ZGtva3UgKDEzNDBcdTIw''@;'; put 'put ''MTMxMzQ2KSIsIlNoXHUwMTRkaGVpICgxMzQ2XHUyMDEzMTM3MCkiLCJLZW50b2t1ICgxMzcwXHUyMDEzMTM3MikiLCJCdW5jaFx1MDE2YiAoMTM3Mlx1MjAxMzEzNzUpIiwiVGVuanUgKDEzNzVcdTIwMTMxMzc5KSIsIktcdTAxNGRyeWFrdSAoMTM3OVx1MjAxMzEzODEpIiwiS1x1MDE0ZHdh''@;'; put 'put ''ICgxMzgxXHUyMDEzMTM4NCkiLCJHZW5jaFx1MDE2YiAoMTM4NFx1MjAxMzEzOTIpIiwiTWVpdG9rdSAoMTM4NFx1MjAxMzEzODcpIiwiS2FrZWkgKDEzODdcdTIwMTMxMzg5KSIsIktcdTAxNGRcdTAxNGQgKDEzODlcdTIwMTMxMzkwKSIsIk1laXRva3UgKDEzOTBcdTIwMTMxMzk0KSIsIlx1''@;'; put 'put ''MDE0Y2VpICgxMzk0XHUyMDEzMTQyOCkiLCJTaFx1MDE0ZGNoXHUwMTRkICgxNDI4XHUyMDEzMTQyOSkiLCJFaWt5XHUwMTRkICgxNDI5XHUyMDEzMTQ0MSkiLCJLYWtpdHN1ICgxNDQxXHUyMDEzMTQ0NCkiLCJCdW5cdTIwMTlhbiAoMTQ0NFx1MjAxMzE0NDkpIiwiSFx1MDE0ZHRva3UgKDE0''@;'; put 'put ''NDlcdTIwMTMxNDUyKSIsIkt5XHUwMTRkdG9rdSAoMTQ1Mlx1MjAxMzE0NTUpIiwiS1x1MDE0ZHNoXHUwMTRkICgxNDU1XHUyMDEzMTQ1NykiLCJDaFx1MDE0ZHJva3UgKDE0NTdcdTIwMTMxNDYwKSIsIkthbnNoXHUwMTRkICgxNDYwXHUyMDEzMTQ2NikiLCJCdW5zaFx1MDE0ZCAoMTQ2Nlx1''@;'; put 'put ''MjAxMzE0NjcpIiwiXHUwMTRjbmluICgxNDY3XHUyMDEzMTQ2OSkiLCJCdW5tZWkgKDE0NjlcdTIwMTMxNDg3KSIsIkNoXHUwMTRka3lcdTAxNGQgKDE0ODdcdTIwMTMxNDg5KSIsIkVudG9rdSAoMTQ4OVx1MjAxMzE0OTIpIiwiTWVpXHUwMTRkICgxNDkyXHUyMDEzMTUwMSkiLCJCdW5raSAo''@;'; put 'put ''MTUwMVx1MjAxMzE1MDQpIiwiRWlzaFx1MDE0ZCAoMTUwNFx1MjAxMzE1MjEpIiwiVGFpZWkgKDE1MjFcdTIwMTMxNTI4KSIsIkt5XHUwMTRkcm9rdSAoMTUyOFx1MjAxMzE1MzIpIiwiVGVuYnVuICgxNTMyXHUyMDEzMTU1NSkiLCJLXHUwMTRkamkgKDE1NTVcdTIwMTMxNTU4KSIsIkVpcm9r''@;'; put 'put ''dSAoMTU1OFx1MjAxMzE1NzApIiwiR2Vua2kgKDE1NzBcdTIwMTMxNTczKSIsIlRlbnNoXHUwMTRkICgxNTczXHUyMDEzMTU5MikiLCJCdW5yb2t1ICgxNTkyXHUyMDEzMTU5NikiLCJLZWljaFx1MDE0ZCAoMTU5Nlx1MjAxMzE2MTUpIiwiR2VubmEgKDE2MTVcdTIwMTMxNjI0KSIsIkthblx1''@;'; put 'put ''MjAxOWVpICgxNjI0XHUyMDEzMTY0NCkiLCJTaFx1MDE0ZGhvICgxNjQ0XHUyMDEzMTY0OCkiLCJLZWlhbiAoMTY0OFx1MjAxMzE2NTIpIiwiSlx1MDE0ZFx1MDE0ZCAoMTY1Mlx1MjAxMzE2NTUpIiwiTWVpcmVraSAoMTY1NVx1MjAxMzE2NTgpIiwiTWFuamkgKDE2NThcdTIwMTMxNjYxKSIs''@;'; put 'put ''IkthbmJ1biAoMTY2MVx1MjAxMzE2NzMpIiwiRW5wXHUwMTRkICgxNjczXHUyMDEzMTY4MSkiLCJUZW5uYSAoMTY4MVx1MjAxMzE2ODQpIiwiSlx1MDE0ZGt5XHUwMTRkICgxNjg0XHUyMDEzMTY4OCkiLCJHZW5yb2t1ICgxNjg4XHUyMDEzMTcwNCkiLCJIXHUwMTRkZWkgKDE3MDRcdTIwMTMx''@;'; put 'put ''NzExKSIsIlNoXHUwMTRkdG9rdSAoMTcxMVx1MjAxMzE3MTYpIiwiS3lcdTAxNGRoXHUwMTRkICgxNzE2XHUyMDEzMTczNikiLCJHZW5idW4gKDE3MzZcdTIwMTMxNzQxKSIsIkthbnBcdTAxNGQgKDE3NDFcdTIwMTMxNzQ0KSIsIkVua3lcdTAxNGQgKDE3NDRcdTIwMTMxNzQ4KSIsIkthblx1''@;'; put 'put ''MjAxOWVuICgxNzQ4XHUyMDEzMTc1MSkiLCJIXHUwMTRkcmVraSAoMTc1MVx1MjAxMzE3NjQpIiwiTWVpd2EgKDE3NjRcdTIwMTMxNzcyKSIsIkFuXHUyMDE5ZWkgKDE3NzJcdTIwMTMxNzgxKSIsIlRlbm1laSAoMTc4MVx1MjAxMzE3ODkpIiwiS2Fuc2VpICgxNzg5XHUyMDEzMTgwMSkiLCJL''@;'; put 'put ''eVx1MDE0ZHdhICgxODAxXHUyMDEzMTgwNCkiLCJCdW5rYSAoMTgwNFx1MjAxMzE4MTgpIiwiQnVuc2VpICgxODE4XHUyMDEzMTgzMCkiLCJUZW5wXHUwMTRkICgxODMwXHUyMDEzMTg0NCkiLCJLXHUwMTRka2EgKDE4NDRcdTIwMTMxODQ4KSIsIkthZWkgKDE4NDhcdTIwMTMxODU0KSIsIkFu''@;'; put 'put ''c2VpICgxODU0XHUyMDEzMTg2MCkiLCJNYW5cdTIwMTllbiAoMTg2MFx1MjAxMzE4NjEpIiwiQnVua3lcdTAxNmIgKDE4NjFcdTIwMTMxODY0KSIsIkdlbmppICgxODY0XHUyMDEzMTg2NSkiLCJLZWlcdTAxNGQgKDE4NjVcdTIwMTMxODY4KSIsIk1laWppIiwiVGFpc2hcdTAxNGQiLCJTaFx1''@;'; put 'put ''MDE0ZHdhIiwiSGVpc2VpIl0sImxvbmciOlsiVGFpa2EgKDY0NVx1MjAxMzY1MCkiLCJIYWt1Y2hpICg2NTBcdTIwMTM2NzEpIiwiSGFrdWhcdTAxNGQgKDY3Mlx1MjAxMzY4NikiLCJTaHVjaFx1MDE0ZCAoNjg2XHUyMDEzNzAxKSIsIlRhaWhcdTAxNGQgKDcwMVx1MjAxMzcwNCkiLCJLZWl1''@;'; put 'put ''biAoNzA0XHUyMDEzNzA4KSIsIldhZFx1MDE0ZCAoNzA4XHUyMDEzNzE1KSIsIlJlaWtpICg3MTVcdTIwMTM3MTcpIiwiWVx1MDE0ZHJcdTAxNGQgKDcxN1x1MjAxMzcyNCkiLCJKaW5raSAoNzI0XHUyMDEzNzI5KSIsIlRlbnB5XHUwMTRkICg3MjlcdTIwMTM3NDkpIiwiVGVucHlcdTAxNGQt''@;'; put 'put ''a2FtcFx1MDE0ZCAoNzQ5LTc0OSkiLCJUZW5weVx1MDE0ZC1zaFx1MDE0ZGhcdTAxNGQgKDc0OS03NTcpIiwiVGVucHlcdTAxNGQtaFx1MDE0ZGppICg3NTctNzY1KSIsIlRlbnB5XHUwMTRkLWppbmdvICg3NjUtNzY3KSIsIkppbmdvLWtlaXVuICg3NjctNzcwKSIsIkhcdTAxNGRraSAoNzcw''@;'; put 'put ''XHUyMDEzNzgwKSIsIlRlbi1cdTAxNGQgKDc4MS03ODIpIiwiRW5yeWFrdSAoNzgyXHUyMDEzODA2KSIsIkRhaWRcdTAxNGQgKDgwNlx1MjAxMzgxMCkiLCJLXHUwMTRkbmluICg4MTBcdTIwMTM4MjQpIiwiVGVuY2hcdTAxNGQgKDgyNFx1MjAxMzgzNCkiLCJKXHUwMTRkd2EgKDgzNFx1MjAx''@;'; put 'put ''Mzg0OCkiLCJLYWpcdTAxNGQgKDg0OFx1MjAxMzg1MSkiLCJOaW5qdSAoODUxXHUyMDEzODU0KSIsIlNhaWtcdTAxNGQgKDg1NFx1MjAxMzg1NykiLCJUZW4tYW4gKDg1Ny04NTkpIiwiSlx1MDE0ZGdhbiAoODU5XHUyMDEzODc3KSIsIkdhbmd5XHUwMTRkICg4NzdcdTIwMTM4ODUpIiwiTmlu''@;'; put 'put ''bmEgKDg4NVx1MjAxMzg4OSkiLCJLYW5weVx1MDE0ZCAoODg5XHUyMDEzODk4KSIsIlNoXHUwMTRkdGFpICg4OThcdTIwMTM5MDEpIiwiRW5naSAoOTAxXHUyMDEzOTIzKSIsIkVuY2hcdTAxNGQgKDkyM1x1MjAxMzkzMSkiLCJKXHUwMTRkaGVpICg5MzFcdTIwMTM5MzgpIiwiVGVuZ3lcdTAx''@;'; put 'put ''NGQgKDkzOFx1MjAxMzk0NykiLCJUZW5yeWFrdSAoOTQ3XHUyMDEzOTU3KSIsIlRlbnRva3UgKDk1N1x1MjAxMzk2MSkiLCJcdTAxNGN3YSAoOTYxXHUyMDEzOTY0KSIsIktcdTAxNGRoXHUwMTRkICg5NjRcdTIwMTM5NjgpIiwiQW5uYSAoOTY4XHUyMDEzOTcwKSIsIlRlbnJva3UgKDk3MFx1''@;'; put 'put ''MjAxMzk3MykiLCJUZW5cdTIwMTllbiAoOTczXHUyMDEzOTc2KSIsIkpcdTAxNGRnZW4gKDk3Nlx1MjAxMzk3OCkiLCJUZW5nZW4gKDk3OFx1MjAxMzk4MykiLCJFaWthbiAoOTgzXHUyMDEzOTg1KSIsIkthbm5hICg5ODVcdTIwMTM5ODcpIiwiRWllbiAoOTg3XHUyMDEzOTg5KSIsIkVpc28g''@;'; put 'put ''KDk4OVx1MjAxMzk5MCkiLCJTaFx1MDE0ZHJ5YWt1ICg5OTBcdTIwMTM5OTUpIiwiQ2hcdTAxNGR0b2t1ICg5OTVcdTIwMTM5OTkpIiwiQ2hcdTAxNGRoXHUwMTRkICg5OTlcdTIwMTMxMDA0KSIsIkthbmtcdTAxNGQgKDEwMDRcdTIwMTMxMDEyKSIsIkNoXHUwMTRkd2EgKDEwMTJcdTIwMTMx''@;'; put 'put ''MDE3KSIsIkthbm5pbiAoMTAxN1x1MjAxMzEwMjEpIiwiSmlhbiAoMTAyMVx1MjAxMzEwMjQpIiwiTWFuanUgKDEwMjRcdTIwMTMxMDI4KSIsIkNoXHUwMTRkZ2VuICgxMDI4XHUyMDEzMTAzNykiLCJDaFx1MDE0ZHJ5YWt1ICgxMDM3XHUyMDEzMTA0MCkiLCJDaFx1MDE0ZGt5XHUwMTZiICgx''@;'; put 'put ''MDQwXHUyMDEzMTA0NCkiLCJLYW50b2t1ICgxMDQ0XHUyMDEzMTA0NikiLCJFaXNoXHUwMTRkICgxMDQ2XHUyMDEzMTA1MykiLCJUZW5naSAoMTA1M1x1MjAxMzEwNTgpIiwiS1x1MDE0ZGhlaSAoMTA1OFx1MjAxMzEwNjUpIiwiSmlyeWFrdSAoMTA2NVx1MjAxMzEwNjkpIiwiRW5reVx1MDE2''@;'; put 'put ''YiAoMTA2OVx1MjAxMzEwNzQpIiwiU2hcdTAxNGRobyAoMTA3NFx1MjAxMzEwNzcpIiwiU2hcdTAxNGRyeWFrdSAoMTA3N1x1MjAxMzEwODEpIiwiRWloXHUwMTRkICgxMDgxXHUyMDEzMTA4NCkiLCJcdTAxNGN0b2t1ICgxMDg0XHUyMDEzMTA4NykiLCJLYW5qaSAoMTA4N1x1MjAxMzEwOTQp''@;'; put 'put ''IiwiS2FoXHUwMTRkICgxMDk0XHUyMDEzMTA5NikiLCJFaWNoXHUwMTRkICgxMDk2XHUyMDEzMTA5NykiLCJKXHUwMTRkdG9rdSAoMTA5N1x1MjAxMzEwOTkpIiwiS1x1MDE0ZHdhICgxMDk5XHUyMDEzMTEwNCkiLCJDaFx1MDE0ZGppICgxMTA0XHUyMDEzMTEwNikiLCJLYXNoXHUwMTRkICgx''@;'; put 'put ''MTA2XHUyMDEzMTEwOCkiLCJUZW5uaW4gKDExMDhcdTIwMTMxMTEwKSIsIlRlbi1laSAoMTExMC0xMTEzKSIsIkVpa3lcdTAxNmIgKDExMTNcdTIwMTMxMTE4KSIsIkdlblx1MjAxOWVpICgxMTE4XHUyMDEzMTEyMCkiLCJIXHUwMTRkYW4gKDExMjBcdTIwMTMxMTI0KSIsIlRlbmppICgxMTI0''@;'; put 'put ''XHUyMDEzMTEyNikiLCJEYWlqaSAoMTEyNlx1MjAxMzExMzEpIiwiVGVuc2hcdTAxNGQgKDExMzFcdTIwMTMxMTMyKSIsIkNoXHUwMTRkc2hcdTAxNGQgKDExMzJcdTIwMTMxMTM1KSIsIkhcdTAxNGRlbiAoMTEzNVx1MjAxMzExNDEpIiwiRWlqaSAoMTE0MVx1MjAxMzExNDIpIiwiS1x1MDE0''@;'; put 'put ''ZGppICgxMTQyXHUyMDEzMTE0NCkiLCJUZW5cdTIwMTl5XHUwMTRkICgxMTQ0XHUyMDEzMTE0NSkiLCJLeVx1MDE2YmFuICgxMTQ1XHUyMDEzMTE1MSkiLCJOaW5wZWkgKDExNTFcdTIwMTMxMTU0KSIsIkt5XHUwMTZianUgKDExNTRcdTIwMTMxMTU2KSIsIkhcdTAxNGRnZW4gKDExNTZcdTIw''@;'; put 'put ''MTMxMTU5KSIsIkhlaWppICgxMTU5XHUyMDEzMTE2MCkiLCJFaXJ5YWt1ICgxMTYwXHUyMDEzMTE2MSkiLCJcdTAxNGNobyAoMTE2MVx1MjAxMzExNjMpIiwiQ2hcdTAxNGRrYW4gKDExNjNcdTIwMTMxMTY1KSIsIkVpbWFuICgxMTY1XHUyMDEzMTE2NikiLCJOaW5cdTIwMTlhbiAoMTE2Nlx1''@;'; put 'put ''MjAxMzExNjkpIiwiS2FcdTAxNGQgKDExNjlcdTIwMTMxMTcxKSIsIlNoXHUwMTRkYW4gKDExNzFcdTIwMTMxMTc1KSIsIkFuZ2VuICgxMTc1XHUyMDEzMTE3NykiLCJKaXNoXHUwMTRkICgxMTc3XHUyMDEzMTE4MSkiLCJZXHUwMTRkd2EgKDExODFcdTIwMTMxMTgyKSIsIkp1ZWkgKDExODJc''@;'; put 'put ''dTIwMTMxMTg0KSIsIkdlbnJ5YWt1ICgxMTg0XHUyMDEzMTE4NSkiLCJCdW5qaSAoMTE4NVx1MjAxMzExOTApIiwiS2Vua3lcdTAxNmIgKDExOTBcdTIwMTMxMTk5KSIsIlNoXHUwMTRkamkgKDExOTlcdTIwMTMxMjAxKSIsIktlbm5pbiAoMTIwMVx1MjAxMzEyMDQpIiwiR2Vua3lcdTAxNmIg''@;'; put 'put ''KDEyMDRcdTIwMTMxMjA2KSIsIktlblx1MjAxOWVpICgxMjA2XHUyMDEzMTIwNykiLCJKXHUwMTRkZ2VuICgxMjA3XHUyMDEzMTIxMSkiLCJLZW5yeWFrdSAoMTIxMVx1MjAxMzEyMTMpIiwiS2VucFx1MDE0ZCAoMTIxM1x1MjAxMzEyMTkpIiwiSlx1MDE0ZGt5XHUwMTZiICgxMjE5XHUyMDEz''@;'; put 'put ''MTIyMikiLCJKXHUwMTRkXHUwMTRkICgxMjIyXHUyMDEzMTIyNCkiLCJHZW5uaW4gKDEyMjRcdTIwMTMxMjI1KSIsIkthcm9rdSAoMTIyNVx1MjAxMzEyMjcpIiwiQW50ZWkgKDEyMjdcdTIwMTMxMjI5KSIsIkthbmtpICgxMjI5XHUyMDEzMTIzMikiLCJKXHUwMTRkZWkgKDEyMzJcdTIwMTMx''@;'; put 'put ''MjMzKSIsIlRlbnB1a3UgKDEyMzNcdTIwMTMxMjM0KSIsIkJ1bnJ5YWt1ICgxMjM0XHUyMDEzMTIzNSkiLCJLYXRlaSAoMTIzNVx1MjAxMzEyMzgpIiwiUnlha3VuaW4gKDEyMzhcdTIwMTMxMjM5KSIsIkVuXHUyMDE5XHUwMTRkICgxMjM5XHUyMDEzMTI0MCkiLCJOaW5qaSAoMTI0MFx1MjAx''@;'; put 'put ''MzEyNDMpIiwiS2FuZ2VuICgxMjQzXHUyMDEzMTI0NykiLCJIXHUwMTRkamkgKDEyNDdcdTIwMTMxMjQ5KSIsIktlbmNoXHUwMTRkICgxMjQ5XHUyMDEzMTI1NikiLCJLXHUwMTRkZ2VuICgxMjU2XHUyMDEzMTI1NykiLCJTaFx1MDE0ZGthICgxMjU3XHUyMDEzMTI1OSkiLCJTaFx1MDE0ZGdl''@;'; put 'put ''biAoMTI1OVx1MjAxMzEyNjApIiwiQnVuXHUyMDE5XHUwMTRkICgxMjYwXHUyMDEzMTI2MSkiLCJLXHUwMTRkY2hcdTAxNGQgKDEyNjFcdTIwMTMxMjY0KSIsIkJ1blx1MjAxOWVpICgxMjY0XHUyMDEzMTI3NSkiLCJLZW5qaSAoMTI3NVx1MjAxMzEyNzgpIiwiS1x1MDE0ZGFuICgxMjc4XHUy''@;'; put 'put ''MDEzMTI4OCkiLCJTaFx1MDE0ZFx1MDE0ZCAoMTI4OFx1MjAxMzEyOTMpIiwiRWluaW4gKDEyOTNcdTIwMTMxMjk5KSIsIlNoXHUwMTRkYW4gKDEyOTlcdTIwMTMxMzAyKSIsIktlbmdlbiAoMTMwMlx1MjAxMzEzMDMpIiwiS2FnZW4gKDEzMDNcdTIwMTMxMzA2KSIsIlRva3VqaSAoMTMwNlx1''@;'; put 'put ''MjAxMzEzMDgpIiwiRW5reVx1MDE0ZCAoMTMwOFx1MjAxMzEzMTEpIiwiXHUwMTRjY2hcdTAxNGQgKDEzMTFcdTIwMTMxMzEyKSIsIlNoXHUwMTRkd2EgKDEzMTJcdTIwMTMxMzE3KSIsIkJ1bnBcdTAxNGQgKDEzMTdcdTIwMTMxMzE5KSIsIkdlblx1MDE0ZCAoMTMxOVx1MjAxMzEzMjEpIiwi''@;'; put 'put ''R2Vua1x1MDE0ZCAoMTMyMVx1MjAxMzEzMjQpIiwiU2hcdTAxNGRjaFx1MDE2YiAoMTMyNFx1MjAxMzEzMjYpIiwiS2FyeWFrdSAoMTMyNlx1MjAxMzEzMjkpIiwiR2VudG9rdSAoMTMyOVx1MjAxMzEzMzEpIiwiR2Vua1x1MDE0ZCAoMTMzMVx1MjAxMzEzMzQpIiwiS2VubXUgKDEzMzRcdTIw''@;'; put 'put ''MTMxMzM2KSIsIkVuZ2VuICgxMzM2XHUyMDEzMTM0MCkiLCJLXHUwMTRka29rdSAoMTM0MFx1MjAxMzEzNDYpIiwiU2hcdTAxNGRoZWkgKDEzNDZcdTIwMTMxMzcwKSIsIktlbnRva3UgKDEzNzBcdTIwMTMxMzcyKSIsIkJ1bmNoXHUwMTZiICgxMzcyXHUyMDEzMTM3NSkiLCJUZW5qdSAoMTM3''@;'; put 'put ''NVx1MjAxMzEzNzkpIiwiS1x1MDE0ZHJ5YWt1ICgxMzc5XHUyMDEzMTM4MSkiLCJLXHUwMTRkd2EgKDEzODFcdTIwMTMxMzg0KSIsIkdlbmNoXHUwMTZiICgxMzg0XHUyMDEzMTM5MikiLCJNZWl0b2t1ICgxMzg0XHUyMDEzMTM4NykiLCJLYWtlaSAoMTM4N1x1MjAxMzEzODkpIiwiS1x1MDE0''@;'; put 'put ''ZFx1MDE0ZCAoMTM4OVx1MjAxMzEzOTApIiwiTWVpdG9rdSAoMTM5MFx1MjAxMzEzOTQpIiwiXHUwMTRjZWkgKDEzOTRcdTIwMTMxNDI4KSIsIlNoXHUwMTRkY2hcdTAxNGQgKDE0MjhcdTIwMTMxNDI5KSIsIkVpa3lcdTAxNGQgKDE0MjlcdTIwMTMxNDQxKSIsIktha2l0c3UgKDE0NDFcdTIw''@;'; put 'put ''MTMxNDQ0KSIsIkJ1blx1MjAxOWFuICgxNDQ0XHUyMDEzMTQ0OSkiLCJIXHUwMTRkdG9rdSAoMTQ0OVx1MjAxMzE0NTIpIiwiS3lcdTAxNGR0b2t1ICgxNDUyXHUyMDEzMTQ1NSkiLCJLXHUwMTRkc2hcdTAxNGQgKDE0NTVcdTIwMTMxNDU3KSIsIkNoXHUwMTRkcm9rdSAoMTQ1N1x1MjAxMzE0''@;'; put 'put ''NjApIiwiS2Fuc2hcdTAxNGQgKDE0NjBcdTIwMTMxNDY2KSIsIkJ1bnNoXHUwMTRkICgxNDY2XHUyMDEzMTQ2NykiLCJcdTAxNGNuaW4gKDE0NjdcdTIwMTMxNDY5KSIsIkJ1bm1laSAoMTQ2OVx1MjAxMzE0ODcpIiwiQ2hcdTAxNGRreVx1MDE0ZCAoMTQ4N1x1MjAxMzE0ODkpIiwiRW50b2t1''@;'; put 'put ''ICgxNDg5XHUyMDEzMTQ5MikiLCJNZWlcdTAxNGQgKDE0OTJcdTIwMTMxNTAxKSIsIkJ1bmtpICgxNTAxXHUyMDEzMTUwNCkiLCJFaXNoXHUwMTRkICgxNTA0XHUyMDEzMTUyMSkiLCJUYWllaSAoMTUyMVx1MjAxMzE1MjgpIiwiS3lcdTAxNGRyb2t1ICgxNTI4XHUyMDEzMTUzMikiLCJUZW5i''@;'; put 'put ''dW4gKDE1MzJcdTIwMTMxNTU1KSIsIktcdTAxNGRqaSAoMTU1NVx1MjAxMzE1NTgpIiwiRWlyb2t1ICgxNTU4XHUyMDEzMTU3MCkiLCJHZW5raSAoMTU3MFx1MjAxMzE1NzMpIiwiVGVuc2hcdTAxNGQgKDE1NzNcdTIwMTMxNTkyKSIsIkJ1bnJva3UgKDE1OTJcdTIwMTMxNTk2KSIsIktlaWNo''@;'; put 'put ''XHUwMTRkICgxNTk2XHUyMDEzMTYxNSkiLCJHZW5uYSAoMTYxNVx1MjAxMzE2MjQpIiwiS2FuXHUyMDE5ZWkgKDE2MjRcdTIwMTMxNjQ0KSIsIlNoXHUwMTRkaG8gKDE2NDRcdTIwMTMxNjQ4KSIsIktlaWFuICgxNjQ4XHUyMDEzMTY1MikiLCJKXHUwMTRkXHUwMTRkICgxNjUyXHUyMDEzMTY1''@;'; put 'put ''NSkiLCJNZWlyZWtpICgxNjU1XHUyMDEzMTY1OCkiLCJNYW5qaSAoMTY1OFx1MjAxMzE2NjEpIiwiS2FuYnVuICgxNjYxXHUyMDEzMTY3MykiLCJFbnBcdTAxNGQgKDE2NzNcdTIwMTMxNjgxKSIsIlRlbm5hICgxNjgxXHUyMDEzMTY4NCkiLCJKXHUwMTRka3lcdTAxNGQgKDE2ODRcdTIwMTMx''@;'; put 'put ''Njg4KSIsIkdlbnJva3UgKDE2ODhcdTIwMTMxNzA0KSIsIkhcdTAxNGRlaSAoMTcwNFx1MjAxMzE3MTEpIiwiU2hcdTAxNGR0b2t1ICgxNzExXHUyMDEzMTcxNikiLCJLeVx1MDE0ZGhcdTAxNGQgKDE3MTZcdTIwMTMxNzM2KSIsIkdlbmJ1biAoMTczNlx1MjAxMzE3NDEpIiwiS2FucFx1MDE0''@;'; put 'put ''ZCAoMTc0MVx1MjAxMzE3NDQpIiwiRW5reVx1MDE0ZCAoMTc0NFx1MjAxMzE3NDgpIiwiS2FuXHUyMDE5ZW4gKDE3NDhcdTIwMTMxNzUxKSIsIkhcdTAxNGRyZWtpICgxNzUxXHUyMDEzMTc2NCkiLCJNZWl3YSAoMTc2NFx1MjAxMzE3NzIpIiwiQW5cdTIwMTllaSAoMTc3Mlx1MjAxMzE3ODEp''@;'; put 'put ''IiwiVGVubWVpICgxNzgxXHUyMDEzMTc4OSkiLCJLYW5zZWkgKDE3ODlcdTIwMTMxODAxKSIsIkt5XHUwMTRkd2EgKDE4MDFcdTIwMTMxODA0KSIsIkJ1bmthICgxODA0XHUyMDEzMTgxOCkiLCJCdW5zZWkgKDE4MThcdTIwMTMxODMwKSIsIlRlbnBcdTAxNGQgKDE4MzBcdTIwMTMxODQ0KSIs''@;'; put 'put ''IktcdTAxNGRrYSAoMTg0NFx1MjAxMzE4NDgpIiwiS2FlaSAoMTg0OFx1MjAxMzE4NTQpIiwiQW5zZWkgKDE4NTRcdTIwMTMxODYwKSIsIk1hblx1MjAxOWVuICgxODYwXHUyMDEzMTg2MSkiLCJCdW5reVx1MDE2YiAoMTg2MVx1MjAxMzE4NjQpIiwiR2VuamkgKDE4NjRcdTIwMTMxODY1KSIs''@;'; put 'put ''IktlaVx1MDE0ZCAoMTg2NVx1MjAxMzE4NjgpIiwiTWVpamkiLCJUYWlzaFx1MDE0ZCIsIlNoXHUwMTRkd2EiLCJIZWlzZWkiXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX0sInBlcnNpYW4iOnsibW9udGhzIjp7Im5hcnJvdyI6WyIxIiwiMiIsIjMiLCI0IiwiNSIsIjYi''@;'; put 'put ''LCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiXSwic2hvcnQiOlsiRmFydmFyZGluIiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNmYW5kIl0sImxvbmciOlsiRmFydmFyZGlu''@;'; put 'put ''IiwiT3JkaWJlaGVzaHQiLCJLaG9yZGFkIiwiVGlyIiwiTW9yZGFkIiwiU2hhaHJpdmFyIiwiTWVociIsIkFiYW4iLCJBemFyIiwiRGV5IiwiQmFobWFuIiwiRXNmYW5kIl19LCJkYXlzIjp7Im5hcnJvdyI6WyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sInNob3J0IjpbIlN1biIsIk1v''@;'; put 'put ''biIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLCJsb25nIjpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il19LCJlcmFzIjp7Im5hcnJvdyI6WyJBUCJdLCJzaG9ydCI6WyJBUCJdLCJsb25nIjpbIkFQ''@;'; put 'put ''Il19LCJkYXlQZXJpb2RzIjp7ImFtIjoiQU0iLCJwbSI6IlBNIn19LCJyb2MiOnsibW9udGhzIjp7Im5hcnJvdyI6WyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSwic2hvcnQiOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVs''@;'; put 'put ''IiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sImxvbmciOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXX0sImRheXMiOnsibmFy''@;'; put 'put ''cm93IjpbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSwic2hvcnQiOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sImxvbmciOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXki''@;'; put 'put ''XX0sImVyYXMiOnsibmFycm93IjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXSwic2hvcnQiOlsiQmVmb3JlIFIuTy5DLiIsIk1pbmd1byJdLCJsb25nIjpbIkJlZm9yZSBSLk8uQy4iLCJNaW5ndW8iXX0sImRheVBlcmlvZHMiOnsiYW0iOiJBTSIsInBtIjoiUE0ifX19fSwibnVtYmVyIjp7''@;'; put 'put ''Im51IjpbImxhdG4iXSwicGF0dGVybnMiOnsiZGVjaW1hbCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfSIsIm5lZ2F0aXZlUGF0dGVybiI6InttaW51c1NpZ259e251bWJlcn0ifSwiY3VycmVuY3kiOnsicG9zaXRpdmVQYXR0ZXJuIjoie2N1cnJlbmN5fXtudW1iZXJ9IiwibmVnYXRp''@;'; put 'put ''dmVQYXR0ZXJuIjoie21pbnVzU2lnbn17Y3VycmVuY3l9e251bWJlcn0ifSwicGVyY2VudCI6eyJwb3NpdGl2ZVBhdHRlcm4iOiJ7bnVtYmVyfXtwZXJjZW50U2lnbn0iLCJuZWdhdGl2ZVBhdHRlcm4iOiJ7bWludXNTaWdufXtudW1iZXJ9e3BlcmNlbnRTaWdufSJ9fSwic3ltYm9scyI6eyJs''@;'; put 'put ''YXRuIjp7ImRlY2ltYWwiOiIuIiwiZ3JvdXAiOiIsIiwibmFuIjoiTmFOIiwicGx1c1NpZ24iOiIrIiwibWludXNTaWduIjoiLSIsInBlcmNlbnRTaWduIjoiJSIsImluZmluaXR5IjoiXHUyMjFlIn19LCJjdXJyZW5jaWVzIjp7IkFVRCI6IkEkIiwiQlJMIjoiUiQiLCJDQUQiOiJDQSQiLCJD''@;'; put 'put ''TlkiOiJDTlx4YTUiLCJFVVIiOiJcdTIwYWMiLCJHQlAiOiJceGEzIiwiSEtEIjoiSEskIiwiSUxTIjoiXHUyMGFhIiwiSU5SIjoiXHUyMGI5IiwiSlBZIjoiXHhhNSIsIktSVyI6Ilx1MjBhOSIsIk1YTiI6Ik1YJCIsIk5aRCI6Ik5aJCIsIlRXRCI6Ik5UJCIsIlVTRCI6IiQiLCJWTkQiOiJc''@;'; put 'put ''dTIwYWIiLCJYQUYiOiJGQ0ZBIiwiWENEIjoiRUMkIiwiWE9GIjoiQ0ZBIiwiWFBGIjoiQ0ZQRiJ9fX0nKX19LGM9Pnt2YXIgbD1uPT5jKGMucz1uKTtsKDU1MzIxKSxsKDQ4MzMyKX1dKTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=runtime.c316ac51d5966713-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlLHM9e30sdj17fTtmdW5jdGlvbiBhKGUpe3ZhciBuPXZbZV07aWYodm9pZCAwIT09bilyZXR1cm4gbi5leHBvcnRzO3ZhciByPXZbZV09e2lkOmUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBzW2VdLmNhbGwoci5leHBvcnRzLHIsci5leHBv''@;'; put 'put ''cnRzLGEpLHIubG9hZGVkPSEwLHIuZXhwb3J0c31hLm09cyxlPVtdLGEuTz0obixyLG8sbCk9PntpZighcil7dmFyIHU9MS8wO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kyspe2Zvcih2YXJbcixvLGxdPWVbdF0sZD0hMCxmPTA7ZjxyLmxlbmd0aDtmKyspKCExJmx8fHU+PWwpJiZPYmplY3Qua2V5''@;'; put 'put ''cyhhLk8pLmV2ZXJ5KHA9PmEuT1twXShyW2ZdKSk/ci5zcGxpY2UoZi0tLDEpOihkPSExLGw8dSYmKHU9bCkpO2lmKGQpe2Uuc3BsaWNlKHQtLSwxKTt2YXIgYz1vKCk7dm9pZCAwIT09YyYmKG49Yyl9fXJldHVybiBufWw9bHx8MDtmb3IodmFyIHQ9ZS5sZW5ndGg7dD4wJiZlW3QtMV1bMl0+''@;'; put 'put ''bDt0LS0pZVt0XT1lW3QtMV07ZVt0XT1bcixvLGxdfSxhLm49ZT0+e3ZhciBuPWUmJmUuX19lc01vZHVsZT8oKT0+ZS5kZWZhdWx0OigpPT5lO3JldHVybiBhLmQobix7YTpufSksbn0sYS5kPShlLG4pPT57Zm9yKHZhciByIGluIG4pYS5vKG4scikmJiFhLm8oZSxyKSYmT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGUscix7ZW51bWVyYWJsZTohMCxnZXQ6bltyXX0pfSxhLm89KGUsbik9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pLGEucj1lPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUs''@;'; put 'put ''U3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sYS5ubWQ9ZT0+KGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLGUpLCgoKT0+e3ZhciBlPXs2NjY6MH07YS5PLmo9''@;'; put 'put ''bz0+MD09PWVbb107dmFyIG49KG8sbCk9Pnt2YXIgZixjLFt0LHUsZF09bCxpPTA7aWYodC5zb21lKF89PjAhPT1lW19dKSl7Zm9yKGYgaW4gdSlhLm8odSxmKSYmKGEubVtmXT11W2ZdKTtpZihkKXZhciBiPWQoYSl9Zm9yKG8mJm8obCk7aTx0Lmxlbmd0aDtpKyspYS5vKGUsYz10W2ldKSYm''@;'; put 'put ''ZVtjXSYmZVtjXVswXSgpLGVbY109MDtyZXR1cm4gYS5PKGIpfSxyPXNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W107ci5mb3JFYWNoKG4uYmluZChudWxsLDApKSxyLnB1c2g9bi5iaW5kKG51bGwsci5wdXNoLmJpbmQo''@;'; put 'put ''cikpfSkoKX0pKCk7'';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=scripts.89a8947a0266c47a-js; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''KGZ1bmN0aW9uKGIsail7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz1qKCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSxqKTtlbHNle3ZhciB6LE09aigpO2Zv''@;'; put 'put ''cih6IGluIE0pKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmIpW3pdPU1bel19fSkodGhpcyxmdW5jdGlvbigpe3JldHVybiBqPXsiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsdil7''@;'; put 'put ''InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29uc0FwaT12b2lkIDA7dmFyIHA9digKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3No''@;'; put 'put ''YXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIiksYT17fTtmdW5jdGlvbiBrKCl7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShrLCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBrLnNpbmdsZUluc3RhbmNlPWsuc2luZ2xlSW5zdGFuY2U/ay5zaW5nbGVJbnN0YW5jZTpuZXcga30sZW51''@;'; put 'put ''bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxrLnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUyl7aWYoMD09PVMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtpZigvXHMvLnRlc3QoUykp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0say5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFMpe3JldHVybiBTLnRvTG93ZXJDYXNlKCl9LGsucHJv''@;'; put 'put ''dG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihTLEQpe0Q9RC50cmltKCksdGhpcy52YWxpZGF0ZU5hbWUoUykmJihTPXRoaXMubm9ybWFsaXplU2hhcGVOYW1lKFMpLGFbU10mJmRlbGV0ZSBhW1NdLGFbU109RCxwLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5lbWl0Q2hh''@;'; put 'put ''bmdlcyhTLEQpKX0say5wcm90b3R5cGUuc2V0SWNvbkFsaWFzZXM9ZnVuY3Rpb24oUyxELHgpe2Zvcih2YXIgRz0wLFA9eDtHPFAubGVuZ3RoO0crKyl7dmFyIE89UFtHXTt0aGlzLnZhbGlkYXRlTmFtZShPKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsTyx7Z2V0OmZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIFNbRF19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oUyl7aWYoIm9iamVjdCIhPXR5cGVvZiBTKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBm''@;'; put 'put ''b2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogInNoYXBlLXRlbXBsYXRlIiB9Jyk7Zm9yKHZhciBEIGluIFMpUy5oYXNPd25Qcm9wZXJ0eShEKSYmdGhpcy5zZXRJY29uVGVtcGxhdGUoRCxTW0RdKX0say5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKFMp''@;'; put 'put ''e3JldHVybiEhYVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShTKV19LGsucHJvdG90eXBlLmdldD1mdW5jdGlvbihTKXtpZighUylyZXR1cm4gYTtpZigic3RyaW5nIiE9dHlwZW9mIFMpdGhyb3cgbmV3IFR5cGVFcnJvcigiT25seSBzdHJpbmcgYXJndW1lbnQgaXMgYWxsb3dlZCBpbiB0aGlz''@;'; put 'put ''IG1ldGhvZC4iKTtyZXR1cm4gYVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShTKV19LGsucHJvdG90eXBlLmFsaWFzPWZ1bmN0aW9uKFMpe2lmKCJvYmplY3QiIT10eXBlb2YgUyl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRlcmFsIHBhc3NlZCBp''@;'; put 'put ''biB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6IFsiYWxpYXMtbmFtZSIsIC4uLl0gfScpO2Zvcih2YXIgRCBpbiBTKWlmKFMuaGFzT3duUHJvcGVydHkoRCkpe2lmKCFhLmhhc093blByb3BlcnR5KEQpKXRocm93IG5ldyBFcnJvcignQW4g''@;'; put 'put ''aWNvbiAiJytEKyJcIiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYWxpYXNlcyB0byBkb2Vzbid0IGV4aXN0IGluIHRoZSBDbGFyaXR5IEljb25zIHNldHMhIik7dGhpcy5zZXRJY29uQWxpYXNlcyhhLEQsU1tEXSl9fSxsLkNsYXJpdHlJY29uc0FwaT12PWt9LCIuL3Byb2plY3RzL2ljb25zL3Ny''@;'; put 'put ''Yy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29uRWxlbWVudD12b2lk''@;'; put 'put ''IDA7dmFyIHA9SCgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLGE9SCgKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9i''@;'; put 'put ''c2VydmVyLnRzIiksdj0wLGs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2suY2xhc3NOYW1lPSJpcy1vZmYtc2NyZWVuIjt2YXIgUz1mdW5jdGlvbigpe3JldHVybiBIVE1MRWxlbWVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Z1bmN0aW9uIEQoKXt2YXIgeD1TLmFwcGx5KHRo''@;'; put 'put ''aXMsYXJndW1lbnRzKTtyZXR1cm4geC5jbHJJY29uVW5pcUlkPSJfY2xyX2ljb25fIit2LHYrKyx4fSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmKFM9ZnVuY3Rpb24oKXtyZXR1cm4gUmVmbGVjdC5jb25zdHJ1Y3QoSFRNTEVsZW1lbnQsYXJndW1lbnRzLHRoaXMuY29uc3RydWN0b3IpfSks''@;'; put 'put ''KGwuQ2xhcml0eUljb25FbGVtZW50PUQpLm9ic2VydmVkQXR0cmlidXRlcz1bInNoYXBlIiwic2l6ZSIsInRpdGxlIl0sKChELnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1''@;'; put 'put ''ZTpEfX0pKS5jb25zdHJ1Y3Rvcj1EKS5wcm90b3R5cGUuX2FwcGVuZEN1c3RvbVRpdGxlPWZ1bmN0aW9uKCl7dmFyIHg9ay5jbG9uZU5vZGUoITEpO3guaWQ9dGhpcy5jbHJJY29uVW5pcUlkLHgudGV4dENvbnRlbnQ9dGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsLHRoaXMuYXBwZW5kQ2hpbGQo''@;'; put 'put ''eCl9LEQucHJvdG90eXBlLl9zZXRJY29uU2l6ZT1mdW5jdGlvbih4KXshTnVtYmVyKHgpfHxOdW1iZXIoeCk8MD8odGhpcy5zdHlsZS53aWR0aD1udWxsLHRoaXMuc3R5bGUuaGVpZ2h0PW51bGwpOih0aGlzLnN0eWxlLndpZHRoPXgrInB4Iix0aGlzLnN0eWxlLmhlaWdodD14KyJweCIpfSxE''@;'; put 'put ''LnByb3RvdHlwZS5fbm9ybWFsaXplU2hhcGU9ZnVuY3Rpb24oeCl7cmV0dXJuIHguc3BsaXQoL1xzLylbMF0udG9Mb3dlckNhc2UoKX0sRC5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXt2YXIgeCxHPXRoaXM7aWYodGhpcy5nZXRBdHRyaWJ1dGUoInJvbGUiKXx8dGhp''@;'; put 'put ''cy5zZXRBdHRyaWJ1dGUoInJvbGUiLCJub25lIiksdGhpcy5oYXNBdHRyaWJ1dGUoInNpemUiKSYmKHg9dGhpcy5nZXRBdHRyaWJ1dGUoInNpemUiKSx0aGlzLmN1cnJlbnRTaXplQXR0clZhbCE9PXgmJih0aGlzLmN1cnJlbnRTaXplQXR0clZhbD14LHRoaXMuX3NldEljb25TaXplKHgpKSks''@;'; put 'put ''dGhpcy5oYXNBdHRyaWJ1dGUoInNoYXBlIikpe3ZhciBQPXRoaXMuX25vcm1hbGl6ZVNoYXBlKHRoaXMuZ2V0QXR0cmlidXRlKCJzaGFwZSIpKTtpZih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uPWEuU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLnN1YnNjcmliZVRvKFAs''@;'; put 'put ''ZnVuY3Rpb24oTyl7Ry5faW5qZWN0VGVtcGxhdGUoTyl9KSx0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWw9UCwhcC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuaGFzKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCkpcmV0dXJuIHZvaWQgdGhpcy5faW5qZWN0RXJyb3JUZW1wbGF0ZSgpO2lmKChQ''@;'; put 'put ''PXAuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKT09PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUpcmV0dXJuO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9UH10aGlzLmhhc0F0dHJpYnV0ZSgidGl0bGUiKSYmKFA9dGhpcy5nZXRBdHRy''@;'; put 'put ''aWJ1dGUoInRpdGxlIiksdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsIT09UCYmKHRoaXMuY3VycmVudFRpdGxlQXR0clZhbD1QKSwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXx8dGhpcy5faW5qZWN0VGVtcGxhdGUoKX0sRC5wcm90b3R5cGUuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWZ1''@;'; put 'put ''bmN0aW9uKHgsRyxQKXt2YXIgTz10aGlzO2lmKCJzaXplIj09PXgmJnRoaXMuX3NldEljb25TaXplKFApLCJzaGFwZSI9PT14KXtpZih0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWw9dGhpcy5fbm9ybWFsaXplU2hhcGUoUCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmKHRoaXMu''@;'; put 'put ''X3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24oKSx0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uPWEuU2hhcGVUZW1wbGF0ZU9ic2VydmVyLmluc3RhbmNlLnN1YnNjcmliZVRvKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCxmdW5jdGlvbihUKXtPLl9pbmplY3RUZW1wbGF0ZShUKX0p''@;'; put 'put ''KSwhcC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuaGFzKHRoaXMuY3VycmVudFNoYXBlQXR0clZhbCkpcmV0dXJuIHZvaWQgdGhpcy5faW5qZWN0RXJyb3JUZW1wbGF0ZSgpO3RoaXMuY3VycmVudFNoYXBlVGVtcGxhdGU9cC5DbGFyaXR5SWNvbnNBcGkuaW5zdGFuY2UuZ2V0KHRoaXMuY3Vy''@;'; put 'put ''cmVudFNoYXBlQXR0clZhbCl9InRpdGxlIj09PXgmJih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWw9UCwhdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKXx8dGhpcy5faW5qZWN0VGVtcGxhdGUoKX0sRC5wcm90b3R5cGUuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXt0aGlzLl9zaGFw''@;'; put 'put ''ZVRlbXBsYXRlU3Vic2NyaXB0aW9uJiZ0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCl9LEQucHJvdG90eXBlLl9zZXRBcmlhTGFiZWxsZWRCeT1mdW5jdGlvbigpe3ZhciB4PXRoaXMuZ2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsbGVkYnkiKSxHPShHPXRoaXMucXVlcnlTZWxlY3Rv''@;'; put 'put ''cigic3ZnIikpfHx0aGlzO3g/eCYmeC5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmRy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIseCsiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpHLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQp''@;'; put 'put ''fSxELnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oeCl7eCYmeCE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXgpLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVB''@;'; put 'put ''dHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRC5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXAuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgi''@;'; put 'put ''ZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1zZngudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNv''@;'; put 'put ''bnMtc2Z4LnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLEgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSksbC5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciBwPUgoCi8qISAuL2luZGV4ICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJDbGFyaXR5SWNvbnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBwLkNsYXJpdHlJY29uc319KSxIPUgoCi8qISAuL3NoYXBlcy9hbGwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyIpLHAuQ2xhcml0eUljb25zLmFkZChILkFsbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyI6Ci8q''@;'; put 'put ''ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9m''@;'; put 'put ''dW5jdGlvbihNLGwsYSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsYXJpdHlJY29ucz12b2lkIDA7dmFyIHY9YSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFw''@;'; put 'put ''aS50cyIpLHA9YSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIik7YT1hKAovKiEgLi9zaGFwZXMvY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLChs''@;'; put 'put ''LkNsYXJpdHlJY29ucz12PXYuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlKS5hZGQoYS5Db3JlU2hhcGVzKSx0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIil8fCh3aW5kb3cuQ2xhcml0eUljb25zPXYpLGN1c3RvbUVsZW1lbnRzLmdldCgi''@;'; put 'put ''Y2xyLWljb24iKXx8Y3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjbHItaWNvbiIscC5DbGFyaXR5SWNvbkVsZW1lbnQpKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxH''@;'; put 'put ''KXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQWxsU2hhcGVzPXZvaWQgMDt2YXIgcD1HKAovKiEgLi9jaGFydC1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiKSxhPUco''@;'; put 'put ''Ci8qISAuL2NvbW1lcmNlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyIpLHY9RygKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLGs9RygKLyohIC4vZXNzZW50''@;'; put 'put ''aWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Vzc2VudGlhbC1zaGFwZXMudHMiKSxTPUcoCi8qISAuL21lZGlhLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyIpLEQ9RygKLyohIC4vc29jaWFsLXNoYXBlcyAq''@;'; put 'put ''LwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSx4PUcoCi8qISAuL3RlY2hub2xvZ3ktc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiKSxQPUcoCi8qISAuL3RleHQtZWRpdC1zaGFwZXMgKi8K''@;'; put 'put ''Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIiksTz0oRz1HKAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLFA9W3YuQ29yZVNoYXBlcyxhLkNvbW1lcmNlU2hhcGVzLGsu''@;'; put 'put ''RXNzZW50aWFsU2hhcGVzLFMuTWVkaWFTaGFwZXMsRC5Tb2NpYWxTaGFwZXMseC5UZWNobm9sb2d5U2hhcGVzLEcuVHJhdmVsU2hhcGVzLHAuQ2hhcnRTaGFwZXMsUC5UZXh0RWRpdFNoYXBlc10se30pO2wuQWxsU2hhcGVzPU87Zm9yKHZhciBUPTAsdDE9UDtUPHQxLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBRLFk9dDFbVF07Zm9yKFEgaW4gWSlZLmhhc093blByb3BlcnR5KFEpJiYoT1tRXT1ZW1FdKX10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoTyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9z''@;'; put 'put ''aGFwZXMvY2hhcnQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ2hhcnRTaGFwZXM9bC5DbHJT''@;'; put 'put ''aGFwZUJlbGxDdXJ2ZT1sLkNsclNoYXBlVGlja0NoYXJ0PWwuQ2xyU2hhcGVTY2F0dGVyUGxvdD1sLkNsclNoYXBlUGllQ2hhcnQ9bC5DbHJTaGFwZUxpbmVDaGFydD1sLkNsclNoYXBlSGVhdE1hcD1sLkNsclNoYXBlR3JpZENoYXJ0PWwuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PWwuQ2xyU2hhcGVD''@;'; put 'put ''bG91ZENoYXJ0PWwuQ2xyU2hhcGVCdWJibGVDaGFydD1sLkNsclNoYXBlQm94UGxvdD1sLkNsclNoYXBlQmFyQ2hhcnQ9bC5DbHJTaGFwZUF4aXNDaGFydD12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGls''@;'; put 'put ''cy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVBeGlzQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUg''@;'; put 'put ''MzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAy''@;'; put 'put ''NS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44''@;'; put 'put ''OTYgMzQgNyBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2''@;'; put 'put ''LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQg''@;'; put 'put ''Ni42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEy''@;'; put 'put ''LjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4Ljkx''@;'; put 'put ''IDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5c''@;'; put 'put ''biAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAz''@;'; put 'put ''MC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0''@;'; put 'put ''LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAy''@;'; put 'put ''IDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVk''@;'; put 'put ''IiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEw''@;'; put 'put ''LjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEu''@;'; put 'put ''MDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4w''@;'; put 'put ''ODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAy''@;'; put 'put ''OSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5''@;'; put 'put ''LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAy''@;'; put 'put ''NC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5''@;'; put 'put ''MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLGwuQ2xyU2hhcGVCYXJDaGFydD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAg''@;'; put 'put ''TCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYg''@;'; put 'put ''TCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42''@;'; put 'put ''IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAz''@;'; put 'put ''MSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAy''@;'; put 'put ''MyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEgMTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45Njkg''@;'; put 'put ''OS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2''@;'; put 'put ''IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwg''@;'; put 'put ''NCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAyNiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgx''@;'; put 'put ''OCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0''@;'; put 'put ''Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEw''@;'; put 'put ''NSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcg''@;'; put 'put ''MTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx''@;'; put 'put ''My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg''@;'; put 'put ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxsLkNsclNoYXBlQm94UGxvdD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiww''@;'; put 'put ''LDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUu''@;'; put 'put ''NCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIEwgMTkgMjQgWiBNIDIw''@;'; put 'put ''LjYgMTEuNiBMIDI3LjQgMTEuNiBMIDI3LjQgMTcuMiBMIDIwLjYgMTcuMiBMIDIwLjYgMTEuNiBaIE0gMjcuNCAyMi40IEwgMjAuNiAyMi40IEwgMjAuNiAxOC44IEwgMjcuNCAxOC44IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48''@;'; put 'put ''L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMy''@;'; put 'put ''IDUgQyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBaIE0gMjEg''@;'; put 'put ''MTIgTCAyNyAxMiBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0''@;'; put 'put ''IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4x''@;'; put 'put ''MDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTgu''@;'; put 'put ''OCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0gMTkgMTAgTCAyMy43MjggMTAgQyAyNC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIwLjYgMTEuNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTIuOTg3IEMgMjcuOTA5IDEzLjE3NyAyOC40NDUgMTMuMzEzIDI5IDEzLjM4NyBMIDI5IDI0IEwgMTkg''@;'; put 'put ''MjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAu''@;'; put 'put ''MTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIgNi44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDE5IDEwIEwgMTkgMjQgTCAyOSAyNCBMIDI5IDEzLjQyNyBD''@;'; put 'put ''IDI5LjEwMyAxMy40NCAyOS4yMDYgMTMuNDUxIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAx''@;'; put 'put ''NyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDIxIDEyIEwgMjUuNDcyIDEyIEMgMjUuOTQgMTIuMzUyIDI2LjQ1MiAxMi42NSAyNyAxMi44ODUgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwv''@;'; put 'put ''cGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQgWiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAx''@;'; put 'put ''NS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAyNCBMIDE5IDI0IEwgMTkgMTUuMzQ1IEMgMTkuMDIxIDE1LjM0OCAyMC42IDE1LjM2IDIwLjYgMTUuMzYgTCAyMC42''@;'; put 'put ''IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDE1LjM2IEwgMjkgMTUuMzU3IEwgMjkgMjQgWiBNIDI3LjQgMTguOCBMIDIwLjYgMTguOCBMIDIwLjYgMjIuNCBMIDI3LjQgMjIuNCBMIDI3LjQgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4''@;'; put 'put ''IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAy''@;'; put 'put ''OS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg''@;'; put 'put ''MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDE5IDEwIEwgMTkgMTAuMDQ4IEwgMTcuNjI1IDEyLjM5NSBDIDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAx''@;'; put 'put ''OSAyNCBMIDI5IDI0IEwgMjkgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBaIE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAyNyAxNyBMIDIxIDE3IEwgMjEgMTUuMzU3IEwg''@;'; put 'put ''MjcgMTUuMzU3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAw''@;'; put 'put ''NCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgx''@;'; put 'put ''IDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZUJ1YmJsZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBN''@;'; put 'put ''IDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAy''@;'; put 'put ''OSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDEx''@;'; put 'put ''Ljc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIw''@;'; put 'put ''IDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYg''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy''@;'; put 'put ''Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkg''@;'; put 'put ''MTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUgMjYgMTUgWiBNIDE4IDIw''@;'; put 'put ''IEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5''@;'; put 'put ''NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg''@;'; put 'put ''MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy''@;'; put 'put ''NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxw''@;'; put 'put ''YXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQg''@;'; put 'put ''QyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEyLjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgcng9''@;'; put 'put ''IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcg''@;'; put 'put ''MjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIy''@;'; put 'put ''LjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIw''@;'; put 'put ''OSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43OTEgMTMuMjA5IDEwIDExIDEwIFogTSAyNiAxNSBDIDI0LjM0MyAxNSAyMyAxNi4zNDMgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1NyAyOSAxOCBDIDI5IDE2LjM0MyAyNy42NTcgMTUg''@;'; put 'put ''MjYgMTUgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBD''@;'; put 'put ''IDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5c''@;'; put 'put ''biAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3''@;'; put 'put ''LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAxMSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDEx''@;'; put 'put ''LjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDExLjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5LjY1NyAyMCAy''@;'; put 'put ''MSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAxOCAyMS42IFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy''@;'; put 'put ''Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu''@;'; put 'put ''ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3''@;'; put 'put ''LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNC41NzkgMTUuMzU3IEMgMjMuNjM5IDE1Ljg2MyAyMyAxNi44NTcgMjMgMTggQyAyMyAxOS42NTcgMjQuMzQzIDIxIDI2IDIxIEMgMjcuNjU3IDIxIDI5IDE5LjY1''@;'; put 'put ''NyAyOSAxOCBDIDI5IDE2Ljg1NyAyOC4zNjEgMTUuODYzIDI3LjQyMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4y''@;'; put 'put ''MDkgMTAgMTEgMTAgWiBNIDE4IDIwIEMgMTYuMzQzIDIwIDE1IDIxLjM0MyAxNSAyMyBDIDE1IDI0LjY1NyAxNi4zNDMgMjYgMTggMjYgQyAxOS42NTcgMjYgMjEgMjQuNjU3IDIxIDIzIEMgMjEgMjEuMzQzIDE5LjY1NyAyMCAxOCAyMCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2''@;'; put 'put ''IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1''@;'; put 'put ''NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZUNsb3VkQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1''@;'; put 'put ''Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4z''@;'; put 'put ''ODkgMTcuNTc2IDIwLjU3NyBDIDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBh''@;'; put 'put ''dGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjcgMjAuNiAyMy42IDIxLjIyNyAy''@;'; put 'put ''My42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI3IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNyAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI3Ij48L3Bh''@;'; put 'put ''dGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDMyIDUg''@;'; put 'put ''QyAzMy4xMDUgNSAzNCA1Ljg5NSAzNCA3IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEuODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAx''@;'; put 'put ''MS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUg''@;'; put 'put ''MTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAy''@;'; put 'put ''Mi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4w''@;'; put 'put ''MjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAxMS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44Nzgg''@;'; put 'put ''MTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4''@;'; put 'put ''IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcgMTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAy''@;'; put 'put ''OCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAxOSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMg''@;'; put 'put ''MjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMgMjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgeD0i''@;'; put 'put ''NyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAx''@;'; put 'put ''My4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAy''@;'; put 'put ''MS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcg''@;'; put 'put ''MjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg''@;'; put 'put ''NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEu''@;'; put 'put ''NjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuMDQ5IDEwLjY3OSAxNi40NTMgOS40OTIgMTguOTU2IDEwLjEyNCBMIDE4LjAwOCAxMS43NDEgQyAxNi4xOCAxMS41MTggMTMuNjk1IDEyLjU3OCAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUx''@;'; put 'put ''NSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBDIDE5LjIyOCAxOC45MjUgMjAuMjM3IDE2Ljk5OCAyMC40NTYgMTUuMzU3IEwgMjIuMjIgMTUuMzU3IEMgMjIuMDA2IDE3LjQ3NyAyMC44MzggMTkuODYxIDE4Ljg0OSAyMS44NDkgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOCAyMiBDIDI4IDIzLjY1NyAyNi42NTcgMjUgMjUgMjUgQyAyMy4zNDMgMjUgMjIgMjMuNjU3IDIyIDIyIEMgMjIgMjAuMzQzIDIzLjM0MyAxOSAyNSAx''@;'; put 'put ''OSBDIDI2LjY1NyAxOSAyOCAyMC4zNDMgMjggMjIgWiBNIDI1IDIwLjYgQyAyNC4yMjYgMjAuNiAyMy42IDIxLjIyNiAyMy42IDIyIEMgMjMuNiAyMi43NzMgMjQuMjI2IDIzLjQgMjUgMjMuNCBDIDI1Ljc3MyAyMy40IDI2LjQgMjIuNzczIDI2LjQgMjIgQyAyNi40IDIxLjIyNiAyNS43NzMg''@;'; put 'put ''MjAuNiAyNSAyMC42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSI3Ij48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1p''@;'; put 'put ''LWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUu''@;'; put 'put ''MzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTguOTU2IDEwLjEyNCBDIDE2''@;'; put 'put ''LjQ1MyA5LjQ5MiAxMy4wNDkgMTAuNjc5IDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMC44MzggMTkuODYxIDIyLjAwNiAxNy40NzcgMjIuMjIgMTUuMzU3''@;'; put 'put ''IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMgMjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAw''@;'; put 'put ''NiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44''@;'; put 'put ''NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVDdXJ2ZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMw''@;'; put 'put ''LjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4y''@;'; put 'put ''IDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQg''@;'; put 'put ''MTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEg''@;'; put 'put ''MjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5''@;'; put 'put ''IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1''@;'; put 'put ''LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3''@;'; put 'put ''LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkg''@;'; put 'put ''QyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIg''@;'; put 'put ''Ni4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcuODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAx''@;'; put 'put ''OC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAx''@;'; put 'put ''Ni40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDExLjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1''@;'; put 'put ''IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMg''@;'; put 'put ''MjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBDIDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAx''@;'; put 'put ''OC45NjIgMTcuNzI1IEMgMTguMTg4IDE1LjAxNiAxNy43OTkgMTMuODgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIFoiPjwvcGF0aD5cbiAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAx''@;'; put 'put ''NS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAxMS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42''@;'; put 'put ''MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQuMiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40''@;'; put 'put ''NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUu''@;'; put 'put ''MDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAw''@;'; put 'put ''NCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1''@;'; put 'put ''IEwgMTcuNjI1IDEyLjM5NSBDIDE3LjQ3NiAxMi42MTIgMTcuMzc5IDEyLjg0MyAxNy4zMyAxMy4wNzcgQyAxNy4yNjIgMTIuOTQ4IDE3LjE5MiAxMi44MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDEx''@;'; put 'put ''IEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBMIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUy''@;'; put 'put ''IDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC42NCAxNi41OTggMTguMzg1IDE1Ljc0NCAxOC4xNDcgMTUuMDQ0IEMgMTguNDA3IDE1LjIxNSAxOC43MTcgMTUu''@;'; put 'put ''MzI2IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEg''@;'; put 'put ''MzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxsLkNsclNoYXBlR3JpZENoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJN''@;'; put 'put ''MzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44''@;'; put 'put ''OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDMyIDYgQyAzMy4xMDUgNiAzNCA2Ljg5NSAzNCA4IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5''@;'; put 'put ''LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwgMTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkg''@;'; put 'put ''QyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS1hbGVydGVkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx''@;'; put 'put ''OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg''@;'; put 'put ''OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtYWxlcnRlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0y''@;'; put 'put ''SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC1hbGVydGVkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0y''@;'; put 'put ''SDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAx''@;'; put 'put ''MS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDEx''@;'; put 'put ''LjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDE1''@;'; put 'put ''IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4wMTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4zNSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUu''@;'; put 'put ''MzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcgWiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAz''@;'; put 'put ''MCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAz''@;'; put 'put ''MiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAx''@;'; put 'put ''LjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEu''@;'; put 'put ''MTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgNi43MjkgMjIuNjggNy4zODEgMjIuODQ4''@;'; put 'put ''IDggTCAyMSA4IEwgMjEgMTUgTCAzMiAxNSBMIDMyIDEzLjE3NSBDIDMyLjcxNyAxMi45NzIgMzMuMzg5IDEyLjY2NCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1''@;'; put 'put ''IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2LjA1NiBDIDIyLjU5IDEwLjE0MSAyNS45MDEgMTMuNDUyIDI5Ljk4NiAx''@;'; put 'put ''My40NTIgQyAzMS40NjYgMTMuNDUyIDMyLjg0NCAxMy4wMTggMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUgMzAgTCA0''@;'; put 'put ''IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBD''@;'; put 'put ''IDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksbC5DbHJTaGFwZUhlYXRNYXA9KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkg''@;'; put 'put ''TCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDI4IDEwIEwgMjggMjYgTCA4IDI2IFogTSA5LjYgMjQgTCAxNC4xIDI0IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0''@;'; put 'put ''LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDI2IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3''@;'; put 'put ''LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAy''@;'; put 'put ''IDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAx''@;'; put 'put ''MC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDEyLjI4NyBDIDI2LjYxMSAxMi42NzkgMjcuMjg0IDEyLjk4MyAyOCAxMy4xODIgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4Ljgg''@;'; put 'put ''TCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwg''@;'; put 'put ''MjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAz''@;'; put 'put ''MSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gOCAxMCBMIDE5LjAyOCAxMCBM''@;'; put 'put ''IDE4LjA5MSAxMS42IEwgMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwgMjAuMyAxNy4yIEwgMjAuMyAxNS4zNTcgTCAyMS45IDE1LjM1NyBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxNS4zNTcgTCAyOCAxNS4zNTcgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4x''@;'; put 'put ''IDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAxOC44IEwgMjEuOSAyNCBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAz''@;'; put 'put ''NCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOCAyNiBMIDI4IDI2IEwgMjggMTAgTCA4IDEwIFogTSAxMCAx''@;'; put 'put ''OSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAyNiAxMiBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBN''@;'; put 'put ''IDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMg''@;'; put 'put ''Mi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTMuMjMyIEMgMjguNDIxIDEzLjM0NSAyOC44NTkgMTMuNDIyIDI5''@;'; put 'put ''LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkg''@;'; put 'put ''WiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI1LjU4NCAxMiBDIDI1LjcxOSAxMi4xIDI1Ljg1OCAxMi4xOTYgMjYgMTIuMjg3IFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAgTCA4IDEwIEwgOCAyNiBMIDI4IDI2IEwgMjggMTUuMzU3IEwgMzQgMTUu''@;'; put 'put ''MzU3IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBMIDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTUuMzU3IEwgMjYgMTUuMzU3IFogTSAyMCAxNyBMIDE2IDE3''@;'; put 'put ''IEwgMTYgMTIgTCAxNy44NTYgMTIgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjAgMTUuMzU3IFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAx''@;'; put 'put ''MCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3''@;'; put 'put ''IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAx''@;'; put 'put ''LjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVMaW5lQ2hhcnQ9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUg''@;'; put 'put ''QyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4g''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEzLjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcG9seWdvbj5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEg''@;'; put 'put ''QyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk2IDMzLjEwNSA1IDMyIDUgWiBNIDIyLjU2IDI1Ljk0IEwgMTUuNDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3''@;'; put 'put ''IEwgMjkuNjUgMTMgTCAzMS4zNSAxNC4yOCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42Njgg''@;'; put 'put ''MjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMg''@;'; put 'put ''MzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwb2x5Z29uIHBvaW50cz0iMTUuNjIgMTUuMjIyIDkuNjAyIDIzLjk2OCA1LjU1IDIwLjM4NCA2LjYxIDE5LjE4NiA5LjMwOCAyMS41NzIgMTUuNjM0IDEyLjM4IDIyLjM4NCAyMi4zOTUgMjkuMTM4IDEz''@;'; put 'put ''LjQ3IDMwLjQxNCAxNC40MzYgMjIuMzA4IDI1LjE0NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BvbHlnb24+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzAuMzIgMTMuNDggTCAzMS4zOCAxNC4yOCBMIDIyLjU2IDI1Ljk0IEwgMTUu''@;'; put 'put ''NDYgMTUuMzYgTCA5LjEyIDI0LjY0IEwgNC42MiAyMC42NCBMIDYgMTkuMDUgTCA4LjcgMjEuNDQgTCAxNS40NiAxMS41NiBMIDIyLjY1IDIyLjI3IEwgMjkuMzEgMTMuNDYgQyAyNS4wNSAxMy4xIDIxLjk2OSA5LjIzMyAyMi41NyA1IEwgNCA1IEMgMi44OTYgNSAyIDUuODk2IDIgNyBMIDIg''@;'; put 'put ''MjkgQyAyIDMwLjEwNSAyLjg5NiAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgMTIuMzQgQyAzMi44OTUgMTMuMDM2IDMxLjYyNiAxMy40MjkgMzAuMzIgMTMuNDggWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUg''@;'; put 'put ''MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0gMTUuNjIgMTUuMjIyIEwgOS42MDIgMjMuOTY4IEwgNS41NSAyMC4zODQgTCA2LjYxIDE5LjE4NiBMIDkuMzA4IDIxLjU3MiBMIDE1LjYzNCAxMi4zOCBMIDIyLjM4NCAyMi4zOTUgTCAyNy43MTcgMTUuMzQ4IEwgMjkuNzI0IDE1LjM0OCBMIDIyLjMwOCAyNS4xNDUgWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEu''@;'; put 'put ''MTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44''@;'; put 'put ''MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0''@;'; put 'put ''ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2''@;'; put 'put ''NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjcuNDUyIDE1LjM1NyBMIDIyLjM4IDIyLjA2IEwgMTUuNjMgMTIgTCA5LjI4IDIxLjI4IEwgNi43NSAxOS4wNCBMIDUuNDIgMjAuNTMgTCA5LjY1IDI0LjI4IEwgMTUuNjEgMTUuNTYgTCAyMi4y''@;'; put 'put ''OCAyNS41IEwgMjkuOTU5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3''@;'; put 'put ''OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx''@;'; put 'put ''LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksbC5DbHJTaGFwZVBpZUNoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcg''@;'; put 'put ''TCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40''@;'; put 'put ''IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEwLjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgQyAzMiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAy''@;'; put 'put ''Ljg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcg''@;'; put 'put ''MTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42''@;'; put 'put ''NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0''@;'; put 'put ''IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3''@;'; put 'put ''IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgOSBDIDIzLjQxOCA5IDI3IDEyLjU4MiAyNyAxNyBMIDE5IDE3IFogTSAyNS4xOTggMTUuNCBDIDI0LjYyIDEzLjE1IDIyLjg0OSAxMS4zOCAyMC42IDEw''@;'; put 'put ''LjgwMSBMIDIwLjYgMTUuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk''@;'; put 'put ''Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz''@;'; put 'put ''MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAyNSAxOSBMIDE3IDE5IEwg''@;'; put 'put ''MTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBDIDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiBNIDE5IDE3IEwgMjcgMTcgQyAyNyAxMi41ODIgMjMuNDE4IDkgMTkgOSBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAy''@;'; put 'put ''OSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0''@;'; put 'put ''aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAx''@;'; put 'put ''Mi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI3IDE3IEwgMTkgMTcgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDE5LjA0MyAxNS4zNDkgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNi44MzEgMTUuMzU3IEMgMjYu''@;'; put 'put ''OTQyIDE1Ljg4NyAyNyAxNi40MzcgMjcgMTcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEz''@;'; put 'put ''LjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIu''@;'; put 'put ''Mzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDE3IEwgMjcgMTcgQyAyNyAxNi40MzcgMjYuOTQyIDE1Ljg4NyAyNi44MzEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAyNSAxOSBMIDE3IDE5IEwgMTcgMTEgQyAxMi41ODIgMTEgOSAxNC41ODIgOSAxOSBD''@;'; put 'put ''IDkgMjMuNDE4IDEyLjU4MiAyNyAxNyAyNyBDIDIxLjQxOCAyNyAyNSAyMy40MTggMjUgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIx''@;'; put 'put ''LjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQu''@;'; put 'put ''ODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLGwuQ2xyU2hhcGVTY2F0dGVyUGxvdD0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUg''@;'; put 'put ''NSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQg''@;'; put 'put ''TCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4z''@;'; put 'put ''OTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEw''@;'; put 'put ''LjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1''@;'; put 'put ''Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIu''@;'; put 'put ''MTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDgg''@;'; put 'put ''QyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEg''@;'; put 'put ''MjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAy''@;'; put 'put ''NC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIg''@;'; put 'put ''MjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1''@;'; put 'put ''IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0''@;'; put 'put ''LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEy''@;'; put 'put ''LjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUu''@;'; put 'put ''OCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42''@;'; put 'put ''MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1''@;'; put 'put ''NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYg''@;'; put 'put ''WiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0''@;'; put 'put ''IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMg''@;'; put 'put ''QyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxu''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIu''@;'; put 'put ''NTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAx''@;'; put 'put ''Ni4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45Mjkg''@;'; put 'put ''MTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3''@;'; put 'put ''IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYu''@;'; put 'put ''MzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIw''@;'; put 'put ''LjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1''@;'; put 'put ''IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEz''@;'; put 'put ''IDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2''@;'; put 'put ''Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAz''@;'; put 'put ''IDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUg''@;'; put 'put ''MTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2''@;'; put 'put ''LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAx''@;'; put 'put ''Mi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcg''@;'; put 'put ''QyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTku''@;'; put 'put ''OTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYg''@;'; put 'put ''MjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2''@;'; put 'put ''NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3Ljcx''@;'; put 'put ''NiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1''@;'; put 'put ''Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAx''@;'; put 'put ''OS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwg''@;'; put 'put ''NCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAu''@;'; put 'put ''MjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAx''@;'; put 'put ''MS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4''@;'; put 'put ''IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9''@;'; put 'put ''Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcg''@;'; put 'put ''MTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBD''@;'; put 'put ''IDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIv''@;'; put 'put ''PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQz''@;'; put 'put ''IEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMg''@;'; put 'put ''MjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0''@;'; put 'put ''LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0''@;'; put 'put ''IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx''@;'; put 'put ''MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1''@;'; put 'put ''IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2''@;'; put 'put ''LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAx''@;'; put 'put ''Mi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcg''@;'; put 'put ''QyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTku''@;'; put 'put ''OTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYg''@;'; put 'put ''MjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2''@;'; put 'put ''NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3Ljcx''@;'; put 'put ''NiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1''@;'; put 'put ''Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAx''@;'; put 'put ''OS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAy''@;'; put 'put ''MS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4''@;'; put 'put ''NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHJlY3Qgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiBmaWxsLW9wYWNpdHk9IjAiLz4nKSxsLkNsclNoYXBlVGlja0NoYXJ0PSgwLGEuY2xySWNvblNWRykoJ1xuICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0''@;'; put 'put ''IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBM''@;'; put 'put ''IDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3Ljcy''@;'; put 'put ''MyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2''@;'; put 'put ''IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUg''@;'; put 'put ''MjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44''@;'; put 'put ''OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIwIDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAy''@;'; put 'put ''NSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMx''@;'; put 'put ''IEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBN''@;'; put 'put ''IDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIyIEwgMTgg''@;'; put 'put ''MjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5''@;'; put 'put ''PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1''@;'; put 'put ''Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA2''@;'; put 'put ''IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAy''@;'; put 'put ''NS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYgMjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYu''@;'; put 'put ''ODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1''@;'; put 'put ''NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUu''@;'; put 'put ''MjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMgMjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAy''@;'; put 'put ''NS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEwIDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4''@;'; put 'put ''OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4y''@;'; put 'put ''OTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxsLkNsclNoYXBlQmVsbEN1cnZlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyOUgzQTEsMSwwLDEsMSwzLDI3SDMzQTEsMSwwLDEsMSwzMywyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0zMywyNWgtLjYyYTguMTEsOC4xMSwwLDAsMS04LTYuNjdDMjMuNjIsMTQuNDQsMjEuODksNy45NCwxOCw3Ljk0cy01LjY5LDYuNTEtNi4zOCwxMC4zOWE4LjExLDguMTEsMCwwLDEtOCw2LjY1SDNhMSwxLDAsMSwxLDAtMmguNkE2LjExLDYuMTEsMCwwLDAsOS42LDE4YzEuNDEtNy44''@;'; put 'put ''OCw0LjMtMTIsOC4zNS0xMnM2LjkzLDQuMTYsOC4zMywxMmE2LjExLDYuMTEsMCwwLDAsNiw1SDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNoYXJ0U2hhcGVzPXsiYXhpcy1jaGFydCI6bC5DbHJTaGFwZUF4aXND''@;'; put 'put ''aGFydCwiYmFyLWNoYXJ0IjpsLkNsclNoYXBlQmFyQ2hhcnQsImJ1YmJsZS1jaGFydCI6bC5DbHJTaGFwZUJ1YmJsZUNoYXJ0LCJjbG91ZC1jaGFydCI6bC5DbHJTaGFwZUNsb3VkQ2hhcnQsImN1cnZlLWNoYXJ0IjpsLkNsclNoYXBlQ3VydmVDaGFydCwiZ3JpZC1jaGFydCI6bC5DbHJTaGFw''@;'; put 'put ''ZUdyaWRDaGFydCwibGluZS1jaGFydCI6bC5DbHJTaGFwZUxpbmVDaGFydCwicGllLWNoYXJ0IjpsLkNsclNoYXBlUGllQ2hhcnQsInRpY2stY2hhcnQiOmwuQ2xyU2hhcGVUaWNrQ2hhcnQsInNjYXR0ZXItcGxvdCI6bC5DbHJTaGFwZVNjYXR0ZXJQbG90LCJib3gtcGxvdCI6bC5DbHJTaGFw''@;'; put 'put ''ZUJveFBsb3QsImhlYXQtbWFwIjpsLkNsclNoYXBlSGVhdE1hcCwiYmVsbC1jdXJ2ZSI6bC5DbHJTaGFwZUJlbGxDdXJ2ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ2hhcnRTaGFwZXMsImFuYWx5dGljcyIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNoYXJ0U2hhcGVzWyJsaW5lLWNo''@;'; put 'put ''YXJ0Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5DaGFydFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIjoKLyohKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ29tbWVyY2VTaGFwZXM9bC5DbHJTaGFwZUZhY3Rvcnk9bC5DbHJTaGFw''@;'; put 'put ''ZUVtcGxveWVlPWwuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPWwuQ2xyU2hhcGVSdWJsZT1sLkNsclNoYXBlUGVzbz1sLkNsclNoYXBlQ29pbkJhZz1sLkNsclNoYXBlQml0Y29pbj1sLkNsclNoYXBlWWVuPWwuQ2xyU2hhcGVXb249bC5DbHJTaGFwZVJ1cGVlPWwuQ2xyU2hhcGVQb3VuZD1sLkNs''@;'; put 'put ''clNoYXBlRUNoZWNrPWwuQ2xyU2hhcGVEb2xsYXJCaWxsPWwuQ2xyU2hhcGVCYW5rPWwuQ2xyU2hhcGVDcmVkaXRDYXJkPWwuQ2xyU2hhcGVEb2xsYXI9bC5DbHJTaGFwZUV1cm89bC5DbHJTaGFwZVN0b3JlPWwuQ2xyU2hhcGVXYWxsZXQ9bC5DbHJTaGFwZVNob3BwaW5nQ2FydD1sLkNsclNo''@;'; put 'put ''YXBlUGlnZ3lCYW5rPWwuQ2xyU2hhcGVTaG9wcGluZ0JhZz1sLkNsclNoYXBlQ2FsY3VsYXRvcj12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyoh''@;'; put 'put ''IC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVDYWxjdWxhdG9yPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTgsMzJWNEgyOFYzMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MTIsOEgyNS42N1Y2SDExYTEsMSwwLDAsMC0xLDF2NC42N2gyWiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHBvaW50cz0iMTIgMTYgMTAgMTYgMTAgMTggMTQgMTggMTQgMTQgMTIgMTQgMTIgMTYiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBwb2ludHM9IjI0IDE2IDIyIDE2IDIyIDE4IDI2IDE4IDI2IDE0IDI0IDE0IDI0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgcG9pbnRzPSIxOCAxNiAxNiAxNiAxNiAxOCAyMCAxOCAyMCAxNCAxOCAxNCAxOCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHBvaW50cz0iMTIgMjIgMTAgMjIgMTAgMjQgMTQgMjQgMTQg''@;'; put 'put ''MjAgMTIgMjAgMTIgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiBwb2ludHM9IjI0IDIyIDIyIDIyIDIyIDI0IDI2IDI0IDI2IDIwIDI0IDIwIDI0IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgcG9pbnRzPSIxOCAyMiAxNiAyMiAxNiAyNCAyMCAyNCAyMCAyMCAxOCAyMCAxOCAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHBvaW50cz0iMTIg''@;'; put 'put ''MjggMTAgMjggMTAgMzAgMTQgMzAgMTQgMjYgMTIgMjYgMTIgMjgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgcG9pbnRzPSIyNCAyOCAyMiAyOCAyMiAzMCAyNiAzMCAyNiAyNiAyNCAyNiAyNCAyOCIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiBwb2ludHM9IjE4IDI4IDE2IDI4IDE2IDMwIDIwIDMwIDIwIDI2IDE4IDI2IDE4IDI4Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTEyLDI4SDEwVjI2aDJabTAtNkgxMFYyMGgyWm0wLTZIMTBWMTRoMlptNywxMkgxN1YyNmgyWm0wLTZIMTdWMjBoMlptMC02SDE3VjE0aDJa''@;'; put 'put ''bTcsMTJIMjRWMjZoMlptMC02SDI0VjIwaDJabTAtNkgyNFYxNGgyWm0wLTdIMTBWNUgyNloiLz4nKSxsLkNsclNoYXBlU2hvcHBpbmdCYWc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNSwxMlY5LjA1YTcs''@;'; put 'put ''NywwLDEsMC0xNCwwdjdhMSwxLDAsMCwwLDIsMFYxNGg4VjEySDEzVjkuMDVhNSw1LDAsMSwxLDEwLDBWMTZhMSwxLDAsMSwwLDIsMFYxNGg1VjMySDZWMTRIOVYxMkg0VjMyLjA5QTEuOTEsMS45MSwwLDAsMCw1LjkxLDM0SDMwLjA5QTEuOTEsMS45MSwwLDAsMCwzMiwzMi4wOVYxMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMyw5LjIyYTUsNSwwLDEsMSwxMCwwVjEyaDJWOS4yMmE3LDcsMCwxLDAtMTQsMFYxMmgyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgZD0iTTI1LDEydjMuMWExLDEsMCwxLDEtMiwwVjEySDEzdjMuMWExLDEsMCwwLDEtMiwwVjEySDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEyWiIvPicpLGwuQ2xyU2hhcGVQaWdneUJhbms9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS43MiwxMC40N2ExMS42NSwxMS42NSwwLDAsMC02LjMxLjUyQS44LjgsMCwxLDAsMTQsMTIuNDgsMTAuMTEsMTAuMTEsMCwwLDEsMTkuNDQsMTJhLjguOCwwLDEsMCwuMjgtMS41N1oiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyNS4zOCIgY3k9IjE2LjcxIiByPSIxLjM2Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTM1LjUxLDE4LjYzYTEsMSwwLDAs''@;'; put 'put ''MC0uODQtLjQ0LDMuNDIsMy40MiwwLDAsMS0yLjA5LTEuMTIsMTcuMzUsMTcuMzUsMCwwLDEtMi42My0zLjc4bDIuODgtNC41QTEuODksMS44OSwwLDAsMCwzMyw3YTEuNzcsMS43NywwLDAsMC0xLjMzLTEsMTAuMTIsMTAuMTIsMCwwLDAtNS4zOS43NSwxMi43MiwxMi43MiwwLDAsMC0yLjcy''@;'; put 'put ''LDEuNjMsMTYuOTQsMTYuOTQsMCwwLDAtNS4xNi0xLjM5QzExLjMxLDYuMyw0LjgzLDEwLjksNCwxN0g0YTIuNTYsMi41NiwwLDAsMS0xLjM4LTEuNTMsMS44MSwxLjgxLDAsMCwxLC4xNC0xLjQsMS4xOSwxLjE5LDAsMCwxLC40My0uNDMsMS4wOCwxLjA4LDAsMCwwLTEuMTItMS44NUEzLjMx''@;'; put 'put ''LDMuMzEsMCwwLDAsLjkxLDEzYTQsNCwwLDAsMC0uMzMsMy4wOEE0Ljc2LDQuNzYsMCwwLDAsMywxOC45NWwuOTIuNDZhMTcuNTgsMTcuNTgsMCwwLDAsMS44Miw3bC4xNy4zOEEyMywyMywwLDAsMCw5LjIsMzEuODhhMSwxLDAsMCwwLC43NS4zNGg0LjUyYTEsMSwwLDAsMCwuOTItMS4zOEwx''@;'; put 'put ''NSwyOS45NGwxLjE4LjEzYTIwLjMzLDIwLjMzLDAsMCwwLDQsMGMuMzcuNi43NywxLjIsMS4yMSwxLjc5YTEsMSwwLDAsMCwuOC40MWg0LjM0YTEsMSwwLDAsMCwuOTItMS4zOWMtLjE3LS40LS4zNC0uODMtLjQ3LTEuMi0uMTgtLjUzLS4zMi0xLS40My0xLjQ1QTEzLjE4LDEzLjE4LDAsMCww''@;'; put 'put ''LDI5LjU2LDI2YTEyLjUsMTIuNSwwLDAsMCwzLDAsMSwxLDAsMCwwLC43OC0uNjJsMi4yNi01LjgxQTEsMSwwLDAsMCwzNS41MSwxOC42M1ptLTMuNzgsNS40NGExMS4zNywxMS4zNywwLDAsMS0yLjM1LS4xMWgwYTguMiw4LjIsMCwwLDEtMi41My0uODcsMSwxLDAsMCwwLS45MywxLjc3LDEx''@;'; put 'put ''LjcyLDExLjcyLDAsMCwwLDEuMjkuNTgsOCw4LDAsMCwxLTEuOCwxLjE2bC0xLjA2LjQ4cy40OSwyLjE5LjgyLDMuMTZIMjIuNzljLS4yNC0uMzQtMS40NS0yLjM2LTEuNDUtMi4zNmwtLjY3LjA5YTE4LjUzLDE4LjUzLDAsMCwxLTQuMjUuMTJjLS42Ni0uMDYtMS43Ni0uMi0yLjYyLS4zNWwt''@;'; put 'put ''MS41NS0uMjdzLjYzLDIuNDMuNzUsMi43NHYwSDEwLjQyQTIwLjU3LDIwLjU3LDAsMCwxLDcuNzYsMjZsLS4xOC0uMzlBMTQuNjIsMTQuNjIsMCwwLDEsNiwxNy40OGMuNTQtNS4xOSw2LjEyLTkuMTEsMTIuMTktOC41NGExNS40NywxNS40NywwLDAsMSw1LjA4LDEuNDhsLjYyLjI5LjUtLjQ3''@;'; put 'put ''QTEwLjI5LDEwLjI5LDAsMCwxLDI3LDguNTRhOC4yNSw4LjI1LDAsMCwxLDQtLjY1bC0zLjM4LDUuMjkuMjUuNWgwYTIxLjE2LDIxLjE2LDAsMCwwLDMuMzEsNC44NCw2LjQ5LDYuNDksMCwwLDAsMi4xNCwxLjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM1LDE4Ljg3QTUuODMsNS44MywwLDAsMSwzMywxNy42MWEyMS42MywyMS42MywwLDAsMS0zLjI5LTQuODRsMy4zOS01LjI5YS45LjksMCwwLDAtLjU0LTEuMzgsOS42Nyw5LjY3LDAsMCwwLTUuMTMuNzIsMTIsMTIsMCwwLDAtMy4xMywyQTE3LjM3LDE3''@;'; put 'put ''LjM3LDAsMCwwLDE4LjYsNy4xNUMxMS44LDYuNTIsNS4yNywxMC45LDQuNTQsMTdsLS4xNC0uMDdBMi43NiwyLjc2LDAsMCwxLDIuOSwxNS4yOWEyLDIsMCwwLDEsLjE1LTEuNTUsMS4zMiwxLjMyLDAsMCwxLC40Ny0uNDgsMS4wOCwxLjA4LDAsMSwwLTEuMTItMS44NSwzLjQ1LDMuNDUsMCww''@;'; put 'put ''LDAtMS4yMywxLjI1QTQuMTYsNC4xNiwwLDAsMCwuODQsMTUuOWE1LDUsMCwwLDAsMi41NywzbDEsLjU0YTE4LjYyLDE4LjYyLDAsMCwwLDIsNy4zLDIzLDIzLDAsMCwwLDMsNC43OSwxLDEsMCwwLDAsLjguMzhoMy42MWEuNTIuNTIsMCwwLDAsLjQtLjc1TDE0LDMwLjM4YTExLDExLDAsMCwx''@;'; put 'put ''LS4zMy0xLjE4Yy45MS4xNiwyLjA4LjMxLDIuODcuMzhhMjAuMDcsMjAuMDcsMCwwLDAsMy4xMiwwYy4zOS43Ljc5LDEuMzMsMS4xNSwxLjg1YS45My45MywwLDAsMCwuNzcuNDFoMy4xMWEuNjUuNjUsMCwwLDAsLjYxLS44NWMtLjIzLS43NC0uNTMtMS43NS0uNzEtMi4zN2ExNS45LDE1Ljks''@;'; put 'put ''MCwwLDAsMy43NS0xLjc2Yy4xNi0uMTEuMzItLjI2LjQ4LS4zOWExMy43NywxMy43NywwLDAsMS0yLjQyLTEsLjguOCwwLDAsMSwuNzQtMS40MiwxMS42NCwxMS42NCwwLDAsMCwzLjE4LDEuMSwxMy4zMSwxMy4zMSwwLDAsMCwyLjY4LjEyLDEsMSwwLDAsMCwuOS0uNjZsMS43My00LjQ0QTEs''@;'; put 'put ''MSwwLDAsMCwzNSwxOC44N1pNMTMuNzksMTEuNTlhLjg2Ljg2LDAsMCwxLS4zLjA1Ljg1Ljg1LDAsMCwxLS4zLTEuNjQsMTIuNDEsMTIuNDEsMCwwLDEsNi42OS0uNTUuODUuODUsMCwxLDEtLjMsMS42N0ExMC43NSwxMC43NSwwLDAsMCwxMy43OSwxMS41OVptMTIuNTIsNi4xMmExLjQ0LDEu''@;'; put 'put ''NDQsMCwxLDEsMS40NC0xLjQ0QTEuNDQsMS40NCwwLDAsMSwyNi4zMiwxNy43MloiLz4nKSxsLkNsclNoYXBlU2hvcHBpbmdDYXJ0PSgwLGEuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMDgsNS4zN0ExLDEsMCwwLDAsMzIuMzEsNUgxMS40''@;'; put 'put ''OWwuNjUsMkgzMUwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhsMy4xNy0xNEExLDEsMCwwLDAsMzMuMDgsNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjAuNzEgNyAyMS44NyA1IDExLjQ5IDUgMTIuMTQgNyAyMC43MSA3IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4xNSwxNS40LDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCww''@;'; put 'put ''LDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwxLjA5LTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjMzIiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41Nyw3YTcuNTIs''@;'; put 'put ''Ny41MiwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFIMTEuNDlsLjY1LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWwtLjQyLDBMMjguMzMsMTloLTE1''@;'; put 'put ''TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42''@;'; put 'put ''Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuNTctNi45MUE3LjUxLDcuNTEsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEsNi4zOUExLDEsMCwwLDAsMzIuMzEsNkg5''@;'; put 'put ''LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44''@;'; put 'put ''NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwzLjItMTNBMSwxLDAsMCwwLDMzLjEsNi4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0i''@;'; put 'put ''Mi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjYuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0u''@;'; put 'put ''MTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMS4xOS00Ljg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs''@;'; put 'put ''MS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWEx''@;'; put 'put ''LDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDEuNzEtN0E3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZVdhbGxldD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDE1SDMxVjlhMSwxLDAsMCwwLTEtMUg2YTEsMSwwLDAsMS0xLS44MlY2LjgyQTEsMSwwLDAsMSw2LDZIMjkuNThhMSwxLDAsMCwwLDAtMkg2QTMsMywwLDAsMCwzLDdhMy4wOCwzLjA4LDAsMCwwLDAsLjM2VjI3LjkzQTQuMSw0LjEs''@;'; put 'put ''MCwwLDAsNy4xMywzMkgzMGExLDEsMCwwLDAsMS0xVjI1aDFhMSwxLDAsMCwwLDEtMVYxNkExLDEsMCwwLDAsMzIsMTVaTTI5LDMwSDcuMTNBMi4xMSwyLjExLDAsMCwxLDUsMjcuOTNWOS44OEEzLjExLDMuMTEsMCwwLDAsNiwxMEgyOXY1SDIyYTUsNSwwLDAsMCwwLDEwaDdabTItN0gyMmEz''@;'; put 'put ''LDMsMCwwLDEsMC02SDMxWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIzLjAxIiBjeT0iMjAiIHI9IjEuNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjk0LDE0SDMxVjlhMSwxLDAsMCwwLTEtMUg2QTEsMSwwLDAsMSw1LDdINVY3QTEsMSwwLDAsMSw2LDZIMjkuNmExLDEsMCwxLDAsMC0ySDZBMi45NCwyLjk0LDAsMCwwLDMsNi44OHYyMUE0LjEzLDQuMTMsMCwwLDAsNy4xNSwzMkgzMGExLDEsMCwwLDAsMS0xVjI2aDEu''@;'; put 'put ''OTRhLjkzLjkzLDAsMCwwLDEtLjkxdi0xMEExLjA4LDEuMDgsMCwwLDAsMzIuOTQsMTRaTTMyLDI0bC04LjU4LDBhMy44NywzLjg3LDAsMCwxLTMuNzMtNCwzLjg3LDMuODcsMCwwLDEsMy43My00TDMyLDE2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0yIiBjeD0iMjQuMDQiIGN5PSIxOS45MiIgcj0iMS41Ii8+JyksbC5DbHJTaGFwZVN0b3JlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjgsMzBIMTZWMjJIMTR2OEg4VjIySDZ2OGEy''@;'; put 'put ''LDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMjJIMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4y''@;'; put 'put ''OSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAsMCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAs''@;'; put 'put ''NC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTMwLDE4LjEzQTIuNjgsMi42OCwwLDAsMSwyNy44MiwxN0wyNywxNS44OCwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4LDIwLjE5LDE3''@;'; put 'put ''YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMTUsMTUuODgsMTQuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4LDguMTgsMTdBMi42OCwyLjY4LDAsMCwxLDYsMTguMTNhMi42NCwyLjY0LDAsMCwxLTItLjg4VjE0LjE3TDguMDgsNkgyNy45MkwzMiwxNC4xNnYuNjdsMCwyLjM5''@;'; put 'put ''QTIuNjcsMi42NywwLDAsMSwzMCwxOC4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy43OSwxMy4yNywyOS43MSw1LjExQTIsMiwwLDAsMCwyNy45Miw0SDguMDhBMiwyLDAsMCwwLDYuMjksNS4xMUwyLjIxLDEzLjI3YTIsMiwwLDAsMC0uMjEuOXYzLjA4YTIsMiwwLDAsMCwu''@;'; put 'put ''NDYsMS4yOEE0LjY3LDQuNjcsMCwwLDAsNiwyMC4xM2E0LjcyLDQuNzIsMCwwLDAsMy0xLjA3LDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzIsNC43MiwwLDAsMCw2LjUzLS41MkEyLDIsMCwwLDAsMzQsMTcuMjZWMTQuMTdB''@;'; put 'put ''MiwyLDAsMCwwLDMzLjc5LDEzLjI3Wk0xNSwxNC40djEuNTJMMTQuMTgsMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEw5LDE1Ljg4VjE0LjRMMTEuNTksNkgxNlptMTIsMS40OEwyNi4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDIxLDE1Ljg4bDAsMFYxNC40TDIwLDZoNC40NUwyNywx''@;'; put 'put ''NC40WiIvPicpLGwuQ2xyU2hhcGVFdXJvPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEuNDgsMjguNDlhMSwxLDAsMCwwLTEuMzgtLjMyQTEyLDEyLDAsMCwxLDEyLjQ1LDIySDI0LjE2YTEsMSwwLDAsMCww''@;'; put 'put ''LTJIMTEuOTNhMTEuMTYsMTEuMTYsMCwwLDEsMC00SDI0LjE2YTEsMSwwLDAsMCwwLTJIMTIuNDVBMTIsMTIsMCwwLDEsMzAuMDYsNy44YTEsMSwwLDAsMCwxLjA2LTEuN0ExNCwxNCwwLDAsMCwxMC4zNCwxNEgzLjU0YTEsMSwwLDEsMCwwLDJIOS45MWExNCwxNCwwLDAsMC0uMTYsMiwxNCwx''@;'; put 'put ''NCwwLDAsMCwuMTYsMkgzLjU0YTEsMSwwLDEsMCwwLDJoNi44YTE0LDE0LDAsMCwwLDIwLjgzLDcuODdBMSwxLDAsMCwwLDMxLjQ4LDI4LjQ5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy40MiwyNS4xNkExMC44OCwxMC44OCwwLDAsMSw5LjIzLDIxSDUuODRhMSwxLDAsMCwxLDAtMmgzYzAtLjM1LS4wNS0uNzEtLjA1LTEuMDdzMC0uNjMsMC0uOTNoLTNhMSwxLDAsMCwxLDAtMkg5LjE5QTEwLjg2LDEwLjg2LDAsMCwxLDI1LjM4LDgu''@;'; put 'put ''NjlhMS4yNSwxLjI1LDAsMCwxLTEuMzIsMi4xMkE4LjM2LDguMzYsMCwwLDAsMTEuODIsMTVoOS4zNmExLDEsMCwwLDEsMCwySDExLjMzYTcuNzIsNy43MiwwLDAsMCwwLDJoOS44MmExLDEsMCwwLDEsMCwySDExLjg3YTguMzYsOC4zNiwwLDAsMCwxMi4yMiw0LDEuMjUsMS4yNSwwLDEsMSwx''@;'; put 'put ''LjMzLDIuMTJaIi8+JyksbC5DbHJTaGFwZURvbGxhcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI2LDIxLjE1YTYuOTEsNi45MSwwLDAsMC00LjM4LTMuMzJBMjYsMjYsMCwwLDAsMTksMTcuMTlWOC4xMkEx''@;'; put 'put ''MC4wNSwxMC4wNSwwLDAsMSwyMy44NiwxMGExLDEsMCwwLDAsMS4zMy0xLjVBMTEuNzUsMTEuNzUsMCwwLDAsMTksNi4xVjNhMSwxLDAsMCwwLTIsMFY2Yy00LjQuMS02LjgzLDIuMjktNy41Nyw0LjE4QTUuNTYsNS41NiwwLDAsMCwxMS42NiwxNywxMy4yLDEzLjIsMCwwLDAsMTcsMTguODRW''@;'; put 'put ''MjhhMTIuMywxMi4zLDAsMCwxLTcuMTQtMi43NEExLDEsMCwxLDAsOC40OSwyNi43LDE0LjA5LDE0LjA5LDAsMCwwLDE3LDMwdjNhMSwxLDAsMCwwLDIsMFYzMGMyLjgyLS4xOSw2LjA3LTEuMDksNy4zLTQuNzZBNS4zMyw1LjMzLDAsMCwwLDI2LDIxLjE1Wk0xMi43OSwxNS4zMmEzLjU3LDMu''@;'; put 'put ''NTcsMCwwLDEtMS40OS00LjM5QzExLjQxLDEwLjYzLDEyLjUzLDguMTIsMTcsOHY4LjhBMTAuNywxMC43LDAsMCwxLDEyLjc5LDE1LjMyWk0yNC40LDI0LjU2Yy0uNzIsMi4xNC0yLjMyLDMuMTctNS40LDMuNFYxOS4yM2MuNjQuMTQsMS4zLjMsMiwuNTFhNSw1LDAsMCwxLDMuMTksMi4zMkEz''@;'; put 'put ''LjM0LDMuMzQsMCwwLDEsMjQuNCwyNC41NloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy42NSwyMS41OWMtMSwz''@;'; put 'put ''LTMuNjEsMy44NC01LjksNHYyYTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNy41OUExMS40NywxMS40NywwLDAsMSwxMSwyNWExLjI1LDEuMjUsMCwxLDEsMS43MS0xLjgzLDkuMTEsOS4xMSwwLDAsMCw0LjU1LDEuOTRWMTguODNhOS42Myw5LjYzLDAsMCwxLTMuNzMtMS40MSw0LjgsNC44LDAs''@;'; put 'put ''MCwxLTEuOTEtNS44NGMuNTktMS41MSwyLjQyLTMuMjMsNS42NC0zLjUxVjYuMjVhMS4yNSwxLjI1LDAsMCwxLDIuNSwwVjguMTFhOS42Nyw5LjY3LDAsMCwxLDQuOSwyQTEuMjUsMS4yNSwwLDAsMSwyMywxMS45NWE3LjE0LDcuMTQsMCwwLDAtMy4yNC0xLjMxdjYuMTNjLjYuMTMsMS4yNC4y''@;'; put 'put ''NywxLjkxLjQ4YTUuODUsNS44NSwwLDAsMSwzLjY5LDIuODJBNC42NCw0LjY0LDAsMCwxLDI1LjY1LDIzLjU5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTIwLjkyLDE5LjY0Yy0uNC0uMTItLjc5LS4yMi0xLjE3LS4z''@;'; put 'put ''djUuNzZjMi0uMiwzLjA3LS45LDMuNTMtMi4zYTIuMTUsMi4xNSwwLDAsMC0uMTUtMS41OEEzLjQ5LDMuNDksMCwwLDAsMjAuOTIsMTkuNjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTMuOTQsMTIuNDhhMi4zMSwy''@;'; put 'put ''LjMxLDAsMCwwLDEsMi44Nyw2LjUzLDYuNTMsMCwwLDAsMi4zMi45MlYxMC41NUMxNS4xNiwxMC44LDE0LjE5LDExLjg0LDEzLjk0LDEyLjQ4WiIvPicpLGwuQ2xyU2hhcGVDcmVkaXRDYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIs''@;'; put 'put ''MCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyLDAsMTJINEw0LDhaTTQsMjhWMjRIMzJ2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMyIgd2lkdGg9IjIyIiBo''@;'; put 'put ''ZWlnaHQ9IjMwIiByeD0iMC45NiIgcnk9IjAuOTYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2KSByb3RhdGUoOTApIiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwxOEg0VjIwSDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlQmFuaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMy41LDEzLjU2LDE4LDUuMjNsMTQuNSw4LjMzYTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUuMDIiIHk9IjE0IiB3aWR0aD0iMjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAs''@;'; put 'put ''MCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDI4VjE3LjYzSDI2VjI1SDE5VjE3LjYzSDE3VjI1SDEwVjE3LjYzSDhWMjVINUExLDEsMCwwLDAsNCwyNloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjE1LDExLjU4aDMuMjFM''@;'; put 'put ''MTguNjUsNy43MmEuOC44LDAsMCwwLS44LDBsLTYuNzIsMy44NmgzLjIxbDMuOS0yLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4''@;'; put 'put ''LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMi43Nyw4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45NCwx''@;'; put 'put ''My4yNGwuNTYuMzJhMSwxLDAsMCwwLDEuNDQtMS4xOUE3LjQ1LDcuNDUsMCwwLDEsMzEuOTQsMTMuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBW''@;'; put 'put ''MTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywyOUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSwxNUEzLjUxLDMuNTEsMCwwLDEsMjAsMTRINXYySDMxVjE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS40Niw5Ljc0bC42OC0xLjE3LTEuNDktLjg1YS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjQsMS4xLjYzQzE5LjM5LDkuODksMTkuNDIsOS44MSwxOS40Niw5Ljc0WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4wNSw1LjI1LDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMMTgsNS4yMywyMS4wNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu''@;'; put 'put ''ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMy41LDEzLjU2LDUsMTIuNjhWMTZIMzFWMTIuNzFsMS40OC44NWExLDEsMCwwLDAsMS0xLjczTDE4''@;'; put 'put ''LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNaTTE3Ljg1LDcuMTFhLjguOCwwLDAsMSwuOCwwTDI1LjM3LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1''@;'; put 'put ''LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcu''@;'; put 'put ''NjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDcsNy40NywwLDAsMSwyNC4zOSwxMUgyMi4xNWwtMy45LTIuMjRMMTQuMzUsMTFIMTEuMTRsNi43Mi0zLjg2YS44LjgsMCwwLDEsLjgsMGw1LDIuODdBNy40NSw3LjQ1LDAsMCwxLDIyLjUsNmMwLS4xNiwwLS4zMiwwLS40OEwxOCwy''@;'; put 'put ''LjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTMuNDJBNy41Myw3LjUzLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEz''@;'; put 'put ''LjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAsMSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3''@;'; put 'put ''LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1YTMuNTEsMy41MSwwLDAsMS0zLTUuMjZsLjE0LS4yNC0xLjM1LS43OEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDEuNzUsMSwxLjY1LTIuODZMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43''@;'; put 'put ''M0w1LDEyLjY4VjE2SDMxVjE1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPicpLGwuQ2xyU2hhcGVEb2xsYXJCaWxsPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDZhNC4yNSw0LjI1LDAsMCwxLTMuOS00SDMyWm0wLDEuNjJ2''@;'; put 'put ''NC44M0E1Ljg3LDUuODcsMCwwLDAsMjYuNDksMjZoLTE3QTUuODcsNS44NywwLDAsMCw0LDIwLjQ0VjE1LjZBNS44Nyw1Ljg3LDAsMCwwLDkuNTEsMTBoMTdBNS44Nyw1Ljg3LDAsMCwwLDMyLDE1LjZaTTcuOSwxMEE0LjI1LDQuMjUsMCwwLDEsNCwxNFYxMFpNNCwyMi4wNkE0LjI1LDQuMjUs''@;'; put 'put ''MCwwLDEsNy45LDI2SDRaTTI4LjEsMjZBNC4yNSw0LjI1LDAsMCwxLDMyLDIyLjA2VjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwxMC44NWMtMy40NywwLTYuMywzLjIxLTYuMyw3LjE1czIuODMsNy4x''@;'; put 'put ''NSw2LjMsNy4xNSw2LjMtMy4yMSw2LjMtNy4xNVMyMS40NywxMC44NSwxOCwxMC44NVptMCwxMi42OWMtMi41OSwwLTQuNy0yLjQ5LTQuNy01LjU1czIuMTEtNS41NSw0LjctNS41NSw0LjcsMi40OSw0LjcsNS41NVMyMC41OSwyMy41NSwxOCwyMy41NVoiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhaTTQsMjZWMjEuMTVBNS4xOCw1LjE4LDAsMCwxLDguNzksMjZaTTQsMTQuODVWMTBI''@;'; put 'put ''OC43OUE1LjE4LDUuMTgsMCwwLDEsNCwxNC44NVpNMTgsMjUuMTVjLTMuNDcsMC02LjMtMy4yMS02LjMtNy4xNXMyLjgzLTcuMTUsNi4zLTcuMTUsNi4zLDMuMjEsNi4zLDcuMTVTMjEuNDcsMjUuMTUsMTgsMjUuMTVaTTMyLDI2SDI3LjI1QTUuMTgsNS4xOCwwLDAsMSwzMiwyMS4xNVptMC0x''@;'; put 'put ''MS4xNUE1LjE4LDUuMTgsMCwwLDEsMjcuMjUsMTBIMzJaIi8+XG4gICAgICAgICAgICA8ZWxsaXBzZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxOCIgcng9IjQiIHJ5PSI0LjcyIi8+JyksbC5DbHJTaGFwZUVDaGVjaz0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTUiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjIwIiB5PSIy''@;'; put 'put ''MSIgd2lkdGg9IjExIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzQsOEgxMi45M2E4LjM1LDguMzUsMCwwLDEsLjc5LDJIMzNWMjZIM1YxOS45YTcuODMsNy44MywwLDAsMS0yLTEuMzRWMjdh''@;'; put 'put ''MSwxLDAsMCwwLDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTYuNTcsMTguNjhhNi4xNyw2LjE3LDAsMCwwLDQuMzItMS41OSwxLjIsMS4yLDAs''@;'; put 'put ''MCwwLC4zNi0uODQsMS4wOCwxLjA4LDAsMCwwLTEuMDktMS4xMSwxLDEsMCwwLDAtLjcxLjI1LDQuMzIsNC4zMiwwLDAsMS0yLjg0LDEsMy4zNSwzLjM1LDAsMCwxLTMuNDYtM2g3LjUzQTEuMjksMS4yOSwwLDAsMCwxMiwxMi4wNiw1LjY4LDUuNjgsMCwwLDAsNi4yNyw2LjE0LDYsNiwwLDAs''@;'; put 'put ''MCwuNCwxMi40djBBNiw2LDAsMCwwLDYuNTcsMTguNjhaTTYuMjUsOC4zOWMxLjgyLDAsMi44NywxLjM5LDMsMy4xNkgzLjEzQzMuMzgsOS42OSw0LjU2LDguMzksNi4yNSw4LjM5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTM0LDhIMTIuOTFhOC42MSw4LjYxLDAsMCwxLDEuMiw0LjM5LDgsOCwwLDAsMS03Ljc4LDguMjdBNy41MSw3LjUxLDAsMCwxLDEsMTguNDFWMjdhMSwxLDAsMCwwLDEsMUgzNGExLDEsMCwwLDAsMS0xVjlBMSwxLDAsMCwwLDM0LDhaTTMxLDIzSDIwVjIxSDMxWm0wLTVIMTZWMTZIMzFa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNNi41NywxOC42OEE2LDYsMCwwLDEsLjQsMTIuNDR2MEE2LDYsMCwwLDEsNi4yNyw2LjE0LDUuNjgsNS42OCwwLDAsMSwxMiwxMi4wNmExLjI5LDEuMjksMCwwLDEtMS4zLDEu''@;'; put 'put ''MzJIMy4xNWEzLjM1LDMuMzUsMCwwLDAsMy40NiwzLDQuMzIsNC4zMiwwLDAsMCwyLjg0LTEsMSwxLDAsMCwxLC43MS0uMjUsMS4wOCwxLjA4LDAsMCwxLDEuMDksMS4xMSwxLjIsMS4yLDAsMCwxLS4zNi44NEE2LjE3LDYuMTcsMCwwLDEsNi41NywxOC42OFpNOS4zLDExLjU1Yy0uMTgtMS43''@;'; put 'put ''Ny0xLjIzLTMuMTYtMy0zLjE2cy0yLjg3LDEuMy0zLjEyLDMuMTZaIi8+JyksbC5DbHJTaGFwZVBvdW5kPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuOSwzMEgxMy40QTguNDUsOC40NSwwLDAsMCwxNSwy''@;'; put 'put ''NC42NVYyMWg0LjMxYTEsMSwwLDAsMCwwLTJIMTVWMTEuMzFBNS4yNCw1LjI0LDAsMCwxLDIwLjIxLDYsNS4xOSw1LjE5LDAsMCwxLDI0LDcuNzNhMSwxLDAsMCwwLDEuNDgtMS4zNUE3LjE5LDcuMTksMCwwLDAsMTMsMTEuMzFWMTlIOC43MmExLDEsMCwxLDAsMCwySDEzdjMuNjVDMTMsMjku''@;'; put 'put ''MzgsMTAuMTIsMzAsMTAsMzBhMSwxLDAsMCwwLC4xNywySDI3LjlhMSwxLDAsMSwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuNSwy''@;'; put 'put ''NS45MkgxMS43NGExLjI1LDEuMjUsMCwwLDEtLjIyLTIuNDhjLjE1LDAsMS43Mi0uNDksMS43Mi0zLjU0VjE5aC0yLjVhMSwxLDAsMCwxLDAtMmgyLjVWMTEuODhhNS44NSw1Ljg1LDAsMCwxLDUuNzItNiw1LjYzLDUuNjMsMCwwLDEsNC4yMSwxLjk0QTEuMjUsMS4yNSwwLDEsMSwyMS4zLDku''@;'; put 'put ''NTEsMy4wOCwzLjA4LDAsMCwwLDE5LDguNDJhMy4zNSwzLjM1LDAsMCwwLTMuMjIsMy40NlYxN2gzYTEsMSwwLDAsMSwwLDJoLTN2Mi45QTcuNjUsNy42NSwwLDAsMSwxNSwyNS40MkgyNC41YTEuMjUsMS4yNSwwLDAsMSwwLDIuNVoiLz4nKSxsLkNsclNoYXBlUnVwZWU9KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCw4SDI0LjE0QTcuNTIsNy41MiwwLDAsMCwyMi42LDZIMjhhMSwxLDAsMCwwLDAtMkgxMGExLDEsMCwwLDAsMCwyaDcuNTVhNS40Miw1LjQyLDAsMCwxLDQuMiwySDEwYTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMjIuNzlBNS41NCw1LjU0LDAsMCwxLDIzLDExLjUxLDUuNDgsNS40OCwwLDAsMSwxNy41NSwxN0gxMS4xNGExLDEsMCwwLDAtLjc1LDEuNjZMMjIuMDYsMzJhMSwxLDAsMSwwLDEuNS0xLjMyTDEzLjM1LDE5aDQuMjFhNy41MSw3LjUxLDAsMCwwLDcuMy05SDI4YTEsMSwwLDAsMCww''@;'; put 'put ''LTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm01Ljg4LDlIMjZhMSwxLDAsMCwxLDAsMkgyNC4yNmMwLC4wNiwwLC4xMiwwLC4xOWE2LjA5LDYu''@;'; put 'put ''MDksMCwwLDEtNiw2LjJoLTJsNi44Miw4LjA2YTEuMjUsMS4yNSwwLDAsMS0xLjkxLDEuNjJMMTIuNjMsMTguOTRhMS4yNSwxLjI1LDAsMCwxLDEtMi4wNmg0LjcxYTMuNTksMy41OSwwLDAsMCwzLjQ4LTMuNjljMC0uMDcsMC0uMTMsMC0uMmgtOWExLDEsMCwwLDEsMC0yaDguMzJhMy40MSwz''@;'; put 'put ''LjQxLDAsMCwwLTIuNzgtMS41SDEyLjc1YTEuMjUsMS4yNSwwLDAsMSwwLTIuNUgyNmExLDEsMCwwLDEsMCwySDIyLjY4QTYuMjMsNi4yMywwLDAsMSwyMy44OCwxMVoiLz4nKSxsLkNsclNoYXBlV29uPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsMThIMjguNzVsLjUtMkgzM2ExLDEsMCwwLDAsMC0ySDI5Ljc0bDIuMTctOC43NkExLDEsMCwwLDAsMzAsNC43NkwyNy42OCwxNEgyMS4zMUwxOSw0Ljc2YTEsMSwwLDAsMC0xLjk0LDBMMTQuNzksMTRIOC40Mkw2LjEzLDQuNzZhMSwxLDAsMCwwLTEu''@;'; put 'put ''OTQuNDhMNi4zNiwxNEgzYTEsMSwwLDAsMCwwLDJINi44NWwuNSwySDNhMSwxLDAsMCwwLDAsMkg3Ljg0bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwxNS4zNiwyMGg1LjM4bDIuNzksMTEuMjRhMSwxLDAsMCwwLDEuOTQsMEwyOC4yNSwyMEgzM2ExLDEsMCwwLDAsMC0yWm0tNS44Mi0y''@;'; put 'put ''LS41LDJIMjIuM2wtLjUtMlpNMTgsOS4xNiwxOS4yNSwxNGgtMi40Wk04LjkxLDE2aDUuMzhsLS41LDJIOS40MVpNMTEuNiwyNi44NCw5LjkxLDIwSDEzLjNaTTE1Ljg1LDE4bC41LTJoMy4zOWwuNSwyWm04LjY0LDguODRMMjIuOCwyMGgzLjM5WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24g''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgcG9pbnRzPSIxNy43NCAxNiAxNy4yMiAxOCAxOC44NSAxOCAxOC4zMiAxNiAxNy43NCAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgcG9pbnRzPSIx''@;'; put 'put ''MS45NCAxOCAxNC42MyAxOCAxNS4xNiAxNiAxMS40MSAxNiAxMS45NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgcG9pbnRzPSIxMy4yOSAyMy4xIDE0LjEgMjAgMTIuNDcgMjAgMTMuMjkgMjMuMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgcG9pbnRzPSIyMS40NCAxOCAyNC4xMyAxOCAyNC42NiAxNiAyMC45MSAxNiAyMS40NCAxOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtNSIgcG9pbnRzPSIyMi43OCAyMy4xIDIzLjYgMjAgMjEuOTcgMjAgMjIuNzggMjMuMSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjksMjBI''@;'; put 'put ''MjYuMTlMMjQsMjguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEwxOS4zOCwyMEgxNi42OWwtMi4xOSw4LjMyYTEuMjUsMS4yNSwwLDAsMS0yLjQyLDBMOS44OCwyMEg3YTEsMSwwLDAsMSwwLTJIOS4zNWwtLjUzLTJIN2ExLDEsMCwwLDEsMC0ySDguM2wtMS0zLjY4YTEuMjUsMS4yNSwwLDAs''@;'; put 'put ''MSwyLjQyLS42NEwxMC44OCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLDBMMjAuMzgsMTRoNC44bDEuMTQtNC4zMmExLjI1LDEuMjUsMCwwLDEsMi40Mi42NGwtMSwzLjY4SDI5YTEsMSwwLDAsMSwwLDJIMjcuMjRsLS41MywySDI5YTEsMSwwLDAsMSwwLDJaIi8+Jyks''@;'; put 'put ''bC5DbHJTaGFwZVllbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjM0LDQuNTVhMSwxLDAsMSwwLTEuNjctMS4xTDE4LDE4LjIzLDguMzMsMy40NWExLDEsMCwwLDAtMS42NywxLjFMMTcsMjAuMzVWMjIu''@;'; put 'put ''MkgxMmEuOC44LDAsMCwwLDAsMS42aDV2Mi40SDEyYS44LjgsMCwwLDAsMCwxLjZoNVYzMmExLDEsMCwwLDAsMiwwVjI3LjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIzLjhoNWEuOC44LDAsMCwwLDAtMS42SDE5VjIwLjM1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOC4wNyw3LjkxTDE5Ljc0LDIwSDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2MkgyMmExLDEsMCwwLDEsMCwySDE5LjI1djIuNzVhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI2''@;'; put 'put ''SDE0YTEsMSwwLDEsMSwwLTJoMi43NVYyMkgxNGExLDEsMCwxLDEsMC0yaDIuMjZMOS45Myw5LjkxYTEuMjUsMS4yNSwwLDEsMSwyLjEyLTEuMzNMMTgsMTguMDhsNS45NS05LjQ5YTEuMjUsMS4yNSwwLDEsMSwyLjEyLDEuMzNaIi8+JyksbC5DbHJTaGFwZUJpdGNvaW49KDAsYS5jbHJJY29u''@;'; put 'put ''U1ZHKSgnPHBhdGggZD0iTTI0LjExLDE2Ljg4QTUuNDksNS40OSwwLDAsMCwyMSw3VjRhMSwxLDAsMCwwLTIsMFY3SDE2VjRhMSwxLDAsMCwwLTIsMFY3SDExYTEsMSwwLDAsMC0xLDFWMjhhMSwxLDAsMCwwLDEsMWgzdjNhMSwxLDAsMCwwLDIsMFYyOWgzdjNhMSwxLDAsMCwwLDIsMFYyOWgu''@;'; put 'put ''MDhBNi4wNyw2LjA3LDAsMCwwLDI3LDIyLjgxdi0uNjJBNi4yNSw2LjI1LDAsMCwwLDI0LjExLDE2Ljg4Wk0xMiw5aDguNjlhMy41OSwzLjU5LDAsMCwxLDMuNDMsMi4zNkEzLjUxLDMuNTEsMCwwLDEsMjAuNzksMTZIMTJaTTI1LDIyLjgxQTQuMDgsNC4wOCwwLDAsMSwyMS4wNiwyN0gxMlYx''@;'; put 'put ''OGg5LjA2QTQuMDgsNC4wOCwwLDAsMSwyNSwyMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLjE4LDE4LjQ3SDE0LjV2Nmg2LjY4YTIuNywyLjcsMCwwLDAsMi42My0yLjc3di0uNDhBMi43MSwyLjcx''@;'; put 'put ''LDAsMCwwLDIxLjE4LDE4LjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMywxMy43NWEyLjI0LDIuMjQsMCwwLDAtMi4yMy0yLjI1SDE0LjVWMTZoNi4zQTIuMjIsMi4yMiwwLDAsMCwyMywxMy43NVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjMxLDE5LjczQTUuMjIsNS4yMiwwLDAsMSwyMS4xOCwyN0gyMXYxLjlhMSwxLDAsMCwxLTIsMFYyN0gxN3Yx''@;'; put 'put ''LjlhMSwxLDAsMCwxLTIsMFYyN0gxMy4yNUExLjI1LDEuMjUsMCwwLDEsMTIsMjUuNzVWMTcuMjNoMHYtN0ExLjI1LDEuMjUsMCwwLDEsMTMuMjUsOUgxNVY3LjA3YTEsMSwwLDAsMSwyLDBWOWgyVjcuMDdhMSwxLDAsMCwxLDIsMFY5YTQuNzIsNC43MiwwLDAsMSwzLjIsOCw1LjMxLDUuMzEs''@;'; put 'put ''MCwwLDEsMi4xMSw0LjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlQ29pbkJhZz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNiwyOWExLDEsMCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwy''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMi41NCwyNGgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMiwzMkgx''@;'; put 'put ''NmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi43LDMyaC03YTEsMSwwLDAsMCwwLDJoN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLjcsMjhoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuNzQsMjZhMjgsMjgsMCwwLDAtMi44Mi0xMC4xMkEyMC4yNCwyMC4yNCww''@;'; put 'put ''LDAsMCwyNC42LDguNzFMMjcsMy40MmExLDEsMCwwLDAtLjA3LTFBMSwxLDAsMCwwLDI2LjEzLDJIOS44YTEsMSwwLDAsMC0uOTEsMS40MmwyLjQ1LDUuMzFhMjAuMzMsMjAuMzMsMCwwLDAtNi4yOCw3LjE1Yy0yLjE1LDQtMi44Miw4Ljg5LTMsMTIuMjhhMy42LDMuNiwwLDAsMCwxLDIuNzFB''@;'; put 'put ''My43OSwzLjc5LDAsMCwwLDUuOCwzMS45NEgxMlYzMEg1LjcyYTEuNjgsMS42OCwwLDAsMS0xLjIxLS41MiwxLjYyLDEuNjIsMCwwLDEtLjQ1LTEuMjNjLjE0LTIuNjEuNjktNy41OCwyLjc2LTExLjQ1QTE4LDE4LDAsMCwxLDEzLjA4LDEwaDFhMzAuODEsMzAuODEsMCwwLDAtMS44NywyLjky''@;'; put 'put ''LDIyLjc4LDIyLjc4LDAsMCwwLTEuNDcsMy4zNGwxLjM3LjkyYTI0LDI0LDAsMCwxLDEuNDktMy40N0EyOS4xLDI5LjEsMCwwLDEsMTYuMDUsMTBoMWEyMS40NSwyMS40NSwwLDAsMSwxLjQxLDUsMjIuNTQsMjIuNTQsMCwwLDEsLjMyLDMuODZsMS41OC0xLjExYTI0LjE1LDI0LjE1LDAsMCww''@;'; put 'put ''LS4zMi0zQTI0LjgyLDI0LjgyLDAsMCwwLDE4Ljc2LDEwaC43OGwuOTEtMkgxMy4yMUwxMS4zNiw0SDI0LjU3bC0yLjUsNS40N2E5LjkzLDkuOTMsMCwwLDEsMS4yMy43OCwxOC42MywxOC42MywwLDAsMSw1Ljg2LDYuNTdBMjYuNTksMjYuNTksMCwwLDEsMzEuNzMsMjZaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICA8cGF0aCBkPSJNMjQuODksMjZoNy44NmMtLjY2LTguNzEtNC40MS0xNC4xMi05LjIyLTE3LjMyTDI1LjcyLDMuOWExLDEsMCwwLDAtLjkxLTEuNEgxMS4xYTEsMSwwLDAsMC0uOTEsMS40bDEuMiwyLjZIMjEuNTFsLS45''@;'; put 'put ''LDJIMTguNzZBMjQuOSwyNC45LDAsMCwxLDIwLDEzLjE5YTI0LjQ5LDI0LjQ5LDAsMCwxLC4zMiwzbC0xLjU4LDEuMTFhMjIuNTQsMjIuNTQsMCwwLDAtLjMyLTMuODZBMjEuNzQsMjEuNzQsMCwwLDAsMTcsOC41aC0xYTI4LjIyLDI4LjIyLDAsMCwwLTIuNDgsMy43LDIzLjkxLDIzLjkxLDAs''@;'; put 'put ''MCwwLTEuNDksMy40NmwtMS4zNy0uOTFhMjIuNzgsMjIuNzgsMCwwLDEsMS40Ny0zLjM0QTMwLjgxLDMwLjgxLDAsMCwxLDE0LjA1LDguNUgxMi4zbC4wOC4xN0M3LjA4LDEyLjIsMy4wNSwxOC40LDMuMDUsMjguNzVBMS42NSwxLjY1LDAsMCwwLDQuNjEsMzAuNWg4QTIuNjcsMi42NywwLDAs''@;'; put 'put ''MSwxNC4yMSwyNmEyLjY3LDIuNjcsMCwwLDEtLjM3LTEuMzQsMi43LDIuNywwLDAsMSwyLjctMi43aDZhMi43LDIuNywwLDAsMSwyLjcsMi43QTIuNjMsMi42MywwLDAsMSwyNC44OSwyNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLjYs''@;'; put 'put ''MjguNWExLDEsMCwwLDAtMS0xaC02YTEsMSwwLDAsMCwwLDJoNkExLDEsMCwwLDAsMjEuNiwyOC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNTQsMjMuNWgtNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDMxLjVIMTZhMSwxLDAsMCwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi43LDMxLjVoLTdhMSwxLDAsMCwwLDAsMmg3''@;'; put 'put ''YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43LDI3LjVoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVQZXNvPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMy4ySDI3Ljg5QTYuODEsNi44MSwwLDAsMCwyOCwxMmE3Ljg1LDcuODUsMCwwLDAtLjEtMS4xOWgyLjkzYS44LjgsMCwwLDAsMC0xLjZIMjcuNDZBOC40NCw4LjQ0LDAsMCwwLDE5LjU3LDRIMTFhMSwxLDAsMCwwLTEsMVY5''@;'; put 'put ''LjJIN2EuOC44LDAsMCwwLDAsMS42aDN2Mi40SDdhLjguOCwwLDAsMCwwLDEuNmgzVjMxYTEsMSwwLDAsMCwyLDBWMjBoNy41N2E4LjQ1LDguNDUsMCwwLDAsNy44OS01LjJIMzFhLjguOCwwLDAsMCwwLTEuNlpNMTIsNmg3LjU3YTYuNTEsNi41MSwwLDAsMSw1LjY4LDMuMkgxMlptMCw0LjhI''@;'; put 'put ''MjUuODdhNS42LDUuNiwwLDAsMSwwLDIuNEgxMlpNMTkuNTcsMThIMTJWMTQuOEgyNS4yNUE2LjUxLDYuNTEsMCwwLDEsMTkuNTcsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTMuOFYxNmg5LjQ1YTUuMjYsNS4yNiww''@;'; put 'put ''LDAsMCwuMDgtLjg5LDQuNzIsNC43MiwwLDAsMC0uMi0xLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTQuMTgsMTkuN2g1LjE5YTQuMjgsNC4yOCwwLDAsMCwzLjUtMS45SDE0LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTkuMzcsMTAuNTFIMTQuMThWMTJoOC4zN0E0LjIxLDQuMjEsMCwwLDAsMTkuMzcsMTAuNTFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy42NywyYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAs''@;'; put 'put ''MCwwLDE3LjY3LDJabTEwLjUsMTUuOEgyNS43YTYuODcsNi44NywwLDAsMS02LjMzLDQuNEgxNC4xOHY2LjU0YTEuMjUsMS4yNSwwLDEsMS0yLjUsMFYxNy44SDguNzZhLjkuOSwwLDEsMSwwLTEuOGgyLjkyVjEzLjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWOS4yNkExLjI1LDEuMjUs''@;'; put 'put ''MCwwLDEsMTIuOTMsOGg2LjQ0YTYuODQsNi44NCwwLDAsMSw2LjE1LDRoMi42NWEuOS45LDAsMCwxLDAsMS44SDI2LjA5YTYuOTEsNi45MSwwLDAsMSwuMTIsMS4zLDYuOCw2LjgsMCwwLDEtLjA2LjloMmEuOS45LDAsMCwxLDAsMS44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlUnVibGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjU3LDIwQTguMjMsOC4yMywwLDAsMCwyOSwxMmE4LjIzLDguMjMsMCwwLDAtOC40My04SDEyYTEsMSwwLDAsMC0xLDFWMThIOWExLDEsMCwwLDAsMCwyaDJ2Mkg5YTEsMSwwLDAsMCww''@;'; put 'put ''LDJoMnY3YTEsMSwwLDAsMCwyLDBWMjRoOWExLDEsMCwwLDAsMC0ySDEzVjIwWk0xMyw2aDcuNTdBNi4yNCw2LjI0LDAsMCwxLDI3LDEyYTYuMjMsNi4yMywwLDAsMS02LjQzLDZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjAu''@;'; put 'put ''NzUsOS4yNUgxNXY4LjgxaDUuNzlhNC42Niw0LjY2LDAsMCwwLDQuODYtNC40QTQuNjUsNC42NSwwLDAsMCwyMC43NSw5LjI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwy''@;'; put 'put ''Wm0yLjc1LDE4LjU2SDE1VjIyaDguMjlhMSwxLDAsMCwxLDAsMkgxNXY1YTEuMjUsMS4yNSwwLDAsMS0yLjUsMFYyNEgxMS4yNWExLDEsMCwwLDEsMC0yaDEuMjFWMjAuNTZIMTEuMjVhMS4yNSwxLjI1LDAsMCwxLDAtMi41aDEuMjFWOGExLjI1LDEuMjUsMCwwLDEsMS4yNS0xLjI1aDdhNy4x''@;'; put 'put ''NCw3LjE0LDAsMCwxLDcuMzYsNi45QTcuMTUsNy4xNSwwLDAsMSwyMC43NSwyMC41NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUVtcGxveWVlR3JvdXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjQyLDE2LjMxYTUuNyw1''@;'; put 'put ''LjcsMCwxLDEsNS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4''@;'; put 'put ''LjQyLDE2LjMxYTUuNyw1LjcsMCwxLDEsNS43Ni01LjdBNS43NCw1Ljc0LDAsMCwxLDE4LjQyLDE2LjMxWm0wLTkuNGEzLjcsMy43LDAsMSwwLDMuNzYsMy43QTMuNzQsMy43NCwwLDAsMCwxOC40Miw2LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTIxLjkxLDE3LjY1YTIwLjYsMjAuNiwwLDAsMC0xMywyQTEuNzcsMS43NywwLDAsMCw4LDIxLjI1djMuNTZhMSwxLDAsMCwwLDIsMFYyMS4zOGExOC45MiwxOC45MiwwLDAsMSwxMi0xLjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi''@;'; put 'put ''Lz5cbiAgPHBhdGggZD0iTTMzLDIySDI2LjNWMjAuNTJhMSwxLDAsMCwwLTIsMFYyMkgxN2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVYyM0ExLDEsMCwwLDAsMzMsMjJaTTMyLDMySDE4VjI0aDYuM3YuNDFhMSwxLDAsMCwwLDIsMFYyNEgzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjIxLjgxIiB5PSIyNy40MiIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTAuODQsMTIu''@;'; put 'put ''MjRhMTgsMTgsMCwwLDAtNy45NSwyQTEuNjcsMS42NywwLDAsMCwyLDE1LjcxdjMuMWExLDEsMCwwLDAsMiwwdi0yLjlhMTYsMTYsMCwwLDEsNy41OC0xLjY3QTcuMjgsNy4yOCwwLDAsMSwxMC44NCwxMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0zMy4xMSwxNC4yM2ExNy44LDE3LjgsMCwwLDAtNy4xMi0yLDcuNDYsNy40NiwwLDAsMS0uNzMsMkExNS44OSwxNS44OSwwLDAsMSwzMiwxNS45MXYyLjlhMSwxLDAsMSwwLDIsMHYtMy4xQTEuNjcsMS42NywwLDAsMCwzMy4xMSwxNC4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxwYXRoIGQ9Ik0xMC42NiwxMC42MWMwLS4yMywwLS40NSwwLS42N2EzLjA3LDMuMDcsMCwwLDEsLjU0LTYuMTEsMy4xNSwzLjE1LDAsMCwxLDIuMi44OSw4LjE2LDguMTYsMCwwLDEsMS43LTEuMDgsNS4xMyw1LjEzLDAsMCwwLTks''@;'; put 'put ''My4yNyw1LjEsNS4xLDAsMCwwLDQuNyw1QTcuNDIsNy40MiwwLDAsMSwxMC42NiwxMC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04Ii8+XG4gIDxwYXRoIGQ9Ik0yNC43NywxLjgzYTUuMTcsNS4xNywwLDAsMC0zLjY5LDEuNTUsNy44Nyw3Ljg3LDAsMCwx''@;'; put 'put ''LDEuOSwxLDMuMTQsMy4xNCwwLDAsMSw0LjkzLDIuNTIsMy4wOSwzLjA5LDAsMCwxLTEuNzksMi43Nyw3LjE0LDcuMTQsMCwwLDEsLjA2LjkzLDcuODgsNy44OCwwLDAsMS0uMSwxLjIsNS4xLDUuMSwwLDAsMCwzLjgzLTQuOUE1LjEyLDUuMTIsMCwwLDAsMjQuNzcsMS44M1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIFxuICA8ZWxsaXBzZSBjeD0iMTgiIGN5PSIxMS4yOCIgcng9IjQuNzYiIHJ5PSI0LjciIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjc4LDExLjc1Yy4xNiwwLC4z''@;'; put 'put ''MiwwLC40OCwwLDAtLjE1LDAtLjI4LDAtLjQzYTYuNyw2LjcsMCwwLDEsMy43NS02LDQuNjIsNC42MiwwLDEsMC00LjIxLDYuNDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yNC43NiwxMS4yOGMwLC4xNSwwLC4yOCwwLC40My4xNiww''@;'; put 'put ''LC4zMiwwLC40OCwwQTQuNTgsNC41OCwwLDEsMCwyMSw1LjI5LDYuNyw2LjcsMCwwLDEsMjQuNzYsMTEuMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yMi4yOSwxNi40NWEyMS40NSwyMS40NSwwLDAsMSw1LjcxLDIsMi43MSwyLjcx''@;'; put 'put ''LDAsMCwxLC42OC41M0gzNFYxNS41NmEuNzIuNzIsMCwwLDAtLjM4LS42NCwxOCwxOCwwLDAsMC04LjQtMi4wNWwtLjY2LDBBNi42Niw2LjY2LDAsMCwxLDIyLjI5LDE2LjQ1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNNi41MywyMC45''@;'; put 'put ''MkEyLjc2LDIuNzYsMCwwLDEsOCwxOC40N2EyMS40NSwyMS40NSwwLDAsMSw1LjcxLTIsNi42Niw2LjY2LDAsMCwxLTIuMjctMy41NWwtLjY2LDBhMTgsMTgsMCwwLDAtOC40LDIuMDUuNzIuNzIsMCwwLDAtLjM4LjY0VjIySDYuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC01Ii8+XG4gIDxyZWN0IHg9IjIxLjQ2IiB5PSIyNi42OSIgd2lkdGg9IjUuOTYiIGhlaWdodD0iMS40IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0zMi44MSwyMS4yNkgyNS45NHYtMWExLDEsMCwwLDAtMiwwdjFIMjJWMTguNDNB''@;'; put 'put ''MjAuMTcsMjAuMTcsMCwwLDAsMTgsMThhMTkuMjcsMTkuMjcsMCwwLDAtOS4wNiwyLjIyLjc2Ljc2LDAsMCwwLS40MS42OHY1LjYxaDcuMTF2Ni4wOWExLDEsMCwwLDAsMSwxSDMyLjgxYTEsMSwwLDAsMCwxLTFWMjIuMjZBMSwxLDAsMCwwLDMyLjgxLDIxLjI2Wm0tMSwxMC4zNkgxNy42NFYy''@;'; put 'put ''My4yNmg2LjN2LjkxYTEsMSwwLDAsMCwyLDB2LS45MWg1Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIvPicpLGwuQ2xyU2hhcGVFbXBsb3llZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYuNDMsMTYuNjlhNyw3LDAsMSwxLDctN0E3LDcsMCwwLDEs''@;'; put 'put ''MTYuNDMsMTYuNjlabTAtMTEuOTJhNSw1LDAsMSwwLDUsNUE1LDUsMCwwLDAsMTYuNDMsNC43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMiwxNy45QTI1LjQxLDI1LjQxLDAsMCwwLDUuODgsMTkuNTdhNC4wNiw0LjA2LDAs''@;'; put 'put ''MCwwLTIuMzEsMy42OFYyOS4yYTEsMSwwLDEsMCwyLDBWMjMuMjVhMiwyLDAsMCwxLDEuMTYtMS44NiwyMi45MSwyMi45MSwwLDAsMSw5LjctMi4xMSwyMy41OCwyMy41OCwwLDAsMSw1LjU3LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJl''@;'; put 'put ''Y3QgeD0iMjIuMTQiIHk9IjI3LjQxIiB3aWR0aD0iNi4xNCIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMy4xNywyMS40N0gyOHYyaDQuMTd2OC4zN0gxOFYyMy40N2g2LjN2LjQyYTEsMSwwLDAsMCwyLDBW''@;'; put 'put ''MjBhMSwxLDAsMCwwLTIsMHYxLjQ3SDE3YTEsMSwwLDAsMC0xLDFWMzIuODRhMSwxLDAsMCwwLDEsMUgzMy4xN2ExLDEsMCwwLDAsMS0xVjIyLjQ3QTEsMSwwLDAsMCwzMy4xNywyMS40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIFxuICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIxNi44NiIgY3k9IjkuNzMiIHI9IjYuNDYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iMjEiIHk9IjI4IiB3aWR0aD0iNyIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTE1LDMwdjNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzYTEsMSwwLDAsMC0xLTFIMjZWMjAuNTNhMSwxLDAsMCwwLTIsMFYyMkgyMlYxOC40MkEzMi4xMiwzMi4xMiwwLDAsMCwxNi44NiwxOGEyNiwyNiwwLDAsMC0xMSwyLjM5LDMuMjgsMy4yOCwwLDAsMC0x''@;'; put 'put ''Ljg4LDNWMzBabTE3LDJIMTdWMjRoN3YuNDJhMSwxLDAsMCwwLDIsMFYyNGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVGYWN0b3J5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy40Nyw3LjM3YTEsMSwwLDAsMC0xLC4wNkwy''@;'; put 'put ''MywxMy43N1Y4LjI2YTEsMSwwLDAsMC0xLjY0LS43N0wxMy40OCwxNEgxMFY0LjYyYTEsMSwwLDAsMC0uNzgtMWwtNC0uOWExLDEsMCwwLDAtLjg1LjJBMSwxLDAsMCwwLDQsMy43M1YxNEgzYTEsMSwwLDAsMC0xLDFWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjguMjZBMSwx''@;'; put 'put ''LDAsMCwwLDMzLjQ3LDcuMzdaTTYsNWwyLC40NFYxNEg2Wk0zMiwzMEg0VjE2aDkuODNhMSwxLDAsMCwwLC42NC0uMjNMMjEsMTAuMzd2NS4yOGExLDEsMCwwLDAsMS41Ni44M0wzMiwxMC4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0''@;'; put 'put ''IHg9IjYiIHk9IjE3Ljk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSI2IiB5PSIyMS45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMjUuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxyZWN0IHg9IjE5IiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cmVjdCB4PSIyMyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iMjciIHk9IjE4Ljk5IiB3''@;'; put 'put ''aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIvPlxuICBcbiAg''@;'; put 'put ''PHBhdGggZD0iTTMyLjQ1LDguNDQsMjIsMTUuM1Y5LjUxYTEsMSwwLDAsMC0xLjYzLS43OEwxNC4wNywxNEgxMFY0LjA2TDQsMi43MVYxNEgyVjMxYTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY5LjI3QTEsMSwwLDAsMCwzMi40NSw4LjQ0Wk0xNCwyOUg2VjI3aDhabTAtNEg2VjIz''@;'; put 'put ''aDhabTAtNEg2VjE5aDhabTgsOEgyMFYyNmgyWm0wLTZIMjBWMjBoMlptNCw2SDI0VjI2aDJabTAtNkgyNFYyMGgyWm00LDZIMjhWMjZoMlptMC02SDI4VjIwaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5Db21tZXJjZVNoYXBlcz17Y2FsY3VsYXRv''@;'; put 'put ''cjpsLkNsclNoYXBlQ2FsY3VsYXRvciwicGlnZ3ktYmFuayI6bC5DbHJTaGFwZVBpZ2d5QmFuaywic2hvcHBpbmctYmFnIjpsLkNsclNoYXBlU2hvcHBpbmdCYWcsInNob3BwaW5nLWNhcnQiOmwuQ2xyU2hhcGVTaG9wcGluZ0NhcnQsd2FsbGV0OmwuQ2xyU2hhcGVXYWxsZXQsc3RvcmU6bC5D''@;'; put 'put ''bHJTaGFwZVN0b3JlLGV1cm86bC5DbHJTaGFwZUV1cm8sZG9sbGFyOmwuQ2xyU2hhcGVEb2xsYXIscGVzbzpsLkNsclNoYXBlUGVzbywiY3JlZGl0LWNhcmQiOmwuQ2xyU2hhcGVDcmVkaXRDYXJkLGJhbms6bC5DbHJTaGFwZUJhbmssImRvbGxhci1iaWxsIjpsLkNsclNoYXBlRG9sbGFyQmls''@;'; put 'put ''bCwiZS1jaGVjayI6bC5DbHJTaGFwZUVDaGVjayxwb3VuZDpsLkNsclNoYXBlUG91bmQscnVwZWU6bC5DbHJTaGFwZVJ1cGVlLHdvbjpsLkNsclNoYXBlV29uLHllbjpsLkNsclNoYXBlWWVuLGJpdGNvaW46bC5DbHJTaGFwZUJpdGNvaW4scnVibGU6bC5DbHJTaGFwZVJ1YmxlLCJjb2luLWJh''@;'; put 'put ''ZyI6bC5DbHJTaGFwZUNvaW5CYWcsImVtcGxveWVlLWdyb3VwIjpsLkNsclNoYXBlRW1wbG95ZWVHcm91cCxlbXBsb3llZTpsLkNsclNoYXBlRW1wbG95ZWUsZmFjdG9yeTpsLkNsclNoYXBlRmFjdG9yeX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29tbWVyY2VTaGFwZXMsInNhdmluZ3Mi''@;'; put 'put ''LCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db21tZXJjZVNoYXBlc1sicGlnZ3ktYmFuayJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKGwuQ29tbWVyY2VTaGFwZXMpfSwiLi9wcm9q''@;'; put 'put ''ZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMgKioqIQogICAgICBcKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuQ29yZVNo''@;'; put 'put ''YXBlcz1sLkNsclNoYXBlQXJyb3c9bC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj1sLkNsclNoYXBlRXllSGlkZT1sLkNsclNoYXBlRXllPWwuQ2xyU2hhcGVFdmVudD1sLkNsclNoYXBlQ2FsZW5kYXI9bC5DbHJTaGFwZUFuZ2xlRG91YmxlPWwuQ2xyU2hhcGVWaWV3Q29sdW1ucz1sLkNsclNoYXBl''@;'; put 'put ''U2VhcmNoPWwuQ2xyU2hhcGVWbUJ1Zz1sLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT1sLkNsclNoYXBlRmlsdGVyR3JpZD1sLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1sLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPWwuQ2xyU2hhcGVDbG91ZD1sLkNsclNoYXBlSW1hZ2U9bC5DbHJT''@;'; put 'put ''aGFwZUJlbGw9bC5DbHJTaGFwZUZvbGRlck9wZW49bC5DbHJTaGFwZUZvbGRlcj1sLkNsclNoYXBlQW5nbGU9bC5DbHJTaGFwZVVzZXI9bC5DbHJTaGFwZUJhcnM9bC5DbHJTaGFwZUhlbHBJbmZvPWwuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9bC5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9bC5D''@;'; put 'put ''bHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1sLkNsclNoYXBlSW5mb1N0YW5kYXJkPWwuQ2xyU2hhcGVJbmZvQ2lyY2xlPWwuQ2xyU2hhcGVDaGVja0NpcmNsZT1sLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9bC5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9bC5DbHJTaGFwZVRpbWVzPWwu''@;'; put 'put ''Q2xyU2hhcGVDaGVjaz1sLkNsclNoYXBlQ29nPWwuQ2xyU2hhcGVIb21lPWwuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgcD1hKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRz''@;'; put 'put ''Iik7YT1hKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksbC5DbHJTaGFwZVVua25vd25TdGF0dXM9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4y''@;'; put 'put ''NiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIsNS4yOSw1LjI5LDAsMCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0''@;'; put 'put ''LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksbC5DbHJTaGFwZUhvbWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43''@;'; put 'put ''MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5''@;'; put 'put ''YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwxLDAsMCwxLDMzLDE5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLGwuQ2xyU2hhcGVDb2c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMyLjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0xLjQtMC4zLTEuOWwtMi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEs''@;'; put 'put ''Mi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYs''@;'; put 'put ''MS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjlj''@;'; put 'put ''MC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEu''@;'; put 'put ''MS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwt''@;'; put 'put ''MC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAu''@;'; put 'put ''Mi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgs''@;'; put 'put ''My4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEs''@;'; put 'put ''Nyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNjLTAuOCwwLTEuNi0wLjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4x''@;'; put 'put ''TDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0w''@;'; put 'put ''LjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40''@;'; put 'put ''LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEuNi0wLjQtMi41bC0wLjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEu''@;'; put 'put ''MkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0wLjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcs''@;'; put 'put ''MC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0xLjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEu''@;'; put 'put ''NS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0''@;'; put 'put ''Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAu''@;'; put 'put ''NywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTku''@;'; put 'put ''NHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43''@;'; put 'put ''LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIu''@;'; put 'put ''NSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4x''@;'; put 'put ''LDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYt''@;'; put 'put ''My40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAu''@;'; put 'put ''NSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2MwLTAuOS0wLjItMS44LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIz''@;'; put 'put ''eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAu''@;'; put 'put ''OCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjExLS43MkwyNy40MSw2LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEt''@;'; put 'put ''My4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCww''@;'; put 'put ''LTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWEx''@;'; put 'put ''MS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAs''@;'; put 'put ''LjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMi4xMiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAs''@;'; put 'put ''MCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0zLTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2Ex''@;'; put 'put ''MS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAsMSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43''@;'; put 'put ''Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTExLjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIu''@;'; put 'put ''MzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEsMCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEs''@;'; put 'put ''MTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4LDEyLjVhNS41Myw1LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEu''@;'; put 'put ''NjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wt''@;'; put 'put ''My4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42''@;'; put 'put ''NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43Mmwt''@;'; put 'put ''MS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUNoZWNr''@;'; put 'put ''PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwxNy4yN2ExLDEsMCwwLDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZVRpbWVzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgs''@;'; put 'put ''OC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLGwuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4''@;'; put 'put ''PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMwLjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEs''@;'; put 'put ''MzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwxLDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDks''@;'; put 'put ''MCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+JyksbC5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4zLDAsMCwxLDE4LDIwLjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDks''@;'; put 'put ''MS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1LjVaIi8+JyksbC5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxsLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNI''@;'; put 'put ''MTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiww''@;'; put 'put ''LDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0y''@;'; put 'put ''LDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwxLDAsMCwxLDAtMmg0djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksbC5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgx''@;'; put 'put ''OVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwy''@;'; put 'put ''LjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJIMTVhMS40LDEuNCwwLDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksbC5DbHJTaGFwZVN1Y2Nl''@;'; put 'put ''c3NTdGFuZGFyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCwwLTEuNDEsMEwxNS40OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwx''@;'; put 'put ''Mi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJs''@;'; put 'put ''NS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLGwuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLGEuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMz''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmExLDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44''@;'; put 'put ''LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLGwuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIxOTM5NiAxNy44ODUsMC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIw''@;'; put 'put ''LjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQuNTM3MjE2MSwzMC40MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQu''@;'; put 'put ''MDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAuNjAzMDk4MjY1LDI5LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4''@;'; put 'put ''MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcsMjkuNDE1Njk3NyBDMy4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBD''@;'; put 'put ''MzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAzMy4wNDY3NTk1LDI4LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQy''@;'; put 'put ''MzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIuMjUxNzY2OTIgMTYuODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUuNjYsMEwxLjE3LDI5LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYs''@;'; put 'put ''MTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOS44NVoiLz4nKSxsLkNsclNoYXBlSGVscEluZm89KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1''@;'; put 'put ''YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYtMS42NiwzLjMyLTkuNDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0''@;'; put 'put ''LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3QTEsMSwwLDAsMCwyNS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEtMi41LDIuNUEyLjUsMi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42OGMtLjYxLDEuODYtMy42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMx''@;'; put 'put ''OS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03LjczLDFhMSwxLDAsMCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMu''@;'; put 'put ''MjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0zLjc3LTIuNDgtMy4zMi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODgu''@;'; put 'put ''ODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgsMyw1LDUsMCwwLDAsMy4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUEx''@;'; put 'put ''LDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCYXJzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEs''@;'; put 'put ''MCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+JyksbC5DbHJTaGFwZVVzZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCww''@;'; put 'put ''LDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1''@;'; put 'put ''Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIy''@;'; put 'put ''LDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTgu''@;'; put 'put ''NDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUs''@;'; put 'put ''NUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYt''@;'; put 'put ''NkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUx''@;'; put 'put ''LDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVBbmdsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwyLjQ1LTIuMzZaIi8+JyksbC5DbHJTaGFwZUZvbGRlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEy''@;'; put 'put ''LDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJB''@;'; put 'put ''Ny40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTks''@;'; put 'put ''OS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwz''@;'; put 'put ''MCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4x''@;'; put 'put ''MSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMy4xMyw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5''@;'; put 'put ''LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAs''@;'; put 'put ''MCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwu''@;'; put 'put ''ODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1''@;'; put 'put ''LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9''@;'; put 'put ''IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0u''@;'; put 'put ''MjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs''@;'; put 'put ''MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs''@;'; put 'put ''MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz''@;'; put 'put ''My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCww''@;'; put 'put ''LDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdW''@;'; put 'put ''MjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQx''@;'; put 'put ''aDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAs''@;'; put 'put ''MCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4y''@;'; put 'put ''OCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdl''@;'; put 'put ''ZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJM''@;'; put 'put ''MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVCZWxsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIx''@;'; put 'put ''LDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4x''@;'; put 'put ''NywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAsMTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwu''@;'; put 'put ''NCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAs''@;'; put 'put ''MSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUu''@;'; put 'put ''ODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCwwLDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4z''@;'; put 'put ''NywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAs''@;'; put 'put ''MCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAt''@;'; put 'put ''LjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0''@;'; put 'put ''LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+''@;'; put 'put ''JyksbC5DbHJTaGFwZUltYWdlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4zMywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAs''@;'; put 'put ''MCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwxLDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42''@;'; put 'put ''LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIy''@;'; put 'put ''LjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMw''@;'; put 'put ''SDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCww''@;'; put 'put ''LDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02''@;'; put 'put ''LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1''@;'; put 'put ''LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGwuQ2xyU2hhcGVDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFh''@;'; put 'put ''MTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwxLDYsOEMzNSwyOS4xLDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2''@;'; put 'put ''LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAsMCwwLTUuMzctNi4yNmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQu''@;'; put 'put ''MTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04''@;'; put 'put ''QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4yNiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42''@;'; put 'put ''Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3''@;'; put 'put ''LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEs''@;'; put 'put ''Ni40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x''@;'; put 'put ''NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwx''@;'; put 'put ''MCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02LjYtOC41OEExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAs''@;'; put 'put ''MSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdB''@;'; put 'put ''My42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZUVsbGlwc2lzVmVy''@;'; put 'put ''dGljYWw9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVGaWx0ZXJHcmlkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUs''@;'; put 'put ''MjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40''@;'; put 'put ''NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAs''@;'; put 'put ''LjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksbC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEs''@;'; put 'put ''MSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAs''@;'; put 'put ''MzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2''@;'; put 'put ''Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPicpLGwuQ2xyU2hhcGVWbUJ1Zz0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0i''@;'; put 'put ''MzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMy43OSwxNC44M2ExLjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44''@;'; put 'put ''NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWExLjE1LDEuMTUsMCwwLDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIy''@;'; put 'put ''LTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0y''@;'; put 'put ''Ljc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgyLDIuODIsMCwwLDAtMi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNm''@;'; put 'put ''ZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0xLjE1LS44N2gtLjFhMS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjEx''@;'; put 'put ''LS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4yNCwwLDAsMCwxLjItLjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwz''@;'; put 'put ''MiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxsLkNsclNoYXBlU2VhcmNoPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEzLDEzLDEzLDEzLDAsMCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxsLkNsclNoYXBlVmlld0NvbHVtbnM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPicpLGwuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTkuODMsNy43MSwzMC4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlQ2FsZW5kYXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCww''@;'; put 'put ''LDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIg''@;'; put 'put ''eT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEu''@;'; put 'put ''NzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05''@;'; put 'put ''LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYi''@;'; put 'put ''IHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCww''@;'; put 'put ''LDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNs''@;'; put 'put ''ZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgeD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVy''@;'; put 'put ''dGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2''@;'; put 'put ''IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAs''@;'; put 'put ''MCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0''@;'; put 'put ''LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0''@;'; put 'put ''aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRn''@;'; put 'put ''ZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcu''@;'; put 'put ''NDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAt''@;'; put 'put ''NUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEu''@;'; put 'put ''NzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2''@;'; put 'put ''VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksbC5DbHJTaGFwZUV2ZW50PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEs''@;'; put 'put ''MCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgs''@;'; put 'put ''MS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYz''@;'; put 'put ''YTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAsMC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5''@;'; put 'put ''VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwx''@;'; put 'put ''LjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUEx''@;'; put 'put ''Ljc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4zNiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5''@;'; put 'put ''QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCww''@;'; put 'put ''LDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45Mywx''@;'; put 'put ''LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlRXllPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwx''@;'; put 'put ''OGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4x''@;'; put 'put ''N0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCwwLDEsMTguMDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYu''@;'; put 'put ''NDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksbC5DbHJTaGFwZUV5ZUhpZGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44Niww''@;'; put 'put ''LDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIzLjYyLDE4YTQuNzksNC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43''@;'; put 'put ''NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAt''@;'; put 'put ''Ni42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTkuNzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwx''@;'; put 'put ''OCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAsMCwxNiwxMS42bDguOCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1''@;'; put 'put ''LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcs''@;'; put 'put ''NS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41''@;'; put 'put ''NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksbC5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxh''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAsMi4zNiwyLjQ0aDBMMjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywxLjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVBcnJvdz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFWMjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLGwuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpsLkNsclNoYXBlVW5rbm93blN0YXR1cyxob21lOmwuQ2xyU2hhcGVIb21lLGNvZzpsLkNsclNoYXBlQ29nLGNoZWNrOmwuQ2xyU2hhcGVDaGVjayx0aW1lczpsLkNs''@;'; put 'put ''clNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpsLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpsLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6bC5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6''@;'; put 'put ''bC5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOmwuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOmwuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQsImVycm9yLXN0YW5kYXJkIjpsLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6''@;'; put 'put ''bC5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpsLkNsclNoYXBlSGVscEluZm8sYmFyczpsLkNsclNoYXBlQmFycyx1c2VyOmwuQ2xyU2hhcGVVc2VyLGFuZ2xlOmwuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6bC5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOmwuQ2xyU2hh''@;'; put 'put ''cGVGb2xkZXJPcGVuLGJlbGw6bC5DbHJTaGFwZUJlbGwsaW1hZ2U6bC5DbHJTaGFwZUltYWdlLGNsb3VkOmwuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9yaXpvbnRhbCI6bC5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOmwuQ2xyU2hhcGVFbGxpcHNp''@;'; put 'put ''c1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6bC5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6bC5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGUsInZtLWJ1ZyI6bC5DbHJTaGFwZVZtQnVnLHNlYXJjaDpsLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOmwuQ2xyU2hh''@;'; put 'put ''cGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpsLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6bC5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OmwuQ2xyU2hhcGVFdmVudCxleWU6bC5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOmwuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6''@;'; put 'put ''bC5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpsLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkNvcmVTaGFwZXMsImhvdXNlIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBl''@;'; put 'put ''cywic2V0dGluZ3MiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkNvcmVTaGFwZXMsInN1Y2Nlc3MiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGwuQ29yZVNoYXBlcywiY2xvc2UiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywid2FybmluZyIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFu''@;'; put 'put ''Z2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJlcnJvciIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLWNpcmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiaW5mbyIsKDAscC5kZXNjcmlw''@;'; put 'put ''dG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJtZW51IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiYXZh''@;'; put 'put ''dGFyIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNoYXBlcywiY2FyZXQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuQ29yZVNo''@;'; put 'put ''YXBlcywiZGlyZWN0b3J5IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJub3RpZmljYXRpb24iLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkobC5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''LwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsdil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLkNsclNoYXBlTG9nb3V0PWwuQ2xyU2hhcGVMb2dpbj1sLkNsclNoYXBlSGVscD1sLkNsclNo''@;'; put 'put ''YXBlQ29weT1sLkNsclNoYXBlQ2hpbGRBcnJvdz1sLkNsclNoYXBlQ2lyY2xlQXJyb3c9bC5DbHJTaGFwZUFsYXJtQ2xvY2s9bC5DbHJTaGFwZUNsb2NrPWwuQ2xyU2hhcGVIaXN0b3J5PWwuQ2xyU2hhcGVUYWdzPWwuQ2xyU2hhcGVUYWc9bC5DbHJTaGFwZVRyYXNoPWwuQ2xyU2hhcGVUaW1l''@;'; put 'put ''c0NpcmNsZT1sLkNsclNoYXBlQmFuPWwuQ2xyU2hhcGVQbHVzQ2lyY2xlPWwuQ2xyU2hhcGVNaW51c0NpcmNsZT1sLkNsclNoYXBlTWludXM9bC5DbHJTaGFwZVBsdXM9bC5DbHJTaGFwZUZpbGU9bC5DbHJTaGFwZVBpbj1sLkNsclNoYXBlRmlsdGVyPWwuQ2xyU2hhcGVQb3BPdXQ9bC5DbHJT''@;'; put 'put ''aGFwZVVzZXJzPWwuQ2xyU2hhcGVVbmxvY2s9bC5DbHJTaGFwZUxvY2s9bC5DbHJTaGFwZVVwbG9hZD1sLkNsclNoYXBlRG93bmxvYWQ9bC5DbHJTaGFwZUxpZ2h0YnVsYj1sLkNsclNoYXBlVmlld0NhcmRzPWwuQ2xyU2hhcGVWaWV3TGlzdD1sLkNsclNoYXBlU3luYz1sLkNsclNoYXBlUmVm''@;'; put 'put ''cmVzaD1sLkNsclNoYXBlTm90ZT1sLkNsclNoYXBlUGVuY2lsPWwuQ2xyU2hhcGVUaGVybW9tZXRlcj1sLkNsclNoYXBlQnVnPWwuQ2xyU2hhcGVTY2lzc29ycz1sLkNsclNoYXBlQXN0ZXJpc2s9bC5DbHJTaGFwZUJvb2s9bC5DbHJTaGFwZU9iamVjdHM9bC5DbHJTaGFwZVJlc2l6ZT1sLkNs''@;'; put 'put ''clNoYXBlQ3Vyc29ySGFuZENsaWNrPWwuQ2xyU2hhcGVDdXJzb3JIYW5kPWwuQ2xyU2hhcGVDdXJzb3JBcnJvdz1sLkNsclNoYXBlR3JpZFZpZXc9bC5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uPWwuQ2xyU2hhcGVOZXc9bC5DbHJTaGFwZUFsYXJtT2ZmPWwuQ2xyU2hhcGVQaW5ib2FyZD1s''@;'; put 'put ''LkNsclNoYXBlQWRkVGV4dD12b2lkIDAsbC5DbHJTaGFwZUNsb25lPWwuQ2xyU2hhcGVDdXJzb3JNb3ZlPWwuQ2xyU2hhcGVXYW5kPWwuQ2xyU2hhcGVTdW49bC5DbHJTaGFwZU1vb249bC5DbHJTaGFwZUZpbHRlcjI9bC5DbHJTaGFwZURyYWdIYW5kbGU9bC5DbHJTaGFwZUNvcHlUb0NsaXBi''@;'; put 'put ''b2FyZD1sLkNsclNoYXBlQ29sb3JQaWNrZXI9bC5DbHJTaGFwZUJyaWVmY2FzZT1sLkNsclNoYXBlRXhwYW5kQ2FyZD1sLkNsclNoYXBlQ29sbGFwc2VDYXJkPWwuQ2xyU2hhcGVTb3J0Qnk9bC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyPWwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5MT1sLkNsclNo''@;'; put 'put ''YXBlU2hyaW5rPWwuQ2xyU2hhcGVQYXBlcmNsaXA9bC5DbHJTaGFwZUZpbGVHcm91cD1sLkNsclNoYXBlUmVwZWF0PWwuQ2xyU2hhcGVJZEJhZGdlPWwuQ2xyU2hhcGVCYWxhbmNlPWwuQ2xyU2hhcGVPcmdhbml6YXRpb249bC5DbHJTaGFwZU5vQWNjZXNzPWwuQ2xyU2hhcGVIb3VyZ2xhc3M9''@;'; put 'put ''bC5DbHJTaGFwZUZsYW1lPWwuQ2xyU2hhcGVUYXJnZXQ9bC5DbHJTaGFwZUJ1bGxzZXllPWwuQ2xyU2hhcGVXcmVuY2g9bC5DbHJTaGFwZUJvbHQ9bC5DbHJTaGFwZUxpYnJhcnk9bC5DbHJTaGFwZUtleT1sLkNsclNoYXBlWm9vbU91dD1sLkNsclNoYXBlWm9vbUluPWwuQ2xyU2hhcGVXaW5k''@;'; put 'put ''b3dSZXN0b3JlPWwuQ2xyU2hhcGVXaW5kb3dNaW49bC5DbHJTaGFwZVdpbmRvd01heD1sLkNsclNoYXBlV2luZG93Q2xvc2U9bC5DbHJTaGFwZVRvb2xzPWwuQ2xyU2hhcGVTd2l0Y2g9bC5DbHJTaGFwZVR3b1dheUFycm93cz1sLkNsclNoYXBlRmlsZVNldHRpbmdzPWwuQ2xyU2hhcGVTY3Jv''@;'; put 'put ''bGw9bC5DbHJTaGFwZVVuZG89bC5DbHJTaGFwZVJlZG89bC5DbHJTaGFwZUxpc3Q9bC5DbHJTaGFwZUZpcmV3YWxsPWwuQ2xyU2hhcGVDbGlwYm9hcmQ9bC5DbHJTaGFwZVNsaWRlcj1sLkNsclNoYXBlV29ybGQ9bC5DbHJTaGFwZVByaW50ZXI9dm9pZCAwLGwuRXNzZW50aWFsU2hhcGVzPWwu''@;'; put 'put ''Q2xyU2hhcGVDb2xvclBhbGV0dGU9bC5DbHJTaGFwZUZpcnN0QWlkPWwuQ2xyU2hhcGVCZXRhPWwuQ2xyU2hhcGVEb3RDaXJjbGU9bC5DbHJTaGFwZUNpcmNsZT1sLkNsclNoYXBlQ3Jvc3NoYWlycz1sLkNsclNoYXBlVm9sdW1lPWwuQ2xyU2hhcGVUYWJsZT1sLkNsclNoYXBlU25vd2ZsYWtl''@;'; put 'put ''PWwuQ2xyU2hhcGVGdWVsPWwuQ2xyU2hhcGVGb3JtPWwuQ2xyU2hhcGVGaXNoPWwuQ2xyU2hhcGVUcmVlPWwuQ2xyU2hhcGVSZWN5Y2xlPWwuQ2xyU2hhcGVGaWx0ZXJPZmY9bC5DbHJTaGFwZUZpbGVaaXA9bC5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPWwuQ2xyU2hhcGVDdXJzb3JIYW5kR3Jh''@;'; put 'put ''Yj1sLkNsclNoYXBlVHJlZVZpZXc9bC5DbHJTaGFwZVBvcnRyYWl0PWwuQ2xyU2hhcGVQYXN0ZT1sLkNsclNoYXBlTGFuZHNjYXBlPWwuQ2xyU2hhcGVFcmFzZXI9bC5DbHJTaGFwZURyYWdIYW5kbGVDb3JuZXI9bC5DbHJTaGFwZURldGFpbHM9dm9pZCAwO3ZhciBwPXYoCi8qISAuLi91dGls''@;'; put 'put ''cy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxhPXYoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTt2''@;'; put 'put ''PXYoCi8qISAuL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiKSxsLkNsclNoYXBlQWRkVGV4dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDIx''@;'; put 'put ''SDEzYTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTIsMTZhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMC0ySDEzQTEsMSwwLDAsMCwxMiwxNloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjcsMjdIMTNhMSwxLDAsMCwwLDAsMkgyN2ExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIGQ9Ik0xNS44OSw5YTEsMSwwLDAsMC0xLTFIMTBWMy4yMWExLDEsMCwwLDAtMiwwVjhIMi44OWExLDEsMCwwLDAsMCwySDh2NS4yMWExLDEsMCwwLDAsMiwwVjEwaDQuODlBMSwxLDAsMCwwLDE1Ljg5LDlaIi8+JyksbC5DbHJTaGFwZVBpbmJvYXJkPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdhMSwxLDAsMCwwLTEuNDEsMS40MWw3LDdhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJN''@;'; put 'put ''MjIuMSwxMS4xOWwuNy41TDI2LjQ2LDgsMjUsNi41NiwyMi41MSw5LjEzYy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwuNzEtLjcyYzEuNTQtMS41NywyLjU1LTMuOTIsMS42OC01LjkzbDIu''@;'; put 'put ''NTQtMi41N0wyNy44OCw5LjM4LDI0LjIxLDEzLjFsLjQ5LjY5Yy43NiwxLC4yNSwyLjM3LS40MSwzLjMzTDE4Ljc3LDExLjZDMTkuODQsMTAuODYsMjEuMTUsMTAuNSwyMi4xLDExLjE5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMwLDMwLDYsMzAsNiw2SDIyVjRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEgzMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy41Nyw5LjMzbC03LTdh''@;'; put 'put ''MSwxLDAsMCwwLTEuNDEsMS40MWwxLjM4LDEuMzgtNCw0Yy0yLS44Ny00LjM1LjE0LTUuOTIsMS42OGwtLjcyLjcxLDMuNTQsMy41NC0zLjY3LDMuNjcsMS40MSwxLjQxLDMuNjctMy42N0wyNC4zNywyMGwuNzEtLjcyYzEuNTQtMS41NywyLjU1LTMuOTEsMS42OC01LjkybDQtNCwxLjM4LDEu''@;'; put 'put ''MzhhMSwxLDAsMSwwLDEuNDEtMS40MVoiLz4nKSxsLkNsclNoYXBlQWxhcm1PZmY9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40NywzLjg0YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4w''@;'; put 'put ''OCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuMzMsMjEuNTRhLjkuOSwwLDAsMC0uNDEtMS4ybC0zLjItMS41NkwyNC44OSwyMkEu''@;'; put 'put ''ODkuODksMCwwLDAsMjUuMzMsMjEuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDguNmEuOS45LDAsMCwwLS45Ljl2NC42bDEuOCwxLjgxVjkuNUEuOS45LDAsMCwwLDE4LDguNloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuODEtLjgxTDguMyw1LjMyQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTE4LDRhMTMuOTEsMTMuOTEsMCwwLDAtOC4zLDIuNzVsMS40MiwxLjQzQTEyLDEyLDAsMCwxLDI3LjgyLDI0LjlsMS40MiwxLjQzQTE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTEuNTYsNC4yMSwyLjczLDUuMzhhNS43LDUuNywwLDAsMCwuNjcsNi4xQTE1Ljc4LDE1Ljc4LDAsMCwxLDUuNDYsOC4xMkw2Ljg4LDkuNTVBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIu''@;'; put 'put ''NjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44LDBsNC4xNCw0LjE1TDMyLDMxLjksMywyLjhaTTI1LDI3LjcyQTExLjg5LDExLjg5LDAsMCwxLDE4LDMwLDEyLDEyLDAsMCwxLDYsMThhMTEuODksMTEuODksMCwwLDEsMi4yOS03WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTExLjQyLDMuNDNhNS44LDUuOCwwLDAsMC01Ljc3LS44Mkw4LjMzLDUuM0ExNiwxNiwwLDAsMSwxMS40MiwzLjQzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI0LjkyLDIx''@;'; put 'put ''Ljk0bDQuMzQsNC4zNkExNCwxNCwwLDAsMCw5Ljc1LDYuNzNMMTcsMTRWOS42OWExLDEsMCwwLDEsMiwwVjE2bDIuMzMsMi4zNEwyNSwyMC4xYTEsMSwwLDAsMSwuNDcsMS4zM0ExLDEsMCwwLDEsMjQuOTIsMjEuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC00IiBkPSJNMS42MSw0LjIxLDIuNzMsNS4zNGE1LjczLDUuNzMsMCwwLDAsLjY3LDYuMTVBMTUuODgsMTUuODgsMCwwLDEsNS40OCw4LjFMNi45MSw5LjUyQTEzLjk0LDEzLjk0LDAsMCwwLDguMTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwy''@;'; put 'put ''LjY2LTIuNjZhMTMuODksMTMuODksMCwwLDAsMTYuODMsMGw0LjE2LDQuMTdMMzIsMzEuOSwzLDIuOFoiLz4nKSxsLkNsclNoYXBlTmV3PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuNTksMjNsLTQuMDgt''@;'; put 'put ''NSw0LTQuOWExLjgyLDEuODIsMCwwLDAsLjIzLTEuOTRBMS45MywxLjkzLDAsMCwwLDMyLjk0LDEwaC0zMUExLjkxLDEuOTEsMCwwLDAsMCwxMS44OFYyNC4xM0ExLjkxLDEuOTEsMCwwLDAsMS45NCwyNkgzMy4wNWExLjkzLDEuOTMsMCwwLDAsMS43Ny0xLjA5QTEuODIsMS44MiwwLDAsMCwz''@;'; put 'put ''NC41OSwyM1pNMiwyNFYxMkgzMi43OGwtNC44NCw1LjkzTDMyLjg1LDI0WiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBwb2ludHM9IjkuMzkgMTkuMzUgNi4xMyAxNSA1IDE1IDUgMjEuMTggNi4xMyAyMS4xOCA2''@;'; put 'put ''LjEzIDE2Ljg0IDkuMzkgMjEuMTggMTAuNTEgMjEuMTggMTAuNTEgMTUgOS4zOSAxNSA5LjM5IDE5LjM1Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHBvaW50cz0iMTIuMTggMjEuMTggMTYuODQgMjEuMTggMTYu''@;'; put 'put ''ODQgMjAuMTYgMTMuMzEgMjAuMTYgMTMuMzEgMTguNTUgMTYuNSAxOC41NSAxNi41IDE3LjUyIDEzLjMxIDE3LjUyIDEzLjMxIDE2LjAzIDE2Ljg0IDE2LjAzIDE2Ljg0IDE1IDEyLjE4IDE1IDEyLjE4IDIxLjE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHBvaW50cz0iMjQuNTIgMTkuNDMgMjMuMDYgMTUgMjEuODQgMTUgMjAuMzcgMTkuNDMgMTkuMDUgMTUgMTcuODIgMTUgMTkuNzggMjEuMTggMjAuODkgMjEuMTggMjIuNDUgMTYuNTkgMjQgMjEuMTggMjUuMTMgMjEuMTggMjcuMDggMTUgMjUuODUg''@;'; put 'put ''MTUgMjQuNTIgMTkuNDMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC4xMSwyNC40OWwtMy45Mi02LjYyLDMuODgtNi4zNUExLDEsMCwwLDAsMzMuMjIsMTBIMmEyLDIsMCwwLDAtMiwyVjI0YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzMuMjVBMSwxLDAsMCwwLDM0LjExLDI0LjQ5Wm0tMjMuNi0zLjMxSDkuMzlMNi4xMywxNi44NHY0LjM1SDVWMTVINi4xM2wzLjI3LDQuMzVWMTVoMS4xMlpNMTYuODQsMTZIMTMuMzF2MS40OWgzLjJ2MWgtMy4ydjEuNjFoMy41M3YxSDEyLjE4VjE1aDQuNjVabTguMjksNS4xNkgyNGwtMS41''@;'; put 'put ''NS00LjU5TDIwLjksMjEuMThIMTkuNzhsLTItNi4xOEgxOWwxLjMyLDQuNDNMMjEuODQsMTVoMS4yMmwxLjQ2LDQuNDNMMjUuODUsMTVoMS4yM1oiLz4nKSxsLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIu''@;'; put 'put ''NVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42''@;'; put 'put ''MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuNjNhMSwxLDAsMCwwLDEtMVY4LjQ4YTEsMSwwLDEsMC0yLDBWMTkuNjFBMSwxLDAsMCwwLDE4LDIwLjYzWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE4IiBjeT0iMjQuMDQiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcu''@;'; put 'put ''MTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMTYuOTMsOS4xM2ExLjQxLDEuNDEsMCwxLDEsMi44MSwwVjE4LjlhMS40MSwxLjQxLDAs''@;'; put 'put ''MSwxLTIuODEsMFptMS40MSwxNy4zNWExLjg3LDEuODcsMCwxLDEsMS44Ny0xLjg3QTEuODcsMS44NywwLDAsMSwxOC4zNCwyNi40N1oiLz4nKSxsLkNsclNoYXBlR3JpZFZpZXc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0xNCw0SDZBMiwyLDAsMCwwLDQsNnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDE0LDRaTTYsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDRI''@;'; put 'put ''MjJhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTIyLDE0VjZoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNCwyMEg2YTIsMiwwLDAs''@;'; put 'put ''MC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMTQsMjBaTTYsMzBWMjJoOHY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMCwyMEgyMmEyLDIsMCwwLDAtMiwydjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWMjJBMiwyLDAsMCwwLDMwLDIwWk0yMiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSI0IiB5PSI0IiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjAiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIiB4PSI0IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIHg9IjIwIiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSxsLkNsclNoYXBlQ3Vyc29yQXJyb3c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNC41OCwzMi4zMWExLDEsMCwwLDEtLjk0LS42NUw0LDUuNjVBMSwxLDAsMCwxLDUuMjUsNC4zN2wy''@;'; put 'put ''Niw5LjY4YTEsMSwwLDAsMS0uMDUsMS44OWwtOC4zNiwyLjU3LDguMyw4LjNhMSwxLDAsMCwxLDAsMS40MWwtMy4yNiwzLjI2YTEsMSwwLDAsMS0uNzEuMjloMGExLDEsMCwwLDEtLjcxLS4yOWwtOC4zMy04LjMzLTIuNiw4LjQ1YTEsMSwwLDAsMS0uOTMuNzFabTMuMDktMTJhMSwxLDAsMCwx''@;'; put 'put ''LC43MS4yOWw4Ljc5LDguNzlMMjksMjcuNTFsLTguNzYtOC43NmExLDEsMCwwLDEsLjQxLTEuNjZsNy4xMy0yLjJMNi42LDdsNy44OSwyMS4yTDE2LjcxLDIxYTEsMSwwLDAsMSwuNzEtLjY4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTI5LDEyLjM2LDMuODgsM0ExLDEsMCwwLDAsMi41OSw0LjI4TDEyLDI5LjQ0YTEsMSwwLDAsMCwxLjg5LS4wNWwyLjY5LTguNzUsOS4xMiw4LjlhMSwxLDAsMCwwLDEuNDEsMGwyLjM1LTIuMzVhMSwxLDAsMCwwLDAtMS40MWwtOS4wOS04Ljg2TDI5LDE0LjI1QTEsMSwwLDAs''@;'; put 'put ''MCwyOSwxMi4zNloiLz4nKSxsLkNsclNoYXBlQ3Vyc29ySGFuZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjc0LDE1LjE5YTEzLjY2LDEzLjY2LDAsMCwwLTYuODctMy44M0EyNiwyNiwwLDAsMCwxOCwx''@;'; put 'put ''MC41OFY1LjI4QTMuNCwzLjQsMCwwLDAsMTQuNSwyLDMuNCwzLjQsMCwwLDAsMTEsNS4yOHYxMEw5LjQsMTMuN2EzLjc3LDMuNzcsMCwwLDAtNS4yOCwwQTMuNjcsMy42NywwLDAsMCwzLDE2LjMzYTMuNiwzLjYsMCwwLDAsMSwyLjU2bDQuNjYsNS41MmExMS41MywxMS41MywwLDAsMCwxLjQz''@;'; put 'put ''LDQsMTAuMTIsMTAuMTIsMCwwLDAsMiwyLjU0djEuOTJhMS4wNywxLjA3LDAsMCwwLDEsMS4wOEgyN2ExLjA3LDEuMDcsMCwwLDAsMS0xLjA4di0yLjdhMTIuODEsMTIuODEsMCwwLDAsMy04LjM2di02QTEsMSwwLDAsMCwzMC43NCwxNS4xOVpNMjksMjEuODZhMTAuNzIsMTAuNzIsMCwwLDEt''@;'; put 'put ''Mi42LDcuMjYsMS4xMSwxLjExLDAsMCwwLS40LjcyVjMySDE0LjE0VjMwLjUyYTEsMSwwLDAsMC0uNDQtLjgzLDcuMjYsNy4yNiwwLDAsMS0xLjgyLTIuMjMsOS4xNCw5LjE0LDAsMCwxLTEuMi0zLjUyLDEsMSwwLDAsMC0uMjMtLjU5TDUuNTMsMTcuNTNhMS43LDEuNywwLDAsMSwwLTIuNDIs''@;'; put 'put ''MS43NiwxLjc2LDAsMCwxLDIuNDcsMGwzLDN2My4xNGwyLTFWNS4yOEExLjQyLDEuNDIsMCwwLDEsMTQuNSw0LDEuNDIsMS40MiwwLDAsMSwxNiw1LjI4djExLjhsMiwuNDNWMTIuNTlhMjQuMjcsMjQuMjcsMCwwLDEsMi41MS4xOFYxOGwxLjYuMzVWMTNjLjQxLjA4LjgzLjE3LDEuMjYuMjhh''@;'; put 'put ''MTQuODgsMTQuODgsMCwwLDEsMS41My40OXY1LjE1bDEuNi4zNVYxNC41QTExLjA2LDExLjA2LDAsMCwxLDI5LDE2LjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LjY5LDE0LjMzdjQuODNsLTItLjQzVjEzLjI0''@;'; put 'put ''YTE2LjE5LDE2LjE5LDAsMCwwLTIuMzMtLjg0djUuODJsLTItLjQzVjEyYy0xLjEtLjE4LTIuMTgtLjMtMy4wOC0uMzZ2NS41MWwtMi0uNDNWMTEuNDhoMFY0LjM0YTIuNTMsMi41MywwLDAsMC0yLjYtMi40MywyLjUzLDIuNTMsMCwwLDAtMi42LDIuNDNWMTcuMjdoMHYyLjU5bC0yLDFWMTUu''@;'; put 'put ''Nkw3Ljc1LDEzLjIxYTIuODMsMi44MywwLDAsMC00LDAsMi45MywyLjkzLDAsMCwwLDAsNC4wOWw2LDcuMWExMC44MiwxMC44MiwwLDAsMCwxLjM5LDQuMjIsOC40Miw4LjQyLDAsMCwwLDIuMjEsMi43M3YyLjU2SDI3Ljc5VjMwLjYyYTEyLjU0LDEyLjU0LDAsMCwwLDMtOC41di02QTEwLDEw''@;'; put 'put ''LDAsMCwwLDI4LjY5LDE0LjMzWiIvPicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC40LDE3LjZjLTEuOC0xLjktNC4yLTMuMi02LjctMy43Yy0xLjEtMC4z''@;'; put 'put ''LTIuMi0wLjUtMy4zLTAuNmMyLjgtMy4zLDIuMy04LjMtMS0xMS4xcy04LjMtMi4zLTExLjEsMXMtMi4zLDguMywxLDExLjFcbiAgICAgICAgICAgICAgICAgICAgYzAuNiwwLjUsMS4yLDAuOSwxLjgsMS4xdjIuMmwtMS42LTEuNWMtMS40LTEuNC0zLjctMS40LTUuMiwwYy0xLjQsMS40LTEu''@;'; put 'put ''NSwzLjYtMC4xLDVsNC42LDUuNGMwLjIsMS40LDAuNywyLjcsMS40LDMuOVxuICAgICAgICAgICAgICAgICAgICBjMC41LDAuOSwxLjIsMS44LDEuOSwyLjV2MS45YzAsMC42LDAuNCwxLDEsMWgxMy42YzAuNSwwLDEtMC41LDEtMXYtMi42YzEuOS0yLjMsMi45LTUuMiwyLjktOC4xdi01Ljhc''@;'; put 'put ''biAgICAgICAgICAgICAgICAgICAgQzMwLjcsMTcuOSwzMC42LDE3LjcsMzAuNCwxNy42eiBNOC40LDguMmMwLTMuMywyLjctNS45LDYtNS44YzMuMywwLDUuOSwyLjcsNS44LDZjMCwxLjgtMC44LDMuNC0yLjIsNC41VjcuOVxuICAgICAgICAgICAgICAgICAgICBjLTAuMS0xLjgtMS42LTMu''@;'; put 'put ''Mi0zLjQtMy4yYy0xLjgtMC4xLTMuNCwxLjQtMy40LDMuMnY1LjJDOS41LDEyLjEsOC41LDEwLjIsOC40LDguMkw4LjQsOC4yeiBNMjguNywyNGMwLjEsMi42LTAuOCw1LjEtMi41LDcuMVxuICAgICAgICAgICAgICAgICAgICBjLTAuMiwwLjItMC40LDAuNC0wLjQsMC43djIuMUgxNC4ydi0x''@;'; put 'put ''LjRjMC0wLjMtMC4yLTAuNi0wLjQtMC44Yy0wLjctMC42LTEuMy0xLjMtMS44LTIuMmMtMC42LTEtMS0yLjItMS4yLTMuNFxuICAgICAgICAgICAgICAgICAgICBjMC0wLjItMC4xLTAuNC0wLjItMC42bC00LjgtNS43Yy0wLjMtMC4zLTAuNS0wLjctMC41LTEuMmMwLTAuNCwwLjItMC45LDAu''@;'; put 'put ''NS0xLjJjMC43LTAuNiwxLjctMC42LDIuNCwwbDIuOSwyLjl2M2wxLjktMVY3LjlcbiAgICAgICAgICAgICAgICAgICAgYzAuMS0wLjcsMC43LTEuMywxLjUtMS4yYzAuNywwLDEuNCwwLjUsMS40LDEuMnYxMS41bDIsMC40di00LjZjMC4xLTAuMSwwLjItMC4xLDAuMy0wLjJjMC43LDAsMS40''@;'; put 'put ''LDAuMSwyLjEsMC4ydjUuMWwxLjYsMC4zdi01LjJcbiAgICAgICAgICAgICAgICAgICAgbDEuMiwwLjNjMC41LDAuMSwxLDAuMywxLjUsMC41djVsMS42LDAuM3YtNC42YzAuOSwwLjQsMS43LDEsMi40LDEuN0wyOC43LDI0eiIvPicpLGwuQ2xyU2hhcGVSZXNpemU9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSw0YTEsMSwwLDAsMCwwLDJoOS41OWwtOS4yNSw5LjI1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzAsNy40MVYxN2ExLDEsMCwwLDAsMiwwVjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwxLDIsMHY5LjU5bDkuMjUtOS4yNWExLDEsMCwxLDEsMS40MSwxLjQxTDcuNDEsMzBIMTdhMSwxLDAsMCwxLDAsMkg0WiIvPicpLGwuQ2xyU2hhcGVPYmplY3RzPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMDgsMTQuOWExMC40MSwxMC40MSwwLDAsMSwxLjg3LS43MWwtNC0xMC43N2EyLDIsMCwwLDAtMy43NSwwTDIsMjUuMjZBMiwyLDAsMCwwLDMuOTIsMjhoNi45NGExMCwxMCwwLDAsMS0uNTIt''@;'; put 'put ''MkgzLjkyTDEyLjA2LDQuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDlIMjJhMiwyLDAsMCwwLTIsMnYyLjg1Yy4yMywwLC40NiwwLC42OSwwQTEwLjUxLDEwLjUxLDAsMCwxLDIyLDEzLjlWMTFIMzJW''@;'; put 'put ''MjFIMzAuNjVhMTAuNDIsMTAuNDIsMCwwLDEsLjQ1LDJIMzJhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzIsOVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjAuNjksMTUuODFhOC41LDguNSwwLDEsMCw4''@;'; put 'put ''LjUsOC41QTguNTEsOC41MSwwLDAsMCwyMC42OSwxNS44MVptMCwxNWE2LjUsNi41LDAsMSwxLDYuNS02LjVBNi41MSw2LjUxLDAsMCwxLDIwLjY5LDMwLjgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLjY1LDI0''@;'; put 'put ''LjQ0YTkuNTEsOS41MSwwLDAsMSw3LjA2LTkuMTdMMTMsM2ExLDEsMCwwLDAtMS44NywwTDIuMDcsMjYuNTZBMSwxLDAsMCwwLDMsMjcuOTJoOC4zMkE5LjQ0LDkuNDQsMCwwLDEsMTAuNjUsMjQuNDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIiBkPSJNMzIsMTBIMjBhMSwxLDAsMCwwLTEsMXY0YTkuNDMsOS40MywwLDAsMSwxMC42Myw5SDMyYTEsMSwwLDAsMCwxLTFWMTFBMSwxLDAsMCwwLDMyLDEwWiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBj''@;'; put 'put ''eD0iMjAuMTUiIGN5PSIyNC40NCIgcj0iNy41Ii8+JyksbC5DbHJTaGFwZUJvb2s9KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjEwIiB5PSI1LjIiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxLjU1Ii8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMCwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEs''@;'; put 'put ''MSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFpNMjgsMzJIOS44NkEyLDIsMCwwLDEsOCwzMFY5LjU1QTMuNjMsMy42MywwLDAsMCw5Ljg2LDEwSDI4WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOSw4''@;'; put 'put ''SDkuODZBMS44OSwxLjg5LDAsMCwxLDgsNiwyLDIsMCwwLDEsOS44Niw0SDI5YTEsMSwwLDEsMCwwLTJIOS44NkE0LDQsMCwwLDAsNiw2YTQuMTQsNC4xNCwwLDAsMCwwLC40OSwxLDEsMCwwLDAsMCwuMjRWMzBhNCw0LDAsMCwwLDMuODYsNEgyOWExLDEsMCwwLDAsMS0xVjkuMjVzMC0uMDYs''@;'; put 'put ''MC0uMDksMC0uMDYsMC0uMDlBMS4wNywxLjA3LDAsMCwwLDI5LDhaIi8+JyksbC5DbHJTaGFwZUFzdGVyaXNrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZh''@;'; put 'put ''My4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCwwLTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1LDIuOTFMNy4yLDIwLjg2YTMuMTEsMy4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4x''@;'; put 'put ''NEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEzLDMsMCwxLDAsMy01LjE4Wk0yOC4yNCwyNGExLDEsMCwwLDEtMS4zNy4zNkwxOSwxOS43NVYyOWExLDEsMCwwLDEtMiwwVjE5Ljc1TDkuMTMsMjQuMzZhMSwxLDAsMCwxLTEt''@;'; put 'put ''MS43MkwxNiwxOGwtNy45LTQuNjRhMSwxLDAsMSwxLDEtMS43MkwxNywxNi4yNVY3YTEsMSwwLDAsMSwyLDB2OS4yNWw3Ljg3LTQuNjJhMSwxLDAsMCwxLDEsMS43MkwyMCwxOGw3LjksNC42NEExLDEsMCwwLDEsMjguMjQsMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguODksMjAuOTFsLTUtMi45MSw0Ljg3LTIuODZhMy4xMSwzLjExLDAsMCwwLDEuMTQtMS4wOCwzLDMsMCwwLDAtNC4wOS00LjE1TDIxLDEyLjc2VjdhMywzLDAsMCwwLTYsMHY1Ljc2TDEwLjE1LDkuOTFhMywzLDAsMSwwLTMsNS4xOGw1''@;'; put 'put ''LDIuOTFMNy4yLDIwLjg2YTMuMTEsMy4xMSwwLDAsMC0xLjE0LDEuMDgsMywzLDAsMCwwLDQuMDksNC4xNEwxNSwyMy4yNFYyOC45YTMsMywwLDAsMCwyLDIuOTRBMywzLDAsMCwwLDIxLDI5VjIzLjI0bDQuODUsMi44NWEzLDMsMCwxLDAsMy01LjE4WiIvPicpLGwuQ2xyU2hhcGVTY2lzc29y''@;'; put 'put ''cz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgIGQ9Ik0yNC4wNiwxOC4xOGw5LjYxLTguNzdhMSwxLDAsMCwwLS4wOS0xLjU1bC0yLjI0LTEuNmEzLjU3LDMuNTcsMCwwLDAtNC4yOC4xMkwxNS44''@;'; put 'put ''OCwxNS4zbC0zLjI2LTIuNTJhNS40NSw1LjQ1LDAsMSwwLTEsMS43N2wyLjYyLDJMMTAsMjBhNS40OCw1LjQ4LDAsMSwwLDEuNTksMS4yOUwyOC4zLDcuOTRhMS41NywxLjU3LDAsMCwxLDEuODgtLjA1bDEuMjMuODhMMjEuMSwxOC4xOWwxMC4zMSw5LjQtMS4yMy44OGExLjU3LDEuNTcsMCww''@;'; put 'put ''LDEtMS44OC0uMDVsLTkuODEtNy44NUwxNywyMS45M2wxMC4wNiw4YTMuNTcsMy41NywwLDAsMCw0LjI5LjEybDIuMjQtMS42YTEsMSwwLDAsMCwuMDktMS41NVpNNy40NSwxNC41NGEzLjQ2LDMuNDYsMCwxLDEsMy40NS0zLjQ2QTMuNDYsMy40NiwwLDAsMSw3LjQ1LDE0LjU0Wm0wLDEzLjcy''@;'; put 'put ''QTMuNDYsMy40NiwwLDEsMSwxMC45LDI0LjgsMy40NiwzLjQ2LDAsMCwxLDcuNDUsMjguMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuODEsOC4xMywzMS42Myw2LjQ4YTEuOTIsMS45MiwwLDAsMC0yLjM2LDBM''@;'; put 'put ''MTAsMjIuMDZhNS40Niw1LjQ2LDAsMSwwLDIsMS44MWwzLjktMy4xMkwyOS4yNywzMS41MmExLjkyLDEuOTIsMCwwLDAsMi4zNiwwbDIuMTgtMS42NEwyMC45NCwxOVpNNy40NSwyOS43NWEyLjg2LDIuODYsMCwxLDEsMi44Ni0yLjg2QTIuODcsMi44NywwLDAsMSw3LjQ1LDI5Ljc1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE0LjMsMTUuMjQsMTIsMTMuMzhhNS40Niw1LjQ2LDAsMSwwLTIsMS44MUwxMi4xNiwxN1ptLTYuODUtMmEyLjg2LDIuODYsMCwxLDEsMi44Ni0yLjg2QTIuODYsMi44NiwwLDAsMSw3''@;'; put 'put ''LjQ1LDEzLjIzWiIvPicpLGwuQ2xyU2hhcGVCdWc9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjIzLjU2IiBjeT0iMTcuNzQiIHI9IjEuOTUiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIyMi40MiIgY3k9IjI1Ljg4IiByPSIxLjU4Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTIuODYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgY3g9IjEzLjk5IiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzAuODMs''@;'; put 'put ''MjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjY0QTE3LjY1LDE3LjY1LDAsMCwxLDI3LDIwLjcyQzI3LDI3LDIzLjgsMzEuMjMsMTguOCwzMS42MlYxNUgxNy4yVjMxLjYyQzEyLjIyLDMxLjIxLDksMjcsOSwyMC43MmEx''@;'; put 'put ''Ny43NCwxNy43NCwwLDAsMSwxLjczLTcuMzRMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEu''@;'; put 'put ''MTJsMS44NC0xLjI5QTEwLjM4LDEwLjM4LDAsMCwwLDE4LDMzLjY2YTEwLjM4LDEwLjM4LDAsMCwwLDguMTQtMy44MUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgZD0iTTExLjUxLDUuMzZhMS42NywxLjY3LDAsMCwwLDEuMDctLjUxQTMuMjEsMy4yMSwwLDAsMSwxMy43Niw2YTE2LjM4LDE2LjM4LDAsMCwwLTIuNjUsMi44OSwyLDIsMCwwLDAsMS42MSwzLjE5''@;'; put 'put ''SDIzLjMyQTIsMiwwLDAsMCwyNS4xLDExYTIsMiwwLDAsMC0uMTctMi4xQTE2LjM0LDE2LjM0LDAsMCwwLDIyLjI1LDZhMy4yMSwzLjIxLDAsMCwxLDEuMTctMS4xMUExLjY4LDEuNjgsMCwxLDAsMjMsMy4yNyw0Ljc3LDQuNzcsMCwwLDAsMjEsNWE1LjgxLDUuODEsMCwwLDAtMi45My0xLDUu''@;'; put 'put ''ODMsNS44MywwLDAsMC0zLDFBNC43Nyw0Ljc3LDAsMCwwLDEzLDMuMjdhMS42OCwxLjY4LDAsMSwwLTEuNDksMi4wOVpNMTgsNi4wN2MxLjQ1LDAsMy41MywxLjU3LDUuMzEsNGgwbC0xMC42LDBDMTQuNDksNy42MywxNi41Niw2LjA3LDE4LDYuMDdaIi8+XG4gICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODMsMjBIMjlhMTkuMjksMTkuMjksMCwwLDAtMS4xOC01LjczbDEuNDYtLjc5YTEsMSwwLDAsMC0uOTUtMS43NmwtMywxLjI4SDEwLjc4TDcuNywxMS43MmExLDEsMCwwLDAtLjk1LDEuNzZsMS41LjhBMTkuMzgs''@;'; put 'put ''MTkuMzgsMCwwLDAsNy4wNywyMEg1LjE3YTEsMSwwLDAsMCwwLDJINy4xYTE0LjYyLDE0LjYyLDAsMCwwLDEuNjYsNi4xN0w2Ljg3LDI5LjQ5QTEsMSwwLDEsMCw4LDMxLjEybDEuODQtMS4yOUExMC4yOSwxMC4yOSwwLDAsMCwxNywzMy42VjE1aDJWMzMuNmExMC4yOSwxMC4yOSwwLDAsMCw3''@;'; put 'put ''LjE2LTMuNzVMMjgsMzEuMTJhMSwxLDAsMSwwLDEuMTUtMS42NGwtMS44Ni0xLjNBMTQuNjEsMTQuNjEsMCwwLDAsMjguOTQsMjJoMS44OWExLDEsMCwwLDAsMC0yWk0xMC45MSwxNy43NGExLjk1LDEuOTUsMCwxLDEsMS45NSwxLjk1QTEuOTUsMS45NSwwLDAsMSwxMC45MSwxNy43NFpNMTQs''@;'; put 'put ''MjcuNDZhMS41OCwxLjU4LDAsMSwxLDEuNTgtMS41OEExLjU4LDEuNTgsMCwwLDEsMTQsMjcuNDZabTguNDMsMEExLjU4LDEuNTgsMCwxLDEsMjQsMjUuODgsMS41OCwxLjU4LDAsMCwxLDIyLjQyLDI3LjQ2Wm0xLjEzLTcuNzdhMS45NSwxLjk1LDAsMSwxLDEuOTUtMS45NUExLjk1LDEuOTUs''@;'; put 'put ''MCwwLDEsMjMuNTYsMTkuNjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuMjMsNS4yNmExLjY3LDEuNjcsMCwwLDAsLjU0LS4zMiw1LjksNS45LDAsMCwxLC44OS41OCw3LjQ0LDcuNDQsMCwwLDEsLjk1Ljk0QTE4''@;'; put 'put ''LjQ4LDE4LjQ4LDAsMCwwLDEwLjc5LDkuN2MtLjQuNTcuMDksMS4yOC44NiwxLjI4SDI0LjQ0Yy43NywwLDEuMjYtLjcxLjg2LTEuMjhhMTguMzgsMTguMzgsMCwwLDAtMi44OC0zLjI4LDcuMjgsNy4yOCwwLDAsMSwuOTEtLjksNS45LDUuOSwwLDAsMSwuODktLjU4LDEuNjksMS42OSwwLDEs''@;'; put 'put ''MC0uNTYtMS41MSw3LjQ5LDcuNDksMCwwLDAtMS4zMi44Myw5LjA2LDkuMDYsMCwwLDAtMS4xOSwxLjE4QTUuODUsNS44NSwwLDAsMCwxOCw0LjNhNS45MSw1LjkxLDAsMCwwLTMuMTcsMS4xOSw5LjIsOS4yLDAsMCwwLTEuMjItMS4yMSw3LjQ5LDcuNDksMCwwLDAtMS4zMi0uODMsMS42OCwx''@;'; put 'put ''LjY4LDAsMSwwLTEuMTEsMS44M1oiLz4nKSxsLkNsclNoYXBlVGhlcm1vbWV0ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOSwyMy4xN1YxMS40NkgxN1YyMy4yYTMsMywwLDEsMCwyLDBaIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTFIMjZhMSwxLDAsMCwwLDAtMkgyMy45MlY4YTYsNiwwLDAsMC0xMiwwVjIwLjgxYTgsOCwwLDEsMCwxMi0uMlYxOUgyNmExLDEsMCww''@;'; put 'put ''LDAsMC0ySDIzLjkyVjE1Wk0yNCwyNmE2LDYsMCwxLDEtMTAuMzYtNC4xMmwuMjctLjI5VjhhNCw0LDAsMCwxLDgsMFYyMS40NGwuMy4yOUE2LDYsMCwwLDEsMjQsMjZaIi8+JyksbC5DbHJTaGFwZVBlbmNpbD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjg3LDguMzIsMjgsMi40MmEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDQuMjcsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLjA5LDMyLDMzLjg3LDExLjI0QTIuMDcsMi4wNywwLDAs''@;'; put 'put ''MCwzMy44Nyw4LjMyWk0xMi4wOSwzMC4yLDQuMzIsMzEuODNsMS43Ny03LjYyTDIxLjY2LDguN2w2LDZaTTI5LDEzLjI1bC02LTYsMy40OC0zLjQ2LDUuOSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik00LjIy''@;'; put 'put ''LDIzLjJsLTEuOSw4LjJhMi4wNiwyLjA2LDAsMCwwLDIsMi41LDIuMTQsMi4xNCwwLDAsMCwuNDMsMEwxMywzMiwyOC44NCwxNi4yMiwyMCw3LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjgyLDguMzJs''@;'; put 'put ''LTUuOS01LjlhMi4wNywyLjA3LDAsMCwwLTIuOTIsMEwyMS43Miw1LjdsOC44Myw4LjgzLDMuMjgtMy4yOEEyLjA3LDIuMDcsMCwwLDAsMzMuODIsOC4zMloiLz4nKSxsLkNsclNoYXBlTm90ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiww''@;'; put 'put ''LDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwxLjYxLDAsMCwwLTIuMjgs''@;'; put 'put ''MEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2LDI2LjMyLDYuODdsMi44''@;'; put 'put ''MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2''@;'; put 'put ''QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMtM0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUsOS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4y''@;'; put 'put ''MywzLjIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlUmVmcmVzaD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIyLjQsMTEuNjVhMS4wOSwxLjA5LDAs''@;'; put 'put ''MCwwLDEuMDksMS4wOUgzNC40M1YxLjgxYTEuMDksMS4wOSwwLDEsMC0yLjE5LDBWOC45NWExNi40MSwxNi40MSwwLDEsMCwxLjQ3LDE1Ljg2LDEuMTIsMS4xMiwwLDAsMC0yLjA1LS45LDE0LjE4LDE0LjE4LDAsMSwxLTEuMDUtMTMuMzZIMjMuNUExLjA5LDEuMDksMCwwLDAsMjIuNCwxMS42''@;'; put 'put ''NVoiLz4nKSxsLkNsclNoYXBlU3luYz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjg0LDE1LjcyYTEsMSwwLDEsMC0yLC4yOUExMy4xNSwxMy4xNSwwLDAsMSwzMSwxNy45NCwxMywxMywwLDAsMSw4Ljcs''@;'; put 'put ''MjdoNS4zNmExLDEsMCwwLDAsMC0yaC05djlhMSwxLDAsMSwwLDIsMFYyOC4yQTE1LDE1LDAsMCwwLDMyLjg0LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuMDYsMUExLjA1LDEuMDUsMCww''@;'; put 'put ''LDAsMjksMlY3LjgzQTE0Ljk0LDE0Ljk0LDAsMCwwLDMsMTcuOTRhMTUuMTYsMTUuMTYsMCwwLDAsLjIsMi40OCwxLDEsMCwwLDAsMSwuODRoLjE2YTEsMSwwLDAsMCwuODItMS4xNUExMy4yMywxMy4yMywwLDAsMSw1LDE3Ljk0YTEzLDEzLDAsMCwxLDEzLTEzQTEyLjg3LDEyLjg3LDAsMCwx''@;'; put 'put ''LDI3LjQ0LDlIMjIuMDZhMSwxLDAsMCwwLDAsMkgzMVYyQTEsMSwwLDAsMCwzMC4wNiwxWiIvPicpLGwuQ2xyU2hhcGVWaWV3TGlzdD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMiIgeT0iOCIgd2lkdGg9IjIi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNywxMEgzMWExLDEsMCwwLDAsMC0ySDdhMSwxLDAsMCwwLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMxLDE0SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCww''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIyIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiBkPSJNMzEsMjBIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjIiIHk9IjI2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIGQ9Ik0zMSwyNkg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz4nKSxsLkNsclNoYXBlVmlld0NhcmRzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTdIMjFhMiwyLDAsMCwxLTItMlY4YTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwxN1pNMjEsOHY3SDMyVjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz4nKSxsLkNsclNoYXBlTGlnaHRidWxiPSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyLjI1YTExLDExLDAsMCwwLTExLDExLDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0aDJBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTgu''@;'; put 'put ''NDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yM2E5LDksMCwwLDEsMTguMDcsMEE4LjY0LDguNjQsMCwwLDEsMjYuMjEsMTdhMTUuNzksMTUuNzksMCwwLDEtMSwxLjU0QTE4LjQ2LDE4LjQ2LDAsMCwwLDIzLDIyLjQ0YTE4''@;'; put 'put ''LjE3LDE4LjE3LDAsMCwwLS43MSw0LjcxaDJhMTYuMTksMTYuMTksMCwwLDEsLjU5LTQsMTcsMTcsMCwwLDEsMi0zLjQ3QTE2LjMxLDE2LjMxLDAsMCwwLDI4LDE3Ljg2YTEwLjY4LDEwLjY4LDAsMCwwLDEtNC42M0ExMSwxMSwwLDAsMCwxOCwyLjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC42MywxNS41MWEuOC44LDAsMCwwLTEuMTMsMGwtMywzLDIuODYsMy4xM3Y1LjU0SDE5VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5QS44LjgsMCwwLDAsMTguNjMsMTUuNTFaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy4zMiwxMC44OWwtMi43MywyLjczYS44LjgsMCww''@;'; put 'put ''LDAsMS4xMywxLjEzTDE4LjQ1LDEyYS44LjgsMCwxLDAtMS4xMy0xLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyNy4xNVYyMWwtMi4yNC0yLjQ1LDEuODktMS44OWEuOC44LDAsMCwwLTEuMTMtMS4x''@;'; put 'put ''M2wtMywzLDIuODYsMy4xM3Y1LjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNzIsMTQuNzUsMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTIuNzMsMi43M2EuOC44LDAsMCwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEyLjg4YzAsLjEyLDAsLjIzLDAsLjM1QTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTgu''@;'; put 'put ''MTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNDUsNy40NSwwLDAsMSwyNywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDI3LjE1QTE4LjE3LDE4LjE3LDAsMCwwLDEzLDIyLjQ0YTE4LjQ2LDE4LjQ2LDAsMCwwLTIuMjItMy45MiwxNS43OSwxNS43OSwwLDAsMS0xLTEuNTRBOC42NCw4LjY0LDAs''@;'; put 'put ''MCwxLDksMTMuMjMsOSw5LDAsMCwxLDIyLjUzLDUuNDdhNy40NSw3LjQ1LDAsMCwxLC40My0yLDExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwu''@;'; put 'put ''NTksNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjIsMzIuMTVIMTRhLjguOCwwLDEsMCwwLDEuNkgyMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYz''@;'; put 'put ''LDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwxLjg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwu''@;'; put 'put ''NTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaTTE4LjQ1LDEybC0yLjczLDIuNzNhLjguOCwwLDEsMS0xLjEzLTEuMTNsMi43My0yLjczQS44LjgsMCwxLDEsMTguNDUs''@;'; put 'put ''MTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLjUsNkE3LjQ3LDcuNDcsMCwwLDEsMjMsMy40NGExMSwxMSwwLDAsMC0xNiw5LjgsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoNS42OVYyMS42''@;'; put 'put ''MWwtMi44Ni0zLjEzLDMtM2EuOC44LDAsMCwxLDEuMTMsMS4xM2wtMS44OSwxLjg5TDE5LDIxdjYuMTdIMjQuM2ExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjMsMTAuNjMsMCwwLDAsMS00LjQzQTcuNSw3''@;'; put 'put ''LjUsMCwwLDEsMjIuNSw2Wm0tNCw2LTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4''@;'; put 'put ''PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZURvd25sb2FkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0x''@;'; put 'put ''LjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWEx''@;'; put 'put ''LDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwy''@;'; put 'put ''NS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi''@;'; put 'put ''IGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEu''@;'; put 'put ''NDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLGwuQ2xyU2hhcGVVcGxvYWQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGExLDEsMCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEu''@;'; put 'put ''NDEtMS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMSwzMUg1Yy0wLjYsMC0xLDAuNC0xLDFzMC40LDEs''@;'; put 'put ''MSwxaDI2YzAuNiwwLDEtMC40LDEtMVMzMS42LDMxLDMxLDMxeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNOC44LDE1TDE3LDYuOHYyMC42YzAsMC42LDAuNCwxLDEsMXMx''@;'; put 'put ''LTAuNCwxLTFWNi44TDIwLjEsOGwxLTEuOEwxOCwzTDcuNCwxMy42QzcsMTQsNi45LDE0LjYsNy4yLDE1czEsMC41LDEuNCwwLjFDOC43LDE1LjEsOC44LDE1LjEsOC44LDE1eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0w''@;'; put 'put ''LjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEs''@;'; put 'put ''MCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTguODEsMTUsMTcsNi44M1YyNy40OGExLDEsMCwwLDAsMiwwVjYuODNMMjcuMTksMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MUwxOCwzLDcuMzksMTMuNjFBMSwxLDAsMSwwLDguODEsMTVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlTG9jaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjA5LDIwLjU5QTIuNDEsMi40MSwwLDAsMCwxNywyNS4xNFYyOGgyVjI1LjIzYTIuNDEsMi40MSwwLDAsMC0uOTEtNC42NFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDE1VjEwLjcyYTguMiw4LjIsMCwwLDAtOC04LjM2LDguMiw4LjIsMCwwLDAtOCw4LjM2VjE1SDdWMzJhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjE1Wk0x''@;'; put 'put ''MiwxMC43MmE2LjIsNi4yLDAsMCwxLDYtNi4zNiw2LjIsNi4yLDAsMCwxLDYsNi4zNlYxNUgxMlpNOSwzMlYxN0gyN1YzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAs''@;'; put 'put ''MC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTE5LDI1LjIzVjI4SDE3VjI1LjE0YTIuNCwyLjQsMCwxLDEsMiwuMDlaTTI0LDE1SDEyVjEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEs''@;'; put 'put ''Niw2LjM2WiIvPicpLGwuQ2xyU2hhcGVVbmxvY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMiwyNS4xNFYyOGgyVjI1LjIzYTIuNDIsMi40MiwwLDEsMC0yLS4wOVoiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYzMmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAuMzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2''@;'; put 'put ''LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2LDJaTTIyLDE3VjMySDRWMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LDJhOC4yLDguMiwwLDAsMC04LDguMzZWMTVIMlYz''@;'; put 'put ''MmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTVIMjBWMTAuMzZBNi4yLDYuMiwwLDAsMSwyNiw0YTYuMiw2LjIsMCwwLDEsNiw2LjM2djYuODNhMSwxLDAsMCwwLDIsMFYxMC4zNkE4LjIsOC4yLDAsMCwwLDI2LDJaTTE0LDI1LjIzVjI4SDEyVjI1LjE0YTIuNCwyLjQsMCwxLDEs''@;'; put 'put ''MiwuMDlaIi8+JyksbC5DbHJTaGFwZVVzZXJzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTcuOSwxNy4zYzIuNywwLDQuOC0yLjIsNC44LTQuOWMwLTIuNy0yLjItNC44LTQuOS00LjhjLTIuNywwLTQuOCwy''@;'; put 'put ''LjItNC44LDQuOEMxMywxNS4xLDE1LjIsMTcuMywxNy45LDE3LjN6IE0xNy44LDkuNkMxNy45LDkuNiwxNy45LDkuNiwxNy44LDkuNmMxLjYsMCwyLjksMS4zLDIuOSwyLjlzLTEuMywyLjgtMi45LDIuOGMtMS42LDAtMi44LTEuMy0yLjgtMi44QzE1LDEwLjksMTYuMyw5LjYsMTcuOCw5LjZ6''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi43LDE2LjdjLTEuOS0xLjctNC40LTIuNi03LTIuNWMtMC4zLDAtMC41LDAtMC44LDBjLTAuMiwwLjgtMC41LDEuNS0wLjksMi4xYzAuNi0wLjEsMS4xLTAu''@;'; put 'put ''MSwxLjctMC4xYzEuOS0wLjEsMy44LDAuNSw1LjMsMS42VjI1aDJ2LThMMzIuNywxNi43eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjMuNCw3LjhjMC41LTEuMiwxLjktMS44LDMuMi0xLjNjMS4yLDAu''@;'; put 'put ''NSwxLjgsMS45LDEuMywzLjJjLTAuNCwwLjktMS4zLDEuNS0yLjIsMS41Yy0wLjIsMC0wLjUsMC0wLjctMC4xYzAuMSwwLjUsMC4xLDEsMC4xLDEuNGMwLDAuMiwwLDAuNCwwLDAuNmMwLjIsMCwwLjQsMC4xLDAuNiwwLjFjMi41LDAsNC41LTIsNC41LTQuNGMwLTIuNS0yLTQuNS00LjQtNC41''@;'; put 'put ''Yy0xLjYsMC0zLDAuOC0zLjgsMi4yQzIyLjUsNi44LDIzLDcuMiwyMy40LDcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTEyLDE2LjRjLTAuNC0wLjYtMC43LTEuMy0wLjktMi4xYy0wLjMsMC0wLjUs''@;'; put 'put ''MC0wLjgsMGMtMi42LTAuMS01LjEsMC44LTcsMi40TDMsMTd2OGgydi03LjJjMS42LTEuMSwzLjQtMS43LDUuMy0xLjZDMTAuOSwxNi4yLDExLjUsMTYuMywxMiwxNi40eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01''@;'; put 'put ''IiBkPSJNMTAuMywxMy4xYzAuMiwwLDAuNCwwLDAuNi0wLjFjMC0wLjIsMC0wLjQsMC0wLjZjMC0wLjUsMC0xLDAuMS0xLjRjLTAuMiwwLjEtMC41LDAuMS0wLjcsMC4xYy0xLjMsMC0yLjQtMS4xLTIuNC0yLjRjMC0xLjMsMS4xLTIuNCwyLjQtMi40YzEsMCwxLjksMC42LDIuMywxLjVjMC40''@;'; put 'put ''LTAuNSwxLTEsMS41LTEuNGMtMS4zLTIuMS00LTIuOC02LjEtMS41Yy0yLjEsMS4zLTIuOCw0LTEuNSw2LjFDNy4zLDEyLjMsOC43LDEzLjEsMTAuMywxMy4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJN''@;'; put 'put ''MjYuMSwyMi43bC0wLjItMC4zYy0yLTIuMi00LjgtMy41LTcuOC0zLjRjLTMtMC4xLTUuOSwxLjItNy45LDMuNEwxMCwyMi43djcuNmMwLDAuOSwwLjcsMS43LDEuNywxLjdjMCwwLDAsMCwwLDBoMTIuOGMwLjksMCwxLjctMC44LDEuNy0xLjdjMCwwLDAsMCwwLDBWMjIuN3ogTTI0LjEsMzBI''@;'; put 'put ''MTJ2LTYuNmMxLjYtMS42LDMuOC0yLjQsNi4xLTIuNGMyLjItMC4xLDQuNCwwLjgsNiwyLjRWMzB6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4wOSwxNC41N2MuMSww''@;'; put 'put ''LC4yLDAsLjMxLDBhNi40Myw2LjQzLDAsMCwxLC4wOS0yLDIuMDksMi4wOSwwLDEsMSwxLjQ3LTMsNi41OCw2LjU4LDAsMCwxLDEuNTUtMS4zMSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTMsMTguMTRhNi41Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNywwLDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEu''@;'; put 'put ''MzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4x''@;'; put 'put ''LDE5LjczQTkuNjksOS42OSwwLDAsMCwxMSwyMi40N2wtLjI1LjI4djcuMzNhMS41NywxLjU3LDAsMCwwLDEuNjEsMS41NEgyMy44M2ExLjU3LDEuNTcsMCwwLDAsMS42MS0xLjU0VjIyLjczbC0uMjUtLjI4QTkuNTgsOS41OCwwLDAsMCwxOC4xLDE5LjczWm01LjMzLDkuODhIMTIuNzNWMjMu''@;'; put 'put ''NTVhOC4wOCw4LjA4LDAsMCwxLDUuMzctMS44Miw4LDgsMCwwLDEsNS4zMywxLjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0yMC4yOCwxNC4yN2EyLjQ2LDIuNDYsMCwx''@;'; put 'put ''LDEtMi40Mi0yLjg5LDIuNDQsMi40NCwwLDAsMSwxLC4yNCwzLjY3LDMuNjcsMCwwLDEsLjQzLTIsNC40MSw0LjQxLDAsMCwwLTEuNDgtLjI3QTQuNDcsNC40NywwLDEsMCwyMi4xNCwxNSwzLjY5LDMuNjksMCwwLDEsMjAuMjgsMTQuMjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNy4xOC44bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDM0YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4zOS44QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNy4xOC44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAs''@;'; put 'put ''MSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsMTguMTRhNi41''@;'; put 'put ''Myw2LjUzLDAsMCwxLTEuMjgtMi4ybC0uNjMsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2N2gyVjE5LjUxYTcsNywwLDAsMSw0LjY3LTEuNkE4LjA5LDguMDksMCwwLDEsMTMsMTguMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzEuMzUsMTguNDJBOC41OSw4LjU5LDAsMCwwLDI1LDE1LjkxYy0uMzIsMC0uNiwwLS45LjA2YTYuNTMsNi41MywwLDAsMS0xLjM1LDIuMjVBNy45LDcuOSwwLDAsMSwyNSwxNy45MWE2Ljk0LDYuOTQsMCwwLDEsNC42''@;'; put 'put ''NCwxLjU4djYuMjdoMlYxOC43WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTE3Ljg2LDE4LjNhNC40Nyw0LjQ3LDAsMSwwLTQuNDctNC40N0E0LjQ3LDQuNDcsMCwwLDAsMTcu''@;'; put 'put ''ODYsMTguM1ptMC02LjkzYTIuNDcsMi40NywwLDEsMS0yLjQ3LDIuNDdBMi40NywyLjQ3LDAsMCwxLDE3Ljg2LDExLjM3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjEs''@;'; put 'put ''MTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41''@;'; put 'put ''NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIGQ9Ik0yNi4zNywxMmEyLDIsMCwwLDEtMi4wOS40Miw2''@;'; put 'put ''LjUzLDYuNTMsMCwwLDEsLjE1LDEuMzgsNi41OSw2LjU5LDAsMCwxLDAsLjY4LDQsNCwwLDAsMCwuNTcuMDYsNC4wOCw0LjA4LDAsMCwwLDMuMy0xLjdBNy40NSw3LjQ1LDAsMCwxLDI2LjM3LDEyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgZD0iTTIyLjk1LDYuOTNhNC4xNiw0LjE2LDAsMCwwLTEuNDcsMS40NEE2LjU5LDYuNTksMCwwLDEsMjMsOS43N2EyLjEsMi4xLDAsMCwxLC41OS0uODNBNy40NCw3LjQ0LDAsMCwxLDIyLjk1LDYuOTNaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMC4zMyIgY3k9IjUuNjciIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wuNTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4''@;'; put 'put ''LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMu''@;'; put 'put ''NDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5QTQuMDksNC4wOSwwLDEsMCwyMS40Nyw4LDYu''@;'; put 'put ''NTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIGN4PSIxNy44NyIgY3k9IjEzLjQ1IiByPSI0LjQ3Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIzbC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRIMjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0xLjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEs''@;'; put 'put ''MjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTIsMTYuMTRxLS40MywwLS44NywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY4LjI4SDguNTR2LTQuN2wu''@;'; put 'put ''NTUtLjYyLjI1LS4yOWExMSwxMSwwLDAsMSw0LjcxLTIuODZBNi41OSw2LjU5LDAsMCwxLDEyLDE2LjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3''@;'; put 'put ''LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwxLTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTku''@;'; put 'put ''NTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0xNy44NywxNy45MmE0LjQ2LDQuNDYsMCwwLDAsNC0yLjU0QTMuNjcsMy42NywwLDAsMSwx''@;'; put 'put ''OSw5Ljg5bC4zNS0uNjFBNC40Miw0LjQyLDAsMCwwLDE3Ljg3LDlhNC40Nyw0LjQ3LDAsMSwwLDAsOC45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU4LDYuNTgsMCwwLDEsMTIsMTYuMTRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMS4zNCwxOC42M2E4LjY3LDguNjcsMCwwLDAtNi40My0yLjUyLDEwLjQ3LDEwLjQ3LDAsMCwwLTEuMDkuMDYsNi41OSw2LjU5LDAsMCwx''@;'; put 'put ''LTIsMi40NSwxMC45MSwxMC45MSwwLDAsMSw1LDNsLjI1LjI4LjU0LjYydjQuNzFoMy45NFYxOC45MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTTExLjEsMTQuMTljLjExLDAsLjIs''@;'; put 'put ''MCwuMzEsMGE2LjQ1LDYuNDUsMCwwLDEsMy4xMS02LjI5LDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUi''@;'; put 'put ''IHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIgZD0iTTE4LjExLDIwLjNBOS42OSw5LjY5LDAsMCwwLDExLDIzbC0uMjUuMjh2Ni4zM2ExLjU3LDEuNTcsMCwwLDAsMS42LDEuNTRI''@;'; put 'put ''MjMuODRhMS41NywxLjU3LDAsMCwwLDEuNi0xLjU0VjIzLjNMMjUuMiwyM0E5LjU4LDkuNTgsMCwwLDAsMTguMTEsMjAuM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIgZD0iTTI0LjQzLDEz''@;'; put 'put ''LjQ0YTYuNTQsNi41NCwwLDAsMSwwLC42OSw0LjA5LDQuMDksMCwwLDAsLjU4LjA1aC4xOWE0LjA1LDQuMDUsMCwwLDAsMi41Mi0xLDcuNSw3LjUsMCwwLDEtNS4xNC02LjMyQTQuMTMsNC4xMywwLDAsMCwyMS40Nyw4LDYuNTMsNi41MywwLDAsMSwyNC40MywxMy40NFoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksbC5DbHJTaGFwZVBvcE91dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LDMzSDVhMiwyLDAsMCwxLTItMlY5QTIsMiwwLDAsMSw1LDdIMTVWOUg1VjMxSDI3VjIxaDJWMzFBMiwyLDAsMCwxLDI3LDMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiBkPSJNMTgsM2ExLDEsMCwwLDAsMCwySDI5LjU5TDE1Ljc0LDE4Ljg1YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzEsNi40MVYxOGExLDEsMCwwLDAsMiwwVjNaIi8+JyksbC5DbHJTaGFwZUZpbHRlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDRIM0ExLDEsMCwwLDAsMiw1VjYuNjdhMS43OSwxLjc5LDAsMCwwLC41MywxLjI3TDE0LDE5LjU4djEwLjJsMiwuNzZWMTlhMSwxLDAsMCwwLS4yOS0uNzFMNCw2LjU5VjZIMzJ2LjYxTDIwLjMzLDE4LjI5QTEsMSwwLDAsMCwyMCwxOWww''@;'; put 'put ''LDEzLjIxTDIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEsMCwwLDAsMzQsNi43VjVBMSwxLDAsMCwwLDMzLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIyLDMzVjE5LjVMMzMuNDcsOEExLjgxLDEuODEs''@;'; put 'put ''MCwwLDAsMzQsNi43VjVhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMzMuNDgsNGgtMzFBLjUyLjUyLDAsMCwwLDIsNC41MlY2LjI0YTEuMzMsMS4z''@;'; put 'put ''MywwLDAsMCwuMzkuOTVsMTIsMTJ2MTBsNy4yNSwzLjYxVjE5LjE3bDEyLTEyQTEuMzUsMS4zNSwwLDAsMCwzNCw2LjI2VjQuNTJBLjUyLjUyLDAsMCwwLDMzLjQ4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVQaW49KDAsYS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxNi41OWExLDEsMCwwLDEtLjcxLS4yOUwxOS43LDMuNzFhMSwxLDAsMCwxLDEuNDEtMS40MUwzMy43MSwxNC44OUExLDEsMCwwLDEsMzMsMTYuNTlaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOC41MiwxNS41NmwtMS40MS0xLjQxLTcuMiw3LjJhMSwxLDAsMCwwLS4yNSwxLDksOSwwLDAsMS0xLjUzLDguMDlMNS41OCwxNy44N2E5LDksMCwwLDEsOC4wOS0xLjUzLDEsMSwwLDAs''@;'; put 'put ''MCwxLS4yNWw3LjItNy4yTDIwLjQ0LDcuNDhsLTYuNzksNi43OUExMC45NCwxMC45NCwwLDAsMCwzLjQxLDE3LjExYTEsMSwwLDAsMCwwLDEuNDJsNi4zMyw2LjMzTDIuMjksMzIuMjlhMSwxLDAsMSwwLDEuNDEsMS40MWw3LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGEx''@;'; put 'put ''LDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE2LjcxYTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy44MmExLDEsMCwwLDEsMS40MS0xLjQx''@;'; put 'put ''TDMzLjcxLDE1QTEsMSwwLDAsMSwzMywxNi43MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuNDQsNy41OWwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMjJhMSwxLDAsMCwwLDAsMS40''@;'; put 'put ''Mkw5LjczLDI1LDIuMjksMzIuNDFhMSwxLDAsMSwwLDEuNDEsMS40MWw3LjQ0LTcuNDQsNi4zMyw2LjMzYTEsMSwwLDAsMCwuNzEuMjloMGExLDEsMCwwLDAsLjcxLS4zLDExLDExLDAsMCwwLDIuODQtMTAuMjRsNi43OS02Ljc5WiIvPicpLGwuQ2xyU2hhcGVGaWxlPSgwLGEuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWm0tLjMs''@;'; put 'put ''Mi40OSw2LDUuOWgtNlpNOCwzMFY2SDIwdjhoOFYzMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yMS41OSwxMi4zOVY2LjQ5bDEuMDcsMWE3LjMxLDcuMzEsMCwwLDEsMC0y''@;'; put 'put ''LjgyTDIxLjg5LDRINy44M0ExLjg4LDEuODgsMCwwLDAsNiw1LjkxVjMwLjA5QTEuODgsMS44OCwwLDAsMCw3LjgzLDMySDI4LjE3QTEuODgsMS44OCwwLDAsMCwzMCwzMC4wOVYxMy41YTcuNDUsNy40NSwwLDAsMS0zLjkxLTEuMTFaTTI4LDMwSDhWNkgyMHY4aDhaIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI4LDE1LjRWMzBIOFY2SDIwVjguMjVsMi4yNS0zLjlMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjE1LjRa''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlB''@;'; put 'put ''MS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjExLjkyWk0yMSwxM1Y1Ljg0TDI4LjMsMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9''@;'; put 'put ''Ik0yNy4yNSwxM0gyMVY1Ljg0bDEuNjQsMS42YTcuMjUsNy4yNSwwLDAsMSwwLTIuNzRMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVBNy40Nyw3LjQ3LDAs''@;'; put 'put ''MCwxLDI3LjI1LDEzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMiwxNS40Yy0yLDAtMy43LTEuNi0zLjctMy42YzAtMC43LDAuMi0xLjMsMC41LTEuOWwzLjItNS41TDIxLjksNEg3LjhDNi44LDQsNiw0LjksNiw1Ljl2MjQuMmMwLDEsMC44LDEuOSwxLjgsMS45''@;'; put 'put ''aDIwLjNjMSwwLDEuOC0wLjksMS44LTEuOVYxNS40SDIyLjJ6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2LjksMS4xTDIxLjEsMTFjLTAuNCwwLjYtMC4y''@;'; put 'put ''LDEuNCwwLjMsMS44YzAuMiwwLjIsMC41LDAuMiwwLjgsMC4yaDExLjVjMC43LDAsMS4zLTAuNSwxLjMtMS4yYzAtMC4zLTAuMS0wLjUtMC4yLTAuOGwtNS43LTkuOWMtMC40LTAuNi0xLjEtMC44LTEuOC0wLjVDMjcuMSwwLjgsMjcsMSwyNi45LDEuMXoiLz4nKSxsLkNsclNoYXBlUGx1cz0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDE3SDE5VjZhMSwxLDAsMSwwLTIsMFYxN0g2YTEsMSwwLDAsMC0xLDEsLjkxLjkxLDAsMCwwLDEsLjk0SDE3VjMwYTEsMSwwLDEsMCwyLDBWMTlIMzBhMSwxLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMzAsMTdaIi8+JyksbC5DbHJTaGFwZU1pbnVzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNiwxN0gxMGExLDEsMCwwLDAsMCwySDI2YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlTWludXNDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDE3SDEyYTEsMSwwLDAsMCwwLDJIMjRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAs''@;'; put 'put ''MzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNiwxNy41SDEyYTEuNSwxLjUsMCwwLDEsMC0zSDI0YTEuNSwxLjUsMCwwLDEsMCwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlUGx1c0NpcmNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; put 'put ''PSJNMjYuMTcsMTdIMTlWOS44M2ExLDEsMCwwLDAtMiwwVjE3SDkuODNhMSwxLDAsMCwwLDAsMkgxN3Y3LjE3YTEsMSwwLDAsMCwyLDBWMTloNy4xN2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDE4QTE2''@;'; put 'put ''LDE2LDAsMSwxLDE4LDIsMTYsMTYsMCwwLDEsMzQsMThabS04LjQxLTEuNUgxOS41VjEwLjQxYTEuNSwxLjUsMCwwLDAtMywwVjE2LjVIMTAuNDFhMS41LDEuNSwwLDAsMCwwLDNIMTYuNXY2LjA5YTEuNSwxLjUsMCwwLDAsMywwVjE5LjVoNi4wOWExLjUsMS41LDAsMCwwLDAtM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxsLkNsclNoYXBlQmFuPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk00''@;'; put 'put ''LDE4QTEzLjkzLDEzLjkzLDAsMCwxLDcuNDMsOC44NUwyNy4xNSwyOC41N0ExNCwxNCwwLDAsMSw0LDE4Wm0yNC41Nyw5LjE1TDguODUsNy40M0ExNCwxNCwwLDAsMSwyOC41NywyNy4xNVoiLz4nKSxsLkNsclNoYXBlVGltZXNDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS42MSwxOGw0Ljg2LTQuODZhMSwxLDAsMCwwLTEuNDEtMS40MUwxOC4yLDE2LjU0bC00Ljg5LTQuODlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi43OCwxOCwxMiwyMi43MmExLDEsMCwxLDAsMS40MSwxLjQxbDQuNzct''@;'; put 'put ''NC43Nyw0Ljc0LDQuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAs''@;'; put 'put ''MSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOCwyMi4xYTEuNCwxLjQsMCwwLDEtMiwybC02''@;'; put 'put ''LTZMMTIsMjYuMTJhMS40LDEuNCwwLDEsMS0yLTJMMTYsMTguMDgsOS44MywxMS44NmExLjQsMS40LDAsMSwxLDItMkwxOCwxNi4xbDYuMTctNi4xN2ExLjQsMS40LDAsMSwxLDIsMkwyMCwxOC4wOFoiLz4nKSxsLkNsclNoYXBlVHJhc2g9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xNCwzNEg4Ljg2QTIuOTMsMi45MywwLDAsMSw2LDMxVjExLjIzSDhWMzFhLjkzLjkzLDAsMCwwLC44NiwxSDI3LjE0QS45My45MywwLDAsMCwyOCwzMVYxMS4yM2gyVjMxQTIuOTMsMi45MywwLDAsMSwyNy4xNCwz''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjc4LDlINUExLDEsMCwwLDEsNSw3SDMwLjc4YTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIxIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMTUiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMjMsNS44NkgyMS4xVjRIMTQuOVY1Ljg2SDEzVjRhMiwyLDAsMCwxLDEuOS0yaDYuMkEyLDIsMCwwLDEsMjMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNiw5VjMxYTIuOTMsMi45MywwLDAsMCwyLjg2LDNIMjcuMDlBMi45MywyLjkzLDAsMCwwLDMwLDMxVjlabTksMjBIMTNWMTRoMlptOCwwSDIxVjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjczLDVIMjNWNEEyLDIsMCwwLDAsMjEsMmgtNi4yQTIsMiwwLDAsMCwxMyw0VjVINUExLDEsMCwxLDAsNSw3SDMwLjczYTEsMSwwLDAsMCwwLTJaIi8+JyksbC5DbHJTaGFwZVRhZz0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xl''@;'; put 'put ''IGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEy''@;'; put 'put ''LDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjJsLTMuOC0zLjhIMjUuMzFsNS4yMiw1''@;'; put 'put ''LjIyLTkuOSw5LjlMNiwxNS45MVY2aDkuOTJsMy40MSwzLjQxLDEtMS43OC0zLTNBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4y''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFM''@;'; put 'put ''MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMC41MiIgY3k9IjEwLjUyIiByPSIxLjQz''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwx''@;'; put 'put ''LjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTIwLjYyLDMwLjUyLDYsMTUuOTFWNmg5LjkybDE0LjYsMTQuNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCww''@;'; put 'put ''LDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDku''@;'; put 'put ''NjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNDYsMTUuNzNIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDEwLjIybDEuNDMtMi40N0wxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiww''@;'; put 'put ''LDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45YTIsMiwwLDAsMCwwLTIuODNaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjQ3bC01LjcyLDkuOTFhMS4yOCwxLjI4LDAsMCwwLDEuMSwxLjkxSDMzLjY4YTEuMjgsMS4yOCwwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjQ3QTEuMjgs''@;'; put 'put ''MS4yOCwwLDAsMCwyNi44NSwxLjQ3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIs''@;'; put 'put ''MCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNi4zMyIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4n''@;'; put 'put ''KSxsLkNsclNoYXBlVGFncz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMs''@;'; put 'put ''MCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFB''@;'; put 'put ''MS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4z''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5''@;'; put 'put ''LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNMTcuMjYsMjkuNjksMy42OSwxNi4xNVY3aDkuMUwyNi4zNywyMC40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMzEuNzUsMjAuNDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5''@;'; put 'put ''LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjcuODEiIGN5PSIxMS4xNCIgcj0iMS4zMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywyNCwxNS40SDIyLjIzQTMuNjUsMy42NSwwLDAsMSwyMSwxNS4xOWw1LjMzLDUuMjktOS4xMSw5LjIxTDMuNjksMTYuMTVWN2g5LjFsNiw1Ljk0YTMuNjgsMy42OCwwLDAsMSwuMS0yLjY5TDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIu''@;'; put 'put ''ODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjgzLDYuOCwxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDE5Ljc5LDguNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs''@;'; put 'put ''NUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3''@;'; put 'put ''LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTku''@;'; put 'put ''MTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAs''@;'; put 'put ''MCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43''@;'; put 'put ''MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4''@;'; put 'put ''LjIxLDVIMTYuMTJMMzEuNzUsMjAuNDUsMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVI''@;'; put 'put ''MTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjE2LDE5LjEzLDI5LjQzLDE1LjRIMjYuNjVsNS4xLDVMMjEuMjIsMzEuMDdhMS45MywxLjkzLDAsMCwwLDIu''@;'; put 'put ''NzMsMGw5LjIxLTkuMjFhMS45MywxLjkzLDAsMCwwLDAtMi43M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywyNCwxNS40SDIyLjIzYTMuNjcsMy42NywwLDAsMS0z''@;'; put 'put ''LjM2LTUuMTVMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwy''@;'; put 'put ''Ny43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEu''@;'; put 'put ''MTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1hbGVydCIvPicpLGwuQ2xyU2hhcGVIaXN0b3J5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCw5LjgzYTEsMSwwLDAsMC0xLDF2OC43Mmw1LjksNEExLDEsMCwwLDAsMjQsMjEuODhsLTUtMy4zOVYxMC44M0ExLDEsMCwwLDAsMTgsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNi4wOSwxNi4wOSwwLDAsMCw0LDEwLjI2VjUuMmExLDEsMCwwLDAtMiwwVjE0aDguOGExLDEsMCwwLDAsMC0ySDUuMzVBMTQsMTQsMCwxLDEsOC41OCwyOC4zNWExLDEsMCwwLDAtMS4zNSwx''@;'; put 'put ''LjQ4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLGwuQ2xyU2hhcGVDbG9jaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0''@;'; put 'put ''LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxOC40VjEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE3Ljk0QTkuOTQsOS45NCwwLDAsMSwyMy40MSw5LjU5bC44NS0xLjM2YTExLjU1LDExLjU1LDAsMSwwLTguNTMsMjFMMTYsMjcuN0ExMCwxMCwwLDAsMSw4LDE3Ljk0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQ0LDcuNDQsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45''@;'; put 'put ''Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNi4zOGExMS41NiwxMS41NiwwLDAsMC0yLjI3LDIyLjg5TDE2LDI3LjdhMTAsMTAsMCwxLDEsNy4zOS0xOC4xaDBhNy40''@;'; put 'put ''NSw3LjQ1LDAsMCwxLS43OC0yLjIzQTExLjQ1LDExLjQ1LDAsMCwwLDE4LDYuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguOTIsMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZsLTUtMy4zOVoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzloLTJBMTQsMTQsMCwxLDEsMjIuMDksNC42MWwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDhhOS44MSw5LjgxLDAsMCwxLDIsLjIzbC44NS0xLjQ2YTExLjU1LDExLjU1LDAsMSwwLTUuMTMsMjIuNTJMMTYsMjcuN0ExMCwxMCwwLDAs''@;'; put 'put ''MSwxOCw4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm02LjIsMjEuMThhMSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAsMSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaTTIzLjg1LDguMjNhMTEuMzksMTEuMzksMCwxLDAtOC41NCwyMC44M0wxNSwzMC42M2ExMywxMyww''@;'; put 'put ''LDEsMSw5LjctMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFBNy40OCw3LjQ4LDAsMCwxLDIyLjY4LDcuNjMsMTEuMjQsMTEuMjQsMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIu''@;'; put 'put ''NjksMjIuNDdMMTUsMzAuNjNBMTMsMTMsMCwwLDEsMTgsNWExMi44MSwxMi44MSwwLDAsMSw0LjUxLjgyLDcuNDYsNy40NiwwLDAsMSwuNjgtMi45NCwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaTTI0LjIsMjMuMThhMSwxLDAsMCwxLTEuMzkuMjhsLTUuOS00VjEwLjc1YTEsMSwwLDAs''@;'; put 'put ''MSwyLDBWMTguNGw1LDMuMzlBMSwxLDAsMCwxLDI0LjIsMjMuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjc3LDE1LjM5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NmMwLS4wOS0uMDktLjE4LS4xMy0uMjdWMTguNGw1LDMuMzlhMSwxLDAsMCwxLTEuMTEsMS42Nmwt''@;'; put 'put ''NS45LTRWMTAuNzVhMSwxLDAsMCwxLDEuOTEtLjQxQTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5TDIwLjc0LDdBMTEuMTksMTEuMTksMCwwLDAsMTgsNi42YTExLjM5LDExLjM5LDAsMCwwLTIuNjksMjIuNDdMMTUsMzAuNjNBMTMsMTMsMCwwLDEsMTgsNWExMi44LDEyLjgsMCwwLDEsMy41Ny41''@;'; put 'put ''MWwxLjUzLTIuNjZBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMzMuNzcsMTUuMzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksbC5D''@;'; put 'put ''bHJTaGFwZUFsYXJtQ2xvY2s9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40LDQuMDlBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4''@;'; put 'put ''LDI3Ljc4QTE0LDE0LDAsMCwwLDE2LjQsNC4wOVpNMTkuNTgsMjkuOUExMiwxMiwwLDEsMSwyOS45MiwxOS41NiwxMiwxMiwwLDAsMSwxOS41OCwyOS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC45Miwy''@;'; put 'put ''MC4zNGwtNi4wNi0zVjkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42''@;'; put 'put ''NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguODYsOS41YS45LjksMCww''@;'; put 'put ''LDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYybC02LjA2LTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCwwLDMx''@;'; put 'put ''Ljc3LDE1LjRoLTJhMTIuMDcsMTIuMDcsMCwxLDEtOC42Ny05bDEtMS44YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx''@;'; put 'put ''LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQx''@;'; put 'put ''LDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4QTEzLjg4LDEzLjg4LDAsMCww''@;'; put 'put ''LDMxLjc3LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2TDE5LDEzLjR2My43OEwyNSwyMC4xYTEsMSwwLDEsMS0uODcsMS44TDE3LDE4LjQ0VjkuNjlhMSwxLDAsMCwxLDIsMFYxMEwxOSw5Ljg5bDMtNS4yOGExNCwxNCwwLDAsMC0xNCwyMy4yN0w1LjU2LDMwLjQzQTEsMSww''@;'; put 'put ''LDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzlBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMw''@;'; put 'put ''LjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWm0tMi41Mi02LjM1YTEsMSwwLDAsMS0xLjMzLjQ3TDE3LDE4LjQ0VjkuNjlhMSwxLDAsMCwxLDIsMHY3LjVMMjUsMjAuMUExLDEsMCww''@;'; put 'put ''LDEsMjUuNDksMjEuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDI3Ljc4YTEzLjg5LDEzLjg5LDAsMCwwLDMuMjEtMTQuMzksNyw3LDAsMCwxLTIuMTEuMDVBMTIsMTIsMCwxLDEsMjIuNTYsNi45LDcuNTQsNy41NCwwLDAsMSwyMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xMS0xLjIx''@;'; put 'put ''QTE0LDE0LDAsMCwwLDguMTEsMjcuODhMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40NywzLjg0''@;'; put 'put ''YTUuNzgsNS43OCwwLDAsMC03LjM3LS42MywxNi4wOCwxNi4wOCwwLDAsMSw4LjIsNy42NUE1LjczLDUuNzMsMCwwLDAsMzEuNDcsMy44NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43''@;'; put 'put ''NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDRBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1''@;'; put 'put ''LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxTDI4LDI3Ljc4QTE0LDE0LDAsMCwwLDE4LDRabTcuNDcsMTcuNDNhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWEx''@;'; put 'put ''LDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxsLkNsclNoYXBlQ2lyY2xlQXJyb3c9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgs''@;'; put 'put ''MTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMDgsOC4yNmwtNy42MSw3LjYxYTEsMSwwLDEsMCwxLjQx''@;'; put 'put ''LDEuNDFMMTcsMTIuMTh2MTVhMSwxLDAsMCwwLDIsMFYxMmw1LjI4LDUuMjhhMSwxLDAsMSwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiww''@;'; put 'put ''LDAsMCwxOCwyWm04LDE1LjU3YTEuNDMsMS40MywwLDAsMS0yLDBMMTkuNCwxM1YyNy4xNGExLjQsMS40LDAsMCwxLTIuOCwwdi0xNGwtNC40Myw0LjQzYTEuNCwxLjQsMCwwLDEtMi0yTDE4LjA4LDcuNywyNiwxNS41OUExLjQsMS40LDAsMCwxLDI2LDE3LjU3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVDaGlsZEFycm93PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC44MiwxNS44YTEsMSwwLDAsMC0xLjQxLDAsMSwxLDAsMCwwLDAsMS40MUwyNy4yLDIxSDlWMy43OGExLDEsMCwxLDAtMiwwVjIxYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjcuMTVsLTMuNzQsMy43NWExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzMSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVDb3B5PSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yOS41LDdoLTE5QTEuNSwxLjUsMCwwLDAsOSw4LjV2MjRBMS41LDEuNSwwLDAsMCwxMC41LDM0aDE5QTEuNSwxLjUsMCwwLDAsMzEsMzIuNVY4LjVBMS41LDEuNSwwLDAsMCwyOS41LDdaTTI5LDMySDExVjlIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMuNUExLjUsMS41LDAsMCwwLDI0LjUsMkg1LjVBMS41LDEuNSwwLDAsMCw0LDMuNXYyNEExLjUsMS41LDAsMCwwLDUuNSwyOUg2VjRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTI3LDMuNTZBMS41NiwxLjU2LDAsMCwwLDI1LjQzLDJINS41N0ExLjU2LDEuNTYsMCwwLDAsNCwzLjU2VjI4LjQ0QTEuNTYsMS41NiwwLDAsMCw1LjU3LDMwaC41MlY0LjA3SDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iNiIgd2lkdGg9IjIzIiBoZWlnaHQ9IjI4IiByeD0iMS41IiByeT0iMS41IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksbC5DbHJTaGFwZUhlbHA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYs''@;'; put 'put ''MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMjksOC45MmE3LjM4LDcuMzgs''@;'; put 'put ''MCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEuOC44LDAsMCww''@;'; put 'put ''LS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NWMzLS40Miw1LjQzLTIsNS40My01LjI4di0uMDVDMjQuMTgsMTEuMTIsMjEuODQsOC45MiwxOC4yOSw4LjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljc4IiBjeT0iMjYuMiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xOCwxNC4xN3YtLjA1YzAtMy0yLjM0LTUuMi01Ljg4LTUuMmE3''@;'; put 'put ''LjM4LDcuMzgsMCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEtLjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEu''@;'; put 'put ''OC44LDAsMCwwLS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NUMyMS43NSwxOSwyNC4xOCwxNy40NSwyNC4xOCwxNC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQzLDcuNDMsMCwwLDEt''@;'; put 'put ''MS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40OSw3LjQ5LDAsMCwxLTkuOTMtOS45MywxNi4w''@;'; put 'put ''NiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNabS0xNS4zNCwxNWExLjY1LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0''@;'; put 'put ''LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4zMWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3''@;'; put 'put ''Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYuMjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i''@;'; put 'put ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptLS4yMiwyNS44NWExLjY1''@;'; put 'put ''LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5LDAsMCwxLDEuMTItMS4z''@;'; put 'put ''MWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMuNywwLDYuMjgsMi4zLDYu''@;'; put 'put ''MjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5DbHJTaGFwZUxvZ2luPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDEyYTIsMiwwLDAsMC0yLDJIMjhWMzBIMTJWMjAu''@;'; put 'put ''MkgxMFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjEyLDE4LjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFsNS43OS01''@;'; put 'put ''Ljc5TDE2LjU0LDguMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxOC41LDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxSDE4LjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw0SDEyYTIsMiwwLDAs''@;'; put 'put ''MC0yLDJ2N2g4LjVMMTUuMTIsOS43MWExLDEsMCwwLDEsMS40MS0xLjQxbDUuNzksNS43OS01Ljc5LDUuNzlhMSwxLDAsMCwxLTEuNDEtMS40MUwxOC41LDE1SDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxM0g0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlTG9nb3V0PSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik03LDZIMjN2OS44aDJWNmEyLDIsMCwwLDAtMi0ySDdBMiwyLDAsMCwwLDUsNlYzMGEyLDIsMCwwLDAsMiwySDIzYTIsMiwwLDAsMCwyLTJIN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgu''@;'; put 'put ''MTYsMTcuMjhhMSwxLDAsMCwwLTEuNDEsMS40MUwzMC4xMywyMkgxNS42M2ExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFoMTQuNWwtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTIzLDRIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMlYyNEgxNS42M2ExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLTFIMjVWNkEyLDIsMCwwLDAsMjMsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDI1djJoNS4xM2wtMy4zOCwzLjQ2YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjMuMDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''Ii8+JyksbC5DbHJTaGFwZVByaW50ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDlIMjdWNUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVYxM2EyLDIsMCwwLDEsMi0ySDI5YTIsMiwwLDAsMSwyLDJ2OUgyOS4wOFYyNEgzM1YxM0E0LDQsMCwwLDAsMjksOVpN''@;'; put 'put ''MjUsOUgxMVY3SDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEsMSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAsMCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxOEg4YTEs''@;'; put 'put ''MSwwLDAsMCwwLDJIOVYzMkgyN1YyMGgxYTEsMSwwLDAsMCwwLTJaTTI1LDMwSDExVjIwSDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzEgMTUuNCAzMSAyMi4w''@;'; put 'put ''OSAyOS4wOCAyMi4wOSAyOS4wOCAyNCAzMyAyNCAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNSwxM2EyLDIsMCwwLDEsMi0ySDE4LjY0QTMuNjUsMy42''@;'; put 'put ''NSwwLDAsMSwxOSw5Ljg5TDE5LjU0LDlIMTFWN2g5LjcxbDEuMTMtMkg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDYuOTJWMjIuMDlINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMy4wNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsMTIuODhhNy40''@;'; put 'put ''NSw3LjQ1LDAsMCwxLTIsLjU1djguNjZIMjkuMDhWMjRIMzNWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwy''@;'; put 'put ''LTJIMjQuNDJhNy41LDcuNSwwLDAsMS0xLjI3LTJIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDlIMjdW''@;'; put 'put ''NUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSwyNHY2SDExVjE5SDI1Wk0yNSw5SDExVjdIMjVabTQsNkgyN1YxM2gyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTUuNFpNMjUsMjR2NkgxMVYxOUgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjMsNy4zLDAsMCwxLTQsLjU1VjE1SDI3VjEzaC4zMmE3LjUyLDcuNTIsMCwwLDEtNC4xOC00SDExVjdIMjIuNTdhNy41Miw3''@;'; put 'put ''LjUyLDAsMCwxLS4wNy0xLDcuNTQsNy41NCwwLDAsMSwuMDctMUg5VjlIN2E0LDQsMCwwLDAtNCw0VjI0SDl2OEgyN1YyNGg2VjEzQzMzLDEzLDMzLDEyLjkzLDMzLDEyLjg4Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxsLkNsclNoYXBlV29ybGQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTI2LjU0LDE4YTE5LjM4LDE5LjM4LDAsMCwwLS40My00aDMuNmExMi4zLDEyLjMsMCwwLDAtLjY3LTEuNkgyNS42OUExOS43MiwxOS43MiwwLDAsMCwyMi44LDYuNTNhMTIuMywxMi4zLDAsMCwwLTIuNTUtLjc2LDE3LjgzLDE3LjgzLDAsMCwxLDMuODksNi41OUgxOC43NVY1LjZjLS4y''@;'; put 'put ''NSwwLS41MSwwLS43Nywwcy0uNDksMC0uNzMsMHY2Ljc3SDExLjg2YTE3LjgzLDE3LjgzLDAsMCwxLDMuOS02LjYsMTIuMjgsMTIuMjgsMCwwLDAtMi41NC43NSwxOS43MiwxOS43MiwwLDAsMC0yLjkxLDUuODVINi45NEExMi4zLDEyLjMsMCwwLDAsNi4yNiwxNEg5Ljg5YTE5LjM4LDE5LjM4''@;'; put 'put ''LDAsMCwwLS40Myw0LDE5LjY3LDE5LjY3LDAsMCwwLC41LDQuMzdINi40MkExMi4zNCwxMi4zNCwwLDAsMCw3LjE2LDI0aDMuMjNhMTkuMzIsMTkuMzIsMCwwLDAsMi42OSw1LjM2LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjEuNzlBMTcuOTEsMTcuOTEsMCwwLDEsMTIsMjRoNS4yNnY2LjM0Yy4y''@;'; put 'put ''NCwwLC40OSwwLC43Mywwcy41MSwwLC43NywwVjI0SDI0YTE3LjksMTcuOSwwLDAsMS0zLjcsNi4xNSwxMi4yOCwxMi4yOCwwLDAsMCwyLjYyLS44MUExOS4zMiwxOS4zMiwwLDAsMCwyNS42MSwyNGgzLjJhMTIuMzQsMTIuMzQsMCwwLDAsLjc0LTEuNkgyNkExOS42NywxOS42NywwLDAsMCwy''@;'; put 'put ''Ni41NCwxOFptLTkuMjksNC4zN0gxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNabTcuMjQsMEgxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4LDE4LjEyLDE4LjEyLDAsMCwxLDI0LjQ5LDIyLjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40Myw3LjQzLDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLjI1LDUuNzdhMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMs''@;'; put 'put ''MCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEy''@;'; put 'put ''LjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMu''@;'; put 'put ''Nyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2YTE5LjY3LDE5LjY3LDAsMCwwLC41LTQuMzcsMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42Yy0uMDYtLjE3LS4xMi0uMzMt''@;'; put 'put ''LjE5LS40OWE3LjQ1LDcuNDUsMCwwLDEtMy40Ny0xLjExaC0uMzZjMC0uMTEtLjA4LS4yMS0uMTEtLjMyYTcuNDgsNy40OCwwLDAsMS0zLjA2LTUuNjJBMTIuNDEsMTIuNDEsMCwwLDAsMjAuMjUsNS43N1ptLTMsMTYuNTlIMTEuNTFhMTcuNjksMTcuNjksMCwwLDEtLjA5LTguNGg1LjgzWk0y''@;'; put 'put ''NSwxOGExOC4xMiwxOC4xMiwwLDAsMS0uNTUsNC4zN0gxOC43NVYxNGg1LjgzQTE4LjIxLDE4LjIxLDAsMCwxLDI1LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9''@;'; put 'put ''IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUs''@;'; put 'put ''MjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguODUsMTMuNDV2OS40OGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCwwLDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMzAuMjIsMjQuNzFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIw''@;'; put 'put ''LjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEz''@;'; put 'put ''Ljk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0u''@;'; put 'put ''ODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWEyMC4xMywyMC4xMywwLDAsMC00LjM5LTcuNDRBMTMuODksMTMuODksMCwwLDEsMjMuNDMsNWEyMi4yNiwyMi4yNiwwLDAsMSwzLjI3LDYuNTloMy43N2Ex''@;'; put 'put ''My44OSwxMy44OSwwLDAsMSwuNzYsMS44MUgyNy4xN0EyMS44OCwyMS44OCwwLDAsMSwyNy42NiwxOGEyMi4yLDIyLjIsMCwwLDEtLjU3LDQuOTNoNEExMy45NCwxMy45NCwwLDAsMSwzMC4yMiwyNC43MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xMC4wNSwxOGEyMC40NiwyMC40NiwwLDAsMCwuNjIsNC45M2g2LjQ4VjEzLjQ1SDEwLjU4QTIwLjU1LDIwLjU1LDAsMCwwLDEwLjA1LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOC44NSwyMi45NGg2LjQ4QTIwLjQ2LDIwLjQ2LDAsMCwwLDI2LDE4YTIwLjU1LDIwLjU1LDAsMCwwLS41Mi00LjU1SDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45LjU4djBIMzFhNi43Nyw2Ljc3LDAsMCwxLTIuMDcsMGgtMS44QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0YTEzLjk0LDEzLjk0LDAsMCwxLS44MywxLjgxSDI2LjZhMjEuOCwy''@;'; put 'put ''MS44LDAsMCwxLTMsNiwxMy44NiwxMy44NiwwLDAsMS0zLC45MiwyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LTYuOTRIMTguODZ2Ny4xNWMtLjI5LDAtLjU3LDAtLjg2LDBzLS41NSwwLS44MywwVjI0LjcxSDExLjIyYTIwLjIxLDIwLjIxLDAsMCwwLDQuMTgsNi45NSwxMy44NiwxMy44NiwwLDAs''@;'; put 'put ''MS0yLjk0LS45LDIxLjgsMjEuOCwwLDAsMS0zLTYuMDVINS43OGExMy45NCwxMy45NCwwLDAsMS0uODMtMS44MWg0QTIyLjIsMjIuMiwwLDAsMSw4LjM3LDE4YTIxLjg4LDIxLjg4LDAsMCwxLC40OC00LjU1SDQuNzZhMTMuODgsMTMuODgsMCwwLDEsLjc2LTEuODFIOS4zM0EyMi4yNiwyMi4y''@;'; put 'put ''NiwwLDAsMSwxMi42MSw1YTEzLjg2LDEzLjg2LDAsMCwxLDIuODctLjg0LDIwLjEzLDIwLjEzLDAsMCwwLTQuNCw3LjQ1aDYuMDlWNGMuMjgsMCwuNTUsMCwuODMsMHMuNTgsMCwuODYsMHY3LjY0aDYuMDlsMC0uMTNhNy40Nyw3LjQ3LDAsMCwxLTIuMzYtNC43NiwyMC4zNywyMC4zNywwLDAs''@;'; put 'put ''MC0yLTIuNTUsMTQuMjMsMTQuMjMsMCwwLDEsMi4wNi41Niw3LjQ0LDcuNDQsMCwwLDEsLjU3LTEuODYsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxsLkNsclNoYXBlU2xpZGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMiwxMi4zN0E0LDQsMCwwLDAsOSw4LjQ4''@;'; put 'put ''VjVBMSwxLDAsMSwwLDcsNVY4LjQ4YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxNi4yNkE0LDQsMCwwLDAsMTIsMTIuMzdabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsOCwxNC40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxNS44M2E0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMHY2Ljk0YTQsNCwwLDAsMCwwLDcuNzhWMzFhMSwxLDAsMSwwLDIsMFYxOS43MkE0LDQsMCwwLDAsMzIsMTUuODNabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMjgsMTcu''@;'; put 'put ''ODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDI0LjVhNCw0LDAsMCwwLTMtMy44OVY1YTEsMSwwLDEsMC0yLDBWMjAuNjFhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjI4LjM5QTQsNCww''@;'; put 'put ''LDAsMCwyMiwyNC41Wm0tNCwyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDI2LjUzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDkuMjlWNUExLDEsMCwxLDAsNyw1VjkuM2EzLjIyLDMuMjIsMCwwLDAs''@;'; put 'put ''MCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTUuNDNBMy4yMiwzLjIyLDAsMCwwLDksOS4yOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwyMS40NVY1YTEsMSwwLDEsMC0yLDBWMjEuNDdhMy4yMiwzLjIyLDAsMCww''@;'; put 'put ''LDAsNi4xMVYzMWExLDEsMCwxLDAsMiwwVjI3LjZhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwxMi43NVY1YTEsMSwwLDEsMC0yLDB2Ny43NmEzLjIyLDMuMjIsMCwwLDAs''@;'; put 'put ''MCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMTguODlhMy4yMiwzLjIyLDAsMCwwLDAtNi4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxsLkNsclNoYXBlQ2xpcGJvYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOS4yOSw1SDI3VjdoMlYzMkg3''@;'; put 'put ''VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI2LDcuMzNBMi4zNCwyLjM0LDAsMCwwLDIzLjY3LDVIMjEuODdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNlpNMjQsOUgxMlY3LjMzQS4zMy4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQs''@;'; put 'put ''MFY3aDMuNjdhLjMzLjMzLDAsMCwxLC4zMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE0IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI2IiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTgiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjIiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn''@;'; put 'put ''ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMTMsOUgxMlY3LjMzQS4z''@;'; put 'put ''My4zMywwLDAsMSwxMi4zMyw3SDE2VjZhMiwyLDAsMCwxLDQsMFY3aDIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMWgtLjdhNCw0LDAsMCwwLTcuNzUsMEgxMi4zM0EyLjM0LDIuMzQsMCwwLDAsMTAsNy4zM1YxMUgyNC40MkE3LjUsNy41LDAsMCwxLDIz''@;'; put 'put ''LjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFB''@;'; put 'put ''MS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTMuNDNBNy41Miw3LjUyLDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMjksNUgyMi4xN2E0LjQ1LDQuNDUsMCwwLDAtNC4xMS0zQTQuNDYsNC40''@;'; put 'put ''NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVY2LjY5QTEuNywxLjcsMCwwLDAsMjkuMjksNVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzFhMi4zMSwyLjMxLDAs''@;'; put 'put ''MSwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMXYySDExLjMxWk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTEuMzFWOGExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMi4xOWE3LjU0LDcuNTQsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uNGE0LjQ1LDQuNDUsMCwwLDAtNC4xMS0z''@;'; put 'put ''QTQuNDYsNC40NiwwLDAsMCwxNCw1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVpNMjUsMjhIMTFWMjZIMjVabTAtNEgxMVYyMkgyNVpt''@;'; put 'put ''MC00SDExVjE4SDI1Wm0wLTRIMTFWMTRIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVGaXJld2FsbD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTQsOEgzMnY1''@;'; put 'put ''LjA4SDIzLjh2LTRIMjJ2NEgxNHYtNEgxMnY0SDRabTAsN0gzMnY2LjA4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgxNFYyNC4yN2gtMS42VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2NS42OEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0VjE1SDIwLjU4YTMuNTgsMy41OCwwLDAsMS0xLjc2''@;'; put 'put ''LTEuOTJIMTR2LTRIMTJ2NEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTIzLjgsMjhWMjQuMjdIMjIuMlYyOEgxNFYyNC4yN2gtMS42VjI4SDRWMjNIMzJ2NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h''@;'; put 'put ''bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTIuNDUtLjQySDIzLjhWMTAuMjJhNy41LDcu''@;'; put 'put ''NSwwLDAsMS0uNjMtMS4xNEgyMnY0SDE0di00SDEydjRINFY4SDIyLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk00LDE1SDMydjYuMDhIMjguOTJW''@;'; put 'put ''MTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNabTAtOEg0VjEyaDhWOGgydjRoOFY4aDJ2NGg4WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEg0VjEyaDhWOGgydjRoNC41N0EzLjY3LDMuNjcsMCwwLDEsMTksOS44OUwyMS4yOSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwxMC40OVYxMmgxLjUxQTcuNTMsNy41MywwLDAsMSwyNCwxMC40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjE0SDRWMTJoOFY4aDJ2NGg4VjhoLjc4YTcuNDksNy40OSwwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMlpNMTQs''@;'; put 'put ''MjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi''@;'; put 'put ''ICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxsLkNsclNoYXBlTGlzdD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB4PSIxNSIgeT0iOCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE2IiB3aWR0''@;'; put 'put ''aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjAiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgy''@;'; put 'put ''OGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjEyIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyMCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI0IiB3aWR0aD0iOSIgaGVpZ2h0PSIy''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTYiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTUsOHYyaDguNjZhNy40NSw3LjQ1LDAsMCwxLS44OS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMkg4VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwx''@;'; put 'put ''LC44OC0ySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVabTAtNEgx''@;'; put 'put ''NVY4SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy42NiwxMEgxNVY4aDcuNzhhNy40Miw3LjQyLDAsMCwxLC44OS02SDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBaTTEzLDI2SDExVjI0aDJabTAtNEgxMVYyMGgyWm0wLTRIMTFWMTZoMlptMC00SDExVjEyaDJabTAtNEgxMVY4aDJaTTI1LDI2SDE1VjI0SDI1Wm0wLTRIMTVWMjBIMjVabTAtNEgxNVYxNkgyNVptMC00SDE1VjEySDI1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlUmVkbz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQsNC4yMmExLDEsMCwwLDAtMS40MSwxLjQybDUuNTYsNS40OWgtMTNBMTEsMTEsMCwwLDAsMTAuMDcsMzIsMSwxLDAsMCwwLDExLDMwLjE4YTksOSwwLDAsMS01LTgsOS4wOCw5LjA4LDAsMCwxLDkuMTMtOWgxM2wt''@;'; put 'put ''NS41NCw1LjQ4QTEsMSwwLDAsMCwyNCwyMGw4LTcuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlVW5kbz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODcsMTEuMTRoLTEzbDUuNTYtNS40OUExLDEsMCwwLDAsMTIs''@;'; put 'put ''NC4yMkw0LDEyLjEzLDEyLDIwYTEsMSwwLDAsMCwxLjQxLTEuNDJMNy44NiwxMy4xNGgxM2E5LjA4LDkuMDgsMCwwLDEsOS4xMyw5LDksOSwwLDAsMS01LDhBMSwxLDAsMCwwLDI1LjkzLDMyYTExLDExLDAsMCwwLTUuMDYtMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlU2Nyb2xsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUs''@;'; put 'put ''NC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0Wm0tNC41LTdBMi41LDIuNSwwLDAsMSwzMiw2''@;'; put 'put ''LjU4VjkuMTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjA4LDE1LjRWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40''@;'; put 'put ''NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0aDIuNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlsLjQ0LS43NkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41SDIyLjRsMS4xNS0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEs''@;'; put 'put ''MS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0''@;'; put 'put ''LjU0aDguNTRhNy41LDcuNSwwLDAsMS0xLjM1LTJIMThWNi41OGE0LjQ4LDQuNDgsMCwwLDAtLjc2LTIuNWg1LjUyYTcuNDQsNy40NCwwLDAsMSwuODYtMkgxMy41QTQuNSw0LjUsMCwwLDAsOSw2LjU4djIzYTIuNSwyLjUsMCwxLDEtNSwwVjI2SDcuMTlWMjRIMnY1LjVBNC41LDQuNSwwLDAs''@;'; put 'put ''MCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxMS4xMlY2LjU4YTQuNSw0LjUsMCwwLDAtNC41LTQuNWgtMTZBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2''@;'; put 'put ''LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjEzLjEzaC0yVjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWw0LjUxLTcuOEgx''@;'; put 'put ''My41QTQuNSw0LjUsMCwwLDAsOSw2LjU4VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTEuOTItLjI2djE2LjNhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUs''@;'; put 'put ''MHY0LjU0aDguNTRhNy40Niw3LjQ2LDAsMCwxLS45Mi05SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41di0xNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZUZpbGVTZXR0aW5ncz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43''@;'; put 'put ''NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx''@;'; put 'put ''LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x''@;'; put 'put ''NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y''@;'; put 'put ''OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx''@;'; put 'put ''LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx''@;'; put 'put ''LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy''@;'; put 'put ''QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYuNDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYsMCwwLDEsMjQuMTIsMjYuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjZ2Ny44OWEzLjIsMy4yLDAsMCwxLDIsMS43MlY1YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjEyLDIwLjM1YTQsNCwwLDEsMCw0LjA4LDRBNC4wNiw0LjA2LDAsMCwwLDI0LjEyLDIwLjM1Wm0wLDYuNDZhMi40MywyLjQzLDAsMSwxLDIuNDgtMi40M0EyLjQ2LDIuNDYs''@;'; put 'put ''MCwwLDEsMjQuMTIsMjYuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4''@;'; put 'put ''LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAs''@;'; put 'put ''MCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSww''@;'; put 'put ''LDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5''@;'; put 'put ''TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1''@;'; put 'put ''cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMu''@;'; put 'put ''NDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTgu''@;'; put 'put ''OSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwx''@;'; put 'put ''LjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNDksMzFINlY1SDIxLjg3TDIzLDNINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZh''@;'; put 'put ''Ny44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4x''@;'; put 'put ''NiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYs''@;'; put 'put ''MCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjls''@;'; put 'put ''MS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4x''@;'; put 'put ''OWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwx''@;'; put 'put ''OC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2''@;'; put 'put ''LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTYuMjNsLTEuMS0xLjA4QTMuMTEsMy4xMSwwLDAsMSwxNC40''@;'; put 'put ''OSwzMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zM1YxMi43MWE3LDcsMCwwLDEtMi0xdjEuODhBMy4yLDMuMiwwLDAsMSwyOCwxNS4zM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjZ2OC43OGEyLjM3LDIuMzcsMCwwLDEsMiwxLjU3VjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0xQTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwx''@;'; put 'put ''QTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3''@;'; put 'put ''LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCww''@;'; put 'put ''LDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCww''@;'; put 'put ''LC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYuNjksMThs''@;'; put 'put ''LS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40NGwtMiwu''@;'; put 'put ''NjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwyYS4zNy4z''@;'; put 'put ''NywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40NGwtMS0xLjg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzcu''@;'; put 'put ''MzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl''@;'; put 'put ''cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNy4xNmwtMS0xQTIuMzgsMi4zOCwwLDAsMSwxNS41NSwzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjU0LDIzLjQ3bC0yLS42MWE3LjA2LDcuMDYsMCwwLDAtLjU4LTEuNDFsMS0xLjg2YS4zNy4zNywwLDAsMC0uMDctLjQ0TDMwLjQxLDE3LjdhLjM3LjM3LDAsMCwwLS40NC0uMDdsLTEuODUsMUE3LDcsMCwwLDAsMjYu''@;'; put 'put ''NjksMThsLS42MS0yYS4zNy4zNywwLDAsMC0uMzYtLjI1aC0yYS4zNy4zNywwLDAsMC0uMzUuMjZsLS42MSwyYTcsNywwLDAsMC0xLjQ0LjYxbC0xLjgyLTFhLjM3LjM3LDAsMCwwLS40NC4wN2wtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyYTcsNywwLDAsMC0uNjEsMS40''@;'; put 'put ''NGwtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFhNyw3LDAsMCwwLC42MSwxLjQxbC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0TDE5LDMyYS4zNy4zNywwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDYsNy4wNiwwLDAsMCwxLjM5LjU3bC42MSwy''@;'; put 'put ''YS4zNy4zNywwLDAsMCwuMzUuMjZoMmEuMzcuMzcsMCwwLDAsLjM1LS4yNmwuNjEtMmE3LDcsMCwwLDAsMS4zOC0uNTdsMS44OSwxYS4zNy4zNywwLDAsMCwuNDQtLjA3bDEuNDUtMS40NWEuMzcuMzcsMCwwLDAsLjA3LS40NGwtMS0xLjg4YTcuMDYsNy4wNiwwLDAsMCwuNTgtMS4zOWwyLS42''@;'; put 'put ''MWEuMzcuMzcsMCwwLDAsLjI2LS4zNVYyMy44M0EuMzcuMzcsMCwwLDAsMzMuNTQsMjMuNDdaTTI0LjcsMjguMTlBMy4zMywzLjMzLDAsMSwxLDI4LDI0Ljg2LDMuMzMsMy4zMywwLDAsMSwyNC43LDI4LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y''@;'; put 'put ''LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuNTUsMzFINlY1SDIzLjA4YTYuOTQsNi45NCwwLDAsMSwuNi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuMzZWMTIuNzFhNyw3LDAsMCwxLTItMXYyQTIuMzcsMi4zNywwLDAsMSwyOCwxNS4zNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''NC0tYmFkZ2VkIiAvPicpLGwuQ2xyU2hhcGVUd29XYXlBcnJvd3M9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIzLjQzLDE2LjgzQTEsMSwwLDAsMCwyMiwxOC4yNEwyNS43MiwyMkg3LjgzYTEsMSwwLDAsMCwwLDJIMjUuNzJMMjIsMjcuN2ExLDEsMCwxLDAsMS40MiwxLjQxTDI5LjUz''@;'; put 'put ''LDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjQsMTguNDVhMSwxLDAsMCwwLC43MS0xLjcxTDEwLjI0LDEzSDI4LjEyYTEsMSwwLDAsMCwwLTJIMTAuMjRsMy43MS0zLjczYTEsMSwwLDAsMC0xLjQy''@;'; put 'put ''LTEuNDFMNi40MiwxMmw2LjExLDYuMTRBMSwxLDAsMCwwLDEzLjI0LDE4LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZVN3aXRjaD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS43MSwxNEgyMC45MlYxMkg1LjcxTDku''@;'; put 'put ''NDIsOC4yN0ExLDEsMCwxLDAsOCw2Ljg2TDEuODksMTMsOCwxOS4xNGExLDEsMCwxLDAsMS40Mi0xLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMiIgd2lkdGg9IjMiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyOCIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI3LjkyLDE3Ljg2YTEsMSwwLDAsMC0xLjQyLDEuNDFMMzAuMjEsMjNIMTV2MkgzMC4yMUwyNi41LDI4Ljc0YTEsMSwwLDEsMCwxLjQyLDEuNEwzNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTAiIHk9''@;'; put 'put ''IjIzIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgLz4nKSxsLkNsclNoYXBlVG9vbHM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLDE0SDE2YTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxNUExLDEsMCwwLDAsMjAsMTRabS0uNCw2LjZIMTYuNFYxNS40aDMuMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCww''@;'; put 'put ''LS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEzLjA4QTEsMSwwLDAsMCwzMy43MSwxMi4zOFpNMTQsNmg4VjhIMTRaTTMyLDE3SDIydjEuOTNIMzJWMjhINFYxOC45M0gxNFYxN0g0VjEzLjVMNy41LDEwaDIxTDMy''@;'; put 'put ''LDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2LjQiIHk9IjE1LjQiIHdpZHRoPSIzLjIiIGhlaWdodD0iNS4yIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTIxLDIxYTEsMSwwLDAsMS0xLDFIMTZhMSwxLDAsMCwxLTEtMVYxOUgydjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5SDIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z''@;'; put 'put ''My43MSwxMi4zOCwyOS42Miw4LjI5QTEsMSwwLDAsMCwyOC45Miw4aC01VjYuMDVBMiwyLDAsMCwwLDIyLDRIMTMuODRBMS45MiwxLjkyLDAsMCwwLDEyLDYuMDVWOEg3LjA4YTEsMSwwLDAsMC0uNzEuMjlMMi4yOSwxMi4zOGExLDEsMCwwLDAtLjI5LjcxVjE3SDE1VjE1YTEsMSwwLDAsMSwx''@;'; put 'put ''LTFoNGExLDEsMCwwLDEsMSwxdjJIMzRWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0yMiw4SDE0VjZoOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZVdpbmRvd0Nsb3NlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40''@;'; put 'put ''MSwxOGw3LjI5LTcuMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSwxMC43MSw5LjI5YTEsMSwwLDAsMC0xLjQxLDEuNDFMMTYuNTksMTgsOS4yOSwyNS4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDcuMjksNy4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVdpbmRvd01heD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuODksOWgtMjBhMiwyLDAsMCwwLTIsMlYyNWEyLDIsMCwwLDAsMiwyaDIwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDI3Ljg5''@;'; put 'put ''LDlabS0yMCwxNlYxMWgyMFYyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVXaW5kb3dNaW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI3LDI3SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDhIMTRhMiwyLDAsMCwwLTIsMnYyaDJWMTBIMjhWMjBIMjZ2MmgyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDI4''@;'; put 'put ''LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwxNEg4YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgyMmEyLDIsMCwwLDAsMi0yVjE2QTIsMiwwLDAsMCwyMiwxNFpNOCwyNlYxNkgyMlYyNloi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVab29tSW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE2LDRBMTIsMTIsMCwxLDAsMjgsMTYsMTIsMTIsMCwwLDAsMTYsNFptMCwyMS45MUExMCwxMCwwLDEsMSwyNiwxNiwxMCwx''@;'; put 'put ''MCwwLDAsMSwxNiwyNS45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjcxLDI5LjY5bC01LjE3LTUuMTdBMTMuNjgsMTMuNjgsMCwwLDEsMjUuMTUsMjZsNS4xNSw1LjE1YTEsMSwwLDAsMCwxLjQxLTEu''@;'; put 'put ''NDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSwxNUgxN1YxMWExLDEsMCwwLDAtMiwwdjRIMTFhMSwxLDAsMCwwLDAsMmg0djRhMSwxLDAsMCwwLDIsMFYxN2g0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlWm9vbU91dD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwx''@;'; put 'put ''LDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIwLDE1SDEyYTEsMSwwLDAsMCwwLDJoOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZUtleT0oMCxhLmNsckljb25TVkcpKCc8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRM''@;'; put 'put ''MTgsMjYuNDhoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBs''@;'; put 'put ''NS4yNiw1LjI2YTMsMywwLDAsMSwwLDQuMjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0i''@;'; put 'put ''MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zNSwxNi44bC42My0uNjNhNSw1LDAsMCww''@;'; put 'put ''LC42My0uNzdIMjIuMjNsLS4yOSwwTDIwLjUyLDE2LjgsMzIsMjguMjhWMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTMtM0wxNCwyMy4zMWEzLDMsMCwwLDEtNC4yNCwwTDQuNSwxOGEzLDMsMCwwLDEsMC00LjI0bDguNTYtOC41NmEzLDMsMCwwLDEsNC4yNCwwTDIw''@;'; put 'put ''LjEsOC4wNmwxLTEuNzlMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0i''@;'; put 'put ''MSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M0E1LDUs''@;'; put 'put ''MCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQtLjRMMTgsMjYuNDhoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2''@;'; put 'put ''di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBsNS4yNiw1LjI2YTMsMywwLDAsMSwwLDQuMjRsLTIsMkwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEu''@;'; put 'put ''NjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMu''@;'; put 'put ''NDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNmE1LDUsMCwwLDAsLjYzLS43N0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEs''@;'; put 'put ''MTksOS44OWwyLjA5LTMuNjJMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcs''@;'; put 'put ''MTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIs''@;'; put 'put ''MjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzgsMTYuNzdsLjYtLjZBNSw1LDAsMCww''@;'; put 'put ''LDI0LDkuMUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEs''@;'; put 'put ''MCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''IC8+JyksbC5DbHJTaGFwZUxpYnJhcnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ4LDI5LjYzLDI2Ljc0LDExLjgyYTIsMiwwLDAsMC0yLjU4LTEuMTZMMjEsMTEuODVWOC45MkExLjkyLDEuOTIsMCwwLDAsMTkuMDgsN0gxNFY0LjkyQTEuOTIsMS45MiwwLDAsMCwxMi4wOCwz''@;'; put 'put ''SDVBMiwyLDAsMCwwLDMsNVYzMmExLDEsMCwwLDAsMSwxSDIwYTEsMSwwLDAsMCwxLTFWMTkuMjdsNSwxMy4yMWExLDEsMCwwLDAsMS4yOS41OGw1LjYxLTIuMTRhMSwxLDAsMCwwLC41OC0xLjI5Wk0xMiw4LjgzVjMxSDVWNWg3Wk0xOSwzMUgxNFY5aDVabTguNTEtLjI1TDIxLjEzLDEzLjky''@;'; put 'put ''bDMuNzQtMS40Miw2LjM5LDE2LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuNzUsM0g1LjI1QTEuMTUsMS4xNSwwLDAsMCw0LDRWMzNIMTRWNEExLjE1LDEuMTUsMCwwLDAsMTIuNzUsM1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMzEuMDlsLTYuOTQtMTguM2ExLDEsMCwwLDAtMS4yOS0uNThMMjIsMTMuNTlWOWExLDEsMCwwLDAtMS0xSDE2VjMzaDZWMTQuNjlMMjguOTMsMzNaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCb2x0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMC41MiwzNGgtM2ExLDEsMCwwLDEtLjg4LTEuNDRMMTIuNTUsMjFINmExLDEsMCwwLDEtLjg1LTEuNTRsMTAuNjgtMTdBMSwxLDAsMCwxLDE2LjY0LDJIMzAu''@;'; put 'put ''MDdhMSwxLDAsMCwxLC43NywxLjY5TDIxLjc4LDE0aDUuMzhhMSwxLDAsMCwxLC43MywxLjY2bC0xNi42MywxOEExLDEsMCwwLDEsMTAuNTIsMzRaTTkuMTgsMzJoLjkxTDI0Ljg2LDE2SDE5LjU5YTEsMSwwLDAsMS0uNzctMS42OUwyNy44OCw0SDE3LjE5TDcuNzcsMTlIMTQuMmExLDEsMCww''@;'; put 'put ''LDEsLjg4LDEuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC44LDIuMjlBLjQ5LjQ5LDAsMCwwLDMwLjM1LDJIMTYuNDJhLjUuNSwwLDAsMC0uNDIuMjNsLTEwLjcxLDE3QS40OS40OSwwLDAsMCw1Ljcs''@;'; put 'put ''MjBoNy42N0w2LjYsMzMuMjVhLjUyLjUyLDAsMCwwLC40Ni43NWgzYS41LjUsMCwwLDAsLjM3LS4xNkwyOCwxNC44NWEuNS41LDAsMCwwLS4zNy0uODVIMjAuODlMMzAuNzIsMi44MkEuNDkuNDksMCwwLDAsMzAuOCwyLjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz4nKSxsLkNsclNoYXBlV3JlbmNoPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xOCwyNi4xMSwyMC4zNSwxMy4yOEE5LjI4LDkuMjgsMCwwLDAsNy41NCwyLjc5bC0xLjM0LjU5LDUuMzgsNS4zOEw4Ljc2LDExLjU5LDMuMzgsNi4yMSwyLjc5LDcuNTRBOS4yNyw5LjI3LDAs''@;'; put 'put ''MCwwLDEzLjI4LDIwLjM1TDI2LjExLDMzLjE4YTIsMiwwLDAsMCwyLjgzLDBsNC4yNC00LjI0QTIsMiwwLDAsMCwzMy4xOCwyNi4xMVptLTUuNjYsNS42NkwxMy44OCwxOC4xMmwtLjU3LjE2YTcuMjcsNy4yNywwLDAsMS05LjMxLTcsNy4yLDcuMiwwLDAsMSwuMTUtMS40OGw0LjYxLDQuNjEs''@;'; put 'put ''NS42Ni01LjY2TDkuODEsNC4xNWE3LjI3LDcuMjcsMCwwLDEsOC40Nyw5LjE2bC0uMTYuNTdMMzEuNzcsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3LjEzIiBjeT0iMjcuMDkiIHI9IjEuMyIg''@;'; put 'put ''dHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTExLjIxIDI3LjEyKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzMsMjcuNzIsMTkuNjcsMTMuNjZhOC43OSw4Ljc5LDAsMCwwLTEyLTEwLjVM''@;'; put 'put ''MTMsOC41Myw4LjUzLDEzLDMuMTYsNy42N2E4Ljc5LDguNzksMCwwLDAsMTAuNSwxMkwyNy43MiwzMy43M2ExLjA3LDEuMDcsMCwwLDAsMS41LDBsNC41MS00LjUxQTEuMDcsMS4wNywwLDAsMCwzMy43MywyNy43MlpNMjksMjlhMS4zOCwxLjM4LDAsMSwxLDAtMkExLjM4LDEuMzgsMCwwLDEs''@;'; put 'put ''MjksMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVCdWxsc2V5ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1LjU5bC43NywxLjg2YTE0LjA3LDE0LjA3LDAsMSwxLTEwLDEwbC0x''@;'; put 'put ''Ljg2LS43OEExNiwxNiwwLDEsMCwxOCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNy40NSwxNS43YTEwLjgxLDEwLjgxLDAsMSwwLDguMy04LjI2TDE2LjM3LDlBOS4yNCw5LjI0LDAsMSwxLDksMTYuMzJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMi4wOWE0LjA4LDQuMDgsMCwwLDEtNC0zLjY4bC0xLjYzLS42OGMwLC4wOSwwLC4xOCwwLC4yN0E1LjY5LDUuNjksMCwxLDAsMTgsMTIuMzFoLS4yNEwxOC40''@;'; put 'put ''MywxNEE0LjA3LDQuMDcsMCwwLDEsMTgsMjIuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjIsMTMuMzRhLjUuNSwwLDAsMCwuMzUuMTVIMTIuMmw1LjM3LDUuMzdBMSwxLDAsMCwwLDE5LDE3LjQ0TDEz''@;'; put 'put ''LjUzLDEyVjguNTFhLjUuNSwwLDAsMC0uMTUtLjM1TDcuNzksMi41N2EuNS41LDAsMCwwLS44NS4zNXY0SDNhLjUuNSwwLDAsMC0uMzUuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxOC44NWExLDEs''@;'; put 'put ''MCwwLDEtMS40MSwwbC0zLTNBNCw0LDAsMCwwLDEzLjkxLDE4LDQuMDksNC4wOSwwLDEsMCwxOCwxMy45MWE0LDQsMCwwLDAtMiwuNTVsMywzQTEsMSwwLDAsMSwxOSwxOC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMTgsMmExNS45MiwxNS45MiwwLDAsMC00LjI1LjU5bDEuNiwzLjg5QTExLjg5LDExLjg5LDAsMSwxLDYuNDksMTUuM0wyLjYxLDEzLjY4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTgsMTUuOTRBMTAuMTcsMTAuMTcsMCwxLDAsMTYsOGwxLjY5LDQuMTEuMzEsMEE1Ljg4LDUuODgsMCwxLDEsMTIuMTIsMThjMC0uMTIsMC0uMjMsMC0uMzVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4z''@;'; put 'put ''NGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDIuMzUsMi4zNUE0LjA5LDQuMDksMCwwLDEsMTYsMTQuNDZMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTQiIC8+JyksbC5DbHJTaGFwZVRhcmdldD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNy4yQTEwLjgsMTAuOCwwLDEsMCwyOC44LDE4LDEwLjgxLDEwLjgxLDAsMCwwLDE4LDcuMlptMCwyMEE5LjIsOS4yLDAsMSwxLDI3LjIsMTgsOS4yMSw5LjIxLDAsMCwxLDE4LDI3LjJa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMi4zMUE1LjY5LDUuNjksMCwxLDAsMjMuNjksMTgsNS42OSw1LjY5LDAsMCwwLDE4LDEyLjMxWm0wLDkuNzdBNC4wOSw0LjA5LDAsMSwxLDIyLjA5LDE4LDQu''@;'; put 'put ''MDksNC4wOSwwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iNC4wOSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjgzQTEwLjE3LDEwLjE3LDAsMSwwLDI4LjE3LDE4LDEwLjE4LDEwLjE4LDAsMCwwLDE4LDcuODNabTAsMTZBNS44OCw1Ljg4LDAsMSwxLDIzLjg4LDE4LDUuODgsNS44OCwwLDAsMSwxOCwyMy44OFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDI3LjgzQTExLjgzLDExLjgzLDAsMSwxLDI5LjgzLDE4LDExLjg1LDExLjg1LDAsMCwxLDE4LDI5LjgzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlRmxhbWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjMsMTYuNjZjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwtNiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEuNzUsMFM1LjQsMTcu''@;'; put 'put ''NzgsNC40MiwxOS41QTkuMyw5LjMsMCwwLDAsMywyNC42MUMzLDI5LjcyLDUuODYsMzQsMTEuNjcsMzRIMjIuNDhDMjguMjgsMzQsMzMsMjksMzMsMjIuNzhBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi42NlpNMjIuNDgsMzJIMTEuNzdDOC4xMywzMiw1LDI4LjY2LDUsMjQuNjFhNy40Myw3''@;'; put 'put ''LjQzLDAsMCwxLDEuMTYtNC4xM2MuNzMtMS4yOSw0LjA1LTcuMjEsNS42NS0xMC4wN2wzLDUuMjhhMSwxLDAsMCwwLC44Ny41MWgwYTEsMSwwLDAsMCwuODctLjUxTDIyLjQ5LDVjMS44NiwzLjMzLDYuMTUsMTEsNy4wNywxMi42QTkuMjQsOS4yNCwwLDAsMSwzMSwyMi43OEMzMSwyNy44Nywy''@;'; put 'put ''Ny4xOCwzMiwyMi40OCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1Ljc1LDIxLjczYy0uNjUtMS4xNi00LjM4LTcuODEtNC4zOC03LjgxYS44LjgsMCwwLDAtMS40LDBsLTQuMiw3LjQ4LTEuNTktMi40''@;'; put 'put ''OWEuOC44LDAsMCwwLTEuMzUsMEw5LjM3LDI0LjM1YTQuMzUsNC4zNSwwLDAsMC0uODIsMi42LDQuNDksNC40OSwwLDAsMCwuNSwySDExYTMsMywwLDAsMS0uODMtMiwyLjc4LDIuNzgsMCwwLDEsLjU2LTEuNzNsMi44LTQuMzgsMS42NiwyLjZhLjguOCwwLDAsMCwxLjQxLS4xMiw3LjgyLDcu''@;'; put 'put ''ODIsMCwwLDEsLjQtLjhMMjAuNjcsMTZsMy42OSw2LjU3YTQuODMsNC44MywwLDAsMSwuNzcsMi43MUE1LDUsMCwwLDEsMjMuNDYsMjloMi4xM2E2LjY4LDYuNjgsMCwwLDAsMS4xNC0zLjc0LDYuNDUsNi40NSwwLDAsMC0xLTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjMsMTYuMzJjLTEuMTktMi4wOS03Ljk0LTE0LjE1LTcuOTQtMTQuMTVhMSwxLDAsMCwwLTEuNzUsMGwtNiwxMC42NC0zLTUuMjhhMSwxLDAsMCwwLTEuNzUsMFM1LjQsMTcuNDMsNC40MiwxOS4xNUE5LjMsOS4zLDAsMCww''@;'; put 'put ''LDMsMjQuMjZjMCw1LjExLDMuODgsOS42NSw4LjY3LDkuNzRIMjIuNDhDMjguMjgsMzQsMzMsMjguNjIsMzMsMjIuNDRBMTEuMTMsMTEuMTMsMCwwLDAsMzEuMywxNi4zMlpNMjEuNDgsMzJIMTQuNTRBNC42OCw0LjY4LDAsMCwxLDEwLDI3LjQxYTMuOTEsMy45MSwwLDAsMSwuNzUtMi4zNGwz''@;'; put 'put ''LjM1LTUuMjFhLjUuNSwwLDAsMSwuODQsMGwxLjc4LDIuNzcsMC0uMDhjLjYzLTEuMTEsNC4yMy03LjQ4LDQuMjMtNy40OGEuNS41LDAsMCwxLC44NywwczMuNiw2LjM4LDQuMjMsNy40OEE1LjgzLDUuODMsMCwwLDEsMjcsMjUuNzZDMjcsMzIsMjIuMSwzMiwyMS40OCwzMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUhvdXJnbGFzcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4y''@;'; put 'put ''OSwwLDAsMCwxLS42MmwxLjI4LTFBNi42Nyw2LjY3LDAsMCwwLDI2LDExLjA5VjRoM2ExLDEsMCwwLDAsMC0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYy''@;'; put 'put ''bC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWk0xMiwyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwx''@;'; put 'put ''LDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjR2Ny4wOWE0LjY2LDQuNjYsMCwwLDEtMS44OCwzLjcybC0xLjI4LDFoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRh''@;'; put 'put ''MSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFh''@;'; put 'put ''Ni42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiwwLDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42NCw2LjY0LDAsMCwwLDEuMDktMUgyMi4yM2EzLjY0LDMuNjQsMCwwLDEtLjc4LS4wOWwtLjYyLjQ2aDBhNC42Niw0LjY2LDAsMCwx''@;'; put 'put ''LTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEs''@;'; put 'put ''MS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNDVMMjMuNiwySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu''@;'; put 'put ''NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu''@;'; put 'put ''MTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksMzJIMjZWMjQuOTFhNi42Nyw2LjY3LDAsMCwwLTIuNjktNS4zM2wtMS4yOC0xQTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMCwyMSwxOGgwYTYuMjksNi4yOSwwLDAsMCwxLS42MmwxLjI4LTFhNi42OCw2LjY4LDAsMCwwLDIuNTctNC4xNkE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDl2LjYxYTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAs''@;'; put 'put ''MC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJWMjQuOTFhNC42Niw0LjY2LDAsMCwxLDEuODgtMy43MmwxLjI4LTFhNC42Niw0LjY2LDAsMCwxLDEuMTgtLjYzLDEsMSwwLDAs''@;'; put 'put ''MCwuNjUtLjk0VjE3LjMzYTEsMSwwLDAsMC0uNjUtLjk0LDQuNjcsNC42NywwLDAsMS0xLjE5LS42M2wtMS4yOC0xQTQuNjYsNC42NiwwLDAsMSwxMiwxMS4wOVY0SDIyLjc4YTcuNDUsNy40NSwwLDAsMSwuODktMkg3QTEsMSwwLDAsMCw3LDRoM3Y3LjA5YTYuNjcsNi42NywwLDAsMCwyLjY5''@;'; put 'put ''LDUuMzNsMS4yOCwxQTYuMzYsNi4zNiwwLDAsMCwxNSwxOGgwYTYuMjcsNi4yNywwLDAsMC0xLC42MmwtMS4yOCwxQTYuNjcsNi42NywwLDAsMCwxMCwyNC45MVYzMkg3YTEsMSwwLDAsMCwwLDJIMjlhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik02LjY3LDRoMjJhMSwxLDAsMCwwLDAtMmgtMjJhMSwxLDAsMSwwLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNTUsMTUuNjdBNi4wNyw2LjA3LDAsMCwwLDI1LDExLjEyVjZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2''@;'; put 'put ''YTExLjQ4LDExLjQ4LDAsMCwwLTIuOTEsMS43Miw2LjA3LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlBMTEuNDgsMTEuNDgsMCwwLDAsMjIuNTUsMTUuNjdaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi40NUwyMy42LDJINi42N2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi41MSwyMC4yN2E2LjA3''@;'; put 'put ''LDYuMDcsMCwwLDAtMi40NSw0LjU1djUuMTJIMjVWMjQuODJhNi4wNyw2LjA3LDAsMCwwLTIuNDUtNC41NSwxMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcybC4zLS4yN2gtLjYyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5''@;'; put 'put ''LDZIMTAuMDZ2NS4xMmE2LjA3LDYuMDcsMCwwLDAsMi40NSw0LjU1LDExLjQ4LDExLjQ4LDAsMCwwLDIuOTEsMS43MnYxLjE2QTExLjQ4LDExLjQ4LDAsMCwwLDEyLjUxLDIwLjI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjY3LDMyaC0yMmExLDEsMCwwLDAsMCwyaDIyYTEsMSwwLDEsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LjY3LDRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0yaC0xN2ExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjIuNTUsMjAuMjdhMTEuNDgsMTEuNDgsMCwwLDAtMi45MS0xLjcyVjE3LjM5YTExLjQ4LDExLjQ4LDAsMCwwLDIuOTEtMS43MkE2LjI1LDYuMjUsMCwwLDAsMjUsMTEuNTUsNy40Nyw3LjQ3LDAsMCwxLDIyLjUsNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEu''@;'; put 'put ''NDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MkE2LjA3LDYuMDcsMCwwLDAsMjIuNTUsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVOb0FjY2Vzcz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMjcuMTUsMTVIOC44NUExLjg1LDEuODUsMCwwLDAsNywxNi44NXYyLjI5QTEuODUsMS44NSwwLDAsMCw4Ljg1LDIxSDI3LjE1QTEuODUsMS44NSwwLDAsMCwyOSwxOS4xNVYxNi44NUExLjg1LDEuODUsMCwwLDAsMjcuMTUsMTVabS4yNSw0LjE1YS4yNS4yNSwwLDAsMS0uMjUuMjVI''@;'; put 'put ''OC44NWEuMjUuMjUsMCwwLDEtLjI1LS4yNVYxNi44NWEuMjUuMjUsMCwwLDEsLjI1LS4yNUgyNy4xNWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOS4xNSwyMEg2Ljg1QS44NS44NSwwLDAsMSw2LDE5LjE1VjE2Ljg1QS44NS44NSwwLDAsMSw2Ljg1LDE2SDI5LjE1YS44NS44NSwwLDAsMSwuODUuODV2Mi4yOUEuODUuODUsMCwwLDEsMjkuMTUsMjBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVPcmdhbml6YXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSI5LjggMTguOCAyNi4yIDE4LjggMjYuMiAyMS44OCAyNy44IDIxLjg4IDI3LjggMTcuMiAxOC44IDE3LjIgMTguOCAxNCAxNy4yIDE0IDE3LjIgMTcu''@;'; put 'put ''MiA4LjIgMTcuMiA4LjIgMjEuODggOS44IDIxLjg4IDkuOCAxOC44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyM0g0YTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDE0YTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MjVBMiwyLDAsMCwwLDE0LDIzWk00LDMxVjI1SDE0djZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyM0gyMmEyLDIsMCwwLDAtMiwydjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI1QTIs''@;'; put 'put ''MiwwLDAsMCwzMiwyM1pNMjIsMzFWMjVIMzJ2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLDEzSDIzYTIsMiwwLDAsMCwyLTJWNWEyLDIsMCwwLDAtMi0ySDEzYTIsMiwwLDAsMC0yLDJ2NkEyLDIsMCww''@;'; put 'put ''LDAsMTMsMTNabTAtOEgyM3Y2SDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44''@;'; put 'put ''IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIg''@;'; put 'put ''cnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMCIgeT0iMjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVCYWxhbmNlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCwzM0gxMmEx''@;'; put 'put ''LDEsMCwwLDEsMC0ySDI0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSI5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyMi41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw3SDhBMSwxLDAsMCwxLDgsNUgyOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuOTMsMjQuNzlhNy4yMyw3''@;'; put 'put ''LjIzLDAsMCwxLTUuODEtMi44OWwtLjYtLjgsMS41OS0xLjIxLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSwyNi45MywyNC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMwLjUxLDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEwyNi45MywxMi4ybC0yLjg1LDYuNTdhLjguOCwwLDAsMS0xLjQ3LS42NEwyNi4yLDkuODdhLjgzLjgzLDAsMCwxLDEuNDcsMGwzLjU4LDguMjZhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNjgsMjQuNzlBNy4yMyw3LjIzLDAsMCwxLDMuODgsMjEuOWwtLjYtLjhMNC44NiwxOS45bC42LjhhNS4yOCw1LjI4LDAsMCwwLDguNDIsMGwuNi0uOCwxLjU5LDEuMjEtLjYuOEE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEsOS42OCwyNC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjI2LDE5LjI1YS44LjgsMCwwLDEtLjczLS40OEw5LjY4LDEyLjIsNi44NCwxOC43N2EuOC44LDAsMCwxLTEuNDctLjY0''@;'; put 'put ''TDguOTUsOS44N2EuODMuODMsMCwwLDEsMS40NywwTDE0LDE4LjEzYS44LjgsMCwwLDEtLjczLDEuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxsLkNsclNoYXBlSWRCYWRnZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjJhNC4y''@;'; put 'put ''Myw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTIyLDRhMiwyLDAsMCwwLTItMkgxNmEyLDIsMCwwLDAtMiwydjdoOFpNMjAsOUgxNlY0aDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMFYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYt''@;'; put 'put ''LjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsNkgyNFY4aDRWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDI4LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMGgxLjZWMjcuODdBOC4zMyw4LjMzLDAsMCwxLDE4LDI1LjI5YTguMzMsOC4zMywwLDAsMSw2''@;'; put 'put ''LjQsMi41OVYzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTE5LDkuODksMTkuNTYsOUgxNlY0aDRWOC4yNGwyLTMuNDZWNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g0LjY0QTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h''@;'; put 'put ''bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIu''@;'; put 'put ''NjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5''@;'; put 'put ''SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlh''@;'; put 'put ''OC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDIzVjhoNVYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwyMSw2LjVWNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43''@;'; put 'put ''YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYz''@;'; put 'put ''Mkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4x''@;'; put 'put ''MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTcuNzciIHI9IjQuMjMiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDRhMiwyLDAsMCwwLTItMkgxN2EyLDIs''@;'; put 'put ''MCwwLDAtMiwydjZoNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5''@;'; put 'put ''LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxMy4yMlYzMkg4VjhoNVY2SDhBMiwyLDAsMCwwLDYsOFYz''@;'; put 'put ''MmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjgsMTMuMjJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIg''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVSZXBlYXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik02LDE0''@;'; put 'put ''LjE1QTMuMTcsMy4xNywwLDAsMSw5LjE3LDExSDI4LjRsLTQuMjgsNC41NGExLDEsMCwxLDAsMS40NiwxLjM3TDMyLjA5LDEwLDI1LjU4LDMuMDlhMSwxLDAsMSwwLTEuNDYsMS4zN0wyOC40LDlIOS4xN0E1LjE3LDUuMTcsMCwwLDAsNCwxNC4xNXY2LjFsMi0yLjEyWiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMCwyMS44NUEzLjE3LDMuMTcsMCwwLDEsMjYuODMsMjVINy42bDQuMjgtNC41NGExLDEsMCwxLDAtMS40Ni0xLjM3TDMuOTEsMjZsNi41MSw2LjkxYTEsMSwwLDEsMCwxLjQ2LTEuMzdMNy42''@;'; put 'put ''LDI3SDI2LjgzQTUuMTcsNS4xNywwLDAsMCwzMiwyMS44NXYtNi4xbC0yLDIuMTJaIi8+JyksbC5DbHJTaGFwZUZpbGVHcm91cD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDM0SDEzYTEsMSwwLDAsMS0x''@;'; put 'put ''LTFWMTFhMSwxLDAsMCwxLDEtMUgzMWExLDEsMCwwLDEsMSwxVjMzQTEsMSwwLDAsMSwzMSwzNFpNMTQsMzJIMzBWMTJIMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMTYiIHk9IjE2IiB3aWR0aD0iMTIiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE2IiB5PSIyMCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC00IiB4PSIxNiIgeT0iMjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAs''@;'; put 'put ''MCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEsMSwwLDAsMCwxLDFoMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMSwxMEgxM2ExLDEsMCwwLDAtMSwxVjMzYTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzEsMTBaTTI4LDI2SDE2VjI0SDI4Wm0wLTRIMTZWMjBIMjhabTAtNEgxNlYxNkgyOFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik02LDI0VjRIMjRWM2ExLDEsMCwwLDAtMS0xSDVBMSwxLDAsMCwwLDQsM1YyNWExLDEsMCwwLDAsMSwxSDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTAsMjhWOEgyOFY3YTEsMSwwLDAsMC0xLTFIOUExLDEsMCwwLDAsOCw3VjI5YTEsMSwwLDAsMCwxLDFoMVoiLz4nKSxsLkNsclNoYXBlUGFwZXJjbGlwPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiBkPSJNOC40MiwzMi42QTYuMyw2LjMsMCwwLDEsNCwzMC43OWwtLjEzLS4xM0E2LjIsNi4yLDAsMCwxLDIsMjYuMjIsNi43Nyw2Ljc3LDAsMCwxLDQsMjEuNEwxOS41LDYuMDdhOC42Nyw4LjY3LDAsMCwxLDEyLjE1LS4zNUE4LDgsMCwwLDEsMzQsMTEuNDRhOSw5LDAs''@;'; put 'put ''MCwxLTIuNyw2LjM2TDE3LjM3LDMxLjZBMSwxLDAsMSwxLDE2LDMwLjE4TDI5Ljg5LDE2LjM4QTcsNywwLDAsMCwzMiwxMS40NGE2LDYsMCwwLDAtMS43Ni00LjMsNi42Nyw2LjY3LDAsMCwwLTkuMzQuMzVMNS40NSwyMi44MkE0Ljc4LDQuNzgsMCwwLDAsNCwyNi4yMmE0LjIxLDQuMjEsMCww''@;'; put 'put ''LDAsMS4yNCwzbC4xMy4xM2E0LjY0LDQuNjQsMCwwLDAsNi41LS4yMUwyNS4yMiwxNS45NEEyLjcsMi43LDAsMCwwLDI2LDE0YTIuMzUsMi4zNSwwLDAsMC0uNjktMS42OCwyLjYxLDIuNjEsMCwwLDAtMy42Ni4xM2wtOS4yLDkuMTJhMSwxLDAsMSwxLTEuNDEtMS40MkwyMC4yOCwxMWE0LjYy''@;'; put 'put ''LDQuNjIsMCwwLDEsNi40OC0uMTNBNC4zMyw0LjMzLDAsMCwxLDI4LDE0YTQuNjgsNC42OCwwLDAsMS0xLjQxLDMuMzRMMTMuMjgsMzAuNThBNi45MSw2LjkxLDAsMCwxLDguNDIsMzIuNloiLz4nKSxsLkNsclNoYXBlU2hyaW5rPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMjIuNDFsOS4yNS05LjI1YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjEsMTMuNTlWNGExLDEsMCwwLDAtMiwwVjE3SDMyYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTQsMTlhMSwxLDAsMCwwLDAsMmg5LjU5TDQuMzMsMzAuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwxNSwyMi40MVYzMmExLDEsMCwwLDAsMiwwVjE5WiIvPicpLGwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5MT0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMTQuNDQsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjMyLDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMUwxOSwzMC4zM0E3LjI5LDcuMjksMCwwLDEsMTQuNDQsMzEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNS4zNiwxLjY3YTQuMTIsNC4xMiwwLDEsMCw0LjExLDQuMTFBNC4xMiw0LjEyLDAsMCwwLDI1LjM2LDEuNjdabTAsNi4yM2EyLjEyLDIuMTIsMCwxLDEsMi4xMS0yLjEyQTIuMTIsMi4xMiwwLDAsMSwyNS4zNiw3LjlaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41NiwxOC4xOGgtNWExLDEsMCwwLDAtLjI0LjA1bDMuMDktMy41NWEyLjgzLDIuODMsMCwwLDAtLjY5LTQuMzNsLTgtNC42YTEsMSwwLDAsMC0xLjEyLjA4TDkuODMsOS41OEExLDEsMCwwLDAs''@;'; put 'put ''OS42NiwxMWExLDEsMCwwLDAsLjc5LjM4LDEsMSwwLDAsMCwuNjEtLjIxbDQuMjctMy4zNCwzLjExLDEuNzctNS4wOCw1Ljc4aDBhOS4yOCw5LjI4LDAsMCwwLTQuNTMsMS44M2wxLjQzLDEuNDNBNy4zLDcuMywwLDAsMSwyMC40MiwyOC44MWwxLjQyLDEuNDNhOS4yNyw5LjI3LDAsMCwwLC43''@;'; put 'put ''Ny0xMC4wNmgyLjgybC0uNzcsNi41MWExLDEsMCwwLDAsLjg4LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi41NiwxOC4xOFptLTYuMzctNy41NiwyLjUyLDEuNDZhLjc5Ljc5LDAsMCwxLC40LjU5LjgxLjgxLDAsMCwxLS4y''@;'; put 'put ''LjY5TDE5Ljc1LDE3QTkuMTcsOS4xNywwLDAsMCwxNiwxNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0Ljc3LDMxLjk0YTcuMzEsNy4zMSwwLDAsMS01LjctMTEuODhMNy42NSwxOC42NGE5LjMsOS4z''@;'; put 'put ''LDAsMCwwLDEzLjEsMTMuMTFsLTEuNDItMS40MkE3LjI5LDcuMjksMCwwLDEsMTQuNzcsMzEuOTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjY1LDIuMWEzLjEyLDMuMTIsMCwxLDAsMy4xMSwzLjEyQTMuMTIs''@;'; put 'put ''My4xMiwwLDAsMCwyNi42NSwyLjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjgxLDE4LjE4SDIxLjQ3cS0uMzEtLjMzLS42Ni0uNjNsNC4zOC00Ljg2YTIuMTQsMi4xNCwwLDAsMC0uNTMtMy4yN0wyMC45LDcu''@;'; put 'put ''MjNsMCwwTDE3LjA1LDUuMDdhMSwxLDAsMCwwLTEuMTEuMDhMMTEuMTUsOC45YTEsMSwwLDAsMCwxLjIzLDEuNThsNC4yNy0zLjM0LDIuODcsMS42M0wxMy42LDE1LjM5YTkuMzMsOS4zMywwLDAsMC00LjQ0LDEuODJsMS40MiwxLjQzQTcuMyw3LjMsMCwwLDEsMjAuNzUsMjguODFsMS40Mywx''@;'; put 'put ''LjQzQTkuMjcsOS4yNywwLDAsMCwyMywyMC4xOGgyLjc0bC0uNzcsNi41MWExLDEsMCwwLDAsLjg3LDEuMTFoLjEyYTEsMSwwLDAsMCwxLS44OGwuOS03LjYyYTEsMSwwLDAsMC0uMjUtLjc4QTEsMSwwLDAsMCwyNi44MSwxOC4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+JyksbC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC4wNiwxMWgtMjRhMSwxLDAsMSwwLDAsMkgxNHY5LjY1czAsMCwwLDBsLTMuNzUsMTBhMSwxLDAsMCwwLC41OCwxLjI5LDEuMTMsMS4xMywwLDAsMCwuMzYuMDYsMSwxLDAs''@;'; put 'put ''MCwwLC45My0uNjVMMTUuNjIsMjRoNC43NmwzLjUyLDkuMzVhMSwxLDAsMCwwLC45My42NSwxLjEzLDEuMTMsMCwwLDAsLjM2LS4wNiwxLDEsMCwwLDAsLjU4LTEuMjlMMjIsMjIuNjhzMCwwLDAsMFYxM2g4LjA2YTEsMSwwLDEsMCwwLTJaTTIwLDIySDE2VjEzaDRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMGE0LDQsMCwxLDAtNC00QTQsNCwwLDAsMCwxOCwxMFptMC02YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE3Ljk2IiBjeT0iNSIgcj0iMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEg2YTEsMSwwLDAsMCwwLDJoOHY4LjM2czAsMCwwLDBMMTAuMTEsMzMu''@;'; put 'put ''MTdhMSwxLDAsMCwwLC42NiwxLjI1LDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsMS0uNzFsMy4yOS0xMC44NGg1LjM4TDI0LDMzLjc1YTEsMSwwLDAsMCwxLC43MSwxLjU1LDEuNTUsMCwwLDAsLjI5LDAsMSwxLDAsMCwwLC42Ni0xLjI1TDIyLDIwLjRzMCwwLDAsMFYxMmg4YTEs''@;'; put 'put ''MSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVTb3J0Qnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LjU0LDEzSDcuNDZhMSwxLDAsMCwxLDAtMkgyOC41NGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTcsMTlINy40NmExLDEsMCwwLDEsMC0ySDIxLjE3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy43NCwyNUg3LjQ2YTEsMSwwLDAsMSwwLTJoNi4yOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZUNvbGxhcHNlQ2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMjFI''@;'; put 'put ''M2ExLDEsMCwwLDAtMSwxdjZhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIyQTEsMSwwLDAsMCwzMywyMVptLTEsNkg0VjIzSDMyWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjAuMjJsNS42''@;'; put 'put ''NS01LjY1YS44MS44MSwwLDAsMCwwLTEuMTQuOC44LDAsMCwwLTEuMTMsMEwxOCwxOGwtNC41Mi00LjUyYS44LjgsMCwwLDAtMS4xMywwLC44MS44MSwwLDAsMCwwLDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xOCwxNC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDEyLDEzLjQ4LDcuNDNhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMiIgeT0iMjIiIHdpZHRoPSIzMiIgaGVpZ2h0PSI4IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjAuN2wtNS43OS01Ljc5YTEsMSwwLDAsMSwwLTEu''@;'; put 'put ''NDEsMSwxLDAsMCwxLDEuNDEsMEwxOCwxNy44N2w0LjM4LTQuMzdhMSwxLDAsMCwxLDEuNDEsMCwxLDEsMCwwLDEsMCwxLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC41LDEyLjIxLDguNzFhMSwxLDAs''@;'; put 'put ''MCwxLDAtMS40MiwxLDEsMCwwLDEsMS40MSwwTDE4LDExLjY3bDQuMzgtNC4zOGExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVFeHBhbmRDYXJkPSgwLGEuY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGQ9Ik0zMyw2SDNBMSwxLDAsMCwwLDIsN1YyOWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsMzMsNlpNMzIsMjhINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xMy40OCwxNS44NiwxOCwxMS4zNGw0LjUyLDQuNTJhLjc3Ljc3LDAsMCwwLC41Ni4yNC44MS44MSwwLDAsMCwuNTctMS4zN0wxOCw5LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEzLDEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDIxLjg2LDE4LDE3LjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDE1LjA4bC01LjY1LDUuNjVhLjguOCwwLDEsMCwxLjEzLDEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0yMy43OSwyMS40MWExLDEsMCwwLDEtMS40MSwwTDE4LDE3bC00LjM4LDQuMzhhMSwxLDAsMCwx''@;'; put 'put ''LTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDE0LjIsMjMuNzksMjBBMSwxLDAsMCwxLDIzLjc5LDIxLjQxWm0wLTYuMmExLDEsMCwwLDEtMS40MSwwTDE4LDEwLjgzbC00LjM4LDQuMzhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDhsNS43OSw1Ljc5QTEsMSwwLDAs''@;'; put 'put ''MSwyMy43OSwxNS4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUJyaWVmY2FzZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMjhhMCwwLDAsMCwxLDAsMEg0VjIxLjMyYTcuMSw3LjEsMCwwLDEtMi0xLjQzVjI4YTIsMiww''@;'; put 'put ''LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS44OWE2Ljc0LDYuNzQsMCwwLDEtMiwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjUsMjIuNGExLDEsMCwwLDAsMS0xVjE1Ljk0SDI0VjE4SDE0djJIMjR2MS40QTEsMSww''@;'; put 'put ''LDAsMCwyNSwyMi40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMsNkgyNFY0LjM4QTIuNDIsMi40MiwwLDAsMCwyMS41NSwyaC03LjFBMi40MiwyLjQyLDAsMCwwLDEyLDQuMzhWNkgzQTEsMSwwLDAsMCwyLDd2OGE1LDUsMCww''@;'; put 'put ''LDAsNSw1aDN2MS40YTEsMSwwLDAsMCwyLDBWMTUuOTRIMTBWMThIN2EzLDMsMCwwLDEtMy0zVjhIMzJ2N2EzLDMsMCwwLDEtMywzSDI4djJoMWE1LDUsMCwwLDAsNS01VjdBMSwxLDAsMCwwLDMzLDZaTTIyLDZIMTRWNC40M0EuNDUuNDUsMCwwLDEsMTQuNDUsNGg3LjExYS40My40MywwLDAs''@;'; put 'put ''MSwuNDQuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0zMCwxOEE0LjA2LDQuMDYsMCwwLDAsMzQsMTRWNkgyNFY0LjQzQTIuNDQsMi40NCwwLDAsMCwyMS41NSwyaC03LjFBMi40NCwyLjQ0LDAsMCwwLDEyLDQuNDNWNkgydjhB''@;'; put 'put ''NC4wNiw0LjA2LDAsMCwwLDYuMDUsMThoNFYxNS45MmgydjUuN2ExLDEsMCwxLDEtMiwwVjIwLjA2SDYuMDZBNi4wNiw2LjA2LDAsMCwxLDIsMTguNDl2OS40NWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTguNDlhNiw2LDAsMCwxLTQuMDYsMS41N0gyOFYxOFpNMTQsNC40M0Eu''@;'; put 'put ''NDUuNDUsMCwwLDEsMTQuNDUsNGg3LjFhLjQ1LjQ1LDAsMCwxLC40NS40M1Y2SDE0Wk0yNiwyMS42MmExLDEsMCwxLDEtMiwwVjIwLjA2SDE0VjE4SDI0VjE1LjkyaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVDb2xvclBpY2tlcj0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMTAuMDVhNS4wNyw1LjA3LDAsMCwwLC4xLTcuMTdBNS4wNiw1LjA2LDAsMCwwLDI2LDNMMjAuNzgsOC4xNWEyLjEzLDIuMTMsMCwwLDEtMywwbC0uNjctLjY3TDE1LjcyLDguOTIsMjcuMDgsMjAuMjhsMS40Mi0xLjQyLS42Ny0uNjdhMi4x''@;'; put 'put ''MywyLjEzLDAsMCwxLDAtM1pNMjYuNDQsMTMuOGE0LjA3LDQuMDcsMCwwLDAtMS4wOCwxLjkybC01LjA4LTUuMDhBNC4wNyw0LjA3LDAsMCwwLDIyLjIsOS41Nmw1LjE2LTUuMTdhMy4wOSwzLjA5LDAsMCwxLDQuMzUtLjEsMy4wOSwzLjA5LDAsMCwxLS4xLDQuMzVaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik03LjMsMzEuNTFhMiwyLDAsMSwxLTIuODMtMi44M0wxOC41OCwxNC41N2wtMS40Mi0xLjQxTDMuMDUsMjcuMjdhNCw0LDAsMCwwLS42OCw0LjhMLjg5LDMzLjU1QTEsMSwwLDAsMCwuODksMzVhMSwxLDAsMCwwLDEu''@;'; put 'put ''NDIsMGwxLjQzLTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjIuODIsMTguODEsMjEuNDEsMTcuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTMzLjczLDIuMTFhNC4wOSw0LjA5''@;'; put 'put ''LDAsMCwwLTUuNzYuMUwyMi44MSw3LjM4YTMuMTMsMy4xMywwLDAsMS00LjMuMTFMMTcuMDksOC45MSwyNywxOC43OWwxLjQyLTEuNDJBMy4xOCwzLjE4LDAsMCwxLDI4LjQ2LDEzbDUuMTctNS4xN0E0LjA4LDQuMDgsMCwwLDAsMzMuNzMsMi4xMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMjIuMTgsMTYuNzksNy40NiwzMS41MWEyLDIsMCwxLDEtMi44Mi0yLjgzTDE5LjM1LDE0bC0xLjQxLTEuNDFMMy4yMiwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwxLjA2LDMzLjU1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLDEuNDEs''@;'; put 'put ''MGwxLjQ0LTEuNDRhMy45MywzLjkzLDAsMCwwLDIuMDkuNiw0LjA2LDQuMDYsMCwwLDAsMi44OC0xLjJMMjMuNiwxOC4yMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMjIuNiw0SDIxLjU1YTMuODksMy44OSwwLDAsMC03LjMxLDBIMTMuNEEyLjQxLDIuNDEsMCwwLDAsMTEsNi40VjEwSDI1VjYuNEEyLjQxLDIuNDEsMCwwLDAsMjIuNiw0Wk0yMyw4SDEzVjYuMjVBLjI1LjI1LDAsMCwxLDEzLjI1LDZoMi42OWwuMTItMS4xMUExLjI0LDEuMjQsMCww''@;'; put 'put ''LDEsMTYuNjEsNGEyLDIsMCwwLDEsMy4xNSwxLjE4bC4wOS44NGgyLjlhLjI1LjI1LDAsMCwxLC4yNS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjI1LDE4LjA2SDIxLjMzbDIuODQtMi44M2ExLDEsMCwxLDAtMS40Mi0x''@;'; put 'put ''LjQyTDE3LjUsMTkuMDZsNS4yNSw1LjI1YTEsMSwwLDAsMCwuNzEuMjksMSwxLDAsMCwwLC43MS0xLjdsLTIuODQtMi44NEgzMy4yNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjksMTZoMlY2LjY4QTEu''@;'; put 'put ''NjYsMS42NiwwLDAsMCwyOS4zNSw1SDI3LjA4VjdIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbjxwYXRoIGQ9Ik0yOSwzMUg3VjdIOVY1SDYuNjRBMS42NiwxLjY2LDAsMCwwLDUsNi42N1YzMS4zMkExLjY2LDEuNjYsMCwwLDAsNi42NSwzM0gy''@;'; put 'put ''OS4zNkExLjY2LDEuNjYsMCwwLDAsMzEsMzEuMzNWMjIuMDZIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlRHJhZ0hhbmRsZT0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxNSIgY3k9IjEyIiByPSIxLjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE1IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxMiIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMTgiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlRmlsdGVyMj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMTFIM2ExLDEsMCwwLDAsMCwy''@;'; put 'put ''SDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yOCwxN0g4YTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''PHBhdGggZD0iTTIzLDIzSDEzYTEsMSwwLDAsMCwwLDJIMjNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVNb29uPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyNy4xOWExLDEsMCwwLDAtMS0u''@;'; put 'put ''NTZjLS4yOCwwLS41NiwwLS44NSwwQTExLDExLDAsMCwxLDI0LjkyLDUuNjFhMSwxLDAsMCwwLC42MS0xLDEsMSwwLDAsMC0uNjctLjkxLDE0LjcsMTQuNywwLDAsMC01LS44NywxNS4xMiwxNS4xMiwwLDAsMCwwLDMwLjI0LDE0Ljc4LDE0Ljc4LDAsMCwwLDExLTQuODFBMSwxLDAsMCwwLDMx''@;'; put 'put ''LDI3LjE5Wk0xOS44OSwzMS4xMmExMy4xMiwxMy4xMiwwLDAsMSwwLTI2LjI0LDExLjgxLDExLjgxLDAsMCwxLDIsLjE2LDEzLDEzLDAsMCwwLDUuNzIsMjMuNTNBMTIuNzUsMTIuNzUsMCwwLDEsMTkuODksMzEuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbjxwYXRoIGQ9Ik0yOS4yLDI2LjcyQTEyLjA3LDEyLjA3LDAsMCwxLDIyLjksNC40NCwxMy42OCwxMy42OCwwLDAsMCwxOS40OSw0YTE0LDE0LDAsMCwwLDAsMjgsMTMuODIsMTMuODIsMCwwLDAsMTAuOS01LjM0QTExLjcxLDExLjcxLDAsMCwxLDI5LjIsMjYuNzJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVTdW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDYuMzFhMSwxLDAsMCwwLDEtMVYxLjkxYTEsMSwwLDAsMC0yLDB2My40QTEsMSwwLDAsMCwxOCw2LjMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMTgsMjkuNjlhMSwxLDAsMCwwLTEsMXYzLjRhMSwxLDAsMCwwLDIsMHYtMy40QTEsMSwwLDAsMCwxOCwyOS42OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuPHBhdGggZD0iTTguMzIs''@;'; put 'put ''OS43NEExLDEsMCwwLDAsOSwxMGExLDEsMCwwLDAsLjcxLS4yOSwxLDEsMCwwLDAsMC0xLjQyTDcuMzMsNS45MkExLDEsMCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjY4LDI2LjI2YTEsMSwwLDEsMC0x''@;'; put 'put ''LjQyLDEuNDJsMi40MSwyLjRhMSwxLDAsMCwwLC43MS4zLDEsMSwwLDAsMCwuNy0uMywxLDEsMCwwLDAsMC0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTYuMzEsMThhMSwxLDAsMCwwLTEtMUgxLjkxYTEsMSwwLDAsMCwwLDJo''@;'; put 'put ''My40QTEsMSwwLDAsMCw2LjMxLDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTM0LjA5LDE3aC0zLjRhMSwxLDAsMSwwLDAsMmgzLjRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPjxwYXRoIGQ9Ik04LjMyLDI2LjI2bC0yLjQsMi40MWExLDEsMCwwLDAsLjcsMS43MSwxLDEsMCwwLDAsLjcxLS4zbDIuNDEtMi40YTEsMSwwLDEsMC0xLjQyLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcsMTBh''@;'; put 'put ''MSwxLDAsMCwwLC43MS0uMjlsMi40LTIuNDFhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MSwwbC0yLjQxLDIuNGExLDEsMCwwLDAsMCwxLjQyQTEsMSwwLDAsMCwyNywxMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0xOC4x''@;'; put 'put ''Myw3Ljc1YTEwLjEzLDEwLjEzLDAsMSwwLDEwLDEwLjEzQTEwLjA4LDEwLjA4LDAsMCwwLDE4LjEzLDcuNzVabTAsMTguMjVhOC4xMyw4LjEzLDAsMSwxLDgtOC4xMkE4LjA4LDguMDgsMCwwLDEsMTguMTMsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMTgsNi40MmExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMFY1LjQyQTEsMSwwLDAsMCwxOCw2LjQyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjkuNThhMSwxLDAsMCwwLTEsMXYzLjUxYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWMzAuNThBMSwxLDAsMCwwLDE4LDI5LjU4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNOC40LDkuODFBMSwxLDAsMCwwLDkuODEsOC40TDcuMzMsNS45MkExLDEsMCwwLDAsNS45Miw3LjMzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNiwyNi4xOWExLDEsMCwwLDAtMS40MSwxLjQxbDIuNDgsMi40OGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNNi40MiwxOGExLDEsMCwwLDAtMS0x''@;'; put 'put ''SDEuOTFhMSwxLDAsMCwwLDAsMkg1LjQyQTEsMSwwLDAsMCw2LjQyLDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdIMzAuNThhMSwxLDAsMCwwLDAsMmgzLjUxYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC02IiAvPjxwYXRoIGQ9Ik04LjQsMjYuMTksNS45MiwyOC42N2ExLDEsMCwwLDAsMS40MSwxLjQxTDkuODEsMjcuNkExLDEsMCwwLDAsOC40LDI2LjE5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNyIgLz48cGF0aCBkPSJNMjcuNiw5Ljgx''@;'; put 'put ''bDIuNDgtMi40OGExLDEsMCwwLDAtMS40MS0xLjQxTDI2LjE5LDguNEExLDEsMCwwLDAsMjcuNiw5LjgxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOCIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxMCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtOSIgLz4nKSxsLkNsclNoYXBlV2FuZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LjEsNCwzMS43MSwxLjZhMS44MywxLjgzLDAsMCwwLTEuMzEtLjU0aDBhMi4wNSwyLjA1LDAsMCwwLTEuNDUu''@;'; put 'put ''NjJMMS43NiwyOS4yM0EyLDIsMCwwLDAsMS42OCwzMmwyLjQsMi40M0ExLjgzLDEuODMsMCwwLDAsNS4zOSwzNWgwYTIuMDUsMi4wNSwwLDAsMCwxLjQ1LS42MkwzNCw2Ljc5QTIsMiwwLDAsMCwzNC4xLDRaTTUuNDIsMzIuOTMsMy4xNiwzMC42NWgwTDI0LjExLDkuNDNsMi4yNSwyLjI4Wk0z''@;'; put 'put ''Mi42MSw1LjM5bC01LjEyLDUuMThMMjUuMjQsOC4yOWw1LjEzLTUuMiwyLjI1LDIuMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjUzLDIwLjQ3bDIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMtMS4xM2wt''@;'; put 'put ''Mi4wOSwyLjA5LTIuMDktMi4wOWEuOC44LDAsMCwwLTEuMTMsMS4xM2wyLjA5LDIuMDktMi4wOSwyLjA5YS44LjgsMCwwLDAsMS4xMywxLjEzbDIuMDktMi4wOSwyLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLTEuMTNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0Ljc4LDYuNTFhLjguOCwwLDAsMCwxLjEzLDBMMTcuNCw1bDEuNDksMS40OUEuOC44LDAsMCwwLDIwLDUuMzhMMTguNTQsMy44OSwyMCwyLjRhLjguOCwwLDAsMC0xLjEzLTEuMTNMMTcuNCwyLjc2LDE1LjkxLDEuMjdBLjguOCwwLDEsMCwx''@;'; put 'put ''NC43OCwyLjRsMS40OSwxLjQ5TDE0Ljc4LDUuMzhBLjguOCwwLDAsMCwxNC43OCw2LjUxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik04LjMzLDE1LjI2YS44LjgsMCwwLDAsMS4xMywwbDEuMTYtMS4xNiwxLjE2''@;'; put 'put ''LDEuMTZhLjguOCwwLDEsMCwxLjEzLTEuMTNMMTEuNzYsMTNsMS4xNi0xLjE2YS44LjgsMCwxLDAtMS4xMy0xLjEzbC0xLjE2LDEuMTZMOS40NiwxMC42OGEuOC44LDAsMSwwLTEuMTMsMS4xM0w5LjQ5LDEzLDguMzMsMTQuMTNBLjguOCwwLDAsMCw4LjMzLDE1LjI2WiIvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JNb3ZlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC44NSwxMi44OWExLDEsMCwwLDAtMS40MiwwLDEsMSwwLDAsMCwwLDEuNDFMMzAuMTQsMTdIMTlWNS44NmwyLjY5LDIuN2ExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDJMMTgsMiwxMi44OSw3LjE1YTEs''@;'; put 'put ''MSwwLDAsMC0uMjkuNzEsMSwxLDAsMCwwLDEuNzEuN0wxNyw1Ljg2VjE3SDUuODZsMi43LTIuNjlhMSwxLDAsMCwwLDAtMS40MSwxLDEsMCwwLDAtMS40MiwwTDIsMThsNS4xNCw1LjExYTEsMSwwLDAsMCwuNzEuMjksMSwxLDAsMCwwLC43LTEuNzFMNS44NiwxOUgxN1YzMC4xNGwtMi42OS0y''@;'; put 'put ''LjdhMSwxLDAsMCwwLTEuNzEuNywxLDEsMCwwLDAsLjI5LjcxTDE4LDM0bDUuMTEtNS4xNGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMTksMzAuMTRWMTlIMzAuMTRsLTIuNywyLjY5YTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjI5TDM0LDE4WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUNsb25lPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LDZIMjJ2NGgyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjIySDZaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTJIMTRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRBMiwyLDAsMCwwLDMwLDEyWm0wLDE4SDE0VjE0SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBvbHlnb24gcG9pbnRzPSIyMSAyOCAyMyAyOCAyMyAyMyAyOCAyMyAyOCAyMSAyMyAyMSAyMyAxNiAyMSAxNiAyMSAyMSAxNiAyMSAxNiAyMyAyMSAyMyAyMSAyOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTI0LDEwVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMmg0VjEyYTIsMiwwLDAsMSwyLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJaTTI4LDIzSDIzdjVIMjFWMjNIMTZWMjFoNVYxNmgydjVoNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZURldGFpbHM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIySDRWOEgzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDE0SDI3YTEsMSwwLDAsMCww''@;'; put 'put ''LTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTksMThIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNOSwyMkgxOWExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCww''@;'; put 'put ''LDAsMzIsNlpNMTksMjJIOWExLDEsMCwwLDEsMC0ySDE5YTEsMSwwLDAsMSwwLDJabTgtNEg5YTEsMSwwLDAsMSwwLTJIMjdhMSwxLDAsMCwxLDAsMlptMC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj0oMCxhLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMiIgY3k9IjI0IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlRXJhc2VyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNS42MiwxMmEyLjgyLDIuODIsMCwwLDAtLjg0LTJMMjcuNDksMi42NWEyLjksMi45LDAsMCwwLTQsMEwyLjgzLDIzLjI4YTIuODQsMi44NCwwLDAsMCwwLDRMNy41MywzMkgz''@;'; put 'put ''YTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMkgxNi43NGwxOC0xOEEyLjgyLDIuODIsMCwwLDAsMzUuNjIsMTJaTTEzLjkxLDMySDEwLjM2TDQuMjUsMjUuODlhLjg0Ljg0LDAsMCwxLDAtMS4xOWw1LjUxLTUuNTIsOC40OSw4LjQ4Wk0zMy4zNywxMi41NCwxOS42NiwyNi4yNWwtOC40''@;'; put 'put ''OC04LjQ5LDEzLjctMTMuN2EuODYuODYsMCwwLDEsMS4xOSwwbDcuMyw3LjI5YS44Ni44NiwwLDAsMSwuMjUuNkEuODIuODIsMCwwLDEsMzMuMzcsMTIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjgsMzJIMTUuMzNMMTksMjgu''@;'; put 'put ''MzdsLTkuOS05LjlMMy41NCwyNGExLjgzLDEuODMsMCwwLDAsMCwyLjZMOSwzMkgzYTEsMSwwLDAsMCwwLDJIMjhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjA4LDEwLjY1bC03LjMtNy4zYTEuODMsMS44Myww''@;'; put 'put ''LDAsMC0yLjYsMEwxMC40NywxNy4wNmw5LjksOS45TDM0LjA4LDEzLjI1QTEuODUsMS44NSwwLDAsMCwzNC4wOCwxMC42NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUxhbmRzY2FwZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMjJhLjgyLjgyLDAsMCwwLC41NS0u''@;'; put 'put ''MjEuOC44LDAsMCwwLDAtMS4xM0w3LjgzLDE4LjhIMjguMTdsLTEuNzIsMS44NmEuOC44LDAsMCwwLDAsMS4xM0EuODIuODIsMCwwLDAsMjcsMjJhLjc4Ljc4LDAsMCwwLC41OC0uMjZMMzEuMDksMThsLTMuNDctMy43NGEuNzkuNzksMCwwLDAtMS4xMywwLC44LjgsMCwwLDAsMCwxLjEzbDEu''@;'; put 'put ''NzIsMS44Nkg3LjgzbDEuNzItMS44NmEuOC44LDAsMCwwLDAtMS4xMy43OS43OSwwLDAsMC0xLjEzLDBMNC45MSwxOGwzLjQ3LDMuNzRBLjc4Ljc4LDAsMCwwLDksMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzIsNkg0QTIsMiww''@;'; put 'put ''LDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTI3Ljc3LDIxLjg4YTEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjcsMSwxLDAsMCwxLS4wNi0xLjQxTDI3LjcxLDE5SDguMjlMOS43LDIwLjUyYTEsMSwwLDAsMS0uMDYs''@;'; put 'put ''MS40MUExLDEsMCwwLDEsOSwyMi4yYTEsMSwwLDAsMS0uNzMtLjMyTDQuNjQsMThsMy41OS0zLjg4QTEsMSwwLDAsMSw5LjcsMTUuNDhMOC4yOSwxN0gyNy43MUwyNi4zLDE1LjQ4YTEsMSwwLDAsMSwxLjQ3LTEuMzZMMzEuMzYsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVQYXN0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMCwzMEgyOHYyaDJhMiwyLDAsMCwwLDItMlYyNkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNCwy''@;'; put 'put ''MlY2YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw2VjIyYTIsMiwwLDAsMCwyLDJIMjJBMiwyLDAsMCwwLDI0LDIyWk02LDZIMjJWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdo''@;'; put 'put ''dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTMwLDEySDI2djJoNHYy''@;'; put 'put ''aDJWMTRBMiwyLDAsMCwwLDMwLDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cmVjdCB4PSIzMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4''@;'; put 'put ''djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48''@;'; put 'put ''cmVjdCB4PSIyMCIgeT0iMzAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHBhdGggZD0iTTE0LDI2SDEydjRhMiwyLDAsMCwwLDIsMmg0VjMwSDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIg''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlUG9ydHJhaXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LjM0LDI2LjQ1YS44LjgsMCwwLDAtMS4xMywwLC43OS43OSwwLDAsMCwwLDEuMTNMMTgsMzEuMDlsMy43NC0zLjQ3YS43OS43OSwwLDAsMCwuMDUtMS4xMy44LjgsMCwwLDAtMS4xMywwTDE4Ljgs''@;'; put 'put ''MjguMTdWNy44M2wxLjg2LDEuNzJhLjguOCwwLDEsMCwxLjA4LTEuMTdMMTgsNC45MSwxNC4yNiw4LjM4YS43OS43OSwwLDAsMCwwLDEuMTMuOC44LDAsMCwwLDEuMTMsMEwxNy4yLDcuODNWMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJabTAsMzBIOFY0SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAs''@;'; put 'put ''Niw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0yMC41MiwyNi4zYTEsMSwwLDAsMSwxLjM2LDEuNDdMMTgsMzEuMzZsLTMuODgtMy41OWExLDEsMCwwLDEsMS4zNi0xLjQ3TDE3LDI3LjcxVjguMjlMMTUuNDgsOS43YTEsMSwwLDAsMS0xLjM2''@;'; put 'put ''LTEuNDdMMTgsNC42NGwzLjg4LDMuNTlhMSwxLDAsMCwxLC4wNSwxLjQxLDEsMSwwLDAsMS0uNzMuMzIsMSwxLDAsMCwxLS42OC0uMjZMMTksOC4yOVYyNy43MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVRyZWVWaWV3PSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwzMkgxMWExLDEsMCwwLDEtMS0xVjI3YTEsMSwwLDAsMSwxLTFoNGExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDE1LDMyWm0tMy0yaDJWMjhIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MTUsMTZIMTFhMSwxLDAsMCwwLTEsMXYxLjJINS44VjEySDdhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCw3LDZIM0ExLDEsMCwwLDAsMiw3djRhMSwxLDAsMCwwLDEsMUg0LjJWMjkuOGg2LjM2YS44LjgsMCwwLDAsMC0xLjZINS44VjE5LjhIMTBWMjFhMSwxLDAsMCwwLDEsMWg0YTEsMSww''@;'; put 'put ''LDAsMCwxLTFWMTdBMSwxLDAsMCwwLDE1LDE2Wk00LDhINnYySDRaTTE0LDIwSDEyVjE4aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzQsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzNBMSwxLDAsMCwwLDM0LDlaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsMThIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxyZWN0IHg9IjEwIiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAt''@;'; put 'put ''MSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44SDExYS44LjgsMCwxLDAsMC0xLjZINS44VjE5LjhIMTBWMjFhMSwxLDAsMCwwLDEsMWg0YTEsMSwwLDAsMCwxLTFWMTdBMSwxLDAsMCww''@;'; put 'put ''LDE1LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOEgxMHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCww''@;'; put 'put ''LTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMywyOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYj0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjguMDksOS43NGE0LDQsMCwwLDAtMS4xNi4xOWMtLjE5LTEuMjQtMS41NS0yLjE4LTMuMjctMi4xOEE0LDQsMCwwLDAsMjIuMTMsOCwzLjM3LDMuMzcsMCwwLDAsMTksNi4zYTMuNDUsMy40NSwwLDAsMC0yLjg3LDEuMzIsMy42NSwzLjY1LDAsMCwwLTEuODkt''@;'; put 'put ''LjUxQTMuMDUsMy4wNSwwLDAsMCwxMSw5Ljg5di45MWMtMS4wNi40LTQuMTEsMS44LTQuOTEsNC44NHMuMzQsOCwyLjY5LDExLjc4YTI1LjIxLDI1LjIxLDAsMCwwLDUuOSw2LjQxLjkuOSwwLDAsMCwuNTMuMTdIMjUuNTVhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAs''@;'; put 'put ''My43NS02LjEzQTI1LjgsMjUuOCwwLDAsMCwzMS40MSwxOHYtNS41QTMuMDgsMy4wOCwwLDAsMCwyOC4wOSw5Ljc0Wk0yOS42MSwxOGEyNCwyNCwwLDAsMS0xLjQ3LDkuMTVBMTIuNDYsMTIuNDYsMCwwLDEsMjUuMiwzMi4ySDE1LjQ3YTIzLjc1LDIzLjc1LDAsMCwxLTUuMi01LjcyYy0yLjM3''@;'; put 'put ''LTMuODYtMy04LjIzLTIuNDgtMTAuMzlBNS43LDUuNywwLDAsMSwxMSwxMi43NnY3LjY1YS45LjksMCwwLDAsMS44LDBWOS44OWMwLS40Ny41OS0xLDEuNDYtMXMxLjQ5LjUyLDEuNDksMXY1LjcyaDEuOFY4LjgxYzAtLjI4LjU4LS43MSwxLjQ2LS43MXMxLjUzLjQ4LDEuNTMuNzV2Ni44OWgx''@;'; put 'put ''LjhWMTBsLjE3LS4xMmEyLjEsMi4xLDAsMCwxLDEuMTgtLjMyYy45MywwLDEuNS40NCwxLjUuNjhsMCw2LjVIMjdWMTEuODdhMS45MSwxLjkxLDAsMCwxLDEuMTItLjMzYy44NiwwLDEuNTIuNTEsMS41Mi45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVDdXJzb3JIYW5kT3Blbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDYsOC41N0EzLjExLDMuMTEsMCwwLDAsMjcsNS43NWEzLjE5LDMuMTksMCwwLDAtNC42Ni0yLjY0LDMuMjksMy4yOSwwLDAsMC02LjQyLS43NiwzLjIzLDMuMjMsMCwwLDAtMS42Ni0u''@;'; put 'put ''NDZBMy4yNywzLjI3LDAsMCwwLDExLDUuMThWMTcuODRjLTEuMjgtMS42LTIuNTMtMy4xOC0yLjcyLTMuNDVBMy4xOSwzLjE5LDAsMCwwLDUuNTYsMTIuOWEzLjM3LDMuMzcsMCwwLDAtMy40NywzLjQ4QzIuMTgsMTguMTgsNS42NiwyNC41NCw4LDI4YzMuNTQsNS4yNCw2LjkyLDYsNy4wNyw2''@;'; put 'put ''bC4xOCwwSDI1LjU5YS45Mi45MiwwLDAsMCwuNTUtLjE5LDEzLjEzLDEzLjEzLDAsMCwwLDMuNzUtNi4xM2MxLTMuMDksMS41My03LjUzLDEuNTgtMTMuNTZaTTI4LjE4LDI3LjEyYTEyLjQ2LDEyLjQ2LDAsMCwxLTIuOTQsNS4wOEgxNS4zM2MtLjQ3LS4xNC0zLjA3LTEuMS01Ljg3LTUuMjVT''@;'; put 'put ''My45NCwxNy4yNywzLjg5LDE2LjI5YTEuNSwxLjUsMCwwLDEsLjQ1LTEuMTMsMS41MiwxLjUyLDAsMCwxLDEuMTQtLjQ2LDEuNDMsMS40MywwLDAsMSwxLjMyLjcxYy4yOS40MywyLjM2LDMsMy41Nyw0LjUzTDEyLjgsMTguM1Y1LjE4YTEuNDgsMS40OCwwLDEsMSwyLjk1LDBWMTYuMzJoMS44''@;'; put 'put ''di0xM2ExLjUxLDEuNTEsMCwwLDEsMywwVjE2LjQ1aDEuOFY2YTEuNDMsMS40MywwLDEsMSwyLjg1LDBWMTcuNDRIMjdWOC41NGExLjMzLDEuMzMsMCwwLDEsMi42NSwwdjUuNTVDMjkuNjIsMjAsMjkuMTQsMjQuMjEsMjguMTgsMjcuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlRmlsZVppcD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsMzAuMlYxMmwtOC4xLTcuOUg3LjhDNi44LDQuMSw2LDQuOSw2LDZjMCwwLDAsMCwwLDB2MjQuMmMwLDEsMC43LDEuOCwxLjcsMS44YzAsMCwwLjEsMCwwLjEsMGgyMC4z''@;'; put 'put ''XG5cdFx0YzEsMCwxLjgtMC43LDEuOC0xLjdDMzAsMzAuMywzMCwzMC4yLDMwLDMwLjJ6IE0yMiw2LjZsNS42LDUuNEgyMlY2LjZ6IE0yOCwzMEg3LjlMOCw2aDEydjhoOFYzMHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNGMw''@;'; put 'put ''LDEuNywxLjMsMywzLDNzMy0xLjMsMy0zdi00aC02VjI0eiBNMTMuNCwyNHYtMi42aDMuMlYyNGMwLjEsMC45LTAuNiwxLjctMS41LDEuN2MtMC45LDAuMS0xLjctMC42LTEuNy0xLjVcblx0XHRDMTMuNCwyNC4yLDEzLjQsMjQuMSwxMy40LDI0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LjIsOWMwLTAuNi0wLjQtMS0xLTFIMTV2MmgyLjJDMTcuOCwxMCwxOC4yLDkuNiwxOC4yLDl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTIuNywxMGMtMC42LDAtMSwwLjQt''@;'; put 'put ''MSwxczAuNCwxLDEsMUgxNXYtMkgxMi43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE3LjIsMTRjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiIC8+PHBhdGggZD0iTTExLjcsMTVjMCwwLjYsMC40LDEsMSwxSDE1di0yaC0yLjNDMTIuMiwxNCwxMS43LDE0LjQsMTEuNywxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNy4yLDE4YzAuNiwwLDEtMC40LDEtMXMtMC40''@;'; put 'put ''LTEtMS0xSDE1djJIMTcuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0xNSwyNS42YzAuOSwwLDEuNi0wLjcsMS42LTEuNnYtMi42aC0zLjJWMjRDMTMuNCwyNC45LDE0LjEsMjUuNiwxNSwyNS42eiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjExLjlMMjEuOSw0eiBNMTgsMjRjMCwxLjctMS4zLDMtMywzXG5cdFx0cy0zLTEuMy0zLTN2''@;'; put 'put ''LTRoNlYyNHogTTE3LjIsMTJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MmgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2LTJoLTIuMmMtMC42LDAtMS0wLjQtMS0xXG5cdFx0czAuNC0xLDEtMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFzMC40LTEsMS0xSDE1''@;'; put 'put ''VjhoMi4yYzAuNiwwLDEsMC40LDEsMXMtMC40LDEtMSwxSDE1djJIMTcuMnogTTIxLjksMTJWNi41bDUuNyw1LjVIMjEuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUZpbHRlck9mZj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJN''@;'; put 'put ''MzQsNi40QzM0LDUuNiwzMy4zLDUsMzIuNSw1SDEwLjNsMiwySDMydjAuNmwtOS42LDkuNmwxLjQsMS40TDMzLjQsOUMzMy44LDguNiwzNCw4LjEsMzQsNy42VjYuNUMzNCw2LjUsMzQsNi40LDM0LDYuNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0yLjcsM2wyLDJoLTFDMi45LDQuOSwyLjEsNS41LDIsNi4zdjEuMWMwLDAuNSwwLjIsMSwwLjYsMS40TDE0LDIwLjJ2MTAuM2wxLjksMC44VjE5LjRMNCw3LjVWN2gyLjdMMjAsMjAuM3YxMi45bDIsMC44XG5cdFx0YzAsMCwwLDAsMC0wLjFWMjIuM2wxMC4xLDEwLjFs''@;'; put 'put ''MS40LTEuNEw0LjEsMS42TDIuNywzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIzLjksMTguNkwxMC4zLDUuMWgyMi4yQzMzLjMsNSwzNCw1LjYsMzQsNi40YzAsMCwwLDAsMCwwLjF2MS4xYzAsMC41LTAuMiwxLTAuNiwxLjRMMjMu''@;'; put 'put ''OSwxOC42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMuNSwzMUw0LjEsMS42TDIuNiwzbDIuMSwyLjFIMy41QzIuNyw1LDIsNS42LDIsNi40YzAsMCwwLDAsMCwwLjF2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuNXYxMC4xbDgs''@;'; put 'put ''My40VjIyLjRcblx0bDEwLjEsMTAuMUwzMy41LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUmVjeWNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNi40LDE3LjRjMC4yLDAuMSwwLjMsMC4xLDAuNSwwLjFjMC4yLDAsMC40''@;'; put 'put ''LTAuMSwwLjUtMC4xbDctNC4xYzAuMy0wLjIsMC41LTAuNSwwLjUtMC45YzAtMC40LTAuMi0wLjctMC41LTAuOUwxMS45LDEwXG5cdFx0TDE0LDYuMmMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEsNC41LTAuMyw1LjYsMS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC4zYzAsMCwwLDAsMC4x''@;'; put 'put ''LDBjMC40LTAuMywwLjUtMC45LDAuMy0xLjNcblx0XHRjLTAuNi0xLTEuNC0xLjktMi40LTIuNGMtMy0xLjYtNi43LTAuNi04LjMsMi40TDkuNiw5LjljLTAuMywwLjUtMC4xLDEuMSwwLjMsMS40bDIsMS4ybC00LDIuNFY4LjJjMC0wLjYtMC40LTEtMS0xXG5cdFx0QzYuNCw3LjMsNiw3Ljcs''@;'; put 'put ''Niw4LjN2OC4zQzYsMTYuOSw2LjIsMTcuMiw2LjQsMTcuNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4xLDIxbC0zLjUtNi4yYy0wLjEtMC4yLTAuNC0wLjQtMC42LTAuNWMtMC4zLTAuMS0wLjUsMC0wLjgsMC4xbC0yLjIsMS4z''@;'; put 'put ''VjExbDUuNSwzLjNjMC4xLDAsMC4xLDAuMSwwLjIsMC4xXG5cdFx0YzAuNSwwLjIsMS4xLDAsMS4zLTAuNWMwLjItMC41LDAtMS4xLTAuNS0xLjNsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwQzIzLjEsOC41LDIzLDguOCwyMyw5LjJ2OC4zYzAsMC40LDAuMSwwLjgsMC40LDFcblx0XHRj''@;'; put 'put ''MC4zLDAuMiwwLjcsMC4yLDEsMGwyLjktMS43bDMsNS4zYzAuNywxLjMsMC43LDIuOCwwLDQuMWMtMC42LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC41LDAtMS4yLDAuNC0xLjIsMVxuXHRcdGMwLjEsMC42LDAuNiwxLDEuMiwxaDAuOWMyLjEsMCw0LTEuMSw1LTIuOUMzMy4yLDI1LjIs''@;'; put 'put ''MzMuMiwyMi45LDMyLjEsMjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIuNCwyOC4ybC03LTQuMmMtMC4zLTAuMi0wLjctMC4yLTEsMGMtMC4zLDAuMi0wLjQsMC41LTAuNCwwLjl2My4zSDkuMWMtMS41LTAuMS0yLjktMC45LTMu''@;'; put 'put ''Ni0yLjNcblx0XHRjLTAuOC0xLjQtMC44LTMuMiwwLTQuNmMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLjEtMS4xLDQuNiwwLjEsNi42QzQuOSwyOC44LDcsMzAsOS4yLDMwSDE1XG5cdFx0YzAuNiwwLDEtMC40LDEtMXYtMi40bDQsMi40''@;'; put 'put ''bC01LjYsMy4zYy0wLjMsMC4yLTAuNSwwLjUtMC41LDAuOWMwLDAuNiwwLjUsMSwxLDFjMC4yLDAsMC4zLTAuMSwwLjUtMC4ybDctNC4yXG5cdFx0YzAuMi0wLjEsMC4zLTAuMiwwLjQtMC40QzIzLjEsMjksMjIuOSwyOC40LDIyLjQsMjguMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMC44LDMuMWMtMy0xLjYtNi43LTAuNi04LjQsMi40bC0yLjIsMy44bC0yLTEuMUM4LjIsOCw4LDgsNy45LDhDNy40LDgsNyw4LjQsNyw4Ljl2Ny4yYzAsMC4zLDAuMSwwLjYsMC40LDAuOFxuXHRcdGMwLjEsMC4xLDAuMywwLjEsMC40LDAu''@;'; put 'put ''MWMwLjIsMCwwLjMsMCwwLjQtMC4xbDYuMy0zLjZjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44TDEyLDEwLjNsMi4yLTMuOFxuXHRcdGMwLjQtMC43LDEtMS4zLDEuNy0xLjdjMi0xLjEsNC41LTAuMyw1LjYsMS43YzAuMywwLjUsMC45LDAuNiwxLjQsMC40''@;'; put 'put ''YzAuNS0wLjMsMC42LTAuOSwwLjQtMS40QzIyLjYsNC41LDIxLjgsMy42LDIwLjgsMy4xeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMiwyMS4xbC0zLTUuM2wyLjMtMS4zYzAuMy0wLjIsMC40LTAuNCwwLjQtMC44YzAtMC4zLTAuMi0w''@;'; put 'put ''LjYtMC40LTAuOGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFcblx0XHRjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXY3LjJjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMy0wLjEsMC40LTAuMWwyLjItMS4zbDMsNS4zXG5cdFx0''@;'; put 'put ''YzAuNywxLjIsMC43LDIuOCwwLDRjLTAuNywxLjItMS45LDEuOS0zLjIsMS45aC0wLjljLTAuNiwwLTEsMC40LTEsMWMwLDAuNiwwLjQsMSwxLDFoMC45YzIuMSwwLDQtMS4xLDUtM1xuXHRcdEMzMy4yLDI1LjMsMzMuMiwyMywzMi4yLDIxLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMS43LDI4LjRsLTYuMi0zLjZjLTAuMS0wLjEtMC4zLTAuMS0wLjQtMC4xYy0wLjUsMC0wLjksMC40LTAuOSwwLjl2Mi42SDkuM2MtMS41LDAtMi45LTAuOC0zLjYtMi4xXG5cdFx0Yy0wLjgtMS40LTAuOC0zLjEsMC00LjVjMC4zLTAuNSwwLjEt''@;'; put 'put ''MS4xLTAuNC0xLjRjLTAuNS0wLjMtMS4xLTAuMS0xLjQsMC40Yy0xLjIsMi0xLjIsNC41LDAsNi41YzEuMSwxLjksMy4xLDMuMSw1LjQsMy4xaDQuOHYyLjZcblx0XHRjMCwwLjMsMC4yLDAuNiwwLjQsMC44YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMSwwLDAuMywwLDAuNC0wLjFsNi4z''@;'; put 'put ''LTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOFxuXHRcdEMyMi4xLDI4LjgsMjEuOSwyOC41LDIxLjcsMjguNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZVRyZWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjYsMTEuN0My''@;'; put 'put ''OS4yLDUuOCwyNCwxLjcsMTgsMS43Yy03LjIsMC0xMyw1LjgtMTMsMTNjMCw2LjgsNS4zLDEyLjQsMTIsMTIuOXY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTV2LTJWMjJcblx0YzAsMCwwLDAsMC0wLjF2LTMuNmw0LjctNC43YzAuNC0wLjQsMC40LTEsMC0xLjRjLTAuNC0wLjQtMS0w''@;'; put 'put ''LjQtMS40LDBMMTksMTUuNnYtM2wtMy4zLTMuM2MtMC40LTAuNC0xLTAuNC0xLjQsMFxuXHRjLTAuNCwwLjQtMC40LDEsMCwxLjRsMi43LDIuN3Y2LjJsLTMuOC0zLjhjLTAuNC0wLjQtMS0wLjQtMS40LDBjLTAuNCwwLjQtMC40LDEsMCwxLjRsNS4yLDUuMnYzLjJjLTUuNi0wLjUtMTAtNS4y''@;'; put 'put ''LTEwLTEwLjlcblx0YzAtNi4xLDQuOS0xMSwxMS0xMXMxMSw0LjksMTEsMTFjMCw0LjktMy4zLDkuMi04LDEwLjZ2Mi4xQzI4LDI1LjcsMzIuMywxOC43LDMwLjYsMTEuN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQzEwLjgs''@;'; put 'put ''MS43LDQuOCw3LjMsNC41LDE0LjVDNC4yLDIxLjcsOS44LDI3LjcsMTcsMjh2LTUuMmwtNS4yLTUuMmMtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGwzLjgsMy44di02LjJsLTIuNy0yLjdjLTAuNC0wLjQtMC40LTEsMC0xLjRjMC40LTAu''@;'; put 'put ''NCwxLTAuNCwxLjQsMGMwLDAsMCwwLDAsMGwzLjMsMy4zdjNsMy4zLTMuM2MwLjQtMC40LDEtMC40LDEuNCwwXG5cdGMwLDAsMCwwLDAsMGMwLjQsMC40LDAuNCwxLDAsMS40TDE5LDE4LjhWMjhjNy4yLTAuMywxMi44LTYuMywxMi41LTEzLjVTMjUuMiwxLjcsMTgsMnoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDI4Yy0wLjMsMC0wLjYsMC0xLDB2NWMwLDAuNiwwLjQsMSwxLDFzMS0wLjQsMS0xdi01QzE4LjcsMjgsMTguMywyOCwxOCwyOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5D''@;'; put 'put ''bHJTaGFwZUZpc2g9KDAsYS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTEuNDkiIGN5PSIxNy41IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy40OCw5LjI5YTEsMSwwLDAsMC0xLDBjLTMuMzcsMi01LjkxLDUuODEt''@;'; put 'put ''Ni45LDcuNDVMMjQuODUsMThzLTEsMS42Mi0xLDEuNjJjLTEuNzYsMi40OS01LjEsNi4zNi04Ljc5LDYuMzYtNC42NSwwLTguNzUtNi4xNS05Ljg0LTcuOTQsMS4wOS0xLjc5LDUuMTgtNy45NCw5Ljg0LTcuOTQsMy41NCwwLDYuNzcsMy41OCw4LjU4LDYuMDdsLjI4LS40OHMuMzYtLjUxLjkz''@;'; put 'put ''LTEuMjVDMjIuNzIsMTEuNjQsMTkuMTgsOC4wNiwxNSw4LjA2Yy02LjU5LDAtMTEuNjcsOS4wNy0xMS44OCw5LjQ2TDIuODksMThsLjI3LjQ4Yy4yMS4zOSw1LjI5LDkuNDYsMTEuODgsOS40Niw1LjA2LDAsOS4yMi01LjM0LDExLThDMjYsMjAsMjcuMTgsMTgsMjcuMTgsMThoMGwuMDctLjEx''@;'; put 'put ''YTE4LjA2LDE4LjA2LDAsMCwxLDEuODgtMi43NXMwLDAsMCwwYTIwLjMxLDIwLjMxLDAsMCwxLDIuODYtM1YyMy44OGEyMC45MywyMC45MywwLDAsMS0zLjYxLTRsLS4xNi4yNmgwbC0xLDEuNTlhMTguNzQsMTguNzQsMCwwLDAsNS4yMSw0Ljk1LDEsMSwwLDAsMCwuNS4xNCwxLjEzLDEuMTMs''@;'; put 'put ''MCwwLDAsLjUtLjEzLDEsMSwwLDAsMCwuNS0uODdWMTAuMTZBMSwxLDAsMCwwLDMzLjQ4LDkuMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlRm9ybT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEsMTJIN2ExLDEsMCww''@;'; put 'put ''LDEtMS0xVjdBMSwxLDAsMCwxLDcsNkgyMWExLDEsMCwwLDEsMSwxdjRBMSwxLDAsMCwxLDIxLDEyWk04LDEwSDIwVjcuOTRIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMSwxNC4wOEg3YTEsMSwwLDAsMC0xLDFWMTlhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUgxOC4zNkwyMiwxNi4zVjE1LjA4QTEsMSwwLDAsMCwyMSwxNC4wOFpNMjAsMThIOFYxNkgyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMS4wNiwzMS41MXYtLjA2bC4zMi0xLjM5SDRWNGgyMFYxNC4yNUwyNiwxMi4z''@;'; put 'put ''NlYzYTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiwzVjMxYTEsMSwwLDAsMCwxLDFoOEEzLjQ0LDMuNDQsMCwwLDEsMTEuMDYsMzEuNTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIsMTkuMTdsLS43OC43OUExLDEsMCwwLDAs''@;'; put 'put ''MjIsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNiwyNi45NGExLDEsMCwwLDAsMSwxaDQuODRsLjMtMS4zLjEzLS41NSwwLS4wNUg4VjI0aDYuMzRsMi0ySDdhMSwxLDAsMCwwLTEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy40OSwxNi42NywzMC4xMiwxMy4zYTEuNjEsMS42MSwwLDAsMC0yLjI4LDBoMEwxNC4xMywyNy4wOSwxMywzMS45YTEuNjEsMS42MSwwLDAsMCwxLjI2LDEuOSwxLjU1LDEuNTUsMCwwLDAsLjMxLDAsMS4xNSwxLjE1LDAsMCww''@;'; put 'put ''LC4zNywwbDQuODUtMS4wN0wzMy40OSwxOWExLjYsMS42LDAsMCwwLDAtMi4yN1pNMTguNzcsMzAuOTFsLTMuNjYuODFMMTYsMjguMDksMjYuMjgsMTcuN2wyLjgyLDIuODJaTTMwLjIzLDE5LjM5bC0yLjgyLTIuODJMMjksMTVsMi44NCwyLjg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUZ1ZWw9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjEyLDM0SDUuOUEyLjgxLDIuODEsMCwwLDEsMywzMS4xOVY0Ljg2QTIuOSwyLjksMCwwLDEsNiwyLjA3SDIwLjIyQTIuNzIsMi43MiwwLDAsMSwyMyw0Ljg2VjMxLjE5''@;'; put 'put ''QTIuODIsMi44MiwwLDAsMSwyMC4xMiwzNFpNNS45LDRBLjg3Ljg3LDAsMCwwLDUsNC44NlYzMS4xOWEuODcuODcsMCwwLDAsLjg3Ljg3SDIwLjEyYS45NC45NCwwLDAsMCwuOTUtLjg3VjQuODZBLjk0Ljk0LDAsMCwwLDIwLjEyLDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjkuNTMsMzRBMy41LDMuNSwwLDAsMSwyNiwzMC41VjIzYTIsMiwwLDAsMC0yLTJIMjIuNTdhMSwxLDAsMCwxLDAtMkgyNGE0LDQsMCwwLDEsNCw0VjMwLjVhMS41LDEuNSwwLDAsMCwzLDBWMTcuM2wtMy4xMy03QTIuMjksMi4yOSwwLDAsMCwyNS44''@;'; put 'put ''LDloLS43M2ExLDEsMCwxLDEsMC0yaC43M2E0LjMsNC4zLDAsMCwxLDMuOTMsMi41NWwzLjIxLDcuMTZhMSwxLDAsMCwxLC4wOS40MVYzMC41QTMuNSwzLjUsMCwwLDEsMjkuNTMsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgs''@;'; put 'put ''OUg4QTEsMSwwLDEsMSw4LDdIMThhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwxM0g4QTEsMSwwLDEsMSw4LDExSDE4QTEsMSwwLDEsMSwxOCwxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNSwxMi4wOGExLDEsMCwwLDEtMS0xdi02YTEsMSwwLDAsMSwyLDB2NkExLDEsMCwwLDEsMjUsMTIuMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz4nKSxsLkNsclNoYXBlU25vd2ZsYWtlPSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wNSwzMy42MWExLDEsMCwwLDEtMS0xVjMuMzdhMSwxLDAsMSwxLDEuOTUsMFYzMi42M0ExLDEsMCwwLDEsMTguMDUsMzMuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTguMDYsMTAuMDcs''@;'; put 'put ''MTQuNTIsNi41NGExLDEsMCwwLDEsMC0xLjQxLDEsMSwwLDAsMSwxLjQxLDBsMi4xMywyLjEyLDIuMTItMi4xMmExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAuODUsMzEu''@;'; put 'put ''MTdhMSwxLDAsMCwxLS43LS4yOUwxOCwyOC43NiwxNS45LDMwLjg4YTEsMSwwLDAsMS0xLjQxLDAsMSwxLDAsMCwxLDAtMS40MkwxOCwyNS45M2wzLjU0LDMuNTNhMSwxLDAsMCwxLDAsMS40MkExLDEsMCwwLDEsMjAuODUsMzEuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuOTIsMjYuNWExLDEsMCwwLDEtLjUtLjEzbC0yNi0xNUExLDEsMCwwLDEsNC4wNywxMGExLDEsMCwwLDEsMS4zNy0uMzZsMjYsMTVhMSwxLDAsMCwxLS41LDEuODdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNiwxNS4zN2ExLDEsMCwwLDEtLjI2LTJsMi45LS43OEw3Ljg0LDkuNzNhMSwxLDAsMSwxLDEuOTMtLjUyTDExLjA3LDE0LDYuMjQsMTUuMzNBLjgyLjgyLDAsMCwxLDYsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjcuMDUsMjcuNTRhMSwxLDAsMCwxLTEtLjc1TDI0LjgsMjJsNC44Mi0xLjNhMSwxLDAsMSwxLC41MiwxLjkzbC0yLjkuNzguNzgsMi45YTEsMSwwLDAsMS0uNzEsMS4yMkEuNzUuNzUsMCwwLDEsMjcuMDUsMjcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz48cGF0aCBkPSJNNC45NCwyNi41YTEsMSwwLDAsMS0uNS0xLjg3bDI2LTE1YTEsMSwwLDAsMSwxLjM2LjM2LDEsMSwwLDAsMS0uMzYsMS4zN2wtMjYsMTVBMSwxLDAsMCwxLDQuOTQsMjYuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik04LjgxLDI3LjU0YS43NS43NSwwLDAsMS0uMjYsMCwxLDEsMCwwLDEtLjcxLTEuMjJsLjc4LTIuOS0yLjktLjc4QTEsMSwwLDAsMSw1LDIxLjM4YTEsMSwwLDAsMSwxLjIzLS43MUwxMS4wNywyMmwtMS4zLDQuODJBMSwxLDAsMCwxLDguODEsMjcuNTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz48cGF0aCBkPSJNMjkuODgsMTUuMzdhLjgyLjgyLDAsMCwxLS4yNiwwTDI0LjgsMTRsMS4yOS00LjgzQTEsMSwwLDEsMSwyOCw5LjczbC0uNzgsMi44OSwyLjkuNzhhMSwxLDAsMCwxLS4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+JyksbC5DbHJTaGFwZVRhYmxlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik04LDM0YTEsMSwwLDAsMS0xLTFWMi45MmExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSw4LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE3LDMzLjkyYTEsMSwwLDAsMS0xLTFWOS4xYTEsMSwwLDEsMSwyLDBWMzIuOTJBMSwxLDAsMCwxLDE3LDMzLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LDM0YTEsMSwwLDAsMS0xLTFW''@;'; put 'put ''OWExLDEsMCwwLDEsMiwwVjMzQTEsMSwwLDAsMSwyNiwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMy4xMSwxOGgtMjVhMSwxLDAsMSwxLDAtMmgyNWExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLjEsMjYuOTRIOC4xQTEsMSwwLDEsMSw4LjEsMjVoMjVhMSwxLDAsMSwxLDAsMS45MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMyw4LjkySDNBMSwxLDAsMSwxLDMsN0gzM2Ex''@;'; put 'put ''LDEsMCwxLDEsMCwxLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZVZvbHVtZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuODgsMzJIMTJhNCw0LDAsMCwxLTQtNFYxMS40NkwyLjMxLDUuNzdhMSwxLDAsMCwxLS4y''@;'; put 'put ''Mi0xLjA5QTEsMSwwLDAsMSwzLDQuMDZIMjguODZhMSwxLDAsMCwxLDEsMVYyOEE0LDQsMCwwLDEsMjUuODgsMzJaTTUuNDMsNmw0LjI4LDQuMzRhLjc1Ljc1LDAsMCwxLC4yMS42M3YxN0EyLjEzLDIuMTMsMCwwLDAsMTIsMzBIMjUuODhBMi4xLDIuMSwwLDAsMCwyOCwyOFY2WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDE2YTEsMSwwLDAsMS0xLTFWNkgyOC44NmEuOTIuOTIsMCwwLDEtMS0uOSwxLDEsMCwwLDEsMS0xSDMzYTEsMSwwLDAsMSwxLDFWMTVBMSwxLDAsMCwxLDMzLDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDExSDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNCwxNUgyMWExLDEsMCwxLDEsMC0ySDI0YTEsMSww''@;'; put 'put ''LDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQsMTlIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDI3SDE4YTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0yNCwyM0gyMUExLDEsMCwxLDEsMjEsMjFIMjRBMSwxLDAsMSwxLDI0LDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTciIC8+JyksbC5DbHJTaGFwZUNyb3NzaGFpcnM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI5QTExLDExLDAsMSwxLDI5LDE4LDExLDExLDAsMCwxLDE4LDI5Wk0xOCw5YTksOSwwLDEsMCw5LDlBOSw5LDAsMCwwLDE4LDlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjNhNSw1LDAsMSwxLDUtNUE1LDUsMCwwLDEsMTgsMjNabTAtOGEzLDMsMCwxLDAsMywzQTMsMywwLDAsMCwxOCwxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0xOCw5YTEsMSwwLDAsMS0xLTFWMi44YTEsMSwwLDAsMSwyLDBWOEExLDEsMCwwLDEsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjI4YTEsMSwwLDAsMSwyLDB2NUExLDEsMCwwLDEs''@;'; put 'put ''MTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNOCwxOUgzLjE3YTEsMSwwLDAsMSwwLTJIOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjEs''@;'; put 'put ''MTlIMjhhMSwxLDAsMCwxLDAtMmg1LjFhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLGwuQ2xyU2hhcGVDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAs''@;'; put 'put ''MCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVEb3RDaXJjbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDExYTcsNywwLDEsMS03LDcsNyw3LDAsMCwxLDctNyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg''@;'; put 'put ''ZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlQmV0YT0oMCxhLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBkPSJNNy4yMSwxNC4wN2gzYTEuNjEsMS42MSwwLDAsMSwxLjgxLDEuNSwxLjQ0LDEuNDQsMCwwLDEtLjg0LDEuMzQsMS42NywxLjY3LDAsMCwxLDEuMSwxLjUzLDEuNzUsMS43NSwwLDAsMS0yLDEuNjNINy4yMVptMi43MSwyLjQyYy40OCwwLC44Mi0uMjguODItLjY3cy0u''@;'; put 'put ''MzQtLjY1LS44Mi0uNjVIOC40OXYxLjMyWm0uMiwyLjQ4YS43NS43NSwwLDEsMCwwLTEuNDdIOC40OVYxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xNC41NSwxNS4yM3YxLjJoM3YxLjE2aC0zdjEuMzJoMy4zM3YxLjE2SDEz''@;'; put 'put ''LjI2di02aDQuNjJ2MS4xNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMC40MSwxNS4yM0gxOC41NFYxNC4wN2g1djEuMTZIMjEuN3Y0Ljg0SDIwLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiLz5cbiAgPHBhdGggZD0iTTI4LDE5LjEySDI1LjMybC0uMzguOTVIMjMuNWwyLjQ0LTZoMS40NGwyLjQ1LDZIMjguMzhaTTI3LjU1LDE4bC0uODktMi4xOUwyNS43NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik04LjA2''@;'; put 'put ''LDMwYS44NC44NCwwLDAsMS0uMzgtLjA4QTEsMSwwLDAsMSw3LjA2LDI5VjI1aC00YTEsMSwwLDAsMS0xLTFWMTBhMSwxLDAsMCwxLDEtMWgzMGExLDEsMCwwLDEsMSwxVjI0YTEsMSwwLDAsMS0xLDFIMTMuNDhMOC43NywyOS43MUExLDEsMCwwLDEsOC4wNiwzMFptLTQtN2g0YTEsMSwwLDAs''@;'; put 'put ''MSwxLDF2Mi41OWwzLjMtMy4zYTEsMSwwLDAsMSwuNy0uMjloMTlWMTFoLTI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cblxuICA8cG9seWdvbiBwb2ludHM9IjI1LjgsMTggMjcuNSwxOCAyNi43LDE1LjgiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiLz5cblx0PHBhdGggZD0iTTEwLjQsMTcuNWMtMC4xLDAtMC4yLDAtMC4zLDBIOC41VjE5bDEuNiwwYzAuNCwwLjEsMC44LTAuMiwwLjktMC42QzExLjEsMTgsMTAuOCwxNy42LDEwLjQsMTcuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIi''@;'; put 'put ''Lz5cblx0PHBhdGggZD0iTTEwLjcsMTUuOGMwLTAuNC0wLjMtMC43LTAuOC0wLjdIOC41djEuM2gxLjRDMTAuNCwxNi41LDEwLjcsMTYuMiwxMC43LDE1Ljh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG5cdDxwYXRoIGQ9Ik0zMy4xLDloLTMwYy0wLjYsMC0x''@;'; put 'put ''LDAuNC0xLDF2MTRjMCwwLjYsMC40LDEsMSwxaDR2NGMwLDAuNCwwLjIsMC44LDAuNiwwLjlDNy44LDMwLDcuOSwzMCw4LjEsMzBjMC4zLDAsMC41LTAuMSwwLjctMC4zXG5cdFx0bDQuNy00LjdoMTkuNmMwLjYsMCwxLTAuNCwxLTFWMTBDMzQuMSw5LjQsMzMuNiw5LDMzLjEsOXogTTEwLjQs''@;'; put 'put ''MjAuMWMtMC4xLDAtMC4xLDAtMC4yLDBINy4ydi02aDNjMC45LTAuMSwxLjcsMC41LDEuOCwxLjRcblx0XHRjMCwwLDAsMC4xLDAsMC4xYzAsMC42LTAuMywxLjEtMC44LDEuM2MwLjYsMC4yLDEuMSwwLjgsMS4xLDEuNUMxMi4yLDE5LjQsMTEuNCwyMC4xLDEwLjQsMjAuMXogTTE3LjksMTUu''@;'; put 'put ''MmgtMy4zdjEuMmgzdjEuMmgtM3YxLjNcblx0XHRoMy4zdjEuMmgtNC42di02aDQuNlYxNS4yeiBNMjEuNywyMC4xaC0xLjN2LTQuOGgtMS45di0xLjJoNXYxLjJoLTEuOFYyMC4xeiBNMjguNCwyMC4xbC0wLjQtMWgtMi43bC0wLjQsMWgtMS40bDIuNC02aDEuNGwyLjUsNlxuXHRcdEgyOC40''@;'; put 'put ''eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuJyksbC5DbHJTaGFwZUZpcnN0QWlkPSgwLGEuY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNMzIsNkgyMy45MVY0LjVBMi41LDIuNSwwLDAsMCwyMS40MSwyaC03YTIuNSwyLjUsMCwwLDAtMi41LDIuNVY2SDRB''@;'; put 'put ''MiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTMuOTEsNC41YS41LjUsMCwwLDEsLjUtLjVoN2EuNS41LDAsMCwxLC41LjVWNmgtOFpNNCwyOFY4SDMyVjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIwLjE1LDI1LjJIMTYuNzRhMS4zLDEuMywwLDAsMS0xLjMtMS4zVjIxLjJoLTIuN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMTYuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMi43VjEyLjVhMS4zLDEuMywwLDAsMSwxLjMtMS4zaDMuNDFhMS4zLDEu''@;'; put 'put ''MywwLDAsMSwxLjI5LDEuM3YyLjdoMi43MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjMuNGExLjMsMS4zLDAsMCwxLTEuMjksMS4zSDIxLjQ0djIuN0ExLjMsMS4zLDAsMCwxLDIwLjE1LDI1LjJaTTE3LDIzLjZoMi44MXYtNGg0VjE2LjhoLTR2LTRIMTd2NEgxM3YyLjhoNFptNy4xMS02Ljha''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk0yNC42NCwxOS45YS41LjUsMCwwLDEtLjUuNWgtMy41djMuNWEuNS41LDAsMCwxLS41LjVoLTMuNGEuNS41LDAsMCwxLS41LS41VjIwLjRoLTMuNWEu''@;'; put 'put ''NS41LDAsMCwxLS41LS41VjE2LjVhLjUuNSwwLDAsMSwuNS0uNWgzLjVWMTIuNWEuNS41LDAsMCwxLC41LS41aDMuNGEuNS41LDAsMCwxLC41LjVWMTZoMy41YS41LjUsMCwwLDEsLjUuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5DbHJTaGFw''@;'; put 'put ''ZUNvbG9yUGFsZXR0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEuNTQsMjMuMDVhMy4yMiwzLjIyLDAsMCwxLTMtMS43N0EzLjA1LDMuMDUsMCwwLDEsMTguNSwxOWEzLjc0LDMuNzQsMCwwLDEsMS45NS0yLjA2QTMuNCwzLjQsMCwwLDEsMjUsMTguM2EzLDMsMCwwLDEsLjA4LDIu''@;'; put 'put ''MzIsMy42OSwzLjY5LDAsMCwxLTIsMi4wN0EzLjg1LDMuODUsMCwwLDEsMjEuNTQsMjMuMDVabS41NC00LjkxYTIuNDEsMi40MSwwLDAsMC0xLC4yMWgwQTIuMTMsMi4xMywwLDAsMCwyMCwxOS41MWExLjM3LDEuMzcsMCwwLDAsMCwxLjA5LDEuODEsMS44MSwwLDAsMCwyLjQ1LjYzLDIuMSwy''@;'; put 'put ''LjEsMCwwLDAsMS4xMi0xLjE1LDEuNCwxLjQsMCwwLDAsMC0xLjFBMS41OSwxLjU5LDAsMCwwLDIyLjA4LDE4LjE0Wm0tMS4yOS0uNTJoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xNi4xOSwzMy44N0ExMy43MiwxMy43Miww''@;'; put 'put ''LDAsMSw2LjQsMzAsMTMuODYsMTMuODYsMCwwLDEsMiwyMGMwLTQuNCwyLTguODQsNS42OC0xMi41YTE4LjIsMTguMiwwLDAsMSwxMy4xLTUuMzdoLjEyYzMuMzMsMCw2Ljg1LDEuNDksNy4yNCw0LjczLjIxLDEuNzctLjU5LDMuNDctMS4yOSw1LS41NSwxLjE3LTEuMTEsMi4zOS0uNzIsMi44''@;'; put 'put ''MXMxLC4xMiwyLjA5LS4yYTYuMjcsNi4yNywwLDAsMSwzLjM4LS4zNiwzLDMsMCwwLDEsMS44NywxLjU2Yy45NCwxLjgzLjQ3LDQuNjctLjIzLDYuNTRoMEExNy4zOCwxNy4zOCwwLDAsMSwyOSwyOC43NCwxOS40MywxOS40MywwLDAsMSwxNi4xOSwzMy44N1pNMjAuNzgsNC4xNkExNi4yMiwx''@;'; put 'put ''Ni4yMiwwLDAsMCw5LjA5LDlDNS43OSwxMi4yMyw0LDE2LjE2LDQsMjBBMTEuOTIsMTEuOTIsMCwwLDAsNy44LDI4LjZjNS4zOCw1LjI1LDE0LjYyLDMuNTUsMTkuODctMS4zM2ExNS41MiwxNS41MiwwLDAsMCwzLjctNS43NWgwYy43LTEuOS44NC0zLjkyLjMyLTQuOTJhMSwxLDAsMCwwLS42''@;'; put 'put ''MS0uNTUsNC44Niw0Ljg2LDAsMCwwLTIuMjkuMzVjLTEuMzEuMzktMywuODktNC4xMi0uMzUtMS4zMi0xLjQtLjQ2LTMuMjUuMzctNWE3LjkzLDcuOTMsMCwwLDAsMS4xMS0zLjljLS4yNC0yLTIuODEtMi45NS01LjI2LTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuODcsMjYuNjVBMi41OSwyLjU5LDAsMCwwLDIyLjM1LDI1TDIyLDI0LjlsLS40NiwxLjUzLjE2LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43MS0uMDctMS44OC0uNjZsLTEuNTQuNDNoMGEyLjgzLDIuODMsMCww''@;'; put 'put ''LDAsMi44NCwxLjkxLDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMjMuODcsMjYuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTUuMDcsMjUuNTloMGEyLjczLDIuNzMsMCwwLDAtMi4yNC0xLjg0bC0uMjcsMS41OGExLjEy''@;'; put 'put ''LDEuMTIsMCwwLDEsMSwuN2MuMTcuNTktLjQxLDEuMy0xLjI2LDEuNTRBMS45MiwxLjkyLDAsMCwxLDExLDI3LjUyYTEsMSwwLDAsMS0uNi0uNjFzMC0uMDksMC0uMTNsLTEuNTguMTZhMiwyLDAsMCwwLC4wNi40MUEyLjU5LDIuNTksMCwwLDAsMTAuMzcsMjlhMy4zNiwzLjM2LDAsMCwwLDEu''@;'; put 'put ''MzEuMjUsMy43LDMuNywwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTUuMDcsMjUuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTkuMTdhMi41OSwyLjU5LDAsMCwwLTEuNTItMS42NSwyLjkxLDIuOTEsMCwwLDAtLjUt''@;'; put 'put ''LjE2bC0uMzcsMS41NmExLjIxLDEuMjEsMCwwLDEsLjI1LjA4LDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NXMtMS43MS0uMDYtMS44OC0uNjZhLjg2Ljg2LDAsMCwxLDAtLjM5bC0xLjU2LS4zNGEyLjQsMi40LDAsMCwwLDAsMS4xNkEyLjgzLDIuODMsMCwwLDAsNy40''@;'; put 'put ''LDIyLjgzYTQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTAuNzgsMTkuMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTMuNDUsMTEuNGEyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDEuMTcsMS4xNywwLDAsMC0uMi0uMDZs''@;'; put 'put ''LS41MiwxLjUxYS4zOC4zOCwwLDAsMSwuMSwwLDEsMSwwLDAsMSwuNi42Yy4xNy42LS40MSwxLjMxLTEuMjYsMS41NWEyLjA2LDIuMDYsMCwwLDEtMS4yOC0uMDUsMSwxLDAsMCwxLS42LS42MS44NS44NSwwLDAsMSwwLS4zMmwtMS41OC0uMTlhMi4zLDIuMywwLDAsMCwuMDYuOTRBMi41Niwy''@;'; put 'put ''LjU2LDAsMCwwLDguNzUsMTQuOGEzLjM3LDMuMzcsMCwwLDAsMS4zMS4yNiw0LDQsMCwwLDAsMS0uMTRBMywzLDAsMCwwLDEzLjQ1LDExLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICA8cGF0aCBkPSJNMjEsNi43OGEyLjU2LDIuNTYsMCwwLDAt''@;'; put 'put ''MS41Mi0xLjY1bC0uMy0uMUwxOC43LDYuNTZsLjE1LDBhMSwxLDAsMCwxLC42LjYxYy4xNy42LS40MSwxLjMtMS4yNiwxLjU0cy0xLjcxLS4wNi0xLjg4LS42NWEuOS45LDAsMCwxLC4wNi0uNThMMTQuODksNi45YTIuNDcsMi40NywwLDAsMC0uMTIsMS42MywyLjg0LDIuODQsMCwwLDAsMi44''@;'; put 'put ''NCwxLjkxLDMuNTgsMy41OCwwLDAsMCwxLS4xNUEzLDMsMCwwLDAsMjEsNi43OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03Ii8+XG5cbiAgPHBhdGggZD0iTTMyLjIzLDE0Ljg5Yy0yLjEtLjU2LTQuOTMsMS44LTYuMzQuMy0xLjcxLTEuODIsMi4yNy01LjUz''@;'; put 'put ''LDEuODYtOC45Mi0uMzMtMi43OC0zLjUxLTQuMDgtNi42Ni00LjFBMTguNSwxOC41LDAsMCwwLDcuNzQsNy41OWMtNi42NCw2LjU5LTguMDcsMTYtMS4zNywyMi40OCw2LjIxLDYsMTYuNjEsNC4yMywyMi42Ny0xLjRhMTcuNzMsMTcuNzMsMCwwLDAsNC4yMi02LjU0QzM0LjM0LDE5LjIzLDM0''@;'; put 'put ''LjQ0LDE1LjQ5LDMyLjIzLDE0Ljg5Wk05LjQsMTAuNTdhMi4yMywyLjIzLDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MSwyLjUzQTIuMjIsMi4yMiwwLDAsMSw3LjU5LDEzLjEsMi4yMywyLjIzLDAsMCwxLDkuNCwxMC41N1pNNS4wNywyMC44MmEyLjIyLDIuMjIsMCwwLDEs''@;'; put 'put ''MS44Mi0yLjUzQTIuMjIsMi4yMiwwLDAsMSw5Ljc1LDE5LjUsMi4yMywyLjIzLDAsMCwxLDcuOTQsMjIsMi4yNCwyLjI0LDAsMCwxLDUuMDcsMjAuODJabTcsOC4zM2EyLjIyLDIuMjIsMCwwLDEtMi44Ny0xLjIxQTIuMjMsMi4yMywwLDAsMSwxMSwyNS40MWEyLjIzLDIuMjMsMCwwLDEsMi44''@;'; put 'put ''NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwxMiwyOS4xNVpNMTUsOC4yNmEyLjIzLDIuMjMsMCwwLDEsMS44MS0yLjUzLDIuMjQsMi4yNCwwLDAsMSwyLjg3LDEuMjEsMi4yMiwyLjIyLDAsMCwxLTEuODIsMi41M0EyLjIxLDIuMjEsMCwwLDEsMTUsOC4yNlptNS44MiwyMi4xOWEyLjIyLDIuMjIs''@;'; put 'put ''MCwwLDEtMi44Ny0xLjIxLDIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMUEyLjIyLDIuMjIsMCwwLDEsMjAuNzgsMzAuNDVabTUtMTAuNDZhMy4yLDMuMiwwLDAsMS0xLjY5LDEuNzYsMy41MywzLjUzLDAsMCwxLTEuNC4zLDIuNzgsMi43OCwwLDAs''@;'; put 'put ''MS0yLjU2LTEuNSwyLjQ5LDIuNDksMCwwLDEtLjA3LTIsMy4yLDMuMiwwLDAsMSwxLjY5LTEuNzYsMywzLDAsMCwxLDQsMS4yQTIuNTQsMi41NCwwLDAsMSwyNS43OSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxsLkVzc2VudGlhbFNoYXBlcz17ImFk''@;'; put 'put ''ZC10ZXh0IjpsLkNsclNoYXBlQWRkVGV4dCwiYWxhcm0tb2ZmIjpsLkNsclNoYXBlQWxhcm1PZmYscGluYm9hcmQ6bC5DbHJTaGFwZVBpbmJvYXJkLG5ldzpsLkNsclNoYXBlTmV3LCJidWJibGUtZXhjbGFtYXRpb24iOmwuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbiwiZ3JpZC12aWV3Ijps''@;'; put 'put ''LkNsclNoYXBlR3JpZFZpZXcsImN1cnNvci1hcnJvdyI6bC5DbHJTaGFwZUN1cnNvckFycm93LCJjdXJzb3ItaGFuZCI6bC5DbHJTaGFwZUN1cnNvckhhbmQsImN1cnNvci1oYW5kLWNsaWNrIjpsLkNsclNoYXBlQ3Vyc29ySGFuZENsaWNrLCJjdXJzb3ItaGFuZC1ncmFiIjpsLkNsclNoYXBl''@;'; put 'put ''Q3Vyc29ySGFuZEdyYWIsImN1cnNvci1oYW5kLW9wZW4iOmwuQ2xyU2hhcGVDdXJzb3JIYW5kT3BlbiwiY3Vyc29yLW1vdmUiOmwuQ2xyU2hhcGVDdXJzb3JNb3ZlLCJmaXJzdC1haWQiOmwuQ2xyU2hhcGVGaXJzdEFpZCxyZXNpemU6bC5DbHJTaGFwZVJlc2l6ZSxvYmplY3RzOmwuQ2xyU2hh''@;'; put 'put ''cGVPYmplY3RzLGJvb2s6bC5DbHJTaGFwZUJvb2ssYXN0ZXJpc2s6bC5DbHJTaGFwZUFzdGVyaXNrLGJ1ZzpsLkNsclNoYXBlQnVnLHNjaXNzb3JzOmwuQ2xyU2hhcGVTY2lzc29ycyx0aGVybW9tZXRlcjpsLkNsclNoYXBlVGhlcm1vbWV0ZXIscGVuY2lsOmwuQ2xyU2hhcGVQZW5jaWwsbm90''@;'; put 'put ''ZTpsLkNsclNoYXBlTm90ZSxyZWZyZXNoOmwuQ2xyU2hhcGVSZWZyZXNoLHN5bmM6bC5DbHJTaGFwZVN5bmMsInZpZXctbGlzdCI6bC5DbHJTaGFwZVZpZXdMaXN0LCJ2aWV3LWNhcmRzIjpsLkNsclNoYXBlVmlld0NhcmRzLCJ0cmVlLXZpZXciOmwuQ2xyU2hhcGVUcmVlVmlldyxsaWdodGJ1''@;'; put 'put ''bGI6bC5DbHJTaGFwZUxpZ2h0YnVsYixkb3dubG9hZDpsLkNsclNoYXBlRG93bmxvYWQsdXBsb2FkOmwuQ2xyU2hhcGVVcGxvYWQsbG9jazpsLkNsclNoYXBlTG9jayx1bmxvY2s6bC5DbHJTaGFwZVVubG9jayx1c2VyczpsLkNsclNoYXBlVXNlcnMsInBvcC1vdXQiOmwuQ2xyU2hhcGVQb3BP''@;'; put 'put ''dXQsZmlsdGVyOmwuQ2xyU2hhcGVGaWx0ZXIscGluOmwuQ2xyU2hhcGVQaW4sZmlsZTpsLkNsclNoYXBlRmlsZSxwbHVzOmwuQ2xyU2hhcGVQbHVzLG1pbnVzOmwuQ2xyU2hhcGVNaW51cywibWludXMtY2lyY2xlIjpsLkNsclNoYXBlTWludXNDaXJjbGUsInBsdXMtY2lyY2xlIjpsLkNsclNo''@;'; put 'put ''YXBlUGx1c0NpcmNsZSxiYW46bC5DbHJTaGFwZUJhbiwidGltZXMtY2lyY2xlIjpsLkNsclNoYXBlVGltZXNDaXJjbGUsdHJhc2g6bC5DbHJTaGFwZVRyYXNoLGNpcmNsZTpsLkNsclNoYXBlQ2lyY2xlLHRhZzpsLkNsclNoYXBlVGFnLHRhZ3M6bC5DbHJTaGFwZVRhZ3MsaGlzdG9yeTpsLkNs''@;'; put 'put ''clNoYXBlSGlzdG9yeSxjbG9jazpsLkNsclNoYXBlQ2xvY2ssImFsYXJtLWNsb2NrIjpsLkNsclNoYXBlQWxhcm1DbG9jayxhcnJvdzp2LkNsclNoYXBlQXJyb3csImNpcmNsZS1hcnJvdyI6bC5DbHJTaGFwZUNpcmNsZUFycm93LCJjaGlsZC1hcnJvdyI6bC5DbHJTaGFwZUNoaWxkQXJyb3cs''@;'; put 'put ''Y29weTpsLkNsclNoYXBlQ29weSxoZWxwOmwuQ2xyU2hhcGVIZWxwLGxvZ2luOmwuQ2xyU2hhcGVMb2dpbixsb2dvdXQ6bC5DbHJTaGFwZUxvZ291dCxwcmludGVyOmwuQ2xyU2hhcGVQcmludGVyLHdvcmxkOmwuQ2xyU2hhcGVXb3JsZCxzbGlkZXI6bC5DbHJTaGFwZVNsaWRlcixjbGlwYm9h''@;'; put 'put ''cmQ6bC5DbHJTaGFwZUNsaXBib2FyZCxmaXJld2FsbDpsLkNsclNoYXBlRmlyZXdhbGwsbGlzdDpsLkNsclNoYXBlTGlzdCxyZWRvOmwuQ2xyU2hhcGVSZWRvLHVuZG86bC5DbHJTaGFwZVVuZG8sc2Nyb2xsOmwuQ2xyU2hhcGVTY3JvbGwsImZpbGUtc2V0dGluZ3MiOmwuQ2xyU2hhcGVGaWxl''@;'; put 'put ''U2V0dGluZ3MsInR3by13YXktYXJyb3dzIjpsLkNsclNoYXBlVHdvV2F5QXJyb3dzLHN3aXRjaDpsLkNsclNoYXBlU3dpdGNoLHRvb2xzOmwuQ2xyU2hhcGVUb29scywid2luZG93LWNsb3NlIjpsLkNsclNoYXBlV2luZG93Q2xvc2UsIndpbmRvdy1tYXgiOmwuQ2xyU2hhcGVXaW5kb3dNYXgs''@;'; put 'put ''IndpbmRvdy1taW4iOmwuQ2xyU2hhcGVXaW5kb3dNaW4sIndpbmRvdy1yZXN0b3JlIjpsLkNsclNoYXBlV2luZG93UmVzdG9yZSwiem9vbS1pbiI6bC5DbHJTaGFwZVpvb21Jbiwiem9vbS1vdXQiOmwuQ2xyU2hhcGVab29tT3V0LGtleTpsLkNsclNoYXBlS2V5LGxpYnJhcnk6bC5DbHJTaGFw''@;'; put 'put ''ZUxpYnJhcnksYm9sdDpsLkNsclNoYXBlQm9sdCx3cmVuY2g6bC5DbHJTaGFwZVdyZW5jaCxidWxsc2V5ZTpsLkNsclNoYXBlQnVsbHNleWUsdGFyZ2V0OmwuQ2xyU2hhcGVUYXJnZXQsZmxhbWU6bC5DbHJTaGFwZUZsYW1lLGhvdXJnbGFzczpsLkNsclNoYXBlSG91cmdsYXNzLCJuby1hY2Nl''@;'; put 'put ''c3MiOmwuQ2xyU2hhcGVOb0FjY2Vzcyxvcmdhbml6YXRpb246bC5DbHJTaGFwZU9yZ2FuaXphdGlvbixiYWxhbmNlOmwuQ2xyU2hhcGVCYWxhbmNlLCJpZC1iYWRnZSI6bC5DbHJTaGFwZUlkQmFkZ2UscmVwZWF0OmwuQ2xyU2hhcGVSZXBlYXQsImZpbGUtZ3JvdXAiOmwuQ2xyU2hhcGVGaWxl''@;'; put 'put ''R3JvdXAscGFwZXJjbGlwOmwuQ2xyU2hhcGVQYXBlcmNsaXAsc2hyaW5rOmwuQ2xyU2hhcGVTaHJpbmssImFjY2Vzc2liaWxpdHktMSI6bC5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxLCJhY2Nlc3NpYmlsaXR5LTIiOmwuQ2xyU2hhcGVBY2Nlc3NpYmlsaXR5Miwic29ydC1ieSI6bC5DbHJTaGFw''@;'; put 'put ''ZVNvcnRCeSwiY29sbGFwc2UtY2FyZCI6bC5DbHJTaGFwZUNvbGxhcHNlQ2FyZCwiZXhwYW5kLWNhcmQiOmwuQ2xyU2hhcGVFeHBhbmRDYXJkLGJyaWVmY2FzZTpsLkNsclNoYXBlQnJpZWZjYXNlLCJjb2xvci1waWNrZXIiOmwuQ2xyU2hhcGVDb2xvclBpY2tlciwiY29weS10by1jbGlwYm9h''@;'; put 'put ''cmQiOmwuQ2xyU2hhcGVDb3B5VG9DbGlwYm9hcmQsImZpbHRlci0yIjpsLkNsclNoYXBlRmlsdGVyMiwiZHJhZy1oYW5kbGUiOmwuQ2xyU2hhcGVEcmFnSGFuZGxlLG1vb246bC5DbHJTaGFwZU1vb24sc3VuOmwuQ2xyU2hhcGVTdW4sd2FuZDpsLkNsclNoYXBlV2FuZCxjbG9uZTpsLkNsclNo''@;'; put 'put ''YXBlQ2xvbmUsZGV0YWlsczpsLkNsclNoYXBlRGV0YWlscywiZHJhZy1oYW5kbGUtY29ybmVyIjpsLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcixlcmFzZXI6bC5DbHJTaGFwZUVyYXNlcixsYW5kc2NhcGU6bC5DbHJTaGFwZUxhbmRzY2FwZSxwYXN0ZTpsLkNsclNoYXBlUGFzdGUscG9ydHJh''@;'; put 'put ''aXQ6bC5DbHJTaGFwZVBvcnRyYWl0LCJmaWxlLXppcCI6bC5DbHJTaGFwZUZpbGVaaXAsImZpbHRlci1vZmYiOmwuQ2xyU2hhcGVGaWx0ZXJPZmYscmVjeWNsZTpsLkNsclNoYXBlUmVjeWNsZSx0cmVlOmwuQ2xyU2hhcGVUcmVlLGZpc2g6bC5DbHJTaGFwZUZpc2gsZm9ybTpsLkNsclNoYXBl''@;'; put 'put ''Rm9ybSxmdWVsOmwuQ2xyU2hhcGVGdWVsLHNub3dmbGFrZTpsLkNsclNoYXBlU25vd2ZsYWtlLHRhYmxlOmwuQ2xyU2hhcGVUYWJsZSwiZG90LWNpcmNsZSI6bC5DbHJTaGFwZURvdENpcmNsZSx2b2x1bWU6bC5DbHJTaGFwZVZvbHVtZSxjcm9zc2hhaXJzOmwuQ2xyU2hhcGVDcm9zc2hhaXJz''@;'; put 'put ''LGJldGE6bC5DbHJTaGFwZUJldGEsImNvbG9yLXBhbGV0dGUiOmwuQ2xyU2hhcGVDb2xvclBhbGV0dGV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiZWRpdCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5wZW5jaWwpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsIm5vdGUtZWRpdCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5ub3RlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJncm91cCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShs''@;'; put 'put ''LkVzc2VudGlhbFNoYXBlcy51c2VycykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiZG9jdW1lbnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMuZmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywi''@;'; put 'put ''YWRkIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLnBsdXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImNhbmNlbCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5iYW4pKSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInJlbW92ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlc1sidGltZXMtY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24taW4iLCgwLHAuZGVzY3JpcHRvckNvbmZpZyko''@;'; put 'put ''bC5Fc3NlbnRpYWxTaGFwZXMubG9naW4pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInNpZ24tb3V0IiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLmxvZ291dCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBl''@;'; put 'put ''cywibGlnaHRuaW5nIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuRXNzZW50aWFsU2hhcGVzLmJvbHQpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImZsb3ctY2hhcnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMub3JnYW5pemF0''@;'; put 'put ''aW9uKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJhbGVydCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlc1siYnViYmxlLWV4Y2xhbWF0aW9uIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInBpbm5l''@;'; put 'put ''ZCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5waW5ib2FyZCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsImF0dGFjaG1lbnQiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5Fc3NlbnRpYWxTaGFwZXMucGFwZXJjbGlwKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuRXNzZW50aWFsU2hhcGVzLCJyZXNpemUtZG93biIsKDAscC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5zaHJpbmspKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS11cCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLkVzc2VudGlhbFNoYXBlcy5yZXNpemUpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2lu''@;'; put 'put ''ZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5Fc3NlbnRpYWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9tZWRpYS1zaGFwZXMudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91''@;'; put 'put ''bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLk1lZGlhU2hhcGVzPWwuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZT1sLkNsclNoYXBlTWljcm9waG9uZT1sLkNsclNoYXBlVmlkZW9HYWxsZXJ5''@;'; put 'put ''PWwuQ2xyU2hhcGVSZXBsYXlPbmU9bC5DbHJTaGFwZVJlcGxheUFsbD1sLkNsclNoYXBlSW1hZ2VHYWxsZXJ5PWwuQ2xyU2hhcGVNdXNpY05vdGU9bC5DbHJTaGFwZUZpbG1TdHJpcD1sLkNsclNoYXBlSGVhZHBob25lcz1sLkNsclNoYXBlVm9sdW1lTXV0ZT1sLkNsclNoYXBlVm9sdW1lVXA9''@;'; put 'put ''bC5DbHJTaGFwZVZvbHVtZURvd249bC5DbHJTaGFwZVNodWZmbGU9bC5DbHJTaGFwZVZpZGVvQ2FtZXJhPWwuQ2xyU2hhcGVDYW1lcmE9bC5DbHJTaGFwZUZhc3RGb3J3YXJkPWwuQ2xyU2hhcGVSZXdpbmQ9bC5DbHJTaGFwZVBvd2VyPWwuQ2xyU2hhcGVTdG9wPWwuQ2xyU2hhcGVTdGVwRm9y''@;'; put 'put ''d2FyZD1sLkNsclNoYXBlUGF1c2U9bC5DbHJTaGFwZVBsYXk9dm9pZCAwLEg9SCgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVQbGF5PSgwLEguY2xySWNvblNWRyko''@;'; put 'put ''JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIuMDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIu''@;'; put 'put ''MDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40''@;'; put 'put ''N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLGwuQ2xyU2hhcGVQYXVzZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEyLjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjku''@;'; put 'put ''OTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDci''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxsLkNsclNoYXBlU3RlcEZvcndhcmQ9KDAsSC5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01''@;'; put 'put ''LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgzYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMx''@;'; put 'put ''LDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIzLjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEy''@;'; put 'put ''LDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxsLkNsclNoYXBlU3RvcD0o''@;'; put 'put ''MCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksbC5DbHJTaGFwZVBvd2VyPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk''@;'; put 'put ''PSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1h''@;'; put 'put ''bGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEsMCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTku''@;'; put 'put ''NjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwx''@;'; put 'put ''LjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcu''@;'; put 'put ''ODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5''@;'; put 'put ''LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwx''@;'; put 'put ''LjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCwwLDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5''@;'; put 'put ''LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVSZXdpbmQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwy''@;'; put 'put ''LDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIu''@;'; put 'put ''MDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIs''@;'; put 'put ''MiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLGwuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiwwLDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwz''@;'; put 'put ''LjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiwwLDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5Ljkz''@;'; put 'put ''bDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMx''@;'; put 'put ''LjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45MywwLDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAs''@;'; put 'put ''MSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxsLkNsclNoYXBlQ2FtZXJhPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIs''@;'; put 'put ''MiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''OS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcs''@;'; put 'put ''MCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4y''@;'; put 'put ''OEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEs''@;'; put 'put ''MCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAsMCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEs''@;'; put 'put ''MSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLGwuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcs''@;'; put 'put ''Mi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVhLjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAs''@;'; put 'put ''MSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAs''@;'; put 'put ''MCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxsLkNsclNoYXBlU2h1ZmZsZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAsMC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEsMTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMs''@;'; put 'put ''M2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksbC5DbHJTaGFwZVZvbHVtZURvd249KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0''@;'; put 'put ''LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyWk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4''@;'; put 'put ''TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUs''@;'; put 'put ''MSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNh''@;'; put 'put ''MSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLGwuQ2xyU2hhcGVWb2x1bWVVcD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiww''@;'; put 'put ''LDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwzMS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIv''@;'; put 'put ''PicpLGwuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIs''@;'; put 'put ''MCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4yOEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdB''@;'; put 'put ''MSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwy''@;'; put 'put ''Ni4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwx''@;'; put 'put ''OGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2''@;'; put 'put ''LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMs''@;'; put 'put ''NSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEuNzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0''@;'; put 'put ''LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4''@;'; put 'put ''LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQuNjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUu''@;'; put 'put ''NkwyMCwxNy41NFoiLz4nKSxsLkNsclNoYXBlSGVhZHBob25lcz0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIs''@;'; put 'put ''MjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwyLjc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4y''@;'; put 'put ''NywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwyNiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUs''@;'; put 'put ''MTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxsLkNsclNoYXBlRmlsbVN0cmlwPSgwLEguY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0x''@;'; put 'put ''LTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIg''@;'; put 'put ''d2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNIMjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJa''@;'; put 'put ''bTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJa''@;'; put 'put ''Ii8+JyksbC5DbHJTaGFwZU11c2ljTm90ZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1''@;'; put 'put ''Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2''@;'; put 'put ''LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMzLDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMs''@;'; put 'put ''MS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUyLDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwx''@;'; put 'put ''LDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZj''@;'; put 'put ''LTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYx''@;'; put 'put ''Ljg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEuOS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIs''@;'; put 'put ''MSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksbC5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCww''@;'; put 'put ''LDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSww''@;'; put 'put ''LTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwy''@;'; put 'put ''OGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBh''@;'; put 'put ''MSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0y''@;'; put 'put ''NmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAs''@;'; put 'put ''MjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwx''@;'; put 'put ''LjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYtNS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43''@;'; put 'put ''OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUmVwbGF5T25lPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3''@;'; put 'put ''LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0u''@;'; put 'put ''MDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlVmlkZW9HYWxsZXJ5''@;'; put 'put ''PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMw''@;'; put 'put ''SDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQsMCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwu''@;'; put 'put ''NjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4yNS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwx''@;'; put 'put ''LC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0z''@;'; put 'put ''Mi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEz''@;'; put 'put ''LDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4yLDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMt''@;'; put 'put ''NS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEs''@;'; put 'put ''MWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03''@;'; put 'put ''cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYs''@;'; put 'put ''MC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLEgu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4''@;'; put 'put ''YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00''@;'; put 'put ''LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43''@;'; put 'put ''QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMs''@;'; put 'put ''MjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0''@;'; put 'put ''Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwy''@;'; put 'put ''Ni42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLk1lZGlhU2hhcGVzPXtwbGF5OmwuQ2xyU2hhcGVQbGF5LHBhdXNlOmwuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpsLkNsclNoYXBlU3RlcEZvcndhcmQsc3RvcDpsLkNsclNoYXBlU3RvcCxw''@;'; put 'put ''b3dlcjpsLkNsclNoYXBlUG93ZXIscmV3aW5kOmwuQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6bC5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpsLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOmwuQ2xyU2hhcGVWaWRlb0NhbWVyYSxzaHVmZmxlOmwuQ2xyU2hhcGVTaHVm''@;'; put 'put ''ZmxlLCJ2b2x1bWUtdXAiOmwuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOmwuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6bC5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpsLkNsclNoYXBlSGVhZHBob25lcywiZmlsbS1zdHJpcCI6bC5DbHJTaGFwZUZpbG1T''@;'; put 'put ''dHJpcCwibXVzaWMtbm90ZSI6bC5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6bC5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6bC5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6bC5DbHJTaGFwZVJlcGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6bC5DbHJT''@;'; put 'put ''aGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOmwuQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOmwuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5''@;'; put 'put ''SWNvbnMuYWRkKGwuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''c2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLHYpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5Tb2NpYWxTaGFwZXM9bC5DbHJTaGFwZUhhc2h0YWc9bC5DbHJTaGFwZUNyb3duPWwuQ2xyU2hhcGVUaHVtYnNEb3duPWwuQ2xyU2hhcGVUaHVtYnNVcD1sLkNsclNoYXBlU2FkRmFjZT1sLkNsclNoYXBlTmV1dHJhbEZhY2U9bC5D''@;'; put 'put ''bHJTaGFwZUhhcHB5RmFjZT1sLkNsclNoYXBlUGljdHVyZT1sLkNsclNoYXBlQ2hhdEJ1YmJsZT1sLkNsclNoYXBlVGFsa0J1YmJsZXM9bC5DbHJTaGFwZUhlYXJ0QnJva2VuPWwuQ2xyU2hhcGVIZWFydD1sLkNsclNoYXBlSW5ib3g9bC5DbHJTaGFwZUZsYWc9bC5DbHJTaGFwZVRhc2tzPWwu''@;'; put 'put ''Q2xyU2hhcGVFbnZlbG9wZT1sLkNsclNoYXBlQm9va21hcms9bC5DbHJTaGFwZUhhbGZTdGFyPWwuQ2xyU2hhcGVTdGFyPWwuQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHA9digKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9k''@;'; put 'put ''ZXNjcmlwdG9yLWNvbmZpZy50cyIpLGE9digKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO3Y9digKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBl''@;'; put 'put ''cy9jb3JlLXNoYXBlcy50cyIpLGwuQ2xyU2hhcGVTaGFyZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0y''@;'; put 'put ''LjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywz''@;'; put 'put ''LDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41''@;'; put 'put ''NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLGwuQ2xyU2hh''@;'; put 'put ''cGVTdGFyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcu''@;'; put 'put ''NCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4yMiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRh''@;'; put 'put ''Mi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAsMCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4y''@;'; put 'put ''MSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBMMTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4x''@;'; put 'put ''My40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTguMzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAs''@;'; put 'put ''MCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVhMi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRh''@;'; put 'put ''LjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksbC5DbHJTaGFwZUhhbGZTdGFyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAs''@;'; put 'put ''MCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDks''@;'; put 'put ''MzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEsLjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMy''@;'; put 'put ''YS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIwLjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEt''@;'; put 'put ''LjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIs''@;'; put 'put ''MCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAtMS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIy''@;'; put 'put ''LDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxsLkNsclNoYXBlQm9va21hcms9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIsMCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksbC5DbHJTaGFw''@;'; put 'put ''ZUVudmVsb3BlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUu''@;'; put 'put ''NjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwxNy44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4''@;'; put 'put ''YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwt''@;'; put 'put ''NS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''My44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSww''@;'; put 'put ''SDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIs''@;'; put 'put ''MCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44''@;'; put 'put ''MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEs''@;'; put 'put ''Ny4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMu''@;'; put 'put ''OTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIy''@;'; put 'put ''Ljk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxsLkNsclNoYXBlVGFza3M9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAsMSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMy''@;'; put 'put ''LjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwx''@;'; put 'put ''LDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwyLjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0''@;'; put 'put ''LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAtNy43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1''@;'; put 'put ''LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4xOSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUu''@;'; put 'put ''MzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYu''@;'; put 'put ''NjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIg''@;'; put 'put ''ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEuNDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQs''@;'; put 'put ''MCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''MCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVpt''@;'; put 'put ''LTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwx''@;'; put 'put ''LDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgsMS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwx''@;'; put 'put ''LDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1''@;'; put 'put ''LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi''@;'; put 'put ''IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41''@;'; put 'put ''MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMs''@;'; put 'put ''My43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBj''@;'; put 'put ''bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLGwuQ2xyU2hhcGVGbGFnPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEs''@;'; put 'put ''MCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwxNC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwx''@;'; put 'put ''Mi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2''@;'; put 'put ''LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4LjgsMCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0''@;'; put 'put ''LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSww''@;'; put 'put ''LDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYs''@;'; put 'put ''MTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIsMTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2''@;'; put 'put ''Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksbC5DbHJTaGFwZUluYm94PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUs''@;'; put 'put ''NUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0y''@;'; put 'put ''OSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAs''@;'; put 'put ''MCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUsMCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwz''@;'; put 'put ''MSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZUhlYXJ0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4y''@;'; put 'put ''MUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJhOS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjks''@;'; put 'put ''MS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0LjgsOC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAs''@;'; put 'put ''MTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSwwLDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwx''@;'; put 'put ''MC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0zLjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdD''@;'; put 'put ''OC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4Ljks''@;'; put 'put ''MCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4x''@;'; put 'put ''OC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUuOSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEs''@;'; put 'put ''My4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgsMi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEu''@;'; put 'put ''MjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjkt''@;'; put 'put ''My42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcs''@;'; put 'put ''MCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5''@;'; put 'put ''LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVUYWxrQnViYmxlcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4''@;'; put 'put ''Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45''@;'; put 'put ''NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZh''@;'; put 'put ''MSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwxLDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3''@;'; put 'put ''LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLGwuQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0u''@;'; put 'put ''NjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4''@;'; put 'put ''LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFh''@;'; put 'put ''MSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAuNWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAsMC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAs''@;'; put 'put ''MSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhs''@;'; put 'put ''NS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEsMSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0''@;'; put 'put ''LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRs''@;'; put 'put ''MC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0tMy4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEs''@;'; put 'put ''MjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3''@;'; put 'put ''LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMu''@;'; put 'put ''NTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAs''@;'; put 'put ''MSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksbC5DbHJTaGFwZVBpY3R1cmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJW''@;'; put 'put ''MzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQx''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1''@;'; put 'put ''LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0t''@;'; put 'put ''NC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBM''@;'; put 'put ''MTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIy''@;'; put 'put ''Ljc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5''@;'; put 'put ''LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9''@;'; put 'put ''IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksbC5DbHJTaGFwZUhhcHB5RmFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0w''@;'; put 'put ''LDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2''@;'; put 'put ''LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwx''@;'; put 'put ''LDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJhMSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwx''@;'; put 'put ''LjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksbC5DbHJTaGFwZVNhZEZhY2U9KDAs''@;'; put 'put ''YS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwxLDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEsMS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCww''@;'; put 'put ''LDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAsMCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''Lz4nKSxsLkNsclNoYXBlVGh1bWJzVXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4wOEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5''@;'; put 'put ''Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTkuMTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAs''@;'; put 'put ''MCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwy''@;'; put 'put ''LDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQsMjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlVGh1bWJzRG93bj0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgyM1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04''@;'; put 'put ''LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0x''@;'; put 'put ''LjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEs''@;'; put 'put ''MCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMs''@;'; put 'put ''MjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEwLjg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVDcm93bj0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIu''@;'; put 'put ''NywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYuNzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43''@;'; put 'put ''LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwxLDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0''@;'; put 'put ''LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwxLDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4y''@;'; put 'put ''OCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4wOSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0u''@;'; put 'put ''NzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEu''@;'; put 'put ''MTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEz''@;'; put 'put ''LjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+''@;'; put 'put ''XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwx''@;'; put 'put ''Ny4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCwwLTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0y''@;'; put 'put ''LjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwxLDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSww''@;'; put 'put ''LDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEs''@;'; put 'put ''MCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5cbiAgJyksbC5DbHJTaGFwZUhhc2h0YWc9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wtMS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEu''@;'; put 'put ''MTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhMMjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAt''@;'; put 'put ''MlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwx''@;'; put 'put ''LTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEs''@;'; put 'put ''MS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJhMSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEs''@;'; put 'put ''MSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5Tb2NpYWxTaGFwZXM9e2Nyb3duOmwuQ2xyU2hhcGVDcm93bixzaGFyZTpsLkNsclNoYXBlU2hhcmUsc3RhcjpsLkNsclNoYXBl''@;'; put 'put ''U3RhciwiaGFsZi1zdGFyIjpsLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6bC5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOmwuQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjp2LkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6di5DbHJTaGFwZUV2ZW50LHRhc2tzOmwuQ2xyU2hhcGVUYXNrcyxm''@;'; put 'put ''bGFnOmwuQ2xyU2hhcGVGbGFnLGluYm94OmwuQ2xyU2hhcGVJbmJveCxoYXNodGFnOmwuQ2xyU2hhcGVIYXNodGFnLGhlYXJ0OmwuQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpsLkNsclNoYXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6bC5DbHJTaGFwZVRhbGtCdWJibGVzLCJj''@;'; put 'put ''aGF0LWJ1YmJsZSI6bC5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpsLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6bC5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpsLkNsclNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpsLkNsclNoYXBlU2FkRmFjZSwidGh1bWJz''@;'; put 'put ''LXVwIjpsLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpsLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGwuU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlNvY2lhbFNoYXBlcywiZGF0ZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlNvY2lhbFNoYXBlcy5j''@;'; put 'put ''YWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChsLlNvY2lhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxsLGEpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5DbHJTaGFwZVZNV0FwcD1sLkNsclNoYXBlVk09bC5D''@;'; put 'put ''bHJTaGFwZVJvdXRlcj1sLkNsclNoYXBlTmV0d29ya1N3aXRjaD1sLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPWwuQ2xyU2hhcGVOZXR3b3JrR2xvYmU9bC5DbHJTaGFwZVRhYmxldD1sLkNsclNoYXBlTW9iaWxlPWwuQ2xyU2hhcGVCYXR0ZXJ5PWwuQ2xyU2hhcGVBcHBsaWNhdGlvbj1sLkNs''@;'; put 'put ''clNoYXBlQ29kZT1sLkNsclNoYXBlVGVybWluYWw9bC5DbHJTaGFwZURpc3BsYXk9bC5DbHJTaGFwZUNvbXB1dGVyPWwuQ2xyU2hhcGVGbG9wcHk9bC5DbHJTaGFwZVBsdWdpbj1sLkNsclNoYXBlRG93bmxvYWRDbG91ZD1sLkNsclNoYXBlVXBsb2FkQ2xvdWQ9bC5DbHJTaGFwZUV4cG9ydD1s''@;'; put 'put ''LkNsclNoYXBlSW1wb3J0PWwuQ2xyU2hhcGVTaGllbGRYPWwuQ2xyU2hhcGVTaGllbGQ9bC5DbHJTaGFwZVNoaWVsZENoZWNrPWwuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9bC5DbHJTaGFwZURhdGFDbHVzdGVyPWwuQ2xyU2hhcGVNZW1vcnk9bC5DbHJTaGFwZUNQVT1sLkNsclNoYXBlQnVpbGRp''@;'; put 'put ''bmc9bC5DbHJTaGFwZUFwcGxpY2F0aW9ucz1sLkNsclNoYXBlQ2x1c3Rlcj1sLkNsclNoYXBlU3RvcmFnZT1sLkNsclNoYXBlSG9zdD1sLkNsclNoYXBlRGFzaGJvYXJkPWwuQ2xyU2hhcGVNb3VzZT1sLkNsclNoYXBlS2V5Ym9hcmQ9bC5DbHJTaGFwZURldmljZXM9bC5DbHJTaGFwZUJhY2t1''@;'; put 'put ''cD1sLkNsclNoYXBlQmFja3VwUmVzdG9yZT1sLkNsclNoYXBlSGFyZERpc2s9bC5DbHJTaGFwZVJhY2tTZXJ2ZXI9bC5DbHJTaGFwZVdpZmk9bC5DbHJTaGFwZUJ1bmRsZT1sLkNsclNoYXBlQmxvY2tzR3JvdXA9bC5DbHJTaGFwZUJsb2NrPWwuQ2xyU2hhcGVMYXllcnM9bC5DbHJTaGFwZVVu''@;'; put 'put ''aW5zdGFsbD1sLkNsclNoYXBlSW5zdGFsbD1sLkNsclNoYXBlTm9XaWZpPWwuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9bC5DbHJTaGFwZVJ1bGVyUGVuY2lsPXZvaWQgMCxsLlRlY2hub2xvZ3lTaGFwZXM9bC5DbHJTaGFwZUZpbGVTaGFyZTI9bC5DbHJTaGFwZUNpQ2Q9bC5DbHJTaGFwZUFuaW1h''@;'; put 'put ''dGlvbj1sLkNsclNoYXBlVGFwZURyaXZlPWwuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9bC5DbHJDb250cm9sTHVuPWwuQ2xyU2hhcGVQb2Q9bC5DbHJTaGFwZU5vZGU9bC5DbHJTaGFwZU5hbWVzcGFjZT1sLkNsclNoYXBlTm9kZXM9bC5DbHJTaGFwZU5vZGVHcm91cD1sLkNsclNoYXBlU3RvcmFn''@;'; put 'put ''ZUFkYXB0ZXI9bC5DbHJTaGFwZUhvc3RHcm91cD1sLkNsclNoYXBlU3F1aWQ9bC5DbHJTaGFwZUNhcGFjaXRvcj1sLkNsclNoYXBlUmVzaXN0b3I9bC5DbHJTaGFwZUluZHVjdG9yPWwuQ2xyU2hhcGVSYWRhcj1sLkNsclNoYXBlVXNiPWwuQ2xyU2hhcGVRckNvZGU9bC5DbHJTaGFwZUZpbGVT''@;'; put 'put ''aGFyZT1sLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPWwuQ2xyU2hhcGVDb250YWluZXI9bC5DbHJTaGFwZUNkRHZkPWwuQ2xyU2hhcGVCYXJDb2RlPWwuQ2xyU2hhcGVBdG9tPWwuQ2xyU2hhcGVBc3NpZ25Vc2VyPWwuQ2xyU2hhcGVQcm9jZXNzT25WTT1sLkNsclNoYXBlQmx1ZXRvb3RoT2Zm''@;'; put 'put ''PWwuQ2xyU2hhcGVCbHVldG9vdGg9bC5DbHJTaGFwZVNTRD1sLkNsclNoYXBlTlZNZT1sLkNsclNoYXBlSGFyZERyaXZlRGlza3M9bC5DbHJTaGFwZUhhcmREcml2ZT1sLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1sLkNsclNoYXBlRmxhc2s9bC5DbHJTaGFwZUhlbGl4PWwuQ2xyU2hhcGVEZXBs''@;'; put 'put ''b3k9bC5DbHJTaGFwZUNsb3VkVHJhZmZpYz1sLkNsclNoYXBlQ2xvdWRTY2FsZT1sLkNsclNoYXBlQ2xvdWROZXR3b3JrPWwuQ2xyU2hhcGVVbmxpbms9bC5DbHJTaGFwZUxpbms9bC5DbHJTaGFwZURpc2Nvbm5lY3Q9bC5DbHJTaGFwZUNvbm5lY3Q9bC5DbHJTaGFwZVVuYXJjaGl2ZT1sLkNs''@;'; put 'put ''clNoYXBlQXJjaGl2ZT1sLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciBwPWEoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKTthPWEoCi8qISAuLi91dGlscy9zdmctdGFnLWdl''@;'; put 'put ''bmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAx''@;'; put 'put ''Ny40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42''@;'; put 'put ''SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgy''@;'; put 'put ''NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBI''@;'; put 'put ''NC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicp''@;'; put 'put ''LGwuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwz''@;'; put 'put ''Mi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2''@;'; put 'put ''LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43''@;'; put 'put ''LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCww''@;'; put 'put ''LDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2''@;'; put 'put ''LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJM''@;'; put 'put ''MTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLGwuQ2xyU2hhcGVOb1dpZmk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''OCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEs''@;'; put 'put ''MCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgs''@;'; put 'put ''MCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2''@;'; put 'put ''YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFB''@;'; put 'put ''MjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEs''@;'; put 'put ''My42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEu''@;'; put 'put ''NSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksbC5DbHJTaGFwZUluc3RhbGw9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAu''@;'; put 'put ''OTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1''@;'; put 'put ''bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjky''@;'; put 'put ''QTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAs''@;'; put 'put ''MC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1''@;'; put 'put ''LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i''@;'; put 'put ''TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksbC5DbHJTaGFwZVVuaW5zdGFsbD0oMCxhLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4''@;'; put 'put ''bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAs''@;'; put 'put ''MCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4y''@;'; put 'put ''M2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYx''@;'; put 'put ''MEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmEx''@;'; put 'put ''LDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEs''@;'; put 'put ''MSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMw''@;'; put 'put ''YTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksbC5DbHJTaGFwZUxheWVycz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2''@;'; put 'put ''bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYu''@;'; put 'put ''ODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEs''@;'; put 'put ''Ljg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFs''@;'; put 'put ''LTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLGwuQ2xyU2hhcGVCbG9j''@;'; put 'put ''az0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIs''@;'; put 'put ''OS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSww''@;'; put 'put ''LDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4x''@;'; put 'put ''Miw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCww''@;'; put 'put ''LDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4''@;'; put 'put ''LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwx''@;'; put 'put ''LDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn''@;'; put 'put ''ZSIgLz4nKSxsLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42''@;'; put 'put ''OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43''@;'; put 'put ''NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSww''@;'; put 'put ''LDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYu''@;'; put 'put ''NDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgt''@;'; put 'put ''My4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAs''@;'; put 'put ''MCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCww''@;'; put 'put ''LDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02Ljks''@;'; put 'put ''My4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42''@;'; put 'put ''LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTks''@;'; put 'put ''MjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwx''@;'; put 'put ''OC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN''@;'; put 'put ''MjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5''@;'; put 'put ''LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBs''@;'; put 'put ''LTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgt''@;'; put 'put ''LjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0y''@;'; put 'put ''NS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4y''@;'; put 'put ''NywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41Mywx''@;'; put 'put ''OC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCww''@;'; put 'put ''LDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEs''@;'; put 'put ''MCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEy''@;'; put 'put ''LjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIg''@;'; put 'put ''Y3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLGwuQ2xyU2hhcGVCdW5kbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1''@;'; put 'put ''Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCww''@;'; put 'put ''LC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxsLkNsclNoYXBlV2lmaT0o''@;'; put 'put ''MCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEu''@;'; put 'put ''MS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwx''@;'; put 'put ''LDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEu''@;'; put 'put ''MTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQs''@;'; put 'put ''NCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwx''@;'; put 'put ''LDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEu''@;'; put 'put ''NywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41''@;'; put 'put ''MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksbC5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi''@;'; put 'put ''IHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42''@;'; put 'put ''OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu''@;'; put 'put ''NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQi''@;'; put 'put ''IGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMw''@;'; put 'put ''LDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9''@;'; put 'put ''IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0x''@;'; put 'put ''OSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs''@;'; put 'put ''ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4x''@;'; put 'put ''Myw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYy''@;'; put 'put ''SDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLGwuQ2xyU2hhcGVIYXJkRGlzaz0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl''@;'; put 'put ''ZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40''@;'; put 'put ''NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0z''@;'; put 'put ''NCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIs''@;'; put 'put ''MCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhl''@;'; put 'put ''aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0z''@;'; put 'put ''Mi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwy''@;'; put 'put ''MEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxsLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxh''@;'; put 'put ''LmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcs''@;'; put 'put ''NlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEu''@;'; put 'put ''NTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs''@;'; put 'put ''Mi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4''@;'; put 'put ''LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4x''@;'; put 'put ''NiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIy''@;'; put 'put ''NiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2''@;'; put 'put ''LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42''@;'; put 'put ''NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQs''@;'; put 'put ''MTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYs''@;'; put 'put ''MTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYu''@;'; put 'put ''ODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN''@;'; put 'put ''MTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwy''@;'; put 'put ''LjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40Mywz''@;'; put 'put ''My4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41''@;'; put 'put ''QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksbC5DbHJTaGFwZUJhY2t1cD0oMCxhLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4w''@;'; put 'put ''N2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4z''@;'; put 'put ''NUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3''@;'; put 'put ''LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0y''@;'; put 'put ''SDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0i''@;'; put 'put ''MiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45Mywx''@;'; put 'put ''MkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIu''@;'; put 'put ''MzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwx''@;'; put 'put ''LDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4y''@;'; put 'put ''LDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxl''@;'; put 'put ''cnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2Mt''@;'; put 'put ''LjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwx''@;'; put 'put ''LTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0''@;'; put 'put ''bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0''@;'; put 'put ''Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2''@;'; put 'put ''LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwy''@;'; put 'put ''NHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksbC5DbHJTaGFwZURldmljZXM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCww''@;'; put 'put ''LDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIy''@;'; put 'put ''SDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJW''@;'; put 'put ''NkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLGwuQ2xyU2hhcGVLZXlib2FyZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9''@;'; put 'put ''IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQi''@;'; put 'put ''IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCww''@;'; put 'put ''LDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1''@;'; put 'put ''LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxsLkNsclNoYXBlTW91c2U9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAs''@;'; put 'put ''OCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxsLkNsclNoYXBlRGFzaGJvYXJkPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQu''@;'; put 'put ''MjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUs''@;'; put 'put ''MS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZh''@;'; put 'put ''MTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMx''@;'; put 'put ''LjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4''@;'; put 'put ''LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgs''@;'; put 'put ''MzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQs''@;'; put 'put ''MzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQu''@;'; put 'put ''NTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcs''@;'; put 'put ''MjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksbC5DbHJTaGFwZUhvc3Q9KDAsYS5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAs''@;'; put 'put ''MCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAs''@;'; put 'put ''MCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0i''@;'; put 'put ''MTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4y''@;'; put 'put ''LTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3''@;'; put 'put ''aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01Ljct''@;'; put 'put ''OS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44''@;'; put 'put ''LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0i''@;'; put 'put ''TTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41''@;'; put 'put ''LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJh''@;'; put 'put ''ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMt''@;'; put 'put ''MS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2Mt''@;'; put 'put ''MiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwx''@;'; put 'put ''LjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDEx''@;'; put 'put ''LjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDEx''@;'; put 'put ''LjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9''@;'; put 'put ''IjUuOSIgcj0iNSIvPlxuJyksbC5DbHJTaGFwZVN0b3JhZ2U9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdj''@;'; put 'put ''MCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5''@;'; put 'put ''LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2''@;'; put 'put ''LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAs''@;'; put 'put ''MCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4z''@;'; put 'put ''NHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44''@;'; put 'put ''Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQz''@;'; put 'put ''LDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''IiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAs''@;'; put 'put ''OS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdW''@;'; put 'put ''Ni44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00''@;'; put 'put ''LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5''@;'; put 'put ''LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcu''@;'; put 'put ''OTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAs''@;'; put 'put ''MCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2''@;'; put 'put ''LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0u''@;'; put 'put ''MTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCww''@;'; put 'put ''LDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40''@;'; put 'put ''LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQu''@;'; put 'put ''MDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1''@;'; put 'put ''LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxs''@;'; put 'put ''LkNsclNoYXBlQ2x1c3Rlcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDgu''@;'; put 'put ''NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9''@;'; put 'put ''IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEEx''@;'; put 'put ''LjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJI''@;'; put 'put ''MzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42''@;'; put 'put ''OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41''@;'; put 'put ''IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCww''@;'; put 'put ''LDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYs''@;'; put 'put ''MS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3''@;'; put 'put ''QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxhLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4''@;'; put 'put ''IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9p''@;'; put 'put ''bnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0''@;'; put 'put ''IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMw''@;'; put 'put ''IDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4''@;'; put 'put ''IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAg''@;'; put 'put ''MTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz''@;'; put 'put ''MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0''@;'; put 'put ''IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQnVpbGRpbmc9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAs''@;'; put 'put ''MCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdl''@;'; put 'put ''ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIy''@;'; put 'put ''MyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRn''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIg''@;'; put 'put ''aGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdp''@;'; put 'put ''ZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxy''@;'; put 'put ''ZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0''@;'; put 'put ''ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIy''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVj''@;'; put 'put ''dCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIu''@;'; put 'put ''MTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdv''@;'; put 'put ''biBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx''@;'; put 'put ''QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1h''@;'; put 'put ''bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01''@;'; put 'put ''SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVpt''@;'; put 'put ''MC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h''@;'; put 'put ''bGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVI''@;'; put 'put ''N1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgy''@;'; put 'put ''NFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEy''@;'; put 'put ''IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9''@;'; put 'put ''IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYi''@;'; put 'put ''IHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4''@;'; put 'put ''PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNQVT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSww''@;'; put 'put ''LTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4x''@;'; put 'put ''LDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEs''@;'; put 'put ''MCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1''@;'; put 'put ''Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZI''@;'; put 'put ''MzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCww''@;'; put 'put ''LDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAs''@;'; put 'put ''MS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1''@;'; put 'put ''SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEu''@;'; put 'put ''NiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYz''@;'; put 'put ''MGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMu''@;'; put 'put ''NjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2''@;'; put 'put ''djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45''@;'; put 'put ''VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMu''@;'; put 'put ''NTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRW''@;'; put 'put ''My44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEu''@;'; put 'put ''OC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTgu''@;'; put 'put ''MTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4x''@;'; put 'put ''QTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4y''@;'; put 'put ''YS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlTWVtb3J5PSgwLGEuY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJW''@;'; put 'put ''MTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0''@;'; put 'put ''VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5''@;'; put 'put ''djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUu''@;'; put 'put ''NTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4x''@;'; put 'put ''LDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgs''@;'; put 'put ''MEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUt''@;'; put 'put ''MS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42''@;'; put 'put ''Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQu''@;'; put 'put ''MzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEy''@;'; put 'put ''Ljc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0x''@;'; put 'put ''LjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQs''@;'; put 'put ''NS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3''@;'; put 'put ''LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4z''@;'; put 'put ''OHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUt''@;'; put 'put ''NC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcu''@;'; put 'put ''OTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIy''@;'; put 'put ''LjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwx''@;'; put 'put ''NC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEu''@;'; put 'put ''NDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4x''@;'; put 'put ''NC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEu''@;'; put 'put ''NDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMw''@;'; put 'put ''IiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYs''@;'; put 'put ''OSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMu''@;'; put 'put ''NzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2''@;'; put 'put ''LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45Mywx''@;'; put 'put ''MC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgs''@;'; put 'put ''MjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45''@;'; put 'put ''MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3''@;'; put 'put ''LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4w''@;'; put 'put ''OCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1''@;'; put 'put ''LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2''@;'; put 'put ''Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1i''@;'; put 'put ''YWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAs''@;'; put 'put ''MSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFk''@;'; put 'put ''Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwx''@;'; put 'put ''NCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45''@;'; put 'put ''MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04''@;'; put 'put ''LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2Ui''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCww''@;'; put 'put ''LDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44''@;'; put 'put ''NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTIt''@;'; put 'put ''LjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41''@;'; put 'put ''MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNoaWVsZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVh''@;'; put 'put ''NDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0x''@;'; put 'put ''MiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42''@;'; put 'put ''NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQu''@;'; put 'put ''MTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww''@;'; put 'put ''LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4x''@;'; put 'put ''LDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42''@;'; put 'put ''NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAs''@;'; put 'put ''MS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41''@;'; put 'put ''OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02''@;'; put 'put ''LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQu''@;'; put 'put ''MzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEz''@;'; put 'put ''LjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1i''@;'; put 'put ''YWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlU2hpZWxkWD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQz''@;'; put 'put ''Ljc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEy''@;'; put 'put ''LTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0Ljgx''@;'; put 'put ''LTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0u''@;'; put 'put ''NTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEu''@;'; put 'put ''NCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlSW1wb3J0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAs''@;'; put 'put ''MjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwx''@;'; put 'put ''LjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZI''@;'; put 'put ''MTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx''@;'; put 'put ''MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40''@;'; put 'put ''MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEz''@;'; put 'put ''LjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFo''@;'; put 'put ''Ny42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz''@;'; put 'put ''MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwy''@;'; put 'put ''LDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQt''@;'; put 'put ''LWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJs''@;'; put 'put ''LTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy''@;'; put 'put ''dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiww''@;'; put 'put ''LDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUV4cG9ydD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgx''@;'; put 'put ''MC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0x''@;'; put 'put ''LjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSww''@;'; put 'put ''LDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVy''@;'; put 'put ''dGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42''@;'; put 'put ''OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYt''@;'; put 'put ''LjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1''@;'; put 'put ''LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x''@;'; put 'put ''NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0x''@;'; put 'put ''MiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYs''@;'; put 'put ''Ni4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwx''@;'; put 'put ''LDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4x''@;'; put 'put ''NGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIu''@;'; put 'put ''MjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUs''@;'; put 'put ''MTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIu''@;'; put 'put ''NTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUs''@;'; put 'put ''MCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhB''@;'; put 'put ''Ny43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43''@;'; put 'put ''NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly''@;'; put 'put ''Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAu''@;'; put 'put ''MzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40Myww''@;'; put 'put ''LDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEs''@;'; put 'put ''MSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDct''@;'; put 'put ''LjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl''@;'; put 'put ''cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwy''@;'; put 'put ''Ni44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0y''@;'; put 'put ''LDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTgu''@;'; put 'put ''NzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42''@;'; put 'put ''NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwu''@;'; put 'put ''MDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVQbHVnaW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5''@;'; put 'put ''LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3''@;'; put 'put ''YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwx''@;'; put 'put ''NUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMs''@;'; put 'put ''MCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx''@;'; put 'put ''LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCww''@;'; put 'put ''LDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEs''@;'; put 'put ''MTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIz''@;'; put 'put ''SDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp''@;'; put 'put ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0''@;'; put 'put ''LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAs''@;'; put 'put ''MCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiww''@;'; put 'put ''LDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAs''@;'; put 'put ''NS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42''@;'; put 'put ''OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44''@;'; put 'put ''MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gy''@;'; put 'put ''djguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj''@;'; put 'put ''eD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxsLkNsclNoYXBlRmxvcHB5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCww''@;'; put 'put ''LDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40''@;'; put 'put ''My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCww''@;'; put 'put ''LDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB''@;'; put 'put ''MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3''@;'; put 'put ''LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwx''@;'; put 'put ''LDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEt''@;'; put 'put ''Mi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0y''@;'; put 'put ''NiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+''@;'; put 'put ''XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDb21wdXRlcj0oMCxhLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41''@;'; put 'put ''LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2''@;'; put 'put ''YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4x''@;'; put 'put ''NS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx''@;'; put 'put ''LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42''@;'; put 'put ''LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t''@;'; put 'put ''YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEu''@;'; put 'put ''MjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41''@;'; put 'put ''NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0x''@;'; put 'put ''LjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjki''@;'; put 'put ''IHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3''@;'; put 'put ''VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx''@;'; put 'put ''TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwx''@;'; put 'put ''LjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwx''@;'; put 'put ''My4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURpc3BsYXk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCww''@;'; put 'put ''LDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYg''@;'; put 'put ''Ni4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3''@;'; put 'put ''LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYx''@;'; put 'put ''LDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0y''@;'; put 'put ''LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs''@;'; put 'put ''ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIs''@;'; put 'put ''MCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwz''@;'; put 'put ''Wk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDku''@;'; put 'put ''OTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIw''@;'; put 'put ''LjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAs''@;'; put 'put ''MCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSww''@;'; put 'put ''LDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVRlcm1pbmFsPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3''@;'; put 'put ''IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAx''@;'; put 'put ''My40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0y''@;'; put 'put ''VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0''@;'; put 'put ''Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIx''@;'; put 'put ''LjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIs''@;'; put 'put ''MCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''My0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''Mi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNvZGU9KDAs''@;'; put 'put ''YS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCww''@;'; put 'put ''LTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwz''@;'; put 'put ''LjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; put 'put ''Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41Niwx''@;'; put 'put ''MS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSww''@;'; put 'put ''LDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40''@;'; put 'put ''NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxsLkNsclNo''@;'; put 'put ''YXBlQXBwbGljYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0''@;'; put 'put ''PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0''@;'; put 'put ''IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0z''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVCYXR0ZXJ5PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwx''@;'; put 'put ''MS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEy''@;'; put 'put ''LDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEu''@;'; put 'put ''ODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjks''@;'; put 'put ''MTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs''@;'; put 'put ''MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCww''@;'; put 'put ''LDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMu''@;'; put 'put ''NTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41Nywx''@;'; put 'put ''LjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwx''@;'; put 'put ''MS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCww''@;'; put 'put ''LDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wx''@;'; put 'put ''Ni45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu''@;'; put 'put ''MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0''@;'; put 'put ''Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4''@;'; put 'put ''YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYs''@;'; put 'put ''MCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEu''@;'; put 'put ''MDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU1vYmlsZT0oMCxhLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlVGFibGV0PSgwLGEuY2xySWNvblNWRykoJzxyZWN0IHg9''@;'; put 'put ''IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAs''@;'; put 'put ''MCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0''@;'; put 'put ''QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThh''@;'; put 'put ''MSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSww''@;'; put 'put ''LDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjky''@;'; put 'put ''LDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMu''@;'; put 'put ''NmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEu''@;'; put 'put ''OTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAs''@;'; put 'put ''MCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAs''@;'; put 'put ''MCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs''@;'; put 'put ''ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4y''@;'; put 'put ''OSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAt''@;'; put 'put ''Ni4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0''@;'; put 'put ''LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2''@;'; put 'put ''LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQx''@;'; put 'put ''LjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTgu''@;'; put 'put ''NDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl''@;'; put 'put ''ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIu''@;'; put 'put ''NzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3''@;'; put 'put ''LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCww''@;'; put 'put ''LDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCww''@;'; put 'put ''LDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcu''@;'; put 'put ''NTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEy''@;'; put 'put ''LjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2''@;'; put 'put ''LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4y''@;'; put 'put ''M2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUs''@;'; put 'put ''MmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAs''@;'; put 'put ''MS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcu''@;'; put 'put ''NTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQz''@;'; put 'put ''LS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFo''@;'; put 'put ''MGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAs''@;'; put 'put ''MCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAs''@;'; put 'put ''MCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1''@;'; put 'put ''LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4''@;'; put 'put ''LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42''@;'; put 'put ''OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN''@;'; put 'put ''MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t''@;'; put 'put ''YWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNI''@;'; put 'put ''MjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3''@;'; put 'put ''LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIs''@;'; put 'put ''MC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwx''@;'; put 'put ''LjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgs''@;'; put 'put ''Mi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj''@;'; put 'put ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUs''@;'; put 'put ''MjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0y''@;'; put 'put ''Ljg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJj''@;'; put 'put ''MC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCww''@;'; put 'put ''LDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSww''@;'; put 'put ''LDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1''@;'; put 'put ''LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwy''@;'; put 'put ''NSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAt''@;'; put 'put ''LjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4''@;'; put 'put ''LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNh''@;'; put 'put ''MS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZs''@;'; put 'put ''LjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0x''@;'; put 'put ''LjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTIt''@;'; put 'put ''LjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUz''@;'; put 'put ''LDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIx''@;'; put 'put ''LjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3''@;'; put 'put ''LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcu''@;'; put 'put ''MzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAs''@;'; put 'put ''LjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0''@;'; put 'put ''LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCww''@;'; put 'put ''LDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5''@;'; put 'put ''LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1''@;'; put 'put ''LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEu''@;'; put 'put ''OTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40''@;'; put 'put ''NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41''@;'; put 'put ''M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDks''@;'; put 'put ''MTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0i''@;'; put 'put ''MyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4x''@;'; put 'put ''MiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt''@;'; put 'put ''LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9''@;'; put 'put ''IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40''@;'; put 'put ''MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEu''@;'; put 'put ''OCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5''@;'; put 'put ''LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCww''@;'; put 'put ''LDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJI''@;'; put 'put ''MzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEu''@;'; put 'put ''MjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAs''@;'; put 'put ''MCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFW''@;'; put 'put ''MjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVSb3V0ZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCww''@;'; put 'put ''LTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEs''@;'; put 'put ''MCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEs''@;'; put 'put ''MCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlh''@;'; put 'put ''MSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQx''@;'; put 'put ''TDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEs''@;'; put 'put ''MCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEs''@;'; put 'put ''OC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40Mkwz''@;'; put 'put ''MC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTlo''@;'; put 'put ''Ny42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCww''@;'; put 'put ''LDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40''@;'; put 'put ''YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wt''@;'; put 'put ''Mi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRs''@;'; put 'put ''Mi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAs''@;'; put 'put ''MSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42''@;'; put 'put ''SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40''@;'; put 'put ''OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwx''@;'; put 'put ''LDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44''@;'; put 'put ''LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4x''@;'; put 'put ''NUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYi''@;'; put 'put ''IHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVZNPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwy''@;'; put 'put ''LDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhl''@;'; put 'put ''aWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBh''@;'; put 'put ''MiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs''@;'; put 'put ''MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMu''@;'; put 'put ''NWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJo''@;'; put 'put ''NHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCww''@;'; put 'put ''LDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5''@;'; put 'put ''LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwy''@;'; put 'put ''LDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlk''@;'; put 'put ''LXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2''@;'; put 'put ''YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAg''@;'; put 'put ''ICAgICcpLGwuQ2xyU2hhcGVWTVdBcHA9KDAsYS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAz''@;'; put 'put ''MCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9''@;'; put 'put ''IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''b2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHln''@;'; put 'put ''b24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9''@;'; put 'put ''IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAy''@;'; put 'put ''MC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0''@;'; put 'put ''ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2''@;'; put 'put ''Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAz''@;'; put 'put ''MiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAy''@;'; put 'put ''OCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i''@;'; put 'put ''NSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''NyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiww''@;'; put 'put ''LDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwy''@;'; put 'put ''Ny40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3''@;'; put 'put ''LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQu''@;'; put 'put ''MzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44''@;'; put 'put ''NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i''@;'; put 'put ''YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQs''@;'; put 'put ''MTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45''@;'; put 'put ''MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAu''@;'; put 'put ''NDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1i''@;'; put 'put ''YWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42''@;'; put 'put ''SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2''@;'; put 'put ''LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAs''@;'; put 'put ''MCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu''@;'; put 'put ''NjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5''@;'; put 'put ''LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y''@;'; put 'put ''OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIu''@;'; put 'put ''MzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCww''@;'; put 'put ''LDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg''@;'; put 'put ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQXJjaGl2ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMy''@;'; put 'put ''YTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAs''@;'; put 'put ''MSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w''@;'; put 'put ''YXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlW''@;'; put 'put ''MTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEz''@;'; put 'put ''LjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43''@;'; put 'put ''OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgy''@;'; put 'put ''MC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCww''@;'; put 'put ''LDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00''@;'; put 'put ''IiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQ29ubmVjdD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIy''@;'; put 'put ''LDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi''@;'; put 'put ''IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVEaXNj''@;'; put 'put ''b25uZWN0PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwx''@;'; put 'put ''aDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1''@;'; put 'put ''LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICcpLGwuQ2xyU2hhcGVMaW5rPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEu''@;'; put 'put ''NzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcu''@;'; put 'put ''NiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRh''@;'; put 'put ''NCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42''@;'; put 'put ''OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVVubGluaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUu''@;'; put 'put ''OTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQu''@;'; put 'put ''NzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxsLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41''@;'; put 'put ''NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEs''@;'; put 'put ''MTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0y''@;'; put 'put ''LjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEu''@;'; put 'put ''MTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIu''@;'; put 'put ''MzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45''@;'; put 'put ''MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42''@;'; put 'put ''NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4x''@;'; put 'put ''Niw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwu''@;'; put 'put ''MTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIw''@;'; put 'put ''LjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEu''@;'; put 'put ''ODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUt''@;'; put 'put ''Ljg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCww''@;'; put 'put ''LDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4y''@;'; put 'put ''NWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZURlcGxveT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAs''@;'; put 'put ''MS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwx''@;'; put 'put ''LDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIx''@;'; put 'put ''LDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEs''@;'; put 'put ''MSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2''@;'; put 'put ''bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUhlbGl4PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwx''@;'; put 'put ''LS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0u''@;'; put 'put ''NDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0x''@;'; put 'put ''LjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEu''@;'; put 'put ''NjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4x''@;'; put 'put ''NSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9''@;'; put 'put ''Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41''@;'; put 'put ''MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcs''@;'; put 'put ''My41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1''@;'; put 'put ''LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIs''@;'; put 'put ''Mi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1''@;'; put 'put ''LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEu''@;'; put 'put ''MjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVGbGFzaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAs''@;'; put 'put ''MCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0y''@;'; put 'put ''LjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMx''@;'; put 'put ''LDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsYS5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2''@;'; put 'put ''LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcs''@;'; put 'put ''MCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAs''@;'; put 'put ''MCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1''@;'; put 'put ''LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiww''@;'; put 'put ''LDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEu''@;'; put 'put ''MzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMu''@;'; put 'put ''MzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4z''@;'; put 'put ''NS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0y''@;'; put 'put ''LS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCww''@;'; put 'put ''LDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4z''@;'; put 'put ''Ni4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4w''@;'; put 'put ''NWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCww''@;'; put 'put ''LC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksbC5DbHJT''@;'; put 'put ''aGFwZUhhcmREcml2ZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5''@;'; put 'put ''LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEy''@;'; put 'put ''LjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; put 'put ''Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAs''@;'; put 'put ''MCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0z''@;'; put 'put ''LjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5''@;'; put 'put ''LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03''@;'; put 'put ''LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEs''@;'; put 'put ''MzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxhLmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhI''@;'; put 'put ''MTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAs''@;'; put 'put ''MSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFh''@;'; put 'put ''LjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAg''@;'; put 'put ''ICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAs''@;'; put 'put ''MTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAs''@;'; put 'put ''My43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3''@;'; put 'put ''Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAs''@;'; put 'put ''MCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwx''@;'; put 'put ''LDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUt''@;'; put 'put ''MS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVOVk1lPSgwLGEuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0i''@;'; put 'put ''MTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCww''@;'; put 'put ''LDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksbC5DbHJTaGFwZVNTRD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0''@;'; put 'put ''QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAu''@;'; put 'put ''MjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0y''@;'; put 'put ''LjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwx''@;'; put 'put ''MCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5Ljcz''@;'; put 'put ''LDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRj''@;'; put 'put ''MS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0''@;'; put 'put ''aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwy''@;'; put 'put ''LDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFpt''@;'; put 'put ''NS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIs''@;'; put 'put ''MS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2''@;'; put 'put ''LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4z''@;'; put 'put ''Ny0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwy''@;'; put 'put ''Mi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLGwuQ2xyU2hhcGVCbHVldG9vdGg9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwx''@;'; put 'put ''LDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4y''@;'; put 'put ''My02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMu''@;'; put 'put ''NiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwx''@;'; put 'put ''LjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwy''@;'; put 'put ''Ni41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwx''@;'; put 'put ''Ni42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwx''@;'; put 'put ''OSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUu''@;'; put 'put ''NDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIu''@;'; put 'put ''NzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcs''@;'; put 'put ''MS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQu''@;'; put 'put ''NDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCww''@;'; put 'put ''LDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEs''@;'; put 'put ''MSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwx''@;'; put 'put ''LDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0x''@;'; put 'put ''LDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2''@;'; put 'put ''LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTgu''@;'; put 'put ''NjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQu''@;'; put 'put ''ODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4''@;'; put 'put ''bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBdG9tPSgwLGEuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIy''@;'; put 'put ''LDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43''@;'; put 'put ''OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQs''@;'; put 'put ''MCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAs''@;'; put 'put ''My42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02''@;'; put 'put ''LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1''@;'; put 'put ''LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2''@;'; put 'put ''YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCww''@;'; put 'put ''LDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwy''@;'; put 'put ''Mi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMu''@;'; put 'put ''NDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTct''@;'; put 'put ''LjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0My''@;'; put 'put ''Ljg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQs''@;'; put 'put ''MTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUz''@;'; put 'put ''LTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUs''@;'; put 'put ''MS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCww''@;'; put 'put ''LDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUt''@;'; put 'put ''NC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwx''@;'; put 'put ''LTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCYXJDb2Rl''@;'; put 'put ''PSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCww''@;'; put 'put ''LDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAs''@;'; put 'put ''MCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLGwuQ2xyU2hhcGVDZER2ZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0''@;'; put 'put ''LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIu''@;'; put 'put ''ODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkEx''@;'; put 'put ''MC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMw''@;'; put 'put ''LjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwx''@;'; put 'put ''NiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4x''@;'; put 'put ''MywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43''@;'; put 'put ''NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQ29udGFpbmVyPSgwLGEuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCww''@;'; put 'put ''LDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjgu''@;'; put 'put ''OCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2''@;'; put 'put ''SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEu''@;'; put 'put ''NzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEt''@;'; put 'put ''Ljc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwu''@;'; put 'put ''Q2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0''@;'; put 'put ''LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgx''@;'; put 'put ''OGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43''@;'; put 'put ''djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCww''@;'; put 'put ''LDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43Ljcs''@;'; put 'put ''MCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2''@;'; put 'put ''LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYs''@;'; put 'put ''MTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxsLkNsclNoYXBlRmlsZVNoYXJlPSgwLGEuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy''@;'; put 'put ''LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2''@;'; put 'put ''LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEt''@;'; put 'put ''Mi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZVFyQ29kZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+''@;'; put 'put ''PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTgg''@;'; put 'put ''MTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAy''@;'; put 'put ''MiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIg''@;'; put 'put ''MjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIw''@;'; put 'put ''IDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0''@;'; put 'put ''aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTgg''@;'; put 'put ''MjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxsLkNsclNoYXBlVXNiPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIu''@;'; put 'put ''ODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEt''@;'; put 'put ''Mi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43''@;'; put 'put ''OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42''@;'; put 'put ''OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMx''@;'; put 'put ''YS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCww''@;'; put 'put ''LTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAs''@;'; put 'put ''LjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVSYWRhcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIs''@;'; put 'put ''MThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNz''@;'; put 'put ''LTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2''@;'; put 'put ''LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRT''@;'; put 'put ''NCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03''@;'; put 'put ''LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0''@;'; put 'put ''YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIu''@;'; put 'put ''NDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwx''@;'; put 'put ''Mi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIu''@;'; put 'put ''ODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcy''@;'; put 'put ''LDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45''@;'; put 'put ''M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTEx''@;'; put 'put ''LjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSww''@;'; put 'put ''LDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4''@;'; put 'put ''bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0x''@;'; put 'put ''LjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUNhcGFjaXRvcj0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEs''@;'; put 'put ''MSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41''@;'; put 'put ''NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlU3F1aWQ9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBW''@;'; put 'put ''NkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEt''@;'; put 'put ''LjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAs''@;'; put 'put ''MywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCww''@;'; put 'put ''LDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEs''@;'; put 'put ''MCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlSG9zdEdyb3VwPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJW''@;'; put 'put ''MzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCww''@;'; put 'put ''LDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIg''@;'; put 'put ''QzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwx''@;'; put 'put ''MS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4x''@;'; put 'put ''LDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIz''@;'; put 'put ''LjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksbC5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwx''@;'; put 'put ''LDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2''@;'; put 'put ''IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC01Ii8+JyksbC5DbHJTaGFwZU5vZGVHcm91cD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42''@;'; put 'put ''NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEs''@;'; put 'put ''MCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdM''@;'; put 'put ''MzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcu''@;'; put 'put ''MzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVOb2Rlcz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIi8+JyksbC5DbHJTaGFwZU5hbWVzcGFjZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4y''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDku''@;'; put 'put ''NjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2''@;'; put 'put ''NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLGwuQ2xyU2hhcGVOb2RlPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4z''@;'; put 'put ''M1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksbC5DbHJTaGFwZVBvZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2''@;'; put 'put ''LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwy''@;'; put 'put ''MWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxsLkNsckNvbnRyb2xMdW49KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44''@;'; put 'put ''M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4''@;'; put 'put ''LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4y''@;'; put 'put ''OCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1''@;'; put 'put ''LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwy''@;'; put 'put ''LTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEs''@;'; put 'put ''MUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2''@;'; put 'put ''LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4z''@;'; put 'put ''LDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxu''@;'; put 'put ''ICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4w''@;'; put 'put ''OSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjda''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4''@;'; put 'put ''LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3''@;'; put 'put ''Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMw''@;'; put 'put ''Yy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCww''@;'; put 'put ''LDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0''@;'; put 'put ''aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAs''@;'; put 'put ''MSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgz''@;'; put 'put ''LDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEy''@;'; put 'put ''NS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjks''@;'; put 'put ''Mi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCww''@;'; put 'put ''LDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4z''@;'; put 'put ''LDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAs''@;'; put 'put ''MS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5c''@;'; put 'put ''biAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIu''@;'; put 'put ''NzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4x''@;'; put 'put ''NiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwz''@;'; put 'put ''MmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEu''@;'; put 'put ''MjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcp''@;'; put 'put ''LGwuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsYS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZB''@;'; put 'put ''MiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBo''@;'; put 'put ''ZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIy''@;'; put 'put ''MCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4''@;'; put 'put ''LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41''@;'; put 'put ''OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZB''@;'; put 'put ''MiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRo''@;'; put 'put ''PSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWln''@;'; put 'put ''aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0''@;'; put 'put ''IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIx''@;'; put 'put ''LjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMy''@;'; put 'put ''SDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0''@;'; put 'put ''VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgt''@;'; put 'put ''Mkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJI''@;'; put 'put ''MTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxu''@;'; put 'put ''ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRI''@;'; put 'put ''MTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5''@;'; put 'put ''LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl''@;'; put 'put ''cnQiLz5cbiAgJyksbC5DbHJTaGFwZVRhcGVEcml2ZT0oMCxhLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4z''@;'; put 'put ''MywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIu''@;'; put 'put ''OTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIu''@;'; put 'put ''OTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhh''@;'; put 'put ''MiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYs''@;'; put 'put ''Ny42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwx''@;'; put 'put ''LDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCww''@;'; put 'put ''LDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk''@;'; put 'put ''Ii8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAs''@;'; put 'put ''MCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEs''@;'; put 'put ''MCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZW''@;'; put 'put ''MTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBh''@;'; put 'put ''dGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLGwuQ2xyU2hhcGVBbmltYXRpb249KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0x''@;'; put 'put ''LjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSww''@;'; put 'put ''LDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAs''@;'; put 'put ''Myw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMs''@;'; put 'put ''OC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxsLkNsclNoYXBl''@;'; put 'put ''Q2lDZD0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMu''@;'; put 'put ''NTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4w''@;'; put 'put ''OWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMyww''@;'; put 'put ''LDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQs''@;'; put 'put ''MTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCww''@;'; put 'put ''LDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEs''@;'; put 'put ''MSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4''@;'; put 'put ''LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCww''@;'; put 'put ''LDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLGwuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0Ex''@;'; put 'put ''Ljg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIu''@;'; put 'put ''NjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDks''@;'; put 'put ''Mi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIu''@;'; put 'put ''MTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLGwuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6bC5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''LCJwaG9uZS1oYW5kc2V0IjpsLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpsLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6bC5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOmwuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOmwuQ2xyU2hhcGVMYXllcnMsYmxvY2s6bC5DbHJTaGFwZUJs''@;'; put 'put ''b2NrLCJibG9ja3MtZ3JvdXAiOmwuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6bC5DbHJTaGFwZUJ1bmRsZSx3aWZpOmwuQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6bC5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6bC5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9y''@;'; put 'put ''ZSI6bC5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOmwuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpsLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpsLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6bC5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpsLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6bC5D''@;'; put 'put ''bHJTaGFwZUhvc3Qsc3RvcmFnZTpsLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOmwuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpsLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOmwuQ2xyU2hhcGVCdWlsZGluZyxjcHU6bC5DbHJTaGFwZUNQVSxtZW1vcnk6bC5DbHJTaGFwZU1l''@;'; put 'put ''bW9yeSwiZGF0YS1jbHVzdGVyIjpsLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOmwuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOmwuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6bC5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6bC5DbHJTaGFwZVNo''@;'; put 'put ''aWVsZFgsaW1wb3J0OmwuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OmwuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6bC5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6bC5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOmwuQ2xyU2hhcGVQbHVnaW4sZmxvcHB5Omwu''@;'; put 'put ''Q2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6bC5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6bC5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6bC5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6bC5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246bC5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6bC5DbHJT''@;'; put 'put ''aGFwZUJhdHRlcnksbW9iaWxlOmwuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OmwuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOmwuQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOmwuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpsLkNs''@;'; put 'put ''clNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6bC5DbHJTaGFwZVJvdXRlcix2bTpsLkNsclNoYXBlVk0sInZtdy1hcHAiOmwuQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6bC5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6bC5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOmwuQ2xyU2hh''@;'; put 'put ''cGVVbmFyY2hpdmUsY29ubmVjdDpsLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OmwuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6bC5DbHJTaGFwZUxpbmssdW5saW5rOmwuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOmwuQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxl''@;'; put 'put ''IjpsLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6bC5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOmwuQ2xyQ29udHJvbEx1bixkZXBsb3k6bC5DbHJTaGFwZURlcGxveSxoZWxpeDpsLkNsclNoYXBlSGVsaXgsZmxhc2s6bC5DbHJTaGFwZUZsYXNrLGFkbWlu''@;'; put 'put ''aXN0cmF0b3I6bC5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOmwuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOmwuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOmwuQ2xyU2hhcGVOVk1lLHNzZDpsLkNsclNoYXBlU1NELGJsdWV0b290aDpsLkNsclNo''@;'; put 'put ''YXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpsLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpsLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpsLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOmwuQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6bC5DbHJTaGFw''@;'; put 'put ''ZUJhckNvZGUsImNkLWR2ZCI6bC5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpsLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpsLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpsLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpsLkNsclNoYXBlUXJD''@;'; put 'put ''b2RlLHVzYjpsLkNsclNoYXBlVXNiLHJhZGFyOmwuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6bC5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpsLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6bC5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOmwuQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6''@;'; put 'put ''bC5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpsLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOmwuQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6bC5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpsLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6bC5DbHJTaGFwZU5v''@;'; put 'put ''ZGUscG9kOmwuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOmwuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOmwuQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOmwuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpsLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpsLkNs''@;'; put 'put ''clNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxwLmRlc2NyaXB0b3JDb25maWcpKGwuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywiY29tbWFu''@;'; put 'put ''ZCIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShsLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCxw''@;'; put 'put ''LmRlc2NyaXB0b3JDb25maWcpKGwuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAscC5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShsLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobC5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLHAuZGVzY3JpcHRvckNvbmZpZykobC5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2lu''@;'; put 'put ''ZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxIKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuVGV4dEVkaXRTaGFwZXM9bC5DbHJTaGFwZVN1cGVyc2NyaXB0PWwuQ2xyU2hhcGVTdWJz''@;'; put 'put ''Y3JpcHQ9bC5DbHJTaGFwZVN0cmlrZXRocm91Z2g9bC5DbHJTaGFwZUluZGVudD1sLkNsclNoYXBlT3V0ZGVudD1sLkNsclNoYXBlSGlnaGxpZ2h0ZXI9bC5DbHJTaGFwZVRleHRDb2xvcj1sLkNsclNoYXBlTGFuZ3VhZ2U9bC5DbHJTaGFwZUFsaWduVG9wPWwuQ2xyU2hhcGVBbGlnbk1pZGRs''@;'; put 'put ''ZT1sLkNsclNoYXBlQWxpZ25Cb3R0b209bC5DbHJTaGFwZVVuZGVybGluZT1sLkNsclNoYXBlVGV4dD1sLkNsclNoYXBlQWxpZ25SaWdodFRleHQ9bC5DbHJTaGFwZUJsb2NrUXVvdGU9bC5DbHJTaGFwZVBhaW50Um9sbGVyPWwuQ2xyU2hhcGVOdW1iZXJMaXN0PWwuQ2xyU2hhcGVBbGlnbkxl''@;'; put 'put ''ZnRUZXh0PWwuQ2xyU2hhcGVKdXN0aWZ5VGV4dD1sLkNsclNoYXBlSXRhbGljPWwuQ2xyU2hhcGVBbGlnblJpZ2h0PWwuQ2xyU2hhcGVBbGlnbkxlZnQ9bC5DbHJTaGFwZUFsaWduQ2VudGVyPWwuQ2xyU2hhcGVGb250U2l6ZT1sLkNsclNoYXBlQ2hlY2tib3hMaXN0PWwuQ2xyU2hhcGVDZW50''@;'; put 'put ''ZXJUZXh0PWwuQ2xyU2hhcGVCdWxsZXRMaXN0PWwuQ2xyU2hhcGVCb2xkPXZvaWQgMCxIPUgoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxsLkNsclNoYXBlQm9sZD0oMCxILmNscklj''@;'; put 'put ''b25TVkcpKCc8cGF0aCBkPSJNMjIuNDMsMTcuNTRhNC42Nyw0LjY3LDAsMCwwLDIuOC00LjM3di0uMDZhNC40Myw0LjQzLDAsMCwwLTEuMzEtMy4yNSw3LjA5LDcuMDksMCwwLDAtNS4xMy0xLjczaC03QTEuNzEsMS43MSwwLDAsMCwxMCw5Ljg2VjI2YTEuNzIsMS43MiwwLDAsMCwxLjc0LDEu''@;'; put 'put ''NzRoNy4zM2M0LjM3LDAsNy4yNS0xLjg4LDcuMjUtNS4zOFYyMi4zQzI2LjMyLDE5LjY0LDI0LjczLDE4LjMyLDIyLjQzLDE3LjU0Wk0xMy42OCwxMS40aDQuNTRjMiwwLDMuMTUuODksMy4xNSwyLjMzdi4wNmMwLDEuNjgtMS4zNiwyLjQ5LTMuMzgsMi40OUgxMy42OFpNMjIuMzcsMjJjMCwx''@;'; put 'put ''LjU5LTEuMzEsMi40My0zLjQ2LDIuNDNIMTMuNjhWMTkuNjJoNWMyLjQ5LDAsMy42OS44OCwzLjY5LDIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQnVsbGV0TGlzdD0oMCxILmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSI1''@;'; put 'put ''LjIxIiBjeT0iOS4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjE3LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSI1LjIxIiBj''@;'; put 'put ''eT0iMjUuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUNlbnRlclRleHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjg4LDhINS4xMmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjUuNSwxNi4yYTEuMSwxLjEsMCwxLDAsMC0yLjJoLTE1YTEuMSwxLjEsMCwxLDAsMCwyLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAuMjUsMjBINS43NWExLjEsMS4xLDAsMCwwLDAs''@;'; put 'put ''Mi4yaDI0LjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC44OCwyNkgxMS4xMmExLjEsMS4xLDAsMSwwLDAsMi4ySDI0Ljg4YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlQ2hlY2tib3hMaXN0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40MywxNkgxMHYySDMxLjQzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48''@;'; put 'put ''cGF0aCBkPSJNMzEuNDMsMjRIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE1LjQ1LDEwaDE2YTEsMSwwLDAsMCwwLTJoLTE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjUsMy40MmExLjA5LDEuMDksMCwwLDAtMS41NSwwTDcuODksMTEuNDgsNC41MSw3Ljg0QTEuMSwxLjEsMCwxLDAsMi45LDkuMzRsNC45NCw1LjNMMTcuNSw1QTEuMSwxLjEsMCwwLDAsMTcuNSwzLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy''@;'; put 'put ''LWktb3V0bGluZS1wYXRoLTQiIC8+JyksbC5DbHJTaGFwZUZvbnRTaXplPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSw5LjA4QTEuMTMsMS4xMywwLDAsMCwxOS44Niw4SDQuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTFWMjdhMS4wOSwxLjA5LDAsMCwwLDIuMTcsMFYxMC4xOWg2''@;'; put 'put ''LjY5QTEuMTQsMS4xNCwwLDAsMCwyMSw5LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLjY3LDE1SDIxLjE1YTEuMSwxLjEsMCwxLDAsMCwyLjE5SDI1VjI2LjVhMS4wOSwxLjA5LDAsMCwwLDIuMTcsMFYxNy4yM2gzLjU0YTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMC0yLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZUFsaWduQ2VudGVyPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwyMEgxOVYxNmg2YTEsMSwwLDAsMCwxLTFWN2ExLDEsMCwwLDAtMS0xSDE5''@;'; put 'put ''VjJhMSwxLDAsMCwwLTIsMFY2SDExYTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDZ2NEg1YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxSDE3djRhMSwxLDAsMCwwLDIsMFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFpNMTIsMTRWOEgyNHY2Wk0zMCwy''@;'; put 'put ''OEg2VjIySDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksbC5DbHJTaGFwZUFsaWduTGVmdD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSwxQTEsMSwwLDAsMCw0LDJWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCw1LDFaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEsMjBIOFYzMEgzMWExLDEsMCwwLDAsMS0xVjIxQTEsMSwwLDAsMCwzMSwyMFptLTEsOEgxMFYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yNCwxNVY3YTEsMSwwLDAsMC0xLTFIOFYxNkgyM0ExLDEsMCwwLDAsMjQsMTVabS0yLTFIMTBWOEgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVBbGlnblJpZ2h0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; put 'put ''MSwxYTEsMSwwLDAsMC0xLDFWMzRhMSwxLDAsMCwwLDIsMFYyQTEsMSwwLDAsMCwzMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMjF2OGExLDEsMCwwLDAsMSwxSDI4VjIwSDVBMSwxLDAsMCwwLDQsMjFabTIsMUgyNnY2SDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTIsN3Y4YTEsMSwwLDAsMCwxLDFIMjhWNkgxM0ExLDEsMCwwLDAsMTIsN1ptMiwxSDI2djZIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxs''@;'; put 'put ''LkNsclNoYXBlSXRhbGljPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC40Miw4SDE3LjFhMS4xLDEuMSwwLDEsMCwwLDIuMTloMi4xM0wxMy4xMSwyNS41NUgxMC40N2ExLjEsMS4xLDAsMSwwLDAsMi4xOUgxNy44YTEuMSwxLjEsMCwxLDAsMC0yLjE5SDE1LjUxbDYuMTMtMTUuMzZo''@;'; put 'put ''Mi43OGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLGwuQ2xyU2hhcGVKdXN0aWZ5VGV4dD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMC4ySDMxLjc1YTEuMSwxLjEsMCwxLDAsMC0yLjJINmExLjEs''@;'; put 'put ''MS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjc1LDE0SDZhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMxLjEyLDIwSDYuNjJhMS4xLDEuMSwwLDEsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNDUsMjUuODNINi42YTEuMSwxLjEsMCww''@;'; put 'put ''LDAsMCwyLjJIMzAuNDVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC4yNSwyNkg2djIuMkgyMC4yNWExLjEsMS4x''@;'; put 'put ''LDAsMCwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI4LDIwSDZ2Mi4ySDI4QTEuMSwxLjEsMCwwLDAsMjgsMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjIu''@;'; put 'put ''NiwxNS4xQTEuMSwxLjEsMCwwLDAsMjEuNSwxNEg2djIuMkgyMS41QTEuMSwxLjEsMCwwLDAsMjIuNiwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LjI1LDhINnYyLjJIMjkuMjVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLGwuQ2xyU2hhcGVOdW1iZXJMaXN0PSgwLEguY2xySWNvblNWRykoJzxwb2x5Z29uIHBvaW50cz0iNS40NiA3LjQxIDUuNDYgMTEuNTYgNi42NSAxMS41NiA2LjY1IDYuMDUgNS43IDYuMDUgNC4wNSA3LjE2IDQu''@;'; put 'put ''NTIgOCA1LjQ2IDcuNDEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjU3LDE0LjgyYS43Ni43NiwwLDAsMSwuODMuNzNjMCwuMzgtLjIxLjc0LS44NywxLjI3bC0yLDEuNTd2MUg3LjY3VjE4LjI4SDUuMzNsMS0uNzdjMS0uNywxLjI4''@;'; put 'put ''LTEuMjcsMS4yOC0yYTEuODMsMS44MywwLDAsMC0yLTEuNzYsMi42MywyLjYzLDAsMCwwLTIuMTQsMS4wOGwuNzYuNzNBMS43NSwxLjc1LDAsMCwxLDUuNTcsMTQuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNi41NiwyNC42NGEx''@;'; put 'put ''LjMyLDEuMzIsMCwwLDAsMS0xLjI3YzAtLjg3LS43OC0xLjUxLTItMS41MWEyLjYxLDIuNjEsMCwwLDAtMi4xLDFsLjY5LjcyYTEuNzgsMS43OCwwLDAsMSwxLjMtLjY0Yy41NCwwLC45Mi4yNi45Mi42NnMtLjM2LjYyLTEsLjYySDQuNzl2MWguNjRjLjc0LDAsMS4wNy4yMSwxLjA3LjYzcy0u''@;'; put 'put ''MzUuNjgtMSwuNjhhMiwyLDAsMCwxLTEuNDYtLjY1bC0uNy43OGEyLjg1LDIuODUsMCwwLDAsMi4yMS45M2MxLjI5LDAsMi4xMy0uNjksMi4xMy0xLjY0QTEuMzMsMS4zMywwLDAsMCw2LjU2LDI0LjY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBh''@;'; put 'put ''dGggZD0iTTMyLjQyLDlhMSwxLDAsMCwwLTEtMUgxMHYySDMxLjQyQTEsMSwwLDAsMCwzMi40Miw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMxLjQyLDE2SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMS40MiwyNEgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxsLkNsclNoYXBlUGFpbnRSb2xsZXI9KDAsSC5jbHJJY29uU1ZHKSgn''@;'; put 'put ''PHBhdGggZD0iTTMxLDEwVjRhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDR2NmEyLDIsMCwwLDAsMiwySDI5QTIsMiwwLDAsMCwzMSwxMFpNNiw0SDI5djZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjlM''@;'; put 'put ''MTguNywxNi41NGExLDEsMCwwLDAtLjcsMVYxOUgxNlYzM2EyLDIsMCwwLDAsMiwyaDJhMiwyLDAsMCwwLDItMlYxOUgyMHYtLjczTDMzLjMsMTRhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMsNlpNMjAsMzNIMThWMjFoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxyZWN0IHg9IjQiIHk9IjIiIHdpZHRoPSIyNyIgaGVpZ2h0PSIxMCIgcng9IjEiIHJ5PSIxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMyw2SDMydjYuMjRMMTguNzEsMTYuNDVhMSwxLDAsMCwwLS43MSwxVjE5SDE2''@;'; put 'put ''VjM0YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE5SDIwdi0uODJMMzMuMjksMTRBMSwxLDAsMCwwLDM0LDEzVjdBMSwxLDAsMCwwLDMzLDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVCbG9ja1F1b3RlPSgwLEguY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGQ9Ik0xMS44NiwxNi41NWE0LjMxLDQuMzEsMCwwLDAtMi4xMS41NiwxNC40NCwxNC40NCwwLDAsMSw0LjM2LTYsMS4xLDEuMSwwLDAsMC0xLjQtMS43Yy00LDMuMjUtNS43OCw3Ljc1LTUuNzgsMTAuNTRBNS4wOCw1LjA4LDAsMCwwLDEwLDI0LjU4YTQuNCw0LjQsMCww''@;'; put 'put ''LDAsMS44OC40NCw0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIzLDE2LjU1YTQuMjksNC4yOSwwLDAsMC0yLjExLjU2LDE0LjUsMTQuNSwwLDAsMSw0LjM1LTYsMS4xLDEuMSwwLDEsMC0xLjM5''@;'; put 'put ''LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0YTUuMDgsNS4wOCwwLDAsMCwzLDQuNjFBNC4zNyw0LjM3LDAsMCwwLDIzLDI1YTQuMjQsNC4yNCwwLDEsMCwwLTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxsLkNsclNoYXBlQWxp''@;'; put 'put ''Z25SaWdodFRleHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY1LDI3LjFhMS4xLDEuMSwwLDAsMCwxLjEsMS4xSDMwVjI2SDE1Ljc1QTEuMSwxLjEsMCwwLDAsMTQuNjUsMjcuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik02LjksMjEuMUExLjEsMS4xLDAsMCwwLDgsMjIuMkgzMFYyMEg4QTEuMSwxLjEsMCwwLDAsNi45LDIxLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTMuNCwxNS4xYTEuMSwxLjEsMCwwLDAsMS4xLDEuMUgzMFYxNEgxNC41QTEu''@;'; put 'put ''MSwxLjEsMCwwLDAsMTMuNCwxNS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTYuNzUsOGExLjEsMS4xLDAsMSwwLDAsMi4ySDMwVjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxsLkNs''@;'; put 'put ''clNoYXBlVGV4dD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIuMTksOC44NGExLjQ1LDEuNDUsMCwwLDAtMS40LTFoLS4xMmExLjQ2LDEuNDYsMCwwLDAtMS40MiwxTDEuMTQsMjYuNTZhMS4yOSwxLjI5LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTIsMS4xMiwwLDAsMCwx''@;'; put 'put ''LjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS42NCwxLjY0LDAsMCwwLS4xNC0uNTdaTTYuMDgsMjAuNzFsNC41OS0xMC4yMiw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzIuMjQsMTQuNzhBNi4zNSw2LjM1LDAsMCwwLDI3LjYsMTMuMmExMS4zNiwxMS4zNiwwLDAsMC00LjcsMSwxLDEsMCwwLDAtLjU4Ljg5LDEsMSwwLDAsMCwuOTQuOTIsMS4yMywxLjIzLDAsMCwwLC4zOS0uMDgsOC44Nyw4Ljg3LDAsMCwx''@;'; put 'put ''LDMuNzItLjgxYzIuNywwLDQuMjgsMS4zMyw0LjI4LDMuOTJ2LjVhMTUuMjksMTUuMjksMCwwLDAtNC40Mi0uNjFjLTMuNjQsMC02LjE0LDEuNjEtNi4xNCw0LjY0di4wNWMwLDIuOTUsMi43LDQuNDgsNS4zNyw0LjQ4YTYuMjksNi4yOSwwLDAsMCw1LjE5LTIuNDhWMjYuOWExLDEsMCwwLDAs''@;'; put 'put ''MSwxLDEsMSwwLDAsMCwxLTEuMDZWMTlBNS43MSw1LjcxLDAsMCwwLDMyLjI0LDE0Ljc4Wm0tLjU2LDcuN2MwLDIuMjgtMi4xNywzLjg5LTQuODEsMy44OS0xLjk0LDAtMy42MS0xLjA2LTMuNjEtMi44NnYtLjA2YzAtMS44LDEuNS0zLDQuMi0zYTE1LjIsMTUuMiwwLDAsMSw0LjIyLjYxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksbC5DbHJTaGFwZVVuZGVybGluZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjguMTdjNS4wOCwwLDguNDgtMy4wOCw4LjQ4LTlWOC41NGExLjE1LDEuMTUsMCwxLDAtMi4zLDB2MTAuOGMwLDQu''@;'; put 'put ''NDQtMi4zOCw2LjcxLTYuMTMsNi43MXMtNi4yMS0yLjQ3LTYuMjEtNi44NVY4LjU0YTEuMTUsMS4xNSwwLDEsMC0yLjMsMHYxMC44QzkuNTMsMjUuMDksMTMsMjguMTcsMTgsMjguMTdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzEs''@;'; put 'put ''MzBINWExLjExLDEuMTEsMCwwLDAsMCwyLjIxSDMxQTEuMTEsMS4xMSwwLDAsMCwzMSwzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVBbGlnbkJvdHRvbT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMzBIMmExLDEs''@;'; put 'put ''MCwwLDAsMCwySDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTYsNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYyOEgxNlpNMTQsMjZIOFY2aDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMTNhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxVjI4SDMwWk0yOCwyNkgyMlYxNGg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksbC5DbHJTaGFwZUFsaWduTWlkZGxlPSgwLEgu''@;'; put 'put ''Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCwxN0gzMFYxMWExLDEsMCwwLDAtMS0xSDIxYTEsMSwwLDAsMC0xLDF2NkgxNlY1YTEsMSwwLDAsMC0xLTFIN0ExLDEsMCwwLDAsNiw1VjE3SDJhMSwxLDAsMCwwLDAsMkg2VjMxYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjE5aDR2NmEx''@;'; put 'put ''LDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0YTEsMSwwLDAsMCwwLTJaTTE0LDMwSDhWNmg2Wm0xNC02SDIyVjEyaDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxsLkNsclNoYXBlQWxpZ25Ub3A9KDAsSC5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTM0LDRIMkExLDEsMCwwLDAsMiw2SDM0YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDZaTTgsMTBoNlYzMEg4WiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDIzYTEsMSwwLDAsMCwxLDFoOGExLDEsMCwwLDAsMS0xVjhIMjBabTItMTNoNlYyMkgyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLGwuQ2xyU2hhcGVMYW5n''@;'; put 'put ''dWFnZT0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAsM0gxNHY1aDJWNWgxNGMwLjYsMCwxLDAuNCwxLDF2MTFjMCwwLjYtMC40LDEtMSwxSDE3djdoLTUuM0w4LDI3LjlWMjVINWMtMC42LDAtMS0wLjQtMS0xVjEzYzAtMC42LDAuNC0xLDEtMWgxM3YtMkg1XG5cdFx0Yy0xLjcsMC0z''@;'; put 'put ''LDEuMy0zLDN2MTFjMCwxLjcsMS4zLDMsMywzaDF2NS4xbDYuMy01LjFIMTl2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZDMzMsNC4zLDMxLjcsMywzMCwzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYuMiwyMi45aDIuNGwwLjYtMS42''@;'; put 'put ''aDMuMWwwLjYsMS42aDIuNEwxMS45LDE0SDkuNUw2LjIsMjIuOXogTTEwLjcsMTYuNWwxLDMuMWgtMkwxMC43LDE2LjV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjAsMTdjMS4xLDAsMi42LTAuMyw0LTFjMS40LDAuNywzLDEsNCwx''@;'; put 'put ''di0yYzAsMC0xLDAtMi4xLTAuNGMxLjItMS4yLDIuMS0zLDIuMS01LjZWOGgtM1Y2aC0ydjJoLTN2Mmg1Ljlcblx0XHRjLTAuMiwxLjgtMSwyLjktMS45LDMuNmMtMC42LTAuNS0xLjItMS4yLTEuNi0yLjFoLTIuMWMwLjQsMS4zLDEsMi4zLDEuOCwzLjFDMjEuMSwxNSwyMC4yLDE1LDIwLDE1''@;'; put 'put ''VjE3eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBvbHlnb24gcG9pbnRzPSIxMSwxNi41IDEwLDE5LjYgMTIsMTkuNiAxMSwxNi41IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4zLDNoLTE2''@;'; put 'put ''djVoNHYyaC0xM2MtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xaDYuN3YtN2gxMWMxLjcsMCwzLTEuMywzLTNWNlxuXHRcdEMzMy4zLDQuMywzMiwzLDMwLjMsM3ogTTEzLjEsMjIuOWwtMC41LTEuNkg5LjVsLTAuNiwxLjZINi41TDkuOCwxNGgyLjRs''@;'; put 'put ''My4zLDguOUwxMy4xLDIyLjl6IE0yOC4zLDE1djJjLTEuMywwLTIuNy0wLjQtMy45LTFcblx0XHRjLTEuMiwwLjYtMi42LDAuOS00LDFsLTAuMS0yYzAuNywwLDEuNC0wLjEsMi4xLTAuM2MtMC45LTAuOS0xLjUtMi0xLjgtMy4yaDIuMWMwLjMsMC45LDAuOSwxLjYsMS42LDIuMmMxLjEtMC45''@;'; put 'put ''LDEuOC0yLjIsMS45LTMuN1xuXHRcdGgtNlY4aDNWNmgydjJoMy4zbDAuMSwxYzAuMSwyLjEtMC43LDQuMi0yLjIsNS43QzI3LjEsMTQuOSwyNy43LDE1LDI4LjMsMTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVUZXh0Q29sb3I9KDAs''@;'; put 'put ''SC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQ3LDMuODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xSDE4YTEuNDUsMS40NSwwLDAsMC0xLjQyLDFMOC40MiwyMS41NmExLjM1LDEuMzUsMCwwLDAtLjE0LjU5LDEsMSwwLDAsMCwxLDEsMS4xMSwxLjExLDAsMCwwLDEuMDgtLjc3bDIuMDgtNC42''@;'; put 'put ''NWgxMWwyLjA4LDQuNTlhMS4yNCwxLjI0LDAsMCwwLDEuMTIuODMsMS4wOCwxLjA4LDAsMCwwLDEuMDgtMS4wOCwxLjU5LDEuNTksMCwwLDAtLjE0LS41N1pNMTMuMzYsMTUuNzEsMTgsNS40OWw0LjYsMTAuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICA8cmVjdCB4PSI0LjA2IiB5PSIyNSIgd2lkdGg9IjI4IiBoZWlnaHQ9IjgiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxsLkNsclNoYXBlSGlnaGxpZ2h0ZXI9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1Ljgy''@;'; put 'put ''LDI2LjA2YTEsMSwwLDAsMS0uNzEtLjI5TDguNjcsMTkuMzNhMSwxLDAsMCwxLS4yOS0uNzEsMSwxLDAsMCwxLC4yOS0uNzFMMjMsMy41NGE1LjU1LDUuNTUsMCwxLDEsNy44NSw3Ljg2TDE2LjUzLDI1Ljc3QTEsMSwwLDAsMSwxNS44MiwyNi4wNlptLTUtNy40NCw1LDVMMjkuNDgsMTBhMy41''@;'; put 'put ''NCwzLjU0LDAsMCwwLDAtNSwzLjYzLDMuNjMsMCwwLDAtNSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTEwLjM4LDI4LjI4QTEsMSwwLDAsMSw5LjY3LDI4TDYuNDUsMjQuNzdhMSwxLDAsMCwxLS4yMi0xLjA5bDIuMjItNS40''@;'; put 'put ''NGExLDEsMCwwLDEsMS42My0uMzNsNi40NSw2LjQ0QTEsMSwwLDAsMSwxNi4yLDI2bC01LjQ0LDIuMjJBMS4zMywxLjMzLDAsMCwxLDEwLjM4LDI4LjI4Wk04LjMzLDIzLjgybDIuMjksMi4yOCwzLjQzLTEuNEw5Ljc0LDIwLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTguOTQsMzBoLTVhMSwxLDAsMCwxLS44NC0xLjU1bDMuMjItNC45NGExLDEsMCwwLDEsMS41NS0uMTZsMy4yMSwzLjIyYTEsMSwwLDAsMSwuMDYsMS4zNUw5LjcsMjkuNjRBMSwxLDAsMCwxLDguOTQsMzBaTTUuNzgsMjhIOC40N0w5LDI3LjM0bC0x''@;'; put 'put ''LjctMS43WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHJlY3QgeD0iMy4wNiIgeT0iMzEiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPicpLGwuQ2xyU2hhcGVPdXRkZW50''@;'; put 'put ''PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4wNiw5aC0yNmExLDEsMCwxLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxOWgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTMxLjA2LDI0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjloLTI2YTEsMSwwLDAsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik05LjU2LDIyLjU0YTEsMSwwLDAsMS0uNy0uM0w0LjYxLDE4bDQuMjUtNC4yNGExLDEsMCwwLDEsMS40MSwxLjQxTDcuNDQsMThsMi44MywyLjgzYTEsMSwwLDAsMS0uNzEsMS43MVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+JyksbC5DbHJTaGFwZUluZGVudD0oMCxILmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwx''@;'; put 'put ''LDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGgg''@;'; put 'put ''ZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNNS41NiwyMi41NGExLDEsMCwwLDEtLjctMS43MUw3LjY4LDE4LDQuODYsMTUuMTdhMSwxLDAsMCwx''@;'; put 'put ''LDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDEwLjUxLDE4LDYuMjcsMjIuMjRBMSwxLDAsMCwxLDUuNTYsMjIuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLGwuQ2xyU2hhcGVTdHJpa2V0aHJvdWdoPSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMi44OCwxOS45MmgtMzBhMSwxLDAsMSwxLDAtMmgzMGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTcuMjcsMTUuODZhMTIuOSwxMi45LDAsMCwxLDEuMjktLjUyQTUuNjksNS42OSwwLDAsMSwxMC4z''@;'; put 'put ''OSwxNWEzLjE4LDMuMTgsMCwwLDEsMi43NSwxLjExQTQuNDQsNC40NCwwLDAsMSwxNCwxOC44NXYuNDlhMTMuODMsMTMuODMsMCwwLDAtNC4yOS0uNzQsNi4xOSw2LjE5LDAsMCwwLTIuNTkuNTRBNSw1LDAsMCwwLDUuODEsMjBIMTUuODhWMTguODVhNS42Nyw1LjY3LDAsMCwwLTEuMzctNCw1''@;'; put 'put ''LjE2LDUuMTYsMCwwLDAtNC0xLjQ5LDEwLDEwLDAsMCwwLTMuOTEuODguODcuODcsMCwwLDAtLjQ0LDEuMThBLjg0Ljg0LDAsMCwwLDcuMjcsMTUuODZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEsMjBhNS45NCw1Ljk0LDAs''@;'; put 'put ''MCwxLC41NC0yLjMxLDQuMzUsNC4zNSwwLDAsMSwxLjU4LTEuODMsNC4yNyw0LjI3LDAsMCwxLDQuNTksMCw0LjQ3LDQuNDcsMCwwLDEsMS41NywxLjgzQTYuMTIsNi4xMiwwLDAsMSwyOS44NSwyMGgyYTcuNzMsNy43MywwLDAsMC0uNzgtMy4xOSw2LDYsMCwwLDAtMi4xOC0yLjQ1LDUuNzQs''@;'; put 'put ''NS43NCwwLDAsMC0zLjEtLjg4LDUuMzksNS4zOSwwLDAsMC0yLjguNzMsNS41NSw1LjU1LDAsMCwwLTIsMi4wNVYxMGEuODcuODcsMCwwLDAtLjg2LS44NkgyMGEuODcuODcsMCwwLDAtLjg2Ljg2VjIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAg''@;'; put 'put ''PHBhdGggZD0iTTI5LjY3LDIyYTUuNjEsNS42MSwwLDAsMS0uMzYsMS4wNyw0LjQ3LDQuNDcsMCwwLDEtMS41NywxLjg1LDQuMzIsNC4zMiwwLDAsMS00LjU5LDAsNC4zNSw0LjM1LDAsMCwxLTEuNTgtMS44NUE1LjY0LDUuNjQsMCwwLDEsMjEuMiwyMkgxOS4wOXY0LjEzQS44Ny44NywwLDAs''@;'; put 'put ''MCwyMCwyN2guMmEuODcuODcsMCwwLDAsLjg2LS44NlYyNC41MWE1LjU4LDUuNTgsMCwwLDAsMiwyLjA2LDUuNDgsNS40OCwwLDAsMCwyLjguNzIsNS42Niw1LjY2LDAsMCwwLDMuMS0uODhBNS44OCw1Ljg4LDAsMCwwLDMxLjA5LDI0LDcuMDksNy4wOSwwLDAsMCwzMS43MywyMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xNCwyMnYuNzZhMy4zNCwzLjM0LDAsMCwxLTEuNjIsMiw1LjM0LDUuMzQsMCwwLDEtMi42OS43MiwzLjc4LDMuNzgsMCwwLDEtMi4zNi0uNywyLjI0LDIuMjQsMCwwLDEtLjk0LTEuOSwyLjI5LDIu''@;'; put 'put ''MjksMCwwLDEsLjItLjkxSDQuNjJhNCw0LDAsMCwwLS4xMywxLDMuODMsMy44MywwLDAsMCwxLjM1LDMuMDZBNS4xNSw1LjE1LDAsMCwwLDkuMzEsMjcuMiw2LDYsMCwwLDAsMTIsMjYuNTdhNC42Miw0LjYyLDAsMCwwLDItMS43NFYyNmEuODYuODYsMCwwLDAsLjg2Ljg2SDE1YS44Ni44Niww''@;'; put 'put ''LDAsMCwuODYtLjg2VjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz4nKSxsLkNsclNoYXBlU3Vic2NyaXB0PSgwLEguY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC41NSwxOGw2LjgsOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3''@;'; put 'put ''LDAsMCwxLS45Mi0uNDRMMTMsMTkuOTEsNi42LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEuMTcsMCwwLDEtLjkyLTEuOUwxMS41NSwxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMTcsMS4xNywwLDAsMSw2LjYzLDhsNi40NCw4LjEzTDE5LjUsOGEx''@;'; put 'put ''LjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIzLDMxLjgsMjcuNDksMjhhOS45LDkuOSwwLDAsMCwxLjg4LTIuMDVBMy40NCwzLjQ0LDAsMCww''@;'; put 'put ''LDMwLDI0YTIuMzUsMi4zNSwwLDAsMC0uMzUtMS4yNywyLjQ0LDIuNDQsMCwwLDAtMS0uODQsMi45LDIuOSwwLDAsMC0xLjI2LS4yOCwzLjM2LDMuMzYsMCwwLDAtMS44My41LDUuNjQsNS42NCwwLDAsMC0xLjQ4LDEuNDJsLTEtLjgxYTUuMTEsNS4xMSwwLDAsMSw0LjM2LTIuMzcsNC4zNSw0''@;'; put 'put ''LjM1LDAsMCwxLDIsLjQ1LDMuNDMsMy40MywwLDAsMSwyLDMuMTgsNC40NSw0LjQ1LDAsMCwxLS42OCwyLjM1LDEwLjksMTAuOSwwLDAsMS0yLjI0LDIuNDZsLTMuMjQsMi44MUgzMS41VjMzSDIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz4nKSxsLkNs''@;'; put 'put ''clNoYXBlU3VwZXJzY3JpcHQ9KDAsSC5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjQzLDE4bDYuNzksOC42YTEuMTcsMS4xNywwLDAsMS0uOTIsMS45aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0uNDRsLTYuNDQtOC4xM0w2LjQ3LDI4YTEuMTcsMS4xNywwLDAsMS0uOTIuNDRoMGExLjE3LDEu''@;'; put 'put ''MTcsMCwwLDEtLjkyLTEuOUwxMS40MywxOGwtNi44LTguNmExLjE3LDEuMTcsMCwwLDEsLjkyLTEuOWgwQTEuMiwxLjIsMCwwLDEsNi41MSw4bDYuNDMsOC4xM0wxOS4zOCw4YTEuMTcsMS4xNywwLDAsMSwuOTItLjQ0aDBhMS4xNywxLjE3LDAsMCwxLC45MiwxLjlaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjIuODUsMTQuNDdsNC41MS0zLjg1YTkuMzcsOS4zNywwLDAsMCwxLjg4LTIsMy40MywzLjQzLDAsMCwwLC41OS0xLjg2LDIuMjcsMi4yNywwLDAsMC0uMzYtMS4yNywyLjM4LDIuMzgsMCwwLDAtLjk1LS44Mywy''@;'; put 'put ''Ljc3LDIuNzcsMCwwLDAtMS4yNi0uMjksMy4zOSwzLjM5LDAsMCwwLTEuODMuNSw1LjgzLDUuODMsMCwwLDAtMS40OSwxLjQybC0xLS44MWE1LjEyLDUuMTIsMCwwLDEsNC4zNi0yLjM3LDQuMzYsNC4zNiwwLDAsMSwyLC40NSwzLjQ3LDMuNDcsMCwwLDEsMiwzLjE4QTQuNDQsNC40NCwwLDAs''@;'; put 'put ''MSwzMC41OCw5YTExLjE0LDExLjE0LDAsMCwxLTIuMjQsMi40NkwyNS4xLDE0LjMxaDYuMjh2MS4zM0gyMi44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksbC5UZXh0RWRpdFNoYXBlcz17Ym9sZDpsLkNsclNoYXBlQm9sZCwiYnVsbGV0LWxpc3Qi''@;'; put 'put ''OmwuQ2xyU2hhcGVCdWxsZXRMaXN0LCJjaGVja2JveC1saXN0IjpsLkNsclNoYXBlQ2hlY2tib3hMaXN0LCJudW1iZXItbGlzdCI6bC5DbHJTaGFwZU51bWJlckxpc3QsImZvbnQtc2l6ZSI6bC5DbHJTaGFwZUZvbnRTaXplLGl0YWxpYzpsLkNsclNoYXBlSXRhbGljLCJqdXN0aWZ5LXRleHQi''@;'; put 'put ''OmwuQ2xyU2hhcGVKdXN0aWZ5VGV4dCwiY2VudGVyLXRleHQiOmwuQ2xyU2hhcGVDZW50ZXJUZXh0LCJhbGlnbi1sZWZ0LXRleHQiOmwuQ2xyU2hhcGVBbGlnbkxlZnRUZXh0LCJhbGlnbi1yaWdodC10ZXh0IjpsLkNsclNoYXBlQWxpZ25SaWdodFRleHQsInBhaW50LXJvbGxlciI6bC5DbHJT''@;'; put 'put ''aGFwZVBhaW50Um9sbGVyLCJibG9jay1xdW90ZSI6bC5DbHJTaGFwZUJsb2NrUXVvdGUsdGV4dDpsLkNsclNoYXBlVGV4dCx1bmRlcmxpbmU6bC5DbHJTaGFwZVVuZGVybGluZSwiYWxpZ24tY2VudGVyIjpsLkNsclNoYXBlQWxpZ25DZW50ZXIsImFsaWduLWxlZnQiOmwuQ2xyU2hhcGVBbGln''@;'; put 'put ''bkxlZnQsImFsaWduLXJpZ2h0IjpsLkNsclNoYXBlQWxpZ25SaWdodCwiYWxpZ24tYm90dG9tIjpsLkNsclNoYXBlQWxpZ25Cb3R0b20sImFsaWduLW1pZGRsZSI6bC5DbHJTaGFwZUFsaWduTWlkZGxlLCJhbGlnbi10b3AiOmwuQ2xyU2hhcGVBbGlnblRvcCxsYW5ndWFnZTpsLkNsclNoYXBl''@;'; put 'put ''TGFuZ3VhZ2UsInRleHQtY29sb3IiOmwuQ2xyU2hhcGVUZXh0Q29sb3IsaGlnaGxpZ2h0ZXI6bC5DbHJTaGFwZUhpZ2hsaWdodGVyLGluZGVudDpsLkNsclNoYXBlSW5kZW50LG91dGRlbnQ6bC5DbHJTaGFwZU91dGRlbnQsc3RyaWtldGhyb3VnaDpsLkNsclNoYXBlU3RyaWtldGhyb3VnaCxz''@;'; put 'put ''dWJzY3JpcHQ6bC5DbHJTaGFwZVN1YnNjcmlwdCxzdXBlcnNjcmlwdDpsLkNsclNoYXBlU3VwZXJzY3JpcHR9LHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChsLlRleHRFZGl0U2hhcGVzKX0s''@;'; put 'put ''Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzICoq''@;'; put 'put ''KiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxhKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLGwuVHJhdmVsU2hhcGVzPWwuQ2xyU2hhcGVPbkhvbGlkYXk9bC5DbHJTaGFwZVRyYWlsZXI9bC5DbHJTaGFwZUZlcnJ5PWwuQ2xyU2hhcGVDYXJhdmFuPWwuQ2xyU2hhcGVDYW1wZXJ2YW49bC5DbHJTaGFwZUJvYXQ9bC5DbHJTaGFwZUJpY3ljbGU9bC5DbHJTaGFwZU1hcE1hcmtl''@;'; put 'put ''cj1sLkNsclNoYXBlQ29tcGFzcz1sLkNsclNoYXBlTWFwPWwuQ2xyU2hhcGVDYXI9bC5DbHJTaGFwZUFpcnBsYW5lPWwuQ2xyU2hhcGVUcnVjaz12b2lkIDA7dmFyIHA9YSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNj''@;'; put 'put ''cmlwdG9yLWNvbmZpZy50cyIpO2E9YSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpLGwuQ2xyU2hhcGVUcnVjaz0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMTkuN2E2LjQ1LDYuNDUsMCwwLDEsMS41Ni0uMmMuMTUsMCwuMjksMCwuNDQsMFYxNGg0YTIsMiwwLDAsMSwyLDJ2MUgy''@;'; put 'put ''OHYyaDR2NUgyOS42YTQuNTQsNC41NCwwLDAsMC04LjM0LDBIMTQuNDNhNC41LDQuNSwwLDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDksNC40OSwwLDAsMCw4LjkyLDBIMzNhMSwxLDAsMCwwLDEtMVYxNkE0LDQsMCwwLDAsMzAsMTJaTTEwLjI2LDI4YTIu''@;'; put 'put ''MzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQzLDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIg''@;'; put 'put ''ZD0iTTMwLDEySDI2VjdhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDdWMjVhMSwxLDAsMCwwLDEsMUg0VjhIMjRWMjEuNDlBNC40NSw0LjQ1LDAsMCwwLDIxLjI1LDI0SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ4LDQu''@;'; put 'put ''NDgsMCwwLDAsOC45MSwwSDM0VjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCwwLDEsMjUuNDIsMjhaTTMyLDE3SDI2VjE0''@;'; put 'put ''aDRhMiwyLDAsMCwxLDIsMloiLz4nKSxsLkNsclNoYXBlQWlycGxhbmU9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNS43Nyw4LjE2YTIuNDMsMi40MywwLDAsMC0xLjktMkwyOCw0Ljg3YTQuNSw0LjUsMCww''@;'; put 'put ''LDAtMy42NS43OUw3LDE4LjMsMi4xNCwxOC4xQTEuODYsMS44NiwwLDAsMCwuOTEsMjEuNDFsNSwzLjkzYy42LjczLDEsLjU5LDEwLjkzLTQuODJsLjkzLDkuNDJhMS4zNiwxLjM2LDAsMCwwLC44NSwxLjE4LDEuNDMsMS40MywwLDAsMCwuNTQuMSwxLjU0LDEuNTQsMCwwLDAsMS0uNDFsMi4z''@;'; put 'put ''OS0yLjE4YTEuNTIsMS41MiwwLDAsMCwuNDYtLjgzTDI1LjIsMTUuOWMzLjU3LTIsNi45NS0zLjg4LDkuMzYtNS4yNUEyLjQzLDIuNDMsMCwwLDAsMzUuNzcsOC4xNlptLTIuMi43NWMtMi41LDEuNDItNiwzLjQxLTkuNzYsNS40N2wtLjQxLjIzTDIxLjA3LDI3LjI4bC0xLjQ3LDEuMzRMMTgu''@;'; put 'put ''NSwxNy4zMiwxNy4xNywxOEMxMCwyMiw3LjYxLDIzLjE2LDYuNzksMjMuNTJsLTQuMy0zLjQxLDUuMDguMjIsMTgtMTMuMDZhMi41MSwyLjUxLDAsMCwxLDItLjQ1bDUuODUsMS4yNmEuNDMuNDMsMCwwLDEsLjM1LjM3QS40Mi40MiwwLDAsMSwzMy41Nyw4LjkxWiIvPlxuICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEyLjU0bDMuNTYsMSwxLjY0LTEuMTktNC0xLjE2TDEwLDEwLjA5bDUuNDctLjE2LDIuMy0xLjY3TDEwLDguNWExLjI1LDEuMjUsMCwwLDAtLjcuMTdMNi42NywxMC4yQTEuMjgsMS4yOCwwLDAs''@;'; put 'put ''MCw3LDEyLjU0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTYuMjUsMTEuNSwxMiwxMy4xNmw2LjMyLTQuNTktOS4wNy4yNkEuNTIuNTIsMCwwLDAsOSw4LjkxTDYuMTMsMTAuNTZBLjUxLjUxLDAsMCwwLDYuMjUsMTEu''@;'; put 'put ''NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zNC41Miw2LjM2LDI4LjIyLDVhMy43OCwzLjc4LDAsMCwwLTMuMDcuNjdMNi4xMiwxOS41bC00LjU3LS4yYTEuMjUsMS4yNSwwLDAsMC0uODMsMi4yMmw0LjQ1LDMuNTNh''@;'; put 'put ''LjU1LjU1LDAsMCwwLC41My4wOWMxLjI3LS40OSw2LTMsMTEuNTktNi4wN2wxLjEyLDExLjUxYS41NS41NSwwLDAsMCwuOS4zN2wyLjUtMi4wOGEuNzYuNzYsMCwwLDAsLjI2LS40NWwyLjM3LTEzLjI5YzQtMi4yMiw3LjgyLTQuMzcsMTAuNTEtNS44OUExLjU1LDEuNTUsMCwwLDAsMzQuNTIs''@;'; put 'put ''Ni4zNloiLz4nKSxsLkNsclNoYXBlQ2FyPSgwLGEuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; put 'put ''b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI2LjQ1LDE0LjE3QTIyLjEsMjIuMSwwLDAsMCwxOS4zOCw3YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4wOC40Ny0uMTQuOTItLjIsMS4zNkE0LDQsMCwwLDAsMiwxOHY2LjEzYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJWMjBINFYxOGEyLDIsMCwwLDEsMi0ySDI0LjczQTcuMjgsNy4yOCwwLDAsMSwzMiwyMy4yN1YyNGgtMmE0LjUzLDQuNTMsMCwxLDAsLjMzLDJIMzJhMiwyLDAsMCwwLDItMnYtLjczQTkuMjgsOS4yOCwwLDAsMCwyNi40NSwxNC4xN1pNMTEsMTRINi45M2MwLS4zMS4wOS0uNjMuMTUt''@;'; put 'put ''MUE2LjUyLDYuNTIsMCwwLDEsMTEsOGgwWm0yLDBWNy41OGE4LjE3LDguMTcsMCwwLDEsNS4zNiwxLjE2QTE5LDE5LDAsMCwxLDIzLjksMTRaTTI1LjgsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjUuOCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0''@;'; put 'put ''aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LjE3LDI0YTQuNTMsNC41MywwLDEsMCwuMzMsMmg1LjNjMC0uMDgsMC0uMTcsMC0uMjVBNiw2LDAsMCwxLDIwLDI0Wk0xMCwyOC4zOGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwx''@;'; put 'put ''MCwyOC4zOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYuODcsMTQuMjhBMjIuMzYsMjIuMzYsMCwwLDAsMTkuNjUsNi45YTkuNjQsOS42NCwwLDAsMC05LS43LDguNiw4LjYsMCwwLDAtNC44Miw2LjRjLS4w''@;'; put 'put ''OC40OS0uMTUsMS0uMjEsMS40aC0xQTIuNTksMi41OSwwLDAsMCwyLDE2LjU5djguNTVhLjg2Ljg2LDAsMCwwLC44Ni44Nkg0LjU5YzAtLjEzLDAtLjI2LDAtLjM5YTUuNzcsNS43NywwLDAsMSw3LjcxLTUuNDVsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMu''@;'; put 'put ''OTNBNC41LDQuNSwwLDEsMCwxNC44MiwyNmg1LjQ4YzAtLjEzLDAtLjI2LDAtLjM5QTUuNzcsNS43NywwLDAsMSwyOCwyMC4xNmwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDMwLjUzLDI2aDIuNjFhLjg2Ljg2LDAsMCwwLC44''@;'; put 'put ''Ni0uODZWMjMuMzZBOS4zOSw5LjM5LDAsMCwwLDI2Ljg3LDE0LjI4Wk0xMiwxNEg4YzAtLjM1LjEtLjcxLjE2LTEuMDdhNi41Miw2LjUyLDAsMCwxLDMuODctNWgwWk0xMC4zNiwyOC4zNmEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwxMC4zNiwyOC4zNlpNMTksMTlIMTZW''@;'; put 'put ''MTdoM1ptLTYtNVY3LjQ3YTguMTYsOC4xNiwwLDAsMSw1LjQsMS4xNUExOS4xNSwxOS4xNSwwLDAsMSwyNCwxNFpNMjYuMDYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMjYuMDYsMjguMzZaIi8+JyksbC5DbHJTaGFwZU1hcD0oMCxhLmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU5LDYuMTlBMSwxLDAsMCwwLDMyLjcsNkwyMy4wOSw5LDEzLjQ2LDQuMTFhMSwxLDAsMCwwLS44NCwwTDIuNjIsOC4yQTEsMSwwLDAsMCwyLDkuMTNWMjkuNjFhMSwxLDAsMCwwLDEuMzguOTJM''@;'; put 'put ''MTMsMjYuNThsOS41OSw0LjkyYTEsMSwwLDAsMCwuNDYuMTEsMSwxLDAsMCwwLC4zLDBsMTAtMy4xMmExLDEsMCwwLDAsLjctMVY3QTEsMSwwLDAsMCwzMy41OSw2LjE5Wk0zMiwyNi43NWwtOC4zMiwyLjZWMjcuMDZoLTEuNnYybC04LjQtNC4zMVYyMy4wNmgtMS42djEuNzJMNCwyOC4xMVY5''@;'; put 'put ''Ljc5bDguMDgtMy4zM1Y4LjgxaDEuNlY2LjQ3bDguNCw0LjN2Mi4xaDEuNlYxMUwzMiw4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyMi4wOCIgeT0iMTUuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0i''@;'; put 'put ''My44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyMi4wOCIgeT0iMjEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMi4wOCIgeT0iMTEuMDYiIHdpZHRoPSIxLjYiIGhlaWdodD0iMy44MSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiB4PSIxMi4wOCIgeT0iMTcuMTMiIHdpZHRoPSIx''@;'; put 'put ''LjYiIGhlaWdodD0iMy43NSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy4zMSw3LjM1LDI1LDkuOTRWMTRIMjNWMTAuMjlMMTQsNS42OFY5SDEyVjUuMjdsLTkuNjcsNEEuNTMuNTMsMCwwLDAsMiw5Ljc1VjMw''@;'; put 'put ''LjQ1YS41My41MywwLDAsMCwuNzQuNDlMMTIsMjcuMTJWMjNoMnY0LjUzbDksNC42MVYyOGgydjMuNzlsOC42My0yLjdhLjUzLjUzLDAsMCwwLC4zNy0uNTFWNy44NkEuNTMuNTMsMCwwLDAsMzMuMzEsNy4zNVpNMTQsMjFIMTJWMTdoMlptMC02SDEyVjExaDJaTTI1LDI2SDIzVjIyaDJabTAt''@;'; put 'put ''NkgyM1YxNmgyWiIvPicpLGwuQ2xyU2hhcGVDb21wYXNzPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44MiwxNS4zMWgwTDEwLjQ2LDljLS40Ni0uMjYtMS4xMS4zNy0uODYuODRsNi4xNSwxMC41NiwxMC41Niw2LjE1YS42Ni42NiwwLDAsMCwuODQtLjg2Wm0tNCw0LDMtMyw0LjU1''@;'; put 'put ''LDcuNDRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTEsMjkuOTVWMjkuNTNIMTd2Mi40MkExNCwxNCwwLDAsMSw0LjA1LDE5SDYuNDdW''@;'; put 'put ''MTdINC4wNUExNCwxNCwwLDAsMSwxNyw0LjA1VjYuNDdoMlY0LjA1QTE0LDE0LDAsMCwxLDMxLjk1LDE3SDI5LjUzdjJoMi40MkExNCwxNCwwLDAsMSwxOSwzMS45NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNi40NywxOUg0LjA1YzAtLjMzLS4wNS0uNjYtLjA1LTFzMC0uNjcuMDUtMUg2LjQ3Wk0xNyw0LjA1Yy4zMywwLC42Ni0uMDUsMS0uMDVzLjY3LDAsMSwuMDVWNi40N0gxN1ptMiwyNy45Yy0uMzMsMC0uNjYuMDUtMSwu''@;'; put 'put ''MDVzLS42NywwLTEtLjA1VjI5LjUzaDJabTgtNS41OGEuNTkuNTksMCwwLDEtLjY5LjE2TDE1Ljc1LDIwLjM4LDkuNiw5LjgyYy0uMjUtLjQ3LjM5LTEuMS44Ni0uODRsMTAuMzcsNi4zM2gwbDYuMzMsMTAuMzdBLjU5LjU5LDAsMCwxLDI3LDI2LjM3Wk0yOS41MywxOVYxN2gyLjQyYzAsLjMz''@;'; put 'put ''LjA1LjY2LjA1LDFzMCwuNjctLjA1LDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNi43NyAxOS4zNSAyNC4zNSAyMy43NyAxOS44IDE2LjMzIDE2Ljc3IDE5LjM1IiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVNYXBNYXJrZXI9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCww''@;'; put 'put ''LDE4LDYuNzJabTAsOS40NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAs''@;'; put 'put ''Ni4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAs''@;'; put 'put ''MCwxOCwyWk0yMy41OSwyNGwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFhOS43OCw5Ljc4LDAsMSwxLDE5LjU2LDBDMjcuNzgsMTcuNzksMjUuMzYsMjEu''@;'; put 'put ''NCwyMy41OSwyNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCw2LjcyYTUuNzMsNS43MywwLDEsMCw1LjczLDUuNzNBNS43Myw1LjczLDAsMCwwLDE4LDYuNzJabTAsOS40''@;'; put 'put ''NmEzLjczLDMuNzMsMCwxLDEsMy43My0zLjczQTMuNzMsMy43MywwLDAsMSwxOCwxNi4xN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OWE3LjQ5LDcuNDks''@;'; put 'put ''MCwwLDEtMi0uMzNjMCwuMTksMCwuMzgsMCwuNTcsMCw0LjA2LTIuNDIsNy42Ny00LjE5LDEwLjMxbC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMtMS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMUE5Ljc3''@;'; put 'put ''LDkuNzcsMCwwLDEsMjIuNTYsNS4wOWE3LjQ1LDcuNDUsMCwwLDEsLjUyLTJBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCww''@;'; put 'put ''LDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh''@;'; put 'put ''ZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx''@;'; put 'put ''LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlptMCwxN2E2LjU2LDYuNTYsMCwxLDEsNi41Ni02''@;'; put 'put ''LjU2QTYuNTYsNi41NiwwLDAsMSwxOCwxOVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOS43NywxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjQuMzgsMTFhNi41OCw2LjU4LDAsMSwxLTEuNjEtMyw3LjQyLDcuNDIsMCwwLDEsLjMxLTQuODRBMTEuNzUsMTEuNzUsMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42''@;'; put 'put ''Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44NSw0LjUzLTYuNzUsNC41My0xMS40MkMyOS43OCwxMy42NSwyOS43NywxMy41NywyOS43NywxMy40OVoi''@;'; put 'put ''Lz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxsLkNsclNoYXBlQmljeWNsZT0oMCxhLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOC41LDI5LjY1QTYuNTEsNi41MSwwLDAsMSwyLDIzLjE1YTYuMzksNi4zOSwwLDAsMSw2LjUt''@;'; put 'put ''Ni4zNkE2LjM5LDYuMzksMCwwLDEsMTUsMjMuMTUsNi41MSw2LjUxLDAsMCwxLDguNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDguNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9''@;'; put 'put ''Ik0yNy41LDI5LjY1YTYuNTEsNi41MSwwLDAsMS02LjUtNi41LDYuNSw2LjUsMCwwLDEsMTMsMEE2LjUxLDYuNTEsMCwwLDEsMjcuNSwyOS42NVptMC0xMWE0LjUsNC41LDAsMSwwLDQuNSw0LjVBNC41MSw0LjUxLDAsMCwwLDI3LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjQuNjZIOGExLDEsMCwwLDEtLjg5LTEuNDVsNS0xMCwxLjc4LjlMOS42MiwyMi43M0gxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjEzIiB5PSIxMi42OCIgd2lkdGg9IjEx''@;'; put 'put ''IiBoZWlnaHQ9IjEuOTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yOCwyNC42NmExLDEsMCwwLDEtLjk0LS42NkwyMi4yOSwxMC42NkgyMGExLDEsMCwwLDEtMS0xLDEsMSwwLDAsMSwxLS45M2gzYS45NC45NCwwLDAsMSwuOTQuNmw1''@;'; put 'put ''LDE0YTEsMSwwLDAsMS0uNiwxLjI3QTEsMSwwLDAsMSwyOCwyNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0xMywxNC42NmExLDEsMCwwLDEtLjcxLS4yOWwtMS43LTEuNzFIOGExLDEsMCwwLDEtMS0xLC45NC45NCwwLDAsMSwx''@;'; put 'put ''LTFoM2ExLjA4LDEuMDgsMCwwLDEsLjc1LjI3bDIsMmExLDEsMCwwLDEsMCwxLjQxQTEsMSwwLDAsMSwxMywxNC42NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik0xNSwyMS45Yy0wLjItMi0xLjItMy44LTIuOS00LjlsLTIuNSw0LjlI''@;'; put 'put ''MTV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik03LjIsMjMuNGMtMC4yLTAuMy0wLjItMC43LDAtMWwzLjItNi4zYy0wLjYtMC4yLTEuMi0wLjItMS44LTAuMkM1LDE1LjksMiwxOC44LDIsMjIuNGMwLDMuNiwyLjksNi41LDYuNSw2LjVcblx0''@;'; put 'put ''YzMsMCw1LjYtMi4xLDYuMy01SDhDNy43LDIzLjksNy4zLDIzLjcsNy4yLDIzLjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyMS45aC00YzAsMC4yLDAsMC4zLDAsMC41YzAsMC41LTAuMSwxLTAuMiwxLjVIMTlWMjEuOXoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI3LjUsMTUuOWMtMC4zLDAtMC42LDAtMC45LDAuMWwyLjQsNi42YzAuMiwwLjUtMC4xLDEuMS0wLjYsMS4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjLTAuNCwwLTAuOC0wLjMtMC45LTAuN2wtMi40LTYuN1xu''@;'; put 'put ''XHRjLTMuMiwxLjYtNC41LDUuNS0zLDguN2MxLjYsMy4yLDUuNSw0LjUsOC43LDNjMy4yLTEuNiw0LjUtNS41LDMtOC43QzMyLjIsMTcuMywzMCwxNS45LDI3LjUsMTUuOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTI0LjcsMTYuN2MwLjYt''@;'; put 'put ''MC4zLDEuMy0wLjUsMS45LTAuNmwtMi43LTcuNEMyMy44LDguMiwyMy40LDgsMjMsNy45aC0zYy0wLjYsMC0xLDAuNS0xLDEuMWMwLDAuNSwwLjQsMC45LDEsMC45XG5cdGMwLDAsMCwwLDAsMGgyLjNsMC43LDJoLTkuNmwtMS43LTEuN0MxMS41LDEwLjEsMTEuMywxMCwxMSwxMEg4Yy0wLjYs''@;'; put 'put ''MC0xLDAuNC0xLDFzMC40LDEsMSwxaDIuNmwxLjIsMS4ybC0xLjUsM1xuXHRjMC42LDAuMiwxLjMsMC41LDEuOCwwLjhsMS42LTMuMmgxMEwyNC43LDE2Ljd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPicpLGwuQ2xyU2hhcGVCb2F0PSgwLGEuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0yOS4xLDI3LjFDMjgsMjcsMjYuOSwyNy40LDI2LDI4LjJjLTEuMSwxLjEtMi45LDEuMS00LjEsMGMtMS0wLjctMi4xLTEuMS0zLjMtMS4xYy0xLjItMC4xLTIuNCwwLjMtMy4zLDEuMVxuXHRcdEMxNC43LDI4LjcsMTQsMjksMTMuMiwyOXMtMS41LTAuMy0yLjEtMC44''@;'; put 'put ''Yy0xLTAuOC0yLjItMS4yLTMuNC0xLjJzLTIuNCwwLjQtMy40LDEuMkMzLjcsMjguNywyLjgsMjksMiwyOXYyXG5cdFx0YzEuMywwLjEsMi42LTAuMywzLjYtMS4yQzYuMiwyOS4zLDcuMSwyOSw3LjksMjljMC43LDAsMS41LDAuMywyLjEsMC44YzEuOCwxLjYsNC42LDEuNiw2LjUsMGMwLjYt''@;'; put 'put ''MC41LDEuMy0wLjgsMi4xLTAuOFxuXHRcdGMwLjcsMCwxLjQsMC4zLDIsMC44YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhjMC43LDAsMS40LDAuMywxLjksMC44YzAuOSwwLjcsMS45LDEuMSwzLDEuMnYtMlxuXHRcdGMtMSwwLTEuMi0wLjQtMS43LTAuOEMz''@;'; put 'put ''MS40LDI3LjUsMzAuMywyNy4xLDI5LjEsMjcuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LDIzYzAtMC42LDAuNS0xLDEuMS0xSDMybC0zLjUsMy4xaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAu''@;'; put 'put ''Ny0wLjgsMC42LTIuMS0wLjItMi44XG5cdFx0QzMzLDIwLjIsMzIuNiwyMCwzMi4xLDIwaC0yNWMtMS43LDAtMywxLjMtMywzdjMuMmMwLjUtMC41LDEuMi0wLjgsMS45LTEuMVYyM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04Ljks''@;'; put 'put ''MTlIMTV2LTcuOGMwLTAuNi0wLjMtMS4yLTAuOC0xLjZDMTMuMyw4LjksMTIsOS4xLDExLjQsMTBsLTQuMSw1LjljLTAuNCwwLjYtMC40LDEuNC0wLjEsMi4xQzcuNSwxOC42LDguMiwxOSw4LjksMTlcblx0XHR6IE0xMy4xLDExLjJMMTMsMTdIOC45TDEzLjEsMTEuMnoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNiwxOGMwLjQtMC42LDAuNC0xLjQsMC0yTDE5LjcsNS42Yy0wLjQtMC42LTEtMS0xLjctMWMtMS4xLDAtMiwwLjktMiwyVjE5aDguM0MyNSwxOSwyNS43LDE4LjYsMjYsMTh6IE0xNy45LDYuNlxuXHRcdGw2LjQs''@;'; put 'put ''MTAuNWgtNi40VjYuNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zNCwzMWMtMS4xLTAuMS0yLjEtMC41LTMtMS4yYy0wLjUtMC41LTEuMi0wLjgtMi0wLjhjLTAuNywwLTEuNSwwLjMtMiwwLjhjLTAuOSwwLjgtMiwxLjEtMy4xLDEu''@;'; put 'put ''MWMtMS4yLDAtMi40LTAuNC0zLjMtMS4xXG5cdGMtMS4yLTEuMS0zLTEuMS00LjEsMGMtMC45LDAuOC0yLjEsMS4yLTMuNCwxLjJjLTEuMiwwLTIuMy0wLjQtMy4yLTEuMmMtMC42LTAuNS0xLjMtMC44LTItMC44Yy0wLjgsMC0xLjcsMC4zLTIuMywwLjhcblx0Yy0xLDAuOC0yLjMsMS4yLTMu''@;'; put 'put ''NSwxLjFWMjljMC44LDAsMS43LTAuMywyLjMtMC45YzEtMC44LDIuMi0xLjIsMy40LTEuMWMxLjIsMCwyLjQsMC40LDMuMywxLjJjMS4yLDEuMSwzLDEuMSw0LjIsMFxuXHRjMS45LTEuNiw0LjctMS42LDYuNSwwYzEuMiwxLjEsMywxLjEsNC4xLDBjMC45LTAuOCwyLjEtMS4yLDMuMy0xLjJj''@;'; put 'put ''MS4xLDAsMi4yLDAuNCwzLDEuMkMzMi44LDI4LjcsMzMsMjksMzQsMjlMMzQsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjEsMjYuMmMwLjYtMC41LDEuMi0wLjgsMS45LTFWMjNjMC0wLjYsMC40LTEuMSwxLTEuMWgyNUwyOC40LDI1''@;'; put 'put ''aDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yXG5cdGMwLjctMC45LDAuNS0yLjEtMC40LTIuOEMzMi45LDIwLjEsMzIuNCwyMCwzMiwyMEg3Yy0xLjcsMC0zLDEuMy0zLDNMNC4xLDI2LjJMNC4xLDI2LjJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45LDE4LjlIOC45Yy0xLjEsMC0yLTAuOS0yLTJjMC0wLjQsMC4xLTAuOCwwLjQtMS4ybDQuMS01LjhjMC42LTAuOSwxLjktMS4xLDIuOC0wLjVjMC41LDAuNCwwLjgsMSwwLjgsMS42VjE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNC4zLDE4LjlIMTZWNi40YzAtMS4xLDAuOS0yLDItMmMwLjcsMCwxLjMsMC40LDEuNywxTDI2LDE1LjhjMC42LDEsMC4yLDIuMi0wLjcsMi43QzI1LDE4LjcsMjQuNiwxOC44LDI0LjMsMTguOVxuXHRMMjQuMywxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxsLkNsclNoYXBlQ2FtcGVydmFuPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik05LjUsMjRDOS41LDI0LDkuNSwyNCw5LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVjMCwwLDAsMCwwLDBDNiwyOS40LDcuNiwzMSw5LjUsMzFjMS45LDAsMy41''@;'; put 'put ''LTEuNiwzLjUtMy41XG5cdFx0UzExLjQsMjQsOS41LDI0eiBNOS41LDI5QzguNywyOSw4LDI4LjMsOCwyNy41UzguNywyNiw5LjUsMjZzMS41LDAuNywxLjUsMS41UzEwLjMsMjksOS41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0i''@;'; put 'put ''TTIzLjUsMjRDMjMuNSwyNCwyMy41LDI0LDIzLjUsMjRjLTEuOSwwLTMuNSwxLjYtMy41LDMuNWMwLDAsMCwwLDAsMGMwLDEuOSwxLjUsMy41LDMuNSwzLjVjMS45LDAsMy41LTEuNiwzLjUtMy41XG5cdFx0UzI1LjQsMjQsMjMuNSwyNHogTTIzLjUsMjljLTAuOCwwLTEuNS0wLjctMS41LTEu''@;'; put 'put ''NXMwLjctMS41LDEuNS0xLjVzMS41LDAuNywxLjUsMS41UzI0LjMsMjksMjMuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMywyMC4xVjIwaC0wLjFsLTMuNS01LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4zVjkuN0MzMiw3LjEs''@;'; put 'put ''MjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM1xuXHRcdHYxN2gyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIu''@;'; put 'put ''Ny0yLjcsMi43SDI0djloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMxLjcsMCwzLTEuMywzLTN2LTMuM0wzMywyMC4xeiBNMjYsMjB2LTVoMS41bDMuMSw1SDI2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3Qg''@;'; put 'put ''eD0iMTkiIHk9IjkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjIsMjIgMjIsMTMgMTUsMTMgMTUsMjggMTcsMjggMTcsMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik02LDIwaDd2LTdINlYyMHogTTgsMTVoM3YzSDhWMTV6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41UzcuNiwzMSw5LjUs''@;'; put 'put ''MzFjMCwwLDAsMCwwLDBjMS45LDAsMy41LTEuNiwzLjUtMy41YzAsMCwwLTAuMSwwLTAuMUMxMywyNS41LDExLjQsMjQsOS41LDI0eiJcblx0XHQgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48Y2lyY2xlIGN4PSIyMy41IiBjeT0iMjcuNSIgcj0iMy41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOS41LDE0LjVDMzEsMTMuNiwzMiwxMiwzMiwxMC4yVjkuN2MwLDAsMCwwLDAtMC4xQzMyLDcsMjkuOSw1LDI3LjMsNWgtOC41Yy0xLjksMC0zLjcsMS4yLTQuNCwzSDVjLTEuNywwLTMsMS4zLTMsM3YxN1xu''@;'; put 'put ''XHRcdGgyVjExYzAtMC42LDAuNC0xLDEtMWgxMC45TDE2LDkuMkMxNi4zLDcuOSwxNy40LDcsMTguNyw3aDguNUMyOC44LDcsMzAsOC4yLDMwLDkuN3YwLjVjMCwxLjUtMS4yLDIuNy0yLjcsMi43SDI3aC0zdjloNy44XG5cdFx0bDAuMiwwLjNWMjVjMCwwLjYtMC40LDEtMSwxaC0ydjJoMmMx''@;'; put 'put ''LjcsMCwzLTEuMywzLTN2LTMuM0wyOS41LDE0LjV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iNy45IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBvbHlnb24g''@;'; put 'put ''cG9pbnRzPSIyMCwyMiAyMS45LDIyIDIxLjksMTMgMTUsMTMgMTUsMjggMTYuOSwyOCAxNi45LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxyZWN0IHg9IjYiIHk9IjEzIiB3aWR0aD0iNi45IiBoZWlnaHQ9IjciIGNsYXNzPSJjbHItaS1z''@;'; put 'put ''b2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksbC5DbHJTaGFwZUNhcmF2YW49KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjUsMjFDMTEsMjEsOSwyMyw5LDI1LjVzMiw0LjUsNC41LDQuNWMyLjUsMCw0LjUtMiw0LjUtNC41QzE4LDIzLDE2LDIxLDEzLjUsMjF6IE0xMy41LDI4''@;'; put 'put ''Yy0xLjQsMC0yLjUtMS4xLTIuNS0yLjVcblx0XHRzMS4xLTIuNSwyLjUtMi41czIuNSwxLjEsMi41LDIuNVMxNC45LDI4LDEzLjUsMjh6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQt''@;'; put 'put ''MS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRcdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSww''@;'; put 'put ''LjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2MTBoLTN2MmgxM1xuXHRcdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxMkg3djZoOVYxMnogTTE0LDE2SDl2''@;'; put 'put ''LTJoNVYxNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMy41LDMwQzExLDMwLDksMjgsOSwyNS41czItNC41LDQuNS00LjVzNC41LDIsNC41LDQuNUMxOCwyOCwxNiwzMCwxMy41LDMweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p''@;'; put 'put ''LXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMjRoLTJ2LTcuNWMwLTAuNS0wLjEtMS0wLjQtMS41bC00LjItNy41Yy0wLjUtMS0xLjUtMS41LTIuNi0xLjVINUMzLjMsNiwyLDcuMywyLDl2MTRjMCwxLjcsMS4zLDMsMywzaDJ2LTJINVxuXHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42''@;'; put 'put ''LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgzdjEwaC0zdjJoMTNcblx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMThIN3YtNmg5VjE4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxsLkNsclNoYXBlRmVycnk9KDAsYS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDI1LjFjLTEuMiwwLTIuMywwLjQtMy4zLDEuMWMwLDAs''@;'; put 'put ''MCwwLDAsMGMtMS4xLDEuMS0zLDEuMS00LjEsMGMtMC45LTAuOC0yLjEtMS4yLTMuMy0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMlxuXHRcdGMtMS4yLDEuMS0zLDEuMS00LjIsMEMxMCwyNS40LDguOCwyNSw3LjYsMjVjLTEuMiwwLTIuNCwwLjQtMy40LDEuMUMzLjYsMjYuNywyLjgsMjcs''@;'; put 'put ''MiwyN3YyYzEuMywwLjEsMi41LTAuNCwzLjQtMS4yXG5cdFx0QzYuMSwyNy4zLDYuOSwyNyw3LjcsMjdjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhcblx0XHRjMS45LDEuNiw0''@;'; put 'put ''LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMwLjcsMCwxLjUsMC4zLDIsMC44YzAuOSwwLjcsMiwxLjEsMy4xLDEuMnYtMS45Yy0wLjcsMC0xLjQtMC4zLTEuOS0wLjlcblx0XHRDMzEuMywyNS40LDMwLjEsMjUsMjksMjUuMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjksMjMuMlYyMEgzMmwtMy41LDNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC41LTAuNiwwLjUtMS40LDAuMi0yLjFjLTAuNC0wLjctMS0xLTEuOC0xaC00LjRcblx0XHRMMjIuNSwxMUgxN2MtMS43LDAt''@;'; put 'put ''MywxLjMtMywzaC0yVjguMUg2djYuMWMtMS4yLDAuNC0yLDEuNS0yLDIuOHYxLjFWMjB2NC4zbDAuMS0wLjFDNC42LDIzLjcsNS4yLDIzLjQsNS45LDIzLjJ6IE04LDEwaDJ2NEg4VjEwelxuXHRcdCBNNiwxN2MwLTAuNiwwLjQtMSwxLTFoOXYtMmMwLTAuNiwwLjQtMSwxLTFoNWwwLjYsMUgx''@;'; put 'put ''OHYyaDUuOGwxLjIsMi4xSDZWMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguMiwyNWMtMS4yLDAtMi40LDAuNC0zLjMsMS4yYy0xLjIsMS4xLTMsMS4xLTQuMSwwYy0xLjktMS42LTQuNi0xLjYtNi41LDBjLTEuMiwxLjEtMi45''@;'; put 'put ''LDEuMS00LjEsMFxuXHRcdGMtMC45LTAuOC0yLTEuMi0zLjItMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJDMy40LDI2LjcsMi43LDI3LDIsMjd2MmMxLjEtMC4xLDIuMi0wLjUsMy4xLTEuMkM1LjYsMjcuMyw2LjMsMjcsNywyN1xuXHRcdGMwLjcsMCwxLjUsMC4zLDIsMC44YzEuOSwxLjYs''@;'; put 'put ''NC43LDEuNiw2LjYsMGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0LjcsMS42LDYuNSwwXG5cdFx0YzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNiwwLjMsMi4xLDAuOGMwLjksMC44LDIuMiwxLjMsMy40LDEuMnYtMmMtMC44''@;'; put 'put ''LDAtMS42LTAuMy0yLjItMC44QzMwLjcsMjUuNCwyOS41LDI1LDI4LjIsMjV6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik01LjgsMjMuMnYtMy4zaDI2LjFMMjguNCwyM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4xLTAu''@;'; put 'put ''MmMwLjctMC45LDAuNS0yLjEtMC40LTIuOGMtMC4zLTAuMy0wLjgtMC40LTEuMi0wLjRcblx0XHRoLTQuMWwtNS40LTdoLTUuNWMtMS43LDAtMywxLjMtMywzaC0yVjhINnY2LjJjLTEuMiwwLjQtMi4xLDEuNS0yLjEsMi44bDAsNy4ybDAuMSwwQzQuNSwyMy43LDUuMSwyMy40LDUuOCwyMy4y''@;'; put 'put ''eiBNMTcuOSwxNGg0LjJcblx0XHRsMS40LDJoLTUuN1YxNHogTTcuOSwxMGgydjRoLTJWMTB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVUcmFpbGVyPSgwLGEuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01Ljgs''@;'; put 'put ''Mi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOFMxOC4yLDE5LjIsMTUsMTkuMnogTTE1LDI5LjJjLTIuMywwLTQuMi0xLjktNC4yLTQuMlxuXHRcdHMxLjktNC4yLDQuMi00LjJzNC4yLDEuOSw0LjIsNC4yUzE3LjMsMjkuMiwxNSwyOS4yeiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHJlY3QgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywy''@;'; put 'put ''Niw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0XHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiBNMjYsMTNINHYtMmgy''@;'; put 'put ''MlYxM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEu''@;'; put 'put ''OUgyM3YyaDEuMVxuXHRjMCwwLDAsMCwwLDBjMi4xLDAsMy44LTEuNywzLjgtMy45VjExaDVjMC42LDAsMS0wLjQsMS0xUzMzLjYsOSwzMyw5eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44''@;'; put 'put ''czIuNiw1LjgsNS44LDUuOHM1LjgtMi42LDUuOC01LjhsMCwwQzIwLjgsMjEuOCwxOC4yLDE5LjIsMTUsMTkuMnogTTE2LDI2aC0ydi0yaDJWMjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLGwuQ2xyU2hhcGVPbkhvbGlkYXk9KDAsYS5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTE4LjA4LDIuMzRjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRBMTcuOTEsMTcuOTEsMCwwLDAsMjMsMjkuNjZsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zLDEsMSwwLDAsMCwuMTYtLjU0VjI1LjYxYTEzLDEzLDAsMCwwLDQtOS4yN0MzNC4wOCw4''@;'; put 'put ''LjYyLDI2LjksMi4zNCwxOC4wOCwyLjM0Wk0yOC4zNywyNC40NWExLDEsMCwwLDAtLjMyLjczdjUuMzRsLTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMSwxNiwxNiwwLDAsMS00Ljc2LjcyYy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyLDE0LDUuMzgsMTQsMTJBMTEuMSwx''@;'; put 'put ''MS4xLDAsMCwxLDI4LjM3LDI0LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjEsMTUuODIsMzEsMTUuNjcsMjguNSwxMy40NGEzLjI1LDMuMjUsMCwwLDAtMi4zOS0uODRsLTUuMzguMzQtMy41OS0zYS44MS44MSwwLDAs''@;'; put 'put ''MC0uNTItLjE5SDEzLjU2YS43OC43OCwwLDAsMC0uNjkuNC43Ny43NywwLDAsMCwwLC43OWwxLjM2LDIuNDQtNC43MS4yOSwxLjMxLDEuNTIsMTUuMzktMWExLjY1LDEuNjUsMCwwLDEsMS4yMi40M2wyLjM2LDIuMTNhLjExLjExLDAsMCwxLDAsLjA3YzAsLjA2LS4wOS4wNS0uMS4wNkgyMS44''@;'; put 'put ''MmwtLjM1LjM3LTUuMTksNS41M0gxNC42NGwyLjczLTUuOUg4LjU0TDcuMTMsMTQuMTYsNi41MSwxM2EuOC44LDAsMCwwLTEtLjJBLjgxLjgxLDAsMCwwLDUuMiwxMy45bDIsMy45NGExLjIxLDEuMjEsMCwwLDAsMS4wOC42NWg2LjU3bC0xLjk0LDQuMThBMS4yLDEuMiwwLDAsMCwxMywyMy44''@;'; put 'put ''M2ExLjIyLDEuMjIsMCwwLDAsMSwuNTZoMi40M2ExLjE3LDEuMTcsMCwwLDAsLjg4LS4zOWw1LjE4LTUuNTFoNy4xNmExLjY1LDEuNjUsMCwwLDAsMS41Mi0uOTFBMS43NCwxLjc0LDAsMCwwLDMxLjEsMTUuODJaTTE0LjkyLDExLjMxaDEuNDFsMi4wOSwxLjc3TDE2LDEzLjIzWiIgY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTcuOTEsMTcuOTEsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjM4LS4zQTEsMSwwLDAsMCwz''@;'; put 'put ''MCwzMi41VjI1Ljc3YTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVaTTI5Ljg0LDE4SDIxLjUxYS40Mi40MiwwLDAsMC0uMy4xM2wtNS4zLDUuNjRhLjM5LjM5LDAsMCwxLS4yOS4xM0gxMy4xOWEuNDEuNDEsMCwwLDEtLjM3LS41OGwyLjQ3LTUuMzJINy40NmEu''@;'; put 'put ''NDIuNDIsMCwwLDEtLjM2LS4yMmwtMi43LTVINi4yNGEuNTMuNTMsMCwwLDEsLjM5LjE4bDEuNTYsMS42OWEuMzguMzgsMCwwLDAsLjMzLjE0bDYuMTgtLjM4LTItMy41NWgyLjg5YS40Ny40NywwLDAsMSwuMzEuMTFMMTkuNjMsMTRsNi42OS0uMzVhMi40NCwyLjQ0LDAsMCwxLDEuODEuNjNs''@;'; put 'put ''Mi40NywyLjIzQS45Mi45MiwwLDAsMSwyOS44NCwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksbC5UcmF2ZWxTaGFwZXM9e3RydWNrOmwuQ2xyU2hhcGVUcnVjayxhaXJwbGFuZTpsLkNsclNoYXBlQWlycGxhbmUsY2FyOmwuQ2xyU2hhcGVDYXIs''@;'; put 'put ''bWFwOmwuQ2xyU2hhcGVNYXAsY29tcGFzczpsLkNsclNoYXBlQ29tcGFzcywibWFwLW1hcmtlciI6bC5DbHJTaGFwZU1hcE1hcmtlcixiaWN5Y2xlOmwuQ2xyU2hhcGVCaWN5Y2xlLGJvYXQ6bC5DbHJTaGFwZUJvYXQsY2FtcGVydmFuOmwuQ2xyU2hhcGVDYW1wZXJ2YW4sY2FyYXZhbjpsLkNs''@;'; put 'put ''clNoYXBlQ2FyYXZhbixmZXJyeTpsLkNsclNoYXBlRmVycnksdHJhaWxlcjpsLkNsclNoYXBlVHJhaWxlciwib24taG9saWRheSI6bC5DbHJTaGFwZU9uSG9saWRheX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGwuVHJhdmVsU2hhcGVzLCJwbGFuZSIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShs''@;'; put 'put ''LlRyYXZlbFNoYXBlcy5haXJwbGFuZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLlRyYXZlbFNoYXBlcywiYXV0byIsKDAscC5kZXNjcmlwdG9yQ29uZmlnKShsLlRyYXZlbFNoYXBlcy5jYXIpKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNv''@;'; put 'put ''bnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQobC5UcmF2ZWxTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAg''@;'; put 'put ''ICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMgKioqIQogICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oTSxs''@;'; put 'put ''LEgpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbC5kZXNjcmlwdG9yQ29uZmlnPXZvaWQgMCxsLmRlc2NyaXB0b3JDb25maWc9ZnVuY3Rpb24ocCl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJh''@;'; put 'put ''YmxlOiEwLHZhbHVlOnB9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKE0sbCxIKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLGwuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPWwuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsbC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9O3ZhciBwPShPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoYSwiaW5zdGFuY2UiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYS5zaW5nbGVJbnN0YW5jZT1hLnNpbmdsZUluc3RhbmNlP2Euc2luZ2xlSW5zdGFuY2U6bmV3IGF9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksYS5wcm90b3R5cGUuc3Vic2NyaWJlVG89ZnVuY3Rp''@;'; put 'put ''b24odixrKXt2YXIgUz10aGlzO3JldHVybiB0aGlzLmNhbGxiYWNrc1t2XT8tMT09PXRoaXMuY2FsbGJhY2tzW3ZdLmluZGV4T2YoaykmJnRoaXMuY2FsbGJhY2tzW3ZdLnB1c2goayk6dGhpcy5jYWxsYmFja3Nbdl09W2tdLGZ1bmN0aW9uKCl7dmFyIEQ9Uy5jYWxsYmFja3Nbdl0uaW5kZXhP''@;'; put 'put ''ZihrKTtTLmNhbGxiYWNrc1t2XS5zcGxpY2UoRCwxKSwwPT09Uy5jYWxsYmFja3Nbdl0ubGVuZ3RoJiZkZWxldGUgUy5jYWxsYmFja3Nbdl19fSxhLnByb3RvdHlwZS5lbWl0Q2hhbmdlcz1mdW5jdGlvbih2LGspe3RoaXMuY2FsbGJhY2tzW3ZdJiZ0aGlzLmNhbGxiYWNrc1t2XS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oUyl7UyhrKX0pfSxhKTtmdW5jdGlvbiBhKCl7dGhpcy5jYWxsYmFja3M9bC5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzfWwuU2hhcGVUZW1wbGF0ZU9ic2VydmVyPXB9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyI6Ci8qISoqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyAqKiohCiAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihNLGwsSCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxsLmNsckljb25TVkc9dm9pZCAwLGwuY2xySWNvblNWRz1mdW5jdGlvbihwKXt2''@;'; put 'put ''YXIgYT0iIjtyZXR1cm4tMTxwLmluZGV4T2YoIi0tYmFkZ2VkIikmJihhKz0iY2FuLWJhZGdlICIpLC0xPHAuaW5kZXhPZigiLS1hbGVydGVkIikmJihhKz0iY2FuLWFsZXJ0ICIpLC0xPHAuaW5kZXhPZigiY2xyLWktc29saWQiKSYmKGErPSJoYXMtc29saWQgIiksKGE/JzxzdmcgdmVyc2lv''@;'; put 'put ''bj0iMS4xIiBjbGFzcz0iJythKyciIHZpZXdCb3g9IjAgMCAzNiAzNiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1''@;'; put 'put ''c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPic6JzxzdmcgdmVyc2lvbj0iMS4xIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3''@;'; put 'put ''dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nKStwKyI8L3N2Zz4ifX19LHo9e30sYi5tPWosYi5jPXosYi5kPWZ1bmN0aW9uKE0sbCxIKXtiLm8oTSxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE0sbCx7ZW51bWVyYWJsZTohMCxnZXQ6SH0pfSxi''@;'; put 'put ''LnI9ZnVuY3Rpb24oTSl7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KE0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShNLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0s''@;'; put 'put ''Yi50PWZ1bmN0aW9uKE0sbCl7aWYoMSZsJiYoTT1iKE0pKSw4Jmx8fDQmbCYmIm9iamVjdCI9PXR5cGVvZiBNJiZNJiZNLl9fZXNNb2R1bGUpcmV0dXJuIE07dmFyIEg9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihiLnIoSCksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgsImRlZmF1bHQiLHtlbnVt''@;'; put 'put ''ZXJhYmxlOiEwLHZhbHVlOk19KSwyJmwmJiJzdHJpbmciIT10eXBlb2YgTSlmb3IodmFyIHAgaW4gTSliLmQoSCxwLGZ1bmN0aW9uKGEpe3JldHVybiBNW2FdfS5iaW5kKG51bGwscCkpO3JldHVybiBIfSxiLm49ZnVuY3Rpb24oTSl7dmFyIGw9TSYmTS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIE0uZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gTX07cmV0dXJuIGIuZChsLCJhIixsKSxsfSxiLm89ZnVuY3Rpb24oTSxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sbCl9LGIucD0iIixiKGIucz0iLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''Y2xyLWljb25zLXNmeC50cyIpO2Z1bmN0aW9uIGIoTSl7aWYoeltNXSlyZXR1cm4geltNXS5leHBvcnRzO3ZhciBsPXpbTV09e2k6TSxsOiExLGV4cG9ydHM6e319O3JldHVybiBqW01dLmNhbGwobC5leHBvcnRzLGwsbC5leHBvcnRzLGIpLGwubD0hMCxsLmV4cG9ydHN9dmFyIGosen0pLGZ1''@;'; put 'put ''bmN0aW9uKGIsail7Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZ0eXBlb2YgbW9kdWxlPCJ1Ij9qKGV4cG9ydHMpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsiZXhwb3J0cyJdLGopOmooKGI9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6''@;'; put 'put ''Ynx8c2VsZikubWFya2VkPXt9KX0odGhpcyxmdW5jdGlvbihiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaihuLHMpe2Zvcih2YXIgdD0wO3Q8cy5sZW5ndGg7dCsrKXt2YXIgZT1zW3RdO2UuZW51bWVyYWJsZT1lLmVudW1lcmFibGV8fCExLGUuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBl''@;'; put 'put ''JiYoZS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sInN5bWJvbCI9PXR5cGVvZihpPWZ1bmN0aW9uKHIsYyl7aWYoIm9iamVjdCIhPXR5cGVvZiByfHxudWxsPT09cilyZXR1cm4gcjt2YXIgaD1yW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwPT09aClyZXR1cm4g''@;'; put 'put ''U3RyaW5nKHIpO2lmKCJvYmplY3QiIT10eXBlb2YoaD1oLmNhbGwociwic3RyaW5nIikpKXJldHVybiBoO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9KGk9ZS5rZXkpKT9pOlN0cmluZyhpKSxlKX12YXIgaX1mdW5j''@;'; put 'put ''dGlvbiB6KCl7cmV0dXJuKHo9T2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduLmJpbmQoKTpmdW5jdGlvbihuKXtmb3IodmFyIHM9MTtzPGFyZ3VtZW50cy5sZW5ndGg7cysrKXt2YXIgdCxlPWFyZ3VtZW50c1tzXTtmb3IodCBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChlLHQpJiYoblt0XT1lW3RdKX1yZXR1cm4gbn0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNKG4scyl7KG51bGw9PXN8fHM+bi5sZW5ndGgpJiYocz1uLmxlbmd0aCk7Zm9yKHZhciB0PTAsZT1uZXcgQXJyYXkocyk7dDxzO3QrKyllW3RdPW5bdF07cmV0dXJuIGV9ZnVu''@;'; put 'put ''Y3Rpb24gbChuLHMpe3ZhciB0LGU9dHlwZW9mIFN5bWJvbDwidSImJm5bU3ltYm9sLml0ZXJhdG9yXXx8blsiQEBpdGVyYXRvciJdO2lmKGUpcmV0dXJuKGU9ZS5jYWxsKG4pKS5uZXh0LmJpbmQoZSk7aWYoQXJyYXkuaXNBcnJheShuKXx8KGU9ZnVuY3Rpb24oaSxyKXt2YXIgYztpZihpKXJl''@;'; put 'put ''dHVybiJzdHJpbmciPT10eXBlb2YgaT9NKGkscik6Ik1hcCI9PT0oYz0iT2JqZWN0Ij09PShjPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKSkmJmkuY29uc3RydWN0b3I/aS5jb25zdHJ1Y3Rvci5uYW1lOmMpfHwiU2V0Ij09PWM/QXJyYXkuZnJvbShpKToi''@;'; put 'put ''QXJndW1lbnRzIj09PWN8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGMpP00oaSxyKTp2b2lkIDB9KG4pKXx8cyYmbiYmIm51bWJlciI9PXR5cGVvZiBuLmxlbmd0aClyZXR1cm4gZSYmKG49ZSksdD0wLGZ1bmN0aW9uKCl7cmV0dXJuIHQ+PW4ubGVu''@;'; put 'put ''Z3RoP3tkb25lOiEwfTp7ZG9uZTohMSx2YWx1ZTpuW3QrK119fTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEg''@;'; put 'put ''W1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9dmFyIEg9MDtmdW5jdGlvbiBwKG4pe3JldHVybiJfX3ByaXZhdGVfIitIKysrIl8iK259ZnVuY3Rpb24gYShuLHMpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHMpKXJldHVybiBuO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoImF0dGVtcHRlZCB0byB1c2UgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKX1mdW5jdGlvbiB2KCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hs''@;'; put 'put ''aWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHho''@;'; put 'put ''dG1sOiExfX1mdW5jdGlvbiBrKG4pe2IuZGVmYXVsdHM9bn1mdW5jdGlvbiBTKG4pe3JldHVybiBPW25dfWIuZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdo''@;'; put 'put ''dDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1s''@;'; put 'put ''OiExfTt2YXIgRD0vWyY8PiInXS8seD1uZXcgUmVnRXhwKEQuc291cmNlLCJnIiksRz0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sUD1uZXcgUmVnRXhwKEcuc291cmNlLCJnIiksTz17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsi''@;'; put 'put ''LCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In07ZnVuY3Rpb24gVChuLHMpe2lmKHMpe2lmKEQudGVzdChuKSlyZXR1cm4gbi5yZXBsYWNlKHgsUyl9ZWxzZSBpZihHLnRlc3QobikpcmV0dXJuIG4ucmVwbGFjZShQLFMpO3JldHVybiBufXZhciB0MT0vJigjKD86XGQrKXwoPzojeFswLTlBLUZh''@;'; put 'put ''LWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiBRKG4pe3JldHVybiBuLnJlcGxhY2UodDEsZnVuY3Rpb24ocyx0KXtyZXR1cm4iY29sb24iPT09KHQ9dC50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09dC5jaGFyQXQoMCk/IngiPT09dC5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShw''@;'; put 'put ''YXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK3Quc3Vic3RyaW5nKDEpKToiIn0pfXZhciBZPS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIHcobixzKXtuPSJzdHJpbmciPT10eXBlb2Ygbj9uOm4uc291cmNlLHM9c3x8IiI7dmFyIHQ9e3JlcGxhY2U6ZnVu''@;'; put 'put ''Y3Rpb24oZSxpKXtyZXR1cm4gaT0oaT1pLnNvdXJjZXx8aSkucmVwbGFjZShZLCIkMSIpLG49bi5yZXBsYWNlKGUsaSksdH0sZ2V0UmVnZXg6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFJlZ0V4cChuLHMpfX07cmV0dXJuIHR9dmFyIEgxPS9bXlx3Ol0vZyxBMT0vXiR8XlthLXpdW2EtejAtOSsu''@;'; put 'put ''LV0qOnxeWz8jXS9pO2Z1bmN0aW9uIG4xKG4scyx0KXtpZihuKXt0cnl7ZT1kZWNvZGVVUklDb21wb25lbnQoUSh0KSkucmVwbGFjZShIMSwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZS5pbmRleE9mKCJqYXZhc2NyaXB0OiIpfHwwPT09ZS5pbmRleE9mKCJ2''@;'; put 'put ''YnNjcmlwdDoiKXx8MD09PWUuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH12YXIgZTtzJiYhQTEudGVzdCh0KSYmKG49dCxlMVsiICIrKGU9cyldfHwoZTFbIiAiK2VdPVYxLnRlc3QoZSk/ZSsiLyI6YzEoZSwiLyIsITApKSxzPS0xPT09KGU9ZTFbIiAiK2VdKS5pbmRleE9mKCI6Iiks''@;'; put 'put ''dD0iLy8iPT09bi5zdWJzdHJpbmcoMCwyKT9zP246ZS5yZXBsYWNlKFoxLCIkMSIpK246Ii8iPT09bi5jaGFyQXQoMCk/cz9uOmUucmVwbGFjZShDMSwiJDEiKStuOmUrbik7dHJ5e3Q9ZW5jb2RlVVJJKHQpLnJlcGxhY2UoLyUyNS9nLCIlIil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIHR9''@;'; put 'put ''dmFyIGUxPXt9LFYxPS9eW146XSs6XC8qW14vXSokLyxaMT0vXihbXjpdKzopW1xzXFNdKiQvLEMxPS9eKFteOl0rOlwvKlteL10qKVtcc1xTXSokLyxLPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gZDEobixzKXt2YXIgdD1uLnJlcGxhY2UoL1x8L2csZnVuY3Rpb24oaSxyLGMpe2Zv''@;'; put 'put ''cih2YXIgaD0hMSxWPXI7MDw9LS1WJiYiXFwiPT09Y1tWXTspaD0haDtyZXR1cm4gaD8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKSxlPTA7aWYodFswXS50cmltKCl8fHQuc2hpZnQoKSwwPHQubGVuZ3RoJiYhdFt0Lmxlbmd0aC0xXS50cmltKCkmJnQucG9wKCksdC5sZW5ndGg+cyl0LnNwbGlj''@;'; put 'put ''ZShzKTtlbHNlIGZvcig7dC5sZW5ndGg8czspdC5wdXNoKCIiKTtmb3IoO2U8dC5sZW5ndGg7ZSsrKXRbZV09dFtlXS50cmltKCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIHR9ZnVuY3Rpb24gYzEobixzLHQpe3ZhciBlPW4ubGVuZ3RoO2lmKDA9PT1lKXJldHVybiIiO2Zvcih2YXIg''@;'; put 'put ''aT0wO2k8ZTspe3ZhciByPW4uY2hhckF0KGUtaS0xKTtpZigociE9PXN8fHQpJiYocj09PXN8fCF0KSlicmVhaztpKyt9cmV0dXJuIG4uc2xpY2UoMCxlLWkpfWZ1bmN0aW9uIG8xKG4scix0LGUpe3ZhciBpPXIuaHJlZixjPShyPXIudGl0bGU/VChyLnRpdGxlKTpudWxsLG5bMV0ucmVwbGFj''@;'; put 'put ''ZSgvXFwoW1xbXF1dKS9nLCIkMSIpKTtyZXR1cm4iISIhPT1uWzBdLmNoYXJBdCgwKT8oZS5zdGF0ZS5pbkxpbms9ITAsbj17dHlwZToibGluayIscmF3OnQsaHJlZjppLHRpdGxlOnIsdGV4dDpjLHRva2VuczplLmlubGluZVRva2VucyhjKX0sZS5zdGF0ZS5pbkxpbms9ITEsbik6e3R5cGU6''@;'; put 'put ''ImltYWdlIixyYXc6dCxocmVmOmksdGl0bGU6cix0ZXh0OlQoYyl9fXZhciBKPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5zcGFjZT1mdW5jdGlvbih0KXtpZigodD10aGlzLnJ1bGVzLmJsb2Nr''@;'; put 'put ''Lm5ld2xpbmUuZXhlYyh0KSkmJjA8dFswXS5sZW5ndGgpcmV0dXJue3R5cGU6InNwYWNlIixyYXc6dFswXX19LHMuY29kZT1mdW5jdGlvbihpKXt2YXIgZTtpZihpPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGkpKXJldHVybiBlPWlbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIikse3R5''@;'; put 'put ''cGU6ImNvZGUiLHJhdzppWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZTpjMShlLCJcbiIpfX0scy5mZW5jZXM9ZnVuY3Rpb24oaCl7dmFyIGUsaSxyLGM7aWYoaD10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGgpKXJldHVybiBp''@;'; put 'put ''PWU9aFswXSxyPWhbM118fCIiLGk9bnVsbD09PShpPWUubWF0Y2goL14oXHMrKSg/OmBgYCkvKSk/cjooYz1pWzFdLHIuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKFYpe3ZhciBDPVYubWF0Y2goL15ccysvKTtyZXR1cm4gbnVsbCE9PUMmJkNbMF0ubGVuZ3RoPj1jLmxlbmd0aD9WLnNsaWNl''@;'; put 'put ''KGMubGVuZ3RoKTpWfSkuam9pbigiXG4iKSkse3R5cGU6ImNvZGUiLHJhdzplLGxhbmc6aFsyXSYmaFsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0ZXh0Oml9fSxzLmhlYWRpbmc9ZnVuY3Rpb24ocil7dmFyIGUsaTtpZihyPXRoaXMucnVsZXMu''@;'; put 'put ''YmxvY2suaGVhZGluZy5leGVjKHIpKXJldHVybiBlPXJbMl0udHJpbSgpLC8jJC8udGVzdChlKSYmKGk9YzEoZSwiIyIpLCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJmkmJiEvICQvLnRlc3QoaSl8fChlPWkudHJpbSgpKSkse3R5cGU6ImhlYWRpbmciLHJhdzpyWzBdLGRlcHRoOnJbMV0ubGVu''@;'; put 'put ''Z3RoLHRleHQ6ZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZSl9fSxzLmhyPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKHQpKXJldHVybnt0eXBlOiJociIscmF3OnRbMF19fSxzLmJsb2NrcXVvdGU9ZnVuY3Rpb24oYyl7dmFyIGUsaSxyO2lmKGM9dGhpcy5y''@;'; put 'put ''dWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMoYykpcmV0dXJuIGU9Y1swXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxpPXRoaXMubGV4ZXIuc3RhdGUudG9wLHRoaXMubGV4ZXIuc3RhdGUudG9wPSEwLHI9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhlKSx0aGlzLmxleGVyLnN0YXRlLnRv''@;'; put 'put ''cD1pLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6Y1swXSx0b2tlbnM6cix0ZXh0OmV9fSxzLmxpc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWModCk7aWYoZSl7dmFyIGkscixjLGgsVixDLHUsZCxMLHksSSxaPTE8KGY9ZVsxXS50cmltKCkpLmxlbmd0aCxv''@;'; put 'put ''PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpaLHN0YXJ0Olo/K2Yuc2xpY2UoMCwtMSk6IiIsbG9vc2U6ITEsaXRlbXM6W119LGY9Wj8iXFxkezEsOX1cXCIrZi5zbGljZSgtMSk6IlxcIitmO3RoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGY9Wj9mOiJbKistXSIpO2Zvcih2YXIgRT1uZXcg''@;'; put 'put ''UmVnRXhwKCJeKCB7MCwzfSIrZisiKSgoPzpbXHQgXVteXFxuXSopPyg/OlxcbnwkKSkiKTt0JiYoST0hMSxlPUUuZXhlYyh0KSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QodCk7KXtpZih0PXQuc3Vic3RyaW5nKChpPWVbMF0pLmxlbmd0aCksdT1lWzJdLnNwbGl0KCJcbiIsMSlbMF0u''@;'; put 'put ''cmVwbGFjZSgvXlx0Ky8sZnVuY3Rpb24oaTEpe3JldHVybiIgIi5yZXBlYXQoMyppMS5sZW5ndGgpfSksZD10LnNwbGl0KCJcbiIsMSlbMF0sdGhpcy5vcHRpb25zLnBlZGFudGljPyhoPTIseT11LnRyaW1MZWZ0KCkpOihoPWVbMl0uc2VhcmNoKC9bXiBdLykseT11LnNsaWNlKGg9NDxoPzE6''@;'; put 'put ''aCksaCs9ZVsxXS5sZW5ndGgpLFY9ITEsIXUmJi9eICokLy50ZXN0KGQpJiYoaSs9ZCsiXG4iLHQ9dC5zdWJzdHJpbmcoZC5sZW5ndGgrMSksST0hMCksIUkpZm9yKHZhciBCPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLGgtMSkrIn0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/Olsg''@;'; put 'put ''XHRdW15cXG5dKik/KD86XFxufCQpKSIpLG09bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMsaC0xKSsifSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JCkiKSxfPW5ldyBSZWdFeHAoIl4gezAsIitNYXRoLm1pbigzLGgtMSkrIn0oPzpgYGB8fn5+''@;'; put 'put ''KSIpLFI9bmV3IFJlZ0V4cCgiXiB7MCwiK01hdGgubWluKDMsaC0xKSsifSMiKTt0JiYoZD1MPXQuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihkPWQucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhXy50ZXN0KGQpKSYmIVIudGVzdChk''@;'; put 'put ''KSYmIUIudGVzdChkKSYmIW0udGVzdCh0KTspe2lmKGQuc2VhcmNoKC9bXiBdLyk+PWh8fCFkLnRyaW0oKSl5Kz0iXG4iK2Quc2xpY2UoaCk7ZWxzZXtpZihWfHw0PD11LnNlYXJjaCgvW14gXS8pfHxfLnRlc3QodSl8fFIudGVzdCh1KXx8bS50ZXN0KHUpKWJyZWFrO3krPSJcbiIrZH1WfHxk''@;'; put 'put ''LnRyaW0oKXx8KFY9ITApLGkrPUwrIlxuIix0PXQuc3Vic3RyaW5nKEwubGVuZ3RoKzEpLHU9ZC5zbGljZShoKX1vLmxvb3NlfHwoQz9vLmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoaSkmJihDPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKHI9L15cW1sgeFhdXF0gLy5leGVjKHkpKSYmKGM9''@;'; put 'put ''IlsgXSAiIT09clswXSx5PXkucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpLG8uaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6aSx0YXNrOiEhcixjaGVja2VkOmMsbG9vc2U6ITEsdGV4dDp5fSksby5yYXcrPWl9by5pdGVtc1tvLml0ZW1zLmxlbmd0aC0xXS5yYXc9aS50cmlt''@;'; put 'put ''UmlnaHQoKSxvLml0ZW1zW28uaXRlbXMubGVuZ3RoLTFdLnRleHQ9eS50cmltUmlnaHQoKSxvLnJhdz1vLnJhdy50cmltUmlnaHQoKTtmb3IodmFyICQsdTE9by5pdGVtcy5sZW5ndGgsVT0wO1U8dTE7VSsrKXRoaXMubGV4ZXIuc3RhdGUudG9wPSExLG8uaXRlbXNbVV0udG9rZW5zPXRoaXMu''@;'; put 'put ''bGV4ZXIuYmxvY2tUb2tlbnMoby5pdGVtc1tVXS50ZXh0LFtdKSxvLmxvb3NlfHwoJD0wPCgkPW8uaXRlbXNbVV0udG9rZW5zLmZpbHRlcihmdW5jdGlvbihpMSl7cmV0dXJuInNwYWNlIj09PWkxLnR5cGV9KSkubGVuZ3RoJiYkLnNvbWUoZnVuY3Rpb24oaTEpe3JldHVybi9cbi4qXG4vLnRl''@;'; put 'put ''c3QoaTEucmF3KX0pLG8ubG9vc2U9JCk7aWYoby5sb29zZSlmb3IoVT0wO1U8dTE7VSsrKW8uaXRlbXNbVV0ubG9vc2U9ITA7cmV0dXJuIG99fSxzLmh0bWw9ZnVuY3Rpb24oaSl7dmFyIGU7aWYoaT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhpKSlyZXR1cm4gZT17dHlwZToiaHRtbCIs''@;'; put 'put ''YmxvY2s6ITAscmF3OmlbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1pWzFdfHwic2NyaXB0Ij09PWlbMV18fCJzdHlsZSI9PT1pWzFdKSx0ZXh0OmlbMF19LHRoaXMub3B0aW9ucy5zYW5pdGl6ZSYmKGk9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9wdGlv''@;'; put 'put ''bnMuc2FuaXRpemVyKGlbMF0pOlQoaVswXSksZS50eXBlPSJwYXJhZ3JhcGgiLGUudGV4dD1pLGUudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGkpKSxlfSxzLmRlZj1mdW5jdGlvbihjKXt2YXIgZSxpLHI7aWYoYz10aGlzLnJ1bGVzLmJsb2NrLmRlZi5leGVjKGMpKXJldHVybiBlPWNbMV0u''@;'; put 'put ''dG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGk9Y1syXT9jWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLHI9Y1szXSYmY1szXS5zdWJzdHJpbmcoMSxjWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRo''@;'; put 'put ''aXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHt0eXBlOiJkZWYiLHRhZzplLHJhdzpjWzBdLGhyZWY6aSx0aXRsZTpyfX0scy50YWJsZT1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyh0KSl7dmFyIGU9e3R5cGU6InRhYmxlIixoZWFkZXI6ZDEodFsx''@;'; put 'put ''XSkubWFwKGZ1bmN0aW9uKEMpe3JldHVybnt0ZXh0OkN9fSksYWxpZ246dFsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6dFszXSYmdFszXS50cmltKCk/dFszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZS5oZWFk''@;'; put 'put ''ZXIubGVuZ3RoPT09ZS5hbGlnbi5sZW5ndGgpe2UucmF3PXRbMF07Zm9yKHZhciBpLHIsYyxoPWUuYWxpZ24ubGVuZ3RoLFY9MDtWPGg7VisrKWUuYWxpZ25bVl09L14gKi0rOiAqJC8udGVzdChlLmFsaWduW1ZdKT8icmlnaHQiOi9eICo6LSs6ICokLy50ZXN0KGUuYWxpZ25bVl0pPyJjZW50''@;'; put 'put ''ZXIiOi9eICo6LSsgKiQvLnRlc3QoZS5hbGlnbltWXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZS5yb3dzLmxlbmd0aCxWPTA7VjxoO1YrKyllLnJvd3NbVl09ZDEoZS5yb3dzW1ZdLGUuaGVhZGVyLmxlbmd0aCkubWFwKGZ1bmN0aW9uKEMpe3JldHVybnt0ZXh0OkN9fSk7Zm9yKGg9ZS5oZWFkZXIu''@;'; put 'put ''bGVuZ3RoLGk9MDtpPGg7aSsrKWUuaGVhZGVyW2ldLnRva2Vucz10aGlzLmxleGVyLmlubGluZShlLmhlYWRlcltpXS50ZXh0KTtmb3IoaD1lLnJvd3MubGVuZ3RoLGk9MDtpPGg7aSsrKWZvcihjPWUucm93c1tpXSxyPTA7cjxjLmxlbmd0aDtyKyspY1tyXS50b2tlbnM9dGhpcy5sZXhlci5p''@;'; put 'put ''bmxpbmUoY1tyXS50ZXh0KTtyZXR1cm4gZX19fSxzLmxoZWFkaW5nPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKHQpKXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6dFswXSxkZXB0aDoiPSI9PT10WzJdLmNoYXJBdCgwKT8xOjIsdGV4dDp0WzFdLHRv''@;'; put 'put ''a2Vuczp0aGlzLmxleGVyLmlubGluZSh0WzFdKX19LHMucGFyYWdyYXBoPWZ1bmN0aW9uKGkpe3ZhciBlO2lmKGk9dGhpcy5ydWxlcy5ibG9jay5wYXJhZ3JhcGguZXhlYyhpKSlyZXR1cm4gZT0iXG4iPT09aVsxXS5jaGFyQXQoaVsxXS5sZW5ndGgtMSk/aVsxXS5zbGljZSgwLC0xKTppWzFd''@;'; put 'put ''LHt0eXBlOiJwYXJhZ3JhcGgiLHJhdzppWzBdLHRleHQ6ZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZSl9fSxzLnRleHQ9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmJsb2NrLnRleHQuZXhlYyh0KSlyZXR1cm57dHlwZToidGV4dCIscmF3OnRbMF0sdGV4dDp0WzBdLHRva2Vuczp0''@;'; put 'put ''aGlzLmxleGVyLmlubGluZSh0WzBdKX19LHMuZXNjYXBlPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWModCkpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OnRbMF0sdGV4dDpUKHRbMV0pfX0scy50YWc9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlu''@;'; put 'put ''bGluZS50YWcuZXhlYyh0KSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QodFswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGlu''@;'; put 'put ''az0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdCh0WzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0''@;'; put 'put ''KShcc3w+KS9pLnRlc3QodFswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzp0WzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUu''@;'; put 'put ''aW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6VCh0WzBdKTp0WzBdfX0scy5saW5rPWZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVj''@;'; put 'put ''KHQpKXt2YXIgZT10WzJdLnRyaW0oKTtpZighdGhpcy5vcHRpb25zLnBlZGFudGljJiYvXjwvLnRlc3QoZSkpe2lmKCEvPiQvLnRlc3QoZSkpcmV0dXJuO3ZhciByPWMxKGUuc2xpY2UoMCwtMSksIlxcIik7aWYoKGUubGVuZ3RoLXIubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNlLTE8KHI9ZnVu''@;'; put 'put ''Y3Rpb24oaCxWKXtpZigtMSE9PWguaW5kZXhPZihWWzFdKSlmb3IodmFyIEM9aC5sZW5ndGgsdT0wLGQ9MDtkPEM7ZCsrKWlmKCJcXCI9PT1oW2RdKWQrKztlbHNlIGlmKGhbZF09PT1WWzBdKXUrKztlbHNlIGlmKGhbZF09PT1WWzFdJiYtLXU8MClyZXR1cm4gZDtyZXR1cm4tMX0odFsyXSwi''@;'; put 'put ''KCkiKSkmJihjPSgwPT09dFswXS5pbmRleE9mKCIhIik/NTo0KSt0WzFdLmxlbmd0aCtyLHRbMl09dFsyXS5zdWJzdHJpbmcoMCxyKSx0WzBdPXRbMF0uc3Vic3RyaW5nKDAsYykudHJpbSgpLHRbM109IiIpO3I9dFsyXTt2YXIgaSxjPSIiO3JldHVybiB0aGlzLm9wdGlvbnMucGVkYW50aWM/''@;'; put 'put ''KGk9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKHIpKSYmKHI9aVsxXSxjPWlbM10pOmM9dFszXT90WzNdLnNsaWNlKDEsLTEpOiIiLHI9ci50cmltKCksbzEodCx7aHJlZjoocj0vXjwvLnRlc3Qocik/dGhpcy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KGUpP3Iu''@;'; put 'put ''c2xpY2UoMSk6ci5zbGljZSgxLC0xKTpyKSYmci5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmMmJmMucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKX0sdFswXSx0aGlzLmxleGVyKX19LHMucmVmbGluaz1mdW5jdGlvbih0LGUp''@;'; put 'put ''e3ZhciBpO2lmKGk9KGk9dGhpcy5ydWxlcy5pbmxpbmUucmVmbGluay5leGVjKHQpKXx8dGhpcy5ydWxlcy5pbmxpbmUubm9saW5rLmV4ZWModCkpcmV0dXJuKHQ9ZVsodD0oaVsyXXx8aVsxXSkucmVwbGFjZSgvXHMrL2csIiAiKSkudG9Mb3dlckNhc2UoKV0pP28xKGksdCxpWzBdLHRoaXMu''@;'; put 'put ''bGV4ZXIpOnt0eXBlOiJ0ZXh0IixyYXc6ZT1pWzBdLmNoYXJBdCgwKSx0ZXh0OmV9fSxzLmVtU3Ryb25nPWZ1bmN0aW9uKHQsZSxpKXt2b2lkIDA9PT1pJiYoaT0iIik7dmFyIHI9dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcubERlbGltLmV4ZWModCk7aWYociYmKCFyWzNdfHwhaS5tYXRj''@;'; put 'put ''aCgvKD86WzAtOUEtWmEtelx4QUFceEIyXHhCM1x4QjVceEI5XHhCQVx4QkMtXHhCRVx4QzAtXHhENlx4RDgtXHhGNlx4RjgtXHUwMkMxXHUwMkM2LVx1MDJEMVx1MDJFMC1cdTAyRTRcdTAyRUNcdTAyRUVcdTAzNzAtXHUwMzc0XHUwMzc2XHUwMzc3XHUwMzdBLVx1MDM3RFx1MDM3Rlx1MDM4''@;'; put 'put ''Nlx1MDM4OC1cdTAzOEFcdTAzOENcdTAzOEUtXHUwM0ExXHUwM0EzLVx1MDNGNVx1MDNGNy1cdTA0ODFcdTA0OEEtXHUwNTJGXHUwNTMxLVx1MDU1Nlx1MDU1OVx1MDU2MC1cdTA1ODhcdTA1RDAtXHUwNUVBXHUwNUVGLVx1MDVGMlx1MDYyMC1cdTA2NEFcdTA2NjAtXHUwNjY5XHUwNjZFXHUw''@;'; put 'put ''NjZGXHUwNjcxLVx1MDZEM1x1MDZENVx1MDZFNVx1MDZFNlx1MDZFRS1cdTA2RkNcdTA2RkZcdTA3MTBcdTA3MTItXHUwNzJGXHUwNzRELVx1MDdBNVx1MDdCMVx1MDdDMC1cdTA3RUFcdTA3RjRcdTA3RjVcdTA3RkFcdTA4MDAtXHUwODE1XHUwODFBXHUwODI0XHUwODI4XHUwODQwLVx1MDg1''@;'; put 'put ''OFx1MDg2MC1cdTA4NkFcdTA4NzAtXHUwODg3XHUwODg5LVx1MDg4RVx1MDhBMC1cdTA4QzlcdTA5MDQtXHUwOTM5XHUwOTNEXHUwOTUwXHUwOTU4LVx1MDk2MVx1MDk2Ni1cdTA5NkZcdTA5NzEtXHUwOTgwXHUwOTg1LVx1MDk4Q1x1MDk4Rlx1MDk5MFx1MDk5My1cdTA5QThcdTA5QUEtXHUw''@;'; put 'put ''OUIwXHUwOUIyXHUwOUI2LVx1MDlCOVx1MDlCRFx1MDlDRVx1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTFcdTA5RTYtXHUwOUYxXHUwOUY0LVx1MDlGOVx1MDlGQ1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEzMFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEz''@;'; put 'put ''Nlx1MEEzOFx1MEEzOVx1MEE1OS1cdTBBNUNcdTBBNUVcdTBBNjYtXHUwQTZGXHUwQTcyLVx1MEE3NFx1MEE4NS1cdTBBOERcdTBBOEYtXHUwQTkxXHUwQTkzLVx1MEFBOFx1MEFBQS1cdTBBQjBcdTBBQjJcdTBBQjNcdTBBQjUtXHUwQUI5XHUwQUJEXHUwQUQwXHUwQUUwXHUwQUUxXHUwQUU2''@;'; put 'put ''LVx1MEFFRlx1MEFGOVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIzMFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYxXHUwQjY2LVx1MEI2Rlx1MEI3MS1cdTBCNzdcdTBCODNcdTBCODUtXHUwQjhB''@;'; put 'put ''XHUwQjhFLVx1MEI5MFx1MEI5Mi1cdTBCOTVcdTBCOTlcdTBCOUFcdTBCOUNcdTBCOUVcdTBCOUZcdTBCQTNcdTBCQTRcdTBCQTgtXHUwQkFBXHUwQkFFLVx1MEJCOVx1MEJEMFx1MEJFNi1cdTBCRjJcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzM5''@;'; put 'put ''XHUwQzNEXHUwQzU4LVx1MEM1QVx1MEM1RFx1MEM2MFx1MEM2MVx1MEM2Ni1cdTBDNkZcdTBDNzgtXHUwQzdFXHUwQzgwXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBDOTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkRcdTBDRERcdTBDREVcdTBDRTBcdTBDRTFc''@;'; put 'put ''dTBDRTYtXHUwQ0VGXHUwQ0YxXHUwQ0YyXHUwRDA0LVx1MEQwQ1x1MEQwRS1cdTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDU0LVx1MEQ1Nlx1MEQ1OC1cdTBENjFcdTBENjYtXHUwRDc4XHUwRDdBLVx1MEQ3Rlx1MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERC''@;'; put 'put ''Qlx1MERCRFx1MERDMC1cdTBEQzZcdTBERTYtXHUwREVGXHUwRTAxLVx1MEUzMFx1MEUzMlx1MEUzM1x1MEU0MC1cdTBFNDZcdTBFNTAtXHUwRTU5XHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg2LVx1MEU4QVx1MEU4Qy1cdTBFQTNcdTBFQTVcdTBFQTctXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUJE''@;'; put 'put ''XHUwRUMwLVx1MEVDNFx1MEVDNlx1MEVEMC1cdTBFRDlcdTBFREMtXHUwRURGXHUwRjAwXHUwRjIwLVx1MEYzM1x1MEY0MC1cdTBGNDdcdTBGNDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0YtXHUxMDQ5XHUxMDUwLVx1MTA1NVx1MTA1QS1cdTEwNURcdTEwNjFcdTEw''@;'; put 'put ''NjVcdTEwNjZcdTEwNkUtXHUxMDcwXHUxMDc1LVx1MTA4MVx1MTA4RVx1MTA5MC1cdTEwOTlcdTEwQTAtXHUxMEM1XHUxMEM3XHUxMENEXHUxMEQwLVx1MTBGQVx1MTBGQy1cdTEyNDhcdTEyNEEtXHUxMjREXHUxMjUwLVx1MTI1Nlx1MTI1OFx1MTI1QS1cdTEyNURcdTEyNjAtXHUxMjg4XHUx''@;'; put 'put ''MjhBLVx1MTI4RFx1MTI5MC1cdTEyQjBcdTEyQjItXHUxMkI1XHUxMkI4LVx1MTJCRVx1MTJDMFx1MTJDMi1cdTEyQzVcdTEyQzgtXHUxMkQ2XHUxMkQ4LVx1MTMxMFx1MTMxMi1cdTEzMTVcdTEzMTgtXHUxMzVBXHUxMzY5LVx1MTM3Q1x1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y1XHUxM0Y4''@;'; put 'put ''LVx1MTNGRFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFcdTE2RUUtXHUxNkY4XHUxNzAwLVx1MTcxMVx1MTcxRi1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1cdTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUx''@;'; put 'put ''N0UwLVx1MTdFOVx1MTdGMC1cdTE3RjlcdTE4MTAtXHUxODE5XHUxODIwLVx1MTg3OFx1MTg4MC1cdTE4ODRcdTE4ODctXHUxOEE4XHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUVcdTE5NDYtXHUxOTZEXHUxOTcwLVx1MTk3NFx1MTk4MC1cdTE5QUJcdTE5QjAtXHUxOUM5XHUxOUQw''@;'; put 'put ''LVx1MTlEQVx1MUEwMC1cdTFBMTZcdTFBMjAtXHUxQTU0XHUxQTgwLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDUtXHUxQjMzXHUxQjQ1LVx1MUI0Q1x1MUI1MC1cdTFCNTlcdTFCODMtXHUxQkEwXHUxQkFFLVx1MUJFNVx1MUMwMC1cdTFDMjNcdTFDNDAtXHUxQzQ5XHUxQzRELVx1''@;'; put 'put ''MUM3RFx1MUM4MC1cdTFDODhcdTFDOTAtXHUxQ0JBXHUxQ0JELVx1MUNCRlx1MUNFOS1cdTFDRUNcdTFDRUUtXHUxQ0YzXHUxQ0Y1XHUxQ0Y2XHUxQ0ZBXHUxRDAwLVx1MURCRlx1MUUwMC1cdTFGMTVcdTFGMTgtXHUxRjFEXHUxRjIwLVx1MUY0NVx1MUY0OC1cdTFGNERcdTFGNTAtXHUxRjU3''@;'; put 'put ''XHUxRjU5XHUxRjVCXHUxRjVEXHUxRjVGLVx1MUY3RFx1MUY4MC1cdTFGQjRcdTFGQjYtXHUxRkJDXHUxRkJFXHUxRkMyLVx1MUZDNFx1MUZDNi1cdTFGQ0NcdTFGRDAtXHUxRkQzXHUxRkQ2LVx1MUZEQlx1MUZFMC1cdTFGRUNcdTFGRjItXHUxRkY0XHUxRkY2LVx1MUZGQ1x1MjA3MFx1MjA3''@;'; put 'put ''MVx1MjA3NC1cdTIwNzlcdTIwN0YtXHUyMDg5XHUyMDkwLVx1MjA5Q1x1MjEwMlx1MjEwN1x1MjEwQS1cdTIxMTNcdTIxMTVcdTIxMTktXHUyMTFEXHUyMTI0XHUyMTI2XHUyMTI4XHUyMTJBLVx1MjEyRFx1MjEyRi1cdTIxMzlcdTIxM0MtXHUyMTNGXHUyMTQ1LVx1MjE0OVx1MjE0RVx1MjE1''@;'; put 'put ''MC1cdTIxODlcdTI0NjAtXHUyNDlCXHUyNEVBLVx1MjRGRlx1Mjc3Ni1cdTI3OTNcdTJDMDAtXHUyQ0U0XHUyQ0VCLVx1MkNFRVx1MkNGMlx1MkNGM1x1MkNGRFx1MkQwMC1cdTJEMjVcdTJEMjdcdTJEMkRcdTJEMzAtXHUyRDY3XHUyRDZGXHUyRDgwLVx1MkQ5Nlx1MkRBMC1cdTJEQTZcdTJE''@;'; put 'put ''QTgtXHUyREFFXHUyREIwLVx1MkRCNlx1MkRCOC1cdTJEQkVcdTJEQzAtXHUyREM2XHUyREM4LVx1MkRDRVx1MkREMC1cdTJERDZcdTJERDgtXHUyRERFXHUyRTJGXHUzMDA1LVx1MzAwN1x1MzAyMS1cdTMwMjlcdTMwMzEtXHUzMDM1XHUzMDM4LVx1MzAzQ1x1MzA0MS1cdTMwOTZcdTMwOUQt''@;'; put 'put ''XHUzMDlGXHUzMEExLVx1MzBGQVx1MzBGQy1cdTMwRkZcdTMxMDUtXHUzMTJGXHUzMTMxLVx1MzE4RVx1MzE5Mi1cdTMxOTVcdTMxQTAtXHUzMUJGXHUzMUYwLVx1MzFGRlx1MzIyMC1cdTMyMjlcdTMyNDgtXHUzMjRGXHUzMjUxLVx1MzI1Rlx1MzI4MC1cdTMyODlcdTMyQjEtXHUzMkJGXHUz''@;'; put 'put ''NDAwLVx1NERCRlx1NEUwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYxMC1cdUE2MkJcdUE2NDAtXHVBNjZFXHVBNjdGLVx1QTY5RFx1QTZBMC1cdUE2RUZcdUE3MTctXHVBNzFGXHVBNzIyLVx1QTc4OFx1QTc4Qi1cdUE3Q0FcdUE3RDBcdUE3RDFcdUE3RDNcdUE3RDUt''@;'; put 'put ''XHVBN0Q5XHVBN0YyLVx1QTgwMVx1QTgwMy1cdUE4MDVcdUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTgzMC1cdUE4MzVcdUE4NDAtXHVBODczXHVBODgyLVx1QThCM1x1QThEMC1cdUE4RDlcdUE4RjItXHVBOEY3XHVBOEZCXHVBOEZEXHVBOEZFXHVBOTAwLVx1QTkyNVx1QTkzMC1cdUE5''@;'; put 'put ''NDZcdUE5NjAtXHVBOTdDXHVBOTg0LVx1QTlCMlx1QTlDRi1cdUE5RDlcdUE5RTAtXHVBOUU0XHVBOUU2LVx1QTlGRVx1QUEwMC1cdUFBMjhcdUFBNDAtXHVBQTQyXHVBQTQ0LVx1QUE0Qlx1QUE1MC1cdUFBNTlcdUFBNjAtXHVBQTc2XHVBQTdBXHVBQTdFLVx1QUFBRlx1QUFCMVx1QUFCNVx1''@;'; put 'put ''QUFCNlx1QUFCOS1cdUFBQkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFCMDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUIzMC1cdUFCNUFcdUFCNUMtXHVBQjY5XHVBQjcw''@;'; put 'put ''LVx1QUJFMlx1QUJGMC1cdUFCRjlcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJcdUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFEXHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVG''@;'; put 'put ''QjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDkyLVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYxMC1cdUZGMTlcdUZGMjEtXHVGRjNBXHVGRjQxLVx1RkY1QVx1RkY2Ni1cdUZGQkVc''@;'; put 'put ''dUZGQzItXHVGRkM3XHVGRkNBLVx1RkZDRlx1RkZEMi1cdUZGRDdcdUZGREEtXHVGRkRDXXxcdUQ4MDBbXHVEQzAwLVx1REMwQlx1REMwRC1cdURDMjZcdURDMjgtXHVEQzNBXHVEQzNDXHVEQzNEXHVEQzNGLVx1REM0RFx1REM1MC1cdURDNURcdURDODAtXHVEQ0ZBXHVERDA3LVx1REQzM1x1''@;'; put 'put ''REQ0MC1cdURENzhcdUREOEFcdUREOEJcdURFODAtXHVERTlDXHVERUEwLVx1REVEMFx1REVFMS1cdURFRkJcdURGMDAtXHVERjIzXHVERjJELVx1REY0QVx1REY1MC1cdURGNzVcdURGODAtXHVERjlEXHVERkEwLVx1REZDM1x1REZDOC1cdURGQ0ZcdURGRDEtXHVERkQ1XXxcdUQ4MDFbXHVE''@;'; put 'put ''QzAwLVx1REM5RFx1RENBMC1cdURDQTlcdURDQjAtXHVEQ0QzXHVEQ0Q4LVx1RENGQlx1REQwMC1cdUREMjdcdUREMzAtXHVERDYzXHVERDcwLVx1REQ3QVx1REQ3Qy1cdUREOEFcdUREOEMtXHVERDkyXHVERDk0XHVERDk1XHVERDk3LVx1RERBMVx1RERBMy1cdUREQjFcdUREQjMtXHVEREI5''@;'; put 'put ''XHVEREJCXHVEREJDXHVERTAwLVx1REYzNlx1REY0MC1cdURGNTVcdURGNjAtXHVERjY3XHVERjgwLVx1REY4NVx1REY4Ny1cdURGQjBcdURGQjItXHVERkJBXXxcdUQ4MDJbXHVEQzAwLVx1REMwNVx1REMwOFx1REMwQS1cdURDMzVcdURDMzdcdURDMzhcdURDM0NcdURDM0YtXHVEQzU1XHVE''@;'; put 'put ''QzU4LVx1REM3Nlx1REM3OS1cdURDOUVcdURDQTctXHVEQ0FGXHVEQ0UwLVx1RENGMlx1RENGNFx1RENGNVx1RENGQi1cdUREMUJcdUREMjAtXHVERDM5XHVERDgwLVx1RERCN1x1RERCQy1cdUREQ0ZcdURERDItXHVERTAwXHVERTEwLVx1REUxM1x1REUxNS1cdURFMTdcdURFMTktXHVERTM1''@;'; put 'put ''XHVERTQwLVx1REU0OFx1REU2MC1cdURFN0VcdURFODAtXHVERTlGXHVERUMwLVx1REVDN1x1REVDOS1cdURFRTRcdURFRUItXHVERUVGXHVERjAwLVx1REYzNVx1REY0MC1cdURGNTVcdURGNTgtXHVERjcyXHVERjc4LVx1REY5MVx1REZBOS1cdURGQUZdfFx1RDgwM1tcdURDMDAtXHVEQzQ4''@;'; put 'put ''XHVEQzgwLVx1RENCMlx1RENDMC1cdURDRjJcdURDRkEtXHVERDIzXHVERDMwLVx1REQzOVx1REU2MC1cdURFN0VcdURFODAtXHVERUE5XHVERUIwXHVERUIxXHVERjAwLVx1REYyN1x1REYzMC1cdURGNDVcdURGNTEtXHVERjU0XHVERjcwLVx1REY4MVx1REZCMC1cdURGQ0JcdURGRTAtXHVE''@;'; put 'put ''RkY2XXxcdUQ4MDRbXHVEQzAzLVx1REMzN1x1REM1Mi1cdURDNkZcdURDNzFcdURDNzJcdURDNzVcdURDODMtXHVEQ0FGXHVEQ0QwLVx1RENFOFx1RENGMC1cdURDRjlcdUREMDMtXHVERDI2XHVERDM2LVx1REQzRlx1REQ0NFx1REQ0N1x1REQ1MC1cdURENzJcdURENzZcdUREODMtXHVEREIy''@;'; put 'put ''XHVEREMxLVx1RERDNFx1REREMC1cdUREREFcdURERENcdURERTEtXHVEREY0XHVERTAwLVx1REUxMVx1REUxMy1cdURFMkJcdURFM0ZcdURFNDBcdURFODAtXHVERTg2XHVERTg4XHVERThBLVx1REU4RFx1REU4Ri1cdURFOURcdURFOUYtXHVERUE4XHVERUIwLVx1REVERVx1REVGMC1cdURF''@;'; put 'put ''RjlcdURGMDUtXHVERjBDXHVERjBGXHVERjEwXHVERjEzLVx1REYyOFx1REYyQS1cdURGMzBcdURGMzJcdURGMzNcdURGMzUtXHVERjM5XHVERjNEXHVERjUwXHVERjVELVx1REY2MV18XHVEODA1W1x1REMwMC1cdURDMzRcdURDNDctXHVEQzRBXHVEQzUwLVx1REM1OVx1REM1Ri1cdURDNjFc''@;'; put 'put ''dURDODAtXHVEQ0FGXHVEQ0M0XHVEQ0M1XHVEQ0M3XHVEQ0QwLVx1RENEOVx1REQ4MC1cdUREQUVcdURERDgtXHVERERCXHVERTAwLVx1REUyRlx1REU0NFx1REU1MC1cdURFNTlcdURFODAtXHVERUFBXHVERUI4XHVERUMwLVx1REVDOVx1REYwMC1cdURGMUFcdURGMzAtXHVERjNCXHVERjQw''@;'; put 'put ''LVx1REY0Nl18XHVEODA2W1x1REMwMC1cdURDMkJcdURDQTAtXHVEQ0YyXHVEQ0ZGLVx1REQwNlx1REQwOVx1REQwQy1cdUREMTNcdUREMTVcdUREMTZcdUREMTgtXHVERDJGXHVERDNGXHVERDQxXHVERDUwLVx1REQ1OVx1RERBMC1cdUREQTdcdUREQUEtXHVEREQwXHVEREUxXHVEREUzXHVE''@;'; put 'put ''RTAwXHVERTBCLVx1REUzMlx1REUzQVx1REU1MFx1REU1Qy1cdURFODlcdURFOURcdURFQjAtXHVERUY4XXxcdUQ4MDdbXHVEQzAwLVx1REMwOFx1REMwQS1cdURDMkVcdURDNDBcdURDNTAtXHVEQzZDXHVEQzcyLVx1REM4Rlx1REQwMC1cdUREMDZcdUREMDhcdUREMDlcdUREMEItXHVERDMw''@;'; put 'put ''XHVERDQ2XHVERDUwLVx1REQ1OVx1REQ2MC1cdURENjVcdURENjdcdURENjhcdURENkEtXHVERDg5XHVERDk4XHVEREEwLVx1RERBOVx1REVFMC1cdURFRjJcdURGMDJcdURGMDQtXHVERjEwXHVERjEyLVx1REYzM1x1REY1MC1cdURGNTlcdURGQjBcdURGQzAtXHVERkQ0XXxcdUQ4MDhbXHVE''@;'; put 'put ''QzAwLVx1REY5OV18XHVEODA5W1x1REMwMC1cdURDNkVcdURDODAtXHVERDQzXXxcdUQ4MEJbXHVERjkwLVx1REZGMF18W1x1RDgwQ1x1RDgxQy1cdUQ4MjBcdUQ4MjJcdUQ4NDAtXHVEODY4XHVEODZBLVx1RDg2Q1x1RDg2Ri1cdUQ4NzJcdUQ4NzQtXHVEODc5XHVEODgwLVx1RDg4M1x1RDg4''@;'; put 'put ''NS1cdUQ4ODddW1x1REMwMC1cdURGRkZdfFx1RDgwRFtcdURDMDAtXHVEQzJGXHVEQzQxLVx1REM0Nl18XHVEODExW1x1REMwMC1cdURFNDZdfFx1RDgxQVtcdURDMDAtXHVERTM4XHVERTQwLVx1REU1RVx1REU2MC1cdURFNjlcdURFNzAtXHVERUJFXHVERUMwLVx1REVDOVx1REVEMC1cdURF''@;'; put 'put ''RURcdURGMDAtXHVERjJGXHVERjQwLVx1REY0M1x1REY1MC1cdURGNTlcdURGNUItXHVERjYxXHVERjYzLVx1REY3N1x1REY3RC1cdURGOEZdfFx1RDgxQltcdURFNDAtXHVERTk2XHVERjAwLVx1REY0QVx1REY1MFx1REY5My1cdURGOUZcdURGRTBcdURGRTFcdURGRTNdfFx1RDgyMVtcdURD''@;'; put 'put ''MDAtXHVERkY3XXxcdUQ4MjNbXHVEQzAwLVx1RENENVx1REQwMC1cdUREMDhdfFx1RDgyQltcdURGRjAtXHVERkYzXHVERkY1LVx1REZGQlx1REZGRFx1REZGRV18XHVEODJDW1x1REMwMC1cdUREMjJcdUREMzJcdURENTAtXHVERDUyXHVERDU1XHVERDY0LVx1REQ2N1x1REQ3MC1cdURFRkJd''@;'; put 'put ''fFx1RDgyRltcdURDMDAtXHVEQzZBXHVEQzcwLVx1REM3Q1x1REM4MC1cdURDODhcdURDOTAtXHVEQzk5XXxcdUQ4MzRbXHVERUMwLVx1REVEM1x1REVFMC1cdURFRjNcdURGNjAtXHVERjc4XXxcdUQ4MzVbXHVEQzAwLVx1REM1NFx1REM1Ni1cdURDOUNcdURDOUVcdURDOUZcdURDQTJcdURD''@;'; put 'put ''QTVcdURDQTZcdURDQTktXHVEQ0FDXHVEQ0FFLVx1RENCOVx1RENCQlx1RENCRC1cdURDQzNcdURDQzUtXHVERDA1XHVERDA3LVx1REQwQVx1REQwRC1cdUREMTRcdUREMTYtXHVERDFDXHVERDFFLVx1REQzOVx1REQzQi1cdUREM0VcdURENDAtXHVERDQ0XHVERDQ2XHVERDRBLVx1REQ1MFx1''@;'; put 'put ''REQ1Mi1cdURFQTVcdURFQTgtXHVERUMwXHVERUMyLVx1REVEQVx1REVEQy1cdURFRkFcdURFRkMtXHVERjE0XHVERjE2LVx1REYzNFx1REYzNi1cdURGNEVcdURGNTAtXHVERjZFXHVERjcwLVx1REY4OFx1REY4QS1cdURGQThcdURGQUEtXHVERkMyXHVERkM0LVx1REZDQlx1REZDRS1cdURG''@;'; put 'put ''RkZdfFx1RDgzN1tcdURGMDAtXHVERjFFXHVERjI1LVx1REYyQV18XHVEODM4W1x1REMzMC1cdURDNkRcdUREMDAtXHVERDJDXHVERDM3LVx1REQzRFx1REQ0MC1cdURENDlcdURENEVcdURFOTAtXHVERUFEXHVERUMwLVx1REVFQlx1REVGMC1cdURFRjldfFx1RDgzOVtcdURDRDAtXHVEQ0VC''@;'; put 'put ''XHVEQ0YwLVx1RENGOVx1REZFMC1cdURGRTZcdURGRTgtXHVERkVCXHVERkVEXHVERkVFXHVERkYwLVx1REZGRV18XHVEODNBW1x1REMwMC1cdURDQzRcdURDQzctXHVEQ0NGXHVERDAwLVx1REQ0M1x1REQ0Qlx1REQ1MC1cdURENTldfFx1RDgzQltcdURDNzEtXHVEQ0FCXHVEQ0FELVx1RENB''@;'; put 'put ''Rlx1RENCMS1cdURDQjRcdUREMDEtXHVERDJEXHVERDJGLVx1REQzRFx1REUwMC1cdURFMDNcdURFMDUtXHVERTFGXHVERTIxXHVERTIyXHVERTI0XHVERTI3XHVERTI5LVx1REUzMlx1REUzNC1cdURFMzdcdURFMzlcdURFM0JcdURFNDJcdURFNDdcdURFNDlcdURFNEJcdURFNEQtXHVERTRG''@;'; put 'put ''XHVERTUxXHVERTUyXHVERTU0XHVERTU3XHVERTU5XHVERTVCXHVERTVEXHVERTVGXHVERTYxXHVERTYyXHVERTY0XHVERTY3LVx1REU2QVx1REU2Qy1cdURFNzJcdURFNzQtXHVERTc3XHVERTc5LVx1REU3Q1x1REU3RVx1REU4MC1cdURFODlcdURFOEItXHVERTlCXHVERUExLVx1REVBM1x1''@;'; put 'put ''REVBNS1cdURFQTlcdURFQUItXHVERUJCXXxcdUQ4M0NbXHVERDAwLVx1REQwQ118XHVEODNFW1x1REZGMC1cdURGRjldfFx1RDg2OVtcdURDMDAtXHVERURGXHVERjAwLVx1REZGRl18XHVEODZEW1x1REMwMC1cdURGMzlcdURGNDAtXHVERkZGXXxcdUQ4NkVbXHVEQzAwLVx1REMxRFx1REMy''@;'; put 'put ''MC1cdURGRkZdfFx1RDg3M1tcdURDMDAtXHVERUExXHVERUIwLVx1REZGRl18XHVEODdBW1x1REMwMC1cdURGRTBdfFx1RDg3RVtcdURDMDAtXHVERTFEXXxcdUQ4ODRbXHVEQzAwLVx1REY0QVx1REY1MC1cdURGRkZdfFx1RDg4OFtcdURDMDAtXHVERkFGXSkvKSkmJighclsxXSYmIXJbMl18''@;'; put 'put ''fCFpfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGkpKSl7dmFyIGM9clswXS5sZW5ndGgtMSxoPWMsVj0wLEM9IioiPT09clswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2Zv''@;'; put 'put ''cihDLmxhc3RJbmRleD0wLGU9ZS5zbGljZSgtMSp0Lmxlbmd0aCtjKTtudWxsIT0ocj1DLmV4ZWMoZSkpOyl7dmFyIHUsZD1yWzFdfHxyWzJdfHxyWzNdfHxyWzRdfHxyWzVdfHxyWzZdO2lmKGQpaWYoZD1kLmxlbmd0aCxyWzNdfHxyWzRdKWgrPWQ7ZWxzZSBpZigocls1XXx8cls2XSkmJmMl''@;'; put 'put ''MyYmISgoYytkKSUzKSlWKz1kO2Vsc2UgaWYoISgwPChoLT1kKSkpcmV0dXJuIGQ9TWF0aC5taW4oZCxkK2grViksdT10LnNsaWNlKDAsYytyLmluZGV4K2QrMSksTWF0aC5taW4oYyxkKSUyPyhkPXUuc2xpY2UoMSwtMSkse3R5cGU6ImVtIixyYXc6dSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4''@;'; put 'put ''ZXIuaW5saW5lVG9rZW5zKGQpfSk6KGQ9dS5zbGljZSgyLC0yKSx7dHlwZToic3Ryb25nIixyYXc6dSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGQpfSl9fX0scy5jb2Rlc3Bhbj1mdW5jdGlvbihjKXt2YXIgZSxpLHI7aWYoYz10aGlzLnJ1bGVzLmlubGluZS5jb2Rl''@;'; put 'put ''LmV4ZWMoYykpcmV0dXJuIHI9Y1syXS5yZXBsYWNlKC9cbi9nLCIgIiksZT0vW14gXS8udGVzdChyKSxpPS9eIC8udGVzdChyKSYmLyAkLy50ZXN0KHIpLHI9VChyPWUmJmk/ci5zdWJzdHJpbmcoMSxyLmxlbmd0aC0xKTpyLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzpjWzBdLHRleHQ6cn19''@;'; put 'put ''LHMuYnI9ZnVuY3Rpb24odCl7aWYodD10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKHQpKXJldHVybnt0eXBlOiJiciIscmF3OnRbMF19fSxzLmRlbD1mdW5jdGlvbih0KXtpZih0PXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKHQpKXJldHVybnt0eXBlOiJkZWwiLHJhdzp0WzBdLHRleHQ6''@;'; put 'put ''dFsyXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnModFsyXSl9fSxzLmF1dG9saW5rPWZ1bmN0aW9uKHIsZSl7dmFyIGk7aWYocj10aGlzLnJ1bGVzLmlubGluZS5hdXRvbGluay5leGVjKHIpKXJldHVybiBlPSJAIj09PXJbMl0/Im1haWx0bzoiKyhpPVQodGhpcy5vcHRpb25zLm1h''@;'; put 'put ''bmdsZT9lKHJbMV0pOnJbMV0pKTppPVQoclsxXSkse3R5cGU6ImxpbmsiLHJhdzpyWzBdLHRleHQ6aSxocmVmOmUsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmksdGV4dDppfV19fSxzLnVybD1mdW5jdGlvbih0LGUpe3ZhciBpLHIsYyxoO2lmKGk9dGhpcy5ydWxlcy5pbmxpbmUudXJsLmV4''@;'; put 'put ''ZWModCkpe2lmKCJAIj09PWlbMl0pYz0ibWFpbHRvOiIrKHI9VCh0aGlzLm9wdGlvbnMubWFuZ2xlP2UoaVswXSk6aVswXSkpO2Vsc2V7Zm9yKDtoPWlbMF0saVswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoaVswXSlbMF0saCE9PWlbMF07KTtyPVQoaVswXSksYz0id3d3''@;'; put 'put ''LiI9PT1pWzFdPyJodHRwOi8vIitpWzBdOmlbMF19cmV0dXJue3R5cGU6ImxpbmsiLHJhdzppWzBdLHRleHQ6cixocmVmOmMsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OnIsdGV4dDpyfV19fX0scy5pbmxpbmVUZXh0PWZ1bmN0aW9uKHQsZSl7aWYodD10aGlzLnJ1bGVzLmlubGluZS50ZXh0''@;'; put 'put ''LmV4ZWModCkpcmV0dXJuIGU9dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIodFswXSk6VCh0WzBdKTp0WzBdOlQodGhpcy5vcHRpb25zLnNtYXJ0eXBhbnRzP2UodFsw''@;'; put 'put ''XSk6dFswXSkse3R5cGU6InRleHQiLHJhdzp0WzBdLHRleHQ6ZX19LG59KCksZz17bmV3bGluZTovXig/OiAqKD86XG58JCkpKy8sY29kZTovXiggezR9W15cbl0rKD86XG4oPzogKig/OlxufCQpKSopPykrLyxmZW5jZXM6L14gezAsM30oYHszLH0oPz1bXmBcbl0qKD86XG58JCkpfH57Myx9''@;'; put 'put ''KShbXlxuXSopKD86XG58JCkoPzp8KFtcc1xTXSo/KSg/OlxufCQpKSg/OiB7MCwzfVwxW35gXSogKig/PVxufCQpfCQpLyxocjovXiB7MCwzfSgoPzotW1x0IF0qKXszLH18KD86X1sgXHRdKil7Myx9fCg/OlwqWyBcdF0qKXszLH0pKD86XG4rfCQpLyxoZWFkaW5nOi9eIHswLDN9KCN7MSw2''@;'; put 'put ''fSkoPz1cc3wkKSguKikoPzpcbit8JCkvLGJsb2NrcXVvdGU6L14oIHswLDN9PiA/KHBhcmFncmFwaHxbXlxuXSopKD86XG58JCkpKy8sbGlzdDovXiggezAsM31idWxsKShbIFx0XVteXG5dKz8pPyg/OlxufCQpLyxodG1sOiJeIHswLDN9KD86PChzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVh''@;'; put 'put ''KVtcXHM+XVtcXHNcXFNdKj8oPzo8L1xcMT5bXlxcbl0qXFxuK3wkKXxjb21tZW50W15cXG5dKihcXG4rfCQpfDxcXD9bXFxzXFxTXSo/KD86XFw/Plxcbip8JCl8PCFbQS1aXVtcXHNcXFNdKj8oPzo+XFxuKnwkKXw8IVxcW0NEQVRBXFxbW1xcc1xcU10qPyg/OlxcXVxcXT5cXG4qfCQpfDwv''@;'; put 'put ''Pyh0YWcpKD86ICt8XFxufC8/PilbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8KD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSkoW2Etel1bXFx3LV0qKSg/OmF0dHJpYnV0ZSkqPyAqLz8+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKXw8''@;'; put 'put ''Lyg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW2Etel1bXFx3LV0qXFxzKj4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpKSIsZGVmOi9eIHswLDN9XFsobGFiZWwpXF06ICooPzpcbiAqKT8oW148XHNdW15cc10qfDwuKj8+KSg/Oig/OiArKD86''@;'; put 'put ''XG4gKik/fCAqXG4gKikodGl0bGUpKT8gKig/OlxuK3wkKS8sdGFibGU6SyxsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8''@;'; put 'put ''YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxlfCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigp''@;'; put 'put ''XSpcKSkvfSxBPShnLmRlZj13KGcuZGVmKS5yZXBsYWNlKCJsYWJlbCIsZy5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixnLl90aXRsZSkuZ2V0UmVnZXgoKSxnLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxnLmxpc3RJdGVtU3RhcnQ9dygvXiggKikoYnVsbCkgKi8pLnJlcGxhY2Uo''@;'; put 'put ''ImJ1bGwiLGcuYnVsbGV0KS5nZXRSZWdleCgpLGcubGlzdD13KGcubGlzdCkucmVwbGFjZSgvYnVsbC9nLGcuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2UoImRlZiIs''@;'; put 'put ''IlxcbisoPz0iK2cuZGVmLnNvdXJjZSsiKSIpLmdldFJlZ2V4KCksZy5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRz''@;'; put 'put ''ZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0''@;'; put 'put ''aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixnLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxnLmh0bWw9dyhnLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixnLl9jb21tZW50KS5yZXBs''@;'; put 'put ''YWNlKCJ0YWciLGcuX3RhZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxnLmxoZWFkaW5nPXcoZy5saGVhZGluZykucmVwbGFjZSgvYnVsbC9n''@;'; put 'put ''LGcuYnVsbGV0KS5nZXRSZWdleCgpLGcucGFyYWdyYXBoPXcoZy5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsZy5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmciLCIiKS5yZXBsYWNlKCJ8dGFibGUiLCIiKS5yZXBsYWNlKCJibG9ja3F1''@;'; put 'put ''b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8''@;'; put 'put ''PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsZy5fdGFnKS5nZXRSZWdleCgpLGcuYmxvY2txdW90ZT13KGcuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixnLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxnLm5vcm1hbD16KHt9LGcpLGcuZ2Zt''@;'; put 'put ''PXooe30sZy5ub3JtYWwse3RhYmxlOiJeICooW15cXG4gXS4qXFx8LiopXFxuIHswLDN9KD86XFx8ICopPyg6Py0rOj8gKig/OlxcfCAqOj8tKzo/ICopKikoPzpcXHwgKik/KD86XFxuKCg/Oig/ISAqXFxufGhyfGhlYWRpbmd8YmxvY2txdW90ZXxjb2RlfGZlbmNlc3xsaXN0fGh0bWwpLioo''@;'; put 'put ''PzpcXG58JCkpKilcXG4qfCQpIn0pLGcuZ2ZtLnRhYmxlPXcoZy5nZm0udGFibGUpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiY29kZSIsIiB7NH1bXlxcbl0iKS5y''@;'; put 'put ''ZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0''@;'; put 'put ''eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGcuX3RhZykuZ2V0UmVnZXgoKSxnLmdmbS5wYXJhZ3JhcGg9dyhnLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJl''@;'; put 'put ''cGxhY2UoInRhYmxlIixnLmdmbS50YWJsZSkucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAi''@;'; put 'put ''KS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLGcuX3RhZykuZ2V0UmVnZXgoKSxnLnBlZGFudGljPXooe30sZy5ub3JtYWwse2h0bWw6dygiXiAqKD86Y29tbWVudCAqKD86''@;'; put 'put ''XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsZy5fY29tbWVudCkucmVwbGFjZSgvdGFn''@;'; put 'put ''L2csIig/ISg/OmF8ZW18c3Ryb25nfHNtYWxsfHN8Y2l0ZXxxfGRmbnxhYmJyfGRhdGF8dGltZXxjb2RlfHZhcnxzYW1wfGtiZHxzdWJ8c3VwfGl8Ynx1fG1hcmt8cnVieXxydHxycHxiZGl8YmRvfHNwYW58YnJ8d2JyfGluc3xkZWx8aW1nKVxcYilcXHcrKD8hOnxbXlxcd1xcc0BdKkApXFxi''@;'; put 'put ''IikuZ2V0UmVnZXgoKSxkZWY6L14gKlxbKFteXF1dKylcXTogKjw/KFteXHM+XSspPj8oPzogKyhbIihdW15cbl0rWyIpXSkpPyAqKD86XG4rfCQpLyxoZWFkaW5nOi9eKCN7MSw2fSkoLiopKD86XG4rfCQpLyxmZW5jZXM6SyxsaGVhZGluZzovXiguKz8pXG4gezAsM30oPSt8LSspICooPzpc''@;'; put 'put ''bit8JCkvLHBhcmFncmFwaDp3KGcubm9ybWFsLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixnLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLGcubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFj''@;'; put 'put ''ZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfSkse2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVtZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFp''@;'; put 'put ''bCk+Lyx1cmw6Syx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1c''@;'; put 'put ''XF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0''@;'; put 'put ''cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118''@;'; put 'put ''JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxz''@;'; put 'put ''XSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10o''@;'; put 'put ''XyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6Syx0ZXh0Oi9eKGArfFteYF0pKD86KD89IHsyLH1cbil8W1xz''@;'; put 'put ''XFNdKj8oPzooPz1bXFw8IVxbYCpfXXxcYl98JCl8W14gXSg/PSB7Mix9XG4pKSkvLHB1bmN0dWF0aW9uOi9eKCg/IVsqX10pW1xzcHVuY3R1YXRpb25dKS99KTtmdW5jdGlvbiBNMShuKXtyZXR1cm4gbi5yZXBsYWNlKC8tLS0vZywiXHUyMDE0IikucmVwbGFjZSgvLS0vZywiXHUyMDEzIiku''@;'; put 'put ''cmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbeyJcc10pJy9nLCIkMVx1MjAxOCIpLnJlcGxhY2UoLycvZywiXHUyMDE5IikucmVwbGFjZSgvKF58Wy1cdTIwMTQvKFxbe1x1MjAxOFxzXSkiL2csIiQxXHUyMDFjIikucmVwbGFjZSgvIi9nLCJcdTIwMWQiKS5yZXBsYWNlKC9cLnszfS9nLCJcdTIw''@;'; put 'put ''MjYiKX1mdW5jdGlvbiBwMShuKXtmb3IodmFyIHMsdD0iIixlPW4ubGVuZ3RoLGk9MDtpPGU7aSsrKXM9bi5jaGFyQ29kZUF0KGkpLHQrPSImIyIrKHM9LjU8TWF0aC5yYW5kb20oKT8ieCIrcy50b1N0cmluZygxNik6cykrIjsiO3JldHVybiB0fUEuX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9''@;'; put 'put ''PmBefH4iLEEucHVuY3R1YXRpb249dyhBLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwoXCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxBLmFueVB1bmN0dWF0''@;'; put 'put ''aW9uPS9cXFtwdW5jdF0vZyxBLl9lc2NhcGVzPS9cXChbcHVuY3RdKS9nLEEuX2NvbW1lbnQ9dyhnLl9jb21tZW50KS5yZXBsYWNlKCIoPzotLVx4M2V8JCkiLCItLVx4M2UiKS5nZXRSZWdleCgpLEEuZW1TdHJvbmcubERlbGltPXcoQS5lbVN0cm9uZy5sRGVsaW0sInUiKS5yZXBsYWNlKC9w''@;'; put 'put ''dW5jdC9nLEEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEEuZW1TdHJvbmcuckRlbGltQXN0PXcoQS5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLmVtU3Ryb25nLnJEZWxpbVVuZD13KEEuZW1TdHJvbmcuckRl''@;'; put 'put ''bGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csQS5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksQS5hbnlQdW5jdHVhdGlvbj13KEEuYW55UHVuY3R1YXRpb24sImd1IikucmVwbGFjZSgvcHVuY3QvZyxBLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxBLl9lc2NhcGVzPXcoQS5fZXNjYXBl''@;'; put 'put ''cywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLEEuX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLEEuX3NjaGVtZT0vW2EtekEtWl1bYS16QS1aMC05Ky4tXXsxLDMxfS8sQS5fZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17''@;'; put 'put ''MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxBLmF1dG9saW5rPXcoQS5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixBLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixBLl9lbWFpbCkuZ2V0UmVn''@;'; put 'put ''ZXgoKSxBLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5gXSspPy8sQS50YWc9dyhBLnRhZykucmVwbGFjZSgiY29tbWVudCIsQS5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixBLl9h''@;'; put 'put ''dHRyaWJ1dGUpLmdldFJlZ2V4KCksQS5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8sQS5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxBLl90aXRsZT0vIig/OlxcIj98W14iXFxdKSoifCcoPzpc''@;'; put 'put ''XCc/fFteJ1xcXSkqJ3xcKCg/OlxcXCk/fFteKVxcXSkqXCkvLEEubGluaz13KEEubGluaykucmVwbGFjZSgibGFiZWwiLEEuX2xhYmVsKS5yZXBsYWNlKCJocmVmIixBLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsQS5fdGl0bGUpLmdldFJlZ2V4KCksQS5yZWZsaW5rPXcoQS5yZWZsaW5rKS5y''@;'; put 'put ''ZXBsYWNlKCJsYWJlbCIsQS5fbGFiZWwpLnJlcGxhY2UoInJlZiIsZy5fbGFiZWwpLmdldFJlZ2V4KCksQS5ub2xpbms9dyhBLm5vbGluaykucmVwbGFjZSgicmVmIixnLl9sYWJlbCkuZ2V0UmVnZXgoKSxBLnJlZmxpbmtTZWFyY2g9dyhBLnJlZmxpbmtTZWFyY2gsImciKS5yZXBsYWNlKCJy''@;'; put 'put ''ZWZsaW5rIixBLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsQS5ub2xpbmspLmdldFJlZ2V4KCksQS5ub3JtYWw9eih7fSxBKSxBLnBlZGFudGljPXooe30sQS5ub3JtYWwse3N0cm9uZzp7c3RhcnQ6L15fX3xcKlwqLyxtaWRkbGU6L15fXyg/PVxTKShbXHNcU10qP1xTKV9fKD8hXyl8Xlwq''@;'; put 'put ''XCooPz1cUykoW1xzXFNdKj9cUylcKlwqKD8hXCopLyxlbmRBc3Q6L1wqXCooPyFcKikvZyxlbmRVbmQ6L19fKD8hXykvZ30sZW06e3N0YXJ0Oi9eX3xcKi8sbWlkZGxlOi9eKClcKig/PVxTKShbXHNcU10qP1xTKVwqKD8hXCopfF5fKD89XFMpKFtcc1xTXSo/XFMpXyg/IV8pLyxlbmRBc3Q6''@;'; put 'put ''L1wqKD8hXCopL2csZW5kVW5kOi9fKD8hXykvZ30sbGluazp3KC9eIT9cWyhsYWJlbClcXVwoKC4qPylcKS8pLnJlcGxhY2UoImxhYmVsIixBLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOncoL14hP1xbKGxhYmVsKVxdXHMqXFsoW15cXV0qKVxdLykucmVwbGFjZSgibGFiZWwiLEEuX2xh''@;'; put 'put ''YmVsKS5nZXRSZWdleCgpfSksQS5nZm09eih7fSxBLm5vcm1hbCx7ZXNjYXBlOncoQS5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEt''@;'; put 'put ''WjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4p''@;'; put 'put ''XSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxi''@;'; put 'put ''X3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99KSxBLmdmbS51cmw9dyhBLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFp''@;'; put 'put ''bCIsQS5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLEEuYnJlYWtzPXooe30sQS5nZm0se2JyOncoQS5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6dyhBLmdmbS50ZXh0KS5yZXBsYWNlKCJcXGJfIiwiXFxiX3wgezIsfVxcbiIpLnJlcGxhY2UoL1x7Mixc''@;'; put 'put ''fS9nLCIqIikuZ2V0UmVnZXgoKX0pO3ZhciBOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihpKXt0aGlzLnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1pfHxiLmRlZmF1bHRzLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRp''@;'; put 'put ''b25zLnRva2VuaXplcnx8bmV3IEosdGhpcy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcix0aGlzLnRva2VuaXplci5vcHRpb25zPXRoaXMub3B0aW9ucywodGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcykuaW5saW5lUXVldWU9W10sdGhpcy5zdGF0ZT17aW5MaW5rOiExLGluUmF3''@;'; put 'put ''QmxvY2s6ITEsdG9wOiEwfSxpPXtibG9jazpnLm5vcm1hbCxpbmxpbmU6QS5ub3JtYWx9LHRoaXMub3B0aW9ucy5wZWRhbnRpYz8oaS5ibG9jaz1nLnBlZGFudGljLGkuaW5saW5lPUEucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihpLmJsb2NrPWcuZ2ZtLGkuaW5saW5lPXRoaXMub3B0''@;'; put 'put ''aW9ucy5icmVha3M/QS5icmVha3M6QS5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVzPWl9bi5sZXg9ZnVuY3Rpb24oaSxyKXtyZXR1cm4gbmV3IG4ocikubGV4KGkpfSxuLmxleElubGluZT1mdW5jdGlvbihpLHIpe3JldHVybiBuZXcgbihyKS5pbmxpbmVUb2tlbnMoaSl9O3ZhciB0LGU9bi5w''@;'; put 'put ''cm90b3R5cGU7cmV0dXJuIGUubGV4PWZ1bmN0aW9uKGkpe3ZhciByO2ZvcihpPWkucmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMoaSx0aGlzLnRva2Vucyk7cj10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKHIuc3JjLHIudG9rZW5z''@;'; put 'put ''KTtyZXR1cm4gdGhpcy50b2tlbnN9LGUuYmxvY2tUb2tlbnM9ZnVuY3Rpb24oaSxyKXt2YXIgYyxoLFYsQyx1PXRoaXM7Zm9yKHZvaWQgMD09PXImJihyPVtdKSxpPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9pLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTppLnJl''@;'; put 'put ''cGxhY2UoL14oICopKFx0KykvZ20sZnVuY3Rpb24oTCx5LEkpe3JldHVybiB5KyIgICAgIi5yZXBlYXQoSS5sZW5ndGgpfSk7aTspe3ZhciBkPWZ1bmN0aW9uKCl7aWYodS5vcHRpb25zLmV4dGVuc2lvbnMmJnUub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ1Lm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5ibG9jay5zb21lKGZ1bmN0aW9uKG8pe3JldHVybiEhKGM9by5jYWxsKHtsZXhlcjp1fSxpLHIpKSYmKGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihjPXUudG9rZW5pemVyLnNwYWNlKGkpKXJldHVybiBpPWkuc3Vic3Ry''@;'; put 'put ''aW5nKGMucmF3Lmxlbmd0aCksMT09PWMucmF3Lmxlbmd0aCYmMDxyLmxlbmd0aD9yW3IubGVuZ3RoLTFdLnJhdys9IlxuIjpyLnB1c2goYyksImNvbnRpbnVlIjtpZihjPXUudG9rZW5pemVyLmNvZGUoaSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSwhKGg9cltyLmxlbmd0''@;'; put 'put ''aC0xXSl8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/ci5wdXNoKGMpOihoLnJhdys9IlxuIitjLnJhdyxoLnRleHQrPSJcbiIrYy50ZXh0LHUuaW5saW5lUXVldWVbdS5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCksImNvbnRpbnVlIjtpZigoYz11LnRv''@;'; put 'put ''a2VuaXplci5mZW5jZXMoaSkpfHwoYz11LnRva2VuaXplci5oZWFkaW5nKGkpKXx8KGM9dS50b2tlbml6ZXIuaHIoaSkpfHwoYz11LnRva2VuaXplci5ibG9ja3F1b3RlKGkpKXx8KGM9dS50b2tlbml6ZXIubGlzdChpKSl8fChjPXUudG9rZW5pemVyLmh0bWwoaSkpKXJldHVybiBpPWkuc3Vi''@;'; put 'put ''c3RyaW5nKGMucmF3Lmxlbmd0aCksci5wdXNoKGMpLCJjb250aW51ZSI7aWYoYz11LnRva2VuaXplci5kZWYoaSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSwhKGg9cltyLmxlbmd0aC0xXSl8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dS50b2tl''@;'; put 'put ''bnMubGlua3NbYy50YWddfHwodS50b2tlbnMubGlua3NbYy50YWddPXtocmVmOmMuaHJlZix0aXRsZTpjLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2MucmF3LGgudGV4dCs9IlxuIitjLnJhdyx1LmlubGluZVF1ZXVlW3UuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpLCJjb250aW51''@;'; put 'put ''ZSI7aWYoKGM9dS50b2tlbml6ZXIudGFibGUoaSkpfHwoYz11LnRva2VuaXplci5saGVhZGluZyhpKSkpcmV0dXJuIGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksImNvbnRpbnVlIjt2YXIgTCx5LEk7aWYoVj1pLHUub3B0aW9ucy5leHRlbnNpb25zJiZ1Lm9wdGlvbnMu''@;'; put 'put ''ZXh0ZW5zaW9ucy5zdGFydEJsb2NrJiYoTD0xLzAseT1pLnNsaWNlKDEpLHUub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0QmxvY2suZm9yRWFjaChmdW5jdGlvbihvKXsibnVtYmVyIj09dHlwZW9mKEk9by5jYWxsKHtsZXhlcjp0aGlzfSx5KSkmJjA8PUkmJihMPU1hdGgubWluKEwsSSkpfSks''@;'; put 'put ''TDwxLzApJiYwPD1MJiYoVj1pLnN1YnN0cmluZygwLEwrMSkpLHUuc3RhdGUudG9wJiYoYz11LnRva2VuaXplci5wYXJhZ3JhcGgoVikpKXJldHVybiBoPXJbci5sZW5ndGgtMV0sQyYmInBhcmFncmFwaCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2MucmF3LGgudGV4dCs9IlxuIitjLnRleHQs''@;'; put 'put ''dS5pbmxpbmVRdWV1ZS5wb3AoKSx1LmlubGluZVF1ZXVlW3UuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOnIucHVzaChjKSxDPVYubGVuZ3RoIT09aS5sZW5ndGgsaT1pLnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLCJjb250aW51ZSI7aWYoYz11LnRva2VuaXplci50ZXh0KGkp''@;'; put 'put ''KXJldHVybiBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPSJcbiIrYy5yYXcsaC50ZXh0Kz0iXG4iK2MudGV4dCx1LmlubGluZVF1ZXVlLnBvcCgpLHUuaW5saW5lUXVldWVbdS5pbmxpbmVRdWV1ZS5sZW5ndGgt''@;'; put 'put ''MV0uc3JjPWgudGV4dCk6ci5wdXNoKGMpLCJjb250aW51ZSI7aWYoaSl7dmFyIFo9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitpLmNoYXJDb2RlQXQoMCk7aWYodS5vcHRpb25zLnNpbGVudClyZXR1cm4gY29uc29sZS5lcnJvcihaKSwiYnJlYWsiO3Rocm93IG5ldyBFcnJvcihaKX19KCk7''@;'; put 'put ''aWYoImNvbnRpbnVlIiE9PWQmJiJicmVhayI9PT1kKWJyZWFrfXJldHVybiB0aGlzLnN0YXRlLnRvcD0hMCxyfSxlLmlubGluZT1mdW5jdGlvbihpLHIpe3JldHVybiB0aGlzLmlubGluZVF1ZXVlLnB1c2goe3NyYzppLHRva2VuczpyPXZvaWQgMD09PXI/W106cn0pLHJ9LGUuaW5saW5lVG9r''@;'; put 'put ''ZW5zPWZ1bmN0aW9uKGkscil7dmFyIGMsaCxWLEMsdSxkLEw9dGhpcyx5PSh2b2lkIDA9PT1yJiYocj1bXSksaSk7aWYodGhpcy50b2tlbnMubGlua3Mpe3ZhciBJPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZigwPEkubGVuZ3RoKWZvcig7bnVsbCE9KEM9dGhpcy50b2tlbml6''@;'; put 'put ''ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyh5KSk7KUkuaW5jbHVkZXMoQ1swXS5zbGljZShDWzBdLmxhc3RJbmRleE9mKCJbIikrMSwtMSkpJiYoeT15LnNsaWNlKDAsQy5pbmRleCkrIlsiKyJhIi5yZXBlYXQoQ1swXS5sZW5ndGgtMikrIl0iK3kuc2xpY2UodGhpcy50b2tl''@;'; put 'put ''bml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oQz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWMoeSkpOyl5PXkuc2xpY2UoMCxDLmluZGV4KSsiWyIrImEiLnJlcGVhdChDWzBdLmxlbmd0aC0yKSsiXSIreS5z''@;'; put 'put ''bGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oQz10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh5KSk7KXk9eS5zbGljZSgwLEMuaW5kZXgpKyIrKyIreS5zbGljZSh0aGlzLnRva2Vu''@;'; put 'put ''aXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2k7KXt2YXIgWj1mdW5jdGlvbigpe2lmKHV8fChkPSIiKSx1PSExLEwub3B0aW9ucy5leHRlbnNpb25zJiZMLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJkwub3B0aW9ucy5leHRlbnNpb25zLmlubGlu''@;'; put 'put ''ZS5zb21lKGZ1bmN0aW9uKG0pe3JldHVybiEhKGM9bS5jYWxsKHtsZXhlcjpMfSxpLHIpKSYmKGk9aS5zdWJzdHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksITApfSkpcmV0dXJuImNvbnRpbnVlIjtpZihjPUwudG9rZW5pemVyLmVzY2FwZShpKSlyZXR1cm4gaT1pLnN1YnN0cmluZyhj''@;'; put 'put ''LnJhdy5sZW5ndGgpLHIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIudGFnKGkpKXJldHVybiBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWMudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9Yy5yYXcsaC50ZXh0''@;'; put 'put ''Kz1jLnRleHQpOnIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIubGluayhpKSlyZXR1cm4gaT1pLnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLHIucHVzaChjKSwiY29udGludWUiO2lmKGM9TC50b2tlbml6ZXIucmVmbGluayhpLEwudG9rZW5zLmxpbmtzKSlyZXR1cm4gaT1p''@;'; put 'put ''LnN1YnN0cmluZyhjLnJhdy5sZW5ndGgpLChoPXJbci5sZW5ndGgtMV0pJiYidGV4dCI9PT1jLnR5cGUmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWMucmF3LGgudGV4dCs9Yy50ZXh0KTpyLnB1c2goYyksImNvbnRpbnVlIjtpZigoYz1MLnRva2VuaXplci5lbVN0cm9uZyhpLHksZCkpfHwo''@;'; put 'put ''Yz1MLnRva2VuaXplci5jb2Rlc3BhbihpKSl8fChjPUwudG9rZW5pemVyLmJyKGkpKXx8KGM9TC50b2tlbml6ZXIuZGVsKGkpKXx8KGM9TC50b2tlbml6ZXIuYXV0b2xpbmsoaSxwMSkpfHwhTC5zdGF0ZS5pbkxpbmsmJihjPUwudG9rZW5pemVyLnVybChpLHAxKSkpcmV0dXJuIGk9aS5zdWJz''@;'; put 'put ''dHJpbmcoYy5yYXcubGVuZ3RoKSxyLnB1c2goYyksImNvbnRpbnVlIjt2YXIgbyxmLEU7aWYoVj1pLEwub3B0aW9ucy5leHRlbnNpb25zJiZMLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGluZSYmKG89MS8wLGY9aS5zbGljZSgxKSxMLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydElubGlu''@;'; put 'put ''ZS5mb3JFYWNoKGZ1bmN0aW9uKG0peyJudW1iZXIiPT10eXBlb2YoRT1tLmNhbGwoe2xleGVyOnRoaXN9LGYpKSYmMDw9RSYmKG89TWF0aC5taW4obyxFKSl9KSxvPDEvMCkmJjA8PW8mJihWPWkuc3Vic3RyaW5nKDAsbysxKSksYz1MLnRva2VuaXplci5pbmxpbmVUZXh0KFYsTTEpKXJldHVy''@;'; put 'put ''biBpPWkuc3Vic3RyaW5nKGMucmF3Lmxlbmd0aCksIl8iIT09Yy5yYXcuc2xpY2UoLTEpJiYoZD1jLnJhdy5zbGljZSgtMSkpLHU9ITAsKGg9cltyLmxlbmd0aC0xXSkmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWMucmF3LGgudGV4dCs9Yy50ZXh0KTpyLnB1c2goYyksImNvbnRpbnVlIjtp''@;'; put 'put ''ZihpKXt2YXIgQj0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2kuY2hhckNvZGVBdCgwKTtpZihMLm9wdGlvbnMuc2lsZW50KXJldHVybiBjb25zb2xlLmVycm9yKEIpLCJicmVhayI7dGhyb3cgbmV3IEVycm9yKEIpfX0oKTtpZigiY29udGludWUiIT09WiYmImJyZWFrIj09PVopYnJlYWt9''@;'; put 'put ''cmV0dXJuIHJ9LGU9biwodD1be2tleToicnVsZXMiLGdldDpmdW5jdGlvbigpe3JldHVybntibG9jazpnLGlubGluZTpBfX19XSkmJmooZSx0KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxufSgpLGwxPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0''@;'; put 'put ''KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5jb2RlPWZ1bmN0aW9uKHQsYyxpKXt2YXIgcjtyZXR1cm4gYz0oY3x8IiIpLm1hdGNoKC9cUyovKVswXSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0JiZudWxsIT0ocj10aGlzLm9wdGlvbnMuaGln''@;'; put 'put ''aGxpZ2h0KHQsYykpJiZyIT09dCYmKGk9ITAsdD1yKSx0PXQucmVwbGFjZSgvXG4kLywiIikrIlxuIixjPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K1QoYykrJyI+JysoaT90OlQodCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGk/''@;'; put 'put ''dDpUKHQsITApKSsiPC9jb2RlPjwvcHJlPlxuIn0scy5ibG9ja3F1b3RlPWZ1bmN0aW9uKHQpe3JldHVybiI8YmxvY2txdW90ZT5cbiIrdCsiPC9ibG9ja3F1b3RlPlxuIn0scy5odG1sPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR9LHMuaGVhZGluZz1mdW5jdGlvbih0LGUsaSxyKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5vcHRpb25zLmhlYWRlcklkcz8iPGgiK2UrJyBpZD0iJysodGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtyLnNsdWcoaSkpKyciPicrdCsiPC9oIitlKyI+XG4iOiI8aCIrZSsiPiIrdCsiPC9oIitlKyI+XG4ifSxzLmhyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRt''@;'; put 'put ''bD8iPGhyLz5cbiI6Ijxocj5cbiJ9LHMubGlzdD1mdW5jdGlvbih0LGUsaSl7dmFyIHI9ZT8ib2wiOiJ1bCI7cmV0dXJuIjwiK3IrKGUmJjEhPT1pPycgc3RhcnQ9IicraSsnIic6IiIpKyI+XG4iK3QrIjwvIityKyI+XG4ifSxzLmxpc3RpdGVtPWZ1bmN0aW9uKHQpe3JldHVybiI8bGk+Iit0''@;'; put 'put ''KyI8L2xpPlxuIn0scy5jaGVja2JveD1mdW5jdGlvbih0KXtyZXR1cm4iPGlucHV0ICIrKHQ/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifSxzLnBhcmFncmFwaD1mdW5jdGlvbih0KXtyZXR1''@;'; put 'put ''cm4iPHA+Iit0KyI8L3A+XG4ifSxzLnRhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIjx0YWJsZT5cbjx0aGVhZD5cbiIrdCsiPC90aGVhZD5cbiIrKGU9ZSYmIjx0Ym9keT4iK2UrIjwvdGJvZHk+IikrIjwvdGFibGU+XG4ifSxzLnRhYmxlcm93PWZ1bmN0aW9uKHQpe3JldHVybiI8dHI+XG4i''@;'; put 'put ''K3QrIjwvdHI+XG4ifSxzLnRhYmxlY2VsbD1mdW5jdGlvbih0LGUpe3ZhciBpPWUuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oZS5hbGlnbj8iPCIraSsnIGFsaWduPSInK2UuYWxpZ24rJyI+JzoiPCIraSsiPiIpK3QrIjwvIitpKyI+XG4ifSxzLnN0cm9uZz1mdW5jdGlvbih0KXtyZXR1cm4i''@;'; put 'put ''PHN0cm9uZz4iK3QrIjwvc3Ryb25nPiJ9LHMuZW09ZnVuY3Rpb24odCl7cmV0dXJuIjxlbT4iK3QrIjwvZW0+In0scy5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4iPGNvZGU+Iit0KyI8L2NvZGU+In0scy5icj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+''@;'; put 'put ''IjoiPGJyPiJ9LHMuZGVsPWZ1bmN0aW9uKHQpe3JldHVybiI8ZGVsPiIrdCsiPC9kZWw+In0scy5saW5rPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbnVsbD09PSh0PW4xKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/aToodD0nPGEgaHJlZj0iJyt0Kyci''@;'; put 'put ''JyxlJiYodCs9JyB0aXRsZT0iJytlKyciJyksdCsiPiIraSsiPC9hPiIpfSxzLmltYWdlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gbnVsbD09PSh0PW4xKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCx0KSk/aToodD0nPGltZyBzcmM9IicrdCsnIiBhbHQ9Iicr''@;'; put 'put ''aSsnIicsZSYmKHQrPScgdGl0bGU9IicrZSsnIicpLHQrKHRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IikpfSxzLnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG59KCkscjE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7fXZhciBzPW4ucHJvdG90eXBlO3JldHVybiBzLnN0cm9uZz1mdW5j''@;'; put 'put ''dGlvbih0KXtyZXR1cm4gdH0scy5lbT1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy5jb2Rlc3Bhbj1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy5kZWw9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHMuaHRtbD1mdW5jdGlvbih0KXtyZXR1cm4gdH0scy50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0fSxz''@;'; put 'put ''Lmxpbms9ZnVuY3Rpb24odCxlLGkpe3JldHVybiIiK2l9LHMuaW1hZ2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiIiK2l9LHMuYnI9ZnVuY3Rpb24oKXtyZXR1cm4iIn0sbn0oKSxzMT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt0aGlzLnNlZW49e319dmFyIHM9bi5wcm90b3R5cGU7cmV0dXJu''@;'; put 'put ''IHMuc2VyaWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvTG93ZXJDYXNlKCkudHJpbSgpLnJlcGxhY2UoLzxbIVwvYS16XS4qPz4vZ2ksIiIpLnJlcGxhY2UoL1tcdTIwMDAtXHUyMDZGXHUyRTAwLVx1MkU3RlxcJyEiIyQlJigpKissLi86Ozw9Pj9AW1xdXmB7fH1+XS9nLCIiKS5yZXBs''@;'; put 'put ''YWNlKC9ccy9nLCItIil9LHMuZ2V0TmV4dFNhZmVTbHVnPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dCxyPTA7aWYodGhpcy5zZWVuLmhhc093blByb3BlcnR5KGkpKWZvcihyPXRoaXMuc2Vlblt0XTtpPXQrIi0iKyArK3IsdGhpcy5zZWVuLmhhc093blByb3BlcnR5KGkpOyk7cmV0dXJuIGV8fCh0''@;'; put 'put ''aGlzLnNlZW5bdF09cix0aGlzLnNlZW5baV09MCksaX0scy5zbHVnPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWUmJihlPXt9KSx0PXRoaXMuc2VyaWFsaXplKHQpLHRoaXMuZ2V0TmV4dFNhZmVTbHVnKHQsZS5kcnlydW4pfSxufSgpLHE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQp''@;'; put 'put ''e3RoaXMub3B0aW9ucz10fHxiLmRlZmF1bHRzLHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBsMSx0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRl''@;'; put 'put ''cmVyPW5ldyByMSx0aGlzLnNsdWdnZXI9bmV3IHMxfW4ucGFyc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4oZSkucGFyc2UodCl9LG4ucGFyc2VJbmxpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4oZSkucGFyc2VJbmxpbmUodCl9O3ZhciBzPW4ucHJvdG90eXBlO3JldHVybiBz''@;'; put 'put ''LnBhcnNlPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9ITApO2Zvcih2YXIgaSxyLGMsaCxWLEMsdSxkLEwseSxJLFosbyxmLEUsQixtPSIiLF89dC5sZW5ndGgsUj0wO1I8XztSKyspaWYoZD10W1JdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9u''@;'; put 'put ''cy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tkLnR5cGVdJiYoITEhPT0oQj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZC50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZCkpfHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0''@;'; put 'put ''YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFncmFwaCIsInRleHQiXS5pbmNsdWRlcyhkLnR5cGUpKSltKz1CfHwiIjtlbHNlIHN3aXRjaChkLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOm0rPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNl''@;'; put 'put ''ImhlYWRpbmciOm0rPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0aGlzLnBhcnNlSW5saW5lKGQudG9rZW5zKSxkLmRlcHRoLFEodGhpcy5wYXJzZUlubGluZShkLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjptKz10aGlzLnJlbmRl''@;'; put 'put ''cmVyLmNvZGUoZC50ZXh0LGQubGFuZyxkLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcihDPUw9IiIsYz1kLmhlYWRlci5sZW5ndGgsaT0wO2k8YztpKyspQys9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShkLmhlYWRlcltpXS50b2tlbnMpLHtoZWFk''@;'; put 'put ''ZXI6ITAsYWxpZ246ZC5hbGlnbltpXX0pO2ZvcihMKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KEMpLHU9IiIsYz1kLnJvd3MubGVuZ3RoLGk9MDtpPGM7aSsrKXtmb3IoQz0iIixoPShWPWQucm93c1tpXSkubGVuZ3RoLHI9MDtyPGg7cisrKUMrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRo''@;'; put 'put ''aXMucGFyc2VJbmxpbmUoVltyXS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246ZC5hbGlnbltyXX0pO3UrPXRoaXMucmVuZGVyZXIudGFibGVyb3coQyl9bSs9dGhpcy5yZW5kZXJlci50YWJsZShMLHUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90ZSI6dT10aGlzLnBhcnNlKGQudG9rZW5zKSxt''@;'; put 'put ''Kz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUodSk7Y29udGludWU7Y2FzZSJsaXN0Ijpmb3IoTD1kLm9yZGVyZWQsJD1kLnN0YXJ0LHk9ZC5sb29zZSxjPWQuaXRlbXMubGVuZ3RoLHU9IiIsaT0wO2k8YztpKyspbz0oWj1kLml0ZW1zW2ldKS5jaGVja2VkLGY9Wi50YXNrLEk9IiIsWi50YXNr''@;'; put 'put ''JiYoRT10aGlzLnJlbmRlcmVyLmNoZWNrYm94KG8pLHk/MDxaLnRva2Vucy5sZW5ndGgmJiJwYXJhZ3JhcGgiPT09Wi50b2tlbnNbMF0udHlwZT8oWi50b2tlbnNbMF0udGV4dD1FKyIgIitaLnRva2Vuc1swXS50ZXh0LFoudG9rZW5zWzBdLnRva2VucyYmMDxaLnRva2Vuc1swXS50b2tlbnMu''@;'; put 'put ''bGVuZ3RoJiYidGV4dCI9PT1aLnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSYmKFoudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PUUrIiAiK1oudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0KSk6Wi50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4dCIsdGV4dDpFfSk6SSs9RSksSSs9dGhpcy5wYXJz''@;'; put 'put ''ZShaLnRva2Vucyx5KSx1Kz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKEksZixvKTttKz10aGlzLnJlbmRlcmVyLmxpc3QodSxMLCQpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6bSs9dGhpcy5yZW5kZXJlci5odG1sKGQudGV4dCxkLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6bSs9dGhp''@;'; put 'put ''cy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShkLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKHU9ZC50b2tlbnM/dGhpcy5wYXJzZUlubGluZShkLnRva2Vucyk6ZC50ZXh0O1IrMTxfJiYidGV4dCI9PT10W1IrMV0udHlwZTspdSs9IlxuIisoKGQ9dFsrK1Jd''@;'; put 'put ''KS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShkLnRva2Vucyk6ZC50ZXh0KTttKz1lP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKHUpOnU7Y29udGludWU7ZGVmYXVsdDp2YXIgJD0nVG9rZW4gd2l0aCAiJytkLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNp''@;'; put 'put ''bGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCQpO3Rocm93IG5ldyBFcnJvcigkKX1yZXR1cm4gbX0scy5wYXJzZUlubGluZT1mdW5jdGlvbih0LGUpe2U9ZXx8dGhpcy5yZW5kZXJlcjtmb3IodmFyIGkscixjPSIiLGg9dC5sZW5ndGgsVj0wO1Y8aDtWKyspaWYoaT10W1ZdLHRoaXMu''@;'; put 'put ''b3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tpLnR5cGVdJiYoITEhPT0ocj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbaS50eXBlXS5jYWxsKHtwYXJzZXI6dGhp''@;'; put 'put ''c30saSkpfHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwiZGVsIiwidGV4dCJdLmluY2x1ZGVzKGkudHlwZSkpKWMrPXJ8fCIiO2Vsc2Ugc3dpdGNoKGkudHlwZSl7Y2FzZSJlc2NhcGUiOmNhc2UidGV4dCI6Yys9ZS50ZXh0''@;'; put 'put ''KGkudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpjKz1lLmh0bWwoaS50ZXh0KTticmVhaztjYXNlImxpbmsiOmMrPWUubGluayhpLmhyZWYsaS50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGkudG9rZW5zLGUpKTticmVhaztjYXNlImltYWdlIjpjKz1lLmltYWdlKGkuaHJlZixpLnRpdGxlLGkudGV4''@;'; put 'put ''dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmMrPWUuc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUoaS50b2tlbnMsZSkpO2JyZWFrO2Nhc2UiZW0iOmMrPWUuZW0odGhpcy5wYXJzZUlubGluZShpLnRva2VucyxlKSk7YnJlYWs7Y2FzZSJjb2Rlc3BhbiI6Yys9ZS5jb2Rlc3BhbihpLnRleHQpO2JyZWFr''@;'; put 'put ''O2Nhc2UiYnIiOmMrPWUuYnIoKTticmVhaztjYXNlImRlbCI6Yys9ZS5kZWwodGhpcy5wYXJzZUlubGluZShpLnRva2VucyxlKSk7YnJlYWs7ZGVmYXVsdDp2YXIgQz0nVG9rZW4gd2l0aCAiJytpLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudCly''@;'; put 'put ''ZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKEMpO3Rocm93IG5ldyBFcnJvcihDKX1yZXR1cm4gY30sbn0oKSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0KXt0aGlzLm9wdGlvbnM9dHx8Yi5kZWZhdWx0c312YXIgcz1uLnByb3RvdHlwZTtyZXR1cm4gcy5wcmVwcm9jZXNzPWZ1bmN0aW9uKHQp''@;'; put 'put ''e3JldHVybiB0fSxzLnBvc3Rwcm9jZXNzPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxufSgpLGExPShYLnBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKSxwKCJwYXJzZU1hcmtkb3duIikpLGgxPXAoIm9uRXJyb3IiKTtmdW5jdGlvbiBnMShuLHMp''@;'; put 'put ''e3ZhciB0PXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGUsaSxyKXsiZnVuY3Rpb24iPT10eXBlb2YgaSYmKHI9aSxpPW51bGwpO3ZhciBjLGg9eih7fSxpKSxWPShpPXooe30sdC5kZWZhdWx0cyxoKSxhKHQsaDEpW2gxXShpLnNpbGVudCxpLmFzeW5jLHIpKTtpZihudWxsPT1lKXJldHVybiBWKG5l''@;'; put 'put ''dyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIFYobmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3RyaW5n''@;'; put 'put ''LmNhbGwoZSkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGg9ciwoYz1pKSYmIWMuc2lsZW50JiYoaCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3Zl''@;'; put 'put ''ZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVw''@;'; put 'put ''cmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLCFjLmhpZ2hsaWdodCYm''@;'; put 'put ''Imxhbmd1YWdlLSI9PT1jLmxhbmdQcmVmaXh8fGNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGlu''@;'; put 'put ''IHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRl''@;'; put 'put ''ZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6''@;'; put 'put ''IGZhbHNlfWAuIiksYy5iYXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNl''@;'; put 'put ''IGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQg''@;'; put 'put ''YW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2lu''@;'; put 'put ''Y2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLGMuaGVhZGVySWRzfHxjLmhlYWRlclByZWZpeCkmJmNvbnNv''@;'; put 'put ''bGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlz''@;'; put 'put ''IHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpLGkuaG9va3MmJihpLmhvb2tzLm9wdGlvbnM9aSkscil7dmFyIEMsdT1pLmhpZ2hs''@;'; put 'put ''aWdodDt0cnl7aS5ob29rcyYmKGU9aS5ob29rcy5wcmVwcm9jZXNzKGUpKSxDPW4oZSxpKX1jYXRjaChaKXtyZXR1cm4gVihaKX12YXIgZCxMPWZ1bmN0aW9uKFope3ZhciBvO2lmKCFaKXRyeXtpLndhbGtUb2tlbnMmJnQud2Fsa1Rva2VucyhDLGkud2Fsa1Rva2Vucyksbz1zKEMsaSksaS5o''@;'; put 'put ''b29rcyYmKG89aS5ob29rcy5wb3N0cHJvY2VzcyhvKSl9Y2F0Y2goZil7Wj1mfXJldHVybiBpLmhpZ2hsaWdodD11LFo/VihaKTpyKG51bGwsbyl9O3JldHVybiF1fHx1Lmxlbmd0aDwzP0woKTooZGVsZXRlIGkuaGlnaGxpZ2h0LEMubGVuZ3RoPyhkPTAsdC53YWxrVG9rZW5zKEMsZnVuY3Rp''@;'; put 'put ''b24oWil7ImNvZGUiPT09Wi50eXBlJiYoZCsrLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt1KFoudGV4dCxaLmxhbmcsZnVuY3Rpb24obyxmKXtpZihvKXJldHVybiBMKG8pO251bGwhPWYmJmYhPT1aLnRleHQmJihaLnRleHQ9ZixaLmVzY2FwZWQ9ITApLDA9PS0tZCYmTCgpfSl9LDApKX0pLHZv''@;'; put 'put ''aWQoMD09PWQmJkwoKSkpOkwoKSl9aWYoaS5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkuaG9va3M/aS5ob29rcy5wcmVwcm9jZXNzKGUpOmUpLnRoZW4oZnVuY3Rpb24oWil7cmV0dXJuIG4oWixpKX0pLnRoZW4oZnVuY3Rpb24oWil7cmV0dXJuIGkud2Fsa1Rva2Vucz9Qcm9taXNl''@;'; put 'put ''LmFsbCh0LndhbGtUb2tlbnMoWixpLndhbGtUb2tlbnMpKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIFp9KTpafSkudGhlbihmdW5jdGlvbihaKXtyZXR1cm4gcyhaLGkpfSkudGhlbihmdW5jdGlvbihaKXtyZXR1cm4gaS5ob29rcz9pLmhvb2tzLnBvc3Rwcm9jZXNzKFopOlp9KS5jYXRjaChW''@;'; put 'put ''KTt0cnl7aS5ob29rcyYmKGU9aS5ob29rcy5wcmVwcm9jZXNzKGUpKTt2YXIgeT1uKGUsaSksST0oaS53YWxrVG9rZW5zJiZ0LndhbGtUb2tlbnMoeSxpLndhbGtUb2tlbnMpLHMoeSxpKSk7cmV0dXJuIGkuaG9va3M/aS5ob29rcy5wb3N0cHJvY2VzcyhJKTpJfWNhdGNoKFope3JldHVybiBW''@;'; put 'put ''KFopfX19ZnVuY3Rpb24gTDEobixzLHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgaTtpZihlLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsbilyZXR1cm4gaT0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxw''@;'; put 'put ''cmU+IitUKGUubWVzc2FnZSsiIiwhMCkrIjwvcHJlPiIscz9Qcm9taXNlLnJlc29sdmUoaSk6dD92b2lkIHQobnVsbCxpKTppO2lmKHMpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKCF0KXRocm93IGU7dChlKX19Sz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkodGhpcyxoMSx7dmFsdWU6TDF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxhMSx7dmFsdWU6ZzF9KSx0aGlzLmRlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoi''@;'; put 'put ''IixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6''@;'; put 'put ''bnVsbCx4aHRtbDohMX0sdGhpcy5vcHRpb25zPXRoaXMuc2V0T3B0aW9ucyx0aGlzLnBhcnNlPWEodGhpcyxhMSlbYTFdKE4ubGV4LHEucGFyc2UpLHRoaXMucGFyc2VJbmxpbmU9YSh0aGlzLGExKVthMV0oTi5sZXhJbmxpbmUscS5wYXJzZUlubGluZSksdGhpcy5QYXJzZXI9cSx0aGlzLnBh''@;'; put 'put ''cnNlcj1xLnBhcnNlLHRoaXMuUmVuZGVyZXI9bDEsdGhpcy5UZXh0UmVuZGVyZXI9cjEsdGhpcy5MZXhlcj1OLHRoaXMubGV4ZXI9Ti5sZXgsdGhpcy5Ub2tlbml6ZXI9Six0aGlzLlNsdWdnZXI9czEsdGhpcy5Ib29rcz1YLHRoaXMudXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgcz1u''@;'; put 'put ''LnByb3RvdHlwZTtyZXR1cm4gcy53YWxrVG9rZW5zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLHI9dGhpcyxjPVtdLGg9bCh0KTshKGk9aCgpKS5kb25lOykhZnVuY3Rpb24oKXt2YXIgVj1pLnZhbHVlO3N3aXRjaChjPWMuY29uY2F0KGUuY2FsbChyLFYpKSxWLnR5cGUpe2Nhc2UidGFibGUi''@;'; put 'put ''OmZvcih2YXIgQz1sKFYuaGVhZGVyKTshKHU9QygpKS5kb25lOyl7dmFyIHU9dS52YWx1ZTtjPWMuY29uY2F0KHIud2Fsa1Rva2Vucyh1LnRva2VucyxlKSl9Zm9yKHZhciBkLEw9bChWLnJvd3MpOyEoZD1MKCkpLmRvbmU7KWZvcih2YXIgeT1sKGQudmFsdWUpOyEoST15KCkpLmRvbmU7KXt2''@;'; put 'put ''YXIgST1JLnZhbHVlO2M9Yy5jb25jYXQoci53YWxrVG9rZW5zKEkudG9rZW5zLGUpKX1icmVhaztjYXNlImxpc3QiOmM9Yy5jb25jYXQoci53YWxrVG9rZW5zKFYuaXRlbXMsZSkpO2JyZWFrO2RlZmF1bHQ6ci5kZWZhdWx0cy5leHRlbnNpb25zJiZyLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hp''@;'; put 'put ''bGRUb2tlbnMmJnIuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tWLnR5cGVdP3IuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2Vuc1tWLnR5cGVdLmZvckVhY2goZnVuY3Rpb24oWil7Yz1jLmNvbmNhdChyLndhbGtUb2tlbnMoVltaXSxlKSl9KTpWLnRva2VucyYmKGM9Yy5j''@;'; put 'put ''b25jYXQoci53YWxrVG9rZW5zKFYudG9rZW5zLGUpKSl9fSgpO3JldHVybiBjfSxzLnVzZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fSxpPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJy''@;'; put 'put ''YXkoaSksYz0wO2M8aTtjKyspcltjXT1hcmd1bWVudHNbY107cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgVixDPXooe30saCk7aWYoQy5hc3luYz10LmRlZmF1bHRzLmFzeW5jfHxDLmFzeW5jfHwhMSxoLmV4dGVuc2lvbnMmJihoLmV4dGVuc2lvbnMuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihvKXtpZighby5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTt2YXIgZjtpZihvLnJlbmRlcmVyJiYoZS5yZW5kZXJlcnNbby5uYW1lXT0oZj1lLnJlbmRlcmVyc1tvLm5hbWVdKT9mdW5jdGlvbigpe2Zvcih2YXIgRT1hcmd1bWVudHMubGVuZ3RoLEI9''@;'; put 'put ''bmV3IEFycmF5KEUpLG09MDttPEU7bSsrKUJbbV09YXJndW1lbnRzW21dO3ZhciBfPW8ucmVuZGVyZXIuYXBwbHkodGhpcyxCKTtyZXR1cm4hMT09PV8/Zi5hcHBseSh0aGlzLEIpOl99Om8ucmVuZGVyZXIpLG8udG9rZW5pemVyKXtpZighby5sZXZlbHx8ImJsb2NrIiE9PW8ubGV2ZWwmJiJp''@;'; put 'put ''bmxpbmUiIT09by5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTtlW28ubGV2ZWxdP2Vbby5sZXZlbF0udW5zaGlmdChvLnRva2VuaXplcik6ZVtvLmxldmVsXT1bby50b2tlbml6ZXJdLG8uc3RhcnQmJigiYmxvY2si''@;'; put 'put ''PT09by5sZXZlbD9lLnN0YXJ0QmxvY2s/ZS5zdGFydEJsb2NrLnB1c2goby5zdGFydCk6ZS5zdGFydEJsb2NrPVtvLnN0YXJ0XToiaW5saW5lIj09PW8ubGV2ZWwmJihlLnN0YXJ0SW5saW5lP2Uuc3RhcnRJbmxpbmUucHVzaChvLnN0YXJ0KTplLnN0YXJ0SW5saW5lPVtvLnN0YXJ0XSkpfW8u''@;'; put 'put ''Y2hpbGRUb2tlbnMmJihlLmNoaWxkVG9rZW5zW28ubmFtZV09by5jaGlsZFRva2Vucyl9KSxDLmV4dGVuc2lvbnM9ZSksaC5yZW5kZXJlcil7dmFyIHUsZD10LmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgbDEodC5kZWZhdWx0cyk7Zm9yKHUgaW4gaC5yZW5kZXJlcikhZnVuY3Rpb24obyl7dmFy''@;'; put 'put ''IGY9ZFtvXTtkW29dPWZ1bmN0aW9uKCl7Zm9yKHZhciBFPWFyZ3VtZW50cy5sZW5ndGgsQj1uZXcgQXJyYXkoRSksbT0wO208RTttKyspQlttXT1hcmd1bWVudHNbbV07dmFyIF89aC5yZW5kZXJlcltvXS5hcHBseShkLEIpO3JldHVybiExPT09Xz9mLmFwcGx5KGQsQik6X319KHUpO0MucmVu''@;'; put 'put ''ZGVyZXI9ZH1pZihoLnRva2VuaXplcil7dmFyIEwseT10LmRlZmF1bHRzLnRva2VuaXplcnx8bmV3IEoodC5kZWZhdWx0cyk7Zm9yKEwgaW4gaC50b2tlbml6ZXIpIWZ1bmN0aW9uKG8pe3ZhciBmPXlbb107eVtvXT1mdW5jdGlvbigpe2Zvcih2YXIgRT1hcmd1bWVudHMubGVuZ3RoLEI9bmV3''@;'; put 'put ''IEFycmF5KEUpLG09MDttPEU7bSsrKUJbbV09YXJndW1lbnRzW21dO3ZhciBfPWgudG9rZW5pemVyW29dLmFwcGx5KHksQik7cmV0dXJuITE9PT1fP2YuYXBwbHkoeSxCKTpffX0oTCk7Qy50b2tlbml6ZXI9eX1pZihoLmhvb2tzKXt2YXIgSSxaPXQuZGVmYXVsdHMuaG9va3N8fG5ldyBYO2Zv''@;'; put 'put ''cihJIGluIGguaG9va3MpIWZ1bmN0aW9uKG8pe3ZhciBmPVpbb107WltvXT1YLnBhc3NUaHJvdWdoSG9va3MuaGFzKG8pP2Z1bmN0aW9uKEUpe3JldHVybiB0LmRlZmF1bHRzLmFzeW5jP1Byb21pc2UucmVzb2x2ZShoLmhvb2tzW29dLmNhbGwoWixFKSkudGhlbihmdW5jdGlvbihCKXtyZXR1''@;'; put 'put ''cm4gZi5jYWxsKFosQil9KTooRT1oLmhvb2tzW29dLmNhbGwoWixFKSxmLmNhbGwoWixFKSl9OmZ1bmN0aW9uKCl7Zm9yKHZhciBFPWFyZ3VtZW50cy5sZW5ndGgsQj1uZXcgQXJyYXkoRSksbT0wO208RTttKyspQlttXT1hcmd1bWVudHNbbV07dmFyIF89aC5ob29rc1tvXS5hcHBseShaLEIp''@;'; put 'put ''O3JldHVybiExPT09Xz9mLmFwcGx5KFosQik6X319KEkpO0MuaG9va3M9Wn1oLndhbGtUb2tlbnMmJihWPXQuZGVmYXVsdHMud2Fsa1Rva2VucyxDLndhbGtUb2tlbnM9ZnVuY3Rpb24obyl7dmFyIGY9W107cmV0dXJuIGYucHVzaChoLndhbGtUb2tlbnMuY2FsbCh0aGlzLG8pKSxWP2YuY29u''@;'; put 'put ''Y2F0KFYuY2FsbCh0aGlzLG8pKTpmfSksdC5kZWZhdWx0cz16KHt9LHQuZGVmYXVsdHMsQyl9KSx0aGlzfSxzLnNldE9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9eih7fSx0aGlzLmRlZmF1bHRzLHQpLHRoaXN9LG59KCk7dmFyIFc9bmV3IEsoYi5kZWZhdWx0cyk7''@;'; put 'put ''ZnVuY3Rpb24gRihuLHMsdCl7cmV0dXJuIFcucGFyc2UobixzLHQpfUYub3B0aW9ucz1GLnNldE9wdGlvbnM9ZnVuY3Rpb24obil7cmV0dXJuIFcuc2V0T3B0aW9ucyhuKSxrKEYuZGVmYXVsdHM9Vy5kZWZhdWx0cyksRn0sRi5nZXREZWZhdWx0cz12LEYuZGVmYXVsdHM9Yi5kZWZhdWx0cyxG''@;'; put 'put ''LnVzZT1mdW5jdGlvbigpe3JldHVybiBXLnVzZS5hcHBseShXLGFyZ3VtZW50cyksayhGLmRlZmF1bHRzPVcuZGVmYXVsdHMpLEZ9LEYud2Fsa1Rva2Vucz1mdW5jdGlvbihuLHMpe3JldHVybiBXLndhbGtUb2tlbnMobixzKX0sRi5wYXJzZUlubGluZT1XLnBhcnNlSW5saW5lLEYuUGFyc2Vy''@;'; put 'put ''PXEsRi5wYXJzZXI9cS5wYXJzZSxGLlJlbmRlcmVyPWwxLEYuVGV4dFJlbmRlcmVyPXIxLEYuTGV4ZXI9TixGLmxleGVyPU4ubGV4LEYuVG9rZW5pemVyPUosRi5TbHVnZ2VyPXMxLEYuSG9va3M9WDt2YXIgYjE9KEYucGFyc2U9Rikub3B0aW9ucyxTMT1GLnNldE9wdGlvbnMsdjE9Ri51c2Us''@;'; put 'put ''eTE9Ri53YWxrVG9rZW5zLG0xPUYucGFyc2VJbmxpbmUseDE9RixEMT1xLnBhcnNlLGYxPU4ubGV4O2IuSG9va3M9WCxiLkxleGVyPU4sYi5NYXJrZWQ9SyxiLlBhcnNlcj1xLGIuUmVuZGVyZXI9bDEsYi5TbHVnZ2VyPXMxLGIuVGV4dFJlbmRlcmVyPXIxLGIuVG9rZW5pemVyPUosYi5nZXRE''@;'; put 'put ''ZWZhdWx0cz12LGIubGV4ZXI9ZjEsYi5tYXJrZWQ9RixiLm9wdGlvbnM9YjEsYi5wYXJzZT14MSxiLnBhcnNlSW5saW5lPW0xLGIucGFyc2VyPUQxLGIuc2V0T3B0aW9ucz1TMSxiLnVzZT12MSxiLndhbGtUb2tlbnM9eTF9KTs='';'; put 'run;'; put '%sasjsout(JS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=styles.59dc11947b83143c-css; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''LyohCiAqIENvcHlyaWdodCAoYykgSEFORFNPTkNPREUgc3AuIHogby4gby4KICoKICogSEFORFNPTlRBQkxFIGlzIGEgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSEFORFNPTkNPREUgc3AuIHogby4gby4sIGEgUG9saXNoIGNvcnBvcmF0aW9uIGJhc2VkIGluCiAqIEdkeW5pYSwgUG9sYW5k''@;'; put 'put ''LCBhdCBBbGVqYSBad3ljaWVzdHdhIDk2LTk4LCByZWdpc3RlcmVkIGJ5IHRoZSBEaXN0cmljdCBDb3VydCBpbiBHZGFuc2sgdW5kZXIgbnVtYmVyCiAqIDUzODY1MSwgRVUgdGF4IElEIG51bWJlcjogUEw1ODYyMjk0MDAyLCBzaGFyZSBjYXBpdGFsOiBQTE4gNjIsODAwLjAwLgogKgogKiBU''@;'; put 'put ''aGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtCiAqIGxpY2Vuc2VkIC0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9z''@;'; put 'put ''ZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yCiAqIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC4KICoKICogSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1''@;'; put 'put ''cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZwogKiB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsCiAqIHlvdSBhZ3JlZSB0byBiZSBi''@;'; put 'put ''b3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJoYW5kc29udGFibGUtbm9uLWNvbW1lcmNpYWwtbGljZW5zZS5wZGYiIGZpbGUuCiAqCiAqIFlvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5j''@;'; put 'put ''bHVkZWQgaW4gYW4gYXBwbGljYWJsZQogKiBsaWNlbnNlIGFncmVlbWVudC4KICoKICogSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlCiAqIGNvbnNpZGVyZWQgY29t''@;'; put 'put ''cGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLgogKgogKiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIEhBTkRTT05DT0RFIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIgogKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg''@;'; put 'put ''QU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8KICogTEVHQUwgVEhFT1JZLCBTSEFMTCBIQU5EU09OQ09ERSBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwKICogSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENP''@;'; put 'put ''TlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTQogKiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLgogKgogKiBWZXJzaW9uOiAxMy4xLjAKICogUmVsZWFzZSBkYXRlOiAzMS8wOC8yMDIzIChidWlsdCBhdCAzMS8wOC8yMDIzIDA4''@;'; put 'put ''OjIzOjM5KQogKi8uaGFuZHNvbnRhYmxlIC50YWJsZSB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSB0ZHtib3JkZXItdG9wOm5vbmV9LmhhbmRzb250YWJsZSB0cntiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''dGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxl''@;'; put 'put ''IGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWR7Ym9yZGVyOjA7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlfS5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0Om5vbmV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAudGFibGUtYm9yZGVyZWQgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGU+dGJvZHk+dHI+dGQsLmhhbmRzb250YWJsZSAudGFi''@;'; put 'put ''bGU+dGJvZHk+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGh7bGluZS1oZWlnaHQ6MjFweDtw''@;'; put 'put ''YWRkaW5nOjB9LmNvbC1sZy0xLmhhbmRzb250YWJsZSwuY29sLWxnLTEwLmhhbmRzb250YWJsZSwuY29sLWxnLTExLmhhbmRzb250YWJsZSwuY29sLWxnLTEyLmhhbmRzb250YWJsZSwuY29sLWxnLTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMy5oYW5kc29udGFibGUsLmNvbC1sZy00LmhhbmRz''@;'; put 'put ''b250YWJsZSwuY29sLWxnLTUuaGFuZHNvbnRhYmxlLC5jb2wtbGctNi5oYW5kc29udGFibGUsLmNvbC1sZy03LmhhbmRzb250YWJsZSwuY29sLWxnLTguaGFuZHNvbnRhYmxlLC5jb2wtbGctOS5oYW5kc29udGFibGUsLmNvbC1tZC0xLmhhbmRzb250YWJsZSwuY29sLW1kLTEwLmhhbmRzb250''@;'; put 'put ''YWJsZSwuY29sLW1kLTExLmhhbmRzb250YWJsZSwuY29sLW1kLTEyLmhhbmRzb250YWJsZSwuY29sLW1kLTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMy5oYW5kc29udGFibGUsLmNvbC1tZC00LmhhbmRzb250YWJsZSwuY29sLW1kLTUuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNi5oYW5kc29udGFi''@;'; put 'put ''bGUsLmNvbC1tZC03LmhhbmRzb250YWJsZSwuY29sLW1kLTguaGFuZHNvbnRhYmxlLC5jb2wtbWQtOS5oYW5kc29udGFibGUgLmNvbC1zbS0xLmhhbmRzb250YWJsZSwuY29sLXNtLTEwLmhhbmRzb250YWJsZSwuY29sLXNtLTExLmhhbmRzb250YWJsZSwuY29sLXNtLTEyLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLXNtLTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMy5oYW5kc29udGFibGUsLmNvbC1zbS00LmhhbmRzb250YWJsZSwuY29sLXNtLTUuaGFuZHNvbnRhYmxlLC5jb2wtc20tNi5oYW5kc29udGFibGUsLmNvbC1zbS03LmhhbmRzb250YWJsZSwuY29sLXNtLTguaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtc20tOS5oYW5kc29udGFibGUgLmNvbC14cy0xLmhhbmRzb250YWJsZSwuY29sLXhzLTEwLmhhbmRzb250YWJsZSwuY29sLXhzLTExLmhhbmRzb250YWJsZSwuY29sLXhzLTEyLmhhbmRzb250YWJsZSwuY29sLXhzLTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMy5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC14cy00LmhhbmRzb250YWJsZSwuY29sLXhzLTUuaGFuZHNvbnRhYmxlLC5jb2wteHMtNi5oYW5kc29udGFibGUsLmNvbC14cy03LmhhbmRzb250YWJsZSwuY29sLXhzLTguaGFuZHNvbnRhYmxlLC5jb2wteHMtOS5oYW5kc29udGFibGV7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5oYW5kc29udGFibGUgLnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUoMm4pe2JhY2tncm91bmQtY29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxle3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmhpZGV7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLnJlbGF0aXZl''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLnd0SGlkZXJ7d2lkdGg6MH0uaGFuZHNvbnRhYmxlIC53dFNwcmVhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjA7aGVpZ2h0OmF1dG99LmhhbmRzb250YWJsZSB0YWJsZSwuaGFuZHNvbnRhYmxlIHRib2R5LC5oYW5kc29udGFi''@;'; put 'put ''bGUgdGhlYWQsLmhhbmRzb250YWJsZSB0ZCwuaGFuZHNvbnRhYmxlIHRoLC5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYSwuaGFuZHNvbnRhYmxlIGRpdntib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJv''@;'; put 'put ''eC1zaXppbmc6Y29udGVudC1ib3h9LmhhbmRzb250YWJsZSBpbnB1dCwuaGFuZHNvbnRhYmxlIHRleHRhcmVhe21pbi1oZWlnaHQ6aW5pdGlhbH0uaGFuZHNvbnRhYmxlIHRhYmxlLmh0Q29yZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXNwYWNpbmc6MDttYXJnaW46MDtib3Jk''@;'; put 'put ''ZXItd2lkdGg6MDt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MDtvdXRsaW5lLXdpZHRoOjA7Y3Vyc29yOmRlZmF1bHQ7bWF4LXdpZHRoOm5vbmU7bWF4LWhlaWdodDpub25lfS5oYW5kc29udGFibGUgY29sLC5oYW5kc29udGFibGUgY29sLnJvd0hlYWRlcnt3aWR0aDo1MHB4fS5oYW5kc29u''@;'; put 'put ''dGFibGUgdGgsLmhhbmRzb250YWJsZSB0ZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYztoZWlnaHQ6MjJweDtlbXB0eS1jZWxsczpzaG93O2xpbmUtaGVpZ2h0OjIx''@;'; put 'put ''cHg7cGFkZGluZzowIDRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7dmVydGljYWwtYWxpZ246dG9wO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lLXdpZHRoOjA7d2hpdGUtc3BhY2U6cHJlLXdyYXB9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRke2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItbGVmdDpub25lO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjYztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgdGg6bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLC5oYW5kc29udGFibGUgdGg6bnRoLWNoaWxkKDIpLC5oYW5kc29udGFibGUgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItbGVm''@;'; put 'put ''dDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoOmZpcnN0LWNoaWxkLFtkaXI9cnRsXS5oYW5kc29udGFibGUgdGg6bnRoLWNoaWxkKDIpLFtkaXI9cnRsXS5oYW5kc29udGFibGUgdGQ6Zmlyc3Qtb2YtdHlwZXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRfY2xvbmVfdG9wIHRoOm50aC1jaGlsZCgyKXtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3AgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1yaWdodC13aWR0aDowO2Jv''@;'; put 'put ''cmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItbGVmdDoxcHggc29saWQgI2NjY31bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmh0Um93SGVhZGVycyB0aGVhZCB0ciB0aDpudGgtY2hpbGQoMil7''@;'; put 'put ''Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGgsLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjfS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVt''@;'; put 'put ''cHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZSB0Ym9keSB0ciB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yaWdo''@;'; put 'put ''dC13aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3Jk''@;'; put 'put ''ZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5odF9jbG9uZV90b3ApIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRl''@;'; put 'put ''clRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSkgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHI6bGFzdC1jaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5u''@;'; put 'put ''ZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pIHRoZWFkIHRyLmxhc3RDaGlsZCB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJUb3ApOm5vdCguaW5uZXJCb3JkZXJCb3R0b20pfi5oYW5kc29udGFibGUgdGhlYWQgdHIubGFzdENoaWxkIHRoe2JvcmRlci1ib3R0b20t''@;'; put 'put ''d2lkdGg6MH0uaGFuZHNvbnRhYmxlIHRoe2JhY2tncm91bmQtY29sb3I6I2YwZjBmMDtjb2xvcjojMjIyO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjQwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmhhbmRzb250YWJsZSB0aGVhZCB0aHtwYWRkaW5nOjB9LmhhbmRzb250YWJsZSB0aC5h''@;'; put 'put ''Y3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjfS5oYW5kc29udGFibGUgdGhlYWQgdGggLnJlbGF0aXZle3BhZGRpbmc6MnB4IDRweH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjEuMX0uaGFuZHNvbnRhYmxlIC53dEJvcmRl''@;'; put 'put ''cntwb3NpdGlvbjphYnNvbHV0ZTtmb250LXNpemU6MH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5oaWRkZW57ZGlzcGxheTpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5jdXJyZW50e3otaW5kZXg6MTB9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuYXJlYXt6LWluZGV4''@;'; put 'put ''Ojh9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuZmlsbHt6LWluZGV4OjZ9LmhhbmRzb250YWJsZSAud3RCb3JkZXIuY29ybmVye2ZvbnQtc2l6ZTowO2N1cnNvcjpjcm9zc2hhaXJ9Lmh0X2Nsb25lX21hc3Rlcnt6LWluZGV4OjEwMH0uaHRfY2xvbmVfaW5saW5lX3N0YXJ0e3otaW5kZXg6MTIw''@;'; put 'put ''fS5odF9jbG9uZV9ib3R0b217ei1pbmRleDoxMzB9Lmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye3otaW5kZXg6MTUwfS5odF9jbG9uZV90b3B7ei1pbmRleDoxNjB9Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVye3otaW5kZXg6MTgwfS5oYW5kc29udGFibGUg''@;'; put 'put ''Y29sLmhpZGRlbnt3aWR0aDowIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0ZCwuaGFuZHNvbnRhYmxlIHRyLmhpZGRlbiB0aHtkaXNwbGF5Om5vbmV9Lmh0X21hc3RlciwuaHRfY2xvbmVfaW5saW5lX3N0YXJ0LC5odF9jbG9uZV90''@;'; put 'put ''b3AsLmh0X2Nsb25lX2JvdHRvbXtvdmVyZmxvdzpoaWRkZW59Lmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6YXV0b30uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGhlYWQsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRyIHRoLC5oYW5kc29udGFibGUgLmh0X2Nsb25lX2lubGluZV9z''@;'; put 'put ''dGFydCB0aGVhZHt2aXNpYmlsaXR5OmhpZGRlbn0uaHRfY2xvbmVfdG9wIC53dEhvbGRlciwuaHRfY2xvbmVfaW5saW5lX3N0YXJ0IC53dEhvbGRlciwuaHRfY2xvbmVfYm90dG9tIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZXt0b3VjaC1hY3Rpb246bWFuaXB1bGF0''@;'; put 'put ''aW9uO2ZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFNlZ29lIFVJLFJvYm90byxPeHlnZW4sVWJ1bnR1LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMzNzM3Mzd9LmhhbmRzb250''@;'; put 'put ''YWJsZSBhe2NvbG9yOiMxMDRhY2N9LmhhbmRzb250YWJsZS5odEF1dG9TaXple3Zpc2liaWxpdHk6aGlkZGVuO2xlZnQ6LTk5MDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOi05OTAwMHB4fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQtY29sb3I6I2ZmNGM0MiFpbXBv''@;'; put 'put ''cnRhbnR9LmhhbmRzb250YWJsZSB0ZC5odE5vV3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9LmhvdC1kaXNwbGF5LWxpY2Vuc2UtaW5mb3tmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1''@;'; put 'put ''ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3O3BhZGRpbmc6NXB4IDAgM3B4O3RleHQtYWxpZ246bGVmdH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIGF7Y29sb3I6IzEwNGFjYztmb250LXNpemU6MTBweH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5tYW51YWxDb2x1bW5SZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2N1cnNvcjpjb2wtcmVzaXplO3otaW5kZXg6MjEwO3dpZHRoOjVweDtoZWlnaHQ6MjVweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtjdXJzb3I6''@;'; put 'put ''cm93LXJlc2l6ZTt6LWluZGV4OjIxMDtoZWlnaHQ6NXB4O3dpZHRoOjUwcHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyLmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmhvdmVy''@;'; put 'put ''LC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzM0YTlkYn0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6dW5zZXQ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRi''@;'; put 'put ''O2Rpc3BsYXk6bm9uZTt3aWR0aDowO2JvcmRlci1yaWdodDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLWxlZnQ6bm9uZTttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZXtsZWZ0OnVuc2V0O2Jv''@;'; put 'put ''cmRlci1sZWZ0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItcmlnaHQ6bm9uZTttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojMzRhOWRiO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgIzc3NzttYXJnaW4tdG9wOjVweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGUuYWN0aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZS5hY3Rp''@;'; put 'put ''dmV7ZGlzcGxheTpibG9jazt6LWluZGV4OjIwOX0uaGFuZHNvbnRhYmxlIC5jb2x1bW5Tb3J0aW5ne3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5o''@;'; put 'put ''YW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEw''@;'; put 'put ''cHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0''@;'; put 'put ''OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7''@;'; put 'put ''YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJFbVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJF''@;'; put 'put ''RlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5naXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIu''@;'; put 'put ''Y29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NBUVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpL''@;'; put 'put ''R2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YWZ0ZXJ7Y29udGVudDoiKiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVs''@;'; put 'put ''YXRpdmU7cGFkZGluZy1yaWdodDoyMHB4fS5oYW5kc29udGFibGUgdGQuYXJlYSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMywuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNCwuaGFuZHNvbnRhYmxlIHRkLmFyZWEt''@;'; put 'put ''NSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNiwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtN3twb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRz''@;'; put 'put ''b250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO2luc2V0OjA7Ym90dG9tOi0xMDAlIFwJO2JhY2tncm91bmQ6IzAwNWVmZn1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IGFjdGl2ZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBub25lKXsuaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3JlLC5oYW5kc29u''@;'; put 'put ''dGFibGUgdGQuYXJlYS0xOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5h''@;'; put 'put ''cmVhLTY6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtib3R0b206LTEwMCV9fS5oYW5kc29udGFibGUgdGQuYXJlYTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtMjpi''@;'; put 'put ''ZWZvcmV7b3BhY2l0eTouMjd9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTM6YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGQuYXJlYS00OmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNTpiZWZvcmV7b3BhY2l0eTouNDd9LmhhbmRzb250YWJsZSB0ZC5h''@;'; put 'put ''cmVhLTY6YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUgdGQuYXJlYS03OmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQtY29sb3I6I2RjZGNk''@;'; put 'put ''Y30uaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19hY3RpdmVfaGlnaGxpZ2h0LC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2FjdGl2ZV9oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojOGViMGU3O2NvbG9yOiMwMDB9LmhhbmRzb250YWJsZUlucHV0e2JvcmRlcjpub25lO291dGxpbmUt''@;'; put 'put ''d2lkdGg6MDttYXJnaW46MDtwYWRkaW5nOjFweCA1cHggMDtmb250LWZhbWlseTppbmhlcml0O2xpbmUtaGVpZ2h0OjIxcHg7Zm9udC1zaXplOmluaGVyaXQ7Ym94LXNoYWRvdzowIDAgMCAycHggIzUyOTJmNyBpbnNldDtyZXNpemU6bm9uZTtkaXNwbGF5OmJsb2NrO2NvbG9yOiMwMDA7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlSW5wdXQ6Zm9jdXN7b3V0bGluZTpub25lfS5oYW5kc29udGFibGVJbnB1dEhvbGRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9Lmh0U2VsZWN0RWRpdG9yey13ZWJraXQtYXBwZWFyYW5jZTpt''@;'; put 'put ''ZW51bGlzdC1idXR0b24haW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmF1dG99Lmh0U2VsZWN0RWRpdG9yOmZvY3Vze291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlIC5odERpbW1lZHtjb2xvcjojNzc3fS5oYW5kc29udGFibGUgLmh0U3VibWVudXtwb3NpdGlvbjpyZWxhdGl2''@;'; put 'put ''ZX0uaGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IlwyNWI2Ijtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDtmb250LXNpemU6OXB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiIn1bZGlyPXJ0bF0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odFN1Ym1lbnUgOmJlZm9yZXtjb250ZW50OiJcMjVjMCI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjVweDtmb250LXNpemU6OXB4fS5oYW5kc29udGFibGUgLmh0TGVmdHt0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDZW50ZXJ7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXJ9LmhhbmRzb250YWJsZSAuaHRSaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5oYW5kc29udGFibGUgLmh0SnVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LmhhbmRzb250YWJsZSAuaHRUb3B7dmVydGljYWwtYWxpZ246dG9wfS5oYW5kc29udGFibGUgLmh0TWlkZGxle3Zl''@;'; put 'put ''cnRpY2FsLWFsaWduOm1pZGRsZX0uaGFuZHNvbnRhYmxlIC5odEJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmhhbmRzb250YWJsZSAuaHRQbGFjZWhvbGRlcntjb2xvcjojOTk5fS5oYW5kc29udGFibGUubGlzdGJveHttYXJnaW46MH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLmh0X21h''@;'; put 'put ''c3RlciB0YWJsZXtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JhY2tncm91bmQ6d2hpdGV9LmhhbmRzb250YWJsZS5saXN0Ym94IHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6''@;'; put 'put ''bGFzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6Zmlyc3QtY2hpbGQgdGQsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZS5saXN0Ym94IHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0ZHt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGQuaHREaW1tZWR7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6aW5oZXJpdDtmb250LXN0eWxlOmluaGVyaXR9LmhhbmRzb250YWJsZS5saXN0Ym94IC53dEJvcmRlcnt2aXNpYmlsaXR5''@;'; put 'put ''OmhpZGRlbn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHIgdGQuY3VycmVudCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdHI6aG92ZXIgdGR7YmFja2dyb3VuZDojZWVlfS5odF9lZGl0b3JfaGlkZGVue3otaW5kZXg6LTF9Lmh0X2VkaXRvcl92aXNpYmxle3otaW5kZXg6MjAwfS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGQuaHRTZWFyY2hSZXN1bHR7YmFja2dyb3VuZDojZmNlZGQ5O2NvbG9yOiM1ODM3MDd9LmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3J7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtsZWZ0OnVuc2V0O3JpZ2h0OjVweDti''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkICNBNkE2QTY7bGluZS1oZWlnaHQ6OHB4O2NvbG9yOiMyMjI7Ym9yZGVyLXJhZGl1czoxMHB4O2ZvbnQtc2l6ZToxMHB4O3dpZHRoOjEwcHg7aGVpZ2h0OjEwcHg7Y3Vyc29yOnBvaW50ZXI7Ym94LXNoYWRvdzowIDAgMCA2cHggI2VlZTtiYWNrZ3JvdW5kOiNlZWU7''@;'; put 'put ''dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY29sbGFwc2libGVJbmRpY2F0b3J7cmlnaHQ6dW5zZXQ7bGVmdDo1cHh9LmhhbmRzb250YWJsZS5tb2JpbGUsLmhhbmRzb250YWJsZS5tb2JpbGUgLnd0SG9sZGVyey13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13''@;'; put 'put ''ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5oYW5kc29udGFibGUubW9iaWxlIC5oYW5kc29udGFibGVJbnB1dDpmb2N1c3tib3gt''@;'; put 'put ''c2hhZG93OjAgMCAwIDJweCAjNTI5MmY3IGluc2V0Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lfS5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZSwuaGFuZHNvbnRhYmxlIC50b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5k''@;'; put 'put ''bGUsLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWF7bGVmdDotMTAwMDBweDtyaWdodDp1bnNldDt0b3A6LTEwMDAwcHg7ei1pbmRleDo5OTk5fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC50b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWF7cmlnaHQ6LTEwMDAwcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRh''@;'; put 'put ''YmxlLmhpZGUtdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktaGlkZSAuM3M7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9LmhhbmRzb250YWJsZS5zaG93LXR3ZWVue2FuaW1hdGlvbjpvcGFjaXR5LXNob3cgLjNzO2FuaW1h''@;'; put 'put ''dGlvbi1maWxsLW1vZGU6Zm9yd2FyZHM7LXdlYmtpdC1hbmltYXRpb24tZmlsbC1tb2RlOmZvcndhcmRzfS8qIQogKiBQaWthZGF5CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1z''@;'; put 'put ''aW5nbGV7ei1pbmRleDo5OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJp''@;'; put 'put ''YWwsc2Fucy1zZXJpZn0ucGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRhYmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3Vu''@;'; put 'put ''ZHtwb3NpdGlvbjphYnNvbHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowO3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBp''@;'; put 'put ''a2EtdGl0bGUgc2VsZWN0e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7''@;'; put 'put ''b3V0bGluZTpub25lO2JvcmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNl''@;'; put 'put ''bnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1wcmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1p''@;'; put 'put ''bWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVyQUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtL''@;'; put 'put ''Z0hpWHFRcUFlSmVwQm8vejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwgLnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FB''@;'; put 'put ''QUJRQUFBQWVDQVlBQUFBc0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JKNEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0p''@;'; put 'put ''fS5waWthLXByZXYuaXMtZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5waWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3Bh''@;'; put 'put ''Y2luZzowO2JvcmRlcjowfS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTclO3BhZGRpbmc6MH0ucGlrYS10YWJsZSB0aHtjb2xvcjojOTk5O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI1cHg7Zm9udC13ZWlnaHQ6NzAwO3RleHQtYWxpZ246Y2Vu''@;'; put 'put ''dGVyfS5waWthLWJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7Ym9yZGVyOjA7bWFyZ2luOjA7d2lkdGg6MTAwJTtwYWRkaW5nOjVweDtjb2xvcjojNjY2O2ZvbnQt''@;'; put 'put ''c2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE1cHg7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9''@;'; put 'put ''LmlzLXNlbGVjdGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kOiMzM2FhZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWth''@;'; put 'put ''LWJ1dHRvbntiYWNrZ3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNENUU5Rjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9y''@;'; put 'put ''OiNmZmY7YmFja2dyb3VuZDojNkNCMzFEO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojMzNhYWZmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBp''@;'; put 'put ''a2EtYnV0dG9ue3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRzaWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRz''@;'; put 'put ''Om5vbmU7Y3Vyc29yOmRlZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJy''@;'; put 'put ''e2JvcmRlci1ib3R0b206bm9uZTtjdXJzb3I6aGVscH0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxMHB4O2NvbG9yOiNlZWU7Y3Vyc29yOmRlZmF1bHQ7d2lkdGg6MTZweDt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSB0ZCAuaHRBdXRvY29tcGxldGVBcnJvdzpob3Zlcntjb2xvcjojNzc3fS5oYW5kc29udGFibGUgdGQuYXJlYSAuaHRBdXRvY29tcGxldGVBcnJvd3tjb2xvcjojZDNkM2QzfS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0Lm5vVmFsdWV7b3BhY2l0eTouNX0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbHtmb250LXNpemU6aW5oZXJpdDt2ZXJ0''@;'; put 'put ''aWNhbC1hbGlnbjptaWRkbGU7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVyTGFiZWwuZnVsbFdpZHRoe3dpZHRoOjEwMCV9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbHtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItdG9wOjZweCBzb2xpZCBibGFja31b''@;'; put 'put ''ZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odENvbW1lbnRDZWxsOmFmdGVye2xlZnQ6MDtyaWdodDp1bnNldDtib3JkZXItcmlnaHQ6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudHN7ZGlzcGxheTpub25lO3otaW5k''@;'; put 'put ''ZXg6MTA1OTtwb3NpdGlvbjphYnNvbHV0ZX0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym94LXNoYWRvdzojMDAwMDAwMWUgMCAxcHggM3B4LCMwMDAwMDAzZCAwIDFweCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlcjpub25lO2JvcmRlci1sZWZ0OjNw''@;'; put 'put ''eCBzb2xpZCAjY2NjO2JvcmRlci1yaWdodDpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjt3aWR0aDoyMTVweDtoZWlnaHQ6OTBweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjVweDtvdXRsaW5lOjBweCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9W2Rpcj1ydGxdLmh0Q29t''@;'; put 'put ''bWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhe2JvcmRlci1yaWdodDozcHggc29saWQgI2NjYztib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3gtc2hhZG93OiMwMDAwMDAxZSAwIDFweCAzcHgsIzAwMDAwMDNk''@;'; put 'put ''IDAgMXB4IDJweCxpbnNldCAwIDAgMCAxcHggIzUyOTJmNztib3JkZXItbGVmdDozcHggc29saWQgIzUyOTJmNztib3JkZXItcmlnaHQ6bm9uZX1bZGlyPXJ0bF0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWE6Zm9jdXN7Ym9yZGVyLXJpZ2h0OjNweCBzb2xpZCAjNTI5''@;'; put 'put ''MmY3O2JvcmRlci1sZWZ0Om5vbmV9LyohCiAqIEhhbmRzb250YWJsZSBDb250ZXh0TWVudQogKi8uaHRDb250ZXh0TWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTA2MH0uaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfdG9wLC5o''@;'; put 'put ''dENvbnRleHRNZW51IC5odF9jbG9uZV9ib3R0b20sLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29y''@;'; put 'put ''bmVye2Rpc3BsYXk6bm9uZX0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZXtib3JkZXItY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDoxcHg7Ym9yZGVyLWJvdHRvbS13aWR0aDoycHg7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4O2JvcmRl''@;'; put 'put ''ci1yaWdodC13aWR0aDoycHh9W2Rpcj1ydGxdLmh0Q29udGV4dE1lbnUgLmh0X21hc3RlciB0YWJsZS5odENvcmV7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDtib3JkZXItbGVmdC13aWR0aDoycHh9Lmh0Q29udGV4dE1lbnUgLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5odENvbnRleHRN''@;'; put 'put ''ZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3Jk''@;'; put 'put ''ZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudCwuaHRDb250ZXh0TWVu''@;'; put 'put ''dSB0YWJsZSB0Ym9keSB0ciB0ZC56ZXJvY2xpcGJvYXJkLWlzLWhvdmVye2JhY2tncm91bmQ6I2YzZjNmM30uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVm''@;'; put 'put ''YXVsdH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVs''@;'; put 'put ''dH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6NnB4fVtkaXI9cnRsXS5odENvbnRleHRNZW51IHRhYmxl''@;'; put 'put ''IHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjZweH0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1b''@;'; put 'put ''ZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDowfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn10ZXh0YXJlYS5IYW5kc29udGFibGVDb3B5UGFzdGV7cG9zaXRp''@;'; put 'put ''b246Zml4ZWQhaW1wb3J0YW50O3RvcDowIWltcG9ydGFudDtyaWdodDoxMDAlIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW47b3BhY2l0eTowO291dGxpbmU6MCBub25lIWltcG9ydGFudH0vKiEKICogSGFuZHNvbnRhYmxlIERyb3Bkb3duTWVudQogKi8uaGFuZHNvbnRhYmxlIC5jaGFuZ2VU''@;'; put 'put ''eXBle2JhY2tncm91bmQ6I2VlZTtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNiYmI7Y29sb3I6I2JiYjtmb250LXNpemU6OXB4O2xpbmUtaGVpZ2h0OjlweDtwYWRkaW5nOjJweDttYXJnaW46M3B4IDFweCAwIDVweDtmbG9hdDpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5jaGFuZ2VUeXBle2Zsb2F0OmxlZnR9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9w''@;'; put 'put ''ZG93bk1lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxp''@;'; put 'put ''bmVfc3RhcnQsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xv''@;'; put 'put ''cjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdo''@;'; put 'put ''dC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vy''@;'; put 'put ''c29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0''@;'; put 'put ''RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJlbnQsLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkLnplcm9jbGlwYm9hcmQtaXMtaG92ZXJ7YmFja2dyb3VuZDojZTllOWU5fS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MDtjdXJzb3I6ZGVmYXVsdH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5fS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudTpub3QoLmh0R2hvc3RUYWJsZSkgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odERyb3Bk''@;'; put 'put ''b3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDox''@;'; put 'put ''MHB4fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHg7cmlnaHQ6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0''@;'; put 'put ''ZWR7cmlnaHQ6NHB4O2xlZnQ6MH0uaHREcm9wZG93bk1lbnUgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3c6aGlkZGVufS8qIQogKiBIYW5kc29udGFibGUgRmlsdGVycwogKi8uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnU6bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNzB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV90b3AsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9ib3R0b20sLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0RmlsdGVy''@;'; put 'put ''c0NvbmRpdGlvbnNNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUuaHRDb3Jle2Jv''@;'; put 'put ''cmRlcjoxcHggc29saWQgI2JiYjtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItcmlnaHQtd2lkdGg6MnB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRke2Jh''@;'; put 'put ''Y2tncm91bmQ6d2hpdGU7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpm''@;'; put 'put ''aXJzdC1jaGlsZHtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjB9W2Rpcj1ydGxdLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmN1cnJl''@;'; put 'put ''bnQsLmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLnplcm9jbGlwYm9hcmQtaXMtaG92ZXJ7YmFja2dyb3VuZDojZTllOWU5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odFNlcGFyYXRvcntib3JkZXItdG9wOjFweCBzb2xpZCAj''@;'; put 'put ''ZTZlNmU2O2hlaWdodDowO3BhZGRpbmc6MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''Zjtjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tbGVmdDoxMHB4O21hcmdpbi1yaWdodDoxMHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBk''@;'; put 'put ''aXYgc3Bhbi5zZWxlY3RlZHttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo0cHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC5odF9tYXN0ZXIgLnd0SG9sZGVye292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odE1lbnVGaWx0ZXJpbmd7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bToxcHggZG90dGVkICNjY2M7aGVpZ2h0OjEzNXB4O292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odF9tYXN0ZXIgdGFibGUgdGQuaHRDdXN0b21NZW51UmVuZGVyZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2N1cnNvcjphdXRvfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVM''@;'; put 'put ''YWJlbHtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUFjdGlvbkJhcnt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLXRvcDoxMHB4O3BhZGRpbmctYm90dG9tOjNweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uLmJvcmRlcntib3JkZXIt''@;'; put 'put ''Ym90dG9tOjFweCBkb3R0ZWQgI2NjYyFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0e3BhZGRpbmc6MCAwIDVweH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWV7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1w''@;'; put 'put ''b3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoe3BhZGRpbmc6MH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51Q29uZGl0aW9uIC5odFVJSW5wdXQgaW5wdXQsLmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVl''@;'; put 'put ''IC5odFVJTXVsdGlwbGVTZWxlY3RTZWFyY2ggaW5wdXR7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6Ljc1ZW07cGFkZGluZzo0cHg7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCV9Lmh0VUlNdWx0aXBsZVNlbGVjdCAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdy15''@;'; put 'put ''OnNjcm9sbH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNBY3RpdmUgLmNoYW5nZVR5cGV7Ym9yZGVyOjFweCBzb2xpZCAjNTA5MjcyO2NvbG9yOiMxODgwNGU7YmFja2dyb3VuZC1jb2xvcjojZDJlMGQ5fS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7bWFyZ2luLWxlZnQ6MDttYXJnaW4t''@;'; put 'put ''cmlnaHQ6MTBweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxse21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjEwcHh9LmhhbmRzb250YWJsZSAuaHRVSUNsZWFyQWxsLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRVSUNsZWFyQWxsIGEsLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbCBhe2ZvbnQtc2l6ZTouNzVlbX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29udHJvbHN7dGV4dC1hbGlnbjpyaWdodH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0aW9uQ29u''@;'; put 'put ''dHJvbHN7dGV4dC1hbGlnbjpsZWZ0fS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e21hcmdpbjowIDVweCAwIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDoxZW19W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXR7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6NXB4O21hcmdpbi1yaWdodDowfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dHtwYWRkaW5nOjNweCAwIDdweDtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQgaW5wdXR7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBz''@;'; put 'put ''b2xpZCAjZDJkMWQxfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dCBpbnB1dDpmb2N1c3tvdXRsaW5lOjB9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0SWNvbntwb3NpdGlvbjphYnNvbHV0ZX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzAwMDtjdXJzb3I6cG9pbnRlcjtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTouNzVlbTtmb250LXdlaWdodDo3MDA7aGVpZ2h0OjE5''@;'; put 'put ''cHg7bWluLXdpZHRoOjY0cHh9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b24gaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNiOWI5Yjl9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDoxMHB4fVtkaXI9cnRs''@;'; put 'put ''XS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0t7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MTBweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbk9LIGlucHV0e2JhY2tncm91bmQtY29sb3I6IzBmOWQ1ODtib3JkZXItY29sb3I6IzE4ODA0ZTtjb2xv''@;'; put 'put ''cjojZmZmfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMxYTZmNDZ9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdHtjdXJzb3I6cG9pbnRlcjttYXJnaW4tYm90dG9tOjdweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odFVJU2VsZWN0Q2FwdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAyMHB4IDNweCAx''@;'; put 'put ''MHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyOjFweCBzb2xpZCAjYjliOWI5fS5oYW5kc29udGFibGUg''@;'; put 'put ''Lmh0VUlTZWxlY3REcm9wZG93bjphZnRlcntjb250ZW50OiJcMjViMiI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDowfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3REcm9wZG93bjpiZWZvcmV7Y29udGVudDoiXDI1YmMiO2ZvbnQtc2l6ZTo3cHg7cG9z''@;'; put 'put ''aXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6OHB4fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxlIC5odENvcmV7Ym9yZGVyOm5vbmV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZSB0ZDpob3Zl''@;'; put 'put ''cntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlucHV0e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtwYWRkaW5nOjNweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NXB4O2hlaWdodDoxMDAlfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3ttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo1cHh9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjB9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi41ZXh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0Oi41ZXh9Lmhh''@;'; put 'put ''bmRzb250YWJsZSAuaHRVSVJhZGlvIGxhYmVse3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51T3BlcmF0b3Jze3BhZGRpbmctYm90dG9tOjVweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlciwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtjb2xvcjojYmJiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7Zm9udC1zaXplOjVwdDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OjFweDtjb250ZW50OiJcMjVjMCJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7''@;'; put 'put ''cmlnaHQ6aW5pdGlhbDtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9LmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle3JpZ2h0OjFw''@;'; put 'put ''eDtsZWZ0OmluaXRpYWw7Y29udGVudDoiXDI1YzAifS8qIQogKiBIYW5kc29udGFibGUgSGlkZGVuUm93cwogKi8uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb2xvcjojYmJiO2ZvbnQtc2l6ZTo2''@;'; put 'put ''cHQ7bGluZS1oZWlnaHQ6NnB0O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4fS5oYW5kc29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93LC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3d7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IlwyNWIyIjtib3R0b206MnB4fS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29udGVudDoiXDI1YmMiO3RvcDoycHh9LmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmJlZm9yZUhpZGRlblJvdy5odF9faGlnaGxpZ2h0''@;'; put 'put ''OmJlZm9yZSwuaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGguYWZ0ZXJIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDphZnRlcntjb2xvcjojZWVlfS5oYW5kc29udGFibGUgdGQuYWZ0ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93LC5oYW5kc29udGFibGUgdGguYWZ0''@;'; put 'put ''ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93e2JvcmRlci10b3A6MXB4IHNvbGlkICNDQ0N9Lmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKSwuaHRSb3dIZWFkZXJz''@;'; put 'put ''IC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfaW5saW5lX3N0YXJ0IHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MCBub25lfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUuYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIHRoZWFkIHRoLmh0''@;'; put 'put ''X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJ9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMsLmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgdGhlYWQgdGguaHRfX2hpZ2hsaWdo''@;'; put 'put ''dHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJsZS5odF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgLm1hbnVhbENvbHVtblJlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUs''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTtkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZXtiYWNrZ3JvdW5kOiM3NTc1NzU7d2lkdGg6MnB4''@;'; put 'put ''O3RvcDowO21hcmdpbi1pbmxpbmUtc3RhcnQ6LTFweDttYXJnaW4taW5saW5lLWVuZDowO3otaW5kZXg6MjA1fS5oYW5kc29udGFibGUgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHR7YmFja2dyb3VuZDojMzQzNDM0O2JhY2tncm91bmQ6cmdiYSg1Miw1Miw1MiwuMjUpO2Rpc3Bs''@;'; put 'put ''YXk6bm9uZTt6LWluZGV4OjIwNTtwb2ludGVyLWV2ZW50czpub25lfS5oYW5kc29udGFibGUub24tbW92aW5nLS1jb2x1bW5zLnNob3ctdWkgLmh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLWNvbHVtbnMgLmh0X19tYW51YWxDb2x1bW5N''@;'; put 'put ''b3ZlLS1iYWNrbGlnaHR7ZGlzcGxheTpibG9ja30uaGFuZHNvbnRhYmxlIC53dEhpZGVye3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01vdmUuYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29y''@;'; put 'put ''OmdyYWJ9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MsLmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgdGJvZHkgdGguaHRfX2hpZ2hsaWdodHtjdXJzb3I6bW92ZTtjdXJzb3I6Z3JhYmJpbmd9LmhhbmRzb250YWJs''@;'; put 'put ''ZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgLm1hbnVhbFJvd1Jlc2l6ZXJ7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUsLmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtwb3NpdGlvbjph''@;'; put 'put ''YnNvbHV0ZTt3aWR0aDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5le2JhY2tncm91bmQ6Izc1NzU3NTtoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tdG9wOi0xcHg7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVh''@;'; put 'put ''bFJvd01vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDpyZ2JhKDUyLDUyLDUyLC4yNSk7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1tb3ZpbmctLXJvd3Muc2hvdy11aSAuaHRfX21hbnVhbFJv''@;'; put 'put ''d01vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cyAuaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdOm5vdChbY2xhc3Mq''@;'; put 'put ''PWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsXSk6YmVmb3Jle29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtbXVsdGlwbGVdOmJlZm9yZXtvcGFjaXR5Oi4x''@;'; put 'put ''fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0wXTpiZWZvcmV7b3BhY2l0eTouMX0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFz''@;'; put 'put ''cyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMV06YmVmb3Jle29wYWNpdHk6LjJ9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTJdOmJl''@;'; put 'put ''Zm9yZXtvcGFjaXR5Oi4yN30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtM106YmVmb3Jle29wYWNpdHk6LjM1fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1b''@;'; put 'put ''Y2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC00XTpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0''@;'; put 'put ''ZWRNZXJnZWRDZWxsLTVdOmJlZm9yZXtvcGFjaXR5Oi40N30uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNl06YmVmb3Jle29wYWNpdHk6LjU0fS5oYW5kc29udGFibGUg''@;'; put 'put ''dGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC03XTpiZWZvcmV7b3BhY2l0eTouNTh9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RvcDo1MCU7bWFyZ2lu''@;'; put 'put ''LXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0xNXB4O2xlZnQ6dW5zZXQ7cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OnVuc2V0O2ZvbnQtc2l6ZTo4cHg7aGVpZ2h0OjhweDtsaW5lLWhlaWdodDoxLjE7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZX1bZGlyPXJ0bF0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6YWZ0ZXJ7bGVmdDotMTVweDtyaWdodDp1bnNldDtwYWRkaW5nLXJpZ2h0OjVweDtwYWRkaW5nLWxlZnQ6dW5zZXR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nOmFmdGVye3RleHQtZGVj''@;'; put 'put ''b3JhdGlvbjpub25lfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzc149c29ydC1dOmFmdGVyLC5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZ1tjbGFzcyo9IiBzb3J0LSJdOmFmdGVye2NvbnRlbnQ6IisifS5oYW5kc29udGFi''@;'; put 'put ''bGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTE6YWZ0ZXJ7Y29udGVudDoiMSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtMjphZnRlcntjb250ZW50OiIyIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRp''@;'; put 'put ''bmcuc29ydC0zOmFmdGVye2NvbnRlbnQ6IjMifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTQ6YWZ0ZXJ7Y29udGVudDoiNCJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNTphZnRlcntjb250ZW50OiI1In0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC02OmFmdGVye2NvbnRlbnQ6IjYifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTc6YWZ0ZXJ7Y29udGVudDoiNyJ9Lmh0R2hvc3RUYWJsZSB0aCBkaXYgYnV0dG9uLmNo''@;'; put 'put ''YW5nZVR5cGUrc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpub3QoLmluZGljYXRvckRpc2FibGVkKXtwYWRkaW5nLXJpZ2h0OjVweH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmhpZGRlbkhlYWRlcjpub3QoOmZpcnN0LW9mLXR5cGUpe2Rpc3BsYXk6bm9uZX1AY2hhcnNldCAiVVRGLTgi''@;'; put 'put ''Oy5oYW5kc29udGFibGUgdGguaHRfbmVzdGluZ0xldmVsc3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZy1sZWZ0OjdweH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpyaWdodDtwYWRkaW5nLXJpZ2h0OjdweH0uaGFuZHNvbnRhYmxlIHRoIGRp''@;'; put 'put ''di5odF9uZXN0aW5nTGV2ZWxze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTFweDtyaWdodDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3JpZ2h0OjExcHg7bGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlLmlu''@;'; put 'put ''bmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHN7cmlnaHQ6MTBweDtsZWZ0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29udGFibGUu''@;'; put 'put ''aW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0xldmVscyxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tsZWZ0OjEwcHg7cmlnaHQ6dW5zZXR9LmhhbmRzb250YWJs''@;'; put 'put ''ZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbHtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsX2VtcHR5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwcHg7aGVpZ2h0OjFweDtmbG9hdDpsZWZ0fVtkaXI9cnRsXS5oYW5kc29udGFi''@;'; put 'put ''bGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWxfZW1wdHl7ZmxvYXQ6cmlnaHR9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbDphZnRlcntjb250ZW50OiJcMjUxMCI7Zm9udC1zaXplOjlweDtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtib3R0b206''@;'; put 'put ''M3B4fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTJweDtsZWZ0OnVuc2V0O2N1cnNvcjpwb2ludGVyfVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257''@;'; put 'put ''bGVmdDotMnB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24uaHRfbmVzdGluZ0V4cGFuZDphZnRlcntjb250ZW50OiIrIn0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdDb2xsYXBzZTphZnRlcntjb250ZW50''@;'; put 'put ''OiItIn0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257cmlnaHQ6MDtsZWZ0OnVuc2V0fVtkaXI9''@;'; put 'put ''cnRsXS5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydCB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbixbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnR+LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0J1dHRvbntsZWZ0OjA7cmlnaHQ6dW5z''@;'; put 'put ''ZXR9OnJvb3R7LS1jZHMtZ2xvYmFsLWJhc2U6MjB9aHRtbHtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuMTU7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWls''@;'; put 'put ''cyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLG1haW4sbWVudSxuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHByb2dyZXNzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVp''@;'; put 'put ''Z2h0OjB9cHJvZ3Jlc3N7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9dGVtcGxhdGUsW2hpZGRlbl17ZGlzcGxheTpub25lfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZGVjb3JhdGlvbi1za2lwOm9iamVjdHN9YTphY3RpdmUsYTpob3ZlcntvdXRsaW5lLXdp''@;'; put 'put ''ZHRoOjB9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbTpub25lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH1iLHN0cm9uZ3tmb250LXdlaWdodDppbmhlcml0''@;'; put 'put ''fWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGRlcn1kZm57Zm9udC1zdHlsZTppdGFsaWN9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46LjY3ZW0gMH1tYXJre2JhY2tncm91bmQtY29sb3I6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xp''@;'; put 'put ''bmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vie2JvdHRvbTotLjI1ZW19c3Vwe3RvcDotLjVlbX1pbWd7Ym9yZGVyLXN0eWxlOm5vbmV9c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWNvZGUsa2JkLHByZSxzYW1we2ZvbnQtZmFt''@;'; put 'put ''aWx5Om1vbm9zcGFjZTtmb250LXNpemU6MWVtfWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MDtvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Zm9udDppbmhlcml0O21hcmdpbjowfXRl''@;'; put 'put ''eHRhcmVhe2xpbmUtaGVpZ2h0OjEuMTV9b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfWJ1dHRvbixpbnB1dHtvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24saHRtbCBbdHlwZT1idXR0b25dLFt0eXBlPXJlc2V0XSxbdHlwZT1zdWJtaXRd''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPWJ1dHRvbl06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9cmVzZXRdOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPXN1Ym1pdF06Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7''@;'; put 'put ''cGFkZGluZzowfWJ1dHRvbjotbW96LWZvY3VzcmluZyxbdHlwZT1idXR0b25dOi1tb3otZm9jdXNyaW5nLFt0eXBlPXJlc2V0XTotbW96LWZvY3VzcmluZyxbdHlwZT1zdWJtaXRdOi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fWZpZWxkc2V0e2JvcmRlcjox''@;'; put 'put ''cHggc29saWQgc2lsdmVyO21hcmdpbjowIDJweDtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbX1sZWdlbmR7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7ZGlzcGxheTp0YWJsZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm9ybWFsfXRleHRhcmVh''@;'; put 'put ''e292ZXJmbG93OmF1dG99W3R5cGU9Y2hlY2tib3hdLFt0eXBlPXJhZGlvXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowfVt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sW3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6''@;'; put 'put ''YXV0b31bdHlwZT1zZWFyY2hdey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH1bdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06cm9vdHstLWNsci1jb2xvci1uZXV0cmFsLTA6d2hpdGU7LS1jbHItY29sb3ItbmV1dHJhbC01MDojZmFmYWZhOy0tY2xyLWNvbG9yLW5ldXRyYWwt''@;'; put 'put ''MTAwOiNmMmYyZjI7LS1jbHItY29sb3ItbmV1dHJhbC0yMDA6I2U4ZThlODstLWNsci1jb2xvci1uZXV0cmFsLTMwMDojZGVkZWRlOy0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwOiNjY2NjY2M7LS1jbHItY29sb3ItbmV1dHJhbC01MDA6I2IzYjNiMzstLWNsci1jb2xvci1uZXV0cmFsLTYwMDoj''@;'; put 'put ''OGM4YzhjOy0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwOiM2NjY2NjY7LS1jbHItY29sb3ItbmV1dHJhbC04MDA6IzQ1NDU0NTstLWNsci1jb2xvci1uZXV0cmFsLTkwMDojMzMzMzMzOy0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTA6YmxhY2s7''@;'; put 'put ''LS1jbHItY29sb3Itb24tbmV1dHJhbC01MDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTMwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTQwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1uZXV0cmFsLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1uZXV0cmFsLTYwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTkwMDp3aGl0ZTst''@;'; put 'put ''LWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDA6d2hpdGU7LS1jbHItY29sb3ItYWN0aW9uLTUwOiNlM2Y1ZmM7LS1jbHItY29sb3ItYWN0aW9uLTEwMDojYzhlYWY5Oy0tY2xyLWNvbG9yLWFjdGlvbi0yMDA6IzliZDhmMzstLWNsci1jb2xvci1hY3Rpb24tMzAwOiM3OWM2ZTY7LS1jbHItY29s''@;'; put 'put ''b3ItYWN0aW9uLTQwMDojNDlhZWRhOy0tY2xyLWNvbG9yLWFjdGlvbi01MDA6IzE3OWJkMzstLWNsci1jb2xvci1hY3Rpb24tNjAwOiMwMDcyYTM7LS1jbHItY29sb3ItYWN0aW9uLTcwMDojMDA2NDhmOy0tY2xyLWNvbG9yLWFjdGlvbi04MDA6IzAwNTY3YTstLWNsci1jb2xvci1hY3Rpb24t''@;'; put 'put ''OTAwOiMwMDRiNmI7LS1jbHItY29sb3ItYWN0aW9uLTEwMDA6IzAwMzY0ZDstLWNsci1jb2xvci1vbi1hY3Rpb24tNTA6YmxhY2s7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDpibGFjazstLWNsci1jb2xvci1vbi1hY3Rpb24tMjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi0zMDA6''@;'; put 'put ''YmxhY2s7LS1jbHItY29sb3Itb24tYWN0aW9uLTQwMDpibGFjazstLWNsci1jb2xvci1vbi1hY3Rpb24tNTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi02MDA6d2hpdGU7LS1jbHItY29sb3Itb24tYWN0aW9uLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1hY3Rpb24tODAwOndoaXRl''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW9uLWFjdGlvbi05MDA6d2hpdGU7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDA6d2hpdGU7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDojZjdlNmZmOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwOiNlNmNhZjE7LS1jbHItY29sb3Itc2Vjb25k''@;'; put 'put ''YXJ5LWFjdGlvbi0yMDA6I2QyYWFlNDstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTMwMDojYzA5MGQ1Oy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNDAwOiNhZjczYzk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDA6IzllNTdiYzstLWNsci1jb2xvci1zZWNvbmRh''@;'; put 'put ''cnktYWN0aW9uLTYwMDojOGEzOWFjOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNzAwOiM3ODFkOWY7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi04MDA6IzY4MDA5NDstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTkwMDojNGYwMDcwOy0tY2xyLWNvbG9yLXNlY29uZGFy''@;'; put 'put ''eS1hY3Rpb24tMTAwMDojMzIwMDQ3Oy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNTA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0yMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vj''@;'; put 'put ''b25kYXJ5LWFjdGlvbi0zMDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi00MDA6YmxhY2s7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi01MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi02MDA6d2hpdGU7LS1jbHItY29sb3Itb24t''@;'; put 'put ''c2Vjb25kYXJ5LWFjdGlvbi03MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi04MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi05MDA6d2hpdGU7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0xMDAwOndoaXRlOy0tY2xyLWNvbG9y''@;'; put 'put ''LWRhbmdlci01MDojZmZmMmYwOy0tY2xyLWNvbG9yLWRhbmdlci0xMDA6I2ZlZGRkNzstLWNsci1jb2xvci1kYW5nZXItMjAwOiNmY2M1YmI7LS1jbHItY29sb3ItZGFuZ2VyLTMwMDojZjU5ZThmOy0tY2xyLWNvbG9yLWRhbmdlci00MDA6I2YyNzk2MzstLWNsci1jb2xvci1kYW5nZXItNTAw''@;'; put 'put ''OiNmMzVlNDQ7LS1jbHItY29sb3ItZGFuZ2VyLTYwMDojZjUyZDBhOy0tY2xyLWNvbG9yLWRhbmdlci03MDA6I2RiMjEwMDstLWNsci1jb2xvci1kYW5nZXItODAwOiNjMjFkMDA7LS1jbHItY29sb3ItZGFuZ2VyLTkwMDojOTkxNzAwOy0tY2xyLWNvbG9yLWRhbmdlci0xMDAwOiM2NjBmMDA7''@;'; put 'put ''LS1jbHItY29sb3Itb24tZGFuZ2VyLTUwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci0xMDA6YmxhY2s7LS1jbHItY29sb3Itb24tZGFuZ2VyLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1kYW5nZXItMzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci00MDA6YmxhY2s7LS1jbHIt''@;'; put 'put ''Y29sb3Itb24tZGFuZ2VyLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1kYW5nZXItNjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLWRhbmdlci03MDA6d2hpdGU7LS1jbHItY29sb3Itb24tZGFuZ2VyLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1kYW5nZXItOTAwOndoaXRlOy0tY2xyLWNvbG9y''@;'; put 'put ''LW9uLWRhbmdlci0xMDAwOndoaXRlOy0tY2xyLWNvbG9yLXdhcm5pbmctNTA6I2ZmZmFlNjstLWNsci1jb2xvci13YXJuaW5nLTEwMDojZmZmNGM3Oy0tY2xyLWNvbG9yLXdhcm5pbmctMjAwOiNmZmVlYTg7LS1jbHItY29sb3Itd2FybmluZy0zMDA6I2ZlZTI3MjstLWNsci1jb2xvci13YXJu''@;'; put 'put ''aW5nLTQwMDojZjhjZjJhOy0tY2xyLWNvbG9yLXdhcm5pbmctNTAwOiNlZmMwMDY7LS1jbHItY29sb3Itd2FybmluZy02MDA6I2U2YjAwMDstLWNsci1jb2xvci13YXJuaW5nLTcwMDojZDY5YTAwOy0tY2xyLWNvbG9yLXdhcm5pbmctODAwOiNhZDc2MDA7LS1jbHItY29sb3Itd2FybmluZy05''@;'; put 'put ''MDA6IzhmNWEwMDstLWNsci1jb2xvci13YXJuaW5nLTEwMDA6IzYxMzIwMDstLWNsci1jb2xvci1vbi13YXJuaW5nLTUwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''MzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNDAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNjAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNzAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmct''@;'; put 'put ''ODAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctOTAwOmJsYWNrOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMTAwMDp3aGl0ZTstLWNsci1jb2xvci1zdWNjZXNzLTUwOiNkZmYwZDA7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDA6I2JjZTQ5YTstLWNsci1jb2xvci1zdWNjZXNzLTIwMDoj''@;'; put 'put ''NzNkYzFlOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMzAwOiM2OGM3MWE7LS1jbHItY29sb3Itc3VjY2Vzcy00MDA6IzVlYjcxNTstLWNsci1jb2xvci1zdWNjZXNzLTUwMDojNWFhMjIwOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNjAwOiM0Yjk3MGM7LS1jbHItY29sb3Itc3VjY2Vzcy03MDA6IzNjODUw''@;'; put 'put ''MDstLWNsci1jb2xvci1zdWNjZXNzLTgwMDojMzA2YjAwOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtOTAwOiMyNTUyMDA7LS1jbHItY29sb3Itc3VjY2Vzcy0xMDAwOiMxZTQyMDA7LS1jbHItY29sb3Itb24tc3VjY2Vzcy01MDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTEwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zdWNjZXNzLTIwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTMwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTQwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTUwMDpibGFjazstLWNsci1jb2xvci1vbi1zdWNjZXNzLTYwMDpibGFjazst''@;'; put 'put ''LWNsci1jb2xvci1vbi1zdWNjZXNzLTcwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTgwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTkwMDp3aGl0ZTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTEwMDA6d2hpdGV9OnJvb3R7LS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1czou''@;'; put 'put ''MTVyZW07LS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoOi4wNXJlbTstLWNsci1nbG9iYWwtYXBwLWJhY2tncm91bmQ6I2ZhZmFmYTstLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yOiNkOGUzZTk7LS1jbHItZ2xvYmFsLW9uLXNlbGVjdGlvbi1jb2xvcjpibGFjazstLWNsci1nbG9iYWwtaG92''@;'; put 'put ''ZXItY29sb3I6I2U4ZThlODstLWNsci1nbG9iYWwtY29udGVudC1oZWFkZXItZm9udC1jb2xvcjpibGFjazstLWNsci1nbG9iYWwtZm9udC1jb2xvcjojNjY2NjY2Oy0tY2xyLWdsb2JhbC1zdWNjZXNzLWNvbG9yOiM1YWEyMjA7LS1jbHItZ2xvYmFsLWVycm9yLWNvbG9yOiNjMjFkMDA7LS1j''@;'; put 'put ''bHItY2xvc2UtY29sb3ItLW5vcm1hbDojOGM4YzhjOy0tY2xyLWNsb3NlLWNvbG9yLS1ub3JtYWwtb3BhY2l0eTouMjstLWNsci1jbG9zZS1jb2xvci0taG92ZXI6YmxhY2s7LS1jbHItY2xvc2UtY29sb3ItLWhvdmVyLW9wYWNpdHk6LjU7LS1jbHItcG9wb3Zlci1ib3gtc2hhZG93LWNvbG9y''@;'; put 'put ''OnJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KX06cm9vdHstLWNsci1mb250Ok1ldHJvcG9saXMsIEF2ZW5pciBOZXh0LCBIZWx2ZXRpY2EgTmV1ZSwgQXJpYWwsIHNhbnMtc2VyaWY7LS1jbHItZGlzcGxheS1mb250OnZhcigtLWNsci1mb250KTstLWNsci1mb250LXdlaWdodC1saWdodDoyMDA7''@;'; put 'put ''LS1jbHItZm9udC13ZWlnaHQtcmVndWxhcjo0MDA7LS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQ6NTAwOy0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQ6NjAwOy0tY2xyLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDo2MDA7LS1jbHItaDEtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1jb250ZW50LWhlYWRl''@;'; put 'put ''ci1mb250LWNvbG9yKTstLWNsci1oMS1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWgxLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWgyLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtY29udGVudC1oZWFkZXItZm9udC1jb2xv''@;'; put 'put ''cik7LS1jbHItaDItZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LWxpZ2h0KTstLWNsci1oMi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWNvbnRlbnQtaGVhZGVyLWZvbnQtY29sb3IpOy0tY2xyLWgz''@;'; put 'put ''LWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCk7LS1jbHItaDMtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDQtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1jb250ZW50LWhlYWRlci1mb250LWNvbG9yKTstLWNsci1oNC1mb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpOy0tY2xyLWg0LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg1LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItaDUtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJl''@;'; put 'put ''Z3VsYXIpOy0tY2xyLWg1LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg2LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItaDYtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1oNi1mb250LWZh''@;'; put 'put ''bWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1wMC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQtY29sb3IpOy0tY2xyLXAwLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCk7LS1jbHItcDEtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9y''@;'; put 'put ''KTstLWNsci1wMS1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtcmVndWxhcik7LS1jbHItcDItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9yKTstLWNsci1wMi1mb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXAzLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDMtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA0LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDQtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2Vp''@;'; put 'put ''Z2h0LWJvbGQpOy0tY2xyLXA1LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDUtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA2LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDYtZm9udC13''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LWJvbGQpOy0tY2xyLXA3LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItcDctZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLXA4LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9u''@;'; put 'put ''dC1jb2xvcik7LS1jbHItcDgtZm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIpfS5jbHItYWxpZ24tYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudH0uY2xyLWFsaWduLWJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24tdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''dGV4dC10b3B7dmVydGljYWwtYWxpZ246dGV4dC10b3AhaW1wb3J0YW50fS5jbHItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmNsci1kaXNwbGF5LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmUtYmxv''@;'; put 'put ''Y2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1mbGV4LXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMHtmbGV4''@;'; put 'put ''LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1z''@;'; put 'put ''dGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5j''@;'; put 'put ''bHItanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0''@;'; put 'put ''ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRl''@;'; put 'put ''bXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtZW5ke2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250''@;'; put 'put ''ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24t''@;'; put 'put ''c2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWJhc2Vs''@;'; put 'put ''aW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZs''@;'; put 'put ''ZXgtc20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2Uh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtc20tbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1m''@;'; put 'put ''bGV4LXNtLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxleC1zbS1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zbS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVu''@;'; put 'put ''ZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFu''@;'; put 'put ''dH0uY2xyLWFsaWduLWl0ZW1zLXNtLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNo''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1jZW50ZXJ7YWxp''@;'; put 'put ''Z24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNs''@;'; put 'put ''ci1hbGlnbi1jb250ZW50LXNtLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtc20tYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1zbS1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1zbS1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcHtm''@;'; put 'put ''bGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC1maWxse2ZsZXg6MSAxIGF1dG8haW1w''@;'; put 'put ''b3J0YW50fS5jbHItZmxleC1tZC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtc2hyaW5rLTF7ZmxleC1z''@;'; put 'put ''aHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250''@;'; put 'put ''ZW50LW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1jZW50ZXJ7''@;'; put 'put ''YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50''@;'; put 'put ''LW1kLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0u''@;'; put 'put ''Y2xyLWFsaWduLWNvbnRlbnQtbWQtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1zdHJldGNoe2Fs''@;'; put 'put ''aWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtZW5ke2FsaWdu''@;'; put 'put ''LXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RyZXRjaHth''@;'; put 'put ''bGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtbGct''@;'; put 'put ''cm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''ZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXAtcmV2ZXJzZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0we2Zs''@;'; put 'put ''ZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xyLWZsZXgtbGctc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlm''@;'; put 'put ''eS1jb250ZW50LWxnLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''YWxpZ24taXRlbXMtbGctc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbGctY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9''@;'; put 'put ''LmNsci1hbGlnbi1pdGVtcy1sZy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdGFydHthbGlnbi1jb250ZW50OmZsZXgt''@;'; put 'put ''c3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWJldHdlZW57''@;'; put 'put ''YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYXJvdW5ke2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tc2VsZi1sZy1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWFsaWduLXNlbGYtbGctY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC14bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLW5vd3JhcHtmbGV4LXdyYXA6bm93''@;'; put 'put ''cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC14bC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC14bC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxl''@;'; put 'put ''eC14bC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgteGwtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1j''@;'; put 'put ''b250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3Rp''@;'; put 'put ''ZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1p''@;'; put 'put ''dGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWJhc2VsaW5l''@;'; put 'put ''e2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1j''@;'; put 'put ''b250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4h''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWF1dG97YWxp''@;'; put 'put ''Z24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24t''@;'; put 'put ''c2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX0uY2xyLWZsZXgteHMtZmlyc3R7b3JkZXI6LTF9''@;'; put 'put ''LmNsci1mbGV4LXhzLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteHMtdW5vcmRlcmVke29yZGVyOjB9LmNsci1mbGV4LWl0ZW1zLXhzLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14cy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14''@;'; put 'put ''cy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9LmNsci1mbGV4LXhzLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LXhzLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteHMtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhz''@;'; put 'put ''LWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14cy1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhzLWFyb3VuZHtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14cy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtc20tZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXNtLWxhc3R7b3JkZXI6MX0uY2xyLWZs''@;'; put 'put ''ZXgtc20tdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMtc20tdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLWJvdHRv''@;'; put 'put ''bXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1zbS1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXNtLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5k''@;'; put 'put ''fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LWl0ZW1zLXNtLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1zbS1yaWdodHtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy1zbS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLWZp''@;'; put 'put ''cnN0e29yZGVyOi0xfS5jbHItZmxleC1tZC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LW1kLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1taWRk''@;'; put 'put ''bGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbWQtbWlkZGxle2FsaWduLXNlbGY6''@;'; put 'put ''Y2VudGVyfS5jbHItZmxleC1tZC1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxleC1pdGVtcy1tZC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbWQtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0''@;'; put 'put ''d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1sZy1maXJzdHtvcmRlcjotMX0uY2xyLWZsZXgtbGctbGFzdHtvcmRlcjoxfS5jbHItZmxleC1sZy11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy10b3B7''@;'; put 'put ''YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbGctbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbGctYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXRvcHthbGlnbi1z''@;'; put 'put ''ZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LWxnLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtbGctYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtaXRlbXMtbGctbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1z''@;'; put 'put ''dGFydH0uY2xyLWZsZXgtaXRlbXMtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLWxnLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1m''@;'; put 'put ''bGV4LWl0ZW1zLWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC14bC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LXhsLXVub3JkZXJlZHtvcmRlcjowfX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMteGwtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1A''@;'; put 'put ''bWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC14bC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXhsLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAw''@;'; put 'put ''cHgpey5jbHItZmxleC1pdGVtcy14bC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1p''@;'; put 'put ''dGVtcy14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMteGwtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19LmNsci1mbG9hdC14cy1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtcmlnaHR7Zmxv''@;'; put 'put ''YXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50''@;'; put 'put ''fS5jbHItZmxvYXQtc20tbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItZmxvYXQtbWQtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLW5v''@;'; put 'put ''bmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsb2F0LWxnLWxlZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUhaW1w''@;'; put 'put ''b3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxvYXQteGwtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fS5jbHItaW52''@;'; put 'put ''aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudH0uY2xyLWhpZGRlbi14cy11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsuY2xyLWhpZGRlbi14cy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRo''@;'; put 'put ''OjU3NnB4KXsuY2xyLWhpZGRlbi1zbS11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0aDo3NjcuOThweCl7LmNsci1oaWRkZW4tc20tZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1oaWRkZW4tbWQtdXB7''@;'; put 'put ''ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5jbHItaGlkZGVuLW1kLWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItaGlkZGVuLWxnLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBt''@;'; put 'put ''ZWRpYSAobWF4LXdpZHRoOjExOTkuOThweCl7LmNsci1oaWRkZW4tbGctZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItaGlkZGVuLXhsLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItaGlkZGVuLXhsLWRvd24sLmNsci12''@;'; put 'put ''aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJsZS1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmlu''@;'; put 'put ''dHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIHByaW50ey5jbHItaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItcm93e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tcmlnaHQ6LS42cmVtO21hcmdpbi1sZWZ0Oi0uNnJlbX0uY2xyLW5vLWd1dHRl''@;'; put 'put ''cnN7bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MH0uY2xyLW5vLWd1dHRlcnM+LmNsci1jb2wsLmNsci1uby1ndXR0ZXJzPltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MH0uY2xyLWNvbC14bCwuY2xyLWNvbC14bC1hdXRvLC5jbHItY29sLXhsLTEy''@;'; put 'put ''LC5jbHItY29sLXhsLTExLC5jbHItY29sLXhsLTEwLC5jbHItY29sLXhsLTksLmNsci1jb2wteGwtOCwuY2xyLWNvbC14bC03LC5jbHItY29sLXhsLTYsLmNsci1jb2wteGwtNSwuY2xyLWNvbC14bC00LC5jbHItY29sLXhsLTMsLmNsci1jb2wteGwtMiwuY2xyLWNvbC14bC0xLC5jbHItY29s''@;'; put 'put ''LWxnLC5jbHItY29sLWxnLWF1dG8sLmNsci1jb2wtbGctMTIsLmNsci1jb2wtbGctMTEsLmNsci1jb2wtbGctMTAsLmNsci1jb2wtbGctOSwuY2xyLWNvbC1sZy04LC5jbHItY29sLWxnLTcsLmNsci1jb2wtbGctNiwuY2xyLWNvbC1sZy01LC5jbHItY29sLWxnLTQsLmNsci1jb2wtbGctMywu''@;'; put 'put ''Y2xyLWNvbC1sZy0yLC5jbHItY29sLWxnLTEsLmNsci1jb2wtbWQsLmNsci1jb2wtbWQtYXV0bywuY2xyLWNvbC1tZC0xMiwuY2xyLWNvbC1tZC0xMSwuY2xyLWNvbC1tZC0xMCwuY2xyLWNvbC1tZC05LC5jbHItY29sLW1kLTgsLmNsci1jb2wtbWQtNywuY2xyLWNvbC1tZC02LC5jbHItY29s''@;'; put 'put ''LW1kLTUsLmNsci1jb2wtbWQtNCwuY2xyLWNvbC1tZC0zLC5jbHItY29sLW1kLTIsLmNsci1jb2wtbWQtMSwuY2xyLWNvbC1zbSwuY2xyLWNvbC1zbS1hdXRvLC5jbHItY29sLXNtLTEyLC5jbHItY29sLXNtLTExLC5jbHItY29sLXNtLTEwLC5jbHItY29sLXNtLTksLmNsci1jb2wtc20tOCwu''@;'; put 'put ''Y2xyLWNvbC1zbS03LC5jbHItY29sLXNtLTYsLmNsci1jb2wtc20tNSwuY2xyLWNvbC1zbS00LC5jbHItY29sLXNtLTMsLmNsci1jb2wtc20tMiwuY2xyLWNvbC1zbS0xLC5jbHItY29sLC5jbHItY29sLWF1dG8sLmNsci1jb2wtMTIsLmNsci1jb2wtMTEsLmNsci1jb2wtMTAsLmNsci1jb2wt''@;'; put 'put ''OSwuY2xyLWNvbC04LC5jbHItY29sLTcsLmNsci1jb2wtNiwuY2xyLWNvbC01LC5jbHItY29sLTQsLmNsci1jb2wtMywuY2xyLWNvbC0yLC5jbHItY29sLTF7d2lkdGg6MTAwJTttaW4taGVpZ2h0Oi4wNXJlbTtwYWRkaW5nLXJpZ2h0Oi42cmVtO3BhZGRpbmctbGVmdDouNnJlbX0uY2xyLWNv''@;'; put 'put ''bHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLTJ7''@;'; put 'put ''ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtNXtmbGV4OjAg''@;'; put 'put ''MCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC04e2ZsZXg6MCAwIDY2LjY2''@;'; put 'put ''NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC0xMXtmbGV4OjAgMCA5MS42NjY2NjY2''@;'; put 'put ''NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLTB7b3JkZXI6MH0uY2xyLW9yZGVyLTF7b3JkZXI6MX0u''@;'; put 'put ''Y2xyLW9yZGVyLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLTN7b3JkZXI6M30uY2xyLW9yZGVyLTR7b3JkZXI6NH0uY2xyLW9yZGVyLTV7b3JkZXI6NX0uY2xyLW9yZGVyLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLTd7b3JkZXI6N30uY2xyLW9yZGVyLTh7b3JkZXI6OH0uY2xyLW9yZGVyLTl7b3JkZXI6''@;'; put 'put ''OX0uY2xyLW9yZGVyLTEwe29yZGVyOjEwfS5jbHItb3JkZXItMTF7b3JkZXI6MTF9LmNsci1vcmRlci0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC0z''@;'; put 'put ''e21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMz''@;'; put 'put ''MzMzJX0uY2xyLW9mZnNldC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfUBtZWRp''@;'; put 'put ''YSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWNvbC1zbXtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtc20tYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtc20tMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMl''@;'; put 'put ''O21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtc20tNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMz''@;'; put 'put ''JTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1zbS03e2ZsZXg6MCAwIDU4LjMzMzMzMzMz''@;'; put 'put ''MzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXNtLTEwe2ZsZXg6MCAwIDgzLjMzMzMz''@;'; put 'put ''MzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLXNtLWZpcnN0e29yZGVy''@;'; put 'put ''Oi0xfS5jbHItb3JkZXItc20tbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXNtLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXNtLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXNtLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXNtLTN7b3JkZXI6M30uY2xyLW9yZGVyLXNtLTR7b3JkZXI6NH0uY2xyLW9yZGVyLXNt''@;'; put 'put ''LTV7b3JkZXI6NX0uY2xyLW9yZGVyLXNtLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXNtLTd7b3JkZXI6N30uY2xyLW9yZGVyLXNtLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXNtLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXNtLTEwe29yZGVyOjEwfS5jbHItb3JkZXItc20tMTF7b3JkZXI6MTF9LmNsci1v''@;'; put 'put ''cmRlci1zbS0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1zbS0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtc20tM3ttYXJnaW4tbGVm''@;'; put 'put ''dDoyNSV9LmNsci1vZmZzZXQtc20tNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXNtLTd7bWFyZ2luLWxlZnQ6NTguMzMzMzMz''@;'; put 'put ''MzMzMyV9LmNsci1vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1zbS0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS0xMXttYXJnaW4tbGVmdDo5MS42NjY2''@;'; put 'put ''NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItY29sLW1ke2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1tZC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNvbC1tZC0xe2ZsZXg6MCAw''@;'; put 'put ''IDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNvbC1tZC00e2ZsZXg6MCAw''@;'; put 'put ''IDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHItY29sLW1kLTd7ZmxleDow''@;'; put 'put ''IDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNsci1jb2wtbWQtMTB7Zmxl''@;'; put 'put ''eDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDoxMDAlfS5jbHItb3JkZXIt''@;'; put 'put ''bWQtZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1tZC1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItbWQtMHtvcmRlcjowfS5jbHItb3JkZXItbWQtMXtvcmRlcjoxfS5jbHItb3JkZXItbWQtMntvcmRlcjoyfS5jbHItb3JkZXItbWQtM3tvcmRlcjozfS5jbHItb3JkZXItbWQtNHtvcmRlcjo0''@;'; put 'put ''fS5jbHItb3JkZXItbWQtNXtvcmRlcjo1fS5jbHItb3JkZXItbWQtNntvcmRlcjo2fS5jbHItb3JkZXItbWQtN3tvcmRlcjo3fS5jbHItb3JkZXItbWQtOHtvcmRlcjo4fS5jbHItb3JkZXItbWQtOXtvcmRlcjo5fS5jbHItb3JkZXItbWQtMTB7b3JkZXI6MTB9LmNsci1vcmRlci1tZC0xMXtv''@;'; put 'put ''cmRlcjoxMX0uY2xyLW9yZGVyLW1kLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LW1kLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1tZC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1t''@;'; put 'put ''ZC0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1tZC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtbWQtN3ttYXJnaW4t''@;'; put 'put ''bGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LW1kLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTExe21hcmdp''@;'; put 'put ''bi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1jb2wtbGd7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLWxnLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29s''@;'; put 'put ''LWxnLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy0ze2ZsZXg6MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29s''@;'; put 'put ''LWxnLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTZ7ZmxleDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1j''@;'; put 'put ''b2wtbGctN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctOXtmbGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xy''@;'; put 'put ''LWNvbC1sZy0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEw''@;'; put 'put ''MCV9LmNsci1vcmRlci1sZy1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLWxnLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1sZy0we29yZGVyOjB9LmNsci1vcmRlci1sZy0xe29yZGVyOjF9LmNsci1vcmRlci1sZy0ye29yZGVyOjJ9LmNsci1vcmRlci1sZy0ze29yZGVyOjN9LmNsci1vcmRl''@;'; put 'put ''ci1sZy00e29yZGVyOjR9LmNsci1vcmRlci1sZy01e29yZGVyOjV9LmNsci1vcmRlci1sZy02e29yZGVyOjZ9LmNsci1vcmRlci1sZy03e29yZGVyOjd9LmNsci1vcmRlci1sZy04e29yZGVyOjh9LmNsci1vcmRlci1sZy05e29yZGVyOjl9LmNsci1vcmRlci1sZy0xMHtvcmRlcjoxMH0uY2xy''@;'; put 'put ''LW9yZGVyLWxnLTExe29yZGVyOjExfS5jbHItb3JkZXItbGctMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbGctMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LWxnLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2Njcl''@;'; put 'put ''fS5jbHItb2Zmc2V0LWxnLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LWxnLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNl''@;'; put 'put ''dC1sZy03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbGctMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZz''@;'; put 'put ''ZXQtbGctMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1jb2wteGx7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLXhsLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0''@;'; put 'put ''aDpub25lfS5jbHItY29sLXhsLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC0ze2ZsZXg6MCAwIDI1JTttYXgtd2lk''@;'; put 'put ''dGg6MjUlfS5jbHItY29sLXhsLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTZ7ZmxleDowIDAgNTAlO21heC13''@;'; put 'put ''aWR0aDo1MCV9LmNsci1jb2wteGwtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtOXtmbGV4OjAgMCA3NSU7bWF4''@;'; put 'put ''LXdpZHRoOjc1JX0uY2xyLWNvbC14bC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTEye2ZsZXg6MCAwIDEw''@;'; put 'put ''MCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci14bC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLXhsLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci14bC0we29yZGVyOjB9LmNsci1vcmRlci14bC0xe29yZGVyOjF9LmNsci1vcmRlci14bC0ye29yZGVyOjJ9LmNsci1vcmRlci14bC0ze29y''@;'; put 'put ''ZGVyOjN9LmNsci1vcmRlci14bC00e29yZGVyOjR9LmNsci1vcmRlci14bC01e29yZGVyOjV9LmNsci1vcmRlci14bC02e29yZGVyOjZ9LmNsci1vcmRlci14bC03e29yZGVyOjd9LmNsci1vcmRlci14bC04e29yZGVyOjh9LmNsci1vcmRlci14bC05e29yZGVyOjl9LmNsci1vcmRlci14bC0x''@;'; put 'put ''MHtvcmRlcjoxMH0uY2xyLW9yZGVyLXhsLTExe29yZGVyOjExfS5jbHItb3JkZXIteGwtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQteGwtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LXhsLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14bC0ye21hcmdpbi1sZWZ0''@;'; put 'put ''OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LXhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14bC02e21hcmdpbi1sZWZ0''@;'; put 'put ''OjUwJX0uY2xyLW9mZnNldC14bC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQteGwtMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMz''@;'; put 'put ''MzMzMyV9LmNsci1vZmZzZXQteGwtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fS5jbHItYnJlYWstcm93e3dpZHRoOjEwMCV9Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9cHJle21hcmdpbjouNnJlbSAwfXByZXtib3JkZXItY29sb3I6I2NjYztib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwLCAjY2NjY2NjKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFk''@;'; put 'put ''aXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfXByZSBjb2Rle3doaXRlLXNwYWNlOnByZX1jb2RlLmNsci1jb2Rle2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDAsICNjMjFkMDApO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMH11''@;'; put 'put ''bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKXtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZX11bC5saXN0LXVuc3R5bGVkOm5vdChbY2RzLWxpc3RdKSBsaTo6bWFya2Vye2NvbG9yOnRyYW5zcGFyZW50fXVsOm5vdChbY2RzLWxp''@;'; put 'put ''c3RdKSxvbDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctbGVmdDowfXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pe2xpc3Qtc3R5''@;'; put 'put ''bGUtcG9zaXRpb246b3V0c2lkZTttYXJnaW4tbGVmdDoxLjFlbX11bC5saXN0Om5vdChbY2RzLWxpc3RdKS5jb21wYWN0LG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3R7bGluZS1oZWlnaHQ6LjlyZW19dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saSxvbC5saXN0Om5v''@;'; put 'put ''dChbY2RzLWxpc3RdKS5jb21wYWN0Pmxpe21hcmdpbi1ib3R0b206LjNyZW19dWwubGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saTpsYXN0LWNoaWxkLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3Q+bGk6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9dWw6bm90KC5saXN0''@;'; put 'put ''LXVuc3R5bGVkKTpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZCxvbDpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZHttYXJnaW4tbGVmdDoxLjFlbX1saT51bDpub3QoW2Nkcy1saXN0XSl7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjEuMWVtfXVsLmxpc3Qt''@;'; put 'put ''Z3JvdXA6bm90KFtjZHMtbGlzdF0pe21hcmdpbi10b3A6MH11bDpub3QoW2Nkcy1saXN0XSkubGlzdC1zcGFjZXIsb2w6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vye21hcmdpbi10b3A6MS4ycmVtfWgxOm5vdChbY2RzLXRleHRdKXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1oMS1j''@;'; put 'put ''b2xvciwgYmxhY2spO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDEtZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1m''@;'; put 'put ''b250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjZyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjIuNHJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9t''@;'; put 'put ''OjB9aDI6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWgyLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMi1mb250LXdlaWdodCwgMjAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZl''@;'; put 'put ''dGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgyLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEuNHJlbTtsZXR0ZXItc3BhY2luZzpub3Jt''@;'; put 'put ''YWw7bGluZS1oZWlnaHQ6Mi40cmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1oMzpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItaDMtY29sb3IsIGJsYWNrKTtmb250LXdlaWdodDoyMDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgzLWZvbnQt''@;'; put 'put ''d2VpZ2h0LCAyMDApO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHksIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFy''@;'; put 'put ''aWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS4xcmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWg0Om5vdChbY2RzLXRleHRdKXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1oNC1jb2xvciwg''@;'; put 'put ''YmxhY2spO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDQtZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNC1mb250LWZh''@;'; put 'put ''bWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1oNTpu''@;'; put 'put ''b3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItaDUtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2Eg''@;'; put 'put ''TmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOHJlbTtsZXR0ZXItc3BhY2luZzouMDFlbTtsaW5l''@;'; put 'put ''LWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWg2Om5vdChbY2RzLXRleHRdKXtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1oNi1jb2xvciwgIzMzMzMzMyk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdo''@;'; put 'put ''dCwgNTAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwg''@;'; put 'put ''c2Fucy1zZXJpZik7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHk6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yLCAjNjY2''@;'; put 'put ''NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXAxLWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouN3JlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5p''@;'; put 'put ''ciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWZvbnQsIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTttYXJnaW4tdG9wOjAhaW1wb3J0YW50fWJvZHkgcDpub3Qo''@;'; put 'put ''W2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdo''@;'; put 'put ''dDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnAwOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDA6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAwLWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDoyMDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXAwLWZvbnQtd2VpZ2h0LCAyMDApO2ZvbnQtc2l6ZToxcmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnAyOm5vdChbY2RzLXRleHRdKSxib2R5IHAucDI6bm90KFtj''@;'; put 'put ''ZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXAyLWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXAyLWZvbnQtd2VpZ2h0LCA1MDApO2ZvbnQtc2l6ZTouNjVyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMnJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9Ym9keSAucDM6bm90KFtjZHMtdGV4dF0pLGJvZHkgcC5wMzpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDMtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItcDMtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi42NXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH1ib2R5IC5wNDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA0Om5vdChb''@;'; put 'put ''Y2RzLXRleHRdKXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1wNC1jb2xvciwgIzY2NjY2Nik7Zm9udC13ZWlnaHQ6NjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1wNC1mb250LXdlaWdodCwgNjAwKTtmb250LXNpemU6LjZyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0''@;'; put 'put ''OjEuMnJlbTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9Ym9keSAucDU6bm90KFtjZHMtdGV4dF0pLGJvZHkgcC5wNTpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDUtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItcDUtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi42cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA2Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDY6bm90KFtj''@;'; put 'put ''ZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA2LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA2LWZvbnQtd2VpZ2h0LCA2MDApO2ZvbnQtc2l6ZTouNTVyZW07bGV0dGVyLXNwYWNpbmc6LjAzZW07bGluZS1oZWlnaHQ6''@;'; put 'put ''LjZyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA3Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDc6bm90KFtjZHMtdGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA3LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLXA3LWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouNTVyZW07bGV0dGVyLXNwYWNpbmc6LjAzZW07bGluZS1oZWlnaHQ6LjZyZW07bWFyZ2luLXRvcDoxLjJyZW07bWFyZ2luLWJvdHRvbTowfWJvZHkgLnA4Om5vdChbY2RzLXRleHRdKSxib2R5IHAucDg6bm90KFtjZHMt''@;'; put 'put ''dGV4dF0pe2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXA4LWNvbG9yLCAjNjY2NjY2KTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA4LWZvbnQtd2VpZ2h0LCA0MDApO2ZvbnQtc2l6ZTouNXJlbTtsZXR0ZXItc3BhY2luZzouMDNlbTtsaW5lLWhlaWdodDouNnJl''@;'; put 'put ''bTttYXJnaW4tdG9wOjEuMnJlbTttYXJnaW4tYm90dG9tOjB9LnRleHQtbGlnaHR7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1saWdodCwgMjAwKX0udGV4dC1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH0udGV4dC1jZW50ZXJ7dGV4''@;'; put 'put ''dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fS50ZXh0LWxlZnR7dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH0udGV4dC1qdXN0aWZ5e3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9aHRtbDpub3QoW2Nkcy10ZXh0XSl7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQt''@;'; put 'put ''Y29sb3IsICM2NjY2NjYpO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItZm9udCwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNh''@;'; put 'put ''bnMtc2VyaWYpO2ZvbnQtc2l6ZToxMjUlfTpyb290ey0tY2xyLWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwMCk7LS1jbHItbGluay1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItbGluay1ob3Zlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItbGluay12aXNpdGVkLWNvbG9yOmhzbCgyMzgsIDQxJSwgNTMlKTstLWNsci1jdXN0b20tbGlua3MtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKX1odG1se2JveC1zaXppbmc6Ym9yZGVyLWJveH0qLDpiZWZvcmUs''@;'; put 'put ''OmFmdGVye2JveC1zaXppbmc6aW5oZXJpdH1odG1sey1tcy1vdmVyZmxvdy1zdHlsZTpzY3JvbGxiYXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWltZ3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn1hLGFyZWEsYnV0''@;'; put 'put ''dG9uLFtyb2xlPWJ1dHRvbl0saW5wdXQsbGFiZWwsc2VsZWN0LHN1bW1hcnksdGV4dGFyZWF7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbn1idXR0b246Zm9jdXN7b3V0bGluZToycHggc29saWQgLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OjFweH1idXR0b246LW1v''@;'; put 'put ''ei1mb2N1c3JpbmcsW3R5cGU9YnV0dG9uXTotbW96LWZvY3VzcmluZyxbdHlwZT1yZXNldF06LW1vei1mb2N1c3JpbmcsW3R5cGU9c3VibWl0XTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjJweCBzb2xpZCBIaWdobGlnaHQ7b3V0bGluZS1vZmZzZXQ6MXB4fWlucHV0LGJ1dHRvbixzZWxlY3Qs''@;'; put 'put ''dGV4dGFyZWF7Ym9yZGVyLXJhZGl1czowfWlucHV0W3R5cGU9cmFkaW9dOmRpc2FibGVkLGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH1pbnB1dFt0eXBlPWRhdGVdLGlucHV0W3R5cGU9dGltZV0saW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0saW5w''@;'; put 'put ''dXRbdHlwZT1tb250aF17LXdlYmtpdC1hcHBlYXJhbmNlOmxpc3Rib3h9dGV4dGFyZWF7cmVzaXplOnZlcnRpY2FsfWZpZWxkc2V0e21pbi13aWR0aDowO3BhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MH1sZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6MDtsaW5lLWhl''@;'; put 'put ''aWdodDppbmhlcml0fWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1baGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRse21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjFyZW19dGFibGV7Ym9yZGVyLXNwYWNpbmc6MH1hOmxpbmt7Y29sb3I6IzAwNzJh''@;'; put 'put ''Mztjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvciwgIzAwNzJhMyl9YTp2aXNpdGVke2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvciwgIzU2NTliOCl9YTp2aXNpdGVkOmhvdmVye2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRl''@;'; put 'put ''ZC1jb2xvci1ob3ZlciwgIzU2NTliOCl9YTpob3Zlcntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9yLCAjMDA3MmEzKX1hOmFjdGl2ZXtjb2xvcjojOWU1N2JjO2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvciwgIzllNTdiYyl9LmNsci1zci1v''@;'; put 'put ''bmx5e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uYWxlcnQt''@;'; put 'put ''aWNvbiwuY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW47dmVydGljYWwtYWxpZ246bWlkZGxlfS5hbGVydC1pY29uLmNsci1pY29u''@;'; put 'put ''LXdhcm5pbmcsLmFsZXJ0LWljb24uaWNvbi13YXJuaW5nLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLC5jbHItaWNvbi5pY29uLXdhcm5pbmd7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIy''@;'; put 'put ''JTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0ElMjM3NDc0NzQl''@;'; put 'put ''M0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0N0aXRsZSUzRWV4Y2xhbWF0aW9uLXRyaWFuZ2xlLWxpbmUlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMSUyMiUyMGQlM0QlMjJNMTglMkMyMS4zMmExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxLjMtMS4zVjE0YTEuMyUyQzEuMyUyQzAlMkMxJTJDMC0yLjYlMkMw''@;'; put 'put ''djZBMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMTglMkMyMS4zMlolMjIlM0UlM0MlMkZwYXRoJTNFJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTIlMjIlMjBjeCUzRCUyMjE3Ljk1JTIyJTIwY3klM0QlMjIyNC4yNyUyMiUyMHIlM0Ql''@;'; put 'put ''MjIxLjUlMjIlM0UlM0MlMkZjaXJjbGUlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTMlMjIlMjBkJTNEJTIyTTMwLjMzJTJDMjUuNTQlMkMyMC41OSUyQzcuNmEzJTJDMyUyQzAlMkMwJTJDMC01LjI3JTJDMEw1LjU3JTJDMjUuNTRB''@;'; put 'put ''MyUyQzMlMkMwJTJDMCUyQzAlMkM4LjIxJTJDMzBIMjcuNjlhMyUyQzMlMkMwJTJDMCUyQzAlMkMyLjY0LTQuNDNabS0xLjc4JTJDMS45NGExJTJDMSUyQzAlMkMwJTJDMS0uODYuNDlIOC4yMWExJTJDMSUyQzAlMkMwJTJDMS0uODgtMS40OEwxNy4wNyUyQzguNTVhMSUyQzElMkMwJTJDMCUy''@;'; put 'put ''QzElMkMxLjc2JTJDMGw5Ljc0JTJDMTcuOTRBMSUyQzElMkMwJTJDMCUyQzElMkMyOC41NSUyQzI3LjQ4WiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZzdmclM0UpfS5hbGVydC1pY29uLmNsci1pY29uLXdhcm5pbmctd2hp''@;'; put 'put ''dGUsLmNsci1pY29uLmNsci1pY29uLXdhcm5pbmctd2hpdGV7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjUlMjA1JTIwMjYlMjAyNiUyMiUyMHByZXNlcnZlQXNw''@;'; put 'put ''ZWN0UmF0aW8lM0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUzQ2RlZnMlM0UlM0Nz''@;'; put 'put ''dHlsZSUyMHR5cGUlM0QlMjJ0ZXh0JTJGY3NzJTIyJTNFJTBBJTA5LmNsci1pLW91dGxpbmUlN0JmaWxsLXJ1bGUlM0FldmVub2RkJTNCY2xpcC1ydWxlJTNBZXZlbm9kZCUzQmZpbGwlM0F3aGl0ZSUzQiU3RCUzQyUyRnN0eWxlJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFZXhjbGFtYXRpb24tdHJpYW5nbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGlu''@;'; put 'put ''ZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzIxLjMyYTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzEuMy0xLjNWMTRhMS4zJTJDMS4zJTJDMCUyQzElMkMwLTIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxOCUyQzIxLjMyWiUyMiUzRSUzQyUyRnBh''@;'; put 'put ''dGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMiUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjI0LjI3JTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1p''@;'; put 'put ''LW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGQlM0QlMjJNMzAuMzMlMkMyNS41NCUyQzIwLjU5JTJDNy42YTMlMkMzJTJDMCUyQzAlMkMwLTUuMjclMkMwTDUuNTclMkMyNS41NEEzJTJDMyUyQzAlMkMwJTJDMCUyQzguMjElMkMzMEgyNy42OWEzJTJDMyUyQzAlMkMwJTJD''@;'; put 'put ''MCUyQzIuNjQtNC40M1ptLTEuNzglMkMxLjk0YTElMkMxJTJDMCUyQzAlMkMxLS44Ni40OUg4LjIxYTElMkMxJTJDMCUyQzAlMkMxLS44OC0xLjQ4TDE3LjA3JTJDOC41NWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNzYlMkMwbDkuNzQlMkMxNy45NEExJTJDMSUyQzAlMkMwJTJDMSUyQzI4LjU1''@;'; put 'put ''JTJDMjcuNDhaJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSl9LmFsZXJ0LWljb24uY2xyLXZtdy1sb2dvLC5jbHItaWNvbi5jbHItdm13LWxvZ297YmFja2dyb3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3Zn''@;'; put 'put ''K3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJG''@;'; put 'put ''JTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFdm0lMjBidWclM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIySGVhZGVycyUyMiUyMHN0''@;'; put 'put ''cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyQ0wtSGVhZGVycy1TcGVjcyUyMiUyMHRyYW5zZm9y''@;'; put 'put ''bSUzRCUyMnRyYW5zbGF0ZSgtMjYyLjAwMDAwMCUyQyUyMC0xNzUuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMjAxJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlKDIzOC4wMDAwMDAlMkMlMjAxNjMuMDAwMDAw''@;'; put 'put ''KSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMnZtLWJ1ZyUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyNC43MDMxMjUlMkMlMjAxMi4wMDAwMDApJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGlkJTNEJTIyUmVjdGFuZ2xlLTQyJTIyJTIwZmlsbC1vcGFjaXR5JTNEJTIyMC4yNSUyMiUyMGZpbGwlM0QlMjIlMjNEREREREQlMjIlMjBvcGFjaXR5JTNEJTIyMC42JTIyJTIweCUzRCUyMjAlMjIlMjB5''@;'; put 'put ''JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMzYlMjIlMjBoZWlnaHQlM0QlMjIzNiUyMiUyMHJ4JTNEJTIyMyUyMiUzRSUzQyUyRnJlY3QlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk03LjYz''@;'; put 'put ''OTQ4Mzc2JTJDMTMuODc2MjQwMiUyMEM3LjMyMjY1MzI0JTJDMTMuMjA5NzA4MiUyMDYuNTM5NzgxNTIlMkMxMi45MDg1MTM5JTIwNS44MDkyMzA0MiUyQzEzLjIxOTkzNCUyMEM1LjA3NzcxMDQzJTJDMTMuNTMyMjgzNyUyMDQuODA5MzI0OTUlMkMxNC4zMTAzNjkxJTIwNS4xMzk3MjAwNyUy''@;'; put 'put ''QzE0Ljk3NjkwMTElMjBMOC4yMDcyNTk1NCUyQzIxLjM3NDQ5MjMlMjBDOC42ODk3NzIwNyUyQzIyLjM3ODQ3MzUlMjA5LjE5ODQ0NDkxJTJDMjIuOTAzNzA0NCUyMDEwLjE1MjgxMjElMkMyMi45MDM3MDQ0JTIwQzExLjE3MjA5NTUlMkMyMi45MDM3MDQ0JTIwMTEuNjE2ODIwOSUyQzIyLjMz''@;'; put 'put ''MTA2MzMlMjAxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMEMxMi4wOTgzNjQ2JTJDMjEuMzc0NDkyMyUyMDE0Ljc3NDQ2ODIlMkMxNS43ODQ3MzQxJTIwMTQuODAxNTk3NCUyQzE1LjcyNjE2ODUlMjBDMTQuODI4NzI2NiUyQzE1LjY2NjY3MzMlMjAxNC45MTQ5NTg4JTJDMTUuNDg2MzI4NiUy''@;'; put 'put ''MDE1LjE4NzIxOTklMkMxNS40ODcyNTgyJTIwQzE1LjQxNzgxODIlMkMxNS40OTAwNDclMjAxNS42MTA2Mjk0JTJDMTUuNjY1NzQzNyUyMDE1LjYxMDYyOTQlMkMxNS45MDE4NjUyJTIwTDE1LjYxMDYyOTQlMkMyMS4zNjk4NDQzJTIwQzE1LjYxMDYyOTQlMkMyMi4yMTIwNzMlMjAxNi4wOTc5''@;'; put 'put ''ODY1JTJDMjIuOTAzNzA0NCUyMDE3LjAzNDkxMzQlMkMyMi45MDM3MDQ0JTIwQzE3Ljk3MTg0MDMlMkMyMi45MDM3MDQ0JTIwMTguNDc4NTc1NCUyQzIyLjIxMjA3MyUyMDE4LjQ3ODU3NTQlMkMyMS4zNjk4NDQzJTIwTDE4LjQ3ODU3NTQlMkMxNi44OTY1NTAzJTIwQzE4LjQ3ODU3NTQlMkMx''@;'; put 'put ''Ni4wMzM4NzAyJTIwMTkuMTIxOTI1NCUyQzE1LjQ3NDI0MzYlMjAyMC4wMDA3MTgzJTJDMTUuNDc0MjQzNiUyMEMyMC44Nzg1NDIzJTJDMTUuNDc0MjQzNiUyMDIxLjQ2Mzc1ODMlMkMxNi4wNTI0NjI0JTIwMjEuNDYzNzU4MyUyQzE2Ljg5NjU1MDMlMjBMMjEuNDYzNzU4MyUyQzIxLjM2OTg0''@;'; put 'put ''NDMlMjBDMjEuNDYzNzU4MyUyQzIyLjIxMjA3MyUyMDIxLjk1MjA4NDIlMkMyMi45MDM3MDQ0JTIwMjIuODg4MDQyMyUyQzIyLjkwMzcwNDQlMjBDMjMuODI0MDAwMyUyQzIyLjkwMzcwNDQlMjAyNC4zMzI2NzMxJTJDMjIuMjEyMDczJTIwMjQuMzMyNjczMSUyQzIxLjM2OTg0NDMlMjBMMjQu''@;'; put 'put ''MzMyNjczMSUyQzE2Ljg5NjU1MDMlMjBDMjQuMzMyNjczMSUyQzE2LjAzMzg3MDIlMjAyNC45NzUwNTQzJTJDMTUuNDc0MjQzNiUyMDI1Ljg1Mzg0NzIlMkMxNS40NzQyNDM2JTIwQzI2LjczMDcwMjMlMkMxNS40NzQyNDM2JTIwMjcuMzE2ODg3MSUyQzE2LjA1MjQ2MjQlMjAyNy4zMTY4ODcx''@;'; put 'put ''JTJDMTYuODk2NTUwMyUyMEwyNy4zMTY4ODcxJTJDMjEuMzY5ODQ0MyUyMEMyNy4zMTY4ODcxJTJDMjIuMjEyMDczJTIwMjcuODA1MjEzMSUyQzIyLjkwMzcwNDQlMjAyOC43NDIxNCUyQzIyLjkwMzcwNDQlMjBDMjkuNjc3MTI5MSUyQzIyLjkwMzcwNDQlMjAzMC4xODQ4MzMxJTJDMjIuMjEy''@;'; put 'put ''MDczJTIwMzAuMTg0ODMzMSUyQzIxLjM2OTg0NDMlMjBMMzAuMTg0ODMzMSUyQzE2LjI3ODM1ODIlMjBDMzAuMTg0ODMzMSUyQzE0LjQwNzA0ODglMjAyOC42MTgxMjA3JTJDMTMuMDk2Mjk1NiUyMDI2LjczMDcwMjMlMkMxMy4wOTYyOTU2JTIwQzI0Ljg0NTIyMTYlMkMxMy4wOTYyOTU2JTIw''@;'; put 'put ''MjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjAyMy42NjUxMDA2JTJDMTQuMzQ3NTUzNiUyMEMyMy4wMzcyNTMlMkMxMy41NjY2NzkzJTIwMjIuMTcyMDI0NyUyQzEzLjA5NzIyNTIlMjAyMC43MDg5ODQ3JTJDMTMuMDk3MjI1MiUyMEMxOS4xNjQ1NTclMkMxMy4wOTcyMjUyJTIwMTcuODEyOTQw''@;'; put 'put ''NiUyQzE0LjM0NzU1MzYlMjAxNy44MTI5NDA2JTJDMTQuMzQ3NTUzNiUyMEMxNy4xODQxMjQxJTJDMTMuNTY2Njc5MyUyMDE2LjExNTQyNjclMkMxMy4wOTcyMjUyJTIwMTUuMjMwODIwNCUyQzEzLjA5NzIyNTIlMjBDMTMuODYxNzYzOCUyQzEzLjA5NzIyNTIlMjAxMi43NzQ2NTcyJTJDMTMu''@;'; put 'put ''Njc1NDQ0JTIwMTIuMTExOTI5MiUyQzE1LjEzMDI4NzElMjBMMTAuMTUyODEyMSUyQzE5LjU2MDgxODklMjBMNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjIlMjBpZCUzRCUyMkZpbGwtNCUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUy''@;'; put 'put ''RnN2ZyUzRSIpfS5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotY29udmVydEJhc2VsaW5lVG9CYXNlMjAoMSkhaW1wb3J0''@;'; put 'put ''YW50O292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtY29udmVydEJhc2VsaW5lVG9CYXNlMjAoMSkgMCFpbXBvcnRhbnR9LmNsci1wb3BvdmVyLWNvbnRlbnR7cG9zaXRpb246Zml4ZWQ7''@;'; put 'put ''ei1pbmRleDoxMDUwfTpyb290ey0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW46LjNyZW07LS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luOi42cmVtOy0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmc6LjZyZW07LS1jbHItYnRuLXZlcnRpY2FsLXBhZGRpbmc6MDstLWNsci1idG4tcGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1jbHItYnRuLXZlcnRpY2FsLXBhZGRpbmcpIHZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKTstLWNsci1idG4taGVpZ2h0OjEuOHJlbTstLWNsci1idG4taGVpZ2h0LXNtOjEuMnJlbTstLWNsci1idG4tZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1ib3JkZXItcmFk''@;'; put 'put ''aXVzOi4xNXJlbTstLWNsci1idG4tYm9yZGVyLXdpZHRoOi4wNXJlbTstLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcjp0cmFuc3BhcmVudDstLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1saW5lLWhlaWdodDoxLjE1cmVtOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWZvbnQt''@;'; put 'put ''c2l6ZTouNTVyZW07LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodDoxLjJyZW07LS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtcGFkZGluZzowIC42cmVtOy0tY2xyLWJ0bi1hcHBlYXJh''@;'; put 'put ''bmNlLXN0YW5kYXJkLWljb24tc2l6ZTouNnJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxpbmUtaGVpZ2h0OjEuOHJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxldHRlci1zcGFjaW5nOi4xMmVtOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC1zaXplOi42cmVtOy0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC13ZWlnaHQ6NTAwOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0taGVpZ2h0OjEuOHJlbTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmc6MCAuNnJlbTstLWNsci1idG4tZGVmYXVsdC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0''@;'; put 'put ''aW9uLTYwMCk7LS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01''@;'; put 'put ''MCk7LS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFj''@;'; put 'put ''dGlvbi02MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTUwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1v''@;'; put 'put ''dXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTUwKTstLWNsci1idG4tcHJpbWFyeS1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNTAwKTstLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWJ0bi1w''@;'; put 'put ''cmltYXJ5LWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tc3VjY2Vzcy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItY29sb3Itc3VjY2Vzcy03MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTgwMCk7LS1jbHItYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''aG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTkwMCk7LS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAw''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy03MDAp''@;'; put 'put ''Oy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy03MDApOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92''@;'; put 'put ''ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTApOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtOTAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9y''@;'; put 'put ''LXN1Y2Nlc3MtNDAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm9yZGVyLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLWRhbmdlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5n''@;'; put 'put ''ZXItNzAwKTstLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWRhbmdlci1kaXNh''@;'; put 'put ''YmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5n''@;'; put 'put ''ZXItODAwKTstLWNsci1idG4tZGFuZ2VyLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTcwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMTAwKTstLWNs''@;'; put 'put ''ci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05MDApOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3gtc2hhZG93LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMjAwKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLXdhcm5pbmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLXdhcm5pbmctYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci03MDApOy0tY2xyLWJ0bi13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4td2FybmluZy1ib3gtc2hhZG93''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1j''@;'; put 'put ''bHItYnRuLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTcwMCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJu''@;'; put 'put ''aW5nLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItODAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItMTAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0yMDApOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTst''@;'; put 'put ''LWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJs''@;'; put 'put ''ZWQtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1saW5rLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1idG4tbGluay1iZy1jb2xvcjp0cmFuc3BhcmVudDstLWNsci1idG4tbGluay1ib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''aG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstZGlzYWJs''@;'; put 'put ''ZWQtYm9yZGVyLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3I6dHJhbnNwYXJlbnQ7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItYnRuLWludmVyc2UtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtMCk7LS1jbHItYnRuLWludmVyc2UtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1pbnZlcnNlLWJnLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwg''@;'; put 'put ''LjE1KTstLWNsci1idG4taW52ZXJzZS1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMCwgMCwgMCwgLjI1KTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3It''@;'; put 'put ''bmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1idG4taW52ZXJzZS1j''@;'; put 'put ''aGVja2VkLWJnLWNvbG9yOnJnYmEoMjU1LCAyNTUsIDI1NSwgLjE1KTstLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJ0bi1pY29uLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xv''@;'; put 'put ''ciwgIzY2NjY2Nik7LS1jbHItYnRuLWdyb3VwLWZvY3VzLW91dGxpbmU6IzUxY2JlZX0uYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci1idG4tYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItYnRuLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7bWluLXdpZHRoOjMuNnJlbTttYXgtd2lkdGg6MThyZW07d2hpdGUtc3BhY2U6''@;'; put 'put ''bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWNvbG9yOiMwMDcyYTM7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7bGluZS1oZWlnaHQ6MS44cmVtO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWxpbmUtaGVpZ2h0LCAxLjhyZW0pO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNnJlbTtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0tZm9udC1zaXplLCAuNnJlbSk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLWZvbnQtd2VpZ2h0LCA1MDApO2hlaWdodDoxLjhyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1m''@;'; put 'put ''b3JtLWhlaWdodCwgMS44cmVtKTtwYWRkaW5nOjAgLjZyZW07cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2UtZm9ybS1wYWRkaW5nLCAwIC42cmVtKX0uYnRuOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4gY2RzLWljb24sLmJ0biBjbHItaWNvbntjb2xvcjojMDA3MmEz''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LmJ0bjp2aXNpdGVke2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yLCAjMDA3MmEzKX0uYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2UzZjVmYztiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItY29sb3IsICMwMDU2N2EpfS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2JveC1z''@;'; put 'put ''aGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3IsICMxNzliZDMpIGluc2V0fS5idG4uZGlzYWJsZWQsLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojOGM4YzhjO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi1ncm91cD4uYnRuIGNsci1pY29uLC5idG4gY2xyLWljb257dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLS4xcmVtLDApfS5idG4tZ3JvdXA+LmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYnRuIGNkcy1pY29ue21hcmdpbi10b3A6LS4xNHJlbX0uYnRuLmJ0bi1zZWNvbmRhcnksLmJ0bi5idG4taW5mbywuYnRuLmJ0bi1vdXRsaW5lLC5idG4uYnRuLXByaW1hcnktb3V0bGluZSwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnksLmJ0''@;'; put 'put ''bi5idG4tb3V0bGluZS1zZWNvbmRhcnksLmJ0bi5idG4taW5mby1vdXRsaW5lLC5idG4tc2Vjb25kYXJ5IC5idG4sLmJ0bi1pbmZvIC5idG4sLmJ0bi1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnkgLmJ0biwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtaW5mbyAuYnRue2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjMDA3MmEz''@;'; put 'put ''KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeSBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnkgY2xyLWljb24sLmJ0bi5idG4taW5mbyBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXByaW1hcnkgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZSBjbHItaWNvbiwuYnRuLXNlY29uZGFy''@;'; put 'put ''eSAuYnRuIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LW91dGxpbmUtcHJpbWFyeSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNvbntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tc2Vjb25kYXJ5OnZpc2l0ZWQsLmJ0bi5idG4taW5m''@;'; put 'put ''bzp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmU6dmlzaXRlZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6dmlzaXRlZCwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OnZp''@;'; put 'put ''c2l0ZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lOnZpc2l0ZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bjp2aXNpdGVkLC5idG4taW5mbyAuYnRuOnZpc2l0ZWQsLmJ0bi1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOnZpc2l0ZWQsLmJ0bi1zZWNvbmRhcnktb3V0''@;'; put 'put ''bGluZSAuYnRuOnZpc2l0ZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjp2aXNpdGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjp2aXNpdGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOnZpc2l0ZWR7Y29sb3I6IzAwNzJhMztj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLXNlY29uZGFyeTpob3ZlciwuYnRuLmJ0bi1pbmZvOmhvdmVyLC5idG4uYnRuLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpob3ZlciwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLWluZm8gLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUgLmJ0''@;'; put 'put ''bjpob3ZlciwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhv''@;'; put 'put ''dmVyLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTNmNWZjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yLCAjZTNmNWZjKTtjb2xvcjojMDA1NjdhO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1o''@;'; put 'put ''b3Zlci1jb2xvciwgIzAwNTY3YSl9LmJ0bi5idG4tc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1pbmZvOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5idG4taW5mbyAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0''@;'; put 'put ''bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5idG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJveC1zaGFkb3ctY29sb3IsICMxNzliZDMpIGluc2V0fS5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi5idG4taW5mby5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQsLmJ0''@;'; put 'put ''bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCwuYnRuLXNlY29uZGFyeSAuYnRuLmRpc2Fi''@;'; put 'put ''bGVkLC5idG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tb3V0''@;'; put 'put ''bGluZS1pbmZvIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojOGM4YzhjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAj''@;'; put 'put ''OGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tcHJpbWFyeSwuYnRuLXByaW1hcnkgLmJ0bntib3JkZXItY29sb3I6IzAwNzJhMztib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJvcmRlci1jb2xvciwgIzAwNzJhMyk7YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWJnLWNvbG9yLCAjMDA3MmEzKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXByaW1hcnkgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXByaW1hcnk6dmlzaXRlZCwuYnRuLXByaW1hcnkgLmJ0bjp2aXNpdGVke2NvbG9yOiNmZmY7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDU2N2E7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29s''@;'; put 'put ''b3IsICMwMDU2N2EpO2NvbG9yOiNlM2Y1ZmM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yLCAjZTNmNWZjKX0uYnRuLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXByaW1hcnkgLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMxNzliZDMgaW5zZXQ7Ym94LXNo''@;'; put 'put ''YWRvdzowIC4xcmVtIDAgMCB2YXIoLS1jbHItYnRuLXByaW1hcnktYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5zZXR9LmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5idG4tcHJpbWFyeSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeSAu''@;'; put 'put ''YnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVkLWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1h''@;'; put 'put ''cnktZGlzYWJsZWQtYmctY29sb3IsICNjY2NjY2MpO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tc3VjY2VzcywuYnRuLXN1Y2Nlc3MgLmJ0''@;'; put 'put ''bntib3JkZXItY29sb3I6IzNjODUwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvciwgIzNjODUwMCk7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yLCAjM2M4NTAwKTtj''@;'; put 'put ''b2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXN1Y2Nlc3MgY2RzLWljb24sLmJ0bi5idG4tc3VjY2VzcyBjbHItaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjoj''@;'; put 'put ''ZmZmO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXN1Y2Nlc3M6dmlzaXRlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjp2aXNpdGVke2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''czpob3ZlciwuYnRuLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3IsICMzMDZiMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVy''@;'; put 'put ''LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMjU1MjAwIGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJveC1zaGFkb3ctY29sb3IsICMyNTUy''@;'; put 'put ''MDApIGluc2V0fS5idG4uYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3MgLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLXdhcm5pbmcsLmJ0bi13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOiNkYjIxMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNkYjIxMDApO2JhY2tncm91bmQtY29sb3I6I2RiMjEwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvciwgI2RiMjEwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi13''@;'; put 'put ''YXJuaW5nIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmcgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi13YXJuaW5n''@;'; put 'put ''OnZpc2l0ZWQsLmJ0bi13YXJuaW5nIC5idG46dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWJnLWNvbG9yLCAjYzIxZDAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ob3Zlci1jb2xvciwgd2hpdGUpfS5idG4uYnRuLXdhcm5pbmc6YWN0aXZlLC5idG4td2FybmluZyAuYnRuOmFjdGl2''@;'; put 'put ''ZXtib3gtc2hhZG93OjAgLjFyZW0gIzk5MTcwMCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4td2FybmluZy1ib3gtc2hhZG93LWNvbG9yLCAjOTkxNzAwKSBpbnNldH0uYnRuLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQs''@;'; put 'put ''LmJ0bi13YXJuaW5nIC5idG4uZGlzYWJsZWQsLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFk''@;'; put 'put ''b3c6bm9uZX0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi1kYW5nZXIgLmJ0bntib3JkZXItY29sb3I6I2RiMjEwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYm9yZGVyLWNvbG9yLCAjZGIyMTAwKTtiYWNrZ3JvdW5kLWNvbG9yOiNkYjIxMDA7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1iZy1jb2xvciwgI2RiMjEwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvciwgd2hpdGUpfS5idG4uYnRuLWRhbmdlciBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLWRhbmdlciAuYnRuIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi1kYW5nZXI6dmlzaXRlZCwuYnRuLWRhbmdlciAuYnRuOnZpc2l0ZWR7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1j''@;'; put 'put ''b2xvciwgd2hpdGUpfS5idG4uYnRuLWRhbmdlcjpob3ZlciwuYnRuLWRhbmdlciAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWJnLWNvbG9yLCAjYzIxZDAwKTtjb2xvcjojZmZmO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjFyZW0gIzk5MTcwMCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4tZGFuZ2VyLWJv''@;'; put 'put ''eC1zaGFkb3ctY29sb3IsICM5OTE3MDApIGluc2V0fS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bi5kaXNhYmxlZCwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''YW5nZXItZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItY29sb3I6IzY2''@;'; put 'put ''Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjNjY2NjY2KTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lIC5idG4sLmJ0bi5idG4taW5mby1vdXRsaW5lLC5idG4taW5mby1vdXRsaW5lIC5i''@;'; put 'put ''dG4sLmJ0bi5idG4tb3V0bGluZS1pbmZvLC5idG4tb3V0bGluZSAuYnRue2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbyBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb257Y29sb3I6IzAw''@;'; put 'put ''NzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bjp2aXNpdGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTp2aXNpdGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46''@;'; put 'put ''dmlzaXRlZCwuYnRuLmJ0bi1vdXRsaW5lLWluZm86dmlzaXRlZCwuYnRuLW91dGxpbmUgLmJ0bjp2aXNpdGVke2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IsICMwMDcyYTMpfS5idG4uYnRuLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmhvdmVyLC5idG4uYnRuLWluZm8tb3V0bGluZTpob3ZlciwuYnRuLWluZm8tb3V0bGluZSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtaW5mbzpob3ZlciwuYnRuLW91dGxpbmUgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlM2Y1ZmM7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvciwgIzAwNTY3YSl9LmJ0bi5idG4tb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlLC5idG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtaW5mbzphY3RpdmUsLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjMTc5YmQzIGluc2V0O2Jv''@;'; put 'put ''eC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5zZXR9LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4taW5mby1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bjpkaXNhYmxlZHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVk''@;'; put 'put ''LWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItY29s''@;'; put 'put ''b3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtib3gtc2hhZG93Om5vbmV9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzcywuYnRuLXN1Y2Nlc3Mt''@;'; put 'put ''b3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG57Ym9yZGVyLWNvbG9yOiMzYzg1MDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJvcmRlci1jb2xvciwgIzNjODUwMCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzNjODUwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvciwgIzNjODUwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNkcy1pY29uLC5idG4u''@;'; put 'put ''YnRuLXN1Y2Nlc3Mtb3V0bGluZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2xyLWljb257Y29sb3I6IzNjODUwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvciwgIzNjODUwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOnZp''@;'; put 'put ''c2l0ZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOnZpc2l0ZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjp2aXNpdGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46dmlzaXRlZHtjb2xvcjojM2M4NTAwO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yLCAj''@;'; put 'put ''M2M4NTAwKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDA7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2RmZjBkMCk7Y29sb3I6IzI1NTIwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1jb2xvciwgIzI1NTIwMCl9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmFj''@;'; put 'put ''dGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMXJlbSAjNWViNzE1IGluc2V0O2JveC1zaGFkb3c6MCAuMXJlbSAwIDAgdmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgIzVlYjcxNSkgaW5zZXR9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQsLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvciwgIzhjOGM4Yyk7Ym94LXNoYWRvdzpub25lfS5idG4u''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRue2JvcmRlci1jb2xvcjojYzIxZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNjMjFkMDApO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiNkYjIxMDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxp''@;'; put 'put ''bmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZyBjbHItaWNvbiwuYnRuLXdhcm5p''@;'; put 'put ''bmctb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOiNkYjIxMDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13''@;'; put 'put ''YXJuaW5nLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTp2aXNpdGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzp2aXNpdGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46dmlzaXRlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOnZpc2l0ZWR7''@;'; put 'put ''Y29sb3I6I2RiMjEwMDtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvciwgI2RiMjEwMCl9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyLC5idG4t''@;'; put 'put ''b3V0bGluZS13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmVkZGQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItYmctY29sb3IsICNmZWRkZDcpO2NvbG9yOiM5OTE3MDA7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmUtaG92ZXItY29sb3IsICM5OTE3MDApfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmFjdGl2ZXtib3gt''@;'; put 'put ''c2hhZG93OjAgLjFyZW0gI2ZjYzViYiBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJveC1zaGFkb3ctY29sb3IsICNmY2M1YmIpIGluc2V0fS5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGlu''@;'; put 'put ''ZS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFkb3c6bm9uZX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRue2JvcmRlci1jb2xvcjojYzIx''@;'; put 'put ''ZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJvcmRlci1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IsIHRyYW5zcGFyZW50''@;'; put 'put ''KTtjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNkcy1pY29u''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHIt''@;'; put 'put ''aWNvbntjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOnZpc2l0ZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6dmlzaXRlZCwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46dmlzaXRl''@;'; put 'put ''ZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46dmlzaXRlZHtjb2xvcjojZGIyMTAwO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IsICNkYjIxMDApfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmhvdmVyLC5idG4t''@;'; put 'put ''ZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmVkZGQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1iZy1jb2xvciwgI2ZlZGRkNyk7Y29sb3I6Izk5MTcw''@;'; put 'put ''MDtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yLCAjOTkxNzAwKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjphY3RpdmUsLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlciAuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjFyZW0gI2ZjYzViYiBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYm94LXNoYWRvdy1jb2xvciwgI2ZjYzViYikgaW5zZXR9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlz''@;'; put 'put ''YWJsZWQsLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''O29wYWNpdHk6LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IsIHRyYW5zcGFyZW50KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICM2NjY2NjYpO2JveC1zaGFkb3c6bm9uZX0uYnRuLmJ0bi1saW5rLC5idG4tbGluayAuYnRue2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvciwgdHJh''@;'; put 'put ''bnNwYXJlbnQpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IsIHRyYW5zcGFyZW50KTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tbGlu''@;'; put 'put ''ayBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rIGNsci1pY29uLC5idG4tbGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYnRuIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yLCAjMDA3MmEzKX0uYnRuLmJ0bi1saW5rOnZpc2l0ZWQsLmJ0bi1s''@;'; put 'put ''aW5rIC5idG46dmlzaXRlZHtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi5idG4tbGluazpob3ZlciwuYnRuLWxpbmsgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IsICMwMDU2N2EpfS5idG4uYnRuLWxpbms6YWN0aXZlLC5idG4tbGluayAuYnRuOmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9LmJ0''@;'; put 'put ''bi5idG4tbGluay5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rOmRpc2FibGVkLC5idG4tbGluayAuYnRuLmRpc2FibGVkLC5idG4tbGluayAuYnRuOmRpc2FibGVke2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yLCAjNjY2NjY2KTtjdXJzb3I6bm90LWFs''@;'; put 'put ''bG93ZWQ7b3BhY2l0eTouNDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yLCB0cmFuc3BhcmVudCk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLWludmVyc2UsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5idG4taW52ZXJzZSAuYnRue2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWludmVyc2UtYm9yZGVyLWNvbG9yLCB3aGl0ZSk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNl''@;'; put 'put ''LWNvbG9yLCB3aGl0ZSl9LmJ0bi5idG4taW52ZXJzZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi1pbnZlcnNl''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1pbnZlcnNlIC5idG4gY2xyLWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IsIHdoaXRlKX0uYnRuLmJ0bi1pbnZlcnNlOnZpc2l0ZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOnZpc2l0ZWQsLmJ0''@;'; put 'put ''bi1pbnZlcnNlIC5idG46dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jb2xvciwgd2hpdGUpfS5idG4uYnRuLWludmVyc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4taW52ZXJzZSAuYnRuOmhvdmVye2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6I2ZmZmZmZjI2O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4xNSkpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWNvbG9yLCB3aGl0ZSl9''@;'; put 'put ''LmJ0bi5idG4taW52ZXJzZTphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLWludmVyc2UgLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMwMDAwMDA0MCBpbnNldDtib3gtc2hhZG93OjAgLjFyZW0gMCAwIHZhcigtLWNsci1idG4taW52''@;'; put 'put ''ZXJzZS1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDAsIDAsIDAsIC4yNSkpIGluc2V0fS5idG4uYnRuLWludmVyc2UuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuLmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVke2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWNvbG9yLCB3aGl0ZSk7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6''@;'; put 'put ''LjQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1iZy1jb2xvciwgdHJhbnNwYXJlbnQpO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yLCB3aGl0ZSk7Ym94LXNoYWRvdzpub25lfS5idG4uYnRuLXNtLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLXNtIC5idG57bGluZS1oZWlnaHQ6MS4xNXJlbTtsaW5lLWhlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtbGlu''@;'; put 'put ''ZS1oZWlnaHQsIDEuMTVyZW0pO2xldHRlci1zcGFjaW5nOi4wNzNlbTtmb250LXNpemU6LjU1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtZm9udC1zaXplLCAuNTVyZW0pO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXdlaWdodDp2YXIoLS1jbHItYnRuLWFw''@;'; put 'put ''cGVhcmFuY2Utc3RhbmRhcmQtZm9udC13ZWlnaHQsIDUwMCk7aGVpZ2h0OjEuMnJlbTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWhlaWdodCwgMS4ycmVtKTtwYWRkaW5nOjAgLjZyZW07cGFkZGluZzp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQt''@;'; put 'put ''cGFkZGluZywgMCAuNnJlbSl9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmJ0bnttYXJnaW4tdG9wOi4zcmVtO21hcmdpbi10b3A6dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4sIC4zcmVtKTttYXJnaW4tYm90dG9tOi4zcmVtO21hcmdp''@;'; put 'put ''bi1ib3R0b206dmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4sIC4zcmVtKTttYXJnaW4tcmlnaHQ6LjZyZW07bWFyZ2luLXJpZ2h0OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4sIC42cmVtKTttYXJnaW4tbGVmdDowfS5idG4uYnRuLWxpbmt7bWFyZ2luLXJpZ2h0OjB9LmJ0''@;'; put 'put ''bi5idG4tbGluay5idG4taW52ZXJzZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4uYnRuLWxpbmt7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRu''@;'; put 'put ''LWxpbmspIGNsci1pY29ue3dpZHRoOi42cmVtO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTtoZWlnaHQ6LjZyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTt0cmFuc2Zv''@;'; put 'put ''cm06dHJhbnNsYXRlM2QoMCwtLjA1cmVtLDApfS5idG4tc206bm90KC5idG4tbGluaykgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNkcy1pY29ue3dpZHRoOi42cmVtO3dpZHRoOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFu''@;'; put 'put ''ZGFyZC1pY29uLXNpemUsIC42cmVtKTtoZWlnaHQ6LjZyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1pY29uLXNpemUsIC42cmVtKTttYXJnaW4tdG9wOi0uMXJlbX0uYnRuLWljb257bWluLXdpZHRoOjB9LmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjojY2NjO2NvbG9yOnZhcigtLWNsci1idG4taWNvbi1kaXNhYmxlZC1jb2xvciwgI2NjY2NjYyl9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlLC5i''@;'; put 'put ''dG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZSwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLWNvbG9yOiMwMDcyYTM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''cHJpbWFyeS1ib3JkZXItY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1iZy1jb2xvciwgIzAwNzJhMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktY29sb3IsIHdoaXRl''@;'; put 'put ''KX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGUgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1z''@;'; put 'put ''dWNjZXNzIC5kcm9wZG93bi10b2dnbGUgY2xyLWljb24sLmJ0bi1ncm91cC5idG4td2FybmluZyAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbiwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRv''@;'; put 'put ''Z2dsZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvciwgd2hpdGUpfS5idG4tZ3JvdXAuYnRuLXByaW1hcnkgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5i''@;'; put 'put ''dG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTp2aXNpdGVkLC5idG4tZ3JvdXAuYnRuLWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOnZpc2l0ZWR7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktY29sb3IsIHdoaXRlKX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmJ0bi1ncm91cC5idG4tc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTpob3Zl''@;'; put 'put ''ciwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDU2N2E7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29sb3IsICMwMDU2N2EpO2NvbG9yOiNlM2Y1ZmM7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yLCAjZTNmNWZjKX0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsLmJ0bi1ncm91cC5idG4td2FybmluZyAuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xlOmFjdGl2ZSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Ym94LXNoYWRvdzowIC4xcmVtICMxNzliZDMgaW5zZXQ7Ym94LXNoYWRvdzowIC4xcmVtIDAgMCB2YXIoLS1jbHItYnRuLXByaW1hcnktYm94LXNoYWRvdy1jb2xvciwgIzE3OWJkMykgaW5z''@;'; put 'put ''ZXR9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLXByaW1hcnkgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4t''@;'; put 'put ''c3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGUuZGlzYWJsZWQsLmJ0bi1ncm91cC5idG4tZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3IsICNjY2NjY2Mp''@;'; put 'put ''O2JveC1zaGFkb3c6bm9uZX0uYnRuLWdyb3VwLmJ0bi1kYW5nZXIgOmRpc2FibGVke2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS0tLWNsci1jb2xvci1uZXV0cmFsLTQwMCwgI2NjY2NjYyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci1j''@;'; put 'put ''b2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJvcmRlci1jb2xvciwgdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYmctY29sb3IsIHRyYW5zcGFyZW50KTtj''@;'; put 'put ''b2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbntjb2xvcjojMDA3MmEzO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tbGluay1jb2xvciwgIzAwNzJhMyl9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOnZpc2l0ZWR7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY29sb3IsICMwMDcyYTMpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yLCB0cmFuc3BhcmVudCk7Y29sb3I6IzAwNTY3YTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IsICMwMDU2''@;'; put 'put ''N2EpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Ym94LXNoYWRvdzpub25lfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y29sb3I6IzY2''@;'; put 'put ''Njtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IsICM2NjY2NjYpO2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3Is''@;'; put 'put ''IHRyYW5zcGFyZW50KTtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kaXNhYmxlZC1ib3JkZXItY29sb3IsIHRyYW5zcGFyZW50KTtib3gtc2hhZG93Om5vbmV9LmJ0bi1ncm91cC5idG4tc20gLmJ0bi1ncm91cC1vdmVyZmxvdz4uZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1ncm91cC5idG4gLmJ0bi1ncm91cC1vdmVyZmxvdz4uZHJvcGRvd24tdG9nZ2xle2xpbmUtaGVpZ2h0OjEuMTVyZW07bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWxpbmUt''@;'; put 'put ''aGVpZ2h0LCAxLjE1cmVtKTtsZXR0ZXItc3BhY2luZzouMDczZW07Zm9udC1zaXplOi41NXJlbTtmb250LXNpemU6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWZvbnQtc2l6ZSwgLjU1cmVtKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBl''@;'; put 'put ''YXJhbmNlLXN0YW5kYXJkLWZvbnQtd2VpZ2h0LCA1MDApO2hlaWdodDoxLjJyZW07aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQsIDEuMnJlbSk7cGFkZGluZzowIC42cmVtO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBh''@;'; put 'put ''ZGRpbmcsIDAgLjZyZW0pfS5jaGVja2JveC5idG4sLmNoZWNrYm94LWlubGluZS5idG4sLnJhZGlvLmJ0biwucmFkaW8taW5saW5lLmJ0bntwYWRkaW5nOjB9LmNoZWNrYm94LmJ0biBsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwucmFkaW8uYnRuIGxhYmVsLC5yYWRpby1pbmxp''@;'; put 'put ''bmUuYnRuIGxhYmVse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6aW5oZXJpdDtwYWRkaW5nOjAgLjZyZW07Y3Vyc29yOnBvaW50ZXJ9LmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmUsLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJl''@;'; put 'put ''bDphZnRlciwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmUsLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7Y29udGVudDpub25lfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6''@;'; put 'put ''YmVmb3JlLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6YWZ0ZXIsLnJhZGlvLWlubGluZS5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6YmVmb3JlLC5yYWRpby1pbmxpbmUuYnRuIGlucHV0W3R5cGU9cmFkaW9dK2xhYmVsOmFmdGVye2NvbnRlbnQ6bm9uZX0uY2hlY2ti''@;'; put 'put ''b3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2ti''@;'; put 'put ''b3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7Y29sb3I6I2ZmZn0uY2hlY2tib3guYnRuIGxhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGxhYmVse3dpZHRoOjEwMCV9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5l''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNo''@;'; put 'put ''ZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94''@;'; put 'put ''LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hd''@;'; put 'put ''OmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojMzA2YjAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gu''@;'; put 'put ''YnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0''@;'; put 'put ''bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2NvbG9yOiNmZmZ9LmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsLC5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxp''@;'; put 'put ''bmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMDA1NjdhfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5i''@;'; put 'put ''dG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2ZmZmZmZjI2O2NvbG9yOiNmZmZ9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2NvbG9yOiNmZmZ9LnJhZGlvLmJ0biBsYWJlbHt3aWR0aDoxMDAlfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5''@;'; put 'put ''cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztjb2xvcjojZmZmfS5y''@;'; put 'put ''YWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2Vk''@;'; put 'put ''K2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzMwNmIwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRp''@;'; put 'put ''by5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5i''@;'; put 'put ''dG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1p''@;'; put 'put ''Y29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6IzNjODUwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtd2FybmluZyBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFi''@;'; put 'put ''ZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6I2My''@;'; put 'put ''MWQwMDtjb2xvcjojZmZmfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwNTY3YX0ucmFkaW8uYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlu''@;'; put 'put ''cHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5yYWRpby5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmZmZmYyNjtjb2xvcjojZmZmfS5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtZmxleDttYXJnaW4tcmlnaHQ6LjZyZW19LmJ0bi1ncm91cCBjbHItZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItcmFkaXVzOjB9LmJ0bi1ncm91cCBjbHItZHJvcGRvd246bGFzdC1j''@;'; put 'put ''aGlsZCAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czouMTVyZW19LmJ0bi1ncm91cCAuYnRue21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDtvdmVyZmxvdzpoaWRkZW59LmJ0bi1ncm91cCAuYnRuIGxh''@;'; put 'put ''YmVse2hlaWdodDoxMDAlfS5idG4tZ3JvdXAgLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cywuYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXN7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO29wYWNpdHk6MTt0b3A6MDtoZWlnaHQ6MTAw''@;'; put 'put ''JTt3aWR0aDoxMDAlO2JveC1zaGFkb3c6MCAwIC4yNXJlbSAjNTFjYmVlO2JveC1zaGFkb3c6MCAwIC4yNXJlbSB2YXIoLS1jbHItYnRuLWdyb3VwLWZvY3VzLW91dGxpbmUsICM1MWNiZWUpO3BhZGRpbmc6LjE1cmVtIDAgLjE1cmVtIC4xNXJlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRl''@;'; put 'put ''ci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6IzUxY2JlZTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1ncm91cC1mb2N1cy1vdXRsaW5lLCAjNTFjYmVlKX0uYnRuLWdyb3VwIC5idG4gaW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6Oi1tcy1jaGVjaywuYnRuLWdyb3VwIC5idG4gaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Zm9jdXM6Oi1tcy1jaGVja3tkaXNwbGF5Om5vbmV9LmJ0bi1ncm91cCAuYnRuOm5vdCg6Zmlyc3QtY2hpbGQpe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmJ0bi1ncm91cCAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7''@;'; put 'put ''Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLnRv''@;'; put 'put ''b2x0aXA6bm90KDpsYXN0LWNoaWxkKSAuYnRue2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCkgLmJ0biwuYnRuLWdyb3VwLmJ0bi1wcmltYXJ5IC5idG46''@;'; put 'put ''bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCkgLmJ0biwuYnRuLWdyb3VwLmJ0bi1zdWNjZXNzIC5idG46bm90KDpsYXN0LWNoaWxkKSwuYnRuLWdyb3VwLmJ0bi1kYW5nZXIgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKSAu''@;'; put 'put ''YnRuLC5idG4tZ3JvdXAuYnRuLWRhbmdlciAuYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4td2FybmluZyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpIC5idG4sLmJ0bi1ncm91cC5idG4td2FybmluZyAuYnRuOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luOjA7bWFyZ2luLXJp''@;'; put 'put ''Z2h0Oi4wNXJlbTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWJ0bi1ib3JkZXItd2lkdGgsIC4wNXJlbSl9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAuZHJvcGRvd24tbWVudSAuYnRuLC5idG4tZ3JvdXAuYnRuLXN1Y2Nlc3MgLmRyb3Bkb3duLW1lbnUgLmJ0biwuYnRuLWdyb3VwLmJ0bi1kYW5n''@;'; put 'put ''ZXIgLmRyb3Bkb3duLW1lbnUgLmJ0biwuYnRuLWdyb3VwLmJ0bi13YXJuaW5nIC5kcm9wZG93bi1tZW51IC5idG57bWFyZ2luOjB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS5idG4tZ3JvdXA+LmJ0bi1ncm91cC1vdmVyZmxvdzpsYXN0LWNoaWxk''@;'; put 'put ''Om5vdCg6Zmlyc3QtY2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRu''@;'; put 'put ''LWdyb3VwPi5idG4tZ3JvdXAtb3ZlcmZsb3c6bGFzdC1jaGlsZDpmaXJzdC1jaGlsZD4uYnRuOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5idG4tZ3JvdXAgLmJ0bisuYnRue2JvcmRl''@;'; put 'put ''ci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAudG9vbHRpcDpub3QoOmZpcnN0LWNoaWxkKSAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cCAuYnRuKy5idG4tZ3JvdXAtb3ZlcmZsb3cgLmJ0bntib3JkZXItbGVmdDpub25lfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZSwuYnRuLWdyb3VwLmJ0bi1pY29uLWxpbmsuYnRuLWxpbmsgLmJ0biwuYnRuLWdyb3VwLmJ0bi1pY29uIC5idG57bWluLXdpZHRoOjB9LmJ0bi1ncm91cCAuY2xyLWljb24tdGl0bGV7ZGlzcGxheTpub25lO3RleHQtdHJhbnNmb3JtOm5vbmV9LmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2t9LmJ0bi1ncm91cCAuZHJvcGRvd24tbWVudSBjZHMtaWNvbiwuYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IC5jbHItaWNvbi10aXRsZXtkaXNwbGF5OmlubGluZX0uY2hlY2tib3gs''@;'; put 'put ''LnJhZGlve3Bvc2l0aW9uOnJlbGF0aXZlfS5jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSwuY2hlY2tib3ggaW5wdXRbdHlwZT1yYWRpb10sLnJhZGlvIGlucHV0W3R5cGU9Y2hlY2tib3hdLC5yYWRpbyBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0''@;'; put 'put ''OjA7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjB9LmNhcmQtZm9vdGVyIC5jaGVja2JveC5idG4gbGFiZWwsLmNhcmQtZm9vdGVyIC5yYWRpby5idG4gbGFiZWx7bGluZS1oZWlnaHQ6MS4xNXJlbX0uZHJvcGRvd24tbWVudS5jbHItYnV0dG9uLWdyb3VwLW1lbnV7dmlzaWJpbGl0eTp2aXNp''@;'; put 'put ''YmxlfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxLjhyZW07dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OjIwMDt0ZXh0LXNoYWRvdzpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY2xvc2UtY29sb3ItLW5vcm1hbCwgIzhjOGM4Yyl9LmNsb3NlIGNkcy1pY29uLC5jbG9zZSBjbHItaWNvbntmaWxsOiM4YzhjOGM7ZmlsbDp2YXIoLS1jbHItY2xv''@;'; put 'put ''c2UtY29sb3ItLW5vcm1hbCwgIzhjOGM4Yyl9LmNsb3NlOmZvY3VzLC5jbG9zZTpob3ZlciwuY2xvc2U6YWN0aXZle29wYWNpdHk6MTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jbG9zZS1jb2xvci0taG92ZXIsIGJsYWNrKX0uY2xvc2U6Zm9jdXMgY2RzLWljb24sLmNsb3NlOmZvY3Vz''@;'; put 'put ''IGNsci1pY29uLC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuY2xvc2U6aG92ZXIgY2xyLWljb24sLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6IzAwMDtmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci0taG92ZXIsIGJsYWNrKX0uY2xvc2U6Zm9jdXN7''@;'; put 'put ''b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfTpyb290ey0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tOTAwKTstLWNsci1hbGVydC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tY29sb3IpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eToxOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItb3BhY2l0eToxOy0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1vcGFjaXR5Oi44Oy0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6MTstLWNsci1hbGVydC1ib3JkZXJyYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWFsZXJ0LWluZm8tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MCk7LS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDApOy0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1h''@;'; put 'put ''Y3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LWNsb3NlLWljb24taG92ZXItb3BhY2l0eSk7LS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy01MCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtc3VjY2Vz''@;'; put 'put ''cy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9y''@;'; put 'put ''KTstLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYWxlcnQtc3Vj''@;'; put 'put ''Y2Vzcy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1zdWNjZXNzLWNs''@;'; put 'put ''b3NlLWljb24taG92ZXItb3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMCk7LS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1uZXV0cmFsLTkwMCk7LS1jbHItYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29u''@;'; put 'put ''LWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItb3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0xMDApOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTkwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05''@;'; put 'put ''MDApOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9z''@;'; put 'put ''ZS1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5OnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yOnZhcigtLWNsci1j''@;'; put 'put ''b2xvci1hY3Rpb24tNjAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1pbmZvLWljb24tY29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZv''@;'; put 'put ''bnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkp''@;'; put 'put ''Oy0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVy''@;'; put 'put ''LW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWJnLWNvbG9yOmhzbCgyNiwgMTAwJSwgMzglKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2Ut''@;'; put 'put ''aWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcjp2YXIoLS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWFwcC1hbGVydC1k''@;'; put 'put ''YW5nZXItYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tb3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tb3BhY2l0eSk7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHkpOy0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1zdWNjZXNzLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTcwMCk7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWlj''@;'; put 'put ''b24tY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2xyLWFwcC1sZXZlbC1hbGVydC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWNsb3NlLWljb24tY29sb3IpOy0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1vcGFjaXR5KTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1jb2xvcik7LS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5KTstLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wLCB3aGl0ZSk7LS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWluZm8tcGFnZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi04MDAsICMwMDU2N2EpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTkwMCwgIzhmNWEwMCk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdl''@;'; put 'put ''ci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTkwMCwgIzk5MTcwMCl9LmFsZXJ0LWljb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW07bWFyZ2luLWxlZnQ6LS4xNXJlbTttYXJnaW4tdG9wOi0uMnJlbX0uYWxlcnQtaWNvbi13cmFwcGVye2ZsZXg6MCAwIDEuMjVyZW07YWxp''@;'; put 'put ''Z24tc2VsZjpzdGFydDtwYWRkaW5nLXRvcDouMDVyZW07aGVpZ2h0Oi45cmVtfS5hbGVydC1pdGVte2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDpub3dyYXA7bWluLWhlaWdodDouOXJlbTttYXJnaW4tYm90dG9tOi4zcmVtfS5hbGVydC1pdGVtOmxhc3QtY2hpbGR7bWFy''@;'; put 'put ''Z2luLWJvdHRvbTowfS5hbGVydC1pdGVtc3tmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3BhZGRpbmc6LjVyZW0gLjU1cmVtO2Rpc3BsYXk6ZmxleH0uYWxlcnQtaXRlbT5zcGFuLC5hbGVydC10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXgtZ3JvdzoxO2ZsZXgt''@;'; put 'put ''c2hyaW5rOjE7ZmxleC1iYXNpczo5OCU7bWF4LXdpZHRoOjk4JTttYXJnaW4tcmlnaHQ6LjZyZW07dGV4dC1hbGlnbjpsZWZ0fS5hbGVydHtmb250LXNpemU6LjY1cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDouOXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTtib3gtc2l6aW5n''@;'; put 'put ''OmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdzt3aWR0aDphdXRvO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWFsZXJ0LWJvcmRlcnJhZGl1cywgLjE1cmVtKTttYXJnaW4tdG9wOi4zcmVtO2JhY2tncm91bmQ6I2UzZjVmYzti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yLCAjZTNmNWZjKTtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IsICM2NjY2NjYpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiMwMDU2N2E7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hbGVydC1pbmZvLWJvcmRlci1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0IC5hbGVydC1pY29ue2NvbG9yOiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0IC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiwu''@;'; put 'put ''YWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUu''@;'; put 'put ''YnRuOmZvY3VzLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojNGYwMDcwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKX0u''@;'; put 'put ''YWxlcnQgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4wNXJlbSAjNGYwMDcwIGluc2V0O2JveC1zaGFkb3c6MCAuMDVyZW0gMCAwIHZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3Is''@;'; put 'put ''ICM0ZjAwNzApIGluc2V0fS5hbGVydCAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydCAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydCAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQgLmNsb3Nle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''IzY2NjY2Nik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5LCAxKX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257ZmlsbDojNjY2O2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nil9LmFsZXJ0IC5jbG9zZTpmb2N1cywuYWxlcnQgLmNsb3NlOmhvdmVyLC5hbGVydCAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvciwgIzRmMDA3MCk7b3BhY2l0eToxO29wYWNp''@;'; put 'put ''dHk6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtaW5mb3tiYWNrZ3JvdW5kOiNlM2Y1ZmM7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtaW5mby1iZy1jb2xvciwgI2UzZjVmYyk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtaW5mby1mb250LWNvbG9yLCAjNjY2NjY2KTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojMDA1NjdhO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IsICMwMDU2N2EpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pY29ue2Nv''@;'; put 'put ''bG9yOiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvciwgIzAwNTY3YSl9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24t''@;'; put 'put ''Y29sb3IsICM2NjY2NjYpO2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjoj''@;'; put 'put ''NjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46aG92ZXIsLmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZl''@;'; put 'put ''LC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmZvY3VzLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6IzRmMDA3MDtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCl9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVt''@;'; put 'put ''ICM0ZjAwNzAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCkgaW5zZXR9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''OmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb246YWN0aXZlLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlOmFj''@;'; put 'put ''dGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKTtjb2xvcjojNGYwMDcwfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IsICM2NjY2NjYp''@;'; put 'put ''O29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tb3BhY2l0eSwgMSl9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOiM2NjY7ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5m''@;'; put 'put ''by1jbG9zZS1pY29uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmV7Y29sb3I6IzRmMDA3MDtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1j''@;'; put 'put ''bG9zZS1pY29uLWhvdmVyLWNvbG9yLCAjNGYwMDcwKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6I2RmZjBkMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWJnLWNvbG9yLCAjZGZmMGQwKTtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IsICM2NjY2NjYpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiMzMDZiMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNj''@;'; put 'put ''ZXNzLWJvcmRlci1jb2xvciwgIzMwNmIwMCl9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWljb257Y29sb3I6IzMwNmIwMDtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yLCAjMzA2YjAwKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9ucyAuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgIzY2NjY2Nik7Ym9yZGVyLWNvbG9yOiM2NjY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9''@;'; put 'put ''LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''LmJ0bjpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojNGYwMDcwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYw''@;'; put 'put ''MDcwKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzRmMDA3MCBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKSBpbnNldH0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb246aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlOmhvdmVyLC5hbGVydC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IsICM0ZjAwNzApO2NvbG9yOiM0ZjAwNzB9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nik7b3BhY2l0eToxO29wYWNp''@;'; put 'put ''dHk6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6IzY2NjtmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNs''@;'; put 'put ''b3NlLWljb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjojNGYwMDcwO2NvbG9yOnZhcigtLWNsci1hbGVydC1z''@;'; put 'put ''dWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IsICM0ZjAwNzApO29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDojZmZmNGM3O2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3IsICNmZmY0YzcpO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvciwgIzMzMzMzMyk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2FkNzYwMDtib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yLCAjYWQ3NjAwKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjojNDU0NTQ1O2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWljb24tY29sb3IsICM0NTQ1NDUpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1h''@;'; put 'put ''Y3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9y''@;'; put 'put ''LCAjNjY2NjY2KX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC13YXJu''@;'; put 'put ''aW5nIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC13YXJuaW5nIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpmb2N1cywuYWxl''@;'; put 'put ''cnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiM0ZjAwNzA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUt''@;'; put 'put ''Y29sb3IsICM0ZjAwNzApfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym94LXNoYWRvdzowIC4wNXJlbSAjNGYwMDcwIGluc2V0O2JveC1zaGFkb3c6MCAuMDVyZW0g''@;'; put 'put ''MCAwIHZhcigtLWNsci1hbGVydC13YXJuaW5nLWFjdGlvbi1hY3RpdmUtY29sb3IsICM0ZjAwNzApIGluc2V0fS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpob3ZlciwuYWxlcnQuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2V7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWNvbG9yLCAjNjY2NjY2KTtvcGFj''@;'; put 'put ''aXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2xyLWljb257ZmlsbDojNjY2O2ZpbGw6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvciwgIzRmMDA3MCk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZGRkNztiYWNr''@;'; put 'put ''Z3JvdW5kOnZhcigtLWNsci1hbGVydC1kYW5nZXItYmctY29sb3IsICNmZWRkZDcpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yLCAjNjY2NjY2KTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOTkxNzAwO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvciwgIzk5MTcwMCl9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjojOTkxNzAwO2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvciwgIzk5MTcwMCl9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxl''@;'; put 'put ''cnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCAjNjY2NjY2KTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29s''@;'; put 'put ''b3IsICM2NjY2NjYpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdl''@;'; put 'put ''ciAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojNjY2O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwgIzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LmFsZXJ0''@;'; put 'put ''LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6IzRmMDA3MDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYw''@;'; put 'put ''MDcwKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM0ZjAwNzAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCAjNGYwMDcwKSBpbnNldH0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbjph''@;'; put 'put ''Y3RpdmUsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXIt''@;'; put 'put ''YWN0aW9uLWFjdGl2ZS1jb2xvciwgIzRmMDA3MCk7Y29sb3I6IzRmMDA3MH0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwgIzY2NjY2Nik7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xy''@;'; put 'put ''LWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLW9wYWNpdHksIDEpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlIGNsci1pY29ue2ZpbGw6IzY2NjtmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''IzY2NjY2Nil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2U6YWN0aXZle2NvbG9yOiM0ZjAwNzA7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhv''@;'; put 'put ''dmVyLWNvbG9yLCAjNGYwMDcwKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbntoZWlnaHQ6LjlyZW07d2lkdGg6LjlyZW07bWFyZ2luLXJpZ2h0Oi4zcmVtfS5h''@;'; put 'put ''bGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb24rLmFsZXJ0LXRleHR7cGFkZGluZy1sZWZ0OjB9LmFsZXJ0IC5hbGVydC1pdGVtIC5jbHItaWNvbisuYWxlcnQtdGV4dDpiZWZvcmV7Y29udGVudDpub25lfS5hbGVydCAuYWxlcnQtYWN0aW9uc3tmbGV4OjAgMCBhdXRvO3doaXRlLXNwYWNlOm5v''@;'; put 'put ''d3JhcH0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duOmxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0uMXJlbX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duLWl0ZW17Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tdGV4dC1jb2xvciwgIzY2NjY2Nik7Zm9u''@;'; put 'put ''dC1zaXplOi43cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWx9LmFsZXJ0IC5hbGVydC1hY3Rpb246bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6LjZyZW19LmFsZXJ0IC5hbGVydC1hY3Rpb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGV7dGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOnVuZGVybGluZX0uYWxlcnQgLmFsZXJ0LWFjdGlvbiBidXR0b24uZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yLCAjNjY2NjY2KX0uYWxlcnQg''@;'; put 'put ''LmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0IC5jbG9zZXt3aWR0aDoxLjJyZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MS44cmVtO2ZsZXg6MCAwIDEuNHJlbTtvcmRlcjoxMDA7cGFkZGluZy1yaWdo''@;'; put 'put ''dDouMnJlbX0uYWxlcnQgLmNsb3NlIGNkcy1pY29uLC5hbGVydCAuY2xvc2UgY2xyLWljb257bWFyZ2luLXRvcDotLjE1cmVtO2hlaWdodDoxLjE1cmVtO3dpZHRoOjEuMTVyZW19LmFsZXJ0IC5jbG9zZX4uYWxlcnQtaXRlbT4uYWxlcnQtYWN0aW9uc3twYWRkaW5nLXJpZ2h0Oi42cmVtfS5h''@;'; put 'put ''bGVydCAuY2xvc2V+LmFsZXJ0LWl0ZW0+LmFsZXJ0LWFjdGlvbnM+LmFsZXJ0LWFjdGlvbjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDouNnJlbX0uYWxlcnQtYXBwLWxldmVse21hcmdpbjowO2JvcmRlci1yYWRpdXM6MDtvdmVyZmxvdy15OmF1dG87YmFja2dyb3VuZDojMDA3MmEzO2JhY2tn''@;'; put 'put ''cm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yLCAjMDA3MmEzKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yLCB3aGl0ZSk7Ym9yZGVyOjB9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IsIHdoaXRl''@;'; put 'put ''KTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1h''@;'; put 'put ''bGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICNmZmYgaW5zZXQ7Ym94LXNoYWRv''@;'; put 'put ''dzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKSBpbnNldH0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb246Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWFjdGlvbjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eTouODtvcGFjaXR5OnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLW9wYWNpdHksIC44KX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjbHItaWNvbntmaWxsOiNmZmY7ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwg''@;'; put 'put ''d2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yLCB3''@;'; put 'put ''aGl0ZSk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZve2JhY2tncm91bmQ6IzAwNzJhMztiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1iZy1j''@;'; put 'put ''b2xvciwgIzAwNzJhMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvciwgd2hpdGUpO2JvcmRlcjowfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5m''@;'; put 'put ''by1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xv''@;'; put 'put ''cjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6I2ZmZjti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9u''@;'; put 'put ''LWFjdGl2ZS1jb2xvciwgd2hpdGUpIGluc2V0fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9u''@;'; put 'put ''OmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKTtjb2xvcjojZmZmfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvciwgd2hp''@;'; put 'put ''dGUpO29wYWNpdHk6Ljg7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1vcGFjaXR5LCAuOCl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''I2ZmZjtmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''aW5mbyAuY2xvc2U6YWN0aXZle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0u''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOiNjMjFkMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1iZy1jb2xvciwgI2MyMWQwMCk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yLCB3aGl0''@;'; put 'put ''ZSk7Ym9yZGVyOjB9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvciwg''@;'; put 'put ''d2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFj''@;'; put 'put ''dGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xl''@;'; put 'put ''LmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSkgaW5zZXR9LmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb246YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFs''@;'; put 'put ''ZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eTou''@;'; put 'put ''ODtvcGFjaXR5OnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tb3BhY2l0eSwgLjgpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xyLWljb257ZmlsbDojZmZmO2Zp''@;'; put 'put ''bGw6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1k''@;'; put 'put ''YW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWhvdmVyLW9wYWNpdHks''@;'; put 'put ''IDEpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiNjMjU0MDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYmctY29sb3IsICNjMjU0MDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29s''@;'; put 'put ''b3IsIHdoaXRlKTtib3JkZXI6MH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWljb257Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQt''@;'; put 'put ''YWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlv''@;'; put 'put ''bi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xv''@;'; put 'put ''ciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1hY3Rpb24tY29sb3IsIHdoaXRlKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fybmlu''@;'; put 'put ''ZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0''@;'; put 'put ''LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWFjdGl2ZS1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0''@;'; put 'put ''aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICNmZmYgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1h''@;'; put 'put ''Y3RpdmUtY29sb3IsIHdoaXRlKSBpbnNldH0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbjpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10''@;'; put 'put ''b2dnbGU6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3aGl0ZSk7Y29sb3I6I2ZmZn0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3Nle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJu''@;'; put 'put ''aW5nLWNsb3NlLWljb24tY29sb3IsIHdoaXRlKTtvcGFjaXR5Oi44O29wYWNpdHk6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tb3BhY2l0eSwgLjgpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZSBjbHItaWNvbntmaWxsOiNmZmY7ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13''@;'; put 'put ''YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZXtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yLCB3aGl0ZSk7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItb3BhY2l0eSwgMSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNze2JhY2tncm91bmQ6IzNjODUwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvciwgIzNjODUwMCk7Y29sb3I6''@;'; put 'put ''I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvciwgd2hpdGUpO2JvcmRlcjowfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9y''@;'; put 'put ''LCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xvcjojZmZm''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2Zm''@;'; put 'put ''Zjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXIt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvciwgd2hpdGUpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbi5idG46aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5k''@;'; put 'put ''cm9wZG93bi10b2dnbGUuYnRuOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Ym9yZGVyLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yLCB3''@;'; put 'put ''aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gI2ZmZiBpbnNldDtib3gtc2hhZG93OjAg''@;'; put 'put ''LjA1cmVtIDAgMCB2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvciwgd2hpdGUpIGluc2V0fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0''@;'; put 'put ''aW9uOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTpo''@;'; put 'put ''b3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3IsIHdoaXRlKTtjb2xvcjojZmZmfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAu''@;'; put 'put ''Y2xvc2V7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvciwgd2hpdGUpO29wYWNpdHk6Ljg7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1vcGFjaXR5LCAuOCl9LmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6I2ZmZjtmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5jbG9zZTpmb2N1cywuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6YWN0aXZle2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWlj''@;'; put 'put ''b24taG92ZXItY29sb3IsIHdoaXRlKTtvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1vcGFjaXR5LCAxKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtc3twYWRkaW5nLXRvcDouM3JlbTtwYWRkaW5nLWJvdHRvbTouM3Jl''@;'; put 'put ''bX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVte2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6MS4ycmVtfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bnttYXJnaW46MH0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtPnNw''@;'; put 'put ''YW4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtdGV4dHtmbGV4OjAgMSAxMDAlfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWljb24td3JhcHBlcnttYXJnaW4tdG9wOi4xNXJlbX0uYWxlcnQtYXBwLWxldmVsIC5jbG9zZXtoZWlnaHQ6MS44cmVtO292ZXJmbG93OmhpZGRlbn0uYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5jbG9zZSBjbHItaWNvbnttYXJnaW4tdG9wOi0uMjVyZW19LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZXt0ZXh0LWRlY29yYXRpb246bm9uZX0uYWxl''@;'; put 'put ''cnQtc217Zm9udC1zaXplOi41NXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6LjhyZW19LmFsZXJ0LXNtIC5hbGVydC1pdGVtc3twYWRkaW5nOi4xNXJlbSAuMjVyZW19LmFsZXJ0LXNtIC5hbGVydC1pdGVte3BhZGRpbmctdG9wOi4wNXJlbTttYXJnaW4tYm90dG9tOi4y''@;'; put 'put ''cmVtfS5hbGVydC1zbSAuYWxlcnQtaXRlbTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uYWxlcnQtc20gLmFsZXJ0LWljb24td3JhcHBlcntwYWRkaW5nLXRvcDowO2hlaWdodDouOHJlbX0uYWxlcnQtc20gLmFsZXJ0LWljb257bWFyZ2luLWxlZnQ6LS4ycmVtO21hcmdpbi10b3A6LS4y''@;'; put 'put ''cmVtfS5hbGVydC1zbSAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydC1zbSAuYWxlcnQtdGV4dHttYXJnaW4tcmlnaHQ6LjNyZW19LmFsZXJ0LXNtIC5jbG9zZXtwYWRkaW5nLXJpZ2h0OjA7ZmxleDowIDAgMS4ycmVtO2hlaWdodDoxLjJyZW07bGluZS1oZWlnaHQ6MS4ycmVtfS5hbGVydC1zbSAu''@;'; put 'put ''Y2xvc2UgY2RzLWljb24sLmFsZXJ0LXNtIC5jbG9zZSBjbHItaWNvbnttYXJnaW4tdG9wOi0uMjVyZW07bWFyZ2luLXJpZ2h0Oi0uMDVyZW07aGVpZ2h0OjFyZW07d2lkdGg6MXJlbTtsaW5lLWhlaWdodDoxLjA1cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpey5hbGVy''@;'; put 'put ''dCAuYWxlcnQtaXRlbXtmbGV4LXdyYXA6d3JhcH0uYWxlcnQgLmFsZXJ0LXRleHR7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjkwJTt3aWR0aDo5MCU7ZmxleC1iYXNpczo5MCV9LmFsZXJ0IC5hbGVydC1hY3Rpb25ze2ZsZXg6MSAwIDEwMCU7cGFkZGluZy10b3A6LjE1cmVtO3BhZGRpbmct''@;'; put 'put ''bGVmdDoxLjJyZW19LmFsZXJ0cy1wYWdlcnttYXJnaW4tdG9wOi4xNXJlbX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb25ze21hcmdpbi1sZWZ0OjIuMjVyZW19fS5hbGVydC1oaWRkZW57ZGlzcGxheTpub25lfS5jYXJkIC5hbGVydHttYXJnaW46LjNyZW0gMH0ubW9kYWwgLmFsZXJ0''@;'; put 'put ''Ky5tb2RhbC1oZWFkZXIsLm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle21hcmdpbi10b3A6LjZyZW19LmFsZXJ0cy5hbGVydC1pbmZve2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1iZy1jb2xvciwgIzAw''@;'; put 'put ''NTY3YSl9LmFsZXJ0cy5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojOTkxNzAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItYmctY29sb3IsICM5OTE3MDApfS5hbGVydHMuYWxlcnQtd2FybmluZ3tiYWNrZ3JvdW5kOiM4ZjVhMDA7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItYmctY29sb3IsICM4ZjVhMDApfS5hbGVydHMuYWxlcnQtc3VjY2Vzc3tiYWNrZ3JvdW5kOiMyNTUyMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy05MDAsICMyNTUyMDApfS5hbGVydHMtcGFnZXJ7Y29sb3I6I2ZmZjtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtmbG9hdDpsZWZ0O21pbi1oZWlnaHQ6MS44cmVtO3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjcuMnJlbX0uYWxlcnQtaW5mbyAuYWxl''@;'; put 'put ''cnRzLXBhZ2Vye2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2Vye2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWZvbnQtY29s''@;'; put 'put ''b3IsIHdoaXRlKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXJ7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlcntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0cy1wYWdlci1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzow''@;'; put 'put ''O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3IsIHdoaXRlKTtjdXJzb3I6cG9pbnRlcn1idXR0b24uYWxlcnRzLXBhZ2VyLWJ1dHRvbntjdXJz''@;'; put 'put ''b3I6cG9pbnRlcn0uYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvciwgd2hpdGUpfS5hbGVydC1pbmZvIC5hbGVydHMtcGFnZXItYnV0dG9u''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1pbmZvIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtd2FybmluZyAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjbHItaWNvbntjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yLCB3aGl0ZSl9LmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2VyLWJ1dHRvbiBjZHMtaWNvbiwuYWxlcnQt''@;'; put 'put ''ZGFuZ2VyIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvciwgd2hpdGUpfS5hbGVydC1zdWNjZXNzIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IsIHdoaXRlKX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2x7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6LjNyZW07d2hpdGUtc3BhY2U6''@;'; put 'put ''bm93cmFwfS5hbGVydHMtcGFnZS1kb3due21hcmdpbi1sZWZ0OjEuMnJlbTt3aWR0aDozMy4zMyV9LmFsZXJ0cy1wYWdlLXVwe21hcmdpbi1yaWdodDoxLjJyZW07d2lkdGg6MzMuMzMlfS5hbGVydHMtcGFnZXItdGV4dHt3aWR0aDozMy4zMyV9OnJvb3R7LS1jbHItY2FyZC1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1jYXJkLWRpdmlkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwKTstLWNsci1jYXJkLXRpdGxlLWNvbG9yOnZhcigtLWNsci1oNC1jb2xvcik7LS1jbHItY2FyZC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDQt''@;'; put 'put ''Zm9udC13ZWlnaHQpOy0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgpOy0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItY2FyZC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMzAwKTstLWNsci1jYXJkLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3ctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJvcmRlci1jb2xvcil9LmNhcmR7Ym94LXNoYWRvdzowIC4xNXJlbSAjZGVkZWRlO2JveC1zaGFkb3c6MCAuMTVyZW0gMCAwIHZhcigtLWNsci1jYXJkLWJveC1zaGFkb3ctY29sb3IpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRp''@;'; put 'put ''dXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItY2FyZC1ib3JkZXItd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZGVkZWRlO2JvcmRlci1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IsICNkZWRlZGUpfS5jYXJkLmNsaWNrYWJsZTpob3Zlcntib3gtc2hhZG93OjAgLjE1cmVtICMxNzliZDM7Ym94LXNoYWRvdzowIC4xNXJlbSAwIDAgdmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3ctY29sb3IpO2JvcmRlci13aWR0''@;'; put 'put ''aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiMxNzliZDM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1jYXJkLWNsaWNrYWJsZS1ib3JkZXItY29sb3IsICMxNzliZDMpO2N1cnNv''@;'; put 'put ''cjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uMXJlbSk7dHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UsdHJhbnNmb3JtIC4ycyBlYXNlfS5jYXJkLWJsb2NrIC5jYXJkLWRpdmlkZXIsLmNhcmQgLmNhcmQtdGl0bGUsLmNhcmQgLmNhcmQtdGV4''@;'; put 'put ''dCwuY2FyZCAuY2FyZC1tZWRpYS1ibG9jaywuY2FyZCAubGlzdCwuY2FyZCAubGlzdC11bnN0eWxlZHttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTouNnJlbX0uY2FyZC1ibG9jayAuY2FyZC1kaXZpZGVyOmxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtdGl0bGU6bGFzdC1jaGlsZCwuY2FyZCAu''@;'; put 'put ''Y2FyZC10ZXh0Omxhc3QtY2hpbGQsLmNhcmQgLmNhcmQtbWVkaWEtYmxvY2s6bGFzdC1jaGlsZCwuY2FyZCAubGlzdDpsYXN0LWNoaWxkLC5jYXJkIC5saXN0LXVuc3R5bGVkOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jYXJkLmNhcmQtaW1nPmltZywuY2FyZD4uY2FyZC1pbWc6Zmly''@;'; put 'put ''c3QtY2hpbGQ6bGFzdC1jaGlsZD5pbWcsLmNhcmQtaW1nPmltZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDphdXRvO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmNhcmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvciwgd2hpdGUpO3dpZHRoOjEwMCU7bWFyZ2luLXRvcDoxLjJyZW19LmNhcmQgLmJ0bi1saW5re21pbi13aWR0aDowO3BhZGRpbmc6MH0uY2FyZC5jbGlja2FibGV7Y29sb3I6aW5oZXJpdH0uY2FyZD4ubGlzdCwuY2FyZD4ubGlzdC11bnN0eWxlZHtw''@;'; put 'put ''YWRkaW5nOi42cmVtIC45cmVtfS5jYXJkIC5saXN0LWdyb3Vwe3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtsaXN0LXN0eWxlOm5vbmV9LmNhcmQgLmxpc3QtZ3JvdXAtaXRlbXtwYWRkaW5nOi42cmVtIC45cmVtO2ZvbnQtc2l6ZTouN3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2FyZC1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1jb2xvcjojZGVkZWRlO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yLCAjZGVkZWRlKX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmNhcmQgLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUt''@;'; put 'put ''YmxvY2s7bWFyZ2luLXRvcDotLjZyZW19fS5jYXJkLWhlYWRlciwuY2FyZC1ibG9jaywuY2FyZC1mb290ZXJ7cGFkZGluZzouNnJlbSAuOXJlbX0uY2FyZC1oZWFkZXIsLmNhcmQtdGl0bGV7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItY2FyZC10aXRsZS1jb2xvciwgYmxhY2spO2ZvbnQt''@;'; put 'put ''d2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItY2FyZC10aXRsZS1mb250LXdlaWdodCwgMjAwKTtmb250LXNpemU6LjlyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsfWgxLmNhcmQtaGVhZGVyLGgxLmNhcmQtdGl0bGUsaDIuY2FyZC1oZWFkZXIsaDIuY2FyZC10aXRsZSxoMy5jYXJk''@;'; put 'put ''LWhlYWRlcixoMy5jYXJkLXRpdGxlLGg0LmNhcmQtaGVhZGVyLGg0LmNhcmQtdGl0bGUsaDUuY2FyZC1oZWFkZXIsaDUuY2FyZC10aXRsZSxoNi5jYXJkLWhlYWRlcixoNi5jYXJkLXRpdGxle21hcmdpbi10b3A6MH0uY2FyZC10ZXh0e2ZvbnQtc2l6ZTouN3JlbX0uY2FyZC1pbWc6Zmlyc3Qt''@;'; put 'put ''Y2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci10b3AtcmlnaHQt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQtaW1nOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRl''@;'; put 'put ''ci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQuY2FyZC1pbWc+aW1nLC5jYXJkPi5jYXJkLWltZzpmaXJzdC1jaGlsZDps''@;'; put 'put ''YXN0LWNoaWxkPmltZ3tib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNhcmQtYmxvY2sgLmJ0biwuY2FyZC1ibG9jayAuYnRuLmJ0bi1saW5rLC5jYXJkLWJsb2NrIC5jYXJkLWxpbmssLmNhcmQtZm9vdGVy''@;'; put 'put ''IC5idG4sLmNhcmQtZm9vdGVyIC5idG4uYnRuLWxpbmssLmNhcmQtZm9vdGVyIC5jYXJkLWxpbmt7bWFyZ2luOjAgLjZyZW0gMCAwfS5jYXJkLWJsb2NrIC5idG4tZ3JvdXAgLmJ0biwuY2FyZC1mb290ZXIgLmJ0bi1ncm91cCAuYnRue21hcmdpbjowfS5jYXJkLWhlYWRlciwuY2FyZC1ibG9j''@;'; put 'put ''a3tib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6I2RlZGVkZTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jYXJkLWJvcmRlci1jb2xvciwgI2RlZGVkZSl9LmNhcmQtaGVhZGVyOmxhc3QtY2hpbGQsLmNhcmQtYmxvY2s6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmNhcmQtZGl2aWRlcntkaXNwbGF5OmJsb2NrO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0''@;'; put 'put ''b20td2lkdGg6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZGVkZWRlO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWNhcmQtZGl2aWRlci1jb2xvciwgI2RlZGVkZSl9LmNhcmQt''@;'; put 'put ''YmxvY2sgLmNhcmQtZGl2aWRlcnttYXJnaW4tbGVmdDotLjlyZW07bWFyZ2luLXJpZ2h0Oi0uOXJlbTt3aWR0aDphdXRvfS5jYXJkLWhlYWRlcisuY2FyZC1kaXZpZGVyLC5jYXJkLWJsb2NrKy5jYXJkLWRpdmlkZXJ7ZGlzcGxheTpub25lfS5jYXJkLW1lZGlhLWJsb2Nre2Rpc3BsYXk6Zmxl''@;'; put 'put ''eH0uY2FyZC1tZWRpYS1ibG9jayAuY2FyZC1tZWRpYS1pbWFnZXtkaXNwbGF5OmlubGluZS1ibG9jaztmbGV4OjAgMCBhdXRvO2hlaWdodDozcmVtO3dpZHRoOjNyZW07bWF4LWhlaWdodDozcmVtO21heC13aWR0aDozcmVtfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLWRlc2NyaXB0''@;'; put 'put ''aW9ue2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luOjAgMCAwIC42cmVtfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLXRpdGxlLC5jYXJkLW1lZGlhLWJsb2NrIHNwYW4sLmNhcmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGV4dHtkaXNwbGF5OmlubGlu''@;'; put 'put ''ZS1ibG9ja30uY2FyZC1tZWRpYS1ibG9jay53cmFwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FyZC1tZWRpYS1ibG9jay53cmFwIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue21hcmdpbjouM3JlbSAwIDB9LmNhcmQtYmxvY2s+Lmxpc3QsLmNhcmQtYmxvY2s+Lmxpc3QtdW5zdHlsZWR7cGFk''@;'; put 'put ''ZGluZzowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6NTc2cHgpey5jYXJkLWNvbHVtbnN7Y29sdW1uLWNvdW50OjM7Y29sdW1uLWdhcDouNnJlbTticmVhay1pbnNpZGU6YXZvaWQ7Y29sdW1uLWZpbGw6YmFsYW5jZTstd2Via2l0LXBlcnNwZWN0aXZlOjF9LmNhcmQtY29sdW1ucy5j''@;'; put 'put ''YXJkLWNvbHVtbnMtMntjb2x1bW4tY291bnQ6Mn0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy00e2NvbHVtbi1jb3VudDo0fS5jYXJkLWNvbHVtbnMgLmNhcmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOi4zcmVtfS5jYXJkLWNvbHVtbnMgLmNsaWNrYWJsZXstd2Via2l0LWJhY2tm''@;'; put 'put ''YWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmNhcmQgLmNoZWNrYm94LmJ0biBsYWJlbCwuY2FyZCAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuY2FyZCAucmFkaW8uYnRuIGxhYmVsLC5j''@;'; put 'put ''YXJkIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfX06cm9vdHstLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kcm9wZG93bi1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC0wKTstLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1kcm9wZG93bi1kaXZpZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2xy''@;'; put 'put ''LWdsb2JhbC1ib3JkZXJ3aWR0aCk7LS1jbHItZHJvcGRvd24tY2hpbGQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwMCk7LS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcik7LS1jbHItZHJvcGRvd24tc2VsZWN0''@;'; put 'put ''aW9uLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1ib3gtc2hhZG93OnZhcigtLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3IpOy0tY2xyLWRyb3Bkb3duLXRleHQtY29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yKTstLWNsci1kcm9wZG93''@;'; put 'put ''bi1oZWFkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwKTstLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQ6NjAwOy0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kcm9wZG93bi1pdGVtLWZvbnQtd2Vp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1wMS1mb250LXdlaWdodCl9LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8sLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmlt''@;'; put 'put ''YXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzcywuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWxpbmssLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0sLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmRyb3Bkb3duLWhlYWRlcntvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0ZXh0LWFsaWduOmxlZnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZs''@;'; put 'put ''ZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjA7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3du''@;'; put 'put ''IC5kcm9wZG93bi10b2dnbGUgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjppbmhlcml0O2hlaWdodDouNXJlbTt3aWR0aDouNXJlbTttaW4taGVpZ2h0Oi41cmVtO21pbi13aWR0aDouNXJlbX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjZHMtaWNv''@;'; put 'put ''bltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjppbmhlcml0O2hlaWdodDouNXJlbTt3aWR0aDouNXJlbTstLWNkcy1nbG9iYWwtc3BhY2UtNzouNXJl''@;'; put 'put ''bX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG57cGFkZGluZy1yaWdodDoxLjJyZW07dGV4dC1vdmVyZmxvdzp1bnNldH0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257dHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1p''@;'; put 'put ''Y29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29u''@;'; put 'put ''W3NoYXBlXj1hbmdsZV17cmlnaHQ6LjZyZW19LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe3BhZGRpbmc6MCAuNnJlbSAwIDA7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYWN0aXZlLXRleHQtY29sb3IsIGJsYWNrKX0uZHJvcGRvd24gLmRyb3Bkb3du''@;'; put 'put ''LXRvZ2dsZTpub3QoLmJ0bikgY2RzLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2xyLWljb25bc2hhcGVePWNhcmV0XSwuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2RzLWljb25bc2hhcGVePWFuZ2xlXSwuZHJv''@;'; put 'put ''cGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bikgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtyaWdodDowfS5kcm9wZG93biBidXR0b24uZHJvcGRvd24tdG9nZ2xlOm5vdCguYnRuKXtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMDAwO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5kcm9wZG93bi1tZW51Pip7ZGlzcGxheTpibG9jazt3aGl0ZS1zcGFjZTpub3dyYXB9LmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6''@;'; put 'put ''MTAwJTtsZWZ0OjA7bWluLXdpZHRoOjZyZW07bWF4LXdpZHRoOjE4cmVtO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lk''@;'; put 'put ''dGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFk''@;'; put 'put ''aXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZHJvcGRvd24tYm94LXNoYWRvdywgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTttYXJnaW4tdG9wOi4xcmVtO3BhZGRpbmc6LjZyZW0g''@;'; put 'put ''MDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTB9LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlcntjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItY29sb3IsICMzMzMzMzMpO2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWhlYWRlci1mb250LXdlaWdodCwgNjAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7cGFkZGluZzowIC42cmVtO2xpbmUtaGVpZ2h0Oi45cmVtO21hcmdpbjowfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnksLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1pbmZvLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZywuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXN1Y2Nlc3MsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVte2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouN3JlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmF1dG87bGluZS1oZWlnaHQ6aW5oZXJpdDttYXJnaW46MDt3aWR0''@;'; put 'put ''aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bkb3duLW1lbnUgLmJ0bjpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmhvdmVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpo''@;'; put 'put ''b3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KTtjb2xvcjoj''@;'; put 'put ''NjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yLCAjNjY2NjY2KTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5kcm9wZG93bi1tZW51IC5idG46YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmFjdGl2''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tcHJpbWFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluazphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZle2Jv''@;'; put 'put ''eC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''b3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpmb2N1c3t6LWluZGV4OmluaGVyaXR9LmRyb3Bkb3duLW1lbnUgLmJ0bi5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRp''@;'; put 'put ''c2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmRpc2FibGVkLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdl''@;'; put 'put ''ci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''ZGFuZ2VyLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmRpc2FibGVkLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWxp''@;'; put 'put ''bms6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZTtvcGFjaXR5Oi40Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRv''@;'; put 'put ''d24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNh''@;'; put 'put ''YmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5''@;'; put 'put ''OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''c3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5k''@;'; put 'put ''cm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpkaXNhYmxlZDph''@;'; put 'put ''Y3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2Fi''@;'; put 'put ''bGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtc3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNz''@;'; put 'put ''LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXttYXJnaW4tcmlnaHQ6MS4ycmVtO3BhZGRpbmctcmlnaHQ6LjZyZW19LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmJlZm9y''@;'; put 'put ''ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS1wcmltYXJ5LmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LWRhbmdlci5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpi''@;'; put 'put ''ZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3du''@;'; put 'put ''LWl0ZW0uZXhwYW5kYWJsZTpiZWZvcmV7Y29udGVudDoiIjtmbG9hdDpyaWdodDtoZWlnaHQ6LjZyZW07d2lkdGg6LjZyZW07dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMl''@;'; put 'put ''M0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyMzlh''@;'; put 'put ''OWE5YSUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0''@;'; put 'put ''LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250''@;'; put 'put ''YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tdG9wOi4zcmVtfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzouMTVyZW0gMS4ycmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzouM3JlbSAxLjJyZW19fS5kcm9wZG93bi1tZW51IGEuZHJvcGRvd24taXRlbXt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24tZGl2aWRlcntmb250LXNpemU6LjZyZW07Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZHJvcGRvd24tZGl2aWRlci1jb2xvciwgI2U4ZThlOCk7bWFyZ2luOi4zcmVtIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJz''@;'; put 'put ''LW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3du''@;'; put 'put ''LW1lbnV7dmlzaWJpbGl0eTp2aXNpYmxlfS5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cuYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLnRh''@;'; put 'put ''YnMtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51e3RvcDoxMDAlO2JvdHRvbTphdXRvO21hcmdpbjouMXJlbSAwIDB9LmJ0bi1ncm91cC1v''@;'; put 'put ''dmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnV7bGVmdDowO3JpZ2h0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwuYnRuLWdy''@;'; put 'put ''b3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtbGVmdD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3At''@;'; put 'put ''cmlnaHQ+LmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luOjAgMCAuMXJlbX0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4uZHJv''@;'; put 'put ''cGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCAuMXJlbSAwIDB9LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVu''@;'; put 'put ''dSwudGFicy1vdmVyZmxvdy5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7dG9wOjA7Ym90dG9tOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5sZWZ0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnV7Ym90dG9tOjA7dG9wOmF1dG99LmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRh''@;'; put 'put ''YnMtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnV7bGVmdDoxMDAlO3Jp''@;'; put 'put ''Z2h0OmF1dG87bWFyZ2luOjAgMCAwIC4xcmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51e3RvcDowO2Jv''@;'; put 'put ''dHRvbTphdXRvfS5idG4tZ3JvdXAtb3ZlcmZsb3cucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51e2JvdHRvbTowO3RvcDphdXRvfS5idG4tZ3JvdXAtb3ZlcmZs''@;'; put 'put ''b3cgLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e2JvcmRlci1jb2xvcjojYjNiM2IzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tY2hpbGQtYm9y''@;'; put 'put ''ZGVyLWNvbG9yLCAjYjNiM2IzKTtwb3NpdGlvbjphYnNvbHV0ZX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1t''@;'; put 'put ''ZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDowIDEwMCUgYXV0byBhdXRvO21hcmdpbi10b3A6LS45NXJlbTttYXJnaW4tcmlnaHQ6LS4ycmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJp''@;'; put 'put ''Z2h0LXRvcD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93''@;'; put 'put ''IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93''@;'; put 'put ''bi1tZW51e2luc2V0OjAgYXV0byBhdXRvIDEwMCU7bWFyZ2luLXRvcDotLjk1cmVtO21hcmdpbi1sZWZ0Oi0uMnJlbX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRv''@;'; put 'put ''bT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVu''@;'; put 'put ''dSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdpbi1ib3R0b206LS45NXJlbTtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6LS4ycmVtfS5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1v''@;'; put 'put ''dmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24t''@;'; put 'put ''bWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51e2luc2V0OmF1dG8gYXV0byAwIDEwMCU7bWFyZ2luLWJvdHRvbTotLjk1cmVtO21hcmdpbi1sZWZ0Oi0uMnJlbX06cm9vdHstLWNsci1iYWRnZS1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItYmFkZ2UtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNjAwKTstLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1iYWRnZS1pbmZvLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJhZGdlLXdhcm5pbmctYmctY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctMTAwMCk7LS1jbHItYmFkZ2Utd2FybmluZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci05MDApOy0tY2xyLWJhZGdlLWRhbmdlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1iYWRnZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItYmFkZ2UtZ3JheS1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZm9udC1jb2xvci1saWdodCk7LS1jbHItYmFkZ2UtcHVycGxlLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1jb2xvci1zZWNvbmRhcnktYWN0aW9uLTUwMCk7LS1jbHItYmFkZ2UtcHVycGxlLWNvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxpZ2h0KTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1iYWRn''@;'; put 'put ''ZS1ibHVlLWNvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxpZ2h0KTstLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctMTAwMCk7LS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWJh''@;'; put 'put ''ZGdlLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MDApOy0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCl9LmJhZGdle2Rpc3BsYXk6aW5saW5lLWZsZXg7dmVydGljYWwtYWxpZ246bWlkZGxlO2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDouNzVyZW07YmFja2dyb3VuZDojOGM4YzhjO2hlaWdodDouNzVyZW07bGluZS1oZWlnaHQ6bm9ybWFsO2JvcmRlci1yYWRpdXM6LjVyZW07Zm9udC1zaXplOi41cmVtO3BhZGRpbmc6MCAuMnJlbTttYXJnaW4tcmln''@;'; put 'put ''aHQ6LjNyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWZvbnQtY29sb3ItbGlnaHQsIHdoaXRlKX0uYmFkZ2U6dmlzaXRlZHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1mb250LWNvbG9yLWxp''@;'; put 'put ''Z2h0LCB3aGl0ZSl9LmJhZGdlLmJhZGdlLWdyYXksLmJhZGdlLmJhZGdlLTF7YmFja2dyb3VuZDojOGM4YzhjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IsICM4YzhjOGMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IsIHdoaXRl''@;'; put 'put ''KX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6IzllNTdiYztiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3IsICM5ZTU3YmMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvciwgd2hpdGUpfS5i''@;'; put 'put ''YWRnZS5iYWRnZS1ibHVlLC5iYWRnZS5iYWRnZS0ze2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yLCAjMDA1NjdhKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ibHVlLWNvbG9yLCB3aGl0ZSl9LmJhZGdlLmJhZGdl''@;'; put 'put ''LW9yYW5nZSwuYmFkZ2UuYmFkZ2UtNHtiYWNrZ3JvdW5kOiM2MTMyMDA7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yLCAjNjEzMjAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtY29sb3IsIHdoaXRlKX0uYmFkZ2UuYmFkZ2UtbGln''@;'; put 'put ''aHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOiMxNzliZDM7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1iZy1jb2xvciwgIzE3OWJkMyk7Y29sb3I6I2ZmZjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvciwgd2hpdGUpfS5iYWRnZS5i''@;'; put 'put ''YWRnZS1pbmZve2JhY2tncm91bmQ6IzAwNTY3YTtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1pbmZvLWJnLWNvbG9yLCAjMDA1NjdhKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS1pbmZvLWNvbG9yLCB3aGl0ZSl9LmJhZGdlLmJhZGdlLXN1Y2Nlc3N7YmFja2dyb3VuZDoj''@;'; put 'put ''MzA2YjAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IsICMzMDZiMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3IsIHdoaXRlKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6Izk5MTcwMDtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3IsICM5OTE3MDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1jb2xvciwgd2hpdGUpfS5iYWRnZS5iYWRnZS13YXJuaW5ne2JhY2tncm91bmQ6IzYxMzIwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS13''@;'; put 'put ''YXJuaW5nLWJnLWNvbG9yLCAjNjEzMjAwKTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci1iYWRnZS13YXJuaW5nLWNvbG9yLCB3aGl0ZSl9XzotbXMtaW5wdXQtcGxhY2Vob2xkZXIgLmJhZGdlLDpyb290IC5iYWRnZXtwYWRkaW5nOi4xcmVtIC4xNXJlbSAwfUBzdXBwb3J0cyAoLW1zLWlt''@;'; put 'put ''ZS1hbGlnbjphdXRvKXsuYmFkZ2V7cGFkZGluZzouMXJlbSAuMTVyZW0gMH19OnJvb3R7LS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAw''@;'; put 'put ''MCk7LS1jbHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1sYWJlbC1mb250LXNpemU6LjU1cmVtOy0tY2xyLWxhYmVsLWZvbnQtd2VpZ2h0OjQwMDstLWNsci1sYWJlbC1sZXR0ZXItc3BhY2luZzouMDNlbTstLWNsci1sYWJl''@;'; put 'put ''bC1ib3JkZXItcmFkaXVzOi42cmVtOy0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWxhYmVsLWdyYXktY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWxhYmVsLWZvbnQtY29sb3ItbGlnaHQpOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7LS1jbHItbGFiZWwtYmx1''@;'; put 'put ''ZS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItbGFiZWwtYmx1ZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCk7LS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMDApOy0tY2xyLWxhYmVs''@;'; put 'put ''LW9yYW5nZS1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1kYXJrKTstLWNsci1sYWJlbC1saWdodC1ibHVlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNTAwKTstLWNsci1sYWJlbC1saWdodC1ibHVlLWNvbG9yOnZhcigtLWNsci1sYWJlbC1mb250LWNvbG9yLWRh''@;'; put 'put ''cmspOy0tY2xyLWxhYmVsLWluZm8tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi01MCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tODAwKTstLWNsci1sYWJlbC1pbmZvLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTgwMCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy01MCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTgwMCk7LS1jbHItbGFiZWwtc3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLXN1Y2Nlc3MtODAwKTstLWNsci1sYWJlbC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci13YXJuaW5nLTEwMCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLXdhcm5pbmctODAwKTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci0xMDApOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKTstLWNsci1sYWJlbC1kYW5n''@;'; put 'put ''ZXItYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItOTAwKX0ubGFiZWwsYS5sYWJlbHtmb250LXNpemU6LjU1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItbGFiZWwtZm9udC1zaXplLCAuNTVyZW0pO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbGFiZWwt''@;'; put 'put ''Zm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6LjAzZW07bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWxhYmVsLWxldHRlci1zcGFjaW5nLCAuMDNlbSk7bGluZS1oZWlnaHQ6LjZyZW07ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1z''@;'; put 'put ''OmNlbnRlcjtwYWRkaW5nOjAgLjZyZW07Ym9yZGVyLXJhZGl1czouNnJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1sYWJlbC1ib3JkZXItcmFkaXVzLCAuNnJlbSk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjOGM4YzhjKTtoZWlnaHQ6MS4wNXJlbTttYXJnaW46MCAuM3JlbSAuMDVyZW0gMDt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xvci1saWdodCwgYmxhY2spfS5sYWJlbDp2aXNpdGVkLGEu''@;'; put 'put ''bGFiZWw6dmlzaXRlZHtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1sYWJlbC1mb250LWNvbG9yLWxpZ2h0LCBibGFjayl9LmxhYmVsOmZvY3VzLC5sYWJlbDpob3ZlciwubGFiZWw6YWN0aXZlLGEubGFiZWw6Zm9jdXMsYS5sYWJlbDpob3ZlcixhLmxhYmVsOmFjdGl2ZXt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0ubGFiZWwuY2xpY2thYmxlOmhvdmVyLC5sYWJlbC5jbGlja2FibGU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlOmhvdmVyLGEubGFiZWwuY2xpY2thYmxlOmFjdGl2ZXtiYWNrZ3JvdW5kOiNlOGU4ZTg7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctaG92ZXItY29s''@;'; put 'put ''b3IsICNlOGU4ZTgpfS5sYWJlbC5jbGlja2FibGU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM4YzhjOGMgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLWdyYXktYmctY29sb3IsICM4YzhjOGMpIGluc2V0''@;'; put 'put ''O3RyYW5zZm9ybTp0cmFuc2xhdGVZKC41cHgpfS5sYWJlbC5sYWJlbC1ncmF5LC5sYWJlbC5sYWJlbC0xLGEubGFiZWwubGFiZWwtZ3JheSxhLmxhYmVsLmxhYmVsLTF7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVs''@;'; put 'put ''LWdyYXktYmctY29sb3IsICM4YzhjOGMpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtZ3JheTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6aG92ZXIsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtZ3JheTphY3RpdmV7''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWdyYXk6YWN0aXZle2Jv''@;'; put 'put ''eC1zaGFkb3c6MCAuMDVyZW0gIzhjOGM4YyBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtZ3JheS1iZy1jb2xvciwgIzhjOGM4YykgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWdyYXk+LmJhZGdlLGEubGFiZWwubGFi''@;'; put 'put ''ZWwtZ3JheT4uYmFkZ2V7YmFja2dyb3VuZDojOGM4YzhjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IsICM4YzhjOGMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtcHVycGxlLC5sYWJlbC5s''@;'; put 'put ''YWJlbC0yLGEubGFiZWwubGFiZWwtcHVycGxlLGEubGFiZWwubGFiZWwtMntib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOWU1N2JjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtcHVycGxlLWJnLWNvbG9yLCAjOWU1N2JjKX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1''@;'; put 'put ''cnBsZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtcHVycGxlOmhvdmVyLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLXB1cnBsZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtcHVycGxlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM5ZTU3YmMgaW5zZXQ7Ym94LXNo''@;'; put 'put ''YWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvciwgIzllNTdiYykgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLXB1cnBsZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdle2JhY2tncm91bmQ6IzllNTdi''@;'; put 'put ''YztiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3IsICM5ZTU3YmMpO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvciwgd2hpdGUpfS5sYWJlbC5sYWJlbC1ibHVlLC5sYWJlbC5sYWJlbC0zLGEubGFiZWwubGFiZWwtYmx1ZSxhLmxh''@;'; put 'put ''YmVsLmxhYmVsLTN7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzAwNTY3YTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3IsICMwMDU2N2EpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtYmx1ZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJs''@;'; put 'put ''dWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6aG92ZXIsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtYmx1ZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAj''@;'; put 'put ''ZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWJsdWU6YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzAwNTY3YSBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtYmx1ZS1iZy1jb2xv''@;'; put 'put ''ciwgIzAwNTY3YSkgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDojMDA1NjdhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWJsdWUtYmctY29sb3IsICMwMDU2N2Ep''@;'; put 'put ''O2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtb3JhbmdlLC5sYWJlbC5sYWJlbC00LGEubGFiZWwubGFiZWwtb3JhbmdlLGEubGFiZWwubGFiZWwtNHtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojNjEzMjAw''@;'; put 'put ''O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yLCAjNjEzMjAwKX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtb3JhbmdlOmhvdmVy''@;'; put 'put ''LGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLW9yYW5nZTphY3Rp''@;'; put 'put ''dmUsYS5sYWJlbC5jbGlja2FibGUubGFiZWwtb3JhbmdlOmFjdGl2ZXtib3gtc2hhZG93OjAgLjA1cmVtICM2MTMyMDAgaW5zZXQ7Ym94LXNoYWRvdzowIC4wNXJlbSAwIDAgdmFyKC0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvciwgIzYxMzIwMCkgaW5zZXQ7dHJhbnNmb3JtOnRyYW5zbGF0''@;'; put 'put ''ZVkoLjVweCl9LmxhYmVsLmxhYmVsLW9yYW5nZT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1vcmFuZ2U+LmJhZGdle2JhY2tncm91bmQ6IzYxMzIwMDtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1vcmFuZ2UtYmctY29sb3IsICM2MTMyMDApO2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJh''@;'; put 'put ''ZGdlLW9yYW5nZS1jb2xvciwgd2hpdGUpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlLC5sYWJlbC5sYWJlbC01LGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSxhLmxhYmVsLmxhYmVsLTV7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzE3OWJkMztib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3IsICMxNzliZDMpfS5sYWJlbC5jbGlja2FibGUubGFiZWwtbGlnaHQtYmx1ZTpob3ZlciwubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6aG92ZXIsYS5s''@;'; put 'put ''YWJlbC5jbGlja2FibGUubGFiZWwtbGlnaHQtYmx1ZTphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWhvdmVyLWNvbG9yLCAjZThlOGU4KX0ubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6''@;'; put 'put ''YWN0aXZlLGEubGFiZWwuY2xpY2thYmxlLmxhYmVsLWxpZ2h0LWJsdWU6YWN0aXZle2JveC1zaGFkb3c6MCAuMDVyZW0gIzE3OWJkMyBpbnNldDtib3gtc2hhZG93OjAgLjA1cmVtIDAgMCB2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1iZy1jb2xvciwgIzE3OWJkMykgaW5zZXQ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZVkoLjVweCl9LmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtbGlnaHQtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDojMTc5YmQzO2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3IsICMxNzliZDMpO2NvbG9y''@;'; put 'put ''OiNmZmY7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtY29sb3IsIHdoaXRlKX0ubGFiZWwubGFiZWwtaW5mbyxhLmxhYmVsLmxhYmVsLWluZm97YmFja2dyb3VuZDojZTNmNWZjO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWluZm8tYmctY29sb3IsICNlM2Y1ZmMpO2NvbG9y''@;'; put 'put ''OiMwMDU2N2E7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWluZm8tZm9udC1jb2xvciwgIzAwNTY3YSk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzAwNTY3YTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLWluZm8tYm9yZGVyLWNvbG9yLCAjMDA1NjdhKX0ubGFiZWwubGFi''@;'; put 'put ''ZWwtc3VjY2VzcyxhLmxhYmVsLmxhYmVsLXN1Y2Nlc3N7YmFja2dyb3VuZDojZGZmMGQwO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYmctY29sb3IsICNkZmYwZDApO2NvbG9yOiMzMDZiMDA7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtZm9udC1jb2xvciwgIzMw''@;'; put 'put ''NmIwMCk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzMwNmIwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yLCAjMzA2YjAwKX0ubGFiZWwubGFiZWwtd2FybmluZyxhLmxhYmVsLmxhYmVsLXdhcm5pbmd7YmFja2dyb3VuZDojZmZm''@;'; put 'put ''NGM3O2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYmctY29sb3IsICNmZmY0YzcpO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctZm9udC1jb2xvciwgIzMzMzMzMyk7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2FkNzYwMDtib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLWxhYmVsLXdhcm5pbmctYm9yZGVyLWNvbG9yLCAjYWQ3NjAwKX0ubGFiZWwubGFiZWwtZGFuZ2VyLGEubGFiZWwubGFiZWwtZGFuZ2Vye2JhY2tncm91bmQ6I2ZlZGRkNztiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3IsICNmZWRk''@;'; put 'put ''ZDcpO2NvbG9yOiM5OTE3MDA7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yLCAjOTkxNzAwKTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojOTkxNzAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvciwgIzk5MTcw''@;'; put 'put ''MCl9LmxhYmVsPi5iYWRnZSxhLmxhYmVsPi5iYWRnZXttYXJnaW46MCAtLjQ1cmVtIDAgLjNyZW19QC1tb3otZG9jdW1lbnQgdXJsLXByZWZpeCgpey5sYWJlbCxhLmxhYmVse3ZlcnRpY2FsLWFsaWduOmJvdHRvbX19OnJvb3R7LS1jbHItbG9naW4tdGl0bGUtY29sb3I6dmFyKC0tY2xyLWgx''@;'; put 'put ''LWNvbG9yKTstLWNsci1sb2dpbi10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDEtZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMS1mb250LWZhbWlseSk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWNvbG9yOnZhcigtLWNsci1oMi1jb2xv''@;'; put 'put ''cik7LS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMi1mb250LXdlaWdodCk7LS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMi1mb250LWZhbWlseSk7LS1jbHItbG9naW4tc3VidGl0bGUtY29sb3I6dmFyKC0tY2xyLWgzLWNv''@;'; put 'put ''bG9yKTstLWNsci1sb2dpbi1zdWJ0aXRsZS1mb250LXdlaWdodDp2YXIoLS1jbHItaDMtZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXN1YnRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1oMy1mb250LWZhbWlseSk7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xv''@;'; put 'put ''YmFsLWFwcC1iYWNrZ3JvdW5kKTstLWNsci1sb2dpbi1iYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQyUzRnhtbCUyMHZlcnNpb24lM0QlMjIxLjAlMjIlMjBlbmNvZGluZyUzRCUyMnV0Zi04JTIyJTNGJTNFJTBEJTBBJTNDJTIxRE9DVFlQRSUyMHN2''@;'; put 'put ''ZyUyMFBVQkxJQyUyMCUyMi0lMkYlMkZXM0MlMkYlMkZEVEQlMjBTVkclMjAxLjElMkYlMkZFTiUyMiUyMCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGR3JhcGhpY3MlMkZTVkclMkYxLjElMkZEVEQlMkZzdmcxMS5kdGQlMjIlM0UlMEQlMEElM0NzdmclMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaWQlM0QlMjJuby1hc3BlY3QtcmF0aW8lMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHhtbG5z''@;'; put 'put ''JTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHglM0QlMjIwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB5JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaGVpZ2h0JTNEJTIyMjA1NS41NXB4''@;'; put 'put ''JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwd2lkdGglM0QlMjIxNDQwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMDU1LjU1JTIwMTQ0MCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWluWU1pbiUyMHNsaWNl''@;'; put 'put ''JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZGVzYyUzRUxvZ2luJTIwSW1hZ2UlM0MlMkZkZXNjJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0Ql''@;'; put 'put ''MjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAtNC4wMDAwMDAlMjklMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzRkFGQUZBJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNCUyMiUzRSUzQyUyRnJlY3Ql''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxMTA4LjQzJTIwMTQ0My42MyUyMDExMDkuMDglMjAxNDQzLjYzJTIwNDQzLjQ0JTIwNzc3Ljc0JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzOTNEOENBJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBvdmVybGF5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDMzNC45MiUyMDQ0My40NCUyMDc3Ny43NCUyMDAuNzklMjAzMzQuNDklMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwMjExLjg4JTIwMC43OSUyMDMyOS42JTIwNTkuNjIlMjAyNzAuNzclMjIlM0UlM0MlMkZwb2x5''@;'; put 'put ''Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxNjAuNjUlMjAxNjkuNzQlMjAwLjc5JTIwOS43MyUyMDAuNzklMjAyMTEuODglMjA5MC4yNyUy''@;'; put 'put ''MDMwMS40NiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyNTAzLjc3JTIwMTQ0My42''@;'; put 'put ''MyUyMDY5Ny40NyUyMDE0NDMuNjMlMjA4MDMuNzQlMjAxMzM3LjM2JTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNF''@;'; put 'put ''RSUyMiUyMHBvaW50cyUzRCUyMjE1OC4zMyUyMDY5MS4xNSUyMDAuNzklMjA4NDguNzIlMjAwLjc5JTIwMTQyNy40MyUyMDQ0Ny41MiUyMDk4MC43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQ0VEREUwJTIyJTIwcG9pbnRzJTNEJTIyMjU3LjcxJTIwNTkxLjc1JTIwMC43OSUyMDMzNC40OSUyMDAuNzklMjA1MzMuNDIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBOUM5RDUlMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwNTMzLjQyJTIwMC43OSUyMDg0OC43MiUyMDE1OC4zMyUyMDY5MS4xNSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjgwNi40NiUyMDExNDAuODklMjA1NDYuOTQlMjA4ODEuMjglMjA0NDcuNTIlMjA5ODAuNyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5''@;'; put 'put ''Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RkM0REYlMjIlMjBwb2ludHMlM0QlMjI0NDcuNTIlMjA5ODAuNyUyMDAuNzklMjAxNDI3LjQzJTIwMC43OSUyMDE0NDMuNjMlMjA1MDMu''@;'; put 'put ''NzclMjAxNDQzLjYzJTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjYwOC4yMyUy''@;'; put 'put ''MDgxOS45OSUyMDU0Ni45NCUyMDg4MS4yOCUyMDgwNi40NiUyMDExNDAuODklMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5''@;'; put 'put ''NkM3REYlMjIlMjBwb2ludHMlM0QlMjI0MjAuMDUlMjA0MjkuMzklMjAzMTkuMDElMjA1MzAuNDUlMjA2MDguMjMlMjA4MTkuOTklMjA3MDkuMyUyMDcxOC45MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjcwOS4zJTIwNzE4LjkxJTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwOTY4Ljc0JTIwOTc4LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjI2MTkuNTklMjAyMjkuODIlMjAzOTMuNDIlMjAzLjEyJTIwMzI3LjI3JTIwMy4xMiUyMDE2MC42NSUyMDE2OS43NCUyMDQyMC4wNSUyMDQyOS4zOSUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzhFQjVCQyUyMiUyMHBvaW50cyUzRCUyMjMxOS4wMSUyMDUzMC40NSUyMDMxOS4wMSUyMDUzMC40NSUyMDkwLjI3''@;'; put 'put ''JTIwMzAxLjQ2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0NCMEM3JTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwNTkuNjIlMjAyNzAu''@;'; put 'put ''NzclMjA5MC4yNyUyMDMwMS40NiUyMDMxOS4wMSUyMDUzMC40NSUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg0QzREMiUy''@;'; put 'put ''MiUyMHBvaW50cyUzRCUyMjU5LjYyJTIwMjcwLjc3JTIwMC43OSUyMDMyOS42JTIwMC43OSUyMDMzNC40OSUyMDI1Ny43MSUyMDU5MS43NSUyMDMxOS4wMSUyMDUzMC40NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjUzNy41NSUyMDMuMTIlMjAzOTMuNDIlMjAzLjEyJTIwNjE5LjU5JTIwMjI5LjgyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODdEMURCJTIyJTIwcG9pbnRzJTNEJTIyODQ2LjI1JTIwMy4xMiUyMDUzNy41NSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjI5MDkuODclMjAxNDQzLjYzJTIwODUwLjE5JTIwMTM4My44NyUyMDc5MC40MyUyMDE0NDMuNjMlMjIlM0UlM0MlMkZwb2x5Z29u''@;'; put 'put ''JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAyNTcuNzElMjA1OTEuNzUlMjA0NDMuNDQlMjA3NzcuNzQlMjA1NDYu''@;'; put 'put ''OTQlMjA4ODEuMjglMjA2MDguMjMlMjA4MTkuOTklMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjI4NjcuNjQlMjAxMDc5LjclMjA4MDYuNDYlMjAxMTQwLjg5JTIwOTAzLjMxJTIwMTIzNy43OCUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDY1LjU3JTIwMTA3NS41MiUyMDk2OC43NCUyMDk3OC42JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjA5NjQuNDYlMjAxMTc2LjYzJTIy''@;'; put 'put ''JTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDEw''@;'; put 'put ''MTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMiUyMDExNjcu''@;'; put 'put ''OSUyMDc3OS40JTIwMTI2NC42OCUyMDg3Ni40JTIwMTMzNi44NyUyMDgwNC4yMiUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5ODAuODMlMjA0NDcuMzklMjA2OTEuNzQlMjAxNTcuNjYlMjA2MTkuNTklMjAyMjkuODIlMjA5MDguNjYlMjA1MTkuNTYlMjA5ODAuODMlMjA0NDcuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDk2OC43NCUyMDk3OC42JTIwMTE2Ny45MSUyMDc3OS40JTIwOTA4LjY2JTIwNTE5LjU1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjlBRkQ0JTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwOTA4LjY2JTIwNTE5LjU1JTIwMTE2Ny45MSUyMDc3OS40JTIwMTI0MC4wOCUy''@;'; put 'put ''MDcwNy4yMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEwMzQuNTklMjAzLjEyJTIwODQ2LjI1JTIwMy4xMiUy''@;'; put 'put ''MDY5MS43NCUyMDE1Ny42NiUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyMjkuNzUlMjAxOTguNDclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxMjQwLjA4JTIwNzA3LjIxJTIwMTMzNi44NyUyMDgwNC4yMiUyMDE1ODYuMDElMjA1NTUuMDglMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzBDMERDJTIyJTIwcG9pbnRzJTNEJTIyMTIyOS43NSUyMDE5OC40NyUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyNDAuMDglMjA3MDcuMjElMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxNDMzLjMyJTIwMTQ0My42MyUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTQ5MS4xOCUyMDExMDMuNDIlMjIlM0Ul''@;'; put 'put ''M0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDk0OS43OCUyMDEyODQuMjclMjAxMTA5LjA4''@;'; put 'put ''JTIwMTQ0My42MyUyMDExNTAuOTglMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3NUI4QzUlMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxMTUwLjk4JTIwMTQ0My42MyUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0Ql''@;'; put 'put ''MjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMjkyLjIyJTIwMTMwMi4zOCUyMDExMTIuMDMlMjAxMTIyLjAyJTIwMTAxMC45MiUyMDEyMjMuMTMlMjAxMTkxLjA5JTIwMTQwMy41MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzZFQTRCQyUyMiUyMHBvaW50cyUzRCUyMjExOTEuMDklMjAxNDAzLjUxJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxNDMzLjMyJTIwMTQ0My42MyUyMDEyOTIuMjIlMjAxMzAyLjM4JTIyJTNFJTNDJTJGcG9seWdvbiUz''@;'; put 'put ''RSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBv''@;'; put 'put ''aW50cyUzRCUyMjEzODMuMyUyMDg1MC43NSUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxNDkxLjE4JTIwMTEwMy40MiUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxNDkxLjE4JTIwMTEwMy40MiUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTM4My4z''@;'; put 'put ''JTIwODUwLjc1JTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIw''@;'; put 'put ''MTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3OENBRDQlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMlM0QlMjI4MDMuNzQlMjAxMzM3LjM2JTIwODUwLjE5JTIwMTM4My44NyUyMDk0OS43OCUyMDEyODQuMjclMjA5MDMu''@;'; put 'put ''MzElMjAxMjM3Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjAxMTEyLjAz''@;'; put 'put ''JTIwMTEyMi4wMiUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMjY0LjY5JTIwODc2LjQlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3N0I4RDklMjIlMjBwb2lu''@;'; put 'put ''dHMlM0QlMjI2OTcuNDclMjAxNDQzLjYzJTIwNzkwLjQzJTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA4MDMuNzQlMjAxMzM3LjM2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHln''@;'; put 'put ''b24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwOTAzLjMxJTIwMTIzNy43OCUyMDk0OS43OCUyMDEyODQuMjclMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBv''@;'; put 'put ''bHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEwMzguMjQ3Mjk3JTJDJTIwMTE0OS4yNzU0MjklMjklMjByb3RhdGUl''@;'; put 'put ''MjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEwMzguMjQ3Mjk3JTJDJTIwLTExNDkuMjc1NDI5JTI5JTIwJTIyJTIweCUzRCUyMjk2Ni43NTIyOTclMjIlMjB5JTNEJTIyMTExNi40MTA0MyUyMiUyMHdpZHRoJTNEJTIyMTQyLjk5JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0Ul''@;'; put 'put ''M0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90''@;'; put 'put ''YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIy''@;'; put 'put ''JTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40''@;'; put 'put ''NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuNDIlMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIl''@;'; put 'put ''MjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0''@;'; put 'put ''LjIyJTIwMTI2NC42OSUyMDg3Ni40JTIwMTMxMS4xMiUyMDkyMi45NCUyMDEzODMuMyUyMDg1MC43NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhD''@;'; put 'put ''QSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzVEQjVENiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2''@;'; put 'put ''JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDNFNiUyMiUyMHBvaW50cyUzRCUyMjIwNTYlMjAwLjEy''@;'; put 'put ''JTIwMTY0NS40OSUyMDAuMTIlMjAxNjQ4LjQ5JTIwMy4xMiUyMDE5NDQuMDclMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE4OTMuMTIlMjAyNDcuOTclMjAyMDU0LjQ1JTIwODYuNjQlMjAyMDU0LjQ1JTIwMTc5LjYlMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NiUyMDQxMSUyMiUzRSUz''@;'; put 'put ''QyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdBQjlEOSUyMiUyMHBvaW50cyUzRCUyMjE2NDguNDklMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE5NDQuMDclMjAz''@;'; put 'put ''LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjZBRUQ0JTIyJTIwcG9pbnRzJTNEJTIyMjA1NC40NSUyMDg2LjY0JTIwMTg5My4xMiUyMDI0Ny45NyUy''@;'; put 'put ''MDE5MzkuNTglMjAyOTQuNDclMjAyMDU0LjQ1JTIwMTc5LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxODg0''@;'; put 'put ''LjgyJTIwNzA5Ljc4JTIwMjA1NC40NSUyMDg3OS41NyUyMDIwNTQuNDUlMjA1NDAuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBw''@;'; put 'put ''b2ludHMlM0QlMjIxNDg5LjE0JTIwNDU4LjEyJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMDEzNzEuMTMlMjAzMzkuOTklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNzk2LjIyJTIwMTUwLjk5JTIwMTY0OC40OSUyMDMuMTIlMjAxNDI1LjElMjAzLjEyJTIwMTMwMS45MSUyMDEyNi4zMSUyMDE1NjEuMyUyMDM4NS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3OTguOTU0MDY2JTJDJTIwMzg4Ljc5ODc4MSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc5OC45NTQw''@;'; put 'put ''NjYlMkMlMjAtMzg4Ljc5ODc4MSUyOSUyMCUyMiUyMHglM0QlMjIxNjMyLjgyNDA3JTIyJTIweSUzRCUyMjM1NS45MzM3ODElMjIlMjB3aWR0aCUzRCUyMjMzMi4yNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTU4Ni4wMSUyMDU1NS4wOCUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE1NzMuNzExNTc3JTJDJTIwNDcwLjYyMDI2MyUyOSUyMHJvdGF0ZSUyOC00''@;'; put 'put ''NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTU3My43MTE1NzclMkMlMjAtNDcwLjYyMDI2MyUyOSUyMCUyMiUyMHglM0QlMjIxNTIyLjY4MTU4JTIyJTIweSUzRCUyMjQwMi4wODUyNjMlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjEzNy4wNyUyMiUzRSUzQyUy''@;'; put 'put ''RnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3NTguNjc2NzU4JTJDJTIwNjU1Ljc2NzEyMCUyOSUyMHJvdGF0ZSUy''@;'; put 'put ''OC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc1OC42NzY3NTglMkMlMjAtNjU1Ljc2NzEyMCUyOSUyMCUyMiUyMHglM0QlMjIxNzA3LjY0Njc2JTIyJTIweSUzRCUyMjUyOC4yOTIxMiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyMjU0Ljk1JTIyJTNFJTND''@;'; put 'put ''JTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwcG9pbnRzJTNEJTIyMTMwMS45MSUyMDEyNi4zMSUyMDExNzguODQlMjAzLjEyJTIwMTAzNC41OSUyMDMuMTIl''@;'; put 'put ''MjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODNDMEM4JTIyJTIwcG9pbnRzJTNEJTIyMTgxMi42NSUyMDc4MS45NSUyMDIw''@;'; put 'put ''NTQuNDUlMjAxMDIzLjk5JTIwMjA1NC40NSUyMDg3OS41NyUyMDE4ODQuODIlMjA3MDkuNzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM3REM2REMlMjIlMjB0''@;'; put 'put ''cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMzk1LjUxNjkwMSUyQyUyMDI5Mi4yMDY1MTklMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEzOTUuNTE2OTAxJTJDJTIwLTI5Mi4yMDY1MTklMjklMjAlMjIlMjB4JTNEJTIyMTM0NC40OTE5JTIyJTIweSUzRCUy''@;'; put 'put ''MjEwOC43MDE1MTklMjIlMjB3aWR0aCUzRCUyMjEwMi4wNSUyMiUyMGhlaWdodCUzRCUyMjM2Ny4wMSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY4QjhENSUyMiUy''@;'; put 'put ''MHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE2NDUuMzEzNjE5JTJDJTIwNTQyLjI0OTc2MCUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTY0NS4zMTM2MTklMkMlMjAtNTQyLjI0OTc2MCUyOSUyMCUyMiUyMHglM0QlMjIxNTk0LjI4MzYyJTIyJTIweSUz''@;'; put 'put ''RCUyMjUwOS4zODQ3NiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ2clMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgwLjAwMDAwMCUyQyUyMDMuMDAwMDAwJTI5JTIyJTIwc3Ryb2tlJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuMTUlMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0wLjk1JTJDMC4xMiUyMEwwLjk1JTJDODQwLjEyJTIyJTIwaWQlM0QlMjJTaGFwZSUyMiUzRSUzQyUyRnBhdGglM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElM0MlMkZzdmclM0UpOy0tY2xyLWxvZ2luLWVycm9yLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWRhbmdlci04MDApOy0tY2xyLWxvZ2luLWVycm9yLWJvcmRlci1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWxvZ2luLXBhbmVsLWxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItbG9naW4tcGFuZWwtbGluZS1vcGFjaXR5Oi4xfS5sb2dpbi13cmFwcGVye2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTti''@;'; put 'put ''YWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQyUzRnhtbCUyMHZlcnNpb24lM0QlMjIxLjAlMjIlMjBlbmNvZGluZyUzRCUyMnV0Zi04JTIyJTNGJTNFJTBEJTBBJTNDJTIxRE9DVFlQRSUyMHN2ZyUyMFBVQkxJQyUyMCUyMi0lMkYlMkZXM0MlMkYlMkZE''@;'; put 'put ''VEQlMjBTVkclMjAxLjElMkYlMkZFTiUyMiUyMCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGR3JhcGhpY3MlMkZTVkclMkYxLjElMkZEVEQlMkZzdmcxMS5kdGQlMjIlM0UlMEQlMEElM0NzdmclMEQlMEElMjAlMjAlMjAlMjAlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwaWQlM0QlMjJuby1hc3BlY3QtcmF0aW8lMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3Lncz''@;'; put 'put ''Lm9yZyUyRjE5OTklMkZ4bGluayUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHglM0QlMjIwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB5JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwaGVpZ2h0JTNEJTIyMjA1NS41NXB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwd2lkdGglM0Ql''@;'; put 'put ''MjIxNDQwcHglMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyMDU1LjU1JTIwMTQ0MCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMHByZXNlcnZlQXNwZWN0UmF0aW8lM0QlMjJ4TWluWU1pbiUyMHNsaWNlJTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDZGVzYyUzRUxvZ2luJTIwSW1hZ2UlM0MlMkZkZXNjJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUyMHN0cm9rZSUzRCUyMm5vbmUlMjIlMjBzdHJva2Utd2lkdGglM0QlMjIxJTIyJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBmaWxs''@;'; put 'put ''LXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAtNC4wMDAwMDAlMjklMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''ZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzRkFGQUZBJTIyJTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyNCUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMTA4LjQzJTIwMTQ0My42MyUyMDEx''@;'; put 'put ''MDkuMDglMjAxNDQzLjYzJTIwNDQzLjQ0JTIwNzc3Ljc0JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTNEOENBJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUy''@;'; put 'put ''MiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBvdmVybGF5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDMzNC45MiUyMDQ0My40NCUyMDc3Ny43NCUyMDAuNzklMjAzMzQuNDklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwMjExLjg4JTIwMC43OSUyMDMyOS42JTIwNTkuNjIlMjAyNzAuNzclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxNjAuNjUlMjAxNjkuNzQlMjAwLjc5JTIwOS43MyUyMDAuNzklMjAyMTEuODglMjA5MC4yNyUyMDMwMS40NiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTND''@;'; put 'put ''JTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyNTAzLjc3JTIwMTQ0My42MyUyMDY5Ny40NyUyMDE0NDMuNjMlMjA4MDMuNzQlMjAx''@;'; put 'put ''MzM3LjM2JTIwNzA2LjkzJTIwMTI0MC40MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjE1OC4zMyUyMDY5MS4x''@;'; put 'put ''NSUyMDAuNzklMjA4NDguNzIlMjAwLjc5JTIwMTQyNy40MyUyMDQ0Ny41MiUyMDk4MC43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0VEREUwJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMjU3LjcxJTIwNTkxLjc1JTIwMC43OSUyMDMzNC40OSUyMDAuNzklMjA1MzMuNDIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUy''@;'; put 'put ''MGZpbGwlM0QlMjIlMjNBOUM5RDUlMjIlMjBwb2ludHMlM0QlMjIwLjc5JTIwNTMzLjQyJTIwMC43OSUyMDg0OC43MiUyMDE1OC4zMyUyMDY5MS4xNSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nw''@;'; put 'put ''b2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDRFNyUyMiUyMHBvaW50cyUzRCUyMjgwNi40NiUyMDExNDAuODklMjA1NDYuOTQlMjA4ODEuMjglMjA0NDcuNTIlMjA5ODAuNyUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RkM0REYlMjIlMjBwb2ludHMlM0QlMjI0NDcuNTIlMjA5ODAuNyUyMDAuNzklMjAxNDI3LjQzJTIwMC43OSUyMDE0NDMuNjMlMjA1MDMuNzclMjAxNDQzLjYzJTIwNzA2LjkzJTIwMTI0MC40MyUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjYwOC4yMyUyMDgxOS45OSUyMDU0Ni45NCUyMDg4MS4yOCUyMDgwNi40''@;'; put 'put ''NiUyMDExNDAuODklMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI0MjAuMDUlMjA0''@;'; put 'put ''MjkuMzklMjAzMTkuMDElMjA1MzAuNDUlMjA2MDguMjMlMjA4MTkuOTklMjA3MDkuMyUyMDcxOC45MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZE''@;'; put 'put ''NCUyMiUyMHBvaW50cyUzRCUyMjcwOS4zJTIwNzE4LjkxJTIwNjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwOTY4Ljc0JTIwOTc4LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjI2MTkuNTklMjAyMjkuODIlMjAzOTMuNDIlMjAzLjEyJTIwMzI3LjI3JTIwMy4xMiUyMDE2MC42NSUyMDE2OS43NCUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzhFQjVCQyUyMiUyMHBvaW50cyUzRCUyMjMxOS4wMSUyMDUzMC40NSUyMDMxOS4wMSUyMDUzMC40NSUyMDkwLjI3JTIwMzAxLjQ2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzN0NCMEM3JTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwNTkuNjIlMjAyNzAuNzclMjA5MC4yNyUyMDMwMS40NiUyMDMxOS4wMSUyMDUz''@;'; put 'put ''MC40NSUyMDQyMC4wNSUyMDQyOS4zOSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg0QzREMiUyMiUyMHBvaW50cyUzRCUyMjU5LjYyJTIwMjcwLjc3JTIw''@;'; put 'put ''MC43OSUyMDMyOS42JTIwMC43OSUyMDMzNC40OSUyMDI1Ny43MSUyMDU5MS43NSUyMDMxOS4wMSUyMDUzMC40NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUy''@;'; put 'put ''MzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjUzNy41NSUyMDMuMTIlMjAzOTMuNDIlMjAzLjEyJTIwNjE5LjU5JTIwMjI5LjgyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODdEMURCJTIyJTIwcG9pbnRzJTNEJTIyODQ2LjI1JTIwMy4xMiUyMDUzNy41NSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcuNjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMlM0QlMjI5MDkuODclMjAxNDQzLjYzJTIwODUwLjE5JTIwMTM4My44NyUyMDc5MC40MyUyMDE0NDMuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAyNTcuNzElMjA1OTEuNzUlMjA0NDMuNDQlMjA3NzcuNzQlMjA1NDYuOTQlMjA4ODEuMjglMjA2MDguMjMlMjA4MTkuOTklMjA4''@;'; put 'put ''NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjI4NjcuNjQl''@;'; put 'put ''MjAxMDc5LjclMjA4MDYuNDYlMjAxMTQwLjg5JTIwOTAzLjMxJTIwMTIzNy43OCUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIl''@;'; put 'put ''MjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMDY1LjU3JTIwMTA3NS41MiUyMDk2OC43NCUyMDk3OC42JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA4NjcuNjQlMjAxMDc5LjclMjA4NjcuNjQlMjAxMDc5LjclMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdv''@;'; put 'put ''biUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTI0MC4wOCUyMDcwNy4yMiUyMDExNjcuOSUyMDc3OS40JTIwMTI2NC42OCUyMDg3Ni40JTIwMTMz''@;'; put 'put ''Ni44NyUyMDgwNC4yMiUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5ODAuODMl''@;'; put 'put ''MjA0NDcuMzklMjA2OTEuNzQlMjAxNTcuNjYlMjA2MTkuNTklMjAyMjkuODIlMjA5MDguNjYlMjA1MTkuNTYlMjA5ODAuODMlMjA0NDcuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdv''@;'; put 'put ''biUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDk2OC43NCUyMDk3OC42JTIwMTE2Ny45MSUyMDc3OS40JTIwOTA4LjY2JTIwNTE5LjU1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjlBRkQ0JTIyJTIwcG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwOTA4LjY2JTIwNTE5LjU1JTIwMTE2Ny45MSUyMDc3OS40JTIwMTI0MC4wOCUyMDcwNy4yMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjEwMzQuNTklMjAzLjEyJTIwODQ2LjI1JTIwMy4xMiUyMDY5MS43NCUyMDE1Ny42NiUyMDk4MC44MyUyMDQ0Ny4z''@;'; put 'put ''OSUyMDEyMjkuNzUlMjAxOTguNDclMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMjQwLjA4JTIwNzA3LjIxJTIw''@;'; put 'put ''MTMzNi44NyUyMDgwNC4yMiUyMDE1ODYuMDElMjA1NTUuMDglMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzBDMERDJTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyMTIyOS43NSUyMDE5OC40NyUyMDk4MC44MyUyMDQ0Ny4zOSUyMDEyNDAuMDglMjA3MDcuMjElMjAxNDg5LjE0JTIwNDU4LjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''Q3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxNDMzLjMyJTIwMTQ0My42MyUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTQ5MS4xOCUyMDExMDMuNDIlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUyMDk0OS43OCUyMDEyODQuMjclMjAxMTA5LjA4JTIwMTQ0My42MyUyMDExNTAuOTglMjAxNDQzLjYzJTIw''@;'; put 'put ''MTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3NUI4QzUlMjIlMjBwb2ludHMlM0QlMjIxMTUwLjk4JTIwMTQ0My42MyUyMDEy''@;'; put 'put ''MzEuMTYlMjAxNDQzLjYzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjIxMjky''@;'; put 'put ''LjIyJTIwMTMwMi4zOCUyMDExMTIuMDMlMjAxMTIyLjAyJTIwMTAxMC45MiUyMDEyMjMuMTMlMjAxMTkxLjA5JTIwMTQwMy41MSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzZFQTRCQyUyMiUyMHBvaW50cyUzRCUyMjExOTEuMDklMjAxNDAzLjUxJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxNDMzLjMyJTIwMTQ0My42MyUyMDEyOTIuMjIlMjAxMzAyLjM4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzODMuMyUyMDg1MC43NSUyMDEzMTEu''@;'; put 'put ''MTIlMjA5MjIuOTQlMjAxNDkxLjE4JTIwMTEwMy40MiUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxNDkxLjE4JTIwMTEwMy40MiUyMDE4MzAuNjElMjAxNDQzLjYzJTIwMTk3NC44NiUyMDE0NDMuNjMlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTM4My4zJTIwODUwLjc1JTIwMTU2My4zNyUyMDEwMzEuMjMlMjIl''@;'; put 'put ''M0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1''@;'; put 'put ''NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3OENBRDQlMjIl''@;'; put 'put ''MjBwb2ludHMlM0QlMjIxNTYzLjM3JTIwMTAzMS4yMyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDE0NDMuNjMlMjAyMDU0LjQ1JTIwMTAyMy45OSUyMDE4MTIuNjUlMjA3ODEuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjBwb2ludHMlM0QlMjI4MDMuNzQlMjAxMzM3LjM2JTIwODUwLjE5JTIwMTM4My44NyUyMDk0OS43OCUyMDEyODQuMjclMjA5MDMuMzElMjAxMjM3Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUz''@;'; put 'put ''RSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjAxMTEyLjAzJTIwMTEyMi4wMiUyMDEzMTEuMTIlMjA5MjIuOTQlMjAx''@;'; put 'put ''MjY0LjY5JTIwODc2LjQlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3N0I4RDklMjIlMjBwb2ludHMlM0QlMjI2OTcuNDclMjAxNDQzLjYzJTIwNzkwLjQz''@;'; put 'put ''JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA4MDMuNzQlMjAxMzM3LjM2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9s''@;'; put 'put ''eWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwOTAzLjMxJTIwMTIzNy43OCUyMDk0OS43OCUyMDEyODQuMjclMjAxMDEwLjkyJTIwMTIyMy4xMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODEwMzguMjQ3Mjk3JTJDJTIwMTE0OS4yNzU0MjklMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEw''@;'; put 'put ''MzguMjQ3Mjk3JTJDJTIwLTExNDkuMjc1NDI5JTI5JTIwJTIyJTIweCUzRCUyMjk2Ni43NTIyOTclMjIlMjB5JTNEJTIyMTExNi40MTA0MyUyMiUyMHdpZHRoJTNEJTIyMTQyLjk5JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUyOSUyMHRyYW5zbGF0ZSUy''@;'; put 'put ''OC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIy''@;'; put 'put ''JTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuNDIlMjIlMjBwb2ludHMlM0QlMjIxMDEwLjkyJTIwMTIyMy4xMyUy''@;'; put 'put ''MDEwMTAuOTIlMjAxMjIzLjEzJTIwOTY0LjQ2JTIwMTE3Ni42MyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIl''@;'; put 'put ''MjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjklMjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0Ul''@;'; put 'put ''M0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1N0E4RDAlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTI2NC42OSUyMDg3Ni40JTIwMTMxMS4xMiUy''@;'; put 'put ''MDkyMi45NCUyMDEzODMuMyUyMDg1MC43NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUyMG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHls''@;'; put 'put ''ZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzVEQjVENiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMzgzLjMlMjA4NTAuNzUlMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0FGRDNFNiUyMiUyMHBvaW50cyUzRCUyMjIwNTYlMjAwLjEyJTIwMTY0NS40OSUyMDAuMTIlMjAxNjQ4LjQ5JTIwMy4x''@;'; put 'put ''MiUyMDE5NDQuMDclMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE4OTMuMTIlMjAyNDcuOTclMjAyMDU0LjQ1JTIwODYuNjQlMjAyMDU0LjQ1JTIwMTc5LjYlMjAxOTM5LjU4JTIwMjk0LjQ3JTIwMjA1NiUyMDQxMSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdBQjlEOSUyMiUyMHBvaW50cyUzRCUyMjE2NDguNDklMjAzLjEyJTIwMTc5Ni4yMiUyMDE1MC45OSUyMDE5NDQuMDclMjAzLjEyJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNjZBRUQ0JTIyJTIwcG9pbnRzJTNEJTIyMjA1NC40NSUyMDg2LjY0JTIwMTg5My4xMiUyMDI0Ny45NyUyMDE5MzkuNTglMjAyOTQuNDclMjAyMDU0LjQ1JTIwMTc5''@;'; put 'put ''LjYlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNCN0NFRDIlMjIlMjBwb2ludHMlM0QlMjIxODg0LjgyJTIwNzA5Ljc4JTIwMjA1NC40NSUyMDg3OS41NyUy''@;'; put 'put ''MDIwNTQuNDUlMjA1NDAuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNDg5LjE0JTIwNDU4LjEyJTIwMTQ4''@;'; put 'put ''OS4xNCUyMDQ1OC4xMiUyMDEzNzEuMTMlMjAzMzkuOTklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjIxNzk2LjIy''@;'; put 'put ''JTIwMTUwLjk5JTIwMTY0OC40OSUyMDMuMTIlMjAxNDI1LjElMjAzLjEyJTIwMTMwMS45MSUyMDEyNi4zMSUyMDE1NjEuMyUyMDM4NS45NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIw''@;'; put 'put ''ZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3OTguOTU0MDY2JTJDJTIwMzg4Ljc5ODc4MSUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc5OC45NTQwNjYlMkMlMjAtMzg4Ljc5ODc4MSUyOSUyMCUyMiUyMHgl''@;'; put 'put ''M0QlMjIxNjMyLjgyNDA3JTIyJTIweSUzRCUyMjM1NS45MzM3ODElMjIlMjB3aWR0aCUzRCUyMjMzMi4yNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHln''@;'; put 'put ''b24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyMTU4Ni4wMSUyMDU1NS4wOCUyMDE2MzIuNDYlMjA2MDEuNTklMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTU4Ni4wMSUyMDU1NS4wOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE1NzMuNzExNTc3JTJDJTIwNDcwLjYyMDI2MyUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTU3My43''@;'; put 'put ''MTE1NzclMkMlMjAtNDcwLjYyMDI2MyUyOSUyMCUyMiUyMHglM0QlMjIxNTIyLjY4MTU4JTIyJTIweSUzRCUyMjQwMi4wODUyNjMlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjEzNy4wNyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE3NTguNjc2NzU4JTJDJTIwNjU1Ljc2NzEyMCUyOSUyMHJvdGF0ZSUyOC00NC45NzAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTc1''@;'; put 'put ''OC42NzY3NTglMkMlMjAtNjU1Ljc2NzEyMCUyOSUyMCUyMiUyMHglM0QlMjIxNzA3LjY0Njc2JTIyJTIweSUzRCUyMjUyOC4yOTIxMiUyMiUyMHdpZHRoJTNEJTIyMTAyLjA2JTIyJTIwaGVpZ2h0JTNEJTIyMjU0Ljk1JTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjNFQUVFJTIyJTIwcG9pbnRzJTNEJTIyMTMwMS45MSUyMDEyNi4zMSUyMDExNzguODQlMjAzLjEyJTIwMTAzNC41OSUyMDMuMTIlMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9s''@;'; put 'put ''eWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzODNDMEM4JTIyJTIwcG9pbnRzJTNEJTIyMTgxMi42NSUyMDc4MS45NSUyMDIwNTQuNDUlMjAxMDIzLjk5JTIwMjA1NC40NSUyMDg3OS41''@;'; put 'put ''NyUyMDE4ODQuODIlMjA3MDkuNzglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM3REM2REMlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMzk1LjUx''@;'; put 'put ''NjkwMSUyQyUyMDI5Mi4yMDY1MTklMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTEzOTUuNTE2OTAxJTJDJTIwLTI5Mi4yMDY1MTklMjklMjAlMjIlMjB4JTNEJTIyMTM0NC40OTE5JTIyJTIweSUzRCUyMjEwOC43MDE1MTklMjIlMjB3aWR0aCUzRCUyMjEwMi4w''@;'; put 'put ''NSUyMiUyMGhlaWdodCUzRCUyMjM2Ny4wMSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyMzY4QjhENSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODE2NDUu''@;'; put 'put ''MzEzNjE5JTJDJTIwNTQyLjI0OTc2MCUyOSUyMHJvdGF0ZSUyOC00NS4wMDAwMDAlMjklMjB0cmFuc2xhdGUlMjgtMTY0NS4zMTM2MTklMkMlMjAtNTQyLjI0OTc2MCUyOSUyMCUyMiUyMHglM0QlMjIxNTk0LjI4MzYyJTIyJTIweSUzRCUyMjUwOS4zODQ3NiUyMiUyMHdpZHRoJTNEJTIyMTAy''@;'; put 'put ''LjA2JTIyJTIwaGVpZ2h0JTNEJTIyNjUuNzMlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjB0cmFuc2Zvcm0lM0QlMjJ0cmFu''@;'; put 'put ''c2xhdGUlMjgwLjAwMDAwMCUyQyUyMDMuMDAwMDAwJTI5JTIyJTIwc3Ryb2tlJTNEJTIyJTIzMDAwMDAwJTIyJTIwb3BhY2l0eSUzRCUyMjAuMTUlMjIlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0wLjk1''@;'; put 'put ''JTJDMC4xMiUyMEwwLjk1JTJDODQwLjEyJTIyJTIwaWQlM0QlMjJTaGFwZSUyMiUzRSUzQyUyRnBhdGglM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQyUyRmclM0UlMEQlMEElM0MlMkZzdmclM0UpO2JhY2tncm91bmQtc2l6ZToxMDAlO2JhY2tncm91bmQtcG9zaXRpb246MjUuMnJlbSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91''@;'; put 'put ''bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IsICNmYWZhZmEpO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOjEuMnJlbSAzcmVtO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6''@;'; put 'put ''MTAwdmg7d2lkdGg6MjUuMnJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLnRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1sb2dpbi10aXRsZS1mb250LXdlaWdodCwg''@;'; put 'put ''MjAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWxvZ2luLXRpdGxlLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBB''@;'; put 'put ''cmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEuNnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLndlbGNvbWV7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAudGl0bGUgLmhp''@;'; put 'put ''bnR7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tdGl0bGUtY29sb3IsIGJsYWNrKTttYXJnaW4tdG9wOjEuNXJlbTtmb250LXNpemU6LjdyZW19LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50cmFkZW1hcmt7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJr''@;'; put 'put ''LWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC13ZWlnaHQsIDIwMCk7Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5''@;'; put 'put ''OnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstZm9udC1mYW1pbHksIE1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubG9naW4td3JhcHBlciAubG9naW4g''@;'; put 'put ''LnN1YnRpdGxle2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbG9naW4tc3VidGl0bGUtZm9udC13ZWlnaHQsIDIwMCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbG9naW4tc3VidGl0bGUtY29sb3IsIGJsYWNrKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5p''@;'; put 'put ''ciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWxvZ2luLXN1YnRpdGxlLWZvbnQtZmFtaWx5LCBNZXRyb3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEu''@;'; put 'put ''MXJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjIuNHJlbSAwIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1n''@;'; put 'put ''cm91cCAuYXV0aC1zb3VyY2UsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAucGFzc3dvcmQsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2hlY2tib3gsLmxvZ2luLXdyYXBw''@;'; put 'put ''ZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWZvcm0tY29udHJvbCwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY2hlY2tib3gtd3JhcHBlcnttYXJnaW46LjNyZW0gMCAuOXJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJv''@;'; put 'put ''bC1jb250YWluZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lciAuY2xyLXNlbGVjdHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dHt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAg''@;'; put 'put ''LmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7d2lkdGg6MTAwJX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXB7bWF4LXdpZHRoOjEwMCU7d2lk''@;'; put 'put ''dGg6MTAwJTtwYWRkaW5nLXJpZ2h0Oi40OHJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyPi5jbHItaW5wdXQtZ3JvdXA+LmNsci1pbnB1dHt3aWR0aDpjYWxjKDEwMCUgLSAxLjJyZW0pfS5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4tdG9wOi4zcmVtfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbiAudXNlcm5hbWUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91''@;'; put 'put ''cCAudG9vbHRpcC12YWxpZGF0aW9uIC5wYXNzd29yZHt3aWR0aDoxMDAlO21hcmdpbi10b3A6MH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcntkaXNwbGF5Om5vbmU7bWFyZ2luOi4zcmVtIDAgMDtwYWRkaW5nOi40NXJlbSAuNnJlbTtiYWNrZ3JvdW5kOiNjMjFk''@;'; put 'put ''MDA7YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvciwgI2MyMWQwMCk7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvciwgI2ZhZmFmYSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItbG9naW4tZXJyb3ItYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvcjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdl''@;'; put 'put ''L3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5v''@;'; put 'put ''cmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJTIzZmFmYWZhJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZk''@;'; put 'put ''ZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUy''@;'; put 'put ''MGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4JTJD''@;'; put 'put ''MTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMtMS4z''@;'; put 'put ''di02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNEJTIy''@;'; put 'put ''MTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSk7bWFyZ2luOi4wNXJlbSAuM3JlbSAwIDA7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtfS5s''@;'; put 'put ''b2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFjdGl2ZXtkaXNwbGF5OmZsZXh9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuZXJyb3IuYWN0aXZlOmJlZm9yZXtmbGV4OjAgMCAuOHJlbX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3Vw''@;'; put 'put ''IC5idG57bWFyZ2luOjMuNnJlbSAwIDA7bWF4LXdpZHRoOm5vbmV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuZXJyb3IrLmJ0bnttYXJnaW46MS4ycmVtIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5zaWdudXB7bWFyZ2luLXRvcDouNnJlbTtm''@;'; put 'put ''b250LXNpemU6LjdyZW07dGV4dC1hbGlnbjpjZW50ZXJ9LmxvZ2luLXdyYXBwZXIgLmxvZ2luOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jazt3aWR0aDouMDVyZW07aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojMDAwO2JhY2tncm91bmQ6dmFyKC0tY2xy''@;'; put 'put ''LWxvZ2luLXBhbmVsLWxpbmUtY29sb3IsIGJsYWNrKTtvcGFjaXR5Oi4xO29wYWNpdHk6dmFyKC0tY2xyLWxvZ2luLXBhbmVsLWxpbmUtb3BhY2l0eSwgLjEpO3RvcDowO3JpZ2h0Oi0uMXJlbX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsubG9naW4td3JhcHBlcntqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6I2ZhZmFmYTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmFmYWZhKX0ubG9naW4td3JhcHBlciAubG9naW57d2lkdGg6MTAwJTttYXJnaW4tbGVmdDowO3BhZGRpbmc6MS4ycmVtIDIwJX0ubG9naW4t''@;'; put 'put ''d3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzoxLjJyZW0gMTUlfX0ubWFpbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjto''@;'; put 'put ''ZWlnaHQ6MTAwdmg7YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCwgI2ZhZmFmYSl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250''@;'; put 'put ''YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIDNyZW19Lm1haW4tY29udGFpbmVyIC5zdWItbmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2e2ZsZXg6MCAwIDEuOHJlbX0ubWFpbi1jb250YWluZXIgLnUtbWFpbi1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjEgMSBhdXRvO292ZXJmbG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO21pbi1oZWlnaHQ6LjA1cmVtfS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIg''@;'; put 'put ''LmNvbnRlbnQtYXJlYXtmbGV4OjEgMSBhdXRvO292ZXJmbG93LXk6YXV0bzstd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzp0b3VjaDtwYWRkaW5nOjEuMnJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWE+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6''@;'; put 'put ''MH0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5zaWRlbmF2e2ZsZXg6MCAwIGF1dG87b3JkZXI6LTE7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXZ7ZmxleDowIDAgYXV0bztvcmRlcjotMX1AbWVk''@;'; put 'put ''aWEgcHJpbnR7Lm1haW4tY29udGFpbmVye2hlaWdodDphdXRvfX1ib2R5Lm5vLXNjcm9sbGluZyxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSxib2R5Lm5vLXNjcm9sbGluZyAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEsYm9keVtjZHMtbGF5''@;'; put 'put ''b3V0PW5vLXNjcm9sbGluZ10gLm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY29udGVudC1hcmVhe292ZXJmbG93OmhpZGRlbn06cm9vdHstLWNsci1tb2RhbC1jbG9zZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLW1vZGFsLWJnLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLW1vZGFsLWNvbnRlbnQtYm94LXNoYWRvdy1jb2xvcjpyZ2JhKCAwLCAwLCAwLCAuMiApOy0tY2xyLW1vZGFsLWJhY2tkcm9wLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItbW9kYWwtYmFja2Ryb3Atb3BhY2l0''@;'; put 'put ''eTouODU7LS1jbHItbW9kYWwtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItbW9kYWwtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWgzLWNvbG9yKTstLWNsci1tb2RhbC10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItaDMtZm9udC1mYW1pbHkpOy0t''@;'; put 'put ''Y2xyLW1vZGFsLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMy1mb250LXdlaWdodCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVt''@;'; put 'put ''czpjZW50ZXI7cGFkZGluZzoyLjRyZW19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1vZGFse3BhZGRpbmc6LjZyZW19fS5tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwO3dpZHRoOjI4LjhyZW07bWF4LXdpZHRoOjEwMCV9Lm1vZGFsLWRp''@;'; put 'put ''YWxvZy5tb2RhbC1zbXt3aWR0aDoxNC40cmVtfS5tb2RhbC1kaWFsb2cubW9kYWwtbGd7d2lkdGg6NDMuMnJlbX0ubW9kYWwtZGlhbG9nLm1vZGFsLXhse3dpZHRoOjU3LjZyZW19Lm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudHtwYWRkaW5nOjEuMnJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNm''@;'; put 'put ''ZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmctY29sb3IsIHdoaXRlKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1tb2RhbC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjFyZW0gLjFyZW0gIzAwMDM7''@;'; put 'put ''Ym94LXNoYWRvdzowIC4wNXJlbSAuMXJlbSAuMXJlbSB2YXIoLS1jbHItbW9kYWwtY29udGVudC1ib3gtc2hhZG93LWNvbG9yKX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7Ym9yZGVyLWJvdHRvbTpub25lO3BhZGRpbmc6MCAwIDEuMnJlbX0ubW9kYWwtaGVhZGVy''@;'; put 'put ''LS1hY2Nlc3NpYmxle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLm1vZGFsLXRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLW1vZGFsLXRpdGxlLWNvbG9yLCBibGFjayk7bWFyZ2luOjA7cGFkZGluZzowIC4xNXJlbX0ubW9kYWwtaGVhZGVyIC5tb2RhbC10aXRsZTpub3QoW2Nkcy10ZXh0XSksLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAubW9kYWwtdGl0bGU6bm90KFtjZHMtdGV4dF0pe2ZvbnQtc2l6''@;'; put 'put ''ZToxLjFyZW07Zm9udC1mYW1pbHk6TWV0cm9wb2xpcyxBdmVuaXIgTmV4dCxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1tb2RhbC10aXRsZS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0IiwgIkhlbHZldGljYSBOZXVl''@;'; put 'put ''IiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtZm9udC13ZWlnaHQsIDIwMCk7bGluZS1oZWlnaHQ6MS4ycmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0ubW9kYWwtaGVhZGVyIC5jbG9zZSwubW9kYWwtaGVhZGVy''@;'; put 'put ''LS1hY2Nlc3NpYmxlIC5jbG9zZXttYXJnaW4tdG9wOi0uMDVyZW07bWFyZ2luLXJpZ2h0Oi0uMjVyZW07Zm9udC1zaXplOjEuM3JlbTtsaW5lLWhlaWdodDoxLjJyZW19Lm1vZGFsLWhlYWRlciAuY2xvc2UgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2RzLWlj''@;'; put 'put ''b24sLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2UgY2xyLWljb257ZmlsbDojOGM4YzhjO2ZpbGw6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yLCAjOGM4YzhjKTtoZWlnaHQ6MS4ycmVtO3dpZHRoOjEuMnJlbX0ubW9kYWwt''@;'; put 'put ''dGl0bGUtd3JhcHBlcntmbGV4OjF9Lm1vZGFsLXRpdGxlLXdyYXBwZXIgLm1vZGFsLXRpdGxlPmgze21hcmdpbi10b3A6MH0ubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NzB2aDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW47cGFkZGluZzowIC4xNXJlbX0ubW9kYWwt''@;'; put 'put ''Ym9keS13cmFwcGVyPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1vZGFsLWJvZHktd3JhcHBlcj46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6MS4ycmVtIDAgMH0ubW9kYWwt''@;'; put 'put ''Zm9vdGVyIC5idG57bWFyZ2luOjAgMCAwIC42cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NzY4cHgpIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKXsubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZw''@;'; put 'put ''eCl7Lm1vZGFsLWNvbnRlbnR7cGFkZGluZzouNnJlbSAwIC42cmVtIDEuMnJlbX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7cGFkZGluZzowIDEuMnJlbSAuNnJlbSAwfS5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDo1NXZofS5tb2RhbC1mb290ZXJ7cGFk''@;'; put 'put ''ZGluZzouNnJlbSAxLjJyZW0gMCAwfX0ubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmFja2Ryb3AtY29sb3IsICMzMzMzMzMpO29wYWNpdHk6Ljg1O29wYWNpdHk6dmFy''@;'; put 'put ''KC0tY2xyLW1vZGFsLWJhY2tkcm9wLW9wYWNpdHksIC44NSk7ei1pbmRleDoxMDQwfS5tb2RhbCAubW9kYWwtbmF2e2Rpc3BsYXk6bm9uZX06cm9vdHstLWNsci1oZWFkZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtOTAwKTstLWNsci1oZWFkZXItZGl2aWRlci1vcGFjaXR5''@;'; put 'put ''Oi4xNTstLWNsci1oZWFkZXItbmF2LW9wYWNpdHk6LjY1Oy0tY2xyLWhlYWRlci1uYXYtaG92ZXItb3BhY2l0eToxOy0tY2xyLWhlYWRlci0yLWJnLWNvbG9yOiM0ODVhNmE7LS1jbHItaGVhZGVyLTMtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwMCk7LS1j''@;'; put 'put ''bHItaGVhZGVyLTQtYmctY29sb3I6IzI0N2JhZTstLWNsci1oZWFkZXItNS1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTgwMCk7LS1jbHItaGVhZGVyLTYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi0xMDAwKTstLWNsci1oZWFkZXItNy1iZy1jb2xvcjojMzA0MjUw''@;'; put 'put ''Oy0tY2xyLWhlYWRlci04LWJnLWNvbG9yOiMwZjE3MWM7LS1jbHItaGVhZGVyLWZvbnQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLWhlYWRlci10aXRsZS1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItaDUtZm9udC13ZWlnaHQpOy0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseTp2YXIoLS1jbHItaDUtZm9udC1mYW1pbHkpfWhlYWRlciwuaGVhZGVye2Rpc3BsYXk6ZmxleDtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwg''@;'; put 'put ''I2ZhZmFmYSk7YmFja2dyb3VuZC1jb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1iZy1jb2xvciwgIzMzMzMzMyk7aGVpZ2h0OjNyZW07d2hpdGUtc3BhY2U6bm93cmFwfWhlYWRlci5oZWFkZXItMSwuaGVhZGVyLmhlYWRlci0xe2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''IzMzMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItYmctY29sb3IsICMzMzMzMzMpfWhlYWRlci5oZWFkZXItMiwuaGVhZGVyLmhlYWRlci0ye2JhY2tncm91bmQtY29sb3I6IzQ4NWE2YTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMi1iZy1jb2xvciwgIzQ4''@;'; put 'put ''NWE2YSl9aGVhZGVyLmhlYWRlci0zLC5oZWFkZXIuaGVhZGVyLTN7YmFja2dyb3VuZC1jb2xvcjojMzIwMDQ3O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci0zLWJnLWNvbG9yLCAjMzIwMDQ3KX1oZWFkZXIuaGVhZGVyLTQsLmhlYWRlci5oZWFkZXItNHtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiMyNDdiYWU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTQtYmctY29sb3IsICMyNDdiYWUpfWhlYWRlci5oZWFkZXItNSwuaGVhZGVyLmhlYWRlci01e2JhY2tncm91bmQtY29sb3I6IzAwNTY3YTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNS1iZy1j''@;'; put 'put ''b2xvciwgIzAwNTY3YSl9aGVhZGVyLmhlYWRlci02LC5oZWFkZXIuaGVhZGVyLTZ7YmFja2dyb3VuZC1jb2xvcjojMDAzNjRkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci02LWJnLWNvbG9yLCAjMDAzNjRkKX1oZWFkZXIuaGVhZGVyLTcsLmhlYWRlci5oZWFkZXItN3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMzMDQyNTA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTctYmctY29sb3IsICMzMDQyNTApfWhlYWRlci5oZWFkZXItOCwuaGVhZGVyLmhlYWRlci04e2JhY2tncm91bmQtY29sb3I6IzBmMTcxYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFk''@;'; put 'put ''ZXItOC1iZy1jb2xvciwgIzBmMTcxYyl9aGVhZGVyIC5icmFuZGluZywuaGVhZGVyIC5icmFuZGluZ3tkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bzttaW4td2lkdGg6MTAuMnJlbTtwYWRkaW5nOjAgMS4ycmVtO2hlaWdodDozcmVtfWhlYWRlciAuYnJhbmRpbmc+YSxoZWFkZXIgLmJyYW5k''@;'; put 'put ''aW5nPi5uYXYtbGluaywuaGVhZGVyIC5icmFuZGluZz5hLC5oZWFkZXIgLmJyYW5kaW5nPi5uYXYtbGlua3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6M3JlbTt0ZXh0LWRlY29yYXRpb246bm9uZX1oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsaGVhZGVy''@;'; put 'put ''IC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+YTpmb2N1cywuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX1oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbixoZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLGhl''@;'; put 'put ''YWRlciAuYnJhbmRpbmcgY2xyLWljb24sLmhlYWRlciAuYnJhbmRpbmcgLmNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29ue2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OjEuOHJlbTt3aWR0aDoxLjhyZW07bWFyZ2lu''@;'; put 'put ''LXJpZ2h0Oi40NXJlbX1oZWFkZXIgLmJyYW5kaW5nIC50aXRsZSwuaGVhZGVyIC5icmFuZGluZyAudGl0bGV7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLXRpdGxlLWNvbG9yLCAjZmFmYWZhKTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWhlYWRl''@;'; put 'put ''ci10aXRsZS1mb250LXdlaWdodCwgNDAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWhlYWRlci10aXRsZS1mb250LWZhbWlseSwgTWV0cm9wb2xpcywgIkF2ZW5pciBOZXh0''@;'; put 'put ''IiwgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTouOHJlbTtsZXR0ZXItc3BhY2luZzouMDFlbTtsaW5lLWhlaWdodDozcmVtO3RleHQtZGVjb3JhdGlvbjpub25lfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItbmF2LGhlYWRlciAuaGVhZGVy''@;'; put 'put ''LWFjdGlvbnMsLmhlYWRlciAuc2V0dGluZ3MsLmhlYWRlciAuaGVhZGVyLW5hdiwuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3toZWlnaHQ6M3JlbX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5h''@;'; put 'put ''di10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtdGV4dCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LXRleHR7Zm9udC13ZWlnaHQ6NTAwfWhlYWRlciAuc2V0dGluZ3MgY2xyLWljb24saGVhZGVyIC5oZWFkZXItbmF2IGNsci1p''@;'; put 'put ''Y29uLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgY2xyLWljb24sLmhlYWRlciAuc2V0dGluZ3MgY2xyLWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyBjbHItaWNvbntjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9u''@;'; put 'put ''dC1jb2xvciwgI2ZhZmFmYSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWljb24s''@;'; put 'put ''LmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1pY29ue2hlaWdodDozcmVtO3dpZHRoOjNyZW19aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmssaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluaywuaGVhZGVyIC5zZXR0aW5ncyAu''@;'; put 'put ''bmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmssLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5re3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6LjlyZW0gMS4ycmVtO3RleHQtZGVjb3JhdGlv''@;'; put 'put ''bjpub25lO2NvbG9yOiNmYWZhZmE7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yLCAjZmFmYWZhKTtvcGFjaXR5Oi42NTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LW9wYWNpdHksIC42NSl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlcixoZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmVuYWJsZWQ6aG92ZXIsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazplbmFibGVk''@;'; put 'put ''OmhvdmVyLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazplbmFibGVkOmhvdmVye29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LWhvdmVyLW9wYWNpdHksIDEpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmRpc2FibGVkLGhlYWRlciAuaGVhZGVyLW5h''@;'; put 'put ''diAubmF2LWxpbms6ZGlzYWJsZWQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZGlzYWJsZWQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5u''@;'; put 'put ''YXYtbGluazpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgLmZhLGhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5mYSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5r''@;'; put 'put ''IC5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAuZmEsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgLm5hdi1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAuZmEsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIC5uYXYtaWNvbiwuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayAuZmEsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAuZmEsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbntmb250LXNpemU6MS4x''@;'; put 'put ''cmVtfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRl''@;'; put 'put ''ci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYg''@;'; put 'put ''Lm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9w''@;'; put 'put ''OjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNs''@;'; put 'put ''ci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24saGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNv''@;'; put 'put ''bixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6YXV0bztsZWZ0OmF1dG87dHJhbnNmb3JtOm5vbmU7bWFyZ2luLWxlZnQ6MS4ycmVtfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5h''@;'; put 'put ''di10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5hdi10''@;'; put 'put ''ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IC5uYXYtdGV4dHttYXJnaW4tbGVmdDowO3BhZGRpbmctbGVmdDouM3JlbX1oZWFkZXIgLnNldHRpbmdz''@;'; put 'put ''IC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2''@;'; put 'put ''LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHR7ZGlzcGxheTpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2''@;'; put 'put ''ZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5hY3RpdmUsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2ZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluay5hY3RpdmUsLmhlYWRlciAuaGVhZGVy''@;'; put 'put ''LWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjE1KTtvcGFjaXR5OjF9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6Zm9jdXMsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmb2N1cyxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYt''@;'; put 'put ''bGluazpmb2N1cywuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19aGVhZGVyIC5oZWFkZXItbmF2LC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXZ7ZGlzcGxheTpmbGV4O2ZsZXg6MCAwIGF1dG99aGVhZGVyIC5oZWFkZXItbmF2Omxhc3QtY2hpbGQ+Lm5hdi1saW5rOmxhc3QtY2hpbGQ6YWZ0ZXIsLmhlYWRlciAuaGVhZGVyLW5hdjpsYXN0LWNoaWxkPi5uYXYtbGluazpsYXN0LWNoaWxkOmFmdGVye2NvbnRl''@;'; put 'put ''bnQ6bm9uZX1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGUsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zmlyc3Qtb2YtdHlwZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGlu''@;'; put 'put ''azpsYXN0LW9mLXR5cGV7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJzdC1vZi10eXBlOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmxhc3Qtb2YtdHlwZTphZnRlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpmaXJz''@;'; put 'put ''dC1vZi10eXBlOmJlZm9yZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGU6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHItaGVhZGVyLWZv''@;'; put 'put ''bnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLW9wYWNpdHksIC4xNSk7b3BhY2l0eTouMTU7aGVpZ2h0OjJyZW07d2lkdGg6LjA1cmVtO3dpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7dG9wOi41cmVtO2xlZnQ6YXV0''@;'; put 'put ''b31oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGU6YmVmb3Jle2xlZnQ6MH1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmxhc3Qtb2YtdHlwZTphZnRlciwuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGU6YWZ0ZXJ7cmlnaHQ6MH1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpmaXJzdC1vZi10eXBlOmJlZm9yZSxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpsYXN0LW9mLXR5cGU6YWZ0ZXIsLmhl''@;'; put 'put ''YWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlOmZpcnN0LW9mLXR5cGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLmFjdGl2ZTpsYXN0LW9mLXR5cGU6YWZ0ZXJ7Y29udGVudDpub25lfWhlYWRlciAuc2V0dGluZ3MsaGVhZGVyIC5oZWFkZXItYWN0aW9ucywu''@;'; put 'put ''aGVhZGVyIC5zZXR0aW5ncywuaGVhZGVyIC5oZWFkZXItYWN0aW9uc3tmbGV4OjEgMCBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9w''@;'; put 'put ''ZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xle3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0OjNyZW07''@;'; put 'put ''b3V0bGluZS1vZmZzZXQ6LS4yNXJlbTtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7b3BhY2l0eTouNjU7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLW5hdi1vcGFjaXR5LCAuNjUpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5k''@;'; put 'put ''cm9wZG93bi10b2dnbGU6ZW5hYmxlZDpob3ZlcixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmVuYWJsZWQ6aG92ZXIsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTplbmFibGVkOmhvdmVye29wYWNpdHk6MTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItbmF2LWhvdmVyLW9wYWNpdHksIDEpfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpkaXNh''@;'; put 'put ''YmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWlj''@;'; put 'put ''b246bm90KFtzaGFwZV49YW5nbGVdKSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYt''@;'; put 'put ''aWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2''@;'; put 'put ''LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRv''@;'; put 'put ''d24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSl7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtoZWlnaHQ6MS4xcmVtO3dpZHRoOjEuMXJlbTtyaWdodDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRv''@;'; put 'put ''d24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbltzaGFwZV49YW5nbGVdLGhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb25bc2hhcGVePWFuZ2xlXSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0saGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24t''@;'; put 'put ''dG9nZ2xlLm5hdi1pY29uIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb25bc2hhcGVePWFuZ2xlXSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5uYXYtaWNvbiBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6LjZyZW07dG9wOjQ0JX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHR7cGFkZGluZzowIDEuOHJlbSAwIDEuMnJlbX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0saGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRy''@;'; put 'put ''b3Bkb3duLXRvZ2dsZS5uYXYtdGV4dCBjbHItaWNvbltzaGFwZV49YW5nbGVdLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQgY2RzLWljb25bc2hhcGVePWFuZ2xlXSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJv''@;'; put 'put ''cGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNsci1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LXRleHQgY2RzLWljb25bc2hhcGVePWFuZ2xlXSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2ds''@;'; put 'put ''ZS5uYXYtdGV4dCBjbHItaWNvbltzaGFwZV49YW5nbGVdLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi10ZXh0IGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGUubmF2LXRleHQgY2xyLWljb25bc2hhcGVePWFuZ2xlXXtyaWdodDoxLjJyZW19aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uLC5oZWFk''@;'; put 'put ''ZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29ue3dpZHRoOjNyZW07cGFkZGluZy1yaWdodDowfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duLmJv''@;'; put 'put ''dHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSxoZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bi5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4u''@;'; put 'put ''ZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVhZGVyLWFj''@;'; put 'put ''dGlvbnM+LmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnV7dG9wOjg1JX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bjpsYXN0LWNoaWxkLmJvdHRvbS1yaWdodD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93bjpsYXN0LWNoaWxkLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd246bGFzdC1jaGlsZC5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVh''@;'; put 'put ''ZGVyLWFjdGlvbnM+LmRyb3Bkb3duOmxhc3QtY2hpbGQuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51e3JpZ2h0Oi4xNXJlbX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSxoZWFkZXIgLmhlYWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tbWVudSwu''@;'; put 'put ''aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e21hcmdpbi10b3A6LS4ycmVtO2xlZnQ6YXV0bztyaWdodDowfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIDpsYXN0LWNoaWxk''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gOmxhc3QtY2hpbGQuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gOmxhc3QtY2hpbGQuZHJvcGRvd24tbWVudSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gOmxh''@;'; put 'put ''c3QtY2hpbGQuZHJvcGRvd24tbWVudXttYXJnaW4tcmlnaHQ6LjRyZW19aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDowIDAgYXV0bzttYXgtd2lk''@;'; put 'put ''dGg6MTQuNHJlbTtwYWRkaW5nOjA7aGVpZ2h0OjNyZW07Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6LjY1O29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtb3BhY2l0eSwgLjY1KX1oZWFkZXIgLnNlYXJjaC1ib3g6''@;'; put 'put ''ZW5hYmxlZDpob3ZlcixoZWFkZXIgLnNlYXJjaDplbmFibGVkOmhvdmVyLC5oZWFkZXIgLnNlYXJjaC1ib3g6ZW5hYmxlZDpob3ZlciwuaGVhZGVyIC5zZWFyY2g6ZW5hYmxlZDpob3ZlcntvcGFjaXR5OjE7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLW5hdi1ob3Zlci1vcGFjaXR5LCAxKX1o''@;'; put 'put ''ZWFkZXIgLnNlYXJjaC1ib3g6ZGlzYWJsZWQsaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWQsLmhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2g6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24saGVhZGVyIC5zZWFy''@;'; put 'put ''Y2g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaC1ib3g+Lm5hdi1pY29uLC5oZWFkZXIgLnNlYXJjaD4ubmF2LWljb257bWFyZ2luOjAgLjNyZW0gLjE1cmVtIDEuMnJlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsaGVhZGVyIC5zZWFyY2ggbGFiZWwsLmhlYWRlciAuc2VhcmNoLWJveCBs''@;'; put 'put ''YWJlbCwuaGVhZGVyIC5zZWFyY2ggbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjNyZW07bGluZS1oZWlnaHQ6M3JlbTtwYWRkaW5nLWxlZnQ6MS4ycmVtO3RleHQtYWxpZ246Y2VudGVyfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbDpiZWZvcmUsaGVhZGVyIC5zZWFyY2ggbGFi''@;'; put 'put ''ZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaCBsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUy''@;'; put 'put ''MHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjNmZmZmZmYlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMl''@;'; put 'put ''M0UlM0N0aXRsZSUzRVNlYXJjaCUzQyUyRnRpdGxlJTNFJTNDZyUyMGlkJTNEJTIyaWNvbnMlMjIlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNMTUlMkM0LjA1QTEwLjk1JTJDMTAuOTUlMkMwJTJDMSUyQzElMkM0LjA1JTJDMTUlMkMxMSUyQzExJTJDMCUyQzAl''@;'; put 'put ''MkMxJTJDMTUlMkM0LjA1TTE1JTJDMkExMyUyQzEzJTJDMCUyQzElMkMwJTJDMjglMkMxNSUyQzEzJTJDMTMlMkMwJTJDMCUyQzAlMkMxNSUyQzJaJTIyJTJGJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjAlMjBkJTNEJTIyTTMzLjcxJTJDMzIuMjlsLTcuMzctNy40Mi0xLjQy''@;'; put 'put ''JTJDMS40MSUyQzcuMzclMkM3LjQyYTElMkMxJTJDMCUyQzElMkMwJTJDMS40Mi0xLjQxWiUyMiUyRiUzRSUzQyUyRmclM0UlM0MlMkZzdmclM0UpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MXJlbTt3''@;'; put 'put ''aWR0aDoxcmVtO21hcmdpbjoxcmVtIDAgMDt2ZXJ0aWNhbC1hbGlnbjp0b3B9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LGhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0LC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0e2xp''@;'; put 'put ''bmUtaGVpZ2h0OjEuMnJlbTttYXJnaW46LjlyZW0gMH1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XSxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XXtib3JkZXI6MDtiYWNrZ3JvdW5kOjAgMDtjb2xvcjojZmFmYWZhO2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7cGFkZGluZzowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFk''@;'; put 'put ''ZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRl''@;'; put 'put ''ciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmV7YmFja2dyb3VuZDowIDB9aGVhZGVyIC5icmFuZGluZysuc2VhcmNoLGhlYWRlciAu''@;'; put 'put ''YnJhbmRpbmcrLnNlYXJjaC1ib3gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCwuaGVhZGVyIC5icmFuZGluZysuc2VhcmNoLWJveHtwb3NpdGlvbjpyZWxhdGl2ZX1oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2g6YWZ0ZXIsaGVhZGVyIC5icmFuZGluZysuc2VhcmNoLWJveDphZnRlciwuaGVh''@;'; put 'put ''ZGVyIC5icmFuZGluZysuc2VhcmNoOmFmdGVyLC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZDojZmFmYWZhO2JhY2tncm91bmQ6dmFyKC0tY2xyLWhlYWRlci1mb250''@;'; put 'put ''LWNvbG9yLCAjZmFmYWZhKTtvcGFjaXR5OnZhcigtLWNsci1oZWFkZXItZGl2aWRlci1vcGFjaXR5LCAuMTUpO29wYWNpdHk6LjE1O2hlaWdodDoycmVtO3dpZHRoOi4wNXJlbTt3aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO3RvcDouNXJlbTtsZWZ0OjB9QG1l''@;'; put 'put ''ZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCl7aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRlciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2ZsZXg6MSAwIGF1dG87anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO21heC13aWR0aDpub25lfWhlYWRlciAu''@;'; put 'put ''c2VhcmNoLWJveCBsYWJlbCxoZWFkZXIgLnNlYXJjaCBsYWJlbCwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLC5oZWFkZXIgLnNlYXJjaCBsYWJlbHtwYWRkaW5nOjA7d2lkdGg6M3JlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLGhlYWRlciAuc2VhcmNoIGxhYmVsOmJlZm9y''@;'; put 'put ''ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsOmJlZm9yZSwuaGVhZGVyIC5zZWFyY2ggbGFiZWw6YmVmb3Jle2xlZnQ6MXJlbX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsaGVhZGVyIC5zZWFyY2ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCBpbnB1dCwu''@;'; put 'put ''aGVhZGVyIC5zZWFyY2ggbGFiZWwgaW5wdXR7ZGlzcGxheTpub25lfWhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaDphZnRlcixoZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2gtYm94OmFmdGVyLC5oZWFkZXIgLmJyYW5kaW5nKy5zZWFyY2g6YWZ0ZXIsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1i''@;'; put 'put ''b3g6YWZ0ZXJ7Y29udGVudDpub25lfWhlYWRlciAuc2VhcmNoLWJveCsuc2V0dGluZ3MsaGVhZGVyIC5zZWFyY2gtYm94Ky5oZWFkZXItYWN0aW9ucyxoZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3MsaGVhZGVyIC5zZWFyY2grLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNlYXJjaC1ib3grLnNl''@;'; put 'put ''dHRpbmdzLC5oZWFkZXIgLnNlYXJjaC1ib3grLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3MsLmhlYWRlciAuc2VhcmNoKy5oZWFkZXItYWN0aW9uc3twb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvfWhlYWRlciAuc2VhcmNoLWJveCsuc2V0dGluZ3M6YWZ0''@;'; put 'put ''ZXIsaGVhZGVyIC5zZWFyY2gtYm94Ky5oZWFkZXItYWN0aW9uczphZnRlcixoZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3M6YWZ0ZXIsaGVhZGVyIC5zZWFyY2grLmhlYWRlci1hY3Rpb25zOmFmdGVyLC5oZWFkZXIgLnNlYXJjaC1ib3grLnNldHRpbmdzOmFmdGVyLC5oZWFkZXIgLnNlYXJjaC1i''@;'; put 'put ''b3grLmhlYWRlci1hY3Rpb25zOmFmdGVyLC5oZWFkZXIgLnNlYXJjaCsuc2V0dGluZ3M6YWZ0ZXIsLmhlYWRlciAuc2VhcmNoKy5oZWFkZXItYWN0aW9uczphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQ6I2ZhZmFmYTti''@;'; put 'put ''YWNrZ3JvdW5kOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvciwgI2ZhZmFmYSk7b3BhY2l0eTp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItb3BhY2l0eSwgLjE1KTtvcGFjaXR5Oi4xNTtoZWlnaHQ6MnJlbTt3aWR0aDouMDVyZW07d2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0''@;'; put 'put ''aCwgLjA1cmVtKTt0b3A6LjVyZW07bGVmdDowfX1hLmxpbmstbm9ybWFsOmxpbmt7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItbGluay1jb2xvciwgIzAwNzJhMyl9YS5saW5rLWhvdmVyZWQ6bGlua3tjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9y''@;'; put 'put ''LCAjMDA3MmEzKX1hLmxpbmstY2xpY2tlZDpsaW5re2NvbG9yOiM5ZTU3YmM7Y29sb3I6dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yLCAjOWU1N2JjKX1hLmxpbmstdmlzaXRlZDpsaW5re2NvbG9yOiM1NjU5Yjg7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1jb2xvciwgIzU2NTli''@;'; put 'put ''OCl9Lm5hdntkaXNwbGF5OmZsZXg7aGVpZ2h0OjEuOHJlbTtsaXN0LXN0eWxlLXR5cGU6bm9uZTthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luOjA7d2lkdGg6MTAwJTt3aGl0ZS1zcGFjZTpub3dyYXA7Ym94LXNoYWRvdzowIC0uMDVyZW0gI2NjYyBpbnNldDtib3gtc2hhZG93OjAgLS4wNXJl''@;'; put 'put ''bSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvciwgI2NjY2NjYykgaW5zZXR9Lm5hdiAubmF2LWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0OjEuMnJlbX0ubmF2IC5uYXYtaXRlbS5hY3RpdmU+Lm5hdi1saW5re2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LW5hdi1saW5rLWFjdGl2ZS1jb2xvciwgYmxhY2spO2JveC1zaGFkb3c6MCAtLjA1cmVtICNjY2MgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMDVyZW0gMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IsICNjY2NjY2MpIGluc2V0fS5uYXYgLm5hdi1saW5re2NvbG9yOiM2NjY7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjdyZW07Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1uYXYtbGluay1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MS44cmVtO2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAuMTVyZW07Ym94LXNoYWRvdzpub25lfS5uYXYgLm5hdi1saW5rLmJ0bnt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdpbjowO21hcmdpbi1ib3R0b206LS4wNXJlbTtib3JkZXItcmFkaXVzOjB9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxp''@;'; put 'put ''bms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZle2NvbG9yOmluaGVyaXR9Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbmsuYWN0aXZle2JveC1zaGFkb3c6MCAtLjE1cmVtICMwMDcyYTMgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMTVyZW0gMCB2YXIoLS1jbHItbmF2LWFjdGl2''@;'; put 'put ''ZS1ib3gtc2hhZG93LWNvbG9yLCAjMDA3MmEzKSBpbnNldDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2UtaW59Lm5hdiAubmF2LWxpbms6aG92ZXIsLm5hdiAubmF2LWxpbms6Zm9jdXMsLm5hdiAubmF2LWxpbms6YWN0aXZlLC5uYXYgLm5hdi1saW5rLmFjdGl2ZXt0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZX0ubmF2IC5uYXYtbGluay5hY3RpdmV7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yLCBibGFjayk7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1uYXYtbGluay1hY3RpdmUtZm9udC13ZWlnaHQsIDQwMCl9Lm5h''@;'; put 'put ''diAubmF2LWxpbmsubmF2LWl0ZW17bWFyZ2luLXJpZ2h0OjEuMnJlbX06cm9vdHstLWNsci1zdWJuYXYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKX0uc3ViLW5hdiwuc3Vi''@;'; put 'put ''bmF2e2Rpc3BsYXk6ZmxleDtib3gtc2hhZG93OjAgLS4wNXJlbSAjY2NjIGluc2V0O2JveC1zaGFkb3c6MCAtLjA1cmVtIDAgdmFyKC0tY2xyLW5hdi1ib3gtc2hhZG93LWNvbG9yLCAjY2NjY2NjKSBpbnNldDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50''@;'; put 'put ''ZXI7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN1Ym5hdi1iZy1jb2xvciwgd2hpdGUpO2hlaWdodDoxLjhyZW19LnN1Yi1uYXYgLm5hdiwuc3VibmF2IC5uYXZ7ZmxleDoxIDEgYXV0bztwYWRkaW5nLWxlZnQ6MS4ycmVtfS5zdWItbmF2IC5uYXYt''@;'; put 'put ''aXRlbSwuc3ViLW5hdiAubmF2LWl0ZW0gYSwuc3VibmF2IC5uYXYtaXRlbSwuc3VibmF2IC5uYXYtaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5zdWItbmF2IGFzaWRlLC5zdWJuYXYgYXNpZGV7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdo''@;'; put 'put ''dDoxLjhyZW07cGFkZGluZzowIDEuMnJlbX0uc3ViLW5hdiBhc2lkZT46bGFzdC1jaGlsZCwuc3VibmF2IGFzaWRlPjpsYXN0LWNoaWxke21hcmdpbi1yaWdodDowO3BhZGRpbmctcmlnaHQ6MH06cm9vdHstLWNsci1zaWRlbmF2LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC00MDApOy0tY2xyLXNpZGVuYXYtYm9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgpOy0tY2xyLXNpZGVuYXYtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNs''@;'; put 'put ''ci1zaWRlbmF2LWhlYWRlci1jb2xvcjp2YXIoLS1jbHItaDYtY29sb3IpOy0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNi1mb250LXdlaWdodCk7LS1jbHItc2lkZW5hdi1oZWFkZXItZm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5KTstLWNs''@;'; put 'put ''ci1zaWRlbmF2LWNvbG9yOnZhcigtLWNsci1wMS1jb2xvcik7LS1jbHItc2lkZW5hdi1mb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpfS5zaWRlbmF2e2xpbmUtaGVpZ2h0OjEuMnJlbTttYXgtd2lkdGg6MTUuNnJlbTttaW4td2lkdGg6MTAuOHJlbTt3aWR0aDoxOCU7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0Oi4wNXJlbSBzb2xpZCAjY2NjO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudHtmbGV4OjEgMSBhdXRvO292ZXJmbG93LXg6aGlkZGVuO3BhZGRpbmctYm90dG9tOjEuMnJlbX0uc2lkZW5hdiAuc2lkZW5hdi1jb250''@;'; put 'put ''ZW50IC5uYXYtbGlua3tib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItc2lkZW5hdi1saW5rLWFjdGl2ZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1''@;'; put 'put ''cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjppbmhlcml0O2N1cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3dpZHRoOjEwMCV9''@;'; put 'put ''LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbmt7bWFyZ2luOjEuMnJlbSAwIDAgMS41cmVtO3BhZGRpbmctbGVmdDouNnJlbTtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWhlYWRlci1jb2xvciwgIzMzMzMzMyk7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1zaWRlbmF2LWhlYWRlci1mb250LXdlaWdodCwgNTAwKTtmb250LWZhbWlseTpNZXRyb3BvbGlzLEF2ZW5pciBOZXh0LEhlbHZldGljYSBOZXVlLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtZmFtaWx5LCBNZXRy''@;'; put 'put ''b3BvbGlzLCAiQXZlbmlyIE5leHQiLCAiSGVsdmV0aWNhIE5ldWUiLCBBcmlhbCwgc2Fucy1zZXJpZik7Zm9udC1zaXplOi43cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWx9LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbms6aG92ZXJ7YmFja2dy''@;'; put 'put ''b3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCl9LnNpZGVuYXYgLnNpZGVuYXYtY29udGVudD4ubmF2LWxpbmsuYWN0aXZle2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1zaWRlbmF2LWxpbmst''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWxpbmstYWN0aXZlLWNvbG9yLCBibGFjayl9LnNpZGVuYXYgLm5hdi1ncm91cHtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1zaWRlbmF2LWNvbG9yLCAjNjY2NjY2KTtmb250LXdl''@;'; put 'put ''aWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXNpZGVuYXYtZm9udC13ZWlnaHQsIDQwMCk7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDttYXJnaW4tdG9wOjEuMnJlbTt3aWR0aDoxMDAlfS5zaWRlbmF2IC5uYXYtZ3JvdXAgLm5hdi1saXN0LC5zaWRlbmF2IC5u''@;'; put 'put ''YXYtZ3JvdXAgbGFiZWx7cGFkZGluZzowIDAgMCAxLjhyZW07Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJTttYXJnaW46MCAuM3JlbX0uc2lkZW5hdiAubmF2LWdyb3VwIC5uYXYtbGlzdHtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luLXRvcDowfS5zaWRlbmF2''@;'; put 'put ''IC5uYXYtZ3JvdXAgLm5hdi1saXN0IC5uYXYtbGlua3tsaW5lLWhlaWdodDouOHJlbTtwYWRkaW5nOi4ycmVtIDAgLjJyZW0gLjZyZW19LnNpZGVuYXYgLm5hdi1ncm91cCAubmF2LWxpc3QgLm5hdi1saW5rOmhvdmVye2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1z''@;'; put 'put ''aWRlbmF2LWxpbmstaG92ZXItY29sb3IsICNlOGU4ZTgpfS5zaWRlbmF2IC5uYXYtZ3JvdXAgLm5hdi1saXN0IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5O2JhY2tncm91bmQ6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtYmctY29sb3IsICNkOGUzZTkpO2NvbG9y''@;'; put 'put ''OiMwMDA7Y29sb3I6dmFyKC0tY2xyLXNpZGVuYXYtbGluay1hY3RpdmUtY29sb3IsIGJsYWNrKX0uc2lkZW5hdiAubmF2LWdyb3VwIGxhYmVse2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWNvbG9yLCAjMzMzMzMzKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2xyLXNpZGVuYXYtaGVhZGVyLWZvbnQtd2VpZ2h0LCA1MDApO2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsQXZlbmlyIE5leHQsSGVsdmV0aWNhIE5ldWUsQXJpYWwsc2Fucy1zZXJpZjtmb250LWZhbWlseTp2YXIoLS1jbHItc2lkZW5hdi1oZWFkZXItZm9udC1mYW1pbHksIE1l''@;'; put 'put ''dHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlmKTtmb250LXNpemU6LjdyZW07bGluZS1oZWlnaHQ6MS4ycmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbH0uc2lkZW5hdiAubmF2LWdyb3VwIGlucHV0W3R5cGU9Y2hlY2tib3hde3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uc2lkZW5hdiAubmF2LWdy''@;'; put 'put ''b3VwIGlucHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzK2xhYmVse291dGxpbmU6IzNiOTlmYyBhdXRvIC4yNXJlbX0uc2lkZW5hdiAuY29sbGFwc2libGUgbGFiZWx7cGFkZGluZzowIDAgMCAxLjNyZW19LnNpZGVuYXYgLmNvbGxhcHNpYmxlIGxhYmVsOmFmdGVye2NvbnRlbnQ6IiI7ZmxvYXQ6''@;'; put 'put ''bGVmdDtoZWlnaHQ6LjVyZW07d2lkdGg6LjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjRyZW0pIHRyYW5zbGF0ZVkoLjM1cmVtKTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3''@;'; put 'put ''dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIlMjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjM5YTlhOWElM0IlN0QlM0MlMkZzdHls''@;'; put 'put ''ZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUy''@;'; put 'put ''QzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjpt''@;'; put 'put ''aWRkbGU7bWFyZ2luOjB9LnNpZGVuYXYgLmNvbGxhcHNpYmxlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWR+Lm5hdi1saXN0LC5zaWRlbmF2IC5jb2xsYXBzaWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkfnVse2hlaWdodDowO2Rpc3BsYXk6bm9uZX0uc2lkZW5hdiAuY29s''@;'; put 'put ''bGFwc2libGUgaW5wdXRbdHlwZT1jaGVja2JveF1+Lm5hdi1saXN0LC5zaWRlbmF2IC5jb2xsYXBzaWJsZSBpbnB1dFt0eXBlPWNoZWNrYm94XX51bHtoZWlnaHQ6YXV0b30uc2lkZW5hdiAuY29sbGFwc2libGUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZH5sYWJlbDphZnRlcnt0cmFu''@;'; put 'put ''c2Zvcm06cm90YXRlKC05MGRlZykgdHJhbnNsYXRlKC0uMzVyZW0pIHRyYW5zbGF0ZVkoLS40cmVtKX06cm9vdHstLWNsci12ZXJ0aWNhbC1uYXYtZGl2aWRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00''@;'; put 'put ''MDApOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2xyLXA0LWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO3BhZGRpbmctdG9wOi45cmVtO3dpZHRoOjEycmVtO21pbi13aWR0aDoyLjRyZW07YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvciwgI2U4ZThlOCk7d2lsbC1jaGFuZ2U6d2lkdGg7dHJh''@;'; put 'put ''bnNpdGlvbjp3aWR0aCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1kaXZpZGVye2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1zdHls''@;'; put 'put ''ZTpzb2xpZDtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgsIC4wNXJlbSk7bWFyZ2luOi42cmVtIDB9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cHtkaXNwbGF5OmJsb2NrO2ZsZXg6MCAwIGF1dG87aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxLjhyZW19LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50e2Rpc3BsYXk6ZmxleDtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvciwgIzY2NjY2Nil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZXtjb2xvcjojNjY2O2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6LjE1cmVtO2JhY2tncm91bmQ6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYm94LXNoYWRvdy1jb2xvcil9LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDojMDA3MmEzO2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLWFjdGl2ZS1jb2xvciwgIzAwNzJhMyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOiM2NjY7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6MS4ycmVtfS5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LXRleHR7cGFkZGluZy1sZWZ0OjEuMnJlbX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5hdi1pY29uKy5uYXYtdGV4dHtwYWRkaW5nLWxlZnQ6MH0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQgLm5h''@;'; put 'put ''di1saW5rKy5uYXYtZ3JvdXAtdGV4dHtkaXNwbGF5Om5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jaGlsZHJlbntvdmVyZmxvdy15OmhpZGRlbn0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2Vye2ZsZXg6''@;'; put 'put ''MCAwIDEuOHJlbTtib3JkZXI6MDtoZWlnaHQ6MS44cmVtO3BhZGRpbmc6MDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpwb2ludGVyO291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRv''@;'; put 'put ''dWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmlnZ2VyIGNkcy1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV0sLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10cmln''@;'; put 'put ''Z2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJsZV17Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yLCBibGFjayl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7aGVpZ2h0OjEuOHJlbTttYXJnaW4tdG9wOi0uOXJlbX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0''@;'; put 'put ''fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntmbGV4LXNocmluazowO3dpZHRoOi44cmVtO2FsaWduLXNlbGY6Y2VudGVyO21hcmdpbi1yaWdodDouNXJlbTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi10cmlnZ2VyLWljb257bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6LjVyZW07dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRl''@;'; put 'put ''ci10b3AtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6LjA1cmVtO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmln''@;'; put 'put ''Z2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoLCAuMDVyZW0pO3BhZGRpbmctdG9wOi42cmVtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmt7aGVpZ2h0OjEuOHJlbTtwYWRkaW5nOjAgLjZyZW0gMCAxLjJyZW07bGluZS1oZWlnaHQ6''@;'; put 'put ''MS44cmVtO291dGxpbmUtb2Zmc2V0Oi0uMjVyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwtbmF2IC5uYXYtdGV4dHtmbGV4OjEgMSBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmt7ZGlzcGxheTpmbGV4O3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yLCAjNjY2NjY2KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOiM2''@;'; put 'put ''NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IsIHdoaXRlKTtwb3NpdGlvbjpyZWxhdGl2ZX0u''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDouMTVyZW07YmFja2dyb3VuZDp2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0uY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yLCAjNjY2NjY2KTtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yLCAjY2NjY2NjKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWhlYWRlcntwYWRkaW5nOjAgLjZyZW0gMCAxLjJyZW07Zm9udC1zaXplOi42cmVtO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1mb250LXdlaWdodCwgNjAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6''@;'; put 'put ''MS44cmVtfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbntmbGV4OjAgMCAuOHJlbTthbGlnbi1zZWxmOmNlbnRlcjtoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07bWluLWhlaWdodDouOHJlbTttaW4td2lkdGg6LjhyZW07bWFyZ2luLXJpZ2h0Oi4zcmVtO3ZlcnRpY2FsLWFsaWduOm1pZGRs''@;'; put 'put ''ZX0uY2xyLXZlcnRpY2FsLW5hdiBjbHItdmVydGljYWwtbmF2LWdyb3VwLWNoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1idG57ZmxleDoxIDEgYXV0bztwYWRkaW5nOjA7bWFyZ2luOjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7''@;'; put 'put ''b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX0uY2xyLXZlcnRpY2FsLW5hdj4ubmF2LWxpbmssLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1jb250ZW50Pi5uYXYtbGlua3tmbGV4OjAgMCAxLjhyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlcntmbGV4OjAgMCAx''@;'; put 'put ''LjhyZW19LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rKy5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRleHR7ZGlzcGxheTpub25lfS5jbHItdmVydGljYWwtbmF2IC5uYXYtaWNvbisubmF2LWdyb3VwLXRleHR7cGFkZGluZy1sZWZ0OjB9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLW5h''@;'; put 'put ''di1ncm91cHMgLm5hdi1saW5rLC5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtZ3JvdXAgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwtbmF2Lmhhcy1uYXYtZ3JvdXBzIC5uYXYtZ3JvdXAgLm5hdi1ncm91cC10cmlnZ2Vye2ZvbnQtd2VpZ2h0OjYwMH0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwLWNoaWxkcmVuIC5uYXYtbGlua3tmb250LXdlaWdodDo0MDB9LmNsci12ZXJ0aWNhbC1uYXYuaGFzLWljb25zIC5uYXYtZ3JvdXAtY2hpbGRyZW4gLm5hdi1saW5re3BhZGRpbmctbGVmdDoyLjNyZW19LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWxlZnQ6LjE1cmVtIHNv''@;'; put 'put ''bGlkIHZhcigtLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAuYWN0aXZlOm5vdCguaXMtZXhwYW5kZWQpIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257ZmlsbDojMDA3MmEzO2ZpbGw6dmFyKC0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di1pY29uLWFjdGl2ZS1jb2xvciwgIzAwNzJhMyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluay5hY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluazpob3Zlcn4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1i''@;'; put 'put ''Zy1jb2xvciwgI2NjY2NjYyl9LmNsci12ZXJ0aWNhbC1uYXY6bm90KC5pcy1jb2xsYXBzZWQpIC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFz''@;'; put 'put ''cyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZHt3aWR0aDoyLjRyZW07bWluLXdpZHRoOjIuNHJlbTtjdXJzb3I6cG9pbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LXRyaWdnZXJ7bWFyZ2luLXJpZ2h0Oi4xNXJlbX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0p''@;'; put 'put ''IC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZCAubmF2LWljb257bWFyZ2luOjA7bWFyZ2luLWxlZnQ6LjhyZW19Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua3tmbGV4OjAgMCAyLjRyZW19Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5p''@;'; put 'put ''cy1jb2xsYXBzZWQgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGlua34ubmF2LWdyb3VwLXRyaWdnZXJ7ZmxleDowIDAgLjhyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjhyZW0pO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ct''@;'; put 'put ''bWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkg''@;'; put 'put ''LmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1j''@;'; put 'put ''b2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2Vye3BhZGRpbmctbGVmdDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3Jv''@;'; put 'put ''dXAtdHJpZ2dlciBjbHItaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue2hlaWdodDoxLjhyZW07d2lkdGg6LjVyZW07bWFyZ2luLWxlZnQ6LjE1cmVtO21hcmdpbi1yaWdodDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue3dpZHRoOi41cmVtfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpu''@;'; put 'put ''b3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAsLm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5re2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMt''@;'; put 'put ''aWNvbnMgLm5hdi1ncm91cHtkaXNwbGF5OmJsb2NrfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWxpbmt7''@;'; put 'put ''ZGlzcGxheTpmbGV4fS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LWdyb3VwLXRleHQsLm1haW4tY29udGFp''@;'; put 'put ''bmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4''@;'; put 'put ''KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjB9LmNsci12ZXJ0aWNhbC1uYXYubmF2LXRyaWdnZXItLWJvdHRvbSAubmF2LXRyaWdnZXJ7b3Jk''@;'; put 'put ''ZXI6MjttYXJnaW4tdG9wOjB9LmNsci12ZXJ0aWNhbC1uYXYubmF2LXRyaWdnZXItLWJvdHRvbSAubmF2LXRyaWdnZXIrLm5hdi1jb250ZW50e2JvcmRlci1ib3R0b20tY29sb3I6I2NjYztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVy''@;'; put 'put ''LWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aCwgLjA1cmVtKTtib3JkZXIt''@;'; put 'put ''dG9wOm5vbmU7cGFkZGluZy10b3A6MH06cm9vdHstLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2''@;'; put 'put ''LWhvdmVyLWJnOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9y''@;'; put 'put ''ZGVycmFkaXVzKTstLWNsci1yZXNwb25zaXZlLW5hdi1oYW1idXJnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1ib3JkZXItcmFkaXVzKTstLWNsci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOi4ycmVtOy0tY2xyLXJlc3Bv''@;'; put 'put ''bnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1yZXNwb25zaXZlLW5hdi1oZWFkZXItYmFja2Ryb3Atb3BhY2l0eTouODV9LmNsci1uYXYtY2xvc2V7bWFyZ2luOi43NXJlbTstLWNvbG9yOnZhcigtLWNsci1jb2xv''@;'; put 'put ''ci1uZXV0cmFsLTUwMCl9LmNsci1uYXYtY2xvc2U6aG92ZXIsLmNsci1uYXYtY2xvc2U6Zm9jdXN7LS1jb2xvcjp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcil9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7ZGlzcGxh''@;'; put 'put ''eTpub25lfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbiwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YmVmb3JlLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuLC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3JlLC5jbHIt''@;'; put 'put ''bmF2LWNsb3NlPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi4xcmVtO3dpZHRoOjEuMnJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1yYWRpdXM6LjE1cmVt''@;'; put 'put ''O2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbiwuY2xyLW5hdi1jbG9zZT5zcGFue3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0u''@;'; put 'put ''aGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW46YmVmb3JlLC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5o''@;'; put 'put ''ZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dG9wOi0uMzVyZW19LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7Ym90dG9tOi0uMzVyZW19LmhlYWRlci1oYW1i''@;'; put 'put ''dXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbiwuY2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbntiYWNrZ3JvdW5kOjAgMH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2''@;'; put 'put ''LWNsb3NlLmFjdGl2ZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbjphZnRlcntsZWZ0Oi4xNXJlbTt0cmFuc2Zvcm0tb3JpZ2luOjklO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW46YmVmb3Jl''@;'; put 'put ''LC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXIsLmNsci1uYXYtY2xvc2U+c3BhbiwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFu''@;'; put 'put ''OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDouMnJlbTt3aWR0aDouMnJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1yYWRpdXM6LjJyZW07Ym9yZGVyLXJhZGl1czp2''@;'; put 'put ''YXIoLS1jbHItcmVzcG9uc2l2ZS1uYXYtb3ZlcmZsb3ctYm9yZGVyLXJhZGl1cywgLjJyZW0pfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuLC5jbHItbmF2LWNsb3NlPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3ZlcmZsb3ctdHJp''@;'; put 'put ''Z2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlciwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dl''@;'; put 'put ''cj5zcGFuOmJlZm9yZSwuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0b3A6LS40cmVtfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcj5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7Ym90dG9tOi0uNHJlbX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW4s''@;'; put 'put ''LmNsci1uYXYtY2xvc2UuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIuYWN0aXZlPnNwYW46YWZ0ZXIsLmNsci1uYXYtY2xvc2UuYWN0aXZlPnNwYW46YmVmb3JlLC5j''@;'; put 'put ''bHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDouMXJlbTt3aWR0aDoxLjJyZW07bGVmdDotLjNyZW07dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZSwu''@;'; put 'put ''Y2xyLW5hdi1jbG9zZS5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVyLC5jbHItbmF2LWNsb3NlLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEg''@;'; put 'put ''c2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpw''@;'; put 'put ''b2ludGVyO2ZvbnQtc2l6ZToxLjJyZW07aGVpZ2h0OjNyZW07d2lkdGg6M3JlbTtwYWRkaW5nOjAgMCAuMnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6I2ZhZmFmYTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNp''@;'; put 'put ''dHk6LjY1O29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtb3BhY2l0eSwgLjY1KX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0Oi0uMjVy''@;'; put 'put ''ZW19Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6ZW5hYmxlZDpob3ZlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyOmVuYWJsZWQ6aG92ZXJ7b3BhY2l0eToxO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1uYXYtaG92ZXItb3BhY2l0''@;'; put 'put ''eSwgMSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6ZGlzYWJsZWQsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIGF1dG8gMCAwO2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvciwgI2U4ZThlOCk7ei1pbmRleDoxMDM5O2hl''@;'; put 'put ''aWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xOHJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpm''@;'; put 'put ''aXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYmFja2dyb3VuZC1jb2xvciwgI2U4ZThlOCk7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKDE4cmVtKTt0cmFuc2l0aW9uOnRyYW5zZm9y''@;'; put 'put ''bSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0ye292ZXJmbG93OmluaGVyaXR9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYt''@;'; put 'put ''bGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBh''@;'; put 'put ''c2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6MS44cmVtO21hcmdpbi1yaWdodDowfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluaywubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluaywubWFpbi1j''@;'; put 'put ''b250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5re3BhZGRpbmc6MCAuNnJlbSAwIDEuMnJlbTt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9w''@;'; put 'put ''LWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJy''@;'; put 'put ''YWRpdXMsIC4xNXJlbSk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IsICM2NjY2NjYpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xv''@;'; put 'put ''cjojNjY2O2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRp''@;'; put 'put ''dmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2''@;'; put 'put ''LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6''@;'; put 'put ''MDt3aWR0aDouMTVyZW07YmFja2dyb3VuZDp2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi1pY29ue2ZpbGw6IzAwNzJhMztmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IsICMwMDcyYTMpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250''@;'; put 'put ''YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1s''@;'; put 'put ''aW5rOmhvdmVye2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7''@;'; put 'put ''dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWIt''@;'; put 'put ''bmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXIs''@;'; put 'put ''Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIg''@;'; put 'put ''Lm5hdiAubmF2LWxpbmsuYWN0aXZle2JveC1zaGFkb3c6bm9uZX0ubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZle2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLXJlc3BvbnNpdmUt''@;'; put 'put ''bmF2LWhvdmVyLWJnLCB3aGl0ZSl9Lm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMntib3JkZXItcmlnaHQ6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6YWZ0ZXJ7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IsICNmYWZhZmEpO29wYWNpdHk6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLW9wYWNpdHksIC4xNSk7b3Bh''@;'; put 'put ''Y2l0eTouMTU7aGVpZ2h0OjJyZW07d2lkdGg6LjA1cmVtO3dpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7dG9wOi41cmVtO2xlZnQ6MH0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRoOjEycmVtO21pbi13aWR0aDowO292ZXJmbG93''@;'; put 'put ''OmhpZGRlbn0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyKy5icmFuZGluZ3twYWRkaW5nLWxlZnQ6MH0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyKy5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXIt''@;'; put 'put ''dHJpZ2dlcisuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5icmFuZGluZysuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1uYXYrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye21hcmdp''@;'; put 'put ''bi1sZWZ0OmF1dG99Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLWJhY2tkcm9wLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3Vu''@;'; put 'put ''ZDojMDAwO2JhY2tncm91bmQ6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1iZy1jb2xvciwgYmxhY2spO29wYWNpdHk6Ljg1O29wYWNpdHk6dmFyKC0tY2xyLXJlc3BvbnNpdmUtbmF2LWhlYWRlci1iYWNrZHJvcC1vcGFjaXR5LCAuODUpO2N1cnNvcjpwb2ludGVy''@;'; put 'put ''O3otaW5kZXg6MTAzOH0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmssLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTIgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIg''@;'; put 'put ''Lm5hdi1saW5re2ZsZXg6MCAwIGF1dG87b3BhY2l0eToxO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yLCAjNjY2NjY2KX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwt''@;'; put 'put ''MSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5mYXtkaXNwbGF5Om5vbmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsg''@;'; put 'put ''Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yLCAjNjY2NjY2KTtsaW5lLWhlaWdodDoxLjJyZW07cGFkZGluZzouM3JlbSAwIC4zcmVtIDEuMnJlbTt3aGl0ZS1z''@;'; put 'put ''cGFjZTpub3JtYWw7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRl''@;'; put 'put ''eHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjojNjY2O2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IsICM2NjY2NjYpO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWJnLWNvbG9yLCB3aGl0ZSk7cG9zaXRpb246cmVsYXRpdmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1s''@;'; put 'put ''aW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1u''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3dpZHRoOi4xNXJlbTtiYWNrZ3JvdW5kOnZhcigtLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3IpfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVy''@;'; put 'put ''IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yLCAjMDA3MmEzKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOiM2NjY7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvciwgI2NjY2NjYyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5h''@;'; put 'put ''di1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlPi5uYXYtdGV4dCwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0e2NvbG9yOmluaGVyaXR9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vye2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZ3twb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjE4cmVtO21heC13''@;'; put 'put ''aWR0aDoxOHJlbTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OjEuMnJlbX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbmt7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFk''@;'; put 'put ''ZXIgLmJyYW5kaW5nIC5jbHItaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAubG9nbywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjZHMtaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhh''@;'; put 'put ''bWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29uW3NoYXBlPXZtLWJ1Z10sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmNsci12bXctbG9nb3tiYWNrZ3JvdW5kLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLXJhZGl1czouMTVy''@;'; put 'put ''ZW19Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLnRpdGxle2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXNsaWRpbmctcGFuZWwtdGV4dC1jb2xvciwgIzY2NjY2Nik7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW59''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoMTguNnJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVy''@;'; put 'put ''Z2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcntsZWZ0Oi4xNXJlbTt0cmFuc2Zvcm0tb3JpZ2luOjklO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVk''@;'; put 'put ''ZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAu''@;'; put 'put ''c3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtwYWRkaW5nLXRv''@;'; put 'put ''cDo0LjJyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLnNpZGVuYXYtY29udGVudCwubWFpbi1jb250YWluZXIub3Blbi1o''@;'; put 'put ''YW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1t''@;'; put 'put ''ZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAuc2lkZW5hdi1jb250ZW50e3BhZGRpbmctYm90dG9tOjEuMnJlbX0ubWFpbi1jb250''@;'; put 'put ''YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1s''@;'; put 'put ''ZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7dHJhbnNp''@;'; put 'put ''dGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Bl''@;'; put 'put ''bi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMntwYWRkaW5nLXRvcDoxLjJyZW19Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJh''@;'; put 'put ''bnNmb3JtOnRyYW5zbGF0ZSgtMTguNnJlbSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZTphZnRlcntjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xy''@;'; put 'put ''LW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmFmdGVye2hlaWdodDouMXJl''@;'; put 'put ''bTt3aWR0aDoxLjJyZW07bGVmdDotLjNyZW07dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0u''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIu''@;'; put 'put ''b3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0x''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtvdmVyZmxvdzppbmhlcml0O3dpZHRoOjE4cmVtO21heC13aWR0aDoxOHJlbX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1l''@;'; put 'put ''bnUgLnNpZGVuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOjE4cmVtO21heC13aWR0aDoxOHJlbX19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDo3LjJyZW07bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoLTE0LjRyZW0pfS5tYWluLWNv''@;'; put 'put ''bnRhaW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyIC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1j''@;'; put 'put ''b250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3RyYW5zZm9ybTp0cmFuc2xhdGUoMTQuNHJlbSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7d2lkdGg6MTQuNHJlbTttYXgtd2lkdGg6MTQuNHJlbX0ubWFpbi1j''@;'; put 'put ''b250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7b3ZlcmZsb3c6aW5oZXJpdDt3aWR0''@;'; put 'put ''aDoxNC40cmVtO21heC13aWR0aDoxNC40cmVtfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKDE1cmVtKTt0cmFuc2l0''@;'; put 'put ''aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZTphZnRlcntjb250ZW50Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zaWRlbmF2LmNsci1uYXYtbGV2''@;'; put 'put ''ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMnt3aWR0aDoxNC40cmVtO21heC13aWR0aDoxNC40cmVtfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246''@;'; put 'put ''Zml4ZWQ7dG9wOjA7cmlnaHQ6MDtsZWZ0OmF1dG87ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoLTE1cmVtKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6''@;'; put 'put ''bm9uZX19OnJvb3R7LS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTE6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMjp2YXIoLS1jbHItY29s''@;'; put 'put ''b3ItZGFuZ2VyLTgwMCk7LS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTM6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKTstLWNsci1wcm9ncmVzcy1iZy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApfS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDoyZW07bWFyZ2luOjA7bWF4LWhlaWdodDouN3JlbTttaW4taGVpZ2h0Oi4ycmVtO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LnByb2dyZXNzPnByb2dyZXNz''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IsICMwMDcyYTMpO2Rpc3BsYXk6YmxvY2s7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yLCAjZThlOGU4KTtib3JkZXI6MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LnByb2dyZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJv''@;'; put 'put ''Z3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyl9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi1tb3otcHJvZ3Jlc3MtYmFyey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO2Nv''@;'; put 'put ''bG9yOiNlOGU4ZTg7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yLCAjZThlOGU4KTttaW4td2lkdGg6Mi40cmVtO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1pbWFnZTpub25lfS5wcm9ncmVzcz5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtYmFye2JvcmRlci1yYWRpdXM6MDtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJv''@;'; put 'put ''Z3Jlc3MtYmctY29sb3IsICNlOGU4ZTgpfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1pbm5lci1lbGVtZW50ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lfS5wcm9n''@;'; put 'put ''cmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluO3RyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluO2JvcmRlci1yYWRpdXM6MH0ucHJvZ3Jlc3Muc3VjY2Vzcz5wcm9ncmVzc3tjb2xvcjojNWViNzE1O2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSwgIzVlYjcxNSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xv''@;'; put 'put ''ci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3Muc3VjY2Vzcz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9n''@;'; put 'put ''cmVzc3tjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMywgI2MyMWQwMCl9LnByb2dyZXNzLndhcm5pbmc+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0u''@;'; put 'put ''cHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNze2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LnByb2dyZXNzLmRhbmdlcj5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1j''@;'; put 'put ''b2xvci0yLCAjYzIxZDAwKX0ucHJvZ3Jlc3MubGFiZWxlZCwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWR7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1yaWdodDozZW19LnByb2dyZXNzLmxhYmVsZWQ+c3BhbiwucHJvZ3Jlc3Mtc3RhdGljLmxhYmVsZWQ+c3BhbntkaXNwbGF5OmJsb2NrO2Zv''@;'; put 'put ''bnQtc2l6ZToxZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDowO2xpbmUtaGVpZ2h0OjFlbTttYXJnaW4tdG9wOi0uMzc1ZW19QGtleWZyYW1lcyBjbHItcHJvZ3Jlc3MtZmFkZXswJXtvcGFjaXR5OjF9dG97b3BhY2l0eTowfX0ucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZT5wcm9n''@;'; put 'put ''cmVzc1t2YWx1ZT0iMTAwIl0sLnByb2dyZXNzLnByb2dyZXNzLWZhZGU+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdK3NwYW57YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1mYWRlIC4zcyBsaW5lYXIgLjVzIGZvcndhcmRzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3MsLnByb2dyZXNzLmZs''@;'; put 'put ''YXNoPnByb2dyZXNze3RyYW5zaXRpb246Y29sb3IgLjFzIGVhc2Utb3V0IDFzfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNp''@;'; put 'put ''dGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzO3RyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIwIl06''@;'; put 'put ''Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWUsLnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3M6Oi1tb3otcHJv''@;'; put 'put ''Z3Jlc3MtYmFyLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7LW1vei10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3M7dHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvciAuMXMgZWFzZS1vdXQgLjNzfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl17Y29sb3I6IzVlYjcxNTtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEsICM1ZWI3MTUpfS5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJr''@;'; put 'put ''aXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojNWViNzE1O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xLCAjNWViNzE1KX0ucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiM1ZWI3MTU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEsICM1ZWI3MTUpfS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVz''@;'; put 'put ''c1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjZzIGxpbmVhciAxcyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXXtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3It''@;'; put 'put ''MiwgI2MyMWQwMCl9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMTAwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX0u''@;'; put 'put ''cHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yLCAjYzIxZDAwKX1Aa2V5ZnJhbWVzIGNsci1wcm9n''@;'; put 'put ''cmVzcy1sb29wZXJ7MCV7bGVmdDotMTAwJX10b3tsZWZ0OjEwMCV9fS5wcm9ncmVzcy5sb29we3Bvc2l0aW9uOnJlbGF0aXZlfS5wcm9ncmVzcy5sb29wPnByb2dyZXNze292ZXJmbG93OmhpZGRlbjtjb2xvcjp0cmFuc3BhcmVudDtjb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCwg''@;'; put 'put ''dHJhbnNwYXJlbnQpfS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCwgdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy5sb29wPnBy''@;'; put 'put ''b2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsIHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MubG9vcD5wcm9ncmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp0cmFuc3BhcmVudH0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAycyBlYXNlLWluLW91dCBpbmZpbml0ZTtjb250ZW50OiIgIjt0b3A6MDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jaztiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7d2lkdGg6NzUlfS5wcm9ncmVzcy5sb29wLmRhbmdlcjphZnRlciwucHJvZ3Jlc3MubG9vcC53YXJuaW5nOmFmdGVye2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LnByb2dyZXNzLmxvb3Auc3VjY2VzczphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZWI3MTU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9y''@;'; put 'put ''LTEsICM1ZWI3MTUpfS5uYXYtaXRlbSAucHJvZ3Jlc3M6YWZ0ZXJ7dG9wOjB9LnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvciwgI2U4ZThlOCk7ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvciwgIzAwNzJhMyk7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MCU7Y29udGVudDoiICJ9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMiXTpiZWZvcmV7d2lkdGg6MiV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0''@;'; put 'put ''ZXJbZGF0YS12YWx1ZT0iNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXJbZGF0YS12YWx1ZT0iNyJdOmJlZm9yZXt3aWR0aDo1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRp''@;'; put 'put ''Yz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTIiXTpiZWZvcmV7d2lkdGg6MTAl''@;'; put 'put ''fS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE1Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE3Il06YmVmb3Jle3dpZHRoOjE1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltk''@;'; put 'put ''YXRhLXZhbHVlPSIxOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1t''@;'; put 'put ''ZXRlcltkYXRhLXZhbHVlPSIyMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMiJdOmJlZm9yZXt3aWR0aDoyMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0''@;'; put 'put ''YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjYiXTpiZWZvcmUsLnByb2dy''@;'; put 'put ''ZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjciXTpiZWZvcmV7d2lkdGg6MjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI5''@;'; put 'put ''Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFs''@;'; put 'put ''dWU9IjMyIl06YmVmb3Jle3dpZHRoOjMwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVz''@;'; put 'put ''cy1tZXRlcltkYXRhLXZhbHVlPSIzNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNyJdOmJlZm9yZXt3aWR0aDozNSV9LnByb2dyZXNz''@;'; put 'put ''LXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDAiXTpiZWZvcmUsLnBy''@;'; put 'put ''b2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDIiXTpiZWZvcmV7d2lkdGg6NDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9''@;'; put 'put ''IjQzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEt''@;'; put 'put ''dmFsdWU9IjQ2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ3Il06YmVmb3Jle3dpZHRoOjQ1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9n''@;'; put 'put ''cmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGlj''@;'; put 'put ''Pi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MiJdOmJlZm9yZXt3aWR0aDo1MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTQiXTpiZWZvcmUs''@;'; put 'put ''LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTciXTpi''@;'; put 'put ''ZWZvcmV7d2lkdGg6NTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2Rh''@;'; put 'put ''dGEtdmFsdWU9IjYwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYyIl06YmVmb3Jle3dpZHRoOjYwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5w''@;'; put 'put ''cm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3Rh''@;'; put 'put ''dGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NyJdOmJlZm9yZXt3aWR0aDo2NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjgiXTpiZWZv''@;'; put 'put ''cmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzEi''@;'; put 'put ''XTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzIiXTpiZWZvcmV7d2lkdGg6NzAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjczIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVy''@;'; put 'put ''W2RhdGEtdmFsdWU9Ijc0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9Ijc3Il06YmVmb3Jle3dpZHRoOjc1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OSJdOmJlZm9yZSwucHJvZ3Jlc3Mt''@;'; put 'put ''c3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MiJdOmJlZm9yZXt3aWR0''@;'; put 'put ''aDo4MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''ODUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODciXTpiZWZvcmV7d2lkdGg6ODUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9Ijg4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkyIl06YmVmb3Jle3dpZHRoOjkwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MyJdOmJlZm9yZSwucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NiJdOmJlZm9yZXt3''@;'; put 'put ''aWR0aDo5NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTciXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iOTkiXTpiZWZvcmV7d2lkdGg6OTglfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwMCJdOmJlZm9yZXt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXJ7cmlnaHQ6M2VtfS5wcm9ncmVzcy1zdGF0aWMuc3Vj''@;'; put 'put ''Y2Vzcz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzVlYjcxNTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSwgIzVlYjcxNSl9LnByb2dyZXNzLXN0YXRpYy53YXJuaW5nPi5wcm9ncmVzcy1tZXRlcjpiZWZvcmV7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjojYzIxZDAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zLCAjYzIxZDAwKX0ucHJvZ3Jlc3Mtc3RhdGljLmRhbmdlcj4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMiwgI2MyMWQwMCl9LmNhcmQtYmxvY2sgLnByb2dyZXNzLC5jYXJkLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWMsLmNhcmQtZm9vdGVyIC5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpY3ttYXJnaW46MDttYXJnaW4tdG9w''@;'; put 'put ''Oi0uNnJlbTtoZWlnaHQ6LjE4NzVyZW07cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcz5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlciwuY2FyZC1mb290ZXIgLnByb2dyZXNzPnByb2dyZXNzLC5jYXJkLWZv''@;'; put 'put ''b3RlciAucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcntoZWlnaHQ6LjE4NzVyZW07cG9zaXRpb246YWJzb2x1dGV9LmNhcmQtYmxvY2sgLnByb2dyZXNzLnRvcCwuY2FyZC1ibG9jayAucHJvZ3Jlc3Mtc3RhdGljLnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNzLnRvcCwuY2FyZC1m''@;'; put 'put ''b290ZXIgLnByb2dyZXNzLXN0YXRpYy50b3B7bWFyZ2luLXRvcDowO3RvcDowfS5uYXYtaXRlbSAucHJvZ3Jlc3MsLm5hdi1pdGVtIC5wcm9ncmVzcy1zdGF0aWN7bWFyZ2luOjA7aGVpZ2h0Oi4yNHJlbTttaW4taGVpZ2h0Oi4yNHJlbTttYXgtaGVpZ2h0Oi4yNHJlbTtsZWZ0OjB9Lm5hdi1p''@;'; put 'put ''dGVtIC5wcm9ncmVzcz5wcm9ncmVzcywubmF2LWl0ZW0gLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0Oi4yNHJlbTttaW4taGVpZ2h0Oi4yNHJlbTttYXgtaGVpZ2h0Oi4yNHJlbTtwb3NpdGlvbjphYnNvbHV0ZX0ucHJvZ3Jlc3MtYmxvY2t7ZGlzcGxheTpmbGV4O3dp''@;'; put 'put ''ZHRoOjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LnByb2dyZXNzLWJsb2NrPip7ZmxleDowIDAgYXV0bztwYWRkaW5nLXJpZ2h0Oi42cmVtfS5wcm9ncmVzcy1ibG9jaz46Zmlyc3QtY2hpbGR7cGFkZGluZy1yaWdodDouOXJlbX0ucHJvZ3Jlc3MtYmxv''@;'; put 'put ''Y2s+Omxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5wcm9ncmVzcy1ibG9jaz5sYWJlbHtmb250LXdlaWdodDo2MDB9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcywucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLXN0YXRpY3tmbGV4OjAgMSBhdXRvfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jl''@;'; put 'put ''c3MtZ3JvdXB7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDphdXRvO2ZsZXg6MCAxIGF1dG87ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvd3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowfS5wcm9ncmVzcy1ibG9j''@;'; put 'put ''az4ucHJvZ3Jlc3MtZ3JvdXAgLmNsci1yb3c+W2NsYXNzKj1jbHItY29sLV17cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9ja3ttYXJnaW4tYm90dG9tOi42cmVtO3BhZGRpbmc6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2s6bGFz''@;'; put 'put ''dC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrPmxhYmVse21heC13aWR0aDozMyU7bGluZS1oZWlnaHQ6LjlyZW19LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNz''@;'; put 'put ''LXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6LjYzOTVyZW07bWFyZ2luLXRvcDowfS5jYXJkLWJsb2NrIC5wcm9ncmVzcy1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcz4ucHJvZ3Jlc3MtbWV0ZXIsLmNhcmQtYmxv''@;'; put 'put ''Y2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2hlaWdodDouNjM5NXJlbX1fOi1tcy1pbnB1dC1wbGFjZWhvbGRlciAucHJvZ3Jlc3MtYmxvY2s+bGFi''@;'; put 'put ''ZWwsOnJvb3QgLnByb2dyZXNzLWJsb2NrPmxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zcGlubmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDozLjZyZW07d2lkdGg6My42cmVtO21pbi1oZWlnaHQ6My42cmVtO21pbi13aWR0aDozLjZyZW07YW5p''@;'; put 'put ''bWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlO21hcmdpbjowO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHhtbG5zJTNE''@;'; put 'put ''JTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZSUzQSUyMGJsYWNrJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAwLjE1JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzMDA3MmEzJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNEJTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTt0ZXh0LWluZGVudDoxMDAlO292ZXJmbG93OmhpZGRlbjt3''@;'; put 'put ''aGl0ZS1zcGFjZTpub3dyYXB9LnNwaW5uZXIuc3Bpbm5lci1tZHtoZWlnaHQ6MS44cmVtO3dpZHRoOjEuOHJlbTttaW4taGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtfS5zcGlubmVyLnNwaW5uZXItaW5saW5lLC5zcGlubmVyLnNwaW5uZXItc217aGVpZ2h0Oi45cmVtO3dpZHRoOi45''@;'; put 'put ''cmVtO21pbi1oZWlnaHQ6LjlyZW07bWluLXdpZHRoOi45cmVtfS5zcGlubmVyLnNwaW5uZXItaW5saW5le3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5zcGlubmVyLnNwaW5uZXItaW52ZXJzZXtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2''@;'; put 'put ''ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMl''@;'; put 'put ''M0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMHN0cm9rZSUzQSUyMHdoaXRlJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAwLjE1JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzNzRjMWUyJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNE''@;'; put 'put ''JTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0Ml''@;'; put 'put ''MkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKX0uc3Bpbm5lci5zcGlubmVyLW5ldXRyYWwtMHtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMGlkJTNEJTIyTGF5ZXJfMiUyMiUyMGRhdGEtbmFtZSUzRCUyMkxheWVyJTIwMiUyMiUyMHht''@;'; put 'put ''bG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwNzIlMjA3MiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMiUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZpbGwlM0ElMjBub25lJTNCJTBBJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW1pdGVybGltaXQlM0ElMjAxMCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZS13aWR0aCUzQSUyMDVweCUzQiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCU3RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMC5jbHMtMSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cm9rZSUzQSUyMHRyYW5zcGFyZW50JTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlLW9wYWNpdHklM0ElMjAxJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwLmNscy0yJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3Ryb2tlJTNBJTIwJTIzZmZmZmZmJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZz''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VQcmVsb2FkZXJfNzJ4MiUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDY2lyY2xlJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGN4JTNEJTIyMzYlMjIlMjBjeSUzRCUyMjM2JTIyJTIwciUzRCUyMjMzJTIyJTJGJTNFJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTIlMjIlMjBkJTNEJTIyTTE0LjMlMkM2MC45QTMzJTJDMzMlMkMwJTJDMCUyQzElMkMzNiUyQzMlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZwYXRoJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKX0uc3Bpbm5lci5zcGlubmVyLWNoZWNre2Fu''@;'; put 'put ''aW1hdGlvbjpub25lO2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIwMzYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlNaWQlMjBtZWV0''@;'; put 'put ''JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMjBmb2N1c2FibGUlM0QlMjJmYWxzZSUyMiUyMGFyaWEtaGlkZGVuJTNEJTIy''@;'; put 'put ''dHJ1ZSUyMiUyMHJvbGUlM0QlMjJpbWclMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyMzAwNzJhMyUyMiUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xMy43MiUyQzI3LjY5JTJDMy4yOSUyQzE3LjI3YTElMkMxJTJDMCUy''@;'; put 'put ''QzAlMkMxJTJDMS40MS0xLjQxbDklMkM5TDMxLjI5JTJDNy4yOWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNDElMkMxLjQxWiUyMiUzRSUzQyUyRnBhdGglM0UlM0MlMkZzdmclM0UpfS5idG4tc20gLnNwaW5uZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIC5zcGlubmVye2hl''@;'; put 'put ''aWdodDouNjVyZW07d2lkdGg6LjY1cmVtO21pbi1oZWlnaHQ6LjY1cmVtO21pbi13aWR0aDouNjVyZW19LmJ0bi1pY29uOm5vdCguYnRuLXNtKSAuc3Bpbm5lcntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07bWluLWhlaWdodDouOHJlbTttaW4td2lkdGg6LjhyZW19OnJvb3R7LS1jbHItdGFi''@;'; put 'put ''bGUtYmdjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci10aGVhZC1iZ2NvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwKTstLWNsci10YWJsZS1oZWFkZXItYm9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXRhYmxl''@;'; put 'put ''LWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItdGFibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTQwMCk7LS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTst''@;'; put 'put ''LWNsci10YWJsZS1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNsci10YWJsZS1ib3JkZXJ3aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzOi4xcmVtOy0tY2xyLXRhYmxlLWZvbnQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci10aGVhZC1jb2xvcjojNjY2NjY2fS50YWJsZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3''@;'; put 'put ''aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdGFibGUtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IsICM2NjY2NjYpO21hcmdpbjowO21hcmdpbi10b3A6MS4ycmVtO21heC13aWR0aDoxMDAlO3dpZHRo''@;'; put 'put ''OjEwMCV9LnRhYmxlIHRoLC50YWJsZSB0ZHtmb250LXNpemU6LjY1cmVtO2xpbmUtaGVpZ2h0Oi43cmVtO2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9y''@;'; put 'put ''ZGVyLXRvcC1jb2xvcjojZThlOGU4O2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yLCAjZThlOGU4KTtwYWRkaW5nOi41NXJlbSAuNnJlbTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlIHRoLmxlZnQsLnRhYmxlIHRkLmxl''@;'; put 'put ''ZnR7dGV4dC1hbGlnbjpsZWZ0fS50YWJsZSB0aC5sZWZ0OmZpcnN0LWNoaWxkLC50YWJsZSB0ZC5sZWZ0OmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDouM3JlbX0udGFibGUgdGh7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItdGhlYWQtY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNTVy''@;'; put 'put ''ZW07Zm9udC13ZWlnaHQ6NjAwO2xldHRlci1zcGFjaW5nOi4wM2VtO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDti''@;'; put 'put ''b3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLWNvbG9yOiNjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2Nj''@;'; put 'put ''KTtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFi''@;'; put 'put ''bGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LnRhYmxlIHRoZWFkIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFk''@;'; put 'put ''aXVzOi4xcmVtO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGhlYWQgdGg6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6LjFyZW07Ym9yZGVyLXRvcC1yaWdodC1y''@;'; put 'put ''YWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20tbGVm''@;'; put 'put ''dC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20t''@;'; put 'put ''cmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LnRhYmxlLWNvbXBhY3QgdGgsLnRhYmxlLWNvbXBhY3QgdGR7cGFkZGluZy10b3A6LjNyZW07cGFkZGluZy1ib3R0b206LjI1cmVtfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aGVhZCB0aHtib3Jk''@;'; put 'put ''ZXI6MDtib3JkZXItcmFkaXVzOjA7ZGlzcGxheTpub25lfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0''@;'; put 'put ''aCwgLjA1cmVtKTtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aHt0ZXh0LWFs''@;'; put 'put ''aWduOmxlZnQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0ZDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0''@;'; put 'put ''LXN0eWxlOnNvbGlkO2JvcmRlci1yaWdodC13aWR0aDouMDVyZW07Ym9yZGVyLXJpZ2h0LXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xv''@;'; put 'put ''ciwgI2NjY2NjYyk7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IsICNmYWZhZmEpO2ZvbnQtd2VpZ2h0OjYwMH0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aCwu''@;'; put 'put ''dGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjAgbm9uZX0udGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUudGFibGUtdmVy''@;'; put 'put ''dGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9''@;'; put 'put ''LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUudGFibGUtdmVydGljYWwgdGJvZHk6Zmlyc3Qtb2YtdHlwZSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXIt''@;'; put 'put ''dG9wLXJpZ2h0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cywgLjFyZW0pfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRh''@;'; put 'put ''YmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVz''@;'; put 'put ''LCAuMXJlbSl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1yaWdodC1yYWRpdXM6LjFyZW07Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMsIC4xcmVtKX0udGFibGUudGFibGUtbm9ib3JkZXJ7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50O2JvcmRlcjowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6I2NjYztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRl''@;'; put 'put ''ci10b3A6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MCBub25lfS50YWJsZS50YWJsZS1ub2JvcmRlciB0ZHtib3JkZXItdG9wOjAgbm9uZTtwYWRkaW5nLXRvcDouNnJlbX0udGFibGUudGFibGUtbm9ib3JkZXIgdGQ6Zmlyc3QtY2hp''@;'; put 'put ''bGR7Ym9yZGVyLXJpZ2h0OjAgbm9uZX0udGFibGUudGFibGUtbm9ib3JkZXIgdGhlYWQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoZWFkIHRoOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowfS50YWJsZS50YWJsZS1ub2JvcmRlciB0aCwudGFibGUudGFibGUtbm9i''@;'; put 'put ''b3JkZXIgdGR7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0udGFibGUudGFibGUtbm9ib3JkZXIgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRkOmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDowfS50YWJsZS50YWJsZS1jb21wYWN0IHRoLC50YWJsZS50YWJsZS1jb21w''@;'; put 'put ''YWN0IHRke3BhZGRpbmctdG9wOi4zcmVtO3BhZGRpbmctYm90dG9tOi4yNXJlbX0udGFibGUudGFibGUtY29tcGFjdC50YWJsZS1ub2JvcmRlciB0aCwudGFibGUudGFibGUtY29tcGFjdC50YWJsZS1ub2JvcmRlciB0ZHtwYWRkaW5nLXRvcDouMzVyZW07cGFkZGluZy1ib3R0b206LjNyZW19''@;'; put 'put ''OnJvb3R7LS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItdG9vbHRpcC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1''@;'; put 'put ''dHJhbC0wKTstLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMy1mb250LXdlaWdodCl9LnRvb2x0aXB7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OnZpc2libGV9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVu''@;'; put 'put ''dHt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXI7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6MTA1MH0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2luc2V0Oi0yMHB4O2NvbnRlbnQ6IiJ9''@;'; put 'put ''LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjF9LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudDplbXB0eSwudG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50OmVt''@;'; put 'put ''cHR5e3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MH0udG9vbHRpcDpmb2N1c3tvdXRsaW5lOjB9LnRvb2x0aXA6Zm9jdXM+OmZpcnN0LWNoaWxke291dGxpbmUtb2Zmc2V0Oi4wNXJlbTtvdXRsaW5lLXdpZHRoOi4wNXJlbTtvdXRsaW5lLWNvbG9yOiMzYjk5ZmM7b3V0bGluZS1zdHlsZTpz''@;'; put 'put ''b2xpZH0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodHtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0gLjZyZW07d2lkdGg6MTJyZW07cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgNTAlO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDttYXJnaW4tYm90dG9tOi44cmVtfS50b29sdGlwPi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQ6YmVm''@;'; put 'put ''b3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtcmlnaHQ6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjQycmVtO2xlZnQ6MDt0b3A6YXV0bztyaWdodDphdXRvO2NvbnRlbnQ6IiI7Ym9yZGVyLWxlZnQ6LjNyZW0gc29saWQgIzAwMDtib3JkZXItbGVm''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOi4yNXJlbSBzb2xpZCAjMDAwO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJpZ2h0Oi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2Jv''@;'; put 'put ''cmRlci1ib3R0b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdHtjb2xvcjojZmZmO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci10b29sdGlwLWNvbG9yLCB3aGl0ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0g''@;'; put 'put ''LjZyZW07d2lkdGg6MTJyZW07cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byA1MCUgMTAwJSBhdXRvO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTouOHJlbX0udG9vbHRpcC50b29sdGlwLXRvcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29s''@;'; put 'put ''dGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC10b3AtbGVmdDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uNDJyZW07cmlnaHQ6MDt0b3A6YXV0bztsZWZ0OmF1dG87Y29udGVudDoiIjtib3JkZXItcmlnaHQ6LjNyZW0gc29saWQgIzAwMDtib3JkZXItcmlnaHQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgIzAwMDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1sZWZ0Oi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0''@;'; put 'put ''b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLXJpZ2h0e2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW46MDtwYWRkaW5nOi40NXJlbSAu''@;'; put 'put ''NnJlbTt3aWR0aDoxMnJlbTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIGF1dG8gYXV0byA1MCU7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi10b3A6LjhyZW19LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1yaWdodDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0uNDJyZW07bGVmdDowO2JvdHRvbTphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoiIjtib3JkZXItbGVmdDouM3JlbSBzb2xpZCAjMDAwO2JvcmRlci1sZWZ0LWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206LjI1cmVtIHNvbGlkICMwMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmlnaHQ6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVy''@;'; put 'put ''LXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0e2NvbG9yOiNmZmY7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXRvb2x0aXAtY29sb3IsIHdoaXRlKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZC1jb2xvcjojMDAwO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW46MDtwYWRkaW5nOi40NXJlbSAu''@;'; put 'put ''NnJlbTt3aWR0aDoxMnJlbTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDoxMDAlIDUwJSBhdXRvIGF1dG87Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDttYXJnaW4tdG9wOi44cmVtfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAg''@;'; put 'put ''LnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LS40MnJlbTtyaWdodDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1yaWdodDouM3JlbSBzb2xpZCAjMDAwO2JvcmRlci1yaWdodC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOi4yNXJlbSBzb2xpZCAjMDAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWxlZnQ6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVy''@;'; put 'put ''LXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSBhdXRvIGF1''@;'; put 'put ''dG8gMTAwJTtjb2xvcjojZmZmO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yLCB3aGl0ZSk7Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQsIDQwMCk7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzAwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IsIGJsYWNrKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7bGluZS1oZWlnaHQ6''@;'; put 'put ''LjlyZW07bWFyZ2luOjA7cGFkZGluZzouNDVyZW0gLjZyZW07d2lkdGg6MTJyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO21hcmdpbi1sZWZ0Oi44cmVtfS50b29sdGlwLnRvb2x0aXAtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50''@;'; put 'put ''b29sdGlwLXJpZ2h0OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi0uNDVyZW07Ym90dG9tOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci10b3A6LjNyZW0gc29saWQgIzAwMDtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQt''@;'; put 'put ''Y29sb3IpO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgIzAwMDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTouM3JlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDouMjVyZW0gc29saWQgdHJhbnNwYXJl''@;'; put 'put ''bnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC50b29sdGlwLWxlZnQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDo1MCUgMTAwJSBhdXRvIGF1dG87Y29sb3I6I2ZmZjtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdG9vbHRpcC1jb2xvciwgd2hpdGUpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0LCA0MDApO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yLCBibGFjayk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2xpbmUtaGVpZ2h0Oi45cmVtO21hcmdpbjowO3BhZGRpbmc6LjQ1cmVt''@;'; put 'put ''IC42cmVtO3dpZHRoOjEycmVtO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7bWFyZ2luLXJpZ2h0Oi44cmVtfS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdDpiZWZvcmV7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGU7dG9wOjA7cmlnaHQ6LS40NXJlbTtib3R0b206YXV0bztsZWZ0OmF1dG87Y29udGVudDoiIjtib3JkZXItdG9wOi4zcmVtIHNvbGlkICMwMDA7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItbGVmdDouMjVyZW0gc29s''@;'; put 'put ''aWQgIzAwMDtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItYm90dG9tOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRp''@;'; put 'put ''cC50b29sdGlwLXhzPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXhze3dpZHRoOjMuNnJlbX0udG9vbHRpcC50b29sdGlwLXNtPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXNte3dpZHRoOjZyZW19''@;'; put 'put ''LnRvb2x0aXAudG9vbHRpcC1tZD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1tZHt3aWR0aDoxMnJlbX0udG9vbHRpcC50b29sdGlwLWxnPi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxne3dpZHRo''@;'; put 'put ''OjE4cmVtfS50b29sdGlwPi5idG4rLnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWJvdHRvbTouNXJlbX0udG9vbHRpcC50''@;'; put 'put ''b29sdGlwLWJvdHRvbS1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLXRvcDouNXJlbX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi5idG4rLnRvb2x0aXAtY29udGVudHttYXJnaW4tbGVm''@;'; put 'put ''dDouMnJlbX0udG9vbHRpcD4uY2xyLWljb257bWFyZ2luLXJpZ2h0OjB9LnRvb2x0aXA+c3Zne3BvaW50ZXItZXZlbnRzOm5vbmV9LnRvb2x0aXAtdHJpZ2dlcjpmb2N1cysudG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZX06cm9vdHstLWNsci1mb3JtLWRpc2FibGVkLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1mb3Jtcy1sYWJlbC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC04MDApOy0tY2xyLWZvcm1zLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItZm9ybXMtaW52YWxp''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItZGFuZ2VyLTgwMCk7LS1jbHItZm9ybXMtdmFsaWQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNzAwKTstLWNsci1mb3Jtcy12YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNsci1jb2xvci1zdWNjZXNzLTkwMCk7LS1jbHItZm9ybXMtc3VidGV4''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWZvcm1zLXBsYWNlaG9sZGVyLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yOiM2YTdhODE7LS1jbHItZm9ybXMtZm9jdXNlZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcjojOGM4YzhjOy0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvcjojYjNiM2IzOy0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3I6I2IzYjNiMzstLWNsci1mb3Jt''@;'; put 'put ''cy1sYWJlbC1kaXNhYmxlZC1jb2xvcjojOGM4YzhjOy0tY2xyLWZvcm1zLWxhYmVsLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb250LXdlaWdodC1ib2xkKTstLWNsci1mb3Jtcy1ibG9jay1sYWJlbC1mb250LXdlaWdodDo0MDA7LS1jbHItZm9ybXMtdGV4dC1mb250LXdlaWdodDo0MDA7LS1j''@;'; put 'put ''bHItZm9ybXMtdGV4dGFyZWEtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1mb3Jtcy10ZXh0YXJlYS1mb2N1c2VkLW91dGxpbmU6MCAwIC4xcmVtIC4xcmVtICM2OWMwZTI7LS1jbHItZm9ybXMtdGV4dGFyZWEtaW52YWxpZC1mb2N1c2VkLW91dGxp''@;'; put 'put ''bmU6MCAwIC4xcmVtIC4xcmVtICNmZjc0NWM7LS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJhY2tncm91bmQ6cmdiYSggMjIyLCAyMjIsIDIyMiwgLjUgKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1mb3Jt''@;'; put 'put ''cy1zZWxlY3QtY2FyZXQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwKTstLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWNvbG9yKTstLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''Zm9ybXMtdGV4dGFyZWEtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1vcHRpb24tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQt''@;'; put 'put ''Y29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1lcnJvci1mb2N1cy1jb2xvcjojZmY3NDVjOy0tY2xyLWZvcm1zLWNoZWNrYm94LWxhYmVsLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29sb3ItYWN0aW9uLTYwMCk7LS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHIt''@;'; put 'put ''Zm9ybXMtY2hlY2tib3gtZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWZvcm1z''@;'; put 'put ''LWNoZWNrYm94LWJvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWNoZWNrZWQtc2hhZG93Omluc2V0IDAgMCAwIC4zcmVtIHZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1y''@;'; put 'put ''YWRpby1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1tYXJrLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yKTstLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3c6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWNoZWNrZWQtc2hhZG93KTstLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1zaGFkb3c6aW5zZXQgMCAw''@;'; put 'put ''IDAgLjZyZW0gI2U4ZThlODstLWNsci1mb3Jtcy1yYWRpby1mb2N1c2VkLXNoYWRvdzowIDAgLjFyZW0gLjFyZW0gIzY5YzBlMjstLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApfS5jbHItZGF0ZS1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDotbW96LWZpdC1jb250ZW50O21heC13aWR0aDpmaXQtY29udGVudH0uY2xyLWZvcm0tY29udHJvbHttYXJnaW4tdG9wOjEuMnJlbTtkaXNwbGF5''@;'; put 'put ''OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1yZXZlYWwsLmNsci1mb3JtLWNvbnRyb2wgaW5wdXQ6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWR7Y29s''@;'; put 'put ''b3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItdGV4dGFyZWEsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3R7Y29s''@;'; put 'put ''b3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYjNiM2IzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1m''@;'; put 'put ''b3JtLWNvbnRyb2wtZGlzYWJsZWQgaW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1ie2JhY2tncm91bmQtY29sb3I6I2IzYjNiMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpfS5jbHItZm9ybS1jb250''@;'; put 'put ''cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zdWJ0ZXh0LWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1tdWx0aXtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNv''@;'; put 'put ''bnRyb2wtbXVsdGkgLmNsci1jb250cm9sLWxhYmVse3dpZHRoOjEwMCV9LmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6YmxvY2s7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IsICM0NTQ1NDUpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NjAw''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCwgNjAwKTtsaW5lLWhlaWdodDouOXJlbX0uY2xyLWNvbnRyb2wtY29udGFpbmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2Fs''@;'; put 'put ''aWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LjZyZW07d2lkdGg6YXV0b30uY2xyLXN1YnRleHR7ZGlzcGxheTpibG9jaztmb250LXNpemU6LjU1cmVtO2xpbmUtaGVp''@;'; put 'put ''Z2h0Oi42cmVtO2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IsICM4YzhjOGMpO21hcmdpbi10b3A6LjNyZW19LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OjEu''@;'; put 'put ''MnJlbTt3aWR0aDoxLjJyZW07bWluLWhlaWdodDoxLjJyZW07bWluLXdpZHRoOjEuMnJlbTtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKTtmaWxsOiNjMjFkMDA7ZmlsbDp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2My''@;'; put 'put ''MWQwMCk7ZGlzcGxheTpub25lO21hcmdpbi1sZWZ0Oi0xLjJyZW19LmNsci1zdWNjZXNzIC5jbHItaW5wdXR7Ym9yZGVyLWJvdHRvbS1jb2xvcjojM2M4NTAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yLCAjM2M4NTAwKX0uY2xyLXN1Y2Nlc3MgLmNs''@;'; put 'put ''ci12YWxpZGF0ZS1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiMzYzg1MDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yLCAjM2M4NTAwKTtmaWxsOiMzYzg1MDA7ZmlsbDp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IsICMzYzg1MDApO21hcmdpbi1sZWZ0Oi0u''@;'; put 'put ''MnJlbX0uY2xyLXN1Y2Nlc3MgLmNsci1zdWJ0ZXh0e2NvbG9yOiMyNTUyMDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLXRleHQtY29sb3IsICMyNTUyMDApfS5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0Oi0uMnJlbTtkaXNwbGF5OmlubGluZS1ibG9ja30u''@;'; put 'put ''Y2xyLWVycm9yIC5jbHItc3VidGV4dHtjb2xvcjojYzIxZDAwO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6OS42cmVtO2ZsZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDouMTVyZW19LmNsci1mb3JtLWhvcml6b250YWwuY2xyLXJvdyAuY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWx7d2lkdGg6YXV0b30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sPi5jbHItY29udHJvbC1sYWJlbHt3aWR0aDo5LjZyZW07bWluLXdpZHRoOjku''@;'; put 'put ''NnJlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbC5jbHItcm93Pi5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvO21pbi13aWR0aDphdXRvfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOi4xNXJlbX0uY2xyLWZvcm0tY29tcGFj''@;'; put 'put ''dCAuY2xyLWZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi10b3A6LjZyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXh9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO21hcmdpbi10b3A6LjNyZW07bWFyZ2luLWxlZnQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHQsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xy''@;'; put 'put ''LXZhbGlkYXRlLWljb24sLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0s''@;'; put 'put ''LmNsci1mb3JtLWdyb3Vwe3BhZGRpbmc6LjNyZW19LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApO2ZpbGw6I2MyMWQwMDtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZh''@;'; put 'put ''bGlkLWNvbG9yLCAjYzIxZDAwKTtmb250LXNpemU6LjY1cmVtO21hcmdpbi1sZWZ0Oi4zcmVtfS5jbHItY2hlY2tib3gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXh9LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7''@;'; put 'put ''ZGlzcGxheTpibG9ja30uY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1jaGVja2JveC13cmFwcGVyfi5jbHItc3VidGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''e3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWluLWhlaWdodDoxLjJyZW07cGFkZGluZy1sZWZ0OjEuMXJlbTttYXJnaW4tdG9wOjA7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MS4ycmVtO2NvbG9yOiM0NTQ1NDU7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWxh''@;'; put 'put ''YmVsLWNvbG9yLCAjNDU0NTQ1KX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RvcDouMjVyZW07bGVmdDowO2hlaWdodDouOHJlbTt3aWR0aDouOHJlbX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjJyZW07bGVmdDowO2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiM2''@;'; put 'put ''YTdhODE7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNsci1jaGVja2JveC13cmFwcGVyIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmZvY3VzKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfS5jbHItY2hlY2tib3gtd3Jh''@;'; put 'put ''cHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDoiIjtkaXNwbGF5Om5vbmU7aGVpZ2h0Oi4yNXJlbTt3aWR0aDouNHJlbTtib3JkZXItbGVmdDouMXJlbSBzb2xpZDtib3JkZXItYm90dG9tOi4xcmVtIHNv''@;'; put 'put ''bGlkO2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvciwgd2hpdGUpO3RvcDouMnJlbTtsZWZ0Oi4ycmVtO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC4ycmVtKSByb3RhdGUoLTQ1ZGVnKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQ6IzAwNzJhMztiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1iYWNrZ3JvdW5kLWNvbG9yLCAjMDA3MmEzKTtib3JkZXI6MH0uY2xyLWNoZWNrYm94LXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdLmNsci1pbmRldGVybWluYXRlKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmUs''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmluZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojMDA3MmEzO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtaW5k''@;'; put 'put ''ZXRlcm1pbmF0ZS1ib3JkZXItY29sb3IsICMwMDcyYTMpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXIsLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmlu''@;'; put 'put ''ZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmFmdGVye2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA3MmEzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yLCAjMDA3MmEzKTtk''@;'; put 'put ''aXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06dHJhbnNsYXRlWSguMnJlbSl9LmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNoZWNrYm94LXdyYXBwZXIu''@;'; put 'put ''Y2xyLWNoZWNrYm94LWlubGluZSAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtO3dpZHRoOmF1dG99LmNsci1lcnJvciAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJl''@;'; put 'put ''Zm9yZXtib3JkZXItY29sb3I6I2MyMWQwMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''O2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yLCAjOGM4YzhjKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZSwu''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2Jv''@;'; put 'put ''eC1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yLCAjY2NjY2NjKTtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6LjFy''@;'; put 'put ''ZW0gc29saWQ7Ym9yZGVyLWJvdHRvbTouMXJlbSBzb2xpZDtib3JkZXItbGVmdC1jb2xvcjojMDAwO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yLCBibGFjayk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci1ib3R0''@;'; put 'put ''b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLW1hcmstY29sb3IsIGJsYWNrKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZC5jbHItaW5kZXRlcm1pbmF0ZSsuY2xyLWNv''@;'; put 'put ''bnRyb2wtbGFiZWw6YWZ0ZXIsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aW5kZXRlcm1pbmF0ZSsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWxlZnQ6bm9uZX0uY2xyLWZvcm0tY29t''@;'; put 'put ''cGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydDtoZWlnaHQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXN1YnRleHR7bWFy''@;'; put 'put ''Z2luLWxlZnQ6LjNyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6LjZyZW07d2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXIg''@;'; put 'put ''LmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MH0uY2xyLWZpbGUtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tdG9wOi4zcmVtfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9ja30uY2xyLWZpbGUtd3Jh''@;'; put 'put ''cHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtvcGFjaXR5OjA7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDou''@;'; put 'put ''M3JlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4dHtsaW5lLWhlaWdodDoxLjJyZW07bWFyZ2luLXRvcDowfS5jbHIt''@;'; put 'put ''Zm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjA7bGluZS1oZWlnaHQ6MS4wOHJlbX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZpbGUtd3JhcHBlciAuYnRue2hlaWdodDoxLjJyZW19LmNsci1pbnB1dC13cmFwcGVye3doaXRlLXNw''@;'; put 'put ''YWNlOm5vd3JhcDttYXgtaGVpZ2h0OjEuMnJlbX0uY2xyLWlucHV0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVz''@;'; put 'put ''OjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90''@;'; put 'put ''dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmc6MCAuM3JlbTttYXgtaGVpZ2h0OjEuMnJlbTtmb250LXNpemU6LjY1cmVtfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9u''@;'; put 'put ''bHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTow''@;'; put 'put ''IDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3Vze2JvcmRlci1ib3R0b20tY29sb3I6IzAwNzJhMztib3JkZXItYm90dG9tLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yLCAjMDA3MmEzKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYzIxZDAwO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0''@;'; put 'put ''cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IsICNjMjFkMDApIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHld''@;'; put 'put ''KTpmb2N1cywuY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1c3tib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1zaXplOjEwMCUg''@;'; put 'put ''MTAwJX0uY2xyLWZvcm0tY29udHJvbC5yb3cgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpjYWxjKDEwMCUgLSAxLjJyZW0pfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1pbnB1dH4uY2xyLXN1YnRleHR7bWFy''@;'; put 'put ''Z2luLWxlZnQ6LjNyZW19LmNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyAxLjJyZW0pfTo6cGxhY2Vob2xkZXJ7Y29sb3I6IzRmNjE2OTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3IsICM0ZjYxNjkpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMw''@;'; put 'put ''MDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2U7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjEuMnJlbX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3Vze2JvcmRl''@;'; put 'put ''ci1ib3R0b20tY29sb3I6IzAwNzJhMztib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yLCAjMDA3MmEzKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3Vze3dpZHRoOmF1dG99LmNsci1pbnB1dC1ncm91cCAu''@;'; put 'put ''Y2xyLWlucHV0e2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO21hcmdpbi1yaWdodDowO21heC13aWR0aDoxMDAlfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXN7YmFja2dyb3VuZC1zaXplOjA7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCBzZWxlY3Qs''@;'; put 'put ''LmNsci1pbnB1dC1ncm91cCAuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCwuY2xyLWlucHV0LWdyb3VwIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7Ym9yZGVyOjB9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWFkZG9ue2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLXN1YnRleHQtY29sb3IsICM4YzhjOGMpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hZGRvbjpmaXJzdC1jaGlsZHtwYWRkaW5nOjAgMCAwIC40NXJlbX0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb246bGFzdC1jaGlsZHtwYWRk''@;'; put 'put ''aW5nOjAgLjQ1cmVtIDAgMH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzow''@;'; put 'put ''O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvciwgIzAwNzJhMyk7cGFkZGluZzowIC40NXJlbX1idXR0b24uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5w''@;'; put 'put ''dXQtZ3JvdXAtaWNvbi1hY3Rpb257Y3Vyc29yOnBvaW50ZXJ9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIGNkcy1pY29uLC5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6LjlyZW07d2lkdGg6''@;'; put 'put ''LjlyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtLjA1cmVtLC0uMDVyZW0pfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7''@;'; put 'put ''Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cHtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8g''@;'; put 'put ''Ym90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCkgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQtZ3JvdXA6''@;'; put 'put ''Zm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwLmNsci1mb2N1c3tib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCk7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWZv''@;'; put 'put ''cm0taG9yaXpvbnRhbCAuY2xyLWlucHV0LWdyb3Vwe21heC13aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2xpbmUtaGVpZ2h0OjEuMnJlbX0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxh''@;'; put 'put ''YmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0''@;'; put 'put ''eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dG9wOi4yNXJlbTtsZWZ0OjA7aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtfS5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttaW4taGVpZ2h0OjEu''@;'; put 'put ''MnJlbTtwYWRkaW5nLWxlZnQ6MS4xcmVtO21hcmdpbi10b3A6MDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjJyZW07Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtY29sb3IsICM0NTQ1NDUpfS5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRy''@;'; put 'put ''b2wtbGFiZWw6ZW1wdHl7cGFkZGluZy1sZWZ0OjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi4ycmVtO2xlZnQ6MDtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdo''@;'; put 'put ''dDouOHJlbTt3aWR0aDouOHJlbTtib3JkZXI6LjA1cmVtIHNvbGlkO2JvcmRlci1jb2xvcjojNmE3YTgxO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yLCAjNmE3YTgxKTtib3JkZXItcmFkaXVzOjUwJX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JveC1zaGFkb3c6aW5zZXQgMCAwIDAgLjNyZW0gIzAwNzJhMztib3gtc2hhZG93OnZhcigtLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3csIGluc2V0IDAgMCAwIC4zcmVtICMwMDcyYTMpO2JvcmRlcjowfS5jbHIt''@;'; put 'put ''cmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cysuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6SGlnaGxpZ2h0IHNvbGlkIC4xcmVtO291dGxpbmU6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIHNvbGlkIC4xcmVtO291dGxpbmUtb2Zmc2V0Oi4wNXJlbX0uY2xy''@;'; put 'put ''LXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6SGlnaGxpZ2h0IHNvbGlkIC4xcmVtO291dGxpbmU6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yIHNvbGlkIC4xcmVtO291dGxpbmUtb2Zmc2V0Oi4w''@;'; put 'put ''NXJlbX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106ZGlzYWJsZWQrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3JkZXI6MDtib3gtc2hhZG93Omluc2V0IDAgMCAwIC42cmVtICNlOGU4ZTg7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tZGlzYWJsZWQt''@;'; put 'put ''c2hhZG93LCBpbnNldCAwIDAgMCAuNnJlbSAjZThlOGU4KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpkaXNhYmxlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzY2NjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yLCAjNjY2NjY2KTtib3gtc2hhZG93Omluc2V0IDAgMCAwIC4zcmVtICNlOGU4ZTg7Ym94LXNoYWRvdzp2YXIoLS1jbHItZm9ybXMtcmFkaW8tY2hlY2tlZC1kaXNhYmxlZC1zaGFkb3csIGluc2V0IDAgMCAwIC4zcmVtICNlOGU4''@;'; put 'put ''ZTgpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZXJyb3IgLmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dHttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlcntt''@;'; put 'put ''YXgtd2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0O2hlaWdodDoxLjJyZW19LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyfi5jbHItc3VidGV4dHttYXJnaW4tbGVmdDouM3JlbX0uY2xyLWZvcm0tY29tcGFj''@;'; put 'put ''dCAuY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDouNnJlbTt3aWR0aDphdXRvfS5jbHItZm9ybS1jb21wYWN0IC5jbHItcmFkaW8td3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDowfS5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXIsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3doaXRlLXNwYWNlOm5vd3JhcH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3ot''@;'; put 'put ''YXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1ib3R0b206LjA1cmVtIHNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2Rpc3BsYXk6aW5saW5lLWJsb2Nr''@;'; put 'put ''O3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCAxLjFyZW0gMCAuM3JlbTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6LjY1cmVtO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6''@;'; put 'put ''MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9j''@;'; put 'put ''dXNlZC1jb2xvciwgIzAwNzJhMykgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBz''@;'; put 'put ''ZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKS5jbHItZm9jdXN7Ym9yZGVyLWJvdHRvbS1jb2xvcjoj''@;'; put 'put ''MDA3MmEzO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3RbbXVsdGlwbGVdOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxl''@;'; put 'put ''Y3RbbXVsdGlwbGVdOmZvY3Vze291dGxpbmU6SGlnaGxpZ2h0IGF1dG8gLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3IgYXV0byAuMXJlbX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1t''@;'; put 'put ''dWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6I2RlZGVkZTgwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJhY2tncm91bmQsIHJnYmEoMjIyLCAyMjIsIDIy''@;'; put 'put ''MiwgLjUpKTtiYWNrZ3JvdW5kOnJnYmEoMjIyLDIyMiwyMjIsLjUpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kLCByZ2JhKDIyMiwgMjIyLCAyMjIsIC41KSl9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHIt''@;'; put 'put ''bXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9ue2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb257Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1jb2xvciwgYmxhY2spfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0OjotbXMtZXhwYW5kLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxl''@;'; put 'put ''Y3Q6Oi1tcy1leHBhbmR7ZGlzcGxheTpub25lfS5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDoxLjJyZW07ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2hlaWdodDouNXJlbTt3aWR0aDouNXJl''@;'; put 'put ''bTt0b3A6LjM1cmVtO3JpZ2h0Oi4zcmVtO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUy''@;'; put 'put ''MDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyM2IzYjNiMyUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3Rp''@;'; put 'put ''dGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAl''@;'; put 'put ''MkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW46MH0uY2xyLXNlbGVjdC13cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tn''@;'; put 'put ''cm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVm''@;'; put 'put ''cyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQSUyMzhjOGM4YyUzQiU3RCUzQyUyRnN0eWxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFQ2FyZXQlM0MlMkZ0aXRsZSUzRSUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BhdGglMjBjbGFzcyUzRCUyMmNscy0xJTIyJTIwZCUzRCUyMk02JTJDOUwxLjIlMkM0LjJhMC42OCUyQzAuNjglMkMwJTJDMCUyQzElMkMxLTFMNiUyQzcuMDglMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUz''@;'; put 'put ''QyUyRnN2ZyUzRSUwQSl9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3JpZ2h0OjEuNXJlbX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBl''@;'; put 'put ''ciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVy''@;'; put 'put ''Oi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMs''@;'; put 'put ''IC4xNXJlbSk7aGVpZ2h0OmF1dG87bWluLXdpZHRoOjZyZW19c2VsZWN0W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''c2VsZWN0LW11bHRpcGxlLWJhY2tncm91bmQtY29sb3IsIHdoaXRlKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfXNlbGVjdFttdWx0aXBsZV0gb3B0aW9uLHNlbGVjdFtzaXplXSBv''@;'; put 'put ''cHRpb257cGFkZGluZzouMTVyZW0gLjNyZW07Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLW9wdGlvbi1jb2xvciwgYmxhY2spfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDA7Ym9yZGVy''@;'; put 'put ''LWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCl9LmNsci1lcnJvciBzZWxlY3RbbXVsdGlwbGVde2JvcmRlci1jb2xvcjojYzIxZDAwO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvciwgI2MyMWQwMCl9LmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWR7Y29sb3I6I2IzYjNiMztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOm5vdC1hbGxvd2VkfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LmRp''@;'; put 'put ''c2FibGVkOmhvdmVyOmFmdGVye2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvciwgI2IzYjNiMyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVk''@;'; put 'put ''IC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yLCAjYjNiM2IzKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ+c2Vs''@;'; put 'put ''ZWN0OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6IzZhN2E4MTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvciwgIzZhN2E4MSl9LmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOi4zcmVtfS5jbHItdGV4dGFyZWEtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFy''@;'; put 'put ''Z2luLWxlZnQ6MH0uY2xyLXRleHRhcmVhe21heC13aWR0aDpjYWxjKDEwMCUgLSAuM3JlbSk7aGVpZ2h0OmF1dG87cmVzaXplOnZlcnRpY2FsO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVy''@;'; put 'put ''Oi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzZhN2E4MTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvciwgIzZhN2E4MSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvciwgYmxhY2spO2JvcmRlci1yYWRpdXM6LjE1cmVtO3BhZGRp''@;'; put 'put ''bmc6LjRyZW0gLjZyZW07Zm9udC1zaXplOi42NXJlbX0uY2xyLXRleHRhcmVhOmZvY3Vze291dGxpbmU6SGlnaGxpZ2h0IGF1dG8gLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3IgYXV0byAuMXJlbX0uY2xyLXRleHRhcmVhOmRpc2FibGVke2NvbG9yOiNiM2IzYjM7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IsICNiM2IzYjMpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWVycm9yIC5jbHItdGV4dGFyZWF7Ym9yZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAw''@;'; put 'put ''KX0uY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbnRyb2wucm93IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXgtd2lkdGg6Y2FsYygxMDAlIC0gLjNyZW0pfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4t''@;'; put 'put ''dG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0Oi4zcmVtfTpyb290''@;'; put 'put ''ey0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmY6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci10b2dnbGUtYmctY29sb3Itb246dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTAwKTstLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUw''@;'; put 'put ''KTstLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1oYW5kbGUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItdG9nZ2xlLWRpc2FibGVk''@;'; put 'put ''LW9mZi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtaGFuZGxlLWNvbG9yKTstLWNsci10b2dnbGUtZGlz''@;'; put 'put ''YWJsZWQtb2ZmLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTst''@;'; put 'put ''LWNsci10b2dnbGUtZGlzYWJsZWQtb24tYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRs''@;'; put 'put ''ZS1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0uY2xyLXRvZ2dsZS13cmFwcGVye2hlaWdodDoxLjJy''@;'; put 'put ''ZW07dmVydGljYWwtYWxpZ246bWlkZGxlO3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIgbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjEu''@;'; put 'put ''MnJlbTttYXJnaW4tbGVmdDoyLjFyZW07bWFyZ2luLXJpZ2h0OjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LjNyZW07cmlnaHQ6LjNyZW07aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO29wYWNpdHk6MH0uY2xyLXRvZ2ds''@;'; put 'put ''ZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDouOXJlbTt3aWR0aDoxLjY1cmVtO2JvcmRlcjouMXJlbSBzb2xpZDtib3JkZXItcmFkaXVzOi40NXJlbTtib3Jk''@;'; put 'put ''ZXItY29sb3I6IzhjOGM4Yztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vZmYsICM4YzhjOGMpO2JhY2tncm91bmQtY29sb3I6IzhjOGM4YztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmLCAjOGM4YzhjKTt0b3A6LjE1cmVtO3Jp''@;'; put 'put ''Z2h0OjA7bGVmdDotMi4xcmVtO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpmb2N1cytsYWJlbDpiZWZvcmV7b3V0bGluZTpIaWdobGlnaHQgc29saWQgLjFyZW07b3V0bGluZTotd2Via2l0LWZvY3VzLXJpbmctY29sb3Igc29saWQgLjFyZW07b3V0bGluZS1vZmZzZXQ6LjA1cmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiM1YWEyMjA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24sICM1YWEyMjApO2JhY2tncm91bmQtY29sb3I6IzVhYTIyMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24sICM1''@;'; put 'put ''YWEyMjApO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDph''@;'; put 'put ''ZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci1jb2xvcjojZmFmYWZhO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWhhbmRsZS1iZy1jb2xv''@;'; put 'put ''ciwgI2ZhZmFmYSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtaGFuZGxlLWJnLWNvbG9yLCAjZmFmYWZhKTt0b3A6LjI1cmVtO3JpZ2h0OjA7bGVmdDotMnJlbTt0''@;'; put 'put ''cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye3JpZ2h0Oi0ycmVtO2xl''@;'; put 'put ''ZnQ6LTEuMjVyZW07dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodCxsZWZ0fS5jbHItdG9nZ2xlLXdyYXBwZXIuZGlzYWJsZWQgbGFiZWx7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci1jb2xvcjojY2NjO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3IsIHdoaXRlKTtib3JkZXItd2lkdGg6LjFyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yLCAj''@;'; put 'put ''Y2NjY2NjKTtoZWlnaHQ6LjlyZW07d2lkdGg6LjlyZW07dG9wOi4xNXJlbX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7YmFja2dyb3VuZC1jb2xvcjojY2NjO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvciwgI2NjY2NjYyl9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmRpc2FibGVkK2xhYmVsOmFmdGVye2JvcmRlci1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWhhbmRsZS1ib3JkZXItY29sb3IsIHdoaXRlKTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07dG9wOi4yNXJlbTtsZWZ0Oi0xLjI1cmVtfS5j''@;'; put 'put ''bHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7bGVmdDotMi4xcmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgbGFiZWx7bWFyZ2luLWxlZnQ6Mi4xcmVtO21hcmdpbi1yaWdodDowfS5jbHItdG9nZ2xlLXdyYXBwZXIu''@;'; put 'put ''cmlnaHQtbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3Jle3JpZ2h0OjA7bGVmdDotMi4xcmVtfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7cmlnaHQ6MDtsZWZ0Oi0ycmVtO3RyYW5zaXRpb24tcHJv''@;'; put 'put ''cGVydHk6bGVmdH0uY2xyLXRvZ2dsZS13cmFwcGVyLnJpZ2h0LWxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YWZ0ZXJ7bGVmdDotMS4yNXJlbTt0cmFuc2l0aW9uLXByb3BlcnR5OmxlZnR9LmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlz''@;'; put 'put ''cGxheTpibG9jaztmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXJpZ2h0Oi42cmVtfS5jbHItdG9nZ2xlLXJpZ2h0IGxh''@;'; put 'put ''YmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDoyLjFyZW07bWFyZ2luLWxlZnQ6MH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmV7bGVmdDp1bnNldDtyaWdodDotMi4xcmVtfS5jbHItdG9nZ2xlLXJpZ2h0IGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdK2xhYmVsOmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTEuMjVyZW07dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6LTJyZW07dHJhbnNpdGlv''@;'; put 'put ''bi1wcm9wZXJ0eTpyaWdodH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbDphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0xLjNyZW19LmNsci10b2dnbGUtcmlnaHQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpkaXNhYmxlZCtsYWJlbDph''@;'; put 'put ''ZnRlcntsZWZ0OnVuc2V0O3JpZ2h0Oi0ycmVtfS5jbHItdG9nZ2xlLXJpZ2h0IC5jbHItY29udHJvbC1pbmxpbmUgLmNsci10b2dnbGUtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXJpZ2h0OjIuN3JlbX0uY2xyLXJhbmdlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDouN3JlbTt3aGl0ZS1zcGFjZTpub3dyYXB9LmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtkaXNwbGF5OmlubGluZS1ibG9j''@;'; put 'put ''aztoZWlnaHQ6LjJyZW07cG9pbnRlci1ldmVudHM6bm9uZTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwO2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXJhbmdl''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDouN3JlbX0uY2xyLXJhbmdlOmRpc2FibGVkLC5jbHItcmFuZ2U6ZGlzYWJsZWQrLmZpbGwtaW5wdXR7cG9pbnRlci1ldmVudHM6YXV0bztjdXJzb3I6bm90LWFsbG93ZWR9aW5w''@;'; put 'put ''dXRbdHlwZT1yYW5nZV17cGFkZGluZzowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLCAjZThlOGU4KX1pbnB1dFt0eXBl''@;'; put 'put ''PXJhbmdlXTo6LXdlYmtpdC1zbGlkZXItcnVubmFibGUtdHJhY2t7aGVpZ2h0Oi4ycmVtO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvciwgI2U4ZThlOCl9aW5wdXRbdHlwZT1y''@;'; put 'put ''YW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbi10b3A6LS4yNXJlbTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfWlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRyYWNre2hlaWdodDouMnJlbTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cmFuZ2UtdHJhY2stY29sb3IsICNlOGU4ZTgpfWlucHV0W3R5cGU9cmFuZ2VdOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO21hcmdpbi10b3A6LS4yNXJlbTtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVz''@;'; put 'put ''cy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfWlucHV0W3R5cGU9cmFuZ2Vd''@;'; put 'put ''e2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6LjdyZW19aW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3ttYXJnaW46MDtib3JkZXI6MDtoZWlnaHQ6LjJyZW07Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yLCAjZThlOGU4KX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO21hcmdpbi10b3A6MDtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dCw6cm9vdCAuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5w''@;'; put 'put ''dXR7ZGlzcGxheTpub25lfV86LW1zLWZ1bGxzY3JlZW4gLmNsci1yYW5nZS13cmFwcGVyLnByb2dyZXNzLWZpbGwgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy1maWxsLWxvd2VyLDpyb290IC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmls''@;'; put 'put ''bC1sb3dlcntoZWlnaHQ6LjJyZW07YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IsICMwMDcyYTMpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpy''@;'; put 'put ''b290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9cmFuZ2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWln''@;'; put 'put ''aHQ6LjdyZW19XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRyYWNrLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7Ym9yZGVyOjA7bWFyZ2luOjA7aGVpZ2h0Oi4ycmVtO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvciwgI2U4ZThlOCl9XzotbXMtZnVsbHNjcmVlbiBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1iLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdGh1bWJ7Ym9yZGVyOjA7bWFyZ2luLXRvcDowO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6NTAlO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDcyYTM7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvciwgIzAwNzJhMyl9aW5wdXRbY2xyRGF0YWxpc3RdOjotd2Via2l0LWNhbGVu''@;'; put 'put ''ZGFyLXBpY2tlci1pbmRpY2F0b3J7ZGlzcGxheTpub25lfWNsci1kYXRhbGlzdC1jb250YWluZXIgLmNsci1pbnB1dC1ncm91cHtwYWRkaW5nLXJpZ2h0OjB9OnJvb3R7LS1jbHItY2FsZW5kYXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1jYWxl''@;'; put 'put ''bmRhci1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1kYXRlcGlja2VyLXRyaWdnZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWRhdGVwaWNrZXItdHJpZ2dlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9u''@;'; put 'put ''LTgwMCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ob3Zlci1jb2xvcik7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemU6Ljly''@;'; put 'put ''ZW07LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXdlaWdodDoyMDA7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1mb250LXdlaWdodDo2MDA7LS1jbHIt''@;'; put 'put ''Y2FsZW5kYXItYWN0aXZlLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYWN0aXZlLWNlbGwtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItZGF5LWZvbnQtc2l6ZTouNnJlbX0uZGF0ZS1jb250YWluZXJ7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRlcGlja2Vy''@;'; put 'put ''LXRyaWdnZXJ7aGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0p''@;'; put 'put ''O2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjEuOHJlbX0uZGF0ZXBpY2tlci10cmlnZ2VyIC5kYXRlcGlja2VyLXRyaWdnZXItaWNvbntmaWxsOiMwMDcyYTM7ZmlsbDp2YXIoLS1jbHItZGF0ZXBpY2tlci10cmlnZ2VyLWNvbG9yLCAjMDA3MmEzKX0uZGF0ZXBp''@;'; put 'put ''Y2tlci10cmlnZ2VyIC5kYXRlcGlja2VyLXRyaWdnZXItaWNvbjpob3ZlcntmaWxsOiMwMDU2N2E7ZmlsbDp2YXIoLS1jbHItZGF0ZXBpY2tlci10cmlnZ2VyLWhvdmVyLWNvbG9yLCAjMDA1NjdhKX0uZGF0ZXBpY2tlci10cmlnZ2VyOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uY2xy''@;'; put 'put ''LWZvcm0tY29udHJvbCAuZGF0ZXBpY2tlci10cmlnZ2Vye2xpbmUtaGVpZ2h0OjEuMXJlbTtoZWlnaHQ6MS4xcmVtfS5kYXRlLWlucHV0e2ZsZXg6MSAxIGF1dG99LmRhdGVwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOi42cmVtO21hcmdpbi10b3A6''@;'; put 'put ''LjNyZW07d2lkdGg6MTMuOXJlbTtoZWlnaHQ6MTUuN3JlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlcjouMDVyZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1jYWxlbmRhci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0g''@;'; put 'put ''LjE1cmVtIHZhcigtLWNsci1wb3BvdmVyLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MTA1MH0uY2FsZW5kYXItaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1p''@;'; put 'put ''dGVtczpjZW50ZXJ9LmNhbGVuZGFyLXN3aXRjaGVycywueWVhci1zd2l0Y2hlcnN7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS4xcmVtKTtkaXNwbGF5OmZsZXh9LnllYXItc3dpdGNoZXJze2ZsZXg6MCAwIGF1dG87d2lkdGg6NS40cmVtO2FsaWduLXNlbGY6Y2VudGVyfS5jYWxlbmRhci10YWJs''@;'; put 'put ''ZXtmbGV4OjEgMSBhdXRvO3dpZHRoOjEwMCV9LmNhbGVuZGFyLWNlbGwsLmNhbGVuZGFyLXRhYmxlIC5jYWxlbmRhci1jZWxse2hlaWdodDoxLjhyZW07d2lkdGg6MS44cmVtO21pbi1oZWlnaHQ6MS44cmVtO21pbi13aWR0aDoxLjhyZW07cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5k''@;'; put 'put ''YXl7ZGlzcGxheTppbmxpbmUtYmxvY2t9LndlZWtkYXlze2ZsZXg6MCAwIDEuOHJlbX0ud2Vla2RheXtmb250LXNpemU6LjZyZW07Zm9udC1zaXplOnZhcigtLWNsci1kYXktZm9udC1zaXplLCAuNnJlbSk7Zm9udC13ZWlnaHQ6NjAwfS5jYWxlbmRhci1idG57aGVpZ2h0OjEuOHJlbTttaW4t''@;'; put 'put ''d2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2lu''@;'; put 'put ''dGVyO2xpbmUtaGVpZ2h0OjEuOHJlbTtmb250LXNpemU6LjlyZW07Zm9udC1zaXplOnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtc2l6ZSwgLjlyZW0pO2ZvbnQtd2VpZ2h0OjIwMDtmb250LXdlaWdodDp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXdlaWdo''@;'; put 'put ''dCwgMjAwKX0uY2FsZW5kYXItYnRuOmhvdmVyLC5jYWxlbmRhci1idG46Zm9jdXN7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvciwgI2U4ZThlOCl9LmNhbGVuZGFyLWJ0bjpmb2N1c3tvdXRsaW5lOjB9LmRheS1i''@;'; put 'put ''dG57aGVpZ2h0OjEuOHJlbTttaW4td2lkdGg6MS44cmVtO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtiYWNrZ3JvdW5kOjAgMDtjdXJz''@;'; put 'put ''b3I6cG9pbnRlcjtsaW5lLWhlaWdodDoxLjhyZW07d2lkdGg6MTAwJTtjb2xvcjppbmhlcml0fS5kYXktYnRuOmhvdmVyLC5kYXktYnRuOmZvY3Vze2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IsICNlOGU4ZTgp''@;'; put 'put ''fS5kYXktYnRuOmZvY3Vze291dGxpbmU6MH0uZGF5LWJ0bi5pcy10b2RheXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtY29sb3IsIGJsYWNrKTtmb250LXdlaWdodDo2MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRh''@;'; put 'put ''dGUtY2VsbC1mb250LXdlaWdodCwgNjAwKX0uZGF5LWJ0bi5pcy1leGNsdWRlZHtvcGFjaXR5Oi40fS5kYXktYnRuLmlzLWV4Y2x1ZGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kYXktYnRuLmlzLXNlbGVjdGVke2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxl''@;'; put 'put ''bmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvciwgYmxhY2spfS5kYXktYnRuLmlzLXNlbGVjdGVkOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZh''@;'; put 'put ''cigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0uZGF5LWJ0bi5pcy1kaXNhYmxlZHtvcGFjaXR5Oi40O3BvaW50ZXItZXZlbnRzOm5vbmV9LmRheS1idG4uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFy''@;'; put 'put ''LXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tY29sb3IsICMwMDcyYTMpfS5zd2l0Y2hlciBjZHMtaWNvbiwuc3dpdGNoZXIgY2xyLWljb257aGVpZ2h0Oi45cmVtO3dpZHRoOi45cmVtfS5tb250aHBpY2tl''@;'; put 'put ''ci10cmlnZ2VyLC55ZWFycGlja2VyLXRyaWdnZXJ7bWluLXdpZHRoOjIuNHJlbTttYXgtd2lkdGg6M3JlbTtjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tY29sb3IsICMwMDcyYTMpO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxv''@;'; put 'put ''dzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ubW9udGhwaWNrZXIsLnllYXJwaWNrZXJ7bWluLWhlaWdodDoxNC40cmVtfS5tb250aHBpY2tlciwueWVhcnBpY2tlciwueWVhcnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzpoaWRkZW59Lm1vbnRo''@;'; put 'put ''cGlja2VyLC55ZWFyc3tmbGV4LXdyYXA6d3JhcH0ubW9udGgsLnllYXJ7aGVpZ2h0OjIuNHJlbTttaW4td2lkdGg6Mi40cmVtO3BhZGRpbmc6MCAuNnJlbTttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVz''@;'; put 'put ''OnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2xpbmUtaGVpZ2h0OjEuOHJlbTt3aWR0aDo2LjNyZW07Zm9udC1zaXplOi45cmVtO2ZvbnQtd2VpZ2h0OjIwMDtvdXRsaW5lLW9mZnNldDotLjI1cmVtfS5tb250aDpo''@;'; put 'put ''b3ZlciwubW9udGg6Zm9jdXMsLnllYXI6aG92ZXIsLnllYXI6Zm9jdXN7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvciwgI2U4ZThlOCl9Lm1vbnRoOmZvY3VzLC55ZWFyOmZvY3Vze291dGxpbmU6MH0ubW9udGgu''@;'; put 'put ''aXMtZGlzYWJsZWQsLnllYXIuaXMtZGlzYWJsZWR7b3BhY2l0eTouNDtwb2ludGVyLWV2ZW50czpub25lfS5tb250aC5pcy1kaXNhYmxlZDpob3ZlciwueWVhci5pcy1kaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0ubW9udGguaXMtc2VsZWN0ZWQsLnllYXIuaXMtc2VsZWN0ZWR7YmFj''@;'; put 'put ''a2dyb3VuZDojZDhlM2U5O2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3IsICNkOGUzZTkpO2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWNvbG9yLCBibGFjayl9Lm1vbnRoLmlzLXNlbGVjdGVk''@;'; put 'put ''OmZvY3VzLC55ZWFyLmlzLXNlbGVjdGVkOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOTtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtZm9jdXMtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0ubW9udGh7dGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6bm93''@;'; put 'put ''cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS55ZWFye3RleHQtYWxpZ246Y2VudGVyfTpyb290ey0tY2xyLWNvbWJvYm94LXRyaWdnZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAwKTstLWNsci1jb21ib2JveC1mb250LXNpemU6LjY1cmVtOy0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LWJvcmRlci1jb2xvcjojZThlOGU4Oy0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXM6LjE1cmVtOy0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3I6I2YyZjJmMjstLWNsci1jb21ib2JveC1waWxsLWJhY2tncm91bmQtY29sb3I6d2hpdGU7LS1jbHIt''@;'; put 'put ''Y29tYm9ib3gtcGlsbC1ib3JkZXItY29sb3I6IzY2NjY2NjstLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1yYWRpdXM6LjE1cmVtOy0tY2xyLWNvbWJvYm94LXBpbGwtZm9udC1jb2xvcjojNDU0NTQ1Oy0tY2xyLWNvbWJvYm94LWZpbHRlci1oaWdobGlnaHQ6IzQ1NDU0NX0uY2xyLWNvbWJv''@;'; put 'put ''Ym94LWZvcm0tY29udHJvbHthbGlnbi1pdGVtczpzdHJldGNofS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9sIC5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1mb2N1cy1pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjojMDA3MmEzO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IsICMwMDcyYTMpO2hlaWdodDouMXJlbTt3aWR0aDowO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2U7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOi0uMDVyZW07bGVmdDowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVt''@;'; put 'put ''O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzLCAu''@;'; put 'put ''MTVyZW0pfS5jbHItZm9jdXN7d2lkdGg6MTAwJX0uY2xyLWVycm9yIC5jbHItZm9jdXMtaW5kaWNhdG9ye2JhY2tncm91bmQtY29sb3I6I2MyMWQwMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yLCAjYzIxZDAwKX0uY2xyLWNvbWJvYm94LXdyYXBwZXJ7''@;'; put 'put ''cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIDEuMnJlbSAwIC4zcmVtO21pbi1oZWlnaHQ6MS4ycmVtO21pbi13aWR0aDo4LjRyZW07Zm9udC1zaXplOi42NXJlbTtmb250LXNpemU6dmFyKC0tY2xyLWNvbWJvYm94LWZvbnQtc2l6ZSwgLjY1cmVtKTtjb2xvcjojMDAwO2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy10ZXh0LWNvbG9yLCBibGFjayk7Ym9yZGVyLWJvdHRvbTouMDVyZW0gc29saWQ7ZGlzcGxheTppbmxpbmUtYmxvY2s7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3IsICNm''@;'; put 'put ''MmYyZjIpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojZThlOGU4O2JvcmRlci1jb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLWNvbG9yLCAjZThlOGU4KTtib3JkZXItYm90dG9tLXdpZHRoOi4wNXJlbTtib3JkZXItYm90dG9tLXN0''@;'; put 'put ''eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6IzZhN2E4MTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IsICM2YTdhODEpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMs''@;'; put 'put ''IC4xNXJlbSl9LmNsci1jb21ib2JveC13cmFwcGVyLm11bHRpe21pbi13aWR0aDptaW4oMThyZW0sMTAwJSk7cGFkZGluZy1ib3R0b206LjE1cmVtfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWlucHV0LmNsci1jb21ib2JveC1pbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOjAgMH0uY2xyLWNv''@;'; put 'put ''bWJvYm94LXdyYXBwZXIuaW52YWxpZHtib3JkZXItYm90dG9tLWNvbG9yOiNjMjFkMDB9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtaW5wdXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyLWJvdHRvbTpub25lfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LXJl''@;'; put 'put ''bW92ZS1idG57YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMTVyZW07Y29sb3I6IzQ1NDU0NX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGx7bWFyZ2luOi4xNXJlbSAuM3JlbSAwIDA7YmFja2dyb3VuZC1jb2xvcjojZmZm''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2FsaWduLWl0ZW1zOmJhc2VsaW5lO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yLCAjNjY2NjY2KTtwYWRkaW5nOjAgLjFyZW0gMCAuMnJlbX0uY2xyLWNvbWJvYm94LXdyYXBw''@;'; put 'put ''ZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgLmNsci1jb21ib2JveC1waWxsLWNvbnRlbnR7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1mb250LWNvbG9yLCAjNDU0NTQ1KTtmb250LXNpemU6LjU1cmVtO2ZvbnQtd2VpZ2h0OjQwMDtwYWRkaW5nOjAgLjRyZW0g''@;'; put 'put ''MCAuMnJlbX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2RzLWljb25bc2hhcGU9d2luZG93LWNsb3NlXSwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb25bc2hhcGU9d2luZG93LWNsb3NlXXtjb2xvcjojNDU0NTQ1''@;'; put 'put ''O2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IsICM0NTQ1NDUpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0LXdyYXBwZXJ7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDB9LmNsci1jb21ib2JveC10cmlnZ2Vye3dpZHRoOjEuMnJlbTttYXJn''@;'; put 'put ''aW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtyaWdodDowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOmN1cnJlbnRDb2xvcjtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjB9LmNsci1jb21ib2JveC10cmlnZ2VyOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1kaXNhYmxlZC1jb2xvciwgIzY2Nik7b3BhY2l0eTouNH0uY2xyLWNvbWJvYm94LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGVdLC5jbHItY29tYm9ib3gtdHJpZ2dlciBjbHItaWNvbltzaGFwZT1hbmdsZV17Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIoLS1jbHItY29tYm9i''@;'; put 'put ''b3gtcGlsbC1mb250LWNvbG9yLCAjNDU0NTQ1KX0uY2xyLWNvbWJvYm94LW9wdGlvbnN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWluLXdpZHRoOjZyZW07bWF4LXdpZHRoOjE4cmVtO2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hh''@;'; put 'put ''ZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZHJvcGRvd24tYm94LXNoYWRvdywgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTttYXJnaW4tdG9wOi4xcmVtO3BhZGRpbmc6LjZyZW0gMDt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwNTA7cG9zaXRpb246c3RhdGljO21heC1oZWln''@;'; put 'put ''aHQ6MTJyZW07b3ZlcmZsb3cteTpzY3JvbGw7dmlzaWJpbGl0eTp2aXNpYmxlfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZ3twYWRkaW5nOi4xNXJlbSAxLjJyZW19LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ucy1s''@;'; put 'put ''b2FkaW5nIC5jbHItY29tYm9ib3gtb3B0aW9ucy1sb2FkaW5nLXRleHR7cGFkZGluZy1sZWZ0Oi4zcmVtfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtZW1wdHktdGV4dHtwYWRkaW5nLWxlZnQ6LjZyZW19LmNsci1jb21ib2JveC1vcHRpb257Y29sb3I6IzY2''@;'; put 'put ''Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvciwgIzY2NjY2Nik7Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1mb250LXdlaWdodCwgNDAwKTtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3Vu''@;'; put 'put ''ZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjowO3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4''@;'; put 'put ''ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYmctaG92ZXItY29sb3IsICNlOGU4ZTgpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IsICM2NjY2NjYpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uLmFj''@;'; put 'put ''dGl2ZXtiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIoLS1jbHItZHJvcGRvd24tc2VsZWN0aW9uLWNvbG9yLCAjZDhlM2U5KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvciwgYmxhY2spfS5jbHItY29tYm9ib3gtb3B0aW9uOmFj''@;'; put 'put ''dGl2ZXtib3gtc2hhZG93Om5vbmV9LmNsci1jb21ib2JveC1vcHRpb246Zm9jdXN7ei1pbmRleDppbmhlcml0fS5jbHItY29tYm9ib3gtb3B0aW9uLmRpc2FibGVkLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7b3BhY2l0eTouNDstd2Via2l0LXVz''@;'; put 'put ''ZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDpob3ZlciwuY2xyLWNvbWJvYm94LW9wdGlvbjpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uY2xyLWNvbWJvYm94LW9wdGlvbi5kaXNhYmxlZDphY3RpdmUsLmNsci1jb21i''@;'; put 'put ''b2JveC1vcHRpb246ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uY2xyLWNvbWJvYm94LW9wdGlvbi5jbHItZm9jdXN7YmFja2dyb3VuZC1jb2xvcjojZThlOGU4O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9y''@;'; put 'put ''LCAjZThlOGU4KX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb257cGFkZGluZzouMTVyZW0gMS4ycmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbntwYWRkaW5nOi4z''@;'; put 'put ''cmVtIDEuMnJlbX19LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9uOmhvdmVyLC5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbi5hY3RpdmV7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvciwgIzY2NjY2''@;'; put 'put ''Nil9LmNsci1jb21ib2JveC1kaXNhYmxlZHtjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yLCAjYjNiM2IzKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1jb21ib2JveC1kaXNhYmxlZCAuY2xyLWNvbWJvYm94LWlucHV0LC5jbHItY29tYm9i''@;'; put 'put ''b3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1yZW1vdmUtYnRuLC5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC10cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWZpbHRlci1oaWdobGlnaHQgYntmb250LXdlaWdodDo1MDA7Y29sb3I6IzQ1NDU0NTtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItY29tYm9ib3gtZmlsdGVyLWhpZ2hsaWdodCwgIzQ1NDU0NSl9OnJvb3R7LS1jbHItc3RhY2stdmlldy1ib3JkZXItcmFkaXVzOi4xNXJlbTstLWNsci1zdGFjay12aWV3LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLXN0YWNrLXZpZXctYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbTp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0zMDApOy0tY2xyLXN0YWNrLXZpZXctY29sb3I6IzY2NjY2NjstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2Nr''@;'; put 'put ''LWxhYmVsLXRleHQtY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1mb250LWNvbG9yKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1ib3gtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMzAwKTstLWNsci1zdGFjay1ibG9jay1jaGFuZ2VkLWJvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLWFjdGlvbi02MDApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbS1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXNlbGVjdGlvbi1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTIwMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jb250ZW50LXRleHQtY29sb3I6''@;'; put 'put ''aW5oZXJpdDstLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGVkLXRleHQtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jYXJldC1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLWZvbnQtY29sb3IpfS5zdGFjay1o''@;'; put 'put ''ZWFkZXJ7Zm9udC13ZWlnaHQ6NDAwO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LWVuZH0uc3RhY2staGVhZGVyIC5zdGFjay10aXRsZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAxIGF1dG87cGFkZGluZzouM3JlbSAwfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnN7ZGlzcGxheTpi''@;'; put 'put ''bG9jaztmbGV4OjAgMCBhdXRvfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbnttYXJnaW46MCAwIC4zcmVtIC42cmVtfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbi5idG57bWluLXdpZHRoOjA7cGFkZGluZzowIC42cmVtfS5zdGFj''@;'; put 'put ''ay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbi5idG4tbGlua3ttYXJnaW4tcmlnaHQ6LS42cmVtfS5zdGFjay12aWV3e2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNjVyZW07Zm9udC13ZWlnaHQ6NDAw''@;'; put 'put ''O2xpbmUtaGVpZ2h0OjEuMnJlbTtsZXR0ZXItc3BhY2luZzpub3JtYWw7bWFyZ2luLXRvcDowO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IsICNjY2Nj''@;'; put 'put ''Y2MpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtvdmVyZmxvdy15OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctYmct''@;'; put 'put ''Y29sb3IsICNmYWZhZmEpO3dvcmQtd3JhcDpicmVhay13b3JkfS5zdGFjay12aWV3IGRkLC5zdGFjay12aWV3IGR0e21hcmdpbi1pbmxpbmUtc3RhcnQ6MDttYXJnaW4tbGVmdDowfS5zdGFjay12aWV3IC5zdGFjay1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyB3cmFwO2JvcmRl''@;'; put 'put ''ci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6I2RlZGVkZTtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20sICNkZWRlZGUpO292ZXJmbG93LXk6aGlkZGVufS5zdGFjay12aWV3Pi5zdGFjay1ibG9jazpsYXN0LWNoaWxkLC5zdGFjay12aWV3PjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpu''@;'; put 'put ''b25lO2JveC1zaGFkb3c6MCAuMDVyZW0gI2RlZGVkZTtib3gtc2hhZG93OjAgLjA1cmVtIDAgdmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLWJveC1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNoYW5nZWQ+LnN0YWNrLWJsb2NrLWxhYmVse21hcmdpbi1sZWZ0Oi0uNDVyZW19''@;'; put 'put ''LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNoYW5nZWQ6YmVmb3Jle2NvbnRlbnQ6IiAiO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDowO3dpZHRoOjA7Ym9yZGVyLXRvcDouNDVyZW0gc29saWQ7Ym9yZGVyLXRvcC1jb2xvcjojMDA3MmEzO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXN0''@;'; put 'put ''YWNrLWJsb2NrLWNoYW5nZWQtYm9yZGVyLXRvcC1jb2xvciwgIzAwNzJhMyk7Ym9yZGVyLXJpZ2h0Oi40NXJlbSBzb2xpZCB0cmFuc3BhcmVudH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZzouM3JlbSAuNnJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvciwgI2ZhZmFmYSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1j''@;'; put 'put ''YXJldHthbGlnbi1zZWxmOmNlbnRlcn0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stbGFiZWx7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC10ZXh0LWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDts''@;'; put 'put ''aW5lLWhlaWdodDoxLjJyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1sYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtmbG9hdDpsZWZ0O2hlaWdodDouN3JlbTt3aWR0''@;'; put 'put ''aDouN3JlbTttYXJnaW46LjM1cmVtIC4yNHJlbSAwIDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWxhYmVsOmZvY3Vze291dGxpbmU6LjA1cmVtIGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0uMDVyZW19LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLXZpZXcta2V5e2ZsZXg6MCAwIDQwJTttYXgtd2lkdGg6NDAlfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jYXJldHtoZWlnaHQ6LjdyZW07d2lkdGg6LjdyZW07bWFyZ2luLXJpZ2h0Oi4yNHJlbTtmaWxsOiM2NjY7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1i''@;'; put 'put ''bG9jay1jYXJldC1jb2xvciwgIzY2NjY2Nil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnR7Y29sb3I6aW5oZXJpdDtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1jb250ZW50LXRleHQtY29sb3IsIGluaGVyaXQpO2ZsZXg6MSAxIGF1dG87d2lkdGg6NjAl''@;'; put 'put ''O21hcmdpbi1ib3R0b206MDtmb250LXdlaWdodDo0MDB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNvbnRlbnQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY29udGVudD46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcg''@;'; put 'put ''LnN0YWNrLWNoaWxkcmVue2ZsZXg6MCAwIGF1dG87d2lkdGg6MTAwJX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2Nre2JvcmRlci1ib3R0b20tY29sb3I6I2U4ZThlODtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWNoaWxkcmVu''@;'; put 'put ''LXN0YWNrLWJsb2NrLWJvcmRlci1ib3R0b20tY29sb3IsICNlOGU4ZTgpfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbj4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+Omxhc3QtY2hpbGQgLnN0YWNrLWJsb2NrOmxhc3Qtb2YtdHlwZXtib3Jk''@;'; put 'put ''ZXItYm90dG9tOm5vbmU7Ym94LXNoYWRvdzowIC4wNXJlbSAjZGVkZWRlO2JveC1zaGFkb3c6MCAuMDVyZW0gMCB2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItYm94LWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsLC5zdGFjay12aWV3IC5z''@;'; put 'put ''dGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stY29udGVudHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1sYWJlbC1hbmQtY29udGVudC1iZy1jb2xvciwgd2hpdGUpfS5zdGFjay12''@;'; put 'put ''aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stbGFiZWx7cGFkZGluZy1sZWZ0OjEuMnJlbX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWx7Y3Vyc29yOnBvaW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTIl''@;'; put 'put ''MjAxMiUyMiUzRSUwQSUyMCUyMCUyMCUyMCUzQ2RlZnMlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjM2NjY2NjYlM0IlN0QlM0MlMkZzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0''@;'; put 'put ''aXRsZSUzRUNhcmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUyQzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMw''@;'; put 'put ''JTJDMSUyQzElMkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpO2hlaWdodDouNnJlbTt3aWR0aDou''@;'; put 'put ''NnJlbX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnR7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlLWluLW91dCxjb2xv''@;'; put 'put ''ciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6aG92ZXI6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVse2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12''@;'; put 'put ''aWV3LXN0YWNrLWJsb2NrLWV4cGFuZGFibGUtaG92ZXIsICNlOGU4ZTgpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle3RyYW5zZm9ybTpyb3RhdGUoMCl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1iZy1jb2xvciwgI2Q4ZTNlOSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1l''@;'; put 'put ''eHBhbmRlZC10ZXh0LWNvbG9yLCBibGFjayl9LnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10ZXh0XSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPXBhc3N3b3JkXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPW51bWJlcl0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT1lbWFpbF0sLnN0YWNrLXZpZXcgaW5w''@;'; put 'put ''dXRbdHlwZT11cmxdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9dGVsXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPWRhdGVdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9dGltZV0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0sLnN0YWNrLXZpZXcgLnNlbGVjdHtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3A7bWFyZ2luLXJpZ2h0Oi42cmVtO21hcmdpbi1ib3R0b206LS45NXJlbX0uc3RhY2stdmlldyBpbnB1dFt0eXBlPXRleHRdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9cGFzc3dvcmRdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9bnVtYmVy''@;'; put 'put ''XSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPWVtYWlsXSwuc3RhY2stdmlldyBpbnB1dFt0eXBlPXVybF0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10ZWxdLC5zdGFjay12aWV3IGlucHV0W3R5cGU9ZGF0ZV0sLnN0YWNrLXZpZXcgaW5wdXRbdHlwZT10aW1lXSwuc3RhY2stdmlldyBpbnB1dFt0''@;'; put 'put ''eXBlPWRhdGV0aW1lLWxvY2FsXSwuc3RhY2stdmlldyAuc2VsZWN0IHNlbGVjdHtoZWlnaHQ6MS4ycmVtfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFu''@;'; put 'put ''ZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1udW1iZXJdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFj''@;'; put 'put ''ay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZW1haWxdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stY29udGVudCBp''@;'; put 'put ''bnB1dFt0eXBlPXRlbF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1kYXRlXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZT4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRpbWVdLC5z''@;'; put 'put ''dGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxde3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlLGJvcmRlci1ib3R0b20tY29sb3IgLjJzIGVhc2UtaW4tb3V0fS5zdGFjay12aWV3''@;'; put 'put ''IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Qgc2VsZWN0e3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbS1jb2xvciAuMnMgZWFzZS1pbi1vdXR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWNvbnRlbnQg''@;'; put 'put ''LnNlbGVjdDphZnRlcnt0cmFuc2l0aW9uOmNvbG9yIC4ycyBlYXNlLWluLW91dH0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZXh0XSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2Nr''@;'; put 'put ''LWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9bnVtYmVyXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRb''@;'; put 'put ''dHlwZT1lbWFpbF0sLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXSwuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZWxdLC5zdGFjay12aWV3''@;'; put 'put ''IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGVdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRpbWVdLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRl''@;'; put 'put ''ZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXXtib3JkZXItYm90dG9tLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDAsICM4YzhjOGMpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRv''@;'; put 'put ''IGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFu''@;'; put 'put ''ZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dGV4dF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4u''@;'; put 'put ''c3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXBhc3N3b3JkXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT1wYXNzd29yZF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRl''@;'; put 'put ''ZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPW51bWJlcl06Zm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9bnVtYmVyXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVk''@;'; put 'put ''Pi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9ZW1haWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWVtYWlsXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5z''@;'; put 'put ''dGFjay1ibG9jay1jb250ZW50IGlucHV0W3R5cGU9dXJsXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT11cmxdLmNsci1mb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJs''@;'; put 'put ''b2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10ZWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPXRlbF0uY2xyLWZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29u''@;'; put 'put ''dGVudCBpbnB1dFt0eXBlPWRhdGVdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGVdLmNsci1mb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQg''@;'; put 'put ''aW5wdXRbdHlwZT10aW1lXTpmb2N1cywuc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWNvbnRlbnQgaW5wdXRbdHlwZT10aW1lXS5jbHItZm9jdXMsLnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IGlucHV0''@;'; put 'put ''W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOmZvY3VzLC5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stY29udGVudCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXS5jbHItZm9jdXN7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDA3MmEzO2JvcmRlci1ib3R0b20tY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Qgc2VsZWN0e2JvcmRlci1ib3R0b20tY29sb3I6IzhjOGM4Yzti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCwgIzhjOGM4Yyl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1jb250ZW50IC5zZWxlY3Q6YWZ0ZXJ7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1''@;'; put 'put ''dHJhbC02MDAsICM4YzhjOGMpfS5tb2RhbCAuc3RhY2stdmlld3toZWlnaHQ6NTV2aDttYXJnaW4tYm90dG9tOjB9LnN0YWNrLXZpZXcgY2xyLXN0YWNrLWJsb2NrLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUgLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtjb250ZW50Om5vbmV9LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbHtwYWRkaW5nLWxlZnQ6MS44cmVtfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiBjbHItc3RhY2stYmxvY2sg''@;'; put 'put ''LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZSwuc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtkaXNwbGF5Om5vbmV9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2stYmxvY2stY29udGVudCwuc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stY2hpbGRyZW4gLnN0YWNrLWJsb2NrLWNvbnRlbnR7cGFkZGluZy1sZWZ0Oi4zNnJlbX06cm9vdHstLWNsci10cmVlLWJvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY3VzdG9tLWxpbmtzLWhvdmVyLWNvbG9yKTstLWNsci10cmVlLWxpbmstc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci10''@;'; put 'put ''cmVlLWxpbmstdGV4dC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApfS5jbHItdHJlZS1ub2Rle2Rpc3BsYXk6YmxvY2t9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWlu''@;'; put 'put ''ZXJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLXRyZWVub2RlLWNvbnRlbnR7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLWxlZnQt''@;'; put 'put ''cmFkaXVzOnZhcigtLWNsci10cmVlLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2xpbmUtaGVpZ2h0OjEuNjJyZW19LmNs''@;'; put 'put ''ci10cmVlbm9kZS1jb250ZW50OmZpcnN0LWNoaWxke3BhZGRpbmctbGVmdDoxLjYycmVtfS5jbHItdHJlZW5vZGUtY29udGVudCBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb257aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO21hcmdpbi1yaWdodDouM3JlbTt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjptaWRkbGV9LmNsci10cmVlbm9kZS1jYXJldHtmbGV4OjAgMCAxLjYycmVtO3BhZGRpbmc6MDttYXJnaW46MDtoZWlnaHQ6MS42MnJlbTt3aWR0aDoxLjYycmVtO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1j''@;'; put 'put ''YXJldC1jb2xvciwgI2IzYjNiMyk7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6LS4yNXJlbX0uY2xyLXRyZWVub2RlLWNhcmV0OmhvdmVye2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yLCBibGFjayl9LmNsci10cmVlLW5v''@;'; put 'put ''ZGUtY2FyZXQtaWNvbntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7aGVpZ2h0OjEuNjJyZW07d2lkdGg6MS42MnJlbTtwYWRkaW5nOi40MXJlbX0uY2xyLXRyZWVub2RlLXNwaW5uZXJ7aGVpZ2h0''@;'; put 'put ''Oi44cmVtO3dpZHRoOi44cmVtO21pbi1oZWlnaHQ6LjhyZW07bWluLXdpZHRoOi44cmVtfS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6MS4xN3JlbTt3aWxsLWNoYW5nZTpoZWlnaHQ7b3ZlcmZsb3cteTpoaWRkZW59LmNsci10cmVlbm9kZS1saW5re2Rpc3BsYXk6aW5saW5l''@;'; put 'put ''LWJsb2NrO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWFyZ2luOjA7cGFkZGluZzowIDAgMCAuM3JlbTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci10cmVlLWxpbmstdGV4dC1jb2xvciwgIzY2NjY2Nik7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWln''@;'; put 'put ''aHQ6aW5oZXJpdDt0ZXh0LWFsaWduOmxlZnR9LmNsci10cmVlbm9kZS1saW5rOmxpbmssLmNsci10cmVlbm9kZS1saW5rOnZpc2l0ZWQsLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWxpbms6aG92ZXJ7Y29sb3I6aW5oZXJpdH0uY2xyLXRyZWVub2RlLWxpbms6aG92''@;'; put 'put ''ZXIsLmNsci10cmVlbm9kZS1saW5rOmZvY3Vze2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci10cmVlLWxpbmstaG92ZXItY29sb3IsICNlOGU4ZTgpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItdHJlZW5vZGUtbGluay5hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5''@;'; put 'put ''O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1zZWxlY3Rpb24tY29sb3IsICNkOGUzZTkpO2NvbG9yOiMwMDA7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yLCBibGFjayl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVye3BhZGRpbmctdG9wOi4yMXJlbTtwYWRkaW5nLWxlZnQ6LjQxcmVtfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItY2hlY2tib3gtd3JhcHBlcjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxLjYycmVtfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQt''@;'; put 'put ''Y29udGFpbmVyPi5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7Zm9udC1zaXplOi43cmVtfS5jbHItdHJlZW5vZGUtY29udGVudCAubGFiZWx7bWFyZ2luLWxlZnQ6LjNyZW19QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dCAubGFiZWx7bWFyZ2luLWxlZnQ6LjE1cmVtfX1fOi1tcy1pbnB1dC1wbGFjZWhvbGRlciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmxhYmVsLDpyb290IC5jbHItdHJlZW5vZGUtY29udGVudCAubGFiZWx7bWFyZ2luLWxlZnQ6LjE1cmVtfTpyb290ey0tY2xyLWRhdGFncmlkLWZvbnQtY29s''@;'; put 'put ''b3I6I2FjYmFjMzstLWNsci1kYXRhZ3JpZC1kZWZhdWx0LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC00MDApOy0tY2xyLWRhdGFncmlkLWljb24tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNjAwKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXI6dmFyKC0tY2xy''@;'; put 'put ''LWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItZGF0YWdyaWQtcGFnaW5h''@;'; put 'put ''dGlvbi1idG4tY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kYXRhZ3JpZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1ib3JkZXItZm9jdXMtY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi00MDApOy0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWNvbG9y''@;'; put 'put ''LW5ldXRyYWwtMCk7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0yMDApOy0tY2xy''@;'; put 'put ''LWRhdGFncmlkLXJvdy1zZWxlY3RlZDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQ6cmdiYSgyNTUsIDI1NSwgMjU1LCAuNik7LS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdy1jb2xvcjpyZ2JhKDE0MCwgMTQw''@;'; put 'put ''LCAxNDAsIC4yNSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02''@;'; put 'put ''MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4tYmctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4taWNvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1kYXRh''@;'; put 'put ''Z3JpZC1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZTouOHJlbTstLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1kaXNhYmxlZC1vcGFjaXR5Oi41NjstLWNsci1kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4tdG9nZ2xlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5l''@;'; put 'put ''dXRyYWwtMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC03MDApOy0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCl9LmRhdGFncmlke2JvcmRl''@;'; put 'put ''ci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNv''@;'; put 'put ''bG9yLCAjY2NjY2NjKTtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10YWJsZS1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1iZ2NvbG9yLCB3aGl0ZSk7Y29sb3I6''@;'; put 'put ''IzY2Njtjb2xvcjp2YXIoLS1jbHItdGFibGUtZm9udC1jb2xvciwgIzY2NjY2Nik7bWFyZ2luOjA7bWFyZ2luLXRvcDoxLjJyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7Zm9udC1zaXplOi42''@;'; put 'put ''NXJlbTtsaW5lLWhlaWdodDouN3JlbTtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6LjA1cmVtO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci10b3AtY29sb3I6I2U4ZThlODtib3JkZXItdG9wLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvciwgI2U4ZThlOCk7cGFkZGluZzouNTVyZW0gLjZyZW07dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnR7dGV4''@;'; put 'put ''dC1hbGlnbjpsZWZ0fS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLmxlZnQ6Zmlyc3QtY2hpbGQsLmRhdGFncmlkIC5kYXRhZ3JpZC1jZWxsLmxlZnQ6Zmlyc3QtY2hpbGR7cGFkZGluZy1sZWZ0Oi4zcmVtfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1ue2NvbG9yOiM2NjY7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRoZWFkLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjU1cmVtO2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMDNlbTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvciwgI2ZhZmFmYSk7dmVydGlj''@;'; put 'put ''YWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojY2NjO2JvcmRlci1ib3R0b20t''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5IC5kYXRhZ3JpZC1yb3c6Zmlyc3QtY2hpbGQgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDowIG5vbmV9LmRhdGFncmlkIC5kYXRhZ3Jp''@;'; put 'put ''ZC1ib2R5Ky5kYXRhZ3JpZC1ib2R5e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0aDouMDVyZW07Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXRvcC1jb2xvcjojY2NjO2JvcmRlci10b3AtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigt''@;'; put 'put ''LWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czouMXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIo''@;'; put 'put ''LS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cywgLjFyZW0pfS5kYXRhZ3JpZCAuZGF0YWdyaWQtYm9keTpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1yb3c6bGFzdC1jaGlsZCAuZGF0YWdyaWQtY2VsbDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1''@;'; put 'put ''czouMXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkIC5kYXRhZ3JpZC1ib2R5Omxhc3QtY2hpbGQgLmRhdGFncmlkLXJvdzpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jZWxsOmxhc3QtY2hpbGR7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xcmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzLCAuMXJlbSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY29tcGFj''@;'; put 'put ''dCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDouM3JlbTtwYWRkaW5nLWJvdHRvbTouMjVyZW19LmRhdGFncmlkLWhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO3Bvc2l0aW9uOnJlbGF0aXZlfS5kYXRhZ3JpZHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDstbXMtb3ZlcmZsb3ctc3R5bGU6LW1zLWF1dG9oaWRpbmctc2Nyb2xsYmFyO292ZXJmbG93OmF1dG87ZmxleDoxIDEgYXV0bzttYXJnaW4tdG9wOi42cmVtfS5kYXRhZ3JpZC1jb250YWluZXJ7d2lkdGg6YXV0bztmb250LXNpemU6LjY1cmVt''@;'; put 'put ''O3BhZGRpbmc6LjU1cmVtIC42cmVtfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbnstd2Via2l0LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjto''@;'; put 'put ''ZWlnaHQ6MS41cmVtO3dpZHRoOjEuNXJlbX1idXR0b24uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNv''@;'; put 'put ''bntjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29uLWNvbG9yLCAjOGM4YzhjKTttYXJnaW4tdG9wOi4xNXJlbX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIHN2Z3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAu''@;'; put 'put ''MnMgZWFzZS1pbi1vdXR9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7bWFyZ2luLXRvcDouM3JlbX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzouNTVyZW0gLjZyZW19LmRhdGFncmlkLWhlYWRlciwuZGF0YWdyaWQtYm9keSwu''@;'; put 'put ''ZGF0YWdyaWQtcm93LC5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLWNlbGwsLmRhdGFncmlkLWZpeGVkLWNvbHVtbntkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1yb3d7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigt''@;'; put 'put ''LWNsci10YWJsZS1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93OmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXRvcDpub25lfS5kYXRhZ3JpZC1y''@;'; put 'put ''b3c6aG92ZXIsLmRhdGFncmlkLXJvdzpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLCAjZThlOGU4KX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkLC5k''@;'; put 'put ''YXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQgLmRhdGFncmlkLXJvdy1zdGlja3l7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLCBibGFjayk7YmFja2dyb3VuZC1jb2xvcjojZDhlM2U5O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWdsb2Jh''@;'; put 'put ''bC1zZWxlY3Rpb24tY29sb3IsICNkOGUzZTkpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOi0uM3JlbTtib3JkZXIt''@;'; put 'put ''dG9wOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4zcmVtO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9w''@;'; put 'put ''Oi0uMjVyZW07Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4yNXJlbTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVy''@;'; put 'put ''LXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3Bv''@;'; put 'put ''dmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29s''@;'; put 'put ''b3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFj''@;'; put 'put ''dGlvbi1vdmVyZmxvdzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uM3JlbTtib3JkZXItdG9wOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjNyZW0gc29saWQg''@;'; put 'put ''dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4zcmVtO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2NjYztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQt''@;'; put 'put ''cm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uMjVyZW07Ym9yZGVyLXRvcDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbTouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOi4yNXJlbTtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0''@;'; put 'put ''ZSl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3ZlciwgI2U4ZThlOCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwLCBibGFjayl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRl''@;'; put 'put ''ci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLWNvbG9yOi4xNXJlbTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwO3doaXRlLXNwYWNl''@;'; put 'put ''Om5vd3JhcH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDotLjNyZW07Ym9yZGVyLXJpZ2h0Oi4zcmVtIHNvbGlkO2Jv''@;'; put 'put ''cmRlci1yaWdodC1jb2xvcjojY2NjO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO2JvcmRlci10b3A6LjNyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouM3JlbSBzb2xpZCB0cmFuc3BhcmVudH0u''@;'; put 'put ''ZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3c6YWZ0ZXJ7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjEwMCU7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOi0uMjVyZW07Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjZmZmO2JvcmRl''@;'; put 'put ''ci10b3A6LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206LjI1cmVtIHNvbGlkIHRyYW5zcGFyZW50fS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW17Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tdGV4dC1j''@;'; put 'put ''b2xvciwgIzY2NjY2Nik7Zm9udC1zaXplOi43cmVtO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjEuMTVyZW07bWFyZ2luOjA7cGFkZGluZzouMDVyZW0gMS4ycmVtIDA7dGV4dC1h''@;'; put 'put ''bGlnbjpsZWZ0O3dpZHRoOjEwMCV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmZvY3Vze3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tcG9wb3Zlci1ob3Zlci1jb2xvciwgI2U4ZThlOCl9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7YmFja2dyb3VuZDoj''@;'; put 'put ''ZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXJvdy1ob3ZlciwgI2U4ZThlOCk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWZvbnQtY29sb3IsIGJsYWNrKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFj''@;'; put 'put ''dGlvbi1pdGVtOmZvY3Vze291dGxpbmU6MH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtLmRpc2FibGVkLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxv''@;'; put 'put ''d2VkO29wYWNpdHk6LjQ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDpob3ZlciwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cg''@;'; put 'put ''LmFjdGlvbi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0u''@;'; put 'put ''ZGlzYWJsZWQ6Zm9jdXMsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpmb2N1c3tiYWNrZ3JvdW5kOjAg''@;'; put 'put ''MDtib3gtc2hhZG93Om5vbmV9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjZHMtaWNvbiwuZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtIGNsci1pY29ue3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt0''@;'; put 'put ''cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtLjA1cmVtLDApfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwtd3JhcHBlcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlse3dpZHRoOmF1dG99LmRhdGFncmlkLXJvdyAu''@;'; put 'put ''ZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowO2JvcmRlcjowfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdHttaW4td2lkdGg6LjRyZW07YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdCAuY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXJ7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOi0uM3JlbX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0IGlucHV0e2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdC5jbHItZm9y''@;'; put 'put ''bS1jb250cm9sLWRpc2FibGVkLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0e2N1cnNvcjpub3QtYWxsb3dlZH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdHttYXJnaW46LS4zNnJl''@;'; put 'put ''bSAwO2hlaWdodDoxLjIzNnJlbX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlcntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDoxLjJyZW19LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LXN0aWNreXt6LWluZGV4''@;'; put 'put ''OjUwMH0uZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO3Bvc2l0aW9uOnN0aWNreTtsZWZ0OjA7ei1pbmRleDo1MDJ9LmRh''@;'; put 'put ''dGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZDphZnRlcntjb250ZW50OiIiO3dpZHRoOi4wNXJlbTtoZWlnaHQ6Y2FsYygxMDAlIC0gLjVyZW0pO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOi4yNXJlbTtiYWNrZ3JvdW5kLWNvbG9yOiNjY2M7YmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXB9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlzLXJlcGxhY2Vke2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvd30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUuaXMtcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxsc3tmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZSAuZGF0YWdyaWQtY29sdW1uOmxhc3QtY2hpbGQgLmRhdGFncmlkLWNvbHVtbi1z''@;'; put 'put ''ZXBhcmF0b3J7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctZmxleHtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWx7ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwfS5k''@;'; put 'put ''YXRhZ3JpZC1yb3ctZmxleCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nLXRvcDowfS5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMsLmRhdGFncmlkLXNjcm9sbGluZy1kZXRhaWxze2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO2ZsZXgtZmxvdzpyb3cgbm93''@;'; put 'put ''cmFwfS5kYXRhZ3JpZC1hY3Rpb24tYmFye21hcmdpbi10b3A6MS4ycmVtfS5kYXRhZ3JpZC1hY3Rpb24tYmFyfi5kYXRhZ3JpZC1zcGlubmVye2hlaWdodDpjYWxjKDEwMCUgLSAxLjJyZW0pO3RvcDoxLjJyZW19LmRhdGFncmlkLWhlYWRlcntwb3NpdGlvbjpzdGlja3k7dG9wOjA7ei1pbmRl''@;'; put 'put ''eDo1MDE7d2lkdGg6YXV0b30uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1jb2x1bW57Ym9yZGVyLWJvdHRvbTpub25lfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvd3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xv''@;'; put 'put ''ciwgI2ZhZmFmYSk7Ym9yZGVyLXRvcDpub25lO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDouMDVyZW07Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1ib3R0b20tY29sb3I6I2NjYzti''@;'; put 'put ''b3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LXN0aWNreSwuZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3c6aG92ZXIsLmRhdGFncmlkLWhlYWRlciAu''@;'; put 'put ''ZGF0YWdyaWQtcm93OmhvdmVyIC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZXtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpyb3d9LmRhdGFncmlkLXRhYmxlLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXg6MSAxIGF1dG87YWxpZ24tY29udGVudDpmbGV4LXN0''@;'; put 'put ''YXJ0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtYm9keXt3aWR0aDphdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1ue3RleHQtYWxpZ246bGVmdDttaW4td2lkdGg6NC44cmVtO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6''@;'; put 'put ''MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbjpmb2N1c3tvdXRsaW5lOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBzb2xpZCAuMXJlbTtvdXRsaW5lLW9mZnNldDotLjFyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gY2xyLWRnLWZpbHRlciwuZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctc3RyaW5nLWZpbHRlciwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctbnVtZXJpYy1maWx0ZXJ7ZGlzcGxheTpmbGV4O29yZGVyOjk5O21hcmdpbi1sZWZ0OmF1dG87YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3Jp''@;'; put 'put ''ZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItaW5wdXQtc3BhY2Vye3dpZHRoOi42cmVtO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dHt3aWR0aDozLjlyZW19''@;'; put 'put ''LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRl''@;'; put 'put ''cjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6cmlnaHQ7dmVydGljYWwtYWxpZ246bWlkZGxlO2hlaWdodDouN3JlbTt3aWR0aDouN3JlbTttYXJnaW4tbGVmdDouM3JlbTtiYWNrZ3JvdW5kLXJlcGVhdDpuby1y''@;'; put 'put ''ZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUg''@;'; put 'put ''Y2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUgY2xyLWljb257Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDAsICM4YzhjOGMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlOmhvdmVyIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcy''@;'; put 'put ''YTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1vcGVuIGNkcy1pY29uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlci1v''@;'; put 'put ''cGVuIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNkcy1pY29uLC5kYXRhZ3JpZC10''@;'; put 'put ''YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLmRhdGFncmlkLWZpbHRlcmVkIGNsci1pY29ue2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAsICMwMDcyYTMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5k''@;'; put 'put ''YXRhZ3JpZC1maWx0ZXJ7dG9wOjEwMCU7cmlnaHQ6MDttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3BhZGRpbmc6LjlyZW07Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0''@;'; put 'put ''aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVy''@;'; put 'put ''ZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1i''@;'; put 'put ''b3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXJ7dG9wOjEwMCU7cmlnaHQ6MDttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3BhZGRpbmc6LjlyZW07Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBv''@;'; put 'put ''cG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItc3R5bGU6c29saWQ7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0''@;'; put 'put ''MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFn''@;'; put 'put ''cmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIgLmNsb3Nle2Zsb2F0Om5vbmV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1maXhlZC13aWR0aHtmbGV4OjAgMCBhdXRvfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4tZmxleHtkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNl''@;'; put 'put ''Om5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IsICM2NjY2NjYpO3RleHQtYWxpZ246''@;'; put 'put ''bGVmdDtmbGV4OjEgMSBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOmNlbnRlcjtkaXNwbGF5OmZsZXh9YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRh''@;'; put 'put ''dGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxlIC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uLmJ0bntoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHttYXJnaW4tdG9wOi0uNDhyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLnNvcnQtaWNvbntjb2xvcjojMDA3MmEzO2NvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwLCAjMDA3MmEzKTttYXJnaW4tbGVmdDphdXRvO2hlaWdodDouN3JlbTt3aWR0aDou''@;'; put 'put ''N3JlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3J7cG9zaXRpb246cmVsYXRpdmU7bGVmdDouNnJlbTtmbGV4OjAgMCBhdXRvO3dpZHRoOi4wNXJlbTt3aWR0aDp2YXIoLS1jbHItZ2xvYmFs''@;'; put 'put ''LWJvcmRlcndpZHRoLCAuMDVyZW0pO29yZGVyOjEwMDttYXJnaW4tbGVmdDphdXRvO2hlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OmNh''@;'; put 'put ''bGMoMTAwJSArIC42cmVtIC0gLjA1cmVtKTt3aWR0aDouMDVyZW07dG9wOi0uMjVyZW07bGVmdDowO2JhY2tncm91bmQtY29sb3I6I2NjYztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IsICNjY2NjY2MpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6''@;'; put 'put ''MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOi42NXJlbTtyaWdodDotLjNyZW07dG9wOi0uM3JlbTtjdXJzb3I6Y29sLXJlc2l6ZTtoZWlnaHQ6Y2FsYygxMDAlICsgLjZyZW0gLSAuMDVyZW0pO3otaW5kZXg6''@;'; put 'put ''NTAxfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4taGFuZGxle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJh''@;'; put 'put ''dG9yIC5kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0uNnJlbTtkaXNwbGF5Om5vbmU7d2lkdGg6LjA1cmVtO2hlaWdodDowO2JvcmRlci1yaWdodC1zdHlsZTpkb3R0ZWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiM3OWM2ZTY7Ym9yZGVyLXJpZ2h0''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tMzAwLCAjNzljNmU2KTtib3JkZXItcmlnaHQtd2lkdGg6LjA1cmVtO2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7Y3Vyc29yOmNvbC1yZXNp''@;'; put 'put ''emV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlci5vbi1hcnJvdy1rZXktcmVzaXple3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLW91dH0uZGF0YWdyaWQtdGFibGUg''@;'; put 'put ''LmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciAuZXhjZWVkZWQtbWF4e2JvcmRlci1yaWdodDouMDVyZW0gZG90dGVkIHJnYmEoMjE5LDMzLDAsLjMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5z''@;'; put 'put ''aWducG9zdHttYXJnaW46LS4zNnJlbSAwO2hlaWdodDoxLjIzNnJlbX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXJ7aGVpZ2h0OmluaGVyaXQ7bGluZS1oZWlnaHQ6MS4ycmVtfS5k''@;'; put 'put ''YXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXNlbGVjdCwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbi5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRhdGFncmlkLXJvdy1hY3Rpb25ze21heC13''@;'; put 'put ''aWR0aDoxLjlyZW07bWluLXdpZHRoOjEuOXJlbX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGx7ZmxleDoxIDEgYXV0bzt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOjQuOHJlbTtib3JkZXI6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtd2lk''@;'; put 'put ''dGh7ZmxleDowIDAgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2ZsZXg6MCAwIDEuOXJlbTttYXgtd2lkdGg6MS45cmVtO21pbi13aWR0aDoxLjlyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLXJvdy1h''@;'; put 'put ''Y3Rpb25ze2JhY2tncm91bmQ6MCAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRs''@;'; put 'put ''aW5lOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvciBzb2xpZCAuMXJlbTtvdXRsaW5lLW9mZnNldDotLjFyZW19LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xley13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1t''@;'; put 'put ''cy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwfWJ1dHRvbi5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9u''@;'; put 'put ''LXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOiM4YzhjOGM7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IsICM4YzhjOGMpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24t''@;'; put 'put ''dG9nZ2xlOmFjdGl2ZSBjbHItaWNvbntjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlLCAjNjY2NjY2KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmNsci10b2dnbGUtd3JhcHBlcnttYXJnaW4tdG9wOi0uNjZyZW07cGFkZGluZy10b3A6''@;'; put 'put ''LjQycmVtfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVye2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLWNvbG9yOiNjY2M7Ym9yZGVyLXRvcC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItdG9wLXdpZHRoOi4wNXJlbTtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlcntiYWNrZ3Jv''@;'; put 'put ''dW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItdGFibGUtYmdjb2xvciwgd2hpdGUpO2Rpc3BsYXk6bm9uZTt3aWR0aDoxMDAlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcGxhY2Vob2xkZXIuZGF0YWdyaWQtZW1wdHl7Ym9yZGVyLXRvcDowO3BhZGRpbmc6LjZyZW07ZGlzcGxheTpm''@;'; put 'put ''bGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwO2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDtmb250LXNpemU6LjhyZW07Zm9udC1zaXplOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1mb250LXNpemUsIC44cmVtKTtjb2xvcjojYjNiM2IzO2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvciwgI2IzYjNiMyl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlciAuZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2V7aGVpZ2h0OjNyZW07d2lkdGg6M3JlbTttYXJnaW4tYm90dG9tOi42cmVtO2JhY2tn''@;'; put 'put ''cm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlcjtiYWNrZ3JvdW5kLWltYWdlOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA2MCUyMDcy''@;'; put 'put ''JTIyJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVm''@;'; put 'put ''cyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMnBhdGgtMSUyMiUyMGN4JTNEJTIyMzAlMjIlMjBjeSUzRCUyMjYxLjc2NjY2NjclMjIlMjByeCUzRCUyMjE1LjQ1MTI5MDQlMjIlMjByeSUzRCUyMjQuNzMzMzMzMzMlMjIlM0UlM0MlMkZlbGxpcHNl''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDbWFzayUyMGlkJTNEJTIybWFzay0yJTIyJTIwbWFza0NvbnRlbnRVbml0cyUzRCUyMnVzZXJTcGFjZU9uVXNlJTIyJTIwbWFza1VuaXRzJTNEJTIyb2JqZWN0Qm91bmRpbmdCb3glMjIlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIy''@;'; put 'put ''JTIwd2lkdGglM0QlMjIzMC45MDI1ODA4JTIyJTIwaGVpZ2h0JTNEJTIyOS40NjY2NjY2NyUyMiUyMGZpbGwlM0QlMjJ3aGl0ZSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUzRSUzQyUy''@;'; put 'put ''RnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRm1hc2slM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDZyUyMGlkJTNEJTIyUGFnZS0xJTIyJTIwc3Ryb2tlJTNEJTIybm9uZSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjElMjIlMjBm''@;'; put 'put ''aWxsJTNEJTIybm9uZSUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJBcnRib2FyZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3VzZSUyMGlkJTNEJTIyT3ZhbC0x''@;'; put 'put ''MCUyMiUyMHN0cm9rZSUzRCUyMiUyM0MxREZFRiUyMiUyMG1hc2slM0QlMjJ1cmwoJTIzbWFzay0yKSUyMiUyMHN0cm9rZS13aWR0aCUzRCUyMjIuOCUyMiUyMHN0cm9rZS1saW5lY2FwJTNEJTIyc3F1YXJlJTIyJTIwc3Ryb2tlLWRhc2hhcnJheSUzRCUyMjMlMkM2JTJDMyUyQzUlMjIlMjB4''@;'; put 'put ''bGluayUzQWhyZWYlM0QlMjIlMjNwYXRoLTElMjIlM0UlM0MlMkZ1c2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMEwzMC45ODkwMTM3JTJDMzQuOTE0MTg0NiUyMEwzMSUyQzQ3JTIw''@;'; put 'put ''TDMyLjU5Nzc3ODMlMkM0Ni41MTY3MjM2JTIwTDMyLjU5Nzc3ODMlMkMzNC45MTQxODQ2JTIwTDUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwQzUxLjA2NzMyMTglMkMxNS43NTYwNDI1JTIwNDguNjI5NTE2NiUyQzE2LjY1NDI5NjklMjA0NC45NjI4OTA2JTJDMTcuMzM5MjMzNCUyMEM0MS4y''@;'; put 'put ''OTYyNjQ2JTJDMTguMDI0MTY5OSUyMDM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwMzguNDYxMzY0NyUyQzE4LjE2NDI0NTYlMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NSUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBMNC42MjA2NTcyNiUyQzEyLjE2MDUzNDglMjBMNS4zNTE1NDE0JTJDMTEuMTYyNTA0NCUyMEw1Ljc3NjIyMzg1JTJDMTEuMTU5OTM5JTIwTDYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIw''@;'; put 'put ''TDQuNzQ2MzkyMjYlMkMxMi41NjYxODU1JTIwWiUyME02LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMEw2LjMyNTQyNjMyJTJDMTIuOTMxNzk1NCUyMEwyOC40OTYzODU1JTJDMzQuODc5NjcxOCUyMEwyOC40OTYzODU1JTJDNDcuODA5NjY5MSUyMEwzMi42JTJDNDYuNDgzNjUxMyUyMEwzMi42''@;'; put 'put ''JTJDMzQuODk5MjM2NSUyMEw1My45NzM0OTQlMkMxMi43MDM1ODEzJTIwTDUzLjk3MzQ5NCUyQzEyLjI2ODgyMDElMjBMNi4yMDkzNjMwOSUyQzEyLjU1NzM0ODElMjBaJTIwTTU1LjM3MzQ5NCUyQzEwLjg2MDMzNzYlMjBMNTUuMzczNDk0JTJDMTMuMjY4MDY2NCUyMEwzNCUyQzM1LjQ2Mzcy''@;'; put 'put ''MTYlMjBMMzQlMkM0Ny41MDI1NDAxJTIwTDI3LjA5NjM4NTUlMkM0OS43MzMzMzMzJTIwTDI3LjA5NjM4NTUlMkMzNS40NjM3MjE5JTIwTDUuMDkxNzk2ODglMkMxMy42ODA1NDIlMjBMNC4zMTMyNTMwMSUyQzExLjE2ODc3NjQlMjBMNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMFolMjIlMjBp''@;'; put 'put ''ZCUzRCUyMlBhdGgtMTQ5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NlbGxpcHNlJTIwaWQlM0QlMjJPdmFsLTklMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTIwY3glM0QlMjIz''@;'; put 'put ''MCUyMiUyMGN5JTNEJTIyMTEuNzg1NjU0JTIyJTIwcnglM0QlMjIyNiUyMiUyMHJ5JTNEJTIyNi43ODU2NTQwMSUyMiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0zMCUyQzE3LjE3MTMwOCUyMEMzNi44''@;'; put 'put ''NzcyMTc3JTJDMTcuMTcxMzA4JTIwNDMuMzExMjI4MiUyQzE2LjQ2MTA3MDElMjA0OC4wMzEyMzcxJTJDMTUuMjI5MjEwNiUyMEM1MC4yNzc3NjExJTJDMTQuNjQyODk3NyUyMDUyLjA1MDc2MTklMkMxMy45NTc5Njc3JTIwNTMuMjIxNjIzMSUyQzEzLjIzNTQ5NzMlMjBDNTQuMTkzODU2NSUy''@;'; put 'put ''QzEyLjYzNTU4ODYlMjA1NC42JTJDMTIuMTE3NTg5MSUyMDU0LjYlMkMxMS43ODU2NTQlMjBDNTQuNiUyQzExLjQ1MzcxODklMjA1NC4xOTM4NTY1JTJDMTAuOTM1NzE5NCUyMDUzLjIyMTYyMzElMkMxMC4zMzU4MTA3JTIwQzUyLjA1MDc2MTklMkM5LjYxMzM0MDMyJTIwNTAuMjc3NzYxMSUy''@;'; put 'put ''QzguOTI4NDEwMzQlMjA0OC4wMzEyMzcxJTJDOC4zNDIwOTc0NiUyMEM0My4zMTEyMjgyJTJDNy4xMTAyMzc5NSUyMDM2Ljg3NzIxNzclMkM2LjQlMjAzMCUyQzYuNCUyMEMyMy4xMjI3ODIzJTJDNi40JTIwMTYuNjg4NzcxOCUyQzcuMTEwMjM3OTUlMjAxMS45Njg3NjI5JTJDOC4zNDIwOTc0''@;'; put 'put ''NiUyMEM5LjcyMjIzODg2JTJDOC45Mjg0MTAzNCUyMDcuOTQ5MjM4MTQlMkM5LjYxMzM0MDMyJTIwNi43NzgzNzY4OSUyQzEwLjMzNTgxMDclMjBDNS44MDYxNDM1JTJDMTAuOTM1NzE5NCUyMDUuNCUyQzExLjQ1MzcxODklMjA1LjQlMkMxMS43ODU2NTQlMjBDNS40JTJDMTIuMTE3NTg5MSUy''@;'; put 'put ''MDUuODA2MTQzNSUyQzEyLjYzNTU4ODYlMjA2Ljc3ODM3Njg5JTJDMTMuMjM1NDk3MyUyMEM3Ljk0OTIzODE0JTJDMTMuOTU3OTY3NyUyMDkuNzIyMjM4ODYlMkMxNC42NDI4OTc3JTIwMTEuOTY4NzYyOSUyQzE1LjIyOTIxMDYlMjBDMTYuNjg4NzcxOCUyQzE2LjQ2MTA3MDElMjAyMy4xMjI3''@;'; put 'put ''ODIzJTJDMTcuMTcxMzA4JTIwMzAlMkMxNy4xNzEzMDglMjBaJTIwTTMwJTJDMTguNTcxMzA4JTIwQzE1LjY0MDU5NjUlMkMxOC41NzEzMDglMjA0JTJDMTUuNTMzMjY3MiUyMDQlMkMxMS43ODU2NTQlMjBDNCUyQzguMDM4MDQwNzglMjAxNS42NDA1OTY1JTJDNSUyMDMwJTJDNSUyMEM0NC4z''@;'; put 'put ''NTk0MDM1JTJDNSUyMDU2JTJDOC4wMzgwNDA3OCUyMDU2JTJDMTEuNzg1NjU0JTIwQzU2JTJDMTUuNTMzMjY3MiUyMDQ0LjM1OTQwMzUlMkMxOC41NzEzMDglMjAzMCUyQzE4LjU3MTMwOCUyMFolMjIlMjBpZCUzRCUyMk92YWwtOS1Db3B5JTIyJTIwZmlsbCUzRCUyMiUyMzdGQkRERCUyMiUz''@;'; put 'put ''RSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUyMk0xOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMEwyMi43MjczNTYlMkMxNi45MDQ3MjQxJTIwQzIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjAxNS4zMDA2NTkyJTJDMTYu''@;'; put 'put ''MzkxMTc0MyUyMDEwLjI3NjAwMSUyQzE0Ljc1MTE1OTclMjBDNS4yNTEzNDI3NyUyQzEzLjExMTE0NSUyMDUuMzgwMzEwMDYlMkMxMS44Mjg0MzAyJTIwNS4zODAzMTAwNiUyQzExLjY4ODI5MzUlMjBDNS4zODAzMTAwNiUyQzEwLjQ4MzI4MzElMjA4LjE2NjMzMTUyJTJDOS40MTg3NzcxNiUy''@;'; put 'put ''MDExLjExNDU2MyUyQzguNTczMjQyMTklMjBDMTQuNTQ5MzE5JTJDNy41ODgxNzQ5MiUyMDE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjBaJTIyJTIwaWQlM0QlMjJQYXRoLTE5NiUyMiUyMGZpbGwlM0QlMjIlMjNDMURGRUYlMjIlM0UlM0MlMkZw''@;'; put 'put ''YXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4uZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdy''@;'; put 'put ''aWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jZWxse2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHMgLmRhdGFncmlkLWNlbGw6bm90KC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0KTpub3QoLmRhdGFncmlkLXJvdy1hY3Rpb25z''@;'; put 'put ''KTpub3QoLmRhdGFncmlkLXNlbGVjdCl7ZGlzcGxheTpub25lfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTpibG9jaztwYWRkaW5nLXRvcDouNTVyZW19LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93''@;'; put 'put ''LWRldGFpbCAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1ue2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmctdG9wOi4xcmVtfS5kYXRhZ3JpZC1yb3ctcmVw''@;'; put 'put ''bGFjZWQgLmRhdGFncmlkLXJvdy1kZXRhaWwuZGF0YWdyaWQtY29udGFpbmVye2JvcmRlci10b3A6LjA1cmVtIHNvbGlkICNjY2N9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbC5kYXRhZ3JpZC1jb250YWluZXIgLmRhdGFncmlkLWNlbGx7Ym9yZGVyLXRvcDpu''@;'; put 'put ''b25lfS5kYXRhZ3JpZC1mb290ZXJ7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6c3RyZXRjaDtwYWRkaW5nOjAgLjZyZW07bGluZS1oZWlnaHQ6MS42NXJlbTtmb250LXNpemU6''@;'; put 'put ''LjU1cmVtO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yLCAjZmFmYWZhKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZS1mb290ZXItYm9yZGVyLXRv''@;'; put 'put ''cC1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItdG9wOm5vbmU7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90''@;'; put 'put ''dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOi4xNXJlbTtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfS5kYXRhZ3JpZC1m''@;'; put 'put ''b290ZXIgLnBhZ2luYXRpb257ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7bGluZS1oZWlnaHQ6MS44cmVtfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZXtkaXNwbGF5OmJsb2NrO2ZsZXg6MSAx''@;'; put 'put ''IGF1dG87d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1zaXplIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7dG9wOi42cmVtfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSAuY2xyLXBhZ2Utc2l6ZS1zZWxl''@;'; put 'put ''Y3R7Zm9udC1zaXplOjEwMCU7bWFyZ2luLWxlZnQ6LjZyZW07aGVpZ2h0OjEuMnJlbTtsaW5lLWhlaWdodDoxLjJyZW07dmVydGljYWwtYWxpZ246bWlkZGxlfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSsucGFnaW5hdGlvbi1kZXNjcmlwdGlvbnttYXJnaW4tbGVmdDoxLjJy''@;'; put 'put ''ZW19LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1kZXNjcmlwdGlvbnt3aGl0ZS1zcGFjZTpub3dyYXB9LmRhdGFncmlkLWZvb3RlciAucGFnaW5hdGlvbi1saXN0e21hcmdpbi1sZWZ0OjEuMnJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIg''@;'; put 'put ''LmNvbHVtbi1zd2l0Y2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257bWluLXdpZHRoOi45cmVt''@;'; put 'put ''O3BhZGRpbmctbGVmdDouM3JlbTtwYWRkaW5nLXJpZ2h0Oi4zcmVtO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7Ym9yZGVyLWNvbG9yOiM4YzhjOGM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1jb2xvciwgIzhjOGM4Yyk7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjojZmFmYWZhO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvciwgI2ZhZmFmYSk7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yLCAjNjY2NjY2KX0uZGF0YWdy''@;'; put 'put ''aWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpob3Zlcntib3JkZXItY29sb3I6IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWhvdmVyLWNvbG9yLCAjNjY2NjY2KTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWhvdmVyLWNvbG9yLCB3aGl0ZSk7Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWhvdmVyLWNvbG9yLCBibGFjayl9LmRh''@;'; put 'put ''dGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246YWN0aXZlLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmZvY3Vze2JveC1zaGFkb3c6bm9uZTtib3JkZXItY29sb3I6''@;'; put 'put ''IzY2Njtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWFjdGl2ZS1jb2xvciwgIzY2NjY2Nik7YmFja2dyb3VuZC1jb2xvcjojZjJmMmYyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3Rp''@;'; put 'put ''dmUtY29sb3IsICNmMmYyZjIpO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1hY3RpdmUtY29sb3IsICM2NjY2NjYpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVz''@;'; put 'put ''Oi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4Yzhj''@;'; put 'put ''NDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7cGFkZGluZzouOXJlbTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXRvcDpub25lO3dpZHRoOjEyLjVyZW07''@;'; put 'put ''ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtY29udGVudHttYXgtaGVpZ2h0OjE1cmVtO292ZXJmbG93LXk6YXV0bzttaW4taGVpZ2h0OjIu''@;'; put 'put ''NHJlbX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2h7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1wb3BvdmVyLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtICM4YzhjOGM0MDtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSB2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdy1jb2xv''@;'; put 'put ''ciwgcmdiYSgxNDAsIDE0MCwgMTQwLCAuMjUpKTtwYWRkaW5nOi45cmVtO3dpZHRoOjEyLjVyZW07ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0''@;'; put 'put ''Y2gtaGVhZGVye2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOi44cmVtO3BhZGRpbmctYm90dG9tOi42cmVtO2xpbmUtaGVpZ2h0OjEuMnJlbX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIg''@;'; put 'put ''LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9ue21pbi13aWR0aDouOXJlbTttYXJnaW46MDtwYWRkaW5nOjB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbntjb2xvcjoj''@;'; put 'put ''YjNiM2IzO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yLCAjYjNiM2IzKX0uZGF0YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uOmhvdmVy''@;'; put 'put ''e2NvbG9yOiMwMDcyYTM7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3IsICMwMDcyYTMpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnR7bWF4LWhl''@;'; put 'put ''aWdodDoxNXJlbTtvdmVyZmxvdy15OmF1dG87bWluLWhlaWdodDoxLjI1cmVtfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnQgbGl7bGluZS1oZWlnaHQ6MS4ycmVtO3BhZGRpbmctbGVmdDouMXJlbX0uZGF0YWdy''@;'; put 'put ''aWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1mb290ZXIgLmJ0bnttYXJnaW46MDtwYWRkaW5nOjB9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtZm9vdGVyIC5hY3Rpb24t''@;'; put 'put ''cmlnaHR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVke2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFn''@;'; put 'put ''cmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtjdXJzb3I6ZGVmYXVsdDttYXJnaW4tcmlnaHQ6LjQ1cmVtfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1j''@;'; put 'put ''aGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6IzhjOGM4YztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCwgIzhjOGM4Yyl9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQg''@;'; put 'put ''LmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTAsIHdoaXRlKTtib3Jk''@;'; put 'put ''ZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wLCB3aGl0ZSl9LmRhdGFncmlkLXNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O3dpZHRoOjEwMCU7dG9wOi42cmVtO2hlaWdodDpjYWxjKDEwMCUgLSAuNnJlbSk7YmFja2dyb3VuZC1jb2xvcjojZmZmOTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1sb2FkaW5nLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgLjYpKTt6LWluZGV4OjU5MH0u''@;'; put 'put ''ZGF0YWdyaWQtc2VsZWN0IC5jbHItY29udHJvbC1sYWJlbHttaW4taGVpZ2h0Oi42cmVtO21hcmdpbi10b3A6LS4yNHJlbTtwYWRkaW5nLWxlZnQ6LjdyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWhlYWRlcnttaW4taGVpZ2h0OjEuMnJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yOmFmdGVye2hlaWdodDpjYWxjKDEwMCUgKyAuMjVyZW0pO3RvcDpjYWxjKC0uMjUqLjZyZW0gKyAuMDVyZW0pfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIGNsci1pY29ue21hcmdpbi10b3A6LS4ycmVtO21h''@;'; put 'put ''cmdpbi1ib3R0b206LS4xNXJlbTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjA1cmVtKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbCBjZHMtaWNvbnttYXJnaW4tdG9wOi0uMnJlbTttYXJnaW4tYm90dG9tOi0uMTVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNlbGwg''@;'; put 'put ''LmJhZGdle21hcmdpbi10b3A6LS4xNXJlbTttYXJnaW4tYm90dG9tOi0uMDVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7dGV4dC1hbGlnbjpjZW50ZXJ9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7''@;'; put 'put ''bWFyZ2luLXRvcDouMTVyZW19LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8t''@;'; put 'put ''YXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2hlaWdodDoxLjJyZW07d2lkdGg6MS4ycmVtO291dGxpbmUtb2Zmc2V0Oi0uMnJlbX1idXR0b24uZGF0YWdyaWQtY29tcGFjdCAu''@;'; put 'put ''ZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbnttYXJnaW46MH0uZGF0''@;'; put 'put ''YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6MH0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZy10b3A6LjNyZW07cGFkZGluZy1ib3R0b206LjI1cmVt''@;'; put 'put ''fS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdCAuc2lnbnBvc3QtdHJpZ2dlciBjZHMtaWNvbjpub3QoW3NoYXBlPWluZm8tY2lyY2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tdHJpYW5nbGVdLFtzaGFwZT1leGNsYW1hdGlvbi1jaXJjbGVdLFtz''@;'; put 'put ''aGFwZT1jaGVjay1jaXJjbGVdLFtzaGFwZT1pbmZvXSxbc2hhcGU9ZXJyb3JdKSwuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2lnbnBvc3QgLnNpZ25wb3N0LXRyaWdnZXIgY2xyLWljb246bm90KFtzaGFwZT1pbmZvLWNpcmNsZV0sW3NoYXBlPWV4Y2xh''@;'; put 'put ''bWF0aW9uLXRyaWFuZ2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tY2lyY2xlXSxbc2hhcGU9Y2hlY2stY2lyY2xlXSxbc2hhcGU9aW5mb10sW3NoYXBlPWVycm9yXSl7aGVpZ2h0OjEuMDVyZW07d2lkdGg6MS4wNXJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVye3BhZGRpbmc6''@;'; put 'put ''MCAuNnJlbTtsaW5lLWhlaWdodDoxLjE1cmVtfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb257bGluZS1oZWlnaHQ6MS4ycmVtfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2ds''@;'; put 'put ''ZS0tYWN0aW9ue21hcmdpbjowO291dGxpbmUtb2Zmc2V0Oi0uMnJlbX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5kYXRhZ3JpZC1mb290ZXItc2VsZWN0LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2ti''@;'; put 'put ''b3hdOmNoZWNrZWQrbGFiZWx7dG9wOjB9LmRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbntmbGV4OjEgMSBhdXRvO2ZsZXgtd3JhcDpub3dyYXA7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpyaWdodDttYXJnaW46YXV0byAwfS5wYWdpbmF0aW9uLWxpc3R7''@;'; put 'put ''bGlzdC1zdHlsZTpub25lO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2h9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50e2JhY2tncm91bmQ6MCAwO2JhY2tncm91bmQtY29sb3I6I2Zm''@;'; put 'put ''ZjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yLCB3aGl0ZSk7Ym9yZGVyLWNvbG9yOiNjY2M7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVy''@;'; put 'put ''LXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtsaW5lLWhl''@;'; put 'put ''aWdodDoxLjJyZW07Zm9udC1zaXplOi41NXJlbTttaW4td2lkdGg6MS4ycmVtO3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50OmZvY3VzLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3Vy''@;'; put 'put ''cmVudC5jbHItZm9jdXN7YmFja2dyb3VuZDowIDA7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6IzQ5YWVkYTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWZvY3VzLWNvbG9yLCAjNDlhZWRhKTtib3gtc2hhZG93OjAgMCAu''@;'; put 'put ''MDVyZW0gIzQ5YWVkYTtib3gtc2hhZG93OjAgMCB2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pIHZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvciwgIzQ5YWVkYSl9LnBhZ2luYXRpb24tbGlzdD4qe3BhZGRpbmc6MCAuMTJy''@;'; put 'put ''ZW19LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1wcmV2aW91cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0''@;'; put 'put ''ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdDpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlz''@;'; put 'put ''dCAucGFnaW5hdGlvbi1wcmV2aW91czpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHQ6ZGlzYWJsZWR7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1idG4tZGlzYWJsZWQtY29sb3IsICM4YzhjOGMpO29wYWNpdHk6LjU2''@;'; put 'put ''O29wYWNpdHk6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWRpc2FibGVkLW9wYWNpdHksIC41Nil9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLXByZXZpb3Vze21hcmdpbi1yaWdodDouNnJlbX0ucGFnaW5h''@;'; put 'put ''dGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1uZXh0e21hcmdpbi1sZWZ0Oi42cmVtfS5wYWdpbmF0aW9uLWxpc3QgYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWNvbG9yLCAjNjY2NjY2KTtj''@;'; put 'put ''dXJzb3I6cG9pbnRlcn1idXR0b24ucGFnaW5hdGlvbi1saXN0IGJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtY2VsbC13aWR0aC16ZXJve2JvcmRlcjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O3dpZHRoOjA7ZmxleDowIDAgYXV0byFpbXBvcnRhbnQ7bWluLXdpZHRo''@;'; put 'put ''OjAhaW1wb3J0YW50O2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kYXRhZ3JpZC1vdXRlci13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1ncm93OjE7b3ZlcmZsb3c6YXV0b30uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG87bWluLXdpZHRoOjEycmVtfS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBkaXYuZGF0YWdyaWQtdGFibGV7bWF4LXdpZHRoOjEwMCU7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVufS5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlciBjbHItZGctY2VsbHt3aWR0aDoxMDAlIWltcG9ydGFudH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFn''@;'; put 'put ''cmlkLWlubmVyLXdyYXBwZXIgY2xyLWRnLWNvbHVtbjpmaXJzdC1jaGlsZHt3aWR0aDphdXRvIWltcG9ydGFudH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlke2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXJpZ2h0Om5vbmV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5k''@;'; put 'put ''YXRhZ3JpZC1pbm5lci13cmFwcGVye3dpZHRoOjM0JX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciwuZGF0YWdyaWQtZGV0YWlsLW9wZW4gLmRhdGFncmlkLXJvd3tib3JkZXItcmlnaHQ6LjA1cmVtIHNvbGlkICNjY2N9LmRhdGFncmlkLWRl''@;'; put 'put ''dGFpbC1vcGVuIC5kYXRhZ3JpZC1mb290ZXJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb257d2lkdGg6MTAwJX0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb24tZGVzY3JpcHRpb24tY29tcGFjdHt0ZXh0LWFsaWdu''@;'; put 'put ''OmxlZnQ7ZmxleDoxfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7bWFyZ2luLXJpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3Blbntwb3NpdGlvbjpyZWxhdGl2ZX0uZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuOmJlZm9yZXtjb250''@;'; put 'put ''ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjouNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNjY2M7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3Jk''@;'; put 'put ''ZXItY29sb3IsICNjY2NjY2MpO3RvcDouNXJlbTtyaWdodDowfS5kYXRhZ3JpZC1yb3ctZGV0YWlsLW9wZW46YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtib3JkZXI6LjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1j''@;'; put 'put ''b2xvcjojZmZmO2JvcmRlci1yaWdodC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO3RvcDouNTVyZW07cmlnaHQ6LS4wNXJlbX0uZGF0YWdyaWQtZGV0YWlsLXBhbmV7bWFyZ2luLXRvcDouNnJlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13''@;'; put 'put ''aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRlZmF1bHQtYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3JkZXItbGVmdDpub25lO2JvcmRl''@;'; put 'put ''ci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLWdsb2Jh''@;'; put 'put ''bC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IsIHdoaXRlKTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jaztmbGV4LWdyb3c6Mjt3aWR0aDo2NiV9LmRhdGFncmlkLWRldGFpbC1w''@;'; put 'put ''YW5lLWNvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvdmVyZmxvdzphdXRvO2hlaWdodDoxMDAlfS5kYXRhZ3JpZC1kZXRhaWwtYm9keXtmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MCAxLjJyZW19LmRhdGFncmlkLWRldGFpbC1oZWFkZXJ7ZmxleDowIDAgYXV0bztm''@;'; put 'put ''b250LXNpemU6LjlyZW07bGluZS1oZWlnaHQ6MS42OHJlbTtwYWRkaW5nLWxlZnQ6MS4ycmVtO21hcmdpbi10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyLXRpdGxle2ZsZXg6MSAxIGF1''@;'; put 'put ''dG87cGFkZGluZy10b3A6LjhyZW19LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3Nle2ZsZXg6MSAxIDEuOHJlbTtwYWRkaW5nOjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UgLmJ0bi5idG4tbGlua3ttYXJnaW4tdG9wOi44cmVtO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLXJpZ2h0OjB9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlIC5idG4uYnRuLWxpbmsgY2RzLWljb257Y29s''@;'; put 'put ''b3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItbW9kYWwtY2xvc2UtY29sb3IsICM4YzhjOGMpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXR7cGFkZGluZzowO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOi4zcmVtIC40NXJlbX0u''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDti''@;'; put 'put ''b3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjFyZW0gLjJyZW0gLjE1cmVtfWJ1dHRvbi5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbi5pcy1vcGVue2JhY2tncm91bmQtY29sb3I6IzAwNzJhMztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWJnLWNvbG9yLCAjMDA3MmEzKTtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24uaXMtb3BlbiAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6''@;'; put 'put ''I2ZmZjtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1pY29uLWNvbG9yLCB3aGl0ZSl9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtaWNv''@;'; put 'put ''bi1jb2xvciwgIzhjOGM4Yyk7bWFyZ2luLXRvcDouMXJlbX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6LjNyZW19LmRhdGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jb2x1bW57cGFkZGluZzouNTVyZW0gLjZyZW19LmRhdGFncmlkLWRldGFpbC1vdmVy''@;'; put 'put ''bGF5LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVye2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtZGV0YWlsLW92ZXJsYXkgLmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRlci1sZWZ0Oi4wNXJlbSBzb2xpZCAjY2NjO2Jv''@;'; put 'put ''cmRlci1yYWRpdXM6LjE1cmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWRldGFpbC1wYW5le2JvcmRl''@;'; put 'put ''ci1sZWZ0Oi4wNXJlbSBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6LjE1cmVtfX0uY29sdW1uLXN3aXRjaHtib3JkZXItcmFkaXVzOi4xNXJlbTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzLCAuMTVyZW0pO3BhZGRpbmc6LjlyZW07YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IsIHdoaXRlKTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Y29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJz''@;'; put 'put ''LWJveC1zaGFkb3ctY29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7d2lkdGg6MTIuNXJlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3otaW5kZXg6MTA1MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OnNwYWNlLWJldHdlZW47Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZTouOHJlbTtwYWRkaW5nLWJvdHRvbTouNnJlbTtsaW5lLWhlaWdodDoxLjJyZW19LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDEsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDIsLmNvbHVtbi1zd2l0''@;'; put 'put ''Y2ggLnN3aXRjaC1oZWFkZXIgaDMsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDQsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDUsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDZ7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IsICM2NjY2NjYp''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OjQwMDtmb250LXNpemU6LjhyZW07bGluZS1oZWlnaHQ6MS4ycmVtO21hcmdpbjowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbnttaW4td2lkdGg6LjlyZW07bWFyZ2luOjA7cGFkZGluZzowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1''@;'; put 'put ''dHRvbiBjZHMtaWNvbntjb2xvcjojYjNiM2IzO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yLCAjYjNiM2IzKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRlciBidXR0b24gY2RzLWljb246aG92ZXJ7Y29sb3I6IzAwNzJhMztjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1jb2xvciwgIzAwNzJhMyl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50e21heC1oZWlnaHQ6MTVyZW07b3ZlcmZsb3cteTphdXRvO21pbi1oZWlnaHQ6MS4yNXJlbX0uY29sdW1uLXN3aXRj''@;'; put 'put ''aCAuc3dpdGNoLWNvbnRlbnQgbGl7bGluZS1oZWlnaHQ6MS4ycmVtO3BhZGRpbmctbGVmdDouMXJlbX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWZvb3RlciAuYnRue21hcmdpbjowO3BhZGRpbmc6MH0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWZvb3RlciAuYWN0aW9uLXJpZ2h0e2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRhdGFncmlkLWZpbHRlcnttYXJnaW4tdG9wOi4yNHJlbTtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJlbSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IsICNjY2NjY2MpO3BhZGRpbmc6LjlyZW07Ym94LXNoYWRv''@;'; put 'put ''dzowIC4wNXJlbSAuMTVyZW0gIzhjOGM4YzQwO2JveC1zaGFkb3c6MCAuMDVyZW0gLjE1cmVtIHZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVycy1ib3gtc2hhZG93LWNvbG9yLCByZ2JhKDE0MCwgMTQwLCAxNDAsIC4yNSkpO2JvcmRlci1yYWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2xyLWdsb2JhbC1ib3JkZXJyYWRpdXMsIC4xNXJlbSk7Zm9udC13ZWlnaHQ6NDAwfS5kYXRhZ3JpZC1maWx0ZXIgLmRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVye3RleHQtYWxpZ246cmlnaHR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIg''@;'; put 'put ''LmNsb3Nle2Zsb2F0Om5vbmV9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93e3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2ZmZjtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1w''@;'; put 'put ''b3BvdmVyLWJnLWNvbG9yLCB3aGl0ZSk7cGFkZGluZzouM3JlbTttYXJnaW4tbGVmdDouM3JlbTtib3JkZXItd2lkdGg6LjA1cmVtO2JvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I2NjYzti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKTtib3gtc2hhZG93OjAgLjA1cmVtIC4xNXJlbSAjOGM4YzhjNDA7Ym94LXNoYWRvdzowIC4wNXJlbSAuMTVyZW0gdmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3ct''@;'; put 'put ''Y29sb3IsIHJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KSk7Ym9yZGVyLXJhZGl1czouMTVyZW07Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cywgLjE1cmVtKTtmb250LXdlaWdodDo0MDA7d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZs''@;'; put 'put ''b3c6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0OjA7bWFyZ2luLXRvcDotLjNyZW07Ym9yZGVyOi4zcmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjAgbm9uZTtib3JkZXItcmlnaHQtY29sb3I6I2Nj''@;'; put 'put ''Yztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yLCAjY2NjY2NjKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO3dpZHRoOjA7aGVpZ2h0''@;'; put 'put ''OjA7bWFyZ2luLXRvcDotLjI1cmVtO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgI2ZmZjtib3JkZXItdG9wOi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRl''@;'; put 'put ''bXtjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjdyZW07bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MS4x''@;'; put 'put ''NXJlbTttYXJnaW46MDtwYWRkaW5nOi4wNXJlbSAxLjJyZW0gMDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAwJX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3ZlciwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpmb2N1c3t0ZXh0LWRlY29y''@;'; put 'put ''YXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLXBvcG92ZXItaG92ZXItY29sb3IsICNlOGU4ZTgpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtLmFjdGl2ZXtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLCAjZThlOGU4KTtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvciwgYmxhY2spfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFj''@;'; put 'put ''dGlvbi1pdGVtOmZvY3Vze291dGxpbmU6MH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZCwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7b3BhY2l0eTouNDstd2Via2l0LXVzZXIt''@;'; put 'put ''c2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDpob3ZlciwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uZGF0YWdyaWQtYWN0''@;'; put 'put ''aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW0uZGlzYWJsZWQ6Zm9jdXMsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06ZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1hY3Rp''@;'; put 'put ''b24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmRpc2FibGVkOmZvY3Vze2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjZHMtaWNvbiwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbSBjbHItaWNv''@;'; put 'put ''bnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTFweCwwKX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZXtkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZCwuZGF0YWdy''@;'; put 'put ''aWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtZm9vdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctbWFzdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctY2xp''@;'; put 'put ''Y2thYmxle2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGV7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6YXV0b30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdy''@;'; put 'put ''aWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlcntkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9u''@;'; put 'put ''LWhlYWRlciAuZGF0YWdyaWQtY29sdW1ue2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6NC44cmVtfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24taGVhZGVyIC5kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW57Ym9yZGVyLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvciwgI2U4ZThlOCk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1zdHls''@;'; put 'put ''ZTpzb2xpZDtwYWRkaW5nOi41NXJlbSAuNnJlbTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Y29sb3I6IzY2Njtjb2xvcjp2YXIoLS1jbHItcDYtY29sb3IsICM2NjY2NjYpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtYm9sZCwgNjAwKTtmb250LXNpemU6''@;'; put 'put ''LjU1cmVtO2xldHRlci1zcGFjaW5nOi4wM2VtO2xpbmUtaGVpZ2h0Oi42cmVtO21hcmdpbi10b3A6MS4ycmVtO21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvd3tkaXNw''@;'; put 'put ''bGF5OnRhYmxlLXJvd30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGw7bWluLXdpZHRoOjQuOHJlbTtmb250LXNpemU6LjY1cmVtO2xp''@;'; put 'put ''bmUtaGVpZ2h0Oi43cmVtO3BhZGRpbmc6LjU1cmVtIC42cmVtO3ZlcnRpY2FsLWFsaWduOnRvcH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0''@;'; put 'put ''YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZGlzcGxheTpub25lfS5mYWRle29wYWNpdHk6MDt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdl''@;'; put 'put ''Om9wYWNpdHl9LmZhZGUuaW57b3BhY2l0eToxfS5mYWRlRG93bntvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTI1JSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dCx0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpbGwtY2hhbmdlOm9wYWNpdHksdHJhbnNmb3Jt''@;'; put 'put ''fS5mYWRlRG93bi5pbntvcGFjaXR5OjE7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwKX0ub2Zmc2NyZWVuLWZvY3VzLXJlYm91bmRlcntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9yZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDow''@;'; put 'put ''IWltcG9ydGFudDt0b3A6LWNvbnZlcnRCYXNlbGluZVRvQmFzZTIwKDEpIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowIDAgLWNvbnZlcnRCYXNlbGluZVRvQmFzZTIwKDEp''@;'; put 'put ''IDAhaW1wb3J0YW50O3Zpc2liaWxpdHk6dmlzaWJsZSFpbXBvcnRhbnR9OnJvb3R7LS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNDAwKTstLWNsci1uYXYtYWN0aXZlLWJveC1zaGFkb3ctY29sb3I6dmFyKC0tY2xyLWNvbG9yLWFjdGlvbi02MDAp''@;'; put 'put ''Oy0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWdsb2JhbC1zZWxlY3Rpb24tY29sb3IpOy0tY2xyLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItc2lkZW5hdi1saW5rLWhvdmVyLWNvbG9yKTstLWNsci1uYXYtbGluay1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJh''@;'; put 'put ''bC03MDApOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci1uYXYtbGluay1mb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1mb250LXdlaWdodDp2YXIoLS1jbHItbmF2''@;'; put 'put ''LWxpbmstZm9udC13ZWlnaHQpfUBtZWRpYSBzY3JlZW57c2VjdGlvblthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fVtkYXRhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9YnV0dG9uLm5hdi1saW5re2JvcmRlci1yYWRpdXM6MDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplO21p''@;'; put 'put ''bi13aWR0aDowfS50YWJzLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS50YWJzLW92ZXJmbG93IC5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6MH0udGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmV9XzotbXMtZnVsbHNjcmVlbiAudGFiLWNvbnRlbnQsOnJvb3QgLnRhYi1jb250ZW50e2Rpc3Bs''@;'; put 'put ''YXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWx7ZGlzcGxheTpmbGV4fS50YWJzLXZlcnRpY2FsPi5uYXZ7aGVpZ2h0OmF1dG87Ym94LXNoYWRvdzpub25lO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNoO21hcmdpbi1yaWdodDoxLjJyZW07''@;'; put 'put ''b3ZlcmZsb3c6YXV0bztmbGV4LXNocmluazowO3BhZGRpbmc6LjJyZW07d2lkdGg6MTJyZW07bWluLXdpZHRoOjIuNHJlbX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGlua3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGluZzowIC42cmVtO2JvcmRlcjowO21hcmdpbi1ib3R0b206LjA1cmVtO2Zs''@;'; put 'put ''ZXgtc2hyaW5rOjA7bWFyZ2luLXRvcDowO21hcmdpbi1sZWZ0OjA7d2lkdGg6MTAwJX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5uYXYtaXRlbXttYXJnaW4tcmlnaHQ6MH0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmUsLnRhYnMtdmVydGljYWw+Lm5hdiAubmF2''@;'; put 'put ''LWxpbms6aG92ZXJ7Ym94LXNoYWRvdzppbnNldCAuMTVyZW0gMCAjMDA3MmEzO2JveC1zaGFkb3c6aW5zZXQgLjE1cmVtIDAgMCB2YXIoLS1jbHItbmF2LWFjdGl2ZS1ib3gtc2hhZG93LWNvbG9yKX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluay5hY3RpdmV7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojZDhlM2U5O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW5hdi1hY3RpdmUtYmctY29sb3IsICNkOGUzZTkpfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rOm5vdCguYWN0aXZlKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItbmF2LWhvdmVyLWJnLWNvbG9yLCAjZThlOGU4KX06cm9vdHstLWNsci13aXphcmQtbWFpbi1iZ2NvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLXdpemFyZC1zaWRlbmF2LWJnY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTApOy0tY2xyLXdpemFyZC1tYWlu''@;'; put 'put ''LXRleHRDb2xvcjp2YXIoLS1jbHItY29sb3Itb24tbmV1dHJhbC0wKTstLWNsci13aXphcmQtc2lkZW5hdi10ZXh0OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTkwMCk7LS1jbHItd2l6YXJkLXNpZGVuYXYtdGV4dC0tYWN0aXZlOnZhcigtLWNsci1nbG9iYWwtb24tc2VsZWN0aW9uLWNvbG9y''@;'; put 'put ''KTstLWNsci13aXphcmQtdGl0bGUtdGV4dDp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0xMDAwKTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6ZTouMnJlbTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMjAwKTstLWNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3ItLWFjdGl2ZTp2YXIoLS1jbHItY29sb3Itc3VjY2Vzcy00MDApOy0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yLS1ob3ZlcmVkOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTEwMDApOy0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzOnZhcigtLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzKTstLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi1hY3RpdmUtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpOy0tY2xyLXdpemFyZC1zdGVwLW5hdi1ib3JkZXItY29sb3I6aHNsKDAsIDAlLCA4OSUpOy0tY2xyLXdpemFyZC1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMCwgMCwgMCwg''@;'; put 'put ''LjIpfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNoYWRvdzowIC4wNXJlbSAuMXJlbSAuMXJlbSAjMDAwMztib3gtc2hhZG93OjAgLjA1cmVtIC4xcmVtIC4xcmVtIHZhcigtLWNsci13''@;'; put 'put ''aXphcmQtYm94LXNoYWRvdy1jb2xvcik7aGVpZ2h0OjUwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOi4xNXJlbTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJk''@;'; put 'put ''LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cywgLjE1cmVtKTtib3gtc2hhZG93Om5vbmU7cGFkZGluZzowO2ZsZXg6MiAyIGF1dG87''@;'; put 'put ''d2lkdGg6NjYlO2hlaWdodDppbml0aWFsO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci13aXphcmQgLm1vZGFsLWhlYWRlciwuY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2Zs''@;'; put 'put ''ZXg6MCAwIGF1dG87d2lkdGg6MTAwJTtwYWRkaW5nOjEuMnJlbSAuOTVyZW0gLjNyZW0gMS4ycmVtfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtdGl0bGUtdGV4dCwgYmxhY2spO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpy''@;'; put 'put ''b3c7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDoxLjM1NnJlbTttYXJnaW4tdG9wOi0uMTU2cmVtfS5jbHItd2l6YXJkIC5tb2RhbC1ib2R5e2ZsZXg6MSAxIGF1dG87Y29sb3I6IzAwMDtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLW1haW4tdGV4dENvbG9yLCBibGFjayk7d2lkdGg6MTAwJX0uY2xy''@;'; put 'put ''LXdpemFyZCAubW9kYWwtZm9vdGVye3BhZGRpbmc6MDtkaXNwbGF5OmJsb2NrO3BhZGRpbmctdG9wOjEuMnJlbTtoZWlnaHQ6NC4ycmVtO21pbi1oZWlnaHQ6NC4ycmVtO21heC1oZWlnaHQ6NC4ycmVtO3dpZHRoOjEwMCU7ZmxleDowIDAgNC4ycmVtfS5jbHItd2l6YXJkIC5jbHItd2l6YXJk''@;'; put 'put ''LWJ0bnttYXJnaW46MDttYXgtd2lkdGg6MTAwJTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZS10ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAxIGF1dG87d2lkdGg6MTAwJTtvdXRsaW5lOjB9LmNsci13aXphcmQgLm1vZGFsLXRpdGxlLXdyYXBwZXJ7d2lk''@;'; put 'put ''dGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtaGVhZGVyLWFjdGlvbnMtd3JhcHBlcntmbGV4OjEgMCBhdXRvO3BhZGRpbmctbGVmdDouNnJlbTtwYWRkaW5nLXJpZ2h0Oi4ycmVtfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJy''@;'; put 'put ''ZW07cGFkZGluZzowO21hcmdpbjowO21pbi13aWR0aDoxLjJyZW07bGluZS1oZWlnaHQ6MS4ycmVtO2ZvbnQtc2l6ZToxLjNyZW07Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IsICM4YzhjOGMpO3RyYW5zaXRpb246Y29sb3IgbGluZWFy''@;'; put 'put ''IC4yc30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uIGF7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IsICM4YzhjOGMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb246aG92ZXIsLmNsci13aXph''@;'; put 'put ''cmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjphY3RpdmUsLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbjpmb2N1c3tjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtaGVhZGVyLWFjdGlvbi1jb2xvci0taG92ZXJlZCwgYmxhY2spfS5jbHItd2l6YXJkIC5j''@;'; put 'put ''bHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2RzLWljb24sLmNsci13aXphcmQgLmNsci13aXphcmQtaGVhZGVyLWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6MS4xcmVtO3dpZHRoOjEuMXJlbX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7ZmxleDoxIDEgYXV0bzt3aWR0''@;'; put 'put ''aDozNCU7bWF4LXdpZHRoOjM0JTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO29yZGVyOi0xO292ZXJmbG93OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87cGFkZGluZy1ib3R0b206MS4ycmVtO2xpbmUtaGVpZ2h0OjEuMnJlbTtib3JkZXItcmlnaHQtd2lkdGg6LjA1cmVtO2Jv''@;'; put 'put ''cmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoLCAuMDVyZW0pO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6I2UzZTNlMztib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwLW5hdi1ib3JkZXItY29sb3Is''@;'; put 'put ''ICNlM2UzZTMpO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi1iZ2NvbG9yLCAjZmFmYWZhKTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1s''@;'; put 'put ''ZWZ0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMsIC4xNXJlbSl9LmNsci13aXphcmQgLmNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdntwYWRkaW5nLWxlZnQ6MS4ycmVtO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOi43cmVtO2NvbG9yOiMzMzM7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1zaWRlbmF2LXRleHQsICMzMzMzMzMpO3dpZHRoOjEwMCU7ZmxleDoxIDEgYXV0b30uY2xyLXdpemFyZCAuY2xy''@;'; put 'put ''LXdpemFyZC1zdGVwbmF2LWxpc3R7ZGlzcGxheTpibG9jaztib3gtc2hhZG93Om5vbmU7Y291bnRlci1yZXNldDphO3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6YXV0bztsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtaXRlbXtkaXNwbGF5OmJsb2NrO2JveC1zaGFkb3c6LjJyZW0gMCAjZThlOGU4IGluc2V0O2JveC1zaGFkb3c6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1zaXplKSAwIDAgdmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1jb2xvcikgaW5zZXQ7bWFyZ2luOjAg''@;'; put 'put ''MCAtLjA1cmVtO3BhZGRpbmc6LjNyZW0gMCAuM3JlbSAuNHJlbTtjb2xvcjojMzMzO2NvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi10ZXh0LCAjMzMzMzMzKTtmb250LXdlaWdodDo0MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXJlZ3VsYXIsIDQwMCl9LmNsci13''@;'; put 'put ''aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFjdGl2ZXtjb2xvcjojMDAwO2NvbG9yOnZhcigtLWNsci13aXphcmQtc2lkZW5hdi10ZXh0LS1hY3RpdmUsIGJsYWNrKTtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkLCA1MDAp''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5hY3RpdmUgLmNsci13aXphcmQtc3RlcG5hdi1saW5re2JhY2tncm91bmQtY29sb3I6I2Q4ZTNlOTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1hY3RpdmUtYmdjb2xvciwgI2Q4ZTNlOSk7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6''@;'; put 'put ''dmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzLCAuMTVyZW0pfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5jb21wbGV0ZXtib3gtc2hhZG93Oi4ycmVtIDAgIzVlYjcxNSBpbnNldDtib3gtc2hhZG93OnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItc2l6''@;'; put 'put ''ZSkgMCAwIHZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3ItLWFjdGl2ZSkgaW5zZXQ7dHJhbnNpdGlvbjpib3gtc2hhZG93IC4ycyBlYXNlLWlufS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5lcnJvcntib3gtc2hhZG93Oi4ycmVtIDAgI2MyMWQwMCBp''@;'; put 'put ''bnNldDt0cmFuc2l0aW9uOmJveC1zaGFkb3cgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLm5vLWNsaWNrIGJ1dHRvbntwb2ludGVyLWV2ZW50czpub25lfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGlua3t3aWR0aDoxMDAlO2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtjb2xvcjppbmhlcml0O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgLjE1cmVtIDAgLjVyZW07Zm9udC1zaXplOi43cmVtO2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3RleHQtYWxpZ246bGVmdDt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdp''@;'; put 'put ''bjowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluayAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstc3VmZml4e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi13aWR0aDoxLjJyZW07cGFkZGluZy1yaWdodDouMzVyZW19LmNsci13aXphcmQgLmNsci13''@;'; put 'put ''aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1zdWZmaXggLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLWVycm9yLWljb257dHJhbnNmb3JtOm5vbmU7ZmlsbDojYzIxZDAwfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXRpdGxle2NvbG9yOiMwMDA7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXdpemFyZC10aXRsZS10ZXh0LCBibGFjayk7Zm9udC13ZWlnaHQ6MjAwO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMS1mb250LXdlaWdodCwgMjAwKTttYXJnaW4tdG9wOjA7cGFkZGluZzoxLjJyZW0gLjZyZW0gMS4ycmVtIDEuMnJlbTtmbGV4OjAgMCBhdXRvO2ZvbnQtc2l6ZTox''@;'; put 'put ''LjFyZW07bGluZS1oZWlnaHQ6MS4ycmVtfS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4OjEgMSAxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1j''@;'; put 'put ''b250ZW50LXdyYXBwZXIgLm1vZGFsLW5hdntoZWlnaHQ6YXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9uc3t0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MS4ycmVtO21hcmdpbjowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25zLXdy''@;'; put 'put ''YXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4td3JhcHBlcntmbGV4OjAgMSBhdXRvO21pbi13aWR0aDo0LjJyZW07cGFkZGluZy1sZWZ0Oi42cmVt''@;'; put 'put ''fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVyW2FyaWEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4uYnRuLWxpbmt7cGFkZGluZzowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xy''@;'; put 'put ''LXdpemFyZCAuY2xyLXdpemFyZC1wYWdlOm5vdChbYXJpYS1oaWRkZW49dHJ1ZV0pe3BhZGRpbmc6LjlyZW0gMS4ycmVtIDEuMnJlbTtkaXNwbGF5OmJsb2NrfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7aGVpZ2h0Ojc1dmh9LmNsci13aXphcmQgLm1vZGFsLWJvZHktd3JhcHBlcnttYXgt''@;'; put 'put ''aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZ3JvdzoxO3dpZHRoOjEwMCV9LmNsci13aXphcmQud2l6YXJkLW1kIC5tb2RhbC1kaWFsb2d7bWluLWhlaWdodDoyMXJlbTttYXgtaGVpZ2h0OjI1LjJyZW19LmNsci13aXphcmQud2l6YXJkLW1kIC5tb2RhbC1jb250ZW50LC5jbHItd2l6''@;'; put 'put ''YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWF4LWhlaWdodDoyNS4ycmVtfS5jbHItd2l6YXJkLndpemFyZC1tZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOjEwLjhyZW07bWF4LXdpZHRoOjEycmVtfS5jbHItd2l6YXJkLndpemFyZC1s''@;'; put 'put ''ZyAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6MjFyZW07bWF4LWhlaWdodDozNnJlbX0uY2xyLXdpemFyZC53aXphcmQtbGcgLm1vZGFsLWNvbnRlbnQsLmNsci13aXphcmQud2l6YXJkLWxnIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttYXgtaGVpZ2h0OjM2cmVtfS5jbHItd2l6YXJk''@;'; put 'put ''LndpemFyZC1sZyAubmF2LXBhbmVsLC5jbHItd2l6YXJkLndpemFyZC1sZyAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7bWluLXdpZHRoOjEycmVtO21heC13aWR0aDoxNC40cmVtfS5jbHItd2l6YXJkLndpemFyZC14bCAubW9kYWwtZGlhbG9ne2hlaWdodDo3NXZoO21heC1oZWlnaHQ6''@;'; put 'put ''bm9uZX0uY2xyLXdpemFyZC53aXphcmQteGwgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQteGwgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDoxMnJlbTttYXgtd2lkdGg6MTUuNnJlbX0uY2xyLXdpemFyZCAuc3Bpbm5lcjpub3QoLnNwaW5uZXItaW5saW5lKTpu''@;'; put 'put ''b3QoLmNsci10cmVlbm9kZS1zcGlubmVyKXtsZWZ0OmNhbGMoNTAlICsgNS43NXJlbSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJX0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtcGFnZT46Zmlyc3QtY2hpbGQ+OmZpcnN0LWNoaWxke21h''@;'; put 'put ''cmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGQ+LmZvcm0tYmxvY2s6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmV7ZGlzcGxheTpibG9jazt3''@;'; put 'put ''aWR0aDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmU+Y2xyLW1vZGFsPi5tb2RhbDpmb2N1c3tvdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudH0uY2xyLXdpemFyZC0taW5saW5lIGNsci1tb2RhbHtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2t9''@;'; put 'put ''LmNsci13aXphcmQtLWlubGluZSAubW9kYWx7cGFkZGluZzowO3Bvc2l0aW9uOnN0YXRpYztoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVye2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFs''@;'; put 'put ''IC5jb250ZW50LWNvbnRhaW5lciAubmF2LXBhbmVse2hlaWdodDo5OSU7d2lkdGg6OTklfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1jb250ZW50e2JveC1zaGFkb3c6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAubW9kYWwtZGlhbG9ne21pbi1oZWlnaHQ6MTAw''@;'; put 'put ''JTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3otaW5kZXg6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtaGVhZGVyIC5jbG9zZSwuY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1oZWFkZXIt''@;'; put 'put ''LWFjY2Vzc2libGUgLmNsb3Nle2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5uYXYubmF2TGlzdHtwYWRkaW5nLXRvcDowfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudCAubW9kYWwtYm9keSAuY29udGVudC1hcmVhe292ZXJmbG93LXk6''@;'; put 'put ''YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1iYWNrZHJvcHtoZWlnaHQ6MDt3aWR0aDowO2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7YWxpZ24taXRlbXM6c3RyZXRjaDtoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5l''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlciwuY2xyLXdpemFyZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnR7bWluLWhlaWdodDoxMDAlO2hlaWdodDphdXRvO21heC1oZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0taW5saW5lIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBl''@;'; put 'put ''ciAuY2xyLXdpemFyZC1zdGVwbmF2LC5jbHItd2l6YXJkLS1pbmxpbmUuY2xyLXdpemFyZCAubW9kYWwtY29udGVudCAuY2xyLXdpemFyZC1zdGVwbmF2e2hlaWdodDoxMDAlfS5jbHItd2l6YXJkLS1uby1zaGFkb3cgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciwuY2xyLXdpemFyZC0tbm8tc2hh''@;'; put 'put ''ZG93IC5tb2RhbC1kaWFsb2d7Ym94LXNoYWRvdzpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC10aXRsZXtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLW5vLXRpdGxlIC5jbHItd2l6YXJkLXN0ZXBuYXZ7cGFkZGluZy10b3A6MS4ycmVtfUBtZWRpYSBzY3JlZW57LmNs''@;'; put 'put ''ci13aXphcmQtcGFnZVthcmlhLWhpZGRlbj10cnVlXXtkaXNwbGF5Om5vbmV9fUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9ue21hcmdpbi10b3A6LS4xNXJlbX19OnJvb3R7LS1jbHItc2lnbnBvc3QtY29udGVudC1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC0wKTstLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MDApOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXNp''@;'; put 'put ''Z25wb3N0LWFjdGlvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItYWN0aW9uLTcwMCk7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBv''@;'; put 'put ''aW50ZXItYm9yZGVyKTstLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7LS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLXBz''@;'; put 'put ''dWVkby1ib3JkZXIpfS5zaWducG9zdHtkaXNwbGF5OmlubGluZS1ibG9ja30uc2lnbnBvc3Q6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb257bWluLXdpZHRoOjEuMnJlbTttYXJnaW46MDtwYWRkaW5nOjA7Y29sb3I6IzhjOGM4Yztjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yLCAjOGM4YzhjKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbiBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbiBjbHItaWNvbntoZWlnaHQ6MS4ycmVtO3dpZHRoOjEuMnJlbX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpob3Zl''@;'; put 'put ''ciwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbi5hY3RpdmV7Y29sb3I6IzAwNjQ4Zjtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWhvdmVyLWNvbG9yLCAjMDA2NDhmKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbiwuc2lnbnBvc3Qg''@;'; put 'put ''LnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbiBjbHItaWNvbntoZWlnaHQ6LjhyZW07d2lkdGg6LjhyZW19LnNpZ25wb3N0LXRyaWdnZXJ7bWFyZ2luOjA7cGFkZGluZzowO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5zaWducG9zdC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dHJhbnNw''@;'; put 'put ''YXJlbnQ7bWluLXdpZHRoOjEwLjhyZW07bWF4LXdpZHRoOjE4cmVtO21pbi1oZWlnaHQ6Mi40cmVtO21heC1oZWlnaHQ6MjUuMnJlbTtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTB9LnNpZ25wb3N0LWNvbnRlbnQ6aG92ZXJ7Y3Vyc29yOmRlZmF1''@;'; put 'put ''bHR9LnNpZ25wb3N0LWNvbnRlbnQgLnBvcG92ZXItcG9pbnRlcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlfS5zaWducG9zdC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2ln''@;'; put 'put ''bnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkICNiM2IzYjM7Ym9y''@;'; put 'put ''ZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1ib3JkZXIsIC42cmVtIHNvbGlkICNiM2IzYjMpO2JvdHRvbTotLjZyZW19LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zl''@;'; put 'put ''ci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDouNnJlbSBzb2xpZCAjZmZmO2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hp''@;'; put 'put ''dGUpO2JvdHRvbTouMXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWxlZnQ6LjZyZW0gc29saWQgdHJhbnNwYXJl''@;'; put 'put ''bnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3JpZ2h0Oi0uMDVyZW19LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWxlZnQ6LjZy''@;'; put 'put ''ZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3JpZ2h0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7bGVmdDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtsZWZ0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50''@;'; put 'put ''b3AtcmlnaHQgLnNpZ25wb3N0LXdyYXB7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAucG9wb3Zlci1wb2ludGVye2JvcmRlci1yaWdodDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0''@;'; put 'put ''LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2xlZnQ6LS4wNXJlbX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7bGVmdDouMDVyZW19LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5w''@;'; put 'put ''b3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCAjYjNiM2IzO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItYm9yZGVyLCAuNnJlbSBzb2xpZCAjYjNiM2Iz''@;'; put 'put ''KTt0b3A6LS41NXJlbX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAucG9wb3Zlci1w''@;'; put 'put ''b2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOi42cmVtIHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyLCAuNnJlbSBzb2xpZCB3aGl0ZSk7dG9wOi4xcmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5zaWdu''@;'; put 'put ''cG9zdC13cmFwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2li''@;'; put 'put ''bGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7cmlnaHQ6LS4wNXJlbX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1jbHItc2ln''@;'; put 'put ''bnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7cmlnaHQ6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtyaWdodDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQg''@;'; put 'put ''dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtyaWdodDotLjY1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9w''@;'; put 'put ''LWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0Oi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBz''@;'; put 'put ''b2xpZCB0cmFuc3BhcmVudCk7bGVmdDotLjA1cmVtfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1yaWdodCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWlu''@;'; put 'put ''dmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTtsZWZ0Oi4wNXJlbX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVm''@;'; put 'put ''dC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItbGVmdDouNnJlbSBzb2xpZCAjYjNiM2IzO2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlciwgLjZyZW0gc29saWQgI2IzYjNiMyk7cmlnaHQ6LS42cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9w''@;'; put 'put ''IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1sZWZ0Oi42cmVtIHNvbGlkICNmZmY7Ym9y''@;'; put 'put ''ZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hpdGUpfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC10''@;'; put 'put ''b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2JvdHRvbTotLjA1cmVtfS5zaWducG9zdC1jb250''@;'; put 'put ''ZW50LmxlZnQtdG9wIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci10b3A6LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xpZCB0cmFuc3BhcmVudCk7dG9wOi0uNjVyZW07''@;'; put 'put ''cmlnaHQ6LjFyZW19LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29s''@;'; put 'put ''aWQgdHJhbnNwYXJlbnQpO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNs''@;'; put 'put ''ci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LjA1cmVtO2xlZnQ6LS43cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjB9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQubGVmdC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3RvcDot''@;'; put 'put ''LjA1cmVtfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBz''@;'; put 'put ''b2xpZCB0cmFuc3BhcmVudCk7dG9wOi4wNXJlbTtsZWZ0Oi0uN3JlbX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20g''@;'; put 'put ''LnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgI2IzYjNiMztib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItYm9yZGVyLCAuNnJlbSBzb2xpZCAjYjNiM2IzKTtsZWZ0Oi0uNnJlbX0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92''@;'; put 'put ''ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVmb3JlLC5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6LjZyZW0gc29saWQgI2ZmZjtib3JkZXIt''@;'; put 'put ''cmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlciwgLjZyZW0gc29saWQgd2hpdGUpO2xlZnQ6LjFyZW19LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO2JvdHRvbTotLjA1cmVtfS5zaWdu''@;'; put 'put ''cG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItdG9wOi42cmVtIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci10b3A6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlciwgLjZyZW0gc29saWQgdHJhbnNwYXJlbnQpO3Rv''@;'; put 'put ''cDotLjY1cmVtfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1ib3R0b206LjZyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyLCAuNnJlbSBzb2xp''@;'; put 'put ''ZCB0cmFuc3BhcmVudCk7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNs''@;'; put 'put ''ci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQucmln''@;'; put 'put ''aHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5zcGFyZW50KTt0b3A6LS4wNXJlbX0uc2ln''@;'; put 'put ''bnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLWJvdHRvbTouNnJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIsIC42cmVtIHNvbGlkIHRyYW5z''@;'; put 'put ''cGFyZW50KTt0b3A6LjA1cmVtfS5zaWducG9zdC1jb250ZW50LWhlYWRlcntkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O3RvcDowfS5zaWducG9zdC13cmFwe2JvcmRlci1y''@;'; put 'put ''YWRpdXM6LjE1cmVtO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXdpZHRoOi4wNXJlbTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVy''@;'; put 'put ''LWNvbG9yOiNiM2IzYjM7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJvcmRlci1jb2xvciwgI2IzYjNiMyk7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYmctY29sb3IsIHdoaXRlKTt6LWlu''@;'; put 'put ''ZGV4OjEwNTA7cG9zaXRpb246cmVsYXRpdmV9LnNpZ25wb3N0LWNvbnRlbnQtYm9keXtwYWRkaW5nOjEuMnJlbTttYXgtaGVpZ2h0OjI0cmVtO292ZXJmbG93LXk6YXV0b30uZHJhZy1oYW5kbGV7Y3Vyc29yOmdyYWJ9LmluLWRyYWd7Y3Vyc29yOmdyYWJiaW5nOy13ZWJraXQtdXNlci1zZWxl''@;'; put 'put ''Y3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5pbi1kcmFnICp7cG9pbnRlci1ldmVudHM6bm9uZX0uaW4tZHJhZyAuZHJhZ2dhYmxlLmJlaW5nLWRyYWdnZWR7b3BhY2l0eTouNn0uZHJhZ2dhYmxlLWdob3N0e3Bvc2l0aW9uOmZpeGVkO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTpoaWRkZW47''@;'; put 'put ''ei1pbmRleDoyMTQ3NDgzNjQ3O3BvaW50ZXItZXZlbnRzOm5vbmU7d2lsbC1jaGFuZ2U6bGVmdCx0b3B9LmRyYWdnYWJsZS1naG9zdD4uZHJhZ2dhYmxle21hcmdpbjowO29wYWNpdHk6MX0uZHJhZ2dhYmxlLWdob3N0LmRyb3BwZWR7b3BhY2l0eTowfS5kcm9wcGFibGUuZHJhZ2dhYmxlLW1h''@;'; put 'put ''dGNoe2JvcmRlcjouMDVyZW0gZGFzaGVkICNjMDkwZDV9LmRyb3BwYWJsZS5kcmFnZ2FibGUtb3Zlcntib3JkZXI6LjA1cmVtIGRhc2hlZCAjNjgwMDk0fTpyb290ey0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZm9udC1jb2xvcik7LS1jbHItYWNjb3JkaW9u''@;'; put 'put ''LXBhbmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTUwMCk7LS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yKTstLWNsci1hY2NvcmRpb24tY29udGVudC1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTApOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC01MCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFs''@;'; put 'put ''LTIwMCk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1mb250LXNpemU6LjhyZW07LS1jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24tZm9udC1zaXplOi42cmVtOy0tY2xyLWFjY29yZGlvbi10aXRsZS1mb250LXdlaWdodDo1MDA7LS1jbHItYWNjb3JkaW9uLXRpdGxlLWZvbnQtc2l6ZTouNjVy''@;'; put 'put ''ZW07LS1jbHItYWNjb3JkaW9uLWVycm9yLWNvbG9yOnZhcigtLWNsci1nbG9iYWwtZXJyb3ItY29sb3IpOy0tY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1jb2xvcjp2YXIoLS1jbHItZ2xvYmFsLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWNv''@;'; put 'put ''bG9yLW5ldXRyYWwtNDAwKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1czp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcnJhZGl1cyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yOiNlOGU4ZTg7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoOi4zcmVtOy0tY2xy''@;'; put 'put ''LWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yKTstLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWhl''@;'; put 'put ''YWRlci1sZWZ0LWluZGljYXRvcjppbnNldCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWNvbXBsZXRlLWluZGljYXRvcjppbnNldCB2YXIo''@;'; put 'put ''LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1jb21wbGV0ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWVycm9yLWluZGljYXRvcjppbnNldCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1s''@;'; put 'put ''ZWZ0LXdpZHRoKSAwIDAgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItbGVmdC1jb2xvci1lcnJvcil9LmNsci1hY2NvcmRpb257ZGlzcGxheTpibG9jaztjb3VudGVyLXJlc2V0OmFjY29yZGlvbjttYXJnaW4tYm90dG9tOjEuMnJlbX0uY2xyLWFjY29yZGlvbi1wYW5lbHtkaXNwbGF5OmJs''@;'; put 'put ''b2NrfS5jbHItYWNjb3JkaW9uLWhlYWRlcntjb2xvcjojNjY2O2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvciwgIzY2NjY2Nik7Ym9yZGVyOi4wNXJlbSBzb2xpZDtib3JkZXItY29sb3I6I2NjYztib3JkZXItY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29s''@;'; put 'put ''b3IsICNjY2NjY2MpO2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjZThlOGU4O2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1pbmRpY2F0b3IsIGluc2V0IC4zcmVtIDAgMCAjZThlOGU4KTtiYWNrZ3JvdW5kOiNmYWZhZmE7YmFja2dyb3VuZDp2YXIoLS1jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yLCAjZmFmYWZhKTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7Ym9yZGVyLWJvdHRvbTowO3dpZHRoOjEwMCU7Zm9udC1zaXplOi44cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1mb250LXNpemUs''@;'; put 'put ''IC44cmVtKTt0ZXh0LWFsaWduOmxlZnR9LmNsci1hY2NvcmRpb24taGVhZGVyOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U4ZThlODtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3IsICNlOGU4ZTgpfS5jbHItYWNjb3Jk''@;'; put 'put ''aW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24tY29udGVudCwuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20td2lkdGg6LjA1cmVtO2JvcmRlci1ib3R0b20t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aCwgLjA1cmVtKTtib3JkZXItYm90dG9tLWNvbG9yOiNjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyl9LmNsci1hY2NvcmRpb24tbnVtYmVye3BhZGRpbmc6MCAu''@;'; put 'put ''OXJlbTtkaXNwbGF5Om5vbmV9LmNsci1hY2NvcmRpb24tbnVtYmVyOmJlZm9yZXtjb250ZW50OmNvdW50ZXIoYWNjb3JkaW9uKSAiLiI7Y291bnRlci1pbmNyZW1lbnQ6YWNjb3JkaW9ufS5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpyb3cgd3Jh''@;'; put 'put ''cDtmbGV4OjEgMSAwJTt3aWR0aDoxMDAlO2JvcmRlcjowO3BhZGRpbmc6LjlyZW07YmFja2dyb3VuZDowIDA7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyO2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLCAjNjY2NjY2KX1AbWVkaWEgKG1pbi13''@;'; put 'put ''aWR0aDo1NzZweCl7LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntmbGV4LWZsb3c6cm93fX0uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LXRpdGxle2NvbG9yOiNiM2IzYjM7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZC1jb2xvciwgI2IzYjNiMyl9LmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOjEuOHJlbTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmNsci1hY2NvcmRp''@;'; put 'put ''b24tdGl0bGV7ZGlzcGxheTppbmxpbmUtYmxvY2t9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe2Nsci1zdGVwLXRpdGxlLmNsci1hY2NvcmRpb24tdGl0bGV7bWluLXdpZHRoOjguNjRyZW19fS5jbHItYWNjb3JkaW9uLWhlYWRlci1oYXMtZGVzY3JpcHRpb24gLmNsci1hY2NvcmRpb24tdGl0''@;'; put 'put ''bGV7bWF4LXdpZHRoOjEzLjJyZW19LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb257ZGlzcGxheTppbmxpbmUtYmxvY2s7bWF4LXdpZHRoOjMyLjVyZW19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjEuOHJlbX19LmNsci1h''@;'; put 'put ''Y2NvcmRpb24tY29udGVudHtiYWNrZ3JvdW5kOiNmZmY7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtYmFja2dyb3VuZC1jb2xvciwgd2hpdGUpO2JvcmRlci13aWR0aDouMDVyZW07Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgsIC4wNXJl''@;'; put 'put ''bSk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvciwgI2NjY2NjYyk7Ym9yZGVyLWJvdHRvbTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi45cmVtO2Rpc3BsYXk6bm9uZX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1jb250ZW50IC5jbHItZm9ybSwuY2xyLWFjY29yZGlvbi1jb250ZW50Lm5nLXRyaWdnZXJ7cGFkZGluZzowfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1jb250ZW50e3BhZGRpbmc6LjlyZW0gMi43cmVtfX0uY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50''@;'; put 'put ''e3BhZGRpbmc6LjlyZW19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzouOXJlbSAyLjdyZW19fS5jbHItYWNjb3JkaW9uLWFuZ2xle3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2Zvcm06cm90YXRlKDkwKX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1lcnJvci1pY29uLC5jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWljb257aGVpZ2h0OjEuMnJlbTt3aWR0aDoxLjJyZW07ZGlzcGxheTpub25lO3BhZGRpbmc6MDttYXJnaW46MCAuNnJlbX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWNvbnRl''@;'; put 'put ''bnQtcmVnaW9uIC5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntiYWNrZ3JvdW5kOiNkOGUzZTk7YmFja2dyb3VuZDp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yLCAjZDhlM2U5KX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlciAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGU7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlIC5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWNvbXBsZXRlLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6IzVhYTIyMDtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yLCAjNWFhMjIwKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmls''@;'; put 'put ''aXR5OnZpc2libGV9LmNsci1hY2NvcmRpb24tcGFuZWwtY29tcGxldGUgLmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjNWFhMjIwO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1jb21wbGV0ZS1pbmRpY2F0b3IsIGluc2V0''@;'; put 'put ''IC4zcmVtIDAgMCAjNWFhMjIwKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAubmctdHJpZ2dlci5jbHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvciAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbTouMDVy''@;'; put 'put ''ZW0gc29saWQ7Ym9yZGVyLWNvbG9yOiNjMjFkMDA7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3IsICNjMjFkMDApO2JveC1zaGFkb3c6aW5zZXQgLjNyZW0gMCAjYzIxZDAwO2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFk''@;'; put 'put ''ZXItbGVmdC1lcnJvci1pbmRpY2F0b3IsIGluc2V0IC4zcmVtIDAgMCAjYzIxZDAwKTtiYWNrZ3JvdW5kLWNvbG9yOiNkOGUzZTk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yLCAjZDhlM2U5KX0uY2xyLWFjY29yZGlvbi1wYW5l''@;'; put 'put ''bC1lcnJvciAuY2xyLWFjY29yZGlvbi1lcnJvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvciwgI2MyMWQwMCl9LmNsci1hY2NvcmRpb24tcGFuZWwtZXJyb3IgLmNsci1hY2NvcmRpb24tbnVtYmVy''@;'; put 'put ''LC5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlIC5jbHItYWNjb3JkaW9uLW51bWJlcntwb3NpdGlvbjphYnNvbHV0ZTtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZs''@;'; put 'put ''b3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6bm9uZX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1wYW5lbDpmaXJzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLXRvcC1yaWdodC1yYWRp''@;'; put 'put ''dXM6LjE1cmVtO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cywgLjE1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbDpsYXN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWNv''@;'; put 'put ''bnRlbnQsLmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWw6bGFzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czouMTVyZW07Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMsIC4xNXJlbSk7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6LjE1cmVtO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cywgLjE1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi10aXRsZXtmb250LXdlaWdodDo1MDA7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWFjY29yZGlvbi10aXRsZS1mb250LXdlaWdodCwgNTAwKTtmb250LXNpemU6LjY1cmVtO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLXRpdGxlLWZvbnQt''@;'; put 'put ''c2l6ZSwgLjY1cmVtKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9ue2ZvbnQtc2l6ZTouNnJlbTtmb250LXNpemU6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uLWZvbnQtc2l6ZSwgLjZyZW0pO3BhZGRp''@;'; put 'put ''bmc6LjNyZW0gLjZyZW19LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjB9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24taW5uZXItY29udGVudHtwYWRkaW5nOi4z''@;'; put 'put ''cmVtIDEuNzVyZW19LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVze3dpZHRoOi45NnJlbX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXMgY2RzLWljb24sLmNsci1hY2Nv''@;'; put 'put ''cmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tc3RhdHVzIGNsci1pY29ue2hlaWdodDouN3JlbTt3aWR0aDouN3JlbX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjAhaW1w''@;'; put 'put ''b3J0YW50O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjAhaW1wb3J0YW50O2JvcmRlci1ib3R0b206MCFpbXBvcnRhbnR9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItYWNjb3JkaW9uLXBhbmVsLWluYWN0aXZlIC5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6aGlkZGVufS5jbHIt''@;'; put 'put ''c3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlciAuY2xyLWFjY29yZGlvbi1hbmdsZXt2aXNpYmlsaXR5OnZpc2libGV9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItYWNjb3JkaW9uLXN0YXR1c3ttaW4td2lkdGg6My42cmVtfS5jbHIt''@;'; put 'put ''c3RlcHBlci1mb3JtcyAuY2xyLWFjY29yZGlvbi1udW1iZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1zdGVwLWJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6MS4ycmVtfTpyb290ey0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNTAw''@;'; put 'put ''KTstLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcjp2YXIoLS1jbHItY29sb3ItbmV1dHJhbC02MDApOy0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtY29sb3I6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtNzAwKTstLWNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb2xvci1uZXV0cmFsLTcwMCk7LS1jbHItdGltZWxpbmUtaW5jb21wbGV0ZS1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1uZXV0cmFsLTYwMCk7LS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1hY3Rpb24tNjAwKTstLWNsci10aW1l''@;'; put 'put ''bGluZS1zdWNjZXNzLXN0ZXAtY29sb3I6dmFyKC0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwKTstLWNsci10aW1lbGluZS1lcnJvci1zdGVwLWNvbG9yOnZhcigtLWNsci1jb2xvci1kYW5nZXItODAwKTstLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNsci1wMi1m''@;'; put 'put ''b250LXdlaWdodCl9LmNsci10aW1lbGluZXtkaXNwbGF5OmZsZXg7cGFkZGluZzouNnJlbX0uY2xyLXRpbWVsaW5lLXN0ZXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO21pbi13aWR0aDo4Ljc1cmVtO21hcmdpbi1sZWZ0Oi42cmVtfS5jbHItdGltZWxp''@;'; put 'put ''bmUtc3RlcCBjZHMtaWNvbiwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb257aGVpZ2h0OjEuOHJlbTt3aWR0aDoxLjhyZW07bWluLWhlaWdodDoxLjhyZW07bWluLXdpZHRoOjEuOHJlbX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2xyLWljb25bc2hhcGU9Y2lyY2xlXXtjb2xvcjojOGM4YzhjO2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1pbmNvbXBsZXRlLXN0ZXAtY29sb3IsICM4YzhjOGMpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xy''@;'; put 'put ''LWljb25bc2hhcGU9ZG90LWNpcmNsZV17Y29sb3I6IzAwNzJhMztjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtY3VycmVudC1zdGVwLWNvbG9yLCAjMDA3MmEzKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwIGNs''@;'; put 'put ''ci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRde2NvbG9yOiM1ZWI3MTU7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvciwgIzVlYjcxNSl9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0''@;'; put 'put ''ZXAgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOiNjMjFkMDA7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLWVycm9yLXN0ZXAtY29sb3IsICNjMjFkMDApfS5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGluZS1zdGVwLWJvZHk6YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZDojYjNiM2IzO2JhY2tncm91bmQ6dmFyKC0tY2xyLXRpbWVsaW5lLWxpbmUtY29sb3IsICNiM2IzYjMpO2hlaWdodDouMXJlbTt3aWR0aDpjYWxjKDEwMCUgLSAxcmVtKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDEuN3JlbSwtLjk1cmVtKX0uY2xyLXRp''@;'; put 'put ''bWVsaW5lLXN0ZXAtaGVhZGVye2NvbG9yOiM4YzhjOGM7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtaGVhZGVyLWNvbG9yLCAjOGM4YzhjKTtmb250LXNpemU6LjY1cmVtO2xpbmUtaGVpZ2h0Oi45cmVtO3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tYm90dG9tOi40cmVtfS5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb24sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb257aGVpZ2h0Oi44cmVtO3dpZHRoOi44cmVtO21pbi13aWR0aDppbml0aWFsO21p''@;'; put 'put ''bi1oZWlnaHQ6aW5pdGlhbH0uY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3Rh''@;'; put 'put ''bmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNkcy1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1jaXJjbGVdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWRvdC1jaXJjbGVdLC5jbHIt''@;'; put 'put ''dGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPXN1Y2Nlc3Mtc3RhbmRhcmRdLC5jbHItdGltZWxpbmUtc3RlcC1ib2R5IGNsci1pY29uW3NoYXBlPWVycm9yLXN0YW5kYXJkXXtjb2xvcjppbmhlcml0fS5jbHItdGltZWxpbmUtc3RlcC10aXRsZXtjb2xvcjojNjY2O2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci10aW1lbGluZS1zdGVwLXRpdGxlLWNvbG9yLCAjNjY2NjY2KTtmb250LXNpemU6LjY1cmVtO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXdlaWdodDp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC10aXRsZS1mb250LXdlaWdodCwgNTAwKTtsaW5lLWhlaWdodDouOXJlbTttYXJnaW4tdG9w''@;'; put 'put ''Oi40cmVtO21hcmdpbi1ib3R0b206LjNyZW19LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9ue2NvbG9yOiM2NjY7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24tY29sb3IsICM2NjY2NjYpO2ZvbnQtc2l6ZTouNTVyZW07bGluZS1oZWlnaHQ6LjhyZW19LmNs''@;'; put 'put ''ci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGJ1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6LjRyZW19LmNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uIGltZ3t3aWR0aDoxMDAlO21hcmdpbi10b3A6LjRyZW19LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWx7''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDoxNnJlbX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXB7ZmxleC1kaXJlY3Rpb246cm93O21hcmdpbi1sZWZ0OjA7cG9zaXRpb246cmVsYXRpdmV9LmNsci10aW1lbGluZS5jbHItdGlt''@;'; put 'put ''ZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKXttYXJnaW4tYm90dG9tOjEuOHJlbX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpIC5jbHItdGltZWxpbmUtc3Rl''@;'; put 'put ''cC1ib2R5OmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDouMXJlbTtoZWlnaHQ6Y2FsYygxMDAlICsgLjJyZW0pO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEuNTVyZW0sMS40cmVtKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtaGVh''@;'; put 'put ''ZGVye3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aWR0aDozcmVtO21pbi13aWR0aDozcmVtO21hcmdpbi1yaWdodDouNnJlbTttYXJnaW4tdG9wOi4zcmVtO21hcmdpbi1ib3R0b206MH0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGlu''@;'; put 'put ''ZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGV7bWFyZ2luLXRvcDowfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjguOXJlbTttYXJn''@;'; put 'put ''aW4tbGVmdDouNnJlbTttYXJnaW4tdG9wOi4zcmVtfUBrZXlmcmFtZXMgc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdv''@;'; put 'put ''ZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZRZ0FCTUFBQUFBbThBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2FBQUFPZGp5K2VqbEhV''@;'; put 'put ''MVZDQUFBSk1BQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbFFBQUFBVFFBQUFHQm9QcXpyWTIxaGNBQUFDYUFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNREFBQUFEQUFBQUE4RVk0QmpHWndaMjBBQUF3OEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuZ0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFB''@;'; put 'put ''QVNnQUFBTm5NQUFHZ1V4RklnTjJobFlXUUFBRWowQUFBQU5nQUFBRFlMWVlnVWFHaGxZUUFBU1N3QUFBQWhBQUFBSkFkMkJESm9iWFI0QUFCSlVBQUFBb2dBQUFUdXVQSS9GR3h2WTJFQUFFdllBQUFDY2dBQUFucUphbkJ3YldGNGNBQUFUa3dBQUFBZ0FBQUFJQUtFQWVsdVlXMWxBQUJPYkFB''@;'; put 'put ''QUFZSUFBQU5XTGRDRTlYQnZjM1FBQUUvd0FBQURvUUFBQmlHWEZqMktjSEpsY0FBQVU1UUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlVHQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZW''@;'; put 'put ''L3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0JiRmJWRmY3T3VmZSt2LzBMV0VvTENCMERVaGt4VFdXRVNVVkdpV01Gc1ZQRG1FRUhabHVjWTYxUTdCalppREZLSFpxbDZZekREcEUwcUF5TU5zQlFz''@;'; put 'put ''U0t5cHF2T09VZGtZNlloWUZ3SHlEWW0wN25GQ1BMMnZmTis2RjlvdC9HRmo4TzU5OTE3enpuZjdibUZBTWhpTWhaQzV0WFdMVVlCUEQySVl6aitJMUM0aG04M3JVVHBpbTgyTmFCOFJjT0tCczRHL2Nsb09pTmh4Kyt5R0kwSm1HSWVod3JVdVk1ME5GcGxxMHJVaW9nZnlmRFYvR0tjK1FKS0ww''@;'; put 'put ''QlFHN2VTQTJhakJaOGlsbkZRSG9QelpLd2NRUkdHOFdSL2o3dmo3WEZ2ZkJSRC9Jay9HSExrdDRONis3aDMvditQeHo4ZGNvWDNoaHdaK2p4L2pQY09NYkk5N292M0piakkzOHUvdjBrdzJCNXhLN09rbU1oTVQyRzJQa2NvcWdpSHF3aVA2VVRBRjRnSU00a01yaUVLTUlzb1pHNW5zMUpyQ01I''@;'; put 'put ''OStCRm5Qa2dFWnJ5Ri9oY0l3WXVFNENWQ2NaRHcrQVBoY1pRSStETVI0VGdSNFQwaXdta2lndytJRE00UWhhemVwMXd0SnJKU0xNVW9sQklwSVpkS0tYa2NLNXZsMnRPb2tncCtjeVVoZHU3MHhHb25kblppYnljT21FY1VvSllveEFJaWkwVkVFUnJ4ZmE2UVJCSlpKSkZGRXZBVFBNcjViVVFo''@;'; put 'put ''Zm9aTm5QOEVmczc1MjRraTdDUXkyRVVVNEJkRUJydUpBanhIWlBBOFVZQTlSQ0U2aVVMc0o3TG9JckxvSnJMb0liSjRsUkQ4bWhETFRvUjNpQ0w4aVVqem9wWVh0Yng0eTB1d3ZBVExpN2U4ZU11TGx6RXlodm02WEM0bkp6a0tYTFdLR1pyQ0dsZXh0dE5aMDVuTXpDeG1wQkdyY0RlYThEMnNa''@;'; put 'put ''aTN2eHpvMDR3Rm00VUZHdjVNUlBjZEt2c2dLSG1UbGpySml4MW1wMHp6SkdidFp4ZHkzTkxsZmVxL2R3OWVraVhFUHA3cjJVWGV0OGI4R1VhdU5ESFlITG95Y1NqRElsNmVIdkJ1bnppdWU5L3BvM0J3M1h6eVMzcnA0Yzd4NTBKRy8yRGVLY3RPRW1DWVVYeU1jYmlVOGJpTUNsaElSRmZFbzV5''@;'; put 'put ''UnFFRk9EbWhvVUhVU0VIVVJrbFJhcnRGaWx4U290VmxmRk1jTGhCT0Z3a25BNFN3U2NJeUlaS1NOWjExRXlpbHdtWmVTa29tSVZGUmt2NDdtK29oS1hFVVVZU1F3enBZc3BYVTNwTHFmMCtVUyswcjNGRStYRmt6R2x1NXpTK3pYdUxTcHZVV1VzcXZOS1R6V2VxbnN2TWJTdWsyaTlhVlp6RVNi''@;'; put 'put ''S2RSWm54dlRyVEwrYWl6bFJzZVlpVDdTc2VmSG5LOXBaRmpJeVRhN2g3c2xQcjFwR3VJajF1cFZ4TFdVa2JZeGtJeDVqTkUvZ1NUeUZyWXhvT3lQWndkdll5ZE4yOFpROVBOMHgxdUFrVDNhT0p4akYzY1p3bC9GY2NZTHBXVEhDT2txSnFhT0V1OVRRRXJOcjJJbU9SQlBJZmN4L3Q2eVhGbmxF''@;'; put 'put ''TmtxN2JKVm5aSmZza1gzU0xhL0xBVGtraCtWZE9TR241RVA1V002cDE2d1c2Mmd0MThrNlZhdDBoczdTdVZxcmRicElsK2p0ZW9mVzZ5cGRvL2ZvT24xSVczV0RidEl0dWswN2RMZDI2bjd0MFRmMExYMWJqMmlmbnRUMzlTUDl4TUZGYnBncmNXUGRCRmZocm5UVDNOVnV0cnZPTFhBM3VzWHVO''@;'; put 'put ''dmNOZDZlN3l6VzVIN2g3M1FQdXgrNWgxK1kydXlmZDAyNkhlOTd0ZFYzdU5mZW0rNzNyZGUrNFkrNnY3aC91Mys2c1YxL2dSL2hTUDg1UDlGTjhwWi91cS8wY1A4OHY5RGY3Vy94Uy95Mi8zSy8wcS8xYWY1OWY3MXY4STM2amIvZGIvVE4rbDkvajkvbHUvN28vNEEvNXcvNWRmOEtmOGgvNmov''@;'; put 'put ''MjU0RU0yRklmUm9UeE1EbE5EVlpnUlpvVzVvVGJVaFVWaFNiZzkzQkhxdzZxd0p0d1Qxb1dIUW12WUVEYUZMV0ZiNkFpN1EyZllIM3JDRytHdDhIWTRFdnJDeWZCKytDaDhFaUdLb21HOEhVMjZrOXhzUE4rNHhuaER3bWcwYmpQUDJuNS9qbTh3cmpTKzFuaGx3bHBtOXZYR2M0d3JsRDlUNVFy''@;'; put 'put ''anE0eXJFMGE5Y2J1K1RHNHdmNlh4YlBQM0dwOHh6MFRqeDQwbkdVZkdDMXc5K1NuanBzRlpmNVVYWTQzNUwyRjgyWGlMY1dNL3k3STBkclB2TW43VmVNT2xuR2JBN0V2NWV1TUs3ZnBmck04T3lGWFhZSXk1eG84YjEvY3pzOWRsMmZ2dm5PYXphMUNlbE1kTmVXY2VZT2ZWdE5uOFY1Zy8zNTV2''@;'; put 'put ''T1d3eGUxbGU1dE1vQnRnMm1xb2kzNTltdFRxMWJVNnFtYlE2YWRTcFBuTjJ6cC9NYVRPNzNhMDVyOTZjeGc2YTNaUFl1WnFtR1Z1YlUzSzR5SitlSWMzYkFiUFhXbzBPSmZOZHFzQWJiSzllbTJNM0l0WHRBSCtsMldkeU5kcDVRZFg1L3ZRR1hadW5tYlFpK2ZaV3M3K2UrbTIrM1FzdE03L3BJ''@;'; put 'put ''YWUwU1huMkhPUElQRVBaZnpQN2JvdXUxdXczemM1ZnVTYitKYmtxM245UnBmSjNyTTdkN3E3L2d3Zk9WSHpXM3FYZ3Uyc3FzNUs4VGoyN2RpVzdZUExDanZCNXZzUXltSUZxOXJDa2M0OWczLzRpZTNyU3VVZmFHN1hFT3Zjby9sNjFrSDJvamlqRFRleHpvOW5wYnVIdlBrdUljdXZsbjJIWFc4''@;'; put 'put ''YXUxY2kzMjBSN3ZjMWtSMi9uZWx2WStiNWl2ZStyN0g0dnMwTytnZ1A0RGw5MHAvRkRlMVZ1eEQ4bDRERjI0dkhvc0o3YXlmT0tYR2EvbTBXUWVMMnA4RDdjU1Y3UGJsZUVzZHlyZ2hGTnc5VTg5WFU4NVkxWXpORVhUTHUvTXo1c2JIZUdHdTNuZzhiTGpiY1o5eG1mTlM3Q2w3alBjbnhYTWxJ''@;'; put 'put ''Z2haS1ZJaGt1SXk0OTBYOEF0bEtYV0FBQUFBRUFBQUFLQUJ3QUhnQUJSRVpNVkFBSUFBUUFBQUFBLy84QUFBQUFBQUI0Mm1OZ1pySmduTURBeXNEQzFNVVV3Y0RBNEEyaEdlTVlSQmpOZ0h5Z0ZCeXdNeUNCVU85d1B3WUhCZ1hWUDh6Uy80MFpHSmlQTXFvcU1EQk1Cc2t4c1RLdEIxSUtERXdB''@;'; put 'put ''eGxjS05nQUFBSGphdFpOWlVJNVJITVovLzdkOUVTb1U5ZmIyYWROR29oUkY5cVhJdnBTczJiS3YyUnJyRUVORlVzaWVKS01aRTFOVHRodnV1RFZqakw3UGxWdnVEQjNIVjB3enpMaHladDV6M25QT25PZWNlWjdmSDNDaDZ3dEJkSTlVNnBrNDU2NVNyTWNsak1PTmdaUndpenJ1MGtnVHpiVFFK''@;'; put 'put ''aDRTSUlNa1RBWkxuQ1JKcXFSTHBreVZITW1UUWltU0VpUFZlR1c4ZDRreWo1dXQ1aFB6aStWdUJWckJWcWhsczZLc1lWYTZkZC9tSC9sTktYMkh4WTBlMm85cDQ1bjRTbjh4eFNheGtpZ3BraVlaa2lYWmtpc0Zza0UyYSsyWHhsdXRmY2hzTWR2Tno1WmhCVmhCVm9oVGU2aVY5a3RiZlZRdjFI''@;'; put 'put ''UDFWTFdyVnZWSU5hdUhxa2sxcWdaVnIrclVOVldyYWxTMXFsS1Zxa0tWcVRPcVZKM29mTk9aMVpuMC9aT2ozRkhneUhmRTJBZmEvZXcrZGkrN205M28rTnJ4dWVQd2g1QjN5VjFlL2FmbWJuZzdrK0NQV3dTais4LzRoMGJYU1JkY2RYYnVlT0NKRjk3NDRFc3YvT2hOSC9yaVR3Q0I5S00vQXdn''@;'; put 'put ''aVdHYzhTS2NlaWttWVRpUWNHNE9KSUpJb29vbGhDTEhFRVU4Q2lReGxHRWtNSjVrUmpDU0ZWRWFSUmpxakdVTUdtWXpWekdReG5nbE1aQktUbWNKVXBqR2RHV1NUdzB4bWtjdHM1akNYZWN4bkFRdFp4R0pOV2g3NUxLV0FaU3huaFg3L0RuYXltMklPY1p6VGxGTkdCZWM1UnlWVlZIT1JHaTV4''@;'; put 'put ''aGN2VWNwWHIzTlFVL1dUME5nMmFwWHVhcHA5dEZhdTFIZEZzNEd5M04rdFpvL3RkblBqdFZ1RmZITHhBUFp0WjJXTmxMWnNrUm85YjJNNHg3RGdrWFBNWktWRzZBaUs0bzNjZW9HbVdCRjBQOGQxbmlweGh4TEtOdld4bEgzczR3RUZkUy9zNXdsRzlkWmhTVG5HUzE3cWFlckZPdk1SYmZOZ29m''@;'; put 'put ''cHAvengrUXphcm9lTnBqWU1BQ0hJSFFrc0dTYVQwREE5TnVKbFlHaHY4aHpOTC9qWmwyLy8vQ2RJQko4UCtYLzM0Z1BnRElQUTBpZU5xdFZtbDMwMFlVbGJ4bEl4dFphRkZMeDB5Y3B0SElwQlNDQVFOQml1MUN1amhiSzBGcHBUaEo5d1c2MFgxZjhLOTVjdHB6NkRkK1d1OGIyU2FCaEo3MjFC''@;'; put 'put ''LzA3c3k3TTIrYmVXTXlsQ0JqM2E4RVFpemROWWFXbHlpM2VzMm5VeGJOQk9HMmFLNzdsQ3BFZi9VYXZVYWpJVGVzZko2TWdBeFBMcllNMC9CQzF5RlRrUWkzSFVvcHNTbm9YcDB5MDlkYU0yYS9WMmxVS0ZmeDg1UXVCQ3ZYL2J6TVcwMWZVTDJPcVlYQUVsUmlWQW9DRVNmc2FKTm1NTlVlQ1pw''@;'; put 'put ''ai9Sd3o3OVY5QVcrYWthRCt1aDlpUnJDdW45RThvL25RQ29NZ3NNaTBnMENTVWZlM2dzQ2h0QkxZSjFPSTRGbldxL3VVbFM3bHBJczRBakpEaHpKS3dpK3hHV2MzWE1FYTl0aEtQT0F2U0pVR3BXZnpVSHFpS1pvd0VNOWxDd2h5MlEvclZyUVMrRExJQjRJV1ZuM29MQTZ0YmQraHJLSWV6MjRa''@;'; put 'put ''cVNSVE9ReWxLNUZ4NlVhVTJ0Z21zd0VEbEoxMXFFY0pkblhBYTl6TkdCdUNkNkNGTUdCS3VLaGQ3Vld0bmdIRHE3aXorVzd1KzlUZVd2UW51NWcyWFBBUWR5Z3FUUmx4WFhTK0RJdHpTc0tDa3gwdlVSMFpMU1ltQmc1WVRsTllaVmozUTl1OTZKRFNBYlVHK3RNb3RpWHp3V3plb1VFVnAxSVYy''@;'; put 'put ''b3dXSFJwU0lBcEJoN3lydkJ4QXVnRU44bWdGbzBHTUhCckdOaU02SlFJWmFNQXVEWG1oYUlhQ2hwQTBoMGJVMHBvZlp6WVhneWthM0pLM0hScFZTOHYrMG1veWFlVXhQNmJuRDZ2WUdQYlcvWGg0R0FXTVhCcTIrY3ppSkx2eElmNE00a1BtSkNxUkx0VDltSk9IYU4wbTZzdG1aL01TeXpyWVN2''@;'; put 'put ''UzhCRmVCWndKRVVvUC9OY3p1TGRVQkJZd05ZMHdpV3g0WkYxdW1hZXBhalNrak5sS1ZOWitHcFNzcU5JREQxdy9Eb1N0Q21QOXpkTlEwaGd6WGJZYng0WnhOZDJ6ck9OSTBqdGpHYkljbVZHeXluRVNlV1I1UmNacmxZeXJPc0h4Y3hWbVdSMVdjWTJtcHVJZmxFeXJ1WmZta2l2dFlQcU5rSisr''@;'; put 'put ''VUM1RmhLWXBrM3VBTDR0RHNMdVZrVjNrelVkcTdsTk5kNWExRWVVd1pOR2ovaC9pZVFuekg0SmRBZkN6emlJL2xjY1RIVWlJK2xsT0lqMlVCOGJHY1Jud3NuMFo4TEdjUUgwdWxSRmtmVTBmQjdHZ29QSGJCMDZYRTFWTjhWb3VLSEpzYzNNSVR1QUExY1VBVlpWU1MzQkVmeWJBNCtybHVhYzFK''@;'; put 'put ''T2pFYlo4MkppbzlHeGdFK3V6c3pENnRQS25GYSsvc2NlR2JsWVNPNG5mc2E1M2xqOGcrRGY0c1haU2srYVU1d2NLZVFBSGk4djhPNEZWSEpvZE9xZUtUczBQdy9VWEdDRzZDZlFVMk15WUlvaWhyZmZPVHlTck5aa3pXMENoOVBCRG9yMnNHOGFVNk1JNlVsdEtoSkdnRXRnNjVaMERUcTgreXRa''@;'; put 'put ''bEVLVVc1aXY3TjdLYUtZN0VVWnpJQXBLT1Ntc2JEczc2UkVXbGc3cWVuMDBjRGxSdHFMbml3MVcxWnhoYjBINzJQSXpTeDVOMUpldUNrcDdVV2JVS2U4eUFJT3VaRTl1Q2FDVzJqdnNvcGlTbGlvSWo0SWJRWDc3V05FSmkwemd5NkJJbVJ4c3JJUDdZb2RPYUtDZGdMZmV0SXE3OXRDN2M5MThp''@;'; put 'put ''QXdtNTF1NTBHV2thTHpYUlgxYW4xVjF0Z29WNi9jVFI4SDA4NndzZVlYUlJsUExudmZuaFRzVjZjRXVRSkdWM2EvN2tueDlqdlc3VXBKUHRzWGRubmlkVW9WOGwrQUIwUHVsUGNpR2tXUnMxaWxFYyt2VzNneVJUa294a1Z6SEJmMDBoN3RpbFhmbzEzWWQrMmpWbHhXVkxJZlpkQlZkTlp1d2pj''@;'; put 'put ''K1h3anFRQ29LV3FRaVZuZzZaRDZiblpyd3NaUzRMRVhjczJUWFJmUWRQQ0VkNHI4NHhMWC82OXh5Rk55aXloSmRhTmNKeVFkdEh5dm9yU1c3azRjcVJtZnR2R3hub2gxSk4rZ2FncDVJTGpqK1h1QXVqeFhwRk83ejh3Zk1YOEYyNXZnWW5RYStxdWdNeEJMbnJZSUVpeXJlMGs2bVhsQjhoR2tK''@;'; put 'put ''OEVYVlFyTUNlQW5BWlBDeWFwbDZwZzZnWjVhWlV3RllZUTZEVmVZd1dHTU9nM1cxZzY1M0dlZ1ZJRk9qVjlXT21jejVRTWxjd0R5VDBUWG1hWFNkZVJxOXhqeU5ickJORCtCMXRzbmdEYmJKSUdTYkRDTG1WQUUybU1PZ3dSd0dtOHhoc0tYOWNvRzJ0VitNM3RSK01YcEwrOFhvYmUwWG8zZTBY''@;'; put 'put ''NHplMVg0eGVrLzd4ZWg5NVBoY3Q0QWY2QkZkQlB3d2daY0FQK0trNjlFQ1JqZnhqTFk1dHhMSW5JODF4Mnh6UHNIaTg5MWRQOVVqdmVLekJQS0t6eFBJOU52WXAwMzRJb0ZNK0RLQlRQZ0szSEozdjYvMVNOTy9TU0RUdjAwZzA3L0R5amJoK3dReTRZY0VNdUZIY0M5MDkvdEpqelQ5NXdReS9a''@;'; put 'put ''Y0VNdjFYckd3VGZrc2dFMzVQSUJQdXFKMitUS3J6WjlXMXFYZUwwbFAxMjUxMzJQa2JaVE82TEFBQUFBRUFBZi8vQUE5NDJyVjlDWGhiVjVub09lZEt1cElsMmI1YUxjdWJyTlhXYW11enZNalhTN3d2Y2J6RlNSeG5jNXkwS1YzU2xpNGhwTFFORkFxVUFXWllocjR1MEtGTVM1SzJkS0h0RkNo''@;'; put 'put ''UTJxSExERytBZWNNSDVRMHpMRy9ZQmpvd2JYMDkvem4zWGxtMjdLYndmUysxSlB2cXJQLzU5K1VVbGFIRnRTVCtGT2RHSEtwQWR1UkNYdFNFMGlpSHV0QVFjb21PM254bmV6YVRiQTc2NnF1ckhFS2xRVU5RV1NLczlRZ2UzcDYwZSszSnREZWRUUFBzazRkZjFhZjBHZjJrMzhDVHRQcTcwb1ox''@;'; put 'put ''eUNiVCtGUFNzN2pyUDN0NjcrdnR2ZSsrM2thUHA3ZTM5MGl2NTliN2pqUjZqbmp1dSs4K3o1RWp0dzRNM0hkMG9PRkY3bWQ5SHI4SGZtNDYxamd3NERzSXZ3MTRPbnNiajl6UTVvenZ2UExLQjYrOGNtZDh4UlAzd0E5Q0JFMnYvUjZkSStmWTN2eGlJOElZTFNLRXlrY1JJZHlTQm5PY2t4dlRh''@;'; put 'put ''RFFWbW5LL1VLbmxuV0Zya3ZNNkF1bFVKdG5xc050MDN2M0Q1b1RHN2JaWnE2dXQ1SnhrZWRGdHM3amRGcHNib2JVMU5JZ2Z4V1BrazVXTnFBeWhTZzdlSDBGMDNpQzhYUWZ6dWxFOXVtSDB2SGZuYmpGVW9TTkl5eEZNRUY0MllvT2hmTFM4MHN6eHZIN1JWRWIwZW1GVWd3bXBJR051TVVBZnND''@;'; put 'put ''K1JuajlhMms5cHVDRFdJVlJmVjFzRDA3aXJYVlZPV0xCVktQemphOE9ZVC9KZTNwdGxyMnlTdlpJOGUvSDBTL3liekkzbUcyTnRzYnZnZGEzNTJzdzd6ZGNwZjkxZ2Z2aXV6RjM0YTk5TlB3Yi8wdDlOUHc3LzB0OEZTTWJXSGlVUjhnZmtRU0VVUjUxaUx1YjMxZFZXdTV3MnM2bk1ZT2FJRGlP''@;'; put 'put ''T2pDRENrWnNSUnZnV0NtYTBCSEJ4b3JHbXBxWjRVOXhoRnl4YTNoSDJsV1BBa1hRTUI3TU9weERENlZRZVp3RlpIRTRlbmdsMTJJNGN6blE1ZkdUU3FVQlFJSkhVa1IxaXo4bG9hT2Z4b3dkYTkrYkVLeFpEdnBubzVlK1E5b3M3T2thd2VXWjA2dWE1Tk5mZHkyY2pyVHNyY1dYMXJxSGtiRnJY''@;'; put 'put ''MldXY2JmVkdlT2xOOSs1SlhKTzIvWjRmYnBXeUk2bVdEb2YwSnF4TmkrSnIvMFgrbFh3Sk1NVUtweFpISGVpRjBmTlZjSEpoSTlhV1lhelQ0aFdrUTNxRFRuOE1hVFJvaVdDS1NXWTRFbTdKeEJPT3ErREczS1BuZzlBbC9wWmRFRFJsL2ZnbEUrWjVKdzlubnR5aUJ5SFFsblpEVy9kYVdCQURp''@;'; put 'put ''VVJEZzgyR1VLSWowWjVKTmNRYllxR0FyZDVXVjExbHRRaVZzSm55UURsdkQxdGs0Q1piQWFhMmN1ekZTZXkxVUtCNkczVjJteU9KTm4yZngrdmYvZlZBTURRWWlRN0NleFIvcUZOcTdyd20xeDZKdExXSDhkUkFLRGdZbGIrS3RkR0h1UWhlakU3RVczWkdvNU9KbG9rbzNyVTZoVDg0a000TURt''@;'; put 'put ''VFRBOUx4NkVSTFlpSVduWXkzVEVZVEE1bjBJUDBLOXNlaHByWGZreFBrTVlCOUdQaFBYdXlJUi8xMU5XNlgwNERMT0ZMUGtJcGlQbDRDTW5hTWFvdXdLaEpwYUlpa0k2bUdjRU56dUZFSG1LVU42cnlOZEUvWjRvM0JOODVNMXFuam5ZanV6Q252MHBJTkJPSFBPcHdraWFWOUp6dVA1Tzd4MUVY''@;'; put 'put ''R0U1SGg4TnhjNXNwSVV5YVJ2RnI2ZEZkdC9VUmZyamswZmpwL3RubW9tVCt3M0xLUXUya2dPdWlMaklUREk4MzVVWi80VHZGQTFmSGhhOGp4OWxoTlY2Z2hHMjd1V2owM2Q4dFkxLzZRNkFWaUFINkJQa0UraVV3b09ucmVBWWhpcEN5Sm5TOEdKS2hFOU05NStCTXZVdElaWDNqRTdpT3dIV3VC''@;'; put 'put ''STFWZzcyeDVsU0E0eS9rZy9vOUQzc29xcCtBOWxJSFcrYlU1SENOUHdkaTZoMDFhbkFnek5wWjFBdm5ZblB6bkw3bmtzSGR1NFp4MzE0OXZ1T0hIdS8yN3YzN1ZEeTRFWUNLZzV6bGNwL2JUUVQ4bkk3YXNETERZdVlVNTcySG9mTXVGSDF6MWRlakh1dE4rSGZnbTRIMWZRck5JRkx2OEdKUEpI''@;'; put 'put ''ZDJ4UnBkTnEwZDRGOVlpYm9URFdJT1JGcU1WSGRacXlSSkZhTzBZN0c0V3pRd1BaZEpOd2RvYU4wK3hFMWJhalhuZ0JuQnFRZmdqbStuR3dZRDhXN0xWNmFqSHdTSUlaTExBSnRoenV3MDZWV0NIMDhGK1o3M2hQeWRqM1Y4MkczVGVpb1p5cmNiTWE4cWMwWEFrWmkvVDhHYXR4dExzMHhuTXdL''@;'; put 'put ''ejB1c3BLTG1UVGFzMDhWeWFFZFJHbkkrd280M2l6VHVNSU9ZdzZ2ZG1BYnpMcmExcWFhOHhWUEdmU2E0eThXUkFzRmlOdjFPaE5YRmxqVFhOTGpkNXMxanRhNDZaeXJzSEltWFJhRTE4bUVHZ2ltSGlUVm1maXloc3MrbmlyUTIrbUI0djYwSEZTVGxMSWlBS0FFeG9PYTJZQmw0RXpZQTR0QTdu''@;'; put 'put ''VG85ZmdjY2JESzNWOGRSaDdxZlJNVXltYUpPWGZ6RC8zWFA2Yk9QNU4rZ3NkYjNMdE5Ib003VVRseUNrQzZhSkJGYVdBTUh3V2lqMkE4NDNySW8yZkRKcXRJTkdjTmZXaDQ5RUVGVzMrdWxxeGxZN1ZobjZMTzNBTXFMRkt0RE5rbkYxSFJxR1NvYUxIN21uRG5MU0tZMTFzUDhNZ1l6OEg4eHVw''@;'; put 'put ''dGtDZkFKZkQySW5wUVJ0Um1ZK0RBeTZXcUVjVWFXb3FTRks4OXB1MVIvSEh5VTloWGtFc3A0T0M1TUJYeXhOU1ZvVW5CNlM3QjhoUDMzd1pNZm5hQWJ6aUdIa1MyRnM5aW9oTmdGaHN4ekpYd0NEWTJRSXFnWjRxNnl2cnFoeU1EK3BnSVpyTmZJNmtVekhzYmFSRUFnd0E0M2NQRHI1N2F1cjA0''@;'; put 'put ''T0RwcWZ6QlRPWmdQbjhva3ptVU4rMjlaMlhsN3IxNzcxNVp1V2R2NTlqWnVkbjNqbzZlblpzN084WmdVQTN2YjRDODF5RzNXQVZIeVFHOFJtU3VqUUUveHdRckF4MGZ6Q1lGNzVPMzFENllFc21CMlphVHExT0k5VytCVGVsaFB5N1VMQWFOWmJBZHdBWkNSaGc0R2J1akNzc2lZakpHY1BxQ0dy''@;'; put 'put ''NHFuUFZUL2tWWHp3Y0xISzRDdy9tMHdLbjBOdTFvdW1KbkxIcjljT2VoM05qTXQvQkpxYW50WC9LWHBwcDZBNWY3eGY3VVlxN3YxTkNEOGhtR0FKNWFtRCtNdXNWT2R6WE01UU9DaGhYQU1rQ1NRd3NDY29uak5FdUFvTEFZa0pkTGxLYWRqSnpEcU5ubjkvajlQTytDazZhY0k5bktXR3NZcDUy''@;'; put 'put ''dEdYbU5PajZZVWJtd0F2eFhUa1dpdnFQNXhGajQwTnlPZ2JGOXpjT1J6RUpUZVBIOStTUHRBMjJkVTUyWDlKcDYycHVUV1g5UFU3NjNFL2QzK3ZPK2RDcDBLakdYN3RvbGxNLzJaZmVtR0Q2RTRDMEY4QzlEWmhRVm0wMFlVSEJFcDRWOVlBVDY2bEVBSVJPbEZab3hvOUZvTmdJTkM1Wkt1bDYv''@;'; put 'put ''SjRpVEF0Vll2V2tCNDl1a3p4dnd6UGlsbDRyU3p4OXN3eTlJdVk0SGY0WnZrTTdLNTlRR2NITENQQTFVNzNFQWV4TXFPYUpCR0U0SzNwR0dBWWtzeXBKN0k1QWFVSDJqWUEyVUFFaytQMHBWZkthQWxqOStWNlM1ZWFVOVBoR0pUQ1FtUjFzTitJUFNRM3pmWE9keVovNUVyNms5R1k4bHcyUFJ5''@;'; put 'put ''RkFvVzRXWHVsNXZTUi9JOTZ5ME0xaDB3aHI5Y0padTBPTjd4VzRnSW80RXFvaFdRMFowd0dJMFdrNnpnZ3BpbEljRnF0eWlwZ2FobXFhYWtLOFJPbGQ3L1FFOUtNUklXUkxsSUJUTG5IeUFra3N0aGo4czZnYm9rU2J4ZTQ1MmRaM29QWDFtOE5UWU8yWjlvM081L1pucXkzcjlFNUhZUkx6L3NM''@;'; put 'put ''bHkzeEIrTUhPd08zK3M2OGs3Vi83bXdLN1c0YW5iNTJ6cGJ1bE1mTHc1UHR3MDNyVjdXWVp6QjJ6RXdPaXBYcXdCR1lJWk5WRStoSm51RHRvdmFEY2NMQTk3MGg0N01JaW5wSGZqbDZUdkRKT3J1bHBXMzBQMWlSVEFvWWJCSVF6ajlZczlOaDBCYmp2Q0Z3RkI0UnA2QUFLR3MySmNJeEtoY0lo''@;'; put 'put ''MFJOcFRyVFhobW1ZWkdoRURaV09VZTJRMnFSUUtmQXF3a0ZtSlUvazdXRTRZWi9uSjVUMnp2WjNEM2NjNk9vOTFqN1gzenZaYzBkYzBFbytNUkVCN2lJK0VXbllsVXRPUnlLNTBZbGVMcVdVKzI3WGY3cGpMcHFaanNabFVidGJtMk4rWm5XL0J0M3R5Zmw5SFkyT0hMNUJySU5JRlh6NFE2dlpp''@;'; put 'put ''N08wT0JmSSt0Tlg1MTFYQzBSdjBZRDhRMkxvV0NGbExWb0FVT05ndnh6bEdpNlNGZXY2TkRYVEhBYStmbmI5RFBuNVEwU25DZG1INmh3SUJDNFhGT3ZQODNLYVQ3Mkw0c0lPZGZBdkRBdkxreHBPWHNVRTZRMDlleGdGNUQweW00TmRCZnNDeVJzOUhRVk55VXFiT1ZpckkxcHRXdHQ3Y1ZGREJk''@;'; put 'put ''OENrVm9xZkw0Z1drd2toazlQa3NGUXlRYVJUTkExVkVKRXRoSkpOK2NSMzFsaXBkTExXU0hPcW5BSjdqOGxhL0RyWWV4V3dEaDRKeUlTL2dBd1hNSDRjZitGOE1reHhONHNXc1VTbUFYZDFEK3NJNkZQV3ROOXV4dllzZms2NkFaL0ZYWmxYODA4L25XZjc3RU5mSmVYNFh3QmJlZFFvMWxNY3Ay''@;'; put 'put ''WWUyRTRjbVZWWVB1R29MbEJKT1Q3bEV2Uy9QdnozVXBxOS9pVi9aeDdtSEVPTHhLck95Y0djMlNoT2ErM2FNWHdXNW54T3luMGFabncxOHlxZDA3MzJlL3d0d0k4cTVFTlpNZVV3R1NtTHhKVE5jekR4NlNLWlF4bStGbXMwVHMyWXkrWHl1YnorS2w5UVJ4ZWl5czExcnM1TXVXSTUvMHo3M3FT''@;'; put 'put ''dnB5azc3dy92Tzl1K21FcnViZTh4cStDOVdodnM4RFoyK3BMeDVwTXRNOG5JenB6eFBVV21OVjFuWk8xMmJnZTVGM1dqQ1ZqTCtUckFBYUhSUS9SY2c0Vm85SjBkWUdkeUkrNzFad2IxMllMY09HUTBFQTNJQVIzbHlyb3kwQzM1dzBoaGRzQkU5SHB1Q1RZbzZLbk5WZy90bzJCY2E3QmhIcjNk''@;'; put 'put ''VGszVU5nU1k2UTJjZnVXaW5iV0FxUzFVSm5CSXU3SjlMNTdYelNPZGpsOWkzU2NYd01hckVrV0V4QWx4ZkdnQWdKRVBCSm9DdmtEQXhMdEx0Sm5HUUxDSU9sc2R6cXlUWnlaYzYwYm1sR3hsZG9HWHF0SE16cU9QSFVuY2YvN1lWVis1NHNpRFI1TlRzV2ludm02MkpUN2MzSE84dlhYUVltNHZp''@;'; put 'put ''NFRxNjlvRGk1L1p1L3pGbGYxMzdjc2Z6bHJhMzlFZjNHTWc3ZW40emtSUDZ1cWpEeDY1L0N0WEh2enMwc1JsR2JCREU1R0paUC9KdnBpM1Y5djZUKzZHUUhpaGQvWmo4eXZubHZkK1pySEc0L1kzdkxZOGFpdEw1ek1McWJZQmR1WU44UFoxNFBzOFNQS3dHREpnQU13SVlDQ2dwQWFrT0JXcllG''@;'; put 'put ''UlFqVXF2MTVmcHkyUVZ1UXFrT005TTJxQVJrNngwN2VBQWp0T2Z3L2ZmZjg4OTVOenExS3Y0akhRR2dMNGZ4ajhHNDFlQ3B0V0l1c1IyNFB3d2d3Nm9EdVNqZGhuT1ZuRVE4VmpXeE9sYzdtcUw0S212Ym5RM1Zqa0VsOFVWYWRBelJYaWpBUEJncXVxQXptTzNLcjhJKzNGcmRpNlJqTGYzcFJZ''@;'; put 'put ''N3BLL2hVTWZvZU5kUGZ0TTNOOWYzRzNJdU10R1NIbmRXTDdabDVoTDQxcjUwcXUvWDBxUGpIUjFqMG04cEg2SHk2d05BcDdVb0pvYXJYY1l5aWlRaktydDJiSEJod1lOYVZCUHdCNmdMUzdOKy9uenBtZVBzdlFjTzNMczRjS1lsRXJva04zN0x4TVF0NDdsTFFwR1dNd01tT0xtbGV3OW1XeU5O''@;'; put 'put ''aWFuM1RrNitieXJSSEcxcGczT2hjSHVFNlZkMlpyVVV3TVFNY2dWTUpxUE5ZclNiN0lFRzZ0dXhxbGdaeGxrRi9TaEVmbjdKZll1TDkxM3k4NS9QM3pZK2Z0djgvZVRjN3I4K2ZQZ3p1enVHMzdOcjEwM0RxODh4K1Q4Sjg4VmdQaU9LaXhHVksxSmRTck1Jb3F1OFdCdG1Wb1pSOW5pQmFtV2wv''@;'; put 'put ''RkdRWDNmZzY2VDM0VHNsRC80UnVlcTF2Q1Ixa1hOZGhmSFRNTDRCTllrQmRYeks2ZGlvcW9vQlh4aVFnWTdNZUI0YjJjdkdQU1hkMG9QL25RMzZWWFZNZWw1M3dubDVVRnBzQmEwTGNmV0VhTFJNaWRkcUVFTXVaZ003cUNiS1dDeG9HNkFSQnJ5eW1lY1JOaEx2cHNOTGUvRUhzTFhsanVGRmRv''@;'; put 'put ''RERkOEFCWHQ4bEgyRDZSTk4zOEdIcHYrTTUrUWpiRWxIMUNQMmU4Nml3NTZzWVRJT2lUMUZYbDBGSHB2dWxmcWtLdEJtV21PNFdYa2w0SjFlSjBxSW80bnNwT2VGdXVtM3BKZHdxajRzK3pIeXNWdXJBV0xkNVpITVJESjVKVWFTOXFKMEVzdWNaYUN0UUxHTG1CY05vcGl5VEpRNlF5Y25BTHFC''@;'; put 'put ''S20xOEQzWXMwWlZnR0piTUhUelpFblh0Ynd2MEJFYXd6VTNjeUhzMUZkcmJpZjVSaWZaZDB3aHo3WUtncjJENGJ4RnFEWGt1WWRNUE04OGJKbmxPcnhTTEwwNlNBa3dhZ0NSQmQrMFI4NmF6MEtrNU5TNys3R3RZcm5RU2Qrem5wL1hqazFFc01mdjB3TG9GeHRWUW5aWXVtb3pFNmtFR25SVnBC''@;'; put 'put ''b0l2MkE1NGtCVUtrWHJFTFVHNzFRNncvcGFGZnJLK0wzMkpkTmtGZGx3R01FcTlnZ0JQWUwySWQxb21pOUxyME9sMldEZi9INmhRSnNzOS9Wc2Y5UzRiTGRhS2JKNlJrVkV0aFZBekw4c3BqUGc0akR0RmplWUlNd25pRHEwOVEva3R4K0hmL1AreHFtZW5zdi92QWdidjNqOTg4TVhIenVJeTRD''@;'; put 'put ''c3M1ZU8vUzBtY1BkazY5YjNMeXZWTXkzako1UUhIMklPek5CSHdITEdOWUJaQXFoNm1iWk4yUkQxc3NOOXNzWm51NVhRZzA2S2dUMzFQZ1BYYXZ5cGFGU1Z3OWNHVlB6NVVELzBmRUZmTW5Uc3kvVE02MUhjNkRISk53eDh6ZzRLejBmREVNYkdCVjVzUU05YXRyaVE3TVBPYUI1RENIaDlmTnAy''@;'; put 'put ''TGZ0dDF1RDltRHNVQ1FNbUdRNUU1K2d6U0dGWkZzTU92Y0pJcko3eUpOWTAwNzQxZDJMYW93V3B1NHB1bTZCbDhCU0xqcTJrUnZZa2NnWEFDVzlQMzhjdUpZOEZDcUdGeEY4Q3FIOVlEOEpOUUJwNXFteTZDS0tPeE5JWGVmenlNSVZzcDdZTFZXYnhCc1lJRkJUcHRVWUVZT1hqYi82TWpEejRr''@;'; put 'put ''TWRGTHNaUVkyZk12VjVSTDhZK0Q3TklXYzdFZDhqVVRJVXloSTVaWERUdTFpUXJWS0ZWVFV5VnNrcjRJbzRJdjRLS2dvalNzcVNpQ29RbXVkK3ptY0NrNzk4djNwMEpGYjB4Tk5lNDllZlZuSFNzOHRKMExoNDluWVVOT2VvMWRlbVRzeFlzeWxXbzk0TzcyWnJpcjM5SGgyVC9KUWEzUGMyK1Zy''@;'; put 'put ''YVhPNWQrL01MaVJsUGhnRkdBMHpIVVAyMVJUTVN0bTVvcWphMkF0MnBSZW94ZjByVXZNckVjektMb1dPNXdBL3prSi9PL0tJZFlwREgrUGlyZG1SemVhenFhS1k4cTJOTEF6WG5oa1Vzd3p6eE1FelU2YVJXMmJ3SjZXVnZ1TWRIY2Y3Nkc4enQ0eklhMVgxSVIyZFM4dnNZT0NhQ3NPVXVRNm8v''@;'; put 'put ''RExYb1h3TStBYjV1dlFQQS9DRFRkaEV1UzY4N2lJSFlDdy9tRWthUmtzd1ZobmwrOEFvYUZpSmlYRzJlZUFVbGtvdGxhSkpONlkvbk5lSXZmNmhiend6K0pXdkQvMjg1eHZmN0lIaG5pTDk3RFZGZHE5K1hsNG55RkJ5TStOdHdCc05PaGdhanA2eW4vSlJMT09heFdJUktGeGhsVENrZ1kyT1Qy''@;'; put 'put ''SGQ1STkrTklsNTZiOG5mL1RxSko2WDdzYys2UWQ0SHUrR2Q1ODh0Z1hHUGdOajYxR3RXSzNqZ0FnTERFN3hCRmdFNmdsUXhvUWpDMG0vMlBuVG4wOUkvNjhQVitHL2tqNFBveDJYZmtiSGFvZXhSRlh1VTNpdXU5a0t2b1dDbTgwaXNCVm5aUmNEQ1A5Mi9JQzBGNzhoVGVNTHE2OG5TWGRYY3ZX''@;'; put 'put ''cnN1eWZXdnNnYmlNL2ZKdFdYQklRQzE1VFB6MTM3cWZraDYyclZ1cDdYWHRqN1ZGODF6WStVQTUwVyswQVhwSmRvQmkxd0h4VmhmbGsvOXd5b21vWjlkZlMrZEQ2ZkU1ZyttbDR0Y0IwUCswaHYyeDk4eHdkUG9NL2d4K1VjZXVDN2tpLzZBRHV6cnlXTURQMTRGNnRlRmd1NkZDL05RbnNnZmQr''@;'; put 'put ''TDNOWCswMDM1MEFLL2VyVlYrbWFwYlYza2wxcjUyRzZCamJHTmo1ak9nUVBBQ1JrWnZXQm5UbjVYTHVKaU40a0wwTmZKK3RyZ3A1RDhNM1ZGaERIOHF4WnA3ZTc5OFlzK1VyRmgyWCsxZ3I2d3krSWdLb0I0M2FLNDFXWTB6aEJJQWlneGRmVmFqbWRWa1BOV0syT2FHVnZKZFhpWFl4V1J2Vllw''@;'; put 'put ''MU9WTGplWW1PNkEyKytwaDVGY1ByL1hhZ0E0SVljZEFGWHM2bUsyRWJWd0xhQitxZUV3ZlBwRTNuMGl1K3VTekdMN3hOTEF6b0ZwMS80RjF5WGxzNU05dXljNmlIRE5RZWtidXlLdGUwZGFKeUwxOXI1OXNXU3I1TTYzVFZmM3RDYTc1SmcweVlOOHNZQUYwaTEyVnBRUnJZYnh5Y3JSZ2x2R3hY''@;'; put 'put ''U29EYzQ1cXhVaGE2UFY0M1pCVDJEYm01eHpRWXBUUXJGUFRoVzlIenVSejUvbzdUNWNuOC9YSCs0T3pTUVNNOG4wZEN3Mm5TYkM0STFqWTZjR085UEw1RW5wMzlLZFVrM2JvYzdPZzIzVTdYMHdDMmVVQUhqL0J1Qzl0UTNpMnQ0R2NieWxEZkxiR3dZSGJ4aEtMdnJEN3FGZ2RsODZ2UzhiR25h''@;'; put 'put ''SC9mdFRwcUYzall5Y0dncjVtbXNiY2djN09nN2xQSFhOL2laNjlobUFtMmNkYmdMSDRFYWh4UURIVkd2bHJIbm16MU1VN0dLNFdRSmVnY0lOS3dlOXZrcUJiSmJMSGdxdVhoVjROekdJSlJuMHlKT3JPNWJUbllPbnhzWnVCT0JoOStwVldRcXhUTnZCenM1RDFGNEN1QkVmd00ySjZxaVZDVHlH''@;'; put 'put ''STB3UUUwNURsZ3ZMYzQzcWl2U0hxaXFFcXVxcWF0M1Y4SmNEREFPNlVwOE1zV0l0d2xOSGtrVEhlMkN4K01nQmQ3RGgrdmIrNndaM1hMTmo3QjBkMHFnMk01dWF1TFFNWDZzN01CbjExVFo3bzBPbnhrWnZIQnkrZFNFOTM0TC9kbm5uMUJGR2Z5QVA4QlI1QmFUVkhyR3NBdXUwbFJqcHlJanNE''@;'; put 'put ''S2xCT3AxMkNUU0dLbVp3bzBYUWZtVEhHOHRRcUFabFZ3ZDB0bEw2NVlKWTV2V3kyQlhQdTJWZTU2WDhoem1HbVBOWVozL3MxbHZ6TXpQOXFWU2t3UkdvOWhGdFRrcmhiK2NHMjBjOE1VZXpSNmIxK05vTXFRRVkwbGo4a0xpanJwTG90SW9mRTJnWkdKNk9yRkQ2aG9sQnNhRnVHVmZCbVdsRll3''@;'; put 'put ''MGdPK1Z3T0l4UUgvRDdmWlRHc2FDUUM3TXFNaHU4bVlBRjZSSXNxT20rY3FqelNsOU53MkxMd3JHNkZiSDMwcTZ1UzN0N2p0YmRPcHRJekthVDAvSDRkSkpvcGRiZWxmWkFmV3V0Wisvay9uUzdlTVhBaml2RVhQcVF0Q2N4bHdYN3ZtVXVEZEJuY0IrSHR6OEFIdHRwcE1JaSs3WVpEb095eHJ4''@;'; put 'put ''dHJpSnpERlFKd2VhMVVmdVQwanFBVW5IWENBcTU0OHNXV3ZJVCtlaElPSiszTDdZUm9YVlBUbm9FOS9kTUIzcUQwbU5BMTYrRk13eWUzZkQrY2ZJVmtORVYxQUlzdUZPcjZNRUpvNm8xWFZGdU5qRjNxWGFUdTVRSEViTGI1YkpZNEFXOGhGemlzZ2pWMVlMRnRiejZCb3kvOXRUYUJQb0lHOTlO''@;'; put 'put ''Y2I0QytISTUxc0JwYVl0bTRqaUdKeHJnY2hxTld6UEdYTFJ1VTdYVFlSWFlySHlKazFZNUtxWTg2Ynd6eWdyZUVhMG9NL3NGdHpmZm4xcGZ5cHMvTWZCcExkOVVUektyTDdRTk0zZ0RTd0RxZXhKRzk0b05CZzNRRzZleVc3b2FWVDhSckV6YVl5cm9HQzhGMkZiL1lPTEx5L2s4YnByQ1ZkTFBm''@;'; put 'put ''blgwZlFET1doeVY1UmM5bnZmRHVLcmRXMWxpOTQ0QmxJQlZ5RzI1SU9DeUY2WEVsb1pxMmU3VmFnVkdYTG9sTUFaMU90ZW9oc2I5NUhQM29rYXZZUFZhdlRZRFVGSFIwZXMyL0pLMHkzZ0w3K1MrNlZoK3FFMmN5Zy9TdDd4MUt0MCtaNi9jMzFtRUVoUDU5VStpSFd1S2Q2WkFKQlZ3VXRpRWs4''@;'; put 'put ''S2ZnWlAydDRHVDJsbUdrZ3FmSElSNU45bWJyb3ZhbTQ2M3RqZGZPelU4ZkdwdzhNYmg0UnNITTR2WjdHSW1TOSt6cHBGM0RRMmRvaElHNUV5dS9YQXVkNmk5L1ZDdS9WQzd2SjVwNERsNVdFK0piQmFLWmZPNldLWUFzdUtMeW1ZVk1IK1diSlorVFM0c2w4aG1LZzluUUI0S1c4aERvVWdlcm92''@;'; put 'put ''Q1Vaa3ZiaWNQaFl0eHdyZVFoOXJWU1N5c0M4UmxLYlJCSG1JMERmaTFBR3MxMFN3OE9UcXI0dGU2SmdIQ1E3REpPcmNsazdRWE1PcHZUZ3kwNzAwQ0diN1NrNHRQcDZVZkVlMGwxSTREM2VScEdET3dwYjNwMm14dkJwRGZGeTYyTnpQRjVxWkRrVXpVMmlUczJMNTlWZFN6YnlFOTJEZXdmekkr''@;'; put 'put ''MVJvLzBGeS9jNlNscjJ0bmRqRGNNcHN5TmZsaXZTMytZTlR1N3NzMDkvcnIzWW1XcUsreHFWcnc1Y0xoL29ETUkveXd4aW55VVpEbmNUSGl4RHEyYjhMZFRGa2lXYVRPVTRDQlRxZHFBRXh1V2h1cDRQVExlcWlnNUgwQVI2SnUvRXdXVDlsYXExUDlNelA1OTd6SFYyMnBOOW9yaFpGMlBKUDcw''@;'; put 'put ''SWR5MGdPZVpsTVo0MDB3NzM4UnJVelBITTB1R2RFQ2Q2R3pVZjBJVWVKQ2FwS0dIZG05TmkvemNSYnBSWlRkeWxhNWdQK0xrbkdiU3RSdzNHOEFCUU5SNHpIcEtVYlVlRmplTCtqVnhFYTBhaDZFYXFtcHVvRmdZUmFGVlRZdDNUc2VmMnpIcTFrUW5pUDRVU3BETUxBOXhGbWhmNm1OS3J5MWpl''@;'; put 'put ''cnR2ZTB2TWg5NWYrK0QrUTkrS0E4alR1Q0g2R3YxRFh5L05GK3dwZkVmWVd5V2QxUEdhN0NHc2pscTZjRFlIQ2x5Z0lLdFN2SEVBeGFQTlpoMFpwTzhGWis3OTk3aGIzMWwrTk9mSG43bXVlOS9IK3RYWDN4eFZmb2pIYmR1Yll5NFlGeUJ3dHFvSjdCa2pNRUFWb1l1b0tHYlV6eWJGcHVYb2FH''@;'; put 'put ''TWhkMllZN3NveC94aGYyV3R0N2FwdlA1Zis1LzVVdCt2cXNheWp3alpDcWVyajVpbEx2enM2cE9kV1N6dkJkZ25mZ25tM01hT0ZkN2FqczNnUHVsWmZJZjBGQjZRanJYZ1QzYTBTQ3NkYk56dzJoNjhsendCSEFWZzVHSnlvQkxqb1VhV1ZRUU41aFdDeFdoU2NGQXhwNG5oTGd6c1AwMTFLWnE5''@;'; put 'put ''NlN3bmRxY2NGT0ZwR0p6SHBsbC9JdHNXOTgrT2FEdnlMdXp6Qjd6WWxlL1EzaG5xVDM4d0ZXMkpwVzdQOUFmMWNYMU5vdm1PZU5aa3ppUStIRTdVNk9Nd3kyVnJqNks3dDdHSnFZUzlMSlZTa29Lby8ya1Azcy9XSGhMOWVtYkxDbUJSTm1JOHVKNVd0MFJCTlVtelpRbHZDenRCYkFUbGdINld4''@;'; put 'put ''dXF6ZGFRV0E5YmJHM1h3Q1NjU1l5c09CSHhzeFNPei9uaGJOZ0U3ZVNjc052emhlTlpzeXNidmFLYUwxUWY3TTdlbllpM1IxQWZUL1NIOTJocnF3YzM0TlA2Q3dHUHptaVQ5RWhrdUlQeTQ5RXNXSmFheVp0ZmFIUG9pRVZSOWpLMk9DanpYcUpwRFlpVWwraGpUaWVSa0x0QU9raDlWNHFtK1lY''@;'; put 'put ''T0NDR3I4ZEhVSC9wVXFYeDhGKzIwYzFRQmxBWmRzcUs5eFZ6bHRWck8yVEZhQzFCUmRXWGxtUEVpb2x0R0Zoc3U5NlJoUmMzTHBXZEtrWEhyR1ByQ1hnRHZqbDJaall2NUlMbmNrTDhhbUc4TlYrVVp2ZDFWWXVtbStyMisrSWNSMTl4ckhydXJ0dldyVUtIWnhRVTl6ZFQwbnpXc2FxcHV2UGlu''@;'; put 'put ''Z3U0V1RjdTVVRmhZYVlYR3VQbEdFbzZWSkdvaW51WjQ4SHRaaUFreVRKOHpseTVSOG1xM0I4MFZ1OTFwVUs5ajhQdERmcUtya3QzdlNXWll0dDlIOHJNVTB4NGRFSkdOSExnY3lkTWRKVjd4eUlRZWMrc1VYdTdycTYxN00zZDUvb2xOTVJXTnQwYW5rN2JrWE4vaWVITlFUYk1QSWdNSDJRRHpM''@;'; put 'put ''TmppcXd3VFVGQTNobHN0WVdyYWNYK1N3V3kxcUNuYWxrU1poczNSNHU1ckVCeTlHOFBpMmgxNTU1WlUrZUQzMFIrcXR3djI1UGJucnJvTTNmQ2wxV2JIejZ5ZDc4Qng1Z09WQnRESXZTWkFtQ2dJeU04ZmxrcGFqd01LVFcyUTZVQWRLc1NMZFd2VDd2cW9xb2RKVkpaeFRQc2tlK3VtcXBML0xu''@;'; put 'put ''NEMvWVpUR1g4Wi9WOW1JdzFwVXllRXdlbEx4Mjh6aWE4alp0K1B6b2ZrSzNUZ2p2VURPdHJ4ZG40K1Q5ejdSZHpaTFhxNDRJL082NE5wTGdNUG40TFJCZjBkVWZDSnltb3JPOTFBeHh0eDJ6RzBiWUZJQkt6cE1CMVZwcVAvVzJMK1NhenZjOWR2MGpXa2NidG1keSsxdVdhMG5YMXpkSmVkaS9n''@;'; put 'put ''UjlDbmNBME9wRWR4R1hJSlI5VEJZbE1HYUtvTGRZWGMxTWtKKzRyUFRENmxMOFdXc2llbzFtUWFKcjJkNHFuVGJBWmFzQnhKZWU4bWV3ckUxZ1dUZUFPZzN5V0hNRnpiWUFycjJ5emxnUDBHRjJ1a1VQYXdLWWRYcTdOZ3NpelNWMUlaZlY1L05Sd1UxQng2TFJ6TFpWdEJ2cXV3TGhsVW0rRkd3''@;'; put 'put ''TFZjVXFMYlUrUjUzZGFpdXY5Q1NxTlBxb3Y4WVhxekFIS1JKWWpjSkVEck9haGhTYys3UHMzQ004UGZjSWVsckp4eGpCLzh6NGxRKzFpOW5HS3FkSlErVHdBa0YwclF3aFpRWUcwdWNBVWtTZXordDIyYTBGdkVURkxFeEpqcUp1SVoycWZRS3p3U0dGcjNtMnlDRlo1M1BTbVMyeVNOZ2VtTitj''@;'; put 'put ''dTc2eUVkWks4M1Q2MEVmUkY1RCtBc0huNVRTZExkb2N4ODV0MnB4VTIyQWVmWEdiTml1Rk5tWjB4elp0NWdwekhVV2ZrOXVRelcyK1VSakhpTDY5c1kyY0g4RTl4R2pCZ2diRmZvSHlJaWIxOVFnREY5TERPZWcxeXdaZ2tMcEYwQ3NWZjdaVzFweVlHV1dwdEVEdkNvVkJHWUZqWWpWaW5xWkpG''@;'; put 'put ''S0FoZ0NWaFV5UG4wbXY3Ui9EdFJDZDVmcWFFMEdsQ1JaZjBEdndSNlhLa3hMMUZscWVRUWErTDdrdzZHTkR3T2pkZ2FqVU5tYmtxQUkvTE1lRzBDdnBIYUN5S3cxZkFHOUs4US9VeU9VWVI4SFRGcEFMcGR3RFc3U1kweWNaR00zTm9INFExcDk5dUoxcHZFOXZRaVR0MXNWNWllSE1IbWcxRmpt''@;'; put 'put ''elJENDNSdEJ4andOOE0xR2NGQTZvR3BHVUZWdm5EWmdxVVplaFdybEN5ZUcxUHVVWmZ1NWs4cStZL1ByOVZqa1k4eTNueFJxcHQweC81eko2U3BBMktUeXlIZ3VGM1NLR0I5ek44d2tWNHVibk5jZlR3Tm0xT3FtMkFCbTdjcHMxY1laeWo2Q3E1elRwK3IxRXQ3Y05zcm9pOG5yVTd0aG9IVnhh''@;'; put 'put ''MU9ZNXNtOXVzL1FMR2VZMnRKeUt2WisxdlM5cjhPN1Q1STF1UFBNN1J0WHMycmdkb3FSbmVYbUN4MGxxYXpidFIwMWpVWXhvb05SU3BHaFVWOEZGYlVjTktyZXpRelF3eXAyemQwR2ZHVTFKUWpYeWdxeVFQNWl0K1RrNTRHUmxSVTE2K2cvK3hrUGFDdS9PNGRmVjJPZm5sRDNsV2lnUndZREY5''@;'; put 'put ''eGxOYUZKN3lpUkpZc1RnMWcxV3JjcjZQbGZDZHpXMk80OXcyYlU2cWJlQjhYOW1telVxaGpSazl0RTJidWNKY1I5RnptL2dYUnJ2UVgrS3ZFUjBJQTkzRGVwb2JDVXBsRUVna21IVm1uVGh6ZStSMitlZURZVHloL25iNzdXR2s1dlAranVYSSsxQ2MxZ2RGd3JVMUxvZkpvR2MrR3BhMm83ZzlI''@;'; put 'put ''SEw0UkZjVVB2SDcvWEYvTEdnTldsa0d0cHJWR2dBYkwxdVVMNWZra2NPSkZUSkZja2dhVSsvSE02a0RkKzl2dnpTV0hwNkxaNEEyMjA5RTA4T3pxLzhXOHVOVC92a1kwQ2crY2ZORXlDZmRBbitSbW5mdldQcnN3WUMzNjFETG1SMUFuZlEzNlRzcklmeHdUVDBRcWZUOXFmZE5abzgyU2VNMTlR''@;'; put 'put ''eDJMS2JNenFsTk9jc25TczU3YzV2ajZQOXUwK2FrMmdiTzhndmJ0SmtyakhNVTNiMlpWbVc5bDgzVnFjejE5TVp4TnVVYXhCajNoSFBRTHV1d0V1VW9GSzJCNUtsdzJDcWNsVTRoNEtuazVRaG9zaWhEdzEvSTBPajU1NUlNalZNc1JhUHRwbWRtQmdkbnBCZGttVFBEY25HZUJScHVFV05HVU1L''@;'; put 'put ''WkdnSUNoMXRSRXk2Wld4c3Y2dVIwUWF2UDQvZEV2Q3drVVpLN0hjYnA5WUlGbFhGVC8rcE1lbDh1dHkvVkdtbnJTZTNKN2hrSTd3ak45ZTNvNkJpZmJHK2ZGSWs1T1oxSVRDZFRNMVh1L2RuMGZFdUhyenZZTWRveGttNGJIYyt0U2dCSE9WNzVNc0N4SDJRdlFYMlh5L1M5OFRrSDhQMUUwZlBu''@;'; put 'put ''MWZhWVAxRGMvdW5DYzNOdjhmTUhDdU1mblM5Nnpya0w3WTFVT3dNYWd1ZmNYYUREUlVITDYwSEh4T1VhZ0ozSERVcUNIZXRKRHV2S0RLQjQ4am90RGFPVzZValpDdElqSGEvWExac05STTBHZG8yV0cwMGNGWWJVdHdPMGxVN0hZZ2lsZTlKaVozc3NGVXUySkdDQ2lOWG45Zmw5L2dvQXVSckVr''@;'; put 'put ''dE5UUzZLcnNnTjdVMmdMMFZ4ek5lWktYcFhqWEgzWGV1dXVHZHA3YVhIb2RmQ0F3M3Q1VDBuc1M3cGxJa3BEc3BQOWNoUnNvS05qWUdGc1BTYmJsYzNraTJOaTBreDROQnFvN21sTmRjbzRsbGdUV2V3emd5Nkk3a1RjMDZEUmF1eFlwMDJCV3E4cnFQV3FYdVBuNFN1Q2RWZWc0aFQ3UWxDS25x''@;'; put 'put ''TWJxYnBKZ0RYVzZrQnBmc3ZXb3JlMEliVUUwSkZDZXcydEFnWEpCTXZNeUFxSm5xOE9hLzVFUllRVzBXV1MrSENKSXRKemFkZFdrZHJHdVVSNWlRR1IwNDllczZNa2VOc1kwalJpaXBOeVRKVGkvSkJNQ3pmSXVMcnhPYVdGZTR1ZVA2KzJ4L3lseGUwZktJeHo5QkI3dmtaWncyMXNuSmZrOFQ4''@;'; put 'put ''Z3R4OEZnQm1MbmgrdmtOdi9HM3o4aG8zL2tqeitmZkx6SDhQSDc5ajRjdnVqbjFtdnEyZ2xmdy9hUWhUdEVhMlZ6S3RhQytvQWFBTTJxNlVNRDhsNTV3N1ZCUzFzeUE1eml6YWFwc0Zoc2xMOEdDeTV1cnE2YUYwazRBdjRhZDZzS3BrS2lWQUJLaURwU2RKczdzMWVlZnhQaStLVnc4Tlg5WFNk''@;'; put 'put ''NkQvV0Z6NTh5bm13UHRzVkRCOXlqbFRNeG1PemJablplR0l1UXl4Zk9MRHo5RUR2dGFQREozdG1adWF6cVhDMXI3ckdHMGw1Vmw5STdtdHYyNU5LN3NtMTcwMEJ2T1JZRU9VMVV6S3ZHVm1IK3lDRDR5NTJUbjNvdlZzK1A0N09GejEvWG5rTzhMMnVlSnluQzgvTmU0cWZQNkErUjBjdmwzbFdI''@;'; put 'put ''enBOeWtrZDg1TzUwU0c1d0xxR1ZpdFExd3ZTOEZpcjBSN1dxVUZHRnkya2JVUklwNWFFcU8yMFdzMDhrSTEyaVhXWVhCQWR6Q0J5VjFhRGNGS2RiSHBxb1JZSFBjRXVLaTVxd0E3Rk12MHBMYi80amxyTzhEWFZKSjNOWDFpdll1QUs4UzBuV0c3TnJBWUpMUHRRc05ybE5PcTBHajNHV2s0SmhL''@;'; put 'put ''d25NR3pXWER3ZVQ3T255VzhKV2pab0xzV0tDOU5ibkZpT3dta1VyUVc0WmtOdytNYkI2ZjZHNFc1dmFQalU0SzdCaG1GUk90bUNUYWw4ZGpHTDhXTFc1WlJlUytieHgvZW5odDQxMHVJZkRoeElEWjBhYVEyTVNtL21jWHVnL1ZEdXUrMkhjNEdCR3VrNVA1eVJIRmVnWjcxYnBqR0ZKamMrcHpq''@;'; put 'put ''d3NhTG56NnZ0TWIrdnVQMERoWEdPVHN2UFpWODZIV2VmTXM3SGkrSnlGOHVaK2JQaWNzS2ZINWZqVnJaSW1pbmF4d1BLUG1CL002akl4azhVL0FESEZMMitXSStXWmZyWmdrdy9ObExjZDIvQlAyQlE5TGJTdmhjS2N0OHdMZk91aHJWcHpncTZtaE5WVS9pNXNJN1RZNEtkSUZHNEVaQXhpQm8v''@;'; put 'put ''UjVrT3pTNlhHRlcxS0N0TlM2bXFycXIyQ1lMZzhGRFpvbFc4TjltZ1hIUWhTK2pXckpGd1ZtOUx2TU11OUJjcU1Hb2FQYlVOMWgvY2YvOGR0Ym1FczhuMEtWYU4wZWl1YmJEakhhd21nK1owVFpNYzBFZ3ppTEJGY1EvVlNOeVlLaVE4aVVVTm5KN1hZNjIrbVNaQlU2V0UxeE8rVUlucW91dXNB''@;'; put 'put ''Q3ROcjFkam5Fb3dEZFlkRG9jejRYVEFad1UxSk9RcEF5TzlzUEwwTm1xSVhWQTNFeWhLK0NJNXVpMjNveVRwNi9BSmVYOC9WNU8vNkM3ZFVXUGZ4dXd2bWhER3R2eVJRaGFZYWk5OWdPbllBVVhIL2tPSnJpN25YMUY2R0ZEbzRaTkZmVStxZmJFZVBiTk4zK2VWdmdUckQ2N2Jsbyt3dmtHbDc4''@;'; put 'put ''MGxlRVJ6cmI1R25vUTJnNnhOQldqeEZtU0FObzl6RnRvSTJpajJNMkRvdTVHYW4zVUlhTFFhdmhrUSt5d2FZdERUYWtzdFRaeldvbVU0bXNwQ0JaWEM1NmpqblBFOUp4bHp1OTNON3FZZ2pZQUd2SXJyM0Z1U3A2VVd3cVBONGVsRFBSdmkwK2ZQNTN2V1VIR1FlblQxUzBWSlczOGI2KzFkZldS''@;'; put 'put ''RG1Mcmd4MGdVL0JqSFlObGJ3QlgwajdNRi9lUFlMTnJLQjRMTDBQZTI2YXZxTGh5MFVlcGRnQVpvdlVzTjllcFZnb3dRTUszWFZUTkpLWUx6aTRqbkZZY2VaWGNWbzB5WUFRRllXWDF4RGFvUmJGNmEwUzFRWEZmcllMd3FSanRsNU04V0ZjWk15dWhiUTlHN1JucTJVQ1hEa0RVTXVCeXFZY1V0''@;'; put 'put ''Tkk1MG1PV3owUnRmem9oV3Z3LzRiemtHeFJRMEdoNEVyd2EwWUErdHVVTTZFTFE2elRLTjBhZ0hyVno5d0JJUUdKbGFxWWoycTAwWkFQRGhyWHJRYkxKS2RtVk16T1cxQnZ4ZUx3M3hhRFp1U0ZlU0hDZHJ0THlhSTNkOVlaTUdXOW1tVExrV3NDdHNZdUJ2RktPaHNsYlp1Y05HaXRQbXdJSndl''@;'; put 'put ''TXZ3OTFqeTNCWStNZjBXUHJITitxdGVrWldzVG9qeDhXYUZqejliMGxmT2ZhTjhmRVRtNHl0S1grblh0TVpJN2d2NFUwR01URWRpN1RucWxJcWhQRG9zSG9qV0V6MWY1YVNHT0syRFIwTkc2aHptOUpvVmc2b29sUVAxNlhRQ2RXc3lOSkxqamt0eTNERWVwKzZ1ZUQ3ZWxVMVh4Q3BpNFNhdnA2''@;'; put 'put ''YmFicVZ1cnlxVHFpVFJxMVJrdmNqNUorYlZZYmVyeGxzWE1BaE9wK1dYYnl2RmJxK251cm90NmdpSDZPVW5jMjgzM3c3MCtmOE4rRlhHYUZyMkJSNWIrM2lKdi9CbGFLTmxOQzNyL01mdVVISUcxcWJSRDRFdXJUVE9UaVdtVlk2enEyWG9GR1NxdlBHQmZHVHAxcXFVQWQxQ0piNGZVdXlydG9z''@;'; put 'put ''eXdWRXhVUjB4a2JzVlVjaGs5Tm9iTU5jVExOYm5vVGVxMkcxRXczbXdYTFpmT0RKVldhd29FQWtMRWpmVWdSWGlxREJ2bVVKblZSZmtwT1UvNnBJV3FOVldWVlU1U1pmbWRWdnk5ZkxpMUZpZ1VMWHFnSFhXdCtoNS9NZlZONVNGQWc3U1NzMi9XdmV0QWcvak4vbUdXTTRkMkdMYVFtNmNVSkli''@;'; put 'put ''TjVyUDB6d1NHRzhmNFBRVklFY2FBWGNaVHVOdnlYWWJQT2NZcms4b3oyOWp6MWtkRnBPYmNVVnVscFhRRDRBRWwzTzNRcHRKcFkwRlBTcTNlVlJ0STlkelBhbU9BK05meFdRY0xwSnhkSnd3YXpPcHRMbHVZeHM1ajVaMEFZNllhUWFieVZobUFNMmUweE8xc20xVGtaZ1ptZTJGSWpFK1RaRWth''@;'; put 'put ''K2NGMGlYMTd0a2pmdVFqWFYyNExpYkc4SlQweXFnNEtrbW9rS3VMV1E1amcxaHJMT04xVktqcWxlcTVTcVVZeE00dWU4RThhTFhLd0JoUDVjZkg4MVA0UUxQMEFuYUd4QkErSWozWlhPeGp2bDcxTVFPTWZsVUNSOWtXZkZteEJhbitjWmZjRjg3bUw5bVp0U2huODN1NXZmUnJta2VvdG9mbjl4''@;'; put 'put ''WE5kYkxnejliRGFXdzkxL01GdTFOL0RCWDVsUk1Gdi9JeDlPVVNmVVcyczg0V2JNZGpoOUJXL205Y2p2NnhKTzYyMFg0bHVQeTByRE9uZ0xFK0MrZHFBWXUvWGN3V3FsRDFwRkNHYXFEbGRtcWVEVE0yYXEwMURodExySk1Gc1dzOXZLYXlReHBoVzFkYi9MSW9YdjJIL2ZjY09IRFBmaEtYUER2''@;'; put 'put ''bGdJOGlqSGQvZXYvUzNmdTdWbDhnMllsYkp5ZmVQYVRZbGR3YkxKODBpZHJSbERqaHhIb2RkZDB4clFFNHZWYXZXVFlaaUU0blYxVzZSbzE4R1VkMWVzVmxsMHI1d0lwSXRhZHkyWXd2Nld1Tk5OT1VVNnN2NFBPYllkRWJIWGJyZkx4SXlEWnM0dWhJbHJaY2greXBHN3FoMGZ1dWtVR1doem44''@;'; put 'put ''THEvbnVxR0N6SldPRldWazRqTWJjdFhIZTNzbTVCek44VzV4VEJhK3hXbWFhdjY2SW9NUHNyTk5LL2o3VEFsZXlIbUg5R3huWmQvUG1LS3JBZjRlWlBpYlZ2RDBDYms5NE84Q3c5OVo1Ym14YUs2VDZseUF2Ky9kY3E3OURIOW5aZnkxeVhPeHVqaTJ6b3l5enJ0S2NGL09aYVRybkpQWHFjUldZ''@;'; put 'put ''MnNpcTZrVDBSdWlNOW5hVUsvUjZkMDA2bDVkQ2FLZHBsaHJGUDlqZEdOY0ZmVEZKUkRzRHRrZzB1S3RBNnV4VFlIVmkvZWkzc3Y0NWtEcHhickpRZDh0UXF0YmRKUmpxeVpmeEVkVEc2d1dBNWdCUHRrOXVVMTBGVis4ZXBCRTBrZDJWR3dWYUIyOFByRjlUZUhOODZtU2VHdE8yeFovaXlwRGxw''@;'; put 'put ''Y3FzcnpVUEp4WlRXdExmWjFHeTIrTWhXdEczS0R4RG04WkVPZDUzUktpeWVCbzNaZHgwWUQ0UlR0dEdSQy9TSzl0QStLbC9aU0F1QzhjZW5zQmNYeXhCRno4OUtHUkxRUGppYVhBdGxtNW83dTBqU1duRmF6ZlBrMjNtRDVQcXZRSnRIMXNHL3A4WHFWUHJNOHF0YVJBbjdTVzFJTWVGdTFWY0xU''@;'; put 'put ''SWFRYUpZS0tYWjQxNHNFWTk1Q2FFYUlycEZTeEVSVTVSUjVXYW9NRjBPVUx3QVpEa2Jxd2VWalB0b0VIYzZiZlJRd3h1YWt3TEFnaytzcWtQaXhUUTRuNUdXUFNNMkkxVFc1NFF0YnRwK1N1ZXRXNXhDalZsdENZMnRnbldmVVUxc242Z0FacjNIRWZQaWE0bXJPZWE3Y1NnajlvSU1aUkVUaUpJ''@;'; put 'put ''cTlIZVhJWnBiWS9oQ2hCZUFGNWEyY054bWtXZFhOOVRFa0NKcnZmUkc4anBpM1VDY0c3WlhnbW1GSFhqS0pBczBDMk80aXdiMnduQW9xNkliU0lxdURSRDI4a3dId2RLY0RlU1hjL2FibWp3VjJ3UlFCbE1GbWR5eDZwMGZqa25pOVVzTXh6TktqajZ6aEljcGJubVAyQzY2cnlzcTVLbUVuMVdq''@;'; put 'put ''djBtQ3JIZlkraGpwYm96ODgyZUxmaG1qdzJnb3JqeE53cXhaU1A2VmtuY21QVmxjVWZaMzJ1OEFXMFZ1d1k5N1BOYjlRV0x2K0JieHVWTFNLbTNubWIxMW43VUliWTVnQ1dWdzhtQzZNUGNpSEo3aFhwSEtuUDdyaHRGME1QdnEvTDZmZkpkRnJMWGZKTTNaRk45TmprN2VHYktyS3NxZUF5cURs''@;'; put 'put ''eXRWR3FUYzZ3dUcxc2FGQmVCdjlyeHlSUEZkZHNzNzM2YTdBQzdoNjNWQUxhaUhtczVQNmEzRWluSi90UmZXVWkvTDNaWCttaE5UY2hESTlRYi9aUWJjL0hYYlVxeVEzWkxGcWZtNTljTlRIZlVPTEE1U2I5Z3hqRjhvZlhnREtmYTVWd0JQRldDQzNJK1B1VjdlNWcreEtQdkZlVUhuRlR6QStE''@;'; put 'put ''NXJTVjlaUi80ODZvUEhQT0xxS2p2WENHMzRDZzZWWUlMckU2YjRVdVhvak05VkRLK25BTlA4V1ZSMXBrVVhKUDd6cWw5d1Q3OTdqWjlIMUQ2VWovY25VVjlUeGI2NnRFTjIvUjlYcDBYNjNzWm5yTDZ0MXZoN0N1b3I0Qm01ZEs2QmVZckVOYXZOM0V6eEt4QTVWWjJ2WWx1VTNXYnZxaXE3YUhO''@;'; put 'put ''cFd4eS9pd2VJYysvelpwdEo2M1ovbHpYc2ZUVXpqUjUvcmJGeGEzSEtOUnBFSFF6ME03VlNwV0dNa1kyeVh1NzB6dW4wc2U2eVBPTGk3Y3BZNHpqdytRQ3ZXMlJqZEZJOHdZMDFORlZta0pyUmlZL1YwaElWdmJMekl2N3grcENqbXh0YmRZUnFoMXJJdU4xZFNHNzAya1AxZGJMYyt4QmR6Qi9T''@;'; put 'put ''SUROOFpiNXVadXpuZWNWNzhhNk4wT3VnWVIxbXprM3k2ZHVZNlBTWWo2YVVieWl4UnpHM0h5aDhJeDdXMW5WeGZjazM5alpHUTdEcTlybnEzYjUvUzR5THY4ZDdtenl1K1NIY3A3d05GcEZOaVNnZHJhQ3VNclBhS1VrQXlHdGNnRDVQcys0R1VlL21aUXJSM3dPalpKWnJkenRXK1RjdmFIRDYy''@;'; put 'put ''NHBPSFFmWko0Ym0rTEpsZStkSlYzNERIa2FkdDdMNXMzYUFJWjY1cyt5WWp3RVFwRFZlQkNNVnRqTkJmTnFjVGZoSnBtUzV3QlJxRlVRQTFITlRiMTRsT3JZZEJIMGFndHp2VXR3bUVPbVpqNFJ0TFBmZzJiNk8rbXpXQ3ZLaC9oc3Avb3BuMGMzZnB6bGcvT29tcTJxUWd2WU9FU3QxS3V0bGtJ''@;'; put 'put ''ZXVaUDMrcFhFY0p6dFBac2hMMWZjOUdHV0lJN1g1cVJmcnoyOGRqOHFSejQyZ3F0OGkyb1ZYMkVzZnVObHVGK1FmWkEyVjQzM0RkbTN5UHlNQmY1NHZjb2ZVUi9PYk1NZlgxYjVJK3BEVHhYeDF2Vyt4L0dYTDlyM09CYUwrczRWK2g3RlF5WDhVZTc3UUtIdlVlcTNaUGNUTHRBNFFuRU00czAx''@;'; put 'put ''V1FkNGMwM1JBUkpydTZrdlgvWkxzemJmZkZPU1l6dHZTa29iMmIrOVVoakhETHh1YS8vMjB3WC90bmtjYlprNzFyZUZqckV4emt0UTN3bmxmbFgwbjhTQW94ZS9mL2dmcERpT2RxaDl1UGEzMFljamIwcHFuMkg4YlhTQjNBazQwL293b012UXBzdTRYWnN1NDVhcmhoWWVrYkhJcWpxOVpTRjln''@;'; put 'put ''VjZuWEcybjF5bVRXK2w5eWhhM2ZKOHloU1ArRm5xTWZBcWdVSUdvTEdBMVFHU2tVQU1FNjhBbjJUcHFVZnNqdGVWRVhZcVpGZGF6KytMWllxd2J5ajQ0eHY0V0h2VlYrU3pzUnBHTkszSnV1OEIvM1dhdHJ0SjE0K3ZJcHlxRDhyclorcjhLNjdjVTFrOVJTdDBJdlhQcmNkeU5QLzJuMVZIOHI3''@;'; put 'put ''NitlTHkzTi82NC9CSHZrL0ZuR1BBcWhIWUNiZ2lBRzE1NC95ckRjUUhmREExNGVrKy9abmZSUGYzZGFCUm0rdy81cnY2V0Nxd3RsNi9SMTJPZENaY1pkV1hGVis5YnpSYk9hT1NXQkVNbHJ5bStzVDk5a1k3czluMjVOMDk3YzhxOS9ia3QrMjF4YzM5Slh6QTBNbU5qb3FqZTREODJQemEzYTZj''@;'; put 'put ''NEtvNE05Q2U2RS9tMnpKYTMrZHYrak52OEd6Yjk3U3RxMjVENWsyLzZ4OE9Ed2NJZjBoUHF2ZjkzNS83VS93SEFsdjh6Z1BYL0tRQzlWeWlOMXZEZjBkc21IdFppbkFoM1l5ZkFMbkJ2NWhPZnlMeitkZE5qVDVpVk81M1NvR1FyN1RqV0xwaDE4dEZQZkNMOTJjLzJQdkdZNmV2ZllMTGlaOHFk''@;'; put 'put ''aW5FMEtZN1Z1SWxHQitMUGlPbk51Qm9xQ2pYY3NnR1RNb3lOTkErOGtQbHZ3a2FqNnVsZ3RtRXNFbTV1RWl4K3NQa0VxOTlNZlZTRmV6cUNZQkJTMHdJKzhxU1FiS2VqbVVRQVpDZDgwUGpYaS9LVmkyTzNMVHYyVFhLNlhZZGNSMjRaVmhMK1p6N2t4Y1BTWjNrTlhwTE8xMzkwVDRKZHc5aDdj''@;'; put 'put ''aWpuZEhycWMzMlhkckpzL3dNVHVWcHZ0UzAzZTBLVzd6aE95dkZsd0FkMUQ0TkNsMkJjVDc0cDlqSjZSeXhUZEVEVjRZQXJld1FQNFZaWDZZdnhvU1RBcFU2cEpkZC95V1UxYTBsaWkwdFNTb3ZDNjk2cUtQeU41VzFyd29ITzVUbEJCdUNFRWx0NGdORy8vUHlDOG53OTlpay9mNzd3bkwrNitQ''@;'; put 'put ''a0Q2bk4wOU5MaTUrdmo5NEZhdGY3OGJLSDlzZjFJZ2NFMHVReGdRR01GK2k4MWVhMFlZRkJpaXFtUVdMZkRBcHRoY3Bsc2x4VURSckhML3JNSVBvcU5ObGNFSXNVOCs0c05XUW5yYTZaMnRid1hzTDMvb21ndlR4ZGdZcDZUNVNoTisva0l1NXRDeFlXazRKMVdycU9nMzYvTndQZmEwdSsxcTVQ''@;'; put 'put ''b2Z3QVBmbng1QUFBQkFBQUFBUUFBdENjQXdsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Vy91OEVXQVBGQUFBQUNBQUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd6WURBMHZILzdEL2sxa2lHSUFpeUlEUkdnQ2xoZ2F2QUFBQWVOcU5sRTFvRTFFVWhjKzdrNVVMd1Q4VUJTbHFFbHVi''@;'; put 'put ''cEsyaERhWTBsQlJiYlVyU2puWVJha1doQ3hkYVlyVzZGdEc2RXhFWFhma0RVdmN1QmJIdVJNZ211TktLK0VNVVdseGtJUzA0bnZ1YXFYWFNnb0hETnpPNWI5Njc1NTE1cG9ZejRNOE1VUWNvQTlmY1I3ODhSRlRPSSs3c1FFSWVvQmtmMFcvRzBFUEZ6UXpTTW95c0FmSm1DaWtzNG9TNTYvMlVK''@;'; put 'put ''MGliSXZiS1NiUkxEdzdMQkZWQVNzNmhXMDV6VEFGSnZiYjFITXU2TG4wUG1UTTE3SE5LYUpVdmFKSkhHSmM1MXRiSUNkWVZxU3J2WHlHUEJWN3Y0aHczTVNhSDBPY01zSVoxVHBULzMwRGU4aFpydUhhWlJremVZMVRmR1dwR1dKNGhJdmV3WGE3am1MbUFZYTU1aFd3M245RXBCZSszU1NNalhl''@;'; put 'put ''aVFLM0JsTjlySVRuSFJ4cDdETWtrZnNoaENCUm04OVY3SU5nemlIWExPRkhMNlhLN1plbGZIbUt2MGNCRXhNOGx4V2Y2ZllHOUpISlE5N0cwQSswVlljd2RIekZaY0pPUG1KWHJwKzRpZHMwaFB1RVl6aXo2enhKcm55TmgxalNPS0QvUTh5ZnNsSk9uWHFsY2J5UGxPcW4vcTNUcGh3U3VyZitR''@;'; put 'put ''UDZwdXpCUzIrZDBISlRveFlxbi9ycGY3UlorbkFLZXZWQm5MS3BQYmkvaXRVdkRmMGI1RDhTbjJTUzh5RjcxMVFtZ3RsMXZyN1YrcWYrcXpVZm5YT0lMVjNuZCtuNW9qN1l2dTl6VDFWUDNSTm0xR3pwdnRkSjcycWNMM3FYUk81UWg3WFBtd0dtUVBOb1daaGpXY1JOaEh1dmM2ci9RVm9mV1Z2''@;'; put 'put ''YTF4R010VENlWmxielU0RG1XWE5Vd09uNnhuenFmdWpIbTFDL1Fac0RuVVAxYi82dDZCNURGSXp6bXhtckI0ejgyVXlSM1ZUcjVuRFgzd0diOVIvWjVBTm50Ym5aRzdoVkZmUEd5eFRUd0hwUmNxNWpCVFBCSHN1bUhseW5weWx2eVZlODF3S3pTQmhXaEdoWWpMblZXMCtISTR0NGVoL2labUIr''@;'; put 'put ''d2ViUC9VTWVOcE53bDFJR2dFQUFHRHp2MU5QTy9XNjgrNjZYKzl1ZXVlZGR4RVJFVEpFUWlRa1lrajBFTkZEUkVRUFEwSmt4QWpwSVh5SWlCZ2pJbVNFaEl3WUlTTjZrQmdSd3dlSkhpUWlJaVFpZWhnU01tVHNaUS9qK3d3R3cvSS9lNFp5RDlLemJvd2JUNHdQSm9NSk4xVk5kMmFybVRLL05V''@;'; put 'put ''K2JEOHcxaTlFeVo5bXhQRnFUMWlYcm95MXAyN0VkMnM1czk3YU9QZFdiNk0zMi9nUWdJQW5rZ0JMUWRsQ09JY2VDWTl2eHpYSG50RG9ubkJ2T2xvdHpyYnAyWFhWWEcyVEFOSmdGRDhCenNBbDIzUVB1VWZjN2Q5VURlcVk4WlUrM0w5Vlg3V3RESExRQ2ZZYU92VWJ2bUxmZ3ZmRnB2aGxmeGZm''@;'; put 'put ''azUvMEovM3YvdnI4SlcrRUplQjQrZ2svaGwvNVlmN0cvampnUkJCbEMwc2dIcElUYVVSKzZpT2JSSXJxUEhxUG42SFdBQ2p3SC9tQWVqTUVHc1FTV3dSYXhQSGFKM1dBdnVBR0hjQTRmd3Fmd0duNkZ0L0FPQVJBNE1VMVVpTy9FRDZKQjNCSlB4T3ZBSmpsSXhzZ1VtU0hueVJVeVQyNlEyNVNk''@;'; put 'put ''OGxFVUpWSERWSnhLVXhVYXBoazZRby9RQ1hxU0x0TW45QVY5UmJmb1gweU1PV1hxVEpONVpqb3N3T0lzeHhiWVhiYkVuckExRHVJK2NVZGNsYnZrcnJuNzRFcndZN0FZUE9jUlBzVEgrQlNmNFJmNVBGL2s5L2tHM3hWQUlTRHdnaWJFaGJRd0p5d0xhOEttMEJSbnhHVXhKeGJFTGJFa2ZoVnJZ''@;'; put 'put ''djNOWVdndHRCWGFDNGZDamZCRCtGV3lTejZKbHpRcExxV2xMMUpYQnVXQUxNbkRjbEtla1Jma25GeVFkK1dTZkMxM0lvRklLcEtOVkNOdFpVeVpWVGFWUGFXc25Db1hTbE5wS1IwVlVIRlZWRWZVeEg5bTFaeGFVYytpUUpTSmprY3owWXcyb2MxcFdlMUJhK3RHZlZRZjE2ZjBXWDFKWDlYWDlZ''@;'; put 'put ''Witxei9wdndlQnYwdEF2U29BQUFBQkFBQUJQQUJZQUFvQVB3QUVBQUlBS0FBNUFJc0FBQUNEQVJZQUF3QUJlTnFGa3MxT3drQVVoYzhVSklER0tERXVHaGQ5QWZsVEllcFN3MFpRSXdvN0VoQUVJbEF0eFlUWDhDbjBUZng1QWQyNGR1M2FoWWZodHFEQmtFazczOHk1OTl5NTB3S0k0UU1CcUdB''@;'; put 'put ''RXdDR2ZNU3RZWEkzWndETHF3Z0ZrNEFnSGtjU0Q4QUpNdkFtSG1Qc2xIRVpheFlRak1KWG51WWh0VlJGZVFrbmRDNjlnVFgwS3J5S3F2b1dmc0c2RWhKK1JORGFFWHhBMjhzS3ZpQnJuWTM0UHdEUXFPSUNOR3d4NTRqYWFhTUhseVI3NXBIbnlGRHV4VUtOcU1hNmxZL3JrSXVjdXMvck03U0dP''@;'; put 'put ''QWhyTWM3U1RqWTVFNVgzSE0rcE5ES2hVR1pWaVJsS1BmVnpnQ0dVY2syWjViRTU1ekt0aC9hbFM0c3BoVEZ1ZjBacXFPcTlTaVhUSjJXYk1xUE1UNWpjNGovTHExS3JrVStwRFhkL2wzdjkzTS9KenVkcERndVB1bDdPdGZidSthNXlhemJXWDA1ZXNKbFdYdXdOK0NTOG13ZG1yMmRWZFRtb21a''@;'; put 'put ''blk0YTIvU2M1bHFEVmM2My9WdnF5QjNsOU9xeFpIUldwWW5TMkdYN3kzcytQOUtGdGVNYTJoL1IrNDk1enNXY2NzTzJsUWN4blIrQUdpaWd2Y0FBSGphYlpOWGJCeFZGSWEvMzdGMzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNp''@;'; put 'put ''UjRRS0pYMFhzSDBYbWtCKy9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktXczRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5''@;'; put 'put ''MTFOTkFJeUdhYUdZL0xSeWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVqaGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdw''@;'; put 'put ''a3B4aG5PODR5eVFUWE15bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVpM1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtW''@;'; put 'put ''SzRLVmFwSzFhclJUdTFTclhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0''@;'; put 'put ''Vy9MakdjaU5zamZzdlExeGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJzSE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1v''@;'; put 'put ''MFpxV1NnVVJtNU9zMEhSelRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFoRk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdR''@;'; put 'put ''YXh6R1hlVDFScUsyWTQ5RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtUWDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNa''@;'; put 'put ''YmNoQUFBQWVOcGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJpeHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHph''@;'; put 'put ''d3BiQXd1TGdEK0hDVmdBQUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDoyMDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODti''@;'; put 'put ''YXNlNjQsZDA5R1JnQUJBQUFBQUZVa0FCTUFBQUFBcFFnQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1hBQUFPZGo1OGZFeEhVMVZDQUFBSkxBQUFBQ0FBQUFB''@;'; put 'put ''Z1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQm9RS3p6WTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWF3QnBHWndaMjBBQUF3NEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFBTjR3QUFIRzQvN0hH''@;'; put 'put ''REdobFlXUUFBRW9JQUFBQU5nQUFBRFlMWllnU2FHaGxZUUFBU2tBQUFBQWhBQUFBSkFkNkJDQm9iWFI0QUFCS1pBQUFBb1lBQUFUYXExTStWV3h2WTJFQUFFenNBQUFDY3dBQUFucE43akxtYldGNGNBQUFUMkFBQUFBZ0FBQUFJQUtFQXBGdVlXMWxBQUJQZ0FBQUFYRUFBQU1RSSt4NFlYQnZj''@;'; put 'put ''M1FBQUZEMEFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZKZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlZIQUFBQUFZQUFBQUc5bmRZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RG''@;'; put 'put ''UmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZSszOWV2Z0tXVUg2RWdJVmdiMHhSR21BaXlhUmhVUnlxU2ppa2FadmJqbklQeDEyRXpGdWY0Y1dnV1VoZUhEQWxwRVBreDJnQ2lZa1hHdW9ZeHh6WUN5Z3hoWUZ3''@;'; put 'put ''SHlCWW0wK2xDUkhuM3ZPZjlzQy9RYnVNSkQ0ZHo3M3Z2UGVjOHQrY1dBcUNBRVpnS21WeFhQd041ZUhvUXgzRDhSNkJ3Yzc3ZE9BOFZjNy9ST0FlVmMrZk1uY1Bab0Q4WlRXY2s3UGhkQVFNd0RGWG1jUmlKZXRlYWprWUxiRldKbWhIeEkrbTlpRjhNTmw5QXhXY1ExTVhONUlDSldJbFBFY3Rn''@;'; put 'put ''S0kvQmVUSklqcUVVdlhpeWY4UWQ4WmI0U0h3Y1BmeUozKzl4NVBmZGVqdTVkL2IvSitPZjk3akN1ejJPOUh5ZVA4VzdlaGpaRW5mR3V4TmM1ai9Ddjc5TDBOMGVjVE96cEJqT1RGY3hXOWNSaWxyQ1lSVGhNWVlJK0R3UllSeVJ3M2dpandsRUNYTTdrWlZxSWdSTDhSUE9mSlFJelBoSytsOG1C''@;'; put 'put ''SzhRZ2xjSnhTSEM0MDNDNHpnUjhGY2l3a2tpd3J0RWhMTkVEdThUT1p3blNsaTlUN2xhVEJTa1RNcFFJdVZTVHE2UUN2SmdWcmJBdFVkVEpTUDV6ZldFMkxuVEU2dWQyTm1KdlowNFlES1JSeDFSZ3R1SUFocUlVc3pIZzF3aGlTU3lTQ0tMSk9CeFBNbjVxNGtTL0FKck9mOXBiT0w4TFVRcHRo''@;'; put 'put ''RTViQ2Z5ZUlISVlRZVJ4NHRFRGk4UmVld2tTdEJHbEdBUFVVQTdVVUFIVWNCZW9vRGZFSUxmRW1MWmlmQTJVWXEvRUdsZTFQS2lsaGR2ZVFtV2wyQjU4WllYYjNueE1sQUdNbDlYeTlYa0pFZUJxOVl5UTFXc2NTMXJPNFkxSGNmTVRHQkc1bU1CRnFJUjM4Y2kxbklwbG1FNUhtRVdIbVgwMnhq''@;'; put 'put ''Umk2emtLNnpnSVZidU9DdDJrcFU2eTVPY3Q1dFZ4bjBya3Z1bEQ5czkzQ2VOakxzMzFiV2J1bXVPUCtwR3JUYlMzUjM0Yk9STWdtNitQTnZqM1RoelVmRzgxOGZqNWZIeXkwZlNXeGV2aTlkMU8vSTMrMFpSYVpvUTA0VGlxNFREM1lUSFBVVEFMQ0tpSXA3a25FUU5ZbXBRVTRPaWxZaXdsWWlz''@;'; put 'put ''MG1LVkZxdTBXS1hGNnFvNFFUaWNJaHhPRXc2ZkVBRVhpRWo2U2wvV3RaLzBJL2VYL3VTa29tSVZGUmtpUTdpK29nWlhFYVhvUy9ReXBZc3BYVTNwcnFqMFc0bXMwcjNGRTJYaXlablNYVkhwWFJyM0ZwVzNxSElXMVVXbHB4cFAxYjJMNkZuWFNiVGVOS3ZGQ0JQbE9vc3paL3AxcGw4dHhweW9X''@;'; put 'put ''SXVSSjFyV1RQeFpSVHZMUWs1R3kzanVudnowcW1PRURhelgzWXhyRmlOWnpValc0Q2xHOHpRMjRCbHNaRVJiR01sVzNzWTJucmFkcDl6TDA1MWdEVTd6WkJkNGduN2NiU0IzR2NJVmg1bWVGWDJzbzVTYk9zcTV5ODIweE95YjJZbU9SY1BJbmN4L2g2eVFsZktFckpFVzJTalB5WGJaS2J1bFEx''@;'; put 'put ''NlhBM0pZanNvN2Nrck95QWR5VGk2bzE0S1c2UUN0MUJGYXJiVTZWaWZvTFZxbjlkcWdNL1ZldlU5bjZ3SnQwb2QwbVQ2bXpicEsxK3A2M2F5dHVrUGJkSS91MWYxNlVOL1NZOXFwcC9VOS9WQS9kbkNSNitYSzNTQTN6STEwMTd2UjdnWTMwVTF5dDdscGJvYTd4MzNkM2UrKzV4cmREOXpEN2hI''@;'; put 'put ''M1UvY3p0OXF0Y3h2Y3MyNnJlOG50Y3UxdW4vdURlOE1kY1crN0UrN3Y3cC91Mys0VHJ6N3YrL2dLUDlnUDkxVyt4by94Ti9vditzbCtxcC91Ny9Tei9EZjlBMzZlWCtSLzZKZjRGWDZsZjhLdjhTMStvMy9PYi9jNy9XN2Y0Vi8zQi94aGY5Uy80MC81TS80RGY4NWZDRDRVUWxrWUVDckRpRkFk''@;'; put 'put ''YXNQWU1DSGNFdXBDZldnSU04Tzk0YjR3T3l3SVRlR2hzQ3c4RnByRHFyQTJyQStiUTJ2WUVkckNuckEzN0E4SHcxdmhXT2dNcDhONzRjUHdjWVFvaW5yeGRpeldiZVFseG5VWlhwVXdtb3hiekxPMHkxL2thY1kxeGpjWlA1aXdEalY3dXZFazQydVZQMU9sMm5pVThaU0VzZEI0azc1R2JqVC9l''@;'; put 'put ''T09KNXU4MFBtK2U2NHczR0ZjWjU0MGIzR3p5ODhhTHUyZDlNeHVqK2E5Z1RETisxcmlwaStXdU5IYXo1eG52TTE1MUphY1pNUHRLbm01OHJiYi9MOWFObCtTcXZUdkdsNDJmTVY3WXhjeGV1Mlh2djNPYXovWnV1U3JEaXpObnZzVE8xSFNKK2F2Tm43WFRyRDV1OWwyWnpJL3FHcjFvMjJpcWlx''@;'; put 'put ''dy96ZXFVMUxZNXFXYlM2cVJScC9vczJrVi9NcWZGN0UydTZhSjZpeHA3dyt6OWlWMnNhWnF4Vk51cDlyTCs5QXhwM2c2YS9TT3IwWjlONStkc2ZxcWNUcHRqTnlMVjdTWCtHclBQcDdiTlNWV2Q5YWMzNkthTVp0S0taTzBYelA1VzZyZjVkaTkwcVBrM21EOVZXbFhHbm1TY04wOVA5a2ZwZmJI''@;'; put 'put ''bzdqRDdzTm5abGV2aVh5WFZpZmRjVnFuc2psT0t0N3Y5LytCTFp5cXVzWGNwK082cVpsYVMxNmxuMTY1aEYweGUyQkUreDVkWURtTnhJM3RZMHJuN3NHOS9nVDA5NmR4OTdZMWFicDI3SDMrdm1zbytWRS8weHgzc2N3UFk2ZTdrN3o0emlVcnI1VVBaOWI3R3JqV2ZiN2ZoOW5vYng0N2V3dlhX''@;'; put 'put ''cy9QZGJyM3ZLK3grcjdGRC9oSUg4QjIrNk01aXNiMHExK0JmRXZBVU8vRVF0RnBQYmVONVJhNnkzODBpU1B4alUrRVMzRTlld1c1WGlrSGNheVFqR28wYmVPcEpQT1Uwek9Eb3IwMjdmelErYW14M0J2c3lmTWg0cnZGbTQxUlZPYk5MOFNYdTh3QytLem5KUzRrVXBGUjZTNThyVC9RZjZqNmJL''@;'; put 'put ''UUFBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtY21DY3dNREt3TUxVeFJUQndNRGdEYUVaNHhoRUdNMkFmS0FVSExBeklJRlE3M0EvQmdjR0JkVS96TkwvalJrWW1JOHlxaXN3TUV3R3lUR3hNcTBIVWdvTVRBREpaUXBBQUFBQWVOcTFrMWxRamxFY3hu''@;'; put 'put ''Ly90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hyQzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1Y0pFbXFwRXVtVEpV''@;'; put 'put ''Y3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcxcTRlcVNUV3FCbFd2''@;'; put 'put ''NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktTWmhPSkJ3Ymc0a2dr''@;'; put 'put ''aWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlCbExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFCVDlaUFEyRFpxbGU1''@;'; put 'put ''cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1VmZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVoNDJtTmd3QUw4Z2RD''@;'; put 'put ''WndabHBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowakVudy81Zi9maUErQU05UERWaDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JRV21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1WXpLVUlHUGRyd1JD''@;'; put 'put ''TE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJiNXFSb1A2NkgySkdz''@;'; put 'put ''SzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJVTENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtYSHBScFRhMkNhekFR''@;'; put 'put ''T1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhPVTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tHSHZLdThIRUM2QVEz''@;'; put 'put ''eWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JTZy84MXpPNHQxUUVG''@;'; put 'put ''akExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktzNndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0QXZpME93dTVXUlhl''@;'; put 'put ''VE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2owYkdBVDY3T3pNUHEw''@;'; put 'put ''OHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFLSDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNzcG9wanNSUm5NZ0Nr''@;'; put 'put ''bzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1MVE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFSb3ZOZEZmVnFmVlhX''@;'; put 'put ''MkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JYTWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFwQ0pXZURwa1BwdWRt''@;'; put 'put ''dkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENjQms4TEpxbVhxbURx''@;'; put 'put ''Qm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRCSEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92RjZIM2srRnkzZ0Iv''@;'; put 'put ''b0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9UU0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4rU3lBVGZrOGdFKzZv''@;'; put 'put ''bmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmVHUFZlZWc1NTBxNmtqZnRrbVY1MFM3YnNpVGIycnhidHJ4S3R1eXh4K1BaUEo1aHh1TVpHQWlUR1FqTERFc0lKU1NrU1VOQzJnUkNDRHhhYUZrbXdMQk1GZ2hmU2lZTEpDOXRtclJaMnJRcDlBWFN0''@;'; put 'put ''RWxMK3NEeSs4ODU5MHF5SmM4TStiNEhZOG0rT3V0Ly9uMDVRaFZvYVQyQ1B5dllrWUMweUl4c3lJMWFVQXgxbzM0MGdXeEp5L0JBWDA4aUhtbjFlNXJxYWkxNm5VWkJVRVY3UU9uVU8wVnp4T3cyUjJMdVdDUW1zbmNSZnBXZjBtZjBuWDRDVDJMeTcxSWIxaUVSaWVIUDVsN0cvZjg1TlB6dzhQ''@;'; put 'put ''REREdys3bk03aDRlRkR3ODdiSHo3a2NoNXlQdnp3dzg1RGgyNGZHM3Y0OEpqanU4SWJLYWZYQ2Y5dVBlSWFHL01jZ04vR25IM0Rya00zZEZuRHM4ZVBQM2I4K0d4NDFSbDJ3aitFQ0pwZi94MzZHbm1DN2MyYmRDR00wUkpDcUNhRENCR1dGVmdRck1LVVFxSFFLbXE4ZXAxU3RBYU1FY0Z0OGNX''@;'; put 'put ''aThVaW54V3hTdVpmMm1tS0N3MkcxTkRWWnlCTTV3M2NkVnJQRFliWTZFRnBmUitQNE1ieElIdFM1VUFWQ09nRmVuMFowWGorODNBRHoybEVUdWlIelpPZnN6bVN6VmtXUVVpQ1lJTHhTaVRXYW1reU5ybG9RUmZWU1ZRVlJxL1VaQlNaRVM2YnNTUjk5d0Q1RWF2RndhVCtwNGE1a0kwSk5qUTMx''@;'; put 'put ''TUkyOXpsWnJoUVViOWZuL3hJWUFGaU9pVzNRbjJFOGl3bjRpSXZzUjZZZjR2NkxYYXE4TkRnZnZnWi9qMnVQUjkydFBTSDlkbzMzdW51ZzkrS3V2OWo4Ri8vVy8ydjgwL05mL0trQXl0SDZXaE1uYnFCRjVVUnRxVHdiYkFpNm52YTdXYWpaVVZxakZHa1NVQUdhU0JqQ1EyeEJHK0VNQUVpdWFh''@;'; put 'put ''dExyQlFDd1J3Vm9FZlA1RXhackxJUmowUUdjQVBTd1dFV2YzOXlJelFnZTE4QmJQQmFGQnlSOC9FajJwcjBkMDNzdjI5KzVzeXQ3MWE3MmlabkwzNWM3M05VYlNXSXltUnEvL0VveE9hemIzVCt0WDdQTlp6dTJ4OFgrL3BxNS90R2EzOVR0bk1mMmR2MVBOVU90dVpHUlVEQm1lZ3NXb2tUaDlm''@;'; put 'put ''OG1iNUpuQUNPTWNEcGgxSXUrbFhteUZrNG9VSW1WRlJpcmxIZ1ZxWkJhbzFJZlFRb0ZXaWFZWWt3MWdGNVlyaEtKSUdpRktYdm1TVDkwQ1Yrd0M0S21ySis0WElWRjBTckMyVWJLOUNBRTJ0SnVxSHl2WGJ1U3Z2WjJoOE5rUXFpOXQ3MG5IbldFSGFGbW42bkoxRmhYYXpUb2RiQ1pHbCtOYUE0''@;'; put 'put ''WU9FZ2puUUJLVXcxMjR3aDJHeWdzM1M2VjJXU0pvRTJmRCtEQ1oxK1liRzZaRElYWUsvN29jSzUxK05wNG9yVTEzdFdDWnlkYjhoOEYyTU5FSzE0S1pVTWRNNkhRVExoOUpvam4xcmJodTFPZGtaRlV0RE9WT3hpY2FRL1R6NkJGTUo2S2RJN1FqMkIvQW1wWi94MDVTWjVGRGhRQVBqT1E3QTBI''@;'; put 'put ''dlUwTjlYVzFGYmhDSUE2TUJKS21HSTZYZ1Z3dEdTVVFLWU1Nb0ZCYm05UFpGbXVMT2dQTzFqYVhTclFFbEg2VjIwWDNGRThVN3d3K3NzWVRWcFZvUmJBMUs5K2xJZUh6QTJyQlRrbHc5OUkxL1FlN3BtY2I2NE96bmNGMFlQdjIvdjN0alVNZG9mZm5QdGNWbitqdjhEVk5uaHp1R1p6dkYvZnNE''@;'; put 'put ''Ky9zVFIxMHQwejRncE9Cd0dSZ2NObzV2akkrMzNEbDBFbXlPeEtJajliSFc1cmpheTlucjV1MVo4SzlZNER6d0JmUWcrUkJWSU9DbVNkYkFGRXFLZXRoNTRzQkNYU0kvcmtJZitJbFNpSFR1NTYyZUFsc3h4RExzeDdSSkxwMzZ1MUdvMTB2dHVFZmtlT3RScnZkMkhxY0JLREh3UG9PbkNCZlJ0''@;'; put 'put ''Vkk5VlMxRXJjSEdNdEtXTm4yck9Lang0NnROQzlzMzc3UXZQQ3pXMjc5NlVMcnpoYytjTzI1eFFDZEVPaDNCL2JMZlVYb3k4SGpUM0RBaFZpL0ZSamg1c1Z6MTM3Z2haMnRDeis5OVphZkxiQyt2Zmc2dkVTK0Nqc1pUZzR1VG8wbi9QVldVUTJjS2QyUFVUVWMyaVMwQXVRbk55RWlZQ0tjb2l5''@;'; put 'put ''V0g2UXdCU01zbzMxenMrMGhsME1wbWdJR3R1WjRRaVhDLzI2WHp3OS9KK0tEMk05L28yZHB0Y0QvUGo4N1lNNlFvUzN0US8raS9FNVVhYkdWL3diWTdLSmQvUllyMjRuNzYxbzFGaFRWdGMxV3BWSlZwVkJVMWdjRGdXQjlwVUpScFZJcHJNMjExUW9CcTdVVkZmbDJDdFdGMnVIcnFqWFdpRXJi''@;'; put 'put ''cURHNUdPTldWcXQwT3IxZXAxTlZLOVdpS0ZTN1RKcEdyU3BpMVZSZmVrc0cxeFE2U21wSUZGVWlYOUtOWURyRkF1QTlBQklMYUFWWUEwVVRCWjVtZkYybkV1c0MyRTBsYW94SzFnaXBlVEh6SXZ6RExTKyttSDdwSlRyZTlQcU42Q1cwSC9EUG1nUXlSK015K2dFUmVRd1UwNEE4WEFVeEo4NDBW''@;'; put 'put ''MWxBeXRVN0hjR2pvVEFWZDBGMzQyQVhIYXNML1FyMzRpaFFibTNTekJCM29ZQzRlaDBkek9nME83dXdrRnZEMFVtMm4wbVF1OC9BL0pWVWc2QlBnQ05pYk1VVUJ5cFJoVWNBVmxVc1pZOUtFcllxTDEzeCttL1d6K0tIeU9zd3J6NVpRd2NGWVlKUDhna3BXOE16QzdrSEZzanI3NzZHbU16dEJi''@;'; put 'put ''NXlMVGtIckxBSnRTVmJnS3V5SFhNT2drSFlzd1hvZ1BaMFRickdXZ3ZqbVNDTUFvck5QSkhFb2lGQUprcE1qVENUNm9PVGt4K2NuNFBYVytmNzlrV2orL3I2OXNWaSsvcXE5bnh4ZGZXQlBYc2VXRjM5NHA2SnlWdm41bTZkbUtDdkhBWjFsQlJBQjFBaGU3SVdqbElBZUtVNWg4ZFlpNmYwUmdZ''@;'; put 'put ''NjBaK0k2TjFQWCtkNlpEQkxack05SjlhMklkYS9BelpWQ2Z1eG9kYWt2Nm9TdGdQWVFFaWFnWk94UnFyRUxDRW1qL1JXajE4aDFnWUdNU1ZtdW5xVjZJOUx6RkNMNFh3NjNwa1lhaDcyZHUveUpaWSszWGVvTjdQNE5GN0srWVorT0xBYWJlNTNkRVdDSCtyYzJ6ZDZZK2JlTkorL0dlQ3BoL2xi''@;'; put 'put ''MEdDeXoxWUxjN2t3a0RTc0F3dFV1QU9WNHhXWVhiRU1DQXFMQWRtNnJNSktwVlZKVDdrRk5YczhUbzlYRkcxdzBwUzVSRHFwSEFyZ21OVWlDYVRDQ2tVSjlOKy90VG51UHRRL3NYUGYvR1I2ZlBmaVVIeUhQN3JuRTBPcnZabWUvc1crSzhlcWhtS1JVSFNpdDI5Z0F1T2g3dmhZWnpoOGZYZ2hQ''@;'; put 'put ''akNucjlrKzByMDd3bkdoR1Y0R0FQWVZ3T1dDeWRZcTRFazRyVkxDSGpBQy9mVXdnSStKWEsxaXFyS3lzcnF5R3VqS29LTnI5VHI5T0tLbkdxdzdwc2Y0enR3akZYaGg5K3BxTnZmN1B4L0NyK1FHeC8vODEvaGc3ajRPb3k2QVVTUE0wNGo2a3QwbWpCWGFHb0VvNE56VENGNlJBb1M4SUpBbEx1''@;'; put 'put ''RTNBcWdSTmJqMFJxOUhCcEFsMGlrSlk5RlA2VW1NNXhIeVo5Y0hJenN2RDZkYjlrN01qWGRYNEh0eVo4V1JtY0hWL3NIM2pWWDFSTHIzTjQ4Rmh1ZGk5ZmhBK3ZWUTVNQndhclVMWU5BSGE0dkErVFdnVnNxdERYbzRPMzhkVVNwSVdnVnNSYUVVRktzb0wyWkZXSmpNSVJwQnIyeHNiV3p4dXFG''@;'; put 'put ''enZkZnJVNFBlaHFURlVLNUJpUVhFRENlU0JrQzVpRUZXSkVSS01YY2RIUmk0YXV6Mlc5STNUL2Z0YXdsNEprTHgzVEhIU3I4bjA3eHZmR2lwV3JjNGloK0RoUTRlNmZ2S3ZTdC9jYUMxdWQvdG5ibGptNll6a2Z0SWNNSS9DdHVjTzBEbERaeGpGYU9ocG1TOUFnaUlVUkRsUFpqcDhLQUZnL1pE''@;'; put 'put ''MVVyc2pEbk53QlNleU4yRnY1LzcwVzZ5a3U1ZHU0dnFHMUdBUXl2QXdRNXc2RUVqeVNHVGlnQ0hUWXRGUUpBNGhScUFnT0dNR0tjSUJPcnJFUXIwQkxvakhmV3Q5UzBlRnd4UjE2YWhyS3VjeGlIQng1QW5RTW85ck5LZi9ockNtTWtiN3g5ZVNBMU1ERjNSUDNERlVLWjNlR0g0eEpobkl0d3lI''@;'; put 'put ''aGphMVQ3dUJwVXBQdXZ6emNaQnFhcHFYK3dlMkd1dTNkYWRtRzhMemlkNlp5Mld2ZjNkaSszNEU0MXhyeXZlTkJMeHhSdEk3bmxIdDlmZjU4VFkyZWYzZGpzWS9tODZlNGNCanIxQ0F6WUVnVzByZ1hDVlpCWFFYNEM5Q29JbFV5UWQ1TE9IM2NMWis3eGVkdllXNmVnNUhRL2dma3ovbFBadm9K''@;'; put 'put ''RGc3TklTd1UrVm5Qb2d3NFlVTy9ZT2lnSGszT1pUNTdpUSt3ZzlkbmIrc0FjbVEvQTZ5QXNyNWVlVWY3TkY2cm54cHVUR1cxVVZRbFhXS290Qnh3UUw1ZWVHSXNGQ3lnZ1pxL1NPNzVhbFRlNkEvQnZZZEV4MjRuV3c2YlF3bVlqMFFNYjNJODBaakovRDl6OFpDVkM2VDZDZE9FY1dBUzlWVDZr''@;'; put 'put ''STZGREdtTmRjamMwSjRCQzM0ZE80cC9jWFk4OC9QODdPSW9YT2tScjhUNENKSW5JbG15aitVbE1PRkNTQkxFZ3NuQWhVdHVzb0I2ZTBULzlQNFcvbll1em5uOUtmVE1PY1UyZ25NY3B6Q2pCbklvaGpTck55Q3ArR09WL0pkZC8vL1BOanYrajlCWjNUdnY0Ny9CcWNmeTN5b0VReWFxbXFwR3dQ''@;'; put 'put ''VTdZdHdNUTNGY2tReXNDVldLR3dLcVpzTnB2SDV2YldldndxdWhCWkRoYjRkQTBHMjYxWWJqL1hzeWZpSEdpT3pua2plLzlvWUg4MHNxZG5SaStEOTVUUzArVm9Tamc3ZzVFVDdkc2piYk85VmJjVW1jOTBuVzNyZHdtam9DY1BvaXgrSnZOa0JXaktCcWVEcUlYaEpvT2dVUGYxRWtEUU5CaGJW''@;'; put 'put ''UnMrMFJSOVl0cWlUN25tdTNidDRwTTBWMnFJQW1TQ2luSm9WUVVHcmZJZ2toZ2dNQmExV2xnR3dPalZVOUxVUVRDOEZWaXppQzYxaytrOVR0TDBoMHhDRFlzQUhLaGFJNmhYTDlwWkNZWkhCeFZDQWxLdWJ0MUxGRldBWXlweG1YV2YyVVgvUzlZbWt3Z2xzOG5waVRFNHF3R2ZyOVhyOGZtcVJI''@;'; put 'put ''dUo4dVNpTmxhUmtBQWpySU5abDUweVg1VFVxazVtcm9BQm11RGFnTVErUnA0ODh2NFhyejcwMk9Ib1hDalVyMjZjNzVoY1NoM3I2UncxVktmMEhrOWpZN2QzNmI0OUs0K3Y3dnZDM29HRENVUFBWU1BOTzlVNEhndG13LzJSazRjZk8vUytGNDhmZUdnNWUyVTgxT3dQNzU4ZU9aRUtlb2FWQzJl''@;'; put 'put ''dFRlNld4ZUdGVHkydVByR3k1NzZsZXFmZDYxaTdiRXJVUm5xaU96cGlReFFmQVMzSkQwRGVpS0E1QkpMTkdneHdTUU4xQUxrb1FHdWdZbHpBVEh0VHE5VVY2Z3F1anRlQzFpQXlVOXRmaVVsMzd0YlJCUnltLzFidS84Szk5NUluMXJiOUt6NmErd3pBZkIrTWZ4ekcxNEZXNTBMOXlSNlFPRENE''@;'; put 'put ''Q2pnQ3lHVWxWYWNrQjVXSXVkWlA1N0xYR2ZUT3BqcVgzVlZyMGRzTXRqYUhtaW5kR3dXUEUwc0tsdGtvLzdJUDl5WjJ0SGQwOUExRmwzcHp6Mk4vOStSazk0OS9tZHkyTGZsTDhrUmJ0aU02MXRDNHB5dStveDNmTmREZVB2Q1QzTG54cnE3eEhOTnRxTno4S0pNaG9XU2d6bFpaUVhFa0xZc0t5''@;'; put 'put ''d1lYR2p4ZzBzSkhYV2g1bE1pckNNVUhqaE1QN3QvLzROTFlMUjB4MzBwaThuUW1jM295c2VLTGRkd3lWZ1hudHZ6Z2dVUm52Q1UwZlZ0bTZvUFpVRXU4ZytveUZHNHZNSDNPekN5a1BKaVlvMEFDVTFXbHlWQnByakw3d0xvRThNZ29HY0FKQ2ZjQ1dML3ZqV09QTEM4L2N1eU5OeFp1ejJSdVgv''@;'; put 'put ''Z3NlV0xudlFjUDNyZHpmT3pVek15Tlkycy9aM3VmZ2ZuNllMNUtGRTYyeVJ5YjZtNktKUkNiTmNXYU43Tm9Lcm5IRFZRNW8xbmkzM3FuK2ZQNG10eEg4ZWR6UnZ3V1dmbEYrdC9UNUFsSnQ1YkgxNkNXcEU4ZW4zSmhOcXFzMnNBSEdxU2hJek4rekVaMXkrUE84RUZ6ci9CQitYbmREK2ZsUkxG''@;'; put 'put ''a0o1aEpTR2dpUktGa0JvTlNnUmh5a1dVWTJVSTFYOGIrUWNzeHdxRzV1VW5wMUJjSjlkTERpN254WGRqWWZ2ZkVFanZBaVUrRlk5N3J1dmtCdHEvNnZvRXZ6LzIydlpzZllYZDczTi9PajlEZDhGQmh6N2N3bVBxVEhrazlYZ0dkbk82WCtzdTBhRE1zTWQwdC9FVGdsZHlTelYyUnplSlBVM0xD''@;'; put 'put ''M1hUYnViL0JiWHhjZEIvejhScXBZNlZnWDNIVEZJeXJtV3lXOXFJMkdjakZ2MmIwQjFqRVRCbUcwVXc1SjhzQ0lKT1ZnVjJIdEVhdkFyb1hUQmRZQmFXeUp6L1ExRzFhRFBkbnM0bURnMVhKenE1QTE5NUovRnF1WStSWUg5L24zdncrSGNrR2pWcEptT1RGekNNb2NNK3QwV0Rnc2o2aXh4RU4w''@;'; put 'put ''QVNJMWIxWnZIYzE5M01jWGNtOWN3eldtL3NRUHBYN2E4Q2Y1UHRmWmVPT3dMZ2FHRmRKZFdHMmFEb2FKUTBKZEVxazFPdnBvcjJBSnhFOTBlUjZzMm5BdWJYUHNmNlVobjVmV0pkWVpsMG12Ynd1RFJoQmJuMGxuTUMrTEZwSDY5bnMranBkbEJQL2ZHMGJFZG43LzZEOHVBOHhYRzVNMmtWQ1Nr''@;'; put 'put ''WTE1RWZGc0N3M0d4TS9tczNtZHRCaitUNEp3NGpodGU5VC9rdHgrTGYvUDJ4NHpuVDJQYkIvL3dQN0prK24wNmNuT2VKS0xPZkFnOHZMRHgyWXlINXdLblBiTk1kYnBwOVFuRDBJZTZzQ3ZnTldPS3dDU0ZYQTFDVlRDQ1RBRm11cVRZWnFjNDFaNzNPb2FCREJtZWM5WnJmTWx2VXoyRHAyTXBV''@;'; put 'put ''Nk9YWStpelVMcTZzTDU4Z1RYU3VEZ3l0ZGIrT2g3TWhJTnZlVFloaVlhQndtMlVrZCswcWlBck5TSU5RMVdqRFpGRVdlVWJQWjNHSnVEdnY4bEFHREVMZUsvbUppcG83MWVNS2ZzRzRTd3VTM3pkN3B6dG53OGY0bEdVQzVWN2U3citpOHFxNGhEeU5jZjNVNDFUUG1EK1JobGZ1WHB2cWxubVhQ''@;'; put 'put ''WXFnWVhFWHdxb0UxZ2Z3RWdhSEFzaW04QXBxSXhONGtjdmQ0bkhxOWtmSWV1bUszSDJ4dVBZT2NVdllWa0lOSDVyKzA2L0d6V1FhNlhNODVCalo4MndsRDd1MjNHZlErU1FFbitUWC9pNFRKbHdGcUlLOXFyUVFrTnNGRjRLTE81eUo1MVlLYXZVRVBCWmRGdG1xb0Z6UkVTdGdmOXljQ09POTdY''@;'; put 'put ''MGY0cXBISWhIZnhzc3lCV04vUm9jbHJJdTF0aDJJdEk3NGRCNjg2a2JocXV2TEsvbkRVbVhCRUUxWkRXNlk3dmpzYUNmZTNocHlKcG81SWJkMnU3VjI3bzJ5dFFZRFRKTk16dUc4b2I5SnlaNDVrQ21BMzJMUnVvQmpUNjZUKzlTeVl0R21KbG5jQWpud0srcHVSTTlrb0JSc3dMdDZlR1psTUhw''@;'; put 'put ''TXNqaW56a3ZZbzhUSHN1bTB5RzEvdTYxdU9aeWR2bTYrYXVtTUgvbVR1cXFIVm5wN1ZJZnJiamp1bU9IM0xPcEdLenFWa05qaHdUb2xwY3M0REpnbm5QSlNYQWU4Z1A4aDlmd0grWVJCcGxQUEN6eGt5QTJONUVWS1lHRDNCV0JXVTl3T3pvS0V0SnNyWjVvRmJHSFJLS2tramRrei9DZTVLN1Bi''@;'; put 'put ''dS9Pclp4Yk5mM2ZtcjZhKzlPQTNEL1ExcFl6L2J5T1RhczN5ZElFZkozWXkvQVgvVXFHQm9PSDdLZ21veW1PT2J3V0RRVTdqQ0ttRklEUnNkWkpxNC8rLytiaG1MdWY5aDd6dHpmNEZ0dWRmeEl2ejJPcmJ4c1EwdzlzZGdiRFZxU05hcEJLRERQSk9UdkJBR0Z0eVN4b1FqOCtkK2RlQ25QOStY''@;'; put 'put ''ZTNNTzErTFA1SjdDMDdtanVUZm9XRDB3MXJncyt5azhDMjY5dkY4ajc5WXo2Tm1LRTl5OUFRcEFEK2dUUnduSkhjQVBydjEyZ1BqVEEycy81dkovMi9ySGNELzUyU1ZhbVJGQUxQalo5dWFqajc1SmZ0YTk1dXlHSHV2dnJKL0ZUMnpoY3hWQXYxVXU0R1h1Y3NXb0ErWnJ5TThuK3dPcGFrYjl3''@;'; put 'put ''M1ErVkpqUENvdy9CajhkTU4yYlBlVG4zZTgrUVllUDQvdncweHkzenFnT2pTUXR3T0dabHhSbXBoN2prNUozNTR3S2pSZ2pScmRmZFArbzk0R2htMjVPZ2l6NjlULzhBMTF6YnYzOVpHNzlHWmpPd2NiWXdrZE5oeEFCZ0lSc1gvdXJUSXFmNnlCSllwRjhEL3BhV2Q4cTZEa0JuNXcwZ0VqbXN5''@;'; put 'put ''YXM3c0daNjN2SVZ3MmY0RHl1RTNTSTN4QTlzaU0vK2tIU1pNT0NvaGFFZ2g0MCthWkdwYUJTS3RMY3lIUkFZNldLVUdNTGJHeXEwTnN5YXF4U29XVUpIeVhqMGxPbUhTVXQxbGpXMHlTYjh1SmpYdHB3MUtnelUvOVd2Yi9lNTNKUXo1Ykg2elpxNEtpUXhReG5WV1RFV1F2ZVdnT29nWEs0RU45''@;'; put 'put ''K1JjYStFcCsvUExHVXlPNU9UcmtuQTQySGRsZ08xa3pOOXM1UGRoSDlOUWR5MzlqVzFyRTcwemtUYURBT0x0b3MvWjA1YjNka3h0d1hDaWVRRko4bkV5RHJER0FOUFhkV1cwR1VJQzg0OUJvQWFYV1p2SlBLSm5rbzZUYXRlZEE1TnplaXF0OEdYNllFdDR1TWRna0RVWWlaakVhRWpDNmowMjZE''@;'; put 'put ''SllQczJ1UVo5Vk9pMHN2dTBHTDk0NzRyQndhdVRQVWZhTXhrR2cvMGUyYmEybVk2TzJmYjJtWTdpWDcweG16MjFHaDM5QUE1bC91M2FIZk9COFphNzk1b2RHOXY3MUtVNDJrNzROemJnSFBsYlRIYjFyYVk1WUsyMkgrZG1wdzhOUjVkOWticlJueVJ4UWo4ODQzWm85NERzYXIwNlltSlUrbG1U''@;'; put 'put ''NlRla2RnWFR5eDFPUnNqM2xaNlpuRTRzMEQrelBSQzhabFIyREV3TWtPakdNb0ZkSGR1YnNTUVUyU3UxdzI0ZnBIUkxtR2cwak16K054NmVtWllRdkVDZVBSa3MyNFVvRWVWa2cvdUZEdXRUblp5NU56YTZJRm85K2lwYlBaR09EaHNYVHUxK2N3SVBUUGlnVE16bzNwcTZRT1BGd2hUaG9pZ0lD''@;'; put 'put ''djVaZG95cWlJOXptSUJiYmZlWXJmVlVnbHU4REgzcTRlZlZtR3haaWRkbjBwMHduTHh3YVhha1BNRFhhUFhUWTVlTTNyeTF0d3U5VXBtOGxBRjNxdmVrVTU0NmpvOGJXT25wek9ueHI1NDUvUmwrRE43MHVrOUhLZEFGdVB0d1Bzc2FIZXlRb3RWU2gxR0twTG0yU3IxU0tWU0xvUEdWc3NjSG1o''@;'; put 'put ''SmdTWFBLOHRRcVFOalF3VmNaclgwdzEzSkNvK2J4U2xGMGM3bGpKdnlmdVkwNUVpb01yOTA4ODJaYmR2R0UvRldyNlplYjNVU1pTbzNnTCtlR3U5Sk94T2FLbTg5MDRPM2t4YUFIODNSK0hheXFsRkhWRXFObXZtd0pmNEtEQTFram9xc1VzMXlXVlFRaVhBWk1JMEYvcHB2UjVraHJKTzJScVZ0''@;'; put 'put ''VFpjMDVxVU54L2lyQTFRbm5xa0JtMmp5ZWIwZXlsK3h2dGlYSHQvZ1NnYzhqSlhnWWN2UWlYVC8xUjVuNDg3MlhZY0FKVWVQOWZjZkc5Mk1rc3BjNS9CcWo2K3B0OEd4ZldwN2Uyenc2dkh4cXdkaTdidHloMExib3BGdG9kQzJTSFJiaUovOU5DQ29BbWpZVEtOakJoNVhZYlFFQ2p2ekJ0dUtU''@;'; put 'put ''SEpBUkwzSmJhSStDTXJxNERnbGY1MWU0bmI0aGwwZG1ZbnV3R1JiSm1OZGloTjlaRTlQN2xrOE9EanJHWERubmdXMjluWnJqTkhFSUx4K2tmdzE2R2hhNmdYSSsvUnJLZkxvTTdKSFJWdFRYY1hjK2NwTjdud1JWSWk5RFExbVUwT0R5WmZKa0lPTkp2cXJxWEhmMmpzdy92b3I2MWxwZkR1bE9T''@;'; put 'put ''M0k1UnBRUVVsYVdUU1RJREJjVmV4WHdVYnRDaDVDc0ZmVldTMUdQWnRWTEFraUZEc0JWUGtWWEJYVVZsVjV0YmFtekhpaXNKUjNmNlVSQjVRcVR3T0pySDIzaCt0bXdKcFlMTFVTdVpNT2pRTG9YV0NtaVk2dlJ0WlA5VWFtN1dHcTZEQlJBckJ0L3NtK3A1WXlHV3pmajJ0emIveHk3NTBBempi''@;'; put 'put ''Y3lNK1JIczluWUZ6Wjk2RXI4WDFNQVpTQVcvRzJRZ1RveVkzKzlLeWpqcmsrT0IxWktCRXJsOVdpU2xBcTlSa0ZqVFFYMkRXUU9qeWtUVlRRaEtoVXR1SVdwZ3YwdjFCWFNoOTB3VzdrY3V1TmJxUGJwQUZ1VVlSZXFnMi9STXljT09DVlBMazluRWxGQjdMOEpXT2FpZlRzTk92MjloYWhYYWJv''@;'; put 'put ''blNpbldzSzlrYzYrQXQ1VG52emhaemphY3hBWW1mV2twTlN1bHpGZjJyK1Y0MHNKWVVpYkw5dHp5MDUwMjlVWEl5bnpKWkNVY2g0b2lzdVljZGpQSm4rSjdhTCtFc3VGL1NWY01SaS9jWEx5eHZGT3FoZDBjdTFBVWd2U3B5WW1UcWRUWFV1SitMNEVWdytRcE05dEIzMU9YMTZmbzNKYUJXSVFD''@;'; put 'put ''TDJnV0ZFZ0dYR3hQcWN2VmRNMk5qUmRmTFJMR09pUzlEbjVPUDRnZlM3M1czTG1RRGw5anVwUTIwR0gwcGZWb1FvN3N4VXBNNWtOSW8ycFB2cE5xdEhtaHFhTGozWUpBMTFRaDlKZlRIWmRRSWRTcnMzZzZvSVNkU0RYV2FyM3pzUExZWUJURmJyK0daN0V3WUdrWjZKV3dKTHVTM1VTRGhpelRI''@;'; put 'put ''Z0Z4WmgvYUNyZmE0c09zT216ZWhPM3ZRM3hpRGxQbXM5Y1B0NnpKd0xzK0cvNlU3Q0ozTTlwMEFhaklPam5MOEk2ZmFnakdUTERRaTFnYkNOUzhOYlpOcnVmZk1qckNYRDNFMC8raUxNMEFUblR6U3I2NUF5Q1JrSmwwSGVPaC95N2RrUUdYWkhnY3Zid1RIaC9xMmQ2SXRSWEYrMUtqSVN1bUt0''@;'; put 'put ''cTlpYUcycngxYmxPMWZTZ3hPdDlrNytsbzlvQW1hZEE3dWtOak82aStCMnZjVHU0R2ZTK2NiTE5nRlpQNVJMaU5pa2F5UkFNcEFBZXdKUGR6VFpUcGNFWW5WZUs4TkRzdnBwZlN6VUF3MFhCZVBJRzN0OFlUNDl1MlpXNisyV25WMTJ2TXpuUVBUcWYrK0k5VHViUDEzaW9ObFRuQW53QzVHYjhW''@;'; put 'put ''YUVLYnpHK0JZVW9DZjdONVlKVS9vc284a3JJSEMwWkIyWjViZGlyd1c3UGI1R1pobENMTm4wcHpIcGpVRTRHeTJTNlo2UUp5dmdNY0ZwZ3Vuc3k5eEpndW5vVDkySUY0YTRsU3p1bVN2VUN5N3FzM01HK0ZrYnV0N052LzZwSHRQNTRBeld3ZVAwYjFFd3ppRGdrTzZGL3EvOUpmMlAvbG5yMzFZ''@;'; put 'put ''ME1mdTNYMjhmRTdQem9PSXk3akIralAyanY0dnR6QmdwOU9oTEZaRG1HRnFNQUtLdCtvRndYR0ZraFJnTVZnTUZERWMvcEZ0OUVmc1NZaW9oRS84Ymw3ZDM3enhaMmZ1bnZuMTE1NTlWV3NYbnY1NWJYYzcrbTRqZXRUeEFYajZxbXVXS2tHdklZaEFibWxvU2xlNzZkcnR6TzgxaU9kd2VTVzNL''@;'; put 'put ''b1VUUWF4d0haUmc4VmpYa09kdTg2bGJmeW4rV2YrY3R1YmRWT0pwL1hKYWxOZGtvaTVPZno0Mmt2SmJzejNFb2VYVjJIT0xYeGsrZ3Y3eU9LNEkvZTMrQk81VjNFMGQ2UVgzemJlbXpzOXpzWU5yTy9HZThuendIVUJSamFtQU9nd25uQ3hERWxvc0NneEFveG05QmFxUWlsQ3VCK0RiSTVSUloz''@;'; put 'put ''bXFsdHJpTm5LZzY0aXBVNFJheGE5d1ZnczZGMmNWdlgzV3JEWDUvTmlhMitmNnZQTkk3R1BkYllsZ3AxM3hWUE42cGltcnEzbEU2RkVkVTBpOVBIV29FMFRnMW11WEQrTEh0bkMzMGExdHl2NytxUUVSK3JmM28yWDJkcWJrMTQxODVQcE1ZSzE0L0ZDT3ZFeUJkVU1yUVlnb2lsZ0JiSHU1NGxL''@;'; put 'put ''Q2NwZEVvMmtBUVBLbTEwcWVJY1RDZlgxV3ZtS0xiMzlxdW44VG81cmJNSFdqNGNTTmRXSjBDZGEydW8wTVhWektuNVhaekRSMXZteDJFaXplbjBkRGVCV2ZETitWQy9pNnZXMTNGdEljd2JoNTNKdnNRd1pLdVBtMW5lZ3J4SzlyT3V6MVZHRnhKYVJjK0tNcEVUWFovbzJUMHdGclREeWVTbVhK''@;'; put 'put ''TGpYRkNONk9YZGtiUlQvV3JheHorSzN5VFNxUTA2S0tZME5kVGFyeFdUVVZTdEpGWS90d2F3TFV0a0hxSDkxTE9lU2x5QndUejh0UHFESENMSWVyR3lQeFFvaXpZeC9PQmZLOWgzczdqN1lsdzNPT3FOdEE0T2hhTzdEMmQ3ZXJLdFpPWmlxbmo0K09IaDh1bXFvWCtsdmluUm9jbGRXZGtaT1hX''@;'; put 'put ''bkVkeGl2VFBIOElFVDZRUyt2UjZsa0VvNlRKcHdoa2VhMWkzaFNpUWt3WDVHd01CSXpIV25tbVNpeWlCSW4wbnBVVDNNRHdSNmdhckhYN0l3bFdMWnZzU3NIanBDbUtaTCt0Zjg3TkRDUU9EZzRlbTF0ZC9XT1JILzJXOTlLcDMyZWM2azdSbzcxU1JIS08xTG5pdjNZRnRTZGpKc3cwdUMwR2hh''@;'; put 'put ''R0tTYzdyTUlFMUViUVpGY3FXSmtKejQrMG1JMEd1YVJFVjBtTFNsaDVqMWxPUUlZZlJ1RDRzNCsvOXRwcmMvRHorTytvNXh0UHBtWlRKMDdBQ3o1TTNkL2MvaU1MZUE4NXczSzZPcG5IMVUrVG5BRjVXUkJrV1NsUVFPR1pNbGxkMUJsYmJKUjFGdjIrMjA3ejVPM0d4NlIzc21BM0d1cnJEZlIz''@;'; put 'put ''L2c3NDJvYWkrSWY0UlowTEIxUklKK0FBK283a0E1N0QxNUE3TDhWL1RIT3pCbkU4OXkxeVorSlMvY2RXMGYzY3pCLzNrTzhaYnVLOHpiLytLbDZITTlCU1d4QWhwaWpjUk1YdkI2bmdZaUVBRmdMeU1TbUFKZldxbDJwYk5CWlVNM3FrcCt2Z1lHN2dtZ0hjMHJHenUzdFg1MW9UK2ZPMVhUeEcv''@;'; put 'put ''RlAwbDNnRWdOYVl0QmR4QlVMWnhVeFI4blc4Q0hxWE5UWmF6STJONXA4Mldpd05EUmFMWkZzT3JpZlIvOUFNYm5RdDI1dk9hZ0k4TnRJc1FqWGx4Mmt1cngxZzRJQmdWMXhOTTh1QVM2OFdHT2wrT3N3c0tKbXNDV0RXVFZ1MTRWTGFobXhHajhkRHBUUUZIYy9pZCtYVkk1WWFDOElxSHZuZi9x''@;'; put 'put ''NVdXMWhuYkFBTngyUTAxZWljMFZxRkdQUTJlSUs2cWxhcldhODFWdXF6VkpqQXVVZmgzSC9HenIxTnBPZmVocjRyNVo2bDhUOHkvdVJCUGNtRXE5WmFwU0E4WEVrUVhTdERTTTZ3UU5yc1I1S0k4N2p0TnJNeGo1ZW9tR1ZKV1o3VXZhcVNGV1BnTUxoVDRtUE5aZkxsQ253dGQxMlpqRG0yQnhh''@;'; put 'put ''REUyN1F1V0N0TkNjeGhmNEVQWXJVWndoKzhsSEdjTXUwT1lycnQyaHpRbTZEUmZUVUZtMVc4MjJxMFdlMmFMTW5QOWRoOUZlOERkbmM1aHY1Y1NyUkR6YTI0ZmxXd25sR0N3WTBsa3pwS1h1a2NGY2pERXhJRGNlZ1ZxeG9nRGVxbGtBMWxVSmpTcTRvTWF2V29ETkFaNjNFbnlxQldXSTVBU2RH''@;'; put 'put ''YzdKQUlRRHJLaUFuNHVSK3YzczN2b3MwNUl3LzVSazVORDBybmJzVjM1eTdsZWZRSkZuT1V4eTlrNnlQeC93K2hhaXFFd0FyYkZyQTN4b01MMms3SVA4a3gzMmFmZ0lNNjJwNFFZcXJaSmVwSllPQW1VdTJKb2k2L2JCcWU5NElDZEkrQ0N0dXV0Uk9idWdVMnRCSk9IV3hYc25BNWc0MDdaTWNL''@;'; put 'put ''dE9QVzNpVlBtOHJrSjRSREx0NmtJOWFMRE9IemVSWEpqNHVJVHhaK3NCUWpVSnMzRXlidFRzK3VhTmN3bGM0b1hEaGpTVGJyVGwwNzY2U0REREFKWll2eFhDN1djTC8yeGt1NFNLYzNOem1LSHAyaXpZbjVEYUEvN2RzMFdaUGZwekQ2SHJlcG9EYjYxUnkzTWZtYXVQcldmOVl1WEd3bzZqTlVl''@;'; put 'put ''QnZtOXFzL3p1TXM4N1cwOGJYcy81a1NSc2FORmF3OWZCeERxOC9zbkU5UUVjME1QTnRsbmZSUUNzUk5tb1lTMnBNa3k0MFJTcUdWZ3R2RGRwNlZqWnFobTdWSUc4cUNyNFBaaVZGOUxMZkE0Z3FJb0xReHkvejVMblJVVGw5N2x2NGZENkZEbmVuY2R2YW4vSkV1bCttL3hOZ3dIS0RHQy9wa0hq''@;'; put 'put ''Si9TVndZdmt1REU2ZDB0aytWc0p2TnJjNWloTmJ0RGtodDRHemZYV0xOcXY1TnRYb1MxdTAyWk9mNnpCNlpSUGZ3bWdPZlJKL200QXBoVlJQcVduK04yaVFmcUFPZjhLYXNPS1JPMkozZkRqMllmb3ZpbWZZRy9zamh1UjZoTit5dWg0M0NtSlJNb2d0V0VFQ3JRMzF0aXFWVXFIQlNKbFBlNllm''@;'; put 'put ''Q1VVZllXVSs3N2xzcjdJZDhwblB0Y3pWUTlNaUxCbFZtWWlxZytjZlN2NGdDNCtEcWtvRHFsdVBjL0VoS01PcEFXNFQ5TFQ1akg0anF4RXFsQmlJN2tUQm93VGlIbG1zbUR0SEVVL1J3WllJZVRHeS80RjlYWmNISXdzN1F4SGdMdDJYdDhHdmE3L3hPUEFWNDR2QVpQRHUwMm1QSTNmUCtDS3hu''@;'; put 'put ''UjVaZnVpQXg5V3owbkY2RkxnTC9TMzM5L3Q5K1A0NDhKamN2MlEvT0JYWjc4c2RpQ04yL2l5M2h1RmFsNFNQVDVmZzdPWTJSOUcvYnRIbWhOd0c4UEdKTGRyc3lZOXpHUDNGWmw3RGRYWTJWNTgwMTBzYng5bVVkeFZpekYrcHdNb1ZGWmFpamZuQ1loQ2JXb3RKYTlWWjlUNm5UdVNaSUpHaWJE''@;'; put 'put ''VnZQbHR0OXBXU2JMWHJlYnJhVGQrVXM5VW9MV3lIdVhYa1pkUkNmVjhWWUVBd0ZZcm1xNjNLdWVjc3ZJT1hWRHgxMnVoMWVwd0JOd3NQNW4zUW9yeUVXTDVPTEY4UVJVTUEyMW11VXV3eWxzcThtS0lwekttRXQ5YzEyZDA5bVNVMTBmbFFhRDU2cEp0bk00L1RMT1p4WjhJUlM0M0cxOWI1dWZL''@;'; put 'put ''OGplOEJIRWRBY1NBb2RhamNjd0hnZTAvUjgvTnlleXd1RjdmL1N2NTVkYXI0K1puOCtJZDNGajBYN1BuMmxUY2p4Z2ZndWZCbm9IKzJvUWhLb2lQSmxRYUFuYXNlTkJ3enJsQjNZVldGQnBSbVVhV2tWUnNWS2xLeGl0UklKYXBWSzlVYUlsZHQyREkxbFZVQ2xlVVMrVVdqd1NCQzBXUjBzTGM3''@;'; put 'put ''R0FsMnRvZGhnb0FCcU0zcjhXb0I1SEl3ZVVPZWZsR0tCNCt5Ykl3eEkxcnhJK2Q5a0IveGdQUFFTWS96NU1pK294dlNQMGFYclo3TCt6ZEZvWE4zVHJiUnBKRDBFSTlIRDNiRmh4YXpSVmtoaVk2T1JDRThuVHZTTXRMc00vZUYydU04OXlISmNoL2lXSkdzYnc4N0hRcWxJZ3FtaUpnM1JSUnBN''@;'; put 'put ''MWJKT2xrUVRHa1ZuTmJWTEVaN2xXeGkyMmljVnJVTUNoQUxBREF2cHozUHpVS3NrMHFrZGN1WDFvdHFaZUdOdmZDcGkzVkx0cFgwb0lZUU9sU21veW9mSTR1anVKbXJaOVFab0hpUGFsa05wc29jUGxLaWxpV1BEWlJML25BdHRtdExiS2x1emZRMXd5WDVJSzRXd2MxdExKN3JRR2xvZ3RQV1Zh''@;'; put 'put ''ak1jMHBiWHloNmZsNXVqOFdqeGUzUDVNYzVmQmw3dnY0S3ZOM0R4bm1Wai85aDNqNEQwTE1YUFQ5cTR1My9EN3o5WHpiK3Ezejh2K1RQLzVtK3NmRjUrOE1Qb1h5OVhJSjhCN1NuSU5xZE5PcVlxN3FobnQxcVlUSWFLdkJFNXNrNkd1cVUvZm42RGRtMzlxU0pwcitCTkZ3dGZneFdiV05qWTdD''@;'; put 'put ''eHplZnhlV2xOZ2l6a1pQbG05VkdsZ2QyRmtiQ0ttNE1uK0I4WGt5Y20weWVIK2k1UEhSeHAyWGVEZlUvY1B0WGlPR2dmdDgyMEJXWmpuYk50d1cwUlV2V0Y1Ym1iSjFMWFppYmVuOXcyT3hjZmFHNDJORFhaMndZY2F6OXEzNUdJTG5TR0YyS0p4UTVhMjhiaW41UjNiZU84YTdFQTkzRUd4emtP''@;'; put 'put ''M3h2TFBhZm45MWpSOC9OeWV5eGVXOXorSy9ubjFidUxuNS9KajMvNGZad0hwdEMxcEliNG1JL1FqaTdqOTNEUTVBL21oa0lLRVNzVnlvTXFPWGh2bzZFOUYwSXE1ckJhTGJSVEtoV0xRRVBLWmRaaFpsZlN3cXhEdTY0T2hKM3NZRlJUYTcwNG1RQ014T0ppTm15VXJQVFhhZG5kOStReXRoZGs4''@;'; put 'put ''M3c4L1ZTaGVrM0l4MTZ0WU1XMjVQVTRFMmhrZmwrZHpWb0p1cGQ2Z3g0SEh3bEZIeFhyY2VWNmxlMVFSbyt6YmFuSEZjZjFMcTdIMmNycGNSY2NndWx4VHFlenhkbnNOZmdORy9TNFlqV09hbkVLcTVFcmNSYUs1WDRCNUlqTE8zbmorT3hJdzhLd3l3ZWNhR2FzY1NHVnU2bmxuWTQ0c0tKL1g0''@;'; put 'put ''ejQzd2tuOENmM1JpWk9wME91YWM5eUJCaFEySjE5SjQ1OUx1QkIzK2xhU2d4MzUvN2VDZmpGNDB3VVQzZHkvRDNNOFc3amM0cS9mMXIwL0x6Y0hvc0hpdHVmeVk5eldNSmZIZ09oNCt5Vnh2bE1VYnliNThJTkp2dWtnSGY1WE1PaTJQT2xoSjMxZjNqWVdWZ3RtMGVZMzhjWmFSK3d2MTJveUZj''@;'; put 'put ''VHlmdHpqa2gyV3JGZHhQV2JPL1A2elpGTWNkL0w4bjRlamFURGx2WjlMcThEYWJaenZ1dFlueGRjekI5dG8vQ3J4U3BCcE5GVHJDUkNXc1FxUkEzWnc4eWVZSmNlWldTTjBvaW1yRmFyeldyejZQVjZzMU10MWdXVTNBdVg4UE5hUEs2c2RDWXFpZUJ5ZDNUMDFZL2s2L0pzemlaN28vN2Y3di9D''@;'; put 'put ''SnhxNk81dnJQOHRLOUJ3MmU2TVJqN0pDUFNuUGQ1NE1BbjBIVUFKZnpvbXVucXBvOVpocWFDSUpoelNDV2dTeVZBZEErMURKWkY2MmpiTFF4blRSY1M0OFJKNER0TUFhUlRVUlYrVTdHR3hnNHF2VjNHZHBaYUhjalhsd3dkSU9BRTZ0MUF1VmRqSzl0MW5lNHdTVWUramIydG9TYlhHZnh3ajZh''@;'; put 'put ''Yk96UXF5WGp6R2VpRzJsbjVyMTh0bjZpdEtSeVNBOVpZdStOQ1Y1OVFwKzRMK1NVNVBwc1Z0YnE4WTI1U2JUZkdXR0JaOHU1Q2hML29DUE12dkxKOWxmLzFGaXgvSDhYTW9meGlUKzhHZEZmVS9JZmJFYXZiQkYzL05TWDRMVlhPZmhOWStzcjEvcWUwc0pYZEZjM0IrUmM5Qm1uTFhSQ2w2aEdt''@;'; put 'put ''bWd6WE5DTlcwRWJTVGZFRkRzelVqTzN6MEdQS3NPUHZuN3N3WUYwYWpsc0x5UGlrK01CQ1ZhZ1lQUzVjdU5iUmthRWVLWHVHanp5VHF0VzdabWtvSjJZWkxEbXZkOVh1cjQ3MlZvaWtZR3U5M2VhbS94MDR3Rm4xc0tVN2xMVW56bEMzUFE1aXlWWTBNYjBsUWVmVFF6bFB0OWNhN0s1TnF6UmZt''@;'; put 'put ''Ky82c3ptVno3OGdidW12Y2JSdkord3lQb1dMbXpCdjMyenJ4K2UyUUJsZk01NGdyMDR5MzZ5cnF4QUcyK3p1c3FnVS9SV3RKNk5KNGMwWUhLb01mMGpnKzVBb1FTbjdpRVJGSHlubE9ScE0wd1pRbUkwNmlVdzQwbU42M0cwbE1TbEd0WTNUS2RXU1hXV2xUVU9zTnB5a0dKcmk3M2dsemh5dWlu''@;'; put 'put ''QStqTDI4RHJVbW1NOWlETGc2YTN4ZDJTTkxwZElDTnJNRkdxUUdNV1FkbWc1UkpPV2k2UFZLRElxUlFyTkJaYXNJYjRPV2ZrR3d0WWRwZFhic29BZ0ErVzYwRXprWFUrbjYvTkY2aDFHWHhldDV0WlR4czNwTnFjVk0waU42S2NXbjA2djBXMVdyc2h3VG9FTm5CTDlrSEp3TlhXU2JzMkdYRWgy''@;'; put 'put ''UnBzM1RZci9pN0x1QzdqZTFhWDhUMXZ0b3ZVa2wzRWFudVpqRzJWWk96TFpmeW9ORitheXRnMGw3RW5wYjY1dDJoZE1POExlS01sQnNrUENlMEZLNnBCSVNBSU1ha1BOaEcxV0d1bERpTjZWdzZhNEV3aFVFa0RNWUphc2FxUjlmQWFHajVRTGxlb2lGTEp3L25MUEp3dmNZWnd1UzRWV0tYUzg0''@;'; put 'put ''Nm90SnZwdmM3MG5pZWhqTUlSRGxQWGQzZ2czSitJYVVQYVVLREY3YXl2TXh1cEM3eTJTallRS0E1d204RDZIcE8xc2FQZTduTzROY1k2dS9FL0xpbHZlNGV2MFJadHR6Yjc3VWFEZmR1bEpuR0RMVXVMbi9TTTMvQzR3SkgxZTB0aUJ6K0VObFdNMzNCNzk4aG5rSlFITTQvZUJKNWhwRmtUYXRD''@;'; put 'put ''NGpEeS9ScjVXaDZkWGNUbnQwVnVjcklSTEZzeWdtOHFNNFUxS0d5WmRsak1ESmxlYnE4akRramJGOUNoWXhUeDZrY1g4blNpWjdEZWJpRUp3WW40TlVlR1VKVk5EbXlkZ2xoemlhQVFMM0tLdExwdVdiWlFYWktWbHhmS1M5a2s1QUROMGFVMFdhOGJMRjFmSUNWaXp3enJyMnpVaS9wKzFkNlNG''@;'; put 'put ''QXAzUXVQMURoVGdMOEZmTkpqOHJ5K05HOXhCbFB0OWFYNUp2bmNsa2FQSVlqTGNYNk80V2tMc3VvQzlHZC9pSDNHY0J6L1dNSHJQUzgwK3o1NnkrbStrWllVblAwSmJRT0lBRU53aC9CRzFtcERZV2RKYTNPU3UzNFhYaTUrUnhZUHk3bUU2QWkzUUNPczRJYXpNanRmbVRqVzE0ZlFqcEJ4eXBw''@;'; put 'put ''cG5GVlpVVkdqQkNCVFdSSytZM0ZaOVhvMnB6dnZoY2pGRWtTWmhGTStuUDljN1Baei95a1hRYW13T1pBSjdKL1hnOE0vNWJxZjZraHVYRU81SU5sUldpaWtwOHRWU1JyNU9LUzgzc3Nqb3Nna1VrRFlwcjVqSlRVNWs1ZkZscjdwdFk3OC80OFhMdW02MEZuZWtoQnNNT0NUNy9XUUpEN2dQNW51''@;'; put 'put ''UURvYnJhbzd3dm5NdEQ3THc2SkQ1SmVIdDRyaUI2dVQzQTZvV2l1VTdrWTF0cWRHNkx1YzduL1MzcUU2Z294aFRKeDVpT1NIb2gyU1FMeGhudGNwL0prY3RRdVZnWXJrSG5TMkx2bS93NXVPWmFidE9BR1NoOEg4N1VnQnBvemtQK1pnczF5Vjl0b2FFbC9ISnVIVE5VRzR6MUZoUEwrK1VLZ3Ew''@;'; put 'put ''UVk1ZFpJUTJ6RjlTcENGY1IxbDdlOThYOSs3KzREM0RBT0R0NU9wTStuZVpLd3VLZjdWdis0djcwMmorVHB1bGJNNW5yVWtqeXB3aEFHY0FsT2xBWDJwYk1XckZhUlYzZ1RKc0JWcTlVSzFhcU5FU2xrdjBWbFdLRlVPU3g2T3gwdVJEcTdPcE14S0t1RGxkN2F6T001VEI0ZkI1dk5TeDZvK083''@;'; put 'put ''d01NTHd0K3hpWmtqcmdZSWJYS0ZsZHQ3L2VnNFM0MGZ2YzdyT2praUtRTzVxNHRTNVBIMUcydXYrbnJIZWRMOFdFL3ZLRlVMaXJQbTgvVllrbjV3a0oxclRNTGRyNVhnQk0rSHB1ZTZ3UDJkODFKZndOR0RESGRqRW82K3lOdm4zcUw1MDFKNytyeXBhSzRUOGx5QXV4OHVPOWNWREhjWE9PN1c4''@;'; put 'put ''N2xZblQxYloxeGE1MzBsZU0vem9lazZkL0IxSGtOU0RtT1MxZWdQMC95S1dMU3BVYUVVN1RUcnBrNEhhb2VXNVZmVWI1bGZJWXJNTlc3SmV3RXVKYi9pb3AzSzVsZGNwTmVXK1JXbC9hVDhDbSt3bWVaWEdGaCtCZmZKbDArdzhGM0tiUVFrSEZtWjBKWkx0dmpvWlJlOG8rQ1Bkc1lGOSthc2k4''@;'; put 'put ''b0RGNzYxZ0o5ZGNEM0pjdHdIVVM3WjFJRkZWV2RUbzZBVU42YkhLQytRSGlQQnh2YUhISi90RHpvKzJ4OTRmTGFTNC9NRW1pOHRQUVpmTkprZnYzaGdxbXllVEhpZmIrc1UvK3lDc2lSYlJ1bHZ1a0RTZjRGV1Q4aTBDblIrZUF0YVBTL1RLbGJIOHVmTjdxaHdvaGVTT2xyaGpxelZJQm1xNkNX''@;'; put 'put ''Z1V1NGZERUF6eTY5bTBWNXlpdm81cFVRdGpab3daWTRRdkIvRXVSM0xSOVZHdXlpUWNOTWw5VW0yYkdwTzd4a2crRkJKTHdXOUpGc1A2M1lpS3FSb0dxR1JtckxzR3MyeUowWGRBL1IyRGJ4Z0xITVk5ZFgweW8zUUpvaW44bGR3c0hxS0pLdW5DS05Ya3JZV3JCWmF6VVNqRHBvSTBlUWprOHEw''@;'; put 'put ''VEFsS2hmSzJDa3pyVnpWWGd6QURNTlA2VVVGUUxLbDRGV2xKZERGWTZLUFdrSnN1MWluWldyNjlGR0VzNmlaUVdGRWJNSXpDck1yREN0Q2lMcE10UW91NHRQVER5a2dBdDVYaWNIZWhIc1JiNzlXVlJoTEY4V2h4a1VqQ292YnlHQ0s3RTRYaGFrTEMxV3RLY0pYV3NQeWE2YTJMWEc4bHZTVzZM''@;'; put 'put ''YytwaU9SektvNmd6NVhxMGN6UGYyZmV6MzlrdWpqMzR4djVuSTFLOUZwSlBnYnJ5K0w1TEtZQWJXNHRseE1DZXRtalpmc0dDbkVLWExNWFNmZTV6TFA3WER5b045bGxCdDVVRFNjTC9CUUxhZW1HTFBsK2VCWkNLQmhJME1QanFYVjdQUHkrTEpaQnNjbHBzK242Ri9LcHlkdm10ZWE4WjhOeTJR''@;'; put 'put ''ZWtlMkRJRSt6V0YxMkQ1TXh3TmxqdWZWL3hwVEJTelNtc2RRNXNJQzk2bXpzSWFqUmdQS294RnJ5NDZMWkc2YW15OE5SVXB1M21abm52ZHIxVWtFUnJlYlp5YUR1a050VEhuQy82S2VQRHZ2QllGeCtHU29BS0R5M1liR2IxVUJ0ZDFCc0xpUXEyTVpuakR1bml1cUpNa2FIY1dqV3h1Y0lvYjQ0''@;'; put 'put ''eVhLZDM1VEI2Nk9INVEzaXhCSTk1UFJIbDNic1pMb3JvSjBVNVF5ZmtuQ0Y0L3BHU3Zqd1dkRjZPQldGeFB5cnF1eWVmYjNRWTNWYUN4K3dPRzRici9aSU8rRlRKK0x5R2grTDZFdGNCcjBkRmZmZklmY0hPL3RzdCtwNlIrbEpmNStlSytwN0k5MVdqVTF2MFBTL1BpOVhEREc5WmJUaTEzYlhV''@;'; put 'put ''NTBHckRHamRGZk41c0NJbXNwOGFGWFpHVkZwVVUrNzZONVZiS0tyNC90TG1NbStwSG1DR25ML0UrMnlzOUQ2YkI4Y085OHhrdThuNU8zZnNLRDlHdnM2TXdFa1FjbEtxTXBQR1NFUkU5MkIzZHFibjhCZzV2MlBIbmRJWTAvZ2dlUTZzY3FuS29vTFFPb3MwbUZQVXoxRmFGMUNOcXJ4Q3ZzcEMy''@;'; put 'put ''alN6bHg2WmFneWJZblYxTVZPNFlhcUZURGZDbnhZTC9OSEU1bGxBbjJPK0hSK2I1NEkxQjVzck9IYVhWR3RJTlNMVHVGcXdzeHFSTGpacWtENEhEVzFWaVFWZ0hZdjU0bWJoa2lwRmlyL2o0c2ErdmtBQWZtcmQ3bHI2UTZiNTM0RytOdjZnMXMxckgrWXhKWDA5Nm1FckNOZkFaclFVWTlKS1Z1''@;'; put 'put ''SEJLclVBcG91TUd3djBreGxlL2VheEtLUnFFZWs3R1lxYzZEZjJOVm42ODQ3eng1Z1h5aWk1ek5tNURaRisvRUh5RmRqNU1KczNBYklBYTVodnpvVHhoQm9MckU0TnpuS1YzZXkwS0YvOFFvUVpwcTFhUUpRckplUkE5SXNUQ2xsZCtib0VYTjFrMDF1cVRiV3FrRzdXWFBRN0dUUVl0VFVPai9n''@;'; put 'put ''QitaMmZ4eUIramRXNGlLaU9yVXFyQkl5Y29GYjNTYU1oWHh0akZkMWVxZGdGRC9HS2w1cy9iampOYUc5YjdxMzFwOVlmUnpYSXcwYXcxWlNwdVBQa3h4STNmam5CNDl5ZldsdHY5NzNML2FUTVo1cm5rVGZJUEJLbGNIUUxIdms5bVVlaUZIcXVpTDhXK2g0Rm0vbGlmWS9pMGFLK2UvSjlEK1Ba''@;'; put 'put ''RWg3Sis1N0o5ejBNZkk3WjN1dmJhYnltT05iejdqclhZZDVkbDNTWWRwQ3hIbWEzVDBodHZ2NXVqc2YxM3MxSmJYZzhZVFUvVGpVNnRFVTg0U3Y1ZUVMMU5DcWJVNXBDSDk5Q1Bud3ZueXVRV3BIdXZFZHZFZzJPWFB6N0lMNmZDK1BJdU54SDZMbUVQZ0o1TnlmM0djZGZSdWZJQTRBem5VOEJ1''@;'; put 'put ''a3hrbnJRVWY1R0tiZE1YcWZES3gxMVBjeXd5eWc1OExxaWZwMTl2MFZSTHY5NkMzRTYvMzhMczROOXZRWDEwK0t2b0pmSWdRRUVMVUVueE9rYVN5dGN4d2pyd2JXd2REYWpuNllZYUlpK2xtbDErdzc3cmh5M0d1S0dVVFdEc2I5ZFpUNjNId0c1YzI3Z2k2NVlMZkd1THRkYVhyaHZmU1I3VStm''@;'; put 'put ''bTYyZnEvQ2VzMzVOZFBVVXJlQ0FZcy9CS2V4QSs4dDlxd0I4YkhPenJHeGpxK3hOODZ4am4rVEFKZWphTDlnQnRnYytuYzhQcE5odU42VEM5SkUrbDNMQ2tPRkgzSDBpREt3R3h2OHZ5dURpMVcxdkN2UUZKalZSV3VxRlJWRkg5dGtySGFJRlJXQ3N0NmpVNVVGSC9iVXV3aUhkazNKL0hlSXUw''@;'; put 'put ''dFNOKzUxRjIyWDVsdlhTcnBDNHBmZkdvcW1aUy9mV2xxY1dySDNHd3lrMHlQamJRUHRnOTB4Y3QrRTVQcEQvZ21Kc2VtdnoxRmJSM3g5L3d0VFhpaTZJL2NXZms3bSs1L3oxL2VWUGFMbkFwZjZFVHZYWXppQ3VDZFNxUjZDclRyOXNBZ3RnTHNmQStrN3I0NzljNDNkRTgvcTVmdXZJeGl2ZHhP''@;'; put 'put ''WU8zOENhc1loRllQUERENjdOTzZiN3pDWk1VYjByM1RZVFNUbktxM0V3Vzl2YUlTMDI4dVVJQUFKQXBoUllOSkJjYVZ0TDRsWDlCVWhTc3JaWmNOczIxRGJZSFdGcjNCQ3phcjN1aXRCdnUyY0krV0h3eGFhaHZCMndBcFZOVFNqRUQ2ZlZGTzVnN0czK2JYVW1jK3ZHSmR5aExsdGtOMUIyK2Jr''@;'; put 'put ''T3FZcGova3dvbmNHWldBNTNJdk9qNHkxOGV1cWs0ZUgwL1ZhZTJPMVBDUlhsYkV0RGlXcW04eW0xTFp5L2ozL09BV1VvTlBBQjlVUFFWS1hUdmpldnltL3hPc1dKa3FPcURxQ01DVm5Yb25FZGJXNkE4cTNMdkc3d3hSUDJNelZpdEplNWw3ek43akhSenZITmp5Q2c0cHY0VFpxN2hkaXBXY3pl''@;'; put 'put ''ZWRCR2lzbVQwdnhKcjU4L1A1NStMTnhjL1B5TS9SNGV1S254ZkdUNkVQRlQyL005Lyt5Qlh5dlNuejVBYUFBWTE5cUo5cGNSc3h3S0RFSEpNaFViREZmSnRoY2dPM3pZb0JJOWxtLzEwRUg4bE8yMUVFSXNsRXU2YzB0NDZ0bWZvRitGNXdKYnEvYUM5ZnljT2srbUQrYmhQMGVYWjNrNHdMRWIx''@;'; put 'put ''N1hycXVpWDYrdmgwK1Y1WitybHliUWY4UDJ6K2Mwd0FCQUFBQUFRQUEzNXZtaGw4UFBQVUFId1BvQUFBQUFOUEJuWVlBQUFBQTFMNm05ZjlSL3UwRVlRUEZBQUFBQ0FBQ0FBQUFBQUFBZU5wallHUmdZRDc2N3lZREE4dkUvNEgvVzFnU0dZQWl5SURSRUFDbElBYWhBQUFBZU5wMWxEOU1VMUVV''@;'; put 'put ''eHI5elhnZWlnOEhCUVNzYURWUXRmNldCS21odEpLTFNwaTNQb0RGYXc4QmswQWdKTGtZUzQ4UkFRdUtpQXlRZERIRXpjWEZ3Y3REQlJDWUhuUWhMYllpU3lBVFI1M2N1TFdKYjJuejV0ZS9kKys0NTMvM2VsWFhjQmorU3BvNVJqZkJsSG9OYVFFVEgwTzZGMGFIek9Ja1NCbVVNNTZsMmVZNCt6''@;'; put 'put ''ZUdpTkNBdGs0ampONjdJUXJDbXI5RW5vemlvYVhUcFZaelErOVIxeE1sK3ZjRTVlY1RzdHh2UHVSelRhODhoVTdLSlE5NER0T292SE5WWHlPc2l4MjZRazhqb0tQV2QvejhqZzFYK0RuT05aN2lsVVF4NEk4aDdTa1Y0L3lreWpqTWN3enAxQ20xYXdvZzlNM1FHemZvV0xicUEvVHFOczNJUE9k''@;'; put 'put ''YThTWFpKQ1QyYURmN0lKU1QwSEU3clkvamFoRTZ5UjMxMHloM09mY1RuWnBIR01oSllEajdvRVF4aEJTbHZHaW03cmcvZGVOL215Qk42dUlZMm1lQzhMTzkzczdja2ptdUV2ZVhRcE1veE00aktBWXlUN2ZLT3ZqWmkySzE1bDU2d1JubkJXdmFnVmQ0ZzRlb2FSd1EvTUNCeGR6MUd2N2E4cXFN''@;'; put 'put ''UVNQUFB2TnNockFhZnpEL3lKMVgwOXVKVXhidHE2V0VNTzVwL08yWCswV2U5Z0d2T3F6cnlQcExXaS8rL3pEZjZOMFNXcUJYVzFML3RYYlVzRjhhczgvZWZ6RC96MldqOTJwclZ0TjV0L1FvdFI5d1g2MWZudUtmbWg5VzBHeTFydHQ5bDBxdHZyUGNMdll1U0FYblorbkFaWkE0c2g1YUZiVEl2''@;'; put 'put ''MG8xbTg5YjZxNkg1eXQ0cUREVWdGZ3B6WGViV3NsTkRlK2VZcHhwT2xUTldvZTJQZWJRTDdSMXdPYlE5TlAvSzc0TGxzWnEyVnpMTDdKa0t6UHhYTWtVbHFQZEk2ajVlUTVDclBMT2FOWjZXMTVSMXdDdHVuVGZZb0Y0Q21rVGNtMENjWjhLZ08xT1d5Q1d5Z0pzNnk3T0M1MUpvRGgzU2l4YXFU''@;'; put 'put ''UmVEb3N1SHg3bmMxenBmSC81ZjdSendwQUFBZU5wTndsOUlHbkVBQUdBei81U2VwNlhwZWQ2ZHQvTThyN3ZUenArLzAyTU0yVU5FaU1Ud29jZUlJUkU5UkE4aEVURmloRWhFUkE4UkVqNkVqQkVTTVlhSVJJeUlpT0ZEaE1RSWtSRXloZ3pwUVNTa2g3M3NZWHlmUnFOWi9xZWdPUm5BQnRhMHF2''@;'; put 'put ''WkUrNkI5SG5RT1hnNjJkVGFkb0V2cTBycVNycVpIOUV2Nmd2NlBZY2F3WW1nYms4YWNNVzg4TTlhTjdhSDRjSGE0YkVKTUtkTzJxV3BxbWFGNTNwd3hmemJYelYyRVJxYVFYZVRHd2xuU2xxcmxBYldoVVRTTjdxTVZ0R1UxV0FscjNEcHYvV0E5dE1WdGR5UFlTR25rWlRRNTJyZEg3UXYyTC9h''@;'; put 'put ''bXZldklPSnBqM0ZqVk9lTThkblpkSWRlQnEreHFZVFlzZ1dXd0M2enVKdHlTZTg1OTR1N2hVWHdWMzhRTGVBWC81VUU4SzU0Tno1Mm41ZWtSUXdST1NFU2N5SklwTWsxbXlCeVpKMHZrQlhsTFBsSWg2aTJWb3RKVWhzcFJlYXJpelhuejNwTDN3bnZyZmFScGVwWGVwSGZvUTdwSW45SG5yOTR4''@;'; put 'put ''REJOaVhqTlRUSXFaWTVhWURQT1I2Zm0wUHRTSCt6Z2Y4TVY5Uit4N2RwbGRaN1BzUGx0Z2UzNnQzK0duL2NBZjkrOXdlOXd4ZDhwOTQycGNrM3ZpbmdQRlFEbHdHYWdIZnZJeS81Vy81dS80RnYvRXY0dzN4anZqZlVFV3RvUURvU1JVaEN2aFh2Z3Q5RVZFZkNNdWlHdmlscmduSG9tbllsV3Np''@;'; put 'put ''VC9FdHRpVEpxVXI2VjU2bERwU1A0Z0VzYUFRaklZY29jNkVaZ0taT0pJbjVWbDVVVjZYcy9LaFhKVEw4bVVZQzlmQ3pYQTcvQUtHQUE0a29JSUVtQVdMWUJWOEFqZWdIYUVpMDVIdHlEVzBRUURuNEFyY2dMc3dEMHV3QXIvREJ1ekF2b0lvMkgrQWtsUTJsVDJsb1hTamVGU0lDakU2Qm1QVHNY''@;'; put 'put ''THNPbFpYVVJWWE9SV29jVFdoenFwRjlVdzlWMnRxNHk5TU04bWdBQUFCQUFBQlBBQmdBQW9BUUFBRUFBSUFLQUE1QUlzQUFBQ0RBYlVBQXdBQmVOcU5rczFPd2xBUWhjOXQwWUFhNDhLNFlHRzZNTzZFZ2dRaUxqVnNGRFFTd1MwSUFwRmFMY1hFclUvaTF2Y3d4cDhYMEkyUDRETjRlanRVSlkw''@;'; put 'put ''eE4rVitkODZabWQ0cEFKYndDQk1xa1FLd3l5ZGtoV1dlUWphd2lCTmhFMldjQ1Nld2hqdmhHYVR4SUR6TCtJZHdFbmxsQ0tlUVZnWGhlUlJVVFhnQkRYVXIvSVFWOVNiOERGdDlDcjhnYWF3S3YyTE9XQS81M1VUYXNMRURGNWU0Z1ljQmV1akRoNFY3UG5uWXlLRklhbE8xNk90cno0aGM1KzR3''@;'; put 'put ''YThUY0MyUlFSWmQ1bnE3a1lxaGRSNHoxTU9hcFJTVkhsNjNYTm82eGh5WnFwTGk4amFuTU9JODE1V253NURFKzBPOWovZWoybnc0TlJrL3Bjc25CVFE5WW84czl5TzFRYTVFUHFRZmFQdmZPSDdNSTV1ZnpWRWFXNi9wWFpWZlhkYUtxR1dvdXo1T2NrV1QxcVBxTWpqbjVpU2ZMZmRMVDBUZjk3''@;'; put 'put ''cG1OdldXVHNUYi9iNEhEajJaU2xRbFZ0R3B4RmJWV1l1OGN0dmk3aVVMMDlVczRwNitycTNveTNVcFVzWTRydnVPQWlrZlA4QXZjdlhoekFBQUFlTnB0azFkc0hGVVVoci9mc1hmZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQRENNK1VKRUwwS0pI''@;'; put 'put ''aEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pOZDFMS2JQZXhsSDNY''@;'; put 'put ''VTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9GM2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1SWNGRlhJakRHQ21T''@;'; put 'put ''bkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xkTnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQL21TcjFTcW9NcFVy''@;'; put 'put ''Z3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRYY3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29hOXUwTEhQMkQ3TGhi''@;'; put 'put ''OHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdjeVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJqb09KMktEMXRPYWpS''@;'; put 'put ''bXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVVNk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25ySFhhc3FXczFidEJy''@;'; put 'put ''SE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5mM1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZiQ2N2WW52cUg3ZGx0''@;'; put 'put ''eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xIQm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RRTkw3MFltQnBmTnJD''@;'; put 'put ''bHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTluWUFBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODti''@;'; put 'put ''YXNlNjQsZDA5R1JnQUJBQUFBQUZYd0FCTUFBQUFBb09BQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmS1RiTEVkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2ZBQUFPZGoraGZYUkhVMVZDQUFBSk5BQUFBQ0FBQUFB''@;'; put 'put ''Z1JIWk1kVTlUTHpJQUFBbFVBQUFBVGdBQUFHQm9xYTMrWTIxaGNBQUFDYVFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNRUFBQUFEQUFBQUE4RWQ4QnkyWndaMjBBQUF4QUFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVud0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNoQUFBT0RrQUFHMDhzTkd5''@;'; put 'put ''TldobFlXUUFBRXJBQUFBQU5nQUFBRFlMYTRZSGFHaGxZUUFBU3ZnQUFBQWhBQUFBSkFlRUJDQm9iWFI0QUFCTEhBQUFBb3NBQUFUYXNuZzVQbXh2WTJFQUFFMm9BQUFDYndBQUFucHlWVmZhYldGNGNBQUFVQmdBQUFBZ0FBQUFJQUtSQWg1dVlXMWxBQUJRT0FBQUFZVUFBQU5rTCthR1NuQnZj''@;'; put 'put ''M1FBQUZIQUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZXUUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlY2QUFBQUFZQUFBQUc5RzFZbUFBQUFBRUFBQUFBMUNTWXVnQUFBQURUd1oyR0FBQUFBTlMrcE90NDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RG''@;'; put 'put ''UmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0xiRlZWRmwzN2ZPNXIzd01zcFh5RVVna2hVQWhXaGpDaUNLTnhtbHBJUnhtc0JBMFlOWTRma005VVpLYkd5R2NVelVqcXhKR0taRUxRTXRwZ0JVVEZxa2hlQ1A2SUlmZ0pFaXdFSzJM''@;'; put 'put ''OUFTb2FJOHAxM1gwZmNFdjdadXhLVjNmM09mZmNzL2RlNSszeklBRFNHSW9wa01xcW1sb1V3TkdETUlUbEg0R0JuZk9YdW5rb21YdGozUnlVenAwemR3NW5nLzVvTko0UnNlVnphZlJER1lhcngySVlhbXhMUEJvczBGVWxhRURBaDZUblFqNHhVSDBlSmFjaHFBb2J5QjRUc1FLL0lKU0JNTndH''@;'; put 'put ''NThrQWFVTUdQYml6STJFMmJBNzNodnVSNXlmOEp1L0k3bTY5bjJCQXAvOC9DLytkZDRXT3ZDTnRlVWYyaHRrOEk4M2h3WEJyaExPZjRPL09DRjEyaXZEenNJRlpNaGpDVEE5bnRrWVFCaFdFeFFXRXcxakM0L2RFZ1BGRUNoY1RCWmhBRkRLM0UxbXBSWVJnS2U3bnpBY0l6NHl2b1A5RlF2QVNJ''@;'; put 'put ''WGlaTUhpWGNIaWZjTmhQZUh4Q0JQaVVDUEFaRWVBb2tjSTNSQW9uaUVKVzd4ZXVGaEpwS1pJaUZFcXhGSk5McElROGtKVk5jKzB4Vk1rd1BqT0tFTjEzdkdPak83YTZZNmM3OXFna0NsQkZGS0thU0dNYWtjRjgzTVVWb2tnQ2pTVFFTRHdleGtyT2J5UUs4UmhXYy80VCtDL25QMDFrc0pGSVlS''@;'; put 'put ''TlJnT2VJRkRZVEJYaWVTT0VGb2dCYmlFSzBFb1hZUnFTUkpkTFlUcVN4ZzBqamRVTHdKaUdhblFBSGlBdytKdUs4R00yTDBidzR6WXZYdkhqTmk5TzhPTTJMay83U24vazZWODRsUnpueVhMV0NHUnJPR2xld3RtTlowL0hNekFSbVpENFc0SytvdzUxWXlGb3V4VEw4QS9jeEN3OHcrbzJNNkhs''@;'; put 'put ''VzhpVlc4RjFXYmo4cjlpa3JkWlE3T2FFbnE0anZMWW5PbDdsWHorRWJVc2U0ZTFKZlc2bTdodkQ3YnRTcUk5SDV5RHZ5SlhHc215ZVA1VDBiWCtiKzdndS9EZytFRDRVUG5UMlNPNUZOWWRQcC83NUlqSHl1enhpVXFpWkVOV0Z3RFdGeExlRndIZUV4a3dpb2lKV2NFNmxCVkExRzFXRFFRZ1RZ''@;'; put 'put ''UUFSYWFkRktpMVphdE5LaWRUVTRSRmdjSml3NkNJdWZDWStUUkNDOXBUZnIya2Y2a1B0S1gzSlVVZEdLaWd5U1FWemZZRFRPSVRMb1RmUlFwWXNxM2FqU2JVN3BWeEJKcFR1TkowakVrMUtsMjV6U3oyamNhVlJPbzBwcFZLZVVIbXM4VnZjclJINWRSOUU2MWF6SlJSZ3AxMnFjS2RXdlZmMmFY''@;'; put 'put ''TXlSaWswdThrakxKaEYvVXRGV3M1Q1NNWEl4M3g1OWVsVXh3bW1zMTdXTWF5WWphV1FrcS9BNG8za0NUNklKNnhqUjA0eGtBMDlqSzNlYjVTNTNjSGVIV0lNTzd1d2tkOUNIYit2UHR3emlpbVdxWjROZTJsR0t3NlcwaTluZkxxVWxhbC9LVHRRV2xKSGJtZi90c2x4V3lDT3lTdGJJT2xrdm0y''@;'; put 'put ''U0xiSlh0OHBic2tnOWtueHlVdy9LVmZDcy95a25qVE5vVW1YNm0xQXcxNWFiQ2pETVR6R1dteXRTWWFXYUd1ZDdjYkdhYkJXYVJ1Y2NzTXcrYUJ2T29XVzNXbXFkTWk5bHNXczAyczhQc05Mdk5IdE5tMmsySE9XS09tNThzYkdCNzJHSTd3SmJaWVhhVUhXTXZ0QlB0NWJiYVhtbHI3WFgyQm51''@;'; put 'put ''THZjUFcyYi9iZSsxOTlwLzJYN2JSL3NjK2FadnRCdnVDZmNWbTdSdjJIZnVlM1dzUDJFUDJDM3ZNL21CL2RzWVZ1RjZ1eEExMFE5eHdOOXFOZFJlNVA3aEtOOFZOZGRQZFRIZVR1ODNOY3d2ZDNXNkpXKzVXdUVmY0tyZkdyWFByM1NhM3hXMTEyOTFiYnBmN3dPMXpCOTFoOTVYNzF2M29UbnJu''@;'; put 'put ''MDc3STkvT2xmcWd2OXhWK25KL2dML05WdnNaUDh6UDg5ZjVtUDlzdjhJdjhQWDZaZjlBMytFZjlhci9XUCtWYi9HYmY2cmY1SFg2bjMrMzMrRGJmN2p2OEVYL2MveFFnQ0lJZVBCMzFaaU41aVhLbGNyVnlZOFJZck55c25tWEtLeE04VmJsQ2VaTHkzeUkyZzlXdVZhNVNIbUg0bVNybHloWEtr''@;'; put 'put ''eU5HdmZLejV0VlR0bHlpUEVuOTdjb24xRE5LdVVsNXBISkcrYzkyTnZrWjVmcnVtVlUvRTJPMStyc3dwaXR2Vmw1OGhtVldITHZhODVUZlZGN1psZU1NcU4yVmE1VkhtT3ovWTJvM21hdHNkNHlweWkzSzlXZVkyY3RxOXY0M3gvbk1kc3NqRTF5ZjJITW5PMUhUSmVvdlYzL1NydFFjUHFiMnJF''@;'; put 'put ''VG00eWc2MlRrVitiUDhqV3BQam0yZEUyc21yazRjZGF6UG5KM3pSM09hMVg3V0xqcWwzcHpHUGxUNy9jak8xVFRPV0t6dFdIdEpmMXpaT0cvdnFiMVlhL1NSNnZ4cm5UOVYzOVd1Yy9SRXhMcnQ1SzlRKzBTdWdodFBxenJwajAvUXBJUm00b29rN2VmVXZqWDI2M3c5RjJhdytwdlVIeXR0Wk1L''@;'; put 'put ''dVVzNm9KNTk5WE8yN05icXIxTjZqZG5MbDZuQUwrWHpsWktXU2I1eWNPOTNaMzhDZFp4cWNwL2RTOE41VnpxeEV0MVBIcmoyYVhUQzZZUWY0SFc5aUtZekRSZXhoVWVmdXhiNDlpVDA5NnR5OTlZNWFySjI3RC92T0ZQYWhHcUl2cm1LZjY4ZE9ONTNmZldZUXBkckxCN1ByeldMWG1zKzcyeEM5''@;'; put 'put ''dlkxblIxL0Q5ZGF5OC8xSmU5L1Y3SDZ2c2tPK2hsMjRsVGU2bzZqWFcrVXFmQ2NlajdNVEQwS0w5dFJXN2xma0hQMXVGa0RDV0lWTGNBdDVPYnRkaHQ5MXloamJLTjY5TCtTdUwrY3VyMFF0Ujk5VzdlNVZQcWlzWndhN0U2eVZ3RjNLNjVVLzFxejFWVHVEUC9JOXQrRjJTVW1CRkVwYU10SlRl''@;'; put 'put ''blhkMGE5OWw1OTBBQUFCQUFBQUNnQWNBQjRBQVVSR1RGUUFDQUFFQUFBQUFQLy9BQUFBQUFBQWVOcGpZR1p5Wi96Q3dNckF3dFRGRk1IQXdPQU5vUm5qR0VRWXpZQjhCallHT0dCblFBS2gzdUYrREE0TUNxcC9tS1gvR3pNd01KOWsxRkZnWUpnTWttTmlaVm9QcEJRWW1BRHdiUXExQUFCNDJy''@;'; put 'put ''V1RXVkNPVVJ6R2YvKzNmUkVxRlBYMjltblRScUlVUmZhbHlMNlVyTm15cjlrYTZ4QkRSVkxJbmlTakdSTlRVN1liN3JnMVk0eSt6NVZiN2d3ZHgxZE1NOHk0Y21iZWM5NXp6cHpubkhtZTN4OXdvZXNMUVhTUFZPcVpPT2V1VXF6SEpZekRqWUdVY0lzNjd0SklFODIwMENZZUVpQ0RKRXdHUzV3''@;'; put 'put ''a1NhcWtTNlpNbFJ6SmswSXBraElqMVhobHZIZUpNbyticmVZVDg0dmxiZ1Zhd1Zhb1piT2lyR0ZXdW5YZjVoLzVUU2w5aDhXTkh0cVBhZU9aK0VwL01jVW1zWklvS1pJbUdaSWwyWklyQmJKQk5tdnRsOFpiclgzSWJESGJ6YytXWVFWWVFWYUlVM3VvbGZaTFczMVVMOVJ6OVZTMXExYjFTRFdy''@;'; put 'put ''aDZwSk5hb0dWYS9xMURWVnEycFV0YXBTbGFwQ2xha3pxbFNkNkh6VG1kV1o5UDJUbzl4UjRNaDN4TmdIMnYzc1BuWXZ1NXZkNlBqYThibmo4SWVRZDhsZFh2Mm41bTU0TzVQZ2oxc0VvL3ZQK0lkRzEwa1hYSFYyN25qZ2lSZmUrT0JMTC96b1RSLzY0azhBZ2ZTalB3TUlJbGhuUEVpbkhvcEpt''@;'; put 'put ''RTRrSEJ1RGlTQ1NLS0tKWVFpeHhCRlBBb2tNWlJoSkRDZVpFWXdraFZSR2tVWTZveGxEQnBtTTFjeGtNWjRKVEdRU2s1bkNWS1l4blJsa2s4Tk1acEhMYk9Zd2wzbk1ad0VMV2NSaVRWb2UrU3lsZ0dVc1o0VisvdzUyc3B0aURuR2MwNVJUUmdYbk9VY2xWVlJ6a1JvdWNZWEwxSEtWNjl6VUZQ''@;'; put 'put ''MWs5RFlObXFWN21xYWZiUldydFIzUmJPQnN0emZyV2FQN1haejQ3VmJoWHh5OFFEMmJXZGxqWlMyYkpFYVBXOWpPTWV3NEpGenpHU2xSdWdJaXVLTjNIcUJwbGdSZEQvSGRaNHFjWWNTeWpiMXNaUjk3T01CQlhVdjdPY0pSdlhXWVVrNXhrdGU2bW5xeFRyekVXM3pZS0g2YWY4OGZrTTJxNkhq''@;'; put 'put ''YVkyREFBcEtCTUl3aGpHazlBd1BUYmlaV0JvYi9JY3pTLzQyWmR2Ly93blNKU2ZEL2wvOStJRDRBMnM4TnNuamFyVlpwZDlOR0ZKVzhaU01iV1doUlM4ZE1uS2JSeUtRVWdnRURRWXJ0UXJvNFd5dEJhYVU0U2ZjRnV0RjlYL0N2ZVhMYWMrZzNmbHJ2RzlrbWdZU2U5dFFmOU83TXV6TnZtM2xq''@;'; put 'put ''TXBRZ1k5MnZCRUlzM1RXR2xwY290M3JOcDFNV3pRVGh0bWl1KzVRcVJILzFHcjFHb3lFM3JIeWVqSUFNVHk2MkROUHdRdGNoVTVFSXR4MUtLYkVwNkY2ZE10UFhXak5tdjFkcFZDaFg4Zk9VTGdRcjEvMjh6RnROWDFDOWpxbUZ3QkpVWWxRS0FoRW43R2lUWmpEVkhnbWFZLzBjTSsvVmZRRnZt''@;'; put 'put ''cEdnL3JvZllrYXdycC9SUEtQNTBBcURJTERJdElOQWtsSDN0NExBb2JRUzJDZFRpT0JaMXF2N2xKVXU1YVNMT0FJeVE0Y3lTc0l2c1Jsbk4xekJHdmJZU2p6Z0wwaVZCcVZuODFCNm9pbWFNQkRQWlFzSWN0a1A2MWEwRXZneXlBZUNGbFo5NkN3T3JXM2ZvYXlpSHM5dUdha2tVemtNcFN1UmNl''@;'; put 'put ''bEdsTnJZSnJNQkE1U2RkYWhIQ1haMXdHdmN6UmdiZ25lZ2hUQmdTcmlvWGUxVnJaNEJ3NnU0cy9sdTd2dlUzbHIwSjd1WU5sendFSGNvS2swWmNWMTB2Z3lMYzByQ2dwTWRMMUVkR1MwbUpnWU9XRTVUV0dWWTkwUGJ2ZWlRMGdHMUJ2clRLTFlsODhGczNxRkJGYWRTRmRxTUZoMGFVaUFLUVll''@;'; put 'put ''OHE3d2NRTG9CRGZKb0JhTkJqQndheGpZak9pVUNHV2pBTGcxNW9XaUdnb2FRTklkRzFOS2FIMmMyRjRNcEd0eVN0eDBhVlV2TC90SnFNbW5sTVQrbTV3K3IyQmoyMXYxNGVCZ0ZqRndhdHZuTTRpUzc4U0grRE9KRDVpUXFrUzdVL1ppVGgyamRKdXJMWm1mekVzczYyRXIwdkFSWGdXY0NSRktE''@;'; put 'put ''L3pYTTdpM1ZBUVdNRFdOTUlsc2VHUmRicG1ucVdvMHBJelpTbFRXZmhxVXJLalNBdzljUHc2RXJRcGovYzNUVU5JWU0xMjJHOGVHY1RYZHM2empTTkk3WXhteUhKbFJzc3B4RW5sa2VVWEdhNVdNcXpyQjhYTVZabGtkVm5HTnBxYmlINVJNcTdtWDVwSXI3V0Q2alpDZnZsQXVSWVNtS1pON2dD''@;'; put 'put ''K0xRN0M3bFpGZDVNMUhhdTVUVFhlV3RSSGxNR1RSby80ZjRua0o4eCtDWFFId3M4NGlQNVhIRXgxSWlQcFpUaUk5bEFmR3huRVo4TEo5R2ZDeG5FQjlMcFVSWkgxTkh3ZXhvS0R4MndkT2x4TlZUZkZhTGloeWJITnpDRTdnQU5YRkFGV1ZVa3R3Ukg4bXdPUHE1Ym1uTlNUb3hHMmZOaVlxUFJz''@;'; put 'put ''WUJQcnM3TXcrclR5cHhXdnY3SEhobTVXRWp1SjM3R3VkNVkvSVBnMytMRjJVcFBtbE9jSENua0FCNHZML0R1QlZSeWFIVHFuaWs3TkQ4UDFGeGdodWduMEZOak1tQ0tJb2EzM3prOGtxeldaTTF0QW9mVHdRNks5ckJ2R2xPakNPbEpiU29TUm9CTFlPdVdkQTA2dlBzcldaUkNsRnVZcit6ZXlt''@;'; put 'put ''aW1PeEZHY3lBS1Nqa3ByR3c3TytrUkZwWU82bnA5TkhBNVViYWk1NHNOVnRXY1lXOUIrOWp5TTBzZVRkU1hyZ3BLZTFGbTFDbnZNZ0NEcm1SUGJnbWdsdG83N0tLWWtwWXFDSStDRzBGKysxalJDWXRNNE11Z1NKa2NiS3lEKzJLSFRtaWduWUMzM3JTS3UvYlF1M1BkZklnTUp1ZGJ1ZEJscEdp''@;'; put 'put ''ODEwVjlXcDlWZGJZS0ZldjNFMGZCOVBPc0xIbUYwVVpUeTU3MzU0VTdGZW5CTGtDUmxkMnYrNUo4Zlk3MXUxS1NUN2JGM1o1NG5WS0ZmSmZnQWREN3BUM0locEZrYk5ZcFJIUHIxdDRNa1U1S01aRmN4d1g5TkllN1lwVjM2TmQySGZ0bzFaY1ZsU3lIMlhRVlhUV2JzSTNQbDhJNmtBcUNscWtJ''@;'; put 'put ''bFo0T21RK201MmE4TEdVdUN4RjNMTmsxMFgwSFR3aEhlSy9PTVMxLyt2Y2NoVGNvc29TWFdqWENja0hiUjhyNkswbHU1T0hLa1puN2J4c1o2SWRTVGZvR29LZVNDNDQvbDdnTG84VjZSVHU4L01IekYvQmR1YjRHSjBHdnFyb0RNUVM1NjJDQklzcTN0Sk9wbDVRZklScENmQkYxVUt6QW5nSndH''@;'; put 'put ''VHdzbXFaZXFZT29HZVdtVk1CV0dFT2cxWG1NRmhqRG9OMXRZT3VkeG5vRlNCVG8xZlZqcG5NK1VESlhNQThrOUUxNW1sMG5Ya2F2Y1k4alc2d1RRL2dkYmJKNEEyMnlTQmttd3dpNWxRQk5wakRvTUVjQnB2TVliQ2wvWEtCdHJWZmpON1VmakY2Uy92RjZHM3RGNk4zdEYrTTN0VitNWHBQKzhY''@;'; put 'put ''b2ZlVDRYTGVBSCtnUlhRVDhNSUdYQUQvaXBPdlJBa1kzOFl5Mk9iY1N5SnlQTmNkc2N6N0I0dlBkWFQvVkk3M2lzd1R5aXM4VHlQVGIyS2ROK0NLQlRQZ3lnVXo0Q3R4eWQ3K3Y5VWpUdjBrZzA3OU5JTk8vdzhvMjRmc0VNdUdIQkRMaFIzQXZkUGY3U1k4MC9lY0VNdjJYQkRMOVY2eHNFMzVM''@;'; put 'put ''SUJOK1R5QVQ3cWlkdmt5cTgyZlZ0YWwzaTlKVDlkdWRkOWo1RzJVenVpd0FBQUFCQUFILy93QVBlTnExZlFsNFpGV1o2RG5uVnRXdExhblVucVN5MVo2bGt0cFNxZXlwN0V0bDZYUm43ZTRrdlNYcHBxRnA2SVZGUUJBYkJrVlJuSEVieFVFUUIxa2FCRnFVWlJ4R0JaNDlMaU1PT283b20zRkdI''@;'; put 'put ''YmZuRzBaMEpEZnZQK2ZjVzNXek5UamY5NkNUVk83OXovYWZmei8vZjRLTWFHRTlpVDh1ZUpDQUxNaUpTcEFmMWFBVWFrRWRhQWlWWkZ3OW5lMnQ2YVprYlRoUVdWcnNzaFlaTkFRWlkzVmFyOVVyT3BOT3Z6T1o4cWVTS1pIOUZPR2o4cFErb3ovcEczaVNVajdMTUt4Qk9wbkNINWYrRG5mODMr''@;'; put 'put ''NmVCM3A2SG5pZ3grZjE5dlQwSE9ueG5udmdpTTk3eFB2QUF3OTRqeHc1TnpEd3dNcEExZDhMUCt2MUJyM3c3NWFqdm9HQndFSDROT0J0Ny9FZHViN1pIZDExMVZXUFhIWFZydWlxTitxRmZ3Z1JOTHIrT3ZvV09jL1dGc3o0RU1ab0FTRlVtRVdFQ0VzYUxBaHVZVlNqMFZnMGhVRnJrVlowMTlt''@;'; put 'put ''VGd0OFZTalUySlJNdXAwUG5uemxUMHFjTmg4czhvWkNIbkpkOFA2d3VLdzJIUzh1cUVWcGZSMzM0WG53RGViREloNHdJRlFudy9TVkV4dzNBdHh0aFhBK3FSTU9aQVl1T0lLMUFNRUY0MllRTmhzSnNZVkdCSUlyNkJiT1I2UFhXckFZVFlpR2pDRlZXbEpkQkswOXBTYkVieHJkYmMvK0o1WFZZ''@;'; put 'put ''VElwKzBaOW1YK2trKzBxSzdFdWtML0dic1N2dEp5SzdJdStOVEVRdXR4K1BYV0cvQWo2OUY1NmNzUDNOZTJQdnhSZWV6ejRDLzJXZnp6NEsvMldmUjRDWjBQb0Ywa2JlUUJVb2lDS29QbE1icWZONVBhWEZicWZOWk5TTGhZaG9BVzFrQkphRkNUNEk2M09qMFVxclZRQnNCWFN3eDZsUU9PMXlw''@;'; put 'put ''eHB3cXJFVHAyR3ZYVzR4RkhaV1lDZUN4NFhZYVd0S05jSUQwbmJtc3FsM0hlakk3ajF5SkxtdmRlckt4ZGIrOFJOWFNaZEhFM1ZOdjg2MFpLNDRLV1o2aXZabGgydy9LcDNlbFp4cEZqczZ6YnRITzYzLzZKbWJ3dTRhNnd1R0ZyODAzMVpkM1dEOUpzeERpeUxydnlOcjVDbllYVHRnT29yYTBQ''@;'; put 'put ''L0tQbGE4YXk1VFo4SmFJOFk2TFY1Rk9xUTM2UFJIa1VhRGxnaW11MThBZXlBc21VVWlDQlpoMUpOOUxBeE5vcGRzZ2dDVXRST1h6RmdVM2VLb0o1UGNwZ1VoQUV1Ym9lMWJ6YzluUXJGWVZaWERnVkNzTGRiYTFGZ1ZyV3FvRGprcUhSV2x4WGFidFFnV1V4Z3FGSjExTm83UlpBSXc2U2pFZnB6''@;'; put 'put ''RWZvWkt2MC9uZExpU2FOUDdUcHgvOTZtUm10cVJXQXkrWjZQNHZidWs4TVRwUkRJVWppZERlTzlJTFR6a3I2cmo5R0VpalBjMWpFZmp1eG9hSm1MeGlYbzh0VGFKLzdJakd1M3NpRFYwU3Z2cUorSlIrZzRnNnJ2cDQ4NkdhQ2VpdEJOY2Y1M2NRTDZBdktnZU5hSE9URnM4R3E2cUtQZVVtSWhS''@;'; put 'put ''SUY2TUJESkNhUnN2QWV1NXNscGdPSVlab0tDR0JwK3ZvYWtoNWF2M1JTSituZWlxMDRiQ09yK1BMcW9wclY0YXZITTNwZDA2MFkzbzJ0eDhuYlkwZ05PbGtxQXZzZTkwMTNKTGRxSzhOTHFuTVRaUlB6RTkxRmRYT1JHTm5aVCtNbGxjMnROVTczY01YTkd4T3BvMitocm5ZblB0dlFmOE5mMmho''@;'; put 'put ''bXdra3Exdkh3M3NHZWlhREN6M25TSWowWEJwMmxzYUR3Y1NhNjkxWHoyY21tektJSVFwbjZNbnlZUElqT3laSWlwRjJQYmlVV2VBd01SdGVYa2grcWV0WHJmYmE3WEU4SDhzZTkwK245dTdQSXhvSDYzck03aVBQSXNLa082SkFpMk8xVEV4azNZRGc4Q2l4QWV2dkhLMWNXclg1SjdHMlIvZDhx''@;'; put 'put ''N1g5alJOUDNYcTFGTlRhZGEyRnRvMkttMUZhTXVSRUU1ei9OVHVtWVIycTlERHFlbW5yajcxNUV6VG50ZmVkY3VQOXJDMktYd0NIeURQbzRPb09aUGFPekhVVkYzaDF1bGhFU01DeGhxTXRCaXQ2ckJXUzVhQWVGMWFFRUlBZW1EUDdzNzJXSVBQV3lkU1NvU1pwcHZTT2hIKzkvdkMvRGZnOVFZ''@;'; put 'put ''Y0R2SGZrZ20zQy81bnYzRlVBQ3hBTlBGWDdOZENEQnRaZ2ZsdnRKc3d0SGU1bVpoOTNtclVFYnVqMnFyVFdRMGFjM0dEd1cwMnV3ME54V2FOc1VpanQxWTc3RVJudEpvTEtKelJaZ2c1R1dBQkE3U1dhcUtPQWdib0RCbHNSZ3BaZ0U5WVRLVUpuN25BN2pNS0Z0RmdFUXN0R3IxV3E5ZFlDdlVX''@;'; put 'put ''dlZpa01mcnNCV1pmb3RSazRaQmlrZWd6QXlpOFphQ2lBVnZOSE5Uc2c1Y2NsdUcwR3kwVEIybEdKaFRLK0pGR3dKcHBvRzJRRkZoQXk4RCtlQUVCYXNlWTRDN1NpYVYxMkU4MVlJcHF3aVJ4UEx2L21XZjJQNHU5eno0Ny8venp0TCtCOVd2UXQ5RjFxQkM1TThES2FGQ2hNV0NVZ0kzU0dIQ0FU''@;'; put 'put ''MFZtdTJvTFBLRndtVGNjamgyTHhFRTloVk8xL3VFMDdhc1IvUVMzNDA3Z3p1S01FOUdPcHVtY1lVWUlabFJFTzdON25kNUdySmQranp2M3N2WDBncDU4RWNZM1VZMVBuNERVdzlpTktUR1lrREVnQUJHb3RlSmxza1kwNTdRaFh2L1YrZ1Y4Z2Z3VXhyVm1DbW1udDhMWXAvbUFWSFRoa2N1bCt5''@;'; put 'put ''NG5QMzJUaW01UUprMGdPMjRoejRDNHEwU1JUQTBRSDFzeGx4SVlsRE9iUUZFUktOYktvb3BpRjVPTG9HL3FOSnZsSGtrMU5tQy9qekpTQll3azNwYk4zalk5ZlM2YlBUZWRub25GWnRMcDJYaDhObTNlOStuVjFYdjM3YnQzZGZYVCt4WjZyeDBkdmFhMzk1clIwV3Q3R1E1ZzNiZ2NkTFlPZVRM''@;'; put 'put ''RnNKVUM0R3VFUzNHTUxYalVhbWVvRThQcHBOWC9oV3RxbjlxOVF0S2p3KzlZbTBTc2ZSUVdWUXpyS1VhMW1iREpDTXNCYWlCa2hLR1RpVDlxZEN3Z3BuT3M3a0JJSXhiWGRXRkZhb3ZoSmxuY1dUQnNUL1ROdnJiUnBxYVpVTitCajJlT2RZek0zWXVISmZlZWI3VXNScHU2R3hQdDV4cVhPdnF2''@;'; put 'put ''SGZxelJUYTJIM0JaQVdQWG9LNU1lMGt4ak9QRG1NRG9NQVdtdUJIQnl6Q3laZ21JRXlZQ3VuT0o4cnlic1hzTnFnNEV2SUdnS0piQUxsT2hra3hRUFFPV21qdlJ0SGw2b296MmZ6aFgyeDA0MU5xemEybzhtKzJkM05XZW5BcDFMWHk0LzNqN1NHdkhUT2RWdytaTXFyY3VrV2xNcGZGZTNKeU1k''@;'; put 'put ''VWJyTzYrTFRUZTE3N1lWN3VsdDNaZmtkT0NIYjFuQXV4R2tHMWdmWmpBeThJaE9DMnZBQ0d6TkZVQWRVNmtXemFqSlpDb3dGUUJQMllyb1hJUGVNRTVhcWJYcFQxa0ZmS3Ywa0FtUFhYdjQ4UEp2NzVuRVg1YUc1dTk1QS9kTHo4RHE0NENmR2hpakRMVm5XbXdnOWdyTUJHdkFuaGxCOEIxcFFJ''@;'; put 'put ''RUxBbG5nMm5zamNzQWM4MW50QVQ5RERoZzZTUmtqWXBoeWtkaVVJOE8vT05JMXQ5S3paMC92Wk0rZ0VYOVcrcUt1WjZ6emFFZjNxUkh6NVVQN3h0dmFoaE5WZUhYeFlpUjVxS2Z2V0V1T0I3cGczenlvR3ZXRDdRTnJ0d0xSQkl1SlZpT002RUNhYUxTQ1poWGxOS2dJODFJRVExa1p6SzY2TE96''@;'; put 'put ''M1F2dlNRRENrQjRzTXliT2h3b0x5aUZ2a3JBSENPR25MMFJwbGs0OGU2OHhjUFhqSDdkbHplNjZjYnd6MFJ4cW5FcmpxVUl1N056alQzVEpWV0RqZWpUL2ZlTENuKzdMMjV6NngrdGtERStOZWIvOTEyYnFZOU5IcWJuL0hTRWRpYkpiU0hnZ2Q0bVo4VTVrcEEzMkNHZGRRZVlPWm5RMTJMVmcx''@;'; put 'put ''MUZyRTNwVFhDWUxncjZTUDRCOUxQenBOSmhkSDF6NUo3WWdvNENIRjhCQUczNk12MCszUUVaQ3FJNklLQTdKMDBBTUdNT3dQa3c3VjFSUUoxYW5xeG1oOVdiZ3M1S3VpcUlnWXFMamF6cENRa2FPeW90ejBNK2loUWtKdGlaK2Y3WnZzYnUvcnZiS3IrOHFld1pidVhmMW5oMUp6ayszdHUyWlR2''@;'; put 'put ''WHRqd3dIL2NIeHZyemsyMjlxeHoxVzhxN2w1S2xJL2xXN2Q1WEx2YTIrZGkrS1B0c2ZxTzlvYjRtMkM5Sld1aEsrcEF1T0tKbCtpaSs1MUd0YVl5ZTkxUlJIc3NRRzRWRSsxQnF4VUN6eXFKYXRBNlFJc1R4QmNXWlVTVVBhYUx6QVlDTEs5ZHZHdDVod0wycGIrSWkvWVJwZk9aYUlyaWIrNFpa''@;'; put 'put ''Y3piUGU3MkRiWDB4MG56MnpjWmI3ejBrZm9OclA5cG10Z2VvTG9RQ2U0cWN5bU1wck4wTW9kS2kxM3FNeG1oTXh1czh0V3hKU0hUcllnRk9WQnRsRWtaZkpQZkl1aVVhUlR5aWZ3czVoK0pEcndzMEQvV2tWa0JlbjhQbVI0SE9Pbjhmc2VTOVp4T3B3aGhNd0RIZXFlMEJHd2tleXBvTE1BTzlQ''@;'; put 'put ''NDY5TDc4Q2tjSC92QnpFTVB6VEsrNjBaUEVBZitCVkNlaUh5WlNrcXYxRGRENEJDUWFWbE1FNEhxN3lJcXBTbW4wLys3OFhla2V2YjFpL25iNW1ITUVSalRxWXdwd0pqcGVwelNPclVqK0JTTStYVXA5Y2hERDgzOFlPd0hkRXozK3V2NE83RC9UckNXMDVsR3UwRlB4UnVtNGxtQWdXOVM2UWtx''@;'; put 'put ''cUxWWW8zRnJSbDB1bDlkVkZTejJCM1YwSWpJSDU2UXhNTFp6ZzcvNnhPNmpmYzB6QTUyTHQzY2Rhb3JQcFE4NEZNemVxdXVPMUhWTmRWNFZuMm1NVExhYVQvd2c3OHJTK1VYVzd4VDZ5WDJBbXduMG80eTV5a2FNaHM0T0lvS1F6RDdtQndjcEJZYU9RZEFZYmpKam94WWJaNUVXSkxXb3hVZVJh''@;'; put 'put ''TUo2VVg4WTZYU0szMFA5SzFpRzFVQzlxeHBvbkZRYXcySU5Sc0d3K3BhZDZNRERhc20xUWtnbklOM3F6cTMxZW5FV2dVdTl4THFaQUQrcnBLY0hvWjZKbnZIaFFWaFVKaFFLMjBPQlVLaEFMTnRpUXZoQ1lSWHZKRnp1dEZ2a0VpRkJNYTZ5TGhMTVl2Y3JvbFRtcjk3SFZxLys4c25sUjViVE05''@;'; put 'put ''Rm9oN0ZpVnpRMld0ZHpXV3U4ejI2ZUx0SzREZDd5OHJSLzN5ZjJMeis2c25EUFlzZHl5dDV5c3RmZUYwekVhZ2RybTZPblZ4NWV2dkxMVngyNGIzSGl5blFrSEtxUDdHcnNQZFZYNSsvU1RialB0SmdxcW1xbXU2WS9PTFA2NlBMK1Qrd3ZyeW9MZUxFeHRpY1JiWXhPMU1mYjJmNlZ3cmZ2Z1J3''@;'; put 'put ''V1FaUFdaYW9OV0VQd0NGQVJrSlVHdENoVmJXRHdVMHRHcjljYjlVWnVtaGFERmhXWmF4azJZUktSUHQ1K0VvZnB2OE4zd24vay9OcmtUL0dBOUNYQSs2d2MweWhDSmNpSE9qS3RJSWxoQkIxd2psWkR0TlM4a0lNckl1WVdNQjNMVTJxemVpdExmUjVmc2N0YVlpdUpWT21aQWJwUklIc3gwNnAx''@;'; put 'put ''MkdsWFBzemlnWmI1UkR6ZTBkMTBvRU42Qk5jMzl2UTB2dlJxNi9CdzY2dmtmR1E4M2pqc3FkamIwalFkd3g5TTE5VTFmMVY2cVN1UjZQb1haZy9GUU5iZURieFdqaG95ZGFVbEpxT0dHaFdLUEhWdENQL0FnM0pVRmdxR2FQaEhreWNCY2V1dTQ2YjdEeDI2ZjJubzFzUmdZTEd4OTB4Ly81bmV4''@;'; put 'put ''c1hBWU9MV0lmUEIrNWVXN2p2WWt1d0xSNGF1SFJpNGJpZ1M3a3Uyd0w1UXZIMloyVGRPNWkzazBNUWNZeGxOWnBQRFpuS2FuYUVxTFVXUFFwaDFPQzBUWUIyMnp2N3F4Q01IRHo1eTRsZi9PWEY5Zi84N3h0OVB6czk5NHZEaFQ4N3R6NXdhSHI0Nkl4blkyc0dBSVgwd25nbEZNeEZGc2xGN1Jy''@;'; put 'put ''TUF1cVZRYllVeTY5N0V3MHRnM3RpZHNweXplcDJQNDh1bFA4Y2Zra1Q4QnpMNWxjVnZMNUx6aTJoRC93WlVrd2twL1ZOcHhYcFZWRDY4TUNBRDdabkpMZGFyWCtsM2hYYjYwcUwwWGQ0cDM2LzdZYis4S0pWSmdNdUFoRXBDTkZwbVBHczFpQkVYOTArcEpjakVKR2gvTzJ5YW43dFhYdXRHL3Qy''@;'; put 'put ''MGVTay8vak5jRnZ1TDRhWFBIRHIwbWFXUlA0OE4razgwOWRFTjdJdnM4eitOcjVaK0hXL2pXOWlhNkF2Vjh5MnM4SHdnditZN0dVN0RtWUJzTWk2RGpVclhTK05ERnJRWmw1aXVGcjZTOEozY3VTemRzYnlNcjZIc2hLUFN0OGw1NlRYc2cxNW9xOGRaZkpMR0ZWUytCbmZUd05FWVhWNm1yUURX''@;'; put 'put ''Q2Zyakc0ei9nSXFZYWM4b21obXNaRWtBWW5JenRCY2hpejJvZ2VaNVV4NW1RYm5zc2V1OWcvWmRkYzJEeXkzTDNlWk1vcjg2dWFjYnRGUzg3L0oydnM0WjZPcERiSjFWbVhLRFhrdVloc0lzQWlid0dLWGRadU02TVduRlNRUDJnMnZvbjFuR2ZiZEkvNDdyMy9sZlIyQzYwc2Z4aXZSMTZUYmNl''@;'; put 'put ''UHhsM2k4SVl2Q1h6eU10dFJIWnBHbHZpRzQrUjUwV2FhMVdPdWtnMEVuU1NoeFN3OG9pME56YWVkWWVlQWdJSURjdmNadDVPYXpLdkR6Z0ZQaXRKdGlCMmVYZi9uYVpmc0djdXZEZkF2Si9UbjlLYnJsUDhqQ2o0NHFNUnlSa1M0KzJYSThZcHVSbi9lSDNMaTlMWitpV3ZFRU1hNVB3OVFhVnZa''@;'; put 'put ''UitmLy8vdzVmbEFnZW84dUI5UzcybisvdFA5M0twSTRzYmVMcDAvOEdGb2VzR0JxNGQ0alRMZEFHbDErT3dOalBJSFBCR1lSYkFwZ0ttb1lsOEFCeVdXRmpnc0JVNEM1M1dVSldPQnIrOU9ibmo5Q3NpMlpyRjNpRVk5L1RRczh2WW50MjNML3NvT2QreW1zbXN0dndHancyMHR3OUliNnB4NEtB''@;'; put 'put ''MmZDWkJBOWhFSzFCSFJxQmh3THdQbzFGRkFaMU9aOWdacWcrRnFmQkZNQWR4Z3lLbU1lUjBPTzF1Mm9BVjh2dVFmN2gxTEhwVis1S0NIdWxYUFlkYWwrdHorTUVWVnpSMDlmV0dhbko0a3Y2UW1PNmI2NTlRSVNxUHAwS1lDK2hNUWdOaWlrdTRqTFJhV2FUSkxBNU9zdFZxcC9LR3p0UWZCci9U''@;'; put 'put ''eWpDbVRjcTRJc2NQVHB3Ly9kZjNMRE9VU2YyUE1uVGhXMDQ1Ly9DYjN6Q3N2WXNpak5GMGFQMi9TQnQ1RnJ3QjBGRXVKL1ZIQ1ZhaGlRWllWVHFxR29XREVUOUZVOTRMRFRlUWJRU2VXNmFsajUzcVdMNnhiM1JpWWZ4d2M4Y1ZmYVBYcDFvank0M0JkbDlvc092VW1kYXJKa3duc2djNklnMXhw''@;'; put 'put ''NjFodEsxbGZ5b1JIYTJPbE1jOGxkVWVpMmR1cG0xL2lzNnpCbkEweWV3S0hoZkp1WFk4a0NHYnlOZ1B2cDBmdU1UNHYwbjF2eXlEYTdjbzgrNHVvSXQ3b0QzWXZaa0tPWmlPc1hwcFR1UndCQnlLK3FYQ2l2c3ppdHpDdnR1enkvSDU1dWE1K01yb2JkUG1zVHRtOGZ1bDB4MEhtc0Ewd0hkS1Y4''@;'; put 'put ''L2VNY2JsakdJRDZlaFlXdWFMZ3FTVWhTU1hOR0NxYzBsam9CRjFEeWJmazc1L0V2N1IvUUdHUHIvMkhWTFArZ0t2UUZQQ2VBajZNbEpaRHdLQ251RXcxYzBXRHhMQ1ZxU2xtcE1LSGZnbitFM1lYM255d1lkUFB2emd5WDlaZnVvTFZGSzhUc3pzYTVMNDEzNklsTDdKcDVnOEEzbG8wRUhYaEla''@;'; put 'put ''anFZMkdPYTNaYkRZcnhTdk1Fcm8wc043eEo3RHdqcTk5N1Rvc1NHdlhmKzNGNi9DYzlOZFlsUDZBWitIVEg3REkreTZBdmo4R2ZldFJlYVpVUjNrdko5aGtiOXpHem03a1BtSExxcVJmWGYvMzN6b2ovZVlvTHNDZmxwN0hQZEtpOUorMHJ5Ym9hN2VpNnlrKzh5R3RuSCtmQzJuWnJHekdhZTdt''@;'; put 'put ''ZzhKdnd1K1Qza0dLcEZQNGcydi9Oa0hJNHNTYXhQWDkrUHE3Y1QvNTd0djB2cEpBV1BBMS9zWm5Qdk1HK2U3QVdoc3dFRjcvL2ZvRi9MYzd4QnNGc0dmMWwrTUZIbTdFS0FyamhYUGpLZkV3YW9yUjJDZ2REK1hIYzRPd1Q4Rlg5SUVIZnYvN0p2TFZnVGZQMCs0VCtKUDRDNXkySHRjZDZjdTRR''@;'; put 'put ''S3F6Q0NHTVRLT2xwK1VveCtNNjFHZFAydjFoMGYvdDRVK09uemt6QnRybjE5LzhKcDJ6dEg0bDJiMytOQXhYeGZyWUlUNUx1eEFCZ1lSTXJUMDhOTXozdFl0a3NKdThBbTNkckswWldsSnBmOW9HUGlBZk5lMzJkeDI0ZG9oODJmSG4zS2VyQjV2aEQ4UUtmQkZDTjJZY3hWalF1RUVSV01GeXJ5''@;'; put 'put ''alhDanF0Qm53N0I3aG5WUUNzMVJIdEt2TTlxUUZma3RWajZvcko5T2dCdTJjckNPVXFCcWVZWlBNWnA4ZURrQ2ZrQ1hvcllkaVNRTkJ2TndCU2tjc0pXRlVIcG5LT3JBM3NNK1hjQ3Q5KzljR3lwZmpVOGZSU3k4anV6c0hPcWNEUi9iWjVjL2RvYXFRN1FheG5EMGt2RG9ZamU3T0ppYnF5b3Bh''@;'; put 'put ''eHV1RkdLWjZzNzNjMDFkVEUrWnJIUU41TWd4NnlnWmZ5N0FXTEVUUVFsbGRaRHNSVmxNMUZXRXJrY0JwZEl1Z2k4RlM5QU9UZERFUk5zZzJCTjltbDlTcUhmVHNEQW96cXRXTHViNENaQjAvVlliY2paUGZadlo0U21EYm9tRTJodkRCbEFLc1N3VlBiQjUrN29yUHppdDYycFlwRGh5b1gyOXdq''@;'; put 'put ''TlRVajBZYmhtcHJoQm1JRkYySDhodjVVZkM5NVJ2cHRMQ1cxUktkVHFhbG9kQ3FWbW81eW1vb0FmVWhBSCtXb01STTNBaDVLVERESlVtQnlJZWN0bGV6c0xia3U2UzI5ZnROSTlzYmhwa09oWG5kM29HRWlHcDJJQm5xS2U4T0htODBqTnc0TjNUQlNHK29zclVoTXh4UFRpVXBQUnpqQzk0L2FF''@;'; put 'put ''YzI1L2JNSzZ2MmppR1I3dzV3QjlmNVo4dnUzR1lnUnFjakNocHhJbGYyamdJV1hCR1Q3SjcrbDBNeDQyZ2l6ZGY5c0liK1Y3aCtXQ1Q2UEpDdlp0SCtrK1ZERlVsc3YzOFRGeXF2WnprWFpMcEpuMXZyM3hsUDlONHlQdjZNL0ZjT1d0YnMyN3grTjJieE93ckIvTHRpVVRLYUQwSTFqaDY1Z3d4''@;'; put 'put ''QkJRNVp6TTVYbkx4T2RHeXhnZDdtN3JMUUVtanJCajZMekRmQnRVeHRmWGpwSG5laUZLZU9GYVhlbjc1cm1vZXVIK3M4T2pwOXNrNDRaNTN1NjVzMjR5VENhR2EwcXpnUWlBemVNajc1aklQdWUvVDI3OFJYWnJxNHNwVEV2ZkZzazM0Smg5MmFNUlZpbnRXS2tvekVsdWxsbFNLZlRMb0dsVmN5''@;'; put 'put ''Q0UyaEJnK1ZvSWlncVQ2WVVIQU1kU0ozVnJTL25NOGFnbjUydmlhS0g2d2cvbGRzOEZNYnBVZWY4MXZYWEh4d2ZIMjB2YTNJRzlPVkZya3FpblpJbThPTlRuWjBURG11UDN1VDNVRHhHMTZkSUkrQ3hFdFdoYXpPV2lpS2kwK1pqczdLSUJEa0hha05IVnFsaHVDUnFpTXp6REtsMkppSnpJRlE4''@;'; put 'put ''d2t3cElOb0VCaUt5cWdxaHFycXEybEFBUnF3TUJZTUJLaUt4VmVaMjdyVjE0STNFa3lLcXMzL1MySHZOYU5lcFVMaHNOcnBucVhLeHRmZDRSOGZ4M3RhbENxREgvdjY1dVg2aWxSSTlxNjJoeWhGUHhXaHZ0ajdlZFhKdzhHUm5NckpIdW1idndNRDgvTUFBUC91amhyQ1Z4U1ZQUG1WakpoUGZH''@;'; put 'put ''amRpYkFRbU1ZdEZsaWhXc013OWJ1N3NiMzBOYi9JUFdiUkRmZ09NVXNDdFBhdkQ3NkJoQVNyaFlOZmtRSnBWRm5MNDl2bjR3ZDdHVUUvNDBLSGllZGlXNUw1VzZRdTR1WFhZMit5Vi9nYWsyVnExTE9zNzRQdVQ1Qi9BanJLZ0FUNXRWeTRvWFV3cHhTcmJxWjZNQSt3NVRBMk5WZFhqZVdvNldB''@;'; put 'put ''b0x6Q3hTcmQwVXFSYkJDampnOTVjVSsvM0ZpY09IeWI1QWNiRS80QzRPekt6OWtZNi8vdEw2dUR4K0tUcVNNVnBBdHhaaURjbFJ0MVkxRjBGZ3BLczVvQVBNZURTTXVoRUFDSWlkUG0xOENUS0ZSZEZMelNVdXB4eEhGN2ZFMFdWSGdKckp1dHhFVDhhTENrcjh4UldIeHpyeUUzN3pQNDM2TWFQ''@;'; put 'put ''ZlF3SnJyM2J1WXZzK0NBdWdaNFltdFBRRkEzUFNsSjIzY2cxSTU0UTM3TG1WYXp6MUM5aHRjSFlYMks4YjNzelBYN0JaN2N3aXhOUVlZaW9NWE9tdTc1Nzk5SjVEaDlhdXhSN3AzNzQvZFE2MnN3ZnJPUjJpejhGOEJOVE9wMkdpd1F3NUlDSlB3S1NLa1hqWWIwb0FiWDcreVh6UVpPalFJU28r''@;'; put 'put ''a2JKT29ROTQyMC9sVHluRzJpcU1XRXliTXJXTENoYnRrbDdVQ1ZxdE5hdWhwN1pzV1NCNTRIZjZWZ2R2aVU1WGtuczV6MEkxZnVUelcrMSt1OTloQVBtam9tVGRoZzlKSitkZStFNytaanAyc0NQZVBNQytIVDdzR0lzM3o3cHQrOW9VQ205dEdlcE5TYzhwUDRsMktGemZISXMxSXhXZldzRy9I''@;'; put 'put ''cnRnTlJQT3FIUU5kdVpPYWFrOHNxcTVrTkhVRnY3a1RPaEFkcGo4WmliVWljcU1aUjVzMnEwN2ZMaDRUczJEblEzUzQwU2JEY2NVL1RNS2M5b1U5eWg1eTdpSDY5SnhqOWR2eklMcE1IVGpDQmdLekhKb2lPNkt3ai9aY0JpNVlRamV6WURkRUo5T2NBTkNzZjJtd1Bhek10dmg2R2JiajJweUhi''@;'; put 'put ''Z3Z3UHg1QTR4aXlNNDFQWk1LbTIxREZjemJzTk1VOVAyUDdEVHB2OG5qODl2WmFkUW1tZ0tiU0ZuWFJwc292NjRTbFdHU1ZYUVNzM0tzbTJ5bURUQ1hzRitzbTFYUW4yQy9hTmNtc0M1dndNeEwvVnZ0VDNEYjhVbFlsd24xWEREcHFLY3VyOHJLRkNiWU10ejhaTWFBVTZIb3ZGbEs3WUFMSUdX''@;'; put 'put ''WW1MRTFKWjBLQ2IrODNMUHJtSGo0TVA3SHRwbkpQdW1maVBZd2o3bThqbCtFOFlMVTNuVmdncDNnSGNPd0lQeHlrWmVTelpHWElBb0VhZ1BNM2cycFFpOVlzVFM0VHFaeEYwTEY4c3RuR3FLemM1R201bzZsUGNmMnhBL1hSY1lHcXBQdWhrVHpZUHpFakxrNk9OZ1ZyS2lxc3BiMmRBeE1WNVVO''@;'; put 'put ''eDd4bGptS0h4VnJaSGh1YW8vWVN6SEdSZkFqc3BXZ200c1k2R3VZRnMrNVdxa3ZJQWowMEFDU0FaM2FBbTNMTUJyTDdxQkVVNU82VlZjNHpBb2xMRDdDYTBualIyVlRXUGpvK2Z2RDY2eXRkUmVYNkVxdGpvaFBIcHQ3Ly9pbnBWWS9mcE9jNVNLOERQclZNdnRoaFFKS1RMeUJhWkkycGNnZmR5''@;'; put 'put ''bE5aOE9jOVFDNWZRTVg3V2V4ZlpRWlRSY1ZtWkNVV0tsYWFGU0VEeFBKSEVDa2daUEN3OUJJVk1uaEN6c2toZFVTcjVPUW9rUXpGQnJUYW1NZHQ1NkVYMS9GNzd6bitUd3RnK0p6QWQxTUZqY0VxUmtJMXROOGF3N0ZlT29aVHZuek56Vk0zbjExK2ROOE5OKzZESHQrSmI2RmZhMy9FTjBzMzUy''@;'; put 'put ''Tk5OdWliNVlBWlJRM05KNkdkWXd4OUMwUjFLR0N6MlNqMWVNT2kzeDVPdXROSjBZN3ZlOS83VDN6MXVaUHZQbmZpMmE4Ky96eldyMzMrODI5S2I5QitTOVpIU1QzMGE2WFpNQ1k5Z1NsVEk0SElYVlBpUEVEbjdtSEVhVVZGTm9jNkxOaUZCYmFLUWl3ZXIzV1YrMHA4NXRMWExudmdrNnMvOGV4''@;'; put 'put ''dWVkSTFXbVJ6cFlsZU9vby91bmF4TDRQNVdrQjg0dS9CbUR2RWVheVhqdk1rc0UvNkNiNUhlZzBIcEwwaitORDhpSFRQUE91M2VuMHZQa0srQ0ZLck9oTXNZY1lsYUdrODVQTVNtdU1HSUxNeVAyTTBZWFZSL1UxRGdHbFFSaWxnc3pCTktIWVhFcWViSHhXS2xNdEViTjVmamVzYlV4RmN2VENo''@;'; put 'put ''YjJ0MTRsQW9ITVN1bGpiOVBUVURUYmZGNjNycTR1ZlNBOVg2Ym9PN3R2bzlEZW1Dd25UREhkVzF4WVp1R09leTlRdm9DUlkzMmprL0RteUl5NGFIbFZ3MW1uKzVGNit5ZFFCKzlDenVRMCtwaG53WUQ3SXVadVhUZTRRbmFPNDJFUjExYnRCcFlaNkJrcVlaSm1rUUR5S1FQOGdvV0E5c1QyMWJp''@;'; put 'put ''d3VtSGdwaFoydWJmaGRkRkJXdTFmdDNMUnVLYTZ2dmFFZ1hGcVFiM2xOZDZ6WjA2NnNIMHVmWXdtNUw5OWZvYWU1NUM2N0d0K0ZIclNJdVdGK1hmb2tNanlQOHRQUkxsZzNCYzk5bjBMZVliTFd3VXlzNlFhcVFtVkhPY3AzczlMeG9vL0hMREV1ZWFBaTJUZkpCT1htZzVVd0ptRkJLdnNCYVAz''@;'; put 'put ''NU44VDh2WUltTUFTOTRLV1lxeWt0TDNDNkh2YWhBUzh6OGZBcEduWmJUN2tIY2w3SWNPcDQxem1QWE5GK2NiaXJvVG5BL0ErQWpnMnJCUDV5S1RuVWNibTA1MGpIVnNOdmJHMmh0Qy9WS2QvYzBOdllFYTdXWlB2UFlWVjFkVjQ0VjlIUnFxNzJkdFNicEwweVJqcHNQMlBHQzdXQWJ6NEZFWkF4''@;'; put 'put ''c3lUTFVtOG5BVHRGa0lpVFNYR1FSRDJzeEFhRXFFblljd3Z3em1sVWtpdHk1Unp6cHE4eHFEd1pBczFEakx1ajBwdElzZTFNZDdOQ1ZZNXA2UnNiV2ZqcVV5YlNzWkFhdTh3d1dUTVNiaDU1N2JtNnVvZmFod1hOOWw3ZkxwMnkzREQ2a2pzMjZVRXVteVlHUkFZK0FpeWt5dDJSRmh3bVlUV0RH''@;'; put 'put ''TFJ0WmpRRFBlWE01N1RhbEJxRElSS3NBV0htRlUwa29oUy9HOFBqUmU3N3lsYThjaGE5N1dEUVhEdzVtQjArY2dHLzRLQTNwc3YzcUlwUDRhdkljeTk5SnNDaGltQ2F0QXYyeXdQNlNWcUNJd2hQYlpQRFFBS1BhKzBpb1BpOVdWcnBkVlpYdXg5alBLaGVacEQrOVR2cU0vd1I2clVGSi9IL3cz''@;'; put 'put ''eFg1Y0owV0ZRbTREcjBxeHpYSDhTM2tycmNURTZWNU9GMjRSM3FlM05YOWRtT2lidEYvNGVBSGhzZ3JEbGx1QjlhL0FYN1BvN0RUL2d6NDRhRHBFTG1KcXRWM1VTM0d3dHJzV0NQRXRBSld6Qjk2bUV2UE53b0hMbXR0WHM3ZzhyR3pZemdRbjI5dDNadFlxeUlmWFRzS2ZYZWlWOUNYUUhXWjZK''@;'; put 'put ''bWlTakFRS2pJbVZNbTBUU3JzSFFvRVNrdmg2eFg0NGZmRFJ6bmV1OTZKMXFGQk1UckQxbVlCZTBWak41QjhWTUpNb3hKZzNJT3ExcHlrU1VRZ3RGZnpVdlVBTzMwQkM1Q0JBR0hkdEJNTTE5bkZ5RzBQQkFKVVoxUE1zUVFORm81UTVUelNXcE5YcTFzakpUR3JzOXp2OEFCdFdteFY3Y1g2U0tn''@;'; put 'put ''ODJGQlVFSFU3TElVMm8yMHN6ZXBqWXJEbnYyTjdIdEhSUFkrZzd6RTZESytQNEg5bHNzbUxXalBwU3FmRHJDSDg2STBnT2xGR2pGeFlnZVk1Z0dSMTU2MHFkdG10T1pwRWFuSEZVM0VTYWJkT01WbEJ0dUNrTE1GaW0vT2k4dUpNdW1welpoU2JPenRMRW00cTh0RnFIcXVJZXRHZm9jOGgvZU1F''@;'; put 'put ''UC9ZNUptUzNnVG1HSFR2QW5GVmdzSWdlM0FIbThoeE1BZnJvRGpDcnViRlcwTDBjaG15R2VUblhqd2w5Y3lNTXp4TVNYZ01aWkFGVGZ6RFRaNlh5aDJsNmNNSkI4dENzTkwxbTJRQUNVYmNBZHFaOHhxUGwxaEp6NVd4Rk5taHRrWVdTQ1NRa1ZqSkhValNaQ0t3Q2NGR3lTZ2FKdExibkRMNlRO''@;'; put 'put ''RXZpdDNrcXlWMTNrZk9MMG9meE1la2pMUGVqaytYcXBEREpsTmJXQ0VRajZpcUFOTXV4QnBmWmdHNnRtQWhhbWR6cjZkR3NnRS9DTjZRNW9RUVBaZmt0TzJ1ZzNRN0FuRDJFUmcyb0FkdEFHeUdzdWVsdHQ2cWs5VUFiV2drM3ZHV3pUR1J6QzVyWFI0NXMxNURIL1drY0lZVWFnN1hBZGw0blZU''@;'; put 'put ''VThCbXZCc21qWXpIM2JudmNtOGN1TGdjR0c2M29LOVpXYldkTTljL2ZNNW95bHlVaTRMOXFzOFc3azJHYmprVS9NYmN4Z1FveW1XTDRQby9GcW1RL2V5V2dLcTJoek04d3g5UGdPTUdjVkdPQ0RhM2VBV2MzMXM0Sk9jcGc4amE5ZnBEa3piS3dJbjgvNis3YjBBNklDSjFRd3g1Qm5NOHo2cndI''@;'; put 'put ''R3h1WVQ0Zk5aUDc4RjV0OEJwb1ROaC9lenN2N1pqZk1CZnFxRmI5OW5PUVRsTkx0OG8zV3hvR2RuREFhVmVXR3h3STl5U3htcjhYTkNzd0xRTmNaOEhJRTVURW1yRWtNQTNrcUtvUER4MTNueTE4REFyNlo1K3RleitKbGNDaGh1V01UK3RVZDRJdGlMaS84QU9HRDVMVXlteEdXWmN1OFdQTEdj''@;'; put 'put ''RFlhbmhMeTNuOWtpZHpiREhNT3hIV0RPS2pDd3QxL2RBZWJ5SEV3QmVuSUhtTlhjV0N2b3VVM3lpK1pNM1lGZkpRNVFBcm9uZEFqSDZvSmg0SXh3bXVac3V2R0h6NzA3Yys2Mjd0dk9kYjc3M0IzbjN0M0pQbWZlZlE2eGVqVWxSNFZXdWRhamM3Si82OElhVWxkYlhsWmkxdEdVYktRVlJqenNx''@;'; put 'put ''YUI2aXVIcFBHOVF6SUlwOUxqZWxkVnRPRUVFZzBKOXBPVGlSNEk2OVhGZnBoQ1l2VDRRQ2RuRGRsWnhvV1J4aDhBOVRLc3lVSk1pY3JreEQ0MGpYdTZGWFVueTFlVEIrNWJTcTVHR0kvTU5qY0RhVFVjajlVZm1KRlJaaGtlN3NzRGhPSE82djZKTWVpS1RKY1UzOUMzZGY5QlhtVnFKMzlnSHZP''@;'; put 'put ''MnRiRnlSZmp6dHd6ZFREcGYrTUhUZFFNTzBYN3E1bnVLZTVXbXdmVzZXYWVIUkxmU3lHZVlZK3ZFT01HY1ZHS0NGeis0QXM1cnJad1Y5YWpPZmMxdVpqZFV1ai9YY3huNDI1ZTgwWk9xQU9yUWFyRjNXWWZuNEsxZUVDWnJMNG5KWTNFVnVhOGhiSlBLc2dxUXEyeW1ZeTNaYWVXWkx0dE9abHRW''@;'; put 'put ''TTkwckw5ZDhiYUcvdmw5WnlzU3ZpSlY4RFNUWC9sQkhzZGhvdXFRZnFxQUFkQUVwTW9NZEUrWFJUdktERGN0aTZURTVxWE0wQnFsN1BaNHoyZ0RmZ3JmT3pZNjFjakZSVXBwcFNjbzFTaWw2Z2NlYXhsaU9aek9IbWcrMDBXM1ozZTh2d2NFdDdKTm5iMDVqc1hTYm1wdWxvZExycFdMcGlYM1BU''@;'; put 'put ''ZEd5ZTVzbk9kRWFpN1oxeG1qTUt1T1o1QXE4QXJ2dEF2eFBVdTRpMmVTN0FIbnhBOWZ5aUFvL0ZXVFg4QzdubkJRUHE1OC9sK2wrWlVEMFhLblB3cGhzNW44Sno0VU5nSDBaUUVtVndONi9wTFNzRExIczlZSTA0c1ZIZmpIVkdBeUdpam5wMnVoRzVpSGRIR0JPRnliODJiUE42ZnA2UEV3SENv''@;'; put 'put ''bFdHcTBpUGRLSmV0MXhnSUVwR2ZrbTIwR1FXcUJiUEp3M1FjWnN1MmNhTWN5MnloZGhrVWdtTXpPYUdLTitNRmc2L1pSZGdSbFExTnRiWEk5U1lhZXhxYTZsUDFpZGlVY0JjblQzZ0R3UURRVXZPckZEUzNMZGtZUER6aVUwSHZpQnpPbkR1dlBGbGZ2cWJPUm4wWHRtN2RFS1ZuakhYdlZBU1dH''@;'; put 'put ''M2JmQ0lzZmFBM1RMTTJlbHI0MlhCTEl0RXlONVpQMjRqWFJ4S3FrMkxwRG4rYlArQm9xcW1Oc2J5RVRwYVhrRUlQWmNxRFdLdHBEQkdkTmxWS2tLNEVDNmk0RURhNEFMeG1uV3dXQm1oNUFBRmpRUWNjcFdPc3gwcmRlTkxGQVpEQ0hxellkVUVLQzNBM1hSbzQ0OXNDeHdyZ2orVEF0UlQzeGhD''@;'; put 'put ''ejNoaTNCblIvb3VGR0V5WHdEK2JpbHEyR1czSDM4YTd0c2ljQ2Rac050eGJEMk9tZUxka1VuTDk0ZmdEbDN5SE8xOHZiUGFkOC9SSFY4NHNLUEJZWDFmRFA1ZnBabVdIUDE3L0d6dXhvUDkvZy9kL080V2xRTEtKNmZzeko0WDhHejgycy8yL3cvaC9rejM4TXorMnNmdzYvY2krUEw5R2FxVTd5''@;'; put 'put ''VFZRR1Z0YmVqTDJJMVFiS2xwUERialBpb2V4anBmUVlUd25lV3pka2w5SkRYd3lhQUpOVjlXTndkOHZMeTJ2TGF3SytVSkRtMnlzcVdORys3aEExS1VMY3BpQnk4cW1PMjlvL24rNDVreDA5Mjl0MnJPZEFiM2pmbWZMSnFvYWwvZ01WUFFWejFjT3hnWGw2OUdINTFOS2VXNFo3ejQ0T1hkVTFQ''@;'; put 'put ''anJSMkJzb3JneW42M3JMMTM2MmxJMk8xaThPeDhjakZFLzhUSS9LeTBrdUwvZm04VDNLOExlYjQvWDBkcy9wdmoyZ2VuNVJnY2ZpRldyNEYzTFBDL2FybnorWDYzOWxtY3ZkYm5SRXJtdTJnTVhjbGdIdHJGUE96QkVMVFNFTmtQOHNrTDkyU1FTKzFFNHdqOUJUVkFyYVZZa2s2cWxycmo1R0I4''@;'; put 'put ''ZFFYYU9FcmNHZ3B5UVFLUGtGcmFYNmx2d0wvbEtvdENRWUxDa05kYzAvcjN5RU9TbG5qRzVVaFdweU5wc0RiTFl3UUxsTllKM3BGWnNObmdxcXA5dmFiQ1hiMld6cUE3THRiRGF2MTF2anJRN2F3cllOTnB2YVpLTVdtOFp0NXdhYml4cHNZUUVFWnpnNGN1UFFaRS9aL2g1ZkNCaDZvcjlzZnk4''@;'; put 'put ''SXU1L1V4S0s3b3Y4OEVmWENKL3pCL1ltaEcwY2lWV09oaFNTd2NyMTMvTGR4YlBJQU4zOFIyTGs5S3IzaFlmdkd6MmpvL3M5eHVqaUl0bmxPNmVKRHF1Y1hGWGdzN2xYRFA1ZnJaMlUzZjg3UEhtZy8rK1YrN2xhZHEvS2NyQS9uejFXM1RaZmJlcmE2UTdyY3RvZXcyNytXTStmb0llemJQSVcx''@;'; put 'put ''L3M5UFlZWFZyZWx5T2R3OEorTUdjRGFKVkRHWGxseGM1aWo2MkJhL2h0cy9kK1hzbjZPRGFMdVlEamFnKzNab203T2RzR0dTeThiUzlUMkNGMnhmTi9UU2tXa3R3VUI5V0lmSmlCNU1idGhxc3NMS2ZlaTlNMERQU2xtZEhZMFdGeGVYRnBjR2FPekc0YVZCQnkyUG9hWDlZVjRLeGxWK0ltMGln''@;'; put 'put ''dGVmaUhlNEM5cHpkV0hGRmVVbFpSYnB6anZ2cW1oTkJNdDRpVmlGdTloanhaMnNVRXpPTzkxRGVvQm42VTFDVDNNR0xQT0E2VldLaWVDQXFkVkg5SUplRkRIVzE4Q1VtV1cyM1d1dC9Gcm00UnJvV2RRVGNWV3BaQzhCeDFxdjU1RkN0M3FKbmt6OVZsaFEzQmE1QWRvRVA1K3gxdGJXcG1vYlF3''@;'; put 'put ''RTdHRTFocjFFc3k2RWx0WVBONUxRcWlBcXBNbGhKRDBWWnlaWWsxcFdyT2VwK3F5U3pVZ1NHeS9vM0pyUFMvRmFHelkvbGsxcGx2L2h1NWd1RlpGL281MXQ4S3A3TFNYbDNRT2JkRDZyYW5sWGFZajE2YkllMkYrVzJCT3ZuT0gyeTJqWFdOaXkzUGIydHovNWI4Z3pBRERJWWk5QUJKcmtCWUo0''@;'; put 'put ''V01BVUNHRGxHQXBUL3pseU81N1VnVDByaHpXc1hiQnBpMEN1bnpTR3FWakFTdEdnWk5nZ2tpMTR2NTlEUlV4RitNUVZQQ0tMU3AzWkhhQ2JGYVJNbTFkMUVFVU1iV3hSZXNzVUc0RHljVGlmbjhhcUJhVHpQNXZGNGFqMDFZWG9pSC9MTHh6WCtMV21neWtVZ2FITTJ4YldaRGVrVTk5OS9LQ1A5''@;'; put 'put ''VXAxVDBiLzJqQ29uOUdPdDdlMXJYOStRVlpHTG9iWGtZbWhINGY5dDlodnN1YnR5OXR6UmNiUmQvQTBiMFhkMmFLdllnZ0xBZkpIWHlBSFA5N0U3RmdZemZVV2dpSzJBTzM2R1RMUDdLZU9KQzBnVTVZQXlGZktXTERNa2dESHRXdVhZemVHblZUWld5b0JLUGFKZjRUTzN6SkdxQXNWaHpsVVZU''@;'; put 'put ''RTVKVHlqVmlveUhtcG1JNGpXRzlLeHloZVhLaGxBOWVtZkdScjJLRUNaYXNCMklBV3dCbWdsZkJ2UlJEZWErUnF2VExOTmdyYkxqOHUwNExHT0dTUSttcllJS0tGcy9QcnhkQzVxb1doUU9oK3ZERVpmUEhtcjBCMW1ZVjl5MEl0Mld0RnZxR3lBNTlmYkgyY0xjSW5XNmdvMHB1TlhnbVVtL2ti''@;'; put 'put ''MnVVbmVoc25LYkZhdnljY0VIdzJkNFN1NDJzVmo5TnJIWXpiNkFYdllGV0swbW81RmFXV2Q5ZVV0Ym5rOUxhV1NFNjZ4VGNsdnBaN1RPazdjRjJyR1FVc1R2ZndCNHdZOEtVUU5xUmZka0hQV1ZSQzhxNVFvQ3ZRNEVEWEg1VUdlaVJ4U0NYck5xd1BsNlhsSFVMb0VicmRYeTArMGxmcnJ0b1pk''@;'; put 'put ''NmJZVTJZcDNPeXR1Z1RTM0FtWTVHYVlRMjJocHRTU1V0RFphR3VocS90NnpVYWFlUjJtS3pZdHJTKzZpNE5lditFOUoyY1dWVlZkZ2ZNRGdycTF6Ly9aWVp2Sk4xdnJLMmhwSmdUYVhMVlRYNnR0SjV3WmQ2RFlpeGl2RS9qMWtmWGYvVWxyajI5d0NtbFBFLzk3ZU9mb3pIdE9McmU5RHJ3TU1P''@;'; put 'put ''bnVkQXNJUG5nU2hYZWZBY0lLNHpBMTZYbDVYTHlDZHdhVm9rcVhEcTY1UlVMZVpsSFdkUHF1c2NnUUx5a0d3cjBOelpkUmpyQlhZVzdhVzU2MDRIMFFoZUpqSjBxbzJWVFhOTGpxTlkwa0pWUldteDIyVXAyRFl2MXE1TXlLMmUwU0g1akhxWXpxekNiVDhjNTFQTG4xV3ZWY0VzeTJNbUhYNTk3''@;'; put 'put ''WS95TklGbWFmbk5VL2t6QUpCM3hrMXhTSlpqQ242d05sZkhhOTFTeHp0NCtEQk5jb0wrWm9BSFBnUzYwQWUwem5nQS95djNtZUY1QmVPTmNmbjVwOWx6Vmp2TGRIOVUxdjNXTGZ3R0hJcnJoZmNBeklRTTQwSVhPTXdGQlliWDRENmo5QVA5UDh6ME5GYnBhZHJQWVFZekljT2Mzd2pEOC9sSkw5''@;'; put 'put ''QklBYzM0Tkp1TUJuQzFCRDFScXBFM0ZmWVdvQUpucnJCWFRGRWlTVHRGSittVkduYnRXcm4xMXNWRnNBRVhhdkNJOVBQZWhkNGZ5dlVDWHBhWG5NMFVtSXlpam1wZ2ZUNHYzUVFmaStSNnZseGFjTDdFejhOK1V3NWI1dWVmZExMN3N6RE5DNVRIeDk3SlEyTmpoeWJ4d1JycEphd0xMNFR4blBT''@;'; put 'put ''RG10eVp5VTNLbVFuZzhSZmI0UnA4OWxka241M2FXZmR6V3duMjcyRzJyM0ZadHZIWTZoQTh0eEtyQWc4NGZTRm5XejNNWkhCY2xzR2YzMkdzaTduNGdQNDRVcDJUdE9UT1NZNmlwN2JZWmR4dnZpdm40eDlkUU51ZDUrREN6V2NzY3R1cGZQd0JGMTRtNTZHQ3NINFY5dDZHeXVtNWZlNTJBVDNK''@;'; put 'put ''WFM5Z29LWFVTcTRZODlUSzdXVXVCOHNyNVlxOUpIOWNuRXV1Y0dKcjNnenE0NnA5N2ZrRDl4ODhkUDhTNlpIRVlYcDBlYnFQSy9lNWp5OHUzYnUwS0pueGZ3MmNIUmk0a3Q5RkNITVcvaDMwTzExWEM1cktUTHF4WG1jZ3RBQ1poUWVBaGpSYXZXYlpiQ0E2blJJS01JbEdRUlVNU0NiOWZvU1NM''@;'; put 'put ''Y25tcHBRLzRZL1gxVUIzWG5zZ0ZBZ1d3THczaGxIek1sNmx0aldiYkRwWmhRdGxQSDdhZXpvWVBOTXp6TktiZTA0SEF5ZTdGVFV1WGFQS2M4YlhicWlyNld4S2RmSE01NDdHVkR2VDUwU2QvSXl2cEpwZDF1dkgyZDZtWlByOTRoYTY0RG0zZEcrbmVXd3VLOXQrUUtmSEdmMm1aRHE5eU9HbG45''@;'; put 'put ''RWNYUm1lUG8vbWJJampqSDVUTXYzZXZPMVlaeGo5VG5QNnRmR3hXTzB6bTJlVFBNK1BiS0Y5bnF0TDV6bkQ1M2tFeVhYVG5heHV1Z3Y5ZDhZVmo1V1hhWFQ2RXF6QnhZVkUwQlNBdWFEWlBsY0F6TThsMFBrdTd2ZHA4ZFpUZjlzMnVRSnYzV3JiWElHM2FyWmpyc0EyRFhtdWdEa1k4ZFAwSEsv''@;'; put 'put ''VkFGN0ZKVUxOb2JkUkhrN2FycjFpbTZDeiszMnJseW9aUDM1U3R6bjJiRHgweVJKeWViOVl6blVIV2dmakNvdTZXQVhSaXVYQWs2VzA0RkM5YzZLOGM1R05PeWVLdWlWRUt6QlFQaUswSmNtamZ0UEd2V1dqeWkyN0RidndGcTNZRWVOMjI3YTFIZDgxVTZDMm1tMmFIdnlaUzUwUDRMZktMTWN2''@;'; put 'put ''SGh6ZkxzRWp2aFRlTWQxODE0eDJjNWFITmx5NWMvNjVpamZQS3J3SmZMMjRBMjllVkhnVDYrczRiOVlBYjlLN0FxclFGek1XTnhhUXl3ekt3RVR2SXBTM0ZnQTE3S1NHbm55U0cyaVFUMDR6TXVnSnMvTzJITmhFYUJNTlBZaDVPMjB5Tlp2QTVXT2JMYTAwTkpZSUpoNU10b282N0hTYnFOZnBG''@;'; put 'put ''WGZZSStySTB6c084RDc3MW4zd09PbTlCNXV5NEhweTF5Q3d2UDVPbHRmZmdMNldLYTdCZXFIV1NReDZCeWFHWEZLZk5rZi9XbzMyVmlPR2lXTERTVkJjZ0dGYVV5Z0ltZ1Vkcnl6a3VYdklneFFzMWVmYjZBM2twcmRxbEtuZEhwNmxCcUlqcW1ZQ3hST1YydzJvbmhVYnVBRlROTEtoMllHU3R4''@;'; put 'put ''WWd1Q25oNC9nVzJrMjA1MnNTQW1YVlJadXpDSnYxbzJsMW1VS2YyeGhnOU1mdXBHQTBtcFpwOUlvdE5Pb0ZHMFpndHV3c3QyWEp4Qlo3bCtjaHRPVHlFSTV1bzRkNHJQeXVYS3o4NkFoUzVUQzhuTXR6TUtHLzM1TER3TnF5ODIwV2x3ZVltN2ZMb3dBYjdCUGJ0bTNQeC9weDRXNGszNmV4aDky''@;'; put 'put ''bkVhRG5NMDRRUndXd3JZVkE0c3hObHROUDhuSDF2Tk1FTFFLQlluL1F3ZThuWXRrRW04SVFtNjdmSVBlTTNqYXR0K1ZpRDQ0ajE4bjNjSkR6N05ZTlM2a2NiUEI1M1BlY1ZGL0t3ZWM2QUhPZEE3L0lqMjdpVXRwU3JJZE5FVEVXL0ZpSDZabE5FWHZpWjVGcjRGRThMQWQ3eStSS0YxcFpzazE4''@;'; put 'put ''dDBwK1RXTzZ1ZXFUalNGZFk0Q1d1SVc5b2lyRXZiVVNKWm1MNHBJNUZrUlMxNlVjenJ1dndiTE5CU3FLa3doN3hlNEtZZlRZeW5OZThOZ1dPdUsxS0ZSbTdtVzBJS0x2cVBKY3ppcDVMdkQ4M1Z2YThyT0hpOHJaQXhibmthcnRhaTVIWmdYZHNJV08yQjBlak5ZNlpGdHJTNTZiWFA5QmFXMkIy''@;'; put 'put ''MXJ5ZVNOdnU2cTBCZC8zMnp1MGZVNXVTK09CSDFhMVBadHJxMGRuZDJoN1VSa1g2OXNZM2JDNld1cFBGOUk0Qk0xSXB6VTdMQTdCQ21ESUFXcTlleGhSRjZJQ2UwQzU3a3BWRG12SWw4Ritma3Z0SzgwYlAwd3V2czI3UE56MExvL1B6SzcyajQvMWtZdDM3dDY5ZlIrNStpU0NiZ1dlT3kxWEo4''@;'; put 'put ''bDlwSk9pdjZ0dmJMeC9kWlpjM0wzN1RybVBFWHdGZVE3MlVjN0dOeEthano5aUFCVTV0RjMrZUFFeUI0VmNOcjRjY21KT3ljUGpsWTJPVkdscHl0RllNVkZMUnFvcVVnNlh5NUdxcUdMalRLS0hXS3dseE1hNVpHNzY1a3gvSmJzL0h5bVJhd2xHc0VPb1pMVUV6YXhYZW04T3phWmYxV0lCT0h3''@;'; put 'put ''MlZ3UXF2SzJLQXZYOTlUZDFkVVVpblowUmVvRTYvU0lqL1BkSVY0SS9jUHQ0anZ3ZVFMb2JXVkVybTBHMEVCWmpvZFF5b21XVkFPeFdHTURwTEpPRUFuMHp3YXVtQWk2TlhGVWczOE91Q2pMZjBGSGg3czhGbGg5aFVTRzNIRkxtZDdtVGRudzdlUUZHN21IanBwM1FzNEZWYVRrd0h0SmpZWkFl''@;'; put 'put ''bUpOWnFrNkJmbGVWS3pTSU1NR01ReGZvVUsxTUhJaWFmTW9WeS9TR2RLNHkvYmpBVjJ4MW0reHViYnBvMnNrKzI5eTZ0R1dHZE5xc0JRVVZYc003K0UvOURYdy91dkIvc0ZvSUVaWHlpZ0V0SUdlSXVyYW43YlpjRFlWYjlBZmxvZ2ljUGZDQlFmS0s0NVlQT2Q3SitLNVgrdG42ayt0ZkFxWUtz''@;'; put 'put ''QjVLK0Yza0crdTBBcm0reEkyWGtsL2dnVTFQVlZWNG5RY3RXUUF6Sng5dlV1UWo2c1YxTzhqSFZ4VDVpSHJSNHdodDAvWVlmdm90Mng3RFhhcTJxN20ySzdoL2kzemtiWi9MdFYxQlgrZis3Zm9nUGM5UW40VzgrVHR1UDd6NU85bCtpQUJNbVBuR1F6TE0wd3lHcUdCNHJQM3lYRDhGUUEzYng5''@;'; put 'put ''cGZ5TVhhQzhiUXRqbVF2ZWk5TytpR1YzTG4wcjBIdU81dFJQOUdUTGpqcmUrQmYxV3F3UjF6U2h1aC9XMjBFZlJ2L2w1cDA0MC9neTZTendMTmxERjZHZHBjRU1mcHhhN0V5M2xzOW9YOEJmYms5ZzAzMkRQYkIzOFdmWnM4Q0N1MkFBWml2TGFOeEhLMWJUQW0vbXMyWmptOTBhbThFT2g4UXlH''@;'; put 'put ''VHdJUmFvRGhnWXpkSWJSeGJ1K05Vc0c2SGFWV3BQdlA1NFVmSWcwVmhQajgyejMrR2VkcHk4NlJrb2t5WVl2Rmh2QXZXWk5tcExvald4Yk82b0UxMThZKzMrbnp3cjRYK2V4ZytlZW52WHZqQThkUUxkUE5PZEIzc1BUZ3lSWDc0L3MrTWhxM0FJd2prUUdUOWQ1b3pxcitQMGdYVU9JdCt5Zk1j''@;'; put 'put ''NHhhc0xlUi92a1NQZFdac05PbU02ajk1WWkrd0NTYVRzR1ExRklrYTlWOUtTYjFGUS9aWFQzaHJrYllXNUwrWDBySnR1MjMrWXNxV3R1Q0JOSTJPWmpMS1gwNFpuUjJkMmIwcms4Mk1EUFRGdW1LZHpVM2IvaFVWeC8vZ3I2aFViZm85b0lLdGF2cVQvOElLSHNrcXY0eEVwZlBLMzF2NUsvb2g4''@;'; put 'put ''YWY4NFpYODU0bUczQjloeWY4eEZneldmUktYNEwrak4rWThBUVp6cks0THV3RjNnZnQyMzMzMzdqZGZ0RDl4d2NGcldRR3VRb0VUR0Z3NDdSWnJQL2pCM1ovKzlPQ0ZKK3d2dnN4MHdTL2tPM1NqYUNJeld1WWhHbnJIZ0lsWjZScFFjT0JiTHhzd01XSnNvclVPdVJvWE0wdE81UkVRK0I1RkRa''@;'; put 'put ''RzYyaHFyTFFqT29OVWVMS0RCcTl4RlEySHdGRm5tU1NyWlNmS1ZsVFJoREpEczlyS1FLaXR2U2R3Nk5QYWVGZmZNSU5FTTd5OVp2bTFFTG1rWnVOYUxLNldYWUNHdDB2Y3Jic3BPc210M3U2OGU3Qzh1QUNYZWUxazdLMmdaNitvdks3SGIrZ2RtWlpubEpRNThQY2c1M1JPRTFoRFljN2Q3WDAv''@;'; put 'put ''djlXYUdESmd5QWtoZHI5VkxoTFUxK3BYTFhXaVI3MkxRUDFWaUw5Q1MyRFozUFcyOUs2SGw4Q1h1U3ZqajNoMnZTcEJqOWkxVXh1T1lmT2J3K1Z3c3Y0WHFMdlpjZGM3S25sL01QUmV2UTl2Qm81V3IxTS96L2ZmS2ZpcC9mbGNPL3VneDVUNktQZVJkZ0FNdmlnTU9xbjAyRERqWTdHTXBpTWg3''@;'; put 'put ''V0lITktIa1g4N2pVYUpFOXJuV2tRZzkzdjlRSWtsMnZlemZuUHJENVVuK2Jyd1A4N1UrcDF2RkNEaDhGUjNNNS9PZzh1M05Hb1lPazFUK20zQjZEYWQ0YnZOZHVmYTlkbTBEL0Q1RDhFaUlBQUFBQUFRQUFBQUVBQUE4Q0creGZEenoxQUI4RDZBQUFBQURUd1oyR0FBQUFBTlMrcE92L1EvN29C''@;'; put 'put ''SFVEeVFBQUFBZ0FBZ0FBQUFBQUFIamFZMkJrWUdBKytlOEtBd1BMb3YvTy95dFlTaG1BSXNpQTBSQUFwZklHcXdBQUFIamFkWlEvYUpOUkZNWFB2VjhHUlJ5c1dGRnNhekhXSmtTYTF0aHF3Y1kweFZTVFNGdHJnMElYY1ZBUnNhQ3A0dUpTc1E0dTR1UmtFRjBzNnVSVy93emk0SzZUT0VsVVdt''@;'; put 'put ''Z29XQXIxODl4bklqR0pDWWNmZWZuZWUvZWVkNzRueTVnRVA1S2xXcWtkeU1ockRHa0JRYjJJRGkrTWlEN0VicXhnU0M2aG53ckxmZXpYY1NTa0NVZGtDakZaajZRODh4ZjBKWG9sajJiKzE2V2oyS1hUMUNTNk5ZOWVQWVUrUGN2eFBQcmM4NXlyR1k1eEhmS1lyR0tyTjhXOVN0aXV6NUhUT1VS''@;'; put 'put ''MWxieUd0SjZuaXZ6OUVXbXNJYU90Mk1LYUpuUWZCcjNUeUhrZUZlTC9zMGc3M3VQenJGMnZJNlFMR0xFMUF3ZlFwdlBVRTJ6VVc2enpDbzZ6NWhXeVM3NmhSMGY4WHpLQnVCN0dYcDFCVm5leWxobXVOWWFJbkVPNzNtVHRPUXhqQ1lldzVML1hUcVJRd3JCM0J5a2JaNTBSTjQ5elpCWlpLYUZE''@;'; put 'put ''Ym5CZWpuMG0wT3dOb1VVajdHMGMyM1FkZXVRdU9xVUZGOGl3dk1KQjg5M3RPWTJZMVNndldFc2JRanlMdUt2ck5vTDRpUUVaY09OUityWEhlZFZBZ1NiUy9EUHZxb1ExLzRQNVJ5NVNYNzNOQ0ZlOHE1VUdrWEUwLzZwbC90Rm5ubG5XZWRWQTNqeHB2WXo5Sy9yMmp2Nmx5Q0wxUmEveS9DdmUx''@;'; put 'put ''Y3B5WVRUL3FtWCttYzlHNjlmMnJLWDFidnRYYURuaXVWaS8rcURzeTVqYnB6RXRhM2JlWmRLcno2ejNFNzNySm4zeXFQWGhNc2djV0E0dEMzOTVCdTB5aUhiejF2cXJZOGpWRUtrd3NBSFJ3Q2J1eTl4YWR1cklMRnVlNnNoOHU0eFZhT2RqSHYySDlnNjRITm9abW4vbGQ4SHlXRXZMdUJTWVBk''@;'; put 'put ''TlR4UEdkUEVFbHFEZm8xekRINENjcmE5YXl6dFB5bnJJTWVNVS85dzFXcWNlQXhoSHpMdk1lYVNyZktZdmtJdmtJSi9VdDd3cmVTNEVDMzhNa2dsUlk1L3dmTGg4ZTUvSmNHM3l6eVA0R2o1Znd0QUI0MmtYQ1hVZ2FjUUFBY0x1dU03OHVNenZQMjNtZmVwOTVudi96N2tFaVFpSkNJcUluaWVI''@;'; put 'put ''RGlCZ3hZc1NJaUlneHhoNUdSRVFQRVNJUnNZYzlEQW1KRVNFajloQWpJa1JpakpBaEVoSWlNVWFJak5qTFlQeCtOcHR0OForODdXT1hyU3NMVWRBMlZJVEswSDMzWHZkWmR3T0c0REE4REwrRkQrRmF6MmpQVWs4SllaQVVVclJqOWhuN25IM1ZucmNYZStIZXVzUHZXSEFVSEEwbjdrdzV0NTBs''@;'; put 'put ''WjhXRnVJQnJ4clhtT25EZHVjUHVkZmVweCt2UlBmT2VEYytKcDRHaWFCSjlpaTZoTytneFdrRmJmYy83SHIwVDNtcS8zdi9HWi9ObGZYbmZuNEd4Z1pjREZUL2xuL2VYQjBjR2x3ZlBNUmlid2hheEhIWWVnQUphWUNXd0hiZ0pOSEVLWDhDUDhZZGdJamdhekFaWGdoK0NGNFJHSklrTklrOFVp''@;'; put 'put ''RE9pUXR3UzdTZWpwSmZreUFRNVRtYklCWEtOM0NUM3lTYjVHUEtHdUZBaU5CN0toSllwbU1Jb2lVcFNrMVNXeXRFUWpkSUVMZENBSHFIVFRKcHBNUjBXWVgwc3hTcXN4YWJZS2JiRWZtT3YyUnJiWWpzY3drMXoxMXlOYTNFZEh1RjkvQTYvengveEpmNkt2d2tyNFhLNEhyNlBRQkUwd2tSQUpC''@;'; put 'put ''bHBSRG9DSXVCQ1dIZ2xkRVMzaUl1S2FJa3BzU0YySkVRYWxyYWtBK216OUZXNmttclNieG1SY1hsQ2ZpZnZ5b2R5UVQ2VkwrVWZjbE51SzA0RlUrYVVXNld0d3FwWEpWVk5UYXFUYW1aSWovWkdpYWdRTFdxejJndHRYZHZTY3RvbjdVUzcwTDdIdE5oQnJCajdFaXZIcXJGN0hkSlJuZEdIOUJF''@;'; put 'put ''OXJhL3FPYjJrLzRxVDhXeDhMMTRIQ0FCZ0RFeURaMkFSdkFZYklBOEs0QXhjZ3ArZytaK0JHSXlSTm1hTlBlUElxQm90bzVXb0o5cW0yMXcxMzV1N1p0bXNtbmZtZ3dWWnFFVlk4OWFTdFc1dFd2bS9hbXpBVFFBQUFRQUFBVHdBWWdBS0FEOEFCQUFDQUNnQU9RQ0xBQUFBa0FGQkFBTUFBWGph''@;'; put 'put ''aFpMTlRzSkFGSVZQQ3hxSWhLQXhMcnBxWExpVHZ5Z1lYR3JjQ0dva2xwMEpTQVZpc2RBV0UxL0ZOekR4UWZ4NUFqYytnMHVYbmc2M0NBWWxrMmErbVh2dXVUTzNBMkFOSDRoQml5Y0JIUEliczRaTnJzYXNJNDFyNFJqMkVBakhVY1NUOEJLTWljOHljNytFRXlocWhuQVNobFlWWHNHT0ZubW1Z''@;'; put 'put ''R2tQd2htc2E1L0NxMGpwY2VGbmJPZ1o0UmZrOVMzaFZ5UjBTL2dOYWYxeXpPOHhHTHFEQTdnWTRCNGVldWlneTVPYmVPUlhSQjRGbEVndFJrM3F1a3Jqayt1Yys4enltWHVMTEdxd21lY3BKeGVPcU1MZE5ubEU3VG01UTNMUXBLN0FuTHdhKzdqQU1SbzRJYzF6Mlo1eFdWekgvRlhKNHNxanFx''@;'; put 'put ''ZE9hazVWWGx6TjRueEZqVXRWMklGVE90aFQ5WnJrTThiRFdKVnorNThlaFgwTnVLb2d4M0UzNCt3cTMvN0VOY3VZeTNXVTQwdFdoOUdBdXlQK2tVaVQ0eHpWN0t0Ny90VE16YjNqWDN2UnJSdmtGdDl5NkJCTU9sYVQvaDJwcU1sUlVyRXl6MVpndklKZHZwam8xWlJ4UTUzTkNnUHB2MDF2bjlt''@;'; put 'put ''UmF4MUQ3dlFZOHhoenZnSEZmWVZqQUFBQWVOcHRrMWRzSEZVVWhyL2ZzWGZkTms3dnZWZkhYdmZFS1M1cng3RmpKeTV4N01SSnhydGpaL0Y2RjhhN2NXeTZCQUllUVBEQ00rVUpFTDBLSkhoQW9sZlJld2ZSZWFRSDc5d0pYaVR1dzN6L0daM3puelAzM2lFTGQ1MGJZQjcvczFTYmZwREZETExK''@;'; put 'put ''d1llZlhQTElwNEJDQXN5a2lGbk1aZzV6cCtybnM0Q0ZMR0l4UzFqS01wYXpncFdzWWpWcldNczYxck9Cald4aU0xdll5amEyVTh3T1NpZ2xTQm5sVkZCSkZkWFVzSk5kMUxLYlBleGxIM1hVMDBBaklacG9aajh0SEtDVk5nN1NUZ2VIT0V3blhYVFR3eEY2T1VvZi9SempPQU9jNENTbnNMaWRx''@;'; put 'put ''N2lhbTdtQk8zaWY2N21XcC9tWU83bU51M21lWjdtSFFjTGNTSVFYc1htT0YzaVZsM2laVi9pV0lkN2dOVjduWG9iNWhadDRtemQ1aTlOOHo0OWN4d1ZFR1dHVUdIRnVJY0ZGWElqREdDbVNuR0djN3pqTEpCTmN6S1Zjd21QY3l1VmN4aFZjeVEvOHhPUEswZ3hsSzBjKytmbUx2emtubEtzODVV''@;'; put 'put ''c3FVS0VDbXFraXpkSnN6ZUZYZnROY3pkTjhMZEJDTGVKMzN0RmlMZEZTTGROeXJlQnp2dEJLcmRKcXJkRmFyZE42YmRCR2JlSSs3dGRtYmRGV2JkTjJGV3VIU3ZpRFAvbVNyMVNxb01wVXJncFZxa3JWcXRGTzdWS3RkbXVQOW1vZlQ2aE85V3BRSTEvempVSzh5MmQ4d0lkOHhLZTh4eWRxVXJQ''@;'; put 'put ''MnEwVUgxS28ySFZTN09uUkloOVdwTG5XclIwZlV5d004eUNNOHlrTTh6RFhjcGFNOHc1TThwVDUrVnIrTzZiZ0dkRUluZFVxV0JoVldSTGFHL0hXalZ0aEp4UDJXb2E5dTBMSFAyRDdMaGI4dU1aeUkyeU4reTlEWEdMYlNTUkdEeHFrS0sra1BlUmEyWVg0b2traGE0YkFkVCtiYi8wcC95TE95''@;'; put 'put ''UGF1UThiQmRGRGFIRTZPamxra3RITTRJL0MyZWU5UmppK2NUTlN4c3phd2N5UWg4YlZZNGxiUjlNWU0yMHk5bTBHNWV4bDBVdG1kNnhETTkyazE2M0lXL3c1c2hZUmpvT0oyS0QxdE9halJtcFpLQlJHYms2elFkSE5PaE03T0RrOW1oMDNSd0RMcE0xWmdMZnlvZUxTbXRESG9zODNXYnBLU1pw''@;'; put 'put ''c2ViSm1XWTArTkU0OE01cWZRejBQT2Z5Vktaa2IvSDI4R1VZVUZ2T09xRVU2TkRNZnRzd1hpRzdzdlFFOVBhMTI5bW5IU1Izejk5MnBQVHA1MmVPRmhXNWJJc1dPbnJIWGFzcVdzMWJ0QnJITVpkNVBWR29yWmpqMFhIOHNiUHEzUmRhYWkrMm1PTnh3YVBqYjQrWXpUaEl2MDJXRklTOUZqbXNk''@;'; put 'put ''eGpoY2RLdzJCVGRpamxKTnlnb3FraHh5cTJZc2w4eTUzRlNQZnVwMldSTmYzWjZUaGduUi9RSkxyZDA3TEErMzJNTnZ1YTFubFcralJNY2pJYWk3akp1ZGJZMUI1RmJDY3ZZbnZxSDdkbHR5RUFBQUI0Mm1QdzNzRndJaWhpSXlOalgrUUd4cDBjREJ3TXlRVWJHZGlkTmtreU1taUJHSnQ1T0Jn''@;'; put 'put ''NUlDd3hOakNMdzJrWHN3TURJd01ua00zcHRJc0J5bVptY05tb3d0Z1JHTEhCb1NOaUkzT0t5MFkxRUc4WFJ3TURJNHREUjNKSUJFaEpKQkJzNXVOZzVOSGF3ZmkvZFFOTDcwWW1CcGZOckNsc0RDNHVBUDRjSldBQUFBQUFBVmlZOUd3QUFBPT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OjUwMDtmb250LXN0eWxlOm5vcm1hbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXM7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBRmFFQUJNQUFBQUFvdUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQkdSbFJOQUFBQnFBQUFBQndBQUFBY2ZOSDU1a2RFUlVZQUFBSEVBQUFBVFFBQUFHSUgxUWY4UjFCUFV3QUFBaFFBQUFjWUFBQU9ka0RDZnBaSFUxVkNBQUFKTEFBQUFDQUFBQUFnUkhaTWRVOVRMeklBQUFsTUFBQUFUUUFBQUdCcEVxOEpZMjFoY0FBQUNad0FBQUpzQUFBRG5uZERE''@;'; put 'put ''N0ZqZG5RZ0FBQU1DQUFBQURBQUFBQThFaEVCOFdad1oyMEFBQXc0QUFBR09nQUFEUloyWkgxMloyRnpjQUFBRW5RQUFBQUlBQUFBQ0FBQUFCQm5iSGxtQUFBU2ZBQUFPTXdBQUc4a0hkN1lsMmhsWVdRQUFFdElBQUFBTmdBQUFEWUxjNGdSYUdobFlRQUFTNEFBQUFBaEFBQUFKQWVSQkNCb2JY''@;'; put 'put ''UjRBQUJMcEFBQUFvd0FBQVRhdVk0MEoyeHZZMkVBQUU0d0FBQUNkQUFBQW5yVSs3bjJiV0Y0Y0FBQVVLUUFBQUFnQUFBQUlBS1VBMUJ1WVcxbEFBQlF4QUFBQVk0QUFBTjZNZ2lJV25CdmMzUUFBRkpVQUFBRG9RQUFCaUdYRmoyS2NISmxjQUFBVmZnQUFBQ0JBQUFBalJsUUFoQjNaV0ptQUFC''@;'; put 'put ''V2ZBQUFBQVlBQUFBRzluaFltQUFBQUFFQUFBQUExRkcxYWdBQUFBRFR3WjJHQUFBQUFOUytwdlY0MmcyTVFRcUVRQkRFRWtmME1MUG9mN3lwTC9Eb2ZYZlYvei9BSWdSQzBUUUNMUjZjZEZSa2pWc283SHpUdjFENEI3bTQwNDhET2xvcE5sdjY0NVNlWFhMVDUxc1h6U2ErVzNBRjNBQUFBSGph''@;'; put 'put ''alZjTmJKYlZGWDdPdWZlK1gvc1ZhaW5sUitnWUlZUWhhVG9nVEpRZ0drWTYweFJVeGx3MWFMYnBuSU1oakRIQ051Y0tjMkFXQXBzL1hTVUxRKzEwa2dxc0NuYldrWVl3UnR4Q1pCTERvREFHRmFweE1vUXRCcFYzejN2ZUQvdld0dE0rNmRQVGMrOTczM3ZPZWU1MzdnY0JrTWM0MUVMbTFOUXRR''@;'; put 'put ''QkU4UFloak9QNFJLTnppYnk2L0R4Vkx2cjU4TVNxWExGNnltTE5CZnpLYXpralk4Yms4aG1NTUpwakhZVHpxWEVzNkdpMnpWU1hhZ0lnUHllQVZmR0tVK1FJcVBvS2dKdDVBRHBpSjlmZ1FzWXlDY2h1Y0p5T2xFeVVZeEoyZGpUdmlaK1BEOFRFTThCT2ZHM0RrVUwvZUxsVDIrdit0K0pFQlYz''@;'; put 'put ''aHp3SkdqQTQvRSt3WVllVFkrSHJjbitKai9NSC8va3FEdjIrUFg0bzN4UnVaMUxETTlnZG42SEtHb0podytUM2hNSlFLK1FFU1lUdVJ3TFZHRUdVUXhjenVUbFZwSkNGYmpaNXk1amdqTStIcjZkeEtDRnduQkh3akZRY0xqTmNMakdCRndpb2p3QmhIaERCSGhMSkhET1NLSDk0bGlWdTlEcmhZ''@;'; put 'put ''VGVTbVRNaFJMdVpTVEs2U0NQSXFWelhQdHlWVEplRDR6aVJEYmQ3cGp0UjA3MjdHM0hRZk1JWXBRUXhUalJpS1ArVVFKbHVMN1hDR0pKTEpJSW9za1lDTWU0L3hHb2hpL3dpYk9md0svNWZ4bmlCSnNKM0xZUVJUaDkwUU9yVVFSbmlkeWVJRW93aTZpR0cxRU1YWVRlWFFRZWV3aDh0aEw1UEVu''@;'; put 'put ''UXZCblFpdzdFWTRUSmZnbmtlWkZMUzlxZWZHV2wyQjVDWllYYjNueGxoY3ZJMlFFODNXbFhFbE9jaFM0YWpVek5JRTFybVp0cDdLbTA1bVpHY3pJVWl6RGQ3RWMzOE1LMW5JMTF1Q25lSkJaV01mb3R6T2k1MW5KRjFuQmc2emNNVmJzRFZicUxIZnl2cDJzTXI2M0lqbGYrb0NkdzMyeW5IRVBw''@;'; put 'put ''cjdhcWJ1TjhYLzZVYXVOOE8rWkFVZmVKQzcwOCtUNVR6cFBjV2Y4ci9nZjhTTTlKeTk3MHVJejhkWjQ2MGYvZFdlZnQyZVVKempSaEpnbUZGOGhIRzRqUEc0bkFoWVNFUlh4R09ja2FoQlRnNW9hRkMxRWhHMUVaSlVXcTdSWXBjVXFMVlpYUlJmaGNKcHc2Q1ljUGlBQ0xoR1JESkVock90UUdV''@;'; put 'put ''b2VKc1BJU1VYRktpb3lXa1p6ZlVVVnJpQktNSVFZWkVvWFU3cWEwbDFCNlY4aXNrcjNGaytVaVNkblNuY0ZwZmRvM0Z0VTNxTEtXVlNYbFo1cVBGWDNTOFRBdWs2aTlhWlpMVVNZS05kWm5EblRyelA5YWlIbVJNVmFpRHpSc21iaXp5cmFXUlp5TWxtdTVkdVRUNjhhUmppZjlicU5jUzFrSkky''@;'; put 'put ''TXBBbVBNNW9uOENTZVFqTWplb2FSYk9OcGJPTnVPN2pMdmR4ZEYydlF6WjFkNGc2RzhtMGorSmJSWEhHTTZWbFJhaDJsUFA0SjdYTE13L1cweE96cjJZazZvekhrazh6L0hsa3I2K1ZoYVpMTjBpeGJaWWZza3BkbGoreVhBM0pJanNnSk9TMXZ5N3Z5bmx4U3Iza3QwK0ZhcWVOMG9sYnJOSjJo''@;'; put 'put ''TjJpTjF1bDhyZGM3OVc1ZHBNdDBwZDZ2YS9RaDNhQ1A2aWJkb2s5cmk3WnFtKzdXdmZxS3ZxcXZhNmVlMUc1OVJ5L29SUWNYdVVHdTNJMTBZOXg0TjhsTmRsZTdtVzYydTlITmN3dmM3ZTVyN2g3M0hiZmNyWElQdUFmZHo5MHZYS1A3dFh2Uy9jNXRjeSs0bDF5SDIrZis2djdtRHJ2anJzdTk1''@;'; put 'put ''Zjd0L3VzKzhPcUxmS212OEtQOFdEL0JWL21wL2hvL3k4L3h0ZjVtZjZ0ZjZML2g3L1gzK1JYK2g3N0JyL1hyL2NPK3lXLzJ6WDZyMytGMytaZjlIci9mSC9DSC9CRi93cC8yYi90My9YditVdkFoSDhyQzhGQVp4b1dKb1RwTUN6UENEYUVtMUlYNW9UN2NHZTRPaThLeXNETGNIOWFFaDhLRzhH''@;'; put 'put ''allGTGFFcDBOTGFBMXRZWGZZRzE0SnI0YlhRMmM0R2JyRE8rRkN1QmdoaXFKQlBCMnJkRHU1d1hpMmNhMXhVOEpZWjl4cW5qWEdqUm0reFhpSzhTeGpXNDExU3V6NnpHcVRsSitwY3BWeHRmSGNoTEhhZUtlMmt4dk1mMTBQNDVUeHhjeFR6Y1pWeHFYR3Q3aEY1QmJqVmYyem5zdkVXR3YrUG93''@;'; put 'put ''N2pOdU4xL1d3M0pYR2J2WVM0LzNHalgwNXpjQUFPNmszbnFRZG44VDZ5MTY1NnVpUDhWWGpuY2FyZTVoNSt6VDhmMVptYm50NFZXYlB2ZXhNVFJ2TWY1WDVzL1pzeStGdnpMNHJrL24wTGIxc0cwM3JtL1UzbVQwM3RXMU9xcG0wT21uVXFUNExkc0dmekdrMWU2ZGJlVm05QlkxMW1uMDBzUXMx''@;'; put 'put ''VFhPU2Fqdk5UTmJmbUxFUG1kMWdOVHBxT2ovVm8wQnF0ZVB5aVVCZi94U3pMNmEyelVsVm5mV25KMmhXUmpQVm1jeW45ZzZ6RjJXcVlIblRTdk0zbXo5VldsWEdUck5hbXNsOFgvdTgyVCt5Nkc0eSsrOW1aMWV1amJjbEs4ZlBmYXhTMlRmT0xaenVqay9CdldjcVBtdjNVdkRlTlpGWlNXNm5u''@;'; put 'put ''bDI3aWwwd3VXRkhtTUtiV0E3VGNBMTdXTks1UzltM3IyTlBUenIzRUx1amxsdm5Ic3J2VmJYc1EzWEVNTnpFUGplY25lNVdmdmVwSnlxdGwzK0dYZThPZHEybHZMdU50ZHZiZEhiMHpWeHZDenZmWE90OVgyYjNhMmVIL0NNTzRGdTgwWjNGRCt4VzJZVHpFdkE0Ty9Gb3RGaFBiZU4rUmE2dzcy''@;'; put 'put ''WVJKRjVoS216QVBlUzE3SFlsR01sM2pXZEVrM0UxZHoyYnU1eUhCUnc5YU5ydE1qNXRiR2NHUnpKODFQakh4czhabjdDc2pUTzdCRi9rZSs3RnR5VW5SVklzZVNtUndWTGFkMGYvQTNJRm9iY0FBUUFBQUFvQUhBQWVBQUZFUmt4VUFBZ0FCQUFBQUFELy93QUFBQUFBQUhqYVkyQm04bVdLWUdC''@;'; put 'put ''bFlHSHFBdElNRE40UW1qR09RWVRSRE1obllHZUFBeVFtQTBPb2Q3Z2Znd09EZ3VvZlp1bi94Z3dNek9jWURSVVlHQ2FENUpoWW1kWURLUVVHSmdDOGlRb3JBQUFBZU5xMWsxbFFqbEVjeG4vL3QzMFJLaFQxOXZacDAwYWlGRVgycGNpK2xLelpzcS9aR3VzUVEwVlN5SjRrb3hrVFUxTzJHKzY0''@;'; put 'put ''TldPTXZzK1ZXKzRNSGNkWFREUE11SEptM25QZWM4NmM1NXg1bnQ4ZmNLSHJDMEYwajFUcW1Uam5ybEtzeHlXTXc0MkJsSENMT3U3U1NCUE50TkFtSGhJZ2d5Uk1Ca3VjSkVtcXBFdW1USlVjeVpOQ0taSVNJOVY0WmJ4M2lUS1BtNjNtRS9PTDVXNEZXc0ZXcUdXem9xeGhWcnAxMytZZitVMHBm''@;'; put 'put ''WWZGalI3YWoybmptZmhLZnpIRkpyR1NLQ21TSmhtU0pkbVNLd1d5UVRacjdaZkdXNjE5eUd3eDI4M1BsbUVGV0VGV2lGTjdxSlgyUzF0OVZDL1VjL1ZVdGF0VzlVZzFxNGVxU1RXcUJsV3Y2dFExVmF0cVZMV3FVcFdxUXBXcE02cFVuZWg4MDVuVm1mVDlrNlBjVWVESWQ4VFlCOXI5N0Q1Mkw3''@;'; put 'put ''dWIzZWo0MnZHNTQvQ0hrSGZKWFY3OXArWnVlRHVUNEk5YkJLUDd6L2lIUnRkSkYxeDFkdTU0NElrWDN2amdTeS84NkUwZit1SlBBSUgwb3o4RENDSllaenhJcHg2S1NaaE9KQndiZzRrZ2tpaWlpV0VJc2NRUlR3S0pER1VZU1F3bm1SR01KSVZVUnBGR09xTVpRd2Faak5YTVpER2VDVXhrRXBP''@;'; put 'put ''WndsU21NWjBaWkpQRFRHYVJ5MnptTUpkNXpHY0JDMW5FWWsxYUh2a3NwWUJsTEdlRmZ2OE9kcktiWWc1eG5OT1VVMFlGNXpsSEpWVlVjNUVhTG5HRnk5UnlsZXZjMUJUOVpQUTJEWnFsZTVxbW4yMFZxN1VkMFd6Z2JMYzM2MW1qKzEyYytPMVc0VjhjdkVBOW0xblpZMlV0bXlSR2oxdll6akhz''@;'; put 'put ''T0NSYzh4a3BVYm9DSXJpamR4NmdhWllFWFEveDNXZUtuR0hFc28yOWJHVWZlempBUVYxTCt6bkNVYjExbUZKT2NaTFh1cHA2c1U2OHhGdDgyQ2grbW4vUEg1RE5xdWg0Mm1OZ3dBTEtnVENESVlOcFBRTUQwMjRtVmdhRy95SE0wditObVhiLy84SjBqMG53LzVmL2ZpQStBT1lMRGdwNDJxMVdh''@;'; put 'put ''WGZUUmhTVnZHVWpHMWxvVVV2SFRKeW0wY2lrRklJQkEwR0s3VUs2T0ZzclFXbWxPRW4zQmJyUmZWL3dyM2x5Mm5Qb04zNWE3eHZaSm9HRW52YlVIL1R1ekxzemI1dDVZektVSUdQZHJ3UkNMTjAxaHBhWEtMZDZ6YWRURnMwRTRiWm9ydnVVS2tSLzlScTlScU1oTjZ4OG5veUFERTh1dGd6VDhF''@;'; put 'put ''TFhJVk9SQ0xjZFNpbXhLZWhlblRMVDExb3pacjlYYVZRb1YvSHpsQzRFSzlmOXZNeGJUVjlRdlk2cGhjQVNWR0pVQ2dJUkoreG9rMll3MVI0Sm1tUDlIRFB2MVgwQmI1cVJvUDY2SDJKR3NLNmYwVHlqK2RBS2d5Q3d5TFNEUUpKUjk3ZUN3S0cwRXRnblU0amdXZGFyKzVTVkx1V2tpemdDTWtP''@;'; put 'put ''SE1rckNMN0VaWnpkY3dScjIyRW84NEM5SWxRYWxaL05RZXFJcG1qQVF6MlVMQ0hMWkQrdFd0Qkw0TXNnSGdoWldmZWdzRHExdDM2R3NvaDdQYmhtcEpGTTVES1Vya1hIcFJwVGEyQ2F6QVFPVW5YV29Sd2wyZGNCcjNNMFlHNEozb0lVd1lFcTRxRjN0VmEyZUFjT3J1TFA1YnU3NzFONWE5Q2U3''@;'; put 'put ''bURaYzhCQjNLQ3BOR1hGZGRMNE1pM05Ld29LVEhTOVJIUmt0SmlZR0RsaE9VMWhsV1BkRDI3M29rTklCdFFiNjB5aTJKZlBCYk42aFFSV25VaFhhakJZZEdsSWdDa0dIdkt1OEhFQzZBUTN5YUFXalFZd2NHc1kySXpvbEFobG93QzROZWFGb2hvS0drRFNIUnRUU21oOW5OaGVES1JyY2tyY2RH''@;'; put 'put ''bFZMeS83U2FqSnA1VEUvcHVjUHE5Z1k5dGI5ZUhnWUJZeGNHcmI1ek9Ja3UvRWgvZ3ppUStZa0twRXUxUDJZazRkbzNTYnF5MlpuOHhMTE90aEs5THdFVjRGbkFrUlNnLzgxek80dDFRRUZqQTFqVENKYkhoa1hXNlpwNmxxTktTTTJVcFUxbjRhbEt5bzBnTVBYRDhPaEswS1kvM04wMURTR0RO''@;'; put 'put ''ZHRodkhobkUxM2JPczQwalNPMk1ac2h5WlViTEtjUko1WkhsRnhtdVZqS3M2d2ZGekZXWlpIVlp4amFhbTRoK1VUS3U1bCthU0srMWcrbzJRbjc1UUxrV0VwaW1UZTRBdmkwT3d1NVdSWGVUTlIycnVVMDEzbHJVUjVUQmswYVArSCtKNUNmTWZnbDBCOExQT0lqK1Z4eE1kU0lqNldVNGlQWlFI''@;'; put 'put ''eHNaeEdmQ3lmUm53c1p4QWZTNlZFV1I5VFI4SHNhQ2c4ZHNIVHBjVFZVM3hXaTRvY214emN3aE80QURWeFFCVmxWSkxjRVIvSnNEajZ1VzVwelVrNk1SdG56WW1LajBiR0FUNjdPek1QcTA4cWNWcjcreHg0WnVWaEk3aWQreHJuZVdQeUQ0Ti9peGRsS1Q1cFRuQndwNUFBZUx5L3c3Z1ZVY21o''@;'; put 'put ''MDZwNHBPelEvRDlSY1lJYm9KOUJUWXpKZ2lpS0d0OTg1UEpLczFtVE5iUUtIMDhFT2l2YXdieHBUb3dqcFNXMHFFa2FBUzJEcmxuUU5Pcno3SzFtVVFwUmJtSy9zM3Nwb3Bqc1JSbk1nQ2tvNUtheHNPenZwRVJhV0R1cDZmVFJ3T1ZHMm91ZUxEVmJWbkdGdlFmdlk4ak5MSGszVWw2NEtTbnRS''@;'; put 'put ''WnRRcDd6SUFnNjVrVDI0Sm9KYmFPK3lpbUpLV0tnaVBnaHRCZnZ0WTBRbUxUT0RMb0VpWkhHeXNnL3RpaDA1b29KMkF0OTYwaXJ2MjBMdHozWHlJRENiblc3blFaYVJvdk5kRmZWcWZWWFcyQ2hYcjl4Tkh3ZlR6ckN4NWhkRkdVOHVlOStlRk94WHB3UzVBa1pYZHIvdVNmSDJPOWJ0U2trKzJ4''@;'; put 'put ''ZDJlZUoxU2hYeVg0QUhRKzZVOXlJYVJaR3pXS1VSejY5YmVESkZPU2pHUlhNY0YvVFNIdTJLVmQralhkaDM3YU5XWEZaVXNoOWwwRlYwMW03Q056NWZDT3BBS2dwYXBDSldlRHBrUHB1ZG12Q3hsTGdzUmR5elpOZEY5QjA4SVIzaXZ6akV0Zi9yM0hJVTNLTEtFbDFvMXduSkIyMGZLK2l0SmJ1''@;'; put 'put ''VGh5cEdaKzI4YkdlaUhVazM2QnFDbmtndU9QNWU0QzZQRmVrVTd2UHpCOHhmd1hibStCaWRCcjZxNkF6RUV1ZXRnZ1NMS3Q3U1RxWmVVSHlFYVFud1JkVkNzd0o0Q2NCazhMSnFtWHFtRHFCbmxwbFRBVmhoRG9OVjVqQllZdzZEZGJXRHJuY1o2QlVnVTZOWDFZNlp6UGxBeVZ6QVBKUFJOZVpw''@;'; put 'put ''ZEoxNUdyM0dQSTF1c0UwUDRIVzJ5ZUFOdHNrZ1pKc01JdVpVQVRhWXc2REJIQWFiekdHd3BmMXlnYmExWDR6ZTFINHhla3Y3eGVodDdSZWpkN1Jmak43VmZqRjZUL3ZGNkgzaytGeTNnQi9vRVYwRS9EQ0Jsd0EvNHFUcjBRSkdOL0dNdGptM0VzaWNqelhIYkhNK3dlTHozVjAvMVNPOTRyTUU4''@;'; put 'put ''b3JQRThqMDI5aW5UZmdpZ1V6NE1vRk0rQXJjY25lL3IvVkkwNzlKSU5PL1RTRFR2OFBLTnVIN0JETGhod1F5NFVkd0wzVDMrMG1QTlAzbkJETDlsd1F5L1Zlc2JCTitTeUFUZms4Z0UrNm9uYjVNcXZObjFiV3BkNHZTVS9YYm5YZlkrUnRsTTdvc0FBQUFBUUFCLy84QUQzamF0WDBKZEZ6RmxX''@;'; put 'put ''aFZ2ZTczZWxPcjk1YlUybHE5U2QydDF0SnF0ZlorV216dHEyMWsyUmF5c0MzSjJHQmJack94TWVDUUJRSWhKTTVrZzRTUVl6SWhZSlpBSUNReldTWWh6b0ovZnVZUEp3bVRTZUNmSkgreVRENGhrOG1BbnY2dHF2ZGFyYzA0ODgvWVVxdjd2VnYxcXU1K2I5MnFSaVkwdlp6RUh4ZDhTRUQ1eUkw''@;'; put 'put ''S1VRQlZvUlJxUnUyb0R4WEtucTZPdHBaMFl6SWFDWllWRlhqc05xT09JRk50VE8rMyt5VjMwaDF3SjFPQlZESWxzYjhTdk5XdTBtdjBMNzBEVjFMYWV4V0dOVWduVS9qanlqZHgreHVkWGVlN3VzNmY3NnJ3Kzd1NnV2WjMrZTg2djcvQ3Y5OS8vdng1Ly83OWQyM2RlbjV1YS9rUGhGOTMrME4r''@;'; put 'put ''K0xsam9XTHIxdUFzdk52cWIrdXEySCt5eVZzemR1elk0OGVPamRYTSsydjg4SU1RUVZ1WDMwU3Zrd3RzYmlHNUFtR01waEZDMWtGRWlEQ2p3NExnRllaME9sMit6aHF5Mi9TU04rWk1DZ0ZQT05YUW1LejN1RjFpWVBTK2t1MkdSS0tpTEZGZFRpNG85YityOFpjbEVtWCtHb1NXbDFFblBvY2ZK''@;'; put 'put ''aGRzRmNpRWtFMkExMWNSZlc0RnZOd096L1doTXRRdmI4MFhDZElMQkJPRUQ1aXgwV2dkdE5yeUJFa3lURnRNeEdDd0Qrb3dJZmxrQ0tHeTBwSmlhT1VyS2l6d3d2T2Q5dXcvcVNTR3BhUVVrQUpwOXB0T3N0K2t4SDRsZXBPUStFSHZRblE2ZWlaNmRYUy9aMzk4empNUDc4N0FsWG5QdDg3RXor''@;'; put 'put ''REhIOThGQ0QyLzYvRmRuNE4vdXg1SGdKbXk1ZWRJTC9rektrRkJGRU1KT1JhTCtzdUxDcjBlbDkxc01raFdSUENBSGlQY0QvUENCTS9DQkwxb3FOUnVGd0JkUVJHSW5BcEgwaDV2S29FQmJXbWd0Y2NyaFNQdVV1eEdjTldLM1k3R1ZBTmNJTDBuRHUxKzk3NitnY241K2NVOXUyKzR1cWRuNE5o''@;'; put 'put ''eDVWZzRHb3kvMmxqVGRHUlJrcnR0dTZlNm5kLzA3WmdZWHpTM2Qxakc5N1RhdmxLMDh5cnNET2FmTjlhVUtrZnJLL3dSMjlOSWo2cVcvMTJ3a21lQnNrN0FjZzFxUmQ4ZGZMSmdiS2NjTTJPOUNXTlJqK2VSaUF4RzBiQ0FkRG8wUXpDbGZCN2dYNWl4U0VRUThvVWgzK0NURVdoU2M5a21DRUJa''@;'; put 'put ''TzJuR2dpWEpLdzM1NU9RR0xRZ0JXTm9NYmR4cWFrb08xOWFXbDd0Y0NOVzIxclkwTnBUWGxDY3F3NjR5VjJsUmdkTmh0OEZrckdHcjVJNDVLREk3Y0xJZXNPaXk0Z0JPNGdCRFk2QkNkTHM4U2JUbWZnZGV1ZmVwb1doMHVMWnVPQm9icXNQdjM2T0U5aXdtRW9GZ2RTS0E1NFppY0xGdWlONEtK''@;'; put 'put ''bW9DQVhweEtqRmFXemVXU0l6QmF6VythbWtjZnpZZGl6ZWxxMk5wWlNJeFdsYzdWbFBESUFiVDhWZ1R2WVVvMy9pWC8wamVSYjZFeWxFY05hSU91YlUyRVM0cktTNHFNQmtGVWc2OExwQUJ5dGQ0QnNUT002Z0hZV09ZQWVhcHJ2YjdxeHVyVS82NFB4YXZFQ1ZQVEI4UkF4V2NnWEpuQnJlOGpX''@;'; put 'put ''bXZLSGtSblpxWFQ5T1JEa2VBcldDcXBIaGthckZ6dnFWdnRMaWdicktoWVh2TjBMYjZ2cXFTNmJyRTljb25FcDdDdHBwb21Ta3oyUk9MOWRUbGpZL1ZUclYzVHdjck84T0prVVQxY0UzellMaDFxSDBndms4K1RscmlnY0xhMG9KNG9LSjY2UytwM1dNRnpjRzZGb1F3bFhIMExaQmxDM0xLTnFw''@;'; put 'put ''QkdIbnhrRHRJWU9DT0ZWMGhCYTV5UjN5K0NQQTdmdlZ3MEZkWjZRc2U3a1cwajhibHEvQVkrUXJLUStJemVYcGNHMk1xSnUxbHMvQktuMXRjUEpnWkh4NGV6K3o2K2Rtei96TGV0ZTNDa1NOUGJPdG1iY1BRVnRiYVN0Q1dZeUdTNWdnS1R3d1BUMlFPUWcvejI1NDRjdVRDdHE0eDZPUG5ZNnh0''@;'; put 'put ''QXUvSCs4amZvWG1VbGh0bWhucWFxZ0NYTUljQkFXTWRSaURXOHlMVzY4a004SzVIRC9vSElPZW1KdVdPdXBxQVB5WlJSb1NCcGh2VG9nVC9BeFhoQ1AvWUNCVGc3eW1sdkI1dktmYXl6eG9xUktrUmJxWHBSeSs3WU1VU0pTYUZkTHZnVTZBQ09ramdDTDhnQmw1MG1VV1NWeEJ3NlkxR20wNXZM''@;'; put 'put ''WWlXVzYybDFWNnJYbWMzaUFadmhXUTNFOUhzeXJPNlRGZ1U3QzRoNE9DZ0JzbGVyUzl3dXdwcVhaSWhCMW9Rc1FsRVk3L0Q0a3VVNWhzOWZyUE9hRFNZSElhOFBKTW9tdktzQm9kWk1waDAxbkxSWnNndlRmZ3NEb2ZGVmFzcmRPYzVoRElUQlRZYThuV21mQ0lhamFMTm9yTWFEQ1lOM2wyb3Ez''@;'; put 'put ''VlpIQlRISFdpV0ZKSTJaRVpoT1lCMEF0YnRBRjRIellFRmRBRFVBWjVHZ090aHBzUnRvbFFVd3dGcURWUFVLaVpKNFpldSt4TDg0S0lYWGxqNDhwZHBmNW5sUmZRTDlFRmtSVjRaeG85Nk5aNER3UWs2S00rQlNGVGs0SG84WVNtclRwU0hFOVhKYXhPMU5lWGxpZmJheXUyTnRLODY5TSs0QS9l''@;'; put 'put ''QnRCYklia1E3MmtINUFrYUVZRVEyMnBuVDcvYlg0VHpsajdqdkVPT1pkckNaUDRIbm02bjFwMWRBQzJMc3haUTd6TWdVRklBcmNpM2tJZFU2V3JLV0VTLy9adms1L0IzeUszaXVYYmJTVHMvQ3MyL2dENlNxREc4NXE1dy9TMzcxOWlYRTdHWGQ4cHZrSHZJaXFMOHlGSmVyZ0J2WmpMbld3R0Nv''@;'; put 'put ''MlFCc05qQ3laYmJTQWcvVGsyQjZZcnExZXBDa0doTEFYRlN3U3VGSmhydUhoKytlbkh6ZjBORDdKdXRINC9IUit2cXhlSHlzM3JMN00vUHpEKy9lL2ZEOC9HZDJMM1pjdjNYcjllM3Q5TFdENFlBU05nMHlMeUtmWEFDa0ZBQmZBMXlyWTV5UGgreE9oam9wa2s3YUF5L2VsUHo2L2xPa2JIRG4y''@;'; put 'put ''YVZ4eE5ySFlWSmhtRThCaXNvUnN3bW1BOXhBeUFCREoxT0gxQUdaUnN3RzJiM0JzRTRxaUdXd3BzV2xTS09xLy9JeGtLZDZTVzdjVXB2Y1Zqays5MkRQZFpuK3lmdHhXcEhtdnB2Y0hxdHBxYXNkZkhmak5SMWJidTYrWVpFOXV4UndHWVZuVjZHTTNGWllBTStwd0pqQTAyRUlBOVNHZzBFL0FF''@;'; put 'put ''L1d6UUJ6d2tBUTBzOVFKZUJsOGwrRktvTkJmekFrU1lWQVphcGtrdlhNN2tpcHBLZHg3ZkFrRmUzL2VIZDhLTFEzM2Q0MzJEODgzTkhYMTFRM0hoclkrOG0rNjl2N1d0cTN5emNNV1RLcGlhcEVVM1dpQmgvR2RmRm9LbDQxZEtKMlIyUGJoTjI2dmJOMWR3UG5nMUo0MlFsNE40RzJxNWFqRnZB''@;'; put 'put ''MzhJQ29oemxnQkg3bkhLQ09tZGg4M1pEWmJNNHo1NEZNT1d4MHJDRi9CQ2Z0MVBNTUZHSUJuMVlldCtDdDUyWm1UdjNrM0N4K1FSay9kQTVJR0ZGK3pPa1RBeHcxd0hPS0tZNGNvQXZ6TEVTQXpyRWVBWTUwQUtFRHV5NElaSm9iOWRVNEFnK3R3dTRNQmhpT3dQVlJNVlFoUmFnd1NZMVpicnov''@;'; put 'put ''d01EVTNvN0JvZmFSamgwbS9MenlWUkhlTGJSMzNUSml1WFpxY2t0RFNxNE40dXNXbjRvbXIrbmVlbTBMeDBFdGpHMEE2T2RERWRRbmI3RUJEdXpBUEFWWUo0U3dYcWNiRUVHeDZQU0NiaDVsamFzRVk5TjBSSEV4akRCU0hBNzRvWXVpWUNoc0FEOE5xU09pZW9PcGJJbExpUVFmSEZtMjh5VHhJ''@;'; put 'put ''d2M3dW03c3YvZmU0WHQySHQvVkh1aU8xUTRsZE9WWE54ZzcvS010ZFlQNUJUZmlMelhzNitvKzFQYVZUeDU4ZEdaNHBxeXNlYUU3VktVOFd0RmNudTVNeGo5TThadUVpUVNZL0pUSnhXQm9NSk1lcW5jdzg3M0Ixd1Z2aHpxUTJKL3l1MEVoUEtBOGpQK2cvTzk3U2Z2aTFVc1hxSDhSQlR4MHFu''@;'; put 'put ''aElvUjY1MHlVUzBLNERVczcwVlMxaGdPbGpJQkRURXBXVkZBT1ZxY3FHbW1xS2g0cHlpb2U0a2FxdGpUd01GVE01M3BXWHZnZmJaQ1hVeC9qWGsxdUhNODJkV3hhN3VvLzNkRFhKUTcwbkIrdEcraHNiKzBacTI4ZGpYUkN3eE1iYkxUVlRyVzFUM29MUnB1YnQ4ZXJ0VGMyajNnSzRzck1HUDlR''@;'; put 'put ''WXJVdzNWc1VhQk9WU1U3eTBwb2lRb3BwUzZrUVJWQTl6SEZxaGRTblFGK2l0TjRMQUdnQnJPcGlzSHNSVlQrYUI2UVdZb1NCNEJuUHNnVVpyZnhtZFl5Z1lZclQyY0ZKejRRVXJURCtvYzNhQTVlYmFFV2o5OSt1b0xEUHFOMU15VjFLQ2t4ZFhVNWxUWG5rRXlNeklUZWZBN0FXeGdHM3dVdDFO''@;'; put 'put ''ZFRVYlhpRVBzdlE4eUxKWUVMSjRMUjZIalJrUlVYVXROQ05DTmpBb0ZlcGZmRVN6TE1wZDJqdUl2WmlkSkJhSXZmSVJza3ZJRG9pNkZSbWZ3dmg1Zk91VHlSamx3elRhVGtTeUcvaFFmRVlrNERzNVV5RjNIbmFuOFNYbGIvQkJISm45MGR5REQ4NHp1ZXRBajVGQy9DZmdQQWwxREQ1WkJtR0JB''@;'; put 'put ''MUV2VnBqVjRrWTdCcysvZ0hJeWplUVFoQkJraDZySWlUQTg5UnkxOEZTVFV6VkEvM2ZnbnlvaDl2dW5oWk1MTUo0K0dJOVhHNDhBNDBsWDQ1VGVyZS9EQjJFOGw1UzZGeDk4Y081SHN6K2k0M0V1djRsZkFkNXdJejlxbDFzMG5uQUMrd3RVbWdRZEVnN0F5TGp6UnJWaVZrZDVQQjYvcHp6a0RR''@;'; put 'put ''YVpiblNxQWk1RlZyamV2U3JLZldKb2IwZjljR2QvOVEyOW5mdlQ4K1BIdkJydTc5WTFWNFliK3dhU3JmVTdHN3V2Yyt6NVB5c0JNRUh4NWZjTFc4Z2pTRVlqNkpMczlwZVhDUWFoR3hzTkRxd3p0cmNSRVZpWVIxalZFUGZxc0hFUzFEaEVUVlM3aWlicUV1NURxdVlDdldBd0NET2dkTzBHR3Ba''@;'; put 'put ''VjBVZ09pR0V3Q29iNWQyeXNCOExVVVRVdElQMzg1cTBrU1p4RW9pak5zT2FqRUpBVmRBSVRkNDUwRHZkdGhWbGt3dUZZS0JnT1d5VGZPdGVpZ2dZZFdRWHE4ZEt3aEF0U1BjVnZqdGRSenp4NzBDZ1ozTEFpYlowWDVoYS9kblQrQy91YmQ5WFZ0bHVLUnhLRDA1MEhXMnE2blpaNWE1N1pXdTRy''@;'; put 'put ''YnFpWStzVDAzQmZtOWp3NDAzWWc1V28rMXUzdkYzRWlGcEhERGRFYkRueGg3c2pYanUxOWVIcjhXRk1zRW83dEcrcyszbDNsYnpQMGRUU08yb3JMS3JlMzcvakE5cmtuRHV6NXhKNlM4cEtnSDNzbk1yWllmYXkzcXJxUjJ4WW52THdLZWxrQ0N4dVRLNDFZeDRKN0hYQzBEcXdydFhVUUdWQVB4''@;'; put 'put ''OENjWGU2eUZvQjFsVmdJR2pGalVxcDhzZUVlWEFZL2Q4K2VPSEhxRkxtd05QNXI3RmYrQmRBT1VRZDVIL1NmRDU0UDQxclFYL0FFRWVSRnJ5TjY2bmFvQ1JnSmM4K1lQcXVvMEc0ckx5MzBGL205Ymx1QnZTQldibUNPS2NPOHBwLzltRm5aR0hZN3RUZGplTHgxVDhOc1cxZlQvb3p5R1p4TXRM''@;'; put 'put ''WW12blF4MmRtWnZFZ3V4RWZyOWplVTdHNXEzRkdMUDFJWEN0YzlydnhUT2haTC93UFZDOVdnZHo4R3NsV0NHdVE2Q09OUm9SbHNhUkdZV1JBdFZYOTVWaVdKNEVJSktnNkh3alJKbEdVTmoyWkhjK21PRzgvdjIzZCs3OEM3azFQbFUzVWRoMlg1Y0VmZGxIOW4vWHNHTExPZm5abDVaTGExWVZz''@;'; put 'put ''bzFuVkU3anpTRlExUHBGb1piU2p1dnNWOEh6ZUxKTEtvWWtHMGlpcUwyZVV3dXkzdWNMbWVva2hqemhnT3FVd1l3L2F4TjQ0K3VXL2ZrMGZmUU10OVJ6T1pvMzEza2dzN1A3bHYzNE03ajdVZTdPNWVhRldTRkFjUW1ZTHR1UURxdUVhT2F6cU5LaERkTk9nU2E2Nkh5angvTTA5RFVYM2lWdldi''@;'; put 'put ''M2UvK0I3eFBlUkMvZCtrdG9pZnQ1eGVmV1NRWEZybVBwZlZ2UkZWeVdPc2ZlRTNIZXRYY0FMaGhSRWJhTStVejFyTTlvUFY3bW5iNnhLTHlPdStVMCsxdmdXNSsxQ28zMllCY2R2RE55N0FPbUF3NnBscFJyME9NelZhMEluT1J3Qzl3QXZFQ1BBRHoyM05NNG5vaXBnTDRYVGhVZDI1dzl0Rjkr''@;'; put 'put ''eDZkSGZwdzNWVDVnV1RtT2xtK0xoTVpLMzhNbjFUK05kbk9TZG1XekpLeXlIdGFtL2RIR1Y0amNsRDFKUStBRDB2blRQTkorV2d0UGpHZE1md200WlY4OUxUeXQ2ZFA0MGtxVmppay9KUmNVSDZOQzZDWGZtajFMWmJMcEhtSW5GaUVoM0VRaVBSellRUllPOWlPZndKWUcrVWs1dnJqQWU1N3dl''@;'; put 'put ''Qm1CR0FvTDBPOURlVTdRenBvdnVMcXd5aW91RDE1dW1LN295K1M3RHpWdXRCbGtlc25nalg5TGZnbHBhN25jQnVuN3loMGRaN05zMXd1TVJyMEJCeDBQSUJaeGt6ZytVeW53OEh0WWRLT2swWWNnTkF4TUhvYVYzOU0rUjJPZlB6MTZkTXd1U2Z4bVBKRDVYWmN1ZjhmZUwvVXFTaUZmdlhVZDJT''@;'; put 'put ''RHByMmhxNUdHT2ozUzIrMTAwQ0hnbGFRZEZGTGcxQ0x3M2RJM1dYdVFJOEc2TWk1cGczRzU3TnE0ZkJBMEJPeG1vTURZNmRkZVAzWHE5ZGZvbUtieEk0RDg3OUcvU2tydGszeVI4WEtwN0pNSVdkZWpJOXNqaGlFRldILzQwS2xUeWpuYVh3bCtIZnA3WFNtaGNrNTVXUG52aUhXNTJ0bDcvcHBy''@;'; put 'put ''enUvdE9KVEpIT3JndWtkVk9yT1B6TXg4ZG5heDYwaW5mS1NMY3l6VE81UmZqN1A4bHB0R3F6QUtFRlVCMDlURlNySWNwbWpOY3pueTNGYTNQVnd1MGtTNVA2dDczSUdzYnU3RnNmNGJ1N3R2N0gvaU5DN3BIQjN0L0RTNTBMTFExYlhROGl1OHE3MmhvZjAxbElzREYvWHQ1WHFhN0NaNmdlaDFv''@;'; put 'put ''UFFFQ0pPemdZMHVKMnZvZHJzajduQjFPRUpWTU5oeXJ4VEpGV01ZalM0ZFNYc2JWMkdGS01HS0xWMEROVWZiOW1yb1VYN1dNdFcxSjVERkR5NjdOdDQyTEFjcnMzaDZvMnBrZUt5MWV6MmVUZ0NlckRDV3BGeWJSK1dheG9yVWRCNEFSMFNORlVXQk1MR0VJYnZ0UURwazlWTXA5OGI4RVloTjdY''@;'; put 'put ''N1YvL0txY1hVTTQ5OTg1cTdUREcyN2hyNmdESDZhWWUxWHYySjRHMTRzZUpQampjdEcyZktmU0MvNUNxcEVkWExDQzVGaEFWZ3NSSEl4UmozREhLTlZpU0toNmlERkdCVnhIcXBDYUpNZ3EzUWZpM3BVdHZyOXVaYSsrVnZiZS95ZDdXTnpyWmxqdlNPM04vWlVIMGdtTy90MjNueEwrNDFqNXVi''@;'; put 'put ''R3FlbUdTSEdnME9xc0h1NW9uV21zcTlrVGlhWkNsVlV1MzlSa3gweUtqVFdveHZLU21rUEpobjg4NmFHNnlqZ0E4VjhBSkFhOVNocGVQUVhoMzZJcXgvM0FJNDlDZS9CLzVWSTFFWTl4N3R6Y3lPVUt1alNEVEJVWEQzZzBIWWI5ZDQrY1Rvd25HOFlUcDRidjNta1p1V2NudmxzNTJiU3J2bjVY''@;'; put 'put ''RTM2M2N0UE9lMFk0WGwwdzFuOW04U284UzgvaVZkQ2Fxc0xrV2dkY2RxNTFqRFFiNzhQa241VmYzS1A4NHU2Zi9JVHFYUGo5TXpHeXZnb1IwcFV5ZVlLK1RGVHZnN0tnYXovTWxMUEpnN1p3MlBUVWtsSUZCRDlDd0l3RGhlLzcwQ1B2L2N5SDN2ZmowMTk0SEJTNTRzSy9wYitnT1JTRjhIRkM3''@;'; put 'put ''RUUrejNRYjZFYWpDRjBUbXN1bGZJZTVhWEU0SEhhS1Z4aGxCSHcySWVsTkovRmphUG5Eeno3M0liUzhmTzdaNXg3QU81WFB2ZmttbnNRNzMzd1QralNvZXR5QVN1UWlrY3BmVnJtcGticURMZlVZMlVoQnMrRUM1UThmK3VyWDdsUCs3eG5nd01lVml6aXRiRk1VTGU2ZjFtdyt4ZU5LMmlzYisy''@;'; put 'put ''ZlRYZzQ3RzJtYXB3REE4Q2Z4cmNyN1FaMi9HNTlaK3FjWi9MUEZHYVdDMi8yQjVWdnhDUGsrajh3OEcwUm10aXVQek1ET3V2MERXUGZ3dzhyYjVQdmJsblpzWTdoZC92Zmw1L0NQTnNsWkN1RDdtczdpWFR4bFNmMlFXM0hkNnZIUWxBVWJEOU1ENm5pMGJCdDE1bWptbFk0SDVZN0hDOFlpQlg1''@;'; put 'put ''VTljTVBZNTN5ZGoxNWJOdmJGeml0YS9DRCtNdWNKNThTOS9mSUhyQU1MQXNKSTZNWjJSdlVETXBUSXVweEpwMlUzQmNuUDc3NzBLRmR3RHUvLytZMzZaeVU1VU5rWXZsRmVHZzU2Mk9USEREdFFnSUNFTEo5NlF0Ynh2anpNeVNEdytRVmFPdGxiUzJZeHE4STNlREFZSXpZVTlQZVFHYnh4aDNr''@;'; put 'put ''NjU2UDh2Z2lBakpMaUozbE0yNlh2WVZZMEJXQU1YRkFGRkJXU2tROXNJU29oNGpRQlNnckIzaTlTR2k0SnVobWFEeFFPR2pBb29obVZGYjJnZnUwSG9RS0pJUFQvTG9wMmEybFFYaXFKeGdPT0kyQVcrUnhBM0p6VFlSWERZTWJhUjRrcGEyWDRidHZ1Ymw0S3BIZVdkKzh0Nld2djcycll5UjYv''@;'; put 'put ''VjdycUtsbFMwSnVqaFA3emZ1VWl4MkJTTlZnWGYxSXZOaGEzeFBaMGFpMEpTSXRycHBnTUs2dU01TlpzR2NPVklwK3hLZG55c2M2d1lTUm5nejR0QStBaG9FcGZydUVNc2xnTnF0VHFLYnc2TlRCMVBrNFYvblhBbEdQYjFXeVR3MlUvZHJhNCthQUFKTnpXNHNvVnNGTVFUenNja0tNNkN4MWxo''@;'; put 'put ''UjZZVFoydTNOTitqQkM1Y2ZPTWtrcks0NzQrY1B0N1lkN212ZVVuVHhadHFlNWZQdjJUbmxpUWliMkxiZU9qSnphVWxjOVFWNVUvcU82VGhtOHVyOS9lcnEvLzJyZ3IwckFtUjU0NVhJeFdPSG1NWmpuc2pIWUg4OE1EZDArMEh3Z1BPSHVLSS8yUmVISG4vRk1ST2JhTEFPbisvcE9EVlJIK2dx''@;'; put 'put ''S3E0ZmoxY1BWSllXOVZRbk92M0VZMDFhVmpsK1RUWGFJandWR1FwVm9GSHVNSUN5OHlDVmEvZ3JSMWdJeGpwVllpcEp6ckVZMENtaTlMQ0FqbW5xWFFqTmR0eHBtUGRFYzRZQ2RFZzJ2NFg2UDEwNXlpRWEyQXEyYWVoamxtdmFVVFFEQk9vRnc1TVdsTFdQeDJpMm5Sa1p1M1ZJYngrTFN3MW1p''@;'; put 'put ''WldVOEJuVHpBREZrdVoxUWdtSG10ZWxBNytySWdlem8xREdyM09YMXdwOFNiM0ZSSVRSMVF6Ukd4eGprNU1wMTR2elVheE1sUHhBVjd4enlEUHR2YVI2NHRYL3JMZjJqaTIzS1NmTnd1bUU0RDl2TTNhbTlwWjZ4UVBYV1V5TkR0MjRkdW5lbXNSdHZhVXNtMjZqdUFrY2JMNUQvQVk4OUk1dHNX''@;'; put 'put ''TlJEbkNoU0tsSUNGU05SMU0rQXgxYkFraDFvV2dmMHM2dkd6c2RyQ0xJd25vMWc1Q0lJUWtSUVRmUHJid0k1VEtFQVcreVRKQjlZZU9yZDJPbHlIOHUyYWY3V3Y5eDQ0ODJEZ3hOeVNhc25ZUFRsZTBxSS9vQ3lGMy82UUdQbmRvOXp4R2lxS0FKY1I1ZTNrdzdBZFJtS29ZOXdIblNVWXIxZ3cw''@;'; put 'put ''UmNTUkw3MkVYZDZvdXFuaWtIVlFrbVNDVHpNQmxoUmdLRzV1cUJrY1hKdEd3V2hHcFltQWNGUkd2QVFNdVdseU5VSGl1UGhvTXduckp3S0JTa1doYmJWY1hBNDhkMnZKcmxVcXRZcmdNVVF1ZU5sZFcrcXhKRHU4cDJwN3NPdGJVZDZrcGZYVHcyTnRiUlBqYmFRZlJLZmRkOFM3aHNxckNrcDdV''@;'; put 'put ''N21zZ2M3ZTA5MmxGYk5heThiNnlqWTNTMG8yTU02QXNlT1NsaDhjUFJaKzEwS1ZzbHJSY3gwWU1yTTNwbUxVaFdOS3ZVMjlhTmJzT2RsWXNzODZMZUFXcm1BUUpjeUdsM0JsdzBSVUZWSVJDVXo0a0c3VzZZS0Q0M1dYZFRlMjNEd01tVEJWY2xpVDI1dTBYNUVxNUxkWGNsbEpkQW9zTFZYSFpv''@;'; put 'put ''cHVmYjVHZmd2K1dqclh6SW5tekN2SUJ5a0YzMWozMHkrS1J3Q3p5SStaekxVOVExeWJmbVdWZ1dYYjhtaXk2Qk43Ry9xcXFrdUtxcXVPUGtTYkl0V2t6ZkZrZEhsdDZpejEvK3p2S0krbndmMmsrdEVoR3NvT095a3FIUEdZc2dNSmJXN1JVQkt6NGQ0M29FQUFKaVMyT3JiNElPWWhsK242WEk2''@;'; put 'put ''M0hhMmVpa2RUbiszQnlEbUIzcFlxTTkzK1MzZWtwT2J1dGFHZkxiYjVrTjB6cXhvb2k0bDE3cjJiR1NHNGdCM2MxbzVrdEdGaXhxbExkelUwbkhoVmZSM001TlkrNE5vRFlFM2RQczQ2bzdVMVBQT2V4TzVwVmk2bEF4V3dmKzgxVXYzL2RBLzhtVFA3OGZseXF2dlR4OEIxaXpIWCtpNDZFVkds''@;'; put 'put ''OGwxTDlxNDhNd1UxOVVUY3lvQXpEbjVHcDg3Sk9Xekp1YSt1Sks4cVliNkFXcWw4OFQrRnZZQVhJZlFGYzlWMTVFc0I2ckZzaERGWTUreGlDSmdsNXZIOVRSbFdVMkpkQkk4Sm5lRmVFdUVjWEM3TTBwbGk0S29Jb0E4REJ3c1JIVTBsb3VYczNPOWJUU0prbCtNRmwzYzFPOFBuTnpVM1dkZlBL''@;'; put 'put ''a2E2aTJjYkxBdWF0RjQrOVVzck85UnZtbTlwZm90NGJqRFlucUZKOURONU5STzhqT09MV2tXTENBWHRJc3FaT0ZjbnFxamV5NVVzajRhcDE4WGxZSXBUVkNXTnNyVWltc3o1SENwcWp5QXRGdkNURmZqZm9kRXpDdU5mbVh3bmZNdjNndW4zK2hMc2VaZ1FIMkd1Mkx4Y0RwNkkvRitxT3F3ekZ3''@;'; put 'put ''cXEvdjlNQUMrQnZ4NFdydWVIQ2RzQlYwL0N5TWgvb2NoNW1uU0V5NVBnZnpBRVNCK3RVNTNockZrcE43Q0V3N3JIVWtjMkN1MEtsei83Vk9uVUtlbWxqbDAxSC9hVHY0VDN3dVoxUS9tRHRSbVB2QjhFRVFWdnZCMmVrVjV2ZzFnNXB4WWs2U2ZZM0x0UXJteXQyZjFKVzRQL3FsMGJkWDNKOHha''@;'; put 'put ''WExGKzhGb0s3eWNJRlM5ZFQ1clpzVUpmQloyWmluQkRlSWVLL01SM0JvenIzaXkxRDE0RGhRTTB6Q094cVJiazdrZnoyYTJ6WjA4aWY5WDI4S3VBZVV0b3QvUFphaDgrVTM4QTNoZUpmV1JQZkJBTDBUbjRDV3pKVUExNVZPNFVjb252aWJsRTk0ZzQxT0t2YVdFS3VadjM1SkliOXNWU3RTbE04''@;'; put 'put ''UHh1cW5taHJsNE1qaGM0WSs1b3ZHbWdlVFIzWmFxMEk2MmtnS2ZMOThXYkk3WERsVDVTNmE4QllWdW05dVdsMStScVIrWW9qNFhqSFdCZkFoOHJobzU3c1VpVFRtRGEzaVcyaFF5VFJjeEFCc1EzdTNsN2lCemtad1YxRWNLOFhVMXUxb1RCY3hJRjlVYTAzakIwMW9pVHd3TzNuempqU1dlZkor''@;'; put 'put ''eHhPblozb205Qis2Nzc0RHlIMFVWSmlPekNTRFBQcUxuZXNhWjlVWlZQUU1xUnJXZU9YR2xWN3VxR29DVlVKTHJHVmZBRldEckVUazhSRzBXRzVXZCtLaDZhZEtVRFhETVc2QmFRTm5nZnVVU1ZUYTRWNjBoQXQ5TnI5VVFhVmtWelUrME8xajA3dVRwSDhjZEgvblFuVDg5RHU3UGUvRXQxRml6''@;'; put 'put ''WEk5UUMrM1g1NUhzbDg4akZadzhmSHp1aGtNbm56aHk1UG9qME9PbjhDejlYWG9MWDZNOHRKTHZBbytUMTZ5WkpCM1cwWlFYelNwQTN3TEpXYVJ3T0J4NmxyeVVBczRJVFNaSlR2eVIyODdjOVkwWDNuM1RUWGU5OEkzSEg4ZUdwWWNmZmx2NU0rdDNlWWcwUWI4MldyMWpOdEFoVTJZbGF0ZVVV''@;'; put 'put ''ZmZTc2ZzRWRmWEI0Y3hsMUF3VzJDeEU2UVB0M3FKQVdjTGwrZWtkZjNQZmJUOXR2dVdMMXJ5ZHpvb0VNU3EzNFR1WFhybVA4UHBHZUhrZG5yZEp2c20rYWI1Sm92bW1CSFlvYitMSHNmSTc3RkVHcDNEbm9Tbmw3dyt4M09YeUxueVl2SUQ4cUZJT0ZiQjhJRmhxM09jdnAzbGdtc3VjVkFVYm8x''@;'; put 'put ''RzdoOXB3bW9KTWczWkpnYmhGUU5JZ3JpRnVMMXUrbEtpb1NUaC9Ob3FyRzFKeEhOdTd6ZFRjNU1iRGtUQjJOeldiUGhYdGF6cFRFeDJPMXQ3VzNGZHBHRFo0SStHN0pvdXM2ZXAzaGFzOGhtRk9zN25sNTlEZnNmelU1clY4NEVmTTdkeXAxZFZoaU5WMjRldlpQQUEvQnBZL3N1VVQxT2ZIakVj''@;'; put 'put ''eG1sUXIwaEFlcFNYblJITEZ2R0RYSWcyTjZUQk1KNEhCWlNNd0FRL1RWVjR3RjFLRURqMFVHYUpETjI2YmplRjRRd1BNYVhiYmxNRlRGWDVYZGRwYU5IbFhPT0tGZVZUMk5kOVdDL09xT2RQVUY1V1dsMUVLUi9COStHbTdoUE1RVVg2RGpFOGgvTHp5RzFhdFFXMWh6L0pWNkJkTXYrYXoxVE02''@;'; put 'put ''T0dxUW1WUE9FbXRPdW02MTJnRm16aVV2aUFUL0p2bU1XcnJRZTEvSmRtTFhxaFdXdHVDWCtUTXFsNThqZWpLTUNsRTV4VXBKY1dHQngrMTA1RnQwMk1MWHllQ3BPOVRFSWtiRFJhem1Na2pyM0xrT3BTWHVsS0RoaUIyaTF5Q0UxZUFCNEsvdjI5VitvS1ZsZjhldTJ1M2xFeFcxOVlFSjVaUHBl''@;'; put 'put ''RHhOTEhKUDN2RFJUT2JJY0Y1WGh4aXQ2QXVibEJmTmtkNTNiWGZpbEhON2t0VnAwcnpwaTZnWWRjc3kwSklXT2lHSjFrOUx1RjhQY1IzR0VtRkxNaXd5b3hWUGtzU1RBWWhYcEJYYm5hRWdtQmJxM0lYYy9sU2FWWml1MHZnbG1KYkhrZW1sZnh6dDdtNWQ2TjV5VzhtT3ZQNVlmZGVUVDg3TnBl''@;'; put 'put ''bytNWGkyNTNDYnV0SjM2K0FuVUU1dTJJT2E1VVlYUmtZOEFOR2x4TUtTT1JFVGNKbkF1Qjh3c1QwTnZDNlA0bExiczJBejAxMExiRHVJV3l0NmhWOG01UGpySDNqaGhSZk9QUC84OC9mOWttYVRjYy9nbHNHREIrRUZINklwWlVhckRCbkM3eU1YV1cxUlBjdENSbWhoTGZBdFcxQ1kwUXNVVVho''@;'; put 'put ''MGcrb2ltcURNalQ3cWM5N3ZDd2FMQ2tQQm9tZUNJZmFYRE5HLzRZS2lrUFlYZURXQzZva1JmOXRXZ1dNNlpCTndETDJtNWtVSDhMM2szSlhrVkdrZFVBYVBLRStUYzROWG1sUDFTb0V2TGo2d2c3eml1WlBMc0gvNVpkSk9uZ0JLQjJTSXdObUN6MjNVbk41SkxSZExxN1BsbERDekJGanpkK2lD''@;'; put 'put ''TWwxWHNmWWVhbTJlNjhSdGUyN2VnOHZxZDdXMDdxbGZLaWQzTDkwRWZUZWo3Nkh2NE4yQXRGTFpsNk1RQ0ZVVm96a0Z2NDI1Mkl0R1MwdWkwWkx2UlV0TG8vUlh6UmN2dDRNWk1ZUGR1cEhOTGQrRmljNXBKRHdoSVlCQnR0SjhCRGoyQXNHNm80aXVYUWhrZmtXYjdtVXJyZUR5TVJCZ3JOczJn''@;'; put 'put ''K0YydWdCNW5jRmdrTnBwaWpsZVIxNFJYbFdRU2ZmRy9MU3FOVkZVYnlzbzhUc0w3WFpIbnF1OHUwQWZENWVFRTdhOEJxOGpQODltY2cybDJYNmVPTkRjeW1nZTExT2F4OUhyZkQvUDhnRCtKZE5MZnRRcGQ1UUI1N3RnWUc3cXpRNGdQU0lDTGRHam1CTTFiY1hLYXlFeVJzaGZYdWgxMmxXTlJZ''@;'; put 'put ''TmlsS3V4MUJLaWxUUVkzVUtERzFRbDFyeTJNR3RGb3luWHJpM05RbXdPck1aSHVNTldRVmZnN0JMRVliZWp6eVBEVXdRLytYbW1hRGVBT1FqNmVHT1lFeG9NbHRCRG04QWN5OExrb1k5dUFuTTgrNnc1OUdFT1E5YkN2Snp0eHd4OHVRb0dhQUEraS9CSFZsdmtRRnZsYmp0VmpSVGxCb1JCQVJt''@;'; put 'put ''UWpoaDBCNHlnRjhWcGNEUFZwU1k5ZDVSWU5PZXdPYUJ4dnFxYnpLQW9zVmJJa3FMMVRYNDN0Z3Zra0ZiUXNvd0dQNERmVDdZdHZmVXRYdGx5NTUza3dxTHlHTjZoUE1aclVkcFpEVkVLRzJWL0ZSYjFVVUlnTEFmMVdJSjF1TmdCSEd6SFJCQUhTdW5tS2M3OTFiUWFSTUJINFFYcHJsL0pNVEox''@;'; put 'put ''cnNac1lPajJ3dGg5TEJmcGdFWUoyZ2hoM1cxWDNLcVVibWxhMVVvNDlZN041UGphRmlCOUF0bS9VVU8rVmtEVENpblVFSXFDRlByZDFQTHdkRzQrVmpYRldtRmNFNE5vaFFzdlRmbDNKazcyV1BWbGF5WFZPL25BanJXbFZIUFI4RVJkaTg2L1dvQ2JUQWMrdm5OMWFSWHdGYXRCWW54ZXFjckND''@;'; put 'put ''Y1pYT0ljLzE4SWNSSTl0QW5OQ2d3RlpPTG9KelBGc1AzUHduOEdzOFBueTkyZ05EM3RXbkk5bitmM3IrZ0dteGwwNU1BZkJ1cStCV2Y0dHdBVFplT0o4UE11UHI0TUJhNFhqYkR5OG43bmxSMWFQQjJTcUNsNSt5V29hU2xDYjNMemEwNWcyc1BVSlk0NnJrWjhQZjByeWk5bitSRGMweXdPN1kx''@;'; put 'put ''ckpKYkNBS1dubkplVzBHTTJkbE1ENDR4L3hnclMrdmpkMjhJcTBMK0RIc2xWcE9MQ0lpNWErd1d2VC9uYnhhY0FCcTdkaGVxVk8xU3VmV1ljblZrUEM4RlN2MHZhVDYzVFBXcGlEdUdvVG1CTWFETkQySzV2QUhNdkM1S0huTm9FNW5uM1dISHA2alE2anRXRzNRN3hTQXBaQWZFWkV1RFlXaW9C''@;'; put 'put ''WVJOTGV0RmZ5NG8vY2VlZkFuV2VIejk0eGNNZWR0NS9OdmorTDJPS3lWalBqQlJzVVJYZXA4YTBMNjBobHhGZmtOWXQ2SFJoYXZURGdZMWVGbktzWXJxcjVsZ0tXU2FFbEE1NUJjZFdTSXpnWHVjdFJIcjZHS09hdUQ4cldpb3FLYUVWVjJCRnhzQjBpMlZKektaQ3RxcWN4SXZKNE1hOTgxVkZP''@;'; put 'put ''aUdCUGtud3ZlYzM1dmRmdXJqeStNNUVFbVQ1STN5bjVSUVc0cGlrRGtvMHJEMlhxbEI4Mlo0ajMxcDZaejg2MjFzelhuZXFoRWwwenIveDZ1QXhmRXdDeGZxUHJTT2RFcC9KUWdOczZWaVBDNk51azhzQ2o2K1ZwRGN4QjlPTk5ZRTVvTUZsYnR4N21lTFlmelk3bHlEZjNsOW16MnRSbnZiQzZu''@;'; put 'put ''NXg2SzFwSGxKQmp3QlY2SGRZZkVMRzZmSmJkUEFwbUs5L2p5dmZhdlBhdzN5YXg2akozTXFmcUtwU3R1anAxWWFYcVNoNWpWVmZIV2hjNnV4WmFidnAxUjBORCsrdHFYV0tTZkJka2Z1cFpNL2p0TkhmbEI0NG9CYVV2UU1BeHJ4VlRlL2p5c0lqVmxIV3hXbFk1bndYTXVUMGxtNXhCZjlBZkQ3''@;'; put 'put ''RFZyblg3S21JNHBSVTZwVFJMUUpOZXZhM1hkbmNmYkUwbVdQWHVjS3ErczdNK1ZWSGQxbEpUMDNxS0dKdDIxdFh0YkdvWUwrUVZ2SWRwNWU1Y1k3aXFvVEd1T0RudGVhM0JLNERySGpEdUJIVlBiWFJkQUJyY2szUDlrZ2FQcGJGYytKZXkxL01HY3E5ZnpQWS90elhudWhETXdwdFBjL21FNjhK''@;'; put 'put ''OTRDTldvd1lrazBPRFQ1cm9pa3BGTVJEVkIzNkFHNXRJRXhaTjhHRFJLQkFraVFOZ3FjMEFVN1l4RERaTDRFeVlKUXBtdVlLdWJGZldWZWxhTU1NR1lDc1F4bzBocHVnL1BzVVlNb25FTkdtQW1GQ1VpSGdnejBpbzk4c1QrRmF6UmFCT3cwcGRBNTF4Nm5KTkxEamJZTkNLemViY3hwYS8vbm0y''@;'; put 'put ''LzUvblVXUTFnc3pTNXZNZzNhSmt1T0xXc3J5MklWcHBSdmVGdjJNWERNbHllU3FWU0lDakphY3lyYzJKaGtTeXJoWjRMRTVEbjFBd2xKLzF1dFpzVVBEbWJQbGd5emxyMXRaUll6dk81c0pmNU92c0hZZkQ1WWU3OWg1ZnFZTnB1cnEyZlhkUmFIL0wyc1YzNWZPRHREeW1wWTZ2d3RkWHg1TlRR''@;'; put 'put ''OW55bU9LaWVGVmxkYzZpdlBJNU9lRjMxUVJEM0E1V2d1OU1hejhhMEdOeVNSRHJkY2tRRWZVTmhVQ2ZBZ3pCY1I1SUdNVEdSRlNqUm9nS1JHRDBvMGdFRFNReVZjWGlLMTdKc2hjc2xROXI5QXBSV0lDNzdmTEFjc1U2T0hhK3dmNHN1SjZ0NVllWmU4dnkxTHEvMHJHbHRTajRLd2Z5MS91MUJa''@;'; put 'put ''M1haVGFxVDhHbXRXNnRjZmlHcm5YbEtsazlGR042cm8vcnYybTB3WFdxL3o2UWMvMlNCbytsN2Jud0Y3UDl6SEg5dC93dHRyWkorM21aOS85dUR0OE5CR3pMdVg3UXcrRi9DZGRMV2Y4djgvNGY1ZGRmaGV0aDFqK0huM3VRNStIcVdhM04vMlMxWXJ0a3A0MHRwMlFQdm5DWWNCOHZ4ZkJvQ3gz''@;'; put 'put ''MlZkWEFkSUVjZzhYRVpENzM4cFNjVjF6TWE4SENJYnBIUW5OUnN1NUplTVhseWwwUHdtOXM3N2xsZVBoa1Q4dEMxNTdPOE9TUnN0NkJZNTNUNWEwbDQrT2Q4dmhFSjdFL2RQWDJzd1BkTnczMUhzc01EZmJYOVpjbmF4cWkvYjZsdit6b2txL2ExdGw5bFlZZlVzTHN5VGkzSnlwZCtMb2p4ZHNF''@;'; put 'put ''eCtmaGphNVRlajJVYy8yU0JvK2xmYm53TDJXdnIrNy9ZcmIvdVNsdWx6clFObEpJK2xsTzFVZjNUUURmYTNVRmlLWHZrQTVZZnBKdElKTkFGdldqTEZ6MjJZckErOUF5clFhYXQ4Z3ROWUNvT1hjSEdjNlB4a3FMbzFVbGY2RDczWDZvZnNCZnBuK2p4YVd4cG9XWHRMY3dKbTBOMWt0enNGbGYx''@;'; put 'put ''dXNpT2hJSkZ4WHE5RHF6Z2FpK0xMMHFyRnpkMEpjdDNNaVh6VjAxM01pWDlmdjlWZjdLMER2NXNqcXZ1bVhTdzF4WkNkUmxQRHgwWm1CNFM5Rys3b29JdkJ2WldyU3ZSemxYL0hLd010b2YrMDVmelBjRGZ4Ui9jRTk5MyttQmFPbElhRG9KRWh3ckcvMWwvTjg4SU1PUGdoRFh4WDd2cHVmSHNM''@;'; put 'put ''VXJTdnVkcTJSNDlmVVZHZWJYTDJud1dSbm0xeTltKzFGbFdGMlBvZjNzVWZ1NU4yZk5tZGU1ZlR5M1ZIR1R1c1AxNjg2YjFCMXV1RUM5OFcyMUJKRXVVUDkzbFIwcXd2eWFzc01zVGk2cU9BRmM5ZVhtelRMWlBOVUNlbUJkak1kOXduTlpuM0NoSjdmdDRXeit5b2dlM0tUdE43SitvM0ZVM1pP''@;'; put 'put ''M3ZFMm9nSGlnQUtTelhXNHB3cEt1QUl1WURCZ2dEQUVTa3ptMkhVdlA5aFd3RlZTMUpLdXdzTkJYNkF2NjdYYTd5MCt6TDNxZVZFd0hJbnk3WHBLanFUNk53ZCt2Q05mWHRidkxHcks3OTdDbjJGZFFZRk4rYytMRWZXVnQ5VUVmM3ozazgzZ0tiRGpOTnZTcDlYN2JTQy9JYWd5bDBRdGM4SHds''@;'; put 'put ''V0tjdmhoakNndzFDVFlJWURVYU1qVEVzWWZCRU43OEw1bHlWM0tpMlJaTXBIYkM0aFlOMERRSFBpSVRQVWswMHNSS0F4SHBnRm55d0preSt2YmtOcG1SSFBCNVB4eHZEUVdjZ0dBNjQvSFFWSW91YlRRcUNRWXZaTlhTRmM0cURTUy9EbTNsOWdmRGNMUnlCZjlFS2hUa1cxeFlLMCtKaGh0TlBh''@;'; put 'put ''Z1hEYXE3Z1l5eE9ES3R4NGkvV3hadThQcGJLN2xaVmR1L081aGsreG1KVjFoWWIwUGxOMmw1UzJ4SnNHT1Y4eXZZWXNyWVJ0ZTNDT2o2TlF4eGpKaThDVEMrRHlSZDJrRDhoSThBOFQvNUVnUUJHelJ1QkJKekoxczIrQy9SSkVZenBOZG5rQU1McmdPYmFLbnlZbWhXTUJEMDZBUHhyeSs3MDFh''@;'; put 'put ''aE9zRll3UmJWUGRGTm90SnJxUkZORHExdFlMOXRpRmZBS25DaXFCZEc1d05UOWR2aDh2ckF2RktMVkN1R0F1cVFWV0Y5Ym9oWXZvTndTazNkMXJLb3hlZWloa3gzS3YydUZKcDFMZjU5VFovditycWFtcFIvbjZpbWVUOHhrODRrTGFQODZPblBmN1Z6V2QxdFFkZG1hWENRMm9SOXMwbGJ6K3dT''@;'; put 'put ''QWVZcm5xRURlaDluWkdLQ05pckVCczExT2VsSEg5MVdxSjJMUStudUpTU0VnVVJNOXBvdTRObHFST0xwTFZQc2YwRVNNRERPeFVoNGpldVVXbm5IdjRlTEVwWWhjV0tRcGR5WTRUQWN0c0pyakVJcWpNN0tEUmd3aFRQUUdjQUJCdHlDNnlid0krS0FTWEhrZGpQUUF6VlJybEZXUE4yTGxRc3lQ''@;'; put 'put ''WkZZcHBJR3lPZU45RzdVZ3RIUXVIQTdId3pGUGhUTWNESVJZamx0UzUrRFZWTXJhNm1YcTl5TzFndm0xclJZNnEySTZYWjF0ZFNGekVLSXU1UzlxUUZYc3RUcGhzaG1ZdnNXUlU5UU00UldlWlhYTkcrU2hEUnZrb2RmNitRYlZSMkI3WjVtTmlxbzI2cXZyMnZKNlkycWpCcmlOV2xUYktxL1Rm''@;'; put 'put ''YmU4TGZCS1B2RWpma1lId0FzMXlJb1NxQVg5bVV1N3R4cEwraktzTTBBb3AvTmlJdWpvRVM2b3o4ZnVpQnZjVWExQ3pFeVhjUVNEYnQ2SVZ6WmhTNUorQnNKb3F2YTFmYjFPa25OdzIvb21KaXlLZHQ0UXJXMG1WeU5rcE9lODRQbHMwOHZBMC9pN3BvYW12V3RhYXBwVHlmeEVmaUpXRmZBWEY3''@;'; put 'put ''bWROUDFkWU5IOFlub2NBSGVGOVg5RlJUUXVEUVdyUWlGallTQlVpSVYzckk0ZXFndVhkY2FMQTVWMC9icjNDa3FsSWY3Nk9UQjRndWtSdmc2d3NQend1cldDbndCTUpkTWpQRVpiK0FSZjAyMWEzb1lVMEFVdXVqT1VybmpTNDFjSTdzK2U0OElMcXpUcDkvalpuaVpOTHVoT1dFM2dGU2J2dWxP''@;'; put 'put ''VzFWS3UraHZVaGlCNDFyZlpXcjhmSFpMTmJ1cjIrMEhRcVJFSjBKVmpNWWNwVk84K1B5dXNqTGFsTExSWktWQmVBekJGdDJtVmx4WkJoSm1mdDJHSnNsTmRsazE3YzhjK3I1WUxiS0Z6S1BIbW4yemprMWdwRzFnS3czeEthdlAwK04rVzNsSm5wSzdsb0crdHJNR0Fqald0eVFkck5jVDY3TDV1''@;'; put 'put ''KzdwOTNiUTBXTC8wRnZRM0NuSjRucDAzbWVCeWlIL1AvWCs0SG1QeU9hSmVmNEpmcDN1cG1aOVJvL29aem5VeXorSjU0VjZBR1ZWaFBPZzVEdk9jQnNQM1pMK285UVA5ZjUvNUJEakhKNkQ5M01sZ1JqZUc0ZnN5U0Ivd1V4NnR2TFdZVFVaUkR4Skl0TjNwYXpaNjU2RTh0N2JST3lXbDByUVky''@;'; put 'put ''eTI1U1o4U0FQLysxS25GeGJjaVJ5SjRpL0tmbWFNZDM5SDJmVFN3K3ZCQk9jOXNra1JxNlEwSWExWGlabmhyVS9kMFpzdXpWN1o1K3RnbmJiRnJhdXFMYmxiN2d5VXc5K3J6Y2NQNHlhR2hrK040YjVWeThUL0RSOEo0UXZsdEZjcXVXZDJoclZrQkhsL2ZDTmVraFBsMDQ2dGkvVEdnM3hjWlhl''@;'; put 'put ''dFUvV3JsOEhDOWhOZzFlTURwUmJUeXJCUFo5VEVEK3R3bXo3cVV6VU1ZOXFHY2RhcE1kcDFxQVQyNXpnZms4Zm01YkM1aFlSSnR0SjZHcld2WHVOUzIrMWJ5SE5pcTdoc0N4U3ZRUGJZT29GS0xuTTZlT0dFZzJTTW5qSFJydlZhdnh5TENFbWV4eDhXS2VxbHJZYUlGTHBvemtTMTBjV1A3eW5i''@;'; put 'put ''dkhlcnkvUXV6ZEIvOExPbGRlcXNyYzBqT0hNN3dSZnlwVDF3OTgrbXJGNVVVL2w3bXNDelBOek03Qm1NV2ZnNytCWjFYTTlvdWozc3hqVVQwT3BwZTF3c0R3RU02dlVGM3dHSWtvcWlsSE15U1NjaEpPaVNUZ1FCQ3llWmtVMk1xVUIrb2kxVkJkMzVuTUJ3TTVjRzRWeWRwVjh4Qmp0K2dXM09P''@;'; put 'put ''ak9wRENIazhPOXQ1SkJ3NUt2TUM4OHpSU1BDNmpPWklLTGZsMUp2alcxYnRqMnFzcTAzekN2VEdtdG9VY3lsMHVVWG91Sjg2RjZwdmNZTFJOcVh5NzlQcitJTFhQMVBhN3VDNVB6WCs3UVUrUGNINE42WHk2U3NjWG5tZDFrdXI4UFI2UjlZL1BjSDRONlh5NzgwYlB1dDJ4cjg3T1A4YStiUFlI''@;'; put 'put ''bmcyemtaMW5BK3M0MzFlTjAzSGVSVWY1MjV0LzN3NzJ6L2ZnZDZXUytyQUdha3ZLUmIwVWhIZGZZaDF1TUFLTGtrZUs5cmdlZWY0Nm5vTlNSSm53UFAxREtLVk5NYTZjbzNxTmVVYTc5aW9kRjJOaDNEcW5WcXhkY09OaWpYV3QrTzFHdVpRZFlTV2FkZ05VbkVzS0c2YXliNkNRd0pJNzZuck44''@;'; put 'put ''aHBleDg0ZUpsekE2NWZGQ3ZXcExZdHM1YzdSa0N0ZjI5bjllOHlYU2VvdzZLK3ZwVG94SklpZ25UZ0xpR2dGeEh5VnE4VDZOZzZnYlpTcWRhdWJMSk9vS05uYU4xMmVXQzZUckFHVGwwbjBNQkZ2dWN2WGduNFphdWdsMEV2TGFoOXA0cDgvSU85b3h2aE4zbE4rSEpsK3RzbXBUV0xCMmt4VW5i''@;'; put 'put ''WnV2MGNlVHFoeVJQSTR1UW04blJKa3lkc0tPZnlGQVI1b21jOGxLTVg1SHd2VU1SakFZcVk2WG1US2tWaUdrVW82c2dwbWdCVTY3T01Cc0w4czNXRWlXY1JmaVZ0NUtvMTRDcDUxclhTVVRMWllkamxxSndHODFRYVRDQU1mbWtUV3RFZ254NFhnR2VkNjZuaEs2WG5WYXlwSXV6TUhsL0I5a08w''@;'; put 'put ''cy8wUUNmUnR1YUFLRzRTb214Z05Ma3lNMmFKSWZWYk42SFg2c3lZTUE4WEdvMkJzQU1OME42WWc2S1pGdmllVDF6NGlYM1pac25xbGpjRklibnVuUm5KMFkzaFdXb24yNXpRVEtKN29lUVlKVk0wMmFYZ0JVelRyb2R1RW85ZHYzUEJTQWNDcGRSeWNrbGYyY2dSOGNkdmFLc3kwYWF3NWQzdkhS''@;'; put 'put ''SUVseFBpUG5TWENlRFN0OHVqNlhFZ0orQjBGelArYzVQNG51V2Fkajhwck9ETFpHbzZGRFd3SHo2V2Z5K2JTdFp3S2IvdHl0a1pFcTFITXJmOWdiVmx0QU12YkE4d2RHOVdnZ045MDM0WnRoMWZXQXJDMUQ2bm5vR3hqNTZBRTZOcU5DN1ErTFJyT28vc3FCdFJUcGJRengxbk9YUXQyMkphL1FM''@;'; put 'put ''QWdFSFR4TTZab1VMb21jN0htMUJUeTZQRGRrN1pzdXNJeGYwbzlQWVZjWUdlbFdMMXFnc0pmNUgzNFdPNVJLbndmempZeUMzRk1DTjNHdzNrcm1GUUJZbTFkQ0FON0RmaFdYU0RaVlp3U3ZiYkRhK1AwcjUvZjV5bGZiVVZuVGNiWEhQUTdBNjZBeTArdDI3cFU3OHJXbmFROW14TW5zeXdpemMv''@;'; put 'put ''ZHluTVM1MGFuYXpmMWFKRWQwSXFkOGNMNHNZWFhDK0d1ZFh6RTkrOVFuYm1MOFlLRXZwdFRJM1JDcXhHQzY3ZXRhOHZYS0M1cGF4Ullta0E1Ylk5bjY0dm0wQTNyK0lpZHdjSjRyWDNUZWthK2I0YnkyalQzajQ2Z25MYkh0YlliNWcxNTI0dHFXNW8zL0dCTzJ4UFp0aHZscG5qYlM5cHpzYUdC''@;'; put 'put ''bjcxQzl5WFRHRGlmN3NpZ0ZmMTBueE1aUU9xbUliS1hldHcreHRUNXlMclJrV1ZpSUQ5bkcvSFRHK3dkcHJYM041TkxWM2llaXBlZXAzSis0ZURZOE5Bb3VYVC82T2pHZldUM2RSRjBGdGp5Qm5WWGw5cEhPaWtGTXFORHcyTUhGOGlsa1pINzFUNTZvWTl2UUhTcjdtZ3dFYnFuWVlDR0duMGIx''@;'; put 'put ''ZURuSVV0SXlPNW9VQ2ZOZ29rbngvd3Ryb2Fpb2daWFMvbDRqUFQ2eTF0Y1hpOTg4TFBuREtFWFdUNGx6SjV6MmZyK3Ric2x0QjBTS3lrT2RUOUdMd2I5eHZaak5MRmU2U1pXdWlOaEhxUVVZMkV5dTRsV3VLSmRHYm5mVzNCN1oyZDFRcFlUM3ZKeXI4ZnY5NURlemdUOW5PaHM4bnY0UmI3UFlC''@;'; put 'put ''dldnMDJ6b3hZMmdob3JUQ2FmY2d6OW1vbys5ZVFld09razA0WUN2VU9uYWtlMm9FZW43c3hRejkrdldGR0lwOXBMdk1OYy9FSDdQYzdTT1Q0bThKa3lScmNrYWNQdkp5K0JYSGV4NTZicGZrd2oyOTNteHJqUGdJVmVkaWpSSkRXcHdNUHoydEVsUkJqbHV4V0NJYmJaalQ0ZjBjUHYyVkhhM0FO''@;'; put 'put ''VWFTb0dzQ1ZRNkhDYkhCNTl4cENzY1dzZjVQemRwTjF1czVoOXBVYTZROGhpTGk0MTNhN1NKRVBYaWRpNXRVVjg1NFVldUxLUGhxVTNPQjNadlNoZUtSQlNONWZnSGNmNERwTy84ZHpCNUs5UmVYMzV1ZVZ2SXlzS3NoNEsrYm56cS9lNUJiTjlDYXNQb1A4S3oxK1doSUpWeWpMUFRiSThKZGNw''@;'; put 'put ''WEZmZW9lbEsxSTByTnRHVnIyaTZFblVEeEVadEQrSW4zN0h0UWR5UzAvWjR0dTBjYmxxbkszbmJpOW0yYytoclBENWRicUZuVithdW43ejllKzVMdlAxNzFaZUlMRGZUTlFtZVoyY3dGOTcrSFY4bmUvdDNLZ3pQMXgvTDlwT0hydDBrWC85U05sK2ZONEkyckNYdFJ1L1p4RTY4a2wzTDdsYmoz''@;'; put 'put ''RHIwTTJMQnZlOTg3ajg5bTdqM29OWkdhTCtDTm9MbDdUZTFOaTM0QStoVjhnVHdUVEhqbWI2MW13bzV6emkxMURoUHJuNTM1UXNMeU4ycnZyR0F6aW1ENzBlL0lCZGd4dmswNjhqM0NKTFM3QjVCZUNiK1BudG1DYXFReTBxc3dPdXJOb1VKVExrRkM0SU9kdUxYNm1mck54MEtMdDlrV01HYzkz''@;'; put 'put ''eDgrSWZBR3hFK1BqYk9QOEE0SGRseE1wZXpWTXZ2anFIemVCSS9EbENiN0xHaTV3dXdQVlpyemhkNHFqMFliQThFMk0vNVlGdVF2NE5MSEUvdHdEZGZSaDhFMmtOUVl3dkE2eDhZRDl2eHp3RkFvdCtQbzdzNzUvdHhNbWdRbnZ4YlhsUlZsNC8xVnY3MU5RWXNXckRKTEpweXYvTEdtZWNRekda''@;'; put 'put ''aHhtNjBTYnJjYjhwSnZVTkQ5cTAzdkxWRVd3dnE5K1UwYjlodWcyL01XZGNXb3BIR29TRloxcjQ1WjJoeTZLcUpNWGxRSHRqYVU1dXA3V2hxM1BCYmRGei9oVy9SS1Yvek9aZ0RXOTc0VjMvRERoNWtmK2lINFZybGM5cjM3WHdLM2dCczhNcS9lRWQ5UDFhVCt5VThLMS9HZzhIVHI4Y1IvRzE2''@;'; put 'put ''S3RFemVveHJZeG5zQmR3RkhwbTkvLzdacFl1ZXA1LzE4djNBQUJmVDRBUUdGMGw3cFFoQVBmSkkvN05QZXk1K2o5bUQzNm5uSTllZ0hmS0VENmhXakhVaW9XVWtHSm5wcWZRNk1IY1FiUjh3WW1MQzJFeDNqR1MzQ1ZsWURTdFBQY0ZyRFVyRVk5RXF1eU1FNGFIZEdjcURVSExsMktjSXhJN2NX''@;'; put 'put ''VTkya0pWY0NDMHZBMVI3L1N3eHluWUkxYjluWU9UZWVlOVlGeEc2ZHhUT3YzZEkzUldVdWE0TWk4clA5UVFIbERkS0Y3dm4ySkhLbmNmN2VqM21Razl2eitGMnRpZW91Nm0zMEdQMjlIWU0wZTlzd1VXa0VOOEp1azU4aHRCOUdNN3NhZTEzMG5QYW1WTURibzBBbXRkdjl4TmhhWW4rNXB3Unhz''@;'; put 'put ''KzRNRHpyZGVicFNlMS8vYkNKdDhZMlBHeUMxMkhBYzBDMzQxcDFyZUFKclQ0RHJuOUR2YjZ5UnN1dlg4cGVsNDduWHIrb1hVZHpCM092djVLOTNuMHE5L3E1N1BXRmVlMXN0RzNrSHBZalQ4QzhJd0VuaG5sdlhGWURzMC9tVk5QazRPRWVGblJaYzVGeGtqdGRmMUp4d21PdlhLeW9jZGRqYTNG''@;'; put 'put ''RDQyeU9HNGl6UDUwejlwZXlPTWk3anR0RFdyci9OWFpPajBidnBEMndWVHR4QjlONk9MaXZYMzlmdnpTSy9oL2lFeno2QUFFQUFBQUJBQUJWRXJUK1h3ODg5UUFmQStnQUFBQUEwOEdkaGdBQUFBRFV2cWIxL3piKzR3U0tBODRBQUFBSUFBSUFBQUFBQUFCNDJtTmdaR0JnUHZmdlBBTUR5K2Iv''@;'; put 'put ''WnY5eldMb1lnQ0xJZ05FUUFLY05CcmdBQUFCNDJuV1V6V3NUVVJURno3MHpGRUVJMkVSUVFvekdZRXhNcWttMTBXb3RhV3BpQld2c1JxeFlGMUlYTGxTNlVFUUZrYTVFUlYyNGMxWHAwb1ZLZDNhaENBWDlDMFJRdXRDQ0NoVktvUzZNNXo0ekVwT2FjRGp6OGQ2OGUzL3Z6TWdTVG9NL09VcEZx''@;'; put 'put ''UlFxTW8rU1RpR2hFNGg3UmFUMUNiWklCMHB5QlQzVU5ubUFMajJCZ3h6Zkx4ZVJsL1hvazluNlYzM0o0OXZvMUZQSTh2NG12VW1keFE2OWpsMDZpbTQ5and5UEMyNDg1K293aXZZYyttRlpRZGk3eEhtTENPc01hdm9NT1YyaDMwQ1ZkVlQxQzg4L29pb2hER2tjNi9RcGp1a0JsTHd6cUhrK2xl''@;'; put 'put ''SDllNmc2Zit6bXhMbFdrczhiMGgrSStFVnMxTmZZd0hscjlDNjY1UnFPc09abGVrNFdzRk5yOVY4eXpwcktTT2tkVkRTQjdmU3NqaUFsRTRqcEpHc2Z3NEFJOW92VTU3UkFIb0t5OXdnRHZGN1dxMjU4eGViSWZUSmN3bWFaNUx3eHNxeWgwNnR5N1R3aTdEZWlJWFRKUXlRbGlYUDBsTHpDSG5J''@;'; put 'put ''ZmRHdmVRdDVxbERuV3NwdjMzcEd4MVRYRlBRRDJTZGxkejVKWGduMkZuUmIvbFova0dzYlAyRFZKUXZXM3hvLytqWnIzb2tnSDdGcWxtUVpMNDljczQwZk9lcEl5VnF2SWUwRzNYc2l1V2VUMnhwalJQMU1mOURJS2Y5bTF5bkpoYnZ5YVpmeU1zN24xYTJ1MnV2VnU2d2R1T2VLK1dML01jdGJ4''@;'; put 'put ''c0pxYS9YalR1V1hOOXJ2aFpQV0o5YjRudTcyc0g0NGgrM0FaWkE0c2grNDg4SEhFWkFReFkydjl0Ymx4WlcrQit5SGsvQTdXeWR4YWR0cWNXYlk4dFRuejdUSVd1TzJQTWZxUDJ6dmdjbWg3YVB3YTc0TGxzZFV0NHpMRDdEV0VuL1JSYXBDYTVaaER2SVo2VC9ETVZtOWoybGlUZGNOYitQTzk0''@;'; put 'put ''VE9CYVVEN2tQY3U4TnNSUmEvN0xxeEZMOVV2MCtTMTdMNFY4SjhqTGNQWVNuRi82OTlkUGp6TzViNnU4cStnOGhzcFk5Zk9lTnBGd2wxSTRuQUFBUEMxbHQrdU1wdE85M0grTjZlYk83ZTVOVUY2a2lQaUNCL2lpQWlKSG82SU9PUTRJcUtISXlUaWtCNE9rWkNJT0VJaUl1S0lFTG1Ia09naFlr''@;'; put 'put ''UVBJUkVSUi9RZ0l0SkR5Q0VSOTNKdy9INFFCR1grMlliMnU2Q3VORXpBMytFaitBcHVkZi9vUHU5dUlSWkVRSkpJRHRsSDZqMGpQY3M5NXliQk5HWTZNYjh4cDgwWjg2cTViRFlzbEtWdDVhekwxalByaTAyMFRkajJiTmUyaHAyd2o5cm43SGw3eFFFNUVvNkNvK1lVbldQT3JIUFBXVU1obEVQ''@;'; put 'put ''SDBWVjBFelhRVnEramwrdmQ2UnZ1Vyt2MzlzLzNYN3FtWEdWWGUyQmlZSHZnd2kyNmw5elZRVzV3WS9BU1k3RVo3QUF6c0k2SDgweDdjcDVyVDh1cmUwZThTOTVUSE1WVCtEcGV4TXY0RmY3cVkzMXJ2cnl2N3V2NEhYN0tML3VUL2cvK0xTSkRyQkI1b2tTVWlYUGlsbWdTcitSN01rMW15QlV5''@;'; put 'put ''VDViSU1ubE5UVk9mcVN4Vm9IYXBDdlZNcCtrNWVvRmVvZGZwSWwwS0pBSjNnWHJnR1VEQUFieUFCVElZQm52Z0dGU0JBVzdBSTNoaUVzd0pjOEhVbUFlbXhYVFlKWGFWM1dCMzJHTzJHdXdML2dvYXdadGdJOWptTEp5UEE1ekIzWE1ON2lWa0NZMkhhcUY2NkRsc0NydkNWUGlKaDNtVWY4Y2Y4''@;'; put 'put ''bFcreGovd0xRRVNYQUlyNk1Lc1VCTEt3cWx3S2R3S1RlRlB4QmJCSXVHSUZzbUtpSWlKUUl5S0NYRk1uQlRueGNXM3FTZ1VkVVdwNklFMExuMlVGcVZ2VWtIYWxZNmtNK2xLWnVWTitVQ3V5QmR5VGE3TEhjV2tlQlZXMFpXa3NxQnNLQldsR2NOaWs3RkM3TGNLcTdLYVZGUHFqUHBKL2FybTFD''@;'; put 'put ''MzFVSzJxaG5xdk52N1RFSTNTUnJWSnJhajkxTzYwcHRZY2VoaHE2elo5V2MvcFJkM1FiL1JIL1VsL2lWdmk3dmhVZkRiK0paNk41LzhDREJETXlBQUJBQUFCUEFCb0FBb0FRUUFFQUFJQUtBQTVBSXNBQUFDVEFtc0FBd0FCZU5xTmtzdE93a0FVaHY4V05LREdLREhHc09yS0dCTzVxZUJ0WWRT''@;'; put 'put ''d1VkUkloSzBnRlJyQllpbEdYZm8yYmx6NkRGNmV3STJQNERQNGR6aXROMkxJcEoxdjV2em5Qek9uQlJERE8wTFF3bEVBTzN4NnJHR09xeDdyR0VkVE9JUU4zQXFIc1lKSDRTSEU4U0U4akZrdEloeEJSa3NJUnhIWFRvUkhzYVQ1UG1Nb2FRL0NFNWpTdzhLVGlPa3p3aytZMXVlRm41SFNONFZm''@;'; put 'put ''RU5IYndxOFkwYTk3L0JaQ1hML0RObXkwY1FNSEZ1cG93SVdCZXo0WnBKQkdsbFJsMUtDdW9UUWRjcEZ6aTFrZDVsNGdnUUpNNWpuS3lXWWZmSlZKbFVYYVVyczFISEduamk2NVFuV2FtU2sxMW5HTVhaU3hUK3JudFJCNCtVNkRWalIrMVN4eDVWQnJxWk1iMzg0d1dOMFMrWlE2bTBxdkt3ZDBN''@;'; put 'put ''VGw3MlRYR0t1UkR4cjNZSHVmYVAzM3pldTF5dFlZa3g5VVBaMXY1dGdMWEJHTTIxMzVPUjdMcWpMcmM3ZklyK1pva1o3OW1TOTMxcTJheTd6Mzc3ZjN0WlprN1Zad3BIemZvWFVFNm1WZFJneU9yWWptZU1JMVZ2aGV4SFB4UE9aeFRaNm82am55RmZPQll4Q1Z2WWpIaVVOUDhCTGhaaDVjQUFI''@;'; put 'put ''amFiWk5YYkJ4VkZJYS8zN0YzM1RaTzc3MVh4MTczeENrdWE4ZXhZeWN1Y2V6RVNjYTdZMmZ4ZWhmR3UzRnN1Z1FDSGtEd3dqUGxDUkM5Q2lSNFFLSlgwWHNIMFhta0IrL2NDVjRrN3NOOC94bWQ4NTh6OTk0aEMzZWRHMkFlLzdOVW0zNlF4UXl5eWNHSG4xenl5S2VBUWdMTXBJaFp6R1lPYzZm''@;'; put 'put ''cTU3T0FoU3hpTVV0WXlqS1dzNEtWckdJMWExakxPdGF6Z1kxc1lqTmIyTW8ydGxQTURrb29KVWdaNVZSUVNSWFYxTENUWGRTeW16M3NaUjkxMU5OQUl5R2FhR1kvTFJ5Z2xUWU8wazRIaHpoTUoxMTAwOE1SZWpsS0gvMGM0emdEbk9Ba3A3QzRuYXU0bXB1NWdUdDRuK3U1bHFmNW1EdTVqYnQ1''@;'; put 'put ''bm1lNWgwSEMzRWlFRjdGNWpoZDRsWmQ0bVZmNGxpSGU0RFZlNTE2RytZV2JlSnMzZVl2VGZNK1BYTWNGUkJsaGxCaHhiaUhCUlZ5SXd4Z3BrcHhobk84NHl5UVRYTXlsWE1KajNNcmxYTVlWWE1rUC9NVGp5dElNWlN0SFB2bjVpNzg1SjVTclBPVkxLbENoQXBxcElzM1NiTTNoVjM3VFhNM1Rm''@;'; put 'put ''QzNRUWkzaWQ5N1JZaTNSVWkzVGNxM2djNzdRU3EzU2FxM1JXcTNUZW0zUVJtM2lQdTdYWm0zUlZtM1RkaFZyaDByNGd6LzVrcTlVcXFES1ZLNEtWYXBLMWFyUlR1MVNyWFpyai9acUgwK29UdlZxVUNOZjg0MUN2TXRuZk1DSGZNU252TWNuYWxLejlxdEZCOVNxTmgxVXV6cDBTSWZWcVM1MXEw''@;'; put 'put ''ZEgxTXNEUE1nalBNcERQTXcxM0tXalBNT1RQS1UrZmxhL2p1bTRCblJDSjNWS2xnWVZWa1MyaHZ4MW8xYllTY1Q5bHFHdmJ0Q3h6OWcreTRXL0xqR2NpTnNqZnN2UTF4aTIwa2tSZzhhcENpdnBEM2tXdG1GK0tKSklXdUd3SFUvbTIvOUtmOGl6c2oycmtQR3dYUlEyaHhPam81WkpMUnpPQ1B3''@;'; put 'put ''dG5udlVZNHZuRXpVc2JNMnNITWtJZkcxV09KVzBmVEdETnRNdlp0QnVYc1pkRkxabmVzUXpQZHBOZXR5RnY4T2JJV0VZNkRpZGlnOWJUbW8wWnFXU2dVUm01T3MwSFJ6VG9UT3pnNVBab2ROMGNBeTZUTldZQzM4cUhpMHByUXg2TFBOMW02U2ttYWJIbXlabG1OUGpST1BET2FuME05RHpuOGxT''@;'; put 'put ''bVpHL3g5dkJsR0ZCYnpqcWhGT2pRekg3Yk1GNGh1N0wwQlBUMnRkdlpweDBrZDgvZmRxVDA2ZWRuamhZVnVXeUxGanA2eDEycktsck5XN1FheHpHWGVUMVJxSzJZNDlGeC9MR3o2dDBYV21vdnRwampjY0dqNDIrUG1NMDRTTDlObGhTRXZSWTVySGNZNFhIU3NOZ1UzWW81U1Rjb0tLcEljY3F0''@;'; put 'put ''bUxKZk11ZHhVajM3cWRsa1RYOTJlazRZSjBmMENTNjNkT3l3UHQ5akRiN210WjVWdm8wVEhJeUdvdTR5Ym5XMk5RZVJXd25MMko3NmgrM1piY2hBQUFBZU5wajhON0JjQ0lvWWlNalkxL2tCc2FkSEF3Y0RNa0ZHeG5ZblRaSk1qSm9nUmliZVRnWU9TQXNNVFl3aThOcEY3TURBeU1ESjVETjZi''@;'; put 'put ''U0xBY3BtWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9iallPVFIyc0g0djNVRFMrOUdKZ2FYemF3cGJBd3VMZ0QrSENWZ0FBQUFBQUZZbVBaM0FBQT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXN0eWxlOm5vcm1hbH1jbHIt''@;'; put 'put ''aWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJlbnRDb2xvcn1jbHItaWNvbi5pcy1n''@;'; put 'put ''cmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1jbHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xyLWljb24uaXMtcmVkLGNsci1pY29u''@;'; put 'put ''LmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIyMDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9yIC50cmFuc3BhcmVudC1maWxsLXN0''@;'; put 'put ''cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5ne2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWluZm97ZmlsbDojMDA3N2I4fWNsci1p''@;'; put 'put ''Y29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNsci1pY29uLmlzLXdoaXRlIC50cmFu''@;'; put 'put ''c3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tl''@;'; put 'put ''OiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xyLWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgxODBkZWcpfWNsci1pY29uW3No''@;'; put 'put ''YXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Y2xyLWljb25bZmxpcD1ob3Jpem9u''@;'; put 'put ''dGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24gLmNsci1pLWJhZGdl''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xyLWljb24+c3ZnIHRpdGxle2Rpc3Bs''@;'; put 'put ''YXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNsci1pLW91dGxpbmUpLGNsci1pY29u''@;'; put 'put ''IC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRsaW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2NsYXNzKj1oYXMtYWxlcnRdIC5jYW4t''@;'; put 'put ''YWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0g''@;'; put 'put ''LmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhhcy1zb2xpZCAuY2xyLWktb3V0bGlu''@;'; put 'put ''ZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQg''@;'; put 'put ''LmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xh''@;'; put 'put ''c3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1zb2xpZFtjbGFzcyo9aGFzLWJhZGdl''@;'; put 'put ''XSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6Ymxv''@;'; put 'put ''Y2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWFsZXJ0ZWQsY2xyLWljb24u''@;'; put 'put ''aXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2ZpbGw6IzJlODUwMH1jbHItaWNvbi5o''@;'; put 'put ''YXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1lcnJvciAuY2xyLWktYmFkZ2UgLnRy''@;'; put 'put ''YW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4''@;'; put 'put ''fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDojYzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFu''@;'; put 'put ''dDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7bWFyZ2luOjAgMCAtMXB4IWltcG9y''@;'; put 'put ''dGFudH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzYztzcmM6dXJsKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9ub3BwYS90ZXh0LXNlY3VyaXR5L21hc3Rlci9kaXN0L3RleHQtc2VjdXJpdHktZGlzYy53b2ZmKX1ib2R5LGh0bWx7Zm9udC13ZWln''@;'; put 'put ''aHQ6NDAwIWltcG9ydGFudDtwYWRkaW5nOjA7bWFyZ2luOjB9Ym9keS5zaG91bGQtbG9naW4gY2xyLW1vZGFsLGh0bWwuc2hvdWxkLWxvZ2luIGNsci1tb2RhbHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9LnNsaWRlcntwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDo3NXB4O21hcmdpbi10b3A6NzBweDtoZWlnaHQ6NXB4O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNkNTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0OjVweH0uaW5je2FuaW1hdGlvbjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZyYW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3ts''@;'; put 'put ''ZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFzZXswJXtsZWZ0Oi04MCU7d2lkdGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEw''@;'; put 'put ''MHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoyMDAwO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtdW5zZXQt''@;'; put 'put ''aXtoZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5taW4taC01MHZoe21pbi1oZWlnaHQ6NTB2aH0uaC0yNHZoLC5oLTI1dmh7aGVpZ2h0OjI1dmh9LmgtNzB2aHtoZWlnaHQ6NzB2aH0uaC04MHZoe2hlaWdodDo4MHZofS5oLTEwMHtoZWlnaHQ6MTAwJX0udy01MHZ3e3dpZHRoOjUwdnd9LnctMTAw''@;'; put 'put ''e3dpZHRoOjEwMCV9LnctNDB7d2lkdGg6NDAlfS5taW4tdy0we21pbi13aWR0aDowcHh9Lm14LTV7bWFyZ2luOjAgNXB4fS5teS01e21hcmdpbjo1cHggMH0ubXktMTV7bWFyZ2luOjE1cHggMH0ubXktMTAtbXgtYXV0b3ttYXJnaW46MTBweCBhdXRvfS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50''@;'; put 'put ''fS5tLTEwe21hcmdpbjoxMHB4fS5tdC0we21hcmdpbi10b3A6MH0ubXQtMC1pe21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTMtbmVnYXRpdmV7bWFyZ2luLXRvcDotM3B4fS5tdC01e21hcmdpbi10b3A6NXB4fS5tdC01LWl7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fS5tdC0ye21hcmdp''@;'; put 'put ''bi10b3A6MnB4fS5tdC0yLWl7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fS5tdC0xMHttYXJnaW4tdG9wOjEwcHh9Lm10LTE1e21hcmdpbi10b3A6MTVweH0ubXQtMTd7bWFyZ2luLXRvcDoxN3B4fS5tdC0yMHttYXJnaW4tdG9wOjIwcHh9Lm1sLTB7bWFyZ2luLWxlZnQ6MH0ubWwtM3ttYXJn''@;'; put 'put ''aW4tbGVmdDozcHh9Lm1sLTV7bWFyZ2luLWxlZnQ6NXB4fS5tbC0xMHttYXJnaW4tbGVmdDoxMHB4fS5tbC0xNXttYXJnaW4tbGVmdDoxNXB4fS5tbC0yMHttYXJnaW4tbGVmdDoyMHB4fS5tbC0yMC1pe21hcmdpbi1sZWZ0OjIwcHghaW1wb3J0YW50fS5tci0we21hcmdpbi1yaWdodDowfS5t''@;'; put 'put ''ci01e21hcmdpbi1yaWdodDo1cHh9Lm1yLTEwe21hcmdpbi1yaWdodDoxMHB4fS5tci0xMnttYXJnaW4tcmlnaHQ6MTJweH0ubXItMjB7bWFyZ2luLXJpZ2h0OjIwcHh9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tYi0waXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fS5tYi01e21hcmdpbi1i''@;'; put 'put ''b3R0b206NXB4fS5tYi0xMHttYXJnaW4tYm90dG9tOjEwcHh9Lm1iLTEwLWl7bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0ubWItMjB7bWFyZ2luLWJvdHRvbToyMHB4fS5tYi0zMHttYXJnaW4tYm90dG9tOjMwcHh9LnAtMHtwYWRkaW5nOjB9LnAtMTB7cGFkZGluZzoxMHB4fS5wYi0w''@;'; put 'put ''e3BhZGRpbmctYm90dG9tOjB9LnBiLTEwe3BhZGRpbmctYm90dG9tOjEwcHh9LnB5LTV7cGFkZGluZzo1cHggMH0ucHktMTB7cGFkZGluZzoxMHB4IDB9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZDp0cmFuc3BhcmVudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudC1pe2JhY2tn''@;'; put 'put ''cm91bmQ6dHJhbnNwYXJlbnQhaW1wb3J0YW50fS5jb2xvci1ncmF5e2NvbG9yOiM1YTVhNWF9LmNvbG9yLWRhcmstZ3JheXtjb2xvcjojNDk1OTY3fS5jb2xvci1kYXJrZXItZ3JheXtjb2xvcjojMzE0MzUxfS5jb2xvci13aGl0ZXtjb2xvcjojZmZmfS5jb2xvci13aGl0ZS1pe2NvbG9yOiNm''@;'; put 'put ''ZmYhaW1wb3J0YW50fS5jb2xvci1ncmVlbntjb2xvcjojNGI5ZTRifS5jb2xvci1kYy1ncmVlbntjb2xvcjojODFiNDQwfS5jb2xvci1yZWR7Y29sb3I6I2U0NTQ1NH0uY29sb3Itb3Jhbmdle2NvbG9yOiNlNjdlMjJ9LmNvbG9yLWJsdWV7Y29sb3I6IzNmOGNjM30uY29sb3IteWVsbG93e2Nv''@;'; put 'put ''bG9yOiNmMWM0MGZ9LmN1cnNvci1wb2ludGVye2N1cnNvcjpwb2ludGVyfS5jdXJzb3ItZGVmdWFsdHtjdXJzb3I6ZGVmYXVsdH0uY3Vyc29yLWRlZmF1bHQtaXtjdXJzb3I6ZGVmYXVsdCFpbXBvcnRhbnR9LmJhY2tncm91bmQtdHJhbnNwYXJlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3Bh''@;'; put 'put ''cmVudH0ucG9pbnRlci1ldmVudHMtbm9uZXtwb2ludGVyLWV2ZW50czpub25lfS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlcn0uZm9udC1zaXplLTE1e2ZvbnQtc2l6ZToxNXB4fS5mb250LXNpemUtMTh7Zm9udC1zaXplOjE4cHh9LmZvbnQtYm9sZHtmb250LXdlaWdodDo3MDB9LmZv''@;'; put 'put ''bnQtYm9sZC1pe2ZvbnQtd2VpZ2h0OjcwMCFpbXBvcnRhbnR9LmZvbnQtd2VpZ2h0LTMwMHtmb250LXdlaWdodDozMDB9LmZvbnQtd2VpZ2h0LTcwMHtmb250LXdlaWdodDo3MDB9LndvcmQtYnJlYWt7d29yZC1icmVhazpicmVhay13b3JkfS53b3JkLWJyZWFrLWFsbHt3b3JkLWJyZWFrOmJy''@;'; put 'put ''ZWFrLWFsbH0ucG9zaXRpb24tcmVsYXRpdmV7cG9zaXRpb246cmVsYXRpdmV9LnBvc2l0aW9uLWFic29sdXRle3Bvc2l0aW9uOmFic29sdXRlfS5kLW5vbmV7ZGlzcGxheTpub25lfS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2t9LmQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5k''@;'; put 'put ''LWZsZXh7ZGlzcGxheTpmbGV4fS5kLWNvbnRlbnRze2Rpc3BsYXk6Y29udGVudHN9LmZsZXgtdW5zZXR7ZmxleDp1bnNldH0uYWxpZ24tc2VsZi1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZH0uYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmFsaWduLWl0ZW1zLWNlbnRl''@;'; put 'put ''cnthbGlnbi1pdGVtczpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uanVzdGlmeS1jb250ZW50LWNlbnRlci1pe2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5qdXN0aWZ5LWNvbnRlbnQtc3RhcnR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmZsZXgtc3RhcnR9Lmp1c3RpZnktY29udGVudC1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5k''@;'; put 'put ''fS5mbGV4LWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1nYXAtNXtnYXA6NXB4fS5jbHItZ2FwLTB7Z2FwOjB9Lm92ZXJmbG93LWF1dG97b3ZlcmZsb3c6YXV0b30uei1pbmRleC1oaWdoZXN0e3otaW5kZXg6MTAwMDAwMDB9LnZlcnRpY2FsLWFsaWduLW1pZGRsZXt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjptaWRkbGV9Lmljb24tZGMtZmlsbHtmaWxsOiM4MWI0NDB9LmRhdGFncmlkLWN1c3RvbS1mb290ZXIgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX0ucHJvZ3Jlc1N0YXRpY3ttYXJnaW4tdG9wOi02cHghaW1wb3J0YW50O3Bvc2l0aW9uOmFic29sdXRlIWltcG9y''@;'; put 'put ''dGFudDt6LWluZGV4OjEwMDAwIWltcG9ydGFudH0ucHJvZ3Jlc3MsLnByb2dyZXNzLXN0YXRpY3tiYWNrZ3JvdW5kLWNvbG9yOiNmNWY2ZmU7Ym9yZGVyLXJhZGl1czowO2ZvbnQtc2l6ZTppbmhlcml0O2hlaWdodDo2cHg7bWFyZ2luOjA7bWF4LWhlaWdodDouNTgzMzMzcmVtO21pbi1oZWln''@;'; put 'put ''aHQ6LjE2NjY2N3JlbTtvdmVyZmxvdzpoaWRkZW47ZGlzcGxheTpibG9jazt3aWR0aDpjYWxjKDEwMCUgLSA2M3B4KX0ucHJvZ3Jlc3MubG9vcDphZnRlcnthbmltYXRpb246Y2xyLXByb2dyZXNzLWxvb3BlciAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2NvbnRlbnQ6IiAiO3RvcDouMTY2''@;'; put 'put ''NjY3cmVtO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6IzYwYjUxNTt3aWR0aDo3NSV9LmJhZGdlLXdhcm5pbmd7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWEgLmNhcmQt''@;'; put 'put ''aGVhZGVyIGgze21hcmdpbi10b3A6MTBweH0ubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5Om5vbmV9LnNob3ctY2xvc2UgLm1vZGFsLWhlYWRlciAuY2xvc2UgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xOHB4O3JpZ2h0''@;'; put 'put ''Oi0xMHB4fS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6I2Q5NGIyZTtjb2xvcjojZmZmO2JvcmRlcjpub25lfS5jYXJkLWhlYWRlcntmb250LXdlaWdodDozMDB9LnNlbGVjdCBzZWxlY3Q6Zm9jdXN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzQ5NTk2NztiYWNr''@;'; put 'put ''Z3JvdW5kOmxpbmVhci1ncmFkaWVudCgxODBkZWcsdHJhbnNwYXJlbnQgOTUlLCM0OTVhNjcgMCkgbm8tcmVwZWF0fS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6LjJyZW0haW1wb3J0YW50fS50YWJsZS1hY3RpdmV7YmFja2dyb3VuZDojZDhlM2U5IWltcG9ydGFudDtjb2xv''@;'; put 'put ''cjojMDAwIWltcG9ydGFudH0udGFibGUtYWN0aXZlOmZvY3Vze2JhY2tncm91bmQ6I2Q4ZTNlOX1jbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyLGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1zZWxlY3Qtd3JhcHBlcixj''@;'; put 'put ''bHItc2VsZWN0LWNvbnRhaW5lciBzZWxlY3R7d2lkdGg6MTAwJX10Ym9keXtmb250LXdlaWdodDo0MDB9aDMsaDR7Y29sb3I6IzU4NTg1ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjFyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206''@;'; put 'put ''MH1oMSxoMntjb2xvcjojNTg1ODU4O2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MnJlbTttYXJnaW4tdG9wOjFyZW07bWFyZ2luLWJvdHRvbTowfWNsci1pY29uLmlzLWluZm97ZmlsbDojODBiNDQxfS5kYXRhZ3JpZC1ob3N0LC5kYXRhZ3JpZC1v''@;'; put 'put ''dmVybGF5LXdyYXBwZXJ7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5Oi13ZWJraXQtYm94IWltcG9ydGFudH0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNvbG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uZC1ub25le2Rp''@;'; put 'put ''c3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmNsci1mbGV4LTF7ZmxleDoxfS5jbHItZmxleC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5ib3JkZXItMHtib3JkZXI6MH0u''@;'; put 'put ''Ym94LXNoYWRvdy1ub25le2JveC1zaGFkb3c6bm9uZX0uYm94LXNoYWRvdy1ub25lLWl7Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4''@;'; put 'put ''IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6cmdiYSgyMzAsMzksMCwuNjc4NDMxMzcyNSkhaW1wb3J0YW50O2JvcmRlcjoxcHggc29saWQgcmVkIWltcG9ydGFudDtjb2xvcjojZmZmIWltcG9ydGFudH0u''@;'; put 'put ''bWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsuZC1zbS1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtc20taW5saW5le2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lIWltcG9ydGFudH0uZC1zbS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLXNtLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLXNtLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLXNtLXRhYmxlLWNlbGx7ZGlz''@;'; put 'put ''cGxheTp0YWJsZS1jZWxsIWltcG9ydGFudH0uZC1zbS1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtc20taW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LXNtLXJv''@;'; put 'put ''d3tmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1nYXAtc20tNXtnYXA6NXB4fS5jbHItZ2FwLXNtLTB7Z2FwOjB9fUBtZWRpYSAobWluLXdpZHRoOiA3NjhweCl7LmQtbWQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLW1kLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQt''@;'; put 'put ''bWQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1tZC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1tZC10YWJsZXtkaXNwbGF5OnRhYmxlIWltcG9ydGFudH0uZC1tZC10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9''@;'; put 'put ''LmQtbWQtZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLW1kLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1tZC1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1tZC1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHIt''@;'; put 'put ''Z2FwLW1kLTV7Z2FwOjVweH0uY2xyLWdhcC1tZC0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogOTkycHgpey5kLWxnLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1sZy1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLWxnLWlubGluZS1ibG9ja3tkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbGctYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbGctdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbGctdGFibGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLWxnLWZsZXh7ZGlzcGxheTpmbGV4IWlt''@;'; put 'put ''cG9ydGFudH0uZC1sZy1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbGctY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtbGctcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1sZy01e2dhcDo1cHh9LmNsci1nYXAt''@;'; put 'put ''bGctMHtnYXA6MH19LmRhdGFncmlkLWJvZHl7cGFkZGluZy1ib3R0b206MnJlbSFpbXBvcnRhbnR9LmFib3J0TXNne3doaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX0jZ3JhcGggc3Zne2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9Lm5vLXRhYmxlLXNlbGVjdGVke2Rp''@;'; put 'put ''c3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp3aGl0ZTt6LWluZGV4OjEwO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjB9LmNvcHlSaWdodHtiYWNr''@;'; put 'put ''Z3JvdW5kOiM0OTU5NjchaW1wb3J0YW50O2NvbG9yOiNmZmY7ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAwIDRweDt6LWluZGV4OjEwMH0ubmF2LXRyZWU+Y2xyLXRyZWUtbm9kZS5jbHItZXhwYW5k''@;'; put 'put ''ZWR7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fWNsci10cmVlLW5vZGV7b3ZlcmZsb3cteTp2aXNpYmxlfWNsci10cmVlLW5vZGU6Zm9jdXN7b3V0bGluZTpub25lIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtY2FyZXR7d2lkdGg6YXV0byFpbXBvcnRhbnQ7''@;'; put 'put ''aGVpZ2h0OmF1dG8haW1wb3J0YW50fWNsci10cmVlLW5vZGUgLmNsci10cmVlbm9kZS1zcGlubmVyLWNvbnRhaW5lcntwYWRkaW5nOjAgOHB4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn1jbHItdHJlZS1ub2RlIC5jbHItdHJlZS1ub2Rl''@;'; put 'put ''LWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNw''@;'; put 'put ''bGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDttYXJnaW46NXB4IDAgMDtiYWNrZ3Jv''@;'; put 'put ''dW5kOndoaXRlO2N1cnNvcjpwb2ludGVyfS5jbHItdHJlZS1ub2Rle292ZXJmbG93OnZpc2libGUhaW1wb3J0YW50fS5jb250ZW50LWNvbnRhaW5lcnt3aWR0aDoxMDAlfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsud3RIb2xkZXJ7d2lkdGg6MTAwJSFpbXBvcnRhbnR9fWlucHV0Ojot''@;'; put 'put ''bXMtY2xlYXJ7ZGlzcGxheTpub25lfUBtZWRpYSBhbGwgYW5kICgtbXMtaGlnaC1jb250cmFzdDogbm9uZSksKC1tcy1oaWdoLWNvbnRyYXN0OiBhY3RpdmUpe2Nsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke3BhZGRpbmctYm90dG9tOjIwcHg7bWluLWhlaWdodDphdXRvfS5jbHItdHJlZS1u''@;'; put 'put ''b2Rle21pbi1oZWlnaHQ6MjRweH0uY2xyLXRyZWVub2RlLWNoaWxkcmVue292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb257bWluLXdpZHRoOjE2cHg7bWluLWhlaWdodDoxNnB4fS50''@;'; put 'put ''cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pY29ue2JvdHRvbToycHh9LmNvbnRlbnQtY29udGFpbmVye2hlaWdodDoxMDAlfS5jb250ZW50LWFyZWE+LmNhcmR7bWFyZ2luLWJvdHRvbToyMHB4fS5yZWNvcmQtZWRpdC1tb2RhbCB0ZXh0YXJlYXttaW4taGVpZ2h0OjQycHh9fS5ib3JkZXItYm90''@;'; put 'put ''dG9tLWRpdmlkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM30ubG9hZGluZ1NwaW5uZXJ7aGVpZ2h0Ojcwdmg7ZmxleDoxO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9LmRpc2FibGUt''@;'; put 'put ''cGFzc3dvcmQtbWFuYWdlcnstd2Via2l0LXRleHQtc2VjdXJpdHk6ZGlzYzstbW96LXRleHQtc2VjdXJpdHk6ZGlzYzt0ZXh0LXNlY3VyaXR5OmRpc2M7Zm9udC1mYW1pbHk6dGV4dC1zZWN1cml0eS1kaXNjfS5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX1oci5saWdodHtib3JkZXI6MDti''@;'; put 'put ''b3JkZXItYm90dG9tOjFweCBzb2xpZCAjZGVkZWRlfS5zcGlubmVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc3Bpbm5lci4xNmY3NjNjZWJjNmI2NGRmLXN2ZykhaW1wb3J0YW50fS5jbHIt''@;'; put 'put ''c2VsZWN0LXdyYXBwZXI6YWZ0ZXJ7YmFja2dyb3VuZDp1cmwoL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9jYXJldC42NWYxZmMwYWNiZTRjN2ZmLXN2ZykhaW1wb3J0YW50fS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13''@;'; put 'put ''cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29ue2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6d2hpdGV9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250''@;'; put 'put ''YWluZXJ7bWFyZ2luLXRvcDotNXB4O21hcmdpbi1yaWdodDowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItaW5wdXQtY29udGFpbmVyIGxhYmVse2Rpc3BsYXk6bm9uZX0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWNoZWNrYm94LWNvbnRhaW5lcnttYXJnaW4tdG9wOjB9LnRhYmxlLXNl''@;'; put 'put ''YXJjaC13cmFwcGVyIGlucHV0e2JvcmRlci1ib3R0b206bm9uZTtib3JkZXI6MXB4IHNvbGlkICM5OTl9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLC50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1''@;'; put 'put ''dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXRbdHlwZT1udW1iZXJdey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmRjLWxvY2tlZC1jb250cm9se29wYWNpdHk6LjQ7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH0u''@;'; put 'put ''bGluay1pdHtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQo='';'; put 'run;'; put '%sasjsout(CSS64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let path=services/web9/images; %let service=caret-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=caret.65f1fc0acbe4c7ff-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMiAxMiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+LmNscy0xe2ZpbGw6I2IzYjNiMzt9PC9zdHlsZT4KICAgIDwvZGVmcz4KICAgIDx0aXRsZT5DYXJldDwvdGl0bGU+CiAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xzLTEiIGQ9Ik02LDlMMS4yLDQuMmEwLjY4LDAuNjgsMCwwLDEsMS0xTDYsNy4wOCw5Ljg0LDMuMjRhMC42OCwwLjY4LDAsMSwxLDEsMVoiLz4KPC9zdmc+Cg=='';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=datacontroller-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iMTY5MCIgaGVpZ2h0PSIyNDAiIHZpZXdCb3g9IjAgMCAxNjkwIDI0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwNV83KSI+CjxwYXRoIGQ9Ik0xMjQuOSA1NS4yMDAxQzEyOC4y''@;'; put 'put ''IDU1LjYwMDEgMTMxLjQgNTUuOTAwMSAxMzQuNyA1Ni4zMDAxQzE0Mi42IDU3LjQwMDEgMTUwLjMgNTguOTAwMSAxNTcuNSA2Mi42MDAxQzE1OS42IDYzLjcwMDEgMTYxLjYgNjQuOTAwMSAxNjMuMSA2Ni44MDAxQzE2NS41IDY5LjYwMDEgMTY1LjQgNzIuNjAwMSAxNjMgNzUuNDAwMUMxNjAu''@;'; put 'put ''NSA3OC4yMDAxIDE1Ny4zIDc5LjgwMDEgMTUzLjkgODEuMTAwMUMxNDYgODQuMjAwMSAxMzcuNyA4NS42MDAxIDEyOS4zIDg2LjMwMDFDMTE1LjYgODcuNDAwMSAxMDIuMSA4Ni45MDAxIDg4LjcgODMuNzAwMUM4NC4zIDgyLjcwMDEgODAgODEuMzAwMSA3Ni4xIDc5LjEwMDFDNzQuNiA3OC4z''@;'; put 'put ''MDAxIDczLjIgNzcuMzAwMSA3MS45IDc2LjEwMDFDNjguMyA3Mi42MDAxIDY4LjMgNjguOTAwMSA3MiA2NS42MDAxQzc2IDYyLjAwMDEgODAuOSA2MC4zMDAxIDg1LjkgNTguOTAwMUM5Mi45IDU2LjkwMDEgMTAwIDU1LjkwMDEgMTA3LjIgNTUuNDAwMUMxMDcuOCA1NS40MDAxIDEwOC41IDU1''@;'; put 'put ''LjYwMDEgMTA5IDU1LjEwMDFDMTE0LjIgNTUuMjAwMSAxMTkuNiA1NS4yMDAxIDEyNC45IDU1LjIwMDFaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik02OS4yMDAxIDEzNy4zQzc1LjYwMDEgMTQ1LjUgODQuNzAwMSAxNDguNSA5NC4xMDAxIDE1MC41QzExMi43IDE1NC41IDEzMS4zIDE1''@;'; put 'put ''NCAxNDkuNCAxNDcuNkMxNTUgMTQ1LjYgMTYwLjIgMTQyLjkgMTYzLjkgMTM3LjlDMTY0LjUgMTM3LjEgMTY0LjggMTM3LjUgMTY1LjEgMTM4LjFDMTY1LjcgMTM5LjQgMTY2IDE0MC43IDE2NiAxNDIuMUMxNjYgMTQ3IDE2NiAxNTIgMTY2IDE1Ni45QzE2NiAxNjAuMSAxNjQuNSAxNjIuNiAx''@;'; put 'put ''NjIuMyAxNjQuOEMxNTcuNyAxNjkuNCAxNTEuOSAxNzEuOSAxNDUuOCAxNzMuOEMxMzMuNSAxNzcuNiAxMjAuOSAxNzguNCAxMDguMiAxNzcuNUM5OC43MDAxIDE3Ni44IDg5LjUgMTc1IDgwLjggMTcxLjFDNzcuMSAxNjkuNCA3My43MDAxIDE2Ny40IDcxLjAwMDEgMTY0LjNDNjguOTAwMSAx''@;'; put 'put ''NjEuOSA2Ny44IDE1OS4yIDY3LjggMTU2QzY3LjkgMTUxLjUgNjcuOCAxNDcgNjcuOCAxNDIuNUM2Ny44IDE0MC43IDY4LjEwMDEgMTM5IDY5LjIwMDEgMTM3LjNaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik02OS4yOTk5IDEwNi40Qzc0LjU5OTkgMTEzLjUgODEuOTk5OSAxMTYuNSA4''@;'; put 'put ''OS44OTk5IDExOC42QzEwOC44IDEyMy42IDEyNy43IDEyMy41IDE0Ni40IDExNy45QzE1Mi42IDExNi4xIDE1OC40IDExMy40IDE2Mi45IDEwOC41QzE2My41IDEwNy45IDE2My45IDEwNi41IDE2NC42IDEwNi43QzE2NS42IDEwNyAxNjUuNiAxMDguNCAxNjUuOSAxMDkuNUMxNjYuMyAxMTEu''@;'; put 'put ''MiAxNjYuMSAxMTIuOSAxNjYuMSAxMTQuNkMxNjYuMSAxMTggMTY2IDEyMS4zIDE2Ni4xIDEyNC43QzE2Ni4zIDEyOC45IDE2NC42IDEzMi4yIDE2MS41IDEzNC45QzE1Ni44IDEzOS4xIDE1MS4xIDE0MS42IDE0NSAxNDMuMkMxMjQuNSAxNDguNyAxMDQuMSAxNDguNiA4My45OTk5IDE0MS42''@;'; put 'put ''Qzc5LjA5OTkgMTM5LjkgNzQuNTk5OSAxMzcuNSA3MC45OTk5IDEzMy42QzY4Ljc5OTkgMTMxLjIgNjcuNyAxMjguNCA2Ny43IDEyNS4xQzY3LjggMTIwLjcgNjcuNyAxMTYuMiA2Ny43IDExMS44QzY3LjggMTEwIDY4LjA5OTkgMTA4LjIgNjkuMjk5OSAxMDYuNFoiIGZpbGw9IiNFMEUwRTAi''@;'; put 'put ''Lz4KPHBhdGggZD0iTTY5LjEgNzYuN0M3MC42IDgxLjEgNzQuMiA4My4wOTk5IDc4IDg0Ljg5OTlDODQuOCA4OC4wOTk5IDkyLjEgODkuNiA5OS40IDkwLjVDMTEzLjkgOTIuMyAxMjguNCA5Mi4xIDE0Mi43IDg5LjFDMTQ4LjUgODcuOSAxNTQuMSA4Ni4zIDE1OS4yIDgzLjFDMTYyLjEgODEu''@;'; put 'put ''MyAxNjMuNiA3OS42IDE2NC42IDc2LjhDMTY1LjYgNzguMiAxNjUuOSA3OS43IDE2NS45IDgxLjJDMTY1LjkgODYuMiAxNjYgOTEuMSAxNjUuOSA5Ni4xQzE2NS44IDEwMC4zIDE2My40IDEwMy4zIDE2MC4zIDEwNS44QzE1NC41IDExMC40IDE0Ny43IDExMi44IDE0MC42IDExNC40QzEyMS44''@;'; put 'put ''IDExOC41IDEwMy4yIDExOC4yIDg0LjkgMTEyQzgwLjEgMTEwLjQgNzUuNSAxMDguMSA3MS44IDEwNC41QzY5IDEwMS44IDY3LjUgOTguNyA2Ny42IDk0LjdDNjcuNyA5MC40IDY3LjYgODYuMSA2Ny42IDgxLjhDNjcuOCA3OS45IDY4LjEgNzguMyA2OS4xIDc2LjdaIiBmaWxsPSIjOEVDNjNG''@;'; put 'put ''Ii8+CjxwYXRoIGQ9Ik0xODMuOSAyMTAuOUMyMDAuMiAyMTEuOCAyMDguOSAxOTEuOCAxOTcuMSAxODAuNUMxODQuNyAxNjguNiAxNjQuMyAxNzkuNyAxNjcuNSAxOTYuNUM5My44IDI0My41IC0wLjk5OTk4MSAxNzMuMiAyNiA4Ny44MDAxTDcuODAwMDIgNzUuNjAwMUMtMzMuMSAxODQuMyA5''@;'; put 'put ''Mi44IDI3Ni4yIDE4My45IDIxMC45Wk0xNzguNyAxODcuNEMxODYuMyAxNzkuNSAxOTguNCAxOTAuNSAxOTEuMyAxOTguOEMxODMuOCAyMDcuNSAxNzAuNiAxOTUuOCAxNzguNyAxODcuNFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTM1LjIgNTAuNzAwMUM0Ni45IDYxLjkwMDEgNjYu''@;'; put 'put ''MiA1Mi43MDAxIDY1LjEgMzYuNzAwMUMxMzguNyAtMTAuNyAyMzQgNTkuNTAwMSAyMDcgMTQ1LjJMMjI1LjIgMTU3LjRDMjY0LjkgNTEuODAwMSAxNDQuNCAtNDMuMjk5OSA1MS4yIDIwLjYwMDFDMzMuNyAxNy4wMDAxIDIyLjQgMzguNDAwMSAzNS4yIDUwLjcwMDFaTTUzLjYgNDMuODAwMUM0''@;'; put 'put ''NS44IDUxLjkwMDEgMzMuNSA0MC4xMDAxIDQxLjMgMzIuMDAwMUM0OS4xIDIzLjkwMDEgNjEuNCAzNS43MDAxIDUzLjYgNDMuODAwMVoiIGZpbGw9IiM4RUM2M0YiLz4KPHBhdGggZD0iTTMyMy41NzUgNDcuODg3NEMzMjMuNTc1IDQ2Ljc5MDEgMzIzLjkxNyA0NS44OTg1IDMyNC42MDMgNDUu''@;'; put 'put ''MjEyN0MzMjUuNDI2IDQ0LjM4OTcgMzI2LjM4NiA0My45NzgyIDMyNy40ODQgNDMuOTc4MkgzNjkuMDQ0QzM3OC45MiA0My45NzgyIDM4OC4wNDEgNDUuNzYxMyAzOTYuNDA4IDQ5LjMyNzZDNDA0LjkxMyA1Mi44OTM4IDQxMi4yNTEgNTcuOTAwMyA0MTguNDIzIDY0LjM0N0M0MjQuNTk2IDcw''@;'; put 'put ''LjY1NjUgNDI5LjQ2NSA3OC4yMDA1IDQzMy4wMzEgODYuOTc5QzQzNi41OTcgOTUuNzU3NSA0MzguMzggMTA1LjQyOCA0MzguMzggMTE1Ljk4OUM0MzguMzggMTI2LjU1MSA0MzYuNTk3IDEzNi4yMjEgNDMzLjAzMSAxNDQuOTk5QzQyOS40NjUgMTUzLjc3OCA0MjQuNTk2IDE2MS4zOSA0MTgu''@;'; put 'put ''NDIzIDE2Ny44MzdDNDEyLjI1MSAxNzQuMTQ2IDQwNC45MTMgMTc5LjA4NCAzOTYuNDA4IDE4Mi42NTFDMzg4LjA0MSAxODYuMjE3IDM3OC45MiAxODggMzY5LjA0NCAxODhIMzI3LjQ4NEMzMjYuMzg2IDE4OCAzMjUuNDI2IDE4Ny42NTcgMzI0LjYwMyAxODYuOTcxQzMyMy45MTcgMTg2LjE0''@;'; put 'put ''OCAzMjMuNTc1IDE4NS4xODggMzIzLjU3NSAxODQuMDkxVjQ3Ljg4NzRaTTM0OS4yOTMgNjkuMjg0OVYxNjIuNjkzSDM2OS42NjJDMzc1LjgzNCAxNjIuNjkzIDM4MS40NTggMTYxLjUyNyAzODYuNTMzIDE1OS4xOTZDMzkxLjYwOCAxNTYuODY0IDM5NS45MjggMTUzLjY0MSAzOTkuNDk1IDE0''@;'; put 'put ''OS41MjZDNDAzLjE5OCAxNDUuNDExIDQwNi4wMSAxNDAuNTQxIDQwNy45MyAxMzQuOTE4QzQwOS45ODggMTI5LjE1NyA0MTEuMDE2IDEyMi44NDcgNDExLjAxNiAxMTUuOTg5QzQxMS4wMTYgMTA5LjI2OCA0MDkuOTg4IDEwMy4wMjcgNDA3LjkzIDk3LjI2NjNDNDA2LjAxIDkxLjUwNTQgNDAz''@;'; put 'put ''LjE5OCA4Ni41Njc1IDM5OS40OTUgODIuNDUyNkMzOTUuOTI4IDc4LjMzNzcgMzkxLjYwOCA3NS4xMTQzIDM4Ni41MzMgNzIuNzgyNkMzODEuNDU4IDcwLjQ1MDggMzc1LjgzNCA2OS4yODQ5IDM2OS42NjIgNjkuMjg0OUgzNDkuMjkzWk01MzEuMDkzIDE3Ny45MThDNTI3LjM4OSAxODAuNjYy''@;'; put 'put ''IDUyMy4xMzcgMTgzLjEzMSA1MTguMzM3IDE4NS4zMjVDNTEzLjUzNiAxODcuMzgzIDUwOC43MzUgMTg4LjQxMSA1MDMuOTM1IDE4OC40MTFDNDk2LjgwMiAxODguNDExIDQ5MC4yMTggMTg3LjEwOCA0ODQuMTgzIDE4NC41MDJDNDc4LjE0OCAxODEuODk2IDQ3Mi45MzYgMTc4LjI2MSA0Njgu''@;'; put 'put ''NTQ2IDE3My41OThDNDY0LjI5NCAxNjguOTM0IDQ2MC45MzQgMTYzLjQ0OCA0NTguNDY1IDE1Ny4xMzhDNDU1Ljk5NiAxNTAuODI5IDQ1NC43NjEgMTQzLjk3IDQ1NC43NjEgMTM2LjU2NEM0NTQuNzYxIDEyOS40MzEgNDU2LjA2NCAxMjIuNzc5IDQ1OC42NzEgMTE2LjYwNkM0NjEuMjc3IDEx''@;'; put 'put ''MC4yOTcgNDY0Ljg0MyAxMDQuODEgNDY5LjM2OSAxMDAuMTQ3QzQ3My44OTYgOTUuMzQ2IDQ3OS4xMDggOTEuNTc0IDQ4NS4wMDYgODguODMwN0M0OTEuMDQxIDg2LjA4NzQgNDk3LjQ4OCA4NC43MTU4IDUwNC4zNDYgODQuNzE1OEM1MDkuMTQ3IDg0LjcxNTggNTEzLjg3OSA4NS44MTMxIDUx''@;'; put 'put ''OC41NDIgODguMDA3N0M1MjMuMjA2IDkwLjA2NTIgNTI3LjM4OSA5Mi40NjU1IDUzMS4wOTMgOTUuMjA4OFY4OS4wMzY1QzUzMS4wOTMgODcuOTM5MSA1MzEuNDM2IDg3LjA0NzYgNTMyLjEyMiA4Ni4zNjE4QzUzMi45NDUgODUuNTM4OCA1MzMuOTA1IDg1LjEyNzMgNTM1LjAwMiA4NS4xMjcz''@;'; put 'put ''SDU1MS4wNUM1NTMuNjU2IDg1LjEyNzMgNTU0Ljk1OSA4Ni40MzAzIDU1NC45NTkgODkuMDM2NVYxODQuMDkxQzU1NC45NTkgMTg2LjY5NyA1NTMuNjU2IDE4OCA1NTEuMDUgMTg4SDUzNS4wMDJDNTMzLjkwNSAxODggNTMyLjk0NSAxODcuNjU3IDUzMi4xMjIgMTg2Ljk3MUM1MzEuNDM2IDE4''@;'; put 'put ''Ni4xNDggNTMxLjA5MyAxODUuMTg4IDUzMS4wOTMgMTg0LjA5MVYxNzcuOTE4Wk00NzkuNjU3IDEzNi41NjRDNDc5LjY1NyAxNDAuMjY3IDQ4MC4zNDIgMTQzLjc2NSA0ODEuNzE0IDE0Ny4wNTdDNDgzLjA4NiAxNTAuMjExIDQ4NC45MzcgMTUzLjAyMyA0ODcuMjY5IDE1NS40OTJDNDg5LjYw''@;'; put 'put ''MSAxNTcuOTYxIDQ5Mi4yNzYgMTU5Ljk1IDQ5NS4yOTMgMTYxLjQ1OUM0OTguNDQ4IDE2Mi44MyA1MDEuNzQgMTYzLjUxNiA1MDUuMTY5IDE2My41MTZDNTA4Ljg3MiAxNjMuNTE2IDUxMi4yMzMgMTYyLjgzIDUxNS4yNTEgMTYxLjQ1OUM1MTguMjY4IDE1OS45NSA1MjAuODc0IDE1Ny45NjEg''@;'; put 'put ''NTIzLjA2OSAxNTUuNDkyQzUyNS40MDEgMTUzLjAyMyA1MjcuMTg0IDE1MC4yMTEgNTI4LjQxOCAxNDcuMDU3QzUyOS42NTMgMTQzLjc2NSA1MzAuMjcgMTQwLjI2NyA1MzAuMjcgMTM2LjU2NEM1MzAuMjcgMTMyLjg2IDUyOS42NTMgMTI5LjQzMSA1MjguNDE4IDEyNi4yNzZDNTI3LjE4NCAx''@;'; put 'put ''MjIuOTg0IDUyNS40MDEgMTIwLjEwNCA1MjMuMDY5IDExNy42MzVDNTIwLjg3NCAxMTUuMTY2IDUxOC4yNjggMTEzLjI0NiA1MTUuMjUxIDExMS44NzRDNTEyLjIzMyAxMTAuMzY1IDUwOC44NzIgMTA5LjYxMSA1MDUuMTY5IDEwOS42MTFDNTAxLjc0IDEwOS42MTEgNDk4LjQ0OCAxMTAuMzY1''@;'; put 'put ''IDQ5NS4yOTMgMTExLjg3NEM0OTIuMjc2IDExMy4yNDYgNDg5LjYwMSAxMTUuMTY2IDQ4Ny4yNjkgMTE3LjYzNUM0ODQuOTM3IDEyMC4xMDQgNDgzLjA4NiAxMjIuOTg0IDQ4MS43MTQgMTI2LjI3NkM0ODAuMzQyIDEyOS40MzEgNDc5LjY1NyAxMzIuODYgNDc5LjY1NyAxMzYuNTY0Wk01NzQu''@;'; put 'put ''NDA3IDg5LjAzNjVDNTc0LjQwNyA4Ny45MzkxIDU3NC43NSA4Ny4wNDc2IDU3NS40MzYgODYuMzYxOEM1NzYuMTIyIDg1LjUzODggNTc3LjAxMyA4NS4xMjczIDU3OC4xMTEgODUuMTI3M0g1OTMuMzM2VjU4LjE3NDZDNTkzLjMzNiA1Ny4wNzczIDU5My42NzkgNTYuMTg1OCA1OTQuMzY0IDU1''@;'; put 'put ''LjQ5OTlDNTk1LjE4NyA1NC42NzcgNTk2LjE0OCA1NC4yNjU1IDU5Ny4yNDUgNTQuMjY1NUg2MTMuMjkzQzYxNS44OTkgNTQuMjY1NSA2MTcuMjAyIDU1LjU2ODUgNjE3LjIwMiA1OC4xNzQ2Vjg1LjEyNzNINjM1LjMwOEM2MzYuNDA1IDg1LjEyNzMgNjM3LjI5NyA4NS41Mzg4IDYzNy45ODIg''@;'; put 'put ''ODYuMzYxOEM2MzguNjY4IDg3LjA0NzYgNjM5LjAxMSA4Ny45MzkxIDYzOS4wMTEgODkuMDM2NVYxMDQuMjYyQzYzOS4wMTEgMTA1LjM1OSA2MzguNjY4IDEwNi4yNSA2MzcuOTgyIDEwNi45MzZDNjM3LjI5NyAxMDcuNjIyIDYzNi40MDUgMTA3Ljk2NSA2MzUuMzA4IDEwNy45NjVINjE3LjIw''@;'; put 'put ''MlYxODQuMDkxQzYxNy4yMDIgMTg2LjY5NyA2MTUuODk5IDE4OCA2MTMuMjkzIDE4OEg1OTcuMjQ1QzU5Ni4xNDggMTg4IDU5NS4xODcgMTg3LjY1NyA1OTQuMzY0IDE4Ni45NzFDNTkzLjY3OSAxODYuMTQ4IDU5My4zMzYgMTg1LjE4OCA1OTMuMzM2IDE4NC4wOTFWMTA3Ljk2NUg1NzguMTEx''@;'; put 'put ''QzU3Ny4wMTMgMTA3Ljk2NSA1NzYuMTIyIDEwNy42MjIgNTc1LjQzNiAxMDYuOTM2QzU3NC43NSAxMDYuMjUgNTc0LjQwNyAxMDUuMzU5IDU3NC40MDcgMTA0LjI2MlY4OS4wMzY1Wk03MjkuNjkzIDE3Ny45MThDNzI1Ljk5IDE4MC42NjIgNzIxLjczOCAxODMuMTMxIDcxNi45MzcgMTg1LjMy''@;'; put 'put ''NUM3MTIuMTM3IDE4Ny4zODMgNzA3LjMzNiAxODguNDExIDcwMi41MzUgMTg4LjQxMUM2OTUuNDAzIDE4OC40MTEgNjg4LjgxOSAxODcuMTA4IDY4Mi43ODQgMTg0LjUwMkM2NzYuNzQ4IDE4MS44OTYgNjcxLjUzNiAxNzguMjYxIDY2Ny4xNDcgMTczLjU5OEM2NjIuODk1IDE2OC45MzQgNjU5''@;'; put 'put ''LjUzNCAxNjMuNDQ4IDY1Ny4wNjUgMTU3LjEzOEM2NTQuNTk2IDE1MC44MjkgNjUzLjM2MiAxNDMuOTcgNjUzLjM2MiAxMzYuNTY0QzY1My4zNjIgMTI5LjQzMSA2NTQuNjY1IDEyMi43NzkgNjU3LjI3MSAxMTYuNjA2QzY1OS44NzcgMTEwLjI5NyA2NjMuNDQzIDEwNC44MSA2NjcuOTcgMTAw''@;'; put 'put ''LjE0N0M2NzIuNDk2IDk1LjM0NiA2NzcuNzA4IDkxLjU3NCA2ODMuNjA3IDg4LjgzMDdDNjg5LjY0MiA4Ni4wODc0IDY5Ni4wODggODQuNzE1OCA3MDIuOTQ3IDg0LjcxNThDNzA3Ljc0NyA4NC43MTU4IDcxMi40NzkgODUuODEzMSA3MTcuMTQzIDg4LjAwNzdDNzIxLjgwNyA5MC4wNjUyIDcy''@;'; put 'put ''NS45OSA5Mi40NjU1IDcyOS42OTMgOTUuMjA4OFY4OS4wMzY1QzcyOS42OTMgODcuOTM5MSA3MzAuMDM2IDg3LjA0NzYgNzMwLjcyMiA4Ni4zNjE4QzczMS41NDUgODUuNTM4OCA3MzIuNTA1IDg1LjEyNzMgNzMzLjYwMyA4NS4xMjczSDc0OS42NTFDNzUyLjI1NyA4NS4xMjczIDc1My41NiA4''@;'; put 'put ''Ni40MzAzIDc1My41NiA4OS4wMzY1VjE4NC4wOTFDNzUzLjU2IDE4Ni42OTcgNzUyLjI1NyAxODggNzQ5LjY1MSAxODhINzMzLjYwM0M3MzIuNTA1IDE4OCA3MzEuNTQ1IDE4Ny42NTcgNzMwLjcyMiAxODYuOTcxQzczMC4wMzYgMTg2LjE0OCA3MjkuNjkzIDE4NS4xODggNzI5LjY5MyAxODQu''@;'; put 'put ''MDkxVjE3Ny45MThaTTY3OC4yNTcgMTM2LjU2NEM2NzguMjU3IDE0MC4yNjcgNjc4Ljk0MyAxNDMuNzY1IDY4MC4zMTUgMTQ3LjA1N0M2ODEuNjg2IDE1MC4yMTEgNjgzLjUzOCAxNTMuMDIzIDY4NS44NyAxNTUuNDkyQzY4OC4yMDEgMTU3Ljk2MSA2OTAuODc2IDE1OS45NSA2OTMuODk0IDE2''@;'; put 'put ''MS40NTlDNjk3LjA0OSAxNjIuODMgNzAwLjM0IDE2My41MTYgNzAzLjc3IDE2My41MTZDNzA3LjQ3MyAxNjMuNTE2IDcxMC44MzMgMTYyLjgzIDcxMy44NTEgMTYxLjQ1OUM3MTYuODY5IDE1OS45NSA3MTkuNDc1IDE1Ny45NjEgNzIxLjY2OSAxNTUuNDkyQzcyNC4wMDEgMTUzLjAyMyA3MjUu''@;'; put 'put ''Nzg0IDE1MC4yMTEgNzI3LjAxOSAxNDcuMDU3QzcyOC4yNTMgMTQzLjc2NSA3MjguODcgMTQwLjI2NyA3MjguODcgMTM2LjU2NEM3MjguODcgMTMyLjg2IDcyOC4yNTMgMTI5LjQzMSA3MjcuMDE5IDEyNi4yNzZDNzI1Ljc4NCAxMjIuOTg0IDcyNC4wMDEgMTIwLjEwNCA3MjEuNjY5IDExNy42''@;'; put 'put ''MzVDNzE5LjQ3NSAxMTUuMTY2IDcxNi44NjkgMTEzLjI0NiA3MTMuODUxIDExMS44NzRDNzEwLjgzMyAxMTAuMzY1IDcwNy40NzMgMTA5LjYxMSA3MDMuNzcgMTA5LjYxMUM3MDAuMzQgMTA5LjYxMSA2OTcuMDQ5IDExMC4zNjUgNjkzLjg5NCAxMTEuODc0QzY5MC44NzYgMTEzLjI0NiA2ODgu''@;'; put 'put ''MjAxIDExNS4xNjYgNjg1Ljg3IDExNy42MzVDNjgzLjUzOCAxMjAuMTA0IDY4MS42ODYgMTIyLjk4NCA2ODAuMzE1IDEyNi4yNzZDNjc4Ljk0MyAxMjkuNDMxIDY3OC4yNTcgMTMyLjg2IDY3OC4yNTcgMTM2LjU2NFoiIGZpbGw9IiNFMEUwRTAiLz4KPHBhdGggZD0iTTg3My4yMDYgNzQuMjIy''@;'; put 'put ''OEM4NzIuNjU3IDc1LjA0NTggODcxLjkwMyA3NS41MjU4IDg3MC45NDMgNzUuNjYzQzg2OS45ODIgNzUuODAwMiA4NjkuMDIyIDc1LjU5NDQgODY4LjA2MiA3NS4wNDU4Qzg2NC45MDcgNzMuMTI1NSA4NjEuMTM1IDcxLjQ3OTUgODU2Ljc0NiA3MC4xMDc5Qzg1Mi4zNTcgNjguNzM2MiA4NDcu''@;'; put 'put ''ODk5IDY4LjExOSA4NDMuMzczIDY4LjI1NjJDODM3LjQ3NSA2OC4yNTYyIDgzMS45ODggNjkuNTU5MiA4MjYuOTEzIDcyLjE2NTNDODIxLjk3NSA3NC42MzQzIDgxNy42NTQgNzguMDYzNCA4MTMuOTUxIDgyLjQ1MjZDODEwLjI0OCA4Ni43MDQ3IDgwNy4zNjcgOTEuNzExMSA4MDUuMzEgOTcu''@;'; put 'put ''NDcyQzgwMy4yNTIgMTAzLjIzMyA4MDIuMjkyIDEwOS40MDUgODAyLjQyOSAxMTUuOTg5QzgwMi41NjYgMTIyLjg0NyA4MDMuNTk1IDEyOS4yMjUgODA1LjUxNSAxMzUuMTIzQzgwNy41NzMgMTQwLjg4NCA4MTAuMzg1IDE0NS44OTEgODEzLjk1MSAxNTAuMTQzQzgxNy41MTcgMTU0LjM5NSA4''@;'; put 'put ''MjEuODM4IDE1Ny43NTUgODI2LjkxMyAxNjAuMjI0QzgzMS45ODggMTYyLjU1NiA4MzcuNjggMTYzLjcyMiA4NDMuOTkgMTYzLjcyMkM4NTAuMDI1IDE2My41ODUgODU1LjUxMiAxNjIuNTU2IDg2MC40NSAxNjAuNjM2Qzg2NS41MjUgMTU4LjcxNiA4NzAuNTMxIDE1NS45NzIgODc1LjQ2OSAx''@;'; put 'put ''NTIuNDA2Qzg3Ni40MjkgMTUxLjcyIDg3Ny40NTggMTUxLjUxNCA4NzguNTU1IDE1MS43ODlDODc5LjY1MiAxNTEuOTI2IDg4MC41NDQgMTUyLjQ3NSA4ODEuMjMgMTUzLjQzNUw4OTEuMTA2IDE2OC4yNDhDODkyLjM0IDE3MC4xNjkgODkxLjk5NyAxNzEuODgzIDg5MC4wNzcgMTczLjM5MkM4''@;'; put 'put ''ODIuNTMzIDE3OS4xNTMgODc1LjE5NSAxODMuMzM2IDg2OC4wNjIgMTg1Ljk0M0M4NjAuOTMgMTg4LjU0OSA4NTIuOTc0IDE4OS44NTIgODQ0LjE5NiAxODkuODUyQzgzMy42MzQgMTg5Ljk4OSA4MjQuMTAxIDE4OC4zNDMgODE1LjU5NyAxODQuOTE0QzgwNy4yMyAxODEuMzQ4IDgwMC4wMjkg''@;'; put 'put ''MTc2LjM0MSA3OTMuOTk0IDE2OS44OTRDNzg4LjA5NiAxNjMuMzExIDc4My41MDEgMTU1LjQ5MiA3ODAuMjA5IDE0Ni40MzlDNzc3LjA1NCAxMzcuMzg3IDc3NS40MDggMTI3LjM3NCA3NzUuMjcxIDExNi40MDFDNzc1LjEzNCAxMDcuMDczIDc3Ni41NzQgOTguMDIwNyA3NzkuNTkyIDg5LjI0''@;'; put 'put ''MjJDNzgyLjc0NiA4MC4zMjY2IDc4Ny4yMDQgNzIuMzcxMSA3OTIuOTY1IDY1LjM3NTdDNzk4LjcyNiA1OC4zODA0IDgwNS43MjEgNTIuNzU2NyA4MTMuOTUxIDQ4LjUwNDZDODIyLjE4MSA0NC4yNTI1IDgzMS40MzkgNDIuMTI2NSA4NDEuNzI3IDQyLjEyNjVDODQ4LjcyMiA0MS45ODkzIDg1''@;'; put 'put ''NS41OCA0Mi44MTIzIDg2Mi4zMDEgNDQuNTk1NEM4NjkuMTU5IDQ2LjM3ODYgODc1Ljg4IDQ5LjY3MDUgODgyLjQ2NCA1NC40NzEyQzg4My40MjQgNTUuMTU3IDg4My45NzMgNTYuMDQ4NiA4ODQuMTEgNTcuMTQ1OUM4ODQuMjQ3IDU4LjEwNjEgODgzLjk3MyA1OS4wNjYyIDg4My4yODcgNjAu''@;'; put 'put ''MDI2M0w4NzMuMjA2IDc0LjIyMjhaTTkwNi4yMTIgMTM2LjU2NEM5MDYuMjEyIDEyOS4yOTQgOTA3LjUxNSAxMjIuNTA0IDkxMC4xMjEgMTE2LjE5NUM5MTIuNzI3IDEwOS44ODUgOTE2LjIyNSAxMDQuMzk5IDkyMC42MTQgOTkuNzM1MkM5MjUuMTQgOTUuMDcxNyA5MzAuNDIxIDkxLjQzNjgg''@;'; put 'put ''OTM2LjQ1NiA4OC44MzA3Qzk0Mi40OTIgODYuMDg3NCA5NDkuMDA3IDg0LjcxNTggOTU2LjAwMiA4NC43MTU4Qzk2Mi45OTggODQuNzE1OCA5NjkuNDQ0IDg2LjA4NzQgOTc1LjM0MiA4OC44MzA3Qzk4MS4zNzcgOTEuNDM2OCA5ODYuNTkgOTUuMDcxNyA5OTAuOTc5IDk5LjczNTJDOTk1LjUw''@;'; put 'put ''NSAxMDQuMzk5IDk5OS4wMDMgMTA5Ljg4NSAxMDAxLjQ3IDExNi4xOTVDMTAwNC4wOCAxMjIuNTA0IDEwMDUuMzggMTI5LjI5NCAxMDA1LjM4IDEzNi41NjRDMTAwNS4zOCAxNDMuODMzIDEwMDQuMDggMTUwLjYyMyAxMDAxLjQ3IDE1Ni45MzJDOTk5LjAwMyAxNjMuMjQyIDk5NS41MDUgMTY4''@;'; put 'put ''LjcyOSA5OTAuOTc5IDE3My4zOTJDOTg2LjU5IDE3OC4wNTYgOTgxLjM3NyAxODEuNzU5IDk3NS4zNDIgMTg0LjUwMkM5NjkuMzA3IDE4Ny4xMDggOTYyLjc5MiAxODguNDExIDk1NS43OTYgMTg4LjQxMUM5NDguODAxIDE4OC40MTEgOTQyLjI4NiAxODcuMTA4IDkzNi4yNTEgMTg0LjUwMkM5''@;'; put 'put ''MzAuMjE1IDE4MS43NTkgOTI0LjkzNSAxNzguMDU2IDkyMC40MDggMTczLjM5MkM5MTYuMDE5IDE2OC43MjkgOTEyLjUyMSAxNjMuMjQyIDkwOS45MTUgMTU2LjkzMkM5MDcuNDQ2IDE1MC42MjMgOTA2LjIxMiAxNDMuODMzIDkwNi4yMTIgMTM2LjU2NFpNOTMxLjEwNyAxMzYuNTY0QzkzMS4x''@;'; put 'put ''MDcgMTQwLjQwNCA5MzEuNzI0IDE0NC4wMzkgOTMyLjk1OSAxNDcuNDY4QzkzNC4xOTMgMTUwLjc2IDkzNS45MDggMTUzLjY0MSA5MzguMTAyIDE1Ni4xMDlDOTQwLjI5NyAxNTguNTc4IDk0Mi45MDMgMTYwLjU2NyA5NDUuOTIxIDE2Mi4wNzZDOTQ4LjkzOCAxNjMuNDQ4IDk1Mi4yMyAxNjQu''@;'; put 'put ''MTM0IDk1NS43OTYgMTY0LjEzNEM5NTkuMzYzIDE2NC4xMzQgOTYyLjY1NSAxNjMuNDQ4IDk2NS42NzIgMTYyLjA3NkM5NjguODI3IDE2MC41NjcgOTcxLjUwMiAxNTguNTc4IDk3My42OTYgMTU2LjEwOUM5NzUuODkxIDE1My42NDEgOTc3LjYwNSAxNTAuNzYgOTc4Ljg0IDE0Ny40NjhDOTgw''@;'; put 'put ''LjA3NCAxNDQuMDM5IDk4MC42OTIgMTQwLjQwNCA5ODAuNjkyIDEzNi41NjRDOTgwLjY5MiAxMzIuNzIzIDk4MC4wNzQgMTI5LjE1NyA5NzguODQgMTI1Ljg2NUM5NzcuNjA1IDEyMi40MzYgOTc1Ljg5MSAxMTkuNDg3IDk3My42OTYgMTE3LjAxOEM5NzEuNTAyIDExNC41NDkgOTY4LjgyNyAx''@;'; put 'put ''MTIuNjI5IDk2NS42NzIgMTExLjI1N0M5NjIuNjU1IDEwOS43NDggOTU5LjM2MyAxMDguOTk0IDk1NS43OTYgMTA4Ljk5NEM5NTIuMjMgMTA4Ljk5NCA5NDguOTM4IDEwOS43NDggOTQ1LjkyMSAxMTEuMjU3Qzk0Mi45MDMgMTEyLjYyOSA5NDAuMjk3IDExNC41NDkgOTM4LjEwMiAxMTcuMDE4''@;'; put 'put ''QzkzNS45MDggMTE5LjQ4NyA5MzQuMTkzIDEyMi40MzYgOTMyLjk1OSAxMjUuODY1QzkzMS43MjQgMTI5LjE1NyA5MzEuMTA3IDEzMi43MjMgOTMxLjEwNyAxMzYuNTY0Wk0xMDUwLjkgMTg0LjA5MUMxMDUwLjkgMTg2LjY5NyAxMDQ5LjU5IDE4OCAxMDQ2Ljk5IDE4OEgxMDMwLjk0QzEwMjku''@;'; put 'put ''ODQgMTg4IDEwMjguODggMTg3LjY1NyAxMDI4LjA2IDE4Ni45NzFDMTAyNy4zNyAxODYuMTQ4IDEwMjcuMDMgMTg1LjE4OCAxMDI3LjAzIDE4NC4wOTFWODkuMDM2NUMxMDI3LjAzIDg3LjkzOTEgMTAyNy4zNyA4Ny4wNDc2IDEwMjguMDYgODYuMzYxOEMxMDI4Ljg4IDg1LjUzODggMTAyOS44''@;'; put 'put ''NCA4NS4xMjczIDEwMzAuOTQgODUuMTI3M0gxMDQ2Ljk5QzEwNDkuNTkgODUuMTI3MyAxMDUwLjkgODYuNDMwMyAxMDUwLjkgODkuMDM2NVY5Ni42NDlDMTA1NC44OCA5My4zNTcxIDEwNTkuNDcgOTAuNTQ1MyAxMDY0LjY4IDg4LjIxMzVDMTA2OS44OSA4NS44ODE3IDEwNzUuMDQgODQuNzE1''@;'; put 'put ''OCAxMDgwLjExIDg0LjcxNThDMTA4NC45MSA4NC43MTU4IDEwODkuMzcgODUuNjA3NCAxMDkzLjQ5IDg3LjM5MDVDMTA5Ny42IDg5LjAzNjUgMTEwMS4xIDkxLjQzNjggMTEwMy45OCA5NC41OTE2QzExMDcgOTcuNjA5MiAxMTA5LjMzIDEwMS4xNzUgMTExMC45OCAxMDUuMjlDMTExMi42MiAx''@;'; put 'put ''MDkuNDA1IDExMTMuNDQgMTEzLjkzMiAxMTEzLjQ0IDExOC44N1YxODQuMDkxQzExMTMuNDQgMTg2LjY5NyAxMTEyLjE0IDE4OCAxMTA5LjUzIDE4OEgxMDkzLjQ5QzEwOTIuMzkgMTg4IDEwOTEuNDMgMTg3LjY1NyAxMDkwLjYxIDE4Ni45NzFDMTA4OS45MiAxODYuMTQ4IDEwODkuNTggMTg1''@;'; put 'put ''LjE4OCAxMDg5LjU4IDE4NC4wOTFWMTI2LjY4OEMxMDg5LjU4IDEyMS4wNjQgMTA4OC4yNyAxMTYuNzQ0IDEwODUuNjcgMTEzLjcyNkMxMDgzLjA2IDExMC41NzEgMTA3OS4zNiAxMDguOTk0IDEwNzQuNTYgMTA4Ljk5NEMxMDcxLjU0IDEwOC45OTQgMTA2OC41OSAxMDkuNjExIDEwNjUuNzEg''@;'; put 'put ''MTEwLjg0NUMxMDYyLjk3IDExMS45NDMgMTA2MC41IDExMy41MiAxMDU4LjMgMTE1LjU3OEMxMDU2LjI1IDExNy40OTggMTA1NC41MyAxMTkuODMgMTA1My4xNiAxMjIuNTczQzEwNTEuOTMgMTI1LjMxNiAxMDUxLjMxIDEyOC4xOTcgMTA1MS4zMSAxMzEuMjE0TDEwNTAuOSAxODQuMDkxWk0x''@;'; put 'put ''MTI3Ljg3IDg5LjAzNjVDMTEyNy44NyA4Ny45MzkxIDExMjguMjEgODcuMDQ3NiAxMTI4LjkgODYuMzYxOEMxMTI5LjU4IDg1LjUzODggMTEzMC40OCA4NS4xMjczIDExMzEuNTcgODUuMTI3M0gxMTQ2LjhWNTguMTc0NkMxMTQ2LjggNTcuMDc3MyAxMTQ3LjE0IDU2LjE4NTggMTE0Ny44MyA1''@;'; put 'put ''NS40OTk5QzExNDguNjUgNTQuNjc3IDExNDkuNjEgNTQuMjY1NSAxMTUwLjcxIDU0LjI2NTVIMTE2Ni43NkMxMTY5LjM2IDU0LjI2NTUgMTE3MC42NyA1NS41Njg1IDExNzAuNjcgNTguMTc0NlY4NS4xMjczSDExODguNzdDMTE4OS44NyA4NS4xMjczIDExOTAuNzYgODUuNTM4OCAxMTkxLjQ1''@;'; put 'put ''IDg2LjM2MThDMTE5Mi4xMyA4Ny4wNDc2IDExOTIuNDcgODcuOTM5MSAxMTkyLjQ3IDg5LjAzNjVWMTA0LjI2MkMxMTkyLjQ3IDEwNS4zNTkgMTE5Mi4xMyAxMDYuMjUgMTE5MS40NSAxMDYuOTM2QzExOTAuNzYgMTA3LjYyMiAxMTg5Ljg3IDEwNy45NjUgMTE4OC43NyAxMDcuOTY1SDExNzAu''@;'; put 'put ''NjdWMTg0LjA5MUMxMTcwLjY3IDE4Ni42OTcgMTE2OS4zNiAxODggMTE2Ni43NiAxODhIMTE1MC43MUMxMTQ5LjYxIDE4OCAxMTQ4LjY1IDE4Ny42NTcgMTE0Ny44MyAxODYuOTcxQzExNDcuMTQgMTg2LjE0OCAxMTQ2LjggMTg1LjE4OCAxMTQ2LjggMTg0LjA5MVYxMDcuOTY1SDExMzEuNTdD''@;'; put 'put ''MTEzMC40OCAxMDcuOTY1IDExMjkuNTggMTA3LjYyMiAxMTI4LjkgMTA2LjkzNkMxMTI4LjIxIDEwNi4yNSAxMTI3Ljg3IDEwNS4zNTkgMTEyNy44NyAxMDQuMjYyVjg5LjAzNjVaTTEyNzMuMjggMTA4LjE3MUMxMjcyLjg3IDEwOS4yNjggMTI3Mi4xOCAxMTAuMDIyIDEyNzEuMjIgMTEwLjQz''@;'; put 'put ''NEMxMjcwLjI2IDExMC44NDUgMTI2OS4yMyAxMTAuNzc3IDEyNjguMTQgMTEwLjIyOEMxMjY3LjA0IDEwOS42OCAxMjY1LjY3IDEwOS4yIDEyNjQuMDIgMTA4Ljc4OEMxMjYyLjUxIDEwOC4zNzcgMTI2MC44NyAxMDguMTcxIDEyNTkuMDggMTA4LjE3MUMxMjU2LjA3IDEwOC4xNzEgMTI1My4x''@;'; put 'put ''OSAxMDguNzg4IDEyNTAuNDQgMTEwLjAyMkMxMjQ3LjcgMTExLjI1NyAxMjQ1LjIzIDExMi45NzIgMTI0My4wNCAxMTUuMTY2QzEyNDAuOTggMTE3LjIyNCAxMjM5LjMzIDExOS42OTMgMTIzOC4xIDEyMi41NzNDMTIzNi44NiAxMjUuMzE2IDEyMzYuMjUgMTI4LjE5NyAxMjM2LjI1IDEzMS4y''@;'; put 'put ''MTRMMTIzNS44NCAxODQuMDkxQzEyMzUuODQgMTg1LjE4OCAxMjM1LjQ5IDE4Ni4xNDggMTIzNC44MSAxODYuOTcxQzEyMzQuMTIgMTg3LjY1NyAxMjMzLjIzIDE4OCAxMjMyLjEzIDE4OEgxMjE1Ljg4QzEyMTQuNzggMTg4IDEyMTMuODIgMTg3LjY1NyAxMjEzIDE4Ni45NzFDMTIxMi4zMSAx''@;'; put 'put ''ODYuMTQ4IDEyMTEuOTcgMTg1LjE4OCAxMjExLjk3IDE4NC4wOTFWODkuMDM2NUMxMjExLjk3IDg3LjkzOTEgMTIxMi4zMSA4Ny4wNDc2IDEyMTMgODYuMzYxOEMxMjEzLjgyIDg1LjUzODggMTIxNC43OCA4NS4xMjczIDEyMTUuODggODUuMTI3M0gxMjMyLjEzQzEyMzMuMjMgODUuMTI3MyAx''@;'; put 'put ''MjM0LjEyIDg1LjUzODggMTIzNC44MSA4Ni4zNjE4QzEyMzUuNDkgODcuMDQ3NiAxMjM1Ljg0IDg3LjkzOTEgMTIzNS44NCA4OS4wMzY1Vjk0LjU5MTZDMTIzOS44MSA5MS43MTExIDEyNDQuMDcgODkuMzc5NCAxMjQ4LjU5IDg3LjU5NjJDMTI1My4xMiA4NS42NzU5IDEyNTcuOTkgODQuNzE1''@;'; put 'put ''OCAxMjYzLjIgODQuNzE1OEMxMjY4LjU1IDg0LjcxNTggMTI3My4yMSA4NS43NDQ1IDEyNzcuMTkgODcuODAyQzEyNzkuMTEgODkuMDM2NSAxMjc5LjczIDkwLjYxMzggMTI3OS4wNCA5Mi41MzQxTDEyNzMuMjggMTA4LjE3MVpNMTI4NS4zMyAxMzYuNTY0QzEyODUuMzMgMTI5LjI5NCAxMjg2''@;'; put 'put ''LjYzIDEyMi41MDQgMTI4OS4yNCAxMTYuMTk1QzEyOTEuODUgMTA5Ljg4NSAxMjk1LjM0IDEwNC4zOTkgMTI5OS43MyA5OS43MzUyQzEzMDQuMjYgOTUuMDcxNyAxMzA5LjU0IDkxLjQzNjggMTMxNS41NyA4OC44MzA3QzEzMjEuNjEgODYuMDg3NCAxMzI4LjEyIDg0LjcxNTggMTMzNS4xMiA4''@;'; put 'put ''NC43MTU4QzEzNDIuMTIgODQuNzE1OCAxMzQ4LjU2IDg2LjA4NzQgMTM1NC40NiA4OC44MzA3QzEzNjAuNSA5MS40MzY4IDEzNjUuNzEgOTUuMDcxNyAxMzcwLjEgOTkuNzM1MkMxMzc0LjYyIDEwNC4zOTkgMTM3OC4xMiAxMDkuODg1IDEzODAuNTkgMTE2LjE5NUMxMzgzLjIgMTIyLjUwNCAx''@;'; put 'put ''Mzg0LjUgMTI5LjI5NCAxMzg0LjUgMTM2LjU2NEMxMzg0LjUgMTQzLjgzMyAxMzgzLjIgMTUwLjYyMyAxMzgwLjU5IDE1Ni45MzJDMTM3OC4xMiAxNjMuMjQyIDEzNzQuNjIgMTY4LjcyOSAxMzcwLjEgMTczLjM5MkMxMzY1LjcxIDE3OC4wNTYgMTM2MC41IDE4MS43NTkgMTM1NC40NiAxODQu''@;'; put 'put ''NTAyQzEzNDguNDMgMTg3LjEwOCAxMzQxLjkxIDE4OC40MTEgMTMzNC45MSAxODguNDExQzEzMjcuOTIgMTg4LjQxMSAxMzIxLjQgMTg3LjEwOCAxMzE1LjM3IDE4NC41MDJDMTMwOS4zMyAxODEuNzU5IDEzMDQuMDUgMTc4LjA1NiAxMjk5LjUzIDE3My4zOTJDMTI5NS4xNCAxNjguNzI5IDEy''@;'; put 'put ''OTEuNjQgMTYzLjI0MiAxMjg5LjAzIDE1Ni45MzJDMTI4Ni41NiAxNTAuNjIzIDEyODUuMzMgMTQzLjgzMyAxMjg1LjMzIDEzNi41NjRaTTEzMTAuMjMgMTM2LjU2NEMxMzEwLjIzIDE0MC40MDQgMTMxMC44NCAxNDQuMDM5IDEzMTIuMDggMTQ3LjQ2OEMxMzEzLjMxIDE1MC43NiAxMzE1LjAz''@;'; put 'put ''IDE1My42NDEgMTMxNy4yMiAxNTYuMTA5QzEzMTkuNDIgMTU4LjU3OCAxMzIyLjAyIDE2MC41NjcgMTMyNS4wNCAxNjIuMDc2QzEzMjguMDYgMTYzLjQ0OCAxMzMxLjM1IDE2NC4xMzQgMTMzNC45MSAxNjQuMTM0QzEzMzguNDggMTY0LjEzNCAxMzQxLjc3IDE2My40NDggMTM0NC43OSAxNjIu''@;'; put 'put ''MDc2QzEzNDcuOTUgMTYwLjU2NyAxMzUwLjYyIDE1OC41NzggMTM1Mi44MSAxNTYuMTA5QzEzNTUuMDEgMTUzLjY0MSAxMzU2LjcyIDE1MC43NiAxMzU3Ljk2IDE0Ny40NjhDMTM1OS4xOSAxNDQuMDM5IDEzNTkuODEgMTQwLjQwNCAxMzU5LjgxIDEzNi41NjRDMTM1OS44MSAxMzIuNzIzIDEz''@;'; put 'put ''NTkuMTkgMTI5LjE1NyAxMzU3Ljk2IDEyNS44NjVDMTM1Ni43MiAxMjIuNDM2IDEzNTUuMDEgMTE5LjQ4NyAxMzUyLjgxIDExNy4wMThDMTM1MC42MiAxMTQuNTQ5IDEzNDcuOTUgMTEyLjYyOSAxMzQ0Ljc5IDExMS4yNTdDMTM0MS43NyAxMDkuNzQ4IDEzMzguNDggMTA4Ljk5NCAxMzM0Ljkx''@;'; put 'put ''IDEwOC45OTRDMTMzMS4zNSAxMDguOTk0IDEzMjguMDYgMTA5Ljc0OCAxMzI1LjA0IDExMS4yNTdDMTMyMi4wMiAxMTIuNjI5IDEzMTkuNDIgMTE0LjU0OSAxMzE3LjIyIDExNy4wMThDMTMxNS4wMyAxMTkuNDg3IDEzMTMuMzEgMTIyLjQzNiAxMzEyLjA4IDEyNS44NjVDMTMxMC44NCAxMjku''@;'; put 'put ''MTU3IDEzMTAuMjMgMTMyLjcyMyAxMzEwLjIzIDEzNi41NjRaTTE0MDguMjEgMzcuMzk0NEMxNDA4LjIxIDM2LjI5NyAxNDA4LjU1IDM1LjQwNTUgMTQwOS4yNCAzNC43MTk3QzE0MTAuMDYgMzQuMDMzOCAxNDExLjAyIDMzLjY5MDkgMTQxMi4xMiAzMy42OTA5SDE0MjguMTZDMTQyOS4yNiAz''@;'; put 'put ''My42OTA5IDE0MzAuMTUgMzQuMDMzOCAxNDMwLjg0IDM0LjcxOTdDMTQzMS42NiAzNS40MDU1IDE0MzIuMDcgMzYuMjk3IDE0MzIuMDcgMzcuMzk0NFYxODQuMDkxQzE0MzIuMDcgMTg2LjY5NyAxNDMwLjc3IDE4OCAxNDI4LjE2IDE4OEgxNDEyLjEyQzE0MTEuMDIgMTg4IDE0MTAuMDYgMTg3''@;'; put 'put ''LjY1NyAxNDA5LjI0IDE4Ni45NzFDMTQwOC41NSAxODYuMTQ4IDE0MDguMjEgMTg1LjE4OCAxNDA4LjIxIDE4NC4wOTFWMzcuMzk0NFpNMTQ2MyAzNy4zOTQ0QzE0NjMgMzYuMjk3IDE0NjMuMzUgMzUuNDA1NSAxNDY0LjAzIDM0LjcxOTdDMTQ2NC44NSAzNC4wMzM4IDE0NjUuODEgMzMuNjkw''@;'; put 'put ''OSAxNDY2LjkxIDMzLjY5MDlIMTQ4Mi45NkMxNDg0LjA2IDMzLjY5MDkgMTQ4NC45NSAzNC4wMzM4IDE0ODUuNjMgMzQuNzE5N0MxNDg2LjQ2IDM1LjQwNTUgMTQ4Ni44NyAzNi4yOTcgMTQ4Ni44NyAzNy4zOTQ0VjE4NC4wOTFDMTQ4Ni44NyAxODYuNjk3IDE0ODUuNTcgMTg4IDE0ODIuOTYg''@;'; put 'put ''MTg4SDE0NjYuOTFDMTQ2NS44MSAxODggMTQ2NC44NSAxODcuNjU3IDE0NjQuMDMgMTg2Ljk3MUMxNDYzLjM1IDE4Ni4xNDggMTQ2MyAxODUuMTg4IDE0NjMgMTg0LjA5MVYzNy4zOTQ0Wk0xNTM3Ljc2IDE0OC4wODVDMTUzOS42OCAxNTIuODg2IDE1NDIuNTYgMTU2Ljc5NSAxNTQ2LjQgMTU5''@;'; put 'put ''LjgxM0MxNTUwLjM3IDE2Mi44MyAxNTU0LjkgMTY0LjMzOSAxNTU5Ljk4IDE2NC4zMzlDMTU2My42OCAxNjQuMzM5IDE1NjcuMjUgMTYzLjcyMiAxNTcwLjY3IDE2Mi40ODhDMTU3NC4xIDE2MS4yNTMgMTU3Ni45OCAxNTkuNTM5IDE1NzkuMzIgMTU3LjM0NEMxNTgwLjE0IDE1Ni42NTggMTU4''@;'; put 'put ''MS4wMyAxNTYuMzg0IDE1ODEuOTkgMTU2LjUyMUMxNTgzLjA5IDE1Ni41MjEgMTU4My45OCAxNTYuODY0IDE1ODQuNjcgMTU3LjU1TDE1OTYuMzkgMTY4LjY2QzE1OTcuMDggMTY5LjM0NiAxNTk3LjQyIDE3MC4yMzcgMTU5Ny40MiAxNzEuMzM1QzE1OTcuNDIgMTcyLjI5NSAxNTk3LjA4IDE3''@;'; put 'put ''My4xMTggMTU5Ni4zOSAxNzMuODA0QzE1OTEuODcgMTc4LjYwNCAxNTg2LjUyIDE4Mi4yMzkgMTU4MC4zNCAxODQuNzA4QzE1NzQuMTcgMTg3LjE3NyAxNTY3LjM4IDE4OC40MTEgMTU1OS45OCAxODguNDExQzE1NTMuMTIgMTg4LjQxMSAxNTQ2Ljc0IDE4Ny4xNzcgMTU0MC44NCAxODQuNzA4''@;'; put 'put ''QzE1MzUuMDggMTgyLjIzOSAxNTMwLjAxIDE3OC43NDEgMTUyNS42MiAxNzQuMjE1QzE1MjAuODIgMTY5LjQxNCAxNTE3LjExIDE2My43MjIgMTUxNC41MSAxNTcuMTM4QzE1MTEuOSAxNTAuNTU0IDE1MTAuNiAxNDMuNTU5IDE1MTAuNiAxMzYuMTUyQzE1MTAuNiAxMjkuMDIgMTUxMS45IDEy''@;'; put 'put ''Mi4zNjcgMTUxNC41MSAxMTYuMTk1QzE1MTcuMTEgMTA5Ljg4NSAxNTIwLjYxIDEwNC4zOTkgMTUyNSA5OS43MzUyQzE1MjkuNTMgOTUuMDcxNyAxNTM0LjgxIDkxLjQzNjggMTU0MC44NCA4OC44MzA3QzE1NDYuODggODYuMDg3NCAxNTUzLjMyIDg0LjcxNTggMTU2MC4xOCA4NC43MTU4QzE1''@;'; put 'put ''NjYuNDkgODQuNzE1OCAxNTcyLjMyIDg1Ljg4MTcgMTU3Ny42NyA4OC4yMTM1QzE1ODMuMTYgOTAuNTQ1MyAxNTg3Ljk2IDkzLjc2ODYgMTU5Mi4wNyA5Ny44ODM1QzE1OTMuODYgOTkuNTI5NSAxNTk1LjU3IDEwMS40NSAxNTk3LjIyIDEwMy42NDRDMTU5OC44NiAxMDUuODM5IDE2MDAuMyAx''@;'; put 'put ''MDguMzc3IDE2MDEuNTQgMTExLjI1N0MxNjAyLjc3IDExNC4xMzcgMTYwMy43MyAxMTcuNDk4IDE2MDQuNDIgMTIxLjMzOEMxNjA1LjI0IDEyNS4wNDIgMTYwNS42NSAxMjkuMjk0IDE2MDUuNjUgMTM0LjA5NUMxNjA1LjY1IDEzNy4zODcgMTYwNS40NSAxNDAuOTUzIDE2MDUuMDMgMTQ0Ljc5''@;'; put 'put ''M0MxNjA0Ljc2IDE0Ni45ODggMTYwMy41MyAxNDguMDg1IDE2MDEuMzMgMTQ4LjA4NUgxNTM3Ljc2Wk0xNTU5LjU2IDEwOC43ODhDMTU1My44IDEwOC43ODggMTU0OS4wNyAxMTAuMzY1IDE1NDUuMzcgMTEzLjUyQzE1NDEuNjYgMTE2LjY3NSAxNTM5LjA2IDEyMC41ODQgMTUzNy41NSAxMjUu''@;'; put 'put ''MjQ4SDE1ODAuNzZDMTU3OS4yNSAxMjAuODU4IDE1NzYuNzEgMTE3LjAxOCAxNTczLjE0IDExMy43MjZDMTU2OS43MSAxMTAuNDM0IDE1NjUuMTkgMTA4Ljc4OCAxNTU5LjU2IDEwOC43ODhaTTE2ODguNTEgMTA4LjE3MUMxNjg4LjEgMTA5LjI2OCAxNjg3LjQxIDExMC4wMjIgMTY4Ni40NSAx''@;'; put 'put ''MTAuNDM0QzE2ODUuNDkgMTEwLjg0NSAxNjg0LjQ2IDExMC43NzcgMTY4My4zNyAxMTAuMjI4QzE2ODIuMjcgMTA5LjY4IDE2ODAuOSAxMDkuMiAxNjc5LjI1IDEwOC43ODhDMTY3Ny43NCAxMDguMzc3IDE2NzYuMSAxMDguMTcxIDE2NzQuMzEgMTA4LjE3MUMxNjcxLjI5IDEwOC4xNzEgMTY2''@;'; put 'put ''OC40MSAxMDguNzg4IDE2NjUuNjcgMTEwLjAyMkMxNjYyLjkzIDExMS4yNTcgMTY2MC40NiAxMTIuOTcyIDE2NTguMjYgMTE1LjE2NkMxNjU2LjIxIDExNy4yMjQgMTY1NC41NiAxMTkuNjkzIDE2NTMuMzMgMTIyLjU3M0MxNjUyLjA5IDEyNS4zMTYgMTY1MS40NyAxMjguMTk3IDE2NTEuNDcg''@;'; put 'put ''MTMxLjIxNEwxNjUxLjA2IDE4NC4wOTFDMTY1MS4wNiAxODUuMTg4IDE2NTAuNzIgMTg2LjE0OCAxNjUwLjAzIDE4Ni45NzFDMTY0OS4zNSAxODcuNjU3IDE2NDguNDYgMTg4IDE2NDcuMzYgMTg4SDE2MzEuMTFDMTYzMC4wMSAxODggMTYyOS4wNSAxODcuNjU3IDE2MjguMjMgMTg2Ljk3MUMx''@;'; put 'put ''NjI3LjU0IDE4Ni4xNDggMTYyNy4yIDE4NS4xODggMTYyNy4yIDE4NC4wOTFWODkuMDM2NUMxNjI3LjIgODcuOTM5MSAxNjI3LjU0IDg3LjA0NzYgMTYyOC4yMyA4Ni4zNjE4QzE2MjkuMDUgODUuNTM4OCAxNjMwLjAxIDg1LjEyNzMgMTYzMS4xMSA4NS4xMjczSDE2NDcuMzZDMTY0OC40NiA4''@;'; put 'put ''NS4xMjczIDE2NDkuMzUgODUuNTM4OCAxNjUwLjAzIDg2LjM2MThDMTY1MC43MiA4Ny4wNDc2IDE2NTEuMDYgODcuOTM5MSAxNjUxLjA2IDg5LjAzNjVWOTQuNTkxNkMxNjU1LjA0IDkxLjcxMTEgMTY1OS4yOSA4OS4zNzk0IDE2NjMuODIgODcuNTk2MkMxNjY4LjM1IDg1LjY3NTkgMTY3My4y''@;'; put 'put ''MiA4NC43MTU4IDE2NzguNDMgODQuNzE1OEMxNjgzLjc4IDg0LjcxNTggMTY4OC40NCA4NS43NDQ1IDE2OTIuNDIgODcuODAyQzE2OTQuMzQgODkuMDM2NSAxNjk0Ljk2IDkwLjYxMzggMTY5NC4yNyA5Mi41MzQxTDE2ODguNTEgMTA4LjE3MVoiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVm''@;'; put 'put ''cz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDVfNyI+CjxyZWN0IHdpZHRoPSIxNjg5IiBoZWlnaHQ9IjI0MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=dc-logo-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyB3aWR0aD0iNzAiIGhlaWdodD0iNzAiIHZpZXdCb3g9IjAgMCA3MCA3MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzEwMV84KSI+CjxwYXRoIGQ9Ik0zNy41OTkzIDE2LjYyMTJDMzguNTkxNiAx''@;'; put 'put ''Ni43NDE1IDM5LjU1MzggMTYuODMxNyA0MC41NDYxIDE2Ljk1MTlDNDIuOTIxNiAxNy4yODI3IDQ1LjIzNyAxNy43MzM3IDQ3LjQwMiAxOC44NDYzQzQ4LjAzMzQgMTkuMTc3MSA0OC42MzQ4IDE5LjUzNzkgNDkuMDg1OSAyMC4xMDkyQzQ5LjgwNzUgMjAuOTUxMiA0OS43Nzc0IDIxLjg1MzMg''@;'; put 'put ''NDkuMDU1OCAyMi42OTUyQzQ4LjMwNCAyMy41MzcxIDQ3LjM0MTggMjQuMDE4MyA0Ni4zMTk1IDI0LjQwOTJDNDMuOTQ0IDI1LjM0MTMgNDEuNDQ4MiAyNS43NjIzIDM4LjkyMjQgMjUuOTcyOEMzNC44MDI5IDI2LjMwMzUgMzAuNzQzNSAyNi4xNTMyIDI2LjcxNDIgMjUuMTkxQzI1LjM5MTEg''@;'; put 'put ''MjQuODkwMyAyNC4wOTgxIDI0LjQ2OTMgMjIuOTI1NCAyMy44MDc4QzIyLjQ3NDQgMjMuNTY3MiAyMi4wNTM0IDIzLjI2NjUgMjEuNjYyNSAyMi45MDU3QzIwLjU4IDIxLjg1MzMgMjAuNTggMjAuNzQwNyAyMS42OTI2IDE5Ljc0ODRDMjIuODk1NCAxOC42NjU5IDI0LjM2ODggMTguMTU0NyAy''@;'; put 'put ''NS44NzIyIDE3LjczMzdDMjcuOTc3MSAxNy4xMzI0IDMwLjExMiAxNi44MzE3IDMyLjI3NyAxNi42ODEzQzMyLjQ1NzUgMTYuNjgxMyAzMi42Njc5IDE2Ljc0MTUgMzIuODE4MyAxNi41OTExQzM0LjM4MTkgMTYuNjIxMiAzNi4wMDU2IDE2LjYyMTIgMzcuNTk5MyAxNi42MjEyWiIgZmlsbD0i''@;'; put 'put ''I0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODUwNyA0MS4zMDgyQzIyLjc3NTEgNDMuNzczOCAyNS41MTE1IDQ0LjY3NTkgMjguMzM4IDQ1LjI3NzNDMzMuOTMwOSA0Ni40ODAxIDM5LjUyMzggNDYuMzI5NyA0NC45NjYzIDQ0LjQwNTNDNDYuNjUwMiA0My44MDM5IDQ4LjIxMzggNDIuOTkyIDQ5''@;'; put 'put ''LjMyNjQgNDEuNDg4NkM0OS41MDY4IDQxLjI0OCA0OS41OTcgNDEuMzY4MyA0OS42ODcyIDQxLjU0ODdDNDkuODY3NyA0MS45Mzk2IDQ5Ljk1NzkgNDIuMzMwNSA0OS45NTc5IDQyLjc1MTVDNDkuOTU3OSA0NC4yMjQ5IDQ5Ljk1NzkgNDUuNzI4NCA0OS45NTc5IDQ3LjIwMThDNDkuOTU3OSA0''@;'; put 'put ''OC4xNjQgNDkuNTA2OCA0OC45MTU3IDQ4Ljg0NTMgNDkuNTc3MkM0Ny40NjIxIDUwLjk2MDQgNDUuNzE4MSA1MS43MTIyIDQzLjg4MzggNTIuMjgzNUM0MC4xODUzIDUzLjQyNjEgMzYuMzk2NiA1My42NjY3IDMyLjU3NzcgNTMuMzk2MUMyOS43MjEyIDUzLjE4NTYgMjYuOTU0OCA1Mi42NDQz''@;'; put 'put ''IDI0LjMzODcgNTEuNDcxNkMyMy4yMjYxIDUwLjk2MDQgMjIuMjAzOCA1MC4zNTkxIDIxLjM5MTkgNDkuNDI2OUMyMC43NjA1IDQ4LjcwNTIgMjAuNDI5NyA0Ny44OTM0IDIwLjQyOTcgNDYuOTMxMUMyMC40NTk4IDQ1LjU3OCAyMC40Mjk3IDQ0LjIyNDkgMjAuNDI5NyA0Mi44NzE4QzIwLjQy''@;'; put 'put ''OTcgNDIuMzMwNSAyMC41MTk5IDQxLjgxOTMgMjAuODUwNyA0MS4zMDgyWiIgZmlsbD0iIzhFQzYzRiIvPgo8cGF0aCBkPSJNMjAuODgwNyAzMi4wMTY3QzIyLjQ3NDQgMzQuMTUxNiAyNC42OTk2IDM1LjA1MzcgMjcuMDc1IDM1LjY4NTJDMzIuNzU4MiAzNy4xODg2IDM4LjQ0MTMgMzcuMTU4''@;'; put 'put ''NiA0NC4wNjQzIDM1LjQ3NDdDNDUuOTI4NiAzNC45MzM0IDQ3LjY3MjYgMzQuMTIxNiA0OS4wMjU4IDMyLjY0ODJDNDkuMjA2MiAzMi40Njc3IDQ5LjMyNjUgMzIuMDQ2OCA0OS41MzY5IDMyLjEwNjlDNDkuODM3NiAzMi4xOTcxIDQ5LjgzNzYgMzIuNjE4MSA0OS45Mjc4IDMyLjk0ODhDNTAu''@;'; put 'put ''MDQ4MSAzMy40NiA0OS45ODggMzMuOTcxMiA0OS45ODggMzQuNDgyNEM0OS45ODggMzUuNTA0NyA0OS45NTc5IDM2LjQ5NyA0OS45ODggMzcuNTE5NEM1MC4wNDgxIDM4Ljc4MjMgNDkuNTM2OSAzOS43NzQ2IDQ4LjYwNDggNDAuNTg2NUM0Ny4xOTE1IDQxLjg0OTQgNDUuNDc3NiA0Mi42MDEx''@;'; put 'put ''IDQzLjY0MzMgNDMuMDgyMkMzNy40NzkxIDQ0LjczNjEgMzEuMzQ0OSA0NC43MDYgMjUuMzAwOSA0Mi42MDExQzIzLjgyNzUgNDIuMDkgMjIuNDc0NCA0MS4zNjgzIDIxLjM5MTkgNDAuMTk1NkMyMC43MzA0IDM5LjQ3MzkgMjAuMzk5NyAzOC42MzIgMjAuMzk5NyAzNy42Mzk3QzIwLjQyOTcg''@;'; put 'put ''MzYuMzE2NiAyMC4zOTk3IDM0Ljk2MzUgMjAuMzk5NyAzMy42NDA0QzIwLjQyOTcgMzMuMDk5MiAyMC41MTk5IDMyLjU1NzkgMjAuODgwNyAzMi4wMTY3WiIgZmlsbD0iI0UwRTBFMCIvPgo8cGF0aCBkPSJNMjAuODIwNyAyMy4wODYxQzIxLjI3MTcgMjQuNDA5MSAyMi4zNTQyIDI1LjAxMDUg''@;'; put 'put ''MjMuNDk2OSAyNS41NTE3QzI1LjU0MTYgMjYuNTE0IDI3LjczNjYgMjYuOTY1IDI5LjkzMTcgMjcuMjM1N0MzNC4yOTE4IDI3Ljc3NjkgMzguNjUxOSAyNy43MTY4IDQyLjk1MTggMjYuODE0N0M0NC42OTU4IDI2LjQ1MzkgNDYuMzc5NyAyNS45NzI3IDQ3LjkxMzIgMjUuMDEwNUM0OC43ODUz''@;'; put 'put ''IDI0LjQ2OTMgNDkuMjM2MyAyMy45NTgxIDQ5LjUzNyAyMy4xMTYxQzQ5LjgzNzcgMjMuNTM3MSA0OS45Mjc5IDIzLjk4ODIgNDkuOTI3OSAyNC40MzkyQzQ5LjkyNzkgMjUuOTQyNyA0OS45NTggMjcuNDE2MSA0OS45Mjc5IDI4LjkxOTVDNDkuODk3OCAzMC4xODI1IDQ5LjE3NjIgMzEuMDg0''@;'; put 'put ''NSA0OC4yNDQgMzEuODM2M0M0Ni41IDMzLjIxOTUgNDQuNDU1MyAzMy45NDExIDQyLjMyMDMgMzQuNDIyM0MzNi42NjczIDM1LjY1NTEgMzEuMDc0NCAzNS41NjQ5IDI1LjU3MTcgMzMuNzAwNkMyNC4xMjgzIDMzLjIxOTUgMjIuNzQ1MSAzMi41Mjc5IDIxLjYzMjYgMzEuNDQ1NEMyMC43OTA2''@;'; put 'put ''IDMwLjYzMzUgMjAuMzM5NiAyOS43MDE0IDIwLjM2OTYgMjguNDk4NkMyMC4zOTk3IDI3LjIwNTYgMjAuMzY5NiAyNS45MTI2IDIwLjM2OTYgMjQuNjE5NkMyMC40Mjk4IDI0LjA0ODMgMjAuNTIgMjMuNTY3MiAyMC44MjA3IDIzLjA4NjFaIiBmaWxsPSIjOEVDNjNGIi8+CjxwYXRoIGQ9Ik01''@;'; put 'put ''NS4zNDAzIDYzLjQzOTNDNjAuMjQxNyA2My43MDk5IDYyLjg1NzcgNTcuNjk2IDU5LjMwOTUgNTQuMjk4MUM1NS41ODA5IDUwLjcxOTkgNDkuNDQ2NyA1NC4wNTc2IDUwLjQwOSA1OS4xMDkzQzI4LjI0NzggNzMuMjQxOSAtMC4yNTgwMzQgNTIuMTAzMSA3Ljg2MDcxIDI2LjQyMzhMMi4zODgw''@;'; put 'put ''OCAyMi43NTUzQy05LjkxMDMzIDU1LjQ0MDggMjcuOTQ3MSA4My4wNzQ2IDU1LjM0MDMgNjMuNDM5M1pNNTMuNzc2NyA1Ni4zNzI5QzU2LjA2MiA1My45OTc0IDU5LjcwMDQgNTcuMzA1MSA1Ny41NjU1IDU5LjgwMDlDNTUuMzEwMyA2Mi40MTY5IDUxLjM0MTEgNTguODk4OCA1My43NzY3IDU2''@;'; put 'put ''LjM3MjlaIiBmaWxsPSIjRTBFMEUwIi8+CjxwYXRoIGQ9Ik0xMC42MjcyIDE1LjI2ODFDMTQuMTQ1MyAxOC42MzU4IDE5Ljk0ODcgMTUuODY5NCAxOS42MTc5IDExLjA1ODNDNDEuNzQ5IC0zLjE5NDYxIDcwLjQwNTIgMTcuOTE0MiA2Mi4yODY1IDQzLjY4MzZMNjcuNzU5MSA0Ny4zNTIxQzc5''@;'; put 'put ''LjY5NjcgMTUuNTk4OCA0My40NjMgLTEyLjk5NzIgMTUuNDM4MyA2LjIxNzE1QzEwLjE3NjEgNS4xMzQ2NSA2Ljc3ODI3IDExLjU2OTUgMTAuNjI3MiAxNS4yNjgxWk0xNi4xNTk5IDEzLjE5MzNDMTMuODE0NSAxNS42Mjg5IDEwLjExNiAxMi4wODA3IDEyLjQ2MTQgOS42NDUwN0MxNC44MDY4''@;'; put 'put ''IDcuMjA5NDQgMTguNTA1NCAxMC43NTc2IDE2LjE1OTkgMTMuMTkzM1oiIGZpbGw9IiM4RUM2M0YiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMDFfOCI+CjxyZWN0IHdpZHRoPSI3MCIgaGVpZ2h0PSI3MCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8''@;'; put 'put ''L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=favicon-ico; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP''@;'; put 'put ''AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/''@;'; put 'put ''P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1''@;'; put 'put ''wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h''@;'; put 'put ''zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS''@;'; put 'put ''O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ''@;'; put 'put ''CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD''@;'; put 'put ''mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy''@;'; put 'put ''n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY''@;'; put 'put ''SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR''@;'; put 'put ''PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01''@;'; put 'put ''6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10''@;'; put 'put ''3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi''@;'; put 'put ''p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4''@;'; put 'put ''nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy''@;'; put 'put ''Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj''@;'; put 'put ''Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0''@;'; put 'put ''N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv''@;'; put 'put ''Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA''@;'; put 'put ''n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y''@;'; put 'put ''Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp''@;'; put 'put ''b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB''@;'; put 'put ''VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ''@;'; put 'put ''eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ''@;'; put 'put ''AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB''@;'; put 'put ''TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z''@;'; put 'put ''UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg''@;'; put 'put ''ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p''@;'; put 'put ''qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe''@;'; put 'put ''EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN''@;'; put 'put ''TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS''@;'; put 'put ''Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu''@;'; put 'put ''9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN''@;'; put 'put ''VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p''@;'; put 'put ''G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs''@;'; put 'put ''InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg''@;'; put 'put ''DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa''@;'; put 'put ''K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH''@;'; put 'put ''cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM''@;'; put 'put ''RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W''@;'; put 'put ''jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH''@;'; put 'put ''NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy''@;'; put 'put ''F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB''@;'; put 'put ''QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD''@;'; put 'put ''bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S''@;'; put 'put ''AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A''@;'; put 'put ''3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc''@;'; put 'put ''uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN''@;'; put 'put ''Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B''@;'; put 'put ''CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm''@;'; put 'put ''7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG''@;'; put 'put ''bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh''@;'; put 'put ''3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV''@;'; put 'put ''ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL''@;'; put 'put ''LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg''@;'; put 'put ''a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp''@;'; put 'put ''P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp''@;'; put 'put ''QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5''@;'; put 'put ''RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh''@;'; put 'put ''KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu''@;'; put 'put ''9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3''@;'; put 'put ''t4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ''@;'; put 'put ''APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s''@;'; put 'put ''fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY''@;'; put 'put ''FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH''@;'; put 'put ''UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB''@;'; put 'put ''GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4''@;'; put 'put ''ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+''@;'; put 'put ''Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp''@;'; put 'put ''PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM''@;'; put 'put ''sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ''@;'; put 'put ''QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s''@;'; put 'put ''Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al''@;'; put 'put ''ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ''@;'; put 'put ''RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP''@;'; put 'put ''qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW''@;'; put 'put ''xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d''@;'; put 'put ''k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b''@;'; put 'put ''M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL''@;'; put 'put ''bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW''@;'; put 'put ''/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm''@;'; put 'put ''LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl''@;'; put 'put ''YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v''@;'; put 'put ''iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf''@;'; put 'put ''az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1''@;'; put 'put ''MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30''@;'; put 'put ''tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN''@;'; put 'put ''YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl''@;'; put 'put ''91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD''@;'; put 'put ''20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk''@;'; put 'put ''QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K''@;'; put 'put ''LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5''@;'; put 'put ''kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt''@;'; put 'put ''gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9''@;'; put 'put ''bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX''@;'; put 'put ''C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7''@;'; put 'put ''BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw''@;'; put 'put ''cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM''@;'; put 'put ''xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN''@;'; put 'put ''P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s''@;'; put 'put ''3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt''@;'; put 'put ''zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX''@;'; put 'put ''sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t''@;'; put 'put ''SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr''@;'; put 'put ''1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895''@;'; put 'put ''TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn''@;'; put 'put ''vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz''@;'; put 'put ''vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx''@;'; put 'put ''hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy''@;'; put 'put ''OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb''@;'; put 'put ''1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0''@;'; put 'put ''wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ''@;'; put 'put ''jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2''@;'; put 'put ''I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH''@;'; put 'put ''2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5''@;'; put 'put ''JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt''@;'; put 'put ''urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ''@;'; put 'put ''Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ''@;'; put 'put ''yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w''@;'; put 'put ''JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ''@;'; put 'put ''oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537''@;'; put 'put ''XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q''@;'; put 'put ''XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6''@;'; put 'put ''13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK''@;'; put 'put ''RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H''@;'; put 'put ''KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV''@;'; put 'put ''HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA''@;'; put 'put ''i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj''@;'; put 'put ''BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2''@;'; put 'put ''PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr''@;'; put 'put ''DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp''@;'; put 'put ''xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8''@;'; put 'put ''EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye''@;'; put 'put ''BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ''@;'; put 'put ''2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk''@;'; put 'put ''T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA''@;'; put 'put ''Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK''@;'; put 'put ''7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa''@;'; put 'put ''Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT''@;'; put 'put ''DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7''@;'; put 'put ''9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv''@;'; put 'put ''wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ''@;'; put 'put ''AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG''@;'; put 'put ''x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6''@;'; put 'put ''VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj''@;'; put 'put ''O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI''@;'; put 'put ''fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca''@;'; put 'put ''+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G''@;'; put 'put ''WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq''@;'; put 'put ''McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD''@;'; put 'put ''CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje''@;'; put 'put ''pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L''@;'; put 'put ''/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re''@;'; put 'put ''qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm''@;'; put 'put ''y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583''@;'; put 'put ''P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p''@;'; put 'put ''QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE''@;'; put 'put ''ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh''@;'; put 'put ''3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr''@;'; put 'put ''P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU''@;'; put 'put ''HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d''@;'; put 'put ''B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK''@;'; put 'put ''oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe''@;'; put 'put ''+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu''@;'; put 'put ''9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5''@;'; put 'put ''tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd''@;'; put 'put ''LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG''@;'; put 'put ''7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP''@;'; put 'put ''6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw''@;'; put 'put ''LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a''@;'; put 'put ''NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54''@;'; put 'put ''FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u''@;'; put 'put ''b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY''@;'; put 'put ''A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha''@;'; put 'put ''U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl''@;'; put 'put ''uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM''@;'; put 'put ''GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA''@;'; put 'put ''GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi''@;'; put 'put ''0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+''@;'; put 'put ''1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl''@;'; put 'put ''+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN''@;'; put 'put ''alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp''@;'; put 'put ''JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL''@;'; put 'put ''kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy''@;'; put 'put ''uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm''@;'; put 'put ''UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw''@;'; put 'put ''9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz''@;'; put 'put ''vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p''@;'; put 'put ''JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U''@;'; put 'put ''70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95''@;'; put 'put ''EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24''@;'; put 'put ''7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX''@;'; put 'put ''H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o''@;'; put 'put ''Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ''@;'; put 'put ''JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ''@;'; put 'put ''FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A''@;'; put 'put ''jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o''@;'; put 'put ''+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf''@;'; put 'put ''8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA''@;'; put 'put ''QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX''@;'; put 'put ''09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC''@;'; put 'put ''3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn''@;'; put 'put ''/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS''@;'; put 'put ''RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt''@;'; put 'put ''5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy''@;'; put 'put ''o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV''@;'; put 'put ''8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E''@;'; put 'put ''8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8''@;'; put 'put ''8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0''@;'; put 'put ''VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK''@;'; put 'put ''1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw''@;'; put 'put ''Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU''@;'; put 'put ''Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz''@;'; put 'put ''HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3''@;'; put 'put ''uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW''@;'; put 'put ''hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N''@;'; put 'put ''eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl''@;'; put 'put ''4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0''@;'; put 'put ''xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP''@;'; put 'put ''+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh''@;'; put 'put ''Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6''@;'; put 'put ''Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7''@;'; put 'put ''7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw''@;'; put 'put ''PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze''@;'; put 'put ''hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK''@;'; put 'put ''qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz''@;'; put 'put ''0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i''@;'; put 'put ''zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ''@;'; put 'put ''mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo''@;'; put 'put ''ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH''@;'; put 'put ''v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S''@;'; put 'put ''BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp''@;'; put 'put ''Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte''@;'; put 'put ''/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku''@;'; put 'put ''5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus''@;'; put 'put ''k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt''@;'; put 'put ''PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V''@;'; put 'put ''J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN''@;'; put 'put ''undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v''@;'; put 'put ''YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m''@;'; put 'put ''AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO''@;'; put 'put ''Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v''@;'; put 'put ''yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4''@;'; put 'put ''QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b''@;'; put 'put ''1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl''@;'; put 'put ''43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe''@;'; put 'put ''nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4''@;'; put 'put ''Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML''@;'; put 'put ''YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k''@;'; put 'put ''MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//''@;'; put 'put ''/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO''@;'; put 'put ''4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce''@;'; put 'put ''rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr''@;'; put 'put ''kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7''@;'; put 'put ''Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg''@;'; put 'put ''4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp''@;'; put 'put ''mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f''@;'; put 'put ''8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY''@;'; put 'put ''9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo''@;'; put 'put ''soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx''@;'; put 'put ''0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB''@;'; put 'put ''R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO''@;'; put 'put ''/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn''@;'; put 'put ''RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i''@;'; put 'put ''wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y''@;'; put 'put ''FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR''@;'; put 'put ''G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm''@;'; put 'put ''k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj''@;'; put 'put ''HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW''@;'; put 'put ''cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm''@;'; put 'put ''/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r''@;'; put 'put ''SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU''@;'; put 'put ''PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL''@;'; put 'put ''hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu''@;'; put 'put ''1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV''@;'; put 'put ''0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7''@;'; put 'put ''9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ''@;'; put 'put ''P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm''@;'; put 'put ''SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3''@;'; put 'put ''z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL''@;'; put 'put ''bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV''@;'; put 'put ''jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV''@;'; put 'put ''WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI''@;'; put 'put ''G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH''@;'; put 'put ''i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e''@;'; put 'put ''v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt''@;'; put 'put ''AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum''@;'; put 'put ''wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1''@;'; put 'put ''2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v''@;'; put 'put ''a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L''@;'; put 'put ''A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV''@;'; put 'put ''Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0''@;'; put 'put ''9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T''@;'; put 'put ''Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO''@;'; put 'put ''bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw''@;'; put 'put ''+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57''@;'; put 'put ''Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n''@;'; put 'put ''a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq''@;'; put 'put ''sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu''@;'; put 'put ''HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk''@;'; put 'put ''H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw''@;'; put 'put ''rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq''@;'; put 'put ''N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/''@;'; put 'put ''kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O''@;'; put 'put ''Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM''@;'; put 'put ''8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ''@;'; put 'put ''wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM''@;'; put 'put ''1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL''@;'; put 'put ''Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR''@;'; put 'put ''R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim''@;'; put 'put ''txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk''@;'; put 'put ''7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj''@;'; put 'put ''6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA''@;'; put 'put ''o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17''@;'; put 'put ''9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm''@;'; put 'put ''UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8''@;'; put 'put ''/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6''@;'; put 'put ''WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E''@;'; put 'put ''hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC''@;'; put 'put ''LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA''@;'; put 'put ''EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6''@;'; put 'put ''0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy''@;'; put 'put ''oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC''@;'; put 'put ''GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/''@;'; put 'put ''Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz''@;'; put 'put ''jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w''@;'; put 'put ''763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6''@;'; put 'put ''Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX''@;'; put 'put ''3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb''@;'; put 'put ''YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ''@;'; put 'put ''vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7''@;'; put 'put ''yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz''@;'; put 'put ''4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O''@;'; put 'put ''d1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL''@;'; put 'put ''AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc''@;'; put 'put ''PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g''@;'; put 'put ''IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI''@;'; put 'put ''aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9''@;'; put 'put ''8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on''@;'; put 'put ''CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto''@;'; put 'put ''59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx''@;'; put 'put ''P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb''@;'; put 'put ''nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP''@;'; put 'put ''M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K''@;'; put 'put ''72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ''@;'; put 'put ''8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE''@;'; put 'put ''gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n''@;'; put 'put ''M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d''@;'; put 'put ''eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF''@;'; put 'put ''IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ''@;'; put 'put ''TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn''@;'; put 'put ''aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X''@;'; put 'put ''iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L''@;'; put 'put ''1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/''@;'; put 'put ''UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE''@;'; put 'put ''aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy''@;'; put 'put ''dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA''@;'; put 'put ''SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl''@;'; put 'put ''wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf''@;'; put 'put ''r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW''@;'; put 'put ''clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU''@;'; put 'put ''3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd''@;'; put 'put ''nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2''@;'; put 'put ''EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v''@;'; put 'put ''ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul''@;'; put 'put ''JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm''@;'; put 'put ''0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3''@;'; put 'put ''ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA''@;'; put 'put ''EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI''@;'; put 'put ''9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T''@;'; put 'put ''JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ''@;'; put 'put ''M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn''@;'; put 'put ''LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb''@;'; put 'put ''fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H''@;'; put 'put ''DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH''@;'; put 'put ''VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m''@;'; put 'put ''qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b''@;'; put 'put ''hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X''@;'; put 'put ''/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+''@;'; put 'put ''/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu''@;'; put 'put ''PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS''@;'; put 'put ''qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN''@;'; put 'put ''V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p''@;'; put 'put ''pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt''@;'; put 'put ''D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y''@;'; put 'put ''dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU''@;'; put 'put ''aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a''@;'; put 'put ''ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd''@;'; put 'put ''undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk''@;'; put 'put ''WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd''@;'; put 'put ''RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw''@;'; put 'put ''a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz''@;'; put 'put ''/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx''@;'; put 'put ''DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/''@;'; put 'put ''v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL''@;'; put 'put ''qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O''@;'; put 'put ''BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX''@;'; put 'put ''jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf''@;'; put 'put ''v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY''@;'; put 'put ''vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn''@;'; put 'put ''pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk''@;'; put 'put ''gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830''@;'; put 'put ''8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2''@;'; put 'put ''STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs''@;'; put 'put ''qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL''@;'; put 'put ''vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV''@;'; put 'put ''AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3''@;'; put 'put ''Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84''@;'; put 'put ''rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li''@;'; put 'put ''lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT''@;'; put 'put ''9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ''@;'; put 'put ''m+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le''@;'; put 'put ''p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl''@;'; put 'put ''OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0''@;'; put 'put ''GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi''@;'; put 'put ''Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh''@;'; put 'put ''RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef''@;'; put 'put ''HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w''@;'; put 'put ''6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1''@;'; put 'put ''NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz''@;'; put 'put ''zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh''@;'; put 'put ''iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII''@;'; put 'put ''A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM''@;'; put 'put ''DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV''@;'; put 'put ''DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9''@;'; put 'put ''NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI''@;'; put 'put ''MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj''@;'; put 'put ''KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky''@;'; put 'put ''raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x''@;'; put 'put ''ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ''@;'; put 'put ''ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N''@;'; put 'put ''sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU''@;'; put 'put ''XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS''@;'; put 'put ''wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ''@;'; put 'put ''AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs''@;'; put 'put ''wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF''@;'; put 'put ''prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg=='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=spinner.16f763cebc6b64df-svg; filename sascode temp lrecl=32767; data _null_; file sascode; put 'options mprint;'; put '%macro mp_replace(infile,'; put 'findvar=,'; put 'replacevar=,'; put 'outfile=0'; put ')/*/STORE SOURCE*/;'; put '%local inref outref dttm ds1 rc;'; put '/* create filerefs */'; put '%let rc=%sysfunc(filename(inref,,temp,lrecl=200));'; put '%let rc=%sysfunc(filename(outref,,temp,lrecl=200));'; put '%if &outfile=0 %then %let outfile=&infile;'; put '/* uniquely named 32 char datasets */'; put '%let ds1=all%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,29);'; put '%let ds2=start%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,27);'; put '/* START */'; put '%let dttm=%sysfunc(datetime());'; put 'filename &inref &infile lrecl=1 recfm=n;'; put 'data &ds1;'; put 'infile &inref;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'run;'; put 'data &ds2;'; put '/* set find string to length in bytes to cover trailing spaces */'; put 'length string $ %length(%superq(&findvar));'; put 'string =symget("&findvar");'; put 'drop string;'; put 'firstchar=char(string,1);'; put 'findlen=lengthm(string); /* <- for trailing bytes */'; put 'do _N_=1 to nobs;'; put 'set &ds1 nobs=nobs point=_N_;'; put 'if sourcechar=firstchar then do;'; put 'pos=1;'; put 's=0;'; put 'do point=_N_ to min(_N_ + findlen -1,nobs);'; put 'set &ds1 point=point;'; put 'if sourcechar=char(string, pos) then s + 1;'; put 'else goto _leave_;'; put 'pos+1;'; put 'end;'; put '_leave_:'; put 'if s=findlen then do;'; put 'START =_N_;'; put '_N_ =_N_+ s - 1;'; put 'STOP =_N_;'; put 'output;'; put 'end;'; put 'end;'; put 'end;'; put 'stop;'; put 'keep START STOP;'; put 'run;'; put 'data &ds1;'; put 'declare hash HS(dataset:"&ds2(keep=start)");'; put 'HS.defineKey("start");'; put 'HS.defineDone();'; put 'declare hash HE(dataset:"&ds2(keep=stop)");'; put 'HE.defineKey("stop");'; put 'HE.defineDone();'; put 'do until(eof);'; put 'set &ds1 end=eof curobs =n;'; put 'start = ^HS.check(key:n);'; put 'stop = ^HE.check(key:n);'; put 'length strt $ 1;'; put 'strt =put(start,best. -L);'; put 'retain out 1;'; put 'if out then output;'; put 'if start then out=0;'; put 'if stop then out=1;'; put 'end;'; put 'stop;'; put 'keep sourcechar strt;'; put 'run;'; put 'filename &outref &outfile recfm=n;'; put 'data _null_;'; put 'length replace $ %length(%superq(&replacevar));'; put 'replace=symget("&replacevar");'; put 'file &outref;'; put 'do until(eof);'; put 'set &ds1 end=eof;'; put 'if strt ="1" then put replace char.;'; put 'else put sourcechar char1.;'; put 'end;'; put 'stop;'; put 'run;'; put '/* END */'; put '%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;'; put '%mend mp_replace;'; put '%macro sasjsout(type,fref=sasjs);'; put '%global sysprocessmode SYS_JES_JOB_URI;'; put '%if &type=JS or &type=JS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header('; put 'Content-type,application/javascript%str(;)charset=UTF-8'; put '));'; put '%end;'; put '%else %if &type=CSS or &type=CSS64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,text/css));'; put '%end;'; put '%else %if &type=PNG or &type=GIF or &type=JPEG or &type=JPG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/%lowcase(&type)));'; put '%end;'; put '%else %if &type=SVG or &type=SVG64 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/svg+xml));'; put '%end;'; put '%else %if &type=ICO %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,image/vnd.microsoft.icon));'; put '%end;'; put '%else %if &type=JSON %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,application/json));'; put '%end;'; put '%else %if &type=MP3 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/mpeg));'; put '%end;'; put '%else %if &type=WAV %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/x-wav));'; put '%end;'; put '%else %if &type=OGG %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,audio/ogg));'; put '%end;'; put '%else %if &type=WOFF or &type=WOFF2 or &type=TTF %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,font/%lowcase(&type)));'; put '%end;'; put '%else %if &type=MP4 %then %do;'; put '%let rc=%sysfunc(stpsrv_header(Content-type,video/mp4));'; put '%end;'; put '%if &type=HTML %then %do;'; put '/*'; put 'We need to perform some substitutions -eg to get the APPLOC and SERVERTYPE.'; put 'Therefore the developer should avoid writing lines that exceed 32k'; put 'characters (eg base64 encoded images) as they will get truncated when passing'; put 'through the datastep. This could of course be re-written using LUA, removing'; put 'the length restriction. Pull requests are welcome!'; put '*/'; put 'filename _sjsout temp;'; put 'data _null_;'; put 'file _sjsout lrecl=32767 encoding=''utf-8'';'; put 'infile &fref lrecl=32767;'; put 'input;'; put 'length appLoc expanded_path $1048;'; put 'if _n_=1 then do;'; put 'retain pgm "&_program" appLoc expanded_path;'; put '/* index is deployed in the /services/ folder under the appLoc */'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'expanded_path=cats(''?_PROGRAM='',appLoc,''/services/'');'; put 'end;'; put 'if find(_infile_,'' appLoc: '') then put '' appLoc: '' apploc:$quote1048. '','';'; put 'else if find(_infile_,'' serverType: '') then do;'; put 'put '' serverType: "SAS9" ,'';'; put 'end;'; put 'else if find(_infile_,'' serverUrl: '') then do;'; put '/* nothing - we are streaming, so remove to default as hostname */'; put 'end;'; put 'else do;'; put '/* More recently, SASjs apps avoid inline JS to allow strict CSP */'; put 'length infile in1 in2 $32767;'; put 'infile=cats(_infile_);'; put 'spos1=index(upcase(infile),''APPLOC="'');'; put 'if spos1>0 then do;'; put 'in1=substr(infile,1,spos1+7);'; put 'in2=subpad(infile,spos1+8);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,appLoc,in2);'; put 'putlog "new apploc: " infile=;'; put 'end;'; put '/* find & replace serverType in HTML attributes */'; put 'spos2=index(upcase(infile),''SERVERTYPE="'');'; put 'if spos2>0 then do;'; put 'in1=substr(infile,1,spos2+11);'; put 'in2=subpad(infile,spos2+12);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,"SAS9",in2);'; put 'putlog "new servertype: " infile=;'; put 'end;'; put '/* find & replace serverUrl in HTML attributes */'; put 'spos3=index(upcase(infile),''SERVERURL="'');'; put 'if spos3>0 then do;'; put 'in1=substr(infile,1,spos3+10);'; put 'in2=subpad(infile,spos3+11);'; put 'in2=substr(in2,index(in2,''"''));'; put 'infile=cats(in1,in2);'; put 'putlog "new serverUrl: " infile=;'; put 'end;'; put 'if sum(spos1,spos2,spos3)>0 then put infile;'; put 'else do;'; put '/* during SAS9 sasjs compile, dependencies get static GUID */'; put 'infile=tranwrd(_infile_,''?_PROGRAM=pZKd6F95jECvRQlN0LCfdA=='',cats(expanded_path));'; put 'put infile;'; put 'end;'; put 'end;'; put 'run;'; put '%let fref=_sjsout;'; put '%end;'; put '%else %if &type=JS64 or &type=CSS64 %then %do;'; put 'options nobomfile;'; put '%let fvar=pZKd6F95jECvRQlN0LCfdA==;'; put '%let stgfile="%sysfunc(pathname(work))/stgfile.txt";'; put '%let newfile="%sysfunc(pathname(work))/newfile.txt";'; put '/* convert from base64 */'; put 'filename _out64 &stgfile encoding=''utf-8'';'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_out64",''A'',1,''B'');'; put 'char= ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc =fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '/* get appLoc from _program */'; put 'data _null_;'; put 'pgm="&_program";'; put 'appLoc=substr(pgm,1,find(pgm,''/services/'')-1);'; put 'call symputx(''apploc'',cats(appLoc,''/services/''));'; put 'run;'; put '%put &=fvar;'; put '%put &=apploc;'; put '/* replace the GUID with appLoc */'; put '%mp_replace(&stgfile,'; put 'findvar=fvar,'; put 'replacevar=apploc,'; put 'outfile=&newfile'; put ')'; put 'filename &fref &newfile encoding=''utf-8'';'; put '%end;'; put '/**'; put '* In SAS9, JS & CSS files are base64 encoded to avoid UTF8 issues in WLATIN1'; put '* metadata - so in this case, decode and stream byte by byte.'; put '* */'; put '%if &type=GIF or &type=PNG or &type=JPG or &type=JPEG or &type=ICO or &type=MP3'; put 'or &type=WAV or &type=OGG or &type=WOFF or &type=WOFF2 or &type=TTF or &type=MP4'; put 'or &type=SVG64'; put '%then %do;'; put 'data _null_;'; put 'length filein 8 fileout 8;'; put 'filein = fopen("&fref",''I'',4,''B'');'; put 'fileout = fopen("_webout",''A'',1,''B'');'; put 'char = ''20''x;'; put 'do while(fread(filein)=0);'; put 'length raw $4 ;'; put 'do i=1 to 4;'; put 'rc=fget(filein,char,1);'; put 'substr(raw,i,1)=char;'; put 'end;'; put 'rc = fput(fileout, input(raw,$base64X4.));'; put 'rc = fwrite(fileout);'; put 'end;'; put 'rc = fclose(filein);'; put 'rc = fclose(fileout);'; put 'run;'; put '%end;'; put '%else %do;'; put '%put streaming to _webout;'; put 'data _null_;'; put 'infile &fref lrecl=1 recfm=n;'; put 'file _webout mod lrecl=1 recfm=n;'; put 'input sourcechar $char1. @@;'; put 'format sourcechar hex2.;'; put 'put sourcechar char1. @@;'; put 'run;'; put '%end;'; put '%mend sasjsout;'; put 'filename sasjs temp lrecl=99999999;'; put 'data _null_;'; put 'file sasjs;'; put 'put ''PHN2ZyBpZD0iTGF5ZXJfMiIgZGF0YS1uYW1lPSJMYXllciAyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3MiA3MiI+CiAgICA8ZGVmcz4KICAgICAgICA8c3R5bGU+CiAgICAgICAgICAgIC5jbHMtMSwKICAgICAgICAgICAgLmNscy0yIHsKICAg''@;'; put 'put ''ICAgICAgICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgICAgICAgICBzdHJva2UtbWl0ZXJsaW1pdDogMTA7CiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IDVweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAuY2xzLTEgewogICAgICAgICAgICAgICAgc3Ryb2tlOiAjMDAwMDAw''@;'; put 'put ''OwogICAgICAgICAgICAgICAgc3Ryb2tlLW9wYWNpdHk6IDAuMTU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLmNscy0yIHsKICAgICAgICAgICAgICAgIHN0cm9rZTogIzAwNzJhMzsKICAgICAgICAgICAgfQogICAgICAgIDwvc3R5bGU+CiAgICA8L2RlZnM+CiAgICA8dGl0bGU+UHJl''@;'; put 'put ''bG9hZGVyXzcyeDI8L3RpdGxlPgogICAgPGNpcmNsZSBjbGFzcz0iY2xzLTEiIGN4PSIzNiIgY3k9IjM2IiByPSIzMyIvPgogICAgPHBhdGggY2xhc3M9ImNscy0yIiBkPSJNMTQuMyw2MC45QTMzLDMzLDAsMCwxLDM2LDMiPgogICAgPC9wYXRoPgo8L3N2Zz4K'';'; put 'run;'; put '%sasjsout(SVG64)'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; options notes; data _null_; format url $256.; rc=METADATA_GETURI("Stored Process Web App",url); url=coalescec(url,"localhost/SASStoredProcess"); urlEscaped = tranwrd(trim(url)," ","%20"); putlog "NOTE: SASjs Streaming App Created! Check it out here:" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; putlog "NOTE- " urlEscaped +(-1) "?_program=&appLoc/services/clickme" ; putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- ";putlog "NOTE- "; run;